diff --git a/camera.js b/camera.js index fc3c331..51802f6 100644 --- a/camera.js +++ b/camera.js @@ -13,6 +13,9 @@ process.on('uncaughtException', function (err) { console.error('Uncaught Exception occured!'); console.error(err.stack); }); +process.on('SIGINT', function() { + process.exit(); +}); var staticFFmpeg = false; try{ staticFFmpeg = require('ffmpeg-static').path; @@ -24,7 +27,6 @@ try{ }catch(err){ staticFFmpeg = false; console.log('No Static FFmpeg. Continuing.') - //no static ffmpeg } var os = require('os'); var URL = require('url'); @@ -51,6 +53,7 @@ var jsonfile = require("jsonfile"); var connectionTester = require('connection-tester'); var events = require('events'); var onvif = require('node-onvif'); +var onvifHawk = require('onvif-nvt'); var knex = require('knex'); var Mp4Frag = require('mp4frag'); var P2P = require('pipe2pam'); @@ -88,75 +91,46 @@ try{ } process.send = process.send || function () {}; if(config.mail){ + if(config.mail.from === undefined){config.mail.from = '"ShinobiCCTV" '} var nodemailer = require('nodemailer').createTransport(config.mail); } //config defaults -if(config.cpuUsageMarker===undefined){config.cpuUsageMarker='%Cpu'} -if(config.customCpuCommand===undefined){config.customCpuCommand=null} -if(config.autoDropCache===undefined){config.autoDropCache=true} -if(config.doSnapshot===undefined){config.doSnapshot=true} -if(config.restart===undefined){config.restart={}} -if(config.systemLog===undefined){config.systemLog=true} -if(config.deleteCorruptFiles===undefined){config.deleteCorruptFiles=true} -if(config.restart.onVideoNotExist===undefined){config.restart.onVideoNotExist=true} -if(config.ip===undefined||config.ip===''||config.ip.indexOf('0.0.0.0')>-1){config.ip='localhost'}else{config.bindip=config.ip}; -if(config.cron===undefined)config.cron={}; -if(config.cron.enabled===undefined)config.cron.enabled=true; -if(config.cron.deleteOld===undefined)config.cron.deleteOld=true; -if(config.cron.deleteOrphans===undefined)config.cron.deleteOrphans=false; -if(config.cron.deleteNoVideo===undefined)config.cron.deleteNoVideo=true; -if(config.cron.deleteNoVideoRecursion===undefined)config.cron.deleteNoVideoRecursion=false; -if(config.cron.deleteOverMax===undefined)config.cron.deleteOverMax=true; -if(config.cron.deleteOverMaxOffset===undefined)config.cron.deleteOverMaxOffset=0.9; -if(config.cron.deleteLogs===undefined)config.cron.deleteLogs=true; -if(config.cron.deleteEvents===undefined)config.cron.deleteEvents=true; -if(config.cron.deleteFileBins===undefined)config.cron.deleteFileBins=true; -if(config.cron.interval===undefined)config.cron.interval=1; -if(config.databaseType===undefined){config.databaseType='mysql'} -if(config.pluginKeys===undefined)config.pluginKeys={}; -if(config.databaseLogs===undefined){config.databaseLogs=false} -if(config.useUTC===undefined){config.useUTC=false} -if(config.pipeAddition===undefined){config.pipeAddition=7}else{config.pipeAddition=parseInt(config.pipeAddition)} -//Web Paths -if(config.webPaths===undefined){config.webPaths={}} - //main access URI - if(config.webPaths.home===undefined){config.webPaths.index='/'} - //Super User URI - if(config.webPaths.super===undefined){config.webPaths.super='/super'} - //Admin URI - if(config.webPaths.admin===undefined){config.webPaths.admin='/admin'} -//Page Rander Paths -if(config.renderPaths===undefined){config.renderPaths={}} - //login page - if(config.renderPaths.index===undefined){config.renderPaths.index='pages/index'} - //dashboard page - if(config.renderPaths.home===undefined){config.renderPaths.home='pages/home'} - //sub-account administration page - if(config.renderPaths.admin===undefined){config.renderPaths.admin='pages/admin'} - //superuser page - if(config.renderPaths.super===undefined){config.renderPaths.super='pages/super'} - //2-Factor Auth page - if(config.renderPaths.factorAuth===undefined){config.renderPaths.factorAuth='pages/factor'} - //Streamer (Dashbcam Prototype) page - if(config.renderPaths.streamer===undefined){config.renderPaths.streamer='pages/streamer'} - //Streamer v2 (Dashbcam) page - if(config.renderPaths.dashcam===undefined){config.renderPaths.dashcam='pages/dashcam'} - //embeddable widget page - if(config.renderPaths.embed===undefined){config.renderPaths.embed='pages/embed'} - //mjpeg full screen page - if(config.renderPaths.mjpeg===undefined){config.renderPaths.mjpeg='pages/mjpeg'} - //gridstack only page - if(config.renderPaths.grid===undefined){config.renderPaths.grid='pages/grid'} +if(config.cpuUsageMarker === undefined){config.cpuUsageMarker='%Cpu'} +if(config.customCpuCommand === undefined){config.customCpuCommand=null} +if(config.autoDropCache === undefined){config.autoDropCache=true} +if(config.doSnapshot === undefined){config.doSnapshot=true} +if(config.restart === undefined){config.restart={}} +if(config.systemLog === undefined){config.systemLog=true} +if(config.deleteCorruptFiles === undefined){config.deleteCorruptFiles=true} +if(config.restart.onVideoNotExist === undefined){config.restart.onVideoNotExist=true} +if(config.ip === undefined||config.ip===''||config.ip.indexOf('0.0.0.0')>-1){config.ip='localhost'}else{config.bindip=config.ip}; +if(config.cron === undefined)config.cron={}; +if(config.cron.enabled === undefined)config.cron.enabled=true; +if(config.cron.deleteOld === undefined)config.cron.deleteOld=true; +if(config.cron.deleteOrphans === undefined)config.cron.deleteOrphans=false; +if(config.cron.deleteNoVideo === undefined)config.cron.deleteNoVideo=true; +if(config.cron.deleteNoVideoRecursion === undefined)config.cron.deleteNoVideoRecursion=false; +if(config.cron.deleteOverMax === undefined)config.cron.deleteOverMax=true; +if(config.cron.deleteOverMaxOffset === undefined)config.cron.deleteOverMaxOffset=0.9; +if(config.cron.deleteLogs === undefined)config.cron.deleteLogs=true; +if(config.cron.deleteEvents === undefined)config.cron.deleteEvents=true; +if(config.cron.deleteFileBins === undefined)config.cron.deleteFileBins=true; +if(config.cron.interval === undefined)config.cron.interval=1; +if(config.databaseType === undefined){config.databaseType='mysql'} +if(config.pluginKeys === undefined)config.pluginKeys={}; +if(config.databaseLogs === undefined){config.databaseLogs=false} +if(config.useUTC === undefined){config.useUTC=false} +if(config.pipeAddition === undefined){config.pipeAddition=7}else{config.pipeAddition=parseInt(config.pipeAddition)} //Child Nodes -if(config.childNodes===undefined)config.childNodes = {}; +if(config.childNodes === undefined)config.childNodes = {}; //enabled - if(config.childNodes.enabled===undefined)config.childNodes.enabled = false; + if(config.childNodes.enabled === undefined)config.childNodes.enabled = false; //mode, set value as `child` for all other machines in the cluster - if(config.childNodes.mode===undefined)config.childNodes.mode = 'master'; + if(config.childNodes.mode === undefined)config.childNodes.mode = 'master'; //child node connection port - if(config.childNodes.port===undefined)config.childNodes.port = 8288; + if(config.childNodes.port === undefined)config.childNodes.port = 8288; //child node connection key - if(config.childNodes.key===undefined)config.childNodes.key = [ + if(config.childNodes.key === undefined)config.childNodes.key = [ '3123asdasdf1dtj1hjk23sdfaasd12asdasddfdbtnkkfgvesra3asdsd3123afdsfqw345' ]; @@ -207,6 +181,7 @@ s.getDefinitonFile=function(rule){ } return file } +//sql/database connection with knex var databaseOptions = { client: config.databaseType, connection: config.db, @@ -219,42 +194,24 @@ if(databaseOptions.client === 'sqlite3' && databaseOptions.connection.filename = databaseOptions.connection.filename = __dirname+"/shinobi.sqlite" } s.databaseEngine = knex(databaseOptions) -s.sqlDate = function(value){ - var dateQueryFunction = '' - if(databaseOptions.client === 'sqlite3'){ - value = value.toLowerCase() - if (value.slice(-1) !== 's') { - value = value+'s' - } - dateQueryFunction = "datetime('now', '-"+value+"')" - }else{ - value = value.toUpperCase() - if (value.slice(-1) === 'S') { - value = value.slice(0, -1); - } - dateQueryFunction = "DATE_SUB(NOW(), INTERVAL "+value+")" - } - return dateQueryFunction -} s.mergeQueryValues = function(query,values){ if(!values){values=[]} var valuesNotFunction = true; if(typeof values === 'function'){ - var onMoveOn = values; var values = []; valuesNotFunction = false; } - if(!onMoveOn){onMoveOn=function(){}} if(values&&valuesNotFunction){ var splitQuery = query.split('?') var newQuery = '' splitQuery.forEach(function(v,n){ newQuery += v - if(values[n]){ - if(isNaN(values[n])){ - newQuery += "'"+values[n]+"'" + var value = values[n] + if(value){ + if(isNaN(value) || value instanceof Date){ + newQuery += "'"+value+"'" }else{ - newQuery += values[n] + newQuery += value } } }) @@ -263,7 +220,11 @@ s.mergeQueryValues = function(query,values){ } return newQuery } -s.sqlQuery = function(query,values,onMoveOn,hideLog){ +s.stringToSqlTime = function(value){ + newValue = new Date(value.replace('T',' ')) + return newValue +} +s.sqlQuery = function(query,values,onMoveOn){ if(!values){values=[]} if(typeof values === 'function'){ var onMoveOn = values; @@ -271,24 +232,64 @@ s.sqlQuery = function(query,values,onMoveOn,hideLog){ } if(!onMoveOn){onMoveOn=function(){}} var mergedQuery = s.mergeQueryValues(query,values) - return s.databaseEngine.raw(query,values) - .asCallback(function(err,r){ - if(err&&config.databaseLogs){ - s.systemLog('s.sqlQuery QUERY',query) - s.systemLog('s.sqlQuery ERROR',err) + s.debugLog('s.sqlQuery QUERY',mergedQuery) + return s.databaseEngine + .raw(query,values) + .asCallback(function(err,r){ + if(err){ + console.log('s.sqlQuery QUERY ERRORED',query) + console.log('s.sqlQuery ERROR',err) + } + if(onMoveOn && typeof onMoveOn === 'function'){ + switch(databaseOptions.client){ + case'sqlite3': + if(!r)r=[] + break; + default: + if(r)r=r[0] + break; } - if(onMoveOn && typeof onMoveOn === 'function'){ - switch(databaseOptions.client){ - case'sqlite3': - if(!r)r=[] - break; - default: - if(r)r=r[0] - break; + onMoveOn(err,r) + } + }) +} +//discord bot +if(config.discordBot === true){ + try{ + var Discord = require("discord.js") + s.discordMsg = function(data,files,groupKey){ + if(!data)data = {}; + var bot = s.group[groupKey].discordBot + if(!bot){ + s.log({ke:groupKey,mid:'$USER'},{type:lang.DiscordFailedText,msg:lang.DiscordNotEnabledText}) + return + } + var sendBody = Object.assign({ + color: 3447003, + title: 'Alert from Shinobi', + description: "", + fields: [], + timestamp: new Date(), + footer: { + icon_url: "https://shinobi.video/libs/assets/icon/apple-touch-icon-152x152.png", + text: "Shinobi Systems" } - onMoveOn(err,r) - } - }) + },data) + bot.channels.get(s.group[groupKey].init.discordbot_channel).send({ + embed: sendBody, + files: files + }).catch(err => { + if(err){ + s.log({ke:groupKey,mid:'$USER'},{type:lang.DiscordErrorText,msg:err}) + s.group[groupKey].discordBot = null + s.init('apps',{ke:groupKey}) + } + }) + } + }catch(err){ + console.log('Could not start Discord bot, please run "npm install discord.js" inside the Shinobi folder.') + s.discordMsg = function(){} + } } //kill any ffmpeg running s.ffmpegKill=function(){ @@ -326,8 +327,13 @@ s.ocvTx=function(data){ } } //send data to socket client function -s.tx=function(z,y,x){if(x){return x.broadcast.to(y).emit('f',z)};io.to(y).emit('f',z);} -s.txWithSubPermissions=function(z,y,permissionChoices){ +s.tx = function(z,y,x){if(x){return x.broadcast.to(y).emit('f',z)};io.to(y).emit('f',z);} +s.txToDashcamUsers = function(data,groupKey){ + Object.keys(s.group[groupKey].dashcamUsers).forEach(function(auth){ + s.tx(data,s.group[groupKey].dashcamUsers[auth].cnid) + }) +} +s.txWithSubPermissions = function(z,y,permissionChoices){ if(typeof permissionChoices==='string'){ permissionChoices=[permissionChoices] } @@ -339,7 +345,7 @@ s.txWithSubPermissions=function(z,y,permissionChoices){ var valid=0 var checked=permissionChoices.length permissionChoices.forEach(function(b){ - if(user.details[b].indexOf(z.mid)!==-1){ + if(user.details[b] && user.details[b].indexOf(z.mid)!==-1){ ++valid } }) @@ -443,6 +449,120 @@ s.getFunctionParamNames = function(func) { result = []; return result; } +s.getDetectorStreams = function(monitor){ + var pathDir = s.dir.streams+monitor.ke+'/'+monitor.id+'/' + var streamDirItems = fs.readdirSync(pathDir) + var items = [] + streamDirItems.forEach(function(filename){ + if(filename.indexOf('detectorStream') > -1 && filename.indexOf('.m3u8') === -1){ + try{ + items.push(pathDir+filename) + }catch(err){ + console.log(err) + } + } + }) + return items +} +s.createPamDiffEngine = function(e){ + var width, + height, + globalSensitivity, + fullFrame = false + if(s.group[e.ke].mon_conf[e.id].details.detector_scale_x===''||s.group[e.ke].mon_conf[e.id].details.detector_scale_y===''){ + width = s.group[e.ke].mon_conf[e.id].details.detector_scale_x; + height = s.group[e.ke].mon_conf[e.id].details.detector_scale_y; + }else{ + width = e.width + height = e.height + } + if(e.details.detector_sensitivity===''){ + globalSensitivity = 10 + }else{ + globalSensitivity = parseInt(e.details.detector_sensitivity) + } + if(e.details.detector_frame==='1'){ + fullFrame={ + name:'FULL_FRAME', + sensitivity:globalSensitivity, + points:[ + [0,0], + [0,height], + [width,height], + [width,0] + ] + }; + } + var regions = s.createPamDiffRegionArray(s.group[e.ke].mon_conf[e.id].details.cords,globalSensitivity,fullFrame); + if(!s.group[e.ke].mon[e.id].noiseFilterArray)s.group[e.ke].mon[e.id].noiseFilterArray = {} + var noiseFilterArray = s.group[e.ke].mon[e.id].noiseFilterArray + Object.keys(regions.notForPam).forEach(function(name){ + if(!noiseFilterArray[name])noiseFilterArray[name]=[]; + }) + s.group[e.ke].mon[e.id].pamDiff = new PamDiff({grayscale: 'luminosity', regions : regions.forPam}); + s.group[e.ke].mon[e.id].p2p = new P2P(); + var sendTrigger = function(trigger){ + var detectorObject = { + f:'trigger', + id:e.id, + ke:e.ke, + name:trigger.name, + details:{ + plug:'built-in', + name:trigger.name, + reason:'motion', + confidence:trigger.percent, + }, + plates:[], + imgHeight:height, + imgWidth:width + } + detectorObject.doObjectDetection = (s.ocv && e.details.detector_use_detect_object === '1') + s.camera('motion',detectorObject) + if(detectorObject.doObjectDetection === true){ + s.ocvTx({f:'frame',mon:s.group[e.ke].mon_conf[e.id].details,ke:e.ke,id:e.id,time:s.formattedTime(),frame:s.group[e.ke].mon[e.id].lastJpegDetectorFrame}); + } + } + var filterTheNoise = function(trigger){ + if(noiseFilterArray[trigger.name].length > 2){ + var thePreviousTriggerPercent = noiseFilterArray[trigger.name][noiseFilterArray[trigger.name].length - 1]; + var triggerDifference = trigger.percent - thePreviousTriggerPercent; + var noiseRange = e.details.detector_noise_filter_range + if(!noiseRange || noiseRange === ''){ + noiseRange = 6 + } + noiseRange = parseFloat(noiseRange) + if(((trigger.percent - thePreviousTriggerPercent) < noiseRange)||(thePreviousTriggerPercent - trigger.percent) > -noiseRange){ + noiseFilterArray[trigger.name].push(trigger.percent); + } + }else{ + noiseFilterArray[trigger.name].push(trigger.percent); + } + if(noiseFilterArray[trigger.name].length > 10){ + noiseFilterArray[trigger.name] = noiseFilterArray[trigger.name].splice(1,10) + } + var theNoise = 0; + noiseFilterArray[trigger.name].forEach(function(v,n){ + theNoise += v; + }) + theNoise = theNoise / noiseFilterArray[trigger.name].length; +// console.log(noiseFilterArray[trigger.name]) +// console.log(theNoise) + var triggerPercentWithoutNoise = trigger.percent - theNoise; + if(triggerPercentWithoutNoise > regions.notForPam[trigger.name].sensitivity){ + sendTrigger(trigger); + } + } + if(e.details.detector_noise_filter==='1'){ + s.group[e.ke].mon[e.id].pamDiff.on('diff', (data) => { + data.trigger.forEach(filterTheNoise) + }) + }else{ + s.group[e.ke].mon[e.id].pamDiff.on('diff', (data) => { + data.trigger.forEach(sendTrigger) + }) + } +} s.createPamDiffRegionArray = function(regions,globalSensitivity,fullFrame){ var pamDiffCompliantArray = [], arrayForOtherStuff = [], @@ -456,6 +576,7 @@ s.createPamDiffRegionArray = function(regions,globalSensitivity,fullFrame){ json[fullFrame.name]=fullFrame; } Object.values(json).forEach(function(region){ + if(!region)return false; region.polygon = []; region.points.forEach(function(points){ region.polygon.push({x:parseFloat(points[0]),y:parseFloat(points[1])}) @@ -485,9 +606,15 @@ s.getRequest = function(url,callback){ // s.systemLog("Get Snapshot Error", e); }); } -s.kill=function(x,e,p){ +s.kill = function(x,e,p){ if(s.group[e.ke]&&s.group[e.ke].mon[e.id]&&s.group[e.ke].mon[e.id].spawn !== undefined){ if(s.group[e.ke].mon[e.id].spawn){ + s.group[e.ke].mon[e.id].allowStdinWrite = false + s.txToDashcamUsers({ + f : 'disable_stream', + ke : e.ke, + mid : e.id + },e.ke) s.group[e.ke].mon[e.id].spawn.stdio[3].unpipe(); // if(s.group[e.ke].mon[e.id].p2pStream){s.group[e.ke].mon[e.id].p2pStream.unpipe();} if(s.group[e.ke].mon[e.id].p2p){s.group[e.ke].mon[e.id].p2p.unpipe();} @@ -495,15 +622,17 @@ s.kill=function(x,e,p){ delete(s.group[e.ke].mon[e.id].p2p) delete(s.group[e.ke].mon[e.id].pamDiff) try{ - s.group[e.ke].mon[e.id].spawn.removeListener('end',s.group[e.ke].mon[e.id].spawn_exit); - s.group[e.ke].mon[e.id].spawn.removeListener('exit',s.group[e.ke].mon[e.id].spawn_exit); - delete(s.group[e.ke].mon[e.id].spawn_exit); + s.group[e.ke].mon[e.id].spawn.removeListener('end',s.group[e.ke].mon[e.id].spawn_exit); + s.group[e.ke].mon[e.id].spawn.removeListener('exit',s.group[e.ke].mon[e.id].spawn_exit); + delete(s.group[e.ke].mon[e.id].spawn_exit); }catch(er){} } clearTimeout(s.group[e.ke].mon[e.id].checker); delete(s.group[e.ke].mon[e.id].checker); clearTimeout(s.group[e.ke].mon[e.id].checkStream); delete(s.group[e.ke].mon[e.id].checkStream); + clearTimeout(s.group[e.ke].mon[e.id].checkSnap); + delete(s.group[e.ke].mon[e.id].checkSnap); clearTimeout(s.group[e.ke].mon[e.id].watchdog_stop); delete(s.group[e.ke].mon[e.id].watchdog_stop); delete(s.group[e.ke].mon[e.id].lastJpegDetectorFrame); @@ -514,10 +643,11 @@ s.kill=function(x,e,p){ if(s.group[e.ke].mon[e.id].childNode){ s.cx({f:'kill',d:s.init('noReference',e)},s.group[e.ke].mon[e.id].childNodeId) }else{ + s.coSpawnClose(e) if(!x||x===1){return}; p=x.pid; if(s.group[e.ke].mon_conf[e.id].type===('dashcam'||'socket'||'jpeg'||'pipe')){ - x.stdin.pause();setTimeout(function(){x.kill('SIGTERM');delete(x);},500) + x.stdin.pause();setTimeout(function(){x.kill('SIGTERM');},500) }else{ try{ x.stdin.setEncoding('utf8');x.stdin.write('q'); @@ -537,7 +667,7 @@ s.log=function(e,x){ // s.systemLog('s.log : ',{f:'log',ke:e.ke,mid:e.mid,log:x,time:s.timeObject()},'GRP_'+e.ke) } //system log -s.systemLog=function(q,w,e){ +s.systemLog = function(q,w,e){ if(!w){w=''} if(!e){e=''} if(config.systemLog===true){ @@ -548,14 +678,25 @@ s.systemLog=function(q,w,e){ return console.log(s.timeObject().format(),q,w,e) } } +//system log +s.debugLog = function(q,w,e){ + if(!w){w = ''} + if(!e){e = ''} + if(config.debugLog === true){ + console.log(s.timeObject().format(),q,w,e) + if(config.debugLogVerbose === true){ + console.log(new Error()) + } + } +} //SSL options if(config.ssl&&config.ssl.key&&config.ssl.cert){ config.ssl.key=fs.readFileSync(s.checkRelativePath(config.ssl.key),'utf8') config.ssl.cert=fs.readFileSync(s.checkRelativePath(config.ssl.cert),'utf8') - if(config.ssl.port===undefined){ + if(config.ssl.port === undefined){ config.ssl.port=443 } - if(config.ssl.bindip===undefined){ + if(config.ssl.bindip === undefined){ config.ssl.bindip=config.bindip } if(config.ssl.ca&&config.ssl.ca instanceof Array){ @@ -592,7 +733,7 @@ s.ffmpegVersion=execSync(config.ffmpegDir+" -version").toString().split('Copyrig console.log('FFMPEG version : '+s.ffmpegVersion) if(s.ffmpegVersion.indexOf(': 2.')>-1){ s.systemLog('FFMPEG is too old : '+s.ffmpegVersion+', Needed : 3.2+',err) - return + throw (new Error()) } //directories s.group={}; @@ -647,11 +788,7 @@ s.init=function(x,e,k,fn){ switch(x){ case 0://init camera if(!s.group[e.ke]){s.group[e.ke]={}}; - if(!s.group[e.ke].fileBin){s.group[e.ke].fileBin={}}; if(!s.group[e.ke].mon){s.group[e.ke].mon={}} - if(!s.group[e.ke].sizeChangeQueue){s.group[e.ke].sizeChangeQueue=[]} - if(!s.group[e.ke].sizePurgeQueue){s.group[e.ke].sizePurgeQueue=[]} - if(!s.group[e.ke].users){s.group[e.ke].users={}} if(!s.group[e.ke].mon[e.mid]){s.group[e.ke].mon[e.mid]={}} if(!s.group[e.ke].mon[e.mid].streamIn){s.group[e.ke].mon[e.mid].streamIn={}}; if(!s.group[e.ke].mon[e.mid].emitterChannel){s.group[e.ke].mon[e.mid].emitterChannel={}}; @@ -666,7 +803,6 @@ s.init=function(x,e,k,fn){ if(!s.group[e.ke].mon[e.mid].started){s.group[e.ke].mon[e.mid].started=0}; if(s.group[e.ke].mon[e.mid].delete){clearTimeout(s.group[e.ke].mon[e.mid].delete)} if(!s.group[e.ke].mon_conf){s.group[e.ke].mon_conf={}} - s.init('apps',e) break; case'group': if(!s.group[e.ke]){ @@ -675,6 +811,11 @@ s.init=function(x,e,k,fn){ if(!s.group[e.ke].init){ s.group[e.ke].init={} } + if(!s.group[e.ke].fileBin){s.group[e.ke].fileBin={}}; + if(!s.group[e.ke].sizeChangeQueue){s.group[e.ke].sizeChangeQueue=[]} + if(!s.group[e.ke].sizePurgeQueue){s.group[e.ke].sizePurgeQueue=[]} + if(!s.group[e.ke].users){s.group[e.ke].users={}} + if(!s.group[e.ke].dashcamUsers){s.group[e.ke].dashcamUsers={}} if(!e.limit||e.limit===''){e.limit=10000}else{e.limit=parseFloat(e.limit)} //save global space limit for group key (mb) s.group[e.ke].sizeLimit=e.limit; @@ -701,15 +842,52 @@ s.init=function(x,e,k,fn){ ar.webdav_url!=='' ){ if(!ar.webdav_dir||ar.webdav_dir===''){ - ar.webdav_dir='/'; - if(ar.webdav_dir.slice(-1)!=='/'){ar.webdav_dir+='/';} + ar.webdav_dir='/' } + ar.webdav_dir = s.checkCorrectPathEnding(ar.webdav_dir) s.group[e.ke].webdav = webdav( ar.webdav_url, ar.webdav_user, ar.webdav_pass ); } + //Amazon S3 + if(!s.group[e.ke].aws && + !s.group[e.ke].aws_s3 && + ar.aws_s3 !== '0' && + ar.aws_accessKeyId !== ''&& + ar.aws_secretAccessKey && + ar.aws_secretAccessKey !== ''&& + ar.aws_region && + ar.aws_region !== ''&& + ar.aws_s3_bucket !== '' + ){ + if(!ar.aws_s3_dir || ar.aws_s3_dir === '/'){ + ar.aws_s3_dir = '' + } + if(ar.aws_s3_dir !== ''){ + ar.aws_s3_dir = s.checkCorrectPathEnding(ar.aws_s3_dir) + } + s.group[e.ke].aws = new require("aws-sdk") + s.group[e.ke].aws.config = new s.group[e.ke].aws.Config({ + accessKeyId: ar.aws_accessKeyId, + secretAccessKey: ar.aws_secretAccessKey, + region: ar.aws_region + }) + s.group[e.ke].aws_s3 = new s.group[e.ke].aws.S3(); + } + //discordbot + if(!s.group[e.ke].discordBot && + config.discordBot === true && + ar.discordbot === '1' && + ar.discordbot_token !== '' + ){ + s.group[e.ke].discordBot = new Discord.Client() + s.group[e.ke].discordBot.on('ready', () => { + console.log(`${r.mail} : Discord Bot Logged in as ${s.group[e.ke].discordBot.user.tag}!`) + }) + s.group[e.ke].discordBot.login(ar.discordbot_token) + } Object.keys(ar).forEach(function(v){ s.group[e.ke].init[v]=ar[v] }) @@ -736,6 +914,8 @@ s.init=function(x,e,k,fn){ //build a complete url from pieces e.authd=''; if(e.details.muser&&e.details.muser!==''&&e.host.indexOf('@')===-1) { + e.username = e.details.muser + e.password = e.details.mpass e.authd=e.details.muser+':'+e.details.mpass+'@'; } if(e.port==80&&e.details.port_force!=='1'){e.porty=''}else{e.porty=':'+e.port} @@ -791,6 +971,24 @@ s.init=function(x,e,k,fn){ checkQueue() } break; + case'monitorStatus': +// s.discordMsg({ +// author: { +// name: s.group[e.ke].mon_conf[e.id].name, +// icon_url: "https://shinobi.video/libs/assets/icon/apple-touch-icon-152x152.png" +// }, +// title: lang['Status Changed'], +// description: lang['Monitor is now '+e.status], +// fields: [], +// timestamp: new Date(), +// footer: { +// icon_url: "https://shinobi.video/libs/assets/icon/apple-touch-icon-152x152.png", +// text: "Shinobi Systems" +// } +// },[],e.ke) + s.group[e.ke].mon[e.id].monitorStatus = e.status + s.tx(Object.assign(e,{f:'monitor_status'}),'GRP_'+e.ke) + break; } if(typeof e.callback==='function'){setTimeout(function(){e.callback()},500);} } @@ -807,7 +1005,7 @@ s.filterEvents=function(x,d){ }) d.mailOptions = { - from: '"ShinobiCCTV" ', // sender address + from: config.mail.from, // sender address to: d.mail, // list of receivers subject: lang['Filter Matches']+' : '+d.name, // Subject line html: lang.FilterMatchesText1+' '+d.videos.length+' '+lang.FilterMatchesText2, @@ -884,25 +1082,24 @@ s.video=function(x,e,k){ }) }); break; - case'archive': - if(!e.filename&&e.time){e.filename=s.formattedTime(e.time)} - if(!e.status){e.status=0} - e.details.archived="1" - e.save=[JSON.stringify(e.details),e.id,e.ke,s.nameToTime(e.filename)]; - s.sqlQuery('UPDATE Videos SET details=? WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){ - s.tx({f:'video_edit',status:3,filename:e.filename+'.'+e.ext,mid:e.mid,ke:e.ke,time:s.nameToTime(e.filename)},'GRP_'+e.ke); - }); - break; case'delete': - if(!e.filename&&e.time){e.filename=s.formattedTime(e.time)} - var filename + if(!e.filename && e.time){ + e.filename = s.formattedTime(e.time) + } + var filename, + time if(e.filename.indexOf('.')>-1){ filename = e.filename }else{ filename = e.filename+'.'+e.ext } - if(!e.status){e.status=0} - e.save=[e.id,e.ke,s.nameToTime(filename)]; + if(e.filename && !e.time){ + time = s.nameToTime(filename) + }else{ + time = e.time + } + time = new Date(time) + e.save=[e.id,e.ke,time]; s.sqlQuery('SELECT * FROM Videos WHERE `mid`=? AND `ke`=? AND `time`=?',e.save,function(err,r){ if(r&&r[0]){ r=r[0] @@ -917,6 +1114,9 @@ s.video=function(x,e,k){ s.tx({f:'video_delete',filename:filename,mid:e.mid,ke:e.ke,time:s.nameToTime(filename),end:s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+e.ke); s.file('delete',dir+filename) }) + }else{ +// console.log('Delete Failed',e) +// console.error(err) } }) break; @@ -1028,7 +1228,8 @@ s.video=function(x,e,k){ }else{ queryString = '' } - v.href = '/'+k+'/videos/'+v.ke+'/'+v.mid+'/'+s.formattedTime(v.time)+'.'+v.ext; + v.filename = s.formattedTime(v.time)+'.'+v.ext; + v.href = '/'+k+'/videos/'+v.ke+'/'+v.mid+'/'+v.filename; v.links = { deleteVideo : v.href+'/delete' + queryString, changeToUnread : v.href+'/status/1' + queryString, @@ -1067,9 +1268,10 @@ s.video=function(x,e,k){ if(s.group[e.ke].usedSpace>(s.group[e.ke].sizeLimit*config.cron.deleteOverMaxOffset)){ s.sqlQuery('SELECT * FROM Videos WHERE status != 0 AND details NOT LIKE \'%"archived":"1"%\' AND ke=? ORDER BY `time` ASC LIMIT 2',[e.ke],function(err,evs){ k.del=[];k.ar=[e.ke]; + if(!evs)return console.log(err) evs.forEach(function(ev){ ev.dir=s.video('getDir',ev)+s.formattedTime(ev.time)+'.'+ev.ext; - k.del.push('(mid=? AND time=?)'); + k.del.push('(mid=? AND `time`=?)'); k.ar.push(ev.mid),k.ar.push(ev.time); s.file('delete',ev.dir); s.init('diskUsedSet',e,-(ev.size/1000000)) @@ -1130,8 +1332,6 @@ s.video=function(x,e,k){ }); k.filename = s.formattedTime(e.startTime)+'.'+e.ext }else{ - e.startTime = s.utcToLocal(e.startTime) - e.endTime = s.utcToLocal(e.endTime) k.filename = k.file } if(!e.ext){e.ext = k.filename.split('.')[1]} @@ -1174,9 +1374,9 @@ s.video=function(x,e,k){ filename:k.filename, mid:e.mid, ke:e.ke, - time:s.timeObject(e.startTime).format(), + time:e.startTime, size:e.filesize, - end:s.timeObject(e.endTime).format() + end:e.endTime },'GRP_'+e.ke,'video_view'); } //cloud auto savers @@ -1200,7 +1400,7 @@ s.video=function(x,e,k){ // }); // }); // } - if(s.group[e.ke].webdav&&s.group[e.ke].init.use_webdav!=='0'&&s.group[e.ke].init.webdav_save=="1"){ + if(s.group[e.ke].webdav&&s.group[e.ke].init.use_webdav!=='0'&&s.group[e.ke].init.webdav_save=='1'){ fs.readFile(k.dir+k.filename,function(err,data){ s.group[e.ke].webdav.putFileContents(s.group[e.ke].init.webdav_dir+e.ke+'/'+e.mid+'/'+k.filename,"binary",data) .catch(function(err) { @@ -1209,11 +1409,40 @@ s.video=function(x,e,k){ }); }); } + if(s.group[e.ke].aws_s3 && s.group[e.ke].init.use_aws_s3 !== '0' && s.group[e.ke].init.aws_s3_save === '1'){ + var fileStream = fs.createReadStream(k.dir+k.filename); + fileStream.on('error', function (err) { + console.error(err) + }) + s.group[e.ke].aws_s3.upload({ + Bucket: s.group[e.ke].init.aws_s3_bucket, + Key: s.group[e.ke].init.aws_s3_dir+e.ke+'/'+e.mid+'/'+k.filename, + Body:fileStream, + ACL:'public-read' + },function(err,data){ + if(err){ + s.log(e,{type:lang['Amazon S3 Upload Error'],msg:err}) + } + if(s.group[e.ke].init.aws_s3_log === '1' && data && data.Location){ + var save = [ + e.mid, + e.ke, + e.startTime, + 0, + '{}', + e.filesize, + e.endTime, + data.Location + ] + s.sqlQuery('INSERT INTO `Cloud Videos` (mid,ke,time,status,details,size,end,href) VALUES (?,?,?,?,?,?,?,?)',save) + } + }) + } k.details = {} if(e.details&&e.details.dir&&e.details.dir!==''){ k.details.dir = e.details.dir } - if(config.useUTC)k.details.isUTC = config.useUTC; + if(config.useUTC === true)k.details.isUTC = config.useUTC; var save = [ e.mid, e.ke, @@ -1245,256 +1474,435 @@ s.splitForFFPMEG = function (ffmpegCommandAsString) { return p; }, {a: ['']}).a }; -s.ffmpeg=function(e){ - //create input map - var createFFmpegMap = function(arrayOfMaps){ - //e.details.input_map_choices.stream - var string = ''; - if(e.details.input_maps && e.details.input_maps.length > 0){ - if(arrayOfMaps && arrayOfMaps instanceof Array && arrayOfMaps.length>0){ - arrayOfMaps.forEach(function(v){ - if(v.map==='')v.map='0' - string += ' -map '+v.map - }) - }else{ - string += ' -map 0:0' - } - } - return string; - } - var createInputMap = function(number,input){ - //fulladdress - Full Input Path - //`x` is an object used to contain temporary values. - var x = {} - x.cust_input = '' - x.hwaccel = '' - if(input.cust_input&&input.cust_input!==''){x.cust_input+=' '+input.cust_input;} - //input - analyze duration - if(input.aduration&&input.aduration!==''){x.cust_input+=' -analyzeduration '+input.aduration}; - //input - probe size - if(input.probesize&&input.probesize!==''){x.cust_input+=' -probesize '+input.probesize}; - //input - stream loop (good for static files/lists) - if(input.stream_loop==='1'){x.cust_input+=' -stream_loop -1'}; - //input - fps - if(x.cust_input.indexOf('-r ')===-1&&input.sfps&&input.sfps!==''){ - input.sfps=parseFloat(input.sfps); - if(isNaN(input.sfps)){input.sfps=1} - x.cust_input+=' -r '+input.sfps - } - //input - is mjpeg - if(input.type==='mjpeg'){ - if(x.cust_input.indexOf('-f ')===-1){ - x.cust_input+=' -f mjpeg' - } - //input - frames per second - x.cust_input+=' -reconnect 1'; - }else - //input - is h264 has rtsp in address and transport method is chosen - if((input.type==='h264'||input.type==='mp4')&&input.fulladdress.indexOf('rtsp://')>-1&&input.rtsp_transport!==''&&input.rtsp_transport!=='no'){ - x.cust_input += ' -rtsp_transport '+input.rtsp_transport; - }else - if((input.type==='mp4'||input.type==='mjpeg')&&x.cust_input.indexOf('-re')===-1){ - x.cust_input += ' -re' - } - //hardware acceleration - if(input.accelerator&&input.accelerator==='1'){ - if(input.hwaccel&&input.hwaccel!==''){ - x.hwaccel+=' -hwaccel '+input.hwaccel; - } - if(input.hwaccel_vcodec&&input.hwaccel_vcodec!==''&&input.hwaccel_vcodec!=='auto'&&input.hwaccel_vcodec!=='no'){ - x.hwaccel+=' -c:v '+input.hwaccel_vcodec; - } - if(input.hwaccel_device&&input.hwaccel_device!==''){ - switch(input.hwaccel){ - case'vaapi': - x.hwaccel+=' -vaapi_device '+input.hwaccel_device+' -hwaccel_output_format vaapi'; - break; - default: - x.hwaccel+=' -hwaccel_device '+input.hwaccel_device; - break; - } - } - } - //custom - input flags - return x.hwaccel+x.cust_input+' -i "'+input.fulladdress+'"'; - } - //create sub stream channel - var createStreamChannel = function(number,channel){ - //`x` is an object used to contain temporary values. - var x = { - pipe:'' - } - if(!number||number==''){ - x.channel_sdir = e.sdir; +s.createFFmpegMap = function(e,arrayOfMaps){ + //`e` is the monitor object + var string = ''; + if(e.details.input_maps && e.details.input_maps.length > 0){ + if(arrayOfMaps && arrayOfMaps instanceof Array && arrayOfMaps.length>0){ + arrayOfMaps.forEach(function(v){ + if(v.map==='')v.map='0' + string += ' -map '+v.map + }) }else{ - x.channel_sdir = e.sdir+'channel'+number+'/'; - if (!fs.existsSync(x.channel_sdir)){ - fs.mkdirSync(x.channel_sdir); + string += ' -map 0:0' + } + } + return string; +} +s.createInputMap = function(e,number,input){ + //`e` is the monitor object + //`x` is an object used to contain temporary values. + var x = {} + x.cust_input = '' + x.hwaccel = '' + if(input.cust_input&&input.cust_input!==''){x.cust_input+=' '+input.cust_input} + //input - analyze duration + if(input.aduration&&input.aduration!==''){x.cust_input+=' -analyzeduration '+input.aduration} + //input - probe size + if(input.probesize&&input.probesize!==''){x.cust_input+=' -probesize '+input.probesize} + //input - stream loop (good for static files/lists) + if(input.stream_loop==='1'){x.cust_input+=' -stream_loop -1'} + //input - fps + if(x.cust_input.indexOf('-r ')===-1&&input.sfps&&input.sfps!==''){ + input.sfps=parseFloat(input.sfps); + if(isNaN(input.sfps)){input.sfps=1} + x.cust_input+=' -r '+input.sfps + } + //input - is mjpeg + if(input.type==='mjpeg'){ + if(x.cust_input.indexOf('-f ')===-1){ + x.cust_input+=' -f mjpeg' + } + //input - frames per second + x.cust_input+=' -reconnect 1' + }else + //input - is h264 has rtsp in address and transport method is chosen + if((input.type==='h264'||input.type==='mp4')&&input.fulladdress.indexOf('rtsp://')>-1&&input.rtsp_transport!==''&&input.rtsp_transport!=='no'){ + x.cust_input += ' -rtsp_transport '+input.rtsp_transport + }else + if((input.type==='mp4'||input.type==='mjpeg')&&x.cust_input.indexOf('-re')===-1){ + x.cust_input += ' -re' + } + //hardware acceleration + if(input.accelerator&&input.accelerator==='1'){ + if(input.hwaccel&&input.hwaccel!==''){ + x.hwaccel+=' -hwaccel '+input.hwaccel; + } + if(input.hwaccel_vcodec&&input.hwaccel_vcodec!==''&&input.hwaccel_vcodec!=='auto'&&input.hwaccel_vcodec!=='no'){ + x.hwaccel+=' -c:v '+input.hwaccel_vcodec; + } + if(input.hwaccel_device&&input.hwaccel_device!==''){ + switch(input.hwaccel){ + case'vaapi': + x.hwaccel+=' -vaapi_device '+input.hwaccel_device+' -hwaccel_output_format vaapi'; + break; + default: + x.hwaccel+=' -hwaccel_device '+input.hwaccel_device; + break; } } - x.stream_video_filters=[] - //stream - frames per second - if(channel.stream_vcodec!=='copy'){ - if(!channel.stream_fps||channel.stream_fps===''){ - switch(channel.stream_type){ - case'rtmp': - channel.stream_fps=30 - break; - default: + } + //custom - input flags + return x.hwaccel+x.cust_input+' -i "'+input.fulladdress+'"'; +} +//create sub stream channel +s.createStreamChannel = function(e,number,channel){ + //`e` is the monitor object + //`x` is an object used to contain temporary values. + var x = { + pipe:'' + } + if(!number||number==''){ + x.channel_sdir = e.sdir; + }else{ + x.channel_sdir = e.sdir+'channel'+number+'/'; + if (!fs.existsSync(x.channel_sdir)){ + fs.mkdirSync(x.channel_sdir); + } + } + x.stream_video_filters=[] + //stream - frames per second + if(channel.stream_vcodec!=='copy'){ + if(!channel.stream_fps||channel.stream_fps===''){ + switch(channel.stream_type){ + case'rtmp': + channel.stream_fps=30 + break; + default: // channel.stream_fps=5 - break; - } + break; } } - if(channel.stream_fps&&channel.stream_fps!==''){x.stream_fps=' -r '+channel.stream_fps}else{x.stream_fps=''} + } + if(channel.stream_fps&&channel.stream_fps!==''){x.stream_fps=' -r '+channel.stream_fps}else{x.stream_fps=''} - //stream - hls vcodec - if(channel.stream_vcodec&&channel.stream_vcodec!=='no'){ - if(channel.stream_vcodec!==''){x.stream_vcodec=' -c:v '+channel.stream_vcodec}else{x.stream_vcodec=' -c:v libx264'} - }else{ - x.stream_vcodec=''; + //stream - hls vcodec + if(channel.stream_vcodec&&channel.stream_vcodec!=='no'){ + if(channel.stream_vcodec!==''){x.stream_vcodec=' -c:v '+channel.stream_vcodec}else{x.stream_vcodec=' -c:v libx264'} + }else{ + x.stream_vcodec=''; + } + //stream - hls acodec + if(channel.stream_acodec!=='no'){ + if(channel.stream_acodec&&channel.stream_acodec!==''){x.stream_acodec=' -c:a '+channel.stream_acodec}else{x.stream_acodec=''} + }else{ + x.stream_acodec=' -an'; + } + //stream - resolution + if(channel.stream_scale_x&&channel.stream_scale_x!==''&&channel.stream_scale_y&&channel.stream_scale_y!==''){ + x.dimensions = channel.stream_scale_x+'x'+channel.stream_scale_y; + } + //stream - hls segment time + if(channel.hls_time&&channel.hls_time!==''){x.hls_time=channel.hls_time}else{x.hls_time="2"} + //hls list size + if(channel.hls_list_size&&channel.hls_list_size!==''){x.hls_list_size=channel.hls_list_size}else{x.hls_list_size=2} + //stream - custom flags + if(channel.cust_stream&&channel.cust_stream!==''){x.cust_stream=' '+channel.cust_stream}else{x.cust_stream=''} + //stream - preset + if(channel.preset_stream&&channel.preset_stream!==''){x.preset_stream=' -preset '+channel.preset_stream;}else{x.preset_stream=''} + //hardware acceleration + if(e.details.accelerator&&e.details.accelerator==='1'){ + if(e.details.hwaccel&&e.details.hwaccel!==''){ + x.hwaccel+=' -hwaccel '+e.details.hwaccel; } - //stream - hls acodec - if(channel.stream_acodec!=='no'){ - if(channel.stream_acodec&&channel.stream_acodec!==''){x.stream_acodec=' -c:a '+channel.stream_acodec}else{x.stream_acodec=''} - }else{ - x.stream_acodec=' -an'; + if(e.details.hwaccel_vcodec&&e.details.hwaccel_vcodec!==''){ + x.hwaccel+=' -c:v '+e.details.hwaccel_vcodec; } - //stream - resolution - if(channel.stream_scale_x&&channel.stream_scale_x!==''&&channel.stream_scale_y&&channel.stream_scale_y!==''){ - x.dimensions = channel.stream_scale_x+'x'+channel.stream_scale_y; - } - //stream - hls segment time - if(channel.hls_time&&channel.hls_time!==''){x.hls_time=channel.hls_time}else{x.hls_time="2"} - //hls list size - if(channel.hls_list_size&&channel.hls_list_size!==''){x.hls_list_size=channel.hls_list_size}else{x.hls_list_size=2} - //stream - custom flags - if(channel.cust_stream&&channel.cust_stream!==''){x.cust_stream=' '+channel.cust_stream}else{x.cust_stream=''} - //stream - preset - if(channel.preset_stream&&channel.preset_stream!==''){x.preset_stream=' -preset '+channel.preset_stream;}else{x.preset_stream=''} - //hardware acceleration - if(e.details.accelerator&&e.details.accelerator==='1'){ - if(e.details.hwaccel&&e.details.hwaccel!==''){ - x.hwaccel+=' -hwaccel '+e.details.hwaccel; + if(e.details.hwaccel_device&&e.details.hwaccel_device!==''){ + switch(e.details.hwaccel){ + case'vaapi': + x.hwaccel+=' -vaapi_device '+e.details.hwaccel_device+' -hwaccel_output_format vaapi'; + break; + default: + x.hwaccel+=' -hwaccel_device '+e.details.hwaccel_device; + break; } - if(e.details.hwaccel_vcodec&&e.details.hwaccel_vcodec!==''){ - x.hwaccel+=' -c:v '+e.details.hwaccel_vcodec; - } - if(e.details.hwaccel_device&&e.details.hwaccel_device!==''){ - switch(e.details.hwaccel){ - case'vaapi': - x.hwaccel+=' -vaapi_device '+e.details.hwaccel_device+' -hwaccel_output_format vaapi'; - break; - default: - x.hwaccel+=' -hwaccel_device '+e.details.hwaccel_device; - break; - } - } - // else{ - // if(e.details.hwaccel==='vaapi'){ - // x.hwaccel+=' -hwaccel_device 0'; - // } - // } } +// else{ +// if(e.details.hwaccel==='vaapi'){ +// x.hwaccel+=' -hwaccel_device 0'; +// } +// } + } - if(channel.rotate_stream&&channel.rotate_stream!==""&&channel.rotate_stream!=="no"){ - x.stream_video_filters.push('transpose='+channel.rotate_stream); - } - //stream - video filter - if(channel.svf&&channel.svf!==''){ - x.stream_video_filters.push(channel.svf) - } - if(x.stream_video_filters.length>0){ - var string = x.stream_video_filters.join(',').trim() - if(string===''){ - x.stream_video_filters='' - }else{ - x.stream_video_filters=' -vf '+string - } - }else{ + if(channel.rotate_stream&&channel.rotate_stream!==""&&channel.rotate_stream!=="no"){ + x.stream_video_filters.push('transpose='+channel.rotate_stream); + } + //stream - video filter + if(channel.svf&&channel.svf!==''){ + x.stream_video_filters.push(channel.svf) + } + if(x.stream_video_filters.length>0){ + var string = x.stream_video_filters.join(',').trim() + if(string===''){ x.stream_video_filters='' + }else{ + x.stream_video_filters=' -vf '+string } - if(e.details.input_map_choices&&e.details.input_map_choices.record){ - //add input feed map - x.pipe += createFFmpegMap(e.details.input_map_choices['stream_channel-'+(number-config.pipeAddition)]) - } - if(channel.stream_vcodec!=='copy'){ - x.cust_stream+=x.stream_fps - } - switch(channel.stream_type){ - case'mp4': - x.cust_stream+=' -movflags +frag_keyframe+empty_moov+default_base_moof -metadata title="Poseidon Stream" -reset_timestamps 1' - if(channel.stream_vcodec!=='copy'){ - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; - x.cust_stream+=x.preset_stream - x.cust_stream+=x.stream_video_filters - } - x.pipe+=' -f mp4'+x.stream_acodec+x.stream_vcodec+x.cust_stream+' pipe:'+number; - break; - case'rtmp': - x.rtmp_server_url=s.checkCorrectPathEnding(channel.rtmp_server_url); - if(channel.stream_vcodec!=='copy'){ - if(channel.stream_vcodec==='libx264'){ - channel.stream_vcodec = 'h264' - } - if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; - x.cust_stream+=x.preset_stream - if(channel.stream_v_br&&channel.stream_v_br!==''){x.cust_stream+=' -b:v '+channel.stream_v_br} - } - if(channel.stream_vcodec!=='no'&&channel.stream_vcodec!==''){ - x.cust_stream+=' -vcodec '+channel.stream_vcodec - } - if(channel.stream_acodec!=='copy'){ - if(!channel.stream_acodec||channel.stream_acodec===''||channel.stream_acodec==='no'){ - channel.stream_acodec = 'aac' - } - if(!channel.stream_a_br||channel.stream_a_br===''){channel.stream_a_br='128k'} - x.cust_stream+=' -ab '+channel.stream_a_br - } - if(channel.stream_acodec!==''){ - x.cust_stream+=' -acodec '+channel.stream_acodec - } - x.pipe+=' -f flv'+x.stream_video_filters+x.cust_stream+' "'+x.rtmp_server_url+channel.rtmp_stream_key+'"'; - break; - case'h264': - if(channel.stream_vcodec!=='copy'){ - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; - x.cust_stream+=x.preset_stream - x.cust_stream+=x.stream_video_filters - } - x.pipe+=' -f mpegts'+x.stream_acodec+x.stream_vcodec+x.cust_stream+' pipe:'+number; - break; - case'flv': - if(channel.stream_vcodec!=='copy'){ - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; - x.cust_stream+=x.preset_stream - x.cust_stream+=x.stream_video_filters - } - x.pipe+=' -f flv'+x.stream_acodec+x.stream_vcodec+x.cust_stream+' pipe:'+number; - break; - case'hls': - if(channel.stream_vcodec!=='h264_vaapi'&&channel.stream_vcodec!=='copy'){ - if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; - if(x.cust_stream.indexOf('-tune')===-1){x.cust_stream+=' -tune zerolatency'} - if(x.cust_stream.indexOf('-g ')===-1){x.cust_stream+=' -g 1'} - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - x.cust_stream+=x.stream_video_filters - } - x.pipe+=x.preset_stream+x.stream_acodec+x.stream_vcodec+' -f hls'+x.cust_stream+' -hls_time '+x.hls_time+' -hls_list_size '+x.hls_list_size+' -start_number 0 -hls_allow_cache 0 -hls_flags +delete_segments+omit_endlist "'+x.channel_sdir+'s.m3u8"'; - break; - case'mjpeg': - if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -q:v '+channel.stream_quality; + }else{ + x.stream_video_filters='' + } + if(e.details.input_map_choices&&e.details.input_map_choices.record){ + //add input feed map + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices['stream_channel-'+(number-config.pipeAddition)]) + } + if(channel.stream_vcodec!=='copy'){ + x.cust_stream+=x.stream_fps + } + switch(channel.stream_type){ + case'mp4': + x.cust_stream+=' -movflags +frag_keyframe+empty_moov+default_base_moof -metadata title="Poseidon Stream" -reset_timestamps 1' + if(channel.stream_vcodec!=='copy'){ if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - x.pipe+=' -c:v mjpeg -f mpjpeg -boundary_tag shinobi'+x.cust_stream+x.stream_video_filters+' pipe:'+number; + if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; + x.cust_stream+=x.preset_stream + x.cust_stream+=x.stream_video_filters + } + x.pipe+=' -f mp4'+x.stream_acodec+x.stream_vcodec+x.cust_stream+' pipe:'+number; + break; + case'rtmp': + x.rtmp_server_url=s.checkCorrectPathEnding(channel.rtmp_server_url); + if(channel.stream_vcodec!=='copy'){ + if(channel.stream_vcodec==='libx264'){ + channel.stream_vcodec = 'h264' + } + if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; + x.cust_stream+=x.preset_stream + if(channel.stream_v_br&&channel.stream_v_br!==''){x.cust_stream+=' -b:v '+channel.stream_v_br} + } + if(channel.stream_vcodec!=='no'&&channel.stream_vcodec!==''){ + x.cust_stream+=' -vcodec '+channel.stream_vcodec + } + if(channel.stream_acodec!=='copy'){ + if(!channel.stream_acodec||channel.stream_acodec===''||channel.stream_acodec==='no'){ + channel.stream_acodec = 'aac' + } + if(!channel.stream_a_br||channel.stream_a_br===''){channel.stream_a_br='128k'} + x.cust_stream+=' -ab '+channel.stream_a_br + } + if(channel.stream_acodec!==''){ + x.cust_stream+=' -acodec '+channel.stream_acodec + } + x.pipe+=' -f flv'+x.stream_video_filters+x.cust_stream+' "'+x.rtmp_server_url+channel.rtmp_stream_key+'"'; + break; + case'h264': + if(channel.stream_vcodec!=='copy'){ + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; + x.cust_stream+=x.preset_stream + x.cust_stream+=x.stream_video_filters + } + x.pipe+=' -f mpegts'+x.stream_acodec+x.stream_vcodec+x.cust_stream+' pipe:'+number; + break; + case'flv': + if(channel.stream_vcodec!=='copy'){ + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; + x.cust_stream+=x.preset_stream + x.cust_stream+=x.stream_video_filters + } + x.pipe+=' -f flv'+x.stream_acodec+x.stream_vcodec+x.cust_stream+' pipe:'+number; + break; + case'hls': + if(channel.stream_vcodec!=='h264_vaapi'&&channel.stream_vcodec!=='copy'){ + if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -crf '+channel.stream_quality; + if(x.cust_stream.indexOf('-tune')===-1){x.cust_stream+=' -tune zerolatency'} + if(x.cust_stream.indexOf('-g ')===-1){x.cust_stream+=' -g 1'} + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + x.cust_stream+=x.stream_video_filters + } + x.pipe+=x.preset_stream+x.stream_acodec+x.stream_vcodec+' -f hls'+x.cust_stream+' -hls_time '+x.hls_time+' -hls_list_size '+x.hls_list_size+' -start_number 0 -hls_allow_cache 0 -hls_flags +delete_segments+omit_endlist "'+x.channel_sdir+'s.m3u8"'; + break; + case'mjpeg': + if(channel.stream_quality && channel.stream_quality !== '')x.cust_stream+=' -q:v '+channel.stream_quality; + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + x.pipe+=' -c:v mjpeg -f mpjpeg -boundary_tag shinobi'+x.cust_stream+x.stream_video_filters+' pipe:'+number; + break; + default: + x.pipe='' + break; + } + return x.pipe +} +s.ffmpegCoProcessor = function(e){ + if(e.coProcessor === false)return; + var x = {} + //x.input is the input and connection + if(e.details.loglevel&&e.details.loglevel!==''){x.loglevel='-loglevel '+e.details.loglevel;}else{x.loglevel='-loglevel error'} + x.input = x.loglevel+' -re -i '+e.sdir+'cpuOnly.m3u8' + + //x.pipe is the stream out methods + x.cust_input='' + x.cust_detect=' ' + x.stream_video_filters=[] + x.hwaccel='' + x.pipe='' + //main stream frames + //stream - timestamp + if(e.details.stream_timestamp&&e.details.stream_timestamp=="1"&&e.details.vcodec!=='copy'){ + //font + if(e.details.stream_timestamp_font&&e.details.stream_timestamp_font!==''){x.stream_timestamp_font=e.details.stream_timestamp_font}else{x.stream_timestamp_font='/usr/share/fonts/truetype/freefont/FreeSans.ttf'} + //position x + if(e.details.stream_timestamp_x&&e.details.stream_timestamp_x!==''){x.stream_timestamp_x=e.details.stream_timestamp_x}else{x.stream_timestamp_x='(w-tw)/2'} + //position y + if(e.details.stream_timestamp_y&&e.details.stream_timestamp_y!==''){x.stream_timestamp_y=e.details.stream_timestamp_y}else{x.stream_timestamp_y='0'} + //text color + if(e.details.stream_timestamp_color&&e.details.stream_timestamp_color!==''){x.stream_timestamp_color=e.details.stream_timestamp_color}else{x.stream_timestamp_color='white'} + //box color + if(e.details.stream_timestamp_box_color&&e.details.stream_timestamp_box_color!==''){x.stream_timestamp_box_color=e.details.stream_timestamp_box_color}else{x.stream_timestamp_box_color='0x00000000@1'} + //text size + if(e.details.stream_timestamp_font_size&&e.details.stream_timestamp_font_size!==''){x.stream_timestamp_font_size=e.details.stream_timestamp_font_size}else{x.stream_timestamp_font_size='10'} + + x.stream_video_filters.push('drawtext=fontfile='+x.stream_timestamp_font+':text=\'%{localtime}\':x='+x.stream_timestamp_x+':y='+x.stream_timestamp_y+':fontcolor='+x.stream_timestamp_color+':box=1:boxcolor='+x.stream_timestamp_box_color+':fontsize='+x.stream_timestamp_font_size); + } + //stream - watermark for -vf + if(e.details.stream_watermark&&e.details.stream_watermark=="1"&&e.details.stream_watermark_location&&e.details.stream_watermark_location!==''){ + switch(e.details.stream_watermark_position){ + case'tl'://top left + x.stream_watermark_position='10:10' break; - default: - x.pipe='' + case'tr'://top right + x.stream_watermark_position='main_w-overlay_w-10:10' + break; + case'bl'://bottom left + x.stream_watermark_position='10:main_h-overlay_h-10' + break; + default://bottom right + x.stream_watermark_position='(main_w-overlay_w-10)/2:(main_h-overlay_h-10)/2' break; } - return x.pipe + x.stream_video_filters.push('movie='+e.details.stream_watermark_location+'[watermark],[in][watermark]overlay='+x.stream_watermark_position+'[out]'); + } + //stream - rotation + if(e.details.rotate_stream&&e.details.rotate_stream!==""&&e.details.rotate_stream!=="no"&&e.details.stream_vcodec!=='copy'){ + x.stream_video_filters.push('transpose='+e.details.rotate_stream); + } + if(e.details.svf&&e.details.svf!==''){ + x.stream_video_filters.push(e.details.svf) + } + if(x.stream_video_filters.length>0){ + x.stream_video_filters=' -vf '+x.stream_video_filters.join(',') + }else{ + x.stream_video_filters='' + } + if(e.details.cust_stream&&e.details.cust_stream!==''){x.cust_stream=' '+e.details.cust_stream}else{x.cust_stream=''} + if(e.details.stream_fps&&e.details.stream_fps!==''){x.stream_fps=' -r '+e.details.stream_fps}else{x.stream_fps=''} + if(e.details.stream_vcodec!=='copy'){ + x.cust_stream+=x.stream_fps + } + switch(e.details.stream_type){ + case'mjpeg': + if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + x.pipe += ' -an -c:v mjpeg -f mpjpeg -boundary_tag shinobi'+x.cust_stream+x.stream_video_filters+' pipe:1'; + break; + case'b64':case'':case undefined:case null://base64 + if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + x.pipe += ' -an -c:v mjpeg -f image2pipe'+x.cust_stream+x.stream_video_filters+' pipe:1'; + break; + } + //detector frames + if(e.details.detector === '1'){ + if(!e.details.detector_fps||e.details.detector_fps===''){e.details.detector_fps=2} + if(e.details.detector_scale_x&&e.details.detector_scale_x!==''&&e.details.detector_scale_y&&e.details.detector_scale_y!==''){x.dratio=' -s '+e.details.detector_scale_x+'x'+e.details.detector_scale_y}else{x.dratio=' -s 320x240'} + if(e.details.cust_detect&&e.details.cust_detect!==''){x.cust_detect+=e.details.cust_detect;} + if(e.details.detector_pam==='1'){ + x.pipe += ' -an -c:v pam -pix_fmt gray -f image2pipe -r '+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:3' + if(e.details.detector_use_detect_object === '1'){ + //for object detection + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices.detector) + x.pipe += ' -f singlejpeg -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:4'; + } + }else{ + x.pipe+=' -f singlejpeg -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:3'; + } + } + //snapshot frames + if(e.details.snap === '1'){ + if(!e.details.snap_fps || e.details.snap_fps === ''){e.details.snap_fps = 1} + if(e.details.snap_vf && e.details.snap_vf !== ''){x.snap_vf=' -vf '+e.details.snap_vf}else{x.snap_vf=''} + if(e.details.snap_scale_x && e.details.snap_scale_x !== '' && e.details.snap_scale_y && e.details.snap_scale_y !== ''){x.snap_ratio = ' -s '+e.details.snap_scale_x+'x'+e.details.snap_scale_y}else{x.snap_ratio=''} + if(e.details.cust_snap && e.details.cust_snap !== ''){x.cust_snap = ' '+e.details.cust_snap}else{x.cust_snap=''} + x.pipe += ' -update 1 -r '+e.details.snap_fps+x.cust_snap+x.snap_ratio+x.snap_vf+' "'+e.sdir+'s.jpg" -y'; + } + x.stdioPipes = []; + var times = config.pipeAddition; + if(e.details.stream_channels){ + times+=e.details.stream_channels.length + } + for(var i=0; i < times; i++){ + x.stdioPipes.push('pipe') + } + var commandString = x.input+x.pipe + if(commandString === x.input){ + return false + } + s.group[e.ke].mon[e.mid].coProcessorCmd = commandString + return spawn(config.ffmpegDir,s.splitForFFPMEG((commandString).replace(/\s+/g,' ').trim()),{detached: true,stdio:x.stdioPipes}) +} +s.coSpawnLauncher = function(e){ + if(s.group[e.ke].mon[e.id].started === 1 && e.coProcessor === true){ + s.coSpawnClose(e) + s.group[e.ke].mon[e.id].coSpawnProcessor = s.ffmpegCoProcessor(e) + if(s.group[e.ke].mon[e.id].coSpawnProcessor === false){ + return + } + s.log(e,{type:lang['coProcessor Started'],msg:{msg:lang.coProcessorTextStarted,cmd:s.group[e.ke].mon[e.id].coProcessorCmd}}); + s.group[e.ke].mon[e.id].coSpawnProcessorExit = function(){ + s.log(e,{type:lang['coProcess Unexpected Exit'],msg:{msg:lang['coProcess Crashed for Monitor']+' : '+e.id,cmd:s.group[e.ke].mon[e.id].coProcessorCmd}}); + setTimeout(function(){ + s.coSpawnLauncher(e) + },2000) + } + s.group[e.ke].mon[e.id].coSpawnProcessor.on('end',s.group[e.ke].mon[e.id].coSpawnProcessorExit) + s.group[e.ke].mon[e.id].coSpawnProcessor.on('exit',s.group[e.ke].mon[e.id].coSpawnProcessorExit) + var checkLog = function(d,x){return d.indexOf(x)>-1;} + s.group[e.ke].mon[e.id].coSpawnProcessor.stderr.on('data',function(d){ + d=d.toString(); + switch(true){ + case checkLog(d,'deprecated pixel format used'): + case checkLog(d,'[hls @'): + case checkLog(d,'Past duration'): + case checkLog(d,'Last message repeated'): + case checkLog(d,'pkt->duration = 0'): + case checkLog(d,'Non-monotonous DTS'): + case checkLog(d,'NULL @'): + return + break; + } + s.log(e,{type:lang.coProcessor,msg:d}); + }) + if(e.frame_to_stream){ + s.group[e.ke].mon[e.id].coSpawnProcessor.stdout.on('data',e.frame_to_stream) + } + if(e.details.detector === '1'){ + if(e.details.detector_pam === '1'){ + s.createPamDiffEngine(e) + s.group[e.ke].mon[e.id].coSpawnProcessor.stdio[3].pipe(s.group[e.ke].mon[e.id].p2p).pipe(s.group[e.ke].mon[e.id].pamDiff) + }else{ + s.group[e.ke].mon[e.id].coSpawnProcessor.stdio[3].on('data',function(d){ + s.ocvTx({f:'frame',mon:s.group[e.ke].mon_conf[e.id].details,ke:e.ke,id:e.id,time:s.formattedTime(),frame:d}); + }) + } + } + } +} +s.coSpawnClose = function(e){ + if(s.group[e.ke].mon[e.id].coSpawnProcessor){ + s.group[e.ke].mon[e.id].coSpawnProcessor.removeListener('end',s.group[e.ke].mon[e.id].coSpawnProcessorExit); + s.group[e.ke].mon[e.id].coSpawnProcessor.removeListener('exit',s.group[e.ke].mon[e.id].coSpawnProcessorExit); + s.group[e.ke].mon[e.id].coSpawnProcessor.stdin.pause() + s.group[e.ke].mon[e.id].coSpawnProcessor.kill() + delete(s.group[e.ke].mon[e.id].coSpawnProcessor) + s.log(e,{type:lang['coProcessor Stopped'],msg:{msg:lang.coProcessorTextStopped+' : '+e.id}}); + } +} +s.ffmpeg = function(e){ + e.coProcessor = false + e.isStreamer = (e.type === 'dashcam'|| e.type === 'socket') + if(e.details.accelerator === '1' && e.details.hwaccel_vcodec !== 'auto' && e.isStreamer === false && (!e.details.input_maps || e.details.input_maps.length === 0)){ + e.coProcessor = true } //set X for temporary values so we don't break our main monitor object. var x={tmp:''}; @@ -1515,11 +1923,11 @@ s.ffmpeg=function(e){ //input - stream loop (good for static files/lists) if(e.details.stream_loop==='1'){x.cust_input+=' -stream_loop -1'}; //input + if(e.details.cust_input.indexOf('-fflags') === -1){x.cust_input+=' -fflags +igndts'} switch(e.type){ case'h264': switch(e.protocol){ case'rtsp': - if(e.details.cust_input.indexOf('-fflags') === -1){x.cust_input+=' -fflags +igndts'} if(e.details.rtsp_transport&&e.details.rtsp_transport!==''&&e.details.rtsp_transport!=='no'){x.cust_input+=' -rtsp_transport '+e.details.rtsp_transport;} break; } @@ -1679,7 +2087,7 @@ s.ffmpeg=function(e){ if(e.details.preset_stream&&e.details.preset_stream!==''){x.preset_stream=' -preset '+e.details.preset_stream;}else{x.preset_stream=''} //stream - quality //hardware acceleration - if(e.details.accelerator&&e.details.accelerator==='1'){ + if(e.details.accelerator && e.details.accelerator==='1' && e.isStreamer === false){ if(e.details.hwaccel&&e.details.hwaccel!==''){ x.hwaccel+=' -hwaccel '+e.details.hwaccel; } @@ -1721,7 +2129,7 @@ s.ffmpeg=function(e){ //stream - pipe build if(e.details.input_map_choices&&e.details.input_map_choices.stream){ //add input feed map - x.pipe += createFFmpegMap(e.details.input_map_choices.stream) + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices.stream) } if(e.details.stream_vcodec!=='copy'){ x.cust_stream+=x.stream_fps @@ -1757,19 +2165,25 @@ s.ffmpeg=function(e){ x.pipe+=x.preset_stream+x.stream_acodec+x.stream_vcodec+' -f hls'+x.cust_stream+' -hls_time '+x.hls_time+' -hls_list_size '+x.hls_list_size+' -start_number 0 -hls_allow_cache 0 -hls_flags +delete_segments+omit_endlist "'+e.sdir+'s.m3u8"'; break; case'mjpeg': - if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - x.pipe+=' -an -c:v mjpeg -f mpjpeg -boundary_tag shinobi'+x.cust_stream+x.stream_video_filters+' pipe:1'; + if(e.coProcessor === false){ + if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + x.pipe+=' -an -c:v mjpeg -f mpjpeg -boundary_tag shinobi'+x.cust_stream+x.stream_video_filters+' pipe:1'; + } break; case'pam': - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; - x.pipe+=' -an -c:v pam -pix_fmt rgba -f image2pipe'+x.cust_stream+x.stream_video_filters+' pipe:1'; + if(e.coProcessor === false){ + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; + x.pipe+=' -an -c:v pam -pix_fmt rgba -f image2pipe'+x.cust_stream+x.stream_video_filters+' pipe:1'; + } break; case'b64':case'':case undefined:case null://base64 - if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; - if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} - x.pipe+=' -an -c:v mjpeg -f image2pipe'+x.cust_stream+x.stream_video_filters+' pipe:1'; + if(e.coProcessor === false){ + if(e.details.stream_quality && e.details.stream_quality !== '')x.cust_stream+=' -q:v '+e.details.stream_quality; + if(x.dimensions && x.cust_stream.indexOf('-s ')===-1){x.cust_stream+=' -s '+x.dimensions} + x.pipe+=' -an -c:v mjpeg -f image2pipe'+x.cust_stream+x.stream_video_filters+' pipe:1'; + } break; default: x.pipe='' @@ -1777,56 +2191,64 @@ s.ffmpeg=function(e){ } if(e.details.stream_channels){ e.details.stream_channels.forEach(function(v,n){ - x.pipe+=createStreamChannel(n+config.pipeAddition,v) + x.pipe += s.createStreamChannel(e,n+config.pipeAddition,v) }) } //detector - plugins, motion if(e.details.detector==='1'&&e.details.detector_send_frames==='1'){ - if(e.details.input_map_choices&&e.details.input_map_choices.detector){ - //add input feed map - x.pipe += createFFmpegMap(e.details.input_map_choices.detector) - } - if(!e.details.detector_fps||e.details.detector_fps===''){e.details.detector_fps=2} - if(e.details.detector_scale_x&&e.details.detector_scale_x!==''&&e.details.detector_scale_y&&e.details.detector_scale_y!==''){x.dratio=' -s '+e.details.detector_scale_x+'x'+e.details.detector_scale_y}else{x.dratio=' -s 320x240'} - if(e.details.cust_detect&&e.details.cust_detect!==''){x.cust_detect+=e.details.cust_detect;} - if(e.details.detector_pam==='1'){ - x.pipe+=' -an -c:v pam -pix_fmt gray -f image2pipe -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:3' - if(e.details.detector_use_detect_object === '1'){ - //for object detection - x.pipe += createFFmpegMap(e.details.input_map_choices.detector) - x.pipe += ' -f singlejpeg -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:4'; + if(e.details.accelerator !== '1'){ + if(e.details.input_map_choices&&e.details.input_map_choices.detector){ + //add input feed map + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices.detector) + } + if(!e.details.detector_fps||e.details.detector_fps===''){e.details.detector_fps=2} + if(e.details.detector_scale_x&&e.details.detector_scale_x!==''&&e.details.detector_scale_y&&e.details.detector_scale_y!==''){x.dratio=' -s '+e.details.detector_scale_x+'x'+e.details.detector_scale_y}else{x.dratio=' -s 320x240'} + if(e.details.cust_detect&&e.details.cust_detect!==''){x.cust_detect+=e.details.cust_detect;} + if(e.details.detector_pam==='1'){ + x.pipe+=' -an -c:v pam -pix_fmt gray -f image2pipe -r '+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:3' + if(e.details.detector_use_detect_object === '1'){ + //for object detection + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices.detector) + x.pipe += ' -f singlejpeg -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:4'; + } + }else{ + x.pipe+=' -f singlejpeg -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:3'; } - }else{ - x.pipe+=' -f singlejpeg -vf fps='+e.details.detector_fps+x.cust_detect+x.dratio+' pipe:3'; } } //api - snapshot bin/ cgi.bin (JPEG Mode) - if(e.details.snap==='1'){ + if(e.details.snap === '1'){ if(e.details.input_map_choices&&e.details.input_map_choices.snap){ //add input feed map - x.pipe += createFFmpegMap(e.details.input_map_choices.snap) + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices.snap) + } + if(e.coProcessor === false){ + if(!e.details.snap_fps || e.details.snap_fps === ''){e.details.snap_fps = 1} + if(e.details.snap_vf && e.details.snap_vf !== ''){x.snap_vf=' -vf '+e.details.snap_vf}else{x.snap_vf=''} + if(e.details.snap_scale_x && e.details.snap_scale_x !== '' && e.details.snap_scale_y && e.details.snap_scale_y !== ''){x.snap_ratio = ' -s '+e.details.snap_scale_x+'x'+e.details.snap_scale_y}else{x.snap_ratio=''} + if(e.details.cust_snap && e.details.cust_snap !== ''){x.cust_snap = ' '+e.details.cust_snap}else{x.cust_snap=''} + x.pipe+=' -update 1 -r '+e.details.snap_fps+x.cust_snap+x.snap_ratio+x.snap_vf+' "'+e.sdir+'s.jpg" -y'; } - if(!e.details.snap_fps||e.details.snap_fps===''){e.details.snap_fps=1} - if(e.details.snap_vf&&e.details.snap_vf!==''){x.snap_vf=' -vf '+e.details.snap_vf}else{x.snap_vf=''} - if(e.details.snap_scale_x&&e.details.snap_scale_x!==''&&e.details.snap_scale_y&&e.details.snap_scale_y!==''){x.snap_ratio=' -s '+e.details.snap_scale_x+'x'+e.details.snap_scale_y}else{x.snap_ratio=''} - if(e.details.cust_snap&&e.details.cust_snap!==''){x.cust_snap=' '+e.details.cust_snap;}else{x.cust_snap=''} - x.pipe+=' -update 1 -r '+e.details.snap_fps+x.cust_snap+x.snap_ratio+x.snap_vf+' "'+e.sdir+'s.jpg" -y'; } //Traditional Recording Buffer if(e.details.detector=='1'&&e.details.detector_trigger=='1'&&e.details.detector_record_method==='sip'){ if(e.details.input_map_choices&&e.details.input_map_choices.detector_sip_buffer){ //add input feed map - x.pipe += createFFmpegMap(e.details.input_map_choices.detector_sip_buffer) + x.pipe += s.createFFmpegMap(e,e.details.input_map_choices.detector_sip_buffer) } x.detector_buffer_filters=[] if(!e.details.detector_buffer_vcodec||e.details.detector_buffer_vcodec===''||e.details.detector_buffer_vcodec==='auto'){ - switch(e.type){ - case'h264':case'hls':case'mp4': - e.details.detector_buffer_vcodec = 'copy' - break; - default: - e.details.detector_buffer_vcodec = 'libx264' - break; + if(e.details.accelerator === '1' && e.details.hwaccel_vcodec === 'cuvid' && e.details.hwaccel_vcodec === ('h264_cuvid' || 'hevc_cuvid' || 'mjpeg_cuvid' || 'mpeg4_cuvid')){ + e.details.detector_buffer_vcodec = 'h264_nvenc' + }else{ + switch(e.type){ + case'h264':case'hls':case'mp4': + e.details.detector_buffer_vcodec = 'copy' + break; + default: + e.details.detector_buffer_vcodec = 'libx264' + break; + } } } if(!e.details.detector_buffer_acodec||e.details.detector_buffer_acodec===''||e.details.detector_buffer_acodec==='auto'){ @@ -1873,6 +2295,10 @@ s.ffmpeg=function(e){ } x.pipe+=x.detector_buffer_fps+x.detector_buffer_acodec+' -c:v '+e.details.detector_buffer_vcodec+' -f hls -tune '+e.details.detector_buffer_tune+' -g '+e.details.detector_buffer_g+' -hls_time '+e.details.detector_buffer_hls_time+' -hls_list_size '+e.details.detector_buffer_hls_list_size+' -start_number '+e.details.detector_buffer_start_number+' -live_start_index '+e.details.detector_buffer_live_start_index+' -hls_allow_cache 0 -hls_flags +delete_segments+omit_endlist "'+e.sdir+'detectorStream.m3u8"' } + if(e.coProcessor === true){ + // the coProcessor ffmpeg consumes this HLS stream (no audio, frames only) + x.pipe += ' -q:v 1 -an -c:v copy -f hls -tune zerolatency -g 1 -hls_time 2 -hls_list_size 3 -start_number 0 -live_start_index 3 -hls_allow_cache 0 -hls_flags +delete_segments+omit_endlist "'+e.sdir+'cpuOnly.m3u8"' + } //custom - output if(e.details.custom_output&&e.details.custom_output!==''){x.pipe+=' '+e.details.custom_output;} //custom - input flags @@ -1883,7 +2309,7 @@ s.ffmpeg=function(e){ if(e.mode==='record'){ if(e.details.input_map_choices&&e.details.input_map_choices.record){ //add input feed map - x.record_string += createFFmpegMap(e.details.input_map_choices.record) + x.record_string += s.createFFmpegMap(e,e.details.input_map_choices.record) } //if h264, hls, mp4, or local add the audio codec flag switch(e.type){ @@ -1903,30 +2329,30 @@ s.ffmpeg=function(e){ //progress pipe // x.ffmpegCommandString += ' -progress pipe:5'; //add main input - if((e.type==='mp4'||e.type==='mjpeg')&&x.cust_input.indexOf('-re')===-1){ + if((e.type === 'mp4' || e.type === 'mjpeg') && x.cust_input.indexOf('-re') === -1){ x.cust_input += ' -re' } switch(e.type){ case'dashcam': - x.ffmpegCommandString += ' -i -'; + x.ffmpegCommandString += x.cust_input+x.hwaccel+' -i -'; break; case'socket':case'jpeg':case'pipe': - x.ffmpegCommandString += ' -pattern_type glob -f image2pipe'+x.record_fps+' -vcodec mjpeg'+x.cust_input+' -i -'; + x.ffmpegCommandString += ' -pattern_type glob -f image2pipe'+x.record_fps+' -vcodec mjpeg'+x.cust_input+x.hwaccel+' -i -'; break; case'mjpeg': - x.ffmpegCommandString += ' -reconnect 1 -f mjpeg'+x.cust_input+' -i "'+e.url+'"'; + x.ffmpegCommandString += ' -reconnect 1 -f mjpeg'+x.cust_input+x.hwaccel+' -i "'+e.url+'"'; break; case'h264':case'hls':case'mp4': x.ffmpegCommandString += x.cust_input+x.hwaccel+' -i "'+e.url+'"'; break; case'local': - x.ffmpegCommandString += x.cust_input+' -i "'+e.path+'"'; + x.ffmpegCommandString += x.cust_input+x.hwaccel+' -i "'+e.path+'"'; break; } //add extra input maps if(e.details.input_maps){ e.details.input_maps.forEach(function(v,n){ - x.ffmpegCommandString += createInputMap(n+1,v) + x.ffmpegCommandString += s.createInputMap(e,n+1,v) }) } //add recording and stream outputs @@ -1955,11 +2381,11 @@ s.file=function(x,e){ if(!e){return false;} return exec('rm -f '+e,{detached: true}); break; - case'delete_folder': + case'deleteFolder': if(!e){return false;} return exec('rm -rf '+e,{detached: true}); break; - case'delete_files': + case'deleteFiles': if(!e.age_type){e.age_type='min'};if(!e.age){e.age='1'}; exec('find '+e.path+' -type f -c'+e.age_type+' +'+e.age+' -exec rm -f {} +',{detached: true}); break; @@ -2004,7 +2430,10 @@ s.camera=function(x,e,cn,tx){ var monitorConfig = cn URLobject=URL.parse(e) if(monitorConfig.details.control_url_method === 'ONVIF' && monitorConfig.details.control_base_url === ''){ - URLobject.port = 8000 + if(monitorConfig.details.onvif_port === ''){ + monitorConfig.details.onvif_port = 8000 + } + URLobject.port = monitorConfig.details.onvif_port }else if(!URLobject.port){ URLobject.port = 80 } @@ -2281,6 +2710,7 @@ s.camera=function(x,e,cn,tx){ s.tx({viewers:e.ob,ke:e.ke,id:e.id},'MON_'+e.id); break; case'restart'://restart monitor + s.init('monitorStatus',{id:e.id,ke:e.ke,status:'Restarting'}); s.camera('stop',e) setTimeout(function(){ s.camera(e.mode,e) @@ -2335,6 +2765,11 @@ s.camera=function(x,e,cn,tx){ s.log(e,{type:lang['Monitor Idling'],msg:lang.MonitorIdlingText}); } } + var wantedStatus = lang.Stopped + if(x==='idle'){ + var wantedStatus = lang.Idle + } + s.init('monitorStatus',{id:e.id,ke:e.ke,status:wantedStatus}); break; case'start':case'record'://watch or record monitor url s.init(0,{ke:e.ke,mid:e.id}) @@ -2345,6 +2780,7 @@ s.camera=function(x,e,cn,tx){ return } //lock this function + s.init('monitorStatus',{id:e.id,ke:e.ke,status:lang.Starting}); s.group[e.ke].mon[e.id].started = 1; //create host string without username and password e.hosty = e.host.split('@'); @@ -2356,7 +2792,9 @@ s.camera=function(x,e,cn,tx){ e.hosty = e.hosty[0] } //set recording status + var wantedStatus = lang.Watching if(x==='record'){ + var wantedStatus = lang.Recording s.group[e.ke].mon[e.id].record.yes=1; }else{ s.group[e.ke].mon[e.mid].record.yes=0; @@ -2394,10 +2832,71 @@ s.camera=function(x,e,cn,tx){ if (!fs.existsSync(e.sdir)){ fs.mkdirSync(e.sdir); }else{ - s.file('delete_folder',e.sdir+'*') + s.file('deleteFolder',e.sdir+'*') } } setStreamDir() + //try to create HawkEye Onvif Object + if(e.details.is_onvif === '1'){ + console.log('onvifHawk',e.hosty, e.porty.replace(':',''), e.username, e.password) + var doOnvifHawk = true + var errorCount = 0 + var hawkFail = function(msg,callback){ + ++errorCount + if(errorCount > 2){ + callback() + s.log(e,msg); + } + } + var createHawkOnvif = function(){ + if(doOnvifHawk === false){ + return false + } + if(!e.details.onvif_port || e.details.onvif_port === ''){ + e.details.onvif_port = 8000 + } + onvifHawk.connect(e.hosty, e.details.onvif_port, e.username, e.password).then(function(results){ + var camera = results + // if the camera supports events, the module will already be loaded. + if (camera.events) { + camera.events.soap.username = e.username + camera.events.soap.password = e.password + camera.events.on('messages', messages => { + console.log('Messages Received:', (typeof messages)) + }) + camera.events.on('messages:error', error => { + if(error.body.indexOf('anonymous') > -1){ + hawkFail({type:lang.ONVIFEventsNotAvailable,msg:{msg:lang.ONVIFnotCompliantProfileT}},function(){ + camera.events.stopPull() + }) + } + }) + // start a pull event loop + setTimeout(function(){ + camera.events.startPull() + },3000) + // call stopPull() to end the event loop + // camera.events.stopPull() + s.group[e.ke].mon[e.id].HawkEyeOnvifConnection = camera + } + if(s.group[e.ke].mon[e.id].HawkEyeOnvifConnection){ + console.log('Found') + }else{ + console.log('Not Found') + } + }).catch(function(err){ + console.log('Error Connecting') + console.log(err.code) + hawkFail({type:lang.ONVIFEventsNotAvailable,msg:{msg:lang.ONVIFnotCompliantProfileT}},function(){ + doOnvifHawk = false + }) + setTimeout(function(){ + createHawkOnvif() + },3000) + }) + } + createHawkOnvif() + } //set up fatal error handler if(e.details.fatal_max===''){ e.details.fatal_max = 10 @@ -2405,9 +2904,7 @@ s.camera=function(x,e,cn,tx){ e.details.fatal_max = parseFloat(e.details.fatal_max) } var errorFatal = function(errorMessage){ - if(config.debugSystem === true){ - console.log(errorMessage,(new Error()).stack) - } + s.debugLog(errorMessage) clearTimeout(s.group[e.ke].mon[e.id].err_fatal_timeout); ++errorFatalCount; if(s.group[e.ke].mon[e.id].started===1){ @@ -2421,19 +2918,26 @@ s.camera=function(x,e,cn,tx){ }else{ s.kill(s.group[e.ke].mon[e.id].spawn,e); } + s.init('monitorStatus',{id:e.id,ke:e.ke,status:lang.Died}); } - errorFatalCount = 0; + var errorFatalCount = 0; + //cutoff time and recording check interval + if(!e.details.cutoff||e.details.cutoff===''){e.cutoff=15}else{e.cutoff=parseFloat(e.details.cutoff)}; + if(isNaN(e.cutoff)===true){e.cutoff=15} //set master based process launcher - launchMonitorProcesses = function(){ + var launchMonitorProcesses = function(){ + s.group[e.ke].mon[e.id].allowStdinWrite = false + s.txToDashcamUsers({ + f : 'disable_stream', + ke : e.ke, + mid : e.id + },e.ke) if(e.details.detector_trigger=='1'){ s.group[e.ke].mon[e.id].motion_lock=setTimeout(function(){ clearTimeout(s.group[e.ke].mon[e.id].motion_lock); delete(s.group[e.ke].mon[e.id].motion_lock); - },30000) + },15000) } - //cutoff time and recording check interval - if(!e.details.cutoff||e.details.cutoff===''){e.cutoff=15}else{e.cutoff=parseFloat(e.details.cutoff)}; - if(isNaN(e.cutoff)===true){e.cutoff=15} //start "no motion" checker if(e.details.detector=='1'&&e.details.detector_notrigger=='1'){ if(!e.details.detector_notrigger_timeout||e.details.detector_notrigger_timeout===''){ @@ -2445,7 +2949,7 @@ s.camera=function(x,e,cn,tx){ s.group[e.ke].mon[e.id].detector_notrigger_timeout_function=function(){ if(config.mail&&e.details.detector_notrigger_mail=='1'){ e.mailOptions = { - from: '"ShinobiCCTV" ', // sender address + from: config.mail.from, // sender address to: r.mail, // list of receivers subject: lang.NoMotionEmailText1+' '+e.name+' ('+e.id+')', // Subject line html: ''+lang.NoMotionEmailText2+' '+e.details.detector_notrigger_timeout+' '+lang.minutes+'.', @@ -2466,15 +2970,60 @@ s.camera=function(x,e,cn,tx){ s.group[e.ke].mon[e.id].detector_notrigger_timeout=setInterval(s.group[e.ke].mon[e.id].detector_notrigger_timeout_function,s.group[e.ke].mon[e.id].detector_notrigger_timeout) }) } + var resetRecordingCheck = function(){ + clearTimeout(s.group[e.ke].mon[e.id].checker) + var cutoff = e.cutoff + 0 + if(e.type === 'dashcam'){ + cutoff *= 100 + } + s.group[e.ke].mon[e.id].checker=setTimeout(function(){ + if(s.group[e.ke].mon[e.id].started === 1 && s.group[e.ke].mon_conf[e.id].mode === 'record'){ + launchMonitorProcesses(); + s.init('monitorStatus',{id:e.id,ke:e.ke,status:lang.Restarting}); + s.log(e,{type:lang['Camera is not recording'],msg:{msg:lang['Restarting Process']}}); + } + },60000 * cutoff * 1.1); + } var resetStreamCheck=function(){ clearTimeout(s.group[e.ke].mon[e.id].checkStream) - s.group[e.ke].mon[e.id].checkStream=setTimeout(function(){ + s.group[e.ke].mon[e.id].checkStream = setTimeout(function(){ if(s.group[e.ke].mon[e.id].started===1){ launchMonitorProcesses(); s.log(e,{type:lang['Camera is not streaming'],msg:{msg:lang['Restarting Process']}}); } },60000*1); } + if(e.details.snap === '1'){ + var resetSnapCheck = function(){ + clearTimeout(s.group[e.ke].mon[e.id].checkSnap) + s.group[e.ke].mon[e.id].checkSnap = setTimeout(function(){ + if(s.group[e.ke].mon[e.id].started === 1){ + fs.stat(e.sdir+'s.jpg',function(err,snap){ + var notStreaming = function(){ + if(e.coProcessor === true){ + s.coSpawnLauncher(e) + }else{ + launchMonitorProcesses() + } + s.log(e,{type:lang['Camera is not streaming'],msg:{msg:lang['Restarting Process']}}); + } + if(err){ + notStreaming() + }else{ + if(!e.checkSnapTime)e.checkSnapTime = snap.mtime + if(err || e.checkSnapTime === snap.mtime){ + e.checkSnapTime = snap.mtime + notStreaming() + }else{ + resetSnapCheck() + } + } + }) + } + },60000*1); + } + resetSnapCheck() + } if(config.childNodes.mode !== 'child' && s.platform!=='darwin' && (x==='record' || (x==='start'&&e.details.detector_record_method==='sip'))){ //check if ffmpeg is recording s.group[e.ke].mon[e.id].fswatch = fs.watch(e.dir, {encoding : 'utf8'}, (event, filename) => { @@ -2483,14 +3032,7 @@ s.camera=function(x,e,cn,tx){ s.group[e.ke].mon[e.id].open = filename.split('.')[0] break; case'change': - clearTimeout(s.group[e.ke].mon[e.id].checker) - clearTimeout(s.group[e.ke].mon[e.id].checkStream) - s.group[e.ke].mon[e.id].checker=setTimeout(function(){ - if(s.group[e.ke].mon[e.id].started===1){ - launchMonitorProcesses(); - s.log(e,{type:lang['Camera is not recording'],msg:{msg:lang['Restarting Process']}}); - } - },60000 * e.cutoff * 1.1); + resetRecordingCheck() break; } }); @@ -2520,7 +3062,18 @@ s.camera=function(x,e,cn,tx){ e.frames=0; if(!s.group[e.ke].mon[e.id].record){s.group[e.ke].mon[e.id].record={yes:1}}; //launch ffmpeg (main) - s.group[e.ke].mon[e.id].spawn = s.ffmpeg(e); + s.group[e.ke].mon[e.id].spawn = s.ffmpeg(e) + if(e.type === 'dashcam'){ + setTimeout(function(){ + s.group[e.ke].mon[e.id].allowStdinWrite = true + s.txToDashcamUsers({ + f : 'enable_stream', + ke : e.ke, + mid : e.id + },e.ke) + },30000) + } + s.init('monitorStatus',{id:e.id,ke:e.ke,status:wantedStatus}); //on unexpected exit restart s.group[e.ke].mon[e.id].spawn_exit=function(){ if(s.group[e.ke].mon[e.id].started===1){ @@ -2532,17 +3085,7 @@ s.camera=function(x,e,cn,tx){ } s.group[e.ke].mon[e.id].spawn.on('end',s.group[e.ke].mon[e.id].spawn_exit) s.group[e.ke].mon[e.id].spawn.on('exit',s.group[e.ke].mon[e.id].spawn_exit) - // -// s.group[e.ke].mon[e.id].spawn.stdio[5].on('data',function(data){ -// data = data.toString(); -// console.log('---') -// var json = {} -// data.split('\n').forEach(function(v){ -// var vv = v.split('=') -// json[vv[0]] = vv[1] -// }) -// console.log(json) -// }) + //emitter for mjpeg if(!e.details.stream_mjpeg_clients||e.details.stream_mjpeg_clients===''||isNaN(e.details.stream_mjpeg_clients)===false){e.details.stream_mjpeg_clients=20;}else{e.details.stream_mjpeg_clients=parseInt(e.details.stream_mjpeg_clients)} s.group[e.ke].mon[e.id].emitter = new events.EventEmitter().setMaxListeners(e.details.stream_mjpeg_clients); @@ -2630,120 +3173,30 @@ s.camera=function(x,e,cn,tx){ s.ocvTx({f:'init_monitor',id:e.id,ke:e.ke}) //frames from motion detect if(e.details.detector_pam==='1'){ - var width, - height, - globalSensitivity, - fullFrame = false - if(s.group[e.ke].mon_conf[e.id].details.detector_scale_x===''||s.group[e.ke].mon_conf[e.id].details.detector_scale_y===''){ - width = s.group[e.ke].mon_conf[e.id].details.detector_scale_x; - height = s.group[e.ke].mon_conf[e.id].details.detector_scale_y; - }else{ - width = e.width - height = e.height - } - if(e.details.detector_sensitivity===''){ - globalSensitivity = 10 - }else{ - globalSensitivity = parseInt(e.details.detector_sensitivity) - } - if(e.details.detector_frame==='1'){ - fullFrame={ - name:'FULL_FRAME', - sensitivity:globalSensitivity, - points:[ - [0,0], - [0,height], - [width,height], - [width,0] - ] - }; - } - var regions = s.createPamDiffRegionArray(s.group[e.ke].mon_conf[e.id].details.cords,globalSensitivity,fullFrame); - if(!s.group[e.ke].mon[e.id].noiseFilterArray)s.group[e.ke].mon[e.id].noiseFilterArray = {} - var noiseFilterArray = s.group[e.ke].mon[e.id].noiseFilterArray - Object.keys(regions.notForPam).forEach(function(name){ - if(!noiseFilterArray[name])noiseFilterArray[name]=[]; - }) - s.group[e.ke].mon[e.id].pamDiff = new PamDiff({grayscale: 'luminosity', regions : regions.forPam}); - s.group[e.ke].mon[e.id].p2p = new P2P(); - var sendTrigger = function(trigger){ - var detectorObject = { - f:'trigger', - id:e.id, - ke:e.ke, - name:trigger.name, - details:{ - plug:'built-in', - name:trigger.name, - reason:'motion', - confidence:trigger.percent, - }, - plates:[], - imgHeight:height, - imgWidth:width + if(e.coProcessor === false){ + s.createPamDiffEngine(e) + s.group[e.ke].mon[e.id].spawn.stdio[3].pipe(s.group[e.ke].mon[e.id].p2p).pipe(s.group[e.ke].mon[e.id].pamDiff) + if(e.details.detector_use_detect_object === '1'){ + s.group[e.ke].mon[e.id].spawn.stdio[4].on('data',function(d){ + s.group[e.ke].mon[e.id].lastJpegDetectorFrame = d + }) } - detectorObject.doObjectDetection = (s.ocv && e.details.detector_use_detect_object === '1') - s.camera('motion',detectorObject) - if(detectorObject.doObjectDetection === true){ - s.ocvTx({f:'frame',mon:s.group[e.ke].mon_conf[e.id].details,ke:e.ke,id:e.id,time:s.formattedTime(),frame:s.group[e.ke].mon[e.id].lastJpegDetectorFrame}); - } - } - var filterTheNoise = function(trigger){ - if(noiseFilterArray[trigger.name].length > 2){ - var thePreviousTriggerPercent = noiseFilterArray[trigger.name][noiseFilterArray[trigger.name].length - 1]; - var triggerDifference = trigger.percent - thePreviousTriggerPercent; - var noiseRange = e.details.detector_noise_filter_range - if(!noiseRange || noiseRange === ''){ - noiseRange = 6 - } - noiseRange = parseFloat(noiseRange) - if(((trigger.percent - thePreviousTriggerPercent) < noiseRange)||(thePreviousTriggerPercent - trigger.percent) > -noiseRange){ - noiseFilterArray[trigger.name].push(trigger.percent); - } - }else{ - noiseFilterArray[trigger.name].push(trigger.percent); - } - if(noiseFilterArray[trigger.name].length > 10){ - noiseFilterArray[trigger.name] = noiseFilterArray[trigger.name].splice(1,10) - } - var theNoise = 0; - noiseFilterArray[trigger.name].forEach(function(v,n){ - theNoise += v; - }) - theNoise = theNoise / noiseFilterArray[trigger.name].length; -// console.log(noiseFilterArray[trigger.name]) -// console.log(theNoise) - var triggerPercentWithoutNoise = trigger.percent - theNoise; - if(triggerPercentWithoutNoise > regions.notForPam[trigger.name].sensitivity){ - sendTrigger(trigger); - } - } - if(e.details.detector_noise_filter==='1'){ - s.group[e.ke].mon[e.id].pamDiff.on('diff', (data) => { - data.trigger.forEach(filterTheNoise) - }) - }else{ - s.group[e.ke].mon[e.id].pamDiff.on('diff', (data) => { - data.trigger.forEach(sendTrigger) - }) - } - - s.group[e.ke].mon[e.id].spawn.stdio[3].pipe(s.group[e.ke].mon[e.id].p2p).pipe(s.group[e.ke].mon[e.id].pamDiff) - if(e.details.detector_use_detect_object === '1'){ - s.group[e.ke].mon[e.id].spawn.stdio[4].on('data',function(d){ - s.group[e.ke].mon[e.id].lastJpegDetectorFrame = d - }) - } + } }else{ - s.group[e.ke].mon[e.id].spawn.stdio[3].on('data',function(d){ - s.ocvTx({f:'frame',mon:s.group[e.ke].mon_conf[e.id].details,ke:e.ke,id:e.id,time:s.formattedTime(),frame:d}); - }) + if(e.coProcessor === false){ + s.group[e.ke].mon[e.id].spawn.stdio[3].on('data',function(d){ + s.ocvTx({f:'frame',mon:s.group[e.ke].mon_conf[e.id].details,ke:e.ke,id:e.id,time:s.formattedTime(),frame:d}); + }) + } } } //frames to stream switch(e.details.stream_type){ case'mp4': s.group[e.ke].mon[e.id].mp4frag['MAIN'] = new Mp4Frag(); + s.group[e.ke].mon[e.id].mp4frag['MAIN'].on('error',function(error){ + s.log(e,{type:lang['Mp4Frag'],msg:{error:error}}) + }) s.group[e.ke].mon[e.id].spawn.stdio[1].pipe(s.group[e.ke].mon[e.id].mp4frag['MAIN']) break; case'flv': @@ -2791,7 +3244,11 @@ s.camera=function(x,e,cn,tx){ break; } if(e.frame_to_stream){ - s.group[e.ke].mon[e.id].spawn.stdout.on('data',e.frame_to_stream); + if(e.coProcessor === true && e.details.stream_type === ('b64'||'mjpeg')){ + + }else{ + s.group[e.ke].mon[e.id].spawn.stdout.on('data',e.frame_to_stream) + } } if(e.details.stream_channels&&e.details.stream_channels!==''){ var createStreamEmitter = function(channel,number){ @@ -2832,14 +3289,24 @@ s.camera=function(x,e,cn,tx){ e.details.stream_channels.forEach(createStreamEmitter) } if(x==='record'||e.type==='mjpeg'||e.type==='h264'||e.type==='local'){ + var checkLog = function(d,x){return d.indexOf(x)>-1;} s.group[e.ke].mon[e.id].spawn.stderr.on('data',function(d){ d=d.toString(); - e.chk=function(x){return d.indexOf(x)>-1;} switch(true){ + case checkLog(d,'[hls @'): + case checkLog(d,'Past duration'): + case checkLog(d,'Last message repeated'): + case checkLog(d,'pkt->duration = 0'): + case checkLog(d,'Non-monotonous DTS'): + case checkLog(d,'NULL @'): + case checkLog(d,'RTP: missed'): + case checkLog(d,'deprecated pixel format used'): + return + break; //mp4 output with webm encoder chosen - case e.chk('Could not find tag for vp8'): - case e.chk('Only VP8 or VP9 Video'): - case e.chk('Could not write header'): + case checkLog(d,'Could not find tag for vp8'): + case checkLog(d,'Only VP8 or VP9 Video'): + case checkLog(d,'Could not write header'): // switch(e.ext){ // case'mp4': // e.details.vcodec='libx264' @@ -2857,34 +3324,29 @@ s.camera=function(x,e,cn,tx){ // s.camera('restart',e) return s.log(e,{type:lang['Incorrect Settings Chosen'],msg:{msg:d}}) break; - case e.chk('NULL @'): - case e.chk('RTP: missed'): - case e.chk('deprecated pixel format used, make sure you did set range correctly'): - return - break; -// case e.chk('av_interleaved_write_frame'): - case e.chk('Connection refused'): - case e.chk('Connection timed out'): +// case checkLog(d,'av_interleaved_write_frame'): + case checkLog(d,'Connection refused'): + case checkLog(d,'Connection timed out'): //restart setTimeout(function(){ s.log(e,{type:lang['Connection timed out'],msg:lang['Retrying...']}); errorFatal('Connection timed out'); },1000) break; -// case e.chk('No such file or directory'): -// case e.chk('Unable to open RTSP for listening'): -// case e.chk('timed out'): -// case e.chk('Invalid data found when processing input'): -// case e.chk('Immediate exit requested'): -// case e.chk('reset by peer'): +// case checkLog(d,'No such file or directory'): +// case checkLog(d,'Unable to open RTSP for listening'): +// case checkLog(d,'timed out'): +// case checkLog(d,'Invalid data found when processing input'): +// case checkLog(d,'reset by peer'): // if(e.frames===0&&x==='record'){s.video('delete',e)}; // setTimeout(function(){ // if(!s.group[e.ke].mon[e.id].spawn){launchMonitorProcesses()} // },2000) // break; - case e.chk('mjpeg_decode_dc'): - case e.chk('bad vlc'): - case e.chk('error dc'): + case checkLog(d,'Immediate exit requested'): + case checkLog(d,'mjpeg_decode_dc'): + case checkLog(d,'bad vlc'): + case checkLog(d,'error dc'): launchMonitorProcesses() break; case /T[0-9][0-9]-[0-9][0-9]-[0-9][0-9]./.test(d): @@ -2911,12 +3373,18 @@ s.camera=function(x,e,cn,tx){ }) } s.group[e.ke].mon[e.id].detector_motion_count = 0 + resetRecordingCheck() return; break; } s.log(e,{type:"FFMPEG STDERR",msg:d}) }); } + if(e.coProcessor === true){ + setTimeout(function(){ + s.coSpawnLauncher(e) + },6000) + } }else{ s.log(e,{type:lang["Ping Failed"],msg:lang.skipPingText1}); errorFatal("Ping Failed");return; @@ -3027,6 +3495,8 @@ s.camera=function(x,e,cn,tx){ if(d.mon.details.detector_webhook=='1'){ var detector_webhook_url = d.mon.details.detector_webhook_url .replace(/{{TIME}}/g,s.timeObject(new Date).format()) + .replace(/{{REGION_NAME}}/g,d.details.name) + .replace(/{{SNAP_PATH}}/g,s.dir.streams+'/'+d.ke+'/'+d.id+'/s.jpg') .replace(/{{MONITOR_ID}}/g,d.id) .replace(/{{GROUP_KEY}}/g,d.ke) .replace(/{{DETAILS}}/g,detailString) @@ -3128,8 +3598,73 @@ s.camera=function(x,e,cn,tx){ }).end(); } + var screenshotName = 'Motion_'+(d.mon.name.replace(/[^\w\s]/gi,''))+'_'+d.id+'_'+d.ke+'_'+s.formattedTime() + var screenshotBuffer = null + var detectorStreamBuffers = null + + //discord bot + if(d.mon.details.detector_discordbot === '1' && !s.group[d.ke].mon[d.id].detector_discordbot){ + var detector_discordbot_timeout + if(!d.mon.details.detector_discordbot_timeout||d.mon.details.detector_discordbot_timeout===''){ + detector_discordbot_timeout = 1000*60*10; + }else{ + detector_discordbot_timeout = parseFloat(d.mon.details.detector_discordbot_timeout)*1000*60; + } + //lock mailer so you don't get emailed on EVERY trigger event. + s.group[d.ke].mon[d.id].detector_discordbot=setTimeout(function(){ + //unlock so you can mail again. + clearTimeout(s.group[d.ke].mon[d.id].detector_discordbot); + delete(s.group[d.ke].mon[d.id].detector_discordbot); + },detector_discordbot_timeout); + var files = [] + var sendAlert = function(){ + s.discordMsg({ + author: { + name: s.group[d.ke].mon_conf[d.id].name, + icon_url: "https://shinobi.video/libs/assets/icon/apple-touch-icon-152x152.png" + }, + title: lang.Event+' - '+screenshotName, + description: lang.EventText1+' '+s.timeObject(new Date).format(), + fields: [], + timestamp: new Date(), + footer: { + icon_url: "https://shinobi.video/libs/assets/icon/apple-touch-icon-152x152.png", + text: "Shinobi Systems" + } + },files,d.ke) + } + if(d.mon.details.detector_discordbot_send_video === '1'){ + if(!detectorStreamBuffers){ + detectorStreamBuffers = s.getDetectorStreams(d) + } + detectorStreamBuffers.slice(detectorStreamBuffers.length - 2,detectorStreamBuffers.length).forEach(function(filepath,n){ + files.push({ + attachment: filepath, + name: 'Video Clip '+n+'.ts' + }) + }) + } + if(screenshotBuffer){ + sendAlert() + }else if(d.mon.details.snap === '1'){ + fs.readFile(s.dir.streams+'/'+d.ke+'/'+d.id+'/s.jpg',function(err, frame){ + if(err){ + s.systemLog(lang.EventText2+' '+d.ke+' '+d.id,err) + }else{ + screenshotBuffer = frame + files.push({ + attachment: screenshotBuffer, + name: screenshotName+'.jpg' + }) + } + sendAlert() + }) + }else{ + sendAlert() + } + } //mailer - if(config.mail&&!s.group[d.ke].mon[d.id].detector_mail&&d.mon.details.detector_mail==='1'){ + if(config.mail && !s.group[d.ke].mon[d.id].detector_mail && d.mon.details.detector_mail === '1'){ s.sqlQuery('SELECT mail FROM Users WHERE ke=? AND details NOT LIKE ?',[d.ke,'%"sub"%'],function(err,r){ r=r[0]; var detector_mail_timeout @@ -3144,35 +3679,54 @@ s.camera=function(x,e,cn,tx){ clearTimeout(s.group[d.ke].mon[d.id].detector_mail); delete(s.group[d.ke].mon[d.id].detector_mail); },detector_mail_timeout); - d.frame_filename='Motion_'+(d.mon.name.replace(/[^\w\s]/gi, ''))+'_'+d.id+'_'+d.ke+'_'+s.formattedTime()+'.jpg'; - fs.readFile(s.dir.streams+'/'+d.ke+'/'+d.id+'/s.jpg',function(err, frame){ - d.mailOptions = { - from: '"ShinobiCCTV" ', // sender address - to: r.mail, // list of receivers - subject: lang.Event+' - '+d.frame_filename, // Subject line - html: ''+lang.EventText1+' '+s.timeObject(new Date).format()+'.', - }; - if(err){ - s.systemLog(lang.EventText2+' '+d.ke+' '+d.id,err) - }else{ - d.mailOptions.attachments=[ - { - filename: d.frame_filename, - content: frame - } - ] - d.mailOptions.html=''+lang.EventText3+'' - } - Object.keys(d.details).forEach(function(v,n){ - d.mailOptions.html+='
'+v+' : '+d.details[v]+'
' + var files = [] + var mailOptions = { + from: config.mail.from, // sender address + to: r.mail, // list of receivers + subject: lang.Event+' - '+screenshotName, // Subject line + html: ''+lang.EventText1+' '+s.timeObject(new Date).format()+'.', + attachments: files + } + var sendMail = function(){ + Object.keys(d.details).forEach(function(v,n){ + mailOptions.html+='
'+v+' : '+d.details[v]+'
' }) - nodemailer.sendMail(d.mailOptions, (error, info) => { + nodemailer.sendMail(mailOptions, (error, info) => { if (error) { s.systemLog(lang.MailError,error) - return ; + return false; } - }); - }) + }) + } + if(d.mon.details.detector_mail_send_video === '1'){ + if(!detectorStreamBuffers){ + detectorStreamBuffers = s.getDetectorStreams(d) + } + detectorStreamBuffers.slice(detectorStreamBuffers.length - 2,detectorStreamBuffers.length).forEach(function(filepath,n){ + files.push({ + filename: 'Video Clip '+n+'.ts', + content: fs.readFileSync(filepath) + }) + }) + } + if(screenshotBuffer){ + sendMail() + }else if(d.mon.details.snap === '1'){ + fs.readFile(s.dir.streams+'/'+d.ke+'/'+d.id+'/s.jpg',function(err, frame){ + if(err){ + s.systemLog(lang.EventText2+' '+d.ke+' '+d.id,err) + }else{ + screenshotBuffer = frame + files.push({ + filename: screenshotName+'.jpg', + content: frame + }) + } + sendMail() + }) + }else{ + sendMail() + } }); } if(d.mon.details.detector_command_enable==='1'&&!s.group[d.ke].mon[d.id].detector_command){ @@ -3189,6 +3743,8 @@ s.camera=function(x,e,cn,tx){ },detector_command_timeout); var detector_command = d.mon.details.detector_command .replace(/{{TIME}}/g,s.timeObject(new Date).format()) + .replace(/{{REGION_NAME}}/g,d.details.name) + .replace(/{{SNAP_PATH}}/g,s.dir.streams+'/'+d.ke+'/'+d.id+'/s.jpg') .replace(/{{MONITOR_ID}}/g,d.id) .replace(/{{GROUP_KEY}}/g,d.ke) .replace(/{{DETAILS}}/g,detailString) @@ -3774,57 +4330,67 @@ var tx; if(r&&r[0]){ r=r[0]; d.d=JSON.parse(r.details); - if(d.d.get_server_log==='1'){ - cn.join('GRPLOG_'+d.ke) - }else{ - cn.leave('GRPLOG_'+d.ke) - } - ///unchangeable from client side, so reset them in case they did. - d.form.details=JSON.parse(d.form.details) - //admin permissions - d.form.details.permissions=d.d.permissions - d.form.details.edit_size=d.d.edit_size - d.form.details.edit_days=d.d.edit_days - d.form.details.use_admin=d.d.use_admin - d.form.details.use_webdav=d.d.use_webdav - d.form.details.use_ldap=d.d.use_ldap - //check - if(d.d.edit_days=="0"){ - d.form.details.days=d.d.days; - } - if(d.d.edit_size=="0"){ - d.form.details.size=d.d.size; - } - if(d.d.sub){ - d.form.details.sub=d.d.sub; - if(d.d.monitors){d.form.details.monitors=d.d.monitors;} - if(d.d.allmonitors){d.form.details.allmonitors=d.d.allmonitors;} - if(d.d.video_delete){d.form.details.video_delete=d.d.video_delete;} - if(d.d.video_view){d.form.details.video_view=d.d.video_view;} - if(d.d.monitor_edit){d.form.details.monitor_edit=d.d.monitor_edit;} - if(d.d.size){d.form.details.size=d.d.size;} - if(d.d.days){d.form.details.days=d.d.days;} - delete(d.form.details.mon_groups) - } - var newSize = d.form.details.size - d.form.details=JSON.stringify(d.form.details) - /// - d.set=[],d.ar=[]; - if(d.form.pass&&d.form.pass!==''){d.form.pass=s.md5(d.form.pass);}else{delete(d.form.pass)}; - delete(d.form.password_again); - d.for=Object.keys(d.form); - d.for.forEach(function(v){ - d.set.push(v+'=?'),d.ar.push(d.form[v]); - }); - d.ar.push(d.ke),d.ar.push(d.uid); - s.sqlQuery('UPDATE Users SET '+d.set.join(',')+' WHERE ke=? AND uid=?',d.ar,function(err,r){ - if(!d.d.sub){ - s.group[d.ke].sizeLimit = parseFloat(newSize) - delete(s.group[d.ke].webdav) - s.init('apps',d) + if(!d.d.sub || d.d.user_change === "1"){ + if(d.d.get_server_log==='1'){ + cn.join('GRPLOG_'+d.ke) + }else{ + cn.leave('GRPLOG_'+d.ke) } - tx({f:'user_settings_change',uid:d.uid,ke:d.ke,form:d.form}); - }); + ///unchangeable from client side, so reset them in case they did. + d.form.details=JSON.parse(d.form.details) + //admin permissions + d.form.details.permissions=d.d.permissions + d.form.details.edit_size=d.d.edit_size + d.form.details.edit_days=d.d.edit_days + d.form.details.use_admin=d.d.use_admin + d.form.details.use_webdav=d.d.use_webdav + d.form.details.use_aws_s3=d.d.use_aws_s3 + d.form.details.use_ldap=d.d.use_ldap + //check + if(d.d.edit_days=="0"){ + d.form.details.days=d.d.days; + } + if(d.d.edit_size=="0"){ + d.form.details.size=d.d.size; + } + if(d.d.sub){ + d.form.details.sub=d.d.sub; + if(d.d.monitors){d.form.details.monitors=d.d.monitors;} + if(d.d.allmonitors){d.form.details.allmonitors=d.d.allmonitors;} + if(d.d.monitor_create){d.form.details.monitor_create=d.d.monitor_create;} + if(d.d.video_delete){d.form.details.video_delete=d.d.video_delete;} + if(d.d.video_view){d.form.details.video_view=d.d.video_view;} + if(d.d.monitor_edit){d.form.details.monitor_edit=d.d.monitor_edit;} + if(d.d.size){d.form.details.size=d.d.size;} + if(d.d.days){d.form.details.days=d.d.days;} + delete(d.form.details.mon_groups) + } + var newSize = d.form.details.size + d.form.details=JSON.stringify(d.form.details) + /// + d.set=[],d.ar=[]; + if(d.form.pass&&d.form.pass!==''){d.form.pass=s.md5(d.form.pass);}else{delete(d.form.pass)}; + delete(d.form.password_again); + d.for=Object.keys(d.form); + d.for.forEach(function(v){ + d.set.push(v+'=?'),d.ar.push(d.form[v]); + }); + d.ar.push(d.ke),d.ar.push(d.uid); + s.sqlQuery('UPDATE Users SET '+d.set.join(',')+' WHERE ke=? AND uid=?',d.ar,function(err,r){ + if(!d.d.sub){ + s.group[d.ke].sizeLimit = parseFloat(newSize) + delete(s.group[d.ke].webdav) + s.group[d.ke].aws = null + s.group[d.ke].aws_s3 = null + if(s.group[d.ke].discordBot && s.group[d.ke].discordBot.destroy){ + s.group[d.ke].discordBot.destroy() + delete(s.group[d.ke].discordBot) + } + s.init('apps',d) + } + tx({f:'user_settings_change',uid:d.uid,ke:d.ke,form:d.form}); + }); + } } }) break; @@ -3836,15 +4402,15 @@ var tx; switch(d.fff){ case'videos&events': if(!d.eventLimit){ - d.eventLimit=500 + d.eventLimit = 500 }else{ d.eventLimit = parseInt(d.eventLimit); } if(!d.eventStartDate&&d.startDate){ - d.eventStartDate=d.startDate + d.eventStartDate = s.stringToSqlTime(d.startDate) } if(!d.eventEndDate&&d.endDate){ - d.eventEndDate=d.endDate + d.eventEndDate = s.stringToSqlTime(d.endDate) } var monitorQuery = '' var monitorValues = [] @@ -3867,15 +4433,13 @@ var tx; var eventQuery = 'SELECT * FROM Events WHERE ke=?'; var eventQueryValues = [cn.ke]; if(d.eventStartDate&&d.eventStartDate!==''){ - d.eventStartDate=d.eventStartDate.replace('T',' ') if(d.eventEndDate&&d.eventEndDate!==''){ - d.eventEndDate=d.eventEndDate.replace('T',' ') eventQuery+=' AND `time` >= ? AND `time` <= ?'; - eventQueryValues.push(decodeURIComponent(d.eventStartDate)) - eventQueryValues.push(decodeURIComponent(d.eventEndDate)) + eventQueryValues.push(d.eventStartDate) + eventQueryValues.push(d.eventEndDate) }else{ eventQuery+=' AND `time` >= ?'; - eventQueryValues.push(decodeURIComponent(d.eventStartDate)) + eventQueryValues.push(d.eventStartDate) } } if(monitorValues.length>0){ @@ -3904,10 +4468,10 @@ var tx; eventQuery.push() } if(!d.videoStartDate&&d.startDate){ - d.videoStartDate=d.startDate + d.videoStartDate = s.stringToSqlTime(d.startDate) } if(!d.videoEndDate&&d.endDate){ - d.videoEndDate=d.endDate + d.videoEndDate = s.stringToSqlTime(d.endDate) } var getVideos = function(callback){ var videoQuery='SELECT * FROM Videos WHERE ke=?'; @@ -3921,19 +4485,15 @@ var tx; } switch(true){ case(d.videoStartDate&&d.videoStartDate!==''&&d.videoEndDate&&d.videoEndDate!==''): - d.videoStartDate=d.videoStartDate.replace('T',' ') - d.videoEndDate=d.videoEndDate.replace('T',' ') videoQuery+=' AND `time` '+d.videoStartDateOperator+' ? AND `end` '+d.videoEndDateOperator+' ?'; videoQueryValues.push(d.videoStartDate) videoQueryValues.push(d.videoEndDate) break; case(d.videoStartDate&&d.videoStartDate!==''): - d.videoStartDate=d.videoStartDate.replace('T',' ') videoQuery+=' AND `time` '+d.videoStartDateOperator+' ?'; videoQueryValues.push(d.videoStartDate) break; case(d.videoEndDate&&d.videoEndDate!==''): - d.videoEndDate=d.videoEndDate.replace('T',' ') videoQuery+=' AND `end` '+d.videoEndDateOperator+' ?'; videoQueryValues.push(d.videoEndDate) break; @@ -4193,8 +4753,11 @@ var tx; switch(d.ff){ case'update': s.ffmpegKill() - s.systemLog('Shinobi ordered to update',{by:cn.mail,ip:cn.ip,distro:d.distro}) - var updateProcess = spawn('sh',(__dirname+'/UPDATE.sh '+d.distro).split(' '),{detached: true}) + s.systemLog('Shinobi ordered to update',{ + by:cn.mail, + ip:cn.ip + }) + var updateProcess = spawn('sh',(__dirname+'/UPDATE.sh').split(' '),{detached: true}) updateProcess.stderr.on('data',function(data){ s.systemLog('Update Info',data.toString()) }) @@ -4243,6 +4806,8 @@ var tx; //check to see if custom key set if(!d.form.ke||d.form.ke===''){ d.form.ke=s.gid() + }else{ + d.form.ke = d.form.ke.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '') } //write user to db s.sqlQuery('INSERT INTO Users (ke,uid,mail,pass,details) VALUES (?,?,?,?,?)',[d.form.ke,d.form.uid,d.form.mail,s.md5(d.form.pass),d.form.details]) @@ -4262,34 +4827,43 @@ var tx; } break; case'edit': - if(d.form.pass&&d.form.pass!==''){ - if(d.form.pass===d.form.password_again){ - d.form.pass=s.md5(d.form.pass); - }else{ - s.tx({f:'error',ff:'account_edit',msg:lang["Passwords Don't Match"]},cn.id) - return - } - }else{ - delete(d.form.pass); - } - delete(d.form.password_again); - d.keys=Object.keys(d.form); - d.set=[]; - d.values=[]; - d.keys.forEach(function(v,n){ - if(d.set==='ke'||d.set==='password_again'||!d.form[v]){return} - d.set.push(v+'=?') - d.values.push(d.form[v]) - }) - d.values.push(d.account.mail) - s.sqlQuery('UPDATE Users SET '+d.set.join(',')+' WHERE mail=?',d.values,function(err,r) { - if(err){ - s.tx({f:'error',ff:'account_edit',msg:lang.AccountEditText1},cn.id) - return + s.sqlQuery('SELECT * FROM Users WHERE mail=?',[d.account.mail],function(err,r) { + if(r && r[0]){ + r = r[0] + var details = JSON.parse(r.details) + if(d.form.pass&&d.form.pass!==''){ + if(d.form.pass===d.form.password_again){ + d.form.pass=s.md5(d.form.pass); + }else{ + s.tx({f:'error',ff:'edit_account',msg:lang["Passwords Don't Match"]},cn.id) + return + } + }else{ + delete(d.form.pass); + } + delete(d.form.password_again); + d.keys=Object.keys(d.form); + d.set=[]; + d.values=[]; + d.keys.forEach(function(v,n){ + if(d.set==='ke'||d.set==='password_again'||!d.form[v]){return} + d.set.push(v+'=?') + if(v === 'details'){ + d.form[v] = JSON.stringify(Object.assign(details,JSON.parse(d.form[v]))) + } + d.values.push(d.form[v]) + }) + d.values.push(d.account.mail) + s.sqlQuery('UPDATE Users SET '+d.set.join(',')+' WHERE mail=?',d.values,function(err,r) { + if(err){ + s.tx({f:'error',ff:'edit_account',msg:lang.AccountEditText1},cn.id) + return + } + s.tx({f:'edit_account',form:d.form,ke:d.account.ke,uid:d.account.uid},'$'); + delete(s.group[d.account.ke].init); + s.init('apps',d.account) + }) } - s.tx({f:'edit_account',form:d.form,ke:d.account.ke,uid:d.account.uid},'$'); - delete(s.group[d.account.ke].init); - s.init('apps',d.account) }) break; case'delete': @@ -4338,10 +4912,24 @@ var tx; d.value=d.value.concat([d.ke,d.$uid]) s.sqlQuery("UPDATE Users SET "+d.condition.join(',')+" WHERE ke=? AND uid=?",d.value) s.tx({f:'edit_sub_account',ke:d.ke,uid:d.$uid,mail:d.mail,form:d.form},'ADM_'+d.ke); + s.sqlQuery("SELECT * FROM API WHERE ke=? AND uid=?",[d.ke,d.$uid],function(err,rows){ + if(rows && rows[0]){ + rows.forEach(function(row){ + delete(s.api[row.code]) + }) + } + }) break; case'delete': s.sqlQuery('DELETE FROM Users WHERE uid=? AND ke=? AND mail=?',[d.$uid,d.ke,d.mail]) - s.sqlQuery('DELETE FROM API WHERE uid=? AND ke=?',[d.$uid,d.ke]) + s.sqlQuery("SELECT * FROM API WHERE ke=? AND uid=?",[d.ke,d.$uid],function(err,rows){ + if(rows && rows[0]){ + rows.forEach(function(row){ + delete(s.api[row.code]) + }) + s.sqlQuery('DELETE FROM API WHERE uid=? AND ke=?',[d.$uid,d.ke]) + } + }) s.tx({f:'delete_sub_account',ke:d.ke,uid:d.$uid,mail:d.mail},'ADM_'+d.ke); break; } @@ -4360,21 +4948,59 @@ var tx; cn.ke=d.ke,cn.uid=d.uid,cn.auth=d.auth; if(!s.group[d.ke])s.group[d.ke]={}; if(!s.group[d.ke].users)s.group[d.ke].users={}; - s.group[d.ke].users[d.auth]={cnid:cn.id,uid:r.uid,mail:r.mail,details:JSON.parse(r.details),logged_in_at:s.timeObject(new Date).format(),login_type:'Streamer'} + if(!s.group[d.ke].dashcamUsers)s.group[d.ke].dashcamUsers={}; + s.group[d.ke].users[d.auth]={ + cnid:cn.id, + ke : d.ke, + uid:r.uid, + mail:r.mail, + details:JSON.parse(r.details), + logged_in_at:s.timeObject(new Date).format(), + login_type:'Streamer' + } + s.group[d.ke].dashcamUsers[d.auth] = s.group[d.ke].users[d.auth] + if(s.group[d.ke].mon){ + Object.keys(s.group[d.ke].mon).forEach(function(monitorId){ + var dataToClient = { + f : 'disable_stream', + mid : monitorId, + ke : d.ke + } + var mon = s.group[d.ke].mon[monitorId] + if(s.group[d.ke].mon_conf[monitorId].type === 'dashcam'){ + if(mon.allowStdinWrite === true){ + dataToClient.f = 'enable_stream' + } + s.tx(dataToClient,cn.id) + } + }) + } } }) }else{ - switch(d.f){ - case'monitor_chunk': - if(!s.group[d.ke]||!s.group[d.ke].mon[d.mid]){return} - if(s.group[d.ke].mon[d.mid].started!==1){s.tx({error:'Not Started'},cn.id);return false}; - s.group[d.ke].mon[d.mid].spawn.stdin.write(new Buffer(d.chunk, "binary")); - break; - case'monitor_frame': - if(!s.group[d.ke]||!s.group[d.ke].mon[d.mid]){return} - if(s.group[d.ke].mon[d.mid].started!==1){s.tx({error:'Not Started'},cn.id);return false}; - s.group[d.ke].mon[d.mid].spawn.stdin.write(d.frame); - break; + if(s.group[d.ke] && s.group[d.ke].mon[d.mid]){ + if(s.group[d.ke].mon[d.mid].allowStdinWrite === true){ + switch(d.f){ + case'monitor_chunk': + if(s.group[d.ke].mon[d.mid].started!==1 || !s.group[d.ke].mon[d.mid].spawn || !s.group[d.ke].mon[d.mid].spawn.stdin){ + s.tx({error:'Not Started'},cn.id); + return false + }; + s.group[d.ke].mon[d.mid].spawn.stdin.write(new Buffer(d.chunk, "binary")); + break; + case'monitor_frame': + if(s.group[d.ke].mon[d.mid].started!==1){ + s.tx({error:'Not Started'},cn.id); + return false + }; + s.group[d.ke].mon[d.mid].spawn.stdin.write(d.frame); + break; + } + }else{ + s.tx({error:'Cannot Write Yet'},cn.id) + } + }else{ + s.tx({error:'Non Existant Monitor'},cn.id) } } }) @@ -4407,6 +5033,43 @@ var tx; break; } }) + //functions for retrieving cron announcements + cn.on('cron',function(d){ + if(d.f==='init'){ + if(config.cron.key){ + if(config.cron.key===d.cronKey){ + s.cron={started:moment(),last_run:moment(),id:cn.id}; + }else{ + cn.disconnect() + } + }else{ + s.cron={started:moment(),last_run:moment(),id:cn.id}; + } + }else{ + if(s.cron&&cn.id===s.cron.id){ + delete(d.cronKey) + switch(d.f){ + case'filters': + s.filterEvents(d.ff,d); + break; + case's.tx': + s.tx(d.data,d.to) + break; + case's.video': + s.video(d.data,d.file) + break; + case'start':case'end': + d.mid='_cron';s.log(d,{type:'cron',msg:d.msg}) + break; + default: + s.systemLog('CRON : ',d) + break; + } + }else{ + cn.disconnect() + } + } + }) cn.on('disconnect', function () { if(cn.socketVideoStream){ cn.closeSocketVideoStream() @@ -4426,6 +5089,7 @@ var tx; } s.log({ke:cn.ke,mid:'$USER'},{type:lang['Websocket Disconnected'],msg:{mail:s.group[cn.ke].users[cn.auth].mail,id:cn.uid,ip:cn.ip}}) delete(s.group[cn.ke].users[cn.auth]); + if(s.group[cn.ke].dashcamUsers && s.group[cn.ke].dashcamUsers[cn.auth])delete(s.group[cn.ke].dashcamUsers[cn.auth]); } } if(cn.pluginEngine){ @@ -4433,6 +5097,9 @@ var tx; s.tx({f:'plugin_engine_unplugged',plug:cn.pluginEngine},'CPU') delete(s.api[cn.pluginEngine]) } + if(cn.cron){ + delete(s.cron); + } if(cn.ocv){ s.tx({f:'detector_unplugged',plug:s.ocv.plug},'CPU') delete(s.ocv); @@ -4582,6 +5249,53 @@ s.superAuth=function(x,callback){ return true; } } +//get page URL +if(!config.baseURL){ + config.baseURL = "" +}else if(config.baseURL !== ''){ + config.baseURL = s.checkCorrectPathEnding(config.baseURL) +} +s.getOriginalUrl = function(req){ + var url + if(config.baseURL || config.baseURL === ''){ + url = config.baseURL + }else{ + url = req.protocol + '://' + req.get('host') + '/' + } + return url +} +//Render Configurations - Web Paths +if(config.webPaths === undefined){config.webPaths={}} + //main access URI + if(config.webPaths.home === undefined){config.webPaths.home='/'} + //Super User URI + if(config.webPaths.super === undefined){config.webPaths.super='/super'} + //Admin URI + if(config.webPaths.admin === undefined){config.webPaths.admin='/admin'} + //API Prefix + if(config.webPaths.apiPrefix === undefined){config.webPaths.apiPrefix='/'}else{config.webPaths.apiPrefix = s.checkCorrectPathEnding(config.webPaths.apiPrefix)} +//Render Configurations - Page Render Paths +if(config.renderPaths === undefined){config.renderPaths={}} + //login page + if(config.renderPaths.index === undefined){config.renderPaths.index='pages/index'} + //dashboard page + if(config.renderPaths.home === undefined){config.renderPaths.home='pages/home'} + //sub-account administration page + if(config.renderPaths.admin === undefined){config.renderPaths.admin='pages/admin'} + //superuser page + if(config.renderPaths.super === undefined){config.renderPaths.super='pages/super'} + //2-Factor Auth page + if(config.renderPaths.factorAuth === undefined){config.renderPaths.factorAuth='pages/factor'} + //Streamer v1 (Dashcam Prototype) page + if(config.renderPaths.streamer === undefined){config.renderPaths.streamer='pages/streamer'} + //Streamer v2 (Dashcam) page + if(config.renderPaths.dashcam === undefined){config.renderPaths.dashcam='pages/dashcam'} + //embeddable widget page + if(config.renderPaths.embed === undefined){config.renderPaths.embed='pages/embed'} + //mjpeg full screen page + if(config.renderPaths.mjpeg === undefined){config.renderPaths.mjpeg='pages/mjpeg'} + //gridstack only page + if(config.renderPaths.grid === undefined){config.renderPaths.grid='pages/grid'} ////Pages app.enable('trust proxy'); app.use('/libs',express.static(__dirname + '/web/libs')); @@ -4592,8 +5306,8 @@ app.set('view engine','ejs'); //add template handler if(config.renderPaths.handler!==undefined){require(__dirname+'/web/'+config.renderPaths.handler+'.js').addHandlers(s,app,io)} -//readme -app.get('/:auth/logout/:ke/:id', function (req,res){ +//logout +app.get(config.webPaths.apiPrefix+':auth/logout/:ke/:id', function (req,res){ if(s.group[req.params.ke]&&s.group[req.params.ke].users[req.params.auth]){ delete(s.api[req.params.auth]); delete(s.group[req.params.ke].users[req.params.auth]); @@ -4604,8 +5318,8 @@ app.get('/:auth/logout/:ke/:id', function (req,res){ } }); //main page -app.get(config.webPaths.index, function (req,res){ - res.render(config.renderPaths.index,{lang:lang,config:config,screen:'dashboard'},function(err,html){ +app.get(config.webPaths.home, function (req,res){ + res.render(config.renderPaths.index,{lang:lang,config:config,screen:'dashboard',originalURL:s.getOriginalUrl(req)},function(err,html){ if(err){ s.systemLog(err) } @@ -4614,7 +5328,7 @@ app.get(config.webPaths.index, function (req,res){ }); //admin page app.get(config.webPaths.admin, function (req,res){ - res.render(config.renderPaths.index,{lang:lang,config:config,screen:'admin'},function(err,html){ + res.render(config.renderPaths.index,{lang:lang,config:config,screen:'admin',originalURL:s.getOriginalUrl(req)},function(err,html){ if(err){ s.systemLog(err) } @@ -4623,7 +5337,8 @@ app.get(config.webPaths.admin, function (req,res){ }); //super page app.get(config.webPaths.super, function (req,res){ - res.render(config.renderPaths.index,{lang:lang,config:config,screen:'super'},function(err,html){ + + res.render(config.renderPaths.index,{lang:lang,config:config,screen:'super',originalURL:s.getOriginalUrl(req)},function(err,html){ if(err){ s.systemLog(err) } @@ -4631,7 +5346,7 @@ app.get(config.webPaths.super, function (req,res){ }) }); //update server -app.get('/:auth/update/:key', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/update/:key', function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); req.fn=function(user){ @@ -4650,7 +5365,7 @@ app.get('/:auth/update/:key', function (req,res){ s.auth(req.params,req.fn,res,req); }); //get user details by API key -app.get('/:auth/userInfo/:ke',function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/userInfo/:ke',function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -4661,10 +5376,14 @@ app.get('/:auth/userInfo/:ke',function (req,res){ },res,req); }) //register function -app.post('/:auth/register/:ke/:uid',function (req,res){ +app.post(config.webPaths.apiPrefix+':auth/register/:ke/:uid',function (req,res){ req.resp={ok:false}; res.setHeader('Content-Type', 'application/json'); s.auth(req.params,function(user){ + if(user.details.sub){ + res.end(user.lang['Not Permitted']) + return + } s.sqlQuery('SELECT * FROM Users WHERE uid=? AND ke=? AND details NOT LIKE ? LIMIT 1',[req.params.uid,req.params.ke,'%"sub"%'],function(err,u) { if(u&&u[0]){ if(req.body.mail!==''&&req.body.pass!==''){ @@ -4703,7 +5422,7 @@ s.deleteFactorAuth=function(r){ delete(s.factorAuth[r.ke]) } } -app.post(['/','/:screen'],function (req,res){ +app.post([config.webPaths.home,s.checkCorrectPathEnding(config.webPaths.home)+':screen'],function (req,res){ req.ip=req.headers['cf-connecting-ip']||req.headers["CF-Connecting-IP"]||req.headers["'x-forwarded-for"]||req.connection.remoteAddress; if(req.query.json=='true'){ res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -4715,6 +5434,7 @@ app.post(['/','/:screen'],function (req,res){ res.setHeader('Content-Type', 'application/json'); res.end(s.s(data, null, 3)) }else{ + data.originalURL = s.getOriginalUrl(req) data.screen=req.params.screen res.render(focus,data,function(err,html){ if(err){ @@ -4729,7 +5449,7 @@ app.post(['/','/:screen'],function (req,res){ res.setHeader('Content-Type', 'application/json'); res.end(s.s({ok:false}, null, 3)) }else{ - res.render(config.renderPaths.index,{failedLogin:true,lang:lang,config:config,screen:req.params.screen},function(err,html){ + res.render(config.renderPaths.index,{failedLogin:true,lang:lang,config:config,screen:req.params.screen,originalURL:s.getOriginalUrl(req)},function(err,html){ if(err){ s.systemLog(err) } @@ -4815,7 +5535,7 @@ app.post(['/','/:screen'],function (req,res){ if(!s.factorAuth[r.ke][r.uid]){ s.factorAuth[r.ke][r.uid]={key:s.nid(),user:r} r.mailOptions = { - from: '"ShinobiCCTV" ', + from: config.mail.from, to: r.mail, subject: r.lang['2-Factor Authentication'], html: r.lang['Enter this code to proceed']+' '+s.factorAuth[r.ke][r.uid].key+'. '+r.lang.FactorAuthText1, @@ -5014,7 +5734,7 @@ app.post(['/','/:screen'],function (req,res){ } }); // Get HLS stream (m3u8) -app.get(['/:auth/hls/:ke/:id/:file','/:auth/hls/:ke/:id/:channel/:file'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/hls/:ke/:id/:file',config.webPaths.apiPrefix+':auth/hls/:ke/:id/:channel/:file'], function (req,res){ res.header("Access-Control-Allow-Origin",req.headers.origin); req.fn=function(user){ s.checkChildProxy(req.params,function(){ @@ -5035,7 +5755,7 @@ app.get(['/:auth/hls/:ke/:id/:file','/:auth/hls/:ke/:id/:channel/:file'], functi s.auth(req.params,req.fn,res,req); }); //Get JPEG snap -app.get('/:auth/jpeg/:ke/:id/s.jpg', function(req,res){ +app.get(config.webPaths.apiPrefix+':auth/jpeg/:ke/:id/s.jpg', function(req,res){ res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ s.checkChildProxy(req.params,function(){ @@ -5049,7 +5769,7 @@ app.get('/:auth/jpeg/:ke/:id/s.jpg', function(req,res){ 'Cache-Control': 'no-cache', 'Pragma': 'no-cache' }); - res.on('finish',function(){res.end();delete(res)}); + res.on('finish',function(){res.end();}); if (fs.existsSync(req.dir)){ fs.createReadStream(req.dir).pipe(res); }else{ @@ -5059,7 +5779,7 @@ app.get('/:auth/jpeg/:ke/:id/s.jpg', function(req,res){ },res,req); }); //Get FLV stream -app.get(['/:auth/flv/:ke/:id/s.flv','/:auth/flv/:ke/:id/:channel/s.flv'], function(req,res) { +app.get([config.webPaths.apiPrefix+':auth/flv/:ke/:id/s.flv',config.webPaths.apiPrefix+':auth/flv/:ke/:id/:channel/s.flv'], function(req,res) { res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ s.checkChildProxy(req.params,function(){ @@ -5095,7 +5815,7 @@ app.get(['/:auth/flv/:ke/:id/s.flv','/:auth/flv/:ke/:id/:channel/s.flv'], functi },res,req) }) //montage - stand alone squished view with gridstackjs -app.get(['/:auth/grid/:ke','/:auth/grid/:ke/:group'], function(req,res) { +app.get([config.webPaths.apiPrefix+':auth/grid/:ke',config.webPaths.apiPrefix+':auth/grid/:ke/:group'], function(req,res) { res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ if(user.permissions.get_monitors==="0"){ @@ -5187,17 +5907,18 @@ app.get(['/:auth/grid/:ke','/:auth/grid/:ke/:group'], function(req,res) { config:config, lang:user.lang, $user:user, - monitors:r + monitors:r, + originalURL:s.getOriginalUrl(req) }); }) },res,req) }); //MJPEG feed // if query string `full=true` is not present then it will load the MJPEG data directly and not the iframe ready page. -app.get(['/:auth/mjpeg/:ke/:id','/:auth/mjpeg/:ke/:id/:channel'], function(req,res) { +app.get([config.webPaths.apiPrefix+':auth/mjpeg/:ke/:id',config.webPaths.apiPrefix+':auth/mjpeg/:ke/:id/:channel'], function(req,res) { res.header("Access-Control-Allow-Origin",req.headers.origin); if(req.query.full=='true'){ - res.render(config.renderPaths.mjpeg,{url:'/'+req.params.auth+'/mjpeg/'+req.params.ke+'/'+req.params.id}); + res.render(config.renderPaths.mjpeg,{url:'/'+req.params.auth+'/mjpeg/'+req.params.ke+'/'+req.params.id,originalURL:s.getOriginalUrl(req)}); res.end() }else{ s.auth(req.params,function(user){ @@ -5242,7 +5963,7 @@ app.get(['/:auth/mjpeg/:ke/:id','/:auth/mjpeg/:ke/:id/:channel'], function(req,r } }); //embed monitor -app.get(['/:auth/embed/:ke/:id','/:auth/embed/:ke/:id/:addon'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/embed/:ke/:id',config.webPaths.apiPrefix+':auth/embed/:ke/:id/:addon'], function (req,res){ res.header("Access-Control-Allow-Origin",req.headers.origin); req.params.protocol=req.protocol; s.auth(req.params,function(user){ @@ -5253,7 +5974,7 @@ app.get(['/:auth/embed/:ke/:id','/:auth/embed/:ke/:id/:addon'], function (req,re if(s.group[req.params.ke]&&s.group[req.params.ke].mon[req.params.id]){ if(s.group[req.params.ke].mon[req.params.id].started===1){ req.params.uid=user.uid; - res.render(config.renderPaths.embed,{data:req.params,baseUrl:req.protocol+'://'+req.hostname,config:config,lang:user.lang,mon:CircularJSON.parse(CircularJSON.stringify(s.group[req.params.ke].mon_conf[req.params.id]))}); + res.render(config.renderPaths.embed,{data:req.params,baseUrl:req.protocol+'://'+req.hostname,config:config,lang:user.lang,mon:CircularJSON.parse(CircularJSON.stringify(s.group[req.params.ke].mon_conf[req.params.id])),originalURL:s.getOriginalUrl(req)}); res.end() }else{ res.end(user.lang['Cannot watch a monitor that isn\'t running.']) @@ -5264,7 +5985,7 @@ app.get(['/:auth/embed/:ke/:id','/:auth/embed/:ke/:id/:addon'], function (req,re },res,req); }); // Get TV Channels (Monitor Streams) json -app.get(['/:auth/tvChannels/:ke','/:auth/tvChannels/:ke/:id','/get.php'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/tvChannels/:ke',config.webPaths.apiPrefix+':auth/tvChannels/:ke/:id','/get.php'], function (req,res){ req.ret={ok:false}; if(req.query.username&&req.query.password){ req.params.username = req.query.username @@ -5400,7 +6121,7 @@ app.get(['/:auth/tvChannels/:ke','/:auth/tvChannels/:ke/:id','/get.php'], functi s.auth(req.params,req.fn,res,req); }); // Get monitors json -app.get(['/:auth/monitor/:ke','/:auth/monitor/:ke/:id'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/monitor/:ke',config.webPaths.apiPrefix+':auth/monitor/:ke/:id'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -5432,6 +6153,9 @@ app.get(['/:auth/monitor/:ke','/:auth/monitor/:ke/:id'], function (req,res){ if(s.group[v.ke]&&s.group[v.ke].mon[v.mid]&&s.group[v.ke].mon[v.mid].watch){ r[n].currentlyWatching=Object.keys(s.group[v.ke].mon[v.mid].watch).length } + if(s.group[v.ke]&&s.group[v.ke].mon[v.mid]&&s.group[v.ke].mon[v.mid].watch){ + r[n].status = s.group[v.ke].mon[v.mid].monitorStatus + } var buildStreamURL = function(type,channelNumber){ var streamURL if(channelNumber){channelNumber = '/'+channelNumber}else{channelNumber=''} @@ -5483,11 +6207,15 @@ app.get(['/:auth/monitor/:ke','/:auth/monitor/:ke/:id'], function (req,res){ s.auth(req.params,req.fn,res,req); }); // Get videos json -app.get(['/:auth/videos/:ke','/:auth/videos/:ke/:id'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/videos/:ke',config.webPaths.apiPrefix+':auth/videos/:ke/:id'], function (req,res){ res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ - if(user.permissions.watch_videos==="0"||user.details.sub&&user.details.allmonitors!=='1'&&user.details.video_view.indexOf(req.params.id)===-1){ + var hasRestrictions = user.details.sub && user.details.allmonitors !== '1' + if( + user.permissions.watch_videos==="0" || + hasRestrictions && (!user.details.video_view || user.details.video_view.indexOf(req.params.id)===-1) + ){ res.end(s.s([])) return } @@ -5517,6 +6245,12 @@ app.get(['/:auth/videos/:ke','/:auth/videos/:ke/:id'], function (req,res){ } } if(req.query.start||req.query.end){ + if(req.query.start && req.query.start !== ''){ + req.query.start = s.stringToSqlTime(req.query.start) + } + if(req.query.end && req.query.end !== ''){ + req.query.end = s.stringToSqlTime(req.query.end) + } if(!req.query.startOperator||req.query.startOperator==''){ req.query.startOperator='>=' } @@ -5525,8 +6259,6 @@ app.get(['/:auth/videos/:ke','/:auth/videos/:ke/:id'], function (req,res){ } switch(true){ case(req.query.start&&req.query.start!==''&&req.query.end&&req.query.end!==''): - req.query.start=req.query.start.replace('T',' ') - req.query.end=req.query.end.replace('T',' ') req.sql+=' AND `time` '+req.query.startOperator+' ? AND `end` '+req.query.endOperator+' ?'; req.count_sql+=' AND `time` '+req.query.startOperator+' ? AND `end` '+req.query.endOperator+' ?'; req.ar.push(req.query.start) @@ -5535,14 +6267,12 @@ app.get(['/:auth/videos/:ke','/:auth/videos/:ke/:id'], function (req,res){ req.count_ar.push(req.query.end) break; case(req.query.start&&req.query.start!==''): - req.query.start=req.query.start.replace('T',' ') req.sql+=' AND `time` '+req.query.startOperator+' ?'; req.count_sql+=' AND `time` '+req.query.startOperator+' ?'; req.ar.push(req.query.start) req.count_ar.push(req.query.start) break; case(req.query.end&&req.query.end!==''): - req.query.end=req.query.end.replace('T',' ') req.sql+=' AND `end` '+req.query.endOperator+' ?'; req.count_sql+=' AND `end` '+req.query.endOperator+' ?'; req.ar.push(req.query.end) @@ -5562,22 +6292,22 @@ app.get(['/:auth/videos/:ke','/:auth/videos/:ke/:id'], function (req,res){ res.end(s.s({total:0,limit:req.query.limit,skip:0,videos:[]}, null, 3)); return } - s.sqlQuery(req.count_sql,req.count_ar,function(err,count){ - s.video('linkBuild',r,req.params.auth) - if(req.query.limit.indexOf(',')>-1){ - req.skip=parseInt(req.query.limit.split(',')[0]) - req.query.limit=parseInt(req.query.limit.split(',')[0]) - }else{ - req.skip=0 - req.query.limit=parseInt(req.query.limit) - } - res.end(s.s({isUTC:config.useUTC,total:count[0]['COUNT(*)'],limit:req.query.limit,skip:req.skip,videos:r}, null, 3)); - }) + s.sqlQuery(req.count_sql,req.count_ar,function(err,count){ + s.video('linkBuild',r,req.params.auth) + if(req.query.limit.indexOf(',')>-1){ + req.skip=parseInt(req.query.limit.split(',')[0]) + req.query.limit=parseInt(req.query.limit.split(',')[0]) + }else{ + req.skip=0 + req.query.limit=parseInt(req.query.limit) + } + res.end(s.s({isUTC:config.useUTC,total:count[0]['COUNT(*)'],limit:req.query.limit,skip:req.skip,videos:r}, null, 3)); + }) }) },res,req); }); // Get events json (motion logs) -app.get(['/:auth/events/:ke','/:auth/events/:ke/:id','/:auth/events/:ke/:id/:limit','/:auth/events/:ke/:id/:limit/:start','/:auth/events/:ke/:id/:limit/:start/:end'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/events/:ke',config.webPaths.apiPrefix+':auth/events/:ke/:id',config.webPaths.apiPrefix+':auth/events/:ke/:id/:limit',config.webPaths.apiPrefix+':auth/events/:ke/:id/:limit/:start',config.webPaths.apiPrefix+':auth/events/:ke/:id/:limit/:start/:end'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -5605,9 +6335,9 @@ app.get(['/:auth/events/:ke','/:auth/events/:ke/:id','/:auth/events/:ke/:id/:lim } } if(req.params.start&&req.params.start!==''){ - req.params.start=req.params.start.replace('T',' ') + req.params.start = s.stringToSqlTime(req.params.start) if(req.params.end&&req.params.end!==''){ - req.params.end=req.params.end.replace('T',' ') + req.params.end = s.stringToSqlTime(req.params.end) req.sql+=' AND `time` >= ? AND `time` <= ?'; req.ar.push(decodeURIComponent(req.params.start)) req.ar.push(decodeURIComponent(req.params.end)) @@ -5633,12 +6363,12 @@ app.get(['/:auth/events/:ke','/:auth/events/:ke/:id','/:auth/events/:ke/:id/:lim },res,req); }); // Get logs json -app.get(['/:auth/logs/:ke','/:auth/logs/:ke/:id'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/logs/:ke',config.webPaths.apiPrefix+':auth/logs/:ke/:id'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ - if(user.permissions.get_logs==="0"){ + if(user.permissions.get_logs==="0" || user.details.sub && user.details.view_logs !== '1'){ res.end(s.s([])) return } @@ -5660,6 +6390,25 @@ app.get(['/:auth/logs/:ke','/:auth/logs/:ke/:id'], function (req,res){ return; } } + if(req.query.start||req.query.end){ + if(!req.query.startOperator||req.query.startOperator==''){ + req.query.startOperator='>=' + } + if(!req.query.endOperator||req.query.endOperator==''){ + req.query.endOperator='<=' + } + if(req.query.start && req.query.start !== '' && req.query.end && req.query.end !== ''){ + req.query.start = s.stringToSqlTime(req.query.start) + req.query.end = s.stringToSqlTime(req.query.end) + req.sql+=' AND `time` '+req.query.startOperator+' ? AND `time` '+req.query.endOperator+' ?'; + req.ar.push(req.query.start) + req.ar.push(req.query.end) + }else if(req.query.start && req.query.start !== ''){ + req.query.start = s.stringToSqlTime(req.query.start) + req.sql+=' AND `time` '+req.query.startOperator+' ?'; + req.ar.push(req.query.start) + } + } if(!req.query.limit||req.query.limit==''){req.query.limit=50} req.sql+=' ORDER BY `time` DESC LIMIT '+req.query.limit+''; s.sqlQuery(req.sql,req.ar,function(err,r){ @@ -5677,7 +6426,7 @@ app.get(['/:auth/logs/:ke','/:auth/logs/:ke/:id'], function (req,res){ },res,req); }); // Get monitors online json -app.get('/:auth/smonitor/:ke', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/smonitor/:ke', function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -5712,12 +6461,13 @@ app.get('/:auth/smonitor/:ke', function (req,res){ s.auth(req.params,req.fn,res,req); }); // Monitor Add,Edit,Delete -app.all(['/:auth/configureMonitor/:ke/:id','/:auth/configureMonitor/:ke/:id/:f'], function (req,res){ +app.all([config.webPaths.apiPrefix+':auth/configureMonitor/:ke/:id',config.webPaths.apiPrefix+':auth/configureMonitor/:ke/:id/:f'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ - if(req.params.f!=='delete'){ + var hasRestrictions = user.details.sub && user.details.allmonitors !== '1' + if(req.params.f !== 'delete'){ if(!req.body.data&&!req.query.data){ req.ret.msg='No Monitor Data found.' res.end(s.s(req.ret, null, 3)) @@ -5736,7 +6486,10 @@ app.all(['/:auth/configureMonitor/:ke/:id','/:auth/configureMonitor/:ke/:id/:f'] } return } - if(!user.details.sub||user.details.allmonitors==='1'||user.details.monitor_edit.indexOf(req.monitor.mid)>-1){ + if(!user.details.sub || + user.details.allmonitors === '1' || + hasRestrictions && user.details.monitor_edit.indexOf(req.monitor.mid) >- 1 || + hasRestrictions && user.details.monitor_create === '1'){ if(req.monitor&&req.monitor.mid&&req.monitor.name){ req.set=[],req.ar=[]; req.monitor.mid=req.params.id.replace(/[^\w\s]/gi,'').replace(/ /g,''); @@ -5813,19 +6566,47 @@ app.all(['/:auth/configureMonitor/:ke/:id','/:auth/configureMonitor/:ke/:id/:f'] res.end(s.s(req.ret, null, 3)) } }else{ - if(!user.details.sub||user.details.allmonitors==='1'||user.details.monitor_edit.indexOf(req.params.id)>-1){ + if(!user.details.sub || user.details.allmonitors === '1' || user.details.monitor_edit.indexOf(req.params.id) > -1 || hasRestrictions && user.details.monitor_create === '1'){ s.log(s.group[req.params.ke].mon_conf[req.params.id],{type:'Monitor Deleted',msg:'by user : '+user.uid}); req.params.delete=1;s.camera('stop',req.params); s.tx({f:'monitor_delete',uid:user.uid,mid:req.params.id,ke:req.params.ke},'GRP_'+req.params.ke); s.sqlQuery('DELETE FROM Monitors WHERE ke=? AND mid=?',[req.params.ke,req.params.id]) +// s.sqlQuery('DELETE FROM Files WHERE ke=? AND mid=?',[req.params.ke,req.params.id]) + if(req.query.deleteFiles === 'true'){ + //videos + s.dir.addStorage.forEach(function(v,n){ + var videosDir = v.path+req.params.ke+'/'+req.params.id+'/' + fs.stat(videosDir,function(err,stat){ + if(!err){ + s.file('deleteFolder',videosDir) + } + }) + }) + var videosDir = s.dir.videos+req.params.ke+'/'+req.params.id+'/' + fs.stat(videosDir,function(err,stat){ + if(!err){ + s.file('deleteFolder',videosDir) + } + }) + //fileBin + var binDir = s.dir.fileBin+req.params.ke+'/'+req.params.id+'/' + fs.stat(binDir,function(err,stat){ + if(!err){ + s.file('deleteFolder',binDir) + } + }) + } req.ret.ok=true; req.ret.msg='Monitor Deleted by user : '+user.uid res.end(s.s(req.ret, null, 3)) + }else{ + req.ret.msg=user.lang['Not Permitted']; + res.end(s.s(req.ret, null, 3)) } } }) }) -app.get(['/:auth/monitor/:ke/:id/:f','/:auth/monitor/:ke/:id/:f/:ff','/:auth/monitor/:ke/:id/:f/:ff/:fff'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/monitor/:ke/:id/:f',config.webPaths.apiPrefix+':auth/monitor/:ke/:id/:f/:ff',config.webPaths.apiPrefix+':auth/monitor/:ke/:id/:f/:ff/:fff'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -5919,7 +6700,7 @@ app.get(['/:auth/monitor/:ke/:id/:f','/:auth/monitor/:ke/:id/:f/:ff','/:auth/mon },res,req); }) //get file from fileBin bin -app.get(['/:auth/fileBin/:ke','/:auth/fileBin/:ke/:id'],function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/fileBin/:ke',config.webPaths.apiPrefix+':auth/fileBin/:ke/:id'],function (req,res){ res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); req.fn=function(user){ @@ -5951,7 +6732,7 @@ app.get(['/:auth/fileBin/:ke','/:auth/fileBin/:ke/:id'],function (req,res){ s.auth(req.params,req.fn,res,req); }); //get file from fileBin bin -app.get('/:auth/fileBin/:ke/:id/:year/:month/:day/:file', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/fileBin/:ke/:id/:year/:month/:day/:file', function (req,res){ res.header("Access-Control-Allow-Origin",req.headers.origin); req.fn=function(user){ req.failed=function(){ @@ -5979,18 +6760,107 @@ app.get('/:auth/fileBin/:ke/:id/:year/:month/:day/:file', function (req,res){ } s.auth(req.params,req.fn,res,req); }); +//zip videos and get link from fileBin +app.get(config.webPaths.apiPrefix+':auth/zipVideos/:ke', function (req,res){ + res.header("Access-Control-Allow-Origin",req.headers.origin); + var failed = function(resp){ + res.setHeader('Content-Type', 'application/json'); + res.end(s.s(resp)) + } + if(req.query.videos && req.query.videos !== ''){ + s.auth(req.params,function(user){ + var videosSelected = JSON.parse(req.query.videos) + var where = [] + var values = [] + videosSelected.forEach(function(video){ + where.push("(ke=? AND mid=? AND `time`=?)") + if(!video.ke)video.ke = req.params.ke + values.push(video.ke) + values.push(video.mid) + var time = s.nameToTime(video.filename) + if(req.query.isUTC === 'true'){ + time = s.utcToLocal(time) + } + time = new Date(time) + values.push(time) + }) + s.sqlQuery('SELECT * FROM Videos WHERE '+where.join(' OR '),values,function(err,r){ + var resp = {ok:false} + if(r && r[0]){ + resp.ok = true + var zipDownload = null + var tempFiles = [] + var fileId = s.gid() + var fileBinDir = s.dir.fileBin+req.params.ke+'/' + var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh' + var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Recordings.zip' + var zippedFile = fileBinDir+zippedFilename + var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile + res.on('close', () => { + if(zipDownload && zipDownload.destroy){ + zipDownload.destroy() + } + fs.unlink(zippedFile); + }) + if(!fs.existsSync(fileBinDir)){ + fs.mkdirSync(fileBinDir); + } + r.forEach(function(video){ + timeFormatted = s.formattedTime(video.time) + video.filename = timeFormatted+'.'+video.ext + var dir = s.video('getDir',video)+video.filename + var tempVideoFile = timeFormatted+' - '+video.mid+'.'+video.ext + fs.writeFileSync(fileBinDir+tempVideoFile, fs.readFileSync(dir)) + tempFiles.push(fileBinDir+tempVideoFile) + script += ' "'+tempVideoFile+'"' + }) + fs.writeFileSync(tempScript,script,'utf8') + var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true}) + zipCreate.stderr.on('data',function(data){ + s.log({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()}) + }) + zipCreate.on('exit',function(data){ + fs.unlinkSync(tempScript) + tempFiles.forEach(function(file){ + fs.unlink(file,function(){}) + }) + res.setHeader('Content-Disposition', 'attachment; filename="'+zippedFilename+'"') + var zipDownload = fs.createReadStream(zippedFile) + zipDownload.pipe(res) + zipDownload.on('error', function (error) { + s.log({ke:req.params.ke,mid:'$USER'},{title:'Zip Download Error',msg:error.toString()}) + if(zipDownload && zipDownload.destroy){ + zipDownload.destroy() + } + }); + zipDownload.on('close', function () { + res.end() + zipDownload.destroy(); + fs.unlinkSync(zippedFile); + }); + }) + }else{ + failed({ok:false,msg:'No Videos Found'}) + } + }) + },res,req); + }else{ + failed({ok:false,msg:'"videos" query variable is missing from request.'}) + } +}); // Get video file -app.get('/:auth/videos/:ke/:id/:file', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/videos/:ke/:id/:file', function (req,res){ s.auth(req.params,function(user){ if(user.permissions.watch_videos==="0"||user.details.sub&&user.details.allmonitors!=='1'&&user.details.monitors.indexOf(req.params.id)===-1){ res.end(user.lang['Not Permitted']) return } - var filename = s.nameToTime(req.params.file) + var time = s.nameToTime(req.params.file) if(req.query.isUTC === 'true'){ - filename = s.utcToLocal(filename) + time = s.utcToLocal(time) } - s.sqlQuery('SELECT * FROM Videos WHERE ke=? AND mid=? AND time=?',[req.params.ke,req.params.id,filename],function(err,r){ + time = new Date(time) + s.sqlQuery('SELECT * FROM Videos WHERE ke=? AND mid=? AND `time`=?',[req.params.ke,req.params.id,time],function(err,r){ if(r&&r[0]){ req.dir=s.video('getDir',r[0])+req.params.file if (fs.existsSync(req.dir)){ @@ -6031,7 +6901,7 @@ app.get('/:auth/videos/:ke/:id/:file', function (req,res){ },res,req); }); //motion trigger -app.get('/:auth/motion/:ke/:id', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/motion/:ke/:id', function (req,res){ s.auth(req.params,function(user){ if(req.query.data){ try{ @@ -6054,7 +6924,7 @@ app.get('/:auth/motion/:ke/:id', function (req,res){ },res,req); }) //hookTester trigger -app.get('/:auth/hookTester/:ke/:id', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/hookTester/:ke/:id', function (req,res){ res.setHeader('Content-Type', 'application/json'); s.auth(req.params,function(user){ s.log(req.params,{type:'Test',msg:'Hook Test'}) @@ -6062,7 +6932,7 @@ app.get('/:auth/hookTester/:ke/:id', function (req,res){ },res,req); }) //control trigger -app.get('/:auth/control/:ke/:id/:direction', function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/control/:ke/:id/:direction', function (req,res){ res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ @@ -6072,7 +6942,7 @@ app.get('/:auth/control/:ke/:id/:direction', function (req,res){ },res,req); }) //modify video file -app.get(['/:auth/videos/:ke/:id/:file/:mode','/:auth/videos/:ke/:id/:file/:mode/:f'], function (req,res){ +app.get([config.webPaths.apiPrefix+':auth/videos/:ke/:id/:file/:mode',config.webPaths.apiPrefix+':auth/videos/:ke/:id/:file/:mode/:f'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -6081,12 +6951,13 @@ app.get(['/:auth/videos/:ke/:id/:file/:mode','/:auth/videos/:ke/:id/:file/:mode/ res.end(user.lang['Not Permitted']) return } - var filename = s.nameToTime(req.params.file) + var time = s.nameToTime(req.params.file) if(req.query.isUTC === 'true'){ - filename = s.utcToLocal(filename) + time = s.utcToLocal(time) } - req.sql='SELECT * FROM Videos WHERE ke=? AND mid=? AND time=?'; - req.ar=[req.params.ke,req.params.id,filename]; + time = new Date(time) + req.sql='SELECT * FROM Videos WHERE ke=? AND mid=? AND `time`=?'; + req.ar=[req.params.ke,req.params.id,time]; s.sqlQuery(req.sql,req.ar,function(err,r){ if(r&&r[0]){ r=r[0];r.filename=s.formattedTime(r.time)+'.'+r.ext; @@ -6096,13 +6967,14 @@ app.get(['/:auth/videos/:ke/:id/:file/:mode','/:auth/videos/:ke/:id/:file/:mode/ s.video('fix',r) break; case'status': - req.params.f=parseInt(req.params.f) + r.f = 'video_edit' + r.status = parseInt(req.params.f) if(isNaN(req.params.f)||req.params.f===0){ req.ret.msg='Not a valid value.'; }else{ req.ret.ok=true; - s.sqlQuery('UPDATE Videos SET status=? WHERE ke=? AND mid=? AND time=?',[req.params.f,req.params.ke,req.params.id,filename]) - s.tx({f:'video_edit',status:req.params.f,filename:r.filename,mid:r.mid,ke:r.ke,time:s.nameToTime(r.filename),end:s.formattedTime(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+r.ke); + s.sqlQuery('UPDATE Videos SET status=? WHERE ke=? AND mid=? AND `time`=?',[req.params.f,req.params.ke,req.params.id,time]) + s.tx(r,'GRP_'+r.ke); } break; case'delete': @@ -6141,7 +7013,7 @@ app.all(['/streamIn/:ke/:id','/streamIn/:ke/:id/:feed'], function (req, res) { } }) //MP4 Stream -app.get(['/:auth/mp4/:ke/:id/:channel/s.mp4','/:auth/mp4/:ke/:id/s.mp4','/:auth/mp4/:ke/:id/:channel/s.ts','/:auth/mp4/:ke/:id/s.ts'], function (req, res) { +app.get([config.webPaths.apiPrefix+':auth/mp4/:ke/:id/:channel/s.mp4',config.webPaths.apiPrefix+':auth/mp4/:ke/:id/s.mp4',config.webPaths.apiPrefix+':auth/mp4/:ke/:id/:channel/s.ts',config.webPaths.apiPrefix+':auth/mp4/:ke/:id/s.ts'], function (req, res) { s.auth(req.params,function(user){ if(!s.group[req.params.ke] || !s.group[req.params.ke].mon[req.params.id]){ res.status(404); @@ -6184,11 +7056,11 @@ app.get(['/:auth/mp4/:ke/:id/:channel/s.mp4','/:auth/mp4/:ke/:id/s.mp4','/:auth/ }); //simulate RTSP over HTTP app.get([ - '/:auth/mpegts/:ke/:id/:feed/:file', - '/:auth/mpegts/:ke/:id/:feed/', - '/:auth/h264/:ke/:id/:feed/:file', - '/:auth/h264/:ke/:id/:feed', - '/:auth/h264/:ke/:id' + config.webPaths.apiPrefix+':auth/mpegts/:ke/:id/:feed/:file', + config.webPaths.apiPrefix+':auth/mpegts/:ke/:id/:feed/', + config.webPaths.apiPrefix+':auth/h264/:ke/:id/:feed/:file', + config.webPaths.apiPrefix+':auth/h264/:ke/:id/:feed', + config.webPaths.apiPrefix+':auth/h264/:ke/:id' ], function (req, res) { res.header("Access-Control-Allow-Origin",req.headers.origin); s.auth(req.params,function(user){ @@ -6221,7 +7093,7 @@ app.get([ },res,req); }); //FFprobe by API -app.get('/:auth/probe/:ke',function (req,res){ +app.get(config.webPaths.apiPrefix+':auth/probe/:ke',function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -6266,7 +7138,7 @@ app.get('/:auth/probe/:ke',function (req,res){ },res,req); }) //ONVIF requesting with Shinobi API structure -app.all(['/:auth/onvif/:ke/:id/:action','/:auth/onvif/:ke/:id/:service/:action'],function (req,res){ +app.all([config.webPaths.apiPrefix+':auth/onvif/:ke/:id/:action',config.webPaths.apiPrefix+':auth/onvif/:ke/:id/:service/:action'],function (req,res){ var response = {ok:false}; res.setHeader('Content-Type', 'application/json'); res.header("Access-Control-Allow-Origin",req.headers.origin); @@ -6541,9 +7413,9 @@ if(config.childNodes.enabled === true && config.childNodes.mode === 'master'){ filename:d.filename, mid:d.mid, ke:d.ke, - time:s.timeObject(d.startTime).format(), + time:d.startTime, size:d.filesize, - end:s.timeObject(d.endTime).format() + end:d.endTime },'GRP_'+d.ke,'video_view'); clearTimeout(s.group[d.ke].mon[d.mid].checker) clearTimeout(s.group[d.ke].mon[d.mid].checkStream) @@ -6692,6 +7564,10 @@ if(config.childNodes.mode === 'child'){ // }) // }) }else{ + //add Cloud Videos table, will remove in future + s.sqlQuery('CREATE TABLE IF NOT EXISTS `Cloud Videos` (`mid` varchar(50) NOT NULL,`ke` varchar(50) DEFAULT NULL,`href` text NOT NULL,`size` float DEFAULT NULL,`time` timestamp NULL DEFAULT NULL,`end` timestamp NULL DEFAULT NULL,`status` int(1) DEFAULT \'0\' COMMENT \'0:Complete,1:Read,2:Archive\',`details` text) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;',[],function(err){ + if(err)console.log(err) + }) //master node - startup functions setInterval(function(){ s.cpuUsage(function(cpu){ @@ -6718,6 +7594,7 @@ if(config.childNodes.mode === 'child'){ } s.systemLog(v.mail+' : '+lang.startUpText0+' : '+rr.length,v.size) s.init('group',v) + s.init('apps',v) s.systemLog(v.mail+' : '+lang.startUpText1,countFinished+'/'+count) if(countFinished===count){ s.systemLog(lang.startUpText4) @@ -6751,4 +7628,4 @@ if(config.childNodes.mode === 'child'){ } }) },1500) -} \ No newline at end of file +} diff --git a/cron.js b/cron.js index b257850..c8ad615 100644 --- a/cron.js +++ b/cron.js @@ -64,6 +64,7 @@ s.sqlDate = function(value){ return dateQueryFunction } s.sqlQuery = function(query,values,onMoveOn,hideLog){ + s.debugLog(query,values) if(!values){values=[]} var valuesNotFunction = true; if(typeof values === 'function'){ @@ -176,9 +177,9 @@ s.checkFilterRules=function(v,callback){ } //delete old videos with filter if(config.cron.deleteOld===true){ - v.d.filters.deleteOldByCron={ - "id":"deleteOldByCron", - "name":"deleteOldByCron", + v.d.filters.deleteOldVideosByCron={ + "id":"deleteOldVideosByCron", + "name":"deleteOldVideosByCron", "sort_by":"time", "sort_by_direction":"ASC", "limit":"", @@ -195,10 +196,13 @@ s.checkFilterRules=function(v,callback){ }] }; } + s.debugLog('Filters') var keys = Object.keys(v.d.filters) if(keys.length>0){ keys.forEach(function(m,current){ - var b=v.d.filters[m]; + // b = filter + var b = v.d.filters[m]; + s.debugLog(b) if(b.enabled==="1"){ b.ar=[v.ke]; b.sql=[]; @@ -223,6 +227,9 @@ s.checkFilterRules=function(v,callback){ } s.sqlQuery('SELECT * FROM Videos '+b.sql,b.ar,function(err,r){ if(r&&r[0]){ + if(r.length > 0 || config.debugLog === true){ + s.cx({f:'filterMatch',msg:r.length+' SQL rows match "'+m+'"',ke:v.ke,time:moment()}) + } b.cx={ f:'filters', name:b.name, @@ -233,10 +240,8 @@ s.checkFilterRules=function(v,callback){ }; if(b.archive==="1"){ s.cx({f:'filters',ff:'archive',videos:r,time:moment(),ke:v.ke,id:b.id}); - }else{ - if(b.delete==="1"){ - s.cx({f:'filters',ff:'delete',videos:r,time:moment(),ke:v.ke,id:b.id}); - } + }else if(b.delete==="1"){ + s.cx({f:'filters',ff:'delete',videos:r,time:moment(),ke:v.ke,id:b.id}); } if(b.email==="1"){ b.cx.ff='email'; @@ -277,21 +282,30 @@ s.deleteRowsWithNoVideo=function(v,callback){ if(evs&&evs[0]){ es.del=[];es.ar=[v.ke]; evs.forEach(function(ev){ - var details = JSON.parse(ev.details) - var filename = ev.time - var dir = s.getVideoDirectory(ev)+s.moment(filename)+'.'+ev.ext; - var fileExists = fs.existsSync(dir) - if(details.isUTC === true){ - filename = s.localToUtc(filename).format('YYYY-MM-DDTHH-mm-ss') - dir = s.getVideoDirectory(ev)+filename+'.'+ev.ext; - fileExists = fs.existsSync(dir) + var filename + var details + try{ + details = JSON.parse(ev.details) + }catch(err){ + if(details instanceof Object){ + details = ev.details + }else{ + details = {} + } } + var dir = s.getVideoDirectory(ev) + if(details.isUTC === true){ + filename = s.localToUtc(ev.time).format('YYYY-MM-DDTHH-mm-ss')+'.'+ev.ext + }else{ + filename = s.moment(ev.time)+'.'+ev.ext + } + fileExists = fs.existsSync(dir+filename) if(fileExists !== true){ s.video('delete',ev) s.tx({f:'video_delete',filename:filename+'.'+ev.ext,mid:ev.mid,ke:ev.ke,time:ev.time,end:s.moment(new Date,'YYYY-MM-DD HH:mm:ss')},'GRP_'+ev.ke); } }); - if(es.del.length>0){ + if(es.del.length>0 || config.debugLog === true){ s.cx({f:'deleteNoVideo',msg:es.del.length+' SQL rows with no file deleted',ke:v.ke,time:moment()}) } } @@ -310,8 +324,8 @@ s.deleteOldLogs=function(v,callback){ s.sqlQuery("DELETE FROM Logs WHERE ke=? AND `time` < "+s.sqlDate('? DAYS'),[v.ke,v.d.log_days],function(err,rrr){ callback() if(err)return console.error(err); - if(rrr.affectedRows && rrr.affectedRows.length>0){ - s.cx({f:'deleteLogs',msg:rrr.affectedRows+' SQL rows older than '+v.d.log_days+' days deleted',ke:v.ke,time:moment()}) + if(rrr.affectedRows && rrr.affectedRows.length>0 || config.debugLog === true){ + s.cx({f:'deleteLogs',msg:(rrr.affectedRows || 0)+' SQL rows older than '+v.d.log_days+' days deleted',ke:v.ke,time:moment()}) } }) }else{ @@ -325,8 +339,8 @@ s.deleteOldEvents=function(v,callback){ s.sqlQuery("DELETE FROM Events WHERE ke=? AND `time` < "+s.sqlDate('? DAYS'),[v.ke,v.d.event_days],function(err,rrr){ callback() if(err)return console.error(err); - if(rrr.affectedRows && rrr.affectedRows.length>0){ - s.cx({f:'deleteEvents',msg:rrr.affectedRows+' SQL rows older than '+v.d.event_days+' days deleted',ke:v.ke,time:moment()}) + if(rrr.affectedRows && rrr.affectedRows.length>0 || config.debugLog === true){ + s.cx({f:'deleteEvents',msg:(rrr.affectedRows || 0)+' SQL rows older than '+v.d.event_days+' days deleted',ke:v.ke,time:moment()}) } }) }else{ @@ -350,8 +364,8 @@ s.deleteOldFileBins=function(v,callback){ s.sqlQuery("DELETE"+fileBinQuery,[v.ke,v.d.fileBin_days],function(err,rrr){ callback() if(err)return console.error(err); - if(rrr.affectedRows && rrr.affectedRows.length>0){ - s.cx({f:'deleteFileBins',msg:rrr.affectedRows+' files older than '+v.d.fileBin_days+' days deleted',ke:v.ke,time:moment()}) + if(rrr.affectedRows && rrr.affectedRows.length>0 || config.debugLog === true){ + s.cx({f:'deleteFileBins',msg:(rrr.affectedRows || 0)+' files older than '+v.d.fileBin_days+' days deleted',ke:v.ke,time:moment()}) } }) }else{ @@ -366,7 +380,7 @@ s.deleteOldFileBins=function(v,callback){ s.checkForOrphanedFiles=function(v,callback){ if(config.cron.deleteOrphans===true){ var finish=function(count){ - if(count>0){ + if(count>0 || config.debugLog === true){ s.cx({f:'deleteOrphanedFiles',msg:count+' SQL rows with no database row deleted',ke:v.ke,time:moment()}) } callback() @@ -445,9 +459,9 @@ s.processUser = function(number,rows){ rr.forEach(function(b,m){ b.details=JSON.parse(b.details); if(b.details.max_keep_days&&b.details.max_keep_days!==''){ - v.d.filters['deleteOldByCron'+b.mid]={ - "id":'deleteOldByCron'+b.mid, - "name":'deleteOldByCron'+b.mid, + v.d.filters['deleteOldVideosByCron'+b.mid]={ + "id":'deleteOldVideosByCron'+b.mid, + "name":'deleteOldVideosByCron'+b.mid, "sort_by":"time", "sort_by_direction":"ASC", "limit":"", @@ -470,16 +484,17 @@ s.processUser = function(number,rows){ } }) s.deleteOldLogs(v,function(){ - s.debugLog('deleteOldLogs') + s.debugLog('--- deleteOldLogs Complete') s.deleteOldFileBins(v,function(){ - s.debugLog('deleteOldFileBins') + s.debugLog('--- deleteOldFileBins Complete') s.deleteOldEvents(v,function(){ - s.debugLog('deleteOldEvents') + s.debugLog('--- deleteOldEvents Complete') s.checkFilterRules(v,function(){ - s.debugLog('checkFilterRules') + s.debugLog('--- checkFilterRules Complete') s.deleteRowsWithNoVideo(v,function(){ - s.debugLog('deleteRowsWithNoVideo') + s.debugLog('--- deleteRowsWithNoVideo Complete') s.checkForOrphanedFiles(v,function(){ + s.debugLog('--- checkForOrphanedFiles Complete') //done user, unlock current, and do next s.overlapLock[v.ke]=false; s.processUser(number+1,rows) diff --git a/definitions/en_CA.json b/definitions/en_CA.json index 223b35e..37b9494 100644 --- a/definitions/en_CA.json +++ b/definitions/en_CA.json @@ -872,7 +872,7 @@ { "name": "detail=detector_sensitivity", "field": "Indifference", - "description": "How much Shinobi doesn't care about motion before doing something. The opposite of sensitivity; a lower number means it will trigger sooner. The value ranges up to 15(+) decimal places. 10 is default, 0.005 is pretty sensitive to motion changes. Note: If using Region Editor, leave this blank, and set indifference in the Region Editor (below).", + "description": "How much Shinobi doesn't care about motion before doing something. The opposite of sensitivity; a lower number means it will trigger sooner. The value ranges up to 15(+) decimal places. 10 is default, 0.005 is pretty sensitive to motion changes. Note: If using Region Editor, leave this blank, and set indifference in the Region Editor (above).", "default": "10", "example": "10", "possible": "" diff --git a/languages/en_CA.json b/languages/en_CA.json index 5fed55e..2815577 100644 --- a/languages/en_CA.json +++ b/languages/en_CA.json @@ -104,6 +104,8 @@ "Can View Streams": "Can View Streams", "Can View Videos": "Can View Videos", "Can View Monitor": "Can View Monitor", + "Can Change User Settings": "Can Change User Settings", + "Can Create and Delete Monitors": "Can Create and Delete Monitors", "Can Edit Monitor": "Can Edit Monitor", "Can Delete Videos": "Can Delete Videos", "Delete Video": "Delete Video", @@ -154,6 +156,8 @@ "FFmpegTip": "FFprobe is a simple multimedia streams analyzer. You can use it to output all kinds of information about an input including duration, frame rate, frame size, etc.", "Complete Stream URL": "Complete Stream URL", "ONVIF Scanner": "ONVIF Scanner", + "ONVIFEventsNotAvailable": "ONVIF Events not Available", + "ONVIFnotCompliantProfileT": "Camera is not ONVIF Profile T Compliant", "Scan Settings": "Scan Settings", "ONVIFnote": "Discover ONVIF devices on networks outside your own or leave it blank to scan your current network.
Username and Password can be left blank.", "Range or Single": "Range or Single", @@ -178,6 +182,14 @@ "Monitor Groups": "Monitor Groups", "Group Name": "Group Name", "WebDAV": "WebDAV", + "Amazon S3": "Amazon S3", + "Save Links to Database": "Save Links to Database", + "Bucket": "Bucket", + "Region": "Region", + "Amazon S3 Upload Error": "Amazon S3 Upload Error", + "aws_accessKeyId": "Access Key Id", + "aws_secretAccessKey": "Secret Access Key", + "Discord Bot": "Discord Bot", "URL": "URL", "Autosave": "Autosave", "Save Directory": "Save Directory", @@ -185,6 +197,8 @@ "Force Monitors Per Row": "Force Monitors Per Row", "Monitors per row": "Monitors per row for Montage", "Browser Console Log": "Browser Console Log", + "Log Stream": "Log Stream", + "Privileges": "Privileges", "All Monitors and Privileges": "All Monitors and Privileges", "Permissions": "Permissions", "Time-lapse Tool": "Time-lapse Tool", @@ -210,9 +224,13 @@ "Set to Watch Only": "Set to Watch Only", "Save as": "Save as", "Add New": "Add New", + "Zip and Download": "Zip and Download", + "Export Selected Videos": "Export Selected Videos", "Delete Selected Videos": "Delete Selected Videos", "DeleteSelectedVideosMsg": "Do you want to delete these videos? You cannot recover them.", + "ExportSelectedVideosMsg": "Do you want to export these videos? It may take some time to zip and download.", "clientStreamFailedattemptingReconnect": "Client side ctream check failed, attempting reconnect.", + "Export Video": "Export Video", "Delete Filter": "Delete Filter", "confirmDeleteFilter": "Do you want to delete this filter? You cannot recover it.", "Fix Video": "Fix Video", @@ -236,8 +254,8 @@ "ImportMonitorConfigurationText": "Doing this will overrwrite any changes currently not saved. Imported changes will only be applied when you press Save.", "Paste JSON here.": "Paste JSON here.", "Delete Monitor": "Delete Monitor", - "DeleteMonitorText": "Do you want to delete this monitor? You cannot recover it. The files for this ID will remain in the filesystem. If you choose to recreate a monitor with the same ID the videos and events will become visible in the dashboard.", - "DeleteMonitorsText": "Do you want to delete these monitors? You cannot recover them. The files for these IDs will remain in the filesystem. If you choose to recreate a monitor with one of the IDs the videos and events will become visible in the dashboard.", + "DeleteMonitorText": "Do you want to delete this monitor? You cannot recover it. You can choose for the files to remain in the filesystem. If you choose to recreate a monitor with the same ID the videos and events will become visible in the dashboard.", + "DeleteMonitorsText": "Do you want to delete these monitors? You cannot recover them. You can choose to keep the files for these IDs in the filesystem. If you choose to recreate a monitor with one of the IDs the videos and events will become visible in the dashboard.", "Invalid JSON": "Invalid JSON", "InvalidJSONText": "Please ensure this is a valid JSON string for Shinobi monitor configuration.", "Passwords don't match": "Passwords don't match", @@ -248,6 +266,7 @@ "Unable to Launch": "Unable to Launch", "UnabletoLaunchText": "Please save new monitor first. Then attempt to launch the region editor.", "NoVideosFoundForDateRange": "No Videos found in this date range. Try setting the start date further back.", + "NoLogsFoundForDateRange": "No Logs found in this date range. Try widening the date range.", "monitorEditFailedMaxReached": "Your account has reached the maximum number of cameras that can be created. Speak to an administrator if you would like this changed.", "in": "in", "ago": "ago", @@ -292,7 +311,7 @@ "noSpecialCharacters": "No spaces or special characters.", "NotesPlacholder": "Comments you want to leave for this cameras settings.", "InputText1": "This section tells Shinobi how to consume a stream. For optimal performance try tuning your camera's internal settings. Find the following options and set them as shown. To find your camera you can use the built in ONVIF Scanner of Shinobi. Some ONVIF cameras require the use of a management tool to modify their internal settings. If you can't find your cameras you can try ONVIF Device Manager for Windows.", - "InputText2": "
  • Framerate (FPS) : High : 10 - 15 FPS, Low : 2-5 FPS
  • I-frame interval : 80
  • Bit Rate Type : CBR (Constant Bit Rate)
  • Bit Rate : between 256kbps - 500kbps
", + "InputText2": "
  • Framerate (FPS) : High : 10 - 15 FPS, Low : 2-5 FPS
  • I-frame interval : 1
  • Bit Rate Type : VBR (Variable Bit Rate)
  • Bit Rate : between 256kbps - 1000kbps
", "InputText3": "If you need help figuring out what input type your camera is you can take a look in the Camera URLs List on the Shinobi website.", "StreamText": "

This section will designate the primary method of streaming out and its settings. This stream will be displayed in the dashboard. If you choose to use HLS, JPEG, or MJPEG then you can consume the stream through other programs.

Using JPEG stream essentially turns off the primary stream and uses the snapshot bin to get frames.

", "DetectorText": "

When the Width and Height boxes are shown you should set them to 640x480 or below. This will optimize the read speed of frames.

", @@ -368,7 +387,13 @@ "Allow Next Trigger": "Allow Next Trigger in Milliseconds", "Save Events to SQL": "Save Events to SQL", "Email on Trigger": "Email on Trigger Emails go to the main account holder's login address.", + "Attach Video Clip": "Attach Video Clip", + "Discord Alert on Trigger": "Discord Alert on Trigger", "Allow Next Email": "Allow Next Email in Minutes", + "Allow Next Discord Alert": "Allow Next Discord Alert in Minutes", + "DiscordFailedText": "Sending to Discord Failed", + "DiscordErrorText": "Sending to Discord caused an Error", + "DiscordNotEnabledText": "Discord Bot Not Enabled, Enable it in your Account Settings.", "How to Record": "How to Record", "Trigger Record": "Trigger Record", "Recording Timeout": "Recording Timeout in Minutes", @@ -431,6 +456,8 @@ "libx264": "libx264", "libx265": "libx265", "copy": "copy", + "Audio": "Audio", + "Mute Audio": "Mute Audio", "No Audio": "No Audio", "aac": "aac", "ac3": "ac3", @@ -493,6 +520,12 @@ "Camera is not recording": "Camera is not recording", "Camera is not streaming": "Camera is not streaming", "Restarting Process": "Restarting Process", + "Restarting": "Restarting", + "Starting": "Starting", + "Watching": "Watching", + "Recording": "Recording", + "Stopped": "Stopped", + "Died": "Died", "Restart": "Restart", "Monitor Stopped": "Monitor Stopped", "MonitorStoppedText": "Monitor session has been ordered to stop.", @@ -501,8 +534,21 @@ "NoMotionEmailText1": "No Motion for", "NoMotionEmailText2": "There hasn't been any motion detected on camera for", "Monitor Name": "Monitor Name", + "Mp4Frag": "Mp4Frag", + "Status Changed": "Status Changed", + "Monitor is now Idle": "Monitor is now Idle", + "Monitor is now Disabled": "Monitor is now Disabled", + "Monitor is now Watching": "Monitor is now Watching", + "Monitor is now Recording": "Monitor is now Recording", + "coProcessor": "coProcessor", + "coProcessor Stopped": "coProcessor Stopped", + "coProcessor Started": "coProcessor Started", + "coProcessorTextStarted": "coProcessor has started for CPU only outputs.", + "coProcessorTextStopped": "coProcessor has ended.", "Process Unexpected Exit": "Process Unexpected Exit", + "coProcess Unexpected Exit": "coProcess Unexpected Exit", "Process Crashed for Monitor": "Process Crashed for Monitor", + "coProcess Crashed for Monitor": "coProcess Crashed for Monitor", "FFmpegCantStart": "FFmpeg Couldn't Start", "FFmpegCantStartText": "The recording engine for this camera could not start. There may be something wrong with your camera configuration. If there are any logs other than this one please post them in the Issues on Github.", "JPEG Error": "JPEG Error", @@ -569,6 +615,8 @@ "Preview":"Preview", "Websocket Connected":"Websocket Connected", "Websocket Disconnected":"Websocket Disconnected", + "Token":"Token", + "Channel ID":"Channel ID", "New Authentication Token":"New Authentication Token", "All Logs":"All Logs", "For Group":"For Group", @@ -581,8 +629,11 @@ "in Days":"in Days", "Can edit how long to keep Logs":"Can edit how long to keep Logs", "Can use Admin Panel":"Can use Admin Panel", + "Can use Discord Bot":"Can use Discord Bot", "Can use WebDAV":"Can use WebDAV", + "Can use Amazon S3":"Can use Amazon S3", "Can use LDAP":"Can use LDAP", + "Can View Logs":"Can View Logs", "Can edit how long to keep Events":"Can edit how long to keep Events", "Leave blank for unlimited":"Leave blank for unlimited", "Limited":"Limited", diff --git a/package.json b/package.json index badfe02..86d398b 100644 --- a/package.json +++ b/package.json @@ -1,43 +1,48 @@ { "name": "shinobi", - "version": "1.0.37", - "description": "CCTV and NVR in Node.js, Version : daf882caf6053a7c2c8f4e69427620356f8a440c", + "productName": "Shinobi", + "version": "1.0.38", + "description": "CCTV and NVR in Node.js", "main": "camera.js", + "bin": "camera.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "chmod +x INSTALL/start.sh && INSTALL/start.sh" }, "repository": { "type": "git", - "url": "git+https://github.com/moeiscool/Shinobi.git" + "url": "git+https://gitlab.com/Shinobi-Systems/Shinobi.git" }, - "author": "Moe Alam", + "author": "Moe Alam, Shinobi Systems", "bugs": { - "url": "https://github.com/ShinobiCCTV/Shinobi/issues" + "url": "https://gitlab.com/Shinobi-Systems/Shinobi/issues" }, - "homepage": "https://github.com/moeiscool/Shinobi#readme", + "homepage": "https://gitlab.com/Shinobi-Systems/Shinobi#readme", "dependencies": { "body-parser": "^1.15.2", "circular-json": "0.3.1", "connection-tester": "^0.1.1", - "chokidar": "^2.0.3", - "mp4frag": "^0.0.15", + "mp4frag": "^0.0.22", "ejs": "^2.5.5", "express": "^4.14.0", "jsonfile": "^3.0.1", "moment": "^2.17.0", "mysql": "^2.12.0", + "sqlite3": "^3.1.8", "knex": "^0.14.2", + "aws-sdk": "^2.279.1", "pam-diff": "^0.10.2", "pipe2pam": "^0.6.2", "nodemailer": "^4.0.1", "node-onvif": "^0.1.4", + "onvif-nvt": "0.2.8", "path": "^0.12.7", "request": "^2.79.0", "socket.io": "^1.7.1", "socket.io-client": "^1.7.2", "http-proxy": "^1.17.0", "webdav": "^0.3.1", + "discord.js": "^11.3.2", "ldapauth-fork": "^4.0.2" }, "devDependencies": {} diff --git a/web/libs/css/bootstrap4.min.css b/web/libs/css/bootstrap4.min.css new file mode 100644 index 0000000..e66b07a --- /dev/null +++ b/web/libs/css/bootstrap4.min.css @@ -0,0 +1,8468 @@ +/*! + * Bootstrap v4.0.0-beta (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +@media print { + *, + ::after, + ::before { + text-shadow: none!important; + box-shadow: none!important + } + a, + a:visited { + text-decoration: underline + } + abbr[title]::after { + content: " (" attr(title) ")" + } + pre { + white-space: pre-wrap!important + } + blockquote, + pre { + border: 1px solid #999; + page-break-inside: avoid + } + thead { + display: table-header-group + } + img, + tr { + page-break-inside: avoid + } + h2, + h3, + p { + orphans: 3; + widows: 3 + } + h2, + h3 { + page-break-after: avoid + } + .navbar { + display: none + } + .badge { + border: 1px solid #000 + } + .table { + border-collapse: collapse!important + } + .table td, + .table th { + background-color: #fff!important + } + .table-bordered td, + .table-bordered th { + border: 1px solid #ddd!important + } +} + +html { + box-sizing: border-box; + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent +} + +*, +::after, +::before { + box-sizing: inherit +} + +@-ms-viewport { + width: device-width +} + +article, +aside, +dialog, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block +} + +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + background-color: #fff +} + +[tabindex="-1"]:focus { + outline: 0!important +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: .5rem +} + +p { + margin-top: 0; + margin-bottom: 1rem +} + +abbr[data-original-title], +abbr[title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0 +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit +} + +dl, +ol, +ul { + margin-top: 0; + margin-bottom: 1rem +} + +ol ol, +ol ul, +ul ol, +ul ul { + margin-bottom: 0 +} + +dt { + font-weight: 700 +} + +dd { + margin-bottom: .5rem; + margin-left: 0 +} + +blockquote { + margin: 0 0 1rem +} + +dfn { + font-style: italic +} + +b, +strong { + font-weight: bolder +} + +small { + font-size: 80% +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline +} + +sub { + bottom: -.25em +} + +sup { + top: -.5em +} + +a { + color: #007bff; + text-decoration: none; + background-color: transparent; + -webkit-text-decoration-skip: objects +} + +a:hover { + color: #0056b3; + text-decoration: underline +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none +} + +a:not([href]):not([tabindex]):focus, +a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none +} + +a:not([href]):not([tabindex]):focus { + outline: 0 +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto +} + +figure { + margin: 0 0 1rem +} + +img { + vertical-align: middle; + border-style: none +} + +svg:not(:root) { + overflow: hidden +} + +[role=button], +a, +area, +button, +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation +} + +table { + border-collapse: collapse +} + +caption { + padding-top: .75rem; + padding-bottom: .75rem; + color: #868e96; + text-align: left; + caption-side: bottom +} + +th { + text-align: left +} + +label { + display: inline-block; + margin-bottom: .5rem +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +[type=reset], +[type=submit], +button, +html [type=button] { + -webkit-appearance: button +} + +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner, +button::-moz-focus-inner { + padding: 0; + border-style: none +} + +input[type=checkbox], +input[type=radio] { + box-sizing: border-box; + padding: 0 +} + +input[type=date], +input[type=datetime-local], +input[type=month], +input[type=time] { + -webkit-appearance: listbox +} + +textarea { + overflow: auto; + resize: vertical +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0 +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal +} + +progress { + vertical-align: baseline +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: none +} + +[type=search]::-webkit-search-cancel-button, +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button +} + +output { + display: inline-block +} + +summary { + display: list-item +} + +template { + display: none +} + +[hidden] { + display: none!important +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +h1, +h2, +h3, +h4, +h5, +h6 { + margin-bottom: .5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit +} + +.h1, +h1 { + font-size: 2.5rem +} + +.h2, +h2 { + font-size: 2rem +} + +.h3, +h3 { + font-size: 1.75rem +} + +.h4, +h4 { + font-size: 1.5rem +} + +.h5, +h5 { + font-size: 1.25rem +} + +.h6, +h6 { + font-size: 1rem +} + +.lead { + font-size: 1.25rem; + font-weight: 300 +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.1 +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.1 +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.1 +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.1 +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, .1) +} + +.small, +small { + font-size: 80%; + font-weight: 400 +} + +.mark, +mark { + padding: .2em; + background-color: #fcf8e3 +} + +.list-unstyled { + padding-left: 0; + list-style: none +} + +.list-inline { + padding-left: 0; + list-style: none +} + +.list-inline-item { + display: inline-block +} + +.list-inline-item:not(:last-child) { + margin-right: 5px +} + +.initialism { + font-size: 90%; + text-transform: uppercase +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #868e96 +} + +.blockquote-footer::before { + content: "\2014 \00A0" +} + +.img-fluid { + max-width: 100%; + height: auto +} + +.img-thumbnail { + padding: .25rem; + background-color: #fff; + border: 1px solid #ddd; + border-radius: .25rem; + transition: all .2s ease-in-out; + max-width: 100%; + height: auto +} + +.figure { + display: inline-block +} + +.figure-img { + margin-bottom: .5rem; + line-height: 1 +} + +.figure-caption { + font-size: 90%; + color: #868e96 +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace +} + +code { + padding: .2rem .4rem; + font-size: 90%; + color: #bd4147; + background-color: #f8f9fa; + border-radius: .25rem +} + +a>code { + padding: 0; + color: inherit; + background-color: inherit +} + +kbd { + padding: .2rem .4rem; + font-size: 90%; + color: #fff; + background-color: #212529; + border-radius: .2rem +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700 +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #212529 +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0 +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll +} + +.container { + margin-right: auto; + margin-left: auto; + padding-right: 15px; + padding-left: 15px; + width: 100% +} + +@media (min-width:576px) { + .container { + max-width: 540px + } +} + +@media (min-width:768px) { + .container { + max-width: 720px + } +} + +@media (min-width:992px) { + .container { + max-width: 960px + } +} + +@media (min-width:1200px) { + .container { + max-width: 1140px + } +} + +.container-fluid { + width: 100%; + margin-right: auto; + margin-left: auto; + padding-right: 15px; + padding-left: 15px; + width: 100% +} + +.row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px +} + +.no-gutters { + margin-right: 0; + margin-left: 0 +} + +.no-gutters>.col, +.no-gutters>[class*=col-] { + padding-right: 0; + padding-left: 0 +} + +.col, +.col-1, +.col-10, +.col-11, +.col-12, +.col-2, +.col-3, +.col-4, +.col-5, +.col-6, +.col-7, +.col-8, +.col-9, +.col-auto, +.col-lg, +.col-lg-1, +.col-lg-10, +.col-lg-11, +.col-lg-12, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-auto, +.col-md, +.col-md-1, +.col-md-10, +.col-md-11, +.col-md-12, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-auto, +.col-sm, +.col-sm-1, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-auto, +.col-xl, +.col-xl-1, +.col-xl-10, +.col-xl-11, +.col-xl-12, +.col-xl-2, +.col-xl-3, +.col-xl-4, +.col-xl-5, +.col-xl-6, +.col-xl-7, +.col-xl-8, +.col-xl-9, +.col-xl-auto { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px +} + +.col { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% +} + +.col-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none +} + +.col-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% +} + +.col-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% +} + +.col-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% +} + +.col-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% +} + +.col-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% +} + +.col-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% +} + +.col-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% +} + +.col-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% +} + +.col-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% +} + +.col-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% +} + +.col-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% +} + +.col-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% +} + +.order-1 { + -ms-flex-order: 1; + order: 1 +} + +.order-2 { + -ms-flex-order: 2; + order: 2 +} + +.order-3 { + -ms-flex-order: 3; + order: 3 +} + +.order-4 { + -ms-flex-order: 4; + order: 4 +} + +.order-5 { + -ms-flex-order: 5; + order: 5 +} + +.order-6 { + -ms-flex-order: 6; + order: 6 +} + +.order-7 { + -ms-flex-order: 7; + order: 7 +} + +.order-8 { + -ms-flex-order: 8; + order: 8 +} + +.order-9 { + -ms-flex-order: 9; + order: 9 +} + +.order-10 { + -ms-flex-order: 10; + order: 10 +} + +.order-11 { + -ms-flex-order: 11; + order: 11 +} + +.order-12 { + -ms-flex-order: 12; + order: 12 +} + +@media (min-width:576px) { + .col-sm { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-sm-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-sm-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-sm-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-sm-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-sm-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-sm-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-sm-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-sm-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-sm-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-sm-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-sm-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-sm-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-sm-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-sm-1 { + -ms-flex-order: 1; + order: 1 + } + .order-sm-2 { + -ms-flex-order: 2; + order: 2 + } + .order-sm-3 { + -ms-flex-order: 3; + order: 3 + } + .order-sm-4 { + -ms-flex-order: 4; + order: 4 + } + .order-sm-5 { + -ms-flex-order: 5; + order: 5 + } + .order-sm-6 { + -ms-flex-order: 6; + order: 6 + } + .order-sm-7 { + -ms-flex-order: 7; + order: 7 + } + .order-sm-8 { + -ms-flex-order: 8; + order: 8 + } + .order-sm-9 { + -ms-flex-order: 9; + order: 9 + } + .order-sm-10 { + -ms-flex-order: 10; + order: 10 + } + .order-sm-11 { + -ms-flex-order: 11; + order: 11 + } + .order-sm-12 { + -ms-flex-order: 12; + order: 12 + } +} + +@media (min-width:768px) { + .col-md { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-md-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-md-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-md-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-md-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-md-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-md-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-md-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-md-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-md-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-md-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-md-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-md-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-md-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-md-1 { + -ms-flex-order: 1; + order: 1 + } + .order-md-2 { + -ms-flex-order: 2; + order: 2 + } + .order-md-3 { + -ms-flex-order: 3; + order: 3 + } + .order-md-4 { + -ms-flex-order: 4; + order: 4 + } + .order-md-5 { + -ms-flex-order: 5; + order: 5 + } + .order-md-6 { + -ms-flex-order: 6; + order: 6 + } + .order-md-7 { + -ms-flex-order: 7; + order: 7 + } + .order-md-8 { + -ms-flex-order: 8; + order: 8 + } + .order-md-9 { + -ms-flex-order: 9; + order: 9 + } + .order-md-10 { + -ms-flex-order: 10; + order: 10 + } + .order-md-11 { + -ms-flex-order: 11; + order: 11 + } + .order-md-12 { + -ms-flex-order: 12; + order: 12 + } +} + +@media (min-width:992px) { + .col-lg { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-lg-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-lg-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-lg-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-lg-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-lg-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-lg-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-lg-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-lg-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-lg-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-lg-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-lg-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-lg-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-lg-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-lg-1 { + -ms-flex-order: 1; + order: 1 + } + .order-lg-2 { + -ms-flex-order: 2; + order: 2 + } + .order-lg-3 { + -ms-flex-order: 3; + order: 3 + } + .order-lg-4 { + -ms-flex-order: 4; + order: 4 + } + .order-lg-5 { + -ms-flex-order: 5; + order: 5 + } + .order-lg-6 { + -ms-flex-order: 6; + order: 6 + } + .order-lg-7 { + -ms-flex-order: 7; + order: 7 + } + .order-lg-8 { + -ms-flex-order: 8; + order: 8 + } + .order-lg-9 { + -ms-flex-order: 9; + order: 9 + } + .order-lg-10 { + -ms-flex-order: 10; + order: 10 + } + .order-lg-11 { + -ms-flex-order: 11; + order: 11 + } + .order-lg-12 { + -ms-flex-order: 12; + order: 12 + } +} + +@media (min-width:1200px) { + .col-xl { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100% + } + .col-xl-auto { + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + max-width: none + } + .col-xl-1 { + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333% + } + .col-xl-2 { + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667% + } + .col-xl-3 { + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25% + } + .col-xl-4 { + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333% + } + .col-xl-5 { + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667% + } + .col-xl-6 { + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50% + } + .col-xl-7 { + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333% + } + .col-xl-8 { + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667% + } + .col-xl-9 { + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75% + } + .col-xl-10 { + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333% + } + .col-xl-11 { + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667% + } + .col-xl-12 { + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100% + } + .order-xl-1 { + -ms-flex-order: 1; + order: 1 + } + .order-xl-2 { + -ms-flex-order: 2; + order: 2 + } + .order-xl-3 { + -ms-flex-order: 3; + order: 3 + } + .order-xl-4 { + -ms-flex-order: 4; + order: 4 + } + .order-xl-5 { + -ms-flex-order: 5; + order: 5 + } + .order-xl-6 { + -ms-flex-order: 6; + order: 6 + } + .order-xl-7 { + -ms-flex-order: 7; + order: 7 + } + .order-xl-8 { + -ms-flex-order: 8; + order: 8 + } + .order-xl-9 { + -ms-flex-order: 9; + order: 9 + } + .order-xl-10 { + -ms-flex-order: 10; + order: 10 + } + .order-xl-11 { + -ms-flex-order: 11; + order: 11 + } + .order-xl-12 { + -ms-flex-order: 12; + order: 12 + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; + background-color: transparent +} + +.table td, +.table th { + padding: .75rem; + vertical-align: top; + border-top: 1px solid #e9ecef +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #e9ecef +} + +.table tbody+tbody { + border-top: 2px solid #e9ecef +} + +.table .table { + background-color: #fff +} + +.table-sm td, +.table-sm th { + padding: .3rem +} + +.table-bordered { + border: 1px solid #e9ecef +} + +.table-bordered td, +.table-bordered th { + border: 1px solid #e9ecef +} + +.table-bordered thead td, +.table-bordered thead th { + border-bottom-width: 2px +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, .05) +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-primary, +.table-primary>td, +.table-primary>th { + background-color: #b8daff +} + +.table-hover .table-primary:hover { + background-color: #9fcdff +} + +.table-hover .table-primary:hover>td, +.table-hover .table-primary:hover>th { + background-color: #9fcdff +} + +.table-secondary, +.table-secondary>td, +.table-secondary>th { + background-color: #dddfe2 +} + +.table-hover .table-secondary:hover { + background-color: #cfd2d6 +} + +.table-hover .table-secondary:hover>td, +.table-hover .table-secondary:hover>th { + background-color: #cfd2d6 +} + +.table-success, +.table-success>td, +.table-success>th { + background-color: #c3e6cb +} + +.table-hover .table-success:hover { + background-color: #b1dfbb +} + +.table-hover .table-success:hover>td, +.table-hover .table-success:hover>th { + background-color: #b1dfbb +} + +.table-info, +.table-info>td, +.table-info>th { + background-color: #bee5eb +} + +.table-hover .table-info:hover { + background-color: #abdde5 +} + +.table-hover .table-info:hover>td, +.table-hover .table-info:hover>th { + background-color: #abdde5 +} + +.table-warning, +.table-warning>td, +.table-warning>th { + background-color: #ffeeba +} + +.table-hover .table-warning:hover { + background-color: #ffe8a1 +} + +.table-hover .table-warning:hover>td, +.table-hover .table-warning:hover>th { + background-color: #ffe8a1 +} + +.table-danger, +.table-danger>td, +.table-danger>th { + background-color: #f5c6cb +} + +.table-hover .table-danger:hover { + background-color: #f1b0b7 +} + +.table-hover .table-danger:hover>td, +.table-hover .table-danger:hover>th { + background-color: #f1b0b7 +} + +.table-light, +.table-light>td, +.table-light>th { + background-color: #fdfdfe +} + +.table-hover .table-light:hover { + background-color: #ececf6 +} + +.table-hover .table-light:hover>td, +.table-hover .table-light:hover>th { + background-color: #ececf6 +} + +.table-dark, +.table-dark>td, +.table-dark>th { + background-color: #c6c8ca +} + +.table-hover .table-dark:hover { + background-color: #b9bbbe +} + +.table-hover .table-dark:hover>td, +.table-hover .table-dark:hover>th { + background-color: #b9bbbe +} + +.table-active, +.table-active>td, +.table-active>th { + background-color: rgba(0, 0, 0, .075) +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, .075) +} + +.table-hover .table-active:hover>td, +.table-hover .table-active:hover>th { + background-color: rgba(0, 0, 0, .075) +} + +.thead-inverse th { + color: #fff; + background-color: #212529 +} + +.thead-default th { + color: #495057; + background-color: #e9ecef +} + +.table-inverse { + color: #fff; + background-color: #212529 +} + +.table-inverse td, +.table-inverse th, +.table-inverse thead th { + border-color: #32383e +} + +.table-inverse.table-bordered { + border: 0 +} + +.table-inverse.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, .05) +} + +.table-inverse.table-hover tbody tr:hover { + background-color: rgba(255, 255, 255, .075) +} + +@media (max-width:991px) { + .table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar + } + .table-responsive.table-bordered { + border: 0 + } +} + +.form-control { + display: block; + width: 100%; + padding: .5rem .75rem; + font-size: 1rem; + line-height: 1.25; + color: #495057; + background-color: #fff; + background-image: none; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0 +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0 +} + +.form-control::-webkit-input-placeholder { + color: #868e96; + opacity: 1 +} + +.form-control:-ms-input-placeholder { + color: #868e96; + opacity: 1 +} + +.form-control::placeholder { + color: #868e96; + opacity: 1 +} + +.form-control:disabled, +.form-control[readonly] { + background-color: #e9ecef; + opacity: 1 +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.25rem + 2px) +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff +} + +.form-control-file, +.form-control-range { + display: block +} + +.col-form-label { + padding-top: calc(.5rem - 1px * 2); + padding-bottom: calc(.5rem - 1px * 2); + margin-bottom: 0 +} + +.col-form-label-lg { + padding-top: calc(.5rem - 1px * 2); + padding-bottom: calc(.5rem - 1px * 2); + font-size: 1.25rem +} + +.col-form-label-sm { + padding-top: calc(.25rem - 1px * 2); + padding-bottom: calc(.25rem - 1px * 2); + font-size: .875rem +} + +.col-form-legend { + padding-top: .5rem; + padding-bottom: .5rem; + margin-bottom: 0; + font-size: 1rem +} + +.form-control-plaintext { + padding-top: .5rem; + padding-bottom: .5rem; + margin-bottom: 0; + line-height: 1.25; + border: solid transparent; + border-width: 1px 0 +} + +.form-control-plaintext.form-control-lg, +.form-control-plaintext.form-control-sm, +.input-group-lg>.form-control-plaintext.form-control, +.input-group-lg>.form-control-plaintext.input-group-addon, +.input-group-lg>.input-group-btn>.form-control-plaintext.btn, +.input-group-sm>.form-control-plaintext.form-control, +.input-group-sm>.form-control-plaintext.input-group-addon, +.input-group-sm>.input-group-btn>.form-control-plaintext.btn { + padding-right: 0; + padding-left: 0 +} + +.form-control-sm, +.input-group-sm>.form-control, +.input-group-sm>.input-group-addon, +.input-group-sm>.input-group-btn>.btn { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]), +.input-group-sm>select.form-control:not([size]):not([multiple]), +.input-group-sm>select.input-group-addon:not([size]):not([multiple]), +select.form-control-sm:not([size]):not([multiple]) { + height: calc(1.8125rem + 2px) +} + +.form-control-lg, +.input-group-lg>.form-control, +.input-group-lg>.input-group-addon, +.input-group-lg>.input-group-btn>.btn { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]), +.input-group-lg>select.form-control:not([size]):not([multiple]), +.input-group-lg>select.input-group-addon:not([size]):not([multiple]), +select.form-control-lg:not([size]):not([multiple]) { + height: calc(2.3125rem + 2px) +} + +.form-group { + margin-bottom: 1rem +} + +.form-text { + display: block; + margin-top: .25rem +} + +.form-row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px +} + +.form-row>.col, +.form-row>[class*=col-] { + padding-right: 5px; + padding-left: 5px +} + +.form-check { + position: relative; + display: block; + margin-bottom: .5rem +} + +.form-check.disabled .form-check-label { + color: #868e96 +} + +.form-check-label { + padding-left: 1.25rem; + margin-bottom: 0 +} + +.form-check-input { + position: absolute; + margin-top: .25rem; + margin-left: -1.25rem +} + +.form-check-input:only-child { + position: static +} + +.form-check-inline { + display: inline-block +} + +.form-check-inline .form-check-label { + vertical-align: middle +} + +.form-check-inline+.form-check-inline { + margin-left: .75rem +} + +.invalid-feedback { + display: none; + margin-top: .25rem; + font-size: .875rem; + color: #dc3545 +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + width: 250px; + padding: .5rem; + margin-top: .1rem; + font-size: .875rem; + line-height: 1; + color: #fff; + background-color: rgba(220, 53, 69, .8); + border-radius: .2rem +} + +.custom-select.is-valid, +.form-control.is-valid, +.was-validated .custom-select:valid, +.was-validated .form-control:valid { + border-color: #28a745 +} + +.custom-select.is-valid:focus, +.form-control.is-valid:focus, +.was-validated .custom-select:valid:focus, +.was-validated .form-control:valid:focus { + box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.custom-select.is-valid~.invalid-feedback, +.custom-select.is-valid~.invalid-tooltip, +.form-control.is-valid~.invalid-feedback, +.form-control.is-valid~.invalid-tooltip, +.was-validated .custom-select:valid~.invalid-feedback, +.was-validated .custom-select:valid~.invalid-tooltip, +.was-validated .form-control:valid~.invalid-feedback, +.was-validated .form-control:valid~.invalid-tooltip { + display: block +} + +.form-check-input.is-valid+.form-check-label, +.was-validated .form-check-input:valid+.form-check-label { + color: #28a745 +} + +.custom-control-input.is-valid~.custom-control-indicator, +.was-validated .custom-control-input:valid~.custom-control-indicator { + background-color: rgba(40, 167, 69, .25) +} + +.custom-control-input.is-valid~.custom-control-description, +.was-validated .custom-control-input:valid~.custom-control-description { + color: #28a745 +} + +.custom-file-input.is-valid~.custom-file-control, +.was-validated .custom-file-input:valid~.custom-file-control { + border-color: #28a745 +} + +.custom-file-input.is-valid~.custom-file-control::before, +.was-validated .custom-file-input:valid~.custom-file-control::before { + border-color: inherit +} + +.custom-file-input.is-valid:focus, +.was-validated .custom-file-input:valid:focus { + box-shadow: 0 0 0 .2rem rgba(40, 167, 69, .25) +} + +.custom-select.is-invalid, +.form-control.is-invalid, +.was-validated .custom-select:invalid, +.was-validated .form-control:invalid { + border-color: #dc3545 +} + +.custom-select.is-invalid:focus, +.form-control.is-invalid:focus, +.was-validated .custom-select:invalid:focus, +.was-validated .form-control:invalid:focus { + box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) +} + +.custom-select.is-invalid~.invalid-feedback, +.custom-select.is-invalid~.invalid-tooltip, +.form-control.is-invalid~.invalid-feedback, +.form-control.is-invalid~.invalid-tooltip, +.was-validated .custom-select:invalid~.invalid-feedback, +.was-validated .custom-select:invalid~.invalid-tooltip, +.was-validated .form-control:invalid~.invalid-feedback, +.was-validated .form-control:invalid~.invalid-tooltip { + display: block +} + +.form-check-input.is-invalid+.form-check-label, +.was-validated .form-check-input:invalid+.form-check-label { + color: #dc3545 +} + +.custom-control-input.is-invalid~.custom-control-indicator, +.was-validated .custom-control-input:invalid~.custom-control-indicator { + background-color: rgba(220, 53, 69, .25) +} + +.custom-control-input.is-invalid~.custom-control-description, +.was-validated .custom-control-input:invalid~.custom-control-description { + color: #dc3545 +} + +.custom-file-input.is-invalid~.custom-file-control, +.was-validated .custom-file-input:invalid~.custom-file-control { + border-color: #dc3545 +} + +.custom-file-input.is-invalid~.custom-file-control::before, +.was-validated .custom-file-input:invalid~.custom-file-control::before { + border-color: inherit +} + +.custom-file-input.is-invalid:focus, +.was-validated .custom-file-input:invalid:focus { + box-shadow: 0 0 0 .2rem rgba(220, 53, 69, .25) +} + +.form-inline { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center +} + +.form-inline .form-check { + width: 100% +} + +@media (min-width:576px) { + .form-inline label { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0 + } + .form-inline .form-group { + display: -ms-flexbox; + display: flex; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0 + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle + } + .form-inline .form-control-plaintext { + display: inline-block + } + .form-inline .input-group { + width: auto + } + .form-inline .form-control-label { + margin-bottom: 0; + vertical-align: middle + } + .form-inline .form-check { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + margin-top: 0; + margin-bottom: 0 + } + .form-inline .form-check-label { + padding-left: 0 + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: .25rem; + margin-left: 0 + } + .form-inline .custom-control { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0 + } + .form-inline .custom-control-indicator { + position: static; + display: inline-block; + margin-right: .25rem; + vertical-align: text-bottom + } + .form-inline .has-feedback .form-control-feedback { + top: 0 + } +} + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: .5rem .75rem; + font-size: 1rem; + line-height: 1.25; + border-radius: .25rem; + transition: all .15s ease-in-out +} + +.btn:focus, +.btn:hover { + text-decoration: none +} + +.btn.focus, +.btn:focus { + outline: 0; + box-shadow: 0 0 0 3px rgba(0, 123, 255, .25) +} + +.btn.disabled, +.btn:disabled { + opacity: .65 +} + +.btn.active, +.btn:active { + background-image: none +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none +} + +.btn-primary { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-primary:hover { + color: #fff; + background-color: #0069d9; + border-color: #0062cc +} + +.btn-primary.focus, +.btn-primary:focus { + box-shadow: 0 0 0 3px rgba(0, 123, 255, .5) +} + +.btn-primary.disabled, +.btn-primary:disabled { + background-color: #007bff; + border-color: #007bff +} + +.btn-primary.active, +.btn-primary:active, +.show>.btn-primary.dropdown-toggle { + background-color: #0069d9; + background-image: none; + border-color: #0062cc +} + +.btn-secondary { + color: #fff; + background-color: #868e96; + border-color: #868e96 +} + +.btn-secondary:hover { + color: #fff; + background-color: #727b84; + border-color: #6c757d +} + +.btn-secondary.focus, +.btn-secondary:focus { + box-shadow: 0 0 0 3px rgba(134, 142, 150, .5) +} + +.btn-secondary.disabled, +.btn-secondary:disabled { + background-color: #868e96; + border-color: #868e96 +} + +.btn-secondary.active, +.btn-secondary:active, +.show>.btn-secondary.dropdown-toggle { + background-color: #727b84; + background-image: none; + border-color: #6c757d +} + +.btn-success { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-success:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34 +} + +.btn-success.focus, +.btn-success:focus { + box-shadow: 0 0 0 3px rgba(40, 167, 69, .5) +} + +.btn-success.disabled, +.btn-success:disabled { + background-color: #28a745; + border-color: #28a745 +} + +.btn-success.active, +.btn-success:active, +.show>.btn-success.dropdown-toggle { + background-color: #218838; + background-image: none; + border-color: #1e7e34 +} + +.btn-info { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-info:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b +} + +.btn-info.focus, +.btn-info:focus { + box-shadow: 0 0 0 3px rgba(23, 162, 184, .5) +} + +.btn-info.disabled, +.btn-info:disabled { + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-info.active, +.btn-info:active, +.show>.btn-info.dropdown-toggle { + background-color: #138496; + background-image: none; + border-color: #117a8b +} + +.btn-warning { + color: #111; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-warning:hover { + color: #111; + background-color: #e0a800; + border-color: #d39e00 +} + +.btn-warning.focus, +.btn-warning:focus { + box-shadow: 0 0 0 3px rgba(255, 193, 7, .5) +} + +.btn-warning.disabled, +.btn-warning:disabled { + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-warning.active, +.btn-warning:active, +.show>.btn-warning.dropdown-toggle { + background-color: #e0a800; + background-image: none; + border-color: #d39e00 +} + +.btn-danger { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-danger:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130 +} + +.btn-danger.focus, +.btn-danger:focus { + box-shadow: 0 0 0 3px rgba(220, 53, 69, .5) +} + +.btn-danger.disabled, +.btn-danger:disabled { + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-danger.active, +.btn-danger:active, +.show>.btn-danger.dropdown-toggle { + background-color: #c82333; + background-image: none; + border-color: #bd2130 +} + +.btn-light { + color: #111; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-light:hover { + color: #111; + background-color: #e2e6ea; + border-color: #dae0e5 +} + +.btn-light.focus, +.btn-light:focus { + box-shadow: 0 0 0 3px rgba(248, 249, 250, .5) +} + +.btn-light.disabled, +.btn-light:disabled { + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-light.active, +.btn-light:active, +.show>.btn-light.dropdown-toggle { + background-color: #e2e6ea; + background-image: none; + border-color: #dae0e5 +} + +.btn-dark { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-dark:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124 +} + +.btn-dark.focus, +.btn-dark:focus { + box-shadow: 0 0 0 3px rgba(52, 58, 64, .5) +} + +.btn-dark.disabled, +.btn-dark:disabled { + background-color: #343a40; + border-color: #343a40 +} + +.btn-dark.active, +.btn-dark:active, +.show>.btn-dark.dropdown-toggle { + background-color: #23272b; + background-image: none; + border-color: #1d2124 +} + +.btn-outline-primary { + color: #007bff; + background-color: transparent; + background-image: none; + border-color: #007bff +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-outline-primary.focus, +.btn-outline-primary:focus { + box-shadow: 0 0 0 3px rgba(0, 123, 255, .5) +} + +.btn-outline-primary.disabled, +.btn-outline-primary:disabled { + color: #007bff; + background-color: transparent +} + +.btn-outline-primary.active, +.btn-outline-primary:active, +.show>.btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.btn-outline-secondary { + color: #868e96; + background-color: transparent; + background-image: none; + border-color: #868e96 +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #868e96; + border-color: #868e96 +} + +.btn-outline-secondary.focus, +.btn-outline-secondary:focus { + box-shadow: 0 0 0 3px rgba(134, 142, 150, .5) +} + +.btn-outline-secondary.disabled, +.btn-outline-secondary:disabled { + color: #868e96; + background-color: transparent +} + +.btn-outline-secondary.active, +.btn-outline-secondary:active, +.show>.btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #868e96; + border-color: #868e96 +} + +.btn-outline-success { + color: #28a745; + background-color: transparent; + background-image: none; + border-color: #28a745 +} + +.btn-outline-success:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-outline-success.focus, +.btn-outline-success:focus { + box-shadow: 0 0 0 3px rgba(40, 167, 69, .5) +} + +.btn-outline-success.disabled, +.btn-outline-success:disabled { + color: #28a745; + background-color: transparent +} + +.btn-outline-success.active, +.btn-outline-success:active, +.show>.btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #28a745; + border-color: #28a745 +} + +.btn-outline-info { + color: #17a2b8; + background-color: transparent; + background-image: none; + border-color: #17a2b8 +} + +.btn-outline-info:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-outline-info.focus, +.btn-outline-info:focus { + box-shadow: 0 0 0 3px rgba(23, 162, 184, .5) +} + +.btn-outline-info.disabled, +.btn-outline-info:disabled { + color: #17a2b8; + background-color: transparent +} + +.btn-outline-info.active, +.btn-outline-info:active, +.show>.btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8 +} + +.btn-outline-warning { + color: #ffc107; + background-color: transparent; + background-image: none; + border-color: #ffc107 +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-outline-warning.focus, +.btn-outline-warning:focus { + box-shadow: 0 0 0 3px rgba(255, 193, 7, .5) +} + +.btn-outline-warning.disabled, +.btn-outline-warning:disabled { + color: #ffc107; + background-color: transparent +} + +.btn-outline-warning.active, +.btn-outline-warning:active, +.show>.btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #ffc107; + border-color: #ffc107 +} + +.btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545 +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-outline-danger.focus, +.btn-outline-danger:focus { + box-shadow: 0 0 0 3px rgba(220, 53, 69, .5) +} + +.btn-outline-danger.disabled, +.btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent +} + +.btn-outline-danger.active, +.btn-outline-danger:active, +.show>.btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545 +} + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa +} + +.btn-outline-light:hover { + color: #fff; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-outline-light.focus, +.btn-outline-light:focus { + box-shadow: 0 0 0 3px rgba(248, 249, 250, .5) +} + +.btn-outline-light.disabled, +.btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent +} + +.btn-outline-light.active, +.btn-outline-light:active, +.show>.btn-outline-light.dropdown-toggle { + color: #fff; + background-color: #f8f9fa; + border-color: #f8f9fa +} + +.btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40 +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-outline-dark.focus, +.btn-outline-dark:focus { + box-shadow: 0 0 0 3px rgba(52, 58, 64, .5) +} + +.btn-outline-dark.disabled, +.btn-outline-dark:disabled { + color: #343a40; + background-color: transparent +} + +.btn-outline-dark.active, +.btn-outline-dark:active, +.show>.btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40 +} + +.btn-link { + font-weight: 400; + color: #007bff; + border-radius: 0 +} + +.btn-link, +.btn-link.active, +.btn-link:active, +.btn-link:disabled { + background-color: transparent +} + +.btn-link, +.btn-link:active, +.btn-link:focus { + border-color: transparent; + box-shadow: none +} + +.btn-link:hover { + border-color: transparent +} + +.btn-link:focus, +.btn-link:hover { + color: #0056b3; + text-decoration: underline; + background-color: transparent +} + +.btn-link:disabled { + color: #868e96 +} + +.btn-link:disabled:focus, +.btn-link:disabled:hover { + text-decoration: none +} + +.btn-group-lg>.btn, +.btn-lg { + padding: .5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: .3rem +} + +.btn-group-sm>.btn, +.btn-sm { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5; + border-radius: .2rem +} + +.btn-block { + display: block; + width: 100% +} + +.btn-block+.btn-block { + margin-top: .5rem +} + +input[type=button].btn-block, +input[type=reset].btn-block, +input[type=submit].btn-block { + width: 100% +} + +.fade { + opacity: 0; + transition: opacity .15s linear +} + +.fade.show { + opacity: 1 +} + +.collapse { + display: none +} + +.collapse.show { + display: block +} + +tr.collapse.show { + display: table-row +} + +tbody.collapse.show { + display: table-row-group +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height .35s ease +} + +.dropdown, +.dropup { + position: relative +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: .255em; + vertical-align: .255em; + content: ""; + border-top: .3em solid; + border-right: .3em solid transparent; + border-left: .3em solid transparent +} + +.dropdown-toggle:empty::after { + margin-left: 0 +} + +.dropup .dropdown-menu { + margin-top: 0; + margin-bottom: .125rem +} + +.dropup .dropdown-toggle::after { + border-top: 0; + border-bottom: .3em solid +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: .5rem 0; + margin: .125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem +} + +.dropdown-divider { + height: 0; + margin: .5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef +} + +.dropdown-item { + display: block; + width: 100%; + padding: .25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background: 0 0; + border: 0 +} + +.dropdown-item:focus, +.dropdown-item:hover { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa +} + +.dropdown-item.active, +.dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #007bff +} + +.dropdown-item.disabled, +.dropdown-item:disabled { + color: #868e96; + background-color: transparent +} + +.show>a { + outline: 0 +} + +.dropdown-menu.show { + display: block +} + +.dropdown-header { + display: block; + padding: .5rem 1.5rem; + margin-bottom: 0; + font-size: .875rem; + color: #868e96; + white-space: nowrap +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle +} + +.btn-group-vertical>.btn, +.btn-group>.btn { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + margin-bottom: 0 +} + +.btn-group-vertical>.btn:hover, +.btn-group>.btn:hover { + z-index: 2 +} + +.btn-group-vertical>.btn.active, +.btn-group-vertical>.btn:active, +.btn-group-vertical>.btn:focus, +.btn-group>.btn.active, +.btn-group>.btn:active, +.btn-group>.btn:focus { + z-index: 2 +} + +.btn-group .btn+.btn, +.btn-group .btn+.btn-group, +.btn-group .btn-group+.btn, +.btn-group .btn-group+.btn-group, +.btn-group-vertical .btn+.btn, +.btn-group-vertical .btn+.btn-group, +.btn-group-vertical .btn-group+.btn, +.btn-group-vertical .btn-group+.btn-group { + margin-left: -1px +} + +.btn-toolbar { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-pack: start; + justify-content: flex-start +} + +.btn-toolbar .input-group { + width: auto +} + +.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0 +} + +.btn-group>.btn:first-child { + margin-left: 0 +} + +.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group>.btn:last-child:not(:first-child), +.btn-group>.dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group>.btn-group { + float: left +} + +.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { + border-radius: 0 +} + +.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child, +.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.btn+.dropdown-toggle-split { + padding-right: .5625rem; + padding-left: .5625rem +} + +.btn+.dropdown-toggle-split::after { + margin-left: 0 +} + +.btn-group-sm>.btn+.dropdown-toggle-split, +.btn-sm+.dropdown-toggle-split { + padding-right: .375rem; + padding-left: .375rem +} + +.btn-group-lg>.btn+.dropdown-toggle-split, +.btn-lg+.dropdown-toggle-split { + padding-right: .75rem; + padding-left: .75rem +} + +.btn-group-vertical { + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-align: start; + align-items: flex-start; + -ms-flex-pack: center; + justify-content: center +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100% +} + +.btn-group-vertical>.btn+.btn, +.btn-group-vertical>.btn+.btn-group, +.btn-group-vertical>.btn-group+.btn, +.btn-group-vertical>.btn-group+.btn-group { + margin-top: -1px; + margin-left: 0 +} + +.btn-group-vertical>.btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.btn-group-vertical>.btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical>.btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { + border-radius: 0 +} + +.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child, +.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0 +} + +.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +[data-toggle=buttons]>.btn input[type=checkbox], +[data-toggle=buttons]>.btn input[type=radio], +[data-toggle=buttons]>.btn-group>.btn input[type=checkbox], +[data-toggle=buttons]>.btn-group>.btn input[type=radio] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none +} + +.input-group { + position: relative; + display: -ms-flexbox; + display: flex; + width: 100% +} + +.input-group .form-control { + position: relative; + z-index: 2; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0 +} + +.input-group .form-control:active, +.input-group .form-control:focus, +.input-group .form-control:hover { + z-index: 3 +} + +.input-group .form-control, +.input-group-addon, +.input-group-btn { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center +} + +.input-group .form-control:not(:first-child):not(:last-child), +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child) { + border-radius: 0 +} + +.input-group-addon, +.input-group-btn { + white-space: nowrap; + vertical-align: middle +} + +.input-group-addon { + padding: .5rem .75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.25; + color: #495057; + text-align: center; + background-color: #e9ecef; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem +} + +.input-group-addon.form-control-sm, +.input-group-sm>.input-group-addon, +.input-group-sm>.input-group-btn>.input-group-addon.btn { + padding: .25rem .5rem; + font-size: .875rem; + border-radius: .2rem +} + +.input-group-addon.form-control-lg, +.input-group-lg>.input-group-addon, +.input-group-lg>.input-group-btn>.input-group-addon.btn { + padding: .5rem 1rem; + font-size: 1.25rem; + border-radius: .3rem +} + +.input-group-addon input[type=checkbox], +.input-group-addon input[type=radio] { + margin-top: 0 +} + +.input-group .form-control:not(:last-child), +.input-group-addon:not(:last-child), +.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn, +.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:not(:last-child)>.btn, +.input-group-btn:not(:last-child)>.btn-group>.btn, +.input-group-btn:not(:last-child)>.dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0 +} + +.input-group-addon:not(:last-child) { + border-right: 0 +} + +.input-group .form-control:not(:first-child), +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child)>.btn, +.input-group-btn:not(:first-child)>.btn-group>.btn, +.input-group-btn:not(:first-child)>.dropdown-toggle, +.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn, +.input-group-btn:not(:last-child)>.btn:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0 +} + +.form-control+.input-group-addon:not(:first-child) { + border-left: 0 +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap +} + +.input-group-btn>.btn { + position: relative +} + +.input-group-btn>.btn+.btn { + margin-left: -1px +} + +.input-group-btn>.btn:active, +.input-group-btn>.btn:focus, +.input-group-btn>.btn:hover { + z-index: 3 +} + +.input-group-btn:not(:last-child)>.btn, +.input-group-btn:not(:last-child)>.btn-group { + margin-right: -1px +} + +.input-group-btn:not(:first-child)>.btn, +.input-group-btn:not(:first-child)>.btn-group { + z-index: 2; + margin-left: -1px +} + +.input-group-btn:not(:first-child)>.btn-group:active, +.input-group-btn:not(:first-child)>.btn-group:focus, +.input-group-btn:not(:first-child)>.btn-group:hover, +.input-group-btn:not(:first-child)>.btn:active, +.input-group-btn:not(:first-child)>.btn:focus, +.input-group-btn:not(:first-child)>.btn:hover { + z-index: 3 +} + +.custom-control { + position: relative; + display: -ms-inline-flexbox; + display: inline-flex; + min-height: 1.5rem; + padding-left: 1.5rem; + margin-right: 1rem +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0 +} + +.custom-control-input:checked~.custom-control-indicator { + color: #fff; + background-color: #007bff +} + +.custom-control-input:focus~.custom-control-indicator { + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #007bff +} + +.custom-control-input:active~.custom-control-indicator { + color: #fff; + background-color: #b3d7ff +} + +.custom-control-input:disabled~.custom-control-indicator { + background-color: #e9ecef +} + +.custom-control-input:disabled~.custom-control-description { + color: #868e96 +} + +.custom-control-indicator { + position: absolute; + top: .25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + background-size: 50% 50% +} + +.custom-checkbox .custom-control-indicator { + border-radius: .25rem +} + +.custom-checkbox .custom-control-input:checked~.custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E") +} + +.custom-checkbox .custom-control-input:indeterminate~.custom-control-indicator { + background-color: #007bff; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E") +} + +.custom-radio .custom-control-indicator { + border-radius: 50% +} + +.custom-radio .custom-control-input:checked~.custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E") +} + +.custom-controls-stacked { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column +} + +.custom-controls-stacked .custom-control { + margin-bottom: .25rem +} + +.custom-controls-stacked .custom-control+.custom-control { + margin-left: 0 +} + +.custom-select { + display: inline-block; + max-width: 100%; + height: calc(2.25rem + 2px); + padding: .375rem 1.75rem .375rem .75rem; + line-height: 1.25; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none +} + +.custom-select:focus { + border-color: #80bdff; + outline: 0 +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff +} + +.custom-select:disabled { + color: #868e96; + background-color: #e9ecef +} + +.custom-select::-ms-expand { + opacity: 0 +} + +.custom-select-sm { + height: calc(1.8125rem + 2px); + padding-top: .375rem; + padding-bottom: .375rem; + font-size: 75% +} + +.custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: 2.5rem; + margin-bottom: 0 +} + +.custom-file-input { + min-width: 14rem; + max-width: 100%; + height: 2.5rem; + margin: 0; + opacity: 0 +} + +.custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #495057; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem +} + +.custom-file-control:lang(en):empty::after { + content: "Choose file..." +} + +.custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #495057; + background-color: #e9ecef; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 0 .25rem .25rem 0 +} + +.custom-file-control:lang(en)::before { + content: "Browse" +} + +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.nav-link { + display: block; + padding: .5rem 1rem +} + +.nav-link:focus, +.nav-link:hover { + text-decoration: none +} + +.nav-link.disabled { + color: #868e96 +} + +.nav-tabs { + border-bottom: 1px solid #ddd +} + +.nav-tabs .nav-item { + margin-bottom: -1px +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.nav-tabs .nav-link:focus, +.nav-tabs .nav-link:hover { + border-color: #e9ecef #e9ecef #ddd +} + +.nav-tabs .nav-link.disabled { + color: #868e96; + background-color: transparent; + border-color: transparent +} + +.nav-tabs .nav-item.show .nav-link, +.nav-tabs .nav-link.active { + color: #495057; + background-color: #fff; + border-color: #ddd #ddd #fff +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0 +} + +.nav-pills .nav-link { + border-radius: .25rem +} + +.nav-pills .nav-link.active, +.show>.nav-pills .nav-link { + color: #fff; + background-color: #007bff +} + +.nav-fill .nav-item { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center +} + +.nav-justified .nav-item { + -ms-flex-preferred-size: 0; + flex-basis: 0; + -ms-flex-positive: 1; + flex-grow: 1; + text-align: center +} + +.tab-content>.tab-pane { + display: none +} + +.tab-content>.active { + display: block +} + +.navbar { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: .5rem 1rem +} + +.navbar>.container, +.navbar>.container-fluid { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between +} + +.navbar-brand { + display: inline-block; + padding-top: .3125rem; + padding-bottom: .3125rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap +} + +.navbar-brand:focus, +.navbar-brand:hover { + text-decoration: none +} + +.navbar-nav { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0 +} + +.navbar-nav .dropdown-menu { + position: static; + float: none +} + +.navbar-text { + display: inline-block; + padding-top: .5rem; + padding-bottom: .5rem +} + +.navbar-collapse { + -ms-flex-preferred-size: 100%; + flex-basis: 100%; + -ms-flex-align: center; + align-items: center +} + +.navbar-toggler { + padding: .25rem .75rem; + font-size: 1.25rem; + line-height: 1; + background: 0 0; + border: 1px solid transparent; + border-radius: .25rem +} + +.navbar-toggler:focus, +.navbar-toggler:hover { + text-decoration: none +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100% +} + +@media (max-width:575px) { + .navbar-expand-sm>.container, + .navbar-expand-sm>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:576px) { + .navbar-expand-sm { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-sm .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-sm .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-sm>.container, + .navbar-expand-sm>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-sm .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-sm .navbar-toggler { + display: none + } +} + +@media (max-width:767px) { + .navbar-expand-md>.container, + .navbar-expand-md>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:768px) { + .navbar-expand-md { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-md .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-md .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-md>.container, + .navbar-expand-md>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-md .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-md .navbar-toggler { + display: none + } +} + +@media (max-width:991px) { + .navbar-expand-lg>.container, + .navbar-expand-lg>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:992px) { + .navbar-expand-lg { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-lg .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-lg .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-lg>.container, + .navbar-expand-lg>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-lg .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-lg .navbar-toggler { + display: none + } +} + +@media (max-width:1199px) { + .navbar-expand-xl>.container, + .navbar-expand-xl>.container-fluid { + padding-right: 0; + padding-left: 0 + } +} + +@media (min-width:1200px) { + .navbar-expand-xl { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start + } + .navbar-expand-xl .navbar-nav { + -ms-flex-direction: row; + flex-direction: row + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute + } + .navbar-expand-xl .navbar-nav .dropdown-menu-right { + right: 0; + left: auto + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem + } + .navbar-expand-xl>.container, + .navbar-expand-xl>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap + } + .navbar-expand-xl .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important + } + .navbar-expand-xl .navbar-toggler { + display: none + } +} + +.navbar-expand { + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -ms-flex-pack: start; + justify-content: flex-start +} + +.navbar-expand>.container, +.navbar-expand>.container-fluid { + padding-right: 0; + padding-left: 0 +} + +.navbar-expand .navbar-nav { + -ms-flex-direction: row; + flex-direction: row +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute +} + +.navbar-expand .navbar-nav .dropdown-menu-right { + right: 0; + left: auto +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem +} + +.navbar-expand>.container, +.navbar-expand>.container-fluid { + -ms-flex-wrap: nowrap; + flex-wrap: nowrap +} + +.navbar-expand .navbar-collapse { + display: -ms-flexbox!important; + display: flex!important +} + +.navbar-expand .navbar-toggler { + display: none +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-brand:focus, +.navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, .5) +} + +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, .7) +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, .3) +} + +.navbar-light .navbar-nav .active>.nav-link, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .show>.nav-link { + color: rgba(0, 0, 0, .9) +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, .5); + border-color: rgba(0, 0, 0, .1) +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, .5) +} + +.navbar-dark .navbar-brand { + color: #fff +} + +.navbar-dark .navbar-brand:focus, +.navbar-dark .navbar-brand:hover { + color: #fff +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, .5) +} + +.navbar-dark .navbar-nav .nav-link:focus, +.navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, .75) +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, .25) +} + +.navbar-dark .navbar-nav .active>.nav-link, +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .show>.nav-link { + color: #fff +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, .5); + border-color: rgba(255, 255, 255, .1) +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, .5) +} + +.card { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, .125); + border-radius: .25rem +} + +.card-body { + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem +} + +.card-title { + margin-bottom: .75rem +} + +.card-subtitle { + margin-top: -.375rem; + margin-bottom: 0 +} + +.card-text:last-child { + margin-bottom: 0 +} + +.card-link:hover { + text-decoration: none +} + +.card-link+.card-link { + margin-left: 1.25rem +} + +.card>.list-group:first-child .list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.card>.list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.card-header { + padding: .75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, .03); + border-bottom: 1px solid rgba(0, 0, 0, .125) +} + +.card-header:first-child { + border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 +} + +.card-footer { + padding: .75rem 1.25rem; + background-color: rgba(0, 0, 0, .03); + border-top: 1px solid rgba(0, 0, 0, .125) +} + +.card-footer:last-child { + border-radius: 0 0 calc(.25rem - 1px) calc(.25rem - 1px) +} + +.card-header-tabs { + margin-right: -.625rem; + margin-bottom: -.75rem; + margin-left: -.625rem; + border-bottom: 0 +} + +.card-header-pills { + margin-right: -.625rem; + margin-left: -.625rem +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem +} + +.card-img { + width: 100%; + border-radius: calc(.25rem - 1px) +} + +.card-img-top { + width: 100%; + border-top-left-radius: calc(.25rem - 1px); + border-top-right-radius: calc(.25rem - 1px) +} + +.card-img-bottom { + width: 100%; + border-bottom-right-radius: calc(.25rem - 1px); + border-bottom-left-radius: calc(.25rem - 1px) +} + +@media (min-width:576px) { + .card-deck { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px + } + .card-deck .card { + display: -ms-flexbox; + display: flex; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -ms-flex-direction: column; + flex-direction: column; + margin-right: 15px; + margin-left: 15px + } +} + +@media (min-width:576px) { + .card-group { + display: -ms-flexbox; + display: flex; + -ms-flex-flow: row wrap; + flex-flow: row wrap + } + .card-group .card { + -ms-flex: 1 0 0%; + flex: 1 0 0% + } + .card-group .card+.card { + margin-left: 0; + border-left: 0 + } + .card-group .card:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0 + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0 + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0 + } + .card-group .card:last-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0 + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0 + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0 + } + .card-group .card:not(:first-child):not(:last-child) { + border-radius: 0 + } + .card-group .card:not(:first-child):not(:last-child) .card-img-bottom, + .card-group .card:not(:first-child):not(:last-child) .card-img-top { + border-radius: 0 + } +} + +.card-columns .card { + margin-bottom: .75rem +} + +@media (min-width:576px) { + .card-columns { + -webkit-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + column-gap: 1.25rem + } + .card-columns .card { + display: inline-block; + width: 100% + } +} + +.breadcrumb { + padding: .75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; + border-radius: .25rem +} + +.breadcrumb::after { + display: block; + clear: both; + content: "" +} + +.breadcrumb-item { + float: left +} + +.breadcrumb-item+.breadcrumb-item::before { + display: inline-block; + padding-right: .5rem; + padding-left: .5rem; + color: #868e96; + content: "/" +} + +.breadcrumb-item+.breadcrumb-item:hover::before { + text-decoration: underline +} + +.breadcrumb-item+.breadcrumb-item:hover::before { + text-decoration: none +} + +.breadcrumb-item.active { + color: #868e96 +} + +.pagination { + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: .25rem +} + +.page-item:first-child .page-link { + margin-left: 0; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.page-item:last-child .page-link { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem +} + +.page-item.active .page-link { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.page-item.disabled .page-link { + color: #868e96; + pointer-events: none; + background-color: #fff; + border-color: #ddd +} + +.page-link { + position: relative; + display: block; + padding: .5rem .75rem; + margin-left: -1px; + line-height: 1.25; + color: #007bff; + background-color: #fff; + border: 1px solid #ddd +} + +.page-link:focus, +.page-link:hover { + color: #0056b3; + text-decoration: none; + background-color: #e9ecef; + border-color: #ddd +} + +.pagination-lg .page-link { + padding: .75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5 +} + +.pagination-lg .page-item:first-child .page-link { + border-top-left-radius: .3rem; + border-bottom-left-radius: .3rem +} + +.pagination-lg .page-item:last-child .page-link { + border-top-right-radius: .3rem; + border-bottom-right-radius: .3rem +} + +.pagination-sm .page-link { + padding: .25rem .5rem; + font-size: .875rem; + line-height: 1.5 +} + +.pagination-sm .page-item:first-child .page-link { + border-top-left-radius: .2rem; + border-bottom-left-radius: .2rem +} + +.pagination-sm .page-item:last-child .page-link { + border-top-right-radius: .2rem; + border-bottom-right-radius: .2rem +} + +.badge { + display: inline-block; + padding: .25em .4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25rem +} + +.badge:empty { + display: none +} + +.btn .badge { + position: relative; + top: -1px +} + +.badge-pill { + padding-right: .6em; + padding-left: .6em; + border-radius: 10rem +} + +.badge-primary { + color: #fff; + background-color: #007bff +} + +.badge-primary[href]:focus, +.badge-primary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #0062cc +} + +.badge-secondary { + color: #fff; + background-color: #868e96 +} + +.badge-secondary[href]:focus, +.badge-secondary[href]:hover { + color: #fff; + text-decoration: none; + background-color: #6c757d +} + +.badge-success { + color: #fff; + background-color: #28a745 +} + +.badge-success[href]:focus, +.badge-success[href]:hover { + color: #fff; + text-decoration: none; + background-color: #1e7e34 +} + +.badge-info { + color: #fff; + background-color: #17a2b8 +} + +.badge-info[href]:focus, +.badge-info[href]:hover { + color: #fff; + text-decoration: none; + background-color: #117a8b +} + +.badge-warning { + color: #111; + background-color: #ffc107 +} + +.badge-warning[href]:focus, +.badge-warning[href]:hover { + color: #111; + text-decoration: none; + background-color: #d39e00 +} + +.badge-danger { + color: #fff; + background-color: #dc3545 +} + +.badge-danger[href]:focus, +.badge-danger[href]:hover { + color: #fff; + text-decoration: none; + background-color: #bd2130 +} + +.badge-light { + color: #111; + background-color: #f8f9fa +} + +.badge-light[href]:focus, +.badge-light[href]:hover { + color: #111; + text-decoration: none; + background-color: #dae0e5 +} + +.badge-dark { + color: #fff; + background-color: #343a40 +} + +.badge-dark[href]:focus, +.badge-dark[href]:hover { + color: #fff; + text-decoration: none; + background-color: #1d2124 +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: .3rem +} + +@media (min-width:576px) { + .jumbotron { + padding: 4rem 2rem + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0 +} + +.alert { + padding: .75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: .25rem +} + +.alert-heading { + color: inherit +} + +.alert-link { + font-weight: 700 +} + +.alert-dismissible .close { + position: relative; + top: -.75rem; + right: -1.25rem; + padding: .75rem 1.25rem; + color: inherit +} + +.alert-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff +} + +.alert-primary hr { + border-top-color: #9fcdff +} + +.alert-primary .alert-link { + color: #002752 +} + +.alert-secondary { + color: #464a4e; + background-color: #e7e8ea; + border-color: #dddfe2 +} + +.alert-secondary hr { + border-top-color: #cfd2d6 +} + +.alert-secondary .alert-link { + color: #2e3133 +} + +.alert-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb +} + +.alert-success hr { + border-top-color: #b1dfbb +} + +.alert-success .alert-link { + color: #0b2e13 +} + +.alert-info { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb +} + +.alert-info hr { + border-top-color: #abdde5 +} + +.alert-info .alert-link { + color: #062c33 +} + +.alert-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba +} + +.alert-warning hr { + border-top-color: #ffe8a1 +} + +.alert-warning .alert-link { + color: #533f03 +} + +.alert-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb +} + +.alert-danger hr { + border-top-color: #f1b0b7 +} + +.alert-danger .alert-link { + color: #491217 +} + +.alert-light { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe +} + +.alert-light hr { + border-top-color: #ececf6 +} + +.alert-light .alert-link { + color: #686868 +} + +.alert-dark { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca +} + +.alert-dark hr { + border-top-color: #b9bbbe +} + +.alert-dark .alert-link { + color: #040505 +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0 + } + to { + background-position: 0 0 + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0 + } + to { + background-position: 0 0 + } +} + +.progress { + display: -ms-flexbox; + display: flex; + overflow: hidden; + font-size: .75rem; + line-height: 1rem; + text-align: center; + background-color: #e9ecef; + border-radius: .25rem +} + +.progress-bar { + height: 1rem; + line-height: 1rem; + color: #fff; + background-color: #007bff; + transition: width .6s ease +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite +} + +.media { + display: -ms-flexbox; + display: flex; + -ms-flex-align: start; + align-items: flex-start +} + +.media-body { + -ms-flex: 1; + flex: 1 +} + +.list-group { + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0 +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit +} + +.list-group-item-action:focus, +.list-group-item-action:hover { + color: #495057; + text-decoration: none; + background-color: #f8f9fa +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef +} + +.list-group-item { + position: relative; + display: block; + padding: .75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, .125) +} + +.list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem +} + +.list-group-item:focus, +.list-group-item:hover { + text-decoration: none +} + +.list-group-item.disabled, +.list-group-item:disabled { + color: #868e96; + background-color: #fff +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #007bff; + border-color: #007bff +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0 +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0 +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0 +} + +.list-group-item-primary { + color: #004085; + background-color: #b8daff +} + +a.list-group-item-primary, +button.list-group-item-primary { + color: #004085 +} + +a.list-group-item-primary:focus, +a.list-group-item-primary:hover, +button.list-group-item-primary:focus, +button.list-group-item-primary:hover { + color: #004085; + background-color: #9fcdff +} + +a.list-group-item-primary.active, +button.list-group-item-primary.active { + color: #fff; + background-color: #004085; + border-color: #004085 +} + +.list-group-item-secondary { + color: #464a4e; + background-color: #dddfe2 +} + +a.list-group-item-secondary, +button.list-group-item-secondary { + color: #464a4e +} + +a.list-group-item-secondary:focus, +a.list-group-item-secondary:hover, +button.list-group-item-secondary:focus, +button.list-group-item-secondary:hover { + color: #464a4e; + background-color: #cfd2d6 +} + +a.list-group-item-secondary.active, +button.list-group-item-secondary.active { + color: #fff; + background-color: #464a4e; + border-color: #464a4e +} + +.list-group-item-success { + color: #155724; + background-color: #c3e6cb +} + +a.list-group-item-success, +button.list-group-item-success { + color: #155724 +} + +a.list-group-item-success:focus, +a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #155724; + background-color: #b1dfbb +} + +a.list-group-item-success.active, +button.list-group-item-success.active { + color: #fff; + background-color: #155724; + border-color: #155724 +} + +.list-group-item-info { + color: #0c5460; + background-color: #bee5eb +} + +a.list-group-item-info, +button.list-group-item-info { + color: #0c5460 +} + +a.list-group-item-info:focus, +a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #0c5460; + background-color: #abdde5 +} + +a.list-group-item-info.active, +button.list-group-item-info.active { + color: #fff; + background-color: #0c5460; + border-color: #0c5460 +} + +.list-group-item-warning { + color: #856404; + background-color: #ffeeba +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #856404 +} + +a.list-group-item-warning:focus, +a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #856404; + background-color: #ffe8a1 +} + +a.list-group-item-warning.active, +button.list-group-item-warning.active { + color: #fff; + background-color: #856404; + border-color: #856404 +} + +.list-group-item-danger { + color: #721c24; + background-color: #f5c6cb +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #721c24 +} + +a.list-group-item-danger:focus, +a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #721c24; + background-color: #f1b0b7 +} + +a.list-group-item-danger.active, +button.list-group-item-danger.active { + color: #fff; + background-color: #721c24; + border-color: #721c24 +} + +.list-group-item-light { + color: #818182; + background-color: #fdfdfe +} + +a.list-group-item-light, +button.list-group-item-light { + color: #818182 +} + +a.list-group-item-light:focus, +a.list-group-item-light:hover, +button.list-group-item-light:focus, +button.list-group-item-light:hover { + color: #818182; + background-color: #ececf6 +} + +a.list-group-item-light.active, +button.list-group-item-light.active { + color: #fff; + background-color: #818182; + border-color: #818182 +} + +.list-group-item-dark { + color: #1b1e21; + background-color: #c6c8ca +} + +a.list-group-item-dark, +button.list-group-item-dark { + color: #1b1e21 +} + +a.list-group-item-dark:focus, +a.list-group-item-dark:hover, +button.list-group-item-dark:focus, +button.list-group-item-dark:hover { + color: #1b1e21; + background-color: #b9bbbe +} + +a.list-group-item-dark.active, +button.list-group-item-dark.active { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21 +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5 +} + +.close:focus, +.close:hover { + color: #000; + text-decoration: none; + opacity: .75 +} + +button.close { + padding: 0; + background: 0 0; + border: 0; + -webkit-appearance: none +} + +.modal-open { + overflow: hidden +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0 +} + +.modal.fade .modal-dialog { + transition: -webkit-transform .3s ease-out; + transition: transform .3s ease-out; + transition: transform .3s ease-out, -webkit-transform .3s ease-out; + -webkit-transform: translate(0, -25%); + transform: translate(0, -25%) +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + transform: translate(0, 0) +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px +} + +.modal-content { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + outline: 0 +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000 +} + +.modal-backdrop.fade { + opacity: 0 +} + +.modal-backdrop.show { + opacity: .5 +} + +.modal-header { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; + border-bottom: 1px solid #e9ecef +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5 +} + +.modal-body { + position: relative; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 15px +} + +.modal-footer { + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 15px; + border-top: 1px solid #e9ecef +} + +.modal-footer>:not(:first-child) { + margin-left: .25rem +} + +.modal-footer>:not(:last-child) { + margin-right: .25rem +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll +} + +@media (min-width:576px) { + .modal-dialog { + max-width: 500px; + margin: 30px auto + } + .modal-sm { + max-width: 300px + } +} + +@media (min-width:992px) { + .modal-lg { + max-width: 800px + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: .875rem; + word-wrap: break-word; + opacity: 0 +} + +.tooltip.show { + opacity: .9 +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 5px; + height: 5px +} + +.tooltip.bs-tooltip-auto[x-placement^=top], +.tooltip.bs-tooltip-top { + padding: 5px 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=top] .arrow, +.tooltip.bs-tooltip-top .arrow { + bottom: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=top] .arrow::before, +.tooltip.bs-tooltip-top .arrow::before { + margin-left: -3px; + content: ""; + border-width: 5px 5px 0; + border-top-color: #000 +} + +.tooltip.bs-tooltip-auto[x-placement^=right], +.tooltip.bs-tooltip-right { + padding: 0 5px +} + +.tooltip.bs-tooltip-auto[x-placement^=right] .arrow, +.tooltip.bs-tooltip-right .arrow { + left: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=right] .arrow::before, +.tooltip.bs-tooltip-right .arrow::before { + margin-top: -3px; + content: ""; + border-width: 5px 5px 5px 0; + border-right-color: #000 +} + +.tooltip.bs-tooltip-auto[x-placement^=bottom], +.tooltip.bs-tooltip-bottom { + padding: 5px 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow, +.tooltip.bs-tooltip-bottom .arrow { + top: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=bottom] .arrow::before, +.tooltip.bs-tooltip-bottom .arrow::before { + margin-left: -3px; + content: ""; + border-width: 0 5px 5px; + border-bottom-color: #000 +} + +.tooltip.bs-tooltip-auto[x-placement^=left], +.tooltip.bs-tooltip-left { + padding: 0 5px +} + +.tooltip.bs-tooltip-auto[x-placement^=left] .arrow, +.tooltip.bs-tooltip-left .arrow { + right: 0 +} + +.tooltip.bs-tooltip-auto[x-placement^=left] .arrow::before, +.tooltip.bs-tooltip-left .arrow::before { + right: 0; + margin-top: -3px; + content: ""; + border-width: 5px 0 5px 5px; + border-left-color: #000 +} + +.tooltip .arrow::before { + position: absolute; + border-color: transparent; + border-style: solid +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: .25rem +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: .875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem +} + +.popover .arrow { + position: absolute; + display: block; + width: 10px; + height: 5px +} + +.popover .arrow::after, +.popover .arrow::before { + position: absolute; + display: block; + border-color: transparent; + border-style: solid +} + +.popover .arrow::before { + content: ""; + border-width: 11px +} + +.popover .arrow::after { + content: ""; + border-width: 11px +} + +.popover.bs-popover-auto[x-placement^=top], +.popover.bs-popover-top { + margin-bottom: 10px +} + +.popover.bs-popover-auto[x-placement^=top] .arrow, +.popover.bs-popover-top .arrow { + bottom: 0 +} + +.popover.bs-popover-auto[x-placement^=top] .arrow::after, +.popover.bs-popover-auto[x-placement^=top] .arrow::before, +.popover.bs-popover-top .arrow::after, +.popover.bs-popover-top .arrow::before { + border-bottom-width: 0 +} + +.popover.bs-popover-auto[x-placement^=top] .arrow::before, +.popover.bs-popover-top .arrow::before { + bottom: -11px; + margin-left: -6px; + border-top-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=top] .arrow::after, +.popover.bs-popover-top .arrow::after { + bottom: -10px; + margin-left: -6px; + border-top-color: #fff +} + +.popover.bs-popover-auto[x-placement^=right], +.popover.bs-popover-right { + margin-left: 10px +} + +.popover.bs-popover-auto[x-placement^=right] .arrow, +.popover.bs-popover-right .arrow { + left: 0 +} + +.popover.bs-popover-auto[x-placement^=right] .arrow::after, +.popover.bs-popover-auto[x-placement^=right] .arrow::before, +.popover.bs-popover-right .arrow::after, +.popover.bs-popover-right .arrow::before { + margin-top: -8px; + border-left-width: 0 +} + +.popover.bs-popover-auto[x-placement^=right] .arrow::before, +.popover.bs-popover-right .arrow::before { + left: -11px; + border-right-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=right] .arrow::after, +.popover.bs-popover-right .arrow::after { + left: -10px; + border-right-color: #fff +} + +.popover.bs-popover-auto[x-placement^=bottom], +.popover.bs-popover-bottom { + margin-top: 10px +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow, +.popover.bs-popover-bottom .arrow { + top: 0 +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow::after, +.popover.bs-popover-auto[x-placement^=bottom] .arrow::before, +.popover.bs-popover-bottom .arrow::after, +.popover.bs-popover-bottom .arrow::before { + margin-left: -7px; + border-top-width: 0 +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow::before, +.popover.bs-popover-bottom .arrow::before { + top: -11px; + border-bottom-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=bottom] .arrow::after, +.popover.bs-popover-bottom .arrow::after { + top: -10px; + border-bottom-color: #fff +} + +.popover.bs-popover-auto[x-placement^=bottom] .popover-header::before, +.popover.bs-popover-bottom .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7 +} + +.popover.bs-popover-auto[x-placement^=left], +.popover.bs-popover-left { + margin-right: 10px +} + +.popover.bs-popover-auto[x-placement^=left] .arrow, +.popover.bs-popover-left .arrow { + right: 0 +} + +.popover.bs-popover-auto[x-placement^=left] .arrow::after, +.popover.bs-popover-auto[x-placement^=left] .arrow::before, +.popover.bs-popover-left .arrow::after, +.popover.bs-popover-left .arrow::before { + margin-top: -8px; + border-right-width: 0 +} + +.popover.bs-popover-auto[x-placement^=left] .arrow::before, +.popover.bs-popover-left .arrow::before { + right: -11px; + border-left-color: rgba(0, 0, 0, .25) +} + +.popover.bs-popover-auto[x-placement^=left] .arrow::after, +.popover.bs-popover-left .arrow::after { + right: -10px; + border-left-color: #fff +} + +.popover-header { + padding: 8px 14px; + margin-bottom: 0; + font-size: 1rem; + color: inherit; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(.3rem - 1px); + border-top-right-radius: calc(.3rem - 1px) +} + +.popover-header:empty { + display: none +} + +.popover-body { + padding: 9px 14px; + color: #212529 +} + +.carousel { + position: relative +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden +} + +.carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + transition: -webkit-transform .6s ease; + transition: transform .6s ease; + transition: transform .6s ease, -webkit-transform .6s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px +} + +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active { + display: block +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0 +} + +.carousel-item-next.carousel-item-left, +.carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) + } +} + +.active.carousel-item-right, +.carousel-item-next { + -webkit-transform: translateX(100%); + transform: translateX(100%) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .active.carousel-item-right, + .carousel-item-next { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) + } +} + +.active.carousel-item-left, +.carousel-item-prev { + -webkit-transform: translateX(-100%); + transform: translateX(-100%) +} + +@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)) { + .active.carousel-item-left, + .carousel-item-prev { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) + } +} + +.carousel-control-next, +.carousel-control-prev { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: .5 +} + +.carousel-control-next:focus, +.carousel-control-next:hover, +.carousel-control-prev:focus, +.carousel-control-prev:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9 +} + +.carousel-control-prev { + left: 0 +} + +.carousel-control-next { + right: 0 +} + +.carousel-control-next-icon, +.carousel-control-prev-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100% +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E") +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E") +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none +} + +.carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + background-color: rgba(255, 255, 255, .5) +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: "" +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: "" +} + +.carousel-indicators .active { + background-color: #fff +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center +} + +.align-baseline { + vertical-align: baseline!important +} + +.align-top { + vertical-align: top!important +} + +.align-middle { + vertical-align: middle!important +} + +.align-bottom { + vertical-align: bottom!important +} + +.align-text-bottom { + vertical-align: text-bottom!important +} + +.align-text-top { + vertical-align: text-top!important +} + +.bg-primary { + background-color: #007bff!important +} + +a.bg-primary:focus, +a.bg-primary:hover { + background-color: #0062cc!important +} + +.bg-secondary { + background-color: #868e96!important +} + +a.bg-secondary:focus, +a.bg-secondary:hover { + background-color: #6c757d!important +} + +.bg-success { + background-color: #28a745!important +} + +a.bg-success:focus, +a.bg-success:hover { + background-color: #1e7e34!important +} + +.bg-info { + background-color: #17a2b8!important +} + +a.bg-info:focus, +a.bg-info:hover { + background-color: #117a8b!important +} + +.bg-warning { + background-color: #ffc107!important +} + +a.bg-warning:focus, +a.bg-warning:hover { + background-color: #d39e00!important +} + +.bg-danger { + background-color: #dc3545!important +} + +a.bg-danger:focus, +a.bg-danger:hover { + background-color: #bd2130!important +} + +.bg-light { + background-color: #f8f9fa!important +} + +a.bg-light:focus, +a.bg-light:hover { + background-color: #dae0e5!important +} + +.bg-dark { + background-color: #343a40!important +} + +a.bg-dark:focus, +a.bg-dark:hover { + background-color: #1d2124!important +} + +.bg-white { + background-color: #fff!important +} + +.bg-transparent { + background-color: transparent!important +} + +.border { + border: 1px solid #e9ecef!important +} + +.border-0 { + border: 0!important +} + +.border-top-0 { + border-top: 0!important +} + +.border-right-0 { + border-right: 0!important +} + +.border-bottom-0 { + border-bottom: 0!important +} + +.border-left-0 { + border-left: 0!important +} + +.border-primary { + border-color: #007bff!important +} + +.border-secondary { + border-color: #868e96!important +} + +.border-success { + border-color: #28a745!important +} + +.border-info { + border-color: #17a2b8!important +} + +.border-warning { + border-color: #ffc107!important +} + +.border-danger { + border-color: #dc3545!important +} + +.border-light { + border-color: #f8f9fa!important +} + +.border-dark { + border-color: #343a40!important +} + +.border-white { + border-color: #fff!important +} + +.rounded { + border-radius: .25rem!important +} + +.rounded-top { + border-top-left-radius: .25rem!important; + border-top-right-radius: .25rem!important +} + +.rounded-right { + border-top-right-radius: .25rem!important; + border-bottom-right-radius: .25rem!important +} + +.rounded-bottom { + border-bottom-right-radius: .25rem!important; + border-bottom-left-radius: .25rem!important +} + +.rounded-left { + border-top-left-radius: .25rem!important; + border-bottom-left-radius: .25rem!important +} + +.rounded-circle { + border-radius: 50% +} + +.rounded-0 { + border-radius: 0 +} + +.clearfix::after { + display: block; + clear: both; + content: "" +} + +.d-none { + display: none!important +} + +.d-inline { + display: inline!important +} + +.d-inline-block { + display: inline-block!important +} + +.d-block { + display: block!important +} + +.d-table { + display: table!important +} + +.d-table-cell { + display: table-cell!important +} + +.d-flex { + display: -ms-flexbox!important; + display: flex!important +} + +.d-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important +} + +@media (min-width:576px) { + .d-sm-none { + display: none!important + } + .d-sm-inline { + display: inline!important + } + .d-sm-inline-block { + display: inline-block!important + } + .d-sm-block { + display: block!important + } + .d-sm-table { + display: table!important + } + .d-sm-table-cell { + display: table-cell!important + } + .d-sm-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-sm-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +@media (min-width:768px) { + .d-md-none { + display: none!important + } + .d-md-inline { + display: inline!important + } + .d-md-inline-block { + display: inline-block!important + } + .d-md-block { + display: block!important + } + .d-md-table { + display: table!important + } + .d-md-table-cell { + display: table-cell!important + } + .d-md-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-md-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +@media (min-width:992px) { + .d-lg-none { + display: none!important + } + .d-lg-inline { + display: inline!important + } + .d-lg-inline-block { + display: inline-block!important + } + .d-lg-block { + display: block!important + } + .d-lg-table { + display: table!important + } + .d-lg-table-cell { + display: table-cell!important + } + .d-lg-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-lg-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +@media (min-width:1200px) { + .d-xl-none { + display: none!important + } + .d-xl-inline { + display: inline!important + } + .d-xl-inline-block { + display: inline-block!important + } + .d-xl-block { + display: block!important + } + .d-xl-table { + display: table!important + } + .d-xl-table-cell { + display: table-cell!important + } + .d-xl-flex { + display: -ms-flexbox!important; + display: flex!important + } + .d-xl-inline-flex { + display: -ms-inline-flexbox!important; + display: inline-flex!important + } +} + +.d-print-block { + display: none!important +} + +@media print { + .d-print-block { + display: block!important + } +} + +.d-print-inline { + display: none!important +} + +@media print { + .d-print-inline { + display: inline!important + } +} + +.d-print-inline-block { + display: none!important +} + +@media print { + .d-print-inline-block { + display: inline-block!important + } +} + +@media print { + .d-print-none { + display: none!important + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden +} + +.embed-responsive::before { + display: block; + content: "" +} + +.embed-responsive .embed-responsive-item, +.embed-responsive embed, +.embed-responsive iframe, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0 +} + +.embed-responsive-21by9::before { + padding-top: 42.857143% +} + +.embed-responsive-16by9::before { + padding-top: 56.25% +} + +.embed-responsive-4by3::before { + padding-top: 75% +} + +.embed-responsive-1by1::before { + padding-top: 100% +} + +.flex-row { + -ms-flex-direction: row!important; + flex-direction: row!important +} + +.flex-column { + -ms-flex-direction: column!important; + flex-direction: column!important +} + +.flex-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important +} + +.flex-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important +} + +.flex-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important +} + +.flex-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important +} + +.flex-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important +} + +.justify-content-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important +} + +.justify-content-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important +} + +.justify-content-center { + -ms-flex-pack: center!important; + justify-content: center!important +} + +.justify-content-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important +} + +.justify-content-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important +} + +.align-items-start { + -ms-flex-align: start!important; + align-items: flex-start!important +} + +.align-items-end { + -ms-flex-align: end!important; + align-items: flex-end!important +} + +.align-items-center { + -ms-flex-align: center!important; + align-items: center!important +} + +.align-items-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important +} + +.align-items-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important +} + +.align-content-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important +} + +.align-content-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important +} + +.align-content-center { + -ms-flex-line-pack: center!important; + align-content: center!important +} + +.align-content-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important +} + +.align-content-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important +} + +.align-content-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important +} + +.align-self-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important +} + +.align-self-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important +} + +.align-self-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important +} + +.align-self-center { + -ms-flex-item-align: center!important; + align-self: center!important +} + +.align-self-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important +} + +.align-self-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important +} + +@media (min-width:576px) { + .flex-sm-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-sm-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-sm-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-sm-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-sm-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-sm-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-sm-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-sm-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-sm-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-sm-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-sm-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-sm-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-sm-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-sm-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-sm-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-sm-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-sm-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-sm-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-sm-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-sm-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-sm-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-sm-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-sm-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-sm-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-sm-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-sm-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-sm-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-sm-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-sm-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +@media (min-width:768px) { + .flex-md-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-md-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-md-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-md-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-md-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-md-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-md-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-md-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-md-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-md-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-md-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-md-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-md-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-md-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-md-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-md-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-md-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-md-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-md-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-md-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-md-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-md-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-md-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-md-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-md-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-md-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-md-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-md-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-md-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +@media (min-width:992px) { + .flex-lg-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-lg-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-lg-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-lg-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-lg-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-lg-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-lg-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-lg-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-lg-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-lg-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-lg-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-lg-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-lg-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-lg-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-lg-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-lg-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-lg-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-lg-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-lg-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-lg-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-lg-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-lg-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-lg-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-lg-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-lg-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-lg-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-lg-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-lg-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-lg-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +@media (min-width:1200px) { + .flex-xl-row { + -ms-flex-direction: row!important; + flex-direction: row!important + } + .flex-xl-column { + -ms-flex-direction: column!important; + flex-direction: column!important + } + .flex-xl-row-reverse { + -ms-flex-direction: row-reverse!important; + flex-direction: row-reverse!important + } + .flex-xl-column-reverse { + -ms-flex-direction: column-reverse!important; + flex-direction: column-reverse!important + } + .flex-xl-wrap { + -ms-flex-wrap: wrap!important; + flex-wrap: wrap!important + } + .flex-xl-nowrap { + -ms-flex-wrap: nowrap!important; + flex-wrap: nowrap!important + } + .flex-xl-wrap-reverse { + -ms-flex-wrap: wrap-reverse!important; + flex-wrap: wrap-reverse!important + } + .justify-content-xl-start { + -ms-flex-pack: start!important; + justify-content: flex-start!important + } + .justify-content-xl-end { + -ms-flex-pack: end!important; + justify-content: flex-end!important + } + .justify-content-xl-center { + -ms-flex-pack: center!important; + justify-content: center!important + } + .justify-content-xl-between { + -ms-flex-pack: justify!important; + justify-content: space-between!important + } + .justify-content-xl-around { + -ms-flex-pack: distribute!important; + justify-content: space-around!important + } + .align-items-xl-start { + -ms-flex-align: start!important; + align-items: flex-start!important + } + .align-items-xl-end { + -ms-flex-align: end!important; + align-items: flex-end!important + } + .align-items-xl-center { + -ms-flex-align: center!important; + align-items: center!important + } + .align-items-xl-baseline { + -ms-flex-align: baseline!important; + align-items: baseline!important + } + .align-items-xl-stretch { + -ms-flex-align: stretch!important; + align-items: stretch!important + } + .align-content-xl-start { + -ms-flex-line-pack: start!important; + align-content: flex-start!important + } + .align-content-xl-end { + -ms-flex-line-pack: end!important; + align-content: flex-end!important + } + .align-content-xl-center { + -ms-flex-line-pack: center!important; + align-content: center!important + } + .align-content-xl-between { + -ms-flex-line-pack: justify!important; + align-content: space-between!important + } + .align-content-xl-around { + -ms-flex-line-pack: distribute!important; + align-content: space-around!important + } + .align-content-xl-stretch { + -ms-flex-line-pack: stretch!important; + align-content: stretch!important + } + .align-self-xl-auto { + -ms-flex-item-align: auto!important; + align-self: auto!important + } + .align-self-xl-start { + -ms-flex-item-align: start!important; + align-self: flex-start!important + } + .align-self-xl-end { + -ms-flex-item-align: end!important; + align-self: flex-end!important + } + .align-self-xl-center { + -ms-flex-item-align: center!important; + align-self: center!important + } + .align-self-xl-baseline { + -ms-flex-item-align: baseline!important; + align-self: baseline!important + } + .align-self-xl-stretch { + -ms-flex-item-align: stretch!important; + align-self: stretch!important + } +} + +.float-left { + float: left!important +} + +.float-right { + float: right!important +} + +.float-none { + float: none!important +} + +@media (min-width:576px) { + .float-sm-left { + float: left!important + } + .float-sm-right { + float: right!important + } + .float-sm-none { + float: none!important + } +} + +@media (min-width:768px) { + .float-md-left { + float: left!important + } + .float-md-right { + float: right!important + } + .float-md-none { + float: none!important + } +} + +@media (min-width:992px) { + .float-lg-left { + float: left!important + } + .float-lg-right { + float: right!important + } + .float-lg-none { + float: none!important + } +} + +@media (min-width:1200px) { + .float-xl-left { + float: left!important + } + .float-xl-right { + float: right!important + } + .float-xl-none { + float: none!important + } +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030 +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030 +} + +@supports ((position:-webkit-sticky) or (position:sticky)) { + .sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020 + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + -webkit-clip-path: inset(50%); + clip-path: inset(50%); + border: 0 +} + +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; + -webkit-clip-path: none; + clip-path: none +} + +.w-25 { + width: 25%!important +} + +.w-50 { + width: 50%!important +} + +.w-75 { + width: 75%!important +} + +.w-100 { + width: 100%!important +} + +.h-25 { + height: 25%!important +} + +.h-50 { + height: 50%!important +} + +.h-75 { + height: 75%!important +} + +.h-100 { + height: 100%!important +} + +.mw-100 { + max-width: 100%!important +} + +.mh-100 { + max-height: 100%!important +} + +.m-0 { + margin: 0!important +} + +.mt-0 { + margin-top: 0!important +} + +.mr-0 { + margin-right: 0!important +} + +.mb-0 { + margin-bottom: 0!important +} + +.ml-0 { + margin-left: 0!important +} + +.mx-0 { + margin-right: 0!important; + margin-left: 0!important +} + +.my-0 { + margin-top: 0!important; + margin-bottom: 0!important +} + +.m-1 { + margin: .25rem!important +} + +.mt-1 { + margin-top: .25rem!important +} + +.mr-1 { + margin-right: .25rem!important +} + +.mb-1 { + margin-bottom: .25rem!important +} + +.ml-1 { + margin-left: .25rem!important +} + +.mx-1 { + margin-right: .25rem!important; + margin-left: .25rem!important +} + +.my-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important +} + +.m-2 { + margin: .5rem!important +} + +.mt-2 { + margin-top: .5rem!important +} + +.mr-2 { + margin-right: .5rem!important +} + +.mb-2 { + margin-bottom: .5rem!important +} + +.ml-2 { + margin-left: .5rem!important +} + +.mx-2 { + margin-right: .5rem!important; + margin-left: .5rem!important +} + +.my-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important +} + +.m-3 { + margin: 1rem!important +} + +.mt-3 { + margin-top: 1rem!important +} + +.mr-3 { + margin-right: 1rem!important +} + +.mb-3 { + margin-bottom: 1rem!important +} + +.ml-3 { + margin-left: 1rem!important +} + +.mx-3 { + margin-right: 1rem!important; + margin-left: 1rem!important +} + +.my-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important +} + +.m-4 { + margin: 1.5rem!important +} + +.mt-4 { + margin-top: 1.5rem!important +} + +.mr-4 { + margin-right: 1.5rem!important +} + +.mb-4 { + margin-bottom: 1.5rem!important +} + +.ml-4 { + margin-left: 1.5rem!important +} + +.mx-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important +} + +.my-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important +} + +.m-5 { + margin: 3rem!important +} + +.mt-5 { + margin-top: 3rem!important +} + +.mr-5 { + margin-right: 3rem!important +} + +.mb-5 { + margin-bottom: 3rem!important +} + +.ml-5 { + margin-left: 3rem!important +} + +.mx-5 { + margin-right: 3rem!important; + margin-left: 3rem!important +} + +.my-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important +} + +.p-0 { + padding: 0!important +} + +.pt-0 { + padding-top: 0!important +} + +.pr-0 { + padding-right: 0!important +} + +.pb-0 { + padding-bottom: 0!important +} + +.pl-0 { + padding-left: 0!important +} + +.px-0 { + padding-right: 0!important; + padding-left: 0!important +} + +.py-0 { + padding-top: 0!important; + padding-bottom: 0!important +} + +.p-1 { + padding: .25rem!important +} + +.pt-1 { + padding-top: .25rem!important +} + +.pr-1 { + padding-right: .25rem!important +} + +.pb-1 { + padding-bottom: .25rem!important +} + +.pl-1 { + padding-left: .25rem!important +} + +.px-1 { + padding-right: .25rem!important; + padding-left: .25rem!important +} + +.py-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important +} + +.p-2 { + padding: .5rem!important +} + +.pt-2 { + padding-top: .5rem!important +} + +.pr-2 { + padding-right: .5rem!important +} + +.pb-2 { + padding-bottom: .5rem!important +} + +.pl-2 { + padding-left: .5rem!important +} + +.px-2 { + padding-right: .5rem!important; + padding-left: .5rem!important +} + +.py-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important +} + +.p-3 { + padding: 1rem!important +} + +.pt-3 { + padding-top: 1rem!important +} + +.pr-3 { + padding-right: 1rem!important +} + +.pb-3 { + padding-bottom: 1rem!important +} + +.pl-3 { + padding-left: 1rem!important +} + +.px-3 { + padding-right: 1rem!important; + padding-left: 1rem!important +} + +.py-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important +} + +.p-4 { + padding: 1.5rem!important +} + +.pt-4 { + padding-top: 1.5rem!important +} + +.pr-4 { + padding-right: 1.5rem!important +} + +.pb-4 { + padding-bottom: 1.5rem!important +} + +.pl-4 { + padding-left: 1.5rem!important +} + +.px-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important +} + +.py-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important +} + +.p-5 { + padding: 3rem!important +} + +.pt-5 { + padding-top: 3rem!important +} + +.pr-5 { + padding-right: 3rem!important +} + +.pb-5 { + padding-bottom: 3rem!important +} + +.pl-5 { + padding-left: 3rem!important +} + +.px-5 { + padding-right: 3rem!important; + padding-left: 3rem!important +} + +.py-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important +} + +.m-auto { + margin: auto!important +} + +.mt-auto { + margin-top: auto!important +} + +.mr-auto { + margin-right: auto!important +} + +.mb-auto { + margin-bottom: auto!important +} + +.ml-auto { + margin-left: auto!important +} + +.mx-auto { + margin-right: auto!important; + margin-left: auto!important +} + +.my-auto { + margin-top: auto!important; + margin-bottom: auto!important +} + +@media (min-width:576px) { + .m-sm-0 { + margin: 0!important + } + .mt-sm-0 { + margin-top: 0!important + } + .mr-sm-0 { + margin-right: 0!important + } + .mb-sm-0 { + margin-bottom: 0!important + } + .ml-sm-0 { + margin-left: 0!important + } + .mx-sm-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-sm-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-sm-1 { + margin: .25rem!important + } + .mt-sm-1 { + margin-top: .25rem!important + } + .mr-sm-1 { + margin-right: .25rem!important + } + .mb-sm-1 { + margin-bottom: .25rem!important + } + .ml-sm-1 { + margin-left: .25rem!important + } + .mx-sm-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-sm-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-sm-2 { + margin: .5rem!important + } + .mt-sm-2 { + margin-top: .5rem!important + } + .mr-sm-2 { + margin-right: .5rem!important + } + .mb-sm-2 { + margin-bottom: .5rem!important + } + .ml-sm-2 { + margin-left: .5rem!important + } + .mx-sm-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-sm-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-sm-3 { + margin: 1rem!important + } + .mt-sm-3 { + margin-top: 1rem!important + } + .mr-sm-3 { + margin-right: 1rem!important + } + .mb-sm-3 { + margin-bottom: 1rem!important + } + .ml-sm-3 { + margin-left: 1rem!important + } + .mx-sm-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-sm-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-sm-4 { + margin: 1.5rem!important + } + .mt-sm-4 { + margin-top: 1.5rem!important + } + .mr-sm-4 { + margin-right: 1.5rem!important + } + .mb-sm-4 { + margin-bottom: 1.5rem!important + } + .ml-sm-4 { + margin-left: 1.5rem!important + } + .mx-sm-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-sm-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-sm-5 { + margin: 3rem!important + } + .mt-sm-5 { + margin-top: 3rem!important + } + .mr-sm-5 { + margin-right: 3rem!important + } + .mb-sm-5 { + margin-bottom: 3rem!important + } + .ml-sm-5 { + margin-left: 3rem!important + } + .mx-sm-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-sm-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-sm-0 { + padding: 0!important + } + .pt-sm-0 { + padding-top: 0!important + } + .pr-sm-0 { + padding-right: 0!important + } + .pb-sm-0 { + padding-bottom: 0!important + } + .pl-sm-0 { + padding-left: 0!important + } + .px-sm-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-sm-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-sm-1 { + padding: .25rem!important + } + .pt-sm-1 { + padding-top: .25rem!important + } + .pr-sm-1 { + padding-right: .25rem!important + } + .pb-sm-1 { + padding-bottom: .25rem!important + } + .pl-sm-1 { + padding-left: .25rem!important + } + .px-sm-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-sm-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-sm-2 { + padding: .5rem!important + } + .pt-sm-2 { + padding-top: .5rem!important + } + .pr-sm-2 { + padding-right: .5rem!important + } + .pb-sm-2 { + padding-bottom: .5rem!important + } + .pl-sm-2 { + padding-left: .5rem!important + } + .px-sm-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-sm-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-sm-3 { + padding: 1rem!important + } + .pt-sm-3 { + padding-top: 1rem!important + } + .pr-sm-3 { + padding-right: 1rem!important + } + .pb-sm-3 { + padding-bottom: 1rem!important + } + .pl-sm-3 { + padding-left: 1rem!important + } + .px-sm-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-sm-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-sm-4 { + padding: 1.5rem!important + } + .pt-sm-4 { + padding-top: 1.5rem!important + } + .pr-sm-4 { + padding-right: 1.5rem!important + } + .pb-sm-4 { + padding-bottom: 1.5rem!important + } + .pl-sm-4 { + padding-left: 1.5rem!important + } + .px-sm-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-sm-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-sm-5 { + padding: 3rem!important + } + .pt-sm-5 { + padding-top: 3rem!important + } + .pr-sm-5 { + padding-right: 3rem!important + } + .pb-sm-5 { + padding-bottom: 3rem!important + } + .pl-sm-5 { + padding-left: 3rem!important + } + .px-sm-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-sm-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-sm-auto { + margin: auto!important + } + .mt-sm-auto { + margin-top: auto!important + } + .mr-sm-auto { + margin-right: auto!important + } + .mb-sm-auto { + margin-bottom: auto!important + } + .ml-sm-auto { + margin-left: auto!important + } + .mx-sm-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-sm-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +@media (min-width:768px) { + .m-md-0 { + margin: 0!important + } + .mt-md-0 { + margin-top: 0!important + } + .mr-md-0 { + margin-right: 0!important + } + .mb-md-0 { + margin-bottom: 0!important + } + .ml-md-0 { + margin-left: 0!important + } + .mx-md-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-md-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-md-1 { + margin: .25rem!important + } + .mt-md-1 { + margin-top: .25rem!important + } + .mr-md-1 { + margin-right: .25rem!important + } + .mb-md-1 { + margin-bottom: .25rem!important + } + .ml-md-1 { + margin-left: .25rem!important + } + .mx-md-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-md-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-md-2 { + margin: .5rem!important + } + .mt-md-2 { + margin-top: .5rem!important + } + .mr-md-2 { + margin-right: .5rem!important + } + .mb-md-2 { + margin-bottom: .5rem!important + } + .ml-md-2 { + margin-left: .5rem!important + } + .mx-md-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-md-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-md-3 { + margin: 1rem!important + } + .mt-md-3 { + margin-top: 1rem!important + } + .mr-md-3 { + margin-right: 1rem!important + } + .mb-md-3 { + margin-bottom: 1rem!important + } + .ml-md-3 { + margin-left: 1rem!important + } + .mx-md-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-md-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-md-4 { + margin: 1.5rem!important + } + .mt-md-4 { + margin-top: 1.5rem!important + } + .mr-md-4 { + margin-right: 1.5rem!important + } + .mb-md-4 { + margin-bottom: 1.5rem!important + } + .ml-md-4 { + margin-left: 1.5rem!important + } + .mx-md-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-md-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-md-5 { + margin: 3rem!important + } + .mt-md-5 { + margin-top: 3rem!important + } + .mr-md-5 { + margin-right: 3rem!important + } + .mb-md-5 { + margin-bottom: 3rem!important + } + .ml-md-5 { + margin-left: 3rem!important + } + .mx-md-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-md-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-md-0 { + padding: 0!important + } + .pt-md-0 { + padding-top: 0!important + } + .pr-md-0 { + padding-right: 0!important + } + .pb-md-0 { + padding-bottom: 0!important + } + .pl-md-0 { + padding-left: 0!important + } + .px-md-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-md-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-md-1 { + padding: .25rem!important + } + .pt-md-1 { + padding-top: .25rem!important + } + .pr-md-1 { + padding-right: .25rem!important + } + .pb-md-1 { + padding-bottom: .25rem!important + } + .pl-md-1 { + padding-left: .25rem!important + } + .px-md-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-md-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-md-2 { + padding: .5rem!important + } + .pt-md-2 { + padding-top: .5rem!important + } + .pr-md-2 { + padding-right: .5rem!important + } + .pb-md-2 { + padding-bottom: .5rem!important + } + .pl-md-2 { + padding-left: .5rem!important + } + .px-md-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-md-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-md-3 { + padding: 1rem!important + } + .pt-md-3 { + padding-top: 1rem!important + } + .pr-md-3 { + padding-right: 1rem!important + } + .pb-md-3 { + padding-bottom: 1rem!important + } + .pl-md-3 { + padding-left: 1rem!important + } + .px-md-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-md-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-md-4 { + padding: 1.5rem!important + } + .pt-md-4 { + padding-top: 1.5rem!important + } + .pr-md-4 { + padding-right: 1.5rem!important + } + .pb-md-4 { + padding-bottom: 1.5rem!important + } + .pl-md-4 { + padding-left: 1.5rem!important + } + .px-md-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-md-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-md-5 { + padding: 3rem!important + } + .pt-md-5 { + padding-top: 3rem!important + } + .pr-md-5 { + padding-right: 3rem!important + } + .pb-md-5 { + padding-bottom: 3rem!important + } + .pl-md-5 { + padding-left: 3rem!important + } + .px-md-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-md-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-md-auto { + margin: auto!important + } + .mt-md-auto { + margin-top: auto!important + } + .mr-md-auto { + margin-right: auto!important + } + .mb-md-auto { + margin-bottom: auto!important + } + .ml-md-auto { + margin-left: auto!important + } + .mx-md-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-md-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +@media (min-width:992px) { + .m-lg-0 { + margin: 0!important + } + .mt-lg-0 { + margin-top: 0!important + } + .mr-lg-0 { + margin-right: 0!important + } + .mb-lg-0 { + margin-bottom: 0!important + } + .ml-lg-0 { + margin-left: 0!important + } + .mx-lg-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-lg-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-lg-1 { + margin: .25rem!important + } + .mt-lg-1 { + margin-top: .25rem!important + } + .mr-lg-1 { + margin-right: .25rem!important + } + .mb-lg-1 { + margin-bottom: .25rem!important + } + .ml-lg-1 { + margin-left: .25rem!important + } + .mx-lg-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-lg-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-lg-2 { + margin: .5rem!important + } + .mt-lg-2 { + margin-top: .5rem!important + } + .mr-lg-2 { + margin-right: .5rem!important + } + .mb-lg-2 { + margin-bottom: .5rem!important + } + .ml-lg-2 { + margin-left: .5rem!important + } + .mx-lg-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-lg-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-lg-3 { + margin: 1rem!important + } + .mt-lg-3 { + margin-top: 1rem!important + } + .mr-lg-3 { + margin-right: 1rem!important + } + .mb-lg-3 { + margin-bottom: 1rem!important + } + .ml-lg-3 { + margin-left: 1rem!important + } + .mx-lg-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-lg-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-lg-4 { + margin: 1.5rem!important + } + .mt-lg-4 { + margin-top: 1.5rem!important + } + .mr-lg-4 { + margin-right: 1.5rem!important + } + .mb-lg-4 { + margin-bottom: 1.5rem!important + } + .ml-lg-4 { + margin-left: 1.5rem!important + } + .mx-lg-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-lg-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-lg-5 { + margin: 3rem!important + } + .mt-lg-5 { + margin-top: 3rem!important + } + .mr-lg-5 { + margin-right: 3rem!important + } + .mb-lg-5 { + margin-bottom: 3rem!important + } + .ml-lg-5 { + margin-left: 3rem!important + } + .mx-lg-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-lg-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-lg-0 { + padding: 0!important + } + .pt-lg-0 { + padding-top: 0!important + } + .pr-lg-0 { + padding-right: 0!important + } + .pb-lg-0 { + padding-bottom: 0!important + } + .pl-lg-0 { + padding-left: 0!important + } + .px-lg-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-lg-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-lg-1 { + padding: .25rem!important + } + .pt-lg-1 { + padding-top: .25rem!important + } + .pr-lg-1 { + padding-right: .25rem!important + } + .pb-lg-1 { + padding-bottom: .25rem!important + } + .pl-lg-1 { + padding-left: .25rem!important + } + .px-lg-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-lg-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-lg-2 { + padding: .5rem!important + } + .pt-lg-2 { + padding-top: .5rem!important + } + .pr-lg-2 { + padding-right: .5rem!important + } + .pb-lg-2 { + padding-bottom: .5rem!important + } + .pl-lg-2 { + padding-left: .5rem!important + } + .px-lg-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-lg-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-lg-3 { + padding: 1rem!important + } + .pt-lg-3 { + padding-top: 1rem!important + } + .pr-lg-3 { + padding-right: 1rem!important + } + .pb-lg-3 { + padding-bottom: 1rem!important + } + .pl-lg-3 { + padding-left: 1rem!important + } + .px-lg-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-lg-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-lg-4 { + padding: 1.5rem!important + } + .pt-lg-4 { + padding-top: 1.5rem!important + } + .pr-lg-4 { + padding-right: 1.5rem!important + } + .pb-lg-4 { + padding-bottom: 1.5rem!important + } + .pl-lg-4 { + padding-left: 1.5rem!important + } + .px-lg-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-lg-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-lg-5 { + padding: 3rem!important + } + .pt-lg-5 { + padding-top: 3rem!important + } + .pr-lg-5 { + padding-right: 3rem!important + } + .pb-lg-5 { + padding-bottom: 3rem!important + } + .pl-lg-5 { + padding-left: 3rem!important + } + .px-lg-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-lg-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-lg-auto { + margin: auto!important + } + .mt-lg-auto { + margin-top: auto!important + } + .mr-lg-auto { + margin-right: auto!important + } + .mb-lg-auto { + margin-bottom: auto!important + } + .ml-lg-auto { + margin-left: auto!important + } + .mx-lg-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-lg-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +@media (min-width:1200px) { + .m-xl-0 { + margin: 0!important + } + .mt-xl-0 { + margin-top: 0!important + } + .mr-xl-0 { + margin-right: 0!important + } + .mb-xl-0 { + margin-bottom: 0!important + } + .ml-xl-0 { + margin-left: 0!important + } + .mx-xl-0 { + margin-right: 0!important; + margin-left: 0!important + } + .my-xl-0 { + margin-top: 0!important; + margin-bottom: 0!important + } + .m-xl-1 { + margin: .25rem!important + } + .mt-xl-1 { + margin-top: .25rem!important + } + .mr-xl-1 { + margin-right: .25rem!important + } + .mb-xl-1 { + margin-bottom: .25rem!important + } + .ml-xl-1 { + margin-left: .25rem!important + } + .mx-xl-1 { + margin-right: .25rem!important; + margin-left: .25rem!important + } + .my-xl-1 { + margin-top: .25rem!important; + margin-bottom: .25rem!important + } + .m-xl-2 { + margin: .5rem!important + } + .mt-xl-2 { + margin-top: .5rem!important + } + .mr-xl-2 { + margin-right: .5rem!important + } + .mb-xl-2 { + margin-bottom: .5rem!important + } + .ml-xl-2 { + margin-left: .5rem!important + } + .mx-xl-2 { + margin-right: .5rem!important; + margin-left: .5rem!important + } + .my-xl-2 { + margin-top: .5rem!important; + margin-bottom: .5rem!important + } + .m-xl-3 { + margin: 1rem!important + } + .mt-xl-3 { + margin-top: 1rem!important + } + .mr-xl-3 { + margin-right: 1rem!important + } + .mb-xl-3 { + margin-bottom: 1rem!important + } + .ml-xl-3 { + margin-left: 1rem!important + } + .mx-xl-3 { + margin-right: 1rem!important; + margin-left: 1rem!important + } + .my-xl-3 { + margin-top: 1rem!important; + margin-bottom: 1rem!important + } + .m-xl-4 { + margin: 1.5rem!important + } + .mt-xl-4 { + margin-top: 1.5rem!important + } + .mr-xl-4 { + margin-right: 1.5rem!important + } + .mb-xl-4 { + margin-bottom: 1.5rem!important + } + .ml-xl-4 { + margin-left: 1.5rem!important + } + .mx-xl-4 { + margin-right: 1.5rem!important; + margin-left: 1.5rem!important + } + .my-xl-4 { + margin-top: 1.5rem!important; + margin-bottom: 1.5rem!important + } + .m-xl-5 { + margin: 3rem!important + } + .mt-xl-5 { + margin-top: 3rem!important + } + .mr-xl-5 { + margin-right: 3rem!important + } + .mb-xl-5 { + margin-bottom: 3rem!important + } + .ml-xl-5 { + margin-left: 3rem!important + } + .mx-xl-5 { + margin-right: 3rem!important; + margin-left: 3rem!important + } + .my-xl-5 { + margin-top: 3rem!important; + margin-bottom: 3rem!important + } + .p-xl-0 { + padding: 0!important + } + .pt-xl-0 { + padding-top: 0!important + } + .pr-xl-0 { + padding-right: 0!important + } + .pb-xl-0 { + padding-bottom: 0!important + } + .pl-xl-0 { + padding-left: 0!important + } + .px-xl-0 { + padding-right: 0!important; + padding-left: 0!important + } + .py-xl-0 { + padding-top: 0!important; + padding-bottom: 0!important + } + .p-xl-1 { + padding: .25rem!important + } + .pt-xl-1 { + padding-top: .25rem!important + } + .pr-xl-1 { + padding-right: .25rem!important + } + .pb-xl-1 { + padding-bottom: .25rem!important + } + .pl-xl-1 { + padding-left: .25rem!important + } + .px-xl-1 { + padding-right: .25rem!important; + padding-left: .25rem!important + } + .py-xl-1 { + padding-top: .25rem!important; + padding-bottom: .25rem!important + } + .p-xl-2 { + padding: .5rem!important + } + .pt-xl-2 { + padding-top: .5rem!important + } + .pr-xl-2 { + padding-right: .5rem!important + } + .pb-xl-2 { + padding-bottom: .5rem!important + } + .pl-xl-2 { + padding-left: .5rem!important + } + .px-xl-2 { + padding-right: .5rem!important; + padding-left: .5rem!important + } + .py-xl-2 { + padding-top: .5rem!important; + padding-bottom: .5rem!important + } + .p-xl-3 { + padding: 1rem!important + } + .pt-xl-3 { + padding-top: 1rem!important + } + .pr-xl-3 { + padding-right: 1rem!important + } + .pb-xl-3 { + padding-bottom: 1rem!important + } + .pl-xl-3 { + padding-left: 1rem!important + } + .px-xl-3 { + padding-right: 1rem!important; + padding-left: 1rem!important + } + .py-xl-3 { + padding-top: 1rem!important; + padding-bottom: 1rem!important + } + .p-xl-4 { + padding: 1.5rem!important + } + .pt-xl-4 { + padding-top: 1.5rem!important + } + .pr-xl-4 { + padding-right: 1.5rem!important + } + .pb-xl-4 { + padding-bottom: 1.5rem!important + } + .pl-xl-4 { + padding-left: 1.5rem!important + } + .px-xl-4 { + padding-right: 1.5rem!important; + padding-left: 1.5rem!important + } + .py-xl-4 { + padding-top: 1.5rem!important; + padding-bottom: 1.5rem!important + } + .p-xl-5 { + padding: 3rem!important + } + .pt-xl-5 { + padding-top: 3rem!important + } + .pr-xl-5 { + padding-right: 3rem!important + } + .pb-xl-5 { + padding-bottom: 3rem!important + } + .pl-xl-5 { + padding-left: 3rem!important + } + .px-xl-5 { + padding-right: 3rem!important; + padding-left: 3rem!important + } + .py-xl-5 { + padding-top: 3rem!important; + padding-bottom: 3rem!important + } + .m-xl-auto { + margin: auto!important + } + .mt-xl-auto { + margin-top: auto!important + } + .mr-xl-auto { + margin-right: auto!important + } + .mb-xl-auto { + margin-bottom: auto!important + } + .ml-xl-auto { + margin-left: auto!important + } + .mx-xl-auto { + margin-right: auto!important; + margin-left: auto!important + } + .my-xl-auto { + margin-top: auto!important; + margin-bottom: auto!important + } +} + +.text-justify { + text-align: justify!important +} + +.text-nowrap { + white-space: nowrap!important +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.text-left { + text-align: left!important +} + +.text-right { + text-align: right!important +} + +.text-center { + text-align: center!important +} + +@media (min-width:576px) { + .text-sm-left { + text-align: left!important + } + .text-sm-right { + text-align: right!important + } + .text-sm-center { + text-align: center!important + } +} + +@media (min-width:768px) { + .text-md-left { + text-align: left!important + } + .text-md-right { + text-align: right!important + } + .text-md-center { + text-align: center!important + } +} + +@media (min-width:992px) { + .text-lg-left { + text-align: left!important + } + .text-lg-right { + text-align: right!important + } + .text-lg-center { + text-align: center!important + } +} + +@media (min-width:1200px) { + .text-xl-left { + text-align: left!important + } + .text-xl-right { + text-align: right!important + } + .text-xl-center { + text-align: center!important + } +} + +.text-lowercase { + text-transform: lowercase!important +} + +.text-uppercase { + text-transform: uppercase!important +} + +.text-capitalize { + text-transform: capitalize!important +} + +.font-weight-normal { + font-weight: 400 +} + +.font-weight-bold { + font-weight: 700 +} + +.font-italic { + font-style: italic +} + +.text-white { + color: #fff!important +} + +.text-primary { + color: #007bff!important +} + +a.text-primary:focus, +a.text-primary:hover { + color: #0062cc!important +} + +.text-secondary { + color: #868e96!important +} + +a.text-secondary:focus, +a.text-secondary:hover { + color: #6c757d!important +} + +.text-success { + color: #28a745!important +} + +a.text-success:focus, +a.text-success:hover { + color: #1e7e34!important +} + +.text-info { + color: #17a2b8!important +} + +a.text-info:focus, +a.text-info:hover { + color: #117a8b!important +} + +.text-warning { + color: #ffc107!important +} + +a.text-warning:focus, +a.text-warning:hover { + color: #d39e00!important +} + +.text-danger { + color: #dc3545!important +} + +a.text-danger:focus, +a.text-danger:hover { + color: #bd2130!important +} + +.text-light { + color: #f8f9fa!important +} + +a.text-light:focus, +a.text-light:hover { + color: #dae0e5!important +} + +.text-dark { + color: #343a40!important +} + +a.text-dark:focus, +a.text-dark:hover { + color: #1d2124!important +} + +.text-muted { + color: #868e96!important +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0 +} + +.visible { + visibility: visible!important +} + +.invisible { + visibility: hidden!important +} + +h4.modal-title { + margin:0 +} +/*# sourceMappingURL=bootstrap4.min.css.map */ \ No newline at end of file diff --git a/web/libs/css/main.dash2.css b/web/libs/css/main.dash2.css index 10da0f5..d210341 100644 --- a/web/libs/css/main.dash2.css +++ b/web/libs/css/main.dash2.css @@ -65,11 +65,13 @@ nav h4{cursor:default;font-size:95%;padding:16px 40px;font-weight:100;text-trans .m-b{margin-bottom:10px} .m-t{margin-top:10px} .m-l{margin-left:10px} +.overflow-hidden{overflow: hidden!important} .list-inline{list-style:none} .list-inline li{display:inline-block;vertical-align: top;margin:0;} .truncate{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;} img{max-width:100%} .display-table{display:table;width:100%} +.display-inline{display:inline-block} .display-table-cell{display:table-cell} .small{font-size:80%} .super-center{position:absolute;left:0;top:0;right:0;bottom:0;margin:auto;width: 4em;height: 1em;} @@ -80,6 +82,13 @@ img{max-width:100%} .nodata .divider{margin:5px 0} .loading .divider{margin:5px 0} +#accbtn{ + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + padding: 0; +} + .monitor_item .stream-hud{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:2} .monitor_item .stream-hud .controls{position:absolute;top:10px;left:10px;} .monitor_item .stream-hud:hover{opacity:1} @@ -90,12 +99,13 @@ img{max-width:100%} .monitor_item[mode="Watch Only"] .stream-hud .lamp{color:#5da8e8} .monitor_item[mode="Idle"] .stream-hud .lamp{color:#fff} .monitor_item[mode="Record"] .stream-hud .lamp{color:#d9534f} -/*.monitor_item .data-menu{max-height:700px}*/ -.monitor_item .data-menu:not(:last-child){border-right:1px solid #fff;} -.monitor_item .data-menu.logs{list-style:none;} +/*.data-menu{max-height:700px}*/ +.data-menu:not(:last-child){border-right:1px solid #fff;} +.data-menu.logs{list-style:none;} .monitor_item .motionVision{display:none} -.monitor_item .grid-stack-item-content{width:100%!important;left:0;right:0} +.monitor_item .grid-stack-item-content{width:100%!important;left:0!important;right:0!important} +.monitor_item .ui-resizable-se {bottom: 10px!important;} .monitor_item .stream-block{position: relative;text-align: center} .monitor_item .mdl-data_window{overflow-x: auto;background:rgba(0,0,0,0.7);color:#fff;height:100%} .monitor_item .mdl-data_window:not(.col-md-6){width:0;min-width:0;height:0px;min-height:0} @@ -107,7 +117,7 @@ img{max-width:100%} .monitor_item{position:relative;padding:0;} .monitor_item{transition:none;} .monitor_item .mdl-card{min-height:auto;border:1px solid #272727;border-radius:0px;overflow:hidden} -.monitor_item .mdl-card__media{position:relative;padding:0!important;display:block!important;background:#000;min-height:250px;} +.monitor_item .mdl-card__media{position:relative;padding:0!important;display:block!important;background:#000;} .monitor_item.selected .stream-element{height:600px} .monitor_item.selected .fa-expand:before{content:"\f066"} .monitor_item .mdl-card__supporting-text{background:#222;color:#fff!important;display:block;min-height:auto!important} @@ -713,4 +723,10 @@ ul.msg_list li .message { .marc-toggle label:active:after { width: 10px; +} + +/*hexagon pattern*/ +.bg-hexagon { + background-color: #054e9f; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='49' viewBox='0 0 28 49'%3E%3Cg fill-rule='evenodd'%3E%3Cg id='hexagons' fill='%23fdfdfd' fill-opacity='0.4' fill-rule='nonzero'%3E%3Cpath d='M13.99 9.25l13 7.5v15l-13 7.5L1 31.75v-15l12.99-7.5zM3 17.9v12.7l10.99 6.34 11-6.35V17.9l-11-6.34L3 17.9zM0 15l12.98-7.5V0h-2v6.35L0 12.69v2.3zm0 18.5L12.98 41v8h-2v-6.85L0 35.81v-2.3zM15 0v7.5L27.99 15H28v-2.31h-.01L17 6.35V0h-2zm0 49v-8l12.99-7.5H28v2.31h-.01L17 42.15V49h-2z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); } \ No newline at end of file diff --git a/web/libs/css/now-ui-kit.css b/web/libs/css/now-ui-kit.css new file mode 100644 index 0000000..4036ed5 --- /dev/null +++ b/web/libs/css/now-ui-kit.css @@ -0,0 +1,7545 @@ +/*! + + ========================================================= + * Now-ui-kit - v1.1.0 + ========================================================= + + * Product Page: http://www.creative-tim.com/product/now-ui-kit + * Copyright 2017 Creative Tim (http://www.creative-tim.com) + * Licensed under MIT (https://github.com/creativetimofficial/now-ui-kit/blob/master/LICENSE.md) + + * Designed by www.invisionapp.com Coded by www.creative-tim.com + + ========================================================= + + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + */ + + +/* brand Colors */ + + +/* light colors */ + + +/* ======================================================================== + * bootstrap-switch - v3.3.2 + * http://www.bootstrap-switch.org + * ======================================================================== + * Copyright 2012-2013 Mattia Larentis + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +.bootstrap-switch { + display: inline-block; + direction: ltr; + cursor: pointer; + border-radius: 30px; + border: 0; + position: relative; + text-align: left; + margin-bottom: 10px; + line-height: 8px; + width: 59px !important; + height: 22px; + outline: none; + z-index: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: middle; + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + margin-right: 20px; + background: rgba(44, 44, 44, 0.2); +} + +.bootstrap-switch .bootstrap-switch-container { + display: inline-flex; + top: 0; + height: 22px; + border-radius: 4px; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + width: 100px !important; +} + +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off, +.bootstrap-switch .bootstrap-switch-label { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; + display: inline-block !important; + height: 100%; + color: #fff; + padding: 6px 12px; + font-size: 11px; + text-indent: -5px; + line-height: 15px; + -webkit-transition: 0.25s ease-out; + transition: 0.25s ease-out; +} + +.bootstrap-switch .bootstrap-switch-handle-on, +.bootstrap-switch .bootstrap-switch-handle-off { + text-align: center; + z-index: 1; + float: left; + line-height: 11px; + width: 50% !important; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-brown, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-brown { + color: #fff; + background: #f96332; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-blue, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-blue { + color: #fff; + background: #2CA8FF; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-green, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-green { + color: #fff; + background: #18ce0f; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-orange, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-orange { + background: #FFB236; + color: #fff; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-red, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-red { + color: #fff; + background: #FF3636; +} + +.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default, +.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default { + color: #fff; +} + +.bootstrap-switch .bootstrap-switch-label { + text-align: center; + z-index: 100; + color: #333333; + background: #ffffff; + width: 22px !important; + height: 22px !important; + margin: 0px -11px; + border-radius: 20px; + position: absolute; + float: left; + top: 0; + left: 50%; + padding: 0; + box-shadow: 0 1px 11px rgba(0, 0, 0, 0.25); +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label { + background-color: rgba(23, 23, 23, 0.4); +} + +.bootstrap-switch.bootstrap-switch-on:hover .bootstrap-switch-label { + width: 27px !important; + margin-left: -16px; +} + +.bootstrap-switch.bootstrap-switch-off:hover .bootstrap-switch-label { + width: 27px !important; + margin-left: -11px; +} + +.bootstrap-switch .bootstrap-switch-handle-on { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.bootstrap-switch .bootstrap-switch-handle-off { + text-indent: 6px; +} + +.bootstrap-switch input[type='radio'], +.bootstrap-switch input[type='checkbox'] { + position: absolute !important; + top: 0; + left: 0; + opacity: 0; + filter: alpha(opacity=0); + z-index: -1; +} + +.bootstrap-switch input[type='radio'].form-control, +.bootstrap-switch input[type='checkbox'].form-control { + height: auto; +} + +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; +} + +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} + +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label { + padding: 6px 16px; + font-size: 18px; + line-height: 1.33; +} + +.bootstrap-switch.bootstrap-switch-disabled, +.bootstrap-switch.bootstrap-switch-readonly, +.bootstrap-switch.bootstrap-switch-indeterminate { + cursor: default !important; +} + +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off, +.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label, +.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label { + opacity: 0.5; + filter: alpha(opacity=50); + cursor: default !important; +} + +.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container { + -webkit-transition: margin-left 0.5s; + transition: margin-left 0.5s; +} + +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; +} + +.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-container { + margin-left: -2px !important; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-container { + margin-left: -39px !important; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label:before { + background-color: #FFFFFF; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-red~.bootstrap-switch-default { + background-color: #FF3636; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-orange~.bootstrap-switch-default { + background-color: #FFB236; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-green~.bootstrap-switch-default { + background-color: #18ce0f; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-brown~.bootstrap-switch-default { + background-color: #f96332; +} + +.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-blue~.bootstrap-switch-default { + background-color: #2CA8FF; +} + +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-red, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-brown, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-blue, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-orange, +.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-green { + background-color: #E3E3E3; +} + +.bootstrap-switch-off .bootstrap-switch-handle-on { + opacity: 0; +} + +.bootstrap-switch-on .bootstrap-switch-handle-off { + opacity: 0; +} + + +/*! nouislider - 9.1.0 - 2016-12-10 16:00:32 */ + + +/* Functional styling; + * These styles are required for noUiSlider to function. + * You don't need to change these rules to apply your design. + */ + +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -webkit-tap-highlight-color: transparent; + -webkit-user-select: none; + -ms-touch-action: none; + touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.noUi-target { + position: relative; + direction: ltr; +} + +.noUi-base { + width: 100%; + height: 100%; + position: relative; + z-index: 1; + /* Fix 401 */ +} + +.noUi-connect { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} + +.noUi-origin { + position: absolute; + height: 0; + width: 0; +} + +.noUi-handle { + position: relative; + z-index: 1; +} + +.noUi-state-tap .noUi-connect, +.noUi-state-tap .noUi-origin { + -webkit-transition: top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; + transition: top 0.3s, right 0.3s, bottom 0.3s, left 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + + +/* Painting and performance; + * Browsers can paint handles in their own layer. + */ + +.noUi-base, +.noUi-handle { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + + +/* Slider size and handle placement; + */ + +.noUi-horizontal { + height: 1px; +} + +.noUi-horizontal .noUi-handle { + border-radius: 50%; + background-color: #FFFFFF; + box-shadow: 0 1px 13px 0 rgba(0, 0, 0, 0.2); + height: 15px; + width: 15px; + cursor: pointer; + margin-left: -10px; + margin-top: -7px; +} + +.noUi-vertical { + width: 18px; +} + +.noUi-vertical .noUi-handle { + width: 28px; + height: 34px; + left: -6px; + top: -17px; +} + + +/* Styling; + */ + +.noUi-target { + background-color: rgba(182, 182, 182, 0.3); + border-radius: 3px; +} + +.noUi-connect { + background: #888; + border-radius: 3px; + -webkit-transition: background 450ms; + transition: background 450ms; +} + + +/* Handles and cursors; + */ + +.noUi-draggable { + cursor: ew-resize; +} + +.noUi-vertical .noUi-draggable { + cursor: ns-resize; +} + +.noUi-handle { + border-radius: 3px; + background: #FFF; + cursor: default; + box-shadow: inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB; + -webkit-transition: 300ms ease 0s; + -moz-transition: 300ms ease 0s; + -ms-transition: 300ms ease 0s; + -o-transform: 300ms ease 0s; + transition: 300ms ease 0s; +} + +.noUi-active { + -webkit-transform: scale3d(1.5, 1.5, 1); + -moz-transform: scale3d(1.5, 1.5, 1); + -ms-transform: scale3d(1.5, 1.5, 1); + -o-transform: scale3d(1.5, 1.5, 1); + transform: scale3d(1.5, 1.5, 1); +} + + +/* Disabled state; + */ + +[disabled] .noUi-connect { + background: #B8B8B8; +} + +[disabled].noUi-target, +[disabled].noUi-handle, +[disabled] .noUi-handle { + cursor: not-allowed; +} + + +/* Base; + * + */ + +.noUi-pips, +.noUi-pips * { + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.noUi-pips { + position: absolute; + color: #999; +} + + +/* Values; + * + */ + +.noUi-value { + position: absolute; + text-align: center; +} + +.noUi-value-sub { + color: #ccc; + font-size: 10px; +} + + +/* Markings; + * + */ + +.noUi-marker { + position: absolute; + background: #CCC; +} + +.noUi-marker-sub { + background: #AAA; +} + +.noUi-marker-large { + background: #AAA; +} + + +/* Horizontal layout; + * + */ + +.noUi-pips-horizontal { + padding: 10px 0; + height: 80px; + top: 100%; + left: 0; + width: 100%; +} + +.noUi-value-horizontal { + -webkit-transform: translate3d(-50%, 50%, 0); + transform: translate3d(-50%, 50%, 0); +} + +.noUi-marker-horizontal.noUi-marker { + margin-left: -1px; + width: 2px; + height: 5px; +} + +.noUi-marker-horizontal.noUi-marker-sub { + height: 10px; +} + +.noUi-marker-horizontal.noUi-marker-large { + height: 15px; +} + + +/* Vertical layout; + * + */ + +.noUi-pips-vertical { + padding: 0 10px; + height: 100%; + top: 0; + left: 100%; +} + +.noUi-value-vertical { + -webkit-transform: translate3d(0, 50%, 0); + transform: translate3d(0, 50%, 0); + padding-left: 25px; +} + +.noUi-marker-vertical.noUi-marker { + width: 5px; + height: 2px; + margin-top: -1px; +} + +.noUi-marker-vertical.noUi-marker-sub { + width: 10px; +} + +.noUi-marker-vertical.noUi-marker-large { + width: 15px; +} + +.noUi-tooltip { + display: block; + position: absolute; + border: 1px solid #D9D9D9; + border-radius: 3px; + background: #fff; + color: #000; + padding: 5px; + text-align: center; +} + +.noUi-horizontal .noUi-tooltip { + -webkit-transform: translate(-50%, 0); + transform: translate(-50%, 0); + left: 50%; + bottom: 120%; +} + +.noUi-vertical .noUi-tooltip { + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); + top: 50%; + right: 120%; +} + +.slider.slider-neutral .noUi-connect, +.slider.slider-neutral.noUi-connect { + background-color: #FFFFFF; +} + +.slider.slider-neutral.noUi-target { + background-color: rgba(255, 255, 255, 0.3); +} + +.slider.slider-neutral .noUi-handle { + background-color: #FFFFFF; +} + +.slider.slider-primary .noUi-connect, +.slider.slider-primary.noUi-connect { + background-color: #f96332; +} + +.slider.slider-primary.noUi-target { + background-color: rgba(249, 99, 50, 0.3); +} + +.slider.slider-primary .noUi-handle { + background-color: #f96332; +} + +.slider.slider-info .noUi-connect, +.slider.slider-info.noUi-connect { + background-color: #2CA8FF; +} + +.slider.slider-info.noUi-target { + background-color: rgba(44, 168, 255, 0.3); +} + +.slider.slider-info .noUi-handle { + background-color: #2CA8FF; +} + +.slider.slider-success .noUi-connect, +.slider.slider-success.noUi-connect { + background-color: #18ce0f; +} + +.slider.slider-success.noUi-target { + background-color: rgba(24, 206, 15, 0.3); +} + +.slider.slider-success .noUi-handle { + background-color: #18ce0f; +} + +.slider.slider-warning .noUi-connect, +.slider.slider-warning.noUi-connect { + background-color: #FFB236; +} + +.slider.slider-warning.noUi-target { + background-color: rgba(255, 178, 54, 0.3); +} + +.slider.slider-warning .noUi-handle { + background-color: #FFB236; +} + +.slider.slider-danger .noUi-connect, +.slider.slider-danger.noUi-connect { + background-color: #FF3636; +} + +.slider.slider-danger.noUi-target { + background-color: rgba(255, 54, 54, 0.3); +} + +.slider.slider-danger .noUi-handle { + background-color: #FF3636; +} + + +/*! + * Datepicker for Bootstrap v1.7.0-dev (https://github.com/uxsolutions/bootstrap-datepicker) + * + * Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0) + */ + +.datepicker { + padding: 8px 6px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + direction: ltr; + -webkit-transform: translate3d(0, -40px, 0); + -moz-transform: translate3d(0, -40px, 0); + -o-transform: translate3d(0, -40px, 0); + -ms-transform: translate3d(0, -40px, 0); + transform: translate3d(0, -40px, 0); + transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s, opacity 0.3s ease 0s, height 0s linear 0.35s; + opacity: 0; + filter: alpha(opacity=0); + visibility: hidden; + display: block; + width: 254px; + max-width: 254px; +} + +.datepicker.dropdown-menu:before { + display: none; +} + +.datepicker.datepicker-primary { + background-color: #f96332; +} + +.datepicker.datepicker-primary th, +.datepicker.datepicker-primary .day div, +.datepicker.datepicker-primary table tr td span { + color: #FFFFFF; +} + +.datepicker.datepicker-primary:after { + border-bottom-color: #f96332; +} + +.datepicker.datepicker-primary.datepicker-orient-top:after { + border-top-color: #f96332; +} + +.datepicker.datepicker-primary .dow { + color: rgba(255, 255, 255, 0.8); +} + +.datepicker.datepicker-primary table tr td.old div, +.datepicker.datepicker-primary table tr td.new div, +.datepicker.datepicker-primary table tr td span.old, +.datepicker.datepicker-primary table tr td span.new { + color: rgba(255, 255, 255, 0.4); +} + +.datepicker.datepicker-primary table tr td span:hover, +.datepicker.datepicker-primary table tr td span.focused { + background: rgba(255, 255, 255, 0.1); +} + +.datepicker.datepicker-primary .datepicker-switch:hover, +.datepicker.datepicker-primary .prev:hover, +.datepicker.datepicker-primary .next:hover, +.datepicker.datepicker-primary tfoot tr th:hover { + background: rgba(255, 255, 255, 0.2); +} + +.datepicker.datepicker-primary table tr td.active div, +.datepicker.datepicker-primary table tr td.active:hover div, +.datepicker.datepicker-primary table tr td.active.disabled div, +.datepicker.datepicker-primary table tr td.active.disabled:hover div { + background-color: #FFFFFF; + color: #f96332; +} + +.datepicker.datepicker-primary table tr td.day:hover div, +.datepicker.datepicker-primary table tr td.day.focused div { + background: rgba(255, 255, 255, 0.2); +} + +.datepicker.datepicker-primary table tr td.active:hover div, +.datepicker.datepicker-primary table tr td.active:hover:hover div, +.datepicker.datepicker-primary table tr td.active.disabled:hover div, +.datepicker.datepicker-primary table tr td.active.disabled:hover:hover div, +.datepicker.datepicker-primary table tr td.active:active div, +.datepicker.datepicker-primary table tr td.active:hover:active div, +.datepicker.datepicker-primary table tr td.active.disabled:active div, +.datepicker.datepicker-primary table tr td.active.disabled:hover:active div, +.datepicker.datepicker-primary table tr td.active.active div, +.datepicker.datepicker-primary table tr td.active:hover.active div, +.datepicker.datepicker-primary table tr td.active.disabled.active div, +.datepicker.datepicker-primary table tr td.active.disabled:hover.active div, +.datepicker.datepicker-primary table tr td.active.disabled div, +.datepicker.datepicker-primary table tr td.active:hover.disabled div, +.datepicker.datepicker-primary table tr td.active.disabled.disabled div, +.datepicker.datepicker-primary table tr td.active.disabled:hover.disabled div, +.datepicker.datepicker-primary table tr td.active[disabled] div, +.datepicker.datepicker-primary table tr td.active:hover[disabled] div, +.datepicker.datepicker-primary table tr td.active.disabled[disabled] div, +.datepicker.datepicker-primary table tr td.active.disabled:hover[disabled] div, +.datepicker.datepicker-primary table tr td span.active:hover, +.datepicker.datepicker-primary table tr td span.active:hover:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:hover, +.datepicker.datepicker-primary table tr td span.active:active, +.datepicker.datepicker-primary table tr td span.active:hover:active, +.datepicker.datepicker-primary table tr td span.active.disabled:active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:active, +.datepicker.datepicker-primary table tr td span.active.active, +.datepicker.datepicker-primary table tr td span.active:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled.active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled, +.datepicker.datepicker-primary table tr td span.active:hover.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.disabled, +.datepicker.datepicker-primary table tr td span.active[disabled], +.datepicker.datepicker-primary table tr td span.active:hover[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled:hover[disabled] { + background-color: #FFFFFF; +} + +.datepicker.datepicker-primary table tr td span.active:hover, +.datepicker.datepicker-primary table tr td span.active:hover:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:hover, +.datepicker.datepicker-primary table tr td span.active:active, +.datepicker.datepicker-primary table tr td span.active:hover:active, +.datepicker.datepicker-primary table tr td span.active.disabled:active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover:active, +.datepicker.datepicker-primary table tr td span.active.active, +.datepicker.datepicker-primary table tr td span.active:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled.active, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.active, +.datepicker.datepicker-primary table tr td span.active.disabled, +.datepicker.datepicker-primary table tr td span.active:hover.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled.disabled, +.datepicker.datepicker-primary table tr td span.active.disabled:hover.disabled, +.datepicker.datepicker-primary table tr td span.active[disabled], +.datepicker.datepicker-primary table tr td span.active:hover[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled[disabled], +.datepicker.datepicker-primary table tr td span.active.disabled:hover[disabled] { + color: #f96332; +} + +.datepicker-inline { + width: 220px; +} + +.datepicker.datepicker-rtl { + direction: rtl; +} + +.datepicker.datepicker-rtl.dropdown-menu { + left: auto; +} + +.datepicker.datepicker-rtl table tr td span { + float: right; +} + +.datepicker-dropdown { + top: 0; + left: 0; +} + +.datepicker-dropdown:before { + content: ''; + display: inline-block; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 7px solid transparent; + border-top: 0; + border-bottom-color: rgba(0, 0, 0, 0.2); + position: absolute; +} + +.datepicker-dropdown:after { + content: ''; + display: inline-block; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 6px solid #fff; + border-top: 0; + position: absolute; +} + +.datepicker-dropdown.datepicker-orient-left:before { + left: 6px; +} + +.datepicker-dropdown.datepicker-orient-left:after { + left: 7px; +} + +.datepicker-dropdown.datepicker-orient-right:before { + right: 6px; +} + +.datepicker-dropdown.datepicker-orient-right:after { + right: 7px; +} + +.datepicker-dropdown.datepicker-orient-bottom:before { + top: -7px; +} + +.datepicker-dropdown.datepicker-orient-bottom:after { + top: -6px; +} + +.datepicker-dropdown.datepicker-orient-top:before { + bottom: -7px; + border-bottom: 0; + border-top: 7px solid transparent; +} + +.datepicker-dropdown.datepicker-orient-top:after { + bottom: -6px; + border-bottom: 0; + border-top: 6px solid #fff; +} + +.datepicker table { + margin: 0; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + width: 241px; + max-width: 241px; +} + +.datepicker .day div, +.datepicker th { + -webkit-transition: all 300ms ease 0s; + -moz-transition: all 300ms ease 0s; + -o-transition: all 300ms ease 0s; + -ms-transition: all 300ms ease 0s; + transition: all 300ms ease 0s; + text-align: center; + width: 30px; + height: 30px; + line-height: 2.2; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 50%; + font-weight: 300; + font-size: 14px; + border: none; + position: relative; + cursor: pointer; +} + +.datepicker th { + color: #f96332; +} + +.table-condensed>tbody>tr>td, +.table-condensed>tbody>tr>th, +.table-condensed>tfoot>tr>td, +.table-condensed>tfoot>tr>th, +.table-condensed>thead>tr>td, +.table-condensed>thead>tr>th { + padding: 2px; + text-align: center; + cursor: pointer; +} + +.table-striped .datepicker table tr td, +.table-striped .datepicker table tr th { + background-color: transparent; +} + +.datepicker table tr td.day:hover div, +.datepicker table tr td.day.focused div { + background: #eee; + cursor: pointer; +} + +.datepicker table tr td.old, +.datepicker table tr td.new { + color: #888; +} + +.datepicker table tr td.disabled, +.datepicker table tr td.disabled:hover { + background: none; + color: #888; + cursor: default; +} + +.datepicker table tr td.highlighted { + background: #d9edf7; + border-radius: 0; +} + +.datepicker table tr td.today, +.datepicker table tr td.today:hover, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today.disabled:hover { + background-color: #fde19a; + background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a)); + background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a); + background-image: linear-gradient(to bottom, #fdd49a, #fdf59a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0); + border-color: #fdf59a #fdf59a #fbed50; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #000; +} + +.datepicker table tr td.today:hover, +.datepicker table tr td.today:hover:hover, +.datepicker table tr td.today.disabled:hover, +.datepicker table tr td.today.disabled:hover:hover, +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active, +.datepicker table tr td.today.disabled, +.datepicker table tr td.today:hover.disabled, +.datepicker table tr td.today.disabled.disabled, +.datepicker table tr td.today.disabled:hover.disabled, +.datepicker table tr td.today[disabled], +.datepicker table tr td.today:hover[disabled], +.datepicker table tr td.today.disabled[disabled], +.datepicker table tr td.today.disabled:hover[disabled] { + background-color: #fdf59a; +} + +.datepicker table tr td.today:active, +.datepicker table tr td.today:hover:active, +.datepicker table tr td.today.disabled:active, +.datepicker table tr td.today.disabled:hover:active, +.datepicker table tr td.today.active, +.datepicker table tr td.today:hover.active, +.datepicker table tr td.today.disabled.active, +.datepicker table tr td.today.disabled:hover.active { + background-color: #fbf069 \9; +} + +.datepicker table tr td.today:hover:hover { + color: #000; +} + +.datepicker table tr td.today.active:hover { + color: #fff; +} + +.datepicker table tr td.range, +.datepicker table tr td.range:hover, +.datepicker table tr td.range.disabled, +.datepicker table tr td.range.disabled:hover { + background: #eee; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.datepicker table tr td.range.today, +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today.disabled:hover { + background-color: #f3d17a; + background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a)); + background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a); + background-image: linear-gradient(to bottom, #f3c17a, #f3e97a); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0); + border-color: #f3e97a #f3e97a #edde34; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.datepicker table tr td.range.today:hover, +.datepicker table tr td.range.today:hover:hover, +.datepicker table tr td.range.today.disabled:hover, +.datepicker table tr td.range.today.disabled:hover:hover, +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active, +.datepicker table tr td.range.today.disabled, +.datepicker table tr td.range.today:hover.disabled, +.datepicker table tr td.range.today.disabled.disabled, +.datepicker table tr td.range.today.disabled:hover.disabled, +.datepicker table tr td.range.today[disabled], +.datepicker table tr td.range.today:hover[disabled], +.datepicker table tr td.range.today.disabled[disabled], +.datepicker table tr td.range.today.disabled:hover[disabled] { + background-color: #f3e97a; +} + +.datepicker table tr td.range.today:active, +.datepicker table tr td.range.today:hover:active, +.datepicker table tr td.range.today.disabled:active, +.datepicker table tr td.range.today.disabled:hover:active, +.datepicker table tr td.range.today.active, +.datepicker table tr td.range.today:hover.active, +.datepicker table tr td.range.today.disabled.active, +.datepicker table tr td.range.today.disabled:hover.active { + background-color: #efe24b \9; +} + +.datepicker table tr td.selected, +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected.disabled:hover { + background-color: #9e9e9e; + background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080)); + background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080); + background-image: linear-gradient(to bottom, #b3b3b3, #808080); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0); + border-color: #808080 #808080 #595959; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.datepicker table tr td.selected:hover, +.datepicker table tr td.selected:hover:hover, +.datepicker table tr td.selected.disabled:hover, +.datepicker table tr td.selected.disabled:hover:hover, +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active, +.datepicker table tr td.selected.disabled, +.datepicker table tr td.selected:hover.disabled, +.datepicker table tr td.selected.disabled.disabled, +.datepicker table tr td.selected.disabled:hover.disabled, +.datepicker table tr td.selected[disabled], +.datepicker table tr td.selected:hover[disabled], +.datepicker table tr td.selected.disabled[disabled], +.datepicker table tr td.selected.disabled:hover[disabled] { + background-color: #808080; +} + +.datepicker table tr td.selected:active, +.datepicker table tr td.selected:hover:active, +.datepicker table tr td.selected.disabled:active, +.datepicker table tr td.selected.disabled:hover:active, +.datepicker table tr td.selected.active, +.datepicker table tr td.selected:hover.active, +.datepicker table tr td.selected.disabled.active, +.datepicker table tr td.selected.disabled:hover.active { + background-color: #666666 \9; +} + +.datepicker table tr td.active div, +.datepicker table tr td.active:hover div, +.datepicker table tr td.active.disabled div, +.datepicker table tr td.active.disabled:hover div { + background-color: #f96332; + color: #FFFFFF; + box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2); +} + +.datepicker table tr td.active:hover div, +.datepicker table tr td.active:hover:hover div, +.datepicker table tr td.active.disabled:hover div, +.datepicker table tr td.active.disabled:hover:hover div, +.datepicker table tr td.active:active div, +.datepicker table tr td.active:hover:active div, +.datepicker table tr td.active.disabled:active div, +.datepicker table tr td.active.disabled:hover:active div, +.datepicker table tr td.active.active div, +.datepicker table tr td.active:hover.active div, +.datepicker table tr td.active.disabled.active div, +.datepicker table tr td.active.disabled:hover.active div, +.datepicker table tr td.active.disabled div, +.datepicker table tr td.active:hover.disabled div, +.datepicker table tr td.active.disabled.disabled div, +.datepicker table tr td.active.disabled:hover.disabled div, +.datepicker table tr td.active[disabled] div, +.datepicker table tr td.active:hover[disabled] div, +.datepicker table tr td.active.disabled[disabled] div, +.datepicker table tr td.active.disabled:hover[disabled] div { + background-color: #f96332; +} + +.datepicker table tr td.active:active, +.datepicker table tr td.active:hover:active, +.datepicker table tr td.active.disabled:active, +.datepicker table tr td.active.disabled:hover:active, +.datepicker table tr td.active.active, +.datepicker table tr td.active:hover.active, +.datepicker table tr td.active.disabled.active, +.datepicker table tr td.active.disabled:hover.active { + background-color: #003399 \9; +} + +.datepicker table tr td span { + display: block; + width: 41px; + height: 41px; + line-height: 41px; + float: left; + margin: 1%; + font-size: 14px; + cursor: pointer; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; +} + +.datepicker table tr td span:hover, +.datepicker table tr td span.focused { + background: #eee; +} + +.datepicker table tr td span.disabled, +.datepicker table tr td span.disabled:hover { + background: none; + color: #888; + cursor: default; +} + +.datepicker table tr td span.active, +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active.disabled:hover { + color: #fff; + background-color: #f96332; +} + +.datepicker table tr td span.active:hover, +.datepicker table tr td span.active:hover:hover, +.datepicker table tr td span.active.disabled:hover, +.datepicker table tr td span.active.disabled:hover:hover, +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active, +.datepicker table tr td span.active.disabled, +.datepicker table tr td span.active:hover.disabled, +.datepicker table tr td span.active.disabled.disabled, +.datepicker table tr td span.active.disabled:hover.disabled, +.datepicker table tr td span.active[disabled], +.datepicker table tr td span.active:hover[disabled], +.datepicker table tr td span.active.disabled[disabled], +.datepicker table tr td span.active.disabled:hover[disabled] { + background-color: #f96332; + box-shadow: 0px 1px 10px 0px rgba(0, 0, 0, 0.2); +} + +.datepicker table tr td span.active:active, +.datepicker table tr td span.active:hover:active, +.datepicker table tr td span.active.disabled:active, +.datepicker table tr td span.active.disabled:hover:active, +.datepicker table tr td span.active.active, +.datepicker table tr td span.active:hover.active, +.datepicker table tr td span.active.disabled.active, +.datepicker table tr td span.active.disabled:hover.active { + background-color: #003399 \9; +} + +.datepicker table tr td span.old, +.datepicker table tr td span.new { + color: #888; +} + +.datepicker .datepicker-switch { + width: auto; + border-radius: 0.1875rem; +} + +.datepicker .datepicker-switch, +.datepicker .prev, +.datepicker .next, +.datepicker tfoot tr th { + cursor: pointer; +} + +.datepicker .prev, +.datepicker .next { + width: 35px; + height: 35px; +} + +.datepicker i { + position: relative; + top: 2px; +} + +.datepicker .prev i { + left: -1px; +} + +.datepicker .next i { + right: -1px; +} + +.datepicker .datepicker-switch:hover, +.datepicker .prev:hover, +.datepicker .next:hover, +.datepicker tfoot tr th:hover { + background: #eee; +} + +.datepicker .prev.disabled, +.datepicker .next.disabled { + visibility: hidden; +} + +.datepicker .cw { + font-size: 10px; + width: 12px; + padding: 0 2px 0 5px; + vertical-align: middle; +} + +.input-append.date .add-on, +.input-prepend.date .add-on { + cursor: pointer; +} + +.input-append.date .add-on i, +.input-prepend.date .add-on i { + margin-top: 3px; +} + +.input-daterange input { + text-align: center; +} + +.input-daterange input:first-child { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-daterange input:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.input-daterange .add-on { + display: inline-block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + text-align: center; + text-shadow: 0 1px 0 #fff; + vertical-align: middle; + background-color: #eee; + border: 1px solid #ccc; + margin-left: -5px; + margin-right: -5px; +} + +.btn, +.navbar .navbar-nav>a.btn { + border-width: 2px; + font-weight: 400; + font-size: 0.8571em; + line-height: 1.35em; + margin: 5px 1px; + border: none; + border-radius: 0.1875rem; + padding: 11px 22px; + cursor: pointer; + background-color: #888; + color: #FFFFFF; +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn:active:focus, +.btn:active:hover, +.btn.active:focus, +.btn.active:hover, +.show>.btn.dropdown-toggle, +.show>.btn.dropdown-toggle:focus, +.show>.btn.dropdown-toggle:hover, +.navbar .navbar-nav>a.btn:hover, +.navbar .navbar-nav>a.btn:focus, +.navbar .navbar-nav>a.btn:active, +.navbar .navbar-nav>a.btn.active, +.navbar .navbar-nav>a.btn:active:focus, +.navbar .navbar-nav>a.btn:active:hover, +.navbar .navbar-nav>a.btn.active:focus, +.navbar .navbar-nav>a.btn.active:hover, +.show>.navbar .navbar-nav>a.btn.dropdown-toggle, +.show>.navbar .navbar-nav>a.btn.dropdown-toggle:focus, +.show>.navbar .navbar-nav>a.btn.dropdown-toggle:hover { + background-color: #979797; + color: #FFFFFF; + box-shadow: none; +} + +.btn:hover, +.navbar .navbar-nav>a.btn:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn.disabled, +.btn.disabled:hover, +.btn.disabled:focus, +.btn.disabled.focus, +.btn.disabled:active, +.btn.disabled.active, +.btn:disabled, +.btn:disabled:hover, +.btn:disabled:focus, +.btn:disabled.focus, +.btn:disabled:active, +.btn:disabled.active, +.btn[disabled], +.btn[disabled]:hover, +.btn[disabled]:focus, +.btn[disabled].focus, +.btn[disabled]:active, +.btn[disabled].active, +fieldset[disabled] .btn, +fieldset[disabled] .btn:hover, +fieldset[disabled] .btn:focus, +fieldset[disabled] .btn.focus, +fieldset[disabled] .btn:active, +fieldset[disabled] .btn.active, +.navbar .navbar-nav>a.btn.disabled, +.navbar .navbar-nav>a.btn.disabled:hover, +.navbar .navbar-nav>a.btn.disabled:focus, +.navbar .navbar-nav>a.btn.disabled.focus, +.navbar .navbar-nav>a.btn.disabled:active, +.navbar .navbar-nav>a.btn.disabled.active, +.navbar .navbar-nav>a.btn:disabled, +.navbar .navbar-nav>a.btn:disabled:hover, +.navbar .navbar-nav>a.btn:disabled:focus, +.navbar .navbar-nav>a.btn:disabled.focus, +.navbar .navbar-nav>a.btn:disabled:active, +.navbar .navbar-nav>a.btn:disabled.active, +.navbar .navbar-nav>a.btn[disabled], +.navbar .navbar-nav>a.btn[disabled]:hover, +.navbar .navbar-nav>a.btn[disabled]:focus, +.navbar .navbar-nav>a.btn[disabled].focus, +.navbar .navbar-nav>a.btn[disabled]:active, +.navbar .navbar-nav>a.btn[disabled].active, +fieldset[disabled] .navbar .navbar-nav>a.btn, +fieldset[disabled] .navbar .navbar-nav>a.btn:hover, +fieldset[disabled] .navbar .navbar-nav>a.btn:focus, +fieldset[disabled] .navbar .navbar-nav>a.btn.focus, +fieldset[disabled] .navbar .navbar-nav>a.btn:active, +fieldset[disabled] .navbar .navbar-nav>a.btn.active { + background-color: #888; + border-color: #888; +} + +.btn.btn-simple, +.navbar .navbar-nav>a.btn.btn-simple { + color: #888; + border-color: #888; +} + +.btn.btn-simple:hover, +.btn.btn-simple:focus, +.btn.btn-simple:active, +.navbar .navbar-nav>a.btn.btn-simple:hover, +.navbar .navbar-nav>a.btn.btn-simple:focus, +.navbar .navbar-nav>a.btn.btn-simple:active { + background-color: transparent; + color: #979797; + border-color: #979797; + box-shadow: none; +} + +.btn.btn-link, +.navbar .navbar-nav>a.btn.btn-link { + color: #888; +} + +.btn.btn-link:hover, +.btn.btn-link:focus, +.btn.btn-link:active, +.navbar .navbar-nav>a.btn.btn-link:hover, +.navbar .navbar-nav>a.btn.btn-link:focus, +.navbar .navbar-nav>a.btn.btn-link:active { + background-color: transparent; + color: #979797; + text-decoration: none; + box-shadow: none; +} + +.btn:hover, +.btn:focus, +.navbar .navbar-nav>a.btn:hover, +.navbar .navbar-nav>a.btn:focus { + opacity: 1; + filter: alpha(opacity=100); + outline: 0 !important; +} + +.btn:active, +.btn.active, +.open>.btn.dropdown-toggle, +.navbar .navbar-nav>a.btn:active, +.navbar .navbar-nav>a.btn.active, +.open>.navbar .navbar-nav>a.btn.dropdown-toggle { + -webkit-box-shadow: none; + box-shadow: none; + outline: 0 !important; +} + +.btn.btn-icon, +.navbar .navbar-nav>a.btn.btn-icon { + height: 2.375rem; + min-width: 2.375rem; + width: 2.375rem; + padding: 0; + font-size: 0.9375rem; + overflow: hidden; + position: relative; + line-height: normal; +} + +.btn.btn-icon.btn-simple, +.navbar .navbar-nav>a.btn.btn-icon.btn-simple { + padding: 0; +} + +.btn.btn-icon.btn-sm, +.navbar .navbar-nav>a.btn.btn-icon.btn-sm { + height: 1.875rem; + min-width: 1.875rem; + width: 1.875rem; +} + +.btn.btn-icon.btn-sm i.fa, +.btn.btn-icon.btn-sm i.now-ui-icons, +.navbar .navbar-nav>a.btn.btn-icon.btn-sm i.fa, +.navbar .navbar-nav>a.btn.btn-icon.btn-sm i.now-ui-icons { + font-size: 0.6875rem; +} + +.btn.btn-icon.btn-lg, +.navbar .navbar-nav>a.btn.btn-icon.btn-lg { + height: 3.6rem; + min-width: 3.6rem; + width: 3.6rem; +} + +.btn.btn-icon.btn-lg i.now-ui-icons, +.btn.btn-icon.btn-lg i.fa, +.navbar .navbar-nav>a.btn.btn-icon.btn-lg i.now-ui-icons, +.navbar .navbar-nav>a.btn.btn-icon.btn-lg i.fa { + font-size: 1.325rem; +} + +.btn.btn-icon:not(.btn-footer) i.now-ui-icons, +.btn.btn-icon:not(.btn-footer) i.fa, +.navbar .navbar-nav>a.btn.btn-icon:not(.btn-footer) i.now-ui-icons, +.navbar .navbar-nav>a.btn.btn-icon:not(.btn-footer) i.fa { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-12px, -12px); + line-height: 1.5626rem; + width: 25px; +} + +.btn:not(.btn-icon) .now-ui-icons, +.navbar .navbar-nav>a.btn:not(.btn-icon) .now-ui-icons { + position: relative; + top: 1px; +} + +.btn-primary { + background-color: #f96332; + color: #FFFFFF; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary:active:focus, +.btn-primary:active:hover, +.btn-primary.active:focus, +.btn-primary.active:hover, +.show>.btn-primary.dropdown-toggle, +.show>.btn-primary.dropdown-toggle:focus, +.show>.btn-primary.dropdown-toggle:hover { + background-color: #fa7a50; + color: #FFFFFF; + box-shadow: none; +} + +.btn-primary:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-primary.disabled, +.btn-primary.disabled:hover, +.btn-primary.disabled:focus, +.btn-primary.disabled.focus, +.btn-primary.disabled:active, +.btn-primary.disabled.active, +.btn-primary:disabled, +.btn-primary:disabled:hover, +.btn-primary:disabled:focus, +.btn-primary:disabled.focus, +.btn-primary:disabled:active, +.btn-primary:disabled.active, +.btn-primary[disabled], +.btn-primary[disabled]:hover, +.btn-primary[disabled]:focus, +.btn-primary[disabled].focus, +.btn-primary[disabled]:active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-primary:hover, +fieldset[disabled] .btn-primary:focus, +fieldset[disabled] .btn-primary.focus, +fieldset[disabled] .btn-primary:active, +fieldset[disabled] .btn-primary.active { + background-color: #f96332; + border-color: #f96332; +} + +.btn-primary.btn-simple { + color: #f96332; + border-color: #f96332; +} + +.btn-primary.btn-simple:hover, +.btn-primary.btn-simple:focus, +.btn-primary.btn-simple:active { + background-color: transparent; + color: #fa7a50; + border-color: #fa7a50; + box-shadow: none; +} + +.btn-primary.btn-link { + color: #f96332; +} + +.btn-primary.btn-link:hover, +.btn-primary.btn-link:focus, +.btn-primary.btn-link:active { + background-color: transparent; + color: #fa7a50; + text-decoration: none; + box-shadow: none; +} + +.btn-success { + background-color: #18ce0f; + color: #FFFFFF; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success:active:focus, +.btn-success:active:hover, +.btn-success.active:focus, +.btn-success.active:hover, +.show>.btn-success.dropdown-toggle, +.show>.btn-success.dropdown-toggle:focus, +.show>.btn-success.dropdown-toggle:hover { + background-color: #1beb11; + color: #FFFFFF; + box-shadow: none; +} + +.btn-success:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-success.disabled, +.btn-success.disabled:hover, +.btn-success.disabled:focus, +.btn-success.disabled.focus, +.btn-success.disabled:active, +.btn-success.disabled.active, +.btn-success:disabled, +.btn-success:disabled:hover, +.btn-success:disabled:focus, +.btn-success:disabled.focus, +.btn-success:disabled:active, +.btn-success:disabled.active, +.btn-success[disabled], +.btn-success[disabled]:hover, +.btn-success[disabled]:focus, +.btn-success[disabled].focus, +.btn-success[disabled]:active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-success:hover, +fieldset[disabled] .btn-success:focus, +fieldset[disabled] .btn-success.focus, +fieldset[disabled] .btn-success:active, +fieldset[disabled] .btn-success.active { + background-color: #18ce0f; + border-color: #18ce0f; +} + +.btn-success.btn-simple { + color: #18ce0f; + border-color: #18ce0f; +} + +.btn-success.btn-simple:hover, +.btn-success.btn-simple:focus, +.btn-success.btn-simple:active { + background-color: transparent; + color: #1beb11; + border-color: #1beb11; + box-shadow: none; +} + +.btn-success.btn-link { + color: #18ce0f; +} + +.btn-success.btn-link:hover, +.btn-success.btn-link:focus, +.btn-success.btn-link:active { + background-color: transparent; + color: #1beb11; + text-decoration: none; + box-shadow: none; +} + +.btn-info { + background-color: #2CA8FF; + color: #FFFFFF; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info:active:focus, +.btn-info:active:hover, +.btn-info.active:focus, +.btn-info.active:hover, +.show>.btn-info.dropdown-toggle, +.show>.btn-info.dropdown-toggle:focus, +.show>.btn-info.dropdown-toggle:hover { + background-color: #4bb5ff; + color: #FFFFFF; + box-shadow: none; +} + +.btn-info:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-info.disabled, +.btn-info.disabled:hover, +.btn-info.disabled:focus, +.btn-info.disabled.focus, +.btn-info.disabled:active, +.btn-info.disabled.active, +.btn-info:disabled, +.btn-info:disabled:hover, +.btn-info:disabled:focus, +.btn-info:disabled.focus, +.btn-info:disabled:active, +.btn-info:disabled.active, +.btn-info[disabled], +.btn-info[disabled]:hover, +.btn-info[disabled]:focus, +.btn-info[disabled].focus, +.btn-info[disabled]:active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-info:hover, +fieldset[disabled] .btn-info:focus, +fieldset[disabled] .btn-info.focus, +fieldset[disabled] .btn-info:active, +fieldset[disabled] .btn-info.active { + background-color: #2CA8FF; + border-color: #2CA8FF; +} + +.btn-info.btn-simple { + color: #2CA8FF; + border-color: #2CA8FF; +} + +.btn-info.btn-simple:hover, +.btn-info.btn-simple:focus, +.btn-info.btn-simple:active { + background-color: transparent; + color: #4bb5ff; + border-color: #4bb5ff; + box-shadow: none; +} + +.btn-info.btn-link { + color: #2CA8FF; +} + +.btn-info.btn-link:hover, +.btn-info.btn-link:focus, +.btn-info.btn-link:active { + background-color: transparent; + color: #4bb5ff; + text-decoration: none; + box-shadow: none; +} + +.btn-warning { + background-color: #FFB236; + color: #FFFFFF; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning:active:focus, +.btn-warning:active:hover, +.btn-warning.active:focus, +.btn-warning.active:hover, +.show>.btn-warning.dropdown-toggle, +.show>.btn-warning.dropdown-toggle:focus, +.show>.btn-warning.dropdown-toggle:hover { + background-color: #ffbe55; + color: #FFFFFF; + box-shadow: none; +} + +.btn-warning:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-warning.disabled, +.btn-warning.disabled:hover, +.btn-warning.disabled:focus, +.btn-warning.disabled.focus, +.btn-warning.disabled:active, +.btn-warning.disabled.active, +.btn-warning:disabled, +.btn-warning:disabled:hover, +.btn-warning:disabled:focus, +.btn-warning:disabled.focus, +.btn-warning:disabled:active, +.btn-warning:disabled.active, +.btn-warning[disabled], +.btn-warning[disabled]:hover, +.btn-warning[disabled]:focus, +.btn-warning[disabled].focus, +.btn-warning[disabled]:active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-warning:hover, +fieldset[disabled] .btn-warning:focus, +fieldset[disabled] .btn-warning.focus, +fieldset[disabled] .btn-warning:active, +fieldset[disabled] .btn-warning.active { + background-color: #FFB236; + border-color: #FFB236; +} + +.btn-warning.btn-simple { + color: #FFB236; + border-color: #FFB236; +} + +.btn-warning.btn-simple:hover, +.btn-warning.btn-simple:focus, +.btn-warning.btn-simple:active { + background-color: transparent; + color: #ffbe55; + border-color: #ffbe55; + box-shadow: none; +} + +.btn-warning.btn-link { + color: #FFB236; +} + +.btn-warning.btn-link:hover, +.btn-warning.btn-link:focus, +.btn-warning.btn-link:active { + background-color: transparent; + color: #ffbe55; + text-decoration: none; + box-shadow: none; +} + +.btn-danger { + background-color: #FF3636; + color: #FFFFFF; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger:active:focus, +.btn-danger:active:hover, +.btn-danger.active:focus, +.btn-danger.active:hover, +.show>.btn-danger.dropdown-toggle, +.show>.btn-danger.dropdown-toggle:focus, +.show>.btn-danger.dropdown-toggle:hover { + background-color: #ff5555; + color: #FFFFFF; + box-shadow: none; +} + +.btn-danger:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-danger.disabled, +.btn-danger.disabled:hover, +.btn-danger.disabled:focus, +.btn-danger.disabled.focus, +.btn-danger.disabled:active, +.btn-danger.disabled.active, +.btn-danger:disabled, +.btn-danger:disabled:hover, +.btn-danger:disabled:focus, +.btn-danger:disabled.focus, +.btn-danger:disabled:active, +.btn-danger:disabled.active, +.btn-danger[disabled], +.btn-danger[disabled]:hover, +.btn-danger[disabled]:focus, +.btn-danger[disabled].focus, +.btn-danger[disabled]:active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger, +fieldset[disabled] .btn-danger:hover, +fieldset[disabled] .btn-danger:focus, +fieldset[disabled] .btn-danger.focus, +fieldset[disabled] .btn-danger:active, +fieldset[disabled] .btn-danger.active { + background-color: #FF3636; + border-color: #FF3636; +} + +.btn-danger.btn-simple { + color: #FF3636; + border-color: #FF3636; +} + +.btn-danger.btn-simple:hover, +.btn-danger.btn-simple:focus, +.btn-danger.btn-simple:active { + background-color: transparent; + color: #ff5555; + border-color: #ff5555; + box-shadow: none; +} + +.btn-danger.btn-link { + color: #FF3636; +} + +.btn-danger.btn-link:hover, +.btn-danger.btn-link:focus, +.btn-danger.btn-link:active { + background-color: transparent; + color: #ff5555; + text-decoration: none; + box-shadow: none; +} + +.btn-neutral { + background-color: #FFFFFF; + color: #f96332; +} + +.btn-neutral:hover, +.btn-neutral:focus, +.btn-neutral:active, +.btn-neutral.active, +.btn-neutral:active:focus, +.btn-neutral:active:hover, +.btn-neutral.active:focus, +.btn-neutral.active:hover, +.show>.btn-neutral.dropdown-toggle, +.show>.btn-neutral.dropdown-toggle:focus, +.show>.btn-neutral.dropdown-toggle:hover { + background-color: #FFFFFF; + color: #FFFFFF; + box-shadow: none; +} + +.btn-neutral:hover { + box-shadow: 0 3px 8px 0 rgba(0, 0, 0, 0.17); +} + +.btn-neutral.disabled, +.btn-neutral.disabled:hover, +.btn-neutral.disabled:focus, +.btn-neutral.disabled.focus, +.btn-neutral.disabled:active, +.btn-neutral.disabled.active, +.btn-neutral:disabled, +.btn-neutral:disabled:hover, +.btn-neutral:disabled:focus, +.btn-neutral:disabled.focus, +.btn-neutral:disabled:active, +.btn-neutral:disabled.active, +.btn-neutral[disabled], +.btn-neutral[disabled]:hover, +.btn-neutral[disabled]:focus, +.btn-neutral[disabled].focus, +.btn-neutral[disabled]:active, +.btn-neutral[disabled].active, +fieldset[disabled] .btn-neutral, +fieldset[disabled] .btn-neutral:hover, +fieldset[disabled] .btn-neutral:focus, +fieldset[disabled] .btn-neutral.focus, +fieldset[disabled] .btn-neutral:active, +fieldset[disabled] .btn-neutral.active { + background-color: #FFFFFF; + border-color: #FFFFFF; +} + +.btn-neutral.btn-danger { + color: #FF3636; +} + +.btn-neutral.btn-danger:hover, +.btn-neutral.btn-danger:focus, +.btn-neutral.btn-danger:active { + color: #ff5555; +} + +.btn-neutral.btn-info { + color: #2CA8FF; +} + +.btn-neutral.btn-info:hover, +.btn-neutral.btn-info:focus, +.btn-neutral.btn-info:active { + color: #4bb5ff; +} + +.btn-neutral.btn-warning { + color: #FFB236; +} + +.btn-neutral.btn-warning:hover, +.btn-neutral.btn-warning:focus, +.btn-neutral.btn-warning:active { + color: #ffbe55; +} + +.btn-neutral.btn-success { + color: #18ce0f; +} + +.btn-neutral.btn-success:hover, +.btn-neutral.btn-success:focus, +.btn-neutral.btn-success:active { + color: #1beb11; +} + +.btn-neutral.btn-default { + color: #888; +} + +.btn-neutral.btn-default:hover, +.btn-neutral.btn-default:focus, +.btn-neutral.btn-default:active { + color: #979797; +} + +.btn-neutral.active, +.btn-neutral:active, +.btn-neutral:active:focus, +.btn-neutral:active:hover, +.btn-neutral.active:focus, +.btn-neutral.active:hover, +.show>.btn-neutral.dropdown-toggle, +.show>.btn-neutral.dropdown-toggle:focus, +.show>.btn-neutral.dropdown-toggle:hover { + background-color: #FFFFFF; + color: #fa7a50; + box-shadow: none; +} + +.btn-neutral:hover, +.btn-neutral:focus { + color: #fa7a50; +} + +.btn-neutral:hover:not(.nav-link), +.btn-neutral:focus:not(.nav-link) { + box-shadow: none; +} + +.btn-neutral.btn-simple { + color: #FFFFFF; + border-color: #FFFFFF; +} + +.btn-neutral.btn-simple:hover, +.btn-neutral.btn-simple:focus, +.btn-neutral.btn-simple:active { + background-color: transparent; + color: #FFFFFF; + border-color: #FFFFFF; + box-shadow: none; +} + +.btn-neutral.btn-link { + color: #FFFFFF; +} + +.btn-neutral.btn-link:hover, +.btn-neutral.btn-link:focus, +.btn-neutral.btn-link:active { + background-color: transparent; + color: #FFFFFF; + text-decoration: none; + box-shadow: none; +} + +.btn:disabled, +.btn[disabled], +.btn.disabled { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.btn-round { + border-width: 1px; + border-radius: 30px !important; + padding: 11px 23px; +} + +.btn-round.btn-simple { + padding: 10px 22px; +} + +.btn-simple { + border: 1px solid; + border-color: #888; + padding: 10px 22px; + background-color: transparent; +} + +.btn-simple.disabled, +.btn-simple.disabled:hover, +.btn-simple.disabled:focus, +.btn-simple.disabled.focus, +.btn-simple.disabled:active, +.btn-simple.disabled.active, +.btn-simple:disabled, +.btn-simple:disabled:hover, +.btn-simple:disabled:focus, +.btn-simple:disabled.focus, +.btn-simple:disabled:active, +.btn-simple:disabled.active, +.btn-simple[disabled], +.btn-simple[disabled]:hover, +.btn-simple[disabled]:focus, +.btn-simple[disabled].focus, +.btn-simple[disabled]:active, +.btn-simple[disabled].active, +fieldset[disabled] .btn-simple, +fieldset[disabled] .btn-simple:hover, +fieldset[disabled] .btn-simple:focus, +fieldset[disabled] .btn-simple.focus, +fieldset[disabled] .btn-simple:active, +fieldset[disabled] .btn-simple.active, +.btn-link.disabled, +.btn-link.disabled:hover, +.btn-link.disabled:focus, +.btn-link.disabled.focus, +.btn-link.disabled:active, +.btn-link.disabled.active, +.btn-link:disabled, +.btn-link:disabled:hover, +.btn-link:disabled:focus, +.btn-link:disabled.focus, +.btn-link:disabled:active, +.btn-link:disabled.active, +.btn-link[disabled], +.btn-link[disabled]:hover, +.btn-link[disabled]:focus, +.btn-link[disabled].focus, +.btn-link[disabled]:active, +.btn-link[disabled].active, +fieldset[disabled] .btn-link, +fieldset[disabled] .btn-link:hover, +fieldset[disabled] .btn-link:focus, +fieldset[disabled] .btn-link.focus, +fieldset[disabled] .btn-link:active, +fieldset[disabled] .btn-link.active { + background-color: transparent; +} + +.btn-lg { + font-size: 1em; + border-radius: 0.25rem; + padding: 15px 48px; +} + +.btn-lg.btn-simple { + padding: 14px 47px; +} + +.btn-sm { + font-size: 14px; + border-radius: 0.1875rem; + padding: 5px 15px; +} + +.btn-sm.btn-simple { + padding: 4px 14px; +} + +.btn-link { + border: 0; + padding: 0.5rem 0.7rem; + background-color: transparent; +} + +.btn-wd { + min-width: 140px; +} + +.btn-group.select { + width: 100%; +} + +.btn-group.select .btn { + text-align: left; +} + +.btn-group.select .caret { + position: absolute; + top: 50%; + margin-top: -1px; + right: 8px; +} + +.form-control::-moz-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control:-moz-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control::-webkit-input-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control:-ms-input-placeholder { + color: #DDDDDD; + opacity: 1; + filter: alpha(opacity=100); +} + +.form-control { + background-color: transparent; + border: 1px solid #E3E3E3; + border-radius: 30px; + color: #2c2c2c; + line-height: normal; + font-size: 0.8571em; + -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -webkit-box-shadow: none; + box-shadow: none; +} + +.has-success .form-control { + border-color: #E3E3E3; +} + +.form-control:focus { + border: 1px solid #f96332; + -webkit-box-shadow: none; + box-shadow: none; + outline: 0 !important; + color: #2c2c2c; +} + +.form-control:focus+.input-group-addon, +.form-control:focus~.input-group-addon { + border: 1px solid #f96332; + border-left: none; + background-color: transparent; +} + +.has-success .form-control, +.has-error .form-control, +.has-success .form-control:focus, +.has-error .form-control:focus { + -webkit-box-shadow: none; + box-shadow: none; +} + +.has-success .form-control:focus { + border-color: #1be611; +} + +.has-danger .form-control.form-control-success, +.has-danger .form-control.form-control-danger, +.has-success .form-control.form-control-success, +.has-success .form-control.form-control-danger { + background-image: none; +} + +.has-danger .form-control { + border-color: #ffcfcf; + color: #FF3636; + background-color: rgba(222, 222, 222, 0.1); +} + +.has-danger .form-control:focus { + background-color: #FFFFFF; +} + +.form-control+.form-control-feedback { + border-radius: 0.25rem; + font-size: 14px; + margin-top: 0; + position: absolute; + left: 18px; + bottom: -20px; + vertical-align: middle; +} + +.open .form-control { + border-radius: 0.25rem 0.25rem 0 0; + border-bottom-color: transparent; +} + +.form-control+.input-group-addon { + background-color: #FFFFFF; +} + +.has-success:after, +.has-danger:after { + font-family: 'Nucleo Outline'; + content: "\ea22"; + display: inline-block; + position: absolute; + right: 15px; + bottom: 10px; + color: #18ce0f; + font-size: 11px; +} + +.has-success.input-lg:after, +.has-danger.input-lg:after { + font-size: 13px; + top: 13px; +} + +.has-danger:after { + content: "\ea53"; + color: #FF3636; +} + +.form-group.form-group-no-border.input-lg .input-group-addon, +.input-group.form-group-no-border.input-lg .input-group-addon { + padding: 15px 0 15px 19px; +} + +.form-group.form-group-no-border.input-lg .form-control, +.input-group.form-group-no-border.input-lg .form-control { + padding: 15px 19px; +} + +.form-group.form-group-no-border.input-lg .form-control+.input-group-addon, +.input-group.form-group-no-border.input-lg .form-control+.input-group-addon { + padding: 15px 19px 15px 0; +} + +.form-group.input-lg .form-control, +.input-group.input-lg .form-control { + padding: 14px 18px; +} + +.form-group.input-lg .form-control+.input-group-addon, +.input-group.input-lg .form-control+.input-group-addon { + padding: 14px 18px 14px 0; +} + +.form-group.input-lg .input-group-addon, +.input-group.input-lg .input-group-addon { + padding: 14px 0 15px 18px; +} + +.form-group.input-lg .input-group-addon+.form-control, +.input-group.input-lg .input-group-addon+.form-control { + padding: 15px 18px 15px 16px; +} + +.form-group.form-group-no-border .form-control, +.input-group.form-group-no-border .form-control { + padding: 11px 19px; +} + +.form-group.form-group-no-border .form-control+.input-group-addon, +.input-group.form-group-no-border .form-control+.input-group-addon { + padding: 11px 19px 11px 0; +} + +.form-group.form-group-no-border .input-group-addon, +.input-group.form-group-no-border .input-group-addon { + padding: 11px 0 11px 19px; +} + +.form-group .form-control, +.input-group .form-control { + padding: 10px 18px 10px 18px; +} + +.form-group .form-control+.input-group-addon, +.input-group .form-control+.input-group-addon { + padding: 10px 18px 10px 0; +} + +.form-group .input-group-addon, +.input-group .input-group-addon { + padding: 10px 0 10px 18px; +} + +.form-group .input-group-addon+.form-control, +.form-group .input-group-addon~.form-control, +.input-group .input-group-addon+.form-control, +.input-group .input-group-addon~.form-control { + padding: 10px 19px 11px 16px; +} + +.form-group.form-group-no-border .form-control, +.form-group.form-group-no-border .form-control+.input-group-addon, +.input-group.form-group-no-border .form-control, +.input-group.form-group-no-border .form-control+.input-group-addon { + background-color: rgba(222, 222, 222, 0.3); + border: medium none; +} + +.form-group.form-group-no-border .form-control:focus, +.form-group.form-group-no-border .form-control:active, +.form-group.form-group-no-border .form-control:active, +.form-group.form-group-no-border .form-control+.input-group-addon:focus, +.form-group.form-group-no-border .form-control+.input-group-addon:active, +.form-group.form-group-no-border .form-control+.input-group-addon:active, +.input-group.form-group-no-border .form-control:focus, +.input-group.form-group-no-border .form-control:active, +.input-group.form-group-no-border .form-control:active, +.input-group.form-group-no-border .form-control+.input-group-addon:focus, +.input-group.form-group-no-border .form-control+.input-group-addon:active, +.input-group.form-group-no-border .form-control+.input-group-addon:active { + border: medium none; + background-color: rgba(222, 222, 222, 0.5); +} + +.form-group.form-group-no-border .form-control:focus+.input-group-addon, +.input-group.form-group-no-border .form-control:focus+.input-group-addon { + background-color: rgba(222, 222, 222, 0.5); +} + +.form-group.form-group-no-border .input-group-addon, +.input-group.form-group-no-border .input-group-addon { + background-color: rgba(222, 222, 222, 0.3); + border: none; +} + +.has-error .form-control-feedback, +.has-error .control-label { + color: #FF3636; +} + +.has-success .form-control-feedback, +.has-success .control-label { + color: #18ce0f; +} + +.input-group-addon { + background-color: #FFFFFF; + border: 1px solid #E3E3E3; + border-radius: 30px; + color: #555555; + padding: -0.5rem 0 -0.5rem -0.3rem; + -webkit-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -moz-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -o-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + -ms-transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; + transition: color 0.3s ease-in-out, border-color 0.3s ease-in-out, background-color 0.3s ease-in-out; +} + +.has-success .input-group-addon, +.has-danger .input-group-addon { + background-color: #FFFFFF; +} + +.has-danger .form-control:focus+.input-group-addon { + color: #FF3636; +} + +.has-success .form-control:focus+.input-group-addon { + color: #18ce0f; +} + +.input-group-addon+.form-control, +.input-group-addon~.form-control { + padding: -0.5rem 0.7rem; + padding-left: 18px; +} + +.input-group-addon i { + width: 17px; +} + +.input-group-focus .input-group-addon { + background-color: #FFFFFF; + border-color: #f96332; +} + +.input-group-focus.form-group-no-border .input-group-addon { + background-color: rgba(222, 222, 222, 0.5); +} + +.input-group, +.form-group { + margin-bottom: 10px; +} + +.input-group[disabled] .input-group-addon { + background-color: #E3E3E3; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child>.dropdown-toggle, +.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle) { + border-right: 0 none; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child>.dropdown-toggle, +.input-group-btn:first-child>.btn:not(:first-child) { + border-left: 0 none; +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #E3E3E3; + color: #888; + cursor: not-allowed; +} + +.input-group-btn .btn { + border-width: 1px; + padding: 11px 0.7rem; +} + +.input-group-btn .btn-default:not(.btn-fill) { + border-color: #DDDDDD; +} + +.input-group-btn:last-child>.btn { + margin-left: 0; +} + +textarea.form-control { + max-width: 100%; + padding: 10px 10px 0 0; + resize: none; + border: none; + border-bottom: 1px solid #E3E3E3; + border-radius: 0; + line-height: 2; +} + +textarea.form-control:focus, +textarea.form-control:active { + border-left: none; + border-top: none; + border-right: none; +} + +.has-success.form-group .form-control, +.has-success.form-group.form-group-no-border .form-control, +.has-danger.form-group .form-control, +.has-danger.form-group.form-group-no-border .form-control { + padding-right: 40px; +} + +.form-group { + position: relative; +} + +.form-group.has-error, +.form-group.has-danger { + margin-bottom: 20px; +} + +.checkbox, +.radio { + margin-bottom: 12px; +} + +.checkbox label, +.radio label { + display: inline-block; + position: relative; + cursor: pointer; + padding-left: 35px; + line-height: 26px; + margin-bottom: 0; +} + +.radio label { + padding-left: 28px; +} + +.checkbox label::before, +.checkbox label::after { + content: " "; + display: inline-block; + position: absolute; + width: 26px; + height: 26px; + left: 0; + cursor: pointer; + border-radius: 3px; + top: 0; + background-color: transparent; + border: 1px solid #E3E3E3; + -webkit-transition: opacity 0.3s linear; + -moz-transition: opacity 0.3s linear; + -o-transition: opacity 0.3s linear; + -ms-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} + +.checkbox label::after { + font-family: 'Nucleo Outline'; + content: "\ea22"; + top: 0px; + text-align: center; + font-size: 14px; + opacity: 0; + color: #555555; + border: 0; + background-color: inherit; +} + +.checkbox input[type="checkbox"], +.radio input[type="radio"] { + opacity: 0; + position: absolute; + visibility: hidden; +} + +.checkbox input[type="checkbox"]:checked+label::after { + opacity: 1; +} + +.checkbox input[type="checkbox"]:disabled+label, +.radio input[type="radio"]:disabled+label { + color: #9A9A9A; + opacity: .5; +} + +.checkbox input[type="checkbox"]:disabled+label::before, +.checkbox input[type="checkbox"]:disabled+label::after { + cursor: not-allowed; +} + +.checkbox input[type="checkbox"]:disabled+label, +.radio input[type="radio"]:disabled+label { + cursor: not-allowed; +} + +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} + +.checkbox.checkbox-inline { + margin-top: 0; +} + +.checkbox-primary input[type="checkbox"]:checked+label::before { + background-color: #428bca; + border-color: #428bca; +} + +.checkbox-primary input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-danger input[type="checkbox"]:checked+label::before { + background-color: #d9534f; + border-color: #d9534f; +} + +.checkbox-danger input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-info input[type="checkbox"]:checked+label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.checkbox-info input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-warning input[type="checkbox"]:checked+label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.checkbox-warning input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.checkbox-success input[type="checkbox"]:checked+label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.checkbox-success input[type="checkbox"]:checked+label::after { + color: #fff; +} + +.radio label::before, +.radio label::after { + content: " "; + width: 20px; + height: 20px; + border-radius: 50%; + border: 1px solid #E3E3E3; + display: inline-block; + position: absolute; + left: 3px; + top: 3px; + padding: 1px; + -webkit-transition: opacity 0.3s linear; + -moz-transition: opacity 0.3s linear; + -o-transition: opacity 0.3s linear; + -ms-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; +} + +.radio input[type="radio"]+label:after, +.radio input[type="radio"] { + opacity: 0; +} + +.radio input[type="radio"]:checked+label::after { + width: 4px; + height: 4px; + background-color: #555555; + border-color: #555555; + top: 11px; + left: 11px; + opacity: 1; +} + +.radio input[type="radio"]:checked+label::after { + opacity: 1; +} + +.radio input[type="radio"]:disabled+label { + color: #9A9A9A; +} + +.radio input[type="radio"]:disabled+label::before, +.radio input[type="radio"]:disabled+label::after { + color: #9A9A9A; +} + +.radio.radio-inline { + margin-top: 0; +} + +.progress-container { + position: relative; +} + +.progress-container+.progress-container, +.progress-container~.progress-container { + margin-top: 15px; +} + +.progress-container .progress-badge { + color: #888; + font-size: 0.8571em; + text-transform: uppercase; +} + +.progress-container .progress { + height: 1px; + border-radius: 0; + box-shadow: none; + background: rgba(222, 222, 222, 0.8); + margin-top: 14px; +} + +.progress-container .progress .progress-bar { + box-shadow: none; + background-color: #888; +} + +.progress-container .progress .progress-value { + position: absolute; + top: 2px; + right: 0; + color: #888; + font-size: 0.8571em; +} + +.progress-container.progress-neutral .progress { + background: rgba(255, 255, 255, 0.3); +} + +.progress-container.progress-neutral .progress-bar { + background: #FFFFFF; +} + +.progress-container.progress-neutral .progress-value, +.progress-container.progress-neutral .progress-badge { + color: #FFFFFF; +} + +.progress-container.progress-primary .progress { + background: rgba(249, 99, 50, 0.3); +} + +.progress-container.progress-primary .progress-bar { + background: #f96332; +} + +.progress-container.progress-primary .progress-value, +.progress-container.progress-primary .progress-badge { + color: #f96332; +} + +.progress-container.progress-info .progress { + background: rgba(44, 168, 255, 0.3); +} + +.progress-container.progress-info .progress-bar { + background: #2CA8FF; +} + +.progress-container.progress-info .progress-value, +.progress-container.progress-info .progress-badge { + color: #2CA8FF; +} + +.progress-container.progress-success .progress { + background: rgba(24, 206, 15, 0.3); +} + +.progress-container.progress-success .progress-bar { + background: #18ce0f; +} + +.progress-container.progress-success .progress-value, +.progress-container.progress-success .progress-badge { + color: #18ce0f; +} + +.progress-container.progress-warning .progress { + background: rgba(255, 178, 54, 0.3); +} + +.progress-container.progress-warning .progress-bar { + background: #FFB236; +} + +.progress-container.progress-warning .progress-value, +.progress-container.progress-warning .progress-badge { + color: #FFB236; +} + +.progress-container.progress-danger .progress { + background: rgba(255, 54, 54, 0.3); +} + +.progress-container.progress-danger .progress-bar { + background: #FF3636; +} + +.progress-container.progress-danger .progress-value, +.progress-container.progress-danger .progress-badge { + color: #FF3636; +} + + +/* badges */ + +.badge { + border-radius: 8px; + padding: 4px 8px; + text-transform: uppercase; + font-size: 0.7142em; + line-height: 12px; + background-color: transparent; + border: 1px solid; + margin-bottom: 5px; + border-radius: 0.875rem; +} + +.badge-icon { + padding: 0.4em 0.55em; +} + +.badge-icon i { + font-size: 0.8em; +} + +.badge-default { + border-color: #888; + color: #888; +} + +.badge-primary { + border-color: #f96332; + color: #f96332; +} + +.badge-info { + border-color: #2CA8FF; + color: #2CA8FF; +} + +.badge-success { + border-color: #18ce0f; + color: #18ce0f; +} + +.badge-warning { + border-color: #FFB236; + color: #FFB236; +} + +.badge-danger { + border-color: #FF3636; + color: #FF3636; +} + +.badge-neutral { + border-color: #FFFFFF; + color: #FFFFFF; +} + +.pagination .page-item .page-link { + border: 0; + border-radius: 30px !important; + transition: all .3s; + padding: 0px 11px; + margin: 0 3px; + min-width: 30px; + text-align: center; + height: 30px; + line-height: 30px; + color: #2c2c2c; + cursor: pointer; + font-size: 14px; + text-transform: uppercase; + background: transparent; +} + +.pagination .page-item .page-link:hover, +.pagination .page-item .page-link:focus { + color: #2c2c2c; + background-color: rgba(222, 222, 222, 0.3); + border: none; +} + +.pagination .arrow-margin-left, +.pagination .arrow-margin-right { + position: absolute; +} + +.pagination .arrow-margin-right { + right: 0; +} + +.pagination .arrow-margin-left { + left: 0; +} + +.pagination .page-item.active>.page-link { + color: #E3E3E3; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} + +.pagination .page-item.active>.page-link, +.pagination .page-item.active>.page-link:focus, +.pagination .page-item.active>.page-link:hover { + background-color: #888; + border-color: #888; + color: #FFFFFF; +} + +.pagination .page-item.disabled>.page-link { + opacity: .5; + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.pagination.pagination-info .page-item.active>.page-link, +.pagination.pagination-info .page-item.active>.page-link:focus, +.pagination.pagination-info .page-item.active>.page-link:hover { + background-color: #2CA8FF; + border-color: #2CA8FF; +} + +.pagination.pagination-success .page-item.active>.page-link, +.pagination.pagination-success .page-item.active>.page-link:focus, +.pagination.pagination-success .page-item.active>.page-link:hover { + background-color: #18ce0f; + border-color: #18ce0f; +} + +.pagination.pagination-primary .page-item.active>.page-link, +.pagination.pagination-primary .page-item.active>.page-link:focus, +.pagination.pagination-primary .page-item.active>.page-link:hover { + background-color: #f96332; + border-color: #f96332; +} + +.pagination.pagination-warning .page-item.active>.page-link, +.pagination.pagination-warning .page-item.active>.page-link:focus, +.pagination.pagination-warning .page-item.active>.page-link:hover { + background-color: #FFB236; + border-color: #FFB236; +} + +.pagination.pagination-danger .page-item.active>.page-link, +.pagination.pagination-danger .page-item.active>.page-link:focus, +.pagination.pagination-danger .page-item.active>.page-link:hover { + background-color: #FF3636; + border-color: #FF3636; +} + +.pagination.pagination-neutral .page-item>.page-link { + color: #FFFFFF; +} + +.pagination.pagination-neutral .page-item>.page-link:focus, +.pagination.pagination-neutral .page-item>.page-link:hover { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.pagination.pagination-neutral .page-item.active>.page-link, +.pagination.pagination-neutral .page-item.active>.page-link:focus, +.pagination.pagination-neutral .page-item.active>.page-link:hover { + background-color: #FFFFFF; + border-color: #FFFFFF; + color: #f96332; +} + +button, +input, +optgroup, +select, +textarea { +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 400; +} + +small { + font-size: 60%; +} + +a { + color: #f96332; +} + +a:hover, +a:focus { + color: #f96332; +} + +h1, +.h1 { + font-size: 3.5em; + line-height: 1.15; + margin-bottom: 30px; +} + +h1 small, +.h1 small { + font-weight: 700; + text-transform: uppercase; + opacity: .8; +} + +h2, +.h2 { + font-size: 2.5em; + margin-bottom: 30px; +} + +h3, +.h3 { + font-size: 2em; + margin-bottom: 30px; + line-height: 1.4em; +} + +h4, +.h4 { + font-size: 1.714em; + line-height: 1.45em; + margin-top: 30px; + margin-bottom: 15px; +} + +h4+.category, +h4.title+.category, +.h4+.category, +.h4.title+.category { + margin-top: -10px; +} + +h5, +.h5 { + font-size: 1.57em; + line-height: 1.4em; + margin-bottom: 15px; +} + +h6, +.h6 { + font-size: 1em; + font-weight: 700; + text-transform: uppercase; +} + +p { + line-height: 1.61em; +} + +.description p, +p.description { + font-size: 1.14em; +} + +.title { + font-weight: 700; +} + +.title.title-up { + text-transform: uppercase; +} + +.title.title-up a { + color: #2c2c2c; + text-decoration: none; +} + +.title+.category { + margin-top: -25px; +} + +.description, +.card-description, +.footer-big p { + color: #9A9A9A; + font-weight: 300; +} + +.category { + text-transform: uppercase; + font-weight: 700; + color: #9A9A9A; +} + +.text-primary { + color: #f96332 !important; +} + +.text-info { + color: #2CA8FF !important; +} + +.text-success { + color: #18ce0f !important; +} + +.text-warning { + color: #FFB236 !important; +} + +.text-danger { + color: #FF3636 !important; +} + +.text-black { + color: #444; +} + +.blockquote { + border-left: none; + border: 1px solid #888; + padding: 20px; + font-size: 1.1em; + line-height: 1.8; +} + +.blockquote small { + color: #888; + font-size: 0.8571em; + text-transform: uppercase; +} + +.blockquote.blockquote-primary { + border-color: #f96332; + color: #f96332; +} + +.blockquote.blockquote-primary small { + color: #f96332; +} + +.blockquote.blockquote-danger { + border-color: #FF3636; + color: #FF3636; +} + +.blockquote.blockquote-danger small { + color: #FF3636; +} + +.blockquote.blockquote-white { + border-color: rgba(255, 255, 255, 0.8); + color: #FFFFFF; +} + +.blockquote.blockquote-white small { + color: rgba(255, 255, 255, 0.8); +} + +body { + color: #2c2c2c; + font-size: 14px; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} + +.main { + position: relative; + background: #FFFFFF; +} + + +/* Animations */ + +.nav-pills .nav-link, +.nav-item .nav-link, +.navbar, +.nav-tabs .nav-link { + -webkit-transition: all 300ms ease 0s; + -moz-transition: all 300ms ease 0s; + -o-transition: all 300ms ease 0s; + -ms-transition: all 300ms ease 0s; + transition: all 300ms ease 0s; +} + +.dropdown-toggle:after, +.bootstrap-switch-label:before { + -webkit-transition: all 150ms ease 0s; + -moz-transition: all 150ms ease 0s; + -o-transition: all 150ms ease 0s; + -ms-transition: all 150ms ease 0s; + transition: all 150ms ease 0s; +} + +.dropdown-toggle[aria-expanded="true"]:after { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.button-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; +} + +.button-bar+.button-bar { + margin-top: 7px; +} + +.button-bar:nth-child(2) { + width: 17px; +} + +.open { + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + filter: alpha(opacity=100); + visibility: visible; +} + +.separator { + height: 2px; + width: 44px; + background-color: #888; + margin: 20px auto; +} + +.separator.separator-primary { + background-color: #f96332; +} + +.nav-pills .nav-item .nav-link { + padding: 0 15.5px; + text-align: center; + height: 60px; + width: 60px; + font-weight: 400; + color: #9A9A9A; + margin-right: 19px; + background-color: rgba(222, 222, 222, 0.3); + border-radius: 30px; +} + +.nav-pills .nav-item .nav-link:hover { + background-color: rgba(222, 222, 222, 0.3); +} + +.nav-pills .nav-item .nav-link.active, +.nav-pills .nav-item .nav-link.active:focus, +.nav-pills .nav-item .nav-link.active:hover { + background-color: #9A9A9A; + color: #FFFFFF; + box-shadow: 0px 5px 35px 0px rgba(0, 0, 0, 0.3); +} + +.nav-pills .nav-item .nav-link.disabled, +.nav-pills .nav-item .nav-link:disabled, +.nav-pills .nav-item .nav-link[disabled] { + opacity: .5; +} + +.nav-pills .nav-item i { + display: block; + font-size: 20px; + line-height: 60px; +} + +.nav-pills.nav-pills-neutral .nav-item .nav-link { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.nav-pills.nav-pills-neutral .nav-item .nav-link.active, +.nav-pills.nav-pills-neutral .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-neutral .nav-item .nav-link.active:hover { + background-color: #FFFFFF; + color: #f96332; +} + +.nav-pills.nav-pills-primary .nav-item .nav-link.active, +.nav-pills.nav-pills-primary .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-primary .nav-item .nav-link.active:hover { + background-color: #f96332; +} + +.nav-pills.nav-pills-info .nav-item .nav-link.active, +.nav-pills.nav-pills-info .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-info .nav-item .nav-link.active:hover { + background-color: #2CA8FF; +} + +.nav-pills.nav-pills-success .nav-item .nav-link.active, +.nav-pills.nav-pills-success .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-success .nav-item .nav-link.active:hover { + background-color: #18ce0f; +} + +.nav-pills.nav-pills-warning .nav-item .nav-link.active, +.nav-pills.nav-pills-warning .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-warning .nav-item .nav-link.active:hover { + background-color: #FFB236; +} + +.nav-pills.nav-pills-danger .nav-item .nav-link.active, +.nav-pills.nav-pills-danger .nav-item .nav-link.active:focus, +.nav-pills.nav-pills-danger .nav-item .nav-link.active:hover { + background-color: #FF3636; +} + +.tab-space { + padding: 20px 0 50px 0px; +} + +.nav-align-center { + text-align: center; +} + +.nav-align-center .nav-pills { + display: inline-flex; +} + +.btn-twitter { + color: #55acee; +} + +.btn-twitter:hover, +.btn-twitter:focus, +.btn-twitter:active { + color: #3ea1ec; +} + +.btn-facebook { + color: #3b5998; +} + +.btn-facebook:hover, +.btn-facebook:focus, +.btn-facebook:active { + color: #344e86; +} + +.btn-google { + color: #dd4b39; +} + +.btn-google:hover, +.btn-google:focus, +.btn-google:active { + color: #d73925; +} + +.btn-linkedin { + color: #0077B5; +} + +.btn-linkedin:hover, +.btn-linkedin:focus, +.btn-linkedin:active { + color: #00669c; +} + +.nav-tabs { + border: 0; + padding: 15px 0.7rem; +} + +.nav-tabs>.nav-item>.nav-link { + color: #888; + margin: 0; + margin-right: 5px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 30px; + font-size: 14px; + padding: 11px 23px; + line-height: 1.5; +} + +.nav-tabs>.nav-item>.nav-link:hover { + background-color: transparent; +} + +.nav-tabs>.nav-item>.nav-link.active { + border: 1px solid #888; + border-radius: 30px; +} + +.nav-tabs>.nav-item>.nav-link i.now-ui-icons { + font-size: 14px; + position: relative; + top: 1px; + margin-right: 3px; +} + +.nav-tabs>.nav-item.disabled>.nav-link, +.nav-tabs>.nav-item.disabled>.nav-link:hover { + color: rgba(255, 255, 255, 0.5); +} + +.nav-tabs.nav-tabs-neutral>.nav-item>.nav-link { + color: #FFFFFF; +} + +.nav-tabs.nav-tabs-neutral>.nav-item>.nav-link.active { + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +.nav-tabs.nav-tabs-primary>.nav-item>.nav-link.active { + border-color: #f96332; + color: #f96332; +} + +.nav-tabs.nav-tabs-info>.nav-item>.nav-link.active { + border-color: #2CA8FF; + color: #2CA8FF; +} + +.nav-tabs.nav-tabs-danger>.nav-item>.nav-link.active { + border-color: #FF3636; + color: #FF3636; +} + +.nav-tabs.nav-tabs-warning>.nav-item>.nav-link.active { + border-color: #FFB236; + color: #FFB236; +} + +.nav-tabs.nav-tabs-success>.nav-item>.nav-link.active { + border-color: #18ce0f; + color: #18ce0f; +} + +.navbar-rounded { + border-radius: 15px; +} +.navbar { + padding-top: 0.625rem; + padding-bottom: 0.625rem; + min-height: 53px; + margin-bottom: 20px; + box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.15); +} + +.navbar a { + vertical-align: middle; +} + +.navbar a:not(.btn):not(.dropdown-item) { + color: #FFFFFF; +} + +.navbar p { + display: inline-block; + margin: 0; + line-height: 21px; +} + +.navbar .navbar-nav.navbar-logo { + position: absolute; + left: 0; + right: 0; + margin: 0 auto; + width: 49px; + top: -4px; +} + +.navbar .navbar-nav .nav-link.btn { + padding: 11px 22px; +} + +.navbar .navbar-nav .nav-link.btn.btn-lg { + padding: 15px 48px; +} + +.navbar .navbar-nav .nav-link.btn.btn-sm { + padding: 5px 15px; +} + +.navbar .navbar-nav .nav-link:not(.btn) { + text-transform: uppercase; + font-size: 0.7142em; + padding: 0.5rem 0.7rem; + line-height: 1.625rem; +} + +.navbar .navbar-nav .nav-link:not(.btn) i.fa+p, +.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons+p { + margin-left: 5px; +} + +.navbar .navbar-nav .nav-link:not(.btn) i.fa, +.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons { + font-size: 18px; + position: relative; + top: 2px; + text-align: center; + width: 21px; +} + +.navbar .navbar-nav .nav-link:not(.btn) i.now-ui-icons { + top: 4px; + font-size: 16px; +} + +.navbar .navbar-nav .nav-link:not(.btn).profile-photo .profile-photo-small { + width: 27px; + height: 27px; +} + +.navbar .navbar-nav .nav-link:not(.btn).disabled { + opacity: .5; + color: #FFFFFF; +} + +.navbar .navbar-nav .nav-item.active .nav-link:not(.btn), +.navbar .navbar-nav .nav-item .nav-link:not(.btn):focus, +.navbar .navbar-nav .nav-item .nav-link:not(.btn):hover, +.navbar .navbar-nav .nav-item .nav-link:not(.btn):active { + background-color: rgba(255, 255, 255, 0.2); + border-radius: 0.1875rem; +} + +.navbar .logo-container { + width: 27px; + height: 27px; + overflow: hidden; + margin: 0 auto; + border-radius: 50%; + border: 1px solid transparent; +} + +.navbar .navbar-brand { + text-transform: uppercase; + font-size: 0.8571em; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + line-height: 1.625rem; +} + +.navbar .navbar-toggler { + width: 37px; + height: 27px; + outline: 0; + cursor: pointer; +} + +.navbar .navbar-toggler.navbar-toggler-left { + position: relative; + left: 0; + padding-left: 0; +} + +.navbar .navbar-toggler:hover .navbar-toggler-bar.bar2 { + width: 22px; +} + +.navbar .button-dropdown .navbar-toggler-bar:nth-child(2) { + width: 17px; +} + +.navbar.navbar-transparent { + background-color: transparent !important; + box-shadow: none; + color: #FFFFFF; + padding-top: 20px; +} + +.navbar.bg-white:not(.navbar-transparent) a:not(.dropdown-item) { + color: #888; +} + +.navbar.bg-white:not(.navbar-transparent) a:not(.dropdown-item).disabled { + opacity: .5; + color: #888; +} + +.navbar.bg-white:not(.navbar-transparent) .button-bar { + background: #888; +} + +.navbar.bg-white:not(.navbar-transparent) .nav-item.active .nav-link:not(.btn), +.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):focus, +.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):hover, +.navbar.bg-white:not(.navbar-transparent) .nav-item .nav-link:not(.btn):active { + background-color: rgba(222, 222, 222, 0.3); +} + +.navbar.bg-white:not(.navbar-transparent) .logo-container { + border: 1px solid #888; +} + +.bg-default { + background-color: #888 !important; +} + +.bg-primary { + background-color: #f96332 !important; +} + +.bg-info { + background-color: #2CA8FF !important; +} + +.bg-success { + background-color: #18ce0f !important; +} + +.bg-danger { + background-color: #FF3636 !important; +} + +.bg-warning { + background-color: #FFB236 !important; +} + +.bg-white { + background-color: #FFFFFF !important; +} + +.dropdown-menu { + border: 0; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); + border-radius: 0.125rem; + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; + font-size: 14px; +} + +.dropdown-menu.dropdown-menu-right:before { + left: auto; + right: 10px; +} + +.dropdown-menu:before { + display: inline-block; + position: absolute; + width: 0; + height: 0; + vertical-align: middle; + content: ""; + top: -5px; + left: 10px; + right: auto; + color: #FFFFFF; + border-bottom: .4em solid; + border-right: .4em solid transparent; + border-left: .4em solid transparent; +} + +.dropdown-menu .dropdown-item { + font-size: 0.8571em; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + -webkit-transition: all 150ms linear; + -moz-transition: all 150ms linear; + -o-transition: all 150ms linear; + -ms-transition: all 150ms linear; + transition: all 150ms linear; +} + +.dropdown-menu .dropdown-item:hover, +.dropdown-menu .dropdown-item:focus { + background-color: rgba(222, 222, 222, 0.3); +} + +.dropdown-menu .dropdown-divider { + background-color: rgba(222, 222, 222, 0.5); +} + +.dropdown-menu .dropdown-header:not([href]):not([tabindex]) { + color: rgba(182, 182, 182, 0.6); + font-size: 0.7142em; + text-transform: uppercase; + font-weight: 700; +} + +.dropdown-menu.dropdown-primary { + background-color: #f95823; +} + +.dropdown-menu.dropdown-primary:before { + color: #f95823; +} + +.dropdown-menu.dropdown-primary .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-primary .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-primary .dropdown-item:hover, +.dropdown-menu.dropdown-primary .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-primary .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-info { + background-color: #1da2ff; +} + +.dropdown-menu.dropdown-info:before { + color: #1da2ff; +} + +.dropdown-menu.dropdown-info .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-info .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-info .dropdown-item:hover, +.dropdown-menu.dropdown-info .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-info .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-danger { + background-color: #ff2727; +} + +.dropdown-menu.dropdown-danger:before { + color: #ff2727; +} + +.dropdown-menu.dropdown-danger .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-danger .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-danger .dropdown-item:hover, +.dropdown-menu.dropdown-danger .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-danger .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-success { + background-color: #16c00e; +} + +.dropdown-menu.dropdown-success:before { + color: #16c00e; +} + +.dropdown-menu.dropdown-success .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-success .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-success .dropdown-item:hover, +.dropdown-menu.dropdown-success .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-success .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-warning { + background-color: #ffac27; +} + +.dropdown-menu.dropdown-warning:before { + color: #ffac27; +} + +.dropdown-menu.dropdown-warning .dropdown-header:not([href]):not([tabindex]) { + color: rgba(255, 255, 255, 0.8); +} + +.dropdown-menu.dropdown-warning .dropdown-item { + color: #FFFFFF; +} + +.dropdown-menu.dropdown-warning .dropdown-item:hover, +.dropdown-menu.dropdown-warning .dropdown-item:focus { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown-menu.dropdown-warning .dropdown-divider { + background-color: rgba(255, 255, 255, 0.2); +} + +.dropdown .dropdown-menu { + -webkit-transform: translate3d(0, -25px, 0); + -moz-transform: translate3d(0, -25px, 0); + -o-transform: translate3d(0, -25px, 0); + -ms-transform: translate3d(0, -25px, 0); + transform: translate3d(0, -25px, 0); + visibility: hidden; + display: block; + opacity: 0; + filter: alpha(opacity=0); +} + +.dropdown.show .dropdown-menu, +.dropdown-menu.open { + opacity: 1; + filter: alpha(opacity=100); + visibility: visible; + -webkit-transform: translate3d(0, 0px, 0); + -moz-transform: translate3d(0, 0px, 0); + -o-transform: translate3d(0, 0px, 0); + -ms-transform: translate3d(0, 0px, 0); + transform: translate3d(0, 0px, 0); +} + +.navbar .dropdown.show .dropdown-menu { + -webkit-transform: translate3d(0, 7px, 0); + -moz-transform: translate3d(0, 7px, 0); + -o-transform: translate3d(0, 7px, 0); + -ms-transform: translate3d(0, 7px, 0); + transform: translate3d(0, 7px, 0); +} + +.button-dropdown { + padding-right: 0.7rem; + cursor: pointer; +} + +.button-dropdown .dropdown-toggle { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + display: block; +} + +.button-dropdown .dropdown-toggle:after { + display: none; +} + +.alert { + border: 0; + border-radius: 0; + color: #FFFFFF; + padding-top: .9rem; + padding-bottom: .9rem; + position: relative; +} + +.alert.alert-success { + background-color: rgba(24, 206, 15, 0.8); +} + +.alert.alert-danger { + background-color: rgba(255, 54, 54, 0.8); +} + +.alert.alert-warning { + background-color: rgba(255, 178, 54, 0.8); +} + +.alert.alert-info { + background-color: rgba(44, 168, 255, 0.8); +} + +.alert.alert-primary { + background-color: rgba(249, 99, 50, 0.8); +} + +.alert .alert-icon { + display: block; + float: left; + margin-right: 15px; + margin-top: -1px; +} + +.alert strong { + text-transform: uppercase; + font-size: 12px; +} + +.alert i.fa, +.alert i.now-ui-icons { + font-size: 20px; +} + +.alert .close { + color: #FFFFFF; + opacity: .9; + text-shadow: none; + line-height: 0; + outline: 0; +} + +img { + max-width: 100%; + border-radius: 1px; +} + +.img-raised { + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); +} + +.popover { + font-size: 14px; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.2); + border: none; + line-height: 1.7; + max-width: 240px; +} + +.popover.bs-popover-top .arrow:before, +.popover.bs-popover-left .arrow:before, +.popover.bs-popover-right .arrow:before, +.popover.bs-popover-bottom .arrow:before { + border-top-color: transparent; + border-left-color: transparent; + border-right-color: transparent; + border-bottom-color: transparent; +} + +.popover .popover-header { + color: rgba(182, 182, 182, 0.6); + font-size: 14px; + text-transform: capitalize; + font-weight: 600; + margin: 0; + margin-top: 5px; + border: none; + background-color: transparent; +} + +.popover:before { + display: none; +} + +.popover.bs-tether-element-attached-top:after { + border-bottom-color: #FFFFFF; + top: -9px; +} + +.popover.popover-primary { + background-color: #f96332; +} + +.popover.popover-primary .popover-body { + color: #FFFFFF; +} + +.popover.popover-primary.bs-popover-right .arrow:after { + border-right-color: #f96332; +} + +.popover.popover-primary.bs-popover-top .arrow:after { + border-top-color: #f96332; +} + +.popover.popover-primary.bs-popover-bottom .arrow:after { + border-bottom-color: #f96332; +} + +.popover.popover-primary.bs-popover-left .arrow:after { + border-left-color: #f96332; +} + +.popover.popover-primary .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-info { + background-color: #2CA8FF; +} + +.popover.popover-info .popover-body { + color: #FFFFFF; +} + +.popover.popover-info.bs-popover-right .arrow:after { + border-right-color: #2CA8FF; +} + +.popover.popover-info.bs-popover-top .arrow:after { + border-top-color: #2CA8FF; +} + +.popover.popover-info.bs-popover-bottom .arrow:after { + border-bottom-color: #2CA8FF; +} + +.popover.popover-info.bs-popover-left .arrow:after { + border-left-color: #2CA8FF; +} + +.popover.popover-info .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-warning { + background-color: #FFB236; +} + +.popover.popover-warning .popover-body { + color: #FFFFFF; +} + +.popover.popover-warning.bs-popover-right .arrow:after { + border-right-color: #FFB236; +} + +.popover.popover-warning.bs-popover-top .arrow:after { + border-top-color: #FFB236; +} + +.popover.popover-warning.bs-popover-bottom .arrow:after { + border-bottom-color: #FFB236; +} + +.popover.popover-warning.bs-popover-left .arrow:after { + border-left-color: #FFB236; +} + +.popover.popover-warning .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-danger { + background-color: #FF3636; +} + +.popover.popover-danger .popover-body { + color: #FFFFFF; +} + +.popover.popover-danger.bs-popover-right .arrow:after { + border-right-color: #FF3636; +} + +.popover.popover-danger.bs-popover-top .arrow:after { + border-top-color: #FF3636; +} + +.popover.popover-danger.bs-popover-bottom .arrow:after { + border-bottom-color: #FF3636; +} + +.popover.popover-danger.bs-popover-left .arrow:after { + border-left-color: #FF3636; +} + +.popover.popover-danger .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.popover.popover-success { + background-color: #18ce0f; +} + +.popover.popover-success .popover-body { + color: #FFFFFF; +} + +.popover.popover-success.bs-popover-right .arrow:after { + border-right-color: #18ce0f; +} + +.popover.popover-success.bs-popover-top .arrow:after { + border-top-color: #18ce0f; +} + +.popover.popover-success.bs-popover-bottom .arrow:after { + border-bottom-color: #18ce0f; +} + +.popover.popover-success.bs-popover-left .arrow:after { + border-left-color: #18ce0f; +} + +.popover.popover-success .popover-header { + color: #FFFFFF; + opacity: .6; +} + +.tooltip.bs-tooltip-right .arrow:before { + border-right-color: #FFFFFF; +} + +.tooltip.bs-tooltip-top .arrow:before { + border-top-color: #FFFFFF; +} + +.tooltip.bs-tooltip-bottom .arrow:before { + border-bottom-color: #FFFFFF; +} + +.tooltip.bs-tooltip-left .arrow:before { + border-left-color: #FFFFFF; +} + +.tooltip-inner { + padding: 0.5rem 0.7rem; + min-width: 130px; + background-color: #FFFFFF; + font-size: 14px; + color: inherit; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} + + +/* -------------------------------- + +Nucleo Outline Web Font - nucleoapp.com/ +License - nucleoapp.com/license/ +Created using IcoMoon - icomoon.io + +-------------------------------- */ + +@font-face { + font-family: 'Nucleo Outline'; + src: url("../fonts/nucleo-outline.eot"); + src: url("../fonts/nucleo-outline.eot") format("embedded-opentype"), url("../fonts/nucleo-outline.woff2") format("woff2"), url("../fonts/nucleo-outline.woff") format("woff"), url("../fonts/nucleo-outline.ttf") format("truetype"); + font-weight: normal; + font-style: normal; +} + + +/*------------------------ + base class definition +-------------------------*/ + +.now-ui-icons { + display: inline-block; + font: normal normal normal 14px/1 'Nucleo Outline'; + font-size: inherit; + speak: none; + text-transform: none; + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + + +/*------------------------ + change icon size +-------------------------*/ + + +/*---------------------------------- + add a square/circle background +-----------------------------------*/ + +.now-ui-icons.circle { + padding: 0.33333333em; + vertical-align: -16%; + background-color: #eee; +} + +.now-ui-icons.circle { + border-radius: 50%; +} + + +/*------------------------ + list icons +-------------------------*/ + +.nc-icon-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} + +.nc-icon-ul>li { + position: relative; +} + +.nc-icon-ul>li>.now-ui-icons { + position: absolute; + left: -1.57142857em; + top: 0.14285714em; + text-align: center; +} + +.nc-icon-ul>li>.now-ui-icons.circle { + top: -0.19047619em; + left: -1.9047619em; +} + + +/*------------------------ + spinning icons +-------------------------*/ + +.now-ui-icons.spin { + -webkit-animation: nc-icon-spin 2s infinite linear; + -moz-animation: nc-icon-spin 2s infinite linear; + animation: nc-icon-spin 2s infinite linear; +} + +@-webkit-keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + } +} + +@-moz-keyframes nc-icon-spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + } +} + +@keyframes nc-icon-spin { + 0% { + -webkit-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} + + +/*------------------------ + rotated/flipped icons +-------------------------*/ + + +/*------------------------ + font icons +-------------------------*/ + +.now-ui-icons.ui-1_check:before { + content: "\ea22"; +} + +.now-ui-icons.ui-1_email-85:before { + content: "\ea2a"; +} + +.now-ui-icons.arrows-1_cloud-download-93:before { + content: "\ea21"; +} + +.now-ui-icons.arrows-1_cloud-upload-94:before { + content: "\ea24"; +} + +.now-ui-icons.arrows-1_minimal-down:before { + content: "\ea39"; +} + +.now-ui-icons.arrows-1_minimal-left:before { + content: "\ea3a"; +} + +.now-ui-icons.arrows-1_minimal-right:before { + content: "\ea3b"; +} + +.now-ui-icons.arrows-1_minimal-up:before { + content: "\ea3c"; +} + +.now-ui-icons.arrows-1_refresh-69:before { + content: "\ea44"; +} + +.now-ui-icons.arrows-1_share-66:before { + content: "\ea4c"; +} + +.now-ui-icons.business_badge:before { + content: "\ea09"; +} + +.now-ui-icons.business_bank:before { + content: "\ea0a"; +} + +.now-ui-icons.business_briefcase-24:before { + content: "\ea13"; +} + +.now-ui-icons.business_bulb-63:before { + content: "\ea15"; +} + +.now-ui-icons.business_chart-bar-32:before { + content: "\ea1e"; +} + +.now-ui-icons.business_chart-pie-36:before { + content: "\ea1f"; +} + +.now-ui-icons.business_globe:before { + content: "\ea2f"; +} + +.now-ui-icons.business_money-coins:before { + content: "\ea40"; +} + +.now-ui-icons.clothes_tie-bow:before { + content: "\ea5b"; +} + +.now-ui-icons.design_vector:before { + content: "\ea61"; +} + +.now-ui-icons.design_app:before { + content: "\ea08"; +} + +.now-ui-icons.design_bullet-list-67:before { + content: "\ea14"; +} + +.now-ui-icons.design_image:before { + content: "\ea33"; +} + +.now-ui-icons.design_palette:before { + content: "\ea41"; +} + +.now-ui-icons.design_scissors:before { + content: "\ea4a"; +} + +.now-ui-icons.design-2_html5:before { + content: "\ea32"; +} + +.now-ui-icons.design-2_ruler-pencil:before { + content: "\ea48"; +} + +.now-ui-icons.emoticons_satisfied:before { + content: "\ea49"; +} + +.now-ui-icons.files_box:before { + content: "\ea12"; +} + +.now-ui-icons.files_paper:before { + content: "\ea43"; +} + +.now-ui-icons.files_single-copy-04:before { + content: "\ea52"; +} + +.now-ui-icons.health_ambulance:before { + content: "\ea07"; +} + +.now-ui-icons.loader_gear:before { + content: "\ea4e"; +} + +.now-ui-icons.loader_refresh:before { + content: "\ea44"; +} + +.now-ui-icons.location_bookmark:before { + content: "\ea10"; +} + +.now-ui-icons.location_compass-05:before { + content: "\ea25"; +} + +.now-ui-icons.location_map-big:before { + content: "\ea3d"; +} + +.now-ui-icons.location_pin:before { + content: "\ea47"; +} + +.now-ui-icons.location_world:before { + content: "\ea63"; +} + +.now-ui-icons.media-1_album:before { + content: "\ea02"; +} + +.now-ui-icons.media-1_button-pause:before { + content: "\ea16"; +} + +.now-ui-icons.media-1_button-play:before { + content: "\ea18"; +} + +.now-ui-icons.media-1_button-power:before { + content: "\ea19"; +} + +.now-ui-icons.media-1_camera-compact:before { + content: "\ea1c"; +} + +.now-ui-icons.media-2_note-03:before { + content: "\ea3f"; +} + +.now-ui-icons.media-2_sound-wave:before { + content: "\ea57"; +} + +.now-ui-icons.objects_diamond:before { + content: "\ea29"; +} + +.now-ui-icons.objects_globe:before { + content: "\ea2f"; +} + +.now-ui-icons.objects_key-25:before { + content: "\ea38"; +} + +.now-ui-icons.objects_planet:before { + content: "\ea46"; +} + +.now-ui-icons.objects_spaceship:before { + content: "\ea55"; +} + +.now-ui-icons.objects_support-17:before { + content: "\ea56"; +} + +.now-ui-icons.objects_umbrella-13:before { + content: "\ea5f"; +} + +.now-ui-icons.education_agenda-bookmark:before { + content: "\ea01"; +} + +.now-ui-icons.education_atom:before { + content: "\ea0c"; +} + +.now-ui-icons.education_glasses:before { + content: "\ea2d"; +} + +.now-ui-icons.education_hat:before { + content: "\ea30"; +} + +.now-ui-icons.education_paper:before { + content: "\ea42"; +} + +.now-ui-icons.shopping_bag-16:before { + content: "\ea0d"; +} + +.now-ui-icons.shopping_basket:before { + content: "\ea0b"; +} + +.now-ui-icons.shopping_box:before { + content: "\ea11"; +} + +.now-ui-icons.shopping_cart-simple:before { + content: "\ea1d"; +} + +.now-ui-icons.shopping_credit-card:before { + content: "\ea28"; +} + +.now-ui-icons.shopping_delivery-fast:before { + content: "\ea27"; +} + +.now-ui-icons.shopping_shop:before { + content: "\ea50"; +} + +.now-ui-icons.shopping_tag-content:before { + content: "\ea59"; +} + +.now-ui-icons.sport_trophy:before { + content: "\ea5d"; +} + +.now-ui-icons.sport_user-run:before { + content: "\ea60"; +} + +.now-ui-icons.tech_controller-modern:before { + content: "\ea26"; +} + +.now-ui-icons.tech_headphones:before { + content: "\ea31"; +} + +.now-ui-icons.tech_laptop:before { + content: "\ea36"; +} + +.now-ui-icons.tech_mobile:before { + content: "\ea3e"; +} + +.now-ui-icons.tech_tablet:before { + content: "\ea58"; +} + +.now-ui-icons.tech_tv:before { + content: "\ea5e"; +} + +.now-ui-icons.tech_watch-time:before { + content: "\ea62"; +} + +.now-ui-icons.text_align-center:before { + content: "\ea05"; +} + +.now-ui-icons.text_align-left:before { + content: "\ea06"; +} + +.now-ui-icons.text_bold:before { + content: "\ea0e"; +} + +.now-ui-icons.text_caps-small:before { + content: "\ea1b"; +} + +.now-ui-icons.gestures_tap-01:before { + content: "\ea5a"; +} + +.now-ui-icons.transportation_air-baloon:before { + content: "\ea03"; +} + +.now-ui-icons.transportation_bus-front-12:before { + content: "\ea17"; +} + +.now-ui-icons.travel_info:before { + content: "\ea04"; +} + +.now-ui-icons.travel_istanbul:before { + content: "\ea34"; +} + +.now-ui-icons.ui-1_bell-53:before { + content: "\ea0f"; +} + +.now-ui-icons.ui-1_calendar-60:before { + content: "\ea1a"; +} + +.now-ui-icons.ui-1_lock-circle-open:before { + content: "\ea35"; +} + +.now-ui-icons.ui-1_send:before { + content: "\ea4d"; +} + +.now-ui-icons.ui-1_settings-gear-63:before { + content: "\ea4e"; +} + +.now-ui-icons.ui-1_simple-add:before { + content: "\ea4f"; +} + +.now-ui-icons.ui-1_simple-delete:before { + content: "\ea54"; +} + +.now-ui-icons.ui-1_simple-remove:before { + content: "\ea53"; +} + +.now-ui-icons.ui-1_zoom-bold:before { + content: "\ea64"; +} + +.now-ui-icons.ui-2_chat-round:before { + content: "\ea20"; +} + +.now-ui-icons.ui-2_favourite-28:before { + content: "\ea2b"; +} + +.now-ui-icons.ui-2_like:before { + content: "\ea37"; +} + +.now-ui-icons.ui-2_settings-90:before { + content: "\ea4b"; +} + +.now-ui-icons.ui-2_time-alarm:before { + content: "\ea5c"; +} + +.now-ui-icons.users_circle-08:before { + content: "\ea23"; +} + +.now-ui-icons.users_single-02:before { + content: "\ea51"; +} + +.modal-content { + border-radius: 0.1875rem; + border: none; + box-shadow: 0px 10px 50px 0px rgba(0, 0, 0, 0.5); +} + +.modal-content .modal-header { + border-bottom: none; + padding-top: 24px; + padding-right: 24px; + padding-bottom: 0; + padding-left: 24px; +} + +.modal-content .modal-header button { + position: absolute; + right: 27px; + top: 30px; + outline: 0; +} + +.modal-content .modal-header .title { + margin-top: 5px; + margin-bottom: 0; +} + +.modal-content .modal-body { + padding-top: 24px; + padding-right: 24px; + padding-bottom: 16px; + padding-left: 24px; + line-height: 1.9; +} + +.modal-content .modal-footer { + border-top: none; + padding-right: 24px; + padding-bottom: 16px; + padding-left: 24px; + -webkit-justify-content: space-between; + /* Safari 6.1+ */ + justify-content: space-between; +} + +.modal-content .modal-footer button { + margin: 0; + padding-left: 16px; + padding-right: 16px; + width: auto; +} + +.modal-content .modal-footer button.pull-left { + padding-left: 5px; + padding-right: 5px; + position: relative; + left: -5px; +} + +.modal-content .modal-body+.modal-footer { + padding-top: 0; +} + +.modal-backdrop { + background: rgba(0, 0, 0, 0.3); +} + +.modal.modal-mini p { + text-align: center; +} + +.modal.modal-mini .modal-dialog { + max-width: 255px; + margin: 0 auto; +} + +.modal.modal-mini .modal-profile { + width: 70px; + height: 70px; + background-color: #FFFFFF; + border-radius: 50%; + text-align: center; + line-height: 5.9; + box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.3); +} + +.modal.modal-mini .modal-profile i { + color: #f96332; + font-size: 21px; +} + +.modal.modal-mini .modal-profile[class*="modal-profile-"] i { + color: #FFFFFF; +} + +.modal.modal-mini .modal-profile.modal-profile-primary { + background-color: #f96332; +} + +.modal.modal-mini .modal-profile.modal-profile-danger { + background-color: #FF3636; +} + +.modal.modal-mini .modal-profile.modal-profile-warning { + background-color: #FFB236; +} + +.modal.modal-mini .modal-profile.modal-profile-success { + background-color: #18ce0f; +} + +.modal.modal-mini .modal-profile.modal-profile-info { + background-color: #2CA8FF; +} + +.modal.modal-mini .modal-footer button { + text-transform: uppercase; +} + +.modal.modal-mini .modal-footer button:first-child { + opacity: .5; +} + +.modal.modal-default .modal-content { + background-color: #FFFFFF; + color: #2c2c2c; +} + +.modal.modal-default .modal-header .close { + color: #2c2c2c; +} + +.modal.modal-primary .modal-content { + background-color: #f96332; + color: #FFFFFF; +} + +.modal.modal-primary .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-danger .modal-content { + background-color: #FF3636; + color: #FFFFFF; +} + +.modal.modal-danger .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-warning .modal-content { + background-color: #FFB236; + color: #FFFFFF; +} + +.modal.modal-warning .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-success .modal-content { + background-color: #18ce0f; + color: #FFFFFF; +} + +.modal.modal-success .modal-header .close { + color: #FFFFFF; +} + +.modal.modal-info .modal-content { + background-color: #2CA8FF; + color: #FFFFFF; +} + +.modal.modal-info .modal-header .close { + color: #FFFFFF; +} + +.modal.show.modal-mini .modal-dialog { + -webkit-transform: translate(0, 30%); + -o-transform: translate(0, 30%); + transform: translate(0, 30%); +} + +.modal .modal-header .close { + color: #FF3636; + text-shadow: none; +} + +.modal .modal-header .close:hover, +.modal .modal-header .close:focus { + opacity: 1; +} + +.carousel-item-next, +.carousel-item-prev, +.carousel-item.active { + display: block; +} + +.carousel .carousel-inner { + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); +} + +.carousel .now-ui-icons { + font-size: 2em; +} + +.card { + border: 0; + border-radius: 0.1875rem; + display: inline-block; + position: relative; + overflow: hidden; + width: 100%; + margin-bottom: 20px; + box-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.2); +} + +.card .card-body { + min-height: 190px; +} + +.card[data-background-color="orange"] { + background-color: #f96332; +} + +.card[data-background-color="red"] { + background-color: #FF3636; +} + +.card[data-background-color="yellow"] { + background-color: #FFB236; +} + +.card[data-background-color="blue"] { + background-color: #2CA8FF; +} + +.card[data-background-color="green"] { + background-color: #18ce0f; +} + +.card-signup { + max-width: 350px; + margin: 0 auto; +} + +.card-signup .header { + margin-left: 20px; + margin-right: 20px; + padding: 30px 0; +} + +.card-signup .text-divider { + margin-top: 30px; + margin-bottom: 0px; + text-align: center; +} + +.card-signup .card-body { + padding-top: 0px; + padding-bottom: 0px; + min-height: auto; +} + +.card-signup .checkbox { + margin-top: 20px; +} + +.card-signup .checkbox label { + margin-left: 17px; +} + +.card-signup .checkbox .checkbox-material { + padding-right: 12px; +} + +.card-signup .social-line { + margin-top: 20px; + text-align: center; +} + +.card-signup .social-line .btn.btn-icon, +.card-signup .social-line .btn.btn-icon .btn-icon -mini { + margin-left: 5px; + margin-right: 5px; + box-shadow: 0px 5px 50px 0px rgba(0, 0, 0, 0.2); +} + +.card-signup .footer { + margin-bottom: 10px; + margin-top: 24px; +} + +.card-plain { + background: transparent; + box-shadow: none; +} + +.card-plain .header { + margin-left: 0; + margin-right: 0; +} + +.card-plain .content { + padding-left: 0; + padding-right: 0; +} + +.footer { + padding: 24px 0; +} + +.footer.footer-default { + background-color: #f2f2f2; +} + +.footer nav { + display: inline-block; + float: left; +} + +.footer ul { + margin-bottom: 0; + padding: 0; + list-style: none; +} + +.footer ul li { + display: inline-block; +} + +.footer ul li a { + color: inherit; + padding: 0.5rem; + font-size: 0.8571em; + text-transform: uppercase; + text-decoration: none; +} + +.footer ul li a:hover { + text-decoration: none; +} + +.footer .copyright { + font-size: 0.8571em; +} + +.footer:after { + display: table; + clear: both; + content: " "; +} + +.index-page .page-header { + height: 100vh; +} + +.index-page .page-header .container>.content-center { + top: 37%; +} + +.index-page .page-header .category-absolute { + position: absolute; + top: 100vh; + margin-top: -60px; + padding: 0 15px; + width: 100%; + color: rgba(255, 255, 255, 0.5); +} + +.landing-page .header { + height: 100vh; + position: relative; +} + +.landing-page .header .container { + padding-top: 26vh; + color: #FFFFFF; + z-index: 2; + position: relative; +} + +.landing-page .header .share { + margin-top: 150px; +} + +.landing-page .header h1 { + font-weight: 600; +} + +.landing-page .header .title { + color: #FFFFFF; +} + +.landing-page .section-team .team .team-player img { + max-width: 100px; +} + +.landing-page .section-team .team-player { + margin-bottom: 15px; +} + +.landing-page .section-contact-us .title { + margin-bottom: 15px; +} + +.landing-page .section-contact-us .description { + margin-bottom: 30px; +} + +.landing-page .section-contact-us .input-group, +.landing-page .section-contact-us .send-button, +.landing-page .section-contact-us .textarea-container { + padding: 0 40px; +} + +.landing-page .section-contact-us .textarea-container { + margin: 40px 0; +} + +.landing-page .section-contact-us a.btn { + margin-top: 35px; +} + +.profile-page .page-header { + min-height: 550px; +} + +.profile-page .profile-container { + color: #FFFFFF; +} + +.profile-page .photo-container { + width: 123px; + height: 123px; + border-radius: 50%; + overflow: hidden; + margin: 0 auto; + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); +} + +.profile-page .title { + text-align: center; + margin-top: 30px; +} + +.profile-page .description, +.profile-page .category { + text-align: center; +} + +.profile-page h5.description { + max-width: 700px; + margin: 20px auto 75px; +} + +.profile-page .nav-align-center { + margin-top: 30px; +} + +.profile-page .content { + max-width: 450px; + margin: 0 auto; +} + +.profile-page .content .social-description { + display: inline-block; + max-width: 150px; + width: 145px; + text-align: center; + margin: 15px 0 0px; +} + +.profile-page .content .social-description h2 { + margin-bottom: 15px; +} + +.profile-page .button-container { + text-align: center; + margin-top: -106px; +} + +.profile-page .collections img { + margin-bottom: 30px; +} + +.profile-page .gallery { + margin-top: 45px; + padding-bottom: 50px; +} + +.section-full-page:after, +.section-full-page:before { + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 2; +} + +.section-full-page:before { + background-color: rgba(0, 0, 0, 0.5); +} + +.section-full-page[filter-color="purple"]:after, +.section-full-page[filter-color="primary"]:after { + background: rgba(227, 227, 227, 0.26); + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* Standard syntax */ +} + +.section-full-page[data-image]:after { + opacity: .5; +} + +.section-full-page>.content, +.section-full-page>.footer { + position: relative; + z-index: 4; +} + +.section-full-page>.content { + min-height: calc(100vh - 80px); +} + +.section-full-page .full-page-background { + position: absolute; + z-index: 1; + height: 100%; + width: 100%; + display: block; + top: 0; + left: 0; + background-size: cover; + background-position: center center; +} + +.section-full-page .footer nav>ul a:not(.btn), +.section-full-page .footer, +.section-full-page .footer .copyright a { + color: #FFFFFF; +} + +.login-page .card-login { + border-radius: 0.25rem; + padding-bottom: 0.7rem; + max-width: 320px; +} + +.login-page .card-login .btn-wd { + min-width: 180px; +} + +.login-page .card-login .logo-container { + width: 65px; + margin: 0 auto; + margin-bottom: 55px; +} + +.login-page .card-login .logo-container img { + width: 100%; +} + +.login-page .card-login .input-group:last-child { + margin-bottom: 40px; +} + +.login-page .card-login.card-plain .form-control::-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control:-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control::-webkit-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control:-ms-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +.login-page .card-login.card-plain .form-control { + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-control:focus { + border-color: #FFFFFF; + background-color: transparent; + color: #FFFFFF; +} + +.login-page .card-login.card-plain .has-success:after, +.login-page .card-login.card-plain .has-danger:after { + color: #FFFFFF; +} + +.login-page .card-login.card-plain .has-danger .form-control { + background-color: transparent; +} + +.login-page .card-login.card-plain .input-group-addon { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .input-group-focus .input-group-addon { + background-color: transparent; + border-color: #FFFFFF; + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control { + background-color: rgba(255, 255, 255, 0.1); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:focus, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:active, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:focus, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon { + background-color: rgba(255, 255, 255, 0.1); +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon:focus, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon:active, +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control+.input-group-addon:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon:focus, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon:active, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control+.input-group-addon:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .form-control:focus+.input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .form-control:focus+.input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border .input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .input-group-addon { + background-color: rgba(255, 255, 255, 0.1); + border: none; + color: #FFFFFF; +} + +.login-page .card-login.card-plain .form-group.form-group-no-border.input-group-focus .input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border.input-group-focus .input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +.login-page .card-login.card-plain .input-group-addon, +.login-page .card-login.card-plain .form-group.form-group-no-border .input-group-addon, +.login-page .card-login.card-plain .input-group.form-group-no-border .input-group-addon { + color: rgba(255, 255, 255, 0.8); +} + +.login-page .link { + font-size: 10px; + color: #FFFFFF; + text-decoration: none; +} + +.section { + padding: 70px 0; + position: relative; + background: #FFFFFF; +} + +.section .row+.category { + margin-top: 15px; +} + +.section-navbars { + padding-bottom: 0; +} + +.section-full-screen { + height: 100vh; +} + +.section-signup { + padding-top: 20vh; +} + +.page-header { + height: 100vh; + max-height: 1050px; + padding: 0; + position: relative; + background-position: center center; + background-size: cover; +} + +.page-header .page-header-image { + position: absolute; + background-size: cover; + background-position: center center; + width: 100%; + height: 100%; + z-index: -1; +} + +.page-header footer { + position: absolute; + bottom: 0; + width: 100%; +} + +.page-header .container { + height: 100%; + z-index: 1; + text-align: center; + position: relative; +} + +.page-header .container>.content-center { + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + text-align: center; + padding: 0 15px; + width: 100%; + max-width: 880px; +} + +.page-header .category, +.page-header .description { + color: rgba(255, 255, 255, 0.5); +} + +.page-header.page-header-small { + height: 60vh; + max-height: 440px; +} + +.page-header:after, +.page-header:before { + position: absolute; + z-index: 0; + width: 100%; + height: 100%; + display: block; + left: 0; + top: 0; + content: ""; +} + +.page-header:before { + background-color: rgba(0, 0, 0, 0.5); +} + +.page-header[filter-color="orange"] { + background: rgba(44, 44, 44, 0.2); + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, rgba(44, 44, 44, 0.2), rgba(224, 23, 3, 0.6)); + /* Standard syntax */ +} +.page-header[filter-color="primary"] { + background: rgba(227, 227, 227, 0.26); + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(90deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(0deg, rgba(227, 227, 227, 0.26), rgba(249, 99, 50, 0.95)); + /* Standard syntax */ +} +.page-header .container { + z-index: 2; +} + +.clear-filter:after, +.clear-filter:before { + display: none; +} + +.section-story-overview { + padding: 50px 0; +} + +.section-story-overview .image-container { + height: 335px; + position: relative; + background-position: center center; + background-size: cover; + box-shadow: 0px 10px 25px 0px rgba(0, 0, 0, 0.3); + border-radius: .25rem; +} + +.section-story-overview .image-container+.category { + padding-top: 15px; +} + +.section-story-overview .image-container.image-right { + z-index: 2; +} + +.section-story-overview .image-container.image-right+h3.title { + margin-top: 120px; +} + +.section-story-overview .image-container.image-left { + z-index: 1; +} + +.section-story-overview .image-container:nth-child(2) { + margin-top: 420px; + margin-left: -105px; +} + +.section-story-overview p.blockquote { + width: 220px; + min-height: 180px; + text-align: left; + position: absolute; + top: 376px; + right: 155px; + z-index: 0; +} + +.section-nucleo-icons .nucleo-container img { + width: auto; + left: 0; + top: 0; + height: 100%; + position: absolute; +} + +.section-nucleo-icons .nucleo-container { + height: 335px; + position: relative; +} + +.section-nucleo-icons h5 { + margin-bottom: 35px; +} + +.section-nucleo-icons .icons-container { + position: relative; + max-width: 450px; + height: 300px; + max-height: 300px; + margin: 0 auto; +} + +.section-nucleo-icons .icons-container i { + font-size: 34px; + position: absolute; + left: 0; + top: 0; +} + +.section-nucleo-icons .icons-container i:nth-child(1) { + top: 5%; + left: 7%; +} + +.section-nucleo-icons .icons-container i:nth-child(2) { + top: 28%; + left: 24%; +} + +.section-nucleo-icons .icons-container i:nth-child(3) { + top: 40%; +} + +.section-nucleo-icons .icons-container i:nth-child(4) { + top: 18%; + left: 62%; +} + +.section-nucleo-icons .icons-container i:nth-child(5) { + top: 74%; + left: 3%; +} + +.section-nucleo-icons .icons-container i:nth-child(6) { + top: 36%; + left: 44%; + font-size: 65px; + color: #f96332; + padding: 1px; +} + +.section-nucleo-icons .icons-container i:nth-child(7) { + top: 59%; + left: 26%; +} + +.section-nucleo-icons .icons-container i:nth-child(8) { + top: 60%; + left: 69%; +} + +.section-nucleo-icons .icons-container i:nth-child(9) { + top: 72%; + left: 47%; +} + +.section-nucleo-icons .icons-container i:nth-child(10) { + top: 88%; + left: 27%; +} + +.section-nucleo-icons .icons-container i:nth-child(11) { + top: 31%; + left: 80%; +} + +.section-nucleo-icons .icons-container i:nth-child(12) { + top: 88%; + left: 68%; +} + +.section-nucleo-icons .icons-container i:nth-child(13) { + top: 5%; + left: 81%; +} + +.section-nucleo-icons .icons-container i:nth-child(14) { + top: 58%; + left: 90%; +} + +.section-nucleo-icons .icons-container i:nth-child(15) { + top: 6%; + left: 40%; +} + +.section-images { + max-height: 670px; + height: 670px; +} + +.section-images .hero-images-container, +.section-images .hero-images-container-1, +.section-images .hero-images-container-2 { + margin-top: -38vh; +} + +.section-images .hero-images-container { + max-width: 670px; +} + +.section-images .hero-images-container-1 { + max-width: 390px; + position: absolute; + top: 55%; + right: 18%; +} + +.section-images .hero-images-container-2 { + max-width: 225px; + position: absolute; + top: 68%; + right: 12%; +} + +[data-background-color="orange"] { + background-color: #e95e38; +} + +[data-background-color="black"] { + background-color: #2c2c2c; +} + +[data-background-color] { + color: #FFFFFF; +} + +[data-background-color] .title, +[data-background-color] .social-description h2, +[data-background-color] p, +[data-background-color] p.blockquote, +[data-background-color] p.blockquote small, +[data-background-color] h1, +[data-background-color] h2, +[data-background-color] h3, +[data-background-color] h4, +[data-background-color] h5, +[data-background-color] h6, +[data-background-color] a:not(.btn):not(.dropdown-item), +[data-background-color] .icons-container i { + color: #FFFFFF; +} + +[data-background-color] .separator { + background-color: #FFFFFF; +} + +[data-background-color] .navbar.bg-white p { + color: #888; +} + +[data-background-color] .description, +[data-background-color] .social-description p { + color: rgba(255, 255, 255, 0.8); +} + +[data-background-color] p.blockquote { + border-color: rgba(255, 255, 255, 0.2); +} + +[data-background-color] .checkbox label::before, +[data-background-color] .checkbox label::after, +[data-background-color] .radio label::before, +[data-background-color] .radio label::after { + border-color: rgba(255, 255, 255, 0.2); +} + +[data-background-color] .checkbox label::after, +[data-background-color] .checkbox label, +[data-background-color] .radio label { + color: #FFFFFF; +} + +[data-background-color] .checkbox input[type="checkbox"]:disabled+label, +[data-background-color] .radio input[type="radio"]:disabled+label { + color: #FFFFFF; +} + +[data-background-color] .radio input[type="radio"]:not(:disabled):hover+label::after, +[data-background-color] .radio input[type="radio"]:checked+label::after { + background-color: #FFFFFF; + border-color: #FFFFFF; +} + +[data-background-color] .form-control::-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control:-moz-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control::-webkit-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control:-ms-input-placeholder { + color: #ebebeb; + opacity: 1; + filter: alpha(opacity=100); +} + +[data-background-color] .form-control { + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +[data-background-color] .form-control:focus { + border-color: #FFFFFF; + background-color: transparent; + color: #FFFFFF; +} + +[data-background-color] .has-success:after, +[data-background-color] .has-danger:after { + color: #FFFFFF; +} + +[data-background-color] .has-danger .form-control { + background-color: transparent; +} + +[data-background-color] .input-group-addon { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +[data-background-color] .input-group-focus .input-group-addon { + background-color: transparent; + border-color: #FFFFFF; + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control, +[data-background-color] .input-group.form-group-no-border .form-control { + background-color: rgba(255, 255, 255, 0.1); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control:focus, +[data-background-color] .form-group.form-group-no-border .form-control:active, +[data-background-color] .form-group.form-group-no-border .form-control:active, +[data-background-color] .input-group.form-group-no-border .form-control:focus, +[data-background-color] .input-group.form-group-no-border .form-control:active, +[data-background-color] .input-group.form-group-no-border .form-control:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon { + background-color: rgba(255, 255, 255, 0.1); +} + +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon:focus, +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon:active, +[data-background-color] .form-group.form-group-no-border .form-control+.input-group-addon:active, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon:focus, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon:active, +[data-background-color] .input-group.form-group-no-border .form-control+.input-group-addon:active { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .form-control:focus+.input-group-addon, +[data-background-color] .input-group.form-group-no-border .form-control:focus+.input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border .input-group-addon, +[data-background-color] .input-group.form-group-no-border .input-group-addon { + background-color: rgba(255, 255, 255, 0.1); + border: none; + color: #FFFFFF; +} + +[data-background-color] .form-group.form-group-no-border.input-group-focus .input-group-addon, +[data-background-color] .input-group.form-group-no-border.input-group-focus .input-group-addon { + background-color: rgba(255, 255, 255, 0.2); + color: #FFFFFF; +} + +[data-background-color] .input-group-addon, +[data-background-color] .form-group.form-group-no-border .input-group-addon, +[data-background-color] .input-group.form-group-no-border .input-group-addon { + color: rgba(255, 255, 255, 0.8); +} + +[data-background-color] .btn.btn-simple { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.5); + color: #FFFFFF; +} + +[data-background-color] .btn.btn-simple:hover, +[data-background-color] .btn.btn-simple:hover, +[data-background-color] .btn.btn-simple:focus, +[data-background-color] .btn.btn-simple:active { + background-color: transparent; + border-color: #FFFFFF; +} + +[data-background-color] .nav-tabs>.nav-item>.nav-link i.now-ui-icons { + color: #FFFFFF; +} + +[data-background-color].section-nucleo-icons .icons-container i:nth-child(6) { + color: #FFFFFF; +} + +@media screen and (max-width: 991px) { + .sidebar-collapse .navbar-collapse { + position: fixed; + display: block; + top: 0; + height: 100% !important; + width: 300px; + right: 0; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + max-height: none !important; + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse .navbar-collapse:before { + background: #f96332; + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(#f96332 0%, #000 80%); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(#f96332 0%, #000 80%); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(#f96332 0%, #000 80%); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(#f96332 0%, #000 80%); + /* Standard syntax (must be last) */ + opacity: 0.76; + filter: alpha(opacity=76); + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: -1; + } + .sidebar-collapse .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link { + margin: 0 1rem; + margin-top: 0.3125rem; + } + .sidebar-collapse .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link:not(.btn) { + color: #FFFFFF; + } + .sidebar-collapse .navbar-collapse .dropdown-menu .dropdown-item { + color: #FFFFFF; + } + .sidebar-collapse .navbar .navbar-nav { + margin-top: 53px; + } + .sidebar-collapse .navbar .navbar-nav .nav-link { + padding-top: 0.75rem; + padding-bottom: .75rem; + } + .sidebar-collapse .navbar .navbar-nav.navbar-logo { + top: 0; + height: 53px; + } + .sidebar-collapse .navbar .dropdown.show .dropdown-menu, + .sidebar-collapse .navbar .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + } + .sidebar-collapse .navbar .dropdown.show .dropdown-menu:before, + .sidebar-collapse .navbar .dropdown .dropdown-menu:before { + display: none; + } + .sidebar-collapse .navbar .dropdown .dropdown-item { + padding-left: 2.5rem; + } + .sidebar-collapse .navbar .dropdown .dropdown-menu { + display: none; + } + .sidebar-collapse .navbar .dropdown.show .dropdown-menu { + display: block; + } + .sidebar-collapse .navbar .dropdown-menu .dropdown-item:focus, + .sidebar-collapse .navbar .dropdown-menu .dropdown-item:hover { + color: #FFFFFF; + } + .sidebar-collapse .navbar .navbar-translate { + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse .navbar .navbar-toggler-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; + } + .sidebar-collapse .navbar .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 7px; + } + .sidebar-collapse .navbar .navbar-toggler-bar.bar2 { + width: 17px; + transition: width .2s linear; + } + .sidebar-collapse .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar { + background: #888; + } + .sidebar-collapse .navbar .toggled .navbar-toggler-bar { + width: 24px; + } + .sidebar-collapse .navbar .toggled .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 5px; + } + .sidebar-collapse .bar1, + .sidebar-collapse .bar2, + .sidebar-collapse .bar3 { + outline: 1px solid transparent; + } + .sidebar-collapse .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .sidebar-collapse .bar2 { + opacity: 1; + } + .sidebar-collapse .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .sidebar-collapse .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .sidebar-collapse .toggled .bar2 { + opacity: 0; + } + .sidebar-collapse .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .sidebar-collapse [class*="navbar-expand-"] .navbar-collapse { + width: 300px; + } + .sidebar-collapse .wrapper { + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse #bodyClick { + height: 100%; + width: 100%; + position: fixed; + opacity: 1; + top: 0; + left: auto; + right: 300px; + content: ""; + z-index: 9999; + overflow-x: hidden; + background-color: transparent; + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .sidebar-collapse.menu-on-left .navbar-collapse { + right: auto; + left: 0; + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .nav-open .sidebar-collapse .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .sidebar-collapse .wrapper { + -webkit-transform: translate3d(-150px, 0, 0); + -moz-transform: translate3d(-150px, 0, 0); + -o-transform: translate3d(-150px, 0, 0); + -ms-transform: translate3d(-150px, 0, 0); + transform: translate3d(-150px, 0, 0); + } + .nav-open .sidebar-collapse .navbar-translate { + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left .navbar-translate { + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left .wrapper { + -webkit-transform: translate3d(150px, 0, 0); + -moz-transform: translate3d(150px, 0, 0); + -o-transform: translate3d(150px, 0, 0); + -ms-transform: translate3d(150px, 0, 0); + transform: translate3d(150px, 0, 0); + } + .nav-open .sidebar-collapse.menu-on-left #bodyClick { + right: auto; + left: 300px; + } + .bootstrap-collapse .navbar .navbar-collapse { + background: none !important; + } + .bootstrap-collapse .navbar .navbar-nav { + margin-top: 53px; + } + .bootstrap-collapse .navbar .navbar-nav .nav-link { + padding-top: 0.75rem; + padding-bottom: .75rem; + } + .bootstrap-collapse .navbar .navbar-nav.navbar-logo { + top: 0; + height: 53px; + } + .bootstrap-collapse .navbar .dropdown.show .dropdown-menu, + .bootstrap-collapse .navbar .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + } + .bootstrap-collapse .navbar .dropdown.show .dropdown-menu:before, + .bootstrap-collapse .navbar .dropdown .dropdown-menu:before { + display: none; + } + .bootstrap-collapse .navbar .dropdown .dropdown-item { + padding-left: 2.5rem; + } + .bootstrap-collapse .navbar .dropdown .dropdown-menu { + display: none; + } + .bootstrap-collapse .navbar .dropdown.show .dropdown-menu { + display: block; + } + .bootstrap-collapse .navbar .dropdown-menu .dropdown-item:focus, + .bootstrap-collapse .navbar .dropdown-menu .dropdown-item:hover { + color: #FFFFFF; + } + .bootstrap-collapse .navbar .navbar-translate { + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .bootstrap-collapse .navbar .navbar-toggler-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; + } + .bootstrap-collapse .navbar .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 7px; + } + .bootstrap-collapse .navbar .navbar-toggler-bar.bar2 { + width: 17px; + transition: width .2s linear; + } + .bootstrap-collapse .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar { + background: #888; + } + .bootstrap-collapse .navbar .toggled .navbar-toggler-bar { + width: 24px; + } + .bootstrap-collapse .navbar .toggled .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 5px; + } + .bootstrap-collapse .bar1, + .bootstrap-collapse .bar2, + .bootstrap-collapse .bar3 { + outline: 1px solid transparent; + } + .bootstrap-collapse .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .bootstrap-collapse .bar2 { + opacity: 1; + } + .bootstrap-collapse .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .bootstrap-collapse .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .bootstrap-collapse .toggled .bar2 { + opacity: 0; + } + .bootstrap-collapse .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .profile-photo .profile-photo-small { + margin-left: -2px; + } + .button-dropdown { + display: none; + } + .section-nucleo-icons .container .row>[class*="col-"]:first-child { + text-align: center; + } + .footer .copyright { + text-align: right; + } + .section-nucleo-icons .icons-container { + margin-top: 65px; + } + .navbar-nav .nav-link i.fa, + .navbar-nav .nav-link i.now-ui-icons { + opacity: .5; + } + .section-images { + height: 500px; + max-height: 500px; + } + .section-images .hero-images-container { + max-width: 500px; + } + .section-images .hero-images-container-1 { + right: 10%; + top: 68%; + max-width: 269px; + } + .section-images .hero-images-container-2 { + right: 5%; + max-width: 135px; + top: 93%; + } +} + +@media screen and (min-width: 992px) { + .burger-menu .navbar-collapse { + position: fixed; + display: block; + top: 0; + height: 100% !important; + width: 300px; + right: 0; + z-index: 1032; + visibility: visible; + background-color: #999; + overflow-y: visible; + border-top: none; + text-align: left; + max-height: none !important; + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu .navbar-collapse:before { + background: #f96332; + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(#f96332 0%, #000 80%); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(#f96332 0%, #000 80%); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(#f96332 0%, #000 80%); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(#f96332 0%, #000 80%); + /* Standard syntax (must be last) */ + opacity: 0.76; + filter: alpha(opacity=76); + display: block; + content: ""; + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: -1; + } + .burger-menu .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link { + margin: 0 1rem; + margin-top: 0.3125rem; + } + .burger-menu .navbar-collapse .navbar-nav:not(.navbar-logo) .nav-link:not(.btn) { + color: #FFFFFF; + } + .burger-menu .navbar-collapse .dropdown-menu .dropdown-item { + color: #FFFFFF; + } + .burger-menu .navbar .navbar-nav { + margin-top: 53px; + } + .burger-menu .navbar .navbar-nav .nav-link { + padding-top: 0.75rem; + padding-bottom: .75rem; + } + .burger-menu .navbar .navbar-nav.navbar-logo { + top: 0; + height: 53px; + } + .burger-menu .navbar .dropdown.show .dropdown-menu, + .burger-menu .navbar .dropdown .dropdown-menu { + background-color: transparent; + border: 0; + transition: none; + -webkit-box-shadow: none; + box-shadow: none; + width: auto; + margin: 0 1rem; + margin-bottom: 15px; + padding-top: 0; + height: 150px; + overflow-y: scroll; + } + .burger-menu .navbar .dropdown.show .dropdown-menu:before, + .burger-menu .navbar .dropdown .dropdown-menu:before { + display: none; + } + .burger-menu .navbar .dropdown .dropdown-item { + padding-left: 2.5rem; + } + .burger-menu .navbar .dropdown .dropdown-menu { + display: none; + } + .burger-menu .navbar .dropdown.show .dropdown-menu { + display: block; + } + .burger-menu .navbar .dropdown-menu .dropdown-item:focus, + .burger-menu .navbar .dropdown-menu .dropdown-item:hover { + color: #FFFFFF; + } + .burger-menu .navbar .navbar-translate { + width: 100%; + position: relative; + display: flex; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + -ms-flex-align: center; + align-items: center; + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu .navbar .navbar-toggler-bar { + display: block; + position: relative; + width: 22px; + height: 1px; + border-radius: 1px; + background: #FFFFFF; + } + .burger-menu .navbar .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 7px; + } + .burger-menu .navbar .navbar-toggler-bar.bar2 { + width: 17px; + transition: width .2s linear; + } + .burger-menu .navbar.bg-white:not(.navbar-transparent) .navbar-toggler-bar { + background: #888; + } + .burger-menu .navbar .toggled .navbar-toggler-bar { + width: 24px; + } + .burger-menu .navbar .toggled .navbar-toggler-bar+.navbar-toggler-bar { + margin-top: 5px; + } + .burger-menu .bar1, + .burger-menu .bar2, + .burger-menu .bar3 { + outline: 1px solid transparent; + } + .burger-menu .bar1 { + top: 0px; + -webkit-animation: topbar-back 500ms linear 0s; + -moz-animation: topbar-back 500ms linear 0s; + animation: topbar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .burger-menu .bar2 { + opacity: 1; + } + .burger-menu .bar3 { + bottom: 0px; + -webkit-animation: bottombar-back 500ms linear 0s; + -moz-animation: bottombar-back 500ms linear 0s; + animation: bottombar-back 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .burger-menu .toggled .bar1 { + top: 6px; + -webkit-animation: topbar-x 500ms linear 0s; + -moz-animation: topbar-x 500ms linear 0s; + animation: topbar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + .burger-menu .toggled .bar2 { + opacity: 0; + } + .burger-menu .toggled .bar3 { + bottom: 6px; + -webkit-animation: bottombar-x 500ms linear 0s; + -moz-animation: bottombar-x 500ms linear 0s; + animation: bottombar-x 500ms 0s; + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + animation-fill-mode: forwards; + } + @keyframes topbar-x { + 0% { + top: 0px; + transform: rotate(0deg); + } + 45% { + top: 6px; + transform: rotate(145deg); + } + 75% { + transform: rotate(130deg); + } + 100% { + transform: rotate(135deg); + } + } + @-webkit-keyframes topbar-x { + 0% { + top: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + top: 6px; + -webkit-transform: rotate(145deg); + } + 75% { + -webkit-transform: rotate(130deg); + } + 100% { + -webkit-transform: rotate(135deg); + } + } + @-moz-keyframes topbar-x { + 0% { + top: 0px; + -moz-transform: rotate(0deg); + } + 45% { + top: 6px; + -moz-transform: rotate(145deg); + } + 75% { + -moz-transform: rotate(130deg); + } + 100% { + -moz-transform: rotate(135deg); + } + } + @keyframes topbar-back { + 0% { + top: 6px; + transform: rotate(135deg); + } + 45% { + transform: rotate(-10deg); + } + 75% { + transform: rotate(5deg); + } + 100% { + top: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes topbar-back { + 0% { + top: 6px; + -webkit-transform: rotate(135deg); + } + 45% { + -webkit-transform: rotate(-10deg); + } + 75% { + -webkit-transform: rotate(5deg); + } + 100% { + top: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes topbar-back { + 0% { + top: 6px; + -moz-transform: rotate(135deg); + } + 45% { + -moz-transform: rotate(-10deg); + } + 75% { + -moz-transform: rotate(5deg); + } + 100% { + top: 0px; + -moz-transform: rotate(0); + } + } + @keyframes bottombar-x { + 0% { + bottom: 0px; + transform: rotate(0deg); + } + 45% { + bottom: 6px; + transform: rotate(-145deg); + } + 75% { + transform: rotate(-130deg); + } + 100% { + transform: rotate(-135deg); + } + } + @-webkit-keyframes bottombar-x { + 0% { + bottom: 0px; + -webkit-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -webkit-transform: rotate(-145deg); + } + 75% { + -webkit-transform: rotate(-130deg); + } + 100% { + -webkit-transform: rotate(-135deg); + } + } + @-moz-keyframes bottombar-x { + 0% { + bottom: 0px; + -moz-transform: rotate(0deg); + } + 45% { + bottom: 6px; + -moz-transform: rotate(-145deg); + } + 75% { + -moz-transform: rotate(-130deg); + } + 100% { + -moz-transform: rotate(-135deg); + } + } + @keyframes bottombar-back { + 0% { + bottom: 6px; + transform: rotate(-135deg); + } + 45% { + transform: rotate(10deg); + } + 75% { + transform: rotate(-5deg); + } + 100% { + bottom: 0px; + transform: rotate(0); + } + } + @-webkit-keyframes bottombar-back { + 0% { + bottom: 6px; + -webkit-transform: rotate(-135deg); + } + 45% { + -webkit-transform: rotate(10deg); + } + 75% { + -webkit-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -webkit-transform: rotate(0); + } + } + @-moz-keyframes bottombar-back { + 0% { + bottom: 6px; + -moz-transform: rotate(-135deg); + } + 45% { + -moz-transform: rotate(10deg); + } + 75% { + -moz-transform: rotate(-5deg); + } + 100% { + bottom: 0px; + -moz-transform: rotate(0); + } + } + @-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @-moz-keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + .burger-menu [class*="navbar-expand-"] .navbar-collapse { + width: 300px; + } + .burger-menu .wrapper { + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .burger-menu #bodyClick { + height: 100%; + width: 100%; + position: fixed; + opacity: 1; + top: 0; + left: auto; + right: 300px; + content: ""; + z-index: 9999; + overflow-x: hidden; + background-color: transparent; + -webkit-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -moz-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -o-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + -ms-transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + transition: all 0.5s cubic-bezier(0.685, 0.0473, 0.346, 1); + } + .nav-open .burger-menu .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .burger-menu .navbar-collapse { + display: block !important; + } + .burger-menu .navbar-collapse .navbar-nav { + margin-top: 53px; + height: 100%; + z-index: 2; + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .burger-menu .navbar-collapse .navbar-nav .nav-item { + margin: 0; + } + .burger-menu.menu-on-left .navbar-collapse { + right: auto; + left: 0; + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .burger-menu [class*="navbar-expand-"] .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .burger-menu [class*="navbar-expand-"] .navbar-toggler { + display: inline-block; + } + .burger-menu .section-navbars .navbar-collapse { + display: none !important; + } + .nav-open .burger-menu.menu-on-left .navbar .navbar-translate { + -webkit-transform: translate3d(300px, 0, 0); + -moz-transform: translate3d(300px, 0, 0); + -o-transform: translate3d(300px, 0, 0); + -ms-transform: translate3d(300px, 0, 0); + transform: translate3d(300px, 0, 0); + } + .nav-open .burger-menu .navbar .navbar-translate { + -webkit-transform: translate3d(-300px, 0, 0); + -moz-transform: translate3d(-300px, 0, 0); + -o-transform: translate3d(-300px, 0, 0); + -ms-transform: translate3d(-300px, 0, 0); + transform: translate3d(-300px, 0, 0); + } + .nav-open .burger-menu.menu-on-left .navbar-collapse { + -webkit-transform: translate3d(0px, 0, 0); + -moz-transform: translate3d(0px, 0, 0); + -o-transform: translate3d(0px, 0, 0); + -ms-transform: translate3d(0px, 0, 0); + transform: translate3d(0px, 0, 0); + } + .nav-open .burger-menu.menu-on-left #bodyClick { + right: auto; + left: 300px; + } + .burger-menu.menu-on-left .navbar-brand { + float: right; + margin-right: 0; + margin-left: 1rem; + } + .navbar-nav .nav-link.profile-photo { + padding: 0; + margin: 7px 0.7rem; + } + .navbar-nav .nav-link.btn:not(.btn-sm) { + margin: 0; + } + .navbar-nav .nav-item:not(:last-child) { + margin-right: 5px; + } + .section-nucleo-icons .icons-container { + margin: 0 0 0 auto; + } + .dropdown-menu .dropdown-item { + color: inherit; + } + .footer .copyright { + float: right; + } +} + +@media screen and (min-width: 768px) { + .image-container.image-right { + top: 80px; + margin-left: -100px; + margin-bottom: 130px; + } + .image-container.image-left { + margin-right: -100px; + } +} + +@media screen and (max-width: 768px) { + .image-container.image-left { + margin-bottom: 220px; + } + .image-container.image-left p.blockquote { + margin: 0 auto; + position: relative; + right: 0; + } + .nav-tabs { + display: inline-block; + width: 100%; + padding-left: 100px; + padding-right: 100px; + text-align: center; + } + .nav-tabs .nav-item>.nav-link { + margin-bottom: 5px; + } + .landing-page .section-story-overview .image-container:nth-child(2) { + margin-left: 0; + margin-bottom: 30px; + } +} + +@media screen and (max-width: 576px) { + .navbar[class*='navbar-expand-'] .container { + margin-left: 0; + margin-right: 0; + } + .footer .copyright { + text-align: center; + } + .section-nucleo-icons .icons-container i { + font-size: 30px; + } + .section-nucleo-icons .icons-container i:nth-child(6) { + font-size: 48px; + } + .page-header .container h6.category-absolute { + width: 90%; + } +} + +@media screen and (min-width: 991px) and (max-width: 1200px) { + .section-images .hero-images-container-1 { + right: 9%; + max-width: 370px; + } + .section-images .hero-images-container-2 { + right: 2%; + max-width: 216px; + } +} + +@media screen and (max-width: 768px) { + .section-images { + height: 300px; + max-height: 300px; + } + .section-images .hero-images-container { + max-width: 380px; + } + .section-images .hero-images-container-1 { + right: 7%; + top: 87%; + max-width: 210px; + } + .section-images .hero-images-container-2 { + right: 1%; + max-width: 133px; + top: 99%; + } +} + +@media screen and (max-width: 517px) { + .alert .alert-icon { + margin-top: 10px; + } +} + +@media screen and (min-width: 1200px) { + .section-images .hero-images-container-1 { + top: 51%; + right: 21%; + } + .section-images .hero-images-container-2 { + top: 66%; + right: 14%; + } +} + +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: portrait) { + .section-images .hero-images-container, + .section-images .hero-images-container-1, + .section-images .hero-images-container-2 { + margin-top: -15vh; + margin-left: 80px; + } + .section-images .hero-images-container { + max-width: 300px; + } + .section-images .hero-images-container-1 { + right: 28%; + top: 40%; + } + .section-images .hero-images-container-2 { + right: 21%; + top: 55%; + } + .index-page .category-absolute { + top: 90vh; + } +} + +@media screen and (max-width: 580px) { + .alert button.close { + position: absolute; + right: 11px; + top: 50%; + transform: translateY(-50%); + } +} \ No newline at end of file diff --git a/web/libs/fonts/nucleo-outline.eot b/web/libs/fonts/nucleo-outline.eot new file mode 100644 index 0000000..3625494 Binary files /dev/null and b/web/libs/fonts/nucleo-outline.eot differ diff --git a/web/libs/fonts/nucleo-outline.ttf b/web/libs/fonts/nucleo-outline.ttf new file mode 100644 index 0000000..5caf555 Binary files /dev/null and b/web/libs/fonts/nucleo-outline.ttf differ diff --git a/web/libs/fonts/nucleo-outline.woff b/web/libs/fonts/nucleo-outline.woff new file mode 100644 index 0000000..425ee84 Binary files /dev/null and b/web/libs/fonts/nucleo-outline.woff differ diff --git a/web/libs/fonts/nucleo-outline.woff2 b/web/libs/fonts/nucleo-outline.woff2 new file mode 100644 index 0000000..791b3b9 Binary files /dev/null and b/web/libs/fonts/nucleo-outline.woff2 differ diff --git a/web/libs/js/bootstrap4.min.js b/web/libs/js/bootstrap4.min.js new file mode 100644 index 0000000..32445bf --- /dev/null +++ b/web/libs/js/bootstrap4.min.js @@ -0,0 +1,1586 @@ +/*! + * Bootstrap v4.0.0-beta (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if ("undefined" == typeof jQuery) throw new Error("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript."); +! function(t) { + var e = jQuery.fn.jquery.split(" ")[0].split("."); + if (e[0] < 2 && e[1] < 9 || 1 == e[0] && 9 == e[1] && e[2] < 1 || e[0] >= 4) throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0") +}(), +function() { + function t(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + } + + function e(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + } + + function n(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + var i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(t) { + return typeof t + } : function(t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, + o = function() { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var i = e[n]; + i.enumerable = i.enumerable || !1, i.configurable = !0, "value" in i && (i.writable = !0), Object.defineProperty(t, i.key, i) + } + } + return function(e, n, i) { + return n && t(e.prototype, n), i && t(e, i), e + } + }(), + r = function(t) { + function e(t) { + return {}.toString.call(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase() + } + + function n(t) { + return (t[0] || t).nodeType + } + + function i() { + return { + bindType: s.end, + delegateType: s.end, + handle: function(e) { + if (t(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + } + + function o() { + if (window.QUnit) return !1; + var t = document.createElement("bootstrap"); + for (var e in a) + if (void 0 !== t.style[e]) return { + end: a[e] + }; + return !1 + } + + function r(e) { + var n = this, + i = !1; + return t(this).one(l.TRANSITION_END, function() { + i = !0 + }), setTimeout(function() { + i || l.triggerTransitionEnd(n) + }, e), this + } + var s = !1, + a = { + WebkitTransition: "webkitTransitionEnd", + MozTransition: "transitionend", + OTransition: "oTransitionEnd otransitionend", + transition: "transitionend" + }, + l = { + TRANSITION_END: "bsTransitionEnd", + getUID: function(t) { + do { + t += ~~(1e6 * Math.random()) + } while (document.getElementById(t)); + return t + }, + getSelectorFromElement: function(e) { + var n = e.getAttribute("data-target"); + n && "#" !== n || (n = e.getAttribute("href") || ""); + try { + return t(n).length > 0 ? n : null + } catch (t) { + return null + } + }, + reflow: function(t) { + return t.offsetHeight + }, + triggerTransitionEnd: function(e) { + t(e).trigger(s.end) + }, + supportsTransitionEnd: function() { + return Boolean(s) + }, + typeCheckConfig: function(t, i, o) { + for (var r in o) + if (o.hasOwnProperty(r)) { + var s = o[r], + a = i[r], + l = a && n(a) ? "element" : e(a); + if (!new RegExp(s).test(l)) throw new Error(t.toUpperCase() + ': Option "' + r + '" provided type "' + l + '" but expected type "' + s + '".') + } + } + }; + return s = o(), t.fn.emulateTransitionEnd = r, l.supportsTransitionEnd() && (t.event.special[l.TRANSITION_END] = i()), l + }(jQuery), + s = (function(t) { + var e = "alert", + i = t.fn[e], + s = { + DISMISS: '[data-dismiss="alert"]' + }, + a = { + CLOSE: "close.bs.alert", + CLOSED: "closed.bs.alert", + CLICK_DATA_API: "click.bs.alert.data-api" + }, + l = { + ALERT: "alert", + FADE: "fade", + SHOW: "show" + }, + h = function() { + function e(t) { + n(this, e), this._element = t + } + return e.prototype.close = function(t) { + t = t || this._element; + var e = this._getRootElement(t); + this._triggerCloseEvent(e).isDefaultPrevented() || this._removeElement(e) + }, e.prototype.dispose = function() { + t.removeData(this._element, "bs.alert"), this._element = null + }, e.prototype._getRootElement = function(e) { + var n = r.getSelectorFromElement(e), + i = !1; + return n && (i = t(n)[0]), i || (i = t(e).closest("." + l.ALERT)[0]), i + }, e.prototype._triggerCloseEvent = function(e) { + var n = t.Event(a.CLOSE); + return t(e).trigger(n), n + }, e.prototype._removeElement = function(e) { + var n = this; + t(e).removeClass(l.SHOW), r.supportsTransitionEnd() && t(e).hasClass(l.FADE) ? t(e).one(r.TRANSITION_END, function(t) { + return n._destroyElement(e, t) + }).emulateTransitionEnd(150) : this._destroyElement(e) + }, e.prototype._destroyElement = function(e) { + t(e).detach().trigger(a.CLOSED).remove() + }, e._jQueryInterface = function(n) { + return this.each(function() { + var i = t(this), + o = i.data("bs.alert"); + o || (o = new e(this), i.data("bs.alert", o)), "close" === n && o[n](this) + }) + }, e._handleDismiss = function(t) { + return function(e) { + e && e.preventDefault(), t.close(this) + } + }, o(e, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }]), e + }(); + t(document).on(a.CLICK_DATA_API, s.DISMISS, h._handleDismiss(new h)), t.fn[e] = h._jQueryInterface, t.fn[e].Constructor = h, t.fn[e].noConflict = function() { + return t.fn[e] = i, h._jQueryInterface + } + }(jQuery), function(t) { + var e = "button", + i = t.fn[e], + r = { + ACTIVE: "active", + BUTTON: "btn", + FOCUS: "focus" + }, + s = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: "input", + ACTIVE: ".active", + BUTTON: ".btn" + }, + a = { + CLICK_DATA_API: "click.bs.button.data-api", + FOCUS_BLUR_DATA_API: "focus.bs.button.data-api blur.bs.button.data-api" + }, + l = function() { + function e(t) { + n(this, e), this._element = t + } + return e.prototype.toggle = function() { + var e = !0, + n = !0, + i = t(this._element).closest(s.DATA_TOGGLE)[0]; + if (i) { + var o = t(this._element).find(s.INPUT)[0]; + if (o) { + if ("radio" === o.type) + if (o.checked && t(this._element).hasClass(r.ACTIVE)) e = !1; + else { + var a = t(i).find(s.ACTIVE)[0]; + a && t(a).removeClass(r.ACTIVE) + } + if (e) { + if (o.hasAttribute("disabled") || i.hasAttribute("disabled") || o.classList.contains("disabled") || i.classList.contains("disabled")) return; + o.checked = !t(this._element).hasClass(r.ACTIVE), t(o).trigger("change") + } + o.focus(), n = !1 + } + } + n && this._element.setAttribute("aria-pressed", !t(this._element).hasClass(r.ACTIVE)), e && t(this._element).toggleClass(r.ACTIVE) + }, e.prototype.dispose = function() { + t.removeData(this._element, "bs.button"), this._element = null + }, e._jQueryInterface = function(n) { + return this.each(function() { + var i = t(this).data("bs.button"); + i || (i = new e(this), t(this).data("bs.button", i)), "toggle" === n && i[n]() + }) + }, o(e, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }]), e + }(); + t(document).on(a.CLICK_DATA_API, s.DATA_TOGGLE_CARROT, function(e) { + e.preventDefault(); + var n = e.target; + t(n).hasClass(r.BUTTON) || (n = t(n).closest(s.BUTTON)), l._jQueryInterface.call(t(n), "toggle") + }).on(a.FOCUS_BLUR_DATA_API, s.DATA_TOGGLE_CARROT, function(e) { + var n = t(e.target).closest(s.BUTTON)[0]; + t(n).toggleClass(r.FOCUS, /^focus(in)?$/.test(e.type)) + }), t.fn[e] = l._jQueryInterface, t.fn[e].Constructor = l, t.fn[e].noConflict = function() { + return t.fn[e] = i, l._jQueryInterface + } + }(jQuery), function(t) { + var e = "carousel", + s = "bs.carousel", + a = "." + s, + l = t.fn[e], + h = { + interval: 5e3, + keyboard: !0, + slide: !1, + pause: "hover", + wrap: !0 + }, + c = { + interval: "(number|boolean)", + keyboard: "boolean", + slide: "(boolean|string)", + pause: "(string|boolean)", + wrap: "boolean" + }, + u = { + NEXT: "next", + PREV: "prev", + LEFT: "left", + RIGHT: "right" + }, + d = { + SLIDE: "slide" + a, + SLID: "slid" + a, + KEYDOWN: "keydown" + a, + MOUSEENTER: "mouseenter" + a, + MOUSELEAVE: "mouseleave" + a, + TOUCHEND: "touchend" + a, + LOAD_DATA_API: "load.bs.carousel.data-api", + CLICK_DATA_API: "click.bs.carousel.data-api" + }, + f = { + CAROUSEL: "carousel", + ACTIVE: "active", + SLIDE: "slide", + RIGHT: "carousel-item-right", + LEFT: "carousel-item-left", + NEXT: "carousel-item-next", + PREV: "carousel-item-prev", + ITEM: "carousel-item" + }, + p = { + ACTIVE: ".active", + ACTIVE_ITEM: ".active.carousel-item", + ITEM: ".carousel-item", + NEXT_PREV: ".carousel-item-next, .carousel-item-prev", + INDICATORS: ".carousel-indicators", + DATA_SLIDE: "[data-slide], [data-slide-to]", + DATA_RIDE: '[data-ride="carousel"]' + }, + _ = function() { + function l(e, i) { + n(this, l), this._items = null, this._interval = null, this._activeElement = null, this._isPaused = !1, this._isSliding = !1, this.touchTimeout = null, this._config = this._getConfig(i), this._element = t(e)[0], this._indicatorsElement = t(this._element).find(p.INDICATORS)[0], this._addEventListeners() + } + return l.prototype.next = function() { + this._isSliding || this._slide(u.NEXT) + }, l.prototype.nextWhenVisible = function() { + document.hidden || this.next() + }, l.prototype.prev = function() { + this._isSliding || this._slide(u.PREV) + }, l.prototype.pause = function(e) { + e || (this._isPaused = !0), t(this._element).find(p.NEXT_PREV)[0] && r.supportsTransitionEnd() && (r.triggerTransitionEnd(this._element), this.cycle(!0)), clearInterval(this._interval), this._interval = null + }, l.prototype.cycle = function(t) { + t || (this._isPaused = !1), this._interval && (clearInterval(this._interval), this._interval = null), this._config.interval && !this._isPaused && (this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval)) + }, l.prototype.to = function(e) { + var n = this; + this._activeElement = t(this._element).find(p.ACTIVE_ITEM)[0]; + var i = this._getItemIndex(this._activeElement); + if (!(e > this._items.length - 1 || e < 0)) + if (this._isSliding) t(this._element).one(d.SLID, function() { + return n.to(e) + }); + else { + if (i === e) return this.pause(), void this.cycle(); + var o = e > i ? u.NEXT : u.PREV; + this._slide(o, this._items[e]) + } + }, l.prototype.dispose = function() { + t(this._element).off(a), t.removeData(this._element, s), this._items = null, this._config = null, this._element = null, this._interval = null, this._isPaused = null, this._isSliding = null, this._activeElement = null, this._indicatorsElement = null + }, l.prototype._getConfig = function(n) { + return n = t.extend({}, h, n), r.typeCheckConfig(e, n, c), n + }, l.prototype._addEventListeners = function() { + var e = this; + this._config.keyboard && t(this._element).on(d.KEYDOWN, function(t) { + return e._keydown(t) + }), "hover" === this._config.pause && (t(this._element).on(d.MOUSEENTER, function(t) { + return e.pause(t) + }).on(d.MOUSELEAVE, function(t) { + return e.cycle(t) + }), "ontouchstart" in document.documentElement && t(this._element).on(d.TOUCHEND, function() { + e.pause(), e.touchTimeout && clearTimeout(e.touchTimeout), e.touchTimeout = setTimeout(function(t) { + return e.cycle(t) + }, 500 + e._config.interval) + })) + }, l.prototype._keydown = function(t) { + if (!/input|textarea/i.test(t.target.tagName)) switch (t.which) { + case 37: + t.preventDefault(), this.prev(); + break; + case 39: + t.preventDefault(), this.next(); + break; + default: + return + } + }, l.prototype._getItemIndex = function(e) { + return this._items = t.makeArray(t(e).parent().find(p.ITEM)), this._items.indexOf(e) + }, l.prototype._getItemByDirection = function(t, e) { + var n = t === u.NEXT, + i = t === u.PREV, + o = this._getItemIndex(e), + r = this._items.length - 1; + if ((i && 0 === o || n && o === r) && !this._config.wrap) return e; + var s = (o + (t === u.PREV ? -1 : 1)) % this._items.length; + return -1 === s ? this._items[this._items.length - 1] : this._items[s] + }, l.prototype._triggerSlideEvent = function(e, n) { + var i = this._getItemIndex(e), + o = this._getItemIndex(t(this._element).find(p.ACTIVE_ITEM)[0]), + r = t.Event(d.SLIDE, { + relatedTarget: e, + direction: n, + from: o, + to: i + }); + return t(this._element).trigger(r), r + }, l.prototype._setActiveIndicatorElement = function(e) { + if (this._indicatorsElement) { + t(this._indicatorsElement).find(p.ACTIVE).removeClass(f.ACTIVE); + var n = this._indicatorsElement.children[this._getItemIndex(e)]; + n && t(n).addClass(f.ACTIVE) + } + }, l.prototype._slide = function(e, n) { + var i = this, + o = t(this._element).find(p.ACTIVE_ITEM)[0], + s = this._getItemIndex(o), + a = n || o && this._getItemByDirection(e, o), + l = this._getItemIndex(a), + h = Boolean(this._interval), + c = void 0, + _ = void 0, + g = void 0; + if (e === u.NEXT ? (c = f.LEFT, _ = f.NEXT, g = u.LEFT) : (c = f.RIGHT, _ = f.PREV, g = u.RIGHT), a && t(a).hasClass(f.ACTIVE)) this._isSliding = !1; + else if (!this._triggerSlideEvent(a, g).isDefaultPrevented() && o && a) { + this._isSliding = !0, h && this.pause(), this._setActiveIndicatorElement(a); + var m = t.Event(d.SLID, { + relatedTarget: a, + direction: g, + from: s, + to: l + }); + r.supportsTransitionEnd() && t(this._element).hasClass(f.SLIDE) ? (t(a).addClass(_), r.reflow(a), t(o).addClass(c), t(a).addClass(c), t(o).one(r.TRANSITION_END, function() { + t(a).removeClass(c + " " + _).addClass(f.ACTIVE), t(o).removeClass(f.ACTIVE + " " + _ + " " + c), i._isSliding = !1, setTimeout(function() { + return t(i._element).trigger(m) + }, 0) + }).emulateTransitionEnd(600)) : (t(o).removeClass(f.ACTIVE), t(a).addClass(f.ACTIVE), this._isSliding = !1, t(this._element).trigger(m)), h && this.cycle() + } + }, l._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data(s), + o = t.extend({}, h, t(this).data()); + "object" === (void 0 === e ? "undefined" : i(e)) && t.extend(o, e); + var r = "string" == typeof e ? e : o.slide; + if (n || (n = new l(this, o), t(this).data(s, n)), "number" == typeof e) n.to(e); + else if ("string" == typeof r) { + if (void 0 === n[r]) throw new Error('No method named "' + r + '"'); + n[r]() + } else o.interval && (n.pause(), n.cycle()) + }) + }, l._dataApiClickHandler = function(e) { + var n = r.getSelectorFromElement(this); + if (n) { + var i = t(n)[0]; + if (i && t(i).hasClass(f.CAROUSEL)) { + var o = t.extend({}, t(i).data(), t(this).data()), + a = this.getAttribute("data-slide-to"); + a && (o.interval = !1), l._jQueryInterface.call(t(i), o), a && t(i).data(s).to(a), e.preventDefault() + } + } + }, o(l, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return h + } + }]), l + }(); + t(document).on(d.CLICK_DATA_API, p.DATA_SLIDE, _._dataApiClickHandler), t(window).on(d.LOAD_DATA_API, function() { + t(p.DATA_RIDE).each(function() { + var e = t(this); + _._jQueryInterface.call(e, e.data()) + }) + }), t.fn[e] = _._jQueryInterface, t.fn[e].Constructor = _, t.fn[e].noConflict = function() { + return t.fn[e] = l, _._jQueryInterface + } + }(jQuery), function(t) { + var e = "collapse", + s = "bs.collapse", + a = t.fn[e], + l = { + toggle: !0, + parent: "" + }, + h = { + toggle: "boolean", + parent: "string" + }, + c = { + SHOW: "show.bs.collapse", + SHOWN: "shown.bs.collapse", + HIDE: "hide.bs.collapse", + HIDDEN: "hidden.bs.collapse", + CLICK_DATA_API: "click.bs.collapse.data-api" + }, + u = { + SHOW: "show", + COLLAPSE: "collapse", + COLLAPSING: "collapsing", + COLLAPSED: "collapsed" + }, + d = { + WIDTH: "width", + HEIGHT: "height" + }, + f = { + ACTIVES: ".show, .collapsing", + DATA_TOGGLE: '[data-toggle="collapse"]' + }, + p = function() { + function a(e, i) { + n(this, a), this._isTransitioning = !1, this._element = e, this._config = this._getConfig(i), this._triggerArray = t.makeArray(t('[data-toggle="collapse"][href="#' + e.id + '"],[data-toggle="collapse"][data-target="#' + e.id + '"]')); + for (var o = t(f.DATA_TOGGLE), s = 0; s < o.length; s++) { + var l = o[s], + h = r.getSelectorFromElement(l); + null !== h && t(h).filter(e).length > 0 && this._triggerArray.push(l) + } + this._parent = this._config.parent ? this._getParent() : null, this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray), this._config.toggle && this.toggle() + } + return a.prototype.toggle = function() { + t(this._element).hasClass(u.SHOW) ? this.hide() : this.show() + }, a.prototype.show = function() { + var e = this; + if (!this._isTransitioning && !t(this._element).hasClass(u.SHOW)) { + var n = void 0, + i = void 0; + if (this._parent && ((n = t.makeArray(t(this._parent).children().children(f.ACTIVES))).length || (n = null)), !(n && (i = t(n).data(s)) && i._isTransitioning)) { + var o = t.Event(c.SHOW); + if (t(this._element).trigger(o), !o.isDefaultPrevented()) { + n && (a._jQueryInterface.call(t(n), "hide"), i || t(n).data(s, null)); + var l = this._getDimension(); + t(this._element).removeClass(u.COLLAPSE).addClass(u.COLLAPSING), this._element.style[l] = 0, this._triggerArray.length && t(this._triggerArray).removeClass(u.COLLAPSED).attr("aria-expanded", !0), this.setTransitioning(!0); + var h = function() { + t(e._element).removeClass(u.COLLAPSING).addClass(u.COLLAPSE).addClass(u.SHOW), e._element.style[l] = "", e.setTransitioning(!1), t(e._element).trigger(c.SHOWN) + }; + if (r.supportsTransitionEnd()) { + var d = "scroll" + (l[0].toUpperCase() + l.slice(1)); + t(this._element).one(r.TRANSITION_END, h).emulateTransitionEnd(600), this._element.style[l] = this._element[d] + "px" + } else h() + } + } + } + }, a.prototype.hide = function() { + var e = this; + if (!this._isTransitioning && t(this._element).hasClass(u.SHOW)) { + var n = t.Event(c.HIDE); + if (t(this._element).trigger(n), !n.isDefaultPrevented()) { + var i = this._getDimension(); + if (this._element.style[i] = this._element.getBoundingClientRect()[i] + "px", r.reflow(this._element), t(this._element).addClass(u.COLLAPSING).removeClass(u.COLLAPSE).removeClass(u.SHOW), this._triggerArray.length) + for (var o = 0; o < this._triggerArray.length; o++) { + var s = this._triggerArray[o], + a = r.getSelectorFromElement(s); + null !== a && (t(a).hasClass(u.SHOW) || t(s).addClass(u.COLLAPSED).attr("aria-expanded", !1)) + } + this.setTransitioning(!0); + var l = function() { + e.setTransitioning(!1), t(e._element).removeClass(u.COLLAPSING).addClass(u.COLLAPSE).trigger(c.HIDDEN) + }; + this._element.style[i] = "", r.supportsTransitionEnd() ? t(this._element).one(r.TRANSITION_END, l).emulateTransitionEnd(600) : l() + } + } + }, a.prototype.setTransitioning = function(t) { + this._isTransitioning = t + }, a.prototype.dispose = function() { + t.removeData(this._element, s), this._config = null, this._parent = null, this._element = null, this._triggerArray = null, this._isTransitioning = null + }, a.prototype._getConfig = function(n) { + return n = t.extend({}, l, n), n.toggle = Boolean(n.toggle), r.typeCheckConfig(e, n, h), n + }, a.prototype._getDimension = function() { + return t(this._element).hasClass(d.WIDTH) ? d.WIDTH : d.HEIGHT + }, a.prototype._getParent = function() { + var e = this, + n = t(this._config.parent)[0], + i = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; + return t(n).find(i).each(function(t, n) { + e._addAriaAndCollapsedClass(a._getTargetFromElement(n), [n]) + }), n + }, a.prototype._addAriaAndCollapsedClass = function(e, n) { + if (e) { + var i = t(e).hasClass(u.SHOW); + n.length && t(n).toggleClass(u.COLLAPSED, !i).attr("aria-expanded", i) + } + }, a._getTargetFromElement = function(e) { + var n = r.getSelectorFromElement(e); + return n ? t(n)[0] : null + }, a._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this), + o = n.data(s), + r = t.extend({}, l, n.data(), "object" === (void 0 === e ? "undefined" : i(e)) && e); + if (!o && r.toggle && /show|hide/.test(e) && (r.toggle = !1), o || (o = new a(this, r), n.data(s, o)), "string" == typeof e) { + if (void 0 === o[e]) throw new Error('No method named "' + e + '"'); + o[e]() + } + }) + }, o(a, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return l + } + }]), a + }(); + t(document).on(c.CLICK_DATA_API, f.DATA_TOGGLE, function(e) { + /input|textarea/i.test(e.target.tagName) || e.preventDefault(); + var n = t(this), + i = r.getSelectorFromElement(this); + t(i).each(function() { + var e = t(this), + i = e.data(s) ? "toggle" : n.data(); + p._jQueryInterface.call(e, i) + }) + }), t.fn[e] = p._jQueryInterface, t.fn[e].Constructor = p, t.fn[e].noConflict = function() { + return t.fn[e] = a, p._jQueryInterface + } + }(jQuery), function(t) { + if ("undefined" == typeof Popper) throw new Error("Bootstrap dropdown require Popper.js (https://popper.js.org)"); + var e = "dropdown", + s = "bs.dropdown", + a = "." + s, + l = t.fn[e], + h = new RegExp("38|40|27"), + c = { + HIDE: "hide" + a, + HIDDEN: "hidden" + a, + SHOW: "show" + a, + SHOWN: "shown" + a, + CLICK: "click" + a, + CLICK_DATA_API: "click.bs.dropdown.data-api", + KEYDOWN_DATA_API: "keydown.bs.dropdown.data-api", + KEYUP_DATA_API: "keyup.bs.dropdown.data-api" + }, + u = { + DISABLED: "disabled", + SHOW: "show", + DROPUP: "dropup", + MENURIGHT: "dropdown-menu-right", + MENULEFT: "dropdown-menu-left" + }, + d = { + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: ".dropdown form", + MENU: ".dropdown-menu", + NAVBAR_NAV: ".navbar-nav", + VISIBLE_ITEMS: ".dropdown-menu .dropdown-item:not(.disabled)" + }, + f = { + TOP: "top-start", + TOPEND: "top-end", + BOTTOM: "bottom-start", + BOTTOMEND: "bottom-end" + }, + p = { + placement: f.BOTTOM, + offset: 0, + flip: !0 + }, + _ = { + placement: "string", + offset: "(number|string)", + flip: "boolean" + }, + g = function() { + function l(t, e) { + n(this, l), this._element = t, this._popper = null, this._config = this._getConfig(e), this._menu = this._getMenuElement(), this._inNavbar = this._detectNavbar(), this._addEventListeners() + } + return l.prototype.toggle = function() { + if (!this._element.disabled && !t(this._element).hasClass(u.DISABLED)) { + var e = l._getParentFromElement(this._element), + n = t(this._menu).hasClass(u.SHOW); + if (l._clearMenus(), !n) { + var i = { + relatedTarget: this._element + }, + o = t.Event(c.SHOW, i); + if (t(e).trigger(o), !o.isDefaultPrevented()) { + var r = this._element; + t(e).hasClass(u.DROPUP) && (t(this._menu).hasClass(u.MENULEFT) || t(this._menu).hasClass(u.MENURIGHT)) && (r = e), this._popper = new Popper(r, this._menu, this._getPopperConfig()), "ontouchstart" in document.documentElement && !t(e).closest(d.NAVBAR_NAV).length && t("body").children().on("mouseover", null, t.noop), this._element.focus(), this._element.setAttribute("aria-expanded", !0), t(this._menu).toggleClass(u.SHOW), t(e).toggleClass(u.SHOW).trigger(t.Event(c.SHOWN, i)) + } + } + } + }, l.prototype.dispose = function() { + t.removeData(this._element, s), t(this._element).off(a), this._element = null, this._menu = null, null !== this._popper && this._popper.destroy(), this._popper = null + }, l.prototype.update = function() { + this._inNavbar = this._detectNavbar(), null !== this._popper && this._popper.scheduleUpdate() + }, l.prototype._addEventListeners = function() { + var e = this; + t(this._element).on(c.CLICK, function(t) { + t.preventDefault(), t.stopPropagation(), e.toggle() + }) + }, l.prototype._getConfig = function(n) { + var i = t(this._element).data(); + return void 0 !== i.placement && (i.placement = f[i.placement.toUpperCase()]), n = t.extend({}, this.constructor.Default, t(this._element).data(), n), r.typeCheckConfig(e, n, this.constructor.DefaultType), n + }, l.prototype._getMenuElement = function() { + if (!this._menu) { + var e = l._getParentFromElement(this._element); + this._menu = t(e).find(d.MENU)[0] + } + return this._menu + }, l.prototype._getPlacement = function() { + var e = t(this._element).parent(), + n = this._config.placement; + return e.hasClass(u.DROPUP) || this._config.placement === f.TOP ? (n = f.TOP, t(this._menu).hasClass(u.MENURIGHT) && (n = f.TOPEND)) : t(this._menu).hasClass(u.MENURIGHT) && (n = f.BOTTOMEND), n + }, l.prototype._detectNavbar = function() { + return t(this._element).closest(".navbar").length > 0 + }, l.prototype._getPopperConfig = function() { + var t = { + placement: this._getPlacement(), + modifiers: { + offset: { + offset: this._config.offset + }, + flip: { + enabled: this._config.flip + } + } + }; + return this._inNavbar && (t.modifiers.applyStyle = { + enabled: !this._inNavbar + }), t + }, l._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data(s), + o = "object" === (void 0 === e ? "undefined" : i(e)) ? e : null; + if (n || (n = new l(this, o), t(this).data(s, n)), "string" == typeof e) { + if (void 0 === n[e]) throw new Error('No method named "' + e + '"'); + n[e]() + } + }) + }, l._clearMenus = function(e) { + if (!e || 3 !== e.which && ("keyup" !== e.type || 9 === e.which)) + for (var n = t.makeArray(t(d.DATA_TOGGLE)), i = 0; i < n.length; i++) { + var o = l._getParentFromElement(n[i]), + r = t(n[i]).data(s), + a = { + relatedTarget: n[i] + }; + if (r) { + var h = r._menu; + if (t(o).hasClass(u.SHOW) && !(e && ("click" === e.type && /input|textarea/i.test(e.target.tagName) || "keyup" === e.type && 9 === e.which) && t.contains(o, e.target))) { + var f = t.Event(c.HIDE, a); + t(o).trigger(f), f.isDefaultPrevented() || ("ontouchstart" in document.documentElement && t("body").children().off("mouseover", null, t.noop), n[i].setAttribute("aria-expanded", "false"), t(h).removeClass(u.SHOW), t(o).removeClass(u.SHOW).trigger(t.Event(c.HIDDEN, a))) + } + } + } + }, l._getParentFromElement = function(e) { + var n = void 0, + i = r.getSelectorFromElement(e); + return i && (n = t(i)[0]), n || e.parentNode + }, l._dataApiKeydownHandler = function(e) { + if (!(!h.test(e.which) || /button/i.test(e.target.tagName) && 32 === e.which || /input|textarea/i.test(e.target.tagName) || (e.preventDefault(), e.stopPropagation(), this.disabled || t(this).hasClass(u.DISABLED)))) { + var n = l._getParentFromElement(this), + i = t(n).hasClass(u.SHOW); + if ((i || 27 === e.which && 32 === e.which) && (!i || 27 !== e.which && 32 !== e.which)) { + var o = t(n).find(d.VISIBLE_ITEMS).get(); + if (o.length) { + var r = o.indexOf(e.target); + 38 === e.which && r > 0 && r--, 40 === e.which && r < o.length - 1 && r++, r < 0 && (r = 0), o[r].focus() + } + } else { + if (27 === e.which) { + var s = t(n).find(d.DATA_TOGGLE)[0]; + t(s).trigger("focus") + } + t(this).trigger("click") + } + } + }, o(l, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return p + } + }, { + key: "DefaultType", + get: function() { + return _ + } + }]), l + }(); + t(document).on(c.KEYDOWN_DATA_API, d.DATA_TOGGLE, g._dataApiKeydownHandler).on(c.KEYDOWN_DATA_API, d.MENU, g._dataApiKeydownHandler).on(c.CLICK_DATA_API + " " + c.KEYUP_DATA_API, g._clearMenus).on(c.CLICK_DATA_API, d.DATA_TOGGLE, function(e) { + e.preventDefault(), e.stopPropagation(), g._jQueryInterface.call(t(this), "toggle") + }).on(c.CLICK_DATA_API, d.FORM_CHILD, function(t) { + t.stopPropagation() + }), t.fn[e] = g._jQueryInterface, t.fn[e].Constructor = g, t.fn[e].noConflict = function() { + return t.fn[e] = l, g._jQueryInterface + } + }(jQuery), function(t) { + var e = "modal", + s = ".bs.modal", + a = t.fn[e], + l = { + backdrop: !0, + keyboard: !0, + focus: !0, + show: !0 + }, + h = { + backdrop: "(boolean|string)", + keyboard: "boolean", + focus: "boolean", + show: "boolean" + }, + c = { + HIDE: "hide.bs.modal", + HIDDEN: "hidden.bs.modal", + SHOW: "show.bs.modal", + SHOWN: "shown.bs.modal", + FOCUSIN: "focusin.bs.modal", + RESIZE: "resize.bs.modal", + CLICK_DISMISS: "click.dismiss.bs.modal", + KEYDOWN_DISMISS: "keydown.dismiss.bs.modal", + MOUSEUP_DISMISS: "mouseup.dismiss.bs.modal", + MOUSEDOWN_DISMISS: "mousedown.dismiss.bs.modal", + CLICK_DATA_API: "click.bs.modal.data-api" + }, + u = { + SCROLLBAR_MEASURER: "modal-scrollbar-measure", + BACKDROP: "modal-backdrop", + OPEN: "modal-open", + FADE: "fade", + SHOW: "show" + }, + d = { + DIALOG: ".modal-dialog", + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", + NAVBAR_TOGGLER: ".navbar-toggler" + }, + f = function() { + function a(e, i) { + n(this, a), this._config = this._getConfig(i), this._element = e, this._dialog = t(e).find(d.DIALOG)[0], this._backdrop = null, this._isShown = !1, this._isBodyOverflowing = !1, this._ignoreBackdropClick = !1, this._originalBodyPadding = 0, this._scrollbarWidth = 0 + } + return a.prototype.toggle = function(t) { + return this._isShown ? this.hide() : this.show(t) + }, a.prototype.show = function(e) { + var n = this; + if (!this._isTransitioning) { + r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE) && (this._isTransitioning = !0); + var i = t.Event(c.SHOW, { + relatedTarget: e + }); + t(this._element).trigger(i), this._isShown || i.isDefaultPrevented() || (this._isShown = !0, this._checkScrollbar(), this._setScrollbar(), t(document.body).addClass(u.OPEN), this._setEscapeEvent(), this._setResizeEvent(), t(this._element).on(c.CLICK_DISMISS, d.DATA_DISMISS, function(t) { + return n.hide(t) + }), t(this._dialog).on(c.MOUSEDOWN_DISMISS, function() { + t(n._element).one(c.MOUSEUP_DISMISS, function(e) { + t(e.target).is(n._element) && (n._ignoreBackdropClick = !0) + }) + }), this._showBackdrop(function() { + return n._showElement(e) + })) + } + }, a.prototype.hide = function(e) { + var n = this; + if (e && e.preventDefault(), !this._isTransitioning && this._isShown) { + var i = r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE); + i && (this._isTransitioning = !0); + var o = t.Event(c.HIDE); + t(this._element).trigger(o), this._isShown && !o.isDefaultPrevented() && (this._isShown = !1, this._setEscapeEvent(), this._setResizeEvent(), t(document).off(c.FOCUSIN), t(this._element).removeClass(u.SHOW), t(this._element).off(c.CLICK_DISMISS), t(this._dialog).off(c.MOUSEDOWN_DISMISS), i ? t(this._element).one(r.TRANSITION_END, function(t) { + return n._hideModal(t) + }).emulateTransitionEnd(300) : this._hideModal()) + } + }, a.prototype.dispose = function() { + t.removeData(this._element, "bs.modal"), t(window, document, this._element, this._backdrop).off(s), this._config = null, this._element = null, this._dialog = null, this._backdrop = null, this._isShown = null, this._isBodyOverflowing = null, this._ignoreBackdropClick = null, this._scrollbarWidth = null + }, a.prototype.handleUpdate = function() { + this._adjustDialog() + }, a.prototype._getConfig = function(n) { + return n = t.extend({}, l, n), r.typeCheckConfig(e, n, h), n + }, a.prototype._showElement = function(e) { + var n = this, + i = r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE); + this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE || document.body.appendChild(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.scrollTop = 0, i && r.reflow(this._element), t(this._element).addClass(u.SHOW), this._config.focus && this._enforceFocus(); + var o = t.Event(c.SHOWN, { + relatedTarget: e + }), + s = function() { + n._config.focus && n._element.focus(), n._isTransitioning = !1, t(n._element).trigger(o) + }; + i ? t(this._dialog).one(r.TRANSITION_END, s).emulateTransitionEnd(300) : s() + }, a.prototype._enforceFocus = function() { + var e = this; + t(document).off(c.FOCUSIN).on(c.FOCUSIN, function(n) { + document === n.target || e._element === n.target || t(e._element).has(n.target).length || e._element.focus() + }) + }, a.prototype._setEscapeEvent = function() { + var e = this; + this._isShown && this._config.keyboard ? t(this._element).on(c.KEYDOWN_DISMISS, function(t) { + 27 === t.which && (t.preventDefault(), e.hide()) + }) : this._isShown || t(this._element).off(c.KEYDOWN_DISMISS) + }, a.prototype._setResizeEvent = function() { + var e = this; + this._isShown ? t(window).on(c.RESIZE, function(t) { + return e.handleUpdate(t) + }) : t(window).off(c.RESIZE) + }, a.prototype._hideModal = function() { + var e = this; + this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._isTransitioning = !1, this._showBackdrop(function() { + t(document.body).removeClass(u.OPEN), e._resetAdjustments(), e._resetScrollbar(), t(e._element).trigger(c.HIDDEN) + }) + }, a.prototype._removeBackdrop = function() { + this._backdrop && (t(this._backdrop).remove(), this._backdrop = null) + }, a.prototype._showBackdrop = function(e) { + var n = this, + i = t(this._element).hasClass(u.FADE) ? u.FADE : ""; + if (this._isShown && this._config.backdrop) { + var o = r.supportsTransitionEnd() && i; + if (this._backdrop = document.createElement("div"), this._backdrop.className = u.BACKDROP, i && t(this._backdrop).addClass(i), t(this._backdrop).appendTo(document.body), t(this._element).on(c.CLICK_DISMISS, function(t) { + n._ignoreBackdropClick ? n._ignoreBackdropClick = !1 : t.target === t.currentTarget && ("static" === n._config.backdrop ? n._element.focus() : n.hide()) + }), o && r.reflow(this._backdrop), t(this._backdrop).addClass(u.SHOW), !e) return; + if (!o) return void e(); + t(this._backdrop).one(r.TRANSITION_END, e).emulateTransitionEnd(150) + } else if (!this._isShown && this._backdrop) { + t(this._backdrop).removeClass(u.SHOW); + var s = function() { + n._removeBackdrop(), e && e() + }; + r.supportsTransitionEnd() && t(this._element).hasClass(u.FADE) ? t(this._backdrop).one(r.TRANSITION_END, s).emulateTransitionEnd(150) : s() + } else e && e() + }, a.prototype._adjustDialog = function() { + var t = this._element.scrollHeight > document.documentElement.clientHeight; + !this._isBodyOverflowing && t && (this._element.style.paddingLeft = this._scrollbarWidth + "px"), this._isBodyOverflowing && !t && (this._element.style.paddingRight = this._scrollbarWidth + "px") + }, a.prototype._resetAdjustments = function() { + this._element.style.paddingLeft = "", this._element.style.paddingRight = "" + }, a.prototype._checkScrollbar = function() { + this._isBodyOverflowing = document.body.clientWidth < window.innerWidth, this._scrollbarWidth = this._getScrollbarWidth() + }, a.prototype._setScrollbar = function() { + var e = this; + if (this._isBodyOverflowing) { + t(d.FIXED_CONTENT).each(function(n, i) { + var o = t(i)[0].style.paddingRight, + r = t(i).css("padding-right"); + t(i).data("padding-right", o).css("padding-right", parseFloat(r) + e._scrollbarWidth + "px") + }), t(d.NAVBAR_TOGGLER).each(function(n, i) { + var o = t(i)[0].style.marginRight, + r = t(i).css("margin-right"); + t(i).data("margin-right", o).css("margin-right", parseFloat(r) + e._scrollbarWidth + "px") + }); + var n = document.body.style.paddingRight, + i = t("body").css("padding-right"); + t("body").data("padding-right", n).css("padding-right", parseFloat(i) + this._scrollbarWidth + "px") + } + }, a.prototype._resetScrollbar = function() { + t(d.FIXED_CONTENT).each(function(e, n) { + var i = t(n).data("padding-right"); + void 0 !== i && t(n).css("padding-right", i).removeData("padding-right") + }), t(d.NAVBAR_TOGGLER).each(function(e, n) { + var i = t(n).data("margin-right"); + void 0 !== i && t(n).css("margin-right", i).removeData("margin-right") + }); + var e = t("body").data("padding-right"); + void 0 !== e && t("body").css("padding-right", e).removeData("padding-right") + }, a.prototype._getScrollbarWidth = function() { + var t = document.createElement("div"); + t.className = u.SCROLLBAR_MEASURER, document.body.appendChild(t); + var e = t.getBoundingClientRect().width - t.clientWidth; + return document.body.removeChild(t), e + }, a._jQueryInterface = function(e, n) { + return this.each(function() { + var o = t(this).data("bs.modal"), + r = t.extend({}, a.Default, t(this).data(), "object" === (void 0 === e ? "undefined" : i(e)) && e); + if (o || (o = new a(this, r), t(this).data("bs.modal", o)), "string" == typeof e) { + if (void 0 === o[e]) throw new Error('No method named "' + e + '"'); + o[e](n) + } else r.show && o.show(n) + }) + }, o(a, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return l + } + }]), a + }(); + t(document).on(c.CLICK_DATA_API, d.DATA_TOGGLE, function(e) { + var n = this, + i = void 0, + o = r.getSelectorFromElement(this); + o && (i = t(o)[0]); + var s = t(i).data("bs.modal") ? "toggle" : t.extend({}, t(i).data(), t(this).data()); + "A" !== this.tagName && "AREA" !== this.tagName || e.preventDefault(); + var a = t(i).one(c.SHOW, function(e) { + e.isDefaultPrevented() || a.one(c.HIDDEN, function() { + t(n).is(":visible") && n.focus() + }) + }); + f._jQueryInterface.call(t(i), s, this) + }), t.fn[e] = f._jQueryInterface, t.fn[e].Constructor = f, t.fn[e].noConflict = function() { + return t.fn[e] = a, f._jQueryInterface + } + }(jQuery), function(t) { + var e = "scrollspy", + s = t.fn[e], + a = { + offset: 10, + method: "auto", + target: "" + }, + l = { + offset: "number", + method: "string", + target: "(string|element)" + }, + h = { + ACTIVATE: "activate.bs.scrollspy", + SCROLL: "scroll.bs.scrollspy", + LOAD_DATA_API: "load.bs.scrollspy.data-api" + }, + c = { + DROPDOWN_ITEM: "dropdown-item", + DROPDOWN_MENU: "dropdown-menu", + ACTIVE: "active" + }, + u = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: ".active", + NAV_LIST_GROUP: ".nav, .list-group", + NAV_LINKS: ".nav-link", + LIST_ITEMS: ".list-group-item", + DROPDOWN: ".dropdown", + DROPDOWN_ITEMS: ".dropdown-item", + DROPDOWN_TOGGLE: ".dropdown-toggle" + }, + d = { + OFFSET: "offset", + POSITION: "position" + }, + f = function() { + function s(e, i) { + var o = this; + n(this, s), this._element = e, this._scrollElement = "BODY" === e.tagName ? window : e, this._config = this._getConfig(i), this._selector = this._config.target + " " + u.NAV_LINKS + "," + this._config.target + " " + u.LIST_ITEMS + "," + this._config.target + " " + u.DROPDOWN_ITEMS, this._offsets = [], this._targets = [], this._activeTarget = null, this._scrollHeight = 0, t(this._scrollElement).on(h.SCROLL, function(t) { + return o._process(t) + }), this.refresh(), this._process() + } + return s.prototype.refresh = function() { + var e = this, + n = this._scrollElement !== this._scrollElement.window ? d.POSITION : d.OFFSET, + i = "auto" === this._config.method ? n : this._config.method, + o = i === d.POSITION ? this._getScrollTop() : 0; + this._offsets = [], this._targets = [], this._scrollHeight = this._getScrollHeight(), t.makeArray(t(this._selector)).map(function(e) { + var n = void 0, + s = r.getSelectorFromElement(e); + if (s && (n = t(s)[0]), n) { + var a = n.getBoundingClientRect(); + if (a.width || a.height) return [t(n)[i]().top + o, s] + } + return null + }).filter(function(t) { + return t + }).sort(function(t, e) { + return t[0] - e[0] + }).forEach(function(t) { + e._offsets.push(t[0]), e._targets.push(t[1]) + }) + }, s.prototype.dispose = function() { + t.removeData(this._element, "bs.scrollspy"), t(this._scrollElement).off(".bs.scrollspy"), this._element = null, this._scrollElement = null, this._config = null, this._selector = null, this._offsets = null, this._targets = null, this._activeTarget = null, this._scrollHeight = null + }, s.prototype._getConfig = function(n) { + if ("string" != typeof(n = t.extend({}, a, n)).target) { + var i = t(n.target).attr("id"); + i || (i = r.getUID(e), t(n.target).attr("id", i)), n.target = "#" + i + } + return r.typeCheckConfig(e, n, l), n + }, s.prototype._getScrollTop = function() { + return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop + }, s.prototype._getScrollHeight = function() { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) + }, s.prototype._getOffsetHeight = function() { + return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height + }, s.prototype._process = function() { + var t = this._getScrollTop() + this._config.offset, + e = this._getScrollHeight(), + n = this._config.offset + e - this._getOffsetHeight(); + if (this._scrollHeight !== e && this.refresh(), t >= n) { + var i = this._targets[this._targets.length - 1]; + this._activeTarget !== i && this._activate(i) + } else { + if (this._activeTarget && t < this._offsets[0] && this._offsets[0] > 0) return this._activeTarget = null, void this._clear(); + for (var o = this._offsets.length; o--;) this._activeTarget !== this._targets[o] && t >= this._offsets[o] && (void 0 === this._offsets[o + 1] || t < this._offsets[o + 1]) && this._activate(this._targets[o]) + } + }, s.prototype._activate = function(e) { + this._activeTarget = e, this._clear(); + var n = this._selector.split(","); + n = n.map(function(t) { + return t + '[data-target="' + e + '"],' + t + '[href="' + e + '"]' + }); + var i = t(n.join(",")); + i.hasClass(c.DROPDOWN_ITEM) ? (i.closest(u.DROPDOWN).find(u.DROPDOWN_TOGGLE).addClass(c.ACTIVE), i.addClass(c.ACTIVE)) : (i.addClass(c.ACTIVE), i.parents(u.NAV_LIST_GROUP).prev(u.NAV_LINKS + ", " + u.LIST_ITEMS).addClass(c.ACTIVE)), t(this._scrollElement).trigger(h.ACTIVATE, { + relatedTarget: e + }) + }, s.prototype._clear = function() { + t(this._selector).filter(u.ACTIVE).removeClass(c.ACTIVE) + }, s._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data("bs.scrollspy"), + o = "object" === (void 0 === e ? "undefined" : i(e)) && e; + if (n || (n = new s(this, o), t(this).data("bs.scrollspy", n)), "string" == typeof e) { + if (void 0 === n[e]) throw new Error('No method named "' + e + '"'); + n[e]() + } + }) + }, o(s, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return a + } + }]), s + }(); + t(window).on(h.LOAD_DATA_API, function() { + for (var e = t.makeArray(t(u.DATA_SPY)), n = e.length; n--;) { + var i = t(e[n]); + f._jQueryInterface.call(i, i.data()) + } + }), t.fn[e] = f._jQueryInterface, t.fn[e].Constructor = f, t.fn[e].noConflict = function() { + return t.fn[e] = s, f._jQueryInterface + } + }(jQuery), function(t) { + var e = t.fn.tab, + i = { + HIDE: "hide.bs.tab", + HIDDEN: "hidden.bs.tab", + SHOW: "show.bs.tab", + SHOWN: "shown.bs.tab", + CLICK_DATA_API: "click.bs.tab.data-api" + }, + s = { + DROPDOWN_MENU: "dropdown-menu", + ACTIVE: "active", + DISABLED: "disabled", + FADE: "fade", + SHOW: "show" + }, + a = { + DROPDOWN: ".dropdown", + NAV_LIST_GROUP: ".nav, .list-group", + ACTIVE: ".active", + DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', + DROPDOWN_TOGGLE: ".dropdown-toggle", + DROPDOWN_ACTIVE_CHILD: "> .dropdown-menu .active" + }, + l = function() { + function e(t) { + n(this, e), this._element = t + } + return e.prototype.show = function() { + var e = this; + if (!(this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && t(this._element).hasClass(s.ACTIVE) || t(this._element).hasClass(s.DISABLED))) { + var n = void 0, + o = void 0, + l = t(this._element).closest(a.NAV_LIST_GROUP)[0], + h = r.getSelectorFromElement(this._element); + l && (o = t.makeArray(t(l).find(a.ACTIVE)), o = o[o.length - 1]); + var c = t.Event(i.HIDE, { + relatedTarget: this._element + }), + u = t.Event(i.SHOW, { + relatedTarget: o + }); + if (o && t(o).trigger(c), t(this._element).trigger(u), !u.isDefaultPrevented() && !c.isDefaultPrevented()) { + h && (n = t(h)[0]), this._activate(this._element, l); + var d = function() { + var n = t.Event(i.HIDDEN, { + relatedTarget: e._element + }), + r = t.Event(i.SHOWN, { + relatedTarget: o + }); + t(o).trigger(n), t(e._element).trigger(r) + }; + n ? this._activate(n, n.parentNode, d) : d() + } + } + }, e.prototype.dispose = function() { + t.removeData(this._element, "bs.tab"), this._element = null + }, e.prototype._activate = function(e, n, i) { + var o = this, + l = t(n).find(a.ACTIVE)[0], + h = i && r.supportsTransitionEnd() && l && t(l).hasClass(s.FADE), + c = function() { + return o._transitionComplete(e, l, h, i) + }; + l && h ? t(l).one(r.TRANSITION_END, c).emulateTransitionEnd(150) : c(), l && t(l).removeClass(s.SHOW) + }, e.prototype._transitionComplete = function(e, n, i, o) { + if (n) { + t(n).removeClass(s.ACTIVE); + var l = t(n.parentNode).find(a.DROPDOWN_ACTIVE_CHILD)[0]; + l && t(l).removeClass(s.ACTIVE), n.setAttribute("aria-expanded", !1) + } + if (t(e).addClass(s.ACTIVE), e.setAttribute("aria-expanded", !0), i ? (r.reflow(e), t(e).addClass(s.SHOW)) : t(e).removeClass(s.FADE), e.parentNode && t(e.parentNode).hasClass(s.DROPDOWN_MENU)) { + var h = t(e).closest(a.DROPDOWN)[0]; + h && t(h).find(a.DROPDOWN_TOGGLE).addClass(s.ACTIVE), e.setAttribute("aria-expanded", !0) + } + o && o() + }, e._jQueryInterface = function(n) { + return this.each(function() { + var i = t(this), + o = i.data("bs.tab"); + if (o || (o = new e(this), i.data("bs.tab", o)), "string" == typeof n) { + if (void 0 === o[n]) throw new Error('No method named "' + n + '"'); + o[n]() + } + }) + }, o(e, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }]), e + }(); + t(document).on(i.CLICK_DATA_API, a.DATA_TOGGLE, function(e) { + e.preventDefault(), l._jQueryInterface.call(t(this), "show") + }), t.fn.tab = l._jQueryInterface, t.fn.tab.Constructor = l, t.fn.tab.noConflict = function() { + return t.fn.tab = e, l._jQueryInterface + } + }(jQuery), function(t) { + if ("undefined" == typeof Popper) throw new Error("Bootstrap tooltips require Popper.js (https://popper.js.org)"); + var e = "tooltip", + s = ".bs.tooltip", + a = t.fn[e], + l = new RegExp("(^|\\s)bs-tooltip\\S+", "g"), + h = { + animation: "boolean", + template: "string", + title: "(string|element|function)", + trigger: "string", + delay: "(number|object)", + html: "boolean", + selector: "(string|boolean)", + placement: "(string|function)", + offset: "(number|string)", + container: "(string|element|boolean)", + fallbackPlacement: "(string|array)" + }, + c = { + AUTO: "auto", + TOP: "top", + RIGHT: "right", + BOTTOM: "bottom", + LEFT: "left" + }, + u = { + animation: !0, + template: '', + trigger: "hover focus", + title: "", + delay: 0, + html: !1, + selector: !1, + placement: "top", + offset: 0, + container: !1, + fallbackPlacement: "flip" + }, + d = { + SHOW: "show", + OUT: "out" + }, + f = { + HIDE: "hide" + s, + HIDDEN: "hidden" + s, + SHOW: "show" + s, + SHOWN: "shown" + s, + INSERTED: "inserted" + s, + CLICK: "click" + s, + FOCUSIN: "focusin" + s, + FOCUSOUT: "focusout" + s, + MOUSEENTER: "mouseenter" + s, + MOUSELEAVE: "mouseleave" + s + }, + p = { + FADE: "fade", + SHOW: "show" + }, + _ = { + TOOLTIP: ".tooltip", + TOOLTIP_INNER: ".tooltip-inner", + ARROW: ".arrow" + }, + g = { + HOVER: "hover", + FOCUS: "focus", + CLICK: "click", + MANUAL: "manual" + }, + m = function() { + function a(t, e) { + n(this, a), this._isEnabled = !0, this._timeout = 0, this._hoverState = "", this._activeTrigger = {}, this._popper = null, this.element = t, this.config = this._getConfig(e), this.tip = null, this._setListeners() + } + return a.prototype.enable = function() { + this._isEnabled = !0 + }, a.prototype.disable = function() { + this._isEnabled = !1 + }, a.prototype.toggleEnabled = function() { + this._isEnabled = !this._isEnabled + }, a.prototype.toggle = function(e) { + if (e) { + var n = this.constructor.DATA_KEY, + i = t(e.currentTarget).data(n); + i || (i = new this.constructor(e.currentTarget, this._getDelegateConfig()), t(e.currentTarget).data(n, i)), i._activeTrigger.click = !i._activeTrigger.click, i._isWithActiveTrigger() ? i._enter(null, i) : i._leave(null, i) + } else { + if (t(this.getTipElement()).hasClass(p.SHOW)) return void this._leave(null, this); + this._enter(null, this) + } + }, a.prototype.dispose = function() { + clearTimeout(this._timeout), t.removeData(this.element, this.constructor.DATA_KEY), t(this.element).off(this.constructor.EVENT_KEY), t(this.element).closest(".modal").off("hide.bs.modal"), this.tip && t(this.tip).remove(), this._isEnabled = null, this._timeout = null, this._hoverState = null, this._activeTrigger = null, null !== this._popper && this._popper.destroy(), this._popper = null, this.element = null, this.config = null, this.tip = null + }, a.prototype.show = function() { + var e = this; + if ("none" === t(this.element).css("display")) throw new Error("Please use show on visible elements"); + var n = t.Event(this.constructor.Event.SHOW); + if (this.isWithContent() && this._isEnabled) { + t(this.element).trigger(n); + var i = t.contains(this.element.ownerDocument.documentElement, this.element); + if (n.isDefaultPrevented() || !i) return; + var o = this.getTipElement(), + s = r.getUID(this.constructor.NAME); + o.setAttribute("id", s), this.element.setAttribute("aria-describedby", s), this.setContent(), this.config.animation && t(o).addClass(p.FADE); + var l = "function" == typeof this.config.placement ? this.config.placement.call(this, o, this.element) : this.config.placement, + h = this._getAttachment(l); + this.addAttachmentClass(h); + var c = !1 === this.config.container ? document.body : t(this.config.container); + t(o).data(this.constructor.DATA_KEY, this), t.contains(this.element.ownerDocument.documentElement, this.tip) || t(o).appendTo(c), t(this.element).trigger(this.constructor.Event.INSERTED), this._popper = new Popper(this.element, o, { + placement: h, + modifiers: { + offset: { + offset: this.config.offset + }, + flip: { + behavior: this.config.fallbackPlacement + }, + arrow: { + element: _.ARROW + } + }, + onCreate: function(t) { + t.originalPlacement !== t.placement && e._handlePopperPlacementChange(t) + }, + onUpdate: function(t) { + e._handlePopperPlacementChange(t) + } + }), t(o).addClass(p.SHOW), "ontouchstart" in document.documentElement && t("body").children().on("mouseover", null, t.noop); + var u = function() { + e.config.animation && e._fixTransition(); + var n = e._hoverState; + e._hoverState = null, t(e.element).trigger(e.constructor.Event.SHOWN), n === d.OUT && e._leave(null, e) + }; + r.supportsTransitionEnd() && t(this.tip).hasClass(p.FADE) ? t(this.tip).one(r.TRANSITION_END, u).emulateTransitionEnd(a._TRANSITION_DURATION) : u() + } + }, a.prototype.hide = function(e) { + var n = this, + i = this.getTipElement(), + o = t.Event(this.constructor.Event.HIDE), + s = function() { + n._hoverState !== d.SHOW && i.parentNode && i.parentNode.removeChild(i), n._cleanTipClass(), n.element.removeAttribute("aria-describedby"), t(n.element).trigger(n.constructor.Event.HIDDEN), null !== n._popper && n._popper.destroy(), e && e() + }; + t(this.element).trigger(o), o.isDefaultPrevented() || (t(i).removeClass(p.SHOW), "ontouchstart" in document.documentElement && t("body").children().off("mouseover", null, t.noop), this._activeTrigger[g.CLICK] = !1, this._activeTrigger[g.FOCUS] = !1, this._activeTrigger[g.HOVER] = !1, r.supportsTransitionEnd() && t(this.tip).hasClass(p.FADE) ? t(i).one(r.TRANSITION_END, s).emulateTransitionEnd(150) : s(), this._hoverState = "") + }, a.prototype.update = function() { + null !== this._popper && this._popper.scheduleUpdate() + }, a.prototype.isWithContent = function() { + return Boolean(this.getTitle()) + }, a.prototype.addAttachmentClass = function(e) { + t(this.getTipElement()).addClass("bs-tooltip-" + e) + }, a.prototype.getTipElement = function() { + return this.tip = this.tip || t(this.config.template)[0] + }, a.prototype.setContent = function() { + var e = t(this.getTipElement()); + this.setElementContent(e.find(_.TOOLTIP_INNER), this.getTitle()), e.removeClass(p.FADE + " " + p.SHOW) + }, a.prototype.setElementContent = function(e, n) { + var o = this.config.html; + "object" === (void 0 === n ? "undefined" : i(n)) && (n.nodeType || n.jquery) ? o ? t(n).parent().is(e) || e.empty().append(n) : e.text(t(n).text()): e[o ? "html" : "text"](n) + }, a.prototype.getTitle = function() { + var t = this.element.getAttribute("data-original-title"); + return t || (t = "function" == typeof this.config.title ? this.config.title.call(this.element) : this.config.title), t + }, a.prototype._getAttachment = function(t) { + return c[t.toUpperCase()] + }, a.prototype._setListeners = function() { + var e = this; + this.config.trigger.split(" ").forEach(function(n) { + if ("click" === n) t(e.element).on(e.constructor.Event.CLICK, e.config.selector, function(t) { + return e.toggle(t) + }); + else if (n !== g.MANUAL) { + var i = n === g.HOVER ? e.constructor.Event.MOUSEENTER : e.constructor.Event.FOCUSIN, + o = n === g.HOVER ? e.constructor.Event.MOUSELEAVE : e.constructor.Event.FOCUSOUT; + t(e.element).on(i, e.config.selector, function(t) { + return e._enter(t) + }).on(o, e.config.selector, function(t) { + return e._leave(t) + }) + } + t(e.element).closest(".modal").on("hide.bs.modal", function() { + return e.hide() + }) + }), this.config.selector ? this.config = t.extend({}, this.config, { + trigger: "manual", + selector: "" + }) : this._fixTitle() + }, a.prototype._fixTitle = function() { + var t = i(this.element.getAttribute("data-original-title")); + (this.element.getAttribute("title") || "string" !== t) && (this.element.setAttribute("data-original-title", this.element.getAttribute("title") || ""), this.element.setAttribute("title", "")) + }, a.prototype._enter = function(e, n) { + var i = this.constructor.DATA_KEY; + (n = n || t(e.currentTarget).data(i)) || (n = new this.constructor(e.currentTarget, this._getDelegateConfig()), t(e.currentTarget).data(i, n)), e && (n._activeTrigger["focusin" === e.type ? g.FOCUS : g.HOVER] = !0), t(n.getTipElement()).hasClass(p.SHOW) || n._hoverState === d.SHOW ? n._hoverState = d.SHOW : (clearTimeout(n._timeout), n._hoverState = d.SHOW, n.config.delay && n.config.delay.show ? n._timeout = setTimeout(function() { + n._hoverState === d.SHOW && n.show() + }, n.config.delay.show) : n.show()) + }, a.prototype._leave = function(e, n) { + var i = this.constructor.DATA_KEY; + (n = n || t(e.currentTarget).data(i)) || (n = new this.constructor(e.currentTarget, this._getDelegateConfig()), t(e.currentTarget).data(i, n)), e && (n._activeTrigger["focusout" === e.type ? g.FOCUS : g.HOVER] = !1), n._isWithActiveTrigger() || (clearTimeout(n._timeout), n._hoverState = d.OUT, n.config.delay && n.config.delay.hide ? n._timeout = setTimeout(function() { + n._hoverState === d.OUT && n.hide() + }, n.config.delay.hide) : n.hide()) + }, a.prototype._isWithActiveTrigger = function() { + for (var t in this._activeTrigger) + if (this._activeTrigger[t]) return !0; + return !1 + }, a.prototype._getConfig = function(n) { + return (n = t.extend({}, this.constructor.Default, t(this.element).data(), n)).delay && "number" == typeof n.delay && (n.delay = { + show: n.delay, + hide: n.delay + }), n.title && "number" == typeof n.title && (n.title = n.title.toString()), n.content && "number" == typeof n.content && (n.content = n.content.toString()), r.typeCheckConfig(e, n, this.constructor.DefaultType), n + }, a.prototype._getDelegateConfig = function() { + var t = {}; + if (this.config) + for (var e in this.config) this.constructor.Default[e] !== this.config[e] && (t[e] = this.config[e]); + return t + }, a.prototype._cleanTipClass = function() { + var e = t(this.getTipElement()), + n = e.attr("class").match(l); + null !== n && n.length > 0 && e.removeClass(n.join("")) + }, a.prototype._handlePopperPlacementChange = function(t) { + this._cleanTipClass(), this.addAttachmentClass(this._getAttachment(t.placement)) + }, a.prototype._fixTransition = function() { + var e = this.getTipElement(), + n = this.config.animation; + null === e.getAttribute("x-placement") && (t(e).removeClass(p.FADE), this.config.animation = !1, this.hide(), this.show(), this.config.animation = n) + }, a._jQueryInterface = function(e) { + return this.each(function() { + var n = t(this).data("bs.tooltip"), + o = "object" === (void 0 === e ? "undefined" : i(e)) && e; + if ((n || !/dispose|hide/.test(e)) && (n || (n = new a(this, o), t(this).data("bs.tooltip", n)), "string" == typeof e)) { + if (void 0 === n[e]) throw new Error('No method named "' + e + '"'); + n[e]() + } + }) + }, o(a, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return u + } + }, { + key: "NAME", + get: function() { + return e + } + }, { + key: "DATA_KEY", + get: function() { + return "bs.tooltip" + } + }, { + key: "Event", + get: function() { + return f + } + }, { + key: "EVENT_KEY", + get: function() { + return s + } + }, { + key: "DefaultType", + get: function() { + return h + } + }]), a + }(); + return t.fn[e] = m._jQueryInterface, t.fn[e].Constructor = m, t.fn[e].noConflict = function() { + return t.fn[e] = a, m._jQueryInterface + }, m + }(jQuery)); + ! function(r) { + var a = "popover", + l = ".bs.popover", + h = r.fn[a], + c = new RegExp("(^|\\s)bs-popover\\S+", "g"), + u = r.extend({}, s.Default, { + placement: "right", + trigger: "click", + content: "", + template: '' + }), + d = r.extend({}, s.DefaultType, { + content: "(string|element|function)" + }), + f = { + FADE: "fade", + SHOW: "show" + }, + p = { + TITLE: ".popover-header", + CONTENT: ".popover-body" + }, + _ = { + HIDE: "hide" + l, + HIDDEN: "hidden" + l, + SHOW: "show" + l, + SHOWN: "shown" + l, + INSERTED: "inserted" + l, + CLICK: "click" + l, + FOCUSIN: "focusin" + l, + FOCUSOUT: "focusout" + l, + MOUSEENTER: "mouseenter" + l, + MOUSELEAVE: "mouseleave" + l + }, + g = function(s) { + function h() { + return n(this, h), t(this, s.apply(this, arguments)) + } + return e(h, s), h.prototype.isWithContent = function() { + return this.getTitle() || this._getContent() + }, h.prototype.addAttachmentClass = function(t) { + r(this.getTipElement()).addClass("bs-popover-" + t) + }, h.prototype.getTipElement = function() { + return this.tip = this.tip || r(this.config.template)[0] + }, h.prototype.setContent = function() { + var t = r(this.getTipElement()); + this.setElementContent(t.find(p.TITLE), this.getTitle()), this.setElementContent(t.find(p.CONTENT), this._getContent()), t.removeClass(f.FADE + " " + f.SHOW) + }, h.prototype._getContent = function() { + return this.element.getAttribute("data-content") || ("function" == typeof this.config.content ? this.config.content.call(this.element) : this.config.content) + }, h.prototype._cleanTipClass = function() { + var t = r(this.getTipElement()), + e = t.attr("class").match(c); + null !== e && e.length > 0 && t.removeClass(e.join("")) + }, h._jQueryInterface = function(t) { + return this.each(function() { + var e = r(this).data("bs.popover"), + n = "object" === (void 0 === t ? "undefined" : i(t)) ? t : null; + if ((e || !/destroy|hide/.test(t)) && (e || (e = new h(this, n), r(this).data("bs.popover", e)), "string" == typeof t)) { + if (void 0 === e[t]) throw new Error('No method named "' + t + '"'); + e[t]() + } + }) + }, o(h, null, [{ + key: "VERSION", + get: function() { + return "4.0.0-beta" + } + }, { + key: "Default", + get: function() { + return u + } + }, { + key: "NAME", + get: function() { + return a + } + }, { + key: "DATA_KEY", + get: function() { + return "bs.popover" + } + }, { + key: "Event", + get: function() { + return _ + } + }, { + key: "EVENT_KEY", + get: function() { + return l + } + }, { + key: "DefaultType", + get: function() { + return d + } + }]), h + }(s); + r.fn[a] = g._jQueryInterface, r.fn[a].Constructor = g, r.fn[a].noConflict = function() { + return r.fn[a] = h, g._jQueryInterface + } + }(jQuery) +}(); \ No newline at end of file diff --git a/web/libs/js/jquery-1.10.2.min.map b/web/libs/js/jquery-1.10.2.min.map new file mode 100644 index 0000000..eda3462 --- /dev/null +++ b/web/libs/js/jquery-1.10.2.min.map @@ -0,0 +1 @@ +{"version":3,"file":"jquery.min.js","sources":["jquery.js"],"names":["window","undefined","readyList","rootjQuery","core_strundefined","location","document","docElem","documentElement","_jQuery","jQuery","_$","$","class2type","core_deletedIds","core_version","core_concat","concat","core_push","push","core_slice","slice","core_indexOf","indexOf","core_toString","toString","core_hasOwn","hasOwnProperty","core_trim","trim","selector","context","fn","init","core_pnum","source","core_rnotwhite","rtrim","rquickExpr","rsingleTag","rvalidchars","rvalidbraces","rvalidescape","rvalidtokens","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","completed","event","addEventListener","type","readyState","detach","ready","removeEventListener","detachEvent","prototype","jquery","constructor","match","elem","this","charAt","length","exec","find","merge","parseHTML","nodeType","ownerDocument","test","isPlainObject","isFunction","attr","getElementById","parentNode","id","makeArray","toArray","call","get","num","pushStack","elems","ret","prevObject","each","callback","args","promise","done","apply","arguments","first","eq","last","i","len","j","map","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isArray","expando","Math","random","replace","noConflict","isReady","readyWait","holdReady","hold","wait","body","setTimeout","resolveWith","trigger","off","obj","Array","isWindow","isNumeric","isNaN","parseFloat","isFinite","String","key","e","support","ownLast","isEmptyObject","error","msg","Error","data","keepScripts","parsed","scripts","createElement","buildFragment","remove","childNodes","parseJSON","JSON","parse","Function","parseXML","xml","tmp","DOMParser","parseFromString","ActiveXObject","async","loadXML","getElementsByTagName","noop","globalEval","execScript","camelCase","string","nodeName","toLowerCase","value","isArraylike","text","arr","results","Object","inArray","max","second","l","grep","inv","retVal","arg","guid","proxy","access","chainable","emptyGet","raw","bulk","now","Date","getTime","swap","old","style","Deferred","attachEvent","top","frameElement","doScroll","doScrollCheck","split","cachedruns","Expr","getText","isXML","compile","outermostContext","sortInput","setDocument","documentIsHTML","rbuggyQSA","rbuggyMatches","matches","contains","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","hasDuplicate","sortOrder","a","b","strundefined","MAX_NEGATIVE","hasOwn","pop","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rsibling","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rnative","rinputs","rheader","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","fromCharCode","els","Sizzle","seed","m","groups","nid","newContext","newSelector","getElementsByClassName","qsa","tokenize","getAttribute","setAttribute","toSelector","join","querySelectorAll","qsaError","removeAttribute","select","keys","cache","cacheLength","shift","markFunction","assert","div","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","node","doc","parent","defaultView","className","appendChild","createComment","innerHTML","firstChild","getById","getElementsByName","filter","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","dirkey","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","matcherCachedRuns","bySet","byElement","superMatcher","expandContext","setMatched","matchedCount","outermost","contextBackup","dirrunsUnique","group","contexts","token","div1","defaultValue","unique","isXMLDoc","optionsCache","createOptions","object","flag","Callbacks","firing","memory","fired","firingLength","firingIndex","firingStart","list","stack","once","fire","stopOnFalse","self","disable","add","index","lock","locked","fireWith","func","tuples","state","always","deferred","fail","then","fns","newDefer","tuple","action","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","progressContexts","resolveContexts","fragment","opt","eventName","isSupported","cssText","getSetAttribute","leadingWhitespace","tbody","htmlSerialize","hrefNormalized","opacity","cssFloat","checkOn","optSelected","enctype","html5Clone","cloneNode","outerHTML","inlineBlockNeedsLayout","shrinkWrapBlocks","pixelPosition","deleteExpando","noCloneEvent","reliableMarginRight","boxSizingReliable","noCloneChecked","optDisabled","radioValue","createDocumentFragment","appendChecked","checkClone","click","change","focusin","backgroundClip","clearCloneStyle","container","marginDiv","tds","divReset","offsetHeight","display","reliableHiddenOffsets","zoom","boxSizing","offsetWidth","getComputedStyle","width","marginRight","rbrace","rmultiDash","internalData","pvt","acceptData","thisCache","internalKey","isNode","toJSON","internalRemoveData","isEmptyDataObject","cleanData","noData","applet","embed","hasData","removeData","_data","_removeData","dataAttr","queue","dequeue","startLength","hooks","_queueHooks","next","stop","setter","delay","time","fx","speeds","timeout","clearTimeout","clearQueue","count","defer","nodeHook","boolHook","rclass","rreturn","rfocusable","rclickable","ruseDefault","getSetInput","removeAttr","prop","removeProp","propFix","addClass","classes","clazz","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","valHooks","set","option","one","optionSet","nType","attrHooks","propName","attrNames","for","class","notxml","propHooks","tabindex","parseInt","getter","setAttributeNode","createAttribute","coords","contenteditable","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","global","types","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","getPreventDefault","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","orig","related","submitBubbles","form","_submit_bubble","changeBubbles","propertyName","_just_changed","focusinBubbles","attaches","on","origFn","triggerHandler","isSimple","rparentsprev","rneedsContext","guaranteedUnique","children","contents","prev","targets","winnow","is","closest","pos","prevAll","addBack","sibling","parents","parentsUntil","until","nextAll","nextUntil","prevUntil","siblings","contentDocument","contentWindow","reverse","n","r","qualifier","createSafeFragment","nodeNames","safeFrag","rinlinejQuery","rnoshimcache","rleadingWhitespace","rxhtmlTag","rtagName","rtbody","rhtml","rnoInnerhtml","manipulation_rcheckableType","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","legend","area","param","thead","tr","col","td","safeFragment","fragmentDiv","optgroup","tfoot","colgroup","caption","th","append","createTextNode","domManip","manipulationTarget","prepend","insertBefore","before","after","keepData","getAll","setGlobalEval","dataAndEvents","deepDataAndEvents","html","replaceWith","allowIntersection","hasScripts","iNoClone","disableScript","restoreScript","_evalUrl","content","refElements","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultChecked","defaultSelected","appendTo","prependTo","insertAfter","replaceAll","insert","found","fixDefaultChecked","destElements","srcElements","inPage","selection","wrap","safe","nodes","url","ajax","dataType","throws","wrapAll","wrapInner","unwrap","iframe","getStyles","curCSS","ralpha","ropacity","rposition","rdisplayswap","rmargin","rnumsplit","rnumnonpx","rrelNum","elemdisplay","BODY","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssExpand","cssPrefixes","vendorPropName","capName","origName","isHidden","el","css","showHide","show","hidden","css_defaultDisplay","styles","hide","toggle","cssHooks","computed","cssNumber","columnCount","fillOpacity","lineHeight","order","orphans","widows","zIndex","cssProps","float","extra","_computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","setPositiveNumber","subtract","augmentWidthOrHeight","isBorderBox","getWidthOrHeight","valueIsBorderBox","actualDisplay","write","close","$1","visible","margin","padding","border","prefix","suffix","expand","expanded","parts","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","serialize","serializeArray","traditional","s","encodeURIComponent","ajaxSettings","buildParams","v","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","ajaxLocParts","ajaxLocation","ajax_nonce","ajax_rquery","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","_load","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","originalOptions","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","params","response","responseText","complete","status","active","lastModified","etag","isLocal","processData","contentType","accepts","*","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","code","abort","statusText","finalText","success","method","crossDomain","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","isSuccess","modified","ajaxHandleResponses","ajaxConvert","rejectWith","getJSON","getScript","firstDataType","ct","finalDataType","conv2","current","conv","dataFilter","script","text script","head","scriptCharset","charset","onload","onreadystatechange","isAbort","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","xhrCallbacks","xhrSupported","xhrId","xhrOnUnloadAbort","createStandardXHR","XMLHttpRequest","createActiveXHR","xhr","cors","username","open","xhrFields","firefoxAccessException","unload","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","tween","createTween","unit","scale","maxIterations","createFxNow","animation","collection","Animation","properties","stopped","tick","currentTime","startTime","duration","percent","tweens","run","opts","specialEasing","originalProperties","Tween","easing","gotoEnd","propFilter","timer","anim","tweener","prefilter","oldfire","dataShow","unqueued","overflow","overflowX","overflowY","eased","step","cssFn","speed","animate","genFx","fadeTo","to","optall","doAnimation","finish","stopQueue","timers","includeWidth","height","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","linear","p","swing","cos","PI","interval","setInterval","clearInterval","slow","fast","animated","offset","setOffset","win","box","getBoundingClientRect","getWindow","pageYOffset","pageXOffset","curElem","curOffset","curCSSTop","curCSSLeft","calculatePosition","curPosition","curTop","curLeft","using","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","module","exports","define","amd"],"mappings":";;;CAaA,SAAWA,EAAQC,GAOnB,GAECC,GAGAC,EAIAC,QAA2BH,GAG3BI,EAAWL,EAAOK,SAClBC,EAAWN,EAAOM,SAClBC,EAAUD,EAASE,gBAGnBC,EAAUT,EAAOU,OAGjBC,EAAKX,EAAOY,EAGZC,KAGAC,KAEAC,EAAe,SAGfC,EAAcF,EAAgBG,OAC9BC,EAAYJ,EAAgBK,KAC5BC,EAAaN,EAAgBO,MAC7BC,EAAeR,EAAgBS,QAC/BC,EAAgBX,EAAWY,SAC3BC,EAAcb,EAAWc,eACzBC,EAAYb,EAAac,KAGzBnB,EAAS,SAAUoB,EAAUC,GAE5B,MAAO,IAAIrB,GAAOsB,GAAGC,KAAMH,EAAUC,EAAS5B,IAI/C+B,EAAY,sCAAsCC,OAGlDC,EAAiB,OAGjBC,EAAQ,qCAKRC,EAAa,sCAGbC,EAAa,6BAGbC,EAAc,gBACdC,EAAe,uBACfC,EAAe,qCACfC,EAAe,kEAGfC,EAAY,QACZC,EAAa,eAGbC,EAAa,SAAUC,EAAKC,GAC3B,MAAOA,GAAOC,eAIfC,EAAY,SAAUC,IAGhB7C,EAAS8C,kBAAmC,SAAfD,EAAME,MAA2C,aAAxB/C,EAASgD,cACnEC,IACA7C,EAAO8C,UAITD,EAAS,WACHjD,EAAS8C,kBACb9C,EAASmD,oBAAqB,mBAAoBP,GAAW,GAC7DlD,EAAOyD,oBAAqB,OAAQP,GAAW,KAG/C5C,EAASoD,YAAa,qBAAsBR,GAC5ClD,EAAO0D,YAAa,SAAUR,IAIjCxC,GAAOsB,GAAKtB,EAAOiD,WAElBC,OAAQ7C,EAER8C,YAAanD,EACbuB,KAAM,SAAUH,EAAUC,EAAS5B,GAClC,GAAI2D,GAAOC,CAGX,KAAMjC,EACL,MAAOkC,KAIR,IAAyB,gBAAblC,GAAwB,CAUnC,GAPCgC,EAF2B,MAAvBhC,EAASmC,OAAO,IAAyD,MAA3CnC,EAASmC,OAAQnC,EAASoC,OAAS,IAAepC,EAASoC,QAAU,GAE7F,KAAMpC,EAAU,MAGlBQ,EAAW6B,KAAMrC,IAIrBgC,IAAUA,EAAM,IAAO/B,EAqDrB,OAAMA,GAAWA,EAAQ6B,QACtB7B,GAAW5B,GAAaiE,KAAMtC,GAKhCkC,KAAKH,YAAa9B,GAAUqC,KAAMtC,EAxDzC,IAAKgC,EAAM,GAAK,CAWf,GAVA/B,EAAUA,YAAmBrB,GAASqB,EAAQ,GAAKA,EAGnDrB,EAAO2D,MAAOL,KAAMtD,EAAO4D,UAC1BR,EAAM,GACN/B,GAAWA,EAAQwC,SAAWxC,EAAQyC,eAAiBzC,EAAUzB,GACjE,IAIIiC,EAAWkC,KAAMX,EAAM,KAAQpD,EAAOgE,cAAe3C,GACzD,IAAM+B,IAAS/B,GAETrB,EAAOiE,WAAYX,KAAMF,IAC7BE,KAAMF,GAAS/B,EAAS+B,IAIxBE,KAAKY,KAAMd,EAAO/B,EAAS+B,GAK9B,OAAOE,MAQP,GAJAD,EAAOzD,EAASuE,eAAgBf,EAAM,IAIjCC,GAAQA,EAAKe,WAAa,CAG9B,GAAKf,EAAKgB,KAAOjB,EAAM,GACtB,MAAO3D,GAAWiE,KAAMtC,EAIzBkC,MAAKE,OAAS,EACdF,KAAK,GAAKD,EAKX,MAFAC,MAAKjC,QAAUzB,EACf0D,KAAKlC,SAAWA,EACTkC,KAcH,MAAKlC,GAASyC,UACpBP,KAAKjC,QAAUiC,KAAK,GAAKlC,EACzBkC,KAAKE,OAAS,EACPF,MAIItD,EAAOiE,WAAY7C,GACvB3B,EAAWqD,MAAO1B,IAGrBA,EAASA,WAAa7B,IAC1B+D,KAAKlC,SAAWA,EAASA,SACzBkC,KAAKjC,QAAUD,EAASC,SAGlBrB,EAAOsE,UAAWlD,EAAUkC,QAIpClC,SAAU,GAGVoC,OAAQ,EAERe,QAAS,WACR,MAAO7D,GAAW8D,KAAMlB,OAKzBmB,IAAK,SAAUC,GACd,MAAc,OAAPA,EAGNpB,KAAKiB,UAGG,EAANG,EAAUpB,KAAMA,KAAKE,OAASkB,GAAQpB,KAAMoB,IAKhDC,UAAW,SAAUC,GAGpB,GAAIC,GAAM7E,EAAO2D,MAAOL,KAAKH,cAAeyB,EAO5C,OAJAC,GAAIC,WAAaxB,KACjBuB,EAAIxD,QAAUiC,KAAKjC,QAGZwD,GAMRE,KAAM,SAAUC,EAAUC,GACzB,MAAOjF,GAAO+E,KAAMzB,KAAM0B,EAAUC,IAGrCnC,MAAO,SAAUxB,GAIhB,MAFAtB,GAAO8C,MAAMoC,UAAUC,KAAM7D,GAEtBgC,MAGR3C,MAAO,WACN,MAAO2C,MAAKqB,UAAWjE,EAAW0E,MAAO9B,KAAM+B,aAGhDC,MAAO,WACN,MAAOhC,MAAKiC,GAAI,IAGjBC,KAAM,WACL,MAAOlC,MAAKiC,GAAI,KAGjBA,GAAI,SAAUE,GACb,GAAIC,GAAMpC,KAAKE,OACdmC,GAAKF,GAAU,EAAJA,EAAQC,EAAM,EAC1B,OAAOpC,MAAKqB,UAAWgB,GAAK,GAASD,EAAJC,GAAYrC,KAAKqC,SAGnDC,IAAK,SAAUZ,GACd,MAAO1B,MAAKqB,UAAW3E,EAAO4F,IAAItC,KAAM,SAAUD,EAAMoC,GACvD,MAAOT,GAASR,KAAMnB,EAAMoC,EAAGpC,OAIjCwC,IAAK,WACJ,MAAOvC,MAAKwB,YAAcxB,KAAKH,YAAY,OAK5C1C,KAAMD,EACNsF,QAASA,KACTC,UAAWA,QAIZ/F,EAAOsB,GAAGC,KAAK0B,UAAYjD,EAAOsB,GAElCtB,EAAOgG,OAAShG,EAAOsB,GAAG0E,OAAS,WAClC,GAAIC,GAAKC,EAAaC,EAAMC,EAAMC,EAASC,EAC1CC,EAASlB,UAAU,OACnBI,EAAI,EACJjC,EAAS6B,UAAU7B,OACnBgD,GAAO,CAqBR,KAlBuB,iBAAXD,KACXC,EAAOD,EACPA,EAASlB,UAAU,OAEnBI,EAAI,GAIkB,gBAAXc,IAAwBvG,EAAOiE,WAAWsC,KACrDA,MAII/C,IAAWiC,IACfc,EAASjD,OACPmC,GAGSjC,EAAJiC,EAAYA,IAEnB,GAAmC,OAA7BY,EAAUhB,UAAWI,IAE1B,IAAMW,IAAQC,GACbJ,EAAMM,EAAQH,GACdD,EAAOE,EAASD,GAGXG,IAAWJ,IAKXK,GAAQL,IAAUnG,EAAOgE,cAAcmC,KAAUD,EAAclG,EAAOyG,QAAQN,MAC7ED,GACJA,GAAc,EACdI,EAAQL,GAAOjG,EAAOyG,QAAQR,GAAOA,MAGrCK,EAAQL,GAAOjG,EAAOgE,cAAciC,GAAOA,KAI5CM,EAAQH,GAASpG,EAAOgG,OAAQQ,EAAMF,EAAOH,IAGlCA,IAAS5G,IACpBgH,EAAQH,GAASD,GAOrB,OAAOI,IAGRvG,EAAOgG,QAGNU,QAAS,UAAarG,EAAesG,KAAKC,UAAWC,QAAS,MAAO,IAErEC,WAAY,SAAUN,GASrB,MARKlH,GAAOY,IAAMF,IACjBV,EAAOY,EAAID,GAGPuG,GAAQlH,EAAOU,SAAWA,IAC9BV,EAAOU,OAASD,GAGVC,GAIR+G,SAAS,EAITC,UAAW,EAGXC,UAAW,SAAUC,GACfA,EACJlH,EAAOgH,YAEPhH,EAAO8C,OAAO,IAKhBA,MAAO,SAAUqE,GAGhB,GAAKA,KAAS,KAASnH,EAAOgH,WAAYhH,EAAO+G,QAAjD,CAKA,IAAMnH,EAASwH,KACd,MAAOC,YAAYrH,EAAO8C,MAI3B9C,GAAO+G,SAAU,EAGZI,KAAS,KAAUnH,EAAOgH,UAAY,IAK3CxH,EAAU8H,YAAa1H,GAAYI,IAG9BA,EAAOsB,GAAGiG,SACdvH,EAAQJ,GAAW2H,QAAQ,SAASC,IAAI,YAO1CvD,WAAY,SAAUwD,GACrB,MAA4B,aAArBzH,EAAO2C,KAAK8E,IAGpBhB,QAASiB,MAAMjB,SAAW,SAAUgB,GACnC,MAA4B,UAArBzH,EAAO2C,KAAK8E,IAGpBE,SAAU,SAAUF,GAEnB,MAAc,OAAPA,GAAeA,GAAOA,EAAInI,QAGlCsI,UAAW,SAAUH,GACpB,OAAQI,MAAOC,WAAWL,KAAUM,SAAUN,IAG/C9E,KAAM,SAAU8E,GACf,MAAY,OAAPA,EACWA,EAARO,GAEc,gBAARP,IAAmC,kBAARA,GACxCtH,EAAYW,EAAc0D,KAAKiD,KAAU,eAClCA,IAGTzD,cAAe,SAAUyD,GACxB,GAAIQ,EAKJ,KAAMR,GAA4B,WAArBzH,EAAO2C,KAAK8E,IAAqBA,EAAI5D,UAAY7D,EAAO2H,SAAUF,GAC9E,OAAO,CAGR,KAEC,GAAKA,EAAItE,cACPnC,EAAYwD,KAAKiD,EAAK,iBACtBzG,EAAYwD,KAAKiD,EAAItE,YAAYF,UAAW,iBAC7C,OAAO,EAEP,MAAQiF,GAET,OAAO,EAKR,GAAKlI,EAAOmI,QAAQC,QACnB,IAAMH,IAAOR,GACZ,MAAOzG,GAAYwD,KAAMiD,EAAKQ,EAMhC,KAAMA,IAAOR,IAEb,MAAOQ,KAAQ1I,GAAayB,EAAYwD,KAAMiD,EAAKQ,IAGpDI,cAAe,SAAUZ,GACxB,GAAIrB,EACJ,KAAMA,IAAQqB,GACb,OAAO,CAER,QAAO,GAGRa,MAAO,SAAUC,GAChB,KAAUC,OAAOD,IAMlB3E,UAAW,SAAU6E,EAAMpH,EAASqH,GACnC,IAAMD,GAAwB,gBAATA,GACpB,MAAO,KAEgB,kBAAZpH,KACXqH,EAAcrH,EACdA,GAAU,GAEXA,EAAUA,GAAWzB,CAErB,IAAI+I,GAAS9G,EAAW4B,KAAMgF,GAC7BG,GAAWF,KAGZ,OAAKC,IACKtH,EAAQwH,cAAeF,EAAO,MAGxCA,EAAS3I,EAAO8I,eAAiBL,GAAQpH,EAASuH,GAC7CA,GACJ5I,EAAQ4I,GAAUG,SAEZ/I,EAAO2D,SAAWgF,EAAOK,cAGjCC,UAAW,SAAUR,GAEpB,MAAKnJ,GAAO4J,MAAQ5J,EAAO4J,KAAKC,MACxB7J,EAAO4J,KAAKC,MAAOV,GAGb,OAATA,EACGA,EAGa,gBAATA,KAGXA,EAAOzI,EAAOmB,KAAMsH,GAEfA,GAGC3G,EAAYiC,KAAM0E,EAAK5B,QAAS7E,EAAc,KACjD6E,QAAS5E,EAAc,KACvB4E,QAAS9E,EAAc,MAEXqH,SAAU,UAAYX,MAKtCzI,EAAOsI,MAAO,iBAAmBG,GAAjCzI,IAIDqJ,SAAU,SAAUZ,GACnB,GAAIa,GAAKC,CACT,KAAMd,GAAwB,gBAATA,GACpB,MAAO,KAER,KACMnJ,EAAOkK,WACXD,EAAM,GAAIC,WACVF,EAAMC,EAAIE,gBAAiBhB,EAAO,cAElCa,EAAM,GAAII,eAAe,oBACzBJ,EAAIK,MAAQ,QACZL,EAAIM,QAASnB,IAEb,MAAOP,GACRoB,EAAM/J,EAKP,MAHM+J,IAAQA,EAAIxJ,kBAAmBwJ,EAAIO,qBAAsB,eAAgBrG,QAC9ExD,EAAOsI,MAAO,gBAAkBG,GAE1Ba,GAGRQ,KAAM,aAKNC,WAAY,SAAUtB,GAChBA,GAAQzI,EAAOmB,KAAMsH,KAIvBnJ,EAAO0K,YAAc,SAAUvB,GAChCnJ,EAAe,KAAEkF,KAAMlF,EAAQmJ,KAC3BA,IAMPwB,UAAW,SAAUC,GACpB,MAAOA,GAAOrD,QAAS3E,EAAW,OAAQ2E,QAAS1E,EAAYC,IAGhE+H,SAAU,SAAU9G,EAAM+C,GACzB,MAAO/C,GAAK8G,UAAY9G,EAAK8G,SAASC,gBAAkBhE,EAAKgE,eAI9DrF,KAAM,SAAU0C,EAAKzC,EAAUC,GAC9B,GAAIoF,GACH5E,EAAI,EACJjC,EAASiE,EAAIjE,OACbiD,EAAU6D,EAAa7C,EAExB,IAAKxC,GACJ,GAAKwB,GACJ,KAAYjD,EAAJiC,EAAYA,IAGnB,GAFA4E,EAAQrF,EAASI,MAAOqC,EAAKhC,GAAKR,GAE7BoF,KAAU,EACd,UAIF,KAAM5E,IAAKgC,GAGV,GAFA4C,EAAQrF,EAASI,MAAOqC,EAAKhC,GAAKR,GAE7BoF,KAAU,EACd,UAOH,IAAK5D,GACJ,KAAYjD,EAAJiC,EAAYA,IAGnB,GAFA4E,EAAQrF,EAASR,KAAMiD,EAAKhC,GAAKA,EAAGgC,EAAKhC,IAEpC4E,KAAU,EACd,UAIF,KAAM5E,IAAKgC,GAGV,GAFA4C,EAAQrF,EAASR,KAAMiD,EAAKhC,GAAKA,EAAGgC,EAAKhC,IAEpC4E,KAAU,EACd,KAMJ,OAAO5C,IAIRtG,KAAMD,IAAcA,EAAUsD,KAAK,gBAClC,SAAU+F,GACT,MAAe,OAARA,EACN,GACArJ,EAAUsD,KAAM+F,IAIlB,SAAUA,GACT,MAAe,OAARA,EACN,IACEA,EAAO,IAAK1D,QAASlF,EAAO,KAIjC2C,UAAW,SAAUkG,EAAKC,GACzB,GAAI5F,GAAM4F,KAaV,OAXY,OAAPD,IACCF,EAAaI,OAAOF,IACxBxK,EAAO2D,MAAOkB,EACE,gBAAR2F,IACLA,GAAQA,GAGXhK,EAAUgE,KAAMK,EAAK2F,IAIhB3F,GAGR8F,QAAS,SAAUtH,EAAMmH,EAAK/E,GAC7B,GAAIC,EAEJ,IAAK8E,EAAM,CACV,GAAK5J,EACJ,MAAOA,GAAa4D,KAAMgG,EAAKnH,EAAMoC,EAMtC,KAHAC,EAAM8E,EAAIhH,OACViC,EAAIA,EAAQ,EAAJA,EAAQkB,KAAKiE,IAAK,EAAGlF,EAAMD,GAAMA,EAAI,EAEjCC,EAAJD,EAASA,IAEhB,GAAKA,IAAK+E,IAAOA,EAAK/E,KAAQpC,EAC7B,MAAOoC,GAKV,MAAO,IAGR9B,MAAO,SAAU2B,EAAOuF,GACvB,GAAIC,GAAID,EAAOrH,OACdiC,EAAIH,EAAM9B,OACVmC,EAAI,CAEL,IAAkB,gBAANmF,GACX,KAAYA,EAAJnF,EAAOA,IACdL,EAAOG,KAAQoF,EAAQlF,OAGxB,OAAQkF,EAAOlF,KAAOpG,EACrB+F,EAAOG,KAAQoF,EAAQlF,IAMzB,OAFAL,GAAM9B,OAASiC,EAERH,GAGRyF,KAAM,SAAUnG,EAAOI,EAAUgG,GAChC,GAAIC,GACHpG,KACAY,EAAI,EACJjC,EAASoB,EAAMpB,MAKhB,KAJAwH,IAAQA,EAIIxH,EAAJiC,EAAYA,IACnBwF,IAAWjG,EAAUJ,EAAOa,GAAKA,GAC5BuF,IAAQC,GACZpG,EAAIpE,KAAMmE,EAAOa,GAInB,OAAOZ,IAIRe,IAAK,SAAUhB,EAAOI,EAAUkG,GAC/B,GAAIb,GACH5E,EAAI,EACJjC,EAASoB,EAAMpB,OACfiD,EAAU6D,EAAa1F,GACvBC,IAGD,IAAK4B,EACJ,KAAYjD,EAAJiC,EAAYA,IACnB4E,EAAQrF,EAAUJ,EAAOa,GAAKA,EAAGyF,GAEnB,MAATb,IACJxF,EAAKA,EAAIrB,QAAW6G,OAMtB,KAAM5E,IAAKb,GACVyF,EAAQrF,EAAUJ,EAAOa,GAAKA,EAAGyF,GAEnB,MAATb,IACJxF,EAAKA,EAAIrB,QAAW6G,EAMvB,OAAO/J,GAAY8E,SAAWP,IAI/BsG,KAAM,EAINC,MAAO,SAAU9J,EAAID,GACpB,GAAI4D,GAAMmG,EAAO7B,CAUjB,OARwB,gBAAZlI,KACXkI,EAAMjI,EAAID,GACVA,EAAUC,EACVA,EAAKiI,GAKAvJ,EAAOiE,WAAY3C,IAKzB2D,EAAOvE,EAAW8D,KAAMa,UAAW,GACnC+F,EAAQ,WACP,MAAO9J,GAAG8D,MAAO/D,GAAWiC,KAAM2B,EAAK1E,OAAQG,EAAW8D,KAAMa,cAIjE+F,EAAMD,KAAO7J,EAAG6J,KAAO7J,EAAG6J,MAAQnL,EAAOmL,OAElCC,GAZC7L,GAiBT8L,OAAQ,SAAUzG,EAAOtD,EAAI2G,EAAKoC,EAAOiB,EAAWC,EAAUC,GAC7D,GAAI/F,GAAI,EACPjC,EAASoB,EAAMpB,OACfiI,EAAc,MAAPxD,CAGR,IAA4B,WAAvBjI,EAAO2C,KAAMsF,GAAqB,CACtCqD,GAAY,CACZ,KAAM7F,IAAKwC,GACVjI,EAAOqL,OAAQzG,EAAOtD,EAAImE,EAAGwC,EAAIxC,IAAI,EAAM8F,EAAUC,OAIhD,IAAKnB,IAAU9K,IACrB+L,GAAY,EAENtL,EAAOiE,WAAYoG,KACxBmB,GAAM,GAGFC,IAECD,GACJlK,EAAGkD,KAAMI,EAAOyF,GAChB/I,EAAK,OAILmK,EAAOnK,EACPA,EAAK,SAAU+B,EAAM4E,EAAKoC,GACzB,MAAOoB,GAAKjH,KAAMxE,EAAQqD,GAAQgH,MAKhC/I,GACJ,KAAYkC,EAAJiC,EAAYA,IACnBnE,EAAIsD,EAAMa,GAAIwC,EAAKuD,EAAMnB,EAAQA,EAAM7F,KAAMI,EAAMa,GAAIA,EAAGnE,EAAIsD,EAAMa,GAAIwC,IAK3E,OAAOqD,GACN1G,EAGA6G,EACCnK,EAAGkD,KAAMI,GACTpB,EAASlC,EAAIsD,EAAM,GAAIqD,GAAQsD,GAGlCG,IAAK,WACJ,OAAO,GAAMC,OAASC,WAMvBC,KAAM,SAAUxI,EAAMgD,EAASrB,EAAUC,GACxC,GAAIJ,GAAKuB,EACR0F,IAGD,KAAM1F,IAAQC,GACbyF,EAAK1F,GAAS/C,EAAK0I,MAAO3F,GAC1B/C,EAAK0I,MAAO3F,GAASC,EAASD,EAG/BvB,GAAMG,EAASI,MAAO/B,EAAM4B,MAG5B,KAAMmB,IAAQC,GACbhD,EAAK0I,MAAO3F,GAAS0F,EAAK1F,EAG3B,OAAOvB,MAIT7E,EAAO8C,MAAMoC,QAAU,SAAUuC,GAChC,IAAMjI,EAOL,GALAA,EAAYQ,EAAOgM,WAKU,aAAxBpM,EAASgD,WAEbyE,WAAYrH,EAAO8C,WAGb,IAAKlD,EAAS8C,iBAEpB9C,EAAS8C,iBAAkB,mBAAoBF,GAAW,GAG1DlD,EAAOoD,iBAAkB,OAAQF,GAAW,OAGtC,CAEN5C,EAASqM,YAAa,qBAAsBzJ,GAG5ClD,EAAO2M,YAAa,SAAUzJ,EAI9B,IAAI0J,IAAM,CAEV,KACCA,EAA6B,MAAvB5M,EAAO6M,cAAwBvM,EAASE,gBAC7C,MAAMoI,IAEHgE,GAAOA,EAAIE,UACf,QAAUC,KACT,IAAMrM,EAAO+G,QAAU,CAEtB,IAGCmF,EAAIE,SAAS,QACZ,MAAMlE,GACP,MAAOb,YAAYgF,EAAe,IAInCxJ,IAGA7C,EAAO8C,YAMZ,MAAOtD,GAAU0F,QAASuC,IAI3BzH,EAAO+E,KAAK,gEAAgEuH,MAAM,KAAM,SAAS7G,EAAGW,GACnGjG,EAAY,WAAaiG,EAAO,KAAQA,EAAKgE,eAG9C,SAASE,GAAa7C,GACrB,GAAIjE,GAASiE,EAAIjE,OAChBb,EAAO3C,EAAO2C,KAAM8E,EAErB,OAAKzH,GAAO2H,SAAUF,IACd,EAGc,IAAjBA,EAAI5D,UAAkBL,GACnB,EAGQ,UAATb,GAA6B,aAATA,IACb,IAAXa,GACgB,gBAAXA,IAAuBA,EAAS,GAAOA,EAAS,IAAOiE,IAIhEhI,EAAaO,EAAOJ,GAWpB,SAAWN,EAAQC,GAEnB,GAAIkG,GACH0C,EACAoE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAlN,EACAC,EACAkN,EACAC,EACAC,EACAC,EACAC,EAGAzG,EAAU,UAAY,GAAKiF,MAC3ByB,EAAe9N,EAAOM,SACtByN,EAAU,EACVlI,EAAO,EACPmI,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,GAAe,EACfC,EAAY,SAAUC,EAAGC,GACxB,MAAKD,KAAMC,GACVH,GAAe,EACR,GAED,GAIRI,QAAsBvO,GACtBwO,EAAe,GAAK,GAGpBC,KAAc/M,eACduJ,KACAyD,EAAMzD,EAAIyD,IACVC,EAAc1D,EAAI/J,KAClBA,EAAO+J,EAAI/J,KACXE,EAAQ6J,EAAI7J,MAEZE,EAAU2J,EAAI3J,SAAW,SAAUwC,GAClC,GAAIoC,GAAI,EACPC,EAAMpC,KAAKE,MACZ,MAAYkC,EAAJD,EAASA,IAChB,GAAKnC,KAAKmC,KAAOpC,EAChB,MAAOoC,EAGT,OAAO,IAGR0I,EAAW,6HAKXC,EAAa,sBAEbC,EAAoB,mCAKpBC,EAAaD,EAAkBxH,QAAS,IAAK,MAG7C0H,EAAa,MAAQH,EAAa,KAAOC,EAAoB,IAAMD,EAClE,mBAAqBA,EAAa,wCAA0CE,EAAa,QAAUF,EAAa,OAQjHI,EAAU,KAAOH,EAAoB,mEAAqEE,EAAW1H,QAAS,EAAG,GAAM,eAGvIlF,EAAY8M,OAAQ,IAAML,EAAa,8BAAgCA,EAAa,KAAM,KAE1FM,EAAaD,OAAQ,IAAML,EAAa,KAAOA,EAAa,KAC5DO,EAAmBF,OAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAAa,KAE3FQ,EAAeH,OAAQL,EAAa,SACpCS,EAAuBJ,OAAQ,IAAML,EAAa,gBAAkBA,EAAa,OAAQ,KAEzFU,EAAcL,OAAQD,GACtBO,EAAkBN,OAAQ,IAAMH,EAAa,KAE7CU,GACCC,GAAUR,OAAQ,MAAQJ,EAAoB,KAC9Ca,MAAaT,OAAQ,QAAUJ,EAAoB,KACnDc,IAAWV,OAAQ,KAAOJ,EAAkBxH,QAAS,IAAK,MAAS,KACnEuI,KAAYX,OAAQ,IAAMF,GAC1Bc,OAAcZ,OAAQ,IAAMD,GAC5Bc,MAAab,OAAQ,yDAA2DL,EAC/E,+BAAiCA,EAAa,cAAgBA,EAC9D,aAAeA,EAAa,SAAU,KACvCmB,KAAYd,OAAQ,OAASN,EAAW,KAAM,KAG9CqB,aAAoBf,OAAQ,IAAML,EAAa,mDAC9CA,EAAa,mBAAqBA,EAAa,mBAAoB,MAGrEqB,EAAU,yBAGV7N,EAAa,mCAEb8N,GAAU,sCACVC,GAAU,SAEVC,GAAU,QAGVC,GAAgBpB,OAAQ,qBAAuBL,EAAa,MAAQA,EAAa,OAAQ,MACzF0B,GAAY,SAAUC,EAAGC,EAASC,GACjC,GAAIC,GAAO,KAAOF,EAAU,KAI5B,OAAOE,KAASA,GAAQD,EACvBD,EAEO,EAAPE,EACClI,OAAOmI,aAAcD,EAAO,OAE5BlI,OAAOmI,aAA2B,MAAbD,GAAQ,GAA4B,MAAR,KAAPA,GAI9C,KACCzP,EAAK2E,MACHoF,EAAM7J,EAAM6D,KAAM4I,EAAapE,YAChCoE,EAAapE,YAIdwB,EAAK4C,EAAapE,WAAWxF,QAASK,SACrC,MAAQqE,IACTzH,GAAS2E,MAAOoF,EAAIhH,OAGnB,SAAU+C,EAAQ6J,GACjBlC,EAAY9I,MAAOmB,EAAQ5F,EAAM6D,KAAK4L,KAKvC,SAAU7J,EAAQ6J,GACjB,GAAIzK,GAAIY,EAAO/C,OACdiC,EAAI,CAEL,OAASc,EAAOZ,KAAOyK,EAAI3K,MAC3Bc,EAAO/C,OAASmC,EAAI,IAKvB,QAAS0K,IAAQjP,EAAUC,EAASoJ,EAAS6F,GAC5C,GAAIlN,GAAOC,EAAMkN,EAAG1M,EAEnB4B,EAAG+K,EAAQ1E,EAAK2E,EAAKC,EAAYC,CASlC,KAPOtP,EAAUA,EAAQyC,eAAiBzC,EAAU+L,KAAmBxN,GACtEkN,EAAazL,GAGdA,EAAUA,GAAWzB,EACrB6K,EAAUA,OAEJrJ,GAAgC,gBAAbA,GACxB,MAAOqJ,EAGR,IAAuC,KAAjC5G,EAAWxC,EAAQwC,WAAgC,IAAbA,EAC3C,QAGD,IAAKkJ,IAAmBuD,EAAO,CAG9B,GAAMlN,EAAQxB,EAAW6B,KAAMrC,GAE9B,GAAMmP,EAAInN,EAAM,IACf,GAAkB,IAAbS,EAAiB,CAIrB,GAHAR,EAAOhC,EAAQ8C,eAAgBoM,IAG1BlN,IAAQA,EAAKe,WAQjB,MAAOqG,EALP,IAAKpH,EAAKgB,KAAOkM,EAEhB,MADA9F,GAAQhK,KAAM4C,GACPoH,MAOT,IAAKpJ,EAAQyC,gBAAkBT,EAAOhC,EAAQyC,cAAcK,eAAgBoM,KAC3EpD,EAAU9L,EAASgC,IAAUA,EAAKgB,KAAOkM,EAEzC,MADA9F,GAAQhK,KAAM4C,GACPoH,MAKH,CAAA,GAAKrH,EAAM,GAEjB,MADA3C,GAAK2E,MAAOqF,EAASpJ,EAAQwI,qBAAsBzI,IAC5CqJ,CAGD,KAAM8F,EAAInN,EAAM,KAAO+E,EAAQyI,wBAA0BvP,EAAQuP,uBAEvE,MADAnQ,GAAK2E,MAAOqF,EAASpJ,EAAQuP,uBAAwBL,IAC9C9F,EAKT,GAAKtC,EAAQ0I,OAAS7D,IAAcA,EAAUjJ,KAAM3C,IAAc,CASjE,GARAqP,EAAM3E,EAAMpF,EACZgK,EAAarP,EACbsP,EAA2B,IAAb9M,GAAkBzC,EAMd,IAAbyC,GAAqD,WAAnCxC,EAAQ8I,SAASC,cAA6B,CACpEoG,EAASM,GAAU1P,IAEb0K,EAAMzK,EAAQ0P,aAAa,OAChCN,EAAM3E,EAAIjF,QAAS+I,GAAS,QAE5BvO,EAAQ2P,aAAc,KAAMP,GAE7BA,EAAM,QAAUA,EAAM,MAEtBhL,EAAI+K,EAAOhN,MACX,OAAQiC,IACP+K,EAAO/K,GAAKgL,EAAMQ,GAAYT,EAAO/K,GAEtCiL,GAAa9B,EAAS7K,KAAM3C,IAAcC,EAAQ+C,YAAc/C,EAChEsP,EAAcH,EAAOU,KAAK,KAG3B,GAAKP,EACJ,IAIC,MAHAlQ,GAAK2E,MAAOqF,EACXiG,EAAWS,iBAAkBR,IAEvBlG,EACN,MAAM2G,IACN,QACKtF,GACLzK,EAAQgQ,gBAAgB,QAQ7B,MAAOC,IAAQlQ,EAASyF,QAASlF,EAAO,MAAQN,EAASoJ,EAAS6F,GASnE,QAAS/C,MACR,GAAIgE,KAEJ,SAASC,GAAOvJ,EAAKoC,GAMpB,MAJKkH,GAAK9Q,KAAMwH,GAAO,KAAQuE,EAAKiF,mBAE5BD,GAAOD,EAAKG,SAEZF,EAAOvJ,GAAQoC,EAExB,MAAOmH,GAOR,QAASG,IAAcrQ,GAEtB,MADAA,GAAIoF,IAAY,EACTpF,EAOR,QAASsQ,IAAQtQ,GAChB,GAAIuQ,GAAMjS,EAASiJ,cAAc,MAEjC,KACC,QAASvH,EAAIuQ,GACZ,MAAO3J,GACR,OAAO,EACN,QAEI2J,EAAIzN,YACRyN,EAAIzN,WAAW0N,YAAaD,GAG7BA,EAAM,MASR,QAASE,IAAWC,EAAOC,GAC1B,GAAIzH,GAAMwH,EAAM1F,MAAM,KACrB7G,EAAIuM,EAAMxO,MAEX,OAAQiC,IACP+G,EAAK0F,WAAY1H,EAAI/E,IAAOwM,EAU9B,QAASE,IAAcvE,EAAGC,GACzB,GAAIuE,GAAMvE,GAAKD,EACdyE,EAAOD,GAAsB,IAAfxE,EAAE/J,UAAiC,IAAfgK,EAAEhK,YAChCgK,EAAEyE,aAAevE,KACjBH,EAAE0E,aAAevE,EAGtB,IAAKsE,EACJ,MAAOA,EAIR,IAAKD,EACJ,MAASA,EAAMA,EAAIG,YAClB,GAAKH,IAAQvE,EACZ,MAAO,EAKV,OAAOD,GAAI,EAAI,GAOhB,QAAS4E,IAAmB7P,GAC3B,MAAO,UAAUU,GAChB,GAAI+C,GAAO/C,EAAK8G,SAASC,aACzB,OAAgB,UAAThE,GAAoB/C,EAAKV,OAASA,GAQ3C,QAAS8P,IAAoB9P,GAC5B,MAAO,UAAUU,GAChB,GAAI+C,GAAO/C,EAAK8G,SAASC,aACzB,QAAiB,UAAThE,GAA6B,WAATA,IAAsB/C,EAAKV,OAASA,GAQlE,QAAS+P,IAAwBpR,GAChC,MAAOqQ,IAAa,SAAUgB,GAE7B,MADAA,IAAYA,EACLhB,GAAa,SAAUrB,EAAMpD,GACnC,GAAIvH,GACHiN,EAAetR,KAAQgP,EAAK9M,OAAQmP,GACpClN,EAAImN,EAAapP,MAGlB,OAAQiC,IACF6K,EAAO3K,EAAIiN,EAAanN,MAC5B6K,EAAK3K,KAAOuH,EAAQvH,GAAK2K,EAAK3K,SAWnC+G,EAAQ2D,GAAO3D,MAAQ,SAAUrJ,GAGhC,GAAIvD,GAAkBuD,IAASA,EAAKS,eAAiBT,GAAMvD,eAC3D,OAAOA,GAA+C,SAA7BA,EAAgBqK,UAAsB,GAIhEhC,EAAUkI,GAAOlI,WAOjB2E,EAAcuD,GAAOvD,YAAc,SAAU+F,GAC5C,GAAIC,GAAMD,EAAOA,EAAK/O,eAAiB+O,EAAOzF,EAC7C2F,EAASD,EAAIE,WAGd,OAAKF,KAAQlT,GAA6B,IAAjBkT,EAAIjP,UAAmBiP,EAAIhT,iBAKpDF,EAAWkT,EACXjT,EAAUiT,EAAIhT,gBAGdiN,GAAkBL,EAAOoG,GAMpBC,GAAUA,EAAO9G,aAAe8G,IAAWA,EAAO7G,KACtD6G,EAAO9G,YAAa,iBAAkB,WACrCa,MASF3E,EAAQoG,WAAaqD,GAAO,SAAUC,GAErC,MADAA,GAAIoB,UAAY,KACRpB,EAAId,aAAa,eAO1B5I,EAAQ0B,qBAAuB+H,GAAO,SAAUC,GAE/C,MADAA,GAAIqB,YAAaJ,EAAIK,cAAc,MAC3BtB,EAAIhI,qBAAqB,KAAKrG,SAIvC2E,EAAQyI,uBAAyBgB,GAAO,SAAUC,GAQjD,MAPAA,GAAIuB,UAAY,+CAIhBvB,EAAIwB,WAAWJ,UAAY,IAGuB,IAA3CpB,EAAIjB,uBAAuB,KAAKpN,SAOxC2E,EAAQmL,QAAU1B,GAAO,SAAUC,GAElC,MADAhS,GAAQqT,YAAarB,GAAMxN,GAAKqC,GACxBoM,EAAIS,oBAAsBT,EAAIS,kBAAmB7M,GAAUlD,SAI/D2E,EAAQmL,SACZ9G,EAAK9I,KAAS,GAAI,SAAUW,EAAIhD,GAC/B,SAAYA,GAAQ8C,iBAAmB2J,GAAgBf,EAAiB,CACvE,GAAIwD,GAAIlP,EAAQ8C,eAAgBE,EAGhC,OAAOkM,IAAKA,EAAEnM,YAAcmM,QAG9B/D,EAAKgH,OAAW,GAAI,SAAUnP,GAC7B,GAAIoP,GAASpP,EAAGwC,QAASgJ,GAAWC,GACpC,OAAO,UAAUzM,GAChB,MAAOA,GAAK0N,aAAa,QAAU0C,YAM9BjH,GAAK9I,KAAS,GAErB8I,EAAKgH,OAAW,GAAK,SAAUnP,GAC9B,GAAIoP,GAASpP,EAAGwC,QAASgJ,GAAWC,GACpC,OAAO,UAAUzM,GAChB,GAAIwP,SAAcxP,GAAKqQ,mBAAqB5F,GAAgBzK,EAAKqQ,iBAAiB,KAClF,OAAOb,IAAQA,EAAKxI,QAAUoJ,KAMjCjH,EAAK9I,KAAU,IAAIyE,EAAQ0B,qBAC1B,SAAU8J,EAAKtS,GACd,aAAYA,GAAQwI,uBAAyBiE,EACrCzM,EAAQwI,qBAAsB8J,GADtC,GAID,SAAUA,EAAKtS,GACd,GAAIgC,GACHkG,KACA9D,EAAI,EACJgF,EAAUpJ,EAAQwI,qBAAsB8J,EAGzC,IAAa,MAARA,EAAc,CAClB,MAAStQ,EAAOoH,EAAQhF,KACA,IAAlBpC,EAAKQ,UACT0F,EAAI9I,KAAM4C,EAIZ,OAAOkG,GAER,MAAOkB,IAIT+B,EAAK9I,KAAY,MAAIyE,EAAQyI,wBAA0B,SAAUqC,EAAW5R,GAC3E,aAAYA,GAAQuP,yBAA2B9C,GAAgBf,EACvD1L,EAAQuP,uBAAwBqC,GADxC,GAWDhG,KAOAD,MAEM7E,EAAQ0I,IAAMpB,EAAQ1L,KAAM+O,EAAI3B,qBAGrCS,GAAO,SAAUC,GAMhBA,EAAIuB,UAAY,iDAIVvB,EAAIV,iBAAiB,cAAc3N,QACxCwJ,EAAUvM,KAAM,MAAQ2N,EAAa,aAAeD,EAAW,KAM1D0D,EAAIV,iBAAiB,YAAY3N,QACtCwJ,EAAUvM,KAAK,cAIjBmR,GAAO,SAAUC,GAOhB,GAAI+B,GAAQd,EAAIjK,cAAc,QAC9B+K,GAAM5C,aAAc,OAAQ,UAC5Ba,EAAIqB,YAAaU,GAAQ5C,aAAc,IAAK,IAEvCa,EAAIV,iBAAiB,WAAW3N,QACpCwJ,EAAUvM,KAAM,SAAW2N,EAAa,gBAKnCyD,EAAIV,iBAAiB,YAAY3N,QACtCwJ,EAAUvM,KAAM,WAAY,aAI7BoR,EAAIV,iBAAiB,QACrBnE,EAAUvM,KAAK,YAIX0H,EAAQ0L,gBAAkBpE,EAAQ1L,KAAOmJ,EAAUrN,EAAQiU,uBAChEjU,EAAQkU,oBACRlU,EAAQmU,kBACRnU,EAAQoU,qBAERrC,GAAO,SAAUC,GAGhB1J,EAAQ+L,kBAAoBhH,EAAQ1I,KAAMqN,EAAK,OAI/C3E,EAAQ1I,KAAMqN,EAAK,aACnB5E,EAAcxM,KAAM,KAAM+N,KAI5BxB,EAAYA,EAAUxJ,QAAciL,OAAQzB,EAAUkE,KAAK,MAC3DjE,EAAgBA,EAAczJ,QAAciL,OAAQxB,EAAciE,KAAK,MAQvE/D,EAAWsC,EAAQ1L,KAAMlE,EAAQsN,WAActN,EAAQsU,wBACtD,SAAUvG,EAAGC,GACZ,GAAIuG,GAAuB,IAAfxG,EAAE/J,SAAiB+J,EAAE9N,gBAAkB8N,EAClDyG,EAAMxG,GAAKA,EAAEzJ,UACd,OAAOwJ,KAAMyG,MAAWA,GAAwB,IAAjBA,EAAIxQ,YAClCuQ,EAAMjH,SACLiH,EAAMjH,SAAUkH,GAChBzG,EAAEuG,yBAA8D,GAAnCvG,EAAEuG,wBAAyBE,MAG3D,SAAUzG,EAAGC,GACZ,GAAKA,EACJ,MAASA,EAAIA,EAAEzJ,WACd,GAAKyJ,IAAMD,EACV,OAAO,CAIV,QAAO,GAOTD,EAAY9N,EAAQsU,wBACpB,SAAUvG,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,MADAH,IAAe,EACR,CAGR,IAAI4G,GAAUzG,EAAEsG,yBAA2BvG,EAAEuG,yBAA2BvG,EAAEuG,wBAAyBtG,EAEnG,OAAKyG,GAEW,EAAVA,IACFnM,EAAQoM,cAAgB1G,EAAEsG,wBAAyBvG,KAAQ0G,EAGxD1G,IAAMkF,GAAO3F,EAASC,EAAcQ,GACjC,GAEHC,IAAMiF,GAAO3F,EAASC,EAAcS,GACjC,EAIDhB,EACJhM,EAAQ2D,KAAMqI,EAAWe,GAAM/M,EAAQ2D,KAAMqI,EAAWgB,GAC1D,EAGe,EAAVyG,EAAc,GAAK,EAIpB1G,EAAEuG,wBAA0B,GAAK,GAEzC,SAAUvG,EAAGC,GACZ,GAAIuE,GACH3M,EAAI,EACJ+O,EAAM5G,EAAExJ,WACRiQ,EAAMxG,EAAEzJ,WACRqQ,GAAO7G,GACP8G,GAAO7G,EAGR,IAAKD,IAAMC,EAEV,MADAH,IAAe,EACR,CAGD,KAAM8G,IAAQH,EACpB,MAAOzG,KAAMkF,EAAM,GAClBjF,IAAMiF,EAAM,EACZ0B,EAAM,GACNH,EAAM,EACNxH,EACEhM,EAAQ2D,KAAMqI,EAAWe,GAAM/M,EAAQ2D,KAAMqI,EAAWgB,GAC1D,CAGK,IAAK2G,IAAQH,EACnB,MAAOlC,IAAcvE,EAAGC,EAIzBuE,GAAMxE,CACN,OAASwE,EAAMA,EAAIhO,WAClBqQ,EAAGE,QAASvC,EAEbA,GAAMvE,CACN,OAASuE,EAAMA,EAAIhO,WAClBsQ,EAAGC,QAASvC,EAIb,OAAQqC,EAAGhP,KAAOiP,EAAGjP,GACpBA,GAGD,OAAOA,GAEN0M,GAAcsC,EAAGhP,GAAIiP,EAAGjP,IAGxBgP,EAAGhP,KAAO2H,EAAe,GACzBsH,EAAGjP,KAAO2H,EAAe,EACzB,GAGK0F,GA1UClT,GA6UTyQ,GAAOnD,QAAU,SAAU0H,EAAMC,GAChC,MAAOxE,IAAQuE,EAAM,KAAM,KAAMC,IAGlCxE,GAAOwD,gBAAkB,SAAUxQ,EAAMuR,GASxC,IAPOvR,EAAKS,eAAiBT,KAAWzD,GACvCkN,EAAazJ,GAIduR,EAAOA,EAAK/N,QAASgI,EAAkB,aAElC1G,EAAQ0L,kBAAmB9G,GAC5BE,GAAkBA,EAAclJ,KAAM6Q,IACtC5H,GAAkBA,EAAUjJ,KAAM6Q,IAErC,IACC,GAAI/P,GAAMqI,EAAQ1I,KAAMnB,EAAMuR,EAG9B,IAAK/P,GAAOsD,EAAQ+L,mBAGlB7Q,EAAKzD,UAAuC,KAA3ByD,EAAKzD,SAASiE,SAChC,MAAOgB,GAEP,MAAMqD,IAGT,MAAOmI,IAAQuE,EAAMhV,EAAU,MAAOyD,IAAQG,OAAS,GAGxD6M,GAAOlD,SAAW,SAAU9L,EAASgC,GAKpC,OAHOhC,EAAQyC,eAAiBzC,KAAczB,GAC7CkN,EAAazL,GAEP8L,EAAU9L,EAASgC,IAG3BgN,GAAOnM,KAAO,SAAUb,EAAM+C,IAEtB/C,EAAKS,eAAiBT,KAAWzD,GACvCkN,EAAazJ,EAGd,IAAI/B,GAAKkL,EAAK0F,WAAY9L,EAAKgE,eAE9B0K,EAAMxT,GAAM0M,EAAOxJ,KAAMgI,EAAK0F,WAAY9L,EAAKgE,eAC9C9I,EAAI+B,EAAM+C,GAAO2G,GACjBxN,CAEF,OAAOuV,KAAQvV,EACd4I,EAAQoG,aAAexB,EACtB1J,EAAK0N,aAAc3K,IAClB0O,EAAMzR,EAAKqQ,iBAAiBtN,KAAU0O,EAAIC,UAC1CD,EAAIzK,MACJ,KACFyK,GAGFzE,GAAO/H,MAAQ,SAAUC,GACxB,KAAUC,OAAO,0CAA4CD,IAO9D8H,GAAO2E,WAAa,SAAUvK,GAC7B,GAAIpH,GACH4R,KACAtP,EAAI,EACJF,EAAI,CAOL,IAJAiI,GAAgBvF,EAAQ+M,iBACxBrI,GAAa1E,EAAQgN,YAAc1K,EAAQ9J,MAAO,GAClD8J,EAAQ3E,KAAM6H,GAETD,EAAe,CACnB,MAASrK,EAAOoH,EAAQhF,KAClBpC,IAASoH,EAAShF,KACtBE,EAAIsP,EAAWxU,KAAMgF,GAGvB,OAAQE,IACP8E,EAAQ1E,OAAQkP,EAAYtP,GAAK,GAInC,MAAO8E,IAORgC,EAAU4D,GAAO5D,QAAU,SAAUpJ,GACpC,GAAIwP,GACHhO,EAAM,GACNY,EAAI,EACJ5B,EAAWR,EAAKQ,QAEjB,IAAMA,GAMC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAGjE,GAAiC,gBAArBR,GAAK+R,YAChB,MAAO/R,GAAK+R,WAGZ,KAAM/R,EAAOA,EAAKgQ,WAAYhQ,EAAMA,EAAOA,EAAKkP,YAC/C1N,GAAO4H,EAASpJ,OAGZ,IAAkB,IAAbQ,GAA+B,IAAbA,EAC7B,MAAOR,GAAKgS,cAhBZ,MAASxC,EAAOxP,EAAKoC,GAAKA,IAEzBZ,GAAO4H,EAASoG,EAkBlB,OAAOhO,IAGR2H,EAAO6D,GAAOiF,WAGb7D,YAAa,GAEb8D,aAAc5D,GAEdvO,MAAO4L,EAEPkD,cAEAxO,QAEA8R,UACCC,KAAOC,IAAK,aAAcpQ,OAAO,GACjCqQ,KAAOD,IAAK,cACZE,KAAOF,IAAK,kBAAmBpQ,OAAO,GACtCuQ,KAAOH,IAAK,oBAGbI,WACC1G,KAAQ,SAAUhM,GAUjB,MATAA,GAAM,GAAKA,EAAM,GAAGyD,QAASgJ,GAAWC,IAGxC1M,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAM,IAAKyD,QAASgJ,GAAWC,IAE5C,OAAb1M,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAMzC,MAAO,EAAG,IAGxB2O,MAAS,SAAUlM,GA6BlB,MAlBAA,GAAM,GAAKA,EAAM,GAAGgH,cAEY,QAA3BhH,EAAM,GAAGzC,MAAO,EAAG,IAEjByC,EAAM,IACXiN,GAAO/H,MAAOlF,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjBiN,GAAO/H,MAAOlF,EAAM,IAGdA,GAGRiM,OAAU,SAAUjM,GACnB,GAAI2S,GACHC,GAAY5S,EAAM,IAAMA,EAAM,EAE/B,OAAK4L,GAAiB,MAAEjL,KAAMX,EAAM,IAC5B,MAIHA,EAAM,IAAMA,EAAM,KAAO7D,EAC7B6D,EAAM,GAAKA,EAAM,GAGN4S,GAAYlH,EAAQ/K,KAAMiS,KAEpCD,EAASjF,GAAUkF,GAAU,MAE7BD,EAASC,EAASnV,QAAS,IAAKmV,EAASxS,OAASuS,GAAWC,EAASxS,UAGvEJ,EAAM,GAAKA,EAAM,GAAGzC,MAAO,EAAGoV,GAC9B3S,EAAM,GAAK4S,EAASrV,MAAO,EAAGoV,IAIxB3S,EAAMzC,MAAO,EAAG,MAIzB6S,QAECrE,IAAO,SAAU8G,GAChB,GAAI9L,GAAW8L,EAAiBpP,QAASgJ,GAAWC,IAAY1F,aAChE,OAA4B,MAArB6L,EACN,WAAa,OAAO,GACpB,SAAU5S,GACT,MAAOA,GAAK8G,UAAY9G,EAAK8G,SAASC,gBAAkBD,IAI3D+E,MAAS,SAAU+D,GAClB,GAAIiD,GAAU5I,EAAY2F,EAAY,IAEtC,OAAOiD,KACLA,EAAczH,OAAQ,MAAQL,EAAa,IAAM6E,EAAY,IAAM7E,EAAa,SACjFd,EAAY2F,EAAW,SAAU5P,GAChC,MAAO6S,GAAQnS,KAAgC,gBAAnBV,GAAK4P,WAA0B5P,EAAK4P,iBAAoB5P,GAAK0N,eAAiBjD,GAAgBzK,EAAK0N,aAAa,UAAY,OAI3J3B,KAAQ,SAAUhJ,EAAM+P,EAAUC,GACjC,MAAO,UAAU/S,GAChB,GAAIgT,GAAShG,GAAOnM,KAAMb,EAAM+C,EAEhC,OAAe,OAAViQ,EACgB,OAAbF,EAEFA,GAINE,GAAU,GAEU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOxV,QAASuV,GAChC,OAAbD,EAAoBC,GAASC,EAAOxV,QAASuV,GAAU,GAC1C,OAAbD,EAAoBC,GAASC,EAAO1V,OAAQyV,EAAM5S,UAAa4S,EAClD,OAAbD,GAAsB,IAAME,EAAS,KAAMxV,QAASuV,GAAU,GACjD,OAAbD,EAAoBE,IAAWD,GAASC,EAAO1V,MAAO,EAAGyV,EAAM5S,OAAS,KAAQ4S,EAAQ,KACxF,IAZO,IAgBV9G,MAAS,SAAU3M,EAAM2T,EAAM3D,EAAUrN,EAAOE,GAC/C,GAAI+Q,GAAgC,QAAvB5T,EAAKhC,MAAO,EAAG,GAC3B6V,EAA+B,SAArB7T,EAAKhC,MAAO,IACtB8V,EAAkB,YAATH,CAEV,OAAiB,KAAVhR,GAAwB,IAATE,EAGrB,SAAUnC,GACT,QAASA,EAAKe,YAGf,SAAUf,EAAMhC,EAASiI,GACxB,GAAIkI,GAAOkF,EAAY7D,EAAMR,EAAMsE,EAAWC,EAC7ClB,EAAMa,IAAWC,EAAU,cAAgB,kBAC3CzD,EAAS1P,EAAKe,WACdgC,EAAOqQ,GAAUpT,EAAK8G,SAASC,cAC/ByM,GAAYvN,IAAQmN,CAErB,IAAK1D,EAAS,CAGb,GAAKwD,EAAS,CACb,MAAQb,EAAM,CACb7C,EAAOxP,CACP,OAASwP,EAAOA,EAAM6C,GACrB,GAAKe,EAAS5D,EAAK1I,SAASC,gBAAkBhE,EAAyB,IAAlByM,EAAKhP,SACzD,OAAO,CAIT+S,GAAQlB,EAAe,SAAT/S,IAAoBiU,GAAS,cAE5C,OAAO,EAMR,GAHAA,GAAUJ,EAAUzD,EAAOM,WAAaN,EAAO+D,WAG1CN,GAAWK,EAAW,CAE1BH,EAAa3D,EAAQrM,KAAcqM,EAAQrM,OAC3C8K,EAAQkF,EAAY/T,OACpBgU,EAAYnF,EAAM,KAAOnE,GAAWmE,EAAM,GAC1Ca,EAAOb,EAAM,KAAOnE,GAAWmE,EAAM,GACrCqB,EAAO8D,GAAa5D,EAAO/J,WAAY2N,EAEvC,OAAS9D,IAAS8D,GAAa9D,GAAQA,EAAM6C,KAG3CrD,EAAOsE,EAAY,IAAMC,EAAM3I,MAGhC,GAAuB,IAAlB4E,EAAKhP,YAAoBwO,GAAQQ,IAASxP,EAAO,CACrDqT,EAAY/T,IAAW0K,EAASsJ,EAAWtE,EAC3C,YAKI,IAAKwE,IAAarF,GAASnO,EAAMqD,KAAcrD,EAAMqD,QAAkB/D,KAAW6O,EAAM,KAAOnE,EACrGgF,EAAOb,EAAM,OAKb,OAASqB,IAAS8D,GAAa9D,GAAQA,EAAM6C,KAC3CrD,EAAOsE,EAAY,IAAMC,EAAM3I,MAEhC,IAAOwI,EAAS5D,EAAK1I,SAASC,gBAAkBhE,EAAyB,IAAlByM,EAAKhP,aAAsBwO,IAE5EwE,KACHhE,EAAMnM,KAAcmM,EAAMnM,QAAkB/D,IAAW0K,EAASgF,IAG7DQ,IAASxP,GACb,KAQJ,OADAgP,IAAQ7M,EACD6M,IAAS/M,GAA4B,IAAjB+M,EAAO/M,GAAe+M,EAAO/M,GAAS,KAKrE+J,OAAU,SAAU0H,EAAQpE,GAK3B,GAAI1N,GACH3D,EAAKkL,EAAKgC,QAASuI,IAAYvK,EAAKwK,WAAYD,EAAO3M,gBACtDiG,GAAO/H,MAAO,uBAAyByO,EAKzC,OAAKzV,GAAIoF,GACDpF,EAAIqR,GAIPrR,EAAGkC,OAAS,GAChByB,GAAS8R,EAAQA,EAAQ,GAAIpE,GACtBnG,EAAKwK,WAAW/V,eAAgB8V,EAAO3M,eAC7CuH,GAAa,SAAUrB,EAAMpD,GAC5B,GAAI+J,GACHC,EAAU5V,EAAIgP,EAAMqC,GACpBlN,EAAIyR,EAAQ1T,MACb,OAAQiC,IACPwR,EAAMpW,EAAQ2D,KAAM8L,EAAM4G,EAAQzR,IAClC6K,EAAM2G,KAAW/J,EAAS+J,GAAQC,EAAQzR,MAG5C,SAAUpC,GACT,MAAO/B,GAAI+B,EAAM,EAAG4B,KAIhB3D,IAITkN,SAEC2I,IAAOxF,GAAa,SAAUvQ,GAI7B,GAAIwS,MACHnJ,KACA2M,EAAUzK,EAASvL,EAASyF,QAASlF,EAAO,MAE7C,OAAOyV,GAAS1Q,GACfiL,GAAa,SAAUrB,EAAMpD,EAAS7L,EAASiI,GAC9C,GAAIjG,GACHgU,EAAYD,EAAS9G,EAAM,KAAMhH,MACjC7D,EAAI6K,EAAK9M,MAGV,OAAQiC,KACDpC,EAAOgU,EAAU5R,MACtB6K,EAAK7K,KAAOyH,EAAQzH,GAAKpC,MAI5B,SAAUA,EAAMhC,EAASiI,GAGxB,MAFAsK,GAAM,GAAKvQ,EACX+T,EAASxD,EAAO,KAAMtK,EAAKmB,IACnBA,EAAQwD,SAInBqJ,IAAO3F,GAAa,SAAUvQ,GAC7B,MAAO,UAAUiC,GAChB,MAAOgN,IAAQjP,EAAUiC,GAAOG,OAAS,KAI3C2J,SAAYwE,GAAa,SAAUpH,GAClC,MAAO,UAAUlH,GAChB,OAASA,EAAK+R,aAAe/R,EAAKkU,WAAa9K,EAASpJ,IAASxC,QAAS0J,GAAS,MAWrFiN,KAAQ7F,GAAc,SAAU6F,GAM/B,MAJMzI,GAAYhL,KAAKyT,GAAQ,KAC9BnH,GAAO/H,MAAO,qBAAuBkP,GAEtCA,EAAOA,EAAK3Q,QAASgJ,GAAWC,IAAY1F,cACrC,SAAU/G,GAChB,GAAIoU,EACJ,GACC,IAAMA,EAAW1K,EAChB1J,EAAKmU,KACLnU,EAAK0N,aAAa,aAAe1N,EAAK0N,aAAa,QAGnD,MADA0G,GAAWA,EAASrN,cACbqN,IAAaD,GAA2C,IAAnCC,EAAS5W,QAAS2W,EAAO,YAE5CnU,EAAOA,EAAKe,aAAiC,IAAlBf,EAAKQ,SAC3C,QAAO,KAKT0C,OAAU,SAAUlD,GACnB,GAAIqU,GAAOpY,EAAOK,UAAYL,EAAOK,SAAS+X,IAC9C,OAAOA,IAAQA,EAAK/W,MAAO,KAAQ0C,EAAKgB,IAGzCsT,KAAQ,SAAUtU,GACjB,MAAOA,KAASxD,GAGjB+X,MAAS,SAAUvU,GAClB,MAAOA,KAASzD,EAASiY,iBAAmBjY,EAASkY,UAAYlY,EAASkY,gBAAkBzU,EAAKV,MAAQU,EAAK0U,OAAS1U,EAAK2U,WAI7HC,QAAW,SAAU5U,GACpB,MAAOA,GAAK6U,YAAa,GAG1BA,SAAY,SAAU7U,GACrB,MAAOA,GAAK6U,YAAa,GAG1BC,QAAW,SAAU9U,GAGpB,GAAI8G,GAAW9G,EAAK8G,SAASC,aAC7B,OAAqB,UAAbD,KAA0B9G,EAAK8U,SAA0B,WAAbhO,KAA2B9G,EAAK+U,UAGrFA,SAAY,SAAU/U,GAOrB,MAJKA,GAAKe,YACTf,EAAKe,WAAWiU,cAGVhV,EAAK+U,YAAa,GAI1BE,MAAS,SAAUjV,GAMlB,IAAMA,EAAOA,EAAKgQ,WAAYhQ,EAAMA,EAAOA,EAAKkP,YAC/C,GAAKlP,EAAK8G,SAAW,KAAyB,IAAlB9G,EAAKQ,UAAoC,IAAlBR,EAAKQ,SACvD,OAAO,CAGT,QAAO,GAGRkP,OAAU,SAAU1P,GACnB,OAAQmJ,EAAKgC,QAAe,MAAGnL,IAIhCkV,OAAU,SAAUlV,GACnB,MAAOsM,IAAQ5L,KAAMV,EAAK8G,WAG3ByJ,MAAS,SAAUvQ,GAClB,MAAOqM,IAAQ3L,KAAMV,EAAK8G,WAG3BqO,OAAU,SAAUnV,GACnB,GAAI+C,GAAO/C,EAAK8G,SAASC,aACzB,OAAgB,UAAThE,GAAkC,WAAd/C,EAAKV,MAA8B,WAATyD,GAGtDmE,KAAQ,SAAUlH,GACjB,GAAIa,EAGJ,OAAuC,UAAhCb,EAAK8G,SAASC,eACN,SAAd/G,EAAKV,OACmC,OAArCuB,EAAOb,EAAK0N,aAAa,UAAoB7M,EAAKkG,gBAAkB/G,EAAKV,OAI9E2C,MAASoN,GAAuB,WAC/B,OAAS,KAGVlN,KAAQkN,GAAuB,SAAUE,EAAcpP,GACtD,OAASA,EAAS,KAGnB+B,GAAMmN,GAAuB,SAAUE,EAAcpP,EAAQmP,GAC5D,OAAoB,EAAXA,EAAeA,EAAWnP,EAASmP,KAG7C8F,KAAQ/F,GAAuB,SAAUE,EAAcpP,GACtD,GAAIiC,GAAI,CACR,MAAYjC,EAAJiC,EAAYA,GAAK,EACxBmN,EAAanS,KAAMgF,EAEpB,OAAOmN,KAGR8F,IAAOhG,GAAuB,SAAUE,EAAcpP,GACrD,GAAIiC,GAAI,CACR,MAAYjC,EAAJiC,EAAYA,GAAK,EACxBmN,EAAanS,KAAMgF,EAEpB,OAAOmN,KAGR+F,GAAMjG,GAAuB,SAAUE,EAAcpP,EAAQmP,GAC5D,GAAIlN,GAAe,EAAXkN,EAAeA,EAAWnP,EAASmP,CAC3C,QAAUlN,GAAK,GACdmN,EAAanS,KAAMgF,EAEpB,OAAOmN,KAGRgG,GAAMlG,GAAuB,SAAUE,EAAcpP,EAAQmP,GAC5D,GAAIlN,GAAe,EAAXkN,EAAeA,EAAWnP,EAASmP,CAC3C,MAAcnP,IAAJiC,GACTmN,EAAanS,KAAMgF,EAEpB,OAAOmN,OAKVpG,EAAKgC,QAAa,IAAIhC,EAAKgC,QAAY,EAGvC,KAAM/I,KAAOoT,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5EzM,EAAKgC,QAAS/I,GAAM+M,GAAmB/M,EAExC,KAAMA,KAAOyT,QAAQ,EAAMC,OAAO,GACjC3M,EAAKgC,QAAS/I,GAAMgN,GAAoBhN,EAIzC,SAASuR,OACTA,GAAW/T,UAAYuJ,EAAK4M,QAAU5M,EAAKgC,QAC3ChC,EAAKwK,WAAa,GAAIA,GAEtB,SAASlG,IAAU1P,EAAUiY,GAC5B,GAAInC,GAAS9T,EAAOkW,EAAQ3W,EAC3B4W,EAAO/I,EAAQgJ,EACfC,EAASjM,EAAYpM,EAAW,IAEjC,IAAKqY,EACJ,MAAOJ,GAAY,EAAII,EAAO9Y,MAAO,EAGtC4Y,GAAQnY,EACRoP,KACAgJ,EAAahN,EAAKsJ,SAElB,OAAQyD,EAAQ,GAGTrC,IAAY9T,EAAQsL,EAAOjL,KAAM8V,OACjCnW,IAEJmW,EAAQA,EAAM5Y,MAAOyC,EAAM,GAAGI,SAAY+V,GAE3C/I,EAAO/P,KAAM6Y,OAGdpC,GAAU,GAGJ9T,EAAQuL,EAAalL,KAAM8V,MAChCrC,EAAU9T,EAAMsO,QAChB4H,EAAO7Y,MACN4J,MAAO6M,EAEPvU,KAAMS,EAAM,GAAGyD,QAASlF,EAAO,OAEhC4X,EAAQA,EAAM5Y,MAAOuW,EAAQ1T,QAI9B,KAAMb,IAAQ6J,GAAKgH,SACZpQ,EAAQ4L,EAAWrM,GAAOc,KAAM8V,KAAcC,EAAY7W,MAC9DS,EAAQoW,EAAY7W,GAAQS,MAC7B8T,EAAU9T,EAAMsO,QAChB4H,EAAO7Y,MACN4J,MAAO6M,EACPvU,KAAMA,EACNuK,QAAS9J,IAEVmW,EAAQA,EAAM5Y,MAAOuW,EAAQ1T,QAI/B,KAAM0T,EACL,MAOF,MAAOmC,GACNE,EAAM/V,OACN+V,EACClJ,GAAO/H,MAAOlH,GAEdoM,EAAYpM,EAAUoP,GAAS7P,MAAO,GAGzC,QAASsQ,IAAYqI,GACpB,GAAI7T,GAAI,EACPC,EAAM4T,EAAO9V,OACbpC,EAAW,EACZ,MAAYsE,EAAJD,EAASA,IAChBrE,GAAYkY,EAAO7T,GAAG4E,KAEvB,OAAOjJ,GAGR,QAASsY,IAAetC,EAASuC,EAAYC,GAC5C,GAAIlE,GAAMiE,EAAWjE,IACpBmE,EAAmBD,GAAgB,eAARlE,EAC3BoE,EAAW3U,GAEZ,OAAOwU,GAAWrU,MAEjB,SAAUjC,EAAMhC,EAASiI,GACxB,MAASjG,EAAOA,EAAMqS,GACrB,GAAuB,IAAlBrS,EAAKQ,UAAkBgW,EAC3B,MAAOzC,GAAS/T,EAAMhC,EAASiI,IAMlC,SAAUjG,EAAMhC,EAASiI,GACxB,GAAIb,GAAM+I,EAAOkF,EAChBqD,EAAS1M,EAAU,IAAMyM,CAG1B,IAAKxQ,GACJ,MAASjG,EAAOA,EAAMqS,GACrB,IAAuB,IAAlBrS,EAAKQ,UAAkBgW,IACtBzC,EAAS/T,EAAMhC,EAASiI,GAC5B,OAAO,MAKV,OAASjG,EAAOA,EAAMqS,GACrB,GAAuB,IAAlBrS,EAAKQ,UAAkBgW,EAE3B,GADAnD,EAAarT,EAAMqD,KAAcrD,EAAMqD,QACjC8K,EAAQkF,EAAYhB,KAAUlE,EAAM,KAAOuI,GAChD,IAAMtR,EAAO+I,EAAM,OAAQ,GAAQ/I,IAAS8D,EAC3C,MAAO9D,MAAS,MAKjB,IAFA+I,EAAQkF,EAAYhB,IAAUqE,GAC9BvI,EAAM,GAAK4F,EAAS/T,EAAMhC,EAASiI,IAASiD,EACvCiF,EAAM,MAAO,EACjB,OAAO,GASf,QAASwI,IAAgBC,GACxB,MAAOA,GAASzW,OAAS,EACxB,SAAUH,EAAMhC,EAASiI,GACxB,GAAI7D,GAAIwU,EAASzW,MACjB,OAAQiC,IACP,IAAMwU,EAASxU,GAAIpC,EAAMhC,EAASiI,GACjC,OAAO,CAGT,QAAO,GAER2Q,EAAS,GAGX,QAASC,IAAU7C,EAAWzR,EAAK4N,EAAQnS,EAASiI,GACnD,GAAIjG,GACH8W,KACA1U,EAAI,EACJC,EAAM2R,EAAU7T,OAChB4W,EAAgB,MAAPxU,CAEV,MAAYF,EAAJD,EAASA,KACVpC,EAAOgU,EAAU5R,OAChB+N,GAAUA,EAAQnQ,EAAMhC,EAASiI,MACtC6Q,EAAa1Z,KAAM4C,GACd+W,GACJxU,EAAInF,KAAMgF,GAMd,OAAO0U,GAGR,QAASE,IAAYvE,EAAW1U,EAAUgW,EAASkD,EAAYC,EAAYC,GAO1E,MANKF,KAAeA,EAAY5T,KAC/B4T,EAAaD,GAAYC,IAErBC,IAAeA,EAAY7T,KAC/B6T,EAAaF,GAAYE,EAAYC,IAE/B7I,GAAa,SAAUrB,EAAM7F,EAASpJ,EAASiI,GACrD,GAAImR,GAAMhV,EAAGpC,EACZqX,KACAC,KACAC,EAAcnQ,EAAQjH,OAGtBoB,EAAQ0L,GAAQuK,GAAkBzZ,GAAY,IAAKC,EAAQwC,UAAaxC,GAAYA,MAGpFyZ,GAAYhF,IAAexF,GAASlP,EAEnCwD,EADAsV,GAAUtV,EAAO8V,EAAQ5E,EAAWzU,EAASiI,GAG9CyR,EAAa3D,EAEZmD,IAAgBjK,EAAOwF,EAAY8E,GAAeN,MAMjD7P,EACDqQ,CAQF,IALK1D,GACJA,EAAS0D,EAAWC,EAAY1Z,EAASiI,GAIrCgR,EAAa,CACjBG,EAAOP,GAAUa,EAAYJ,GAC7BL,EAAYG,KAAUpZ,EAASiI,GAG/B7D,EAAIgV,EAAKjX,MACT,OAAQiC,KACDpC,EAAOoX,EAAKhV,MACjBsV,EAAYJ,EAAQlV,MAASqV,EAAWH,EAAQlV,IAAOpC,IAK1D,GAAKiN,GACJ,GAAKiK,GAAczE,EAAY,CAC9B,GAAKyE,EAAa,CAEjBE,KACAhV,EAAIsV,EAAWvX,MACf,OAAQiC,KACDpC,EAAO0X,EAAWtV,KAEvBgV,EAAKha,KAAOqa,EAAUrV,GAAKpC,EAG7BkX,GAAY,KAAOQ,KAAkBN,EAAMnR,GAI5C7D,EAAIsV,EAAWvX,MACf,OAAQiC,KACDpC,EAAO0X,EAAWtV,MACtBgV,EAAOF,EAAa1Z,EAAQ2D,KAAM8L,EAAMjN,GAASqX,EAAOjV,IAAM,KAE/D6K,EAAKmK,KAAUhQ,EAAQgQ,GAAQpX,SAOlC0X,GAAab,GACZa,IAAetQ,EACdsQ,EAAWhV,OAAQ6U,EAAaG,EAAWvX,QAC3CuX,GAEGR,EACJA,EAAY,KAAM9P,EAASsQ,EAAYzR,GAEvC7I,EAAK2E,MAAOqF,EAASsQ,KAMzB,QAASC,IAAmB1B,GAC3B,GAAI2B,GAAc7D,EAASzR,EAC1BD,EAAM4T,EAAO9V,OACb0X,EAAkB1O,EAAKgJ,SAAU8D,EAAO,GAAG3W,MAC3CwY,EAAmBD,GAAmB1O,EAAKgJ,SAAS,KACpD/P,EAAIyV,EAAkB,EAAI,EAG1BE,EAAe1B,GAAe,SAAUrW,GACvC,MAAOA,KAAS4X,GACdE,GAAkB,GACrBE,EAAkB3B,GAAe,SAAUrW,GAC1C,MAAOxC,GAAQ2D,KAAMyW,EAAc5X,GAAS,IAC1C8X,GAAkB,GACrBlB,GAAa,SAAU5W,EAAMhC,EAASiI,GACrC,OAAU4R,IAAqB5R,GAAOjI,IAAYuL,MAChDqO,EAAe5Z,GAASwC,SACxBuX,EAAc/X,EAAMhC,EAASiI,GAC7B+R,EAAiBhY,EAAMhC,EAASiI,KAGpC,MAAY5D,EAAJD,EAASA,IAChB,GAAM2R,EAAU5K,EAAKgJ,SAAU8D,EAAO7T,GAAG9C,MACxCsX,GAAaP,GAAcM,GAAgBC,GAAY7C,QACjD,CAIN,GAHAA,EAAU5K,EAAKgH,OAAQ8F,EAAO7T,GAAG9C,MAAOyC,MAAO,KAAMkU,EAAO7T,GAAGyH,SAG1DkK,EAAS1Q,GAAY,CAGzB,IADAf,IAAMF,EACMC,EAAJC,EAASA,IAChB,GAAK6G,EAAKgJ,SAAU8D,EAAO3T,GAAGhD,MAC7B,KAGF,OAAO0X,IACN5U,EAAI,GAAKuU,GAAgBC,GACzBxU,EAAI,GAAKwL,GAERqI,EAAO3Y,MAAO,EAAG8E,EAAI,GAAIlF,QAAS8J,MAAgC,MAAzBiP,EAAQ7T,EAAI,GAAI9C,KAAe,IAAM,MAC7EkE,QAASlF,EAAO,MAClByV,EACIzR,EAAJF,GAASuV,GAAmB1B,EAAO3Y,MAAO8E,EAAGE,IACzCD,EAAJC,GAAWqV,GAAoB1B,EAASA,EAAO3Y,MAAOgF,IAClDD,EAAJC,GAAWsL,GAAYqI,IAGzBW,EAASxZ,KAAM2W,GAIjB,MAAO4C,IAAgBC,GAGxB,QAASqB,IAA0BC,EAAiBC,GAEnD,GAAIC,GAAoB,EACvBC,EAAQF,EAAYhY,OAAS,EAC7BmY,EAAYJ,EAAgB/X,OAAS,EACrCoY,EAAe,SAAUtL,EAAMjP,EAASiI,EAAKmB,EAASoR,GACrD,GAAIxY,GAAMsC,EAAGyR,EACZ0E,KACAC,EAAe,EACftW,EAAI,IACJ4R,EAAY/G,MACZ0L,EAA6B,MAAjBH,EACZI,EAAgBrP,EAEhBhI,EAAQ0L,GAAQqL,GAAanP,EAAK9I,KAAU,IAAG,IAAKmY,GAAiBxa,EAAQ+C,YAAc/C,GAE3F6a,EAAiB7O,GAA4B,MAAjB4O,EAAwB,EAAItV,KAAKC,UAAY,EAS1E,KAPKoV,IACJpP,EAAmBvL,IAAYzB,GAAYyB,EAC3CkL,EAAakP,GAKe,OAApBpY,EAAOuB,EAAMa,IAAaA,IAAM,CACxC,GAAKkW,GAAatY,EAAO,CACxBsC,EAAI,CACJ,OAASyR,EAAUmE,EAAgB5V,KAClC,GAAKyR,EAAS/T,EAAMhC,EAASiI,GAAQ,CACpCmB,EAAQhK,KAAM4C,EACd,OAGG2Y,IACJ3O,EAAU6O,EACV3P,IAAekP,GAKZC,KAEErY,GAAQ+T,GAAW/T,IACxB0Y,IAIIzL,GACJ+G,EAAU5W,KAAM4C,IAOnB,GADA0Y,GAAgBtW,EACXiW,GAASjW,IAAMsW,EAAe,CAClCpW,EAAI,CACJ,OAASyR,EAAUoE,EAAY7V,KAC9ByR,EAASC,EAAWyE,EAAYza,EAASiI,EAG1C,IAAKgH,EAAO,CAEX,GAAKyL,EAAe,EACnB,MAAQtW,IACA4R,EAAU5R,IAAMqW,EAAWrW,KACjCqW,EAAWrW,GAAKwI,EAAIzJ,KAAMiG,GAM7BqR,GAAa5B,GAAU4B,GAIxBrb,EAAK2E,MAAOqF,EAASqR,GAGhBE,IAAc1L,GAAQwL,EAAWtY,OAAS,GAC5CuY,EAAeP,EAAYhY,OAAW,GAExC6M,GAAO2E,WAAYvK,GAUrB,MALKuR,KACJ3O,EAAU6O,EACVtP,EAAmBqP,GAGb5E,EAGT,OAAOqE,GACN/J,GAAciK,GACdA,EAGFjP,EAAU0D,GAAO1D,QAAU,SAAUvL,EAAU+a,GAC9C,GAAI1W,GACH+V,KACAD,KACA9B,EAAShM,EAAerM,EAAW,IAEpC,KAAMqY,EAAS,CAER0C,IACLA,EAAQrL,GAAU1P,IAEnBqE,EAAI0W,EAAM3Y,MACV,OAAQiC,IACPgU,EAASuB,GAAmBmB,EAAM1W,IAC7BgU,EAAQ/S,GACZ8U,EAAY/a,KAAMgZ,GAElB8B,EAAgB9a,KAAMgZ,EAKxBA,GAAShM,EAAerM,EAAUka,GAA0BC,EAAiBC,IAE9E,MAAO/B,GAGR,SAASoB,IAAkBzZ,EAAUgb,EAAU3R,GAC9C,GAAIhF,GAAI,EACPC,EAAM0W,EAAS5Y,MAChB,MAAYkC,EAAJD,EAASA,IAChB4K,GAAQjP,EAAUgb,EAAS3W,GAAIgF,EAEhC,OAAOA,GAGR,QAAS6G,IAAQlQ,EAAUC,EAASoJ,EAAS6F,GAC5C,GAAI7K,GAAG6T,EAAQ+C,EAAO1Z,EAAMe,EAC3BN,EAAQ0N,GAAU1P,EAEnB,KAAMkP,GAEiB,IAAjBlN,EAAMI,OAAe,CAIzB,GADA8V,EAASlW,EAAM,GAAKA,EAAM,GAAGzC,MAAO,GAC/B2Y,EAAO9V,OAAS,GAAkC,QAA5B6Y,EAAQ/C,EAAO,IAAI3W,MAC5CwF,EAAQmL,SAAgC,IAArBjS,EAAQwC,UAAkBkJ,GAC7CP,EAAKgJ,SAAU8D,EAAO,GAAG3W,MAAS,CAGnC,GADAtB,GAAYmL,EAAK9I,KAAS,GAAG2Y,EAAMnP,QAAQ,GAAGrG,QAAQgJ,GAAWC,IAAYzO,QAAkB,IACzFA,EACL,MAAOoJ,EAERrJ,GAAWA,EAAST,MAAO2Y,EAAO5H,QAAQrH,MAAM7G,QAIjDiC,EAAIuJ,EAAwB,aAAEjL,KAAM3C,GAAa,EAAIkY,EAAO9V,MAC5D,OAAQiC,IAAM,CAIb,GAHA4W,EAAQ/C,EAAO7T,GAGV+G,EAAKgJ,SAAW7S,EAAO0Z,EAAM1Z,MACjC,KAED,KAAMe,EAAO8I,EAAK9I,KAAMf,MAEjB2N,EAAO5M,EACZ2Y,EAAMnP,QAAQ,GAAGrG,QAASgJ,GAAWC,IACrClB,EAAS7K,KAAMuV,EAAO,GAAG3W,OAAUtB,EAAQ+C,YAAc/C,IACrD,CAKJ,GAFAiY,EAAOvT,OAAQN,EAAG,GAClBrE,EAAWkP,EAAK9M,QAAUyN,GAAYqI,IAChClY,EAEL,MADAX,GAAK2E,MAAOqF,EAAS6F,GACd7F,CAGR,SAgBL,MAPAkC,GAASvL,EAAUgC,GAClBkN,EACAjP,GACC0L,EACDtC,EACAmE,EAAS7K,KAAM3C,IAETqJ,EAMRtC,EAAQgN,WAAazO,EAAQ4F,MAAM,IAAIxG,KAAM6H,GAAYuD,KAAK,MAAQxK,EAItEyB,EAAQ+M,iBAAmBxH,EAG3BZ,IAIA3E,EAAQoM,aAAe3C,GAAO,SAAU0K,GAEvC,MAAuE,GAAhEA,EAAKnI,wBAAyBvU,EAASiJ,cAAc,UAMvD+I,GAAO,SAAUC,GAEtB,MADAA,GAAIuB,UAAY,mBAC+B,MAAxCvB,EAAIwB,WAAWtC,aAAa,WAEnCgB,GAAW,yBAA0B,SAAU1O,EAAM+C,EAAMsG,GAC1D,MAAMA,GAAN,EACQrJ,EAAK0N,aAAc3K,EAA6B,SAAvBA,EAAKgE,cAA2B,EAAI,KAOjEjC,EAAQoG,YAAeqD,GAAO,SAAUC,GAG7C,MAFAA,GAAIuB,UAAY,WAChBvB,EAAIwB,WAAWrC,aAAc,QAAS,IACY,KAA3Ca,EAAIwB,WAAWtC,aAAc,YAEpCgB,GAAW,QAAS,SAAU1O,EAAM+C,EAAMsG,GACzC,MAAMA,IAAyC,UAAhCrJ,EAAK8G,SAASC,cAA7B,EACQ/G,EAAKkZ,eAOT3K,GAAO,SAAUC,GACtB,MAAuC,OAAhCA,EAAId,aAAa,eAExBgB,GAAW5D,EAAU,SAAU9K,EAAM+C,EAAMsG,GAC1C,GAAIoI,EACJ,OAAMpI,GAAN,GACSoI,EAAMzR,EAAKqQ,iBAAkBtN,KAAW0O,EAAIC,UACnDD,EAAIzK,MACJhH,EAAM+C,MAAW,EAAOA,EAAKgE,cAAgB,OAKjDpK,EAAO0D,KAAO2M,GACdrQ,EAAO4U,KAAOvE,GAAOiF,UACrBtV,EAAO4U,KAAK,KAAO5U,EAAO4U,KAAKpG,QAC/BxO,EAAOwc,OAASnM,GAAO2E,WACvBhV,EAAOuK,KAAO8F,GAAO5D,QACrBzM,EAAOyc,SAAWpM,GAAO3D,MACzB1M,EAAOmN,SAAWkD,GAAOlD,UAGrB7N,EAEJ,IAAIod,KAGJ,SAASC,GAAetW,GACvB,GAAIuW,GAASF,EAAcrW,KAI3B,OAHArG,GAAO+E,KAAMsB,EAAQjD,MAAO1B,OAAwB,SAAUqO,EAAG8M,GAChED,EAAQC,IAAS,IAEXD,EAyBR5c,EAAO8c,UAAY,SAAUzW,GAI5BA,EAA6B,gBAAZA,GACdqW,EAAcrW,IAAasW,EAAetW,GAC5CrG,EAAOgG,UAAYK,EAEpB,IACC0W,GAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,KAEAC,GAASjX,EAAQkX,SAEjBC,EAAO,SAAU/U,GAOhB,IANAuU,EAAS3W,EAAQ2W,QAAUvU,EAC3BwU,GAAQ,EACRE,EAAcC,GAAe,EAC7BA,EAAc,EACdF,EAAeG,EAAK7Z,OACpBuZ,GAAS,EACDM,GAAsBH,EAAdC,EAA4BA,IAC3C,GAAKE,EAAMF,GAAc/X,MAAOqD,EAAM,GAAKA,EAAM,OAAU,GAASpC,EAAQoX,YAAc,CACzFT,GAAS,CACT,OAGFD,GAAS,EACJM,IACCC,EACCA,EAAM9Z,QACVga,EAAMF,EAAM5L,SAEFsL,EACXK,KAEAK,EAAKC,YAKRD,GAECE,IAAK,WACJ,GAAKP,EAAO,CAEX,GAAIzG,GAAQyG,EAAK7Z,QACjB,QAAUoa,GAAK3Y,GACdjF,EAAO+E,KAAME,EAAM,SAAU8K,EAAG7E,GAC/B,GAAIvI,GAAO3C,EAAO2C,KAAMuI,EACV,cAATvI,EACE0D,EAAQmW,QAAWkB,EAAKpG,IAAKpM,IAClCmS,EAAK5c,KAAMyK,GAEDA,GAAOA,EAAI1H,QAAmB,WAATb,GAEhCib,EAAK1S,OAGJ7F,WAGC0X,EACJG,EAAeG,EAAK7Z,OAGTwZ,IACXI,EAAcxG,EACd4G,EAAMR,IAGR,MAAO1Z,OAGRyF,OAAQ,WAkBP,MAjBKsU,IACJrd,EAAO+E,KAAMM,UAAW,SAAU0K,EAAG7E,GACpC,GAAI2S,EACJ,QAASA,EAAQ7d,EAAO2K,QAASO,EAAKmS,EAAMQ,IAAY,GACvDR,EAAKtX,OAAQ8X,EAAO,GAEfd,IACUG,GAATW,GACJX,IAEaC,GAATU,GACJV,OAME7Z,MAIRgU,IAAK,SAAUhW,GACd,MAAOA,GAAKtB,EAAO2K,QAASrJ,EAAI+b,GAAS,MAASA,IAAQA,EAAK7Z,SAGhE8U,MAAO,WAGN,MAFA+E,MACAH,EAAe,EACR5Z,MAGRqa,QAAS,WAER,MADAN,GAAOC,EAAQN,EAASzd,EACjB+D,MAGR4U,SAAU,WACT,OAAQmF,GAGTS,KAAM,WAKL,MAJAR,GAAQ/d,EACFyd,GACLU,EAAKC,UAECra,MAGRya,OAAQ,WACP,OAAQT,GAGTU,SAAU,SAAU3c,EAAS4D,GAU5B,OATKoY,GAAWJ,IAASK,IACxBrY,EAAOA,MACPA,GAAS5D,EAAS4D,EAAKtE,MAAQsE,EAAKtE,QAAUsE,GACzC8X,EACJO,EAAM7c,KAAMwE,GAEZuY,EAAMvY,IAGD3B,MAGRka,KAAM,WAEL,MADAE,GAAKM,SAAU1a,KAAM+B,WACd/B,MAGR2Z,MAAO,WACN,QAASA,GAIZ,OAAOS,IAER1d,EAAOgG,QAENgG,SAAU,SAAUiS,GACnB,GAAIC,KAEA,UAAW,OAAQle,EAAO8c,UAAU,eAAgB,aACpD,SAAU,OAAQ9c,EAAO8c,UAAU,eAAgB,aACnD,SAAU,WAAY9c,EAAO8c,UAAU,YAE1CqB,EAAQ,UACRjZ,GACCiZ,MAAO,WACN,MAAOA,IAERC,OAAQ,WAEP,MADAC,GAASlZ,KAAME,WAAYiZ,KAAMjZ,WAC1B/B,MAERib,KAAM,WACL,GAAIC,GAAMnZ,SACV,OAAOrF,GAAOgM,SAAS,SAAUyS,GAChCze,EAAO+E,KAAMmZ,EAAQ,SAAUzY,EAAGiZ,GACjC,GAAIC,GAASD,EAAO,GACnBpd,EAAKtB,EAAOiE,WAAYua,EAAK/Y,KAAS+Y,EAAK/Y,EAE5C4Y,GAAUK,EAAM,IAAK,WACpB,GAAIE,GAAWtd,GAAMA,EAAG8D,MAAO9B,KAAM+B,UAChCuZ,IAAY5e,EAAOiE,WAAY2a,EAAS1Z,SAC5C0Z,EAAS1Z,UACPC,KAAMsZ,EAASI,SACfP,KAAMG,EAASK,QACfC,SAAUN,EAASO,QAErBP,EAAUE,EAAS,QAAUrb,OAAS4B,EAAUuZ,EAASvZ,UAAY5B,KAAMhC,GAAOsd,GAAavZ,eAIlGmZ,EAAM,OACJtZ,WAIJA,QAAS,SAAUuC,GAClB,MAAc,OAAPA,EAAczH,EAAOgG,OAAQyB,EAAKvC,GAAYA,IAGvDmZ,IAwCD,OArCAnZ,GAAQ+Z,KAAO/Z,EAAQqZ,KAGvBve,EAAO+E,KAAMmZ,EAAQ,SAAUzY,EAAGiZ,GACjC,GAAIrB,GAAOqB,EAAO,GACjBQ,EAAcR,EAAO,EAGtBxZ,GAASwZ,EAAM,IAAOrB,EAAKO,IAGtBsB,GACJ7B,EAAKO,IAAI,WAERO,EAAQe,GAGNhB,EAAY,EAAJzY,GAAS,GAAIkY,QAASO,EAAQ,GAAK,GAAIJ,MAInDO,EAAUK,EAAM,IAAO,WAEtB,MADAL,GAAUK,EAAM,GAAK,QAAUpb,OAAS+a,EAAWnZ,EAAU5B,KAAM+B,WAC5D/B,MAER+a,EAAUK,EAAM,GAAK,QAAWrB,EAAKW,WAItC9Y,EAAQA,QAASmZ,GAGZJ,GACJA,EAAKzZ,KAAM6Z,EAAUA,GAIfA,GAIRc,KAAM,SAAUC,GACf,GAAI3Z,GAAI,EACP4Z,EAAgB3e,EAAW8D,KAAMa,WACjC7B,EAAS6b,EAAc7b,OAGvB8b,EAAuB,IAAX9b,GAAkB4b,GAAepf,EAAOiE,WAAYmb,EAAYla,SAAc1B,EAAS,EAGnG6a,EAAyB,IAAdiB,EAAkBF,EAAcpf,EAAOgM,WAGlDuT,EAAa,SAAU9Z,EAAG2W,EAAUoD,GACnC,MAAO,UAAUnV,GAChB+R,EAAU3W,GAAMnC,KAChBkc,EAAQ/Z,GAAMJ,UAAU7B,OAAS,EAAI9C,EAAW8D,KAAMa,WAAcgF,EAChEmV,IAAWC,EACdpB,EAASqB,WAAYtD,EAAUoD,KACfF,GAChBjB,EAAS/W,YAAa8U,EAAUoD,KAKnCC,EAAgBE,EAAkBC,CAGnC,IAAKpc,EAAS,EAIb,IAHAic,EAAqB/X,MAAOlE,GAC5Bmc,EAAuBjY,MAAOlE,GAC9Boc,EAAsBlY,MAAOlE,GACjBA,EAAJiC,EAAYA,IACd4Z,EAAe5Z,IAAOzF,EAAOiE,WAAYob,EAAe5Z,GAAIP,SAChEma,EAAe5Z,GAAIP,UACjBC,KAAMoa,EAAY9Z,EAAGma,EAAiBP,IACtCf,KAAMD,EAASS,QACfC,SAAUQ,EAAY9Z,EAAGka,EAAkBF,MAE3CH,CAUL,OAJMA,IACLjB,EAAS/W,YAAasY,EAAiBP,GAGjChB,EAASnZ,aAGlBlF,EAAOmI,QAAU,SAAWA,GAE3B,GAAI9F,GAAKuL,EAAGgG,EAAOtC,EAAQuO,EAAUC,EAAKC,EAAWC,EAAava,EACjEoM,EAAMjS,EAASiJ,cAAc,MAS9B,IANAgJ,EAAIb,aAAc,YAAa,KAC/Ba,EAAIuB,UAAY,qEAGhB/Q,EAAMwP,EAAIhI,qBAAqB,SAC/B+D,EAAIiE,EAAIhI,qBAAqB,KAAM,IAC7B+D,IAAMA,EAAE7B,QAAU1J,EAAImB,OAC3B,MAAO2E,EAIRmJ,GAAS1R,EAASiJ,cAAc,UAChCiX,EAAMxO,EAAO4B,YAAatT,EAASiJ,cAAc,WACjD+K,EAAQ/B,EAAIhI,qBAAqB,SAAU,GAE3C+D,EAAE7B,MAAMkU,QAAU,gCAGlB9X,EAAQ+X,gBAAoC,MAAlBrO,EAAIoB,UAG9B9K,EAAQgY,kBAAgD,IAA5BtO,EAAIwB,WAAWxP,SAI3CsE,EAAQiY,OAASvO,EAAIhI,qBAAqB,SAASrG,OAInD2E,EAAQkY,gBAAkBxO,EAAIhI,qBAAqB,QAAQrG,OAI3D2E,EAAQ4D,MAAQ,MAAMhI,KAAM6J,EAAEmD,aAAa,UAI3C5I,EAAQmY,eAA4C,OAA3B1S,EAAEmD,aAAa,QAKxC5I,EAAQoY,QAAU,OAAOxc,KAAM6J,EAAE7B,MAAMwU,SAIvCpY,EAAQqY,WAAa5S,EAAE7B,MAAMyU,SAG7BrY,EAAQsY,UAAY7M,EAAMvJ,MAI1BlC,EAAQuY,YAAcZ,EAAI1H,SAG1BjQ,EAAQwY,UAAY/gB,EAASiJ,cAAc,QAAQ8X,QAInDxY,EAAQyY,WAA2E,kBAA9DhhB,EAASiJ,cAAc,OAAOgY,WAAW,GAAOC,UAGrE3Y,EAAQ4Y,wBAAyB,EACjC5Y,EAAQ6Y,kBAAmB,EAC3B7Y,EAAQ8Y,eAAgB,EACxB9Y,EAAQ+Y,eAAgB,EACxB/Y,EAAQgZ,cAAe,EACvBhZ,EAAQiZ,qBAAsB,EAC9BjZ,EAAQkZ,mBAAoB,EAG5BzN,EAAMuE,SAAU,EAChBhQ,EAAQmZ,eAAiB1N,EAAMiN,WAAW,GAAO1I,QAIjD7G,EAAO4G,UAAW,EAClB/P,EAAQoZ,aAAezB,EAAI5H,QAG3B,WACQrG,GAAI9N,KACV,MAAOmE,GACRC,EAAQ+Y,eAAgB,EAIzBtN,EAAQhU,EAASiJ,cAAc,SAC/B+K,EAAM5C,aAAc,QAAS,IAC7B7I,EAAQyL,MAA0C,KAAlCA,EAAM7C,aAAc,SAGpC6C,EAAMvJ,MAAQ,IACduJ,EAAM5C,aAAc,OAAQ,SAC5B7I,EAAQqZ,WAA6B,MAAhB5N,EAAMvJ,MAG3BuJ,EAAM5C,aAAc,UAAW,KAC/B4C,EAAM5C,aAAc,OAAQ,KAE5B6O,EAAWjgB,EAAS6hB,yBACpB5B,EAAS3M,YAAaU,GAItBzL,EAAQuZ,cAAgB9N,EAAMuE,QAG9BhQ,EAAQwZ,WAAa9B,EAASgB,WAAW,GAAOA,WAAW,GAAO/J,UAAUqB,QAKvEtG,EAAI5F,cACR4F,EAAI5F,YAAa,UAAW,WAC3B9D,EAAQgZ,cAAe,IAGxBtP,EAAIgP,WAAW,GAAOe,QAKvB,KAAMnc,KAAOyT,QAAQ,EAAM2I,QAAQ,EAAMC,SAAS,GACjDjQ,EAAIb,aAAc+O,EAAY,KAAOta,EAAG,KAExC0C,EAAS1C,EAAI,WAAcsa,IAAazgB,IAAUuS,EAAItD,WAAYwR,GAAYrZ,WAAY,CAG3FmL,GAAI9F,MAAMgW,eAAiB,cAC3BlQ,EAAIgP,WAAW,GAAO9U,MAAMgW,eAAiB,GAC7C5Z,EAAQ6Z,gBAA+C,gBAA7BnQ,EAAI9F,MAAMgW,cAIpC,KAAMtc,IAAKzF,GAAQmI,GAClB,KAoGD,OAlGAA,GAAQC,QAAgB,MAAN3C,EAGlBzF,EAAO,WACN,GAAIiiB,GAAWC,EAAWC,EACzBC,EAAW,+HACXhb,EAAOxH,EAASiK,qBAAqB,QAAQ,EAExCzC,KAKN6a,EAAYriB,EAASiJ,cAAc,OACnCoZ,EAAUlW,MAAMkU,QAAU,gFAE1B7Y,EAAK8L,YAAa+O,GAAY/O,YAAarB,GAS3CA,EAAIuB,UAAY,8CAChB+O,EAAMtQ,EAAIhI,qBAAqB,MAC/BsY,EAAK,GAAIpW,MAAMkU,QAAU,2CACzBD,EAA0C,IAA1BmC,EAAK,GAAIE,aAEzBF,EAAK,GAAIpW,MAAMuW,QAAU,GACzBH,EAAK,GAAIpW,MAAMuW,QAAU,OAIzBna,EAAQoa,sBAAwBvC,GAA2C,IAA1BmC,EAAK,GAAIE,aAG1DxQ,EAAIuB,UAAY,GAChBvB,EAAI9F,MAAMkU,QAAU,wKAIpBjgB,EAAO6L,KAAMzE,EAAyB,MAAnBA,EAAK2E,MAAMyW,MAAiBA,KAAM,MAAU,WAC9Dra,EAAQsa,UAAgC,IAApB5Q,EAAI6Q,cAIpBpjB,EAAOqjB,mBACXxa,EAAQ8Y,cAAuE,QAArD3hB,EAAOqjB,iBAAkB9Q,EAAK,WAAe3F,IACvE/D,EAAQkZ,kBAA2F,SAArE/hB,EAAOqjB,iBAAkB9Q,EAAK,QAAY+Q,MAAO,QAAUA,MAMzFV,EAAYrQ,EAAIqB,YAAatT,EAASiJ,cAAc,QACpDqZ,EAAUnW,MAAMkU,QAAUpO,EAAI9F,MAAMkU,QAAUmC,EAC9CF,EAAUnW,MAAM8W,YAAcX,EAAUnW,MAAM6W,MAAQ,IACtD/Q,EAAI9F,MAAM6W,MAAQ,MAElBza,EAAQiZ,qBACNtZ,YAAcxI,EAAOqjB,iBAAkBT,EAAW,WAAeW,oBAGxDhR,GAAI9F,MAAMyW,OAAS9iB,IAK9BmS,EAAIuB,UAAY,GAChBvB,EAAI9F,MAAMkU,QAAUmC,EAAW,8CAC/Bja,EAAQ4Y,uBAA+C,IAApBlP,EAAI6Q,YAIvC7Q,EAAI9F,MAAMuW,QAAU,QACpBzQ,EAAIuB,UAAY,cAChBvB,EAAIwB,WAAWtH,MAAM6W,MAAQ,MAC7Bza,EAAQ6Y,iBAAyC,IAApBnP,EAAI6Q,YAE5Bva,EAAQ4Y,yBAIZ3Z,EAAK2E,MAAMyW,KAAO,IAIpBpb,EAAK0K,YAAamQ,GAGlBA,EAAYpQ,EAAMsQ,EAAMD,EAAY,QAIrC7f,EAAMiP,EAASuO,EAAWC,EAAMlS,EAAIgG,EAAQ,KAErCzL;KAGR,IAAI2a,GAAS,+BACZC,EAAa,UAEd,SAASC,GAAc3f,EAAM+C,EAAMqC,EAAMwa,GACxC,GAAMjjB,EAAOkjB,WAAY7f,GAAzB,CAIA,GAAIwB,GAAKse,EACRC,EAAcpjB,EAAO0G,QAIrB2c,EAAShgB,EAAKQ,SAId2N,EAAQ6R,EAASrjB,EAAOwR,MAAQnO,EAIhCgB,EAAKgf,EAAShgB,EAAM+f,GAAgB/f,EAAM+f,IAAiBA,CAI5D,IAAO/e,GAAOmN,EAAMnN,KAAS4e,GAAQzR,EAAMnN,GAAIoE,OAAUA,IAASlJ,GAA6B,gBAAT6G,GAgEtF,MA5DM/B,KAIJA,EADIgf,EACChgB,EAAM+f,GAAgBhjB,EAAgB6N,OAASjO,EAAOmL,OAEtDiY,GAID5R,EAAOnN,KAGZmN,EAAOnN,GAAOgf,MAAgBC,OAAQtjB,EAAO8J,QAKzB,gBAAT1D,IAAqC,kBAATA,MAClC6c,EACJzR,EAAOnN,GAAOrE,EAAOgG,OAAQwL,EAAOnN,GAAM+B,GAE1CoL,EAAOnN,GAAKoE,KAAOzI,EAAOgG,OAAQwL,EAAOnN,GAAKoE,KAAMrC,IAItD+c,EAAY3R,EAAOnN,GAKb4e,IACCE,EAAU1a,OACf0a,EAAU1a,SAGX0a,EAAYA,EAAU1a,MAGlBA,IAASlJ,IACb4jB,EAAWnjB,EAAOiK,UAAW7D,IAAWqC,GAKpB,gBAATrC,IAGXvB,EAAMse,EAAW/c,GAGL,MAAPvB,IAGJA,EAAMse,EAAWnjB,EAAOiK,UAAW7D,MAGpCvB,EAAMse,EAGAte,GAGR,QAAS0e,GAAoBlgB,EAAM+C,EAAM6c,GACxC,GAAMjjB,EAAOkjB,WAAY7f,GAAzB,CAIA,GAAI8f,GAAW1d,EACd4d,EAAShgB,EAAKQ,SAGd2N,EAAQ6R,EAASrjB,EAAOwR,MAAQnO,EAChCgB,EAAKgf,EAAShgB,EAAMrD,EAAO0G,SAAY1G,EAAO0G,OAI/C,IAAM8K,EAAOnN,GAAb,CAIA,GAAK+B,IAEJ+c,EAAYF,EAAMzR,EAAOnN,GAAOmN,EAAOnN,GAAKoE,MAE3B,CAGVzI,EAAOyG,QAASL,GAsBrBA,EAAOA,EAAK7F,OAAQP,EAAO4F,IAAKQ,EAAMpG,EAAOiK,YAnBxC7D,IAAQ+c,GACZ/c,GAASA,IAITA,EAAOpG,EAAOiK,UAAW7D,GAExBA,EADIA,IAAQ+c,IACH/c,GAEFA,EAAKkG,MAAM,MAarB7G,EAAIW,EAAK5C,MACT,OAAQiC,UACA0d,GAAW/c,EAAKX,GAKxB,IAAKwd,GAAOO,EAAkBL,IAAcnjB,EAAOqI,cAAc8a,GAChE,QAMGF,UACEzR,GAAOnN,GAAKoE,KAIb+a,EAAmBhS,EAAOnN,QAM5Bgf,EACJrjB,EAAOyjB,WAAapgB,IAAQ,GAIjBrD,EAAOmI,QAAQ+Y,eAAiB1P,GAASA,EAAMlS,aAEnDkS,GAAOnN,GAIdmN,EAAOnN,GAAO,QAIhBrE,EAAOgG,QACNwL,SAIAkS,QACCC,QAAU,EACVC,OAAS,EAEThH,OAAU,8CAGXiH,QAAS,SAAUxgB,GAElB,MADAA,GAAOA,EAAKQ,SAAW7D,EAAOwR,MAAOnO,EAAKrD,EAAO0G,UAAarD,EAAMrD,EAAO0G,WAClErD,IAASmgB,EAAmBngB,IAGtCoF,KAAM,SAAUpF,EAAM+C,EAAMqC,GAC3B,MAAOua,GAAc3f,EAAM+C,EAAMqC,IAGlCqb,WAAY,SAAUzgB,EAAM+C,GAC3B,MAAOmd,GAAoBlgB,EAAM+C,IAIlC2d,MAAO,SAAU1gB,EAAM+C,EAAMqC,GAC5B,MAAOua,GAAc3f,EAAM+C,EAAMqC,GAAM,IAGxCub,YAAa,SAAU3gB,EAAM+C,GAC5B,MAAOmd,GAAoBlgB,EAAM+C,GAAM,IAIxC8c,WAAY,SAAU7f,GAErB,GAAKA,EAAKQ,UAA8B,IAAlBR,EAAKQ,UAAoC,IAAlBR,EAAKQ,SACjD,OAAO,CAGR,IAAI6f,GAASrgB,EAAK8G,UAAYnK,EAAO0jB,OAAQrgB,EAAK8G,SAASC,cAG3D,QAAQsZ,GAAUA,KAAW,GAAQrgB,EAAK0N,aAAa,aAAe2S,KAIxE1jB,EAAOsB,GAAG0E,QACTyC,KAAM,SAAUR,EAAKoC,GACpB,GAAI2H,GAAO5L,EACVqC,EAAO,KACPhD,EAAI,EACJpC,EAAOC,KAAK,EAMb,IAAK2E,IAAQ1I,EAAY,CACxB,GAAK+D,KAAKE,SACTiF,EAAOzI,EAAOyI,KAAMpF,GAEG,IAAlBA,EAAKQ,WAAmB7D,EAAO+jB,MAAO1gB,EAAM,gBAAkB,CAElE,IADA2O,EAAQ3O,EAAKkL,WACDyD,EAAMxO,OAAViC,EAAkBA,IACzBW,EAAO4L,EAAMvM,GAAGW,KAEe,IAA1BA,EAAKvF,QAAQ,WACjBuF,EAAOpG,EAAOiK,UAAW7D,EAAKzF,MAAM,IAEpCsjB,EAAU5gB,EAAM+C,EAAMqC,EAAMrC,IAG9BpG,GAAO+jB,MAAO1gB,EAAM,eAAe,GAIrC,MAAOoF,GAIR,MAAoB,gBAARR,GACJ3E,KAAKyB,KAAK,WAChB/E,EAAOyI,KAAMnF,KAAM2E,KAId5C,UAAU7B,OAAS,EAGzBF,KAAKyB,KAAK,WACT/E,EAAOyI,KAAMnF,KAAM2E,EAAKoC,KAKzBhH,EAAO4gB,EAAU5gB,EAAM4E,EAAKjI,EAAOyI,KAAMpF,EAAM4E,IAAU,MAG3D6b,WAAY,SAAU7b,GACrB,MAAO3E,MAAKyB,KAAK,WAChB/E,EAAO8jB,WAAYxgB,KAAM2E,OAK5B,SAASgc,GAAU5gB,EAAM4E,EAAKQ,GAG7B,GAAKA,IAASlJ,GAA+B,IAAlB8D,EAAKQ,SAAiB,CAEhD,GAAIuC,GAAO,QAAU6B,EAAIpB,QAASkc,EAAY,OAAQ3Y,aAItD,IAFA3B,EAAOpF,EAAK0N,aAAc3K,GAEL,gBAATqC,GAAoB,CAC/B,IACCA,EAAgB,SAATA,GAAkB,EACf,UAATA,GAAmB,EACV,SAATA,EAAkB,MAEjBA,EAAO,KAAOA,GAAQA,EACvBqa,EAAO/e,KAAM0E,GAASzI,EAAOiJ,UAAWR,GACvCA,EACD,MAAOP,IAGTlI,EAAOyI,KAAMpF,EAAM4E,EAAKQ,OAGxBA,GAAOlJ,EAIT,MAAOkJ,GAIR,QAAS+a,GAAmB/b,GAC3B,GAAIrB,EACJ,KAAMA,IAAQqB,GAGb,IAAc,SAATrB,IAAmBpG,EAAOqI,cAAeZ,EAAIrB,MAGpC,WAATA,EACJ,OAAO,CAIT,QAAO,EAERpG,EAAOgG,QACNke,MAAO,SAAU7gB,EAAMV,EAAM8F,GAC5B,GAAIyb,EAEJ,OAAK7gB,IACJV,GAASA,GAAQ,MAAS,QAC1BuhB,EAAQlkB,EAAO+jB,MAAO1gB,EAAMV,GAGvB8F,KACEyb,GAASlkB,EAAOyG,QAAQgC,GAC7Byb,EAAQlkB,EAAO+jB,MAAO1gB,EAAMV,EAAM3C,EAAOsE,UAAUmE,IAEnDyb,EAAMzjB,KAAMgI,IAGPyb,OAZR,GAgBDC,QAAS,SAAU9gB,EAAMV,GACxBA,EAAOA,GAAQ,IAEf,IAAIuhB,GAAQlkB,EAAOkkB,MAAO7gB,EAAMV,GAC/ByhB,EAAcF,EAAM1gB,OACpBlC,EAAK4iB,EAAMxS,QACX2S,EAAQrkB,EAAOskB,YAAajhB,EAAMV,GAClC4hB,EAAO,WACNvkB,EAAOmkB,QAAS9gB,EAAMV,GAIZ,gBAAPrB,IACJA,EAAK4iB,EAAMxS,QACX0S,KAGI9iB,IAIU,OAATqB,GACJuhB,EAAMvP,QAAS,oBAIT0P,GAAMG,KACbljB,EAAGkD,KAAMnB,EAAMkhB,EAAMF,KAGhBD,GAAeC,GACpBA,EAAM/L,MAAMkF,QAKd8G,YAAa,SAAUjhB,EAAMV,GAC5B,GAAIsF,GAAMtF,EAAO,YACjB,OAAO3C,GAAO+jB,MAAO1gB,EAAM4E,IAASjI,EAAO+jB,MAAO1gB,EAAM4E,GACvDqQ,MAAOtY,EAAO8c,UAAU,eAAec,IAAI,WAC1C5d,EAAOgkB,YAAa3gB,EAAMV,EAAO,SACjC3C,EAAOgkB,YAAa3gB,EAAM4E,UAM9BjI,EAAOsB,GAAG0E,QACTke,MAAO,SAAUvhB,EAAM8F,GACtB,GAAIgc,GAAS,CAQb,OANqB,gBAAT9hB,KACX8F,EAAO9F,EACPA,EAAO,KACP8hB,KAGuBA,EAAnBpf,UAAU7B,OACPxD,EAAOkkB,MAAO5gB,KAAK,GAAIX,GAGxB8F,IAASlJ,EACf+D,KACAA,KAAKyB,KAAK,WACT,GAAImf,GAAQlkB,EAAOkkB,MAAO5gB,KAAMX,EAAM8F,EAGtCzI,GAAOskB,YAAahhB,KAAMX,GAEZ,OAATA,GAA8B,eAAbuhB,EAAM,IAC3BlkB,EAAOmkB,QAAS7gB,KAAMX,MAI1BwhB,QAAS,SAAUxhB,GAClB,MAAOW,MAAKyB,KAAK,WAChB/E,EAAOmkB,QAAS7gB,KAAMX,MAKxB+hB,MAAO,SAAUC,EAAMhiB,GAItB,MAHAgiB,GAAO3kB,EAAO4kB,GAAK5kB,EAAO4kB,GAAGC,OAAQF,IAAUA,EAAOA,EACtDhiB,EAAOA,GAAQ,KAERW,KAAK4gB,MAAOvhB,EAAM,SAAU4hB,EAAMF,GACxC,GAAIS,GAAUzd,WAAYkd,EAAMI,EAChCN,GAAMG,KAAO,WACZO,aAAcD,OAIjBE,WAAY,SAAUriB,GACrB,MAAOW,MAAK4gB,MAAOvhB,GAAQ,UAI5BuC,QAAS,SAAUvC,EAAM8E,GACxB,GAAI8B,GACH0b,EAAQ,EACRC,EAAQllB,EAAOgM,WACf6I,EAAWvR,KACXmC,EAAInC,KAAKE,OACTqb,EAAU,aACCoG,GACTC,EAAM5d,YAAauN,GAAYA,IAIb,iBAATlS,KACX8E,EAAM9E,EACNA,EAAOpD,GAERoD,EAAOA,GAAQ,IAEf,OAAO8C,IACN8D,EAAMvJ,EAAO+jB,MAAOlP,EAAUpP,GAAK9C,EAAO,cACrC4G,GAAOA,EAAI+O,QACf2M,IACA1b,EAAI+O,MAAMsF,IAAKiB,GAIjB,OADAA,KACOqG,EAAMhgB,QAASuC,KAGxB,IAAI0d,GAAUC,EACbC,EAAS,cACTC,EAAU,MACVC,EAAa,6CACbC,EAAa,gBACbC,EAAc,0BACdvF,EAAkBlgB,EAAOmI,QAAQ+X,gBACjCwF,EAAc1lB,EAAOmI,QAAQyL,KAE9B5T,GAAOsB,GAAG0E,QACT9B,KAAM,SAAUkC,EAAMiE,GACrB,MAAOrK,GAAOqL,OAAQ/H,KAAMtD,EAAOkE,KAAMkC,EAAMiE,EAAOhF,UAAU7B,OAAS,IAG1EmiB,WAAY,SAAUvf,GACrB,MAAO9C,MAAKyB,KAAK,WAChB/E,EAAO2lB,WAAYriB,KAAM8C,MAI3Bwf,KAAM,SAAUxf,EAAMiE,GACrB,MAAOrK,GAAOqL,OAAQ/H,KAAMtD,EAAO4lB,KAAMxf,EAAMiE,EAAOhF,UAAU7B,OAAS,IAG1EqiB,WAAY,SAAUzf,GAErB,MADAA,GAAOpG,EAAO8lB,QAAS1f,IAAUA,EAC1B9C,KAAKyB,KAAK,WAEhB,IACCzB,KAAM8C,GAAS7G,QACR+D,MAAM8C,GACZ,MAAO8B,QAIX6d,SAAU,SAAU1b,GACnB,GAAI2b,GAAS3iB,EAAM+O,EAAK6T,EAAOtgB,EAC9BF,EAAI,EACJC,EAAMpC,KAAKE,OACX0iB,EAA2B,gBAAV7b,IAAsBA,CAExC,IAAKrK,EAAOiE,WAAYoG,GACvB,MAAO/G,MAAKyB,KAAK,SAAUY,GAC1B3F,EAAQsD,MAAOyiB,SAAU1b,EAAM7F,KAAMlB,KAAMqC,EAAGrC,KAAK2P,aAIrD,IAAKiT,EAIJ,IAFAF,GAAY3b,GAAS,IAAKjH,MAAO1B,OAErBgE,EAAJD,EAASA,IAOhB,GANApC,EAAOC,KAAMmC,GACb2M,EAAwB,IAAlB/O,EAAKQ,WAAoBR,EAAK4P,WACjC,IAAM5P,EAAK4P,UAAY,KAAMpM,QAASwe,EAAQ,KAChD,KAGU,CACV1f,EAAI,CACJ,OAASsgB,EAAQD,EAAQrgB,KACgB,EAAnCyM,EAAIvR,QAAS,IAAMolB,EAAQ,OAC/B7T,GAAO6T,EAAQ,IAGjB5iB,GAAK4P,UAAYjT,EAAOmB,KAAMiR,GAMjC,MAAO9O,OAGR6iB,YAAa,SAAU9b,GACtB,GAAI2b,GAAS3iB,EAAM+O,EAAK6T,EAAOtgB,EAC9BF,EAAI,EACJC,EAAMpC,KAAKE,OACX0iB,EAA+B,IAArB7gB,UAAU7B,QAAiC,gBAAV6G,IAAsBA,CAElE,IAAKrK,EAAOiE,WAAYoG,GACvB,MAAO/G,MAAKyB,KAAK,SAAUY,GAC1B3F,EAAQsD,MAAO6iB,YAAa9b,EAAM7F,KAAMlB,KAAMqC,EAAGrC,KAAK2P,aAGxD,IAAKiT,EAGJ,IAFAF,GAAY3b,GAAS,IAAKjH,MAAO1B,OAErBgE,EAAJD,EAASA,IAQhB,GAPApC,EAAOC,KAAMmC,GAEb2M,EAAwB,IAAlB/O,EAAKQ,WAAoBR,EAAK4P,WACjC,IAAM5P,EAAK4P,UAAY,KAAMpM,QAASwe,EAAQ,KAChD,IAGU,CACV1f,EAAI,CACJ,OAASsgB,EAAQD,EAAQrgB,KAExB,MAAQyM,EAAIvR,QAAS,IAAMolB,EAAQ,MAAS,EAC3C7T,EAAMA,EAAIvL,QAAS,IAAMof,EAAQ,IAAK,IAGxC5iB,GAAK4P,UAAY5I,EAAQrK,EAAOmB,KAAMiR,GAAQ,GAKjD,MAAO9O,OAGR8iB,YAAa,SAAU/b,EAAOgc,GAC7B,GAAI1jB,SAAc0H,EAElB,OAAyB,iBAAbgc,IAAmC,WAAT1jB,EAC9B0jB,EAAW/iB,KAAKyiB,SAAU1b,GAAU/G,KAAK6iB,YAAa9b,GAGzDrK,EAAOiE,WAAYoG,GAChB/G,KAAKyB,KAAK,SAAUU,GAC1BzF,EAAQsD,MAAO8iB,YAAa/b,EAAM7F,KAAKlB,KAAMmC,EAAGnC,KAAK2P,UAAWoT,GAAWA,KAItE/iB,KAAKyB,KAAK,WAChB,GAAc,WAATpC,EAAoB,CAExB,GAAIsQ,GACHxN,EAAI,EACJiY,EAAO1d,EAAQsD,MACfgjB,EAAajc,EAAMjH,MAAO1B,MAE3B,OAASuR,EAAYqT,EAAY7gB,KAE3BiY,EAAK6I,SAAUtT,GACnByK,EAAKyI,YAAalT,GAElByK,EAAKqI,SAAU9S,QAKNtQ,IAASjD,GAA8B,YAATiD,KACpCW,KAAK2P,WAETjT,EAAO+jB,MAAOzgB,KAAM,gBAAiBA,KAAK2P,WAO3C3P,KAAK2P,UAAY3P,KAAK2P,WAAa5I,KAAU,EAAQ,GAAKrK,EAAO+jB,MAAOzgB,KAAM,kBAAqB,OAKtGijB,SAAU,SAAUnlB,GACnB,GAAI6R,GAAY,IAAM7R,EAAW,IAChCqE,EAAI,EACJqF,EAAIxH,KAAKE,MACV,MAAYsH,EAAJrF,EAAOA,IACd,GAA0B,IAArBnC,KAAKmC,GAAG5B,WAAmB,IAAMP,KAAKmC,GAAGwN,UAAY,KAAKpM,QAAQwe,EAAQ,KAAKxkB,QAASoS,IAAe,EAC3G,OAAO,CAIT,QAAO,GAGR6B,IAAK,SAAUzK,GACd,GAAIxF,GAAKwf,EAAOpgB,EACfZ,EAAOC,KAAK,EAEb,EAAA,GAAM+B,UAAU7B,OAsBhB,MAFAS,GAAajE,EAAOiE,WAAYoG,GAEzB/G,KAAKyB,KAAK,SAAUU,GAC1B,GAAIqP,EAEmB,KAAlBxR,KAAKO,WAKTiR,EADI7Q,EACEoG,EAAM7F,KAAMlB,KAAMmC,EAAGzF,EAAQsD,MAAOwR,OAEpCzK,EAIK,MAAPyK,EACJA,EAAM,GACoB,gBAARA,GAClBA,GAAO,GACI9U,EAAOyG,QAASqO,KAC3BA,EAAM9U,EAAO4F,IAAIkP,EAAK,SAAWzK,GAChC,MAAgB,OAATA,EAAgB,GAAKA,EAAQ,MAItCga,EAAQrkB,EAAOwmB,SAAUljB,KAAKX,OAAU3C,EAAOwmB,SAAUljB,KAAK6G,SAASC,eAGjEia,GAAW,OAASA,IAAUA,EAAMoC,IAAKnjB,KAAMwR,EAAK,WAAcvV,IACvE+D,KAAK+G,MAAQyK,KAjDd,IAAKzR,EAGJ,MAFAghB,GAAQrkB,EAAOwmB,SAAUnjB,EAAKV,OAAU3C,EAAOwmB,SAAUnjB,EAAK8G,SAASC,eAElEia,GAAS,OAASA,KAAUxf,EAAMwf,EAAM5f,IAAKpB,EAAM,YAAe9D,EAC/DsF,GAGRA,EAAMxB,EAAKgH,MAEW,gBAARxF,GAEbA,EAAIgC,QAAQye,EAAS,IAEd,MAAPzgB,EAAc,GAAKA,OA0CxB7E,EAAOgG,QACNwgB,UACCE,QACCjiB,IAAK,SAAUpB,GAEd,GAAIyR,GAAM9U,EAAO0D,KAAKQ,KAAMb,EAAM,QAClC,OAAc,OAAPyR,EACNA,EACAzR,EAAKkH,OAGR+G,QACC7M,IAAK,SAAUpB,GACd,GAAIgH,GAAOqc,EACVrgB,EAAUhD,EAAKgD,QACfwX,EAAQxa,EAAKgV,cACbsO,EAAoB,eAAdtjB,EAAKV,MAAiC,EAARkb,EACpC2B,EAASmH,EAAM,QACf/b,EAAM+b,EAAM9I,EAAQ,EAAIxX,EAAQ7C,OAChCiC,EAAY,EAARoY,EACHjT,EACA+b,EAAM9I,EAAQ,CAGhB,MAAYjT,EAAJnF,EAASA,IAIhB,GAHAihB,EAASrgB,EAASZ,MAGXihB,EAAOtO,UAAY3S,IAAMoY,IAE5B7d,EAAOmI,QAAQoZ,YAAemF,EAAOxO,SAA+C,OAApCwO,EAAO3V,aAAa,cACnE2V,EAAOtiB,WAAW8T,UAAalY,EAAOmK,SAAUuc,EAAOtiB,WAAY,aAAiB,CAMxF,GAHAiG,EAAQrK,EAAQ0mB,GAAS5R,MAGpB6R,EACJ,MAAOtc,EAIRmV,GAAO/e,KAAM4J,GAIf,MAAOmV,IAGRiH,IAAK,SAAUpjB,EAAMgH,GACpB,GAAIuc,GAAWF,EACdrgB,EAAUhD,EAAKgD,QACfmZ,EAASxf,EAAOsE,UAAW+F,GAC3B5E,EAAIY,EAAQ7C,MAEb,OAAQiC,IACPihB,EAASrgB,EAASZ,IACZihB,EAAOtO,SAAWpY,EAAO2K,QAAS3K,EAAO0mB,GAAQ5R,MAAO0K,IAAY,KACzEoH,GAAY,EAQd,OAHMA,KACLvjB,EAAKgV,cAAgB,IAEfmH,KAKVtb,KAAM,SAAUb,EAAM+C,EAAMiE,GAC3B,GAAIga,GAAOxf,EACVgiB,EAAQxjB,EAAKQ,QAGd,IAAMR,GAAkB,IAAVwjB,GAAyB,IAAVA,GAAyB,IAAVA,EAK5C,aAAYxjB,GAAK0N,eAAiBrR,EAC1BM,EAAO4lB,KAAMviB,EAAM+C,EAAMiE,IAKlB,IAAVwc,GAAgB7mB,EAAOyc,SAAUpZ,KACrC+C,EAAOA,EAAKgE,cACZia,EAAQrkB,EAAO8mB,UAAW1gB,KACvBpG,EAAO4U,KAAKxR,MAAMmM,KAAKxL,KAAMqC,GAASgf,EAAWD,IAGhD9a,IAAU9K,EAaH8kB,GAAS,OAASA,IAA6C,QAAnCxf,EAAMwf,EAAM5f,IAAKpB,EAAM+C,IACvDvB,GAGPA,EAAM7E,EAAO0D,KAAKQ,KAAMb,EAAM+C,GAGhB,MAAPvB,EACNtF,EACAsF,GApBc,OAAVwF,EAGOga,GAAS,OAASA,KAAUxf,EAAMwf,EAAMoC,IAAKpjB,EAAMgH,EAAOjE,MAAY7G,EAC1EsF,GAGPxB,EAAK2N,aAAc5K,EAAMiE,EAAQ,IAC1BA,IAPPrK,EAAO2lB,WAAYtiB,EAAM+C,GAAzBpG,KAuBH2lB,WAAY,SAAUtiB,EAAMgH,GAC3B,GAAIjE,GAAM2gB,EACTthB,EAAI,EACJuhB,EAAY3c,GAASA,EAAMjH,MAAO1B,EAEnC,IAAKslB,GAA+B,IAAlB3jB,EAAKQ,SACtB,MAASuC,EAAO4gB,EAAUvhB,KACzBshB,EAAW/mB,EAAO8lB,QAAS1f,IAAUA,EAGhCpG,EAAO4U,KAAKxR,MAAMmM,KAAKxL,KAAMqC,GAE5Bsf,GAAexF,IAAoBuF,EAAY1hB,KAAMqC,GACzD/C,EAAM0jB,IAAa,EAInB1jB,EAAMrD,EAAOiK,UAAW,WAAa7D,IACpC/C,EAAM0jB,IAAa,EAKrB/mB,EAAOkE,KAAMb,EAAM+C,EAAM,IAG1B/C,EAAKgO,gBAAiB6O,EAAkB9Z,EAAO2gB,IAKlDD,WACCnkB,MACC8jB,IAAK,SAAUpjB,EAAMgH,GACpB,IAAMrK,EAAOmI,QAAQqZ,YAAwB,UAAVnX,GAAqBrK,EAAOmK,SAAS9G,EAAM,SAAW,CAGxF,GAAIyR,GAAMzR,EAAKgH,KAKf,OAJAhH,GAAK2N,aAAc,OAAQ3G,GACtByK,IACJzR,EAAKgH,MAAQyK,GAEPzK,MAMXyb,SACCmB,MAAO,UACPC,QAAS,aAGVtB,KAAM,SAAUviB,EAAM+C,EAAMiE,GAC3B,GAAIxF,GAAKwf,EAAO8C,EACfN,EAAQxjB,EAAKQ,QAGd,IAAMR,GAAkB,IAAVwjB,GAAyB,IAAVA,GAAyB,IAAVA,EAY5C,MARAM,GAAmB,IAAVN,IAAgB7mB,EAAOyc,SAAUpZ,GAErC8jB,IAEJ/gB,EAAOpG,EAAO8lB,QAAS1f,IAAUA,EACjCie,EAAQrkB,EAAOonB,UAAWhhB,IAGtBiE,IAAU9K,EACP8kB,GAAS,OAASA,KAAUxf,EAAMwf,EAAMoC,IAAKpjB,EAAMgH,EAAOjE,MAAY7G,EAC5EsF,EACExB,EAAM+C,GAASiE,EAGXga,GAAS,OAASA,IAA6C,QAAnCxf,EAAMwf,EAAM5f,IAAKpB,EAAM+C,IACzDvB,EACAxB,EAAM+C,IAITghB,WACCpP,UACCvT,IAAK,SAAUpB,GAId,GAAIgkB,GAAWrnB,EAAO0D,KAAKQ,KAAMb,EAAM,WAEvC,OAAOgkB,GACNC,SAAUD,EAAU,IACpB9B,EAAWxhB,KAAMV,EAAK8G,WAAcqb,EAAWzhB,KAAMV,EAAK8G,WAAc9G,EAAK0U,KAC5E,EACA,QAONqN,GACCqB,IAAK,SAAUpjB,EAAMgH,EAAOjE,GAa3B,MAZKiE,MAAU,EAEdrK,EAAO2lB,WAAYtiB,EAAM+C,GACdsf,GAAexF,IAAoBuF,EAAY1hB,KAAMqC,GAEhE/C,EAAK2N,cAAekP,GAAmBlgB,EAAO8lB,QAAS1f,IAAUA,EAAMA,GAIvE/C,EAAMrD,EAAOiK,UAAW,WAAa7D,IAAW/C,EAAM+C,IAAS,EAGzDA,IAGTpG,EAAO+E,KAAM/E,EAAO4U,KAAKxR,MAAMmM,KAAK9N,OAAO2B,MAAO,QAAU,SAAUqC,EAAGW,GACxE,GAAImhB,GAASvnB,EAAO4U,KAAK1C,WAAY9L,IAAUpG,EAAO0D,KAAKQ,IAE3DlE,GAAO4U,KAAK1C,WAAY9L,GAASsf,GAAexF,IAAoBuF,EAAY1hB,KAAMqC,GACrF,SAAU/C,EAAM+C,EAAMsG,GACrB,GAAIpL,GAAKtB,EAAO4U,KAAK1C,WAAY9L,GAChCvB,EAAM6H,EACLnN,GAECS,EAAO4U,KAAK1C,WAAY9L,GAAS7G,IACjCgoB,EAAQlkB,EAAM+C,EAAMsG,GAEpBtG,EAAKgE,cACL,IAEH,OADApK,GAAO4U,KAAK1C,WAAY9L,GAAS9E,EAC1BuD,GAER,SAAUxB,EAAM+C,EAAMsG,GACrB,MAAOA,GACNnN,EACA8D,EAAMrD,EAAOiK,UAAW,WAAa7D,IACpCA,EAAKgE,cACL,QAKCsb,GAAgBxF,IACrBlgB,EAAO8mB,UAAUzc,OAChBoc,IAAK,SAAUpjB,EAAMgH,EAAOjE,GAC3B,MAAKpG,GAAOmK,SAAU9G,EAAM,UAE3BA,EAAKkZ,aAAelS,EAApBhH,GAGO8hB,GAAYA,EAASsB,IAAKpjB,EAAMgH,EAAOjE,MAO5C8Z,IAILiF,GACCsB,IAAK,SAAUpjB,EAAMgH,EAAOjE,GAE3B,GAAIvB,GAAMxB,EAAKqQ,iBAAkBtN,EAUjC,OATMvB,IACLxB,EAAKmkB,iBACH3iB,EAAMxB,EAAKS,cAAc2jB,gBAAiBrhB,IAI7CvB,EAAIwF,MAAQA,GAAS,GAGL,UAATjE,GAAoBiE,IAAUhH,EAAK0N,aAAc3K,GACvDiE,EACA9K,IAGHS,EAAO4U,KAAK1C,WAAW7N,GAAKrE,EAAO4U,KAAK1C,WAAW9L,KAAOpG,EAAO4U,KAAK1C,WAAWwV,OAEhF,SAAUrkB,EAAM+C,EAAMsG,GACrB,GAAI7H,EACJ,OAAO6H,GACNnN,GACCsF,EAAMxB,EAAKqQ,iBAAkBtN,KAAyB,KAAdvB,EAAIwF,MAC5CxF,EAAIwF,MACJ,MAEJrK,EAAOwmB,SAAShO,QACf/T,IAAK,SAAUpB,EAAM+C,GACpB,GAAIvB,GAAMxB,EAAKqQ,iBAAkBtN,EACjC,OAAOvB,IAAOA,EAAIkQ,UACjBlQ,EAAIwF,MACJ9K,GAEFknB,IAAKtB,EAASsB,KAKfzmB,EAAO8mB,UAAUa,iBAChBlB,IAAK,SAAUpjB,EAAMgH,EAAOjE,GAC3B+e,EAASsB,IAAKpjB,EAAgB,KAAVgH,GAAe,EAAQA,EAAOjE,KAMpDpG,EAAO+E,MAAO,QAAS,UAAY,SAAUU,EAAGW,GAC/CpG,EAAO8mB,UAAW1gB,IACjBqgB,IAAK,SAAUpjB,EAAMgH,GACpB,MAAe,KAAVA,GACJhH,EAAK2N,aAAc5K,EAAM,QAClBiE,GAFR,OAYErK,EAAOmI,QAAQmY,gBAEpBtgB,EAAO+E,MAAO,OAAQ,OAAS,SAAUU,EAAGW,GAC3CpG,EAAOonB,UAAWhhB,IACjB3B,IAAK,SAAUpB,GACd,MAAOA,GAAK0N,aAAc3K,EAAM,OAM9BpG,EAAOmI,QAAQ4D,QACpB/L,EAAO8mB,UAAU/a,OAChBtH,IAAK,SAAUpB,GAId,MAAOA,GAAK0I,MAAMkU,SAAW1gB,GAE9BknB,IAAK,SAAUpjB,EAAMgH,GACpB,MAAShH,GAAK0I,MAAMkU,QAAU5V,EAAQ,MAOnCrK,EAAOmI,QAAQuY,cACpB1gB,EAAOonB,UAAUhP,UAChB3T,IAAK,SAAUpB,GACd,GAAI0P,GAAS1P,EAAKe,UAUlB,OARK2O,KACJA,EAAOsF,cAGFtF,EAAO3O,YACX2O,EAAO3O,WAAWiU,eAGb,QAKVrY,EAAO+E,MACN,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACF/E,EAAO8lB,QAASxiB,KAAK8G,eAAkB9G,OAIlCtD,EAAOmI,QAAQwY,UACpB3gB,EAAO8lB,QAAQnF,QAAU,YAI1B3gB,EAAO+E,MAAO,QAAS,YAAc,WACpC/E,EAAOwmB,SAAUljB,OAChBmjB,IAAK,SAAUpjB,EAAMgH,GACpB,MAAKrK,GAAOyG,QAAS4D,GACXhH,EAAK8U,QAAUnY,EAAO2K,QAAS3K,EAAOqD,GAAMyR,MAAOzK,IAAW,EADxE,IAKIrK,EAAOmI,QAAQsY,UACpBzgB,EAAOwmB,SAAUljB,MAAOmB,IAAM,SAAUpB,GAGvC,MAAsC,QAA/BA,EAAK0N,aAAa,SAAoB,KAAO1N,EAAKgH,SAI5D,IAAIud,GAAa,+BAChBC,GAAY,OACZC,GAAc,+BACdC,GAAc,kCACdC,GAAiB,sBAElB,SAASC,MACR,OAAO,EAGR,QAASC,MACR,OAAO,EAGR,QAASC,MACR,IACC,MAAOvoB,GAASiY,cACf,MAAQuQ,KAOXpoB,EAAOyC,OAEN4lB,UAEAzK,IAAK,SAAUva,EAAMilB,EAAOrW,EAASxJ,EAAMrH,GAC1C,GAAImI,GAAKgf,EAAQC,EAAGC,EACnBC,EAASC,EAAaC,EACtBC,EAAUlmB,EAAMmmB,EAAYC,EAC5BC,EAAWhpB,EAAO+jB,MAAO1gB,EAG1B,IAAM2lB,EAAN,CAKK/W,EAAQA,UACZwW,EAAcxW,EACdA,EAAUwW,EAAYxW,QACtB7Q,EAAWqnB,EAAYrnB,UAIlB6Q,EAAQ9G,OACb8G,EAAQ9G,KAAOnL,EAAOmL,SAIhBod,EAASS,EAAST,UACxBA,EAASS,EAAST,YAEZI,EAAcK,EAASC,UAC7BN,EAAcK,EAASC,OAAS,SAAU/gB,GAGzC,aAAclI,KAAWN,GAAuBwI,GAAKlI,EAAOyC,MAAMymB,YAAchhB,EAAEvF,KAEjFpD,EADAS,EAAOyC,MAAM0mB,SAAS/jB,MAAOujB,EAAYtlB,KAAMgC,YAIjDsjB,EAAYtlB,KAAOA,GAIpBilB,GAAUA,GAAS,IAAKllB,MAAO1B,KAAqB,IACpD8mB,EAAIF,EAAM9kB,MACV,OAAQglB,IACPjf,EAAMye,GAAevkB,KAAM6kB,EAAME,QACjC7lB,EAAOomB,EAAWxf,EAAI,GACtBuf,GAAevf,EAAI,IAAM,IAAK+C,MAAO,KAAMxG,OAGrCnD,IAKN+lB,EAAU1oB,EAAOyC,MAAMimB,QAAS/lB,OAGhCA,GAASvB,EAAWsnB,EAAQU,aAAeV,EAAQW,WAAc1mB,EAGjE+lB,EAAU1oB,EAAOyC,MAAMimB,QAAS/lB,OAGhCimB,EAAY5oB,EAAOgG,QAClBrD,KAAMA,EACNomB,SAAUA,EACVtgB,KAAMA,EACNwJ,QAASA,EACT9G,KAAM8G,EAAQ9G,KACd/J,SAAUA,EACVoO,aAAcpO,GAAYpB,EAAO4U,KAAKxR,MAAMoM,aAAazL,KAAM3C,GAC/DkoB,UAAWR,EAAW5X,KAAK,MACzBuX,IAGII,EAAWN,EAAQ5lB,MACzBkmB,EAAWN,EAAQ5lB,MACnBkmB,EAASU,cAAgB,EAGnBb,EAAQc,OAASd,EAAQc,MAAMhlB,KAAMnB,EAAMoF,EAAMqgB,EAAYH,MAAkB,IAE/EtlB,EAAKX,iBACTW,EAAKX,iBAAkBC,EAAMgmB,GAAa,GAE/BtlB,EAAK4I,aAChB5I,EAAK4I,YAAa,KAAOtJ,EAAMgmB,KAK7BD,EAAQ9K,MACZ8K,EAAQ9K,IAAIpZ,KAAMnB,EAAMulB,GAElBA,EAAU3W,QAAQ9G,OACvByd,EAAU3W,QAAQ9G,KAAO8G,EAAQ9G,OAK9B/J,EACJynB,EAAS9iB,OAAQ8iB,EAASU,gBAAiB,EAAGX,GAE9CC,EAASpoB,KAAMmoB,GAIhB5oB,EAAOyC,MAAM4lB,OAAQ1lB,IAAS,EAI/BU,GAAO,OAIR0F,OAAQ,SAAU1F,EAAMilB,EAAOrW,EAAS7Q,EAAUqoB,GACjD,GAAI9jB,GAAGijB,EAAWrf,EACjBmgB,EAAWlB,EAAGD,EACdG,EAASG,EAAUlmB,EACnBmmB,EAAYC,EACZC,EAAWhpB,EAAO6jB,QAASxgB,IAAUrD,EAAO+jB,MAAO1gB,EAEpD,IAAM2lB,IAAcT,EAASS,EAAST,QAAtC,CAKAD,GAAUA,GAAS,IAAKllB,MAAO1B,KAAqB,IACpD8mB,EAAIF,EAAM9kB,MACV,OAAQglB,IAMP,GALAjf,EAAMye,GAAevkB,KAAM6kB,EAAME,QACjC7lB,EAAOomB,EAAWxf,EAAI,GACtBuf,GAAevf,EAAI,IAAM,IAAK+C,MAAO,KAAMxG,OAGrCnD,EAAN,CAOA+lB,EAAU1oB,EAAOyC,MAAMimB,QAAS/lB,OAChCA,GAASvB,EAAWsnB,EAAQU,aAAeV,EAAQW,WAAc1mB,EACjEkmB,EAAWN,EAAQ5lB,OACnB4G,EAAMA,EAAI,IAAUkF,OAAQ,UAAYqa,EAAW5X,KAAK,iBAAmB,WAG3EwY,EAAY/jB,EAAIkjB,EAASrlB,MACzB,OAAQmC,IACPijB,EAAYC,EAAUljB,IAEf8jB,GAAeV,IAAaH,EAAUG,UACzC9W,GAAWA,EAAQ9G,OAASyd,EAAUzd,MACtC5B,IAAOA,EAAIxF,KAAM6kB,EAAUU,YAC3BloB,GAAYA,IAAawnB,EAAUxnB,WAAyB,OAAbA,IAAqBwnB,EAAUxnB,YACjFynB,EAAS9iB,OAAQJ,EAAG,GAEfijB,EAAUxnB,UACdynB,EAASU,gBAELb,EAAQ3f,QACZ2f,EAAQ3f,OAAOvE,KAAMnB,EAAMulB,GAOzBc,KAAcb,EAASrlB,SACrBklB,EAAQiB,UAAYjB,EAAQiB,SAASnlB,KAAMnB,EAAMylB,EAAYE,EAASC,WAAa,GACxFjpB,EAAO4pB,YAAavmB,EAAMV,EAAMqmB,EAASC,cAGnCV,GAAQ5lB,QAtCf,KAAMA,IAAQ4lB,GACbvoB,EAAOyC,MAAMsG,OAAQ1F,EAAMV,EAAO2lB,EAAOE,GAAKvW,EAAS7Q,GAAU,EA0C/DpB,GAAOqI,cAAekgB,WACnBS,GAASC,OAIhBjpB,EAAOgkB,YAAa3gB,EAAM,aAI5BkE,QAAS,SAAU9E,EAAOgG,EAAMpF,EAAMwmB,GACrC,GAAIZ,GAAQa,EAAQ1X,EACnB2X,EAAYrB,EAASnf,EAAK9D,EAC1BukB,GAAc3mB,GAAQzD,GACtB+C,EAAO3B,EAAYwD,KAAM/B,EAAO,QAAWA,EAAME,KAAOF,EACxDqmB,EAAa9nB,EAAYwD,KAAM/B,EAAO,aAAgBA,EAAM6mB,UAAUhd,MAAM,OAK7E,IAHA8F,EAAM7I,EAAMlG,EAAOA,GAAQzD,EAGJ,IAAlByD,EAAKQ,UAAoC,IAAlBR,EAAKQ,WAK5BkkB,GAAYhkB,KAAMpB,EAAO3C,EAAOyC,MAAMymB,aAItCvmB,EAAK9B,QAAQ,MAAQ,IAEzBioB,EAAanmB,EAAK2J,MAAM,KACxB3J,EAAOmmB,EAAWpX,QAClBoX,EAAWhjB,QAEZgkB,EAA6B,EAApBnnB,EAAK9B,QAAQ,MAAY,KAAO8B,EAGzCF,EAAQA,EAAOzC,EAAO0G,SACrBjE,EACA,GAAIzC,GAAOiqB,MAAOtnB,EAAuB,gBAAVF,IAAsBA,GAGtDA,EAAMynB,UAAYL,EAAe,EAAI,EACrCpnB,EAAM6mB,UAAYR,EAAW5X,KAAK,KAClCzO,EAAM0nB,aAAe1nB,EAAM6mB,UACtB7a,OAAQ,UAAYqa,EAAW5X,KAAK,iBAAmB,WAC3D,KAGDzO,EAAM4T,OAAS9W,EACTkD,EAAM8D,SACX9D,EAAM8D,OAASlD,GAIhBoF,EAAe,MAARA,GACJhG,GACFzC,EAAOsE,UAAWmE,GAAQhG,IAG3BimB,EAAU1oB,EAAOyC,MAAMimB,QAAS/lB,OAC1BknB,IAAgBnB,EAAQnhB,SAAWmhB,EAAQnhB,QAAQnC,MAAO/B,EAAMoF,MAAW,GAAjF,CAMA,IAAMohB,IAAiBnB,EAAQ0B,WAAapqB,EAAO2H,SAAUtE,GAAS,CAMrE,IAJA0mB,EAAarB,EAAQU,cAAgBzmB,EAC/BolB,GAAYhkB,KAAMgmB,EAAapnB,KACpCyP,EAAMA,EAAIhO,YAEHgO,EAAKA,EAAMA,EAAIhO,WACtB4lB,EAAUvpB,KAAM2R,GAChB7I,EAAM6I,CAIF7I,MAASlG,EAAKS,eAAiBlE,IACnCoqB,EAAUvpB,KAAM8I,EAAIyJ,aAAezJ,EAAI8gB,cAAgB/qB,GAKzDmG,EAAI,CACJ,QAAS2M,EAAM4X,EAAUvkB,QAAUhD,EAAM6nB,uBAExC7nB,EAAME,KAAO8C,EAAI,EAChBskB,EACArB,EAAQW,UAAY1mB,EAGrBsmB,GAAWjpB,EAAO+jB,MAAO3R,EAAK,eAAoB3P,EAAME,OAAU3C,EAAO+jB,MAAO3R,EAAK,UAChF6W,GACJA,EAAO7jB,MAAOgN,EAAK3J,GAIpBwgB,EAASa,GAAU1X,EAAK0X,GACnBb,GAAUjpB,EAAOkjB,WAAY9Q,IAAS6W,EAAO7jB,OAAS6jB,EAAO7jB,MAAOgN,EAAK3J,MAAW,GACxFhG,EAAM8nB,gBAMR,IAHA9nB,EAAME,KAAOA,GAGPknB,IAAiBpnB,EAAM+nB,wBAErB9B,EAAQ+B,UAAY/B,EAAQ+B,SAASrlB,MAAO4kB,EAAU/b,MAAOxF,MAAW,IAC9EzI,EAAOkjB,WAAY7f,IAKdymB,GAAUzmB,EAAMV,KAAW3C,EAAO2H,SAAUtE,GAAS,CAGzDkG,EAAMlG,EAAMymB,GAEPvgB,IACJlG,EAAMymB,GAAW,MAIlB9pB,EAAOyC,MAAMymB,UAAYvmB,CACzB,KACCU,EAAMV,KACL,MAAQuF,IAIVlI,EAAOyC,MAAMymB,UAAY3pB,EAEpBgK,IACJlG,EAAMymB,GAAWvgB,GAMrB,MAAO9G,GAAM4T,SAGd8S,SAAU,SAAU1mB,GAGnBA,EAAQzC,EAAOyC,MAAMioB,IAAKjoB,EAE1B,IAAIgD,GAAGZ,EAAK+jB,EAAW1R,EAASvR,EAC/BglB,KACA1lB,EAAOvE,EAAW8D,KAAMa,WACxBwjB,GAAa7oB,EAAO+jB,MAAOzgB,KAAM,eAAoBb,EAAME,UAC3D+lB,EAAU1oB,EAAOyC,MAAMimB,QAASjmB,EAAME,SAOvC,IAJAsC,EAAK,GAAKxC,EACVA,EAAMmoB,eAAiBtnB,MAGlBolB,EAAQmC,aAAenC,EAAQmC,YAAYrmB,KAAMlB,KAAMb,MAAY,EAAxE,CAKAkoB,EAAe3qB,EAAOyC,MAAMomB,SAASrkB,KAAMlB,KAAMb,EAAOomB,GAGxDpjB,EAAI,CACJ,QAASyR,EAAUyT,EAAcllB,QAAWhD,EAAM6nB,uBAAyB,CAC1E7nB,EAAMqoB,cAAgB5T,EAAQ7T,KAE9BsC,EAAI,CACJ,QAASijB,EAAY1R,EAAQ2R,SAAUljB,QAAWlD,EAAMsoB,kCAIjDtoB,EAAM0nB,cAAgB1nB,EAAM0nB,aAAapmB,KAAM6kB,EAAUU,cAE9D7mB,EAAMmmB,UAAYA,EAClBnmB,EAAMgG,KAAOmgB,EAAUngB,KAEvB5D,IAAS7E,EAAOyC,MAAMimB,QAASE,EAAUG,eAAkBE,QAAUL,EAAU3W,SAC5E7M,MAAO8R,EAAQ7T,KAAM4B,GAEnBJ,IAAQtF,IACNkD,EAAM4T,OAASxR,MAAS,IAC7BpC,EAAM8nB,iBACN9nB,EAAMuoB,oBAYX,MAJKtC,GAAQuC,cACZvC,EAAQuC,aAAazmB,KAAMlB,KAAMb,GAG3BA,EAAM4T,SAGdwS,SAAU,SAAUpmB,EAAOomB,GAC1B,GAAIqC,GAAKtC,EAAW1b,EAASzH,EAC5BklB,KACApB,EAAgBV,EAASU,cACzBnX,EAAM3P,EAAM8D,MAKb,IAAKgjB,GAAiBnX,EAAIvO,YAAcpB,EAAM+V,QAAyB,UAAf/V,EAAME,MAG7D,KAAQyP,GAAO9O,KAAM8O,EAAMA,EAAIhO,YAAcd,KAK5C,GAAsB,IAAjB8O,EAAIvO,WAAmBuO,EAAI8F,YAAa,GAAuB,UAAfzV,EAAME,MAAoB,CAE9E,IADAuK,KACMzH,EAAI,EAAO8jB,EAAJ9jB,EAAmBA,IAC/BmjB,EAAYC,EAAUpjB,GAGtBylB,EAAMtC,EAAUxnB,SAAW,IAEtB8L,EAASge,KAAU3rB,IACvB2N,EAASge,GAAQtC,EAAUpZ,aAC1BxP,EAAQkrB,EAAK5nB,MAAOua,MAAOzL,IAAS,EACpCpS,EAAO0D,KAAMwnB,EAAK5nB,KAAM,MAAQ8O,IAAQ5O,QAErC0J,EAASge,IACbhe,EAAQzM,KAAMmoB,EAGX1b,GAAQ1J,QACZmnB,EAAalqB,MAAO4C,KAAM+O,EAAKyW,SAAU3b,IAW7C,MAJqB2b,GAASrlB,OAAzB+lB,GACJoB,EAAalqB,MAAO4C,KAAMC,KAAMulB,SAAUA,EAASloB,MAAO4oB,KAGpDoB,GAGRD,IAAK,SAAUjoB,GACd,GAAKA,EAAOzC,EAAO0G,SAClB,MAAOjE,EAIR,IAAIgD,GAAGmgB,EAAMzf,EACZxD,EAAOF,EAAME,KACbwoB,EAAgB1oB,EAChB2oB,EAAU9nB,KAAK+nB,SAAU1oB,EAEpByoB,KACL9nB,KAAK+nB,SAAU1oB,GAASyoB,EACvBtD,GAAY/jB,KAAMpB,GAASW,KAAKgoB,WAChCzD,GAAU9jB,KAAMpB,GAASW,KAAKioB,aAGhCplB,EAAOilB,EAAQI,MAAQloB,KAAKkoB,MAAMjrB,OAAQ6qB,EAAQI,OAAUloB,KAAKkoB,MAEjE/oB,EAAQ,GAAIzC,GAAOiqB,MAAOkB,GAE1B1lB,EAAIU,EAAK3C,MACT,OAAQiC,IACPmgB,EAAOzf,EAAMV,GACbhD,EAAOmjB,GAASuF,EAAevF,EAmBhC,OAdMnjB,GAAM8D,SACX9D,EAAM8D,OAAS4kB,EAAcM,YAAc7rB,GAKb,IAA1B6C,EAAM8D,OAAO1C,WACjBpB,EAAM8D,OAAS9D,EAAM8D,OAAOnC,YAK7B3B,EAAMipB,UAAYjpB,EAAMipB,QAEjBN,EAAQ5X,OAAS4X,EAAQ5X,OAAQ/Q,EAAO0oB,GAAkB1oB,GAIlE+oB,MAAO,wHAAwHlf,MAAM,KAErI+e,YAEAE,UACCC,MAAO,4BAA4Blf,MAAM,KACzCkH,OAAQ,SAAU/Q,EAAOkpB,GAOxB,MAJoB,OAAflpB,EAAMmpB,QACVnpB,EAAMmpB,MAA6B,MAArBD,EAASE,SAAmBF,EAASE,SAAWF,EAASG,SAGjErpB,IAIT6oB,YACCE,MAAO,mGAAmGlf,MAAM,KAChHkH,OAAQ,SAAU/Q,EAAOkpB,GACxB,GAAIvkB,GAAM2kB,EAAUjZ,EACnB0F,EAASmT,EAASnT,OAClBwT,EAAcL,EAASK,WAuBxB,OApBoB,OAAfvpB,EAAMwpB,OAAqC,MAApBN,EAASO,UACpCH,EAAWtpB,EAAM8D,OAAOzC,eAAiBlE,EACzCkT,EAAMiZ,EAASjsB,gBACfsH,EAAO2kB,EAAS3kB,KAEhB3E,EAAMwpB,MAAQN,EAASO,SAAYpZ,GAAOA,EAAIqZ,YAAc/kB,GAAQA,EAAK+kB,YAAc,IAAQrZ,GAAOA,EAAIsZ,YAAchlB,GAAQA,EAAKglB,YAAc,GACnJ3pB,EAAM4pB,MAAQV,EAASW,SAAYxZ,GAAOA,EAAIyZ,WAAcnlB,GAAQA,EAAKmlB,WAAc,IAAQzZ,GAAOA,EAAI0Z,WAAcplB,GAAQA,EAAKolB,WAAc,KAI9I/pB,EAAMgqB,eAAiBT,IAC5BvpB,EAAMgqB,cAAgBT,IAAgBvpB,EAAM8D,OAASolB,EAASe,UAAYV,GAKrEvpB,EAAMmpB,OAASpT,IAAWjZ,IAC/BkD,EAAMmpB,MAAmB,EAATpT,EAAa,EAAe,EAATA,EAAa,EAAe,EAATA,EAAa,EAAI,GAGjE/V,IAITimB,SACCiE,MAECvC,UAAU,GAEXxS,OAECrQ,QAAS,WACR,GAAKjE,OAAS6kB,MAAuB7kB,KAAKsU,MACzC,IAEC,MADAtU,MAAKsU,SACE,EACN,MAAQ1P,MAOZkhB,aAAc,WAEfwD,MACCrlB,QAAS,WACR,MAAKjE,QAAS6kB,MAAuB7kB,KAAKspB,MACzCtpB,KAAKspB,QACE,GAFR,GAKDxD,aAAc,YAEfxH,OAECra,QAAS,WACR,MAAKvH,GAAOmK,SAAU7G,KAAM,UAA2B,aAAdA,KAAKX,MAAuBW,KAAKse,OACzEte,KAAKse,SACE,GAFR,GAOD6I,SAAU,SAAUhoB,GACnB,MAAOzC,GAAOmK,SAAU1H,EAAM8D,OAAQ,OAIxCsmB,cACC5B,aAAc,SAAUxoB,GAGlBA,EAAM4T,SAAW9W,IACrBkD,EAAM0oB,cAAc2B,YAAcrqB,EAAM4T,WAM5C0W,SAAU,SAAUpqB,EAAMU,EAAMZ,EAAOuqB,GAItC,GAAI9kB,GAAIlI,EAAOgG,OACd,GAAIhG,GAAOiqB,MACXxnB,GAECE,KAAMA,EACNsqB,aAAa,EACb9B,kBAGG6B,GACJhtB,EAAOyC,MAAM8E,QAASW,EAAG,KAAM7E,GAE/BrD,EAAOyC,MAAM0mB,SAAS3kB,KAAMnB,EAAM6E,GAE9BA,EAAEsiB,sBACN/nB,EAAM8nB,mBAKTvqB,EAAO4pB,YAAchqB,EAASmD,oBAC7B,SAAUM,EAAMV,EAAMsmB,GAChB5lB,EAAKN,qBACTM,EAAKN,oBAAqBJ,EAAMsmB,GAAQ,IAG1C,SAAU5lB,EAAMV,EAAMsmB,GACrB,GAAI7iB,GAAO,KAAOzD,CAEbU,GAAKL,oBAIGK,GAAM+C,KAAW1G,IAC5B2D,EAAM+C,GAAS,MAGhB/C,EAAKL,YAAaoD,EAAM6iB,KAI3BjpB,EAAOiqB,MAAQ,SAAUhkB,EAAKulB,GAE7B,MAAOloB,gBAAgBtD,GAAOiqB,OAKzBhkB,GAAOA,EAAItD,MACfW,KAAK6nB,cAAgBllB,EACrB3C,KAAKX,KAAOsD,EAAItD,KAIhBW,KAAKknB,mBAAuBvkB,EAAIinB,kBAAoBjnB,EAAI6mB,eAAgB,GACvE7mB,EAAIknB,mBAAqBlnB,EAAIknB,oBAAwBlF,GAAaC,IAInE5kB,KAAKX,KAAOsD,EAIRulB,GACJxrB,EAAOgG,OAAQ1C,KAAMkoB,GAItBloB,KAAK8pB,UAAYnnB,GAAOA,EAAImnB,WAAaptB,EAAO0L,MAGhDpI,KAAMtD,EAAO0G,UAAY,EAvBzB,GAJQ,GAAI1G,GAAOiqB,MAAOhkB,EAAKulB,IAgChCxrB,EAAOiqB,MAAMhnB,WACZunB,mBAAoBtC,GACpBoC,qBAAsBpC,GACtB6C,8BAA+B7C,GAE/BqC,eAAgB,WACf,GAAIriB,GAAI5E,KAAK6nB,aAEb7nB,MAAKknB,mBAAqBvC,GACpB/f,IAKDA,EAAEqiB,eACNriB,EAAEqiB,iBAKFriB,EAAE4kB,aAAc,IAGlB9B,gBAAiB,WAChB,GAAI9iB,GAAI5E,KAAK6nB,aAEb7nB,MAAKgnB,qBAAuBrC,GACtB/f,IAIDA,EAAE8iB,iBACN9iB,EAAE8iB,kBAKH9iB,EAAEmlB,cAAe,IAElBC,yBAA0B,WACzBhqB,KAAKynB,8BAAgC9C,GACrC3kB,KAAK0nB,oBAKPhrB,EAAO+E,MACNwoB,WAAY,YACZC,WAAY,YACV,SAAUC,EAAM/C,GAClB1qB,EAAOyC,MAAMimB,QAAS+E,IACrBrE,aAAcsB,EACdrB,SAAUqB,EAEVzB,OAAQ,SAAUxmB,GACjB,GAAIoC,GACH0B,EAASjD,KACToqB,EAAUjrB,EAAMgqB,cAChB7D,EAAYnmB,EAAMmmB,SASnB,SALM8E,GAAYA,IAAYnnB,IAAWvG,EAAOmN,SAAU5G,EAAQmnB,MACjEjrB,EAAME,KAAOimB,EAAUG,SACvBlkB,EAAM+jB,EAAU3W,QAAQ7M,MAAO9B,KAAM+B,WACrC5C,EAAME,KAAO+nB,GAEP7lB,MAMJ7E,EAAOmI,QAAQwlB,gBAEpB3tB,EAAOyC,MAAMimB,QAAQxP,QACpBsQ,MAAO,WAEN,MAAKxpB,GAAOmK,SAAU7G,KAAM,SACpB,GAIRtD,EAAOyC,MAAMmb,IAAKta,KAAM,iCAAkC,SAAU4E,GAEnE,GAAI7E,GAAO6E,EAAE3B,OACZqnB,EAAO5tB,EAAOmK,SAAU9G,EAAM,UAAarD,EAAOmK,SAAU9G,EAAM,UAAaA,EAAKuqB,KAAOruB,CACvFquB,KAAS5tB,EAAO+jB,MAAO6J,EAAM,mBACjC5tB,EAAOyC,MAAMmb,IAAKgQ,EAAM,iBAAkB,SAAUnrB,GACnDA,EAAMorB,gBAAiB,IAExB7tB,EAAO+jB,MAAO6J,EAAM,iBAAiB,MARvC5tB,IAcDirB,aAAc,SAAUxoB,GAElBA,EAAMorB,uBACHprB,GAAMorB,eACRvqB,KAAKc,aAAe3B,EAAMynB,WAC9BlqB,EAAOyC,MAAMsqB,SAAU,SAAUzpB,KAAKc,WAAY3B,GAAO,KAK5DknB,SAAU,WAET,MAAK3pB,GAAOmK,SAAU7G,KAAM,SACpB,GAIRtD,EAAOyC,MAAMsG,OAAQzF,KAAM,YAA3BtD,MAMGA,EAAOmI,QAAQ2lB,gBAEpB9tB,EAAOyC,MAAMimB,QAAQ7G,QAEpB2H,MAAO,WAEN,MAAK5B,GAAW7jB,KAAMT,KAAK6G,YAIP,aAAd7G,KAAKX,MAAqC,UAAdW,KAAKX,QACrC3C,EAAOyC,MAAMmb,IAAKta,KAAM,yBAA0B,SAAUb,GACjB,YAArCA,EAAM0oB,cAAc4C,eACxBzqB,KAAK0qB,eAAgB,KAGvBhuB,EAAOyC,MAAMmb,IAAKta,KAAM,gBAAiB,SAAUb,GAC7Ca,KAAK0qB,gBAAkBvrB,EAAMynB,YACjC5mB,KAAK0qB,eAAgB,GAGtBhuB,EAAOyC,MAAMsqB,SAAU,SAAUzpB,KAAMb,GAAO,OAGzC,IAGRzC,EAAOyC,MAAMmb,IAAKta,KAAM,yBAA0B,SAAU4E,GAC3D,GAAI7E,GAAO6E,EAAE3B,MAERqhB,GAAW7jB,KAAMV,EAAK8G,YAAenK,EAAO+jB,MAAO1gB,EAAM,mBAC7DrD,EAAOyC,MAAMmb,IAAKva,EAAM,iBAAkB,SAAUZ,IAC9Ca,KAAKc,YAAe3B,EAAMwqB,aAAgBxqB,EAAMynB,WACpDlqB,EAAOyC,MAAMsqB,SAAU,SAAUzpB,KAAKc,WAAY3B,GAAO,KAG3DzC,EAAO+jB,MAAO1gB,EAAM,iBAAiB,MATvCrD,IAcDipB,OAAQ,SAAUxmB,GACjB,GAAIY,GAAOZ,EAAM8D,MAGjB,OAAKjD,QAASD,GAAQZ,EAAMwqB,aAAexqB,EAAMynB,WAA4B,UAAd7mB,EAAKV,MAAkC,aAAdU,EAAKV,KACrFF,EAAMmmB,UAAU3W,QAAQ7M,MAAO9B,KAAM+B,WAD7C,GAKDskB,SAAU,WAGT,MAFA3pB,GAAOyC,MAAMsG,OAAQzF,KAAM,aAEnBskB,EAAW7jB,KAAMT,KAAK6G,aAM3BnK,EAAOmI,QAAQ8lB,gBACpBjuB,EAAO+E,MAAO6S,MAAO,UAAWgV,KAAM,YAAc,SAAUa,EAAM/C,GAGnE,GAAIwD,GAAW,EACdjc,EAAU,SAAUxP,GACnBzC,EAAOyC,MAAMsqB,SAAUrC,EAAKjoB,EAAM8D,OAAQvG,EAAOyC,MAAMioB,IAAKjoB,IAAS,GAGvEzC,GAAOyC,MAAMimB,QAASgC,IACrBlB,MAAO,WACc,IAAf0E,KACJtuB,EAAS8C,iBAAkB+qB,EAAMxb,GAAS,IAG5C0X,SAAU,WACW,MAAbuE,GACNtuB,EAASmD,oBAAqB0qB,EAAMxb,GAAS,OAOlDjS,EAAOsB,GAAG0E,QAETmoB,GAAI,SAAU7F,EAAOlnB,EAAUqH,EAAMnH,EAAiBqlB,GACrD,GAAIhkB,GAAMyrB,CAGV,IAAsB,gBAAV9F,GAAqB,CAEP,gBAAblnB,KAEXqH,EAAOA,GAAQrH,EACfA,EAAW7B,EAEZ,KAAMoD,IAAQ2lB,GACbhlB,KAAK6qB,GAAIxrB,EAAMvB,EAAUqH,EAAM6f,EAAO3lB,GAAQgkB,EAE/C,OAAOrjB,MAmBR,GAhBa,MAARmF,GAAsB,MAANnH,GAEpBA,EAAKF,EACLqH,EAAOrH,EAAW7B,GACD,MAAN+B,IACc,gBAAbF,IAEXE,EAAKmH,EACLA,EAAOlJ,IAGP+B,EAAKmH,EACLA,EAAOrH,EACPA,EAAW7B,IAGR+B,KAAO,EACXA,EAAK4mB,OACC,KAAM5mB,EACZ,MAAOgC,KAaR,OAVa,KAARqjB,IACJyH,EAAS9sB,EACTA,EAAK,SAAUmB,GAGd,MADAzC,KAASwH,IAAK/E,GACP2rB,EAAOhpB,MAAO9B,KAAM+B,YAG5B/D,EAAG6J,KAAOijB,EAAOjjB,OAAUijB,EAAOjjB,KAAOnL,EAAOmL,SAE1C7H,KAAKyB,KAAM,WACjB/E,EAAOyC,MAAMmb,IAAKta,KAAMglB,EAAOhnB,EAAImH,EAAMrH,MAG3CulB,IAAK,SAAU2B,EAAOlnB,EAAUqH,EAAMnH,GACrC,MAAOgC,MAAK6qB,GAAI7F,EAAOlnB,EAAUqH,EAAMnH,EAAI,IAE5CkG,IAAK,SAAU8gB,EAAOlnB,EAAUE,GAC/B,GAAIsnB,GAAWjmB,CACf,IAAK2lB,GAASA,EAAMiC,gBAAkBjC,EAAMM,UAQ3C,MANAA,GAAYN,EAAMM,UAClB5oB,EAAQsoB,EAAMsC,gBAAiBpjB,IAC9BohB,EAAUU,UAAYV,EAAUG,SAAW,IAAMH,EAAUU,UAAYV,EAAUG,SACjFH,EAAUxnB,SACVwnB,EAAU3W,SAEJ3O,IAER,IAAsB,gBAAVglB,GAAqB,CAEhC,IAAM3lB,IAAQ2lB,GACbhlB,KAAKkE,IAAK7E,EAAMvB,EAAUknB,EAAO3lB,GAElC,OAAOW,MAUR,OARKlC,KAAa,GAA6B,kBAAbA,MAEjCE,EAAKF,EACLA,EAAW7B,GAEP+B,KAAO,IACXA,EAAK4mB,IAEC5kB,KAAKyB,KAAK,WAChB/E,EAAOyC,MAAMsG,OAAQzF,KAAMglB,EAAOhnB,EAAIF,MAIxCmG,QAAS,SAAU5E,EAAM8F,GACxB,MAAOnF,MAAKyB,KAAK,WAChB/E,EAAOyC,MAAM8E,QAAS5E,EAAM8F,EAAMnF,SAGpC+qB,eAAgB,SAAU1rB,EAAM8F,GAC/B,GAAIpF,GAAOC,KAAK,EAChB,OAAKD,GACGrD,EAAOyC,MAAM8E,QAAS5E,EAAM8F,EAAMpF,GAAM,GADhD,IAKF,IAAIirB,IAAW,iBACdC,GAAe,iCACfC,GAAgBxuB,EAAO4U,KAAKxR,MAAMoM,aAElCif,IACCC,UAAU,EACVC,UAAU,EACVpK,MAAM,EACNqK,MAAM,EAGR5uB,GAAOsB,GAAG0E,QACTtC,KAAM,SAAUtC,GACf,GAAIqE,GACHZ,KACA6Y,EAAOpa,KACPoC,EAAMgY,EAAKla,MAEZ,IAAyB,gBAAbpC,GACX,MAAOkC,MAAKqB,UAAW3E,EAAQoB,GAAWoS,OAAO,WAChD,IAAM/N,EAAI,EAAOC,EAAJD,EAASA,IACrB,GAAKzF,EAAOmN,SAAUuQ,EAAMjY,GAAKnC,MAChC,OAAO,IAMX,KAAMmC,EAAI,EAAOC,EAAJD,EAASA,IACrBzF,EAAO0D,KAAMtC,EAAUsc,EAAMjY,GAAKZ,EAMnC,OAFAA,GAAMvB,KAAKqB,UAAWe,EAAM,EAAI1F,EAAOwc,OAAQ3X,GAAQA,GACvDA,EAAIzD,SAAWkC,KAAKlC,SAAWkC,KAAKlC,SAAW,IAAMA,EAAWA,EACzDyD,GAGRyS,IAAK,SAAU/Q,GACd,GAAId,GACHopB,EAAU7uB,EAAQuG,EAAQjD,MAC1BoC,EAAMmpB,EAAQrrB,MAEf,OAAOF,MAAKkQ,OAAO,WAClB,IAAM/N,EAAI,EAAOC,EAAJD,EAASA,IACrB,GAAKzF,EAAOmN,SAAU7J,KAAMurB,EAAQppB,IACnC,OAAO,KAMX0R,IAAK,SAAU/V,GACd,MAAOkC,MAAKqB,UAAWmqB,GAAOxrB,KAAMlC,OAAgB,KAGrDoS,OAAQ,SAAUpS,GACjB,MAAOkC,MAAKqB,UAAWmqB,GAAOxrB,KAAMlC,OAAgB,KAGrD2tB,GAAI,SAAU3tB,GACb,QAAS0tB,GACRxrB,KAIoB,gBAAblC,IAAyBotB,GAAczqB,KAAM3C,GACnDpB,EAAQoB,GACRA,OACD,GACCoC,QAGHwrB,QAAS,SAAU1Z,EAAWjU,GAC7B,GAAI+Q,GACH3M,EAAI,EACJqF,EAAIxH,KAAKE,OACTqB,KACAoqB,EAAMT,GAAczqB,KAAMuR,IAAoC,gBAAdA,GAC/CtV,EAAQsV,EAAWjU,GAAWiC,KAAKjC,SACnC,CAEF,MAAYyJ,EAAJrF,EAAOA,IACd,IAAM2M,EAAM9O,KAAKmC,GAAI2M,GAAOA,IAAQ/Q,EAAS+Q,EAAMA,EAAIhO,WAEtD,GAAoB,GAAfgO,EAAIvO,WAAkBorB,EAC1BA,EAAIpR,MAAMzL,GAAO,GAGA,IAAjBA,EAAIvO,UACH7D,EAAO0D,KAAKmQ,gBAAgBzB,EAAKkD,IAAc,CAEhDlD,EAAMvN,EAAIpE,KAAM2R,EAChB,OAKH,MAAO9O,MAAKqB,UAAWE,EAAIrB,OAAS,EAAIxD,EAAOwc,OAAQ3X,GAAQA,IAKhEgZ,MAAO,SAAUxa,GAGhB,MAAMA,GAKe,gBAATA,GACJrD,EAAO2K,QAASrH,KAAK,GAAItD,EAAQqD,IAIlCrD,EAAO2K,QAEbtH,EAAKH,OAASG,EAAK,GAAKA,EAAMC,MAXrBA,KAAK,IAAMA,KAAK,GAAGc,WAAed,KAAKgC,QAAQ4pB,UAAU1rB,OAAS,IAc7Eoa,IAAK,SAAUxc,EAAUC,GACxB,GAAIolB,GAA0B,gBAAbrlB,GACfpB,EAAQoB,EAAUC,GAClBrB,EAAOsE,UAAWlD,GAAYA,EAASyC,UAAazC,GAAaA,GAClEiB,EAAMrC,EAAO2D,MAAOL,KAAKmB,MAAOgiB,EAEjC,OAAOnjB,MAAKqB,UAAW3E,EAAOwc,OAAOna,KAGtC8sB,QAAS,SAAU/tB,GAClB,MAAOkC,MAAKsa,IAAiB,MAAZxc,EAChBkC,KAAKwB,WAAaxB,KAAKwB,WAAW0O,OAAOpS,MAK5C,SAASguB,IAAShd,EAAKsD,GACtB,EACCtD,GAAMA,EAAKsD,SACFtD,GAAwB,IAAjBA,EAAIvO,SAErB,OAAOuO,GAGRpS,EAAO+E,MACNgO,OAAQ,SAAU1P,GACjB,GAAI0P,GAAS1P,EAAKe,UAClB,OAAO2O,IAA8B,KAApBA,EAAOlP,SAAkBkP,EAAS,MAEpDsc,QAAS,SAAUhsB,GAClB,MAAOrD,GAAO0V,IAAKrS,EAAM,eAE1BisB,aAAc,SAAUjsB,EAAMoC,EAAG8pB,GAChC,MAAOvvB,GAAO0V,IAAKrS,EAAM,aAAcksB,IAExChL,KAAM,SAAUlhB,GACf,MAAO+rB,IAAS/rB,EAAM,gBAEvBurB,KAAM,SAAUvrB,GACf,MAAO+rB,IAAS/rB,EAAM,oBAEvBmsB,QAAS,SAAUnsB,GAClB,MAAOrD,GAAO0V,IAAKrS,EAAM,gBAE1B6rB,QAAS,SAAU7rB,GAClB,MAAOrD,GAAO0V,IAAKrS,EAAM,oBAE1BosB,UAAW,SAAUpsB,EAAMoC,EAAG8pB,GAC7B,MAAOvvB,GAAO0V,IAAKrS,EAAM,cAAeksB,IAEzCG,UAAW,SAAUrsB,EAAMoC,EAAG8pB,GAC7B,MAAOvvB,GAAO0V,IAAKrS,EAAM,kBAAmBksB,IAE7CI,SAAU,SAAUtsB,GACnB,MAAOrD,GAAOovB,SAAW/rB,EAAKe,gBAAmBiP,WAAYhQ,IAE9DqrB,SAAU,SAAUrrB,GACnB,MAAOrD,GAAOovB,QAAS/rB,EAAKgQ,aAE7Bsb,SAAU,SAAUtrB,GACnB,MAAOrD,GAAOmK,SAAU9G,EAAM,UAC7BA,EAAKusB,iBAAmBvsB,EAAKwsB,cAAcjwB,SAC3CI,EAAO2D,SAAWN,EAAK2F,cAEvB,SAAU5C,EAAM9E,GAClBtB,EAAOsB,GAAI8E,GAAS,SAAUmpB,EAAOnuB,GACpC,GAAIyD,GAAM7E,EAAO4F,IAAKtC,KAAMhC,EAAIiuB,EAsBhC,OApB0B,UAArBnpB,EAAKzF,MAAO,MAChBS,EAAWmuB,GAGPnuB,GAAgC,gBAAbA,KACvByD,EAAM7E,EAAOwT,OAAQpS,EAAUyD,IAG3BvB,KAAKE,OAAS,IAEZirB,GAAkBroB,KACvBvB,EAAM7E,EAAOwc,OAAQ3X,IAIjB0pB,GAAaxqB,KAAMqC,KACvBvB,EAAMA,EAAIirB,YAILxsB,KAAKqB,UAAWE,MAIzB7E,EAAOgG,QACNwN,OAAQ,SAAUoB,EAAMhQ,EAAOuS,GAC9B,GAAI9T,GAAOuB,EAAO,EAMlB,OAJKuS,KACJvC,EAAO,QAAUA,EAAO,KAGD,IAAjBhQ,EAAMpB,QAAkC,IAAlBH,EAAKQ,SACjC7D,EAAO0D,KAAKmQ,gBAAiBxQ,EAAMuR,IAAWvR,MAC9CrD,EAAO0D,KAAKwJ,QAAS0H,EAAM5U,EAAO+K,KAAMnG,EAAO,SAAUvB,GACxD,MAAyB,KAAlBA,EAAKQ,aAIf6R,IAAK,SAAUrS,EAAMqS,EAAK6Z,GACzB,GAAIrY,MACH9E,EAAM/O,EAAMqS,EAEb,OAAQtD,GAAwB,IAAjBA,EAAIvO,WAAmB0rB,IAAUhwB,GAA8B,IAAjB6S,EAAIvO,WAAmB7D,EAAQoS,GAAM2c,GAAIQ,IAC/E,IAAjBnd,EAAIvO,UACRqT,EAAQzW,KAAM2R,GAEfA,EAAMA,EAAIsD,EAEX,OAAOwB,IAGRkY,QAAS,SAAUW,EAAG1sB,GACrB,GAAI2sB,KAEJ,MAAQD,EAAGA,EAAIA,EAAExd,YACI,IAAfwd,EAAElsB,UAAkBksB,IAAM1sB,GAC9B2sB,EAAEvvB,KAAMsvB,EAIV,OAAOC,KAKT,SAASlB,IAAQja,EAAUob,EAAW9Y,GACrC,GAAKnX,EAAOiE,WAAYgsB,GACvB,MAAOjwB,GAAO+K,KAAM8J,EAAU,SAAUxR,EAAMoC,GAE7C,QAASwqB,EAAUzrB,KAAMnB,EAAMoC,EAAGpC,KAAW8T,GAK/C,IAAK8Y,EAAUpsB,SACd,MAAO7D,GAAO+K,KAAM8J,EAAU,SAAUxR,GACvC,MAASA,KAAS4sB,IAAgB9Y,GAKpC,IAA0B,gBAAd8Y,GAAyB,CACpC,GAAK3B,GAASvqB,KAAMksB,GACnB,MAAOjwB,GAAOwT,OAAQyc,EAAWpb,EAAUsC,EAG5C8Y,GAAYjwB,EAAOwT,OAAQyc,EAAWpb,GAGvC,MAAO7U,GAAO+K,KAAM8J,EAAU,SAAUxR,GACvC,MAASrD,GAAO2K,QAAStH,EAAM4sB,IAAe,IAAQ9Y,IAGxD,QAAS+Y,IAAoBtwB,GAC5B,GAAIyd,GAAO8S,GAAU7jB,MAAO,KAC3B8jB,EAAWxwB,EAAS6hB,wBAErB,IAAK2O,EAASvnB,cACb,MAAQwU,EAAK7Z,OACZ4sB,EAASvnB,cACRwU,EAAKpP,MAIR,OAAOmiB,GAGR,GAAID,IAAY,6JAEfE,GAAgB,6BAChBC,GAAmB7hB,OAAO,OAAS0hB,GAAY,WAAY,KAC3DI,GAAqB,OACrBC,GAAY,0EACZC,GAAW,YACXC,GAAS,UACTC,GAAQ,YACRC,GAAe,0BACfC,GAA8B,wBAE9BC,GAAW,oCACXC,GAAc,4BACdC,GAAoB,cACpBC,GAAe,2CAGfC,IACCxK,QAAU,EAAG,+BAAgC,aAC7CyK,QAAU,EAAG,aAAc,eAC3BC,MAAQ,EAAG,QAAS,UACpBC,OAAS,EAAG,WAAY,aACxBC,OAAS,EAAG,UAAW,YACvBC,IAAM,EAAG,iBAAkB,oBAC3BC,KAAO,EAAG,mCAAoC,uBAC9CC,IAAM,EAAG,qBAAsB,yBAI/BhH,SAAUzqB,EAAOmI,QAAQkY,eAAkB,EAAG,GAAI,KAAS,EAAG,SAAU,WAEzEqR,GAAexB,GAAoBtwB,GACnC+xB,GAAcD,GAAaxe,YAAatT,EAASiJ,cAAc,OAEhEqoB,IAAQU,SAAWV,GAAQxK,OAC3BwK,GAAQ9Q,MAAQ8Q,GAAQW,MAAQX,GAAQY,SAAWZ,GAAQa,QAAUb,GAAQI,MAC7EJ,GAAQc,GAAKd,GAAQO,GAErBzxB,EAAOsB,GAAG0E,QACTuE,KAAM,SAAUF,GACf,MAAOrK,GAAOqL,OAAQ/H,KAAM,SAAU+G,GACrC,MAAOA,KAAU9K,EAChBS,EAAOuK,KAAMjH,MACbA,KAAKgV,QAAQ2Z,QAAU3uB,KAAK,IAAMA,KAAK,GAAGQ,eAAiBlE,GAAWsyB,eAAgB7nB,KACrF,KAAMA,EAAOhF,UAAU7B,SAG3ByuB,OAAQ,WACP,MAAO3uB,MAAK6uB,SAAU9sB,UAAW,SAAUhC,GAC1C,GAAuB,IAAlBC,KAAKO,UAAoC,KAAlBP,KAAKO,UAAqC,IAAlBP,KAAKO,SAAiB,CACzE,GAAI0C,GAAS6rB,GAAoB9uB,KAAMD,EACvCkD,GAAO2M,YAAa7P,OAKvBgvB,QAAS,WACR,MAAO/uB,MAAK6uB,SAAU9sB,UAAW,SAAUhC,GAC1C,GAAuB,IAAlBC,KAAKO,UAAoC,KAAlBP,KAAKO,UAAqC,IAAlBP,KAAKO,SAAiB,CACzE,GAAI0C,GAAS6rB,GAAoB9uB,KAAMD,EACvCkD,GAAO+rB,aAAcjvB,EAAMkD,EAAO8M,gBAKrCkf,OAAQ,WACP,MAAOjvB,MAAK6uB,SAAU9sB,UAAW,SAAUhC,GACrCC,KAAKc,YACTd,KAAKc,WAAWkuB,aAAcjvB,EAAMC,SAKvCkvB,MAAO,WACN,MAAOlvB,MAAK6uB,SAAU9sB,UAAW,SAAUhC,GACrCC,KAAKc,YACTd,KAAKc,WAAWkuB,aAAcjvB,EAAMC,KAAKiP,gBAM5CxJ,OAAQ,SAAU3H,EAAUqxB,GAC3B,GAAIpvB,GACHuB,EAAQxD,EAAWpB,EAAOwT,OAAQpS,EAAUkC,MAASA,KACrDmC,EAAI,CAEL,MAA6B,OAApBpC,EAAOuB,EAAMa,IAAaA,IAE5BgtB,GAA8B,IAAlBpvB,EAAKQ,UACtB7D,EAAOyjB,UAAWiP,GAAQrvB,IAGtBA,EAAKe,aACJquB,GAAYzyB,EAAOmN,SAAU9J,EAAKS,cAAeT,IACrDsvB,GAAeD,GAAQrvB,EAAM,WAE9BA,EAAKe,WAAW0N,YAAazO,GAI/B,OAAOC,OAGRgV,MAAO,WACN,GAAIjV,GACHoC,EAAI,CAEL,MAA4B,OAAnBpC,EAAOC,KAAKmC,IAAaA,IAAM,CAEhB,IAAlBpC,EAAKQ,UACT7D,EAAOyjB,UAAWiP,GAAQrvB,GAAM,GAIjC,OAAQA,EAAKgQ,WACZhQ,EAAKyO,YAAazO,EAAKgQ,WAKnBhQ,GAAKgD,SAAWrG,EAAOmK,SAAU9G,EAAM,YAC3CA,EAAKgD,QAAQ7C,OAAS,GAIxB,MAAOF,OAGRgD,MAAO,SAAUssB,EAAeC,GAI/B,MAHAD,GAAiC,MAAjBA,GAAwB,EAAQA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDvvB,KAAKsC,IAAK,WAChB,MAAO5F,GAAOsG,MAAOhD,KAAMsvB,EAAeC,MAI5CC,KAAM,SAAUzoB,GACf,MAAOrK,GAAOqL,OAAQ/H,KAAM,SAAU+G,GACrC,GAAIhH,GAAOC,KAAK,OACfmC,EAAI,EACJqF,EAAIxH,KAAKE,MAEV,IAAK6G,IAAU9K,EACd,MAAyB,KAAlB8D,EAAKQ,SACXR,EAAK+P,UAAUvM,QAASwpB,GAAe,IACvC9wB,CAIF,MAAsB,gBAAV8K,IAAuBumB,GAAa7sB,KAAMsG,KACnDrK,EAAOmI,QAAQkY,eAAkBiQ,GAAavsB,KAAMsG,KACpDrK,EAAOmI,QAAQgY,mBAAsBoQ,GAAmBxsB,KAAMsG,IAC/D6mB,IAAWT,GAAShtB,KAAM4G,KAAY,GAAI,KAAM,GAAGD,gBAAkB,CAEtEC,EAAQA,EAAMxD,QAAS2pB,GAAW,YAElC,KACC,KAAW1lB,EAAJrF,EAAOA,IAEbpC,EAAOC,KAAKmC,OACW,IAAlBpC,EAAKQ,WACT7D,EAAOyjB,UAAWiP,GAAQrvB,GAAM,IAChCA,EAAK+P,UAAY/I,EAInBhH,GAAO,EAGN,MAAM6E,KAGJ7E,GACJC,KAAKgV,QAAQ2Z,OAAQ5nB,IAEpB,KAAMA,EAAOhF,UAAU7B,SAG3BuvB,YAAa,WACZ,GAEC9tB,GAAOjF,EAAO4F,IAAKtC,KAAM,SAAUD,GAClC,OAASA,EAAKkP,YAAalP,EAAKe,cAEjCqB,EAAI,CAmBL,OAhBAnC,MAAK6uB,SAAU9sB,UAAW,SAAUhC,GACnC,GAAIkhB,GAAOtf,EAAMQ,KAChBsN,EAAS9N,EAAMQ,IAEXsN,KAECwR,GAAQA,EAAKngB,aAAe2O,IAChCwR,EAAOjhB,KAAKiP,aAEbvS,EAAQsD,MAAOyF,SACfgK,EAAOuf,aAAcjvB,EAAMkhB,MAG1B,GAGI9e,EAAInC,KAAOA,KAAKyF,UAGxBlG,OAAQ,SAAUzB,GACjB,MAAOkC,MAAKyF,OAAQ3H,GAAU,IAG/B+wB,SAAU,SAAUltB,EAAMD,EAAUguB,GAGnC/tB,EAAO3E,EAAY8E,SAAWH,EAE9B,IAAIK,GAAOuN,EAAMogB,EAChBrqB,EAASkK,EAAK+M,EACdpa,EAAI,EACJqF,EAAIxH,KAAKE,OACTijB,EAAMnjB,KACN4vB,EAAWpoB,EAAI,EACfT,EAAQpF,EAAK,GACbhB,EAAajE,EAAOiE,WAAYoG,EAGjC,IAAKpG,KAAsB,GAAL6G,GAA2B,gBAAVT,IAAsBrK,EAAOmI,QAAQwZ,aAAemP,GAAS/sB,KAAMsG,GACzG,MAAO/G,MAAKyB,KAAK,SAAU8Y,GAC1B,GAAIH,GAAO+I,EAAIlhB,GAAIsY,EACd5Z,KACJgB,EAAK,GAAKoF,EAAM7F,KAAMlB,KAAMua,EAAOH,EAAKoV,SAEzCpV,EAAKyU,SAAUltB,EAAMD,EAAUguB,IAIjC,IAAKloB,IACJ+U,EAAW7f,EAAO8I,cAAe7D,EAAM3B,KAAM,GAAIQ,eAAe,GAAQkvB,GAAqB1vB,MAC7FgC,EAAQua,EAASxM,WAEmB,IAA/BwM,EAAS7W,WAAWxF,SACxBqc,EAAWva,GAGPA,GAAQ,CAMZ,IALAsD,EAAU5I,EAAO4F,IAAK8sB,GAAQ7S,EAAU,UAAYsT,IACpDF,EAAarqB,EAAQpF,OAITsH,EAAJrF,EAAOA,IACdoN,EAAOgN,EAEFpa,IAAMytB,IACVrgB,EAAO7S,EAAOsG,MAAOuM,GAAM,GAAM,GAG5BogB,GACJjzB,EAAO2D,MAAOiF,EAAS8pB,GAAQ7f,EAAM,YAIvC7N,EAASR,KAAMlB,KAAKmC,GAAIoN,EAAMpN,EAG/B,IAAKwtB,EAOJ,IANAngB,EAAMlK,EAASA,EAAQpF,OAAS,GAAIM,cAGpC9D,EAAO4F,IAAKgD,EAASwqB,IAGf3tB,EAAI,EAAOwtB,EAAJxtB,EAAgBA,IAC5BoN,EAAOjK,EAASnD,GACXsrB,GAAYhtB,KAAM8O,EAAKlQ,MAAQ,MAClC3C,EAAO+jB,MAAOlR,EAAM,eAAkB7S,EAAOmN,SAAU2F,EAAKD,KAExDA,EAAK5M,IAETjG,EAAOqzB,SAAUxgB,EAAK5M,KAEtBjG,EAAO+J,YAAc8I,EAAKtI,MAAQsI,EAAKuC,aAAevC,EAAKO,WAAa,IAAKvM,QAASoqB,GAAc,KAOxGpR,GAAWva,EAAQ,KAIrB,MAAOhC,QAMT,SAAS8uB,IAAoB/uB,EAAMiwB,GAClC,MAAOtzB,GAAOmK,SAAU9G,EAAM,UAC7BrD,EAAOmK,SAA+B,IAArBmpB,EAAQzvB,SAAiByvB,EAAUA,EAAQjgB,WAAY,MAExEhQ,EAAKwG,qBAAqB,SAAS,IAClCxG,EAAK6P,YAAa7P,EAAKS,cAAc+E,cAAc,UACpDxF,EAIF,QAAS8vB,IAAe9vB,GAEvB,MADAA,GAAKV,MAA6C,OAArC3C,EAAO0D,KAAKQ,KAAMb,EAAM,SAAqB,IAAMA,EAAKV,KAC9DU,EAER,QAAS+vB,IAAe/vB,GACvB,GAAID,GAAQ4tB,GAAkBvtB,KAAMJ,EAAKV,KAMzC,OALKS,GACJC,EAAKV,KAAOS,EAAM,GAElBC,EAAKgO,gBAAgB,QAEfhO,EAIR,QAASsvB,IAAe/tB,EAAO2uB,GAC9B,GAAIlwB,GACHoC,EAAI,CACL,MAA6B,OAApBpC,EAAOuB,EAAMa,IAAaA,IAClCzF,EAAO+jB,MAAO1gB,EAAM,cAAekwB,GAAevzB,EAAO+jB,MAAOwP,EAAY9tB,GAAI,eAIlF,QAAS+tB,IAAgBvtB,EAAKwtB,GAE7B,GAAuB,IAAlBA,EAAK5vB,UAAmB7D,EAAO6jB,QAAS5d,GAA7C,CAIA,GAAItD,GAAM8C,EAAGqF,EACZ4oB,EAAU1zB,EAAO+jB,MAAO9d,GACxB0tB,EAAU3zB,EAAO+jB,MAAO0P,EAAMC,GAC9BnL,EAASmL,EAAQnL,MAElB,IAAKA,EAAS,OACNoL,GAAQ1K,OACf0K,EAAQpL,SAER,KAAM5lB,IAAQ4lB,GACb,IAAM9iB,EAAI,EAAGqF,EAAIyd,EAAQ5lB,GAAOa,OAAYsH,EAAJrF,EAAOA,IAC9CzF,EAAOyC,MAAMmb,IAAK6V,EAAM9wB,EAAM4lB,EAAQ5lB,GAAQ8C,IAM5CkuB,EAAQlrB,OACZkrB,EAAQlrB,KAAOzI,EAAOgG,UAAY2tB,EAAQlrB,QAI5C,QAASmrB,IAAoB3tB,EAAKwtB,GACjC,GAAItpB,GAAUjC,EAAGO,CAGjB,IAAuB,IAAlBgrB,EAAK5vB,SAAV,CAOA,GAHAsG,EAAWspB,EAAKtpB,SAASC,eAGnBpK,EAAOmI,QAAQgZ,cAAgBsS,EAAMzzB,EAAO0G,SAAY,CAC7D+B,EAAOzI,EAAO+jB,MAAO0P,EAErB,KAAMvrB,IAAKO,GAAK8f,OACfvoB,EAAO4pB,YAAa6J,EAAMvrB,EAAGO,EAAKwgB,OAInCwK,GAAKpiB,gBAAiBrR,EAAO0G,SAIZ,WAAbyD,GAAyBspB,EAAKlpB,OAAStE,EAAIsE,MAC/C4oB,GAAeM,GAAOlpB,KAAOtE,EAAIsE,KACjC6oB,GAAeK,IAIS,WAAbtpB,GACNspB,EAAKrvB,aACTqvB,EAAK3S,UAAY7a,EAAI6a,WAOjB9gB,EAAOmI,QAAQyY,YAAgB3a,EAAImN,YAAcpT,EAAOmB,KAAKsyB,EAAKrgB,aACtEqgB,EAAKrgB,UAAYnN,EAAImN,YAGE,UAAbjJ,GAAwB0mB,GAA4B9sB,KAAMkC,EAAItD,OAKzE8wB,EAAKI,eAAiBJ,EAAKtb,QAAUlS,EAAIkS,QAIpCsb,EAAKppB,QAAUpE,EAAIoE,QACvBopB,EAAKppB,MAAQpE,EAAIoE,QAKM,WAAbF,EACXspB,EAAKK,gBAAkBL,EAAKrb,SAAWnS,EAAI6tB,iBAInB,UAAb3pB,GAAqC,aAAbA,KACnCspB,EAAKlX,aAAetW,EAAIsW,eAI1Bvc,EAAO+E,MACNgvB,SAAU,SACVC,UAAW,UACX1B,aAAc,SACd2B,YAAa,QACbC,WAAY,eACV,SAAU9tB,EAAMulB,GAClB3rB,EAAOsB,GAAI8E,GAAS,SAAUhF,GAC7B,GAAIwD,GACHa,EAAI,EACJZ,KACAsvB,EAASn0B,EAAQoB,GACjBoE,EAAO2uB,EAAO3wB,OAAS,CAExB,MAAagC,GAALC,EAAWA,IAClBb,EAAQa,IAAMD,EAAOlC,KAAOA,KAAKgD,OAAM,GACvCtG,EAAQm0B,EAAO1uB,IAAMkmB,GAAY/mB,GAGjCpE,EAAU4E,MAAOP,EAAKD,EAAMH,MAG7B,OAAOnB,MAAKqB,UAAWE,KAIzB,SAAS6tB,IAAQrxB,EAASsS,GACzB,GAAI/O,GAAOvB,EACVoC,EAAI,EACJ2uB,QAAe/yB,GAAQwI,uBAAyBnK,EAAoB2B,EAAQwI,qBAAsB8J,GAAO,WACjGtS,GAAQ8P,mBAAqBzR,EAAoB2B,EAAQ8P,iBAAkBwC,GAAO,KACzFpU,CAEF,KAAM60B,EACL,IAAMA,KAAYxvB,EAAQvD,EAAQ2H,YAAc3H,EAA8B,OAApBgC,EAAOuB,EAAMa,IAAaA,KAC7EkO,GAAO3T,EAAOmK,SAAU9G,EAAMsQ,GACnCygB,EAAM3zB,KAAM4C,GAEZrD,EAAO2D,MAAOywB,EAAO1B,GAAQrvB,EAAMsQ,GAKtC,OAAOA,KAAQpU,GAAaoU,GAAO3T,EAAOmK,SAAU9I,EAASsS,GAC5D3T,EAAO2D,OAAStC,GAAW+yB,GAC3BA,EAIF,QAASC,IAAmBhxB,GACtBwtB,GAA4B9sB,KAAMV,EAAKV,QAC3CU,EAAKwwB,eAAiBxwB,EAAK8U,SAI7BnY,EAAOgG,QACNM,MAAO,SAAUjD,EAAMuvB,EAAeC,GACrC,GAAIyB,GAAczhB,EAAMvM,EAAOb,EAAG8uB,EACjCC,EAASx0B,EAAOmN,SAAU9J,EAAKS,cAAeT,EAW/C,IATKrD,EAAOmI,QAAQyY,YAAc5gB,EAAOyc,SAASpZ,KAAUitB,GAAavsB,KAAM,IAAMV,EAAK8G,SAAW,KACpG7D,EAAQjD,EAAKwd,WAAW,IAIxB8Q,GAAYve,UAAY/P,EAAKyd,UAC7B6Q,GAAY7f,YAAaxL,EAAQqrB,GAAYte,eAGvCrT,EAAOmI,QAAQgZ,cAAiBnhB,EAAOmI,QAAQmZ,gBACjC,IAAlBje,EAAKQ,UAAoC,KAAlBR,EAAKQ,UAAqB7D,EAAOyc,SAASpZ,IAOnE,IAJAixB,EAAe5B,GAAQpsB,GACvBiuB,EAAc7B,GAAQrvB,GAGhBoC,EAAI,EAA8B,OAA1BoN,EAAO0hB,EAAY9uB,MAAeA,EAE1C6uB,EAAa7uB,IACjBmuB,GAAoB/gB,EAAMyhB,EAAa7uB,GAM1C,IAAKmtB,EACJ,GAAKC,EAIJ,IAHA0B,EAAcA,GAAe7B,GAAQrvB,GACrCixB,EAAeA,GAAgB5B,GAAQpsB,GAEjCb,EAAI,EAA8B,OAA1BoN,EAAO0hB,EAAY9uB,IAAaA,IAC7C+tB,GAAgB3gB,EAAMyhB,EAAa7uB,QAGpC+tB,IAAgBnwB,EAAMiD,EAaxB,OARAguB,GAAe5B,GAAQpsB,EAAO,UACzBguB,EAAa9wB,OAAS,GAC1BmvB,GAAe2B,GAAeE,GAAU9B,GAAQrvB,EAAM,WAGvDixB,EAAeC,EAAc1hB,EAAO,KAG7BvM,GAGRwC,cAAe,SAAUlE,EAAOvD,EAASuH,EAAS6rB,GACjD,GAAI9uB,GAAGtC,EAAM8J,EACZ5D,EAAKoK,EAAKyM,EAAOsU,EACjB5pB,EAAIlG,EAAMpB,OAGVmxB,EAAOzE,GAAoB7uB,GAE3BuzB,KACAnvB,EAAI,CAEL,MAAYqF,EAAJrF,EAAOA,IAGd,GAFApC,EAAOuB,EAAOa,GAETpC,GAAiB,IAATA,EAGZ,GAA6B,WAAxBrD,EAAO2C,KAAMU,GACjBrD,EAAO2D,MAAOixB,EAAOvxB,EAAKQ,UAAaR,GAASA,OAG1C,IAAMstB,GAAM5sB,KAAMV,GAIlB,CACNkG,EAAMA,GAAOorB,EAAKzhB,YAAa7R,EAAQwH,cAAc,QAGrD8K,GAAQ8c,GAAShtB,KAAMJ,KAAW,GAAI,KAAM,GAAG+G,cAC/CsqB,EAAOxD,GAASvd,IAASud,GAAQzG,SAEjClhB,EAAI6J,UAAYshB,EAAK,GAAKrxB,EAAKwD,QAAS2pB,GAAW,aAAgBkE,EAAK,GAGxE/uB,EAAI+uB,EAAK,EACT,OAAQ/uB,IACP4D,EAAMA,EAAIuN,SASX,KALM9W,EAAOmI,QAAQgY,mBAAqBoQ,GAAmBxsB,KAAMV,IAClEuxB,EAAMn0B,KAAMY,EAAQ6wB,eAAgB3B,GAAmB9sB,KAAMJ,GAAO,MAI/DrD,EAAOmI,QAAQiY,MAAQ,CAG5B/c,EAAe,UAARsQ,GAAoB+c,GAAO3sB,KAAMV,GAI3B,YAAZqxB,EAAK,IAAqBhE,GAAO3sB,KAAMV,GAEtC,EADAkG,EAJDA,EAAI8J,WAOL1N,EAAItC,GAAQA,EAAK2F,WAAWxF,MAC5B,OAAQmC,IACF3F,EAAOmK,SAAWiW,EAAQ/c,EAAK2F,WAAWrD,GAAK,WAAcya,EAAMpX,WAAWxF,QAClFH,EAAKyO,YAAasO,GAKrBpgB,EAAO2D,MAAOixB,EAAOrrB,EAAIP,YAGzBO,EAAI6L,YAAc,EAGlB,OAAQ7L,EAAI8J,WACX9J,EAAIuI,YAAavI,EAAI8J,WAItB9J,GAAMorB,EAAK7d,cAtDX8d,GAAMn0B,KAAMY,EAAQ6wB,eAAgB7uB,GA4DlCkG,IACJorB,EAAK7iB,YAAavI,GAKbvJ,EAAOmI,QAAQuZ,eACpB1hB,EAAO+K,KAAM2nB,GAAQkC,EAAO,SAAWP,IAGxC5uB,EAAI,CACJ,OAASpC,EAAOuxB,EAAOnvB,KAItB,KAAKgvB,GAAmD,KAAtCz0B,EAAO2K,QAAStH,EAAMoxB,MAIxCtnB,EAAWnN,EAAOmN,SAAU9J,EAAKS,cAAeT,GAGhDkG,EAAMmpB,GAAQiC,EAAKzhB,YAAa7P,GAAQ,UAGnC8J,GACJwlB,GAAeppB,GAIXX,GAAU,CACdjD,EAAI,CACJ,OAAStC,EAAOkG,EAAK5D,KACforB,GAAYhtB,KAAMV,EAAKV,MAAQ,KACnCiG,EAAQnI,KAAM4C,GAQlB,MAFAkG,GAAM,KAECorB,GAGRlR,UAAW,SAAU7e,EAAsBse,GAC1C,GAAI7f,GAAMV,EAAM0B,EAAIoE,EACnBhD,EAAI,EACJ2d,EAAcpjB,EAAO0G,QACrB8K,EAAQxR,EAAOwR,MACf0P,EAAgBlhB,EAAOmI,QAAQ+Y,cAC/BwH,EAAU1oB,EAAOyC,MAAMimB,OAExB,MAA6B,OAApBrlB,EAAOuB,EAAMa,IAAaA,IAElC,IAAKyd,GAAcljB,EAAOkjB,WAAY7f,MAErCgB,EAAKhB,EAAM+f,GACX3a,EAAOpE,GAAMmN,EAAOnN,IAER,CACX,GAAKoE,EAAK8f,OACT,IAAM5lB,IAAQ8F,GAAK8f,OACbG,EAAS/lB,GACb3C,EAAOyC,MAAMsG,OAAQ1F,EAAMV,GAI3B3C,EAAO4pB,YAAavmB,EAAMV,EAAM8F,EAAKwgB,OAMnCzX;EAAOnN,WAEJmN,GAAOnN,GAKT6c,QACG7d,GAAM+f,SAEK/f,GAAKgO,kBAAoB3R,EAC3C2D,EAAKgO,gBAAiB+R,GAGtB/f,EAAM+f,GAAgB,KAGvBhjB,EAAgBK,KAAM4D,MAO3BgvB,SAAU,SAAUwB,GACnB,MAAO70B,GAAO80B,MACbD,IAAKA,EACLlyB,KAAM,MACNoyB,SAAU,SACVprB,OAAO,EACP0e,QAAQ,EACR2M,UAAU,OAIbh1B,EAAOsB,GAAG0E,QACTivB,QAAS,SAAUnC,GAClB,GAAK9yB,EAAOiE,WAAY6uB,GACvB,MAAOxvB,MAAKyB,KAAK,SAASU,GACzBzF,EAAOsD,MAAM2xB,QAASnC,EAAKtuB,KAAKlB,KAAMmC,KAIxC,IAAKnC,KAAK,GAAK,CAEd,GAAIoxB,GAAO10B,EAAQ8yB,EAAMxvB,KAAK,GAAGQ,eAAgByB,GAAG,GAAGe,OAAM,EAExDhD,MAAK,GAAGc,YACZswB,EAAKpC,aAAchvB,KAAK,IAGzBoxB,EAAK9uB,IAAI,WACR,GAAIvC,GAAOC,IAEX,OAAQD,EAAKgQ,YAA2C,IAA7BhQ,EAAKgQ,WAAWxP,SAC1CR,EAAOA,EAAKgQ,UAGb,OAAOhQ,KACL4uB,OAAQ3uB,MAGZ,MAAOA,OAGR4xB,UAAW,SAAUpC,GACpB,MAAK9yB,GAAOiE,WAAY6uB,GAChBxvB,KAAKyB,KAAK,SAASU,GACzBzF,EAAOsD,MAAM4xB,UAAWpC,EAAKtuB,KAAKlB,KAAMmC,MAInCnC,KAAKyB,KAAK,WAChB,GAAI2Y,GAAO1d,EAAQsD,MAClBqrB,EAAWjR,EAAKiR,UAEZA,GAASnrB,OACbmrB,EAASsG,QAASnC,GAGlBpV,EAAKuU,OAAQa,MAKhB4B,KAAM,SAAU5B,GACf,GAAI7uB,GAAajE,EAAOiE,WAAY6uB,EAEpC,OAAOxvB,MAAKyB,KAAK,SAASU,GACzBzF,EAAQsD,MAAO2xB,QAAShxB,EAAa6uB,EAAKtuB,KAAKlB,KAAMmC,GAAKqtB,MAI5DqC,OAAQ,WACP,MAAO7xB,MAAKyP,SAAShO,KAAK,WACnB/E,EAAOmK,SAAU7G,KAAM,SAC5BtD,EAAQsD,MAAOyvB,YAAazvB,KAAK0F,cAEhCnD,QAGL,IAAIuvB,IAAQC,GAAWC,GACtBC,GAAS,kBACTC,GAAW,wBACXC,GAAY,4BAGZC,GAAe,4BACfC,GAAU,UACVC,GAAgBnnB,OAAQ,KAAOjN,EAAY,SAAU,KACrDq0B,GAAgBpnB,OAAQ,KAAOjN,EAAY,kBAAmB,KAC9Ds0B,GAAcrnB,OAAQ,YAAcjN,EAAY,IAAK,KACrDu0B,IAAgBC,KAAM,SAEtBC,IAAYC,SAAU,WAAYC,WAAY,SAAU7T,QAAS,SACjE8T,IACCC,cAAe,EACfC,WAAY,KAGbC,IAAc,MAAO,QAAS,SAAU,QACxCC,IAAgB,SAAU,IAAK,MAAO,KAGvC,SAASC,IAAgB1qB,EAAO3F,GAG/B,GAAKA,IAAQ2F,GACZ,MAAO3F,EAIR,IAAIswB,GAAUtwB,EAAK7C,OAAO,GAAGhB,cAAgB6D,EAAKzF,MAAM,GACvDg2B,EAAWvwB,EACXX,EAAI+wB,GAAYhzB,MAEjB,OAAQiC,IAEP,GADAW,EAAOowB,GAAa/wB,GAAMixB,EACrBtwB,IAAQ2F,GACZ,MAAO3F,EAIT,OAAOuwB,GAGR,QAASC,IAAUvzB,EAAMwzB,GAIxB,MADAxzB,GAAOwzB,GAAMxzB,EAC4B,SAAlCrD,EAAO82B,IAAKzzB,EAAM,aAA2BrD,EAAOmN,SAAU9J,EAAKS,cAAeT,GAG1F,QAAS0zB,IAAUliB,EAAUmiB,GAC5B,GAAI1U,GAASjf,EAAM4zB,EAClBzX,KACA3B,EAAQ,EACRra,EAASqR,EAASrR,MAEnB,MAAgBA,EAARqa,EAAgBA,IACvBxa,EAAOwR,EAAUgJ,GACXxa,EAAK0I,QAIXyT,EAAQ3B,GAAU7d,EAAO+jB,MAAO1gB,EAAM,cACtCif,EAAUjf,EAAK0I,MAAMuW,QAChB0U,GAGExX,EAAQ3B,IAAuB,SAAZyE,IACxBjf,EAAK0I,MAAMuW,QAAU,IAMM,KAAvBjf,EAAK0I,MAAMuW,SAAkBsU,GAAUvzB,KAC3Cmc,EAAQ3B,GAAU7d,EAAO+jB,MAAO1gB,EAAM,aAAc6zB,GAAmB7zB,EAAK8G,aAIvEqV,EAAQ3B,KACboZ,EAASL,GAAUvzB,IAEdif,GAAuB,SAAZA,IAAuB2U,IACtCj3B,EAAO+jB,MAAO1gB,EAAM,aAAc4zB,EAAS3U,EAAUtiB,EAAO82B,IAAKzzB,EAAM,aAQ3E,KAAMwa,EAAQ,EAAWra,EAARqa,EAAgBA,IAChCxa,EAAOwR,EAAUgJ,GACXxa,EAAK0I,QAGLirB,GAA+B,SAAvB3zB,EAAK0I,MAAMuW,SAA6C,KAAvBjf,EAAK0I,MAAMuW,UACzDjf,EAAK0I,MAAMuW,QAAU0U,EAAOxX,EAAQ3B,IAAW,GAAK,QAItD,OAAOhJ,GAGR7U,EAAOsB,GAAG0E,QACT8wB,IAAK,SAAU1wB,EAAMiE,GACpB,MAAOrK,GAAOqL,OAAQ/H,KAAM,SAAUD,EAAM+C,EAAMiE,GACjD,GAAI3E,GAAKyxB,EACRvxB,KACAH,EAAI,CAEL,IAAKzF,EAAOyG,QAASL,GAAS,CAI7B,IAHA+wB,EAAS9B,GAAWhyB,GACpBqC,EAAMU,EAAK5C,OAECkC,EAAJD,EAASA,IAChBG,EAAKQ,EAAMX,IAAQzF,EAAO82B,IAAKzzB,EAAM+C,EAAMX,IAAK,EAAO0xB,EAGxD,OAAOvxB,GAGR,MAAOyE,KAAU9K,EAChBS,EAAO+L,MAAO1I,EAAM+C,EAAMiE,GAC1BrK,EAAO82B,IAAKzzB,EAAM+C,IACjBA,EAAMiE,EAAOhF,UAAU7B,OAAS,IAEpCwzB,KAAM,WACL,MAAOD,IAAUzzB,MAAM,IAExB8zB,KAAM,WACL,MAAOL,IAAUzzB,OAElB+zB,OAAQ,SAAUlZ,GACjB,MAAsB,iBAAVA,GACJA,EAAQ7a,KAAK0zB,OAAS1zB,KAAK8zB,OAG5B9zB,KAAKyB,KAAK,WACX6xB,GAAUtzB,MACdtD,EAAQsD,MAAO0zB,OAEfh3B,EAAQsD,MAAO8zB,YAMnBp3B,EAAOgG,QAGNsxB,UACC/W,SACC9b,IAAK,SAAUpB,EAAMk0B,GACpB,GAAKA,EAAW,CAEf,GAAI1yB,GAAMywB,GAAQjyB,EAAM,UACxB,OAAe,KAARwB,EAAa,IAAMA,MAO9B2yB,WACCC,aAAe,EACfC,aAAe,EACfpB,YAAc,EACdqB,YAAc,EACdpX,SAAW,EACXqX,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVvV,MAAQ,GAKTwV,UAECC,QAASj4B,EAAOmI,QAAQqY,SAAW,WAAa,cAIjDzU,MAAO,SAAU1I,EAAM+C,EAAMiE,EAAO6tB,GAEnC,GAAM70B,GAA0B,IAAlBA,EAAKQ,UAAoC,IAAlBR,EAAKQ,UAAmBR,EAAK0I,MAAlE,CAKA,GAAIlH,GAAKlC,EAAM0hB,EACdsS,EAAW32B,EAAOiK,UAAW7D,GAC7B2F,EAAQ1I,EAAK0I,KASd,IAPA3F,EAAOpG,EAAOg4B,SAAUrB,KAAgB32B,EAAOg4B,SAAUrB,GAAaF,GAAgB1qB,EAAO4qB,IAI7FtS,EAAQrkB,EAAOs3B,SAAUlxB,IAAUpG,EAAOs3B,SAAUX,GAG/CtsB,IAAU9K,EAsCd,MAAK8kB,IAAS,OAASA,KAAUxf,EAAMwf,EAAM5f,IAAKpB,GAAM,EAAO60B,MAAa34B,EACpEsF,EAIDkH,EAAO3F,EAhCd,IAVAzD,QAAc0H,GAGA,WAAT1H,IAAsBkC,EAAMixB,GAAQryB,KAAM4G,MAC9CA,GAAUxF,EAAI,GAAK,GAAMA,EAAI,GAAKiD,WAAY9H,EAAO82B,IAAKzzB,EAAM+C,IAEhEzD,EAAO,YAIM,MAAT0H,GAA0B,WAAT1H,GAAqBkF,MAAOwC,KAKpC,WAAT1H,GAAsB3C,EAAOw3B,UAAWb,KAC5CtsB,GAAS,MAKJrK,EAAOmI,QAAQ6Z,iBAA6B,KAAV3X,GAA+C,IAA/BjE,EAAKvF,QAAQ,gBACpEkL,EAAO3F,GAAS,WAIXie,GAAW,OAASA,KAAWha,EAAQga,EAAMoC,IAAKpjB,EAAMgH,EAAO6tB,MAAa34B,IAIjF,IACCwM,EAAO3F,GAASiE,EACf,MAAMnC,OAcX4uB,IAAK,SAAUzzB,EAAM+C,EAAM8xB,EAAOf,GACjC,GAAIzyB,GAAKoQ,EAAKuP,EACbsS,EAAW32B,EAAOiK,UAAW7D,EAyB9B,OAtBAA,GAAOpG,EAAOg4B,SAAUrB,KAAgB32B,EAAOg4B,SAAUrB,GAAaF,GAAgBpzB,EAAK0I,MAAO4qB,IAIlGtS,EAAQrkB,EAAOs3B,SAAUlxB,IAAUpG,EAAOs3B,SAAUX,GAG/CtS,GAAS,OAASA,KACtBvP,EAAMuP,EAAM5f,IAAKpB,GAAM,EAAM60B,IAIzBpjB,IAAQvV,IACZuV,EAAMwgB,GAAQjyB,EAAM+C,EAAM+wB,IAId,WAARriB,GAAoB1O,IAAQgwB,MAChCthB,EAAMshB,GAAoBhwB,IAIZ,KAAV8xB,GAAgBA,GACpBxzB,EAAMoD,WAAYgN,GACXojB,KAAU,GAAQl4B,EAAO4H,UAAWlD,GAAQA,GAAO,EAAIoQ,GAExDA,KAMJxV,EAAOqjB,kBACX0S,GAAY,SAAUhyB,GACrB,MAAO/D,GAAOqjB,iBAAkBtf,EAAM,OAGvCiyB,GAAS,SAAUjyB,EAAM+C,EAAM+xB,GAC9B,GAAIvV,GAAOwV,EAAUC,EACpBd,EAAWY,GAAa9C,GAAWhyB,GAGnCwB,EAAM0yB,EAAWA,EAASe,iBAAkBlyB,IAAUmxB,EAAUnxB,GAAS7G,EACzEwM,EAAQ1I,EAAK0I,KA8Bd,OA5BKwrB,KAES,KAAR1yB,GAAe7E,EAAOmN,SAAU9J,EAAKS,cAAeT,KACxDwB,EAAM7E,EAAO+L,MAAO1I,EAAM+C,IAOtByvB,GAAU9xB,KAAMc,IAAS8wB,GAAQ5xB,KAAMqC,KAG3Cwc,EAAQ7W,EAAM6W,MACdwV,EAAWrsB,EAAMqsB,SACjBC,EAAWtsB,EAAMssB,SAGjBtsB,EAAMqsB,SAAWrsB,EAAMssB,SAAWtsB,EAAM6W,MAAQ/d,EAChDA,EAAM0yB,EAAS3U,MAGf7W,EAAM6W,MAAQA,EACd7W,EAAMqsB,SAAWA,EACjBrsB,EAAMssB,SAAWA,IAIZxzB,IAEGjF,EAASE,gBAAgBy4B,eACpClD,GAAY,SAAUhyB,GACrB,MAAOA,GAAKk1B,cAGbjD,GAAS,SAAUjyB,EAAM+C,EAAM+xB,GAC9B,GAAIK,GAAMC,EAAIC,EACbnB,EAAWY,GAAa9C,GAAWhyB,GACnCwB,EAAM0yB,EAAWA,EAAUnxB,GAAS7G,EACpCwM,EAAQ1I,EAAK0I,KAoCd,OAhCY,OAAPlH,GAAekH,GAASA,EAAO3F,KACnCvB,EAAMkH,EAAO3F,IAUTyvB,GAAU9xB,KAAMc,KAAU4wB,GAAU1xB,KAAMqC,KAG9CoyB,EAAOzsB,EAAMysB,KACbC,EAAKp1B,EAAKs1B,aACVD,EAASD,GAAMA,EAAGD,KAGbE,IACJD,EAAGD,KAAOn1B,EAAKk1B,aAAaC,MAE7BzsB,EAAMysB,KAAgB,aAATpyB,EAAsB,MAAQvB,EAC3CA,EAAMkH,EAAM6sB,UAAY,KAGxB7sB,EAAMysB,KAAOA,EACRE,IACJD,EAAGD,KAAOE,IAIG,KAAR7zB,EAAa,OAASA,GAI/B,SAASg0B,IAAmBx1B,EAAMgH,EAAOyuB,GACxC,GAAI5rB,GAAU0oB,GAAUnyB,KAAM4G,EAC9B,OAAO6C,GAENvG,KAAKiE,IAAK,EAAGsC,EAAS,IAAQ4rB,GAAY,KAAU5rB,EAAS,IAAO,MACpE7C,EAGF,QAAS0uB,IAAsB11B,EAAM+C,EAAM8xB,EAAOc,EAAa7B,GAC9D,GAAI1xB,GAAIyyB,KAAYc,EAAc,SAAW,WAE5C,EAES,UAAT5yB,EAAmB,EAAI,EAEvB0O,EAAM,CAEP,MAAY,EAAJrP,EAAOA,GAAK,EAEJ,WAAVyyB,IACJpjB,GAAO9U,EAAO82B,IAAKzzB,EAAM60B,EAAQ3B,GAAW9wB,IAAK,EAAM0xB,IAGnD6B,GAEW,YAAVd,IACJpjB,GAAO9U,EAAO82B,IAAKzzB,EAAM,UAAYkzB,GAAW9wB,IAAK,EAAM0xB,IAI7C,WAAVe,IACJpjB,GAAO9U,EAAO82B,IAAKzzB,EAAM,SAAWkzB,GAAW9wB,GAAM,SAAS,EAAM0xB,MAIrEriB,GAAO9U,EAAO82B,IAAKzzB,EAAM,UAAYkzB,GAAW9wB,IAAK,EAAM0xB,GAG5C,YAAVe,IACJpjB,GAAO9U,EAAO82B,IAAKzzB,EAAM,SAAWkzB,GAAW9wB,GAAM,SAAS,EAAM0xB,IAKvE,OAAOriB,GAGR,QAASmkB,IAAkB51B,EAAM+C,EAAM8xB,GAGtC,GAAIgB,IAAmB,EACtBpkB,EAAe,UAAT1O,EAAmB/C,EAAKqf,YAAcrf,EAAKgf,aACjD8U,EAAS9B,GAAWhyB,GACpB21B,EAAch5B,EAAOmI,QAAQsa,WAAgE,eAAnDziB,EAAO82B,IAAKzzB,EAAM,aAAa,EAAO8zB,EAKjF,IAAY,GAAPriB,GAAmB,MAAPA,EAAc,CAQ9B,GANAA,EAAMwgB,GAAQjyB,EAAM+C,EAAM+wB,IACf,EAANriB,GAAkB,MAAPA,KACfA,EAAMzR,EAAK0I,MAAO3F,IAIdyvB,GAAU9xB,KAAK+Q,GACnB,MAAOA,EAKRokB,GAAmBF,IAAiBh5B,EAAOmI,QAAQkZ,mBAAqBvM,IAAQzR,EAAK0I,MAAO3F,IAG5F0O,EAAMhN,WAAYgN,IAAS,EAI5B,MAASA,GACRikB,GACC11B,EACA+C,EACA8xB,IAAWc,EAAc,SAAW,WACpCE,EACA/B,GAEE,KAIL,QAASD,IAAoB/sB,GAC5B,GAAI2I,GAAMlT,EACT0iB,EAAUyT,GAAa5rB,EA0BxB,OAxBMmY,KACLA,EAAU6W,GAAehvB,EAAU2I,GAGlB,SAAZwP,GAAuBA,IAE3B8S,IAAWA,IACVp1B,EAAO,kDACN82B,IAAK,UAAW,6BAChB/C,SAAUjhB,EAAIhT,iBAGhBgT,GAAQsiB,GAAO,GAAGvF,eAAiBuF,GAAO,GAAGxF,iBAAkBhwB,SAC/DkT,EAAIsmB,MAAM,+BACVtmB,EAAIumB,QAEJ/W,EAAU6W,GAAehvB,EAAU2I,GACnCsiB,GAAOvyB,UAIRkzB,GAAa5rB,GAAamY,GAGpBA,EAIR,QAAS6W,IAAe/yB,EAAM0M,GAC7B,GAAIzP,GAAOrD,EAAQ8S,EAAIjK,cAAezC,IAAS2tB,SAAUjhB,EAAI1L,MAC5Dkb,EAAUtiB,EAAO82B,IAAKzzB,EAAK,GAAI,UAEhC,OADAA,GAAK0F,SACEuZ,EAGRtiB,EAAO+E,MAAO,SAAU,SAAW,SAAUU,EAAGW,GAC/CpG,EAAOs3B,SAAUlxB,IAChB3B,IAAK,SAAUpB,EAAMk0B,EAAUW,GAC9B,MAAKX,GAGwB,IAArBl0B,EAAKqf,aAAqBgT,GAAa3xB,KAAM/D,EAAO82B,IAAKzzB,EAAM,YACrErD,EAAO6L,KAAMxI,EAAM4yB,GAAS,WAC3B,MAAOgD,IAAkB51B,EAAM+C,EAAM8xB,KAEtCe,GAAkB51B,EAAM+C,EAAM8xB,GAPhC,GAWDzR,IAAK,SAAUpjB,EAAMgH,EAAO6tB,GAC3B,GAAIf,GAASe,GAAS7C,GAAWhyB,EACjC,OAAOw1B,IAAmBx1B,EAAMgH,EAAO6tB,EACtCa,GACC11B,EACA+C,EACA8xB,EACAl4B,EAAOmI,QAAQsa,WAAgE,eAAnDziB,EAAO82B,IAAKzzB,EAAM,aAAa,EAAO8zB,GAClEA,GACG,OAMFn3B,EAAOmI,QAAQoY,UACpBvgB,EAAOs3B,SAAS/W,SACf9b,IAAK,SAAUpB,EAAMk0B,GAEpB,MAAO/B,IAASzxB,MAAOwzB,GAAYl0B,EAAKk1B,aAAel1B,EAAKk1B,aAAa/kB,OAASnQ,EAAK0I,MAAMyH,SAAW,IACrG,IAAO1L,WAAY2G,OAAO6qB,IAAS,GACrC/B,EAAW,IAAM,IAGnB9Q,IAAK,SAAUpjB,EAAMgH,GACpB,GAAI0B,GAAQ1I,EAAK0I,MAChBwsB,EAAel1B,EAAKk1B,aACpBhY,EAAUvgB,EAAO4H,UAAWyC,GAAU,iBAA2B,IAARA,EAAc,IAAM,GAC7EmJ,EAAS+kB,GAAgBA,EAAa/kB,QAAUzH,EAAMyH,QAAU,EAIjEzH,GAAMyW,KAAO,GAINnY,GAAS,GAAe,KAAVA,IAC6B,KAAhDrK,EAAOmB,KAAMqS,EAAO3M,QAAS0uB,GAAQ,MACrCxpB,EAAMsF,kBAKPtF,EAAMsF,gBAAiB,UAGR,KAAVhH,GAAgBkuB,IAAiBA,EAAa/kB,UAMpDzH,EAAMyH,OAAS+hB,GAAOxxB,KAAMyP,GAC3BA,EAAO3M,QAAS0uB,GAAQhV,GACxB/M,EAAS,IAAM+M,MAOnBvgB,EAAO,WACAA,EAAOmI,QAAQiZ,sBACpBphB,EAAOs3B,SAASzU,aACfpe,IAAK,SAAUpB,EAAMk0B,GACpB,MAAKA,GAGGv3B,EAAO6L,KAAMxI,GAAQif,QAAW,gBACtCgT,IAAUjyB,EAAM,gBAJlB,MAaGrD,EAAOmI,QAAQ8Y,eAAiBjhB,EAAOsB,GAAG40B,UAC/Cl2B,EAAO+E,MAAQ,MAAO,QAAU,SAAUU,EAAGmgB,GAC5C5lB,EAAOs3B,SAAU1R,IAChBnhB,IAAK,SAAUpB,EAAMk0B,GACpB,MAAKA,IACJA,EAAWjC,GAAQjyB,EAAMuiB,GAElBiQ,GAAU9xB,KAAMwzB,GACtBv3B,EAAQqD,GAAO6yB,WAAYtQ,GAAS,KACpC2R,GALF,QAcAv3B,EAAO4U,MAAQ5U,EAAO4U,KAAKwE,UAC/BpZ,EAAO4U,KAAKwE,QAAQ6d,OAAS,SAAU5zB,GAGtC,MAA2B,IAApBA,EAAKqf,aAAyC,GAArBrf,EAAKgf,eAClCriB,EAAOmI,QAAQoa,uBAAmG,UAAxElf,EAAK0I,OAAS1I,EAAK0I,MAAMuW,SAAYtiB,EAAO82B,IAAKzzB,EAAM,aAGrGrD,EAAO4U,KAAKwE,QAAQmgB,QAAU,SAAUl2B,GACvC,OAAQrD,EAAO4U,KAAKwE,QAAQ6d,OAAQ5zB,KAKtCrD,EAAO+E,MACNy0B,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpB55B,EAAOs3B,SAAUqC,EAASC,IACzBC,OAAQ,SAAUxvB,GACjB,GAAI5E,GAAI,EACPq0B,KAGAC,EAAyB,gBAAV1vB,GAAqBA,EAAMiC,MAAM,MAASjC,EAE1D,MAAY,EAAJ5E,EAAOA,IACdq0B,EAAUH,EAASpD,GAAW9wB,GAAMm0B,GACnCG,EAAOt0B,IAAOs0B,EAAOt0B,EAAI,IAAOs0B,EAAO,EAGzC,OAAOD,KAIHnE,GAAQ5xB,KAAM41B,KACnB35B,EAAOs3B,SAAUqC,EAASC,GAASnT,IAAMoS,KAG3C,IAAImB,IAAM,OACTC,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,oCAEhBp6B,GAAOsB,GAAG0E,QACTq0B,UAAW,WACV,MAAOr6B,GAAOqxB,MAAO/tB,KAAKg3B,mBAE3BA,eAAgB,WACf,MAAOh3B,MAAKsC,IAAI,WAEf,GAAIiP,GAAW7U,EAAO4lB,KAAMtiB,KAAM,WAClC,OAAOuR,GAAW7U,EAAOsE,UAAWuQ,GAAavR,OAEjDkQ,OAAO,WACP,GAAI7Q,GAAOW,KAAKX,IAEhB,OAAOW,MAAK8C,OAASpG,EAAQsD,MAAOyrB,GAAI,cACvCqL,GAAar2B,KAAMT,KAAK6G,YAAegwB,GAAgBp2B,KAAMpB,KAC3DW,KAAK6U,UAAY0Y,GAA4B9sB,KAAMpB,MAEtDiD,IAAI,SAAUH,EAAGpC,GACjB,GAAIyR,GAAM9U,EAAQsD,MAAOwR,KAEzB,OAAc,OAAPA,EACN,KACA9U,EAAOyG,QAASqO,GACf9U,EAAO4F,IAAKkP,EAAK,SAAUA,GAC1B,OAAS1O,KAAM/C,EAAK+C,KAAMiE,MAAOyK,EAAIjO,QAASqzB,GAAO,YAEpD9zB,KAAM/C,EAAK+C,KAAMiE,MAAOyK,EAAIjO,QAASqzB,GAAO,WAC9Cz1B,SAMLzE,EAAOqxB,MAAQ,SAAUzjB,EAAG2sB,GAC3B,GAAIZ,GACHa,KACA5c,EAAM,SAAU3V,EAAKoC,GAEpBA,EAAQrK,EAAOiE,WAAYoG,GAAUA,IAAqB,MAATA,EAAgB,GAAKA,EACtEmwB,EAAGA,EAAEh3B,QAAWi3B,mBAAoBxyB,GAAQ,IAAMwyB,mBAAoBpwB,GASxE,IALKkwB,IAAgBh7B,IACpBg7B,EAAcv6B,EAAO06B,cAAgB16B,EAAO06B,aAAaH,aAIrDv6B,EAAOyG,QAASmH,IAASA,EAAE1K,SAAWlD,EAAOgE,cAAe4J,GAEhE5N,EAAO+E,KAAM6I,EAAG,WACfgQ,EAAKta,KAAK8C,KAAM9C,KAAK+G,aAMtB,KAAMsvB,IAAU/rB,GACf+sB,GAAahB,EAAQ/rB,EAAG+rB,GAAUY,EAAa3c,EAKjD,OAAO4c,GAAEtpB,KAAM,KAAMrK,QAASmzB,GAAK,KAGpC,SAASW,IAAahB,EAAQlyB,EAAK8yB,EAAa3c,GAC/C,GAAIxX,EAEJ,IAAKpG,EAAOyG,QAASgB,GAEpBzH,EAAO+E,KAAM0C,EAAK,SAAUhC,EAAGm1B,GACzBL,GAAeN,GAASl2B,KAAM41B,GAElC/b,EAAK+b,EAAQiB,GAIbD,GAAahB,EAAS,KAAqB,gBAANiB,GAAiBn1B,EAAI,IAAO,IAAKm1B,EAAGL,EAAa3c,SAIlF,IAAM2c,GAAsC,WAAvBv6B,EAAO2C,KAAM8E,GAQxCmW,EAAK+b,EAAQlyB,OANb,KAAMrB,IAAQqB,GACbkzB,GAAahB,EAAS,IAAMvzB,EAAO,IAAKqB,EAAKrB,GAAQm0B,EAAa3c,GAQrE5d,EAAO+E,KAAM,0MAEqDuH,MAAM,KAAM,SAAU7G,EAAGW,GAG1FpG,EAAOsB,GAAI8E,GAAS,SAAUqC,EAAMnH,GACnC,MAAO+D,WAAU7B,OAAS,EACzBF,KAAK6qB,GAAI/nB,EAAM,KAAMqC,EAAMnH,GAC3BgC,KAAKiE,QAASnB,MAIjBpG,EAAOsB,GAAG0E,QACT60B,MAAO,SAAUC,EAAQC,GACxB,MAAOz3B,MAAKiqB,WAAYuN,GAAStN,WAAYuN,GAASD,IAGvDE,KAAM,SAAU1S,EAAO7f,EAAMnH,GAC5B,MAAOgC,MAAK6qB,GAAI7F,EAAO,KAAM7f,EAAMnH,IAEpC25B,OAAQ,SAAU3S,EAAOhnB,GACxB,MAAOgC,MAAKkE,IAAK8gB,EAAO,KAAMhnB,IAG/B45B,SAAU,SAAU95B,EAAUknB,EAAO7f,EAAMnH,GAC1C,MAAOgC,MAAK6qB,GAAI7F,EAAOlnB,EAAUqH,EAAMnH,IAExC65B,WAAY,SAAU/5B,EAAUknB,EAAOhnB,GAEtC,MAA4B,KAArB+D,UAAU7B,OAAeF,KAAKkE,IAAKpG,EAAU,MAASkC,KAAKkE,IAAK8gB,EAAOlnB,GAAY,KAAME,KAGlG,IAEC85B,IACAC,GACAC,GAAat7B,EAAO0L,MAEpB6vB,GAAc,KACdC,GAAQ,OACRC,GAAM,gBACNC,GAAW,gCAEXC,GAAiB,4DACjBC,GAAa,iBACbC,GAAY,QACZC,GAAO,8CAGPC,GAAQ/7B,EAAOsB,GAAGqrB,KAWlBqP,MAOAC,MAGAC,GAAW,KAAK37B,OAAO,IAIxB,KACC86B,GAAe17B,EAASoY,KACvB,MAAO7P,IAGRmzB,GAAez7B,EAASiJ,cAAe,KACvCwyB,GAAatjB,KAAO,GACpBsjB,GAAeA,GAAatjB,KAI7BqjB,GAAeU,GAAKr4B,KAAM43B,GAAajxB,kBAGvC,SAAS+xB,IAA6BC,GAGrC,MAAO,UAAUC,EAAoBpe,GAED,gBAAvBoe,KACXpe,EAAOoe,EACPA,EAAqB,IAGtB,IAAItH,GACHtvB,EAAI,EACJ62B,EAAYD,EAAmBjyB,cAAchH,MAAO1B,MAErD,IAAK1B,EAAOiE,WAAYga,GAEvB,MAAS8W,EAAWuH,EAAU72B,KAER,MAAhBsvB,EAAS,IACbA,EAAWA,EAASp0B,MAAO,IAAO,KACjCy7B,EAAWrH,GAAaqH,EAAWrH,QAAkBpgB,QAASsJ,KAI9Dme,EAAWrH,GAAaqH,EAAWrH,QAAkBt0B,KAAMwd,IAQjE,QAASse,IAA+BH,EAAW/1B,EAASm2B,EAAiBC,GAE5E,GAAIC,MACHC,EAAqBP,IAAcH,EAEpC,SAASW,GAAS7H,GACjB,GAAI3c,EAYJ,OAXAskB,GAAW3H,IAAa,EACxB/0B,EAAO+E,KAAMq3B,EAAWrH,OAAkB,SAAUhlB,EAAG8sB,GACtD,GAAIC,GAAsBD,EAAoBx2B,EAASm2B,EAAiBC,EACxE,OAAmC,gBAAxBK,IAAqCH,GAAqBD,EAAWI,GAIpEH,IACDvkB,EAAW0kB,GADf,GAHNz2B,EAAQi2B,UAAU3nB,QAASmoB,GAC3BF,EAASE,IACF,KAKF1kB,EAGR,MAAOwkB,GAASv2B,EAAQi2B,UAAW,MAAUI,EAAW,MAASE,EAAS,KAM3E,QAASG,IAAYx2B,EAAQN,GAC5B,GAAIO,GAAMyB,EACT+0B,EAAch9B,EAAO06B,aAAasC,eAEnC,KAAM/0B,IAAOhC,GACPA,EAAKgC,KAAU1I,KACjBy9B,EAAa/0B,GAAQ1B,EAAWC,IAASA,OAAgByB,GAAQhC,EAAKgC,GAO1E,OAJKzB,IACJxG,EAAOgG,QAAQ,EAAMO,EAAQC,GAGvBD,EAGRvG,EAAOsB,GAAGqrB,KAAO,SAAUkI,EAAKoI,EAAQj4B,GACvC,GAAoB,gBAAR6vB,IAAoBkH,GAC/B,MAAOA,IAAM32B,MAAO9B,KAAM+B,UAG3B,IAAIjE,GAAU87B,EAAUv6B,EACvB+a,EAAOpa,KACPkE,EAAMqtB,EAAIh0B,QAAQ,IA+CnB,OA7CK2G,IAAO,IACXpG,EAAWyzB,EAAIl0B,MAAO6G,EAAKqtB,EAAIrxB,QAC/BqxB,EAAMA,EAAIl0B,MAAO,EAAG6G,IAIhBxH,EAAOiE,WAAYg5B,IAGvBj4B,EAAWi4B,EACXA,EAAS19B,GAGE09B,GAA4B,gBAAXA,KAC5Bt6B,EAAO,QAIH+a,EAAKla,OAAS,GAClBxD,EAAO80B,MACND,IAAKA,EAGLlyB,KAAMA,EACNoyB,SAAU,OACVtsB,KAAMw0B,IACJ93B,KAAK,SAAUg4B,GAGjBD,EAAW73B,UAEXqY,EAAKoV,KAAM1xB,EAIVpB,EAAO,SAASiyB,OAAQjyB,EAAO4D,UAAWu5B,IAAiBz5B,KAAMtC,GAGjE+7B,KAECC,SAAUp4B,GAAY,SAAUy3B,EAAOY,GACzC3f,EAAK3Y,KAAMC,EAAUk4B,IAAcT,EAAMU,aAAcE,EAAQZ,MAI1Dn5B,MAIRtD,EAAO+E,MAAQ,YAAa,WAAY,eAAgB,YAAa,cAAe,YAAc,SAAUU,EAAG9C,GAC9G3C,EAAOsB,GAAIqB,GAAS,SAAUrB,GAC7B,MAAOgC,MAAK6qB,GAAIxrB,EAAMrB,MAIxBtB,EAAOgG,QAGNs3B,OAAQ,EAGRC,gBACAC,QAEA9C,cACC7F,IAAKwG,GACL14B,KAAM,MACN86B,QAAS9B,GAAe53B,KAAMq3B,GAAc,IAC5C/S,QAAQ,EACRqV,aAAa,EACb/zB,OAAO,EACPg0B,YAAa,mDAabC,SACCC,IAAK3B,GACL3xB,KAAM,aACNuoB,KAAM,YACNxpB,IAAK,4BACLw0B,KAAM,qCAGPnP,UACCrlB,IAAK,MACLwpB,KAAM,OACNgL,KAAM,QAGPC,gBACCz0B,IAAK,cACLiB,KAAM,eACNuzB,KAAM,gBAKPE,YAGCC,SAAUj2B,OAGVk2B,aAAa,EAGbC,YAAan+B,EAAOiJ,UAGpBm1B,WAAYp+B,EAAOqJ,UAOpB2zB,aACCnI,KAAK,EACLxzB,SAAS,IAOXg9B,UAAW,SAAU93B,EAAQ+3B,GAC5B,MAAOA,GAGNvB,GAAYA,GAAYx2B,EAAQvG,EAAO06B,cAAgB4D,GAGvDvB,GAAY/8B,EAAO06B,aAAcn0B,IAGnCg4B,cAAepC,GAA6BH,IAC5CwC,cAAerC,GAA6BF,IAG5CnH,KAAM,SAAUD,EAAKxuB,GAGA,gBAARwuB,KACXxuB,EAAUwuB,EACVA,EAAMt1B,GAIP8G,EAAUA,KAEV,IACC0zB,GAEAt0B,EAEAg5B,EAEAC,EAEAC,EAGAC,EAEAC,EAEAC,EAEAtE,EAAIx6B,EAAOq+B,aAAeh4B,GAE1B04B,EAAkBvE,EAAEn5B,SAAWm5B,EAE/BwE,EAAqBxE,EAAEn5B,UAAa09B,EAAgBl7B,UAAYk7B,EAAgB77B,QAC/ElD,EAAQ++B,GACR/+B,EAAOyC,MAER4b,EAAWre,EAAOgM,WAClBizB,EAAmBj/B,EAAO8c,UAAU,eAEpCoiB,EAAa1E,EAAE0E,eAEfC,KACAC,KAEAjhB,EAAQ,EAERkhB,EAAW,WAEX5C,GACC75B,WAAY,EAGZ08B,kBAAmB,SAAUr3B,GAC5B,GAAI7E,EACJ,IAAe,IAAV+a,EAAc,CAClB,IAAM2gB,EAAkB,CACvBA,IACA,OAAS17B,EAAQs4B,GAASj4B,KAAMi7B,GAC/BI,EAAiB17B,EAAM,GAAGgH,eAAkBhH,EAAO,GAGrDA,EAAQ07B,EAAiB72B,EAAImC,eAE9B,MAAgB,OAAThH,EAAgB,KAAOA,GAI/Bm8B,sBAAuB,WACtB,MAAiB,KAAVphB,EAAcugB,EAAwB,MAI9Cc,iBAAkB,SAAUp5B,EAAMiE,GACjC,GAAIo1B,GAAQr5B,EAAKgE,aAKjB,OAJM+T,KACL/X,EAAOg5B,EAAqBK,GAAUL,EAAqBK,IAAWr5B,EACtE+4B,EAAgB/4B,GAASiE,GAEnB/G,MAIRo8B,iBAAkB,SAAU/8B,GAI3B,MAHMwb,KACLqc,EAAEmF,SAAWh9B,GAEPW,MAIR47B,WAAY,SAAUt5B,GACrB,GAAIg6B,EACJ,IAAKh6B,EACJ,GAAa,EAARuY,EACJ,IAAMyhB,IAAQh6B,GAEbs5B,EAAYU,IAAWV,EAAYU,GAAQh6B,EAAKg6B,QAIjDnD,GAAMre,OAAQxY,EAAK62B,EAAMY,QAG3B,OAAO/5B,OAIRu8B,MAAO,SAAUC,GAChB,GAAIC,GAAYD,GAAcT,CAK9B,OAJKR,IACJA,EAAUgB,MAAOE,GAElB56B,EAAM,EAAG46B,GACFz8B,MAwCV,IAnCA+a,EAASnZ,QAASu3B,GAAQW,SAAW6B,EAAiBrhB,IACtD6e,EAAMuD,QAAUvD,EAAMt3B,KACtBs3B,EAAMn0B,MAAQm0B,EAAMne,KAMpBkc,EAAE3F,MAAUA,GAAO2F,EAAE3F,KAAOwG,IAAiB,IAAKx0B,QAAS20B,GAAO,IAAK30B,QAASg1B,GAAWT,GAAc,GAAM,MAG/GZ,EAAE73B,KAAO0D,EAAQ45B,QAAU55B,EAAQ1D,MAAQ63B,EAAEyF,QAAUzF,EAAE73B,KAGzD63B,EAAE8B,UAAYt8B,EAAOmB,KAAMq5B,EAAEzF,UAAY,KAAM3qB,cAAchH,MAAO1B,KAAqB,IAGnE,MAAjB84B,EAAE0F,cACNnG,EAAQ+B,GAAKr4B,KAAM+2B,EAAE3F,IAAIzqB,eACzBowB,EAAE0F,eAAkBnG,GACjBA,EAAO,KAAQqB,GAAc,IAAOrB,EAAO,KAAQqB,GAAc,KAChErB,EAAO,KAAwB,UAAfA,EAAO,GAAkB,KAAO,WAC/CqB,GAAc,KAA+B,UAAtBA,GAAc,GAAkB,KAAO,UAK/DZ,EAAE/xB,MAAQ+xB,EAAEkD,aAAiC,gBAAXlD,GAAE/xB,OACxC+xB,EAAE/xB,KAAOzI,EAAOqxB,MAAOmJ,EAAE/xB,KAAM+xB,EAAED,cAIlCgC,GAA+BP,GAAYxB,EAAGn0B,EAASo2B,GAGxC,IAAVte,EACJ,MAAOse,EAIRmC,GAAcpE,EAAEnS,OAGXuW,GAAmC,IAApB5+B,EAAOs9B,UAC1Bt9B,EAAOyC,MAAM8E,QAAQ,aAItBizB,EAAE73B,KAAO63B,EAAE73B,KAAKJ,cAGhBi4B,EAAE2F,YAAcvE,GAAW73B,KAAMy2B,EAAE73B,MAInC87B,EAAWjE,EAAE3F,IAGP2F,EAAE2F,aAGF3F,EAAE/xB,OACNg2B,EAAajE,EAAE3F,MAAS0G,GAAYx3B,KAAM06B,GAAa,IAAM,KAAQjE,EAAE/xB,WAEhE+xB,GAAE/xB,MAIL+xB,EAAEhpB,SAAU,IAChBgpB,EAAE3F,IAAM4G,GAAI13B,KAAM06B,GAGjBA,EAAS53B,QAAS40B,GAAK,OAASH,MAGhCmD,GAAalD,GAAYx3B,KAAM06B,GAAa,IAAM,KAAQ,KAAOnD,OAK/Dd,EAAE4F,aACDpgC,EAAOu9B,aAAckB,IACzBhC,EAAM+C,iBAAkB,oBAAqBx/B,EAAOu9B,aAAckB,IAE9Dz+B,EAAOw9B,KAAMiB,IACjBhC,EAAM+C,iBAAkB,gBAAiBx/B,EAAOw9B,KAAMiB,MAKnDjE,EAAE/xB,MAAQ+xB,EAAE2F,YAAc3F,EAAEmD,eAAgB,GAASt3B,EAAQs3B,cACjElB,EAAM+C,iBAAkB,eAAgBhF,EAAEmD,aAI3ClB,EAAM+C,iBACL,SACAhF,EAAE8B,UAAW,IAAO9B,EAAEoD,QAASpD,EAAE8B,UAAU,IAC1C9B,EAAEoD,QAASpD,EAAE8B,UAAU,KAA8B,MAArB9B,EAAE8B,UAAW,GAAc,KAAOJ,GAAW,WAAa,IAC1F1B,EAAEoD,QAAS,KAIb,KAAMn4B,IAAK+0B,GAAE6F,QACZ5D,EAAM+C,iBAAkB/5B,EAAG+0B,EAAE6F,QAAS56B,GAIvC,IAAK+0B,EAAE8F,aAAgB9F,EAAE8F,WAAW97B,KAAMu6B,EAAiBtC,EAAOjC,MAAQ,GAAmB,IAAVrc,GAElF,MAAOse,GAAMoD,OAIdR,GAAW,OAGX,KAAM55B,KAAOu6B,QAAS,EAAG13B,MAAO,EAAG80B,SAAU,GAC5CX,EAAOh3B,GAAK+0B,EAAG/0B,GAOhB,IAHAo5B,EAAYtC,GAA+BN,GAAYzB,EAAGn0B,EAASo2B,GAK5D,CACNA,EAAM75B,WAAa,EAGdg8B,GACJI,EAAmBz3B,QAAS,YAAck1B,EAAOjC,IAG7CA,EAAE7wB,OAAS6wB,EAAE1V,QAAU,IAC3B6Z,EAAet3B,WAAW,WACzBo1B,EAAMoD,MAAM,YACVrF,EAAE1V,SAGN,KACC3G,EAAQ,EACR0gB,EAAU0B,KAAMpB,EAAgBh6B,GAC/B,MAAQ+C,GAET,KAAa,EAARiW,GAIJ,KAAMjW,EAHN/C,GAAM,GAAI+C,QArBZ/C,GAAM,GAAI,eA8BX,SAASA,GAAMk4B,EAAQmD,EAAkBC,EAAWJ,GACnD,GAAIK,GAAWV,EAAS13B,EAAO40B,EAAUyD,EACxCb,EAAaU,CAGC,KAAVriB,IAKLA,EAAQ,EAGHwgB,GACJ5Z,aAAc4Z,GAKfE,EAAYt/B,EAGZm/B,EAAwB2B,GAAW,GAGnC5D,EAAM75B,WAAay6B,EAAS,EAAI,EAAI,EAGpCqD,EAAYrD,GAAU,KAAgB,IAATA,GAA2B,MAAXA,EAGxCoD,IACJvD,EAAW0D,GAAqBpG,EAAGiC,EAAOgE,IAI3CvD,EAAW2D,GAAarG,EAAG0C,EAAUT,EAAOiE,GAGvCA,GAGClG,EAAE4F,aACNO,EAAWlE,EAAM6C,kBAAkB,iBAC9BqB,IACJ3gC,EAAOu9B,aAAckB,GAAakC,GAEnCA,EAAWlE,EAAM6C,kBAAkB,QAC9BqB,IACJ3gC,EAAOw9B,KAAMiB,GAAakC,IAKZ,MAAXtD,GAA6B,SAAX7C,EAAE73B,KACxBm9B,EAAa,YAGS,MAAXzC,EACXyC,EAAa,eAIbA,EAAa5C,EAAS/e,MACtB6hB,EAAU9C,EAASz0B,KACnBH,EAAQ40B,EAAS50B,MACjBo4B,GAAap4B,KAKdA,EAAQw3B,GACHzC,IAAWyC,KACfA,EAAa,QACC,EAATzC,IACJA,EAAS,KAMZZ,EAAMY,OAASA,EACfZ,EAAMqD,YAAeU,GAAoBV,GAAe,GAGnDY,EACJriB,EAAS/W,YAAay3B,GAAmBiB,EAASF,EAAYrD,IAE9Dpe,EAASyiB,WAAY/B,GAAmBtC,EAAOqD,EAAYx3B,IAI5Dm0B,EAAMyC,WAAYA,GAClBA,EAAa3/B,EAERq/B,GACJI,EAAmBz3B,QAASm5B,EAAY,cAAgB,aACrDjE,EAAOjC,EAAGkG,EAAYV,EAAU13B,IAIpC22B,EAAiBjhB,SAAU+gB,GAAmBtC,EAAOqD,IAEhDlB,IACJI,EAAmBz3B,QAAS,gBAAkBk1B,EAAOjC,MAE3Cx6B,EAAOs9B,QAChBt9B,EAAOyC,MAAM8E,QAAQ,cAKxB,MAAOk1B,IAGRsE,QAAS,SAAUlM,EAAKpsB,EAAMzD,GAC7B,MAAOhF,GAAOyE,IAAKowB,EAAKpsB,EAAMzD,EAAU,SAGzCg8B,UAAW,SAAUnM,EAAK7vB,GACzB,MAAOhF,GAAOyE,IAAKowB,EAAKt1B,EAAWyF,EAAU,aAI/ChF,EAAO+E,MAAQ,MAAO,QAAU,SAAUU,EAAGw6B,GAC5CjgC,EAAQigC,GAAW,SAAUpL,EAAKpsB,EAAMzD,EAAUrC,GAQjD,MANK3C,GAAOiE,WAAYwE,KACvB9F,EAAOA,GAAQqC,EACfA,EAAWyD,EACXA,EAAOlJ,GAGDS,EAAO80B,MACbD,IAAKA,EACLlyB,KAAMs9B,EACNlL,SAAUpyB,EACV8F,KAAMA,EACNu3B,QAASh7B,MASZ,SAAS47B,IAAqBpG,EAAGiC,EAAOgE,GACvC,GAAIQ,GAAeC,EAAIC,EAAex+B,EACrCgsB,EAAW6L,EAAE7L,SACb2N,EAAY9B,EAAE8B,SAGf,OAA0B,MAAnBA,EAAW,GACjBA,EAAU5qB,QACLwvB,IAAO3hC,IACX2hC,EAAK1G,EAAEmF,UAAYlD,EAAM6C,kBAAkB,gBAK7C,IAAK4B,EACJ,IAAMv+B,IAAQgsB,GACb,GAAKA,EAAUhsB,IAAUgsB,EAAUhsB,GAAOoB,KAAMm9B,GAAO,CACtD5E,EAAU3nB,QAAShS,EACnB,OAMH,GAAK25B,EAAW,IAAOmE,GACtBU,EAAgB7E,EAAW,OACrB,CAEN,IAAM35B,IAAQ89B,GAAY,CACzB,IAAMnE,EAAW,IAAO9B,EAAEwD,WAAYr7B,EAAO,IAAM25B,EAAU,IAAO,CACnE6E,EAAgBx+B,CAChB,OAEKs+B,IACLA,EAAgBt+B,GAIlBw+B,EAAgBA,GAAiBF,EAMlC,MAAKE,IACCA,IAAkB7E,EAAW,IACjCA,EAAU3nB,QAASwsB,GAEbV,EAAWU,IAJnB,EAWD,QAASN,IAAarG,EAAG0C,EAAUT,EAAOiE,GACzC,GAAIU,GAAOC,EAASC,EAAM/3B,EAAKqlB,EAC9BoP,KAEA1B,EAAY9B,EAAE8B,UAAU37B,OAGzB,IAAK27B,EAAW,GACf,IAAMgF,IAAQ9G,GAAEwD,WACfA,EAAYsD,EAAKl3B,eAAkBowB,EAAEwD,WAAYsD,EAInDD,GAAU/E,EAAU5qB,OAGpB,OAAQ2vB,EAcP,GAZK7G,EAAEuD,eAAgBsD,KACtB5E,EAAOjC,EAAEuD,eAAgBsD,IAAcnE,IAIlCtO,GAAQ8R,GAAalG,EAAE+G,aAC5BrE,EAAW1C,EAAE+G,WAAYrE,EAAU1C,EAAEzF,WAGtCnG,EAAOyS,EACPA,EAAU/E,EAAU5qB,QAKnB,GAAiB,MAAZ2vB,EAEJA,EAAUzS,MAGJ,IAAc,MAATA,GAAgBA,IAASyS,EAAU,CAM9C,GAHAC,EAAOtD,EAAYpP,EAAO,IAAMyS,IAAarD,EAAY,KAAOqD,IAG1DC,EACL,IAAMF,IAASpD,GAId,GADAz0B,EAAM63B,EAAM90B,MAAO,KACd/C,EAAK,KAAQ83B,IAGjBC,EAAOtD,EAAYpP,EAAO,IAAMrlB,EAAK,KACpCy0B,EAAY,KAAOz0B,EAAK,KACb,CAEN+3B,KAAS,EACbA,EAAOtD,EAAYoD,GAGRpD,EAAYoD,MAAY,IACnCC,EAAU93B,EAAK,GACf+yB,EAAU3nB,QAASpL,EAAK,IAEzB,OAOJ,GAAK+3B,KAAS,EAGb,GAAKA,GAAQ9G,EAAG,UACf0C,EAAWoE,EAAMpE,OAEjB,KACCA,EAAWoE,EAAMpE,GAChB,MAAQh1B,GACT,OAASiW,MAAO,cAAe7V,MAAOg5B,EAAOp5B,EAAI,sBAAwB0mB,EAAO,OAASyS,IAQ/F,OAASljB,MAAO,UAAW1V,KAAMy0B,GAGlCl9B,EAAOq+B,WACNT,SACC4D,OAAQ,6FAET7S,UACC6S,OAAQ,uBAETxD,YACCyD,cAAe,SAAUl3B,GAExB,MADAvK,GAAO+J,WAAYQ,GACZA,MAMVvK,EAAOu+B,cAAe,SAAU,SAAU/D,GACpCA,EAAEhpB,QAAUjS,IAChBi7B,EAAEhpB,OAAQ,GAENgpB,EAAE0F,cACN1F,EAAE73B,KAAO,MACT63B,EAAEnS,QAAS,KAKbroB,EAAOw+B,cAAe,SAAU,SAAShE,GAGxC,GAAKA,EAAE0F,YAAc,CAEpB,GAAIsB,GACHE,EAAO9hC,EAAS8hC,MAAQ1hC,EAAO,QAAQ,IAAMJ,EAASE,eAEvD,QAECygC,KAAM,SAAUxwB,EAAG/K,GAElBw8B,EAAS5hC,EAASiJ,cAAc,UAEhC24B,EAAO73B,OAAQ,EAEV6wB,EAAEmH,gBACNH,EAAOI,QAAUpH,EAAEmH,eAGpBH,EAAOv7B,IAAMu0B,EAAE3F,IAGf2M,EAAOK,OAASL,EAAOM,mBAAqB,SAAU/xB,EAAGgyB,IAEnDA,IAAYP,EAAO5+B,YAAc,kBAAkBmB,KAAMy9B,EAAO5+B,eAGpE4+B,EAAOK,OAASL,EAAOM,mBAAqB,KAGvCN,EAAOp9B,YACXo9B,EAAOp9B,WAAW0N,YAAa0vB,GAIhCA,EAAS,KAGHO,GACL/8B,EAAU,IAAK,aAOlB08B,EAAKpP,aAAckP,EAAQE,EAAKruB,aAGjCwsB,MAAO,WACD2B,GACJA,EAAOK,OAAQtiC,GAAW,OAM/B,IAAIyiC,OACHC,GAAS,mBAGVjiC,GAAOq+B,WACN6D,MAAO,WACPC,cAAe,WACd,GAAIn9B,GAAWg9B,GAAa/zB,OAAWjO,EAAO0G,QAAU,IAAQ40B,IAEhE,OADAh4B,MAAM0B,IAAa,EACZA,KAKThF,EAAOu+B,cAAe,aAAc,SAAU/D,EAAG4H,EAAkB3F,GAElE,GAAI4F,GAAcC,EAAaC,EAC9BC,EAAWhI,EAAE0H,SAAU,IAAWD,GAAOl+B,KAAMy2B,EAAE3F,KAChD,MACkB,gBAAX2F,GAAE/xB,QAAwB+xB,EAAEmD,aAAe,IAAK98B,QAAQ,sCAAwCohC,GAAOl+B,KAAMy2B,EAAE/xB,OAAU,OAIlI,OAAK+5B,IAAiC,UAArBhI,EAAE8B,UAAW,IAG7B+F,EAAe7H,EAAE2H,cAAgBniC,EAAOiE,WAAYu2B,EAAE2H,eACrD3H,EAAE2H,gBACF3H,EAAE2H,cAGEK,EACJhI,EAAGgI,GAAahI,EAAGgI,GAAW37B,QAASo7B,GAAQ,KAAOI,GAC3C7H,EAAE0H,SAAU,IACvB1H,EAAE3F,MAAS0G,GAAYx3B,KAAMy2B,EAAE3F,KAAQ,IAAM,KAAQ2F,EAAE0H,MAAQ,IAAMG,GAItE7H,EAAEwD,WAAW,eAAiB,WAI7B,MAHMuE,IACLviC,EAAOsI,MAAO+5B,EAAe,mBAEvBE,EAAmB,IAI3B/H,EAAE8B,UAAW,GAAM,OAGnBgG,EAAchjC,EAAQ+iC,GACtB/iC,EAAQ+iC,GAAiB,WACxBE,EAAoBl9B,WAIrBo3B,EAAMre,OAAO,WAEZ9e,EAAQ+iC,GAAiBC,EAGpB9H,EAAG6H,KAEP7H,EAAE2H,cAAgBC,EAAiBD,cAGnCH,GAAavhC,KAAM4hC,IAIfE,GAAqBviC,EAAOiE,WAAYq+B,IAC5CA,EAAaC,EAAmB,IAGjCA,EAAoBD,EAAc/iC,IAI5B,UAtDR,GAyDD,IAAIkjC,IAAcC,GACjBC,GAAQ,EAERC,GAAmBtjC,EAAOoK,eAAiB,WAE1C,GAAIzB,EACJ,KAAMA,IAAOw6B,IACZA,GAAcx6B,GAAO1I,GAAW,GAKnC,SAASsjC,MACR,IACC,MAAO,IAAIvjC,GAAOwjC,eACjB,MAAO56B,KAGV,QAAS66B,MACR,IACC,MAAO,IAAIzjC,GAAOoK,cAAc,qBAC/B,MAAOxB,KAKVlI,EAAO06B,aAAasI,IAAM1jC,EAAOoK,cAOhC,WACC,OAAQpG,KAAKm6B,SAAWoF,MAAuBE,MAGhDF,GAGDH,GAAe1iC,EAAO06B,aAAasI,MACnChjC,EAAOmI,QAAQ86B,OAASP,IAAkB,mBAAqBA,IAC/DA,GAAe1iC,EAAOmI,QAAQ2sB,OAAS4N,GAGlCA,IAEJ1iC,EAAOw+B,cAAc,SAAUhE,GAE9B,IAAMA,EAAE0F,aAAelgC,EAAOmI,QAAQ86B,KAAO,CAE5C,GAAIj+B,EAEJ,QACCu7B,KAAM,SAAUF,EAASjD,GAGxB,GAAInU,GAAQxjB,EACXu9B,EAAMxI,EAAEwI,KAWT,IAPKxI,EAAE0I,SACNF,EAAIG,KAAM3I,EAAE73B,KAAM63B,EAAE3F,IAAK2F,EAAE7wB,MAAO6wB,EAAE0I,SAAU1I,EAAExhB,UAEhDgqB,EAAIG,KAAM3I,EAAE73B,KAAM63B,EAAE3F,IAAK2F,EAAE7wB,OAIvB6wB,EAAE4I,UACN,IAAM39B,IAAK+0B,GAAE4I,UACZJ,EAAKv9B,GAAM+0B,EAAE4I,UAAW39B,EAKrB+0B,GAAEmF,UAAYqD,EAAItD,kBACtBsD,EAAItD,iBAAkBlF,EAAEmF,UAQnBnF,EAAE0F,aAAgBG,EAAQ,sBAC/BA,EAAQ,oBAAsB,iBAI/B,KACC,IAAM56B,IAAK46B,GACV2C,EAAIxD,iBAAkB/5B,EAAG46B,EAAS56B,IAElC,MAAO2iB,IAKT4a,EAAIzC,KAAQ/F,EAAE2F,YAAc3F,EAAE/xB,MAAU,MAGxCzD,EAAW,SAAU+K,EAAGgyB,GACvB,GAAI1E,GAAQyB,EAAiBgB,EAAYW,CAKzC,KAGC,GAAKz7B,IAAc+8B,GAA8B,IAAnBiB,EAAIpgC,YAcjC,GAXAoC,EAAWzF,EAGN0pB,IACJ+Z,EAAIlB,mBAAqB9hC,EAAO8J,KAC3B84B,UACGH,IAAcxZ,IAKlB8Y,EAEoB,IAAnBiB,EAAIpgC,YACRogC,EAAInD,YAEC,CACNY,KACApD,EAAS2F,EAAI3F,OACbyB,EAAkBkE,EAAIzD,wBAIW,gBAArByD,GAAI7F,eACfsD,EAAUl2B,KAAOy4B,EAAI7F,aAKtB,KACC2C,EAAakD,EAAIlD,WAChB,MAAO53B,GAER43B,EAAa,GAQRzC,IAAU7C,EAAEiD,SAAYjD,EAAE0F,YAGT,OAAX7C,IACXA,EAAS,KAHTA,EAASoD,EAAUl2B,KAAO,IAAM,KAOlC,MAAO84B,GACFtB,GACL3E,EAAU,GAAIiG,GAKX5C,GACJrD,EAAUC,EAAQyC,EAAYW,EAAW3B,IAIrCtE,EAAE7wB,MAGuB,IAAnBq5B,EAAIpgC,WAGfyE,WAAYrC,IAEZikB,IAAW0Z,GACNC,KAGEH,KACLA,MACAziC,EAAQV,GAASgkC,OAAQV,KAG1BH,GAAcxZ,GAAWjkB,GAE1Bg+B,EAAIlB,mBAAqB98B,GAjBzBA,KAqBF66B,MAAO,WACD76B,GACJA,EAAUzF,GAAW,OAO3B,IAAIgkC,IAAOC,GACVC,GAAW,yBACXC,GAAaj1B,OAAQ,iBAAmBjN,EAAY,cAAe,KACnEmiC,GAAO,cACPC,IAAwBC,IACxBC,IACCjG,KAAM,SAAUjY,EAAMvb,GACrB,GAAI05B,GAAQzgC,KAAK0gC,YAAape,EAAMvb,GACnC9D,EAASw9B,EAAM3xB,MACf2nB,EAAQ2J,GAAOjgC,KAAM4G,GACrB45B,EAAOlK,GAASA,EAAO,KAAS/5B,EAAOw3B,UAAW5R,GAAS,GAAK,MAGhEhP,GAAU5W,EAAOw3B,UAAW5R,IAAmB,OAATqe,IAAkB19B,IACvDm9B,GAAOjgC,KAAMzD,EAAO82B,IAAKiN,EAAM1gC,KAAMuiB,IACtCse,EAAQ,EACRC,EAAgB,EAEjB,IAAKvtB,GAASA,EAAO,KAAQqtB,EAAO,CAEnCA,EAAOA,GAAQrtB,EAAO,GAGtBmjB,EAAQA,MAGRnjB,GAASrQ,GAAU,CAEnB,GAGC29B,GAAQA,GAAS,KAGjBttB,GAAgBstB,EAChBlkC,EAAO+L,MAAOg4B,EAAM1gC,KAAMuiB,EAAMhP,EAAQqtB,SAI/BC,KAAWA,EAAQH,EAAM3xB,MAAQ7L,IAAqB,IAAV29B,KAAiBC,GAaxE,MATKpK,KACJnjB,EAAQmtB,EAAMntB,OAASA,IAAUrQ,GAAU,EAC3Cw9B,EAAME,KAAOA,EAEbF,EAAMl+B,IAAMk0B,EAAO,GAClBnjB,GAAUmjB,EAAO,GAAM,GAAMA,EAAO,IACnCA,EAAO,IAGHgK,IAKV,SAASK,MAIR,MAHA/8B,YAAW,WACVk8B,GAAQhkC,IAEAgkC,GAAQvjC,EAAO0L,MAGzB,QAASs4B,IAAa35B,EAAOub,EAAMye,GAClC,GAAIN,GACHO,GAAeR,GAAUle,QAAerlB,OAAQujC,GAAU,MAC1DjmB,EAAQ,EACRra,EAAS8gC,EAAW9gC,MACrB,MAAgBA,EAARqa,EAAgBA,IACvB,GAAMkmB,EAAQO,EAAYzmB,GAAQrZ,KAAM6/B,EAAWze,EAAMvb,GAGxD,MAAO05B,GAKV,QAASQ,IAAWlhC,EAAMmhC,EAAYn+B,GACrC,GAAIgQ,GACHouB,EACA5mB,EAAQ,EACRra,EAASogC,GAAoBpgC,OAC7B6a,EAAWre,EAAOgM,WAAWoS,OAAQ,iBAE7BsmB,GAAKrhC,OAEbqhC,EAAO,WACN,GAAKD,EACJ,OAAO,CAER,IAAIE,GAAcpB,IAASa,KAC1B9kB,EAAY3Y,KAAKiE,IAAK,EAAGy5B,EAAUO,UAAYP,EAAUQ,SAAWF,GAEpElqB,EAAO6E,EAAY+kB,EAAUQ,UAAY,EACzCC,EAAU,EAAIrqB,EACdoD,EAAQ,EACRra,EAAS6gC,EAAUU,OAAOvhC,MAE3B,MAAgBA,EAARqa,EAAiBA,IACxBwmB,EAAUU,OAAQlnB,GAAQmnB,IAAKF,EAKhC,OAFAzmB,GAASqB,WAAYrc,GAAQghC,EAAWS,EAASxlB,IAElC,EAAVwlB,GAAethC,EACZ8b,GAEPjB,EAAS/W,YAAajE,GAAQghC,KACvB,IAGTA,EAAYhmB,EAASnZ,SACpB7B,KAAMA,EACNmoB,MAAOxrB,EAAOgG,UAAYw+B,GAC1BS,KAAMjlC,EAAOgG,QAAQ,GAAQk/B,kBAAqB7+B,GAClD8+B,mBAAoBX,EACpBhI,gBAAiBn2B,EACjBu+B,UAAWrB,IAASa,KACpBS,SAAUx+B,EAAQw+B,SAClBE,UACAf,YAAa,SAAUpe,EAAM/f,GAC5B,GAAIk+B,GAAQ/jC,EAAOolC,MAAO/hC,EAAMghC,EAAUY,KAAMrf,EAAM/f,EACpDw+B,EAAUY,KAAKC,cAAetf,IAAUye,EAAUY,KAAKI,OAEzD,OADAhB,GAAUU,OAAOtkC,KAAMsjC,GAChBA,GAERvf,KAAM,SAAU8gB,GACf,GAAIznB,GAAQ,EAGXra,EAAS8hC,EAAUjB,EAAUU,OAAOvhC,OAAS,CAC9C,IAAKihC,EACJ,MAAOnhC,KAGR,KADAmhC,GAAU,EACMjhC,EAARqa,EAAiBA,IACxBwmB,EAAUU,OAAQlnB,GAAQmnB,IAAK,EAUhC,OALKM,GACJjnB,EAAS/W,YAAajE,GAAQghC,EAAWiB,IAEzCjnB,EAASyiB,WAAYz9B,GAAQghC,EAAWiB,IAElChiC,QAGTkoB,EAAQ6Y,EAAU7Y,KAInB,KAFA+Z,GAAY/Z,EAAO6Y,EAAUY,KAAKC,eAElB1hC,EAARqa,EAAiBA,IAExB,GADAxH,EAASutB,GAAqB/lB,GAAQrZ,KAAM6/B,EAAWhhC,EAAMmoB,EAAO6Y,EAAUY,MAE7E,MAAO5uB,EAmBT,OAfArW,GAAO4F,IAAK4lB,EAAOwY,GAAaK,GAE3BrkC,EAAOiE,WAAYogC,EAAUY,KAAKruB,QACtCytB,EAAUY,KAAKruB,MAAMpS,KAAMnB,EAAMghC,GAGlCrkC,EAAO4kB,GAAG4gB,MACTxlC,EAAOgG,OAAQ0+B,GACdrhC,KAAMA,EACNoiC,KAAMpB,EACNngB,MAAOmgB,EAAUY,KAAK/gB,SAKjBmgB,EAAUtlB,SAAUslB,EAAUY,KAAKlmB,UACxC5Z,KAAMk/B,EAAUY,KAAK9/B,KAAMk/B,EAAUY,KAAK7H,UAC1C9e,KAAM+lB,EAAUY,KAAK3mB,MACrBF,OAAQimB,EAAUY,KAAK7mB,QAG1B,QAASmnB,IAAY/Z,EAAO0Z,GAC3B,GAAIrnB,GAAOzX,EAAMi/B,EAAQh7B,EAAOga,CAGhC,KAAMxG,IAAS2N,GAed,GAdAplB,EAAOpG,EAAOiK,UAAW4T,GACzBwnB,EAASH,EAAe9+B,GACxBiE,EAAQmhB,EAAO3N,GACV7d,EAAOyG,QAAS4D,KACpBg7B,EAASh7B,EAAO,GAChBA,EAAQmhB,EAAO3N,GAAUxT,EAAO,IAG5BwT,IAAUzX,IACdolB,EAAOplB,GAASiE,QACTmhB,GAAO3N,IAGfwG,EAAQrkB,EAAOs3B,SAAUlxB,GACpBie,GAAS,UAAYA,GAAQ,CACjCha,EAAQga,EAAMwV,OAAQxvB,SACfmhB,GAAOplB,EAId,KAAMyX,IAASxT,GACNwT,IAAS2N,KAChBA,EAAO3N,GAAUxT,EAAOwT,GACxBqnB,EAAernB,GAAUwnB,OAI3BH,GAAe9+B,GAASi/B,EAK3BrlC,EAAOukC,UAAYvkC,EAAOgG,OAAQu+B,IAEjCmB,QAAS,SAAUla,EAAOxmB,GACpBhF,EAAOiE,WAAYunB,IACvBxmB,EAAWwmB,EACXA,GAAU,MAEVA,EAAQA,EAAMlf,MAAM,IAGrB,IAAIsZ,GACH/H,EAAQ,EACRra,EAASgoB,EAAMhoB,MAEhB,MAAgBA,EAARqa,EAAiBA,IACxB+H,EAAO4F,EAAO3N,GACdimB,GAAUle,GAASke,GAAUle,OAC7Bke,GAAUle,GAAOjR,QAAS3P,IAI5B2gC,UAAW,SAAU3gC,EAAUqtB,GACzBA,EACJuR,GAAoBjvB,QAAS3P,GAE7B4+B,GAAoBnjC,KAAMuE,KAK7B,SAAS6+B,IAAkBxgC,EAAMmoB,EAAOyZ,GAEvC,GAAIrf,GAAMvb,EAAOgtB,EAAQ0M,EAAO1f,EAAOuhB,EACtCH,EAAOniC,KACPmqB,KACA1hB,EAAQ1I,EAAK0I,MACbkrB,EAAS5zB,EAAKQ,UAAY+yB,GAAUvzB,GACpCwiC,EAAW7lC,EAAO+jB,MAAO1gB,EAAM,SAG1B4hC,GAAK/gB,QACVG,EAAQrkB,EAAOskB,YAAajhB,EAAM,MACX,MAAlBghB,EAAMyhB,WACVzhB,EAAMyhB,SAAW,EACjBF,EAAUvhB,EAAM/L,MAAMkF,KACtB6G,EAAM/L,MAAMkF,KAAO,WACZ6G,EAAMyhB,UACXF,MAIHvhB,EAAMyhB,WAENL,EAAKrnB,OAAO,WAGXqnB,EAAKrnB,OAAO,WACXiG,EAAMyhB,WACA9lC,EAAOkkB,MAAO7gB,EAAM,MAAOG,QAChC6gB,EAAM/L,MAAMkF,YAOO,IAAlBna,EAAKQ,WAAoB,UAAY2nB,IAAS,SAAWA,MAK7DyZ,EAAKc,UAAah6B,EAAMg6B,SAAUh6B,EAAMi6B,UAAWj6B,EAAMk6B,WAIlB,WAAlCjmC,EAAO82B,IAAKzzB,EAAM,YACW,SAAhCrD,EAAO82B,IAAKzzB,EAAM,WAIbrD,EAAOmI,QAAQ4Y,wBAAkE,WAAxCmW,GAAoB7zB,EAAK8G,UAIvE4B,EAAMyW,KAAO,EAHbzW,EAAMuW,QAAU,iBAQd2iB,EAAKc,WACTh6B,EAAMg6B,SAAW,SACX/lC,EAAOmI,QAAQ6Y,kBACpBykB,EAAKrnB,OAAO,WACXrS,EAAMg6B,SAAWd,EAAKc,SAAU,GAChCh6B,EAAMi6B,UAAYf,EAAKc,SAAU,GACjCh6B,EAAMk6B,UAAYhB,EAAKc,SAAU,KAOpC,KAAMngB,IAAQ4F,GAEb,GADAnhB,EAAQmhB,EAAO5F,GACV6d,GAAShgC,KAAM4G,GAAU,CAG7B,SAFOmhB,GAAO5F,GACdyR,EAASA,GAAoB,WAAVhtB,EACdA,KAAY4sB,EAAS,OAAS,QAClC,QAEDxJ,GAAM7H,GAASigB,GAAYA,EAAUjgB,IAAU5lB,EAAO+L,MAAO1I,EAAMuiB,GAIrE,IAAM5lB,EAAOqI,cAAeolB,GAAS,CAC/BoY,EACC,UAAYA,KAChB5O,EAAS4O,EAAS5O,QAGnB4O,EAAW7lC,EAAO+jB,MAAO1gB,EAAM,aAI3Bg0B,IACJwO,EAAS5O,QAAUA,GAEfA,EACJj3B,EAAQqD,GAAO2zB,OAEfyO,EAAKtgC,KAAK,WACTnF,EAAQqD,GAAO+zB,SAGjBqO,EAAKtgC,KAAK,WACT,GAAIygB,EACJ5lB,GAAOgkB,YAAa3gB,EAAM,SAC1B,KAAMuiB,IAAQ6H,GACbztB,EAAO+L,MAAO1I,EAAMuiB,EAAM6H,EAAM7H,KAGlC,KAAMA,IAAQ6H,GACbsW,EAAQC,GAAa/M,EAAS4O,EAAUjgB,GAAS,EAAGA,EAAM6f,GAElD7f,IAAQigB,KACfA,EAAUjgB,GAASme,EAAMntB,MACpBqgB,IACJ8M,EAAMl+B,IAAMk+B,EAAMntB,MAClBmtB,EAAMntB,MAAiB,UAATgP,GAA6B,WAATA,EAAoB,EAAI,KAO/D,QAASwf,IAAO/hC,EAAMgD,EAASuf,EAAM/f,EAAKw/B,GACzC,MAAO,IAAID,IAAMniC,UAAU1B,KAAM8B,EAAMgD,EAASuf,EAAM/f,EAAKw/B,GAE5DrlC,EAAOolC,MAAQA,GAEfA,GAAMniC,WACLE,YAAaiiC,GACb7jC,KAAM,SAAU8B,EAAMgD,EAASuf,EAAM/f,EAAKw/B,EAAQpB,GACjD3gC,KAAKD,KAAOA,EACZC,KAAKsiB,KAAOA,EACZtiB,KAAK+hC,OAASA,GAAU,QACxB/hC,KAAK+C,QAAUA,EACf/C,KAAKsT,MAAQtT,KAAKoI,IAAMpI,KAAK8O,MAC7B9O,KAAKuC,IAAMA,EACXvC,KAAK2gC,KAAOA,IAAUjkC,EAAOw3B,UAAW5R,GAAS,GAAK,OAEvDxT,IAAK,WACJ,GAAIiS,GAAQ+gB,GAAMhe,UAAW9jB,KAAKsiB,KAElC,OAAOvB,IAASA,EAAM5f,IACrB4f,EAAM5f,IAAKnB,MACX8hC,GAAMhe,UAAUqD,SAAShmB,IAAKnB,OAEhC0hC,IAAK,SAAUF,GACd,GAAIoB,GACH7hB,EAAQ+gB,GAAMhe,UAAW9jB,KAAKsiB,KAoB/B,OAjBCtiB,MAAK2rB,IAAMiX,EADP5iC,KAAK+C,QAAQw+B,SACE7kC,EAAOqlC,OAAQ/hC,KAAK+hC,QACtCP,EAASxhC,KAAK+C,QAAQw+B,SAAWC,EAAS,EAAG,EAAGxhC,KAAK+C,QAAQw+B,UAG3CC,EAEpBxhC,KAAKoI,KAAQpI,KAAKuC,IAAMvC,KAAKsT,OAAUsvB,EAAQ5iC,KAAKsT,MAE/CtT,KAAK+C,QAAQ8/B,MACjB7iC,KAAK+C,QAAQ8/B,KAAK3hC,KAAMlB,KAAKD,KAAMC,KAAKoI,IAAKpI,MAGzC+gB,GAASA,EAAMoC,IACnBpC,EAAMoC,IAAKnjB,MAEX8hC,GAAMhe,UAAUqD,SAAShE,IAAKnjB,MAExBA,OAIT8hC,GAAMniC,UAAU1B,KAAK0B,UAAYmiC,GAAMniC,UAEvCmiC,GAAMhe,WACLqD,UACChmB,IAAK,SAAUs/B,GACd,GAAI1tB,EAEJ,OAAiC,OAA5B0tB,EAAM1gC,KAAM0gC,EAAMne,OACpBme,EAAM1gC,KAAK0I,OAA2C,MAAlCg4B,EAAM1gC,KAAK0I,MAAOg4B,EAAMne,OAQ/CvP,EAASrW,EAAO82B,IAAKiN,EAAM1gC,KAAM0gC,EAAMne,KAAM,IAErCvP,GAAqB,SAAXA,EAAwBA,EAAJ,GAT9B0tB,EAAM1gC,KAAM0gC,EAAMne,OAW3Ba,IAAK,SAAUsd,GAGT/jC,EAAO4kB,GAAGuhB,KAAMpC,EAAMne,MAC1B5lB,EAAO4kB,GAAGuhB,KAAMpC,EAAMne,MAAQme,GACnBA,EAAM1gC,KAAK0I,QAAgE,MAArDg4B,EAAM1gC,KAAK0I,MAAO/L,EAAOg4B,SAAU+L,EAAMne,QAAoB5lB,EAAOs3B,SAAUyM,EAAMne,OACrH5lB,EAAO+L,MAAOg4B,EAAM1gC,KAAM0gC,EAAMne,KAAMme,EAAMr4B,IAAMq4B,EAAME,MAExDF,EAAM1gC,KAAM0gC,EAAMne,MAASme,EAAMr4B,OASrC05B,GAAMhe,UAAUmF,UAAY6Y,GAAMhe,UAAU+E,YAC3C1F,IAAK,SAAUsd,GACTA,EAAM1gC,KAAKQ,UAAYkgC,EAAM1gC,KAAKe,aACtC2/B,EAAM1gC,KAAM0gC,EAAMne,MAASme,EAAMr4B,OAKpC1L,EAAO+E,MAAO,SAAU,OAAQ,QAAU,SAAUU,EAAGW,GACtD,GAAIggC,GAAQpmC,EAAOsB,GAAI8E,EACvBpG,GAAOsB,GAAI8E,GAAS,SAAUigC,EAAOhB,EAAQrgC,GAC5C,MAAgB,OAATqhC,GAAkC,iBAAVA,GAC9BD,EAAMhhC,MAAO9B,KAAM+B,WACnB/B,KAAKgjC,QAASC,GAAOngC,GAAM,GAAQigC,EAAOhB,EAAQrgC,MAIrDhF,EAAOsB,GAAG0E,QACTwgC,OAAQ,SAAUH,EAAOI,EAAIpB,EAAQrgC,GAGpC,MAAO1B,MAAKkQ,OAAQojB,IAAWE,IAAK,UAAW,GAAIE,OAGjDnxB,MAAMygC,SAAU/lB,QAASkmB,GAAMJ,EAAOhB,EAAQrgC,IAEjDshC,QAAS,SAAU1gB,EAAMygB,EAAOhB,EAAQrgC,GACvC,GAAIsT,GAAQtY,EAAOqI,cAAeud,GACjC8gB,EAAS1mC,EAAOqmC,MAAOA,EAAOhB,EAAQrgC,GACtC2hC,EAAc,WAEb,GAAIlB,GAAOlB,GAAWjhC,KAAMtD,EAAOgG,UAAY4f,GAAQ8gB,IAGlDpuB,GAAStY,EAAO+jB,MAAOzgB,KAAM,YACjCmiC,EAAKjhB,MAAM,GAKd,OAFCmiB,GAAYC,OAASD,EAEfruB,GAASouB,EAAOxiB,SAAU,EAChC5gB,KAAKyB,KAAM4hC,GACXrjC,KAAK4gB,MAAOwiB,EAAOxiB,MAAOyiB,IAE5BniB,KAAM,SAAU7hB,EAAMqiB,EAAYsgB,GACjC,GAAIuB,GAAY,SAAUxiB,GACzB,GAAIG,GAAOH,EAAMG,WACVH,GAAMG,KACbA,EAAM8gB,GAYP,OATqB,gBAAT3iC,KACX2iC,EAAUtgB,EACVA,EAAariB,EACbA,EAAOpD,GAEHylB,GAAcriB,KAAS,GAC3BW,KAAK4gB,MAAOvhB,GAAQ,SAGdW,KAAKyB,KAAK,WAChB,GAAIof,IAAU,EACbtG,EAAgB,MAARlb,GAAgBA,EAAO,aAC/BmkC,EAAS9mC,EAAO8mC,OAChBr+B,EAAOzI,EAAO+jB,MAAOzgB,KAEtB,IAAKua,EACCpV,EAAMoV,IAAWpV,EAAMoV,GAAQ2G,MACnCqiB,EAAWp+B,EAAMoV,QAGlB,KAAMA,IAASpV,GACTA,EAAMoV,IAAWpV,EAAMoV,GAAQ2G,MAAQmf,GAAK5/B,KAAM8Z,IACtDgpB,EAAWp+B,EAAMoV,GAKpB,KAAMA,EAAQipB,EAAOtjC,OAAQqa,KACvBipB,EAAQjpB,GAAQxa,OAASC,MAAiB,MAARX,GAAgBmkC,EAAQjpB,GAAQqG,QAAUvhB,IAChFmkC,EAAQjpB,GAAQ4nB,KAAKjhB,KAAM8gB,GAC3BnhB,GAAU,EACV2iB,EAAO/gC,OAAQ8X,EAAO,KAOnBsG,IAAYmhB,IAChBtlC,EAAOmkB,QAAS7gB,KAAMX,MAIzBikC,OAAQ,SAAUjkC,GAIjB,MAHKA,MAAS,IACbA,EAAOA,GAAQ,MAETW,KAAKyB,KAAK,WAChB,GAAI8Y,GACHpV,EAAOzI,EAAO+jB,MAAOzgB,MACrB4gB,EAAQzb,EAAM9F,EAAO,SACrB0hB,EAAQ5b,EAAM9F,EAAO,cACrBmkC,EAAS9mC,EAAO8mC,OAChBtjC,EAAS0gB,EAAQA,EAAM1gB,OAAS,CAajC,KAVAiF,EAAKm+B,QAAS,EAGd5mC,EAAOkkB,MAAO5gB,KAAMX,MAEf0hB,GAASA,EAAMG,MACnBH,EAAMG,KAAKhgB,KAAMlB,MAAM,GAIlBua,EAAQipB,EAAOtjC,OAAQqa,KACvBipB,EAAQjpB,GAAQxa,OAASC,MAAQwjC,EAAQjpB,GAAQqG,QAAUvhB,IAC/DmkC,EAAQjpB,GAAQ4nB,KAAKjhB,MAAM,GAC3BsiB,EAAO/gC,OAAQ8X,EAAO,GAKxB,KAAMA,EAAQ,EAAWra,EAARqa,EAAgBA,IAC3BqG,EAAOrG,IAAWqG,EAAOrG,GAAQ+oB,QACrC1iB,EAAOrG,GAAQ+oB,OAAOpiC,KAAMlB,YAKvBmF,GAAKm+B,WAMf,SAASL,IAAO5jC,EAAMokC,GACrB,GAAInb,GACH5Z,GAAUg1B,OAAQrkC,GAClB8C,EAAI,CAKL,KADAshC,EAAeA,EAAc,EAAI,EACtB,EAAJthC,EAAQA,GAAK,EAAIshC,EACvBnb,EAAQ2K,GAAW9wB,GACnBuM,EAAO,SAAW4Z,GAAU5Z,EAAO,UAAY4Z,GAAUjpB,CAO1D,OAJKokC,KACJ/0B,EAAMuO,QAAUvO,EAAM4Q,MAAQjgB,GAGxBqP,EAIRhS,EAAO+E,MACNkiC,UAAWV,GAAM,QACjBW,QAASX,GAAM,QACfY,YAAaZ,GAAM,UACnBa,QAAU7mB,QAAS,QACnB8mB,SAAW9mB,QAAS,QACpB+mB,YAAc/mB,QAAS,WACrB,SAAUna,EAAMolB,GAClBxrB,EAAOsB,GAAI8E,GAAS,SAAUigC,EAAOhB,EAAQrgC,GAC5C,MAAO1B,MAAKgjC,QAAS9a,EAAO6a,EAAOhB,EAAQrgC,MAI7ChF,EAAOqmC,MAAQ,SAAUA,EAAOhB,EAAQ/jC,GACvC,GAAIwe,GAAMumB,GAA0B,gBAAVA,GAAqBrmC,EAAOgG,UAAYqgC,IACjEjJ,SAAU97B,IAAOA,GAAM+jC,GACtBrlC,EAAOiE,WAAYoiC,IAAWA,EAC/BxB,SAAUwB,EACVhB,OAAQ/jC,GAAM+jC,GAAUA,IAAWrlC,EAAOiE,WAAYohC,IAAYA,EAwBnE,OArBAvlB,GAAI+kB,SAAW7kC,EAAO4kB,GAAGpd,IAAM,EAA4B,gBAAjBsY,GAAI+kB,SAAwB/kB,EAAI+kB,SACzE/kB,EAAI+kB,WAAY7kC,GAAO4kB,GAAGC,OAAS7kB,EAAO4kB,GAAGC,OAAQ/E,EAAI+kB,UAAa7kC,EAAO4kB,GAAGC,OAAO4F,UAGtE,MAAb3K,EAAIoE,OAAiBpE,EAAIoE,SAAU,KACvCpE,EAAIoE,MAAQ,MAIbpE,EAAIhU,IAAMgU,EAAIsd,SAEdtd,EAAIsd,SAAW,WACTp9B,EAAOiE,WAAY6b,EAAIhU,MAC3BgU,EAAIhU,IAAItH,KAAMlB,MAGVwc,EAAIoE,OACRlkB,EAAOmkB,QAAS7gB,KAAMwc,EAAIoE,QAIrBpE,GAGR9f,EAAOqlC,QACNkC,OAAQ,SAAUC,GACjB,MAAOA,IAERC,MAAO,SAAUD,GAChB,MAAO,GAAM7gC,KAAK+gC,IAAKF,EAAE7gC,KAAKghC,IAAO,IAIvC3nC,EAAO8mC,UACP9mC,EAAO4kB,GAAKwgB,GAAMniC,UAAU1B,KAC5BvB,EAAO4kB,GAAG8f,KAAO,WAChB,GAAIc,GACHsB,EAAS9mC,EAAO8mC,OAChBrhC,EAAI,CAIL,KAFA89B,GAAQvjC,EAAO0L,MAEHo7B,EAAOtjC,OAAXiC,EAAmBA,IAC1B+/B,EAAQsB,EAAQrhC,GAEV+/B,KAAWsB,EAAQrhC,KAAQ+/B,GAChCsB,EAAO/gC,OAAQN,IAAK,EAIhBqhC,GAAOtjC,QACZxD,EAAO4kB,GAAGJ,OAEX+e,GAAQhkC,GAGTS,EAAO4kB,GAAG4gB,MAAQ,SAAUA,GACtBA,KAAWxlC,EAAO8mC,OAAOrmC,KAAM+kC,IACnCxlC,EAAO4kB,GAAGhO,SAIZ5W,EAAO4kB,GAAGgjB,SAAW,GAErB5nC,EAAO4kB,GAAGhO,MAAQ,WACX4sB,KACLA,GAAUqE,YAAa7nC,EAAO4kB,GAAG8f,KAAM1kC,EAAO4kB,GAAGgjB,YAInD5nC,EAAO4kB,GAAGJ,KAAO,WAChBsjB,cAAetE,IACfA,GAAU,MAGXxjC,EAAO4kB,GAAGC,QACTkjB,KAAM,IACNC,KAAM,IAENvd,SAAU,KAIXzqB,EAAO4kB,GAAGuhB,QAELnmC,EAAO4U,MAAQ5U,EAAO4U,KAAKwE,UAC/BpZ,EAAO4U,KAAKwE,QAAQ6uB,SAAW,SAAU5kC,GACxC,MAAOrD,GAAO+K,KAAK/K,EAAO8mC,OAAQ,SAAUxlC,GAC3C,MAAO+B,KAAS/B,EAAG+B,OACjBG,SAGLxD,EAAOsB,GAAG4mC,OAAS,SAAU7hC,GAC5B,GAAKhB,UAAU7B,OACd,MAAO6C,KAAY9G,EAClB+D,KACAA,KAAKyB,KAAK,SAAUU,GACnBzF,EAAOkoC,OAAOC,UAAW7kC,KAAM+C,EAASZ,IAI3C,IAAI5F,GAASuoC,EACZC,GAAQn8B,IAAK,EAAGssB,KAAM,GACtBn1B,EAAOC,KAAM,GACbwP,EAAMzP,GAAQA,EAAKS,aAEpB,IAAMgP,EAON,MAHAjT,GAAUiT,EAAIhT,gBAGRE,EAAOmN,SAAUtN,EAASwD,UAMpBA,GAAKilC,wBAA0B5oC,IAC1C2oC,EAAMhlC,EAAKilC,yBAEZF,EAAMG,GAAWz1B,IAEhB5G,IAAKm8B,EAAIn8B,KAASk8B,EAAII,aAAe3oC,EAAQ0sB,YAAiB1sB,EAAQ2sB,WAAc,GACpFgM,KAAM6P,EAAI7P,MAAS4P,EAAIK,aAAe5oC,EAAQssB,aAAiBtsB,EAAQusB,YAAc,KAX9Eic,GAeTroC,EAAOkoC,QAENC,UAAW,SAAU9kC,EAAMgD,EAASZ,GACnC,GAAIywB,GAAWl2B,EAAO82B,IAAKzzB,EAAM,WAGf,YAAb6yB,IACJ7yB,EAAK0I,MAAMmqB,SAAW,WAGvB,IAAIwS,GAAU1oC,EAAQqD,GACrBslC,EAAYD,EAAQR,SACpBU,EAAY5oC,EAAO82B,IAAKzzB,EAAM,OAC9BwlC,EAAa7oC,EAAO82B,IAAKzzB,EAAM,QAC/BylC,GAAmC,aAAb5S,GAAwC,UAAbA,IAA0Bl2B,EAAO2K,QAAQ,QAASi+B,EAAWC,IAAe,GAC7Hrd,KAAYud,KAAkBC,EAAQC,CAGlCH,IACJC,EAAcL,EAAQxS,WACtB8S,EAASD,EAAY78B,IACrB+8B,EAAUF,EAAYvQ,OAEtBwQ,EAASlhC,WAAY8gC,IAAe,EACpCK,EAAUnhC,WAAY+gC,IAAgB,GAGlC7oC,EAAOiE,WAAYoC,KACvBA,EAAUA,EAAQ7B,KAAMnB,EAAMoC,EAAGkjC,IAGd,MAAftiC,EAAQ6F,MACZsf,EAAMtf,IAAQ7F,EAAQ6F,IAAMy8B,EAAUz8B,IAAQ88B,GAE1B,MAAhB3iC,EAAQmyB,OACZhN,EAAMgN,KAASnyB,EAAQmyB,KAAOmQ,EAAUnQ,KAASyQ,GAG7C,SAAW5iC,GACfA,EAAQ6iC,MAAM1kC,KAAMnB,EAAMmoB,GAE1Bkd,EAAQ5R,IAAKtL,KAMhBxrB,EAAOsB,GAAG0E,QAETkwB,SAAU,WACT,GAAM5yB,KAAM,GAAZ,CAIA,GAAI6lC,GAAcjB,EACjBkB,GAAiBl9B,IAAK,EAAGssB,KAAM,GAC/Bn1B,EAAOC,KAAM,EAwBd,OArBwC,UAAnCtD,EAAO82B,IAAKzzB,EAAM,YAEtB6kC,EAAS7kC,EAAKilC,yBAGda,EAAe7lC,KAAK6lC,eAGpBjB,EAAS5kC,KAAK4kC,SACRloC,EAAOmK,SAAUg/B,EAAc,GAAK,UACzCC,EAAeD,EAAajB,UAI7BkB,EAAal9B,KAAQlM,EAAO82B,IAAKqS,EAAc,GAAK,kBAAkB,GACtEC,EAAa5Q,MAAQx4B,EAAO82B,IAAKqS,EAAc,GAAK,mBAAmB,KAOvEj9B,IAAMg8B,EAAOh8B,IAAOk9B,EAAal9B,IAAMlM,EAAO82B,IAAKzzB,EAAM,aAAa,GACtEm1B,KAAM0P,EAAO1P,KAAO4Q,EAAa5Q,KAAOx4B,EAAO82B,IAAKzzB,EAAM,cAAc,MAI1E8lC,aAAc,WACb,MAAO7lC,MAAKsC,IAAI,WACf,GAAIujC,GAAe7lC,KAAK6lC,cAAgBtpC,CACxC,OAAQspC,IAAmBnpC,EAAOmK,SAAUg/B,EAAc,SAAsD,WAA1CnpC,EAAO82B,IAAKqS,EAAc,YAC/FA,EAAeA,EAAaA,YAE7B,OAAOA,IAAgBtpC,OAO1BG,EAAO+E,MAAOonB,WAAY,cAAeI,UAAW,eAAgB,SAAU0T,EAAQra,GACrF,GAAI1Z,GAAM,IAAInI,KAAM6hB,EAEpB5lB,GAAOsB,GAAI2+B,GAAW,SAAUnrB,GAC/B,MAAO9U,GAAOqL,OAAQ/H,KAAM,SAAUD,EAAM48B,EAAQnrB,GACnD,GAAIszB,GAAMG,GAAWllC,EAErB,OAAKyR,KAAQvV,EACL6oC,EAAOxiB,IAAQwiB,GAAOA,EAAKxiB,GACjCwiB,EAAIxoC,SAASE,gBAAiBmgC,GAC9B58B,EAAM48B,IAGHmI,EACJA,EAAIiB,SACFn9B,EAAYlM,EAAQooC,GAAMjc,aAApBrX,EACP5I,EAAM4I,EAAM9U,EAAQooC,GAAM7b,aAI3BlpB,EAAM48B,GAAWnrB,EAPlB,IASEmrB,EAAQnrB,EAAKzP,UAAU7B,OAAQ,QAIpC,SAAS+kC,IAAWllC,GACnB,MAAOrD,GAAO2H,SAAUtE,GACvBA,EACkB,IAAlBA,EAAKQ,SACJR,EAAK2P,aAAe3P,EAAKgnB,cACzB,EAGHrqB,EAAO+E,MAAQukC,OAAQ,SAAUC,MAAO,SAAW,SAAUnjC,EAAMzD,GAClE3C,EAAO+E,MAAQ00B,QAAS,QAAUrzB,EAAMktB,QAAS3wB,EAAM,GAAI,QAAUyD,GAAQ,SAAUojC,EAAcC,GAEpGzpC,EAAOsB,GAAImoC,GAAa,SAAUjQ,EAAQnvB,GACzC,GAAIiB,GAAYjG,UAAU7B,SAAYgmC,GAAkC,iBAAXhQ,IAC5DtB,EAAQsR,IAAkBhQ,KAAW,GAAQnvB,KAAU,EAAO,SAAW,SAE1E,OAAOrK,GAAOqL,OAAQ/H,KAAM,SAAUD,EAAMV,EAAM0H,GACjD,GAAIyI,EAEJ,OAAK9S,GAAO2H,SAAUtE,GAIdA,EAAKzD,SAASE,gBAAiB,SAAWsG,GAI3B,IAAlB/C,EAAKQ,UACTiP,EAAMzP,EAAKvD,gBAIJ6G,KAAKiE,IACXvH,EAAK+D,KAAM,SAAWhB,GAAQ0M,EAAK,SAAW1M,GAC9C/C,EAAK+D,KAAM,SAAWhB,GAAQ0M,EAAK,SAAW1M,GAC9C0M,EAAK,SAAW1M,KAIXiE,IAAU9K,EAEhBS,EAAO82B,IAAKzzB,EAAMV,EAAMu1B,GAGxBl4B,EAAO+L,MAAO1I,EAAMV,EAAM0H,EAAO6tB,IAChCv1B,EAAM2I,EAAYkuB,EAASj6B,EAAW+L,EAAW,WAQvDtL,EAAOsB,GAAGooC,KAAO,WAChB,MAAOpmC,MAAKE,QAGbxD,EAAOsB,GAAGqoC,QAAU3pC,EAAOsB,GAAG6tB,QAGP,gBAAXya,SAAuBA,QAAoC,gBAAnBA,QAAOC,QAK1DD,OAAOC,QAAU7pC,GAGjBV,EAAOU,OAASV,EAAOY,EAAIF,EASJ,kBAAX8pC,SAAyBA,OAAOC,KAC3CD,OAAQ,YAAc,WAAc,MAAO9pC,QAIzCV"} \ No newline at end of file diff --git a/web/libs/js/main.dash2.js b/web/libs/js/main.dash2.js index ccf8f3f..e50738e 100644 --- a/web/libs/js/main.dash2.js +++ b/web/libs/js/main.dash2.js @@ -12,15 +12,40 @@ $.ccio={ fr:$('#files_recent'), mon:{} }; -<% if(config.useUTC){ %> -$.ccio.timeObject = function(date){ - return moment.utc(date).local() +$.ccio.permissionCheck = function(toCheck,monitorId){ + var details = $user.details + if(details.sub && details.allmonitors === '0'){ + var chosenValue = details[toCheck] + if(details[toCheck] instanceof Array && chosenValue.indexOf(monitorId) > -1){ + return true + }else if(chosenValue === '1'){ + return true + } + }else{ + return true + } + return false } -<% }else{ %> -$.ccio.timeObject = function(date){ - return moment(date) +$.ccio.downloadJSON = function(jsonToDownload,filename,errorResponse){ + var arr = jsonToDownload; + if(arr.length===0 && errorResponse){ + errorResponse.type = 'error' + $.ccio.init('note',errorResponse); + return + } + var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(arr,null,3)); + $('#temp').html('') + .find('a') + .attr('href',dataStr) + .attr('download',filename) + [0].click() +} +$.ccio.timeObject = function(time,isUTC){ + if(isUTC === true){ + return moment(time).utc() + } + return moment(time) } -<% } %> if(!$user.details.lang||$user.details.lang==''){ $user.details.lang="<%-config.language%>" } @@ -158,10 +183,40 @@ switch($user.details.lang){ url=url+'/' } }else{ - url='' + url = '<%-originalURL%>' } return url break; + case'videoUrlBuild': + var url + if(d.href){ + url = d.href + }else if(!d.href && d.hrefNoAuth){ + url = $.ccio.init('location',user)+user.auth_token+d.hrefNoAuth + } + if(user!==$user&&url.charAt(0)==='/'){ + url = $.ccio.init('location',user)+d.href.substring(1) + } + return url + break; + case'videoHrefToDelete': + var urlSplit = d.split('?') + var url = urlSplit[0]+'/delete' + if(urlSplit[1])url += '?' + urlSplit[1] + return url + break; + case'videoHrefToUnread': + var urlSplit = d.split('?') + var url = urlSplit[0]+'/status/1' + if(urlSplit[1])url += '?' + urlSplit[1] + return url + break; + case'videoHrefToRead': + var urlSplit = d.split('?') + var url = urlSplit[0]+'/status/2' + if(urlSplit[1])url += '?' + urlSplit[1] + return url + break; // case'streamWindow': // return $('.monitor_item[mid="'+d.id+'"][ke="'+d.ke+'"][auth="'+user.auth_token+'"]') // break; @@ -369,6 +424,7 @@ switch($user.details.lang){ d.e.find('.monitor_ext').text(d.mon.ext); d.mode=$.ccio.init('humanReadMode',d.mon.mode,user) d.e.find('.monitor_mode').text(d.mode) + d.e.find('.monitor_status').text(d.status) d.e.attr('mode',d.mode) d.e.find('.lamp').attr('title',d.mode) break; @@ -463,6 +519,19 @@ switch($user.details.lang){ }) return $.ccio.mon_groups; break; + case'closeVideo': + var el = $('#monitor_live_'+d.mid+user.auth_token) + var video = el.find('video') + if(video.length === 1){ + if(!video[0].paused){ + video[0].onerror = function(){} + video[0].pause() + } + video.prop('src',''); + video.find('source').remove(); + video.remove(); + } + break; case'jpegModeStop': clearTimeout($.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval); delete($.ccio.mon[d.ke+d.mid+user.auth_token].jpegInterval); @@ -492,15 +561,6 @@ switch($user.details.lang){ $.ccio.init('jpegMode',v,user) }); break; - case'dragWindows': - console.log('Deprecated : dragWindows') -// k.e=$("#monitors_live"); -// if(k.e.disableSelection){k.e.disableSelection()}; -// k.e.sortable({ -// handle: ".mdl-card__supporting-text", -// placeholder: "ui-state-highlight col-md-6" -// }); - break; case'getLocation': var l = document.createElement("a"); l.href = d; @@ -834,25 +894,18 @@ switch($user.details.lang){ if(d.id&&!d.mid){d.mid=d.id;} switch(x){ case 0://video - var href - if(d.href){ - href = d.href - }else if(!d.href && d.hrefNoAuth){ - href = $.ccio.init('location',user)+user.auth_token+d.hrefNoAuth - } - if(user!==$user&&href.charAt(0)==='/'){ - href = $.ccio.init('location',user)+d.href.substring(1) - } - href = 'href="'+href+'"' - if(!d.filename){d.filename=$.ccio.init('tf',d.time)+'.'+d.ext;} + var url = $.ccio.init('videoUrlBuild',d) + href = 'href="'+url+'"' +// if(!d.filename){d.filename=$.ccio.init('tf',d.time)+'.'+d.ext;} d.dlname=d.mid+'-'+d.filename; - d.mom=$.ccio.timeObject(d.time), - d.hr=parseInt(d.mom.format('HH')), + d.startMoment=$.ccio.timeObject(d.time), + d.endMoment=$.ccio.timeObject(d.end), + d.hr=parseInt(d.startMoment.format('HH')), d.per=parseInt(d.hr/24*100); - d.circle='
'+d.hr+'
' - tmp+='
  • '+d.circle+'
    <%-cleanLang(lang.Start)%> : '+$.ccio.timeObject(d.time).format('h:mm:ss , MMMM Do YYYY')+'
    <%-cleanLang(lang.End)%> : '+$.ccio.timeObject(d.end).format('h:mm:ss , MMMM Do YYYY')+'
    '+(parseInt(d.size)/1000000).toFixed(2)+'mb
    ' + d.circle='
    '+d.hr+'
    ' + tmp+='
  • '+d.circle+'
    <%-cleanLang(lang.Start)%> : '+d.startMoment.format('h:mm:ss , MMMM Do YYYY')+'
    <%-cleanLang(lang.End)%> : '+d.endMoment.format('h:mm:ss , MMMM Do YYYY')+'
    '+(parseInt(d.size)/1000000).toFixed(2)+'mb
    ' <% if(config.DropboxAppKey){ %> tmp+='' <% } %> - tmp+='
  • '; + tmp+=''; $(z).each(function(n,v){ v=$(v); if(v.find('.video-item').length>10){v.find('.video-item:last').remove()} @@ -860,7 +913,46 @@ switch($user.details.lang){ break; case 1://monitor icon d.src=placeholder.getData(placeholder.plcimg({bgcolor:'#b57d00',text:'...'})); - tmp+='
    '+d.name+'
    '+d.mid+'
    <%-cleanLang(lang['Save as'])%> : '+d.ext+'
    Mode : '+d.mode+'
    '; + tmp+='
    '+d.name+'
    '+d.mid+'
    <%-cleanLang(lang['Save as'])%> : '+d.ext+'
    Status : '+d.status+'
    ' + tmp+='
    ' + var buttons = { + "Pop": { + "label": "Pop", + "attr": "monitor=\"pop\"", + "class": "default", + "icon": "external-link" + }, + "Power Viewer": { + "label": "Power Viewer", + "attr": "monitor=\"powerview\"", + "class": "default", + "icon": "map-marker" + }, + "Videos List": { + "label": "Videos List", + "attr": "monitor=\"videos_table\"", + "class": "default", + "icon": "film" + }, + "Monitor Settings": { + "label": "Monitor Settings", + "attr": "monitor=\"edit\"", + "class": "default", + "icon": "wrench" + } + } + if(!$.ccio.permissionCheck('video_view',d.mid)){ + delete(buttons["Videos List"]) + delete(buttons["Power Viewer"]) + } + if(!$.ccio.permissionCheck('monitor_edit',d.mid)){ + delete(buttons["Monitor Settings"]) + } + $.each(buttons,function(n,v){ + tmp+='' + }) + tmp+='
    \ +
    '; delete(d.src); break; case 2://monitor stream @@ -876,30 +968,97 @@ switch($user.details.lang){ ],function(n,v){ tmp+='
    '+v.label+' :
    ' }) - tmp+=''; + tmp+='' tmp+='
    '; tmp+='
    '; tmp+='
    '; tmp+='
    '+d.name+', <%-cleanLang(lang['Recording FPS'])%> : '+d.fps+'
    '; tmp+='
    '; tmp+='
    '//start of btn list - $.each([ - {label:"<%-cleanLang(lang.Snapshot)%>",attr:'monitor="snapshot"',class:'primary',icon:'camera'}, - {label:"<%-cleanLang(lang['Show Logs'])%>",attr:'monitor="show_data"',class:'warning',icon:'exclamation-triangle'}, -// {label:"<%-cleanLang(lang['Show Logs'])%>",attr:'class_toggle="show_data" data-target="'+dataTarget+'"',class:'warning',icon:'exclamation-triangle'}, - {label:"<%-cleanLang(lang.Control)%>",attr:'monitor="control_toggle"',class:'default arrows',icon:'arrows'}, - {label:"<%-cleanLang(lang['Status Indicator'])%>",attr:'monitor="watch_on"',class:'success signal',icon:'plug'}, - {label:"<%-cleanLang(lang['Detector'])%>",attr:'monitor="motion"',class:'warning',icon:'grav'}, - {label:"<%-cleanLang(lang.Pop)%>",attr:'monitor="pop"',class:'default',icon:'external-link'}, -// {label:"<%-cleanLang(lang.Magnify)%>",attr:'monitor="magnify"',class:'default',icon:'search-plus'}, - {label:"<%-cleanLang(lang.Calendar)%>",attr:'monitor="calendar"',class:'default',icon:'calendar'}, - {label:"<%-cleanLang(lang['Power Viewer'])%>",attr:'monitor="powerview"',class:'default',icon:'map-marker'}, - {label:"<%-cleanLang(lang['Time-lapse'])%>",attr:'monitor="timelapse"',class:'default',icon:'angle-double-right'}, - {label:"<%-cleanLang(lang['Videos List'])%>",attr:'monitor="videos_table"',class:'default',icon:'film'}, - {label:"<%-cleanLang(lang['Monitor Settings'])%>",attr:'monitor="edit"',class:'default permission_monitor_edit',icon:'wrench'}, - {label:"<%-cleanLang(lang.Fullscreen)%>",attr:'monitor="fullscreen"',class:'default',icon:'arrows-alt'}, - {label:"<%-cleanLang(lang.Close)%>",attr:'monitor="watch_off"',class:'danger',icon:'times'}, - ],function(n,v){ + var buttons = { + "Snapshot": { + "label": "Snapshot", + "attr": "monitor=\"snapshot\"", + "class": "primary", + "icon": "camera" + }, + "Show Logs": { + "label": "Show Logs", + "attr": "monitor=\"show_data\"", + "class": "warning", + "icon": "exclamation-triangle" + }, + "Control": { + "label": "Control", + "attr": "monitor=\"control_toggle\"", + "class": "default arrows", + "icon": "arrows" + }, + "Status Indicator": { + "label": "Status Indicator", + "attr": "monitor=\"watch_on\"", + "class": "success signal", + "icon": "plug" + }, + "Pop": { + "label": "Pop", + "attr": "monitor=\"pop\"", + "class": "default", + "icon": "external-link" + }, + "Calendar": { + "label": "Calendar", + "attr": "monitor=\"calendar\"", + "class": "default ", + "icon": "calendar" + }, + "Power Viewer": { + "label": "Power Viewer", + "attr": "monitor=\"powerview\"", + "class": "default", + "icon": "map-marker" + }, + "Time-lapse": { + "label": "Time-lapse", + "attr": "monitor=\"timelapse\"", + "class": "default", + "icon": "angle-double-right" + }, + "Videos List": { + "label": "Videos List", + "attr": "monitor=\"videos_table\"", + "class": "default", + "icon": "film" + }, + "Monitor Settings": { + "label": "Monitor Settings", + "attr": "monitor=\"edit\"", + "class": "default", + "icon": "wrench" + }, + "Fullscreen": { + "label": "Fullscreen", + "attr": "monitor=\"fullscreen\"", + "class": "default", + "icon": "arrows-alt" + }, + "Close": { + "label": "Close", + "attr": "monitor=\"watch_off\"", + "class": "danger", + "icon": "times" + } + } + if(!$.ccio.permissionCheck('video_view',d.mid)){ + delete(buttons["Videos List"]) + delete(buttons["Time-lapse"]) + delete(buttons["Power Viewer"]) + delete(buttons["Calendar"]) + } + if(!$.ccio.permissionCheck('monitor_edit',d.mid)){ + delete(buttons["Monitor Settings"]) + } + $.each(buttons,function(n,v){ tmp+='' }) tmp+='
    ';//end of btn list @@ -976,6 +1135,11 @@ switch($user.details.lang){ } } k.e.append(tmp).find('.stream-element').resize(); + if($.ccio.op().switches.monitorMuteAudio === 1){ + k.e.find('video').each(function(n,el){ + el.muted = "muted" + }) + } break; case'user-row': d.e=$('.user-row[uid="'+d.uid+'"][ke="'+d.ke+'"]') @@ -1287,7 +1451,7 @@ switch($user.details.lang){ tmp+='
    ' tmp+='
    ' tmp+='