/*! quagga 2015-07-14 */
! function ( a , b ) { var c = b . toString ( ) ; "undefined" != typeof module ? module . exports = b ( c ) : a . Quagga = b ( c ) } ( this , function ( a ) { / * *
* @ license almond 0.2 . 9 Copyright ( c ) 2011 - 2014 , The Dojo Foundation All Rights Reserved .
* Available via the MIT or new BSD license .
* see : http : //github.com/jrburke/almond for details
* /
var b , c , d ; ! function ( a ) { function e ( a , b ) { return u . call ( a , b ) } function f ( a , b ) { var c , d , e , f , g , h , i , j , k , l , m , n = b && b . split ( "/" ) , o = s . map , p = o && o [ "*" ] || { } ; if ( a && "." === a . charAt ( 0 ) ) if ( b ) { for ( n = n . slice ( 0 , n . length - 1 ) , a = a . split ( "/" ) , g = a . length - 1 , s . nodeIdCompat && w . test ( a [ g ] ) && ( a [ g ] = a [ g ] . replace ( w , "" ) ) , a = n . concat ( a ) , k = 0 ; k < a . length ; k += 1 ) if ( m = a [ k ] , "." === m ) a . splice ( k , 1 ) , k -= 1 ; else if ( ".." === m ) { if ( 1 === k && ( ".." === a [ 2 ] || ".." === a [ 0 ] ) ) break ; k > 0 && ( a . splice ( k - 1 , 2 ) , k -= 2 ) } a = a . join ( "/" ) } else 0 === a . indexOf ( "./" ) && ( a = a . substring ( 2 ) ) ; if ( ( n || p ) && o ) { for ( c = a . split ( "/" ) , k = c . length ; k > 0 ; k -= 1 ) { if ( d = c . slice ( 0 , k ) . join ( "/" ) , n ) for ( l = n . length ; l > 0 ; l -= 1 ) if ( e = o [ n . slice ( 0 , l ) . join ( "/" ) ] , e && ( e = e [ d ] ) ) { f = e , h = k ; break } if ( f ) break ; ! i && p && p [ d ] && ( i = p [ d ] , j = k ) } ! f && i && ( f = i , h = j ) , f && ( c . splice ( 0 , h , f ) , a = c . join ( "/" ) ) } return a } function g ( b , c ) { return function ( ) { return n . apply ( a , v . call ( arguments , 0 ) . concat ( [ b , c ] ) ) } } function h ( a ) { return function ( b ) { return f ( b , a ) } } function i ( a ) { return function ( b ) { q [ a ] = b } } function j ( b ) { if ( e ( r , b ) ) { var c = r [ b ] ; delete r [ b ] , t [ b ] = ! 0 , m . apply ( a , c ) } if ( ! e ( q , b ) && ! e ( t , b ) ) throw new Error ( "No " + b ) ; return q [ b ] } function k ( a ) { var b , c = a ? a . indexOf ( "!" ) : - 1 ; return c > - 1 && ( b = a . substring ( 0 , c ) , a = a . substring ( c + 1 , a . length ) ) , [ b , a ] } function l ( a ) { return function ( ) { return s && s . config && s . config [ a ] || { } } } var m , n , o , p , q = { } , r = { } , s = { } , t = { } , u = Object . prototype . hasOwnProperty , v = [ ] . slice , w = /\.js$/ ; o = function ( a , b ) { var c , d = k ( a ) , e = d [ 0 ] ; return a = d [ 1 ] , e && ( e = f ( e , b ) , c = j ( e ) ) , e ? a = c && c . normalize ? c . normalize ( a , h ( b ) ) : f ( a , b ) : ( a = f ( a , b ) , d = k ( a ) , e = d [ 0 ] , a = d [ 1 ] , e && ( c = j ( e ) ) ) , { f : e ? e + "!" + a : a , n : a , pr : e , p : c } } , p = { require : function ( a ) { return g ( a ) } , exports : function ( a ) { var b = q [ a ] ; return "undefined" != typeof b ? b : q [ a ] = { } } , module : function ( a ) { return { id : a , uri : "" , exports : q [ a ] , config : l ( a ) } } } , m = function ( b , c , d , f ) { var h , k , l , m , n , s , u = [ ] , v = typeof d ; if ( f = f || b , "undefined" === v || "function" === v ) { for ( c = ! c . length && d . length ? [ "require" , "exports" , "module" ] : c , n = 0 ; n < c . length ; n += 1 ) if ( m = o ( c [ n ] , f ) , k = m . f , "require" === k ) u [ n ] = p . require ( b ) ; else if ( "exports" === k ) u [ n ] = p . exports ( b ) , s = ! 0 ; else if ( "module" === k ) h = u [ n ] = p . module ( b ) ; else if ( e ( q , k ) || e ( r , k ) || e ( t , k ) ) u [ n ] = j ( k ) ; else { if ( ! m . p ) throw new Error ( b + " missing " + k ) ; m . p . load ( m . n , g ( f , ! 0 ) , i ( k ) , { } ) , u [ n ] = q [ k ] } l = d ? d . apply ( q [ b ] , u ) : void 0 , b && ( h && h . exports !== a && h . exports !== q [ b ] ? q [ b ] = h . exports : l === a && s || ( q [ b ] = l ) ) } else b && ( q [ b ] = d ) } , b = c = n = function ( b , c , d , e , f ) { if ( "string" == typeof b ) return p [ b ] ? p [ b ] ( c ) : j ( o ( b , c ) . f ) ; if ( ! b . splice ) { if ( s = b , s . deps && n ( s . deps , s . callback ) , ! c ) return ; c . splice ? ( b = c , c = d , d = null ) : b = a } return c = c || function ( ) { } , "function" == typeof d && ( d = e , e = f ) , e ? m ( a , b , c , d ) : setTimeout ( function ( ) { m ( a , b , c , d ) } , 4 ) , n } , n . config = function ( a ) { return n ( a ) } , b . _defined = q , d = function ( a , b , c ) { b . splice || ( c = b , b = [ ] ) , e ( q , a ) || e ( r , a ) || ( r [ a ] = [ a , b , c ] ) } , d . amd = { jQuery : ! 0 } } ( ) , d ( "almond" , function ( ) { } ) , d ( "image_loader" , [ ] , function ( ) { "use strict" ; function a ( a , b ) { a . onload = function ( ) { b . loaded ( this ) } } var b = { } ; return b . load = function ( b , c , d , e , f ) { var g , h , i , j = new Array ( e ) , k = new Array ( j . length ) ; if ( f === ! 1 ) j [ 0 ] = b ; else for ( g = 0 ; g < j . length ; g ++ ) i = d + g , j [ g ] = b + "image-" + ( "00" + i ) . slice ( - 3 ) + ".jpg" ; for ( k . notLoaded = [ ] , k . addImage = function ( a ) { k . notLoaded . push ( a ) } , k . loaded = function ( a ) { for ( var b = k . notLoaded , d = 0 ; d < b . length ; d ++ ) if ( b [ d ] == a ) { b . splice ( d , 1 ) ; for ( var e = 0 ; e < j . length ; e ++ ) { var f = j [ e ] . substr ( j [ e ] . lastIndexOf ( "/" ) ) ; if ( - 1 != a . src . lastIndexOf ( f ) ) { k [ e ] = a ; break } } break } 0 === b . length && ( console . log ( "Images loaded" ) , c . apply ( null , [ k ] ) ) } , g = 0 ; g < j . length ; g ++ ) h = new Image , k . addImage ( h ) , a ( h , k ) , h . src = j [ g ] } , b } ) , d ( "input_stream" , [ "image_loader" ] , function ( a ) { "use strict" ; var b = { } ; return b . createVideoStream = function ( a ) { function b ( ) { var b = a . videoWidth , e = a . videoHeight ; c = f . size ? b / e > 1 ? f . size : Math . floor ( b / e * f . size ) : b , d = f . size ? b / e > 1 ? Math . floor ( e / b * f . size ) : f . size : e , j . x = c , j . y = d } var c , d , e = { } , f = null , g = [ "canrecord" , "ended" ] , h = { } , i = { x : 0 , y : 0 } , j = { x : 0 , y : 0 } ; return e . getRealWidth = function ( ) { return a . videoWidth } , e . getRealHeight = function ( ) { return a . videoHeight } , e . getWidth = function ( ) { return c } , e . getHeight = function ( ) { return d } , e . setWidth = function ( a ) { c = a } , e . setHeight = function ( a ) { d = a } , e . setInputStream = function ( b ) { f = b , a . src = "undefined" != typeof b . src ? b . src : "" } , e . ended = function ( ) { return a . ended } , e . getConfig = function ( ) { return f } , e . setAttribut
return b > 0 && ( c = Math . abs ( a [ b ] - m ) > Math . abs ( a [ b - 1 ] - m ) ? a [ b - 1 ] : a [ b ] ) , m / c < i [ k + 1 ] / i [ k ] && m / c > i [ k - 1 ] / i [ k ] ? { x : c , y : c } : null } var d , e = this . _computeDivisors ( b . x ) , f = this . _computeDivisors ( b . y ) , g = Math . max ( b . x , b . y ) , h = this . _computeIntersection ( e , f ) , i = [ 8 , 10 , 15 , 20 , 32 , 60 , 80 ] , j = { "x-small" : 5 , small : 4 , medium : 3 , large : 2 , "x-large" : 1 } , k = j [ a ] || j . medium , l = i [ k ] , m = Math . floor ( g / l ) ; return d = c ( h ) , d || ( d = c ( this . _computeDivisors ( g ) ) , d || ( d = c ( this . _computeDivisors ( m * l ) ) ) ) , d } , d . _parseCSSDimensionValues = function ( a ) { var b = { value : parseFloat ( a ) , unit : a . indexOf ( "%" ) === a . length - 1 ? "%" : "%" } ; return b } , d . _dimensionsConverters = { top : function ( a , b ) { return "%" === a . unit ? Math . floor ( b . height * ( a . value / 100 ) ) : void 0 } , right : function ( a , b ) { return "%" === a . unit ? Math . floor ( b . width - b . width * ( a . value / 100 ) ) : void 0 } , bottom : function ( a , b ) { return "%" === a . unit ? Math . floor ( b . height - b . height * ( a . value / 100 ) ) : void 0 } , left : function ( a , b ) { return "%" === a . unit ? Math . floor ( b . width * ( a . value / 100 ) ) : void 0 } } , d . computeImageArea = function ( a , b , c ) { var e = { width : a , height : b } , f = Object . keys ( c ) . reduce ( function ( a , b ) { var f = c [ b ] , g = d . _parseCSSDimensionValues ( f ) , h = d . _dimensionsConverters [ b ] ( g , e ) ; return a [ b ] = h , a } , { } ) ; return { sx : f . left , sy : f . top , sw : f . right - f . left , sh : f . bottom - f . top } } , d } ) , d ( "image_wrapper" , [ "subImage" , "cv_utils" , "array_helper" ] , function ( a , b , c ) { "use strict" ; function d ( a , b , d , e ) { b ? this . data = b : d ? ( this . data = new d ( a . x * a . y ) , d === Array && e && c . init ( this . data , 0 ) ) : ( this . data = new Uint8Array ( a . x * a . y ) , Uint8Array === Array && e && c . init ( this . data , 0 ) ) , this . size = a } return d . prototype . inImageWithBorder = function ( a , b ) { return a . x >= b && a . y >= b && a . x < this . size . x - b && a . y < this . size . y - b } , d . transform = function ( a , b , c , e , f ) { var g , h , k , l = b . size . x , m = b . size . y , n = a . size . x , o = a . size . y , p = j . create ( [ c [ 0 ] , c [ 2 ] ] ) , q = j . create ( [ c [ 1 ] , c [ 3 ] ] ) , r = 0 , s = j . subtract ( e , i . xVec2 ( c , f , j . create ( ) ) , j . create ( ) ) , t = s [ 0 ] , u = s [ 1 ] , v = t , w = u , x = d . sample ; p [ 0 ] < 0 ? t += l * p [ 0 ] : v += l * p [ 0 ] , q [ 0 ] < 0 ? t += m * q [ 0 ] : v += m * q [ 0 ] , p [ 1 ] < 0 ? u += l * p [ 1 ] : w += l * p [ 1 ] , q [ 1 ] < 0 ? u += m * q [ 1 ] : w += m * q [ 1 ] ; var y = j . subtract ( q , j . scale ( p , l , j . create ( ) ) , j . create ( ) ) ; if ( t >= 0 && u >= 0 && n - 1 > v && o - 1 > w ) { for ( g = s , h = 0 ; m > h ; ++ h , j . add ( g , y ) ) for ( k = 0 ; l > k ; ++ k , j . add ( g , p ) ) b . set ( k , h , x ( a , g [ 0 ] , g [ 1 ] ) ) ; return 0 } var z = n - 1 , A = o - 1 , B = 0 ; for ( g = s , h = 0 ; m > h ; ++ h , j . add ( g , y ) ) for ( k = 0 ; l > k ; ++ k , j . add ( g , p ) ) 0 <= g [ 0 ] && 0 <= g [ 1 ] && g [ 0 ] < z && g [ 1 ] < A ? b . set ( k , h , x ( a , g [ 0 ] , g [ 1 ] ) ) : ( b . set ( k , h , r ) , ++ B ) ; return B } , d . sample = function ( a , b , c ) { var d = Math . floor ( b ) , e = Math . floor ( c ) , f = a . size . x , g = e * a . size . x + d , h = a . data [ g + 0 ] , i = a . data [ g + 1 ] , j = a . data [ g + f ] , k = a . data [ g + f + 1 ] , l = h - i ; b -= d , c -= e ; var m = Math . floor ( b * ( c * ( l - j + k ) - l ) + c * ( j - h ) + h ) ; return m } , d . clearArray = function ( a ) { for ( var b = a . length ; b -- ; ) a [ b ] = 0 } , d . prototype . subImage = function ( b , c ) { return new a ( b , c , this ) } , d . prototype . subImageAsCopy = function ( a , b ) { var c , d , e = a . size . y , f = a . size . x ; for ( c = 0 ; f > c ; c ++ ) for ( d = 0 ; e > d ; d ++ ) a . data [ d * f + c ] = this . data [ ( b . y + d ) * this . size . x + b . x + c ] } , d . prototype . copyTo = function ( a ) { for ( var b = this . data . length , c = this . data , d = a . data ; b -- ; ) d [ b ] = c [ b ] } , d . prototype . get = function ( a , b ) { return this . data [ b * this . size . x + a ] } , d . prototype . getSafe = function ( a , b ) { var c ; if ( ! this . indexMapping ) { for ( this . indexMapping = { x : [ ] , y : [ ] } , c = 0 ; c < this . size . x ; c ++ ) this . indexMapping . x [ c ] = c , this . indexMapping . x [ c + this . size . x ] = c ; for ( c = 0 ; c < this . size . y ; c ++ ) this . indexMapping . y [ c ] = c , this . indexMapping . y [ c + this . size . y ] = c } return this . data [ this . indexMapping . y [ b + this . size . y ] * this . size . x + this . indexMapping . x [ a + this . size . x ] ] } , d . prototype . set = function ( a , b , c ) { return this . data [ b * this . size . x + a ] = c , this } , d . prototype . zeroBorder = function ( ) { var a , b = this . size . x , c = this . size . y , d = this . data ; for ( a = 0 ; b > a ; a ++ ) d [ a ] = d [ ( c - 1 ) * b + a ] = 0 ; for ( a = 1 ; c - 1 > a ; a ++ ) d [ a * b ] = d [ a * b + ( b - 1 ) ] = 0 } , d . prototype . invert = function ( ) { for ( var a = this . data , b = a . length ; b -- ; ) a [ b ] = a [ b ] ? 0 : 1 } , d . prototype . convolve = function ( a ) { var b , c , d , e , f = a . length / 2 | 0 , g = 0 ; for ( c = 0 ; c < this . size . y ; c ++ ) for ( b = 0 ; b < this . size . x ; b ++ ) { for ( g = 0 , e = - f ; f >= e ; e ++ ) for ( d = - f ; f >= d ; d ++ ) g += a [ e + f ] [ d + f ] * this . getSafe ( b + d , c + e ) ; this . data [ c * this . size . x + b ] = g } } , d . prototype . moments = function ( a ) { var b , c , d , e , f , g , h , i , k , l , m , n , o = this . data , p = this . size . y , q = this . size . x , r = [ ] , s = [ ] , t = Math . PI , u = t / 4 ; if ( 0 >= a ) return s ; for ( f = 0 ; a > f ; f ++ ) r [ f ] = { m00 : 0 , m01 : 0 , m10 : 0 , m11 : 0 , m02 : 0 , m20 : 0 , theta : 0 , rad : 0 } ; for ( c = 0 ; p > c ; c ++ ) for ( e = c * c , b = 0 ; q > b ; b ++ ) d = o [ c * q + b ] , d > 0 && ( g = r [ d - 1 ] , g . m00 += 1 , g . m01 += c
return a } ) , d ( "image_debug" , [ ] , function ( ) { "use strict" ; return { drawRect : function ( a , b , c , d ) { c . strokeStyle = d . color , c . fillStyle = d . color , c . lineWidth = 1 , c . beginPath ( ) , c . strokeRect ( a . x , a . y , b . x , b . y ) } , drawPath : function ( a , b , c , d ) { c . strokeStyle = d . color , c . fillStyle = d . color , c . lineWidth = d . lineWidth , c . beginPath ( ) , c . moveTo ( a [ 0 ] [ b . x ] , a [ 0 ] [ b . y ] ) ; for ( var e = 1 ; e < a . length ; e ++ ) c . lineTo ( a [ e ] [ b . x ] , a [ e ] [ b . y ] ) ; c . closePath ( ) , c . stroke ( ) } , drawImage : function ( a , b , c ) { var d , e = c . getImageData ( 0 , 0 , b . x , b . y ) , f = e . data , g = a . length , h = f . length ; if ( h / g !== 4 ) return ! 1 ; for ( ; g -- ; ) d = a [ g ] , f [ -- h ] = 255 , f [ -- h ] = d , f [ -- h ] = d , f [ -- h ] = d ; return c . putImageData ( e , 0 , 0 ) , ! 0 } } } ) , d ( "barcode_locator" , [ "image_wrapper" , "cv_utils" , "rasterizer" , "tracer" , "skeletonizer" , "array_helper" , "image_debug" ] , function ( a , b , c , d , e , f , g ) { function h ( ) { var c ; v = u . halfSample ? new a ( { x : E . size . x / 2 | 0 , y : E . size . y / 2 | 0 } ) : E , D = b . calculatePatchSize ( u . patchSize , v . size ) , H . x = v . size . x / D . x | 0 , H . y = v . size . y / D . y | 0 , C = new a ( v . size , void 0 , Uint8Array , ! 1 ) , y = new a ( D , void 0 , Array , ! 0 ) , c = new ArrayBuffer ( 65536 ) , x = new a ( D , new Uint8Array ( c , 0 , D . x * D . y ) ) , w = new a ( D , new Uint8Array ( c , D . x * D . y * 3 , D . x * D . y ) , void 0 , ! 0 ) , F = e ( I , { size : D . x } , c ) , B = new a ( { x : v . size . x / x . size . x | 0 , y : v . size . y / x . size . y | 0 } , void 0 , Array , ! 0 ) , z = new a ( B . size , void 0 , void 0 , ! 0 ) , A = new a ( B . size , void 0 , Int32Array , ! 0 ) } function k ( ) { u . useWorker || "undefined" == typeof document || ( G . dom . binary = document . createElement ( "canvas" ) , G . dom . binary . className = "binaryBuffer" , u . showCanvas === ! 0 && document . querySelector ( "#debug" ) . appendChild ( G . dom . binary ) , G . ctx . binary = G . dom . binary . getContext ( "2d" ) , G . dom . binary . width = C . size . x , G . dom . binary . height = C . size . y ) } function l ( a ) { var b , c , d , e , f , h , k , l = C . size . x , m = C . size . y , n = - C . size . x , o = - C . size . y ; for ( b = 0 , c = 0 ; c < a . length ; c ++ ) e = a [ c ] , b += e . rad , u . showPatches && g . drawRect ( e . pos , x . size , G . ctx . binary , { color : "red" } ) ; for ( b /= a . length , b = ( 180 * b / Math . PI + 90 ) % 180 - 90 , 0 > b && ( b += 180 ) , b = ( 180 - b ) * Math . PI / 180 , f = i . create ( [ Math . cos ( b ) , - Math . sin ( b ) , Math . sin ( b ) , Math . cos ( b ) ] ) , c = 0 ; c < a . length ; c ++ ) { for ( e = a [ c ] , d = 0 ; 4 > d ; d ++ ) i . xVec2 ( f , e . box [ d ] ) ; u . boxFromPatches . showTransformed && g . drawPath ( e . box , { x : 0 , y : 1 } , G . ctx . binary , { color : "#99ff00" , lineWidth : 2 } ) } for ( c = 0 ; c < a . length ; c ++ ) for ( e = a [ c ] , d = 0 ; 4 > d ; d ++ ) e . box [ d ] [ 0 ] < l && ( l = e . box [ d ] [ 0 ] ) , e . box [ d ] [ 0 ] > n && ( n = e . box [ d ] [ 0 ] ) , e . box [ d ] [ 1 ] < m && ( m = e . box [ d ] [ 1 ] ) , e . box [ d ] [ 1 ] > o && ( o = e . box [ d ] [ 1 ] ) ; for ( h = [ [ l , m ] , [ n , m ] , [ n , o ] , [ l , o ] ] , u . boxFromPatches . showTransformedBox && g . drawPath ( h , { x : 0 , y : 1 } , G . ctx . binary , { color : "#ff0000" , lineWidth : 2 } ) , k = u . halfSample ? 2 : 1 , f = i . inverse ( f ) , d = 0 ; 4 > d ; d ++ ) i . xVec2 ( f , h [ d ] ) ; for ( u . boxFromPatches . showBB && g . drawPath ( h , { x : 0 , y : 1 } , G . ctx . binary , { color : "#ff0000" , lineWidth : 2 } ) , d = 0 ; 4 > d ; d ++ ) j . scale ( h [ d ] , k ) ; return h } function m ( ) { b . otsuThreshold ( v , C ) , C . zeroBorder ( ) , u . showCanvas && C . show ( G . dom . binary , 255 ) } function n ( ) { var a , b , d , e , h , i , j , k , l = [ ] ; for ( a = 0 ; a < H . x ; a ++ ) for ( b = 0 ; b < H . y ; b ++ ) d = x . size . x * a , e = x . size . y * b , r ( d , e ) , w . zeroBorder ( ) , f . init ( y . data , 0 ) , i = c . create ( w , y ) , j = i . rasterize ( 0 ) , u . showLabels && y . overlay ( G . dom . binary , Math . floor ( 360 / j . count ) , { x : d , y : e } ) , h = y . moments ( j . count ) , l = l . concat ( s ( h , [ a , b ] , d , e ) ) ; if ( u . showFoundPatches ) for ( a = 0 ; a < l . length ; a ++ ) k = l [ a ] , g . drawRect ( k . pos , x . size , G . ctx . binary , { color : "#99ff00" , lineWidth : 2 } ) ; return l } function o ( a ) { var b , c , d = [ ] , e = [ ] ; for ( b = 0 ; a > b ; b ++ ) d . push ( 0 ) ; for ( c = A . data . length ; c -- ; ) A . data [ c ] > 0 && d [ A . data [ c ] - 1 ] ++ ; return d = d . map ( function ( a , b ) { return { val : a , label : b + 1 } } ) , d . sort ( function ( a , b ) { return b . val - a . val } ) , e = d . filter ( function ( a ) { return a . val >= 5 } ) } function p ( a , c ) { var d , e , f , h , i , j = [ ] , k = [ ] , m = [ 0 , 1 , 1 ] , n = [ 0 , 0 , 0 ] ; for ( d = 0 ; d < a . length ; d ++ ) { for ( f = A . data . length , j . length = 0 ; f -- ; ) A . data [ f ] === a [ d ] . label && ( h = B . data [ f ] , j . push ( h ) ) ; if ( i = l ( j ) , i && ( k . push ( i ) , u . showRemainingPatchLabels ) ) for ( e = 0 ; e < j . length ; e ++ ) h = j [ e ] , m [ 0 ] = a [ d ] . label / ( c + 1 ) * 360 , b . hsv2rgb ( m , n ) , g . drawRect ( h . pos , x . size , G . ctx . binary , { color : "rgb(" + n . join ( "," ) + ")" , lineWidth : 2 } ) } return k } function q ( a ) { var c = b . cluster ( a , . 9 ) , d = b . topGeneric ( c , 1 , function ( a ) { return a . getPoints ( ) . length } ) , e = [ ] , f = [ ] ; if ( 1 === d . length ) { e = d [ 0 ] . item . getPoints ( ) ; for ( var g = 0 ; g < e . length ; g ++ ) f . push ( e [ g ] . point ) } return f } function r ( a , c ) { C . subImageAsCopy ( x , b . imageRef ( a , c ) ) , F . skeletonize ( ) , u . showSkeleton && w . overlay ( G . dom . binary , 360 , b . imageRef ( a , c ) ) } function s ( a , b , c , d ) { var e , f , g , h , i = 0 , k = [ ] , l = [ ] , m = M
return null === g ? null : { codeResult : g , barcodeLine : h } } function k ( a , b , c ) { var d , e , f , g = Math . sqrt ( Math . pow ( a [ 1 ] [ 0 ] - a [ 0 ] [ 0 ] , 2 ) + Math . pow ( a [ 1 ] [ 1 ] - a [ 0 ] [ 1 ] , 2 ) ) , h = 16 , i = null , k = Math . sin ( c ) , l = Math . cos ( c ) ; for ( d = 1 ; h > d && null === i ; d ++ ) e = g / h * d * ( d % 2 === 0 ? - 1 : 1 ) , f = { y : e * k , x : e * l } , b [ 0 ] . y += f . x , b [ 0 ] . x -= f . y , b [ 1 ] . y += f . x , b [ 1 ] . x -= f . y , i = j ( b ) ; return i } function m ( a ) { return Math . sqrt ( Math . pow ( Math . abs ( a [ 1 ] . y - a [ 0 ] . y ) , 2 ) + Math . pow ( Math . abs ( a [ 1 ] . x - a [ 0 ] . x ) , 2 ) ) } function n ( a ) { var d , e , f , g , l = o . ctx . overlay ; return c . drawBoundingBox && l && b . drawPath ( a , { x : 0 , y : 1 } , l , { color : "blue" , lineWidth : 2 } ) , d = i ( a ) , g = m ( d ) , e = Math . atan2 ( d [ 1 ] . y - d [ 0 ] . y , d [ 1 ] . x - d [ 0 ] . x ) , d = h ( d , e , Math . floor ( . 1 * g ) ) , null === d ? null : ( f = j ( d ) , null === f && ( f = k ( a , d , e ) ) , null === f ? null : ( f && c . drawScanline && l && b . drawPath ( d , { x : "x" , y : "y" } , l , { color : "red" , lineWidth : 3 } ) , { codeResult : f . codeResult , line : d , angle : e , pattern : f . barcodeLine . line , threshold : f . barcodeLine . threshold } ) ) } var o = { ctx : { frequency : null , pattern : null , overlay : null } , dom : { frequency : null , pattern : null , overlay : null } } , p = [ ] ; return e ( ) , f ( ) , g ( ) , { decodeFromBoundingBox : function ( a ) { return n ( a ) } , decodeFromBoundingBoxes : function ( a ) { var b , c ; for ( b = 0 ; b < a . length ; b ++ ) if ( c = n ( a [ b ] ) , c && c . codeResult ) return c . box = a [ b ] , c } , setReaders : function ( a ) { c . readers = a , p . length = 0 , f ( ) } } } } ; return m } ) , d ( "frame_grabber" , [ "cv_utils" ] , function ( a ) { "use strict" ; var b = { } ; return b . create = function ( b , c ) { var d , e = { } , f = b . getConfig ( ) , g = a . imageRef ( b . getRealWidth ( ) , b . getRealHeight ( ) ) , h = b . getCanvasSize ( ) , i = a . imageRef ( b . getWidth ( ) , b . getHeight ( ) ) , j = b . getTopRight ( ) , k = j . x , l = j . y , m = null , n = null ; return d = c ? c : document . createElement ( "canvas" ) , d . width = h . x , d . height = h . y , m = d . getContext ( "2d" ) , n = new Uint8Array ( i . x * i . y ) , console . log ( "FrameGrabber" , JSON . stringify ( { size : i , topRight : j , videoSize : g , canvasSize : h } ) ) , e . attachData = function ( a ) { n = a } , e . getData = function ( ) { return n } , e . grab = function ( ) { var c , d = f . halfSample , e = b . getFrame ( ) ; return e ? ( m . drawImage ( e , 0 , 0 , h . x , h . y ) , c = m . getImageData ( k , l , i . x , i . y ) . data , d ? a . grayAndHalfSampleFromCanvasData ( c , i , n ) : a . computeGray ( c , n , f ) , ! 0 ) : ! 1 } , e . getSize = function ( ) { return i } , e } , b } ) , d ( "html_utils" , [ ] , function ( ) { "use strict" ; function a ( a ) { var b = document . createElement ( "div" ) ; for ( b . innerHTML = a ; b . firstChild ; ) return b . firstChild } function b ( a , c ) { for ( var d in c ) try { a [ d ] = c [ d ] . constructor == Object ? b ( a [ d ] , c [ d ] ) : c [ d ] } catch ( e ) { a [ d ] = c [ d ] } return a } return { createNode : function ( b ) { return a ( b ) } , mergeObjects : function ( a , c ) { return b ( a , c ) } } } ) , d ( "config" , [ ] , function ( ) { var a = { inputStream : { name : "Live" , type : "LiveStream" , constraints : { width : 640 , height : 480 , minAspectRatio : 0 , maxAspectRatio : 100 , facing : "environment" } , area : { top : "0%" , right : "0%" , left : "0%" , bottom : "0%" } , singleChannel : ! 1 } , tracking : ! 1 , debug : ! 1 , controls : ! 1 , locate : ! 0 , numOfWorkers : 4 , visual : { show : ! 0 } , decoder : { drawBoundingBox : ! 1 , showFrequency : ! 1 , drawScanline : ! 1 , showPattern : ! 1 , readers : [ "code_128_reader" ] } , locator : { halfSample : ! 0 , patchSize : "medium" , showCanvas : ! 1 , showPatches : ! 1 , showFoundPatches : ! 1 , showSkeleton : ! 1 , showLabels : ! 1 , showPatchLabels : ! 1 , showRemainingPatchLabels : ! 1 , boxFromPatches : { showTransformed : ! 1 , showTransformedBox : ! 1 , showBB : ! 1 } } } ; return a } ) , d ( "events" , [ ] , function ( ) { "use strict" ; var a = function ( ) { function a ( a ) { return e [ a ] || ( e [ a ] = { subscribers : [ ] } ) , e [ a ] } function b ( ) { e = { } } function c ( a , b ) { a . async ? setTimeout ( function ( ) { a . callback ( b ) } , 4 ) : a . callback ( b ) } function d ( b , c , d ) { var e ; if ( "function" == typeof c ) e = { callback : c , async : d } ; else if ( e = c , ! e . callback ) throw "Callback was not specified on options" ; a ( b ) . subscribers . push ( e ) } var e = { } ; return { subscribe : function ( a , b , c ) { return d ( a , b , c ) } , publish : function ( b , d ) { var e = a ( b ) , f = e . subscribers ; e . subscribers = f . filter ( function ( a ) { return c ( a , d ) , ! a . once } ) } , once : function ( a , b , c ) { d ( a , { callback : b , async : c , once : ! 0 } ) } , unsubscribe : function ( c , d ) { var e ; c ? ( e = a ( c ) , e . subscribers = e && d ? e . subscribers . filter ( function ( a ) { return a . callback !== d } ) : [ ] ) : b ( ) } } } ( ) ; return a } ) , d ( "camera_access" , [ "html_utils" ] , function ( a ) { "use strict" ; function b ( a , b , c ) { "undefined" != typeof navigator . getUserMedia ? navigator . getUserMedia ( a , function ( a ) { g = a ; var c = window . URL && window . URL . createObjectURL ( a ) || a ; b . apply ( null , [ c ] ) } , c ) : c ( new TypeError ( "getUserMedia not available" ) ) } function c ( a , b ) { function c ( ) { d > 0 ? a . videoWidth > 0 && a . videoHeight > 0 ? ( c