Initial OpenECOMP policy/engine commit
[policy/engine.git] / ecomp-sdk-app / src / main / webapp / app / policyApp / libs / jspdf / pdfmake.js
1 /******/ (function(modules) { // webpackBootstrap
2 /******/        // The module cache
3 /******/        var installedModules = {};
4
5 /******/        // The require function
6 /******/        function __webpack_require__(moduleId) {
7
8 /******/                // Check if module is in cache
9 /******/                if(installedModules[moduleId])
10 /******/                        return installedModules[moduleId].exports;
11
12 /******/                // Create a new module (and put it into the cache)
13 /******/                var module = installedModules[moduleId] = {
14 /******/                        exports: {},
15 /******/                        id: moduleId,
16 /******/                        loaded: false
17 /******/                };
18
19 /******/                // Execute the module function
20 /******/                modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21
22 /******/                // Flag the module as loaded
23 /******/                module.loaded = true;
24
25 /******/                // Return the exports of the module
26 /******/                return module.exports;
27 /******/        }
28
29
30 /******/        // expose the modules object (__webpack_modules__)
31 /******/        __webpack_require__.m = modules;
32
33 /******/        // expose the module cache
34 /******/        __webpack_require__.c = installedModules;
35
36 /******/        // __webpack_public_path__
37 /******/        __webpack_require__.p = "";
38
39 /******/        // Load entry module and return exports
40 /******/        return __webpack_require__(0);
41 /******/ })
42 /************************************************************************/
43 /******/ ([
44 /* 0 */
45 /***/ function(module, exports, __webpack_require__) {
46
47         /* WEBPACK VAR INJECTION */(function(global) {module.exports = global["pdfMake"] = __webpack_require__(1);
48         /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
49
50 /***/ },
51 /* 1 */
52 /***/ function(module, exports, __webpack_require__) {
53
54         /* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */
55         /* jslint browser: true */
56         /* global BlobBuilder */
57         'use strict';
58
59         var PdfPrinter = __webpack_require__(6);
60         var FileSaver = __webpack_require__(105);
61         var saveAs = FileSaver.saveAs;
62
63         var defaultClientFonts = {
64                 Roboto: {
65                         normal: 'Roboto-Regular.ttf',
66                         bold: 'Roboto-Medium.ttf',
67                         italics: 'Roboto-Italic.ttf',
68                         bolditalics: 'Roboto-Italic.ttf'
69                 }
70         };
71
72         function Document(docDefinition, fonts, vfs) {
73                 this.docDefinition = docDefinition;
74                 this.fonts = fonts || defaultClientFonts;
75                 this.vfs = vfs;
76         }
77
78         Document.prototype._createDoc = function(options, callback) {
79                 var printer = new PdfPrinter(this.fonts);
80                 printer.fs.bindFS(this.vfs);
81
82                 var doc = printer.createPdfKitDocument(this.docDefinition, options);
83                 var chunks = [];
84                 var result;
85
86                 doc.on('data', function(chunk) {
87                         chunks.push(chunk);
88                 });
89                 doc.on('end', function() {
90                         result = Buffer.concat(chunks);
91                         callback(result, doc._pdfMakePages);
92                 });
93                 doc.end();
94         };
95
96         Document.prototype._getPages = function(options, cb){
97           if (!cb) throw 'getBuffer is an async method and needs a callback argument';
98           this._createDoc(options, function(ignoreBuffer, pages){
99             cb(pages);
100           });
101         };
102
103         Document.prototype.open = function(message) {
104                 // we have to open the window immediately and store the reference
105                 // otherwise popup blockers will stop us
106                 var win = window.open('', '_blank');
107
108                 try {
109                         this.getDataUrl(function(result) {
110                                 win.location.href = result;
111                         });
112                 } catch(e) {
113                         win.close();
114                         throw e;
115                 }
116         };
117
118
119         Document.prototype.print = function() {
120           this.getDataUrl(function(dataUrl) {
121             var iFrame = document.createElement('iframe');
122             iFrame.style.position = 'absolute';
123             iFrame.style.left = '-99999px';
124             iFrame.src = dataUrl;
125             iFrame.onload = function() {
126               function removeIFrame(){
127                 document.body.removeChild(iFrame);
128                 document.removeEventListener('click', removeIFrame);
129               }
130               document.addEventListener('click', removeIFrame, false);
131             };
132
133             document.body.appendChild(iFrame);
134           }, { autoPrint: true });
135         };
136
137         Document.prototype.download = function(defaultFileName, cb) {
138            if(typeof defaultFileName === "function") {
139               cb = defaultFileName;
140               defaultFileName = null;
141            }
142
143            defaultFileName = defaultFileName || 'file.pdf';
144            this.getBuffer(function (result) {
145                var blob;
146                try {
147                    blob = new Blob([result], { type: 'application/pdf' });
148                }
149                catch (e) {
150                    // Old browser which can't handle it without making it an byte array (ie10) 
151                    if (e.name == "InvalidStateError") {
152                        var byteArray = new Uint8Array(result);
153                        blob = new Blob([byteArray.buffer], { type: 'application/pdf' });
154                    }
155                }
156                if (blob) {
157                    saveAs(blob, defaultFileName);
158                }
159                else {
160                    throw 'Could not generate blob';
161                }
162                if (typeof cb === "function") {
163                    cb();
164                }
165            });
166         };
167
168         Document.prototype.getBase64 = function(cb, options) {
169                 if (!cb) throw 'getBase64 is an async method and needs a callback argument';
170                 this._createDoc(options, function(buffer) {
171                         cb(buffer.toString('base64'));
172                 });
173         };
174
175         Document.prototype.getDataUrl = function(cb, options) {
176                 if (!cb) throw 'getDataUrl is an async method and needs a callback argument';
177                 this._createDoc(options, function(buffer) {
178                         cb('data:application/pdf;base64,' + buffer.toString('base64'));
179                 });
180         };
181
182         Document.prototype.getBuffer = function(cb, options) {
183                 if (!cb) throw 'getBuffer is an async method and needs a callback argument';
184                 this._createDoc(options, function(buffer){
185             cb(buffer);
186           });
187         };
188
189         module.exports = {
190                 createPdf: function(docDefinition) {
191                         return new Document(docDefinition, window.pdfMake.fonts, window.pdfMake.vfs);
192                 }
193         };
194
195         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
196
197 /***/ },
198 /* 2 */
199 /***/ function(module, exports, __webpack_require__) {
200
201         /* WEBPACK VAR INJECTION */(function(Buffer, global) {/*!
202          * The buffer module from node.js, for the browser.
203          *
204          * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
205          * @license  MIT
206          */
207         /* eslint-disable no-proto */
208
209         var base64 = __webpack_require__(3)
210         var ieee754 = __webpack_require__(4)
211         var isArray = __webpack_require__(5)
212
213         exports.Buffer = Buffer
214         exports.SlowBuffer = SlowBuffer
215         exports.INSPECT_MAX_BYTES = 50
216         Buffer.poolSize = 8192 // not used by this implementation
217
218         var rootParent = {}
219
220         /**
221          * If `Buffer.TYPED_ARRAY_SUPPORT`:
222          *   === true    Use Uint8Array implementation (fastest)
223          *   === false   Use Object implementation (most compatible, even IE6)
224          *
225          * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
226          * Opera 11.6+, iOS 4.2+.
227          *
228          * Due to various browser bugs, sometimes the Object implementation will be used even
229          * when the browser supports typed arrays.
230          *
231          * Note:
232          *
233          *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
234          *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
235          *
236          *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
237          *     on objects.
238          *
239          *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
240          *
241          *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
242          *     incorrect length in some situations.
243
244          * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
245          * get the Object implementation, which is slower but behaves correctly.
246          */
247         Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
248           ? global.TYPED_ARRAY_SUPPORT
249           : typedArraySupport()
250
251         function typedArraySupport () {
252           function Bar () {}
253           try {
254             var arr = new Uint8Array(1)
255             arr.foo = function () { return 42 }
256             arr.constructor = Bar
257             return arr.foo() === 42 && // typed array instances can be augmented
258                 arr.constructor === Bar && // constructor can be set
259                 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
260                 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
261           } catch (e) {
262             return false
263           }
264         }
265
266         function kMaxLength () {
267           return Buffer.TYPED_ARRAY_SUPPORT
268             ? 0x7fffffff
269             : 0x3fffffff
270         }
271
272         /**
273          * Class: Buffer
274          * =============
275          *
276          * The Buffer constructor returns instances of `Uint8Array` that are augmented
277          * with function properties for all the node `Buffer` API functions. We use
278          * `Uint8Array` so that square bracket notation works as expected -- it returns
279          * a single octet.
280          *
281          * By augmenting the instances, we can avoid modifying the `Uint8Array`
282          * prototype.
283          */
284         function Buffer (arg) {
285           if (!(this instanceof Buffer)) {
286             // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
287             if (arguments.length > 1) return new Buffer(arg, arguments[1])
288             return new Buffer(arg)
289           }
290
291           this.length = 0
292           this.parent = undefined
293
294           // Common case.
295           if (typeof arg === 'number') {
296             return fromNumber(this, arg)
297           }
298
299           // Slightly less common case.
300           if (typeof arg === 'string') {
301             return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
302           }
303
304           // Unusual.
305           return fromObject(this, arg)
306         }
307
308         function fromNumber (that, length) {
309           that = allocate(that, length < 0 ? 0 : checked(length) | 0)
310           if (!Buffer.TYPED_ARRAY_SUPPORT) {
311             for (var i = 0; i < length; i++) {
312               that[i] = 0
313             }
314           }
315           return that
316         }
317
318         function fromString (that, string, encoding) {
319           if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
320
321           // Assumption: byteLength() return value is always < kMaxLength.
322           var length = byteLength(string, encoding) | 0
323           that = allocate(that, length)
324
325           that.write(string, encoding)
326           return that
327         }
328
329         function fromObject (that, object) {
330           if (Buffer.isBuffer(object)) return fromBuffer(that, object)
331
332           if (isArray(object)) return fromArray(that, object)
333
334           if (object == null) {
335             throw new TypeError('must start with number, buffer, array or string')
336           }
337
338           if (typeof ArrayBuffer !== 'undefined') {
339             if (object.buffer instanceof ArrayBuffer) {
340               return fromTypedArray(that, object)
341             }
342             if (object instanceof ArrayBuffer) {
343               return fromArrayBuffer(that, object)
344             }
345           }
346
347           if (object.length) return fromArrayLike(that, object)
348
349           return fromJsonObject(that, object)
350         }
351
352         function fromBuffer (that, buffer) {
353           var length = checked(buffer.length) | 0
354           that = allocate(that, length)
355           buffer.copy(that, 0, 0, length)
356           return that
357         }
358
359         function fromArray (that, array) {
360           var length = checked(array.length) | 0
361           that = allocate(that, length)
362           for (var i = 0; i < length; i += 1) {
363             that[i] = array[i] & 255
364           }
365           return that
366         }
367
368         // Duplicate of fromArray() to keep fromArray() monomorphic.
369         function fromTypedArray (that, array) {
370           var length = checked(array.length) | 0
371           that = allocate(that, length)
372           // Truncating the elements is probably not what people expect from typed
373           // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
374           // of the old Buffer constructor.
375           for (var i = 0; i < length; i += 1) {
376             that[i] = array[i] & 255
377           }
378           return that
379         }
380
381         function fromArrayBuffer (that, array) {
382           if (Buffer.TYPED_ARRAY_SUPPORT) {
383             // Return an augmented `Uint8Array` instance, for best performance
384             array.byteLength
385             that = Buffer._augment(new Uint8Array(array))
386           } else {
387             // Fallback: Return an object instance of the Buffer class
388             that = fromTypedArray(that, new Uint8Array(array))
389           }
390           return that
391         }
392
393         function fromArrayLike (that, array) {
394           var length = checked(array.length) | 0
395           that = allocate(that, length)
396           for (var i = 0; i < length; i += 1) {
397             that[i] = array[i] & 255
398           }
399           return that
400         }
401
402         // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
403         // Returns a zero-length buffer for inputs that don't conform to the spec.
404         function fromJsonObject (that, object) {
405           var array
406           var length = 0
407
408           if (object.type === 'Buffer' && isArray(object.data)) {
409             array = object.data
410             length = checked(array.length) | 0
411           }
412           that = allocate(that, length)
413
414           for (var i = 0; i < length; i += 1) {
415             that[i] = array[i] & 255
416           }
417           return that
418         }
419
420         if (Buffer.TYPED_ARRAY_SUPPORT) {
421           Buffer.prototype.__proto__ = Uint8Array.prototype
422           Buffer.__proto__ = Uint8Array
423         }
424
425         function allocate (that, length) {
426           if (Buffer.TYPED_ARRAY_SUPPORT) {
427             // Return an augmented `Uint8Array` instance, for best performance
428             that = Buffer._augment(new Uint8Array(length))
429             that.__proto__ = Buffer.prototype
430           } else {
431             // Fallback: Return an object instance of the Buffer class
432             that.length = length
433             that._isBuffer = true
434           }
435
436           var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
437           if (fromPool) that.parent = rootParent
438
439           return that
440         }
441
442         function checked (length) {
443           // Note: cannot use `length < kMaxLength` here because that fails when
444           // length is NaN (which is otherwise coerced to zero.)
445           if (length >= kMaxLength()) {
446             throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
447                                  'size: 0x' + kMaxLength().toString(16) + ' bytes')
448           }
449           return length | 0
450         }
451
452         function SlowBuffer (subject, encoding) {
453           if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
454
455           var buf = new Buffer(subject, encoding)
456           delete buf.parent
457           return buf
458         }
459
460         Buffer.isBuffer = function isBuffer (b) {
461           return !!(b != null && b._isBuffer)
462         }
463
464         Buffer.compare = function compare (a, b) {
465           if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
466             throw new TypeError('Arguments must be Buffers')
467           }
468
469           if (a === b) return 0
470
471           var x = a.length
472           var y = b.length
473
474           var i = 0
475           var len = Math.min(x, y)
476           while (i < len) {
477             if (a[i] !== b[i]) break
478
479             ++i
480           }
481
482           if (i !== len) {
483             x = a[i]
484             y = b[i]
485           }
486
487           if (x < y) return -1
488           if (y < x) return 1
489           return 0
490         }
491
492         Buffer.isEncoding = function isEncoding (encoding) {
493           switch (String(encoding).toLowerCase()) {
494             case 'hex':
495             case 'utf8':
496             case 'utf-8':
497             case 'ascii':
498             case 'binary':
499             case 'base64':
500             case 'raw':
501             case 'ucs2':
502             case 'ucs-2':
503             case 'utf16le':
504             case 'utf-16le':
505               return true
506             default:
507               return false
508           }
509         }
510
511         Buffer.concat = function concat (list, length) {
512           if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
513
514           if (list.length === 0) {
515             return new Buffer(0)
516           }
517
518           var i
519           if (length === undefined) {
520             length = 0
521             for (i = 0; i < list.length; i++) {
522               length += list[i].length
523             }
524           }
525
526           var buf = new Buffer(length)
527           var pos = 0
528           for (i = 0; i < list.length; i++) {
529             var item = list[i]
530             item.copy(buf, pos)
531             pos += item.length
532           }
533           return buf
534         }
535
536         function byteLength (string, encoding) {
537           if (typeof string !== 'string') string = '' + string
538
539           var len = string.length
540           if (len === 0) return 0
541
542           // Use a for loop to avoid recursion
543           var loweredCase = false
544           for (;;) {
545             switch (encoding) {
546               case 'ascii':
547               case 'binary':
548               // Deprecated
549               case 'raw':
550               case 'raws':
551                 return len
552               case 'utf8':
553               case 'utf-8':
554                 return utf8ToBytes(string).length
555               case 'ucs2':
556               case 'ucs-2':
557               case 'utf16le':
558               case 'utf-16le':
559                 return len * 2
560               case 'hex':
561                 return len >>> 1
562               case 'base64':
563                 return base64ToBytes(string).length
564               default:
565                 if (loweredCase) return utf8ToBytes(string).length // assume utf8
566                 encoding = ('' + encoding).toLowerCase()
567                 loweredCase = true
568             }
569           }
570         }
571         Buffer.byteLength = byteLength
572
573         // pre-set for values that may exist in the future
574         Buffer.prototype.length = undefined
575         Buffer.prototype.parent = undefined
576
577         function slowToString (encoding, start, end) {
578           var loweredCase = false
579
580           start = start | 0
581           end = end === undefined || end === Infinity ? this.length : end | 0
582
583           if (!encoding) encoding = 'utf8'
584           if (start < 0) start = 0
585           if (end > this.length) end = this.length
586           if (end <= start) return ''
587
588           while (true) {
589             switch (encoding) {
590               case 'hex':
591                 return hexSlice(this, start, end)
592
593               case 'utf8':
594               case 'utf-8':
595                 return utf8Slice(this, start, end)
596
597               case 'ascii':
598                 return asciiSlice(this, start, end)
599
600               case 'binary':
601                 return binarySlice(this, start, end)
602
603               case 'base64':
604                 return base64Slice(this, start, end)
605
606               case 'ucs2':
607               case 'ucs-2':
608               case 'utf16le':
609               case 'utf-16le':
610                 return utf16leSlice(this, start, end)
611
612               default:
613                 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
614                 encoding = (encoding + '').toLowerCase()
615                 loweredCase = true
616             }
617           }
618         }
619
620         Buffer.prototype.toString = function toString () {
621           var length = this.length | 0
622           if (length === 0) return ''
623           if (arguments.length === 0) return utf8Slice(this, 0, length)
624           return slowToString.apply(this, arguments)
625         }
626
627         Buffer.prototype.equals = function equals (b) {
628           if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
629           if (this === b) return true
630           return Buffer.compare(this, b) === 0
631         }
632
633         Buffer.prototype.inspect = function inspect () {
634           var str = ''
635           var max = exports.INSPECT_MAX_BYTES
636           if (this.length > 0) {
637             str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
638             if (this.length > max) str += ' ... '
639           }
640           return '<Buffer ' + str + '>'
641         }
642
643         Buffer.prototype.compare = function compare (b) {
644           if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
645           if (this === b) return 0
646           return Buffer.compare(this, b)
647         }
648
649         Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
650           if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
651           else if (byteOffset < -0x80000000) byteOffset = -0x80000000
652           byteOffset >>= 0
653
654           if (this.length === 0) return -1
655           if (byteOffset >= this.length) return -1
656
657           // Negative offsets start from the end of the buffer
658           if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
659
660           if (typeof val === 'string') {
661             if (val.length === 0) return -1 // special case: looking for empty string always fails
662             return String.prototype.indexOf.call(this, val, byteOffset)
663           }
664           if (Buffer.isBuffer(val)) {
665             return arrayIndexOf(this, val, byteOffset)
666           }
667           if (typeof val === 'number') {
668             if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
669               return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
670             }
671             return arrayIndexOf(this, [ val ], byteOffset)
672           }
673
674           function arrayIndexOf (arr, val, byteOffset) {
675             var foundIndex = -1
676             for (var i = 0; byteOffset + i < arr.length; i++) {
677               if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
678                 if (foundIndex === -1) foundIndex = i
679                 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
680               } else {
681                 foundIndex = -1
682               }
683             }
684             return -1
685           }
686
687           throw new TypeError('val must be string, number or Buffer')
688         }
689
690         // `get` is deprecated
691         Buffer.prototype.get = function get (offset) {
692           console.log('.get() is deprecated. Access using array indexes instead.')
693           return this.readUInt8(offset)
694         }
695
696         // `set` is deprecated
697         Buffer.prototype.set = function set (v, offset) {
698           console.log('.set() is deprecated. Access using array indexes instead.')
699           return this.writeUInt8(v, offset)
700         }
701
702         function hexWrite (buf, string, offset, length) {
703           offset = Number(offset) || 0
704           var remaining = buf.length - offset
705           if (!length) {
706             length = remaining
707           } else {
708             length = Number(length)
709             if (length > remaining) {
710               length = remaining
711             }
712           }
713
714           // must be an even number of digits
715           var strLen = string.length
716           if (strLen % 2 !== 0) throw new Error('Invalid hex string')
717
718           if (length > strLen / 2) {
719             length = strLen / 2
720           }
721           for (var i = 0; i < length; i++) {
722             var parsed = parseInt(string.substr(i * 2, 2), 16)
723             if (isNaN(parsed)) throw new Error('Invalid hex string')
724             buf[offset + i] = parsed
725           }
726           return i
727         }
728
729         function utf8Write (buf, string, offset, length) {
730           return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
731         }
732
733         function asciiWrite (buf, string, offset, length) {
734           return blitBuffer(asciiToBytes(string), buf, offset, length)
735         }
736
737         function binaryWrite (buf, string, offset, length) {
738           return asciiWrite(buf, string, offset, length)
739         }
740
741         function base64Write (buf, string, offset, length) {
742           return blitBuffer(base64ToBytes(string), buf, offset, length)
743         }
744
745         function ucs2Write (buf, string, offset, length) {
746           return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
747         }
748
749         Buffer.prototype.write = function write (string, offset, length, encoding) {
750           // Buffer#write(string)
751           if (offset === undefined) {
752             encoding = 'utf8'
753             length = this.length
754             offset = 0
755           // Buffer#write(string, encoding)
756           } else if (length === undefined && typeof offset === 'string') {
757             encoding = offset
758             length = this.length
759             offset = 0
760           // Buffer#write(string, offset[, length][, encoding])
761           } else if (isFinite(offset)) {
762             offset = offset | 0
763             if (isFinite(length)) {
764               length = length | 0
765               if (encoding === undefined) encoding = 'utf8'
766             } else {
767               encoding = length
768               length = undefined
769             }
770           // legacy write(string, encoding, offset, length) - remove in v0.13
771           } else {
772             var swap = encoding
773             encoding = offset
774             offset = length | 0
775             length = swap
776           }
777
778           var remaining = this.length - offset
779           if (length === undefined || length > remaining) length = remaining
780
781           if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
782             throw new RangeError('attempt to write outside buffer bounds')
783           }
784
785           if (!encoding) encoding = 'utf8'
786
787           var loweredCase = false
788           for (;;) {
789             switch (encoding) {
790               case 'hex':
791                 return hexWrite(this, string, offset, length)
792
793               case 'utf8':
794               case 'utf-8':
795                 return utf8Write(this, string, offset, length)
796
797               case 'ascii':
798                 return asciiWrite(this, string, offset, length)
799
800               case 'binary':
801                 return binaryWrite(this, string, offset, length)
802
803               case 'base64':
804                 // Warning: maxLength not taken into account in base64Write
805                 return base64Write(this, string, offset, length)
806
807               case 'ucs2':
808               case 'ucs-2':
809               case 'utf16le':
810               case 'utf-16le':
811                 return ucs2Write(this, string, offset, length)
812
813               default:
814                 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
815                 encoding = ('' + encoding).toLowerCase()
816                 loweredCase = true
817             }
818           }
819         }
820
821         Buffer.prototype.toJSON = function toJSON () {
822           return {
823             type: 'Buffer',
824             data: Array.prototype.slice.call(this._arr || this, 0)
825           }
826         }
827
828         function base64Slice (buf, start, end) {
829           if (start === 0 && end === buf.length) {
830             return base64.fromByteArray(buf)
831           } else {
832             return base64.fromByteArray(buf.slice(start, end))
833           }
834         }
835
836         function utf8Slice (buf, start, end) {
837           end = Math.min(buf.length, end)
838           var res = []
839
840           var i = start
841           while (i < end) {
842             var firstByte = buf[i]
843             var codePoint = null
844             var bytesPerSequence = (firstByte > 0xEF) ? 4
845               : (firstByte > 0xDF) ? 3
846               : (firstByte > 0xBF) ? 2
847               : 1
848
849             if (i + bytesPerSequence <= end) {
850               var secondByte, thirdByte, fourthByte, tempCodePoint
851
852               switch (bytesPerSequence) {
853                 case 1:
854                   if (firstByte < 0x80) {
855                     codePoint = firstByte
856                   }
857                   break
858                 case 2:
859                   secondByte = buf[i + 1]
860                   if ((secondByte & 0xC0) === 0x80) {
861                     tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
862                     if (tempCodePoint > 0x7F) {
863                       codePoint = tempCodePoint
864                     }
865                   }
866                   break
867                 case 3:
868                   secondByte = buf[i + 1]
869                   thirdByte = buf[i + 2]
870                   if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
871                     tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
872                     if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
873                       codePoint = tempCodePoint
874                     }
875                   }
876                   break;
877                 case 4:
878                   secondByte = buf[i + 1]
879                   thirdByte = buf[i + 2]
880                   fourthByte = buf[i + 3]
881                   if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
882                     tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
883                     if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
884                       codePoint = tempCodePoint
885                     }
886                   }
887               }
888             }
889
890             if (codePoint === null) {
891               // we did not generate a valid codePoint so insert a
892               // replacement char (U+FFFD) and advance only 1 byte
893               codePoint = 0xFFFD
894               bytesPerSequence = 1
895             } else if (codePoint > 0xFFFF) {
896               // encode to utf16 (surrogate pair dance)
897               codePoint -= 0x10000
898               res.push(codePoint >>> 10 & 0x3FF | 0xD800)
899               codePoint = 0xDC00 | codePoint & 0x3FF
900             }
901
902             res.push(codePoint)
903             i += bytesPerSequence
904           }
905
906           return decodeCodePointsArray(res)
907         }
908
909         // Based on http://stackoverflow.com/a/22747272/680742, the browser with
910         // the lowest limit is Chrome, with 0x10000 args.
911         // We go 1 magnitude less, for safety
912         var MAX_ARGUMENTS_LENGTH = 0x1000
913
914         function decodeCodePointsArray (codePoints) {
915           var len = codePoints.length
916           if (len <= MAX_ARGUMENTS_LENGTH) {
917             return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
918           }
919
920           // Decode in chunks to avoid "call stack size exceeded".
921           var res = ''
922           var i = 0
923           while (i < len) {
924             res += String.fromCharCode.apply(
925               String,
926               codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
927             )
928           }
929           return res
930         }
931
932         function asciiSlice (buf, start, end) {
933           var ret = ''
934           end = Math.min(buf.length, end)
935
936           for (var i = start; i < end; i++) {
937             ret += String.fromCharCode(buf[i] & 0x7F)
938           }
939           return ret
940         }
941
942         function binarySlice (buf, start, end) {
943           var ret = ''
944           end = Math.min(buf.length, end)
945
946           for (var i = start; i < end; i++) {
947             ret += String.fromCharCode(buf[i])
948           }
949           return ret
950         }
951
952         function hexSlice (buf, start, end) {
953           var len = buf.length
954
955           if (!start || start < 0) start = 0
956           if (!end || end < 0 || end > len) end = len
957
958           var out = ''
959           for (var i = start; i < end; i++) {
960             out += toHex(buf[i])
961           }
962           return out
963         }
964
965         function utf16leSlice (buf, start, end) {
966           var bytes = buf.slice(start, end)
967           var res = ''
968           for (var i = 0; i < bytes.length; i += 2) {
969             res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
970           }
971           return res
972         }
973
974         Buffer.prototype.slice = function slice (start, end) {
975           var len = this.length
976           start = ~~start
977           end = end === undefined ? len : ~~end
978
979           if (start < 0) {
980             start += len
981             if (start < 0) start = 0
982           } else if (start > len) {
983             start = len
984           }
985
986           if (end < 0) {
987             end += len
988             if (end < 0) end = 0
989           } else if (end > len) {
990             end = len
991           }
992
993           if (end < start) end = start
994
995           var newBuf
996           if (Buffer.TYPED_ARRAY_SUPPORT) {
997             newBuf = Buffer._augment(this.subarray(start, end))
998           } else {
999             var sliceLen = end - start
1000             newBuf = new Buffer(sliceLen, undefined)
1001             for (var i = 0; i < sliceLen; i++) {
1002               newBuf[i] = this[i + start]
1003             }
1004           }
1005
1006           if (newBuf.length) newBuf.parent = this.parent || this
1007
1008           return newBuf
1009         }
1010
1011         /*
1012          * Need to make sure that buffer isn't trying to write out of bounds.
1013          */
1014         function checkOffset (offset, ext, length) {
1015           if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
1016           if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
1017         }
1018
1019         Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
1020           offset = offset | 0
1021           byteLength = byteLength | 0
1022           if (!noAssert) checkOffset(offset, byteLength, this.length)
1023
1024           var val = this[offset]
1025           var mul = 1
1026           var i = 0
1027           while (++i < byteLength && (mul *= 0x100)) {
1028             val += this[offset + i] * mul
1029           }
1030
1031           return val
1032         }
1033
1034         Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
1035           offset = offset | 0
1036           byteLength = byteLength | 0
1037           if (!noAssert) {
1038             checkOffset(offset, byteLength, this.length)
1039           }
1040
1041           var val = this[offset + --byteLength]
1042           var mul = 1
1043           while (byteLength > 0 && (mul *= 0x100)) {
1044             val += this[offset + --byteLength] * mul
1045           }
1046
1047           return val
1048         }
1049
1050         Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
1051           if (!noAssert) checkOffset(offset, 1, this.length)
1052           return this[offset]
1053         }
1054
1055         Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
1056           if (!noAssert) checkOffset(offset, 2, this.length)
1057           return this[offset] | (this[offset + 1] << 8)
1058         }
1059
1060         Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
1061           if (!noAssert) checkOffset(offset, 2, this.length)
1062           return (this[offset] << 8) | this[offset + 1]
1063         }
1064
1065         Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
1066           if (!noAssert) checkOffset(offset, 4, this.length)
1067
1068           return ((this[offset]) |
1069               (this[offset + 1] << 8) |
1070               (this[offset + 2] << 16)) +
1071               (this[offset + 3] * 0x1000000)
1072         }
1073
1074         Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
1075           if (!noAssert) checkOffset(offset, 4, this.length)
1076
1077           return (this[offset] * 0x1000000) +
1078             ((this[offset + 1] << 16) |
1079             (this[offset + 2] << 8) |
1080             this[offset + 3])
1081         }
1082
1083         Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
1084           offset = offset | 0
1085           byteLength = byteLength | 0
1086           if (!noAssert) checkOffset(offset, byteLength, this.length)
1087
1088           var val = this[offset]
1089           var mul = 1
1090           var i = 0
1091           while (++i < byteLength && (mul *= 0x100)) {
1092             val += this[offset + i] * mul
1093           }
1094           mul *= 0x80
1095
1096           if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1097
1098           return val
1099         }
1100
1101         Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
1102           offset = offset | 0
1103           byteLength = byteLength | 0
1104           if (!noAssert) checkOffset(offset, byteLength, this.length)
1105
1106           var i = byteLength
1107           var mul = 1
1108           var val = this[offset + --i]
1109           while (i > 0 && (mul *= 0x100)) {
1110             val += this[offset + --i] * mul
1111           }
1112           mul *= 0x80
1113
1114           if (val >= mul) val -= Math.pow(2, 8 * byteLength)
1115
1116           return val
1117         }
1118
1119         Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
1120           if (!noAssert) checkOffset(offset, 1, this.length)
1121           if (!(this[offset] & 0x80)) return (this[offset])
1122           return ((0xff - this[offset] + 1) * -1)
1123         }
1124
1125         Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
1126           if (!noAssert) checkOffset(offset, 2, this.length)
1127           var val = this[offset] | (this[offset + 1] << 8)
1128           return (val & 0x8000) ? val | 0xFFFF0000 : val
1129         }
1130
1131         Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
1132           if (!noAssert) checkOffset(offset, 2, this.length)
1133           var val = this[offset + 1] | (this[offset] << 8)
1134           return (val & 0x8000) ? val | 0xFFFF0000 : val
1135         }
1136
1137         Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
1138           if (!noAssert) checkOffset(offset, 4, this.length)
1139
1140           return (this[offset]) |
1141             (this[offset + 1] << 8) |
1142             (this[offset + 2] << 16) |
1143             (this[offset + 3] << 24)
1144         }
1145
1146         Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
1147           if (!noAssert) checkOffset(offset, 4, this.length)
1148
1149           return (this[offset] << 24) |
1150             (this[offset + 1] << 16) |
1151             (this[offset + 2] << 8) |
1152             (this[offset + 3])
1153         }
1154
1155         Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
1156           if (!noAssert) checkOffset(offset, 4, this.length)
1157           return ieee754.read(this, offset, true, 23, 4)
1158         }
1159
1160         Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
1161           if (!noAssert) checkOffset(offset, 4, this.length)
1162           return ieee754.read(this, offset, false, 23, 4)
1163         }
1164
1165         Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
1166           if (!noAssert) checkOffset(offset, 8, this.length)
1167           return ieee754.read(this, offset, true, 52, 8)
1168         }
1169
1170         Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
1171           if (!noAssert) checkOffset(offset, 8, this.length)
1172           return ieee754.read(this, offset, false, 52, 8)
1173         }
1174
1175         function checkInt (buf, value, offset, ext, max, min) {
1176           if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
1177           if (value > max || value < min) throw new RangeError('value is out of bounds')
1178           if (offset + ext > buf.length) throw new RangeError('index out of range')
1179         }
1180
1181         Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
1182           value = +value
1183           offset = offset | 0
1184           byteLength = byteLength | 0
1185           if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
1186
1187           var mul = 1
1188           var i = 0
1189           this[offset] = value & 0xFF
1190           while (++i < byteLength && (mul *= 0x100)) {
1191             this[offset + i] = (value / mul) & 0xFF
1192           }
1193
1194           return offset + byteLength
1195         }
1196
1197         Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
1198           value = +value
1199           offset = offset | 0
1200           byteLength = byteLength | 0
1201           if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
1202
1203           var i = byteLength - 1
1204           var mul = 1
1205           this[offset + i] = value & 0xFF
1206           while (--i >= 0 && (mul *= 0x100)) {
1207             this[offset + i] = (value / mul) & 0xFF
1208           }
1209
1210           return offset + byteLength
1211         }
1212
1213         Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
1214           value = +value
1215           offset = offset | 0
1216           if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
1217           if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1218           this[offset] = (value & 0xff)
1219           return offset + 1
1220         }
1221
1222         function objectWriteUInt16 (buf, value, offset, littleEndian) {
1223           if (value < 0) value = 0xffff + value + 1
1224           for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
1225             buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
1226               (littleEndian ? i : 1 - i) * 8
1227           }
1228         }
1229
1230         Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
1231           value = +value
1232           offset = offset | 0
1233           if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1234           if (Buffer.TYPED_ARRAY_SUPPORT) {
1235             this[offset] = (value & 0xff)
1236             this[offset + 1] = (value >>> 8)
1237           } else {
1238             objectWriteUInt16(this, value, offset, true)
1239           }
1240           return offset + 2
1241         }
1242
1243         Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
1244           value = +value
1245           offset = offset | 0
1246           if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
1247           if (Buffer.TYPED_ARRAY_SUPPORT) {
1248             this[offset] = (value >>> 8)
1249             this[offset + 1] = (value & 0xff)
1250           } else {
1251             objectWriteUInt16(this, value, offset, false)
1252           }
1253           return offset + 2
1254         }
1255
1256         function objectWriteUInt32 (buf, value, offset, littleEndian) {
1257           if (value < 0) value = 0xffffffff + value + 1
1258           for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
1259             buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
1260           }
1261         }
1262
1263         Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
1264           value = +value
1265           offset = offset | 0
1266           if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1267           if (Buffer.TYPED_ARRAY_SUPPORT) {
1268             this[offset + 3] = (value >>> 24)
1269             this[offset + 2] = (value >>> 16)
1270             this[offset + 1] = (value >>> 8)
1271             this[offset] = (value & 0xff)
1272           } else {
1273             objectWriteUInt32(this, value, offset, true)
1274           }
1275           return offset + 4
1276         }
1277
1278         Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
1279           value = +value
1280           offset = offset | 0
1281           if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
1282           if (Buffer.TYPED_ARRAY_SUPPORT) {
1283             this[offset] = (value >>> 24)
1284             this[offset + 1] = (value >>> 16)
1285             this[offset + 2] = (value >>> 8)
1286             this[offset + 3] = (value & 0xff)
1287           } else {
1288             objectWriteUInt32(this, value, offset, false)
1289           }
1290           return offset + 4
1291         }
1292
1293         Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
1294           value = +value
1295           offset = offset | 0
1296           if (!noAssert) {
1297             var limit = Math.pow(2, 8 * byteLength - 1)
1298
1299             checkInt(this, value, offset, byteLength, limit - 1, -limit)
1300           }
1301
1302           var i = 0
1303           var mul = 1
1304           var sub = value < 0 ? 1 : 0
1305           this[offset] = value & 0xFF
1306           while (++i < byteLength && (mul *= 0x100)) {
1307             this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1308           }
1309
1310           return offset + byteLength
1311         }
1312
1313         Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
1314           value = +value
1315           offset = offset | 0
1316           if (!noAssert) {
1317             var limit = Math.pow(2, 8 * byteLength - 1)
1318
1319             checkInt(this, value, offset, byteLength, limit - 1, -limit)
1320           }
1321
1322           var i = byteLength - 1
1323           var mul = 1
1324           var sub = value < 0 ? 1 : 0
1325           this[offset + i] = value & 0xFF
1326           while (--i >= 0 && (mul *= 0x100)) {
1327             this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
1328           }
1329
1330           return offset + byteLength
1331         }
1332
1333         Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
1334           value = +value
1335           offset = offset | 0
1336           if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
1337           if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
1338           if (value < 0) value = 0xff + value + 1
1339           this[offset] = (value & 0xff)
1340           return offset + 1
1341         }
1342
1343         Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
1344           value = +value
1345           offset = offset | 0
1346           if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1347           if (Buffer.TYPED_ARRAY_SUPPORT) {
1348             this[offset] = (value & 0xff)
1349             this[offset + 1] = (value >>> 8)
1350           } else {
1351             objectWriteUInt16(this, value, offset, true)
1352           }
1353           return offset + 2
1354         }
1355
1356         Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
1357           value = +value
1358           offset = offset | 0
1359           if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
1360           if (Buffer.TYPED_ARRAY_SUPPORT) {
1361             this[offset] = (value >>> 8)
1362             this[offset + 1] = (value & 0xff)
1363           } else {
1364             objectWriteUInt16(this, value, offset, false)
1365           }
1366           return offset + 2
1367         }
1368
1369         Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
1370           value = +value
1371           offset = offset | 0
1372           if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1373           if (Buffer.TYPED_ARRAY_SUPPORT) {
1374             this[offset] = (value & 0xff)
1375             this[offset + 1] = (value >>> 8)
1376             this[offset + 2] = (value >>> 16)
1377             this[offset + 3] = (value >>> 24)
1378           } else {
1379             objectWriteUInt32(this, value, offset, true)
1380           }
1381           return offset + 4
1382         }
1383
1384         Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
1385           value = +value
1386           offset = offset | 0
1387           if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
1388           if (value < 0) value = 0xffffffff + value + 1
1389           if (Buffer.TYPED_ARRAY_SUPPORT) {
1390             this[offset] = (value >>> 24)
1391             this[offset + 1] = (value >>> 16)
1392             this[offset + 2] = (value >>> 8)
1393             this[offset + 3] = (value & 0xff)
1394           } else {
1395             objectWriteUInt32(this, value, offset, false)
1396           }
1397           return offset + 4
1398         }
1399
1400         function checkIEEE754 (buf, value, offset, ext, max, min) {
1401           if (value > max || value < min) throw new RangeError('value is out of bounds')
1402           if (offset + ext > buf.length) throw new RangeError('index out of range')
1403           if (offset < 0) throw new RangeError('index out of range')
1404         }
1405
1406         function writeFloat (buf, value, offset, littleEndian, noAssert) {
1407           if (!noAssert) {
1408             checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
1409           }
1410           ieee754.write(buf, value, offset, littleEndian, 23, 4)
1411           return offset + 4
1412         }
1413
1414         Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
1415           return writeFloat(this, value, offset, true, noAssert)
1416         }
1417
1418         Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
1419           return writeFloat(this, value, offset, false, noAssert)
1420         }
1421
1422         function writeDouble (buf, value, offset, littleEndian, noAssert) {
1423           if (!noAssert) {
1424             checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
1425           }
1426           ieee754.write(buf, value, offset, littleEndian, 52, 8)
1427           return offset + 8
1428         }
1429
1430         Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
1431           return writeDouble(this, value, offset, true, noAssert)
1432         }
1433
1434         Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
1435           return writeDouble(this, value, offset, false, noAssert)
1436         }
1437
1438         // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
1439         Buffer.prototype.copy = function copy (target, targetStart, start, end) {
1440           if (!start) start = 0
1441           if (!end && end !== 0) end = this.length
1442           if (targetStart >= target.length) targetStart = target.length
1443           if (!targetStart) targetStart = 0
1444           if (end > 0 && end < start) end = start
1445
1446           // Copy 0 bytes; we're done
1447           if (end === start) return 0
1448           if (target.length === 0 || this.length === 0) return 0
1449
1450           // Fatal error conditions
1451           if (targetStart < 0) {
1452             throw new RangeError('targetStart out of bounds')
1453           }
1454           if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
1455           if (end < 0) throw new RangeError('sourceEnd out of bounds')
1456
1457           // Are we oob?
1458           if (end > this.length) end = this.length
1459           if (target.length - targetStart < end - start) {
1460             end = target.length - targetStart + start
1461           }
1462
1463           var len = end - start
1464           var i
1465
1466           if (this === target && start < targetStart && targetStart < end) {
1467             // descending copy from end
1468             for (i = len - 1; i >= 0; i--) {
1469               target[i + targetStart] = this[i + start]
1470             }
1471           } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
1472             // ascending copy from start
1473             for (i = 0; i < len; i++) {
1474               target[i + targetStart] = this[i + start]
1475             }
1476           } else {
1477             target._set(this.subarray(start, start + len), targetStart)
1478           }
1479
1480           return len
1481         }
1482
1483         // fill(value, start=0, end=buffer.length)
1484         Buffer.prototype.fill = function fill (value, start, end) {
1485           if (!value) value = 0
1486           if (!start) start = 0
1487           if (!end) end = this.length
1488
1489           if (end < start) throw new RangeError('end < start')
1490
1491           // Fill 0 bytes; we're done
1492           if (end === start) return
1493           if (this.length === 0) return
1494
1495           if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
1496           if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
1497
1498           var i
1499           if (typeof value === 'number') {
1500             for (i = start; i < end; i++) {
1501               this[i] = value
1502             }
1503           } else {
1504             var bytes = utf8ToBytes(value.toString())
1505             var len = bytes.length
1506             for (i = start; i < end; i++) {
1507               this[i] = bytes[i % len]
1508             }
1509           }
1510
1511           return this
1512         }
1513
1514         /**
1515          * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
1516          * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
1517          */
1518         Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
1519           if (typeof Uint8Array !== 'undefined') {
1520             if (Buffer.TYPED_ARRAY_SUPPORT) {
1521               return (new Buffer(this)).buffer
1522             } else {
1523               var buf = new Uint8Array(this.length)
1524               for (var i = 0, len = buf.length; i < len; i += 1) {
1525                 buf[i] = this[i]
1526               }
1527               return buf.buffer
1528             }
1529           } else {
1530             throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
1531           }
1532         }
1533
1534         // HELPER FUNCTIONS
1535         // ================
1536
1537         var BP = Buffer.prototype
1538
1539         /**
1540          * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
1541          */
1542         Buffer._augment = function _augment (arr) {
1543           arr.constructor = Buffer
1544           arr._isBuffer = true
1545
1546           // save reference to original Uint8Array set method before overwriting
1547           arr._set = arr.set
1548
1549           // deprecated
1550           arr.get = BP.get
1551           arr.set = BP.set
1552
1553           arr.write = BP.write
1554           arr.toString = BP.toString
1555           arr.toLocaleString = BP.toString
1556           arr.toJSON = BP.toJSON
1557           arr.equals = BP.equals
1558           arr.compare = BP.compare
1559           arr.indexOf = BP.indexOf
1560           arr.copy = BP.copy
1561           arr.slice = BP.slice
1562           arr.readUIntLE = BP.readUIntLE
1563           arr.readUIntBE = BP.readUIntBE
1564           arr.readUInt8 = BP.readUInt8
1565           arr.readUInt16LE = BP.readUInt16LE
1566           arr.readUInt16BE = BP.readUInt16BE
1567           arr.readUInt32LE = BP.readUInt32LE
1568           arr.readUInt32BE = BP.readUInt32BE
1569           arr.readIntLE = BP.readIntLE
1570           arr.readIntBE = BP.readIntBE
1571           arr.readInt8 = BP.readInt8
1572           arr.readInt16LE = BP.readInt16LE
1573           arr.readInt16BE = BP.readInt16BE
1574           arr.readInt32LE = BP.readInt32LE
1575           arr.readInt32BE = BP.readInt32BE
1576           arr.readFloatLE = BP.readFloatLE
1577           arr.readFloatBE = BP.readFloatBE
1578           arr.readDoubleLE = BP.readDoubleLE
1579           arr.readDoubleBE = BP.readDoubleBE
1580           arr.writeUInt8 = BP.writeUInt8
1581           arr.writeUIntLE = BP.writeUIntLE
1582           arr.writeUIntBE = BP.writeUIntBE
1583           arr.writeUInt16LE = BP.writeUInt16LE
1584           arr.writeUInt16BE = BP.writeUInt16BE
1585           arr.writeUInt32LE = BP.writeUInt32LE
1586           arr.writeUInt32BE = BP.writeUInt32BE
1587           arr.writeIntLE = BP.writeIntLE
1588           arr.writeIntBE = BP.writeIntBE
1589           arr.writeInt8 = BP.writeInt8
1590           arr.writeInt16LE = BP.writeInt16LE
1591           arr.writeInt16BE = BP.writeInt16BE
1592           arr.writeInt32LE = BP.writeInt32LE
1593           arr.writeInt32BE = BP.writeInt32BE
1594           arr.writeFloatLE = BP.writeFloatLE
1595           arr.writeFloatBE = BP.writeFloatBE
1596           arr.writeDoubleLE = BP.writeDoubleLE
1597           arr.writeDoubleBE = BP.writeDoubleBE
1598           arr.fill = BP.fill
1599           arr.inspect = BP.inspect
1600           arr.toArrayBuffer = BP.toArrayBuffer
1601
1602           return arr
1603         }
1604
1605         var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
1606
1607         function base64clean (str) {
1608           // Node strips out invalid characters like \n and \t from the string, base64-js does not
1609           str = stringtrim(str).replace(INVALID_BASE64_RE, '')
1610           // Node converts strings with length < 2 to ''
1611           if (str.length < 2) return ''
1612           // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
1613           while (str.length % 4 !== 0) {
1614             str = str + '='
1615           }
1616           return str
1617         }
1618
1619         function stringtrim (str) {
1620           if (str.trim) return str.trim()
1621           return str.replace(/^\s+|\s+$/g, '')
1622         }
1623
1624         function toHex (n) {
1625           if (n < 16) return '0' + n.toString(16)
1626           return n.toString(16)
1627         }
1628
1629         function utf8ToBytes (string, units) {
1630           units = units || Infinity
1631           var codePoint
1632           var length = string.length
1633           var leadSurrogate = null
1634           var bytes = []
1635
1636           for (var i = 0; i < length; i++) {
1637             codePoint = string.charCodeAt(i)
1638
1639             // is surrogate component
1640             if (codePoint > 0xD7FF && codePoint < 0xE000) {
1641               // last char was a lead
1642               if (!leadSurrogate) {
1643                 // no lead yet
1644                 if (codePoint > 0xDBFF) {
1645                   // unexpected trail
1646                   if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1647                   continue
1648                 } else if (i + 1 === length) {
1649                   // unpaired lead
1650                   if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1651                   continue
1652                 }
1653
1654                 // valid lead
1655                 leadSurrogate = codePoint
1656
1657                 continue
1658               }
1659
1660               // 2 leads in a row
1661               if (codePoint < 0xDC00) {
1662                 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1663                 leadSurrogate = codePoint
1664                 continue
1665               }
1666
1667               // valid surrogate pair
1668               codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
1669             } else if (leadSurrogate) {
1670               // valid bmp char, but last char was a lead
1671               if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
1672             }
1673
1674             leadSurrogate = null
1675
1676             // encode utf8
1677             if (codePoint < 0x80) {
1678               if ((units -= 1) < 0) break
1679               bytes.push(codePoint)
1680             } else if (codePoint < 0x800) {
1681               if ((units -= 2) < 0) break
1682               bytes.push(
1683                 codePoint >> 0x6 | 0xC0,
1684                 codePoint & 0x3F | 0x80
1685               )
1686             } else if (codePoint < 0x10000) {
1687               if ((units -= 3) < 0) break
1688               bytes.push(
1689                 codePoint >> 0xC | 0xE0,
1690                 codePoint >> 0x6 & 0x3F | 0x80,
1691                 codePoint & 0x3F | 0x80
1692               )
1693             } else if (codePoint < 0x110000) {
1694               if ((units -= 4) < 0) break
1695               bytes.push(
1696                 codePoint >> 0x12 | 0xF0,
1697                 codePoint >> 0xC & 0x3F | 0x80,
1698                 codePoint >> 0x6 & 0x3F | 0x80,
1699                 codePoint & 0x3F | 0x80
1700               )
1701             } else {
1702               throw new Error('Invalid code point')
1703             }
1704           }
1705
1706           return bytes
1707         }
1708
1709         function asciiToBytes (str) {
1710           var byteArray = []
1711           for (var i = 0; i < str.length; i++) {
1712             // Node's code seems to be doing this and not & 0x7F..
1713             byteArray.push(str.charCodeAt(i) & 0xFF)
1714           }
1715           return byteArray
1716         }
1717
1718         function utf16leToBytes (str, units) {
1719           var c, hi, lo
1720           var byteArray = []
1721           for (var i = 0; i < str.length; i++) {
1722             if ((units -= 2) < 0) break
1723
1724             c = str.charCodeAt(i)
1725             hi = c >> 8
1726             lo = c % 256
1727             byteArray.push(lo)
1728             byteArray.push(hi)
1729           }
1730
1731           return byteArray
1732         }
1733
1734         function base64ToBytes (str) {
1735           return base64.toByteArray(base64clean(str))
1736         }
1737
1738         function blitBuffer (src, dst, offset, length) {
1739           for (var i = 0; i < length; i++) {
1740             if ((i + offset >= dst.length) || (i >= src.length)) break
1741             dst[i + offset] = src[i]
1742           }
1743           return i
1744         }
1745
1746         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, (function() { return this; }())))
1747
1748 /***/ },
1749 /* 3 */
1750 /***/ function(module, exports, __webpack_require__) {
1751
1752         var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
1753
1754         ;(function (exports) {
1755                 'use strict';
1756
1757           var Arr = (typeof Uint8Array !== 'undefined')
1758             ? Uint8Array
1759             : Array
1760
1761                 var PLUS   = '+'.charCodeAt(0)
1762                 var SLASH  = '/'.charCodeAt(0)
1763                 var NUMBER = '0'.charCodeAt(0)
1764                 var LOWER  = 'a'.charCodeAt(0)
1765                 var UPPER  = 'A'.charCodeAt(0)
1766                 var PLUS_URL_SAFE = '-'.charCodeAt(0)
1767                 var SLASH_URL_SAFE = '_'.charCodeAt(0)
1768
1769                 function decode (elt) {
1770                         var code = elt.charCodeAt(0)
1771                         if (code === PLUS ||
1772                             code === PLUS_URL_SAFE)
1773                                 return 62 // '+'
1774                         if (code === SLASH ||
1775                             code === SLASH_URL_SAFE)
1776                                 return 63 // '/'
1777                         if (code < NUMBER)
1778                                 return -1 //no match
1779                         if (code < NUMBER + 10)
1780                                 return code - NUMBER + 26 + 26
1781                         if (code < UPPER + 26)
1782                                 return code - UPPER
1783                         if (code < LOWER + 26)
1784                                 return code - LOWER + 26
1785                 }
1786
1787                 function b64ToByteArray (b64) {
1788                         var i, j, l, tmp, placeHolders, arr
1789
1790                         if (b64.length % 4 > 0) {
1791                                 throw new Error('Invalid string. Length must be a multiple of 4')
1792                         }
1793
1794                         // the number of equal signs (place holders)
1795                         // if there are two placeholders, than the two characters before it
1796                         // represent one byte
1797                         // if there is only one, then the three characters before it represent 2 bytes
1798                         // this is just a cheap hack to not do indexOf twice
1799                         var len = b64.length
1800                         placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
1801
1802                         // base64 is 4/3 + up to two characters of the original data
1803                         arr = new Arr(b64.length * 3 / 4 - placeHolders)
1804
1805                         // if there are placeholders, only get up to the last complete 4 chars
1806                         l = placeHolders > 0 ? b64.length - 4 : b64.length
1807
1808                         var L = 0
1809
1810                         function push (v) {
1811                                 arr[L++] = v
1812                         }
1813
1814                         for (i = 0, j = 0; i < l; i += 4, j += 3) {
1815                                 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
1816                                 push((tmp & 0xFF0000) >> 16)
1817                                 push((tmp & 0xFF00) >> 8)
1818                                 push(tmp & 0xFF)
1819                         }
1820
1821                         if (placeHolders === 2) {
1822                                 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
1823                                 push(tmp & 0xFF)
1824                         } else if (placeHolders === 1) {
1825                                 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
1826                                 push((tmp >> 8) & 0xFF)
1827                                 push(tmp & 0xFF)
1828                         }
1829
1830                         return arr
1831                 }
1832
1833                 function uint8ToBase64 (uint8) {
1834                         var i,
1835                                 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
1836                                 output = "",
1837                                 temp, length
1838
1839                         function encode (num) {
1840                                 return lookup.charAt(num)
1841                         }
1842
1843                         function tripletToBase64 (num) {
1844                                 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
1845                         }
1846
1847                         // go through the array every three bytes, we'll deal with trailing stuff later
1848                         for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
1849                                 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
1850                                 output += tripletToBase64(temp)
1851                         }
1852
1853                         // pad the end with zeros, but make sure to not forget the extra bytes
1854                         switch (extraBytes) {
1855                                 case 1:
1856                                         temp = uint8[uint8.length - 1]
1857                                         output += encode(temp >> 2)
1858                                         output += encode((temp << 4) & 0x3F)
1859                                         output += '=='
1860                                         break
1861                                 case 2:
1862                                         temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
1863                                         output += encode(temp >> 10)
1864                                         output += encode((temp >> 4) & 0x3F)
1865                                         output += encode((temp << 2) & 0x3F)
1866                                         output += '='
1867                                         break
1868                         }
1869
1870                         return output
1871                 }
1872
1873                 exports.toByteArray = b64ToByteArray
1874                 exports.fromByteArray = uint8ToBase64
1875         }( false ? (this.base64js = {}) : exports))
1876
1877
1878 /***/ },
1879 /* 4 */
1880 /***/ function(module, exports) {
1881
1882         exports.read = function (buffer, offset, isLE, mLen, nBytes) {
1883           var e, m
1884           var eLen = nBytes * 8 - mLen - 1
1885           var eMax = (1 << eLen) - 1
1886           var eBias = eMax >> 1
1887           var nBits = -7
1888           var i = isLE ? (nBytes - 1) : 0
1889           var d = isLE ? -1 : 1
1890           var s = buffer[offset + i]
1891
1892           i += d
1893
1894           e = s & ((1 << (-nBits)) - 1)
1895           s >>= (-nBits)
1896           nBits += eLen
1897           for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
1898
1899           m = e & ((1 << (-nBits)) - 1)
1900           e >>= (-nBits)
1901           nBits += mLen
1902           for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
1903
1904           if (e === 0) {
1905             e = 1 - eBias
1906           } else if (e === eMax) {
1907             return m ? NaN : ((s ? -1 : 1) * Infinity)
1908           } else {
1909             m = m + Math.pow(2, mLen)
1910             e = e - eBias
1911           }
1912           return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
1913         }
1914
1915         exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
1916           var e, m, c
1917           var eLen = nBytes * 8 - mLen - 1
1918           var eMax = (1 << eLen) - 1
1919           var eBias = eMax >> 1
1920           var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
1921           var i = isLE ? 0 : (nBytes - 1)
1922           var d = isLE ? 1 : -1
1923           var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
1924
1925           value = Math.abs(value)
1926
1927           if (isNaN(value) || value === Infinity) {
1928             m = isNaN(value) ? 1 : 0
1929             e = eMax
1930           } else {
1931             e = Math.floor(Math.log(value) / Math.LN2)
1932             if (value * (c = Math.pow(2, -e)) < 1) {
1933               e--
1934               c *= 2
1935             }
1936             if (e + eBias >= 1) {
1937               value += rt / c
1938             } else {
1939               value += rt * Math.pow(2, 1 - eBias)
1940             }
1941             if (value * c >= 2) {
1942               e++
1943               c /= 2
1944             }
1945
1946             if (e + eBias >= eMax) {
1947               m = 0
1948               e = eMax
1949             } else if (e + eBias >= 1) {
1950               m = (value * c - 1) * Math.pow(2, mLen)
1951               e = e + eBias
1952             } else {
1953               m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
1954               e = 0
1955             }
1956           }
1957
1958           for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
1959
1960           e = (e << mLen) | m
1961           eLen += mLen
1962           for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
1963
1964           buffer[offset + i - d] |= s * 128
1965         }
1966
1967
1968 /***/ },
1969 /* 5 */
1970 /***/ function(module, exports) {
1971
1972         
1973         /**
1974          * isArray
1975          */
1976
1977         var isArray = Array.isArray;
1978
1979         /**
1980          * toString
1981          */
1982
1983         var str = Object.prototype.toString;
1984
1985         /**
1986          * Whether or not the given `val`
1987          * is an array.
1988          *
1989          * example:
1990          *
1991          *        isArray([]);
1992          *        // > true
1993          *        isArray(arguments);
1994          *        // > false
1995          *        isArray('');
1996          *        // > false
1997          *
1998          * @param {mixed} val
1999          * @return {bool}
2000          */
2001
2002         module.exports = isArray || function (val) {
2003           return !! val && '[object Array]' == str.call(val);
2004         };
2005
2006
2007 /***/ },
2008 /* 6 */
2009 /***/ function(module, exports, __webpack_require__) {
2010
2011         /* jslint node: true */
2012         /* global window */
2013         'use strict';
2014
2015         var _ = __webpack_require__(7);
2016         var FontProvider = __webpack_require__(9);
2017         var LayoutBuilder = __webpack_require__(11);
2018         var PdfKit = __webpack_require__(24);
2019         var PDFReference = __webpack_require__(46);
2020         var sizes = __webpack_require__(102);
2021         var ImageMeasure = __webpack_require__(103);
2022         var textDecorator = __webpack_require__(104);
2023         var FontProvider = __webpack_require__(9);
2024
2025         ////////////////////////////////////////
2026         // PdfPrinter
2027
2028         /**
2029          * @class Creates an instance of a PdfPrinter which turns document definition into a pdf
2030          *
2031          * @param {Object} fontDescriptors font definition dictionary
2032          *
2033          * @example
2034          * var fontDescriptors = {
2035          *      Roboto: {
2036          *              normal: 'fonts/Roboto-Regular.ttf',
2037          *              bold: 'fonts/Roboto-Medium.ttf',
2038          *              italics: 'fonts/Roboto-Italic.ttf',
2039          *              bolditalics: 'fonts/Roboto-Italic.ttf'
2040          *      }
2041          * };
2042          *
2043          * var printer = new PdfPrinter(fontDescriptors);
2044          */
2045         function PdfPrinter(fontDescriptors) {
2046                 this.fontDescriptors = fontDescriptors;
2047         }
2048
2049         /**
2050          * Executes layout engine for the specified document and renders it into a pdfkit document
2051          * ready to be saved.
2052          *
2053          * @param {Object} docDefinition document definition
2054          * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)
2055          * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition
2056          * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document
2057          * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)
2058          * @param {Number} docDefinition.pageSize.width width
2059          * @param {Number} docDefinition.pageSize.height height
2060          * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)
2061          *
2062          * @example
2063          *
2064          * var docDefinition = {
2065          *      info: {
2066          *              title: 'awesome Document',
2067          *              author: 'john doe',
2068          *              subject: 'subject of document',
2069          *              keywords: 'keywords for document',
2070          *      },
2071          *      content: [
2072          *              'First paragraph',
2073          *              'Second paragraph, this time a little bit longer',
2074          *              { text: 'Third paragraph, slightly bigger font size', fontSize: 20 },
2075          *              { text: 'Another paragraph using a named style', style: 'header' },
2076          *              { text: ['playing with ', 'inlines' ] },
2077          *              { text: ['and ', { text: 'restyling ', bold: true }, 'them'] },
2078          *      ],
2079          *      styles: {
2080          *              header: { fontSize: 30, bold: true }
2081          *      }
2082          * }
2083          *
2084          * var pdfDoc = printer.createPdfKitDocument(docDefinition);
2085          *
2086          * pdfDoc.pipe(fs.createWriteStream('sample.pdf'));
2087          * pdfDoc.end();
2088          *
2089          * @return {Object} a pdfKit document object which can be saved or encode to data-url
2090          */
2091         PdfPrinter.prototype.createPdfKitDocument = function(docDefinition, options) {
2092                 options = options || {};
2093
2094                 var pageSize = pageSize2widthAndHeight(docDefinition.pageSize || 'a4');
2095
2096           if(docDefinition.pageOrientation === 'landscape') {
2097             pageSize = { width: pageSize.height, height: pageSize.width};
2098           }
2099                 pageSize.orientation = docDefinition.pageOrientation === 'landscape' ? docDefinition.pageOrientation : 'portrait';
2100
2101                 this.pdfKitDoc = new PdfKit({ size: [ pageSize.width, pageSize.height ], compress: false});
2102                 this.pdfKitDoc.info.Producer = 'pdfmake';
2103                 this.pdfKitDoc.info.Creator = 'pdfmake';
2104                 
2105                 // pdf kit maintains the uppercase fieldnames from pdf spec
2106                 // to keep the pdfmake api consistent, the info field are defined lowercase
2107                 if(docDefinition.info){
2108                         var info = docDefinition.info;
2109                         // check for falsey an set null, so that pdfkit always get either null or value
2110                         this.pdfKitDoc.info.Title = docDefinition.info.title ? docDefinition.info.title : null;
2111                         this.pdfKitDoc.info.Author = docDefinition.info.author ? docDefinition.info.author : null;
2112                         this.pdfKitDoc.info.Subject = docDefinition.info.subject ? docDefinition.info.subject : null;
2113                         this.pdfKitDoc.info.Keywords = docDefinition.info.keywords ? docDefinition.info.keywords : null;
2114                 }
2115                 
2116                 this.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);
2117
2118           docDefinition.images = docDefinition.images || {};
2119
2120                 var builder = new LayoutBuilder(
2121                         pageSize,
2122                         fixPageMargins(docDefinition.pageMargins || 40),
2123                 new ImageMeasure(this.pdfKitDoc, docDefinition.images));
2124
2125           registerDefaultTableLayouts(builder);
2126           if (options.tableLayouts) {
2127             builder.registerTableLayouts(options.tableLayouts);
2128           }
2129
2130                 var pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || { fontSize: 12, font: 'Roboto' }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);
2131
2132                 renderPages(pages, this.fontProvider, this.pdfKitDoc);
2133
2134                 if(options.autoPrint){
2135             var printActionRef = this.pdfKitDoc.ref({
2136               Type: 'Action',
2137               S: 'Named',
2138               N: 'Print'
2139             });
2140             this.pdfKitDoc._root.data.OpenAction = printActionRef;
2141             printActionRef.end();
2142                 }
2143                 return this.pdfKitDoc;
2144         };
2145
2146         function fixPageMargins(margin) {
2147             if (!margin) return null;
2148
2149             if (typeof margin === 'number' || margin instanceof Number) {
2150                 margin = { left: margin, right: margin, top: margin, bottom: margin };
2151             } else if (margin instanceof Array) {
2152                 if (margin.length === 2) {
2153                     margin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };
2154                 } else if (margin.length === 4) {
2155                     margin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };
2156                 } else throw 'Invalid pageMargins definition';
2157             }
2158
2159             return margin;
2160         }
2161
2162         function registerDefaultTableLayouts(layoutBuilder) {
2163           layoutBuilder.registerTableLayouts({
2164             noBorders: {
2165               hLineWidth: function(i) { return 0; },
2166               vLineWidth: function(i) { return 0; },
2167               paddingLeft: function(i) { return i && 4 || 0; },
2168               paddingRight: function(i, node) { return (i < node.table.widths.length - 1) ? 4 : 0; },
2169             },
2170             headerLineOnly: {
2171               hLineWidth: function(i, node) {
2172                 if (i === 0 || i === node.table.body.length) return 0;
2173                 return (i === node.table.headerRows) ? 2 : 0;
2174               },
2175               vLineWidth: function(i) { return 0; },
2176               paddingLeft: function(i) {
2177                 return i === 0 ? 0 : 8;
2178               },
2179               paddingRight: function(i, node) {
2180                 return (i === node.table.widths.length - 1) ? 0 : 8;
2181               }
2182             },
2183             lightHorizontalLines: {
2184               hLineWidth: function(i, node) {
2185                 if (i === 0 || i === node.table.body.length) return 0;
2186                 return (i === node.table.headerRows) ? 2 : 1;
2187               },
2188               vLineWidth: function(i) { return 0; },
2189               hLineColor: function(i) { return i === 1 ? 'black' : '#aaa'; },
2190               paddingLeft: function(i) {
2191                 return i === 0 ? 0 : 8;
2192               },
2193               paddingRight: function(i, node) {
2194                 return (i === node.table.widths.length - 1) ? 0 : 8;
2195               }
2196             }
2197           });
2198         }
2199
2200         var defaultLayout = {
2201           hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },
2202           vLineWidth: function(i, node) { return 1; },
2203           hLineColor: function(i, node) { return 'black'; },
2204           vLineColor: function(i, node) { return 'black'; },
2205           paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },
2206           paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },
2207           paddingTop: function(i, node) { return 2; },
2208           paddingBottom: function(i, node) { return 2; }
2209         };
2210
2211         function pageSize2widthAndHeight(pageSize) {
2212             if (typeof pageSize == 'string' || pageSize instanceof String) {
2213                 var size = sizes[pageSize.toUpperCase()];
2214                 if (!size) throw ('Page size ' + pageSize + ' not recognized');
2215                 return { width: size[0], height: size[1] };
2216             }
2217
2218             return pageSize;
2219         }
2220
2221         function StringObject(str){
2222                 this.isString = true;
2223                 this.toString = function(){
2224                         return str;
2225                 };
2226         }
2227
2228         function updatePageOrientationInOptions(currentPage, pdfKitDoc) {
2229                 var previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';
2230
2231                 if(currentPage.pageSize.orientation !== previousPageOrientation) {
2232                         var width = pdfKitDoc.options.size[0];
2233                         var height = pdfKitDoc.options.size[1];
2234                         pdfKitDoc.options.size = [height, width];
2235                 }
2236         }
2237
2238         function renderPages(pages, fontProvider, pdfKitDoc) {
2239           pdfKitDoc._pdfMakePages = pages;
2240                 for (var i = 0; i < pages.length; i++) {
2241                         if (i > 0) {
2242                                 updatePageOrientationInOptions(pages[i], pdfKitDoc);
2243                                 pdfKitDoc.addPage(pdfKitDoc.options);
2244                         }
2245
2246                         var page = pages[i];
2247             for(var ii = 0, il = page.items.length; ii < il; ii++) {
2248                 var item = page.items[ii];
2249                 switch(item.type) {
2250                   case 'vector':
2251                       renderVector(item.item, pdfKitDoc);
2252                       break;
2253                   case 'line':
2254                       renderLine(item.item, item.item.x, item.item.y, pdfKitDoc);
2255                       break;
2256                   case 'image':
2257                       renderImage(item.item, item.item.x, item.item.y, pdfKitDoc);
2258                       break;
2259                                         }
2260             }
2261             if(page.watermark){
2262               renderWatermark(page, pdfKitDoc);
2263                 }
2264
2265             fontProvider.setFontRefsToPdfDoc();
2266           }
2267         }
2268
2269         function renderLine(line, x, y, pdfKitDoc) {
2270                 x = x || 0;
2271                 y = y || 0;
2272
2273                 var lineHeight = line.getHeight();
2274                 var ascenderHeight = line.getAscenderHeight();
2275
2276                 textDecorator.drawBackground(line, x, y, pdfKitDoc);
2277
2278                 //TODO: line.optimizeInlines();
2279                 for(var i = 0, l = line.inlines.length; i < l; i++) {
2280                         var inline = line.inlines[i];
2281
2282                         pdfKitDoc.fill(inline.color || 'black');
2283
2284                         pdfKitDoc.save();
2285                         pdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);
2286
2287
2288             var encoded = inline.font.encode(inline.text);
2289                         pdfKitDoc.addContent('BT');
2290
2291                         pdfKitDoc.addContent('' + (x + inline.x) + ' ' + (pdfKitDoc.page.height - y - ascenderHeight) + ' Td');
2292                         pdfKitDoc.addContent('/' + encoded.fontId + ' ' + inline.fontSize + ' Tf');
2293
2294                 pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
2295
2296                         pdfKitDoc.addContent('ET');
2297
2298                         if (inline.link) {
2299                                 pdfKitDoc.link(x + inline.x, pdfKitDoc.page.height - y - lineHeight, inline.width, lineHeight, inline.link);
2300                         }
2301
2302                         pdfKitDoc.restore();
2303                 }
2304
2305                 textDecorator.drawDecorations(line, x, y, pdfKitDoc);
2306
2307         }
2308
2309         function renderWatermark(page, pdfKitDoc){
2310                 var watermark = page.watermark;
2311
2312                 pdfKitDoc.fill('black');
2313                 pdfKitDoc.opacity(0.6);
2314
2315                 pdfKitDoc.save();
2316                 pdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);
2317
2318                 var angle = Math.atan2(pdfKitDoc.page.height, pdfKitDoc.page.width) * 180/Math.PI;
2319                 pdfKitDoc.rotate(angle, {origin: [pdfKitDoc.page.width/2, pdfKitDoc.page.height/2]});
2320
2321           var encoded = watermark.font.encode(watermark.text);
2322                 pdfKitDoc.addContent('BT');
2323                 pdfKitDoc.addContent('' + (pdfKitDoc.page.width/2 - watermark.size.size.width/2) + ' ' + (pdfKitDoc.page.height/2 - watermark.size.size.height/4) + ' Td');
2324                 pdfKitDoc.addContent('/' + encoded.fontId + ' ' + watermark.size.fontSize + ' Tf');
2325                 pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
2326                 pdfKitDoc.addContent('ET');
2327                 pdfKitDoc.restore();
2328         }
2329
2330         function renderVector(vector, pdfDoc) {
2331                 //TODO: pdf optimization (there's no need to write all properties everytime)
2332                 pdfDoc.lineWidth(vector.lineWidth || 1);
2333                 if (vector.dash) {
2334                         pdfDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length });
2335                 } else {
2336                         pdfDoc.undash();
2337                 }
2338                 pdfDoc.fillOpacity(vector.fillOpacity || 1);
2339                 pdfDoc.strokeOpacity(vector.strokeOpacity || 1);
2340                 pdfDoc.lineJoin(vector.lineJoin || 'miter');
2341
2342                 //TODO: clipping
2343
2344                 switch(vector.type) {
2345                         case 'ellipse':
2346                                 pdfDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);
2347                                 break;
2348                         case 'rect':
2349                                 if (vector.r) {
2350                                         pdfDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);
2351                                 } else {
2352                                         pdfDoc.rect(vector.x, vector.y, vector.w, vector.h);
2353                                 }
2354                                 break;
2355                         case 'line':
2356                                 pdfDoc.moveTo(vector.x1, vector.y1);
2357                                 pdfDoc.lineTo(vector.x2, vector.y2);
2358                                 break;
2359                         case 'polyline':
2360                                 if (vector.points.length === 0) break;
2361
2362                                 pdfDoc.moveTo(vector.points[0].x, vector.points[0].y);
2363                                 for(var i = 1, l = vector.points.length; i < l; i++) {
2364                                         pdfDoc.lineTo(vector.points[i].x, vector.points[i].y);
2365                                 }
2366
2367                                 if (vector.points.length > 1) {
2368                                         var p1 = vector.points[0];
2369                                         var pn = vector.points[vector.points.length - 1];
2370
2371                                         if (vector.closePath || p1.x === pn.x && p1.y === pn.y) {
2372                                                 pdfDoc.closePath();
2373                                         }
2374                                 }
2375                                 break;
2376                 }
2377
2378                 if (vector.color && vector.lineColor) {
2379                         pdfDoc.fillAndStroke(vector.color, vector.lineColor);
2380                 } else if (vector.color) {
2381                         pdfDoc.fill(vector.color);
2382                 } else {
2383                         pdfDoc.stroke(vector.lineColor || 'black');
2384                 }
2385         }
2386
2387         function renderImage(image, x, y, pdfKitDoc) {
2388             pdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });
2389         }
2390
2391         module.exports = PdfPrinter;
2392
2393
2394         /* temporary browser extension */
2395         PdfPrinter.prototype.fs = __webpack_require__(44);
2396
2397
2398 /***/ },
2399 /* 7 */
2400 /***/ function(module, exports, __webpack_require__) {
2401
2402         var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**
2403          * @license
2404          * lodash 3.10.1 (Custom Build) <https://lodash.com/>
2405          * Build: `lodash modern -d -o ./index.js`
2406          * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
2407          * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
2408          * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
2409          * Available under MIT license <https://lodash.com/license>
2410          */
2411         ;(function() {
2412
2413           /** Used as a safe reference for `undefined` in pre-ES5 environments. */
2414           var undefined;
2415
2416           /** Used as the semantic version number. */
2417           var VERSION = '3.10.1';
2418
2419           /** Used to compose bitmasks for wrapper metadata. */
2420           var BIND_FLAG = 1,
2421               BIND_KEY_FLAG = 2,
2422               CURRY_BOUND_FLAG = 4,
2423               CURRY_FLAG = 8,
2424               CURRY_RIGHT_FLAG = 16,
2425               PARTIAL_FLAG = 32,
2426               PARTIAL_RIGHT_FLAG = 64,
2427               ARY_FLAG = 128,
2428               REARG_FLAG = 256;
2429
2430           /** Used as default options for `_.trunc`. */
2431           var DEFAULT_TRUNC_LENGTH = 30,
2432               DEFAULT_TRUNC_OMISSION = '...';
2433
2434           /** Used to detect when a function becomes hot. */
2435           var HOT_COUNT = 150,
2436               HOT_SPAN = 16;
2437
2438           /** Used as the size to enable large array optimizations. */
2439           var LARGE_ARRAY_SIZE = 200;
2440
2441           /** Used to indicate the type of lazy iteratees. */
2442           var LAZY_FILTER_FLAG = 1,
2443               LAZY_MAP_FLAG = 2;
2444
2445           /** Used as the `TypeError` message for "Functions" methods. */
2446           var FUNC_ERROR_TEXT = 'Expected a function';
2447
2448           /** Used as the internal argument placeholder. */
2449           var PLACEHOLDER = '__lodash_placeholder__';
2450
2451           /** `Object#toString` result references. */
2452           var argsTag = '[object Arguments]',
2453               arrayTag = '[object Array]',
2454               boolTag = '[object Boolean]',
2455               dateTag = '[object Date]',
2456               errorTag = '[object Error]',
2457               funcTag = '[object Function]',
2458               mapTag = '[object Map]',
2459               numberTag = '[object Number]',
2460               objectTag = '[object Object]',
2461               regexpTag = '[object RegExp]',
2462               setTag = '[object Set]',
2463               stringTag = '[object String]',
2464               weakMapTag = '[object WeakMap]';
2465
2466           var arrayBufferTag = '[object ArrayBuffer]',
2467               float32Tag = '[object Float32Array]',
2468               float64Tag = '[object Float64Array]',
2469               int8Tag = '[object Int8Array]',
2470               int16Tag = '[object Int16Array]',
2471               int32Tag = '[object Int32Array]',
2472               uint8Tag = '[object Uint8Array]',
2473               uint8ClampedTag = '[object Uint8ClampedArray]',
2474               uint16Tag = '[object Uint16Array]',
2475               uint32Tag = '[object Uint32Array]';
2476
2477           /** Used to match empty string literals in compiled template source. */
2478           var reEmptyStringLeading = /\b__p \+= '';/g,
2479               reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
2480               reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
2481
2482           /** Used to match HTML entities and HTML characters. */
2483           var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
2484               reUnescapedHtml = /[&<>"'`]/g,
2485               reHasEscapedHtml = RegExp(reEscapedHtml.source),
2486               reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
2487
2488           /** Used to match template delimiters. */
2489           var reEscape = /<%-([\s\S]+?)%>/g,
2490               reEvaluate = /<%([\s\S]+?)%>/g,
2491               reInterpolate = /<%=([\s\S]+?)%>/g;
2492
2493           /** Used to match property names within property paths. */
2494           var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
2495               reIsPlainProp = /^\w*$/,
2496               rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
2497
2498           /**
2499            * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)
2500            * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).
2501            */
2502           var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,
2503               reHasRegExpChars = RegExp(reRegExpChars.source);
2504
2505           /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */
2506           var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g;
2507
2508           /** Used to match backslashes in property paths. */
2509           var reEscapeChar = /\\(\\)?/g;
2510
2511           /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
2512           var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
2513
2514           /** Used to match `RegExp` flags from their coerced string values. */
2515           var reFlags = /\w*$/;
2516
2517           /** Used to detect hexadecimal string values. */
2518           var reHasHexPrefix = /^0[xX]/;
2519
2520           /** Used to detect host constructors (Safari > 5). */
2521           var reIsHostCtor = /^\[object .+?Constructor\]$/;
2522
2523           /** Used to detect unsigned integer values. */
2524           var reIsUint = /^\d+$/;
2525
2526           /** Used to match latin-1 supplementary letters (excluding mathematical operators). */
2527           var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
2528
2529           /** Used to ensure capturing order of template delimiters. */
2530           var reNoMatch = /($^)/;
2531
2532           /** Used to match unescaped characters in compiled string literals. */
2533           var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
2534
2535           /** Used to match words to create compound words. */
2536           var reWords = (function() {
2537             var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
2538                 lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+';
2539
2540             return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');
2541           }());
2542
2543           /** Used to assign default `context` object properties. */
2544           var contextProps = [
2545             'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',
2546             'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',
2547             'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',
2548             'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
2549             'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
2550           ];
2551
2552           /** Used to make template sourceURLs easier to identify. */
2553           var templateCounter = -1;
2554
2555           /** Used to identify `toStringTag` values of typed arrays. */
2556           var typedArrayTags = {};
2557           typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
2558           typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
2559           typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
2560           typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
2561           typedArrayTags[uint32Tag] = true;
2562           typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
2563           typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
2564           typedArrayTags[dateTag] = typedArrayTags[errorTag] =
2565           typedArrayTags[funcTag] = typedArrayTags[mapTag] =
2566           typedArrayTags[numberTag] = typedArrayTags[objectTag] =
2567           typedArrayTags[regexpTag] = typedArrayTags[setTag] =
2568           typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
2569
2570           /** Used to identify `toStringTag` values supported by `_.clone`. */
2571           var cloneableTags = {};
2572           cloneableTags[argsTag] = cloneableTags[arrayTag] =
2573           cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
2574           cloneableTags[dateTag] = cloneableTags[float32Tag] =
2575           cloneableTags[float64Tag] = cloneableTags[int8Tag] =
2576           cloneableTags[int16Tag] = cloneableTags[int32Tag] =
2577           cloneableTags[numberTag] = cloneableTags[objectTag] =
2578           cloneableTags[regexpTag] = cloneableTags[stringTag] =
2579           cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
2580           cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
2581           cloneableTags[errorTag] = cloneableTags[funcTag] =
2582           cloneableTags[mapTag] = cloneableTags[setTag] =
2583           cloneableTags[weakMapTag] = false;
2584
2585           /** Used to map latin-1 supplementary letters to basic latin letters. */
2586           var deburredLetters = {
2587             '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
2588             '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
2589             '\xc7': 'C',  '\xe7': 'c',
2590             '\xd0': 'D',  '\xf0': 'd',
2591             '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
2592             '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
2593             '\xcC': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
2594             '\xeC': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
2595             '\xd1': 'N',  '\xf1': 'n',
2596             '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
2597             '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
2598             '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
2599             '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
2600             '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
2601             '\xc6': 'Ae', '\xe6': 'ae',
2602             '\xde': 'Th', '\xfe': 'th',
2603             '\xdf': 'ss'
2604           };
2605
2606           /** Used to map characters to HTML entities. */
2607           var htmlEscapes = {
2608             '&': '&amp;',
2609             '<': '&lt;',
2610             '>': '&gt;',
2611             '"': '&quot;',
2612             "'": '&#39;',
2613             '`': '&#96;'
2614           };
2615
2616           /** Used to map HTML entities to characters. */
2617           var htmlUnescapes = {
2618             '&amp;': '&',
2619             '&lt;': '<',
2620             '&gt;': '>',
2621             '&quot;': '"',
2622             '&#39;': "'",
2623             '&#96;': '`'
2624           };
2625
2626           /** Used to determine if values are of the language type `Object`. */
2627           var objectTypes = {
2628             'function': true,
2629             'object': true
2630           };
2631
2632           /** Used to escape characters for inclusion in compiled regexes. */
2633           var regexpEscapes = {
2634             '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',
2635             '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',
2636             'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',
2637             'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',
2638             'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'
2639           };
2640
2641           /** Used to escape characters for inclusion in compiled string literals. */
2642           var stringEscapes = {
2643             '\\': '\\',
2644             "'": "'",
2645             '\n': 'n',
2646             '\r': 'r',
2647             '\u2028': 'u2028',
2648             '\u2029': 'u2029'
2649           };
2650
2651           /** Detect free variable `exports`. */
2652           var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
2653
2654           /** Detect free variable `module`. */
2655           var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
2656
2657           /** Detect free variable `global` from Node.js. */
2658           var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
2659
2660           /** Detect free variable `self`. */
2661           var freeSelf = objectTypes[typeof self] && self && self.Object && self;
2662
2663           /** Detect free variable `window`. */
2664           var freeWindow = objectTypes[typeof window] && window && window.Object && window;
2665
2666           /** Detect the popular CommonJS extension `module.exports`. */
2667           var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
2668
2669           /**
2670            * Used as a reference to the global object.
2671            *
2672            * The `this` value is used if it's the global object to avoid Greasemonkey's
2673            * restricted `window` object, otherwise the `window` object is used.
2674            */
2675           var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
2676
2677           /*--------------------------------------------------------------------------*/
2678
2679           /**
2680            * The base implementation of `compareAscending` which compares values and
2681            * sorts them in ascending order without guaranteeing a stable sort.
2682            *
2683            * @private
2684            * @param {*} value The value to compare.
2685            * @param {*} other The other value to compare.
2686            * @returns {number} Returns the sort order indicator for `value`.
2687            */
2688           function baseCompareAscending(value, other) {
2689             if (value !== other) {
2690               var valIsNull = value === null,
2691                   valIsUndef = value === undefined,
2692                   valIsReflexive = value === value;
2693
2694               var othIsNull = other === null,
2695                   othIsUndef = other === undefined,
2696                   othIsReflexive = other === other;
2697
2698               if ((value > other && !othIsNull) || !valIsReflexive ||
2699                   (valIsNull && !othIsUndef && othIsReflexive) ||
2700                   (valIsUndef && othIsReflexive)) {
2701                 return 1;
2702               }
2703               if ((value < other && !valIsNull) || !othIsReflexive ||
2704                   (othIsNull && !valIsUndef && valIsReflexive) ||
2705                   (othIsUndef && valIsReflexive)) {
2706                 return -1;
2707               }
2708             }
2709             return 0;
2710           }
2711
2712           /**
2713            * The base implementation of `_.findIndex` and `_.findLastIndex` without
2714            * support for callback shorthands and `this` binding.
2715            *
2716            * @private
2717            * @param {Array} array The array to search.
2718            * @param {Function} predicate The function invoked per iteration.
2719            * @param {boolean} [fromRight] Specify iterating from right to left.
2720            * @returns {number} Returns the index of the matched value, else `-1`.
2721            */
2722           function baseFindIndex(array, predicate, fromRight) {
2723             var length = array.length,
2724                 index = fromRight ? length : -1;
2725
2726             while ((fromRight ? index-- : ++index < length)) {
2727               if (predicate(array[index], index, array)) {
2728                 return index;
2729               }
2730             }
2731             return -1;
2732           }
2733
2734           /**
2735            * The base implementation of `_.indexOf` without support for binary searches.
2736            *
2737            * @private
2738            * @param {Array} array The array to search.
2739            * @param {*} value The value to search for.
2740            * @param {number} fromIndex The index to search from.
2741            * @returns {number} Returns the index of the matched value, else `-1`.
2742            */
2743           function baseIndexOf(array, value, fromIndex) {
2744             if (value !== value) {
2745               return indexOfNaN(array, fromIndex);
2746             }
2747             var index = fromIndex - 1,
2748                 length = array.length;
2749
2750             while (++index < length) {
2751               if (array[index] === value) {
2752                 return index;
2753               }
2754             }
2755             return -1;
2756           }
2757
2758           /**
2759            * The base implementation of `_.isFunction` without support for environments
2760            * with incorrect `typeof` results.
2761            *
2762            * @private
2763            * @param {*} value The value to check.
2764            * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
2765            */
2766           function baseIsFunction(value) {
2767             // Avoid a Chakra JIT bug in compatibility modes of IE 11.
2768             // See https://github.com/jashkenas/underscore/issues/1621 for more details.
2769             return typeof value == 'function' || false;
2770           }
2771
2772           /**
2773            * Converts `value` to a string if it's not one. An empty string is returned
2774            * for `null` or `undefined` values.
2775            *
2776            * @private
2777            * @param {*} value The value to process.
2778            * @returns {string} Returns the string.
2779            */
2780           function baseToString(value) {
2781             return value == null ? '' : (value + '');
2782           }
2783
2784           /**
2785            * Used by `_.trim` and `_.trimLeft` to get the index of the first character
2786            * of `string` that is not found in `chars`.
2787            *
2788            * @private
2789            * @param {string} string The string to inspect.
2790            * @param {string} chars The characters to find.
2791            * @returns {number} Returns the index of the first character not found in `chars`.
2792            */
2793           function charsLeftIndex(string, chars) {
2794             var index = -1,
2795                 length = string.length;
2796
2797             while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}
2798             return index;
2799           }
2800
2801           /**
2802            * Used by `_.trim` and `_.trimRight` to get the index of the last character
2803            * of `string` that is not found in `chars`.
2804            *
2805            * @private
2806            * @param {string} string The string to inspect.
2807            * @param {string} chars The characters to find.
2808            * @returns {number} Returns the index of the last character not found in `chars`.
2809            */
2810           function charsRightIndex(string, chars) {
2811             var index = string.length;
2812
2813             while (index-- && chars.indexOf(string.charAt(index)) > -1) {}
2814             return index;
2815           }
2816
2817           /**
2818            * Used by `_.sortBy` to compare transformed elements of a collection and stable
2819            * sort them in ascending order.
2820            *
2821            * @private
2822            * @param {Object} object The object to compare.
2823            * @param {Object} other The other object to compare.
2824            * @returns {number} Returns the sort order indicator for `object`.
2825            */
2826           function compareAscending(object, other) {
2827             return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
2828           }
2829
2830           /**
2831            * Used by `_.sortByOrder` to compare multiple properties of a value to another
2832            * and stable sort them.
2833            *
2834            * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
2835            * a value is sorted in ascending order if its corresponding order is "asc", and
2836            * descending if "desc".
2837            *
2838            * @private
2839            * @param {Object} object The object to compare.
2840            * @param {Object} other The other object to compare.
2841            * @param {boolean[]} orders The order to sort by for each property.
2842            * @returns {number} Returns the sort order indicator for `object`.
2843            */
2844           function compareMultiple(object, other, orders) {
2845             var index = -1,
2846                 objCriteria = object.criteria,
2847                 othCriteria = other.criteria,
2848                 length = objCriteria.length,
2849                 ordersLength = orders.length;
2850
2851             while (++index < length) {
2852               var result = baseCompareAscending(objCriteria[index], othCriteria[index]);
2853               if (result) {
2854                 if (index >= ordersLength) {
2855                   return result;
2856                 }
2857                 var order = orders[index];
2858                 return result * ((order === 'asc' || order === true) ? 1 : -1);
2859               }
2860             }
2861             // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
2862             // that causes it, under certain circumstances, to provide the same value for
2863             // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
2864             // for more details.
2865             //
2866             // This also ensures a stable sort in V8 and other engines.
2867             // See https://code.google.com/p/v8/issues/detail?id=90 for more details.
2868             return object.index - other.index;
2869           }
2870
2871           /**
2872            * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.
2873            *
2874            * @private
2875            * @param {string} letter The matched letter to deburr.
2876            * @returns {string} Returns the deburred letter.
2877            */
2878           function deburrLetter(letter) {
2879             return deburredLetters[letter];
2880           }
2881
2882           /**
2883            * Used by `_.escape` to convert characters to HTML entities.
2884            *
2885            * @private
2886            * @param {string} chr The matched character to escape.
2887            * @returns {string} Returns the escaped character.
2888            */
2889           function escapeHtmlChar(chr) {
2890             return htmlEscapes[chr];
2891           }
2892
2893           /**
2894            * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.
2895            *
2896            * @private
2897            * @param {string} chr The matched character to escape.
2898            * @param {string} leadingChar The capture group for a leading character.
2899            * @param {string} whitespaceChar The capture group for a whitespace character.
2900            * @returns {string} Returns the escaped character.
2901            */
2902           function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
2903             if (leadingChar) {
2904               chr = regexpEscapes[chr];
2905             } else if (whitespaceChar) {
2906               chr = stringEscapes[chr];
2907             }
2908             return '\\' + chr;
2909           }
2910
2911           /**
2912            * Used by `_.template` to escape characters for inclusion in compiled string literals.
2913            *
2914            * @private
2915            * @param {string} chr The matched character to escape.
2916            * @returns {string} Returns the escaped character.
2917            */
2918           function escapeStringChar(chr) {
2919             return '\\' + stringEscapes[chr];
2920           }
2921
2922           /**
2923            * Gets the index at which the first occurrence of `NaN` is found in `array`.
2924            *
2925            * @private
2926            * @param {Array} array The array to search.
2927            * @param {number} fromIndex The index to search from.
2928            * @param {boolean} [fromRight] Specify iterating from right to left.
2929            * @returns {number} Returns the index of the matched `NaN`, else `-1`.
2930            */
2931           function indexOfNaN(array, fromIndex, fromRight) {
2932             var length = array.length,
2933                 index = fromIndex + (fromRight ? 0 : -1);
2934
2935             while ((fromRight ? index-- : ++index < length)) {
2936               var other = array[index];
2937               if (other !== other) {
2938                 return index;
2939               }
2940             }
2941             return -1;
2942           }
2943
2944           /**
2945            * Checks if `value` is object-like.
2946            *
2947            * @private
2948            * @param {*} value The value to check.
2949            * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
2950            */
2951           function isObjectLike(value) {
2952             return !!value && typeof value == 'object';
2953           }
2954
2955           /**
2956            * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
2957            * character code is whitespace.
2958            *
2959            * @private
2960            * @param {number} charCode The character code to inspect.
2961            * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.
2962            */
2963           function isSpace(charCode) {
2964             return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||
2965               (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));
2966           }
2967
2968           /**
2969            * Replaces all `placeholder` elements in `array` with an internal placeholder
2970            * and returns an array of their indexes.
2971            *
2972            * @private
2973            * @param {Array} array The array to modify.
2974            * @param {*} placeholder The placeholder to replace.
2975            * @returns {Array} Returns the new array of placeholder indexes.
2976            */
2977           function replaceHolders(array, placeholder) {
2978             var index = -1,
2979                 length = array.length,
2980                 resIndex = -1,
2981                 result = [];
2982
2983             while (++index < length) {
2984               if (array[index] === placeholder) {
2985                 array[index] = PLACEHOLDER;
2986                 result[++resIndex] = index;
2987               }
2988             }
2989             return result;
2990           }
2991
2992           /**
2993            * An implementation of `_.uniq` optimized for sorted arrays without support
2994            * for callback shorthands and `this` binding.
2995            *
2996            * @private
2997            * @param {Array} array The array to inspect.
2998            * @param {Function} [iteratee] The function invoked per iteration.
2999            * @returns {Array} Returns the new duplicate-value-free array.
3000            */
3001           function sortedUniq(array, iteratee) {
3002             var seen,
3003                 index = -1,
3004                 length = array.length,
3005                 resIndex = -1,
3006                 result = [];
3007
3008             while (++index < length) {
3009               var value = array[index],
3010                   computed = iteratee ? iteratee(value, index, array) : value;
3011
3012               if (!index || seen !== computed) {
3013                 seen = computed;
3014                 result[++resIndex] = value;
3015               }
3016             }
3017             return result;
3018           }
3019
3020           /**
3021            * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace
3022            * character of `string`.
3023            *
3024            * @private
3025            * @param {string} string The string to inspect.
3026            * @returns {number} Returns the index of the first non-whitespace character.
3027            */
3028           function trimmedLeftIndex(string) {
3029             var index = -1,
3030                 length = string.length;
3031
3032             while (++index < length && isSpace(string.charCodeAt(index))) {}
3033             return index;
3034           }
3035
3036           /**
3037            * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace
3038            * character of `string`.
3039            *
3040            * @private
3041            * @param {string} string The string to inspect.
3042            * @returns {number} Returns the index of the last non-whitespace character.
3043            */
3044           function trimmedRightIndex(string) {
3045             var index = string.length;
3046
3047             while (index-- && isSpace(string.charCodeAt(index))) {}
3048             return index;
3049           }
3050
3051           /**
3052            * Used by `_.unescape` to convert HTML entities to characters.
3053            *
3054            * @private
3055            * @param {string} chr The matched character to unescape.
3056            * @returns {string} Returns the unescaped character.
3057            */
3058           function unescapeHtmlChar(chr) {
3059             return htmlUnescapes[chr];
3060           }
3061
3062           /*--------------------------------------------------------------------------*/
3063
3064           /**
3065            * Create a new pristine `lodash` function using the given `context` object.
3066            *
3067            * @static
3068            * @memberOf _
3069            * @category Utility
3070            * @param {Object} [context=root] The context object.
3071            * @returns {Function} Returns a new `lodash` function.
3072            * @example
3073            *
3074            * _.mixin({ 'foo': _.constant('foo') });
3075            *
3076            * var lodash = _.runInContext();
3077            * lodash.mixin({ 'bar': lodash.constant('bar') });
3078            *
3079            * _.isFunction(_.foo);
3080            * // => true
3081            * _.isFunction(_.bar);
3082            * // => false
3083            *
3084            * lodash.isFunction(lodash.foo);
3085            * // => false
3086            * lodash.isFunction(lodash.bar);
3087            * // => true
3088            *
3089            * // using `context` to mock `Date#getTime` use in `_.now`
3090            * var mock = _.runInContext({
3091            *   'Date': function() {
3092            *     return { 'getTime': getTimeMock };
3093            *   }
3094            * });
3095            *
3096            * // or creating a suped-up `defer` in Node.js
3097            * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
3098            */
3099           function runInContext(context) {
3100             // Avoid issues with some ES3 environments that attempt to use values, named
3101             // after built-in constructors like `Object`, for the creation of literals.
3102             // ES5 clears this up by stating that literals must use built-in constructors.
3103             // See https://es5.github.io/#x11.1.5 for more details.
3104             context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
3105
3106             /** Native constructor references. */
3107             var Array = context.Array,
3108                 Date = context.Date,
3109                 Error = context.Error,
3110                 Function = context.Function,
3111                 Math = context.Math,
3112                 Number = context.Number,
3113                 Object = context.Object,
3114                 RegExp = context.RegExp,
3115                 String = context.String,
3116                 TypeError = context.TypeError;
3117
3118             /** Used for native method references. */
3119             var arrayProto = Array.prototype,
3120                 objectProto = Object.prototype,
3121                 stringProto = String.prototype;
3122
3123             /** Used to resolve the decompiled source of functions. */
3124             var fnToString = Function.prototype.toString;
3125
3126             /** Used to check objects for own properties. */
3127             var hasOwnProperty = objectProto.hasOwnProperty;
3128
3129             /** Used to generate unique IDs. */
3130             var idCounter = 0;
3131
3132             /**
3133              * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
3134              * of values.
3135              */
3136             var objToString = objectProto.toString;
3137
3138             /** Used to restore the original `_` reference in `_.noConflict`. */
3139             var oldDash = root._;
3140
3141             /** Used to detect if a method is native. */
3142             var reIsNative = RegExp('^' +
3143               fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
3144               .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
3145             );
3146
3147             /** Native method references. */
3148             var ArrayBuffer = context.ArrayBuffer,
3149                 clearTimeout = context.clearTimeout,
3150                 parseFloat = context.parseFloat,
3151                 pow = Math.pow,
3152                 propertyIsEnumerable = objectProto.propertyIsEnumerable,
3153                 Set = getNative(context, 'Set'),
3154                 setTimeout = context.setTimeout,
3155                 splice = arrayProto.splice,
3156                 Uint8Array = context.Uint8Array,
3157                 WeakMap = getNative(context, 'WeakMap');
3158
3159             /* Native method references for those with the same name as other `lodash` methods. */
3160             var nativeCeil = Math.ceil,
3161                 nativeCreate = getNative(Object, 'create'),
3162                 nativeFloor = Math.floor,
3163                 nativeIsArray = getNative(Array, 'isArray'),
3164                 nativeIsFinite = context.isFinite,
3165                 nativeKeys = getNative(Object, 'keys'),
3166                 nativeMax = Math.max,
3167                 nativeMin = Math.min,
3168                 nativeNow = getNative(Date, 'now'),
3169                 nativeParseInt = context.parseInt,
3170                 nativeRandom = Math.random;
3171
3172             /** Used as references for `-Infinity` and `Infinity`. */
3173             var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,
3174                 POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
3175
3176             /** Used as references for the maximum length and index of an array. */
3177             var MAX_ARRAY_LENGTH = 4294967295,
3178                 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
3179                 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
3180
3181             /**
3182              * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
3183              * of an array-like value.
3184              */
3185             var MAX_SAFE_INTEGER = 9007199254740991;
3186
3187             /** Used to store function metadata. */
3188             var metaMap = WeakMap && new WeakMap;
3189
3190             /** Used to lookup unminified function names. */
3191             var realNames = {};
3192
3193             /*------------------------------------------------------------------------*/
3194
3195             /**
3196              * Creates a `lodash` object which wraps `value` to enable implicit chaining.
3197              * Methods that operate on and return arrays, collections, and functions can
3198              * be chained together. Methods that retrieve a single value or may return a
3199              * primitive value will automatically end the chain returning the unwrapped
3200              * value. Explicit chaining may be enabled using `_.chain`. The execution of
3201              * chained methods is lazy, that is, execution is deferred until `_#value`
3202              * is implicitly or explicitly called.
3203              *
3204              * Lazy evaluation allows several methods to support shortcut fusion. Shortcut
3205              * fusion is an optimization strategy which merge iteratee calls; this can help
3206              * to avoid the creation of intermediate data structures and greatly reduce the
3207              * number of iteratee executions.
3208              *
3209              * Chaining is supported in custom builds as long as the `_#value` method is
3210              * directly or indirectly included in the build.
3211              *
3212              * In addition to lodash methods, wrappers have `Array` and `String` methods.
3213              *
3214              * The wrapper `Array` methods are:
3215              * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,
3216              * `splice`, and `unshift`
3217              *
3218              * The wrapper `String` methods are:
3219              * `replace` and `split`
3220              *
3221              * The wrapper methods that support shortcut fusion are:
3222              * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,
3223              * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,
3224              * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,
3225              * and `where`
3226              *
3227              * The chainable wrapper methods are:
3228              * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
3229              * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
3230              * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,
3231              * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,
3232              * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
3233              * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
3234              * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
3235              * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
3236              * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,
3237              * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
3238              * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
3239              * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,
3240              * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,
3241              * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,
3242              * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,
3243              * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,
3244              * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
3245              *
3246              * The wrapper methods that are **not** chainable by default are:
3247              * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,
3248              * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
3249              * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
3250              * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
3251              * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
3252              * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,
3253              * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,
3254              * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,
3255              * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,
3256              * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,
3257              * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,
3258              * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,
3259              * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,
3260              * `unescape`, `uniqueId`, `value`, and `words`
3261              *
3262              * The wrapper method `sample` will return a wrapped value when `n` is provided,
3263              * otherwise an unwrapped value is returned.
3264              *
3265              * @name _
3266              * @constructor
3267              * @category Chain
3268              * @param {*} value The value to wrap in a `lodash` instance.
3269              * @returns {Object} Returns the new `lodash` wrapper instance.
3270              * @example
3271              *
3272              * var wrapped = _([1, 2, 3]);
3273              *
3274              * // returns an unwrapped value
3275              * wrapped.reduce(function(total, n) {
3276              *   return total + n;
3277              * });
3278              * // => 6
3279              *
3280              * // returns a wrapped value
3281              * var squares = wrapped.map(function(n) {
3282              *   return n * n;
3283              * });
3284              *
3285              * _.isArray(squares);
3286              * // => false
3287              *
3288              * _.isArray(squares.value());
3289              * // => true
3290              */
3291             function lodash(value) {
3292               if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
3293                 if (value instanceof LodashWrapper) {
3294                   return value;
3295                 }
3296                 if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {
3297                   return wrapperClone(value);
3298                 }
3299               }
3300               return new LodashWrapper(value);
3301             }
3302
3303             /**
3304              * The function whose prototype all chaining wrappers inherit from.
3305              *
3306              * @private
3307              */
3308             function baseLodash() {
3309               // No operation performed.
3310             }
3311
3312             /**
3313              * The base constructor for creating `lodash` wrapper objects.
3314              *
3315              * @private
3316              * @param {*} value The value to wrap.
3317              * @param {boolean} [chainAll] Enable chaining for all wrapper methods.
3318              * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.
3319              */
3320             function LodashWrapper(value, chainAll, actions) {
3321               this.__wrapped__ = value;
3322               this.__actions__ = actions || [];
3323               this.__chain__ = !!chainAll;
3324             }
3325
3326             /**
3327              * An object environment feature flags.
3328              *
3329              * @static
3330              * @memberOf _
3331              * @type Object
3332              */
3333             var support = lodash.support = {};
3334
3335             /**
3336              * By default, the template delimiters used by lodash are like those in
3337              * embedded Ruby (ERB). Change the following template settings to use
3338              * alternative delimiters.
3339              *
3340              * @static
3341              * @memberOf _
3342              * @type Object
3343              */
3344             lodash.templateSettings = {
3345
3346               /**
3347                * Used to detect `data` property values to be HTML-escaped.
3348                *
3349                * @memberOf _.templateSettings
3350                * @type RegExp
3351                */
3352               'escape': reEscape,
3353
3354               /**
3355                * Used to detect code to be evaluated.
3356                *
3357                * @memberOf _.templateSettings
3358                * @type RegExp
3359                */
3360               'evaluate': reEvaluate,
3361
3362               /**
3363                * Used to detect `data` property values to inject.
3364                *
3365                * @memberOf _.templateSettings
3366                * @type RegExp
3367                */
3368               'interpolate': reInterpolate,
3369
3370               /**
3371                * Used to reference the data object in the template text.
3372                *
3373                * @memberOf _.templateSettings
3374                * @type string
3375                */
3376               'variable': '',
3377
3378               /**
3379                * Used to import variables into the compiled template.
3380                *
3381                * @memberOf _.templateSettings
3382                * @type Object
3383                */
3384               'imports': {
3385
3386                 /**
3387                  * A reference to the `lodash` function.
3388                  *
3389                  * @memberOf _.templateSettings.imports
3390                  * @type Function
3391                  */
3392                 '_': lodash
3393               }
3394             };
3395
3396             /*------------------------------------------------------------------------*/
3397
3398             /**
3399              * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
3400              *
3401              * @private
3402              * @param {*} value The value to wrap.
3403              */
3404             function LazyWrapper(value) {
3405               this.__wrapped__ = value;
3406               this.__actions__ = [];
3407               this.__dir__ = 1;
3408               this.__filtered__ = false;
3409               this.__iteratees__ = [];
3410               this.__takeCount__ = POSITIVE_INFINITY;
3411               this.__views__ = [];
3412             }
3413
3414             /**
3415              * Creates a clone of the lazy wrapper object.
3416              *
3417              * @private
3418              * @name clone
3419              * @memberOf LazyWrapper
3420              * @returns {Object} Returns the cloned `LazyWrapper` object.
3421              */
3422             function lazyClone() {
3423               var result = new LazyWrapper(this.__wrapped__);
3424               result.__actions__ = arrayCopy(this.__actions__);
3425               result.__dir__ = this.__dir__;
3426               result.__filtered__ = this.__filtered__;
3427               result.__iteratees__ = arrayCopy(this.__iteratees__);
3428               result.__takeCount__ = this.__takeCount__;
3429               result.__views__ = arrayCopy(this.__views__);
3430               return result;
3431             }
3432
3433             /**
3434              * Reverses the direction of lazy iteration.
3435              *
3436              * @private
3437              * @name reverse
3438              * @memberOf LazyWrapper
3439              * @returns {Object} Returns the new reversed `LazyWrapper` object.
3440              */
3441             function lazyReverse() {
3442               if (this.__filtered__) {
3443                 var result = new LazyWrapper(this);
3444                 result.__dir__ = -1;
3445                 result.__filtered__ = true;
3446               } else {
3447                 result = this.clone();
3448                 result.__dir__ *= -1;
3449               }
3450               return result;
3451             }
3452
3453             /**
3454              * Extracts the unwrapped value from its lazy wrapper.
3455              *
3456              * @private
3457              * @name value
3458              * @memberOf LazyWrapper
3459              * @returns {*} Returns the unwrapped value.
3460              */
3461             function lazyValue() {
3462               var array = this.__wrapped__.value(),
3463                   dir = this.__dir__,
3464                   isArr = isArray(array),
3465                   isRight = dir < 0,
3466                   arrLength = isArr ? array.length : 0,
3467                   view = getView(0, arrLength, this.__views__),
3468                   start = view.start,
3469                   end = view.end,
3470                   length = end - start,
3471                   index = isRight ? end : (start - 1),
3472                   iteratees = this.__iteratees__,
3473                   iterLength = iteratees.length,
3474                   resIndex = 0,
3475                   takeCount = nativeMin(length, this.__takeCount__);
3476
3477               if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {
3478                 return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);
3479               }
3480               var result = [];
3481
3482               outer:
3483               while (length-- && resIndex < takeCount) {
3484                 index += dir;
3485
3486                 var iterIndex = -1,
3487                     value = array[index];
3488
3489                 while (++iterIndex < iterLength) {
3490                   var data = iteratees[iterIndex],
3491                       iteratee = data.iteratee,
3492                       type = data.type,
3493                       computed = iteratee(value);
3494
3495                   if (type == LAZY_MAP_FLAG) {
3496                     value = computed;
3497                   } else if (!computed) {
3498                     if (type == LAZY_FILTER_FLAG) {
3499                       continue outer;
3500                     } else {
3501                       break outer;
3502                     }
3503                   }
3504                 }
3505                 result[resIndex++] = value;
3506               }
3507               return result;
3508             }
3509
3510             /*------------------------------------------------------------------------*/
3511
3512             /**
3513              * Creates a cache object to store key/value pairs.
3514              *
3515              * @private
3516              * @static
3517              * @name Cache
3518              * @memberOf _.memoize
3519              */
3520             function MapCache() {
3521               this.__data__ = {};
3522             }
3523
3524             /**
3525              * Removes `key` and its value from the cache.
3526              *
3527              * @private
3528              * @name delete
3529              * @memberOf _.memoize.Cache
3530              * @param {string} key The key of the value to remove.
3531              * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.
3532              */
3533             function mapDelete(key) {
3534               return this.has(key) && delete this.__data__[key];
3535             }
3536
3537             /**
3538              * Gets the cached value for `key`.
3539              *
3540              * @private
3541              * @name get
3542              * @memberOf _.memoize.Cache
3543              * @param {string} key The key of the value to get.
3544              * @returns {*} Returns the cached value.
3545              */
3546             function mapGet(key) {
3547               return key == '__proto__' ? undefined : this.__data__[key];
3548             }
3549
3550             /**
3551              * Checks if a cached value for `key` exists.
3552              *
3553              * @private
3554              * @name has
3555              * @memberOf _.memoize.Cache
3556              * @param {string} key The key of the entry to check.
3557              * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
3558              */
3559             function mapHas(key) {
3560               return key != '__proto__' && hasOwnProperty.call(this.__data__, key);
3561             }
3562
3563             /**
3564              * Sets `value` to `key` of the cache.
3565              *
3566              * @private
3567              * @name set
3568              * @memberOf _.memoize.Cache
3569              * @param {string} key The key of the value to cache.
3570              * @param {*} value The value to cache.
3571              * @returns {Object} Returns the cache object.
3572              */
3573             function mapSet(key, value) {
3574               if (key != '__proto__') {
3575                 this.__data__[key] = value;
3576               }
3577               return this;
3578             }
3579
3580             /*------------------------------------------------------------------------*/
3581
3582             /**
3583              *
3584              * Creates a cache object to store unique values.
3585              *
3586              * @private
3587              * @param {Array} [values] The values to cache.
3588              */
3589             function SetCache(values) {
3590               var length = values ? values.length : 0;
3591
3592               this.data = { 'hash': nativeCreate(null), 'set': new Set };
3593               while (length--) {
3594                 this.push(values[length]);
3595               }
3596             }
3597
3598             /**
3599              * Checks if `value` is in `cache` mimicking the return signature of
3600              * `_.indexOf` by returning `0` if the value is found, else `-1`.
3601              *
3602              * @private
3603              * @param {Object} cache The cache to search.
3604              * @param {*} value The value to search for.
3605              * @returns {number} Returns `0` if `value` is found, else `-1`.
3606              */
3607             function cacheIndexOf(cache, value) {
3608               var data = cache.data,
3609                   result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
3610
3611               return result ? 0 : -1;
3612             }
3613
3614             /**
3615              * Adds `value` to the cache.
3616              *
3617              * @private
3618              * @name push
3619              * @memberOf SetCache
3620              * @param {*} value The value to cache.
3621              */
3622             function cachePush(value) {
3623               var data = this.data;
3624               if (typeof value == 'string' || isObject(value)) {
3625                 data.set.add(value);
3626               } else {
3627                 data.hash[value] = true;
3628               }
3629             }
3630
3631             /*------------------------------------------------------------------------*/
3632
3633             /**
3634              * Creates a new array joining `array` with `other`.
3635              *
3636              * @private
3637              * @param {Array} array The array to join.
3638              * @param {Array} other The other array to join.
3639              * @returns {Array} Returns the new concatenated array.
3640              */
3641             function arrayConcat(array, other) {
3642               var index = -1,
3643                   length = array.length,
3644                   othIndex = -1,
3645                   othLength = other.length,
3646                   result = Array(length + othLength);
3647
3648               while (++index < length) {
3649                 result[index] = array[index];
3650               }
3651               while (++othIndex < othLength) {
3652                 result[index++] = other[othIndex];
3653               }
3654               return result;
3655             }
3656
3657             /**
3658              * Copies the values of `source` to `array`.
3659              *
3660              * @private
3661              * @param {Array} source The array to copy values from.
3662              * @param {Array} [array=[]] The array to copy values to.
3663              * @returns {Array} Returns `array`.
3664              */
3665             function arrayCopy(source, array) {
3666               var index = -1,
3667                   length = source.length;
3668
3669               array || (array = Array(length));
3670               while (++index < length) {
3671                 array[index] = source[index];
3672               }
3673               return array;
3674             }
3675
3676             /**
3677              * A specialized version of `_.forEach` for arrays without support for callback
3678              * shorthands and `this` binding.
3679              *
3680              * @private
3681              * @param {Array} array The array to iterate over.
3682              * @param {Function} iteratee The function invoked per iteration.
3683              * @returns {Array} Returns `array`.
3684              */
3685             function arrayEach(array, iteratee) {
3686               var index = -1,
3687                   length = array.length;
3688
3689               while (++index < length) {
3690                 if (iteratee(array[index], index, array) === false) {
3691                   break;
3692                 }
3693               }
3694               return array;
3695             }
3696
3697             /**
3698              * A specialized version of `_.forEachRight` for arrays without support for
3699              * callback shorthands and `this` binding.
3700              *
3701              * @private
3702              * @param {Array} array The array to iterate over.
3703              * @param {Function} iteratee The function invoked per iteration.
3704              * @returns {Array} Returns `array`.
3705              */
3706             function arrayEachRight(array, iteratee) {
3707               var length = array.length;
3708
3709               while (length--) {
3710                 if (iteratee(array[length], length, array) === false) {
3711                   break;
3712                 }
3713               }
3714               return array;
3715             }
3716
3717             /**
3718              * A specialized version of `_.every` for arrays without support for callback
3719              * shorthands and `this` binding.
3720              *
3721              * @private
3722              * @param {Array} array The array to iterate over.
3723              * @param {Function} predicate The function invoked per iteration.
3724              * @returns {boolean} Returns `true` if all elements pass the predicate check,
3725              *  else `false`.
3726              */
3727             function arrayEvery(array, predicate) {
3728               var index = -1,
3729                   length = array.length;
3730
3731               while (++index < length) {
3732                 if (!predicate(array[index], index, array)) {
3733                   return false;
3734                 }
3735               }
3736               return true;
3737             }
3738
3739             /**
3740              * A specialized version of `baseExtremum` for arrays which invokes `iteratee`
3741              * with one argument: (value).
3742              *
3743              * @private
3744              * @param {Array} array The array to iterate over.
3745              * @param {Function} iteratee The function invoked per iteration.
3746              * @param {Function} comparator The function used to compare values.
3747              * @param {*} exValue The initial extremum value.
3748              * @returns {*} Returns the extremum value.
3749              */
3750             function arrayExtremum(array, iteratee, comparator, exValue) {
3751               var index = -1,
3752                   length = array.length,
3753                   computed = exValue,
3754                   result = computed;
3755
3756               while (++index < length) {
3757                 var value = array[index],
3758                     current = +iteratee(value);
3759
3760                 if (comparator(current, computed)) {
3761                   computed = current;
3762                   result = value;
3763                 }
3764               }
3765               return result;
3766             }
3767
3768             /**
3769              * A specialized version of `_.filter` for arrays without support for callback
3770              * shorthands and `this` binding.
3771              *
3772              * @private
3773              * @param {Array} array The array to iterate over.
3774              * @param {Function} predicate The function invoked per iteration.
3775              * @returns {Array} Returns the new filtered array.
3776              */
3777             function arrayFilter(array, predicate) {
3778               var index = -1,
3779                   length = array.length,
3780                   resIndex = -1,
3781                   result = [];
3782
3783               while (++index < length) {
3784                 var value = array[index];
3785                 if (predicate(value, index, array)) {
3786                   result[++resIndex] = value;
3787                 }
3788               }
3789               return result;
3790             }
3791
3792             /**
3793              * A specialized version of `_.map` for arrays without support for callback
3794              * shorthands and `this` binding.
3795              *
3796              * @private
3797              * @param {Array} array The array to iterate over.
3798              * @param {Function} iteratee The function invoked per iteration.
3799              * @returns {Array} Returns the new mapped array.
3800              */
3801             function arrayMap(array, iteratee) {
3802               var index = -1,
3803                   length = array.length,
3804                   result = Array(length);
3805
3806               while (++index < length) {
3807                 result[index] = iteratee(array[index], index, array);
3808               }
3809               return result;
3810             }
3811
3812             /**
3813              * Appends the elements of `values` to `array`.
3814              *
3815              * @private
3816              * @param {Array} array The array to modify.
3817              * @param {Array} values The values to append.
3818              * @returns {Array} Returns `array`.
3819              */
3820             function arrayPush(array, values) {
3821               var index = -1,
3822                   length = values.length,
3823                   offset = array.length;
3824
3825               while (++index < length) {
3826                 array[offset + index] = values[index];
3827               }
3828               return array;
3829             }
3830
3831             /**
3832              * A specialized version of `_.reduce` for arrays without support for callback
3833              * shorthands and `this` binding.
3834              *
3835              * @private
3836              * @param {Array} array The array to iterate over.
3837              * @param {Function} iteratee The function invoked per iteration.
3838              * @param {*} [accumulator] The initial value.
3839              * @param {boolean} [initFromArray] Specify using the first element of `array`
3840              *  as the initial value.
3841              * @returns {*} Returns the accumulated value.
3842              */
3843             function arrayReduce(array, iteratee, accumulator, initFromArray) {
3844               var index = -1,
3845                   length = array.length;
3846
3847               if (initFromArray && length) {
3848                 accumulator = array[++index];
3849               }
3850               while (++index < length) {
3851                 accumulator = iteratee(accumulator, array[index], index, array);
3852               }
3853               return accumulator;
3854             }
3855
3856             /**
3857              * A specialized version of `_.reduceRight` for arrays without support for
3858              * callback shorthands and `this` binding.
3859              *
3860              * @private
3861              * @param {Array} array The array to iterate over.
3862              * @param {Function} iteratee The function invoked per iteration.
3863              * @param {*} [accumulator] The initial value.
3864              * @param {boolean} [initFromArray] Specify using the last element of `array`
3865              *  as the initial value.
3866              * @returns {*} Returns the accumulated value.
3867              */
3868             function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
3869               var length = array.length;
3870               if (initFromArray && length) {
3871                 accumulator = array[--length];
3872               }
3873               while (length--) {
3874                 accumulator = iteratee(accumulator, array[length], length, array);
3875               }
3876               return accumulator;
3877             }
3878
3879             /**
3880              * A specialized version of `_.some` for arrays without support for callback
3881              * shorthands and `this` binding.
3882              *
3883              * @private
3884              * @param {Array} array The array to iterate over.
3885              * @param {Function} predicate The function invoked per iteration.
3886              * @returns {boolean} Returns `true` if any element passes the predicate check,
3887              *  else `false`.
3888              */
3889             function arraySome(array, predicate) {
3890               var index = -1,
3891                   length = array.length;
3892
3893               while (++index < length) {
3894                 if (predicate(array[index], index, array)) {
3895                   return true;
3896                 }
3897               }
3898               return false;
3899             }
3900
3901             /**
3902              * A specialized version of `_.sum` for arrays without support for callback
3903              * shorthands and `this` binding..
3904              *
3905              * @private
3906              * @param {Array} array The array to iterate over.
3907              * @param {Function} iteratee The function invoked per iteration.
3908              * @returns {number} Returns the sum.
3909              */
3910             function arraySum(array, iteratee) {
3911               var length = array.length,
3912                   result = 0;
3913
3914               while (length--) {
3915                 result += +iteratee(array[length]) || 0;
3916               }
3917               return result;
3918             }
3919
3920             /**
3921              * Used by `_.defaults` to customize its `_.assign` use.
3922              *
3923              * @private
3924              * @param {*} objectValue The destination object property value.
3925              * @param {*} sourceValue The source object property value.
3926              * @returns {*} Returns the value to assign to the destination object.
3927              */
3928             function assignDefaults(objectValue, sourceValue) {
3929               return objectValue === undefined ? sourceValue : objectValue;
3930             }
3931
3932             /**
3933              * Used by `_.template` to customize its `_.assign` use.
3934              *
3935              * **Note:** This function is like `assignDefaults` except that it ignores
3936              * inherited property values when checking if a property is `undefined`.
3937              *
3938              * @private
3939              * @param {*} objectValue The destination object property value.
3940              * @param {*} sourceValue The source object property value.
3941              * @param {string} key The key associated with the object and source values.
3942              * @param {Object} object The destination object.
3943              * @returns {*} Returns the value to assign to the destination object.
3944              */
3945             function assignOwnDefaults(objectValue, sourceValue, key, object) {
3946               return (objectValue === undefined || !hasOwnProperty.call(object, key))
3947                 ? sourceValue
3948                 : objectValue;
3949             }
3950
3951             /**
3952              * A specialized version of `_.assign` for customizing assigned values without
3953              * support for argument juggling, multiple sources, and `this` binding `customizer`
3954              * functions.
3955              *
3956              * @private
3957              * @param {Object} object The destination object.
3958              * @param {Object} source The source object.
3959              * @param {Function} customizer The function to customize assigned values.
3960              * @returns {Object} Returns `object`.
3961              */
3962             function assignWith(object, source, customizer) {
3963               var index = -1,
3964                   props = keys(source),
3965                   length = props.length;
3966
3967               while (++index < length) {
3968                 var key = props[index],
3969                     value = object[key],
3970                     result = customizer(value, source[key], key, object, source);
3971
3972                 if ((result === result ? (result !== value) : (value === value)) ||
3973                     (value === undefined && !(key in object))) {
3974                   object[key] = result;
3975                 }
3976               }
3977               return object;
3978             }
3979
3980             /**
3981              * The base implementation of `_.assign` without support for argument juggling,
3982              * multiple sources, and `customizer` functions.
3983              *
3984              * @private
3985              * @param {Object} object The destination object.
3986              * @param {Object} source The source object.
3987              * @returns {Object} Returns `object`.
3988              */
3989             function baseAssign(object, source) {
3990               return source == null
3991                 ? object
3992                 : baseCopy(source, keys(source), object);
3993             }
3994
3995             /**
3996              * The base implementation of `_.at` without support for string collections
3997              * and individual key arguments.
3998              *
3999              * @private
4000              * @param {Array|Object} collection The collection to iterate over.
4001              * @param {number[]|string[]} props The property names or indexes of elements to pick.
4002              * @returns {Array} Returns the new array of picked elements.
4003              */
4004             function baseAt(collection, props) {
4005               var index = -1,
4006                   isNil = collection == null,
4007                   isArr = !isNil && isArrayLike(collection),
4008                   length = isArr ? collection.length : 0,
4009                   propsLength = props.length,
4010                   result = Array(propsLength);
4011
4012               while(++index < propsLength) {
4013                 var key = props[index];
4014                 if (isArr) {
4015                   result[index] = isIndex(key, length) ? collection[key] : undefined;
4016                 } else {
4017                   result[index] = isNil ? undefined : collection[key];
4018                 }
4019               }
4020               return result;
4021             }
4022
4023             /**
4024              * Copies properties of `source` to `object`.
4025              *
4026              * @private
4027              * @param {Object} source The object to copy properties from.
4028              * @param {Array} props The property names to copy.
4029              * @param {Object} [object={}] The object to copy properties to.
4030              * @returns {Object} Returns `object`.
4031              */
4032             function baseCopy(source, props, object) {
4033               object || (object = {});
4034
4035               var index = -1,
4036                   length = props.length;
4037
4038               while (++index < length) {
4039                 var key = props[index];
4040                 object[key] = source[key];
4041               }
4042               return object;
4043             }
4044
4045             /**
4046              * The base implementation of `_.callback` which supports specifying the
4047              * number of arguments to provide to `func`.
4048              *
4049              * @private
4050              * @param {*} [func=_.identity] The value to convert to a callback.
4051              * @param {*} [thisArg] The `this` binding of `func`.
4052              * @param {number} [argCount] The number of arguments to provide to `func`.
4053              * @returns {Function} Returns the callback.
4054              */
4055             function baseCallback(func, thisArg, argCount) {
4056               var type = typeof func;
4057               if (type == 'function') {
4058                 return thisArg === undefined
4059                   ? func
4060                   : bindCallback(func, thisArg, argCount);
4061               }
4062               if (func == null) {
4063                 return identity;
4064               }
4065               if (type == 'object') {
4066                 return baseMatches(func);
4067               }
4068               return thisArg === undefined
4069                 ? property(func)
4070                 : baseMatchesProperty(func, thisArg);
4071             }
4072
4073             /**
4074              * The base implementation of `_.clone` without support for argument juggling
4075              * and `this` binding `customizer` functions.
4076              *
4077              * @private
4078              * @param {*} value The value to clone.
4079              * @param {boolean} [isDeep] Specify a deep clone.
4080              * @param {Function} [customizer] The function to customize cloning values.
4081              * @param {string} [key] The key of `value`.
4082              * @param {Object} [object] The object `value` belongs to.
4083              * @param {Array} [stackA=[]] Tracks traversed source objects.
4084              * @param {Array} [stackB=[]] Associates clones with source counterparts.
4085              * @returns {*} Returns the cloned value.
4086              */
4087             function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
4088               var result;
4089               if (customizer) {
4090                 result = object ? customizer(value, key, object) : customizer(value);
4091               }
4092               if (result !== undefined) {
4093                 return result;
4094               }
4095               if (!isObject(value)) {
4096                 return value;
4097               }
4098               var isArr = isArray(value);
4099               if (isArr) {
4100                 result = initCloneArray(value);
4101                 if (!isDeep) {
4102                   return arrayCopy(value, result);
4103                 }
4104               } else {
4105                 var tag = objToString.call(value),
4106                     isFunc = tag == funcTag;
4107
4108                 if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
4109                   result = initCloneObject(isFunc ? {} : value);
4110                   if (!isDeep) {
4111                     return baseAssign(result, value);
4112                   }
4113                 } else {
4114                   return cloneableTags[tag]
4115                     ? initCloneByTag(value, tag, isDeep)
4116                     : (object ? value : {});
4117                 }
4118               }
4119               // Check for circular references and return its corresponding clone.
4120               stackA || (stackA = []);
4121               stackB || (stackB = []);
4122
4123               var length = stackA.length;
4124               while (length--) {
4125                 if (stackA[length] == value) {
4126                   return stackB[length];
4127                 }
4128               }
4129               // Add the source value to the stack of traversed objects and associate it with its clone.
4130               stackA.push(value);
4131               stackB.push(result);
4132
4133               // Recursively populate clone (susceptible to call stack limits).
4134               (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
4135                 result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
4136               });
4137               return result;
4138             }
4139
4140             /**
4141              * The base implementation of `_.create` without support for assigning
4142              * properties to the created object.
4143              *
4144              * @private
4145              * @param {Object} prototype The object to inherit from.
4146              * @returns {Object} Returns the new object.
4147              */
4148             var baseCreate = (function() {
4149               function object() {}
4150               return function(prototype) {
4151                 if (isObject(prototype)) {
4152                   object.prototype = prototype;
4153                   var result = new object;
4154                   object.prototype = undefined;
4155                 }
4156                 return result || {};
4157               };
4158             }());
4159
4160             /**
4161              * The base implementation of `_.delay` and `_.defer` which accepts an index
4162              * of where to slice the arguments to provide to `func`.
4163              *
4164              * @private
4165              * @param {Function} func The function to delay.
4166              * @param {number} wait The number of milliseconds to delay invocation.
4167              * @param {Object} args The arguments provide to `func`.
4168              * @returns {number} Returns the timer id.
4169              */
4170             function baseDelay(func, wait, args) {
4171               if (typeof func != 'function') {
4172                 throw new TypeError(FUNC_ERROR_TEXT);
4173               }
4174               return setTimeout(function() { func.apply(undefined, args); }, wait);
4175             }
4176
4177             /**
4178              * The base implementation of `_.difference` which accepts a single array
4179              * of values to exclude.
4180              *
4181              * @private
4182              * @param {Array} array The array to inspect.
4183              * @param {Array} values The values to exclude.
4184              * @returns {Array} Returns the new array of filtered values.
4185              */
4186             function baseDifference(array, values) {
4187               var length = array ? array.length : 0,
4188                   result = [];
4189
4190               if (!length) {
4191                 return result;
4192               }
4193               var index = -1,
4194                   indexOf = getIndexOf(),
4195                   isCommon = indexOf == baseIndexOf,
4196                   cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
4197                   valuesLength = values.length;
4198
4199               if (cache) {
4200                 indexOf = cacheIndexOf;
4201                 isCommon = false;
4202                 values = cache;
4203               }
4204               outer:
4205               while (++index < length) {
4206                 var value = array[index];
4207
4208                 if (isCommon && value === value) {
4209                   var valuesIndex = valuesLength;
4210                   while (valuesIndex--) {
4211                     if (values[valuesIndex] === value) {
4212                       continue outer;
4213                     }
4214                   }
4215                   result.push(value);
4216                 }
4217                 else if (indexOf(values, value, 0) < 0) {
4218                   result.push(value);
4219                 }
4220               }
4221               return result;
4222             }
4223
4224             /**
4225              * The base implementation of `_.forEach` without support for callback
4226              * shorthands and `this` binding.
4227              *
4228              * @private
4229              * @param {Array|Object|string} collection The collection to iterate over.
4230              * @param {Function} iteratee The function invoked per iteration.
4231              * @returns {Array|Object|string} Returns `collection`.
4232              */
4233             var baseEach = createBaseEach(baseForOwn);
4234
4235             /**
4236              * The base implementation of `_.forEachRight` without support for callback
4237              * shorthands and `this` binding.
4238              *
4239              * @private
4240              * @param {Array|Object|string} collection The collection to iterate over.
4241              * @param {Function} iteratee The function invoked per iteration.
4242              * @returns {Array|Object|string} Returns `collection`.
4243              */
4244             var baseEachRight = createBaseEach(baseForOwnRight, true);
4245
4246             /**
4247              * The base implementation of `_.every` without support for callback
4248              * shorthands and `this` binding.
4249              *
4250              * @private
4251              * @param {Array|Object|string} collection The collection to iterate over.
4252              * @param {Function} predicate The function invoked per iteration.
4253              * @returns {boolean} Returns `true` if all elements pass the predicate check,
4254              *  else `false`
4255              */
4256             function baseEvery(collection, predicate) {
4257               var result = true;
4258               baseEach(collection, function(value, index, collection) {
4259                 result = !!predicate(value, index, collection);
4260                 return result;
4261               });
4262               return result;
4263             }
4264
4265             /**
4266              * Gets the extremum value of `collection` invoking `iteratee` for each value
4267              * in `collection` to generate the criterion by which the value is ranked.
4268              * The `iteratee` is invoked with three arguments: (value, index|key, collection).
4269              *
4270              * @private
4271              * @param {Array|Object|string} collection The collection to iterate over.
4272              * @param {Function} iteratee The function invoked per iteration.
4273              * @param {Function} comparator The function used to compare values.
4274              * @param {*} exValue The initial extremum value.
4275              * @returns {*} Returns the extremum value.
4276              */
4277             function baseExtremum(collection, iteratee, comparator, exValue) {
4278               var computed = exValue,
4279                   result = computed;
4280
4281               baseEach(collection, function(value, index, collection) {
4282                 var current = +iteratee(value, index, collection);
4283                 if (comparator(current, computed) || (current === exValue && current === result)) {
4284                   computed = current;
4285                   result = value;
4286                 }
4287               });
4288               return result;
4289             }
4290
4291             /**
4292              * The base implementation of `_.fill` without an iteratee call guard.
4293              *
4294              * @private
4295              * @param {Array} array The array to fill.
4296              * @param {*} value The value to fill `array` with.
4297              * @param {number} [start=0] The start position.
4298              * @param {number} [end=array.length] The end position.
4299              * @returns {Array} Returns `array`.
4300              */
4301             function baseFill(array, value, start, end) {
4302               var length = array.length;
4303
4304               start = start == null ? 0 : (+start || 0);
4305               if (start < 0) {
4306                 start = -start > length ? 0 : (length + start);
4307               }
4308               end = (end === undefined || end > length) ? length : (+end || 0);
4309               if (end < 0) {
4310                 end += length;
4311               }
4312               length = start > end ? 0 : (end >>> 0);
4313               start >>>= 0;
4314
4315               while (start < length) {
4316                 array[start++] = value;
4317               }
4318               return array;
4319             }
4320
4321             /**
4322              * The base implementation of `_.filter` without support for callback
4323              * shorthands and `this` binding.
4324              *
4325              * @private
4326              * @param {Array|Object|string} collection The collection to iterate over.
4327              * @param {Function} predicate The function invoked per iteration.
4328              * @returns {Array} Returns the new filtered array.
4329              */
4330             function baseFilter(collection, predicate) {
4331               var result = [];
4332               baseEach(collection, function(value, index, collection) {
4333                 if (predicate(value, index, collection)) {
4334                   result.push(value);
4335                 }
4336               });
4337               return result;
4338             }
4339
4340             /**
4341              * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,
4342              * without support for callback shorthands and `this` binding, which iterates
4343              * over `collection` using the provided `eachFunc`.
4344              *
4345              * @private
4346              * @param {Array|Object|string} collection The collection to search.
4347              * @param {Function} predicate The function invoked per iteration.
4348              * @param {Function} eachFunc The function to iterate over `collection`.
4349              * @param {boolean} [retKey] Specify returning the key of the found element
4350              *  instead of the element itself.
4351              * @returns {*} Returns the found element or its key, else `undefined`.
4352              */
4353             function baseFind(collection, predicate, eachFunc, retKey) {
4354               var result;
4355               eachFunc(collection, function(value, key, collection) {
4356                 if (predicate(value, key, collection)) {
4357                   result = retKey ? key : value;
4358                   return false;
4359                 }
4360               });
4361               return result;
4362             }
4363
4364             /**
4365              * The base implementation of `_.flatten` with added support for restricting
4366              * flattening and specifying the start index.
4367              *
4368              * @private
4369              * @param {Array} array The array to flatten.
4370              * @param {boolean} [isDeep] Specify a deep flatten.
4371              * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
4372              * @param {Array} [result=[]] The initial result value.
4373              * @returns {Array} Returns the new flattened array.
4374              */
4375             function baseFlatten(array, isDeep, isStrict, result) {
4376               result || (result = []);
4377
4378               var index = -1,
4379                   length = array.length;
4380
4381               while (++index < length) {
4382                 var value = array[index];
4383                 if (isObjectLike(value) && isArrayLike(value) &&
4384                     (isStrict || isArray(value) || isArguments(value))) {
4385                   if (isDeep) {
4386                     // Recursively flatten arrays (susceptible to call stack limits).
4387                     baseFlatten(value, isDeep, isStrict, result);
4388                   } else {
4389                     arrayPush(result, value);
4390                   }
4391                 } else if (!isStrict) {
4392                   result[result.length] = value;
4393                 }
4394               }
4395               return result;
4396             }
4397
4398             /**
4399              * The base implementation of `baseForIn` and `baseForOwn` which iterates
4400              * over `object` properties returned by `keysFunc` invoking `iteratee` for
4401              * each property. Iteratee functions may exit iteration early by explicitly
4402              * returning `false`.
4403              *
4404              * @private
4405              * @param {Object} object The object to iterate over.
4406              * @param {Function} iteratee The function invoked per iteration.
4407              * @param {Function} keysFunc The function to get the keys of `object`.
4408              * @returns {Object} Returns `object`.
4409              */
4410             var baseFor = createBaseFor();
4411
4412             /**
4413              * This function is like `baseFor` except that it iterates over properties
4414              * in the opposite order.
4415              *
4416              * @private
4417              * @param {Object} object The object to iterate over.
4418              * @param {Function} iteratee The function invoked per iteration.
4419              * @param {Function} keysFunc The function to get the keys of `object`.
4420              * @returns {Object} Returns `object`.
4421              */
4422             var baseForRight = createBaseFor(true);
4423
4424             /**
4425              * The base implementation of `_.forIn` without support for callback
4426              * shorthands and `this` binding.
4427              *
4428              * @private
4429              * @param {Object} object The object to iterate over.
4430              * @param {Function} iteratee The function invoked per iteration.
4431              * @returns {Object} Returns `object`.
4432              */
4433             function baseForIn(object, iteratee) {
4434               return baseFor(object, iteratee, keysIn);
4435             }
4436
4437             /**
4438              * The base implementation of `_.forOwn` without support for callback
4439              * shorthands and `this` binding.
4440              *
4441              * @private
4442              * @param {Object} object The object to iterate over.
4443              * @param {Function} iteratee The function invoked per iteration.
4444              * @returns {Object} Returns `object`.
4445              */
4446             function baseForOwn(object, iteratee) {
4447               return baseFor(object, iteratee, keys);
4448             }
4449
4450             /**
4451              * The base implementation of `_.forOwnRight` without support for callback
4452              * shorthands and `this` binding.
4453              *
4454              * @private
4455              * @param {Object} object The object to iterate over.
4456              * @param {Function} iteratee The function invoked per iteration.
4457              * @returns {Object} Returns `object`.
4458              */
4459             function baseForOwnRight(object, iteratee) {
4460               return baseForRight(object, iteratee, keys);
4461             }
4462
4463             /**
4464              * The base implementation of `_.functions` which creates an array of
4465              * `object` function property names filtered from those provided.
4466              *
4467              * @private
4468              * @param {Object} object The object to inspect.
4469              * @param {Array} props The property names to filter.
4470              * @returns {Array} Returns the new array of filtered property names.
4471              */
4472             function baseFunctions(object, props) {
4473               var index = -1,
4474                   length = props.length,
4475                   resIndex = -1,
4476                   result = [];
4477
4478               while (++index < length) {
4479                 var key = props[index];
4480                 if (isFunction(object[key])) {
4481                   result[++resIndex] = key;
4482                 }
4483               }
4484               return result;
4485             }
4486
4487             /**
4488              * The base implementation of `get` without support for string paths
4489              * and default values.
4490              *
4491              * @private
4492              * @param {Object} object The object to query.
4493              * @param {Array} path The path of the property to get.
4494              * @param {string} [pathKey] The key representation of path.
4495              * @returns {*} Returns the resolved value.
4496              */
4497             function baseGet(object, path, pathKey) {
4498               if (object == null) {
4499                 return;
4500               }
4501               if (pathKey !== undefined && pathKey in toObject(object)) {
4502                 path = [pathKey];
4503               }
4504               var index = 0,
4505                   length = path.length;
4506
4507               while (object != null && index < length) {
4508                 object = object[path[index++]];
4509               }
4510               return (index && index == length) ? object : undefined;
4511             }
4512
4513             /**
4514              * The base implementation of `_.isEqual` without support for `this` binding
4515              * `customizer` functions.
4516              *
4517              * @private
4518              * @param {*} value The value to compare.
4519              * @param {*} other The other value to compare.
4520              * @param {Function} [customizer] The function to customize comparing values.
4521              * @param {boolean} [isLoose] Specify performing partial comparisons.
4522              * @param {Array} [stackA] Tracks traversed `value` objects.
4523              * @param {Array} [stackB] Tracks traversed `other` objects.
4524              * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
4525              */
4526             function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
4527               if (value === other) {
4528                 return true;
4529               }
4530               if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
4531                 return value !== value && other !== other;
4532               }
4533               return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
4534             }
4535
4536             /**
4537              * A specialized version of `baseIsEqual` for arrays and objects which performs
4538              * deep comparisons and tracks traversed objects enabling objects with circular
4539              * references to be compared.
4540              *
4541              * @private
4542              * @param {Object} object The object to compare.
4543              * @param {Object} other The other object to compare.
4544              * @param {Function} equalFunc The function to determine equivalents of values.
4545              * @param {Function} [customizer] The function to customize comparing objects.
4546              * @param {boolean} [isLoose] Specify performing partial comparisons.
4547              * @param {Array} [stackA=[]] Tracks traversed `value` objects.
4548              * @param {Array} [stackB=[]] Tracks traversed `other` objects.
4549              * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
4550              */
4551             function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
4552               var objIsArr = isArray(object),
4553                   othIsArr = isArray(other),
4554                   objTag = arrayTag,
4555                   othTag = arrayTag;
4556
4557               if (!objIsArr) {
4558                 objTag = objToString.call(object);
4559                 if (objTag == argsTag) {
4560                   objTag = objectTag;
4561                 } else if (objTag != objectTag) {
4562                   objIsArr = isTypedArray(object);
4563                 }
4564               }
4565               if (!othIsArr) {
4566                 othTag = objToString.call(other);
4567                 if (othTag == argsTag) {
4568                   othTag = objectTag;
4569                 } else if (othTag != objectTag) {
4570                   othIsArr = isTypedArray(other);
4571                 }
4572               }
4573               var objIsObj = objTag == objectTag,
4574                   othIsObj = othTag == objectTag,
4575                   isSameTag = objTag == othTag;
4576
4577               if (isSameTag && !(objIsArr || objIsObj)) {
4578                 return equalByTag(object, other, objTag);
4579               }
4580               if (!isLoose) {
4581                 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
4582                     othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
4583
4584                 if (objIsWrapped || othIsWrapped) {
4585                   return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
4586                 }
4587               }
4588               if (!isSameTag) {
4589                 return false;
4590               }
4591               // Assume cyclic values are equal.
4592               // For more information on detecting circular references see https://es5.github.io/#JO.
4593               stackA || (stackA = []);
4594               stackB || (stackB = []);
4595
4596               var length = stackA.length;
4597               while (length--) {
4598                 if (stackA[length] == object) {
4599                   return stackB[length] == other;
4600                 }
4601               }
4602               // Add `object` and `other` to the stack of traversed objects.
4603               stackA.push(object);
4604               stackB.push(other);
4605
4606               var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
4607
4608               stackA.pop();
4609               stackB.pop();
4610
4611               return result;
4612             }
4613
4614             /**
4615              * The base implementation of `_.isMatch` without support for callback
4616              * shorthands and `this` binding.
4617              *
4618              * @private
4619              * @param {Object} object The object to inspect.
4620              * @param {Array} matchData The propery names, values, and compare flags to match.
4621              * @param {Function} [customizer] The function to customize comparing objects.
4622              * @returns {boolean} Returns `true` if `object` is a match, else `false`.
4623              */
4624             function baseIsMatch(object, matchData, customizer) {
4625               var index = matchData.length,
4626                   length = index,
4627                   noCustomizer = !customizer;
4628
4629               if (object == null) {
4630                 return !length;
4631               }
4632               object = toObject(object);
4633               while (index--) {
4634                 var data = matchData[index];
4635                 if ((noCustomizer && data[2])
4636                       ? data[1] !== object[data[0]]
4637                       : !(data[0] in object)
4638                     ) {
4639                   return false;
4640                 }
4641               }
4642               while (++index < length) {
4643                 data = matchData[index];
4644                 var key = data[0],
4645                     objValue = object[key],
4646                     srcValue = data[1];
4647
4648                 if (noCustomizer && data[2]) {
4649                   if (objValue === undefined && !(key in object)) {
4650                     return false;
4651                   }
4652                 } else {
4653                   var result = customizer ? customizer(objValue, srcValue, key) : undefined;
4654                   if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
4655                     return false;
4656                   }
4657                 }
4658               }
4659               return true;
4660             }
4661
4662             /**
4663              * The base implementation of `_.map` without support for callback shorthands
4664              * and `this` binding.
4665              *
4666              * @private
4667              * @param {Array|Object|string} collection The collection to iterate over.
4668              * @param {Function} iteratee The function invoked per iteration.
4669              * @returns {Array} Returns the new mapped array.
4670              */
4671             function baseMap(collection, iteratee) {
4672               var index = -1,
4673                   result = isArrayLike(collection) ? Array(collection.length) : [];
4674
4675               baseEach(collection, function(value, key, collection) {
4676                 result[++index] = iteratee(value, key, collection);
4677               });
4678               return result;
4679             }
4680
4681             /**
4682              * The base implementation of `_.matches` which does not clone `source`.
4683              *
4684              * @private
4685              * @param {Object} source The object of property values to match.
4686              * @returns {Function} Returns the new function.
4687              */
4688             function baseMatches(source) {
4689               var matchData = getMatchData(source);
4690               if (matchData.length == 1 && matchData[0][2]) {
4691                 var key = matchData[0][0],
4692                     value = matchData[0][1];
4693
4694                 return function(object) {
4695                   if (object == null) {
4696                     return false;
4697                   }
4698                   return object[key] === value && (value !== undefined || (key in toObject(object)));
4699                 };
4700               }
4701               return function(object) {
4702                 return baseIsMatch(object, matchData);
4703               };
4704             }
4705
4706             /**
4707              * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
4708              *
4709              * @private
4710              * @param {string} path The path of the property to get.
4711              * @param {*} srcValue The value to compare.
4712              * @returns {Function} Returns the new function.
4713              */
4714             function baseMatchesProperty(path, srcValue) {
4715               var isArr = isArray(path),
4716                   isCommon = isKey(path) && isStrictComparable(srcValue),
4717                   pathKey = (path + '');
4718
4719               path = toPath(path);
4720               return function(object) {
4721                 if (object == null) {
4722                   return false;
4723                 }
4724                 var key = pathKey;
4725                 object = toObject(object);
4726                 if ((isArr || !isCommon) && !(key in object)) {
4727                   object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
4728                   if (object == null) {
4729                     return false;
4730                   }
4731                   key = last(path);
4732                   object = toObject(object);
4733                 }
4734                 return object[key] === srcValue
4735                   ? (srcValue !== undefined || (key in object))
4736                   : baseIsEqual(srcValue, object[key], undefined, true);
4737               };
4738             }
4739
4740             /**
4741              * The base implementation of `_.merge` without support for argument juggling,
4742              * multiple sources, and `this` binding `customizer` functions.
4743              *
4744              * @private
4745              * @param {Object} object The destination object.
4746              * @param {Object} source The source object.
4747              * @param {Function} [customizer] The function to customize merged values.
4748              * @param {Array} [stackA=[]] Tracks traversed source objects.
4749              * @param {Array} [stackB=[]] Associates values with source counterparts.
4750              * @returns {Object} Returns `object`.
4751              */
4752             function baseMerge(object, source, customizer, stackA, stackB) {
4753               if (!isObject(object)) {
4754                 return object;
4755               }
4756               var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
4757                   props = isSrcArr ? undefined : keys(source);
4758
4759               arrayEach(props || source, function(srcValue, key) {
4760                 if (props) {
4761                   key = srcValue;
4762                   srcValue = source[key];
4763                 }
4764                 if (isObjectLike(srcValue)) {
4765                   stackA || (stackA = []);
4766                   stackB || (stackB = []);
4767                   baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
4768                 }
4769                 else {
4770                   var value = object[key],
4771                       result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
4772                       isCommon = result === undefined;
4773
4774                   if (isCommon) {
4775                     result = srcValue;
4776                   }
4777                   if ((result !== undefined || (isSrcArr && !(key in object))) &&
4778                       (isCommon || (result === result ? (result !== value) : (value === value)))) {
4779                     object[key] = result;
4780                   }
4781                 }
4782               });
4783               return object;
4784             }
4785
4786             /**
4787              * A specialized version of `baseMerge` for arrays and objects which performs
4788              * deep merges and tracks traversed objects enabling objects with circular
4789              * references to be merged.
4790              *
4791              * @private
4792              * @param {Object} object The destination object.
4793              * @param {Object} source The source object.
4794              * @param {string} key The key of the value to merge.
4795              * @param {Function} mergeFunc The function to merge values.
4796              * @param {Function} [customizer] The function to customize merged values.
4797              * @param {Array} [stackA=[]] Tracks traversed source objects.
4798              * @param {Array} [stackB=[]] Associates values with source counterparts.
4799              * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
4800              */
4801             function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
4802               var length = stackA.length,
4803                   srcValue = source[key];
4804
4805               while (length--) {
4806                 if (stackA[length] == srcValue) {
4807                   object[key] = stackB[length];
4808                   return;
4809                 }
4810               }
4811               var value = object[key],
4812                   result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
4813                   isCommon = result === undefined;
4814
4815               if (isCommon) {
4816                 result = srcValue;
4817                 if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
4818                   result = isArray(value)
4819                     ? value
4820                     : (isArrayLike(value) ? arrayCopy(value) : []);
4821                 }
4822                 else if (isPlainObject(srcValue) || isArguments(srcValue)) {
4823                   result = isArguments(value)
4824                     ? toPlainObject(value)
4825                     : (isPlainObject(value) ? value : {});
4826                 }
4827                 else {
4828                   isCommon = false;
4829                 }
4830               }
4831               // Add the source value to the stack of traversed objects and associate
4832               // it with its merged value.
4833               stackA.push(srcValue);
4834               stackB.push(result);
4835
4836               if (isCommon) {
4837                 // Recursively merge objects and arrays (susceptible to call stack limits).
4838                 object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
4839               } else if (result === result ? (result !== value) : (value === value)) {
4840                 object[key] = result;
4841               }
4842             }
4843
4844             /**
4845              * The base implementation of `_.property` without support for deep paths.
4846              *
4847              * @private
4848              * @param {string} key The key of the property to get.
4849              * @returns {Function} Returns the new function.
4850              */
4851             function baseProperty(key) {
4852               return function(object) {
4853                 return object == null ? undefined : object[key];
4854               };
4855             }
4856
4857             /**
4858              * A specialized version of `baseProperty` which supports deep paths.
4859              *
4860              * @private
4861              * @param {Array|string} path The path of the property to get.
4862              * @returns {Function} Returns the new function.
4863              */
4864             function basePropertyDeep(path) {
4865               var pathKey = (path + '');
4866               path = toPath(path);
4867               return function(object) {
4868                 return baseGet(object, path, pathKey);
4869               };
4870             }
4871
4872             /**
4873              * The base implementation of `_.pullAt` without support for individual
4874              * index arguments and capturing the removed elements.
4875              *
4876              * @private
4877              * @param {Array} array The array to modify.
4878              * @param {number[]} indexes The indexes of elements to remove.
4879              * @returns {Array} Returns `array`.
4880              */
4881             function basePullAt(array, indexes) {
4882               var length = array ? indexes.length : 0;
4883               while (length--) {
4884                 var index = indexes[length];
4885                 if (index != previous && isIndex(index)) {
4886                   var previous = index;
4887                   splice.call(array, index, 1);
4888                 }
4889               }
4890               return array;
4891             }
4892
4893             /**
4894              * The base implementation of `_.random` without support for argument juggling
4895              * and returning floating-point numbers.
4896              *
4897              * @private
4898              * @param {number} min The minimum possible value.
4899              * @param {number} max The maximum possible value.
4900              * @returns {number} Returns the random number.
4901              */
4902             function baseRandom(min, max) {
4903               return min + nativeFloor(nativeRandom() * (max - min + 1));
4904             }
4905
4906             /**
4907              * The base implementation of `_.reduce` and `_.reduceRight` without support
4908              * for callback shorthands and `this` binding, which iterates over `collection`
4909              * using the provided `eachFunc`.
4910              *
4911              * @private
4912              * @param {Array|Object|string} collection The collection to iterate over.
4913              * @param {Function} iteratee The function invoked per iteration.
4914              * @param {*} accumulator The initial value.
4915              * @param {boolean} initFromCollection Specify using the first or last element
4916              *  of `collection` as the initial value.
4917              * @param {Function} eachFunc The function to iterate over `collection`.
4918              * @returns {*} Returns the accumulated value.
4919              */
4920             function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
4921               eachFunc(collection, function(value, index, collection) {
4922                 accumulator = initFromCollection
4923                   ? (initFromCollection = false, value)
4924                   : iteratee(accumulator, value, index, collection);
4925               });
4926               return accumulator;
4927             }
4928
4929             /**
4930              * The base implementation of `setData` without support for hot loop detection.
4931              *
4932              * @private
4933              * @param {Function} func The function to associate metadata with.
4934              * @param {*} data The metadata.
4935              * @returns {Function} Returns `func`.
4936              */
4937             var baseSetData = !metaMap ? identity : function(func, data) {
4938               metaMap.set(func, data);
4939               return func;
4940             };
4941
4942             /**
4943              * The base implementation of `_.slice` without an iteratee call guard.
4944              *
4945              * @private
4946              * @param {Array} array The array to slice.
4947              * @param {number} [start=0] The start position.
4948              * @param {number} [end=array.length] The end position.
4949              * @returns {Array} Returns the slice of `array`.
4950              */
4951             function baseSlice(array, start, end) {
4952               var index = -1,
4953                   length = array.length;
4954
4955               start = start == null ? 0 : (+start || 0);
4956               if (start < 0) {
4957                 start = -start > length ? 0 : (length + start);
4958               }
4959               end = (end === undefined || end > length) ? length : (+end || 0);
4960               if (end < 0) {
4961                 end += length;
4962               }
4963               length = start > end ? 0 : ((end - start) >>> 0);
4964               start >>>= 0;
4965
4966               var result = Array(length);
4967               while (++index < length) {
4968                 result[index] = array[index + start];
4969               }
4970               return result;
4971             }
4972
4973             /**
4974              * The base implementation of `_.some` without support for callback shorthands
4975              * and `this` binding.
4976              *
4977              * @private
4978              * @param {Array|Object|string} collection The collection to iterate over.
4979              * @param {Function} predicate The function invoked per iteration.
4980              * @returns {boolean} Returns `true` if any element passes the predicate check,
4981              *  else `false`.
4982              */
4983             function baseSome(collection, predicate) {
4984               var result;
4985
4986               baseEach(collection, function(value, index, collection) {
4987                 result = predicate(value, index, collection);
4988                 return !result;
4989               });
4990               return !!result;
4991             }
4992
4993             /**
4994              * The base implementation of `_.sortBy` which uses `comparer` to define
4995              * the sort order of `array` and replaces criteria objects with their
4996              * corresponding values.
4997              *
4998              * @private
4999              * @param {Array} array The array to sort.
5000              * @param {Function} comparer The function to define sort order.
5001              * @returns {Array} Returns `array`.
5002              */
5003             function baseSortBy(array, comparer) {
5004               var length = array.length;
5005
5006               array.sort(comparer);
5007               while (length--) {
5008                 array[length] = array[length].value;
5009               }
5010               return array;
5011             }
5012
5013             /**
5014              * The base implementation of `_.sortByOrder` without param guards.
5015              *
5016              * @private
5017              * @param {Array|Object|string} collection The collection to iterate over.
5018              * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
5019              * @param {boolean[]} orders The sort orders of `iteratees`.
5020              * @returns {Array} Returns the new sorted array.
5021              */
5022             function baseSortByOrder(collection, iteratees, orders) {
5023               var callback = getCallback(),
5024                   index = -1;
5025
5026               iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });
5027
5028               var result = baseMap(collection, function(value) {
5029                 var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });
5030                 return { 'criteria': criteria, 'index': ++index, 'value': value };
5031               });
5032
5033               return baseSortBy(result, function(object, other) {
5034                 return compareMultiple(object, other, orders);
5035               });
5036             }
5037
5038             /**
5039              * The base implementation of `_.sum` without support for callback shorthands
5040              * and `this` binding.
5041              *
5042              * @private
5043              * @param {Array|Object|string} collection The collection to iterate over.
5044              * @param {Function} iteratee The function invoked per iteration.
5045              * @returns {number} Returns the sum.
5046              */
5047             function baseSum(collection, iteratee) {
5048               var result = 0;
5049               baseEach(collection, function(value, index, collection) {
5050                 result += +iteratee(value, index, collection) || 0;
5051               });
5052               return result;
5053             }
5054
5055             /**
5056              * The base implementation of `_.uniq` without support for callback shorthands
5057              * and `this` binding.
5058              *
5059              * @private
5060              * @param {Array} array The array to inspect.
5061              * @param {Function} [iteratee] The function invoked per iteration.
5062              * @returns {Array} Returns the new duplicate-value-free array.
5063              */
5064             function baseUniq(array, iteratee) {
5065               var index = -1,
5066                   indexOf = getIndexOf(),
5067                   length = array.length,
5068                   isCommon = indexOf == baseIndexOf,
5069                   isLarge = isCommon && length >= LARGE_ARRAY_SIZE,
5070                   seen = isLarge ? createCache() : null,
5071                   result = [];
5072
5073               if (seen) {
5074                 indexOf = cacheIndexOf;
5075                 isCommon = false;
5076               } else {
5077                 isLarge = false;
5078                 seen = iteratee ? [] : result;
5079               }
5080               outer:
5081               while (++index < length) {
5082                 var value = array[index],
5083                     computed = iteratee ? iteratee(value, index, array) : value;
5084
5085                 if (isCommon && value === value) {
5086                   var seenIndex = seen.length;
5087                   while (seenIndex--) {
5088                     if (seen[seenIndex] === computed) {
5089                       continue outer;
5090                     }
5091                   }
5092                   if (iteratee) {
5093                     seen.push(computed);
5094                   }
5095                   result.push(value);
5096                 }
5097                 else if (indexOf(seen, computed, 0) < 0) {
5098                   if (iteratee || isLarge) {
5099                     seen.push(computed);
5100                   }
5101                   result.push(value);
5102                 }
5103               }
5104               return result;
5105             }
5106
5107             /**
5108              * The base implementation of `_.values` and `_.valuesIn` which creates an
5109              * array of `object` property values corresponding to the property names
5110              * of `props`.
5111              *
5112              * @private
5113              * @param {Object} object The object to query.
5114              * @param {Array} props The property names to get values for.
5115              * @returns {Object} Returns the array of property values.
5116              */
5117             function baseValues(object, props) {
5118               var index = -1,
5119                   length = props.length,
5120                   result = Array(length);
5121
5122               while (++index < length) {
5123                 result[index] = object[props[index]];
5124               }
5125               return result;
5126             }
5127
5128             /**
5129              * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
5130              * and `_.takeWhile` without support for callback shorthands and `this` binding.
5131              *
5132              * @private
5133              * @param {Array} array The array to query.
5134              * @param {Function} predicate The function invoked per iteration.
5135              * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
5136              * @param {boolean} [fromRight] Specify iterating from right to left.
5137              * @returns {Array} Returns the slice of `array`.
5138              */
5139             function baseWhile(array, predicate, isDrop, fromRight) {
5140               var length = array.length,
5141                   index = fromRight ? length : -1;
5142
5143               while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
5144               return isDrop
5145                 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
5146                 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
5147             }
5148
5149             /**
5150              * The base implementation of `wrapperValue` which returns the result of
5151              * performing a sequence of actions on the unwrapped `value`, where each
5152              * successive action is supplied the return value of the previous.
5153              *
5154              * @private
5155              * @param {*} value The unwrapped value.
5156              * @param {Array} actions Actions to peform to resolve the unwrapped value.
5157              * @returns {*} Returns the resolved value.
5158              */
5159             function baseWrapperValue(value, actions) {
5160               var result = value;
5161               if (result instanceof LazyWrapper) {
5162                 result = result.value();
5163               }
5164               var index = -1,
5165                   length = actions.length;
5166
5167               while (++index < length) {
5168                 var action = actions[index];
5169                 result = action.func.apply(action.thisArg, arrayPush([result], action.args));
5170               }
5171               return result;
5172             }
5173
5174             /**
5175              * Performs a binary search of `array` to determine the index at which `value`
5176              * should be inserted into `array` in order to maintain its sort order.
5177              *
5178              * @private
5179              * @param {Array} array The sorted array to inspect.
5180              * @param {*} value The value to evaluate.
5181              * @param {boolean} [retHighest] Specify returning the highest qualified index.
5182              * @returns {number} Returns the index at which `value` should be inserted
5183              *  into `array`.
5184              */
5185             function binaryIndex(array, value, retHighest) {
5186               var low = 0,
5187                   high = array ? array.length : low;
5188
5189               if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
5190                 while (low < high) {
5191                   var mid = (low + high) >>> 1,
5192                       computed = array[mid];
5193
5194                   if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {
5195                     low = mid + 1;
5196                   } else {
5197                     high = mid;
5198                   }
5199                 }
5200                 return high;
5201               }
5202               return binaryIndexBy(array, value, identity, retHighest);
5203             }
5204
5205             /**
5206              * This function is like `binaryIndex` except that it invokes `iteratee` for
5207              * `value` and each element of `array` to compute their sort ranking. The
5208              * iteratee is invoked with one argument; (value).
5209              *
5210              * @private
5211              * @param {Array} array The sorted array to inspect.
5212              * @param {*} value The value to evaluate.
5213              * @param {Function} iteratee The function invoked per iteration.
5214              * @param {boolean} [retHighest] Specify returning the highest qualified index.
5215              * @returns {number} Returns the index at which `value` should be inserted
5216              *  into `array`.
5217              */
5218             function binaryIndexBy(array, value, iteratee, retHighest) {
5219               value = iteratee(value);
5220
5221               var low = 0,
5222                   high = array ? array.length : 0,
5223                   valIsNaN = value !== value,
5224                   valIsNull = value === null,
5225                   valIsUndef = value === undefined;
5226
5227               while (low < high) {
5228                 var mid = nativeFloor((low + high) / 2),
5229                     computed = iteratee(array[mid]),
5230                     isDef = computed !== undefined,
5231                     isReflexive = computed === computed;
5232
5233                 if (valIsNaN) {
5234                   var setLow = isReflexive || retHighest;
5235                 } else if (valIsNull) {
5236                   setLow = isReflexive && isDef && (retHighest || computed != null);
5237                 } else if (valIsUndef) {
5238                   setLow = isReflexive && (retHighest || isDef);
5239                 } else if (computed == null) {
5240                   setLow = false;
5241                 } else {
5242                   setLow = retHighest ? (computed <= value) : (computed < value);
5243                 }
5244                 if (setLow) {
5245                   low = mid + 1;
5246                 } else {
5247                   high = mid;
5248                 }
5249               }
5250               return nativeMin(high, MAX_ARRAY_INDEX);
5251             }
5252
5253             /**
5254              * A specialized version of `baseCallback` which only supports `this` binding
5255              * and specifying the number of arguments to provide to `func`.
5256              *
5257              * @private
5258              * @param {Function} func The function to bind.
5259              * @param {*} thisArg The `this` binding of `func`.
5260              * @param {number} [argCount] The number of arguments to provide to `func`.
5261              * @returns {Function} Returns the callback.
5262              */
5263             function bindCallback(func, thisArg, argCount) {
5264               if (typeof func != 'function') {
5265                 return identity;
5266               }
5267               if (thisArg === undefined) {
5268                 return func;
5269               }
5270               switch (argCount) {
5271                 case 1: return function(value) {
5272                   return func.call(thisArg, value);
5273                 };
5274                 case 3: return function(value, index, collection) {
5275                   return func.call(thisArg, value, index, collection);
5276                 };
5277                 case 4: return function(accumulator, value, index, collection) {
5278                   return func.call(thisArg, accumulator, value, index, collection);
5279                 };
5280                 case 5: return function(value, other, key, object, source) {
5281                   return func.call(thisArg, value, other, key, object, source);
5282                 };
5283               }
5284               return function() {
5285                 return func.apply(thisArg, arguments);
5286               };
5287             }
5288
5289             /**
5290              * Creates a clone of the given array buffer.
5291              *
5292              * @private
5293              * @param {ArrayBuffer} buffer The array buffer to clone.
5294              * @returns {ArrayBuffer} Returns the cloned array buffer.
5295              */
5296             function bufferClone(buffer) {
5297               var result = new ArrayBuffer(buffer.byteLength),
5298                   view = new Uint8Array(result);
5299
5300               view.set(new Uint8Array(buffer));
5301               return result;
5302             }
5303
5304             /**
5305              * Creates an array that is the composition of partially applied arguments,
5306              * placeholders, and provided arguments into a single array of arguments.
5307              *
5308              * @private
5309              * @param {Array|Object} args The provided arguments.
5310              * @param {Array} partials The arguments to prepend to those provided.
5311              * @param {Array} holders The `partials` placeholder indexes.
5312              * @returns {Array} Returns the new array of composed arguments.
5313              */
5314             function composeArgs(args, partials, holders) {
5315               var holdersLength = holders.length,
5316                   argsIndex = -1,
5317                   argsLength = nativeMax(args.length - holdersLength, 0),
5318                   leftIndex = -1,
5319                   leftLength = partials.length,
5320                   result = Array(leftLength + argsLength);
5321
5322               while (++leftIndex < leftLength) {
5323                 result[leftIndex] = partials[leftIndex];
5324               }
5325               while (++argsIndex < holdersLength) {
5326                 result[holders[argsIndex]] = args[argsIndex];
5327               }
5328               while (argsLength--) {
5329                 result[leftIndex++] = args[argsIndex++];
5330               }
5331               return result;
5332             }
5333
5334             /**
5335              * This function is like `composeArgs` except that the arguments composition
5336              * is tailored for `_.partialRight`.
5337              *
5338              * @private
5339              * @param {Array|Object} args The provided arguments.
5340              * @param {Array} partials The arguments to append to those provided.
5341              * @param {Array} holders The `partials` placeholder indexes.
5342              * @returns {Array} Returns the new array of composed arguments.
5343              */
5344             function composeArgsRight(args, partials, holders) {
5345               var holdersIndex = -1,
5346                   holdersLength = holders.length,
5347                   argsIndex = -1,
5348                   argsLength = nativeMax(args.length - holdersLength, 0),
5349                   rightIndex = -1,
5350                   rightLength = partials.length,
5351                   result = Array(argsLength + rightLength);
5352
5353               while (++argsIndex < argsLength) {
5354                 result[argsIndex] = args[argsIndex];
5355               }
5356               var offset = argsIndex;
5357               while (++rightIndex < rightLength) {
5358                 result[offset + rightIndex] = partials[rightIndex];
5359               }
5360               while (++holdersIndex < holdersLength) {
5361                 result[offset + holders[holdersIndex]] = args[argsIndex++];
5362               }
5363               return result;
5364             }
5365
5366             /**
5367              * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.
5368              *
5369              * @private
5370              * @param {Function} setter The function to set keys and values of the accumulator object.
5371              * @param {Function} [initializer] The function to initialize the accumulator object.
5372              * @returns {Function} Returns the new aggregator function.
5373              */
5374             function createAggregator(setter, initializer) {
5375               return function(collection, iteratee, thisArg) {
5376                 var result = initializer ? initializer() : {};
5377                 iteratee = getCallback(iteratee, thisArg, 3);
5378
5379                 if (isArray(collection)) {
5380                   var index = -1,
5381                       length = collection.length;
5382
5383                   while (++index < length) {
5384                     var value = collection[index];
5385                     setter(result, value, iteratee(value, index, collection), collection);
5386                   }
5387                 } else {
5388                   baseEach(collection, function(value, key, collection) {
5389                     setter(result, value, iteratee(value, key, collection), collection);
5390                   });
5391                 }
5392                 return result;
5393               };
5394             }
5395
5396             /**
5397              * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
5398              *
5399              * @private
5400              * @param {Function} assigner The function to assign values.
5401              * @returns {Function} Returns the new assigner function.
5402              */
5403             function createAssigner(assigner) {
5404               return restParam(function(object, sources) {
5405                 var index = -1,
5406                     length = object == null ? 0 : sources.length,
5407                     customizer = length > 2 ? sources[length - 2] : undefined,
5408                     guard = length > 2 ? sources[2] : undefined,
5409                     thisArg = length > 1 ? sources[length - 1] : undefined;
5410
5411                 if (typeof customizer == 'function') {
5412                   customizer = bindCallback(customizer, thisArg, 5);
5413                   length -= 2;
5414                 } else {
5415                   customizer = typeof thisArg == 'function' ? thisArg : undefined;
5416                   length -= (customizer ? 1 : 0);
5417                 }
5418                 if (guard && isIterateeCall(sources[0], sources[1], guard)) {
5419                   customizer = length < 3 ? undefined : customizer;
5420                   length = 1;
5421                 }
5422                 while (++index < length) {
5423                   var source = sources[index];
5424                   if (source) {
5425                     assigner(object, source, customizer);
5426                   }
5427                 }
5428                 return object;
5429               });
5430             }
5431
5432             /**
5433              * Creates a `baseEach` or `baseEachRight` function.
5434              *
5435              * @private
5436              * @param {Function} eachFunc The function to iterate over a collection.
5437              * @param {boolean} [fromRight] Specify iterating from right to left.
5438              * @returns {Function} Returns the new base function.
5439              */
5440             function createBaseEach(eachFunc, fromRight) {
5441               return function(collection, iteratee) {
5442                 var length = collection ? getLength(collection) : 0;
5443                 if (!isLength(length)) {
5444                   return eachFunc(collection, iteratee);
5445                 }
5446                 var index = fromRight ? length : -1,
5447                     iterable = toObject(collection);
5448
5449                 while ((fromRight ? index-- : ++index < length)) {
5450                   if (iteratee(iterable[index], index, iterable) === false) {
5451                     break;
5452                   }
5453                 }
5454                 return collection;
5455               };
5456             }
5457
5458             /**
5459              * Creates a base function for `_.forIn` or `_.forInRight`.
5460              *
5461              * @private
5462              * @param {boolean} [fromRight] Specify iterating from right to left.
5463              * @returns {Function} Returns the new base function.
5464              */
5465             function createBaseFor(fromRight) {
5466               return function(object, iteratee, keysFunc) {
5467                 var iterable = toObject(object),
5468                     props = keysFunc(object),
5469                     length = props.length,
5470                     index = fromRight ? length : -1;
5471
5472                 while ((fromRight ? index-- : ++index < length)) {
5473                   var key = props[index];
5474                   if (iteratee(iterable[key], key, iterable) === false) {
5475                     break;
5476                   }
5477                 }
5478                 return object;
5479               };
5480             }
5481
5482             /**
5483              * Creates a function that wraps `func` and invokes it with the `this`
5484              * binding of `thisArg`.
5485              *
5486              * @private
5487              * @param {Function} func The function to bind.
5488              * @param {*} [thisArg] The `this` binding of `func`.
5489              * @returns {Function} Returns the new bound function.
5490              */
5491             function createBindWrapper(func, thisArg) {
5492               var Ctor = createCtorWrapper(func);
5493
5494               function wrapper() {
5495                 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
5496                 return fn.apply(thisArg, arguments);
5497               }
5498               return wrapper;
5499             }
5500
5501             /**
5502              * Creates a `Set` cache object to optimize linear searches of large arrays.
5503              *
5504              * @private
5505              * @param {Array} [values] The values to cache.
5506              * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
5507              */
5508             function createCache(values) {
5509               return (nativeCreate && Set) ? new SetCache(values) : null;
5510             }
5511
5512             /**
5513              * Creates a function that produces compound words out of the words in a
5514              * given string.
5515              *
5516              * @private
5517              * @param {Function} callback The function to combine each word.
5518              * @returns {Function} Returns the new compounder function.
5519              */
5520             function createCompounder(callback) {
5521               return function(string) {
5522                 var index = -1,
5523                     array = words(deburr(string)),
5524                     length = array.length,
5525                     result = '';
5526
5527                 while (++index < length) {
5528                   result = callback(result, array[index], index);
5529                 }
5530                 return result;
5531               };
5532             }
5533
5534             /**
5535              * Creates a function that produces an instance of `Ctor` regardless of
5536              * whether it was invoked as part of a `new` expression or by `call` or `apply`.
5537              *
5538              * @private
5539              * @param {Function} Ctor The constructor to wrap.
5540              * @returns {Function} Returns the new wrapped function.
5541              */
5542             function createCtorWrapper(Ctor) {
5543               return function() {
5544                 // Use a `switch` statement to work with class constructors.
5545                 // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
5546                 // for more details.
5547                 var args = arguments;
5548                 switch (args.length) {
5549                   case 0: return new Ctor;
5550                   case 1: return new Ctor(args[0]);
5551                   case 2: return new Ctor(args[0], args[1]);
5552                   case 3: return new Ctor(args[0], args[1], args[2]);
5553                   case 4: return new Ctor(args[0], args[1], args[2], args[3]);
5554                   case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
5555                   case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
5556                   case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
5557                 }
5558                 var thisBinding = baseCreate(Ctor.prototype),
5559                     result = Ctor.apply(thisBinding, args);
5560
5561                 // Mimic the constructor's `return` behavior.
5562                 // See https://es5.github.io/#x13.2.2 for more details.
5563                 return isObject(result) ? result : thisBinding;
5564               };
5565             }
5566
5567             /**
5568              * Creates a `_.curry` or `_.curryRight` function.
5569              *
5570              * @private
5571              * @param {boolean} flag The curry bit flag.
5572              * @returns {Function} Returns the new curry function.
5573              */
5574             function createCurry(flag) {
5575               function curryFunc(func, arity, guard) {
5576                 if (guard && isIterateeCall(func, arity, guard)) {
5577                   arity = undefined;
5578                 }
5579                 var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
5580                 result.placeholder = curryFunc.placeholder;
5581                 return result;
5582               }
5583               return curryFunc;
5584             }
5585
5586             /**
5587              * Creates a `_.defaults` or `_.defaultsDeep` function.
5588              *
5589              * @private
5590              * @param {Function} assigner The function to assign values.
5591              * @param {Function} customizer The function to customize assigned values.
5592              * @returns {Function} Returns the new defaults function.
5593              */
5594             function createDefaults(assigner, customizer) {
5595               return restParam(function(args) {
5596                 var object = args[0];
5597                 if (object == null) {
5598                   return object;
5599                 }
5600                 args.push(customizer);
5601                 return assigner.apply(undefined, args);
5602               });
5603             }
5604
5605             /**
5606              * Creates a `_.max` or `_.min` function.
5607              *
5608              * @private
5609              * @param {Function} comparator The function used to compare values.
5610              * @param {*} exValue The initial extremum value.
5611              * @returns {Function} Returns the new extremum function.
5612              */
5613             function createExtremum(comparator, exValue) {
5614               return function(collection, iteratee, thisArg) {
5615                 if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
5616                   iteratee = undefined;
5617                 }
5618                 iteratee = getCallback(iteratee, thisArg, 3);
5619                 if (iteratee.length == 1) {
5620                   collection = isArray(collection) ? collection : toIterable(collection);
5621                   var result = arrayExtremum(collection, iteratee, comparator, exValue);
5622                   if (!(collection.length && result === exValue)) {
5623                     return result;
5624                   }
5625                 }
5626                 return baseExtremum(collection, iteratee, comparator, exValue);
5627               };
5628             }
5629
5630             /**
5631              * Creates a `_.find` or `_.findLast` function.
5632              *
5633              * @private
5634              * @param {Function} eachFunc The function to iterate over a collection.
5635              * @param {boolean} [fromRight] Specify iterating from right to left.
5636              * @returns {Function} Returns the new find function.
5637              */
5638             function createFind(eachFunc, fromRight) {
5639               return function(collection, predicate, thisArg) {
5640                 predicate = getCallback(predicate, thisArg, 3);
5641                 if (isArray(collection)) {
5642                   var index = baseFindIndex(collection, predicate, fromRight);
5643                   return index > -1 ? collection[index] : undefined;
5644                 }
5645                 return baseFind(collection, predicate, eachFunc);
5646               };
5647             }
5648
5649             /**
5650              * Creates a `_.findIndex` or `_.findLastIndex` function.
5651              *
5652              * @private
5653              * @param {boolean} [fromRight] Specify iterating from right to left.
5654              * @returns {Function} Returns the new find function.
5655              */
5656             function createFindIndex(fromRight) {
5657               return function(array, predicate, thisArg) {
5658                 if (!(array && array.length)) {
5659                   return -1;
5660                 }
5661                 predicate = getCallback(predicate, thisArg, 3);
5662                 return baseFindIndex(array, predicate, fromRight);
5663               };
5664             }
5665
5666             /**
5667              * Creates a `_.findKey` or `_.findLastKey` function.
5668              *
5669              * @private
5670              * @param {Function} objectFunc The function to iterate over an object.
5671              * @returns {Function} Returns the new find function.
5672              */
5673             function createFindKey(objectFunc) {
5674               return function(object, predicate, thisArg) {
5675                 predicate = getCallback(predicate, thisArg, 3);
5676                 return baseFind(object, predicate, objectFunc, true);
5677               };
5678             }
5679
5680             /**
5681              * Creates a `_.flow` or `_.flowRight` function.
5682              *
5683              * @private
5684              * @param {boolean} [fromRight] Specify iterating from right to left.
5685              * @returns {Function} Returns the new flow function.
5686              */
5687             function createFlow(fromRight) {
5688               return function() {
5689                 var wrapper,
5690                     length = arguments.length,
5691                     index = fromRight ? length : -1,
5692                     leftIndex = 0,
5693                     funcs = Array(length);
5694
5695                 while ((fromRight ? index-- : ++index < length)) {
5696                   var func = funcs[leftIndex++] = arguments[index];
5697                   if (typeof func != 'function') {
5698                     throw new TypeError(FUNC_ERROR_TEXT);
5699                   }
5700                   if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {
5701                     wrapper = new LodashWrapper([], true);
5702                   }
5703                 }
5704                 index = wrapper ? -1 : length;
5705                 while (++index < length) {
5706                   func = funcs[index];
5707
5708                   var funcName = getFuncName(func),
5709                       data = funcName == 'wrapper' ? getData(func) : undefined;
5710
5711                   if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {
5712                     wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
5713                   } else {
5714                     wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
5715                   }
5716                 }
5717                 return function() {
5718                   var args = arguments,
5719                       value = args[0];
5720
5721                   if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
5722                     return wrapper.plant(value).value();
5723                   }
5724                   var index = 0,
5725                       result = length ? funcs[index].apply(this, args) : value;
5726
5727                   while (++index < length) {
5728                     result = funcs[index].call(this, result);
5729                   }
5730                   return result;
5731                 };
5732               };
5733             }
5734
5735             /**
5736              * Creates a function for `_.forEach` or `_.forEachRight`.
5737              *
5738              * @private
5739              * @param {Function} arrayFunc The function to iterate over an array.
5740              * @param {Function} eachFunc The function to iterate over a collection.
5741              * @returns {Function} Returns the new each function.
5742              */
5743             function createForEach(arrayFunc, eachFunc) {
5744               return function(collection, iteratee, thisArg) {
5745                 return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
5746                   ? arrayFunc(collection, iteratee)
5747                   : eachFunc(collection, bindCallback(iteratee, thisArg, 3));
5748               };
5749             }
5750
5751             /**
5752              * Creates a function for `_.forIn` or `_.forInRight`.
5753              *
5754              * @private
5755              * @param {Function} objectFunc The function to iterate over an object.
5756              * @returns {Function} Returns the new each function.
5757              */
5758             function createForIn(objectFunc) {
5759               return function(object, iteratee, thisArg) {
5760                 if (typeof iteratee != 'function' || thisArg !== undefined) {
5761                   iteratee = bindCallback(iteratee, thisArg, 3);
5762                 }
5763                 return objectFunc(object, iteratee, keysIn);
5764               };
5765             }
5766
5767             /**
5768              * Creates a function for `_.forOwn` or `_.forOwnRight`.
5769              *
5770              * @private
5771              * @param {Function} objectFunc The function to iterate over an object.
5772              * @returns {Function} Returns the new each function.
5773              */
5774             function createForOwn(objectFunc) {
5775               return function(object, iteratee, thisArg) {
5776                 if (typeof iteratee != 'function' || thisArg !== undefined) {
5777                   iteratee = bindCallback(iteratee, thisArg, 3);
5778                 }
5779                 return objectFunc(object, iteratee);
5780               };
5781             }
5782
5783             /**
5784              * Creates a function for `_.mapKeys` or `_.mapValues`.
5785              *
5786              * @private
5787              * @param {boolean} [isMapKeys] Specify mapping keys instead of values.
5788              * @returns {Function} Returns the new map function.
5789              */
5790             function createObjectMapper(isMapKeys) {
5791               return function(object, iteratee, thisArg) {
5792                 var result = {};
5793                 iteratee = getCallback(iteratee, thisArg, 3);
5794
5795                 baseForOwn(object, function(value, key, object) {
5796                   var mapped = iteratee(value, key, object);
5797                   key = isMapKeys ? mapped : key;
5798                   value = isMapKeys ? value : mapped;
5799                   result[key] = value;
5800                 });
5801                 return result;
5802               };
5803             }
5804
5805             /**
5806              * Creates a function for `_.padLeft` or `_.padRight`.
5807              *
5808              * @private
5809              * @param {boolean} [fromRight] Specify padding from the right.
5810              * @returns {Function} Returns the new pad function.
5811              */
5812             function createPadDir(fromRight) {
5813               return function(string, length, chars) {
5814                 string = baseToString(string);
5815                 return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
5816               };
5817             }
5818
5819             /**
5820              * Creates a `_.partial` or `_.partialRight` function.
5821              *
5822              * @private
5823              * @param {boolean} flag The partial bit flag.
5824              * @returns {Function} Returns the new partial function.
5825              */
5826             function createPartial(flag) {
5827               var partialFunc = restParam(function(func, partials) {
5828                 var holders = replaceHolders(partials, partialFunc.placeholder);
5829                 return createWrapper(func, flag, undefined, partials, holders);
5830               });
5831               return partialFunc;
5832             }
5833
5834             /**
5835              * Creates a function for `_.reduce` or `_.reduceRight`.
5836              *
5837              * @private
5838              * @param {Function} arrayFunc The function to iterate over an array.
5839              * @param {Function} eachFunc The function to iterate over a collection.
5840              * @returns {Function} Returns the new each function.
5841              */
5842             function createReduce(arrayFunc, eachFunc) {
5843               return function(collection, iteratee, accumulator, thisArg) {
5844                 var initFromArray = arguments.length < 3;
5845                 return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
5846                   ? arrayFunc(collection, iteratee, accumulator, initFromArray)
5847                   : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
5848               };
5849             }
5850
5851             /**
5852              * Creates a function that wraps `func` and invokes it with optional `this`
5853              * binding of, partial application, and currying.
5854              *
5855              * @private
5856              * @param {Function|string} func The function or method name to reference.
5857              * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
5858              * @param {*} [thisArg] The `this` binding of `func`.
5859              * @param {Array} [partials] The arguments to prepend to those provided to the new function.
5860              * @param {Array} [holders] The `partials` placeholder indexes.
5861              * @param {Array} [partialsRight] The arguments to append to those provided to the new function.
5862              * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
5863              * @param {Array} [argPos] The argument positions of the new function.
5864              * @param {number} [ary] The arity cap of `func`.
5865              * @param {number} [arity] The arity of `func`.
5866              * @returns {Function} Returns the new wrapped function.
5867              */
5868             function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
5869               var isAry = bitmask & ARY_FLAG,
5870                   isBind = bitmask & BIND_FLAG,
5871                   isBindKey = bitmask & BIND_KEY_FLAG,
5872                   isCurry = bitmask & CURRY_FLAG,
5873                   isCurryBound = bitmask & CURRY_BOUND_FLAG,
5874                   isCurryRight = bitmask & CURRY_RIGHT_FLAG,
5875                   Ctor = isBindKey ? undefined : createCtorWrapper(func);
5876
5877               function wrapper() {
5878                 // Avoid `arguments` object use disqualifying optimizations by
5879                 // converting it to an array before providing it to other functions.
5880                 var length = arguments.length,
5881                     index = length,
5882                     args = Array(length);
5883
5884                 while (index--) {
5885                   args[index] = arguments[index];
5886                 }
5887                 if (partials) {
5888                   args = composeArgs(args, partials, holders);
5889                 }
5890                 if (partialsRight) {
5891                   args = composeArgsRight(args, partialsRight, holdersRight);
5892                 }
5893                 if (isCurry || isCurryRight) {
5894                   var placeholder = wrapper.placeholder,
5895                       argsHolders = replaceHolders(args, placeholder);
5896
5897                   length -= argsHolders.length;
5898                   if (length < arity) {
5899                     var newArgPos = argPos ? arrayCopy(argPos) : undefined,
5900                         newArity = nativeMax(arity - length, 0),
5901                         newsHolders = isCurry ? argsHolders : undefined,
5902                         newHoldersRight = isCurry ? undefined : argsHolders,
5903                         newPartials = isCurry ? args : undefined,
5904                         newPartialsRight = isCurry ? undefined : args;
5905
5906                     bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
5907                     bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
5908
5909                     if (!isCurryBound) {
5910                       bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
5911                     }
5912                     var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
5913                         result = createHybridWrapper.apply(undefined, newData);
5914
5915                     if (isLaziable(func)) {
5916                       setData(result, newData);
5917                     }
5918                     result.placeholder = placeholder;
5919                     return result;
5920                   }
5921                 }
5922                 var thisBinding = isBind ? thisArg : this,
5923                     fn = isBindKey ? thisBinding[func] : func;
5924
5925                 if (argPos) {
5926                   args = reorder(args, argPos);
5927                 }
5928                 if (isAry && ary < args.length) {
5929                   args.length = ary;
5930                 }
5931                 if (this && this !== root && this instanceof wrapper) {
5932                   fn = Ctor || createCtorWrapper(func);
5933                 }
5934                 return fn.apply(thisBinding, args);
5935               }
5936               return wrapper;
5937             }
5938
5939             /**
5940              * Creates the padding required for `string` based on the given `length`.
5941              * The `chars` string is truncated if the number of characters exceeds `length`.
5942              *
5943              * @private
5944              * @param {string} string The string to create padding for.
5945              * @param {number} [length=0] The padding length.
5946              * @param {string} [chars=' '] The string used as padding.
5947              * @returns {string} Returns the pad for `string`.
5948              */
5949             function createPadding(string, length, chars) {
5950               var strLength = string.length;
5951               length = +length;
5952
5953               if (strLength >= length || !nativeIsFinite(length)) {
5954                 return '';
5955               }
5956               var padLength = length - strLength;
5957               chars = chars == null ? ' ' : (chars + '');
5958               return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
5959             }
5960
5961             /**
5962              * Creates a function that wraps `func` and invokes it with the optional `this`
5963              * binding of `thisArg` and the `partials` prepended to those provided to
5964              * the wrapper.
5965              *
5966              * @private
5967              * @param {Function} func The function to partially apply arguments to.
5968              * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
5969              * @param {*} thisArg The `this` binding of `func`.
5970              * @param {Array} partials The arguments to prepend to those provided to the new function.
5971              * @returns {Function} Returns the new bound function.
5972              */
5973             function createPartialWrapper(func, bitmask, thisArg, partials) {
5974               var isBind = bitmask & BIND_FLAG,
5975                   Ctor = createCtorWrapper(func);
5976
5977               function wrapper() {
5978                 // Avoid `arguments` object use disqualifying optimizations by
5979                 // converting it to an array before providing it `func`.
5980                 var argsIndex = -1,
5981                     argsLength = arguments.length,
5982                     leftIndex = -1,
5983                     leftLength = partials.length,
5984                     args = Array(leftLength + argsLength);
5985
5986                 while (++leftIndex < leftLength) {
5987                   args[leftIndex] = partials[leftIndex];
5988                 }
5989                 while (argsLength--) {
5990                   args[leftIndex++] = arguments[++argsIndex];
5991                 }
5992                 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
5993                 return fn.apply(isBind ? thisArg : this, args);
5994               }
5995               return wrapper;
5996             }
5997
5998             /**
5999              * Creates a `_.ceil`, `_.floor`, or `_.round` function.
6000              *
6001              * @private
6002              * @param {string} methodName The name of the `Math` method to use when rounding.
6003              * @returns {Function} Returns the new round function.
6004              */
6005             function createRound(methodName) {
6006               var func = Math[methodName];
6007               return function(number, precision) {
6008                 precision = precision === undefined ? 0 : (+precision || 0);
6009                 if (precision) {
6010                   precision = pow(10, precision);
6011                   return func(number * precision) / precision;
6012                 }
6013                 return func(number);
6014               };
6015             }
6016
6017             /**
6018              * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
6019              *
6020              * @private
6021              * @param {boolean} [retHighest] Specify returning the highest qualified index.
6022              * @returns {Function} Returns the new index function.
6023              */
6024             function createSortedIndex(retHighest) {
6025               return function(array, value, iteratee, thisArg) {
6026                 var callback = getCallback(iteratee);
6027                 return (iteratee == null && callback === baseCallback)
6028                   ? binaryIndex(array, value, retHighest)
6029                   : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);
6030               };
6031             }
6032
6033             /**
6034              * Creates a function that either curries or invokes `func` with optional
6035              * `this` binding and partially applied arguments.
6036              *
6037              * @private
6038              * @param {Function|string} func The function or method name to reference.
6039              * @param {number} bitmask The bitmask of flags.
6040              *  The bitmask may be composed of the following flags:
6041              *     1 - `_.bind`
6042              *     2 - `_.bindKey`
6043              *     4 - `_.curry` or `_.curryRight` of a bound function
6044              *     8 - `_.curry`
6045              *    16 - `_.curryRight`
6046              *    32 - `_.partial`
6047              *    64 - `_.partialRight`
6048              *   128 - `_.rearg`
6049              *   256 - `_.ary`
6050              * @param {*} [thisArg] The `this` binding of `func`.
6051              * @param {Array} [partials] The arguments to be partially applied.
6052              * @param {Array} [holders] The `partials` placeholder indexes.
6053              * @param {Array} [argPos] The argument positions of the new function.
6054              * @param {number} [ary] The arity cap of `func`.
6055              * @param {number} [arity] The arity of `func`.
6056              * @returns {Function} Returns the new wrapped function.
6057              */
6058             function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
6059               var isBindKey = bitmask & BIND_KEY_FLAG;
6060               if (!isBindKey && typeof func != 'function') {
6061                 throw new TypeError(FUNC_ERROR_TEXT);
6062               }
6063               var length = partials ? partials.length : 0;
6064               if (!length) {
6065                 bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
6066                 partials = holders = undefined;
6067               }
6068               length -= (holders ? holders.length : 0);
6069               if (bitmask & PARTIAL_RIGHT_FLAG) {
6070                 var partialsRight = partials,
6071                     holdersRight = holders;
6072
6073                 partials = holders = undefined;
6074               }
6075               var data = isBindKey ? undefined : getData(func),
6076                   newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
6077
6078               if (data) {
6079                 mergeData(newData, data);
6080                 bitmask = newData[1];
6081                 arity = newData[9];
6082               }
6083               newData[9] = arity == null
6084                 ? (isBindKey ? 0 : func.length)
6085                 : (nativeMax(arity - length, 0) || 0);
6086
6087               if (bitmask == BIND_FLAG) {
6088                 var result = createBindWrapper(newData[0], newData[2]);
6089               } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {
6090                 result = createPartialWrapper.apply(undefined, newData);
6091               } else {
6092                 result = createHybridWrapper.apply(undefined, newData);
6093               }
6094               var setter = data ? baseSetData : setData;
6095               return setter(result, newData);
6096             }
6097
6098             /**
6099              * A specialized version of `baseIsEqualDeep` for arrays with support for
6100              * partial deep comparisons.
6101              *
6102              * @private
6103              * @param {Array} array The array to compare.
6104              * @param {Array} other The other array to compare.
6105              * @param {Function} equalFunc The function to determine equivalents of values.
6106              * @param {Function} [customizer] The function to customize comparing arrays.
6107              * @param {boolean} [isLoose] Specify performing partial comparisons.
6108              * @param {Array} [stackA] Tracks traversed `value` objects.
6109              * @param {Array} [stackB] Tracks traversed `other` objects.
6110              * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
6111              */
6112             function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
6113               var index = -1,
6114                   arrLength = array.length,
6115                   othLength = other.length;
6116
6117               if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
6118                 return false;
6119               }
6120               // Ignore non-index properties.
6121               while (++index < arrLength) {
6122                 var arrValue = array[index],
6123                     othValue = other[index],
6124                     result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
6125
6126                 if (result !== undefined) {
6127                   if (result) {
6128                     continue;
6129                   }
6130                   return false;
6131                 }
6132                 // Recursively compare arrays (susceptible to call stack limits).
6133                 if (isLoose) {
6134                   if (!arraySome(other, function(othValue) {
6135                         return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
6136                       })) {
6137                     return false;
6138                   }
6139                 } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
6140                   return false;
6141                 }
6142               }
6143               return true;
6144             }
6145
6146             /**
6147              * A specialized version of `baseIsEqualDeep` for comparing objects of
6148              * the same `toStringTag`.
6149              *
6150              * **Note:** This function only supports comparing values with tags of
6151              * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
6152              *
6153              * @private
6154              * @param {Object} object The object to compare.
6155              * @param {Object} other The other object to compare.
6156              * @param {string} tag The `toStringTag` of the objects to compare.
6157              * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
6158              */
6159             function equalByTag(object, other, tag) {
6160               switch (tag) {
6161                 case boolTag:
6162                 case dateTag:
6163                   // Coerce dates and booleans to numbers, dates to milliseconds and booleans
6164                   // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
6165                   return +object == +other;
6166
6167                 case errorTag:
6168                   return object.name == other.name && object.message == other.message;
6169
6170                 case numberTag:
6171                   // Treat `NaN` vs. `NaN` as equal.
6172                   return (object != +object)
6173                     ? other != +other
6174                     : object == +other;
6175
6176                 case regexpTag:
6177                 case stringTag:
6178                   // Coerce regexes to strings and treat strings primitives and string
6179                   // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
6180                   return object == (other + '');
6181               }
6182               return false;
6183             }
6184
6185             /**
6186              * A specialized version of `baseIsEqualDeep` for objects with support for
6187              * partial deep comparisons.
6188              *
6189              * @private
6190              * @param {Object} object The object to compare.
6191              * @param {Object} other The other object to compare.
6192              * @param {Function} equalFunc The function to determine equivalents of values.
6193              * @param {Function} [customizer] The function to customize comparing values.
6194              * @param {boolean} [isLoose] Specify performing partial comparisons.
6195              * @param {Array} [stackA] Tracks traversed `value` objects.
6196              * @param {Array} [stackB] Tracks traversed `other` objects.
6197              * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
6198              */
6199             function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
6200               var objProps = keys(object),
6201                   objLength = objProps.length,
6202                   othProps = keys(other),
6203                   othLength = othProps.length;
6204
6205               if (objLength != othLength && !isLoose) {
6206                 return false;
6207               }
6208               var index = objLength;
6209               while (index--) {
6210                 var key = objProps[index];
6211                 if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
6212                   return false;
6213                 }
6214               }
6215               var skipCtor = isLoose;
6216               while (++index < objLength) {
6217                 key = objProps[index];
6218                 var objValue = object[key],
6219                     othValue = other[key],
6220                     result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
6221
6222                 // Recursively compare objects (susceptible to call stack limits).
6223                 if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
6224                   return false;
6225                 }
6226                 skipCtor || (skipCtor = key == 'constructor');
6227               }
6228               if (!skipCtor) {
6229                 var objCtor = object.constructor,
6230                     othCtor = other.constructor;
6231
6232                 // Non `Object` object instances with different constructors are not equal.
6233                 if (objCtor != othCtor &&
6234                     ('constructor' in object && 'constructor' in other) &&
6235                     !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
6236                       typeof othCtor == 'function' && othCtor instanceof othCtor)) {
6237                   return false;
6238                 }
6239               }
6240               return true;
6241             }
6242
6243             /**
6244              * Gets the appropriate "callback" function. If the `_.callback` method is
6245              * customized this function returns the custom method, otherwise it returns
6246              * the `baseCallback` function. If arguments are provided the chosen function
6247              * is invoked with them and its result is returned.
6248              *
6249              * @private
6250              * @returns {Function} Returns the chosen function or its result.
6251              */
6252             function getCallback(func, thisArg, argCount) {
6253               var result = lodash.callback || callback;
6254               result = result === callback ? baseCallback : result;
6255               return argCount ? result(func, thisArg, argCount) : result;
6256             }
6257
6258             /**
6259              * Gets metadata for `func`.
6260              *
6261              * @private
6262              * @param {Function} func The function to query.
6263              * @returns {*} Returns the metadata for `func`.
6264              */
6265             var getData = !metaMap ? noop : function(func) {
6266               return metaMap.get(func);
6267             };
6268
6269             /**
6270              * Gets the name of `func`.
6271              *
6272              * @private
6273              * @param {Function} func The function to query.
6274              * @returns {string} Returns the function name.
6275              */
6276             function getFuncName(func) {
6277               var result = func.name,
6278                   array = realNames[result],
6279                   length = array ? array.length : 0;
6280
6281               while (length--) {
6282                 var data = array[length],
6283                     otherFunc = data.func;
6284                 if (otherFunc == null || otherFunc == func) {
6285                   return data.name;
6286                 }
6287               }
6288               return result;
6289             }
6290
6291             /**
6292              * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
6293              * customized this function returns the custom method, otherwise it returns
6294              * the `baseIndexOf` function. If arguments are provided the chosen function
6295              * is invoked with them and its result is returned.
6296              *
6297              * @private
6298              * @returns {Function|number} Returns the chosen function or its result.
6299              */
6300             function getIndexOf(collection, target, fromIndex) {
6301               var result = lodash.indexOf || indexOf;
6302               result = result === indexOf ? baseIndexOf : result;
6303               return collection ? result(collection, target, fromIndex) : result;
6304             }
6305
6306             /**
6307              * Gets the "length" property value of `object`.
6308              *
6309              * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
6310              * that affects Safari on at least iOS 8.1-8.3 ARM64.
6311              *
6312              * @private
6313              * @param {Object} object The object to query.
6314              * @returns {*} Returns the "length" value.
6315              */
6316             var getLength = baseProperty('length');
6317
6318             /**
6319              * Gets the propery names, values, and compare flags of `object`.
6320              *
6321              * @private
6322              * @param {Object} object The object to query.
6323              * @returns {Array} Returns the match data of `object`.
6324              */
6325             function getMatchData(object) {
6326               var result = pairs(object),
6327                   length = result.length;
6328
6329               while (length--) {
6330                 result[length][2] = isStrictComparable(result[length][1]);
6331               }
6332               return result;
6333             }
6334
6335             /**
6336              * Gets the native function at `key` of `object`.
6337              *
6338              * @private
6339              * @param {Object} object The object to query.
6340              * @param {string} key The key of the method to get.
6341              * @returns {*} Returns the function if it's native, else `undefined`.
6342              */
6343             function getNative(object, key) {
6344               var value = object == null ? undefined : object[key];
6345               return isNative(value) ? value : undefined;
6346             }
6347
6348             /**
6349              * Gets the view, applying any `transforms` to the `start` and `end` positions.
6350              *
6351              * @private
6352              * @param {number} start The start of the view.
6353              * @param {number} end The end of the view.
6354              * @param {Array} transforms The transformations to apply to the view.
6355              * @returns {Object} Returns an object containing the `start` and `end`
6356              *  positions of the view.
6357              */
6358             function getView(start, end, transforms) {
6359               var index = -1,
6360                   length = transforms.length;
6361
6362               while (++index < length) {
6363                 var data = transforms[index],
6364                     size = data.size;
6365
6366                 switch (data.type) {
6367                   case 'drop':      start += size; break;
6368                   case 'dropRight': end -= size; break;
6369                   case 'take':      end = nativeMin(end, start + size); break;
6370                   case 'takeRight': start = nativeMax(start, end - size); break;
6371                 }
6372               }
6373               return { 'start': start, 'end': end };
6374             }
6375
6376             /**
6377              * Initializes an array clone.
6378              *
6379              * @private
6380              * @param {Array} array The array to clone.
6381              * @returns {Array} Returns the initialized clone.
6382              */
6383             function initCloneArray(array) {
6384               var length = array.length,
6385                   result = new array.constructor(length);
6386
6387               // Add array properties assigned by `RegExp#exec`.
6388               if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
6389                 result.index = array.index;
6390                 result.input = array.input;
6391               }
6392               return result;
6393             }
6394
6395             /**
6396              * Initializes an object clone.
6397              *
6398              * @private
6399              * @param {Object} object The object to clone.
6400              * @returns {Object} Returns the initialized clone.
6401              */
6402             function initCloneObject(object) {
6403               var Ctor = object.constructor;
6404               if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {
6405                 Ctor = Object;
6406               }
6407               return new Ctor;
6408             }
6409
6410             /**
6411              * Initializes an object clone based on its `toStringTag`.
6412              *
6413              * **Note:** This function only supports cloning values with tags of
6414              * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
6415              *
6416              * @private
6417              * @param {Object} object The object to clone.
6418              * @param {string} tag The `toStringTag` of the object to clone.
6419              * @param {boolean} [isDeep] Specify a deep clone.
6420              * @returns {Object} Returns the initialized clone.
6421              */
6422             function initCloneByTag(object, tag, isDeep) {
6423               var Ctor = object.constructor;
6424               switch (tag) {
6425                 case arrayBufferTag:
6426                   return bufferClone(object);
6427
6428                 case boolTag:
6429                 case dateTag:
6430                   return new Ctor(+object);
6431
6432                 case float32Tag: case float64Tag:
6433                 case int8Tag: case int16Tag: case int32Tag:
6434                 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
6435                   var buffer = object.buffer;
6436                   return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
6437
6438                 case numberTag:
6439                 case stringTag:
6440                   return new Ctor(object);
6441
6442                 case regexpTag:
6443                   var result = new Ctor(object.source, reFlags.exec(object));
6444                   result.lastIndex = object.lastIndex;
6445               }
6446               return result;
6447             }
6448
6449             /**
6450              * Invokes the method at `path` on `object`.
6451              *
6452              * @private
6453              * @param {Object} object The object to query.
6454              * @param {Array|string} path The path of the method to invoke.
6455              * @param {Array} args The arguments to invoke the method with.
6456              * @returns {*} Returns the result of the invoked method.
6457              */
6458             function invokePath(object, path, args) {
6459               if (object != null && !isKey(path, object)) {
6460                 path = toPath(path);
6461                 object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
6462                 path = last(path);
6463               }
6464               var func = object == null ? object : object[path];
6465               return func == null ? undefined : func.apply(object, args);
6466             }
6467
6468             /**
6469              * Checks if `value` is array-like.
6470              *
6471              * @private
6472              * @param {*} value The value to check.
6473              * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
6474              */
6475             function isArrayLike(value) {
6476               return value != null && isLength(getLength(value));
6477             }
6478
6479             /**
6480              * Checks if `value` is a valid array-like index.
6481              *
6482              * @private
6483              * @param {*} value The value to check.
6484              * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
6485              * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
6486              */
6487             function isIndex(value, length) {
6488               value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
6489               length = length == null ? MAX_SAFE_INTEGER : length;
6490               return value > -1 && value % 1 == 0 && value < length;
6491             }
6492
6493             /**
6494              * Checks if the provided arguments are from an iteratee call.
6495              *
6496              * @private
6497              * @param {*} value The potential iteratee value argument.
6498              * @param {*} index The potential iteratee index or key argument.
6499              * @param {*} object The potential iteratee object argument.
6500              * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
6501              */
6502             function isIterateeCall(value, index, object) {
6503               if (!isObject(object)) {
6504                 return false;
6505               }
6506               var type = typeof index;
6507               if (type == 'number'
6508                   ? (isArrayLike(object) && isIndex(index, object.length))
6509                   : (type == 'string' && index in object)) {
6510                 var other = object[index];
6511                 return value === value ? (value === other) : (other !== other);
6512               }
6513               return false;
6514             }
6515
6516             /**
6517              * Checks if `value` is a property name and not a property path.
6518              *
6519              * @private
6520              * @param {*} value The value to check.
6521              * @param {Object} [object] The object to query keys on.
6522              * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
6523              */
6524             function isKey(value, object) {
6525               var type = typeof value;
6526               if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
6527                 return true;
6528               }
6529               if (isArray(value)) {
6530                 return false;
6531               }
6532               var result = !reIsDeepProp.test(value);
6533               return result || (object != null && value in toObject(object));
6534             }
6535
6536             /**
6537              * Checks if `func` has a lazy counterpart.
6538              *
6539              * @private
6540              * @param {Function} func The function to check.
6541              * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
6542              */
6543             function isLaziable(func) {
6544               var funcName = getFuncName(func);
6545               if (!(funcName in LazyWrapper.prototype)) {
6546                 return false;
6547               }
6548               var other = lodash[funcName];
6549               if (func === other) {
6550                 return true;
6551               }
6552               var data = getData(other);
6553               return !!data && func === data[0];
6554             }
6555
6556             /**
6557              * Checks if `value` is a valid array-like length.
6558              *
6559              * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
6560              *
6561              * @private
6562              * @param {*} value The value to check.
6563              * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
6564              */
6565             function isLength(value) {
6566               return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
6567             }
6568
6569             /**
6570              * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
6571              *
6572              * @private
6573              * @param {*} value The value to check.
6574              * @returns {boolean} Returns `true` if `value` if suitable for strict
6575              *  equality comparisons, else `false`.
6576              */
6577             function isStrictComparable(value) {
6578               return value === value && !isObject(value);
6579             }
6580
6581             /**
6582              * Merges the function metadata of `source` into `data`.
6583              *
6584              * Merging metadata reduces the number of wrappers required to invoke a function.
6585              * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
6586              * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`
6587              * augment function arguments, making the order in which they are executed important,
6588              * preventing the merging of metadata. However, we make an exception for a safe
6589              * common case where curried functions have `_.ary` and or `_.rearg` applied.
6590              *
6591              * @private
6592              * @param {Array} data The destination metadata.
6593              * @param {Array} source The source metadata.
6594              * @returns {Array} Returns `data`.
6595              */
6596             function mergeData(data, source) {
6597               var bitmask = data[1],
6598                   srcBitmask = source[1],
6599                   newBitmask = bitmask | srcBitmask,
6600                   isCommon = newBitmask < ARY_FLAG;
6601
6602               var isCombo =
6603                 (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
6604                 (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
6605                 (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
6606
6607               // Exit early if metadata can't be merged.
6608               if (!(isCommon || isCombo)) {
6609                 return data;
6610               }
6611               // Use source `thisArg` if available.
6612               if (srcBitmask & BIND_FLAG) {
6613                 data[2] = source[2];
6614                 // Set when currying a bound function.
6615                 newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;
6616               }
6617               // Compose partial arguments.
6618               var value = source[3];
6619               if (value) {
6620                 var partials = data[3];
6621                 data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);
6622                 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);
6623               }
6624               // Compose partial right arguments.
6625               value = source[5];
6626               if (value) {
6627                 partials = data[5];
6628                 data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);
6629                 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);
6630               }
6631               // Use source `argPos` if available.
6632               value = source[7];
6633               if (value) {
6634                 data[7] = arrayCopy(value);
6635               }
6636               // Use source `ary` if it's smaller.
6637               if (srcBitmask & ARY_FLAG) {
6638                 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
6639               }
6640               // Use source `arity` if one is not provided.
6641               if (data[9] == null) {
6642                 data[9] = source[9];
6643               }
6644               // Use source `func` and merge bitmasks.
6645               data[0] = source[0];
6646               data[1] = newBitmask;
6647
6648               return data;
6649             }
6650
6651             /**
6652              * Used by `_.defaultsDeep` to customize its `_.merge` use.
6653              *
6654              * @private
6655              * @param {*} objectValue The destination object property value.
6656              * @param {*} sourceValue The source object property value.
6657              * @returns {*} Returns the value to assign to the destination object.
6658              */
6659             function mergeDefaults(objectValue, sourceValue) {
6660               return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
6661             }
6662
6663             /**
6664              * A specialized version of `_.pick` which picks `object` properties specified
6665              * by `props`.
6666              *
6667              * @private
6668              * @param {Object} object The source object.
6669              * @param {string[]} props The property names to pick.
6670              * @returns {Object} Returns the new object.
6671              */
6672             function pickByArray(object, props) {
6673               object = toObject(object);
6674
6675               var index = -1,
6676                   length = props.length,
6677                   result = {};
6678
6679               while (++index < length) {
6680                 var key = props[index];
6681                 if (key in object) {
6682                   result[key] = object[key];
6683                 }
6684               }
6685               return result;
6686             }
6687
6688             /**
6689              * A specialized version of `_.pick` which picks `object` properties `predicate`
6690              * returns truthy for.
6691              *
6692              * @private
6693              * @param {Object} object The source object.
6694              * @param {Function} predicate The function invoked per iteration.
6695              * @returns {Object} Returns the new object.
6696              */
6697             function pickByCallback(object, predicate) {
6698               var result = {};
6699               baseForIn(object, function(value, key, object) {
6700                 if (predicate(value, key, object)) {
6701                   result[key] = value;
6702                 }
6703               });
6704               return result;
6705             }
6706
6707             /**
6708              * Reorder `array` according to the specified indexes where the element at
6709              * the first index is assigned as the first element, the element at
6710              * the second index is assigned as the second element, and so on.
6711              *
6712              * @private
6713              * @param {Array} array The array to reorder.
6714              * @param {Array} indexes The arranged array indexes.
6715              * @returns {Array} Returns `array`.
6716              */
6717             function reorder(array, indexes) {
6718               var arrLength = array.length,
6719                   length = nativeMin(indexes.length, arrLength),
6720                   oldArray = arrayCopy(array);
6721
6722               while (length--) {
6723                 var index = indexes[length];
6724                 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
6725               }
6726               return array;
6727             }
6728
6729             /**
6730              * Sets metadata for `func`.
6731              *
6732              * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
6733              * period of time, it will trip its breaker and transition to an identity function
6734              * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)
6735              * for more details.
6736              *
6737              * @private
6738              * @param {Function} func The function to associate metadata with.
6739              * @param {*} data The metadata.
6740              * @returns {Function} Returns `func`.
6741              */
6742             var setData = (function() {
6743               var count = 0,
6744                   lastCalled = 0;
6745
6746               return function(key, value) {
6747                 var stamp = now(),
6748                     remaining = HOT_SPAN - (stamp - lastCalled);
6749
6750                 lastCalled = stamp;
6751                 if (remaining > 0) {
6752                   if (++count >= HOT_COUNT) {
6753                     return key;
6754                   }
6755                 } else {
6756                   count = 0;
6757                 }
6758                 return baseSetData(key, value);
6759               };
6760             }());
6761
6762             /**
6763              * A fallback implementation of `Object.keys` which creates an array of the
6764              * own enumerable property names of `object`.
6765              *
6766              * @private
6767              * @param {Object} object The object to query.
6768              * @returns {Array} Returns the array of property names.
6769              */
6770             function shimKeys(object) {
6771               var props = keysIn(object),
6772                   propsLength = props.length,
6773                   length = propsLength && object.length;
6774
6775               var allowIndexes = !!length && isLength(length) &&
6776                 (isArray(object) || isArguments(object));
6777
6778               var index = -1,
6779                   result = [];
6780
6781               while (++index < propsLength) {
6782                 var key = props[index];
6783                 if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
6784                   result.push(key);
6785                 }
6786               }
6787               return result;
6788             }
6789
6790             /**
6791              * Converts `value` to an array-like object if it's not one.
6792              *
6793              * @private
6794              * @param {*} value The value to process.
6795              * @returns {Array|Object} Returns the array-like object.
6796              */
6797             function toIterable(value) {
6798               if (value == null) {
6799                 return [];
6800               }
6801               if (!isArrayLike(value)) {
6802                 return values(value);
6803               }
6804               return isObject(value) ? value : Object(value);
6805             }
6806
6807             /**
6808              * Converts `value` to an object if it's not one.
6809              *
6810              * @private
6811              * @param {*} value The value to process.
6812              * @returns {Object} Returns the object.
6813              */
6814             function toObject(value) {
6815               return isObject(value) ? value : Object(value);
6816             }
6817
6818             /**
6819              * Converts `value` to property path array if it's not one.
6820              *
6821              * @private
6822              * @param {*} value The value to process.
6823              * @returns {Array} Returns the property path array.
6824              */
6825             function toPath(value) {
6826               if (isArray(value)) {
6827                 return value;
6828               }
6829               var result = [];
6830               baseToString(value).replace(rePropName, function(match, number, quote, string) {
6831                 result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
6832               });
6833               return result;
6834             }
6835
6836             /**
6837              * Creates a clone of `wrapper`.
6838              *
6839              * @private
6840              * @param {Object} wrapper The wrapper to clone.
6841              * @returns {Object} Returns the cloned wrapper.
6842              */
6843             function wrapperClone(wrapper) {
6844               return wrapper instanceof LazyWrapper
6845                 ? wrapper.clone()
6846                 : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));
6847             }
6848
6849             /*------------------------------------------------------------------------*/
6850
6851             /**
6852              * Creates an array of elements split into groups the length of `size`.
6853              * If `collection` can't be split evenly, the final chunk will be the remaining
6854              * elements.
6855              *
6856              * @static
6857              * @memberOf _
6858              * @category Array
6859              * @param {Array} array The array to process.
6860              * @param {number} [size=1] The length of each chunk.
6861              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
6862              * @returns {Array} Returns the new array containing chunks.
6863              * @example
6864              *
6865              * _.chunk(['a', 'b', 'c', 'd'], 2);
6866              * // => [['a', 'b'], ['c', 'd']]
6867              *
6868              * _.chunk(['a', 'b', 'c', 'd'], 3);
6869              * // => [['a', 'b', 'c'], ['d']]
6870              */
6871             function chunk(array, size, guard) {
6872               if (guard ? isIterateeCall(array, size, guard) : size == null) {
6873                 size = 1;
6874               } else {
6875                 size = nativeMax(nativeFloor(size) || 1, 1);
6876               }
6877               var index = 0,
6878                   length = array ? array.length : 0,
6879                   resIndex = -1,
6880                   result = Array(nativeCeil(length / size));
6881
6882               while (index < length) {
6883                 result[++resIndex] = baseSlice(array, index, (index += size));
6884               }
6885               return result;
6886             }
6887
6888             /**
6889              * Creates an array with all falsey values removed. The values `false`, `null`,
6890              * `0`, `""`, `undefined`, and `NaN` are falsey.
6891              *
6892              * @static
6893              * @memberOf _
6894              * @category Array
6895              * @param {Array} array The array to compact.
6896              * @returns {Array} Returns the new array of filtered values.
6897              * @example
6898              *
6899              * _.compact([0, 1, false, 2, '', 3]);
6900              * // => [1, 2, 3]
6901              */
6902             function compact(array) {
6903               var index = -1,
6904                   length = array ? array.length : 0,
6905                   resIndex = -1,
6906                   result = [];
6907
6908               while (++index < length) {
6909                 var value = array[index];
6910                 if (value) {
6911                   result[++resIndex] = value;
6912                 }
6913               }
6914               return result;
6915             }
6916
6917             /**
6918              * Creates an array of unique `array` values not included in the other
6919              * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
6920              * for equality comparisons.
6921              *
6922              * @static
6923              * @memberOf _
6924              * @category Array
6925              * @param {Array} array The array to inspect.
6926              * @param {...Array} [values] The arrays of values to exclude.
6927              * @returns {Array} Returns the new array of filtered values.
6928              * @example
6929              *
6930              * _.difference([1, 2, 3], [4, 2]);
6931              * // => [1, 3]
6932              */
6933             var difference = restParam(function(array, values) {
6934               return (isObjectLike(array) && isArrayLike(array))
6935                 ? baseDifference(array, baseFlatten(values, false, true))
6936                 : [];
6937             });
6938
6939             /**
6940              * Creates a slice of `array` with `n` elements dropped from the beginning.
6941              *
6942              * @static
6943              * @memberOf _
6944              * @category Array
6945              * @param {Array} array The array to query.
6946              * @param {number} [n=1] The number of elements to drop.
6947              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
6948              * @returns {Array} Returns the slice of `array`.
6949              * @example
6950              *
6951              * _.drop([1, 2, 3]);
6952              * // => [2, 3]
6953              *
6954              * _.drop([1, 2, 3], 2);
6955              * // => [3]
6956              *
6957              * _.drop([1, 2, 3], 5);
6958              * // => []
6959              *
6960              * _.drop([1, 2, 3], 0);
6961              * // => [1, 2, 3]
6962              */
6963             function drop(array, n, guard) {
6964               var length = array ? array.length : 0;
6965               if (!length) {
6966                 return [];
6967               }
6968               if (guard ? isIterateeCall(array, n, guard) : n == null) {
6969                 n = 1;
6970               }
6971               return baseSlice(array, n < 0 ? 0 : n);
6972             }
6973
6974             /**
6975              * Creates a slice of `array` with `n` elements dropped from the end.
6976              *
6977              * @static
6978              * @memberOf _
6979              * @category Array
6980              * @param {Array} array The array to query.
6981              * @param {number} [n=1] The number of elements to drop.
6982              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
6983              * @returns {Array} Returns the slice of `array`.
6984              * @example
6985              *
6986              * _.dropRight([1, 2, 3]);
6987              * // => [1, 2]
6988              *
6989              * _.dropRight([1, 2, 3], 2);
6990              * // => [1]
6991              *
6992              * _.dropRight([1, 2, 3], 5);
6993              * // => []
6994              *
6995              * _.dropRight([1, 2, 3], 0);
6996              * // => [1, 2, 3]
6997              */
6998             function dropRight(array, n, guard) {
6999               var length = array ? array.length : 0;
7000               if (!length) {
7001                 return [];
7002               }
7003               if (guard ? isIterateeCall(array, n, guard) : n == null) {
7004                 n = 1;
7005               }
7006               n = length - (+n || 0);
7007               return baseSlice(array, 0, n < 0 ? 0 : n);
7008             }
7009
7010             /**
7011              * Creates a slice of `array` excluding elements dropped from the end.
7012              * Elements are dropped until `predicate` returns falsey. The predicate is
7013              * bound to `thisArg` and invoked with three arguments: (value, index, array).
7014              *
7015              * If a property name is provided for `predicate` the created `_.property`
7016              * style callback returns the property value of the given element.
7017              *
7018              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7019              * style callback returns `true` for elements that have a matching property
7020              * value, else `false`.
7021              *
7022              * If an object is provided for `predicate` the created `_.matches` style
7023              * callback returns `true` for elements that match the properties of the given
7024              * object, else `false`.
7025              *
7026              * @static
7027              * @memberOf _
7028              * @category Array
7029              * @param {Array} array The array to query.
7030              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7031              *  per iteration.
7032              * @param {*} [thisArg] The `this` binding of `predicate`.
7033              * @returns {Array} Returns the slice of `array`.
7034              * @example
7035              *
7036              * _.dropRightWhile([1, 2, 3], function(n) {
7037              *   return n > 1;
7038              * });
7039              * // => [1]
7040              *
7041              * var users = [
7042              *   { 'user': 'barney',  'active': true },
7043              *   { 'user': 'fred',    'active': false },
7044              *   { 'user': 'pebbles', 'active': false }
7045              * ];
7046              *
7047              * // using the `_.matches` callback shorthand
7048              * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
7049              * // => ['barney', 'fred']
7050              *
7051              * // using the `_.matchesProperty` callback shorthand
7052              * _.pluck(_.dropRightWhile(users, 'active', false), 'user');
7053              * // => ['barney']
7054              *
7055              * // using the `_.property` callback shorthand
7056              * _.pluck(_.dropRightWhile(users, 'active'), 'user');
7057              * // => ['barney', 'fred', 'pebbles']
7058              */
7059             function dropRightWhile(array, predicate, thisArg) {
7060               return (array && array.length)
7061                 ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
7062                 : [];
7063             }
7064
7065             /**
7066              * Creates a slice of `array` excluding elements dropped from the beginning.
7067              * Elements are dropped until `predicate` returns falsey. The predicate is
7068              * bound to `thisArg` and invoked with three arguments: (value, index, array).
7069              *
7070              * If a property name is provided for `predicate` the created `_.property`
7071              * style callback returns the property value of the given element.
7072              *
7073              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7074              * style callback returns `true` for elements that have a matching property
7075              * value, else `false`.
7076              *
7077              * If an object is provided for `predicate` the created `_.matches` style
7078              * callback returns `true` for elements that have the properties of the given
7079              * object, else `false`.
7080              *
7081              * @static
7082              * @memberOf _
7083              * @category Array
7084              * @param {Array} array The array to query.
7085              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7086              *  per iteration.
7087              * @param {*} [thisArg] The `this` binding of `predicate`.
7088              * @returns {Array} Returns the slice of `array`.
7089              * @example
7090              *
7091              * _.dropWhile([1, 2, 3], function(n) {
7092              *   return n < 3;
7093              * });
7094              * // => [3]
7095              *
7096              * var users = [
7097              *   { 'user': 'barney',  'active': false },
7098              *   { 'user': 'fred',    'active': false },
7099              *   { 'user': 'pebbles', 'active': true }
7100              * ];
7101              *
7102              * // using the `_.matches` callback shorthand
7103              * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
7104              * // => ['fred', 'pebbles']
7105              *
7106              * // using the `_.matchesProperty` callback shorthand
7107              * _.pluck(_.dropWhile(users, 'active', false), 'user');
7108              * // => ['pebbles']
7109              *
7110              * // using the `_.property` callback shorthand
7111              * _.pluck(_.dropWhile(users, 'active'), 'user');
7112              * // => ['barney', 'fred', 'pebbles']
7113              */
7114             function dropWhile(array, predicate, thisArg) {
7115               return (array && array.length)
7116                 ? baseWhile(array, getCallback(predicate, thisArg, 3), true)
7117                 : [];
7118             }
7119
7120             /**
7121              * Fills elements of `array` with `value` from `start` up to, but not
7122              * including, `end`.
7123              *
7124              * **Note:** This method mutates `array`.
7125              *
7126              * @static
7127              * @memberOf _
7128              * @category Array
7129              * @param {Array} array The array to fill.
7130              * @param {*} value The value to fill `array` with.
7131              * @param {number} [start=0] The start position.
7132              * @param {number} [end=array.length] The end position.
7133              * @returns {Array} Returns `array`.
7134              * @example
7135              *
7136              * var array = [1, 2, 3];
7137              *
7138              * _.fill(array, 'a');
7139              * console.log(array);
7140              * // => ['a', 'a', 'a']
7141              *
7142              * _.fill(Array(3), 2);
7143              * // => [2, 2, 2]
7144              *
7145              * _.fill([4, 6, 8], '*', 1, 2);
7146              * // => [4, '*', 8]
7147              */
7148             function fill(array, value, start, end) {
7149               var length = array ? array.length : 0;
7150               if (!length) {
7151                 return [];
7152               }
7153               if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
7154                 start = 0;
7155                 end = length;
7156               }
7157               return baseFill(array, value, start, end);
7158             }
7159
7160             /**
7161              * This method is like `_.find` except that it returns the index of the first
7162              * element `predicate` returns truthy for instead of the element itself.
7163              *
7164              * If a property name is provided for `predicate` the created `_.property`
7165              * style callback returns the property value of the given element.
7166              *
7167              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7168              * style callback returns `true` for elements that have a matching property
7169              * value, else `false`.
7170              *
7171              * If an object is provided for `predicate` the created `_.matches` style
7172              * callback returns `true` for elements that have the properties of the given
7173              * object, else `false`.
7174              *
7175              * @static
7176              * @memberOf _
7177              * @category Array
7178              * @param {Array} array The array to search.
7179              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7180              *  per iteration.
7181              * @param {*} [thisArg] The `this` binding of `predicate`.
7182              * @returns {number} Returns the index of the found element, else `-1`.
7183              * @example
7184              *
7185              * var users = [
7186              *   { 'user': 'barney',  'active': false },
7187              *   { 'user': 'fred',    'active': false },
7188              *   { 'user': 'pebbles', 'active': true }
7189              * ];
7190              *
7191              * _.findIndex(users, function(chr) {
7192              *   return chr.user == 'barney';
7193              * });
7194              * // => 0
7195              *
7196              * // using the `_.matches` callback shorthand
7197              * _.findIndex(users, { 'user': 'fred', 'active': false });
7198              * // => 1
7199              *
7200              * // using the `_.matchesProperty` callback shorthand
7201              * _.findIndex(users, 'active', false);
7202              * // => 0
7203              *
7204              * // using the `_.property` callback shorthand
7205              * _.findIndex(users, 'active');
7206              * // => 2
7207              */
7208             var findIndex = createFindIndex();
7209
7210             /**
7211              * This method is like `_.findIndex` except that it iterates over elements
7212              * of `collection` from right to left.
7213              *
7214              * If a property name is provided for `predicate` the created `_.property`
7215              * style callback returns the property value of the given element.
7216              *
7217              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7218              * style callback returns `true` for elements that have a matching property
7219              * value, else `false`.
7220              *
7221              * If an object is provided for `predicate` the created `_.matches` style
7222              * callback returns `true` for elements that have the properties of the given
7223              * object, else `false`.
7224              *
7225              * @static
7226              * @memberOf _
7227              * @category Array
7228              * @param {Array} array The array to search.
7229              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7230              *  per iteration.
7231              * @param {*} [thisArg] The `this` binding of `predicate`.
7232              * @returns {number} Returns the index of the found element, else `-1`.
7233              * @example
7234              *
7235              * var users = [
7236              *   { 'user': 'barney',  'active': true },
7237              *   { 'user': 'fred',    'active': false },
7238              *   { 'user': 'pebbles', 'active': false }
7239              * ];
7240              *
7241              * _.findLastIndex(users, function(chr) {
7242              *   return chr.user == 'pebbles';
7243              * });
7244              * // => 2
7245              *
7246              * // using the `_.matches` callback shorthand
7247              * _.findLastIndex(users, { 'user': 'barney', 'active': true });
7248              * // => 0
7249              *
7250              * // using the `_.matchesProperty` callback shorthand
7251              * _.findLastIndex(users, 'active', false);
7252              * // => 2
7253              *
7254              * // using the `_.property` callback shorthand
7255              * _.findLastIndex(users, 'active');
7256              * // => 0
7257              */
7258             var findLastIndex = createFindIndex(true);
7259
7260             /**
7261              * Gets the first element of `array`.
7262              *
7263              * @static
7264              * @memberOf _
7265              * @alias head
7266              * @category Array
7267              * @param {Array} array The array to query.
7268              * @returns {*} Returns the first element of `array`.
7269              * @example
7270              *
7271              * _.first([1, 2, 3]);
7272              * // => 1
7273              *
7274              * _.first([]);
7275              * // => undefined
7276              */
7277             function first(array) {
7278               return array ? array[0] : undefined;
7279             }
7280
7281             /**
7282              * Flattens a nested array. If `isDeep` is `true` the array is recursively
7283              * flattened, otherwise it is only flattened a single level.
7284              *
7285              * @static
7286              * @memberOf _
7287              * @category Array
7288              * @param {Array} array The array to flatten.
7289              * @param {boolean} [isDeep] Specify a deep flatten.
7290              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
7291              * @returns {Array} Returns the new flattened array.
7292              * @example
7293              *
7294              * _.flatten([1, [2, 3, [4]]]);
7295              * // => [1, 2, 3, [4]]
7296              *
7297              * // using `isDeep`
7298              * _.flatten([1, [2, 3, [4]]], true);
7299              * // => [1, 2, 3, 4]
7300              */
7301             function flatten(array, isDeep, guard) {
7302               var length = array ? array.length : 0;
7303               if (guard && isIterateeCall(array, isDeep, guard)) {
7304                 isDeep = false;
7305               }
7306               return length ? baseFlatten(array, isDeep) : [];
7307             }
7308
7309             /**
7310              * Recursively flattens a nested array.
7311              *
7312              * @static
7313              * @memberOf _
7314              * @category Array
7315              * @param {Array} array The array to recursively flatten.
7316              * @returns {Array} Returns the new flattened array.
7317              * @example
7318              *
7319              * _.flattenDeep([1, [2, 3, [4]]]);
7320              * // => [1, 2, 3, 4]
7321              */
7322             function flattenDeep(array) {
7323               var length = array ? array.length : 0;
7324               return length ? baseFlatten(array, true) : [];
7325             }
7326
7327             /**
7328              * Gets the index at which the first occurrence of `value` is found in `array`
7329              * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
7330              * for equality comparisons. If `fromIndex` is negative, it is used as the offset
7331              * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
7332              * performs a faster binary search.
7333              *
7334              * @static
7335              * @memberOf _
7336              * @category Array
7337              * @param {Array} array The array to search.
7338              * @param {*} value The value to search for.
7339              * @param {boolean|number} [fromIndex=0] The index to search from or `true`
7340              *  to perform a binary search on a sorted array.
7341              * @returns {number} Returns the index of the matched value, else `-1`.
7342              * @example
7343              *
7344              * _.indexOf([1, 2, 1, 2], 2);
7345              * // => 1
7346              *
7347              * // using `fromIndex`
7348              * _.indexOf([1, 2, 1, 2], 2, 2);
7349              * // => 3
7350              *
7351              * // performing a binary search
7352              * _.indexOf([1, 1, 2, 2], 2, true);
7353              * // => 2
7354              */
7355             function indexOf(array, value, fromIndex) {
7356               var length = array ? array.length : 0;
7357               if (!length) {
7358                 return -1;
7359               }
7360               if (typeof fromIndex == 'number') {
7361                 fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
7362               } else if (fromIndex) {
7363                 var index = binaryIndex(array, value);
7364                 if (index < length &&
7365                     (value === value ? (value === array[index]) : (array[index] !== array[index]))) {
7366                   return index;
7367                 }
7368                 return -1;
7369               }
7370               return baseIndexOf(array, value, fromIndex || 0);
7371             }
7372
7373             /**
7374              * Gets all but the last element of `array`.
7375              *
7376              * @static
7377              * @memberOf _
7378              * @category Array
7379              * @param {Array} array The array to query.
7380              * @returns {Array} Returns the slice of `array`.
7381              * @example
7382              *
7383              * _.initial([1, 2, 3]);
7384              * // => [1, 2]
7385              */
7386             function initial(array) {
7387               return dropRight(array, 1);
7388             }
7389
7390             /**
7391              * Creates an array of unique values that are included in all of the provided
7392              * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
7393              * for equality comparisons.
7394              *
7395              * @static
7396              * @memberOf _
7397              * @category Array
7398              * @param {...Array} [arrays] The arrays to inspect.
7399              * @returns {Array} Returns the new array of shared values.
7400              * @example
7401              * _.intersection([1, 2], [4, 2], [2, 1]);
7402              * // => [2]
7403              */
7404             var intersection = restParam(function(arrays) {
7405               var othLength = arrays.length,
7406                   othIndex = othLength,
7407                   caches = Array(length),
7408                   indexOf = getIndexOf(),
7409                   isCommon = indexOf == baseIndexOf,
7410                   result = [];
7411
7412               while (othIndex--) {
7413                 var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];
7414                 caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;
7415               }
7416               var array = arrays[0],
7417                   index = -1,
7418                   length = array ? array.length : 0,
7419                   seen = caches[0];
7420
7421               outer:
7422               while (++index < length) {
7423                 value = array[index];
7424                 if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
7425                   var othIndex = othLength;
7426                   while (--othIndex) {
7427                     var cache = caches[othIndex];
7428                     if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {
7429                       continue outer;
7430                     }
7431                   }
7432                   if (seen) {
7433                     seen.push(value);
7434                   }
7435                   result.push(value);
7436                 }
7437               }
7438               return result;
7439             });
7440
7441             /**
7442              * Gets the last element of `array`.
7443              *
7444              * @static
7445              * @memberOf _
7446              * @category Array
7447              * @param {Array} array The array to query.
7448              * @returns {*} Returns the last element of `array`.
7449              * @example
7450              *
7451              * _.last([1, 2, 3]);
7452              * // => 3
7453              */
7454             function last(array) {
7455               var length = array ? array.length : 0;
7456               return length ? array[length - 1] : undefined;
7457             }
7458
7459             /**
7460              * This method is like `_.indexOf` except that it iterates over elements of
7461              * `array` from right to left.
7462              *
7463              * @static
7464              * @memberOf _
7465              * @category Array
7466              * @param {Array} array The array to search.
7467              * @param {*} value The value to search for.
7468              * @param {boolean|number} [fromIndex=array.length-1] The index to search from
7469              *  or `true` to perform a binary search on a sorted array.
7470              * @returns {number} Returns the index of the matched value, else `-1`.
7471              * @example
7472              *
7473              * _.lastIndexOf([1, 2, 1, 2], 2);
7474              * // => 3
7475              *
7476              * // using `fromIndex`
7477              * _.lastIndexOf([1, 2, 1, 2], 2, 2);
7478              * // => 1
7479              *
7480              * // performing a binary search
7481              * _.lastIndexOf([1, 1, 2, 2], 2, true);
7482              * // => 3
7483              */
7484             function lastIndexOf(array, value, fromIndex) {
7485               var length = array ? array.length : 0;
7486               if (!length) {
7487                 return -1;
7488               }
7489               var index = length;
7490               if (typeof fromIndex == 'number') {
7491                 index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;
7492               } else if (fromIndex) {
7493                 index = binaryIndex(array, value, true) - 1;
7494                 var other = array[index];
7495                 if (value === value ? (value === other) : (other !== other)) {
7496                   return index;
7497                 }
7498                 return -1;
7499               }
7500               if (value !== value) {
7501                 return indexOfNaN(array, index, true);
7502               }
7503               while (index--) {
7504                 if (array[index] === value) {
7505                   return index;
7506                 }
7507               }
7508               return -1;
7509             }
7510
7511             /**
7512              * Removes all provided values from `array` using
7513              * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
7514              * for equality comparisons.
7515              *
7516              * **Note:** Unlike `_.without`, this method mutates `array`.
7517              *
7518              * @static
7519              * @memberOf _
7520              * @category Array
7521              * @param {Array} array The array to modify.
7522              * @param {...*} [values] The values to remove.
7523              * @returns {Array} Returns `array`.
7524              * @example
7525              *
7526              * var array = [1, 2, 3, 1, 2, 3];
7527              *
7528              * _.pull(array, 2, 3);
7529              * console.log(array);
7530              * // => [1, 1]
7531              */
7532             function pull() {
7533               var args = arguments,
7534                   array = args[0];
7535
7536               if (!(array && array.length)) {
7537                 return array;
7538               }
7539               var index = 0,
7540                   indexOf = getIndexOf(),
7541                   length = args.length;
7542
7543               while (++index < length) {
7544                 var fromIndex = 0,
7545                     value = args[index];
7546
7547                 while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
7548                   splice.call(array, fromIndex, 1);
7549                 }
7550               }
7551               return array;
7552             }
7553
7554             /**
7555              * Removes elements from `array` corresponding to the given indexes and returns
7556              * an array of the removed elements. Indexes may be specified as an array of
7557              * indexes or as individual arguments.
7558              *
7559              * **Note:** Unlike `_.at`, this method mutates `array`.
7560              *
7561              * @static
7562              * @memberOf _
7563              * @category Array
7564              * @param {Array} array The array to modify.
7565              * @param {...(number|number[])} [indexes] The indexes of elements to remove,
7566              *  specified as individual indexes or arrays of indexes.
7567              * @returns {Array} Returns the new array of removed elements.
7568              * @example
7569              *
7570              * var array = [5, 10, 15, 20];
7571              * var evens = _.pullAt(array, 1, 3);
7572              *
7573              * console.log(array);
7574              * // => [5, 15]
7575              *
7576              * console.log(evens);
7577              * // => [10, 20]
7578              */
7579             var pullAt = restParam(function(array, indexes) {
7580               indexes = baseFlatten(indexes);
7581
7582               var result = baseAt(array, indexes);
7583               basePullAt(array, indexes.sort(baseCompareAscending));
7584               return result;
7585             });
7586
7587             /**
7588              * Removes all elements from `array` that `predicate` returns truthy for
7589              * and returns an array of the removed elements. The predicate is bound to
7590              * `thisArg` and invoked with three arguments: (value, index, array).
7591              *
7592              * If a property name is provided for `predicate` the created `_.property`
7593              * style callback returns the property value of the given element.
7594              *
7595              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7596              * style callback returns `true` for elements that have a matching property
7597              * value, else `false`.
7598              *
7599              * If an object is provided for `predicate` the created `_.matches` style
7600              * callback returns `true` for elements that have the properties of the given
7601              * object, else `false`.
7602              *
7603              * **Note:** Unlike `_.filter`, this method mutates `array`.
7604              *
7605              * @static
7606              * @memberOf _
7607              * @category Array
7608              * @param {Array} array The array to modify.
7609              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7610              *  per iteration.
7611              * @param {*} [thisArg] The `this` binding of `predicate`.
7612              * @returns {Array} Returns the new array of removed elements.
7613              * @example
7614              *
7615              * var array = [1, 2, 3, 4];
7616              * var evens = _.remove(array, function(n) {
7617              *   return n % 2 == 0;
7618              * });
7619              *
7620              * console.log(array);
7621              * // => [1, 3]
7622              *
7623              * console.log(evens);
7624              * // => [2, 4]
7625              */
7626             function remove(array, predicate, thisArg) {
7627               var result = [];
7628               if (!(array && array.length)) {
7629                 return result;
7630               }
7631               var index = -1,
7632                   indexes = [],
7633                   length = array.length;
7634
7635               predicate = getCallback(predicate, thisArg, 3);
7636               while (++index < length) {
7637                 var value = array[index];
7638                 if (predicate(value, index, array)) {
7639                   result.push(value);
7640                   indexes.push(index);
7641                 }
7642               }
7643               basePullAt(array, indexes);
7644               return result;
7645             }
7646
7647             /**
7648              * Gets all but the first element of `array`.
7649              *
7650              * @static
7651              * @memberOf _
7652              * @alias tail
7653              * @category Array
7654              * @param {Array} array The array to query.
7655              * @returns {Array} Returns the slice of `array`.
7656              * @example
7657              *
7658              * _.rest([1, 2, 3]);
7659              * // => [2, 3]
7660              */
7661             function rest(array) {
7662               return drop(array, 1);
7663             }
7664
7665             /**
7666              * Creates a slice of `array` from `start` up to, but not including, `end`.
7667              *
7668              * **Note:** This method is used instead of `Array#slice` to support node
7669              * lists in IE < 9 and to ensure dense arrays are returned.
7670              *
7671              * @static
7672              * @memberOf _
7673              * @category Array
7674              * @param {Array} array The array to slice.
7675              * @param {number} [start=0] The start position.
7676              * @param {number} [end=array.length] The end position.
7677              * @returns {Array} Returns the slice of `array`.
7678              */
7679             function slice(array, start, end) {
7680               var length = array ? array.length : 0;
7681               if (!length) {
7682                 return [];
7683               }
7684               if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
7685                 start = 0;
7686                 end = length;
7687               }
7688               return baseSlice(array, start, end);
7689             }
7690
7691             /**
7692              * Uses a binary search to determine the lowest index at which `value` should
7693              * be inserted into `array` in order to maintain its sort order. If an iteratee
7694              * function is provided it is invoked for `value` and each element of `array`
7695              * to compute their sort ranking. The iteratee is bound to `thisArg` and
7696              * invoked with one argument; (value).
7697              *
7698              * If a property name is provided for `iteratee` the created `_.property`
7699              * style callback returns the property value of the given element.
7700              *
7701              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7702              * style callback returns `true` for elements that have a matching property
7703              * value, else `false`.
7704              *
7705              * If an object is provided for `iteratee` the created `_.matches` style
7706              * callback returns `true` for elements that have the properties of the given
7707              * object, else `false`.
7708              *
7709              * @static
7710              * @memberOf _
7711              * @category Array
7712              * @param {Array} array The sorted array to inspect.
7713              * @param {*} value The value to evaluate.
7714              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
7715              *  per iteration.
7716              * @param {*} [thisArg] The `this` binding of `iteratee`.
7717              * @returns {number} Returns the index at which `value` should be inserted
7718              *  into `array`.
7719              * @example
7720              *
7721              * _.sortedIndex([30, 50], 40);
7722              * // => 1
7723              *
7724              * _.sortedIndex([4, 4, 5, 5], 5);
7725              * // => 2
7726              *
7727              * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
7728              *
7729              * // using an iteratee function
7730              * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
7731              *   return this.data[word];
7732              * }, dict);
7733              * // => 1
7734              *
7735              * // using the `_.property` callback shorthand
7736              * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
7737              * // => 1
7738              */
7739             var sortedIndex = createSortedIndex();
7740
7741             /**
7742              * This method is like `_.sortedIndex` except that it returns the highest
7743              * index at which `value` should be inserted into `array` in order to
7744              * maintain its sort order.
7745              *
7746              * @static
7747              * @memberOf _
7748              * @category Array
7749              * @param {Array} array The sorted array to inspect.
7750              * @param {*} value The value to evaluate.
7751              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
7752              *  per iteration.
7753              * @param {*} [thisArg] The `this` binding of `iteratee`.
7754              * @returns {number} Returns the index at which `value` should be inserted
7755              *  into `array`.
7756              * @example
7757              *
7758              * _.sortedLastIndex([4, 4, 5, 5], 5);
7759              * // => 4
7760              */
7761             var sortedLastIndex = createSortedIndex(true);
7762
7763             /**
7764              * Creates a slice of `array` with `n` elements taken from the beginning.
7765              *
7766              * @static
7767              * @memberOf _
7768              * @category Array
7769              * @param {Array} array The array to query.
7770              * @param {number} [n=1] The number of elements to take.
7771              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
7772              * @returns {Array} Returns the slice of `array`.
7773              * @example
7774              *
7775              * _.take([1, 2, 3]);
7776              * // => [1]
7777              *
7778              * _.take([1, 2, 3], 2);
7779              * // => [1, 2]
7780              *
7781              * _.take([1, 2, 3], 5);
7782              * // => [1, 2, 3]
7783              *
7784              * _.take([1, 2, 3], 0);
7785              * // => []
7786              */
7787             function take(array, n, guard) {
7788               var length = array ? array.length : 0;
7789               if (!length) {
7790                 return [];
7791               }
7792               if (guard ? isIterateeCall(array, n, guard) : n == null) {
7793                 n = 1;
7794               }
7795               return baseSlice(array, 0, n < 0 ? 0 : n);
7796             }
7797
7798             /**
7799              * Creates a slice of `array` with `n` elements taken from the end.
7800              *
7801              * @static
7802              * @memberOf _
7803              * @category Array
7804              * @param {Array} array The array to query.
7805              * @param {number} [n=1] The number of elements to take.
7806              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
7807              * @returns {Array} Returns the slice of `array`.
7808              * @example
7809              *
7810              * _.takeRight([1, 2, 3]);
7811              * // => [3]
7812              *
7813              * _.takeRight([1, 2, 3], 2);
7814              * // => [2, 3]
7815              *
7816              * _.takeRight([1, 2, 3], 5);
7817              * // => [1, 2, 3]
7818              *
7819              * _.takeRight([1, 2, 3], 0);
7820              * // => []
7821              */
7822             function takeRight(array, n, guard) {
7823               var length = array ? array.length : 0;
7824               if (!length) {
7825                 return [];
7826               }
7827               if (guard ? isIterateeCall(array, n, guard) : n == null) {
7828                 n = 1;
7829               }
7830               n = length - (+n || 0);
7831               return baseSlice(array, n < 0 ? 0 : n);
7832             }
7833
7834             /**
7835              * Creates a slice of `array` with elements taken from the end. Elements are
7836              * taken until `predicate` returns falsey. The predicate is bound to `thisArg`
7837              * and invoked with three arguments: (value, index, array).
7838              *
7839              * If a property name is provided for `predicate` the created `_.property`
7840              * style callback returns the property value of the given element.
7841              *
7842              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7843              * style callback returns `true` for elements that have a matching property
7844              * value, else `false`.
7845              *
7846              * If an object is provided for `predicate` the created `_.matches` style
7847              * callback returns `true` for elements that have the properties of the given
7848              * object, else `false`.
7849              *
7850              * @static
7851              * @memberOf _
7852              * @category Array
7853              * @param {Array} array The array to query.
7854              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7855              *  per iteration.
7856              * @param {*} [thisArg] The `this` binding of `predicate`.
7857              * @returns {Array} Returns the slice of `array`.
7858              * @example
7859              *
7860              * _.takeRightWhile([1, 2, 3], function(n) {
7861              *   return n > 1;
7862              * });
7863              * // => [2, 3]
7864              *
7865              * var users = [
7866              *   { 'user': 'barney',  'active': true },
7867              *   { 'user': 'fred',    'active': false },
7868              *   { 'user': 'pebbles', 'active': false }
7869              * ];
7870              *
7871              * // using the `_.matches` callback shorthand
7872              * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
7873              * // => ['pebbles']
7874              *
7875              * // using the `_.matchesProperty` callback shorthand
7876              * _.pluck(_.takeRightWhile(users, 'active', false), 'user');
7877              * // => ['fred', 'pebbles']
7878              *
7879              * // using the `_.property` callback shorthand
7880              * _.pluck(_.takeRightWhile(users, 'active'), 'user');
7881              * // => []
7882              */
7883             function takeRightWhile(array, predicate, thisArg) {
7884               return (array && array.length)
7885                 ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
7886                 : [];
7887             }
7888
7889             /**
7890              * Creates a slice of `array` with elements taken from the beginning. Elements
7891              * are taken until `predicate` returns falsey. The predicate is bound to
7892              * `thisArg` and invoked with three arguments: (value, index, array).
7893              *
7894              * If a property name is provided for `predicate` the created `_.property`
7895              * style callback returns the property value of the given element.
7896              *
7897              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7898              * style callback returns `true` for elements that have a matching property
7899              * value, else `false`.
7900              *
7901              * If an object is provided for `predicate` the created `_.matches` style
7902              * callback returns `true` for elements that have the properties of the given
7903              * object, else `false`.
7904              *
7905              * @static
7906              * @memberOf _
7907              * @category Array
7908              * @param {Array} array The array to query.
7909              * @param {Function|Object|string} [predicate=_.identity] The function invoked
7910              *  per iteration.
7911              * @param {*} [thisArg] The `this` binding of `predicate`.
7912              * @returns {Array} Returns the slice of `array`.
7913              * @example
7914              *
7915              * _.takeWhile([1, 2, 3], function(n) {
7916              *   return n < 3;
7917              * });
7918              * // => [1, 2]
7919              *
7920              * var users = [
7921              *   { 'user': 'barney',  'active': false },
7922              *   { 'user': 'fred',    'active': false},
7923              *   { 'user': 'pebbles', 'active': true }
7924              * ];
7925              *
7926              * // using the `_.matches` callback shorthand
7927              * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
7928              * // => ['barney']
7929              *
7930              * // using the `_.matchesProperty` callback shorthand
7931              * _.pluck(_.takeWhile(users, 'active', false), 'user');
7932              * // => ['barney', 'fred']
7933              *
7934              * // using the `_.property` callback shorthand
7935              * _.pluck(_.takeWhile(users, 'active'), 'user');
7936              * // => []
7937              */
7938             function takeWhile(array, predicate, thisArg) {
7939               return (array && array.length)
7940                 ? baseWhile(array, getCallback(predicate, thisArg, 3))
7941                 : [];
7942             }
7943
7944             /**
7945              * Creates an array of unique values, in order, from all of the provided arrays
7946              * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
7947              * for equality comparisons.
7948              *
7949              * @static
7950              * @memberOf _
7951              * @category Array
7952              * @param {...Array} [arrays] The arrays to inspect.
7953              * @returns {Array} Returns the new array of combined values.
7954              * @example
7955              *
7956              * _.union([1, 2], [4, 2], [2, 1]);
7957              * // => [1, 2, 4]
7958              */
7959             var union = restParam(function(arrays) {
7960               return baseUniq(baseFlatten(arrays, false, true));
7961             });
7962
7963             /**
7964              * Creates a duplicate-free version of an array, using
7965              * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
7966              * for equality comparisons, in which only the first occurence of each element
7967              * is kept. Providing `true` for `isSorted` performs a faster search algorithm
7968              * for sorted arrays. If an iteratee function is provided it is invoked for
7969              * each element in the array to generate the criterion by which uniqueness
7970              * is computed. The `iteratee` is bound to `thisArg` and invoked with three
7971              * arguments: (value, index, array).
7972              *
7973              * If a property name is provided for `iteratee` the created `_.property`
7974              * style callback returns the property value of the given element.
7975              *
7976              * If a value is also provided for `thisArg` the created `_.matchesProperty`
7977              * style callback returns `true` for elements that have a matching property
7978              * value, else `false`.
7979              *
7980              * If an object is provided for `iteratee` the created `_.matches` style
7981              * callback returns `true` for elements that have the properties of the given
7982              * object, else `false`.
7983              *
7984              * @static
7985              * @memberOf _
7986              * @alias unique
7987              * @category Array
7988              * @param {Array} array The array to inspect.
7989              * @param {boolean} [isSorted] Specify the array is sorted.
7990              * @param {Function|Object|string} [iteratee] The function invoked per iteration.
7991              * @param {*} [thisArg] The `this` binding of `iteratee`.
7992              * @returns {Array} Returns the new duplicate-value-free array.
7993              * @example
7994              *
7995              * _.uniq([2, 1, 2]);
7996              * // => [2, 1]
7997              *
7998              * // using `isSorted`
7999              * _.uniq([1, 1, 2], true);
8000              * // => [1, 2]
8001              *
8002              * // using an iteratee function
8003              * _.uniq([1, 2.5, 1.5, 2], function(n) {
8004              *   return this.floor(n);
8005              * }, Math);
8006              * // => [1, 2.5]
8007              *
8008              * // using the `_.property` callback shorthand
8009              * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
8010              * // => [{ 'x': 1 }, { 'x': 2 }]
8011              */
8012             function uniq(array, isSorted, iteratee, thisArg) {
8013               var length = array ? array.length : 0;
8014               if (!length) {
8015                 return [];
8016               }
8017               if (isSorted != null && typeof isSorted != 'boolean') {
8018                 thisArg = iteratee;
8019                 iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
8020                 isSorted = false;
8021               }
8022               var callback = getCallback();
8023               if (!(iteratee == null && callback === baseCallback)) {
8024                 iteratee = callback(iteratee, thisArg, 3);
8025               }
8026               return (isSorted && getIndexOf() == baseIndexOf)
8027                 ? sortedUniq(array, iteratee)
8028                 : baseUniq(array, iteratee);
8029             }
8030
8031             /**
8032              * This method is like `_.zip` except that it accepts an array of grouped
8033              * elements and creates an array regrouping the elements to their pre-zip
8034              * configuration.
8035              *
8036              * @static
8037              * @memberOf _
8038              * @category Array
8039              * @param {Array} array The array of grouped elements to process.
8040              * @returns {Array} Returns the new array of regrouped elements.
8041              * @example
8042              *
8043              * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);
8044              * // => [['fred', 30, true], ['barney', 40, false]]
8045              *
8046              * _.unzip(zipped);
8047              * // => [['fred', 'barney'], [30, 40], [true, false]]
8048              */
8049             function unzip(array) {
8050               if (!(array && array.length)) {
8051                 return [];
8052               }
8053               var index = -1,
8054                   length = 0;
8055
8056               array = arrayFilter(array, function(group) {
8057                 if (isArrayLike(group)) {
8058                   length = nativeMax(group.length, length);
8059                   return true;
8060                 }
8061               });
8062               var result = Array(length);
8063               while (++index < length) {
8064                 result[index] = arrayMap(array, baseProperty(index));
8065               }
8066               return result;
8067             }
8068
8069             /**
8070              * This method is like `_.unzip` except that it accepts an iteratee to specify
8071              * how regrouped values should be combined. The `iteratee` is bound to `thisArg`
8072              * and invoked with four arguments: (accumulator, value, index, group).
8073              *
8074              * @static
8075              * @memberOf _
8076              * @category Array
8077              * @param {Array} array The array of grouped elements to process.
8078              * @param {Function} [iteratee] The function to combine regrouped values.
8079              * @param {*} [thisArg] The `this` binding of `iteratee`.
8080              * @returns {Array} Returns the new array of regrouped elements.
8081              * @example
8082              *
8083              * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
8084              * // => [[1, 10, 100], [2, 20, 200]]
8085              *
8086              * _.unzipWith(zipped, _.add);
8087              * // => [3, 30, 300]
8088              */
8089             function unzipWith(array, iteratee, thisArg) {
8090               var length = array ? array.length : 0;
8091               if (!length) {
8092                 return [];
8093               }
8094               var result = unzip(array);
8095               if (iteratee == null) {
8096                 return result;
8097               }
8098               iteratee = bindCallback(iteratee, thisArg, 4);
8099               return arrayMap(result, function(group) {
8100                 return arrayReduce(group, iteratee, undefined, true);
8101               });
8102             }
8103
8104             /**
8105              * Creates an array excluding all provided values using
8106              * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
8107              * for equality comparisons.
8108              *
8109              * @static
8110              * @memberOf _
8111              * @category Array
8112              * @param {Array} array The array to filter.
8113              * @param {...*} [values] The values to exclude.
8114              * @returns {Array} Returns the new array of filtered values.
8115              * @example
8116              *
8117              * _.without([1, 2, 1, 3], 1, 2);
8118              * // => [3]
8119              */
8120             var without = restParam(function(array, values) {
8121               return isArrayLike(array)
8122                 ? baseDifference(array, values)
8123                 : [];
8124             });
8125
8126             /**
8127              * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
8128              * of the provided arrays.
8129              *
8130              * @static
8131              * @memberOf _
8132              * @category Array
8133              * @param {...Array} [arrays] The arrays to inspect.
8134              * @returns {Array} Returns the new array of values.
8135              * @example
8136              *
8137              * _.xor([1, 2], [4, 2]);
8138              * // => [1, 4]
8139              */
8140             function xor() {
8141               var index = -1,
8142                   length = arguments.length;
8143
8144               while (++index < length) {
8145                 var array = arguments[index];
8146                 if (isArrayLike(array)) {
8147                   var result = result
8148                     ? arrayPush(baseDifference(result, array), baseDifference(array, result))
8149                     : array;
8150                 }
8151               }
8152               return result ? baseUniq(result) : [];
8153             }
8154
8155             /**
8156              * Creates an array of grouped elements, the first of which contains the first
8157              * elements of the given arrays, the second of which contains the second elements
8158              * of the given arrays, and so on.
8159              *
8160              * @static
8161              * @memberOf _
8162              * @category Array
8163              * @param {...Array} [arrays] The arrays to process.
8164              * @returns {Array} Returns the new array of grouped elements.
8165              * @example
8166              *
8167              * _.zip(['fred', 'barney'], [30, 40], [true, false]);
8168              * // => [['fred', 30, true], ['barney', 40, false]]
8169              */
8170             var zip = restParam(unzip);
8171
8172             /**
8173              * The inverse of `_.pairs`; this method returns an object composed from arrays
8174              * of property names and values. Provide either a single two dimensional array,
8175              * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
8176              * and one of corresponding values.
8177              *
8178              * @static
8179              * @memberOf _
8180              * @alias object
8181              * @category Array
8182              * @param {Array} props The property names.
8183              * @param {Array} [values=[]] The property values.
8184              * @returns {Object} Returns the new object.
8185              * @example
8186              *
8187              * _.zipObject([['fred', 30], ['barney', 40]]);
8188              * // => { 'fred': 30, 'barney': 40 }
8189              *
8190              * _.zipObject(['fred', 'barney'], [30, 40]);
8191              * // => { 'fred': 30, 'barney': 40 }
8192              */
8193             function zipObject(props, values) {
8194               var index = -1,
8195                   length = props ? props.length : 0,
8196                   result = {};
8197
8198               if (length && !values && !isArray(props[0])) {
8199                 values = [];
8200               }
8201               while (++index < length) {
8202                 var key = props[index];
8203                 if (values) {
8204                   result[key] = values[index];
8205                 } else if (key) {
8206                   result[key[0]] = key[1];
8207                 }
8208               }
8209               return result;
8210             }
8211
8212             /**
8213              * This method is like `_.zip` except that it accepts an iteratee to specify
8214              * how grouped values should be combined. The `iteratee` is bound to `thisArg`
8215              * and invoked with four arguments: (accumulator, value, index, group).
8216              *
8217              * @static
8218              * @memberOf _
8219              * @category Array
8220              * @param {...Array} [arrays] The arrays to process.
8221              * @param {Function} [iteratee] The function to combine grouped values.
8222              * @param {*} [thisArg] The `this` binding of `iteratee`.
8223              * @returns {Array} Returns the new array of grouped elements.
8224              * @example
8225              *
8226              * _.zipWith([1, 2], [10, 20], [100, 200], _.add);
8227              * // => [111, 222]
8228              */
8229             var zipWith = restParam(function(arrays) {
8230               var length = arrays.length,
8231                   iteratee = length > 2 ? arrays[length - 2] : undefined,
8232                   thisArg = length > 1 ? arrays[length - 1] : undefined;
8233
8234               if (length > 2 && typeof iteratee == 'function') {
8235                 length -= 2;
8236               } else {
8237                 iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;
8238                 thisArg = undefined;
8239               }
8240               arrays.length = length;
8241               return unzipWith(arrays, iteratee, thisArg);
8242             });
8243
8244             /*------------------------------------------------------------------------*/
8245
8246             /**
8247              * Creates a `lodash` object that wraps `value` with explicit method
8248              * chaining enabled.
8249              *
8250              * @static
8251              * @memberOf _
8252              * @category Chain
8253              * @param {*} value The value to wrap.
8254              * @returns {Object} Returns the new `lodash` wrapper instance.
8255              * @example
8256              *
8257              * var users = [
8258              *   { 'user': 'barney',  'age': 36 },
8259              *   { 'user': 'fred',    'age': 40 },
8260              *   { 'user': 'pebbles', 'age': 1 }
8261              * ];
8262              *
8263              * var youngest = _.chain(users)
8264              *   .sortBy('age')
8265              *   .map(function(chr) {
8266              *     return chr.user + ' is ' + chr.age;
8267              *   })
8268              *   .first()
8269              *   .value();
8270              * // => 'pebbles is 1'
8271              */
8272             function chain(value) {
8273               var result = lodash(value);
8274               result.__chain__ = true;
8275               return result;
8276             }
8277
8278             /**
8279              * This method invokes `interceptor` and returns `value`. The interceptor is
8280              * bound to `thisArg` and invoked with one argument; (value). The purpose of
8281              * this method is to "tap into" a method chain in order to perform operations
8282              * on intermediate results within the chain.
8283              *
8284              * @static
8285              * @memberOf _
8286              * @category Chain
8287              * @param {*} value The value to provide to `interceptor`.
8288              * @param {Function} interceptor The function to invoke.
8289              * @param {*} [thisArg] The `this` binding of `interceptor`.
8290              * @returns {*} Returns `value`.
8291              * @example
8292              *
8293              * _([1, 2, 3])
8294              *  .tap(function(array) {
8295              *    array.pop();
8296              *  })
8297              *  .reverse()
8298              *  .value();
8299              * // => [2, 1]
8300              */
8301             function tap(value, interceptor, thisArg) {
8302               interceptor.call(thisArg, value);
8303               return value;
8304             }
8305
8306             /**
8307              * This method is like `_.tap` except that it returns the result of `interceptor`.
8308              *
8309              * @static
8310              * @memberOf _
8311              * @category Chain
8312              * @param {*} value The value to provide to `interceptor`.
8313              * @param {Function} interceptor The function to invoke.
8314              * @param {*} [thisArg] The `this` binding of `interceptor`.
8315              * @returns {*} Returns the result of `interceptor`.
8316              * @example
8317              *
8318              * _('  abc  ')
8319              *  .chain()
8320              *  .trim()
8321              *  .thru(function(value) {
8322              *    return [value];
8323              *  })
8324              *  .value();
8325              * // => ['abc']
8326              */
8327             function thru(value, interceptor, thisArg) {
8328               return interceptor.call(thisArg, value);
8329             }
8330
8331             /**
8332              * Enables explicit method chaining on the wrapper object.
8333              *
8334              * @name chain
8335              * @memberOf _
8336              * @category Chain
8337              * @returns {Object} Returns the new `lodash` wrapper instance.
8338              * @example
8339              *
8340              * var users = [
8341              *   { 'user': 'barney', 'age': 36 },
8342              *   { 'user': 'fred',   'age': 40 }
8343              * ];
8344              *
8345              * // without explicit chaining
8346              * _(users).first();
8347              * // => { 'user': 'barney', 'age': 36 }
8348              *
8349              * // with explicit chaining
8350              * _(users).chain()
8351              *   .first()
8352              *   .pick('user')
8353              *   .value();
8354              * // => { 'user': 'barney' }
8355              */
8356             function wrapperChain() {
8357               return chain(this);
8358             }
8359
8360             /**
8361              * Executes the chained sequence and returns the wrapped result.
8362              *
8363              * @name commit
8364              * @memberOf _
8365              * @category Chain
8366              * @returns {Object} Returns the new `lodash` wrapper instance.
8367              * @example
8368              *
8369              * var array = [1, 2];
8370              * var wrapped = _(array).push(3);
8371              *
8372              * console.log(array);
8373              * // => [1, 2]
8374              *
8375              * wrapped = wrapped.commit();
8376              * console.log(array);
8377              * // => [1, 2, 3]
8378              *
8379              * wrapped.last();
8380              * // => 3
8381              *
8382              * console.log(array);
8383              * // => [1, 2, 3]
8384              */
8385             function wrapperCommit() {
8386               return new LodashWrapper(this.value(), this.__chain__);
8387             }
8388
8389             /**
8390              * Creates a new array joining a wrapped array with any additional arrays
8391              * and/or values.
8392              *
8393              * @name concat
8394              * @memberOf _
8395              * @category Chain
8396              * @param {...*} [values] The values to concatenate.
8397              * @returns {Array} Returns the new concatenated array.
8398              * @example
8399              *
8400              * var array = [1];
8401              * var wrapped = _(array).concat(2, [3], [[4]]);
8402              *
8403              * console.log(wrapped.value());
8404              * // => [1, 2, 3, [4]]
8405              *
8406              * console.log(array);
8407              * // => [1]
8408              */
8409             var wrapperConcat = restParam(function(values) {
8410               values = baseFlatten(values);
8411               return this.thru(function(array) {
8412                 return arrayConcat(isArray(array) ? array : [toObject(array)], values);
8413               });
8414             });
8415
8416             /**
8417              * Creates a clone of the chained sequence planting `value` as the wrapped value.
8418              *
8419              * @name plant
8420              * @memberOf _
8421              * @category Chain
8422              * @returns {Object} Returns the new `lodash` wrapper instance.
8423              * @example
8424              *
8425              * var array = [1, 2];
8426              * var wrapped = _(array).map(function(value) {
8427              *   return Math.pow(value, 2);
8428              * });
8429              *
8430              * var other = [3, 4];
8431              * var otherWrapped = wrapped.plant(other);
8432              *
8433              * otherWrapped.value();
8434              * // => [9, 16]
8435              *
8436              * wrapped.value();
8437              * // => [1, 4]
8438              */
8439             function wrapperPlant(value) {
8440               var result,
8441                   parent = this;
8442
8443               while (parent instanceof baseLodash) {
8444                 var clone = wrapperClone(parent);
8445                 if (result) {
8446                   previous.__wrapped__ = clone;
8447                 } else {
8448                   result = clone;
8449                 }
8450                 var previous = clone;
8451                 parent = parent.__wrapped__;
8452               }
8453               previous.__wrapped__ = value;
8454               return result;
8455             }
8456
8457             /**
8458              * Reverses the wrapped array so the first element becomes the last, the
8459              * second element becomes the second to last, and so on.
8460              *
8461              * **Note:** This method mutates the wrapped array.
8462              *
8463              * @name reverse
8464              * @memberOf _
8465              * @category Chain
8466              * @returns {Object} Returns the new reversed `lodash` wrapper instance.
8467              * @example
8468              *
8469              * var array = [1, 2, 3];
8470              *
8471              * _(array).reverse().value()
8472              * // => [3, 2, 1]
8473              *
8474              * console.log(array);
8475              * // => [3, 2, 1]
8476              */
8477             function wrapperReverse() {
8478               var value = this.__wrapped__;
8479
8480               var interceptor = function(value) {
8481                 return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();
8482               };
8483               if (value instanceof LazyWrapper) {
8484                 var wrapped = value;
8485                 if (this.__actions__.length) {
8486                   wrapped = new LazyWrapper(this);
8487                 }
8488                 wrapped = wrapped.reverse();
8489                 wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
8490                 return new LodashWrapper(wrapped, this.__chain__);
8491               }
8492               return this.thru(interceptor);
8493             }
8494
8495             /**
8496              * Produces the result of coercing the unwrapped value to a string.
8497              *
8498              * @name toString
8499              * @memberOf _
8500              * @category Chain
8501              * @returns {string} Returns the coerced string value.
8502              * @example
8503              *
8504              * _([1, 2, 3]).toString();
8505              * // => '1,2,3'
8506              */
8507             function wrapperToString() {
8508               return (this.value() + '');
8509             }
8510
8511             /**
8512              * Executes the chained sequence to extract the unwrapped value.
8513              *
8514              * @name value
8515              * @memberOf _
8516              * @alias run, toJSON, valueOf
8517              * @category Chain
8518              * @returns {*} Returns the resolved unwrapped value.
8519              * @example
8520              *
8521              * _([1, 2, 3]).value();
8522              * // => [1, 2, 3]
8523              */
8524             function wrapperValue() {
8525               return baseWrapperValue(this.__wrapped__, this.__actions__);
8526             }
8527
8528             /*------------------------------------------------------------------------*/
8529
8530             /**
8531              * Creates an array of elements corresponding to the given keys, or indexes,
8532              * of `collection`. Keys may be specified as individual arguments or as arrays
8533              * of keys.
8534              *
8535              * @static
8536              * @memberOf _
8537              * @category Collection
8538              * @param {Array|Object|string} collection The collection to iterate over.
8539              * @param {...(number|number[]|string|string[])} [props] The property names
8540              *  or indexes of elements to pick, specified individually or in arrays.
8541              * @returns {Array} Returns the new array of picked elements.
8542              * @example
8543              *
8544              * _.at(['a', 'b', 'c'], [0, 2]);
8545              * // => ['a', 'c']
8546              *
8547              * _.at(['barney', 'fred', 'pebbles'], 0, 2);
8548              * // => ['barney', 'pebbles']
8549              */
8550             var at = restParam(function(collection, props) {
8551               return baseAt(collection, baseFlatten(props));
8552             });
8553
8554             /**
8555              * Creates an object composed of keys generated from the results of running
8556              * each element of `collection` through `iteratee`. The corresponding value
8557              * of each key is the number of times the key was returned by `iteratee`.
8558              * The `iteratee` is bound to `thisArg` and invoked with three arguments:
8559              * (value, index|key, collection).
8560              *
8561              * If a property name is provided for `iteratee` the created `_.property`
8562              * style callback returns the property value of the given element.
8563              *
8564              * If a value is also provided for `thisArg` the created `_.matchesProperty`
8565              * style callback returns `true` for elements that have a matching property
8566              * value, else `false`.
8567              *
8568              * If an object is provided for `iteratee` the created `_.matches` style
8569              * callback returns `true` for elements that have the properties of the given
8570              * object, else `false`.
8571              *
8572              * @static
8573              * @memberOf _
8574              * @category Collection
8575              * @param {Array|Object|string} collection The collection to iterate over.
8576              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
8577              *  per iteration.
8578              * @param {*} [thisArg] The `this` binding of `iteratee`.
8579              * @returns {Object} Returns the composed aggregate object.
8580              * @example
8581              *
8582              * _.countBy([4.3, 6.1, 6.4], function(n) {
8583              *   return Math.floor(n);
8584              * });
8585              * // => { '4': 1, '6': 2 }
8586              *
8587              * _.countBy([4.3, 6.1, 6.4], function(n) {
8588              *   return this.floor(n);
8589              * }, Math);
8590              * // => { '4': 1, '6': 2 }
8591              *
8592              * _.countBy(['one', 'two', 'three'], 'length');
8593              * // => { '3': 2, '5': 1 }
8594              */
8595             var countBy = createAggregator(function(result, value, key) {
8596               hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
8597             });
8598
8599             /**
8600              * Checks if `predicate` returns truthy for **all** elements of `collection`.
8601              * The predicate is bound to `thisArg` and invoked with three arguments:
8602              * (value, index|key, collection).
8603              *
8604              * If a property name is provided for `predicate` the created `_.property`
8605              * style callback returns the property value of the given element.
8606              *
8607              * If a value is also provided for `thisArg` the created `_.matchesProperty`
8608              * style callback returns `true` for elements that have a matching property
8609              * value, else `false`.
8610              *
8611              * If an object is provided for `predicate` the created `_.matches` style
8612              * callback returns `true` for elements that have the properties of the given
8613              * object, else `false`.
8614              *
8615              * @static
8616              * @memberOf _
8617              * @alias all
8618              * @category Collection
8619              * @param {Array|Object|string} collection The collection to iterate over.
8620              * @param {Function|Object|string} [predicate=_.identity] The function invoked
8621              *  per iteration.
8622              * @param {*} [thisArg] The `this` binding of `predicate`.
8623              * @returns {boolean} Returns `true` if all elements pass the predicate check,
8624              *  else `false`.
8625              * @example
8626              *
8627              * _.every([true, 1, null, 'yes'], Boolean);
8628              * // => false
8629              *
8630              * var users = [
8631              *   { 'user': 'barney', 'active': false },
8632              *   { 'user': 'fred',   'active': false }
8633              * ];
8634              *
8635              * // using the `_.matches` callback shorthand
8636              * _.every(users, { 'user': 'barney', 'active': false });
8637              * // => false
8638              *
8639              * // using the `_.matchesProperty` callback shorthand
8640              * _.every(users, 'active', false);
8641              * // => true
8642              *
8643              * // using the `_.property` callback shorthand
8644              * _.every(users, 'active');
8645              * // => false
8646              */
8647             function every(collection, predicate, thisArg) {
8648               var func = isArray(collection) ? arrayEvery : baseEvery;
8649               if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
8650                 predicate = undefined;
8651               }
8652               if (typeof predicate != 'function' || thisArg !== undefined) {
8653                 predicate = getCallback(predicate, thisArg, 3);
8654               }
8655               return func(collection, predicate);
8656             }
8657
8658             /**
8659              * Iterates over elements of `collection`, returning an array of all elements
8660              * `predicate` returns truthy for. The predicate is bound to `thisArg` and
8661              * invoked with three arguments: (value, index|key, collection).
8662              *
8663              * If a property name is provided for `predicate` the created `_.property`
8664              * style callback returns the property value of the given element.
8665              *
8666              * If a value is also provided for `thisArg` the created `_.matchesProperty`
8667              * style callback returns `true` for elements that have a matching property
8668              * value, else `false`.
8669              *
8670              * If an object is provided for `predicate` the created `_.matches` style
8671              * callback returns `true` for elements that have the properties of the given
8672              * object, else `false`.
8673              *
8674              * @static
8675              * @memberOf _
8676              * @alias select
8677              * @category Collection
8678              * @param {Array|Object|string} collection The collection to iterate over.
8679              * @param {Function|Object|string} [predicate=_.identity] The function invoked
8680              *  per iteration.
8681              * @param {*} [thisArg] The `this` binding of `predicate`.
8682              * @returns {Array} Returns the new filtered array.
8683              * @example
8684              *
8685              * _.filter([4, 5, 6], function(n) {
8686              *   return n % 2 == 0;
8687              * });
8688              * // => [4, 6]
8689              *
8690              * var users = [
8691              *   { 'user': 'barney', 'age': 36, 'active': true },
8692              *   { 'user': 'fred',   'age': 40, 'active': false }
8693              * ];
8694              *
8695              * // using the `_.matches` callback shorthand
8696              * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');
8697              * // => ['barney']
8698              *
8699              * // using the `_.matchesProperty` callback shorthand
8700              * _.pluck(_.filter(users, 'active', false), 'user');
8701              * // => ['fred']
8702              *
8703              * // using the `_.property` callback shorthand
8704              * _.pluck(_.filter(users, 'active'), 'user');
8705              * // => ['barney']
8706              */
8707             function filter(collection, predicate, thisArg) {
8708               var func = isArray(collection) ? arrayFilter : baseFilter;
8709               predicate = getCallback(predicate, thisArg, 3);
8710               return func(collection, predicate);
8711             }
8712
8713             /**
8714              * Iterates over elements of `collection`, returning the first element
8715              * `predicate` returns truthy for. The predicate is bound to `thisArg` and
8716              * invoked with three arguments: (value, index|key, collection).
8717              *
8718              * If a property name is provided for `predicate` the created `_.property`
8719              * style callback returns the property value of the given element.
8720              *
8721              * If a value is also provided for `thisArg` the created `_.matchesProperty`
8722              * style callback returns `true` for elements that have a matching property
8723              * value, else `false`.
8724              *
8725              * If an object is provided for `predicate` the created `_.matches` style
8726              * callback returns `true` for elements that have the properties of the given
8727              * object, else `false`.
8728              *
8729              * @static
8730              * @memberOf _
8731              * @alias detect
8732              * @category Collection
8733              * @param {Array|Object|string} collection The collection to search.
8734              * @param {Function|Object|string} [predicate=_.identity] The function invoked
8735              *  per iteration.
8736              * @param {*} [thisArg] The `this` binding of `predicate`.
8737              * @returns {*} Returns the matched element, else `undefined`.
8738              * @example
8739              *
8740              * var users = [
8741              *   { 'user': 'barney',  'age': 36, 'active': true },
8742              *   { 'user': 'fred',    'age': 40, 'active': false },
8743              *   { 'user': 'pebbles', 'age': 1,  'active': true }
8744              * ];
8745              *
8746              * _.result(_.find(users, function(chr) {
8747              *   return chr.age < 40;
8748              * }), 'user');
8749              * // => 'barney'
8750              *
8751              * // using the `_.matches` callback shorthand
8752              * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
8753              * // => 'pebbles'
8754              *
8755              * // using the `_.matchesProperty` callback shorthand
8756              * _.result(_.find(users, 'active', false), 'user');
8757              * // => 'fred'
8758              *
8759              * // using the `_.property` callback shorthand
8760              * _.result(_.find(users, 'active'), 'user');
8761              * // => 'barney'
8762              */
8763             var find = createFind(baseEach);
8764
8765             /**
8766              * This method is like `_.find` except that it iterates over elements of
8767              * `collection` from right to left.
8768              *
8769              * @static
8770              * @memberOf _
8771              * @category Collection
8772              * @param {Array|Object|string} collection The collection to search.
8773              * @param {Function|Object|string} [predicate=_.identity] The function invoked
8774              *  per iteration.
8775              * @param {*} [thisArg] The `this` binding of `predicate`.
8776              * @returns {*} Returns the matched element, else `undefined`.
8777              * @example
8778              *
8779              * _.findLast([1, 2, 3, 4], function(n) {
8780              *   return n % 2 == 1;
8781              * });
8782              * // => 3
8783              */
8784             var findLast = createFind(baseEachRight, true);
8785
8786             /**
8787              * Performs a deep comparison between each element in `collection` and the
8788              * source object, returning the first element that has equivalent property
8789              * values.
8790              *
8791              * **Note:** This method supports comparing arrays, booleans, `Date` objects,
8792              * numbers, `Object` objects, regexes, and strings. Objects are compared by
8793              * their own, not inherited, enumerable properties. For comparing a single
8794              * own or inherited property value see `_.matchesProperty`.
8795              *
8796              * @static
8797              * @memberOf _
8798              * @category Collection
8799              * @param {Array|Object|string} collection The collection to search.
8800              * @param {Object} source The object of property values to match.
8801              * @returns {*} Returns the matched element, else `undefined`.
8802              * @example
8803              *
8804              * var users = [
8805              *   { 'user': 'barney', 'age': 36, 'active': true },
8806              *   { 'user': 'fred',   'age': 40, 'active': false }
8807              * ];
8808              *
8809              * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');
8810              * // => 'barney'
8811              *
8812              * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
8813              * // => 'fred'
8814              */
8815             function findWhere(collection, source) {
8816               return find(collection, baseMatches(source));
8817             }
8818
8819             /**
8820              * Iterates over elements of `collection` invoking `iteratee` for each element.
8821              * The `iteratee` is bound to `thisArg` and invoked with three arguments:
8822              * (value, index|key, collection). Iteratee functions may exit iteration early
8823              * by explicitly returning `false`.
8824              *
8825              * **Note:** As with other "Collections" methods, objects with a "length" property
8826              * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
8827              * may be used for object iteration.
8828              *
8829              * @static
8830              * @memberOf _
8831              * @alias each
8832              * @category Collection
8833              * @param {Array|Object|string} collection The collection to iterate over.
8834              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
8835              * @param {*} [thisArg] The `this` binding of `iteratee`.
8836              * @returns {Array|Object|string} Returns `collection`.
8837              * @example
8838              *
8839              * _([1, 2]).forEach(function(n) {
8840              *   console.log(n);
8841              * }).value();
8842              * // => logs each value from left to right and returns the array
8843              *
8844              * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
8845              *   console.log(n, key);
8846              * });
8847              * // => logs each value-key pair and returns the object (iteration order is not guaranteed)
8848              */
8849             var forEach = createForEach(arrayEach, baseEach);
8850
8851             /**
8852              * This method is like `_.forEach` except that it iterates over elements of
8853              * `collection` from right to left.
8854              *
8855              * @static
8856              * @memberOf _
8857              * @alias eachRight
8858              * @category Collection
8859              * @param {Array|Object|string} collection The collection to iterate over.
8860              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
8861              * @param {*} [thisArg] The `this` binding of `iteratee`.
8862              * @returns {Array|Object|string} Returns `collection`.
8863              * @example
8864              *
8865              * _([1, 2]).forEachRight(function(n) {
8866              *   console.log(n);
8867              * }).value();
8868              * // => logs each value from right to left and returns the array
8869              */
8870             var forEachRight = createForEach(arrayEachRight, baseEachRight);
8871
8872             /**
8873              * Creates an object composed of keys generated from the results of running
8874              * each element of `collection` through `iteratee`. The corresponding value
8875              * of each key is an array of the elements responsible for generating the key.
8876              * The `iteratee` is bound to `thisArg` and invoked with three arguments:
8877              * (value, index|key, collection).
8878              *
8879              * If a property name is provided for `iteratee` the created `_.property`
8880              * style callback returns the property value of the given element.
8881              *
8882              * If a value is also provided for `thisArg` the created `_.matchesProperty`
8883              * style callback returns `true` for elements that have a matching property
8884              * value, else `false`.
8885              *
8886              * If an object is provided for `iteratee` the created `_.matches` style
8887              * callback returns `true` for elements that have the properties of the given
8888              * object, else `false`.
8889              *
8890              * @static
8891              * @memberOf _
8892              * @category Collection
8893              * @param {Array|Object|string} collection The collection to iterate over.
8894              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
8895              *  per iteration.
8896              * @param {*} [thisArg] The `this` binding of `iteratee`.
8897              * @returns {Object} Returns the composed aggregate object.
8898              * @example
8899              *
8900              * _.groupBy([4.2, 6.1, 6.4], function(n) {
8901              *   return Math.floor(n);
8902              * });
8903              * // => { '4': [4.2], '6': [6.1, 6.4] }
8904              *
8905              * _.groupBy([4.2, 6.1, 6.4], function(n) {
8906              *   return this.floor(n);
8907              * }, Math);
8908              * // => { '4': [4.2], '6': [6.1, 6.4] }
8909              *
8910              * // using the `_.property` callback shorthand
8911              * _.groupBy(['one', 'two', 'three'], 'length');
8912              * // => { '3': ['one', 'two'], '5': ['three'] }
8913              */
8914             var groupBy = createAggregator(function(result, value, key) {
8915               if (hasOwnProperty.call(result, key)) {
8916                 result[key].push(value);
8917               } else {
8918                 result[key] = [value];
8919               }
8920             });
8921
8922             /**
8923              * Checks if `value` is in `collection` using
8924              * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
8925              * for equality comparisons. If `fromIndex` is negative, it is used as the offset
8926              * from the end of `collection`.
8927              *
8928              * @static
8929              * @memberOf _
8930              * @alias contains, include
8931              * @category Collection
8932              * @param {Array|Object|string} collection The collection to search.
8933              * @param {*} target The value to search for.
8934              * @param {number} [fromIndex=0] The index to search from.
8935              * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
8936              * @returns {boolean} Returns `true` if a matching element is found, else `false`.
8937              * @example
8938              *
8939              * _.includes([1, 2, 3], 1);
8940              * // => true
8941              *
8942              * _.includes([1, 2, 3], 1, 2);
8943              * // => false
8944              *
8945              * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');
8946              * // => true
8947              *
8948              * _.includes('pebbles', 'eb');
8949              * // => true
8950              */
8951             function includes(collection, target, fromIndex, guard) {
8952               var length = collection ? getLength(collection) : 0;
8953               if (!isLength(length)) {
8954                 collection = values(collection);
8955                 length = collection.length;
8956               }
8957               if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
8958                 fromIndex = 0;
8959               } else {
8960                 fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
8961               }
8962               return (typeof collection == 'string' || !isArray(collection) && isString(collection))
8963                 ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)
8964                 : (!!length && getIndexOf(collection, target, fromIndex) > -1);
8965             }
8966
8967             /**
8968              * Creates an object composed of keys generated from the results of running
8969              * each element of `collection` through `iteratee`. The corresponding value
8970              * of each key is the last element responsible for generating the key. The
8971              * iteratee function is bound to `thisArg` and invoked with three arguments:
8972              * (value, index|key, collection).
8973              *
8974              * If a property name is provided for `iteratee` the created `_.property`
8975              * style callback returns the property value of the given element.
8976              *
8977              * If a value is also provided for `thisArg` the created `_.matchesProperty`
8978              * style callback returns `true` for elements that have a matching property
8979              * value, else `false`.
8980              *
8981              * If an object is provided for `iteratee` the created `_.matches` style
8982              * callback returns `true` for elements that have the properties of the given
8983              * object, else `false`.
8984              *
8985              * @static
8986              * @memberOf _
8987              * @category Collection
8988              * @param {Array|Object|string} collection The collection to iterate over.
8989              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
8990              *  per iteration.
8991              * @param {*} [thisArg] The `this` binding of `iteratee`.
8992              * @returns {Object} Returns the composed aggregate object.
8993              * @example
8994              *
8995              * var keyData = [
8996              *   { 'dir': 'left', 'code': 97 },
8997              *   { 'dir': 'right', 'code': 100 }
8998              * ];
8999              *
9000              * _.indexBy(keyData, 'dir');
9001              * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
9002              *
9003              * _.indexBy(keyData, function(object) {
9004              *   return String.fromCharCode(object.code);
9005              * });
9006              * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
9007              *
9008              * _.indexBy(keyData, function(object) {
9009              *   return this.fromCharCode(object.code);
9010              * }, String);
9011              * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
9012              */
9013             var indexBy = createAggregator(function(result, value, key) {
9014               result[key] = value;
9015             });
9016
9017             /**
9018              * Invokes the method at `path` of each element in `collection`, returning
9019              * an array of the results of each invoked method. Any additional arguments
9020              * are provided to each invoked method. If `methodName` is a function it is
9021              * invoked for, and `this` bound to, each element in `collection`.
9022              *
9023              * @static
9024              * @memberOf _
9025              * @category Collection
9026              * @param {Array|Object|string} collection The collection to iterate over.
9027              * @param {Array|Function|string} path The path of the method to invoke or
9028              *  the function invoked per iteration.
9029              * @param {...*} [args] The arguments to invoke the method with.
9030              * @returns {Array} Returns the array of results.
9031              * @example
9032              *
9033              * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
9034              * // => [[1, 5, 7], [1, 2, 3]]
9035              *
9036              * _.invoke([123, 456], String.prototype.split, '');
9037              * // => [['1', '2', '3'], ['4', '5', '6']]
9038              */
9039             var invoke = restParam(function(collection, path, args) {
9040               var index = -1,
9041                   isFunc = typeof path == 'function',
9042                   isProp = isKey(path),
9043                   result = isArrayLike(collection) ? Array(collection.length) : [];
9044
9045               baseEach(collection, function(value) {
9046                 var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
9047                 result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
9048               });
9049               return result;
9050             });
9051
9052             /**
9053              * Creates an array of values by running each element in `collection` through
9054              * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
9055              * arguments: (value, index|key, collection).
9056              *
9057              * If a property name is provided for `iteratee` the created `_.property`
9058              * style callback returns the property value of the given element.
9059              *
9060              * If a value is also provided for `thisArg` the created `_.matchesProperty`
9061              * style callback returns `true` for elements that have a matching property
9062              * value, else `false`.
9063              *
9064              * If an object is provided for `iteratee` the created `_.matches` style
9065              * callback returns `true` for elements that have the properties of the given
9066              * object, else `false`.
9067              *
9068              * Many lodash methods are guarded to work as iteratees for methods like
9069              * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
9070              *
9071              * The guarded methods are:
9072              * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,
9073              * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,
9074              * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,
9075              * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,
9076              * `sum`, `uniq`, and `words`
9077              *
9078              * @static
9079              * @memberOf _
9080              * @alias collect
9081              * @category Collection
9082              * @param {Array|Object|string} collection The collection to iterate over.
9083              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
9084              *  per iteration.
9085              * @param {*} [thisArg] The `this` binding of `iteratee`.
9086              * @returns {Array} Returns the new mapped array.
9087              * @example
9088              *
9089              * function timesThree(n) {
9090              *   return n * 3;
9091              * }
9092              *
9093              * _.map([1, 2], timesThree);
9094              * // => [3, 6]
9095              *
9096              * _.map({ 'a': 1, 'b': 2 }, timesThree);
9097              * // => [3, 6] (iteration order is not guaranteed)
9098              *
9099              * var users = [
9100              *   { 'user': 'barney' },
9101              *   { 'user': 'fred' }
9102              * ];
9103              *
9104              * // using the `_.property` callback shorthand
9105              * _.map(users, 'user');
9106              * // => ['barney', 'fred']
9107              */
9108             function map(collection, iteratee, thisArg) {
9109               var func = isArray(collection) ? arrayMap : baseMap;
9110               iteratee = getCallback(iteratee, thisArg, 3);
9111               return func(collection, iteratee);
9112             }
9113
9114             /**
9115              * Creates an array of elements split into two groups, the first of which
9116              * contains elements `predicate` returns truthy for, while the second of which
9117              * contains elements `predicate` returns falsey for. The predicate is bound
9118              * to `thisArg` and invoked with three arguments: (value, index|key, collection).
9119              *
9120              * If a property name is provided for `predicate` the created `_.property`
9121              * style callback returns the property value of the given element.
9122              *
9123              * If a value is also provided for `thisArg` the created `_.matchesProperty`
9124              * style callback returns `true` for elements that have a matching property
9125              * value, else `false`.
9126              *
9127              * If an object is provided for `predicate` the created `_.matches` style
9128              * callback returns `true` for elements that have the properties of the given
9129              * object, else `false`.
9130              *
9131              * @static
9132              * @memberOf _
9133              * @category Collection
9134              * @param {Array|Object|string} collection The collection to iterate over.
9135              * @param {Function|Object|string} [predicate=_.identity] The function invoked
9136              *  per iteration.
9137              * @param {*} [thisArg] The `this` binding of `predicate`.
9138              * @returns {Array} Returns the array of grouped elements.
9139              * @example
9140              *
9141              * _.partition([1, 2, 3], function(n) {
9142              *   return n % 2;
9143              * });
9144              * // => [[1, 3], [2]]
9145              *
9146              * _.partition([1.2, 2.3, 3.4], function(n) {
9147              *   return this.floor(n) % 2;
9148              * }, Math);
9149              * // => [[1.2, 3.4], [2.3]]
9150              *
9151              * var users = [
9152              *   { 'user': 'barney',  'age': 36, 'active': false },
9153              *   { 'user': 'fred',    'age': 40, 'active': true },
9154              *   { 'user': 'pebbles', 'age': 1,  'active': false }
9155              * ];
9156              *
9157              * var mapper = function(array) {
9158              *   return _.pluck(array, 'user');
9159              * };
9160              *
9161              * // using the `_.matches` callback shorthand
9162              * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);
9163              * // => [['pebbles'], ['barney', 'fred']]
9164              *
9165              * // using the `_.matchesProperty` callback shorthand
9166              * _.map(_.partition(users, 'active', false), mapper);
9167              * // => [['barney', 'pebbles'], ['fred']]
9168              *
9169              * // using the `_.property` callback shorthand
9170              * _.map(_.partition(users, 'active'), mapper);
9171              * // => [['fred'], ['barney', 'pebbles']]
9172              */
9173             var partition = createAggregator(function(result, value, key) {
9174               result[key ? 0 : 1].push(value);
9175             }, function() { return [[], []]; });
9176
9177             /**
9178              * Gets the property value of `path` from all elements in `collection`.
9179              *
9180              * @static
9181              * @memberOf _
9182              * @category Collection
9183              * @param {Array|Object|string} collection The collection to iterate over.
9184              * @param {Array|string} path The path of the property to pluck.
9185              * @returns {Array} Returns the property values.
9186              * @example
9187              *
9188              * var users = [
9189              *   { 'user': 'barney', 'age': 36 },
9190              *   { 'user': 'fred',   'age': 40 }
9191              * ];
9192              *
9193              * _.pluck(users, 'user');
9194              * // => ['barney', 'fred']
9195              *
9196              * var userIndex = _.indexBy(users, 'user');
9197              * _.pluck(userIndex, 'age');
9198              * // => [36, 40] (iteration order is not guaranteed)
9199              */
9200             function pluck(collection, path) {
9201               return map(collection, property(path));
9202             }
9203
9204             /**
9205              * Reduces `collection` to a value which is the accumulated result of running
9206              * each element in `collection` through `iteratee`, where each successive
9207              * invocation is supplied the return value of the previous. If `accumulator`
9208              * is not provided the first element of `collection` is used as the initial
9209              * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
9210              * (accumulator, value, index|key, collection).
9211              *
9212              * Many lodash methods are guarded to work as iteratees for methods like
9213              * `_.reduce`, `_.reduceRight`, and `_.transform`.
9214              *
9215              * The guarded methods are:
9216              * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,
9217              * and `sortByOrder`
9218              *
9219              * @static
9220              * @memberOf _
9221              * @alias foldl, inject
9222              * @category Collection
9223              * @param {Array|Object|string} collection The collection to iterate over.
9224              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
9225              * @param {*} [accumulator] The initial value.
9226              * @param {*} [thisArg] The `this` binding of `iteratee`.
9227              * @returns {*} Returns the accumulated value.
9228              * @example
9229              *
9230              * _.reduce([1, 2], function(total, n) {
9231              *   return total + n;
9232              * });
9233              * // => 3
9234              *
9235              * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
9236              *   result[key] = n * 3;
9237              *   return result;
9238              * }, {});
9239              * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
9240              */
9241             var reduce = createReduce(arrayReduce, baseEach);
9242
9243             /**
9244              * This method is like `_.reduce` except that it iterates over elements of
9245              * `collection` from right to left.
9246              *
9247              * @static
9248              * @memberOf _
9249              * @alias foldr
9250              * @category Collection
9251              * @param {Array|Object|string} collection The collection to iterate over.
9252              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
9253              * @param {*} [accumulator] The initial value.
9254              * @param {*} [thisArg] The `this` binding of `iteratee`.
9255              * @returns {*} Returns the accumulated value.
9256              * @example
9257              *
9258              * var array = [[0, 1], [2, 3], [4, 5]];
9259              *
9260              * _.reduceRight(array, function(flattened, other) {
9261              *   return flattened.concat(other);
9262              * }, []);
9263              * // => [4, 5, 2, 3, 0, 1]
9264              */
9265             var reduceRight = createReduce(arrayReduceRight, baseEachRight);
9266
9267             /**
9268              * The opposite of `_.filter`; this method returns the elements of `collection`
9269              * that `predicate` does **not** return truthy for.
9270              *
9271              * @static
9272              * @memberOf _
9273              * @category Collection
9274              * @param {Array|Object|string} collection The collection to iterate over.
9275              * @param {Function|Object|string} [predicate=_.identity] The function invoked
9276              *  per iteration.
9277              * @param {*} [thisArg] The `this` binding of `predicate`.
9278              * @returns {Array} Returns the new filtered array.
9279              * @example
9280              *
9281              * _.reject([1, 2, 3, 4], function(n) {
9282              *   return n % 2 == 0;
9283              * });
9284              * // => [1, 3]
9285              *
9286              * var users = [
9287              *   { 'user': 'barney', 'age': 36, 'active': false },
9288              *   { 'user': 'fred',   'age': 40, 'active': true }
9289              * ];
9290              *
9291              * // using the `_.matches` callback shorthand
9292              * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');
9293              * // => ['barney']
9294              *
9295              * // using the `_.matchesProperty` callback shorthand
9296              * _.pluck(_.reject(users, 'active', false), 'user');
9297              * // => ['fred']
9298              *
9299              * // using the `_.property` callback shorthand
9300              * _.pluck(_.reject(users, 'active'), 'user');
9301              * // => ['barney']
9302              */
9303             function reject(collection, predicate, thisArg) {
9304               var func = isArray(collection) ? arrayFilter : baseFilter;
9305               predicate = getCallback(predicate, thisArg, 3);
9306               return func(collection, function(value, index, collection) {
9307                 return !predicate(value, index, collection);
9308               });
9309             }
9310
9311             /**
9312              * Gets a random element or `n` random elements from a collection.
9313              *
9314              * @static
9315              * @memberOf _
9316              * @category Collection
9317              * @param {Array|Object|string} collection The collection to sample.
9318              * @param {number} [n] The number of elements to sample.
9319              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
9320              * @returns {*} Returns the random sample(s).
9321              * @example
9322              *
9323              * _.sample([1, 2, 3, 4]);
9324              * // => 2
9325              *
9326              * _.sample([1, 2, 3, 4], 2);
9327              * // => [3, 1]
9328              */
9329             function sample(collection, n, guard) {
9330               if (guard ? isIterateeCall(collection, n, guard) : n == null) {
9331                 collection = toIterable(collection);
9332                 var length = collection.length;
9333                 return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
9334               }
9335               var index = -1,
9336                   result = toArray(collection),
9337                   length = result.length,
9338                   lastIndex = length - 1;
9339
9340               n = nativeMin(n < 0 ? 0 : (+n || 0), length);
9341               while (++index < n) {
9342                 var rand = baseRandom(index, lastIndex),
9343                     value = result[rand];
9344
9345                 result[rand] = result[index];
9346                 result[index] = value;
9347               }
9348               result.length = n;
9349               return result;
9350             }
9351
9352             /**
9353              * Creates an array of shuffled values, using a version of the
9354              * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
9355              *
9356              * @static
9357              * @memberOf _
9358              * @category Collection
9359              * @param {Array|Object|string} collection The collection to shuffle.
9360              * @returns {Array} Returns the new shuffled array.
9361              * @example
9362              *
9363              * _.shuffle([1, 2, 3, 4]);
9364              * // => [4, 1, 3, 2]
9365              */
9366             function shuffle(collection) {
9367               return sample(collection, POSITIVE_INFINITY);
9368             }
9369
9370             /**
9371              * Gets the size of `collection` by returning its length for array-like
9372              * values or the number of own enumerable properties for objects.
9373              *
9374              * @static
9375              * @memberOf _
9376              * @category Collection
9377              * @param {Array|Object|string} collection The collection to inspect.
9378              * @returns {number} Returns the size of `collection`.
9379              * @example
9380              *
9381              * _.size([1, 2, 3]);
9382              * // => 3
9383              *
9384              * _.size({ 'a': 1, 'b': 2 });
9385              * // => 2
9386              *
9387              * _.size('pebbles');
9388              * // => 7
9389              */
9390             function size(collection) {
9391               var length = collection ? getLength(collection) : 0;
9392               return isLength(length) ? length : keys(collection).length;
9393             }
9394
9395             /**
9396              * Checks if `predicate` returns truthy for **any** element of `collection`.
9397              * The function returns as soon as it finds a passing value and does not iterate
9398              * over the entire collection. The predicate is bound to `thisArg` and invoked
9399              * with three arguments: (value, index|key, collection).
9400              *
9401              * If a property name is provided for `predicate` the created `_.property`
9402              * style callback returns the property value of the given element.
9403              *
9404              * If a value is also provided for `thisArg` the created `_.matchesProperty`
9405              * style callback returns `true` for elements that have a matching property
9406              * value, else `false`.
9407              *
9408              * If an object is provided for `predicate` the created `_.matches` style
9409              * callback returns `true` for elements that have the properties of the given
9410              * object, else `false`.
9411              *
9412              * @static
9413              * @memberOf _
9414              * @alias any
9415              * @category Collection
9416              * @param {Array|Object|string} collection The collection to iterate over.
9417              * @param {Function|Object|string} [predicate=_.identity] The function invoked
9418              *  per iteration.
9419              * @param {*} [thisArg] The `this` binding of `predicate`.
9420              * @returns {boolean} Returns `true` if any element passes the predicate check,
9421              *  else `false`.
9422              * @example
9423              *
9424              * _.some([null, 0, 'yes', false], Boolean);
9425              * // => true
9426              *
9427              * var users = [
9428              *   { 'user': 'barney', 'active': true },
9429              *   { 'user': 'fred',   'active': false }
9430              * ];
9431              *
9432              * // using the `_.matches` callback shorthand
9433              * _.some(users, { 'user': 'barney', 'active': false });
9434              * // => false
9435              *
9436              * // using the `_.matchesProperty` callback shorthand
9437              * _.some(users, 'active', false);
9438              * // => true
9439              *
9440              * // using the `_.property` callback shorthand
9441              * _.some(users, 'active');
9442              * // => true
9443              */
9444             function some(collection, predicate, thisArg) {
9445               var func = isArray(collection) ? arraySome : baseSome;
9446               if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
9447                 predicate = undefined;
9448               }
9449               if (typeof predicate != 'function' || thisArg !== undefined) {
9450                 predicate = getCallback(predicate, thisArg, 3);
9451               }
9452               return func(collection, predicate);
9453             }
9454
9455             /**
9456              * Creates an array of elements, sorted in ascending order by the results of
9457              * running each element in a collection through `iteratee`. This method performs
9458              * a stable sort, that is, it preserves the original sort order of equal elements.
9459              * The `iteratee` is bound to `thisArg` and invoked with three arguments:
9460              * (value, index|key, collection).
9461              *
9462              * If a property name is provided for `iteratee` the created `_.property`
9463              * style callback returns the property value of the given element.
9464              *
9465              * If a value is also provided for `thisArg` the created `_.matchesProperty`
9466              * style callback returns `true` for elements that have a matching property
9467              * value, else `false`.
9468              *
9469              * If an object is provided for `iteratee` the created `_.matches` style
9470              * callback returns `true` for elements that have the properties of the given
9471              * object, else `false`.
9472              *
9473              * @static
9474              * @memberOf _
9475              * @category Collection
9476              * @param {Array|Object|string} collection The collection to iterate over.
9477              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
9478              *  per iteration.
9479              * @param {*} [thisArg] The `this` binding of `iteratee`.
9480              * @returns {Array} Returns the new sorted array.
9481              * @example
9482              *
9483              * _.sortBy([1, 2, 3], function(n) {
9484              *   return Math.sin(n);
9485              * });
9486              * // => [3, 1, 2]
9487              *
9488              * _.sortBy([1, 2, 3], function(n) {
9489              *   return this.sin(n);
9490              * }, Math);
9491              * // => [3, 1, 2]
9492              *
9493              * var users = [
9494              *   { 'user': 'fred' },
9495              *   { 'user': 'pebbles' },
9496              *   { 'user': 'barney' }
9497              * ];
9498              *
9499              * // using the `_.property` callback shorthand
9500              * _.pluck(_.sortBy(users, 'user'), 'user');
9501              * // => ['barney', 'fred', 'pebbles']
9502              */
9503             function sortBy(collection, iteratee, thisArg) {
9504               if (collection == null) {
9505                 return [];
9506               }
9507               if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
9508                 iteratee = undefined;
9509               }
9510               var index = -1;
9511               iteratee = getCallback(iteratee, thisArg, 3);
9512
9513               var result = baseMap(collection, function(value, key, collection) {
9514                 return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };
9515               });
9516               return baseSortBy(result, compareAscending);
9517             }
9518
9519             /**
9520              * This method is like `_.sortBy` except that it can sort by multiple iteratees
9521              * or property names.
9522              *
9523              * If a property name is provided for an iteratee the created `_.property`
9524              * style callback returns the property value of the given element.
9525              *
9526              * If an object is provided for an iteratee the created `_.matches` style
9527              * callback returns `true` for elements that have the properties of the given
9528              * object, else `false`.
9529              *
9530              * @static
9531              * @memberOf _
9532              * @category Collection
9533              * @param {Array|Object|string} collection The collection to iterate over.
9534              * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees
9535              *  The iteratees to sort by, specified as individual values or arrays of values.
9536              * @returns {Array} Returns the new sorted array.
9537              * @example
9538              *
9539              * var users = [
9540              *   { 'user': 'fred',   'age': 48 },
9541              *   { 'user': 'barney', 'age': 36 },
9542              *   { 'user': 'fred',   'age': 42 },
9543              *   { 'user': 'barney', 'age': 34 }
9544              * ];
9545              *
9546              * _.map(_.sortByAll(users, ['user', 'age']), _.values);
9547              * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
9548              *
9549              * _.map(_.sortByAll(users, 'user', function(chr) {
9550              *   return Math.floor(chr.age / 10);
9551              * }), _.values);
9552              * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
9553              */
9554             var sortByAll = restParam(function(collection, iteratees) {
9555               if (collection == null) {
9556                 return [];
9557               }
9558               var guard = iteratees[2];
9559               if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {
9560                 iteratees.length = 1;
9561               }
9562               return baseSortByOrder(collection, baseFlatten(iteratees), []);
9563             });
9564
9565             /**
9566              * This method is like `_.sortByAll` except that it allows specifying the
9567              * sort orders of the iteratees to sort by. If `orders` is unspecified, all
9568              * values are sorted in ascending order. Otherwise, a value is sorted in
9569              * ascending order if its corresponding order is "asc", and descending if "desc".
9570              *
9571              * If a property name is provided for an iteratee the created `_.property`
9572              * style callback returns the property value of the given element.
9573              *
9574              * If an object is provided for an iteratee the created `_.matches` style
9575              * callback returns `true` for elements that have the properties of the given
9576              * object, else `false`.
9577              *
9578              * @static
9579              * @memberOf _
9580              * @category Collection
9581              * @param {Array|Object|string} collection The collection to iterate over.
9582              * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
9583              * @param {boolean[]} [orders] The sort orders of `iteratees`.
9584              * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
9585              * @returns {Array} Returns the new sorted array.
9586              * @example
9587              *
9588              * var users = [
9589              *   { 'user': 'fred',   'age': 48 },
9590              *   { 'user': 'barney', 'age': 34 },
9591              *   { 'user': 'fred',   'age': 42 },
9592              *   { 'user': 'barney', 'age': 36 }
9593              * ];
9594              *
9595              * // sort by `user` in ascending order and by `age` in descending order
9596              * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
9597              * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
9598              */
9599             function sortByOrder(collection, iteratees, orders, guard) {
9600               if (collection == null) {
9601                 return [];
9602               }
9603               if (guard && isIterateeCall(iteratees, orders, guard)) {
9604                 orders = undefined;
9605               }
9606               if (!isArray(iteratees)) {
9607                 iteratees = iteratees == null ? [] : [iteratees];
9608               }
9609               if (!isArray(orders)) {
9610                 orders = orders == null ? [] : [orders];
9611               }
9612               return baseSortByOrder(collection, iteratees, orders);
9613             }
9614
9615             /**
9616              * Performs a deep comparison between each element in `collection` and the
9617              * source object, returning an array of all elements that have equivalent
9618              * property values.
9619              *
9620              * **Note:** This method supports comparing arrays, booleans, `Date` objects,
9621              * numbers, `Object` objects, regexes, and strings. Objects are compared by
9622              * their own, not inherited, enumerable properties. For comparing a single
9623              * own or inherited property value see `_.matchesProperty`.
9624              *
9625              * @static
9626              * @memberOf _
9627              * @category Collection
9628              * @param {Array|Object|string} collection The collection to search.
9629              * @param {Object} source The object of property values to match.
9630              * @returns {Array} Returns the new filtered array.
9631              * @example
9632              *
9633              * var users = [
9634              *   { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },
9635              *   { 'user': 'fred',   'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }
9636              * ];
9637              *
9638              * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');
9639              * // => ['barney']
9640              *
9641              * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');
9642              * // => ['fred']
9643              */
9644             function where(collection, source) {
9645               return filter(collection, baseMatches(source));
9646             }
9647
9648             /*------------------------------------------------------------------------*/
9649
9650             /**
9651              * Gets the number of milliseconds that have elapsed since the Unix epoch
9652              * (1 January 1970 00:00:00 UTC).
9653              *
9654              * @static
9655              * @memberOf _
9656              * @category Date
9657              * @example
9658              *
9659              * _.defer(function(stamp) {
9660              *   console.log(_.now() - stamp);
9661              * }, _.now());
9662              * // => logs the number of milliseconds it took for the deferred function to be invoked
9663              */
9664             var now = nativeNow || function() {
9665               return new Date().getTime();
9666             };
9667
9668             /*------------------------------------------------------------------------*/
9669
9670             /**
9671              * The opposite of `_.before`; this method creates a function that invokes
9672              * `func` once it is called `n` or more times.
9673              *
9674              * @static
9675              * @memberOf _
9676              * @category Function
9677              * @param {number} n The number of calls before `func` is invoked.
9678              * @param {Function} func The function to restrict.
9679              * @returns {Function} Returns the new restricted function.
9680              * @example
9681              *
9682              * var saves = ['profile', 'settings'];
9683              *
9684              * var done = _.after(saves.length, function() {
9685              *   console.log('done saving!');
9686              * });
9687              *
9688              * _.forEach(saves, function(type) {
9689              *   asyncSave({ 'type': type, 'complete': done });
9690              * });
9691              * // => logs 'done saving!' after the two async saves have completed
9692              */
9693             function after(n, func) {
9694               if (typeof func != 'function') {
9695                 if (typeof n == 'function') {
9696                   var temp = n;
9697                   n = func;
9698                   func = temp;
9699                 } else {
9700                   throw new TypeError(FUNC_ERROR_TEXT);
9701                 }
9702               }
9703               n = nativeIsFinite(n = +n) ? n : 0;
9704               return function() {
9705                 if (--n < 1) {
9706                   return func.apply(this, arguments);
9707                 }
9708               };
9709             }
9710
9711             /**
9712              * Creates a function that accepts up to `n` arguments ignoring any
9713              * additional arguments.
9714              *
9715              * @static
9716              * @memberOf _
9717              * @category Function
9718              * @param {Function} func The function to cap arguments for.
9719              * @param {number} [n=func.length] The arity cap.
9720              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
9721              * @returns {Function} Returns the new function.
9722              * @example
9723              *
9724              * _.map(['6', '8', '10'], _.ary(parseInt, 1));
9725              * // => [6, 8, 10]
9726              */
9727             function ary(func, n, guard) {
9728               if (guard && isIterateeCall(func, n, guard)) {
9729                 n = undefined;
9730               }
9731               n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);
9732               return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
9733             }
9734
9735             /**
9736              * Creates a function that invokes `func`, with the `this` binding and arguments
9737              * of the created function, while it is called less than `n` times. Subsequent
9738              * calls to the created function return the result of the last `func` invocation.
9739              *
9740              * @static
9741              * @memberOf _
9742              * @category Function
9743              * @param {number} n The number of calls at which `func` is no longer invoked.
9744              * @param {Function} func The function to restrict.
9745              * @returns {Function} Returns the new restricted function.
9746              * @example
9747              *
9748              * jQuery('#add').on('click', _.before(5, addContactToList));
9749              * // => allows adding up to 4 contacts to the list
9750              */
9751             function before(n, func) {
9752               var result;
9753               if (typeof func != 'function') {
9754                 if (typeof n == 'function') {
9755                   var temp = n;
9756                   n = func;
9757                   func = temp;
9758                 } else {
9759                   throw new TypeError(FUNC_ERROR_TEXT);
9760                 }
9761               }
9762               return function() {
9763                 if (--n > 0) {
9764                   result = func.apply(this, arguments);
9765                 }
9766                 if (n <= 1) {
9767                   func = undefined;
9768                 }
9769                 return result;
9770               };
9771             }
9772
9773             /**
9774              * Creates a function that invokes `func` with the `this` binding of `thisArg`
9775              * and prepends any additional `_.bind` arguments to those provided to the
9776              * bound function.
9777              *
9778              * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
9779              * may be used as a placeholder for partially applied arguments.
9780              *
9781              * **Note:** Unlike native `Function#bind` this method does not set the "length"
9782              * property of bound functions.
9783              *
9784              * @static
9785              * @memberOf _
9786              * @category Function
9787              * @param {Function} func The function to bind.
9788              * @param {*} thisArg The `this` binding of `func`.
9789              * @param {...*} [partials] The arguments to be partially applied.
9790              * @returns {Function} Returns the new bound function.
9791              * @example
9792              *
9793              * var greet = function(greeting, punctuation) {
9794              *   return greeting + ' ' + this.user + punctuation;
9795              * };
9796              *
9797              * var object = { 'user': 'fred' };
9798              *
9799              * var bound = _.bind(greet, object, 'hi');
9800              * bound('!');
9801              * // => 'hi fred!'
9802              *
9803              * // using placeholders
9804              * var bound = _.bind(greet, object, _, '!');
9805              * bound('hi');
9806              * // => 'hi fred!'
9807              */
9808             var bind = restParam(function(func, thisArg, partials) {
9809               var bitmask = BIND_FLAG;
9810               if (partials.length) {
9811                 var holders = replaceHolders(partials, bind.placeholder);
9812                 bitmask |= PARTIAL_FLAG;
9813               }
9814               return createWrapper(func, bitmask, thisArg, partials, holders);
9815             });
9816
9817             /**
9818              * Binds methods of an object to the object itself, overwriting the existing
9819              * method. Method names may be specified as individual arguments or as arrays
9820              * of method names. If no method names are provided all enumerable function
9821              * properties, own and inherited, of `object` are bound.
9822              *
9823              * **Note:** This method does not set the "length" property of bound functions.
9824              *
9825              * @static
9826              * @memberOf _
9827              * @category Function
9828              * @param {Object} object The object to bind and assign the bound methods to.
9829              * @param {...(string|string[])} [methodNames] The object method names to bind,
9830              *  specified as individual method names or arrays of method names.
9831              * @returns {Object} Returns `object`.
9832              * @example
9833              *
9834              * var view = {
9835              *   'label': 'docs',
9836              *   'onClick': function() {
9837              *     console.log('clicked ' + this.label);
9838              *   }
9839              * };
9840              *
9841              * _.bindAll(view);
9842              * jQuery('#docs').on('click', view.onClick);
9843              * // => logs 'clicked docs' when the element is clicked
9844              */
9845             var bindAll = restParam(function(object, methodNames) {
9846               methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
9847
9848               var index = -1,
9849                   length = methodNames.length;
9850
9851               while (++index < length) {
9852                 var key = methodNames[index];
9853                 object[key] = createWrapper(object[key], BIND_FLAG, object);
9854               }
9855               return object;
9856             });
9857
9858             /**
9859              * Creates a function that invokes the method at `object[key]` and prepends
9860              * any additional `_.bindKey` arguments to those provided to the bound function.
9861              *
9862              * This method differs from `_.bind` by allowing bound functions to reference
9863              * methods that may be redefined or don't yet exist.
9864              * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
9865              * for more details.
9866              *
9867              * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
9868              * builds, may be used as a placeholder for partially applied arguments.
9869              *
9870              * @static
9871              * @memberOf _
9872              * @category Function
9873              * @param {Object} object The object the method belongs to.
9874              * @param {string} key The key of the method.
9875              * @param {...*} [partials] The arguments to be partially applied.
9876              * @returns {Function} Returns the new bound function.
9877              * @example
9878              *
9879              * var object = {
9880              *   'user': 'fred',
9881              *   'greet': function(greeting, punctuation) {
9882              *     return greeting + ' ' + this.user + punctuation;
9883              *   }
9884              * };
9885              *
9886              * var bound = _.bindKey(object, 'greet', 'hi');
9887              * bound('!');
9888              * // => 'hi fred!'
9889              *
9890              * object.greet = function(greeting, punctuation) {
9891              *   return greeting + 'ya ' + this.user + punctuation;
9892              * };
9893              *
9894              * bound('!');
9895              * // => 'hiya fred!'
9896              *
9897              * // using placeholders
9898              * var bound = _.bindKey(object, 'greet', _, '!');
9899              * bound('hi');
9900              * // => 'hiya fred!'
9901              */
9902             var bindKey = restParam(function(object, key, partials) {
9903               var bitmask = BIND_FLAG | BIND_KEY_FLAG;
9904               if (partials.length) {
9905                 var holders = replaceHolders(partials, bindKey.placeholder);
9906                 bitmask |= PARTIAL_FLAG;
9907               }
9908               return createWrapper(key, bitmask, object, partials, holders);
9909             });
9910
9911             /**
9912              * Creates a function that accepts one or more arguments of `func` that when
9913              * called either invokes `func` returning its result, if all `func` arguments
9914              * have been provided, or returns a function that accepts one or more of the
9915              * remaining `func` arguments, and so on. The arity of `func` may be specified
9916              * if `func.length` is not sufficient.
9917              *
9918              * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
9919              * may be used as a placeholder for provided arguments.
9920              *
9921              * **Note:** This method does not set the "length" property of curried functions.
9922              *
9923              * @static
9924              * @memberOf _
9925              * @category Function
9926              * @param {Function} func The function to curry.
9927              * @param {number} [arity=func.length] The arity of `func`.
9928              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
9929              * @returns {Function} Returns the new curried function.
9930              * @example
9931              *
9932              * var abc = function(a, b, c) {
9933              *   return [a, b, c];
9934              * };
9935              *
9936              * var curried = _.curry(abc);
9937              *
9938              * curried(1)(2)(3);
9939              * // => [1, 2, 3]
9940              *
9941              * curried(1, 2)(3);
9942              * // => [1, 2, 3]
9943              *
9944              * curried(1, 2, 3);
9945              * // => [1, 2, 3]
9946              *
9947              * // using placeholders
9948              * curried(1)(_, 3)(2);
9949              * // => [1, 2, 3]
9950              */
9951             var curry = createCurry(CURRY_FLAG);
9952
9953             /**
9954              * This method is like `_.curry` except that arguments are applied to `func`
9955              * in the manner of `_.partialRight` instead of `_.partial`.
9956              *
9957              * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
9958              * builds, may be used as a placeholder for provided arguments.
9959              *
9960              * **Note:** This method does not set the "length" property of curried functions.
9961              *
9962              * @static
9963              * @memberOf _
9964              * @category Function
9965              * @param {Function} func The function to curry.
9966              * @param {number} [arity=func.length] The arity of `func`.
9967              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
9968              * @returns {Function} Returns the new curried function.
9969              * @example
9970              *
9971              * var abc = function(a, b, c) {
9972              *   return [a, b, c];
9973              * };
9974              *
9975              * var curried = _.curryRight(abc);
9976              *
9977              * curried(3)(2)(1);
9978              * // => [1, 2, 3]
9979              *
9980              * curried(2, 3)(1);
9981              * // => [1, 2, 3]
9982              *
9983              * curried(1, 2, 3);
9984              * // => [1, 2, 3]
9985              *
9986              * // using placeholders
9987              * curried(3)(1, _)(2);
9988              * // => [1, 2, 3]
9989              */
9990             var curryRight = createCurry(CURRY_RIGHT_FLAG);
9991
9992             /**
9993              * Creates a debounced function that delays invoking `func` until after `wait`
9994              * milliseconds have elapsed since the last time the debounced function was
9995              * invoked. The debounced function comes with a `cancel` method to cancel
9996              * delayed invocations. Provide an options object to indicate that `func`
9997              * should be invoked on the leading and/or trailing edge of the `wait` timeout.
9998              * Subsequent calls to the debounced function return the result of the last
9999              * `func` invocation.
10000              *
10001              * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
10002              * on the trailing edge of the timeout only if the the debounced function is
10003              * invoked more than once during the `wait` timeout.
10004              *
10005              * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
10006              * for details over the differences between `_.debounce` and `_.throttle`.
10007              *
10008              * @static
10009              * @memberOf _
10010              * @category Function
10011              * @param {Function} func The function to debounce.
10012              * @param {number} [wait=0] The number of milliseconds to delay.
10013              * @param {Object} [options] The options object.
10014              * @param {boolean} [options.leading=false] Specify invoking on the leading
10015              *  edge of the timeout.
10016              * @param {number} [options.maxWait] The maximum time `func` is allowed to be
10017              *  delayed before it is invoked.
10018              * @param {boolean} [options.trailing=true] Specify invoking on the trailing
10019              *  edge of the timeout.
10020              * @returns {Function} Returns the new debounced function.
10021              * @example
10022              *
10023              * // avoid costly calculations while the window size is in flux
10024              * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
10025              *
10026              * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
10027              * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
10028              *   'leading': true,
10029              *   'trailing': false
10030              * }));
10031              *
10032              * // ensure `batchLog` is invoked once after 1 second of debounced calls
10033              * var source = new EventSource('/stream');
10034              * jQuery(source).on('message', _.debounce(batchLog, 250, {
10035              *   'maxWait': 1000
10036              * }));
10037              *
10038              * // cancel a debounced call
10039              * var todoChanges = _.debounce(batchLog, 1000);
10040              * Object.observe(models.todo, todoChanges);
10041              *
10042              * Object.observe(models, function(changes) {
10043              *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
10044              *     todoChanges.cancel();
10045              *   }
10046              * }, ['delete']);
10047              *
10048              * // ...at some point `models.todo` is changed
10049              * models.todo.completed = true;
10050              *
10051              * // ...before 1 second has passed `models.todo` is deleted
10052              * // which cancels the debounced `todoChanges` call
10053              * delete models.todo;
10054              */
10055             function debounce(func, wait, options) {
10056               var args,
10057                   maxTimeoutId,
10058                   result,
10059                   stamp,
10060                   thisArg,
10061                   timeoutId,
10062                   trailingCall,
10063                   lastCalled = 0,
10064                   maxWait = false,
10065                   trailing = true;
10066
10067               if (typeof func != 'function') {
10068                 throw new TypeError(FUNC_ERROR_TEXT);
10069               }
10070               wait = wait < 0 ? 0 : (+wait || 0);
10071               if (options === true) {
10072                 var leading = true;
10073                 trailing = false;
10074               } else if (isObject(options)) {
10075                 leading = !!options.leading;
10076                 maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
10077                 trailing = 'trailing' in options ? !!options.trailing : trailing;
10078               }
10079
10080               function cancel() {
10081                 if (timeoutId) {
10082                   clearTimeout(timeoutId);
10083                 }
10084                 if (maxTimeoutId) {
10085                   clearTimeout(maxTimeoutId);
10086                 }
10087                 lastCalled = 0;
10088                 maxTimeoutId = timeoutId = trailingCall = undefined;
10089               }
10090
10091               function complete(isCalled, id) {
10092                 if (id) {
10093                   clearTimeout(id);
10094                 }
10095                 maxTimeoutId = timeoutId = trailingCall = undefined;
10096                 if (isCalled) {
10097                   lastCalled = now();
10098                   result = func.apply(thisArg, args);
10099                   if (!timeoutId && !maxTimeoutId) {
10100                     args = thisArg = undefined;
10101                   }
10102                 }
10103               }
10104
10105               function delayed() {
10106                 var remaining = wait - (now() - stamp);
10107                 if (remaining <= 0 || remaining > wait) {
10108                   complete(trailingCall, maxTimeoutId);
10109                 } else {
10110                   timeoutId = setTimeout(delayed, remaining);
10111                 }
10112               }
10113
10114               function maxDelayed() {
10115                 complete(trailing, timeoutId);
10116               }
10117
10118               function debounced() {
10119                 args = arguments;
10120                 stamp = now();
10121                 thisArg = this;
10122                 trailingCall = trailing && (timeoutId || !leading);
10123
10124                 if (maxWait === false) {
10125                   var leadingCall = leading && !timeoutId;
10126                 } else {
10127                   if (!maxTimeoutId && !leading) {
10128                     lastCalled = stamp;
10129                   }
10130                   var remaining = maxWait - (stamp - lastCalled),
10131                       isCalled = remaining <= 0 || remaining > maxWait;
10132
10133                   if (isCalled) {
10134                     if (maxTimeoutId) {
10135                       maxTimeoutId = clearTimeout(maxTimeoutId);
10136                     }
10137                     lastCalled = stamp;
10138                     result = func.apply(thisArg, args);
10139                   }
10140                   else if (!maxTimeoutId) {
10141                     maxTimeoutId = setTimeout(maxDelayed, remaining);
10142                   }
10143                 }
10144                 if (isCalled && timeoutId) {
10145                   timeoutId = clearTimeout(timeoutId);
10146                 }
10147                 else if (!timeoutId && wait !== maxWait) {
10148                   timeoutId = setTimeout(delayed, wait);
10149                 }
10150                 if (leadingCall) {
10151                   isCalled = true;
10152                   result = func.apply(thisArg, args);
10153                 }
10154                 if (isCalled && !timeoutId && !maxTimeoutId) {
10155                   args = thisArg = undefined;
10156                 }
10157                 return result;
10158               }
10159               debounced.cancel = cancel;
10160               return debounced;
10161             }
10162
10163             /**
10164              * Defers invoking the `func` until the current call stack has cleared. Any
10165              * additional arguments are provided to `func` when it is invoked.
10166              *
10167              * @static
10168              * @memberOf _
10169              * @category Function
10170              * @param {Function} func The function to defer.
10171              * @param {...*} [args] The arguments to invoke the function with.
10172              * @returns {number} Returns the timer id.
10173              * @example
10174              *
10175              * _.defer(function(text) {
10176              *   console.log(text);
10177              * }, 'deferred');
10178              * // logs 'deferred' after one or more milliseconds
10179              */
10180             var defer = restParam(function(func, args) {
10181               return baseDelay(func, 1, args);
10182             });
10183
10184             /**
10185              * Invokes `func` after `wait` milliseconds. Any additional arguments are
10186              * provided to `func` when it is invoked.
10187              *
10188              * @static
10189              * @memberOf _
10190              * @category Function
10191              * @param {Function} func The function to delay.
10192              * @param {number} wait The number of milliseconds to delay invocation.
10193              * @param {...*} [args] The arguments to invoke the function with.
10194              * @returns {number} Returns the timer id.
10195              * @example
10196              *
10197              * _.delay(function(text) {
10198              *   console.log(text);
10199              * }, 1000, 'later');
10200              * // => logs 'later' after one second
10201              */
10202             var delay = restParam(function(func, wait, args) {
10203               return baseDelay(func, wait, args);
10204             });
10205
10206             /**
10207              * Creates a function that returns the result of invoking the provided
10208              * functions with the `this` binding of the created function, where each
10209              * successive invocation is supplied the return value of the previous.
10210              *
10211              * @static
10212              * @memberOf _
10213              * @category Function
10214              * @param {...Function} [funcs] Functions to invoke.
10215              * @returns {Function} Returns the new function.
10216              * @example
10217              *
10218              * function square(n) {
10219              *   return n * n;
10220              * }
10221              *
10222              * var addSquare = _.flow(_.add, square);
10223              * addSquare(1, 2);
10224              * // => 9
10225              */
10226             var flow = createFlow();
10227
10228             /**
10229              * This method is like `_.flow` except that it creates a function that
10230              * invokes the provided functions from right to left.
10231              *
10232              * @static
10233              * @memberOf _
10234              * @alias backflow, compose
10235              * @category Function
10236              * @param {...Function} [funcs] Functions to invoke.
10237              * @returns {Function} Returns the new function.
10238              * @example
10239              *
10240              * function square(n) {
10241              *   return n * n;
10242              * }
10243              *
10244              * var addSquare = _.flowRight(square, _.add);
10245              * addSquare(1, 2);
10246              * // => 9
10247              */
10248             var flowRight = createFlow(true);
10249
10250             /**
10251              * Creates a function that memoizes the result of `func`. If `resolver` is
10252              * provided it determines the cache key for storing the result based on the
10253              * arguments provided to the memoized function. By default, the first argument
10254              * provided to the memoized function is coerced to a string and used as the
10255              * cache key. The `func` is invoked with the `this` binding of the memoized
10256              * function.
10257              *
10258              * **Note:** The cache is exposed as the `cache` property on the memoized
10259              * function. Its creation may be customized by replacing the `_.memoize.Cache`
10260              * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)
10261              * method interface of `get`, `has`, and `set`.
10262              *
10263              * @static
10264              * @memberOf _
10265              * @category Function
10266              * @param {Function} func The function to have its output memoized.
10267              * @param {Function} [resolver] The function to resolve the cache key.
10268              * @returns {Function} Returns the new memoizing function.
10269              * @example
10270              *
10271              * var upperCase = _.memoize(function(string) {
10272              *   return string.toUpperCase();
10273              * });
10274              *
10275              * upperCase('fred');
10276              * // => 'FRED'
10277              *
10278              * // modifying the result cache
10279              * upperCase.cache.set('fred', 'BARNEY');
10280              * upperCase('fred');
10281              * // => 'BARNEY'
10282              *
10283              * // replacing `_.memoize.Cache`
10284              * var object = { 'user': 'fred' };
10285              * var other = { 'user': 'barney' };
10286              * var identity = _.memoize(_.identity);
10287              *
10288              * identity(object);
10289              * // => { 'user': 'fred' }
10290              * identity(other);
10291              * // => { 'user': 'fred' }
10292              *
10293              * _.memoize.Cache = WeakMap;
10294              * var identity = _.memoize(_.identity);
10295              *
10296              * identity(object);
10297              * // => { 'user': 'fred' }
10298              * identity(other);
10299              * // => { 'user': 'barney' }
10300              */
10301             function memoize(func, resolver) {
10302               if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
10303                 throw new TypeError(FUNC_ERROR_TEXT);
10304               }
10305               var memoized = function() {
10306                 var args = arguments,
10307                     key = resolver ? resolver.apply(this, args) : args[0],
10308                     cache = memoized.cache;
10309
10310                 if (cache.has(key)) {
10311                   return cache.get(key);
10312                 }
10313                 var result = func.apply(this, args);
10314                 memoized.cache = cache.set(key, result);
10315                 return result;
10316               };
10317               memoized.cache = new memoize.Cache;
10318               return memoized;
10319             }
10320
10321             /**
10322              * Creates a function that runs each argument through a corresponding
10323              * transform function.
10324              *
10325              * @static
10326              * @memberOf _
10327              * @category Function
10328              * @param {Function} func The function to wrap.
10329              * @param {...(Function|Function[])} [transforms] The functions to transform
10330              * arguments, specified as individual functions or arrays of functions.
10331              * @returns {Function} Returns the new function.
10332              * @example
10333              *
10334              * function doubled(n) {
10335              *   return n * 2;
10336              * }
10337              *
10338              * function square(n) {
10339              *   return n * n;
10340              * }
10341              *
10342              * var modded = _.modArgs(function(x, y) {
10343              *   return [x, y];
10344              * }, square, doubled);
10345              *
10346              * modded(1, 2);
10347              * // => [1, 4]
10348              *
10349              * modded(5, 10);
10350              * // => [25, 20]
10351              */
10352             var modArgs = restParam(function(func, transforms) {
10353               transforms = baseFlatten(transforms);
10354               if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
10355                 throw new TypeError(FUNC_ERROR_TEXT);
10356               }
10357               var length = transforms.length;
10358               return restParam(function(args) {
10359                 var index = nativeMin(args.length, length);
10360                 while (index--) {
10361                   args[index] = transforms[index](args[index]);
10362                 }
10363                 return func.apply(this, args);
10364               });
10365             });
10366
10367             /**
10368              * Creates a function that negates the result of the predicate `func`. The
10369              * `func` predicate is invoked with the `this` binding and arguments of the
10370              * created function.
10371              *
10372              * @static
10373              * @memberOf _
10374              * @category Function
10375              * @param {Function} predicate The predicate to negate.
10376              * @returns {Function} Returns the new function.
10377              * @example
10378              *
10379              * function isEven(n) {
10380              *   return n % 2 == 0;
10381              * }
10382              *
10383              * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
10384              * // => [1, 3, 5]
10385              */
10386             function negate(predicate) {
10387               if (typeof predicate != 'function') {
10388                 throw new TypeError(FUNC_ERROR_TEXT);
10389               }
10390               return function() {
10391                 return !predicate.apply(this, arguments);
10392               };
10393             }
10394
10395             /**
10396              * Creates a function that is restricted to invoking `func` once. Repeat calls
10397              * to the function return the value of the first call. The `func` is invoked
10398              * with the `this` binding and arguments of the created function.
10399              *
10400              * @static
10401              * @memberOf _
10402              * @category Function
10403              * @param {Function} func The function to restrict.
10404              * @returns {Function} Returns the new restricted function.
10405              * @example
10406              *
10407              * var initialize = _.once(createApplication);
10408              * initialize();
10409              * initialize();
10410              * // `initialize` invokes `createApplication` once
10411              */
10412             function once(func) {
10413               return before(2, func);
10414             }
10415
10416             /**
10417              * Creates a function that invokes `func` with `partial` arguments prepended
10418              * to those provided to the new function. This method is like `_.bind` except
10419              * it does **not** alter the `this` binding.
10420              *
10421              * The `_.partial.placeholder` value, which defaults to `_` in monolithic
10422              * builds, may be used as a placeholder for partially applied arguments.
10423              *
10424              * **Note:** This method does not set the "length" property of partially
10425              * applied functions.
10426              *
10427              * @static
10428              * @memberOf _
10429              * @category Function
10430              * @param {Function} func The function to partially apply arguments to.
10431              * @param {...*} [partials] The arguments to be partially applied.
10432              * @returns {Function} Returns the new partially applied function.
10433              * @example
10434              *
10435              * var greet = function(greeting, name) {
10436              *   return greeting + ' ' + name;
10437              * };
10438              *
10439              * var sayHelloTo = _.partial(greet, 'hello');
10440              * sayHelloTo('fred');
10441              * // => 'hello fred'
10442              *
10443              * // using placeholders
10444              * var greetFred = _.partial(greet, _, 'fred');
10445              * greetFred('hi');
10446              * // => 'hi fred'
10447              */
10448             var partial = createPartial(PARTIAL_FLAG);
10449
10450             /**
10451              * This method is like `_.partial` except that partially applied arguments
10452              * are appended to those provided to the new function.
10453              *
10454              * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
10455              * builds, may be used as a placeholder for partially applied arguments.
10456              *
10457              * **Note:** This method does not set the "length" property of partially
10458              * applied functions.
10459              *
10460              * @static
10461              * @memberOf _
10462              * @category Function
10463              * @param {Function} func The function to partially apply arguments to.
10464              * @param {...*} [partials] The arguments to be partially applied.
10465              * @returns {Function} Returns the new partially applied function.
10466              * @example
10467              *
10468              * var greet = function(greeting, name) {
10469              *   return greeting + ' ' + name;
10470              * };
10471              *
10472              * var greetFred = _.partialRight(greet, 'fred');
10473              * greetFred('hi');
10474              * // => 'hi fred'
10475              *
10476              * // using placeholders
10477              * var sayHelloTo = _.partialRight(greet, 'hello', _);
10478              * sayHelloTo('fred');
10479              * // => 'hello fred'
10480              */
10481             var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
10482
10483             /**
10484              * Creates a function that invokes `func` with arguments arranged according
10485              * to the specified indexes where the argument value at the first index is
10486              * provided as the first argument, the argument value at the second index is
10487              * provided as the second argument, and so on.
10488              *
10489              * @static
10490              * @memberOf _
10491              * @category Function
10492              * @param {Function} func The function to rearrange arguments for.
10493              * @param {...(number|number[])} indexes The arranged argument indexes,
10494              *  specified as individual indexes or arrays of indexes.
10495              * @returns {Function} Returns the new function.
10496              * @example
10497              *
10498              * var rearged = _.rearg(function(a, b, c) {
10499              *   return [a, b, c];
10500              * }, 2, 0, 1);
10501              *
10502              * rearged('b', 'c', 'a')
10503              * // => ['a', 'b', 'c']
10504              *
10505              * var map = _.rearg(_.map, [1, 0]);
10506              * map(function(n) {
10507              *   return n * 3;
10508              * }, [1, 2, 3]);
10509              * // => [3, 6, 9]
10510              */
10511             var rearg = restParam(function(func, indexes) {
10512               return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
10513             });
10514
10515             /**
10516              * Creates a function that invokes `func` with the `this` binding of the
10517              * created function and arguments from `start` and beyond provided as an array.
10518              *
10519              * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
10520              *
10521              * @static
10522              * @memberOf _
10523              * @category Function
10524              * @param {Function} func The function to apply a rest parameter to.
10525              * @param {number} [start=func.length-1] The start position of the rest parameter.
10526              * @returns {Function} Returns the new function.
10527              * @example
10528              *
10529              * var say = _.restParam(function(what, names) {
10530              *   return what + ' ' + _.initial(names).join(', ') +
10531              *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
10532              * });
10533              *
10534              * say('hello', 'fred', 'barney', 'pebbles');
10535              * // => 'hello fred, barney, & pebbles'
10536              */
10537             function restParam(func, start) {
10538               if (typeof func != 'function') {
10539                 throw new TypeError(FUNC_ERROR_TEXT);
10540               }
10541               start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
10542               return function() {
10543                 var args = arguments,
10544                     index = -1,
10545                     length = nativeMax(args.length - start, 0),
10546                     rest = Array(length);
10547
10548                 while (++index < length) {
10549                   rest[index] = args[start + index];
10550                 }
10551                 switch (start) {
10552                   case 0: return func.call(this, rest);
10553                   case 1: return func.call(this, args[0], rest);
10554                   case 2: return func.call(this, args[0], args[1], rest);
10555                 }
10556                 var otherArgs = Array(start + 1);
10557                 index = -1;
10558                 while (++index < start) {
10559                   otherArgs[index] = args[index];
10560                 }
10561                 otherArgs[start] = rest;
10562                 return func.apply(this, otherArgs);
10563               };
10564             }
10565
10566             /**
10567              * Creates a function that invokes `func` with the `this` binding of the created
10568              * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
10569              *
10570              * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).
10571              *
10572              * @static
10573              * @memberOf _
10574              * @category Function
10575              * @param {Function} func The function to spread arguments over.
10576              * @returns {Function} Returns the new function.
10577              * @example
10578              *
10579              * var say = _.spread(function(who, what) {
10580              *   return who + ' says ' + what;
10581              * });
10582              *
10583              * say(['fred', 'hello']);
10584              * // => 'fred says hello'
10585              *
10586              * // with a Promise
10587              * var numbers = Promise.all([
10588              *   Promise.resolve(40),
10589              *   Promise.resolve(36)
10590              * ]);
10591              *
10592              * numbers.then(_.spread(function(x, y) {
10593              *   return x + y;
10594              * }));
10595              * // => a Promise of 76
10596              */
10597             function spread(func) {
10598               if (typeof func != 'function') {
10599                 throw new TypeError(FUNC_ERROR_TEXT);
10600               }
10601               return function(array) {
10602                 return func.apply(this, array);
10603               };
10604             }
10605
10606             /**
10607              * Creates a throttled function that only invokes `func` at most once per
10608              * every `wait` milliseconds. The throttled function comes with a `cancel`
10609              * method to cancel delayed invocations. Provide an options object to indicate
10610              * that `func` should be invoked on the leading and/or trailing edge of the
10611              * `wait` timeout. Subsequent calls to the throttled function return the
10612              * result of the last `func` call.
10613              *
10614              * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
10615              * on the trailing edge of the timeout only if the the throttled function is
10616              * invoked more than once during the `wait` timeout.
10617              *
10618              * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
10619              * for details over the differences between `_.throttle` and `_.debounce`.
10620              *
10621              * @static
10622              * @memberOf _
10623              * @category Function
10624              * @param {Function} func The function to throttle.
10625              * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
10626              * @param {Object} [options] The options object.
10627              * @param {boolean} [options.leading=true] Specify invoking on the leading
10628              *  edge of the timeout.
10629              * @param {boolean} [options.trailing=true] Specify invoking on the trailing
10630              *  edge of the timeout.
10631              * @returns {Function} Returns the new throttled function.
10632              * @example
10633              *
10634              * // avoid excessively updating the position while scrolling
10635              * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
10636              *
10637              * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
10638              * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
10639              *   'trailing': false
10640              * }));
10641              *
10642              * // cancel a trailing throttled call
10643              * jQuery(window).on('popstate', throttled.cancel);
10644              */
10645             function throttle(func, wait, options) {
10646               var leading = true,
10647                   trailing = true;
10648
10649               if (typeof func != 'function') {
10650                 throw new TypeError(FUNC_ERROR_TEXT);
10651               }
10652               if (options === false) {
10653                 leading = false;
10654               } else if (isObject(options)) {
10655                 leading = 'leading' in options ? !!options.leading : leading;
10656                 trailing = 'trailing' in options ? !!options.trailing : trailing;
10657               }
10658               return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
10659             }
10660
10661             /**
10662              * Creates a function that provides `value` to the wrapper function as its
10663              * first argument. Any additional arguments provided to the function are
10664              * appended to those provided to the wrapper function. The wrapper is invoked
10665              * with the `this` binding of the created function.
10666              *
10667              * @static
10668              * @memberOf _
10669              * @category Function
10670              * @param {*} value The value to wrap.
10671              * @param {Function} wrapper The wrapper function.
10672              * @returns {Function} Returns the new function.
10673              * @example
10674              *
10675              * var p = _.wrap(_.escape, function(func, text) {
10676              *   return '<p>' + func(text) + '</p>';
10677              * });
10678              *
10679              * p('fred, barney, & pebbles');
10680              * // => '<p>fred, barney, &amp; pebbles</p>'
10681              */
10682             function wrap(value, wrapper) {
10683               wrapper = wrapper == null ? identity : wrapper;
10684               return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);
10685             }
10686
10687             /*------------------------------------------------------------------------*/
10688
10689             /**
10690              * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,
10691              * otherwise they are assigned by reference. If `customizer` is provided it is
10692              * invoked to produce the cloned values. If `customizer` returns `undefined`
10693              * cloning is handled by the method instead. The `customizer` is bound to
10694              * `thisArg` and invoked with two argument; (value [, index|key, object]).
10695              *
10696              * **Note:** This method is loosely based on the
10697              * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
10698              * The enumerable properties of `arguments` objects and objects created by
10699              * constructors other than `Object` are cloned to plain `Object` objects. An
10700              * empty object is returned for uncloneable values such as functions, DOM nodes,
10701              * Maps, Sets, and WeakMaps.
10702              *
10703              * @static
10704              * @memberOf _
10705              * @category Lang
10706              * @param {*} value The value to clone.
10707              * @param {boolean} [isDeep] Specify a deep clone.
10708              * @param {Function} [customizer] The function to customize cloning values.
10709              * @param {*} [thisArg] The `this` binding of `customizer`.
10710              * @returns {*} Returns the cloned value.
10711              * @example
10712              *
10713              * var users = [
10714              *   { 'user': 'barney' },
10715              *   { 'user': 'fred' }
10716              * ];
10717              *
10718              * var shallow = _.clone(users);
10719              * shallow[0] === users[0];
10720              * // => true
10721              *
10722              * var deep = _.clone(users, true);
10723              * deep[0] === users[0];
10724              * // => false
10725              *
10726              * // using a customizer callback
10727              * var el = _.clone(document.body, function(value) {
10728              *   if (_.isElement(value)) {
10729              *     return value.cloneNode(false);
10730              *   }
10731              * });
10732              *
10733              * el === document.body
10734              * // => false
10735              * el.nodeName
10736              * // => BODY
10737              * el.childNodes.length;
10738              * // => 0
10739              */
10740             function clone(value, isDeep, customizer, thisArg) {
10741               if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {
10742                 isDeep = false;
10743               }
10744               else if (typeof isDeep == 'function') {
10745                 thisArg = customizer;
10746                 customizer = isDeep;
10747                 isDeep = false;
10748               }
10749               return typeof customizer == 'function'
10750                 ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 1))
10751                 : baseClone(value, isDeep);
10752             }
10753
10754             /**
10755              * Creates a deep clone of `value`. If `customizer` is provided it is invoked
10756              * to produce the cloned values. If `customizer` returns `undefined` cloning
10757              * is handled by the method instead. The `customizer` is bound to `thisArg`
10758              * and invoked with two argument; (value [, index|key, object]).
10759              *
10760              * **Note:** This method is loosely based on the
10761              * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
10762              * The enumerable properties of `arguments` objects and objects created by
10763              * constructors other than `Object` are cloned to plain `Object` objects. An
10764              * empty object is returned for uncloneable values such as functions, DOM nodes,
10765              * Maps, Sets, and WeakMaps.
10766              *
10767              * @static
10768              * @memberOf _
10769              * @category Lang
10770              * @param {*} value The value to deep clone.
10771              * @param {Function} [customizer] The function to customize cloning values.
10772              * @param {*} [thisArg] The `this` binding of `customizer`.
10773              * @returns {*} Returns the deep cloned value.
10774              * @example
10775              *
10776              * var users = [
10777              *   { 'user': 'barney' },
10778              *   { 'user': 'fred' }
10779              * ];
10780              *
10781              * var deep = _.cloneDeep(users);
10782              * deep[0] === users[0];
10783              * // => false
10784              *
10785              * // using a customizer callback
10786              * var el = _.cloneDeep(document.body, function(value) {
10787              *   if (_.isElement(value)) {
10788              *     return value.cloneNode(true);
10789              *   }
10790              * });
10791              *
10792              * el === document.body
10793              * // => false
10794              * el.nodeName
10795              * // => BODY
10796              * el.childNodes.length;
10797              * // => 20
10798              */
10799             function cloneDeep(value, customizer, thisArg) {
10800               return typeof customizer == 'function'
10801                 ? baseClone(value, true, bindCallback(customizer, thisArg, 1))
10802                 : baseClone(value, true);
10803             }
10804
10805             /**
10806              * Checks if `value` is greater than `other`.
10807              *
10808              * @static
10809              * @memberOf _
10810              * @category Lang
10811              * @param {*} value The value to compare.
10812              * @param {*} other The other value to compare.
10813              * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.
10814              * @example
10815              *
10816              * _.gt(3, 1);
10817              * // => true
10818              *
10819              * _.gt(3, 3);
10820              * // => false
10821              *
10822              * _.gt(1, 3);
10823              * // => false
10824              */
10825             function gt(value, other) {
10826               return value > other;
10827             }
10828
10829             /**
10830              * Checks if `value` is greater than or equal to `other`.
10831              *
10832              * @static
10833              * @memberOf _
10834              * @category Lang
10835              * @param {*} value The value to compare.
10836              * @param {*} other The other value to compare.
10837              * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.
10838              * @example
10839              *
10840              * _.gte(3, 1);
10841              * // => true
10842              *
10843              * _.gte(3, 3);
10844              * // => true
10845              *
10846              * _.gte(1, 3);
10847              * // => false
10848              */
10849             function gte(value, other) {
10850               return value >= other;
10851             }
10852
10853             /**
10854              * Checks if `value` is classified as an `arguments` object.
10855              *
10856              * @static
10857              * @memberOf _
10858              * @category Lang
10859              * @param {*} value The value to check.
10860              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
10861              * @example
10862              *
10863              * _.isArguments(function() { return arguments; }());
10864              * // => true
10865              *
10866              * _.isArguments([1, 2, 3]);
10867              * // => false
10868              */
10869             function isArguments(value) {
10870               return isObjectLike(value) && isArrayLike(value) &&
10871                 hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
10872             }
10873
10874             /**
10875              * Checks if `value` is classified as an `Array` object.
10876              *
10877              * @static
10878              * @memberOf _
10879              * @category Lang
10880              * @param {*} value The value to check.
10881              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
10882              * @example
10883              *
10884              * _.isArray([1, 2, 3]);
10885              * // => true
10886              *
10887              * _.isArray(function() { return arguments; }());
10888              * // => false
10889              */
10890             var isArray = nativeIsArray || function(value) {
10891               return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
10892             };
10893
10894             /**
10895              * Checks if `value` is classified as a boolean primitive or object.
10896              *
10897              * @static
10898              * @memberOf _
10899              * @category Lang
10900              * @param {*} value The value to check.
10901              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
10902              * @example
10903              *
10904              * _.isBoolean(false);
10905              * // => true
10906              *
10907              * _.isBoolean(null);
10908              * // => false
10909              */
10910             function isBoolean(value) {
10911               return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
10912             }
10913
10914             /**
10915              * Checks if `value` is classified as a `Date` object.
10916              *
10917              * @static
10918              * @memberOf _
10919              * @category Lang
10920              * @param {*} value The value to check.
10921              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
10922              * @example
10923              *
10924              * _.isDate(new Date);
10925              * // => true
10926              *
10927              * _.isDate('Mon April 23 2012');
10928              * // => false
10929              */
10930             function isDate(value) {
10931               return isObjectLike(value) && objToString.call(value) == dateTag;
10932             }
10933
10934             /**
10935              * Checks if `value` is a DOM element.
10936              *
10937              * @static
10938              * @memberOf _
10939              * @category Lang
10940              * @param {*} value The value to check.
10941              * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
10942              * @example
10943              *
10944              * _.isElement(document.body);
10945              * // => true
10946              *
10947              * _.isElement('<body>');
10948              * // => false
10949              */
10950             function isElement(value) {
10951               return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
10952             }
10953
10954             /**
10955              * Checks if `value` is empty. A value is considered empty unless it is an
10956              * `arguments` object, array, string, or jQuery-like collection with a length
10957              * greater than `0` or an object with own enumerable properties.
10958              *
10959              * @static
10960              * @memberOf _
10961              * @category Lang
10962              * @param {Array|Object|string} value The value to inspect.
10963              * @returns {boolean} Returns `true` if `value` is empty, else `false`.
10964              * @example
10965              *
10966              * _.isEmpty(null);
10967              * // => true
10968              *
10969              * _.isEmpty(true);
10970              * // => true
10971              *
10972              * _.isEmpty(1);
10973              * // => true
10974              *
10975              * _.isEmpty([1, 2, 3]);
10976              * // => false
10977              *
10978              * _.isEmpty({ 'a': 1 });
10979              * // => false
10980              */
10981             function isEmpty(value) {
10982               if (value == null) {
10983                 return true;
10984               }
10985               if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||
10986                   (isObjectLike(value) && isFunction(value.splice)))) {
10987                 return !value.length;
10988               }
10989               return !keys(value).length;
10990             }
10991
10992             /**
10993              * Performs a deep comparison between two values to determine if they are
10994              * equivalent. If `customizer` is provided it is invoked to compare values.
10995              * If `customizer` returns `undefined` comparisons are handled by the method
10996              * instead. The `customizer` is bound to `thisArg` and invoked with three
10997              * arguments: (value, other [, index|key]).
10998              *
10999              * **Note:** This method supports comparing arrays, booleans, `Date` objects,
11000              * numbers, `Object` objects, regexes, and strings. Objects are compared by
11001              * their own, not inherited, enumerable properties. Functions and DOM nodes
11002              * are **not** supported. Provide a customizer function to extend support
11003              * for comparing other values.
11004              *
11005              * @static
11006              * @memberOf _
11007              * @alias eq
11008              * @category Lang
11009              * @param {*} value The value to compare.
11010              * @param {*} other The other value to compare.
11011              * @param {Function} [customizer] The function to customize value comparisons.
11012              * @param {*} [thisArg] The `this` binding of `customizer`.
11013              * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
11014              * @example
11015              *
11016              * var object = { 'user': 'fred' };
11017              * var other = { 'user': 'fred' };
11018              *
11019              * object == other;
11020              * // => false
11021              *
11022              * _.isEqual(object, other);
11023              * // => true
11024              *
11025              * // using a customizer callback
11026              * var array = ['hello', 'goodbye'];
11027              * var other = ['hi', 'goodbye'];
11028              *
11029              * _.isEqual(array, other, function(value, other) {
11030              *   if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {
11031              *     return true;
11032              *   }
11033              * });
11034              * // => true
11035              */
11036             function isEqual(value, other, customizer, thisArg) {
11037               customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
11038               var result = customizer ? customizer(value, other) : undefined;
11039               return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;
11040             }
11041
11042             /**
11043              * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
11044              * `SyntaxError`, `TypeError`, or `URIError` object.
11045              *
11046              * @static
11047              * @memberOf _
11048              * @category Lang
11049              * @param {*} value The value to check.
11050              * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
11051              * @example
11052              *
11053              * _.isError(new Error);
11054              * // => true
11055              *
11056              * _.isError(Error);
11057              * // => false
11058              */
11059             function isError(value) {
11060               return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
11061             }
11062
11063             /**
11064              * Checks if `value` is a finite primitive number.
11065              *
11066              * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).
11067              *
11068              * @static
11069              * @memberOf _
11070              * @category Lang
11071              * @param {*} value The value to check.
11072              * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
11073              * @example
11074              *
11075              * _.isFinite(10);
11076              * // => true
11077              *
11078              * _.isFinite('10');
11079              * // => false
11080              *
11081              * _.isFinite(true);
11082              * // => false
11083              *
11084              * _.isFinite(Object(10));
11085              * // => false
11086              *
11087              * _.isFinite(Infinity);
11088              * // => false
11089              */
11090             function isFinite(value) {
11091               return typeof value == 'number' && nativeIsFinite(value);
11092             }
11093
11094             /**
11095              * Checks if `value` is classified as a `Function` object.
11096              *
11097              * @static
11098              * @memberOf _
11099              * @category Lang
11100              * @param {*} value The value to check.
11101              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
11102              * @example
11103              *
11104              * _.isFunction(_);
11105              * // => true
11106              *
11107              * _.isFunction(/abc/);
11108              * // => false
11109              */
11110             function isFunction(value) {
11111               // The use of `Object#toString` avoids issues with the `typeof` operator
11112               // in older versions of Chrome and Safari which return 'function' for regexes
11113               // and Safari 8 equivalents which return 'object' for typed array constructors.
11114               return isObject(value) && objToString.call(value) == funcTag;
11115             }
11116
11117             /**
11118              * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
11119              * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
11120              *
11121              * @static
11122              * @memberOf _
11123              * @category Lang
11124              * @param {*} value The value to check.
11125              * @returns {boolean} Returns `true` if `value` is an object, else `false`.
11126              * @example
11127              *
11128              * _.isObject({});
11129              * // => true
11130              *
11131              * _.isObject([1, 2, 3]);
11132              * // => true
11133              *
11134              * _.isObject(1);
11135              * // => false
11136              */
11137             function isObject(value) {
11138               // Avoid a V8 JIT bug in Chrome 19-20.
11139               // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
11140               var type = typeof value;
11141               return !!value && (type == 'object' || type == 'function');
11142             }
11143
11144             /**
11145              * Performs a deep comparison between `object` and `source` to determine if
11146              * `object` contains equivalent property values. If `customizer` is provided
11147              * it is invoked to compare values. If `customizer` returns `undefined`
11148              * comparisons are handled by the method instead. The `customizer` is bound
11149              * to `thisArg` and invoked with three arguments: (value, other, index|key).
11150              *
11151              * **Note:** This method supports comparing properties of arrays, booleans,
11152              * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
11153              * and DOM nodes are **not** supported. Provide a customizer function to extend
11154              * support for comparing other values.
11155              *
11156              * @static
11157              * @memberOf _
11158              * @category Lang
11159              * @param {Object} object The object to inspect.
11160              * @param {Object} source The object of property values to match.
11161              * @param {Function} [customizer] The function to customize value comparisons.
11162              * @param {*} [thisArg] The `this` binding of `customizer`.
11163              * @returns {boolean} Returns `true` if `object` is a match, else `false`.
11164              * @example
11165              *
11166              * var object = { 'user': 'fred', 'age': 40 };
11167              *
11168              * _.isMatch(object, { 'age': 40 });
11169              * // => true
11170              *
11171              * _.isMatch(object, { 'age': 36 });
11172              * // => false
11173              *
11174              * // using a customizer callback
11175              * var object = { 'greeting': 'hello' };
11176              * var source = { 'greeting': 'hi' };
11177              *
11178              * _.isMatch(object, source, function(value, other) {
11179              *   return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;
11180              * });
11181              * // => true
11182              */
11183             function isMatch(object, source, customizer, thisArg) {
11184               customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
11185               return baseIsMatch(object, getMatchData(source), customizer);
11186             }
11187
11188             /**
11189              * Checks if `value` is `NaN`.
11190              *
11191              * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
11192              * which returns `true` for `undefined` and other non-numeric values.
11193              *
11194              * @static
11195              * @memberOf _
11196              * @category Lang
11197              * @param {*} value The value to check.
11198              * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
11199              * @example
11200              *
11201              * _.isNaN(NaN);
11202              * // => true
11203              *
11204              * _.isNaN(new Number(NaN));
11205              * // => true
11206              *
11207              * isNaN(undefined);
11208              * // => true
11209              *
11210              * _.isNaN(undefined);
11211              * // => false
11212              */
11213             function isNaN(value) {
11214               // An `NaN` primitive is the only value that is not equal to itself.
11215               // Perform the `toStringTag` check first to avoid errors with some host objects in IE.
11216               return isNumber(value) && value != +value;
11217             }
11218
11219             /**
11220              * Checks if `value` is a native function.
11221              *
11222              * @static
11223              * @memberOf _
11224              * @category Lang
11225              * @param {*} value The value to check.
11226              * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
11227              * @example
11228              *
11229              * _.isNative(Array.prototype.push);
11230              * // => true
11231              *
11232              * _.isNative(_);
11233              * // => false
11234              */
11235             function isNative(value) {
11236               if (value == null) {
11237                 return false;
11238               }
11239               if (isFunction(value)) {
11240                 return reIsNative.test(fnToString.call(value));
11241               }
11242               return isObjectLike(value) && reIsHostCtor.test(value);
11243             }
11244
11245             /**
11246              * Checks if `value` is `null`.
11247              *
11248              * @static
11249              * @memberOf _
11250              * @category Lang
11251              * @param {*} value The value to check.
11252              * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
11253              * @example
11254              *
11255              * _.isNull(null);
11256              * // => true
11257              *
11258              * _.isNull(void 0);
11259              * // => false
11260              */
11261             function isNull(value) {
11262               return value === null;
11263             }
11264
11265             /**
11266              * Checks if `value` is classified as a `Number` primitive or object.
11267              *
11268              * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified
11269              * as numbers, use the `_.isFinite` method.
11270              *
11271              * @static
11272              * @memberOf _
11273              * @category Lang
11274              * @param {*} value The value to check.
11275              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
11276              * @example
11277              *
11278              * _.isNumber(8.4);
11279              * // => true
11280              *
11281              * _.isNumber(NaN);
11282              * // => true
11283              *
11284              * _.isNumber('8.4');
11285              * // => false
11286              */
11287             function isNumber(value) {
11288               return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
11289             }
11290
11291             /**
11292              * Checks if `value` is a plain object, that is, an object created by the
11293              * `Object` constructor or one with a `[[Prototype]]` of `null`.
11294              *
11295              * **Note:** This method assumes objects created by the `Object` constructor
11296              * have no inherited enumerable properties.
11297              *
11298              * @static
11299              * @memberOf _
11300              * @category Lang
11301              * @param {*} value The value to check.
11302              * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
11303              * @example
11304              *
11305              * function Foo() {
11306              *   this.a = 1;
11307              * }
11308              *
11309              * _.isPlainObject(new Foo);
11310              * // => false
11311              *
11312              * _.isPlainObject([1, 2, 3]);
11313              * // => false
11314              *
11315              * _.isPlainObject({ 'x': 0, 'y': 0 });
11316              * // => true
11317              *
11318              * _.isPlainObject(Object.create(null));
11319              * // => true
11320              */
11321             function isPlainObject(value) {
11322               var Ctor;
11323
11324               // Exit early for non `Object` objects.
11325               if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
11326                   (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
11327                 return false;
11328               }
11329               // IE < 9 iterates inherited properties before own properties. If the first
11330               // iterated property is an object's own property then there are no inherited
11331               // enumerable properties.
11332               var result;
11333               // In most environments an object's own properties are iterated before
11334               // its inherited properties. If the last iterated property is an object's
11335               // own property then there are no inherited enumerable properties.
11336               baseForIn(value, function(subValue, key) {
11337                 result = key;
11338               });
11339               return result === undefined || hasOwnProperty.call(value, result);
11340             }
11341
11342             /**
11343              * Checks if `value` is classified as a `RegExp` object.
11344              *
11345              * @static
11346              * @memberOf _
11347              * @category Lang
11348              * @param {*} value The value to check.
11349              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
11350              * @example
11351              *
11352              * _.isRegExp(/abc/);
11353              * // => true
11354              *
11355              * _.isRegExp('/abc/');
11356              * // => false
11357              */
11358             function isRegExp(value) {
11359               return isObject(value) && objToString.call(value) == regexpTag;
11360             }
11361
11362             /**
11363              * Checks if `value` is classified as a `String` primitive or object.
11364              *
11365              * @static
11366              * @memberOf _
11367              * @category Lang
11368              * @param {*} value The value to check.
11369              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
11370              * @example
11371              *
11372              * _.isString('abc');
11373              * // => true
11374              *
11375              * _.isString(1);
11376              * // => false
11377              */
11378             function isString(value) {
11379               return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
11380             }
11381
11382             /**
11383              * Checks if `value` is classified as a typed array.
11384              *
11385              * @static
11386              * @memberOf _
11387              * @category Lang
11388              * @param {*} value The value to check.
11389              * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
11390              * @example
11391              *
11392              * _.isTypedArray(new Uint8Array);
11393              * // => true
11394              *
11395              * _.isTypedArray([]);
11396              * // => false
11397              */
11398             function isTypedArray(value) {
11399               return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
11400             }
11401
11402             /**
11403              * Checks if `value` is `undefined`.
11404              *
11405              * @static
11406              * @memberOf _
11407              * @category Lang
11408              * @param {*} value The value to check.
11409              * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
11410              * @example
11411              *
11412              * _.isUndefined(void 0);
11413              * // => true
11414              *
11415              * _.isUndefined(null);
11416              * // => false
11417              */
11418             function isUndefined(value) {
11419               return value === undefined;
11420             }
11421
11422             /**
11423              * Checks if `value` is less than `other`.
11424              *
11425              * @static
11426              * @memberOf _
11427              * @category Lang
11428              * @param {*} value The value to compare.
11429              * @param {*} other The other value to compare.
11430              * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.
11431              * @example
11432              *
11433              * _.lt(1, 3);
11434              * // => true
11435              *
11436              * _.lt(3, 3);
11437              * // => false
11438              *
11439              * _.lt(3, 1);
11440              * // => false
11441              */
11442             function lt(value, other) {
11443               return value < other;
11444             }
11445
11446             /**
11447              * Checks if `value` is less than or equal to `other`.
11448              *
11449              * @static
11450              * @memberOf _
11451              * @category Lang
11452              * @param {*} value The value to compare.
11453              * @param {*} other The other value to compare.
11454              * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.
11455              * @example
11456              *
11457              * _.lte(1, 3);
11458              * // => true
11459              *
11460              * _.lte(3, 3);
11461              * // => true
11462              *
11463              * _.lte(3, 1);
11464              * // => false
11465              */
11466             function lte(value, other) {
11467               return value <= other;
11468             }
11469
11470             /**
11471              * Converts `value` to an array.
11472              *
11473              * @static
11474              * @memberOf _
11475              * @category Lang
11476              * @param {*} value The value to convert.
11477              * @returns {Array} Returns the converted array.
11478              * @example
11479              *
11480              * (function() {
11481              *   return _.toArray(arguments).slice(1);
11482              * }(1, 2, 3));
11483              * // => [2, 3]
11484              */
11485             function toArray(value) {
11486               var length = value ? getLength(value) : 0;
11487               if (!isLength(length)) {
11488                 return values(value);
11489               }
11490               if (!length) {
11491                 return [];
11492               }
11493               return arrayCopy(value);
11494             }
11495
11496             /**
11497              * Converts `value` to a plain object flattening inherited enumerable
11498              * properties of `value` to own properties of the plain object.
11499              *
11500              * @static
11501              * @memberOf _
11502              * @category Lang
11503              * @param {*} value The value to convert.
11504              * @returns {Object} Returns the converted plain object.
11505              * @example
11506              *
11507              * function Foo() {
11508              *   this.b = 2;
11509              * }
11510              *
11511              * Foo.prototype.c = 3;
11512              *
11513              * _.assign({ 'a': 1 }, new Foo);
11514              * // => { 'a': 1, 'b': 2 }
11515              *
11516              * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
11517              * // => { 'a': 1, 'b': 2, 'c': 3 }
11518              */
11519             function toPlainObject(value) {
11520               return baseCopy(value, keysIn(value));
11521             }
11522
11523             /*------------------------------------------------------------------------*/
11524
11525             /**
11526              * Recursively merges own enumerable properties of the source object(s), that
11527              * don't resolve to `undefined` into the destination object. Subsequent sources
11528              * overwrite property assignments of previous sources. If `customizer` is
11529              * provided it is invoked to produce the merged values of the destination and
11530              * source properties. If `customizer` returns `undefined` merging is handled
11531              * by the method instead. The `customizer` is bound to `thisArg` and invoked
11532              * with five arguments: (objectValue, sourceValue, key, object, source).
11533              *
11534              * @static
11535              * @memberOf _
11536              * @category Object
11537              * @param {Object} object The destination object.
11538              * @param {...Object} [sources] The source objects.
11539              * @param {Function} [customizer] The function to customize assigned values.
11540              * @param {*} [thisArg] The `this` binding of `customizer`.
11541              * @returns {Object} Returns `object`.
11542              * @example
11543              *
11544              * var users = {
11545              *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
11546              * };
11547              *
11548              * var ages = {
11549              *   'data': [{ 'age': 36 }, { 'age': 40 }]
11550              * };
11551              *
11552              * _.merge(users, ages);
11553              * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
11554              *
11555              * // using a customizer callback
11556              * var object = {
11557              *   'fruits': ['apple'],
11558              *   'vegetables': ['beet']
11559              * };
11560              *
11561              * var other = {
11562              *   'fruits': ['banana'],
11563              *   'vegetables': ['carrot']
11564              * };
11565              *
11566              * _.merge(object, other, function(a, b) {
11567              *   if (_.isArray(a)) {
11568              *     return a.concat(b);
11569              *   }
11570              * });
11571              * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
11572              */
11573             var merge = createAssigner(baseMerge);
11574
11575             /**
11576              * Assigns own enumerable properties of source object(s) to the destination
11577              * object. Subsequent sources overwrite property assignments of previous sources.
11578              * If `customizer` is provided it is invoked to produce the assigned values.
11579              * The `customizer` is bound to `thisArg` and invoked with five arguments:
11580              * (objectValue, sourceValue, key, object, source).
11581              *
11582              * **Note:** This method mutates `object` and is based on
11583              * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
11584              *
11585              * @static
11586              * @memberOf _
11587              * @alias extend
11588              * @category Object
11589              * @param {Object} object The destination object.
11590              * @param {...Object} [sources] The source objects.
11591              * @param {Function} [customizer] The function to customize assigned values.
11592              * @param {*} [thisArg] The `this` binding of `customizer`.
11593              * @returns {Object} Returns `object`.
11594              * @example
11595              *
11596              * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
11597              * // => { 'user': 'fred', 'age': 40 }
11598              *
11599              * // using a customizer callback
11600              * var defaults = _.partialRight(_.assign, function(value, other) {
11601              *   return _.isUndefined(value) ? other : value;
11602              * });
11603              *
11604              * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
11605              * // => { 'user': 'barney', 'age': 36 }
11606              */
11607             var assign = createAssigner(function(object, source, customizer) {
11608               return customizer
11609                 ? assignWith(object, source, customizer)
11610                 : baseAssign(object, source);
11611             });
11612
11613             /**
11614              * Creates an object that inherits from the given `prototype` object. If a
11615              * `properties` object is provided its own enumerable properties are assigned
11616              * to the created object.
11617              *
11618              * @static
11619              * @memberOf _
11620              * @category Object
11621              * @param {Object} prototype The object to inherit from.
11622              * @param {Object} [properties] The properties to assign to the object.
11623              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
11624              * @returns {Object} Returns the new object.
11625              * @example
11626              *
11627              * function Shape() {
11628              *   this.x = 0;
11629              *   this.y = 0;
11630              * }
11631              *
11632              * function Circle() {
11633              *   Shape.call(this);
11634              * }
11635              *
11636              * Circle.prototype = _.create(Shape.prototype, {
11637              *   'constructor': Circle
11638              * });
11639              *
11640              * var circle = new Circle;
11641              * circle instanceof Circle;
11642              * // => true
11643              *
11644              * circle instanceof Shape;
11645              * // => true
11646              */
11647             function create(prototype, properties, guard) {
11648               var result = baseCreate(prototype);
11649               if (guard && isIterateeCall(prototype, properties, guard)) {
11650                 properties = undefined;
11651               }
11652               return properties ? baseAssign(result, properties) : result;
11653             }
11654
11655             /**
11656              * Assigns own enumerable properties of source object(s) to the destination
11657              * object for all destination properties that resolve to `undefined`. Once a
11658              * property is set, additional values of the same property are ignored.
11659              *
11660              * **Note:** This method mutates `object`.
11661              *
11662              * @static
11663              * @memberOf _
11664              * @category Object
11665              * @param {Object} object The destination object.
11666              * @param {...Object} [sources] The source objects.
11667              * @returns {Object} Returns `object`.
11668              * @example
11669              *
11670              * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
11671              * // => { 'user': 'barney', 'age': 36 }
11672              */
11673             var defaults = createDefaults(assign, assignDefaults);
11674
11675             /**
11676              * This method is like `_.defaults` except that it recursively assigns
11677              * default properties.
11678              *
11679              * **Note:** This method mutates `object`.
11680              *
11681              * @static
11682              * @memberOf _
11683              * @category Object
11684              * @param {Object} object The destination object.
11685              * @param {...Object} [sources] The source objects.
11686              * @returns {Object} Returns `object`.
11687              * @example
11688              *
11689              * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
11690              * // => { 'user': { 'name': 'barney', 'age': 36 } }
11691              *
11692              */
11693             var defaultsDeep = createDefaults(merge, mergeDefaults);
11694
11695             /**
11696              * This method is like `_.find` except that it returns the key of the first
11697              * element `predicate` returns truthy for instead of the element itself.
11698              *
11699              * If a property name is provided for `predicate` the created `_.property`
11700              * style callback returns the property value of the given element.
11701              *
11702              * If a value is also provided for `thisArg` the created `_.matchesProperty`
11703              * style callback returns `true` for elements that have a matching property
11704              * value, else `false`.
11705              *
11706              * If an object is provided for `predicate` the created `_.matches` style
11707              * callback returns `true` for elements that have the properties of the given
11708              * object, else `false`.
11709              *
11710              * @static
11711              * @memberOf _
11712              * @category Object
11713              * @param {Object} object The object to search.
11714              * @param {Function|Object|string} [predicate=_.identity] The function invoked
11715              *  per iteration.
11716              * @param {*} [thisArg] The `this` binding of `predicate`.
11717              * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
11718              * @example
11719              *
11720              * var users = {
11721              *   'barney':  { 'age': 36, 'active': true },
11722              *   'fred':    { 'age': 40, 'active': false },
11723              *   'pebbles': { 'age': 1,  'active': true }
11724              * };
11725              *
11726              * _.findKey(users, function(chr) {
11727              *   return chr.age < 40;
11728              * });
11729              * // => 'barney' (iteration order is not guaranteed)
11730              *
11731              * // using the `_.matches` callback shorthand
11732              * _.findKey(users, { 'age': 1, 'active': true });
11733              * // => 'pebbles'
11734              *
11735              * // using the `_.matchesProperty` callback shorthand
11736              * _.findKey(users, 'active', false);
11737              * // => 'fred'
11738              *
11739              * // using the `_.property` callback shorthand
11740              * _.findKey(users, 'active');
11741              * // => 'barney'
11742              */
11743             var findKey = createFindKey(baseForOwn);
11744
11745             /**
11746              * This method is like `_.findKey` except that it iterates over elements of
11747              * a collection in the opposite order.
11748              *
11749              * If a property name is provided for `predicate` the created `_.property`
11750              * style callback returns the property value of the given element.
11751              *
11752              * If a value is also provided for `thisArg` the created `_.matchesProperty`
11753              * style callback returns `true` for elements that have a matching property
11754              * value, else `false`.
11755              *
11756              * If an object is provided for `predicate` the created `_.matches` style
11757              * callback returns `true` for elements that have the properties of the given
11758              * object, else `false`.
11759              *
11760              * @static
11761              * @memberOf _
11762              * @category Object
11763              * @param {Object} object The object to search.
11764              * @param {Function|Object|string} [predicate=_.identity] The function invoked
11765              *  per iteration.
11766              * @param {*} [thisArg] The `this` binding of `predicate`.
11767              * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
11768              * @example
11769              *
11770              * var users = {
11771              *   'barney':  { 'age': 36, 'active': true },
11772              *   'fred':    { 'age': 40, 'active': false },
11773              *   'pebbles': { 'age': 1,  'active': true }
11774              * };
11775              *
11776              * _.findLastKey(users, function(chr) {
11777              *   return chr.age < 40;
11778              * });
11779              * // => returns `pebbles` assuming `_.findKey` returns `barney`
11780              *
11781              * // using the `_.matches` callback shorthand
11782              * _.findLastKey(users, { 'age': 36, 'active': true });
11783              * // => 'barney'
11784              *
11785              * // using the `_.matchesProperty` callback shorthand
11786              * _.findLastKey(users, 'active', false);
11787              * // => 'fred'
11788              *
11789              * // using the `_.property` callback shorthand
11790              * _.findLastKey(users, 'active');
11791              * // => 'pebbles'
11792              */
11793             var findLastKey = createFindKey(baseForOwnRight);
11794
11795             /**
11796              * Iterates over own and inherited enumerable properties of an object invoking
11797              * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
11798              * with three arguments: (value, key, object). Iteratee functions may exit
11799              * iteration early by explicitly returning `false`.
11800              *
11801              * @static
11802              * @memberOf _
11803              * @category Object
11804              * @param {Object} object The object to iterate over.
11805              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
11806              * @param {*} [thisArg] The `this` binding of `iteratee`.
11807              * @returns {Object} Returns `object`.
11808              * @example
11809              *
11810              * function Foo() {
11811              *   this.a = 1;
11812              *   this.b = 2;
11813              * }
11814              *
11815              * Foo.prototype.c = 3;
11816              *
11817              * _.forIn(new Foo, function(value, key) {
11818              *   console.log(key);
11819              * });
11820              * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
11821              */
11822             var forIn = createForIn(baseFor);
11823
11824             /**
11825              * This method is like `_.forIn` except that it iterates over properties of
11826              * `object` in the opposite order.
11827              *
11828              * @static
11829              * @memberOf _
11830              * @category Object
11831              * @param {Object} object The object to iterate over.
11832              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
11833              * @param {*} [thisArg] The `this` binding of `iteratee`.
11834              * @returns {Object} Returns `object`.
11835              * @example
11836              *
11837              * function Foo() {
11838              *   this.a = 1;
11839              *   this.b = 2;
11840              * }
11841              *
11842              * Foo.prototype.c = 3;
11843              *
11844              * _.forInRight(new Foo, function(value, key) {
11845              *   console.log(key);
11846              * });
11847              * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
11848              */
11849             var forInRight = createForIn(baseForRight);
11850
11851             /**
11852              * Iterates over own enumerable properties of an object invoking `iteratee`
11853              * for each property. The `iteratee` is bound to `thisArg` and invoked with
11854              * three arguments: (value, key, object). Iteratee functions may exit iteration
11855              * early by explicitly returning `false`.
11856              *
11857              * @static
11858              * @memberOf _
11859              * @category Object
11860              * @param {Object} object The object to iterate over.
11861              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
11862              * @param {*} [thisArg] The `this` binding of `iteratee`.
11863              * @returns {Object} Returns `object`.
11864              * @example
11865              *
11866              * function Foo() {
11867              *   this.a = 1;
11868              *   this.b = 2;
11869              * }
11870              *
11871              * Foo.prototype.c = 3;
11872              *
11873              * _.forOwn(new Foo, function(value, key) {
11874              *   console.log(key);
11875              * });
11876              * // => logs 'a' and 'b' (iteration order is not guaranteed)
11877              */
11878             var forOwn = createForOwn(baseForOwn);
11879
11880             /**
11881              * This method is like `_.forOwn` except that it iterates over properties of
11882              * `object` in the opposite order.
11883              *
11884              * @static
11885              * @memberOf _
11886              * @category Object
11887              * @param {Object} object The object to iterate over.
11888              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
11889              * @param {*} [thisArg] The `this` binding of `iteratee`.
11890              * @returns {Object} Returns `object`.
11891              * @example
11892              *
11893              * function Foo() {
11894              *   this.a = 1;
11895              *   this.b = 2;
11896              * }
11897              *
11898              * Foo.prototype.c = 3;
11899              *
11900              * _.forOwnRight(new Foo, function(value, key) {
11901              *   console.log(key);
11902              * });
11903              * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
11904              */
11905             var forOwnRight = createForOwn(baseForOwnRight);
11906
11907             /**
11908              * Creates an array of function property names from all enumerable properties,
11909              * own and inherited, of `object`.
11910              *
11911              * @static
11912              * @memberOf _
11913              * @alias methods
11914              * @category Object
11915              * @param {Object} object The object to inspect.
11916              * @returns {Array} Returns the new array of property names.
11917              * @example
11918              *
11919              * _.functions(_);
11920              * // => ['after', 'ary', 'assign', ...]
11921              */
11922             function functions(object) {
11923               return baseFunctions(object, keysIn(object));
11924             }
11925
11926             /**
11927              * Gets the property value at `path` of `object`. If the resolved value is
11928              * `undefined` the `defaultValue` is used in its place.
11929              *
11930              * @static
11931              * @memberOf _
11932              * @category Object
11933              * @param {Object} object The object to query.
11934              * @param {Array|string} path The path of the property to get.
11935              * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
11936              * @returns {*} Returns the resolved value.
11937              * @example
11938              *
11939              * var object = { 'a': [{ 'b': { 'c': 3 } }] };
11940              *
11941              * _.get(object, 'a[0].b.c');
11942              * // => 3
11943              *
11944              * _.get(object, ['a', '0', 'b', 'c']);
11945              * // => 3
11946              *
11947              * _.get(object, 'a.b.c', 'default');
11948              * // => 'default'
11949              */
11950             function get(object, path, defaultValue) {
11951               var result = object == null ? undefined : baseGet(object, toPath(path), path + '');
11952               return result === undefined ? defaultValue : result;
11953             }
11954
11955             /**
11956              * Checks if `path` is a direct property.
11957              *
11958              * @static
11959              * @memberOf _
11960              * @category Object
11961              * @param {Object} object The object to query.
11962              * @param {Array|string} path The path to check.
11963              * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.
11964              * @example
11965              *
11966              * var object = { 'a': { 'b': { 'c': 3 } } };
11967              *
11968              * _.has(object, 'a');
11969              * // => true
11970              *
11971              * _.has(object, 'a.b.c');
11972              * // => true
11973              *
11974              * _.has(object, ['a', 'b', 'c']);
11975              * // => true
11976              */
11977             function has(object, path) {
11978               if (object == null) {
11979                 return false;
11980               }
11981               var result = hasOwnProperty.call(object, path);
11982               if (!result && !isKey(path)) {
11983                 path = toPath(path);
11984                 object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
11985                 if (object == null) {
11986                   return false;
11987                 }
11988                 path = last(path);
11989                 result = hasOwnProperty.call(object, path);
11990               }
11991               return result || (isLength(object.length) && isIndex(path, object.length) &&
11992                 (isArray(object) || isArguments(object)));
11993             }
11994
11995             /**
11996              * Creates an object composed of the inverted keys and values of `object`.
11997              * If `object` contains duplicate values, subsequent values overwrite property
11998              * assignments of previous values unless `multiValue` is `true`.
11999              *
12000              * @static
12001              * @memberOf _
12002              * @category Object
12003              * @param {Object} object The object to invert.
12004              * @param {boolean} [multiValue] Allow multiple values per key.
12005              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
12006              * @returns {Object} Returns the new inverted object.
12007              * @example
12008              *
12009              * var object = { 'a': 1, 'b': 2, 'c': 1 };
12010              *
12011              * _.invert(object);
12012              * // => { '1': 'c', '2': 'b' }
12013              *
12014              * // with `multiValue`
12015              * _.invert(object, true);
12016              * // => { '1': ['a', 'c'], '2': ['b'] }
12017              */
12018             function invert(object, multiValue, guard) {
12019               if (guard && isIterateeCall(object, multiValue, guard)) {
12020                 multiValue = undefined;
12021               }
12022               var index = -1,
12023                   props = keys(object),
12024                   length = props.length,
12025                   result = {};
12026
12027               while (++index < length) {
12028                 var key = props[index],
12029                     value = object[key];
12030
12031                 if (multiValue) {
12032                   if (hasOwnProperty.call(result, value)) {
12033                     result[value].push(key);
12034                   } else {
12035                     result[value] = [key];
12036                   }
12037                 }
12038                 else {
12039                   result[value] = key;
12040                 }
12041               }
12042               return result;
12043             }
12044
12045             /**
12046              * Creates an array of the own enumerable property names of `object`.
12047              *
12048              * **Note:** Non-object values are coerced to objects. See the
12049              * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
12050              * for more details.
12051              *
12052              * @static
12053              * @memberOf _
12054              * @category Object
12055              * @param {Object} object The object to query.
12056              * @returns {Array} Returns the array of property names.
12057              * @example
12058              *
12059              * function Foo() {
12060              *   this.a = 1;
12061              *   this.b = 2;
12062              * }
12063              *
12064              * Foo.prototype.c = 3;
12065              *
12066              * _.keys(new Foo);
12067              * // => ['a', 'b'] (iteration order is not guaranteed)
12068              *
12069              * _.keys('hi');
12070              * // => ['0', '1']
12071              */
12072             var keys = !nativeKeys ? shimKeys : function(object) {
12073               var Ctor = object == null ? undefined : object.constructor;
12074               if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
12075                   (typeof object != 'function' && isArrayLike(object))) {
12076                 return shimKeys(object);
12077               }
12078               return isObject(object) ? nativeKeys(object) : [];
12079             };
12080
12081             /**
12082              * Creates an array of the own and inherited enumerable property names of `object`.
12083              *
12084              * **Note:** Non-object values are coerced to objects.
12085              *
12086              * @static
12087              * @memberOf _
12088              * @category Object
12089              * @param {Object} object The object to query.
12090              * @returns {Array} Returns the array of property names.
12091              * @example
12092              *
12093              * function Foo() {
12094              *   this.a = 1;
12095              *   this.b = 2;
12096              * }
12097              *
12098              * Foo.prototype.c = 3;
12099              *
12100              * _.keysIn(new Foo);
12101              * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
12102              */
12103             function keysIn(object) {
12104               if (object == null) {
12105                 return [];
12106               }
12107               if (!isObject(object)) {
12108                 object = Object(object);
12109               }
12110               var length = object.length;
12111               length = (length && isLength(length) &&
12112                 (isArray(object) || isArguments(object)) && length) || 0;
12113
12114               var Ctor = object.constructor,
12115                   index = -1,
12116                   isProto = typeof Ctor == 'function' && Ctor.prototype === object,
12117                   result = Array(length),
12118                   skipIndexes = length > 0;
12119
12120               while (++index < length) {
12121                 result[index] = (index + '');
12122               }
12123               for (var key in object) {
12124                 if (!(skipIndexes && isIndex(key, length)) &&
12125                     !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
12126                   result.push(key);
12127                 }
12128               }
12129               return result;
12130             }
12131
12132             /**
12133              * The opposite of `_.mapValues`; this method creates an object with the
12134              * same values as `object` and keys generated by running each own enumerable
12135              * property of `object` through `iteratee`.
12136              *
12137              * @static
12138              * @memberOf _
12139              * @category Object
12140              * @param {Object} object The object to iterate over.
12141              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
12142              *  per iteration.
12143              * @param {*} [thisArg] The `this` binding of `iteratee`.
12144              * @returns {Object} Returns the new mapped object.
12145              * @example
12146              *
12147              * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
12148              *   return key + value;
12149              * });
12150              * // => { 'a1': 1, 'b2': 2 }
12151              */
12152             var mapKeys = createObjectMapper(true);
12153
12154             /**
12155              * Creates an object with the same keys as `object` and values generated by
12156              * running each own enumerable property of `object` through `iteratee`. The
12157              * iteratee function is bound to `thisArg` and invoked with three arguments:
12158              * (value, key, object).
12159              *
12160              * If a property name is provided for `iteratee` the created `_.property`
12161              * style callback returns the property value of the given element.
12162              *
12163              * If a value is also provided for `thisArg` the created `_.matchesProperty`
12164              * style callback returns `true` for elements that have a matching property
12165              * value, else `false`.
12166              *
12167              * If an object is provided for `iteratee` the created `_.matches` style
12168              * callback returns `true` for elements that have the properties of the given
12169              * object, else `false`.
12170              *
12171              * @static
12172              * @memberOf _
12173              * @category Object
12174              * @param {Object} object The object to iterate over.
12175              * @param {Function|Object|string} [iteratee=_.identity] The function invoked
12176              *  per iteration.
12177              * @param {*} [thisArg] The `this` binding of `iteratee`.
12178              * @returns {Object} Returns the new mapped object.
12179              * @example
12180              *
12181              * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {
12182              *   return n * 3;
12183              * });
12184              * // => { 'a': 3, 'b': 6 }
12185              *
12186              * var users = {
12187              *   'fred':    { 'user': 'fred',    'age': 40 },
12188              *   'pebbles': { 'user': 'pebbles', 'age': 1 }
12189              * };
12190              *
12191              * // using the `_.property` callback shorthand
12192              * _.mapValues(users, 'age');
12193              * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
12194              */
12195             var mapValues = createObjectMapper();
12196
12197             /**
12198              * The opposite of `_.pick`; this method creates an object composed of the
12199              * own and inherited enumerable properties of `object` that are not omitted.
12200              *
12201              * @static
12202              * @memberOf _
12203              * @category Object
12204              * @param {Object} object The source object.
12205              * @param {Function|...(string|string[])} [predicate] The function invoked per
12206              *  iteration or property names to omit, specified as individual property
12207              *  names or arrays of property names.
12208              * @param {*} [thisArg] The `this` binding of `predicate`.
12209              * @returns {Object} Returns the new object.
12210              * @example
12211              *
12212              * var object = { 'user': 'fred', 'age': 40 };
12213              *
12214              * _.omit(object, 'age');
12215              * // => { 'user': 'fred' }
12216              *
12217              * _.omit(object, _.isNumber);
12218              * // => { 'user': 'fred' }
12219              */
12220             var omit = restParam(function(object, props) {
12221               if (object == null) {
12222                 return {};
12223               }
12224               if (typeof props[0] != 'function') {
12225                 var props = arrayMap(baseFlatten(props), String);
12226                 return pickByArray(object, baseDifference(keysIn(object), props));
12227               }
12228               var predicate = bindCallback(props[0], props[1], 3);
12229               return pickByCallback(object, function(value, key, object) {
12230                 return !predicate(value, key, object);
12231               });
12232             });
12233
12234             /**
12235              * Creates a two dimensional array of the key-value pairs for `object`,
12236              * e.g. `[[key1, value1], [key2, value2]]`.
12237              *
12238              * @static
12239              * @memberOf _
12240              * @category Object
12241              * @param {Object} object The object to query.
12242              * @returns {Array} Returns the new array of key-value pairs.
12243              * @example
12244              *
12245              * _.pairs({ 'barney': 36, 'fred': 40 });
12246              * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
12247              */
12248             function pairs(object) {
12249               object = toObject(object);
12250
12251               var index = -1,
12252                   props = keys(object),
12253                   length = props.length,
12254                   result = Array(length);
12255
12256               while (++index < length) {
12257                 var key = props[index];
12258                 result[index] = [key, object[key]];
12259               }
12260               return result;
12261             }
12262
12263             /**
12264              * Creates an object composed of the picked `object` properties. Property
12265              * names may be specified as individual arguments or as arrays of property
12266              * names. If `predicate` is provided it is invoked for each property of `object`
12267              * picking the properties `predicate` returns truthy for. The predicate is
12268              * bound to `thisArg` and invoked with three arguments: (value, key, object).
12269              *
12270              * @static
12271              * @memberOf _
12272              * @category Object
12273              * @param {Object} object The source object.
12274              * @param {Function|...(string|string[])} [predicate] The function invoked per
12275              *  iteration or property names to pick, specified as individual property
12276              *  names or arrays of property names.
12277              * @param {*} [thisArg] The `this` binding of `predicate`.
12278              * @returns {Object} Returns the new object.
12279              * @example
12280              *
12281              * var object = { 'user': 'fred', 'age': 40 };
12282              *
12283              * _.pick(object, 'user');
12284              * // => { 'user': 'fred' }
12285              *
12286              * _.pick(object, _.isString);
12287              * // => { 'user': 'fred' }
12288              */
12289             var pick = restParam(function(object, props) {
12290               if (object == null) {
12291                 return {};
12292               }
12293               return typeof props[0] == 'function'
12294                 ? pickByCallback(object, bindCallback(props[0], props[1], 3))
12295                 : pickByArray(object, baseFlatten(props));
12296             });
12297
12298             /**
12299              * This method is like `_.get` except that if the resolved value is a function
12300              * it is invoked with the `this` binding of its parent object and its result
12301              * is returned.
12302              *
12303              * @static
12304              * @memberOf _
12305              * @category Object
12306              * @param {Object} object The object to query.
12307              * @param {Array|string} path The path of the property to resolve.
12308              * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
12309              * @returns {*} Returns the resolved value.
12310              * @example
12311              *
12312              * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
12313              *
12314              * _.result(object, 'a[0].b.c1');
12315              * // => 3
12316              *
12317              * _.result(object, 'a[0].b.c2');
12318              * // => 4
12319              *
12320              * _.result(object, 'a.b.c', 'default');
12321              * // => 'default'
12322              *
12323              * _.result(object, 'a.b.c', _.constant('default'));
12324              * // => 'default'
12325              */
12326             function result(object, path, defaultValue) {
12327               var result = object == null ? undefined : object[path];
12328               if (result === undefined) {
12329                 if (object != null && !isKey(path, object)) {
12330                   path = toPath(path);
12331                   object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
12332                   result = object == null ? undefined : object[last(path)];
12333                 }
12334                 result = result === undefined ? defaultValue : result;
12335               }
12336               return isFunction(result) ? result.call(object) : result;
12337             }
12338
12339             /**
12340              * Sets the property value of `path` on `object`. If a portion of `path`
12341              * does not exist it is created.
12342              *
12343              * @static
12344              * @memberOf _
12345              * @category Object
12346              * @param {Object} object The object to augment.
12347              * @param {Array|string} path The path of the property to set.
12348              * @param {*} value The value to set.
12349              * @returns {Object} Returns `object`.
12350              * @example
12351              *
12352              * var object = { 'a': [{ 'b': { 'c': 3 } }] };
12353              *
12354              * _.set(object, 'a[0].b.c', 4);
12355              * console.log(object.a[0].b.c);
12356              * // => 4
12357              *
12358              * _.set(object, 'x[0].y.z', 5);
12359              * console.log(object.x[0].y.z);
12360              * // => 5
12361              */
12362             function set(object, path, value) {
12363               if (object == null) {
12364                 return object;
12365               }
12366               var pathKey = (path + '');
12367               path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);
12368
12369               var index = -1,
12370                   length = path.length,
12371                   lastIndex = length - 1,
12372                   nested = object;
12373
12374               while (nested != null && ++index < length) {
12375                 var key = path[index];
12376                 if (isObject(nested)) {
12377                   if (index == lastIndex) {
12378                     nested[key] = value;
12379                   } else if (nested[key] == null) {
12380                     nested[key] = isIndex(path[index + 1]) ? [] : {};
12381                   }
12382                 }
12383                 nested = nested[key];
12384               }
12385               return object;
12386             }
12387
12388             /**
12389              * An alternative to `_.reduce`; this method transforms `object` to a new
12390              * `accumulator` object which is the result of running each of its own enumerable
12391              * properties through `iteratee`, with each invocation potentially mutating
12392              * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
12393              * with four arguments: (accumulator, value, key, object). Iteratee functions
12394              * may exit iteration early by explicitly returning `false`.
12395              *
12396              * @static
12397              * @memberOf _
12398              * @category Object
12399              * @param {Array|Object} object The object to iterate over.
12400              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
12401              * @param {*} [accumulator] The custom accumulator value.
12402              * @param {*} [thisArg] The `this` binding of `iteratee`.
12403              * @returns {*} Returns the accumulated value.
12404              * @example
12405              *
12406              * _.transform([2, 3, 4], function(result, n) {
12407              *   result.push(n *= n);
12408              *   return n % 2 == 0;
12409              * });
12410              * // => [4, 9]
12411              *
12412              * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {
12413              *   result[key] = n * 3;
12414              * });
12415              * // => { 'a': 3, 'b': 6 }
12416              */
12417             function transform(object, iteratee, accumulator, thisArg) {
12418               var isArr = isArray(object) || isTypedArray(object);
12419               iteratee = getCallback(iteratee, thisArg, 4);
12420
12421               if (accumulator == null) {
12422                 if (isArr || isObject(object)) {
12423                   var Ctor = object.constructor;
12424                   if (isArr) {
12425                     accumulator = isArray(object) ? new Ctor : [];
12426                   } else {
12427                     accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
12428                   }
12429                 } else {
12430                   accumulator = {};
12431                 }
12432               }
12433               (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
12434                 return iteratee(accumulator, value, index, object);
12435               });
12436               return accumulator;
12437             }
12438
12439             /**
12440              * Creates an array of the own enumerable property values of `object`.
12441              *
12442              * **Note:** Non-object values are coerced to objects.
12443              *
12444              * @static
12445              * @memberOf _
12446              * @category Object
12447              * @param {Object} object The object to query.
12448              * @returns {Array} Returns the array of property values.
12449              * @example
12450              *
12451              * function Foo() {
12452              *   this.a = 1;
12453              *   this.b = 2;
12454              * }
12455              *
12456              * Foo.prototype.c = 3;
12457              *
12458              * _.values(new Foo);
12459              * // => [1, 2] (iteration order is not guaranteed)
12460              *
12461              * _.values('hi');
12462              * // => ['h', 'i']
12463              */
12464             function values(object) {
12465               return baseValues(object, keys(object));
12466             }
12467
12468             /**
12469              * Creates an array of the own and inherited enumerable property values
12470              * of `object`.
12471              *
12472              * **Note:** Non-object values are coerced to objects.
12473              *
12474              * @static
12475              * @memberOf _
12476              * @category Object
12477              * @param {Object} object The object to query.
12478              * @returns {Array} Returns the array of property values.
12479              * @example
12480              *
12481              * function Foo() {
12482              *   this.a = 1;
12483              *   this.b = 2;
12484              * }
12485              *
12486              * Foo.prototype.c = 3;
12487              *
12488              * _.valuesIn(new Foo);
12489              * // => [1, 2, 3] (iteration order is not guaranteed)
12490              */
12491             function valuesIn(object) {
12492               return baseValues(object, keysIn(object));
12493             }
12494
12495             /*------------------------------------------------------------------------*/
12496
12497             /**
12498              * Checks if `n` is between `start` and up to but not including, `end`. If
12499              * `end` is not specified it is set to `start` with `start` then set to `0`.
12500              *
12501              * @static
12502              * @memberOf _
12503              * @category Number
12504              * @param {number} n The number to check.
12505              * @param {number} [start=0] The start of the range.
12506              * @param {number} end The end of the range.
12507              * @returns {boolean} Returns `true` if `n` is in the range, else `false`.
12508              * @example
12509              *
12510              * _.inRange(3, 2, 4);
12511              * // => true
12512              *
12513              * _.inRange(4, 8);
12514              * // => true
12515              *
12516              * _.inRange(4, 2);
12517              * // => false
12518              *
12519              * _.inRange(2, 2);
12520              * // => false
12521              *
12522              * _.inRange(1.2, 2);
12523              * // => true
12524              *
12525              * _.inRange(5.2, 4);
12526              * // => false
12527              */
12528             function inRange(value, start, end) {
12529               start = +start || 0;
12530               if (end === undefined) {
12531                 end = start;
12532                 start = 0;
12533               } else {
12534                 end = +end || 0;
12535               }
12536               return value >= nativeMin(start, end) && value < nativeMax(start, end);
12537             }
12538
12539             /**
12540              * Produces a random number between `min` and `max` (inclusive). If only one
12541              * argument is provided a number between `0` and the given number is returned.
12542              * If `floating` is `true`, or either `min` or `max` are floats, a floating-point
12543              * number is returned instead of an integer.
12544              *
12545              * @static
12546              * @memberOf _
12547              * @category Number
12548              * @param {number} [min=0] The minimum possible value.
12549              * @param {number} [max=1] The maximum possible value.
12550              * @param {boolean} [floating] Specify returning a floating-point number.
12551              * @returns {number} Returns the random number.
12552              * @example
12553              *
12554              * _.random(0, 5);
12555              * // => an integer between 0 and 5
12556              *
12557              * _.random(5);
12558              * // => also an integer between 0 and 5
12559              *
12560              * _.random(5, true);
12561              * // => a floating-point number between 0 and 5
12562              *
12563              * _.random(1.2, 5.2);
12564              * // => a floating-point number between 1.2 and 5.2
12565              */
12566             function random(min, max, floating) {
12567               if (floating && isIterateeCall(min, max, floating)) {
12568                 max = floating = undefined;
12569               }
12570               var noMin = min == null,
12571                   noMax = max == null;
12572
12573               if (floating == null) {
12574                 if (noMax && typeof min == 'boolean') {
12575                   floating = min;
12576                   min = 1;
12577                 }
12578                 else if (typeof max == 'boolean') {
12579                   floating = max;
12580                   noMax = true;
12581                 }
12582               }
12583               if (noMin && noMax) {
12584                 max = 1;
12585                 noMax = false;
12586               }
12587               min = +min || 0;
12588               if (noMax) {
12589                 max = min;
12590                 min = 0;
12591               } else {
12592                 max = +max || 0;
12593               }
12594               if (floating || min % 1 || max % 1) {
12595                 var rand = nativeRandom();
12596                 return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);
12597               }
12598               return baseRandom(min, max);
12599             }
12600
12601             /*------------------------------------------------------------------------*/
12602
12603             /**
12604              * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
12605              *
12606              * @static
12607              * @memberOf _
12608              * @category String
12609              * @param {string} [string=''] The string to convert.
12610              * @returns {string} Returns the camel cased string.
12611              * @example
12612              *
12613              * _.camelCase('Foo Bar');
12614              * // => 'fooBar'
12615              *
12616              * _.camelCase('--foo-bar');
12617              * // => 'fooBar'
12618              *
12619              * _.camelCase('__foo_bar__');
12620              * // => 'fooBar'
12621              */
12622             var camelCase = createCompounder(function(result, word, index) {
12623               word = word.toLowerCase();
12624               return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);
12625             });
12626
12627             /**
12628              * Capitalizes the first character of `string`.
12629              *
12630              * @static
12631              * @memberOf _
12632              * @category String
12633              * @param {string} [string=''] The string to capitalize.
12634              * @returns {string} Returns the capitalized string.
12635              * @example
12636              *
12637              * _.capitalize('fred');
12638              * // => 'Fred'
12639              */
12640             function capitalize(string) {
12641               string = baseToString(string);
12642               return string && (string.charAt(0).toUpperCase() + string.slice(1));
12643             }
12644
12645             /**
12646              * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
12647              * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
12648              *
12649              * @static
12650              * @memberOf _
12651              * @category String
12652              * @param {string} [string=''] The string to deburr.
12653              * @returns {string} Returns the deburred string.
12654              * @example
12655              *
12656              * _.deburr('déjà vu');
12657              * // => 'deja vu'
12658              */
12659             function deburr(string) {
12660               string = baseToString(string);
12661               return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');
12662             }
12663
12664             /**
12665              * Checks if `string` ends with the given target string.
12666              *
12667              * @static
12668              * @memberOf _
12669              * @category String
12670              * @param {string} [string=''] The string to search.
12671              * @param {string} [target] The string to search for.
12672              * @param {number} [position=string.length] The position to search from.
12673              * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.
12674              * @example
12675              *
12676              * _.endsWith('abc', 'c');
12677              * // => true
12678              *
12679              * _.endsWith('abc', 'b');
12680              * // => false
12681              *
12682              * _.endsWith('abc', 'b', 2);
12683              * // => true
12684              */
12685             function endsWith(string, target, position) {
12686               string = baseToString(string);
12687               target = (target + '');
12688
12689               var length = string.length;
12690               position = position === undefined
12691                 ? length
12692                 : nativeMin(position < 0 ? 0 : (+position || 0), length);
12693
12694               position -= target.length;
12695               return position >= 0 && string.indexOf(target, position) == position;
12696             }
12697
12698             /**
12699              * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to
12700              * their corresponding HTML entities.
12701              *
12702              * **Note:** No other characters are escaped. To escape additional characters
12703              * use a third-party library like [_he_](https://mths.be/he).
12704              *
12705              * Though the ">" character is escaped for symmetry, characters like
12706              * ">" and "/" don't need escaping in HTML and have no special meaning
12707              * unless they're part of a tag or unquoted attribute value.
12708              * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
12709              * (under "semi-related fun fact") for more details.
12710              *
12711              * Backticks are escaped because in Internet Explorer < 9, they can break out
12712              * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),
12713              * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
12714              * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)
12715              * for more details.
12716              *
12717              * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
12718              * to reduce XSS vectors.
12719              *
12720              * @static
12721              * @memberOf _
12722              * @category String
12723              * @param {string} [string=''] The string to escape.
12724              * @returns {string} Returns the escaped string.
12725              * @example
12726              *
12727              * _.escape('fred, barney, & pebbles');
12728              * // => 'fred, barney, &amp; pebbles'
12729              */
12730             function escape(string) {
12731               // Reset `lastIndex` because in IE < 9 `String#replace` does not.
12732               string = baseToString(string);
12733               return (string && reHasUnescapedHtml.test(string))
12734                 ? string.replace(reUnescapedHtml, escapeHtmlChar)
12735                 : string;
12736             }
12737
12738             /**
12739              * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
12740              * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
12741              *
12742              * @static
12743              * @memberOf _
12744              * @category String
12745              * @param {string} [string=''] The string to escape.
12746              * @returns {string} Returns the escaped string.
12747              * @example
12748              *
12749              * _.escapeRegExp('[lodash](https://lodash.com/)');
12750              * // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
12751              */
12752             function escapeRegExp(string) {
12753               string = baseToString(string);
12754               return (string && reHasRegExpChars.test(string))
12755                 ? string.replace(reRegExpChars, escapeRegExpChar)
12756                 : (string || '(?:)');
12757             }
12758
12759             /**
12760              * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
12761              *
12762              * @static
12763              * @memberOf _
12764              * @category String
12765              * @param {string} [string=''] The string to convert.
12766              * @returns {string} Returns the kebab cased string.
12767              * @example
12768              *
12769              * _.kebabCase('Foo Bar');
12770              * // => 'foo-bar'
12771              *
12772              * _.kebabCase('fooBar');
12773              * // => 'foo-bar'
12774              *
12775              * _.kebabCase('__foo_bar__');
12776              * // => 'foo-bar'
12777              */
12778             var kebabCase = createCompounder(function(result, word, index) {
12779               return result + (index ? '-' : '') + word.toLowerCase();
12780             });
12781
12782             /**
12783              * Pads `string` on the left and right sides if it's shorter than `length`.
12784              * Padding characters are truncated if they can't be evenly divided by `length`.
12785              *
12786              * @static
12787              * @memberOf _
12788              * @category String
12789              * @param {string} [string=''] The string to pad.
12790              * @param {number} [length=0] The padding length.
12791              * @param {string} [chars=' '] The string used as padding.
12792              * @returns {string} Returns the padded string.
12793              * @example
12794              *
12795              * _.pad('abc', 8);
12796              * // => '  abc   '
12797              *
12798              * _.pad('abc', 8, '_-');
12799              * // => '_-abc_-_'
12800              *
12801              * _.pad('abc', 3);
12802              * // => 'abc'
12803              */
12804             function pad(string, length, chars) {
12805               string = baseToString(string);
12806               length = +length;
12807
12808               var strLength = string.length;
12809               if (strLength >= length || !nativeIsFinite(length)) {
12810                 return string;
12811               }
12812               var mid = (length - strLength) / 2,
12813                   leftLength = nativeFloor(mid),
12814                   rightLength = nativeCeil(mid);
12815
12816               chars = createPadding('', rightLength, chars);
12817               return chars.slice(0, leftLength) + string + chars;
12818             }
12819
12820             /**
12821              * Pads `string` on the left side if it's shorter than `length`. Padding
12822              * characters are truncated if they exceed `length`.
12823              *
12824              * @static
12825              * @memberOf _
12826              * @category String
12827              * @param {string} [string=''] The string to pad.
12828              * @param {number} [length=0] The padding length.
12829              * @param {string} [chars=' '] The string used as padding.
12830              * @returns {string} Returns the padded string.
12831              * @example
12832              *
12833              * _.padLeft('abc', 6);
12834              * // => '   abc'
12835              *
12836              * _.padLeft('abc', 6, '_-');
12837              * // => '_-_abc'
12838              *
12839              * _.padLeft('abc', 3);
12840              * // => 'abc'
12841              */
12842             var padLeft = createPadDir();
12843
12844             /**
12845              * Pads `string` on the right side if it's shorter than `length`. Padding
12846              * characters are truncated if they exceed `length`.
12847              *
12848              * @static
12849              * @memberOf _
12850              * @category String
12851              * @param {string} [string=''] The string to pad.
12852              * @param {number} [length=0] The padding length.
12853              * @param {string} [chars=' '] The string used as padding.
12854              * @returns {string} Returns the padded string.
12855              * @example
12856              *
12857              * _.padRight('abc', 6);
12858              * // => 'abc   '
12859              *
12860              * _.padRight('abc', 6, '_-');
12861              * // => 'abc_-_'
12862              *
12863              * _.padRight('abc', 3);
12864              * // => 'abc'
12865              */
12866             var padRight = createPadDir(true);
12867
12868             /**
12869              * Converts `string` to an integer of the specified radix. If `radix` is
12870              * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
12871              * in which case a `radix` of `16` is used.
12872              *
12873              * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
12874              * of `parseInt`.
12875              *
12876              * @static
12877              * @memberOf _
12878              * @category String
12879              * @param {string} string The string to convert.
12880              * @param {number} [radix] The radix to interpret `value` by.
12881              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
12882              * @returns {number} Returns the converted integer.
12883              * @example
12884              *
12885              * _.parseInt('08');
12886              * // => 8
12887              *
12888              * _.map(['6', '08', '10'], _.parseInt);
12889              * // => [6, 8, 10]
12890              */
12891             function parseInt(string, radix, guard) {
12892               // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
12893               // Chrome fails to trim leading <BOM> whitespace characters.
12894               // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
12895               if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
12896                 radix = 0;
12897               } else if (radix) {
12898                 radix = +radix;
12899               }
12900               string = trim(string);
12901               return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
12902             }
12903
12904             /**
12905              * Repeats the given string `n` times.
12906              *
12907              * @static
12908              * @memberOf _
12909              * @category String
12910              * @param {string} [string=''] The string to repeat.
12911              * @param {number} [n=0] The number of times to repeat the string.
12912              * @returns {string} Returns the repeated string.
12913              * @example
12914              *
12915              * _.repeat('*', 3);
12916              * // => '***'
12917              *
12918              * _.repeat('abc', 2);
12919              * // => 'abcabc'
12920              *
12921              * _.repeat('abc', 0);
12922              * // => ''
12923              */
12924             function repeat(string, n) {
12925               var result = '';
12926               string = baseToString(string);
12927               n = +n;
12928               if (n < 1 || !string || !nativeIsFinite(n)) {
12929                 return result;
12930               }
12931               // Leverage the exponentiation by squaring algorithm for a faster repeat.
12932               // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
12933               do {
12934                 if (n % 2) {
12935                   result += string;
12936                 }
12937                 n = nativeFloor(n / 2);
12938                 string += string;
12939               } while (n);
12940
12941               return result;
12942             }
12943
12944             /**
12945              * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
12946              *
12947              * @static
12948              * @memberOf _
12949              * @category String
12950              * @param {string} [string=''] The string to convert.
12951              * @returns {string} Returns the snake cased string.
12952              * @example
12953              *
12954              * _.snakeCase('Foo Bar');
12955              * // => 'foo_bar'
12956              *
12957              * _.snakeCase('fooBar');
12958              * // => 'foo_bar'
12959              *
12960              * _.snakeCase('--foo-bar');
12961              * // => 'foo_bar'
12962              */
12963             var snakeCase = createCompounder(function(result, word, index) {
12964               return result + (index ? '_' : '') + word.toLowerCase();
12965             });
12966
12967             /**
12968              * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
12969              *
12970              * @static
12971              * @memberOf _
12972              * @category String
12973              * @param {string} [string=''] The string to convert.
12974              * @returns {string} Returns the start cased string.
12975              * @example
12976              *
12977              * _.startCase('--foo-bar');
12978              * // => 'Foo Bar'
12979              *
12980              * _.startCase('fooBar');
12981              * // => 'Foo Bar'
12982              *
12983              * _.startCase('__foo_bar__');
12984              * // => 'Foo Bar'
12985              */
12986             var startCase = createCompounder(function(result, word, index) {
12987               return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));
12988             });
12989
12990             /**
12991              * Checks if `string` starts with the given target string.
12992              *
12993              * @static
12994              * @memberOf _
12995              * @category String
12996              * @param {string} [string=''] The string to search.
12997              * @param {string} [target] The string to search for.
12998              * @param {number} [position=0] The position to search from.
12999              * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.
13000              * @example
13001              *
13002              * _.startsWith('abc', 'a');
13003              * // => true
13004              *
13005              * _.startsWith('abc', 'b');
13006              * // => false
13007              *
13008              * _.startsWith('abc', 'b', 1);
13009              * // => true
13010              */
13011             function startsWith(string, target, position) {
13012               string = baseToString(string);
13013               position = position == null
13014                 ? 0
13015                 : nativeMin(position < 0 ? 0 : (+position || 0), string.length);
13016
13017               return string.lastIndexOf(target, position) == position;
13018             }
13019
13020             /**
13021              * Creates a compiled template function that can interpolate data properties
13022              * in "interpolate" delimiters, HTML-escape interpolated data properties in
13023              * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
13024              * properties may be accessed as free variables in the template. If a setting
13025              * object is provided it takes precedence over `_.templateSettings` values.
13026              *
13027              * **Note:** In the development build `_.template` utilizes
13028              * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
13029              * for easier debugging.
13030              *
13031              * For more information on precompiling templates see
13032              * [lodash's custom builds documentation](https://lodash.com/custom-builds).
13033              *
13034              * For more information on Chrome extension sandboxes see
13035              * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
13036              *
13037              * @static
13038              * @memberOf _
13039              * @category String
13040              * @param {string} [string=''] The template string.
13041              * @param {Object} [options] The options object.
13042              * @param {RegExp} [options.escape] The HTML "escape" delimiter.
13043              * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
13044              * @param {Object} [options.imports] An object to import into the template as free variables.
13045              * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
13046              * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.
13047              * @param {string} [options.variable] The data object variable name.
13048              * @param- {Object} [otherOptions] Enables the legacy `options` param signature.
13049              * @returns {Function} Returns the compiled template function.
13050              * @example
13051              *
13052              * // using the "interpolate" delimiter to create a compiled template
13053              * var compiled = _.template('hello <%= user %>!');
13054              * compiled({ 'user': 'fred' });
13055              * // => 'hello fred!'
13056              *
13057              * // using the HTML "escape" delimiter to escape data property values
13058              * var compiled = _.template('<b><%- value %></b>');
13059              * compiled({ 'value': '<script>' });
13060              * // => '<b>&lt;script&gt;</b>'
13061              *
13062              * // using the "evaluate" delimiter to execute JavaScript and generate HTML
13063              * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
13064              * compiled({ 'users': ['fred', 'barney'] });
13065              * // => '<li>fred</li><li>barney</li>'
13066              *
13067              * // using the internal `print` function in "evaluate" delimiters
13068              * var compiled = _.template('<% print("hello " + user); %>!');
13069              * compiled({ 'user': 'barney' });
13070              * // => 'hello barney!'
13071              *
13072              * // using the ES delimiter as an alternative to the default "interpolate" delimiter
13073              * var compiled = _.template('hello ${ user }!');
13074              * compiled({ 'user': 'pebbles' });
13075              * // => 'hello pebbles!'
13076              *
13077              * // using custom template delimiters
13078              * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
13079              * var compiled = _.template('hello {{ user }}!');
13080              * compiled({ 'user': 'mustache' });
13081              * // => 'hello mustache!'
13082              *
13083              * // using backslashes to treat delimiters as plain text
13084              * var compiled = _.template('<%= "\\<%- value %\\>" %>');
13085              * compiled({ 'value': 'ignored' });
13086              * // => '<%- value %>'
13087              *
13088              * // using the `imports` option to import `jQuery` as `jq`
13089              * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
13090              * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
13091              * compiled({ 'users': ['fred', 'barney'] });
13092              * // => '<li>fred</li><li>barney</li>'
13093              *
13094              * // using the `sourceURL` option to specify a custom sourceURL for the template
13095              * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
13096              * compiled(data);
13097              * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
13098              *
13099              * // using the `variable` option to ensure a with-statement isn't used in the compiled template
13100              * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
13101              * compiled.source;
13102              * // => function(data) {
13103              * //   var __t, __p = '';
13104              * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
13105              * //   return __p;
13106              * // }
13107              *
13108              * // using the `source` property to inline compiled templates for meaningful
13109              * // line numbers in error messages and a stack trace
13110              * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
13111              *   var JST = {\
13112              *     "main": ' + _.template(mainText).source + '\
13113              *   };\
13114              * ');
13115              */
13116             function template(string, options, otherOptions) {
13117               // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)
13118               // and Laura Doktorova's doT.js (https://github.com/olado/doT).
13119               var settings = lodash.templateSettings;
13120
13121               if (otherOptions && isIterateeCall(string, options, otherOptions)) {
13122                 options = otherOptions = undefined;
13123               }
13124               string = baseToString(string);
13125               options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);
13126
13127               var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),
13128                   importsKeys = keys(imports),
13129                   importsValues = baseValues(imports, importsKeys);
13130
13131               var isEscaping,
13132                   isEvaluating,
13133                   index = 0,
13134                   interpolate = options.interpolate || reNoMatch,
13135                   source = "__p += '";
13136
13137               // Compile the regexp to match each delimiter.
13138               var reDelimiters = RegExp(
13139                 (options.escape || reNoMatch).source + '|' +
13140                 interpolate.source + '|' +
13141                 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
13142                 (options.evaluate || reNoMatch).source + '|$'
13143               , 'g');
13144
13145               // Use a sourceURL for easier debugging.
13146               var sourceURL = '//# sourceURL=' +
13147                 ('sourceURL' in options
13148                   ? options.sourceURL
13149                   : ('lodash.templateSources[' + (++templateCounter) + ']')
13150                 ) + '\n';
13151
13152               string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
13153                 interpolateValue || (interpolateValue = esTemplateValue);
13154
13155                 // Escape characters that can't be included in string literals.
13156                 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
13157
13158                 // Replace delimiters with snippets.
13159                 if (escapeValue) {
13160                   isEscaping = true;
13161                   source += "' +\n__e(" + escapeValue + ") +\n'";
13162                 }
13163                 if (evaluateValue) {
13164                   isEvaluating = true;
13165                   source += "';\n" + evaluateValue + ";\n__p += '";
13166                 }
13167                 if (interpolateValue) {
13168                   source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
13169                 }
13170                 index = offset + match.length;
13171
13172                 // The JS engine embedded in Adobe products requires returning the `match`
13173                 // string in order to produce the correct `offset` value.
13174                 return match;
13175               });
13176
13177               source += "';\n";
13178
13179               // If `variable` is not specified wrap a with-statement around the generated
13180               // code to add the data object to the top of the scope chain.
13181               var variable = options.variable;
13182               if (!variable) {
13183                 source = 'with (obj) {\n' + source + '\n}\n';
13184               }
13185               // Cleanup code by stripping empty strings.
13186               source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
13187                 .replace(reEmptyStringMiddle, '$1')
13188                 .replace(reEmptyStringTrailing, '$1;');
13189
13190               // Frame code as the function body.
13191               source = 'function(' + (variable || 'obj') + ') {\n' +
13192                 (variable
13193                   ? ''
13194                   : 'obj || (obj = {});\n'
13195                 ) +
13196                 "var __t, __p = ''" +
13197                 (isEscaping
13198                    ? ', __e = _.escape'
13199                    : ''
13200                 ) +
13201                 (isEvaluating
13202                   ? ', __j = Array.prototype.join;\n' +
13203                     "function print() { __p += __j.call(arguments, '') }\n"
13204                   : ';\n'
13205                 ) +
13206                 source +
13207                 'return __p\n}';
13208
13209               var result = attempt(function() {
13210                 return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);
13211               });
13212
13213               // Provide the compiled function's source by its `toString` method or
13214               // the `source` property as a convenience for inlining compiled templates.
13215               result.source = source;
13216               if (isError(result)) {
13217                 throw result;
13218               }
13219               return result;
13220             }
13221
13222             /**
13223              * Removes leading and trailing whitespace or specified characters from `string`.
13224              *
13225              * @static
13226              * @memberOf _
13227              * @category String
13228              * @param {string} [string=''] The string to trim.
13229              * @param {string} [chars=whitespace] The characters to trim.
13230              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
13231              * @returns {string} Returns the trimmed string.
13232              * @example
13233              *
13234              * _.trim('  abc  ');
13235              * // => 'abc'
13236              *
13237              * _.trim('-_-abc-_-', '_-');
13238              * // => 'abc'
13239              *
13240              * _.map(['  foo  ', '  bar  '], _.trim);
13241              * // => ['foo', 'bar']
13242              */
13243             function trim(string, chars, guard) {
13244               var value = string;
13245               string = baseToString(string);
13246               if (!string) {
13247                 return string;
13248               }
13249               if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
13250                 return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);
13251               }
13252               chars = (chars + '');
13253               return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);
13254             }
13255
13256             /**
13257              * Removes leading whitespace or specified characters from `string`.
13258              *
13259              * @static
13260              * @memberOf _
13261              * @category String
13262              * @param {string} [string=''] The string to trim.
13263              * @param {string} [chars=whitespace] The characters to trim.
13264              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
13265              * @returns {string} Returns the trimmed string.
13266              * @example
13267              *
13268              * _.trimLeft('  abc  ');
13269              * // => 'abc  '
13270              *
13271              * _.trimLeft('-_-abc-_-', '_-');
13272              * // => 'abc-_-'
13273              */
13274             function trimLeft(string, chars, guard) {
13275               var value = string;
13276               string = baseToString(string);
13277               if (!string) {
13278                 return string;
13279               }
13280               if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
13281                 return string.slice(trimmedLeftIndex(string));
13282               }
13283               return string.slice(charsLeftIndex(string, (chars + '')));
13284             }
13285
13286             /**
13287              * Removes trailing whitespace or specified characters from `string`.
13288              *
13289              * @static
13290              * @memberOf _
13291              * @category String
13292              * @param {string} [string=''] The string to trim.
13293              * @param {string} [chars=whitespace] The characters to trim.
13294              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
13295              * @returns {string} Returns the trimmed string.
13296              * @example
13297              *
13298              * _.trimRight('  abc  ');
13299              * // => '  abc'
13300              *
13301              * _.trimRight('-_-abc-_-', '_-');
13302              * // => '-_-abc'
13303              */
13304             function trimRight(string, chars, guard) {
13305               var value = string;
13306               string = baseToString(string);
13307               if (!string) {
13308                 return string;
13309               }
13310               if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
13311                 return string.slice(0, trimmedRightIndex(string) + 1);
13312               }
13313               return string.slice(0, charsRightIndex(string, (chars + '')) + 1);
13314             }
13315
13316             /**
13317              * Truncates `string` if it's longer than the given maximum string length.
13318              * The last characters of the truncated string are replaced with the omission
13319              * string which defaults to "...".
13320              *
13321              * @static
13322              * @memberOf _
13323              * @category String
13324              * @param {string} [string=''] The string to truncate.
13325              * @param {Object|number} [options] The options object or maximum string length.
13326              * @param {number} [options.length=30] The maximum string length.
13327              * @param {string} [options.omission='...'] The string to indicate text is omitted.
13328              * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
13329              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
13330              * @returns {string} Returns the truncated string.
13331              * @example
13332              *
13333              * _.trunc('hi-diddly-ho there, neighborino');
13334              * // => 'hi-diddly-ho there, neighbo...'
13335              *
13336              * _.trunc('hi-diddly-ho there, neighborino', 24);
13337              * // => 'hi-diddly-ho there, n...'
13338              *
13339              * _.trunc('hi-diddly-ho there, neighborino', {
13340              *   'length': 24,
13341              *   'separator': ' '
13342              * });
13343              * // => 'hi-diddly-ho there,...'
13344              *
13345              * _.trunc('hi-diddly-ho there, neighborino', {
13346              *   'length': 24,
13347              *   'separator': /,? +/
13348              * });
13349              * // => 'hi-diddly-ho there...'
13350              *
13351              * _.trunc('hi-diddly-ho there, neighborino', {
13352              *   'omission': ' [...]'
13353              * });
13354              * // => 'hi-diddly-ho there, neig [...]'
13355              */
13356             function trunc(string, options, guard) {
13357               if (guard && isIterateeCall(string, options, guard)) {
13358                 options = undefined;
13359               }
13360               var length = DEFAULT_TRUNC_LENGTH,
13361                   omission = DEFAULT_TRUNC_OMISSION;
13362
13363               if (options != null) {
13364                 if (isObject(options)) {
13365                   var separator = 'separator' in options ? options.separator : separator;
13366                   length = 'length' in options ? (+options.length || 0) : length;
13367                   omission = 'omission' in options ? baseToString(options.omission) : omission;
13368                 } else {
13369                   length = +options || 0;
13370                 }
13371               }
13372               string = baseToString(string);
13373               if (length >= string.length) {
13374                 return string;
13375               }
13376               var end = length - omission.length;
13377               if (end < 1) {
13378                 return omission;
13379               }
13380               var result = string.slice(0, end);
13381               if (separator == null) {
13382                 return result + omission;
13383               }
13384               if (isRegExp(separator)) {
13385                 if (string.slice(end).search(separator)) {
13386                   var match,
13387                       newEnd,
13388                       substring = string.slice(0, end);
13389
13390                   if (!separator.global) {
13391                     separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');
13392                   }
13393                   separator.lastIndex = 0;
13394                   while ((match = separator.exec(substring))) {
13395                     newEnd = match.index;
13396                   }
13397                   result = result.slice(0, newEnd == null ? end : newEnd);
13398                 }
13399               } else if (string.indexOf(separator, end) != end) {
13400                 var index = result.lastIndexOf(separator);
13401                 if (index > -1) {
13402                   result = result.slice(0, index);
13403                 }
13404               }
13405               return result + omission;
13406             }
13407
13408             /**
13409              * The inverse of `_.escape`; this method converts the HTML entities
13410              * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their
13411              * corresponding characters.
13412              *
13413              * **Note:** No other HTML entities are unescaped. To unescape additional HTML
13414              * entities use a third-party library like [_he_](https://mths.be/he).
13415              *
13416              * @static
13417              * @memberOf _
13418              * @category String
13419              * @param {string} [string=''] The string to unescape.
13420              * @returns {string} Returns the unescaped string.
13421              * @example
13422              *
13423              * _.unescape('fred, barney, &amp; pebbles');
13424              * // => 'fred, barney, & pebbles'
13425              */
13426             function unescape(string) {
13427               string = baseToString(string);
13428               return (string && reHasEscapedHtml.test(string))
13429                 ? string.replace(reEscapedHtml, unescapeHtmlChar)
13430                 : string;
13431             }
13432
13433             /**
13434              * Splits `string` into an array of its words.
13435              *
13436              * @static
13437              * @memberOf _
13438              * @category String
13439              * @param {string} [string=''] The string to inspect.
13440              * @param {RegExp|string} [pattern] The pattern to match words.
13441              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
13442              * @returns {Array} Returns the words of `string`.
13443              * @example
13444              *
13445              * _.words('fred, barney, & pebbles');
13446              * // => ['fred', 'barney', 'pebbles']
13447              *
13448              * _.words('fred, barney, & pebbles', /[^, ]+/g);
13449              * // => ['fred', 'barney', '&', 'pebbles']
13450              */
13451             function words(string, pattern, guard) {
13452               if (guard && isIterateeCall(string, pattern, guard)) {
13453                 pattern = undefined;
13454               }
13455               string = baseToString(string);
13456               return string.match(pattern || reWords) || [];
13457             }
13458
13459             /*------------------------------------------------------------------------*/
13460
13461             /**
13462              * Attempts to invoke `func`, returning either the result or the caught error
13463              * object. Any additional arguments are provided to `func` when it is invoked.
13464              *
13465              * @static
13466              * @memberOf _
13467              * @category Utility
13468              * @param {Function} func The function to attempt.
13469              * @returns {*} Returns the `func` result or error object.
13470              * @example
13471              *
13472              * // avoid throwing errors for invalid selectors
13473              * var elements = _.attempt(function(selector) {
13474              *   return document.querySelectorAll(selector);
13475              * }, '>_>');
13476              *
13477              * if (_.isError(elements)) {
13478              *   elements = [];
13479              * }
13480              */
13481             var attempt = restParam(function(func, args) {
13482               try {
13483                 return func.apply(undefined, args);
13484               } catch(e) {
13485                 return isError(e) ? e : new Error(e);
13486               }
13487             });
13488
13489             /**
13490              * Creates a function that invokes `func` with the `this` binding of `thisArg`
13491              * and arguments of the created function. If `func` is a property name the
13492              * created callback returns the property value for a given element. If `func`
13493              * is an object the created callback returns `true` for elements that contain
13494              * the equivalent object properties, otherwise it returns `false`.
13495              *
13496              * @static
13497              * @memberOf _
13498              * @alias iteratee
13499              * @category Utility
13500              * @param {*} [func=_.identity] The value to convert to a callback.
13501              * @param {*} [thisArg] The `this` binding of `func`.
13502              * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
13503              * @returns {Function} Returns the callback.
13504              * @example
13505              *
13506              * var users = [
13507              *   { 'user': 'barney', 'age': 36 },
13508              *   { 'user': 'fred',   'age': 40 }
13509              * ];
13510              *
13511              * // wrap to create custom callback shorthands
13512              * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {
13513              *   var match = /^(.+?)__([gl]t)(.+)$/.exec(func);
13514              *   if (!match) {
13515              *     return callback(func, thisArg);
13516              *   }
13517              *   return function(object) {
13518              *     return match[2] == 'gt'
13519              *       ? object[match[1]] > match[3]
13520              *       : object[match[1]] < match[3];
13521              *   };
13522              * });
13523              *
13524              * _.filter(users, 'age__gt36');
13525              * // => [{ 'user': 'fred', 'age': 40 }]
13526              */
13527             function callback(func, thisArg, guard) {
13528               if (guard && isIterateeCall(func, thisArg, guard)) {
13529                 thisArg = undefined;
13530               }
13531               return isObjectLike(func)
13532                 ? matches(func)
13533                 : baseCallback(func, thisArg);
13534             }
13535
13536             /**
13537              * Creates a function that returns `value`.
13538              *
13539              * @static
13540              * @memberOf _
13541              * @category Utility
13542              * @param {*} value The value to return from the new function.
13543              * @returns {Function} Returns the new function.
13544              * @example
13545              *
13546              * var object = { 'user': 'fred' };
13547              * var getter = _.constant(object);
13548              *
13549              * getter() === object;
13550              * // => true
13551              */
13552             function constant(value) {
13553               return function() {
13554                 return value;
13555               };
13556             }
13557
13558             /**
13559              * This method returns the first argument provided to it.
13560              *
13561              * @static
13562              * @memberOf _
13563              * @category Utility
13564              * @param {*} value Any value.
13565              * @returns {*} Returns `value`.
13566              * @example
13567              *
13568              * var object = { 'user': 'fred' };
13569              *
13570              * _.identity(object) === object;
13571              * // => true
13572              */
13573             function identity(value) {
13574               return value;
13575             }
13576
13577             /**
13578              * Creates a function that performs a deep comparison between a given object
13579              * and `source`, returning `true` if the given object has equivalent property
13580              * values, else `false`.
13581              *
13582              * **Note:** This method supports comparing arrays, booleans, `Date` objects,
13583              * numbers, `Object` objects, regexes, and strings. Objects are compared by
13584              * their own, not inherited, enumerable properties. For comparing a single
13585              * own or inherited property value see `_.matchesProperty`.
13586              *
13587              * @static
13588              * @memberOf _
13589              * @category Utility
13590              * @param {Object} source The object of property values to match.
13591              * @returns {Function} Returns the new function.
13592              * @example
13593              *
13594              * var users = [
13595              *   { 'user': 'barney', 'age': 36, 'active': true },
13596              *   { 'user': 'fred',   'age': 40, 'active': false }
13597              * ];
13598              *
13599              * _.filter(users, _.matches({ 'age': 40, 'active': false }));
13600              * // => [{ 'user': 'fred', 'age': 40, 'active': false }]
13601              */
13602             function matches(source) {
13603               return baseMatches(baseClone(source, true));
13604             }
13605
13606             /**
13607              * Creates a function that compares the property value of `path` on a given
13608              * object to `value`.
13609              *
13610              * **Note:** This method supports comparing arrays, booleans, `Date` objects,
13611              * numbers, `Object` objects, regexes, and strings. Objects are compared by
13612              * their own, not inherited, enumerable properties.
13613              *
13614              * @static
13615              * @memberOf _
13616              * @category Utility
13617              * @param {Array|string} path The path of the property to get.
13618              * @param {*} srcValue The value to match.
13619              * @returns {Function} Returns the new function.
13620              * @example
13621              *
13622              * var users = [
13623              *   { 'user': 'barney' },
13624              *   { 'user': 'fred' }
13625              * ];
13626              *
13627              * _.find(users, _.matchesProperty('user', 'fred'));
13628              * // => { 'user': 'fred' }
13629              */
13630             function matchesProperty(path, srcValue) {
13631               return baseMatchesProperty(path, baseClone(srcValue, true));
13632             }
13633
13634             /**
13635              * Creates a function that invokes the method at `path` on a given object.
13636              * Any additional arguments are provided to the invoked method.
13637              *
13638              * @static
13639              * @memberOf _
13640              * @category Utility
13641              * @param {Array|string} path The path of the method to invoke.
13642              * @param {...*} [args] The arguments to invoke the method with.
13643              * @returns {Function} Returns the new function.
13644              * @example
13645              *
13646              * var objects = [
13647              *   { 'a': { 'b': { 'c': _.constant(2) } } },
13648              *   { 'a': { 'b': { 'c': _.constant(1) } } }
13649              * ];
13650              *
13651              * _.map(objects, _.method('a.b.c'));
13652              * // => [2, 1]
13653              *
13654              * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');
13655              * // => [1, 2]
13656              */
13657             var method = restParam(function(path, args) {
13658               return function(object) {
13659                 return invokePath(object, path, args);
13660               };
13661             });
13662
13663             /**
13664              * The opposite of `_.method`; this method creates a function that invokes
13665              * the method at a given path on `object`. Any additional arguments are
13666              * provided to the invoked method.
13667              *
13668              * @static
13669              * @memberOf _
13670              * @category Utility
13671              * @param {Object} object The object to query.
13672              * @param {...*} [args] The arguments to invoke the method with.
13673              * @returns {Function} Returns the new function.
13674              * @example
13675              *
13676              * var array = _.times(3, _.constant),
13677              *     object = { 'a': array, 'b': array, 'c': array };
13678              *
13679              * _.map(['a[2]', 'c[0]'], _.methodOf(object));
13680              * // => [2, 0]
13681              *
13682              * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
13683              * // => [2, 0]
13684              */
13685             var methodOf = restParam(function(object, args) {
13686               return function(path) {
13687                 return invokePath(object, path, args);
13688               };
13689             });
13690
13691             /**
13692              * Adds all own enumerable function properties of a source object to the
13693              * destination object. If `object` is a function then methods are added to
13694              * its prototype as well.
13695              *
13696              * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
13697              * avoid conflicts caused by modifying the original.
13698              *
13699              * @static
13700              * @memberOf _
13701              * @category Utility
13702              * @param {Function|Object} [object=lodash] The destination object.
13703              * @param {Object} source The object of functions to add.
13704              * @param {Object} [options] The options object.
13705              * @param {boolean} [options.chain=true] Specify whether the functions added
13706              *  are chainable.
13707              * @returns {Function|Object} Returns `object`.
13708              * @example
13709              *
13710              * function vowels(string) {
13711              *   return _.filter(string, function(v) {
13712              *     return /[aeiou]/i.test(v);
13713              *   });
13714              * }
13715              *
13716              * _.mixin({ 'vowels': vowels });
13717              * _.vowels('fred');
13718              * // => ['e']
13719              *
13720              * _('fred').vowels().value();
13721              * // => ['e']
13722              *
13723              * _.mixin({ 'vowels': vowels }, { 'chain': false });
13724              * _('fred').vowels();
13725              * // => ['e']
13726              */
13727             function mixin(object, source, options) {
13728               if (options == null) {
13729                 var isObj = isObject(source),
13730                     props = isObj ? keys(source) : undefined,
13731                     methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;
13732
13733                 if (!(methodNames ? methodNames.length : isObj)) {
13734                   methodNames = false;
13735                   options = source;
13736                   source = object;
13737                   object = this;
13738                 }
13739               }
13740               if (!methodNames) {
13741                 methodNames = baseFunctions(source, keys(source));
13742               }
13743               var chain = true,
13744                   index = -1,
13745                   isFunc = isFunction(object),
13746                   length = methodNames.length;
13747
13748               if (options === false) {
13749                 chain = false;
13750               } else if (isObject(options) && 'chain' in options) {
13751                 chain = options.chain;
13752               }
13753               while (++index < length) {
13754                 var methodName = methodNames[index],
13755                     func = source[methodName];
13756
13757                 object[methodName] = func;
13758                 if (isFunc) {
13759                   object.prototype[methodName] = (function(func) {
13760                     return function() {
13761                       var chainAll = this.__chain__;
13762                       if (chain || chainAll) {
13763                         var result = object(this.__wrapped__),
13764                             actions = result.__actions__ = arrayCopy(this.__actions__);
13765
13766                         actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
13767                         result.__chain__ = chainAll;
13768                         return result;
13769                       }
13770                       return func.apply(object, arrayPush([this.value()], arguments));
13771                     };
13772                   }(func));
13773                 }
13774               }
13775               return object;
13776             }
13777
13778             /**
13779              * Reverts the `_` variable to its previous value and returns a reference to
13780              * the `lodash` function.
13781              *
13782              * @static
13783              * @memberOf _
13784              * @category Utility
13785              * @returns {Function} Returns the `lodash` function.
13786              * @example
13787              *
13788              * var lodash = _.noConflict();
13789              */
13790             function noConflict() {
13791               root._ = oldDash;
13792               return this;
13793             }
13794
13795             /**
13796              * A no-operation function that returns `undefined` regardless of the
13797              * arguments it receives.
13798              *
13799              * @static
13800              * @memberOf _
13801              * @category Utility
13802              * @example
13803              *
13804              * var object = { 'user': 'fred' };
13805              *
13806              * _.noop(object) === undefined;
13807              * // => true
13808              */
13809             function noop() {
13810               // No operation performed.
13811             }
13812
13813             /**
13814              * Creates a function that returns the property value at `path` on a
13815              * given object.
13816              *
13817              * @static
13818              * @memberOf _
13819              * @category Utility
13820              * @param {Array|string} path The path of the property to get.
13821              * @returns {Function} Returns the new function.
13822              * @example
13823              *
13824              * var objects = [
13825              *   { 'a': { 'b': { 'c': 2 } } },
13826              *   { 'a': { 'b': { 'c': 1 } } }
13827              * ];
13828              *
13829              * _.map(objects, _.property('a.b.c'));
13830              * // => [2, 1]
13831              *
13832              * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
13833              * // => [1, 2]
13834              */
13835             function property(path) {
13836               return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
13837             }
13838
13839             /**
13840              * The opposite of `_.property`; this method creates a function that returns
13841              * the property value at a given path on `object`.
13842              *
13843              * @static
13844              * @memberOf _
13845              * @category Utility
13846              * @param {Object} object The object to query.
13847              * @returns {Function} Returns the new function.
13848              * @example
13849              *
13850              * var array = [0, 1, 2],
13851              *     object = { 'a': array, 'b': array, 'c': array };
13852              *
13853              * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
13854              * // => [2, 0]
13855              *
13856              * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
13857              * // => [2, 0]
13858              */
13859             function propertyOf(object) {
13860               return function(path) {
13861                 return baseGet(object, toPath(path), path + '');
13862               };
13863             }
13864
13865             /**
13866              * Creates an array of numbers (positive and/or negative) progressing from
13867              * `start` up to, but not including, `end`. If `end` is not specified it is
13868              * set to `start` with `start` then set to `0`. If `end` is less than `start`
13869              * a zero-length range is created unless a negative `step` is specified.
13870              *
13871              * @static
13872              * @memberOf _
13873              * @category Utility
13874              * @param {number} [start=0] The start of the range.
13875              * @param {number} end The end of the range.
13876              * @param {number} [step=1] The value to increment or decrement by.
13877              * @returns {Array} Returns the new array of numbers.
13878              * @example
13879              *
13880              * _.range(4);
13881              * // => [0, 1, 2, 3]
13882              *
13883              * _.range(1, 5);
13884              * // => [1, 2, 3, 4]
13885              *
13886              * _.range(0, 20, 5);
13887              * // => [0, 5, 10, 15]
13888              *
13889              * _.range(0, -4, -1);
13890              * // => [0, -1, -2, -3]
13891              *
13892              * _.range(1, 4, 0);
13893              * // => [1, 1, 1]
13894              *
13895              * _.range(0);
13896              * // => []
13897              */
13898             function range(start, end, step) {
13899               if (step && isIterateeCall(start, end, step)) {
13900                 end = step = undefined;
13901               }
13902               start = +start || 0;
13903               step = step == null ? 1 : (+step || 0);
13904
13905               if (end == null) {
13906                 end = start;
13907                 start = 0;
13908               } else {
13909                 end = +end || 0;
13910               }
13911               // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.
13912               // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.
13913               var index = -1,
13914                   length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
13915                   result = Array(length);
13916
13917               while (++index < length) {
13918                 result[index] = start;
13919                 start += step;
13920               }
13921               return result;
13922             }
13923
13924             /**
13925              * Invokes the iteratee function `n` times, returning an array of the results
13926              * of each invocation. The `iteratee` is bound to `thisArg` and invoked with
13927              * one argument; (index).
13928              *
13929              * @static
13930              * @memberOf _
13931              * @category Utility
13932              * @param {number} n The number of times to invoke `iteratee`.
13933              * @param {Function} [iteratee=_.identity] The function invoked per iteration.
13934              * @param {*} [thisArg] The `this` binding of `iteratee`.
13935              * @returns {Array} Returns the array of results.
13936              * @example
13937              *
13938              * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));
13939              * // => [3, 6, 4]
13940              *
13941              * _.times(3, function(n) {
13942              *   mage.castSpell(n);
13943              * });
13944              * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`
13945              *
13946              * _.times(3, function(n) {
13947              *   this.cast(n);
13948              * }, mage);
13949              * // => also invokes `mage.castSpell(n)` three times
13950              */
13951             function times(n, iteratee, thisArg) {
13952               n = nativeFloor(n);
13953
13954               // Exit early to avoid a JSC JIT bug in Safari 8
13955               // where `Array(0)` is treated as `Array(1)`.
13956               if (n < 1 || !nativeIsFinite(n)) {
13957                 return [];
13958               }
13959               var index = -1,
13960                   result = Array(nativeMin(n, MAX_ARRAY_LENGTH));
13961
13962               iteratee = bindCallback(iteratee, thisArg, 1);
13963               while (++index < n) {
13964                 if (index < MAX_ARRAY_LENGTH) {
13965                   result[index] = iteratee(index);
13966                 } else {
13967                   iteratee(index);
13968                 }
13969               }
13970               return result;
13971             }
13972
13973             /**
13974              * Generates a unique ID. If `prefix` is provided the ID is appended to it.
13975              *
13976              * @static
13977              * @memberOf _
13978              * @category Utility
13979              * @param {string} [prefix] The value to prefix the ID with.
13980              * @returns {string} Returns the unique ID.
13981              * @example
13982              *
13983              * _.uniqueId('contact_');
13984              * // => 'contact_104'
13985              *
13986              * _.uniqueId();
13987              * // => '105'
13988              */
13989             function uniqueId(prefix) {
13990               var id = ++idCounter;
13991               return baseToString(prefix) + id;
13992             }
13993
13994             /*------------------------------------------------------------------------*/
13995
13996             /**
13997              * Adds two numbers.
13998              *
13999              * @static
14000              * @memberOf _
14001              * @category Math
14002              * @param {number} augend The first number to add.
14003              * @param {number} addend The second number to add.
14004              * @returns {number} Returns the sum.
14005              * @example
14006              *
14007              * _.add(6, 4);
14008              * // => 10
14009              */
14010             function add(augend, addend) {
14011               return (+augend || 0) + (+addend || 0);
14012             }
14013
14014             /**
14015              * Calculates `n` rounded up to `precision`.
14016              *
14017              * @static
14018              * @memberOf _
14019              * @category Math
14020              * @param {number} n The number to round up.
14021              * @param {number} [precision=0] The precision to round up to.
14022              * @returns {number} Returns the rounded up number.
14023              * @example
14024              *
14025              * _.ceil(4.006);
14026              * // => 5
14027              *
14028              * _.ceil(6.004, 2);
14029              * // => 6.01
14030              *
14031              * _.ceil(6040, -2);
14032              * // => 6100
14033              */
14034             var ceil = createRound('ceil');
14035
14036             /**
14037              * Calculates `n` rounded down to `precision`.
14038              *
14039              * @static
14040              * @memberOf _
14041              * @category Math
14042              * @param {number} n The number to round down.
14043              * @param {number} [precision=0] The precision to round down to.
14044              * @returns {number} Returns the rounded down number.
14045              * @example
14046              *
14047              * _.floor(4.006);
14048              * // => 4
14049              *
14050              * _.floor(0.046, 2);
14051              * // => 0.04
14052              *
14053              * _.floor(4060, -2);
14054              * // => 4000
14055              */
14056             var floor = createRound('floor');
14057
14058             /**
14059              * Gets the maximum value of `collection`. If `collection` is empty or falsey
14060              * `-Infinity` is returned. If an iteratee function is provided it is invoked
14061              * for each value in `collection` to generate the criterion by which the value
14062              * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
14063              * arguments: (value, index, collection).
14064              *
14065              * If a property name is provided for `iteratee` the created `_.property`
14066              * style callback returns the property value of the given element.
14067              *
14068              * If a value is also provided for `thisArg` the created `_.matchesProperty`
14069              * style callback returns `true` for elements that have a matching property
14070              * value, else `false`.
14071              *
14072              * If an object is provided for `iteratee` the created `_.matches` style
14073              * callback returns `true` for elements that have the properties of the given
14074              * object, else `false`.
14075              *
14076              * @static
14077              * @memberOf _
14078              * @category Math
14079              * @param {Array|Object|string} collection The collection to iterate over.
14080              * @param {Function|Object|string} [iteratee] The function invoked per iteration.
14081              * @param {*} [thisArg] The `this` binding of `iteratee`.
14082              * @returns {*} Returns the maximum value.
14083              * @example
14084              *
14085              * _.max([4, 2, 8, 6]);
14086              * // => 8
14087              *
14088              * _.max([]);
14089              * // => -Infinity
14090              *
14091              * var users = [
14092              *   { 'user': 'barney', 'age': 36 },
14093              *   { 'user': 'fred',   'age': 40 }
14094              * ];
14095              *
14096              * _.max(users, function(chr) {
14097              *   return chr.age;
14098              * });
14099              * // => { 'user': 'fred', 'age': 40 }
14100              *
14101              * // using the `_.property` callback shorthand
14102              * _.max(users, 'age');
14103              * // => { 'user': 'fred', 'age': 40 }
14104              */
14105             var max = createExtremum(gt, NEGATIVE_INFINITY);
14106
14107             /**
14108              * Gets the minimum value of `collection`. If `collection` is empty or falsey
14109              * `Infinity` is returned. If an iteratee function is provided it is invoked
14110              * for each value in `collection` to generate the criterion by which the value
14111              * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
14112              * arguments: (value, index, collection).
14113              *
14114              * If a property name is provided for `iteratee` the created `_.property`
14115              * style callback returns the property value of the given element.
14116              *
14117              * If a value is also provided for `thisArg` the created `_.matchesProperty`
14118              * style callback returns `true` for elements that have a matching property
14119              * value, else `false`.
14120              *
14121              * If an object is provided for `iteratee` the created `_.matches` style
14122              * callback returns `true` for elements that have the properties of the given
14123              * object, else `false`.
14124              *
14125              * @static
14126              * @memberOf _
14127              * @category Math
14128              * @param {Array|Object|string} collection The collection to iterate over.
14129              * @param {Function|Object|string} [iteratee] The function invoked per iteration.
14130              * @param {*} [thisArg] The `this` binding of `iteratee`.
14131              * @returns {*} Returns the minimum value.
14132              * @example
14133              *
14134              * _.min([4, 2, 8, 6]);
14135              * // => 2
14136              *
14137              * _.min([]);
14138              * // => Infinity
14139              *
14140              * var users = [
14141              *   { 'user': 'barney', 'age': 36 },
14142              *   { 'user': 'fred',   'age': 40 }
14143              * ];
14144              *
14145              * _.min(users, function(chr) {
14146              *   return chr.age;
14147              * });
14148              * // => { 'user': 'barney', 'age': 36 }
14149              *
14150              * // using the `_.property` callback shorthand
14151              * _.min(users, 'age');
14152              * // => { 'user': 'barney', 'age': 36 }
14153              */
14154             var min = createExtremum(lt, POSITIVE_INFINITY);
14155
14156             /**
14157              * Calculates `n` rounded to `precision`.
14158              *
14159              * @static
14160              * @memberOf _
14161              * @category Math
14162              * @param {number} n The number to round.
14163              * @param {number} [precision=0] The precision to round to.
14164              * @returns {number} Returns the rounded number.
14165              * @example
14166              *
14167              * _.round(4.006);
14168              * // => 4
14169              *
14170              * _.round(4.006, 2);
14171              * // => 4.01
14172              *
14173              * _.round(4060, -2);
14174              * // => 4100
14175              */
14176             var round = createRound('round');
14177
14178             /**
14179              * Gets the sum of the values in `collection`.
14180              *
14181              * @static
14182              * @memberOf _
14183              * @category Math
14184              * @param {Array|Object|string} collection The collection to iterate over.
14185              * @param {Function|Object|string} [iteratee] The function invoked per iteration.
14186              * @param {*} [thisArg] The `this` binding of `iteratee`.
14187              * @returns {number} Returns the sum.
14188              * @example
14189              *
14190              * _.sum([4, 6]);
14191              * // => 10
14192              *
14193              * _.sum({ 'a': 4, 'b': 6 });
14194              * // => 10
14195              *
14196              * var objects = [
14197              *   { 'n': 4 },
14198              *   { 'n': 6 }
14199              * ];
14200              *
14201              * _.sum(objects, function(object) {
14202              *   return object.n;
14203              * });
14204              * // => 10
14205              *
14206              * // using the `_.property` callback shorthand
14207              * _.sum(objects, 'n');
14208              * // => 10
14209              */
14210             function sum(collection, iteratee, thisArg) {
14211               if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
14212                 iteratee = undefined;
14213               }
14214               iteratee = getCallback(iteratee, thisArg, 3);
14215               return iteratee.length == 1
14216                 ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
14217                 : baseSum(collection, iteratee);
14218             }
14219
14220             /*------------------------------------------------------------------------*/
14221
14222             // Ensure wrappers are instances of `baseLodash`.
14223             lodash.prototype = baseLodash.prototype;
14224
14225             LodashWrapper.prototype = baseCreate(baseLodash.prototype);
14226             LodashWrapper.prototype.constructor = LodashWrapper;
14227
14228             LazyWrapper.prototype = baseCreate(baseLodash.prototype);
14229             LazyWrapper.prototype.constructor = LazyWrapper;
14230
14231             // Add functions to the `Map` cache.
14232             MapCache.prototype['delete'] = mapDelete;
14233             MapCache.prototype.get = mapGet;
14234             MapCache.prototype.has = mapHas;
14235             MapCache.prototype.set = mapSet;
14236
14237             // Add functions to the `Set` cache.
14238             SetCache.prototype.push = cachePush;
14239
14240             // Assign cache to `_.memoize`.
14241             memoize.Cache = MapCache;
14242
14243             // Add functions that return wrapped values when chaining.
14244             lodash.after = after;
14245             lodash.ary = ary;
14246             lodash.assign = assign;
14247             lodash.at = at;
14248             lodash.before = before;
14249             lodash.bind = bind;
14250             lodash.bindAll = bindAll;
14251             lodash.bindKey = bindKey;
14252             lodash.callback = callback;
14253             lodash.chain = chain;
14254             lodash.chunk = chunk;
14255             lodash.compact = compact;
14256             lodash.constant = constant;
14257             lodash.countBy = countBy;
14258             lodash.create = create;
14259             lodash.curry = curry;
14260             lodash.curryRight = curryRight;
14261             lodash.debounce = debounce;
14262             lodash.defaults = defaults;
14263             lodash.defaultsDeep = defaultsDeep;
14264             lodash.defer = defer;
14265             lodash.delay = delay;
14266             lodash.difference = difference;
14267             lodash.drop = drop;
14268             lodash.dropRight = dropRight;
14269             lodash.dropRightWhile = dropRightWhile;
14270             lodash.dropWhile = dropWhile;
14271             lodash.fill = fill;
14272             lodash.filter = filter;
14273             lodash.flatten = flatten;
14274             lodash.flattenDeep = flattenDeep;
14275             lodash.flow = flow;
14276             lodash.flowRight = flowRight;
14277             lodash.forEach = forEach;
14278             lodash.forEachRight = forEachRight;
14279             lodash.forIn = forIn;
14280             lodash.forInRight = forInRight;
14281             lodash.forOwn = forOwn;
14282             lodash.forOwnRight = forOwnRight;
14283             lodash.functions = functions;
14284             lodash.groupBy = groupBy;
14285             lodash.indexBy = indexBy;
14286             lodash.initial = initial;
14287             lodash.intersection = intersection;
14288             lodash.invert = invert;
14289             lodash.invoke = invoke;
14290             lodash.keys = keys;
14291             lodash.keysIn = keysIn;
14292             lodash.map = map;
14293             lodash.mapKeys = mapKeys;
14294             lodash.mapValues = mapValues;
14295             lodash.matches = matches;
14296             lodash.matchesProperty = matchesProperty;
14297             lodash.memoize = memoize;
14298             lodash.merge = merge;
14299             lodash.method = method;
14300             lodash.methodOf = methodOf;
14301             lodash.mixin = mixin;
14302             lodash.modArgs = modArgs;
14303             lodash.negate = negate;
14304             lodash.omit = omit;
14305             lodash.once = once;
14306             lodash.pairs = pairs;
14307             lodash.partial = partial;
14308             lodash.partialRight = partialRight;
14309             lodash.partition = partition;
14310             lodash.pick = pick;
14311             lodash.pluck = pluck;
14312             lodash.property = property;
14313             lodash.propertyOf = propertyOf;
14314             lodash.pull = pull;
14315             lodash.pullAt = pullAt;
14316             lodash.range = range;
14317             lodash.rearg = rearg;
14318             lodash.reject = reject;
14319             lodash.remove = remove;
14320             lodash.rest = rest;
14321             lodash.restParam = restParam;
14322             lodash.set = set;
14323             lodash.shuffle = shuffle;
14324             lodash.slice = slice;
14325             lodash.sortBy = sortBy;
14326             lodash.sortByAll = sortByAll;
14327             lodash.sortByOrder = sortByOrder;
14328             lodash.spread = spread;
14329             lodash.take = take;
14330             lodash.takeRight = takeRight;
14331             lodash.takeRightWhile = takeRightWhile;
14332             lodash.takeWhile = takeWhile;
14333             lodash.tap = tap;
14334             lodash.throttle = throttle;
14335             lodash.thru = thru;
14336             lodash.times = times;
14337             lodash.toArray = toArray;
14338             lodash.toPlainObject = toPlainObject;
14339             lodash.transform = transform;
14340             lodash.union = union;
14341             lodash.uniq = uniq;
14342             lodash.unzip = unzip;
14343             lodash.unzipWith = unzipWith;
14344             lodash.values = values;
14345             lodash.valuesIn = valuesIn;
14346             lodash.where = where;
14347             lodash.without = without;
14348             lodash.wrap = wrap;
14349             lodash.xor = xor;
14350             lodash.zip = zip;
14351             lodash.zipObject = zipObject;
14352             lodash.zipWith = zipWith;
14353
14354             // Add aliases.
14355             lodash.backflow = flowRight;
14356             lodash.collect = map;
14357             lodash.compose = flowRight;
14358             lodash.each = forEach;
14359             lodash.eachRight = forEachRight;
14360             lodash.extend = assign;
14361             lodash.iteratee = callback;
14362             lodash.methods = functions;
14363             lodash.object = zipObject;
14364             lodash.select = filter;
14365             lodash.tail = rest;
14366             lodash.unique = uniq;
14367
14368             // Add functions to `lodash.prototype`.
14369             mixin(lodash, lodash);
14370
14371             /*------------------------------------------------------------------------*/
14372
14373             // Add functions that return unwrapped values when chaining.
14374             lodash.add = add;
14375             lodash.attempt = attempt;
14376             lodash.camelCase = camelCase;
14377             lodash.capitalize = capitalize;
14378             lodash.ceil = ceil;
14379             lodash.clone = clone;
14380             lodash.cloneDeep = cloneDeep;
14381             lodash.deburr = deburr;
14382             lodash.endsWith = endsWith;
14383             lodash.escape = escape;
14384             lodash.escapeRegExp = escapeRegExp;
14385             lodash.every = every;
14386             lodash.find = find;
14387             lodash.findIndex = findIndex;
14388             lodash.findKey = findKey;
14389             lodash.findLast = findLast;
14390             lodash.findLastIndex = findLastIndex;
14391             lodash.findLastKey = findLastKey;
14392             lodash.findWhere = findWhere;
14393             lodash.first = first;
14394             lodash.floor = floor;
14395             lodash.get = get;
14396             lodash.gt = gt;
14397             lodash.gte = gte;
14398             lodash.has = has;
14399             lodash.identity = identity;
14400             lodash.includes = includes;
14401             lodash.indexOf = indexOf;
14402             lodash.inRange = inRange;
14403             lodash.isArguments = isArguments;
14404             lodash.isArray = isArray;
14405             lodash.isBoolean = isBoolean;
14406             lodash.isDate = isDate;
14407             lodash.isElement = isElement;
14408             lodash.isEmpty = isEmpty;
14409             lodash.isEqual = isEqual;
14410             lodash.isError = isError;
14411             lodash.isFinite = isFinite;
14412             lodash.isFunction = isFunction;
14413             lodash.isMatch = isMatch;
14414             lodash.isNaN = isNaN;
14415             lodash.isNative = isNative;
14416             lodash.isNull = isNull;
14417             lodash.isNumber = isNumber;
14418             lodash.isObject = isObject;
14419             lodash.isPlainObject = isPlainObject;
14420             lodash.isRegExp = isRegExp;
14421             lodash.isString = isString;
14422             lodash.isTypedArray = isTypedArray;
14423             lodash.isUndefined = isUndefined;
14424             lodash.kebabCase = kebabCase;
14425             lodash.last = last;
14426             lodash.lastIndexOf = lastIndexOf;
14427             lodash.lt = lt;
14428             lodash.lte = lte;
14429             lodash.max = max;
14430             lodash.min = min;
14431             lodash.noConflict = noConflict;
14432             lodash.noop = noop;
14433             lodash.now = now;
14434             lodash.pad = pad;
14435             lodash.padLeft = padLeft;
14436             lodash.padRight = padRight;
14437             lodash.parseInt = parseInt;
14438             lodash.random = random;
14439             lodash.reduce = reduce;
14440             lodash.reduceRight = reduceRight;
14441             lodash.repeat = repeat;
14442             lodash.result = result;
14443             lodash.round = round;
14444             lodash.runInContext = runInContext;
14445             lodash.size = size;
14446             lodash.snakeCase = snakeCase;
14447             lodash.some = some;
14448             lodash.sortedIndex = sortedIndex;
14449             lodash.sortedLastIndex = sortedLastIndex;
14450             lodash.startCase = startCase;
14451             lodash.startsWith = startsWith;
14452             lodash.sum = sum;
14453             lodash.template = template;
14454             lodash.trim = trim;
14455             lodash.trimLeft = trimLeft;
14456             lodash.trimRight = trimRight;
14457             lodash.trunc = trunc;
14458             lodash.unescape = unescape;
14459             lodash.uniqueId = uniqueId;
14460             lodash.words = words;
14461
14462             // Add aliases.
14463             lodash.all = every;
14464             lodash.any = some;
14465             lodash.contains = includes;
14466             lodash.eq = isEqual;
14467             lodash.detect = find;
14468             lodash.foldl = reduce;
14469             lodash.foldr = reduceRight;
14470             lodash.head = first;
14471             lodash.include = includes;
14472             lodash.inject = reduce;
14473
14474             mixin(lodash, (function() {
14475               var source = {};
14476               baseForOwn(lodash, function(func, methodName) {
14477                 if (!lodash.prototype[methodName]) {
14478                   source[methodName] = func;
14479                 }
14480               });
14481               return source;
14482             }()), false);
14483
14484             /*------------------------------------------------------------------------*/
14485
14486             // Add functions capable of returning wrapped and unwrapped values when chaining.
14487             lodash.sample = sample;
14488
14489             lodash.prototype.sample = function(n) {
14490               if (!this.__chain__ && n == null) {
14491                 return sample(this.value());
14492               }
14493               return this.thru(function(value) {
14494                 return sample(value, n);
14495               });
14496             };
14497
14498             /*------------------------------------------------------------------------*/
14499
14500             /**
14501              * The semantic version number.
14502              *
14503              * @static
14504              * @memberOf _
14505              * @type string
14506              */
14507             lodash.VERSION = VERSION;
14508
14509             // Assign default placeholders.
14510             arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
14511               lodash[methodName].placeholder = lodash;
14512             });
14513
14514             // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
14515             arrayEach(['drop', 'take'], function(methodName, index) {
14516               LazyWrapper.prototype[methodName] = function(n) {
14517                 var filtered = this.__filtered__;
14518                 if (filtered && !index) {
14519                   return new LazyWrapper(this);
14520                 }
14521                 n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);
14522
14523                 var result = this.clone();
14524                 if (filtered) {
14525                   result.__takeCount__ = nativeMin(result.__takeCount__, n);
14526                 } else {
14527                   result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });
14528                 }
14529                 return result;
14530               };
14531
14532               LazyWrapper.prototype[methodName + 'Right'] = function(n) {
14533                 return this.reverse()[methodName](n).reverse();
14534               };
14535             });
14536
14537             // Add `LazyWrapper` methods that accept an `iteratee` value.
14538             arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
14539               var type = index + 1,
14540                   isFilter = type != LAZY_MAP_FLAG;
14541
14542               LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
14543                 var result = this.clone();
14544                 result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });
14545                 result.__filtered__ = result.__filtered__ || isFilter;
14546                 return result;
14547               };
14548             });
14549
14550             // Add `LazyWrapper` methods for `_.first` and `_.last`.
14551             arrayEach(['first', 'last'], function(methodName, index) {
14552               var takeName = 'take' + (index ? 'Right' : '');
14553
14554               LazyWrapper.prototype[methodName] = function() {
14555                 return this[takeName](1).value()[0];
14556               };
14557             });
14558
14559             // Add `LazyWrapper` methods for `_.initial` and `_.rest`.
14560             arrayEach(['initial', 'rest'], function(methodName, index) {
14561               var dropName = 'drop' + (index ? '' : 'Right');
14562
14563               LazyWrapper.prototype[methodName] = function() {
14564                 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
14565               };
14566             });
14567
14568             // Add `LazyWrapper` methods for `_.pluck` and `_.where`.
14569             arrayEach(['pluck', 'where'], function(methodName, index) {
14570               var operationName = index ? 'filter' : 'map',
14571                   createCallback = index ? baseMatches : property;
14572
14573               LazyWrapper.prototype[methodName] = function(value) {
14574                 return this[operationName](createCallback(value));
14575               };
14576             });
14577
14578             LazyWrapper.prototype.compact = function() {
14579               return this.filter(identity);
14580             };
14581
14582             LazyWrapper.prototype.reject = function(predicate, thisArg) {
14583               predicate = getCallback(predicate, thisArg, 1);
14584               return this.filter(function(value) {
14585                 return !predicate(value);
14586               });
14587             };
14588
14589             LazyWrapper.prototype.slice = function(start, end) {
14590               start = start == null ? 0 : (+start || 0);
14591
14592               var result = this;
14593               if (result.__filtered__ && (start > 0 || end < 0)) {
14594                 return new LazyWrapper(result);
14595               }
14596               if (start < 0) {
14597                 result = result.takeRight(-start);
14598               } else if (start) {
14599                 result = result.drop(start);
14600               }
14601               if (end !== undefined) {
14602                 end = (+end || 0);
14603                 result = end < 0 ? result.dropRight(-end) : result.take(end - start);
14604               }
14605               return result;
14606             };
14607
14608             LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {
14609               return this.reverse().takeWhile(predicate, thisArg).reverse();
14610             };
14611
14612             LazyWrapper.prototype.toArray = function() {
14613               return this.take(POSITIVE_INFINITY);
14614             };
14615
14616             // Add `LazyWrapper` methods to `lodash.prototype`.
14617             baseForOwn(LazyWrapper.prototype, function(func, methodName) {
14618               var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
14619                   retUnwrapped = /^(?:first|last)$/.test(methodName),
14620                   lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];
14621
14622               if (!lodashFunc) {
14623                 return;
14624               }
14625               lodash.prototype[methodName] = function() {
14626                 var args = retUnwrapped ? [1] : arguments,
14627                     chainAll = this.__chain__,
14628                     value = this.__wrapped__,
14629                     isHybrid = !!this.__actions__.length,
14630                     isLazy = value instanceof LazyWrapper,
14631                     iteratee = args[0],
14632                     useLazy = isLazy || isArray(value);
14633
14634                 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
14635                   // Avoid lazy use if the iteratee has a "length" value other than `1`.
14636                   isLazy = useLazy = false;
14637                 }
14638                 var interceptor = function(value) {
14639                   return (retUnwrapped && chainAll)
14640                     ? lodashFunc(value, 1)[0]
14641                     : lodashFunc.apply(undefined, arrayPush([value], args));
14642                 };
14643
14644                 var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },
14645                     onlyLazy = isLazy && !isHybrid;
14646
14647                 if (retUnwrapped && !chainAll) {
14648                   if (onlyLazy) {
14649                     value = value.clone();
14650                     value.__actions__.push(action);
14651                     return func.call(value);
14652                   }
14653                   return lodashFunc.call(undefined, this.value())[0];
14654                 }
14655                 if (!retUnwrapped && useLazy) {
14656                   value = onlyLazy ? value : new LazyWrapper(this);
14657                   var result = func.apply(value, args);
14658                   result.__actions__.push(action);
14659                   return new LodashWrapper(result, chainAll);
14660                 }
14661                 return this.thru(interceptor);
14662               };
14663             });
14664
14665             // Add `Array` and `String` methods to `lodash.prototype`.
14666             arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {
14667               var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],
14668                   chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
14669                   retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);
14670
14671               lodash.prototype[methodName] = function() {
14672                 var args = arguments;
14673                 if (retUnwrapped && !this.__chain__) {
14674                   return func.apply(this.value(), args);
14675                 }
14676                 return this[chainName](function(value) {
14677                   return func.apply(value, args);
14678                 });
14679               };
14680             });
14681
14682             // Map minified function names to their real names.
14683             baseForOwn(LazyWrapper.prototype, function(func, methodName) {
14684               var lodashFunc = lodash[methodName];
14685               if (lodashFunc) {
14686                 var key = lodashFunc.name,
14687                     names = realNames[key] || (realNames[key] = []);
14688
14689                 names.push({ 'name': methodName, 'func': lodashFunc });
14690               }
14691             });
14692
14693             realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];
14694
14695             // Add functions to the lazy wrapper.
14696             LazyWrapper.prototype.clone = lazyClone;
14697             LazyWrapper.prototype.reverse = lazyReverse;
14698             LazyWrapper.prototype.value = lazyValue;
14699
14700             // Add chaining functions to the `lodash` wrapper.
14701             lodash.prototype.chain = wrapperChain;
14702             lodash.prototype.commit = wrapperCommit;
14703             lodash.prototype.concat = wrapperConcat;
14704             lodash.prototype.plant = wrapperPlant;
14705             lodash.prototype.reverse = wrapperReverse;
14706             lodash.prototype.toString = wrapperToString;
14707             lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
14708
14709             // Add function aliases to the `lodash` wrapper.
14710             lodash.prototype.collect = lodash.prototype.map;
14711             lodash.prototype.head = lodash.prototype.first;
14712             lodash.prototype.select = lodash.prototype.filter;
14713             lodash.prototype.tail = lodash.prototype.rest;
14714
14715             return lodash;
14716           }
14717
14718           /*--------------------------------------------------------------------------*/
14719
14720           // Export lodash.
14721           var _ = runInContext();
14722
14723           // Some AMD build optimizers like r.js check for condition patterns like the following:
14724           if (true) {
14725             // Expose lodash to the global object when an AMD loader is present to avoid
14726             // errors in cases where lodash is loaded by a script tag and not intended
14727             // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for
14728             // more details.
14729             root._ = _;
14730
14731             // Define as an anonymous module so, through path mapping, it can be
14732             // referenced as the "underscore" module.
14733             !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
14734               return _;
14735             }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
14736           }
14737           // Check for `exports` after `define` in case a build optimizer adds an `exports` object.
14738           else if (freeExports && freeModule) {
14739             // Export for Node.js or RingoJS.
14740             if (moduleExports) {
14741               (freeModule.exports = _)._ = _;
14742             }
14743             // Export for Rhino with CommonJS support.
14744             else {
14745               freeExports._ = _;
14746             }
14747           }
14748           else {
14749             // Export for a browser or Rhino.
14750             root._ = _;
14751           }
14752         }.call(this));
14753
14754         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)(module), (function() { return this; }())))
14755
14756 /***/ },
14757 /* 8 */
14758 /***/ function(module, exports) {
14759
14760         module.exports = function(module) {
14761                 if(!module.webpackPolyfill) {
14762                         module.deprecate = function() {};
14763                         module.paths = [];
14764                         // module.parent = undefined by default
14765                         module.children = [];
14766                         module.webpackPolyfill = 1;
14767                 }
14768                 return module;
14769         }
14770
14771
14772 /***/ },
14773 /* 9 */
14774 /***/ function(module, exports, __webpack_require__) {
14775
14776         /* jslint node: true */
14777         'use strict';
14778
14779         var _ = __webpack_require__(7);
14780         var FontWrapper = __webpack_require__(10);
14781
14782         function typeName(bold, italics){
14783                 var type = 'normal';
14784                 if (bold && italics) type = 'bolditalics';
14785                 else if (bold) type = 'bold';
14786                 else if (italics) type = 'italics';
14787                 return type;
14788         }
14789
14790         function FontProvider(fontDescriptors, pdfDoc) {
14791                 this.fonts = {};
14792                 this.pdfDoc = pdfDoc;
14793                 this.fontWrappers = {};
14794
14795                 for(var font in fontDescriptors) {
14796                         if (fontDescriptors.hasOwnProperty(font)) {
14797                                 var fontDef = fontDescriptors[font];
14798
14799                                 this.fonts[font] = {
14800                                         normal: fontDef.normal,
14801                                         bold: fontDef.bold,
14802                                         italics: fontDef.italics,
14803                                         bolditalics: fontDef.bolditalics
14804                                 };
14805                         }
14806                 }
14807         }
14808
14809         FontProvider.prototype.provideFont = function(familyName, bold, italics) {
14810                 var type = typeName(bold, italics);
14811           if (!this.fonts[familyName] || !this.fonts[familyName][type]) {
14812                         throw new Error('Font \''+ familyName + '\' in style \''+type+ '\' is not defined in the font section of the document definition.');
14813                 }
14814
14815           this.fontWrappers[familyName] = this.fontWrappers[familyName] || {};
14816
14817           if (!this.fontWrappers[familyName][type]) {
14818                         this.fontWrappers[familyName][type] = new FontWrapper(this.pdfDoc, this.fonts[familyName][type], familyName + '(' + type + ')');
14819                 }
14820
14821           return this.fontWrappers[familyName][type];
14822         };
14823
14824         FontProvider.prototype.setFontRefsToPdfDoc = function(){
14825           var self = this;
14826
14827           _.each(self.fontWrappers, function(fontFamily) {
14828             _.each(fontFamily, function(fontWrapper){
14829               _.each(fontWrapper.pdfFonts, function(font){
14830                 if (!self.pdfDoc.page.fonts[font.id]) {
14831                   self.pdfDoc.page.fonts[font.id] = font.ref();
14832                 }
14833               });
14834             });
14835           });
14836         };
14837
14838         module.exports = FontProvider;
14839
14840
14841 /***/ },
14842 /* 10 */
14843 /***/ function(module, exports, __webpack_require__) {
14844
14845         /* jslint node: true */
14846         'use strict';
14847
14848         var _ = __webpack_require__(7);
14849
14850         function FontWrapper(pdfkitDoc, path, fontName){
14851                 this.MAX_CHAR_TYPES = 92;
14852
14853                 this.pdfkitDoc = pdfkitDoc;
14854                 this.path = path;
14855                 this.pdfFonts = [];
14856                 this.charCatalogue = [];
14857                 this.name = fontName;
14858
14859           Object.defineProperty(this, 'ascender', {
14860             get: function () {
14861               var font = this.getFont(0);
14862               return font.ascender;
14863             }
14864           });
14865           Object.defineProperty(this, 'decender', {
14866             get: function () {
14867               var font = this.getFont(0);
14868               return font.decender;
14869             }
14870           });
14871
14872         }
14873         // private
14874
14875         FontWrapper.prototype.getFont = function(index){
14876                 if(!this.pdfFonts[index]){
14877
14878                         var pseudoName = this.name + index;
14879
14880                         if(this.postscriptName){
14881                                 delete this.pdfkitDoc._fontFamilies[this.postscriptName];
14882                         }
14883
14884                         this.pdfFonts[index] = this.pdfkitDoc.font(this.path, pseudoName)._font;
14885                         if(!this.postscriptName){
14886                                 this.postscriptName = this.pdfFonts[index].name;
14887                         }
14888                 }
14889
14890                 return this.pdfFonts[index];
14891         };
14892
14893         // public
14894         FontWrapper.prototype.widthOfString = function(){
14895                 var font = this.getFont(0);
14896                 return font.widthOfString.apply(font, arguments);
14897         };
14898
14899         FontWrapper.prototype.lineHeight = function(){
14900                 var font = this.getFont(0);
14901                 return font.lineHeight.apply(font, arguments);
14902         };
14903
14904         FontWrapper.prototype.ref = function(){
14905                 var font = this.getFont(0);
14906                 return font.ref.apply(font, arguments);
14907         };
14908
14909         var toCharCode = function(char){
14910           return char.charCodeAt(0);
14911         };
14912
14913         FontWrapper.prototype.encode = function(text){
14914           var self = this;
14915
14916           var charTypesInInline = _.chain(text.split('')).map(toCharCode).uniq().value();
14917                 if (charTypesInInline.length > self.MAX_CHAR_TYPES) {
14918                         throw new Error('Inline has more than '+ self.MAX_CHAR_TYPES + ': ' + text + ' different character types and therefore cannot be properly embedded into pdf.');
14919                 }
14920
14921
14922           var characterFitInFontWithIndex = function (charCatalogue) {
14923             return _.uniq(charCatalogue.concat(charTypesInInline)).length <= self.MAX_CHAR_TYPES;
14924           };
14925
14926           var index = _.findIndex(self.charCatalogue, characterFitInFontWithIndex);
14927
14928           if(index < 0){
14929             index = self.charCatalogue.length;
14930             self.charCatalogue[index] = [];
14931           }
14932
14933                 var font = self.getFont(index);
14934                 font.use(text);
14935
14936           _.each(charTypesInInline, function(charCode){
14937             if(!_.includes(self.charCatalogue[index], charCode)){
14938               self.charCatalogue[index].push(charCode);
14939             }
14940           });
14941
14942           var encodedText = _.map(font.encode(text), function (char) {
14943             return char.charCodeAt(0).toString(16);
14944           }).join('');
14945
14946           return {
14947             encodedText: encodedText,
14948             fontId: font.id
14949           };
14950         };
14951
14952
14953         module.exports = FontWrapper;
14954
14955
14956 /***/ },
14957 /* 11 */
14958 /***/ function(module, exports, __webpack_require__) {
14959
14960         /* jslint node: true */
14961         'use strict';
14962
14963         var _ = __webpack_require__(7);
14964         var TraversalTracker = __webpack_require__(12);
14965         var DocMeasure = __webpack_require__(13);
14966         var DocumentContext = __webpack_require__(19);
14967         var PageElementWriter = __webpack_require__(20);
14968         var ColumnCalculator = __webpack_require__(16);
14969         var TableProcessor = __webpack_require__(23);
14970         var Line = __webpack_require__(22);
14971         var pack = __webpack_require__(17).pack;
14972         var offsetVector = __webpack_require__(17).offsetVector;
14973         var fontStringify = __webpack_require__(17).fontStringify;
14974         var isFunction = __webpack_require__(17).isFunction;
14975         var TextTools = __webpack_require__(14);
14976         var StyleContextStack = __webpack_require__(15);
14977
14978         function addAll(target, otherArray){
14979           _.each(otherArray, function(item){
14980             target.push(item);
14981           });
14982         }
14983
14984         /**
14985          * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object
14986          * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF
14987          *
14988          * @param {Object} pageSize - an object defining page width and height
14989          * @param {Object} pageMargins - an object defining top, left, right and bottom margins
14990          */
14991         function LayoutBuilder(pageSize, pageMargins, imageMeasure) {
14992                 this.pageSize = pageSize;
14993                 this.pageMargins = pageMargins;
14994                 this.tracker = new TraversalTracker();
14995             this.imageMeasure = imageMeasure;
14996             this.tableLayouts = {};
14997         }
14998
14999         LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {
15000           this.tableLayouts = pack(this.tableLayouts, tableLayouts);
15001         };
15002
15003         /**
15004          * Executes layout engine on document-definition-object and creates an array of pages
15005          * containing positioned Blocks, Lines and inlines
15006          *
15007          * @param {Object} docStructure document-definition-object
15008          * @param {Object} fontProvider font provider
15009          * @param {Object} styleDictionary dictionary with style definitions
15010          * @param {Object} defaultStyle default style definition
15011          * @return {Array} an array of pages
15012          */
15013         LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
15014
15015           function addPageBreaksIfNecessary(linearNodeList, pages) {
15016
15017                         if(!isFunction(pageBreakBeforeFct)){
15018                                 return false;
15019                         }
15020
15021             linearNodeList = _.reject(linearNodeList, function(node){
15022               return _.isEmpty(node.positions);
15023             });
15024
15025             _.each(linearNodeList, function(node) {
15026               var nodeInfo = _.pick(node, [
15027                 'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'columns',
15028                 'headlineLevel', 'style', 'pageBreak', 'pageOrientation',
15029                 'width', 'height'
15030               ]);
15031               nodeInfo.startPosition = _.first(node.positions);
15032               nodeInfo.pageNumbers = _.chain(node.positions).map('pageNumber').uniq().value();
15033               nodeInfo.pages = pages.length;
15034               nodeInfo.stack = _.isArray(node.stack);
15035
15036               node.nodeInfo = nodeInfo;
15037             });
15038
15039             return _.any(linearNodeList, function (node, index, followingNodeList) {
15040               if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {
15041                 node.pageBreakCalculated = true;
15042                 var pageNumber = _.first(node.nodeInfo.pageNumbers);
15043
15044                                         var followingNodesOnPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {
15045                   return _.contains(node0.nodeInfo.pageNumbers, pageNumber);
15046                 }).value();
15047
15048                 var nodesOnNextPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {
15049                   return _.contains(node0.nodeInfo.pageNumbers, pageNumber + 1);
15050                 }).value();
15051
15052                 var previousNodesOnPage = _.chain(followingNodeList).take(index).filter(function (node0) {
15053                   return _.contains(node0.nodeInfo.pageNumbers, pageNumber);
15054                 }).value();
15055
15056                 if (pageBreakBeforeFct(node.nodeInfo,
15057                   _.map(followingNodesOnPage, 'nodeInfo'),
15058                   _.map(nodesOnNextPage, 'nodeInfo'),
15059                   _.map(previousNodesOnPage, 'nodeInfo'))) {
15060                   node.pageBreak = 'before';
15061                   return true;
15062                 }
15063               }
15064             });
15065           }
15066
15067           this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.tableLayouts, images);
15068
15069
15070           function resetXYs(result) {
15071             _.each(result.linearNodeList, function (node) {
15072               node.resetXY();
15073             });
15074           }
15075
15076           var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
15077           while(addPageBreaksIfNecessary(result.linearNodeList, result.pages)){
15078             resetXYs(result);
15079             result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
15080           }
15081
15082                 return result.pages;
15083         };
15084
15085         LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
15086
15087           this.linearNodeList = [];
15088           docStructure = this.docMeasure.measureDocument(docStructure);
15089
15090           this.writer = new PageElementWriter(
15091             new DocumentContext(this.pageSize, this.pageMargins), this.tracker);
15092
15093           var _this = this;
15094           this.writer.context().tracker.startTracking('pageAdded', function() {
15095             _this.addBackground(background);
15096           });
15097
15098           this.addBackground(background);
15099           this.processNode(docStructure);
15100           this.addHeadersAndFooters(header, footer);
15101           /* jshint eqnull:true */
15102           if(watermark != null)
15103             this.addWatermark(watermark, fontProvider);
15104
15105           return {pages: this.writer.context().pages, linearNodeList: this.linearNodeList};
15106         };
15107
15108
15109         LayoutBuilder.prototype.addBackground = function(background) {
15110             var backgroundGetter = isFunction(background) ? background : function() { return background; };
15111
15112             var pageBackground = backgroundGetter(this.writer.context().page + 1);
15113
15114             if (pageBackground) {
15115               var pageSize = this.writer.context().getCurrentPage().pageSize;
15116               this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);
15117               this.processNode(this.docMeasure.measureDocument(pageBackground));
15118               this.writer.commitUnbreakableBlock(0, 0);
15119             }
15120         };
15121
15122         LayoutBuilder.prototype.addStaticRepeatable = function(headerOrFooter, sizeFunction) {
15123           this.addDynamicRepeatable(function() { return headerOrFooter; }, sizeFunction);
15124         };
15125
15126         LayoutBuilder.prototype.addDynamicRepeatable = function(nodeGetter, sizeFunction) {
15127           var pages = this.writer.context().pages;
15128
15129           for(var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {
15130             this.writer.context().page = pageIndex;
15131
15132             var node = nodeGetter(pageIndex + 1, l);
15133
15134             if (node) {
15135               var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);
15136               this.writer.beginUnbreakableBlock(sizes.width, sizes.height);
15137               this.processNode(this.docMeasure.measureDocument(node));
15138               this.writer.commitUnbreakableBlock(sizes.x, sizes.y);
15139             }
15140           }
15141         };
15142
15143         LayoutBuilder.prototype.addHeadersAndFooters = function(header, footer) {
15144           var headerSizeFct = function(pageSize, pageMargins){
15145             return {
15146               x: 0,
15147               y: 0,
15148               width: pageSize.width,
15149               height: pageMargins.top
15150             };
15151           };
15152
15153           var footerSizeFct = function (pageSize, pageMargins) {
15154             return {
15155               x: 0,
15156               y: pageSize.height - pageMargins.bottom,
15157               width: pageSize.width,
15158               height: pageMargins.bottom
15159             };
15160           };
15161
15162           if(isFunction(header)) {
15163             this.addDynamicRepeatable(header, headerSizeFct);
15164           } else if(header) {
15165             this.addStaticRepeatable(header, headerSizeFct);
15166           }
15167
15168           if(isFunction(footer)) {
15169             this.addDynamicRepeatable(footer, footerSizeFct);
15170           } else if(footer) {
15171             this.addStaticRepeatable(footer, footerSizeFct);
15172           }
15173         };
15174
15175         LayoutBuilder.prototype.addWatermark = function(watermark, fontProvider){
15176           var defaultFont = Object.getOwnPropertyNames(fontProvider.fonts)[0]; // TODO allow selection of other font
15177           var watermarkObject = {
15178             text: watermark,
15179             font: fontProvider.provideFont(fontProvider[defaultFont], false, false),
15180             size: getSize(this.pageSize, watermark, fontProvider)
15181           };
15182
15183           var pages = this.writer.context().pages;
15184           for(var i = 0, l = pages.length; i < l; i++) {
15185             pages[i].watermark = watermarkObject;
15186           }
15187
15188           function getSize(pageSize, watermark, fontProvider){
15189             var width = pageSize.width;
15190             var height = pageSize.height;
15191             var targetWidth = Math.sqrt(width*width + height*height)*0.8; /* page diagnoal * sample factor */
15192             var textTools = new TextTools(fontProvider);
15193             var styleContextStack = new StyleContextStack();
15194             var size;
15195
15196             /**
15197              * Binary search the best font size.
15198              * Initial bounds [0, 1000]
15199              * Break when range < 1
15200              */
15201             var a = 0;
15202             var b = 1000;
15203             var c = (a+b)/2;
15204             while(Math.abs(a - b) > 1){
15205               styleContextStack.push({
15206                 fontSize: c
15207               });
15208               size = textTools.sizeOfString(watermark, styleContextStack);
15209               if(size.width > targetWidth){
15210                 b = c;
15211                 c = (a+b)/2;
15212               }
15213               else if(size.width < targetWidth){
15214                 a = c;
15215                 c = (a+b)/2;
15216               }
15217               styleContextStack.pop();
15218             }
15219             /*
15220               End binary search
15221              */
15222             return {size: size, fontSize: c};
15223           }
15224         };
15225
15226         function decorateNode(node){
15227           var x = node.x, y = node.y;
15228           node.positions = [];
15229
15230           _.each(node.canvas, function(vector){
15231             var x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;
15232             vector.resetXY = function(){
15233               vector.x = x;
15234               vector.y = y;
15235                                 vector.x1 = x1;
15236                                 vector.y1 = y1;
15237                                 vector.x2 = x2;
15238                                 vector.y2 = y2;
15239             };
15240           });
15241
15242           node.resetXY = function(){
15243             node.x = x;
15244             node.y = y;
15245             _.each(node.canvas, function(vector){
15246               vector.resetXY();
15247             });
15248           };
15249         }
15250
15251         LayoutBuilder.prototype.processNode = function(node) {
15252           var self = this;
15253
15254           this.linearNodeList.push(node);
15255           decorateNode(node);
15256
15257           applyMargins(function() {
15258             var absPosition = node.absolutePosition;
15259             if(absPosition){
15260               self.writer.context().beginDetachedBlock();
15261               self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);
15262             }
15263
15264             if (node.stack) {
15265               self.processVerticalContainer(node);
15266             } else if (node.columns) {
15267               self.processColumns(node);
15268             } else if (node.ul) {
15269               self.processList(false, node);
15270             } else if (node.ol) {
15271               self.processList(true, node);
15272             } else if (node.table) {
15273               self.processTable(node);
15274             } else if (node.text !== undefined) {
15275               self.processLeaf(node);
15276             } else if (node.image) {
15277               self.processImage(node);
15278             } else if (node.canvas) {
15279               self.processCanvas(node);
15280             } else if (node.qr) {
15281               self.processQr(node);
15282             }else if (!node._span) {
15283                         throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
15284                         }
15285
15286             if(absPosition){
15287               self.writer.context().endDetachedBlock();
15288             }
15289                 });
15290
15291                 function applyMargins(callback) {
15292                         var margin = node._margin;
15293
15294             if (node.pageBreak === 'before') {
15295                 self.writer.moveToNextPage(node.pageOrientation);
15296             }
15297
15298                         if (margin) {
15299                                 self.writer.context().moveDown(margin[1]);
15300                                 self.writer.context().addMargin(margin[0], margin[2]);
15301                         }
15302
15303                         callback();
15304
15305                         if(margin) {
15306                                 self.writer.context().addMargin(-margin[0], -margin[2]);
15307                                 self.writer.context().moveDown(margin[3]);
15308                         }
15309
15310             if (node.pageBreak === 'after') {
15311                 self.writer.moveToNextPage(node.pageOrientation);
15312             }
15313                 }
15314         };
15315
15316         // vertical container
15317         LayoutBuilder.prototype.processVerticalContainer = function(node) {
15318                 var self = this;
15319                 node.stack.forEach(function(item) {
15320                         self.processNode(item);
15321                         addAll(node.positions, item.positions);
15322
15323                         //TODO: paragraph gap
15324                 });
15325         };
15326
15327         // columns
15328         LayoutBuilder.prototype.processColumns = function(columnNode) {
15329                 var columns = columnNode.columns;
15330                 var availableWidth = this.writer.context().availableWidth;
15331                 var gaps = gapArray(columnNode._gap);
15332
15333                 if (gaps) availableWidth -= (gaps.length - 1) * columnNode._gap;
15334
15335                 ColumnCalculator.buildColumnWidths(columns, availableWidth);
15336                 var result = this.processRow(columns, columns, gaps);
15337             addAll(columnNode.positions, result.positions);
15338
15339
15340                 function gapArray(gap) {
15341                         if (!gap) return null;
15342
15343                         var gaps = [];
15344                         gaps.push(0);
15345
15346                         for(var i = columns.length - 1; i > 0; i--) {
15347                                 gaps.push(gap);
15348                         }
15349
15350                         return gaps;
15351                 }
15352         };
15353
15354         LayoutBuilder.prototype.processRow = function(columns, widths, gaps, tableBody, tableRow) {
15355           var self = this;
15356           var pageBreaks = [], positions = [];
15357
15358           this.tracker.auto('pageChanged', storePageBreakData, function() {
15359             widths = widths || columns;
15360
15361             self.writer.context().beginColumnGroup();
15362
15363             for(var i = 0, l = columns.length; i < l; i++) {
15364               var column = columns[i];
15365               var width = widths[i]._calcWidth;
15366               var leftOffset = colLeftOffset(i);
15367
15368               if (column.colSpan && column.colSpan > 1) {
15369                   for(var j = 1; j < column.colSpan; j++) {
15370                       width += widths[++i]._calcWidth + gaps[i];
15371                   }
15372               }
15373
15374               self.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));
15375               if (!column._span) {
15376                 self.processNode(column);
15377                 addAll(positions, column.positions);
15378               } else if (column._columnEndingContext) {
15379                 // row-span ending
15380                 self.writer.context().markEnding(column);
15381               }
15382             }
15383
15384             self.writer.context().completeColumnGroup();
15385           });
15386
15387           return {pageBreaks: pageBreaks, positions: positions};
15388
15389           function storePageBreakData(data) {
15390             var pageDesc;
15391
15392             for(var i = 0, l = pageBreaks.length; i < l; i++) {
15393               var desc = pageBreaks[i];
15394               if (desc.prevPage === data.prevPage) {
15395                 pageDesc = desc;
15396                 break;
15397               }
15398             }
15399
15400             if (!pageDesc) {
15401               pageDesc = data;
15402               pageBreaks.push(pageDesc);
15403             }
15404             pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);
15405             pageDesc.y = Math.min(pageDesc.y, data.y);
15406           }
15407
15408                 function colLeftOffset(i) {
15409                         if (gaps && gaps.length > i) return gaps[i];
15410                         return 0;
15411                 }
15412
15413           function getEndingCell(column, columnIndex) {
15414             if (column.rowSpan && column.rowSpan > 1) {
15415               var endingRow = tableRow + column.rowSpan - 1;
15416               if (endingRow >= tableBody.length) throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';
15417               return tableBody[endingRow][columnIndex];
15418             }
15419
15420             return null;
15421           }
15422         };
15423
15424         // lists
15425         LayoutBuilder.prototype.processList = function(orderedList, node) {
15426                 var self = this,
15427               items = orderedList ? node.ol : node.ul,
15428               gapSize = node._gapSize;
15429
15430                 this.writer.context().addMargin(gapSize.width);
15431
15432                 var nextMarker;
15433                 this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function() {
15434                         items.forEach(function(item) {
15435                                 nextMarker = item.listMarker;
15436                                 self.processNode(item);
15437                     addAll(node.positions, item.positions);
15438                         });
15439                 });
15440
15441                 this.writer.context().addMargin(-gapSize.width);
15442
15443                 function addMarkerToFirstLeaf(line) {
15444                         // I'm not very happy with the way list processing is implemented
15445                         // (both code and algorithm should be rethinked)
15446                         if (nextMarker) {
15447                                 var marker = nextMarker;
15448                                 nextMarker = null;
15449
15450                                 if (marker.canvas) {
15451                                         var vector = marker.canvas[0];
15452
15453                                         offsetVector(vector, -marker._minWidth, 0);
15454                                         self.writer.addVector(vector);
15455                                 } else {
15456                                         var markerLine = new Line(self.pageSize.width);
15457                                         markerLine.addInline(marker._inlines[0]);
15458                                         markerLine.x = -marker._minWidth;
15459                                         markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();
15460                                         self.writer.addLine(markerLine, true);
15461                                 }
15462                         }
15463                 }
15464         };
15465
15466         // tables
15467         LayoutBuilder.prototype.processTable = function(tableNode) {
15468           var processor = new TableProcessor(tableNode);
15469
15470           processor.beginTable(this.writer);
15471
15472           for(var i = 0, l = tableNode.table.body.length; i < l; i++) {
15473             processor.beginRow(i, this.writer);
15474
15475             var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i);
15476             addAll(tableNode.positions, result.positions);
15477
15478             processor.endRow(i, this.writer, result.pageBreaks);
15479           }
15480
15481           processor.endTable(this.writer);
15482         };
15483
15484         // leafs (texts)
15485         LayoutBuilder.prototype.processLeaf = function(node) {
15486                 var line = this.buildNextLine(node);
15487           var currentHeight = (line) ? line.getHeight() : 0;
15488           var maxHeight = node.maxHeight || -1;
15489
15490           while (line && (maxHeight === -1 || currentHeight < maxHeight)) {
15491             var positions = this.writer.addLine(line);
15492             node.positions.push(positions);
15493             line = this.buildNextLine(node);
15494             if (line) {
15495               currentHeight += line.getHeight();
15496             }
15497                 }
15498         };
15499
15500         LayoutBuilder.prototype.buildNextLine = function(textNode) {
15501                 if (!textNode._inlines || textNode._inlines.length === 0) return null;
15502
15503                 var line = new Line(this.writer.context().availableWidth);
15504
15505                 while(textNode._inlines && textNode._inlines.length > 0 && line.hasEnoughSpaceForInline(textNode._inlines[0])) {
15506                         line.addInline(textNode._inlines.shift());
15507                 }
15508
15509                 line.lastLineInParagraph = textNode._inlines.length === 0;
15510
15511                 return line;
15512         };
15513
15514         // images
15515         LayoutBuilder.prototype.processImage = function(node) {
15516             var position = this.writer.addImage(node);
15517             node.positions.push(position);
15518         };
15519
15520         LayoutBuilder.prototype.processCanvas = function(node) {
15521                 var height = node._minHeight;
15522
15523                 if (this.writer.context().availableHeight < height) {
15524                         // TODO: support for canvas larger than a page
15525                         // TODO: support for other overflow methods
15526
15527                         this.writer.moveToNextPage();
15528                 }
15529
15530                 node.canvas.forEach(function(vector) {
15531                         var position = this.writer.addVector(vector);
15532                 node.positions.push(position);
15533                 }, this);
15534
15535                 this.writer.context().moveDown(height);
15536         };
15537
15538         LayoutBuilder.prototype.processQr = function(node) {
15539                 var position = this.writer.addQr(node);
15540             node.positions.push(position);
15541         };
15542
15543         module.exports = LayoutBuilder;
15544
15545
15546 /***/ },
15547 /* 12 */
15548 /***/ function(module, exports) {
15549
15550         /* jslint node: true */
15551         'use strict';
15552
15553         /**
15554         * Creates an instance of TraversalTracker
15555         *
15556         * @constructor
15557         */
15558         function TraversalTracker() {
15559                 this.events = {};
15560         }
15561
15562         TraversalTracker.prototype.startTracking = function(event, cb) {
15563                 var callbacks = (this.events[event] || (this.events[event] = []));
15564
15565                 if (callbacks.indexOf(cb) < 0) {
15566                         callbacks.push(cb);
15567                 }
15568         };
15569
15570         TraversalTracker.prototype.stopTracking = function(event, cb) {
15571                 var callbacks = this.events[event];
15572
15573                 if (callbacks) {
15574                         var index = callbacks.indexOf(cb);
15575                         if (index >= 0) {
15576                                 callbacks.splice(index, 1);
15577                         }
15578                 }
15579         };
15580
15581         TraversalTracker.prototype.emit = function(event) {
15582                 var args = Array.prototype.slice.call(arguments, 1);
15583
15584                 var callbacks = this.events[event];
15585
15586                 if (callbacks) {
15587                         callbacks.forEach(function(cb) {
15588                                 cb.apply(this, args);
15589                         });
15590                 }
15591         };
15592
15593         TraversalTracker.prototype.auto = function(event, cb, innerBlock) {
15594                 this.startTracking(event, cb);
15595                 innerBlock();
15596                 this.stopTracking(event, cb);
15597         };
15598
15599         module.exports = TraversalTracker;
15600
15601
15602 /***/ },
15603 /* 13 */
15604 /***/ function(module, exports, __webpack_require__) {
15605
15606         /* jslint node: true */
15607         'use strict';
15608
15609         var TextTools = __webpack_require__(14);
15610         var StyleContextStack = __webpack_require__(15);
15611         var ColumnCalculator = __webpack_require__(16);
15612         var fontStringify = __webpack_require__(17).fontStringify;
15613         var pack = __webpack_require__(17).pack;
15614         var qrEncoder = __webpack_require__(18);
15615
15616         /**
15617         * @private
15618         */
15619         function DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, tableLayouts, images) {
15620                 this.textTools = new TextTools(fontProvider);
15621                 this.styleStack = new StyleContextStack(styleDictionary, defaultStyle);
15622                 this.imageMeasure = imageMeasure;
15623                 this.tableLayouts = tableLayouts;
15624                 this.images = images;
15625                 this.autoImageIndex = 1;
15626         }
15627
15628         /**
15629         * Measures all nodes and sets min/max-width properties required for the second
15630         * layout-pass.
15631         * @param  {Object} docStructure document-definition-object
15632         * @return {Object}              document-measurement-object
15633         */
15634         DocMeasure.prototype.measureDocument = function(docStructure) {
15635                 return this.measureNode(docStructure);
15636         };
15637
15638         DocMeasure.prototype.measureNode = function(node) {
15639                 // expand shortcuts
15640                 if (node instanceof Array) {
15641                         node = { stack: node };
15642                 } else if (typeof node == 'string' || node instanceof String) {
15643                         node = { text: node };
15644                 }
15645                 
15646                 // Deal with empty nodes to prevent crash in getNodeMargin
15647                 if (Object.keys(node).length === 0) {
15648                         // A warning could be logged: console.warn('pdfmake: Empty node, ignoring it');
15649                         node = { text: '' };
15650                 }
15651
15652                 var self = this;
15653
15654                 return this.styleStack.auto(node, function() {
15655                         // TODO: refactor + rethink whether this is the proper way to handle margins
15656                         node._margin = getNodeMargin(node);
15657
15658                         if (node.columns) {
15659                                 return extendMargins(self.measureColumns(node));
15660                         } else if (node.stack) {
15661                                 return extendMargins(self.measureVerticalContainer(node));
15662                         } else if (node.ul) {
15663                                 return extendMargins(self.measureList(false, node));
15664                         } else if (node.ol) {
15665                                 return extendMargins(self.measureList(true, node));
15666                         } else if (node.table) {
15667                                 return extendMargins(self.measureTable(node));
15668                         } else if (node.text !== undefined) {
15669                                 return extendMargins(self.measureLeaf(node));
15670                         } else if (node.image) {
15671                                 return extendMargins(self.measureImage(node));
15672                         } else if (node.canvas) {
15673                                 return extendMargins(self.measureCanvas(node));
15674                         } else if (node.qr) {
15675                                 return extendMargins(self.measureQr(node));
15676                         } else {
15677                                 throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
15678                         }
15679                 });
15680
15681                 function extendMargins(node) {
15682                         var margin = node._margin;
15683
15684                         if (margin) {
15685                                 node._minWidth += margin[0] + margin[2];
15686                                 node._maxWidth += margin[0] + margin[2];
15687                         }
15688
15689                         return node;
15690                 }
15691
15692                 function getNodeMargin() {
15693
15694                         function processSingleMargins(node, currentMargin){
15695                                 if (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {
15696                                         return [
15697                                                 node.marginLeft || currentMargin[0] || 0,
15698                                                 node.marginTop || currentMargin[1] || 0,
15699                                                 node.marginRight || currentMargin[2]  || 0,
15700                                                 node.marginBottom || currentMargin[3]  || 0
15701                                         ];
15702                                 }
15703                                 return currentMargin;
15704                         }
15705
15706                         function flattenStyleArray(styleArray){
15707                                 var flattenedStyles = {};
15708                                 for (var i = styleArray.length - 1; i >= 0; i--) {
15709                                         var styleName = styleArray[i];
15710                                         var style = self.styleStack.styleDictionary[styleName];
15711                                         for(var key in style){
15712                                                 if(style.hasOwnProperty(key)){
15713                                                         flattenedStyles[key] = style[key];
15714                                                 }
15715                                         }
15716                                 }
15717                                 return flattenedStyles;
15718                         }
15719
15720                         function convertMargin(margin) {
15721                                 if (typeof margin === 'number' || margin instanceof Number) {
15722                                         margin = [ margin, margin, margin, margin ];
15723                                 } else if (margin instanceof Array) {
15724                                         if (margin.length === 2) {
15725                                                 margin = [ margin[0], margin[1], margin[0], margin[1] ];
15726                                         }
15727                                 }
15728                                 return margin;
15729                         }
15730
15731                         var margin = [undefined, undefined, undefined, undefined];
15732
15733                         if(node.style) {
15734                                 var styleArray = (node.style instanceof Array) ? node.style : [node.style];
15735                                 var flattenedStyleArray = flattenStyleArray(styleArray);
15736
15737                                 if(flattenedStyleArray) {
15738                                         margin = processSingleMargins(flattenedStyleArray, margin);
15739                                 }
15740
15741                                 if(flattenedStyleArray.margin){
15742                                         margin = convertMargin(flattenedStyleArray.margin);
15743                                 }
15744                         }
15745                         
15746                         margin = processSingleMargins(node, margin);
15747
15748                         if(node.margin){
15749                                 margin = convertMargin(node.margin);
15750                         }
15751
15752                         if(margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {
15753                                 return null;
15754                         } else {
15755                                 return margin;
15756                         }
15757                 }
15758         };
15759
15760         DocMeasure.prototype.convertIfBase64Image = function(node) {
15761                 if (/^data:image\/(jpeg|jpg|png);base64,/.test(node.image)) {
15762                         var label = '$$pdfmake$$' + this.autoImageIndex++;
15763                         this.images[label] = node.image;
15764                         node.image = label;
15765         }
15766         };
15767
15768         DocMeasure.prototype.measureImage = function(node) {
15769                 if (this.images) {
15770                         this.convertIfBase64Image(node);
15771                 }
15772
15773                 var imageSize = this.imageMeasure.measureImage(node.image);
15774
15775                 if (node.fit) {
15776                         var factor = (imageSize.width / imageSize.height > node.fit[0] / node.fit[1]) ? node.fit[0] / imageSize.width : node.fit[1] / imageSize.height;
15777                         node._width = node._minWidth = node._maxWidth = imageSize.width * factor;
15778                         node._height = imageSize.height * factor;
15779                 } else {
15780                         node._width = node._minWidth = node._maxWidth = node.width || imageSize.width;
15781                         node._height = node.height || (imageSize.height * node._width / imageSize.width);
15782                 }
15783
15784                 node._alignment = this.styleStack.getProperty('alignment');
15785                 return node;
15786         };
15787
15788         DocMeasure.prototype.measureLeaf = function(node) {
15789
15790                 // Make sure style properties of the node itself are considered when building inlines.
15791                 // We could also just pass [node] to buildInlines, but that fails for bullet points.
15792                 var styleStack = this.styleStack.clone();
15793                 styleStack.push(node);
15794
15795                 var data = this.textTools.buildInlines(node.text, styleStack);
15796
15797                 node._inlines = data.items;
15798                 node._minWidth = data.minWidth;
15799                 node._maxWidth = data.maxWidth;
15800
15801                 return node;
15802         };
15803
15804         DocMeasure.prototype.measureVerticalContainer = function(node) {
15805                 var items = node.stack;
15806
15807                 node._minWidth = 0;
15808                 node._maxWidth = 0;
15809
15810                 for(var i = 0, l = items.length; i < l; i++) {
15811                         items[i] = this.measureNode(items[i]);
15812
15813                         node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
15814                         node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
15815                 }
15816
15817                 return node;
15818         };
15819
15820         DocMeasure.prototype.gapSizeForList = function(isOrderedList, listItems) {
15821                 if (isOrderedList) {
15822                         var longestNo = (listItems.length).toString().replace(/./g, '9');
15823                         return this.textTools.sizeOfString(longestNo + '. ', this.styleStack);
15824                 } else {
15825                         return this.textTools.sizeOfString('9. ', this.styleStack);
15826                 }
15827         };
15828
15829         DocMeasure.prototype.buildMarker = function(isOrderedList, counter, styleStack, gapSize) {
15830                 var marker;
15831
15832                 if (isOrderedList) {
15833                         marker = { _inlines: this.textTools.buildInlines(counter, styleStack).items };
15834                 }
15835                 else {
15836                         // TODO: ascender-based calculations
15837                         var radius = gapSize.fontSize / 6;
15838                         marker = {
15839                                 canvas: [ {
15840                                         x: radius,
15841                                         y: (gapSize.height / gapSize.lineHeight) + gapSize.decender - gapSize.fontSize / 3,//0,// gapSize.fontSize * 2 / 3,
15842                                         r1: radius,
15843                                         r2: radius,
15844                                         type: 'ellipse',
15845                                         color: 'black'
15846                                 } ]
15847                         };
15848                 }
15849
15850                 marker._minWidth = marker._maxWidth = gapSize.width;
15851                 marker._minHeight = marker._maxHeight = gapSize.height;
15852
15853                 return marker;
15854         };
15855
15856         DocMeasure.prototype.measureList = function(isOrdered, node) {
15857                 var style = this.styleStack.clone();
15858
15859                 var items = isOrdered ? node.ol : node.ul;
15860                 node._gapSize = this.gapSizeForList(isOrdered, items);
15861                 node._minWidth = 0;
15862                 node._maxWidth = 0;
15863
15864                 var counter = 1;
15865
15866                 for(var i = 0, l = items.length; i < l; i++) {
15867                         var nextItem = items[i] = this.measureNode(items[i]);
15868
15869                         var marker = counter++ + '. ';
15870
15871                         if (!nextItem.ol && !nextItem.ul) {
15872                                 nextItem.listMarker = this.buildMarker(isOrdered, nextItem.counter || marker, style, node._gapSize);
15873                         }  // TODO: else - nested lists numbering
15874
15875                         node._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);
15876                         node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);
15877                 }
15878
15879                 return node;
15880         };
15881
15882         DocMeasure.prototype.measureColumns = function(node) {
15883                 var columns = node.columns;
15884                 node._gap = this.styleStack.getProperty('columnGap') || 0;
15885
15886                 for(var i = 0, l = columns.length; i < l; i++) {
15887                         columns[i] = this.measureNode(columns[i]);
15888                 }
15889
15890                 var measures = ColumnCalculator.measureMinMax(columns);
15891
15892                 node._minWidth = measures.min + node._gap * (columns.length - 1);
15893                 node._maxWidth = measures.max + node._gap * (columns.length - 1);
15894
15895                 return node;
15896         };
15897
15898         DocMeasure.prototype.measureTable = function(node) {
15899                 extendTableWidths(node);
15900                 node._layout = getLayout(this.tableLayouts);
15901                 node._offsets = getOffsets(node._layout);
15902
15903                 var colSpans = [];
15904                 var col, row, cols, rows;
15905
15906                 for(col = 0, cols = node.table.body[0].length; col < cols; col++) {
15907                         var c = node.table.widths[col];
15908                         c._minWidth = 0;
15909                         c._maxWidth = 0;
15910
15911                         for(row = 0, rows = node.table.body.length; row < rows; row++) {
15912                                 var rowData = node.table.body[row];
15913                                 var data = rowData[col];
15914                                 if (!data._span) {
15915                                         var _this = this;
15916                                         data = rowData[col] = this.styleStack.auto(data, measureCb(this, data));
15917
15918                                         if (data.colSpan && data.colSpan > 1) {
15919                                                 markSpans(rowData, col, data.colSpan);
15920                                                 colSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });
15921                                         } else {
15922                                                 c._minWidth = Math.max(c._minWidth, data._minWidth);
15923                                                 c._maxWidth = Math.max(c._maxWidth, data._maxWidth);
15924                                         }
15925                                 }
15926
15927                                 if (data.rowSpan && data.rowSpan > 1) {
15928                                         markVSpans(node.table, row, col, data.rowSpan);
15929                                 }
15930                         }
15931                 }
15932
15933                 extendWidthsForColSpans();
15934
15935                 var measures = ColumnCalculator.measureMinMax(node.table.widths);
15936
15937                 node._minWidth = measures.min + node._offsets.total;
15938                 node._maxWidth = measures.max + node._offsets.total;
15939
15940                 return node;
15941
15942                 function measureCb(_this, data) {
15943                         return function() {
15944                                 if (data !== null && typeof data === 'object') {
15945                                         data.fillColor = _this.styleStack.getProperty('fillColor');
15946                                 }
15947                                 return _this.measureNode(data);
15948                         };
15949                 }
15950
15951                 function getLayout(tableLayouts) {
15952                         var layout = node.layout;
15953
15954                         if (typeof node.layout === 'string' || node instanceof String) {
15955                                 layout = tableLayouts[layout];
15956                         }
15957
15958                         var defaultLayout = {
15959                                 hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },
15960                                 vLineWidth: function(i, node) { return 1; },
15961                                 hLineColor: function(i, node) { return 'black'; },
15962                                 vLineColor: function(i, node) { return 'black'; },
15963                                 paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },
15964                                 paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },
15965                                 paddingTop: function(i, node) { return 2; },
15966                                 paddingBottom: function(i, node) { return 2; }
15967                         };
15968
15969                         return pack(defaultLayout, layout);
15970                 }
15971
15972                 function getOffsets(layout) {
15973                         var offsets = [];
15974                         var totalOffset = 0;
15975                         var prevRightPadding = 0;
15976
15977                         for(var i = 0, l = node.table.widths.length; i < l; i++) {
15978                                 var lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);
15979                                 offsets.push(lOffset);
15980                                 totalOffset += lOffset;
15981                                 prevRightPadding = layout.paddingRight(i, node);
15982                         }
15983
15984                         totalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);
15985
15986                         return {
15987                                 total: totalOffset,
15988                                 offsets: offsets
15989                         };
15990                 }
15991
15992                 function extendWidthsForColSpans() {
15993                         var q, j;
15994
15995                         for (var i = 0, l = colSpans.length; i < l; i++) {
15996                                 var span = colSpans[i];
15997
15998                                 var currentMinMax = getMinMax(span.col, span.span, node._offsets);
15999                                 var minDifference = span.minWidth - currentMinMax.minWidth;
16000                                 var maxDifference = span.maxWidth - currentMinMax.maxWidth;
16001
16002                                 if (minDifference > 0) {
16003                                         q = minDifference / span.span;
16004
16005                                         for(j = 0; j < span.span; j++) {
16006                                                 node.table.widths[span.col + j]._minWidth += q;
16007                                         }
16008                                 }
16009
16010                                 if (maxDifference > 0) {
16011                                         q = maxDifference / span.span;
16012
16013                                         for(j = 0; j < span.span; j++) {
16014                                                 node.table.widths[span.col + j]._maxWidth += q;
16015                                         }
16016                                 }
16017                         }
16018                 }
16019
16020                 function getMinMax(col, span, offsets) {
16021                         var result = { minWidth: 0, maxWidth: 0 };
16022
16023                         for(var i = 0; i < span; i++) {
16024                                 result.minWidth += node.table.widths[col + i]._minWidth + (i? offsets.offsets[col + i] : 0);
16025                                 result.maxWidth += node.table.widths[col + i]._maxWidth + (i? offsets.offsets[col + i] : 0);
16026                         }
16027
16028                         return result;
16029                 }
16030
16031                 function markSpans(rowData, col, span) {
16032                         for (var i = 1; i < span; i++) {
16033                                 rowData[col + i] = {
16034                                         _span: true,
16035                                         _minWidth: 0,
16036                                         _maxWidth: 0,
16037                                         rowSpan: rowData[col].rowSpan
16038                                 };
16039                         }
16040                 }
16041
16042                 function markVSpans(table, row, col, span) {
16043                         for (var i = 1; i < span; i++) {
16044                                 table.body[row + i][col] = {
16045                                         _span: true,
16046                                         _minWidth: 0,
16047                                         _maxWidth: 0,
16048                                         fillColor: table.body[row][col].fillColor
16049                                 };
16050                         }
16051                 }
16052
16053                 function extendTableWidths(node) {
16054                         if (!node.table.widths) {
16055                                 node.table.widths = 'auto';
16056                         }
16057
16058                         if (typeof node.table.widths === 'string' || node.table.widths instanceof String) {
16059                                 node.table.widths = [ node.table.widths ];
16060
16061                                 while(node.table.widths.length < node.table.body[0].length) {
16062                                         node.table.widths.push(node.table.widths[node.table.widths.length - 1]);
16063                                 }
16064                         }
16065
16066                         for(var i = 0, l = node.table.widths.length; i < l; i++) {
16067                                 var w = node.table.widths[i];
16068                                 if (typeof w === 'number' || w instanceof Number || typeof w === 'string' || w instanceof String) {
16069                                         node.table.widths[i] = { width: w };
16070                                 }
16071                         }
16072                 }
16073         };
16074
16075         DocMeasure.prototype.measureCanvas = function(node) {
16076                 var w = 0, h = 0;
16077
16078                 for(var i = 0, l = node.canvas.length; i < l; i++) {
16079                         var vector = node.canvas[i];
16080
16081                         switch(vector.type) {
16082                         case 'ellipse':
16083                                 w = Math.max(w, vector.x + vector.r1);
16084                                 h = Math.max(h, vector.y + vector.r2);
16085                                 break;
16086                         case 'rect':
16087                                 w = Math.max(w, vector.x + vector.w);
16088                                 h = Math.max(h, vector.y + vector.h);
16089                                 break;
16090                         case 'line':
16091                                 w = Math.max(w, vector.x1, vector.x2);
16092                                 h = Math.max(h, vector.y1, vector.y2);
16093                                 break;
16094                         case 'polyline':
16095                                 for(var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {
16096                                         w = Math.max(w, vector.points[i2].x);
16097                                         h = Math.max(h, vector.points[i2].y);
16098                                 }
16099                                 break;
16100                         }
16101                 }
16102
16103                 node._minWidth = node._maxWidth = w;
16104                 node._minHeight = node._maxHeight = h;
16105
16106                 return node;
16107         };
16108
16109         DocMeasure.prototype.measureQr = function(node) {
16110                 node = qrEncoder.measure(node);
16111                 node._alignment = this.styleStack.getProperty('alignment');
16112                 return node;
16113         };
16114
16115         module.exports = DocMeasure;
16116
16117
16118 /***/ },
16119 /* 14 */
16120 /***/ function(module, exports) {
16121
16122         /* jslint node: true */
16123         'use strict';
16124
16125         var WORD_RE = /([^ ,\/!.?:;\-\n]*[ ,\/!.?:;\-]*)|\n/g;
16126         // /\S*\s*/g to be considered (I'm not sure however - we shouldn't split 'aaa !!!!')
16127
16128         var LEADING = /^(\s)+/g;
16129         var TRAILING = /(\s)+$/g;
16130
16131         /**
16132         * Creates an instance of TextTools - text measurement utility
16133         *
16134         * @constructor
16135         * @param {FontProvider} fontProvider
16136         */
16137         function TextTools(fontProvider) {
16138                 this.fontProvider = fontProvider;
16139         }
16140
16141         /**
16142          * Converts an array of strings (or inline-definition-objects) into a collection
16143          * of inlines and calculated minWidth/maxWidth.
16144         * and their min/max widths
16145         * @param  {Object} textArray - an array of inline-definition-objects (or strings)
16146         * @param  {Object} styleContextStack current style stack
16147         * @return {Object}                   collection of inlines, minWidth, maxWidth
16148         */
16149         TextTools.prototype.buildInlines = function(textArray, styleContextStack) {
16150                 var measured = measure(this.fontProvider, textArray, styleContextStack);
16151
16152                 var minWidth = 0,
16153                         maxWidth = 0,
16154                         currentLineWidth;
16155
16156                 measured.forEach(function (inline) {
16157                         minWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);
16158
16159                         if (!currentLineWidth) {
16160                                 currentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };
16161                         }
16162
16163                         currentLineWidth.width += inline.width;
16164                         currentLineWidth.trailingCut = inline.trailingCut;
16165
16166                         maxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));
16167
16168                         if (inline.lineEnd) {
16169                                 currentLineWidth = null;
16170                         }
16171                 });
16172
16173                 if (getStyleProperty({}, styleContextStack, 'noWrap', false)) {
16174                         minWidth = maxWidth;
16175                 }
16176
16177                 return {
16178                         items: measured,
16179                         minWidth: minWidth,
16180                         maxWidth: maxWidth
16181                 };
16182
16183                 function getTrimmedWidth(item) {
16184                         return Math.max(0, item.width - item.leadingCut - item.trailingCut);
16185                 }
16186         };
16187
16188         /**
16189         * Returns size of the specified string (without breaking it) using the current style
16190         * @param  {String} text              text to be measured
16191         * @param  {Object} styleContextStack current style stack
16192         * @return {Object}                   size of the specified string
16193         */
16194         TextTools.prototype.sizeOfString = function(text, styleContextStack) {
16195                 text = text.replace('\t', '    ');
16196
16197                 //TODO: refactor - extract from measure
16198                 var fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');
16199                 var fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);
16200                 var bold = getStyleProperty({}, styleContextStack, 'bold', false);
16201                 var italics = getStyleProperty({}, styleContextStack, 'italics', false);
16202                 var lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);
16203
16204                 var font = this.fontProvider.provideFont(fontName, bold, italics);
16205
16206                 return {
16207                         width: font.widthOfString(removeDiacritics(text), fontSize),
16208                         height: font.lineHeight(fontSize) * lineHeight,
16209                         fontSize: fontSize,
16210                         lineHeight: lineHeight,
16211                         ascender: font.ascender / 1000 * fontSize,
16212                         decender: font.decender / 1000 * fontSize
16213                 };
16214         };
16215
16216         function splitWords(text, noWrap) {
16217                 var results = [];
16218                 text = text.replace('\t', '    ');
16219
16220                 var array;
16221                 if (noWrap) {
16222                         array = [ text, "" ];
16223                 } else {
16224                         array = text.match(WORD_RE);
16225                 }
16226                 // i < l - 1, because the last match is always an empty string
16227                 // other empty strings however are treated as new-lines
16228                 for(var i = 0, l = array.length; i < l - 1; i++) {
16229                         var item = array[i];
16230
16231                         var isNewLine = item.length === 0;
16232
16233                         if (!isNewLine) {
16234                                 results.push({text: item});
16235                         }
16236                         else {
16237                                 var shouldAddLine = (results.length === 0 || results[results.length - 1].lineEnd);
16238
16239                                 if (shouldAddLine) {
16240                                         results.push({ text: '', lineEnd: true });
16241                                 }
16242                                 else {
16243                                         results[results.length - 1].lineEnd = true;
16244                                 }
16245                         }
16246                 }
16247                 return results;
16248         }
16249
16250         function copyStyle(source, destination) {
16251                 destination = destination || {};
16252                 source = source || {}; //TODO: default style
16253
16254                 for(var key in source) {
16255                         if (key != 'text' && source.hasOwnProperty(key)) {
16256                                 destination[key] = source[key];
16257                         }
16258                 }
16259
16260                 return destination;
16261         }
16262
16263         function normalizeTextArray(array) {
16264                 var results = [];
16265
16266                 if (typeof array == 'string' || array instanceof String) {
16267                         array = [ array ];
16268                 }
16269
16270                 for(var i = 0, l = array.length; i < l; i++) {
16271                         var item = array[i];
16272                         var style = null;
16273                         var words;
16274
16275                         if (typeof item == 'string' || item instanceof String) {
16276                                 words = splitWords(item);
16277                         } else {
16278                                 words = splitWords(item.text, item.noWrap);
16279                                 style = copyStyle(item);
16280                         }
16281
16282                         for(var i2 = 0, l2 = words.length; i2 < l2; i2++) {
16283                                 var result = {
16284                                         text: words[i2].text
16285                                 };
16286
16287                                 if (words[i2].lineEnd) {
16288                                         result.lineEnd = true;
16289                                 }
16290
16291                                 copyStyle(style, result);
16292
16293                                 results.push(result);
16294                         }
16295                 }
16296
16297                 return results;
16298         }
16299
16300         //TODO: support for other languages (currently only polish is supported)
16301         var diacriticsMap = { 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', 'Ź': 'Z', 'Ż': 'Z', 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z', 'ż': 'z' };
16302         // '  << atom.io workaround
16303
16304         function removeDiacritics(text) {
16305                 return text.replace(/[^A-Za-z0-9\[\] ]/g, function(a) {
16306                         return diacriticsMap[a] || a;
16307                 });
16308         }
16309
16310         function getStyleProperty(item, styleContextStack, property, defaultValue) {
16311                 var value;
16312
16313                 if (item[property] !== undefined && item[property] !== null) {
16314                         // item defines this property
16315                         return item[property];
16316                 }
16317
16318                 if (!styleContextStack) return defaultValue;
16319
16320                 styleContextStack.auto(item, function() {
16321                         value = styleContextStack.getProperty(property);
16322                 });
16323
16324                 if (value !== null && value !== undefined) {
16325                         return value;
16326                 } else {
16327                         return defaultValue;
16328                 }
16329         }
16330
16331         function measure(fontProvider, textArray, styleContextStack) {
16332                 var normalized = normalizeTextArray(textArray);
16333
16334                 normalized.forEach(function(item) {
16335                         var fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');
16336                         var fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);
16337                         var bold = getStyleProperty(item, styleContextStack, 'bold', false);
16338                         var italics = getStyleProperty(item, styleContextStack, 'italics', false);
16339                         var color = getStyleProperty(item, styleContextStack, 'color', 'black');
16340                         var decoration = getStyleProperty(item, styleContextStack, 'decoration', null);
16341                         var decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);
16342                         var decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);
16343                         var background = getStyleProperty(item, styleContextStack, 'background', null);
16344                         var lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);
16345
16346                         var font = fontProvider.provideFont(fontName, bold, italics);
16347
16348                         // TODO: character spacing
16349                         item.width = font.widthOfString(removeDiacritics(item.text), fontSize);
16350                         item.height = font.lineHeight(fontSize) * lineHeight;
16351
16352                         var leadingSpaces = item.text.match(LEADING);
16353                         var trailingSpaces = item.text.match(TRAILING);
16354                         if (leadingSpaces) {
16355                                 item.leadingCut = font.widthOfString(leadingSpaces[0], fontSize);
16356                         }
16357                         else {
16358                                 item.leadingCut = 0;
16359                         }
16360
16361                         if (trailingSpaces) {
16362                                 item.trailingCut = font.widthOfString(trailingSpaces[0], fontSize);
16363                         }
16364                         else {
16365                                 item.trailingCut = 0;
16366                         }
16367
16368                         item.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');
16369                         item.font = font;
16370                         item.fontSize = fontSize;
16371                         item.color = color;
16372                         item.decoration = decoration;
16373                         item.decorationColor = decorationColor;
16374                         item.decorationStyle = decorationStyle;
16375                         item.background = background;
16376                 });
16377
16378                 return normalized;
16379         }
16380
16381         /****TESTS**** (add a leading '/' to uncomment)
16382         TextTools.prototype.splitWords = splitWords;
16383         TextTools.prototype.normalizeTextArray = normalizeTextArray;
16384         TextTools.prototype.measure = measure;
16385         // */
16386
16387
16388         module.exports = TextTools;
16389
16390
16391 /***/ },
16392 /* 15 */
16393 /***/ function(module, exports) {
16394
16395         /* jslint node: true */
16396         'use strict';
16397
16398         /**
16399         * Creates an instance of StyleContextStack used for style inheritance and style overrides
16400         *
16401         * @constructor
16402         * @this {StyleContextStack}
16403         * @param {Object} named styles dictionary
16404         * @param {Object} optional default style definition
16405         */
16406         function StyleContextStack (styleDictionary, defaultStyle) {
16407                 this.defaultStyle = defaultStyle || {};
16408                 this.styleDictionary = styleDictionary;
16409                 this.styleOverrides = [];
16410         }
16411
16412         /**
16413         * Creates cloned version of current stack
16414         * @return {StyleContextStack} current stack snapshot
16415         */
16416         StyleContextStack.prototype.clone = function() {
16417                 var stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);
16418
16419                 this.styleOverrides.forEach(function(item) {
16420                         stack.styleOverrides.push(item);
16421                 });
16422
16423                 return stack;
16424         };
16425
16426         /**
16427         * Pushes style-name or style-overrides-object onto the stack for future evaluation
16428         *
16429         * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or
16430         *                                            a new dictionary defining overriding properties
16431         */
16432         StyleContextStack.prototype.push = function(styleNameOrOverride) {
16433                 this.styleOverrides.push(styleNameOrOverride);
16434         };
16435
16436         /**
16437         * Removes last style-name or style-overrides-object from the stack
16438         *
16439         * @param {Number} howMany - optional number of elements to be popped (if not specified,
16440         *                           one element will be removed from the stack)
16441         */
16442         StyleContextStack.prototype.pop = function(howMany) {
16443                 howMany = howMany || 1;
16444
16445                 while(howMany-- > 0) {
16446                         this.styleOverrides.pop();
16447                 }
16448         };
16449
16450         /**
16451         * Creates a set of named styles or/and a style-overrides-object based on the item,
16452         * pushes those elements onto the stack for future evaluation and returns the number
16453         * of elements pushed, so they can be easily poped then.
16454         *
16455         * @param {Object} item - an object with optional style property and/or style overrides
16456         * @return the number of items pushed onto the stack
16457         */
16458         StyleContextStack.prototype.autopush = function(item) {
16459                 if (typeof item === 'string' || item instanceof String) return 0;
16460
16461                 var styleNames = [];
16462
16463                 if (item.style) {
16464                         if (item.style instanceof Array) {
16465                                 styleNames = item.style;
16466                         } else {
16467                                 styleNames = [ item.style ];
16468                         }
16469                 }
16470
16471                 for(var i = 0, l = styleNames.length; i < l; i++) {
16472                         this.push(styleNames[i]);
16473                 }
16474
16475                 var styleOverrideObject = {};
16476                 var pushSOO = false;
16477
16478                 [
16479                         'font',
16480                         'fontSize',
16481                         'bold',
16482                         'italics',
16483                         'alignment',
16484                         'color',
16485                         'columnGap',
16486                         'fillColor',
16487                         'decoration',
16488                         'decorationStyle',
16489                         'decorationColor',
16490                         'background',
16491                         'lineHeight',
16492                         'noWrap'
16493                         //'tableCellPadding'
16494                         // 'cellBorder',
16495                         // 'headerCellBorder',
16496                         // 'oddRowCellBorder',
16497                         // 'evenRowCellBorder',
16498                         // 'tableBorder'
16499                 ].forEach(function(key) {
16500                         if (item[key] !== undefined && item[key] !== null) {
16501                                 styleOverrideObject[key] = item[key];
16502                                 pushSOO = true;
16503                         }
16504                 });
16505
16506                 if (pushSOO) {
16507                         this.push(styleOverrideObject);
16508                 }
16509
16510                 return styleNames.length + (pushSOO ? 1 : 0);
16511         };
16512
16513         /**
16514         * Automatically pushes elements onto the stack, using autopush based on item,
16515         * executes callback and then pops elements back. Returns value returned by callback
16516         *
16517         * @param  {Object}   item - an object with optional style property and/or style overrides
16518         * @param  {Function} function to be called between autopush and pop
16519         * @return {Object} value returned by callback
16520         */
16521         StyleContextStack.prototype.auto = function(item, callback) {
16522                 var pushedItems = this.autopush(item);
16523                 var result = callback();
16524
16525                 if (pushedItems > 0) {
16526                         this.pop(pushedItems);
16527                 }
16528
16529                 return result;
16530         };
16531
16532         /**
16533         * Evaluates stack and returns value of a named property
16534         *
16535         * @param {String} property - property name
16536         * @return property value or null if not found
16537         */
16538         StyleContextStack.prototype.getProperty = function(property) {
16539                 if (this.styleOverrides) {
16540                         for(var i = this.styleOverrides.length - 1; i >= 0; i--) {
16541                                 var item = this.styleOverrides[i];
16542
16543                                 if (typeof item == 'string' || item instanceof String) {
16544                                         // named-style-override
16545
16546                                         var style = this.styleDictionary[item];
16547                                         if (style && style[property] !== null && style[property] !== undefined) {
16548                                                 return style[property];
16549                                         }
16550                                 } else {
16551                                         // style-overrides-object
16552                                         if (item[property] !== undefined && item[property] !== null) {
16553                                                 return item[property];
16554                                         }
16555                                 }
16556                         }
16557                 }
16558
16559                 return this.defaultStyle && this.defaultStyle[property];
16560         };
16561
16562         module.exports = StyleContextStack;
16563
16564
16565 /***/ },
16566 /* 16 */
16567 /***/ function(module, exports) {
16568
16569         /* jslint node: true */
16570         'use strict';
16571
16572         function buildColumnWidths(columns, availableWidth) {
16573                 var autoColumns = [],
16574                         autoMin = 0, autoMax = 0,
16575                         starColumns = [],
16576                         starMaxMin = 0,
16577                         starMaxMax = 0,
16578                         fixedColumns = [],
16579                         initial_availableWidth = availableWidth;
16580
16581                 columns.forEach(function(column) {
16582                         if (isAutoColumn(column)) {
16583                                 autoColumns.push(column);
16584                                 autoMin += column._minWidth;
16585                                 autoMax += column._maxWidth;
16586                         } else if (isStarColumn(column)) {
16587                                 starColumns.push(column);
16588                                 starMaxMin = Math.max(starMaxMin, column._minWidth);
16589                                 starMaxMax = Math.max(starMaxMax, column._maxWidth);
16590                         } else {
16591                                 fixedColumns.push(column);
16592                         }
16593                 });
16594
16595                 fixedColumns.forEach(function(col) {
16596                         // width specified as %
16597                         if (typeof col.width === 'string' && /\d+%/.test(col.width) ) {
16598                                 col.width = parseFloat(col.width)*initial_availableWidth/100;
16599                         }
16600                         if (col.width < (col._minWidth) && col.elasticWidth) {
16601                                 col._calcWidth = col._minWidth;
16602                         } else {
16603                                 col._calcWidth = col.width;
16604                         }
16605
16606                         availableWidth -= col._calcWidth;
16607                 });
16608
16609                 // http://www.freesoft.org/CIE/RFC/1942/18.htm
16610                 // http://www.w3.org/TR/CSS2/tables.html#width-layout
16611                 // http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm
16612                 var minW = autoMin + starMaxMin * starColumns.length;
16613                 var maxW = autoMax + starMaxMax * starColumns.length;
16614                 if (minW >= availableWidth) {
16615                         // case 1 - there's no way to fit all columns within available width
16616                         // that's actually pretty bad situation with PDF as we have no horizontal scroll
16617                         // no easy workaround (unless we decide, in the future, to split single words)
16618                         // currently we simply use minWidths for all columns
16619                         autoColumns.forEach(function(col) {
16620                                 col._calcWidth = col._minWidth;
16621                         });
16622
16623                         starColumns.forEach(function(col) {
16624                                 col._calcWidth = starMaxMin; // starMaxMin already contains padding
16625                         });
16626                 } else {
16627                         if (maxW < availableWidth) {
16628                                 // case 2 - we can fit rest of the table within available space
16629                                 autoColumns.forEach(function(col) {
16630                                         col._calcWidth = col._maxWidth;
16631                                         availableWidth -= col._calcWidth;
16632                                 });
16633                         } else {
16634                                 // maxW is too large, but minW fits within available width
16635                                 var W = availableWidth - minW;
16636                                 var D = maxW - minW;
16637
16638                                 autoColumns.forEach(function(col) {
16639                                         var d = col._maxWidth - col._minWidth;
16640                                         col._calcWidth = col._minWidth + d * W / D;
16641                                         availableWidth -= col._calcWidth;
16642                                 });
16643                         }
16644
16645                         if (starColumns.length > 0) {
16646                                 var starSize = availableWidth / starColumns.length;
16647
16648                                 starColumns.forEach(function(col) {
16649                                         col._calcWidth = starSize;
16650                                 });
16651                         }
16652                 }
16653         }
16654
16655         function isAutoColumn(column) {
16656                 return column.width === 'auto';
16657         }
16658
16659         function isStarColumn(column) {
16660                 return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';
16661         }
16662
16663         //TODO: refactor and reuse in measureTable
16664         function measureMinMax(columns) {
16665                 var result = { min: 0, max: 0 };
16666
16667                 var maxStar = { min: 0, max: 0 };
16668                 var starCount = 0;
16669
16670                 for(var i = 0, l = columns.length; i < l; i++) {
16671                         var c = columns[i];
16672
16673                         if (isStarColumn(c)) {
16674                                 maxStar.min = Math.max(maxStar.min, c._minWidth);
16675                                 maxStar.max = Math.max(maxStar.max, c._maxWidth);
16676                                 starCount++;
16677                         } else if (isAutoColumn(c)) {
16678                                 result.min += c._minWidth;
16679                                 result.max += c._maxWidth;
16680                         } else {
16681                                 result.min += ((c.width !== undefined && c.width) || c._minWidth);
16682                                 result.max += ((c.width  !== undefined && c.width) || c._maxWidth);
16683                         }
16684                 }
16685
16686                 if (starCount) {
16687                         result.min += starCount * maxStar.min;
16688                         result.max += starCount * maxStar.max;
16689                 }
16690
16691                 return result;
16692         }
16693
16694         /**
16695         * Calculates column widths
16696         * @private
16697         */
16698         module.exports = {
16699                 buildColumnWidths: buildColumnWidths,
16700                 measureMinMax: measureMinMax,
16701                 isAutoColumn: isAutoColumn,
16702                 isStarColumn: isStarColumn
16703         };
16704
16705
16706 /***/ },
16707 /* 17 */
16708 /***/ function(module, exports) {
16709
16710         /* jslint node: true */
16711         'use strict';
16712
16713         function pack() {
16714                 var result = {};
16715
16716                 for(var i = 0, l = arguments.length; i < l; i++) {
16717                         var obj = arguments[i];
16718
16719                         if (obj) {
16720                                 for(var key in obj) {
16721                                         if (obj.hasOwnProperty(key)) {
16722                                                 result[key] = obj[key];
16723                                         }
16724                                 }
16725                         }
16726                 }
16727
16728                 return result;
16729         }
16730
16731         function offsetVector(vector, x, y) {
16732                 switch(vector.type) {
16733                 case 'ellipse':
16734                 case 'rect':
16735                         vector.x += x;
16736                         vector.y += y;
16737                         break;
16738                 case 'line':
16739                         vector.x1 += x;
16740                         vector.x2 += x;
16741                         vector.y1 += y;
16742                         vector.y2 += y;
16743                         break;
16744                 case 'polyline':
16745                         for(var i = 0, l = vector.points.length; i < l; i++) {
16746                                 vector.points[i].x += x;
16747                                 vector.points[i].y += y;
16748                         }
16749                         break;
16750                 }
16751         }
16752
16753         function fontStringify(key, val) {
16754                 if (key === 'font') {
16755                         return 'font';
16756                 }
16757                 return val;
16758         }
16759
16760         function isFunction(functionToCheck) {
16761                 var getType = {};
16762                 return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
16763         }
16764
16765
16766         module.exports = {
16767                 pack: pack,
16768                 fontStringify: fontStringify,
16769                 offsetVector: offsetVector,
16770                 isFunction: isFunction
16771         };
16772
16773
16774 /***/ },
16775 /* 18 */
16776 /***/ function(module, exports) {
16777
16778         /* jslint node: true */
16779         'use strict';
16780         /*jshint -W004 */
16781         /* qr.js -- QR code generator in Javascript (revision 2011-01-19)
16782          * Written by Kang Seonghoon <public+qrjs@mearie.org>.
16783          *
16784          * This source code is in the public domain; if your jurisdiction does not
16785          * recognize the public domain the terms of Creative Commons CC0 license
16786          * apply. In the other words, you can always do what you want.
16787          */
16788
16789
16790         // per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)
16791         //
16792         // [0]: the degree of generator polynomial by ECC levels
16793         // [1]: # of code blocks by ECC levels
16794         // [2]: left-top positions of alignment patterns
16795         //
16796         // the number in this table (in particular, [0]) does not exactly match with
16797         // the numbers in the specficiation. see augumenteccs below for the reason.
16798         var VERSIONS = [
16799                 null,
16800                 [[10, 7,17,13], [ 1, 1, 1, 1], []],
16801                 [[16,10,28,22], [ 1, 1, 1, 1], [4,16]],
16802                 [[26,15,22,18], [ 1, 1, 2, 2], [4,20]],
16803                 [[18,20,16,26], [ 2, 1, 4, 2], [4,24]],
16804                 [[24,26,22,18], [ 2, 1, 4, 4], [4,28]],
16805                 [[16,18,28,24], [ 4, 2, 4, 4], [4,32]],
16806                 [[18,20,26,18], [ 4, 2, 5, 6], [4,20,36]],
16807                 [[22,24,26,22], [ 4, 2, 6, 6], [4,22,40]],
16808                 [[22,30,24,20], [ 5, 2, 8, 8], [4,24,44]],
16809                 [[26,18,28,24], [ 5, 4, 8, 8], [4,26,48]],
16810                 [[30,20,24,28], [ 5, 4,11, 8], [4,28,52]],
16811                 [[22,24,28,26], [ 8, 4,11,10], [4,30,56]],
16812                 [[22,26,22,24], [ 9, 4,16,12], [4,32,60]],
16813                 [[24,30,24,20], [ 9, 4,16,16], [4,24,44,64]],
16814                 [[24,22,24,30], [10, 6,18,12], [4,24,46,68]],
16815                 [[28,24,30,24], [10, 6,16,17], [4,24,48,72]],
16816                 [[28,28,28,28], [11, 6,19,16], [4,28,52,76]],
16817                 [[26,30,28,28], [13, 6,21,18], [4,28,54,80]],
16818                 [[26,28,26,26], [14, 7,25,21], [4,28,56,84]],
16819                 [[26,28,28,30], [16, 8,25,20], [4,32,60,88]],
16820                 [[26,28,30,28], [17, 8,25,23], [4,26,48,70,92]],
16821                 [[28,28,24,30], [17, 9,34,23], [4,24,48,72,96]],
16822                 [[28,30,30,30], [18, 9,30,25], [4,28,52,76,100]],
16823                 [[28,30,30,30], [20,10,32,27], [4,26,52,78,104]],
16824                 [[28,26,30,30], [21,12,35,29], [4,30,56,82,108]],
16825                 [[28,28,30,28], [23,12,37,34], [4,28,56,84,112]],
16826                 [[28,30,30,30], [25,12,40,34], [4,32,60,88,116]],
16827                 [[28,30,30,30], [26,13,42,35], [4,24,48,72,96,120]],
16828                 [[28,30,30,30], [28,14,45,38], [4,28,52,76,100,124]],
16829                 [[28,30,30,30], [29,15,48,40], [4,24,50,76,102,128]],
16830                 [[28,30,30,30], [31,16,51,43], [4,28,54,80,106,132]],
16831                 [[28,30,30,30], [33,17,54,45], [4,32,58,84,110,136]],
16832                 [[28,30,30,30], [35,18,57,48], [4,28,56,84,112,140]],
16833                 [[28,30,30,30], [37,19,60,51], [4,32,60,88,116,144]],
16834                 [[28,30,30,30], [38,19,63,53], [4,28,52,76,100,124,148]],
16835                 [[28,30,30,30], [40,20,66,56], [4,22,48,74,100,126,152]],
16836                 [[28,30,30,30], [43,21,70,59], [4,26,52,78,104,130,156]],
16837                 [[28,30,30,30], [45,22,74,62], [4,30,56,82,108,134,160]],
16838                 [[28,30,30,30], [47,24,77,65], [4,24,52,80,108,136,164]],
16839                 [[28,30,30,30], [49,25,81,68], [4,28,56,84,112,140,168]]];
16840
16841         // mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)
16842         var MODE_TERMINATOR = 0;
16843         var MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;
16844
16845         // validation regexps
16846         var NUMERIC_REGEXP = /^\d*$/;
16847         var ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\-./:]*$/;
16848         var ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\-./:]*$/;
16849
16850         // ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)
16851         var ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;
16852
16853         // GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1
16854         // invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)
16855         var GF256_MAP = [], GF256_INVMAP = [-1];
16856         for (var i = 0, v = 1; i < 255; ++i) {
16857                 GF256_MAP.push(v);
16858                 GF256_INVMAP[v] = i;
16859                 v = (v * 2) ^ (v >= 128 ? 0x11d : 0);
16860         }
16861
16862         // generator polynomials up to degree 30
16863         // (should match with polynomials in JIS X 0510:2004 Appendix A)
16864         //
16865         // generator polynomial of degree K is product of (x-\alpha^0), (x-\alpha^1),
16866         // ..., (x-\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)
16867         // from the result; also other coefficients are written in terms of the exponent
16868         // to \alpha to avoid the redundant calculation. (see also calculateecc below.)
16869         var GF256_GENPOLY = [[]];
16870         for (var i = 0; i < 30; ++i) {
16871                 var prevpoly = GF256_GENPOLY[i], poly = [];
16872                 for (var j = 0; j <= i; ++j) {
16873                         var a = (j < i ? GF256_MAP[prevpoly[j]] : 0);
16874                         var b = GF256_MAP[(i + (prevpoly[j-1] || 0)) % 255];
16875                         poly.push(GF256_INVMAP[a ^ b]);
16876                 }
16877                 GF256_GENPOLY.push(poly);
16878         }
16879
16880         // alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)
16881         var ALPHANUMERIC_MAP = {};
16882         for (var i = 0; i < 45; ++i) {
16883                 ALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;
16884         }
16885
16886         // mask functions in terms of row # and column #
16887         // (cf. Table 20 in JIS X 0510:2004 p. 42)
16888         var MASKFUNCS = [
16889                 function(i,j) { return (i+j) % 2 === 0; },
16890                 function(i,j) { return i % 2 === 0; },
16891                 function(i,j) { return j % 3 === 0; },
16892                 function(i,j) { return (i+j) % 3 === 0; },
16893                 function(i,j) { return (((i/2)|0) + ((j/3)|0)) % 2 === 0; },
16894                 function(i,j) { return (i*j) % 2 + (i*j) % 3 === 0; },
16895                 function(i,j) { return ((i*j) % 2 + (i*j) % 3) % 2 === 0; },
16896                 function(i,j) { return ((i+j) % 2 + (i*j) % 3) % 2 === 0; }];
16897
16898         // returns true when the version information has to be embeded.
16899         var needsverinfo = function(ver) { return ver > 6; };
16900
16901         // returns the size of entire QR code for given version.
16902         var getsizebyver = function(ver) { return 4 * ver + 17; };
16903
16904         // returns the number of bits available for code words in this version.
16905         var nfullbits = function(ver) {
16906                 /*
16907                  * |<--------------- n --------------->|
16908                  * |        |<----- n-17 ---->|        |
16909                  * +-------+                ///+-------+ ----
16910                  * |       |                ///|       |    ^
16911                  * |  9x9  |       @@@@@    ///|  9x8  |    |
16912                  * |       | # # # @5x5@ # # # |       |    |
16913                  * +-------+       @@@@@       +-------+    |
16914                  *       #                               ---|
16915                  *                                        ^ |
16916                  *       #                                |
16917                  *     @@@@@       @@@@@       @@@@@      | n
16918                  *     @5x5@       @5x5@       @5x5@   n-17
16919                  *     @@@@@       @@@@@       @@@@@      | |
16920                  *       #                                | |
16921                  * //////                                 v |
16922                  * //////#                               ---|
16923                  * +-------+       @@@@@       @@@@@        |
16924                  * |       |       @5x5@       @5x5@        |
16925                  * |  8x9  |       @@@@@       @@@@@        |
16926                  * |       |                                v
16927                  * +-------+                             ----
16928                  *
16929                  * when the entire code has n^2 modules and there are m^2-3 alignment
16930                  * patterns, we have:
16931                  * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and
16932                  *   format information;
16933                  * - 2n-34 (= 2(n-17)) modules for timing patterns;
16934                  * - 36 (= 3x6 + 6x3) modules for version information, if any;
16935                  * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns
16936                  *   if any, but 10m-20 (= 2(m-2)x5) of them overlaps with
16937                  *   timing patterns.
16938                  */
16939                 var v = VERSIONS[ver];
16940                 var nbits = 16*ver*ver + 128*ver + 64; // finder, timing and format info.
16941                 if (needsverinfo(ver)) nbits -= 36; // version information
16942                 if (v[2].length) { // alignment patterns
16943                         nbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;
16944                 }
16945                 return nbits;
16946         };
16947
16948         // returns the number of bits available for data portions (i.e. excludes ECC
16949         // bits but includes mode and length bits) in this version and ECC level.
16950         var ndatabits = function(ver, ecclevel) {
16951                 var nbits = nfullbits(ver) & ~7; // no sub-octet code words
16952                 var v = VERSIONS[ver];
16953                 nbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits
16954                 return nbits;
16955         };
16956
16957         // returns the number of bits required for the length of data.
16958         // (cf. Table 3 in JIS X 0510:2004 p. 16)
16959         var ndatalenbits = function(ver, mode) {
16960                 switch (mode) {
16961                 case MODE_NUMERIC: return (ver < 10 ? 10 : ver < 27 ? 12 : 14);
16962                 case MODE_ALPHANUMERIC: return (ver < 10 ? 9 : ver < 27 ? 11 : 13);
16963                 case MODE_OCTET: return (ver < 10 ? 8 : 16);
16964                 case MODE_KANJI: return (ver < 10 ? 8 : ver < 27 ? 10 : 12);
16965                 }
16966         };
16967
16968         // returns the maximum length of data possible in given configuration.
16969         var getmaxdatalen = function(ver, mode, ecclevel) {
16970                 var nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits
16971                 switch (mode) {
16972                 case MODE_NUMERIC:
16973                         return ((nbits/10) | 0) * 3 + (nbits%10 < 4 ? 0 : nbits%10 < 7 ? 1 : 2);
16974                 case MODE_ALPHANUMERIC:
16975                         return ((nbits/11) | 0) * 2 + (nbits%11 < 6 ? 0 : 1);
16976                 case MODE_OCTET:
16977                         return (nbits/8) | 0;
16978                 case MODE_KANJI:
16979                         return (nbits/13) | 0;
16980                 }
16981         };
16982
16983         // checks if the given data can be encoded in given mode, and returns
16984         // the converted data for the further processing if possible. otherwise
16985         // returns null.
16986         //
16987         // this function does not check the length of data; it is a duty of
16988         // encode function below (as it depends on the version and ECC level too).
16989         var validatedata = function(mode, data) {
16990                 switch (mode) {
16991                 case MODE_NUMERIC:
16992                         if (!data.match(NUMERIC_REGEXP)) return null;
16993                         return data;
16994
16995                 case MODE_ALPHANUMERIC:
16996                         if (!data.match(ALPHANUMERIC_REGEXP)) return null;
16997                         return data.toUpperCase();
16998
16999                 case MODE_OCTET:
17000                         if (typeof data === 'string') { // encode as utf-8 string
17001                                 var newdata = [];
17002                                 for (var i = 0; i < data.length; ++i) {
17003                                         var ch = data.charCodeAt(i);
17004                                         if (ch < 0x80) {
17005                                                 newdata.push(ch);
17006                                         } else if (ch < 0x800) {
17007                                                 newdata.push(0xc0 | (ch >> 6),
17008                                                         0x80 | (ch & 0x3f));
17009                                         } else if (ch < 0x10000) {
17010                                                 newdata.push(0xe0 | (ch >> 12),
17011                                                         0x80 | ((ch >> 6) & 0x3f),
17012                                                         0x80 | (ch & 0x3f));
17013                                         } else {
17014                                                 newdata.push(0xf0 | (ch >> 18),
17015                                                         0x80 | ((ch >> 12) & 0x3f),
17016                                                         0x80 | ((ch >> 6) & 0x3f),
17017                                                         0x80 | (ch & 0x3f));
17018                                         }
17019                                 }
17020                                 return newdata;
17021                         } else {
17022                                 return data;
17023                         }
17024                 }
17025         };
17026
17027         // returns the code words (sans ECC bits) for given data and configurations.
17028         // requires data to be preprocessed by validatedata. no length check is
17029         // performed, and everything has to be checked before calling this function.
17030         var encode = function(ver, mode, data, maxbuflen) {
17031                 var buf = [];
17032                 var bits = 0, remaining = 8;
17033                 var datalen = data.length;
17034
17035                 // this function is intentionally no-op when n=0.
17036                 var pack = function(x, n) {
17037                         if (n >= remaining) {
17038                                 buf.push(bits | (x >> (n -= remaining)));
17039                                 while (n >= 8) buf.push((x >> (n -= 8)) & 255);
17040                                 bits = 0;
17041                                 remaining = 8;
17042                         }
17043                         if (n > 0) bits |= (x & ((1 << n) - 1)) << (remaining -= n);
17044                 };
17045
17046                 var nlenbits = ndatalenbits(ver, mode);
17047                 pack(mode, 4);
17048                 pack(datalen, nlenbits);
17049
17050                 switch (mode) {
17051                 case MODE_NUMERIC:
17052                         for (var i = 2; i < datalen; i += 3) {
17053                                 pack(parseInt(data.substring(i-2,i+1), 10), 10);
17054                         }
17055                         pack(parseInt(data.substring(i-2), 10), [0,4,7][datalen%3]);
17056                         break;
17057
17058                 case MODE_ALPHANUMERIC:
17059                         for (var i = 1; i < datalen; i += 2) {
17060                                 pack(ALPHANUMERIC_MAP[data.charAt(i-1)] * 45 +
17061                                         ALPHANUMERIC_MAP[data.charAt(i)], 11);
17062                         }
17063                         if (datalen % 2 == 1) {
17064                                 pack(ALPHANUMERIC_MAP[data.charAt(i-1)], 6);
17065                         }
17066                         break;
17067
17068                 case MODE_OCTET:
17069                         for (var i = 0; i < datalen; ++i) {
17070                                 pack(data[i], 8);
17071                         }
17072                         break;
17073                 }
17074
17075                 // final bits. it is possible that adding terminator causes the buffer
17076                 // to overflow, but then the buffer truncated to the maximum size will
17077                 // be valid as the truncated terminator mode bits and padding is
17078                 // identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).
17079                 pack(MODE_TERMINATOR, 4);
17080                 if (remaining < 8) buf.push(bits);
17081
17082                 // the padding to fill up the remaining space. we should not add any
17083                 // words when the overflow already occurred.
17084                 while (buf.length + 1 < maxbuflen) buf.push(0xec, 0x11);
17085                 if (buf.length < maxbuflen) buf.push(0xec);
17086                 return buf;
17087         };
17088
17089         // calculates ECC code words for given code words and generator polynomial.
17090         //
17091         // this is quite similar to CRC calculation as both Reed-Solomon and CRC use
17092         // the certain kind of cyclic codes, which is effectively the division of
17093         // zero-augumented polynomial by the generator polynomial. the only difference
17094         // is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon
17095         // uses the different generator polynomial than CRC's.
17096         var calculateecc = function(poly, genpoly) {
17097                 var modulus = poly.slice(0);
17098                 var polylen = poly.length, genpolylen = genpoly.length;
17099                 for (var i = 0; i < genpolylen; ++i) modulus.push(0);
17100                 for (var i = 0; i < polylen; ) {
17101                         var quotient = GF256_INVMAP[modulus[i++]];
17102                         if (quotient >= 0) {
17103                                 for (var j = 0; j < genpolylen; ++j) {
17104                                         modulus[i+j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];
17105                                 }
17106                         }
17107                 }
17108                 return modulus.slice(polylen);
17109         };
17110
17111         // auguments ECC code words to given code words. the resulting words are
17112         // ready to be encoded in the matrix.
17113         //
17114         // the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.
17115         // the code is simplified using the fact that the size of each code & ECC
17116         // blocks is almost same; for example, when we have 4 blocks and 46 data words
17117         // the number of code words in those blocks are 11, 11, 12, 12 respectively.
17118         var augumenteccs = function(poly, nblocks, genpoly) {
17119                 var subsizes = [];
17120                 var subsize = (poly.length / nblocks) | 0, subsize0 = 0;
17121                 var pivot = nblocks - poly.length % nblocks;
17122                 for (var i = 0; i < pivot; ++i) {
17123                         subsizes.push(subsize0);
17124                         subsize0 += subsize;
17125                 }
17126                 for (var i = pivot; i < nblocks; ++i) {
17127                         subsizes.push(subsize0);
17128                         subsize0 += subsize+1;
17129                 }
17130                 subsizes.push(subsize0);
17131
17132                 var eccs = [];
17133                 for (var i = 0; i < nblocks; ++i) {
17134                         eccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i+1]), genpoly));
17135                 }
17136
17137                 var result = [];
17138                 var nitemsperblock = (poly.length / nblocks) | 0;
17139                 for (var i = 0; i < nitemsperblock; ++i) {
17140                         for (var j = 0; j < nblocks; ++j) {
17141                                 result.push(poly[subsizes[j] + i]);
17142                         }
17143                 }
17144                 for (var j = pivot; j < nblocks; ++j) {
17145                         result.push(poly[subsizes[j+1] - 1]);
17146                 }
17147                 for (var i = 0; i < genpoly.length; ++i) {
17148                         for (var j = 0; j < nblocks; ++j) {
17149                                 result.push(eccs[j][i]);
17150                         }
17151                 }
17152                 return result;
17153         };
17154
17155         // auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper
17156         // genpoly. the both input and output are in binary numbers, and unlike
17157         // calculateecc genpoly should include the 1 bit for the highest degree.
17158         //
17159         // actual polynomials used for this procedure are as follows:
17160         // - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)
17161         // - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)
17162         var augumentbch = function(poly, p, genpoly, q) {
17163                 var modulus = poly << q;
17164                 for (var i = p - 1; i >= 0; --i) {
17165                         if ((modulus >> (q+i)) & 1) modulus ^= genpoly << i;
17166                 }
17167                 return (poly << q) | modulus;
17168         };
17169
17170         // creates the base matrix for given version. it returns two matrices, one of
17171         // them is the actual one and the another represents the "reserved" portion
17172         // (e.g. finder and timing patterns) of the matrix.
17173         //
17174         // some entries in the matrix may be undefined, rather than 0 or 1. this is
17175         // intentional (no initialization needed!), and putdata below will fill
17176         // the remaining ones.
17177         var makebasematrix = function(ver) {
17178                 var v = VERSIONS[ver], n = getsizebyver(ver);
17179                 var matrix = [], reserved = [];
17180                 for (var i = 0; i < n; ++i) {
17181                         matrix.push([]);
17182                         reserved.push([]);
17183                 }
17184
17185                 var blit = function(y, x, h, w, bits) {
17186                         for (var i = 0; i < h; ++i) {
17187                                 for (var j = 0; j < w; ++j) {
17188                                         matrix[y+i][x+j] = (bits[i] >> j) & 1;
17189                                         reserved[y+i][x+j] = 1;
17190                                 }
17191                         }
17192                 };
17193
17194                 // finder patterns and a part of timing patterns
17195                 // will also mark the format information area (not yet written) as reserved.
17196                 blit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);
17197                 blit(n-8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);
17198                 blit(0, n-8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);
17199
17200                 // the rest of timing patterns
17201                 for (var i = 9; i < n-8; ++i) {
17202                         matrix[6][i] = matrix[i][6] = ~i & 1;
17203                         reserved[6][i] = reserved[i][6] = 1;
17204                 }
17205
17206                 // alignment patterns
17207                 var aligns = v[2], m = aligns.length;
17208                 for (var i = 0; i < m; ++i) {
17209                         var minj = (i===0 || i===m-1 ? 1 : 0), maxj = (i===0 ? m-1 : m);
17210                         for (var j = minj; j < maxj; ++j) {
17211                                 blit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);
17212                         }
17213                 }
17214
17215                 // version information
17216                 if (needsverinfo(ver)) {
17217                         var code = augumentbch(ver, 6, 0x1f25, 12);
17218                         var k = 0;
17219                         for (var i = 0; i < 6; ++i) {
17220                                 for (var j = 0; j < 3; ++j) {
17221                                         matrix[i][(n-11)+j] = matrix[(n-11)+j][i] = (code >> k++) & 1;
17222                                         reserved[i][(n-11)+j] = reserved[(n-11)+j][i] = 1;
17223                                 }
17224                         }
17225                 }
17226
17227                 return {matrix: matrix, reserved: reserved};
17228         };
17229
17230         // fills the data portion (i.e. unmarked in reserved) of the matrix with given
17231         // code words. the size of code words should be no more than available bits,
17232         // and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).
17233         var putdata = function(matrix, reserved, buf) {
17234                 var n = matrix.length;
17235                 var k = 0, dir = -1;
17236                 for (var i = n-1; i >= 0; i -= 2) {
17237                         if (i == 6) --i; // skip the entire timing pattern column
17238                         var jj = (dir < 0 ? n-1 : 0);
17239                         for (var j = 0; j < n; ++j) {
17240                                 for (var ii = i; ii > i-2; --ii) {
17241                                         if (!reserved[jj][ii]) {
17242                                                 // may overflow, but (undefined >> x)
17243                                                 // is 0 so it will auto-pad to zero.
17244                                                 matrix[jj][ii] = (buf[k >> 3] >> (~k&7)) & 1;
17245                                                 ++k;
17246                                         }
17247                                 }
17248                                 jj += dir;
17249                         }
17250                         dir = -dir;
17251                 }
17252                 return matrix;
17253         };
17254
17255         // XOR-masks the data portion of the matrix. repeating the call with the same
17256         // arguments will revert the prior call (convenient in the matrix evaluation).
17257         var maskdata = function(matrix, reserved, mask) {
17258                 var maskf = MASKFUNCS[mask];
17259                 var n = matrix.length;
17260                 for (var i = 0; i < n; ++i) {
17261                         for (var j = 0; j < n; ++j) {
17262                                 if (!reserved[i][j]) matrix[i][j] ^= maskf(i,j);
17263                         }
17264                 }
17265                 return matrix;
17266         };
17267
17268         // puts the format information.
17269         var putformatinfo = function(matrix, reserved, ecclevel, mask) {
17270                 var n = matrix.length;
17271                 var code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;
17272                 for (var i = 0; i < 15; ++i) {
17273                         var r = [0,1,2,3,4,5,7,8,n-7,n-6,n-5,n-4,n-3,n-2,n-1][i];
17274                         var c = [n-1,n-2,n-3,n-4,n-5,n-6,n-7,n-8,7,5,4,3,2,1,0][i];
17275                         matrix[r][8] = matrix[8][c] = (code >> i) & 1;
17276                         // we don't have to mark those bits reserved; always done
17277                         // in makebasematrix above.
17278                 }
17279                 return matrix;
17280         };
17281
17282         // evaluates the resulting matrix and returns the score (lower is better).
17283         // (cf. JIS X 0510:2004 sec 8.8.2)
17284         //
17285         // the evaluation procedure tries to avoid the problematic patterns naturally
17286         // occuring from the original matrix. for example, it penaltizes the patterns
17287         // which just look like the finder pattern which will confuse the decoder.
17288         // we choose the mask which results in the lowest score among 8 possible ones.
17289         //
17290         // note: zxing seems to use the same procedure and in many cases its choice
17291         // agrees to ours, but sometimes it does not. practically it doesn't matter.
17292         var evaluatematrix = function(matrix) {
17293                 // N1+(k-5) points for each consecutive row of k same-colored modules,
17294                 // where k >= 5. no overlapping row counts.
17295                 var PENALTY_CONSECUTIVE = 3;
17296                 // N2 points for each 2x2 block of same-colored modules.
17297                 // overlapping block does count.
17298                 var PENALTY_TWOBYTWO = 3;
17299                 // N3 points for each pattern with >4W:1B:1W:3B:1W:1B or
17300                 // 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,
17301                 // but 13W:3B:3W:9B:3W:3B counts).
17302                 var PENALTY_FINDERLIKE = 40;
17303                 // N4*k points for every (5*k)% deviation from 50% black density.
17304                 // i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.
17305                 var PENALTY_DENSITY = 10;
17306
17307                 var evaluategroup = function(groups) { // assumes [W,B,W,B,W,...,B,W]
17308                         var score = 0;
17309                         for (var i = 0; i < groups.length; ++i) {
17310                                 if (groups[i] >= 5) score += PENALTY_CONSECUTIVE + (groups[i]-5);
17311                         }
17312                         for (var i = 5; i < groups.length; i += 2) {
17313                                 var p = groups[i];
17314                                 if (groups[i-1] == p && groups[i-2] == 3*p && groups[i-3] == p &&
17315                                                 groups[i-4] == p && (groups[i-5] >= 4*p || groups[i+1] >= 4*p)) {
17316                                         // this part differs from zxing...
17317                                         score += PENALTY_FINDERLIKE;
17318                                 }
17319                         }
17320                         return score;
17321                 };
17322
17323                 var n = matrix.length;
17324                 var score = 0, nblacks = 0;
17325                 for (var i = 0; i < n; ++i) {
17326                         var row = matrix[i];
17327                         var groups;
17328
17329                         // evaluate the current row
17330                         groups = [0]; // the first empty group of white
17331                         for (var j = 0; j < n; ) {
17332                                 var k;
17333                                 for (k = 0; j < n && row[j]; ++k) ++j;
17334                                 groups.push(k);
17335                                 for (k = 0; j < n && !row[j]; ++k) ++j;
17336                                 groups.push(k);
17337                         }
17338                         score += evaluategroup(groups);
17339
17340                         // evaluate the current column
17341                         groups = [0];
17342                         for (var j = 0; j < n; ) {
17343                                 var k;
17344                                 for (k = 0; j < n && matrix[j][i]; ++k) ++j;
17345                                 groups.push(k);
17346                                 for (k = 0; j < n && !matrix[j][i]; ++k) ++j;
17347                                 groups.push(k);
17348                         }
17349                         score += evaluategroup(groups);
17350
17351                         // check the 2x2 box and calculate the density
17352                         var nextrow = matrix[i+1] || [];
17353                         nblacks += row[0];
17354                         for (var j = 1; j < n; ++j) {
17355                                 var p = row[j];
17356                                 nblacks += p;
17357                                 // at least comparison with next row should be strict...
17358                                 if (row[j-1] == p && nextrow[j] === p && nextrow[j-1] === p) {
17359                                         score += PENALTY_TWOBYTWO;
17360                                 }
17361                         }
17362                 }
17363
17364                 score += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);
17365                 return score;
17366         };
17367
17368         // returns the fully encoded QR code matrix which contains given data.
17369         // it also chooses the best mask automatically when mask is -1.
17370         var generate = function(data, ver, mode, ecclevel, mask) {
17371                 var v = VERSIONS[ver];
17372                 var buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);
17373                 buf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);
17374
17375                 var result = makebasematrix(ver);
17376                 var matrix = result.matrix, reserved = result.reserved;
17377                 putdata(matrix, reserved, buf);
17378
17379                 if (mask < 0) {
17380                         // find the best mask
17381                         maskdata(matrix, reserved, 0);
17382                         putformatinfo(matrix, reserved, ecclevel, 0);
17383                         var bestmask = 0, bestscore = evaluatematrix(matrix);
17384                         maskdata(matrix, reserved, 0);
17385                         for (mask = 1; mask < 8; ++mask) {
17386                                 maskdata(matrix, reserved, mask);
17387                                 putformatinfo(matrix, reserved, ecclevel, mask);
17388                                 var score = evaluatematrix(matrix);
17389                                 if (bestscore > score) {
17390                                         bestscore = score;
17391                                         bestmask = mask;
17392                                 }
17393                                 maskdata(matrix, reserved, mask);
17394                         }
17395                         mask = bestmask;
17396                 }
17397
17398                 maskdata(matrix, reserved, mask);
17399                 putformatinfo(matrix, reserved, ecclevel, mask);
17400                 return matrix;
17401         };
17402
17403         // the public interface is trivial; the options available are as follows:
17404         //
17405         // - version: an integer in [1,40]. when omitted (or -1) the smallest possible
17406         //   version is chosen.
17407         // - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest
17408         //   possible mode is chosen.
17409         // - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.
17410         // - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.
17411         //
17412
17413         function generateFrame(data, options) {
17414                         var MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,
17415                                 'octet': MODE_OCTET};
17416                         var ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,
17417                                 'H': ECCLEVEL_H};
17418
17419                         options = options || {};
17420                         var ver = options.version || -1;
17421                         var ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];
17422                         var mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;
17423                         var mask = 'mask' in options ? options.mask : -1;
17424
17425                         if (mode < 0) {
17426                                 if (typeof data === 'string') {
17427                                         if (data.match(NUMERIC_REGEXP)) {
17428                                                 mode = MODE_NUMERIC;
17429                                         } else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {
17430                                                 // while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.
17431                                                 mode = MODE_ALPHANUMERIC;
17432                                         } else {
17433                                                 mode = MODE_OCTET;
17434                                         }
17435                                 } else {
17436                                         mode = MODE_OCTET;
17437                                 }
17438                         } else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||
17439                                         mode == MODE_OCTET)) {
17440                                 throw 'invalid or unsupported mode';
17441                         }
17442
17443                         data = validatedata(mode, data);
17444                         if (data === null) throw 'invalid data format';
17445
17446                         if (ecclevel < 0 || ecclevel > 3) throw 'invalid ECC level';
17447
17448                         if (ver < 0) {
17449                                 for (ver = 1; ver <= 40; ++ver) {
17450                                         if (data.length <= getmaxdatalen(ver, mode, ecclevel)) break;
17451                                 }
17452                                 if (ver > 40) throw 'too large data for the Qr format';
17453                         } else if (ver < 1 || ver > 40) {
17454                                 throw 'invalid Qr version! should be between 1 and 40';
17455                         }
17456
17457                         if (mask != -1 && (mask < 0 || mask > 8)) throw 'invalid mask';
17458                 //console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )
17459                         return generate(data, ver, mode, ecclevel, mask);
17460                 }
17461
17462
17463         // options
17464         // - modulesize: a number. this is a size of each modules in pixels, and
17465         //   defaults to 5px.
17466         // - margin: a number. this is a size of margin in *modules*, and defaults to
17467         //   4 (white modules). the specficiation mandates the margin no less than 4
17468         //   modules, so it is better not to alter this value unless you know what
17469         //   you're doing.
17470         function buildCanvas(data, options) {
17471            
17472             var canvas = [];
17473             var background = data.background || '#fff';
17474             var foreground = data.foreground || '#000';
17475             //var margin = options.margin || 4;
17476                 var matrix = generateFrame(data, options);
17477                 var n = matrix.length;
17478                 var modSize = Math.floor( options.fit ? options.fit/n : 5 );
17479                 var size = n * modSize;
17480                 
17481             canvas.push({
17482               type: 'rect',
17483               x: 0, y: 0, w: size, h: size, lineWidth: 0, color: background
17484             });
17485             
17486                 for (var i = 0; i < n; ++i) {
17487                         for (var j = 0; j < n; ++j) {
17488                     if(matrix[i][j]) {
17489                       canvas.push({
17490                         type: 'rect',
17491                         x: modSize * i,
17492                         y: modSize * j,
17493                         w: modSize,
17494                         h: modSize,
17495                         lineWidth: 0,
17496                         color: foreground
17497                       });
17498                     }
17499                 }
17500             }
17501             
17502             return {
17503                 canvas: canvas,
17504                 size: size
17505             };
17506                         
17507         }
17508
17509         function measure(node) {
17510             var cd = buildCanvas(node.qr, node);
17511             node._canvas = cd.canvas;
17512             node._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;
17513             return node;
17514         }
17515
17516         module.exports = {
17517           measure: measure
17518         };
17519
17520 /***/ },
17521 /* 19 */
17522 /***/ function(module, exports, __webpack_require__) {
17523
17524         /* jslint node: true */
17525         'use strict';
17526
17527         var TraversalTracker = __webpack_require__(12);
17528
17529         /**
17530         * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.
17531         * It facilitates column divisions and vertical sync
17532         */
17533         function DocumentContext(pageSize, pageMargins) {
17534                 this.pages = [];
17535
17536                 this.pageMargins = pageMargins;
17537
17538                 this.x = pageMargins.left;
17539                 this.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;
17540                 this.availableHeight = 0;
17541                 this.page = -1;
17542
17543                 this.snapshots = [];
17544
17545                 this.endingCell = null;
17546
17547           this.tracker = new TraversalTracker();
17548
17549                 this.addPage(pageSize);
17550         }
17551
17552         DocumentContext.prototype.beginColumnGroup = function() {
17553                 this.snapshots.push({
17554                         x: this.x,
17555                         y: this.y,
17556                         availableHeight: this.availableHeight,
17557                         availableWidth: this.availableWidth,
17558                         page: this.page,
17559                         bottomMost: { y: this.y, page: this.page },
17560                         endingCell: this.endingCell,
17561                         lastColumnWidth: this.lastColumnWidth
17562                 });
17563
17564                 this.lastColumnWidth = 0;
17565         };
17566
17567         DocumentContext.prototype.beginColumn = function(width, offset, endingCell) {
17568                 var saved = this.snapshots[this.snapshots.length - 1];
17569
17570                 this.calculateBottomMost(saved);
17571
17572           this.endingCell = endingCell;
17573                 this.page = saved.page;
17574                 this.x = this.x + this.lastColumnWidth + (offset || 0);
17575                 this.y = saved.y;
17576                 this.availableWidth = width;    //saved.availableWidth - offset;
17577                 this.availableHeight = saved.availableHeight;
17578
17579                 this.lastColumnWidth = width;
17580         };
17581
17582         DocumentContext.prototype.calculateBottomMost = function(destContext) {
17583                 if (this.endingCell) {
17584                         this.saveContextInEndingCell(this.endingCell);
17585                         this.endingCell = null;
17586                 } else {
17587                         destContext.bottomMost = bottomMostContext(this, destContext.bottomMost);
17588                 }
17589         };
17590
17591         DocumentContext.prototype.markEnding = function(endingCell) {
17592                 this.page = endingCell._columnEndingContext.page;
17593                 this.x = endingCell._columnEndingContext.x;
17594                 this.y = endingCell._columnEndingContext.y;
17595                 this.availableWidth = endingCell._columnEndingContext.availableWidth;
17596                 this.availableHeight = endingCell._columnEndingContext.availableHeight;
17597                 this.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;
17598         };
17599
17600         DocumentContext.prototype.saveContextInEndingCell = function(endingCell) {
17601                 endingCell._columnEndingContext = {
17602                         page: this.page,
17603                         x: this.x,
17604                         y: this.y,
17605                         availableHeight: this.availableHeight,
17606                         availableWidth: this.availableWidth,
17607                         lastColumnWidth: this.lastColumnWidth
17608                 };
17609         };
17610
17611         DocumentContext.prototype.completeColumnGroup = function() {
17612                 var saved = this.snapshots.pop();
17613
17614                 this.calculateBottomMost(saved);
17615
17616                 this.endingCell = null;
17617                 this.x = saved.x;
17618                 this.y = saved.bottomMost.y;
17619                 this.page = saved.bottomMost.page;
17620                 this.availableWidth = saved.availableWidth;
17621                 this.availableHeight = saved.bottomMost.availableHeight;
17622                 this.lastColumnWidth = saved.lastColumnWidth;
17623         };
17624
17625         DocumentContext.prototype.addMargin = function(left, right) {
17626                 this.x += left;
17627                 this.availableWidth -= left + (right || 0);
17628         };
17629
17630         DocumentContext.prototype.moveDown = function(offset) {
17631                 this.y += offset;
17632                 this.availableHeight -= offset;
17633
17634                 return this.availableHeight > 0;
17635         };
17636
17637         DocumentContext.prototype.initializePage = function() {
17638                 this.y = this.pageMargins.top;
17639                 this.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
17640                 this.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;
17641         };
17642
17643         DocumentContext.prototype.pageSnapshot = function(){
17644           if(this.snapshots[0]){
17645             return this.snapshots[0];
17646           } else {
17647             return this;
17648           }
17649         };
17650
17651         DocumentContext.prototype.moveTo = function(x,y) {
17652                 if(x !== undefined && x !== null) {
17653                         this.x = x;
17654                         this.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;
17655                 }
17656                 if(y !== undefined && y !== null){
17657                         this.y = y;
17658                         this.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;
17659                 }
17660         };
17661
17662         DocumentContext.prototype.beginDetachedBlock = function() {
17663                 this.snapshots.push({
17664                         x: this.x,
17665                         y: this.y,
17666                         availableHeight: this.availableHeight,
17667                         availableWidth: this.availableWidth,
17668                         page: this.page,
17669                         endingCell: this.endingCell,
17670                         lastColumnWidth: this.lastColumnWidth
17671                 });
17672         };
17673
17674         DocumentContext.prototype.endDetachedBlock = function() {
17675                 var saved = this.snapshots.pop();
17676
17677                 this.x = saved.x;
17678                 this.y = saved.y;
17679                 this.availableWidth = saved.availableWidth;
17680                 this.availableHeight = saved.availableHeight;
17681                 this.page = saved.page;
17682                 this.endingCell = saved.endingCell;
17683                 this.lastColumnWidth = saved.lastColumnWidth;
17684         };
17685
17686         function pageOrientation(pageOrientationString, currentPageOrientation){
17687                 if(pageOrientationString === undefined) {
17688                         return currentPageOrientation;
17689                 } else if(pageOrientationString === 'landscape'){
17690                         return 'landscape';
17691                 } else {
17692                         return 'portrait';
17693                 }
17694         }
17695
17696         var getPageSize = function (currentPage, newPageOrientation) {
17697
17698                 newPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);
17699
17700                 if(newPageOrientation !== currentPage.pageSize.orientation) {
17701                         return {
17702                                 orientation: newPageOrientation,
17703                                 width: currentPage.pageSize.height,
17704                                 height: currentPage.pageSize.width
17705                         };
17706                 } else {
17707                         return {
17708                                 orientation: currentPage.pageSize.orientation,
17709                                 width: currentPage.pageSize.width,
17710                                 height: currentPage.pageSize.height
17711                         };
17712                 }
17713
17714         };
17715
17716
17717         DocumentContext.prototype.moveToNextPage = function(pageOrientation) {
17718                 var nextPageIndex = this.page + 1;
17719
17720                 var prevPage = this.page;
17721                 var prevY = this.y;
17722
17723                 var createNewPage = nextPageIndex >= this.pages.length;
17724                 if (createNewPage) {
17725                         this.addPage(getPageSize(this.getCurrentPage(), pageOrientation));
17726                 } else {
17727                         this.page = nextPageIndex;
17728                         this.initializePage();
17729                 }
17730
17731           return {
17732                         newPageCreated: createNewPage,
17733                         prevPage: prevPage,
17734                         prevY: prevY,
17735                         y: this.y
17736                 };
17737         };
17738
17739
17740         DocumentContext.prototype.addPage = function(pageSize) {
17741                 var page = { items: [], pageSize: pageSize };
17742                 this.pages.push(page);
17743                 this.page = this.pages.length - 1;
17744                 this.initializePage();
17745
17746                 this.tracker.emit('pageAdded');
17747
17748                 return page;
17749         };
17750
17751         DocumentContext.prototype.getCurrentPage = function() {
17752                 if (this.page < 0 || this.page >= this.pages.length) return null;
17753
17754                 return this.pages[this.page];
17755         };
17756
17757         DocumentContext.prototype.getCurrentPosition = function() {
17758           var pageSize = this.getCurrentPage().pageSize;
17759           var innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
17760           var innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;
17761
17762           return {
17763             pageNumber: this.page + 1,
17764             pageOrientation: pageSize.orientation,
17765             pageInnerHeight: innerHeight,
17766             pageInnerWidth: innerWidth,
17767             left: this.x,
17768             top: this.y,
17769             verticalRatio: ((this.y - this.pageMargins.top) / innerHeight),
17770             horizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)
17771           };
17772         };
17773
17774         function bottomMostContext(c1, c2) {
17775                 var r;
17776
17777                 if (c1.page > c2.page) r = c1;
17778                 else if (c2.page > c1.page) r = c2;
17779                 else r = (c1.y > c2.y) ? c1 : c2;
17780
17781                 return {
17782                         page: r.page,
17783                         x: r.x,
17784                         y: r.y,
17785                         availableHeight: r.availableHeight,
17786                         availableWidth: r.availableWidth
17787                 };
17788         }
17789
17790         /****TESTS**** (add a leading '/' to uncomment)
17791         DocumentContext.bottomMostContext = bottomMostContext;
17792         // */
17793
17794         module.exports = DocumentContext;
17795
17796
17797 /***/ },
17798 /* 20 */
17799 /***/ function(module, exports, __webpack_require__) {
17800
17801         /* jslint node: true */
17802         'use strict';
17803
17804         var ElementWriter = __webpack_require__(21);
17805
17806         /**
17807         * Creates an instance of PageElementWriter - an extended ElementWriter
17808         * which can handle:
17809         * - page-breaks (it adds new pages when there's not enough space left),
17810         * - repeatable fragments (like table-headers, which are repeated everytime
17811         *                         a page-break occurs)
17812         * - transactions (used for unbreakable-blocks when we want to make sure
17813         *                 whole block will be rendered on the same page)
17814         */
17815         function PageElementWriter(context, tracker) {
17816                 this.transactionLevel = 0;
17817                 this.repeatables = [];
17818                 this.tracker = tracker;
17819                 this.writer = new ElementWriter(context, tracker);
17820         }
17821
17822         function fitOnPage(self, addFct){
17823           var position = addFct(self);
17824           if (!position) {
17825             self.moveToNextPage();
17826             position = addFct(self);
17827           }
17828           return position;
17829         }
17830
17831         PageElementWriter.prototype.addLine = function(line, dontUpdateContextPosition, index) {
17832           return fitOnPage(this, function(self){
17833             return self.writer.addLine(line, dontUpdateContextPosition, index);
17834           });
17835         };
17836
17837         PageElementWriter.prototype.addImage = function(image, index) {
17838           return fitOnPage(this, function(self){
17839             return self.writer.addImage(image, index);
17840           });
17841         };
17842
17843         PageElementWriter.prototype.addQr = function(qr, index) {
17844           return fitOnPage(this, function(self){
17845                         return self.writer.addQr(qr, index);
17846                 });
17847         };
17848
17849         PageElementWriter.prototype.addVector = function(vector, ignoreContextX, ignoreContextY, index) {
17850                 return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);
17851         };
17852
17853         PageElementWriter.prototype.addFragment = function(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
17854                 if (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {
17855                         this.moveToNextPage();
17856                         this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);
17857                 }
17858         };
17859
17860         PageElementWriter.prototype.moveToNextPage = function(pageOrientation) {
17861                 
17862                 var nextPage = this.writer.context.moveToNextPage(pageOrientation);
17863                 
17864           if (nextPage.newPageCreated) {
17865                         this.repeatables.forEach(function(rep) {
17866                                 this.writer.addFragment(rep, true);
17867                         }, this);
17868                 } else {
17869                         this.repeatables.forEach(function(rep) {
17870                                 this.writer.context.moveDown(rep.height);
17871                         }, this);
17872                 }
17873
17874                 this.writer.tracker.emit('pageChanged', {
17875                         prevPage: nextPage.prevPage,
17876                         prevY: nextPage.prevY,
17877                         y: nextPage.y
17878                 });
17879         };
17880
17881         PageElementWriter.prototype.beginUnbreakableBlock = function(width, height) {
17882                 if (this.transactionLevel++ === 0) {
17883                         this.originalX = this.writer.context.x;
17884                         this.writer.pushContext(width, height);
17885                 }
17886         };
17887
17888         PageElementWriter.prototype.commitUnbreakableBlock = function(forcedX, forcedY) {
17889                 if (--this.transactionLevel === 0) {
17890                         var unbreakableContext = this.writer.context;
17891                         this.writer.popContext();
17892
17893                         var nbPages = unbreakableContext.pages.length;
17894                         if(nbPages > 0) {
17895                                 // no support for multi-page unbreakableBlocks
17896                                 var fragment = unbreakableContext.pages[0];
17897                                 fragment.xOffset = forcedX;
17898                                 fragment.yOffset = forcedY;
17899
17900                                 //TODO: vectors can influence height in some situations
17901                                 if(nbPages > 1) {
17902                                         // on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height
17903                                         if (forcedX !== undefined || forcedY !== undefined) {
17904                                                 fragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;
17905                                         } else {
17906                                                 fragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;
17907                                                 for (var i = 0, l = this.repeatables.length; i < l; i++) {
17908                                                         fragment.height -= this.repeatables[i].height;
17909                                                 }
17910                                         }
17911                                 } else {
17912                                         fragment.height = unbreakableContext.y;
17913                                 }
17914
17915                                 if (forcedX !== undefined || forcedY !== undefined) {
17916                                         this.writer.addFragment(fragment, true, true, true);
17917                                 } else {
17918                                         this.addFragment(fragment);
17919                                 }
17920                         }
17921                 }
17922         };
17923
17924         PageElementWriter.prototype.currentBlockToRepeatable = function() {
17925                 var unbreakableContext = this.writer.context;
17926                 var rep = { items: [] };
17927
17928             unbreakableContext.pages[0].items.forEach(function(item) {
17929                 rep.items.push(item);
17930             });
17931
17932                 rep.xOffset = this.originalX;
17933
17934                 //TODO: vectors can influence height in some situations
17935                 rep.height = unbreakableContext.y;
17936
17937                 return rep;
17938         };
17939
17940         PageElementWriter.prototype.pushToRepeatables = function(rep) {
17941                 this.repeatables.push(rep);
17942         };
17943
17944         PageElementWriter.prototype.popFromRepeatables = function() {
17945                 this.repeatables.pop();
17946         };
17947
17948         PageElementWriter.prototype.context = function() {
17949                 return this.writer.context;
17950         };
17951
17952         module.exports = PageElementWriter;
17953
17954
17955 /***/ },
17956 /* 21 */
17957 /***/ function(module, exports, __webpack_require__) {
17958
17959         /* jslint node: true */
17960         'use strict';
17961
17962         var Line = __webpack_require__(22);
17963         var pack = __webpack_require__(17).pack;
17964         var offsetVector = __webpack_require__(17).offsetVector;
17965         var DocumentContext = __webpack_require__(19);
17966
17967         /**
17968         * Creates an instance of ElementWriter - a line/vector writer, which adds
17969         * elements to current page and sets their positions based on the context
17970         */
17971         function ElementWriter(context, tracker) {
17972                 this.context = context;
17973                 this.contextStack = [];
17974                 this.tracker = tracker;
17975         }
17976
17977         function addPageItem(page, item, index) {
17978                 if(index === null || index === undefined || index < 0 || index > page.items.length) {
17979                         page.items.push(item);
17980                 } else {
17981                         page.items.splice(index, 0, item);
17982                 }
17983         }
17984
17985         ElementWriter.prototype.addLine = function(line, dontUpdateContextPosition, index) {
17986                 var height = line.getHeight();
17987                 var context = this.context;
17988                 var page = context.getCurrentPage(),
17989               position = this.getCurrentPositionOnPage();
17990
17991                 if (context.availableHeight < height || !page) {
17992                         return false;
17993                 }
17994
17995                 line.x = context.x + (line.x || 0);
17996                 line.y = context.y + (line.y || 0);
17997
17998                 this.alignLine(line);
17999
18000             addPageItem(page, {
18001                 type: 'line',
18002                 item: line
18003             }, index);
18004                 this.tracker.emit('lineAdded', line);
18005
18006                 if (!dontUpdateContextPosition) context.moveDown(height);
18007
18008                 return position;
18009         };
18010
18011         ElementWriter.prototype.alignLine = function(line) {
18012                 var width = this.context.availableWidth;
18013                 var lineWidth = line.getWidth();
18014
18015                 var alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;
18016
18017                 var offset = 0;
18018                 switch(alignment) {
18019                         case 'right':
18020                                 offset = width - lineWidth;
18021                                 break;
18022                         case 'center':
18023                                 offset = (width - lineWidth) / 2;
18024                                 break;
18025                 }
18026
18027                 if (offset) {
18028                         line.x = (line.x || 0) + offset;
18029                 }
18030
18031                 if (alignment === 'justify' &&
18032                         !line.newLineForced &&
18033                         !line.lastLineInParagraph &&
18034                         line.inlines.length > 1) {
18035                         var additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);
18036
18037                         for(var i = 1, l = line.inlines.length; i < l; i++) {
18038                                 offset = i * additionalSpacing;
18039
18040                                 line.inlines[i].x += offset;
18041                         }
18042                 }
18043         };
18044
18045         ElementWriter.prototype.addImage = function(image, index) {
18046                 var context = this.context;
18047                 var page = context.getCurrentPage(),
18048               position = this.getCurrentPositionOnPage();
18049
18050                 if (context.availableHeight < image._height || !page) {
18051                         return false;
18052                 }
18053
18054                 image.x = context.x + (image.x || 0);
18055                 image.y = context.y;
18056
18057                 this.alignImage(image);
18058
18059                 addPageItem(page, {
18060                 type: 'image',
18061                 item: image
18062             }, index);
18063
18064                 context.moveDown(image._height);
18065
18066                 return position;
18067         };
18068
18069         ElementWriter.prototype.addQr = function(qr, index) {
18070                 var context = this.context;
18071                 var page = context.getCurrentPage(),
18072               position = this.getCurrentPositionOnPage();
18073
18074                 if (context.availableHeight < qr._height || !page) {
18075                         return false;
18076                 }
18077
18078                 qr.x = context.x + (qr.x || 0);
18079                 qr.y = context.y;
18080
18081                 this.alignImage(qr);
18082
18083                 for (var i=0, l=qr._canvas.length; i < l; i++) {
18084                         var vector = qr._canvas[i];
18085                         vector.x += qr.x;
18086                         vector.y += qr.y;
18087                         this.addVector(vector, true, true, index);
18088                 }
18089
18090                 context.moveDown(qr._height);
18091
18092                 return position;
18093         };
18094
18095         ElementWriter.prototype.alignImage = function(image) {
18096                 var width = this.context.availableWidth;
18097                 var imageWidth = image._minWidth;
18098                 var offset = 0;
18099                 switch(image._alignment) {
18100                         case 'right':
18101                                 offset = width - imageWidth;
18102                                 break;
18103                         case 'center':
18104                                 offset = (width - imageWidth) / 2;
18105                                 break;
18106                 }
18107
18108                 if (offset) {
18109                         image.x = (image.x || 0) + offset;
18110                 }
18111         };
18112
18113         ElementWriter.prototype.addVector = function(vector, ignoreContextX, ignoreContextY, index) {
18114                 var context = this.context;
18115                 var page = context.getCurrentPage(),
18116               position = this.getCurrentPositionOnPage();
18117
18118                 if (page) {
18119                         offsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
18120                 addPageItem(page, {
18121                     type: 'vector',
18122                     item: vector
18123                 }, index);
18124                         return position;
18125                 }
18126         };
18127
18128         function cloneLine(line) {
18129                 var result = new Line(line.maxWidth);
18130
18131                 for(var key in line) {
18132                         if (line.hasOwnProperty(key)) {
18133                                 result[key] = line[key];
18134                         }
18135                 }
18136
18137                 return result;
18138         }
18139
18140         ElementWriter.prototype.addFragment = function(block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
18141                 var ctx = this.context;
18142                 var page = ctx.getCurrentPage();
18143
18144                 if (!useBlockXOffset && block.height > ctx.availableHeight) return false;
18145
18146                 block.items.forEach(function(item) {
18147                 switch(item.type) {
18148                     case 'line':
18149                         var l = cloneLine(item.item);
18150
18151                         l.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
18152                         l.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
18153
18154                         page.items.push({
18155                             type: 'line',
18156                             item: l
18157                         });
18158                         break;
18159
18160                     case 'vector':
18161                         var v = pack(item.item);
18162
18163                         offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);
18164                         page.items.push({
18165                             type: 'vector',
18166                             item: v
18167                         });
18168                         break;
18169
18170                     case 'image':
18171                         var img = pack(item.item);
18172
18173                         img.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
18174                         img.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
18175
18176                         page.items.push({
18177                             type: 'image',
18178                             item: img
18179                         });
18180                         break;
18181                 }
18182                 });
18183
18184                 if (!dontUpdateContextPosition) ctx.moveDown(block.height);
18185
18186                 return true;
18187         };
18188
18189         /**
18190         * Pushes the provided context onto the stack or creates a new one
18191         *
18192         * pushContext(context) - pushes the provided context and makes it current
18193         * pushContext(width, height) - creates and pushes a new context with the specified width and height
18194         * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)
18195         */
18196         ElementWriter.prototype.pushContext = function(contextOrWidth, height) {
18197                 if (contextOrWidth === undefined) {
18198                         height = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;
18199                         contextOrWidth = this.context.availableWidth;
18200                 }
18201
18202                 if (typeof contextOrWidth === 'number' || contextOrWidth instanceof Number) {
18203                         contextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });
18204                 }
18205
18206                 this.contextStack.push(this.context);
18207                 this.context = contextOrWidth;
18208         };
18209
18210         ElementWriter.prototype.popContext = function() {
18211                 this.context = this.contextStack.pop();
18212         };
18213
18214         ElementWriter.prototype.getCurrentPositionOnPage = function(){
18215                 return (this.contextStack[0] || this.context).getCurrentPosition();
18216         };
18217
18218
18219         module.exports = ElementWriter;
18220
18221
18222 /***/ },
18223 /* 22 */
18224 /***/ function(module, exports) {
18225
18226         /* jslint node: true */
18227         'use strict';
18228
18229         /**
18230         * Creates an instance of Line
18231         *
18232         * @constructor
18233         * @this {Line}
18234         * @param {Number} Maximum width this line can have
18235         */
18236         function Line(maxWidth) {
18237                 this.maxWidth = maxWidth;
18238                 this.leadingCut = 0;
18239                 this.trailingCut = 0;
18240                 this.inlineWidths = 0;
18241                 this.inlines = [];
18242         }
18243
18244         Line.prototype.getAscenderHeight = function() {
18245                 var y = 0;
18246
18247                 this.inlines.forEach(function(inline) {
18248                         y = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);
18249                 });
18250                 return y;
18251         };
18252
18253         Line.prototype.hasEnoughSpaceForInline = function(inline) {
18254                 if (this.inlines.length === 0) return true;
18255                 if (this.newLineForced) return false;
18256
18257                 return this.inlineWidths + inline.width - this.leadingCut - (inline.trailingCut || 0) <= this.maxWidth;
18258         };
18259
18260         Line.prototype.addInline = function(inline) {
18261                 if (this.inlines.length === 0) {
18262                         this.leadingCut = inline.leadingCut || 0;
18263                 }
18264                 this.trailingCut = inline.trailingCut || 0;
18265
18266                 inline.x = this.inlineWidths - this.leadingCut;
18267
18268                 this.inlines.push(inline);
18269                 this.inlineWidths += inline.width;
18270
18271                 if (inline.lineEnd) {
18272                         this.newLineForced = true;
18273                 }
18274         };
18275
18276         Line.prototype.getWidth = function() {
18277                 return this.inlineWidths - this.leadingCut - this.trailingCut;
18278         };
18279
18280         /**
18281         * Returns line height
18282         * @return {Number}
18283         */
18284         Line.prototype.getHeight = function() {
18285                 var max = 0;
18286
18287                 this.inlines.forEach(function(item) {
18288                         max = Math.max(max, item.height || 0);
18289                 });
18290
18291                 return max;
18292         };
18293
18294         module.exports = Line;
18295
18296
18297 /***/ },
18298 /* 23 */
18299 /***/ function(module, exports, __webpack_require__) {
18300
18301         /* jslint node: true */
18302         'use strict';
18303
18304         var ColumnCalculator = __webpack_require__(16);
18305
18306         function TableProcessor(tableNode) {
18307           this.tableNode = tableNode;
18308         }
18309
18310         TableProcessor.prototype.beginTable = function(writer) {
18311           var tableNode;
18312           var availableWidth;
18313           var self = this;
18314
18315           tableNode = this.tableNode;
18316           this.offsets = tableNode._offsets;
18317           this.layout = tableNode._layout;
18318
18319           availableWidth = writer.context().availableWidth - this.offsets.total;
18320           ColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);
18321
18322           this.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();
18323           this.rowSpanData = prepareRowSpanData();
18324           this.cleanUpRepeatables = false;
18325
18326           this.headerRows = tableNode.table.headerRows || 0;
18327           this.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);
18328           this.dontBreakRows = tableNode.table.dontBreakRows || false;
18329
18330           if (this.rowsWithoutPageBreak) {
18331             writer.beginUnbreakableBlock();
18332           }
18333
18334           this.drawHorizontalLine(0, writer);
18335
18336           function getTableInnerContentWidth() {
18337             var width = 0;
18338
18339             tableNode.table.widths.forEach(function(w) {
18340               width += w._calcWidth;
18341             });
18342
18343             return width;
18344           }
18345
18346           function prepareRowSpanData() {
18347             var rsd = [];
18348             var x = 0;
18349             var lastWidth = 0;
18350
18351             rsd.push({ left: 0, rowSpan: 0 });
18352
18353             for(var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {
18354               var paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);
18355               var lBorder = self.layout.vLineWidth(i, self.tableNode);
18356               lastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;
18357               rsd[rsd.length - 1].width = lastWidth;
18358               x += lastWidth;
18359               rsd.push({ left: x, rowSpan: 0, width: 0 });
18360             }
18361
18362             return rsd;
18363           }
18364         };
18365
18366         TableProcessor.prototype.onRowBreak = function(rowIndex, writer) {
18367           var self = this;
18368           return function() {
18369             //console.log('moving by : ', topLineWidth, rowPaddingTop);
18370             var offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);
18371             writer.context().moveDown(offset);
18372           };
18373
18374         };
18375
18376         TableProcessor.prototype.beginRow = function(rowIndex, writer) {
18377           this.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);
18378           this.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);
18379           this.bottomLineWidth = this.layout.hLineWidth(rowIndex+1, this.tableNode);
18380           this.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);
18381
18382           this.rowCallback = this.onRowBreak(rowIndex, writer);
18383           writer.tracker.startTracking('pageChanged', this.rowCallback );
18384             if(this.dontBreakRows) {
18385                 writer.beginUnbreakableBlock();
18386             }
18387           this.rowTopY = writer.context().y;
18388           this.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;
18389
18390           writer.context().availableHeight -= this.reservedAtBottom;
18391
18392           writer.context().moveDown(this.rowPaddingTop);
18393         };
18394
18395         TableProcessor.prototype.drawHorizontalLine = function(lineIndex, writer, overrideY) {
18396           var lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);
18397           if (lineWidth) {
18398             var offset = lineWidth / 2;
18399             var currentLine = null;
18400
18401             for(var i = 0, l = this.rowSpanData.length; i < l; i++) {
18402               var data = this.rowSpanData[i];
18403               var shouldDrawLine = !data.rowSpan;
18404
18405               if (!currentLine && shouldDrawLine) {
18406                 currentLine = { left: data.left, width: 0 };
18407               }
18408
18409               if (shouldDrawLine) {
18410                 currentLine.width += (data.width || 0);
18411               }
18412
18413               var y = (overrideY || 0) + offset;
18414
18415               if (!shouldDrawLine || i === l - 1) {
18416                 if (currentLine) {
18417                   writer.addVector({
18418                     type: 'line',
18419                     x1: currentLine.left,
18420                     x2: currentLine.left + currentLine.width,
18421                     y1: y,
18422                     y2: y,
18423                     lineWidth: lineWidth,
18424                     lineColor: typeof this.layout.hLineColor === 'function' ? this.layout.hLineColor(lineIndex, this.tableNode) : this.layout.hLineColor
18425                   }, false, overrideY);
18426                   currentLine = null;
18427                 }
18428               }
18429             }
18430
18431             writer.context().moveDown(lineWidth);
18432           }
18433         };
18434
18435         TableProcessor.prototype.drawVerticalLine = function(x, y0, y1, vLineIndex, writer) {
18436           var width = this.layout.vLineWidth(vLineIndex, this.tableNode);
18437           if (width === 0) return;
18438           writer.addVector({
18439             type: 'line',
18440             x1: x + width/2,
18441             x2: x + width/2,
18442             y1: y0,
18443             y2: y1,
18444             lineWidth: width,
18445             lineColor: typeof this.layout.vLineColor === 'function' ? this.layout.vLineColor(vLineIndex, this.tableNode) : this.layout.vLineColor
18446           }, false, true);
18447         };
18448
18449         TableProcessor.prototype.endTable = function(writer) {
18450           if (this.cleanUpRepeatables) {
18451             writer.popFromRepeatables();
18452           }
18453         };
18454
18455         TableProcessor.prototype.endRow = function(rowIndex, writer, pageBreaks) {
18456             var l, i;
18457             var self = this;
18458             writer.tracker.stopTracking('pageChanged', this.rowCallback);
18459             writer.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));
18460             writer.context().availableHeight += this.reservedAtBottom;
18461
18462             var endingPage = writer.context().page;
18463             var endingY = writer.context().y;
18464
18465             var xs = getLineXs();
18466
18467             var ys = [];
18468
18469             var hasBreaks = pageBreaks && pageBreaks.length > 0;
18470
18471             ys.push({
18472               y0: this.rowTopY,
18473               page: hasBreaks ? pageBreaks[0].prevPage : endingPage
18474             });
18475
18476             if (hasBreaks) {
18477               for(i = 0, l = pageBreaks.length; i < l; i++) {
18478                 var pageBreak = pageBreaks[i];
18479                 ys[ys.length - 1].y1 = pageBreak.prevY;
18480
18481                 ys.push({y0: pageBreak.y, page: pageBreak.prevPage + 1});
18482               }
18483             }
18484
18485             ys[ys.length - 1].y1 = endingY;
18486
18487             var skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);
18488             for(var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {
18489               var willBreak = yi < ys.length - 1;
18490               var rowBreakWithoutHeader = (yi > 0 && !this.headerRows);
18491               var hzLineOffset =  rowBreakWithoutHeader ? 0 : this.topLineWidth;
18492               var y1 = ys[yi].y0;
18493               var y2 = ys[yi].y1;
18494
18495                                 if(willBreak) {
18496                                         y2 = y2 + this.rowPaddingBottom;
18497                                 }
18498
18499               if (writer.context().page != ys[yi].page) {
18500                 writer.context().page = ys[yi].page;
18501
18502                 //TODO: buggy, availableHeight should be updated on every pageChanged event
18503                 // TableProcessor should be pageChanged listener, instead of processRow
18504                 this.reservedAtBottom = 0;
18505               }
18506
18507               for(i = 0, l = xs.length; i < l; i++) {
18508                 this.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer);
18509                 if(i < l-1) {
18510                   var colIndex = xs[i].index;
18511                   var fillColor=  this.tableNode.table.body[rowIndex][colIndex].fillColor;
18512                   if(fillColor ) {
18513                     var wBorder = this.layout.vLineWidth(colIndex, this.tableNode);
18514                     var xf = xs[i].x+wBorder;
18515                     var yf = y1 - hzLineOffset;
18516                     writer.addVector({
18517                       type: 'rect',
18518                       x: xf,
18519                       y: yf,
18520                       w: xs[i+1].x-xf,
18521                       h: y2+this.bottomLineWidth-yf,
18522                       lineWidth: 0,
18523                       color: fillColor
18524                     }, false, true, 0);
18525                   }
18526                 }
18527               }
18528
18529               if (willBreak && this.layout.hLineWhenBroken !== false) {
18530                 this.drawHorizontalLine(rowIndex + 1, writer, y2);
18531               }
18532               if(rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
18533                 this.drawHorizontalLine(rowIndex, writer, y1);
18534               }
18535             }
18536
18537             writer.context().page = endingPage;
18538             writer.context().y = endingY;
18539
18540             var row = this.tableNode.table.body[rowIndex];
18541             for(i = 0, l = row.length; i < l; i++) {
18542               if (row[i].rowSpan) {
18543                 this.rowSpanData[i].rowSpan = row[i].rowSpan;
18544
18545                 // fix colSpans
18546                 if (row[i].colSpan && row[i].colSpan > 1) {
18547                   for(var j = 1; j < row[i].rowSpan; j++) {
18548                     this.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;
18549                   }
18550                 }
18551               }
18552
18553               if(this.rowSpanData[i].rowSpan > 0) {
18554                 this.rowSpanData[i].rowSpan--;
18555               }
18556             }
18557
18558             this.drawHorizontalLine(rowIndex + 1, writer);
18559
18560             if(this.headerRows && rowIndex === this.headerRows - 1) {
18561               this.headerRepeatable = writer.currentBlockToRepeatable();
18562             }
18563
18564             if(this.dontBreakRows) {
18565               writer.tracker.auto('pageChanged',
18566                 function() {
18567                   self.drawHorizontalLine(rowIndex, writer);
18568                 },
18569                 function() {
18570                   writer.commitUnbreakableBlock();
18571                   self.drawHorizontalLine(rowIndex, writer);
18572                 }
18573               );
18574             }
18575
18576             if(this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {
18577               writer.commitUnbreakableBlock();
18578               writer.pushToRepeatables(this.headerRepeatable);
18579               this.cleanUpRepeatables = true;
18580               this.headerRepeatable = null;
18581             }
18582
18583             function getLineXs() {
18584               var result = [];
18585               var cols = 0;
18586
18587               for(var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {
18588                 if (!cols) {
18589                   result.push({ x: self.rowSpanData[i].left, index: i});
18590
18591                   var item = self.tableNode.table.body[rowIndex][i];
18592                   cols = (item._colSpan || item.colSpan || 0);
18593                 }
18594                 if (cols > 0) {
18595                   cols--;
18596                 }
18597               }
18598
18599               result.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1});
18600
18601               return result;
18602             }
18603         };
18604
18605         module.exports = TableProcessor;
18606
18607
18608 /***/ },
18609 /* 24 */
18610 /***/ function(module, exports, __webpack_require__) {
18611
18612         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
18613
18614         /*
18615         PDFDocument - represents an entire PDF document
18616         By Devon Govett
18617          */
18618
18619         (function() {
18620           var PDFDocument, PDFObject, PDFPage, PDFReference, fs, stream,
18621             __hasProp = {}.hasOwnProperty,
18622             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
18623
18624           stream = __webpack_require__(25);
18625
18626           fs = __webpack_require__(44);
18627
18628           PDFObject = __webpack_require__(45);
18629
18630           PDFReference = __webpack_require__(46);
18631
18632           PDFPage = __webpack_require__(64);
18633
18634           PDFDocument = (function(_super) {
18635             var mixin;
18636
18637             __extends(PDFDocument, _super);
18638
18639             function PDFDocument(options) {
18640               var key, val, _ref, _ref1;
18641               this.options = options != null ? options : {};
18642               PDFDocument.__super__.constructor.apply(this, arguments);
18643               this.version = 1.3;
18644               this.compress = (_ref = this.options.compress) != null ? _ref : true;
18645               this._pageBuffer = [];
18646               this._pageBufferStart = 0;
18647               this._offsets = [];
18648               this._waiting = 0;
18649               this._ended = false;
18650               this._offset = 0;
18651               this._root = this.ref({
18652                 Type: 'Catalog',
18653                 Pages: this.ref({
18654                   Type: 'Pages',
18655                   Count: 0,
18656                   Kids: []
18657                 })
18658               });
18659               this.page = null;
18660               this.initColor();
18661               this.initVector();
18662               this.initFonts();
18663               this.initText();
18664               this.initImages();
18665               this.info = {
18666                 Producer: 'PDFKit',
18667                 Creator: 'PDFKit',
18668                 CreationDate: new Date()
18669               };
18670               if (this.options.info) {
18671                 _ref1 = this.options.info;
18672                 for (key in _ref1) {
18673                   val = _ref1[key];
18674                   this.info[key] = val;
18675                 }
18676               }
18677               this._write("%PDF-" + this.version);
18678               this._write("%\xFF\xFF\xFF\xFF");
18679               this.addPage();
18680             }
18681
18682             mixin = function(methods) {
18683               var method, name, _results;
18684               _results = [];
18685               for (name in methods) {
18686                 method = methods[name];
18687                 _results.push(PDFDocument.prototype[name] = method);
18688               }
18689               return _results;
18690             };
18691
18692             mixin(__webpack_require__(65));
18693
18694             mixin(__webpack_require__(67));
18695
18696             mixin(__webpack_require__(69));
18697
18698             mixin(__webpack_require__(89));
18699
18700             mixin(__webpack_require__(96));
18701
18702             mixin(__webpack_require__(101));
18703
18704             PDFDocument.prototype.addPage = function(options) {
18705               var pages;
18706               if (options == null) {
18707                 options = this.options;
18708               }
18709               if (!this.options.bufferPages) {
18710                 this.flushPages();
18711               }
18712               this.page = new PDFPage(this, options);
18713               this._pageBuffer.push(this.page);
18714               pages = this._root.data.Pages.data;
18715               pages.Kids.push(this.page.dictionary);
18716               pages.Count++;
18717               this.x = this.page.margins.left;
18718               this.y = this.page.margins.top;
18719               this._ctm = [1, 0, 0, 1, 0, 0];
18720               this.transform(1, 0, 0, -1, 0, this.page.height);
18721               return this;
18722             };
18723
18724             PDFDocument.prototype.bufferedPageRange = function() {
18725               return {
18726                 start: this._pageBufferStart,
18727                 count: this._pageBuffer.length
18728               };
18729             };
18730
18731             PDFDocument.prototype.switchToPage = function(n) {
18732               var page;
18733               if (!(page = this._pageBuffer[n - this._pageBufferStart])) {
18734                 throw new Error("switchToPage(" + n + ") out of bounds, current buffer covers pages " + this._pageBufferStart + " to " + (this._pageBufferStart + this._pageBuffer.length - 1));
18735               }
18736               return this.page = page;
18737             };
18738
18739             PDFDocument.prototype.flushPages = function() {
18740               var page, pages, _i, _len;
18741               pages = this._pageBuffer;
18742               this._pageBuffer = [];
18743               this._pageBufferStart += pages.length;
18744               for (_i = 0, _len = pages.length; _i < _len; _i++) {
18745                 page = pages[_i];
18746                 page.end();
18747               }
18748             };
18749
18750             PDFDocument.prototype.ref = function(data) {
18751               var ref;
18752               ref = new PDFReference(this, this._offsets.length + 1, data);
18753               this._offsets.push(null);
18754               this._waiting++;
18755               return ref;
18756             };
18757
18758             PDFDocument.prototype._read = function() {};
18759
18760             PDFDocument.prototype._write = function(data) {
18761               if (!Buffer.isBuffer(data)) {
18762                 data = new Buffer(data + '\n', 'binary');
18763               }
18764               this.push(data);
18765               return this._offset += data.length;
18766             };
18767
18768             PDFDocument.prototype.addContent = function(data) {
18769               this.page.write(data);
18770               return this;
18771             };
18772
18773             PDFDocument.prototype._refEnd = function(ref) {
18774               this._offsets[ref.id - 1] = ref.offset;
18775               if (--this._waiting === 0 && this._ended) {
18776                 this._finalize();
18777                 return this._ended = false;
18778               }
18779             };
18780
18781             PDFDocument.prototype.write = function(filename, fn) {
18782               var err;
18783               err = new Error('PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.');
18784               console.warn(err.stack);
18785               this.pipe(fs.createWriteStream(filename));
18786               this.end();
18787               return this.once('end', fn);
18788             };
18789
18790             PDFDocument.prototype.output = function(fn) {
18791               throw new Error('PDFDocument#output is deprecated, and has been removed from PDFKit. Please pipe the document into a Node stream.');
18792             };
18793
18794             PDFDocument.prototype.end = function() {
18795               var font, key, name, val, _ref, _ref1;
18796               this.flushPages();
18797               this._info = this.ref();
18798               _ref = this.info;
18799               for (key in _ref) {
18800                 val = _ref[key];
18801                 if (typeof val === 'string') {
18802                   val = new String(val);
18803                 }
18804                 this._info.data[key] = val;
18805               }
18806               this._info.end();
18807               _ref1 = this._fontFamilies;
18808               for (name in _ref1) {
18809                 font = _ref1[name];
18810                 font.embed();
18811               }
18812               this._root.end();
18813               this._root.data.Pages.end();
18814               if (this._waiting === 0) {
18815                 return this._finalize();
18816               } else {
18817                 return this._ended = true;
18818               }
18819             };
18820
18821             PDFDocument.prototype._finalize = function(fn) {
18822               var offset, xRefOffset, _i, _len, _ref;
18823               xRefOffset = this._offset;
18824               this._write("xref");
18825               this._write("0 " + (this._offsets.length + 1));
18826               this._write("0000000000 65535 f ");
18827               _ref = this._offsets;
18828               for (_i = 0, _len = _ref.length; _i < _len; _i++) {
18829                 offset = _ref[_i];
18830                 offset = ('0000000000' + offset).slice(-10);
18831                 this._write(offset + ' 00000 n ');
18832               }
18833               this._write('trailer');
18834               this._write(PDFObject.convert({
18835                 Size: this._offsets.length + 1,
18836                 Root: this._root,
18837                 Info: this._info
18838               }));
18839               this._write('startxref');
18840               this._write("" + xRefOffset);
18841               this._write('%%EOF');
18842               return this.push(null);
18843             };
18844
18845             PDFDocument.prototype.toString = function() {
18846               return "[object PDFDocument]";
18847             };
18848
18849             return PDFDocument;
18850
18851           })(stream.Readable);
18852
18853           module.exports = PDFDocument;
18854
18855         }).call(this);
18856
18857         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
18858
18859 /***/ },
18860 /* 25 */
18861 /***/ function(module, exports, __webpack_require__) {
18862
18863         // Copyright Joyent, Inc. and other Node contributors.
18864         //
18865         // Permission is hereby granted, free of charge, to any person obtaining a
18866         // copy of this software and associated documentation files (the
18867         // "Software"), to deal in the Software without restriction, including
18868         // without limitation the rights to use, copy, modify, merge, publish,
18869         // distribute, sublicense, and/or sell copies of the Software, and to permit
18870         // persons to whom the Software is furnished to do so, subject to the
18871         // following conditions:
18872         //
18873         // The above copyright notice and this permission notice shall be included
18874         // in all copies or substantial portions of the Software.
18875         //
18876         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18877         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18878         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
18879         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18880         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
18881         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18882         // USE OR OTHER DEALINGS IN THE SOFTWARE.
18883
18884         module.exports = Stream;
18885
18886         var EE = __webpack_require__(26).EventEmitter;
18887         var inherits = __webpack_require__(27);
18888
18889         inherits(Stream, EE);
18890         Stream.Readable = __webpack_require__(28);
18891         Stream.Writable = __webpack_require__(40);
18892         Stream.Duplex = __webpack_require__(41);
18893         Stream.Transform = __webpack_require__(42);
18894         Stream.PassThrough = __webpack_require__(43);
18895
18896         // Backwards-compat with node 0.4.x
18897         Stream.Stream = Stream;
18898
18899
18900
18901         // old-style streams.  Note that the pipe method (the only relevant
18902         // part of this class) is overridden in the Readable class.
18903
18904         function Stream() {
18905           EE.call(this);
18906         }
18907
18908         Stream.prototype.pipe = function(dest, options) {
18909           var source = this;
18910
18911           function ondata(chunk) {
18912             if (dest.writable) {
18913               if (false === dest.write(chunk) && source.pause) {
18914                 source.pause();
18915               }
18916             }
18917           }
18918
18919           source.on('data', ondata);
18920
18921           function ondrain() {
18922             if (source.readable && source.resume) {
18923               source.resume();
18924             }
18925           }
18926
18927           dest.on('drain', ondrain);
18928
18929           // If the 'end' option is not supplied, dest.end() will be called when
18930           // source gets the 'end' or 'close' events.  Only dest.end() once.
18931           if (!dest._isStdio && (!options || options.end !== false)) {
18932             source.on('end', onend);
18933             source.on('close', onclose);
18934           }
18935
18936           var didOnEnd = false;
18937           function onend() {
18938             if (didOnEnd) return;
18939             didOnEnd = true;
18940
18941             dest.end();
18942           }
18943
18944
18945           function onclose() {
18946             if (didOnEnd) return;
18947             didOnEnd = true;
18948
18949             if (typeof dest.destroy === 'function') dest.destroy();
18950           }
18951
18952           // don't leave dangling pipes when there are errors.
18953           function onerror(er) {
18954             cleanup();
18955             if (EE.listenerCount(this, 'error') === 0) {
18956               throw er; // Unhandled stream error in pipe.
18957             }
18958           }
18959
18960           source.on('error', onerror);
18961           dest.on('error', onerror);
18962
18963           // remove all the event listeners that were added.
18964           function cleanup() {
18965             source.removeListener('data', ondata);
18966             dest.removeListener('drain', ondrain);
18967
18968             source.removeListener('end', onend);
18969             source.removeListener('close', onclose);
18970
18971             source.removeListener('error', onerror);
18972             dest.removeListener('error', onerror);
18973
18974             source.removeListener('end', cleanup);
18975             source.removeListener('close', cleanup);
18976
18977             dest.removeListener('close', cleanup);
18978           }
18979
18980           source.on('end', cleanup);
18981           source.on('close', cleanup);
18982
18983           dest.on('close', cleanup);
18984
18985           dest.emit('pipe', source);
18986
18987           // Allow for unix-like usage: A.pipe(B).pipe(C)
18988           return dest;
18989         };
18990
18991
18992 /***/ },
18993 /* 26 */
18994 /***/ function(module, exports) {
18995
18996         // Copyright Joyent, Inc. and other Node contributors.
18997         //
18998         // Permission is hereby granted, free of charge, to any person obtaining a
18999         // copy of this software and associated documentation files (the
19000         // "Software"), to deal in the Software without restriction, including
19001         // without limitation the rights to use, copy, modify, merge, publish,
19002         // distribute, sublicense, and/or sell copies of the Software, and to permit
19003         // persons to whom the Software is furnished to do so, subject to the
19004         // following conditions:
19005         //
19006         // The above copyright notice and this permission notice shall be included
19007         // in all copies or substantial portions of the Software.
19008         //
19009         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19010         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19011         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19012         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19013         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19014         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19015         // USE OR OTHER DEALINGS IN THE SOFTWARE.
19016
19017         function EventEmitter() {
19018           this._events = this._events || {};
19019           this._maxListeners = this._maxListeners || undefined;
19020         }
19021         module.exports = EventEmitter;
19022
19023         // Backwards-compat with node 0.10.x
19024         EventEmitter.EventEmitter = EventEmitter;
19025
19026         EventEmitter.prototype._events = undefined;
19027         EventEmitter.prototype._maxListeners = undefined;
19028
19029         // By default EventEmitters will print a warning if more than 10 listeners are
19030         // added to it. This is a useful default which helps finding memory leaks.
19031         EventEmitter.defaultMaxListeners = 10;
19032
19033         // Obviously not all Emitters should be limited to 10. This function allows
19034         // that to be increased. Set to zero for unlimited.
19035         EventEmitter.prototype.setMaxListeners = function(n) {
19036           if (!isNumber(n) || n < 0 || isNaN(n))
19037             throw TypeError('n must be a positive number');
19038           this._maxListeners = n;
19039           return this;
19040         };
19041
19042         EventEmitter.prototype.emit = function(type) {
19043           var er, handler, len, args, i, listeners;
19044
19045           if (!this._events)
19046             this._events = {};
19047
19048           // If there is no 'error' event listener then throw.
19049           if (type === 'error') {
19050             if (!this._events.error ||
19051                 (isObject(this._events.error) && !this._events.error.length)) {
19052               er = arguments[1];
19053               if (er instanceof Error) {
19054                 throw er; // Unhandled 'error' event
19055               }
19056               throw TypeError('Uncaught, unspecified "error" event.');
19057             }
19058           }
19059
19060           handler = this._events[type];
19061
19062           if (isUndefined(handler))
19063             return false;
19064
19065           if (isFunction(handler)) {
19066             switch (arguments.length) {
19067               // fast cases
19068               case 1:
19069                 handler.call(this);
19070                 break;
19071               case 2:
19072                 handler.call(this, arguments[1]);
19073                 break;
19074               case 3:
19075                 handler.call(this, arguments[1], arguments[2]);
19076                 break;
19077               // slower
19078               default:
19079                 args = Array.prototype.slice.call(arguments, 1);
19080                 handler.apply(this, args);
19081             }
19082           } else if (isObject(handler)) {
19083             args = Array.prototype.slice.call(arguments, 1);
19084             listeners = handler.slice();
19085             len = listeners.length;
19086             for (i = 0; i < len; i++)
19087               listeners[i].apply(this, args);
19088           }
19089
19090           return true;
19091         };
19092
19093         EventEmitter.prototype.addListener = function(type, listener) {
19094           var m;
19095
19096           if (!isFunction(listener))
19097             throw TypeError('listener must be a function');
19098
19099           if (!this._events)
19100             this._events = {};
19101
19102           // To avoid recursion in the case that type === "newListener"! Before
19103           // adding it to the listeners, first emit "newListener".
19104           if (this._events.newListener)
19105             this.emit('newListener', type,
19106                       isFunction(listener.listener) ?
19107                       listener.listener : listener);
19108
19109           if (!this._events[type])
19110             // Optimize the case of one listener. Don't need the extra array object.
19111             this._events[type] = listener;
19112           else if (isObject(this._events[type]))
19113             // If we've already got an array, just append.
19114             this._events[type].push(listener);
19115           else
19116             // Adding the second element, need to change to array.
19117             this._events[type] = [this._events[type], listener];
19118
19119           // Check for listener leak
19120           if (isObject(this._events[type]) && !this._events[type].warned) {
19121             if (!isUndefined(this._maxListeners)) {
19122               m = this._maxListeners;
19123             } else {
19124               m = EventEmitter.defaultMaxListeners;
19125             }
19126
19127             if (m && m > 0 && this._events[type].length > m) {
19128               this._events[type].warned = true;
19129               console.error('(node) warning: possible EventEmitter memory ' +
19130                             'leak detected. %d listeners added. ' +
19131                             'Use emitter.setMaxListeners() to increase limit.',
19132                             this._events[type].length);
19133               if (typeof console.trace === 'function') {
19134                 // not supported in IE 10
19135                 console.trace();
19136               }
19137             }
19138           }
19139
19140           return this;
19141         };
19142
19143         EventEmitter.prototype.on = EventEmitter.prototype.addListener;
19144
19145         EventEmitter.prototype.once = function(type, listener) {
19146           if (!isFunction(listener))
19147             throw TypeError('listener must be a function');
19148
19149           var fired = false;
19150
19151           function g() {
19152             this.removeListener(type, g);
19153
19154             if (!fired) {
19155               fired = true;
19156               listener.apply(this, arguments);
19157             }
19158           }
19159
19160           g.listener = listener;
19161           this.on(type, g);
19162
19163           return this;
19164         };
19165
19166         // emits a 'removeListener' event iff the listener was removed
19167         EventEmitter.prototype.removeListener = function(type, listener) {
19168           var list, position, length, i;
19169
19170           if (!isFunction(listener))
19171             throw TypeError('listener must be a function');
19172
19173           if (!this._events || !this._events[type])
19174             return this;
19175
19176           list = this._events[type];
19177           length = list.length;
19178           position = -1;
19179
19180           if (list === listener ||
19181               (isFunction(list.listener) && list.listener === listener)) {
19182             delete this._events[type];
19183             if (this._events.removeListener)
19184               this.emit('removeListener', type, listener);
19185
19186           } else if (isObject(list)) {
19187             for (i = length; i-- > 0;) {
19188               if (list[i] === listener ||
19189                   (list[i].listener && list[i].listener === listener)) {
19190                 position = i;
19191                 break;
19192               }
19193             }
19194
19195             if (position < 0)
19196               return this;
19197
19198             if (list.length === 1) {
19199               list.length = 0;
19200               delete this._events[type];
19201             } else {
19202               list.splice(position, 1);
19203             }
19204
19205             if (this._events.removeListener)
19206               this.emit('removeListener', type, listener);
19207           }
19208
19209           return this;
19210         };
19211
19212         EventEmitter.prototype.removeAllListeners = function(type) {
19213           var key, listeners;
19214
19215           if (!this._events)
19216             return this;
19217
19218           // not listening for removeListener, no need to emit
19219           if (!this._events.removeListener) {
19220             if (arguments.length === 0)
19221               this._events = {};
19222             else if (this._events[type])
19223               delete this._events[type];
19224             return this;
19225           }
19226
19227           // emit removeListener for all listeners on all events
19228           if (arguments.length === 0) {
19229             for (key in this._events) {
19230               if (key === 'removeListener') continue;
19231               this.removeAllListeners(key);
19232             }
19233             this.removeAllListeners('removeListener');
19234             this._events = {};
19235             return this;
19236           }
19237
19238           listeners = this._events[type];
19239
19240           if (isFunction(listeners)) {
19241             this.removeListener(type, listeners);
19242           } else if (listeners) {
19243             // LIFO order
19244             while (listeners.length)
19245               this.removeListener(type, listeners[listeners.length - 1]);
19246           }
19247           delete this._events[type];
19248
19249           return this;
19250         };
19251
19252         EventEmitter.prototype.listeners = function(type) {
19253           var ret;
19254           if (!this._events || !this._events[type])
19255             ret = [];
19256           else if (isFunction(this._events[type]))
19257             ret = [this._events[type]];
19258           else
19259             ret = this._events[type].slice();
19260           return ret;
19261         };
19262
19263         EventEmitter.prototype.listenerCount = function(type) {
19264           if (this._events) {
19265             var evlistener = this._events[type];
19266
19267             if (isFunction(evlistener))
19268               return 1;
19269             else if (evlistener)
19270               return evlistener.length;
19271           }
19272           return 0;
19273         };
19274
19275         EventEmitter.listenerCount = function(emitter, type) {
19276           return emitter.listenerCount(type);
19277         };
19278
19279         function isFunction(arg) {
19280           return typeof arg === 'function';
19281         }
19282
19283         function isNumber(arg) {
19284           return typeof arg === 'number';
19285         }
19286
19287         function isObject(arg) {
19288           return typeof arg === 'object' && arg !== null;
19289         }
19290
19291         function isUndefined(arg) {
19292           return arg === void 0;
19293         }
19294
19295
19296 /***/ },
19297 /* 27 */
19298 /***/ function(module, exports) {
19299
19300         if (typeof Object.create === 'function') {
19301           // implementation from standard node.js 'util' module
19302           module.exports = function inherits(ctor, superCtor) {
19303             ctor.super_ = superCtor
19304             ctor.prototype = Object.create(superCtor.prototype, {
19305               constructor: {
19306                 value: ctor,
19307                 enumerable: false,
19308                 writable: true,
19309                 configurable: true
19310               }
19311             });
19312           };
19313         } else {
19314           // old school shim for old browsers
19315           module.exports = function inherits(ctor, superCtor) {
19316             ctor.super_ = superCtor
19317             var TempCtor = function () {}
19318             TempCtor.prototype = superCtor.prototype
19319             ctor.prototype = new TempCtor()
19320             ctor.prototype.constructor = ctor
19321           }
19322         }
19323
19324
19325 /***/ },
19326 /* 28 */
19327 /***/ function(module, exports, __webpack_require__) {
19328
19329         exports = module.exports = __webpack_require__(29);
19330         exports.Stream = __webpack_require__(25);
19331         exports.Readable = exports;
19332         exports.Writable = __webpack_require__(36);
19333         exports.Duplex = __webpack_require__(35);
19334         exports.Transform = __webpack_require__(38);
19335         exports.PassThrough = __webpack_require__(39);
19336
19337
19338 /***/ },
19339 /* 29 */
19340 /***/ function(module, exports, __webpack_require__) {
19341
19342         /* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
19343         //
19344         // Permission is hereby granted, free of charge, to any person obtaining a
19345         // copy of this software and associated documentation files (the
19346         // "Software"), to deal in the Software without restriction, including
19347         // without limitation the rights to use, copy, modify, merge, publish,
19348         // distribute, sublicense, and/or sell copies of the Software, and to permit
19349         // persons to whom the Software is furnished to do so, subject to the
19350         // following conditions:
19351         //
19352         // The above copyright notice and this permission notice shall be included
19353         // in all copies or substantial portions of the Software.
19354         //
19355         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19356         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19357         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19358         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19359         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19360         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19361         // USE OR OTHER DEALINGS IN THE SOFTWARE.
19362
19363         module.exports = Readable;
19364
19365         /*<replacement>*/
19366         var isArray = __webpack_require__(31);
19367         /*</replacement>*/
19368
19369
19370         /*<replacement>*/
19371         var Buffer = __webpack_require__(2).Buffer;
19372         /*</replacement>*/
19373
19374         Readable.ReadableState = ReadableState;
19375
19376         var EE = __webpack_require__(26).EventEmitter;
19377
19378         /*<replacement>*/
19379         if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
19380           return emitter.listeners(type).length;
19381         };
19382         /*</replacement>*/
19383
19384         var Stream = __webpack_require__(25);
19385
19386         /*<replacement>*/
19387         var util = __webpack_require__(32);
19388         util.inherits = __webpack_require__(33);
19389         /*</replacement>*/
19390
19391         var StringDecoder;
19392
19393
19394         /*<replacement>*/
19395         var debug = __webpack_require__(34);
19396         if (debug && debug.debuglog) {
19397           debug = debug.debuglog('stream');
19398         } else {
19399           debug = function () {};
19400         }
19401         /*</replacement>*/
19402
19403
19404         util.inherits(Readable, Stream);
19405
19406         function ReadableState(options, stream) {
19407           var Duplex = __webpack_require__(35);
19408
19409           options = options || {};
19410
19411           // the point at which it stops calling _read() to fill the buffer
19412           // Note: 0 is a valid value, means "don't call _read preemptively ever"
19413           var hwm = options.highWaterMark;
19414           var defaultHwm = options.objectMode ? 16 : 16 * 1024;
19415           this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
19416
19417           // cast to ints.
19418           this.highWaterMark = ~~this.highWaterMark;
19419
19420           this.buffer = [];
19421           this.length = 0;
19422           this.pipes = null;
19423           this.pipesCount = 0;
19424           this.flowing = null;
19425           this.ended = false;
19426           this.endEmitted = false;
19427           this.reading = false;
19428
19429           // a flag to be able to tell if the onwrite cb is called immediately,
19430           // or on a later tick.  We set this to true at first, because any
19431           // actions that shouldn't happen until "later" should generally also
19432           // not happen before the first write call.
19433           this.sync = true;
19434
19435           // whenever we return null, then we set a flag to say
19436           // that we're awaiting a 'readable' event emission.
19437           this.needReadable = false;
19438           this.emittedReadable = false;
19439           this.readableListening = false;
19440
19441
19442           // object stream flag. Used to make read(n) ignore n and to
19443           // make all the buffer merging and length checks go away
19444           this.objectMode = !!options.objectMode;
19445
19446           if (stream instanceof Duplex)
19447             this.objectMode = this.objectMode || !!options.readableObjectMode;
19448
19449           // Crypto is kind of old and crusty.  Historically, its default string
19450           // encoding is 'binary' so we have to make this configurable.
19451           // Everything else in the universe uses 'utf8', though.
19452           this.defaultEncoding = options.defaultEncoding || 'utf8';
19453
19454           // when piping, we only care about 'readable' events that happen
19455           // after read()ing all the bytes and not getting any pushback.
19456           this.ranOut = false;
19457
19458           // the number of writers that are awaiting a drain event in .pipe()s
19459           this.awaitDrain = 0;
19460
19461           // if true, a maybeReadMore has been scheduled
19462           this.readingMore = false;
19463
19464           this.decoder = null;
19465           this.encoding = null;
19466           if (options.encoding) {
19467             if (!StringDecoder)
19468               StringDecoder = __webpack_require__(37).StringDecoder;
19469             this.decoder = new StringDecoder(options.encoding);
19470             this.encoding = options.encoding;
19471           }
19472         }
19473
19474         function Readable(options) {
19475           var Duplex = __webpack_require__(35);
19476
19477           if (!(this instanceof Readable))
19478             return new Readable(options);
19479
19480           this._readableState = new ReadableState(options, this);
19481
19482           // legacy
19483           this.readable = true;
19484
19485           Stream.call(this);
19486         }
19487
19488         // Manually shove something into the read() buffer.
19489         // This returns true if the highWaterMark has not been hit yet,
19490         // similar to how Writable.write() returns true if you should
19491         // write() some more.
19492         Readable.prototype.push = function(chunk, encoding) {
19493           var state = this._readableState;
19494
19495           if (util.isString(chunk) && !state.objectMode) {
19496             encoding = encoding || state.defaultEncoding;
19497             if (encoding !== state.encoding) {
19498               chunk = new Buffer(chunk, encoding);
19499               encoding = '';
19500             }
19501           }
19502
19503           return readableAddChunk(this, state, chunk, encoding, false);
19504         };
19505
19506         // Unshift should *always* be something directly out of read()
19507         Readable.prototype.unshift = function(chunk) {
19508           var state = this._readableState;
19509           return readableAddChunk(this, state, chunk, '', true);
19510         };
19511
19512         function readableAddChunk(stream, state, chunk, encoding, addToFront) {
19513           var er = chunkInvalid(state, chunk);
19514           if (er) {
19515             stream.emit('error', er);
19516           } else if (util.isNullOrUndefined(chunk)) {
19517             state.reading = false;
19518             if (!state.ended)
19519               onEofChunk(stream, state);
19520           } else if (state.objectMode || chunk && chunk.length > 0) {
19521             if (state.ended && !addToFront) {
19522               var e = new Error('stream.push() after EOF');
19523               stream.emit('error', e);
19524             } else if (state.endEmitted && addToFront) {
19525               var e = new Error('stream.unshift() after end event');
19526               stream.emit('error', e);
19527             } else {
19528               if (state.decoder && !addToFront && !encoding)
19529                 chunk = state.decoder.write(chunk);
19530
19531               if (!addToFront)
19532                 state.reading = false;
19533
19534               // if we want the data now, just emit it.
19535               if (state.flowing && state.length === 0 && !state.sync) {
19536                 stream.emit('data', chunk);
19537                 stream.read(0);
19538               } else {
19539                 // update the buffer info.
19540                 state.length += state.objectMode ? 1 : chunk.length;
19541                 if (addToFront)
19542                   state.buffer.unshift(chunk);
19543                 else
19544                   state.buffer.push(chunk);
19545
19546                 if (state.needReadable)
19547                   emitReadable(stream);
19548               }
19549
19550               maybeReadMore(stream, state);
19551             }
19552           } else if (!addToFront) {
19553             state.reading = false;
19554           }
19555
19556           return needMoreData(state);
19557         }
19558
19559
19560
19561         // if it's past the high water mark, we can push in some more.
19562         // Also, if we have no data yet, we can stand some
19563         // more bytes.  This is to work around cases where hwm=0,
19564         // such as the repl.  Also, if the push() triggered a
19565         // readable event, and the user called read(largeNumber) such that
19566         // needReadable was set, then we ought to push more, so that another
19567         // 'readable' event will be triggered.
19568         function needMoreData(state) {
19569           return !state.ended &&
19570                  (state.needReadable ||
19571                   state.length < state.highWaterMark ||
19572                   state.length === 0);
19573         }
19574
19575         // backwards compatibility.
19576         Readable.prototype.setEncoding = function(enc) {
19577           if (!StringDecoder)
19578             StringDecoder = __webpack_require__(37).StringDecoder;
19579           this._readableState.decoder = new StringDecoder(enc);
19580           this._readableState.encoding = enc;
19581           return this;
19582         };
19583
19584         // Don't raise the hwm > 128MB
19585         var MAX_HWM = 0x800000;
19586         function roundUpToNextPowerOf2(n) {
19587           if (n >= MAX_HWM) {
19588             n = MAX_HWM;
19589           } else {
19590             // Get the next highest power of 2
19591             n--;
19592             for (var p = 1; p < 32; p <<= 1) n |= n >> p;
19593             n++;
19594           }
19595           return n;
19596         }
19597
19598         function howMuchToRead(n, state) {
19599           if (state.length === 0 && state.ended)
19600             return 0;
19601
19602           if (state.objectMode)
19603             return n === 0 ? 0 : 1;
19604
19605           if (isNaN(n) || util.isNull(n)) {
19606             // only flow one buffer at a time
19607             if (state.flowing && state.buffer.length)
19608               return state.buffer[0].length;
19609             else
19610               return state.length;
19611           }
19612
19613           if (n <= 0)
19614             return 0;
19615
19616           // If we're asking for more than the target buffer level,
19617           // then raise the water mark.  Bump up to the next highest
19618           // power of 2, to prevent increasing it excessively in tiny
19619           // amounts.
19620           if (n > state.highWaterMark)
19621             state.highWaterMark = roundUpToNextPowerOf2(n);
19622
19623           // don't have that much.  return null, unless we've ended.
19624           if (n > state.length) {
19625             if (!state.ended) {
19626               state.needReadable = true;
19627               return 0;
19628             } else
19629               return state.length;
19630           }
19631
19632           return n;
19633         }
19634
19635         // you can override either this method, or the async _read(n) below.
19636         Readable.prototype.read = function(n) {
19637           debug('read', n);
19638           var state = this._readableState;
19639           var nOrig = n;
19640
19641           if (!util.isNumber(n) || n > 0)
19642             state.emittedReadable = false;
19643
19644           // if we're doing read(0) to trigger a readable event, but we
19645           // already have a bunch of data in the buffer, then just trigger
19646           // the 'readable' event and move on.
19647           if (n === 0 &&
19648               state.needReadable &&
19649               (state.length >= state.highWaterMark || state.ended)) {
19650             debug('read: emitReadable', state.length, state.ended);
19651             if (state.length === 0 && state.ended)
19652               endReadable(this);
19653             else
19654               emitReadable(this);
19655             return null;
19656           }
19657
19658           n = howMuchToRead(n, state);
19659
19660           // if we've ended, and we're now clear, then finish it up.
19661           if (n === 0 && state.ended) {
19662             if (state.length === 0)
19663               endReadable(this);
19664             return null;
19665           }
19666
19667           // All the actual chunk generation logic needs to be
19668           // *below* the call to _read.  The reason is that in certain
19669           // synthetic stream cases, such as passthrough streams, _read
19670           // may be a completely synchronous operation which may change
19671           // the state of the read buffer, providing enough data when
19672           // before there was *not* enough.
19673           //
19674           // So, the steps are:
19675           // 1. Figure out what the state of things will be after we do
19676           // a read from the buffer.
19677           //
19678           // 2. If that resulting state will trigger a _read, then call _read.
19679           // Note that this may be asynchronous, or synchronous.  Yes, it is
19680           // deeply ugly to write APIs this way, but that still doesn't mean
19681           // that the Readable class should behave improperly, as streams are
19682           // designed to be sync/async agnostic.
19683           // Take note if the _read call is sync or async (ie, if the read call
19684           // has returned yet), so that we know whether or not it's safe to emit
19685           // 'readable' etc.
19686           //
19687           // 3. Actually pull the requested chunks out of the buffer and return.
19688
19689           // if we need a readable event, then we need to do some reading.
19690           var doRead = state.needReadable;
19691           debug('need readable', doRead);
19692
19693           // if we currently have less than the highWaterMark, then also read some
19694           if (state.length === 0 || state.length - n < state.highWaterMark) {
19695             doRead = true;
19696             debug('length less than watermark', doRead);
19697           }
19698
19699           // however, if we've ended, then there's no point, and if we're already
19700           // reading, then it's unnecessary.
19701           if (state.ended || state.reading) {
19702             doRead = false;
19703             debug('reading or ended', doRead);
19704           }
19705
19706           if (doRead) {
19707             debug('do read');
19708             state.reading = true;
19709             state.sync = true;
19710             // if the length is currently zero, then we *need* a readable event.
19711             if (state.length === 0)
19712               state.needReadable = true;
19713             // call internal read method
19714             this._read(state.highWaterMark);
19715             state.sync = false;
19716           }
19717
19718           // If _read pushed data synchronously, then `reading` will be false,
19719           // and we need to re-evaluate how much data we can return to the user.
19720           if (doRead && !state.reading)
19721             n = howMuchToRead(nOrig, state);
19722
19723           var ret;
19724           if (n > 0)
19725             ret = fromList(n, state);
19726           else
19727             ret = null;
19728
19729           if (util.isNull(ret)) {
19730             state.needReadable = true;
19731             n = 0;
19732           }
19733
19734           state.length -= n;
19735
19736           // If we have nothing in the buffer, then we want to know
19737           // as soon as we *do* get something into the buffer.
19738           if (state.length === 0 && !state.ended)
19739             state.needReadable = true;
19740
19741           // If we tried to read() past the EOF, then emit end on the next tick.
19742           if (nOrig !== n && state.ended && state.length === 0)
19743             endReadable(this);
19744
19745           if (!util.isNull(ret))
19746             this.emit('data', ret);
19747
19748           return ret;
19749         };
19750
19751         function chunkInvalid(state, chunk) {
19752           var er = null;
19753           if (!util.isBuffer(chunk) &&
19754               !util.isString(chunk) &&
19755               !util.isNullOrUndefined(chunk) &&
19756               !state.objectMode) {
19757             er = new TypeError('Invalid non-string/buffer chunk');
19758           }
19759           return er;
19760         }
19761
19762
19763         function onEofChunk(stream, state) {
19764           if (state.decoder && !state.ended) {
19765             var chunk = state.decoder.end();
19766             if (chunk && chunk.length) {
19767               state.buffer.push(chunk);
19768               state.length += state.objectMode ? 1 : chunk.length;
19769             }
19770           }
19771           state.ended = true;
19772
19773           // emit 'readable' now to make sure it gets picked up.
19774           emitReadable(stream);
19775         }
19776
19777         // Don't emit readable right away in sync mode, because this can trigger
19778         // another read() call => stack overflow.  This way, it might trigger
19779         // a nextTick recursion warning, but that's not so bad.
19780         function emitReadable(stream) {
19781           var state = stream._readableState;
19782           state.needReadable = false;
19783           if (!state.emittedReadable) {
19784             debug('emitReadable', state.flowing);
19785             state.emittedReadable = true;
19786             if (state.sync)
19787               process.nextTick(function() {
19788                 emitReadable_(stream);
19789               });
19790             else
19791               emitReadable_(stream);
19792           }
19793         }
19794
19795         function emitReadable_(stream) {
19796           debug('emit readable');
19797           stream.emit('readable');
19798           flow(stream);
19799         }
19800
19801
19802         // at this point, the user has presumably seen the 'readable' event,
19803         // and called read() to consume some data.  that may have triggered
19804         // in turn another _read(n) call, in which case reading = true if
19805         // it's in progress.
19806         // However, if we're not ended, or reading, and the length < hwm,
19807         // then go ahead and try to read some more preemptively.
19808         function maybeReadMore(stream, state) {
19809           if (!state.readingMore) {
19810             state.readingMore = true;
19811             process.nextTick(function() {
19812               maybeReadMore_(stream, state);
19813             });
19814           }
19815         }
19816
19817         function maybeReadMore_(stream, state) {
19818           var len = state.length;
19819           while (!state.reading && !state.flowing && !state.ended &&
19820                  state.length < state.highWaterMark) {
19821             debug('maybeReadMore read 0');
19822             stream.read(0);
19823             if (len === state.length)
19824               // didn't get any data, stop spinning.
19825               break;
19826             else
19827               len = state.length;
19828           }
19829           state.readingMore = false;
19830         }
19831
19832         // abstract method.  to be overridden in specific implementation classes.
19833         // call cb(er, data) where data is <= n in length.
19834         // for virtual (non-string, non-buffer) streams, "length" is somewhat
19835         // arbitrary, and perhaps not very meaningful.
19836         Readable.prototype._read = function(n) {
19837           this.emit('error', new Error('not implemented'));
19838         };
19839
19840         Readable.prototype.pipe = function(dest, pipeOpts) {
19841           var src = this;
19842           var state = this._readableState;
19843
19844           switch (state.pipesCount) {
19845             case 0:
19846               state.pipes = dest;
19847               break;
19848             case 1:
19849               state.pipes = [state.pipes, dest];
19850               break;
19851             default:
19852               state.pipes.push(dest);
19853               break;
19854           }
19855           state.pipesCount += 1;
19856           debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
19857
19858           var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
19859                       dest !== process.stdout &&
19860                       dest !== process.stderr;
19861
19862           var endFn = doEnd ? onend : cleanup;
19863           if (state.endEmitted)
19864             process.nextTick(endFn);
19865           else
19866             src.once('end', endFn);
19867
19868           dest.on('unpipe', onunpipe);
19869           function onunpipe(readable) {
19870             debug('onunpipe');
19871             if (readable === src) {
19872               cleanup();
19873             }
19874           }
19875
19876           function onend() {
19877             debug('onend');
19878             dest.end();
19879           }
19880
19881           // when the dest drains, it reduces the awaitDrain counter
19882           // on the source.  This would be more elegant with a .once()
19883           // handler in flow(), but adding and removing repeatedly is
19884           // too slow.
19885           var ondrain = pipeOnDrain(src);
19886           dest.on('drain', ondrain);
19887
19888           function cleanup() {
19889             debug('cleanup');
19890             // cleanup event handlers once the pipe is broken
19891             dest.removeListener('close', onclose);
19892             dest.removeListener('finish', onfinish);
19893             dest.removeListener('drain', ondrain);
19894             dest.removeListener('error', onerror);
19895             dest.removeListener('unpipe', onunpipe);
19896             src.removeListener('end', onend);
19897             src.removeListener('end', cleanup);
19898             src.removeListener('data', ondata);
19899
19900             // if the reader is waiting for a drain event from this
19901             // specific writer, then it would cause it to never start
19902             // flowing again.
19903             // So, if this is awaiting a drain, then we just call it now.
19904             // If we don't know, then assume that we are waiting for one.
19905             if (state.awaitDrain &&
19906                 (!dest._writableState || dest._writableState.needDrain))
19907               ondrain();
19908           }
19909
19910           src.on('data', ondata);
19911           function ondata(chunk) {
19912             debug('ondata');
19913             var ret = dest.write(chunk);
19914             if (false === ret) {
19915               debug('false write response, pause',
19916                     src._readableState.awaitDrain);
19917               src._readableState.awaitDrain++;
19918               src.pause();
19919             }
19920           }
19921
19922           // if the dest has an error, then stop piping into it.
19923           // however, don't suppress the throwing behavior for this.
19924           function onerror(er) {
19925             debug('onerror', er);
19926             unpipe();
19927             dest.removeListener('error', onerror);
19928             if (EE.listenerCount(dest, 'error') === 0)
19929               dest.emit('error', er);
19930           }
19931           // This is a brutally ugly hack to make sure that our error handler
19932           // is attached before any userland ones.  NEVER DO THIS.
19933           if (!dest._events || !dest._events.error)
19934             dest.on('error', onerror);
19935           else if (isArray(dest._events.error))
19936             dest._events.error.unshift(onerror);
19937           else
19938             dest._events.error = [onerror, dest._events.error];
19939
19940
19941
19942           // Both close and finish should trigger unpipe, but only once.
19943           function onclose() {
19944             dest.removeListener('finish', onfinish);
19945             unpipe();
19946           }
19947           dest.once('close', onclose);
19948           function onfinish() {
19949             debug('onfinish');
19950             dest.removeListener('close', onclose);
19951             unpipe();
19952           }
19953           dest.once('finish', onfinish);
19954
19955           function unpipe() {
19956             debug('unpipe');
19957             src.unpipe(dest);
19958           }
19959
19960           // tell the dest that it's being piped to
19961           dest.emit('pipe', src);
19962
19963           // start the flow if it hasn't been started already.
19964           if (!state.flowing) {
19965             debug('pipe resume');
19966             src.resume();
19967           }
19968
19969           return dest;
19970         };
19971
19972         function pipeOnDrain(src) {
19973           return function() {
19974             var state = src._readableState;
19975             debug('pipeOnDrain', state.awaitDrain);
19976             if (state.awaitDrain)
19977               state.awaitDrain--;
19978             if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
19979               state.flowing = true;
19980               flow(src);
19981             }
19982           };
19983         }
19984
19985
19986         Readable.prototype.unpipe = function(dest) {
19987           var state = this._readableState;
19988
19989           // if we're not piping anywhere, then do nothing.
19990           if (state.pipesCount === 0)
19991             return this;
19992
19993           // just one destination.  most common case.
19994           if (state.pipesCount === 1) {
19995             // passed in one, but it's not the right one.
19996             if (dest && dest !== state.pipes)
19997               return this;
19998
19999             if (!dest)
20000               dest = state.pipes;
20001
20002             // got a match.
20003             state.pipes = null;
20004             state.pipesCount = 0;
20005             state.flowing = false;
20006             if (dest)
20007               dest.emit('unpipe', this);
20008             return this;
20009           }
20010
20011           // slow case. multiple pipe destinations.
20012
20013           if (!dest) {
20014             // remove all.
20015             var dests = state.pipes;
20016             var len = state.pipesCount;
20017             state.pipes = null;
20018             state.pipesCount = 0;
20019             state.flowing = false;
20020
20021             for (var i = 0; i < len; i++)
20022               dests[i].emit('unpipe', this);
20023             return this;
20024           }
20025
20026           // try to find the right one.
20027           var i = indexOf(state.pipes, dest);
20028           if (i === -1)
20029             return this;
20030
20031           state.pipes.splice(i, 1);
20032           state.pipesCount -= 1;
20033           if (state.pipesCount === 1)
20034             state.pipes = state.pipes[0];
20035
20036           dest.emit('unpipe', this);
20037
20038           return this;
20039         };
20040
20041         // set up data events if they are asked for
20042         // Ensure readable listeners eventually get something
20043         Readable.prototype.on = function(ev, fn) {
20044           var res = Stream.prototype.on.call(this, ev, fn);
20045
20046           // If listening to data, and it has not explicitly been paused,
20047           // then call resume to start the flow of data on the next tick.
20048           if (ev === 'data' && false !== this._readableState.flowing) {
20049             this.resume();
20050           }
20051
20052           if (ev === 'readable' && this.readable) {
20053             var state = this._readableState;
20054             if (!state.readableListening) {
20055               state.readableListening = true;
20056               state.emittedReadable = false;
20057               state.needReadable = true;
20058               if (!state.reading) {
20059                 var self = this;
20060                 process.nextTick(function() {
20061                   debug('readable nexttick read 0');
20062                   self.read(0);
20063                 });
20064               } else if (state.length) {
20065                 emitReadable(this, state);
20066               }
20067             }
20068           }
20069
20070           return res;
20071         };
20072         Readable.prototype.addListener = Readable.prototype.on;
20073
20074         // pause() and resume() are remnants of the legacy readable stream API
20075         // If the user uses them, then switch into old mode.
20076         Readable.prototype.resume = function() {
20077           var state = this._readableState;
20078           if (!state.flowing) {
20079             debug('resume');
20080             state.flowing = true;
20081             if (!state.reading) {
20082               debug('resume read 0');
20083               this.read(0);
20084             }
20085             resume(this, state);
20086           }
20087           return this;
20088         };
20089
20090         function resume(stream, state) {
20091           if (!state.resumeScheduled) {
20092             state.resumeScheduled = true;
20093             process.nextTick(function() {
20094               resume_(stream, state);
20095             });
20096           }
20097         }
20098
20099         function resume_(stream, state) {
20100           state.resumeScheduled = false;
20101           stream.emit('resume');
20102           flow(stream);
20103           if (state.flowing && !state.reading)
20104             stream.read(0);
20105         }
20106
20107         Readable.prototype.pause = function() {
20108           debug('call pause flowing=%j', this._readableState.flowing);
20109           if (false !== this._readableState.flowing) {
20110             debug('pause');
20111             this._readableState.flowing = false;
20112             this.emit('pause');
20113           }
20114           return this;
20115         };
20116
20117         function flow(stream) {
20118           var state = stream._readableState;
20119           debug('flow', state.flowing);
20120           if (state.flowing) {
20121             do {
20122               var chunk = stream.read();
20123             } while (null !== chunk && state.flowing);
20124           }
20125         }
20126
20127         // wrap an old-style stream as the async data source.
20128         // This is *not* part of the readable stream interface.
20129         // It is an ugly unfortunate mess of history.
20130         Readable.prototype.wrap = function(stream) {
20131           var state = this._readableState;
20132           var paused = false;
20133
20134           var self = this;
20135           stream.on('end', function() {
20136             debug('wrapped end');
20137             if (state.decoder && !state.ended) {
20138               var chunk = state.decoder.end();
20139               if (chunk && chunk.length)
20140                 self.push(chunk);
20141             }
20142
20143             self.push(null);
20144           });
20145
20146           stream.on('data', function(chunk) {
20147             debug('wrapped data');
20148             if (state.decoder)
20149               chunk = state.decoder.write(chunk);
20150             if (!chunk || !state.objectMode && !chunk.length)
20151               return;
20152
20153             var ret = self.push(chunk);
20154             if (!ret) {
20155               paused = true;
20156               stream.pause();
20157             }
20158           });
20159
20160           // proxy all the other methods.
20161           // important when wrapping filters and duplexes.
20162           for (var i in stream) {
20163             if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
20164               this[i] = function(method) { return function() {
20165                 return stream[method].apply(stream, arguments);
20166               }}(i);
20167             }
20168           }
20169
20170           // proxy certain important events.
20171           var events = ['error', 'close', 'destroy', 'pause', 'resume'];
20172           forEach(events, function(ev) {
20173             stream.on(ev, self.emit.bind(self, ev));
20174           });
20175
20176           // when we try to consume some more bytes, simply unpause the
20177           // underlying stream.
20178           self._read = function(n) {
20179             debug('wrapped _read', n);
20180             if (paused) {
20181               paused = false;
20182               stream.resume();
20183             }
20184           };
20185
20186           return self;
20187         };
20188
20189
20190
20191         // exposed for testing purposes only.
20192         Readable._fromList = fromList;
20193
20194         // Pluck off n bytes from an array of buffers.
20195         // Length is the combined lengths of all the buffers in the list.
20196         function fromList(n, state) {
20197           var list = state.buffer;
20198           var length = state.length;
20199           var stringMode = !!state.decoder;
20200           var objectMode = !!state.objectMode;
20201           var ret;
20202
20203           // nothing in the list, definitely empty.
20204           if (list.length === 0)
20205             return null;
20206
20207           if (length === 0)
20208             ret = null;
20209           else if (objectMode)
20210             ret = list.shift();
20211           else if (!n || n >= length) {
20212             // read it all, truncate the array.
20213             if (stringMode)
20214               ret = list.join('');
20215             else
20216               ret = Buffer.concat(list, length);
20217             list.length = 0;
20218           } else {
20219             // read just some of it.
20220             if (n < list[0].length) {
20221               // just take a part of the first list item.
20222               // slice is the same for buffers and strings.
20223               var buf = list[0];
20224               ret = buf.slice(0, n);
20225               list[0] = buf.slice(n);
20226             } else if (n === list[0].length) {
20227               // first list is a perfect match
20228               ret = list.shift();
20229             } else {
20230               // complex case.
20231               // we have enough to cover it, but it spans past the first buffer.
20232               if (stringMode)
20233                 ret = '';
20234               else
20235                 ret = new Buffer(n);
20236
20237               var c = 0;
20238               for (var i = 0, l = list.length; i < l && c < n; i++) {
20239                 var buf = list[0];
20240                 var cpy = Math.min(n - c, buf.length);
20241
20242                 if (stringMode)
20243                   ret += buf.slice(0, cpy);
20244                 else
20245                   buf.copy(ret, c, 0, cpy);
20246
20247                 if (cpy < buf.length)
20248                   list[0] = buf.slice(cpy);
20249                 else
20250                   list.shift();
20251
20252                 c += cpy;
20253               }
20254             }
20255           }
20256
20257           return ret;
20258         }
20259
20260         function endReadable(stream) {
20261           var state = stream._readableState;
20262
20263           // If we get here before consuming all the bytes, then that is a
20264           // bug in node.  Should never happen.
20265           if (state.length > 0)
20266             throw new Error('endReadable called on non-empty stream');
20267
20268           if (!state.endEmitted) {
20269             state.ended = true;
20270             process.nextTick(function() {
20271               // Check that we didn't get one last unshift.
20272               if (!state.endEmitted && state.length === 0) {
20273                 state.endEmitted = true;
20274                 stream.readable = false;
20275                 stream.emit('end');
20276               }
20277             });
20278           }
20279         }
20280
20281         function forEach (xs, f) {
20282           for (var i = 0, l = xs.length; i < l; i++) {
20283             f(xs[i], i);
20284           }
20285         }
20286
20287         function indexOf (xs, x) {
20288           for (var i = 0, l = xs.length; i < l; i++) {
20289             if (xs[i] === x) return i;
20290           }
20291           return -1;
20292         }
20293
20294         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
20295
20296 /***/ },
20297 /* 30 */
20298 /***/ function(module, exports) {
20299
20300         // shim for using process in browser
20301
20302         var process = module.exports = {};
20303         var queue = [];
20304         var draining = false;
20305         var currentQueue;
20306         var queueIndex = -1;
20307
20308         function cleanUpNextTick() {
20309             draining = false;
20310             if (currentQueue.length) {
20311                 queue = currentQueue.concat(queue);
20312             } else {
20313                 queueIndex = -1;
20314             }
20315             if (queue.length) {
20316                 drainQueue();
20317             }
20318         }
20319
20320         function drainQueue() {
20321             if (draining) {
20322                 return;
20323             }
20324             var timeout = setTimeout(cleanUpNextTick);
20325             draining = true;
20326
20327             var len = queue.length;
20328             while(len) {
20329                 currentQueue = queue;
20330                 queue = [];
20331                 while (++queueIndex < len) {
20332                     if (currentQueue) {
20333                         currentQueue[queueIndex].run();
20334                     }
20335                 }
20336                 queueIndex = -1;
20337                 len = queue.length;
20338             }
20339             currentQueue = null;
20340             draining = false;
20341             clearTimeout(timeout);
20342         }
20343
20344         process.nextTick = function (fun) {
20345             var args = new Array(arguments.length - 1);
20346             if (arguments.length > 1) {
20347                 for (var i = 1; i < arguments.length; i++) {
20348                     args[i - 1] = arguments[i];
20349                 }
20350             }
20351             queue.push(new Item(fun, args));
20352             if (queue.length === 1 && !draining) {
20353                 setTimeout(drainQueue, 0);
20354             }
20355         };
20356
20357         // v8 likes predictible objects
20358         function Item(fun, array) {
20359             this.fun = fun;
20360             this.array = array;
20361         }
20362         Item.prototype.run = function () {
20363             this.fun.apply(null, this.array);
20364         };
20365         process.title = 'browser';
20366         process.browser = true;
20367         process.env = {};
20368         process.argv = [];
20369         process.version = ''; // empty string to avoid regexp issues
20370         process.versions = {};
20371
20372         function noop() {}
20373
20374         process.on = noop;
20375         process.addListener = noop;
20376         process.once = noop;
20377         process.off = noop;
20378         process.removeListener = noop;
20379         process.removeAllListeners = noop;
20380         process.emit = noop;
20381
20382         process.binding = function (name) {
20383             throw new Error('process.binding is not supported');
20384         };
20385
20386         process.cwd = function () { return '/' };
20387         process.chdir = function (dir) {
20388             throw new Error('process.chdir is not supported');
20389         };
20390         process.umask = function() { return 0; };
20391
20392
20393 /***/ },
20394 /* 31 */
20395 /***/ function(module, exports) {
20396
20397         module.exports = Array.isArray || function (arr) {
20398           return Object.prototype.toString.call(arr) == '[object Array]';
20399         };
20400
20401
20402 /***/ },
20403 /* 32 */
20404 /***/ function(module, exports, __webpack_require__) {
20405
20406         /* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors.
20407         //
20408         // Permission is hereby granted, free of charge, to any person obtaining a
20409         // copy of this software and associated documentation files (the
20410         // "Software"), to deal in the Software without restriction, including
20411         // without limitation the rights to use, copy, modify, merge, publish,
20412         // distribute, sublicense, and/or sell copies of the Software, and to permit
20413         // persons to whom the Software is furnished to do so, subject to the
20414         // following conditions:
20415         //
20416         // The above copyright notice and this permission notice shall be included
20417         // in all copies or substantial portions of the Software.
20418         //
20419         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20420         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20421         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20422         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20423         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20424         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20425         // USE OR OTHER DEALINGS IN THE SOFTWARE.
20426
20427         // NOTE: These type checking functions intentionally don't use `instanceof`
20428         // because it is fragile and can be easily faked with `Object.create()`.
20429         function isArray(ar) {
20430           return Array.isArray(ar);
20431         }
20432         exports.isArray = isArray;
20433
20434         function isBoolean(arg) {
20435           return typeof arg === 'boolean';
20436         }
20437         exports.isBoolean = isBoolean;
20438
20439         function isNull(arg) {
20440           return arg === null;
20441         }
20442         exports.isNull = isNull;
20443
20444         function isNullOrUndefined(arg) {
20445           return arg == null;
20446         }
20447         exports.isNullOrUndefined = isNullOrUndefined;
20448
20449         function isNumber(arg) {
20450           return typeof arg === 'number';
20451         }
20452         exports.isNumber = isNumber;
20453
20454         function isString(arg) {
20455           return typeof arg === 'string';
20456         }
20457         exports.isString = isString;
20458
20459         function isSymbol(arg) {
20460           return typeof arg === 'symbol';
20461         }
20462         exports.isSymbol = isSymbol;
20463
20464         function isUndefined(arg) {
20465           return arg === void 0;
20466         }
20467         exports.isUndefined = isUndefined;
20468
20469         function isRegExp(re) {
20470           return isObject(re) && objectToString(re) === '[object RegExp]';
20471         }
20472         exports.isRegExp = isRegExp;
20473
20474         function isObject(arg) {
20475           return typeof arg === 'object' && arg !== null;
20476         }
20477         exports.isObject = isObject;
20478
20479         function isDate(d) {
20480           return isObject(d) && objectToString(d) === '[object Date]';
20481         }
20482         exports.isDate = isDate;
20483
20484         function isError(e) {
20485           return isObject(e) &&
20486               (objectToString(e) === '[object Error]' || e instanceof Error);
20487         }
20488         exports.isError = isError;
20489
20490         function isFunction(arg) {
20491           return typeof arg === 'function';
20492         }
20493         exports.isFunction = isFunction;
20494
20495         function isPrimitive(arg) {
20496           return arg === null ||
20497                  typeof arg === 'boolean' ||
20498                  typeof arg === 'number' ||
20499                  typeof arg === 'string' ||
20500                  typeof arg === 'symbol' ||  // ES6 symbol
20501                  typeof arg === 'undefined';
20502         }
20503         exports.isPrimitive = isPrimitive;
20504
20505         function isBuffer(arg) {
20506           return Buffer.isBuffer(arg);
20507         }
20508         exports.isBuffer = isBuffer;
20509
20510         function objectToString(o) {
20511           return Object.prototype.toString.call(o);
20512         }
20513         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
20514
20515 /***/ },
20516 /* 33 */
20517 /***/ function(module, exports) {
20518
20519         if (typeof Object.create === 'function') {
20520           // implementation from standard node.js 'util' module
20521           module.exports = function inherits(ctor, superCtor) {
20522             ctor.super_ = superCtor
20523             ctor.prototype = Object.create(superCtor.prototype, {
20524               constructor: {
20525                 value: ctor,
20526                 enumerable: false,
20527                 writable: true,
20528                 configurable: true
20529               }
20530             });
20531           };
20532         } else {
20533           // old school shim for old browsers
20534           module.exports = function inherits(ctor, superCtor) {
20535             ctor.super_ = superCtor
20536             var TempCtor = function () {}
20537             TempCtor.prototype = superCtor.prototype
20538             ctor.prototype = new TempCtor()
20539             ctor.prototype.constructor = ctor
20540           }
20541         }
20542
20543
20544 /***/ },
20545 /* 34 */
20546 /***/ function(module, exports) {
20547
20548         /* (ignored) */
20549
20550 /***/ },
20551 /* 35 */
20552 /***/ function(module, exports, __webpack_require__) {
20553
20554         /* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
20555         //
20556         // Permission is hereby granted, free of charge, to any person obtaining a
20557         // copy of this software and associated documentation files (the
20558         // "Software"), to deal in the Software without restriction, including
20559         // without limitation the rights to use, copy, modify, merge, publish,
20560         // distribute, sublicense, and/or sell copies of the Software, and to permit
20561         // persons to whom the Software is furnished to do so, subject to the
20562         // following conditions:
20563         //
20564         // The above copyright notice and this permission notice shall be included
20565         // in all copies or substantial portions of the Software.
20566         //
20567         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20568         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20569         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20570         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20571         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20572         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20573         // USE OR OTHER DEALINGS IN THE SOFTWARE.
20574
20575         // a duplex stream is just a stream that is both readable and writable.
20576         // Since JS doesn't have multiple prototypal inheritance, this class
20577         // prototypally inherits from Readable, and then parasitically from
20578         // Writable.
20579
20580         module.exports = Duplex;
20581
20582         /*<replacement>*/
20583         var objectKeys = Object.keys || function (obj) {
20584           var keys = [];
20585           for (var key in obj) keys.push(key);
20586           return keys;
20587         }
20588         /*</replacement>*/
20589
20590
20591         /*<replacement>*/
20592         var util = __webpack_require__(32);
20593         util.inherits = __webpack_require__(33);
20594         /*</replacement>*/
20595
20596         var Readable = __webpack_require__(29);
20597         var Writable = __webpack_require__(36);
20598
20599         util.inherits(Duplex, Readable);
20600
20601         forEach(objectKeys(Writable.prototype), function(method) {
20602           if (!Duplex.prototype[method])
20603             Duplex.prototype[method] = Writable.prototype[method];
20604         });
20605
20606         function Duplex(options) {
20607           if (!(this instanceof Duplex))
20608             return new Duplex(options);
20609
20610           Readable.call(this, options);
20611           Writable.call(this, options);
20612
20613           if (options && options.readable === false)
20614             this.readable = false;
20615
20616           if (options && options.writable === false)
20617             this.writable = false;
20618
20619           this.allowHalfOpen = true;
20620           if (options && options.allowHalfOpen === false)
20621             this.allowHalfOpen = false;
20622
20623           this.once('end', onend);
20624         }
20625
20626         // the no-half-open enforcer
20627         function onend() {
20628           // if we allow half-open state, or if the writable side ended,
20629           // then we're ok.
20630           if (this.allowHalfOpen || this._writableState.ended)
20631             return;
20632
20633           // no more data can be written.
20634           // But allow more writes to happen in this tick.
20635           process.nextTick(this.end.bind(this));
20636         }
20637
20638         function forEach (xs, f) {
20639           for (var i = 0, l = xs.length; i < l; i++) {
20640             f(xs[i], i);
20641           }
20642         }
20643
20644         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
20645
20646 /***/ },
20647 /* 36 */
20648 /***/ function(module, exports, __webpack_require__) {
20649
20650         /* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
20651         //
20652         // Permission is hereby granted, free of charge, to any person obtaining a
20653         // copy of this software and associated documentation files (the
20654         // "Software"), to deal in the Software without restriction, including
20655         // without limitation the rights to use, copy, modify, merge, publish,
20656         // distribute, sublicense, and/or sell copies of the Software, and to permit
20657         // persons to whom the Software is furnished to do so, subject to the
20658         // following conditions:
20659         //
20660         // The above copyright notice and this permission notice shall be included
20661         // in all copies or substantial portions of the Software.
20662         //
20663         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20664         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20665         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20666         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20667         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20668         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20669         // USE OR OTHER DEALINGS IN THE SOFTWARE.
20670
20671         // A bit simpler than readable streams.
20672         // Implement an async ._write(chunk, cb), and it'll handle all
20673         // the drain event emission and buffering.
20674
20675         module.exports = Writable;
20676
20677         /*<replacement>*/
20678         var Buffer = __webpack_require__(2).Buffer;
20679         /*</replacement>*/
20680
20681         Writable.WritableState = WritableState;
20682
20683
20684         /*<replacement>*/
20685         var util = __webpack_require__(32);
20686         util.inherits = __webpack_require__(33);
20687         /*</replacement>*/
20688
20689         var Stream = __webpack_require__(25);
20690
20691         util.inherits(Writable, Stream);
20692
20693         function WriteReq(chunk, encoding, cb) {
20694           this.chunk = chunk;
20695           this.encoding = encoding;
20696           this.callback = cb;
20697         }
20698
20699         function WritableState(options, stream) {
20700           var Duplex = __webpack_require__(35);
20701
20702           options = options || {};
20703
20704           // the point at which write() starts returning false
20705           // Note: 0 is a valid value, means that we always return false if
20706           // the entire buffer is not flushed immediately on write()
20707           var hwm = options.highWaterMark;
20708           var defaultHwm = options.objectMode ? 16 : 16 * 1024;
20709           this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
20710
20711           // object stream flag to indicate whether or not this stream
20712           // contains buffers or objects.
20713           this.objectMode = !!options.objectMode;
20714
20715           if (stream instanceof Duplex)
20716             this.objectMode = this.objectMode || !!options.writableObjectMode;
20717
20718           // cast to ints.
20719           this.highWaterMark = ~~this.highWaterMark;
20720
20721           this.needDrain = false;
20722           // at the start of calling end()
20723           this.ending = false;
20724           // when end() has been called, and returned
20725           this.ended = false;
20726           // when 'finish' is emitted
20727           this.finished = false;
20728
20729           // should we decode strings into buffers before passing to _write?
20730           // this is here so that some node-core streams can optimize string
20731           // handling at a lower level.
20732           var noDecode = options.decodeStrings === false;
20733           this.decodeStrings = !noDecode;
20734
20735           // Crypto is kind of old and crusty.  Historically, its default string
20736           // encoding is 'binary' so we have to make this configurable.
20737           // Everything else in the universe uses 'utf8', though.
20738           this.defaultEncoding = options.defaultEncoding || 'utf8';
20739
20740           // not an actual buffer we keep track of, but a measurement
20741           // of how much we're waiting to get pushed to some underlying
20742           // socket or file.
20743           this.length = 0;
20744
20745           // a flag to see when we're in the middle of a write.
20746           this.writing = false;
20747
20748           // when true all writes will be buffered until .uncork() call
20749           this.corked = 0;
20750
20751           // a flag to be able to tell if the onwrite cb is called immediately,
20752           // or on a later tick.  We set this to true at first, because any
20753           // actions that shouldn't happen until "later" should generally also
20754           // not happen before the first write call.
20755           this.sync = true;
20756
20757           // a flag to know if we're processing previously buffered items, which
20758           // may call the _write() callback in the same tick, so that we don't
20759           // end up in an overlapped onwrite situation.
20760           this.bufferProcessing = false;
20761
20762           // the callback that's passed to _write(chunk,cb)
20763           this.onwrite = function(er) {
20764             onwrite(stream, er);
20765           };
20766
20767           // the callback that the user supplies to write(chunk,encoding,cb)
20768           this.writecb = null;
20769
20770           // the amount that is being written when _write is called.
20771           this.writelen = 0;
20772
20773           this.buffer = [];
20774
20775           // number of pending user-supplied write callbacks
20776           // this must be 0 before 'finish' can be emitted
20777           this.pendingcb = 0;
20778
20779           // emit prefinish if the only thing we're waiting for is _write cbs
20780           // This is relevant for synchronous Transform streams
20781           this.prefinished = false;
20782
20783           // True if the error was already emitted and should not be thrown again
20784           this.errorEmitted = false;
20785         }
20786
20787         function Writable(options) {
20788           var Duplex = __webpack_require__(35);
20789
20790           // Writable ctor is applied to Duplexes, though they're not
20791           // instanceof Writable, they're instanceof Readable.
20792           if (!(this instanceof Writable) && !(this instanceof Duplex))
20793             return new Writable(options);
20794
20795           this._writableState = new WritableState(options, this);
20796
20797           // legacy.
20798           this.writable = true;
20799
20800           Stream.call(this);
20801         }
20802
20803         // Otherwise people can pipe Writable streams, which is just wrong.
20804         Writable.prototype.pipe = function() {
20805           this.emit('error', new Error('Cannot pipe. Not readable.'));
20806         };
20807
20808
20809         function writeAfterEnd(stream, state, cb) {
20810           var er = new Error('write after end');
20811           // TODO: defer error events consistently everywhere, not just the cb
20812           stream.emit('error', er);
20813           process.nextTick(function() {
20814             cb(er);
20815           });
20816         }
20817
20818         // If we get something that is not a buffer, string, null, or undefined,
20819         // and we're not in objectMode, then that's an error.
20820         // Otherwise stream chunks are all considered to be of length=1, and the
20821         // watermarks determine how many objects to keep in the buffer, rather than
20822         // how many bytes or characters.
20823         function validChunk(stream, state, chunk, cb) {
20824           var valid = true;
20825           if (!util.isBuffer(chunk) &&
20826               !util.isString(chunk) &&
20827               !util.isNullOrUndefined(chunk) &&
20828               !state.objectMode) {
20829             var er = new TypeError('Invalid non-string/buffer chunk');
20830             stream.emit('error', er);
20831             process.nextTick(function() {
20832               cb(er);
20833             });
20834             valid = false;
20835           }
20836           return valid;
20837         }
20838
20839         Writable.prototype.write = function(chunk, encoding, cb) {
20840           var state = this._writableState;
20841           var ret = false;
20842
20843           if (util.isFunction(encoding)) {
20844             cb = encoding;
20845             encoding = null;
20846           }
20847
20848           if (util.isBuffer(chunk))
20849             encoding = 'buffer';
20850           else if (!encoding)
20851             encoding = state.defaultEncoding;
20852
20853           if (!util.isFunction(cb))
20854             cb = function() {};
20855
20856           if (state.ended)
20857             writeAfterEnd(this, state, cb);
20858           else if (validChunk(this, state, chunk, cb)) {
20859             state.pendingcb++;
20860             ret = writeOrBuffer(this, state, chunk, encoding, cb);
20861           }
20862
20863           return ret;
20864         };
20865
20866         Writable.prototype.cork = function() {
20867           var state = this._writableState;
20868
20869           state.corked++;
20870         };
20871
20872         Writable.prototype.uncork = function() {
20873           var state = this._writableState;
20874
20875           if (state.corked) {
20876             state.corked--;
20877
20878             if (!state.writing &&
20879                 !state.corked &&
20880                 !state.finished &&
20881                 !state.bufferProcessing &&
20882                 state.buffer.length)
20883               clearBuffer(this, state);
20884           }
20885         };
20886
20887         function decodeChunk(state, chunk, encoding) {
20888           if (!state.objectMode &&
20889               state.decodeStrings !== false &&
20890               util.isString(chunk)) {
20891             chunk = new Buffer(chunk, encoding);
20892           }
20893           return chunk;
20894         }
20895
20896         // if we're already writing something, then just put this
20897         // in the queue, and wait our turn.  Otherwise, call _write
20898         // If we return false, then we need a drain event, so set that flag.
20899         function writeOrBuffer(stream, state, chunk, encoding, cb) {
20900           chunk = decodeChunk(state, chunk, encoding);
20901           if (util.isBuffer(chunk))
20902             encoding = 'buffer';
20903           var len = state.objectMode ? 1 : chunk.length;
20904
20905           state.length += len;
20906
20907           var ret = state.length < state.highWaterMark;
20908           // we must ensure that previous needDrain will not be reset to false.
20909           if (!ret)
20910             state.needDrain = true;
20911
20912           if (state.writing || state.corked)
20913             state.buffer.push(new WriteReq(chunk, encoding, cb));
20914           else
20915             doWrite(stream, state, false, len, chunk, encoding, cb);
20916
20917           return ret;
20918         }
20919
20920         function doWrite(stream, state, writev, len, chunk, encoding, cb) {
20921           state.writelen = len;
20922           state.writecb = cb;
20923           state.writing = true;
20924           state.sync = true;
20925           if (writev)
20926             stream._writev(chunk, state.onwrite);
20927           else
20928             stream._write(chunk, encoding, state.onwrite);
20929           state.sync = false;
20930         }
20931
20932         function onwriteError(stream, state, sync, er, cb) {
20933           if (sync)
20934             process.nextTick(function() {
20935               state.pendingcb--;
20936               cb(er);
20937             });
20938           else {
20939             state.pendingcb--;
20940             cb(er);
20941           }
20942
20943           stream._writableState.errorEmitted = true;
20944           stream.emit('error', er);
20945         }
20946
20947         function onwriteStateUpdate(state) {
20948           state.writing = false;
20949           state.writecb = null;
20950           state.length -= state.writelen;
20951           state.writelen = 0;
20952         }
20953
20954         function onwrite(stream, er) {
20955           var state = stream._writableState;
20956           var sync = state.sync;
20957           var cb = state.writecb;
20958
20959           onwriteStateUpdate(state);
20960
20961           if (er)
20962             onwriteError(stream, state, sync, er, cb);
20963           else {
20964             // Check if we're actually ready to finish, but don't emit yet
20965             var finished = needFinish(stream, state);
20966
20967             if (!finished &&
20968                 !state.corked &&
20969                 !state.bufferProcessing &&
20970                 state.buffer.length) {
20971               clearBuffer(stream, state);
20972             }
20973
20974             if (sync) {
20975               process.nextTick(function() {
20976                 afterWrite(stream, state, finished, cb);
20977               });
20978             } else {
20979               afterWrite(stream, state, finished, cb);
20980             }
20981           }
20982         }
20983
20984         function afterWrite(stream, state, finished, cb) {
20985           if (!finished)
20986             onwriteDrain(stream, state);
20987           state.pendingcb--;
20988           cb();
20989           finishMaybe(stream, state);
20990         }
20991
20992         // Must force callback to be called on nextTick, so that we don't
20993         // emit 'drain' before the write() consumer gets the 'false' return
20994         // value, and has a chance to attach a 'drain' listener.
20995         function onwriteDrain(stream, state) {
20996           if (state.length === 0 && state.needDrain) {
20997             state.needDrain = false;
20998             stream.emit('drain');
20999           }
21000         }
21001
21002
21003         // if there's something in the buffer waiting, then process it
21004         function clearBuffer(stream, state) {
21005           state.bufferProcessing = true;
21006
21007           if (stream._writev && state.buffer.length > 1) {
21008             // Fast case, write everything using _writev()
21009             var cbs = [];
21010             for (var c = 0; c < state.buffer.length; c++)
21011               cbs.push(state.buffer[c].callback);
21012
21013             // count the one we are adding, as well.
21014             // TODO(isaacs) clean this up
21015             state.pendingcb++;
21016             doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
21017               for (var i = 0; i < cbs.length; i++) {
21018                 state.pendingcb--;
21019                 cbs[i](err);
21020               }
21021             });
21022
21023             // Clear buffer
21024             state.buffer = [];
21025           } else {
21026             // Slow case, write chunks one-by-one
21027             for (var c = 0; c < state.buffer.length; c++) {
21028               var entry = state.buffer[c];
21029               var chunk = entry.chunk;
21030               var encoding = entry.encoding;
21031               var cb = entry.callback;
21032               var len = state.objectMode ? 1 : chunk.length;
21033
21034               doWrite(stream, state, false, len, chunk, encoding, cb);
21035
21036               // if we didn't call the onwrite immediately, then
21037               // it means that we need to wait until it does.
21038               // also, that means that the chunk and cb are currently
21039               // being processed, so move the buffer counter past them.
21040               if (state.writing) {
21041                 c++;
21042                 break;
21043               }
21044             }
21045
21046             if (c < state.buffer.length)
21047               state.buffer = state.buffer.slice(c);
21048             else
21049               state.buffer.length = 0;
21050           }
21051
21052           state.bufferProcessing = false;
21053         }
21054
21055         Writable.prototype._write = function(chunk, encoding, cb) {
21056           cb(new Error('not implemented'));
21057
21058         };
21059
21060         Writable.prototype._writev = null;
21061
21062         Writable.prototype.end = function(chunk, encoding, cb) {
21063           var state = this._writableState;
21064
21065           if (util.isFunction(chunk)) {
21066             cb = chunk;
21067             chunk = null;
21068             encoding = null;
21069           } else if (util.isFunction(encoding)) {
21070             cb = encoding;
21071             encoding = null;
21072           }
21073
21074           if (!util.isNullOrUndefined(chunk))
21075             this.write(chunk, encoding);
21076
21077           // .end() fully uncorks
21078           if (state.corked) {
21079             state.corked = 1;
21080             this.uncork();
21081           }
21082
21083           // ignore unnecessary end() calls.
21084           if (!state.ending && !state.finished)
21085             endWritable(this, state, cb);
21086         };
21087
21088
21089         function needFinish(stream, state) {
21090           return (state.ending &&
21091                   state.length === 0 &&
21092                   !state.finished &&
21093                   !state.writing);
21094         }
21095
21096         function prefinish(stream, state) {
21097           if (!state.prefinished) {
21098             state.prefinished = true;
21099             stream.emit('prefinish');
21100           }
21101         }
21102
21103         function finishMaybe(stream, state) {
21104           var need = needFinish(stream, state);
21105           if (need) {
21106             if (state.pendingcb === 0) {
21107               prefinish(stream, state);
21108               state.finished = true;
21109               stream.emit('finish');
21110             } else
21111               prefinish(stream, state);
21112           }
21113           return need;
21114         }
21115
21116         function endWritable(stream, state, cb) {
21117           state.ending = true;
21118           finishMaybe(stream, state);
21119           if (cb) {
21120             if (state.finished)
21121               process.nextTick(cb);
21122             else
21123               stream.once('finish', cb);
21124           }
21125           state.ended = true;
21126         }
21127
21128         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
21129
21130 /***/ },
21131 /* 37 */
21132 /***/ function(module, exports, __webpack_require__) {
21133
21134         // Copyright Joyent, Inc. and other Node contributors.
21135         //
21136         // Permission is hereby granted, free of charge, to any person obtaining a
21137         // copy of this software and associated documentation files (the
21138         // "Software"), to deal in the Software without restriction, including
21139         // without limitation the rights to use, copy, modify, merge, publish,
21140         // distribute, sublicense, and/or sell copies of the Software, and to permit
21141         // persons to whom the Software is furnished to do so, subject to the
21142         // following conditions:
21143         //
21144         // The above copyright notice and this permission notice shall be included
21145         // in all copies or substantial portions of the Software.
21146         //
21147         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21148         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21149         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
21150         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21151         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21152         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21153         // USE OR OTHER DEALINGS IN THE SOFTWARE.
21154
21155         var Buffer = __webpack_require__(2).Buffer;
21156
21157         var isBufferEncoding = Buffer.isEncoding
21158           || function(encoding) {
21159                switch (encoding && encoding.toLowerCase()) {
21160                  case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
21161                  default: return false;
21162                }
21163              }
21164
21165
21166         function assertEncoding(encoding) {
21167           if (encoding && !isBufferEncoding(encoding)) {
21168             throw new Error('Unknown encoding: ' + encoding);
21169           }
21170         }
21171
21172         // StringDecoder provides an interface for efficiently splitting a series of
21173         // buffers into a series of JS strings without breaking apart multi-byte
21174         // characters. CESU-8 is handled as part of the UTF-8 encoding.
21175         //
21176         // @TODO Handling all encodings inside a single object makes it very difficult
21177         // to reason about this code, so it should be split up in the future.
21178         // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
21179         // points as used by CESU-8.
21180         var StringDecoder = exports.StringDecoder = function(encoding) {
21181           this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
21182           assertEncoding(encoding);
21183           switch (this.encoding) {
21184             case 'utf8':
21185               // CESU-8 represents each of Surrogate Pair by 3-bytes
21186               this.surrogateSize = 3;
21187               break;
21188             case 'ucs2':
21189             case 'utf16le':
21190               // UTF-16 represents each of Surrogate Pair by 2-bytes
21191               this.surrogateSize = 2;
21192               this.detectIncompleteChar = utf16DetectIncompleteChar;
21193               break;
21194             case 'base64':
21195               // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
21196               this.surrogateSize = 3;
21197               this.detectIncompleteChar = base64DetectIncompleteChar;
21198               break;
21199             default:
21200               this.write = passThroughWrite;
21201               return;
21202           }
21203
21204           // Enough space to store all bytes of a single character. UTF-8 needs 4
21205           // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
21206           this.charBuffer = new Buffer(6);
21207           // Number of bytes received for the current incomplete multi-byte character.
21208           this.charReceived = 0;
21209           // Number of bytes expected for the current incomplete multi-byte character.
21210           this.charLength = 0;
21211         };
21212
21213
21214         // write decodes the given buffer and returns it as JS string that is
21215         // guaranteed to not contain any partial multi-byte characters. Any partial
21216         // character found at the end of the buffer is buffered up, and will be
21217         // returned when calling write again with the remaining bytes.
21218         //
21219         // Note: Converting a Buffer containing an orphan surrogate to a String
21220         // currently works, but converting a String to a Buffer (via `new Buffer`, or
21221         // Buffer#write) will replace incomplete surrogates with the unicode
21222         // replacement character. See https://codereview.chromium.org/121173009/ .
21223         StringDecoder.prototype.write = function(buffer) {
21224           var charStr = '';
21225           // if our last write ended with an incomplete multibyte character
21226           while (this.charLength) {
21227             // determine how many remaining bytes this buffer has to offer for this char
21228             var available = (buffer.length >= this.charLength - this.charReceived) ?
21229                 this.charLength - this.charReceived :
21230                 buffer.length;
21231
21232             // add the new bytes to the char buffer
21233             buffer.copy(this.charBuffer, this.charReceived, 0, available);
21234             this.charReceived += available;
21235
21236             if (this.charReceived < this.charLength) {
21237               // still not enough chars in this buffer? wait for more ...
21238               return '';
21239             }
21240
21241             // remove bytes belonging to the current character from the buffer
21242             buffer = buffer.slice(available, buffer.length);
21243
21244             // get the character that was split
21245             charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
21246
21247             // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
21248             var charCode = charStr.charCodeAt(charStr.length - 1);
21249             if (charCode >= 0xD800 && charCode <= 0xDBFF) {
21250               this.charLength += this.surrogateSize;
21251               charStr = '';
21252               continue;
21253             }
21254             this.charReceived = this.charLength = 0;
21255
21256             // if there are no more bytes in this buffer, just emit our char
21257             if (buffer.length === 0) {
21258               return charStr;
21259             }
21260             break;
21261           }
21262
21263           // determine and set charLength / charReceived
21264           this.detectIncompleteChar(buffer);
21265
21266           var end = buffer.length;
21267           if (this.charLength) {
21268             // buffer the incomplete character bytes we got
21269             buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
21270             end -= this.charReceived;
21271           }
21272
21273           charStr += buffer.toString(this.encoding, 0, end);
21274
21275           var end = charStr.length - 1;
21276           var charCode = charStr.charCodeAt(end);
21277           // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
21278           if (charCode >= 0xD800 && charCode <= 0xDBFF) {
21279             var size = this.surrogateSize;
21280             this.charLength += size;
21281             this.charReceived += size;
21282             this.charBuffer.copy(this.charBuffer, size, 0, size);
21283             buffer.copy(this.charBuffer, 0, 0, size);
21284             return charStr.substring(0, end);
21285           }
21286
21287           // or just emit the charStr
21288           return charStr;
21289         };
21290
21291         // detectIncompleteChar determines if there is an incomplete UTF-8 character at
21292         // the end of the given buffer. If so, it sets this.charLength to the byte
21293         // length that character, and sets this.charReceived to the number of bytes
21294         // that are available for this character.
21295         StringDecoder.prototype.detectIncompleteChar = function(buffer) {
21296           // determine how many bytes we have to check at the end of this buffer
21297           var i = (buffer.length >= 3) ? 3 : buffer.length;
21298
21299           // Figure out if one of the last i bytes of our buffer announces an
21300           // incomplete char.
21301           for (; i > 0; i--) {
21302             var c = buffer[buffer.length - i];
21303
21304             // See http://en.wikipedia.org/wiki/UTF-8#Description
21305
21306             // 110XXXXX
21307             if (i == 1 && c >> 5 == 0x06) {
21308               this.charLength = 2;
21309               break;
21310             }
21311
21312             // 1110XXXX
21313             if (i <= 2 && c >> 4 == 0x0E) {
21314               this.charLength = 3;
21315               break;
21316             }
21317
21318             // 11110XXX
21319             if (i <= 3 && c >> 3 == 0x1E) {
21320               this.charLength = 4;
21321               break;
21322             }
21323           }
21324           this.charReceived = i;
21325         };
21326
21327         StringDecoder.prototype.end = function(buffer) {
21328           var res = '';
21329           if (buffer && buffer.length)
21330             res = this.write(buffer);
21331
21332           if (this.charReceived) {
21333             var cr = this.charReceived;
21334             var buf = this.charBuffer;
21335             var enc = this.encoding;
21336             res += buf.slice(0, cr).toString(enc);
21337           }
21338
21339           return res;
21340         };
21341
21342         function passThroughWrite(buffer) {
21343           return buffer.toString(this.encoding);
21344         }
21345
21346         function utf16DetectIncompleteChar(buffer) {
21347           this.charReceived = buffer.length % 2;
21348           this.charLength = this.charReceived ? 2 : 0;
21349         }
21350
21351         function base64DetectIncompleteChar(buffer) {
21352           this.charReceived = buffer.length % 3;
21353           this.charLength = this.charReceived ? 3 : 0;
21354         }
21355
21356
21357 /***/ },
21358 /* 38 */
21359 /***/ function(module, exports, __webpack_require__) {
21360
21361         // Copyright Joyent, Inc. and other Node contributors.
21362         //
21363         // Permission is hereby granted, free of charge, to any person obtaining a
21364         // copy of this software and associated documentation files (the
21365         // "Software"), to deal in the Software without restriction, including
21366         // without limitation the rights to use, copy, modify, merge, publish,
21367         // distribute, sublicense, and/or sell copies of the Software, and to permit
21368         // persons to whom the Software is furnished to do so, subject to the
21369         // following conditions:
21370         //
21371         // The above copyright notice and this permission notice shall be included
21372         // in all copies or substantial portions of the Software.
21373         //
21374         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21375         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21376         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
21377         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21378         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21379         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21380         // USE OR OTHER DEALINGS IN THE SOFTWARE.
21381
21382
21383         // a transform stream is a readable/writable stream where you do
21384         // something with the data.  Sometimes it's called a "filter",
21385         // but that's not a great name for it, since that implies a thing where
21386         // some bits pass through, and others are simply ignored.  (That would
21387         // be a valid example of a transform, of course.)
21388         //
21389         // While the output is causally related to the input, it's not a
21390         // necessarily symmetric or synchronous transformation.  For example,
21391         // a zlib stream might take multiple plain-text writes(), and then
21392         // emit a single compressed chunk some time in the future.
21393         //
21394         // Here's how this works:
21395         //
21396         // The Transform stream has all the aspects of the readable and writable
21397         // stream classes.  When you write(chunk), that calls _write(chunk,cb)
21398         // internally, and returns false if there's a lot of pending writes
21399         // buffered up.  When you call read(), that calls _read(n) until
21400         // there's enough pending readable data buffered up.
21401         //
21402         // In a transform stream, the written data is placed in a buffer.  When
21403         // _read(n) is called, it transforms the queued up data, calling the
21404         // buffered _write cb's as it consumes chunks.  If consuming a single
21405         // written chunk would result in multiple output chunks, then the first
21406         // outputted bit calls the readcb, and subsequent chunks just go into
21407         // the read buffer, and will cause it to emit 'readable' if necessary.
21408         //
21409         // This way, back-pressure is actually determined by the reading side,
21410         // since _read has to be called to start processing a new chunk.  However,
21411         // a pathological inflate type of transform can cause excessive buffering
21412         // here.  For example, imagine a stream where every byte of input is
21413         // interpreted as an integer from 0-255, and then results in that many
21414         // bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
21415         // 1kb of data being output.  In this case, you could write a very small
21416         // amount of input, and end up with a very large amount of output.  In
21417         // such a pathological inflating mechanism, there'd be no way to tell
21418         // the system to stop doing the transform.  A single 4MB write could
21419         // cause the system to run out of memory.
21420         //
21421         // However, even in such a pathological case, only a single written chunk
21422         // would be consumed, and then the rest would wait (un-transformed) until
21423         // the results of the previous transformed chunk were consumed.
21424
21425         module.exports = Transform;
21426
21427         var Duplex = __webpack_require__(35);
21428
21429         /*<replacement>*/
21430         var util = __webpack_require__(32);
21431         util.inherits = __webpack_require__(33);
21432         /*</replacement>*/
21433
21434         util.inherits(Transform, Duplex);
21435
21436
21437         function TransformState(options, stream) {
21438           this.afterTransform = function(er, data) {
21439             return afterTransform(stream, er, data);
21440           };
21441
21442           this.needTransform = false;
21443           this.transforming = false;
21444           this.writecb = null;
21445           this.writechunk = null;
21446         }
21447
21448         function afterTransform(stream, er, data) {
21449           var ts = stream._transformState;
21450           ts.transforming = false;
21451
21452           var cb = ts.writecb;
21453
21454           if (!cb)
21455             return stream.emit('error', new Error('no writecb in Transform class'));
21456
21457           ts.writechunk = null;
21458           ts.writecb = null;
21459
21460           if (!util.isNullOrUndefined(data))
21461             stream.push(data);
21462
21463           if (cb)
21464             cb(er);
21465
21466           var rs = stream._readableState;
21467           rs.reading = false;
21468           if (rs.needReadable || rs.length < rs.highWaterMark) {
21469             stream._read(rs.highWaterMark);
21470           }
21471         }
21472
21473
21474         function Transform(options) {
21475           if (!(this instanceof Transform))
21476             return new Transform(options);
21477
21478           Duplex.call(this, options);
21479
21480           this._transformState = new TransformState(options, this);
21481
21482           // when the writable side finishes, then flush out anything remaining.
21483           var stream = this;
21484
21485           // start out asking for a readable event once data is transformed.
21486           this._readableState.needReadable = true;
21487
21488           // we have implemented the _read method, and done the other things
21489           // that Readable wants before the first _read call, so unset the
21490           // sync guard flag.
21491           this._readableState.sync = false;
21492
21493           this.once('prefinish', function() {
21494             if (util.isFunction(this._flush))
21495               this._flush(function(er) {
21496                 done(stream, er);
21497               });
21498             else
21499               done(stream);
21500           });
21501         }
21502
21503         Transform.prototype.push = function(chunk, encoding) {
21504           this._transformState.needTransform = false;
21505           return Duplex.prototype.push.call(this, chunk, encoding);
21506         };
21507
21508         // This is the part where you do stuff!
21509         // override this function in implementation classes.
21510         // 'chunk' is an input chunk.
21511         //
21512         // Call `push(newChunk)` to pass along transformed output
21513         // to the readable side.  You may call 'push' zero or more times.
21514         //
21515         // Call `cb(err)` when you are done with this chunk.  If you pass
21516         // an error, then that'll put the hurt on the whole operation.  If you
21517         // never call cb(), then you'll never get another chunk.
21518         Transform.prototype._transform = function(chunk, encoding, cb) {
21519           throw new Error('not implemented');
21520         };
21521
21522         Transform.prototype._write = function(chunk, encoding, cb) {
21523           var ts = this._transformState;
21524           ts.writecb = cb;
21525           ts.writechunk = chunk;
21526           ts.writeencoding = encoding;
21527           if (!ts.transforming) {
21528             var rs = this._readableState;
21529             if (ts.needTransform ||
21530                 rs.needReadable ||
21531                 rs.length < rs.highWaterMark)
21532               this._read(rs.highWaterMark);
21533           }
21534         };
21535
21536         // Doesn't matter what the args are here.
21537         // _transform does all the work.
21538         // That we got here means that the readable side wants more data.
21539         Transform.prototype._read = function(n) {
21540           var ts = this._transformState;
21541
21542           if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
21543             ts.transforming = true;
21544             this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
21545           } else {
21546             // mark that we need a transform, so that any data that comes in
21547             // will get processed, now that we've asked for it.
21548             ts.needTransform = true;
21549           }
21550         };
21551
21552
21553         function done(stream, er) {
21554           if (er)
21555             return stream.emit('error', er);
21556
21557           // if there's nothing in the write buffer, then that means
21558           // that nothing more will ever be provided
21559           var ws = stream._writableState;
21560           var ts = stream._transformState;
21561
21562           if (ws.length)
21563             throw new Error('calling transform done when ws.length != 0');
21564
21565           if (ts.transforming)
21566             throw new Error('calling transform done when still transforming');
21567
21568           return stream.push(null);
21569         }
21570
21571
21572 /***/ },
21573 /* 39 */
21574 /***/ function(module, exports, __webpack_require__) {
21575
21576         // Copyright Joyent, Inc. and other Node contributors.
21577         //
21578         // Permission is hereby granted, free of charge, to any person obtaining a
21579         // copy of this software and associated documentation files (the
21580         // "Software"), to deal in the Software without restriction, including
21581         // without limitation the rights to use, copy, modify, merge, publish,
21582         // distribute, sublicense, and/or sell copies of the Software, and to permit
21583         // persons to whom the Software is furnished to do so, subject to the
21584         // following conditions:
21585         //
21586         // The above copyright notice and this permission notice shall be included
21587         // in all copies or substantial portions of the Software.
21588         //
21589         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21590         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21591         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
21592         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21593         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21594         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21595         // USE OR OTHER DEALINGS IN THE SOFTWARE.
21596
21597         // a passthrough stream.
21598         // basically just the most minimal sort of Transform stream.
21599         // Every written chunk gets output as-is.
21600
21601         module.exports = PassThrough;
21602
21603         var Transform = __webpack_require__(38);
21604
21605         /*<replacement>*/
21606         var util = __webpack_require__(32);
21607         util.inherits = __webpack_require__(33);
21608         /*</replacement>*/
21609
21610         util.inherits(PassThrough, Transform);
21611
21612         function PassThrough(options) {
21613           if (!(this instanceof PassThrough))
21614             return new PassThrough(options);
21615
21616           Transform.call(this, options);
21617         }
21618
21619         PassThrough.prototype._transform = function(chunk, encoding, cb) {
21620           cb(null, chunk);
21621         };
21622
21623
21624 /***/ },
21625 /* 40 */
21626 /***/ function(module, exports, __webpack_require__) {
21627
21628         module.exports = __webpack_require__(36)
21629
21630
21631 /***/ },
21632 /* 41 */
21633 /***/ function(module, exports, __webpack_require__) {
21634
21635         module.exports = __webpack_require__(35)
21636
21637
21638 /***/ },
21639 /* 42 */
21640 /***/ function(module, exports, __webpack_require__) {
21641
21642         module.exports = __webpack_require__(38)
21643
21644
21645 /***/ },
21646 /* 43 */
21647 /***/ function(module, exports, __webpack_require__) {
21648
21649         module.exports = __webpack_require__(39)
21650
21651
21652 /***/ },
21653 /* 44 */
21654 /***/ function(module, exports, __webpack_require__) {
21655
21656         /* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {/* jslint node: true */
21657         'use strict';
21658
21659         // var b64 = require('./base64.js').base64DecToArr;
21660         function VirtualFileSystem() {
21661                 this.fileSystem = {};
21662                 this.baseSystem = {};
21663         }
21664
21665         VirtualFileSystem.prototype.readFileSync = function(filename) {
21666                 filename = fixFilename(filename);
21667
21668                 var base64content = this.baseSystem[filename];
21669                 if (base64content) {
21670                         return new Buffer(base64content, 'base64');
21671                 }
21672
21673                 return this.fileSystem[filename];
21674         };
21675
21676         VirtualFileSystem.prototype.writeFileSync = function(filename, content) {
21677                 this.fileSystem[fixFilename(filename)] = content;
21678         };
21679
21680         VirtualFileSystem.prototype.bindFS = function(data) {
21681                 this.baseSystem = data;
21682         };
21683
21684
21685         function fixFilename(filename) {
21686                 if (filename.indexOf(__dirname) === 0) {
21687                         filename = filename.substring(__dirname.length);
21688                 }
21689
21690                 if (filename.indexOf('/') === 0) {
21691                         filename = filename.substring(1);
21692                 }
21693
21694                 return filename;
21695         }
21696
21697         module.exports = new VirtualFileSystem();
21698
21699         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, "/"))
21700
21701 /***/ },
21702 /* 45 */
21703 /***/ function(module, exports, __webpack_require__) {
21704
21705         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
21706
21707         /*
21708         PDFObject - converts JavaScript types into their corrisponding PDF types.
21709         By Devon Govett
21710          */
21711
21712         (function() {
21713           var PDFObject, PDFReference;
21714
21715           PDFObject = (function() {
21716             var escapable, escapableRe, pad, swapBytes;
21717
21718             function PDFObject() {}
21719
21720             pad = function(str, length) {
21721               return (Array(length + 1).join('0') + str).slice(-length);
21722             };
21723
21724             escapableRe = /[\n\r\t\b\f\(\)\\]/g;
21725
21726             escapable = {
21727               '\n': '\\n',
21728               '\r': '\\r',
21729               '\t': '\\t',
21730               '\b': '\\b',
21731               '\f': '\\f',
21732               '\\': '\\\\',
21733               '(': '\\(',
21734               ')': '\\)'
21735             };
21736
21737             swapBytes = function(buff) {
21738               var a, i, l, _i, _ref;
21739               l = buff.length;
21740               if (l & 0x01) {
21741                 throw new Error("Buffer length must be even");
21742               } else {
21743                 for (i = _i = 0, _ref = l - 1; _i < _ref; i = _i += 2) {
21744                   a = buff[i];
21745                   buff[i] = buff[i + 1];
21746                   buff[i + 1] = a;
21747                 }
21748               }
21749               return buff;
21750             };
21751
21752             PDFObject.convert = function(object) {
21753               var e, i, isUnicode, items, key, out, string, val, _i, _ref;
21754               if (typeof object === 'string') {
21755                 return '/' + object;
21756               } else if (object instanceof String) {
21757                 string = object.replace(escapableRe, function(c) {
21758                   return escapable[c];
21759                 });
21760                 isUnicode = false;
21761                 for (i = _i = 0, _ref = string.length; _i < _ref; i = _i += 1) {
21762                   if (string.charCodeAt(i) > 0x7f) {
21763                     isUnicode = true;
21764                     break;
21765                   }
21766                 }
21767                 if (isUnicode) {
21768                   string = swapBytes(new Buffer('\ufeff' + string, 'utf16le')).toString('binary');
21769                 }
21770                 return '(' + string + ')';
21771               } else if (Buffer.isBuffer(object)) {
21772                 return '<' + object.toString('hex') + '>';
21773               } else if (object instanceof PDFReference) {
21774                 return object.toString();
21775               } else if (object instanceof Date) {
21776                 return '(D:' + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth(), 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z)';
21777               } else if (Array.isArray(object)) {
21778                 items = ((function() {
21779                   var _j, _len, _results;
21780                   _results = [];
21781                   for (_j = 0, _len = object.length; _j < _len; _j++) {
21782                     e = object[_j];
21783                     _results.push(PDFObject.convert(e));
21784                   }
21785                   return _results;
21786                 })()).join(' ');
21787                 return '[' + items + ']';
21788               } else if ({}.toString.call(object) === '[object Object]') {
21789                 out = ['<<'];
21790                 for (key in object) {
21791                   val = object[key];
21792                   out.push('/' + key + ' ' + PDFObject.convert(val));
21793                 }
21794                 out.push('>>');
21795                 return out.join('\n');
21796               } else {
21797                 return '' + object;
21798               }
21799             };
21800
21801             return PDFObject;
21802
21803           })();
21804
21805           module.exports = PDFObject;
21806
21807           PDFReference = __webpack_require__(46);
21808
21809         }).call(this);
21810
21811         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
21812
21813 /***/ },
21814 /* 46 */
21815 /***/ function(module, exports, __webpack_require__) {
21816
21817         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
21818
21819         /*
21820         PDFReference - represents a reference to another object in the PDF object heirarchy
21821         By Devon Govett
21822          */
21823
21824         (function() {
21825           var PDFObject, PDFReference, zlib,
21826             __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
21827
21828           zlib = __webpack_require__(47);
21829
21830           PDFReference = (function() {
21831             function PDFReference(document, id, data) {
21832               this.document = document;
21833               this.id = id;
21834               this.data = data != null ? data : {};
21835               this.finalize = __bind(this.finalize, this);
21836               this.gen = 0;
21837               this.deflate = null;
21838               this.compress = this.document.compress && !this.data.Filter;
21839               this.uncompressedLength = 0;
21840               this.chunks = [];
21841             }
21842
21843             PDFReference.prototype.initDeflate = function() {
21844               this.data.Filter = 'FlateDecode';
21845               this.deflate = zlib.createDeflate();
21846               this.deflate.on('data', (function(_this) {
21847                 return function(chunk) {
21848                   _this.chunks.push(chunk);
21849                   return _this.data.Length += chunk.length;
21850                 };
21851               })(this));
21852               return this.deflate.on('end', this.finalize);
21853             };
21854
21855             PDFReference.prototype.write = function(chunk) {
21856               var _base;
21857               if (!Buffer.isBuffer(chunk)) {
21858                 chunk = new Buffer(chunk + '\n', 'binary');
21859               }
21860               this.uncompressedLength += chunk.length;
21861               if ((_base = this.data).Length == null) {
21862                 _base.Length = 0;
21863               }
21864               if (this.compress) {
21865                 if (!this.deflate) {
21866                   this.initDeflate();
21867                 }
21868                 return this.deflate.write(chunk);
21869               } else {
21870                 this.chunks.push(chunk);
21871                 return this.data.Length += chunk.length;
21872               }
21873             };
21874
21875             PDFReference.prototype.end = function(chunk) {
21876               if (typeof chunk === 'string' || Buffer.isBuffer(chunk)) {
21877                 this.write(chunk);
21878               }
21879               if (this.deflate) {
21880                 return this.deflate.end();
21881               } else {
21882                 return this.finalize();
21883               }
21884             };
21885
21886             PDFReference.prototype.finalize = function() {
21887               var chunk, _i, _len, _ref;
21888               this.offset = this.document._offset;
21889               this.document._write("" + this.id + " " + this.gen + " obj");
21890               this.document._write(PDFObject.convert(this.data));
21891               if (this.chunks.length) {
21892                 this.document._write('stream');
21893                 _ref = this.chunks;
21894                 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
21895                   chunk = _ref[_i];
21896                   this.document._write(chunk);
21897                 }
21898                 this.chunks.length = 0;
21899                 this.document._write('\nendstream');
21900               }
21901               this.document._write('endobj');
21902               return this.document._refEnd(this);
21903             };
21904
21905             PDFReference.prototype.toString = function() {
21906               return "" + this.id + " " + this.gen + " R";
21907             };
21908
21909             return PDFReference;
21910
21911           })();
21912
21913           module.exports = PDFReference;
21914
21915           PDFObject = __webpack_require__(45);
21916
21917         }).call(this);
21918
21919         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
21920
21921 /***/ },
21922 /* 47 */
21923 /***/ function(module, exports, __webpack_require__) {
21924
21925         /* WEBPACK VAR INJECTION */(function(Buffer, process) {// Copyright Joyent, Inc. and other Node contributors.
21926         //
21927         // Permission is hereby granted, free of charge, to any person obtaining a
21928         // copy of this software and associated documentation files (the
21929         // "Software"), to deal in the Software without restriction, including
21930         // without limitation the rights to use, copy, modify, merge, publish,
21931         // distribute, sublicense, and/or sell copies of the Software, and to permit
21932         // persons to whom the Software is furnished to do so, subject to the
21933         // following conditions:
21934         //
21935         // The above copyright notice and this permission notice shall be included
21936         // in all copies or substantial portions of the Software.
21937         //
21938         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21939         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21940         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
21941         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
21942         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21943         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
21944         // USE OR OTHER DEALINGS IN THE SOFTWARE.
21945
21946         var Transform = __webpack_require__(42);
21947
21948         var binding = __webpack_require__(48);
21949         var util = __webpack_require__(60);
21950         var assert = __webpack_require__(63).ok;
21951
21952         // zlib doesn't provide these, so kludge them in following the same
21953         // const naming scheme zlib uses.
21954         binding.Z_MIN_WINDOWBITS = 8;
21955         binding.Z_MAX_WINDOWBITS = 15;
21956         binding.Z_DEFAULT_WINDOWBITS = 15;
21957
21958         // fewer than 64 bytes per chunk is stupid.
21959         // technically it could work with as few as 8, but even 64 bytes
21960         // is absurdly low.  Usually a MB or more is best.
21961         binding.Z_MIN_CHUNK = 64;
21962         binding.Z_MAX_CHUNK = Infinity;
21963         binding.Z_DEFAULT_CHUNK = (16 * 1024);
21964
21965         binding.Z_MIN_MEMLEVEL = 1;
21966         binding.Z_MAX_MEMLEVEL = 9;
21967         binding.Z_DEFAULT_MEMLEVEL = 8;
21968
21969         binding.Z_MIN_LEVEL = -1;
21970         binding.Z_MAX_LEVEL = 9;
21971         binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;
21972
21973         // expose all the zlib constants
21974         Object.keys(binding).forEach(function(k) {
21975           if (k.match(/^Z/)) exports[k] = binding[k];
21976         });
21977
21978         // translation table for return codes.
21979         exports.codes = {
21980           Z_OK: binding.Z_OK,
21981           Z_STREAM_END: binding.Z_STREAM_END,
21982           Z_NEED_DICT: binding.Z_NEED_DICT,
21983           Z_ERRNO: binding.Z_ERRNO,
21984           Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
21985           Z_DATA_ERROR: binding.Z_DATA_ERROR,
21986           Z_MEM_ERROR: binding.Z_MEM_ERROR,
21987           Z_BUF_ERROR: binding.Z_BUF_ERROR,
21988           Z_VERSION_ERROR: binding.Z_VERSION_ERROR
21989         };
21990
21991         Object.keys(exports.codes).forEach(function(k) {
21992           exports.codes[exports.codes[k]] = k;
21993         });
21994
21995         exports.Deflate = Deflate;
21996         exports.Inflate = Inflate;
21997         exports.Gzip = Gzip;
21998         exports.Gunzip = Gunzip;
21999         exports.DeflateRaw = DeflateRaw;
22000         exports.InflateRaw = InflateRaw;
22001         exports.Unzip = Unzip;
22002
22003         exports.createDeflate = function(o) {
22004           return new Deflate(o);
22005         };
22006
22007         exports.createInflate = function(o) {
22008           return new Inflate(o);
22009         };
22010
22011         exports.createDeflateRaw = function(o) {
22012           return new DeflateRaw(o);
22013         };
22014
22015         exports.createInflateRaw = function(o) {
22016           return new InflateRaw(o);
22017         };
22018
22019         exports.createGzip = function(o) {
22020           return new Gzip(o);
22021         };
22022
22023         exports.createGunzip = function(o) {
22024           return new Gunzip(o);
22025         };
22026
22027         exports.createUnzip = function(o) {
22028           return new Unzip(o);
22029         };
22030
22031
22032         // Convenience methods.
22033         // compress/decompress a string or buffer in one step.
22034         exports.deflate = function(buffer, opts, callback) {
22035           if (typeof opts === 'function') {
22036             callback = opts;
22037             opts = {};
22038           }
22039           return zlibBuffer(new Deflate(opts), buffer, callback);
22040         };
22041
22042         exports.deflateSync = function(buffer, opts) {
22043           return zlibBufferSync(new Deflate(opts), buffer);
22044         };
22045
22046         exports.gzip = function(buffer, opts, callback) {
22047           if (typeof opts === 'function') {
22048             callback = opts;
22049             opts = {};
22050           }
22051           return zlibBuffer(new Gzip(opts), buffer, callback);
22052         };
22053
22054         exports.gzipSync = function(buffer, opts) {
22055           return zlibBufferSync(new Gzip(opts), buffer);
22056         };
22057
22058         exports.deflateRaw = function(buffer, opts, callback) {
22059           if (typeof opts === 'function') {
22060             callback = opts;
22061             opts = {};
22062           }
22063           return zlibBuffer(new DeflateRaw(opts), buffer, callback);
22064         };
22065
22066         exports.deflateRawSync = function(buffer, opts) {
22067           return zlibBufferSync(new DeflateRaw(opts), buffer);
22068         };
22069
22070         exports.unzip = function(buffer, opts, callback) {
22071           if (typeof opts === 'function') {
22072             callback = opts;
22073             opts = {};
22074           }
22075           return zlibBuffer(new Unzip(opts), buffer, callback);
22076         };
22077
22078         exports.unzipSync = function(buffer, opts) {
22079           return zlibBufferSync(new Unzip(opts), buffer);
22080         };
22081
22082         exports.inflate = function(buffer, opts, callback) {
22083           if (typeof opts === 'function') {
22084             callback = opts;
22085             opts = {};
22086           }
22087           return zlibBuffer(new Inflate(opts), buffer, callback);
22088         };
22089
22090         exports.inflateSync = function(buffer, opts) {
22091           return zlibBufferSync(new Inflate(opts), buffer);
22092         };
22093
22094         exports.gunzip = function(buffer, opts, callback) {
22095           if (typeof opts === 'function') {
22096             callback = opts;
22097             opts = {};
22098           }
22099           return zlibBuffer(new Gunzip(opts), buffer, callback);
22100         };
22101
22102         exports.gunzipSync = function(buffer, opts) {
22103           return zlibBufferSync(new Gunzip(opts), buffer);
22104         };
22105
22106         exports.inflateRaw = function(buffer, opts, callback) {
22107           if (typeof opts === 'function') {
22108             callback = opts;
22109             opts = {};
22110           }
22111           return zlibBuffer(new InflateRaw(opts), buffer, callback);
22112         };
22113
22114         exports.inflateRawSync = function(buffer, opts) {
22115           return zlibBufferSync(new InflateRaw(opts), buffer);
22116         };
22117
22118         function zlibBuffer(engine, buffer, callback) {
22119           var buffers = [];
22120           var nread = 0;
22121
22122           engine.on('error', onError);
22123           engine.on('end', onEnd);
22124
22125           engine.end(buffer);
22126           flow();
22127
22128           function flow() {
22129             var chunk;
22130             while (null !== (chunk = engine.read())) {
22131               buffers.push(chunk);
22132               nread += chunk.length;
22133             }
22134             engine.once('readable', flow);
22135           }
22136
22137           function onError(err) {
22138             engine.removeListener('end', onEnd);
22139             engine.removeListener('readable', flow);
22140             callback(err);
22141           }
22142
22143           function onEnd() {
22144             var buf = Buffer.concat(buffers, nread);
22145             buffers = [];
22146             callback(null, buf);
22147             engine.close();
22148           }
22149         }
22150
22151         function zlibBufferSync(engine, buffer) {
22152           if (typeof buffer === 'string')
22153             buffer = new Buffer(buffer);
22154           if (!Buffer.isBuffer(buffer))
22155             throw new TypeError('Not a string or buffer');
22156
22157           var flushFlag = binding.Z_FINISH;
22158
22159           return engine._processChunk(buffer, flushFlag);
22160         }
22161
22162         // generic zlib
22163         // minimal 2-byte header
22164         function Deflate(opts) {
22165           if (!(this instanceof Deflate)) return new Deflate(opts);
22166           Zlib.call(this, opts, binding.DEFLATE);
22167         }
22168
22169         function Inflate(opts) {
22170           if (!(this instanceof Inflate)) return new Inflate(opts);
22171           Zlib.call(this, opts, binding.INFLATE);
22172         }
22173
22174
22175
22176         // gzip - bigger header, same deflate compression
22177         function Gzip(opts) {
22178           if (!(this instanceof Gzip)) return new Gzip(opts);
22179           Zlib.call(this, opts, binding.GZIP);
22180         }
22181
22182         function Gunzip(opts) {
22183           if (!(this instanceof Gunzip)) return new Gunzip(opts);
22184           Zlib.call(this, opts, binding.GUNZIP);
22185         }
22186
22187
22188
22189         // raw - no header
22190         function DeflateRaw(opts) {
22191           if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
22192           Zlib.call(this, opts, binding.DEFLATERAW);
22193         }
22194
22195         function InflateRaw(opts) {
22196           if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
22197           Zlib.call(this, opts, binding.INFLATERAW);
22198         }
22199
22200
22201         // auto-detect header.
22202         function Unzip(opts) {
22203           if (!(this instanceof Unzip)) return new Unzip(opts);
22204           Zlib.call(this, opts, binding.UNZIP);
22205         }
22206
22207
22208         // the Zlib class they all inherit from
22209         // This thing manages the queue of requests, and returns
22210         // true or false if there is anything in the queue when
22211         // you call the .write() method.
22212
22213         function Zlib(opts, mode) {
22214           this._opts = opts = opts || {};
22215           this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;
22216
22217           Transform.call(this, opts);
22218
22219           if (opts.flush) {
22220             if (opts.flush !== binding.Z_NO_FLUSH &&
22221                 opts.flush !== binding.Z_PARTIAL_FLUSH &&
22222                 opts.flush !== binding.Z_SYNC_FLUSH &&
22223                 opts.flush !== binding.Z_FULL_FLUSH &&
22224                 opts.flush !== binding.Z_FINISH &&
22225                 opts.flush !== binding.Z_BLOCK) {
22226               throw new Error('Invalid flush flag: ' + opts.flush);
22227             }
22228           }
22229           this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
22230
22231           if (opts.chunkSize) {
22232             if (opts.chunkSize < exports.Z_MIN_CHUNK ||
22233                 opts.chunkSize > exports.Z_MAX_CHUNK) {
22234               throw new Error('Invalid chunk size: ' + opts.chunkSize);
22235             }
22236           }
22237
22238           if (opts.windowBits) {
22239             if (opts.windowBits < exports.Z_MIN_WINDOWBITS ||
22240                 opts.windowBits > exports.Z_MAX_WINDOWBITS) {
22241               throw new Error('Invalid windowBits: ' + opts.windowBits);
22242             }
22243           }
22244
22245           if (opts.level) {
22246             if (opts.level < exports.Z_MIN_LEVEL ||
22247                 opts.level > exports.Z_MAX_LEVEL) {
22248               throw new Error('Invalid compression level: ' + opts.level);
22249             }
22250           }
22251
22252           if (opts.memLevel) {
22253             if (opts.memLevel < exports.Z_MIN_MEMLEVEL ||
22254                 opts.memLevel > exports.Z_MAX_MEMLEVEL) {
22255               throw new Error('Invalid memLevel: ' + opts.memLevel);
22256             }
22257           }
22258
22259           if (opts.strategy) {
22260             if (opts.strategy != exports.Z_FILTERED &&
22261                 opts.strategy != exports.Z_HUFFMAN_ONLY &&
22262                 opts.strategy != exports.Z_RLE &&
22263                 opts.strategy != exports.Z_FIXED &&
22264                 opts.strategy != exports.Z_DEFAULT_STRATEGY) {
22265               throw new Error('Invalid strategy: ' + opts.strategy);
22266             }
22267           }
22268
22269           if (opts.dictionary) {
22270             if (!Buffer.isBuffer(opts.dictionary)) {
22271               throw new Error('Invalid dictionary: it should be a Buffer instance');
22272             }
22273           }
22274
22275           this._binding = new binding.Zlib(mode);
22276
22277           var self = this;
22278           this._hadError = false;
22279           this._binding.onerror = function(message, errno) {
22280             // there is no way to cleanly recover.
22281             // continuing only obscures problems.
22282             self._binding = null;
22283             self._hadError = true;
22284
22285             var error = new Error(message);
22286             error.errno = errno;
22287             error.code = exports.codes[errno];
22288             self.emit('error', error);
22289           };
22290
22291           var level = exports.Z_DEFAULT_COMPRESSION;
22292           if (typeof opts.level === 'number') level = opts.level;
22293
22294           var strategy = exports.Z_DEFAULT_STRATEGY;
22295           if (typeof opts.strategy === 'number') strategy = opts.strategy;
22296
22297           this._binding.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS,
22298                              level,
22299                              opts.memLevel || exports.Z_DEFAULT_MEMLEVEL,
22300                              strategy,
22301                              opts.dictionary);
22302
22303           this._buffer = new Buffer(this._chunkSize);
22304           this._offset = 0;
22305           this._closed = false;
22306           this._level = level;
22307           this._strategy = strategy;
22308
22309           this.once('end', this.close);
22310         }
22311
22312         util.inherits(Zlib, Transform);
22313
22314         Zlib.prototype.params = function(level, strategy, callback) {
22315           if (level < exports.Z_MIN_LEVEL ||
22316               level > exports.Z_MAX_LEVEL) {
22317             throw new RangeError('Invalid compression level: ' + level);
22318           }
22319           if (strategy != exports.Z_FILTERED &&
22320               strategy != exports.Z_HUFFMAN_ONLY &&
22321               strategy != exports.Z_RLE &&
22322               strategy != exports.Z_FIXED &&
22323               strategy != exports.Z_DEFAULT_STRATEGY) {
22324             throw new TypeError('Invalid strategy: ' + strategy);
22325           }
22326
22327           if (this._level !== level || this._strategy !== strategy) {
22328             var self = this;
22329             this.flush(binding.Z_SYNC_FLUSH, function() {
22330               self._binding.params(level, strategy);
22331               if (!self._hadError) {
22332                 self._level = level;
22333                 self._strategy = strategy;
22334                 if (callback) callback();
22335               }
22336             });
22337           } else {
22338             process.nextTick(callback);
22339           }
22340         };
22341
22342         Zlib.prototype.reset = function() {
22343           return this._binding.reset();
22344         };
22345
22346         // This is the _flush function called by the transform class,
22347         // internally, when the last chunk has been written.
22348         Zlib.prototype._flush = function(callback) {
22349           this._transform(new Buffer(0), '', callback);
22350         };
22351
22352         Zlib.prototype.flush = function(kind, callback) {
22353           var ws = this._writableState;
22354
22355           if (typeof kind === 'function' || (kind === void 0 && !callback)) {
22356             callback = kind;
22357             kind = binding.Z_FULL_FLUSH;
22358           }
22359
22360           if (ws.ended) {
22361             if (callback)
22362               process.nextTick(callback);
22363           } else if (ws.ending) {
22364             if (callback)
22365               this.once('end', callback);
22366           } else if (ws.needDrain) {
22367             var self = this;
22368             this.once('drain', function() {
22369               self.flush(callback);
22370             });
22371           } else {
22372             this._flushFlag = kind;
22373             this.write(new Buffer(0), '', callback);
22374           }
22375         };
22376
22377         Zlib.prototype.close = function(callback) {
22378           if (callback)
22379             process.nextTick(callback);
22380
22381           if (this._closed)
22382             return;
22383
22384           this._closed = true;
22385
22386           this._binding.close();
22387
22388           var self = this;
22389           process.nextTick(function() {
22390             self.emit('close');
22391           });
22392         };
22393
22394         Zlib.prototype._transform = function(chunk, encoding, cb) {
22395           var flushFlag;
22396           var ws = this._writableState;
22397           var ending = ws.ending || ws.ended;
22398           var last = ending && (!chunk || ws.length === chunk.length);
22399
22400           if (!chunk === null && !Buffer.isBuffer(chunk))
22401             return cb(new Error('invalid input'));
22402
22403           // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag.
22404           // If it's explicitly flushing at some other time, then we use
22405           // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
22406           // goodness.
22407           if (last)
22408             flushFlag = binding.Z_FINISH;
22409           else {
22410             flushFlag = this._flushFlag;
22411             // once we've flushed the last of the queue, stop flushing and
22412             // go back to the normal behavior.
22413             if (chunk.length >= ws.length) {
22414               this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
22415             }
22416           }
22417
22418           var self = this;
22419           this._processChunk(chunk, flushFlag, cb);
22420         };
22421
22422         Zlib.prototype._processChunk = function(chunk, flushFlag, cb) {
22423           var availInBefore = chunk && chunk.length;
22424           var availOutBefore = this._chunkSize - this._offset;
22425           var inOff = 0;
22426
22427           var self = this;
22428
22429           var async = typeof cb === 'function';
22430
22431           if (!async) {
22432             var buffers = [];
22433             var nread = 0;
22434
22435             var error;
22436             this.on('error', function(er) {
22437               error = er;
22438             });
22439
22440             do {
22441               var res = this._binding.writeSync(flushFlag,
22442                                                 chunk, // in
22443                                                 inOff, // in_off
22444                                                 availInBefore, // in_len
22445                                                 this._buffer, // out
22446                                                 this._offset, //out_off
22447                                                 availOutBefore); // out_len
22448             } while (!this._hadError && callback(res[0], res[1]));
22449
22450             if (this._hadError) {
22451               throw error;
22452             }
22453
22454             var buf = Buffer.concat(buffers, nread);
22455             this.close();
22456
22457             return buf;
22458           }
22459
22460           var req = this._binding.write(flushFlag,
22461                                         chunk, // in
22462                                         inOff, // in_off
22463                                         availInBefore, // in_len
22464                                         this._buffer, // out
22465                                         this._offset, //out_off
22466                                         availOutBefore); // out_len
22467
22468           req.buffer = chunk;
22469           req.callback = callback;
22470
22471           function callback(availInAfter, availOutAfter) {
22472             if (self._hadError)
22473               return;
22474
22475             var have = availOutBefore - availOutAfter;
22476             assert(have >= 0, 'have should not go down');
22477
22478             if (have > 0) {
22479               var out = self._buffer.slice(self._offset, self._offset + have);
22480               self._offset += have;
22481               // serve some output to the consumer.
22482               if (async) {
22483                 self.push(out);
22484               } else {
22485                 buffers.push(out);
22486                 nread += out.length;
22487               }
22488             }
22489
22490             // exhausted the output buffer, or used all the input create a new one.
22491             if (availOutAfter === 0 || self._offset >= self._chunkSize) {
22492               availOutBefore = self._chunkSize;
22493               self._offset = 0;
22494               self._buffer = new Buffer(self._chunkSize);
22495             }
22496
22497             if (availOutAfter === 0) {
22498               // Not actually done.  Need to reprocess.
22499               // Also, update the availInBefore to the availInAfter value,
22500               // so that if we have to hit it a third (fourth, etc.) time,
22501               // it'll have the correct byte counts.
22502               inOff += (availInBefore - availInAfter);
22503               availInBefore = availInAfter;
22504
22505               if (!async)
22506                 return true;
22507
22508               var newReq = self._binding.write(flushFlag,
22509                                                chunk,
22510                                                inOff,
22511                                                availInBefore,
22512                                                self._buffer,
22513                                                self._offset,
22514                                                self._chunkSize);
22515               newReq.callback = callback; // this same function
22516               newReq.buffer = chunk;
22517               return;
22518             }
22519
22520             if (!async)
22521               return false;
22522
22523             // finished with the chunk.
22524             cb();
22525           }
22526         };
22527
22528         util.inherits(Deflate, Zlib);
22529         util.inherits(Inflate, Zlib);
22530         util.inherits(Gzip, Zlib);
22531         util.inherits(Gunzip, Zlib);
22532         util.inherits(DeflateRaw, Zlib);
22533         util.inherits(InflateRaw, Zlib);
22534         util.inherits(Unzip, Zlib);
22535
22536         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, __webpack_require__(30)))
22537
22538 /***/ },
22539 /* 48 */
22540 /***/ function(module, exports, __webpack_require__) {
22541
22542         /* WEBPACK VAR INJECTION */(function(process, Buffer) {var msg = __webpack_require__(49);
22543         var zstream = __webpack_require__(50);
22544         var zlib_deflate = __webpack_require__(51);
22545         var zlib_inflate = __webpack_require__(56);
22546         var constants = __webpack_require__(59);
22547
22548         for (var key in constants) {
22549           exports[key] = constants[key];
22550         }
22551
22552         // zlib modes
22553         exports.NONE = 0;
22554         exports.DEFLATE = 1;
22555         exports.INFLATE = 2;
22556         exports.GZIP = 3;
22557         exports.GUNZIP = 4;
22558         exports.DEFLATERAW = 5;
22559         exports.INFLATERAW = 6;
22560         exports.UNZIP = 7;
22561
22562         /**
22563          * Emulate Node's zlib C++ layer for use by the JS layer in index.js
22564          */
22565         function Zlib(mode) {
22566           if (mode < exports.DEFLATE || mode > exports.UNZIP)
22567             throw new TypeError("Bad argument");
22568             
22569           this.mode = mode;
22570           this.init_done = false;
22571           this.write_in_progress = false;
22572           this.pending_close = false;
22573           this.windowBits = 0;
22574           this.level = 0;
22575           this.memLevel = 0;
22576           this.strategy = 0;
22577           this.dictionary = null;
22578         }
22579
22580         Zlib.prototype.init = function(windowBits, level, memLevel, strategy, dictionary) {
22581           this.windowBits = windowBits;
22582           this.level = level;
22583           this.memLevel = memLevel;
22584           this.strategy = strategy;
22585           // dictionary not supported.
22586           
22587           if (this.mode === exports.GZIP || this.mode === exports.GUNZIP)
22588             this.windowBits += 16;
22589             
22590           if (this.mode === exports.UNZIP)
22591             this.windowBits += 32;
22592             
22593           if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW)
22594             this.windowBits = -this.windowBits;
22595             
22596           this.strm = new zstream();
22597           
22598           switch (this.mode) {
22599             case exports.DEFLATE:
22600             case exports.GZIP:
22601             case exports.DEFLATERAW:
22602               var status = zlib_deflate.deflateInit2(
22603                 this.strm,
22604                 this.level,
22605                 exports.Z_DEFLATED,
22606                 this.windowBits,
22607                 this.memLevel,
22608                 this.strategy
22609               );
22610               break;
22611             case exports.INFLATE:
22612             case exports.GUNZIP:
22613             case exports.INFLATERAW:
22614             case exports.UNZIP:
22615               var status  = zlib_inflate.inflateInit2(
22616                 this.strm,
22617                 this.windowBits
22618               );
22619               break;
22620             default:
22621               throw new Error("Unknown mode " + this.mode);
22622           }
22623           
22624           if (status !== exports.Z_OK) {
22625             this._error(status);
22626             return;
22627           }
22628           
22629           this.write_in_progress = false;
22630           this.init_done = true;
22631         };
22632
22633         Zlib.prototype.params = function() {
22634           throw new Error("deflateParams Not supported");
22635         };
22636
22637         Zlib.prototype._writeCheck = function() {
22638           if (!this.init_done)
22639             throw new Error("write before init");
22640             
22641           if (this.mode === exports.NONE)
22642             throw new Error("already finalized");
22643             
22644           if (this.write_in_progress)
22645             throw new Error("write already in progress");
22646             
22647           if (this.pending_close)
22648             throw new Error("close is pending");
22649         };
22650
22651         Zlib.prototype.write = function(flush, input, in_off, in_len, out, out_off, out_len) {    
22652           this._writeCheck();
22653           this.write_in_progress = true;
22654           
22655           var self = this;
22656           process.nextTick(function() {
22657             self.write_in_progress = false;
22658             var res = self._write(flush, input, in_off, in_len, out, out_off, out_len);
22659             self.callback(res[0], res[1]);
22660             
22661             if (self.pending_close)
22662               self.close();
22663           });
22664           
22665           return this;
22666         };
22667
22668         // set method for Node buffers, used by pako
22669         function bufferSet(data, offset) {
22670           for (var i = 0; i < data.length; i++) {
22671             this[offset + i] = data[i];
22672           }
22673         }
22674
22675         Zlib.prototype.writeSync = function(flush, input, in_off, in_len, out, out_off, out_len) {
22676           this._writeCheck();
22677           return this._write(flush, input, in_off, in_len, out, out_off, out_len);
22678         };
22679
22680         Zlib.prototype._write = function(flush, input, in_off, in_len, out, out_off, out_len) {
22681           this.write_in_progress = true;
22682           
22683           if (flush !== exports.Z_NO_FLUSH &&
22684               flush !== exports.Z_PARTIAL_FLUSH &&
22685               flush !== exports.Z_SYNC_FLUSH &&
22686               flush !== exports.Z_FULL_FLUSH &&
22687               flush !== exports.Z_FINISH &&
22688               flush !== exports.Z_BLOCK) {
22689             throw new Error("Invalid flush value");
22690           }
22691           
22692           if (input == null) {
22693             input = new Buffer(0);
22694             in_len = 0;
22695             in_off = 0;
22696           }
22697           
22698           if (out._set)
22699             out.set = out._set;
22700           else
22701             out.set = bufferSet;
22702           
22703           var strm = this.strm;
22704           strm.avail_in = in_len;
22705           strm.input = input;
22706           strm.next_in = in_off;
22707           strm.avail_out = out_len;
22708           strm.output = out;
22709           strm.next_out = out_off;
22710           
22711           switch (this.mode) {
22712             case exports.DEFLATE:
22713             case exports.GZIP:
22714             case exports.DEFLATERAW:
22715               var status = zlib_deflate.deflate(strm, flush);
22716               break;
22717             case exports.UNZIP:
22718             case exports.INFLATE:
22719             case exports.GUNZIP:
22720             case exports.INFLATERAW:
22721               var status = zlib_inflate.inflate(strm, flush);
22722               break;
22723             default:
22724               throw new Error("Unknown mode " + this.mode);
22725           }
22726           
22727           if (status !== exports.Z_STREAM_END && status !== exports.Z_OK) {
22728             this._error(status);
22729           }
22730           
22731           this.write_in_progress = false;
22732           return [strm.avail_in, strm.avail_out];
22733         };
22734
22735         Zlib.prototype.close = function() {
22736           if (this.write_in_progress) {
22737             this.pending_close = true;
22738             return;
22739           }
22740           
22741           this.pending_close = false;
22742           
22743           if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
22744             zlib_deflate.deflateEnd(this.strm);
22745           } else {
22746             zlib_inflate.inflateEnd(this.strm);
22747           }
22748           
22749           this.mode = exports.NONE;
22750         };
22751
22752         Zlib.prototype.reset = function() {
22753           switch (this.mode) {
22754             case exports.DEFLATE:
22755             case exports.DEFLATERAW:
22756               var status = zlib_deflate.deflateReset(this.strm);
22757               break;
22758             case exports.INFLATE:
22759             case exports.INFLATERAW:
22760               var status = zlib_inflate.inflateReset(this.strm);
22761               break;
22762           }
22763           
22764           if (status !== exports.Z_OK) {
22765             this._error(status);
22766           }
22767         };
22768
22769         Zlib.prototype._error = function(status) {
22770           this.onerror(msg[status] + ': ' + this.strm.msg, status);
22771           
22772           this.write_in_progress = false;
22773           if (this.pending_close)
22774             this.close();
22775         };
22776
22777         exports.Zlib = Zlib;
22778
22779         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30), __webpack_require__(2).Buffer))
22780
22781 /***/ },
22782 /* 49 */
22783 /***/ function(module, exports) {
22784
22785         'use strict';
22786
22787         module.exports = {
22788           '2':    'need dictionary',     /* Z_NEED_DICT       2  */
22789           '1':    'stream end',          /* Z_STREAM_END      1  */
22790           '0':    '',                    /* Z_OK              0  */
22791           '-1':   'file error',          /* Z_ERRNO         (-1) */
22792           '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
22793           '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
22794           '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
22795           '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
22796           '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
22797         };
22798
22799
22800 /***/ },
22801 /* 50 */
22802 /***/ function(module, exports) {
22803
22804         'use strict';
22805
22806
22807         function ZStream() {
22808           /* next input byte */
22809           this.input = null; // JS specific, because we have no pointers
22810           this.next_in = 0;
22811           /* number of bytes available at input */
22812           this.avail_in = 0;
22813           /* total number of input bytes read so far */
22814           this.total_in = 0;
22815           /* next output byte should be put there */
22816           this.output = null; // JS specific, because we have no pointers
22817           this.next_out = 0;
22818           /* remaining free space at output */
22819           this.avail_out = 0;
22820           /* total number of bytes output so far */
22821           this.total_out = 0;
22822           /* last error message, NULL if no error */
22823           this.msg = ''/*Z_NULL*/;
22824           /* not visible by applications */
22825           this.state = null;
22826           /* best guess about the data type: binary or text */
22827           this.data_type = 2/*Z_UNKNOWN*/;
22828           /* adler32 value of the uncompressed data */
22829           this.adler = 0;
22830         }
22831
22832         module.exports = ZStream;
22833
22834
22835 /***/ },
22836 /* 51 */
22837 /***/ function(module, exports, __webpack_require__) {
22838
22839         'use strict';
22840
22841         var utils   = __webpack_require__(52);
22842         var trees   = __webpack_require__(53);
22843         var adler32 = __webpack_require__(54);
22844         var crc32   = __webpack_require__(55);
22845         var msg   = __webpack_require__(49);
22846
22847         /* Public constants ==========================================================*/
22848         /* ===========================================================================*/
22849
22850
22851         /* Allowed flush values; see deflate() and inflate() below for details */
22852         var Z_NO_FLUSH      = 0;
22853         var Z_PARTIAL_FLUSH = 1;
22854         //var Z_SYNC_FLUSH    = 2;
22855         var Z_FULL_FLUSH    = 3;
22856         var Z_FINISH        = 4;
22857         var Z_BLOCK         = 5;
22858         //var Z_TREES         = 6;
22859
22860
22861         /* Return codes for the compression/decompression functions. Negative values
22862          * are errors, positive values are used for special but normal events.
22863          */
22864         var Z_OK            = 0;
22865         var Z_STREAM_END    = 1;
22866         //var Z_NEED_DICT     = 2;
22867         //var Z_ERRNO         = -1;
22868         var Z_STREAM_ERROR  = -2;
22869         var Z_DATA_ERROR    = -3;
22870         //var Z_MEM_ERROR     = -4;
22871         var Z_BUF_ERROR     = -5;
22872         //var Z_VERSION_ERROR = -6;
22873
22874
22875         /* compression levels */
22876         //var Z_NO_COMPRESSION      = 0;
22877         //var Z_BEST_SPEED          = 1;
22878         //var Z_BEST_COMPRESSION    = 9;
22879         var Z_DEFAULT_COMPRESSION = -1;
22880
22881
22882         var Z_FILTERED            = 1;
22883         var Z_HUFFMAN_ONLY        = 2;
22884         var Z_RLE                 = 3;
22885         var Z_FIXED               = 4;
22886         var Z_DEFAULT_STRATEGY    = 0;
22887
22888         /* Possible values of the data_type field (though see inflate()) */
22889         //var Z_BINARY              = 0;
22890         //var Z_TEXT                = 1;
22891         //var Z_ASCII               = 1; // = Z_TEXT
22892         var Z_UNKNOWN             = 2;
22893
22894
22895         /* The deflate compression method */
22896         var Z_DEFLATED  = 8;
22897
22898         /*============================================================================*/
22899
22900
22901         var MAX_MEM_LEVEL = 9;
22902         /* Maximum value for memLevel in deflateInit2 */
22903         var MAX_WBITS = 15;
22904         /* 32K LZ77 window */
22905         var DEF_MEM_LEVEL = 8;
22906
22907
22908         var LENGTH_CODES  = 29;
22909         /* number of length codes, not counting the special END_BLOCK code */
22910         var LITERALS      = 256;
22911         /* number of literal bytes 0..255 */
22912         var L_CODES       = LITERALS + 1 + LENGTH_CODES;
22913         /* number of Literal or Length codes, including the END_BLOCK code */
22914         var D_CODES       = 30;
22915         /* number of distance codes */
22916         var BL_CODES      = 19;
22917         /* number of codes used to transfer the bit lengths */
22918         var HEAP_SIZE     = 2*L_CODES + 1;
22919         /* maximum heap size */
22920         var MAX_BITS  = 15;
22921         /* All codes must not exceed MAX_BITS bits */
22922
22923         var MIN_MATCH = 3;
22924         var MAX_MATCH = 258;
22925         var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
22926
22927         var PRESET_DICT = 0x20;
22928
22929         var INIT_STATE = 42;
22930         var EXTRA_STATE = 69;
22931         var NAME_STATE = 73;
22932         var COMMENT_STATE = 91;
22933         var HCRC_STATE = 103;
22934         var BUSY_STATE = 113;
22935         var FINISH_STATE = 666;
22936
22937         var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
22938         var BS_BLOCK_DONE     = 2; /* block flush performed */
22939         var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
22940         var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */
22941
22942         var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
22943
22944         function err(strm, errorCode) {
22945           strm.msg = msg[errorCode];
22946           return errorCode;
22947         }
22948
22949         function rank(f) {
22950           return ((f) << 1) - ((f) > 4 ? 9 : 0);
22951         }
22952
22953         function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
22954
22955
22956         /* =========================================================================
22957          * Flush as much pending output as possible. All deflate() output goes
22958          * through this function so some applications may wish to modify it
22959          * to avoid allocating a large strm->output buffer and copying into it.
22960          * (See also read_buf()).
22961          */
22962         function flush_pending(strm) {
22963           var s = strm.state;
22964
22965           //_tr_flush_bits(s);
22966           var len = s.pending;
22967           if (len > strm.avail_out) {
22968             len = strm.avail_out;
22969           }
22970           if (len === 0) { return; }
22971
22972           utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
22973           strm.next_out += len;
22974           s.pending_out += len;
22975           strm.total_out += len;
22976           strm.avail_out -= len;
22977           s.pending -= len;
22978           if (s.pending === 0) {
22979             s.pending_out = 0;
22980           }
22981         }
22982
22983
22984         function flush_block_only (s, last) {
22985           trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
22986           s.block_start = s.strstart;
22987           flush_pending(s.strm);
22988         }
22989
22990
22991         function put_byte(s, b) {
22992           s.pending_buf[s.pending++] = b;
22993         }
22994
22995
22996         /* =========================================================================
22997          * Put a short in the pending buffer. The 16-bit value is put in MSB order.
22998          * IN assertion: the stream state is correct and there is enough room in
22999          * pending_buf.
23000          */
23001         function putShortMSB(s, b) {
23002         //  put_byte(s, (Byte)(b >> 8));
23003         //  put_byte(s, (Byte)(b & 0xff));
23004           s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
23005           s.pending_buf[s.pending++] = b & 0xff;
23006         }
23007
23008
23009         /* ===========================================================================
23010          * Read a new buffer from the current input stream, update the adler32
23011          * and total number of bytes read.  All deflate() input goes through
23012          * this function so some applications may wish to modify it to avoid
23013          * allocating a large strm->input buffer and copying from it.
23014          * (See also flush_pending()).
23015          */
23016         function read_buf(strm, buf, start, size) {
23017           var len = strm.avail_in;
23018
23019           if (len > size) { len = size; }
23020           if (len === 0) { return 0; }
23021
23022           strm.avail_in -= len;
23023
23024           utils.arraySet(buf, strm.input, strm.next_in, len, start);
23025           if (strm.state.wrap === 1) {
23026             strm.adler = adler32(strm.adler, buf, len, start);
23027           }
23028
23029           else if (strm.state.wrap === 2) {
23030             strm.adler = crc32(strm.adler, buf, len, start);
23031           }
23032
23033           strm.next_in += len;
23034           strm.total_in += len;
23035
23036           return len;
23037         }
23038
23039
23040         /* ===========================================================================
23041          * Set match_start to the longest match starting at the given string and
23042          * return its length. Matches shorter or equal to prev_length are discarded,
23043          * in which case the result is equal to prev_length and match_start is
23044          * garbage.
23045          * IN assertions: cur_match is the head of the hash chain for the current
23046          *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
23047          * OUT assertion: the match length is not greater than s->lookahead.
23048          */
23049         function longest_match(s, cur_match) {
23050           var chain_length = s.max_chain_length;      /* max hash chain length */
23051           var scan = s.strstart; /* current string */
23052           var match;                       /* matched string */
23053           var len;                           /* length of current match */
23054           var best_len = s.prev_length;              /* best match length so far */
23055           var nice_match = s.nice_match;             /* stop if match long enough */
23056           var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
23057               s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
23058
23059           var _win = s.window; // shortcut
23060
23061           var wmask = s.w_mask;
23062           var prev  = s.prev;
23063
23064           /* Stop when cur_match becomes <= limit. To simplify the code,
23065            * we prevent matches with the string of window index 0.
23066            */
23067
23068           var strend = s.strstart + MAX_MATCH;
23069           var scan_end1  = _win[scan + best_len - 1];
23070           var scan_end   = _win[scan + best_len];
23071
23072           /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
23073            * It is easy to get rid of this optimization if necessary.
23074            */
23075           // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
23076
23077           /* Do not waste too much time if we already have a good match: */
23078           if (s.prev_length >= s.good_match) {
23079             chain_length >>= 2;
23080           }
23081           /* Do not look for matches beyond the end of the input. This is necessary
23082            * to make deflate deterministic.
23083            */
23084           if (nice_match > s.lookahead) { nice_match = s.lookahead; }
23085
23086           // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
23087
23088           do {
23089             // Assert(cur_match < s->strstart, "no future");
23090             match = cur_match;
23091
23092             /* Skip to next match if the match length cannot increase
23093              * or if the match length is less than 2.  Note that the checks below
23094              * for insufficient lookahead only occur occasionally for performance
23095              * reasons.  Therefore uninitialized memory will be accessed, and
23096              * conditional jumps will be made that depend on those values.
23097              * However the length of the match is limited to the lookahead, so
23098              * the output of deflate is not affected by the uninitialized values.
23099              */
23100
23101             if (_win[match + best_len]     !== scan_end  ||
23102                 _win[match + best_len - 1] !== scan_end1 ||
23103                 _win[match]                !== _win[scan] ||
23104                 _win[++match]              !== _win[scan + 1]) {
23105               continue;
23106             }
23107
23108             /* The check at best_len-1 can be removed because it will be made
23109              * again later. (This heuristic is not always a win.)
23110              * It is not necessary to compare scan[2] and match[2] since they
23111              * are always equal when the other bytes match, given that
23112              * the hash keys are equal and that HASH_BITS >= 8.
23113              */
23114             scan += 2;
23115             match++;
23116             // Assert(*scan == *match, "match[2]?");
23117
23118             /* We check for insufficient lookahead only every 8th comparison;
23119              * the 256th check will be made at strstart+258.
23120              */
23121             do {
23122               /*jshint noempty:false*/
23123             } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
23124                      _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
23125                      _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
23126                      _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
23127                      scan < strend);
23128
23129             // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
23130
23131             len = MAX_MATCH - (strend - scan);
23132             scan = strend - MAX_MATCH;
23133
23134             if (len > best_len) {
23135               s.match_start = cur_match;
23136               best_len = len;
23137               if (len >= nice_match) {
23138                 break;
23139               }
23140               scan_end1  = _win[scan + best_len - 1];
23141               scan_end   = _win[scan + best_len];
23142             }
23143           } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
23144
23145           if (best_len <= s.lookahead) {
23146             return best_len;
23147           }
23148           return s.lookahead;
23149         }
23150
23151
23152         /* ===========================================================================
23153          * Fill the window when the lookahead becomes insufficient.
23154          * Updates strstart and lookahead.
23155          *
23156          * IN assertion: lookahead < MIN_LOOKAHEAD
23157          * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
23158          *    At least one byte has been read, or avail_in == 0; reads are
23159          *    performed for at least two bytes (required for the zip translate_eol
23160          *    option -- not supported here).
23161          */
23162         function fill_window(s) {
23163           var _w_size = s.w_size;
23164           var p, n, m, more, str;
23165
23166           //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
23167
23168           do {
23169             more = s.window_size - s.lookahead - s.strstart;
23170
23171             // JS ints have 32 bit, block below not needed
23172             /* Deal with !@#$% 64K limit: */
23173             //if (sizeof(int) <= 2) {
23174             //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
23175             //        more = wsize;
23176             //
23177             //  } else if (more == (unsigned)(-1)) {
23178             //        /* Very unlikely, but possible on 16 bit machine if
23179             //         * strstart == 0 && lookahead == 1 (input done a byte at time)
23180             //         */
23181             //        more--;
23182             //    }
23183             //}
23184
23185
23186             /* If the window is almost full and there is insufficient lookahead,
23187              * move the upper half to the lower one to make room in the upper half.
23188              */
23189             if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
23190
23191               utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
23192               s.match_start -= _w_size;
23193               s.strstart -= _w_size;
23194               /* we now have strstart >= MAX_DIST */
23195               s.block_start -= _w_size;
23196
23197               /* Slide the hash table (could be avoided with 32 bit values
23198                at the expense of memory usage). We slide even when level == 0
23199                to keep the hash table consistent if we switch back to level > 0
23200                later. (Using level 0 permanently is not an optimal usage of
23201                zlib, so we don't care about this pathological case.)
23202                */
23203
23204               n = s.hash_size;
23205               p = n;
23206               do {
23207                 m = s.head[--p];
23208                 s.head[p] = (m >= _w_size ? m - _w_size : 0);
23209               } while (--n);
23210
23211               n = _w_size;
23212               p = n;
23213               do {
23214                 m = s.prev[--p];
23215                 s.prev[p] = (m >= _w_size ? m - _w_size : 0);
23216                 /* If n is not on any hash chain, prev[n] is garbage but
23217                  * its value will never be used.
23218                  */
23219               } while (--n);
23220
23221               more += _w_size;
23222             }
23223             if (s.strm.avail_in === 0) {
23224               break;
23225             }
23226
23227             /* If there was no sliding:
23228              *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
23229              *    more == window_size - lookahead - strstart
23230              * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
23231              * => more >= window_size - 2*WSIZE + 2
23232              * In the BIG_MEM or MMAP case (not yet supported),
23233              *   window_size == input_size + MIN_LOOKAHEAD  &&
23234              *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
23235              * Otherwise, window_size == 2*WSIZE so more >= 2.
23236              * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
23237              */
23238             //Assert(more >= 2, "more < 2");
23239             n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
23240             s.lookahead += n;
23241
23242             /* Initialize the hash value now that we have some input: */
23243             if (s.lookahead + s.insert >= MIN_MATCH) {
23244               str = s.strstart - s.insert;
23245               s.ins_h = s.window[str];
23246
23247               /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
23248               s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
23249         //#if MIN_MATCH != 3
23250         //        Call update_hash() MIN_MATCH-3 more times
23251         //#endif
23252               while (s.insert) {
23253                 /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
23254                 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;
23255
23256                 s.prev[str & s.w_mask] = s.head[s.ins_h];
23257                 s.head[s.ins_h] = str;
23258                 str++;
23259                 s.insert--;
23260                 if (s.lookahead + s.insert < MIN_MATCH) {
23261                   break;
23262                 }
23263               }
23264             }
23265             /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
23266              * but this is not important since only literal bytes will be emitted.
23267              */
23268
23269           } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
23270
23271           /* If the WIN_INIT bytes after the end of the current data have never been
23272            * written, then zero those bytes in order to avoid memory check reports of
23273            * the use of uninitialized (or uninitialised as Julian writes) bytes by
23274            * the longest match routines.  Update the high water mark for the next
23275            * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
23276            * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
23277            */
23278         //  if (s.high_water < s.window_size) {
23279         //    var curr = s.strstart + s.lookahead;
23280         //    var init = 0;
23281         //
23282         //    if (s.high_water < curr) {
23283         //      /* Previous high water mark below current data -- zero WIN_INIT
23284         //       * bytes or up to end of window, whichever is less.
23285         //       */
23286         //      init = s.window_size - curr;
23287         //      if (init > WIN_INIT)
23288         //        init = WIN_INIT;
23289         //      zmemzero(s->window + curr, (unsigned)init);
23290         //      s->high_water = curr + init;
23291         //    }
23292         //    else if (s->high_water < (ulg)curr + WIN_INIT) {
23293         //      /* High water mark at or above current data, but below current data
23294         //       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
23295         //       * to end of window, whichever is less.
23296         //       */
23297         //      init = (ulg)curr + WIN_INIT - s->high_water;
23298         //      if (init > s->window_size - s->high_water)
23299         //        init = s->window_size - s->high_water;
23300         //      zmemzero(s->window + s->high_water, (unsigned)init);
23301         //      s->high_water += init;
23302         //    }
23303         //  }
23304         //
23305         //  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
23306         //    "not enough room for search");
23307         }
23308
23309         /* ===========================================================================
23310          * Copy without compression as much as possible from the input stream, return
23311          * the current block state.
23312          * This function does not insert new strings in the dictionary since
23313          * uncompressible data is probably not useful. This function is used
23314          * only for the level=0 compression option.
23315          * NOTE: this function should be optimized to avoid extra copying from
23316          * window to pending_buf.
23317          */
23318         function deflate_stored(s, flush) {
23319           /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
23320            * to pending_buf_size, and each stored block has a 5 byte header:
23321            */
23322           var max_block_size = 0xffff;
23323
23324           if (max_block_size > s.pending_buf_size - 5) {
23325             max_block_size = s.pending_buf_size - 5;
23326           }
23327
23328           /* Copy as much as possible from input to output: */
23329           for (;;) {
23330             /* Fill the window as much as possible: */
23331             if (s.lookahead <= 1) {
23332
23333               //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
23334               //  s->block_start >= (long)s->w_size, "slide too late");
23335         //      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
23336         //        s.block_start >= s.w_size)) {
23337         //        throw  new Error("slide too late");
23338         //      }
23339
23340               fill_window(s);
23341               if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
23342                 return BS_NEED_MORE;
23343               }
23344
23345               if (s.lookahead === 0) {
23346                 break;
23347               }
23348               /* flush the current block */
23349             }
23350             //Assert(s->block_start >= 0L, "block gone");
23351         //    if (s.block_start < 0) throw new Error("block gone");
23352
23353             s.strstart += s.lookahead;
23354             s.lookahead = 0;
23355
23356             /* Emit a stored block if pending_buf will be full: */
23357             var max_start = s.block_start + max_block_size;
23358
23359             if (s.strstart === 0 || s.strstart >= max_start) {
23360               /* strstart == 0 is possible when wraparound on 16-bit machine */
23361               s.lookahead = s.strstart - max_start;
23362               s.strstart = max_start;
23363               /*** FLUSH_BLOCK(s, 0); ***/
23364               flush_block_only(s, false);
23365               if (s.strm.avail_out === 0) {
23366                 return BS_NEED_MORE;
23367               }
23368               /***/
23369
23370
23371             }
23372             /* Flush if we may have to slide, otherwise block_start may become
23373              * negative and the data will be gone:
23374              */
23375             if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
23376               /*** FLUSH_BLOCK(s, 0); ***/
23377               flush_block_only(s, false);
23378               if (s.strm.avail_out === 0) {
23379                 return BS_NEED_MORE;
23380               }
23381               /***/
23382             }
23383           }
23384
23385           s.insert = 0;
23386
23387           if (flush === Z_FINISH) {
23388             /*** FLUSH_BLOCK(s, 1); ***/
23389             flush_block_only(s, true);
23390             if (s.strm.avail_out === 0) {
23391               return BS_FINISH_STARTED;
23392             }
23393             /***/
23394             return BS_FINISH_DONE;
23395           }
23396
23397           if (s.strstart > s.block_start) {
23398             /*** FLUSH_BLOCK(s, 0); ***/
23399             flush_block_only(s, false);
23400             if (s.strm.avail_out === 0) {
23401               return BS_NEED_MORE;
23402             }
23403             /***/
23404           }
23405
23406           return BS_NEED_MORE;
23407         }
23408
23409         /* ===========================================================================
23410          * Compress as much as possible from the input stream, return the current
23411          * block state.
23412          * This function does not perform lazy evaluation of matches and inserts
23413          * new strings in the dictionary only for unmatched strings or for short
23414          * matches. It is used only for the fast compression options.
23415          */
23416         function deflate_fast(s, flush) {
23417           var hash_head;        /* head of the hash chain */
23418           var bflush;           /* set if current block must be flushed */
23419
23420           for (;;) {
23421             /* Make sure that we always have enough lookahead, except
23422              * at the end of the input file. We need MAX_MATCH bytes
23423              * for the next match, plus MIN_MATCH bytes to insert the
23424              * string following the next match.
23425              */
23426             if (s.lookahead < MIN_LOOKAHEAD) {
23427               fill_window(s);
23428               if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
23429                 return BS_NEED_MORE;
23430               }
23431               if (s.lookahead === 0) {
23432                 break; /* flush the current block */
23433               }
23434             }
23435
23436             /* Insert the string window[strstart .. strstart+2] in the
23437              * dictionary, and set hash_head to the head of the hash chain:
23438              */
23439             hash_head = 0/*NIL*/;
23440             if (s.lookahead >= MIN_MATCH) {
23441               /*** INSERT_STRING(s, s.strstart, hash_head); ***/
23442               s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
23443               hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
23444               s.head[s.ins_h] = s.strstart;
23445               /***/
23446             }
23447
23448             /* Find the longest match, discarding those <= prev_length.
23449              * At this point we have always match_length < MIN_MATCH
23450              */
23451             if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
23452               /* To simplify the code, we prevent matches with the string
23453                * of window index 0 (in particular we have to avoid a match
23454                * of the string with itself at the start of the input file).
23455                */
23456               s.match_length = longest_match(s, hash_head);
23457               /* longest_match() sets match_start */
23458             }
23459             if (s.match_length >= MIN_MATCH) {
23460               // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
23461
23462               /*** _tr_tally_dist(s, s.strstart - s.match_start,
23463                              s.match_length - MIN_MATCH, bflush); ***/
23464               bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
23465
23466               s.lookahead -= s.match_length;
23467
23468               /* Insert new strings in the hash table only if the match length
23469                * is not too large. This saves time but degrades compression.
23470                */
23471               if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
23472                 s.match_length--; /* string at strstart already in table */
23473                 do {
23474                   s.strstart++;
23475                   /*** INSERT_STRING(s, s.strstart, hash_head); ***/
23476                   s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
23477                   hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
23478                   s.head[s.ins_h] = s.strstart;
23479                   /***/
23480                   /* strstart never exceeds WSIZE-MAX_MATCH, so there are
23481                    * always MIN_MATCH bytes ahead.
23482                    */
23483                 } while (--s.match_length !== 0);
23484                 s.strstart++;
23485               } else
23486               {
23487                 s.strstart += s.match_length;
23488                 s.match_length = 0;
23489                 s.ins_h = s.window[s.strstart];
23490                 /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
23491                 s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
23492
23493         //#if MIN_MATCH != 3
23494         //                Call UPDATE_HASH() MIN_MATCH-3 more times
23495         //#endif
23496                 /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
23497                  * matter since it will be recomputed at next deflate call.
23498                  */
23499               }
23500             } else {
23501               /* No match, output a literal byte */
23502               //Tracevv((stderr,"%c", s.window[s.strstart]));
23503               /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
23504               bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
23505
23506               s.lookahead--;
23507               s.strstart++;
23508             }
23509             if (bflush) {
23510               /*** FLUSH_BLOCK(s, 0); ***/
23511               flush_block_only(s, false);
23512               if (s.strm.avail_out === 0) {
23513                 return BS_NEED_MORE;
23514               }
23515               /***/
23516             }
23517           }
23518           s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);
23519           if (flush === Z_FINISH) {
23520             /*** FLUSH_BLOCK(s, 1); ***/
23521             flush_block_only(s, true);
23522             if (s.strm.avail_out === 0) {
23523               return BS_FINISH_STARTED;
23524             }
23525             /***/
23526             return BS_FINISH_DONE;
23527           }
23528           if (s.last_lit) {
23529             /*** FLUSH_BLOCK(s, 0); ***/
23530             flush_block_only(s, false);
23531             if (s.strm.avail_out === 0) {
23532               return BS_NEED_MORE;
23533             }
23534             /***/
23535           }
23536           return BS_BLOCK_DONE;
23537         }
23538
23539         /* ===========================================================================
23540          * Same as above, but achieves better compression. We use a lazy
23541          * evaluation for matches: a match is finally adopted only if there is
23542          * no better match at the next window position.
23543          */
23544         function deflate_slow(s, flush) {
23545           var hash_head;          /* head of hash chain */
23546           var bflush;              /* set if current block must be flushed */
23547
23548           var max_insert;
23549
23550           /* Process the input block. */
23551           for (;;) {
23552             /* Make sure that we always have enough lookahead, except
23553              * at the end of the input file. We need MAX_MATCH bytes
23554              * for the next match, plus MIN_MATCH bytes to insert the
23555              * string following the next match.
23556              */
23557             if (s.lookahead < MIN_LOOKAHEAD) {
23558               fill_window(s);
23559               if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
23560                 return BS_NEED_MORE;
23561               }
23562               if (s.lookahead === 0) { break; } /* flush the current block */
23563             }
23564
23565             /* Insert the string window[strstart .. strstart+2] in the
23566              * dictionary, and set hash_head to the head of the hash chain:
23567              */
23568             hash_head = 0/*NIL*/;
23569             if (s.lookahead >= MIN_MATCH) {
23570               /*** INSERT_STRING(s, s.strstart, hash_head); ***/
23571               s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
23572               hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
23573               s.head[s.ins_h] = s.strstart;
23574               /***/
23575             }
23576
23577             /* Find the longest match, discarding those <= prev_length.
23578              */
23579             s.prev_length = s.match_length;
23580             s.prev_match = s.match_start;
23581             s.match_length = MIN_MATCH-1;
23582
23583             if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
23584                 s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
23585               /* To simplify the code, we prevent matches with the string
23586                * of window index 0 (in particular we have to avoid a match
23587                * of the string with itself at the start of the input file).
23588                */
23589               s.match_length = longest_match(s, hash_head);
23590               /* longest_match() sets match_start */
23591
23592               if (s.match_length <= 5 &&
23593                  (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
23594
23595                 /* If prev_match is also MIN_MATCH, match_start is garbage
23596                  * but we will ignore the current match anyway.
23597                  */
23598                 s.match_length = MIN_MATCH-1;
23599               }
23600             }
23601             /* If there was a match at the previous step and the current
23602              * match is not better, output the previous match:
23603              */
23604             if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
23605               max_insert = s.strstart + s.lookahead - MIN_MATCH;
23606               /* Do not insert strings in hash table beyond this. */
23607
23608               //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
23609
23610               /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
23611                              s.prev_length - MIN_MATCH, bflush);***/
23612               bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);
23613               /* Insert in hash table all strings up to the end of the match.
23614                * strstart-1 and strstart are already inserted. If there is not
23615                * enough lookahead, the last two strings are not inserted in
23616                * the hash table.
23617                */
23618               s.lookahead -= s.prev_length-1;
23619               s.prev_length -= 2;
23620               do {
23621                 if (++s.strstart <= max_insert) {
23622                   /*** INSERT_STRING(s, s.strstart, hash_head); ***/
23623                   s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
23624                   hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
23625                   s.head[s.ins_h] = s.strstart;
23626                   /***/
23627                 }
23628               } while (--s.prev_length !== 0);
23629               s.match_available = 0;
23630               s.match_length = MIN_MATCH-1;
23631               s.strstart++;
23632
23633               if (bflush) {
23634                 /*** FLUSH_BLOCK(s, 0); ***/
23635                 flush_block_only(s, false);
23636                 if (s.strm.avail_out === 0) {
23637                   return BS_NEED_MORE;
23638                 }
23639                 /***/
23640               }
23641
23642             } else if (s.match_available) {
23643               /* If there was no match at the previous position, output a
23644                * single literal. If there was a match but the current match
23645                * is longer, truncate the previous match to a single literal.
23646                */
23647               //Tracevv((stderr,"%c", s->window[s->strstart-1]));
23648               /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
23649               bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
23650
23651               if (bflush) {
23652                 /*** FLUSH_BLOCK_ONLY(s, 0) ***/
23653                 flush_block_only(s, false);
23654                 /***/
23655               }
23656               s.strstart++;
23657               s.lookahead--;
23658               if (s.strm.avail_out === 0) {
23659                 return BS_NEED_MORE;
23660               }
23661             } else {
23662               /* There is no previous match to compare with, wait for
23663                * the next step to decide.
23664                */
23665               s.match_available = 1;
23666               s.strstart++;
23667               s.lookahead--;
23668             }
23669           }
23670           //Assert (flush != Z_NO_FLUSH, "no flush?");
23671           if (s.match_available) {
23672             //Tracevv((stderr,"%c", s->window[s->strstart-1]));
23673             /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
23674             bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
23675
23676             s.match_available = 0;
23677           }
23678           s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;
23679           if (flush === Z_FINISH) {
23680             /*** FLUSH_BLOCK(s, 1); ***/
23681             flush_block_only(s, true);
23682             if (s.strm.avail_out === 0) {
23683               return BS_FINISH_STARTED;
23684             }
23685             /***/
23686             return BS_FINISH_DONE;
23687           }
23688           if (s.last_lit) {
23689             /*** FLUSH_BLOCK(s, 0); ***/
23690             flush_block_only(s, false);
23691             if (s.strm.avail_out === 0) {
23692               return BS_NEED_MORE;
23693             }
23694             /***/
23695           }
23696
23697           return BS_BLOCK_DONE;
23698         }
23699
23700
23701         /* ===========================================================================
23702          * For Z_RLE, simply look for runs of bytes, generate matches only of distance
23703          * one.  Do not maintain a hash table.  (It will be regenerated if this run of
23704          * deflate switches away from Z_RLE.)
23705          */
23706         function deflate_rle(s, flush) {
23707           var bflush;            /* set if current block must be flushed */
23708           var prev;              /* byte at distance one to match */
23709           var scan, strend;      /* scan goes up to strend for length of run */
23710
23711           var _win = s.window;
23712
23713           for (;;) {
23714             /* Make sure that we always have enough lookahead, except
23715              * at the end of the input file. We need MAX_MATCH bytes
23716              * for the longest run, plus one for the unrolled loop.
23717              */
23718             if (s.lookahead <= MAX_MATCH) {
23719               fill_window(s);
23720               if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
23721                 return BS_NEED_MORE;
23722               }
23723               if (s.lookahead === 0) { break; } /* flush the current block */
23724             }
23725
23726             /* See how many times the previous byte repeats */
23727             s.match_length = 0;
23728             if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
23729               scan = s.strstart - 1;
23730               prev = _win[scan];
23731               if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
23732                 strend = s.strstart + MAX_MATCH;
23733                 do {
23734                   /*jshint noempty:false*/
23735                 } while (prev === _win[++scan] && prev === _win[++scan] &&
23736                          prev === _win[++scan] && prev === _win[++scan] &&
23737                          prev === _win[++scan] && prev === _win[++scan] &&
23738                          prev === _win[++scan] && prev === _win[++scan] &&
23739                          scan < strend);
23740                 s.match_length = MAX_MATCH - (strend - scan);
23741                 if (s.match_length > s.lookahead) {
23742                   s.match_length = s.lookahead;
23743                 }
23744               }
23745               //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
23746             }
23747
23748             /* Emit match if have run of MIN_MATCH or longer, else emit literal */
23749             if (s.match_length >= MIN_MATCH) {
23750               //check_match(s, s.strstart, s.strstart - 1, s.match_length);
23751
23752               /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
23753               bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
23754
23755               s.lookahead -= s.match_length;
23756               s.strstart += s.match_length;
23757               s.match_length = 0;
23758             } else {
23759               /* No match, output a literal byte */
23760               //Tracevv((stderr,"%c", s->window[s->strstart]));
23761               /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
23762               bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
23763
23764               s.lookahead--;
23765               s.strstart++;
23766             }
23767             if (bflush) {
23768               /*** FLUSH_BLOCK(s, 0); ***/
23769               flush_block_only(s, false);
23770               if (s.strm.avail_out === 0) {
23771                 return BS_NEED_MORE;
23772               }
23773               /***/
23774             }
23775           }
23776           s.insert = 0;
23777           if (flush === Z_FINISH) {
23778             /*** FLUSH_BLOCK(s, 1); ***/
23779             flush_block_only(s, true);
23780             if (s.strm.avail_out === 0) {
23781               return BS_FINISH_STARTED;
23782             }
23783             /***/
23784             return BS_FINISH_DONE;
23785           }
23786           if (s.last_lit) {
23787             /*** FLUSH_BLOCK(s, 0); ***/
23788             flush_block_only(s, false);
23789             if (s.strm.avail_out === 0) {
23790               return BS_NEED_MORE;
23791             }
23792             /***/
23793           }
23794           return BS_BLOCK_DONE;
23795         }
23796
23797         /* ===========================================================================
23798          * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
23799          * (It will be regenerated if this run of deflate switches away from Huffman.)
23800          */
23801         function deflate_huff(s, flush) {
23802           var bflush;             /* set if current block must be flushed */
23803
23804           for (;;) {
23805             /* Make sure that we have a literal to write. */
23806             if (s.lookahead === 0) {
23807               fill_window(s);
23808               if (s.lookahead === 0) {
23809                 if (flush === Z_NO_FLUSH) {
23810                   return BS_NEED_MORE;
23811                 }
23812                 break;      /* flush the current block */
23813               }
23814             }
23815
23816             /* Output a literal byte */
23817             s.match_length = 0;
23818             //Tracevv((stderr,"%c", s->window[s->strstart]));
23819             /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
23820             bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
23821             s.lookahead--;
23822             s.strstart++;
23823             if (bflush) {
23824               /*** FLUSH_BLOCK(s, 0); ***/
23825               flush_block_only(s, false);
23826               if (s.strm.avail_out === 0) {
23827                 return BS_NEED_MORE;
23828               }
23829               /***/
23830             }
23831           }
23832           s.insert = 0;
23833           if (flush === Z_FINISH) {
23834             /*** FLUSH_BLOCK(s, 1); ***/
23835             flush_block_only(s, true);
23836             if (s.strm.avail_out === 0) {
23837               return BS_FINISH_STARTED;
23838             }
23839             /***/
23840             return BS_FINISH_DONE;
23841           }
23842           if (s.last_lit) {
23843             /*** FLUSH_BLOCK(s, 0); ***/
23844             flush_block_only(s, false);
23845             if (s.strm.avail_out === 0) {
23846               return BS_NEED_MORE;
23847             }
23848             /***/
23849           }
23850           return BS_BLOCK_DONE;
23851         }
23852
23853         /* Values for max_lazy_match, good_match and max_chain_length, depending on
23854          * the desired pack level (0..9). The values given below have been tuned to
23855          * exclude worst case performance for pathological files. Better values may be
23856          * found for specific files.
23857          */
23858         var Config = function (good_length, max_lazy, nice_length, max_chain, func) {
23859           this.good_length = good_length;
23860           this.max_lazy = max_lazy;
23861           this.nice_length = nice_length;
23862           this.max_chain = max_chain;
23863           this.func = func;
23864         };
23865
23866         var configuration_table;
23867
23868         configuration_table = [
23869           /*      good lazy nice chain */
23870           new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
23871           new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
23872           new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
23873           new Config(4, 6, 32, 32, deflate_fast),          /* 3 */
23874
23875           new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
23876           new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
23877           new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
23878           new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
23879           new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
23880           new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
23881         ];
23882
23883
23884         /* ===========================================================================
23885          * Initialize the "longest match" routines for a new zlib stream
23886          */
23887         function lm_init(s) {
23888           s.window_size = 2 * s.w_size;
23889
23890           /*** CLEAR_HASH(s); ***/
23891           zero(s.head); // Fill with NIL (= 0);
23892
23893           /* Set the default configuration parameters:
23894            */
23895           s.max_lazy_match = configuration_table[s.level].max_lazy;
23896           s.good_match = configuration_table[s.level].good_length;
23897           s.nice_match = configuration_table[s.level].nice_length;
23898           s.max_chain_length = configuration_table[s.level].max_chain;
23899
23900           s.strstart = 0;
23901           s.block_start = 0;
23902           s.lookahead = 0;
23903           s.insert = 0;
23904           s.match_length = s.prev_length = MIN_MATCH - 1;
23905           s.match_available = 0;
23906           s.ins_h = 0;
23907         }
23908
23909
23910         function DeflateState() {
23911           this.strm = null;            /* pointer back to this zlib stream */
23912           this.status = 0;            /* as the name implies */
23913           this.pending_buf = null;      /* output still pending */
23914           this.pending_buf_size = 0;  /* size of pending_buf */
23915           this.pending_out = 0;       /* next pending byte to output to the stream */
23916           this.pending = 0;           /* nb of bytes in the pending buffer */
23917           this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
23918           this.gzhead = null;         /* gzip header information to write */
23919           this.gzindex = 0;           /* where in extra, name, or comment */
23920           this.method = Z_DEFLATED; /* can only be DEFLATED */
23921           this.last_flush = -1;   /* value of flush param for previous deflate call */
23922
23923           this.w_size = 0;  /* LZ77 window size (32K by default) */
23924           this.w_bits = 0;  /* log2(w_size)  (8..16) */
23925           this.w_mask = 0;  /* w_size - 1 */
23926
23927           this.window = null;
23928           /* Sliding window. Input bytes are read into the second half of the window,
23929            * and move to the first half later to keep a dictionary of at least wSize
23930            * bytes. With this organization, matches are limited to a distance of
23931            * wSize-MAX_MATCH bytes, but this ensures that IO is always
23932            * performed with a length multiple of the block size.
23933            */
23934
23935           this.window_size = 0;
23936           /* Actual size of window: 2*wSize, except when the user input buffer
23937            * is directly used as sliding window.
23938            */
23939
23940           this.prev = null;
23941           /* Link to older string with same hash index. To limit the size of this
23942            * array to 64K, this link is maintained only for the last 32K strings.
23943            * An index in this array is thus a window index modulo 32K.
23944            */
23945
23946           this.head = null;   /* Heads of the hash chains or NIL. */
23947
23948           this.ins_h = 0;       /* hash index of string to be inserted */
23949           this.hash_size = 0;   /* number of elements in hash table */
23950           this.hash_bits = 0;   /* log2(hash_size) */
23951           this.hash_mask = 0;   /* hash_size-1 */
23952
23953           this.hash_shift = 0;
23954           /* Number of bits by which ins_h must be shifted at each input
23955            * step. It must be such that after MIN_MATCH steps, the oldest
23956            * byte no longer takes part in the hash key, that is:
23957            *   hash_shift * MIN_MATCH >= hash_bits
23958            */
23959
23960           this.block_start = 0;
23961           /* Window position at the beginning of the current output block. Gets
23962            * negative when the window is moved backwards.
23963            */
23964
23965           this.match_length = 0;      /* length of best match */
23966           this.prev_match = 0;        /* previous match */
23967           this.match_available = 0;   /* set if previous match exists */
23968           this.strstart = 0;          /* start of string to insert */
23969           this.match_start = 0;       /* start of matching string */
23970           this.lookahead = 0;         /* number of valid bytes ahead in window */
23971
23972           this.prev_length = 0;
23973           /* Length of the best match at previous step. Matches not greater than this
23974            * are discarded. This is used in the lazy match evaluation.
23975            */
23976
23977           this.max_chain_length = 0;
23978           /* To speed up deflation, hash chains are never searched beyond this
23979            * length.  A higher limit improves compression ratio but degrades the
23980            * speed.
23981            */
23982
23983           this.max_lazy_match = 0;
23984           /* Attempt to find a better match only when the current match is strictly
23985            * smaller than this value. This mechanism is used only for compression
23986            * levels >= 4.
23987            */
23988           // That's alias to max_lazy_match, don't use directly
23989           //this.max_insert_length = 0;
23990           /* Insert new strings in the hash table only if the match length is not
23991            * greater than this length. This saves time but degrades compression.
23992            * max_insert_length is used only for compression levels <= 3.
23993            */
23994
23995           this.level = 0;     /* compression level (1..9) */
23996           this.strategy = 0;  /* favor or force Huffman coding*/
23997
23998           this.good_match = 0;
23999           /* Use a faster search when the previous match is longer than this */
24000
24001           this.nice_match = 0; /* Stop searching when current match exceeds this */
24002
24003                       /* used by trees.c: */
24004
24005           /* Didn't use ct_data typedef below to suppress compiler warning */
24006
24007           // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
24008           // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
24009           // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
24010
24011           // Use flat array of DOUBLE size, with interleaved fata,
24012           // because JS does not support effective
24013           this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
24014           this.dyn_dtree  = new utils.Buf16((2*D_CODES+1) * 2);
24015           this.bl_tree    = new utils.Buf16((2*BL_CODES+1) * 2);
24016           zero(this.dyn_ltree);
24017           zero(this.dyn_dtree);
24018           zero(this.bl_tree);
24019
24020           this.l_desc   = null;         /* desc. for literal tree */
24021           this.d_desc   = null;         /* desc. for distance tree */
24022           this.bl_desc  = null;         /* desc. for bit length tree */
24023
24024           //ush bl_count[MAX_BITS+1];
24025           this.bl_count = new utils.Buf16(MAX_BITS+1);
24026           /* number of codes at each bit length for an optimal tree */
24027
24028           //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
24029           this.heap = new utils.Buf16(2*L_CODES+1);  /* heap used to build the Huffman trees */
24030           zero(this.heap);
24031
24032           this.heap_len = 0;               /* number of elements in the heap */
24033           this.heap_max = 0;               /* element of largest frequency */
24034           /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
24035            * The same heap array is used to build all trees.
24036            */
24037
24038           this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];
24039           zero(this.depth);
24040           /* Depth of each subtree used as tie breaker for trees of equal frequency
24041            */
24042
24043           this.l_buf = 0;          /* buffer index for literals or lengths */
24044
24045           this.lit_bufsize = 0;
24046           /* Size of match buffer for literals/lengths.  There are 4 reasons for
24047            * limiting lit_bufsize to 64K:
24048            *   - frequencies can be kept in 16 bit counters
24049            *   - if compression is not successful for the first block, all input
24050            *     data is still in the window so we can still emit a stored block even
24051            *     when input comes from standard input.  (This can also be done for
24052            *     all blocks if lit_bufsize is not greater than 32K.)
24053            *   - if compression is not successful for a file smaller than 64K, we can
24054            *     even emit a stored file instead of a stored block (saving 5 bytes).
24055            *     This is applicable only for zip (not gzip or zlib).
24056            *   - creating new Huffman trees less frequently may not provide fast
24057            *     adaptation to changes in the input data statistics. (Take for
24058            *     example a binary file with poorly compressible code followed by
24059            *     a highly compressible string table.) Smaller buffer sizes give
24060            *     fast adaptation but have of course the overhead of transmitting
24061            *     trees more frequently.
24062            *   - I can't count above 4
24063            */
24064
24065           this.last_lit = 0;      /* running index in l_buf */
24066
24067           this.d_buf = 0;
24068           /* Buffer index for distances. To simplify the code, d_buf and l_buf have
24069            * the same number of elements. To use different lengths, an extra flag
24070            * array would be necessary.
24071            */
24072
24073           this.opt_len = 0;       /* bit length of current block with optimal trees */
24074           this.static_len = 0;    /* bit length of current block with static trees */
24075           this.matches = 0;       /* number of string matches in current block */
24076           this.insert = 0;        /* bytes at end of window left to insert */
24077
24078
24079           this.bi_buf = 0;
24080           /* Output buffer. bits are inserted starting at the bottom (least
24081            * significant bits).
24082            */
24083           this.bi_valid = 0;
24084           /* Number of valid bits in bi_buf.  All bits above the last valid bit
24085            * are always zero.
24086            */
24087
24088           // Used for window memory init. We safely ignore it for JS. That makes
24089           // sense only for pointers and memory check tools.
24090           //this.high_water = 0;
24091           /* High water mark offset in window for initialized bytes -- bytes above
24092            * this are set to zero in order to avoid memory check warnings when
24093            * longest match routines access bytes past the input.  This is then
24094            * updated to the new high water mark.
24095            */
24096         }
24097
24098
24099         function deflateResetKeep(strm) {
24100           var s;
24101
24102           if (!strm || !strm.state) {
24103             return err(strm, Z_STREAM_ERROR);
24104           }
24105
24106           strm.total_in = strm.total_out = 0;
24107           strm.data_type = Z_UNKNOWN;
24108
24109           s = strm.state;
24110           s.pending = 0;
24111           s.pending_out = 0;
24112
24113           if (s.wrap < 0) {
24114             s.wrap = -s.wrap;
24115             /* was made negative by deflate(..., Z_FINISH); */
24116           }
24117           s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
24118           strm.adler = (s.wrap === 2) ?
24119             0  // crc32(0, Z_NULL, 0)
24120           :
24121             1; // adler32(0, Z_NULL, 0)
24122           s.last_flush = Z_NO_FLUSH;
24123           trees._tr_init(s);
24124           return Z_OK;
24125         }
24126
24127
24128         function deflateReset(strm) {
24129           var ret = deflateResetKeep(strm);
24130           if (ret === Z_OK) {
24131             lm_init(strm.state);
24132           }
24133           return ret;
24134         }
24135
24136
24137         function deflateSetHeader(strm, head) {
24138           if (!strm || !strm.state) { return Z_STREAM_ERROR; }
24139           if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
24140           strm.state.gzhead = head;
24141           return Z_OK;
24142         }
24143
24144
24145         function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
24146           if (!strm) { // === Z_NULL
24147             return Z_STREAM_ERROR;
24148           }
24149           var wrap = 1;
24150
24151           if (level === Z_DEFAULT_COMPRESSION) {
24152             level = 6;
24153           }
24154
24155           if (windowBits < 0) { /* suppress zlib wrapper */
24156             wrap = 0;
24157             windowBits = -windowBits;
24158           }
24159
24160           else if (windowBits > 15) {
24161             wrap = 2;           /* write gzip wrapper instead */
24162             windowBits -= 16;
24163           }
24164
24165
24166           if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
24167             windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
24168             strategy < 0 || strategy > Z_FIXED) {
24169             return err(strm, Z_STREAM_ERROR);
24170           }
24171
24172
24173           if (windowBits === 8) {
24174             windowBits = 9;
24175           }
24176           /* until 256-byte window bug fixed */
24177
24178           var s = new DeflateState();
24179
24180           strm.state = s;
24181           s.strm = strm;
24182
24183           s.wrap = wrap;
24184           s.gzhead = null;
24185           s.w_bits = windowBits;
24186           s.w_size = 1 << s.w_bits;
24187           s.w_mask = s.w_size - 1;
24188
24189           s.hash_bits = memLevel + 7;
24190           s.hash_size = 1 << s.hash_bits;
24191           s.hash_mask = s.hash_size - 1;
24192           s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
24193
24194           s.window = new utils.Buf8(s.w_size * 2);
24195           s.head = new utils.Buf16(s.hash_size);
24196           s.prev = new utils.Buf16(s.w_size);
24197
24198           // Don't need mem init magic for JS.
24199           //s.high_water = 0;  /* nothing written to s->window yet */
24200
24201           s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
24202
24203           s.pending_buf_size = s.lit_bufsize * 4;
24204           s.pending_buf = new utils.Buf8(s.pending_buf_size);
24205
24206           s.d_buf = s.lit_bufsize >> 1;
24207           s.l_buf = (1 + 2) * s.lit_bufsize;
24208
24209           s.level = level;
24210           s.strategy = strategy;
24211           s.method = method;
24212
24213           return deflateReset(strm);
24214         }
24215
24216         function deflateInit(strm, level) {
24217           return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
24218         }
24219
24220
24221         function deflate(strm, flush) {
24222           var old_flush, s;
24223           var beg, val; // for gzip header write only
24224
24225           if (!strm || !strm.state ||
24226             flush > Z_BLOCK || flush < 0) {
24227             return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
24228           }
24229
24230           s = strm.state;
24231
24232           if (!strm.output ||
24233               (!strm.input && strm.avail_in !== 0) ||
24234               (s.status === FINISH_STATE && flush !== Z_FINISH)) {
24235             return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
24236           }
24237
24238           s.strm = strm; /* just in case */
24239           old_flush = s.last_flush;
24240           s.last_flush = flush;
24241
24242           /* Write the header */
24243           if (s.status === INIT_STATE) {
24244
24245             if (s.wrap === 2) { // GZIP header
24246               strm.adler = 0;  //crc32(0L, Z_NULL, 0);
24247               put_byte(s, 31);
24248               put_byte(s, 139);
24249               put_byte(s, 8);
24250               if (!s.gzhead) { // s->gzhead == Z_NULL
24251                 put_byte(s, 0);
24252                 put_byte(s, 0);
24253                 put_byte(s, 0);
24254                 put_byte(s, 0);
24255                 put_byte(s, 0);
24256                 put_byte(s, s.level === 9 ? 2 :
24257                             (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
24258                              4 : 0));
24259                 put_byte(s, OS_CODE);
24260                 s.status = BUSY_STATE;
24261               }
24262               else {
24263                 put_byte(s, (s.gzhead.text ? 1 : 0) +
24264                             (s.gzhead.hcrc ? 2 : 0) +
24265                             (!s.gzhead.extra ? 0 : 4) +
24266                             (!s.gzhead.name ? 0 : 8) +
24267                             (!s.gzhead.comment ? 0 : 16)
24268                         );
24269                 put_byte(s, s.gzhead.time & 0xff);
24270                 put_byte(s, (s.gzhead.time >> 8) & 0xff);
24271                 put_byte(s, (s.gzhead.time >> 16) & 0xff);
24272                 put_byte(s, (s.gzhead.time >> 24) & 0xff);
24273                 put_byte(s, s.level === 9 ? 2 :
24274                             (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
24275                              4 : 0));
24276                 put_byte(s, s.gzhead.os & 0xff);
24277                 if (s.gzhead.extra && s.gzhead.extra.length) {
24278                   put_byte(s, s.gzhead.extra.length & 0xff);
24279                   put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
24280                 }
24281                 if (s.gzhead.hcrc) {
24282                   strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
24283                 }
24284                 s.gzindex = 0;
24285                 s.status = EXTRA_STATE;
24286               }
24287             }
24288             else // DEFLATE header
24289             {
24290               var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
24291               var level_flags = -1;
24292
24293               if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
24294                 level_flags = 0;
24295               } else if (s.level < 6) {
24296                 level_flags = 1;
24297               } else if (s.level === 6) {
24298                 level_flags = 2;
24299               } else {
24300                 level_flags = 3;
24301               }
24302               header |= (level_flags << 6);
24303               if (s.strstart !== 0) { header |= PRESET_DICT; }
24304               header += 31 - (header % 31);
24305
24306               s.status = BUSY_STATE;
24307               putShortMSB(s, header);
24308
24309               /* Save the adler32 of the preset dictionary: */
24310               if (s.strstart !== 0) {
24311                 putShortMSB(s, strm.adler >>> 16);
24312                 putShortMSB(s, strm.adler & 0xffff);
24313               }
24314               strm.adler = 1; // adler32(0L, Z_NULL, 0);
24315             }
24316           }
24317
24318         //#ifdef GZIP
24319           if (s.status === EXTRA_STATE) {
24320             if (s.gzhead.extra/* != Z_NULL*/) {
24321               beg = s.pending;  /* start of bytes to update crc */
24322
24323               while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
24324                 if (s.pending === s.pending_buf_size) {
24325                   if (s.gzhead.hcrc && s.pending > beg) {
24326                     strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
24327                   }
24328                   flush_pending(strm);
24329                   beg = s.pending;
24330                   if (s.pending === s.pending_buf_size) {
24331                     break;
24332                   }
24333                 }
24334                 put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
24335                 s.gzindex++;
24336               }
24337               if (s.gzhead.hcrc && s.pending > beg) {
24338                 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
24339               }
24340               if (s.gzindex === s.gzhead.extra.length) {
24341                 s.gzindex = 0;
24342                 s.status = NAME_STATE;
24343               }
24344             }
24345             else {
24346               s.status = NAME_STATE;
24347             }
24348           }
24349           if (s.status === NAME_STATE) {
24350             if (s.gzhead.name/* != Z_NULL*/) {
24351               beg = s.pending;  /* start of bytes to update crc */
24352               //int val;
24353
24354               do {
24355                 if (s.pending === s.pending_buf_size) {
24356                   if (s.gzhead.hcrc && s.pending > beg) {
24357                     strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
24358                   }
24359                   flush_pending(strm);
24360                   beg = s.pending;
24361                   if (s.pending === s.pending_buf_size) {
24362                     val = 1;
24363                     break;
24364                   }
24365                 }
24366                 // JS specific: little magic to add zero terminator to end of string
24367                 if (s.gzindex < s.gzhead.name.length) {
24368                   val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
24369                 } else {
24370                   val = 0;
24371                 }
24372                 put_byte(s, val);
24373               } while (val !== 0);
24374
24375               if (s.gzhead.hcrc && s.pending > beg) {
24376                 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
24377               }
24378               if (val === 0) {
24379                 s.gzindex = 0;
24380                 s.status = COMMENT_STATE;
24381               }
24382             }
24383             else {
24384               s.status = COMMENT_STATE;
24385             }
24386           }
24387           if (s.status === COMMENT_STATE) {
24388             if (s.gzhead.comment/* != Z_NULL*/) {
24389               beg = s.pending;  /* start of bytes to update crc */
24390               //int val;
24391
24392               do {
24393                 if (s.pending === s.pending_buf_size) {
24394                   if (s.gzhead.hcrc && s.pending > beg) {
24395                     strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
24396                   }
24397                   flush_pending(strm);
24398                   beg = s.pending;
24399                   if (s.pending === s.pending_buf_size) {
24400                     val = 1;
24401                     break;
24402                   }
24403                 }
24404                 // JS specific: little magic to add zero terminator to end of string
24405                 if (s.gzindex < s.gzhead.comment.length) {
24406                   val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
24407                 } else {
24408                   val = 0;
24409                 }
24410                 put_byte(s, val);
24411               } while (val !== 0);
24412
24413               if (s.gzhead.hcrc && s.pending > beg) {
24414                 strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
24415               }
24416               if (val === 0) {
24417                 s.status = HCRC_STATE;
24418               }
24419             }
24420             else {
24421               s.status = HCRC_STATE;
24422             }
24423           }
24424           if (s.status === HCRC_STATE) {
24425             if (s.gzhead.hcrc) {
24426               if (s.pending + 2 > s.pending_buf_size) {
24427                 flush_pending(strm);
24428               }
24429               if (s.pending + 2 <= s.pending_buf_size) {
24430                 put_byte(s, strm.adler & 0xff);
24431                 put_byte(s, (strm.adler >> 8) & 0xff);
24432                 strm.adler = 0; //crc32(0L, Z_NULL, 0);
24433                 s.status = BUSY_STATE;
24434               }
24435             }
24436             else {
24437               s.status = BUSY_STATE;
24438             }
24439           }
24440         //#endif
24441
24442           /* Flush as much pending output as possible */
24443           if (s.pending !== 0) {
24444             flush_pending(strm);
24445             if (strm.avail_out === 0) {
24446               /* Since avail_out is 0, deflate will be called again with
24447                * more output space, but possibly with both pending and
24448                * avail_in equal to zero. There won't be anything to do,
24449                * but this is not an error situation so make sure we
24450                * return OK instead of BUF_ERROR at next call of deflate:
24451                */
24452               s.last_flush = -1;
24453               return Z_OK;
24454             }
24455
24456             /* Make sure there is something to do and avoid duplicate consecutive
24457              * flushes. For repeated and useless calls with Z_FINISH, we keep
24458              * returning Z_STREAM_END instead of Z_BUF_ERROR.
24459              */
24460           } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
24461             flush !== Z_FINISH) {
24462             return err(strm, Z_BUF_ERROR);
24463           }
24464
24465           /* User must not provide more input after the first FINISH: */
24466           if (s.status === FINISH_STATE && strm.avail_in !== 0) {
24467             return err(strm, Z_BUF_ERROR);
24468           }
24469
24470           /* Start a new block or continue the current one.
24471            */
24472           if (strm.avail_in !== 0 || s.lookahead !== 0 ||
24473             (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
24474             var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
24475               (s.strategy === Z_RLE ? deflate_rle(s, flush) :
24476                 configuration_table[s.level].func(s, flush));
24477
24478             if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
24479               s.status = FINISH_STATE;
24480             }
24481             if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
24482               if (strm.avail_out === 0) {
24483                 s.last_flush = -1;
24484                 /* avoid BUF_ERROR next call, see above */
24485               }
24486               return Z_OK;
24487               /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
24488                * of deflate should use the same flush parameter to make sure
24489                * that the flush is complete. So we don't have to output an
24490                * empty block here, this will be done at next call. This also
24491                * ensures that for a very small output buffer, we emit at most
24492                * one empty block.
24493                */
24494             }
24495             if (bstate === BS_BLOCK_DONE) {
24496               if (flush === Z_PARTIAL_FLUSH) {
24497                 trees._tr_align(s);
24498               }
24499               else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
24500
24501                 trees._tr_stored_block(s, 0, 0, false);
24502                 /* For a full flush, this empty block will be recognized
24503                  * as a special marker by inflate_sync().
24504                  */
24505                 if (flush === Z_FULL_FLUSH) {
24506                   /*** CLEAR_HASH(s); ***/             /* forget history */
24507                   zero(s.head); // Fill with NIL (= 0);
24508
24509                   if (s.lookahead === 0) {
24510                     s.strstart = 0;
24511                     s.block_start = 0;
24512                     s.insert = 0;
24513                   }
24514                 }
24515               }
24516               flush_pending(strm);
24517               if (strm.avail_out === 0) {
24518                 s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
24519                 return Z_OK;
24520               }
24521             }
24522           }
24523           //Assert(strm->avail_out > 0, "bug2");
24524           //if (strm.avail_out <= 0) { throw new Error("bug2");}
24525
24526           if (flush !== Z_FINISH) { return Z_OK; }
24527           if (s.wrap <= 0) { return Z_STREAM_END; }
24528
24529           /* Write the trailer */
24530           if (s.wrap === 2) {
24531             put_byte(s, strm.adler & 0xff);
24532             put_byte(s, (strm.adler >> 8) & 0xff);
24533             put_byte(s, (strm.adler >> 16) & 0xff);
24534             put_byte(s, (strm.adler >> 24) & 0xff);
24535             put_byte(s, strm.total_in & 0xff);
24536             put_byte(s, (strm.total_in >> 8) & 0xff);
24537             put_byte(s, (strm.total_in >> 16) & 0xff);
24538             put_byte(s, (strm.total_in >> 24) & 0xff);
24539           }
24540           else
24541           {
24542             putShortMSB(s, strm.adler >>> 16);
24543             putShortMSB(s, strm.adler & 0xffff);
24544           }
24545
24546           flush_pending(strm);
24547           /* If avail_out is zero, the application will call deflate again
24548            * to flush the rest.
24549            */
24550           if (s.wrap > 0) { s.wrap = -s.wrap; }
24551           /* write the trailer only once! */
24552           return s.pending !== 0 ? Z_OK : Z_STREAM_END;
24553         }
24554
24555         function deflateEnd(strm) {
24556           var status;
24557
24558           if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
24559             return Z_STREAM_ERROR;
24560           }
24561
24562           status = strm.state.status;
24563           if (status !== INIT_STATE &&
24564             status !== EXTRA_STATE &&
24565             status !== NAME_STATE &&
24566             status !== COMMENT_STATE &&
24567             status !== HCRC_STATE &&
24568             status !== BUSY_STATE &&
24569             status !== FINISH_STATE
24570           ) {
24571             return err(strm, Z_STREAM_ERROR);
24572           }
24573
24574           strm.state = null;
24575
24576           return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
24577         }
24578
24579         /* =========================================================================
24580          * Copy the source state to the destination state
24581          */
24582         //function deflateCopy(dest, source) {
24583         //
24584         //}
24585
24586         exports.deflateInit = deflateInit;
24587         exports.deflateInit2 = deflateInit2;
24588         exports.deflateReset = deflateReset;
24589         exports.deflateResetKeep = deflateResetKeep;
24590         exports.deflateSetHeader = deflateSetHeader;
24591         exports.deflate = deflate;
24592         exports.deflateEnd = deflateEnd;
24593         exports.deflateInfo = 'pako deflate (from Nodeca project)';
24594
24595         /* Not implemented
24596         exports.deflateBound = deflateBound;
24597         exports.deflateCopy = deflateCopy;
24598         exports.deflateSetDictionary = deflateSetDictionary;
24599         exports.deflateParams = deflateParams;
24600         exports.deflatePending = deflatePending;
24601         exports.deflatePrime = deflatePrime;
24602         exports.deflateTune = deflateTune;
24603         */
24604
24605
24606 /***/ },
24607 /* 52 */
24608 /***/ function(module, exports) {
24609
24610         'use strict';
24611
24612
24613         var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
24614                         (typeof Uint16Array !== 'undefined') &&
24615                         (typeof Int32Array !== 'undefined');
24616
24617
24618         exports.assign = function (obj /*from1, from2, from3, ...*/) {
24619           var sources = Array.prototype.slice.call(arguments, 1);
24620           while (sources.length) {
24621             var source = sources.shift();
24622             if (!source) { continue; }
24623
24624             if (typeof source !== 'object') {
24625               throw new TypeError(source + 'must be non-object');
24626             }
24627
24628             for (var p in source) {
24629               if (source.hasOwnProperty(p)) {
24630                 obj[p] = source[p];
24631               }
24632             }
24633           }
24634
24635           return obj;
24636         };
24637
24638
24639         // reduce buffer size, avoiding mem copy
24640         exports.shrinkBuf = function (buf, size) {
24641           if (buf.length === size) { return buf; }
24642           if (buf.subarray) { return buf.subarray(0, size); }
24643           buf.length = size;
24644           return buf;
24645         };
24646
24647
24648         var fnTyped = {
24649           arraySet: function (dest, src, src_offs, len, dest_offs) {
24650             if (src.subarray && dest.subarray) {
24651               dest.set(src.subarray(src_offs, src_offs+len), dest_offs);
24652               return;
24653             }
24654             // Fallback to ordinary array
24655             for (var i=0; i<len; i++) {
24656               dest[dest_offs + i] = src[src_offs + i];
24657             }
24658           },
24659           // Join array of chunks to single array.
24660           flattenChunks: function(chunks) {
24661             var i, l, len, pos, chunk, result;
24662
24663             // calculate data length
24664             len = 0;
24665             for (i=0, l=chunks.length; i<l; i++) {
24666               len += chunks[i].length;
24667             }
24668
24669             // join chunks
24670             result = new Uint8Array(len);
24671             pos = 0;
24672             for (i=0, l=chunks.length; i<l; i++) {
24673               chunk = chunks[i];
24674               result.set(chunk, pos);
24675               pos += chunk.length;
24676             }
24677
24678             return result;
24679           }
24680         };
24681
24682         var fnUntyped = {
24683           arraySet: function (dest, src, src_offs, len, dest_offs) {
24684             for (var i=0; i<len; i++) {
24685               dest[dest_offs + i] = src[src_offs + i];
24686             }
24687           },
24688           // Join array of chunks to single array.
24689           flattenChunks: function(chunks) {
24690             return [].concat.apply([], chunks);
24691           }
24692         };
24693
24694
24695         // Enable/Disable typed arrays use, for testing
24696         //
24697         exports.setTyped = function (on) {
24698           if (on) {
24699             exports.Buf8  = Uint8Array;
24700             exports.Buf16 = Uint16Array;
24701             exports.Buf32 = Int32Array;
24702             exports.assign(exports, fnTyped);
24703           } else {
24704             exports.Buf8  = Array;
24705             exports.Buf16 = Array;
24706             exports.Buf32 = Array;
24707             exports.assign(exports, fnUntyped);
24708           }
24709         };
24710
24711         exports.setTyped(TYPED_OK);
24712
24713
24714 /***/ },
24715 /* 53 */
24716 /***/ function(module, exports, __webpack_require__) {
24717
24718         'use strict';
24719
24720
24721         var utils = __webpack_require__(52);
24722
24723         /* Public constants ==========================================================*/
24724         /* ===========================================================================*/
24725
24726
24727         //var Z_FILTERED          = 1;
24728         //var Z_HUFFMAN_ONLY      = 2;
24729         //var Z_RLE               = 3;
24730         var Z_FIXED               = 4;
24731         //var Z_DEFAULT_STRATEGY  = 0;
24732
24733         /* Possible values of the data_type field (though see inflate()) */
24734         var Z_BINARY              = 0;
24735         var Z_TEXT                = 1;
24736         //var Z_ASCII             = 1; // = Z_TEXT
24737         var Z_UNKNOWN             = 2;
24738
24739         /*============================================================================*/
24740
24741
24742         function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
24743
24744         // From zutil.h
24745
24746         var STORED_BLOCK = 0;
24747         var STATIC_TREES = 1;
24748         var DYN_TREES    = 2;
24749         /* The three kinds of block type */
24750
24751         var MIN_MATCH    = 3;
24752         var MAX_MATCH    = 258;
24753         /* The minimum and maximum match lengths */
24754
24755         // From deflate.h
24756         /* ===========================================================================
24757          * Internal compression state.
24758          */
24759
24760         var LENGTH_CODES  = 29;
24761         /* number of length codes, not counting the special END_BLOCK code */
24762
24763         var LITERALS      = 256;
24764         /* number of literal bytes 0..255 */
24765
24766         var L_CODES       = LITERALS + 1 + LENGTH_CODES;
24767         /* number of Literal or Length codes, including the END_BLOCK code */
24768
24769         var D_CODES       = 30;
24770         /* number of distance codes */
24771
24772         var BL_CODES      = 19;
24773         /* number of codes used to transfer the bit lengths */
24774
24775         var HEAP_SIZE     = 2*L_CODES + 1;
24776         /* maximum heap size */
24777
24778         var MAX_BITS      = 15;
24779         /* All codes must not exceed MAX_BITS bits */
24780
24781         var Buf_size      = 16;
24782         /* size of bit buffer in bi_buf */
24783
24784
24785         /* ===========================================================================
24786          * Constants
24787          */
24788
24789         var MAX_BL_BITS = 7;
24790         /* Bit length codes must not exceed MAX_BL_BITS bits */
24791
24792         var END_BLOCK   = 256;
24793         /* end of block literal code */
24794
24795         var REP_3_6     = 16;
24796         /* repeat previous bit length 3-6 times (2 bits of repeat count) */
24797
24798         var REPZ_3_10   = 17;
24799         /* repeat a zero length 3-10 times  (3 bits of repeat count) */
24800
24801         var REPZ_11_138 = 18;
24802         /* repeat a zero length 11-138 times  (7 bits of repeat count) */
24803
24804         var extra_lbits =   /* extra bits for each length code */
24805           [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
24806
24807         var extra_dbits =   /* extra bits for each distance code */
24808           [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
24809
24810         var extra_blbits =  /* extra bits for each bit length code */
24811           [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
24812
24813         var bl_order =
24814           [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
24815         /* The lengths of the bit length codes are sent in order of decreasing
24816          * probability, to avoid transmitting the lengths for unused bit length codes.
24817          */
24818
24819         /* ===========================================================================
24820          * Local data. These are initialized only once.
24821          */
24822
24823         // We pre-fill arrays with 0 to avoid uninitialized gaps
24824
24825         var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
24826
24827         // !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1
24828         var static_ltree  = new Array((L_CODES+2) * 2);
24829         zero(static_ltree);
24830         /* The static literal tree. Since the bit lengths are imposed, there is no
24831          * need for the L_CODES extra codes used during heap construction. However
24832          * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
24833          * below).
24834          */
24835
24836         var static_dtree  = new Array(D_CODES * 2);
24837         zero(static_dtree);
24838         /* The static distance tree. (Actually a trivial tree since all codes use
24839          * 5 bits.)
24840          */
24841
24842         var _dist_code    = new Array(DIST_CODE_LEN);
24843         zero(_dist_code);
24844         /* Distance codes. The first 256 values correspond to the distances
24845          * 3 .. 258, the last 256 values correspond to the top 8 bits of
24846          * the 15 bit distances.
24847          */
24848
24849         var _length_code  = new Array(MAX_MATCH-MIN_MATCH+1);
24850         zero(_length_code);
24851         /* length code for each normalized match length (0 == MIN_MATCH) */
24852
24853         var base_length   = new Array(LENGTH_CODES);
24854         zero(base_length);
24855         /* First normalized length for each code (0 = MIN_MATCH) */
24856
24857         var base_dist     = new Array(D_CODES);
24858         zero(base_dist);
24859         /* First normalized distance for each code (0 = distance of 1) */
24860
24861
24862         var StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {
24863
24864           this.static_tree  = static_tree;  /* static tree or NULL */
24865           this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
24866           this.extra_base   = extra_base;   /* base index for extra_bits */
24867           this.elems        = elems;        /* max number of elements in the tree */
24868           this.max_length   = max_length;   /* max bit length for the codes */
24869
24870           // show if `static_tree` has data or dummy - needed for monomorphic objects
24871           this.has_stree    = static_tree && static_tree.length;
24872         };
24873
24874
24875         var static_l_desc;
24876         var static_d_desc;
24877         var static_bl_desc;
24878
24879
24880         var TreeDesc = function(dyn_tree, stat_desc) {
24881           this.dyn_tree = dyn_tree;     /* the dynamic tree */
24882           this.max_code = 0;            /* largest code with non zero frequency */
24883           this.stat_desc = stat_desc;   /* the corresponding static tree */
24884         };
24885
24886
24887
24888         function d_code(dist) {
24889           return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
24890         }
24891
24892
24893         /* ===========================================================================
24894          * Output a short LSB first on the stream.
24895          * IN assertion: there is enough room in pendingBuf.
24896          */
24897         function put_short (s, w) {
24898         //    put_byte(s, (uch)((w) & 0xff));
24899         //    put_byte(s, (uch)((ush)(w) >> 8));
24900           s.pending_buf[s.pending++] = (w) & 0xff;
24901           s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
24902         }
24903
24904
24905         /* ===========================================================================
24906          * Send a value on a given number of bits.
24907          * IN assertion: length <= 16 and value fits in length bits.
24908          */
24909         function send_bits(s, value, length) {
24910           if (s.bi_valid > (Buf_size - length)) {
24911             s.bi_buf |= (value << s.bi_valid) & 0xffff;
24912             put_short(s, s.bi_buf);
24913             s.bi_buf = value >> (Buf_size - s.bi_valid);
24914             s.bi_valid += length - Buf_size;
24915           } else {
24916             s.bi_buf |= (value << s.bi_valid) & 0xffff;
24917             s.bi_valid += length;
24918           }
24919         }
24920
24921
24922         function send_code(s, c, tree) {
24923           send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);
24924         }
24925
24926
24927         /* ===========================================================================
24928          * Reverse the first len bits of a code, using straightforward code (a faster
24929          * method would use a table)
24930          * IN assertion: 1 <= len <= 15
24931          */
24932         function bi_reverse(code, len) {
24933           var res = 0;
24934           do {
24935             res |= code & 1;
24936             code >>>= 1;
24937             res <<= 1;
24938           } while (--len > 0);
24939           return res >>> 1;
24940         }
24941
24942
24943         /* ===========================================================================
24944          * Flush the bit buffer, keeping at most 7 bits in it.
24945          */
24946         function bi_flush(s) {
24947           if (s.bi_valid === 16) {
24948             put_short(s, s.bi_buf);
24949             s.bi_buf = 0;
24950             s.bi_valid = 0;
24951
24952           } else if (s.bi_valid >= 8) {
24953             s.pending_buf[s.pending++] = s.bi_buf & 0xff;
24954             s.bi_buf >>= 8;
24955             s.bi_valid -= 8;
24956           }
24957         }
24958
24959
24960         /* ===========================================================================
24961          * Compute the optimal bit lengths for a tree and update the total bit length
24962          * for the current block.
24963          * IN assertion: the fields freq and dad are set, heap[heap_max] and
24964          *    above are the tree nodes sorted by increasing frequency.
24965          * OUT assertions: the field len is set to the optimal bit length, the
24966          *     array bl_count contains the frequencies for each bit length.
24967          *     The length opt_len is updated; static_len is also updated if stree is
24968          *     not null.
24969          */
24970         function gen_bitlen(s, desc)
24971         //    deflate_state *s;
24972         //    tree_desc *desc;    /* the tree descriptor */
24973         {
24974           var tree            = desc.dyn_tree;
24975           var max_code        = desc.max_code;
24976           var stree           = desc.stat_desc.static_tree;
24977           var has_stree       = desc.stat_desc.has_stree;
24978           var extra           = desc.stat_desc.extra_bits;
24979           var base            = desc.stat_desc.extra_base;
24980           var max_length      = desc.stat_desc.max_length;
24981           var h;              /* heap index */
24982           var n, m;           /* iterate over the tree elements */
24983           var bits;           /* bit length */
24984           var xbits;          /* extra bits */
24985           var f;              /* frequency */
24986           var overflow = 0;   /* number of elements with bit length too large */
24987
24988           for (bits = 0; bits <= MAX_BITS; bits++) {
24989             s.bl_count[bits] = 0;
24990           }
24991
24992           /* In a first pass, compute the optimal bit lengths (which may
24993            * overflow in the case of the bit length tree).
24994            */
24995           tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */
24996
24997           for (h = s.heap_max+1; h < HEAP_SIZE; h++) {
24998             n = s.heap[h];
24999             bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
25000             if (bits > max_length) {
25001               bits = max_length;
25002               overflow++;
25003             }
25004             tree[n*2 + 1]/*.Len*/ = bits;
25005             /* We overwrite tree[n].Dad which is no longer needed */
25006
25007             if (n > max_code) { continue; } /* not a leaf node */
25008
25009             s.bl_count[bits]++;
25010             xbits = 0;
25011             if (n >= base) {
25012               xbits = extra[n-base];
25013             }
25014             f = tree[n * 2]/*.Freq*/;
25015             s.opt_len += f * (bits + xbits);
25016             if (has_stree) {
25017               s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);
25018             }
25019           }
25020           if (overflow === 0) { return; }
25021
25022           // Trace((stderr,"\nbit length overflow\n"));
25023           /* This happens for example on obj2 and pic of the Calgary corpus */
25024
25025           /* Find the first bit length which could increase: */
25026           do {
25027             bits = max_length-1;
25028             while (s.bl_count[bits] === 0) { bits--; }
25029             s.bl_count[bits]--;      /* move one leaf down the tree */
25030             s.bl_count[bits+1] += 2; /* move one overflow item as its brother */
25031             s.bl_count[max_length]--;
25032             /* The brother of the overflow item also moves one step up,
25033              * but this does not affect bl_count[max_length]
25034              */
25035             overflow -= 2;
25036           } while (overflow > 0);
25037
25038           /* Now recompute all bit lengths, scanning in increasing frequency.
25039            * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
25040            * lengths instead of fixing only the wrong ones. This idea is taken
25041            * from 'ar' written by Haruhiko Okumura.)
25042            */
25043           for (bits = max_length; bits !== 0; bits--) {
25044             n = s.bl_count[bits];
25045             while (n !== 0) {
25046               m = s.heap[--h];
25047               if (m > max_code) { continue; }
25048               if (tree[m*2 + 1]/*.Len*/ !== bits) {
25049                 // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
25050                 s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;
25051                 tree[m*2 + 1]/*.Len*/ = bits;
25052               }
25053               n--;
25054             }
25055           }
25056         }
25057
25058
25059         /* ===========================================================================
25060          * Generate the codes for a given tree and bit counts (which need not be
25061          * optimal).
25062          * IN assertion: the array bl_count contains the bit length statistics for
25063          * the given tree and the field len is set for all tree elements.
25064          * OUT assertion: the field code is set for all tree elements of non
25065          *     zero code length.
25066          */
25067         function gen_codes(tree, max_code, bl_count)
25068         //    ct_data *tree;             /* the tree to decorate */
25069         //    int max_code;              /* largest code with non zero frequency */
25070         //    ushf *bl_count;            /* number of codes at each bit length */
25071         {
25072           var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */
25073           var code = 0;              /* running code value */
25074           var bits;                  /* bit index */
25075           var n;                     /* code index */
25076
25077           /* The distribution counts are first used to generate the code values
25078            * without bit reversal.
25079            */
25080           for (bits = 1; bits <= MAX_BITS; bits++) {
25081             next_code[bits] = code = (code + bl_count[bits-1]) << 1;
25082           }
25083           /* Check that the bit counts in bl_count are consistent. The last code
25084            * must be all ones.
25085            */
25086           //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
25087           //        "inconsistent bit counts");
25088           //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
25089
25090           for (n = 0;  n <= max_code; n++) {
25091             var len = tree[n*2 + 1]/*.Len*/;
25092             if (len === 0) { continue; }
25093             /* Now reverse the bits */
25094             tree[n*2]/*.Code*/ = bi_reverse(next_code[len]++, len);
25095
25096             //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
25097             //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
25098           }
25099         }
25100
25101
25102         /* ===========================================================================
25103          * Initialize the various 'constant' tables.
25104          */
25105         function tr_static_init() {
25106           var n;        /* iterates over tree elements */
25107           var bits;     /* bit counter */
25108           var length;   /* length value */
25109           var code;     /* code value */
25110           var dist;     /* distance index */
25111           var bl_count = new Array(MAX_BITS+1);
25112           /* number of codes at each bit length for an optimal tree */
25113
25114           // do check in _tr_init()
25115           //if (static_init_done) return;
25116
25117           /* For some embedded targets, global variables are not initialized: */
25118         /*#ifdef NO_INIT_GLOBAL_POINTERS
25119           static_l_desc.static_tree = static_ltree;
25120           static_l_desc.extra_bits = extra_lbits;
25121           static_d_desc.static_tree = static_dtree;
25122           static_d_desc.extra_bits = extra_dbits;
25123           static_bl_desc.extra_bits = extra_blbits;
25124         #endif*/
25125
25126           /* Initialize the mapping length (0..255) -> length code (0..28) */
25127           length = 0;
25128           for (code = 0; code < LENGTH_CODES-1; code++) {
25129             base_length[code] = length;
25130             for (n = 0; n < (1<<extra_lbits[code]); n++) {
25131               _length_code[length++] = code;
25132             }
25133           }
25134           //Assert (length == 256, "tr_static_init: length != 256");
25135           /* Note that the length 255 (match length 258) can be represented
25136            * in two different ways: code 284 + 5 bits or code 285, so we
25137            * overwrite length_code[255] to use the best encoding:
25138            */
25139           _length_code[length-1] = code;
25140
25141           /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
25142           dist = 0;
25143           for (code = 0 ; code < 16; code++) {
25144             base_dist[code] = dist;
25145             for (n = 0; n < (1<<extra_dbits[code]); n++) {
25146               _dist_code[dist++] = code;
25147             }
25148           }
25149           //Assert (dist == 256, "tr_static_init: dist != 256");
25150           dist >>= 7; /* from now on, all distances are divided by 128 */
25151           for (; code < D_CODES; code++) {
25152             base_dist[code] = dist << 7;
25153             for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
25154               _dist_code[256 + dist++] = code;
25155             }
25156           }
25157           //Assert (dist == 256, "tr_static_init: 256+dist != 512");
25158
25159           /* Construct the codes of the static literal tree */
25160           for (bits = 0; bits <= MAX_BITS; bits++) {
25161             bl_count[bits] = 0;
25162           }
25163
25164           n = 0;
25165           while (n <= 143) {
25166             static_ltree[n*2 + 1]/*.Len*/ = 8;
25167             n++;
25168             bl_count[8]++;
25169           }
25170           while (n <= 255) {
25171             static_ltree[n*2 + 1]/*.Len*/ = 9;
25172             n++;
25173             bl_count[9]++;
25174           }
25175           while (n <= 279) {
25176             static_ltree[n*2 + 1]/*.Len*/ = 7;
25177             n++;
25178             bl_count[7]++;
25179           }
25180           while (n <= 287) {
25181             static_ltree[n*2 + 1]/*.Len*/ = 8;
25182             n++;
25183             bl_count[8]++;
25184           }
25185           /* Codes 286 and 287 do not exist, but we must include them in the
25186            * tree construction to get a canonical Huffman tree (longest code
25187            * all ones)
25188            */
25189           gen_codes(static_ltree, L_CODES+1, bl_count);
25190
25191           /* The static distance tree is trivial: */
25192           for (n = 0; n < D_CODES; n++) {
25193             static_dtree[n*2 + 1]/*.Len*/ = 5;
25194             static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);
25195           }
25196
25197           // Now data ready and we can init static trees
25198           static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);
25199           static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
25200           static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);
25201
25202           //static_init_done = true;
25203         }
25204
25205
25206         /* ===========================================================================
25207          * Initialize a new block.
25208          */
25209         function init_block(s) {
25210           var n; /* iterates over tree elements */
25211
25212           /* Initialize the trees. */
25213           for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }
25214           for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }
25215           for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }
25216
25217           s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;
25218           s.opt_len = s.static_len = 0;
25219           s.last_lit = s.matches = 0;
25220         }
25221
25222
25223         /* ===========================================================================
25224          * Flush the bit buffer and align the output on a byte boundary
25225          */
25226         function bi_windup(s)
25227         {
25228           if (s.bi_valid > 8) {
25229             put_short(s, s.bi_buf);
25230           } else if (s.bi_valid > 0) {
25231             //put_byte(s, (Byte)s->bi_buf);
25232             s.pending_buf[s.pending++] = s.bi_buf;
25233           }
25234           s.bi_buf = 0;
25235           s.bi_valid = 0;
25236         }
25237
25238         /* ===========================================================================
25239          * Copy a stored block, storing first the length and its
25240          * one's complement if requested.
25241          */
25242         function copy_block(s, buf, len, header)
25243         //DeflateState *s;
25244         //charf    *buf;    /* the input data */
25245         //unsigned len;     /* its length */
25246         //int      header;  /* true if block header must be written */
25247         {
25248           bi_windup(s);        /* align on byte boundary */
25249
25250           if (header) {
25251             put_short(s, len);
25252             put_short(s, ~len);
25253           }
25254         //  while (len--) {
25255         //    put_byte(s, *buf++);
25256         //  }
25257           utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
25258           s.pending += len;
25259         }
25260
25261         /* ===========================================================================
25262          * Compares to subtrees, using the tree depth as tie breaker when
25263          * the subtrees have equal frequency. This minimizes the worst case length.
25264          */
25265         function smaller(tree, n, m, depth) {
25266           var _n2 = n*2;
25267           var _m2 = m*2;
25268           return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
25269                  (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
25270         }
25271
25272         /* ===========================================================================
25273          * Restore the heap property by moving down the tree starting at node k,
25274          * exchanging a node with the smallest of its two sons if necessary, stopping
25275          * when the heap property is re-established (each father smaller than its
25276          * two sons).
25277          */
25278         function pqdownheap(s, tree, k)
25279         //    deflate_state *s;
25280         //    ct_data *tree;  /* the tree to restore */
25281         //    int k;               /* node to move down */
25282         {
25283           var v = s.heap[k];
25284           var j = k << 1;  /* left son of k */
25285           while (j <= s.heap_len) {
25286             /* Set j to the smallest of the two sons: */
25287             if (j < s.heap_len &&
25288               smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {
25289               j++;
25290             }
25291             /* Exit if v is smaller than both sons */
25292             if (smaller(tree, v, s.heap[j], s.depth)) { break; }
25293
25294             /* Exchange v with the smallest son */
25295             s.heap[k] = s.heap[j];
25296             k = j;
25297
25298             /* And continue down the tree, setting j to the left son of k */
25299             j <<= 1;
25300           }
25301           s.heap[k] = v;
25302         }
25303
25304
25305         // inlined manually
25306         // var SMALLEST = 1;
25307
25308         /* ===========================================================================
25309          * Send the block data compressed using the given Huffman trees
25310          */
25311         function compress_block(s, ltree, dtree)
25312         //    deflate_state *s;
25313         //    const ct_data *ltree; /* literal tree */
25314         //    const ct_data *dtree; /* distance tree */
25315         {
25316           var dist;           /* distance of matched string */
25317           var lc;             /* match length or unmatched char (if dist == 0) */
25318           var lx = 0;         /* running index in l_buf */
25319           var code;           /* the code to send */
25320           var extra;          /* number of extra bits to send */
25321
25322           if (s.last_lit !== 0) {
25323             do {
25324               dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);
25325               lc = s.pending_buf[s.l_buf + lx];
25326               lx++;
25327
25328               if (dist === 0) {
25329                 send_code(s, lc, ltree); /* send a literal byte */
25330                 //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
25331               } else {
25332                 /* Here, lc is the match length - MIN_MATCH */
25333                 code = _length_code[lc];
25334                 send_code(s, code+LITERALS+1, ltree); /* send the length code */
25335                 extra = extra_lbits[code];
25336                 if (extra !== 0) {
25337                   lc -= base_length[code];
25338                   send_bits(s, lc, extra);       /* send the extra length bits */
25339                 }
25340                 dist--; /* dist is now the match distance - 1 */
25341                 code = d_code(dist);
25342                 //Assert (code < D_CODES, "bad d_code");
25343
25344                 send_code(s, code, dtree);       /* send the distance code */
25345                 extra = extra_dbits[code];
25346                 if (extra !== 0) {
25347                   dist -= base_dist[code];
25348                   send_bits(s, dist, extra);   /* send the extra distance bits */
25349                 }
25350               } /* literal or match pair ? */
25351
25352               /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
25353               //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
25354               //       "pendingBuf overflow");
25355
25356             } while (lx < s.last_lit);
25357           }
25358
25359           send_code(s, END_BLOCK, ltree);
25360         }
25361
25362
25363         /* ===========================================================================
25364          * Construct one Huffman tree and assigns the code bit strings and lengths.
25365          * Update the total bit length for the current block.
25366          * IN assertion: the field freq is set for all tree elements.
25367          * OUT assertions: the fields len and code are set to the optimal bit length
25368          *     and corresponding code. The length opt_len is updated; static_len is
25369          *     also updated if stree is not null. The field max_code is set.
25370          */
25371         function build_tree(s, desc)
25372         //    deflate_state *s;
25373         //    tree_desc *desc; /* the tree descriptor */
25374         {
25375           var tree     = desc.dyn_tree;
25376           var stree    = desc.stat_desc.static_tree;
25377           var has_stree = desc.stat_desc.has_stree;
25378           var elems    = desc.stat_desc.elems;
25379           var n, m;          /* iterate over heap elements */
25380           var max_code = -1; /* largest code with non zero frequency */
25381           var node;          /* new node being created */
25382
25383           /* Construct the initial heap, with least frequent element in
25384            * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
25385            * heap[0] is not used.
25386            */
25387           s.heap_len = 0;
25388           s.heap_max = HEAP_SIZE;
25389
25390           for (n = 0; n < elems; n++) {
25391             if (tree[n * 2]/*.Freq*/ !== 0) {
25392               s.heap[++s.heap_len] = max_code = n;
25393               s.depth[n] = 0;
25394
25395             } else {
25396               tree[n*2 + 1]/*.Len*/ = 0;
25397             }
25398           }
25399
25400           /* The pkzip format requires that at least one distance code exists,
25401            * and that at least one bit should be sent even if there is only one
25402            * possible code. So to avoid special checks later on we force at least
25403            * two codes of non zero frequency.
25404            */
25405           while (s.heap_len < 2) {
25406             node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
25407             tree[node * 2]/*.Freq*/ = 1;
25408             s.depth[node] = 0;
25409             s.opt_len--;
25410
25411             if (has_stree) {
25412               s.static_len -= stree[node*2 + 1]/*.Len*/;
25413             }
25414             /* node is 0 or 1 so it does not have extra bits */
25415           }
25416           desc.max_code = max_code;
25417
25418           /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
25419            * establish sub-heaps of increasing lengths:
25420            */
25421           for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
25422
25423           /* Construct the Huffman tree by repeatedly combining the least two
25424            * frequent nodes.
25425            */
25426           node = elems;              /* next internal node of the tree */
25427           do {
25428             //pqremove(s, tree, n);  /* n = node of least frequency */
25429             /*** pqremove ***/
25430             n = s.heap[1/*SMALLEST*/];
25431             s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
25432             pqdownheap(s, tree, 1/*SMALLEST*/);
25433             /***/
25434
25435             m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
25436
25437             s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
25438             s.heap[--s.heap_max] = m;
25439
25440             /* Create a new node father of n and m */
25441             tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
25442             s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
25443             tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;
25444
25445             /* and insert the new node in the heap */
25446             s.heap[1/*SMALLEST*/] = node++;
25447             pqdownheap(s, tree, 1/*SMALLEST*/);
25448
25449           } while (s.heap_len >= 2);
25450
25451           s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
25452
25453           /* At this point, the fields freq and dad are set. We can now
25454            * generate the bit lengths.
25455            */
25456           gen_bitlen(s, desc);
25457
25458           /* The field len is now set, we can generate the bit codes */
25459           gen_codes(tree, max_code, s.bl_count);
25460         }
25461
25462
25463         /* ===========================================================================
25464          * Scan a literal or distance tree to determine the frequencies of the codes
25465          * in the bit length tree.
25466          */
25467         function scan_tree(s, tree, max_code)
25468         //    deflate_state *s;
25469         //    ct_data *tree;   /* the tree to be scanned */
25470         //    int max_code;    /* and its largest code of non zero frequency */
25471         {
25472           var n;                     /* iterates over all tree elements */
25473           var prevlen = -1;          /* last emitted length */
25474           var curlen;                /* length of current code */
25475
25476           var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
25477
25478           var count = 0;             /* repeat count of the current code */
25479           var max_count = 7;         /* max repeat count */
25480           var min_count = 4;         /* min repeat count */
25481
25482           if (nextlen === 0) {
25483             max_count = 138;
25484             min_count = 3;
25485           }
25486           tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */
25487
25488           for (n = 0; n <= max_code; n++) {
25489             curlen = nextlen;
25490             nextlen = tree[(n+1)*2 + 1]/*.Len*/;
25491
25492             if (++count < max_count && curlen === nextlen) {
25493               continue;
25494
25495             } else if (count < min_count) {
25496               s.bl_tree[curlen * 2]/*.Freq*/ += count;
25497
25498             } else if (curlen !== 0) {
25499
25500               if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
25501               s.bl_tree[REP_3_6*2]/*.Freq*/++;
25502
25503             } else if (count <= 10) {
25504               s.bl_tree[REPZ_3_10*2]/*.Freq*/++;
25505
25506             } else {
25507               s.bl_tree[REPZ_11_138*2]/*.Freq*/++;
25508             }
25509
25510             count = 0;
25511             prevlen = curlen;
25512
25513             if (nextlen === 0) {
25514               max_count = 138;
25515               min_count = 3;
25516
25517             } else if (curlen === nextlen) {
25518               max_count = 6;
25519               min_count = 3;
25520
25521             } else {
25522               max_count = 7;
25523               min_count = 4;
25524             }
25525           }
25526         }
25527
25528
25529         /* ===========================================================================
25530          * Send a literal or distance tree in compressed form, using the codes in
25531          * bl_tree.
25532          */
25533         function send_tree(s, tree, max_code)
25534         //    deflate_state *s;
25535         //    ct_data *tree; /* the tree to be scanned */
25536         //    int max_code;       /* and its largest code of non zero frequency */
25537         {
25538           var n;                     /* iterates over all tree elements */
25539           var prevlen = -1;          /* last emitted length */
25540           var curlen;                /* length of current code */
25541
25542           var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
25543
25544           var count = 0;             /* repeat count of the current code */
25545           var max_count = 7;         /* max repeat count */
25546           var min_count = 4;         /* min repeat count */
25547
25548           /* tree[max_code+1].Len = -1; */  /* guard already set */
25549           if (nextlen === 0) {
25550             max_count = 138;
25551             min_count = 3;
25552           }
25553
25554           for (n = 0; n <= max_code; n++) {
25555             curlen = nextlen;
25556             nextlen = tree[(n+1)*2 + 1]/*.Len*/;
25557
25558             if (++count < max_count && curlen === nextlen) {
25559               continue;
25560
25561             } else if (count < min_count) {
25562               do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
25563
25564             } else if (curlen !== 0) {
25565               if (curlen !== prevlen) {
25566                 send_code(s, curlen, s.bl_tree);
25567                 count--;
25568               }
25569               //Assert(count >= 3 && count <= 6, " 3_6?");
25570               send_code(s, REP_3_6, s.bl_tree);
25571               send_bits(s, count-3, 2);
25572
25573             } else if (count <= 10) {
25574               send_code(s, REPZ_3_10, s.bl_tree);
25575               send_bits(s, count-3, 3);
25576
25577             } else {
25578               send_code(s, REPZ_11_138, s.bl_tree);
25579               send_bits(s, count-11, 7);
25580             }
25581
25582             count = 0;
25583             prevlen = curlen;
25584             if (nextlen === 0) {
25585               max_count = 138;
25586               min_count = 3;
25587
25588             } else if (curlen === nextlen) {
25589               max_count = 6;
25590               min_count = 3;
25591
25592             } else {
25593               max_count = 7;
25594               min_count = 4;
25595             }
25596           }
25597         }
25598
25599
25600         /* ===========================================================================
25601          * Construct the Huffman tree for the bit lengths and return the index in
25602          * bl_order of the last bit length code to send.
25603          */
25604         function build_bl_tree(s) {
25605           var max_blindex;  /* index of last bit length code of non zero freq */
25606
25607           /* Determine the bit length frequencies for literal and distance trees */
25608           scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
25609           scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
25610
25611           /* Build the bit length tree: */
25612           build_tree(s, s.bl_desc);
25613           /* opt_len now includes the length of the tree representations, except
25614            * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
25615            */
25616
25617           /* Determine the number of bit length codes to send. The pkzip format
25618            * requires that at least 4 bit length codes be sent. (appnote.txt says
25619            * 3 but the actual value used is 4.)
25620            */
25621           for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
25622             if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {
25623               break;
25624             }
25625           }
25626           /* Update opt_len to include the bit length tree and counts */
25627           s.opt_len += 3*(max_blindex+1) + 5+5+4;
25628           //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
25629           //        s->opt_len, s->static_len));
25630
25631           return max_blindex;
25632         }
25633
25634
25635         /* ===========================================================================
25636          * Send the header for a block using dynamic Huffman trees: the counts, the
25637          * lengths of the bit length codes, the literal tree and the distance tree.
25638          * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
25639          */
25640         function send_all_trees(s, lcodes, dcodes, blcodes)
25641         //    deflate_state *s;
25642         //    int lcodes, dcodes, blcodes; /* number of codes for each tree */
25643         {
25644           var rank;                    /* index in bl_order */
25645
25646           //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
25647           //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
25648           //        "too many codes");
25649           //Tracev((stderr, "\nbl counts: "));
25650           send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
25651           send_bits(s, dcodes-1,   5);
25652           send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
25653           for (rank = 0; rank < blcodes; rank++) {
25654             //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
25655             send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);
25656           }
25657           //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
25658
25659           send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */
25660           //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
25661
25662           send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */
25663           //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
25664         }
25665
25666
25667         /* ===========================================================================
25668          * Check if the data type is TEXT or BINARY, using the following algorithm:
25669          * - TEXT if the two conditions below are satisfied:
25670          *    a) There are no non-portable control characters belonging to the
25671          *       "black list" (0..6, 14..25, 28..31).
25672          *    b) There is at least one printable character belonging to the
25673          *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
25674          * - BINARY otherwise.
25675          * - The following partially-portable control characters form a
25676          *   "gray list" that is ignored in this detection algorithm:
25677          *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
25678          * IN assertion: the fields Freq of dyn_ltree are set.
25679          */
25680         function detect_data_type(s) {
25681           /* black_mask is the bit mask of black-listed bytes
25682            * set bits 0..6, 14..25, and 28..31
25683            * 0xf3ffc07f = binary 11110011111111111100000001111111
25684            */
25685           var black_mask = 0xf3ffc07f;
25686           var n;
25687
25688           /* Check for non-textual ("black-listed") bytes. */
25689           for (n = 0; n <= 31; n++, black_mask >>>= 1) {
25690             if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {
25691               return Z_BINARY;
25692             }
25693           }
25694
25695           /* Check for textual ("white-listed") bytes. */
25696           if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
25697               s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
25698             return Z_TEXT;
25699           }
25700           for (n = 32; n < LITERALS; n++) {
25701             if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
25702               return Z_TEXT;
25703             }
25704           }
25705
25706           /* There are no "black-listed" or "white-listed" bytes:
25707            * this stream either is empty or has tolerated ("gray-listed") bytes only.
25708            */
25709           return Z_BINARY;
25710         }
25711
25712
25713         var static_init_done = false;
25714
25715         /* ===========================================================================
25716          * Initialize the tree data structures for a new zlib stream.
25717          */
25718         function _tr_init(s)
25719         {
25720
25721           if (!static_init_done) {
25722             tr_static_init();
25723             static_init_done = true;
25724           }
25725
25726           s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
25727           s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
25728           s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
25729
25730           s.bi_buf = 0;
25731           s.bi_valid = 0;
25732
25733           /* Initialize the first block of the first file: */
25734           init_block(s);
25735         }
25736
25737
25738         /* ===========================================================================
25739          * Send a stored block
25740          */
25741         function _tr_stored_block(s, buf, stored_len, last)
25742         //DeflateState *s;
25743         //charf *buf;       /* input block */
25744         //ulg stored_len;   /* length of input block */
25745         //int last;         /* one if this is the last block for a file */
25746         {
25747           send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3);    /* send block type */
25748           copy_block(s, buf, stored_len, true); /* with header */
25749         }
25750
25751
25752         /* ===========================================================================
25753          * Send one empty static block to give enough lookahead for inflate.
25754          * This takes 10 bits, of which 7 may remain in the bit buffer.
25755          */
25756         function _tr_align(s) {
25757           send_bits(s, STATIC_TREES<<1, 3);
25758           send_code(s, END_BLOCK, static_ltree);
25759           bi_flush(s);
25760         }
25761
25762
25763         /* ===========================================================================
25764          * Determine the best encoding for the current block: dynamic trees, static
25765          * trees or store, and output the encoded block to the zip file.
25766          */
25767         function _tr_flush_block(s, buf, stored_len, last)
25768         //DeflateState *s;
25769         //charf *buf;       /* input block, or NULL if too old */
25770         //ulg stored_len;   /* length of input block */
25771         //int last;         /* one if this is the last block for a file */
25772         {
25773           var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
25774           var max_blindex = 0;        /* index of last bit length code of non zero freq */
25775
25776           /* Build the Huffman trees unless a stored block is forced */
25777           if (s.level > 0) {
25778
25779             /* Check if the file is binary or text */
25780             if (s.strm.data_type === Z_UNKNOWN) {
25781               s.strm.data_type = detect_data_type(s);
25782             }
25783
25784             /* Construct the literal and distance trees */
25785             build_tree(s, s.l_desc);
25786             // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
25787             //        s->static_len));
25788
25789             build_tree(s, s.d_desc);
25790             // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
25791             //        s->static_len));
25792             /* At this point, opt_len and static_len are the total bit lengths of
25793              * the compressed block data, excluding the tree representations.
25794              */
25795
25796             /* Build the bit length tree for the above two trees, and get the index
25797              * in bl_order of the last bit length code to send.
25798              */
25799             max_blindex = build_bl_tree(s);
25800
25801             /* Determine the best encoding. Compute the block lengths in bytes. */
25802             opt_lenb = (s.opt_len+3+7) >>> 3;
25803             static_lenb = (s.static_len+3+7) >>> 3;
25804
25805             // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
25806             //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
25807             //        s->last_lit));
25808
25809             if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
25810
25811           } else {
25812             // Assert(buf != (char*)0, "lost buf");
25813             opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
25814           }
25815
25816           if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {
25817             /* 4: two words for the lengths */
25818
25819             /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
25820              * Otherwise we can't have processed more than WSIZE input bytes since
25821              * the last block flush, because compression would have been
25822              * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
25823              * transform a block into a stored block.
25824              */
25825             _tr_stored_block(s, buf, stored_len, last);
25826
25827           } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
25828
25829             send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);
25830             compress_block(s, static_ltree, static_dtree);
25831
25832           } else {
25833             send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);
25834             send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);
25835             compress_block(s, s.dyn_ltree, s.dyn_dtree);
25836           }
25837           // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
25838           /* The above check is made mod 2^32, for files larger than 512 MB
25839            * and uLong implemented on 32 bits.
25840            */
25841           init_block(s);
25842
25843           if (last) {
25844             bi_windup(s);
25845           }
25846           // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
25847           //       s->compressed_len-7*last));
25848         }
25849
25850         /* ===========================================================================
25851          * Save the match info and tally the frequency counts. Return true if
25852          * the current block must be flushed.
25853          */
25854         function _tr_tally(s, dist, lc)
25855         //    deflate_state *s;
25856         //    unsigned dist;  /* distance of matched string */
25857         //    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
25858         {
25859           //var out_length, in_length, dcode;
25860
25861           s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
25862           s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
25863
25864           s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
25865           s.last_lit++;
25866
25867           if (dist === 0) {
25868             /* lc is the unmatched char */
25869             s.dyn_ltree[lc*2]/*.Freq*/++;
25870           } else {
25871             s.matches++;
25872             /* Here, lc is the match length - MIN_MATCH */
25873             dist--;             /* dist = match distance - 1 */
25874             //Assert((ush)dist < (ush)MAX_DIST(s) &&
25875             //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
25876             //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
25877
25878             s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;
25879             s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
25880           }
25881
25882         // (!) This block is disabled in zlib defailts,
25883         // don't enable it for binary compatibility
25884
25885         //#ifdef TRUNCATE_BLOCK
25886         //  /* Try to guess if it is profitable to stop the current block here */
25887         //  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
25888         //    /* Compute an upper bound for the compressed length */
25889         //    out_length = s.last_lit*8;
25890         //    in_length = s.strstart - s.block_start;
25891         //
25892         //    for (dcode = 0; dcode < D_CODES; dcode++) {
25893         //      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
25894         //    }
25895         //    out_length >>>= 3;
25896         //    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
25897         //    //       s->last_lit, in_length, out_length,
25898         //    //       100L - out_length*100L/in_length));
25899         //    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
25900         //      return true;
25901         //    }
25902         //  }
25903         //#endif
25904
25905           return (s.last_lit === s.lit_bufsize-1);
25906           /* We avoid equality with lit_bufsize because of wraparound at 64K
25907            * on 16 bit machines and because stored blocks are restricted to
25908            * 64K-1 bytes.
25909            */
25910         }
25911
25912         exports._tr_init  = _tr_init;
25913         exports._tr_stored_block = _tr_stored_block;
25914         exports._tr_flush_block  = _tr_flush_block;
25915         exports._tr_tally = _tr_tally;
25916         exports._tr_align = _tr_align;
25917
25918
25919 /***/ },
25920 /* 54 */
25921 /***/ function(module, exports) {
25922
25923         'use strict';
25924
25925         // Note: adler32 takes 12% for level 0 and 2% for level 6.
25926         // It doesn't worth to make additional optimizationa as in original.
25927         // Small size is preferable.
25928
25929         function adler32(adler, buf, len, pos) {
25930           var s1 = (adler & 0xffff) |0,
25931               s2 = ((adler >>> 16) & 0xffff) |0,
25932               n = 0;
25933
25934           while (len !== 0) {
25935             // Set limit ~ twice less than 5552, to keep
25936             // s2 in 31-bits, because we force signed ints.
25937             // in other case %= will fail.
25938             n = len > 2000 ? 2000 : len;
25939             len -= n;
25940
25941             do {
25942               s1 = (s1 + buf[pos++]) |0;
25943               s2 = (s2 + s1) |0;
25944             } while (--n);
25945
25946             s1 %= 65521;
25947             s2 %= 65521;
25948           }
25949
25950           return (s1 | (s2 << 16)) |0;
25951         }
25952
25953
25954         module.exports = adler32;
25955
25956
25957 /***/ },
25958 /* 55 */
25959 /***/ function(module, exports) {
25960
25961         'use strict';
25962
25963         // Note: we can't get significant speed boost here.
25964         // So write code to minimize size - no pregenerated tables
25965         // and array tools dependencies.
25966
25967
25968         // Use ordinary array, since untyped makes no boost here
25969         function makeTable() {
25970           var c, table = [];
25971
25972           for (var n =0; n < 256; n++) {
25973             c = n;
25974             for (var k =0; k < 8; k++) {
25975               c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
25976             }
25977             table[n] = c;
25978           }
25979
25980           return table;
25981         }
25982
25983         // Create table on load. Just 255 signed longs. Not a problem.
25984         var crcTable = makeTable();
25985
25986
25987         function crc32(crc, buf, len, pos) {
25988           var t = crcTable,
25989               end = pos + len;
25990
25991           crc = crc ^ (-1);
25992
25993           for (var i = pos; i < end; i++) {
25994             crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
25995           }
25996
25997           return (crc ^ (-1)); // >>> 0;
25998         }
25999
26000
26001         module.exports = crc32;
26002
26003
26004 /***/ },
26005 /* 56 */
26006 /***/ function(module, exports, __webpack_require__) {
26007
26008         'use strict';
26009
26010
26011         var utils = __webpack_require__(52);
26012         var adler32 = __webpack_require__(54);
26013         var crc32   = __webpack_require__(55);
26014         var inflate_fast = __webpack_require__(57);
26015         var inflate_table = __webpack_require__(58);
26016
26017         var CODES = 0;
26018         var LENS = 1;
26019         var DISTS = 2;
26020
26021         /* Public constants ==========================================================*/
26022         /* ===========================================================================*/
26023
26024
26025         /* Allowed flush values; see deflate() and inflate() below for details */
26026         //var Z_NO_FLUSH      = 0;
26027         //var Z_PARTIAL_FLUSH = 1;
26028         //var Z_SYNC_FLUSH    = 2;
26029         //var Z_FULL_FLUSH    = 3;
26030         var Z_FINISH        = 4;
26031         var Z_BLOCK         = 5;
26032         var Z_TREES         = 6;
26033
26034
26035         /* Return codes for the compression/decompression functions. Negative values
26036          * are errors, positive values are used for special but normal events.
26037          */
26038         var Z_OK            = 0;
26039         var Z_STREAM_END    = 1;
26040         var Z_NEED_DICT     = 2;
26041         //var Z_ERRNO         = -1;
26042         var Z_STREAM_ERROR  = -2;
26043         var Z_DATA_ERROR    = -3;
26044         var Z_MEM_ERROR     = -4;
26045         var Z_BUF_ERROR     = -5;
26046         //var Z_VERSION_ERROR = -6;
26047
26048         /* The deflate compression method */
26049         var Z_DEFLATED  = 8;
26050
26051
26052         /* STATES ====================================================================*/
26053         /* ===========================================================================*/
26054
26055
26056         var    HEAD = 1;       /* i: waiting for magic header */
26057         var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
26058         var    TIME = 3;       /* i: waiting for modification time (gzip) */
26059         var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
26060         var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
26061         var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
26062         var    NAME = 7;       /* i: waiting for end of file name (gzip) */
26063         var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
26064         var    HCRC = 9;       /* i: waiting for header crc (gzip) */
26065         var    DICTID = 10;    /* i: waiting for dictionary check value */
26066         var    DICT = 11;      /* waiting for inflateSetDictionary() call */
26067         var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
26068         var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
26069         var        STORED = 14;    /* i: waiting for stored size (length and complement) */
26070         var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
26071         var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
26072         var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
26073         var        LENLENS = 18;   /* i: waiting for code length code lengths */
26074         var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
26075         var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
26076         var            LEN = 21;       /* i: waiting for length/lit/eob code */
26077         var            LENEXT = 22;    /* i: waiting for length extra bits */
26078         var            DIST = 23;      /* i: waiting for distance code */
26079         var            DISTEXT = 24;   /* i: waiting for distance extra bits */
26080         var            MATCH = 25;     /* o: waiting for output space to copy string */
26081         var            LIT = 26;       /* o: waiting for output space to write literal */
26082         var    CHECK = 27;     /* i: waiting for 32-bit check value */
26083         var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
26084         var    DONE = 29;      /* finished check, done -- remain here until reset */
26085         var    BAD = 30;       /* got a data error -- remain here until reset */
26086         var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
26087         var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
26088
26089         /* ===========================================================================*/
26090
26091
26092
26093         var ENOUGH_LENS = 852;
26094         var ENOUGH_DISTS = 592;
26095         //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
26096
26097         var MAX_WBITS = 15;
26098         /* 32K LZ77 window */
26099         var DEF_WBITS = MAX_WBITS;
26100
26101
26102         function ZSWAP32(q) {
26103           return  (((q >>> 24) & 0xff) +
26104                   ((q >>> 8) & 0xff00) +
26105                   ((q & 0xff00) << 8) +
26106                   ((q & 0xff) << 24));
26107         }
26108
26109
26110         function InflateState() {
26111           this.mode = 0;             /* current inflate mode */
26112           this.last = false;          /* true if processing last block */
26113           this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
26114           this.havedict = false;      /* true if dictionary provided */
26115           this.flags = 0;             /* gzip header method and flags (0 if zlib) */
26116           this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
26117           this.check = 0;             /* protected copy of check value */
26118           this.total = 0;             /* protected copy of output count */
26119           // TODO: may be {}
26120           this.head = null;           /* where to save gzip header information */
26121
26122           /* sliding window */
26123           this.wbits = 0;             /* log base 2 of requested window size */
26124           this.wsize = 0;             /* window size or zero if not using window */
26125           this.whave = 0;             /* valid bytes in the window */
26126           this.wnext = 0;             /* window write index */
26127           this.window = null;         /* allocated sliding window, if needed */
26128
26129           /* bit accumulator */
26130           this.hold = 0;              /* input bit accumulator */
26131           this.bits = 0;              /* number of bits in "in" */
26132
26133           /* for string and stored block copying */
26134           this.length = 0;            /* literal or length of data to copy */
26135           this.offset = 0;            /* distance back to copy string from */
26136
26137           /* for table and code decoding */
26138           this.extra = 0;             /* extra bits needed */
26139
26140           /* fixed and dynamic code tables */
26141           this.lencode = null;          /* starting table for length/literal codes */
26142           this.distcode = null;         /* starting table for distance codes */
26143           this.lenbits = 0;           /* index bits for lencode */
26144           this.distbits = 0;          /* index bits for distcode */
26145
26146           /* dynamic table building */
26147           this.ncode = 0;             /* number of code length code lengths */
26148           this.nlen = 0;              /* number of length code lengths */
26149           this.ndist = 0;             /* number of distance code lengths */
26150           this.have = 0;              /* number of code lengths in lens[] */
26151           this.next = null;              /* next available space in codes[] */
26152
26153           this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
26154           this.work = new utils.Buf16(288); /* work area for code table building */
26155
26156           /*
26157            because we don't have pointers in js, we use lencode and distcode directly
26158            as buffers so we don't need codes
26159           */
26160           //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
26161           this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
26162           this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
26163           this.sane = 0;                   /* if false, allow invalid distance too far */
26164           this.back = 0;                   /* bits back of last unprocessed length/lit */
26165           this.was = 0;                    /* initial length of match */
26166         }
26167
26168         function inflateResetKeep(strm) {
26169           var state;
26170
26171           if (!strm || !strm.state) { return Z_STREAM_ERROR; }
26172           state = strm.state;
26173           strm.total_in = strm.total_out = state.total = 0;
26174           strm.msg = ''; /*Z_NULL*/
26175           if (state.wrap) {       /* to support ill-conceived Java test suite */
26176             strm.adler = state.wrap & 1;
26177           }
26178           state.mode = HEAD;
26179           state.last = 0;
26180           state.havedict = 0;
26181           state.dmax = 32768;
26182           state.head = null/*Z_NULL*/;
26183           state.hold = 0;
26184           state.bits = 0;
26185           //state.lencode = state.distcode = state.next = state.codes;
26186           state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
26187           state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
26188
26189           state.sane = 1;
26190           state.back = -1;
26191           //Tracev((stderr, "inflate: reset\n"));
26192           return Z_OK;
26193         }
26194
26195         function inflateReset(strm) {
26196           var state;
26197
26198           if (!strm || !strm.state) { return Z_STREAM_ERROR; }
26199           state = strm.state;
26200           state.wsize = 0;
26201           state.whave = 0;
26202           state.wnext = 0;
26203           return inflateResetKeep(strm);
26204
26205         }
26206
26207         function inflateReset2(strm, windowBits) {
26208           var wrap;
26209           var state;
26210
26211           /* get the state */
26212           if (!strm || !strm.state) { return Z_STREAM_ERROR; }
26213           state = strm.state;
26214
26215           /* extract wrap request from windowBits parameter */
26216           if (windowBits < 0) {
26217             wrap = 0;
26218             windowBits = -windowBits;
26219           }
26220           else {
26221             wrap = (windowBits >> 4) + 1;
26222             if (windowBits < 48) {
26223               windowBits &= 15;
26224             }
26225           }
26226
26227           /* set number of window bits, free window if different */
26228           if (windowBits && (windowBits < 8 || windowBits > 15)) {
26229             return Z_STREAM_ERROR;
26230           }
26231           if (state.window !== null && state.wbits !== windowBits) {
26232             state.window = null;
26233           }
26234
26235           /* update state and reset the rest of it */
26236           state.wrap = wrap;
26237           state.wbits = windowBits;
26238           return inflateReset(strm);
26239         }
26240
26241         function inflateInit2(strm, windowBits) {
26242           var ret;
26243           var state;
26244
26245           if (!strm) { return Z_STREAM_ERROR; }
26246           //strm.msg = Z_NULL;                 /* in case we return an error */
26247
26248           state = new InflateState();
26249
26250           //if (state === Z_NULL) return Z_MEM_ERROR;
26251           //Tracev((stderr, "inflate: allocated\n"));
26252           strm.state = state;
26253           state.window = null/*Z_NULL*/;
26254           ret = inflateReset2(strm, windowBits);
26255           if (ret !== Z_OK) {
26256             strm.state = null/*Z_NULL*/;
26257           }
26258           return ret;
26259         }
26260
26261         function inflateInit(strm) {
26262           return inflateInit2(strm, DEF_WBITS);
26263         }
26264
26265
26266         /*
26267          Return state with length and distance decoding tables and index sizes set to
26268          fixed code decoding.  Normally this returns fixed tables from inffixed.h.
26269          If BUILDFIXED is defined, then instead this routine builds the tables the
26270          first time it's called, and returns those tables the first time and
26271          thereafter.  This reduces the size of the code by about 2K bytes, in
26272          exchange for a little execution time.  However, BUILDFIXED should not be
26273          used for threaded applications, since the rewriting of the tables and virgin
26274          may not be thread-safe.
26275          */
26276         var virgin = true;
26277
26278         var lenfix, distfix; // We have no pointers in JS, so keep tables separate
26279
26280         function fixedtables(state) {
26281           /* build fixed huffman tables if first call (may not be thread safe) */
26282           if (virgin) {
26283             var sym;
26284
26285             lenfix = new utils.Buf32(512);
26286             distfix = new utils.Buf32(32);
26287
26288             /* literal/length table */
26289             sym = 0;
26290             while (sym < 144) { state.lens[sym++] = 8; }
26291             while (sym < 256) { state.lens[sym++] = 9; }
26292             while (sym < 280) { state.lens[sym++] = 7; }
26293             while (sym < 288) { state.lens[sym++] = 8; }
26294
26295             inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, {bits: 9});
26296
26297             /* distance table */
26298             sym = 0;
26299             while (sym < 32) { state.lens[sym++] = 5; }
26300
26301             inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, {bits: 5});
26302
26303             /* do this just once */
26304             virgin = false;
26305           }
26306
26307           state.lencode = lenfix;
26308           state.lenbits = 9;
26309           state.distcode = distfix;
26310           state.distbits = 5;
26311         }
26312
26313
26314         /*
26315          Update the window with the last wsize (normally 32K) bytes written before
26316          returning.  If window does not exist yet, create it.  This is only called
26317          when a window is already in use, or when output has been written during this
26318          inflate call, but the end of the deflate stream has not been reached yet.
26319          It is also called to create a window for dictionary data when a dictionary
26320          is loaded.
26321
26322          Providing output buffers larger than 32K to inflate() should provide a speed
26323          advantage, since only the last 32K of output is copied to the sliding window
26324          upon return from inflate(), and since all distances after the first 32K of
26325          output will fall in the output data, making match copies simpler and faster.
26326          The advantage may be dependent on the size of the processor's data caches.
26327          */
26328         function updatewindow(strm, src, end, copy) {
26329           var dist;
26330           var state = strm.state;
26331
26332           /* if it hasn't been done already, allocate space for the window */
26333           if (state.window === null) {
26334             state.wsize = 1 << state.wbits;
26335             state.wnext = 0;
26336             state.whave = 0;
26337
26338             state.window = new utils.Buf8(state.wsize);
26339           }
26340
26341           /* copy state->wsize or less output bytes into the circular window */
26342           if (copy >= state.wsize) {
26343             utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);
26344             state.wnext = 0;
26345             state.whave = state.wsize;
26346           }
26347           else {
26348             dist = state.wsize - state.wnext;
26349             if (dist > copy) {
26350               dist = copy;
26351             }
26352             //zmemcpy(state->window + state->wnext, end - copy, dist);
26353             utils.arraySet(state.window,src, end - copy, dist, state.wnext);
26354             copy -= dist;
26355             if (copy) {
26356               //zmemcpy(state->window, end - copy, copy);
26357               utils.arraySet(state.window,src, end - copy, copy, 0);
26358               state.wnext = copy;
26359               state.whave = state.wsize;
26360             }
26361             else {
26362               state.wnext += dist;
26363               if (state.wnext === state.wsize) { state.wnext = 0; }
26364               if (state.whave < state.wsize) { state.whave += dist; }
26365             }
26366           }
26367           return 0;
26368         }
26369
26370         function inflate(strm, flush) {
26371           var state;
26372           var input, output;          // input/output buffers
26373           var next;                   /* next input INDEX */
26374           var put;                    /* next output INDEX */
26375           var have, left;             /* available input and output */
26376           var hold;                   /* bit buffer */
26377           var bits;                   /* bits in bit buffer */
26378           var _in, _out;              /* save starting available input and output */
26379           var copy;                   /* number of stored or match bytes to copy */
26380           var from;                   /* where to copy match bytes from */
26381           var from_source;
26382           var here = 0;               /* current decoding table entry */
26383           var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
26384           //var last;                   /* parent table entry */
26385           var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
26386           var len;                    /* length to copy for repeats, bits to drop */
26387           var ret;                    /* return code */
26388           var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
26389           var opts;
26390
26391           var n; // temporary var for NEED_BITS
26392
26393           var order = /* permutation of code lengths */
26394             [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
26395
26396
26397           if (!strm || !strm.state || !strm.output ||
26398               (!strm.input && strm.avail_in !== 0)) {
26399             return Z_STREAM_ERROR;
26400           }
26401
26402           state = strm.state;
26403           if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
26404
26405
26406           //--- LOAD() ---
26407           put = strm.next_out;
26408           output = strm.output;
26409           left = strm.avail_out;
26410           next = strm.next_in;
26411           input = strm.input;
26412           have = strm.avail_in;
26413           hold = state.hold;
26414           bits = state.bits;
26415           //---
26416
26417           _in = have;
26418           _out = left;
26419           ret = Z_OK;
26420
26421           inf_leave: // goto emulation
26422           for (;;) {
26423             switch (state.mode) {
26424             case HEAD:
26425               if (state.wrap === 0) {
26426                 state.mode = TYPEDO;
26427                 break;
26428               }
26429               //=== NEEDBITS(16);
26430               while (bits < 16) {
26431                 if (have === 0) { break inf_leave; }
26432                 have--;
26433                 hold += input[next++] << bits;
26434                 bits += 8;
26435               }
26436               //===//
26437               if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
26438                 state.check = 0/*crc32(0L, Z_NULL, 0)*/;
26439                 //=== CRC2(state.check, hold);
26440                 hbuf[0] = hold & 0xff;
26441                 hbuf[1] = (hold >>> 8) & 0xff;
26442                 state.check = crc32(state.check, hbuf, 2, 0);
26443                 //===//
26444
26445                 //=== INITBITS();
26446                 hold = 0;
26447                 bits = 0;
26448                 //===//
26449                 state.mode = FLAGS;
26450                 break;
26451               }
26452               state.flags = 0;           /* expect zlib header */
26453               if (state.head) {
26454                 state.head.done = false;
26455               }
26456               if (!(state.wrap & 1) ||   /* check if zlib header allowed */
26457                 (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
26458                 strm.msg = 'incorrect header check';
26459                 state.mode = BAD;
26460                 break;
26461               }
26462               if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
26463                 strm.msg = 'unknown compression method';
26464                 state.mode = BAD;
26465                 break;
26466               }
26467               //--- DROPBITS(4) ---//
26468               hold >>>= 4;
26469               bits -= 4;
26470               //---//
26471               len = (hold & 0x0f)/*BITS(4)*/ + 8;
26472               if (state.wbits === 0) {
26473                 state.wbits = len;
26474               }
26475               else if (len > state.wbits) {
26476                 strm.msg = 'invalid window size';
26477                 state.mode = BAD;
26478                 break;
26479               }
26480               state.dmax = 1 << len;
26481               //Tracev((stderr, "inflate:   zlib header ok\n"));
26482               strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
26483               state.mode = hold & 0x200 ? DICTID : TYPE;
26484               //=== INITBITS();
26485               hold = 0;
26486               bits = 0;
26487               //===//
26488               break;
26489             case FLAGS:
26490               //=== NEEDBITS(16); */
26491               while (bits < 16) {
26492                 if (have === 0) { break inf_leave; }
26493                 have--;
26494                 hold += input[next++] << bits;
26495                 bits += 8;
26496               }
26497               //===//
26498               state.flags = hold;
26499               if ((state.flags & 0xff) !== Z_DEFLATED) {
26500                 strm.msg = 'unknown compression method';
26501                 state.mode = BAD;
26502                 break;
26503               }
26504               if (state.flags & 0xe000) {
26505                 strm.msg = 'unknown header flags set';
26506                 state.mode = BAD;
26507                 break;
26508               }
26509               if (state.head) {
26510                 state.head.text = ((hold >> 8) & 1);
26511               }
26512               if (state.flags & 0x0200) {
26513                 //=== CRC2(state.check, hold);
26514                 hbuf[0] = hold & 0xff;
26515                 hbuf[1] = (hold >>> 8) & 0xff;
26516                 state.check = crc32(state.check, hbuf, 2, 0);
26517                 //===//
26518               }
26519               //=== INITBITS();
26520               hold = 0;
26521               bits = 0;
26522               //===//
26523               state.mode = TIME;
26524               /* falls through */
26525             case TIME:
26526               //=== NEEDBITS(32); */
26527               while (bits < 32) {
26528                 if (have === 0) { break inf_leave; }
26529                 have--;
26530                 hold += input[next++] << bits;
26531                 bits += 8;
26532               }
26533               //===//
26534               if (state.head) {
26535                 state.head.time = hold;
26536               }
26537               if (state.flags & 0x0200) {
26538                 //=== CRC4(state.check, hold)
26539                 hbuf[0] = hold & 0xff;
26540                 hbuf[1] = (hold >>> 8) & 0xff;
26541                 hbuf[2] = (hold >>> 16) & 0xff;
26542                 hbuf[3] = (hold >>> 24) & 0xff;
26543                 state.check = crc32(state.check, hbuf, 4, 0);
26544                 //===
26545               }
26546               //=== INITBITS();
26547               hold = 0;
26548               bits = 0;
26549               //===//
26550               state.mode = OS;
26551               /* falls through */
26552             case OS:
26553               //=== NEEDBITS(16); */
26554               while (bits < 16) {
26555                 if (have === 0) { break inf_leave; }
26556                 have--;
26557                 hold += input[next++] << bits;
26558                 bits += 8;
26559               }
26560               //===//
26561               if (state.head) {
26562                 state.head.xflags = (hold & 0xff);
26563                 state.head.os = (hold >> 8);
26564               }
26565               if (state.flags & 0x0200) {
26566                 //=== CRC2(state.check, hold);
26567                 hbuf[0] = hold & 0xff;
26568                 hbuf[1] = (hold >>> 8) & 0xff;
26569                 state.check = crc32(state.check, hbuf, 2, 0);
26570                 //===//
26571               }
26572               //=== INITBITS();
26573               hold = 0;
26574               bits = 0;
26575               //===//
26576               state.mode = EXLEN;
26577               /* falls through */
26578             case EXLEN:
26579               if (state.flags & 0x0400) {
26580                 //=== NEEDBITS(16); */
26581                 while (bits < 16) {
26582                   if (have === 0) { break inf_leave; }
26583                   have--;
26584                   hold += input[next++] << bits;
26585                   bits += 8;
26586                 }
26587                 //===//
26588                 state.length = hold;
26589                 if (state.head) {
26590                   state.head.extra_len = hold;
26591                 }
26592                 if (state.flags & 0x0200) {
26593                   //=== CRC2(state.check, hold);
26594                   hbuf[0] = hold & 0xff;
26595                   hbuf[1] = (hold >>> 8) & 0xff;
26596                   state.check = crc32(state.check, hbuf, 2, 0);
26597                   //===//
26598                 }
26599                 //=== INITBITS();
26600                 hold = 0;
26601                 bits = 0;
26602                 //===//
26603               }
26604               else if (state.head) {
26605                 state.head.extra = null/*Z_NULL*/;
26606               }
26607               state.mode = EXTRA;
26608               /* falls through */
26609             case EXTRA:
26610               if (state.flags & 0x0400) {
26611                 copy = state.length;
26612                 if (copy > have) { copy = have; }
26613                 if (copy) {
26614                   if (state.head) {
26615                     len = state.head.extra_len - state.length;
26616                     if (!state.head.extra) {
26617                       // Use untyped array for more conveniend processing later
26618                       state.head.extra = new Array(state.head.extra_len);
26619                     }
26620                     utils.arraySet(
26621                       state.head.extra,
26622                       input,
26623                       next,
26624                       // extra field is limited to 65536 bytes
26625                       // - no need for additional size check
26626                       copy,
26627                       /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
26628                       len
26629                     );
26630                     //zmemcpy(state.head.extra + len, next,
26631                     //        len + copy > state.head.extra_max ?
26632                     //        state.head.extra_max - len : copy);
26633                   }
26634                   if (state.flags & 0x0200) {
26635                     state.check = crc32(state.check, input, copy, next);
26636                   }
26637                   have -= copy;
26638                   next += copy;
26639                   state.length -= copy;
26640                 }
26641                 if (state.length) { break inf_leave; }
26642               }
26643               state.length = 0;
26644               state.mode = NAME;
26645               /* falls through */
26646             case NAME:
26647               if (state.flags & 0x0800) {
26648                 if (have === 0) { break inf_leave; }
26649                 copy = 0;
26650                 do {
26651                   // TODO: 2 or 1 bytes?
26652                   len = input[next + copy++];
26653                   /* use constant limit because in js we should not preallocate memory */
26654                   if (state.head && len &&
26655                       (state.length < 65536 /*state.head.name_max*/)) {
26656                     state.head.name += String.fromCharCode(len);
26657                   }
26658                 } while (len && copy < have);
26659
26660                 if (state.flags & 0x0200) {
26661                   state.check = crc32(state.check, input, copy, next);
26662                 }
26663                 have -= copy;
26664                 next += copy;
26665                 if (len) { break inf_leave; }
26666               }
26667               else if (state.head) {
26668                 state.head.name = null;
26669               }
26670               state.length = 0;
26671               state.mode = COMMENT;
26672               /* falls through */
26673             case COMMENT:
26674               if (state.flags & 0x1000) {
26675                 if (have === 0) { break inf_leave; }
26676                 copy = 0;
26677                 do {
26678                   len = input[next + copy++];
26679                   /* use constant limit because in js we should not preallocate memory */
26680                   if (state.head && len &&
26681                       (state.length < 65536 /*state.head.comm_max*/)) {
26682                     state.head.comment += String.fromCharCode(len);
26683                   }
26684                 } while (len && copy < have);
26685                 if (state.flags & 0x0200) {
26686                   state.check = crc32(state.check, input, copy, next);
26687                 }
26688                 have -= copy;
26689                 next += copy;
26690                 if (len) { break inf_leave; }
26691               }
26692               else if (state.head) {
26693                 state.head.comment = null;
26694               }
26695               state.mode = HCRC;
26696               /* falls through */
26697             case HCRC:
26698               if (state.flags & 0x0200) {
26699                 //=== NEEDBITS(16); */
26700                 while (bits < 16) {
26701                   if (have === 0) { break inf_leave; }
26702                   have--;
26703                   hold += input[next++] << bits;
26704                   bits += 8;
26705                 }
26706                 //===//
26707                 if (hold !== (state.check & 0xffff)) {
26708                   strm.msg = 'header crc mismatch';
26709                   state.mode = BAD;
26710                   break;
26711                 }
26712                 //=== INITBITS();
26713                 hold = 0;
26714                 bits = 0;
26715                 //===//
26716               }
26717               if (state.head) {
26718                 state.head.hcrc = ((state.flags >> 9) & 1);
26719                 state.head.done = true;
26720               }
26721               strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;
26722               state.mode = TYPE;
26723               break;
26724             case DICTID:
26725               //=== NEEDBITS(32); */
26726               while (bits < 32) {
26727                 if (have === 0) { break inf_leave; }
26728                 have--;
26729                 hold += input[next++] << bits;
26730                 bits += 8;
26731               }
26732               //===//
26733               strm.adler = state.check = ZSWAP32(hold);
26734               //=== INITBITS();
26735               hold = 0;
26736               bits = 0;
26737               //===//
26738               state.mode = DICT;
26739               /* falls through */
26740             case DICT:
26741               if (state.havedict === 0) {
26742                 //--- RESTORE() ---
26743                 strm.next_out = put;
26744                 strm.avail_out = left;
26745                 strm.next_in = next;
26746                 strm.avail_in = have;
26747                 state.hold = hold;
26748                 state.bits = bits;
26749                 //---
26750                 return Z_NEED_DICT;
26751               }
26752               strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
26753               state.mode = TYPE;
26754               /* falls through */
26755             case TYPE:
26756               if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
26757               /* falls through */
26758             case TYPEDO:
26759               if (state.last) {
26760                 //--- BYTEBITS() ---//
26761                 hold >>>= bits & 7;
26762                 bits -= bits & 7;
26763                 //---//
26764                 state.mode = CHECK;
26765                 break;
26766               }
26767               //=== NEEDBITS(3); */
26768               while (bits < 3) {
26769                 if (have === 0) { break inf_leave; }
26770                 have--;
26771                 hold += input[next++] << bits;
26772                 bits += 8;
26773               }
26774               //===//
26775               state.last = (hold & 0x01)/*BITS(1)*/;
26776               //--- DROPBITS(1) ---//
26777               hold >>>= 1;
26778               bits -= 1;
26779               //---//
26780
26781               switch ((hold & 0x03)/*BITS(2)*/) {
26782               case 0:                             /* stored block */
26783                 //Tracev((stderr, "inflate:     stored block%s\n",
26784                 //        state.last ? " (last)" : ""));
26785                 state.mode = STORED;
26786                 break;
26787               case 1:                             /* fixed block */
26788                 fixedtables(state);
26789                 //Tracev((stderr, "inflate:     fixed codes block%s\n",
26790                 //        state.last ? " (last)" : ""));
26791                 state.mode = LEN_;             /* decode codes */
26792                 if (flush === Z_TREES) {
26793                   //--- DROPBITS(2) ---//
26794                   hold >>>= 2;
26795                   bits -= 2;
26796                   //---//
26797                   break inf_leave;
26798                 }
26799                 break;
26800               case 2:                             /* dynamic block */
26801                 //Tracev((stderr, "inflate:     dynamic codes block%s\n",
26802                 //        state.last ? " (last)" : ""));
26803                 state.mode = TABLE;
26804                 break;
26805               case 3:
26806                 strm.msg = 'invalid block type';
26807                 state.mode = BAD;
26808               }
26809               //--- DROPBITS(2) ---//
26810               hold >>>= 2;
26811               bits -= 2;
26812               //---//
26813               break;
26814             case STORED:
26815               //--- BYTEBITS() ---// /* go to byte boundary */
26816               hold >>>= bits & 7;
26817               bits -= bits & 7;
26818               //---//
26819               //=== NEEDBITS(32); */
26820               while (bits < 32) {
26821                 if (have === 0) { break inf_leave; }
26822                 have--;
26823                 hold += input[next++] << bits;
26824                 bits += 8;
26825               }
26826               //===//
26827               if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
26828                 strm.msg = 'invalid stored block lengths';
26829                 state.mode = BAD;
26830                 break;
26831               }
26832               state.length = hold & 0xffff;
26833               //Tracev((stderr, "inflate:       stored length %u\n",
26834               //        state.length));
26835               //=== INITBITS();
26836               hold = 0;
26837               bits = 0;
26838               //===//
26839               state.mode = COPY_;
26840               if (flush === Z_TREES) { break inf_leave; }
26841               /* falls through */
26842             case COPY_:
26843               state.mode = COPY;
26844               /* falls through */
26845             case COPY:
26846               copy = state.length;
26847               if (copy) {
26848                 if (copy > have) { copy = have; }
26849                 if (copy > left) { copy = left; }
26850                 if (copy === 0) { break inf_leave; }
26851                 //--- zmemcpy(put, next, copy); ---
26852                 utils.arraySet(output, input, next, copy, put);
26853                 //---//
26854                 have -= copy;
26855                 next += copy;
26856                 left -= copy;
26857                 put += copy;
26858                 state.length -= copy;
26859                 break;
26860               }
26861               //Tracev((stderr, "inflate:       stored end\n"));
26862               state.mode = TYPE;
26863               break;
26864             case TABLE:
26865               //=== NEEDBITS(14); */
26866               while (bits < 14) {
26867                 if (have === 0) { break inf_leave; }
26868                 have--;
26869                 hold += input[next++] << bits;
26870                 bits += 8;
26871               }
26872               //===//
26873               state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
26874               //--- DROPBITS(5) ---//
26875               hold >>>= 5;
26876               bits -= 5;
26877               //---//
26878               state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
26879               //--- DROPBITS(5) ---//
26880               hold >>>= 5;
26881               bits -= 5;
26882               //---//
26883               state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
26884               //--- DROPBITS(4) ---//
26885               hold >>>= 4;
26886               bits -= 4;
26887               //---//
26888         //#ifndef PKZIP_BUG_WORKAROUND
26889               if (state.nlen > 286 || state.ndist > 30) {
26890                 strm.msg = 'too many length or distance symbols';
26891                 state.mode = BAD;
26892                 break;
26893               }
26894         //#endif
26895               //Tracev((stderr, "inflate:       table sizes ok\n"));
26896               state.have = 0;
26897               state.mode = LENLENS;
26898               /* falls through */
26899             case LENLENS:
26900               while (state.have < state.ncode) {
26901                 //=== NEEDBITS(3);
26902                 while (bits < 3) {
26903                   if (have === 0) { break inf_leave; }
26904                   have--;
26905                   hold += input[next++] << bits;
26906                   bits += 8;
26907                 }
26908                 //===//
26909                 state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
26910                 //--- DROPBITS(3) ---//
26911                 hold >>>= 3;
26912                 bits -= 3;
26913                 //---//
26914               }
26915               while (state.have < 19) {
26916                 state.lens[order[state.have++]] = 0;
26917               }
26918               // We have separate tables & no pointers. 2 commented lines below not needed.
26919               //state.next = state.codes;
26920               //state.lencode = state.next;
26921               // Switch to use dynamic table
26922               state.lencode = state.lendyn;
26923               state.lenbits = 7;
26924
26925               opts = {bits: state.lenbits};
26926               ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
26927               state.lenbits = opts.bits;
26928
26929               if (ret) {
26930                 strm.msg = 'invalid code lengths set';
26931                 state.mode = BAD;
26932                 break;
26933               }
26934               //Tracev((stderr, "inflate:       code lengths ok\n"));
26935               state.have = 0;
26936               state.mode = CODELENS;
26937               /* falls through */
26938             case CODELENS:
26939               while (state.have < state.nlen + state.ndist) {
26940                 for (;;) {
26941                   here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
26942                   here_bits = here >>> 24;
26943                   here_op = (here >>> 16) & 0xff;
26944                   here_val = here & 0xffff;
26945
26946                   if ((here_bits) <= bits) { break; }
26947                   //--- PULLBYTE() ---//
26948                   if (have === 0) { break inf_leave; }
26949                   have--;
26950                   hold += input[next++] << bits;
26951                   bits += 8;
26952                   //---//
26953                 }
26954                 if (here_val < 16) {
26955                   //--- DROPBITS(here.bits) ---//
26956                   hold >>>= here_bits;
26957                   bits -= here_bits;
26958                   //---//
26959                   state.lens[state.have++] = here_val;
26960                 }
26961                 else {
26962                   if (here_val === 16) {
26963                     //=== NEEDBITS(here.bits + 2);
26964                     n = here_bits + 2;
26965                     while (bits < n) {
26966                       if (have === 0) { break inf_leave; }
26967                       have--;
26968                       hold += input[next++] << bits;
26969                       bits += 8;
26970                     }
26971                     //===//
26972                     //--- DROPBITS(here.bits) ---//
26973                     hold >>>= here_bits;
26974                     bits -= here_bits;
26975                     //---//
26976                     if (state.have === 0) {
26977                       strm.msg = 'invalid bit length repeat';
26978                       state.mode = BAD;
26979                       break;
26980                     }
26981                     len = state.lens[state.have - 1];
26982                     copy = 3 + (hold & 0x03);//BITS(2);
26983                     //--- DROPBITS(2) ---//
26984                     hold >>>= 2;
26985                     bits -= 2;
26986                     //---//
26987                   }
26988                   else if (here_val === 17) {
26989                     //=== NEEDBITS(here.bits + 3);
26990                     n = here_bits + 3;
26991                     while (bits < n) {
26992                       if (have === 0) { break inf_leave; }
26993                       have--;
26994                       hold += input[next++] << bits;
26995                       bits += 8;
26996                     }
26997                     //===//
26998                     //--- DROPBITS(here.bits) ---//
26999                     hold >>>= here_bits;
27000                     bits -= here_bits;
27001                     //---//
27002                     len = 0;
27003                     copy = 3 + (hold & 0x07);//BITS(3);
27004                     //--- DROPBITS(3) ---//
27005                     hold >>>= 3;
27006                     bits -= 3;
27007                     //---//
27008                   }
27009                   else {
27010                     //=== NEEDBITS(here.bits + 7);
27011                     n = here_bits + 7;
27012                     while (bits < n) {
27013                       if (have === 0) { break inf_leave; }
27014                       have--;
27015                       hold += input[next++] << bits;
27016                       bits += 8;
27017                     }
27018                     //===//
27019                     //--- DROPBITS(here.bits) ---//
27020                     hold >>>= here_bits;
27021                     bits -= here_bits;
27022                     //---//
27023                     len = 0;
27024                     copy = 11 + (hold & 0x7f);//BITS(7);
27025                     //--- DROPBITS(7) ---//
27026                     hold >>>= 7;
27027                     bits -= 7;
27028                     //---//
27029                   }
27030                   if (state.have + copy > state.nlen + state.ndist) {
27031                     strm.msg = 'invalid bit length repeat';
27032                     state.mode = BAD;
27033                     break;
27034                   }
27035                   while (copy--) {
27036                     state.lens[state.have++] = len;
27037                   }
27038                 }
27039               }
27040
27041               /* handle error breaks in while */
27042               if (state.mode === BAD) { break; }
27043
27044               /* check for end-of-block code (better have one) */
27045               if (state.lens[256] === 0) {
27046                 strm.msg = 'invalid code -- missing end-of-block';
27047                 state.mode = BAD;
27048                 break;
27049               }
27050
27051               /* build code tables -- note: do not change the lenbits or distbits
27052                  values here (9 and 6) without reading the comments in inftrees.h
27053                  concerning the ENOUGH constants, which depend on those values */
27054               state.lenbits = 9;
27055
27056               opts = {bits: state.lenbits};
27057               ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
27058               // We have separate tables & no pointers. 2 commented lines below not needed.
27059               // state.next_index = opts.table_index;
27060               state.lenbits = opts.bits;
27061               // state.lencode = state.next;
27062
27063               if (ret) {
27064                 strm.msg = 'invalid literal/lengths set';
27065                 state.mode = BAD;
27066                 break;
27067               }
27068
27069               state.distbits = 6;
27070               //state.distcode.copy(state.codes);
27071               // Switch to use dynamic table
27072               state.distcode = state.distdyn;
27073               opts = {bits: state.distbits};
27074               ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
27075               // We have separate tables & no pointers. 2 commented lines below not needed.
27076               // state.next_index = opts.table_index;
27077               state.distbits = opts.bits;
27078               // state.distcode = state.next;
27079
27080               if (ret) {
27081                 strm.msg = 'invalid distances set';
27082                 state.mode = BAD;
27083                 break;
27084               }
27085               //Tracev((stderr, 'inflate:       codes ok\n'));
27086               state.mode = LEN_;
27087               if (flush === Z_TREES) { break inf_leave; }
27088               /* falls through */
27089             case LEN_:
27090               state.mode = LEN;
27091               /* falls through */
27092             case LEN:
27093               if (have >= 6 && left >= 258) {
27094                 //--- RESTORE() ---
27095                 strm.next_out = put;
27096                 strm.avail_out = left;
27097                 strm.next_in = next;
27098                 strm.avail_in = have;
27099                 state.hold = hold;
27100                 state.bits = bits;
27101                 //---
27102                 inflate_fast(strm, _out);
27103                 //--- LOAD() ---
27104                 put = strm.next_out;
27105                 output = strm.output;
27106                 left = strm.avail_out;
27107                 next = strm.next_in;
27108                 input = strm.input;
27109                 have = strm.avail_in;
27110                 hold = state.hold;
27111                 bits = state.bits;
27112                 //---
27113
27114                 if (state.mode === TYPE) {
27115                   state.back = -1;
27116                 }
27117                 break;
27118               }
27119               state.back = 0;
27120               for (;;) {
27121                 here = state.lencode[hold & ((1 << state.lenbits) -1)];  /*BITS(state.lenbits)*/
27122                 here_bits = here >>> 24;
27123                 here_op = (here >>> 16) & 0xff;
27124                 here_val = here & 0xffff;
27125
27126                 if (here_bits <= bits) { break; }
27127                 //--- PULLBYTE() ---//
27128                 if (have === 0) { break inf_leave; }
27129                 have--;
27130                 hold += input[next++] << bits;
27131                 bits += 8;
27132                 //---//
27133               }
27134               if (here_op && (here_op & 0xf0) === 0) {
27135                 last_bits = here_bits;
27136                 last_op = here_op;
27137                 last_val = here_val;
27138                 for (;;) {
27139                   here = state.lencode[last_val +
27140                           ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
27141                   here_bits = here >>> 24;
27142                   here_op = (here >>> 16) & 0xff;
27143                   here_val = here & 0xffff;
27144
27145                   if ((last_bits + here_bits) <= bits) { break; }
27146                   //--- PULLBYTE() ---//
27147                   if (have === 0) { break inf_leave; }
27148                   have--;
27149                   hold += input[next++] << bits;
27150                   bits += 8;
27151                   //---//
27152                 }
27153                 //--- DROPBITS(last.bits) ---//
27154                 hold >>>= last_bits;
27155                 bits -= last_bits;
27156                 //---//
27157                 state.back += last_bits;
27158               }
27159               //--- DROPBITS(here.bits) ---//
27160               hold >>>= here_bits;
27161               bits -= here_bits;
27162               //---//
27163               state.back += here_bits;
27164               state.length = here_val;
27165               if (here_op === 0) {
27166                 //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
27167                 //        "inflate:         literal '%c'\n" :
27168                 //        "inflate:         literal 0x%02x\n", here.val));
27169                 state.mode = LIT;
27170                 break;
27171               }
27172               if (here_op & 32) {
27173                 //Tracevv((stderr, "inflate:         end of block\n"));
27174                 state.back = -1;
27175                 state.mode = TYPE;
27176                 break;
27177               }
27178               if (here_op & 64) {
27179                 strm.msg = 'invalid literal/length code';
27180                 state.mode = BAD;
27181                 break;
27182               }
27183               state.extra = here_op & 15;
27184               state.mode = LENEXT;
27185               /* falls through */
27186             case LENEXT:
27187               if (state.extra) {
27188                 //=== NEEDBITS(state.extra);
27189                 n = state.extra;
27190                 while (bits < n) {
27191                   if (have === 0) { break inf_leave; }
27192                   have--;
27193                   hold += input[next++] << bits;
27194                   bits += 8;
27195                 }
27196                 //===//
27197                 state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
27198                 //--- DROPBITS(state.extra) ---//
27199                 hold >>>= state.extra;
27200                 bits -= state.extra;
27201                 //---//
27202                 state.back += state.extra;
27203               }
27204               //Tracevv((stderr, "inflate:         length %u\n", state.length));
27205               state.was = state.length;
27206               state.mode = DIST;
27207               /* falls through */
27208             case DIST:
27209               for (;;) {
27210                 here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/
27211                 here_bits = here >>> 24;
27212                 here_op = (here >>> 16) & 0xff;
27213                 here_val = here & 0xffff;
27214
27215                 if ((here_bits) <= bits) { break; }
27216                 //--- PULLBYTE() ---//
27217                 if (have === 0) { break inf_leave; }
27218                 have--;
27219                 hold += input[next++] << bits;
27220                 bits += 8;
27221                 //---//
27222               }
27223               if ((here_op & 0xf0) === 0) {
27224                 last_bits = here_bits;
27225                 last_op = here_op;
27226                 last_val = here_val;
27227                 for (;;) {
27228                   here = state.distcode[last_val +
27229                           ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
27230                   here_bits = here >>> 24;
27231                   here_op = (here >>> 16) & 0xff;
27232                   here_val = here & 0xffff;
27233
27234                   if ((last_bits + here_bits) <= bits) { break; }
27235                   //--- PULLBYTE() ---//
27236                   if (have === 0) { break inf_leave; }
27237                   have--;
27238                   hold += input[next++] << bits;
27239                   bits += 8;
27240                   //---//
27241                 }
27242                 //--- DROPBITS(last.bits) ---//
27243                 hold >>>= last_bits;
27244                 bits -= last_bits;
27245                 //---//
27246                 state.back += last_bits;
27247               }
27248               //--- DROPBITS(here.bits) ---//
27249               hold >>>= here_bits;
27250               bits -= here_bits;
27251               //---//
27252               state.back += here_bits;
27253               if (here_op & 64) {
27254                 strm.msg = 'invalid distance code';
27255                 state.mode = BAD;
27256                 break;
27257               }
27258               state.offset = here_val;
27259               state.extra = (here_op) & 15;
27260               state.mode = DISTEXT;
27261               /* falls through */
27262             case DISTEXT:
27263               if (state.extra) {
27264                 //=== NEEDBITS(state.extra);
27265                 n = state.extra;
27266                 while (bits < n) {
27267                   if (have === 0) { break inf_leave; }
27268                   have--;
27269                   hold += input[next++] << bits;
27270                   bits += 8;
27271                 }
27272                 //===//
27273                 state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
27274                 //--- DROPBITS(state.extra) ---//
27275                 hold >>>= state.extra;
27276                 bits -= state.extra;
27277                 //---//
27278                 state.back += state.extra;
27279               }
27280         //#ifdef INFLATE_STRICT
27281               if (state.offset > state.dmax) {
27282                 strm.msg = 'invalid distance too far back';
27283                 state.mode = BAD;
27284                 break;
27285               }
27286         //#endif
27287               //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
27288               state.mode = MATCH;
27289               /* falls through */
27290             case MATCH:
27291               if (left === 0) { break inf_leave; }
27292               copy = _out - left;
27293               if (state.offset > copy) {         /* copy from window */
27294                 copy = state.offset - copy;
27295                 if (copy > state.whave) {
27296                   if (state.sane) {
27297                     strm.msg = 'invalid distance too far back';
27298                     state.mode = BAD;
27299                     break;
27300                   }
27301         // (!) This block is disabled in zlib defailts,
27302         // don't enable it for binary compatibility
27303         //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
27304         //          Trace((stderr, "inflate.c too far\n"));
27305         //          copy -= state.whave;
27306         //          if (copy > state.length) { copy = state.length; }
27307         //          if (copy > left) { copy = left; }
27308         //          left -= copy;
27309         //          state.length -= copy;
27310         //          do {
27311         //            output[put++] = 0;
27312         //          } while (--copy);
27313         //          if (state.length === 0) { state.mode = LEN; }
27314         //          break;
27315         //#endif
27316                 }
27317                 if (copy > state.wnext) {
27318                   copy -= state.wnext;
27319                   from = state.wsize - copy;
27320                 }
27321                 else {
27322                   from = state.wnext - copy;
27323                 }
27324                 if (copy > state.length) { copy = state.length; }
27325                 from_source = state.window;
27326               }
27327               else {                              /* copy from output */
27328                 from_source = output;
27329                 from = put - state.offset;
27330                 copy = state.length;
27331               }
27332               if (copy > left) { copy = left; }
27333               left -= copy;
27334               state.length -= copy;
27335               do {
27336                 output[put++] = from_source[from++];
27337               } while (--copy);
27338               if (state.length === 0) { state.mode = LEN; }
27339               break;
27340             case LIT:
27341               if (left === 0) { break inf_leave; }
27342               output[put++] = state.length;
27343               left--;
27344               state.mode = LEN;
27345               break;
27346             case CHECK:
27347               if (state.wrap) {
27348                 //=== NEEDBITS(32);
27349                 while (bits < 32) {
27350                   if (have === 0) { break inf_leave; }
27351                   have--;
27352                   // Use '|' insdead of '+' to make sure that result is signed
27353                   hold |= input[next++] << bits;
27354                   bits += 8;
27355                 }
27356                 //===//
27357                 _out -= left;
27358                 strm.total_out += _out;
27359                 state.total += _out;
27360                 if (_out) {
27361                   strm.adler = state.check =
27362                       /*UPDATE(state.check, put - _out, _out);*/
27363                       (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
27364
27365                 }
27366                 _out = left;
27367                 // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too
27368                 if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {
27369                   strm.msg = 'incorrect data check';
27370                   state.mode = BAD;
27371                   break;
27372                 }
27373                 //=== INITBITS();
27374                 hold = 0;
27375                 bits = 0;
27376                 //===//
27377                 //Tracev((stderr, "inflate:   check matches trailer\n"));
27378               }
27379               state.mode = LENGTH;
27380               /* falls through */
27381             case LENGTH:
27382               if (state.wrap && state.flags) {
27383                 //=== NEEDBITS(32);
27384                 while (bits < 32) {
27385                   if (have === 0) { break inf_leave; }
27386                   have--;
27387                   hold += input[next++] << bits;
27388                   bits += 8;
27389                 }
27390                 //===//
27391                 if (hold !== (state.total & 0xffffffff)) {
27392                   strm.msg = 'incorrect length check';
27393                   state.mode = BAD;
27394                   break;
27395                 }
27396                 //=== INITBITS();
27397                 hold = 0;
27398                 bits = 0;
27399                 //===//
27400                 //Tracev((stderr, "inflate:   length matches trailer\n"));
27401               }
27402               state.mode = DONE;
27403               /* falls through */
27404             case DONE:
27405               ret = Z_STREAM_END;
27406               break inf_leave;
27407             case BAD:
27408               ret = Z_DATA_ERROR;
27409               break inf_leave;
27410             case MEM:
27411               return Z_MEM_ERROR;
27412             case SYNC:
27413               /* falls through */
27414             default:
27415               return Z_STREAM_ERROR;
27416             }
27417           }
27418
27419           // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
27420
27421           /*
27422              Return from inflate(), updating the total counts and the check value.
27423              If there was no progress during the inflate() call, return a buffer
27424              error.  Call updatewindow() to create and/or update the window state.
27425              Note: a memory error from inflate() is non-recoverable.
27426            */
27427
27428           //--- RESTORE() ---
27429           strm.next_out = put;
27430           strm.avail_out = left;
27431           strm.next_in = next;
27432           strm.avail_in = have;
27433           state.hold = hold;
27434           state.bits = bits;
27435           //---
27436
27437           if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
27438                               (state.mode < CHECK || flush !== Z_FINISH))) {
27439             if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
27440               state.mode = MEM;
27441               return Z_MEM_ERROR;
27442             }
27443           }
27444           _in -= strm.avail_in;
27445           _out -= strm.avail_out;
27446           strm.total_in += _in;
27447           strm.total_out += _out;
27448           state.total += _out;
27449           if (state.wrap && _out) {
27450             strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
27451               (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
27452           }
27453           strm.data_type = state.bits + (state.last ? 64 : 0) +
27454                             (state.mode === TYPE ? 128 : 0) +
27455                             (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
27456           if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
27457             ret = Z_BUF_ERROR;
27458           }
27459           return ret;
27460         }
27461
27462         function inflateEnd(strm) {
27463
27464           if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
27465             return Z_STREAM_ERROR;
27466           }
27467
27468           var state = strm.state;
27469           if (state.window) {
27470             state.window = null;
27471           }
27472           strm.state = null;
27473           return Z_OK;
27474         }
27475
27476         function inflateGetHeader(strm, head) {
27477           var state;
27478
27479           /* check state */
27480           if (!strm || !strm.state) { return Z_STREAM_ERROR; }
27481           state = strm.state;
27482           if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
27483
27484           /* save header structure */
27485           state.head = head;
27486           head.done = false;
27487           return Z_OK;
27488         }
27489
27490
27491         exports.inflateReset = inflateReset;
27492         exports.inflateReset2 = inflateReset2;
27493         exports.inflateResetKeep = inflateResetKeep;
27494         exports.inflateInit = inflateInit;
27495         exports.inflateInit2 = inflateInit2;
27496         exports.inflate = inflate;
27497         exports.inflateEnd = inflateEnd;
27498         exports.inflateGetHeader = inflateGetHeader;
27499         exports.inflateInfo = 'pako inflate (from Nodeca project)';
27500
27501         /* Not implemented
27502         exports.inflateCopy = inflateCopy;
27503         exports.inflateGetDictionary = inflateGetDictionary;
27504         exports.inflateMark = inflateMark;
27505         exports.inflatePrime = inflatePrime;
27506         exports.inflateSetDictionary = inflateSetDictionary;
27507         exports.inflateSync = inflateSync;
27508         exports.inflateSyncPoint = inflateSyncPoint;
27509         exports.inflateUndermine = inflateUndermine;
27510         */
27511
27512
27513 /***/ },
27514 /* 57 */
27515 /***/ function(module, exports) {
27516
27517         'use strict';
27518
27519         // See state defs from inflate.js
27520         var BAD = 30;       /* got a data error -- remain here until reset */
27521         var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
27522
27523         /*
27524            Decode literal, length, and distance codes and write out the resulting
27525            literal and match bytes until either not enough input or output is
27526            available, an end-of-block is encountered, or a data error is encountered.
27527            When large enough input and output buffers are supplied to inflate(), for
27528            example, a 16K input buffer and a 64K output buffer, more than 95% of the
27529            inflate execution time is spent in this routine.
27530
27531            Entry assumptions:
27532
27533                 state.mode === LEN
27534                 strm.avail_in >= 6
27535                 strm.avail_out >= 258
27536                 start >= strm.avail_out
27537                 state.bits < 8
27538
27539            On return, state.mode is one of:
27540
27541                 LEN -- ran out of enough output space or enough available input
27542                 TYPE -- reached end of block code, inflate() to interpret next block
27543                 BAD -- error in block data
27544
27545            Notes:
27546
27547             - The maximum input bits used by a length/distance pair is 15 bits for the
27548               length code, 5 bits for the length extra, 15 bits for the distance code,
27549               and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
27550               Therefore if strm.avail_in >= 6, then there is enough input to avoid
27551               checking for available input while decoding.
27552
27553             - The maximum bytes that a single length/distance pair can output is 258
27554               bytes, which is the maximum length that can be coded.  inflate_fast()
27555               requires strm.avail_out >= 258 for each loop to avoid checking for
27556               output space.
27557          */
27558         module.exports = function inflate_fast(strm, start) {
27559           var state;
27560           var _in;                    /* local strm.input */
27561           var last;                   /* have enough input while in < last */
27562           var _out;                   /* local strm.output */
27563           var beg;                    /* inflate()'s initial strm.output */
27564           var end;                    /* while out < end, enough space available */
27565         //#ifdef INFLATE_STRICT
27566           var dmax;                   /* maximum distance from zlib header */
27567         //#endif
27568           var wsize;                  /* window size or zero if not using window */
27569           var whave;                  /* valid bytes in the window */
27570           var wnext;                  /* window write index */
27571           // Use `s_window` instead `window`, avoid conflict with instrumentation tools
27572           var s_window;               /* allocated sliding window, if wsize != 0 */
27573           var hold;                   /* local strm.hold */
27574           var bits;                   /* local strm.bits */
27575           var lcode;                  /* local strm.lencode */
27576           var dcode;                  /* local strm.distcode */
27577           var lmask;                  /* mask for first level of length codes */
27578           var dmask;                  /* mask for first level of distance codes */
27579           var here;                   /* retrieved table entry */
27580           var op;                     /* code bits, operation, extra bits, or */
27581                                       /*  window position, window bytes to copy */
27582           var len;                    /* match length, unused bytes */
27583           var dist;                   /* match distance */
27584           var from;                   /* where to copy match from */
27585           var from_source;
27586
27587
27588           var input, output; // JS specific, because we have no pointers
27589
27590           /* copy state to local variables */
27591           state = strm.state;
27592           //here = state.here;
27593           _in = strm.next_in;
27594           input = strm.input;
27595           last = _in + (strm.avail_in - 5);
27596           _out = strm.next_out;
27597           output = strm.output;
27598           beg = _out - (start - strm.avail_out);
27599           end = _out + (strm.avail_out - 257);
27600         //#ifdef INFLATE_STRICT
27601           dmax = state.dmax;
27602         //#endif
27603           wsize = state.wsize;
27604           whave = state.whave;
27605           wnext = state.wnext;
27606           s_window = state.window;
27607           hold = state.hold;
27608           bits = state.bits;
27609           lcode = state.lencode;
27610           dcode = state.distcode;
27611           lmask = (1 << state.lenbits) - 1;
27612           dmask = (1 << state.distbits) - 1;
27613
27614
27615           /* decode literals and length/distances until end-of-block or not enough
27616              input data or output space */
27617
27618           top:
27619           do {
27620             if (bits < 15) {
27621               hold += input[_in++] << bits;
27622               bits += 8;
27623               hold += input[_in++] << bits;
27624               bits += 8;
27625             }
27626
27627             here = lcode[hold & lmask];
27628
27629             dolen:
27630             for (;;) { // Goto emulation
27631               op = here >>> 24/*here.bits*/;
27632               hold >>>= op;
27633               bits -= op;
27634               op = (here >>> 16) & 0xff/*here.op*/;
27635               if (op === 0) {                          /* literal */
27636                 //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
27637                 //        "inflate:         literal '%c'\n" :
27638                 //        "inflate:         literal 0x%02x\n", here.val));
27639                 output[_out++] = here & 0xffff/*here.val*/;
27640               }
27641               else if (op & 16) {                     /* length base */
27642                 len = here & 0xffff/*here.val*/;
27643                 op &= 15;                           /* number of extra bits */
27644                 if (op) {
27645                   if (bits < op) {
27646                     hold += input[_in++] << bits;
27647                     bits += 8;
27648                   }
27649                   len += hold & ((1 << op) - 1);
27650                   hold >>>= op;
27651                   bits -= op;
27652                 }
27653                 //Tracevv((stderr, "inflate:         length %u\n", len));
27654                 if (bits < 15) {
27655                   hold += input[_in++] << bits;
27656                   bits += 8;
27657                   hold += input[_in++] << bits;
27658                   bits += 8;
27659                 }
27660                 here = dcode[hold & dmask];
27661
27662                 dodist:
27663                 for (;;) { // goto emulation
27664                   op = here >>> 24/*here.bits*/;
27665                   hold >>>= op;
27666                   bits -= op;
27667                   op = (here >>> 16) & 0xff/*here.op*/;
27668
27669                   if (op & 16) {                      /* distance base */
27670                     dist = here & 0xffff/*here.val*/;
27671                     op &= 15;                       /* number of extra bits */
27672                     if (bits < op) {
27673                       hold += input[_in++] << bits;
27674                       bits += 8;
27675                       if (bits < op) {
27676                         hold += input[_in++] << bits;
27677                         bits += 8;
27678                       }
27679                     }
27680                     dist += hold & ((1 << op) - 1);
27681         //#ifdef INFLATE_STRICT
27682                     if (dist > dmax) {
27683                       strm.msg = 'invalid distance too far back';
27684                       state.mode = BAD;
27685                       break top;
27686                     }
27687         //#endif
27688                     hold >>>= op;
27689                     bits -= op;
27690                     //Tracevv((stderr, "inflate:         distance %u\n", dist));
27691                     op = _out - beg;                /* max distance in output */
27692                     if (dist > op) {                /* see if copy from window */
27693                       op = dist - op;               /* distance back in window */
27694                       if (op > whave) {
27695                         if (state.sane) {
27696                           strm.msg = 'invalid distance too far back';
27697                           state.mode = BAD;
27698                           break top;
27699                         }
27700
27701         // (!) This block is disabled in zlib defailts,
27702         // don't enable it for binary compatibility
27703         //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
27704         //                if (len <= op - whave) {
27705         //                  do {
27706         //                    output[_out++] = 0;
27707         //                  } while (--len);
27708         //                  continue top;
27709         //                }
27710         //                len -= op - whave;
27711         //                do {
27712         //                  output[_out++] = 0;
27713         //                } while (--op > whave);
27714         //                if (op === 0) {
27715         //                  from = _out - dist;
27716         //                  do {
27717         //                    output[_out++] = output[from++];
27718         //                  } while (--len);
27719         //                  continue top;
27720         //                }
27721         //#endif
27722                       }
27723                       from = 0; // window index
27724                       from_source = s_window;
27725                       if (wnext === 0) {           /* very common case */
27726                         from += wsize - op;
27727                         if (op < len) {         /* some from window */
27728                           len -= op;
27729                           do {
27730                             output[_out++] = s_window[from++];
27731                           } while (--op);
27732                           from = _out - dist;  /* rest from output */
27733                           from_source = output;
27734                         }
27735                       }
27736                       else if (wnext < op) {      /* wrap around window */
27737                         from += wsize + wnext - op;
27738                         op -= wnext;
27739                         if (op < len) {         /* some from end of window */
27740                           len -= op;
27741                           do {
27742                             output[_out++] = s_window[from++];
27743                           } while (--op);
27744                           from = 0;
27745                           if (wnext < len) {  /* some from start of window */
27746                             op = wnext;
27747                             len -= op;
27748                             do {
27749                               output[_out++] = s_window[from++];
27750                             } while (--op);
27751                             from = _out - dist;      /* rest from output */
27752                             from_source = output;
27753                           }
27754                         }
27755                       }
27756                       else {                      /* contiguous in window */
27757                         from += wnext - op;
27758                         if (op < len) {         /* some from window */
27759                           len -= op;
27760                           do {
27761                             output[_out++] = s_window[from++];
27762                           } while (--op);
27763                           from = _out - dist;  /* rest from output */
27764                           from_source = output;
27765                         }
27766                       }
27767                       while (len > 2) {
27768                         output[_out++] = from_source[from++];
27769                         output[_out++] = from_source[from++];
27770                         output[_out++] = from_source[from++];
27771                         len -= 3;
27772                       }
27773                       if (len) {
27774                         output[_out++] = from_source[from++];
27775                         if (len > 1) {
27776                           output[_out++] = from_source[from++];
27777                         }
27778                       }
27779                     }
27780                     else {
27781                       from = _out - dist;          /* copy direct from output */
27782                       do {                        /* minimum length is three */
27783                         output[_out++] = output[from++];
27784                         output[_out++] = output[from++];
27785                         output[_out++] = output[from++];
27786                         len -= 3;
27787                       } while (len > 2);
27788                       if (len) {
27789                         output[_out++] = output[from++];
27790                         if (len > 1) {
27791                           output[_out++] = output[from++];
27792                         }
27793                       }
27794                     }
27795                   }
27796                   else if ((op & 64) === 0) {          /* 2nd level distance code */
27797                     here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
27798                     continue dodist;
27799                   }
27800                   else {
27801                     strm.msg = 'invalid distance code';
27802                     state.mode = BAD;
27803                     break top;
27804                   }
27805
27806                   break; // need to emulate goto via "continue"
27807                 }
27808               }
27809               else if ((op & 64) === 0) {              /* 2nd level length code */
27810                 here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
27811                 continue dolen;
27812               }
27813               else if (op & 32) {                     /* end-of-block */
27814                 //Tracevv((stderr, "inflate:         end of block\n"));
27815                 state.mode = TYPE;
27816                 break top;
27817               }
27818               else {
27819                 strm.msg = 'invalid literal/length code';
27820                 state.mode = BAD;
27821                 break top;
27822               }
27823
27824               break; // need to emulate goto via "continue"
27825             }
27826           } while (_in < last && _out < end);
27827
27828           /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
27829           len = bits >> 3;
27830           _in -= len;
27831           bits -= len << 3;
27832           hold &= (1 << bits) - 1;
27833
27834           /* update state and return */
27835           strm.next_in = _in;
27836           strm.next_out = _out;
27837           strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
27838           strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
27839           state.hold = hold;
27840           state.bits = bits;
27841           return;
27842         };
27843
27844
27845 /***/ },
27846 /* 58 */
27847 /***/ function(module, exports, __webpack_require__) {
27848
27849         'use strict';
27850
27851
27852         var utils = __webpack_require__(52);
27853
27854         var MAXBITS = 15;
27855         var ENOUGH_LENS = 852;
27856         var ENOUGH_DISTS = 592;
27857         //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
27858
27859         var CODES = 0;
27860         var LENS = 1;
27861         var DISTS = 2;
27862
27863         var lbase = [ /* Length codes 257..285 base */
27864           3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
27865           35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
27866         ];
27867
27868         var lext = [ /* Length codes 257..285 extra */
27869           16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
27870           19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
27871         ];
27872
27873         var dbase = [ /* Distance codes 0..29 base */
27874           1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
27875           257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
27876           8193, 12289, 16385, 24577, 0, 0
27877         ];
27878
27879         var dext = [ /* Distance codes 0..29 extra */
27880           16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
27881           23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
27882           28, 28, 29, 29, 64, 64
27883         ];
27884
27885         module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
27886         {
27887           var bits = opts.bits;
27888               //here = opts.here; /* table entry for duplication */
27889
27890           var len = 0;               /* a code's length in bits */
27891           var sym = 0;               /* index of code symbols */
27892           var min = 0, max = 0;          /* minimum and maximum code lengths */
27893           var root = 0;              /* number of index bits for root table */
27894           var curr = 0;              /* number of index bits for current table */
27895           var drop = 0;              /* code bits to drop for sub-table */
27896           var left = 0;                   /* number of prefix codes available */
27897           var used = 0;              /* code entries in table used */
27898           var huff = 0;              /* Huffman code */
27899           var incr;              /* for incrementing code, index */
27900           var fill;              /* index for replicating entries */
27901           var low;               /* low bits for current root entry */
27902           var mask;              /* mask for low root bits */
27903           var next;             /* next available space in table */
27904           var base = null;     /* base value table to use */
27905           var base_index = 0;
27906         //  var shoextra;    /* extra bits table to use */
27907           var end;                    /* use base and extra for symbol > end */
27908           var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];    /* number of codes of each length */
27909           var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];     /* offsets in table for each length */
27910           var extra = null;
27911           var extra_index = 0;
27912
27913           var here_bits, here_op, here_val;
27914
27915           /*
27916            Process a set of code lengths to create a canonical Huffman code.  The
27917            code lengths are lens[0..codes-1].  Each length corresponds to the
27918            symbols 0..codes-1.  The Huffman code is generated by first sorting the
27919            symbols by length from short to long, and retaining the symbol order
27920            for codes with equal lengths.  Then the code starts with all zero bits
27921            for the first code of the shortest length, and the codes are integer
27922            increments for the same length, and zeros are appended as the length
27923            increases.  For the deflate format, these bits are stored backwards
27924            from their more natural integer increment ordering, and so when the
27925            decoding tables are built in the large loop below, the integer codes
27926            are incremented backwards.
27927
27928            This routine assumes, but does not check, that all of the entries in
27929            lens[] are in the range 0..MAXBITS.  The caller must assure this.
27930            1..MAXBITS is interpreted as that code length.  zero means that that
27931            symbol does not occur in this code.
27932
27933            The codes are sorted by computing a count of codes for each length,
27934            creating from that a table of starting indices for each length in the
27935            sorted table, and then entering the symbols in order in the sorted
27936            table.  The sorted table is work[], with that space being provided by
27937            the caller.
27938
27939            The length counts are used for other purposes as well, i.e. finding
27940            the minimum and maximum length codes, determining if there are any
27941            codes at all, checking for a valid set of lengths, and looking ahead
27942            at length counts to determine sub-table sizes when building the
27943            decoding tables.
27944            */
27945
27946           /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
27947           for (len = 0; len <= MAXBITS; len++) {
27948             count[len] = 0;
27949           }
27950           for (sym = 0; sym < codes; sym++) {
27951             count[lens[lens_index + sym]]++;
27952           }
27953
27954           /* bound code lengths, force root to be within code lengths */
27955           root = bits;
27956           for (max = MAXBITS; max >= 1; max--) {
27957             if (count[max] !== 0) { break; }
27958           }
27959           if (root > max) {
27960             root = max;
27961           }
27962           if (max === 0) {                     /* no symbols to code at all */
27963             //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
27964             //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
27965             //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
27966             table[table_index++] = (1 << 24) | (64 << 16) | 0;
27967
27968
27969             //table.op[opts.table_index] = 64;
27970             //table.bits[opts.table_index] = 1;
27971             //table.val[opts.table_index++] = 0;
27972             table[table_index++] = (1 << 24) | (64 << 16) | 0;
27973
27974             opts.bits = 1;
27975             return 0;     /* no symbols, but wait for decoding to report error */
27976           }
27977           for (min = 1; min < max; min++) {
27978             if (count[min] !== 0) { break; }
27979           }
27980           if (root < min) {
27981             root = min;
27982           }
27983
27984           /* check for an over-subscribed or incomplete set of lengths */
27985           left = 1;
27986           for (len = 1; len <= MAXBITS; len++) {
27987             left <<= 1;
27988             left -= count[len];
27989             if (left < 0) {
27990               return -1;
27991             }        /* over-subscribed */
27992           }
27993           if (left > 0 && (type === CODES || max !== 1)) {
27994             return -1;                      /* incomplete set */
27995           }
27996
27997           /* generate offsets into symbol table for each length for sorting */
27998           offs[1] = 0;
27999           for (len = 1; len < MAXBITS; len++) {
28000             offs[len + 1] = offs[len] + count[len];
28001           }
28002
28003           /* sort symbols by length, by symbol order within each length */
28004           for (sym = 0; sym < codes; sym++) {
28005             if (lens[lens_index + sym] !== 0) {
28006               work[offs[lens[lens_index + sym]]++] = sym;
28007             }
28008           }
28009
28010           /*
28011            Create and fill in decoding tables.  In this loop, the table being
28012            filled is at next and has curr index bits.  The code being used is huff
28013            with length len.  That code is converted to an index by dropping drop
28014            bits off of the bottom.  For codes where len is less than drop + curr,
28015            those top drop + curr - len bits are incremented through all values to
28016            fill the table with replicated entries.
28017
28018            root is the number of index bits for the root table.  When len exceeds
28019            root, sub-tables are created pointed to by the root entry with an index
28020            of the low root bits of huff.  This is saved in low to check for when a
28021            new sub-table should be started.  drop is zero when the root table is
28022            being filled, and drop is root when sub-tables are being filled.
28023
28024            When a new sub-table is needed, it is necessary to look ahead in the
28025            code lengths to determine what size sub-table is needed.  The length
28026            counts are used for this, and so count[] is decremented as codes are
28027            entered in the tables.
28028
28029            used keeps track of how many table entries have been allocated from the
28030            provided *table space.  It is checked for LENS and DIST tables against
28031            the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
28032            the initial root table size constants.  See the comments in inftrees.h
28033            for more information.
28034
28035            sym increments through all symbols, and the loop terminates when
28036            all codes of length max, i.e. all codes, have been processed.  This
28037            routine permits incomplete codes, so another loop after this one fills
28038            in the rest of the decoding tables with invalid code markers.
28039            */
28040
28041           /* set up for code type */
28042           // poor man optimization - use if-else instead of switch,
28043           // to avoid deopts in old v8
28044           if (type === CODES) {
28045             base = extra = work;    /* dummy value--not used */
28046             end = 19;
28047
28048           } else if (type === LENS) {
28049             base = lbase;
28050             base_index -= 257;
28051             extra = lext;
28052             extra_index -= 257;
28053             end = 256;
28054
28055           } else {                    /* DISTS */
28056             base = dbase;
28057             extra = dext;
28058             end = -1;
28059           }
28060
28061           /* initialize opts for loop */
28062           huff = 0;                   /* starting code */
28063           sym = 0;                    /* starting code symbol */
28064           len = min;                  /* starting code length */
28065           next = table_index;              /* current table to fill in */
28066           curr = root;                /* current table index bits */
28067           drop = 0;                   /* current bits to drop from code for index */
28068           low = -1;                   /* trigger new sub-table when len > root */
28069           used = 1 << root;          /* use root table entries */
28070           mask = used - 1;            /* mask for comparing low */
28071
28072           /* check available table space */
28073           if ((type === LENS && used > ENOUGH_LENS) ||
28074             (type === DISTS && used > ENOUGH_DISTS)) {
28075             return 1;
28076           }
28077
28078           var i=0;
28079           /* process all codes and make table entries */
28080           for (;;) {
28081             i++;
28082             /* create table entry */
28083             here_bits = len - drop;
28084             if (work[sym] < end) {
28085               here_op = 0;
28086               here_val = work[sym];
28087             }
28088             else if (work[sym] > end) {
28089               here_op = extra[extra_index + work[sym]];
28090               here_val = base[base_index + work[sym]];
28091             }
28092             else {
28093               here_op = 32 + 64;         /* end of block */
28094               here_val = 0;
28095             }
28096
28097             /* replicate for those indices with low len bits equal to huff */
28098             incr = 1 << (len - drop);
28099             fill = 1 << curr;
28100             min = fill;                 /* save offset to next table */
28101             do {
28102               fill -= incr;
28103               table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
28104             } while (fill !== 0);
28105
28106             /* backwards increment the len-bit code huff */
28107             incr = 1 << (len - 1);
28108             while (huff & incr) {
28109               incr >>= 1;
28110             }
28111             if (incr !== 0) {
28112               huff &= incr - 1;
28113               huff += incr;
28114             } else {
28115               huff = 0;
28116             }
28117
28118             /* go to next symbol, update count, len */
28119             sym++;
28120             if (--count[len] === 0) {
28121               if (len === max) { break; }
28122               len = lens[lens_index + work[sym]];
28123             }
28124
28125             /* create new sub-table if needed */
28126             if (len > root && (huff & mask) !== low) {
28127               /* if first time, transition to sub-tables */
28128               if (drop === 0) {
28129                 drop = root;
28130               }
28131
28132               /* increment past last table */
28133               next += min;            /* here min is 1 << curr */
28134
28135               /* determine length of next table */
28136               curr = len - drop;
28137               left = 1 << curr;
28138               while (curr + drop < max) {
28139                 left -= count[curr + drop];
28140                 if (left <= 0) { break; }
28141                 curr++;
28142                 left <<= 1;
28143               }
28144
28145               /* check for enough space */
28146               used += 1 << curr;
28147               if ((type === LENS && used > ENOUGH_LENS) ||
28148                 (type === DISTS && used > ENOUGH_DISTS)) {
28149                 return 1;
28150               }
28151
28152               /* point entry in root table to sub-table */
28153               low = huff & mask;
28154               /*table.op[low] = curr;
28155               table.bits[low] = root;
28156               table.val[low] = next - opts.table_index;*/
28157               table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
28158             }
28159           }
28160
28161           /* fill in remaining table entry if code is incomplete (guaranteed to have
28162            at most one remaining entry, since if the code is incomplete, the
28163            maximum code length that was allowed to get this far is one bit) */
28164           if (huff !== 0) {
28165             //table.op[next + huff] = 64;            /* invalid code marker */
28166             //table.bits[next + huff] = len - drop;
28167             //table.val[next + huff] = 0;
28168             table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
28169           }
28170
28171           /* set return parameters */
28172           //opts.table_index += used;
28173           opts.bits = root;
28174           return 0;
28175         };
28176
28177
28178 /***/ },
28179 /* 59 */
28180 /***/ function(module, exports) {
28181
28182         module.exports = {
28183
28184           /* Allowed flush values; see deflate() and inflate() below for details */
28185           Z_NO_FLUSH:         0,
28186           Z_PARTIAL_FLUSH:    1,
28187           Z_SYNC_FLUSH:       2,
28188           Z_FULL_FLUSH:       3,
28189           Z_FINISH:           4,
28190           Z_BLOCK:            5,
28191           Z_TREES:            6,
28192
28193           /* Return codes for the compression/decompression functions. Negative values
28194           * are errors, positive values are used for special but normal events.
28195           */
28196           Z_OK:               0,
28197           Z_STREAM_END:       1,
28198           Z_NEED_DICT:        2,
28199           Z_ERRNO:           -1,
28200           Z_STREAM_ERROR:    -2,
28201           Z_DATA_ERROR:      -3,
28202           //Z_MEM_ERROR:     -4,
28203           Z_BUF_ERROR:       -5,
28204           //Z_VERSION_ERROR: -6,
28205
28206           /* compression levels */
28207           Z_NO_COMPRESSION:         0,
28208           Z_BEST_SPEED:             1,
28209           Z_BEST_COMPRESSION:       9,
28210           Z_DEFAULT_COMPRESSION:   -1,
28211
28212
28213           Z_FILTERED:               1,
28214           Z_HUFFMAN_ONLY:           2,
28215           Z_RLE:                    3,
28216           Z_FIXED:                  4,
28217           Z_DEFAULT_STRATEGY:       0,
28218
28219           /* Possible values of the data_type field (though see inflate()) */
28220           Z_BINARY:                 0,
28221           Z_TEXT:                   1,
28222           //Z_ASCII:                1, // = Z_TEXT (deprecated)
28223           Z_UNKNOWN:                2,
28224
28225           /* The deflate compression method */
28226           Z_DEFLATED:               8
28227           //Z_NULL:                 null // Use -1 or null inline, depending on var type
28228         };
28229
28230
28231 /***/ },
28232 /* 60 */
28233 /***/ function(module, exports, __webpack_require__) {
28234
28235         /* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
28236         //
28237         // Permission is hereby granted, free of charge, to any person obtaining a
28238         // copy of this software and associated documentation files (the
28239         // "Software"), to deal in the Software without restriction, including
28240         // without limitation the rights to use, copy, modify, merge, publish,
28241         // distribute, sublicense, and/or sell copies of the Software, and to permit
28242         // persons to whom the Software is furnished to do so, subject to the
28243         // following conditions:
28244         //
28245         // The above copyright notice and this permission notice shall be included
28246         // in all copies or substantial portions of the Software.
28247         //
28248         // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
28249         // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28250         // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
28251         // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
28252         // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
28253         // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
28254         // USE OR OTHER DEALINGS IN THE SOFTWARE.
28255
28256         var formatRegExp = /%[sdj%]/g;
28257         exports.format = function(f) {
28258           if (!isString(f)) {
28259             var objects = [];
28260             for (var i = 0; i < arguments.length; i++) {
28261               objects.push(inspect(arguments[i]));
28262             }
28263             return objects.join(' ');
28264           }
28265
28266           var i = 1;
28267           var args = arguments;
28268           var len = args.length;
28269           var str = String(f).replace(formatRegExp, function(x) {
28270             if (x === '%%') return '%';
28271             if (i >= len) return x;
28272             switch (x) {
28273               case '%s': return String(args[i++]);
28274               case '%d': return Number(args[i++]);
28275               case '%j':
28276                 try {
28277                   return JSON.stringify(args[i++]);
28278                 } catch (_) {
28279                   return '[Circular]';
28280                 }
28281               default:
28282                 return x;
28283             }
28284           });
28285           for (var x = args[i]; i < len; x = args[++i]) {
28286             if (isNull(x) || !isObject(x)) {
28287               str += ' ' + x;
28288             } else {
28289               str += ' ' + inspect(x);
28290             }
28291           }
28292           return str;
28293         };
28294
28295
28296         // Mark that a method should not be used.
28297         // Returns a modified function which warns once by default.
28298         // If --no-deprecation is set, then it is a no-op.
28299         exports.deprecate = function(fn, msg) {
28300           // Allow for deprecating things in the process of starting up.
28301           if (isUndefined(global.process)) {
28302             return function() {
28303               return exports.deprecate(fn, msg).apply(this, arguments);
28304             };
28305           }
28306
28307           if (process.noDeprecation === true) {
28308             return fn;
28309           }
28310
28311           var warned = false;
28312           function deprecated() {
28313             if (!warned) {
28314               if (process.throwDeprecation) {
28315                 throw new Error(msg);
28316               } else if (process.traceDeprecation) {
28317                 console.trace(msg);
28318               } else {
28319                 console.error(msg);
28320               }
28321               warned = true;
28322             }
28323             return fn.apply(this, arguments);
28324           }
28325
28326           return deprecated;
28327         };
28328
28329
28330         var debugs = {};
28331         var debugEnviron;
28332         exports.debuglog = function(set) {
28333           if (isUndefined(debugEnviron))
28334             debugEnviron = process.env.NODE_DEBUG || '';
28335           set = set.toUpperCase();
28336           if (!debugs[set]) {
28337             if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
28338               var pid = process.pid;
28339               debugs[set] = function() {
28340                 var msg = exports.format.apply(exports, arguments);
28341                 console.error('%s %d: %s', set, pid, msg);
28342               };
28343             } else {
28344               debugs[set] = function() {};
28345             }
28346           }
28347           return debugs[set];
28348         };
28349
28350
28351         /**
28352          * Echos the value of a value. Trys to print the value out
28353          * in the best way possible given the different types.
28354          *
28355          * @param {Object} obj The object to print out.
28356          * @param {Object} opts Optional options object that alters the output.
28357          */
28358         /* legacy: obj, showHidden, depth, colors*/
28359         function inspect(obj, opts) {
28360           // default options
28361           var ctx = {
28362             seen: [],
28363             stylize: stylizeNoColor
28364           };
28365           // legacy...
28366           if (arguments.length >= 3) ctx.depth = arguments[2];
28367           if (arguments.length >= 4) ctx.colors = arguments[3];
28368           if (isBoolean(opts)) {
28369             // legacy...
28370             ctx.showHidden = opts;
28371           } else if (opts) {
28372             // got an "options" object
28373             exports._extend(ctx, opts);
28374           }
28375           // set default options
28376           if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
28377           if (isUndefined(ctx.depth)) ctx.depth = 2;
28378           if (isUndefined(ctx.colors)) ctx.colors = false;
28379           if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
28380           if (ctx.colors) ctx.stylize = stylizeWithColor;
28381           return formatValue(ctx, obj, ctx.depth);
28382         }
28383         exports.inspect = inspect;
28384
28385
28386         // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
28387         inspect.colors = {
28388           'bold' : [1, 22],
28389           'italic' : [3, 23],
28390           'underline' : [4, 24],
28391           'inverse' : [7, 27],
28392           'white' : [37, 39],
28393           'grey' : [90, 39],
28394           'black' : [30, 39],
28395           'blue' : [34, 39],
28396           'cyan' : [36, 39],
28397           'green' : [32, 39],
28398           'magenta' : [35, 39],
28399           'red' : [31, 39],
28400           'yellow' : [33, 39]
28401         };
28402
28403         // Don't use 'blue' not visible on cmd.exe
28404         inspect.styles = {
28405           'special': 'cyan',
28406           'number': 'yellow',
28407           'boolean': 'yellow',
28408           'undefined': 'grey',
28409           'null': 'bold',
28410           'string': 'green',
28411           'date': 'magenta',
28412           // "name": intentionally not styling
28413           'regexp': 'red'
28414         };
28415
28416
28417         function stylizeWithColor(str, styleType) {
28418           var style = inspect.styles[styleType];
28419
28420           if (style) {
28421             return '\u001b[' + inspect.colors[style][0] + 'm' + str +
28422                    '\u001b[' + inspect.colors[style][1] + 'm';
28423           } else {
28424             return str;
28425           }
28426         }
28427
28428
28429         function stylizeNoColor(str, styleType) {
28430           return str;
28431         }
28432
28433
28434         function arrayToHash(array) {
28435           var hash = {};
28436
28437           array.forEach(function(val, idx) {
28438             hash[val] = true;
28439           });
28440
28441           return hash;
28442         }
28443
28444
28445         function formatValue(ctx, value, recurseTimes) {
28446           // Provide a hook for user-specified inspect functions.
28447           // Check that value is an object with an inspect function on it
28448           if (ctx.customInspect &&
28449               value &&
28450               isFunction(value.inspect) &&
28451               // Filter out the util module, it's inspect function is special
28452               value.inspect !== exports.inspect &&
28453               // Also filter out any prototype objects using the circular check.
28454               !(value.constructor && value.constructor.prototype === value)) {
28455             var ret = value.inspect(recurseTimes, ctx);
28456             if (!isString(ret)) {
28457               ret = formatValue(ctx, ret, recurseTimes);
28458             }
28459             return ret;
28460           }
28461
28462           // Primitive types cannot have properties
28463           var primitive = formatPrimitive(ctx, value);
28464           if (primitive) {
28465             return primitive;
28466           }
28467
28468           // Look up the keys of the object.
28469           var keys = Object.keys(value);
28470           var visibleKeys = arrayToHash(keys);
28471
28472           if (ctx.showHidden) {
28473             keys = Object.getOwnPropertyNames(value);
28474           }
28475
28476           // IE doesn't make error fields non-enumerable
28477           // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
28478           if (isError(value)
28479               && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
28480             return formatError(value);
28481           }
28482
28483           // Some type of object without properties can be shortcutted.
28484           if (keys.length === 0) {
28485             if (isFunction(value)) {
28486               var name = value.name ? ': ' + value.name : '';
28487               return ctx.stylize('[Function' + name + ']', 'special');
28488             }
28489             if (isRegExp(value)) {
28490               return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28491             }
28492             if (isDate(value)) {
28493               return ctx.stylize(Date.prototype.toString.call(value), 'date');
28494             }
28495             if (isError(value)) {
28496               return formatError(value);
28497             }
28498           }
28499
28500           var base = '', array = false, braces = ['{', '}'];
28501
28502           // Make Array say that they are Array
28503           if (isArray(value)) {
28504             array = true;
28505             braces = ['[', ']'];
28506           }
28507
28508           // Make functions say that they are functions
28509           if (isFunction(value)) {
28510             var n = value.name ? ': ' + value.name : '';
28511             base = ' [Function' + n + ']';
28512           }
28513
28514           // Make RegExps say that they are RegExps
28515           if (isRegExp(value)) {
28516             base = ' ' + RegExp.prototype.toString.call(value);
28517           }
28518
28519           // Make dates with properties first say the date
28520           if (isDate(value)) {
28521             base = ' ' + Date.prototype.toUTCString.call(value);
28522           }
28523
28524           // Make error with message first say the error
28525           if (isError(value)) {
28526             base = ' ' + formatError(value);
28527           }
28528
28529           if (keys.length === 0 && (!array || value.length == 0)) {
28530             return braces[0] + base + braces[1];
28531           }
28532
28533           if (recurseTimes < 0) {
28534             if (isRegExp(value)) {
28535               return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28536             } else {
28537               return ctx.stylize('[Object]', 'special');
28538             }
28539           }
28540
28541           ctx.seen.push(value);
28542
28543           var output;
28544           if (array) {
28545             output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
28546           } else {
28547             output = keys.map(function(key) {
28548               return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
28549             });
28550           }
28551
28552           ctx.seen.pop();
28553
28554           return reduceToSingleString(output, base, braces);
28555         }
28556
28557
28558         function formatPrimitive(ctx, value) {
28559           if (isUndefined(value))
28560             return ctx.stylize('undefined', 'undefined');
28561           if (isString(value)) {
28562             var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
28563                                                      .replace(/'/g, "\\'")
28564                                                      .replace(/\\"/g, '"') + '\'';
28565             return ctx.stylize(simple, 'string');
28566           }
28567           if (isNumber(value))
28568             return ctx.stylize('' + value, 'number');
28569           if (isBoolean(value))
28570             return ctx.stylize('' + value, 'boolean');
28571           // For some reason typeof null is "object", so special case here.
28572           if (isNull(value))
28573             return ctx.stylize('null', 'null');
28574         }
28575
28576
28577         function formatError(value) {
28578           return '[' + Error.prototype.toString.call(value) + ']';
28579         }
28580
28581
28582         function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
28583           var output = [];
28584           for (var i = 0, l = value.length; i < l; ++i) {
28585             if (hasOwnProperty(value, String(i))) {
28586               output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28587                   String(i), true));
28588             } else {
28589               output.push('');
28590             }
28591           }
28592           keys.forEach(function(key) {
28593             if (!key.match(/^\d+$/)) {
28594               output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28595                   key, true));
28596             }
28597           });
28598           return output;
28599         }
28600
28601
28602         function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
28603           var name, str, desc;
28604           desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
28605           if (desc.get) {
28606             if (desc.set) {
28607               str = ctx.stylize('[Getter/Setter]', 'special');
28608             } else {
28609               str = ctx.stylize('[Getter]', 'special');
28610             }
28611           } else {
28612             if (desc.set) {
28613               str = ctx.stylize('[Setter]', 'special');
28614             }
28615           }
28616           if (!hasOwnProperty(visibleKeys, key)) {
28617             name = '[' + key + ']';
28618           }
28619           if (!str) {
28620             if (ctx.seen.indexOf(desc.value) < 0) {
28621               if (isNull(recurseTimes)) {
28622                 str = formatValue(ctx, desc.value, null);
28623               } else {
28624                 str = formatValue(ctx, desc.value, recurseTimes - 1);
28625               }
28626               if (str.indexOf('\n') > -1) {
28627                 if (array) {
28628                   str = str.split('\n').map(function(line) {
28629                     return '  ' + line;
28630                   }).join('\n').substr(2);
28631                 } else {
28632                   str = '\n' + str.split('\n').map(function(line) {
28633                     return '   ' + line;
28634                   }).join('\n');
28635                 }
28636               }
28637             } else {
28638               str = ctx.stylize('[Circular]', 'special');
28639             }
28640           }
28641           if (isUndefined(name)) {
28642             if (array && key.match(/^\d+$/)) {
28643               return str;
28644             }
28645             name = JSON.stringify('' + key);
28646             if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
28647               name = name.substr(1, name.length - 2);
28648               name = ctx.stylize(name, 'name');
28649             } else {
28650               name = name.replace(/'/g, "\\'")
28651                          .replace(/\\"/g, '"')
28652                          .replace(/(^"|"$)/g, "'");
28653               name = ctx.stylize(name, 'string');
28654             }
28655           }
28656
28657           return name + ': ' + str;
28658         }
28659
28660
28661         function reduceToSingleString(output, base, braces) {
28662           var numLinesEst = 0;
28663           var length = output.reduce(function(prev, cur) {
28664             numLinesEst++;
28665             if (cur.indexOf('\n') >= 0) numLinesEst++;
28666             return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
28667           }, 0);
28668
28669           if (length > 60) {
28670             return braces[0] +
28671                    (base === '' ? '' : base + '\n ') +
28672                    ' ' +
28673                    output.join(',\n  ') +
28674                    ' ' +
28675                    braces[1];
28676           }
28677
28678           return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
28679         }
28680
28681
28682         // NOTE: These type checking functions intentionally don't use `instanceof`
28683         // because it is fragile and can be easily faked with `Object.create()`.
28684         function isArray(ar) {
28685           return Array.isArray(ar);
28686         }
28687         exports.isArray = isArray;
28688
28689         function isBoolean(arg) {
28690           return typeof arg === 'boolean';
28691         }
28692         exports.isBoolean = isBoolean;
28693
28694         function isNull(arg) {
28695           return arg === null;
28696         }
28697         exports.isNull = isNull;
28698
28699         function isNullOrUndefined(arg) {
28700           return arg == null;
28701         }
28702         exports.isNullOrUndefined = isNullOrUndefined;
28703
28704         function isNumber(arg) {
28705           return typeof arg === 'number';
28706         }
28707         exports.isNumber = isNumber;
28708
28709         function isString(arg) {
28710           return typeof arg === 'string';
28711         }
28712         exports.isString = isString;
28713
28714         function isSymbol(arg) {
28715           return typeof arg === 'symbol';
28716         }
28717         exports.isSymbol = isSymbol;
28718
28719         function isUndefined(arg) {
28720           return arg === void 0;
28721         }
28722         exports.isUndefined = isUndefined;
28723
28724         function isRegExp(re) {
28725           return isObject(re) && objectToString(re) === '[object RegExp]';
28726         }
28727         exports.isRegExp = isRegExp;
28728
28729         function isObject(arg) {
28730           return typeof arg === 'object' && arg !== null;
28731         }
28732         exports.isObject = isObject;
28733
28734         function isDate(d) {
28735           return isObject(d) && objectToString(d) === '[object Date]';
28736         }
28737         exports.isDate = isDate;
28738
28739         function isError(e) {
28740           return isObject(e) &&
28741               (objectToString(e) === '[object Error]' || e instanceof Error);
28742         }
28743         exports.isError = isError;
28744
28745         function isFunction(arg) {
28746           return typeof arg === 'function';
28747         }
28748         exports.isFunction = isFunction;
28749
28750         function isPrimitive(arg) {
28751           return arg === null ||
28752                  typeof arg === 'boolean' ||
28753                  typeof arg === 'number' ||
28754                  typeof arg === 'string' ||
28755                  typeof arg === 'symbol' ||  // ES6 symbol
28756                  typeof arg === 'undefined';
28757         }
28758         exports.isPrimitive = isPrimitive;
28759
28760         exports.isBuffer = __webpack_require__(61);
28761
28762         function objectToString(o) {
28763           return Object.prototype.toString.call(o);
28764         }
28765
28766
28767         function pad(n) {
28768           return n < 10 ? '0' + n.toString(10) : n.toString(10);
28769         }
28770
28771
28772         var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
28773                       'Oct', 'Nov', 'Dec'];
28774
28775         // 26 Feb 16:19:34
28776         function timestamp() {
28777           var d = new Date();
28778           var time = [pad(d.getHours()),
28779                       pad(d.getMinutes()),
28780                       pad(d.getSeconds())].join(':');
28781           return [d.getDate(), months[d.getMonth()], time].join(' ');
28782         }
28783
28784
28785         // log is just a thin wrapper to console.log that prepends a timestamp
28786         exports.log = function() {
28787           console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
28788         };
28789
28790
28791         /**
28792          * Inherit the prototype methods from one constructor into another.
28793          *
28794          * The Function.prototype.inherits from lang.js rewritten as a standalone
28795          * function (not on Function.prototype). NOTE: If this file is to be loaded
28796          * during bootstrapping this function needs to be rewritten using some native
28797          * functions as prototype setup using normal JavaScript does not work as
28798          * expected during bootstrapping (see mirror.js in r114903).
28799          *
28800          * @param {function} ctor Constructor function which needs to inherit the
28801          *     prototype.
28802          * @param {function} superCtor Constructor function to inherit prototype from.
28803          */
28804         exports.inherits = __webpack_require__(62);
28805
28806         exports._extend = function(origin, add) {
28807           // Don't do anything if add isn't an object
28808           if (!add || !isObject(add)) return origin;
28809
28810           var keys = Object.keys(add);
28811           var i = keys.length;
28812           while (i--) {
28813             origin[keys[i]] = add[keys[i]];
28814           }
28815           return origin;
28816         };
28817
28818         function hasOwnProperty(obj, prop) {
28819           return Object.prototype.hasOwnProperty.call(obj, prop);
28820         }
28821
28822         /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(30)))
28823
28824 /***/ },
28825 /* 61 */
28826 /***/ function(module, exports) {
28827
28828         module.exports = function isBuffer(arg) {
28829           return arg && typeof arg === 'object'
28830             && typeof arg.copy === 'function'
28831             && typeof arg.fill === 'function'
28832             && typeof arg.readUInt8 === 'function';
28833         }
28834
28835 /***/ },
28836 /* 62 */
28837 /***/ function(module, exports) {
28838
28839         if (typeof Object.create === 'function') {
28840           // implementation from standard node.js 'util' module
28841           module.exports = function inherits(ctor, superCtor) {
28842             ctor.super_ = superCtor
28843             ctor.prototype = Object.create(superCtor.prototype, {
28844               constructor: {
28845                 value: ctor,
28846                 enumerable: false,
28847                 writable: true,
28848                 configurable: true
28849               }
28850             });
28851           };
28852         } else {
28853           // old school shim for old browsers
28854           module.exports = function inherits(ctor, superCtor) {
28855             ctor.super_ = superCtor
28856             var TempCtor = function () {}
28857             TempCtor.prototype = superCtor.prototype
28858             ctor.prototype = new TempCtor()
28859             ctor.prototype.constructor = ctor
28860           }
28861         }
28862
28863
28864 /***/ },
28865 /* 63 */
28866 /***/ function(module, exports, __webpack_require__) {
28867
28868         // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
28869         //
28870         // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
28871         //
28872         // Originally from narwhal.js (http://narwhaljs.org)
28873         // Copyright (c) 2009 Thomas Robinson <280north.com>
28874         //
28875         // Permission is hereby granted, free of charge, to any person obtaining a copy
28876         // of this software and associated documentation files (the 'Software'), to
28877         // deal in the Software without restriction, including without limitation the
28878         // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
28879         // sell copies of the Software, and to permit persons to whom the Software is
28880         // furnished to do so, subject to the following conditions:
28881         //
28882         // The above copyright notice and this permission notice shall be included in
28883         // all copies or substantial portions of the Software.
28884         //
28885         // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28886         // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28887         // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28888         // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28889         // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28890         // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28891
28892         // when used in node, this will actually load the util module we depend on
28893         // versus loading the builtin util module as happens otherwise
28894         // this is a bug in node module loading as far as I am concerned
28895         var util = __webpack_require__(60);
28896
28897         var pSlice = Array.prototype.slice;
28898         var hasOwn = Object.prototype.hasOwnProperty;
28899
28900         // 1. The assert module provides functions that throw
28901         // AssertionError's when particular conditions are not met. The
28902         // assert module must conform to the following interface.
28903
28904         var assert = module.exports = ok;
28905
28906         // 2. The AssertionError is defined in assert.
28907         // new assert.AssertionError({ message: message,
28908         //                             actual: actual,
28909         //                             expected: expected })
28910
28911         assert.AssertionError = function AssertionError(options) {
28912           this.name = 'AssertionError';
28913           this.actual = options.actual;
28914           this.expected = options.expected;
28915           this.operator = options.operator;
28916           if (options.message) {
28917             this.message = options.message;
28918             this.generatedMessage = false;
28919           } else {
28920             this.message = getMessage(this);
28921             this.generatedMessage = true;
28922           }
28923           var stackStartFunction = options.stackStartFunction || fail;
28924
28925           if (Error.captureStackTrace) {
28926             Error.captureStackTrace(this, stackStartFunction);
28927           }
28928           else {
28929             // non v8 browsers so we can have a stacktrace
28930             var err = new Error();
28931             if (err.stack) {
28932               var out = err.stack;
28933
28934               // try to strip useless frames
28935               var fn_name = stackStartFunction.name;
28936               var idx = out.indexOf('\n' + fn_name);
28937               if (idx >= 0) {
28938                 // once we have located the function frame
28939                 // we need to strip out everything before it (and its line)
28940                 var next_line = out.indexOf('\n', idx + 1);
28941                 out = out.substring(next_line + 1);
28942               }
28943
28944               this.stack = out;
28945             }
28946           }
28947         };
28948
28949         // assert.AssertionError instanceof Error
28950         util.inherits(assert.AssertionError, Error);
28951
28952         function replacer(key, value) {
28953           if (util.isUndefined(value)) {
28954             return '' + value;
28955           }
28956           if (util.isNumber(value) && !isFinite(value)) {
28957             return value.toString();
28958           }
28959           if (util.isFunction(value) || util.isRegExp(value)) {
28960             return value.toString();
28961           }
28962           return value;
28963         }
28964
28965         function truncate(s, n) {
28966           if (util.isString(s)) {
28967             return s.length < n ? s : s.slice(0, n);
28968           } else {
28969             return s;
28970           }
28971         }
28972
28973         function getMessage(self) {
28974           return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
28975                  self.operator + ' ' +
28976                  truncate(JSON.stringify(self.expected, replacer), 128);
28977         }
28978
28979         // At present only the three keys mentioned above are used and
28980         // understood by the spec. Implementations or sub modules can pass
28981         // other keys to the AssertionError's constructor - they will be
28982         // ignored.
28983
28984         // 3. All of the following functions must throw an AssertionError
28985         // when a corresponding condition is not met, with a message that
28986         // may be undefined if not provided.  All assertion methods provide
28987         // both the actual and expected values to the assertion error for
28988         // display purposes.
28989
28990         function fail(actual, expected, message, operator, stackStartFunction) {
28991           throw new assert.AssertionError({
28992             message: message,
28993             actual: actual,
28994             expected: expected,
28995             operator: operator,
28996             stackStartFunction: stackStartFunction
28997           });
28998         }
28999
29000         // EXTENSION! allows for well behaved errors defined elsewhere.
29001         assert.fail = fail;
29002
29003         // 4. Pure assertion tests whether a value is truthy, as determined
29004         // by !!guard.
29005         // assert.ok(guard, message_opt);
29006         // This statement is equivalent to assert.equal(true, !!guard,
29007         // message_opt);. To test strictly for the value true, use
29008         // assert.strictEqual(true, guard, message_opt);.
29009
29010         function ok(value, message) {
29011           if (!value) fail(value, true, message, '==', assert.ok);
29012         }
29013         assert.ok = ok;
29014
29015         // 5. The equality assertion tests shallow, coercive equality with
29016         // ==.
29017         // assert.equal(actual, expected, message_opt);
29018
29019         assert.equal = function equal(actual, expected, message) {
29020           if (actual != expected) fail(actual, expected, message, '==', assert.equal);
29021         };
29022
29023         // 6. The non-equality assertion tests for whether two objects are not equal
29024         // with != assert.notEqual(actual, expected, message_opt);
29025
29026         assert.notEqual = function notEqual(actual, expected, message) {
29027           if (actual == expected) {
29028             fail(actual, expected, message, '!=', assert.notEqual);
29029           }
29030         };
29031
29032         // 7. The equivalence assertion tests a deep equality relation.
29033         // assert.deepEqual(actual, expected, message_opt);
29034
29035         assert.deepEqual = function deepEqual(actual, expected, message) {
29036           if (!_deepEqual(actual, expected)) {
29037             fail(actual, expected, message, 'deepEqual', assert.deepEqual);
29038           }
29039         };
29040
29041         function _deepEqual(actual, expected) {
29042           // 7.1. All identical values are equivalent, as determined by ===.
29043           if (actual === expected) {
29044             return true;
29045
29046           } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
29047             if (actual.length != expected.length) return false;
29048
29049             for (var i = 0; i < actual.length; i++) {
29050               if (actual[i] !== expected[i]) return false;
29051             }
29052
29053             return true;
29054
29055           // 7.2. If the expected value is a Date object, the actual value is
29056           // equivalent if it is also a Date object that refers to the same time.
29057           } else if (util.isDate(actual) && util.isDate(expected)) {
29058             return actual.getTime() === expected.getTime();
29059
29060           // 7.3 If the expected value is a RegExp object, the actual value is
29061           // equivalent if it is also a RegExp object with the same source and
29062           // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
29063           } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
29064             return actual.source === expected.source &&
29065                    actual.global === expected.global &&
29066                    actual.multiline === expected.multiline &&
29067                    actual.lastIndex === expected.lastIndex &&
29068                    actual.ignoreCase === expected.ignoreCase;
29069
29070           // 7.4. Other pairs that do not both pass typeof value == 'object',
29071           // equivalence is determined by ==.
29072           } else if (!util.isObject(actual) && !util.isObject(expected)) {
29073             return actual == expected;
29074
29075           // 7.5 For all other Object pairs, including Array objects, equivalence is
29076           // determined by having the same number of owned properties (as verified
29077           // with Object.prototype.hasOwnProperty.call), the same set of keys
29078           // (although not necessarily the same order), equivalent values for every
29079           // corresponding key, and an identical 'prototype' property. Note: this
29080           // accounts for both named and indexed properties on Arrays.
29081           } else {
29082             return objEquiv(actual, expected);
29083           }
29084         }
29085
29086         function isArguments(object) {
29087           return Object.prototype.toString.call(object) == '[object Arguments]';
29088         }
29089
29090         function objEquiv(a, b) {
29091           if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
29092             return false;
29093           // an identical 'prototype' property.
29094           if (a.prototype !== b.prototype) return false;
29095           // if one is a primitive, the other must be same
29096           if (util.isPrimitive(a) || util.isPrimitive(b)) {
29097             return a === b;
29098           }
29099           var aIsArgs = isArguments(a),
29100               bIsArgs = isArguments(b);
29101           if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
29102             return false;
29103           if (aIsArgs) {
29104             a = pSlice.call(a);
29105             b = pSlice.call(b);
29106             return _deepEqual(a, b);
29107           }
29108           var ka = objectKeys(a),
29109               kb = objectKeys(b),
29110               key, i;
29111           // having the same number of owned properties (keys incorporates
29112           // hasOwnProperty)
29113           if (ka.length != kb.length)
29114             return false;
29115           //the same set of keys (although not necessarily the same order),
29116           ka.sort();
29117           kb.sort();
29118           //~~~cheap key test
29119           for (i = ka.length - 1; i >= 0; i--) {
29120             if (ka[i] != kb[i])
29121               return false;
29122           }
29123           //equivalent values for every corresponding key, and
29124           //~~~possibly expensive deep test
29125           for (i = ka.length - 1; i >= 0; i--) {
29126             key = ka[i];
29127             if (!_deepEqual(a[key], b[key])) return false;
29128           }
29129           return true;
29130         }
29131
29132         // 8. The non-equivalence assertion tests for any deep inequality.
29133         // assert.notDeepEqual(actual, expected, message_opt);
29134
29135         assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
29136           if (_deepEqual(actual, expected)) {
29137             fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
29138           }
29139         };
29140
29141         // 9. The strict equality assertion tests strict equality, as determined by ===.
29142         // assert.strictEqual(actual, expected, message_opt);
29143
29144         assert.strictEqual = function strictEqual(actual, expected, message) {
29145           if (actual !== expected) {
29146             fail(actual, expected, message, '===', assert.strictEqual);
29147           }
29148         };
29149
29150         // 10. The strict non-equality assertion tests for strict inequality, as
29151         // determined by !==.  assert.notStrictEqual(actual, expected, message_opt);
29152
29153         assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
29154           if (actual === expected) {
29155             fail(actual, expected, message, '!==', assert.notStrictEqual);
29156           }
29157         };
29158
29159         function expectedException(actual, expected) {
29160           if (!actual || !expected) {
29161             return false;
29162           }
29163
29164           if (Object.prototype.toString.call(expected) == '[object RegExp]') {
29165             return expected.test(actual);
29166           } else if (actual instanceof expected) {
29167             return true;
29168           } else if (expected.call({}, actual) === true) {
29169             return true;
29170           }
29171
29172           return false;
29173         }
29174
29175         function _throws(shouldThrow, block, expected, message) {
29176           var actual;
29177
29178           if (util.isString(expected)) {
29179             message = expected;
29180             expected = null;
29181           }
29182
29183           try {
29184             block();
29185           } catch (e) {
29186             actual = e;
29187           }
29188
29189           message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
29190                     (message ? ' ' + message : '.');
29191
29192           if (shouldThrow && !actual) {
29193             fail(actual, expected, 'Missing expected exception' + message);
29194           }
29195
29196           if (!shouldThrow && expectedException(actual, expected)) {
29197             fail(actual, expected, 'Got unwanted exception' + message);
29198           }
29199
29200           if ((shouldThrow && actual && expected &&
29201               !expectedException(actual, expected)) || (!shouldThrow && actual)) {
29202             throw actual;
29203           }
29204         }
29205
29206         // 11. Expected to throw an error:
29207         // assert.throws(block, Error_opt, message_opt);
29208
29209         assert.throws = function(block, /*optional*/error, /*optional*/message) {
29210           _throws.apply(this, [true].concat(pSlice.call(arguments)));
29211         };
29212
29213         // EXTENSION! This is annoying to write outside this module.
29214         assert.doesNotThrow = function(block, /*optional*/message) {
29215           _throws.apply(this, [false].concat(pSlice.call(arguments)));
29216         };
29217
29218         assert.ifError = function(err) { if (err) {throw err;}};
29219
29220         var objectKeys = Object.keys || function (obj) {
29221           var keys = [];
29222           for (var key in obj) {
29223             if (hasOwn.call(obj, key)) keys.push(key);
29224           }
29225           return keys;
29226         };
29227
29228
29229 /***/ },
29230 /* 64 */
29231 /***/ function(module, exports) {
29232
29233         // Generated by CoffeeScript 1.7.1
29234
29235         /*
29236         PDFPage - represents a single page in the PDF document
29237         By Devon Govett
29238          */
29239
29240         (function() {
29241           var PDFPage;
29242
29243           PDFPage = (function() {
29244             var DEFAULT_MARGINS, SIZES;
29245
29246             function PDFPage(document, options) {
29247               var dimensions;
29248               this.document = document;
29249               if (options == null) {
29250                 options = {};
29251               }
29252               this.size = options.size || 'letter';
29253               this.layout = options.layout || 'portrait';
29254               if (typeof options.margin === 'number') {
29255                 this.margins = {
29256                   top: options.margin,
29257                   left: options.margin,
29258                   bottom: options.margin,
29259                   right: options.margin
29260                 };
29261               } else {
29262                 this.margins = options.margins || DEFAULT_MARGINS;
29263               }
29264               dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];
29265               this.width = dimensions[this.layout === 'portrait' ? 0 : 1];
29266               this.height = dimensions[this.layout === 'portrait' ? 1 : 0];
29267               this.content = this.document.ref();
29268               this.resources = this.document.ref({
29269                 ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']
29270               });
29271               Object.defineProperties(this, {
29272                 fonts: {
29273                   get: (function(_this) {
29274                     return function() {
29275                       var _base;
29276                       return (_base = _this.resources.data).Font != null ? _base.Font : _base.Font = {};
29277                     };
29278                   })(this)
29279                 },
29280                 xobjects: {
29281                   get: (function(_this) {
29282                     return function() {
29283                       var _base;
29284                       return (_base = _this.resources.data).XObject != null ? _base.XObject : _base.XObject = {};
29285                     };
29286                   })(this)
29287                 },
29288                 ext_gstates: {
29289                   get: (function(_this) {
29290                     return function() {
29291                       var _base;
29292                       return (_base = _this.resources.data).ExtGState != null ? _base.ExtGState : _base.ExtGState = {};
29293                     };
29294                   })(this)
29295                 },
29296                 patterns: {
29297                   get: (function(_this) {
29298                     return function() {
29299                       var _base;
29300                       return (_base = _this.resources.data).Pattern != null ? _base.Pattern : _base.Pattern = {};
29301                     };
29302                   })(this)
29303                 },
29304                 annotations: {
29305                   get: (function(_this) {
29306                     return function() {
29307                       var _base;
29308                       return (_base = _this.dictionary.data).Annots != null ? _base.Annots : _base.Annots = [];
29309                     };
29310                   })(this)
29311                 }
29312               });
29313               this.dictionary = this.document.ref({
29314                 Type: 'Page',
29315                 Parent: this.document._root.data.Pages,
29316                 MediaBox: [0, 0, this.width, this.height],
29317                 Contents: this.content,
29318                 Resources: this.resources
29319               });
29320             }
29321
29322             PDFPage.prototype.maxY = function() {
29323               return this.height - this.margins.bottom;
29324             };
29325
29326             PDFPage.prototype.write = function(chunk) {
29327               return this.content.write(chunk);
29328             };
29329
29330             PDFPage.prototype.end = function() {
29331               this.dictionary.end();
29332               this.resources.end();
29333               return this.content.end();
29334             };
29335
29336             DEFAULT_MARGINS = {
29337               top: 72,
29338               left: 72,
29339               bottom: 72,
29340               right: 72
29341             };
29342
29343             SIZES = {
29344               '4A0': [4767.87, 6740.79],
29345               '2A0': [3370.39, 4767.87],
29346               A0: [2383.94, 3370.39],
29347               A1: [1683.78, 2383.94],
29348               A2: [1190.55, 1683.78],
29349               A3: [841.89, 1190.55],
29350               A4: [595.28, 841.89],
29351               A5: [419.53, 595.28],
29352               A6: [297.64, 419.53],
29353               A7: [209.76, 297.64],
29354               A8: [147.40, 209.76],
29355               A9: [104.88, 147.40],
29356               A10: [73.70, 104.88],
29357               B0: [2834.65, 4008.19],
29358               B1: [2004.09, 2834.65],
29359               B2: [1417.32, 2004.09],
29360               B3: [1000.63, 1417.32],
29361               B4: [708.66, 1000.63],
29362               B5: [498.90, 708.66],
29363               B6: [354.33, 498.90],
29364               B7: [249.45, 354.33],
29365               B8: [175.75, 249.45],
29366               B9: [124.72, 175.75],
29367               B10: [87.87, 124.72],
29368               C0: [2599.37, 3676.54],
29369               C1: [1836.85, 2599.37],
29370               C2: [1298.27, 1836.85],
29371               C3: [918.43, 1298.27],
29372               C4: [649.13, 918.43],
29373               C5: [459.21, 649.13],
29374               C6: [323.15, 459.21],
29375               C7: [229.61, 323.15],
29376               C8: [161.57, 229.61],
29377               C9: [113.39, 161.57],
29378               C10: [79.37, 113.39],
29379               RA0: [2437.80, 3458.27],
29380               RA1: [1729.13, 2437.80],
29381               RA2: [1218.90, 1729.13],
29382               RA3: [864.57, 1218.90],
29383               RA4: [609.45, 864.57],
29384               SRA0: [2551.18, 3628.35],
29385               SRA1: [1814.17, 2551.18],
29386               SRA2: [1275.59, 1814.17],
29387               SRA3: [907.09, 1275.59],
29388               SRA4: [637.80, 907.09],
29389               EXECUTIVE: [521.86, 756.00],
29390               FOLIO: [612.00, 936.00],
29391               LEGAL: [612.00, 1008.00],
29392               LETTER: [612.00, 792.00],
29393               TABLOID: [792.00, 1224.00]
29394             };
29395
29396             return PDFPage;
29397
29398           })();
29399
29400           module.exports = PDFPage;
29401
29402         }).call(this);
29403
29404
29405 /***/ },
29406 /* 65 */
29407 /***/ function(module, exports, __webpack_require__) {
29408
29409         // Generated by CoffeeScript 1.7.1
29410         (function() {
29411           var PDFGradient, PDFLinearGradient, PDFRadialGradient, namedColors, _ref;
29412
29413           _ref = __webpack_require__(66), PDFGradient = _ref.PDFGradient, PDFLinearGradient = _ref.PDFLinearGradient, PDFRadialGradient = _ref.PDFRadialGradient;
29414
29415           module.exports = {
29416             initColor: function() {
29417               this._opacityRegistry = {};
29418               this._opacityCount = 0;
29419               return this._gradCount = 0;
29420             },
29421             _normalizeColor: function(color) {
29422               var hex, part;
29423               if (color instanceof PDFGradient) {
29424                 return color;
29425               }
29426               if (typeof color === 'string') {
29427                 if (color.charAt(0) === '#') {
29428                   if (color.length === 4) {
29429                     color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, "#$1$1$2$2$3$3");
29430                   }
29431                   hex = parseInt(color.slice(1), 16);
29432                   color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];
29433                 } else if (namedColors[color]) {
29434                   color = namedColors[color];
29435                 }
29436               }
29437               if (Array.isArray(color)) {
29438                 if (color.length === 3) {
29439                   color = (function() {
29440                     var _i, _len, _results;
29441                     _results = [];
29442                     for (_i = 0, _len = color.length; _i < _len; _i++) {
29443                       part = color[_i];
29444                       _results.push(part / 255);
29445                     }
29446                     return _results;
29447                   })();
29448                 } else if (color.length === 4) {
29449                   color = (function() {
29450                     var _i, _len, _results;
29451                     _results = [];
29452                     for (_i = 0, _len = color.length; _i < _len; _i++) {
29453                       part = color[_i];
29454                       _results.push(part / 100);
29455                     }
29456                     return _results;
29457                   })();
29458                 }
29459                 return color;
29460               }
29461               return null;
29462             },
29463             _setColor: function(color, stroke) {
29464               var gstate, name, op, space;
29465               color = this._normalizeColor(color);
29466               if (!color) {
29467                 return false;
29468               }
29469               if (this._sMasked) {
29470                 gstate = this.ref({
29471                   Type: 'ExtGState',
29472                   SMask: 'None'
29473                 });
29474                 gstate.end();
29475                 name = "Gs" + (++this._opacityCount);
29476                 this.page.ext_gstates[name] = gstate;
29477                 this.addContent("/" + name + " gs");
29478                 this._sMasked = false;
29479               }
29480               op = stroke ? 'SCN' : 'scn';
29481               if (color instanceof PDFGradient) {
29482                 this._setColorSpace('Pattern', stroke);
29483                 color.apply(op);
29484               } else {
29485                 space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';
29486                 this._setColorSpace(space, stroke);
29487                 color = color.join(' ');
29488                 this.addContent("" + color + " " + op);
29489               }
29490               return true;
29491             },
29492             _setColorSpace: function(space, stroke) {
29493               var op;
29494               op = stroke ? 'CS' : 'cs';
29495               return this.addContent("/" + space + " " + op);
29496             },
29497             fillColor: function(color, opacity) {
29498               var set;
29499               if (opacity == null) {
29500                 opacity = 1;
29501               }
29502               set = this._setColor(color, false);
29503               if (set) {
29504                 this.fillOpacity(opacity);
29505               }
29506               this._fillColor = [color, opacity];
29507               return this;
29508             },
29509             strokeColor: function(color, opacity) {
29510               var set;
29511               if (opacity == null) {
29512                 opacity = 1;
29513               }
29514               set = this._setColor(color, true);
29515               if (set) {
29516                 this.strokeOpacity(opacity);
29517               }
29518               return this;
29519             },
29520             opacity: function(opacity) {
29521               this._doOpacity(opacity, opacity);
29522               return this;
29523             },
29524             fillOpacity: function(opacity) {
29525               this._doOpacity(opacity, null);
29526               return this;
29527             },
29528             strokeOpacity: function(opacity) {
29529               this._doOpacity(null, opacity);
29530               return this;
29531             },
29532             _doOpacity: function(fillOpacity, strokeOpacity) {
29533               var dictionary, id, key, name, _ref1;
29534               if (!((fillOpacity != null) || (strokeOpacity != null))) {
29535                 return;
29536               }
29537               if (fillOpacity != null) {
29538                 fillOpacity = Math.max(0, Math.min(1, fillOpacity));
29539               }
29540               if (strokeOpacity != null) {
29541                 strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));
29542               }
29543               key = "" + fillOpacity + "_" + strokeOpacity;
29544               if (this._opacityRegistry[key]) {
29545                 _ref1 = this._opacityRegistry[key], dictionary = _ref1[0], name = _ref1[1];
29546               } else {
29547                 dictionary = {
29548                   Type: 'ExtGState'
29549                 };
29550                 if (fillOpacity != null) {
29551                   dictionary.ca = fillOpacity;
29552                 }
29553                 if (strokeOpacity != null) {
29554                   dictionary.CA = strokeOpacity;
29555                 }
29556                 dictionary = this.ref(dictionary);
29557                 dictionary.end();
29558                 id = ++this._opacityCount;
29559                 name = "Gs" + id;
29560                 this._opacityRegistry[key] = [dictionary, name];
29561               }
29562               this.page.ext_gstates[name] = dictionary;
29563               return this.addContent("/" + name + " gs");
29564             },
29565             linearGradient: function(x1, y1, x2, y2) {
29566               return new PDFLinearGradient(this, x1, y1, x2, y2);
29567             },
29568             radialGradient: function(x1, y1, r1, x2, y2, r2) {
29569               return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);
29570             }
29571           };
29572
29573           namedColors = {
29574             aliceblue: [240, 248, 255],
29575             antiquewhite: [250, 235, 215],
29576             aqua: [0, 255, 255],
29577             aquamarine: [127, 255, 212],
29578             azure: [240, 255, 255],
29579             beige: [245, 245, 220],
29580             bisque: [255, 228, 196],
29581             black: [0, 0, 0],
29582             blanchedalmond: [255, 235, 205],
29583             blue: [0, 0, 255],
29584             blueviolet: [138, 43, 226],
29585             brown: [165, 42, 42],
29586             burlywood: [222, 184, 135],
29587             cadetblue: [95, 158, 160],
29588             chartreuse: [127, 255, 0],
29589             chocolate: [210, 105, 30],
29590             coral: [255, 127, 80],
29591             cornflowerblue: [100, 149, 237],
29592             cornsilk: [255, 248, 220],
29593             crimson: [220, 20, 60],
29594             cyan: [0, 255, 255],
29595             darkblue: [0, 0, 139],
29596             darkcyan: [0, 139, 139],
29597             darkgoldenrod: [184, 134, 11],
29598             darkgray: [169, 169, 169],
29599             darkgreen: [0, 100, 0],
29600             darkgrey: [169, 169, 169],
29601             darkkhaki: [189, 183, 107],
29602             darkmagenta: [139, 0, 139],
29603             darkolivegreen: [85, 107, 47],
29604             darkorange: [255, 140, 0],
29605             darkorchid: [153, 50, 204],
29606             darkred: [139, 0, 0],
29607             darksalmon: [233, 150, 122],
29608             darkseagreen: [143, 188, 143],
29609             darkslateblue: [72, 61, 139],
29610             darkslategray: [47, 79, 79],
29611             darkslategrey: [47, 79, 79],
29612             darkturquoise: [0, 206, 209],
29613             darkviolet: [148, 0, 211],
29614             deeppink: [255, 20, 147],
29615             deepskyblue: [0, 191, 255],
29616             dimgray: [105, 105, 105],
29617             dimgrey: [105, 105, 105],
29618             dodgerblue: [30, 144, 255],
29619             firebrick: [178, 34, 34],
29620             floralwhite: [255, 250, 240],
29621             forestgreen: [34, 139, 34],
29622             fuchsia: [255, 0, 255],
29623             gainsboro: [220, 220, 220],
29624             ghostwhite: [248, 248, 255],
29625             gold: [255, 215, 0],
29626             goldenrod: [218, 165, 32],
29627             gray: [128, 128, 128],
29628             grey: [128, 128, 128],
29629             green: [0, 128, 0],
29630             greenyellow: [173, 255, 47],
29631             honeydew: [240, 255, 240],
29632             hotpink: [255, 105, 180],
29633             indianred: [205, 92, 92],
29634             indigo: [75, 0, 130],
29635             ivory: [255, 255, 240],
29636             khaki: [240, 230, 140],
29637             lavender: [230, 230, 250],
29638             lavenderblush: [255, 240, 245],
29639             lawngreen: [124, 252, 0],
29640             lemonchiffon: [255, 250, 205],
29641             lightblue: [173, 216, 230],
29642             lightcoral: [240, 128, 128],
29643             lightcyan: [224, 255, 255],
29644             lightgoldenrodyellow: [250, 250, 210],
29645             lightgray: [211, 211, 211],
29646             lightgreen: [144, 238, 144],
29647             lightgrey: [211, 211, 211],
29648             lightpink: [255, 182, 193],
29649             lightsalmon: [255, 160, 122],
29650             lightseagreen: [32, 178, 170],
29651             lightskyblue: [135, 206, 250],
29652             lightslategray: [119, 136, 153],
29653             lightslategrey: [119, 136, 153],
29654             lightsteelblue: [176, 196, 222],
29655             lightyellow: [255, 255, 224],
29656             lime: [0, 255, 0],
29657             limegreen: [50, 205, 50],
29658             linen: [250, 240, 230],
29659             magenta: [255, 0, 255],
29660             maroon: [128, 0, 0],
29661             mediumaquamarine: [102, 205, 170],
29662             mediumblue: [0, 0, 205],
29663             mediumorchid: [186, 85, 211],
29664             mediumpurple: [147, 112, 219],
29665             mediumseagreen: [60, 179, 113],
29666             mediumslateblue: [123, 104, 238],
29667             mediumspringgreen: [0, 250, 154],
29668             mediumturquoise: [72, 209, 204],
29669             mediumvioletred: [199, 21, 133],
29670             midnightblue: [25, 25, 112],
29671             mintcream: [245, 255, 250],
29672             mistyrose: [255, 228, 225],
29673             moccasin: [255, 228, 181],
29674             navajowhite: [255, 222, 173],
29675             navy: [0, 0, 128],
29676             oldlace: [253, 245, 230],
29677             olive: [128, 128, 0],
29678             olivedrab: [107, 142, 35],
29679             orange: [255, 165, 0],
29680             orangered: [255, 69, 0],
29681             orchid: [218, 112, 214],
29682             palegoldenrod: [238, 232, 170],
29683             palegreen: [152, 251, 152],
29684             paleturquoise: [175, 238, 238],
29685             palevioletred: [219, 112, 147],
29686             papayawhip: [255, 239, 213],
29687             peachpuff: [255, 218, 185],
29688             peru: [205, 133, 63],
29689             pink: [255, 192, 203],
29690             plum: [221, 160, 221],
29691             powderblue: [176, 224, 230],
29692             purple: [128, 0, 128],
29693             red: [255, 0, 0],
29694             rosybrown: [188, 143, 143],
29695             royalblue: [65, 105, 225],
29696             saddlebrown: [139, 69, 19],
29697             salmon: [250, 128, 114],
29698             sandybrown: [244, 164, 96],
29699             seagreen: [46, 139, 87],
29700             seashell: [255, 245, 238],
29701             sienna: [160, 82, 45],
29702             silver: [192, 192, 192],
29703             skyblue: [135, 206, 235],
29704             slateblue: [106, 90, 205],
29705             slategray: [112, 128, 144],
29706             slategrey: [112, 128, 144],
29707             snow: [255, 250, 250],
29708             springgreen: [0, 255, 127],
29709             steelblue: [70, 130, 180],
29710             tan: [210, 180, 140],
29711             teal: [0, 128, 128],
29712             thistle: [216, 191, 216],
29713             tomato: [255, 99, 71],
29714             turquoise: [64, 224, 208],
29715             violet: [238, 130, 238],
29716             wheat: [245, 222, 179],
29717             white: [255, 255, 255],
29718             whitesmoke: [245, 245, 245],
29719             yellow: [255, 255, 0],
29720             yellowgreen: [154, 205, 50]
29721           };
29722
29723         }).call(this);
29724
29725
29726 /***/ },
29727 /* 66 */
29728 /***/ function(module, exports) {
29729
29730         // Generated by CoffeeScript 1.7.1
29731         (function() {
29732           var PDFGradient, PDFLinearGradient, PDFRadialGradient,
29733             __hasProp = {}.hasOwnProperty,
29734             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
29735
29736           PDFGradient = (function() {
29737             function PDFGradient(doc) {
29738               this.doc = doc;
29739               this.stops = [];
29740               this.embedded = false;
29741               this.transform = [1, 0, 0, 1, 0, 0];
29742               this._colorSpace = 'DeviceRGB';
29743             }
29744
29745             PDFGradient.prototype.stop = function(pos, color, opacity) {
29746               if (opacity == null) {
29747                 opacity = 1;
29748               }
29749               opacity = Math.max(0, Math.min(1, opacity));
29750               this.stops.push([pos, this.doc._normalizeColor(color), opacity]);
29751               return this;
29752             };
29753
29754             PDFGradient.prototype.embed = function() {
29755               var bounds, dx, dy, encode, fn, form, grad, group, gstate, i, last, m, m0, m1, m11, m12, m2, m21, m22, m3, m4, m5, name, pattern, resources, sMask, shader, stop, stops, v, _i, _j, _len, _ref, _ref1, _ref2;
29756               if (this.embedded || this.stops.length === 0) {
29757                 return;
29758               }
29759               this.embedded = true;
29760               last = this.stops[this.stops.length - 1];
29761               if (last[0] < 1) {
29762                 this.stops.push([1, last[1], last[2]]);
29763               }
29764               bounds = [];
29765               encode = [];
29766               stops = [];
29767               for (i = _i = 0, _ref = this.stops.length - 1; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
29768                 encode.push(0, 1);
29769                 if (i + 2 !== this.stops.length) {
29770                   bounds.push(this.stops[i + 1][0]);
29771                 }
29772                 fn = this.doc.ref({
29773                   FunctionType: 2,
29774                   Domain: [0, 1],
29775                   C0: this.stops[i + 0][1],
29776                   C1: this.stops[i + 1][1],
29777                   N: 1
29778                 });
29779                 stops.push(fn);
29780                 fn.end();
29781               }
29782               if (stops.length === 1) {
29783                 fn = stops[0];
29784               } else {
29785                 fn = this.doc.ref({
29786                   FunctionType: 3,
29787                   Domain: [0, 1],
29788                   Functions: stops,
29789                   Bounds: bounds,
29790                   Encode: encode
29791                 });
29792                 fn.end();
29793               }
29794               this.id = 'Sh' + (++this.doc._gradCount);
29795               m = this.doc._ctm.slice();
29796               m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
29797               _ref1 = this.transform, m11 = _ref1[0], m12 = _ref1[1], m21 = _ref1[2], m22 = _ref1[3], dx = _ref1[4], dy = _ref1[5];
29798               m[0] = m0 * m11 + m2 * m12;
29799               m[1] = m1 * m11 + m3 * m12;
29800               m[2] = m0 * m21 + m2 * m22;
29801               m[3] = m1 * m21 + m3 * m22;
29802               m[4] = m0 * dx + m2 * dy + m4;
29803               m[5] = m1 * dx + m3 * dy + m5;
29804               shader = this.shader(fn);
29805               shader.end();
29806               pattern = this.doc.ref({
29807                 Type: 'Pattern',
29808                 PatternType: 2,
29809                 Shading: shader,
29810                 Matrix: (function() {
29811                   var _j, _len, _results;
29812                   _results = [];
29813                   for (_j = 0, _len = m.length; _j < _len; _j++) {
29814                     v = m[_j];
29815                     _results.push(+v.toFixed(5));
29816                   }
29817                   return _results;
29818                 })()
29819               });
29820               this.doc.page.patterns[this.id] = pattern;
29821               pattern.end();
29822               if (this.stops.some(function(stop) {
29823                 return stop[2] < 1;
29824               })) {
29825                 grad = this.opacityGradient();
29826                 grad._colorSpace = 'DeviceGray';
29827                 _ref2 = this.stops;
29828                 for (_j = 0, _len = _ref2.length; _j < _len; _j++) {
29829                   stop = _ref2[_j];
29830                   grad.stop(stop[0], [stop[2]]);
29831                 }
29832                 grad = grad.embed();
29833                 group = this.doc.ref({
29834                   Type: 'Group',
29835                   S: 'Transparency',
29836                   CS: 'DeviceGray'
29837                 });
29838                 group.end();
29839                 resources = this.doc.ref({
29840                   ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
29841                   Shading: {
29842                     Sh1: grad.data.Shading
29843                   }
29844                 });
29845                 resources.end();
29846                 form = this.doc.ref({
29847                   Type: 'XObject',
29848                   Subtype: 'Form',
29849                   FormType: 1,
29850                   BBox: [0, 0, this.doc.page.width, this.doc.page.height],
29851                   Group: group,
29852                   Resources: resources
29853                 });
29854                 form.end("/Sh1 sh");
29855                 sMask = this.doc.ref({
29856                   Type: 'Mask',
29857                   S: 'Luminosity',
29858                   G: form
29859                 });
29860                 sMask.end();
29861                 gstate = this.doc.ref({
29862                   Type: 'ExtGState',
29863                   SMask: sMask
29864                 });
29865                 this.opacity_id = ++this.doc._opacityCount;
29866                 name = "Gs" + this.opacity_id;
29867                 this.doc.page.ext_gstates[name] = gstate;
29868                 gstate.end();
29869               }
29870               return pattern;
29871             };
29872
29873             PDFGradient.prototype.apply = function(op) {
29874               if (!this.embedded) {
29875                 this.embed();
29876               }
29877               this.doc.addContent("/" + this.id + " " + op);
29878               if (this.opacity_id) {
29879                 this.doc.addContent("/Gs" + this.opacity_id + " gs");
29880                 return this.doc._sMasked = true;
29881               }
29882             };
29883
29884             return PDFGradient;
29885
29886           })();
29887
29888           PDFLinearGradient = (function(_super) {
29889             __extends(PDFLinearGradient, _super);
29890
29891             function PDFLinearGradient(doc, x1, y1, x2, y2) {
29892               this.doc = doc;
29893               this.x1 = x1;
29894               this.y1 = y1;
29895               this.x2 = x2;
29896               this.y2 = y2;
29897               PDFLinearGradient.__super__.constructor.apply(this, arguments);
29898             }
29899
29900             PDFLinearGradient.prototype.shader = function(fn) {
29901               return this.doc.ref({
29902                 ShadingType: 2,
29903                 ColorSpace: this._colorSpace,
29904                 Coords: [this.x1, this.y1, this.x2, this.y2],
29905                 Function: fn,
29906                 Extend: [true, true]
29907               });
29908             };
29909
29910             PDFLinearGradient.prototype.opacityGradient = function() {
29911               return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);
29912             };
29913
29914             return PDFLinearGradient;
29915
29916           })(PDFGradient);
29917
29918           PDFRadialGradient = (function(_super) {
29919             __extends(PDFRadialGradient, _super);
29920
29921             function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {
29922               this.doc = doc;
29923               this.x1 = x1;
29924               this.y1 = y1;
29925               this.r1 = r1;
29926               this.x2 = x2;
29927               this.y2 = y2;
29928               this.r2 = r2;
29929               PDFRadialGradient.__super__.constructor.apply(this, arguments);
29930             }
29931
29932             PDFRadialGradient.prototype.shader = function(fn) {
29933               return this.doc.ref({
29934                 ShadingType: 3,
29935                 ColorSpace: this._colorSpace,
29936                 Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],
29937                 Function: fn,
29938                 Extend: [true, true]
29939               });
29940             };
29941
29942             PDFRadialGradient.prototype.opacityGradient = function() {
29943               return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);
29944             };
29945
29946             return PDFRadialGradient;
29947
29948           })(PDFGradient);
29949
29950           module.exports = {
29951             PDFGradient: PDFGradient,
29952             PDFLinearGradient: PDFLinearGradient,
29953             PDFRadialGradient: PDFRadialGradient
29954           };
29955
29956         }).call(this);
29957
29958
29959 /***/ },
29960 /* 67 */
29961 /***/ function(module, exports, __webpack_require__) {
29962
29963         // Generated by CoffeeScript 1.7.1
29964         (function() {
29965           var KAPPA, SVGPath,
29966             __slice = [].slice;
29967
29968           SVGPath = __webpack_require__(68);
29969
29970           KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);
29971
29972           module.exports = {
29973             initVector: function() {
29974               this._ctm = [1, 0, 0, 1, 0, 0];
29975               return this._ctmStack = [];
29976             },
29977             save: function() {
29978               this._ctmStack.push(this._ctm.slice());
29979               return this.addContent('q');
29980             },
29981             restore: function() {
29982               this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];
29983               return this.addContent('Q');
29984             },
29985             closePath: function() {
29986               return this.addContent('h');
29987             },
29988             lineWidth: function(w) {
29989               return this.addContent("" + w + " w");
29990             },
29991             _CAP_STYLES: {
29992               BUTT: 0,
29993               ROUND: 1,
29994               SQUARE: 2
29995             },
29996             lineCap: function(c) {
29997               if (typeof c === 'string') {
29998                 c = this._CAP_STYLES[c.toUpperCase()];
29999               }
30000               return this.addContent("" + c + " J");
30001             },
30002             _JOIN_STYLES: {
30003               MITER: 0,
30004               ROUND: 1,
30005               BEVEL: 2
30006             },
30007             lineJoin: function(j) {
30008               if (typeof j === 'string') {
30009                 j = this._JOIN_STYLES[j.toUpperCase()];
30010               }
30011               return this.addContent("" + j + " j");
30012             },
30013             miterLimit: function(m) {
30014               return this.addContent("" + m + " M");
30015             },
30016             dash: function(length, options) {
30017               var phase, space, _ref;
30018               if (options == null) {
30019                 options = {};
30020               }
30021               if (length == null) {
30022                 return this;
30023               }
30024               space = (_ref = options.space) != null ? _ref : length;
30025               phase = options.phase || 0;
30026               return this.addContent("[" + length + " " + space + "] " + phase + " d");
30027             },
30028             undash: function() {
30029               return this.addContent("[] 0 d");
30030             },
30031             moveTo: function(x, y) {
30032               return this.addContent("" + x + " " + y + " m");
30033             },
30034             lineTo: function(x, y) {
30035               return this.addContent("" + x + " " + y + " l");
30036             },
30037             bezierCurveTo: function(cp1x, cp1y, cp2x, cp2y, x, y) {
30038               return this.addContent("" + cp1x + " " + cp1y + " " + cp2x + " " + cp2y + " " + x + " " + y + " c");
30039             },
30040             quadraticCurveTo: function(cpx, cpy, x, y) {
30041               return this.addContent("" + cpx + " " + cpy + " " + x + " " + y + " v");
30042             },
30043             rect: function(x, y, w, h) {
30044               return this.addContent("" + x + " " + y + " " + w + " " + h + " re");
30045             },
30046             roundedRect: function(x, y, w, h, r) {
30047               if (r == null) {
30048                 r = 0;
30049               }
30050               this.moveTo(x + r, y);
30051               this.lineTo(x + w - r, y);
30052               this.quadraticCurveTo(x + w, y, x + w, y + r);
30053               this.lineTo(x + w, y + h - r);
30054               this.quadraticCurveTo(x + w, y + h, x + w - r, y + h);
30055               this.lineTo(x + r, y + h);
30056               this.quadraticCurveTo(x, y + h, x, y + h - r);
30057               this.lineTo(x, y + r);
30058               return this.quadraticCurveTo(x, y, x + r, y);
30059             },
30060             ellipse: function(x, y, r1, r2) {
30061               var ox, oy, xe, xm, ye, ym;
30062               if (r2 == null) {
30063                 r2 = r1;
30064               }
30065               x -= r1;
30066               y -= r2;
30067               ox = r1 * KAPPA;
30068               oy = r2 * KAPPA;
30069               xe = x + r1 * 2;
30070               ye = y + r2 * 2;
30071               xm = x + r1;
30072               ym = y + r2;
30073               this.moveTo(x, ym);
30074               this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
30075               this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
30076               this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
30077               this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
30078               return this.closePath();
30079             },
30080             circle: function(x, y, radius) {
30081               return this.ellipse(x, y, radius);
30082             },
30083             polygon: function() {
30084               var point, points, _i, _len;
30085               points = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
30086               this.moveTo.apply(this, points.shift());
30087               for (_i = 0, _len = points.length; _i < _len; _i++) {
30088                 point = points[_i];
30089                 this.lineTo.apply(this, point);
30090               }
30091               return this.closePath();
30092             },
30093             path: function(path) {
30094               SVGPath.apply(this, path);
30095               return this;
30096             },
30097             _windingRule: function(rule) {
30098               if (/even-?odd/.test(rule)) {
30099                 return '*';
30100               }
30101               return '';
30102             },
30103             fill: function(color, rule) {
30104               if (/(even-?odd)|(non-?zero)/.test(color)) {
30105                 rule = color;
30106                 color = null;
30107               }
30108               if (color) {
30109                 this.fillColor(color);
30110               }
30111               return this.addContent('f' + this._windingRule(rule));
30112             },
30113             stroke: function(color) {
30114               if (color) {
30115                 this.strokeColor(color);
30116               }
30117               return this.addContent('S');
30118             },
30119             fillAndStroke: function(fillColor, strokeColor, rule) {
30120               var isFillRule;
30121               if (strokeColor == null) {
30122                 strokeColor = fillColor;
30123               }
30124               isFillRule = /(even-?odd)|(non-?zero)/;
30125               if (isFillRule.test(fillColor)) {
30126                 rule = fillColor;
30127                 fillColor = null;
30128               }
30129               if (isFillRule.test(strokeColor)) {
30130                 rule = strokeColor;
30131                 strokeColor = fillColor;
30132               }
30133               if (fillColor) {
30134                 this.fillColor(fillColor);
30135                 this.strokeColor(strokeColor);
30136               }
30137               return this.addContent('B' + this._windingRule(rule));
30138             },
30139             clip: function(rule) {
30140               return this.addContent('W' + this._windingRule(rule) + ' n');
30141             },
30142             transform: function(m11, m12, m21, m22, dx, dy) {
30143               var m, m0, m1, m2, m3, m4, m5, v, values;
30144               m = this._ctm;
30145               m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
30146               m[0] = m0 * m11 + m2 * m12;
30147               m[1] = m1 * m11 + m3 * m12;
30148               m[2] = m0 * m21 + m2 * m22;
30149               m[3] = m1 * m21 + m3 * m22;
30150               m[4] = m0 * dx + m2 * dy + m4;
30151               m[5] = m1 * dx + m3 * dy + m5;
30152               values = ((function() {
30153                 var _i, _len, _ref, _results;
30154                 _ref = [m11, m12, m21, m22, dx, dy];
30155                 _results = [];
30156                 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
30157                   v = _ref[_i];
30158                   _results.push(+v.toFixed(5));
30159                 }
30160                 return _results;
30161               })()).join(' ');
30162               return this.addContent("" + values + " cm");
30163             },
30164             translate: function(x, y) {
30165               return this.transform(1, 0, 0, 1, x, y);
30166             },
30167             rotate: function(angle, options) {
30168               var cos, rad, sin, x, x1, y, y1, _ref;
30169               if (options == null) {
30170                 options = {};
30171               }
30172               rad = angle * Math.PI / 180;
30173               cos = Math.cos(rad);
30174               sin = Math.sin(rad);
30175               x = y = 0;
30176               if (options.origin != null) {
30177                 _ref = options.origin, x = _ref[0], y = _ref[1];
30178                 x1 = x * cos - y * sin;
30179                 y1 = x * sin + y * cos;
30180                 x -= x1;
30181                 y -= y1;
30182               }
30183               return this.transform(cos, sin, -sin, cos, x, y);
30184             },
30185             scale: function(xFactor, yFactor, options) {
30186               var x, y, _ref;
30187               if (yFactor == null) {
30188                 yFactor = xFactor;
30189               }
30190               if (options == null) {
30191                 options = {};
30192               }
30193               if (arguments.length === 2) {
30194                 yFactor = xFactor;
30195                 options = yFactor;
30196               }
30197               x = y = 0;
30198               if (options.origin != null) {
30199                 _ref = options.origin, x = _ref[0], y = _ref[1];
30200                 x -= xFactor * x;
30201                 y -= yFactor * y;
30202               }
30203               return this.transform(xFactor, 0, 0, yFactor, x, y);
30204             }
30205           };
30206
30207         }).call(this);
30208
30209
30210 /***/ },
30211 /* 68 */
30212 /***/ function(module, exports) {
30213
30214         // Generated by CoffeeScript 1.7.1
30215         (function() {
30216           var SVGPath;
30217
30218           SVGPath = (function() {
30219             var apply, arcToSegments, cx, cy, parameters, parse, px, py, runners, segmentToBezier, solveArc, sx, sy;
30220
30221             function SVGPath() {}
30222
30223             SVGPath.apply = function(doc, path) {
30224               var commands;
30225               commands = parse(path);
30226               return apply(commands, doc);
30227             };
30228
30229             parameters = {
30230               A: 7,
30231               a: 7,
30232               C: 6,
30233               c: 6,
30234               H: 1,
30235               h: 1,
30236               L: 2,
30237               l: 2,
30238               M: 2,
30239               m: 2,
30240               Q: 4,
30241               q: 4,
30242               S: 4,
30243               s: 4,
30244               T: 2,
30245               t: 2,
30246               V: 1,
30247               v: 1,
30248               Z: 0,
30249               z: 0
30250             };
30251
30252             parse = function(path) {
30253               var args, c, cmd, curArg, foundDecimal, params, ret, _i, _len;
30254               ret = [];
30255               args = [];
30256               curArg = "";
30257               foundDecimal = false;
30258               params = 0;
30259               for (_i = 0, _len = path.length; _i < _len; _i++) {
30260                 c = path[_i];
30261                 if (parameters[c] != null) {
30262                   params = parameters[c];
30263                   if (cmd) {
30264                     if (curArg.length > 0) {
30265                       args[args.length] = +curArg;
30266                     }
30267                     ret[ret.length] = {
30268                       cmd: cmd,
30269                       args: args
30270                     };
30271                     args = [];
30272                     curArg = "";
30273                     foundDecimal = false;
30274                   }
30275                   cmd = c;
30276                 } else if ((c === " " || c === ",") || (c === "-" && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') || (c === "." && foundDecimal)) {
30277                   if (curArg.length === 0) {
30278                     continue;
30279                   }
30280                   if (args.length === params) {
30281                     ret[ret.length] = {
30282                       cmd: cmd,
30283                       args: args
30284                     };
30285                     args = [+curArg];
30286                     if (cmd === "M") {
30287                       cmd = "L";
30288                     }
30289                     if (cmd === "m") {
30290                       cmd = "l";
30291                     }
30292                   } else {
30293                     args[args.length] = +curArg;
30294                   }
30295                   foundDecimal = c === ".";
30296                   curArg = c === '-' || c === '.' ? c : '';
30297                 } else {
30298                   curArg += c;
30299                   if (c === '.') {
30300                     foundDecimal = true;
30301                   }
30302                 }
30303               }
30304               if (curArg.length > 0) {
30305                 if (args.length === params) {
30306                   ret[ret.length] = {
30307                     cmd: cmd,
30308                     args: args
30309                   };
30310                   args = [+curArg];
30311                   if (cmd === "M") {
30312                     cmd = "L";
30313                   }
30314                   if (cmd === "m") {
30315                     cmd = "l";
30316                   }
30317                 } else {
30318                   args[args.length] = +curArg;
30319                 }
30320               }
30321               ret[ret.length] = {
30322                 cmd: cmd,
30323                 args: args
30324               };
30325               return ret;
30326             };
30327
30328             cx = cy = px = py = sx = sy = 0;
30329
30330             apply = function(commands, doc) {
30331               var c, i, _i, _len, _name;
30332               cx = cy = px = py = sx = sy = 0;
30333               for (i = _i = 0, _len = commands.length; _i < _len; i = ++_i) {
30334                 c = commands[i];
30335                 if (typeof runners[_name = c.cmd] === "function") {
30336                   runners[_name](doc, c.args);
30337                 }
30338               }
30339               return cx = cy = px = py = 0;
30340             };
30341
30342             runners = {
30343               M: function(doc, a) {
30344                 cx = a[0];
30345                 cy = a[1];
30346                 px = py = null;
30347                 sx = cx;
30348                 sy = cy;
30349                 return doc.moveTo(cx, cy);
30350               },
30351               m: function(doc, a) {
30352                 cx += a[0];
30353                 cy += a[1];
30354                 px = py = null;
30355                 sx = cx;
30356                 sy = cy;
30357                 return doc.moveTo(cx, cy);
30358               },
30359               C: function(doc, a) {
30360                 cx = a[4];
30361                 cy = a[5];
30362                 px = a[2];
30363                 py = a[3];
30364                 return doc.bezierCurveTo.apply(doc, a);
30365               },
30366               c: function(doc, a) {
30367                 doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);
30368                 px = cx + a[2];
30369                 py = cy + a[3];
30370                 cx += a[4];
30371                 return cy += a[5];
30372               },
30373               S: function(doc, a) {
30374                 if (px === null) {
30375                   px = cx;
30376                   py = cy;
30377                 }
30378                 doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);
30379                 px = a[0];
30380                 py = a[1];
30381                 cx = a[2];
30382                 return cy = a[3];
30383               },
30384               s: function(doc, a) {
30385                 if (px === null) {
30386                   px = cx;
30387                   py = cy;
30388                 }
30389                 doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);
30390                 px = cx + a[0];
30391                 py = cy + a[1];
30392                 cx += a[2];
30393                 return cy += a[3];
30394               },
30395               Q: function(doc, a) {
30396                 px = a[0];
30397                 py = a[1];
30398                 cx = a[2];
30399                 cy = a[3];
30400                 return doc.quadraticCurveTo(a[0], a[1], cx, cy);
30401               },
30402               q: function(doc, a) {
30403                 doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);
30404                 px = cx + a[0];
30405                 py = cy + a[1];
30406                 cx += a[2];
30407                 return cy += a[3];
30408               },
30409               T: function(doc, a) {
30410                 if (px === null) {
30411                   px = cx;
30412                   py = cy;
30413                 } else {
30414                   px = cx - (px - cx);
30415                   py = cy - (py - cy);
30416                 }
30417                 doc.quadraticCurveTo(px, py, a[0], a[1]);
30418                 px = cx - (px - cx);
30419                 py = cy - (py - cy);
30420                 cx = a[0];
30421                 return cy = a[1];
30422               },
30423               t: function(doc, a) {
30424                 if (px === null) {
30425                   px = cx;
30426                   py = cy;
30427                 } else {
30428                   px = cx - (px - cx);
30429                   py = cy - (py - cy);
30430                 }
30431                 doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);
30432                 cx += a[0];
30433                 return cy += a[1];
30434               },
30435               A: function(doc, a) {
30436                 solveArc(doc, cx, cy, a);
30437                 cx = a[5];
30438                 return cy = a[6];
30439               },
30440               a: function(doc, a) {
30441                 a[5] += cx;
30442                 a[6] += cy;
30443                 solveArc(doc, cx, cy, a);
30444                 cx = a[5];
30445                 return cy = a[6];
30446               },
30447               L: function(doc, a) {
30448                 cx = a[0];
30449                 cy = a[1];
30450                 px = py = null;
30451                 return doc.lineTo(cx, cy);
30452               },
30453               l: function(doc, a) {
30454                 cx += a[0];
30455                 cy += a[1];
30456                 px = py = null;
30457                 return doc.lineTo(cx, cy);
30458               },
30459               H: function(doc, a) {
30460                 cx = a[0];
30461                 px = py = null;
30462                 return doc.lineTo(cx, cy);
30463               },
30464               h: function(doc, a) {
30465                 cx += a[0];
30466                 px = py = null;
30467                 return doc.lineTo(cx, cy);
30468               },
30469               V: function(doc, a) {
30470                 cy = a[0];
30471                 px = py = null;
30472                 return doc.lineTo(cx, cy);
30473               },
30474               v: function(doc, a) {
30475                 cy += a[0];
30476                 px = py = null;
30477                 return doc.lineTo(cx, cy);
30478               },
30479               Z: function(doc) {
30480                 doc.closePath();
30481                 cx = sx;
30482                 return cy = sy;
30483               },
30484               z: function(doc) {
30485                 doc.closePath();
30486                 cx = sx;
30487                 return cy = sy;
30488               }
30489             };
30490
30491             solveArc = function(doc, x, y, coords) {
30492               var bez, ex, ey, large, rot, rx, ry, seg, segs, sweep, _i, _len, _results;
30493               rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6];
30494               segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);
30495               _results = [];
30496               for (_i = 0, _len = segs.length; _i < _len; _i++) {
30497                 seg = segs[_i];
30498                 bez = segmentToBezier.apply(null, seg);
30499                 _results.push(doc.bezierCurveTo.apply(doc, bez));
30500               }
30501               return _results;
30502             };
30503
30504             arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {
30505               var a00, a01, a10, a11, cos_th, d, i, pl, result, segments, sfactor, sfactor_sq, sin_th, th, th0, th1, th2, th3, th_arc, x0, x1, xc, y0, y1, yc, _i;
30506               th = rotateX * (Math.PI / 180);
30507               sin_th = Math.sin(th);
30508               cos_th = Math.cos(th);
30509               rx = Math.abs(rx);
30510               ry = Math.abs(ry);
30511               px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;
30512               py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;
30513               pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);
30514               if (pl > 1) {
30515                 pl = Math.sqrt(pl);
30516                 rx *= pl;
30517                 ry *= pl;
30518               }
30519               a00 = cos_th / rx;
30520               a01 = sin_th / rx;
30521               a10 = (-sin_th) / ry;
30522               a11 = cos_th / ry;
30523               x0 = a00 * ox + a01 * oy;
30524               y0 = a10 * ox + a11 * oy;
30525               x1 = a00 * x + a01 * y;
30526               y1 = a10 * x + a11 * y;
30527               d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);
30528               sfactor_sq = 1 / d - 0.25;
30529               if (sfactor_sq < 0) {
30530                 sfactor_sq = 0;
30531               }
30532               sfactor = Math.sqrt(sfactor_sq);
30533               if (sweep === large) {
30534                 sfactor = -sfactor;
30535               }
30536               xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);
30537               yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);
30538               th0 = Math.atan2(y0 - yc, x0 - xc);
30539               th1 = Math.atan2(y1 - yc, x1 - xc);
30540               th_arc = th1 - th0;
30541               if (th_arc < 0 && sweep === 1) {
30542                 th_arc += 2 * Math.PI;
30543               } else if (th_arc > 0 && sweep === 0) {
30544                 th_arc -= 2 * Math.PI;
30545               }
30546               segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));
30547               result = [];
30548               for (i = _i = 0; 0 <= segments ? _i < segments : _i > segments; i = 0 <= segments ? ++_i : --_i) {
30549                 th2 = th0 + i * th_arc / segments;
30550                 th3 = th0 + (i + 1) * th_arc / segments;
30551                 result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];
30552               }
30553               return result;
30554             };
30555
30556             segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {
30557               var a00, a01, a10, a11, t, th_half, x1, x2, x3, y1, y2, y3;
30558               a00 = cos_th * rx;
30559               a01 = -sin_th * ry;
30560               a10 = sin_th * rx;
30561               a11 = cos_th * ry;
30562               th_half = 0.5 * (th1 - th0);
30563               t = (8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);
30564               x1 = cx + Math.cos(th0) - t * Math.sin(th0);
30565               y1 = cy + Math.sin(th0) + t * Math.cos(th0);
30566               x3 = cx + Math.cos(th1);
30567               y3 = cy + Math.sin(th1);
30568               x2 = x3 + t * Math.sin(th1);
30569               y2 = y3 - t * Math.cos(th1);
30570               return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];
30571             };
30572
30573             return SVGPath;
30574
30575           })();
30576
30577           module.exports = SVGPath;
30578
30579         }).call(this);
30580
30581
30582 /***/ },
30583 /* 69 */
30584 /***/ function(module, exports, __webpack_require__) {
30585
30586         // Generated by CoffeeScript 1.7.1
30587         (function() {
30588           var PDFFont;
30589
30590           PDFFont = __webpack_require__(70);
30591
30592           module.exports = {
30593             initFonts: function() {
30594               this._fontFamilies = {};
30595               this._fontCount = 0;
30596               this._fontSize = 12;
30597               this._font = null;
30598               this._registeredFonts = {};
30599               
30600             },
30601             font: function(src, family, size) {
30602               var cacheKey, font, id, _ref;
30603               if (typeof family === 'number') {
30604                 size = family;
30605                 family = null;
30606               }
30607               if (typeof src === 'string' && this._registeredFonts[src]) {
30608                 cacheKey = src;
30609                 _ref = this._registeredFonts[src], src = _ref.src, family = _ref.family;
30610               } else {
30611                 cacheKey = family || src;
30612                 if (typeof cacheKey !== 'string') {
30613                   cacheKey = null;
30614                 }
30615               }
30616               if (size != null) {
30617                 this.fontSize(size);
30618               }
30619               if (font = this._fontFamilies[cacheKey]) {
30620                 this._font = font;
30621                 return this;
30622               }
30623               id = 'F' + (++this._fontCount);
30624               this._font = new PDFFont(this, src, family, id);
30625               if (font = this._fontFamilies[this._font.name]) {
30626                 this._font = font;
30627                 return this;
30628               }
30629               if (cacheKey) {
30630                 this._fontFamilies[cacheKey] = this._font;
30631               }
30632               this._fontFamilies[this._font.name] = this._font;
30633               return this;
30634             },
30635             fontSize: function(_fontSize) {
30636               this._fontSize = _fontSize;
30637               return this;
30638             },
30639             currentLineHeight: function(includeGap) {
30640               if (includeGap == null) {
30641                 includeGap = false;
30642               }
30643               return this._font.lineHeight(this._fontSize, includeGap);
30644             },
30645             registerFont: function(name, src, family) {
30646               this._registeredFonts[name] = {
30647                 src: src,
30648                 family: family
30649               };
30650               return this;
30651             }
30652           };
30653
30654         }).call(this);
30655
30656
30657 /***/ },
30658 /* 70 */
30659 /***/ function(module, exports, __webpack_require__) {
30660
30661         /* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {// Generated by CoffeeScript 1.7.1
30662
30663         /*
30664         PDFFont - embeds fonts in PDF documents
30665         By Devon Govett
30666          */
30667
30668         (function() {
30669           var AFMFont, PDFFont, Subset, TTFFont, fs;
30670
30671           TTFFont = __webpack_require__(71);
30672
30673           AFMFont = __webpack_require__(87);
30674
30675           Subset = __webpack_require__(88);
30676
30677           fs = __webpack_require__(44);
30678
30679           PDFFont = (function() {
30680             var STANDARD_FONTS, toUnicodeCmap;
30681
30682             function PDFFont(document, src, family, id) {
30683               this.document = document;
30684               this.id = id;
30685               if (typeof src === 'string') {
30686                 if (src in STANDARD_FONTS) {
30687                   this.isAFM = true;
30688                   this.font = new AFMFont(STANDARD_FONTS[src]());
30689                   this.registerAFM(src);
30690                   return;
30691                 } else if (/\.(ttf|ttc)$/i.test(src)) {
30692                   this.font = TTFFont.open(src, family);
30693                 } else if (/\.dfont$/i.test(src)) {
30694                   this.font = TTFFont.fromDFont(src, family);
30695                 } else {
30696                   throw new Error('Not a supported font format or standard PDF font.');
30697                 }
30698               } else if (Buffer.isBuffer(src)) {
30699                 this.font = TTFFont.fromBuffer(src, family);
30700               } else if (src instanceof Uint8Array) {
30701                 this.font = TTFFont.fromBuffer(new Buffer(src), family);
30702               } else if (src instanceof ArrayBuffer) {
30703                 this.font = TTFFont.fromBuffer(new Buffer(new Uint8Array(src)), family);
30704               } else {
30705                 throw new Error('Not a supported font format or standard PDF font.');
30706               }
30707               this.subset = new Subset(this.font);
30708               this.registerTTF();
30709             }
30710
30711             STANDARD_FONTS = {
30712               "Courier": function() {
30713                 return fs.readFileSync(__dirname + "/font/data/Courier.afm", 'utf8');
30714               },
30715               "Courier-Bold": function() {
30716                 return fs.readFileSync(__dirname + "/font/data/Courier-Bold.afm", 'utf8');
30717               },
30718               "Courier-Oblique": function() {
30719                 return fs.readFileSync(__dirname + "/font/data/Courier-Oblique.afm", 'utf8');
30720               },
30721               "Courier-BoldOblique": function() {
30722                 return fs.readFileSync(__dirname + "/font/data/Courier-BoldOblique.afm", 'utf8');
30723               },
30724               "Helvetica": function() {
30725                 return fs.readFileSync(__dirname + "/font/data/Helvetica.afm", 'utf8');
30726               },
30727               "Helvetica-Bold": function() {
30728                 return fs.readFileSync(__dirname + "/font/data/Helvetica-Bold.afm", 'utf8');
30729               },
30730               "Helvetica-Oblique": function() {
30731                 return fs.readFileSync(__dirname + "/font/data/Helvetica-Oblique.afm", 'utf8');
30732               },
30733               "Helvetica-BoldOblique": function() {
30734                 return fs.readFileSync(__dirname + "/font/data/Helvetica-BoldOblique.afm", 'utf8');
30735               },
30736               "Times-Roman": function() {
30737                 return fs.readFileSync(__dirname + "/font/data/Times-Roman.afm", 'utf8');
30738               },
30739               "Times-Bold": function() {
30740                 return fs.readFileSync(__dirname + "/font/data/Times-Bold.afm", 'utf8');
30741               },
30742               "Times-Italic": function() {
30743                 return fs.readFileSync(__dirname + "/font/data/Times-Italic.afm", 'utf8');
30744               },
30745               "Times-BoldItalic": function() {
30746                 return fs.readFileSync(__dirname + "/font/data/Times-BoldItalic.afm", 'utf8');
30747               },
30748               "Symbol": function() {
30749                 return fs.readFileSync(__dirname + "/font/data/Symbol.afm", 'utf8');
30750               },
30751               "ZapfDingbats": function() {
30752                 return fs.readFileSync(__dirname + "/font/data/ZapfDingbats.afm", 'utf8');
30753               }
30754             };
30755
30756             PDFFont.prototype.use = function(characters) {
30757               var _ref;
30758               return (_ref = this.subset) != null ? _ref.use(characters) : void 0;
30759             };
30760
30761             PDFFont.prototype.embed = function() {
30762               if (this.embedded || (this.dictionary == null)) {
30763                 return;
30764               }
30765               if (this.isAFM) {
30766                 this.embedAFM();
30767               } else {
30768                 this.embedTTF();
30769               }
30770               return this.embedded = true;
30771             };
30772
30773             PDFFont.prototype.encode = function(text) {
30774               var _ref;
30775               if (this.isAFM) {
30776                 return this.font.encodeText(text);
30777               } else {
30778                 return ((_ref = this.subset) != null ? _ref.encodeText(text) : void 0) || text;
30779               }
30780             };
30781
30782             PDFFont.prototype.ref = function() {
30783               return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();
30784             };
30785
30786             PDFFont.prototype.registerTTF = function() {
30787               var e, hi, low, raw, _ref;
30788               this.name = this.font.name.postscriptName;
30789               this.scaleFactor = 1000.0 / this.font.head.unitsPerEm;
30790               this.bbox = (function() {
30791                 var _i, _len, _ref, _results;
30792                 _ref = this.font.bbox;
30793                 _results = [];
30794                 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
30795                   e = _ref[_i];
30796                   _results.push(Math.round(e * this.scaleFactor));
30797                 }
30798                 return _results;
30799               }).call(this);
30800               this.stemV = 0;
30801               if (this.font.post.exists) {
30802                 raw = this.font.post.italic_angle;
30803                 hi = raw >> 16;
30804                 low = raw & 0xFF;
30805                 if (hi & 0x8000 !== 0) {
30806                   hi = -((hi ^ 0xFFFF) + 1);
30807                 }
30808                 this.italicAngle = +("" + hi + "." + low);
30809               } else {
30810                 this.italicAngle = 0;
30811               }
30812               this.ascender = Math.round(this.font.ascender * this.scaleFactor);
30813               this.decender = Math.round(this.font.decender * this.scaleFactor);
30814               this.lineGap = Math.round(this.font.lineGap * this.scaleFactor);
30815               this.capHeight = (this.font.os2.exists && this.font.os2.capHeight) || this.ascender;
30816               this.xHeight = (this.font.os2.exists && this.font.os2.xHeight) || 0;
30817               this.familyClass = (this.font.os2.exists && this.font.os2.familyClass || 0) >> 8;
30818               this.isSerif = (_ref = this.familyClass) === 1 || _ref === 2 || _ref === 3 || _ref === 4 || _ref === 5 || _ref === 7;
30819               this.isScript = this.familyClass === 10;
30820               this.flags = 0;
30821               if (this.font.post.isFixedPitch) {
30822                 this.flags |= 1 << 0;
30823               }
30824               if (this.isSerif) {
30825                 this.flags |= 1 << 1;
30826               }
30827               if (this.isScript) {
30828                 this.flags |= 1 << 3;
30829               }
30830               if (this.italicAngle !== 0) {
30831                 this.flags |= 1 << 6;
30832               }
30833               this.flags |= 1 << 5;
30834               if (!this.font.cmap.unicode) {
30835                 throw new Error('No unicode cmap for font');
30836               }
30837             };
30838
30839             PDFFont.prototype.embedTTF = function() {
30840               var charWidths, cmap, code, data, descriptor, firstChar, fontfile, glyph;
30841               data = this.subset.encode();
30842               fontfile = this.document.ref();
30843               fontfile.write(data);
30844               fontfile.data.Length1 = fontfile.uncompressedLength;
30845               fontfile.end();
30846               descriptor = this.document.ref({
30847                 Type: 'FontDescriptor',
30848                 FontName: this.subset.postscriptName,
30849                 FontFile2: fontfile,
30850                 FontBBox: this.bbox,
30851                 Flags: this.flags,
30852                 StemV: this.stemV,
30853                 ItalicAngle: this.italicAngle,
30854                 Ascent: this.ascender,
30855                 Descent: this.decender,
30856                 CapHeight: this.capHeight,
30857                 XHeight: this.xHeight
30858               });
30859               descriptor.end();
30860               firstChar = +Object.keys(this.subset.cmap)[0];
30861               charWidths = (function() {
30862                 var _ref, _results;
30863                 _ref = this.subset.cmap;
30864                 _results = [];
30865                 for (code in _ref) {
30866                   glyph = _ref[code];
30867                   _results.push(Math.round(this.font.widthOfGlyph(glyph)));
30868                 }
30869                 return _results;
30870               }).call(this);
30871               cmap = this.document.ref();
30872               cmap.end(toUnicodeCmap(this.subset.subset));
30873               this.dictionary.data = {
30874                 Type: 'Font',
30875                 BaseFont: this.subset.postscriptName,
30876                 Subtype: 'TrueType',
30877                 FontDescriptor: descriptor,
30878                 FirstChar: firstChar,
30879                 LastChar: firstChar + charWidths.length - 1,
30880                 Widths: charWidths,
30881                 Encoding: 'MacRomanEncoding',
30882                 ToUnicode: cmap
30883               };
30884               return this.dictionary.end();
30885             };
30886
30887             toUnicodeCmap = function(map) {
30888               var code, codes, range, unicode, unicodeMap, _i, _len;
30889               unicodeMap = '/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n  /Registry (Adobe)\n  /Ordering (UCS)\n  /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<00><ff>\nendcodespacerange';
30890               codes = Object.keys(map).sort(function(a, b) {
30891                 return a - b;
30892               });
30893               range = [];
30894               for (_i = 0, _len = codes.length; _i < _len; _i++) {
30895                 code = codes[_i];
30896                 if (range.length >= 100) {
30897                   unicodeMap += "\n" + range.length + " beginbfchar\n" + (range.join('\n')) + "\nendbfchar";
30898                   range = [];
30899                 }
30900                 unicode = ('0000' + map[code].toString(16)).slice(-4);
30901                 code = (+code).toString(16);
30902                 range.push("<" + code + "><" + unicode + ">");
30903               }
30904               if (range.length) {
30905                 unicodeMap += "\n" + range.length + " beginbfchar\n" + (range.join('\n')) + "\nendbfchar\n";
30906               }
30907               return unicodeMap += 'endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend';
30908             };
30909
30910             PDFFont.prototype.registerAFM = function(name) {
30911               var _ref;
30912               this.name = name;
30913               return _ref = this.font, this.ascender = _ref.ascender, this.decender = _ref.decender, this.bbox = _ref.bbox, this.lineGap = _ref.lineGap, _ref;
30914             };
30915
30916             PDFFont.prototype.embedAFM = function() {
30917               this.dictionary.data = {
30918                 Type: 'Font',
30919                 BaseFont: this.name,
30920                 Subtype: 'Type1',
30921                 Encoding: 'WinAnsiEncoding'
30922               };
30923               return this.dictionary.end();
30924             };
30925
30926             PDFFont.prototype.widthOfString = function(string, size) {
30927               var charCode, i, scale, width, _i, _ref;
30928               string = '' + string;
30929               width = 0;
30930               for (i = _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
30931                 charCode = string.charCodeAt(i);
30932                 width += this.font.widthOfGlyph(this.font.characterToGlyph(charCode)) || 0;
30933               }
30934               scale = size / 1000;
30935               return width * scale;
30936             };
30937
30938             PDFFont.prototype.lineHeight = function(size, includeGap) {
30939               var gap;
30940               if (includeGap == null) {
30941                 includeGap = false;
30942               }
30943               gap = includeGap ? this.lineGap : 0;
30944               return (this.ascender + gap - this.decender) / 1000 * size;
30945             };
30946
30947             return PDFFont;
30948
30949           })();
30950
30951           module.exports = PDFFont;
30952
30953         }).call(this);
30954
30955         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, "/"))
30956
30957 /***/ },
30958 /* 71 */
30959 /***/ function(module, exports, __webpack_require__) {
30960
30961         // Generated by CoffeeScript 1.7.1
30962         (function() {
30963           var CmapTable, DFont, Data, Directory, GlyfTable, HeadTable, HheaTable, HmtxTable, LocaTable, MaxpTable, NameTable, OS2Table, PostTable, TTFFont, fs;
30964
30965           fs = __webpack_require__(44);
30966
30967           Data = __webpack_require__(72);
30968
30969           DFont = __webpack_require__(73);
30970
30971           Directory = __webpack_require__(74);
30972
30973           NameTable = __webpack_require__(75);
30974
30975           HeadTable = __webpack_require__(78);
30976
30977           CmapTable = __webpack_require__(79);
30978
30979           HmtxTable = __webpack_require__(80);
30980
30981           HheaTable = __webpack_require__(81);
30982
30983           MaxpTable = __webpack_require__(82);
30984
30985           PostTable = __webpack_require__(83);
30986
30987           OS2Table = __webpack_require__(84);
30988
30989           LocaTable = __webpack_require__(85);
30990
30991           GlyfTable = __webpack_require__(86);
30992
30993           TTFFont = (function() {
30994             TTFFont.open = function(filename, name) {
30995               var contents;
30996               contents = fs.readFileSync(filename);
30997               return new TTFFont(contents, name);
30998             };
30999
31000             TTFFont.fromDFont = function(filename, family) {
31001               var dfont;
31002               dfont = DFont.open(filename);
31003               return new TTFFont(dfont.getNamedFont(family));
31004             };
31005
31006             TTFFont.fromBuffer = function(buffer, family) {
31007               var dfont, e, ttf;
31008               try {
31009                 ttf = new TTFFont(buffer, family);
31010                 if (!(ttf.head.exists && ttf.name.exists && ttf.cmap.exists)) {
31011                   dfont = new DFont(buffer);
31012                   ttf = new TTFFont(dfont.getNamedFont(family));
31013                   if (!(ttf.head.exists && ttf.name.exists && ttf.cmap.exists)) {
31014                     throw new Error('Invalid TTF file in DFont');
31015                   }
31016                 }
31017                 return ttf;
31018               } catch (_error) {
31019                 e = _error;
31020                 throw new Error('Unknown font format in buffer: ' + e.message);
31021               }
31022             };
31023
31024             function TTFFont(rawData, name) {
31025               var data, i, numFonts, offset, offsets, version, _i, _j, _len;
31026               this.rawData = rawData;
31027               data = this.contents = new Data(this.rawData);
31028               if (data.readString(4) === 'ttcf') {
31029                 if (!name) {
31030                   throw new Error("Must specify a font name for TTC files.");
31031                 }
31032                 version = data.readInt();
31033                 numFonts = data.readInt();
31034                 offsets = [];
31035                 for (i = _i = 0; 0 <= numFonts ? _i < numFonts : _i > numFonts; i = 0 <= numFonts ? ++_i : --_i) {
31036                   offsets[i] = data.readInt();
31037                 }
31038                 for (i = _j = 0, _len = offsets.length; _j < _len; i = ++_j) {
31039                   offset = offsets[i];
31040                   data.pos = offset;
31041                   this.parse();
31042                   if (this.name.postscriptName === name) {
31043                     return;
31044                   }
31045                 }
31046                 throw new Error("Font " + name + " not found in TTC file.");
31047               } else {
31048                 data.pos = 0;
31049                 this.parse();
31050               }
31051             }
31052
31053             TTFFont.prototype.parse = function() {
31054               this.directory = new Directory(this.contents);
31055               this.head = new HeadTable(this);
31056               this.name = new NameTable(this);
31057               this.cmap = new CmapTable(this);
31058               this.hhea = new HheaTable(this);
31059               this.maxp = new MaxpTable(this);
31060               this.hmtx = new HmtxTable(this);
31061               this.post = new PostTable(this);
31062               this.os2 = new OS2Table(this);
31063               this.loca = new LocaTable(this);
31064               this.glyf = new GlyfTable(this);
31065               this.ascender = (this.os2.exists && this.os2.ascender) || this.hhea.ascender;
31066               this.decender = (this.os2.exists && this.os2.decender) || this.hhea.decender;
31067               this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;
31068               return this.bbox = [this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax];
31069             };
31070
31071             TTFFont.prototype.characterToGlyph = function(character) {
31072               var _ref;
31073               return ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) || 0;
31074             };
31075
31076             TTFFont.prototype.widthOfGlyph = function(glyph) {
31077               var scale;
31078               scale = 1000.0 / this.head.unitsPerEm;
31079               return this.hmtx.forGlyph(glyph).advance * scale;
31080             };
31081
31082             return TTFFont;
31083
31084           })();
31085
31086           module.exports = TTFFont;
31087
31088         }).call(this);
31089
31090
31091 /***/ },
31092 /* 72 */
31093 /***/ function(module, exports) {
31094
31095         // Generated by CoffeeScript 1.7.1
31096         (function() {
31097           var Data;
31098
31099           Data = (function() {
31100             function Data(data) {
31101               this.data = data != null ? data : [];
31102               this.pos = 0;
31103               this.length = this.data.length;
31104             }
31105
31106             Data.prototype.readByte = function() {
31107               return this.data[this.pos++];
31108             };
31109
31110             Data.prototype.writeByte = function(byte) {
31111               return this.data[this.pos++] = byte;
31112             };
31113
31114             Data.prototype.byteAt = function(index) {
31115               return this.data[index];
31116             };
31117
31118             Data.prototype.readBool = function() {
31119               return !!this.readByte();
31120             };
31121
31122             Data.prototype.writeBool = function(val) {
31123               return this.writeByte(val ? 1 : 0);
31124             };
31125
31126             Data.prototype.readUInt32 = function() {
31127               var b1, b2, b3, b4;
31128               b1 = this.readByte() * 0x1000000;
31129               b2 = this.readByte() << 16;
31130               b3 = this.readByte() << 8;
31131               b4 = this.readByte();
31132               return b1 + b2 + b3 + b4;
31133             };
31134
31135             Data.prototype.writeUInt32 = function(val) {
31136               this.writeByte((val >>> 24) & 0xff);
31137               this.writeByte((val >> 16) & 0xff);
31138               this.writeByte((val >> 8) & 0xff);
31139               return this.writeByte(val & 0xff);
31140             };
31141
31142             Data.prototype.readInt32 = function() {
31143               var int;
31144               int = this.readUInt32();
31145               if (int >= 0x80000000) {
31146                 return int - 0x100000000;
31147               } else {
31148                 return int;
31149               }
31150             };
31151
31152             Data.prototype.writeInt32 = function(val) {
31153               if (val < 0) {
31154                 val += 0x100000000;
31155               }
31156               return this.writeUInt32(val);
31157             };
31158
31159             Data.prototype.readUInt16 = function() {
31160               var b1, b2;
31161               b1 = this.readByte() << 8;
31162               b2 = this.readByte();
31163               return b1 | b2;
31164             };
31165
31166             Data.prototype.writeUInt16 = function(val) {
31167               this.writeByte((val >> 8) & 0xff);
31168               return this.writeByte(val & 0xff);
31169             };
31170
31171             Data.prototype.readInt16 = function() {
31172               var int;
31173               int = this.readUInt16();
31174               if (int >= 0x8000) {
31175                 return int - 0x10000;
31176               } else {
31177                 return int;
31178               }
31179             };
31180
31181             Data.prototype.writeInt16 = function(val) {
31182               if (val < 0) {
31183                 val += 0x10000;
31184               }
31185               return this.writeUInt16(val);
31186             };
31187
31188             Data.prototype.readString = function(length) {
31189               var i, ret, _i;
31190               ret = [];
31191               for (i = _i = 0; 0 <= length ? _i < length : _i > length; i = 0 <= length ? ++_i : --_i) {
31192                 ret[i] = String.fromCharCode(this.readByte());
31193               }
31194               return ret.join('');
31195             };
31196
31197             Data.prototype.writeString = function(val) {
31198               var i, _i, _ref, _results;
31199               _results = [];
31200               for (i = _i = 0, _ref = val.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
31201                 _results.push(this.writeByte(val.charCodeAt(i)));
31202               }
31203               return _results;
31204             };
31205
31206             Data.prototype.stringAt = function(pos, length) {
31207               this.pos = pos;
31208               return this.readString(length);
31209             };
31210
31211             Data.prototype.readShort = function() {
31212               return this.readInt16();
31213             };
31214
31215             Data.prototype.writeShort = function(val) {
31216               return this.writeInt16(val);
31217             };
31218
31219             Data.prototype.readLongLong = function() {
31220               var b1, b2, b3, b4, b5, b6, b7, b8;
31221               b1 = this.readByte();
31222               b2 = this.readByte();
31223               b3 = this.readByte();
31224               b4 = this.readByte();
31225               b5 = this.readByte();
31226               b6 = this.readByte();
31227               b7 = this.readByte();
31228               b8 = this.readByte();
31229               if (b1 & 0x80) {
31230                 return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1;
31231               }
31232               return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8;
31233             };
31234
31235             Data.prototype.writeLongLong = function(val) {
31236               var high, low;
31237               high = Math.floor(val / 0x100000000);
31238               low = val & 0xffffffff;
31239               this.writeByte((high >> 24) & 0xff);
31240               this.writeByte((high >> 16) & 0xff);
31241               this.writeByte((high >> 8) & 0xff);
31242               this.writeByte(high & 0xff);
31243               this.writeByte((low >> 24) & 0xff);
31244               this.writeByte((low >> 16) & 0xff);
31245               this.writeByte((low >> 8) & 0xff);
31246               return this.writeByte(low & 0xff);
31247             };
31248
31249             Data.prototype.readInt = function() {
31250               return this.readInt32();
31251             };
31252
31253             Data.prototype.writeInt = function(val) {
31254               return this.writeInt32(val);
31255             };
31256
31257             Data.prototype.slice = function(start, end) {
31258               return this.data.slice(start, end);
31259             };
31260
31261             Data.prototype.read = function(bytes) {
31262               var buf, i, _i;
31263               buf = [];
31264               for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
31265                 buf.push(this.readByte());
31266               }
31267               return buf;
31268             };
31269
31270             Data.prototype.write = function(bytes) {
31271               var byte, _i, _len, _results;
31272               _results = [];
31273               for (_i = 0, _len = bytes.length; _i < _len; _i++) {
31274                 byte = bytes[_i];
31275                 _results.push(this.writeByte(byte));
31276               }
31277               return _results;
31278             };
31279
31280             return Data;
31281
31282           })();
31283
31284           module.exports = Data;
31285
31286         }).call(this);
31287
31288
31289 /***/ },
31290 /* 73 */
31291 /***/ function(module, exports, __webpack_require__) {
31292
31293         // Generated by CoffeeScript 1.7.1
31294         (function() {
31295           var DFont, Data, Directory, NameTable, fs;
31296
31297           fs = __webpack_require__(44);
31298
31299           Data = __webpack_require__(72);
31300
31301           Directory = __webpack_require__(74);
31302
31303           NameTable = __webpack_require__(75);
31304
31305           DFont = (function() {
31306             DFont.open = function(filename) {
31307               var contents;
31308               contents = fs.readFileSync(filename);
31309               return new DFont(contents);
31310             };
31311
31312             function DFont(contents) {
31313               this.contents = new Data(contents);
31314               this.parse(this.contents);
31315             }
31316
31317             DFont.prototype.parse = function(data) {
31318               var attr, b2, b3, b4, dataLength, dataOffset, dataOfs, entry, font, handle, i, id, j, len, length, mapLength, mapOffset, maxIndex, maxTypeIndex, name, nameListOffset, nameOfs, p, pos, refListOffset, type, typeListOffset, _i, _j;
31319               dataOffset = data.readInt();
31320               mapOffset = data.readInt();
31321               dataLength = data.readInt();
31322               mapLength = data.readInt();
31323               this.map = {};
31324               data.pos = mapOffset + 24;
31325               typeListOffset = data.readShort() + mapOffset;
31326               nameListOffset = data.readShort() + mapOffset;
31327               data.pos = typeListOffset;
31328               maxIndex = data.readShort();
31329               for (i = _i = 0; _i <= maxIndex; i = _i += 1) {
31330                 type = data.readString(4);
31331                 maxTypeIndex = data.readShort();
31332                 refListOffset = data.readShort();
31333                 this.map[type] = {
31334                   list: [],
31335                   named: {}
31336                 };
31337                 pos = data.pos;
31338                 data.pos = typeListOffset + refListOffset;
31339                 for (j = _j = 0; _j <= maxTypeIndex; j = _j += 1) {
31340                   id = data.readShort();
31341                   nameOfs = data.readShort();
31342                   attr = data.readByte();
31343                   b2 = data.readByte() << 16;
31344                   b3 = data.readByte() << 8;
31345                   b4 = data.readByte();
31346                   dataOfs = dataOffset + (0 | b2 | b3 | b4);
31347                   handle = data.readUInt32();
31348                   entry = {
31349                     id: id,
31350                     attributes: attr,
31351                     offset: dataOfs,
31352                     handle: handle
31353                   };
31354                   p = data.pos;
31355                   if (nameOfs !== -1 && (nameListOffset + nameOfs < mapOffset + mapLength)) {
31356                     data.pos = nameListOffset + nameOfs;
31357                     len = data.readByte();
31358                     entry.name = data.readString(len);
31359                   } else if (type === 'sfnt') {
31360                     data.pos = entry.offset;
31361                     length = data.readUInt32();
31362                     font = {};
31363                     font.contents = new Data(data.slice(data.pos, data.pos + length));
31364                     font.directory = new Directory(font.contents);
31365                     name = new NameTable(font);
31366                     entry.name = name.fontName[0].raw;
31367                   }
31368                   data.pos = p;
31369                   this.map[type].list.push(entry);
31370                   if (entry.name) {
31371                     this.map[type].named[entry.name] = entry;
31372                   }
31373                 }
31374                 data.pos = pos;
31375               }
31376             };
31377
31378             DFont.prototype.getNamedFont = function(name) {
31379               var data, entry, length, pos, ret, _ref;
31380               data = this.contents;
31381               pos = data.pos;
31382               entry = (_ref = this.map.sfnt) != null ? _ref.named[name] : void 0;
31383               if (!entry) {
31384                 throw new Error("Font " + name + " not found in DFont file.");
31385               }
31386               data.pos = entry.offset;
31387               length = data.readUInt32();
31388               ret = data.slice(data.pos, data.pos + length);
31389               data.pos = pos;
31390               return ret;
31391             };
31392
31393             return DFont;
31394
31395           })();
31396
31397           module.exports = DFont;
31398
31399         }).call(this);
31400
31401
31402 /***/ },
31403 /* 74 */
31404 /***/ function(module, exports, __webpack_require__) {
31405
31406         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
31407         (function() {
31408           var Data, Directory,
31409             __slice = [].slice;
31410
31411           Data = __webpack_require__(72);
31412
31413           Directory = (function() {
31414             var checksum;
31415
31416             function Directory(data) {
31417               var entry, i, _i, _ref;
31418               this.scalarType = data.readInt();
31419               this.tableCount = data.readShort();
31420               this.searchRange = data.readShort();
31421               this.entrySelector = data.readShort();
31422               this.rangeShift = data.readShort();
31423               this.tables = {};
31424               for (i = _i = 0, _ref = this.tableCount; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
31425                 entry = {
31426                   tag: data.readString(4),
31427                   checksum: data.readInt(),
31428                   offset: data.readInt(),
31429                   length: data.readInt()
31430                 };
31431                 this.tables[entry.tag] = entry;
31432               }
31433             }
31434
31435             Directory.prototype.encode = function(tables) {
31436               var adjustment, directory, directoryLength, entrySelector, headOffset, log2, offset, rangeShift, searchRange, sum, table, tableCount, tableData, tag;
31437               tableCount = Object.keys(tables).length;
31438               log2 = Math.log(2);
31439               searchRange = Math.floor(Math.log(tableCount) / log2) * 16;
31440               entrySelector = Math.floor(searchRange / log2);
31441               rangeShift = tableCount * 16 - searchRange;
31442               directory = new Data;
31443               directory.writeInt(this.scalarType);
31444               directory.writeShort(tableCount);
31445               directory.writeShort(searchRange);
31446               directory.writeShort(entrySelector);
31447               directory.writeShort(rangeShift);
31448               directoryLength = tableCount * 16;
31449               offset = directory.pos + directoryLength;
31450               headOffset = null;
31451               tableData = [];
31452               for (tag in tables) {
31453                 table = tables[tag];
31454                 directory.writeString(tag);
31455                 directory.writeInt(checksum(table));
31456                 directory.writeInt(offset);
31457                 directory.writeInt(table.length);
31458                 tableData = tableData.concat(table);
31459                 if (tag === 'head') {
31460                   headOffset = offset;
31461                 }
31462                 offset += table.length;
31463                 while (offset % 4) {
31464                   tableData.push(0);
31465                   offset++;
31466                 }
31467               }
31468               directory.write(tableData);
31469               sum = checksum(directory.data);
31470               adjustment = 0xB1B0AFBA - sum;
31471               directory.pos = headOffset + 8;
31472               directory.writeUInt32(adjustment);
31473               return new Buffer(directory.data);
31474             };
31475
31476             checksum = function(data) {
31477               var i, sum, tmp, _i, _ref;
31478               data = __slice.call(data);
31479               while (data.length % 4) {
31480                 data.push(0);
31481               }
31482               tmp = new Data(data);
31483               sum = 0;
31484               for (i = _i = 0, _ref = data.length; _i < _ref; i = _i += 4) {
31485                 sum += tmp.readUInt32();
31486               }
31487               return sum & 0xFFFFFFFF;
31488             };
31489
31490             return Directory;
31491
31492           })();
31493
31494           module.exports = Directory;
31495
31496         }).call(this);
31497
31498         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
31499
31500 /***/ },
31501 /* 75 */
31502 /***/ function(module, exports, __webpack_require__) {
31503
31504         // Generated by CoffeeScript 1.7.1
31505         (function() {
31506           var Data, NameEntry, NameTable, Table, utils,
31507             __hasProp = {}.hasOwnProperty,
31508             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
31509
31510           Table = __webpack_require__(76);
31511
31512           Data = __webpack_require__(72);
31513
31514           utils = __webpack_require__(77);
31515
31516           NameTable = (function(_super) {
31517             var subsetTag;
31518
31519             __extends(NameTable, _super);
31520
31521             function NameTable() {
31522               return NameTable.__super__.constructor.apply(this, arguments);
31523             }
31524
31525             NameTable.prototype.tag = 'name';
31526
31527             NameTable.prototype.parse = function(data) {
31528               var count, entries, entry, format, i, name, stringOffset, strings, text, _i, _j, _len, _name;
31529               data.pos = this.offset;
31530               format = data.readShort();
31531               count = data.readShort();
31532               stringOffset = data.readShort();
31533               entries = [];
31534               for (i = _i = 0; 0 <= count ? _i < count : _i > count; i = 0 <= count ? ++_i : --_i) {
31535                 entries.push({
31536                   platformID: data.readShort(),
31537                   encodingID: data.readShort(),
31538                   languageID: data.readShort(),
31539                   nameID: data.readShort(),
31540                   length: data.readShort(),
31541                   offset: this.offset + stringOffset + data.readShort()
31542                 });
31543               }
31544               strings = {};
31545               for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {
31546                 entry = entries[i];
31547                 data.pos = entry.offset;
31548                 text = data.readString(entry.length);
31549                 name = new NameEntry(text, entry);
31550                 if (strings[_name = entry.nameID] == null) {
31551                   strings[_name] = [];
31552                 }
31553                 strings[entry.nameID].push(name);
31554               }
31555               this.strings = strings;
31556               this.copyright = strings[0];
31557               this.fontFamily = strings[1];
31558               this.fontSubfamily = strings[2];
31559               this.uniqueSubfamily = strings[3];
31560               this.fontName = strings[4];
31561               this.version = strings[5];
31562               this.postscriptName = strings[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g, "");
31563               this.trademark = strings[7];
31564               this.manufacturer = strings[8];
31565               this.designer = strings[9];
31566               this.description = strings[10];
31567               this.vendorUrl = strings[11];
31568               this.designerUrl = strings[12];
31569               this.license = strings[13];
31570               this.licenseUrl = strings[14];
31571               this.preferredFamily = strings[15];
31572               this.preferredSubfamily = strings[17];
31573               this.compatibleFull = strings[18];
31574               return this.sampleText = strings[19];
31575             };
31576
31577             subsetTag = "AAAAAA";
31578
31579             NameTable.prototype.encode = function() {
31580               var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;
31581               strings = {};
31582               _ref = this.strings;
31583               for (id in _ref) {
31584                 val = _ref[id];
31585                 strings[id] = val;
31586               }
31587               postscriptName = new NameEntry("" + subsetTag + "+" + this.postscriptName, {
31588                 platformID: 1,
31589                 encodingID: 0,
31590                 languageID: 0
31591               });
31592               strings[6] = [postscriptName];
31593               subsetTag = utils.successorOf(subsetTag);
31594               strCount = 0;
31595               for (id in strings) {
31596                 list = strings[id];
31597                 if (list != null) {
31598                   strCount += list.length;
31599                 }
31600               }
31601               table = new Data;
31602               strTable = new Data;
31603               table.writeShort(0);
31604               table.writeShort(strCount);
31605               table.writeShort(6 + 12 * strCount);
31606               for (nameID in strings) {
31607                 list = strings[nameID];
31608                 if (list != null) {
31609                   for (_i = 0, _len = list.length; _i < _len; _i++) {
31610                     string = list[_i];
31611                     table.writeShort(string.platformID);
31612                     table.writeShort(string.encodingID);
31613                     table.writeShort(string.languageID);
31614                     table.writeShort(nameID);
31615                     table.writeShort(string.length);
31616                     table.writeShort(strTable.pos);
31617                     strTable.writeString(string.raw);
31618                   }
31619                 }
31620               }
31621               return nameTable = {
31622                 postscriptName: postscriptName.raw,
31623                 table: table.data.concat(strTable.data)
31624               };
31625             };
31626
31627             return NameTable;
31628
31629           })(Table);
31630
31631           module.exports = NameTable;
31632
31633           NameEntry = (function() {
31634             function NameEntry(raw, entry) {
31635               this.raw = raw;
31636               this.length = this.raw.length;
31637               this.platformID = entry.platformID;
31638               this.encodingID = entry.encodingID;
31639               this.languageID = entry.languageID;
31640             }
31641
31642             return NameEntry;
31643
31644           })();
31645
31646         }).call(this);
31647
31648
31649 /***/ },
31650 /* 76 */
31651 /***/ function(module, exports) {
31652
31653         // Generated by CoffeeScript 1.7.1
31654         (function() {
31655           var Table;
31656
31657           Table = (function() {
31658             function Table(file) {
31659               var info;
31660               this.file = file;
31661               info = this.file.directory.tables[this.tag];
31662               this.exists = !!info;
31663               if (info) {
31664                 this.offset = info.offset, this.length = info.length;
31665                 this.parse(this.file.contents);
31666               }
31667             }
31668
31669             Table.prototype.parse = function() {};
31670
31671             Table.prototype.encode = function() {};
31672
31673             Table.prototype.raw = function() {
31674               if (!this.exists) {
31675                 return null;
31676               }
31677               this.file.contents.pos = this.offset;
31678               return this.file.contents.read(this.length);
31679             };
31680
31681             return Table;
31682
31683           })();
31684
31685           module.exports = Table;
31686
31687         }).call(this);
31688
31689
31690 /***/ },
31691 /* 77 */
31692 /***/ function(module, exports) {
31693
31694         // Generated by CoffeeScript 1.7.1
31695
31696         /*
31697          * An implementation of Ruby's string.succ method.
31698          * By Devon Govett
31699          *
31700          * Returns the successor to str. The successor is calculated by incrementing characters starting 
31701          * from the rightmost alphanumeric (or the rightmost character if there are no alphanumerics) in the
31702          * string. Incrementing a digit always results in another digit, and incrementing a letter results in
31703          * another letter of the same case.
31704          *
31705          * If the increment generates a carry, the character to the left of it is incremented. This 
31706          * process repeats until there is no carry, adding an additional character if necessary.
31707          *
31708          * succ("abcd")      == "abce"
31709          * succ("THX1138")   == "THX1139"
31710          * succ("<<koala>>") == "<<koalb>>"
31711          * succ("1999zzz")   == "2000aaa"
31712          * succ("ZZZ9999")   == "AAAA0000"
31713          */
31714
31715         (function() {
31716           exports.successorOf = function(input) {
31717             var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;
31718             alphabet = 'abcdefghijklmnopqrstuvwxyz';
31719             length = alphabet.length;
31720             result = input;
31721             i = input.length;
31722             while (i >= 0) {
31723               last = input.charAt(--i);
31724               if (isNaN(last)) {
31725                 index = alphabet.indexOf(last.toLowerCase());
31726                 if (index === -1) {
31727                   next = last;
31728                   carry = true;
31729                 } else {
31730                   next = alphabet.charAt((index + 1) % length);
31731                   isUpperCase = last === last.toUpperCase();
31732                   if (isUpperCase) {
31733                     next = next.toUpperCase();
31734                   }
31735                   carry = index + 1 >= length;
31736                   if (carry && i === 0) {
31737                     added = isUpperCase ? 'A' : 'a';
31738                     result = added + next + result.slice(1);
31739                     break;
31740                   }
31741                 }
31742               } else {
31743                 next = +last + 1;
31744                 carry = next > 9;
31745                 if (carry) {
31746                   next = 0;
31747                 }
31748                 if (carry && i === 0) {
31749                   result = '1' + next + result.slice(1);
31750                   break;
31751                 }
31752               }
31753               result = result.slice(0, i) + next + result.slice(i + 1);
31754               if (!carry) {
31755                 break;
31756               }
31757             }
31758             return result;
31759           };
31760
31761           exports.invert = function(object) {
31762             var key, ret, val;
31763             ret = {};
31764             for (key in object) {
31765               val = object[key];
31766               ret[val] = key;
31767             }
31768             return ret;
31769           };
31770
31771         }).call(this);
31772
31773
31774 /***/ },
31775 /* 78 */
31776 /***/ function(module, exports, __webpack_require__) {
31777
31778         // Generated by CoffeeScript 1.7.1
31779         (function() {
31780           var Data, HeadTable, Table,
31781             __hasProp = {}.hasOwnProperty,
31782             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
31783
31784           Table = __webpack_require__(76);
31785
31786           Data = __webpack_require__(72);
31787
31788           HeadTable = (function(_super) {
31789             __extends(HeadTable, _super);
31790
31791             function HeadTable() {
31792               return HeadTable.__super__.constructor.apply(this, arguments);
31793             }
31794
31795             HeadTable.prototype.tag = 'head';
31796
31797             HeadTable.prototype.parse = function(data) {
31798               data.pos = this.offset;
31799               this.version = data.readInt();
31800               this.revision = data.readInt();
31801               this.checkSumAdjustment = data.readInt();
31802               this.magicNumber = data.readInt();
31803               this.flags = data.readShort();
31804               this.unitsPerEm = data.readShort();
31805               this.created = data.readLongLong();
31806               this.modified = data.readLongLong();
31807               this.xMin = data.readShort();
31808               this.yMin = data.readShort();
31809               this.xMax = data.readShort();
31810               this.yMax = data.readShort();
31811               this.macStyle = data.readShort();
31812               this.lowestRecPPEM = data.readShort();
31813               this.fontDirectionHint = data.readShort();
31814               this.indexToLocFormat = data.readShort();
31815               return this.glyphDataFormat = data.readShort();
31816             };
31817
31818             HeadTable.prototype.encode = function(loca) {
31819               var table;
31820               table = new Data;
31821               table.writeInt(this.version);
31822               table.writeInt(this.revision);
31823               table.writeInt(this.checkSumAdjustment);
31824               table.writeInt(this.magicNumber);
31825               table.writeShort(this.flags);
31826               table.writeShort(this.unitsPerEm);
31827               table.writeLongLong(this.created);
31828               table.writeLongLong(this.modified);
31829               table.writeShort(this.xMin);
31830               table.writeShort(this.yMin);
31831               table.writeShort(this.xMax);
31832               table.writeShort(this.yMax);
31833               table.writeShort(this.macStyle);
31834               table.writeShort(this.lowestRecPPEM);
31835               table.writeShort(this.fontDirectionHint);
31836               table.writeShort(loca.type);
31837               table.writeShort(this.glyphDataFormat);
31838               return table.data;
31839             };
31840
31841             return HeadTable;
31842
31843           })(Table);
31844
31845           module.exports = HeadTable;
31846
31847         }).call(this);
31848
31849
31850 /***/ },
31851 /* 79 */
31852 /***/ function(module, exports, __webpack_require__) {
31853
31854         // Generated by CoffeeScript 1.7.1
31855         (function() {
31856           var CmapEntry, CmapTable, Data, Table,
31857             __hasProp = {}.hasOwnProperty,
31858             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
31859
31860           Table = __webpack_require__(76);
31861
31862           Data = __webpack_require__(72);
31863
31864           CmapTable = (function(_super) {
31865             __extends(CmapTable, _super);
31866
31867             function CmapTable() {
31868               return CmapTable.__super__.constructor.apply(this, arguments);
31869             }
31870
31871             CmapTable.prototype.tag = 'cmap';
31872
31873             CmapTable.prototype.parse = function(data) {
31874               var entry, i, tableCount, _i;
31875               data.pos = this.offset;
31876               this.version = data.readUInt16();
31877               tableCount = data.readUInt16();
31878               this.tables = [];
31879               this.unicode = null;
31880               for (i = _i = 0; 0 <= tableCount ? _i < tableCount : _i > tableCount; i = 0 <= tableCount ? ++_i : --_i) {
31881                 entry = new CmapEntry(data, this.offset);
31882                 this.tables.push(entry);
31883                 if (entry.isUnicode) {
31884                   if (this.unicode == null) {
31885                     this.unicode = entry;
31886                   }
31887                 }
31888               }
31889               return true;
31890             };
31891
31892             CmapTable.encode = function(charmap, encoding) {
31893               var result, table;
31894               if (encoding == null) {
31895                 encoding = 'macroman';
31896               }
31897               result = CmapEntry.encode(charmap, encoding);
31898               table = new Data;
31899               table.writeUInt16(0);
31900               table.writeUInt16(1);
31901               result.table = table.data.concat(result.subtable);
31902               return result;
31903             };
31904
31905             return CmapTable;
31906
31907           })(Table);
31908
31909           CmapEntry = (function() {
31910             function CmapEntry(data, offset) {
31911               var code, count, endCode, glyphId, glyphIds, i, idDelta, idRangeOffset, index, saveOffset, segCount, segCountX2, start, startCode, tail, _i, _j, _k, _len;
31912               this.platformID = data.readUInt16();
31913               this.encodingID = data.readShort();
31914               this.offset = offset + data.readInt();
31915               saveOffset = data.pos;
31916               data.pos = this.offset;
31917               this.format = data.readUInt16();
31918               this.length = data.readUInt16();
31919               this.language = data.readUInt16();
31920               this.isUnicode = (this.platformID === 3 && this.encodingID === 1 && this.format === 4) || this.platformID === 0 && this.format === 4;
31921               this.codeMap = {};
31922               switch (this.format) {
31923                 case 0:
31924                   for (i = _i = 0; _i < 256; i = ++_i) {
31925                     this.codeMap[i] = data.readByte();
31926                   }
31927                   break;
31928                 case 4:
31929                   segCountX2 = data.readUInt16();
31930                   segCount = segCountX2 / 2;
31931                   data.pos += 6;
31932                   endCode = (function() {
31933                     var _j, _results;
31934                     _results = [];
31935                     for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
31936                       _results.push(data.readUInt16());
31937                     }
31938                     return _results;
31939                   })();
31940                   data.pos += 2;
31941                   startCode = (function() {
31942                     var _j, _results;
31943                     _results = [];
31944                     for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
31945                       _results.push(data.readUInt16());
31946                     }
31947                     return _results;
31948                   })();
31949                   idDelta = (function() {
31950                     var _j, _results;
31951                     _results = [];
31952                     for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
31953                       _results.push(data.readUInt16());
31954                     }
31955                     return _results;
31956                   })();
31957                   idRangeOffset = (function() {
31958                     var _j, _results;
31959                     _results = [];
31960                     for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
31961                       _results.push(data.readUInt16());
31962                     }
31963                     return _results;
31964                   })();
31965                   count = (this.length - data.pos + this.offset) / 2;
31966                   glyphIds = (function() {
31967                     var _j, _results;
31968                     _results = [];
31969                     for (i = _j = 0; 0 <= count ? _j < count : _j > count; i = 0 <= count ? ++_j : --_j) {
31970                       _results.push(data.readUInt16());
31971                     }
31972                     return _results;
31973                   })();
31974                   for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {
31975                     tail = endCode[i];
31976                     start = startCode[i];
31977                     for (code = _k = start; start <= tail ? _k <= tail : _k >= tail; code = start <= tail ? ++_k : --_k) {
31978                       if (idRangeOffset[i] === 0) {
31979                         glyphId = code + idDelta[i];
31980                       } else {
31981                         index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);
31982                         glyphId = glyphIds[index] || 0;
31983                         if (glyphId !== 0) {
31984                           glyphId += idDelta[i];
31985                         }
31986                       }
31987                       this.codeMap[code] = glyphId & 0xFFFF;
31988                     }
31989                   }
31990               }
31991               data.pos = saveOffset;
31992             }
31993
31994             CmapEntry.encode = function(charmap, encoding) {
31995               var charMap, code, codeMap, codes, delta, deltas, diff, endCode, endCodes, entrySelector, glyphIDs, i, id, indexes, last, map, nextID, offset, old, rangeOffsets, rangeShift, result, searchRange, segCount, segCountX2, startCode, startCodes, startGlyph, subtable, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _name, _o, _p, _q;
31996               subtable = new Data;
31997               codes = Object.keys(charmap).sort(function(a, b) {
31998                 return a - b;
31999               });
32000               switch (encoding) {
32001                 case 'macroman':
32002                   id = 0;
32003                   indexes = (function() {
32004                     var _i, _results;
32005                     _results = [];
32006                     for (i = _i = 0; _i < 256; i = ++_i) {
32007                       _results.push(0);
32008                     }
32009                     return _results;
32010                   })();
32011                   map = {
32012                     0: 0
32013                   };
32014                   codeMap = {};
32015                   for (_i = 0, _len = codes.length; _i < _len; _i++) {
32016                     code = codes[_i];
32017                     if (map[_name = charmap[code]] == null) {
32018                       map[_name] = ++id;
32019                     }
32020                     codeMap[code] = {
32021                       old: charmap[code],
32022                       "new": map[charmap[code]]
32023                     };
32024                     indexes[code] = map[charmap[code]];
32025                   }
32026                   subtable.writeUInt16(1);
32027                   subtable.writeUInt16(0);
32028                   subtable.writeUInt32(12);
32029                   subtable.writeUInt16(0);
32030                   subtable.writeUInt16(262);
32031                   subtable.writeUInt16(0);
32032                   subtable.write(indexes);
32033                   return result = {
32034                     charMap: codeMap,
32035                     subtable: subtable.data,
32036                     maxGlyphID: id + 1
32037                   };
32038                 case 'unicode':
32039                   startCodes = [];
32040                   endCodes = [];
32041                   nextID = 0;
32042                   map = {};
32043                   charMap = {};
32044                   last = diff = null;
32045                   for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {
32046                     code = codes[_j];
32047                     old = charmap[code];
32048                     if (map[old] == null) {
32049                       map[old] = ++nextID;
32050                     }
32051                     charMap[code] = {
32052                       old: old,
32053                       "new": map[old]
32054                     };
32055                     delta = map[old] - code;
32056                     if ((last == null) || delta !== diff) {
32057                       if (last) {
32058                         endCodes.push(last);
32059                       }
32060                       startCodes.push(code);
32061                       diff = delta;
32062                     }
32063                     last = code;
32064                   }
32065                   if (last) {
32066                     endCodes.push(last);
32067                   }
32068                   endCodes.push(0xFFFF);
32069                   startCodes.push(0xFFFF);
32070                   segCount = startCodes.length;
32071                   segCountX2 = segCount * 2;
32072                   searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);
32073                   entrySelector = Math.log(searchRange / 2) / Math.LN2;
32074                   rangeShift = 2 * segCount - searchRange;
32075                   deltas = [];
32076                   rangeOffsets = [];
32077                   glyphIDs = [];
32078                   for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {
32079                     startCode = startCodes[i];
32080                     endCode = endCodes[i];
32081                     if (startCode === 0xFFFF) {
32082                       deltas.push(0);
32083                       rangeOffsets.push(0);
32084                       break;
32085                     }
32086                     startGlyph = charMap[startCode]["new"];
32087                     if (startCode - startGlyph >= 0x8000) {
32088                       deltas.push(0);
32089                       rangeOffsets.push(2 * (glyphIDs.length + segCount - i));
32090                       for (code = _l = startCode; startCode <= endCode ? _l <= endCode : _l >= endCode; code = startCode <= endCode ? ++_l : --_l) {
32091                         glyphIDs.push(charMap[code]["new"]);
32092                       }
32093                     } else {
32094                       deltas.push(startGlyph - startCode);
32095                       rangeOffsets.push(0);
32096                     }
32097                   }
32098                   subtable.writeUInt16(3);
32099                   subtable.writeUInt16(1);
32100                   subtable.writeUInt32(12);
32101                   subtable.writeUInt16(4);
32102                   subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);
32103                   subtable.writeUInt16(0);
32104                   subtable.writeUInt16(segCountX2);
32105                   subtable.writeUInt16(searchRange);
32106                   subtable.writeUInt16(entrySelector);
32107                   subtable.writeUInt16(rangeShift);
32108                   for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {
32109                     code = endCodes[_m];
32110                     subtable.writeUInt16(code);
32111                   }
32112                   subtable.writeUInt16(0);
32113                   for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {
32114                     code = startCodes[_n];
32115                     subtable.writeUInt16(code);
32116                   }
32117                   for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {
32118                     delta = deltas[_o];
32119                     subtable.writeUInt16(delta);
32120                   }
32121                   for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {
32122                     offset = rangeOffsets[_p];
32123                     subtable.writeUInt16(offset);
32124                   }
32125                   for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {
32126                     id = glyphIDs[_q];
32127                     subtable.writeUInt16(id);
32128                   }
32129                   return result = {
32130                     charMap: charMap,
32131                     subtable: subtable.data,
32132                     maxGlyphID: nextID + 1
32133                   };
32134               }
32135             };
32136
32137             return CmapEntry;
32138
32139           })();
32140
32141           module.exports = CmapTable;
32142
32143         }).call(this);
32144
32145
32146 /***/ },
32147 /* 80 */
32148 /***/ function(module, exports, __webpack_require__) {
32149
32150         // Generated by CoffeeScript 1.7.1
32151         (function() {
32152           var Data, HmtxTable, Table,
32153             __hasProp = {}.hasOwnProperty,
32154             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
32155
32156           Table = __webpack_require__(76);
32157
32158           Data = __webpack_require__(72);
32159
32160           HmtxTable = (function(_super) {
32161             __extends(HmtxTable, _super);
32162
32163             function HmtxTable() {
32164               return HmtxTable.__super__.constructor.apply(this, arguments);
32165             }
32166
32167             HmtxTable.prototype.tag = 'hmtx';
32168
32169             HmtxTable.prototype.parse = function(data) {
32170               var i, last, lsbCount, m, _i, _j, _ref, _results;
32171               data.pos = this.offset;
32172               this.metrics = [];
32173               for (i = _i = 0, _ref = this.file.hhea.numberOfMetrics; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
32174                 this.metrics.push({
32175                   advance: data.readUInt16(),
32176                   lsb: data.readInt16()
32177                 });
32178               }
32179               lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;
32180               this.leftSideBearings = (function() {
32181                 var _j, _results;
32182                 _results = [];
32183                 for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) {
32184                   _results.push(data.readInt16());
32185                 }
32186                 return _results;
32187               })();
32188               this.widths = (function() {
32189                 var _j, _len, _ref1, _results;
32190                 _ref1 = this.metrics;
32191                 _results = [];
32192                 for (_j = 0, _len = _ref1.length; _j < _len; _j++) {
32193                   m = _ref1[_j];
32194                   _results.push(m.advance);
32195                 }
32196                 return _results;
32197               }).call(this);
32198               last = this.widths[this.widths.length - 1];
32199               _results = [];
32200               for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) {
32201                 _results.push(this.widths.push(last));
32202               }
32203               return _results;
32204             };
32205
32206             HmtxTable.prototype.forGlyph = function(id) {
32207               var metrics;
32208               if (id in this.metrics) {
32209                 return this.metrics[id];
32210               }
32211               return metrics = {
32212                 advance: this.metrics[this.metrics.length - 1].advance,
32213                 lsb: this.leftSideBearings[id - this.metrics.length]
32214               };
32215             };
32216
32217             HmtxTable.prototype.encode = function(mapping) {
32218               var id, metric, table, _i, _len;
32219               table = new Data;
32220               for (_i = 0, _len = mapping.length; _i < _len; _i++) {
32221                 id = mapping[_i];
32222                 metric = this.forGlyph(id);
32223                 table.writeUInt16(metric.advance);
32224                 table.writeUInt16(metric.lsb);
32225               }
32226               return table.data;
32227             };
32228
32229             return HmtxTable;
32230
32231           })(Table);
32232
32233           module.exports = HmtxTable;
32234
32235         }).call(this);
32236
32237
32238 /***/ },
32239 /* 81 */
32240 /***/ function(module, exports, __webpack_require__) {
32241
32242         // Generated by CoffeeScript 1.7.1
32243         (function() {
32244           var Data, HheaTable, Table,
32245             __hasProp = {}.hasOwnProperty,
32246             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
32247
32248           Table = __webpack_require__(76);
32249
32250           Data = __webpack_require__(72);
32251
32252           HheaTable = (function(_super) {
32253             __extends(HheaTable, _super);
32254
32255             function HheaTable() {
32256               return HheaTable.__super__.constructor.apply(this, arguments);
32257             }
32258
32259             HheaTable.prototype.tag = 'hhea';
32260
32261             HheaTable.prototype.parse = function(data) {
32262               data.pos = this.offset;
32263               this.version = data.readInt();
32264               this.ascender = data.readShort();
32265               this.decender = data.readShort();
32266               this.lineGap = data.readShort();
32267               this.advanceWidthMax = data.readShort();
32268               this.minLeftSideBearing = data.readShort();
32269               this.minRightSideBearing = data.readShort();
32270               this.xMaxExtent = data.readShort();
32271               this.caretSlopeRise = data.readShort();
32272               this.caretSlopeRun = data.readShort();
32273               this.caretOffset = data.readShort();
32274               data.pos += 4 * 2;
32275               this.metricDataFormat = data.readShort();
32276               return this.numberOfMetrics = data.readUInt16();
32277             };
32278
32279             HheaTable.prototype.encode = function(ids) {
32280               var i, table, _i, _ref;
32281               table = new Data;
32282               table.writeInt(this.version);
32283               table.writeShort(this.ascender);
32284               table.writeShort(this.decender);
32285               table.writeShort(this.lineGap);
32286               table.writeShort(this.advanceWidthMax);
32287               table.writeShort(this.minLeftSideBearing);
32288               table.writeShort(this.minRightSideBearing);
32289               table.writeShort(this.xMaxExtent);
32290               table.writeShort(this.caretSlopeRise);
32291               table.writeShort(this.caretSlopeRun);
32292               table.writeShort(this.caretOffset);
32293               for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
32294                 table.writeByte(0);
32295               }
32296               table.writeShort(this.metricDataFormat);
32297               table.writeUInt16(ids.length);
32298               return table.data;
32299             };
32300
32301             return HheaTable;
32302
32303           })(Table);
32304
32305           module.exports = HheaTable;
32306
32307         }).call(this);
32308
32309
32310 /***/ },
32311 /* 82 */
32312 /***/ function(module, exports, __webpack_require__) {
32313
32314         // Generated by CoffeeScript 1.7.1
32315         (function() {
32316           var Data, MaxpTable, Table,
32317             __hasProp = {}.hasOwnProperty,
32318             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
32319
32320           Table = __webpack_require__(76);
32321
32322           Data = __webpack_require__(72);
32323
32324           MaxpTable = (function(_super) {
32325             __extends(MaxpTable, _super);
32326
32327             function MaxpTable() {
32328               return MaxpTable.__super__.constructor.apply(this, arguments);
32329             }
32330
32331             MaxpTable.prototype.tag = 'maxp';
32332
32333             MaxpTable.prototype.parse = function(data) {
32334               data.pos = this.offset;
32335               this.version = data.readInt();
32336               this.numGlyphs = data.readUInt16();
32337               this.maxPoints = data.readUInt16();
32338               this.maxContours = data.readUInt16();
32339               this.maxCompositePoints = data.readUInt16();
32340               this.maxComponentContours = data.readUInt16();
32341               this.maxZones = data.readUInt16();
32342               this.maxTwilightPoints = data.readUInt16();
32343               this.maxStorage = data.readUInt16();
32344               this.maxFunctionDefs = data.readUInt16();
32345               this.maxInstructionDefs = data.readUInt16();
32346               this.maxStackElements = data.readUInt16();
32347               this.maxSizeOfInstructions = data.readUInt16();
32348               this.maxComponentElements = data.readUInt16();
32349               return this.maxComponentDepth = data.readUInt16();
32350             };
32351
32352             MaxpTable.prototype.encode = function(ids) {
32353               var table;
32354               table = new Data;
32355               table.writeInt(this.version);
32356               table.writeUInt16(ids.length);
32357               table.writeUInt16(this.maxPoints);
32358               table.writeUInt16(this.maxContours);
32359               table.writeUInt16(this.maxCompositePoints);
32360               table.writeUInt16(this.maxComponentContours);
32361               table.writeUInt16(this.maxZones);
32362               table.writeUInt16(this.maxTwilightPoints);
32363               table.writeUInt16(this.maxStorage);
32364               table.writeUInt16(this.maxFunctionDefs);
32365               table.writeUInt16(this.maxInstructionDefs);
32366               table.writeUInt16(this.maxStackElements);
32367               table.writeUInt16(this.maxSizeOfInstructions);
32368               table.writeUInt16(this.maxComponentElements);
32369               table.writeUInt16(this.maxComponentDepth);
32370               return table.data;
32371             };
32372
32373             return MaxpTable;
32374
32375           })(Table);
32376
32377           module.exports = MaxpTable;
32378
32379         }).call(this);
32380
32381
32382 /***/ },
32383 /* 83 */
32384 /***/ function(module, exports, __webpack_require__) {
32385
32386         // Generated by CoffeeScript 1.7.1
32387         (function() {
32388           var Data, PostTable, Table,
32389             __hasProp = {}.hasOwnProperty,
32390             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
32391
32392           Table = __webpack_require__(76);
32393
32394           Data = __webpack_require__(72);
32395
32396           PostTable = (function(_super) {
32397             var POSTSCRIPT_GLYPHS;
32398
32399             __extends(PostTable, _super);
32400
32401             function PostTable() {
32402               return PostTable.__super__.constructor.apply(this, arguments);
32403             }
32404
32405             PostTable.prototype.tag = 'post';
32406
32407             PostTable.prototype.parse = function(data) {
32408               var i, length, numberOfGlyphs, _i, _results;
32409               data.pos = this.offset;
32410               this.format = data.readInt();
32411               this.italicAngle = data.readInt();
32412               this.underlinePosition = data.readShort();
32413               this.underlineThickness = data.readShort();
32414               this.isFixedPitch = data.readInt();
32415               this.minMemType42 = data.readInt();
32416               this.maxMemType42 = data.readInt();
32417               this.minMemType1 = data.readInt();
32418               this.maxMemType1 = data.readInt();
32419               switch (this.format) {
32420                 case 0x00010000:
32421                   break;
32422                 case 0x00020000:
32423                   numberOfGlyphs = data.readUInt16();
32424                   this.glyphNameIndex = [];
32425                   for (i = _i = 0; 0 <= numberOfGlyphs ? _i < numberOfGlyphs : _i > numberOfGlyphs; i = 0 <= numberOfGlyphs ? ++_i : --_i) {
32426                     this.glyphNameIndex.push(data.readUInt16());
32427                   }
32428                   this.names = [];
32429                   _results = [];
32430                   while (data.pos < this.offset + this.length) {
32431                     length = data.readByte();
32432                     _results.push(this.names.push(data.readString(length)));
32433                   }
32434                   return _results;
32435                   break;
32436                 case 0x00025000:
32437                   numberOfGlyphs = data.readUInt16();
32438                   return this.offsets = data.read(numberOfGlyphs);
32439                 case 0x00030000:
32440                   break;
32441                 case 0x00040000:
32442                   return this.map = (function() {
32443                     var _j, _ref, _results1;
32444                     _results1 = [];
32445                     for (i = _j = 0, _ref = this.file.maxp.numGlyphs; 0 <= _ref ? _j < _ref : _j > _ref; i = 0 <= _ref ? ++_j : --_j) {
32446                       _results1.push(data.readUInt32());
32447                     }
32448                     return _results1;
32449                   }).call(this);
32450               }
32451             };
32452
32453             PostTable.prototype.glyphFor = function(code) {
32454               var index;
32455               switch (this.format) {
32456                 case 0x00010000:
32457                   return POSTSCRIPT_GLYPHS[code] || '.notdef';
32458                 case 0x00020000:
32459                   index = this.glyphNameIndex[code];
32460                   if (index <= 257) {
32461                     return POSTSCRIPT_GLYPHS[index];
32462                   } else {
32463                     return this.names[index - 258] || '.notdef';
32464                   }
32465                   break;
32466                 case 0x00025000:
32467                   return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';
32468                 case 0x00030000:
32469                   return '.notdef';
32470                 case 0x00040000:
32471                   return this.map[code] || 0xFFFF;
32472               }
32473             };
32474
32475             PostTable.prototype.encode = function(mapping) {
32476               var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;
32477               if (!this.exists) {
32478                 return null;
32479               }
32480               raw = this.raw();
32481               if (this.format === 0x00030000) {
32482                 return raw;
32483               }
32484               table = new Data(raw.slice(0, 32));
32485               table.writeUInt32(0x00020000);
32486               table.pos = 32;
32487               indexes = [];
32488               strings = [];
32489               for (_i = 0, _len = mapping.length; _i < _len; _i++) {
32490                 id = mapping[_i];
32491                 post = this.glyphFor(id);
32492                 position = POSTSCRIPT_GLYPHS.indexOf(post);
32493                 if (position !== -1) {
32494                   indexes.push(position);
32495                 } else {
32496                   indexes.push(257 + strings.length);
32497                   strings.push(post);
32498                 }
32499               }
32500               table.writeUInt16(Object.keys(mapping).length);
32501               for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {
32502                 index = indexes[_j];
32503                 table.writeUInt16(index);
32504               }
32505               for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {
32506                 string = strings[_k];
32507                 table.writeByte(string.length);
32508                 table.writeString(string);
32509               }
32510               return table.data;
32511             };
32512
32513             POSTSCRIPT_GLYPHS = '.notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\nzero one two three four five six seven eight nine colon semicolon less equal greater\nquestion at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z\nbracketleft backslash bracketright asciicircum underscore grave\na b c d e f g h i j k l m n o p q r s t u v w x y z\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\nsterling section bullet paragraph germandbls registered copyright trademark acute\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\nCacute cacute Ccaron ccaron dcroat'.split(/\s+/g);
32514
32515             return PostTable;
32516
32517           })(Table);
32518
32519           module.exports = PostTable;
32520
32521         }).call(this);
32522
32523
32524 /***/ },
32525 /* 84 */
32526 /***/ function(module, exports, __webpack_require__) {
32527
32528         // Generated by CoffeeScript 1.7.1
32529         (function() {
32530           var OS2Table, Table,
32531             __hasProp = {}.hasOwnProperty,
32532             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
32533
32534           Table = __webpack_require__(76);
32535
32536           OS2Table = (function(_super) {
32537             __extends(OS2Table, _super);
32538
32539             function OS2Table() {
32540               return OS2Table.__super__.constructor.apply(this, arguments);
32541             }
32542
32543             OS2Table.prototype.tag = 'OS/2';
32544
32545             OS2Table.prototype.parse = function(data) {
32546               var i;
32547               data.pos = this.offset;
32548               this.version = data.readUInt16();
32549               this.averageCharWidth = data.readShort();
32550               this.weightClass = data.readUInt16();
32551               this.widthClass = data.readUInt16();
32552               this.type = data.readShort();
32553               this.ySubscriptXSize = data.readShort();
32554               this.ySubscriptYSize = data.readShort();
32555               this.ySubscriptXOffset = data.readShort();
32556               this.ySubscriptYOffset = data.readShort();
32557               this.ySuperscriptXSize = data.readShort();
32558               this.ySuperscriptYSize = data.readShort();
32559               this.ySuperscriptXOffset = data.readShort();
32560               this.ySuperscriptYOffset = data.readShort();
32561               this.yStrikeoutSize = data.readShort();
32562               this.yStrikeoutPosition = data.readShort();
32563               this.familyClass = data.readShort();
32564               this.panose = (function() {
32565                 var _i, _results;
32566                 _results = [];
32567                 for (i = _i = 0; _i < 10; i = ++_i) {
32568                   _results.push(data.readByte());
32569                 }
32570                 return _results;
32571               })();
32572               this.charRange = (function() {
32573                 var _i, _results;
32574                 _results = [];
32575                 for (i = _i = 0; _i < 4; i = ++_i) {
32576                   _results.push(data.readInt());
32577                 }
32578                 return _results;
32579               })();
32580               this.vendorID = data.readString(4);
32581               this.selection = data.readShort();
32582               this.firstCharIndex = data.readShort();
32583               this.lastCharIndex = data.readShort();
32584               if (this.version > 0) {
32585                 this.ascent = data.readShort();
32586                 this.descent = data.readShort();
32587                 this.lineGap = data.readShort();
32588                 this.winAscent = data.readShort();
32589                 this.winDescent = data.readShort();
32590                 this.codePageRange = (function() {
32591                   var _i, _results;
32592                   _results = [];
32593                   for (i = _i = 0; _i < 2; i = ++_i) {
32594                     _results.push(data.readInt());
32595                   }
32596                   return _results;
32597                 })();
32598                 if (this.version > 1) {
32599                   this.xHeight = data.readShort();
32600                   this.capHeight = data.readShort();
32601                   this.defaultChar = data.readShort();
32602                   this.breakChar = data.readShort();
32603                   return this.maxContext = data.readShort();
32604                 }
32605               }
32606             };
32607
32608             OS2Table.prototype.encode = function() {
32609               return this.raw();
32610             };
32611
32612             return OS2Table;
32613
32614           })(Table);
32615
32616           module.exports = OS2Table;
32617
32618         }).call(this);
32619
32620
32621 /***/ },
32622 /* 85 */
32623 /***/ function(module, exports, __webpack_require__) {
32624
32625         // Generated by CoffeeScript 1.7.1
32626         (function() {
32627           var Data, LocaTable, Table,
32628             __hasProp = {}.hasOwnProperty,
32629             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
32630
32631           Table = __webpack_require__(76);
32632
32633           Data = __webpack_require__(72);
32634
32635           LocaTable = (function(_super) {
32636             __extends(LocaTable, _super);
32637
32638             function LocaTable() {
32639               return LocaTable.__super__.constructor.apply(this, arguments);
32640             }
32641
32642             LocaTable.prototype.tag = 'loca';
32643
32644             LocaTable.prototype.parse = function(data) {
32645               var format, i;
32646               data.pos = this.offset;
32647               format = this.file.head.indexToLocFormat;
32648               if (format === 0) {
32649                 return this.offsets = (function() {
32650                   var _i, _ref, _results;
32651                   _results = [];
32652                   for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 2) {
32653                     _results.push(data.readUInt16() * 2);
32654                   }
32655                   return _results;
32656                 }).call(this);
32657               } else {
32658                 return this.offsets = (function() {
32659                   var _i, _ref, _results;
32660                   _results = [];
32661                   for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 4) {
32662                     _results.push(data.readUInt32());
32663                   }
32664                   return _results;
32665                 }).call(this);
32666               }
32667             };
32668
32669             LocaTable.prototype.indexOf = function(id) {
32670               return this.offsets[id];
32671             };
32672
32673             LocaTable.prototype.lengthOf = function(id) {
32674               return this.offsets[id + 1] - this.offsets[id];
32675             };
32676
32677             LocaTable.prototype.encode = function(offsets) {
32678               var o, offset, ret, table, _i, _j, _k, _len, _len1, _len2, _ref;
32679               table = new Data;
32680               for (_i = 0, _len = offsets.length; _i < _len; _i++) {
32681                 offset = offsets[_i];
32682                 if (!(offset > 0xFFFF)) {
32683                   continue;
32684                 }
32685                 _ref = this.offsets;
32686                 for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
32687                   o = _ref[_j];
32688                   table.writeUInt32(o);
32689                 }
32690                 return ret = {
32691                   format: 1,
32692                   table: table.data
32693                 };
32694               }
32695               for (_k = 0, _len2 = offsets.length; _k < _len2; _k++) {
32696                 o = offsets[_k];
32697                 table.writeUInt16(o / 2);
32698               }
32699               return ret = {
32700                 format: 0,
32701                 table: table.data
32702               };
32703             };
32704
32705             return LocaTable;
32706
32707           })(Table);
32708
32709           module.exports = LocaTable;
32710
32711         }).call(this);
32712
32713
32714 /***/ },
32715 /* 86 */
32716 /***/ function(module, exports, __webpack_require__) {
32717
32718         // Generated by CoffeeScript 1.7.1
32719         (function() {
32720           var CompoundGlyph, Data, GlyfTable, SimpleGlyph, Table,
32721             __hasProp = {}.hasOwnProperty,
32722             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
32723             __slice = [].slice;
32724
32725           Table = __webpack_require__(76);
32726
32727           Data = __webpack_require__(72);
32728
32729           GlyfTable = (function(_super) {
32730             __extends(GlyfTable, _super);
32731
32732             function GlyfTable() {
32733               return GlyfTable.__super__.constructor.apply(this, arguments);
32734             }
32735
32736             GlyfTable.prototype.tag = 'glyf';
32737
32738             GlyfTable.prototype.parse = function(data) {
32739               return this.cache = {};
32740             };
32741
32742             GlyfTable.prototype.glyphFor = function(id) {
32743               var data, index, length, loca, numberOfContours, raw, xMax, xMin, yMax, yMin;
32744               if (id in this.cache) {
32745                 return this.cache[id];
32746               }
32747               loca = this.file.loca;
32748               data = this.file.contents;
32749               index = loca.indexOf(id);
32750               length = loca.lengthOf(id);
32751               if (length === 0) {
32752                 return this.cache[id] = null;
32753               }
32754               data.pos = this.offset + index;
32755               raw = new Data(data.read(length));
32756               numberOfContours = raw.readShort();
32757               xMin = raw.readShort();
32758               yMin = raw.readShort();
32759               xMax = raw.readShort();
32760               yMax = raw.readShort();
32761               if (numberOfContours === -1) {
32762                 this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);
32763               } else {
32764                 this.cache[id] = new SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax);
32765               }
32766               return this.cache[id];
32767             };
32768
32769             GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {
32770               var glyph, id, offsets, table, _i, _len;
32771               table = [];
32772               offsets = [];
32773               for (_i = 0, _len = mapping.length; _i < _len; _i++) {
32774                 id = mapping[_i];
32775                 glyph = glyphs[id];
32776                 offsets.push(table.length);
32777                 if (glyph) {
32778                   table = table.concat(glyph.encode(old2new));
32779                 }
32780               }
32781               offsets.push(table.length);
32782               return {
32783                 table: table,
32784                 offsets: offsets
32785               };
32786             };
32787
32788             return GlyfTable;
32789
32790           })(Table);
32791
32792           SimpleGlyph = (function() {
32793             function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {
32794               this.raw = raw;
32795               this.numberOfContours = numberOfContours;
32796               this.xMin = xMin;
32797               this.yMin = yMin;
32798               this.xMax = xMax;
32799               this.yMax = yMax;
32800               this.compound = false;
32801             }
32802
32803             SimpleGlyph.prototype.encode = function() {
32804               return this.raw.data;
32805             };
32806
32807             return SimpleGlyph;
32808
32809           })();
32810
32811           CompoundGlyph = (function() {
32812             var ARG_1_AND_2_ARE_WORDS, MORE_COMPONENTS, WE_HAVE_AN_X_AND_Y_SCALE, WE_HAVE_A_SCALE, WE_HAVE_A_TWO_BY_TWO, WE_HAVE_INSTRUCTIONS;
32813
32814             ARG_1_AND_2_ARE_WORDS = 0x0001;
32815
32816             WE_HAVE_A_SCALE = 0x0008;
32817
32818             MORE_COMPONENTS = 0x0020;
32819
32820             WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
32821
32822             WE_HAVE_A_TWO_BY_TWO = 0x0080;
32823
32824             WE_HAVE_INSTRUCTIONS = 0x0100;
32825
32826             function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {
32827               var data, flags;
32828               this.raw = raw;
32829               this.xMin = xMin;
32830               this.yMin = yMin;
32831               this.xMax = xMax;
32832               this.yMax = yMax;
32833               this.compound = true;
32834               this.glyphIDs = [];
32835               this.glyphOffsets = [];
32836               data = this.raw;
32837               while (true) {
32838                 flags = data.readShort();
32839                 this.glyphOffsets.push(data.pos);
32840                 this.glyphIDs.push(data.readShort());
32841                 if (!(flags & MORE_COMPONENTS)) {
32842                   break;
32843                 }
32844                 if (flags & ARG_1_AND_2_ARE_WORDS) {
32845                   data.pos += 4;
32846                 } else {
32847                   data.pos += 2;
32848                 }
32849                 if (flags & WE_HAVE_A_TWO_BY_TWO) {
32850                   data.pos += 8;
32851                 } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
32852                   data.pos += 4;
32853                 } else if (flags & WE_HAVE_A_SCALE) {
32854                   data.pos += 2;
32855                 }
32856               }
32857             }
32858
32859             CompoundGlyph.prototype.encode = function(mapping) {
32860               var i, id, result, _i, _len, _ref;
32861               result = new Data(__slice.call(this.raw.data));
32862               _ref = this.glyphIDs;
32863               for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
32864                 id = _ref[i];
32865                 result.pos = this.glyphOffsets[i];
32866                 result.writeShort(mapping[id]);
32867               }
32868               return result.data;
32869             };
32870
32871             return CompoundGlyph;
32872
32873           })();
32874
32875           module.exports = GlyfTable;
32876
32877         }).call(this);
32878
32879
32880 /***/ },
32881 /* 87 */
32882 /***/ function(module, exports, __webpack_require__) {
32883
32884         // Generated by CoffeeScript 1.7.1
32885         (function() {
32886           var AFMFont, fs;
32887
32888           fs = __webpack_require__(44);
32889
32890           AFMFont = (function() {
32891             var WIN_ANSI_MAP, characters;
32892
32893             AFMFont.open = function(filename) {
32894               return new AFMFont(fs.readFileSync(filename, 'utf8'));
32895             };
32896
32897             function AFMFont(contents) {
32898               var e, i;
32899               this.contents = contents;
32900               this.attributes = {};
32901               this.glyphWidths = {};
32902               this.boundingBoxes = {};
32903               this.parse();
32904               this.charWidths = (function() {
32905                 var _i, _results;
32906                 _results = [];
32907                 for (i = _i = 0; _i <= 255; i = ++_i) {
32908                   _results.push(this.glyphWidths[characters[i]]);
32909                 }
32910                 return _results;
32911               }).call(this);
32912               this.bbox = (function() {
32913                 var _i, _len, _ref, _results;
32914                 _ref = this.attributes['FontBBox'].split(/\s+/);
32915                 _results = [];
32916                 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
32917                   e = _ref[_i];
32918                   _results.push(+e);
32919                 }
32920                 return _results;
32921               }).call(this);
32922               this.ascender = +(this.attributes['Ascender'] || 0);
32923               this.decender = +(this.attributes['Descender'] || 0);
32924               this.lineGap = (this.bbox[3] - this.bbox[1]) - (this.ascender - this.decender);
32925             }
32926
32927             AFMFont.prototype.parse = function() {
32928               var a, key, line, match, name, section, value, _i, _len, _ref;
32929               section = '';
32930               _ref = this.contents.split('\n');
32931               for (_i = 0, _len = _ref.length; _i < _len; _i++) {
32932                 line = _ref[_i];
32933                 if (match = line.match(/^Start(\w+)/)) {
32934                   section = match[1];
32935                   continue;
32936                 } else if (match = line.match(/^End(\w+)/)) {
32937                   section = '';
32938                   continue;
32939                 }
32940                 switch (section) {
32941                   case 'FontMetrics':
32942                     match = line.match(/(^\w+)\s+(.*)/);
32943                     key = match[1];
32944                     value = match[2];
32945                     if (a = this.attributes[key]) {
32946                       if (!Array.isArray(a)) {
32947                         a = this.attributes[key] = [a];
32948                       }
32949                       a.push(value);
32950                     } else {
32951                       this.attributes[key] = value;
32952                     }
32953                     break;
32954                   case 'CharMetrics':
32955                     if (!/^CH?\s/.test(line)) {
32956                       continue;
32957                     }
32958                     name = line.match(/\bN\s+(\.?\w+)\s*;/)[1];
32959                     this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1];
32960                 }
32961               }
32962             };
32963
32964             WIN_ANSI_MAP = {
32965               402: 131,
32966               8211: 150,
32967               8212: 151,
32968               8216: 145,
32969               8217: 146,
32970               8218: 130,
32971               8220: 147,
32972               8221: 148,
32973               8222: 132,
32974               8224: 134,
32975               8225: 135,
32976               8226: 149,
32977               8230: 133,
32978               8364: 128,
32979               8240: 137,
32980               8249: 139,
32981               8250: 155,
32982               710: 136,
32983               8482: 153,
32984               338: 140,
32985               339: 156,
32986               732: 152,
32987               352: 138,
32988               353: 154,
32989               376: 159,
32990               381: 142,
32991               382: 158
32992             };
32993
32994             AFMFont.prototype.encodeText = function(text) {
32995               var char, i, string, _i, _ref;
32996               string = '';
32997               for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
32998                 char = text.charCodeAt(i);
32999                 char = WIN_ANSI_MAP[char] || char;
33000                 string += String.fromCharCode(char);
33001               }
33002               return string;
33003             };
33004
33005             AFMFont.prototype.characterToGlyph = function(character) {
33006               return characters[WIN_ANSI_MAP[character] || character];
33007             };
33008
33009             AFMFont.prototype.widthOfGlyph = function(glyph) {
33010               return this.glyphWidths[glyph];
33011             };
33012
33013             characters = '.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n\nspace         exclam         quotedbl       numbersign\ndollar        percent        ampersand      quotesingle\nparenleft     parenright     asterisk       plus\ncomma         hyphen         period         slash\nzero          one            two            three\nfour          five           six            seven\neight         nine           colon          semicolon\nless          equal          greater        question\n\nat            A              B              C\nD             E              F              G\nH             I              J              K\nL             M              N              O\nP             Q              R              S\nT             U              V              W\nX             Y              Z              bracketleft\nbackslash     bracketright   asciicircum    underscore\n\ngrave         a              b              c\nd             e              f              g\nh             i              j              k\nl             m              n              o\np             q              r              s\nt             u              v              w\nx             y              z              braceleft\nbar           braceright     asciitilde     .notdef\n\nEuro          .notdef        quotesinglbase florin\nquotedblbase  ellipsis       dagger         daggerdbl\ncircumflex    perthousand    Scaron         guilsinglleft\nOE            .notdef        Zcaron         .notdef\n.notdef       quoteleft      quoteright     quotedblleft\nquotedblright bullet         endash         emdash\ntilde         trademark      scaron         guilsinglright\noe            .notdef        zcaron         ydieresis\n\nspace         exclamdown     cent           sterling\ncurrency      yen            brokenbar      section\ndieresis      copyright      ordfeminine    guillemotleft\nlogicalnot    hyphen         registered     macron\ndegree        plusminus      twosuperior    threesuperior\nacute         mu             paragraph      periodcentered\ncedilla       onesuperior    ordmasculine   guillemotright\nonequarter    onehalf        threequarters  questiondown\n\nAgrave        Aacute         Acircumflex    Atilde\nAdieresis     Aring          AE             Ccedilla\nEgrave        Eacute         Ecircumflex    Edieresis\nIgrave        Iacute         Icircumflex    Idieresis\nEth           Ntilde         Ograve         Oacute\nOcircumflex   Otilde         Odieresis      multiply\nOslash        Ugrave         Uacute         Ucircumflex\nUdieresis     Yacute         Thorn          germandbls\n\nagrave        aacute         acircumflex    atilde\nadieresis     aring          ae             ccedilla\negrave        eacute         ecircumflex    edieresis\nigrave        iacute         icircumflex    idieresis\neth           ntilde         ograve         oacute\nocircumflex   otilde         odieresis      divide\noslash        ugrave         uacute         ucircumflex\nudieresis     yacute         thorn          ydieresis'.split(/\s+/);
33014
33015             return AFMFont;
33016
33017           })();
33018
33019           module.exports = AFMFont;
33020
33021         }).call(this);
33022
33023
33024 /***/ },
33025 /* 88 */
33026 /***/ function(module, exports, __webpack_require__) {
33027
33028         // Generated by CoffeeScript 1.7.1
33029         (function() {
33030           var CmapTable, Subset, utils,
33031             __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
33032
33033           CmapTable = __webpack_require__(79);
33034
33035           utils = __webpack_require__(77);
33036
33037           Subset = (function() {
33038             function Subset(font) {
33039               this.font = font;
33040               this.subset = {};
33041               this.unicodes = {};
33042               this.next = 33;
33043             }
33044
33045             Subset.prototype.use = function(character) {
33046               var i, _i, _ref;
33047               if (typeof character === 'string') {
33048                 for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
33049                   this.use(character.charCodeAt(i));
33050                 }
33051                 return;
33052               }
33053               if (!this.unicodes[character]) {
33054                 this.subset[this.next] = character;
33055                 return this.unicodes[character] = this.next++;
33056               }
33057             };
33058
33059             Subset.prototype.encodeText = function(text) {
33060               var char, i, string, _i, _ref;
33061               string = '';
33062               for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
33063                 char = this.unicodes[text.charCodeAt(i)];
33064                 string += String.fromCharCode(char);
33065               }
33066               return string;
33067             };
33068
33069             Subset.prototype.generateCmap = function() {
33070               var mapping, roman, unicode, unicodeCmap, _ref;
33071               unicodeCmap = this.font.cmap.tables[0].codeMap;
33072               mapping = {};
33073               _ref = this.subset;
33074               for (roman in _ref) {
33075                 unicode = _ref[roman];
33076                 mapping[roman] = unicodeCmap[unicode];
33077               }
33078               return mapping;
33079             };
33080
33081             Subset.prototype.glyphIDs = function() {
33082               var ret, roman, unicode, unicodeCmap, val, _ref;
33083               unicodeCmap = this.font.cmap.tables[0].codeMap;
33084               ret = [0];
33085               _ref = this.subset;
33086               for (roman in _ref) {
33087                 unicode = _ref[roman];
33088                 val = unicodeCmap[unicode];
33089                 if ((val != null) && __indexOf.call(ret, val) < 0) {
33090                   ret.push(val);
33091                 }
33092               }
33093               return ret.sort();
33094             };
33095
33096             Subset.prototype.glyphsFor = function(glyphIDs) {
33097               var additionalIDs, glyph, glyphs, id, _i, _len, _ref;
33098               glyphs = {};
33099               for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {
33100                 id = glyphIDs[_i];
33101                 glyphs[id] = this.font.glyf.glyphFor(id);
33102               }
33103               additionalIDs = [];
33104               for (id in glyphs) {
33105                 glyph = glyphs[id];
33106                 if (glyph != null ? glyph.compound : void 0) {
33107                   additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);
33108                 }
33109               }
33110               if (additionalIDs.length > 0) {
33111                 _ref = this.glyphsFor(additionalIDs);
33112                 for (id in _ref) {
33113                   glyph = _ref[id];
33114                   glyphs[id] = glyph;
33115                 }
33116               }
33117               return glyphs;
33118             };
33119
33120             Subset.prototype.encode = function() {
33121               var cmap, code, glyf, glyphs, id, ids, loca, name, new2old, newIDs, nextGlyphID, old2new, oldID, oldIDs, tables, _ref, _ref1;
33122               cmap = CmapTable.encode(this.generateCmap(), 'unicode');
33123               glyphs = this.glyphsFor(this.glyphIDs());
33124               old2new = {
33125                 0: 0
33126               };
33127               _ref = cmap.charMap;
33128               for (code in _ref) {
33129                 ids = _ref[code];
33130                 old2new[ids.old] = ids["new"];
33131               }
33132               nextGlyphID = cmap.maxGlyphID;
33133               for (oldID in glyphs) {
33134                 if (!(oldID in old2new)) {
33135                   old2new[oldID] = nextGlyphID++;
33136                 }
33137               }
33138               new2old = utils.invert(old2new);
33139               newIDs = Object.keys(new2old).sort(function(a, b) {
33140                 return a - b;
33141               });
33142               oldIDs = (function() {
33143                 var _i, _len, _results;
33144                 _results = [];
33145                 for (_i = 0, _len = newIDs.length; _i < _len; _i++) {
33146                   id = newIDs[_i];
33147                   _results.push(new2old[id]);
33148                 }
33149                 return _results;
33150               })();
33151               glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);
33152               loca = this.font.loca.encode(glyf.offsets);
33153               name = this.font.name.encode();
33154               this.postscriptName = name.postscriptName;
33155               this.cmap = {};
33156               _ref1 = cmap.charMap;
33157               for (code in _ref1) {
33158                 ids = _ref1[code];
33159                 this.cmap[code] = ids.old;
33160               }
33161               tables = {
33162                 cmap: cmap.table,
33163                 glyf: glyf.table,
33164                 loca: loca.table,
33165                 hmtx: this.font.hmtx.encode(oldIDs),
33166                 hhea: this.font.hhea.encode(oldIDs),
33167                 maxp: this.font.maxp.encode(oldIDs),
33168                 post: this.font.post.encode(oldIDs),
33169                 name: name.table,
33170                 head: this.font.head.encode(loca)
33171               };
33172               if (this.font.os2.exists) {
33173                 tables['OS/2'] = this.font.os2.raw();
33174               }
33175               return this.font.directory.encode(tables);
33176             };
33177
33178             return Subset;
33179
33180           })();
33181
33182           module.exports = Subset;
33183
33184         }).call(this);
33185
33186
33187 /***/ },
33188 /* 89 */
33189 /***/ function(module, exports, __webpack_require__) {
33190
33191         // Generated by CoffeeScript 1.7.1
33192         (function() {
33193           var LineWrapper;
33194
33195           LineWrapper = __webpack_require__(90);
33196
33197           module.exports = {
33198             initText: function() {
33199               this.x = 0;
33200               this.y = 0;
33201               return this._lineGap = 0;
33202             },
33203             lineGap: function(_lineGap) {
33204               this._lineGap = _lineGap;
33205               return this;
33206             },
33207             moveDown: function(lines) {
33208               if (lines == null) {
33209                 lines = 1;
33210               }
33211               this.y += this.currentLineHeight(true) * lines + this._lineGap;
33212               return this;
33213             },
33214             moveUp: function(lines) {
33215               if (lines == null) {
33216                 lines = 1;
33217               }
33218               this.y -= this.currentLineHeight(true) * lines + this._lineGap;
33219               return this;
33220             },
33221             _text: function(text, x, y, options, lineCallback) {
33222               var line, wrapper, _i, _len, _ref;
33223               options = this._initOptions(x, y, options);
33224               text = '' + text;
33225               if (options.wordSpacing) {
33226                 text = text.replace(/\s{2,}/g, ' ');
33227               }
33228               if (options.width) {
33229                 wrapper = this._wrapper;
33230                 if (!wrapper) {
33231                   wrapper = new LineWrapper(this, options);
33232                   wrapper.on('line', lineCallback);
33233                 }
33234                 this._wrapper = options.continued ? wrapper : null;
33235                 this._textOptions = options.continued ? options : null;
33236                 wrapper.wrap(text, options);
33237               } else {
33238                 _ref = text.split('\n');
33239                 for (_i = 0, _len = _ref.length; _i < _len; _i++) {
33240                   line = _ref[_i];
33241                   lineCallback(line, options);
33242                 }
33243               }
33244               return this;
33245             },
33246             text: function(text, x, y, options) {
33247               return this._text(text, x, y, options, this._line.bind(this));
33248             },
33249             widthOfString: function(string, options) {
33250               if (options == null) {
33251                 options = {};
33252               }
33253               return this._font.widthOfString(string, this._fontSize) + (options.characterSpacing || 0) * (string.length - 1);
33254             },
33255             heightOfString: function(text, options) {
33256               var height, lineGap, x, y;
33257               if (options == null) {
33258                 options = {};
33259               }
33260               x = this.x, y = this.y;
33261               options = this._initOptions(options);
33262               options.height = Infinity;
33263               lineGap = options.lineGap || this._lineGap || 0;
33264               this._text(text, this.x, this.y, options, (function(_this) {
33265                 return function(line, options) {
33266                   return _this.y += _this.currentLineHeight(true) + lineGap;
33267                 };
33268               })(this));
33269               height = this.y - y;
33270               this.x = x;
33271               this.y = y;
33272               return height;
33273             },
33274             list: function(list, x, y, options, wrapper) {
33275               var flatten, i, indent, itemIndent, items, level, levels, r;
33276               options = this._initOptions(x, y, options);
33277               r = Math.round((this._font.ascender / 1000 * this._fontSize) / 3);
33278               indent = options.textIndent || r * 5;
33279               itemIndent = options.bulletIndent || r * 8;
33280               level = 1;
33281               items = [];
33282               levels = [];
33283               flatten = function(list) {
33284                 var i, item, _i, _len, _results;
33285                 _results = [];
33286                 for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
33287                   item = list[i];
33288                   if (Array.isArray(item)) {
33289                     level++;
33290                     flatten(item);
33291                     _results.push(level--);
33292                   } else {
33293                     items.push(item);
33294                     _results.push(levels.push(level));
33295                   }
33296                 }
33297                 return _results;
33298               };
33299               flatten(list);
33300               wrapper = new LineWrapper(this, options);
33301               wrapper.on('line', this._line.bind(this));
33302               level = 1;
33303               i = 0;
33304               wrapper.on('firstLine', (function(_this) {
33305                 return function() {
33306                   var diff, l;
33307                   if ((l = levels[i++]) !== level) {
33308                     diff = itemIndent * (l - level);
33309                     _this.x += diff;
33310                     wrapper.lineWidth -= diff;
33311                     level = l;
33312                   }
33313                   _this.circle(_this.x - indent + r, _this.y + r + (r / 2), r);
33314                   return _this.fill();
33315                 };
33316               })(this));
33317               wrapper.on('sectionStart', (function(_this) {
33318                 return function() {
33319                   var pos;
33320                   pos = indent + itemIndent * (level - 1);
33321                   _this.x += pos;
33322                   return wrapper.lineWidth -= pos;
33323                 };
33324               })(this));
33325               wrapper.on('sectionEnd', (function(_this) {
33326                 return function() {
33327                   var pos;
33328                   pos = indent + itemIndent * (level - 1);
33329                   _this.x -= pos;
33330                   return wrapper.lineWidth += pos;
33331                 };
33332               })(this));
33333               wrapper.wrap(items.join('\n'), options);
33334               return this;
33335             },
33336             _initOptions: function(x, y, options) {
33337               var key, margins, val, _ref;
33338               if (x == null) {
33339                 x = {};
33340               }
33341               if (options == null) {
33342                 options = {};
33343               }
33344               if (typeof x === 'object') {
33345                 options = x;
33346                 x = null;
33347               }
33348               options = (function() {
33349                 var k, opts, v;
33350                 opts = {};
33351                 for (k in options) {
33352                   v = options[k];
33353                   opts[k] = v;
33354                 }
33355                 return opts;
33356               })();
33357               if (this._textOptions) {
33358                 _ref = this._textOptions;
33359                 for (key in _ref) {
33360                   val = _ref[key];
33361                   if (key !== 'continued') {
33362                     if (options[key] == null) {
33363                       options[key] = val;
33364                     }
33365                   }
33366                 }
33367               }
33368               if (x != null) {
33369                 this.x = x;
33370               }
33371               if (y != null) {
33372                 this.y = y;
33373               }
33374               if (options.lineBreak !== false) {
33375                 margins = this.page.margins;
33376                 if (options.width == null) {
33377                   options.width = this.page.width - this.x - margins.right;
33378                 }
33379               }
33380               options.columns || (options.columns = 0);
33381               if (options.columnGap == null) {
33382                 options.columnGap = 18;
33383               }
33384               return options;
33385             },
33386             _line: function(text, options, wrapper) {
33387               var lineGap;
33388               if (options == null) {
33389                 options = {};
33390               }
33391               this._fragment(text, this.x, this.y, options);
33392               lineGap = options.lineGap || this._lineGap || 0;
33393               if (!wrapper) {
33394                 return this.x += this.widthOfString(text);
33395               } else {
33396                 return this.y += this.currentLineHeight(true) + lineGap;
33397               }
33398             },
33399             _fragment: function(text, x, y, options) {
33400               var align, characterSpacing, commands, d, encoded, i, lineWidth, lineY, mode, renderedWidth, spaceWidth, textWidth, word, wordSpacing, words, _base, _i, _len, _name;
33401               text = '' + text;
33402               if (text.length === 0) {
33403                 return;
33404               }
33405               align = options.align || 'left';
33406               wordSpacing = options.wordSpacing || 0;
33407               characterSpacing = options.characterSpacing || 0;
33408               if (options.width) {
33409                 switch (align) {
33410                   case 'right':
33411                     textWidth = this.widthOfString(text.replace(/\s+$/, ''), options);
33412                     x += options.lineWidth - textWidth;
33413                     break;
33414                   case 'center':
33415                     x += options.lineWidth / 2 - options.textWidth / 2;
33416                     break;
33417                   case 'justify':
33418                     words = text.trim().split(/\s+/);
33419                     textWidth = this.widthOfString(text.replace(/\s+/g, ''), options);
33420                     spaceWidth = this.widthOfString(' ') + characterSpacing;
33421                     wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);
33422                 }
33423               }
33424               renderedWidth = options.textWidth + (wordSpacing * (options.wordCount - 1)) + (characterSpacing * (text.length - 1));
33425               if (options.link) {
33426                 this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);
33427               }
33428               if (options.underline || options.strike) {
33429                 this.save();
33430                 if (!options.stroke) {
33431                   this.strokeColor.apply(this, this._fillColor);
33432                 }
33433                 lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);
33434                 this.lineWidth(lineWidth);
33435                 d = options.underline ? 1 : 2;
33436                 lineY = y + this.currentLineHeight() / d;
33437                 if (options.underline) {
33438                   lineY -= lineWidth;
33439                 }
33440                 this.moveTo(x, lineY);
33441                 this.lineTo(x + renderedWidth, lineY);
33442                 this.stroke();
33443                 this.restore();
33444               }
33445               this.save();
33446               this.transform(1, 0, 0, -1, 0, this.page.height);
33447               y = this.page.height - y - (this._font.ascender / 1000 * this._fontSize);
33448               if ((_base = this.page.fonts)[_name = this._font.id] == null) {
33449                 _base[_name] = this._font.ref();
33450               }
33451               this._font.use(text);
33452               this.addContent("BT");
33453               this.addContent("" + x + " " + y + " Td");
33454               this.addContent("/" + this._font.id + " " + this._fontSize + " Tf");
33455               mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;
33456               if (mode) {
33457                 this.addContent("" + mode + " Tr");
33458               }
33459               if (characterSpacing) {
33460                 this.addContent("" + characterSpacing + " Tc");
33461               }
33462               if (wordSpacing) {
33463                 words = text.trim().split(/\s+/);
33464                 wordSpacing += this.widthOfString(' ') + characterSpacing;
33465                 wordSpacing *= 1000 / this._fontSize;
33466                 commands = [];
33467                 for (_i = 0, _len = words.length; _i < _len; _i++) {
33468                   word = words[_i];
33469                   encoded = this._font.encode(word);
33470                   encoded = ((function() {
33471                     var _j, _ref, _results;
33472                     _results = [];
33473                     for (i = _j = 0, _ref = encoded.length; _j < _ref; i = _j += 1) {
33474                       _results.push(encoded.charCodeAt(i).toString(16));
33475                     }
33476                     return _results;
33477                   })()).join('');
33478                   commands.push("<" + encoded + "> " + (-wordSpacing));
33479                 }
33480                 this.addContent("[" + (commands.join(' ')) + "] TJ");
33481               } else {
33482                 encoded = this._font.encode(text);
33483                 encoded = ((function() {
33484                   var _j, _ref, _results;
33485                   _results = [];
33486                   for (i = _j = 0, _ref = encoded.length; _j < _ref; i = _j += 1) {
33487                     _results.push(encoded.charCodeAt(i).toString(16));
33488                   }
33489                   return _results;
33490                 })()).join('');
33491                 this.addContent("<" + encoded + "> Tj");
33492               }
33493               this.addContent("ET");
33494               return this.restore();
33495             }
33496           };
33497
33498         }).call(this);
33499
33500
33501 /***/ },
33502 /* 90 */
33503 /***/ function(module, exports, __webpack_require__) {
33504
33505         // Generated by CoffeeScript 1.7.1
33506         (function() {
33507           var EventEmitter, LineBreaker, LineWrapper,
33508             __hasProp = {}.hasOwnProperty,
33509             __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
33510
33511           EventEmitter = __webpack_require__(26).EventEmitter;
33512
33513           LineBreaker = __webpack_require__(91);
33514
33515           LineWrapper = (function(_super) {
33516             __extends(LineWrapper, _super);
33517
33518             function LineWrapper(document, options) {
33519               var _ref;
33520               this.document = document;
33521               this.indent = options.indent || 0;
33522               this.characterSpacing = options.characterSpacing || 0;
33523               this.wordSpacing = options.wordSpacing === 0;
33524               this.columns = options.columns || 1;
33525               this.columnGap = (_ref = options.columnGap) != null ? _ref : 18;
33526               this.lineWidth = (options.width - (this.columnGap * (this.columns - 1))) / this.columns;
33527               this.spaceLeft = this.lineWidth;
33528               this.startX = this.document.x;
33529               this.startY = this.document.y;
33530               this.column = 1;
33531               this.ellipsis = options.ellipsis;
33532               this.continuedX = 0;
33533               if (options.height != null) {
33534                 this.height = options.height;
33535                 this.maxY = this.startY + options.height;
33536               } else {
33537                 this.maxY = this.document.page.maxY();
33538               }
33539               this.on('firstLine', (function(_this) {
33540                 return function(options) {
33541                   var indent;
33542                   indent = _this.continuedX || _this.indent;
33543                   _this.document.x += indent;
33544                   _this.lineWidth -= indent;
33545                   return _this.once('line', function() {
33546                     _this.document.x -= indent;
33547                     _this.lineWidth += indent;
33548                     if (options.continued && !_this.continuedX) {
33549                       _this.continuedX = _this.indent;
33550                     }
33551                     if (!options.continued) {
33552                       return _this.continuedX = 0;
33553                     }
33554                   });
33555                 };
33556               })(this));
33557               this.on('lastLine', (function(_this) {
33558                 return function(options) {
33559                   var align;
33560                   align = options.align;
33561                   if (align === 'justify') {
33562                     options.align = 'left';
33563                   }
33564                   _this.lastLine = true;
33565                   return _this.once('line', function() {
33566                     _this.document.y += options.paragraphGap || 0;
33567                     options.align = align;
33568                     return _this.lastLine = false;
33569                   });
33570                 };
33571               })(this));
33572             }
33573
33574             LineWrapper.prototype.wordWidth = function(word) {
33575               return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;
33576             };
33577
33578             LineWrapper.prototype.eachWord = function(text, fn) {
33579               var bk, breaker, fbk, l, last, lbk, shouldContinue, w, word, wordWidths;
33580               breaker = new LineBreaker(text);
33581               last = null;
33582               wordWidths = {};
33583               while (bk = breaker.nextBreak()) {
33584                 word = text.slice((last != null ? last.position : void 0) || 0, bk.position);
33585                 w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word);
33586                 if (w > this.lineWidth + this.continuedX) {
33587                   lbk = last;
33588                   fbk = {};
33589                   while (word.length) {
33590                     l = word.length;
33591                     while (w > this.spaceLeft) {
33592                       w = this.wordWidth(word.slice(0, --l));
33593                     }
33594                     fbk.required = l < word.length;
33595                     shouldContinue = fn(word.slice(0, l), w, fbk, lbk);
33596                     lbk = {
33597                       required: false
33598                     };
33599                     word = word.slice(l);
33600                     w = this.wordWidth(word);
33601                     if (shouldContinue === false) {
33602                       break;
33603                     }
33604                   }
33605                 } else {
33606                   shouldContinue = fn(word, w, bk, last);
33607                 }
33608                 if (shouldContinue === false) {
33609                   break;
33610                 }
33611                 last = bk;
33612               }
33613             };
33614
33615             LineWrapper.prototype.wrap = function(text, options) {
33616               var buffer, emitLine, lc, nextY, textWidth, wc, y;
33617               if (options.indent != null) {
33618                 this.indent = options.indent;
33619               }
33620               if (options.characterSpacing != null) {
33621                 this.characterSpacing = options.characterSpacing;
33622               }
33623               if (options.wordSpacing != null) {
33624                 this.wordSpacing = options.wordSpacing;
33625               }
33626               if (options.ellipsis != null) {
33627                 this.ellipsis = options.ellipsis;
33628               }
33629               nextY = this.document.y + this.document.currentLineHeight(true);
33630               if (this.document.y > this.maxY || nextY > this.maxY) {
33631                 this.nextSection();
33632               }
33633               buffer = '';
33634               textWidth = 0;
33635               wc = 0;
33636               lc = 0;
33637               y = this.document.y;
33638               emitLine = (function(_this) {
33639                 return function() {
33640                   options.textWidth = textWidth + _this.wordSpacing * (wc - 1);
33641                   options.wordCount = wc;
33642                   options.lineWidth = _this.lineWidth;
33643                   y = _this.document.y;
33644                   _this.emit('line', buffer, options, _this);
33645                   return lc++;
33646                 };
33647               })(this);
33648               this.emit('sectionStart', options, this);
33649               this.eachWord(text, (function(_this) {
33650                 return function(word, w, bk, last) {
33651                   var lh, shouldContinue;
33652                   if ((last == null) || last.required) {
33653                     _this.emit('firstLine', options, _this);
33654                     _this.spaceLeft = _this.lineWidth;
33655                   }
33656                   if (w <= _this.spaceLeft) {
33657                     buffer += word;
33658                     textWidth += w;
33659                     wc++;
33660                   }
33661                   if (bk.required || w > _this.spaceLeft) {
33662                     if (bk.required) {
33663                       _this.emit('lastLine', options, _this);
33664                     }
33665                     lh = _this.document.currentLineHeight(true);
33666                     if ((_this.height != null) && _this.ellipsis && _this.document.y + lh * 2 > _this.maxY && _this.column >= _this.columns) {
33667                       if (_this.ellipsis === true) {
33668                         _this.ellipsis = '…';
33669                       }
33670                       buffer = buffer.replace(/\s+$/, '');
33671                       textWidth = _this.wordWidth(buffer + _this.ellipsis);
33672                       while (textWidth > _this.lineWidth) {
33673                         buffer = buffer.slice(0, -1).replace(/\s+$/, '');
33674                         textWidth = _this.wordWidth(buffer + _this.ellipsis);
33675                       }
33676                       buffer = buffer + _this.ellipsis;
33677                     }
33678                     emitLine();
33679                     if (_this.document.y + lh > _this.maxY) {
33680                       shouldContinue = _this.nextSection();
33681                       if (!shouldContinue) {
33682                         wc = 0;
33683                         buffer = '';
33684                         return false;
33685                       }
33686                     }
33687                     if (bk.required) {
33688                       if (w > _this.spaceLeft) {
33689                         buffer = word;
33690                         textWidth = w;
33691                         wc = 1;
33692                         emitLine();
33693                       }
33694                       _this.spaceLeft = _this.lineWidth;
33695                       buffer = '';
33696                       textWidth = 0;
33697                       return wc = 0;
33698                     } else {
33699                       _this.spaceLeft = _this.lineWidth - w;
33700                       buffer = word;
33701                       textWidth = w;
33702                       return wc = 1;
33703                     }
33704                   } else {
33705                     return _this.spaceLeft -= w;
33706                   }
33707                 };
33708               })(this));
33709               if (wc > 0) {
33710                 this.emit('lastLine', options, this);
33711                 emitLine();
33712               }
33713               this.emit('sectionEnd', options, this);
33714               if (options.continued === true) {
33715                 if (lc > 1) {
33716                   this.continuedX = 0;
33717                 }
33718                 this.continuedX += options.textWidth;
33719                 return this.document.y = y;
33720               } else {
33721                 return this.document.x = this.startX;
33722               }
33723             };
33724
33725             LineWrapper.prototype.nextSection = function(options) {
33726               var _ref;
33727               this.emit('sectionEnd', options, this);
33728               if (++this.column > this.columns) {
33729                 if (this.height != null) {
33730                   return false;
33731                 }
33732                 this.document.addPage();
33733                 this.column = 1;
33734                 this.startY = this.document.page.margins.top;
33735                 this.maxY = this.document.page.maxY();
33736                 this.document.x = this.startX;
33737                 if (this.document._fillColor) {
33738                   (_ref = this.document).fillColor.apply(_ref, this.document._fillColor);
33739                 }
33740                 this.emit('pageBreak', options, this);
33741               } else {
33742                 this.document.x += this.lineWidth + this.columnGap;
33743                 this.document.y = this.startY;
33744                 this.emit('columnBreak', options, this);
33745               }
33746               this.emit('sectionStart', options, this);
33747               return true;
33748             };
33749
33750             return LineWrapper;
33751
33752           })(EventEmitter);
33753
33754           module.exports = LineWrapper;
33755
33756         }).call(this);
33757
33758
33759 /***/ },
33760 /* 91 */
33761 /***/ function(module, exports, __webpack_require__) {
33762
33763         // Generated by CoffeeScript 1.7.1
33764         (function() {
33765           var AI, AL, BA, BK, CB, CI_BRK, CJ, CP_BRK, CR, DI_BRK, ID, IN_BRK, LF, LineBreaker, NL, NS, PR_BRK, SA, SG, SP, UnicodeTrie, WJ, XX, characterClasses, classTrie, pairTable, _ref, _ref1;
33766
33767           UnicodeTrie = __webpack_require__(92);
33768
33769           classTrie = new UnicodeTrie(__webpack_require__(93));
33770
33771           _ref = __webpack_require__(94), BK = _ref.BK, CR = _ref.CR, LF = _ref.LF, NL = _ref.NL, CB = _ref.CB, BA = _ref.BA, SP = _ref.SP, WJ = _ref.WJ, SP = _ref.SP, BK = _ref.BK, LF = _ref.LF, NL = _ref.NL, AI = _ref.AI, AL = _ref.AL, SA = _ref.SA, SG = _ref.SG, XX = _ref.XX, CJ = _ref.CJ, ID = _ref.ID, NS = _ref.NS, characterClasses = _ref.characterClasses;
33772
33773           _ref1 = __webpack_require__(95), DI_BRK = _ref1.DI_BRK, IN_BRK = _ref1.IN_BRK, CI_BRK = _ref1.CI_BRK, CP_BRK = _ref1.CP_BRK, PR_BRK = _ref1.PR_BRK, pairTable = _ref1.pairTable;
33774
33775           LineBreaker = (function() {
33776             var Break, mapClass, mapFirst;
33777
33778             function LineBreaker(string) {
33779               this.string = string;
33780               this.pos = 0;
33781               this.lastPos = 0;
33782               this.curClass = null;
33783               this.nextClass = null;
33784             }
33785
33786             LineBreaker.prototype.nextCodePoint = function() {
33787               var code, next;
33788               code = this.string.charCodeAt(this.pos++);
33789               next = this.string.charCodeAt(this.pos);
33790               if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) {
33791                 this.pos++;
33792                 return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000;
33793               }
33794               return code;
33795             };
33796
33797             mapClass = function(c) {
33798               switch (c) {
33799                 case AI:
33800                   return AL;
33801                 case SA:
33802                 case SG:
33803                 case XX:
33804                   return AL;
33805                 case CJ:
33806                   return NS;
33807                 default:
33808                   return c;
33809               }
33810             };
33811
33812             mapFirst = function(c) {
33813               switch (c) {
33814                 case LF:
33815                 case NL:
33816                   return BK;
33817                 case CB:
33818                   return BA;
33819                 case SP:
33820                   return WJ;
33821                 default:
33822                   return c;
33823               }
33824             };
33825
33826             LineBreaker.prototype.nextCharClass = function(first) {
33827               if (first == null) {
33828                 first = false;
33829               }
33830               return mapClass(classTrie.get(this.nextCodePoint()));
33831             };
33832
33833             Break = (function() {
33834               function Break(position, required) {
33835                 this.position = position;
33836                 this.required = required != null ? required : false;
33837               }
33838
33839               return Break;
33840
33841             })();
33842
33843             LineBreaker.prototype.nextBreak = function() {
33844               var cur, lastClass, shouldBreak;
33845               if (this.curClass == null) {
33846                 this.curClass = mapFirst(this.nextCharClass());
33847               }
33848               while (this.pos < this.string.length) {
33849                 this.lastPos = this.pos;
33850                 lastClass = this.nextClass;
33851                 this.nextClass = this.nextCharClass();
33852                 if (this.curClass === BK || (this.curClass === CR && this.nextClass !== LF)) {
33853                   this.curClass = mapFirst(mapClass(this.nextClass));
33854                   return new Break(this.lastPos, true);
33855                 }
33856                 cur = (function() {
33857                   switch (this.nextClass) {
33858                     case SP:
33859                       return this.curClass;
33860                     case BK:
33861                     case LF:
33862                     case NL:
33863                       return BK;
33864                     case CR:
33865                       return CR;
33866                     case CB:
33867                       return BA;
33868                   }
33869                 }).call(this);
33870                 if (cur != null) {
33871                   this.curClass = cur;
33872                   if (this.nextClass === CB) {
33873                     return new Break(this.lastPos);
33874                   }
33875                   continue;
33876                 }
33877                 shouldBreak = false;
33878                 switch (pairTable[this.curClass][this.nextClass]) {
33879                   case DI_BRK:
33880                     shouldBreak = true;
33881                     break;
33882                   case IN_BRK:
33883                     shouldBreak = lastClass === SP;
33884                     break;
33885                   case CI_BRK:
33886                     shouldBreak = lastClass === SP;
33887                     if (!shouldBreak) {
33888                       continue;
33889                     }
33890                     break;
33891                   case CP_BRK:
33892                     if (lastClass !== SP) {
33893                       continue;
33894                     }
33895                 }
33896                 this.curClass = this.nextClass;
33897                 if (shouldBreak) {
33898                   return new Break(this.lastPos);
33899                 }
33900               }
33901               if (this.pos >= this.string.length) {
33902                 if (this.lastPos < this.string.length) {
33903                   this.lastPos = this.string.length;
33904                   return new Break(this.string.length);
33905                 } else {
33906                   return null;
33907                 }
33908               }
33909             };
33910
33911             return LineBreaker;
33912
33913           })();
33914
33915           module.exports = LineBreaker;
33916
33917         }).call(this);
33918
33919
33920 /***/ },
33921 /* 92 */
33922 /***/ function(module, exports) {
33923
33924         // Generated by CoffeeScript 1.7.1
33925         var UnicodeTrie,
33926           __slice = [].slice;
33927
33928         UnicodeTrie = (function() {
33929           var DATA_BLOCK_LENGTH, DATA_GRANULARITY, DATA_MASK, INDEX_1_OFFSET, INDEX_2_BLOCK_LENGTH, INDEX_2_BMP_LENGTH, INDEX_2_MASK, INDEX_SHIFT, LSCP_INDEX_2_LENGTH, LSCP_INDEX_2_OFFSET, OMITTED_BMP_INDEX_1_LENGTH, SHIFT_1, SHIFT_1_2, SHIFT_2, UTF8_2B_INDEX_2_LENGTH, UTF8_2B_INDEX_2_OFFSET;
33930
33931           SHIFT_1 = 6 + 5;
33932
33933           SHIFT_2 = 5;
33934
33935           SHIFT_1_2 = SHIFT_1 - SHIFT_2;
33936
33937           OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;
33938
33939           INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
33940
33941           INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
33942
33943           INDEX_SHIFT = 2;
33944
33945           DATA_BLOCK_LENGTH = 1 << SHIFT_2;
33946
33947           DATA_MASK = DATA_BLOCK_LENGTH - 1;
33948
33949           LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;
33950
33951           LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;
33952
33953           INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
33954
33955           UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
33956
33957           UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6;
33958
33959           INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
33960
33961           DATA_GRANULARITY = 1 << INDEX_SHIFT;
33962
33963           function UnicodeTrie(json) {
33964             var _ref, _ref1;
33965             if (json == null) {
33966               json = {};
33967             }
33968             this.data = json.data || [];
33969             this.highStart = (_ref = json.highStart) != null ? _ref : 0;
33970             this.errorValue = (_ref1 = json.errorValue) != null ? _ref1 : -1;
33971           }
33972
33973           UnicodeTrie.prototype.get = function(codePoint) {
33974             var index;
33975             if (codePoint < 0 || codePoint > 0x10ffff) {
33976               return this.errorValue;
33977             }
33978             if (codePoint < 0xd800 || (codePoint > 0xdbff && codePoint <= 0xffff)) {
33979               index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
33980               return this.data[index];
33981             }
33982             if (codePoint <= 0xffff) {
33983               index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
33984               return this.data[index];
33985             }
33986             if (codePoint < this.highStart) {
33987               index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];
33988               index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];
33989               index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
33990               return this.data[index];
33991             }
33992             return this.data[this.data.length - DATA_GRANULARITY];
33993           };
33994
33995           UnicodeTrie.prototype.toJSON = function() {
33996             var res;
33997             res = {
33998               data: __slice.call(this.data),
33999               highStart: this.highStart,
34000               errorValue: this.errorValue
34001             };
34002             return res;
34003           };
34004
34005           return UnicodeTrie;
34006
34007         })();
34008
34009         module.exports = UnicodeTrie;
34010
34011
34012 /***/ },
34013 /* 93 */
34014 /***/ function(module, exports) {
34015
34016         module.exports = {
34017                 "data": [
34018                         1961,
34019                         1969,
34020                         1977,
34021                         1985,
34022                         2025,
34023                         2033,
34024                         2041,
34025                         2049,
34026                         2057,
34027                         2065,
34028                         2073,
34029                         2081,
34030                         2089,
34031                         2097,
34032                         2105,
34033                         2113,
34034                         2121,
34035                         2129,
34036                         2137,
34037                         2145,
34038                         2153,
34039                         2161,
34040                         2169,
34041                         2177,
34042                         2185,
34043                         2193,
34044                         2201,
34045                         2209,
34046                         2217,
34047                         2225,
34048                         2233,
34049                         2241,
34050                         2249,
34051                         2257,
34052                         2265,
34053                         2273,
34054                         2281,
34055                         2289,
34056                         2297,
34057                         2305,
34058                         2313,
34059                         2321,
34060                         2329,
34061                         2337,
34062                         2345,
34063                         2353,
34064                         2361,
34065                         2369,
34066                         2377,
34067                         2385,
34068                         2393,
34069                         2401,
34070                         2409,
34071                         2417,
34072                         2425,
34073                         2433,
34074                         2441,
34075                         2449,
34076                         2457,
34077                         2465,
34078                         2473,
34079                         2481,
34080                         2489,
34081                         2497,
34082                         2505,
34083                         2513,
34084                         2521,
34085                         2529,
34086                         2529,
34087                         2537,
34088                         2009,
34089                         2545,
34090                         2553,
34091                         2561,
34092                         2569,
34093                         2577,
34094                         2585,
34095                         2593,
34096                         2601,
34097                         2609,
34098                         2617,
34099                         2625,
34100                         2633,
34101                         2641,
34102                         2649,
34103                         2657,
34104                         2665,
34105                         2673,
34106                         2681,
34107                         2689,
34108                         2697,
34109                         2705,
34110                         2713,
34111                         2721,
34112                         2729,
34113                         2737,
34114                         2745,
34115                         2753,
34116                         2761,
34117                         2769,
34118                         2777,
34119                         2785,
34120                         2793,
34121                         2801,
34122                         2809,
34123                         2817,
34124                         2825,
34125                         2833,
34126                         2841,
34127                         2849,
34128                         2857,
34129                         2865,
34130                         2873,
34131                         2881,
34132                         2889,
34133                         2009,
34134                         2897,
34135                         2905,
34136                         2913,
34137                         2009,
34138                         2921,
34139                         2929,
34140                         2937,
34141                         2945,
34142                         2953,
34143                         2961,
34144                         2969,
34145                         2009,
34146                         2977,
34147                         2977,
34148                         2985,
34149                         2993,
34150                         3001,
34151                         3009,
34152                         3009,
34153                         3009,
34154                         3017,
34155                         3017,
34156                         3017,
34157                         3025,
34158                         3025,
34159                         3033,
34160                         3041,
34161                         3041,
34162                         3049,
34163                         3049,
34164                         3049,
34165                         3049,
34166                         3049,
34167                         3049,
34168                         3049,
34169                         3049,
34170                         3049,
34171                         3049,
34172                         3057,
34173                         3065,
34174                         3073,
34175                         3073,
34176                         3073,
34177                         3081,
34178                         3089,
34179                         3097,
34180                         3097,
34181                         3097,
34182                         3097,
34183                         3097,
34184                         3097,
34185                         3097,
34186                         3097,
34187                         3097,
34188                         3097,
34189                         3097,
34190                         3097,
34191                         3097,
34192                         3097,
34193                         3097,
34194                         3097,
34195                         3097,
34196                         3097,
34197                         3097,
34198                         3105,
34199                         3113,
34200                         3113,
34201                         3121,
34202                         3129,
34203                         3137,
34204                         3145,
34205                         3153,
34206                         3161,
34207                         3161,
34208                         3169,
34209                         3177,
34210                         3185,
34211                         3193,
34212                         3193,
34213                         3193,
34214                         3193,
34215                         3201,
34216                         3209,
34217                         3209,
34218                         3217,
34219                         3225,
34220                         3233,
34221                         3241,
34222                         3241,
34223                         3241,
34224                         3249,
34225                         3257,
34226                         3265,
34227                         3273,
34228                         3273,
34229                         3281,
34230                         3289,
34231                         3297,
34232                         2009,
34233                         2009,
34234                         3305,
34235                         3313,
34236                         3321,
34237                         3329,
34238                         3337,
34239                         3345,
34240                         3353,
34241                         3361,
34242                         3369,
34243                         3377,
34244                         3385,
34245                         3393,
34246                         2009,
34247                         2009,
34248                         3401,
34249                         3409,
34250                         3417,
34251                         3417,
34252                         3417,
34253                         3417,
34254                         3417,
34255                         3417,
34256                         3425,
34257                         3425,
34258                         3433,
34259                         3433,
34260                         3433,
34261                         3433,
34262                         3433,
34263                         3433,
34264                         3433,
34265                         3433,
34266                         3433,
34267                         3433,
34268                         3433,
34269                         3433,
34270                         3433,
34271                         3433,
34272                         3433,
34273                         3441,
34274                         3449,
34275                         3457,
34276                         3465,
34277                         3473,
34278                         3481,
34279                         3489,
34280                         3497,
34281                         3505,
34282                         3513,
34283                         3521,
34284                         3529,
34285                         3537,
34286                         3545,
34287                         3553,
34288                         3561,
34289                         3569,
34290                         3577,
34291                         3585,
34292                         3593,
34293                         3601,
34294                         3609,
34295                         3617,
34296                         3625,
34297                         3625,
34298                         3633,
34299                         3641,
34300                         3649,
34301                         3649,
34302                         3649,
34303                         3649,
34304                         3649,
34305                         3657,
34306                         3665,
34307                         3665,
34308                         3673,
34309                         3681,
34310                         3681,
34311                         3681,
34312                         3681,
34313                         3689,
34314                         3697,
34315                         3697,
34316                         3705,
34317                         3713,
34318                         3721,
34319                         3729,
34320                         3737,
34321                         3745,
34322                         3753,
34323                         3761,
34324                         3769,
34325                         3777,
34326                         3785,
34327                         3793,
34328                         3801,
34329                         3809,
34330                         3817,
34331                         3825,
34332                         3833,
34333                         3841,
34334                         3849,
34335                         3857,
34336                         3865,
34337                         3873,
34338                         3881,
34339                         3881,
34340                         3881,
34341                         3881,
34342                         3881,
34343                         3881,
34344                         3881,
34345                         3881,
34346                         3881,
34347                         3881,
34348                         3881,
34349                         3881,
34350                         3889,
34351                         3897,
34352                         3905,
34353                         3913,
34354                         3921,
34355                         3921,
34356                         3921,
34357                         3921,
34358                         3921,
34359                         3921,
34360                         3921,
34361                         3921,
34362                         3921,
34363                         3921,
34364                         3929,
34365                         2009,
34366                         2009,
34367                         2009,
34368                         2009,
34369                         2009,
34370                         3937,
34371                         3937,
34372                         3937,
34373                         3937,
34374                         3937,
34375                         3937,
34376                         3937,
34377                         3945,
34378                         3953,
34379                         3953,
34380                         3953,
34381                         3961,
34382                         3969,
34383                         3969,
34384                         3977,
34385                         3985,
34386                         3993,
34387                         4001,
34388                         2009,
34389                         2009,
34390                         4009,
34391                         4009,
34392                         4009,
34393                         4009,
34394                         4009,
34395                         4009,
34396                         4009,
34397                         4009,
34398                         4009,
34399                         4009,
34400                         4009,
34401                         4009,
34402                         4017,
34403                         4025,
34404                         4033,
34405                         4041,
34406                         4049,
34407                         4057,
34408                         4065,
34409                         4073,
34410                         4081,
34411                         4081,
34412                         4081,
34413                         4081,
34414                         4081,
34415                         4081,
34416                         4081,
34417                         4089,
34418                         4097,
34419                         4097,
34420                         4105,
34421                         4113,
34422                         4113,
34423                         4113,
34424                         4113,
34425                         4113,
34426                         4113,
34427                         4113,
34428                         4113,
34429                         4113,
34430                         4113,
34431                         4113,
34432                         4113,
34433                         4113,
34434                         4113,
34435                         4113,
34436                         4113,
34437                         4113,
34438                         4113,
34439                         4113,
34440                         4113,
34441                         4113,
34442                         4113,
34443                         4113,
34444                         4113,
34445                         4113,
34446                         4113,
34447                         4113,
34448                         4113,
34449                         4113,
34450                         4113,
34451                         4113,
34452                         4113,
34453                         4113,
34454                         4113,
34455                         4113,
34456                         4113,
34457                         4113,
34458                         4113,
34459                         4113,
34460                         4113,
34461                         4113,
34462                         4113,
34463                         4113,
34464                         4113,
34465                         4113,
34466                         4113,
34467                         4113,
34468                         4113,
34469                         4113,
34470                         4113,
34471                         4113,
34472                         4113,
34473                         4113,
34474                         4113,
34475                         4113,
34476                         4113,
34477                         4113,
34478                         4113,
34479                         4113,
34480                         4113,
34481                         4113,
34482                         4113,
34483                         4113,
34484                         4113,
34485                         4113,
34486                         4113,
34487                         4113,
34488                         4113,
34489                         4113,
34490                         4113,
34491                         4113,
34492                         4113,
34493                         4113,
34494                         4113,
34495                         4113,
34496                         4113,
34497                         4113,
34498                         4113,
34499                         4113,
34500                         4113,
34501                         4113,
34502                         4113,
34503                         4113,
34504                         4113,
34505                         4113,
34506                         4113,
34507                         4113,
34508                         4113,
34509                         4113,
34510                         4113,
34511                         4113,
34512                         4113,
34513                         4113,
34514                         4113,
34515                         4113,
34516                         4113,
34517                         4113,
34518                         4113,
34519                         4113,
34520                         4113,
34521                         4113,
34522                         4113,
34523                         4113,
34524                         4113,
34525                         4113,
34526                         4113,
34527                         4113,
34528                         4113,
34529                         4113,
34530                         4113,
34531                         4113,
34532                         4113,
34533                         4113,
34534                         4113,
34535                         4113,
34536                         4113,
34537                         4113,
34538                         4113,
34539                         4113,
34540                         4113,
34541                         4113,
34542                         4113,
34543                         4113,
34544                         4113,
34545                         4113,
34546                         4113,
34547                         4113,
34548                         4113,
34549                         4113,
34550                         4113,
34551                         4113,
34552                         4113,
34553                         4113,
34554                         4113,
34555                         4113,
34556                         4113,
34557                         4113,
34558                         4113,
34559                         4113,
34560                         4113,
34561                         4113,
34562                         4113,
34563                         4113,
34564                         4113,
34565                         4113,
34566                         4113,
34567                         4113,
34568                         4113,
34569                         4113,
34570                         4113,
34571                         4113,
34572                         4113,
34573                         4113,
34574                         4113,
34575                         4113,
34576                         4113,
34577                         4113,
34578                         4113,
34579                         4113,
34580                         4113,
34581                         4113,
34582                         4113,
34583                         4113,
34584                         4113,
34585                         4113,
34586                         4113,
34587                         4113,
34588                         4113,
34589                         4113,
34590                         4113,
34591                         4113,
34592                         4113,
34593                         4113,
34594                         4113,
34595                         4113,
34596                         4113,
34597                         4113,
34598                         4113,
34599                         4113,
34600                         4113,
34601                         4113,
34602                         4113,
34603                         4113,
34604                         4113,
34605                         4113,
34606                         4113,
34607                         4113,
34608                         4113,
34609                         4113,
34610                         4113,
34611                         4113,
34612                         4113,
34613                         4113,
34614                         4113,
34615                         4113,
34616                         4113,
34617                         4113,
34618                         4113,
34619                         4113,
34620                         4113,
34621                         4113,
34622                         4113,
34623                         4113,
34624                         4113,
34625                         4113,
34626                         4113,
34627                         4113,
34628                         4113,
34629                         4113,
34630                         4113,
34631                         4113,
34632                         4113,
34633                         4113,
34634                         4113,
34635                         4113,
34636                         4113,
34637                         4113,
34638                         4113,
34639                         4113,
34640                         4121,
34641                         4121,
34642                         4129,
34643                         4129,
34644                         4129,
34645                         4129,
34646                         4129,
34647                         4129,
34648                         4129,
34649                         4129,
34650                         4129,
34651                         4129,
34652                         4129,
34653                         4129,
34654                         4129,
34655                         4129,
34656                         4129,
34657                         4129,
34658                         4129,
34659                         4129,
34660                         4129,
34661                         4129,
34662                         4129,
34663                         4129,
34664                         4129,
34665                         4129,
34666                         4129,
34667                         4129,
34668                         4129,
34669                         4129,
34670                         4129,
34671                         4129,
34672                         4129,
34673                         4129,
34674                         4129,
34675                         4129,
34676                         4129,
34677                         4129,
34678                         4129,
34679                         4129,
34680                         4129,
34681                         4129,
34682                         4129,
34683                         4129,
34684                         4129,
34685                         4129,
34686                         4129,
34687                         4129,
34688                         4129,
34689                         4129,
34690                         4129,
34691                         4129,
34692                         4129,
34693                         4129,
34694                         4129,
34695                         4129,
34696                         4129,
34697                         4129,
34698                         4129,
34699                         4129,
34700                         4129,
34701                         4129,
34702                         4129,
34703                         4129,
34704                         4129,
34705                         4129,
34706                         4129,
34707                         4129,
34708                         4129,
34709                         4129,
34710                         4129,
34711                         4129,
34712                         4129,
34713                         4129,
34714                         4129,
34715                         4129,
34716                         4129,
34717                         4129,
34718                         4129,
34719                         4129,
34720                         4129,
34721                         4129,
34722                         4129,
34723                         4129,
34724                         4129,
34725                         4129,
34726                         4129,
34727                         4129,
34728                         4129,
34729                         4129,
34730                         4129,
34731                         4129,
34732                         4129,
34733                         4129,
34734                         4129,
34735                         4129,
34736                         4129,
34737                         4129,
34738                         4129,
34739                         4129,
34740                         4129,
34741                         4129,
34742                         4129,
34743                         4129,
34744                         4129,
34745                         4129,
34746                         4129,
34747                         4129,
34748                         4129,
34749                         4129,
34750                         4129,
34751                         4129,
34752                         4129,
34753                         4129,
34754                         4129,
34755                         4129,
34756                         4129,
34757                         4129,
34758                         4129,
34759                         4129,
34760                         4129,
34761                         4129,
34762                         4129,
34763                         4129,
34764                         4129,
34765                         4129,
34766                         4129,
34767                         4129,
34768                         4129,
34769                         4129,
34770                         4129,
34771                         4129,
34772                         4129,
34773                         4129,
34774                         4129,
34775                         4129,
34776                         4129,
34777                         4129,
34778                         4129,
34779                         4129,
34780                         4129,
34781                         4129,
34782                         4129,
34783                         4129,
34784                         4129,
34785                         4129,
34786                         4129,
34787                         4129,
34788                         4129,
34789                         4129,
34790                         4129,
34791                         4129,
34792                         4129,
34793                         4129,
34794                         4129,
34795                         4129,
34796                         4129,
34797                         4129,
34798                         4129,
34799                         4129,
34800                         4129,
34801                         4129,
34802                         4129,
34803                         4129,
34804                         4129,
34805                         4129,
34806                         4129,
34807                         4129,
34808                         4129,
34809                         4129,
34810                         4129,
34811                         4129,
34812                         4129,
34813                         4129,
34814                         4129,
34815                         4129,
34816                         4129,
34817                         4129,
34818                         4129,
34819                         4129,
34820                         4129,
34821                         4129,
34822                         4129,
34823                         4129,
34824                         4129,
34825                         4129,
34826                         4129,
34827                         4129,
34828                         4129,
34829                         4129,
34830                         4129,
34831                         4129,
34832                         4129,
34833                         4129,
34834                         4129,
34835                         4129,
34836                         4129,
34837                         4129,
34838                         4129,
34839                         4129,
34840                         4129,
34841                         4129,
34842                         4129,
34843                         4129,
34844                         4129,
34845                         4129,
34846                         4129,
34847                         4129,
34848                         4129,
34849                         4129,
34850                         4129,
34851                         4129,
34852                         4129,
34853                         4129,
34854                         4129,
34855                         4129,
34856                         4129,
34857                         4129,
34858                         4129,
34859                         4129,
34860                         4129,
34861                         4129,
34862                         4129,
34863                         4129,
34864                         4129,
34865                         4129,
34866                         4129,
34867                         4129,
34868                         4129,
34869                         4129,
34870                         4129,
34871                         4129,
34872                         4129,
34873                         4129,
34874                         4129,
34875                         4129,
34876                         4129,
34877                         4129,
34878                         4129,
34879                         4129,
34880                         4129,
34881                         4129,
34882                         4129,
34883                         4129,
34884                         4129,
34885                         4129,
34886                         4129,
34887                         4129,
34888                         4129,
34889                         4129,
34890                         4129,
34891                         4129,
34892                         4129,
34893                         4129,
34894                         4129,
34895                         4129,
34896                         4129,
34897                         4129,
34898                         4129,
34899                         4129,
34900                         4129,
34901                         4129,
34902                         4129,
34903                         4129,
34904                         4129,
34905                         4129,
34906                         4129,
34907                         4129,
34908                         4129,
34909                         4129,
34910                         4129,
34911                         4129,
34912                         4129,
34913                         4129,
34914                         4129,
34915                         4129,
34916                         4129,
34917                         4129,
34918                         4129,
34919                         4129,
34920                         4129,
34921                         4129,
34922                         4129,
34923                         4129,
34924                         4129,
34925                         4129,
34926                         4129,
34927                         4129,
34928                         4129,
34929                         4129,
34930                         4129,
34931                         4129,
34932                         4129,
34933                         4129,
34934                         4129,
34935                         4129,
34936                         4129,
34937                         4129,
34938                         4129,
34939                         4129,
34940                         4129,
34941                         4129,
34942                         4129,
34943                         4129,
34944                         4129,
34945                         4129,
34946                         4129,
34947                         4129,
34948                         4129,
34949                         4129,
34950                         4129,
34951                         4129,
34952                         4129,
34953                         4129,
34954                         4129,
34955                         4129,
34956                         4129,
34957                         4129,
34958                         4129,
34959                         4129,
34960                         4129,
34961                         4129,
34962                         4129,
34963                         4129,
34964                         4129,
34965                         4129,
34966                         4129,
34967                         4129,
34968                         4129,
34969                         4129,
34970                         4129,
34971                         4129,
34972                         4129,
34973                         4129,
34974                         4129,
34975                         4129,
34976                         4129,
34977                         4129,
34978                         4129,
34979                         4129,
34980                         4129,
34981                         4129,
34982                         4129,
34983                         4129,
34984                         4129,
34985                         4129,
34986                         4129,
34987                         4129,
34988                         4129,
34989                         4129,
34990                         4129,
34991                         4129,
34992                         4129,
34993                         4129,
34994                         4129,
34995                         4129,
34996                         4129,
34997                         4129,
34998                         4129,
34999                         4129,
35000                         4129,
35001                         4129,
35002                         4129,
35003                         4129,
35004                         4129,
35005                         4129,
35006                         4129,
35007                         4129,
35008                         4129,
35009                         4129,
35010                         4129,
35011                         4129,
35012                         4129,
35013                         4129,
35014                         4129,
35015                         4129,
35016                         4129,
35017                         4129,
35018                         4129,
35019                         4129,
35020                         4129,
35021                         4129,
35022                         4129,
35023                         4129,
35024                         4129,
35025                         4129,
35026                         4129,
35027                         4129,
35028                         4129,
35029                         4129,
35030                         4129,
35031                         4129,
35032                         4129,
35033                         4129,
35034                         4129,
35035                         4129,
35036                         4129,
35037                         4129,
35038                         4129,
35039                         4129,
35040                         4129,
35041                         4129,
35042                         4129,
35043                         4129,
35044                         4129,
35045                         4129,
35046                         4129,
35047                         4129,
35048                         4129,
35049                         4129,
35050                         4129,
35051                         4129,
35052                         4129,
35053                         4129,
35054                         4129,
35055                         4129,
35056                         4129,
35057                         4129,
35058                         4129,
35059                         4129,
35060                         4129,
35061                         4129,
35062                         4129,
35063                         4129,
35064                         4129,
35065                         4129,
35066                         4129,
35067                         4129,
35068                         4129,
35069                         4129,
35070                         4129,
35071                         4129,
35072                         4129,
35073                         4129,
35074                         4129,
35075                         4129,
35076                         4129,
35077                         4129,
35078                         4129,
35079                         4129,
35080                         4129,
35081                         4129,
35082                         4129,
35083                         4129,
35084                         4129,
35085                         4129,
35086                         4129,
35087                         4129,
35088                         4129,
35089                         4129,
35090                         4129,
35091                         4129,
35092                         4129,
35093                         4129,
35094                         4129,
35095                         4129,
35096                         4129,
35097                         4129,
35098                         4129,
35099                         4129,
35100                         4129,
35101                         4129,
35102                         4129,
35103                         4129,
35104                         4129,
35105                         4129,
35106                         4129,
35107                         4129,
35108                         4129,
35109                         4129,
35110                         4129,
35111                         4129,
35112                         4129,
35113                         4129,
35114                         4129,
35115                         4129,
35116                         4129,
35117                         4129,
35118                         4129,
35119                         4129,
35120                         4129,
35121                         4129,
35122                         4129,
35123                         4129,
35124                         4129,
35125                         4129,
35126                         4129,
35127                         4129,
35128                         4129,
35129                         4129,
35130                         4129,
35131                         4129,
35132                         4129,
35133                         4129,
35134                         4129,
35135                         4129,
35136                         4129,
35137                         4129,
35138                         4129,
35139                         4129,
35140                         4129,
35141                         4129,
35142                         4129,
35143                         4129,
35144                         4129,
35145                         4129,
35146                         4129,
35147                         4129,
35148                         4129,
35149                         4129,
35150                         4129,
35151                         4129,
35152                         4129,
35153                         4129,
35154                         4129,
35155                         4129,
35156                         4129,
35157                         4129,
35158                         4129,
35159                         4129,
35160                         4129,
35161                         4129,
35162                         4129,
35163                         4129,
35164                         4129,
35165                         4129,
35166                         4129,
35167                         4129,
35168                         4129,
35169                         4129,
35170                         4129,
35171                         4129,
35172                         4129,
35173                         4129,
35174                         4129,
35175                         4129,
35176                         4129,
35177                         4129,
35178                         4129,
35179                         4129,
35180                         4129,
35181                         4129,
35182                         4129,
35183                         4129,
35184                         4129,
35185                         4129,
35186                         4129,
35187                         4129,
35188                         4129,
35189                         4129,
35190                         4129,
35191                         4129,
35192                         4129,
35193                         4129,
35194                         4129,
35195                         4129,
35196                         4129,
35197                         4129,
35198                         4129,
35199                         4129,
35200                         4129,
35201                         4129,
35202                         4129,
35203                         4129,
35204                         4129,
35205                         4129,
35206                         4129,
35207                         4129,
35208                         4129,
35209                         4129,
35210                         4129,
35211                         4129,
35212                         4129,
35213                         4129,
35214                         4129,
35215                         4129,
35216                         4129,
35217                         4129,
35218                         4129,
35219                         4129,
35220                         4129,
35221                         4129,
35222                         4129,
35223                         4129,
35224                         4129,
35225                         4129,
35226                         4129,
35227                         4129,
35228                         4129,
35229                         4129,
35230                         4129,
35231                         4129,
35232                         4129,
35233                         4129,
35234                         4129,
35235                         4129,
35236                         4129,
35237                         4129,
35238                         4129,
35239                         4129,
35240                         4129,
35241                         4129,
35242                         4129,
35243                         4129,
35244                         4129,
35245                         4129,
35246                         4129,
35247                         4129,
35248                         4129,
35249                         4129,
35250                         4129,
35251                         4129,
35252                         4129,
35253                         4129,
35254                         4129,
35255                         4129,
35256                         4129,
35257                         4129,
35258                         4129,
35259                         4129,
35260                         4129,
35261                         4129,
35262                         4129,
35263                         4129,
35264                         4129,
35265                         4129,
35266                         4129,
35267                         4129,
35268                         4129,
35269                         4129,
35270                         4129,
35271                         4129,
35272                         4129,
35273                         4129,
35274                         4129,
35275                         4129,
35276                         4129,
35277                         4129,
35278                         4129,
35279                         4129,
35280                         4129,
35281                         4129,
35282                         4129,
35283                         4129,
35284                         4129,
35285                         4129,
35286                         4129,
35287                         4129,
35288                         4129,
35289                         4129,
35290                         4129,
35291                         4129,
35292                         4129,
35293                         4129,
35294                         4129,
35295                         4129,
35296                         4129,
35297                         4129,
35298                         4137,
35299                         4145,
35300                         4145,
35301                         4145,
35302                         4145,
35303                         4145,
35304                         4145,
35305                         4145,
35306                         4145,
35307                         4145,
35308                         4145,
35309                         4145,
35310                         4145,
35311                         4145,
35312                         4145,
35313                         4145,
35314                         4145,
35315                         4145,
35316                         4145,
35317                         4145,
35318                         4145,
35319                         4145,
35320                         4145,
35321                         4145,
35322                         4145,
35323                         4145,
35324                         4145,
35325                         4145,
35326                         4145,
35327                         4145,
35328                         4145,
35329                         4145,
35330                         4145,
35331                         4145,
35332                         4145,
35333                         4145,
35334                         4145,
35335                         4145,
35336                         4153,
35337                         4161,
35338                         4169,
35339                         4169,
35340                         4169,
35341                         4169,
35342                         4169,
35343                         4169,
35344                         4169,
35345                         4169,
35346                         4177,
35347                         4185,
35348                         4193,
35349                         4201,
35350                         4209,
35351                         4217,
35352                         4217,
35353                         4225,
35354                         4233,
35355                         4233,
35356                         4233,
35357                         4233,
35358                         4233,
35359                         4233,
35360                         4233,
35361                         4233,
35362                         4241,
35363                         4249,
35364                         4257,
35365                         4265,
35366                         4273,
35367                         4281,
35368                         4289,
35369                         4297,
35370                         4305,
35371                         4313,
35372                         4321,
35373                         4329,
35374                         4337,
35375                         4345,
35376                         4353,
35377                         4361,
35378                         4361,
35379                         4369,
35380                         4377,
35381                         4385,
35382                         4385,
35383                         4385,
35384                         4385,
35385                         4393,
35386                         4401,
35387                         4409,
35388                         4409,
35389                         4409,
35390                         4409,
35391                         4409,
35392                         4409,
35393                         4417,
35394                         4425,
35395                         4433,
35396                         4441,
35397                         4449,
35398                         4457,
35399                         4465,
35400                         4473,
35401                         4481,
35402                         4489,
35403                         4497,
35404                         4505,
35405                         4513,
35406                         4521,
35407                         4529,
35408                         4537,
35409                         4545,
35410                         4553,
35411                         4561,
35412                         4569,
35413                         4577,
35414                         4585,
35415                         4593,
35416                         4601,
35417                         4609,
35418                         4617,
35419                         4625,
35420                         4633,
35421                         4641,
35422                         4649,
35423                         4657,
35424                         4665,
35425                         4673,
35426                         4681,
35427                         4689,
35428                         4697,
35429                         4705,
35430                         4713,
35431                         4721,
35432                         4729,
35433                         4737,
35434                         4745,
35435                         4753,
35436                         4761,
35437                         4769,
35438                         4777,
35439                         4785,
35440                         4793,
35441                         4801,
35442                         4809,
35443                         4817,
35444                         4825,
35445                         4833,
35446                         4841,
35447                         4849,
35448                         4857,
35449                         4865,
35450                         4873,
35451                         4881,
35452                         4889,
35453                         4897,
35454                         4905,
35455                         4913,
35456                         4921,
35457                         4929,
35458                         4937,
35459                         4945,
35460                         4953,
35461                         4961,
35462                         4969,
35463                         4977,
35464                         4985,
35465                         4993,
35466                         5001,
35467                         5009,
35468                         5017,
35469                         5025,
35470                         5033,
35471                         5041,
35472                         5049,
35473                         5057,
35474                         5065,
35475                         5073,
35476                         5081,
35477                         5089,
35478                         5097,
35479                         5105,
35480                         5113,
35481                         5121,
35482                         5129,
35483                         5137,
35484                         5145,
35485                         5153,
35486                         5161,
35487                         5169,
35488                         5177,
35489                         5185,
35490                         5193,
35491                         5201,
35492                         5209,
35493                         5217,
35494                         5225,
35495                         5233,
35496                         5241,
35497                         5249,
35498                         5257,
35499                         5265,
35500                         5273,
35501                         5281,
35502                         5289,
35503                         5297,
35504                         5305,
35505                         5313,
35506                         5321,
35507                         5329,
35508                         5337,
35509                         5345,
35510                         5353,
35511                         5361,
35512                         5369,
35513                         5377,
35514                         5385,
35515                         5393,
35516                         5401,
35517                         5409,
35518                         5417,
35519                         5425,
35520                         5433,
35521                         5441,
35522                         5449,
35523                         5457,
35524                         5465,
35525                         5473,
35526                         5481,
35527                         5489,
35528                         5497,
35529                         5505,
35530                         5513,
35531                         5521,
35532                         5529,
35533                         5537,
35534                         5545,
35535                         5553,
35536                         5561,
35537                         5569,
35538                         5577,
35539                         5585,
35540                         5593,
35541                         5601,
35542                         5609,
35543                         5617,
35544                         5625,
35545                         5633,
35546                         5641,
35547                         5649,
35548                         5657,
35549                         5665,
35550                         5673,
35551                         5681,
35552                         5689,
35553                         5697,
35554                         5705,
35555                         5713,
35556                         5721,
35557                         5729,
35558                         5737,
35559                         5745,
35560                         5753,
35561                         5761,
35562                         5769,
35563                         5777,
35564                         5785,
35565                         5793,
35566                         5801,
35567                         5809,
35568                         5817,
35569                         5825,
35570                         5833,
35571                         5841,
35572                         5849,
35573                         5857,
35574                         5865,
35575                         5873,
35576                         5881,
35577                         5889,
35578                         5897,
35579                         5905,
35580                         5913,
35581                         5921,
35582                         5929,
35583                         5937,
35584                         5945,
35585                         5953,
35586                         5961,
35587                         5969,
35588                         5977,
35589                         5985,
35590                         5993,
35591                         6001,
35592                         6009,
35593                         6017,
35594                         6025,
35595                         6033,
35596                         6041,
35597                         6049,
35598                         6057,
35599                         6065,
35600                         6073,
35601                         6081,
35602                         6089,
35603                         6097,
35604                         6105,
35605                         6113,
35606                         6121,
35607                         6129,
35608                         6137,
35609                         6145,
35610                         6153,
35611                         6161,
35612                         6169,
35613                         6177,
35614                         6185,
35615                         6193,
35616                         6201,
35617                         6209,
35618                         6217,
35619                         6225,
35620                         6233,
35621                         6241,
35622                         6249,
35623                         6257,
35624                         6265,
35625                         6273,
35626                         6281,
35627                         6289,
35628                         6297,
35629                         6305,
35630                         6313,
35631                         6321,
35632                         6329,
35633                         6337,
35634                         6345,
35635                         6353,
35636                         6361,
35637                         6369,
35638                         6377,
35639                         6385,
35640                         6393,
35641                         6401,
35642                         6409,
35643                         6417,
35644                         6425,
35645                         6433,
35646                         6441,
35647                         6449,
35648                         6457,
35649                         6465,
35650                         6473,
35651                         6481,
35652                         6489,
35653                         6497,
35654                         6505,
35655                         6513,
35656                         6521,
35657                         6529,
35658                         6537,
35659                         6545,
35660                         6553,
35661                         6561,
35662                         6569,
35663                         6577,
35664                         6585,
35665                         6593,
35666                         6601,
35667                         6609,
35668                         6617,
35669                         6625,
35670                         6633,
35671                         6641,
35672                         6649,
35673                         6657,
35674                         6665,
35675                         6673,
35676                         6681,
35677                         6689,
35678                         6697,
35679                         6705,
35680                         6713,
35681                         6721,
35682                         6729,
35683                         6737,
35684                         6745,
35685                         6753,
35686                         6761,
35687                         6769,
35688                         6777,
35689                         6785,
35690                         6793,
35691                         6801,
35692                         6809,
35693                         6817,
35694                         6825,
35695                         6833,
35696                         6841,
35697                         6849,
35698                         6857,
35699                         6865,
35700                         6873,
35701                         6881,
35702                         6889,
35703                         6897,
35704                         6905,
35705                         6913,
35706                         6921,
35707                         6929,
35708                         6937,
35709                         6945,
35710                         6953,
35711                         6961,
35712                         6969,
35713                         6977,
35714                         6985,
35715                         6993,
35716                         7001,
35717                         7009,
35718                         7017,
35719                         7025,
35720                         7033,
35721                         7041,
35722                         7049,
35723                         7057,
35724                         7065,
35725                         7073,
35726                         7081,
35727                         7089,
35728                         7097,
35729                         7105,
35730                         7113,
35731                         7121,
35732                         7129,
35733                         7137,
35734                         7145,
35735                         7153,
35736                         7161,
35737                         7169,
35738                         7177,
35739                         7185,
35740                         7193,
35741                         7201,
35742                         7209,
35743                         7217,
35744                         7225,
35745                         7233,
35746                         2009,
35747                         2009,
35748                         2009,
35749                         2009,
35750                         2009,
35751                         2009,
35752                         2009,
35753                         2009,
35754                         2009,
35755                         2009,
35756                         2009,
35757                         2009,
35758                         2009,
35759                         2009,
35760                         2009,
35761                         2009,
35762                         2009,
35763                         2009,
35764                         2009,
35765                         2009,
35766                         2009,
35767                         2009,
35768                         2009,
35769                         2009,
35770                         2009,
35771                         2009,
35772                         2009,
35773                         2009,
35774                         2009,
35775                         2009,
35776                         2009,
35777                         2009,
35778                         7241,
35779                         7241,
35780                         7241,
35781                         7241,
35782                         7241,
35783                         7241,
35784                         7241,
35785                         7241,
35786                         7241,
35787                         7241,
35788                         7241,
35789                         7241,
35790                         7241,
35791                         7241,
35792                         7241,
35793                         7241,
35794                         7241,
35795                         7241,
35796                         7241,
35797                         7241,
35798                         7241,
35799                         7241,
35800                         7241,
35801                         7241,
35802                         7241,
35803                         7241,
35804                         7241,
35805                         7241,
35806                         7241,
35807                         7241,
35808                         7241,
35809                         7241,
35810                         2009,
35811                         2009,
35812                         2009,
35813                         2009,
35814                         2009,
35815                         2009,
35816                         2009,
35817                         2009,
35818                         2009,
35819                         2009,
35820                         2009,
35821                         2009,
35822                         2009,
35823                         2009,
35824                         2009,
35825                         2009,
35826                         2009,
35827                         2009,
35828                         2009,
35829                         2009,
35830                         2009,
35831                         2009,
35832                         2009,
35833                         2009,
35834                         2009,
35835                         2009,
35836                         2009,
35837                         2009,
35838                         2009,
35839                         2009,
35840                         2009,
35841                         2009,
35842                         2009,
35843                         2009,
35844                         2009,
35845                         2009,
35846                         2009,
35847                         2009,
35848                         2009,
35849                         2009,
35850                         2009,
35851                         2009,
35852                         2009,
35853                         2009,
35854                         2009,
35855                         2009,
35856                         2009,
35857                         2009,
35858                         2009,
35859                         2009,
35860                         2009,
35861                         2009,
35862                         2009,
35863                         2009,
35864                         2009,
35865                         2009,
35866                         2009,
35867                         2009,
35868                         2009,
35869                         2009,
35870                         2009,
35871                         2009,
35872                         2009,
35873                         2009,
35874                         2009,
35875                         2009,
35876                         2009,
35877                         2009,
35878                         2009,
35879                         2009,
35880                         2009,
35881                         2009,
35882                         2009,
35883                         2009,
35884                         2009,
35885                         2009,
35886                         2009,
35887                         2009,
35888                         2009,
35889                         2009,
35890                         2009,
35891                         2009,
35892                         2009,
35893                         2009,
35894                         2009,
35895                         2009,
35896                         2009,
35897                         2009,
35898                         2009,
35899                         2009,
35900                         2009,
35901                         2009,
35902                         2009,
35903                         2009,
35904                         2009,
35905                         2009,
35906                         2009,
35907                         2009,
35908                         2009,
35909                         2009,
35910                         2009,
35911                         2009,
35912                         2009,
35913                         2009,
35914                         2009,
35915                         2009,
35916                         2009,
35917                         2009,
35918                         2009,
35919                         2009,
35920                         2009,
35921                         2009,
35922                         2009,
35923                         2009,
35924                         2009,
35925                         2009,
35926                         2009,
35927                         2009,
35928                         2009,
35929                         2009,
35930                         2009,
35931                         2009,
35932                         2009,
35933                         2009,
35934                         2009,
35935                         2009,
35936                         2009,
35937                         2009,
35938                         2009,
35939                         2009,
35940                         2009,
35941                         2009,
35942                         2009,
35943                         2009,
35944                         2009,
35945                         2009,
35946                         2009,
35947                         2009,
35948                         2009,
35949                         2009,
35950                         2009,
35951                         2009,
35952                         2009,
35953                         2009,
35954                         2009,
35955                         2009,
35956                         2009,
35957                         2009,
35958                         2009,
35959                         2009,
35960                         2009,
35961                         2009,
35962                         2009,
35963                         2009,
35964                         2009,
35965                         2009,
35966                         2009,
35967                         2009,
35968                         2009,
35969                         2009,
35970                         2009,
35971                         2009,
35972                         2009,
35973                         2009,
35974                         2009,
35975                         2009,
35976                         2009,
35977                         2009,
35978                         2009,
35979                         2009,
35980                         2009,
35981                         2009,
35982                         2009,
35983                         2009,
35984                         2009,
35985                         2009,
35986                         2009,
35987                         2009,
35988                         2009,
35989                         2009,
35990                         2009,
35991                         2009,
35992                         2009,
35993                         2009,
35994                         2009,
35995                         2009,
35996                         2009,
35997                         2009,
35998                         2009,
35999                         2009,
36000                         2009,
36001                         2009,
36002                         2009,
36003                         2009,
36004                         2009,
36005                         2009,
36006                         2009,
36007                         2009,
36008                         2009,
36009                         2009,
36010                         7249,
36011                         7249,
36012                         7249,
36013                         7249,
36014                         7249,
36015                         7249,
36016                         7249,
36017                         7249,
36018                         7249,
36019                         7249,
36020                         7249,
36021                         7249,
36022                         7249,
36023                         7249,
36024                         7249,
36025                         7249,
36026                         7257,
36027                         7265,
36028                         7273,
36029                         7281,
36030                         7281,
36031                         7281,
36032                         7281,
36033                         7281,
36034                         7281,
36035                         7281,
36036                         7281,
36037                         7281,
36038                         7281,
36039                         7281,
36040                         7281,
36041                         7281,
36042                         7281,
36043                         7289,
36044                         7297,
36045                         7305,
36046                         7305,
36047                         7305,
36048                         7305,
36049                         7313,
36050                         7321,
36051                         7329,
36052                         7337,
36053                         7345,
36054                         7353,
36055                         7353,
36056                         7353,
36057                         7361,
36058                         7369,
36059                         7377,
36060                         7385,
36061                         7393,
36062                         7401,
36063                         7409,
36064                         7417,
36065                         7425,
36066                         7241,
36067                         7241,
36068                         7241,
36069                         7241,
36070                         7241,
36071                         7241,
36072                         7241,
36073                         7241,
36074                         7241,
36075                         7241,
36076                         7241,
36077                         7241,
36078                         7241,
36079                         7241,
36080                         7241,
36081                         7241,
36082                         7241,
36083                         7241,
36084                         7241,
36085                         7241,
36086                         7241,
36087                         7241,
36088                         7241,
36089                         7241,
36090                         7241,
36091                         7241,
36092                         7241,
36093                         7241,
36094                         7241,
36095                         7241,
36096                         7241,
36097                         7241,
36098                         7972,
36099                         7972,
36100                         8100,
36101                         8164,
36102                         8228,
36103                         8292,
36104                         8356,
36105                         8420,
36106                         8484,
36107                         8548,
36108                         8612,
36109                         8676,
36110                         8740,
36111                         8804,
36112                         8868,
36113                         8932,
36114                         8996,
36115                         9060,
36116                         9124,
36117                         9188,
36118                         9252,
36119                         9316,
36120                         9380,
36121                         9444,
36122                         9508,
36123                         9572,
36124                         9636,
36125                         9700,
36126                         9764,
36127                         9828,
36128                         9892,
36129                         9956,
36130                         2593,
36131                         2657,
36132                         2721,
36133                         2529,
36134                         2785,
36135                         2529,
36136                         2849,
36137                         2913,
36138                         2977,
36139                         3041,
36140                         3105,
36141                         3169,
36142                         3233,
36143                         3297,
36144                         2529,
36145                         2529,
36146                         2529,
36147                         2529,
36148                         2529,
36149                         2529,
36150                         2529,
36151                         2529,
36152                         3361,
36153                         2529,
36154                         2529,
36155                         2529,
36156                         3425,
36157                         2529,
36158                         2529,
36159                         3489,
36160                         3553,
36161                         2529,
36162                         3617,
36163                         3681,
36164                         3745,
36165                         3809,
36166                         3873,
36167                         3937,
36168                         4001,
36169                         4065,
36170                         4129,
36171                         4193,
36172                         4257,
36173                         4321,
36174                         4385,
36175                         4449,
36176                         4513,
36177                         4577,
36178                         4641,
36179                         4705,
36180                         4769,
36181                         4833,
36182                         4897,
36183                         4961,
36184                         5025,
36185                         5089,
36186                         5153,
36187                         5217,
36188                         5281,
36189                         5345,
36190                         5409,
36191                         5473,
36192                         5537,
36193                         5601,
36194                         5665,
36195                         5729,
36196                         5793,
36197                         5857,
36198                         5921,
36199                         5985,
36200                         6049,
36201                         6113,
36202                         6177,
36203                         6241,
36204                         6305,
36205                         6369,
36206                         6433,
36207                         6497,
36208                         6561,
36209                         6625,
36210                         6689,
36211                         6753,
36212                         6817,
36213                         6881,
36214                         6945,
36215                         7009,
36216                         7073,
36217                         7137,
36218                         7201,
36219                         7265,
36220                         7329,
36221                         7393,
36222                         7457,
36223                         7521,
36224                         7585,
36225                         7649,
36226                         2529,
36227                         2529,
36228                         2529,
36229                         2529,
36230                         2529,
36231                         2529,
36232                         2529,
36233                         2529,
36234                         2529,
36235                         2529,
36236                         2529,
36237                         2529,
36238                         2529,
36239                         2529,
36240                         2529,
36241                         2529,
36242                         2529,
36243                         2529,
36244                         2529,
36245                         2529,
36246                         2529,
36247                         2529,
36248                         2529,
36249                         2529,
36250                         2529,
36251                         2529,
36252                         2529,
36253                         2529,
36254                         2529,
36255                         2529,
36256                         2529,
36257                         2529,
36258                         2529,
36259                         2529,
36260                         2529,
36261                         2529,
36262                         2529,
36263                         2529,
36264                         2529,
36265                         2529,
36266                         2529,
36267                         2529,
36268                         2529,
36269                         2529,
36270                         2529,
36271                         2529,
36272                         2529,
36273                         2529,
36274                         2529,
36275                         2529,
36276                         2529,
36277                         2529,
36278                         2529,
36279                         2529,
36280                         2529,
36281                         2529,
36282                         2529,
36283                         2529,
36284                         2529,
36285                         2529,
36286                         2529,
36287                         2529,
36288                         2529,
36289                         2529,
36290                         2529,
36291                         2529,
36292                         2529,
36293                         2529,
36294                         2529,
36295                         2529,
36296                         2529,
36297                         2529,
36298                         2529,
36299                         2529,
36300                         2529,
36301                         2529,
36302                         2529,
36303                         2529,
36304                         2529,
36305                         2529,
36306                         2529,
36307                         2529,
36308                         2529,
36309                         2529,
36310                         2529,
36311                         2529,
36312                         2529,
36313                         2529,
36314                         2529,
36315                         2529,
36316                         2529,
36317                         2529,
36318                         2529,
36319                         2529,
36320                         2529,
36321                         2529,
36322                         2529,
36323                         2529,
36324                         2529,
36325                         2529,
36326                         2529,
36327                         2529,
36328                         2529,
36329                         2529,
36330                         2529,
36331                         2529,
36332                         2529,
36333                         2529,
36334                         2529,
36335                         2529,
36336                         2529,
36337                         2529,
36338                         2529,
36339                         2529,
36340                         2529,
36341                         2529,
36342                         2529,
36343                         2529,
36344                         2529,
36345                         2529,
36346                         2529,
36347                         2529,
36348                         2529,
36349                         2529,
36350                         2529,
36351                         2529,
36352                         2529,
36353                         2529,
36354                         2529,
36355                         2529,
36356                         2529,
36357                         2529,
36358                         2529,
36359                         2529,
36360                         2529,
36361                         2529,
36362                         2529,
36363                         2529,
36364                         2529,
36365                         2529,
36366                         2529,
36367                         2529,
36368                         2529,
36369                         2529,
36370                         2529,
36371                         2529,
36372                         2529,
36373                         2529,
36374                         2529,
36375                         2529,
36376                         2529,
36377                         2529,
36378                         2529,
36379                         2529,
36380                         2529,
36381                         2529,
36382                         2529,
36383                         2529,
36384                         2529,
36385                         2529,
36386                         2529,
36387                         2529,
36388                         2529,
36389                         2529,
36390                         2529,
36391                         2529,
36392                         2529,
36393                         2529,
36394                         2529,
36395                         2529,
36396                         2529,
36397                         2529,
36398                         2529,
36399                         2529,
36400                         2529,
36401                         2529,
36402                         2529,
36403                         2529,
36404                         2529,
36405                         2529,
36406                         2529,
36407                         2529,
36408                         2529,
36409                         2529,
36410                         2529,
36411                         2529,
36412                         2529,
36413                         2529,
36414                         2529,
36415                         2529,
36416                         2529,
36417                         2529,
36418                         2529,
36419                         2529,
36420                         2529,
36421                         2529,
36422                         2529,
36423                         2529,
36424                         2529,
36425                         2529,
36426                         2529,
36427                         2529,
36428                         2529,
36429                         2529,
36430                         2529,
36431                         2529,
36432                         2529,
36433                         2529,
36434                         2529,
36435                         2529,
36436                         2529,
36437                         2529,
36438                         2529,
36439                         2529,
36440                         2529,
36441                         2529,
36442                         2529,
36443                         2529,
36444                         2529,
36445                         2529,
36446                         2529,
36447                         2529,
36448                         2529,
36449                         2529,
36450                         2529,
36451                         2529,
36452                         2529,
36453                         2529,
36454                         2529,
36455                         2529,
36456                         2529,
36457                         2529,
36458                         2529,
36459                         2529,
36460                         2529,
36461                         2529,
36462                         2529,
36463                         2529,
36464                         2529,
36465                         2529,
36466                         2529,
36467                         2529,
36468                         2529,
36469                         2529,
36470                         2529,
36471                         2529,
36472                         2529,
36473                         2529,
36474                         2529,
36475                         2529,
36476                         2529,
36477                         2529,
36478                         2529,
36479                         2529,
36480                         2529,
36481                         2529,
36482                         2529,
36483                         2529,
36484                         2529,
36485                         2529,
36486                         2529,
36487                         2529,
36488                         2529,
36489                         2529,
36490                         2529,
36491                         2529,
36492                         2529,
36493                         2529,
36494                         2529,
36495                         2529,
36496                         2529,
36497                         2529,
36498                         2529,
36499                         2529,
36500                         2529,
36501                         2529,
36502                         2529,
36503                         2529,
36504                         2529,
36505                         2529,
36506                         2529,
36507                         2529,
36508                         2529,
36509                         2529,
36510                         2529,
36511                         2529,
36512                         2529,
36513                         2529,
36514                         2529,
36515                         2529,
36516                         2529,
36517                         2529,
36518                         2529,
36519                         2529,
36520                         2529,
36521                         2529,
36522                         2529,
36523                         2529,
36524                         2529,
36525                         2529,
36526                         2529,
36527                         2529,
36528                         2529,
36529                         2529,
36530                         2529,
36531                         2529,
36532                         2529,
36533                         2529,
36534                         2529,
36535                         2529,
36536                         2529,
36537                         2529,
36538                         2529,
36539                         2529,
36540                         2529,
36541                         2529,
36542                         2529,
36543                         2529,
36544                         2529,
36545                         2529,
36546                         7713,
36547                         2009,
36548                         2009,
36549                         2009,
36550                         2009,
36551                         2009,
36552                         2009,
36553                         2009,
36554                         2009,
36555                         2009,
36556                         2009,
36557                         2009,
36558                         2009,
36559                         2009,
36560                         2009,
36561                         2009,
36562                         2009,
36563                         2009,
36564                         2009,
36565                         2009,
36566                         2009,
36567                         2009,
36568                         2009,
36569                         2009,
36570                         2009,
36571                         2009,
36572                         2009,
36573                         2009,
36574                         2009,
36575                         2009,
36576                         2009,
36577                         2009,
36578                         2009,
36579                         2009,
36580                         2009,
36581                         2009,
36582                         2009,
36583                         2009,
36584                         2009,
36585                         2009,
36586                         2009,
36587                         2009,
36588                         2009,
36589                         2009,
36590                         2009,
36591                         2009,
36592                         2009,
36593                         2009,
36594                         2009,
36595                         2009,
36596                         2009,
36597                         2009,
36598                         2009,
36599                         2009,
36600                         2009,
36601                         2009,
36602                         2009,
36603                         2009,
36604                         2009,
36605                         2009,
36606                         2009,
36607                         2009,
36608                         2009,
36609                         2009,
36610                         2009,
36611                         7433,
36612                         7433,
36613                         7433,
36614                         7433,
36615                         7433,
36616                         7433,
36617                         7433,
36618                         7441,
36619                         7449,
36620                         7457,
36621                         7457,
36622                         7457,
36623                         7457,
36624                         7457,
36625                         7457,
36626                         7465,
36627                         2009,
36628                         2009,
36629                         2009,
36630                         2009,
36631                         7473,
36632                         7473,
36633                         7473,
36634                         7473,
36635                         7473,
36636                         7473,
36637                         7473,
36638                         7473,
36639                         7481,
36640                         7489,
36641                         7497,
36642                         7505,
36643                         7505,
36644                         7505,
36645                         7505,
36646                         7505,
36647                         7513,
36648                         7521,
36649                         2009,
36650                         2009,
36651                         2009,
36652                         2009,
36653                         2009,
36654                         2009,
36655                         2009,
36656                         2009,
36657                         2009,
36658                         2009,
36659                         2009,
36660                         2009,
36661                         2009,
36662                         2009,
36663                         2009,
36664                         2009,
36665                         2009,
36666                         2009,
36667                         2009,
36668                         2009,
36669                         2009,
36670                         2009,
36671                         2009,
36672                         2009,
36673                         2009,
36674                         2009,
36675                         7529,
36676                         7529,
36677                         7537,
36678                         7545,
36679                         7545,
36680                         7545,
36681                         7545,
36682                         7545,
36683                         7553,
36684                         7561,
36685                         7561,
36686                         7561,
36687                         7561,
36688                         7561,
36689                         7561,
36690                         7561,
36691                         7569,
36692                         7577,
36693                         7585,
36694                         7593,
36695                         7593,
36696                         7593,
36697                         7593,
36698                         7593,
36699                         7593,
36700                         7601,
36701                         7609,
36702                         7609,
36703                         7609,
36704                         7609,
36705                         7609,
36706                         7609,
36707                         7609,
36708                         7609,
36709                         7609,
36710                         7609,
36711                         7609,
36712                         7609,
36713                         7609,
36714                         7609,
36715                         7609,
36716                         7609,
36717                         7609,
36718                         7609,
36719                         7609,
36720                         7609,
36721                         7609,
36722                         7609,
36723                         7609,
36724                         7609,
36725                         7609,
36726                         7617,
36727                         2009,
36728                         2009,
36729                         2009,
36730                         2009,
36731                         2009,
36732                         2009,
36733                         2009,
36734                         2009,
36735                         2009,
36736                         2009,
36737                         2009,
36738                         2009,
36739                         7625,
36740                         7633,
36741                         7641,
36742                         7649,
36743                         7657,
36744                         7665,
36745                         7673,
36746                         7681,
36747                         7689,
36748                         7697,
36749                         7705,
36750                         2009,
36751                         7713,
36752                         7721,
36753                         7729,
36754                         2009,
36755                         2009,
36756                         2009,
36757                         2009,
36758                         2009,
36759                         2009,
36760                         2009,
36761                         2009,
36762                         2009,
36763                         2009,
36764                         2009,
36765                         2009,
36766                         2009,
36767                         2009,
36768                         2009,
36769                         2009,
36770                         2009,
36771                         2009,
36772                         2009,
36773                         2009,
36774                         2009,
36775                         2009,
36776                         2009,
36777                         2009,
36778                         2009,
36779                         2009,
36780                         2009,
36781                         2009,
36782                         2009,
36783                         2009,
36784                         2009,
36785                         2009,
36786                         2009,
36787                         2009,
36788                         2009,
36789                         2009,
36790                         2009,
36791                         7737,
36792                         7745,
36793                         7753,
36794                         2009,
36795                         2009,
36796                         2009,
36797                         2009,
36798                         2009,
36799                         2009,
36800                         2009,
36801                         2009,
36802                         2009,
36803                         7761,
36804                         7761,
36805                         7761,
36806                         7761,
36807                         7761,
36808                         7761,
36809                         7761,
36810                         7761,
36811                         7761,
36812                         7761,
36813                         7761,
36814                         7761,
36815                         7761,
36816                         7761,
36817                         7761,
36818                         7761,
36819                         7761,
36820                         7761,
36821                         7761,
36822                         7761,
36823                         7761,
36824                         7761,
36825                         7761,
36826                         7761,
36827                         7761,
36828                         7761,
36829                         7761,
36830                         7761,
36831                         7761,
36832                         7761,
36833                         7761,
36834                         7761,
36835                         7761,
36836                         7761,
36837                         7761,
36838                         7769,
36839                         2009,
36840                         2009,
36841                         2009,
36842                         2009,
36843                         2009,
36844                         2009,
36845                         2009,
36846                         2009,
36847                         2009,
36848                         2009,
36849                         2009,
36850                         2009,
36851                         2009,
36852                         2009,
36853                         2009,
36854                         2009,
36855                         2009,
36856                         2009,
36857                         2009,
36858                         2009,
36859                         2009,
36860                         2009,
36861                         2009,
36862                         2009,
36863                         2009,
36864                         2009,
36865                         2009,
36866                         2009,
36867                         7777,
36868                         7777,
36869                         7777,
36870                         7777,
36871                         7777,
36872                         7777,
36873                         7777,
36874                         7777,
36875                         7777,
36876                         7777,
36877                         7777,
36878                         7777,
36879                         7777,
36880                         7777,
36881                         7777,
36882                         7777,
36883                         7777,
36884                         7777,
36885                         7785,
36886                         7793,
36887                         7801,
36888                         7809,
36889                         7809,
36890                         7809,
36891                         7809,
36892                         7809,
36893                         7809,
36894                         7817,
36895                         7825,
36896                         7825,
36897                         7825,
36898                         7825,
36899                         7825,
36900                         7825,
36901                         7825,
36902                         7825,
36903                         7825,
36904                         7825,
36905                         7825,
36906                         7825,
36907                         7825,
36908                         7825,
36909                         7825,
36910                         7825,
36911                         7825,
36912                         7825,
36913                         7825,
36914                         7825,
36915                         7825,
36916                         7825,
36917                         7825,
36918                         7825,
36919                         7825,
36920                         7825,
36921                         7825,
36922                         7825,
36923                         7825,
36924                         7825,
36925                         7825,
36926                         7825,
36927                         7825,
36928                         7825,
36929                         7825,
36930                         7825,
36931                         7825,
36932                         7825,
36933                         7825,
36934                         7825,
36935                         7825,
36936                         7825,
36937                         7825,
36938                         7825,
36939                         7825,
36940                         7825,
36941                         7825,
36942                         7825,
36943                         7825,
36944                         7825,
36945                         7825,
36946                         7825,
36947                         7825,
36948                         7825,
36949                         7825,
36950                         7825,
36951                         7825,
36952                         7825,
36953                         7825,
36954                         7825,
36955                         7825,
36956                         7825,
36957                         7825,
36958                         7825,
36959                         7825,
36960                         7825,
36961                         7825,
36962                         7825,
36963                         7825,
36964                         7825,
36965                         7825,
36966                         7825,
36967                         7825,
36968                         7825,
36969                         7825,
36970                         7825,
36971                         7825,
36972                         7825,
36973                         7825,
36974                         7825,
36975                         7825,
36976                         7825,
36977                         7825,
36978                         7825,
36979                         7825,
36980                         7825,
36981                         7825,
36982                         7825,
36983                         7825,
36984                         7825,
36985                         7825,
36986                         7825,
36987                         7825,
36988                         7825,
36989                         7825,
36990                         7825,
36991                         7825,
36992                         7825,
36993                         7825,
36994                         7825,
36995                         7825,
36996                         7825,
36997                         7825,
36998                         7825,
36999                         7825,
37000                         7825,
37001                         7825,
37002                         7825,
37003                         7825,
37004                         7825,
37005                         7825,
37006                         7825,
37007                         7825,
37008                         7825,
37009                         7825,
37010                         7825,
37011                         7825,
37012                         7825,
37013                         7825,
37014                         7825,
37015                         7825,
37016                         7825,
37017                         7825,
37018                         7825,
37019                         7825,
37020                         7825,
37021                         7825,
37022                         7825,
37023                         7825,
37024                         7825,
37025                         7825,
37026                         7825,
37027                         7825,
37028                         7825,
37029                         7825,
37030                         7825,
37031                         7825,
37032                         7825,
37033                         7825,
37034                         7825,
37035                         7825,
37036                         7825,
37037                         7825,
37038                         7825,
37039                         7825,
37040                         7825,
37041                         7825,
37042                         7825,
37043                         7825,
37044                         7825,
37045                         7825,
37046                         7825,
37047                         7825,
37048                         7825,
37049                         7825,
37050                         7825,
37051                         7825,
37052                         7825,
37053                         7825,
37054                         7825,
37055                         7825,
37056                         7825,
37057                         7825,
37058                         7825,
37059                         7825,
37060                         7825,
37061                         7825,
37062                         7825,
37063                         7825,
37064                         7825,
37065                         7825,
37066                         7825,
37067                         7825,
37068                         7825,
37069                         7825,
37070                         7825,
37071                         7825,
37072                         7825,
37073                         7825,
37074                         7825,
37075                         7825,
37076                         7825,
37077                         7825,
37078                         7825,
37079                         7825,
37080                         7825,
37081                         7825,
37082                         7825,
37083                         7825,
37084                         7825,
37085                         7825,
37086                         7825,
37087                         7825,
37088                         7825,
37089                         7825,
37090                         7825,
37091                         7825,
37092                         7825,
37093                         7825,
37094                         7825,
37095                         7825,
37096                         7825,
37097                         7825,
37098                         7825,
37099                         7825,
37100                         7825,
37101                         7825,
37102                         7825,
37103                         7825,
37104                         7825,
37105                         7825,
37106                         7825,
37107                         7825,
37108                         7825,
37109                         7825,
37110                         7825,
37111                         7825,
37112                         7825,
37113                         7825,
37114                         7825,
37115                         7825,
37116                         7825,
37117                         7825,
37118                         7825,
37119                         7825,
37120                         7825,
37121                         7825,
37122                         7825,
37123                         7825,
37124                         7825,
37125                         7825,
37126                         7825,
37127                         7825,
37128                         7825,
37129                         7825,
37130                         7825,
37131                         7825,
37132                         7825,
37133                         7825,
37134                         7825,
37135                         7825,
37136                         7825,
37137                         7825,
37138                         7825,
37139                         7825,
37140                         7825,
37141                         7825,
37142                         7825,
37143                         7825,
37144                         7825,
37145                         7825,
37146                         7825,
37147                         7825,
37148                         7825,
37149                         7825,
37150                         7825,
37151                         7825,
37152                         7825,
37153                         7825,
37154                         7825,
37155                         7825,
37156                         7825,
37157                         7825,
37158                         7825,
37159                         7825,
37160                         7825,
37161                         7825,
37162                         7825,
37163                         7825,
37164                         7825,
37165                         7825,
37166                         7825,
37167                         7825,
37168                         7825,
37169                         7825,
37170                         7825,
37171                         7825,
37172                         7825,
37173                         7825,
37174                         7825,
37175                         7825,
37176                         7825,
37177                         7825,
37178                         7825,
37179                         7825,
37180                         7825,
37181                         7825,
37182                         7825,
37183                         7825,
37184                         7825,
37185                         7825,
37186                         7825,
37187                         7825,
37188                         7825,
37189                         7825,
37190                         7825,
37191                         7825,
37192                         7825,
37193                         7825,
37194                         7825,
37195                         7825,
37196                         7825,
37197                         7825,
37198                         7825,
37199                         7825,
37200                         7825,
37201                         7825,
37202                         7825,
37203                         7825,
37204                         7825,
37205                         7825,
37206                         7825,
37207                         7825,
37208                         7825,
37209                         7825,
37210                         7825,
37211                         7825,
37212                         7825,
37213                         7825,
37214                         7825,
37215                         7825,
37216                         7825,
37217                         7825,
37218                         7825,
37219                         7825,
37220                         7825,
37221                         7825,
37222                         7825,
37223                         7825,
37224                         7825,
37225                         7825,
37226                         7825,
37227                         7825,
37228                         7825,
37229                         7825,
37230                         7825,
37231                         7825,
37232                         7825,
37233                         7825,
37234                         7825,
37235                         7825,
37236                         7825,
37237                         7825,
37238                         7825,
37239                         7825,
37240                         7825,
37241                         7825,
37242                         7825,
37243                         7825,
37244                         7825,
37245                         7825,
37246                         7825,
37247                         7825,
37248                         7825,
37249                         7825,
37250                         7825,
37251                         7825,
37252                         7825,
37253                         7825,
37254                         7825,
37255                         7825,
37256                         7825,
37257                         7825,
37258                         7825,
37259                         7825,
37260                         7825,
37261                         7825,
37262                         7825,
37263                         7825,
37264                         7825,
37265                         7825,
37266                         7825,
37267                         7825,
37268                         7825,
37269                         7825,
37270                         7825,
37271                         7825,
37272                         7825,
37273                         7825,
37274                         7825,
37275                         7825,
37276                         7825,
37277                         7825,
37278                         7825,
37279                         7825,
37280                         7825,
37281                         7825,
37282                         7825,
37283                         7825,
37284                         7825,
37285                         7825,
37286                         7825,
37287                         7825,
37288                         7825,
37289                         7825,
37290                         7825,
37291                         7825,
37292                         7825,
37293                         7825,
37294                         7825,
37295                         7825,
37296                         7825,
37297                         7825,
37298                         7825,
37299                         7825,
37300                         7825,
37301                         7825,
37302                         7825,
37303                         7825,
37304                         7825,
37305                         7825,
37306                         7825,
37307                         7825,
37308                         7825,
37309                         7825,
37310                         7825,
37311                         7825,
37312                         7825,
37313                         7825,
37314                         7825,
37315                         7825,
37316                         7825,
37317                         7825,
37318                         7825,
37319                         7825,
37320                         7825,
37321                         7825,
37322                         7825,
37323                         7825,
37324                         7825,
37325                         7825,
37326                         7825,
37327                         7825,
37328                         7825,
37329                         7825,
37330                         7825,
37331                         7825,
37332                         7825,
37333                         7825,
37334                         7825,
37335                         7825,
37336                         7825,
37337                         7825,
37338                         7825,
37339                         7825,
37340                         7825,
37341                         7825,
37342                         7825,
37343                         7825,
37344                         7825,
37345                         7825,
37346                         7825,
37347                         7825,
37348                         7825,
37349                         7825,
37350                         7825,
37351                         7825,
37352                         7825,
37353                         7825,
37354                         7825,
37355                         7825,
37356                         7825,
37357                         7825,
37358                         7825,
37359                         7825,
37360                         7825,
37361                         7825,
37362                         7825,
37363                         7825,
37364                         7825,
37365                         7825,
37366                         7825,
37367                         7825,
37368                         7825,
37369                         7825,
37370                         7825,
37371                         7825,
37372                         7825,
37373                         7833,
37374                         7841,
37375                         7849,
37376                         2009,
37377                         2009,
37378                         2009,
37379                         7857,
37380                         2009,
37381                         2009,
37382                         2009,
37383                         2009,
37384                         2009,
37385                         2009,
37386                         2009,
37387                         2009,
37388                         2009,
37389                         2009,
37390                         2009,
37391                         2009,
37392                         2009,
37393                         2009,
37394                         2009,
37395                         2009,
37396                         2009,
37397                         2009,
37398                         2009,
37399                         2009,
37400                         2009,
37401                         2009,
37402                         2009,
37403                         2009,
37404                         2009,
37405                         2009,
37406                         2009,
37407                         2009,
37408                         2009,
37409                         2009,
37410                         2009,
37411                         2009,
37412                         2009,
37413                         2009,
37414                         2009,
37415                         2009,
37416                         2009,
37417                         2009,
37418                         2009,
37419                         2009,
37420                         2009,
37421                         2009,
37422                         2009,
37423                         2009,
37424                         2009,
37425                         2009,
37426                         2009,
37427                         2009,
37428                         2009,
37429                         2009,
37430                         2009,
37431                         2009,
37432                         2009,
37433                         2009,
37434                         2009,
37435                         2009,
37436                         2009,
37437                         2009,
37438                         2009,
37439                         2009,
37440                         2009,
37441                         2009,
37442                         2009,
37443                         7865,
37444                         7865,
37445                         7865,
37446                         7865,
37447                         7865,
37448                         7865,
37449                         7865,
37450                         7865,
37451                         7865,
37452                         7865,
37453                         7865,
37454                         7873,
37455                         7881,
37456                         7889,
37457                         7897,
37458                         7897,
37459                         7897,
37460                         7897,
37461                         7905,
37462                         7913,
37463                         7913,
37464                         7913,
37465                         7913,
37466                         7913,
37467                         7913,
37468                         7913,
37469                         7913,
37470                         7913,
37471                         7913,
37472                         7913,
37473                         7913,
37474                         7913,
37475                         7913,
37476                         7913,
37477                         7913,
37478                         7913,
37479                         7913,
37480                         7913,
37481                         7913,
37482                         7913,
37483                         7913,
37484                         7913,
37485                         7913,
37486                         7913,
37487                         7913,
37488                         7913,
37489                         7913,
37490                         7913,
37491                         7913,
37492                         7913,
37493                         7913,
37494                         7913,
37495                         7913,
37496                         7913,
37497                         7913,
37498                         7913,
37499                         7913,
37500                         7913,
37501                         7913,
37502                         7913,
37503                         7913,
37504                         7913,
37505                         7921,
37506                         7929,
37507                         2009,
37508                         2009,
37509                         2009,
37510                         2009,
37511                         2009,
37512                         2009,
37513                         2009,
37514                         2009,
37515                         2009,
37516                         2009,
37517                         2009,
37518                         2009,
37519                         2009,
37520                         2009,
37521                         2009,
37522                         2009,
37523                         2009,
37524                         2009,
37525                         2009,
37526                         2009,
37527                         2009,
37528                         2009,
37529                         2009,
37530                         2009,
37531                         2009,
37532                         2009,
37533                         2009,
37534                         2009,
37535                         2009,
37536                         2009,
37537                         2009,
37538                         2009,
37539                         2009,
37540                         2009,
37541                         2009,
37542                         2009,
37543                         2009,
37544                         2009,
37545                         2009,
37546                         2009,
37547                         2009,
37548                         2009,
37549                         2009,
37550                         2009,
37551                         2009,
37552                         2009,
37553                         2009,
37554                         2009,
37555                         7937,
37556                         7937,
37557                         7937,
37558                         7937,
37559                         7937,
37560                         7937,
37561                         7937,
37562                         7945,
37563                         2009,
37564                         2009,
37565                         2009,
37566                         2009,
37567                         2009,
37568                         2009,
37569                         2009,
37570                         2009,
37571                         7953,
37572                         7953,
37573                         7953,
37574                         7953,
37575                         7953,
37576                         7953,
37577                         7953,
37578                         2009,
37579                         7961,
37580                         7969,
37581                         7977,
37582                         7985,
37583                         7993,
37584                         2009,
37585                         2009,
37586                         8001,
37587                         8009,
37588                         8009,
37589                         8009,
37590                         8009,
37591                         8009,
37592                         8009,
37593                         8009,
37594                         8009,
37595                         8009,
37596                         8009,
37597                         8009,
37598                         8009,
37599                         8009,
37600                         8017,
37601                         8025,
37602                         8025,
37603                         8025,
37604                         8025,
37605                         8025,
37606                         8025,
37607                         8025,
37608                         8033,
37609                         8041,
37610                         8049,
37611                         8057,
37612                         8065,
37613                         8073,
37614                         8081,
37615                         8081,
37616                         8081,
37617                         8081,
37618                         8081,
37619                         8081,
37620                         8081,
37621                         8081,
37622                         8081,
37623                         8081,
37624                         8081,
37625                         8089,
37626                         2009,
37627                         8097,
37628                         8097,
37629                         8097,
37630                         8105,
37631                         2009,
37632                         2009,
37633                         2009,
37634                         2009,
37635                         8113,
37636                         8113,
37637                         8113,
37638                         8113,
37639                         8113,
37640                         8113,
37641                         8113,
37642                         8113,
37643                         8113,
37644                         8113,
37645                         8113,
37646                         8113,
37647                         8113,
37648                         8113,
37649                         8113,
37650                         8113,
37651                         8113,
37652                         8113,
37653                         8113,
37654                         8113,
37655                         8113,
37656                         8113,
37657                         8113,
37658                         8113,
37659                         8113,
37660                         8113,
37661                         8113,
37662                         8113,
37663                         8113,
37664                         8113,
37665                         8113,
37666                         8113,
37667                         8113,
37668                         8113,
37669                         8113,
37670                         8113,
37671                         8113,
37672                         8113,
37673                         8113,
37674                         8113,
37675                         8113,
37676                         8113,
37677                         8113,
37678                         8113,
37679                         8113,
37680                         8113,
37681                         8113,
37682                         8113,
37683                         8113,
37684                         8113,
37685                         8113,
37686                         8113,
37687                         8113,
37688                         8113,
37689                         8113,
37690                         8113,
37691                         8113,
37692                         8113,
37693                         8113,
37694                         8113,
37695                         8113,
37696                         8113,
37697                         8113,
37698                         8113,
37699                         8113,
37700                         8113,
37701                         8113,
37702                         8113,
37703                         8113,
37704                         8113,
37705                         8113,
37706                         8113,
37707                         8113,
37708                         8113,
37709                         8113,
37710                         8113,
37711                         8113,
37712                         8113,
37713                         8113,
37714                         8113,
37715                         8113,
37716                         8113,
37717                         8113,
37718                         8113,
37719                         8113,
37720                         8113,
37721                         8113,
37722                         8113,
37723                         8113,
37724                         8113,
37725                         8113,
37726                         8113,
37727                         8113,
37728                         8113,
37729                         8113,
37730                         8113,
37731                         8113,
37732                         8113,
37733                         8113,
37734                         8113,
37735                         8113,
37736                         8113,
37737                         8113,
37738                         8113,
37739                         8113,
37740                         8113,
37741                         8113,
37742                         8113,
37743                         8113,
37744                         8113,
37745                         8113,
37746                         8113,
37747                         8113,
37748                         8113,
37749                         8113,
37750                         8113,
37751                         8113,
37752                         8113,
37753                         8113,
37754                         8113,
37755                         8113,
37756                         8113,
37757                         8113,
37758                         8113,
37759                         8113,
37760                         8113,
37761                         8113,
37762                         8113,
37763                         8113,
37764                         8113,
37765                         8113,
37766                         8113,
37767                         8113,
37768                         8113,
37769                         8113,
37770                         8113,
37771                         8113,
37772                         8113,
37773                         8113,
37774                         8113,
37775                         8113,
37776                         8113,
37777                         8113,
37778                         8113,
37779                         8113,
37780                         8113,
37781                         8113,
37782                         8113,
37783                         8113,
37784                         8113,
37785                         8113,
37786                         8113,
37787                         8113,
37788                         8113,
37789                         8113,
37790                         8113,
37791                         8113,
37792                         8113,
37793                         8113,
37794                         8113,
37795                         8113,
37796                         8113,
37797                         8113,
37798                         8113,
37799                         8113,
37800                         8113,
37801                         8113,
37802                         8113,
37803                         8113,
37804                         8113,
37805                         8113,
37806                         8113,
37807                         8113,
37808                         8113,
37809                         8113,
37810                         8113,
37811                         8113,
37812                         8113,
37813                         8113,
37814                         8113,
37815                         8113,
37816                         8113,
37817                         8113,
37818                         8113,
37819                         8113,
37820                         8113,
37821                         8113,
37822                         8113,
37823                         8113,
37824                         8113,
37825                         8113,
37826                         8113,
37827                         8113,
37828                         8113,
37829                         8113,
37830                         8113,
37831                         8113,
37832                         8113,
37833                         8113,
37834                         8113,
37835                         8113,
37836                         8113,
37837                         8113,
37838                         8113,
37839                         8113,
37840                         8113,
37841                         8113,
37842                         8113,
37843                         8113,
37844                         8113,
37845                         8113,
37846                         8113,
37847                         8113,
37848                         8113,
37849                         8113,
37850                         8113,
37851                         8113,
37852                         8113,
37853                         8113,
37854                         8113,
37855                         8113,
37856                         8113,
37857                         8113,
37858                         8113,
37859                         8113,
37860                         8113,
37861                         8113,
37862                         8113,
37863                         8113,
37864                         8113,
37865                         8113,
37866                         8113,
37867                         8113,
37868                         8113,
37869                         8113,
37870                         8113,
37871                         8113,
37872                         8113,
37873                         8113,
37874                         8113,
37875                         8113,
37876                         8113,
37877                         8113,
37878                         8113,
37879                         8113,
37880                         8113,
37881                         8113,
37882                         8113,
37883                         8113,
37884                         8113,
37885                         8113,
37886                         8113,
37887                         8113,
37888                         8113,
37889                         8113,
37890                         8113,
37891                         8113,
37892                         8113,
37893                         8113,
37894                         8113,
37895                         8113,
37896                         8113,
37897                         8113,
37898                         8113,
37899                         8113,
37900                         8113,
37901                         8113,
37902                         8113,
37903                         8113,
37904                         8113,
37905                         8113,
37906                         8113,
37907                         8113,
37908                         8113,
37909                         8113,
37910                         8113,
37911                         8113,
37912                         8113,
37913                         8113,
37914                         8113,
37915                         8113,
37916                         8113,
37917                         8113,
37918                         8113,
37919                         8113,
37920                         8113,
37921                         8113,
37922                         8113,
37923                         8113,
37924                         8113,
37925                         8113,
37926                         8113,
37927                         8113,
37928                         8113,
37929                         8113,
37930                         8113,
37931                         8113,
37932                         8113,
37933                         8113,
37934                         8113,
37935                         8113,
37936                         8113,
37937                         8113,
37938                         8113,
37939                         8113,
37940                         8113,
37941                         8113,
37942                         8113,
37943                         8113,
37944                         8113,
37945                         8113,
37946                         8113,
37947                         8113,
37948                         8113,
37949                         8113,
37950                         8113,
37951                         8113,
37952                         8113,
37953                         8113,
37954                         8113,
37955                         8113,
37956                         8113,
37957                         8113,
37958                         8113,
37959                         8113,
37960                         8113,
37961                         8113,
37962                         8113,
37963                         8113,
37964                         8113,
37965                         8113,
37966                         8113,
37967                         8113,
37968                         8113,
37969                         8113,
37970                         8113,
37971                         8113,
37972                         8113,
37973                         8113,
37974                         8113,
37975                         8113,
37976                         8113,
37977                         8113,
37978                         8113,
37979                         8113,
37980                         8113,
37981                         8113,
37982                         8113,
37983                         8113,
37984                         8113,
37985                         8113,
37986                         8113,
37987                         8113,
37988                         8113,
37989                         8113,
37990                         8113,
37991                         8113,
37992                         8113,
37993                         8113,
37994                         8113,
37995                         8113,
37996                         8113,
37997                         8113,
37998                         8113,
37999                         8113,
38000                         8113,
38001                         8113,
38002                         8113,
38003                         8113,
38004                         8113,
38005                         8113,
38006                         8113,
38007                         8113,
38008                         8113,
38009                         8113,
38010                         8113,
38011                         8113,
38012                         8113,
38013                         8113,
38014                         8113,
38015                         8113,
38016                         8113,
38017                         8113,
38018                         8113,
38019                         8113,
38020                         8113,
38021                         8113,
38022                         8113,
38023                         8113,
38024                         8113,
38025                         8113,
38026                         8113,
38027                         8113,
38028                         8113,
38029                         8113,
38030                         8113,
38031                         8113,
38032                         8113,
38033                         8113,
38034                         8113,
38035                         8113,
38036                         8113,
38037                         8113,
38038                         8113,
38039                         8113,
38040                         8113,
38041                         8113,
38042                         8113,
38043                         8113,
38044                         8113,
38045                         8113,
38046                         8113,
38047                         8113,
38048                         8113,
38049                         8113,
38050                         8113,
38051                         8113,
38052                         8113,
38053                         8113,
38054                         8113,
38055                         8113,
38056                         8113,
38057                         8113,
38058                         8113,
38059                         8113,
38060                         8113,
38061                         8113,
38062                         8113,
38063                         8113,
38064                         8113,
38065                         8113,
38066                         8113,
38067                         8113,
38068                         8113,
38069                         8113,
38070                         8113,
38071                         8113,
38072                         8113,
38073                         8113,
38074                         8113,
38075                         8113,
38076                         8113,
38077                         8113,
38078                         8113,
38079                         8113,
38080                         8113,
38081                         8113,
38082                         8113,
38083                         8113,
38084                         8113,
38085                         8113,
38086                         8113,
38087                         8113,
38088                         8113,
38089                         8113,
38090                         8113,
38091                         8113,
38092                         8113,
38093                         8113,
38094                         8113,
38095                         8113,
38096                         8113,
38097                         8113,
38098                         8113,
38099                         8113,
38100                         8113,
38101                         8113,
38102                         8113,
38103                         8113,
38104                         8113,
38105                         8113,
38106                         8113,
38107                         8113,
38108                         8113,
38109                         8113,
38110                         8113,
38111                         8113,
38112                         8113,
38113                         8113,
38114                         8113,
38115                         8113,
38116                         8113,
38117                         8113,
38118                         8113,
38119                         8113,
38120                         8113,
38121                         8113,
38122                         8113,
38123                         8113,
38124                         8113,
38125                         8113,
38126                         8113,
38127                         8113,
38128                         8113,
38129                         8113,
38130                         8113,
38131                         8113,
38132                         8113,
38133                         8113,
38134                         8113,
38135                         8113,
38136                         8113,
38137                         8113,
38138                         8113,
38139                         8113,
38140                         8113,
38141                         8113,
38142                         8113,
38143                         8113,
38144                         8113,
38145                         8113,
38146                         8113,
38147                         8113,
38148                         8113,
38149                         8113,
38150                         8113,
38151                         8113,
38152                         8113,
38153                         8113,
38154                         8113,
38155                         8113,
38156                         8113,
38157                         8113,
38158                         8113,
38159                         8113,
38160                         8113,
38161                         8113,
38162                         8113,
38163                         8113,
38164                         8113,
38165                         8113,
38166                         8113,
38167                         8113,
38168                         8113,
38169                         8113,
38170                         8113,
38171                         8113,
38172                         8113,
38173                         8113,
38174                         8113,
38175                         8113,
38176                         8113,
38177                         8113,
38178                         8113,
38179                         8113,
38180                         8113,
38181                         8113,
38182                         8113,
38183                         8113,
38184                         8113,
38185                         8113,
38186                         8113,
38187                         8113,
38188                         8113,
38189                         8113,
38190                         8113,
38191                         8113,
38192                         8113,
38193                         8113,
38194                         8113,
38195                         8113,
38196                         8113,
38197                         8113,
38198                         8113,
38199                         8113,
38200                         8113,
38201                         8113,
38202                         8113,
38203                         8113,
38204                         8113,
38205                         8113,
38206                         8113,
38207                         8113,
38208                         8113,
38209                         8113,
38210                         8113,
38211                         8113,
38212                         8113,
38213                         8113,
38214                         8113,
38215                         8113,
38216                         8113,
38217                         8113,
38218                         8113,
38219                         8113,
38220                         8113,
38221                         8113,
38222                         8113,
38223                         8113,
38224                         8113,
38225                         8113,
38226                         8113,
38227                         8113,
38228                         8113,
38229                         8113,
38230                         8113,
38231                         8113,
38232                         8113,
38233                         8113,
38234                         8113,
38235                         8113,
38236                         8113,
38237                         8113,
38238                         8113,
38239                         8113,
38240                         8113,
38241                         8113,
38242                         8113,
38243                         8113,
38244                         8113,
38245                         8113,
38246                         8113,
38247                         8113,
38248                         8113,
38249                         8113,
38250                         8113,
38251                         8113,
38252                         8113,
38253                         8113,
38254                         8113,
38255                         8113,
38256                         8113,
38257                         8113,
38258                         8113,
38259                         8113,
38260                         8113,
38261                         8113,
38262                         8113,
38263                         8113,
38264                         8113,
38265                         8113,
38266                         8113,
38267                         8113,
38268                         8113,
38269                         8113,
38270                         8113,
38271                         8113,
38272                         8113,
38273                         8113,
38274                         8113,
38275                         8113,
38276                         8113,
38277                         8113,
38278                         8113,
38279                         8113,
38280                         8113,
38281                         8113,
38282                         8113,
38283                         8113,
38284                         8113,
38285                         8113,
38286                         8113,
38287                         8113,
38288                         8113,
38289                         8113,
38290                         8113,
38291                         8113,
38292                         8113,
38293                         8113,
38294                         8113,
38295                         8113,
38296                         8113,
38297                         8113,
38298                         8113,
38299                         8113,
38300                         8113,
38301                         8113,
38302                         8113,
38303                         8113,
38304                         8113,
38305                         8113,
38306                         8113,
38307                         8113,
38308                         8113,
38309                         8113,
38310                         8113,
38311                         8113,
38312                         8113,
38313                         8113,
38314                         8113,
38315                         8113,
38316                         8113,
38317                         8113,
38318                         8113,
38319                         8113,
38320                         8113,
38321                         8113,
38322                         8113,
38323                         8113,
38324                         8113,
38325                         8113,
38326                         8113,
38327                         8113,
38328                         8113,
38329                         8113,
38330                         8113,
38331                         8113,
38332                         8113,
38333                         8113,
38334                         8113,
38335                         8113,
38336                         8113,
38337                         8113,
38338                         8113,
38339                         8113,
38340                         8113,
38341                         8113,
38342                         8113,
38343                         8113,
38344                         8113,
38345                         8113,
38346                         8113,
38347                         8113,
38348                         8113,
38349                         8113,
38350                         8113,
38351                         8113,
38352                         8113,
38353                         8113,
38354                         8113,
38355                         8113,
38356                         8113,
38357                         8113,
38358                         8113,
38359                         8113,
38360                         8113,
38361                         8113,
38362                         8113,
38363                         8113,
38364                         8113,
38365                         8113,
38366                         8113,
38367                         8113,
38368                         8113,
38369                         8113,
38370                         8113,
38371                         8113,
38372                         8113,
38373                         8113,
38374                         8113,
38375                         8113,
38376                         8113,
38377                         8113,
38378                         8113,
38379                         8113,
38380                         8113,
38381                         8113,
38382                         8113,
38383                         8113,
38384                         8113,
38385                         8113,
38386                         8113,
38387                         8113,
38388                         8113,
38389                         8113,
38390                         8113,
38391                         8113,
38392                         8113,
38393                         8113,
38394                         8113,
38395                         8113,
38396                         8113,
38397                         8113,
38398                         8113,
38399                         8113,
38400                         8113,
38401                         8113,
38402                         8113,
38403                         8113,
38404                         8113,
38405                         8113,
38406                         8113,
38407                         8113,
38408                         8113,
38409                         8113,
38410                         8113,
38411                         8113,
38412                         8113,
38413                         8113,
38414                         8113,
38415                         8113,
38416                         8113,
38417                         8113,
38418                         8113,
38419                         8113,
38420                         8113,
38421                         8113,
38422                         8113,
38423                         8113,
38424                         8113,
38425                         8113,
38426                         8113,
38427                         8113,
38428                         8113,
38429                         8113,
38430                         8113,
38431                         8113,
38432                         8113,
38433                         8113,
38434                         8113,
38435                         8113,
38436                         8113,
38437                         8113,
38438                         8113,
38439                         8113,
38440                         8113,
38441                         8113,
38442                         8113,
38443                         8113,
38444                         8113,
38445                         8113,
38446                         8113,
38447                         8113,
38448                         8113,
38449                         8113,
38450                         8113,
38451                         8113,
38452                         8113,
38453                         8113,
38454                         8113,
38455                         8113,
38456                         8113,
38457                         8113,
38458                         8113,
38459                         8113,
38460                         8113,
38461                         8113,
38462                         8113,
38463                         8113,
38464                         8113,
38465                         8113,
38466                         8113,
38467                         8113,
38468                         8113,
38469                         8113,
38470                         8113,
38471                         8113,
38472                         8113,
38473                         8113,
38474                         8113,
38475                         8113,
38476                         8113,
38477                         8113,
38478                         8113,
38479                         8113,
38480                         8113,
38481                         8113,
38482                         8113,
38483                         8113,
38484                         8113,
38485                         8113,
38486                         8113,
38487                         8113,
38488                         8113,
38489                         8113,
38490                         8113,
38491                         8113,
38492                         8113,
38493                         8113,
38494                         8113,
38495                         8113,
38496                         8113,
38497                         8113,
38498                         8113,
38499                         8113,
38500                         8113,
38501                         8113,
38502                         8113,
38503                         8113,
38504                         8113,
38505                         8113,
38506                         8113,
38507                         8113,
38508                         8113,
38509                         8113,
38510                         8113,
38511                         8113,
38512                         8113,
38513                         8113,
38514                         8113,
38515                         8113,
38516                         8113,
38517                         8113,
38518                         8113,
38519                         8113,
38520                         8113,
38521                         8113,
38522                         8113,
38523                         8113,
38524                         8113,
38525                         8113,
38526                         8113,
38527                         8113,
38528                         8113,
38529                         8113,
38530                         8113,
38531                         8113,
38532                         8113,
38533                         8113,
38534                         8113,
38535                         8113,
38536                         8113,
38537                         8113,
38538                         8113,
38539                         8113,
38540                         8113,
38541                         8113,
38542                         8113,
38543                         8113,
38544                         8113,
38545                         8113,
38546                         8113,
38547                         8113,
38548                         8113,
38549                         8113,
38550                         8113,
38551                         8113,
38552                         8113,
38553                         8113,
38554                         8113,
38555                         8113,
38556                         8113,
38557                         8113,
38558                         8113,
38559                         8113,
38560                         8113,
38561                         8113,
38562                         8113,
38563                         8113,
38564                         8113,
38565                         8113,
38566                         8113,
38567                         8113,
38568                         8113,
38569                         8113,
38570                         8113,
38571                         8113,
38572                         8113,
38573                         8113,
38574                         8113,
38575                         8113,
38576                         8113,
38577                         8113,
38578                         8113,
38579                         8113,
38580                         8113,
38581                         8113,
38582                         8113,
38583                         8113,
38584                         8113,
38585                         8113,
38586                         8113,
38587                         8113,
38588                         8113,
38589                         8113,
38590                         8113,
38591                         8113,
38592                         8113,
38593                         8113,
38594                         8113,
38595                         8113,
38596                         8113,
38597                         8113,
38598                         8113,
38599                         8113,
38600                         8113,
38601                         8113,
38602                         8113,
38603                         8113,
38604                         8113,
38605                         8113,
38606                         8113,
38607                         8113,
38608                         8113,
38609                         8113,
38610                         8113,
38611                         8113,
38612                         8113,
38613                         8113,
38614                         8113,
38615                         8113,
38616                         8113,
38617                         8113,
38618                         8113,
38619                         8113,
38620                         8113,
38621                         8113,
38622                         8113,
38623                         8113,
38624                         8113,
38625                         8113,
38626                         8113,
38627                         8113,
38628                         8113,
38629                         8113,
38630                         8113,
38631                         8113,
38632                         8113,
38633                         8113,
38634                         8113,
38635                         8113,
38636                         8113,
38637                         8113,
38638                         8113,
38639                         8113,
38640                         8113,
38641                         8113,
38642                         8113,
38643                         8113,
38644                         8113,
38645                         8113,
38646                         8113,
38647                         8113,
38648                         8113,
38649                         8113,
38650                         8113,
38651                         8113,
38652                         8113,
38653                         8113,
38654                         8113,
38655                         8113,
38656                         8113,
38657                         8113,
38658                         8113,
38659                         8113,
38660                         8113,
38661                         8113,
38662                         8113,
38663                         8113,
38664                         8113,
38665                         8113,
38666                         8113,
38667                         8113,
38668                         8113,
38669                         8113,
38670                         8113,
38671                         8113,
38672                         8113,
38673                         8113,
38674                         8113,
38675                         8113,
38676                         8113,
38677                         8113,
38678                         8113,
38679                         8113,
38680                         8113,
38681                         8113,
38682                         8113,
38683                         8113,
38684                         8113,
38685                         8113,
38686                         8113,
38687                         8113,
38688                         8113,
38689                         8113,
38690                         8113,
38691                         8113,
38692                         8113,
38693                         8113,
38694                         8113,
38695                         8113,
38696                         8113,
38697                         8113,
38698                         8113,
38699                         8113,
38700                         8113,
38701                         8113,
38702                         8113,
38703                         8113,
38704                         8113,
38705                         8113,
38706                         8113,
38707                         8113,
38708                         8113,
38709                         8113,
38710                         8113,
38711                         8113,
38712                         8113,
38713                         8113,
38714                         8113,
38715                         8113,
38716                         8113,
38717                         8113,
38718                         8113,
38719                         8113,
38720                         8113,
38721                         8113,
38722                         8113,
38723                         8113,
38724                         8113,
38725                         8113,
38726                         8113,
38727                         8113,
38728                         8113,
38729                         8113,
38730                         8113,
38731                         8113,
38732                         8113,
38733                         8113,
38734                         8113,
38735                         8113,
38736                         8113,
38737                         8113,
38738                         8113,
38739                         8113,
38740                         8113,
38741                         8113,
38742                         8113,
38743                         8113,
38744                         8113,
38745                         8113,
38746                         8113,
38747                         8113,
38748                         8113,
38749                         8113,
38750                         8113,
38751                         8113,
38752                         8113,
38753                         8113,
38754                         8113,
38755                         8113,
38756                         8113,
38757                         8113,
38758                         8113,
38759                         8113,
38760                         8113,
38761                         8113,
38762                         8113,
38763                         8113,
38764                         8113,
38765                         8113,
38766                         8113,
38767                         8113,
38768                         8113,
38769                         8113,
38770                         8113,
38771                         8113,
38772                         8113,
38773                         8113,
38774                         8113,
38775                         8113,
38776                         8113,
38777                         8113,
38778                         8113,
38779                         8113,
38780                         8113,
38781                         8113,
38782                         8113,
38783                         8113,
38784                         8113,
38785                         8113,
38786                         8113,
38787                         8113,
38788                         8113,
38789                         8113,
38790                         8113,
38791                         8113,
38792                         8113,
38793                         8113,
38794                         8113,
38795                         8113,
38796                         8113,
38797                         8113,
38798                         8113,
38799                         8113,
38800                         8113,
38801                         8113,
38802                         8113,
38803                         8113,
38804                         8113,
38805                         8113,
38806                         8113,
38807                         8113,
38808                         8113,
38809                         8113,
38810                         8113,
38811                         8113,
38812                         8113,
38813                         8113,
38814                         8113,
38815                         8113,
38816                         8113,
38817                         8113,
38818                         8113,
38819                         8113,
38820                         8113,
38821                         8113,
38822                         8113,
38823                         8113,
38824                         8113,
38825                         8113,
38826                         8113,
38827                         8113,
38828                         8113,
38829                         8113,
38830                         8113,
38831                         8113,
38832                         8113,
38833                         8113,
38834                         8113,
38835                         8113,
38836                         8113,
38837                         8113,
38838                         8113,
38839                         8113,
38840                         8113,
38841                         8113,
38842                         8113,
38843                         8113,
38844                         8113,
38845                         8113,
38846                         8113,
38847                         8113,
38848                         8113,
38849                         8113,
38850                         8113,
38851                         8113,
38852                         8113,
38853                         8113,
38854                         8113,
38855                         8113,
38856                         8113,
38857                         8113,
38858                         8113,
38859                         8113,
38860                         8113,
38861                         8113,
38862                         8113,
38863                         8113,
38864                         8113,
38865                         8113,
38866                         8113,
38867                         8113,
38868                         8113,
38869                         8113,
38870                         8113,
38871                         8113,
38872                         8113,
38873                         8113,
38874                         8113,
38875                         8113,
38876                         8113,
38877                         8113,
38878                         8113,
38879                         8113,
38880                         8113,
38881                         8113,
38882                         8113,
38883                         8113,
38884                         8113,
38885                         8113,
38886                         8113,
38887                         8113,
38888                         8113,
38889                         8113,
38890                         8113,
38891                         8113,
38892                         8113,
38893                         8113,
38894                         8113,
38895                         8113,
38896                         8113,
38897                         8113,
38898                         8113,
38899                         8113,
38900                         8113,
38901                         8113,
38902                         8113,
38903                         8113,
38904                         8113,
38905                         8113,
38906                         8113,
38907                         8113,
38908                         8113,
38909                         8113,
38910                         8113,
38911                         8113,
38912                         8113,
38913                         8113,
38914                         8113,
38915                         8113,
38916                         8113,
38917                         8113,
38918                         8113,
38919                         8113,
38920                         8113,
38921                         8113,
38922                         8113,
38923                         8113,
38924                         8113,
38925                         8113,
38926                         8113,
38927                         8113,
38928                         8113,
38929                         8113,
38930                         8113,
38931                         8113,
38932                         8113,
38933                         8113,
38934                         8113,
38935                         8113,
38936                         8113,
38937                         8113,
38938                         8113,
38939                         8113,
38940                         8113,
38941                         8113,
38942                         8113,
38943                         8113,
38944                         8113,
38945                         8113,
38946                         8113,
38947                         8113,
38948                         8113,
38949                         8113,
38950                         8113,
38951                         8113,
38952                         8113,
38953                         8113,
38954                         8113,
38955                         8113,
38956                         8113,
38957                         8113,
38958                         8113,
38959                         8113,
38960                         8113,
38961                         8113,
38962                         8113,
38963                         8113,
38964                         8113,
38965                         8113,
38966                         8113,
38967                         8113,
38968                         8113,
38969                         8113,
38970                         8113,
38971                         8113,
38972                         8113,
38973                         8113,
38974                         8113,
38975                         8113,
38976                         8113,
38977                         8113,
38978                         8113,
38979                         8113,
38980                         8113,
38981                         8113,
38982                         8113,
38983                         8113,
38984                         8113,
38985                         8113,
38986                         8113,
38987                         8113,
38988                         8113,
38989                         8113,
38990                         8113,
38991                         8113,
38992                         8113,
38993                         8113,
38994                         8113,
38995                         8113,
38996                         8113,
38997                         8113,
38998                         8113,
38999                         8113,
39000                         8113,
39001                         8113,
39002                         8113,
39003                         8113,
39004                         8113,
39005                         8113,
39006                         8113,
39007                         8113,
39008                         8113,
39009                         8113,
39010                         8113,
39011                         8113,
39012                         8113,
39013                         8113,
39014                         8113,
39015                         8113,
39016                         8113,
39017                         8113,
39018                         8113,
39019                         8113,
39020                         8113,
39021                         8113,
39022                         8113,
39023                         8113,
39024                         8113,
39025                         8113,
39026                         8113,
39027                         8113,
39028                         8113,
39029                         8113,
39030                         8113,
39031                         8113,
39032                         8113,
39033                         8113,
39034                         8113,
39035                         8113,
39036                         8113,
39037                         8113,
39038                         8113,
39039                         8113,
39040                         8113,
39041                         8113,
39042                         8113,
39043                         8113,
39044                         8113,
39045                         8113,
39046                         8113,
39047                         8113,
39048                         8113,
39049                         8113,
39050                         8113,
39051                         8113,
39052                         8113,
39053                         8113,
39054                         8113,
39055                         8113,
39056                         8113,
39057                         8113,
39058                         8113,
39059                         8113,
39060                         8113,
39061                         8113,
39062                         8113,
39063                         8113,
39064                         8113,
39065                         8113,
39066                         8113,
39067                         8113,
39068                         8113,
39069                         8113,
39070                         8113,
39071                         8113,
39072                         8113,
39073                         8113,
39074                         8113,
39075                         8113,
39076                         8113,
39077                         8113,
39078                         8113,
39079                         8113,
39080                         8113,
39081                         8113,
39082                         8113,
39083                         8113,
39084                         8113,
39085                         8113,
39086                         8113,
39087                         8113,
39088                         8113,
39089                         8113,
39090                         8113,
39091                         8113,
39092                         8113,
39093                         8113,
39094                         8113,
39095                         8113,
39096                         8113,
39097                         8113,
39098                         8113,
39099                         8113,
39100                         8113,
39101                         8113,
39102                         8113,
39103                         8113,
39104                         8113,
39105                         8113,
39106                         8113,
39107                         8113,
39108                         8113,
39109                         8113,
39110                         8113,
39111                         8113,
39112                         8113,
39113                         8113,
39114                         8113,
39115                         8113,
39116                         8113,
39117                         8113,
39118                         8113,
39119                         8113,
39120                         8113,
39121                         8113,
39122                         8113,
39123                         8113,
39124                         8113,
39125                         8113,
39126                         8113,
39127                         8113,
39128                         8113,
39129                         8113,
39130                         8113,
39131                         8113,
39132                         8113,
39133                         8113,
39134                         8113,
39135                         8113,
39136                         8113,
39137                         8113,
39138                         8113,
39139                         8113,
39140                         8113,
39141                         8113,
39142                         8113,
39143                         8113,
39144                         8113,
39145                         8113,
39146                         8113,
39147                         8113,
39148                         8113,
39149                         8113,
39150                         8113,
39151                         8113,
39152                         8113,
39153                         8113,
39154                         8113,
39155                         8113,
39156                         8113,
39157                         8113,
39158                         8113,
39159                         8113,
39160                         8113,
39161                         8113,
39162                         8113,
39163                         8113,
39164                         8113,
39165                         8113,
39166                         8113,
39167                         8113,
39168                         8113,
39169                         8113,
39170                         8113,
39171                         8113,
39172                         8113,
39173                         8113,
39174                         8113,
39175                         8113,
39176                         8113,
39177                         8113,
39178                         8113,
39179                         8113,
39180                         8113,
39181                         8113,
39182                         8113,
39183                         8113,
39184                         8113,
39185                         8113,
39186                         8113,
39187                         8113,
39188                         8113,
39189                         8113,
39190                         8113,
39191                         8113,
39192                         8113,
39193                         8113,
39194                         8113,
39195                         8113,
39196                         8113,
39197                         8113,
39198                         8113,
39199                         8113,
39200                         8113,
39201                         8113,
39202                         8113,
39203                         8113,
39204                         8113,
39205                         8113,
39206                         8113,
39207                         8113,
39208                         8113,
39209                         8113,
39210                         8113,
39211                         8113,
39212                         8113,
39213                         8113,
39214                         8113,
39215                         8113,
39216                         8113,
39217                         8113,
39218                         8113,
39219                         8113,
39220                         8113,
39221                         8113,
39222                         8113,
39223                         8113,
39224                         8113,
39225                         8113,
39226                         8113,
39227                         8113,
39228                         8113,
39229                         8113,
39230                         8113,
39231                         8113,
39232                         8113,
39233                         8113,
39234                         8113,
39235                         8113,
39236                         8113,
39237                         8113,
39238                         8113,
39239                         8113,
39240                         8113,
39241                         8113,
39242                         8113,
39243                         8113,
39244                         8113,
39245                         8113,
39246                         8113,
39247                         8113,
39248                         8113,
39249                         8113,
39250                         8113,
39251                         8113,
39252                         8113,
39253                         8113,
39254                         8113,
39255                         8113,
39256                         8113,
39257                         8113,
39258                         8113,
39259                         8113,
39260                         8113,
39261                         8113,
39262                         8113,
39263                         8113,
39264                         8113,
39265                         8113,
39266                         8113,
39267                         8113,
39268                         8113,
39269                         8113,
39270                         8113,
39271                         8113,
39272                         8113,
39273                         8113,
39274                         8113,
39275                         8113,
39276                         8113,
39277                         8113,
39278                         8113,
39279                         8113,
39280                         8113,
39281                         8113,
39282                         8113,
39283                         8113,
39284                         8113,
39285                         8113,
39286                         8113,
39287                         8113,
39288                         8113,
39289                         8113,
39290                         8113,
39291                         8113,
39292                         8113,
39293                         8113,
39294                         8113,
39295                         8113,
39296                         8113,
39297                         8113,
39298                         8113,
39299                         8113,
39300                         8113,
39301                         8113,
39302                         8113,
39303                         8113,
39304                         8113,
39305                         8113,
39306                         8113,
39307                         8113,
39308                         8113,
39309                         8113,
39310                         8113,
39311                         8113,
39312                         8113,
39313                         8113,
39314                         8113,
39315                         8113,
39316                         8113,
39317                         8113,
39318                         8113,
39319                         8113,
39320                         8113,
39321                         8113,
39322                         8113,
39323                         8113,
39324                         8113,
39325                         8113,
39326                         8113,
39327                         8113,
39328                         8113,
39329                         8113,
39330                         8113,
39331                         8113,
39332                         8113,
39333                         8113,
39334                         8113,
39335                         8113,
39336                         8113,
39337                         8113,
39338                         8113,
39339                         8113,
39340                         8113,
39341                         8113,
39342                         8113,
39343                         8113,
39344                         8113,
39345                         8113,
39346                         8113,
39347                         8113,
39348                         8113,
39349                         8113,
39350                         8113,
39351                         8113,
39352                         8113,
39353                         8113,
39354                         8113,
39355                         8113,
39356                         8113,
39357                         8113,
39358                         8113,
39359                         8113,
39360                         8113,
39361                         8113,
39362                         8113,
39363                         8113,
39364                         8113,
39365                         8113,
39366                         8113,
39367                         8113,
39368                         8113,
39369                         8113,
39370                         8113,
39371                         8113,
39372                         8113,
39373                         8113,
39374                         8113,
39375                         8113,
39376                         8113,
39377                         8113,
39378                         8113,
39379                         8113,
39380                         8113,
39381                         8113,
39382                         8113,
39383                         8113,
39384                         8113,
39385                         8113,
39386                         8113,
39387                         8113,
39388                         8113,
39389                         8113,
39390                         8113,
39391                         8113,
39392                         8113,
39393                         8113,
39394                         8113,
39395                         8113,
39396                         8113,
39397                         8113,
39398                         8113,
39399                         8113,
39400                         8113,
39401                         8113,
39402                         8113,
39403                         8113,
39404                         8113,
39405                         8113,
39406                         8113,
39407                         8113,
39408                         8113,
39409                         8113,
39410                         8113,
39411                         8113,
39412                         8113,
39413                         8113,
39414                         8113,
39415                         8113,
39416                         8113,
39417                         8113,
39418                         8113,
39419                         8113,
39420                         8113,
39421                         8113,
39422                         8113,
39423                         8113,
39424                         8113,
39425                         8113,
39426                         8113,
39427                         8113,
39428                         8113,
39429                         8113,
39430                         8113,
39431                         8113,
39432                         8113,
39433                         8113,
39434                         8113,
39435                         8113,
39436                         8113,
39437                         8113,
39438                         8113,
39439                         8113,
39440                         8113,
39441                         8113,
39442                         8113,
39443                         8113,
39444                         8113,
39445                         8113,
39446                         8113,
39447                         8113,
39448                         8113,
39449                         8113,
39450                         8113,
39451                         8113,
39452                         8113,
39453                         8113,
39454                         8113,
39455                         8113,
39456                         8113,
39457                         8113,
39458                         8113,
39459                         8113,
39460                         8113,
39461                         8113,
39462                         8113,
39463                         8113,
39464                         8113,
39465                         8113,
39466                         8113,
39467                         8113,
39468                         8113,
39469                         8113,
39470                         8113,
39471                         8113,
39472                         8113,
39473                         8113,
39474                         8113,
39475                         8113,
39476                         8113,
39477                         8113,
39478                         8113,
39479                         8113,
39480                         8113,
39481                         8113,
39482                         8113,
39483                         8113,
39484                         8113,
39485                         8113,
39486                         8113,
39487                         8113,
39488                         8113,
39489                         8113,
39490                         8113,
39491                         8113,
39492                         8113,
39493                         8113,
39494                         8113,
39495                         8113,
39496                         8113,
39497                         8113,
39498                         8113,
39499                         8113,
39500                         8113,
39501                         8113,
39502                         8113,
39503                         8113,
39504                         8113,
39505                         8113,
39506                         8113,
39507                         8113,
39508                         8113,
39509                         8113,
39510                         8113,
39511                         8113,
39512                         8113,
39513                         8113,
39514                         8113,
39515                         8113,
39516                         8113,
39517                         8113,
39518                         8113,
39519                         8113,
39520                         8113,
39521                         8113,
39522                         8113,
39523                         8113,
39524                         8113,
39525                         8113,
39526                         8113,
39527                         8113,
39528                         8113,
39529                         8113,
39530                         8113,
39531                         8113,
39532                         8113,
39533                         8113,
39534                         8113,
39535                         8113,
39536                         8113,
39537                         8113,
39538                         8113,
39539                         8113,
39540                         8113,
39541                         8113,
39542                         8113,
39543                         8113,
39544                         8113,
39545                         8113,
39546                         8113,
39547                         8113,
39548                         8113,
39549                         8113,
39550                         8113,
39551                         8113,
39552                         8113,
39553                         8113,
39554                         8113,
39555                         8113,
39556                         8113,
39557                         8113,
39558                         8113,
39559                         8113,
39560                         8113,
39561                         8113,
39562                         8113,
39563                         8113,
39564                         8113,
39565                         8113,
39566                         8113,
39567                         8113,
39568                         8113,
39569                         8113,
39570                         8113,
39571                         8113,
39572                         8113,
39573                         8113,
39574                         8113,
39575                         8113,
39576                         8113,
39577                         8113,
39578                         8113,
39579                         8113,
39580                         8113,
39581                         8113,
39582                         8113,
39583                         8113,
39584                         8113,
39585                         8113,
39586                         8113,
39587                         8113,
39588                         8113,
39589                         8113,
39590                         8113,
39591                         8113,
39592                         8113,
39593                         8113,
39594                         8113,
39595                         8113,
39596                         8113,
39597                         8113,
39598                         8113,
39599                         8113,
39600                         8113,
39601                         8113,
39602                         8113,
39603                         8113,
39604                         8113,
39605                         8113,
39606                         8113,
39607                         8113,
39608                         8113,
39609                         8113,
39610                         8113,
39611                         8113,
39612                         8113,
39613                         8113,
39614                         8113,
39615                         8113,
39616                         8113,
39617                         8113,
39618                         8113,
39619                         8113,
39620                         8113,
39621                         8113,
39622                         8113,
39623                         8113,
39624                         8113,
39625                         8113,
39626                         8113,
39627                         8113,
39628                         8113,
39629                         8113,
39630                         8113,
39631                         8113,
39632                         8113,
39633                         8113,
39634                         8113,
39635                         8113,
39636                         8113,
39637                         8113,
39638                         8113,
39639                         8113,
39640                         8113,
39641                         8113,
39642                         8113,
39643                         8113,
39644                         8113,
39645                         8113,
39646                         8113,
39647                         8113,
39648                         8113,
39649                         8113,
39650                         8113,
39651                         8113,
39652                         8113,
39653                         8113,
39654                         8113,
39655                         8113,
39656                         8113,
39657                         8113,
39658                         8113,
39659                         8113,
39660                         8113,
39661                         8113,
39662                         8113,
39663                         8113,
39664                         8113,
39665                         8113,
39666                         8113,
39667                         8113,
39668                         8113,
39669                         8113,
39670                         8113,
39671                         8113,
39672                         8113,
39673                         8113,
39674                         8113,
39675                         8113,
39676                         8113,
39677                         8113,
39678                         8113,
39679                         8113,
39680                         8113,
39681                         8113,
39682                         8113,
39683                         8113,
39684                         8113,
39685                         8113,
39686                         8113,
39687                         8113,
39688                         8113,
39689                         8113,
39690                         8113,
39691                         8113,
39692                         8113,
39693                         8113,
39694                         8113,
39695                         8113,
39696                         8113,
39697                         8113,
39698                         8113,
39699                         8113,
39700                         8113,
39701                         8113,
39702                         8113,
39703                         8113,
39704                         8113,
39705                         8113,
39706                         8113,
39707                         8113,
39708                         8113,
39709                         8113,
39710                         8113,
39711                         8113,
39712                         8113,
39713                         8113,
39714                         8113,
39715                         8113,
39716                         8113,
39717                         8113,
39718                         8113,
39719                         8113,
39720                         8113,
39721                         8113,
39722                         8113,
39723                         8113,
39724                         8113,
39725                         8113,
39726                         8113,
39727                         8113,
39728                         8113,
39729                         8113,
39730                         8113,
39731                         8113,
39732                         8113,
39733                         8113,
39734                         8113,
39735                         8113,
39736                         8113,
39737                         8113,
39738                         8113,
39739                         8113,
39740                         8113,
39741                         8113,
39742                         8113,
39743                         8113,
39744                         8113,
39745                         8113,
39746                         8113,
39747                         8113,
39748                         8113,
39749                         8113,
39750                         8113,
39751                         8113,
39752                         8113,
39753                         8113,
39754                         8113,
39755                         8113,
39756                         8113,
39757                         8113,
39758                         8113,
39759                         8113,
39760                         8113,
39761                         8113,
39762                         8113,
39763                         8113,
39764                         8113,
39765                         8113,
39766                         8113,
39767                         8113,
39768                         8113,
39769                         8113,
39770                         8113,
39771                         8113,
39772                         8113,
39773                         8113,
39774                         8113,
39775                         8113,
39776                         8113,
39777                         8113,
39778                         8113,
39779                         8113,
39780                         8113,
39781                         8113,
39782                         8113,
39783                         8113,
39784                         8113,
39785                         8113,
39786                         8113,
39787                         8113,
39788                         8113,
39789                         8113,
39790                         8113,
39791                         8113,
39792                         8113,
39793                         8113,
39794                         8113,
39795                         8113,
39796                         8113,
39797                         8113,
39798                         8113,
39799                         8113,
39800                         8113,
39801                         8113,
39802                         8113,
39803                         8113,
39804                         8113,
39805                         8113,
39806                         8113,
39807                         8113,
39808                         8113,
39809                         8113,
39810                         8113,
39811                         8113,
39812                         8113,
39813                         8113,
39814                         8113,
39815                         8113,
39816                         8113,
39817                         8113,
39818                         8113,
39819                         8113,
39820                         8113,
39821                         8113,
39822                         8113,
39823                         8113,
39824                         8113,
39825                         8113,
39826                         8113,
39827                         8113,
39828                         8113,
39829                         8113,
39830                         8113,
39831                         8113,
39832                         8113,
39833                         8113,
39834                         8113,
39835                         8113,
39836                         8113,
39837                         8113,
39838                         8113,
39839                         8113,
39840                         8113,
39841                         8113,
39842                         8113,
39843                         8113,
39844                         8113,
39845                         8113,
39846                         8113,
39847                         8113,
39848                         8113,
39849                         8113,
39850                         8113,
39851                         8113,
39852                         8113,
39853                         8113,
39854                         8113,
39855                         8113,
39856                         8113,
39857                         8113,
39858                         8113,
39859                         8113,
39860                         8113,
39861                         8113,
39862                         8113,
39863                         8113,
39864                         8113,
39865                         8113,
39866                         8113,
39867                         8113,
39868                         8113,
39869                         8113,
39870                         8113,
39871                         8113,
39872                         8113,
39873                         8113,
39874                         8113,
39875                         8113,
39876                         8113,
39877                         8113,
39878                         8113,
39879                         8113,
39880                         8113,
39881                         8113,
39882                         8113,
39883                         8113,
39884                         8113,
39885                         8113,
39886                         8113,
39887                         8113,
39888                         8113,
39889                         8113,
39890                         8113,
39891                         8113,
39892                         8113,
39893                         8113,
39894                         8113,
39895                         8113,
39896                         8113,
39897                         8113,
39898                         8113,
39899                         8113,
39900                         8113,
39901                         8113,
39902                         8113,
39903                         8113,
39904                         8113,
39905                         8113,
39906                         8113,
39907                         8113,
39908                         8113,
39909                         8113,
39910                         8113,
39911                         8113,
39912                         8113,
39913                         8113,
39914                         8113,
39915                         8113,
39916                         8113,
39917                         8113,
39918                         8113,
39919                         8113,
39920                         8113,
39921                         8113,
39922                         8113,
39923                         8113,
39924                         8113,
39925                         8113,
39926                         8113,
39927                         8113,
39928                         8113,
39929                         8113,
39930                         8113,
39931                         8113,
39932                         8113,
39933                         8113,
39934                         8113,
39935                         8113,
39936                         8113,
39937                         8113,
39938                         8113,
39939                         8113,
39940                         8113,
39941                         8113,
39942                         8113,
39943                         8113,
39944                         8113,
39945                         8113,
39946                         8113,
39947                         8113,
39948                         8113,
39949                         8113,
39950                         8113,
39951                         8113,
39952                         8113,
39953                         8113,
39954                         8113,
39955                         8113,
39956                         8113,
39957                         8113,
39958                         8113,
39959                         8113,
39960                         8113,
39961                         8113,
39962                         8113,
39963                         8113,
39964                         8113,
39965                         8113,
39966                         8113,
39967                         8113,
39968                         8113,
39969                         8113,
39970                         8113,
39971                         8113,
39972                         8113,
39973                         8113,
39974                         8113,
39975                         8113,
39976                         8113,
39977                         8113,
39978                         8113,
39979                         8113,
39980                         8113,
39981                         8113,
39982                         8113,
39983                         8113,
39984                         8113,
39985                         8113,
39986                         8113,
39987                         8113,
39988                         8113,
39989                         8113,
39990                         8113,
39991                         8113,
39992                         8113,
39993                         8113,
39994                         8113,
39995                         8113,
39996                         8113,
39997                         8113,
39998                         8113,
39999                         8113,
40000                         8113,
40001                         8113,
40002                         8113,
40003                         8113,
40004                         8113,
40005                         8113,
40006                         8113,
40007                         8113,
40008                         8113,
40009                         8113,
40010                         8113,
40011                         8113,
40012                         8113,
40013                         8113,
40014                         8113,
40015                         8113,
40016                         8113,
40017                         8113,
40018                         8113,
40019                         8113,
40020                         8113,
40021                         8113,
40022                         8113,
40023                         8113,
40024                         8113,
40025                         8113,
40026                         8113,
40027                         8113,
40028                         8113,
40029                         8113,
40030                         8113,
40031                         8113,
40032                         8113,
40033                         8113,
40034                         8113,
40035                         8113,
40036                         8113,
40037                         8113,
40038                         8113,
40039                         8113,
40040                         8113,
40041                         8113,
40042                         8113,
40043                         8113,
40044                         8113,
40045                         8113,
40046                         8113,
40047                         8113,
40048                         8113,
40049                         8113,
40050                         8113,
40051                         8113,
40052                         8113,
40053                         8113,
40054                         8113,
40055                         8113,
40056                         8113,
40057                         8113,
40058                         8113,
40059                         8113,
40060                         8113,
40061                         8113,
40062                         8113,
40063                         8113,
40064                         8113,
40065                         8113,
40066                         8113,
40067                         8113,
40068                         8113,
40069                         8113,
40070                         8113,
40071                         8113,
40072                         8113,
40073                         8113,
40074                         8113,
40075                         8113,
40076                         8113,
40077                         8113,
40078                         8113,
40079                         8113,
40080                         8113,
40081                         8113,
40082                         8113,
40083                         8113,
40084                         8113,
40085                         8113,
40086                         8113,
40087                         8113,
40088                         8113,
40089                         8113,
40090                         8113,
40091                         8113,
40092                         8113,
40093                         8113,
40094                         8113,
40095                         8113,
40096                         8113,
40097                         8113,
40098                         8113,
40099                         8113,
40100                         8113,
40101                         8113,
40102                         8113,
40103                         8113,
40104                         8113,
40105                         8113,
40106                         8113,
40107                         8113,
40108                         8113,
40109                         8113,
40110                         8113,
40111                         8113,
40112                         8113,
40113                         8113,
40114                         8113,
40115                         8113,
40116                         8113,
40117                         8113,
40118                         8113,
40119                         8113,
40120                         8113,
40121                         8113,
40122                         8113,
40123                         8113,
40124                         8113,
40125                         8113,
40126                         8113,
40127                         8113,
40128                         8113,
40129                         8113,
40130                         8113,
40131                         8113,
40132                         8113,
40133                         8113,
40134                         8113,
40135                         8113,
40136                         8113,
40137                         8113,
40138                         8113,
40139                         8113,
40140                         8113,
40141                         8113,
40142                         8113,
40143                         8113,
40144                         8113,
40145                         8113,
40146                         8113,
40147                         8113,
40148                         8113,
40149                         8113,
40150                         8113,
40151                         8113,
40152                         8113,
40153                         8113,
40154                         8113,
40155                         8113,
40156                         8113,
40157                         8113,
40158                         8113,
40159                         8113,
40160                         8113,
40161                         8113,
40162                         8113,
40163                         8113,
40164                         8113,
40165                         8113,
40166                         8113,
40167                         8113,
40168                         8113,
40169                         8113,
40170                         8113,
40171                         8113,
40172                         8113,
40173                         8113,
40174                         8113,
40175                         8113,
40176                         8113,
40177                         8113,
40178                         8113,
40179                         8113,
40180                         8113,
40181                         8113,
40182                         8113,
40183                         8113,
40184                         8113,
40185                         8113,
40186                         8113,
40187                         8113,
40188                         8113,
40189                         8113,
40190                         8113,
40191                         8113,
40192                         8113,
40193                         8113,
40194                         8113,
40195                         8113,
40196                         8113,
40197                         8113,
40198                         8113,
40199                         8113,
40200                         8113,
40201                         8113,
40202                         8113,
40203                         8113,
40204                         8113,
40205                         8113,
40206                         8113,
40207                         8113,
40208                         8113,
40209                         8113,
40210                         8113,
40211                         8113,
40212                         8113,
40213                         8113,
40214                         8113,
40215                         8113,
40216                         8113,
40217                         8113,
40218                         8113,
40219                         8113,
40220                         8113,
40221                         8113,
40222                         8113,
40223                         8113,
40224                         8113,
40225                         8113,
40226                         8113,
40227                         8113,
40228                         8113,
40229                         8113,
40230                         8113,
40231                         8113,
40232                         8113,
40233                         8113,
40234                         8113,
40235                         8113,
40236                         8113,
40237                         8113,
40238                         8113,
40239                         8113,
40240                         8113,
40241                         8113,
40242                         8113,
40243                         8113,
40244                         8113,
40245                         8113,
40246                         8113,
40247                         8113,
40248                         8113,
40249                         8113,
40250                         8113,
40251                         8113,
40252                         8113,
40253                         8113,
40254                         8113,
40255                         8113,
40256                         8113,
40257                         8113,
40258                         8113,
40259                         8113,
40260                         8113,
40261                         8113,
40262                         8113,
40263                         8113,
40264                         8113,
40265                         8113,
40266                         8113,
40267                         8113,
40268                         8113,
40269                         8113,
40270                         8113,
40271                         8113,
40272                         8113,
40273                         8113,
40274                         8113,
40275                         8113,
40276                         8113,
40277                         8113,
40278                         8113,
40279                         8113,
40280                         8113,
40281                         8113,
40282                         8113,
40283                         8113,
40284                         8113,
40285                         8113,
40286                         8113,
40287                         8113,
40288                         8113,
40289                         8113,
40290                         8113,
40291                         8113,
40292                         8113,
40293                         8113,
40294                         8113,
40295                         8113,
40296                         8113,
40297                         8113,
40298                         8113,
40299                         8113,
40300                         8113,
40301                         8113,
40302                         8113,
40303                         8113,
40304                         8113,
40305                         8113,
40306                         8113,
40307                         8113,
40308                         8113,
40309                         8113,
40310                         8113,
40311                         8113,
40312                         8113,
40313                         8113,
40314                         8113,
40315                         8113,
40316                         8113,
40317                         8113,
40318                         8113,
40319                         8113,
40320                         8113,
40321                         8113,
40322                         8113,
40323                         8113,
40324                         8113,
40325                         8113,
40326                         8113,
40327                         8113,
40328                         8113,
40329                         8113,
40330                         8113,
40331                         8113,
40332                         8113,
40333                         8113,
40334                         8113,
40335                         8113,
40336                         8113,
40337                         8113,
40338                         8113,
40339                         8113,
40340                         8113,
40341                         8113,
40342                         8113,
40343                         8113,
40344                         8113,
40345                         8113,
40346                         8113,
40347                         8113,
40348                         8113,
40349                         8113,
40350                         8113,
40351                         8113,
40352                         8113,
40353                         8113,
40354                         8113,
40355                         8113,
40356                         8113,
40357                         8113,
40358                         8113,
40359                         8113,
40360                         8113,
40361                         8113,
40362                         8113,
40363                         8113,
40364                         8113,
40365                         8113,
40366                         8113,
40367                         8113,
40368                         8113,
40369                         8113,
40370                         8113,
40371                         8113,
40372                         8113,
40373                         8113,
40374                         8113,
40375                         8113,
40376                         8113,
40377                         8113,
40378                         8113,
40379                         8113,
40380                         8113,
40381                         8113,
40382                         8113,
40383                         8113,
40384                         8113,
40385                         8113,
40386                         8113,
40387                         8113,
40388                         8113,
40389                         8113,
40390                         8113,
40391                         8113,
40392                         8113,
40393                         8113,
40394                         8113,
40395                         8113,
40396                         8113,
40397                         8113,
40398                         8113,
40399                         8113,
40400                         8113,
40401                         8113,
40402                         8113,
40403                         8113,
40404                         8113,
40405                         8113,
40406                         8113,
40407                         8113,
40408                         8113,
40409                         8113,
40410                         8113,
40411                         8113,
40412                         8113,
40413                         8113,
40414                         8113,
40415                         8113,
40416                         8113,
40417                         8113,
40418                         8113,
40419                         8113,
40420                         8113,
40421                         8113,
40422                         8113,
40423                         8113,
40424                         8113,
40425                         8113,
40426                         8113,
40427                         8113,
40428                         8113,
40429                         8113,
40430                         8113,
40431                         8113,
40432                         8113,
40433                         8113,
40434                         8113,
40435                         8113,
40436                         8113,
40437                         8113,
40438                         8113,
40439                         8113,
40440                         8113,
40441                         8113,
40442                         8113,
40443                         8113,
40444                         8113,
40445                         8113,
40446                         8113,
40447                         8113,
40448                         8113,
40449                         8113,
40450                         8113,
40451                         8113,
40452                         8113,
40453                         8113,
40454                         8113,
40455                         8113,
40456                         8113,
40457                         8113,
40458                         8113,
40459                         8113,
40460                         8113,
40461                         8113,
40462                         8113,
40463                         8113,
40464                         8113,
40465                         8113,
40466                         8113,
40467                         8113,
40468                         8113,
40469                         8113,
40470                         8113,
40471                         8113,
40472                         8113,
40473                         8113,
40474                         8113,
40475                         8113,
40476                         8113,
40477                         8113,
40478                         8113,
40479                         8113,
40480                         8113,
40481                         8113,
40482                         8113,
40483                         8113,
40484                         8113,
40485                         8113,
40486                         8113,
40487                         8113,
40488                         8113,
40489                         8113,
40490                         8113,
40491                         8113,
40492                         8113,
40493                         8113,
40494                         8113,
40495                         8113,
40496                         8113,
40497                         8113,
40498                         8113,
40499                         8113,
40500                         8113,
40501                         8113,
40502                         8113,
40503                         8113,
40504                         8113,
40505                         8113,
40506                         8113,
40507                         8113,
40508                         8113,
40509                         8113,
40510                         8113,
40511                         8113,
40512                         8113,
40513                         8113,
40514                         8113,
40515                         8113,
40516                         8113,
40517                         8113,
40518                         8113,
40519                         8113,
40520                         8113,
40521                         8113,
40522                         8113,
40523                         8113,
40524                         8113,
40525                         8113,
40526                         8113,
40527                         8113,
40528                         8113,
40529                         8113,
40530                         8113,
40531                         8113,
40532                         8113,
40533                         8113,
40534                         8113,
40535                         8113,
40536                         8113,
40537                         8113,
40538                         8113,
40539                         8113,
40540                         8113,
40541                         8113,
40542                         8113,
40543                         8113,
40544                         8113,
40545                         8113,
40546                         8113,
40547                         8113,
40548                         8113,
40549                         8113,
40550                         8113,
40551                         8113,
40552                         8113,
40553                         8113,
40554                         8113,
40555                         8113,
40556                         8113,
40557                         8113,
40558                         8113,
40559                         8113,
40560                         8113,
40561                         8113,
40562                         8113,
40563                         8113,
40564                         8113,
40565                         8113,
40566                         8113,
40567                         8113,
40568                         8113,
40569                         8113,
40570                         8113,
40571                         8113,
40572                         8113,
40573                         8113,
40574                         8113,
40575                         8113,
40576                         8113,
40577                         8113,
40578                         8113,
40579                         8113,
40580                         8113,
40581                         8113,
40582                         8113,
40583                         8113,
40584                         8113,
40585                         8113,
40586                         8113,
40587                         8113,
40588                         8113,
40589                         8113,
40590                         8113,
40591                         8113,
40592                         8113,
40593                         8113,
40594                         8113,
40595                         8113,
40596                         8113,
40597                         8113,
40598                         8113,
40599                         8113,
40600                         8113,
40601                         8113,
40602                         8113,
40603                         8113,
40604                         8113,
40605                         8113,
40606                         8113,
40607                         8113,
40608                         8113,
40609                         8113,
40610                         8113,
40611                         8113,
40612                         8113,
40613                         8113,
40614                         8113,
40615                         8113,
40616                         8113,
40617                         8113,
40618                         8113,
40619                         8113,
40620                         8113,
40621                         8113,
40622                         8113,
40623                         8113,
40624                         8113,
40625                         8113,
40626                         8113,
40627                         8113,
40628                         8113,
40629                         8113,
40630                         8113,
40631                         8113,
40632                         8113,
40633                         8113,
40634                         8113,
40635                         8113,
40636                         8113,
40637                         8113,
40638                         8113,
40639                         8113,
40640                         8113,
40641                         8113,
40642                         8113,
40643                         8113,
40644                         8113,
40645                         8113,
40646                         8113,
40647                         8113,
40648                         8113,
40649                         8113,
40650                         8113,
40651                         8113,
40652                         8113,
40653                         8113,
40654                         8113,
40655                         8113,
40656                         8113,
40657                         8113,
40658                         8113,
40659                         8113,
40660                         8113,
40661                         8113,
40662                         8113,
40663                         8113,
40664                         8113,
40665                         8113,
40666                         8113,
40667                         8113,
40668                         8113,
40669                         8113,
40670                         8113,
40671                         8113,
40672                         8113,
40673                         8113,
40674                         8113,
40675                         8113,
40676                         8113,
40677                         8113,
40678                         8113,
40679                         8113,
40680                         8113,
40681                         8113,
40682                         8113,
40683                         8113,
40684                         8113,
40685                         8113,
40686                         8113,
40687                         8113,
40688                         8113,
40689                         8113,
40690                         8113,
40691                         8113,
40692                         8113,
40693                         8113,
40694                         8113,
40695                         8113,
40696                         8113,
40697                         8113,
40698                         8113,
40699                         8113,
40700                         8113,
40701                         8113,
40702                         8113,
40703                         8113,
40704                         8113,
40705                         8113,
40706                         8113,
40707                         8113,
40708                         8113,
40709                         8113,
40710                         8113,
40711                         8113,
40712                         8113,
40713                         8113,
40714                         8113,
40715                         8113,
40716                         8113,
40717                         8113,
40718                         8113,
40719                         8113,
40720                         8113,
40721                         8113,
40722                         8113,
40723                         8113,
40724                         8113,
40725                         8113,
40726                         8113,
40727                         8113,
40728                         8113,
40729                         8113,
40730                         8113,
40731                         8113,
40732                         8113,
40733                         8113,
40734                         8113,
40735                         8113,
40736                         8113,
40737                         8113,
40738                         8113,
40739                         8113,
40740                         8113,
40741                         8113,
40742                         8113,
40743                         8113,
40744                         8113,
40745                         8113,
40746                         8113,
40747                         8113,
40748                         8113,
40749                         8113,
40750                         8113,
40751                         8113,
40752                         8113,
40753                         8113,
40754                         8113,
40755                         8113,
40756                         8113,
40757                         8113,
40758                         8113,
40759                         8113,
40760                         8113,
40761                         8113,
40762                         8113,
40763                         8113,
40764                         8113,
40765                         8113,
40766                         8113,
40767                         8113,
40768                         8113,
40769                         8113,
40770                         8113,
40771                         8113,
40772                         8113,
40773                         8113,
40774                         8113,
40775                         8113,
40776                         8113,
40777                         8113,
40778                         8113,
40779                         8113,
40780                         8113,
40781                         8113,
40782                         8113,
40783                         8113,
40784                         8113,
40785                         8113,
40786                         8113,
40787                         8113,
40788                         8113,
40789                         8113,
40790                         8113,
40791                         8113,
40792                         8113,
40793                         8113,
40794                         8113,
40795                         8113,
40796                         8113,
40797                         8113,
40798                         8113,
40799                         8113,
40800                         8113,
40801                         8113,
40802                         8113,
40803                         8113,
40804                         8113,
40805                         8113,
40806                         8113,
40807                         8113,
40808                         8113,
40809                         8113,
40810                         8113,
40811                         8113,
40812                         8113,
40813                         8113,
40814                         8113,
40815                         8113,
40816                         8113,
40817                         8113,
40818                         8113,
40819                         8113,
40820                         8113,
40821                         8113,
40822                         8113,
40823                         8113,
40824                         8113,
40825                         8113,
40826                         8113,
40827                         8113,
40828                         8113,
40829                         8113,
40830                         8113,
40831                         8113,
40832                         8113,
40833                         8113,
40834                         8113,
40835                         8113,
40836                         8113,
40837                         8113,
40838                         8113,
40839                         8113,
40840                         8113,
40841                         8113,
40842                         8113,
40843                         8113,
40844                         8113,
40845                         8113,
40846                         8113,
40847                         8113,
40848                         8113,
40849                         8113,
40850                         8113,
40851                         8113,
40852                         8113,
40853                         8113,
40854                         8113,
40855                         8113,
40856                         8113,
40857                         8113,
40858                         8113,
40859                         8113,
40860                         8113,
40861                         8113,
40862                         8113,
40863                         8113,
40864                         8113,
40865                         8113,
40866                         8113,
40867                         8113,
40868                         8113,
40869                         8113,
40870                         8113,
40871                         8113,
40872                         8113,
40873                         8113,
40874                         8113,
40875                         8113,
40876                         8113,
40877                         8113,
40878                         8113,
40879                         8113,
40880                         8113,
40881                         8113,
40882                         8113,
40883                         8113,
40884                         8113,
40885                         8113,
40886                         8113,
40887                         8113,
40888                         8113,
40889                         8113,
40890                         8113,
40891                         8113,
40892                         8113,
40893                         8113,
40894                         8113,
40895                         8113,
40896                         8113,
40897                         8113,
40898                         8113,
40899                         8113,
40900                         8113,
40901                         8113,
40902                         8113,
40903                         8113,
40904                         8113,
40905                         8113,
40906                         8113,
40907                         8113,
40908                         8113,
40909                         8113,
40910                         8113,
40911                         8113,
40912                         8113,
40913                         8113,
40914                         8113,
40915                         8113,
40916                         8113,
40917                         8113,
40918                         8113,
40919                         8113,
40920                         8113,
40921                         8113,
40922                         8113,
40923                         8113,
40924                         8113,
40925                         8113,
40926                         8113,
40927                         8113,
40928                         8113,
40929                         8113,
40930                         8113,
40931                         8113,
40932                         8113,
40933                         8113,
40934                         8113,
40935                         8113,
40936                         8113,
40937                         8113,
40938                         8113,
40939                         8113,
40940                         8113,
40941                         8113,
40942                         8113,
40943                         8113,
40944                         8113,
40945                         8113,
40946                         8113,
40947                         8113,
40948                         8113,
40949                         8113,
40950                         8113,
40951                         8113,
40952                         8113,
40953                         8113,
40954                         8113,
40955                         8113,
40956                         8113,
40957                         8113,
40958                         8113,
40959                         8113,
40960                         8113,
40961                         8113,
40962                         8113,
40963                         8113,
40964                         8113,
40965                         8113,
40966                         8113,
40967                         8113,
40968                         8113,
40969                         8113,
40970                         8113,
40971                         8113,
40972                         8113,
40973                         8113,
40974                         8113,
40975                         8113,
40976                         8113,
40977                         8113,
40978                         8113,
40979                         8113,
40980                         8113,
40981                         8113,
40982                         8113,
40983                         8113,
40984                         8113,
40985                         8113,
40986                         8113,
40987                         8113,
40988                         8113,
40989                         8113,
40990                         8113,
40991                         8113,
40992                         8113,
40993                         8113,
40994                         8113,
40995                         8113,
40996                         8113,
40997                         8113,
40998                         8113,
40999                         8113,
41000                         8113,
41001                         8113,
41002                         8113,
41003                         8113,
41004                         8113,
41005                         8113,
41006                         8113,
41007                         8113,
41008                         8113,
41009                         8113,
41010                         8113,
41011                         8113,
41012                         8113,
41013                         8113,
41014                         8113,
41015                         8113,
41016                         8113,
41017                         8113,
41018                         8113,
41019                         8113,
41020                         8113,
41021                         8113,
41022                         8113,
41023                         8113,
41024                         8113,
41025                         8113,
41026                         8113,
41027                         8113,
41028                         8113,
41029                         8113,
41030                         8113,
41031                         8113,
41032                         8113,
41033                         8113,
41034                         8113,
41035                         8113,
41036                         8113,
41037                         8113,
41038                         8113,
41039                         8113,
41040                         8113,
41041                         8113,
41042                         8113,
41043                         8113,
41044                         8113,
41045                         8113,
41046                         8113,
41047                         8113,
41048                         8113,
41049                         8113,
41050                         8113,
41051                         8113,
41052                         8113,
41053                         8113,
41054                         8113,
41055                         8113,
41056                         8113,
41057                         8113,
41058                         8113,
41059                         8113,
41060                         8113,
41061                         8113,
41062                         8113,
41063                         8113,
41064                         8113,
41065                         8113,
41066                         8113,
41067                         8113,
41068                         8113,
41069                         8113,
41070                         8113,
41071                         8113,
41072                         8113,
41073                         8113,
41074                         8113,
41075                         8113,
41076                         8113,
41077                         8113,
41078                         8113,
41079                         8113,
41080                         8113,
41081                         8113,
41082                         8113,
41083                         8113,
41084                         8113,
41085                         8113,
41086                         8113,
41087                         8113,
41088                         8113,
41089                         8113,
41090                         8113,
41091                         8113,
41092                         8113,
41093                         8113,
41094                         8113,
41095                         8113,
41096                         8113,
41097                         8113,
41098                         8113,
41099                         8113,
41100                         8113,
41101                         8113,
41102                         8113,
41103                         8113,
41104                         8113,
41105                         8113,
41106                         8113,
41107                         8113,
41108                         8113,
41109                         8113,
41110                         8113,
41111                         8113,
41112                         8113,
41113                         8113,
41114                         8113,
41115                         8113,
41116                         8113,
41117                         8113,
41118                         8113,
41119                         8113,
41120                         8113,
41121                         8113,
41122                         8113,
41123                         8113,
41124                         8113,
41125                         8113,
41126                         8113,
41127                         8113,
41128                         8113,
41129                         8113,
41130                         8113,
41131                         8113,
41132                         8113,
41133                         8113,
41134                         8113,
41135                         8113,
41136                         8113,
41137                         8113,
41138                         8113,
41139                         8113,
41140                         8113,
41141                         8113,
41142                         8113,
41143                         8113,
41144                         8113,
41145                         8113,
41146                         8113,
41147                         8113,
41148                         8113,
41149                         8113,
41150                         8113,
41151                         8113,
41152                         8113,
41153                         8113,
41154                         8113,
41155                         8113,
41156                         8113,
41157                         8113,
41158                         8113,
41159                         8113,
41160                         8113,
41161                         8113,
41162                         8113,
41163                         8113,
41164                         8113,
41165                         8113,
41166                         8113,
41167                         8113,
41168                         8113,
41169                         8113,
41170                         8113,
41171                         8113,
41172                         8113,
41173                         8113,
41174                         8113,
41175                         8113,
41176                         8113,
41177                         8113,
41178                         8113,
41179                         8113,
41180                         8113,
41181                         8113,
41182                         8113,
41183                         8113,
41184                         8113,
41185                         8113,
41186                         8113,
41187                         8113,
41188                         8113,
41189                         8113,
41190                         8113,
41191                         8113,
41192                         8113,
41193                         8113,
41194                         8113,
41195                         8113,
41196                         8113,
41197                         8113,
41198                         8113,
41199                         8113,
41200                         8113,
41201                         8113,
41202                         8113,
41203                         8113,
41204                         8113,
41205                         8113,
41206                         8113,
41207                         8113,
41208                         8113,
41209                         8113,
41210                         8113,
41211                         8113,
41212                         8113,
41213                         8113,
41214                         8113,
41215                         8113,
41216                         8113,
41217                         8113,
41218                         8113,
41219                         8113,
41220                         8113,
41221                         8113,
41222                         8113,
41223                         8113,
41224                         8113,
41225                         8113,
41226                         8113,
41227                         8113,
41228                         8113,
41229                         8113,
41230                         8113,
41231                         8113,
41232                         8113,
41233                         8113,
41234                         8113,
41235                         8113,
41236                         8113,
41237                         8113,
41238                         8113,
41239                         8113,
41240                         8113,
41241                         8113,
41242                         8113,
41243                         8113,
41244                         8113,
41245                         8113,
41246                         8113,
41247                         8113,
41248                         8113,
41249                         8113,
41250                         8113,
41251                         8113,
41252                         8113,
41253                         8113,
41254                         8113,
41255                         8113,
41256                         8113,
41257                         8113,
41258                         8113,
41259                         8113,
41260                         8113,
41261                         8113,
41262                         8113,
41263                         8113,
41264                         8113,
41265                         8113,
41266                         8113,
41267                         8113,
41268                         8113,
41269                         8113,
41270                         8113,
41271                         8113,
41272                         8113,
41273                         8113,
41274                         8113,
41275                         8113,
41276                         8113,
41277                         8113,
41278                         8113,
41279                         8113,
41280                         8113,
41281                         8113,
41282                         8113,
41283                         8113,
41284                         8113,
41285                         8113,
41286                         8113,
41287                         8113,
41288                         8113,
41289                         8113,
41290                         8113,
41291                         8113,
41292                         8113,
41293                         8113,
41294                         8113,
41295                         8113,
41296                         8113,
41297                         8113,
41298                         8113,
41299                         8113,
41300                         8113,
41301                         8113,
41302                         8113,
41303                         8113,
41304                         8113,
41305                         8113,
41306                         8113,
41307                         8113,
41308                         8113,
41309                         8113,
41310                         8113,
41311                         8113,
41312                         8113,
41313                         8113,
41314                         8113,
41315                         8113,
41316                         8113,
41317                         8113,
41318                         8113,
41319                         8113,
41320                         8113,
41321                         8113,
41322                         8113,
41323                         8113,
41324                         8113,
41325                         8113,
41326                         8113,
41327                         8113,
41328                         8113,
41329                         8113,
41330                         8113,
41331                         8113,
41332                         8113,
41333                         8113,
41334                         8113,
41335                         8113,
41336                         8113,
41337                         8113,
41338                         8113,
41339                         8113,
41340                         8113,
41341                         8113,
41342                         8113,
41343                         8113,
41344                         8113,
41345                         8113,
41346                         8113,
41347                         8113,
41348                         8113,
41349                         8113,
41350                         8113,
41351                         8113,
41352                         8113,
41353                         8113,
41354                         8113,
41355                         8113,
41356                         8113,
41357                         8113,
41358                         8113,
41359                         8113,
41360                         8113,
41361                         8113,
41362                         8113,
41363                         8113,
41364                         8113,
41365                         8113,
41366                         8113,
41367                         8113,
41368                         8113,
41369                         8113,
41370                         8113,
41371                         8113,
41372                         8113,
41373                         8113,
41374                         8113,
41375                         8113,
41376                         8113,
41377                         8113,
41378                         8113,
41379                         8113,
41380                         8113,
41381                         8113,
41382                         8113,
41383                         8113,
41384                         8113,
41385                         8113,
41386                         8113,
41387                         8113,
41388                         8113,
41389                         8113,
41390                         8113,
41391                         8113,
41392                         8113,
41393                         8113,
41394                         8113,
41395                         8113,
41396                         8113,
41397                         8113,
41398                         8113,
41399                         8113,
41400                         8113,
41401                         8113,
41402                         8113,
41403                         8113,
41404                         8113,
41405                         8113,
41406                         8113,
41407                         8113,
41408                         8113,
41409                         8113,
41410                         8113,
41411                         8113,
41412                         8113,
41413                         8113,
41414                         8113,
41415                         8113,
41416                         8113,
41417                         8113,
41418                         8113,
41419                         8113,
41420                         8113,
41421                         8113,
41422                         8113,
41423                         8113,
41424                         8113,
41425                         8113,
41426                         8113,
41427                         8113,
41428                         8113,
41429                         8113,
41430                         8113,
41431                         8113,
41432                         8113,
41433                         8113,
41434                         8113,
41435                         8113,
41436                         8113,
41437                         8113,
41438                         8113,
41439                         8113,
41440                         8113,
41441                         8113,
41442                         8113,
41443                         8113,
41444                         8113,
41445                         8113,
41446                         8113,
41447                         8113,
41448                         8113,
41449                         8113,
41450                         8113,
41451                         8113,
41452                         8113,
41453                         8113,
41454                         8113,
41455                         8113,
41456                         8113,
41457                         8113,
41458                         8113,
41459                         8113,
41460                         8113,
41461                         8113,
41462                         8113,
41463                         8113,
41464                         8113,
41465                         8113,
41466                         8113,
41467                         8113,
41468                         8113,
41469                         8113,
41470                         8113,
41471                         8113,
41472                         8113,
41473                         8113,
41474                         8113,
41475                         8113,
41476                         8113,
41477                         8113,
41478                         8113,
41479                         8113,
41480                         8113,
41481                         8113,
41482                         8113,
41483                         8113,
41484                         8113,
41485                         8113,
41486                         8113,
41487                         8113,
41488                         8113,
41489                         8113,
41490                         8113,
41491                         8113,
41492                         8113,
41493                         8113,
41494                         8113,
41495                         8113,
41496                         8113,
41497                         8113,
41498                         8113,
41499                         8113,
41500                         8113,
41501                         8113,
41502                         8113,
41503                         8113,
41504                         8113,
41505                         8113,
41506                         8113,
41507                         8113,
41508                         8113,
41509                         8113,
41510                         8113,
41511                         8113,
41512                         8113,
41513                         8113,
41514                         8113,
41515                         8113,
41516                         8113,
41517                         8113,
41518                         8113,
41519                         8113,
41520                         8113,
41521                         8113,
41522                         8113,
41523                         8113,
41524                         8113,
41525                         8113,
41526                         8113,
41527                         8113,
41528                         8113,
41529                         8113,
41530                         8113,
41531                         8113,
41532                         8113,
41533                         8113,
41534                         8113,
41535                         8113,
41536                         8113,
41537                         8113,
41538                         8113,
41539                         8113,
41540                         8113,
41541                         8113,
41542                         8113,
41543                         8113,
41544                         8113,
41545                         8113,
41546                         8113,
41547                         8113,
41548                         8113,
41549                         8113,
41550                         8113,
41551                         8113,
41552                         8113,
41553                         8113,
41554                         8113,
41555                         8113,
41556                         8113,
41557                         8113,
41558                         8113,
41559                         8113,
41560                         8113,
41561                         8113,
41562                         8113,
41563                         8113,
41564                         8113,
41565                         8113,
41566                         8113,
41567                         8113,
41568                         8113,
41569                         8113,
41570                         8113,
41571                         8113,
41572                         8113,
41573                         8113,
41574                         8113,
41575                         8113,
41576                         8113,
41577                         8113,
41578                         8113,
41579                         8113,
41580                         8113,
41581                         8113,
41582                         8113,
41583                         8113,
41584                         8113,
41585                         8113,
41586                         8113,
41587                         8113,
41588                         8113,
41589                         8113,
41590                         8113,
41591                         8113,
41592                         8113,
41593                         8113,
41594                         8113,
41595                         8113,
41596                         8113,
41597                         8113,
41598                         8113,
41599                         8113,
41600                         8113,
41601                         8113,
41602                         8113,
41603                         8113,
41604                         8113,
41605                         8113,
41606                         8113,
41607                         8113,
41608                         8113,
41609                         8113,
41610                         8113,
41611                         8113,
41612                         8113,
41613                         8113,
41614                         8113,
41615                         8113,
41616                         8113,
41617                         8113,
41618                         8113,
41619                         8113,
41620                         8113,
41621                         8113,
41622                         8113,
41623                         8113,
41624                         8113,
41625                         8113,
41626                         8113,
41627                         8113,
41628                         8113,
41629                         8113,
41630                         8113,
41631                         8113,
41632                         8113,
41633                         8113,
41634                         8113,
41635                         8113,
41636                         8113,
41637                         8113,
41638                         8113,
41639                         8113,
41640                         8113,
41641                         8113,
41642                         8113,
41643                         8113,
41644                         8113,
41645                         8113,
41646                         8113,
41647                         8113,
41648                         8113,
41649                         8113,
41650                         8113,
41651                         8113,
41652                         8113,
41653                         8113,
41654                         8113,
41655                         8113,
41656                         8113,
41657                         8113,
41658                         8113,
41659                         8113,
41660                         8113,
41661                         8113,
41662                         8113,
41663                         8113,
41664                         8113,
41665                         8113,
41666                         8113,
41667                         8113,
41668                         8113,
41669                         8113,
41670                         8113,
41671                         8113,
41672                         8113,
41673                         8113,
41674                         8113,
41675                         8113,
41676                         8113,
41677                         8113,
41678                         8113,
41679                         8113,
41680                         8113,
41681                         8113,
41682                         8113,
41683                         8113,
41684                         8113,
41685                         8113,
41686                         8113,
41687                         8113,
41688                         8113,
41689                         8113,
41690                         8113,
41691                         8113,
41692                         8113,
41693                         8113,
41694                         8113,
41695                         8113,
41696                         8113,
41697                         8113,
41698                         8113,
41699                         8113,
41700                         8113,
41701                         8113,
41702                         8113,
41703                         8113,
41704                         8113,
41705                         8113,
41706                         8113,
41707                         8113,
41708                         8113,
41709                         8113,
41710                         8113,
41711                         8113,
41712                         8113,
41713                         8113,
41714                         8113,
41715                         8113,
41716                         8113,
41717                         8113,
41718                         8113,
41719                         8113,
41720                         8113,
41721                         8113,
41722                         8113,
41723                         8113,
41724                         8113,
41725                         8113,
41726                         8113,
41727                         8113,
41728                         8113,
41729                         8113,
41730                         8121,
41731                         8129,
41732                         8137,
41733                         8137,
41734                         8137,
41735                         8137,
41736                         8137,
41737                         8137,
41738                         8137,
41739                         8137,
41740                         8137,
41741                         8137,
41742                         8137,
41743                         8137,
41744                         8137,
41745                         8137,
41746                         8145,
41747                         2009,
41748                         2009,
41749                         2009,
41750                         2009,
41751                         2009,
41752                         2009,
41753                         2009,
41754                         2009,
41755                         2009,
41756                         2009,
41757                         2009,
41758                         2009,
41759                         2009,
41760                         2009,
41761                         2009,
41762                         2009,
41763                         2009,
41764                         2009,
41765                         2009,
41766                         2009,
41767                         2009,
41768                         2009,
41769                         2009,
41770                         2009,
41771                         2009,
41772                         2009,
41773                         2009,
41774                         2009,
41775                         2009,
41776                         2009,
41777                         2009,
41778                         2009,
41779                         2009,
41780                         2009,
41781                         2009,
41782                         2009,
41783                         2009,
41784                         2009,
41785                         2009,
41786                         2009,
41787                         2009,
41788                         2009,
41789                         2009,
41790                         2009,
41791                         2009,
41792                         2009,
41793                         2009,
41794                         2009,
41795                         2009,
41796                         2009,
41797                         2009,
41798                         2009,
41799                         2009,
41800                         2009,
41801                         2009,
41802                         2009,
41803                         2009,
41804                         2009,
41805                         2009,
41806                         2009,
41807                         2009,
41808                         2009,
41809                         2009,
41810                         2009,
41811                         2009,
41812                         2009,
41813                         2009,
41814                         2009,
41815                         2009,
41816                         2009,
41817                         2009,
41818                         2009,
41819                         2009,
41820                         2009,
41821                         2009,
41822                         2009,
41823                         2009,
41824                         2009,
41825                         2009,
41826                         2009,
41827                         2009,
41828                         2009,
41829                         2009,
41830                         2009,
41831                         2009,
41832                         2009,
41833                         2009,
41834                         2009,
41835                         2009,
41836                         2009,
41837                         2009,
41838                         2009,
41839                         2009,
41840                         2009,
41841                         2009,
41842                         2009,
41843                         2009,
41844                         2009,
41845                         2009,
41846                         2009,
41847                         2009,
41848                         2009,
41849                         2009,
41850                         2009,
41851                         2009,
41852                         2009,
41853                         2009,
41854                         2009,
41855                         2009,
41856                         2009,
41857                         2009,
41858                         2009,
41859                         67496,
41860                         67496,
41861                         67496,
41862                         21,
41863                         21,
41864                         21,
41865                         21,
41866                         21,
41867                         21,
41868                         21,
41869                         21,
41870                         21,
41871                         17,
41872                         34,
41873                         30,
41874                         30,
41875                         33,
41876                         21,
41877                         21,
41878                         21,
41879                         21,
41880                         21,
41881                         21,
41882                         21,
41883                         21,
41884                         21,
41885                         21,
41886                         21,
41887                         21,
41888                         21,
41889                         21,
41890                         21,
41891                         21,
41892                         21,
41893                         21,
41894                         38,
41895                         6,
41896                         3,
41897                         12,
41898                         9,
41899                         10,
41900                         12,
41901                         3,
41902                         0,
41903                         2,
41904                         12,
41905                         9,
41906                         8,
41907                         16,
41908                         8,
41909                         7,
41910                         11,
41911                         11,
41912                         11,
41913                         11,
41914                         11,
41915                         11,
41916                         11,
41917                         11,
41918                         11,
41919                         11,
41920                         8,
41921                         8,
41922                         12,
41923                         12,
41924                         12,
41925                         6,
41926                         12,
41927                         12,
41928                         12,
41929                         12,
41930                         12,
41931                         12,
41932                         12,
41933                         12,
41934                         12,
41935                         12,
41936                         12,
41937                         12,
41938                         12,
41939                         12,
41940                         12,
41941                         12,
41942                         12,
41943                         12,
41944                         12,
41945                         12,
41946                         12,
41947                         12,
41948                         12,
41949                         12,
41950                         12,
41951                         12,
41952                         12,
41953                         0,
41954                         9,
41955                         2,
41956                         12,
41957                         12,
41958                         12,
41959                         12,
41960                         12,
41961                         12,
41962                         12,
41963                         12,
41964                         12,
41965                         12,
41966                         12,
41967                         12,
41968                         12,
41969                         12,
41970                         12,
41971                         12,
41972                         12,
41973                         12,
41974                         12,
41975                         12,
41976                         12,
41977                         12,
41978                         12,
41979                         12,
41980                         12,
41981                         12,
41982                         12,
41983                         12,
41984                         12,
41985                         0,
41986                         17,
41987                         1,
41988                         12,
41989                         21,
41990                         0,
41991                         0,
41992                         0,
41993                         0,
41994                         0,
41995                         0,
41996                         0,
41997                         0,
41998                         0,
41999                         0,
42000                         0,
42001                         0,
42002                         0,
42003                         0,
42004                         0,
42005                         0,
42006                         0,
42007                         0,
42008                         0,
42009                         0,
42010                         0,
42011                         0,
42012                         0,
42013                         0,
42014                         0,
42015                         0,
42016                         0,
42017                         0,
42018                         0,
42019                         0,
42020                         0,
42021                         0,
42022                         0,
42023                         0,
42024                         0,
42025                         0,
42026                         0,
42027                         0,
42028                         0,
42029                         0,
42030                         0,
42031                         0,
42032                         0,
42033                         0,
42034                         0,
42035                         0,
42036                         0,
42037                         0,
42038                         0,
42039                         0,
42040                         0,
42041                         0,
42042                         0,
42043                         0,
42044                         0,
42045                         0,
42046                         0,
42047                         0,
42048                         0,
42049                         0,
42050                         0,
42051                         0,
42052                         0,
42053                         0,
42054                         39,
42055                         39,
42056                         39,
42057                         39,
42058                         39,
42059                         39,
42060                         39,
42061                         39,
42062                         39,
42063                         39,
42064                         39,
42065                         39,
42066                         39,
42067                         39,
42068                         39,
42069                         39,
42070                         39,
42071                         39,
42072                         39,
42073                         39,
42074                         39,
42075                         39,
42076                         39,
42077                         39,
42078                         39,
42079                         39,
42080                         39,
42081                         39,
42082                         39,
42083                         39,
42084                         39,
42085                         39,
42086                         39,
42087                         39,
42088                         39,
42089                         39,
42090                         39,
42091                         39,
42092                         39,
42093                         39,
42094                         39,
42095                         39,
42096                         39,
42097                         39,
42098                         39,
42099                         39,
42100                         39,
42101                         39,
42102                         39,
42103                         39,
42104                         39,
42105                         39,
42106                         39,
42107                         39,
42108                         39,
42109                         39,
42110                         39,
42111                         39,
42112                         39,
42113                         39,
42114                         39,
42115                         39,
42116                         39,
42117                         39,
42118                         21,
42119                         21,
42120                         21,
42121                         21,
42122                         21,
42123                         35,
42124                         21,
42125                         21,
42126                         21,
42127                         21,
42128                         21,
42129                         21,
42130                         21,
42131                         21,
42132                         21,
42133                         21,
42134                         21,
42135                         21,
42136                         21,
42137                         21,
42138                         21,
42139                         21,
42140                         21,
42141                         21,
42142                         21,
42143                         21,
42144                         21,
42145                         21,
42146                         21,
42147                         21,
42148                         21,
42149                         21,
42150                         4,
42151                         0,
42152                         10,
42153                         9,
42154                         9,
42155                         9,
42156                         12,
42157                         29,
42158                         29,
42159                         12,
42160                         29,
42161                         3,
42162                         12,
42163                         17,
42164                         12,
42165                         12,
42166                         10,
42167                         9,
42168                         29,
42169                         29,
42170                         18,
42171                         12,
42172                         29,
42173                         29,
42174                         29,
42175                         29,
42176                         29,
42177                         3,
42178                         29,
42179                         29,
42180                         29,
42181                         0,
42182                         12,
42183                         12,
42184                         12,
42185                         12,
42186                         12,
42187                         12,
42188                         12,
42189                         12,
42190                         12,
42191                         12,
42192                         12,
42193                         12,
42194                         12,
42195                         12,
42196                         12,
42197                         12,
42198                         12,
42199                         12,
42200                         12,
42201                         12,
42202                         12,
42203                         12,
42204                         12,
42205                         29,
42206                         12,
42207                         12,
42208                         12,
42209                         12,
42210                         12,
42211                         12,
42212                         12,
42213                         12,
42214                         12,
42215                         12,
42216                         12,
42217                         12,
42218                         12,
42219                         12,
42220                         12,
42221                         12,
42222                         12,
42223                         12,
42224                         12,
42225                         12,
42226                         12,
42227                         12,
42228                         12,
42229                         12,
42230                         12,
42231                         12,
42232                         12,
42233                         12,
42234                         12,
42235                         12,
42236                         12,
42237                         29,
42238                         12,
42239                         12,
42240                         12,
42241                         12,
42242                         12,
42243                         12,
42244                         12,
42245                         12,
42246                         12,
42247                         12,
42248                         12,
42249                         12,
42250                         12,
42251                         12,
42252                         12,
42253                         12,
42254                         12,
42255                         12,
42256                         12,
42257                         12,
42258                         12,
42259                         12,
42260                         12,
42261                         12,
42262                         12,
42263                         12,
42264                         12,
42265                         12,
42266                         12,
42267                         12,
42268                         12,
42269                         12,
42270                         12,
42271                         12,
42272                         12,
42273                         12,
42274                         12,
42275                         12,
42276                         12,
42277                         12,
42278                         12,
42279                         12,
42280                         12,
42281                         12,
42282                         12,
42283                         12,
42284                         12,
42285                         12,
42286                         12,
42287                         12,
42288                         12,
42289                         12,
42290                         12,
42291                         12,
42292                         12,
42293                         12,
42294                         12,
42295                         12,
42296                         12,
42297                         12,
42298                         12,
42299                         12,
42300                         12,
42301                         12,
42302                         12,
42303                         12,
42304                         12,
42305                         12,
42306                         12,
42307                         12,
42308                         12,
42309                         12,
42310                         12,
42311                         12,
42312                         12,
42313                         12,
42314                         12,
42315                         12,
42316                         12,
42317                         12,
42318                         12,
42319                         12,
42320                         12,
42321                         12,
42322                         12,
42323                         12,
42324                         12,
42325                         12,
42326                         12,
42327                         12,
42328                         12,
42329                         12,
42330                         12,
42331                         12,
42332                         12,
42333                         12,
42334                         12,
42335                         12,
42336                         12,
42337                         12,
42338                         12,
42339                         12,
42340                         12,
42341                         12,
42342                         12,
42343                         12,
42344                         12,
42345                         12,
42346                         12,
42347                         12,
42348                         12,
42349                         12,
42350                         12,
42351                         12,
42352                         12,
42353                         12,
42354                         12,
42355                         12,
42356                         12,
42357                         12,
42358                         12,
42359                         12,
42360                         12,
42361                         12,
42362                         12,
42363                         12,
42364                         12,
42365                         12,
42366                         12,
42367                         12,
42368                         12,
42369                         12,
42370                         12,
42371                         12,
42372                         12,
42373                         12,
42374                         12,
42375                         12,
42376                         12,
42377                         12,
42378                         12,
42379                         12,
42380                         12,
42381                         12,
42382                         12,
42383                         12,
42384                         12,
42385                         12,
42386                         12,
42387                         12,
42388                         12,
42389                         12,
42390                         12,
42391                         12,
42392                         12,
42393                         12,
42394                         12,
42395                         12,
42396                         12,
42397                         12,
42398                         12,
42399                         12,
42400                         12,
42401                         12,
42402                         12,
42403                         12,
42404                         12,
42405                         12,
42406                         12,
42407                         12,
42408                         12,
42409                         12,
42410                         12,
42411                         12,
42412                         12,
42413                         12,
42414                         12,
42415                         12,
42416                         12,
42417                         12,
42418                         12,
42419                         12,
42420                         12,
42421                         12,
42422                         12,
42423                         12,
42424                         12,
42425                         12,
42426                         12,
42427                         12,
42428                         12,
42429                         12,
42430                         12,
42431                         12,
42432                         12,
42433                         12,
42434                         12,
42435                         12,
42436                         12,
42437                         12,
42438                         12,
42439                         12,
42440                         12,
42441                         12,
42442                         12,
42443                         12,
42444                         12,
42445                         12,
42446                         12,
42447                         12,
42448                         12,
42449                         12,
42450                         12,
42451                         12,
42452                         12,
42453                         12,
42454                         12,
42455                         12,
42456                         12,
42457                         12,
42458                         12,
42459                         12,
42460                         12,
42461                         12,
42462                         12,
42463                         12,
42464                         12,
42465                         12,
42466                         12,
42467                         12,
42468                         12,
42469                         12,
42470                         12,
42471                         12,
42472                         12,
42473                         12,
42474                         12,
42475                         12,
42476                         12,
42477                         12,
42478                         12,
42479                         12,
42480                         12,
42481                         12,
42482                         12,
42483                         12,
42484                         12,
42485                         12,
42486                         12,
42487                         12,
42488                         12,
42489                         12,
42490                         12,
42491                         12,
42492                         12,
42493                         12,
42494                         12,
42495                         12,
42496                         12,
42497                         12,
42498                         12,
42499                         12,
42500                         12,
42501                         12,
42502                         12,
42503                         12,
42504                         12,
42505                         12,
42506                         12,
42507                         12,
42508                         12,
42509                         12,
42510                         12,
42511                         12,
42512                         12,
42513                         12,
42514                         12,
42515                         12,
42516                         12,
42517                         12,
42518                         12,
42519                         12,
42520                         12,
42521                         12,
42522                         12,
42523                         12,
42524                         12,
42525                         12,
42526                         12,
42527                         12,
42528                         12,
42529                         12,
42530                         12,
42531                         12,
42532                         12,
42533                         12,
42534                         12,
42535                         12,
42536                         12,
42537                         12,
42538                         12,
42539                         12,
42540                         12,
42541                         12,
42542                         12,
42543                         12,
42544                         12,
42545                         12,
42546                         12,
42547                         12,
42548                         12,
42549                         12,
42550                         12,
42551                         12,
42552                         12,
42553                         12,
42554                         12,
42555                         12,
42556                         12,
42557                         12,
42558                         12,
42559                         12,
42560                         12,
42561                         12,
42562                         12,
42563                         12,
42564                         12,
42565                         12,
42566                         12,
42567                         12,
42568                         12,
42569                         12,
42570                         12,
42571                         12,
42572                         12,
42573                         12,
42574                         12,
42575                         12,
42576                         12,
42577                         12,
42578                         12,
42579                         12,
42580                         12,
42581                         12,
42582                         12,
42583                         12,
42584                         12,
42585                         12,
42586                         12,
42587                         12,
42588                         12,
42589                         12,
42590                         12,
42591                         12,
42592                         12,
42593                         12,
42594                         12,
42595                         12,
42596                         12,
42597                         12,
42598                         12,
42599                         12,
42600                         12,
42601                         12,
42602                         12,
42603                         12,
42604                         12,
42605                         12,
42606                         12,
42607                         12,
42608                         12,
42609                         12,
42610                         12,
42611                         12,
42612                         12,
42613                         12,
42614                         12,
42615                         12,
42616                         12,
42617                         12,
42618                         12,
42619                         12,
42620                         12,
42621                         12,
42622                         12,
42623                         12,
42624                         12,
42625                         12,
42626                         12,
42627                         12,
42628                         12,
42629                         12,
42630                         12,
42631                         12,
42632                         12,
42633                         12,
42634                         12,
42635                         12,
42636                         12,
42637                         12,
42638                         12,
42639                         12,
42640                         12,
42641                         12,
42642                         12,
42643                         12,
42644                         12,
42645                         12,
42646                         12,
42647                         12,
42648                         12,
42649                         12,
42650                         12,
42651                         12,
42652                         12,
42653                         12,
42654                         12,
42655                         12,
42656                         12,
42657                         12,
42658                         12,
42659                         12,
42660                         12,
42661                         12,
42662                         12,
42663                         12,
42664                         12,
42665                         12,
42666                         12,
42667                         12,
42668                         12,
42669                         12,
42670                         12,
42671                         12,
42672                         12,
42673                         12,
42674                         12,
42675                         12,
42676                         12,
42677                         12,
42678                         12,
42679                         12,
42680                         12,
42681                         12,
42682                         12,
42683                         12,
42684                         12,
42685                         12,
42686                         12,
42687                         12,
42688                         12,
42689                         12,
42690                         12,
42691                         12,
42692                         12,
42693                         12,
42694                         12,
42695                         12,
42696                         12,
42697                         12,
42698                         12,
42699                         12,
42700                         12,
42701                         29,
42702                         18,
42703                         29,
42704                         29,
42705                         29,
42706                         18,
42707                         29,
42708                         12,
42709                         12,
42710                         29,
42711                         12,
42712                         12,
42713                         12,
42714                         12,
42715                         12,
42716                         12,
42717                         12,
42718                         29,
42719                         29,
42720                         29,
42721                         29,
42722                         12,
42723                         29,
42724                         12,
42725                         18,
42726                         12,
42727                         12,
42728                         12,
42729                         12,
42730                         12,
42731                         12,
42732                         12,
42733                         12,
42734                         12,
42735                         12,
42736                         12,
42737                         12,
42738                         12,
42739                         12,
42740                         12,
42741                         12,
42742                         12,
42743                         12,
42744                         12,
42745                         12,
42746                         12,
42747                         12,
42748                         12,
42749                         12,
42750                         12,
42751                         12,
42752                         12,
42753                         12,
42754                         12,
42755                         12,
42756                         12,
42757                         12,
42758                         21,
42759                         21,
42760                         21,
42761                         21,
42762                         21,
42763                         21,
42764                         21,
42765                         21,
42766                         21,
42767                         21,
42768                         21,
42769                         21,
42770                         21,
42771                         21,
42772                         21,
42773                         21,
42774                         21,
42775                         21,
42776                         21,
42777                         21,
42778                         21,
42779                         21,
42780                         21,
42781                         21,
42782                         21,
42783                         21,
42784                         21,
42785                         21,
42786                         21,
42787                         21,
42788                         21,
42789                         21,
42790                         21,
42791                         21,
42792                         21,
42793                         21,
42794                         21,
42795                         21,
42796                         21,
42797                         21,
42798                         21,
42799                         21,
42800                         21,
42801                         21,
42802                         21,
42803                         21,
42804                         21,
42805                         21,
42806                         21,
42807                         21,
42808                         21,
42809                         21,
42810                         21,
42811                         21,
42812                         21,
42813                         21,
42814                         21,
42815                         21,
42816                         21,
42817                         21,
42818                         21,
42819                         21,
42820                         21,
42821                         21,
42822                         21,
42823                         21,
42824                         21,
42825                         21,
42826                         21,
42827                         21,
42828                         21,
42829                         21,
42830                         21,
42831                         21,
42832                         21,
42833                         21,
42834                         21,
42835                         21,
42836                         21,
42837                         4,
42838                         21,
42839                         21,
42840                         21,
42841                         21,
42842                         21,
42843                         21,
42844                         21,
42845                         21,
42846                         21,
42847                         21,
42848                         21,
42849                         21,
42850                         4,
42851                         4,
42852                         4,
42853                         4,
42854                         4,
42855                         4,
42856                         4,
42857                         21,
42858                         21,
42859                         21,
42860                         21,
42861                         21,
42862                         21,
42863                         21,
42864                         21,
42865                         21,
42866                         21,
42867                         21,
42868                         21,
42869                         21,
42870                         12,
42871                         12,
42872                         12,
42873                         12,
42874                         12,
42875                         12,
42876                         12,
42877                         12,
42878                         12,
42879                         12,
42880                         12,
42881                         12,
42882                         12,
42883                         12,
42884                         8,
42885                         39,
42886                         39,
42887                         39,
42888                         39,
42889                         39,
42890                         12,
42891                         12,
42892                         12,
42893                         12,
42894                         12,
42895                         12,
42896                         12,
42897                         12,
42898                         12,
42899                         12,
42900                         12,
42901                         12,
42902                         12,
42903                         12,
42904                         12,
42905                         12,
42906                         12,
42907                         12,
42908                         12,
42909                         12,
42910                         12,
42911                         12,
42912                         12,
42913                         12,
42914                         12,
42915                         12,
42916                         12,
42917                         12,
42918                         12,
42919                         12,
42920                         12,
42921                         12,
42922                         12,
42923                         12,
42924                         12,
42925                         12,
42926                         12,
42927                         12,
42928                         12,
42929                         12,
42930                         12,
42931                         12,
42932                         12,
42933                         12,
42934                         12,
42935                         12,
42936                         12,
42937                         12,
42938                         12,
42939                         12,
42940                         12,
42941                         12,
42942                         12,
42943                         12,
42944                         12,
42945                         12,
42946                         12,
42947                         12,
42948                         12,
42949                         12,
42950                         12,
42951                         12,
42952                         12,
42953                         12,
42954                         12,
42955                         12,
42956                         12,
42957                         12,
42958                         12,
42959                         12,
42960                         12,
42961                         12,
42962                         12,
42963                         12,
42964                         12,
42965                         12,
42966                         12,
42967                         12,
42968                         12,
42969                         12,
42970                         12,
42971                         12,
42972                         12,
42973                         12,
42974                         12,
42975                         12,
42976                         12,
42977                         12,
42978                         12,
42979                         12,
42980                         12,
42981                         12,
42982                         12,
42983                         12,
42984                         12,
42985                         12,
42986                         12,
42987                         12,
42988                         12,
42989                         12,
42990                         12,
42991                         12,
42992                         12,
42993                         12,
42994                         12,
42995                         12,
42996                         12,
42997                         12,
42998                         12,
42999                         12,
43000                         12,
43001                         12,
43002                         12,
43003                         12,
43004                         12,
43005                         12,
43006                         12,
43007                         12,
43008                         12,
43009                         12,
43010                         12,
43011                         12,
43012                         12,
43013                         12,
43014                         12,
43015                         12,
43016                         12,
43017                         12,
43018                         12,
43019                         12,
43020                         12,
43021                         12,
43022                         12,
43023                         12,
43024                         12,
43025                         12,
43026                         12,
43027                         12,
43028                         12,
43029                         12,
43030                         12,
43031                         12,
43032                         12,
43033                         12,
43034                         12,
43035                         12,
43036                         12,
43037                         12,
43038                         12,
43039                         12,
43040                         12,
43041                         12,
43042                         12,
43043                         12,
43044                         12,
43045                         12,
43046                         12,
43047                         12,
43048                         12,
43049                         12,
43050                         12,
43051                         12,
43052                         12,
43053                         12,
43054                         12,
43055                         12,
43056                         12,
43057                         12,
43058                         12,
43059                         12,
43060                         12,
43061                         12,
43062                         12,
43063                         12,
43064                         12,
43065                         12,
43066                         12,
43067                         12,
43068                         12,
43069                         12,
43070                         12,
43071                         12,
43072                         12,
43073                         12,
43074                         12,
43075                         12,
43076                         12,
43077                         12,
43078                         12,
43079                         12,
43080                         12,
43081                         12,
43082                         12,
43083                         12,
43084                         12,
43085                         12,
43086                         12,
43087                         12,
43088                         12,
43089                         12,
43090                         12,
43091                         12,
43092                         12,
43093                         12,
43094                         12,
43095                         12,
43096                         12,
43097                         12,
43098                         12,
43099                         12,
43100                         12,
43101                         12,
43102                         12,
43103                         12,
43104                         12,
43105                         12,
43106                         12,
43107                         12,
43108                         12,
43109                         12,
43110                         12,
43111                         12,
43112                         12,
43113                         12,
43114                         12,
43115                         12,
43116                         12,
43117                         12,
43118                         12,
43119                         12,
43120                         12,
43121                         12,
43122                         12,
43123                         12,
43124                         12,
43125                         12,
43126                         12,
43127                         12,
43128                         12,
43129                         12,
43130                         12,
43131                         12,
43132                         12,
43133                         12,
43134                         12,
43135                         12,
43136                         12,
43137                         12,
43138                         12,
43139                         12,
43140                         12,
43141                         12,
43142                         12,
43143                         12,
43144                         12,
43145                         21,
43146                         21,
43147                         21,
43148                         21,
43149                         21,
43150                         21,
43151                         21,
43152                         12,
43153                         12,
43154                         12,
43155                         12,
43156                         12,
43157                         12,
43158                         12,
43159                         12,
43160                         12,
43161                         12,
43162                         12,
43163                         12,
43164                         12,
43165                         12,
43166                         12,
43167                         12,
43168                         12,
43169                         12,
43170                         12,
43171                         12,
43172                         12,
43173                         12,
43174                         12,
43175                         12,
43176                         12,
43177                         12,
43178                         12,
43179                         12,
43180                         12,
43181                         12,
43182                         12,
43183                         12,
43184                         12,
43185                         12,
43186                         12,
43187                         12,
43188                         12,
43189                         12,
43190                         12,
43191                         12,
43192                         12,
43193                         12,
43194                         12,
43195                         12,
43196                         12,
43197                         12,
43198                         12,
43199                         12,
43200                         12,
43201                         12,
43202                         12,
43203                         12,
43204                         12,
43205                         12,
43206                         12,
43207                         12,
43208                         12,
43209                         12,
43210                         12,
43211                         12,
43212                         12,
43213                         12,
43214                         12,
43215                         12,
43216                         12,
43217                         12,
43218                         12,
43219                         12,
43220                         12,
43221                         12,
43222                         12,
43223                         12,
43224                         12,
43225                         12,
43226                         12,
43227                         12,
43228                         12,
43229                         12,
43230                         12,
43231                         12,
43232                         12,
43233                         12,
43234                         12,
43235                         12,
43236                         12,
43237                         12,
43238                         12,
43239                         12,
43240                         12,
43241                         12,
43242                         12,
43243                         12,
43244                         12,
43245                         12,
43246                         12,
43247                         12,
43248                         12,
43249                         12,
43250                         12,
43251                         12,
43252                         12,
43253                         12,
43254                         12,
43255                         12,
43256                         12,
43257                         12,
43258                         12,
43259                         12,
43260                         12,
43261                         12,
43262                         12,
43263                         12,
43264                         12,
43265                         12,
43266                         12,
43267                         12,
43268                         12,
43269                         12,
43270                         12,
43271                         12,
43272                         12,
43273                         12,
43274                         12,
43275                         12,
43276                         12,
43277                         12,
43278                         12,
43279                         12,
43280                         12,
43281                         12,
43282                         12,
43283                         12,
43284                         12,
43285                         12,
43286                         12,
43287                         12,
43288                         12,
43289                         12,
43290                         12,
43291                         12,
43292                         12,
43293                         12,
43294                         12,
43295                         12,
43296                         12,
43297                         12,
43298                         12,
43299                         12,
43300                         12,
43301                         12,
43302                         12,
43303                         12,
43304                         12,
43305                         12,
43306                         12,
43307                         12,
43308                         12,
43309                         12,
43310                         12,
43311                         12,
43312                         12,
43313                         12,
43314                         12,
43315                         12,
43316                         12,
43317                         12,
43318                         12,
43319                         12,
43320                         12,
43321                         12,
43322                         12,
43323                         12,
43324                         12,
43325                         12,
43326                         12,
43327                         12,
43328                         12,
43329                         12,
43330                         12,
43331                         12,
43332                         12,
43333                         12,
43334                         12,
43335                         12,
43336                         12,
43337                         12,
43338                         12,
43339                         12,
43340                         12,
43341                         12,
43342                         12,
43343                         12,
43344                         12,
43345                         12,
43346                         12,
43347                         12,
43348                         12,
43349                         12,
43350                         12,
43351                         12,
43352                         12,
43353                         12,
43354                         12,
43355                         12,
43356                         12,
43357                         12,
43358                         12,
43359                         12,
43360                         12,
43361                         12,
43362                         12,
43363                         12,
43364                         12,
43365                         12,
43366                         12,
43367                         12,
43368                         12,
43369                         12,
43370                         12,
43371                         12,
43372                         12,
43373                         12,
43374                         12,
43375                         12,
43376                         12,
43377                         12,
43378                         12,
43379                         12,
43380                         12,
43381                         12,
43382                         12,
43383                         12,
43384                         12,
43385                         12,
43386                         12,
43387                         12,
43388                         12,
43389                         12,
43390                         12,
43391                         12,
43392                         12,
43393                         12,
43394                         12,
43395                         12,
43396                         12,
43397                         12,
43398                         12,
43399                         12,
43400                         12,
43401                         12,
43402                         12,
43403                         12,
43404                         12,
43405                         12,
43406                         39,
43407                         8,
43408                         17,
43409                         39,
43410                         39,
43411                         39,
43412                         39,
43413                         9,
43414                         39,
43415                         21,
43416                         21,
43417                         21,
43418                         21,
43419                         21,
43420                         21,
43421                         21,
43422                         21,
43423                         21,
43424                         21,
43425                         21,
43426                         21,
43427                         21,
43428                         21,
43429                         21,
43430                         21,
43431                         21,
43432                         21,
43433                         21,
43434                         21,
43435                         21,
43436                         21,
43437                         21,
43438                         21,
43439                         21,
43440                         21,
43441                         21,
43442                         21,
43443                         21,
43444                         21,
43445                         21,
43446                         21,
43447                         21,
43448                         21,
43449                         21,
43450                         21,
43451                         21,
43452                         21,
43453                         21,
43454                         21,
43455                         21,
43456                         21,
43457                         21,
43458                         21,
43459                         21,
43460                         17,
43461                         21,
43462                         12,
43463                         21,
43464                         21,
43465                         12,
43466                         21,
43467                         21,
43468                         6,
43469                         21,
43470                         39,
43471                         39,
43472                         39,
43473                         39,
43474                         39,
43475                         39,
43476                         39,
43477                         39,
43478                         13,
43479                         13,
43480                         13,
43481                         13,
43482                         13,
43483                         13,
43484                         13,
43485                         13,
43486                         13,
43487                         13,
43488                         13,
43489                         13,
43490                         13,
43491                         13,
43492                         13,
43493                         13,
43494                         13,
43495                         13,
43496                         13,
43497                         13,
43498                         13,
43499                         13,
43500                         13,
43501                         13,
43502                         13,
43503                         13,
43504                         13,
43505                         13,
43506                         13,
43507                         13,
43508                         13,
43509                         13,
43510                         13,
43511                         13,
43512                         13,
43513                         12,
43514                         12,
43515                         12,
43516                         12,
43517                         12,
43518                         12,
43519                         12,
43520                         12,
43521                         12,
43522                         12,
43523                         12,
43524                         12,
43525                         12,
43526                         12,
43527                         12,
43528                         12,
43529                         12,
43530                         12,
43531                         12,
43532                         12,
43533                         12,
43534                         12,
43535                         10,
43536                         10,
43537                         10,
43538                         8,
43539                         8,
43540                         12,
43541                         12,
43542                         21,
43543                         21,
43544                         21,
43545                         21,
43546                         21,
43547                         21,
43548                         21,
43549                         21,
43550                         21,
43551                         21,
43552                         21,
43553                         6,
43554                         6,
43555                         6,
43556                         6,
43557                         6,
43558                         12,
43559                         12,
43560                         12,
43561                         12,
43562                         12,
43563                         12,
43564                         12,
43565                         12,
43566                         12,
43567                         12,
43568                         12,
43569                         12,
43570                         12,
43571                         12,
43572                         12,
43573                         12,
43574                         12,
43575                         12,
43576                         12,
43577                         12,
43578                         12,
43579                         12,
43580                         12,
43581                         12,
43582                         12,
43583                         12,
43584                         12,
43585                         12,
43586                         12,
43587                         12,
43588                         12,
43589                         12,
43590                         12,
43591                         12,
43592                         12,
43593                         12,
43594                         12,
43595                         12,
43596                         12,
43597                         12,
43598                         12,
43599                         12,
43600                         12,
43601                         21,
43602                         21,
43603                         21,
43604                         21,
43605                         21,
43606                         21,
43607                         21,
43608                         21,
43609                         21,
43610                         21,
43611                         21,
43612                         21,
43613                         21,
43614                         21,
43615                         21,
43616                         21,
43617                         21,
43618                         21,
43619                         21,
43620                         21,
43621                         21,
43622                         11,
43623                         11,
43624                         11,
43625                         11,
43626                         11,
43627                         11,
43628                         11,
43629                         11,
43630                         11,
43631                         11,
43632                         10,
43633                         11,
43634                         11,
43635                         12,
43636                         12,
43637                         12,
43638                         21,
43639                         12,
43640                         12,
43641                         12,
43642                         12,
43643                         12,
43644                         12,
43645                         12,
43646                         12,
43647                         12,
43648                         12,
43649                         12,
43650                         12,
43651                         12,
43652                         12,
43653                         12,
43654                         12,
43655                         12,
43656                         12,
43657                         12,
43658                         12,
43659                         12,
43660                         12,
43661                         12,
43662                         12,
43663                         12,
43664                         12,
43665                         12,
43666                         12,
43667                         12,
43668                         12,
43669                         12,
43670                         12,
43671                         12,
43672                         12,
43673                         12,
43674                         12,
43675                         12,
43676                         12,
43677                         12,
43678                         12,
43679                         12,
43680                         12,
43681                         12,
43682                         12,
43683                         12,
43684                         12,
43685                         12,
43686                         12,
43687                         12,
43688                         12,
43689                         12,
43690                         12,
43691                         12,
43692                         12,
43693                         12,
43694                         12,
43695                         12,
43696                         12,
43697                         12,
43698                         12,
43699                         12,
43700                         12,
43701                         12,
43702                         12,
43703                         12,
43704                         12,
43705                         12,
43706                         12,
43707                         12,
43708                         12,
43709                         12,
43710                         12,
43711                         12,
43712                         12,
43713                         12,
43714                         12,
43715                         12,
43716                         12,
43717                         12,
43718                         12,
43719                         12,
43720                         12,
43721                         12,
43722                         12,
43723                         12,
43724                         12,
43725                         12,
43726                         12,
43727                         12,
43728                         12,
43729                         12,
43730                         12,
43731                         12,
43732                         12,
43733                         12,
43734                         12,
43735                         12,
43736                         12,
43737                         12,
43738                         6,
43739                         12,
43740                         21,
43741                         21,
43742                         21,
43743                         21,
43744                         21,
43745                         21,
43746                         21,
43747                         12,
43748                         12,
43749                         21,
43750                         21,
43751                         21,
43752                         21,
43753                         21,
43754                         21,
43755                         12,
43756                         12,
43757                         21,
43758                         21,
43759                         12,
43760                         21,
43761                         21,
43762                         21,
43763                         21,
43764                         12,
43765                         12,
43766                         11,
43767                         11,
43768                         11,
43769                         11,
43770                         11,
43771                         11,
43772                         11,
43773                         11,
43774                         11,
43775                         11,
43776                         12,
43777                         12,
43778                         12,
43779                         12,
43780                         12,
43781                         12,
43782                         12,
43783                         12,
43784                         12,
43785                         12,
43786                         12,
43787                         12,
43788                         12,
43789                         12,
43790                         12,
43791                         12,
43792                         12,
43793                         12,
43794                         12,
43795                         12,
43796                         12,
43797                         12,
43798                         12,
43799                         21,
43800                         12,
43801                         12,
43802                         12,
43803                         12,
43804                         12,
43805                         12,
43806                         12,
43807                         12,
43808                         12,
43809                         12,
43810                         12,
43811                         12,
43812                         12,
43813                         12,
43814                         12,
43815                         12,
43816                         12,
43817                         12,
43818                         12,
43819                         12,
43820                         12,
43821                         12,
43822                         12,
43823                         12,
43824                         12,
43825                         12,
43826                         12,
43827                         12,
43828                         12,
43829                         12,
43830                         21,
43831                         21,
43832                         21,
43833                         21,
43834                         21,
43835                         21,
43836                         21,
43837                         21,
43838                         21,
43839                         21,
43840                         21,
43841                         21,
43842                         21,
43843                         21,
43844                         21,
43845                         21,
43846                         21,
43847                         21,
43848                         21,
43849                         21,
43850                         21,
43851                         21,
43852                         21,
43853                         21,
43854                         21,
43855                         21,
43856                         21,
43857                         39,
43858                         39,
43859                         12,
43860                         12,
43861                         12,
43862                         12,
43863                         12,
43864                         12,
43865                         12,
43866                         12,
43867                         12,
43868                         12,
43869                         12,
43870                         12,
43871                         12,
43872                         12,
43873                         12,
43874                         12,
43875                         12,
43876                         12,
43877                         12,
43878                         12,
43879                         12,
43880                         12,
43881                         12,
43882                         12,
43883                         12,
43884                         12,
43885                         12,
43886                         12,
43887                         12,
43888                         12,
43889                         12,
43890                         12,
43891                         12,
43892                         12,
43893                         12,
43894                         12,
43895                         12,
43896                         12,
43897                         12,
43898                         12,
43899                         12,
43900                         12,
43901                         12,
43902                         12,
43903                         12,
43904                         12,
43905                         12,
43906                         12,
43907                         12,
43908                         12,
43909                         12,
43910                         12,
43911                         12,
43912                         12,
43913                         12,
43914                         12,
43915                         12,
43916                         12,
43917                         12,
43918                         12,
43919                         12,
43920                         12,
43921                         12,
43922                         12,
43923                         12,
43924                         12,
43925                         12,
43926                         12,
43927                         12,
43928                         12,
43929                         12,
43930                         12,
43931                         12,
43932                         12,
43933                         12,
43934                         12,
43935                         12,
43936                         12,
43937                         12,
43938                         12,
43939                         12,
43940                         12,
43941                         12,
43942                         12,
43943                         12,
43944                         12,
43945                         12,
43946                         12,
43947                         12,
43948                         21,
43949                         21,
43950                         21,
43951                         21,
43952                         21,
43953                         21,
43954                         21,
43955                         21,
43956                         21,
43957                         21,
43958                         21,
43959                         12,
43960                         39,
43961                         39,
43962                         39,
43963                         39,
43964                         39,
43965                         39,
43966                         39,
43967                         39,
43968                         39,
43969                         39,
43970                         39,
43971                         39,
43972                         39,
43973                         39,
43974                         11,
43975                         11,
43976                         11,
43977                         11,
43978                         11,
43979                         11,
43980                         11,
43981                         11,
43982                         11,
43983                         11,
43984                         12,
43985                         12,
43986                         12,
43987                         12,
43988                         12,
43989                         12,
43990                         12,
43991                         12,
43992                         12,
43993                         12,
43994                         12,
43995                         12,
43996                         12,
43997                         12,
43998                         12,
43999                         12,
44000                         12,
44001                         12,
44002                         12,
44003                         12,
44004                         12,
44005                         12,
44006                         12,
44007                         12,
44008                         12,
44009                         12,
44010                         12,
44011                         12,
44012                         12,
44013                         12,
44014                         12,
44015                         12,
44016                         12,
44017                         21,
44018                         21,
44019                         21,
44020                         21,
44021                         21,
44022                         21,
44023                         21,
44024                         21,
44025                         21,
44026                         12,
44027                         12,
44028                         12,
44029                         12,
44030                         8,
44031                         6,
44032                         12,
44033                         12,
44034                         12,
44035                         12,
44036                         12,
44037                         12,
44038                         12,
44039                         12,
44040                         12,
44041                         12,
44042                         12,
44043                         12,
44044                         12,
44045                         12,
44046                         12,
44047                         12,
44048                         12,
44049                         12,
44050                         12,
44051                         12,
44052                         12,
44053                         12,
44054                         12,
44055                         12,
44056                         12,
44057                         12,
44058                         12,
44059                         12,
44060                         21,
44061                         21,
44062                         21,
44063                         21,
44064                         12,
44065                         21,
44066                         21,
44067                         21,
44068                         21,
44069                         21,
44070                         21,
44071                         21,
44072                         21,
44073                         21,
44074                         12,
44075                         21,
44076                         21,
44077                         21,
44078                         12,
44079                         21,
44080                         21,
44081                         21,
44082                         21,
44083                         21,
44084                         39,
44085                         39,
44086                         12,
44087                         12,
44088                         12,
44089                         12,
44090                         12,
44091                         12,
44092                         12,
44093                         12,
44094                         12,
44095                         12,
44096                         12,
44097                         12,
44098                         12,
44099                         12,
44100                         12,
44101                         12,
44102                         12,
44103                         12,
44104                         12,
44105                         12,
44106                         12,
44107                         12,
44108                         12,
44109                         12,
44110                         12,
44111                         12,
44112                         12,
44113                         12,
44114                         12,
44115                         12,
44116                         12,
44117                         12,
44118                         12,
44119                         12,
44120                         12,
44121                         12,
44122                         12,
44123                         12,
44124                         12,
44125                         12,
44126                         12,
44127                         21,
44128                         21,
44129                         21,
44130                         39,
44131                         39,
44132                         12,
44133                         12,
44134                         12,
44135                         12,
44136                         12,
44137                         12,
44138                         12,
44139                         12,
44140                         12,
44141                         12,
44142                         12,
44143                         12,
44144                         12,
44145                         12,
44146                         12,
44147                         12,
44148                         12,
44149                         12,
44150                         12,
44151                         12,
44152                         12,
44153                         12,
44154                         12,
44155                         12,
44156                         12,
44157                         12,
44158                         12,
44159                         12,
44160                         12,
44161                         12,
44162                         12,
44163                         12,
44164                         12,
44165                         12,
44166                         12,
44167                         12,
44168                         12,
44169                         12,
44170                         12,
44171                         12,
44172                         12,
44173                         12,
44174                         12,
44175                         12,
44176                         12,
44177                         12,
44178                         12,
44179                         39,
44180                         39,
44181                         39,
44182                         39,
44183                         39,
44184                         39,
44185                         39,
44186                         39,
44187                         39,
44188                         39,
44189                         39,
44190                         39,
44191                         39,
44192                         39,
44193                         39,
44194                         39,
44195                         39,
44196                         39,
44197                         39,
44198                         39,
44199                         39,
44200                         39,
44201                         39,
44202                         21,
44203                         21,
44204                         21,
44205                         21,
44206                         21,
44207                         21,
44208                         21,
44209                         21,
44210                         21,
44211                         21,
44212                         21,
44213                         21,
44214                         21,
44215                         21,
44216                         21,
44217                         21,
44218                         21,
44219                         21,
44220                         21,
44221                         21,
44222                         21,
44223                         21,
44224                         21,
44225                         21,
44226                         21,
44227                         21,
44228                         21,
44229                         21,
44230                         21,
44231                         21,
44232                         21,
44233                         21,
44234                         12,
44235                         12,
44236                         12,
44237                         12,
44238                         12,
44239                         12,
44240                         12,
44241                         12,
44242                         12,
44243                         12,
44244                         12,
44245                         12,
44246                         12,
44247                         12,
44248                         12,
44249                         12,
44250                         12,
44251                         12,
44252                         12,
44253                         12,
44254                         12,
44255                         12,
44256                         12,
44257                         12,
44258                         12,
44259                         12,
44260                         12,
44261                         12,
44262                         12,
44263                         12,
44264                         12,
44265                         12,
44266                         12,
44267                         12,
44268                         12,
44269                         12,
44270                         12,
44271                         12,
44272                         12,
44273                         12,
44274                         12,
44275                         12,
44276                         12,
44277                         12,
44278                         12,
44279                         12,
44280                         12,
44281                         12,
44282                         12,
44283                         12,
44284                         12,
44285                         12,
44286                         12,
44287                         12,
44288                         21,
44289                         21,
44290                         21,
44291                         12,
44292                         21,
44293                         21,
44294                         21,
44295                         21,
44296                         21,
44297                         21,
44298                         21,
44299                         21,
44300                         21,
44301                         21,
44302                         21,
44303                         21,
44304                         21,
44305                         21,
44306                         21,
44307                         21,
44308                         21,
44309                         21,
44310                         12,
44311                         21,
44312                         21,
44313                         21,
44314                         21,
44315                         21,
44316                         21,
44317                         21,
44318                         12,
44319                         12,
44320                         12,
44321                         12,
44322                         12,
44323                         12,
44324                         12,
44325                         12,
44326                         12,
44327                         12,
44328                         21,
44329                         21,
44330                         17,
44331                         17,
44332                         11,
44333                         11,
44334                         11,
44335                         11,
44336                         11,
44337                         11,
44338                         11,
44339                         11,
44340                         11,
44341                         11,
44342                         12,
44343                         12,
44344                         12,
44345                         12,
44346                         12,
44347                         12,
44348                         12,
44349                         12,
44350                         12,
44351                         12,
44352                         12,
44353                         12,
44354                         12,
44355                         12,
44356                         12,
44357                         12,
44358                         39,
44359                         21,
44360                         21,
44361                         21,
44362                         39,
44363                         12,
44364                         12,
44365                         12,
44366                         12,
44367                         12,
44368                         12,
44369                         12,
44370                         12,
44371                         12,
44372                         12,
44373                         12,
44374                         12,
44375                         12,
44376                         12,
44377                         12,
44378                         12,
44379                         12,
44380                         12,
44381                         12,
44382                         12,
44383                         12,
44384                         12,
44385                         12,
44386                         12,
44387                         12,
44388                         12,
44389                         12,
44390                         12,
44391                         12,
44392                         12,
44393                         12,
44394                         12,
44395                         12,
44396                         12,
44397                         12,
44398                         12,
44399                         12,
44400                         12,
44401                         12,
44402                         12,
44403                         12,
44404                         12,
44405                         12,
44406                         12,
44407                         12,
44408                         12,
44409                         12,
44410                         12,
44411                         12,
44412                         12,
44413                         12,
44414                         12,
44415                         12,
44416                         39,
44417                         39,
44418                         21,
44419                         12,
44420                         21,
44421                         21,
44422                         21,
44423                         21,
44424                         21,
44425                         21,
44426                         21,
44427                         21,
44428                         21,
44429                         21,
44430                         21,
44431                         21,
44432                         21,
44433                         21,
44434                         21,
44435                         21,
44436                         12,
44437                         39,
44438                         39,
44439                         39,
44440                         39,
44441                         39,
44442                         39,
44443                         39,
44444                         39,
44445                         21,
44446                         39,
44447                         39,
44448                         39,
44449                         39,
44450                         12,
44451                         12,
44452                         12,
44453                         12,
44454                         12,
44455                         12,
44456                         21,
44457                         21,
44458                         39,
44459                         39,
44460                         11,
44461                         11,
44462                         11,
44463                         11,
44464                         11,
44465                         11,
44466                         11,
44467                         11,
44468                         11,
44469                         11,
44470                         12,
44471                         12,
44472                         10,
44473                         10,
44474                         12,
44475                         12,
44476                         12,
44477                         12,
44478                         12,
44479                         10,
44480                         12,
44481                         9,
44482                         39,
44483                         39,
44484                         39,
44485                         39,
44486                         39,
44487                         21,
44488                         21,
44489                         21,
44490                         39,
44491                         12,
44492                         12,
44493                         12,
44494                         12,
44495                         12,
44496                         12,
44497                         12,
44498                         12,
44499                         12,
44500                         12,
44501                         12,
44502                         12,
44503                         12,
44504                         12,
44505                         12,
44506                         12,
44507                         12,
44508                         12,
44509                         12,
44510                         12,
44511                         12,
44512                         12,
44513                         12,
44514                         12,
44515                         12,
44516                         12,
44517                         12,
44518                         12,
44519                         12,
44520                         12,
44521                         12,
44522                         12,
44523                         12,
44524                         12,
44525                         12,
44526                         12,
44527                         12,
44528                         12,
44529                         12,
44530                         12,
44531                         12,
44532                         12,
44533                         12,
44534                         12,
44535                         12,
44536                         12,
44537                         12,
44538                         12,
44539                         12,
44540                         12,
44541                         12,
44542                         12,
44543                         12,
44544                         39,
44545                         39,
44546                         21,
44547                         21,
44548                         21,
44549                         21,
44550                         21,
44551                         21,
44552                         21,
44553                         21,
44554                         21,
44555                         21,
44556                         21,
44557                         21,
44558                         21,
44559                         21,
44560                         21,
44561                         21,
44562                         21,
44563                         21,
44564                         21,
44565                         21,
44566                         21,
44567                         21,
44568                         39,
44569                         39,
44570                         39,
44571                         39,
44572                         39,
44573                         39,
44574                         39,
44575                         12,
44576                         12,
44577                         12,
44578                         12,
44579                         12,
44580                         12,
44581                         39,
44582                         39,
44583                         39,
44584                         39,
44585                         39,
44586                         39,
44587                         39,
44588                         11,
44589                         11,
44590                         11,
44591                         11,
44592                         11,
44593                         11,
44594                         11,
44595                         11,
44596                         11,
44597                         11,
44598                         21,
44599                         21,
44600                         12,
44601                         12,
44602                         12,
44603                         21,
44604                         21,
44605                         21,
44606                         21,
44607                         21,
44608                         21,
44609                         21,
44610                         21,
44611                         21,
44612                         21,
44613                         21,
44614                         21,
44615                         21,
44616                         21,
44617                         21,
44618                         39,
44619                         12,
44620                         12,
44621                         12,
44622                         12,
44623                         12,
44624                         12,
44625                         12,
44626                         12,
44627                         12,
44628                         12,
44629                         12,
44630                         12,
44631                         12,
44632                         12,
44633                         12,
44634                         12,
44635                         12,
44636                         12,
44637                         12,
44638                         12,
44639                         12,
44640                         12,
44641                         12,
44642                         12,
44643                         12,
44644                         12,
44645                         12,
44646                         12,
44647                         12,
44648                         12,
44649                         12,
44650                         12,
44651                         12,
44652                         12,
44653                         12,
44654                         12,
44655                         12,
44656                         12,
44657                         12,
44658                         12,
44659                         12,
44660                         12,
44661                         12,
44662                         12,
44663                         12,
44664                         12,
44665                         12,
44666                         12,
44667                         12,
44668                         12,
44669                         12,
44670                         12,
44671                         12,
44672                         39,
44673                         39,
44674                         21,
44675                         12,
44676                         21,
44677                         21,
44678                         21,
44679                         21,
44680                         21,
44681                         21,
44682                         21,
44683                         21,
44684                         21,
44685                         21,
44686                         21,
44687                         21,
44688                         21,
44689                         21,
44690                         21,
44691                         21,
44692                         39,
44693                         39,
44694                         12,
44695                         12,
44696                         12,
44697                         12,
44698                         12,
44699                         12,
44700                         12,
44701                         12,
44702                         12,
44703                         12,
44704                         12,
44705                         12,
44706                         12,
44707                         12,
44708                         12,
44709                         12,
44710                         12,
44711                         12,
44712                         21,
44713                         21,
44714                         39,
44715                         39,
44716                         11,
44717                         11,
44718                         11,
44719                         11,
44720                         11,
44721                         11,
44722                         11,
44723                         11,
44724                         11,
44725                         11,
44726                         12,
44727                         9,
44728                         39,
44729                         39,
44730                         39,
44731                         39,
44732                         39,
44733                         39,
44734                         39,
44735                         39,
44736                         39,
44737                         39,
44738                         39,
44739                         39,
44740                         39,
44741                         39,
44742                         39,
44743                         21,
44744                         21,
44745                         21,
44746                         39,
44747                         12,
44748                         12,
44749                         12,
44750                         12,
44751                         12,
44752                         12,
44753                         12,
44754                         12,
44755                         12,
44756                         12,
44757                         12,
44758                         12,
44759                         12,
44760                         12,
44761                         12,
44762                         12,
44763                         12,
44764                         12,
44765                         12,
44766                         12,
44767                         12,
44768                         12,
44769                         12,
44770                         12,
44771                         12,
44772                         12,
44773                         12,
44774                         12,
44775                         12,
44776                         12,
44777                         12,
44778                         12,
44779                         12,
44780                         12,
44781                         12,
44782                         12,
44783                         12,
44784                         12,
44785                         12,
44786                         12,
44787                         12,
44788                         12,
44789                         12,
44790                         12,
44791                         12,
44792                         12,
44793                         12,
44794                         12,
44795                         12,
44796                         12,
44797                         12,
44798                         12,
44799                         12,
44800                         39,
44801                         39,
44802                         21,
44803                         12,
44804                         21,
44805                         21,
44806                         21,
44807                         21,
44808                         21,
44809                         21,
44810                         21,
44811                         21,
44812                         21,
44813                         21,
44814                         21,
44815                         21,
44816                         21,
44817                         21,
44818                         21,
44819                         21,
44820                         21,
44821                         21,
44822                         21,
44823                         21,
44824                         21,
44825                         21,
44826                         21,
44827                         21,
44828                         21,
44829                         21,
44830                         39,
44831                         39,
44832                         39,
44833                         39,
44834                         12,
44835                         12,
44836                         12,
44837                         12,
44838                         12,
44839                         12,
44840                         21,
44841                         21,
44842                         39,
44843                         39,
44844                         11,
44845                         11,
44846                         11,
44847                         11,
44848                         11,
44849                         11,
44850                         11,
44851                         11,
44852                         11,
44853                         11,
44854                         12,
44855                         12,
44856                         12,
44857                         12,
44858                         12,
44859                         12,
44860                         12,
44861                         12,
44862                         39,
44863                         39,
44864                         39,
44865                         39,
44866                         39,
44867                         39,
44868                         39,
44869                         39,
44870                         39,
44871                         39,
44872                         21,
44873                         12,
44874                         12,
44875                         12,
44876                         12,
44877                         12,
44878                         12,
44879                         12,
44880                         12,
44881                         12,
44882                         12,
44883                         12,
44884                         12,
44885                         12,
44886                         12,
44887                         12,
44888                         12,
44889                         12,
44890                         12,
44891                         12,
44892                         12,
44893                         12,
44894                         12,
44895                         12,
44896                         12,
44897                         12,
44898                         12,
44899                         12,
44900                         12,
44901                         12,
44902                         12,
44903                         12,
44904                         12,
44905                         12,
44906                         12,
44907                         12,
44908                         12,
44909                         12,
44910                         12,
44911                         12,
44912                         12,
44913                         12,
44914                         12,
44915                         12,
44916                         12,
44917                         12,
44918                         12,
44919                         12,
44920                         12,
44921                         12,
44922                         12,
44923                         12,
44924                         12,
44925                         12,
44926                         12,
44927                         12,
44928                         39,
44929                         39,
44930                         39,
44931                         39,
44932                         21,
44933                         21,
44934                         21,
44935                         21,
44936                         21,
44937                         21,
44938                         21,
44939                         21,
44940                         21,
44941                         21,
44942                         21,
44943                         21,
44944                         21,
44945                         21,
44946                         21,
44947                         21,
44948                         39,
44949                         39,
44950                         12,
44951                         39,
44952                         39,
44953                         39,
44954                         39,
44955                         39,
44956                         39,
44957                         21,
44958                         39,
44959                         39,
44960                         39,
44961                         39,
44962                         39,
44963                         39,
44964                         39,
44965                         39,
44966                         39,
44967                         39,
44968                         39,
44969                         39,
44970                         39,
44971                         39,
44972                         11,
44973                         11,
44974                         11,
44975                         11,
44976                         11,
44977                         11,
44978                         11,
44979                         11,
44980                         11,
44981                         11,
44982                         12,
44983                         12,
44984                         12,
44985                         12,
44986                         12,
44987                         12,
44988                         12,
44989                         12,
44990                         12,
44991                         9,
44992                         12,
44993                         39,
44994                         39,
44995                         39,
44996                         39,
44997                         39,
44998                         39,
44999                         21,
45000                         21,
45001                         21,
45002                         39,
45003                         12,
45004                         12,
45005                         12,
45006                         12,
45007                         12,
45008                         12,
45009                         12,
45010                         12,
45011                         12,
45012                         12,
45013                         12,
45014                         12,
45015                         12,
45016                         12,
45017                         12,
45018                         12,
45019                         12,
45020                         12,
45021                         12,
45022                         12,
45023                         12,
45024                         12,
45025                         12,
45026                         12,
45027                         12,
45028                         12,
45029                         12,
45030                         12,
45031                         12,
45032                         12,
45033                         12,
45034                         12,
45035                         12,
45036                         12,
45037                         12,
45038                         12,
45039                         12,
45040                         12,
45041                         12,
45042                         12,
45043                         12,
45044                         12,
45045                         12,
45046                         12,
45047                         12,
45048                         12,
45049                         12,
45050                         12,
45051                         12,
45052                         12,
45053                         12,
45054                         12,
45055                         12,
45056                         12,
45057                         12,
45058                         12,
45059                         12,
45060                         21,
45061                         21,
45062                         21,
45063                         21,
45064                         21,
45065                         21,
45066                         21,
45067                         21,
45068                         21,
45069                         21,
45070                         21,
45071                         21,
45072                         21,
45073                         21,
45074                         21,
45075                         21,
45076                         21,
45077                         21,
45078                         21,
45079                         21,
45080                         21,
45081                         21,
45082                         21,
45083                         21,
45084                         21,
45085                         39,
45086                         12,
45087                         12,
45088                         12,
45089                         12,
45090                         12,
45091                         12,
45092                         12,
45093                         12,
45094                         12,
45095                         12,
45096                         21,
45097                         21,
45098                         39,
45099                         39,
45100                         11,
45101                         11,
45102                         11,
45103                         11,
45104                         11,
45105                         11,
45106                         11,
45107                         11,
45108                         11,
45109                         11,
45110                         39,
45111                         39,
45112                         39,
45113                         39,
45114                         39,
45115                         39,
45116                         39,
45117                         39,
45118                         12,
45119                         12,
45120                         12,
45121                         12,
45122                         12,
45123                         12,
45124                         12,
45125                         12,
45126                         39,
45127                         39,
45128                         21,
45129                         21,
45130                         39,
45131                         12,
45132                         12,
45133                         12,
45134                         12,
45135                         12,
45136                         12,
45137                         12,
45138                         12,
45139                         12,
45140                         12,
45141                         12,
45142                         12,
45143                         12,
45144                         12,
45145                         12,
45146                         12,
45147                         12,
45148                         12,
45149                         12,
45150                         12,
45151                         12,
45152                         12,
45153                         12,
45154                         12,
45155                         12,
45156                         12,
45157                         12,
45158                         12,
45159                         12,
45160                         12,
45161                         12,
45162                         12,
45163                         12,
45164                         12,
45165                         12,
45166                         12,
45167                         12,
45168                         12,
45169                         12,
45170                         12,
45171                         12,
45172                         12,
45173                         12,
45174                         12,
45175                         12,
45176                         12,
45177                         12,
45178                         12,
45179                         12,
45180                         12,
45181                         12,
45182                         12,
45183                         12,
45184                         39,
45185                         39,
45186                         21,
45187                         12,
45188                         21,
45189                         21,
45190                         21,
45191                         21,
45192                         21,
45193                         21,
45194                         21,
45195                         21,
45196                         21,
45197                         21,
45198                         21,
45199                         21,
45200                         21,
45201                         21,
45202                         21,
45203                         21,
45204                         21,
45205                         21,
45206                         21,
45207                         21,
45208                         21,
45209                         21,
45210                         21,
45211                         21,
45212                         21,
45213                         39,
45214                         39,
45215                         39,
45216                         39,
45217                         39,
45218                         39,
45219                         39,
45220                         12,
45221                         12,
45222                         12,
45223                         12,
45224                         21,
45225                         21,
45226                         39,
45227                         39,
45228                         11,
45229                         11,
45230                         11,
45231                         11,
45232                         11,
45233                         11,
45234                         11,
45235                         11,
45236                         11,
45237                         11,
45238                         39,
45239                         12,
45240                         12,
45241                         39,
45242                         39,
45243                         39,
45244                         39,
45245                         39,
45246                         39,
45247                         39,
45248                         39,
45249                         39,
45250                         39,
45251                         39,
45252                         39,
45253                         39,
45254                         39,
45255                         39,
45256                         21,
45257                         21,
45258                         39,
45259                         12,
45260                         12,
45261                         12,
45262                         12,
45263                         12,
45264                         12,
45265                         12,
45266                         12,
45267                         12,
45268                         12,
45269                         12,
45270                         12,
45271                         12,
45272                         12,
45273                         12,
45274                         12,
45275                         12,
45276                         12,
45277                         12,
45278                         12,
45279                         12,
45280                         12,
45281                         12,
45282                         12,
45283                         12,
45284                         12,
45285                         12,
45286                         12,
45287                         12,
45288                         12,
45289                         12,
45290                         12,
45291                         12,
45292                         12,
45293                         12,
45294                         12,
45295                         12,
45296                         12,
45297                         12,
45298                         12,
45299                         12,
45300                         12,
45301                         12,
45302                         12,
45303                         12,
45304                         12,
45305                         12,
45306                         12,
45307                         12,
45308                         12,
45309                         12,
45310                         12,
45311                         12,
45312                         12,
45313                         12,
45314                         12,
45315                         12,
45316                         21,
45317                         21,
45318                         21,
45319                         21,
45320                         21,
45321                         21,
45322                         21,
45323                         21,
45324                         21,
45325                         21,
45326                         21,
45327                         21,
45328                         21,
45329                         21,
45330                         21,
45331                         21,
45332                         12,
45333                         39,
45334                         39,
45335                         39,
45336                         39,
45337                         39,
45338                         39,
45339                         39,
45340                         39,
45341                         21,
45342                         39,
45343                         39,
45344                         39,
45345                         39,
45346                         39,
45347                         39,
45348                         39,
45349                         39,
45350                         12,
45351                         12,
45352                         21,
45353                         21,
45354                         39,
45355                         39,
45356                         11,
45357                         11,
45358                         11,
45359                         11,
45360                         11,
45361                         11,
45362                         11,
45363                         11,
45364                         11,
45365                         11,
45366                         12,
45367                         12,
45368                         12,
45369                         12,
45370                         12,
45371                         12,
45372                         39,
45373                         39,
45374                         39,
45375                         10,
45376                         12,
45377                         12,
45378                         12,
45379                         12,
45380                         12,
45381                         12,
45382                         39,
45383                         39,
45384                         21,
45385                         21,
45386                         39,
45387                         12,
45388                         12,
45389                         12,
45390                         12,
45391                         12,
45392                         12,
45393                         12,
45394                         12,
45395                         12,
45396                         12,
45397                         12,
45398                         12,
45399                         12,
45400                         12,
45401                         12,
45402                         12,
45403                         12,
45404                         12,
45405                         12,
45406                         12,
45407                         12,
45408                         12,
45409                         12,
45410                         12,
45411                         12,
45412                         12,
45413                         12,
45414                         12,
45415                         12,
45416                         12,
45417                         12,
45418                         12,
45419                         12,
45420                         12,
45421                         12,
45422                         12,
45423                         12,
45424                         12,
45425                         12,
45426                         12,
45427                         12,
45428                         12,
45429                         12,
45430                         12,
45431                         12,
45432                         12,
45433                         12,
45434                         12,
45435                         12,
45436                         12,
45437                         12,
45438                         12,
45439                         12,
45440                         12,
45441                         12,
45442                         12,
45443                         12,
45444                         12,
45445                         12,
45446                         12,
45447                         12,
45448                         12,
45449                         12,
45450                         12,
45451                         12,
45452                         12,
45453                         39,
45454                         39,
45455                         39,
45456                         21,
45457                         21,
45458                         21,
45459                         21,
45460                         21,
45461                         21,
45462                         21,
45463                         21,
45464                         21,
45465                         21,
45466                         21,
45467                         21,
45468                         21,
45469                         21,
45470                         21,
45471                         21,
45472                         21,
45473                         21,
45474                         21,
45475                         21,
45476                         21,
45477                         21,
45478                         21,
45479                         21,
45480                         21,
45481                         21,
45482                         21,
45483                         21,
45484                         21,
45485                         21,
45486                         21,
45487                         21,
45488                         21,
45489                         21,
45490                         21,
45491                         21,
45492                         21,
45493                         21,
45494                         21,
45495                         21,
45496                         21,
45497                         21,
45498                         12,
45499                         39,
45500                         39,
45501                         39,
45502                         39,
45503                         39,
45504                         39,
45505                         39,
45506                         39,
45507                         39,
45508                         39,
45509                         39,
45510                         39,
45511                         36,
45512                         36,
45513                         36,
45514                         36,
45515                         36,
45516                         36,
45517                         36,
45518                         36,
45519                         36,
45520                         36,
45521                         36,
45522                         36,
45523                         36,
45524                         36,
45525                         36,
45526                         36,
45527                         36,
45528                         36,
45529                         36,
45530                         36,
45531                         36,
45532                         36,
45533                         36,
45534                         36,
45535                         36,
45536                         36,
45537                         36,
45538                         36,
45539                         36,
45540                         36,
45541                         36,
45542                         36,
45543                         36,
45544                         36,
45545                         36,
45546                         36,
45547                         36,
45548                         36,
45549                         36,
45550                         36,
45551                         36,
45552                         36,
45553                         36,
45554                         36,
45555                         36,
45556                         36,
45557                         36,
45558                         36,
45559                         36,
45560                         36,
45561                         36,
45562                         36,
45563                         36,
45564                         36,
45565                         36,
45566                         36,
45567                         36,
45568                         36,
45569                         39,
45570                         39,
45571                         39,
45572                         39,
45573                         9,
45574                         36,
45575                         36,
45576                         36,
45577                         36,
45578                         36,
45579                         36,
45580                         36,
45581                         36,
45582                         36,
45583                         36,
45584                         36,
45585                         36,
45586                         36,
45587                         36,
45588                         36,
45589                         12,
45590                         11,
45591                         11,
45592                         11,
45593                         11,
45594                         11,
45595                         11,
45596                         11,
45597                         11,
45598                         11,
45599                         11,
45600                         17,
45601                         17,
45602                         39,
45603                         39,
45604                         39,
45605                         39,
45606                         39,
45607                         36,
45608                         36,
45609                         36,
45610                         36,
45611                         36,
45612                         36,
45613                         36,
45614                         36,
45615                         36,
45616                         36,
45617                         36,
45618                         36,
45619                         36,
45620                         36,
45621                         36,
45622                         36,
45623                         36,
45624                         36,
45625                         36,
45626                         36,
45627                         36,
45628                         36,
45629                         36,
45630                         36,
45631                         36,
45632                         36,
45633                         36,
45634                         36,
45635                         36,
45636                         36,
45637                         36,
45638                         36,
45639                         36,
45640                         36,
45641                         36,
45642                         36,
45643                         36,
45644                         36,
45645                         36,
45646                         36,
45647                         36,
45648                         36,
45649                         36,
45650                         36,
45651                         36,
45652                         36,
45653                         36,
45654                         36,
45655                         36,
45656                         36,
45657                         36,
45658                         36,
45659                         36,
45660                         36,
45661                         36,
45662                         36,
45663                         36,
45664                         36,
45665                         36,
45666                         36,
45667                         36,
45668                         36,
45669                         36,
45670                         36,
45671                         36,
45672                         36,
45673                         36,
45674                         36,
45675                         36,
45676                         36,
45677                         36,
45678                         36,
45679                         36,
45680                         36,
45681                         36,
45682                         36,
45683                         36,
45684                         39,
45685                         39,
45686                         11,
45687                         11,
45688                         11,
45689                         11,
45690                         11,
45691                         11,
45692                         11,
45693                         11,
45694                         11,
45695                         11,
45696                         39,
45697                         39,
45698                         36,
45699                         36,
45700                         36,
45701                         36,
45702                         12,
45703                         18,
45704                         18,
45705                         18,
45706                         18,
45707                         12,
45708                         18,
45709                         18,
45710                         4,
45711                         18,
45712                         18,
45713                         17,
45714                         4,
45715                         6,
45716                         6,
45717                         6,
45718                         6,
45719                         6,
45720                         4,
45721                         12,
45722                         6,
45723                         12,
45724                         12,
45725                         12,
45726                         21,
45727                         21,
45728                         12,
45729                         12,
45730                         12,
45731                         12,
45732                         12,
45733                         12,
45734                         11,
45735                         11,
45736                         11,
45737                         11,
45738                         11,
45739                         11,
45740                         11,
45741                         11,
45742                         11,
45743                         11,
45744                         12,
45745                         12,
45746                         12,
45747                         12,
45748                         12,
45749                         12,
45750                         12,
45751                         12,
45752                         12,
45753                         12,
45754                         17,
45755                         21,
45756                         12,
45757                         21,
45758                         12,
45759                         21,
45760                         0,
45761                         1,
45762                         0,
45763                         1,
45764                         21,
45765                         21,
45766                         12,
45767                         12,
45768                         12,
45769                         12,
45770                         12,
45771                         12,
45772                         12,
45773                         12,
45774                         12,
45775                         12,
45776                         12,
45777                         12,
45778                         12,
45779                         12,
45780                         12,
45781                         12,
45782                         12,
45783                         12,
45784                         12,
45785                         12,
45786                         12,
45787                         12,
45788                         12,
45789                         12,
45790                         12,
45791                         12,
45792                         12,
45793                         12,
45794                         12,
45795                         12,
45796                         12,
45797                         12,
45798                         12,
45799                         12,
45800                         12,
45801                         12,
45802                         12,
45803                         12,
45804                         12,
45805                         12,
45806                         12,
45807                         12,
45808                         12,
45809                         12,
45810                         12,
45811                         39,
45812                         39,
45813                         39,
45814                         39,
45815                         21,
45816                         21,
45817                         21,
45818                         21,
45819                         21,
45820                         21,
45821                         21,
45822                         21,
45823                         21,
45824                         21,
45825                         21,
45826                         21,
45827                         21,
45828                         21,
45829                         17,
45830                         21,
45831                         21,
45832                         21,
45833                         21,
45834                         21,
45835                         17,
45836                         21,
45837                         21,
45838                         12,
45839                         12,
45840                         12,
45841                         12,
45842                         12,
45843                         21,
45844                         21,
45845                         21,
45846                         21,
45847                         21,
45848                         21,
45849                         21,
45850                         21,
45851                         21,
45852                         21,
45853                         21,
45854                         21,
45855                         21,
45856                         21,
45857                         21,
45858                         21,
45859                         21,
45860                         21,
45861                         21,
45862                         21,
45863                         21,
45864                         21,
45865                         21,
45866                         21,
45867                         21,
45868                         21,
45869                         21,
45870                         21,
45871                         21,
45872                         21,
45873                         21,
45874                         21,
45875                         21,
45876                         21,
45877                         21,
45878                         21,
45879                         21,
45880                         21,
45881                         21,
45882                         21,
45883                         21,
45884                         21,
45885                         21,
45886                         21,
45887                         21,
45888                         21,
45889                         21,
45890                         21,
45891                         39,
45892                         17,
45893                         17,
45894                         12,
45895                         12,
45896                         12,
45897                         12,
45898                         12,
45899                         12,
45900                         21,
45901                         12,
45902                         12,
45903                         12,
45904                         12,
45905                         12,
45906                         12,
45907                         12,
45908                         12,
45909                         12,
45910                         18,
45911                         18,
45912                         17,
45913                         18,
45914                         12,
45915                         12,
45916                         12,
45917                         12,
45918                         12,
45919                         4,
45920                         4,
45921                         39,
45922                         39,
45923                         39,
45924                         39,
45925                         39,
45926                         36,
45927                         36,
45928                         36,
45929                         36,
45930                         36,
45931                         36,
45932                         36,
45933                         36,
45934                         36,
45935                         36,
45936                         36,
45937                         36,
45938                         36,
45939                         36,
45940                         36,
45941                         36,
45942                         36,
45943                         36,
45944                         36,
45945                         36,
45946                         36,
45947                         36,
45948                         36,
45949                         36,
45950                         36,
45951                         36,
45952                         36,
45953                         36,
45954                         36,
45955                         36,
45956                         36,
45957                         36,
45958                         11,
45959                         11,
45960                         11,
45961                         11,
45962                         11,
45963                         11,
45964                         11,
45965                         11,
45966                         11,
45967                         11,
45968                         17,
45969                         17,
45970                         12,
45971                         12,
45972                         12,
45973                         12,
45974                         36,
45975                         36,
45976                         36,
45977                         36,
45978                         36,
45979                         36,
45980                         36,
45981                         36,
45982                         36,
45983                         36,
45984                         36,
45985                         36,
45986                         36,
45987                         36,
45988                         36,
45989                         36,
45990                         36,
45991                         36,
45992                         36,
45993                         36,
45994                         36,
45995                         36,
45996                         36,
45997                         36,
45998                         36,
45999                         36,
46000                         36,
46001                         36,
46002                         36,
46003                         36,
46004                         36,
46005                         36,
46006                         36,
46007                         36,
46008                         36,
46009                         36,
46010                         36,
46011                         36,
46012                         36,
46013                         36,
46014                         36,
46015                         36,
46016                         36,
46017                         36,
46018                         36,
46019                         36,
46020                         36,
46021                         36,
46022                         36,
46023                         36,
46024                         36,
46025                         36,
46026                         36,
46027                         36,
46028                         36,
46029                         36,
46030                         36,
46031                         36,
46032                         36,
46033                         36,
46034                         36,
46035                         36,
46036                         36,
46037                         36,
46038                         11,
46039                         11,
46040                         11,
46041                         11,
46042                         11,
46043                         11,
46044                         11,
46045                         11,
46046                         11,
46047                         11,
46048                         36,
46049                         36,
46050                         36,
46051                         36,
46052                         36,
46053                         36,
46054                         12,
46055                         12,
46056                         12,
46057                         12,
46058                         12,
46059                         12,
46060                         12,
46061                         12,
46062                         12,
46063                         12,
46064                         12,
46065                         12,
46066                         12,
46067                         12,
46068                         12,
46069                         12,
46070                         12,
46071                         12,
46072                         12,
46073                         12,
46074                         12,
46075                         12,
46076                         12,
46077                         12,
46078                         12,
46079                         12,
46080                         12,
46081                         12,
46082                         12,
46083                         12,
46084                         12,
46085                         12,
46086                         25,
46087                         25,
46088                         25,
46089                         25,
46090                         25,
46091                         25,
46092                         25,
46093                         25,
46094                         25,
46095                         25,
46096                         25,
46097                         25,
46098                         25,
46099                         25,
46100                         25,
46101                         25,
46102                         25,
46103                         25,
46104                         25,
46105                         25,
46106                         25,
46107                         25,
46108                         25,
46109                         25,
46110                         25,
46111                         25,
46112                         25,
46113                         25,
46114                         25,
46115                         25,
46116                         25,
46117                         25,
46118                         26,
46119                         26,
46120                         26,
46121                         26,
46122                         26,
46123                         26,
46124                         26,
46125                         26,
46126                         26,
46127                         26,
46128                         26,
46129                         26,
46130                         26,
46131                         26,
46132                         26,
46133                         26,
46134                         26,
46135                         26,
46136                         26,
46137                         26,
46138                         26,
46139                         26,
46140                         26,
46141                         26,
46142                         26,
46143                         26,
46144                         26,
46145                         26,
46146                         26,
46147                         26,
46148                         26,
46149                         26,
46150                         26,
46151                         26,
46152                         26,
46153                         26,
46154                         26,
46155                         26,
46156                         26,
46157                         26,
46158                         27,
46159                         27,
46160                         27,
46161                         27,
46162                         27,
46163                         27,
46164                         27,
46165                         27,
46166                         27,
46167                         27,
46168                         27,
46169                         27,
46170                         27,
46171                         27,
46172                         27,
46173                         27,
46174                         27,
46175                         27,
46176                         27,
46177                         27,
46178                         27,
46179                         27,
46180                         27,
46181                         27,
46182                         27,
46183                         27,
46184                         27,
46185                         27,
46186                         27,
46187                         27,
46188                         27,
46189                         27,
46190                         27,
46191                         27,
46192                         27,
46193                         27,
46194                         27,
46195                         27,
46196                         27,
46197                         27,
46198                         27,
46199                         27,
46200                         27,
46201                         27,
46202                         27,
46203                         27,
46204                         27,
46205                         27,
46206                         27,
46207                         27,
46208                         27,
46209                         27,
46210                         27,
46211                         27,
46212                         27,
46213                         27,
46214                         12,
46215                         12,
46216                         12,
46217                         12,
46218                         12,
46219                         12,
46220                         12,
46221                         12,
46222                         12,
46223                         12,
46224                         12,
46225                         12,
46226                         12,
46227                         12,
46228                         12,
46229                         12,
46230                         12,
46231                         12,
46232                         12,
46233                         12,
46234                         12,
46235                         12,
46236                         12,
46237                         12,
46238                         12,
46239                         12,
46240                         12,
46241                         12,
46242                         12,
46243                         12,
46244                         12,
46245                         12,
46246                         12,
46247                         12,
46248                         12,
46249                         12,
46250                         12,
46251                         12,
46252                         12,
46253                         12,
46254                         12,
46255                         12,
46256                         12,
46257                         12,
46258                         12,
46259                         12,
46260                         12,
46261                         12,
46262                         12,
46263                         12,
46264                         12,
46265                         12,
46266                         12,
46267                         12,
46268                         12,
46269                         12,
46270                         12,
46271                         12,
46272                         12,
46273                         39,
46274                         39,
46275                         21,
46276                         21,
46277                         21,
46278                         12,
46279                         17,
46280                         12,
46281                         12,
46282                         12,
46283                         12,
46284                         12,
46285                         12,
46286                         12,
46287                         12,
46288                         12,
46289                         12,
46290                         12,
46291                         12,
46292                         12,
46293                         12,
46294                         12,
46295                         12,
46296                         12,
46297                         12,
46298                         12,
46299                         12,
46300                         12,
46301                         12,
46302                         12,
46303                         12,
46304                         12,
46305                         12,
46306                         12,
46307                         12,
46308                         12,
46309                         12,
46310                         12,
46311                         12,
46312                         12,
46313                         12,
46314                         12,
46315                         12,
46316                         12,
46317                         12,
46318                         12,
46319                         12,
46320                         12,
46321                         12,
46322                         12,
46323                         12,
46324                         12,
46325                         12,
46326                         12,
46327                         12,
46328                         12,
46329                         12,
46330                         12,
46331                         12,
46332                         12,
46333                         12,
46334                         12,
46335                         12,
46336                         12,
46337                         12,
46338                         12,
46339                         12,
46340                         12,
46341                         12,
46342                         12,
46343                         12,
46344                         12,
46345                         12,
46346                         12,
46347                         12,
46348                         12,
46349                         12,
46350                         12,
46351                         12,
46352                         12,
46353                         12,
46354                         12,
46355                         12,
46356                         12,
46357                         12,
46358                         12,
46359                         12,
46360                         12,
46361                         12,
46362                         12,
46363                         39,
46364                         39,
46365                         39,
46366                         39,
46367                         39,
46368                         39,
46369                         39,
46370                         39,
46371                         39,
46372                         39,
46373                         39,
46374                         17,
46375                         12,
46376                         12,
46377                         12,
46378                         12,
46379                         12,
46380                         12,
46381                         12,
46382                         12,
46383                         12,
46384                         12,
46385                         12,
46386                         12,
46387                         12,
46388                         12,
46389                         12,
46390                         12,
46391                         12,
46392                         12,
46393                         12,
46394                         12,
46395                         12,
46396                         12,
46397                         12,
46398                         12,
46399                         12,
46400                         12,
46401                         12,
46402                         12,
46403                         12,
46404                         12,
46405                         12,
46406                         12,
46407                         12,
46408                         12,
46409                         12,
46410                         12,
46411                         12,
46412                         12,
46413                         12,
46414                         12,
46415                         12,
46416                         12,
46417                         12,
46418                         12,
46419                         12,
46420                         12,
46421                         12,
46422                         12,
46423                         12,
46424                         12,
46425                         12,
46426                         12,
46427                         12,
46428                         12,
46429                         12,
46430                         12,
46431                         12,
46432                         12,
46433                         12,
46434                         12,
46435                         12,
46436                         12,
46437                         12,
46438                         17,
46439                         12,
46440                         12,
46441                         12,
46442                         12,
46443                         12,
46444                         12,
46445                         12,
46446                         12,
46447                         12,
46448                         12,
46449                         12,
46450                         12,
46451                         12,
46452                         12,
46453                         12,
46454                         12,
46455                         12,
46456                         12,
46457                         12,
46458                         12,
46459                         12,
46460                         12,
46461                         12,
46462                         12,
46463                         12,
46464                         12,
46465                         0,
46466                         1,
46467                         39,
46468                         39,
46469                         39,
46470                         12,
46471                         12,
46472                         12,
46473                         12,
46474                         12,
46475                         12,
46476                         12,
46477                         12,
46478                         12,
46479                         12,
46480                         12,
46481                         12,
46482                         12,
46483                         12,
46484                         12,
46485                         12,
46486                         12,
46487                         12,
46488                         12,
46489                         12,
46490                         12,
46491                         12,
46492                         12,
46493                         12,
46494                         12,
46495                         12,
46496                         12,
46497                         12,
46498                         12,
46499                         12,
46500                         12,
46501                         12,
46502                         12,
46503                         12,
46504                         12,
46505                         12,
46506                         12,
46507                         12,
46508                         12,
46509                         12,
46510                         12,
46511                         12,
46512                         12,
46513                         17,
46514                         17,
46515                         17,
46516                         12,
46517                         12,
46518                         12,
46519                         12,
46520                         12,
46521                         12,
46522                         12,
46523                         12,
46524                         12,
46525                         12,
46526                         12,
46527                         12,
46528                         12,
46529                         12,
46530                         12,
46531                         12,
46532                         12,
46533                         12,
46534                         12,
46535                         12,
46536                         12,
46537                         12,
46538                         12,
46539                         12,
46540                         12,
46541                         12,
46542                         12,
46543                         12,
46544                         12,
46545                         12,
46546                         12,
46547                         12,
46548                         12,
46549                         12,
46550                         12,
46551                         12,
46552                         21,
46553                         21,
46554                         21,
46555                         39,
46556                         39,
46557                         39,
46558                         39,
46559                         39,
46560                         39,
46561                         39,
46562                         39,
46563                         39,
46564                         39,
46565                         39,
46566                         12,
46567                         12,
46568                         12,
46569                         12,
46570                         12,
46571                         12,
46572                         12,
46573                         12,
46574                         12,
46575                         12,
46576                         12,
46577                         12,
46578                         12,
46579                         12,
46580                         12,
46581                         12,
46582                         12,
46583                         12,
46584                         21,
46585                         21,
46586                         21,
46587                         17,
46588                         17,
46589                         39,
46590                         39,
46591                         39,
46592                         39,
46593                         39,
46594                         39,
46595                         39,
46596                         39,
46597                         39,
46598                         12,
46599                         12,
46600                         12,
46601                         12,
46602                         12,
46603                         12,
46604                         12,
46605                         12,
46606                         12,
46607                         12,
46608                         12,
46609                         12,
46610                         12,
46611                         12,
46612                         12,
46613                         12,
46614                         12,
46615                         12,
46616                         21,
46617                         21,
46618                         39,
46619                         39,
46620                         39,
46621                         39,
46622                         39,
46623                         39,
46624                         39,
46625                         39,
46626                         39,
46627                         39,
46628                         39,
46629                         39,
46630                         12,
46631                         12,
46632                         12,
46633                         12,
46634                         12,
46635                         12,
46636                         12,
46637                         12,
46638                         12,
46639                         12,
46640                         12,
46641                         12,
46642                         12,
46643                         12,
46644                         12,
46645                         12,
46646                         12,
46647                         39,
46648                         21,
46649                         21,
46650                         39,
46651                         39,
46652                         39,
46653                         39,
46654                         39,
46655                         39,
46656                         39,
46657                         39,
46658                         39,
46659                         39,
46660                         39,
46661                         39,
46662                         36,
46663                         36,
46664                         36,
46665                         36,
46666                         36,
46667                         36,
46668                         36,
46669                         36,
46670                         36,
46671                         36,
46672                         36,
46673                         36,
46674                         36,
46675                         36,
46676                         36,
46677                         36,
46678                         36,
46679                         36,
46680                         36,
46681                         36,
46682                         36,
46683                         36,
46684                         36,
46685                         36,
46686                         36,
46687                         36,
46688                         36,
46689                         36,
46690                         36,
46691                         36,
46692                         36,
46693                         36,
46694                         36,
46695                         36,
46696                         36,
46697                         36,
46698                         36,
46699                         36,
46700                         36,
46701                         36,
46702                         36,
46703                         36,
46704                         36,
46705                         36,
46706                         36,
46707                         36,
46708                         36,
46709                         36,
46710                         36,
46711                         36,
46712                         36,
46713                         36,
46714                         17,
46715                         17,
46716                         5,
46717                         36,
46718                         17,
46719                         12,
46720                         17,
46721                         9,
46722                         36,
46723                         36,
46724                         39,
46725                         39,
46726                         11,
46727                         11,
46728                         11,
46729                         11,
46730                         11,
46731                         11,
46732                         11,
46733                         11,
46734                         11,
46735                         11,
46736                         39,
46737                         39,
46738                         39,
46739                         39,
46740                         39,
46741                         39,
46742                         12,
46743                         12,
46744                         12,
46745                         12,
46746                         12,
46747                         12,
46748                         12,
46749                         12,
46750                         12,
46751                         12,
46752                         12,
46753                         12,
46754                         12,
46755                         12,
46756                         12,
46757                         12,
46758                         12,
46759                         12,
46760                         6,
46761                         6,
46762                         17,
46763                         17,
46764                         18,
46765                         12,
46766                         6,
46767                         6,
46768                         12,
46769                         21,
46770                         21,
46771                         21,
46772                         4,
46773                         39,
46774                         11,
46775                         11,
46776                         11,
46777                         11,
46778                         11,
46779                         11,
46780                         11,
46781                         11,
46782                         11,
46783                         11,
46784                         39,
46785                         39,
46786                         39,
46787                         39,
46788                         39,
46789                         39,
46790                         12,
46791                         12,
46792                         12,
46793                         12,
46794                         12,
46795                         12,
46796                         12,
46797                         12,
46798                         12,
46799                         12,
46800                         12,
46801                         12,
46802                         12,
46803                         12,
46804                         12,
46805                         12,
46806                         12,
46807                         12,
46808                         12,
46809                         12,
46810                         12,
46811                         12,
46812                         12,
46813                         12,
46814                         12,
46815                         12,
46816                         12,
46817                         12,
46818                         12,
46819                         12,
46820                         12,
46821                         12,
46822                         12,
46823                         12,
46824                         12,
46825                         12,
46826                         12,
46827                         12,
46828                         12,
46829                         12,
46830                         12,
46831                         21,
46832                         12,
46833                         12,
46834                         12,
46835                         12,
46836                         12,
46837                         12,
46838                         12,
46839                         12,
46840                         12,
46841                         12,
46842                         12,
46843                         12,
46844                         12,
46845                         12,
46846                         12,
46847                         12,
46848                         12,
46849                         12,
46850                         12,
46851                         12,
46852                         12,
46853                         12,
46854                         12,
46855                         12,
46856                         12,
46857                         12,
46858                         12,
46859                         12,
46860                         12,
46861                         12,
46862                         12,
46863                         12,
46864                         12,
46865                         12,
46866                         12,
46867                         12,
46868                         12,
46869                         12,
46870                         12,
46871                         12,
46872                         12,
46873                         12,
46874                         12,
46875                         12,
46876                         12,
46877                         12,
46878                         12,
46879                         12,
46880                         12,
46881                         12,
46882                         12,
46883                         12,
46884                         12,
46885                         12,
46886                         12,
46887                         12,
46888                         12,
46889                         12,
46890                         12,
46891                         12,
46892                         12,
46893                         12,
46894                         12,
46895                         12,
46896                         12,
46897                         12,
46898                         12,
46899                         12,
46900                         12,
46901                         12,
46902                         12,
46903                         12,
46904                         12,
46905                         12,
46906                         12,
46907                         12,
46908                         12,
46909                         12,
46910                         12,
46911                         12,
46912                         12,
46913                         12,
46914                         12,
46915                         39,
46916                         39,
46917                         39,
46918                         21,
46919                         21,
46920                         21,
46921                         21,
46922                         21,
46923                         21,
46924                         21,
46925                         21,
46926                         21,
46927                         21,
46928                         21,
46929                         21,
46930                         21,
46931                         21,
46932                         21,
46933                         21,
46934                         21,
46935                         21,
46936                         21,
46937                         21,
46938                         21,
46939                         21,
46940                         21,
46941                         21,
46942                         21,
46943                         21,
46944                         21,
46945                         21,
46946                         39,
46947                         39,
46948                         39,
46949                         39,
46950                         12,
46951                         39,
46952                         39,
46953                         39,
46954                         6,
46955                         6,
46956                         11,
46957                         11,
46958                         11,
46959                         11,
46960                         11,
46961                         11,
46962                         11,
46963                         11,
46964                         11,
46965                         11,
46966                         36,
46967                         36,
46968                         36,
46969                         36,
46970                         36,
46971                         36,
46972                         36,
46973                         36,
46974                         36,
46975                         36,
46976                         36,
46977                         36,
46978                         36,
46979                         36,
46980                         36,
46981                         36,
46982                         36,
46983                         36,
46984                         36,
46985                         36,
46986                         36,
46987                         36,
46988                         36,
46989                         36,
46990                         36,
46991                         36,
46992                         36,
46993                         36,
46994                         36,
46995                         36,
46996                         36,
46997                         36,
46998                         36,
46999                         36,
47000                         36,
47001                         36,
47002                         36,
47003                         36,
47004                         36,
47005                         36,
47006                         36,
47007                         36,
47008                         36,
47009                         36,
47010                         36,
47011                         36,
47012                         36,
47013                         36,
47014                         36,
47015                         36,
47016                         36,
47017                         36,
47018                         36,
47019                         36,
47020                         36,
47021                         36,
47022                         36,
47023                         36,
47024                         39,
47025                         39,
47026                         39,
47027                         39,
47028                         39,
47029                         39,
47030                         11,
47031                         11,
47032                         11,
47033                         11,
47034                         11,
47035                         11,
47036                         11,
47037                         11,
47038                         11,
47039                         11,
47040                         36,
47041                         36,
47042                         36,
47043                         36,
47044                         36,
47045                         36,
47046                         12,
47047                         12,
47048                         12,
47049                         12,
47050                         12,
47051                         12,
47052                         12,
47053                         12,
47054                         12,
47055                         12,
47056                         12,
47057                         12,
47058                         12,
47059                         12,
47060                         12,
47061                         12,
47062                         12,
47063                         12,
47064                         12,
47065                         12,
47066                         12,
47067                         12,
47068                         12,
47069                         12,
47070                         12,
47071                         12,
47072                         12,
47073                         12,
47074                         12,
47075                         12,
47076                         12,
47077                         12,
47078                         12,
47079                         12,
47080                         12,
47081                         12,
47082                         12,
47083                         12,
47084                         12,
47085                         12,
47086                         12,
47087                         12,
47088                         12,
47089                         12,
47090                         12,
47091                         12,
47092                         12,
47093                         12,
47094                         12,
47095                         12,
47096                         12,
47097                         12,
47098                         12,
47099                         12,
47100                         12,
47101                         21,
47102                         21,
47103                         21,
47104                         21,
47105                         21,
47106                         39,
47107                         39,
47108                         12,
47109                         12,
47110                         36,
47111                         36,
47112                         36,
47113                         36,
47114                         36,
47115                         36,
47116                         36,
47117                         36,
47118                         36,
47119                         36,
47120                         36,
47121                         36,
47122                         36,
47123                         36,
47124                         36,
47125                         36,
47126                         36,
47127                         36,
47128                         36,
47129                         36,
47130                         36,
47131                         36,
47132                         36,
47133                         36,
47134                         36,
47135                         36,
47136                         36,
47137                         36,
47138                         36,
47139                         36,
47140                         36,
47141                         36,
47142                         36,
47143                         36,
47144                         36,
47145                         36,
47146                         36,
47147                         36,
47148                         36,
47149                         36,
47150                         36,
47151                         36,
47152                         36,
47153                         36,
47154                         36,
47155                         36,
47156                         36,
47157                         36,
47158                         36,
47159                         36,
47160                         36,
47161                         36,
47162                         36,
47163                         36,
47164                         36,
47165                         36,
47166                         36,
47167                         36,
47168                         36,
47169                         36,
47170                         36,
47171                         39,
47172                         39,
47173                         21,
47174                         11,
47175                         11,
47176                         11,
47177                         11,
47178                         11,
47179                         11,
47180                         11,
47181                         11,
47182                         11,
47183                         11,
47184                         11,
47185                         11,
47186                         11,
47187                         11,
47188                         11,
47189                         11,
47190                         11,
47191                         11,
47192                         11,
47193                         11,
47194                         11,
47195                         11,
47196                         11,
47197                         11,
47198                         11,
47199                         11,
47200                         39,
47201                         39,
47202                         39,
47203                         39,
47204                         39,
47205                         39,
47206                         36,
47207                         36,
47208                         36,
47209                         36,
47210                         36,
47211                         36,
47212                         36,
47213                         36,
47214                         36,
47215                         36,
47216                         36,
47217                         36,
47218                         36,
47219                         36,
47220                         39,
47221                         39,
47222                         39,
47223                         39,
47224                         39,
47225                         39,
47226                         39,
47227                         39,
47228                         39,
47229                         39,
47230                         39,
47231                         39,
47232                         39,
47233                         39,
47234                         39,
47235                         39,
47236                         39,
47237                         39,
47238                         21,
47239                         21,
47240                         21,
47241                         21,
47242                         21,
47243                         12,
47244                         12,
47245                         12,
47246                         12,
47247                         12,
47248                         12,
47249                         12,
47250                         12,
47251                         12,
47252                         12,
47253                         12,
47254                         12,
47255                         12,
47256                         12,
47257                         12,
47258                         12,
47259                         12,
47260                         12,
47261                         12,
47262                         12,
47263                         12,
47264                         12,
47265                         12,
47266                         12,
47267                         12,
47268                         12,
47269                         12,
47270                         12,
47271                         12,
47272                         12,
47273                         12,
47274                         12,
47275                         12,
47276                         12,
47277                         12,
47278                         12,
47279                         12,
47280                         12,
47281                         12,
47282                         12,
47283                         12,
47284                         12,
47285                         12,
47286                         12,
47287                         12,
47288                         12,
47289                         12,
47290                         21,
47291                         21,
47292                         21,
47293                         21,
47294                         21,
47295                         21,
47296                         21,
47297                         21,
47298                         21,
47299                         21,
47300                         21,
47301                         21,
47302                         21,
47303                         21,
47304                         21,
47305                         21,
47306                         21,
47307                         12,
47308                         12,
47309                         12,
47310                         12,
47311                         12,
47312                         12,
47313                         12,
47314                         39,
47315                         39,
47316                         39,
47317                         39,
47318                         11,
47319                         11,
47320                         11,
47321                         11,
47322                         11,
47323                         11,
47324                         11,
47325                         11,
47326                         11,
47327                         11,
47328                         17,
47329                         17,
47330                         12,
47331                         17,
47332                         17,
47333                         17,
47334                         17,
47335                         12,
47336                         12,
47337                         12,
47338                         12,
47339                         12,
47340                         12,
47341                         12,
47342                         12,
47343                         12,
47344                         12,
47345                         21,
47346                         21,
47347                         21,
47348                         21,
47349                         21,
47350                         21,
47351                         21,
47352                         21,
47353                         21,
47354                         12,
47355                         12,
47356                         12,
47357                         12,
47358                         12,
47359                         12,
47360                         12,
47361                         12,
47362                         12,
47363                         39,
47364                         39,
47365                         39,
47366                         21,
47367                         21,
47368                         21,
47369                         12,
47370                         12,
47371                         12,
47372                         12,
47373                         12,
47374                         12,
47375                         12,
47376                         12,
47377                         12,
47378                         12,
47379                         12,
47380                         12,
47381                         12,
47382                         12,
47383                         12,
47384                         12,
47385                         12,
47386                         12,
47387                         12,
47388                         12,
47389                         12,
47390                         12,
47391                         12,
47392                         12,
47393                         12,
47394                         12,
47395                         12,
47396                         12,
47397                         12,
47398                         12,
47399                         21,
47400                         21,
47401                         21,
47402                         21,
47403                         21,
47404                         21,
47405                         21,
47406                         21,
47407                         21,
47408                         21,
47409                         21,
47410                         21,
47411                         21,
47412                         12,
47413                         12,
47414                         11,
47415                         11,
47416                         11,
47417                         11,
47418                         11,
47419                         11,
47420                         11,
47421                         11,
47422                         11,
47423                         11,
47424                         12,
47425                         12,
47426                         12,
47427                         12,
47428                         12,
47429                         12,
47430                         12,
47431                         12,
47432                         12,
47433                         12,
47434                         12,
47435                         12,
47436                         12,
47437                         12,
47438                         12,
47439                         12,
47440                         12,
47441                         12,
47442                         12,
47443                         12,
47444                         12,
47445                         12,
47446                         12,
47447                         12,
47448                         12,
47449                         12,
47450                         12,
47451                         12,
47452                         12,
47453                         12,
47454                         12,
47455                         12,
47456                         12,
47457                         12,
47458                         12,
47459                         12,
47460                         12,
47461                         12,
47462                         12,
47463                         12,
47464                         12,
47465                         12,
47466                         12,
47467                         12,
47468                         21,
47469                         21,
47470                         21,
47471                         21,
47472                         21,
47473                         21,
47474                         21,
47475                         21,
47476                         21,
47477                         21,
47478                         21,
47479                         21,
47480                         21,
47481                         21,
47482                         39,
47483                         39,
47484                         39,
47485                         39,
47486                         39,
47487                         39,
47488                         39,
47489                         39,
47490                         12,
47491                         12,
47492                         12,
47493                         12,
47494                         12,
47495                         12,
47496                         12,
47497                         12,
47498                         12,
47499                         12,
47500                         12,
47501                         12,
47502                         12,
47503                         12,
47504                         12,
47505                         12,
47506                         12,
47507                         12,
47508                         12,
47509                         12,
47510                         12,
47511                         12,
47512                         12,
47513                         12,
47514                         12,
47515                         12,
47516                         12,
47517                         12,
47518                         12,
47519                         12,
47520                         12,
47521                         12,
47522                         12,
47523                         12,
47524                         12,
47525                         12,
47526                         12,
47527                         12,
47528                         12,
47529                         12,
47530                         21,
47531                         21,
47532                         21,
47533                         21,
47534                         21,
47535                         21,
47536                         21,
47537                         21,
47538                         21,
47539                         21,
47540                         21,
47541                         21,
47542                         21,
47543                         21,
47544                         21,
47545                         21,
47546                         21,
47547                         21,
47548                         21,
47549                         21,
47550                         39,
47551                         39,
47552                         39,
47553                         17,
47554                         17,
47555                         17,
47556                         17,
47557                         17,
47558                         11,
47559                         11,
47560                         11,
47561                         11,
47562                         11,
47563                         11,
47564                         11,
47565                         11,
47566                         11,
47567                         11,
47568                         39,
47569                         39,
47570                         39,
47571                         12,
47572                         12,
47573                         12,
47574                         11,
47575                         11,
47576                         11,
47577                         11,
47578                         11,
47579                         11,
47580                         11,
47581                         11,
47582                         11,
47583                         11,
47584                         12,
47585                         12,
47586                         12,
47587                         12,
47588                         12,
47589                         12,
47590                         12,
47591                         12,
47592                         12,
47593                         12,
47594                         12,
47595                         12,
47596                         12,
47597                         12,
47598                         12,
47599                         12,
47600                         12,
47601                         12,
47602                         12,
47603                         12,
47604                         12,
47605                         12,
47606                         12,
47607                         12,
47608                         12,
47609                         12,
47610                         12,
47611                         12,
47612                         12,
47613                         12,
47614                         12,
47615                         12,
47616                         12,
47617                         12,
47618                         12,
47619                         12,
47620                         17,
47621                         17,
47622                         12,
47623                         12,
47624                         12,
47625                         12,
47626                         12,
47627                         12,
47628                         12,
47629                         12,
47630                         39,
47631                         39,
47632                         39,
47633                         39,
47634                         39,
47635                         39,
47636                         39,
47637                         39,
47638                         21,
47639                         21,
47640                         21,
47641                         12,
47642                         21,
47643                         21,
47644                         21,
47645                         21,
47646                         21,
47647                         21,
47648                         21,
47649                         21,
47650                         21,
47651                         21,
47652                         21,
47653                         21,
47654                         21,
47655                         21,
47656                         21,
47657                         21,
47658                         21,
47659                         21,
47660                         21,
47661                         21,
47662                         21,
47663                         12,
47664                         12,
47665                         12,
47666                         12,
47667                         21,
47668                         12,
47669                         12,
47670                         12,
47671                         12,
47672                         21,
47673                         21,
47674                         21,
47675                         12,
47676                         12,
47677                         12,
47678                         12,
47679                         12,
47680                         12,
47681                         12,
47682                         12,
47683                         12,
47684                         12,
47685                         12,
47686                         12,
47687                         12,
47688                         12,
47689                         12,
47690                         12,
47691                         12,
47692                         12,
47693                         12,
47694                         12,
47695                         12,
47696                         12,
47697                         12,
47698                         12,
47699                         12,
47700                         12,
47701                         12,
47702                         12,
47703                         12,
47704                         12,
47705                         12,
47706                         12,
47707                         12,
47708                         12,
47709                         12,
47710                         12,
47711                         12,
47712                         12,
47713                         12,
47714                         12,
47715                         12,
47716                         12,
47717                         12,
47718                         21,
47719                         21,
47720                         21,
47721                         21,
47722                         21,
47723                         21,
47724                         21,
47725                         21,
47726                         21,
47727                         21,
47728                         21,
47729                         21,
47730                         21,
47731                         21,
47732                         21,
47733                         21,
47734                         21,
47735                         21,
47736                         21,
47737                         21,
47738                         21,
47739                         21,
47740                         21,
47741                         21,
47742                         21,
47743                         21,
47744                         21,
47745                         21,
47746                         21,
47747                         21,
47748                         21,
47749                         21,
47750                         12,
47751                         12,
47752                         12,
47753                         12,
47754                         12,
47755                         12,
47756                         12,
47757                         12,
47758                         12,
47759                         12,
47760                         12,
47761                         12,
47762                         12,
47763                         12,
47764                         12,
47765                         12,
47766                         12,
47767                         12,
47768                         12,
47769                         12,
47770                         12,
47771                         12,
47772                         12,
47773                         12,
47774                         12,
47775                         12,
47776                         12,
47777                         12,
47778                         12,
47779                         12,
47780                         12,
47781                         12,
47782                         12,
47783                         12,
47784                         12,
47785                         12,
47786                         12,
47787                         12,
47788                         12,
47789                         12,
47790                         12,
47791                         12,
47792                         12,
47793                         12,
47794                         12,
47795                         12,
47796                         12,
47797                         12,
47798                         12,
47799                         12,
47800                         12,
47801                         12,
47802                         12,
47803                         12,
47804                         12,
47805                         12,
47806                         12,
47807                         12,
47808                         12,
47809                         12,
47810                         12,
47811                         18,
47812                         12,
47813                         39,
47814                         17,
47815                         17,
47816                         17,
47817                         17,
47818                         17,
47819                         17,
47820                         17,
47821                         4,
47822                         17,
47823                         17,
47824                         17,
47825                         20,
47826                         21,
47827                         21,
47828                         21,
47829                         21,
47830                         17,
47831                         4,
47832                         17,
47833                         17,
47834                         19,
47835                         29,
47836                         29,
47837                         12,
47838                         3,
47839                         3,
47840                         0,
47841                         3,
47842                         3,
47843                         3,
47844                         0,
47845                         3,
47846                         29,
47847                         29,
47848                         12,
47849                         12,
47850                         15,
47851                         15,
47852                         15,
47853                         17,
47854                         30,
47855                         30,
47856                         21,
47857                         21,
47858                         21,
47859                         21,
47860                         21,
47861                         4,
47862                         10,
47863                         10,
47864                         10,
47865                         10,
47866                         10,
47867                         10,
47868                         10,
47869                         10,
47870                         12,
47871                         3,
47872                         3,
47873                         29,
47874                         5,
47875                         5,
47876                         12,
47877                         12,
47878                         12,
47879                         12,
47880                         12,
47881                         12,
47882                         8,
47883                         0,
47884                         1,
47885                         5,
47886                         5,
47887                         5,
47888                         12,
47889                         12,
47890                         12,
47891                         12,
47892                         12,
47893                         12,
47894                         12,
47895                         12,
47896                         12,
47897                         12,
47898                         12,
47899                         12,
47900                         17,
47901                         12,
47902                         17,
47903                         17,
47904                         17,
47905                         17,
47906                         12,
47907                         17,
47908                         17,
47909                         17,
47910                         22,
47911                         12,
47912                         12,
47913                         12,
47914                         12,
47915                         39,
47916                         39,
47917                         39,
47918                         39,
47919                         39,
47920                         21,
47921                         21,
47922                         21,
47923                         21,
47924                         21,
47925                         21,
47926                         12,
47927                         12,
47928                         39,
47929                         39,
47930                         29,
47931                         12,
47932                         12,
47933                         12,
47934                         12,
47935                         12,
47936                         12,
47937                         12,
47938                         12,
47939                         0,
47940                         1,
47941                         29,
47942                         12,
47943                         29,
47944                         29,
47945                         29,
47946                         29,
47947                         12,
47948                         12,
47949                         12,
47950                         12,
47951                         12,
47952                         12,
47953                         12,
47954                         12,
47955                         0,
47956                         1,
47957                         39,
47958                         12,
47959                         12,
47960                         12,
47961                         12,
47962                         12,
47963                         12,
47964                         12,
47965                         12,
47966                         12,
47967                         12,
47968                         12,
47969                         12,
47970                         12,
47971                         39,
47972                         39,
47973                         39,
47974                         9,
47975                         9,
47976                         9,
47977                         9,
47978                         9,
47979                         9,
47980                         9,
47981                         10,
47982                         9,
47983                         9,
47984                         9,
47985                         9,
47986                         9,
47987                         9,
47988                         9,
47989                         9,
47990                         9,
47991                         9,
47992                         9,
47993                         9,
47994                         9,
47995                         9,
47996                         10,
47997                         9,
47998                         9,
47999                         9,
48000                         9,
48001                         39,
48002                         39,
48003                         39,
48004                         39,
48005                         39,
48006                         39,
48007                         39,
48008                         39,
48009                         39,
48010                         39,
48011                         39,
48012                         39,
48013                         39,
48014                         39,
48015                         39,
48016                         39,
48017                         39,
48018                         39,
48019                         39,
48020                         39,
48021                         39,
48022                         21,
48023                         21,
48024                         21,
48025                         21,
48026                         21,
48027                         21,
48028                         21,
48029                         21,
48030                         21,
48031                         21,
48032                         21,
48033                         21,
48034                         21,
48035                         21,
48036                         21,
48037                         21,
48038                         21,
48039                         21,
48040                         21,
48041                         21,
48042                         21,
48043                         21,
48044                         21,
48045                         21,
48046                         21,
48047                         21,
48048                         21,
48049                         21,
48050                         21,
48051                         21,
48052                         21,
48053                         21,
48054                         21,
48055                         39,
48056                         39,
48057                         39,
48058                         39,
48059                         39,
48060                         39,
48061                         39,
48062                         39,
48063                         39,
48064                         39,
48065                         39,
48066                         39,
48067                         39,
48068                         39,
48069                         39,
48070                         12,
48071                         12,
48072                         12,
48073                         10,
48074                         12,
48075                         29,
48076                         12,
48077                         12,
48078                         12,
48079                         10,
48080                         12,
48081                         12,
48082                         12,
48083                         12,
48084                         12,
48085                         12,
48086                         12,
48087                         12,
48088                         12,
48089                         29,
48090                         12,
48091                         12,
48092                         9,
48093                         12,
48094                         12,
48095                         12,
48096                         12,
48097                         12,
48098                         12,
48099                         12,
48100                         12,
48101                         12,
48102                         12,
48103                         29,
48104                         29,
48105                         12,
48106                         12,
48107                         12,
48108                         12,
48109                         12,
48110                         12,
48111                         12,
48112                         12,
48113                         29,
48114                         12,
48115                         12,
48116                         12,
48117                         12,
48118                         12,
48119                         12,
48120                         12,
48121                         12,
48122                         12,
48123                         12,
48124                         12,
48125                         12,
48126                         12,
48127                         12,
48128                         12,
48129                         12,
48130                         12,
48131                         12,
48132                         12,
48133                         12,
48134                         12,
48135                         12,
48136                         12,
48137                         12,
48138                         12,
48139                         12,
48140                         12,
48141                         12,
48142                         12,
48143                         12,
48144                         12,
48145                         12,
48146                         12,
48147                         12,
48148                         12,
48149                         12,
48150                         12,
48151                         12,
48152                         12,
48153                         12,
48154                         29,
48155                         29,
48156                         12,
48157                         12,
48158                         12,
48159                         12,
48160                         12,
48161                         29,
48162                         12,
48163                         12,
48164                         29,
48165                         12,
48166                         29,
48167                         29,
48168                         29,
48169                         29,
48170                         29,
48171                         29,
48172                         29,
48173                         29,
48174                         29,
48175                         29,
48176                         29,
48177                         29,
48178                         12,
48179                         12,
48180                         12,
48181                         12,
48182                         29,
48183                         29,
48184                         29,
48185                         29,
48186                         29,
48187                         29,
48188                         29,
48189                         29,
48190                         29,
48191                         29,
48192                         12,
48193                         12,
48194                         12,
48195                         12,
48196                         12,
48197                         12,
48198                         12,
48199                         12,
48200                         12,
48201                         12,
48202                         12,
48203                         12,
48204                         12,
48205                         12,
48206                         12,
48207                         29,
48208                         29,
48209                         29,
48210                         29,
48211                         29,
48212                         29,
48213                         29,
48214                         29,
48215                         29,
48216                         29,
48217                         29,
48218                         29,
48219                         29,
48220                         29,
48221                         29,
48222                         29,
48223                         29,
48224                         12,
48225                         12,
48226                         12,
48227                         12,
48228                         12,
48229                         12,
48230                         12,
48231                         12,
48232                         12,
48233                         12,
48234                         12,
48235                         12,
48236                         12,
48237                         12,
48238                         12,
48239                         12,
48240                         12,
48241                         12,
48242                         12,
48243                         12,
48244                         12,
48245                         12,
48246                         12,
48247                         12,
48248                         12,
48249                         12,
48250                         12,
48251                         12,
48252                         12,
48253                         12,
48254                         12,
48255                         12,
48256                         12,
48257                         12,
48258                         12,
48259                         12,
48260                         12,
48261                         12,
48262                         12,
48263                         12,
48264                         12,
48265                         12,
48266                         12,
48267                         12,
48268                         12,
48269                         12,
48270                         12,
48271                         12,
48272                         12,
48273                         12,
48274                         12,
48275                         12,
48276                         12,
48277                         12,
48278                         12,
48279                         12,
48280                         29,
48281                         12,
48282                         29,
48283                         12,
48284                         12,
48285                         12,
48286                         12,
48287                         12,
48288                         12,
48289                         12,
48290                         12,
48291                         12,
48292                         12,
48293                         12,
48294                         12,
48295                         12,
48296                         12,
48297                         12,
48298                         12,
48299                         12,
48300                         12,
48301                         12,
48302                         12,
48303                         12,
48304                         12,
48305                         12,
48306                         12,
48307                         12,
48308                         12,
48309                         12,
48310                         12,
48311                         12,
48312                         12,
48313                         12,
48314                         12,
48315                         12,
48316                         12,
48317                         12,
48318                         12,
48319                         12,
48320                         12,
48321                         12,
48322                         12,
48323                         12,
48324                         12,
48325                         12,
48326                         29,
48327                         12,
48328                         29,
48329                         29,
48330                         12,
48331                         12,
48332                         12,
48333                         29,
48334                         29,
48335                         12,
48336                         12,
48337                         29,
48338                         12,
48339                         12,
48340                         12,
48341                         29,
48342                         12,
48343                         29,
48344                         9,
48345                         9,
48346                         12,
48347                         29,
48348                         12,
48349                         12,
48350                         12,
48351                         12,
48352                         29,
48353                         12,
48354                         12,
48355                         29,
48356                         29,
48357                         29,
48358                         29,
48359                         12,
48360                         12,
48361                         29,
48362                         12,
48363                         29,
48364                         12,
48365                         29,
48366                         29,
48367                         29,
48368                         29,
48369                         29,
48370                         29,
48371                         12,
48372                         29,
48373                         12,
48374                         12,
48375                         12,
48376                         12,
48377                         12,
48378                         29,
48379                         29,
48380                         29,
48381                         29,
48382                         12,
48383                         12,
48384                         12,
48385                         12,
48386                         29,
48387                         29,
48388                         12,
48389                         12,
48390                         12,
48391                         12,
48392                         12,
48393                         12,
48394                         12,
48395                         12,
48396                         12,
48397                         12,
48398                         29,
48399                         12,
48400                         12,
48401                         12,
48402                         29,
48403                         12,
48404                         12,
48405                         12,
48406                         12,
48407                         12,
48408                         29,
48409                         12,
48410                         12,
48411                         12,
48412                         12,
48413                         12,
48414                         12,
48415                         12,
48416                         12,
48417                         12,
48418                         12,
48419                         12,
48420                         12,
48421                         12,
48422                         29,
48423                         29,
48424                         12,
48425                         12,
48426                         29,
48427                         29,
48428                         29,
48429                         29,
48430                         12,
48431                         12,
48432                         29,
48433                         29,
48434                         12,
48435                         12,
48436                         29,
48437                         29,
48438                         12,
48439                         12,
48440                         12,
48441                         12,
48442                         12,
48443                         12,
48444                         12,
48445                         12,
48446                         12,
48447                         12,
48448                         12,
48449                         12,
48450                         12,
48451                         12,
48452                         12,
48453                         12,
48454                         12,
48455                         12,
48456                         29,
48457                         29,
48458                         12,
48459                         12,
48460                         29,
48461                         29,
48462                         12,
48463                         12,
48464                         12,
48465                         12,
48466                         12,
48467                         12,
48468                         12,
48469                         12,
48470                         12,
48471                         12,
48472                         12,
48473                         12,
48474                         12,
48475                         29,
48476                         12,
48477                         12,
48478                         12,
48479                         29,
48480                         12,
48481                         12,
48482                         12,
48483                         12,
48484                         12,
48485                         12,
48486                         12,
48487                         12,
48488                         12,
48489                         12,
48490                         12,
48491                         29,
48492                         12,
48493                         12,
48494                         12,
48495                         12,
48496                         12,
48497                         12,
48498                         12,
48499                         12,
48500                         12,
48501                         12,
48502                         12,
48503                         12,
48504                         12,
48505                         12,
48506                         12,
48507                         12,
48508                         12,
48509                         12,
48510                         12,
48511                         12,
48512                         12,
48513                         12,
48514                         12,
48515                         12,
48516                         12,
48517                         29,
48518                         12,
48519                         12,
48520                         12,
48521                         12,
48522                         12,
48523                         12,
48524                         12,
48525                         12,
48526                         12,
48527                         12,
48528                         12,
48529                         12,
48530                         12,
48531                         12,
48532                         12,
48533                         12,
48534                         12,
48535                         12,
48536                         12,
48537                         12,
48538                         12,
48539                         12,
48540                         12,
48541                         12,
48542                         12,
48543                         12,
48544                         12,
48545                         12,
48546                         12,
48547                         12,
48548                         12,
48549                         12,
48550                         12,
48551                         12,
48552                         12,
48553                         12,
48554                         12,
48555                         12,
48556                         12,
48557                         12,
48558                         12,
48559                         12,
48560                         12,
48561                         12,
48562                         12,
48563                         12,
48564                         12,
48565                         12,
48566                         12,
48567                         12,
48568                         29,
48569                         12,
48570                         12,
48571                         12,
48572                         12,
48573                         12,
48574                         12,
48575                         12,
48576                         14,
48577                         14,
48578                         12,
48579                         12,
48580                         12,
48581                         12,
48582                         12,
48583                         12,
48584                         12,
48585                         12,
48586                         12,
48587                         12,
48588                         12,
48589                         12,
48590                         12,
48591                         0,
48592                         1,
48593                         12,
48594                         12,
48595                         12,
48596                         12,
48597                         12,
48598                         12,
48599                         12,
48600                         12,
48601                         12,
48602                         12,
48603                         12,
48604                         12,
48605                         12,
48606                         12,
48607                         12,
48608                         12,
48609                         12,
48610                         12,
48611                         12,
48612                         12,
48613                         12,
48614                         12,
48615                         12,
48616                         12,
48617                         12,
48618                         12,
48619                         12,
48620                         12,
48621                         12,
48622                         12,
48623                         12,
48624                         12,
48625                         12,
48626                         12,
48627                         12,
48628                         12,
48629                         12,
48630                         12,
48631                         12,
48632                         12,
48633                         12,
48634                         12,
48635                         12,
48636                         12,
48637                         12,
48638                         12,
48639                         12,
48640                         12,
48641                         12,
48642                         12,
48643                         12,
48644                         12,
48645                         12,
48646                         12,
48647                         12,
48648                         12,
48649                         12,
48650                         12,
48651                         12,
48652                         12,
48653                         12,
48654                         12,
48655                         12,
48656                         12,
48657                         12,
48658                         12,
48659                         12,
48660                         12,
48661                         12,
48662                         14,
48663                         14,
48664                         14,
48665                         14,
48666                         39,
48667                         39,
48668                         39,
48669                         39,
48670                         39,
48671                         39,
48672                         39,
48673                         39,
48674                         39,
48675                         39,
48676                         39,
48677                         39,
48678                         12,
48679                         12,
48680                         12,
48681                         12,
48682                         12,
48683                         12,
48684                         12,
48685                         12,
48686                         12,
48687                         12,
48688                         12,
48689                         12,
48690                         12,
48691                         12,
48692                         12,
48693                         12,
48694                         12,
48695                         12,
48696                         12,
48697                         12,
48698                         12,
48699                         12,
48700                         12,
48701                         12,
48702                         12,
48703                         12,
48704                         12,
48705                         12,
48706                         12,
48707                         12,
48708                         12,
48709                         12,
48710                         12,
48711                         12,
48712                         12,
48713                         12,
48714                         12,
48715                         12,
48716                         12,
48717                         12,
48718                         12,
48719                         12,
48720                         12,
48721                         39,
48722                         39,
48723                         39,
48724                         39,
48725                         39,
48726                         39,
48727                         39,
48728                         39,
48729                         39,
48730                         39,
48731                         39,
48732                         39,
48733                         39,
48734                         39,
48735                         39,
48736                         39,
48737                         39,
48738                         39,
48739                         39,
48740                         39,
48741                         39,
48742                         29,
48743                         29,
48744                         29,
48745                         29,
48746                         29,
48747                         29,
48748                         29,
48749                         29,
48750                         29,
48751                         29,
48752                         29,
48753                         29,
48754                         29,
48755                         29,
48756                         29,
48757                         29,
48758                         29,
48759                         29,
48760                         29,
48761                         29,
48762                         29,
48763                         29,
48764                         29,
48765                         29,
48766                         29,
48767                         29,
48768                         29,
48769                         29,
48770                         29,
48771                         29,
48772                         29,
48773                         29,
48774                         29,
48775                         29,
48776                         29,
48777                         29,
48778                         29,
48779                         29,
48780                         29,
48781                         29,
48782                         29,
48783                         29,
48784                         29,
48785                         29,
48786                         29,
48787                         29,
48788                         29,
48789                         29,
48790                         29,
48791                         29,
48792                         29,
48793                         29,
48794                         29,
48795                         29,
48796                         29,
48797                         29,
48798                         29,
48799                         29,
48800                         29,
48801                         29,
48802                         29,
48803                         29,
48804                         29,
48805                         12,
48806                         29,
48807                         29,
48808                         29,
48809                         29,
48810                         29,
48811                         29,
48812                         29,
48813                         29,
48814                         29,
48815                         29,
48816                         29,
48817                         29,
48818                         29,
48819                         29,
48820                         29,
48821                         29,
48822                         29,
48823                         29,
48824                         29,
48825                         29,
48826                         29,
48827                         29,
48828                         29,
48829                         29,
48830                         29,
48831                         29,
48832                         29,
48833                         29,
48834                         29,
48835                         29,
48836                         29,
48837                         29,
48838                         29,
48839                         29,
48840                         29,
48841                         29,
48842                         29,
48843                         29,
48844                         29,
48845                         29,
48846                         29,
48847                         29,
48848                         29,
48849                         29,
48850                         12,
48851                         12,
48852                         12,
48853                         12,
48854                         29,
48855                         29,
48856                         29,
48857                         29,
48858                         29,
48859                         29,
48860                         29,
48861                         29,
48862                         29,
48863                         29,
48864                         29,
48865                         29,
48866                         29,
48867                         29,
48868                         29,
48869                         29,
48870                         29,
48871                         29,
48872                         29,
48873                         29,
48874                         29,
48875                         29,
48876                         29,
48877                         29,
48878                         29,
48879                         29,
48880                         29,
48881                         29,
48882                         29,
48883                         29,
48884                         29,
48885                         29,
48886                         29,
48887                         29,
48888                         29,
48889                         29,
48890                         29,
48891                         12,
48892                         12,
48893                         12,
48894                         12,
48895                         12,
48896                         12,
48897                         12,
48898                         12,
48899                         12,
48900                         12,
48901                         12,
48902                         29,
48903                         29,
48904                         29,
48905                         29,
48906                         29,
48907                         29,
48908                         29,
48909                         29,
48910                         29,
48911                         29,
48912                         29,
48913                         29,
48914                         29,
48915                         29,
48916                         29,
48917                         29,
48918                         12,
48919                         12,
48920                         29,
48921                         29,
48922                         29,
48923                         29,
48924                         12,
48925                         12,
48926                         12,
48927                         12,
48928                         12,
48929                         12,
48930                         12,
48931                         12,
48932                         12,
48933                         12,
48934                         29,
48935                         29,
48936                         12,
48937                         29,
48938                         29,
48939                         29,
48940                         29,
48941                         29,
48942                         29,
48943                         29,
48944                         12,
48945                         12,
48946                         12,
48947                         12,
48948                         12,
48949                         12,
48950                         12,
48951                         12,
48952                         29,
48953                         29,
48954                         12,
48955                         12,
48956                         29,
48957                         29,
48958                         12,
48959                         12,
48960                         12,
48961                         12,
48962                         29,
48963                         29,
48964                         12,
48965                         12,
48966                         29,
48967                         29,
48968                         12,
48969                         12,
48970                         12,
48971                         12,
48972                         29,
48973                         29,
48974                         29,
48975                         12,
48976                         12,
48977                         29,
48978                         12,
48979                         12,
48980                         29,
48981                         29,
48982                         29,
48983                         29,
48984                         12,
48985                         12,
48986                         12,
48987                         12,
48988                         12,
48989                         12,
48990                         12,
48991                         12,
48992                         12,
48993                         12,
48994                         12,
48995                         12,
48996                         12,
48997                         12,
48998                         12,
48999                         12,
49000                         29,
49001                         29,
49002                         29,
49003                         29,
49004                         12,
49005                         12,
49006                         12,
49007                         12,
49008                         12,
49009                         12,
49010                         12,
49011                         12,
49012                         12,
49013                         29,
49014                         12,
49015                         12,
49016                         12,
49017                         12,
49018                         12,
49019                         12,
49020                         12,
49021                         12,
49022                         12,
49023                         12,
49024                         12,
49025                         12,
49026                         12,
49027                         12,
49028                         12,
49029                         12,
49030                         14,
49031                         14,
49032                         14,
49033                         14,
49034                         12,
49035                         29,
49036                         29,
49037                         12,
49038                         12,
49039                         29,
49040                         12,
49041                         12,
49042                         12,
49043                         12,
49044                         29,
49045                         29,
49046                         12,
49047                         12,
49048                         12,
49049                         12,
49050                         14,
49051                         14,
49052                         29,
49053                         29,
49054                         14,
49055                         12,
49056                         14,
49057                         14,
49058                         14,
49059                         14,
49060                         14,
49061                         14,
49062                         12,
49063                         12,
49064                         12,
49065                         12,
49066                         12,
49067                         12,
49068                         12,
49069                         12,
49070                         12,
49071                         12,
49072                         12,
49073                         12,
49074                         12,
49075                         12,
49076                         12,
49077                         12,
49078                         12,
49079                         12,
49080                         12,
49081                         12,
49082                         12,
49083                         12,
49084                         12,
49085                         12,
49086                         12,
49087                         14,
49088                         14,
49089                         14,
49090                         12,
49091                         12,
49092                         12,
49093                         12,
49094                         29,
49095                         12,
49096                         29,
49097                         12,
49098                         12,
49099                         12,
49100                         12,
49101                         12,
49102                         12,
49103                         12,
49104                         12,
49105                         12,
49106                         12,
49107                         12,
49108                         12,
49109                         12,
49110                         12,
49111                         12,
49112                         12,
49113                         12,
49114                         12,
49115                         12,
49116                         12,
49117                         12,
49118                         12,
49119                         12,
49120                         12,
49121                         12,
49122                         12,
49123                         12,
49124                         12,
49125                         12,
49126                         29,
49127                         29,
49128                         12,
49129                         29,
49130                         29,
49131                         29,
49132                         12,
49133                         29,
49134                         14,
49135                         29,
49136                         29,
49137                         12,
49138                         29,
49139                         29,
49140                         12,
49141                         29,
49142                         12,
49143                         12,
49144                         12,
49145                         12,
49146                         12,
49147                         12,
49148                         12,
49149                         12,
49150                         12,
49151                         12,
49152                         12,
49153                         12,
49154                         12,
49155                         12,
49156                         12,
49157                         14,
49158                         12,
49159                         12,
49160                         12,
49161                         12,
49162                         12,
49163                         12,
49164                         12,
49165                         12,
49166                         12,
49167                         12,
49168                         12,
49169                         12,
49170                         12,
49171                         12,
49172                         12,
49173                         12,
49174                         12,
49175                         12,
49176                         12,
49177                         12,
49178                         12,
49179                         12,
49180                         12,
49181                         12,
49182                         12,
49183                         12,
49184                         12,
49185                         12,
49186                         12,
49187                         12,
49188                         29,
49189                         29,
49190                         12,
49191                         12,
49192                         12,
49193                         12,
49194                         12,
49195                         12,
49196                         12,
49197                         12,
49198                         12,
49199                         12,
49200                         12,
49201                         12,
49202                         12,
49203                         12,
49204                         12,
49205                         12,
49206                         12,
49207                         12,
49208                         12,
49209                         12,
49210                         12,
49211                         12,
49212                         12,
49213                         12,
49214                         12,
49215                         12,
49216                         12,
49217                         12,
49218                         12,
49219                         14,
49220                         14,
49221                         14,
49222                         14,
49223                         14,
49224                         14,
49225                         14,
49226                         14,
49227                         14,
49228                         14,
49229                         14,
49230                         14,
49231                         29,
49232                         29,
49233                         29,
49234                         29,
49235                         14,
49236                         12,
49237                         14,
49238                         14,
49239                         14,
49240                         29,
49241                         14,
49242                         14,
49243                         29,
49244                         29,
49245                         29,
49246                         14,
49247                         14,
49248                         29,
49249                         29,
49250                         14,
49251                         29,
49252                         29,
49253                         14,
49254                         14,
49255                         14,
49256                         12,
49257                         29,
49258                         12,
49259                         12,
49260                         12,
49261                         12,
49262                         29,
49263                         29,
49264                         14,
49265                         29,
49266                         29,
49267                         29,
49268                         29,
49269                         29,
49270                         29,
49271                         14,
49272                         14,
49273                         14,
49274                         14,
49275                         14,
49276                         29,
49277                         14,
49278                         14,
49279                         14,
49280                         14,
49281                         29,
49282                         29,
49283                         14,
49284                         14,
49285                         14,
49286                         14,
49287                         14,
49288                         14,
49289                         14,
49290                         14,
49291                         12,
49292                         12,
49293                         12,
49294                         14,
49295                         14,
49296                         14,
49297                         14,
49298                         14,
49299                         14,
49300                         12,
49301                         12,
49302                         12,
49303                         12,
49304                         12,
49305                         12,
49306                         12,
49307                         12,
49308                         12,
49309                         12,
49310                         12,
49311                         12,
49312                         12,
49313                         12,
49314                         12,
49315                         12,
49316                         12,
49317                         12,
49318                         12,
49319                         12,
49320                         12,
49321                         12,
49322                         12,
49323                         12,
49324                         12,
49325                         12,
49326                         12,
49327                         12,
49328                         12,
49329                         12,
49330                         12,
49331                         12,
49332                         12,
49333                         12,
49334                         12,
49335                         12,
49336                         12,
49337                         12,
49338                         12,
49339                         12,
49340                         12,
49341                         12,
49342                         12,
49343                         12,
49344                         12,
49345                         12,
49346                         12,
49347                         12,
49348                         12,
49349                         12,
49350                         12,
49351                         12,
49352                         12,
49353                         12,
49354                         12,
49355                         12,
49356                         12,
49357                         12,
49358                         12,
49359                         12,
49360                         12,
49361                         12,
49362                         12,
49363                         12,
49364                         12,
49365                         12,
49366                         12,
49367                         12,
49368                         12,
49369                         12,
49370                         12,
49371                         12,
49372                         12,
49373                         29,
49374                         12,
49375                         12,
49376                         12,
49377                         3,
49378                         3,
49379                         3,
49380                         3,
49381                         12,
49382                         12,
49383                         12,
49384                         6,
49385                         6,
49386                         12,
49387                         12,
49388                         12,
49389                         12,
49390                         0,
49391                         1,
49392                         0,
49393                         1,
49394                         0,
49395                         1,
49396                         0,
49397                         1,
49398                         0,
49399                         1,
49400                         0,
49401                         1,
49402                         0,
49403                         1,
49404                         29,
49405                         29,
49406                         29,
49407                         29,
49408                         29,
49409                         29,
49410                         29,
49411                         29,
49412                         29,
49413                         29,
49414                         29,
49415                         29,
49416                         29,
49417                         29,
49418                         29,
49419                         29,
49420                         29,
49421                         29,
49422                         29,
49423                         29,
49424                         29,
49425                         29,
49426                         29,
49427                         29,
49428                         29,
49429                         29,
49430                         29,
49431                         29,
49432                         29,
49433                         29,
49434                         12,
49435                         12,
49436                         12,
49437                         12,
49438                         12,
49439                         12,
49440                         12,
49441                         12,
49442                         12,
49443                         12,
49444                         12,
49445                         12,
49446                         12,
49447                         12,
49448                         12,
49449                         12,
49450                         12,
49451                         12,
49452                         12,
49453                         12,
49454                         12,
49455                         12,
49456                         12,
49457                         12,
49458                         12,
49459                         12,
49460                         12,
49461                         12,
49462                         12,
49463                         12,
49464                         12,
49465                         12,
49466                         12,
49467                         12,
49468                         12,
49469                         12,
49470                         12,
49471                         12,
49472                         12,
49473                         12,
49474                         12,
49475                         12,
49476                         12,
49477                         12,
49478                         12,
49479                         12,
49480                         12,
49481                         12,
49482                         12,
49483                         0,
49484                         1,
49485                         12,
49486                         12,
49487                         12,
49488                         12,
49489                         12,
49490                         12,
49491                         12,
49492                         12,
49493                         12,
49494                         12,
49495                         12,
49496                         12,
49497                         12,
49498                         12,
49499                         12,
49500                         12,
49501                         12,
49502                         12,
49503                         12,
49504                         12,
49505                         12,
49506                         12,
49507                         12,
49508                         12,
49509                         12,
49510                         12,
49511                         12,
49512                         12,
49513                         12,
49514                         12,
49515                         12,
49516                         0,
49517                         1,
49518                         0,
49519                         1,
49520                         0,
49521                         1,
49522                         0,
49523                         1,
49524                         0,
49525                         1,
49526                         12,
49527                         12,
49528                         12,
49529                         12,
49530                         12,
49531                         12,
49532                         12,
49533                         12,
49534                         12,
49535                         12,
49536                         12,
49537                         12,
49538                         12,
49539                         12,
49540                         12,
49541                         12,
49542                         12,
49543                         12,
49544                         12,
49545                         12,
49546                         12,
49547                         12,
49548                         12,
49549                         12,
49550                         12,
49551                         12,
49552                         12,
49553                         12,
49554                         12,
49555                         12,
49556                         12,
49557                         12,
49558                         12,
49559                         12,
49560                         12,
49561                         12,
49562                         12,
49563                         12,
49564                         12,
49565                         12,
49566                         12,
49567                         12,
49568                         12,
49569                         12,
49570                         12,
49571                         12,
49572                         12,
49573                         12,
49574                         12,
49575                         12,
49576                         12,
49577                         0,
49578                         1,
49579                         0,
49580                         1,
49581                         0,
49582                         1,
49583                         0,
49584                         1,
49585                         0,
49586                         1,
49587                         0,
49588                         1,
49589                         0,
49590                         1,
49591                         0,
49592                         1,
49593                         0,
49594                         1,
49595                         0,
49596                         1,
49597                         0,
49598                         1,
49599                         12,
49600                         12,
49601                         12,
49602                         12,
49603                         12,
49604                         12,
49605                         12,
49606                         12,
49607                         12,
49608                         12,
49609                         12,
49610                         12,
49611                         12,
49612                         12,
49613                         12,
49614                         12,
49615                         12,
49616                         12,
49617                         12,
49618                         12,
49619                         12,
49620                         12,
49621                         12,
49622                         12,
49623                         12,
49624                         12,
49625                         12,
49626                         12,
49627                         12,
49628                         12,
49629                         12,
49630                         12,
49631                         12,
49632                         12,
49633                         12,
49634                         12,
49635                         12,
49636                         12,
49637                         12,
49638                         12,
49639                         12,
49640                         12,
49641                         12,
49642                         12,
49643                         12,
49644                         12,
49645                         12,
49646                         12,
49647                         12,
49648                         12,
49649                         12,
49650                         12,
49651                         12,
49652                         12,
49653                         12,
49654                         12,
49655                         12,
49656                         12,
49657                         12,
49658                         12,
49659                         12,
49660                         12,
49661                         12,
49662                         0,
49663                         1,
49664                         0,
49665                         1,
49666                         12,
49667                         12,
49668                         12,
49669                         12,
49670                         12,
49671                         12,
49672                         12,
49673                         12,
49674                         12,
49675                         12,
49676                         12,
49677                         12,
49678                         12,
49679                         12,
49680                         12,
49681                         12,
49682                         12,
49683                         12,
49684                         12,
49685                         12,
49686                         12,
49687                         12,
49688                         12,
49689                         12,
49690                         12,
49691                         12,
49692                         12,
49693                         12,
49694                         12,
49695                         12,
49696                         12,
49697                         12,
49698                         0,
49699                         1,
49700                         12,
49701                         12,
49702                         12,
49703                         12,
49704                         12,
49705                         12,
49706                         12,
49707                         12,
49708                         12,
49709                         12,
49710                         12,
49711                         12,
49712                         12,
49713                         12,
49714                         12,
49715                         12,
49716                         12,
49717                         12,
49718                         12,
49719                         12,
49720                         12,
49721                         12,
49722                         12,
49723                         12,
49724                         12,
49725                         12,
49726                         12,
49727                         12,
49728                         12,
49729                         12,
49730                         12,
49731                         12,
49732                         12,
49733                         12,
49734                         12,
49735                         12,
49736                         12,
49737                         12,
49738                         12,
49739                         12,
49740                         12,
49741                         12,
49742                         12,
49743                         12,
49744                         12,
49745                         12,
49746                         12,
49747                         12,
49748                         12,
49749                         12,
49750                         12,
49751                         12,
49752                         12,
49753                         12,
49754                         12,
49755                         29,
49756                         29,
49757                         29,
49758                         29,
49759                         29,
49760                         39,
49761                         39,
49762                         39,
49763                         39,
49764                         39,
49765                         39,
49766                         12,
49767                         12,
49768                         12,
49769                         12,
49770                         12,
49771                         12,
49772                         12,
49773                         12,
49774                         12,
49775                         12,
49776                         12,
49777                         12,
49778                         12,
49779                         12,
49780                         12,
49781                         12,
49782                         12,
49783                         12,
49784                         12,
49785                         12,
49786                         12,
49787                         12,
49788                         12,
49789                         12,
49790                         12,
49791                         12,
49792                         12,
49793                         12,
49794                         12,
49795                         12,
49796                         12,
49797                         12,
49798                         12,
49799                         12,
49800                         12,
49801                         12,
49802                         12,
49803                         12,
49804                         12,
49805                         12,
49806                         12,
49807                         12,
49808                         12,
49809                         12,
49810                         12,
49811                         12,
49812                         12,
49813                         21,
49814                         21,
49815                         21,
49816                         12,
49817                         12,
49818                         39,
49819                         39,
49820                         39,
49821                         39,
49822                         39,
49823                         6,
49824                         17,
49825                         17,
49826                         17,
49827                         12,
49828                         6,
49829                         17,
49830                         12,
49831                         12,
49832                         12,
49833                         12,
49834                         12,
49835                         12,
49836                         12,
49837                         12,
49838                         12,
49839                         12,
49840                         12,
49841                         12,
49842                         12,
49843                         12,
49844                         12,
49845                         12,
49846                         12,
49847                         12,
49848                         12,
49849                         12,
49850                         12,
49851                         12,
49852                         12,
49853                         12,
49854                         12,
49855                         12,
49856                         12,
49857                         12,
49858                         12,
49859                         12,
49860                         12,
49861                         12,
49862                         12,
49863                         12,
49864                         12,
49865                         12,
49866                         12,
49867                         12,
49868                         12,
49869                         12,
49870                         12,
49871                         12,
49872                         12,
49873                         12,
49874                         12,
49875                         12,
49876                         12,
49877                         12,
49878                         17,
49879                         39,
49880                         39,
49881                         39,
49882                         39,
49883                         39,
49884                         39,
49885                         39,
49886                         39,
49887                         39,
49888                         39,
49889                         39,
49890                         39,
49891                         39,
49892                         39,
49893                         21,
49894                         12,
49895                         12,
49896                         12,
49897                         12,
49898                         12,
49899                         12,
49900                         12,
49901                         12,
49902                         12,
49903                         12,
49904                         12,
49905                         12,
49906                         12,
49907                         12,
49908                         12,
49909                         12,
49910                         12,
49911                         12,
49912                         12,
49913                         12,
49914                         12,
49915                         12,
49916                         12,
49917                         12,
49918                         12,
49919                         12,
49920                         12,
49921                         12,
49922                         12,
49923                         12,
49924                         12,
49925                         12,
49926                         12,
49927                         12,
49928                         12,
49929                         12,
49930                         12,
49931                         12,
49932                         12,
49933                         12,
49934                         12,
49935                         12,
49936                         12,
49937                         12,
49938                         12,
49939                         12,
49940                         12,
49941                         12,
49942                         12,
49943                         12,
49944                         12,
49945                         12,
49946                         12,
49947                         12,
49948                         12,
49949                         12,
49950                         12,
49951                         12,
49952                         12,
49953                         12,
49954                         12,
49955                         12,
49956                         12,
49957                         39,
49958                         21,
49959                         21,
49960                         21,
49961                         21,
49962                         21,
49963                         21,
49964                         21,
49965                         21,
49966                         21,
49967                         21,
49968                         21,
49969                         21,
49970                         21,
49971                         21,
49972                         21,
49973                         21,
49974                         21,
49975                         21,
49976                         21,
49977                         21,
49978                         21,
49979                         21,
49980                         21,
49981                         21,
49982                         21,
49983                         21,
49984                         21,
49985                         21,
49986                         21,
49987                         21,
49988                         21,
49989                         21,
49990                         3,
49991                         3,
49992                         3,
49993                         3,
49994                         3,
49995                         3,
49996                         3,
49997                         3,
49998                         3,
49999                         3,
50000                         3,
50001                         3,
50002                         3,
50003                         3,
50004                         17,
50005                         17,
50006                         17,
50007                         17,
50008                         17,
50009                         17,
50010                         17,
50011                         17,
50012                         12,
50013                         17,
50014                         0,
50015                         17,
50016                         12,
50017                         12,
50018                         3,
50019                         3,
50020                         12,
50021                         12,
50022                         3,
50023                         3,
50024                         0,
50025                         1,
50026                         0,
50027                         1,
50028                         0,
50029                         1,
50030                         0,
50031                         1,
50032                         17,
50033                         17,
50034                         17,
50035                         17,
50036                         6,
50037                         12,
50038                         17,
50039                         17,
50040                         12,
50041                         17,
50042                         17,
50043                         12,
50044                         12,
50045                         12,
50046                         12,
50047                         12,
50048                         19,
50049                         19,
50050                         39,
50051                         39,
50052                         39,
50053                         39,
50054                         14,
50055                         14,
50056                         14,
50057                         14,
50058                         14,
50059                         14,
50060                         14,
50061                         14,
50062                         14,
50063                         14,
50064                         14,
50065                         14,
50066                         14,
50067                         14,
50068                         14,
50069                         14,
50070                         14,
50071                         14,
50072                         14,
50073                         14,
50074                         14,
50075                         14,
50076                         14,
50077                         14,
50078                         14,
50079                         14,
50080                         14,
50081                         14,
50082                         14,
50083                         14,
50084                         14,
50085                         14,
50086                         14,
50087                         1,
50088                         1,
50089                         14,
50090                         14,
50091                         5,
50092                         14,
50093                         14,
50094                         0,
50095                         1,
50096                         0,
50097                         1,
50098                         0,
50099                         1,
50100                         0,
50101                         1,
50102                         0,
50103                         1,
50104                         14,
50105                         14,
50106                         0,
50107                         1,
50108                         0,
50109                         1,
50110                         0,
50111                         1,
50112                         0,
50113                         1,
50114                         5,
50115                         0,
50116                         1,
50117                         1,
50118                         14,
50119                         14,
50120                         14,
50121                         14,
50122                         14,
50123                         14,
50124                         14,
50125                         14,
50126                         14,
50127                         14,
50128                         21,
50129                         21,
50130                         21,
50131                         21,
50132                         21,
50133                         21,
50134                         14,
50135                         14,
50136                         14,
50137                         14,
50138                         14,
50139                         14,
50140                         14,
50141                         14,
50142                         14,
50143                         14,
50144                         14,
50145                         5,
50146                         5,
50147                         14,
50148                         14,
50149                         14,
50150                         39,
50151                         32,
50152                         14,
50153                         32,
50154                         14,
50155                         32,
50156                         14,
50157                         32,
50158                         14,
50159                         32,
50160                         14,
50161                         14,
50162                         14,
50163                         14,
50164                         14,
50165                         14,
50166                         14,
50167                         14,
50168                         14,
50169                         14,
50170                         14,
50171                         14,
50172                         14,
50173                         14,
50174                         14,
50175                         14,
50176                         14,
50177                         14,
50178                         14,
50179                         14,
50180                         14,
50181                         14,
50182                         14,
50183                         14,
50184                         14,
50185                         32,
50186                         14,
50187                         14,
50188                         14,
50189                         14,
50190                         14,
50191                         14,
50192                         14,
50193                         14,
50194                         14,
50195                         14,
50196                         14,
50197                         14,
50198                         14,
50199                         14,
50200                         14,
50201                         14,
50202                         14,
50203                         14,
50204                         14,
50205                         14,
50206                         14,
50207                         14,
50208                         14,
50209                         14,
50210                         14,
50211                         14,
50212                         14,
50213                         14,
50214                         14,
50215                         14,
50216                         14,
50217                         32,
50218                         14,
50219                         32,
50220                         14,
50221                         32,
50222                         14,
50223                         14,
50224                         14,
50225                         14,
50226                         14,
50227                         14,
50228                         32,
50229                         14,
50230                         14,
50231                         14,
50232                         14,
50233                         14,
50234                         14,
50235                         32,
50236                         32,
50237                         39,
50238                         39,
50239                         21,
50240                         21,
50241                         5,
50242                         5,
50243                         5,
50244                         5,
50245                         14,
50246                         5,
50247                         32,
50248                         14,
50249                         32,
50250                         14,
50251                         32,
50252                         14,
50253                         32,
50254                         14,
50255                         32,
50256                         14,
50257                         14,
50258                         14,
50259                         14,
50260                         14,
50261                         14,
50262                         14,
50263                         14,
50264                         14,
50265                         14,
50266                         14,
50267                         14,
50268                         14,
50269                         14,
50270                         14,
50271                         14,
50272                         14,
50273                         14,
50274                         14,
50275                         14,
50276                         14,
50277                         14,
50278                         14,
50279                         14,
50280                         14,
50281                         32,
50282                         14,
50283                         14,
50284                         14,
50285                         14,
50286                         14,
50287                         14,
50288                         14,
50289                         14,
50290                         14,
50291                         14,
50292                         14,
50293                         14,
50294                         14,
50295                         14,
50296                         14,
50297                         14,
50298                         14,
50299                         14,
50300                         14,
50301                         14,
50302                         14,
50303                         14,
50304                         14,
50305                         14,
50306                         14,
50307                         14,
50308                         14,
50309                         14,
50310                         14,
50311                         14,
50312                         14,
50313                         32,
50314                         14,
50315                         32,
50316                         14,
50317                         32,
50318                         14,
50319                         14,
50320                         14,
50321                         14,
50322                         14,
50323                         14,
50324                         32,
50325                         14,
50326                         14,
50327                         14,
50328                         14,
50329                         14,
50330                         14,
50331                         32,
50332                         32,
50333                         14,
50334                         14,
50335                         14,
50336                         14,
50337                         5,
50338                         32,
50339                         5,
50340                         5,
50341                         14,
50342                         14,
50343                         14,
50344                         14,
50345                         14,
50346                         14,
50347                         14,
50348                         14,
50349                         14,
50350                         14,
50351                         14,
50352                         14,
50353                         14,
50354                         14,
50355                         14,
50356                         14,
50357                         14,
50358                         14,
50359                         14,
50360                         14,
50361                         14,
50362                         14,
50363                         14,
50364                         14,
50365                         14,
50366                         14,
50367                         14,
50368                         14,
50369                         14,
50370                         14,
50371                         14,
50372                         14,
50373                         14,
50374                         14,
50375                         14,
50376                         14,
50377                         14,
50378                         39,
50379                         39,
50380                         39,
50381                         39,
50382                         39,
50383                         39,
50384                         39,
50385                         39,
50386                         39,
50387                         39,
50388                         39,
50389                         39,
50390                         32,
50391                         32,
50392                         32,
50393                         32,
50394                         32,
50395                         32,
50396                         32,
50397                         32,
50398                         32,
50399                         32,
50400                         32,
50401                         32,
50402                         32,
50403                         32,
50404                         32,
50405                         32,
50406                         14,
50407                         14,
50408                         14,
50409                         14,
50410                         14,
50411                         14,
50412                         14,
50413                         14,
50414                         14,
50415                         14,
50416                         14,
50417                         14,
50418                         14,
50419                         14,
50420                         14,
50421                         14,
50422                         14,
50423                         14,
50424                         14,
50425                         14,
50426                         14,
50427                         14,
50428                         14,
50429                         14,
50430                         14,
50431                         14,
50432                         14,
50433                         14,
50434                         14,
50435                         14,
50436                         14,
50437                         14,
50438                         14,
50439                         14,
50440                         14,
50441                         14,
50442                         14,
50443                         14,
50444                         14,
50445                         14,
50446                         29,
50447                         29,
50448                         29,
50449                         29,
50450                         29,
50451                         29,
50452                         29,
50453                         29,
50454                         14,
50455                         14,
50456                         14,
50457                         14,
50458                         14,
50459                         14,
50460                         14,
50461                         14,
50462                         14,
50463                         14,
50464                         14,
50465                         14,
50466                         14,
50467                         14,
50468                         14,
50469                         14,
50470                         14,
50471                         14,
50472                         14,
50473                         14,
50474                         14,
50475                         14,
50476                         14,
50477                         14,
50478                         14,
50479                         14,
50480                         14,
50481                         14,
50482                         14,
50483                         14,
50484                         14,
50485                         14,
50486                         14,
50487                         14,
50488                         14,
50489                         14,
50490                         14,
50491                         14,
50492                         14,
50493                         14,
50494                         14,
50495                         14,
50496                         14,
50497                         14,
50498                         14,
50499                         14,
50500                         14,
50501                         14,
50502                         12,
50503                         12,
50504                         12,
50505                         12,
50506                         12,
50507                         12,
50508                         12,
50509                         12,
50510                         12,
50511                         12,
50512                         12,
50513                         12,
50514                         12,
50515                         12,
50516                         12,
50517                         12,
50518                         12,
50519                         12,
50520                         12,
50521                         12,
50522                         12,
50523                         12,
50524                         12,
50525                         12,
50526                         12,
50527                         12,
50528                         12,
50529                         12,
50530                         12,
50531                         12,
50532                         12,
50533                         12,
50534                         14,
50535                         14,
50536                         14,
50537                         14,
50538                         14,
50539                         14,
50540                         14,
50541                         14,
50542                         14,
50543                         14,
50544                         14,
50545                         14,
50546                         14,
50547                         14,
50548                         14,
50549                         14,
50550                         14,
50551                         14,
50552                         14,
50553                         14,
50554                         14,
50555                         14,
50556                         14,
50557                         14,
50558                         14,
50559                         14,
50560                         14,
50561                         14,
50562                         14,
50563                         14,
50564                         14,
50565                         14,
50566                         14,
50567                         14,
50568                         14,
50569                         14,
50570                         14,
50571                         14,
50572                         14,
50573                         14,
50574                         14,
50575                         14,
50576                         14,
50577                         14,
50578                         14,
50579                         14,
50580                         14,
50581                         14,
50582                         14,
50583                         14,
50584                         14,
50585                         14,
50586                         14,
50587                         5,
50588                         14,
50589                         14,
50590                         14,
50591                         14,
50592                         14,
50593                         14,
50594                         14,
50595                         14,
50596                         14,
50597                         14,
50598                         14,
50599                         14,
50600                         14,
50601                         14,
50602                         14,
50603                         14,
50604                         14,
50605                         14,
50606                         14,
50607                         14,
50608                         14,
50609                         14,
50610                         14,
50611                         14,
50612                         14,
50613                         14,
50614                         14,
50615                         14,
50616                         14,
50617                         14,
50618                         14,
50619                         14,
50620                         14,
50621                         14,
50622                         14,
50623                         14,
50624                         14,
50625                         14,
50626                         14,
50627                         14,
50628                         14,
50629                         14,
50630                         14,
50631                         14,
50632                         14,
50633                         14,
50634                         14,
50635                         14,
50636                         14,
50637                         39,
50638                         39,
50639                         39,
50640                         39,
50641                         39,
50642                         39,
50643                         39,
50644                         39,
50645                         39,
50646                         12,
50647                         12,
50648                         12,
50649                         12,
50650                         12,
50651                         12,
50652                         12,
50653                         12,
50654                         12,
50655                         12,
50656                         12,
50657                         12,
50658                         12,
50659                         12,
50660                         12,
50661                         12,
50662                         12,
50663                         12,
50664                         12,
50665                         12,
50666                         12,
50667                         12,
50668                         12,
50669                         12,
50670                         12,
50671                         12,
50672                         12,
50673                         12,
50674                         12,
50675                         12,
50676                         12,
50677                         12,
50678                         12,
50679                         12,
50680                         12,
50681                         12,
50682                         12,
50683                         12,
50684                         12,
50685                         12,
50686                         12,
50687                         12,
50688                         12,
50689                         12,
50690                         12,
50691                         12,
50692                         17,
50693                         17,
50694                         12,
50695                         12,
50696                         12,
50697                         12,
50698                         12,
50699                         12,
50700                         12,
50701                         12,
50702                         12,
50703                         12,
50704                         12,
50705                         12,
50706                         12,
50707                         12,
50708                         12,
50709                         12,
50710                         12,
50711                         12,
50712                         12,
50713                         12,
50714                         12,
50715                         12,
50716                         12,
50717                         12,
50718                         12,
50719                         12,
50720                         12,
50721                         12,
50722                         12,
50723                         12,
50724                         12,
50725                         12,
50726                         12,
50727                         12,
50728                         12,
50729                         12,
50730                         12,
50731                         12,
50732                         12,
50733                         12,
50734                         12,
50735                         12,
50736                         12,
50737                         12,
50738                         12,
50739                         17,
50740                         6,
50741                         17,
50742                         12,
50743                         12,
50744                         12,
50745                         12,
50746                         12,
50747                         12,
50748                         12,
50749                         12,
50750                         12,
50751                         12,
50752                         12,
50753                         12,
50754                         12,
50755                         12,
50756                         12,
50757                         12,
50758                         11,
50759                         11,
50760                         11,
50761                         11,
50762                         11,
50763                         11,
50764                         11,
50765                         11,
50766                         11,
50767                         11,
50768                         12,
50769                         12,
50770                         12,
50771                         12,
50772                         12,
50773                         12,
50774                         12,
50775                         12,
50776                         12,
50777                         12,
50778                         12,
50779                         12,
50780                         12,
50781                         12,
50782                         12,
50783                         12,
50784                         12,
50785                         12,
50786                         12,
50787                         12,
50788                         12,
50789                         12,
50790                         12,
50791                         12,
50792                         12,
50793                         12,
50794                         12,
50795                         12,
50796                         12,
50797                         12,
50798                         12,
50799                         12,
50800                         12,
50801                         12,
50802                         12,
50803                         12,
50804                         12,
50805                         12,
50806                         12,
50807                         12,
50808                         12,
50809                         12,
50810                         12,
50811                         12,
50812                         12,
50813                         12,
50814                         12,
50815                         12,
50816                         12,
50817                         12,
50818                         12,
50819                         12,
50820                         12,
50821                         12,
50822                         12,
50823                         12,
50824                         12,
50825                         12,
50826                         12,
50827                         12,
50828                         12,
50829                         12,
50830                         12,
50831                         12,
50832                         12,
50833                         12,
50834                         12,
50835                         12,
50836                         12,
50837                         21,
50838                         21,
50839                         21,
50840                         21,
50841                         12,
50842                         21,
50843                         21,
50844                         21,
50845                         21,
50846                         21,
50847                         21,
50848                         21,
50849                         21,
50850                         21,
50851                         21,
50852                         12,
50853                         12,
50854                         12,
50855                         12,
50856                         12,
50857                         12,
50858                         12,
50859                         12,
50860                         12,
50861                         12,
50862                         12,
50863                         12,
50864                         12,
50865                         12,
50866                         12,
50867                         12,
50868                         12,
50869                         12,
50870                         12,
50871                         12,
50872                         12,
50873                         12,
50874                         12,
50875                         12,
50876                         12,
50877                         12,
50878                         39,
50879                         39,
50880                         39,
50881                         39,
50882                         39,
50883                         39,
50884                         39,
50885                         21,
50886                         12,
50887                         12,
50888                         12,
50889                         12,
50890                         12,
50891                         12,
50892                         12,
50893                         12,
50894                         12,
50895                         12,
50896                         12,
50897                         12,
50898                         12,
50899                         12,
50900                         12,
50901                         12,
50902                         12,
50903                         12,
50904                         12,
50905                         12,
50906                         12,
50907                         12,
50908                         12,
50909                         12,
50910                         12,
50911                         12,
50912                         12,
50913                         12,
50914                         12,
50915                         12,
50916                         12,
50917                         12,
50918                         12,
50919                         12,
50920                         12,
50921                         12,
50922                         12,
50923                         12,
50924                         12,
50925                         12,
50926                         12,
50927                         12,
50928                         12,
50929                         12,
50930                         12,
50931                         12,
50932                         12,
50933                         12,
50934                         21,
50935                         21,
50936                         12,
50937                         17,
50938                         17,
50939                         17,
50940                         17,
50941                         17,
50942                         39,
50943                         39,
50944                         39,
50945                         39,
50946                         39,
50947                         39,
50948                         39,
50949                         39,
50950                         12,
50951                         12,
50952                         12,
50953                         12,
50954                         12,
50955                         12,
50956                         12,
50957                         12,
50958                         12,
50959                         12,
50960                         12,
50961                         12,
50962                         12,
50963                         12,
50964                         12,
50965                         12,
50966                         12,
50967                         12,
50968                         12,
50969                         12,
50970                         12,
50971                         12,
50972                         12,
50973                         12,
50974                         12,
50975                         12,
50976                         12,
50977                         12,
50978                         12,
50979                         12,
50980                         12,
50981                         12,
50982                         12,
50983                         12,
50984                         21,
50985                         12,
50986                         12,
50987                         12,
50988                         21,
50989                         12,
50990                         12,
50991                         12,
50992                         12,
50993                         21,
50994                         12,
50995                         12,
50996                         12,
50997                         12,
50998                         12,
50999                         12,
51000                         12,
51001                         12,
51002                         12,
51003                         12,
51004                         12,
51005                         12,
51006                         12,
51007                         12,
51008                         12,
51009                         12,
51010                         12,
51011                         12,
51012                         12,
51013                         12,
51014                         12,
51015                         12,
51016                         12,
51017                         21,
51018                         21,
51019                         21,
51020                         21,
51021                         21,
51022                         12,
51023                         12,
51024                         12,
51025                         12,
51026                         12,
51027                         12,
51028                         12,
51029                         12,
51030                         12,
51031                         12,
51032                         12,
51033                         12,
51034                         12,
51035                         12,
51036                         12,
51037                         12,
51038                         10,
51039                         12,
51040                         12,
51041                         12,
51042                         12,
51043                         12,
51044                         12,
51045                         12,
51046                         12,
51047                         12,
51048                         12,
51049                         12,
51050                         12,
51051                         12,
51052                         12,
51053                         12,
51054                         12,
51055                         12,
51056                         12,
51057                         12,
51058                         12,
51059                         12,
51060                         12,
51061                         12,
51062                         12,
51063                         12,
51064                         12,
51065                         12,
51066                         12,
51067                         12,
51068                         12,
51069                         12,
51070                         12,
51071                         12,
51072                         12,
51073                         12,
51074                         12,
51075                         12,
51076                         12,
51077                         12,
51078                         12,
51079                         12,
51080                         12,
51081                         12,
51082                         12,
51083                         12,
51084                         12,
51085                         12,
51086                         12,
51087                         12,
51088                         12,
51089                         12,
51090                         12,
51091                         12,
51092                         12,
51093                         12,
51094                         12,
51095                         12,
51096                         12,
51097                         12,
51098                         18,
51099                         18,
51100                         6,
51101                         6,
51102                         39,
51103                         39,
51104                         39,
51105                         39,
51106                         39,
51107                         39,
51108                         39,
51109                         39,
51110                         21,
51111                         21,
51112                         12,
51113                         12,
51114                         12,
51115                         12,
51116                         12,
51117                         12,
51118                         12,
51119                         12,
51120                         12,
51121                         12,
51122                         12,
51123                         12,
51124                         12,
51125                         12,
51126                         12,
51127                         12,
51128                         12,
51129                         12,
51130                         12,
51131                         12,
51132                         12,
51133                         12,
51134                         12,
51135                         12,
51136                         12,
51137                         12,
51138                         12,
51139                         12,
51140                         12,
51141                         12,
51142                         12,
51143                         12,
51144                         12,
51145                         12,
51146                         12,
51147                         12,
51148                         12,
51149                         12,
51150                         12,
51151                         12,
51152                         12,
51153                         12,
51154                         12,
51155                         12,
51156                         12,
51157                         12,
51158                         12,
51159                         12,
51160                         12,
51161                         12,
51162                         21,
51163                         21,
51164                         21,
51165                         21,
51166                         21,
51167                         21,
51168                         21,
51169                         21,
51170                         21,
51171                         21,
51172                         21,
51173                         21,
51174                         21,
51175                         21,
51176                         21,
51177                         21,
51178                         21,
51179                         39,
51180                         39,
51181                         39,
51182                         39,
51183                         39,
51184                         39,
51185                         39,
51186                         39,
51187                         39,
51188                         17,
51189                         17,
51190                         11,
51191                         11,
51192                         11,
51193                         11,
51194                         11,
51195                         11,
51196                         11,
51197                         11,
51198                         11,
51199                         11,
51200                         39,
51201                         39,
51202                         39,
51203                         39,
51204                         39,
51205                         39,
51206                         21,
51207                         21,
51208                         21,
51209                         21,
51210                         21,
51211                         21,
51212                         21,
51213                         21,
51214                         21,
51215                         21,
51216                         21,
51217                         21,
51218                         21,
51219                         21,
51220                         21,
51221                         21,
51222                         21,
51223                         21,
51224                         12,
51225                         12,
51226                         12,
51227                         12,
51228                         12,
51229                         12,
51230                         12,
51231                         12,
51232                         12,
51233                         12,
51234                         39,
51235                         39,
51236                         39,
51237                         39,
51238                         11,
51239                         11,
51240                         11,
51241                         11,
51242                         11,
51243                         11,
51244                         11,
51245                         11,
51246                         11,
51247                         11,
51248                         12,
51249                         12,
51250                         12,
51251                         12,
51252                         12,
51253                         12,
51254                         12,
51255                         12,
51256                         12,
51257                         12,
51258                         12,
51259                         12,
51260                         12,
51261                         12,
51262                         12,
51263                         12,
51264                         12,
51265                         12,
51266                         12,
51267                         12,
51268                         12,
51269                         12,
51270                         12,
51271                         12,
51272                         12,
51273                         12,
51274                         12,
51275                         12,
51276                         21,
51277                         21,
51278                         21,
51279                         21,
51280                         21,
51281                         21,
51282                         21,
51283                         21,
51284                         17,
51285                         17,
51286                         12,
51287                         12,
51288                         12,
51289                         12,
51290                         12,
51291                         12,
51292                         12,
51293                         12,
51294                         12,
51295                         12,
51296                         12,
51297                         12,
51298                         12,
51299                         12,
51300                         12,
51301                         12,
51302                         12,
51303                         12,
51304                         12,
51305                         12,
51306                         12,
51307                         12,
51308                         12,
51309                         21,
51310                         21,
51311                         21,
51312                         21,
51313                         21,
51314                         21,
51315                         21,
51316                         21,
51317                         21,
51318                         21,
51319                         21,
51320                         21,
51321                         21,
51322                         39,
51323                         39,
51324                         39,
51325                         39,
51326                         39,
51327                         39,
51328                         39,
51329                         39,
51330                         39,
51331                         39,
51332                         39,
51333                         12,
51334                         25,
51335                         25,
51336                         25,
51337                         25,
51338                         25,
51339                         25,
51340                         25,
51341                         25,
51342                         25,
51343                         25,
51344                         25,
51345                         25,
51346                         25,
51347                         25,
51348                         25,
51349                         25,
51350                         25,
51351                         25,
51352                         25,
51353                         25,
51354                         25,
51355                         25,
51356                         25,
51357                         25,
51358                         25,
51359                         25,
51360                         25,
51361                         25,
51362                         25,
51363                         39,
51364                         39,
51365                         39,
51366                         21,
51367                         21,
51368                         21,
51369                         21,
51370                         12,
51371                         12,
51372                         12,
51373                         12,
51374                         12,
51375                         12,
51376                         12,
51377                         12,
51378                         12,
51379                         12,
51380                         12,
51381                         12,
51382                         12,
51383                         12,
51384                         12,
51385                         12,
51386                         12,
51387                         12,
51388                         12,
51389                         12,
51390                         12,
51391                         12,
51392                         12,
51393                         12,
51394                         12,
51395                         12,
51396                         12,
51397                         12,
51398                         12,
51399                         12,
51400                         12,
51401                         12,
51402                         12,
51403                         12,
51404                         12,
51405                         12,
51406                         12,
51407                         12,
51408                         12,
51409                         12,
51410                         12,
51411                         12,
51412                         12,
51413                         12,
51414                         12,
51415                         12,
51416                         12,
51417                         21,
51418                         21,
51419                         21,
51420                         21,
51421                         21,
51422                         21,
51423                         21,
51424                         21,
51425                         21,
51426                         21,
51427                         21,
51428                         21,
51429                         21,
51430                         21,
51431                         12,
51432                         12,
51433                         12,
51434                         12,
51435                         12,
51436                         12,
51437                         17,
51438                         17,
51439                         17,
51440                         12,
51441                         12,
51442                         12,
51443                         12,
51444                         12,
51445                         12,
51446                         11,
51447                         11,
51448                         11,
51449                         11,
51450                         11,
51451                         11,
51452                         11,
51453                         11,
51454                         11,
51455                         11,
51456                         39,
51457                         39,
51458                         39,
51459                         39,
51460                         12,
51461                         12,
51462                         12,
51463                         12,
51464                         12,
51465                         12,
51466                         12,
51467                         12,
51468                         12,
51469                         12,
51470                         12,
51471                         12,
51472                         12,
51473                         12,
51474                         12,
51475                         12,
51476                         12,
51477                         12,
51478                         12,
51479                         12,
51480                         12,
51481                         12,
51482                         12,
51483                         12,
51484                         12,
51485                         12,
51486                         12,
51487                         12,
51488                         12,
51489                         12,
51490                         12,
51491                         12,
51492                         12,
51493                         12,
51494                         12,
51495                         12,
51496                         12,
51497                         12,
51498                         12,
51499                         12,
51500                         12,
51501                         12,
51502                         12,
51503                         21,
51504                         21,
51505                         21,
51506                         21,
51507                         21,
51508                         21,
51509                         21,
51510                         21,
51511                         21,
51512                         21,
51513                         21,
51514                         21,
51515                         21,
51516                         21,
51517                         39,
51518                         39,
51519                         39,
51520                         39,
51521                         39,
51522                         39,
51523                         39,
51524                         39,
51525                         39,
51526                         12,
51527                         12,
51528                         12,
51529                         21,
51530                         12,
51531                         12,
51532                         12,
51533                         12,
51534                         12,
51535                         12,
51536                         12,
51537                         12,
51538                         21,
51539                         21,
51540                         39,
51541                         39,
51542                         11,
51543                         11,
51544                         11,
51545                         11,
51546                         11,
51547                         11,
51548                         11,
51549                         11,
51550                         11,
51551                         11,
51552                         39,
51553                         39,
51554                         12,
51555                         17,
51556                         17,
51557                         17,
51558                         36,
51559                         36,
51560                         36,
51561                         36,
51562                         36,
51563                         36,
51564                         36,
51565                         36,
51566                         36,
51567                         36,
51568                         36,
51569                         36,
51570                         36,
51571                         36,
51572                         36,
51573                         36,
51574                         36,
51575                         36,
51576                         36,
51577                         36,
51578                         36,
51579                         36,
51580                         36,
51581                         36,
51582                         36,
51583                         36,
51584                         36,
51585                         36,
51586                         36,
51587                         36,
51588                         36,
51589                         36,
51590                         12,
51591                         12,
51592                         12,
51593                         12,
51594                         12,
51595                         12,
51596                         12,
51597                         12,
51598                         12,
51599                         12,
51600                         12,
51601                         21,
51602                         21,
51603                         21,
51604                         21,
51605                         21,
51606                         17,
51607                         17,
51608                         12,
51609                         12,
51610                         12,
51611                         21,
51612                         21,
51613                         39,
51614                         39,
51615                         39,
51616                         39,
51617                         39,
51618                         39,
51619                         39,
51620                         39,
51621                         39,
51622                         39,
51623                         12,
51624                         12,
51625                         12,
51626                         12,
51627                         12,
51628                         12,
51629                         12,
51630                         12,
51631                         12,
51632                         12,
51633                         12,
51634                         12,
51635                         12,
51636                         12,
51637                         12,
51638                         12,
51639                         12,
51640                         12,
51641                         12,
51642                         12,
51643                         12,
51644                         12,
51645                         12,
51646                         12,
51647                         12,
51648                         12,
51649                         12,
51650                         12,
51651                         12,
51652                         12,
51653                         12,
51654                         12,
51655                         12,
51656                         12,
51657                         12,
51658                         12,
51659                         12,
51660                         12,
51661                         12,
51662                         12,
51663                         12,
51664                         12,
51665                         12,
51666                         12,
51667                         12,
51668                         12,
51669                         12,
51670                         12,
51671                         12,
51672                         12,
51673                         12,
51674                         12,
51675                         12,
51676                         12,
51677                         12,
51678                         12,
51679                         12,
51680                         12,
51681                         12,
51682                         12,
51683                         12,
51684                         12,
51685                         12,
51686                         12,
51687                         12,
51688                         12,
51689                         21,
51690                         21,
51691                         21,
51692                         21,
51693                         21,
51694                         21,
51695                         21,
51696                         21,
51697                         17,
51698                         21,
51699                         21,
51700                         39,
51701                         39,
51702                         11,
51703                         11,
51704                         11,
51705                         11,
51706                         11,
51707                         11,
51708                         11,
51709                         11,
51710                         11,
51711                         11,
51712                         39,
51713                         39,
51714                         39,
51715                         39,
51716                         39,
51717                         39,
51718                         23,
51719                         24,
51720                         24,
51721                         24,
51722                         24,
51723                         24,
51724                         24,
51725                         24,
51726                         24,
51727                         24,
51728                         24,
51729                         24,
51730                         24,
51731                         24,
51732                         24,
51733                         24,
51734                         24,
51735                         24,
51736                         24,
51737                         24,
51738                         24,
51739                         24,
51740                         24,
51741                         24,
51742                         24,
51743                         24,
51744                         24,
51745                         24,
51746                         23,
51747                         24,
51748                         24,
51749                         24,
51750                         24,
51751                         24,
51752                         24,
51753                         24,
51754                         24,
51755                         24,
51756                         24,
51757                         24,
51758                         24,
51759                         24,
51760                         24,
51761                         24,
51762                         24,
51763                         24,
51764                         24,
51765                         24,
51766                         24,
51767                         24,
51768                         24,
51769                         24,
51770                         24,
51771                         24,
51772                         24,
51773                         24,
51774                         23,
51775                         24,
51776                         24,
51777                         24,
51778                         24,
51779                         24,
51780                         24,
51781                         24,
51782                         24,
51783                         24,
51784                         24,
51785                         24,
51786                         24,
51787                         24,
51788                         24,
51789                         24,
51790                         24,
51791                         24,
51792                         24,
51793                         24,
51794                         24,
51795                         24,
51796                         24,
51797                         24,
51798                         24,
51799                         24,
51800                         24,
51801                         24,
51802                         23,
51803                         24,
51804                         24,
51805                         24,
51806                         24,
51807                         24,
51808                         24,
51809                         24,
51810                         24,
51811                         24,
51812                         24,
51813                         24,
51814                         24,
51815                         24,
51816                         24,
51817                         24,
51818                         24,
51819                         24,
51820                         24,
51821                         24,
51822                         24,
51823                         24,
51824                         24,
51825                         24,
51826                         24,
51827                         24,
51828                         24,
51829                         24,
51830                         23,
51831                         24,
51832                         24,
51833                         24,
51834                         24,
51835                         24,
51836                         24,
51837                         24,
51838                         24,
51839                         24,
51840                         24,
51841                         24,
51842                         24,
51843                         24,
51844                         24,
51845                         24,
51846                         24,
51847                         24,
51848                         24,
51849                         24,
51850                         24,
51851                         24,
51852                         24,
51853                         24,
51854                         24,
51855                         24,
51856                         24,
51857                         24,
51858                         23,
51859                         24,
51860                         24,
51861                         24,
51862                         24,
51863                         24,
51864                         24,
51865                         24,
51866                         24,
51867                         24,
51868                         24,
51869                         24,
51870                         24,
51871                         24,
51872                         24,
51873                         24,
51874                         24,
51875                         24,
51876                         24,
51877                         24,
51878                         24,
51879                         24,
51880                         24,
51881                         24,
51882                         24,
51883                         24,
51884                         24,
51885                         24,
51886                         23,
51887                         24,
51888                         24,
51889                         24,
51890                         24,
51891                         24,
51892                         24,
51893                         24,
51894                         24,
51895                         24,
51896                         24,
51897                         24,
51898                         24,
51899                         24,
51900                         24,
51901                         24,
51902                         24,
51903                         24,
51904                         24,
51905                         24,
51906                         24,
51907                         24,
51908                         24,
51909                         24,
51910                         24,
51911                         24,
51912                         24,
51913                         24,
51914                         23,
51915                         24,
51916                         24,
51917                         24,
51918                         24,
51919                         24,
51920                         24,
51921                         24,
51922                         24,
51923                         24,
51924                         24,
51925                         24,
51926                         24,
51927                         24,
51928                         24,
51929                         24,
51930                         24,
51931                         24,
51932                         24,
51933                         24,
51934                         24,
51935                         24,
51936                         24,
51937                         24,
51938                         24,
51939                         24,
51940                         24,
51941                         24,
51942                         23,
51943                         24,
51944                         24,
51945                         24,
51946                         24,
51947                         24,
51948                         24,
51949                         24,
51950                         24,
51951                         24,
51952                         24,
51953                         24,
51954                         24,
51955                         24,
51956                         24,
51957                         24,
51958                         24,
51959                         24,
51960                         24,
51961                         24,
51962                         24,
51963                         24,
51964                         24,
51965                         24,
51966                         24,
51967                         24,
51968                         24,
51969                         24,
51970                         23,
51971                         24,
51972                         24,
51973                         24,
51974                         24,
51975                         24,
51976                         24,
51977                         24,
51978                         24,
51979                         24,
51980                         24,
51981                         24,
51982                         24,
51983                         24,
51984                         24,
51985                         24,
51986                         24,
51987                         24,
51988                         24,
51989                         24,
51990                         24,
51991                         24,
51992                         24,
51993                         24,
51994                         24,
51995                         24,
51996                         24,
51997                         24,
51998                         23,
51999                         24,
52000                         24,
52001                         24,
52002                         24,
52003                         24,
52004                         24,
52005                         24,
52006                         24,
52007                         24,
52008                         24,
52009                         24,
52010                         24,
52011                         24,
52012                         24,
52013                         24,
52014                         24,
52015                         24,
52016                         24,
52017                         24,
52018                         24,
52019                         24,
52020                         24,
52021                         24,
52022                         24,
52023                         24,
52024                         24,
52025                         24,
52026                         23,
52027                         24,
52028                         24,
52029                         24,
52030                         24,
52031                         24,
52032                         24,
52033                         24,
52034                         24,
52035                         24,
52036                         24,
52037                         24,
52038                         24,
52039                         24,
52040                         24,
52041                         24,
52042                         24,
52043                         24,
52044                         24,
52045                         24,
52046                         24,
52047                         24,
52048                         24,
52049                         24,
52050                         24,
52051                         24,
52052                         24,
52053                         24,
52054                         23,
52055                         24,
52056                         24,
52057                         24,
52058                         24,
52059                         24,
52060                         24,
52061                         24,
52062                         24,
52063                         24,
52064                         24,
52065                         24,
52066                         24,
52067                         24,
52068                         24,
52069                         24,
52070                         24,
52071                         24,
52072                         24,
52073                         24,
52074                         24,
52075                         24,
52076                         24,
52077                         24,
52078                         24,
52079                         24,
52080                         24,
52081                         24,
52082                         23,
52083                         24,
52084                         24,
52085                         24,
52086                         24,
52087                         24,
52088                         24,
52089                         24,
52090                         24,
52091                         24,
52092                         24,
52093                         24,
52094                         24,
52095                         24,
52096                         24,
52097                         24,
52098                         24,
52099                         24,
52100                         24,
52101                         24,
52102                         24,
52103                         24,
52104                         24,
52105                         24,
52106                         24,
52107                         24,
52108                         24,
52109                         24,
52110                         23,
52111                         24,
52112                         24,
52113                         24,
52114                         24,
52115                         24,
52116                         24,
52117                         24,
52118                         24,
52119                         24,
52120                         24,
52121                         24,
52122                         24,
52123                         24,
52124                         24,
52125                         24,
52126                         24,
52127                         24,
52128                         24,
52129                         24,
52130                         24,
52131                         24,
52132                         24,
52133                         24,
52134                         24,
52135                         24,
52136                         24,
52137                         24,
52138                         23,
52139                         24,
52140                         24,
52141                         24,
52142                         24,
52143                         24,
52144                         24,
52145                         24,
52146                         24,
52147                         24,
52148                         24,
52149                         24,
52150                         24,
52151                         24,
52152                         24,
52153                         24,
52154                         24,
52155                         24,
52156                         24,
52157                         24,
52158                         24,
52159                         24,
52160                         24,
52161                         24,
52162                         24,
52163                         24,
52164                         24,
52165                         24,
52166                         23,
52167                         24,
52168                         24,
52169                         24,
52170                         24,
52171                         24,
52172                         24,
52173                         24,
52174                         24,
52175                         24,
52176                         24,
52177                         24,
52178                         24,
52179                         24,
52180                         24,
52181                         24,
52182                         24,
52183                         24,
52184                         24,
52185                         24,
52186                         24,
52187                         24,
52188                         24,
52189                         24,
52190                         24,
52191                         24,
52192                         24,
52193                         24,
52194                         23,
52195                         24,
52196                         24,
52197                         24,
52198                         24,
52199                         24,
52200                         24,
52201                         24,
52202                         24,
52203                         24,
52204                         24,
52205                         24,
52206                         24,
52207                         24,
52208                         24,
52209                         24,
52210                         24,
52211                         24,
52212                         24,
52213                         24,
52214                         24,
52215                         24,
52216                         24,
52217                         24,
52218                         24,
52219                         24,
52220                         24,
52221                         24,
52222                         23,
52223                         24,
52224                         24,
52225                         24,
52226                         24,
52227                         24,
52228                         24,
52229                         24,
52230                         24,
52231                         24,
52232                         24,
52233                         24,
52234                         24,
52235                         24,
52236                         24,
52237                         24,
52238                         24,
52239                         24,
52240                         24,
52241                         24,
52242                         24,
52243                         24,
52244                         24,
52245                         24,
52246                         24,
52247                         24,
52248                         24,
52249                         24,
52250                         23,
52251                         24,
52252                         24,
52253                         24,
52254                         24,
52255                         24,
52256                         24,
52257                         24,
52258                         24,
52259                         24,
52260                         24,
52261                         24,
52262                         24,
52263                         24,
52264                         24,
52265                         24,
52266                         24,
52267                         24,
52268                         24,
52269                         24,
52270                         24,
52271                         24,
52272                         24,
52273                         24,
52274                         24,
52275                         24,
52276                         24,
52277                         24,
52278                         23,
52279                         24,
52280                         24,
52281                         24,
52282                         24,
52283                         24,
52284                         24,
52285                         24,
52286                         24,
52287                         24,
52288                         24,
52289                         24,
52290                         24,
52291                         24,
52292                         24,
52293                         24,
52294                         24,
52295                         24,
52296                         24,
52297                         24,
52298                         24,
52299                         24,
52300                         24,
52301                         24,
52302                         24,
52303                         24,
52304                         24,
52305                         24,
52306                         23,
52307                         24,
52308                         24,
52309                         24,
52310                         24,
52311                         24,
52312                         24,
52313                         24,
52314                         24,
52315                         24,
52316                         24,
52317                         24,
52318                         24,
52319                         24,
52320                         24,
52321                         24,
52322                         24,
52323                         24,
52324                         24,
52325                         24,
52326                         24,
52327                         24,
52328                         24,
52329                         24,
52330                         24,
52331                         24,
52332                         24,
52333                         24,
52334                         23,
52335                         24,
52336                         24,
52337                         24,
52338                         24,
52339                         24,
52340                         24,
52341                         24,
52342                         24,
52343                         24,
52344                         24,
52345                         24,
52346                         24,
52347                         24,
52348                         24,
52349                         24,
52350                         24,
52351                         24,
52352                         24,
52353                         24,
52354                         24,
52355                         24,
52356                         24,
52357                         24,
52358                         24,
52359                         24,
52360                         24,
52361                         24,
52362                         23,
52363                         24,
52364                         24,
52365                         24,
52366                         24,
52367                         24,
52368                         24,
52369                         24,
52370                         24,
52371                         24,
52372                         24,
52373                         24,
52374                         24,
52375                         24,
52376                         24,
52377                         24,
52378                         24,
52379                         24,
52380                         24,
52381                         24,
52382                         24,
52383                         24,
52384                         24,
52385                         24,
52386                         24,
52387                         24,
52388                         24,
52389                         24,
52390                         23,
52391                         24,
52392                         24,
52393                         24,
52394                         24,
52395                         24,
52396                         24,
52397                         24,
52398                         24,
52399                         24,
52400                         24,
52401                         24,
52402                         24,
52403                         24,
52404                         24,
52405                         24,
52406                         24,
52407                         24,
52408                         24,
52409                         24,
52410                         24,
52411                         24,
52412                         24,
52413                         24,
52414                         24,
52415                         24,
52416                         24,
52417                         24,
52418                         23,
52419                         24,
52420                         24,
52421                         24,
52422                         24,
52423                         24,
52424                         24,
52425                         24,
52426                         24,
52427                         24,
52428                         24,
52429                         24,
52430                         24,
52431                         24,
52432                         24,
52433                         24,
52434                         24,
52435                         24,
52436                         24,
52437                         24,
52438                         24,
52439                         24,
52440                         24,
52441                         24,
52442                         24,
52443                         24,
52444                         24,
52445                         24,
52446                         23,
52447                         24,
52448                         24,
52449                         24,
52450                         24,
52451                         24,
52452                         24,
52453                         24,
52454                         24,
52455                         24,
52456                         24,
52457                         24,
52458                         24,
52459                         24,
52460                         24,
52461                         24,
52462                         24,
52463                         24,
52464                         24,
52465                         24,
52466                         24,
52467                         24,
52468                         24,
52469                         24,
52470                         24,
52471                         24,
52472                         24,
52473                         24,
52474                         23,
52475                         24,
52476                         24,
52477                         24,
52478                         24,
52479                         24,
52480                         24,
52481                         24,
52482                         24,
52483                         24,
52484                         24,
52485                         24,
52486                         24,
52487                         24,
52488                         24,
52489                         24,
52490                         24,
52491                         24,
52492                         24,
52493                         24,
52494                         24,
52495                         24,
52496                         24,
52497                         24,
52498                         24,
52499                         24,
52500                         24,
52501                         24,
52502                         23,
52503                         24,
52504                         24,
52505                         24,
52506                         24,
52507                         24,
52508                         24,
52509                         24,
52510                         24,
52511                         24,
52512                         24,
52513                         24,
52514                         24,
52515                         24,
52516                         24,
52517                         24,
52518                         24,
52519                         24,
52520                         24,
52521                         24,
52522                         24,
52523                         24,
52524                         24,
52525                         24,
52526                         24,
52527                         24,
52528                         24,
52529                         24,
52530                         23,
52531                         24,
52532                         24,
52533                         24,
52534                         24,
52535                         24,
52536                         24,
52537                         24,
52538                         24,
52539                         24,
52540                         24,
52541                         24,
52542                         24,
52543                         24,
52544                         24,
52545                         24,
52546                         24,
52547                         24,
52548                         24,
52549                         24,
52550                         24,
52551                         24,
52552                         24,
52553                         24,
52554                         24,
52555                         24,
52556                         24,
52557                         24,
52558                         23,
52559                         24,
52560                         24,
52561                         24,
52562                         24,
52563                         24,
52564                         24,
52565                         24,
52566                         24,
52567                         24,
52568                         24,
52569                         24,
52570                         24,
52571                         24,
52572                         24,
52573                         24,
52574                         24,
52575                         24,
52576                         24,
52577                         24,
52578                         24,
52579                         24,
52580                         24,
52581                         24,
52582                         24,
52583                         24,
52584                         24,
52585                         24,
52586                         23,
52587                         24,
52588                         24,
52589                         24,
52590                         24,
52591                         24,
52592                         24,
52593                         24,
52594                         24,
52595                         24,
52596                         24,
52597                         24,
52598                         24,
52599                         24,
52600                         24,
52601                         24,
52602                         24,
52603                         24,
52604                         24,
52605                         24,
52606                         24,
52607                         24,
52608                         24,
52609                         24,
52610                         24,
52611                         24,
52612                         24,
52613                         24,
52614                         23,
52615                         24,
52616                         24,
52617                         24,
52618                         24,
52619                         24,
52620                         24,
52621                         24,
52622                         24,
52623                         24,
52624                         24,
52625                         24,
52626                         24,
52627                         24,
52628                         24,
52629                         24,
52630                         24,
52631                         24,
52632                         24,
52633                         24,
52634                         24,
52635                         24,
52636                         24,
52637                         24,
52638                         24,
52639                         24,
52640                         24,
52641                         24,
52642                         23,
52643                         24,
52644                         24,
52645                         24,
52646                         24,
52647                         24,
52648                         24,
52649                         24,
52650                         24,
52651                         24,
52652                         24,
52653                         24,
52654                         24,
52655                         24,
52656                         24,
52657                         24,
52658                         24,
52659                         24,
52660                         24,
52661                         24,
52662                         24,
52663                         24,
52664                         24,
52665                         24,
52666                         24,
52667                         24,
52668                         24,
52669                         24,
52670                         23,
52671                         24,
52672                         24,
52673                         24,
52674                         24,
52675                         24,
52676                         24,
52677                         24,
52678                         24,
52679                         24,
52680                         24,
52681                         24,
52682                         24,
52683                         24,
52684                         24,
52685                         24,
52686                         24,
52687                         24,
52688                         24,
52689                         24,
52690                         24,
52691                         24,
52692                         24,
52693                         24,
52694                         24,
52695                         24,
52696                         24,
52697                         24,
52698                         23,
52699                         24,
52700                         24,
52701                         24,
52702                         24,
52703                         24,
52704                         24,
52705                         24,
52706                         24,
52707                         24,
52708                         24,
52709                         24,
52710                         24,
52711                         24,
52712                         24,
52713                         24,
52714                         24,
52715                         24,
52716                         24,
52717                         24,
52718                         24,
52719                         24,
52720                         24,
52721                         24,
52722                         24,
52723                         24,
52724                         24,
52725                         24,
52726                         23,
52727                         24,
52728                         24,
52729                         24,
52730                         24,
52731                         24,
52732                         24,
52733                         24,
52734                         24,
52735                         24,
52736                         24,
52737                         24,
52738                         24,
52739                         24,
52740                         24,
52741                         24,
52742                         24,
52743                         24,
52744                         24,
52745                         24,
52746                         24,
52747                         24,
52748                         24,
52749                         24,
52750                         24,
52751                         24,
52752                         24,
52753                         24,
52754                         23,
52755                         24,
52756                         24,
52757                         24,
52758                         24,
52759                         24,
52760                         24,
52761                         24,
52762                         24,
52763                         24,
52764                         24,
52765                         24,
52766                         24,
52767                         24,
52768                         24,
52769                         24,
52770                         24,
52771                         24,
52772                         24,
52773                         24,
52774                         24,
52775                         24,
52776                         24,
52777                         24,
52778                         24,
52779                         24,
52780                         24,
52781                         24,
52782                         23,
52783                         24,
52784                         24,
52785                         24,
52786                         24,
52787                         24,
52788                         24,
52789                         24,
52790                         24,
52791                         24,
52792                         24,
52793                         24,
52794                         24,
52795                         24,
52796                         24,
52797                         24,
52798                         24,
52799                         24,
52800                         24,
52801                         24,
52802                         24,
52803                         24,
52804                         24,
52805                         24,
52806                         24,
52807                         24,
52808                         24,
52809                         24,
52810                         23,
52811                         24,
52812                         24,
52813                         24,
52814                         24,
52815                         24,
52816                         24,
52817                         24,
52818                         24,
52819                         24,
52820                         24,
52821                         24,
52822                         24,
52823                         24,
52824                         24,
52825                         24,
52826                         24,
52827                         24,
52828                         24,
52829                         24,
52830                         24,
52831                         24,
52832                         24,
52833                         24,
52834                         24,
52835                         24,
52836                         24,
52837                         24,
52838                         23,
52839                         24,
52840                         24,
52841                         24,
52842                         24,
52843                         24,
52844                         24,
52845                         24,
52846                         24,
52847                         24,
52848                         24,
52849                         24,
52850                         24,
52851                         24,
52852                         24,
52853                         24,
52854                         24,
52855                         24,
52856                         24,
52857                         24,
52858                         24,
52859                         24,
52860                         24,
52861                         24,
52862                         24,
52863                         24,
52864                         24,
52865                         24,
52866                         23,
52867                         24,
52868                         24,
52869                         24,
52870                         24,
52871                         24,
52872                         24,
52873                         24,
52874                         24,
52875                         24,
52876                         24,
52877                         24,
52878                         24,
52879                         24,
52880                         24,
52881                         24,
52882                         24,
52883                         24,
52884                         24,
52885                         24,
52886                         24,
52887                         24,
52888                         24,
52889                         24,
52890                         24,
52891                         24,
52892                         24,
52893                         24,
52894                         23,
52895                         24,
52896                         24,
52897                         24,
52898                         24,
52899                         24,
52900                         24,
52901                         24,
52902                         24,
52903                         24,
52904                         24,
52905                         24,
52906                         24,
52907                         24,
52908                         24,
52909                         24,
52910                         24,
52911                         24,
52912                         24,
52913                         24,
52914                         24,
52915                         24,
52916                         24,
52917                         24,
52918                         24,
52919                         24,
52920                         24,
52921                         24,
52922                         23,
52923                         24,
52924                         24,
52925                         24,
52926                         24,
52927                         24,
52928                         24,
52929                         24,
52930                         24,
52931                         24,
52932                         24,
52933                         24,
52934                         24,
52935                         24,
52936                         24,
52937                         24,
52938                         24,
52939                         24,
52940                         24,
52941                         24,
52942                         24,
52943                         24,
52944                         24,
52945                         24,
52946                         24,
52947                         24,
52948                         24,
52949                         24,
52950                         23,
52951                         24,
52952                         24,
52953                         24,
52954                         24,
52955                         24,
52956                         24,
52957                         24,
52958                         24,
52959                         24,
52960                         24,
52961                         24,
52962                         24,
52963                         24,
52964                         24,
52965                         24,
52966                         24,
52967                         24,
52968                         24,
52969                         24,
52970                         24,
52971                         24,
52972                         24,
52973                         24,
52974                         24,
52975                         24,
52976                         24,
52977                         24,
52978                         23,
52979                         24,
52980                         24,
52981                         24,
52982                         24,
52983                         24,
52984                         24,
52985                         24,
52986                         24,
52987                         24,
52988                         24,
52989                         24,
52990                         24,
52991                         24,
52992                         24,
52993                         24,
52994                         24,
52995                         24,
52996                         24,
52997                         24,
52998                         24,
52999                         24,
53000                         24,
53001                         24,
53002                         24,
53003                         24,
53004                         24,
53005                         24,
53006                         23,
53007                         24,
53008                         24,
53009                         24,
53010                         24,
53011                         24,
53012                         24,
53013                         24,
53014                         24,
53015                         24,
53016                         24,
53017                         24,
53018                         24,
53019                         24,
53020                         24,
53021                         24,
53022                         24,
53023                         24,
53024                         24,
53025                         24,
53026                         24,
53027                         24,
53028                         24,
53029                         24,
53030                         24,
53031                         24,
53032                         24,
53033                         24,
53034                         23,
53035                         24,
53036                         24,
53037                         24,
53038                         24,
53039                         24,
53040                         24,
53041                         24,
53042                         24,
53043                         24,
53044                         24,
53045                         24,
53046                         24,
53047                         24,
53048                         24,
53049                         24,
53050                         24,
53051                         24,
53052                         24,
53053                         24,
53054                         24,
53055                         24,
53056                         24,
53057                         24,
53058                         24,
53059                         24,
53060                         24,
53061                         24,
53062                         23,
53063                         24,
53064                         24,
53065                         24,
53066                         24,
53067                         24,
53068                         24,
53069                         24,
53070                         24,
53071                         24,
53072                         24,
53073                         24,
53074                         24,
53075                         24,
53076                         24,
53077                         24,
53078                         24,
53079                         24,
53080                         24,
53081                         24,
53082                         24,
53083                         24,
53084                         24,
53085                         24,
53086                         24,
53087                         24,
53088                         24,
53089                         24,
53090                         23,
53091                         24,
53092                         24,
53093                         24,
53094                         24,
53095                         24,
53096                         24,
53097                         24,
53098                         24,
53099                         24,
53100                         24,
53101                         24,
53102                         24,
53103                         24,
53104                         24,
53105                         24,
53106                         24,
53107                         24,
53108                         24,
53109                         24,
53110                         24,
53111                         24,
53112                         24,
53113                         24,
53114                         24,
53115                         24,
53116                         24,
53117                         24,
53118                         23,
53119                         24,
53120                         24,
53121                         24,
53122                         24,
53123                         24,
53124                         24,
53125                         24,
53126                         24,
53127                         24,
53128                         24,
53129                         24,
53130                         24,
53131                         24,
53132                         24,
53133                         24,
53134                         24,
53135                         24,
53136                         24,
53137                         24,
53138                         24,
53139                         24,
53140                         24,
53141                         24,
53142                         24,
53143                         24,
53144                         24,
53145                         24,
53146                         23,
53147                         24,
53148                         24,
53149                         24,
53150                         24,
53151                         24,
53152                         24,
53153                         24,
53154                         24,
53155                         24,
53156                         24,
53157                         24,
53158                         24,
53159                         24,
53160                         24,
53161                         24,
53162                         24,
53163                         24,
53164                         24,
53165                         24,
53166                         24,
53167                         24,
53168                         24,
53169                         24,
53170                         24,
53171                         24,
53172                         24,
53173                         24,
53174                         23,
53175                         24,
53176                         24,
53177                         24,
53178                         24,
53179                         24,
53180                         24,
53181                         24,
53182                         24,
53183                         24,
53184                         24,
53185                         24,
53186                         24,
53187                         24,
53188                         24,
53189                         24,
53190                         24,
53191                         24,
53192                         24,
53193                         24,
53194                         24,
53195                         24,
53196                         24,
53197                         24,
53198                         24,
53199                         24,
53200                         24,
53201                         24,
53202                         23,
53203                         24,
53204                         24,
53205                         24,
53206                         24,
53207                         24,
53208                         24,
53209                         24,
53210                         24,
53211                         24,
53212                         24,
53213                         24,
53214                         24,
53215                         24,
53216                         24,
53217                         24,
53218                         24,
53219                         24,
53220                         24,
53221                         24,
53222                         24,
53223                         24,
53224                         24,
53225                         24,
53226                         24,
53227                         24,
53228                         24,
53229                         24,
53230                         23,
53231                         24,
53232                         24,
53233                         24,
53234                         24,
53235                         24,
53236                         24,
53237                         24,
53238                         24,
53239                         24,
53240                         24,
53241                         24,
53242                         24,
53243                         24,
53244                         24,
53245                         24,
53246                         24,
53247                         24,
53248                         24,
53249                         24,
53250                         24,
53251                         24,
53252                         24,
53253                         24,
53254                         24,
53255                         24,
53256                         24,
53257                         24,
53258                         23,
53259                         24,
53260                         24,
53261                         24,
53262                         24,
53263                         24,
53264                         24,
53265                         24,
53266                         24,
53267                         24,
53268                         24,
53269                         24,
53270                         24,
53271                         24,
53272                         24,
53273                         24,
53274                         24,
53275                         24,
53276                         24,
53277                         24,
53278                         24,
53279                         24,
53280                         24,
53281                         24,
53282                         24,
53283                         24,
53284                         24,
53285                         24,
53286                         23,
53287                         24,
53288                         24,
53289                         24,
53290                         24,
53291                         24,
53292                         24,
53293                         24,
53294                         24,
53295                         24,
53296                         24,
53297                         24,
53298                         24,
53299                         24,
53300                         24,
53301                         24,
53302                         24,
53303                         24,
53304                         24,
53305                         24,
53306                         24,
53307                         24,
53308                         24,
53309                         24,
53310                         24,
53311                         24,
53312                         24,
53313                         24,
53314                         23,
53315                         24,
53316                         24,
53317                         24,
53318                         24,
53319                         24,
53320                         24,
53321                         24,
53322                         24,
53323                         24,
53324                         24,
53325                         24,
53326                         24,
53327                         24,
53328                         24,
53329                         24,
53330                         24,
53331                         24,
53332                         24,
53333                         24,
53334                         24,
53335                         24,
53336                         24,
53337                         24,
53338                         24,
53339                         24,
53340                         24,
53341                         24,
53342                         23,
53343                         24,
53344                         24,
53345                         24,
53346                         24,
53347                         24,
53348                         24,
53349                         24,
53350                         24,
53351                         24,
53352                         24,
53353                         24,
53354                         24,
53355                         24,
53356                         24,
53357                         24,
53358                         24,
53359                         24,
53360                         24,
53361                         24,
53362                         24,
53363                         24,
53364                         24,
53365                         24,
53366                         24,
53367                         24,
53368                         24,
53369                         24,
53370                         23,
53371                         24,
53372                         24,
53373                         24,
53374                         24,
53375                         24,
53376                         24,
53377                         24,
53378                         24,
53379                         24,
53380                         24,
53381                         24,
53382                         24,
53383                         24,
53384                         24,
53385                         24,
53386                         24,
53387                         24,
53388                         24,
53389                         24,
53390                         24,
53391                         24,
53392                         24,
53393                         24,
53394                         24,
53395                         24,
53396                         24,
53397                         24,
53398                         23,
53399                         24,
53400                         24,
53401                         24,
53402                         24,
53403                         24,
53404                         24,
53405                         24,
53406                         24,
53407                         24,
53408                         24,
53409                         24,
53410                         24,
53411                         24,
53412                         24,
53413                         24,
53414                         24,
53415                         24,
53416                         24,
53417                         24,
53418                         24,
53419                         24,
53420                         24,
53421                         24,
53422                         24,
53423                         24,
53424                         24,
53425                         24,
53426                         23,
53427                         24,
53428                         24,
53429                         24,
53430                         24,
53431                         24,
53432                         24,
53433                         24,
53434                         24,
53435                         24,
53436                         24,
53437                         24,
53438                         24,
53439                         24,
53440                         24,
53441                         24,
53442                         24,
53443                         24,
53444                         24,
53445                         24,
53446                         24,
53447                         24,
53448                         24,
53449                         24,
53450                         24,
53451                         24,
53452                         24,
53453                         24,
53454                         23,
53455                         24,
53456                         24,
53457                         24,
53458                         24,
53459                         24,
53460                         24,
53461                         24,
53462                         24,
53463                         24,
53464                         24,
53465                         24,
53466                         24,
53467                         24,
53468                         24,
53469                         24,
53470                         24,
53471                         24,
53472                         24,
53473                         24,
53474                         24,
53475                         24,
53476                         24,
53477                         24,
53478                         24,
53479                         24,
53480                         24,
53481                         24,
53482                         23,
53483                         24,
53484                         24,
53485                         24,
53486                         24,
53487                         24,
53488                         24,
53489                         24,
53490                         24,
53491                         24,
53492                         24,
53493                         24,
53494                         24,
53495                         24,
53496                         24,
53497                         24,
53498                         24,
53499                         24,
53500                         24,
53501                         24,
53502                         24,
53503                         24,
53504                         24,
53505                         24,
53506                         24,
53507                         24,
53508                         24,
53509                         24,
53510                         23,
53511                         24,
53512                         24,
53513                         24,
53514                         24,
53515                         24,
53516                         24,
53517                         24,
53518                         24,
53519                         24,
53520                         24,
53521                         24,
53522                         24,
53523                         24,
53524                         24,
53525                         24,
53526                         24,
53527                         24,
53528                         24,
53529                         24,
53530                         24,
53531                         24,
53532                         24,
53533                         24,
53534                         24,
53535                         24,
53536                         24,
53537                         24,
53538                         23,
53539                         24,
53540                         24,
53541                         24,
53542                         24,
53543                         24,
53544                         24,
53545                         24,
53546                         24,
53547                         24,
53548                         24,
53549                         24,
53550                         24,
53551                         24,
53552                         24,
53553                         24,
53554                         24,
53555                         24,
53556                         24,
53557                         24,
53558                         24,
53559                         24,
53560                         24,
53561                         24,
53562                         24,
53563                         24,
53564                         24,
53565                         24,
53566                         23,
53567                         24,
53568                         24,
53569                         24,
53570                         24,
53571                         24,
53572                         24,
53573                         24,
53574                         24,
53575                         24,
53576                         24,
53577                         24,
53578                         24,
53579                         24,
53580                         24,
53581                         24,
53582                         24,
53583                         24,
53584                         24,
53585                         24,
53586                         24,
53587                         24,
53588                         24,
53589                         24,
53590                         24,
53591                         24,
53592                         24,
53593                         24,
53594                         23,
53595                         24,
53596                         24,
53597                         24,
53598                         24,
53599                         24,
53600                         24,
53601                         24,
53602                         24,
53603                         24,
53604                         24,
53605                         24,
53606                         24,
53607                         24,
53608                         24,
53609                         24,
53610                         24,
53611                         24,
53612                         24,
53613                         24,
53614                         24,
53615                         24,
53616                         24,
53617                         24,
53618                         24,
53619                         24,
53620                         24,
53621                         24,
53622                         23,
53623                         24,
53624                         24,
53625                         24,
53626                         24,
53627                         24,
53628                         24,
53629                         24,
53630                         24,
53631                         24,
53632                         24,
53633                         24,
53634                         24,
53635                         24,
53636                         24,
53637                         24,
53638                         24,
53639                         24,
53640                         24,
53641                         24,
53642                         24,
53643                         24,
53644                         24,
53645                         24,
53646                         24,
53647                         24,
53648                         24,
53649                         24,
53650                         23,
53651                         24,
53652                         24,
53653                         24,
53654                         24,
53655                         24,
53656                         24,
53657                         24,
53658                         24,
53659                         24,
53660                         24,
53661                         24,
53662                         24,
53663                         24,
53664                         24,
53665                         24,
53666                         24,
53667                         24,
53668                         24,
53669                         24,
53670                         24,
53671                         24,
53672                         24,
53673                         24,
53674                         24,
53675                         24,
53676                         24,
53677                         24,
53678                         23,
53679                         24,
53680                         24,
53681                         24,
53682                         24,
53683                         24,
53684                         24,
53685                         24,
53686                         24,
53687                         24,
53688                         24,
53689                         24,
53690                         24,
53691                         24,
53692                         24,
53693                         24,
53694                         24,
53695                         24,
53696                         24,
53697                         24,
53698                         24,
53699                         24,
53700                         24,
53701                         24,
53702                         24,
53703                         24,
53704                         24,
53705                         24,
53706                         23,
53707                         24,
53708                         24,
53709                         24,
53710                         24,
53711                         24,
53712                         24,
53713                         24,
53714                         24,
53715                         24,
53716                         24,
53717                         24,
53718                         24,
53719                         24,
53720                         24,
53721                         24,
53722                         24,
53723                         24,
53724                         24,
53725                         24,
53726                         24,
53727                         24,
53728                         24,
53729                         24,
53730                         24,
53731                         24,
53732                         24,
53733                         24,
53734                         23,
53735                         24,
53736                         24,
53737                         24,
53738                         24,
53739                         24,
53740                         24,
53741                         24,
53742                         24,
53743                         24,
53744                         24,
53745                         24,
53746                         24,
53747                         24,
53748                         24,
53749                         24,
53750                         24,
53751                         24,
53752                         24,
53753                         24,
53754                         24,
53755                         24,
53756                         24,
53757                         24,
53758                         24,
53759                         24,
53760                         24,
53761                         24,
53762                         23,
53763                         24,
53764                         24,
53765                         24,
53766                         24,
53767                         24,
53768                         24,
53769                         24,
53770                         24,
53771                         24,
53772                         24,
53773                         24,
53774                         24,
53775                         24,
53776                         24,
53777                         24,
53778                         24,
53779                         24,
53780                         24,
53781                         24,
53782                         24,
53783                         24,
53784                         24,
53785                         24,
53786                         24,
53787                         24,
53788                         24,
53789                         24,
53790                         23,
53791                         24,
53792                         24,
53793                         24,
53794                         24,
53795                         24,
53796                         24,
53797                         24,
53798                         24,
53799                         24,
53800                         24,
53801                         24,
53802                         24,
53803                         24,
53804                         24,
53805                         24,
53806                         24,
53807                         24,
53808                         24,
53809                         24,
53810                         24,
53811                         24,
53812                         24,
53813                         24,
53814                         24,
53815                         24,
53816                         24,
53817                         24,
53818                         23,
53819                         24,
53820                         24,
53821                         24,
53822                         24,
53823                         24,
53824                         24,
53825                         24,
53826                         24,
53827                         24,
53828                         24,
53829                         24,
53830                         24,
53831                         24,
53832                         24,
53833                         24,
53834                         24,
53835                         24,
53836                         24,
53837                         24,
53838                         24,
53839                         24,
53840                         24,
53841                         24,
53842                         24,
53843                         24,
53844                         24,
53845                         24,
53846                         23,
53847                         24,
53848                         24,
53849                         24,
53850                         24,
53851                         24,
53852                         24,
53853                         24,
53854                         24,
53855                         24,
53856                         24,
53857                         24,
53858                         24,
53859                         24,
53860                         24,
53861                         24,
53862                         24,
53863                         24,
53864                         24,
53865                         24,
53866                         24,
53867                         24,
53868                         24,
53869                         24,
53870                         24,
53871                         24,
53872                         24,
53873                         24,
53874                         23,
53875                         24,
53876                         24,
53877                         24,
53878                         24,
53879                         24,
53880                         24,
53881                         24,
53882                         24,
53883                         24,
53884                         24,
53885                         24,
53886                         24,
53887                         24,
53888                         24,
53889                         24,
53890                         24,
53891                         24,
53892                         24,
53893                         24,
53894                         24,
53895                         24,
53896                         24,
53897                         24,
53898                         24,
53899                         24,
53900                         24,
53901                         24,
53902                         23,
53903                         24,
53904                         24,
53905                         24,
53906                         24,
53907                         24,
53908                         24,
53909                         24,
53910                         24,
53911                         24,
53912                         24,
53913                         24,
53914                         24,
53915                         24,
53916                         24,
53917                         24,
53918                         24,
53919                         24,
53920                         24,
53921                         24,
53922                         24,
53923                         24,
53924                         24,
53925                         24,
53926                         24,
53927                         24,
53928                         24,
53929                         24,
53930                         23,
53931                         24,
53932                         24,
53933                         24,
53934                         24,
53935                         24,
53936                         24,
53937                         24,
53938                         24,
53939                         24,
53940                         24,
53941                         24,
53942                         24,
53943                         24,
53944                         24,
53945                         24,
53946                         24,
53947                         24,
53948                         24,
53949                         24,
53950                         24,
53951                         24,
53952                         24,
53953                         24,
53954                         24,
53955                         24,
53956                         24,
53957                         24,
53958                         23,
53959                         24,
53960                         24,
53961                         24,
53962                         24,
53963                         24,
53964                         24,
53965                         24,
53966                         24,
53967                         24,
53968                         24,
53969                         24,
53970                         24,
53971                         24,
53972                         24,
53973                         24,
53974                         24,
53975                         24,
53976                         24,
53977                         24,
53978                         24,
53979                         24,
53980                         24,
53981                         24,
53982                         24,
53983                         24,
53984                         24,
53985                         24,
53986                         23,
53987                         24,
53988                         24,
53989                         24,
53990                         24,
53991                         24,
53992                         24,
53993                         24,
53994                         24,
53995                         24,
53996                         24,
53997                         24,
53998                         24,
53999                         24,
54000                         24,
54001                         24,
54002                         24,
54003                         24,
54004                         24,
54005                         24,
54006                         24,
54007                         24,
54008                         24,
54009                         24,
54010                         24,
54011                         24,
54012                         24,
54013                         24,
54014                         23,
54015                         24,
54016                         24,
54017                         24,
54018                         24,
54019                         24,
54020                         24,
54021                         24,
54022                         24,
54023                         24,
54024                         24,
54025                         24,
54026                         24,
54027                         24,
54028                         24,
54029                         24,
54030                         24,
54031                         24,
54032                         24,
54033                         24,
54034                         24,
54035                         24,
54036                         24,
54037                         24,
54038                         24,
54039                         24,
54040                         24,
54041                         24,
54042                         23,
54043                         24,
54044                         24,
54045                         24,
54046                         24,
54047                         24,
54048                         24,
54049                         24,
54050                         24,
54051                         24,
54052                         24,
54053                         24,
54054                         24,
54055                         24,
54056                         24,
54057                         24,
54058                         24,
54059                         24,
54060                         24,
54061                         24,
54062                         24,
54063                         24,
54064                         24,
54065                         24,
54066                         24,
54067                         24,
54068                         24,
54069                         24,
54070                         23,
54071                         24,
54072                         24,
54073                         24,
54074                         24,
54075                         24,
54076                         24,
54077                         24,
54078                         24,
54079                         24,
54080                         24,
54081                         24,
54082                         24,
54083                         24,
54084                         24,
54085                         24,
54086                         24,
54087                         24,
54088                         24,
54089                         24,
54090                         24,
54091                         24,
54092                         24,
54093                         24,
54094                         24,
54095                         24,
54096                         24,
54097                         24,
54098                         23,
54099                         24,
54100                         24,
54101                         24,
54102                         24,
54103                         24,
54104                         24,
54105                         24,
54106                         24,
54107                         24,
54108                         24,
54109                         24,
54110                         24,
54111                         24,
54112                         24,
54113                         24,
54114                         24,
54115                         24,
54116                         24,
54117                         24,
54118                         24,
54119                         24,
54120                         24,
54121                         24,
54122                         24,
54123                         24,
54124                         24,
54125                         24,
54126                         23,
54127                         24,
54128                         24,
54129                         24,
54130                         24,
54131                         24,
54132                         24,
54133                         24,
54134                         24,
54135                         24,
54136                         24,
54137                         24,
54138                         24,
54139                         24,
54140                         24,
54141                         24,
54142                         24,
54143                         24,
54144                         24,
54145                         24,
54146                         24,
54147                         24,
54148                         24,
54149                         24,
54150                         24,
54151                         24,
54152                         24,
54153                         24,
54154                         23,
54155                         24,
54156                         24,
54157                         24,
54158                         24,
54159                         24,
54160                         24,
54161                         24,
54162                         24,
54163                         24,
54164                         24,
54165                         24,
54166                         24,
54167                         24,
54168                         24,
54169                         24,
54170                         24,
54171                         24,
54172                         24,
54173                         24,
54174                         24,
54175                         24,
54176                         24,
54177                         24,
54178                         24,
54179                         24,
54180                         24,
54181                         24,
54182                         23,
54183                         24,
54184                         24,
54185                         24,
54186                         24,
54187                         24,
54188                         24,
54189                         24,
54190                         24,
54191                         24,
54192                         24,
54193                         24,
54194                         24,
54195                         24,
54196                         24,
54197                         24,
54198                         24,
54199                         24,
54200                         24,
54201                         24,
54202                         24,
54203                         24,
54204                         24,
54205                         24,
54206                         24,
54207                         24,
54208                         24,
54209                         24,
54210                         23,
54211                         24,
54212                         24,
54213                         24,
54214                         24,
54215                         24,
54216                         24,
54217                         24,
54218                         24,
54219                         24,
54220                         24,
54221                         24,
54222                         24,
54223                         24,
54224                         24,
54225                         24,
54226                         24,
54227                         24,
54228                         24,
54229                         24,
54230                         24,
54231                         24,
54232                         24,
54233                         24,
54234                         24,
54235                         24,
54236                         24,
54237                         24,
54238                         23,
54239                         24,
54240                         24,
54241                         24,
54242                         24,
54243                         24,
54244                         24,
54245                         24,
54246                         24,
54247                         24,
54248                         24,
54249                         24,
54250                         24,
54251                         24,
54252                         24,
54253                         24,
54254                         24,
54255                         24,
54256                         24,
54257                         24,
54258                         24,
54259                         24,
54260                         24,
54261                         24,
54262                         24,
54263                         24,
54264                         24,
54265                         24,
54266                         23,
54267                         24,
54268                         24,
54269                         24,
54270                         24,
54271                         24,
54272                         24,
54273                         24,
54274                         24,
54275                         24,
54276                         24,
54277                         24,
54278                         24,
54279                         24,
54280                         24,
54281                         24,
54282                         24,
54283                         24,
54284                         24,
54285                         24,
54286                         24,
54287                         24,
54288                         24,
54289                         24,
54290                         24,
54291                         24,
54292                         24,
54293                         24,
54294                         23,
54295                         24,
54296                         24,
54297                         24,
54298                         24,
54299                         24,
54300                         24,
54301                         24,
54302                         24,
54303                         24,
54304                         24,
54305                         24,
54306                         24,
54307                         24,
54308                         24,
54309                         24,
54310                         24,
54311                         24,
54312                         24,
54313                         24,
54314                         24,
54315                         24,
54316                         24,
54317                         24,
54318                         24,
54319                         24,
54320                         24,
54321                         24,
54322                         23,
54323                         24,
54324                         24,
54325                         24,
54326                         24,
54327                         24,
54328                         24,
54329                         24,
54330                         24,
54331                         24,
54332                         24,
54333                         24,
54334                         24,
54335                         24,
54336                         24,
54337                         24,
54338                         24,
54339                         24,
54340                         24,
54341                         24,
54342                         24,
54343                         24,
54344                         24,
54345                         24,
54346                         24,
54347                         24,
54348                         24,
54349                         24,
54350                         23,
54351                         24,
54352                         24,
54353                         24,
54354                         24,
54355                         24,
54356                         24,
54357                         24,
54358                         24,
54359                         24,
54360                         24,
54361                         24,
54362                         24,
54363                         24,
54364                         24,
54365                         24,
54366                         24,
54367                         24,
54368                         24,
54369                         24,
54370                         24,
54371                         24,
54372                         24,
54373                         24,
54374                         24,
54375                         24,
54376                         24,
54377                         24,
54378                         23,
54379                         24,
54380                         24,
54381                         24,
54382                         24,
54383                         24,
54384                         24,
54385                         24,
54386                         24,
54387                         24,
54388                         24,
54389                         24,
54390                         24,
54391                         24,
54392                         24,
54393                         24,
54394                         24,
54395                         24,
54396                         24,
54397                         24,
54398                         24,
54399                         24,
54400                         24,
54401                         24,
54402                         24,
54403                         24,
54404                         24,
54405                         24,
54406                         23,
54407                         24,
54408                         24,
54409                         24,
54410                         24,
54411                         24,
54412                         24,
54413                         24,
54414                         24,
54415                         24,
54416                         24,
54417                         24,
54418                         24,
54419                         24,
54420                         24,
54421                         24,
54422                         24,
54423                         24,
54424                         24,
54425                         24,
54426                         24,
54427                         24,
54428                         24,
54429                         24,
54430                         24,
54431                         24,
54432                         24,
54433                         24,
54434                         23,
54435                         24,
54436                         24,
54437                         24,
54438                         24,
54439                         24,
54440                         24,
54441                         24,
54442                         24,
54443                         24,
54444                         24,
54445                         24,
54446                         24,
54447                         24,
54448                         24,
54449                         24,
54450                         24,
54451                         24,
54452                         24,
54453                         24,
54454                         24,
54455                         24,
54456                         24,
54457                         24,
54458                         24,
54459                         24,
54460                         24,
54461                         24,
54462                         23,
54463                         24,
54464                         24,
54465                         24,
54466                         24,
54467                         24,
54468                         24,
54469                         24,
54470                         24,
54471                         24,
54472                         24,
54473                         24,
54474                         24,
54475                         24,
54476                         24,
54477                         24,
54478                         24,
54479                         24,
54480                         24,
54481                         24,
54482                         24,
54483                         24,
54484                         24,
54485                         24,
54486                         24,
54487                         24,
54488                         24,
54489                         24,
54490                         23,
54491                         24,
54492                         24,
54493                         24,
54494                         24,
54495                         24,
54496                         24,
54497                         24,
54498                         24,
54499                         24,
54500                         24,
54501                         24,
54502                         24,
54503                         24,
54504                         24,
54505                         24,
54506                         24,
54507                         24,
54508                         24,
54509                         24,
54510                         24,
54511                         24,
54512                         24,
54513                         24,
54514                         24,
54515                         24,
54516                         24,
54517                         24,
54518                         23,
54519                         24,
54520                         24,
54521                         24,
54522                         24,
54523                         24,
54524                         24,
54525                         24,
54526                         24,
54527                         24,
54528                         24,
54529                         24,
54530                         24,
54531                         24,
54532                         24,
54533                         24,
54534                         24,
54535                         24,
54536                         24,
54537                         24,
54538                         24,
54539                         24,
54540                         24,
54541                         24,
54542                         24,
54543                         24,
54544                         24,
54545                         24,
54546                         23,
54547                         24,
54548                         24,
54549                         24,
54550                         24,
54551                         24,
54552                         24,
54553                         24,
54554                         24,
54555                         24,
54556                         24,
54557                         24,
54558                         24,
54559                         24,
54560                         24,
54561                         24,
54562                         24,
54563                         24,
54564                         24,
54565                         24,
54566                         24,
54567                         24,
54568                         24,
54569                         24,
54570                         24,
54571                         24,
54572                         24,
54573                         24,
54574                         23,
54575                         24,
54576                         24,
54577                         24,
54578                         24,
54579                         24,
54580                         24,
54581                         24,
54582                         24,
54583                         24,
54584                         24,
54585                         24,
54586                         24,
54587                         24,
54588                         24,
54589                         24,
54590                         24,
54591                         24,
54592                         24,
54593                         24,
54594                         24,
54595                         24,
54596                         24,
54597                         24,
54598                         24,
54599                         24,
54600                         24,
54601                         24,
54602                         23,
54603                         24,
54604                         24,
54605                         24,
54606                         24,
54607                         24,
54608                         24,
54609                         24,
54610                         24,
54611                         24,
54612                         24,
54613                         24,
54614                         24,
54615                         24,
54616                         24,
54617                         24,
54618                         24,
54619                         24,
54620                         24,
54621                         24,
54622                         24,
54623                         24,
54624                         24,
54625                         24,
54626                         24,
54627                         24,
54628                         24,
54629                         24,
54630                         23,
54631                         24,
54632                         24,
54633                         24,
54634                         24,
54635                         24,
54636                         24,
54637                         24,
54638                         24,
54639                         24,
54640                         24,
54641                         24,
54642                         24,
54643                         24,
54644                         24,
54645                         24,
54646                         24,
54647                         24,
54648                         24,
54649                         24,
54650                         24,
54651                         24,
54652                         24,
54653                         24,
54654                         24,
54655                         24,
54656                         24,
54657                         24,
54658                         23,
54659                         24,
54660                         24,
54661                         24,
54662                         24,
54663                         24,
54664                         24,
54665                         24,
54666                         24,
54667                         24,
54668                         24,
54669                         24,
54670                         24,
54671                         24,
54672                         24,
54673                         24,
54674                         24,
54675                         24,
54676                         24,
54677                         24,
54678                         24,
54679                         24,
54680                         24,
54681                         24,
54682                         24,
54683                         24,
54684                         24,
54685                         24,
54686                         23,
54687                         24,
54688                         24,
54689                         24,
54690                         24,
54691                         24,
54692                         24,
54693                         24,
54694                         24,
54695                         24,
54696                         24,
54697                         24,
54698                         24,
54699                         24,
54700                         24,
54701                         24,
54702                         24,
54703                         24,
54704                         24,
54705                         24,
54706                         24,
54707                         24,
54708                         24,
54709                         24,
54710                         24,
54711                         24,
54712                         24,
54713                         24,
54714                         23,
54715                         24,
54716                         24,
54717                         24,
54718                         24,
54719                         24,
54720                         24,
54721                         24,
54722                         24,
54723                         24,
54724                         24,
54725                         24,
54726                         24,
54727                         24,
54728                         24,
54729                         24,
54730                         24,
54731                         24,
54732                         24,
54733                         24,
54734                         24,
54735                         24,
54736                         24,
54737                         24,
54738                         24,
54739                         24,
54740                         24,
54741                         24,
54742                         23,
54743                         24,
54744                         24,
54745                         24,
54746                         24,
54747                         24,
54748                         24,
54749                         24,
54750                         24,
54751                         24,
54752                         24,
54753                         24,
54754                         24,
54755                         24,
54756                         24,
54757                         24,
54758                         24,
54759                         24,
54760                         24,
54761                         24,
54762                         24,
54763                         24,
54764                         24,
54765                         24,
54766                         24,
54767                         24,
54768                         24,
54769                         24,
54770                         23,
54771                         24,
54772                         24,
54773                         24,
54774                         24,
54775                         24,
54776                         24,
54777                         24,
54778                         24,
54779                         24,
54780                         24,
54781                         24,
54782                         24,
54783                         24,
54784                         24,
54785                         24,
54786                         24,
54787                         24,
54788                         24,
54789                         24,
54790                         24,
54791                         24,
54792                         24,
54793                         24,
54794                         24,
54795                         24,
54796                         24,
54797                         24,
54798                         23,
54799                         24,
54800                         24,
54801                         24,
54802                         24,
54803                         24,
54804                         24,
54805                         24,
54806                         24,
54807                         24,
54808                         24,
54809                         24,
54810                         24,
54811                         24,
54812                         24,
54813                         24,
54814                         24,
54815                         24,
54816                         24,
54817                         24,
54818                         24,
54819                         24,
54820                         24,
54821                         24,
54822                         24,
54823                         24,
54824                         24,
54825                         24,
54826                         23,
54827                         24,
54828                         24,
54829                         24,
54830                         24,
54831                         24,
54832                         24,
54833                         24,
54834                         24,
54835                         24,
54836                         24,
54837                         24,
54838                         24,
54839                         24,
54840                         24,
54841                         24,
54842                         24,
54843                         24,
54844                         24,
54845                         24,
54846                         24,
54847                         24,
54848                         24,
54849                         24,
54850                         24,
54851                         24,
54852                         24,
54853                         24,
54854                         23,
54855                         24,
54856                         24,
54857                         24,
54858                         24,
54859                         24,
54860                         24,
54861                         24,
54862                         24,
54863                         24,
54864                         24,
54865                         24,
54866                         24,
54867                         24,
54868                         24,
54869                         24,
54870                         24,
54871                         24,
54872                         24,
54873                         24,
54874                         24,
54875                         24,
54876                         24,
54877                         24,
54878                         24,
54879                         24,
54880                         24,
54881                         24,
54882                         23,
54883                         24,
54884                         24,
54885                         24,
54886                         24,
54887                         24,
54888                         24,
54889                         24,
54890                         24,
54891                         24,
54892                         24,
54893                         24,
54894                         24,
54895                         24,
54896                         24,
54897                         24,
54898                         24,
54899                         24,
54900                         24,
54901                         24,
54902                         24,
54903                         24,
54904                         24,
54905                         24,
54906                         24,
54907                         24,
54908                         24,
54909                         24,
54910                         23,
54911                         24,
54912                         24,
54913                         24,
54914                         24,
54915                         24,
54916                         24,
54917                         24,
54918                         24,
54919                         24,
54920                         24,
54921                         24,
54922                         24,
54923                         24,
54924                         24,
54925                         24,
54926                         24,
54927                         24,
54928                         24,
54929                         24,
54930                         24,
54931                         24,
54932                         24,
54933                         24,
54934                         24,
54935                         24,
54936                         24,
54937                         24,
54938                         23,
54939                         24,
54940                         24,
54941                         24,
54942                         24,
54943                         24,
54944                         24,
54945                         24,
54946                         24,
54947                         24,
54948                         24,
54949                         24,
54950                         24,
54951                         24,
54952                         24,
54953                         24,
54954                         24,
54955                         24,
54956                         24,
54957                         24,
54958                         24,
54959                         24,
54960                         24,
54961                         24,
54962                         24,
54963                         24,
54964                         24,
54965                         24,
54966                         23,
54967                         24,
54968                         24,
54969                         24,
54970                         24,
54971                         24,
54972                         24,
54973                         24,
54974                         24,
54975                         24,
54976                         24,
54977                         24,
54978                         24,
54979                         24,
54980                         24,
54981                         24,
54982                         24,
54983                         24,
54984                         24,
54985                         24,
54986                         24,
54987                         24,
54988                         24,
54989                         24,
54990                         24,
54991                         24,
54992                         24,
54993                         24,
54994                         23,
54995                         24,
54996                         24,
54997                         24,
54998                         24,
54999                         24,
55000                         24,
55001                         24,
55002                         24,
55003                         24,
55004                         24,
55005                         24,
55006                         24,
55007                         24,
55008                         24,
55009                         24,
55010                         24,
55011                         24,
55012                         24,
55013                         24,
55014                         24,
55015                         24,
55016                         24,
55017                         24,
55018                         24,
55019                         24,
55020                         24,
55021                         24,
55022                         23,
55023                         24,
55024                         24,
55025                         24,
55026                         24,
55027                         24,
55028                         24,
55029                         24,
55030                         24,
55031                         24,
55032                         24,
55033                         24,
55034                         24,
55035                         24,
55036                         24,
55037                         24,
55038                         24,
55039                         24,
55040                         24,
55041                         24,
55042                         24,
55043                         24,
55044                         24,
55045                         24,
55046                         24,
55047                         24,
55048                         24,
55049                         24,
55050                         23,
55051                         24,
55052                         24,
55053                         24,
55054                         24,
55055                         24,
55056                         24,
55057                         24,
55058                         24,
55059                         24,
55060                         24,
55061                         24,
55062                         24,
55063                         24,
55064                         24,
55065                         24,
55066                         24,
55067                         24,
55068                         24,
55069                         24,
55070                         24,
55071                         24,
55072                         24,
55073                         24,
55074                         24,
55075                         24,
55076                         24,
55077                         24,
55078                         23,
55079                         24,
55080                         24,
55081                         24,
55082                         24,
55083                         24,
55084                         24,
55085                         24,
55086                         24,
55087                         24,
55088                         24,
55089                         24,
55090                         24,
55091                         24,
55092                         24,
55093                         24,
55094                         24,
55095                         24,
55096                         24,
55097                         24,
55098                         24,
55099                         24,
55100                         24,
55101                         24,
55102                         24,
55103                         24,
55104                         24,
55105                         24,
55106                         23,
55107                         24,
55108                         24,
55109                         24,
55110                         24,
55111                         24,
55112                         24,
55113                         24,
55114                         24,
55115                         24,
55116                         24,
55117                         24,
55118                         24,
55119                         24,
55120                         24,
55121                         24,
55122                         24,
55123                         24,
55124                         24,
55125                         24,
55126                         24,
55127                         24,
55128                         24,
55129                         24,
55130                         24,
55131                         24,
55132                         24,
55133                         24,
55134                         23,
55135                         24,
55136                         24,
55137                         24,
55138                         24,
55139                         24,
55140                         24,
55141                         24,
55142                         24,
55143                         24,
55144                         24,
55145                         24,
55146                         24,
55147                         24,
55148                         24,
55149                         24,
55150                         24,
55151                         24,
55152                         24,
55153                         24,
55154                         24,
55155                         24,
55156                         24,
55157                         24,
55158                         24,
55159                         24,
55160                         24,
55161                         24,
55162                         23,
55163                         24,
55164                         24,
55165                         24,
55166                         24,
55167                         24,
55168                         24,
55169                         24,
55170                         24,
55171                         24,
55172                         24,
55173                         24,
55174                         24,
55175                         24,
55176                         24,
55177                         24,
55178                         24,
55179                         24,
55180                         24,
55181                         24,
55182                         24,
55183                         24,
55184                         24,
55185                         24,
55186                         24,
55187                         24,
55188                         24,
55189                         24,
55190                         23,
55191                         24,
55192                         24,
55193                         24,
55194                         24,
55195                         24,
55196                         24,
55197                         24,
55198                         24,
55199                         24,
55200                         24,
55201                         24,
55202                         24,
55203                         24,
55204                         24,
55205                         24,
55206                         24,
55207                         24,
55208                         24,
55209                         24,
55210                         24,
55211                         24,
55212                         24,
55213                         24,
55214                         24,
55215                         24,
55216                         24,
55217                         24,
55218                         23,
55219                         24,
55220                         24,
55221                         24,
55222                         24,
55223                         24,
55224                         24,
55225                         24,
55226                         24,
55227                         24,
55228                         24,
55229                         24,
55230                         24,
55231                         24,
55232                         24,
55233                         24,
55234                         24,
55235                         24,
55236                         24,
55237                         24,
55238                         24,
55239                         24,
55240                         24,
55241                         24,
55242                         24,
55243                         24,
55244                         24,
55245                         24,
55246                         23,
55247                         24,
55248                         24,
55249                         24,
55250                         24,
55251                         24,
55252                         24,
55253                         24,
55254                         24,
55255                         24,
55256                         24,
55257                         24,
55258                         24,
55259                         24,
55260                         24,
55261                         24,
55262                         24,
55263                         24,
55264                         24,
55265                         24,
55266                         24,
55267                         24,
55268                         24,
55269                         24,
55270                         24,
55271                         24,
55272                         24,
55273                         24,
55274                         23,
55275                         24,
55276                         24,
55277                         24,
55278                         24,
55279                         24,
55280                         24,
55281                         24,
55282                         24,
55283                         24,
55284                         24,
55285                         24,
55286                         24,
55287                         24,
55288                         24,
55289                         24,
55290                         24,
55291                         24,
55292                         24,
55293                         24,
55294                         24,
55295                         24,
55296                         24,
55297                         24,
55298                         24,
55299                         24,
55300                         24,
55301                         24,
55302                         23,
55303                         24,
55304                         24,
55305                         24,
55306                         24,
55307                         24,
55308                         24,
55309                         24,
55310                         24,
55311                         24,
55312                         24,
55313                         24,
55314                         24,
55315                         24,
55316                         24,
55317                         24,
55318                         24,
55319                         24,
55320                         24,
55321                         24,
55322                         24,
55323                         24,
55324                         24,
55325                         24,
55326                         24,
55327                         24,
55328                         24,
55329                         24,
55330                         23,
55331                         24,
55332                         24,
55333                         24,
55334                         24,
55335                         24,
55336                         24,
55337                         24,
55338                         24,
55339                         24,
55340                         24,
55341                         24,
55342                         24,
55343                         24,
55344                         24,
55345                         24,
55346                         24,
55347                         24,
55348                         24,
55349                         24,
55350                         24,
55351                         24,
55352                         24,
55353                         24,
55354                         24,
55355                         24,
55356                         24,
55357                         24,
55358                         23,
55359                         24,
55360                         24,
55361                         24,
55362                         24,
55363                         24,
55364                         24,
55365                         24,
55366                         24,
55367                         24,
55368                         24,
55369                         24,
55370                         24,
55371                         24,
55372                         24,
55373                         24,
55374                         24,
55375                         24,
55376                         24,
55377                         24,
55378                         24,
55379                         24,
55380                         24,
55381                         24,
55382                         24,
55383                         24,
55384                         24,
55385                         24,
55386                         23,
55387                         24,
55388                         24,
55389                         24,
55390                         24,
55391                         24,
55392                         24,
55393                         24,
55394                         24,
55395                         24,
55396                         24,
55397                         24,
55398                         24,
55399                         24,
55400                         24,
55401                         24,
55402                         24,
55403                         24,
55404                         24,
55405                         24,
55406                         24,
55407                         24,
55408                         24,
55409                         24,
55410                         24,
55411                         24,
55412                         24,
55413                         24,
55414                         23,
55415                         24,
55416                         24,
55417                         24,
55418                         24,
55419                         24,
55420                         24,
55421                         24,
55422                         24,
55423                         24,
55424                         24,
55425                         24,
55426                         24,
55427                         24,
55428                         24,
55429                         24,
55430                         24,
55431                         24,
55432                         24,
55433                         24,
55434                         24,
55435                         24,
55436                         24,
55437                         24,
55438                         24,
55439                         24,
55440                         24,
55441                         24,
55442                         23,
55443                         24,
55444                         24,
55445                         24,
55446                         24,
55447                         24,
55448                         24,
55449                         24,
55450                         24,
55451                         24,
55452                         24,
55453                         24,
55454                         24,
55455                         24,
55456                         24,
55457                         24,
55458                         24,
55459                         24,
55460                         24,
55461                         24,
55462                         24,
55463                         24,
55464                         24,
55465                         24,
55466                         24,
55467                         24,
55468                         24,
55469                         24,
55470                         23,
55471                         24,
55472                         24,
55473                         24,
55474                         24,
55475                         24,
55476                         24,
55477                         24,
55478                         24,
55479                         24,
55480                         24,
55481                         24,
55482                         24,
55483                         24,
55484                         24,
55485                         24,
55486                         24,
55487                         24,
55488                         24,
55489                         24,
55490                         24,
55491                         24,
55492                         24,
55493                         24,
55494                         24,
55495                         24,
55496                         24,
55497                         24,
55498                         23,
55499                         24,
55500                         24,
55501                         24,
55502                         24,
55503                         24,
55504                         24,
55505                         24,
55506                         24,
55507                         24,
55508                         24,
55509                         24,
55510                         24,
55511                         24,
55512                         24,
55513                         24,
55514                         24,
55515                         24,
55516                         24,
55517                         24,
55518                         24,
55519                         24,
55520                         24,
55521                         24,
55522                         24,
55523                         24,
55524                         24,
55525                         24,
55526                         23,
55527                         24,
55528                         24,
55529                         24,
55530                         24,
55531                         24,
55532                         24,
55533                         24,
55534                         24,
55535                         24,
55536                         24,
55537                         24,
55538                         24,
55539                         24,
55540                         24,
55541                         24,
55542                         24,
55543                         24,
55544                         24,
55545                         24,
55546                         24,
55547                         24,
55548                         24,
55549                         24,
55550                         24,
55551                         24,
55552                         24,
55553                         24,
55554                         23,
55555                         24,
55556                         24,
55557                         24,
55558                         24,
55559                         24,
55560                         24,
55561                         24,
55562                         24,
55563                         24,
55564                         24,
55565                         24,
55566                         24,
55567                         24,
55568                         24,
55569                         24,
55570                         24,
55571                         24,
55572                         24,
55573                         24,
55574                         24,
55575                         24,
55576                         24,
55577                         24,
55578                         24,
55579                         24,
55580                         24,
55581                         24,
55582                         23,
55583                         24,
55584                         24,
55585                         24,
55586                         24,
55587                         24,
55588                         24,
55589                         24,
55590                         24,
55591                         24,
55592                         24,
55593                         24,
55594                         24,
55595                         24,
55596                         24,
55597                         24,
55598                         24,
55599                         24,
55600                         24,
55601                         24,
55602                         24,
55603                         24,
55604                         24,
55605                         24,
55606                         24,
55607                         24,
55608                         24,
55609                         24,
55610                         23,
55611                         24,
55612                         24,
55613                         24,
55614                         24,
55615                         24,
55616                         24,
55617                         24,
55618                         24,
55619                         24,
55620                         24,
55621                         24,
55622                         24,
55623                         24,
55624                         24,
55625                         24,
55626                         24,
55627                         24,
55628                         24,
55629                         24,
55630                         24,
55631                         24,
55632                         24,
55633                         24,
55634                         24,
55635                         24,
55636                         24,
55637                         24,
55638                         23,
55639                         24,
55640                         24,
55641                         24,
55642                         24,
55643                         24,
55644                         24,
55645                         24,
55646                         24,
55647                         24,
55648                         24,
55649                         24,
55650                         24,
55651                         24,
55652                         24,
55653                         24,
55654                         24,
55655                         24,
55656                         24,
55657                         24,
55658                         24,
55659                         24,
55660                         24,
55661                         24,
55662                         24,
55663                         24,
55664                         24,
55665                         24,
55666                         23,
55667                         24,
55668                         24,
55669                         24,
55670                         24,
55671                         24,
55672                         24,
55673                         24,
55674                         24,
55675                         24,
55676                         24,
55677                         24,
55678                         24,
55679                         24,
55680                         24,
55681                         24,
55682                         24,
55683                         24,
55684                         24,
55685                         24,
55686                         24,
55687                         24,
55688                         24,
55689                         24,
55690                         24,
55691                         24,
55692                         24,
55693                         24,
55694                         23,
55695                         24,
55696                         24,
55697                         24,
55698                         24,
55699                         24,
55700                         24,
55701                         24,
55702                         24,
55703                         24,
55704                         24,
55705                         24,
55706                         24,
55707                         24,
55708                         24,
55709                         24,
55710                         24,
55711                         24,
55712                         24,
55713                         24,
55714                         24,
55715                         24,
55716                         24,
55717                         24,
55718                         24,
55719                         24,
55720                         24,
55721                         24,
55722                         23,
55723                         24,
55724                         24,
55725                         24,
55726                         24,
55727                         24,
55728                         24,
55729                         24,
55730                         24,
55731                         24,
55732                         24,
55733                         24,
55734                         24,
55735                         24,
55736                         24,
55737                         24,
55738                         24,
55739                         24,
55740                         24,
55741                         24,
55742                         24,
55743                         24,
55744                         24,
55745                         24,
55746                         24,
55747                         24,
55748                         24,
55749                         24,
55750                         23,
55751                         24,
55752                         24,
55753                         24,
55754                         24,
55755                         24,
55756                         24,
55757                         24,
55758                         24,
55759                         24,
55760                         24,
55761                         24,
55762                         24,
55763                         24,
55764                         24,
55765                         24,
55766                         24,
55767                         24,
55768                         24,
55769                         24,
55770                         24,
55771                         24,
55772                         24,
55773                         24,
55774                         24,
55775                         24,
55776                         24,
55777                         24,
55778                         23,
55779                         24,
55780                         24,
55781                         24,
55782                         24,
55783                         24,
55784                         24,
55785                         24,
55786                         24,
55787                         24,
55788                         24,
55789                         24,
55790                         24,
55791                         24,
55792                         24,
55793                         24,
55794                         24,
55795                         24,
55796                         24,
55797                         24,
55798                         24,
55799                         24,
55800                         24,
55801                         24,
55802                         24,
55803                         24,
55804                         24,
55805                         24,
55806                         23,
55807                         24,
55808                         24,
55809                         24,
55810                         24,
55811                         24,
55812                         24,
55813                         24,
55814                         24,
55815                         24,
55816                         24,
55817                         24,
55818                         24,
55819                         24,
55820                         24,
55821                         24,
55822                         24,
55823                         24,
55824                         24,
55825                         24,
55826                         24,
55827                         24,
55828                         24,
55829                         24,
55830                         24,
55831                         24,
55832                         24,
55833                         24,
55834                         23,
55835                         24,
55836                         24,
55837                         24,
55838                         24,
55839                         24,
55840                         24,
55841                         24,
55842                         24,
55843                         24,
55844                         24,
55845                         24,
55846                         24,
55847                         24,
55848                         24,
55849                         24,
55850                         24,
55851                         24,
55852                         24,
55853                         24,
55854                         24,
55855                         24,
55856                         24,
55857                         24,
55858                         24,
55859                         24,
55860                         24,
55861                         24,
55862                         23,
55863                         24,
55864                         24,
55865                         24,
55866                         24,
55867                         24,
55868                         24,
55869                         24,
55870                         24,
55871                         24,
55872                         24,
55873                         24,
55874                         24,
55875                         24,
55876                         24,
55877                         24,
55878                         24,
55879                         24,
55880                         24,
55881                         24,
55882                         24,
55883                         24,
55884                         24,
55885                         24,
55886                         24,
55887                         24,
55888                         24,
55889                         24,
55890                         23,
55891                         24,
55892                         24,
55893                         24,
55894                         24,
55895                         24,
55896                         24,
55897                         24,
55898                         24,
55899                         24,
55900                         24,
55901                         24,
55902                         24,
55903                         24,
55904                         24,
55905                         24,
55906                         24,
55907                         24,
55908                         24,
55909                         24,
55910                         24,
55911                         24,
55912                         24,
55913                         24,
55914                         24,
55915                         24,
55916                         24,
55917                         24,
55918                         23,
55919                         24,
55920                         24,
55921                         24,
55922                         24,
55923                         24,
55924                         24,
55925                         24,
55926                         24,
55927                         24,
55928                         24,
55929                         24,
55930                         24,
55931                         24,
55932                         24,
55933                         24,
55934                         24,
55935                         24,
55936                         24,
55937                         24,
55938                         24,
55939                         24,
55940                         24,
55941                         24,
55942                         24,
55943                         24,
55944                         24,
55945                         24,
55946                         23,
55947                         24,
55948                         24,
55949                         24,
55950                         24,
55951                         24,
55952                         24,
55953                         24,
55954                         24,
55955                         24,
55956                         24,
55957                         24,
55958                         24,
55959                         24,
55960                         24,
55961                         24,
55962                         24,
55963                         24,
55964                         24,
55965                         24,
55966                         24,
55967                         24,
55968                         24,
55969                         24,
55970                         24,
55971                         24,
55972                         24,
55973                         24,
55974                         23,
55975                         24,
55976                         24,
55977                         24,
55978                         24,
55979                         24,
55980                         24,
55981                         24,
55982                         24,
55983                         24,
55984                         24,
55985                         24,
55986                         24,
55987                         24,
55988                         24,
55989                         24,
55990                         24,
55991                         24,
55992                         24,
55993                         24,
55994                         24,
55995                         24,
55996                         24,
55997                         24,
55998                         24,
55999                         24,
56000                         24,
56001                         24,
56002                         23,
56003                         24,
56004                         24,
56005                         24,
56006                         24,
56007                         24,
56008                         24,
56009                         24,
56010                         24,
56011                         24,
56012                         24,
56013                         24,
56014                         24,
56015                         24,
56016                         24,
56017                         24,
56018                         24,
56019                         24,
56020                         24,
56021                         24,
56022                         24,
56023                         24,
56024                         24,
56025                         24,
56026                         24,
56027                         24,
56028                         24,
56029                         24,
56030                         23,
56031                         24,
56032                         24,
56033                         24,
56034                         24,
56035                         24,
56036                         24,
56037                         24,
56038                         24,
56039                         24,
56040                         24,
56041                         24,
56042                         24,
56043                         24,
56044                         24,
56045                         24,
56046                         24,
56047                         24,
56048                         24,
56049                         24,
56050                         24,
56051                         24,
56052                         24,
56053                         24,
56054                         24,
56055                         24,
56056                         24,
56057                         24,
56058                         23,
56059                         24,
56060                         24,
56061                         24,
56062                         24,
56063                         24,
56064                         24,
56065                         24,
56066                         24,
56067                         24,
56068                         24,
56069                         24,
56070                         24,
56071                         24,
56072                         24,
56073                         24,
56074                         24,
56075                         24,
56076                         24,
56077                         24,
56078                         24,
56079                         24,
56080                         24,
56081                         24,
56082                         24,
56083                         24,
56084                         24,
56085                         24,
56086                         23,
56087                         24,
56088                         24,
56089                         24,
56090                         24,
56091                         24,
56092                         24,
56093                         24,
56094                         24,
56095                         24,
56096                         24,
56097                         24,
56098                         24,
56099                         24,
56100                         24,
56101                         24,
56102                         24,
56103                         24,
56104                         24,
56105                         24,
56106                         24,
56107                         24,
56108                         24,
56109                         24,
56110                         24,
56111                         24,
56112                         24,
56113                         24,
56114                         23,
56115                         24,
56116                         24,
56117                         24,
56118                         24,
56119                         24,
56120                         24,
56121                         24,
56122                         24,
56123                         24,
56124                         24,
56125                         24,
56126                         24,
56127                         24,
56128                         24,
56129                         24,
56130                         24,
56131                         24,
56132                         24,
56133                         24,
56134                         24,
56135                         24,
56136                         24,
56137                         24,
56138                         24,
56139                         24,
56140                         24,
56141                         24,
56142                         23,
56143                         24,
56144                         24,
56145                         24,
56146                         24,
56147                         24,
56148                         24,
56149                         24,
56150                         24,
56151                         24,
56152                         24,
56153                         24,
56154                         24,
56155                         24,
56156                         24,
56157                         24,
56158                         24,
56159                         24,
56160                         24,
56161                         24,
56162                         24,
56163                         24,
56164                         24,
56165                         24,
56166                         24,
56167                         24,
56168                         24,
56169                         24,
56170                         23,
56171                         24,
56172                         24,
56173                         24,
56174                         24,
56175                         24,
56176                         24,
56177                         24,
56178                         24,
56179                         24,
56180                         24,
56181                         24,
56182                         24,
56183                         24,
56184                         24,
56185                         24,
56186                         24,
56187                         24,
56188                         24,
56189                         24,
56190                         24,
56191                         24,
56192                         24,
56193                         24,
56194                         24,
56195                         24,
56196                         24,
56197                         24,
56198                         23,
56199                         24,
56200                         24,
56201                         24,
56202                         24,
56203                         24,
56204                         24,
56205                         24,
56206                         24,
56207                         24,
56208                         24,
56209                         24,
56210                         24,
56211                         24,
56212                         24,
56213                         24,
56214                         24,
56215                         24,
56216                         24,
56217                         24,
56218                         24,
56219                         24,
56220                         24,
56221                         24,
56222                         24,
56223                         24,
56224                         24,
56225                         24,
56226                         23,
56227                         24,
56228                         24,
56229                         24,
56230                         24,
56231                         24,
56232                         24,
56233                         24,
56234                         24,
56235                         24,
56236                         24,
56237                         24,
56238                         24,
56239                         24,
56240                         24,
56241                         24,
56242                         24,
56243                         24,
56244                         24,
56245                         24,
56246                         24,
56247                         24,
56248                         24,
56249                         24,
56250                         24,
56251                         24,
56252                         24,
56253                         24,
56254                         23,
56255                         24,
56256                         24,
56257                         24,
56258                         24,
56259                         24,
56260                         24,
56261                         24,
56262                         24,
56263                         24,
56264                         24,
56265                         24,
56266                         24,
56267                         24,
56268                         24,
56269                         24,
56270                         24,
56271                         24,
56272                         24,
56273                         24,
56274                         24,
56275                         24,
56276                         24,
56277                         24,
56278                         24,
56279                         24,
56280                         24,
56281                         24,
56282                         23,
56283                         24,
56284                         24,
56285                         24,
56286                         24,
56287                         24,
56288                         24,
56289                         24,
56290                         24,
56291                         24,
56292                         24,
56293                         24,
56294                         24,
56295                         24,
56296                         24,
56297                         24,
56298                         24,
56299                         24,
56300                         24,
56301                         24,
56302                         24,
56303                         24,
56304                         24,
56305                         24,
56306                         24,
56307                         24,
56308                         24,
56309                         24,
56310                         23,
56311                         24,
56312                         24,
56313                         24,
56314                         24,
56315                         24,
56316                         24,
56317                         24,
56318                         24,
56319                         24,
56320                         24,
56321                         24,
56322                         24,
56323                         24,
56324                         24,
56325                         24,
56326                         24,
56327                         24,
56328                         24,
56329                         24,
56330                         24,
56331                         24,
56332                         24,
56333                         24,
56334                         24,
56335                         24,
56336                         24,
56337                         24,
56338                         23,
56339                         24,
56340                         24,
56341                         24,
56342                         24,
56343                         24,
56344                         24,
56345                         24,
56346                         24,
56347                         24,
56348                         24,
56349                         24,
56350                         24,
56351                         24,
56352                         24,
56353                         24,
56354                         24,
56355                         24,
56356                         24,
56357                         24,
56358                         24,
56359                         24,
56360                         24,
56361                         24,
56362                         24,
56363                         24,
56364                         24,
56365                         24,
56366                         23,
56367                         24,
56368                         24,
56369                         24,
56370                         24,
56371                         24,
56372                         24,
56373                         24,
56374                         24,
56375                         24,
56376                         24,
56377                         24,
56378                         24,
56379                         24,
56380                         24,
56381                         24,
56382                         24,
56383                         24,
56384                         24,
56385                         24,
56386                         24,
56387                         24,
56388                         24,
56389                         24,
56390                         24,
56391                         24,
56392                         24,
56393                         24,
56394                         23,
56395                         24,
56396                         24,
56397                         24,
56398                         24,
56399                         24,
56400                         24,
56401                         24,
56402                         24,
56403                         24,
56404                         24,
56405                         24,
56406                         24,
56407                         24,
56408                         24,
56409                         24,
56410                         24,
56411                         24,
56412                         24,
56413                         24,
56414                         24,
56415                         24,
56416                         24,
56417                         24,
56418                         24,
56419                         24,
56420                         24,
56421                         24,
56422                         23,
56423                         24,
56424                         24,
56425                         24,
56426                         24,
56427                         24,
56428                         24,
56429                         24,
56430                         24,
56431                         24,
56432                         24,
56433                         24,
56434                         24,
56435                         24,
56436                         24,
56437                         24,
56438                         24,
56439                         24,
56440                         24,
56441                         24,
56442                         24,
56443                         24,
56444                         24,
56445                         24,
56446                         24,
56447                         24,
56448                         24,
56449                         24,
56450                         23,
56451                         24,
56452                         24,
56453                         24,
56454                         24,
56455                         24,
56456                         24,
56457                         24,
56458                         24,
56459                         24,
56460                         24,
56461                         24,
56462                         24,
56463                         24,
56464                         24,
56465                         24,
56466                         24,
56467                         24,
56468                         24,
56469                         24,
56470                         24,
56471                         24,
56472                         24,
56473                         24,
56474                         24,
56475                         24,
56476                         24,
56477                         24,
56478                         23,
56479                         24,
56480                         24,
56481                         24,
56482                         24,
56483                         24,
56484                         24,
56485                         24,
56486                         24,
56487                         24,
56488                         24,
56489                         24,
56490                         24,
56491                         24,
56492                         24,
56493                         24,
56494                         24,
56495                         24,
56496                         24,
56497                         24,
56498                         24,
56499                         24,
56500                         24,
56501                         24,
56502                         24,
56503                         24,
56504                         24,
56505                         24,
56506                         23,
56507                         24,
56508                         24,
56509                         24,
56510                         24,
56511                         24,
56512                         24,
56513                         24,
56514                         24,
56515                         24,
56516                         24,
56517                         24,
56518                         24,
56519                         24,
56520                         24,
56521                         24,
56522                         24,
56523                         24,
56524                         24,
56525                         24,
56526                         24,
56527                         24,
56528                         24,
56529                         24,
56530                         24,
56531                         24,
56532                         24,
56533                         24,
56534                         23,
56535                         24,
56536                         24,
56537                         24,
56538                         24,
56539                         24,
56540                         24,
56541                         24,
56542                         24,
56543                         24,
56544                         24,
56545                         24,
56546                         24,
56547                         24,
56548                         24,
56549                         24,
56550                         24,
56551                         24,
56552                         24,
56553                         24,
56554                         24,
56555                         24,
56556                         24,
56557                         24,
56558                         24,
56559                         24,
56560                         24,
56561                         24,
56562                         23,
56563                         24,
56564                         24,
56565                         24,
56566                         24,
56567                         24,
56568                         24,
56569                         24,
56570                         24,
56571                         24,
56572                         24,
56573                         24,
56574                         24,
56575                         24,
56576                         24,
56577                         24,
56578                         24,
56579                         24,
56580                         24,
56581                         24,
56582                         24,
56583                         24,
56584                         24,
56585                         24,
56586                         24,
56587                         24,
56588                         24,
56589                         24,
56590                         23,
56591                         24,
56592                         24,
56593                         24,
56594                         24,
56595                         24,
56596                         24,
56597                         24,
56598                         24,
56599                         24,
56600                         24,
56601                         24,
56602                         24,
56603                         24,
56604                         24,
56605                         24,
56606                         24,
56607                         24,
56608                         24,
56609                         24,
56610                         24,
56611                         24,
56612                         24,
56613                         24,
56614                         24,
56615                         24,
56616                         24,
56617                         24,
56618                         23,
56619                         24,
56620                         24,
56621                         24,
56622                         24,
56623                         24,
56624                         24,
56625                         24,
56626                         24,
56627                         24,
56628                         24,
56629                         24,
56630                         24,
56631                         24,
56632                         24,
56633                         24,
56634                         24,
56635                         24,
56636                         24,
56637                         24,
56638                         24,
56639                         24,
56640                         24,
56641                         24,
56642                         24,
56643                         24,
56644                         24,
56645                         24,
56646                         23,
56647                         24,
56648                         24,
56649                         24,
56650                         24,
56651                         24,
56652                         24,
56653                         24,
56654                         24,
56655                         24,
56656                         24,
56657                         24,
56658                         24,
56659                         24,
56660                         24,
56661                         24,
56662                         24,
56663                         24,
56664                         24,
56665                         24,
56666                         24,
56667                         24,
56668                         24,
56669                         24,
56670                         24,
56671                         24,
56672                         24,
56673                         24,
56674                         23,
56675                         24,
56676                         24,
56677                         24,
56678                         24,
56679                         24,
56680                         24,
56681                         24,
56682                         24,
56683                         24,
56684                         24,
56685                         24,
56686                         24,
56687                         24,
56688                         24,
56689                         24,
56690                         24,
56691                         24,
56692                         24,
56693                         24,
56694                         24,
56695                         24,
56696                         24,
56697                         24,
56698                         24,
56699                         24,
56700                         24,
56701                         24,
56702                         23,
56703                         24,
56704                         24,
56705                         24,
56706                         24,
56707                         24,
56708                         24,
56709                         24,
56710                         24,
56711                         24,
56712                         24,
56713                         24,
56714                         24,
56715                         24,
56716                         24,
56717                         24,
56718                         24,
56719                         24,
56720                         24,
56721                         24,
56722                         24,
56723                         24,
56724                         24,
56725                         24,
56726                         24,
56727                         24,
56728                         24,
56729                         24,
56730                         23,
56731                         24,
56732                         24,
56733                         24,
56734                         24,
56735                         24,
56736                         24,
56737                         24,
56738                         24,
56739                         24,
56740                         24,
56741                         24,
56742                         24,
56743                         24,
56744                         24,
56745                         24,
56746                         24,
56747                         24,
56748                         24,
56749                         24,
56750                         24,
56751                         24,
56752                         24,
56753                         24,
56754                         24,
56755                         24,
56756                         24,
56757                         24,
56758                         23,
56759                         24,
56760                         24,
56761                         24,
56762                         24,
56763                         24,
56764                         24,
56765                         24,
56766                         24,
56767                         24,
56768                         24,
56769                         24,
56770                         24,
56771                         24,
56772                         24,
56773                         24,
56774                         24,
56775                         24,
56776                         24,
56777                         24,
56778                         24,
56779                         24,
56780                         24,
56781                         24,
56782                         24,
56783                         24,
56784                         24,
56785                         24,
56786                         23,
56787                         24,
56788                         24,
56789                         24,
56790                         24,
56791                         24,
56792                         24,
56793                         24,
56794                         24,
56795                         24,
56796                         24,
56797                         24,
56798                         24,
56799                         24,
56800                         24,
56801                         24,
56802                         24,
56803                         24,
56804                         24,
56805                         24,
56806                         24,
56807                         24,
56808                         24,
56809                         24,
56810                         24,
56811                         24,
56812                         24,
56813                         24,
56814                         23,
56815                         24,
56816                         24,
56817                         24,
56818                         24,
56819                         24,
56820                         24,
56821                         24,
56822                         24,
56823                         24,
56824                         24,
56825                         24,
56826                         24,
56827                         24,
56828                         24,
56829                         24,
56830                         24,
56831                         24,
56832                         24,
56833                         24,
56834                         24,
56835                         24,
56836                         24,
56837                         24,
56838                         24,
56839                         24,
56840                         24,
56841                         24,
56842                         23,
56843                         24,
56844                         24,
56845                         24,
56846                         24,
56847                         24,
56848                         24,
56849                         24,
56850                         24,
56851                         24,
56852                         24,
56853                         24,
56854                         24,
56855                         24,
56856                         24,
56857                         24,
56858                         24,
56859                         24,
56860                         24,
56861                         24,
56862                         24,
56863                         24,
56864                         24,
56865                         24,
56866                         24,
56867                         24,
56868                         24,
56869                         24,
56870                         23,
56871                         24,
56872                         24,
56873                         24,
56874                         24,
56875                         24,
56876                         24,
56877                         24,
56878                         24,
56879                         24,
56880                         24,
56881                         24,
56882                         24,
56883                         24,
56884                         24,
56885                         24,
56886                         24,
56887                         24,
56888                         24,
56889                         24,
56890                         24,
56891                         24,
56892                         24,
56893                         24,
56894                         24,
56895                         24,
56896                         24,
56897                         24,
56898                         23,
56899                         24,
56900                         24,
56901                         24,
56902                         24,
56903                         24,
56904                         24,
56905                         24,
56906                         24,
56907                         24,
56908                         24,
56909                         24,
56910                         24,
56911                         24,
56912                         24,
56913                         24,
56914                         24,
56915                         24,
56916                         24,
56917                         24,
56918                         24,
56919                         24,
56920                         24,
56921                         24,
56922                         24,
56923                         24,
56924                         24,
56925                         24,
56926                         23,
56927                         24,
56928                         24,
56929                         24,
56930                         24,
56931                         24,
56932                         24,
56933                         24,
56934                         24,
56935                         24,
56936                         24,
56937                         24,
56938                         24,
56939                         24,
56940                         24,
56941                         24,
56942                         24,
56943                         24,
56944                         24,
56945                         24,
56946                         24,
56947                         24,
56948                         24,
56949                         24,
56950                         24,
56951                         24,
56952                         24,
56953                         24,
56954                         23,
56955                         24,
56956                         24,
56957                         24,
56958                         24,
56959                         24,
56960                         24,
56961                         24,
56962                         24,
56963                         24,
56964                         24,
56965                         24,
56966                         24,
56967                         24,
56968                         24,
56969                         24,
56970                         24,
56971                         24,
56972                         24,
56973                         24,
56974                         24,
56975                         24,
56976                         24,
56977                         24,
56978                         24,
56979                         24,
56980                         24,
56981                         24,
56982                         23,
56983                         24,
56984                         24,
56985                         24,
56986                         24,
56987                         24,
56988                         24,
56989                         24,
56990                         24,
56991                         24,
56992                         24,
56993                         24,
56994                         24,
56995                         24,
56996                         24,
56997                         24,
56998                         24,
56999                         24,
57000                         24,
57001                         24,
57002                         24,
57003                         24,
57004                         24,
57005                         24,
57006                         24,
57007                         24,
57008                         24,
57009                         24,
57010                         23,
57011                         24,
57012                         24,
57013                         24,
57014                         24,
57015                         24,
57016                         24,
57017                         24,
57018                         24,
57019                         24,
57020                         24,
57021                         24,
57022                         24,
57023                         24,
57024                         24,
57025                         24,
57026                         24,
57027                         24,
57028                         24,
57029                         24,
57030                         24,
57031                         24,
57032                         24,
57033                         24,
57034                         24,
57035                         24,
57036                         24,
57037                         24,
57038                         23,
57039                         24,
57040                         24,
57041                         24,
57042                         24,
57043                         24,
57044                         24,
57045                         24,
57046                         24,
57047                         24,
57048                         24,
57049                         24,
57050                         24,
57051                         24,
57052                         24,
57053                         24,
57054                         24,
57055                         24,
57056                         24,
57057                         24,
57058                         24,
57059                         24,
57060                         24,
57061                         24,
57062                         24,
57063                         24,
57064                         24,
57065                         24,
57066                         23,
57067                         24,
57068                         24,
57069                         24,
57070                         24,
57071                         24,
57072                         24,
57073                         24,
57074                         24,
57075                         24,
57076                         24,
57077                         24,
57078                         24,
57079                         24,
57080                         24,
57081                         24,
57082                         24,
57083                         24,
57084                         24,
57085                         24,
57086                         24,
57087                         24,
57088                         24,
57089                         24,
57090                         24,
57091                         24,
57092                         24,
57093                         24,
57094                         23,
57095                         24,
57096                         24,
57097                         24,
57098                         24,
57099                         24,
57100                         24,
57101                         24,
57102                         24,
57103                         24,
57104                         24,
57105                         24,
57106                         24,
57107                         24,
57108                         24,
57109                         24,
57110                         24,
57111                         24,
57112                         24,
57113                         24,
57114                         24,
57115                         24,
57116                         24,
57117                         24,
57118                         24,
57119                         24,
57120                         24,
57121                         24,
57122                         23,
57123                         24,
57124                         24,
57125                         24,
57126                         24,
57127                         24,
57128                         24,
57129                         24,
57130                         24,
57131                         24,
57132                         24,
57133                         24,
57134                         24,
57135                         24,
57136                         24,
57137                         24,
57138                         24,
57139                         24,
57140                         24,
57141                         24,
57142                         24,
57143                         24,
57144                         24,
57145                         24,
57146                         24,
57147                         24,
57148                         24,
57149                         24,
57150                         23,
57151                         24,
57152                         24,
57153                         24,
57154                         24,
57155                         24,
57156                         24,
57157                         24,
57158                         24,
57159                         24,
57160                         24,
57161                         24,
57162                         24,
57163                         24,
57164                         24,
57165                         24,
57166                         24,
57167                         24,
57168                         24,
57169                         24,
57170                         24,
57171                         24,
57172                         24,
57173                         24,
57174                         24,
57175                         24,
57176                         24,
57177                         24,
57178                         23,
57179                         24,
57180                         24,
57181                         24,
57182                         24,
57183                         24,
57184                         24,
57185                         24,
57186                         24,
57187                         24,
57188                         24,
57189                         24,
57190                         24,
57191                         24,
57192                         24,
57193                         24,
57194                         24,
57195                         24,
57196                         24,
57197                         24,
57198                         24,
57199                         24,
57200                         24,
57201                         24,
57202                         24,
57203                         24,
57204                         24,
57205                         24,
57206                         23,
57207                         24,
57208                         24,
57209                         24,
57210                         24,
57211                         24,
57212                         24,
57213                         24,
57214                         24,
57215                         24,
57216                         24,
57217                         24,
57218                         24,
57219                         24,
57220                         24,
57221                         24,
57222                         24,
57223                         24,
57224                         24,
57225                         24,
57226                         24,
57227                         24,
57228                         24,
57229                         24,
57230                         24,
57231                         24,
57232                         24,
57233                         24,
57234                         23,
57235                         24,
57236                         24,
57237                         24,
57238                         24,
57239                         24,
57240                         24,
57241                         24,
57242                         24,
57243                         24,
57244                         24,
57245                         24,
57246                         24,
57247                         24,
57248                         24,
57249                         24,
57250                         24,
57251                         24,
57252                         24,
57253                         24,
57254                         24,
57255                         24,
57256                         24,
57257                         24,
57258                         24,
57259                         24,
57260                         24,
57261                         24,
57262                         23,
57263                         24,
57264                         24,
57265                         24,
57266                         24,
57267                         24,
57268                         24,
57269                         24,
57270                         24,
57271                         24,
57272                         24,
57273                         24,
57274                         24,
57275                         24,
57276                         24,
57277                         24,
57278                         24,
57279                         24,
57280                         24,
57281                         24,
57282                         24,
57283                         24,
57284                         24,
57285                         24,
57286                         24,
57287                         24,
57288                         24,
57289                         24,
57290                         23,
57291                         24,
57292                         24,
57293                         24,
57294                         24,
57295                         24,
57296                         24,
57297                         24,
57298                         24,
57299                         24,
57300                         24,
57301                         24,
57302                         24,
57303                         24,
57304                         24,
57305                         24,
57306                         24,
57307                         24,
57308                         24,
57309                         24,
57310                         24,
57311                         24,
57312                         24,
57313                         24,
57314                         24,
57315                         24,
57316                         24,
57317                         24,
57318                         23,
57319                         24,
57320                         24,
57321                         24,
57322                         24,
57323                         24,
57324                         24,
57325                         24,
57326                         24,
57327                         24,
57328                         24,
57329                         24,
57330                         24,
57331                         24,
57332                         24,
57333                         24,
57334                         24,
57335                         24,
57336                         24,
57337                         24,
57338                         24,
57339                         24,
57340                         24,
57341                         24,
57342                         24,
57343                         24,
57344                         24,
57345                         24,
57346                         23,
57347                         24,
57348                         24,
57349                         24,
57350                         24,
57351                         24,
57352                         24,
57353                         24,
57354                         24,
57355                         24,
57356                         24,
57357                         24,
57358                         24,
57359                         24,
57360                         24,
57361                         24,
57362                         24,
57363                         24,
57364                         24,
57365                         24,
57366                         24,
57367                         24,
57368                         24,
57369                         24,
57370                         24,
57371                         24,
57372                         24,
57373                         24,
57374                         23,
57375                         24,
57376                         24,
57377                         24,
57378                         24,
57379                         24,
57380                         24,
57381                         24,
57382                         24,
57383                         24,
57384                         24,
57385                         24,
57386                         24,
57387                         24,
57388                         24,
57389                         24,
57390                         24,
57391                         24,
57392                         24,
57393                         24,
57394                         24,
57395                         24,
57396                         24,
57397                         24,
57398                         24,
57399                         24,
57400                         24,
57401                         24,
57402                         23,
57403                         24,
57404                         24,
57405                         24,
57406                         24,
57407                         24,
57408                         24,
57409                         24,
57410                         24,
57411                         24,
57412                         24,
57413                         24,
57414                         24,
57415                         24,
57416                         24,
57417                         24,
57418                         24,
57419                         24,
57420                         24,
57421                         24,
57422                         24,
57423                         24,
57424                         24,
57425                         24,
57426                         24,
57427                         24,
57428                         24,
57429                         24,
57430                         23,
57431                         24,
57432                         24,
57433                         24,
57434                         24,
57435                         24,
57436                         24,
57437                         24,
57438                         24,
57439                         24,
57440                         24,
57441                         24,
57442                         24,
57443                         24,
57444                         24,
57445                         24,
57446                         24,
57447                         24,
57448                         24,
57449                         24,
57450                         24,
57451                         24,
57452                         24,
57453                         24,
57454                         24,
57455                         24,
57456                         24,
57457                         24,
57458                         23,
57459                         24,
57460                         24,
57461                         24,
57462                         24,
57463                         24,
57464                         24,
57465                         24,
57466                         24,
57467                         24,
57468                         24,
57469                         24,
57470                         24,
57471                         24,
57472                         24,
57473                         24,
57474                         24,
57475                         24,
57476                         24,
57477                         24,
57478                         24,
57479                         24,
57480                         24,
57481                         24,
57482                         24,
57483                         24,
57484                         24,
57485                         24,
57486                         23,
57487                         24,
57488                         24,
57489                         24,
57490                         24,
57491                         24,
57492                         24,
57493                         24,
57494                         24,
57495                         24,
57496                         24,
57497                         24,
57498                         24,
57499                         24,
57500                         24,
57501                         24,
57502                         24,
57503                         24,
57504                         24,
57505                         24,
57506                         24,
57507                         24,
57508                         24,
57509                         24,
57510                         24,
57511                         24,
57512                         24,
57513                         24,
57514                         23,
57515                         24,
57516                         24,
57517                         24,
57518                         24,
57519                         24,
57520                         24,
57521                         24,
57522                         24,
57523                         24,
57524                         24,
57525                         24,
57526                         24,
57527                         24,
57528                         24,
57529                         24,
57530                         24,
57531                         24,
57532                         24,
57533                         24,
57534                         24,
57535                         24,
57536                         24,
57537                         24,
57538                         24,
57539                         24,
57540                         24,
57541                         24,
57542                         23,
57543                         24,
57544                         24,
57545                         24,
57546                         24,
57547                         24,
57548                         24,
57549                         24,
57550                         24,
57551                         24,
57552                         24,
57553                         24,
57554                         24,
57555                         24,
57556                         24,
57557                         24,
57558                         24,
57559                         24,
57560                         24,
57561                         24,
57562                         24,
57563                         24,
57564                         24,
57565                         24,
57566                         24,
57567                         24,
57568                         24,
57569                         24,
57570                         23,
57571                         24,
57572                         24,
57573                         24,
57574                         24,
57575                         24,
57576                         24,
57577                         24,
57578                         24,
57579                         24,
57580                         24,
57581                         24,
57582                         24,
57583                         24,
57584                         24,
57585                         24,
57586                         24,
57587                         24,
57588                         24,
57589                         24,
57590                         24,
57591                         24,
57592                         24,
57593                         24,
57594                         24,
57595                         24,
57596                         24,
57597                         24,
57598                         23,
57599                         24,
57600                         24,
57601                         24,
57602                         24,
57603                         24,
57604                         24,
57605                         24,
57606                         24,
57607                         24,
57608                         24,
57609                         24,
57610                         24,
57611                         24,
57612                         24,
57613                         24,
57614                         24,
57615                         24,
57616                         24,
57617                         24,
57618                         24,
57619                         24,
57620                         24,
57621                         24,
57622                         24,
57623                         24,
57624                         24,
57625                         24,
57626                         23,
57627                         24,
57628                         24,
57629                         24,
57630                         24,
57631                         24,
57632                         24,
57633                         24,
57634                         24,
57635                         24,
57636                         24,
57637                         24,
57638                         24,
57639                         24,
57640                         24,
57641                         24,
57642                         24,
57643                         24,
57644                         24,
57645                         24,
57646                         24,
57647                         24,
57648                         24,
57649                         24,
57650                         24,
57651                         24,
57652                         24,
57653                         24,
57654                         23,
57655                         24,
57656                         24,
57657                         24,
57658                         24,
57659                         24,
57660                         24,
57661                         24,
57662                         24,
57663                         24,
57664                         24,
57665                         24,
57666                         24,
57667                         24,
57668                         24,
57669                         24,
57670                         24,
57671                         24,
57672                         24,
57673                         24,
57674                         24,
57675                         24,
57676                         24,
57677                         24,
57678                         24,
57679                         24,
57680                         24,
57681                         24,
57682                         23,
57683                         24,
57684                         24,
57685                         24,
57686                         24,
57687                         24,
57688                         24,
57689                         24,
57690                         24,
57691                         24,
57692                         24,
57693                         24,
57694                         24,
57695                         24,
57696                         24,
57697                         24,
57698                         24,
57699                         24,
57700                         24,
57701                         24,
57702                         24,
57703                         24,
57704                         24,
57705                         24,
57706                         24,
57707                         24,
57708                         24,
57709                         24,
57710                         23,
57711                         24,
57712                         24,
57713                         24,
57714                         24,
57715                         24,
57716                         24,
57717                         24,
57718                         24,
57719                         24,
57720                         24,
57721                         24,
57722                         24,
57723                         24,
57724                         24,
57725                         24,
57726                         24,
57727                         24,
57728                         24,
57729                         24,
57730                         24,
57731                         24,
57732                         24,
57733                         24,
57734                         24,
57735                         24,
57736                         24,
57737                         24,
57738                         23,
57739                         24,
57740                         24,
57741                         24,
57742                         24,
57743                         24,
57744                         24,
57745                         24,
57746                         24,
57747                         24,
57748                         24,
57749                         24,
57750                         24,
57751                         24,
57752                         24,
57753                         24,
57754                         24,
57755                         24,
57756                         24,
57757                         24,
57758                         24,
57759                         24,
57760                         24,
57761                         24,
57762                         24,
57763                         24,
57764                         24,
57765                         24,
57766                         23,
57767                         24,
57768                         24,
57769                         24,
57770                         24,
57771                         24,
57772                         24,
57773                         24,
57774                         24,
57775                         24,
57776                         24,
57777                         24,
57778                         24,
57779                         24,
57780                         24,
57781                         24,
57782                         24,
57783                         24,
57784                         24,
57785                         24,
57786                         24,
57787                         24,
57788                         24,
57789                         24,
57790                         24,
57791                         24,
57792                         24,
57793                         24,
57794                         23,
57795                         24,
57796                         24,
57797                         24,
57798                         24,
57799                         24,
57800                         24,
57801                         24,
57802                         24,
57803                         24,
57804                         24,
57805                         24,
57806                         24,
57807                         24,
57808                         24,
57809                         24,
57810                         24,
57811                         24,
57812                         24,
57813                         24,
57814                         24,
57815                         24,
57816                         24,
57817                         24,
57818                         24,
57819                         24,
57820                         24,
57821                         24,
57822                         23,
57823                         24,
57824                         24,
57825                         24,
57826                         24,
57827                         24,
57828                         24,
57829                         24,
57830                         24,
57831                         24,
57832                         24,
57833                         24,
57834                         24,
57835                         24,
57836                         24,
57837                         24,
57838                         24,
57839                         24,
57840                         24,
57841                         24,
57842                         24,
57843                         24,
57844                         24,
57845                         24,
57846                         24,
57847                         24,
57848                         24,
57849                         24,
57850                         23,
57851                         24,
57852                         24,
57853                         24,
57854                         24,
57855                         24,
57856                         24,
57857                         24,
57858                         24,
57859                         24,
57860                         24,
57861                         24,
57862                         24,
57863                         24,
57864                         24,
57865                         24,
57866                         24,
57867                         24,
57868                         24,
57869                         24,
57870                         24,
57871                         24,
57872                         24,
57873                         24,
57874                         24,
57875                         24,
57876                         24,
57877                         24,
57878                         23,
57879                         24,
57880                         24,
57881                         24,
57882                         24,
57883                         24,
57884                         24,
57885                         24,
57886                         24,
57887                         24,
57888                         24,
57889                         24,
57890                         24,
57891                         24,
57892                         24,
57893                         24,
57894                         24,
57895                         24,
57896                         24,
57897                         24,
57898                         24,
57899                         24,
57900                         24,
57901                         24,
57902                         24,
57903                         24,
57904                         24,
57905                         24,
57906                         23,
57907                         24,
57908                         24,
57909                         24,
57910                         24,
57911                         24,
57912                         24,
57913                         24,
57914                         24,
57915                         24,
57916                         24,
57917                         24,
57918                         24,
57919                         24,
57920                         24,
57921                         24,
57922                         24,
57923                         24,
57924                         24,
57925                         24,
57926                         24,
57927                         24,
57928                         24,
57929                         24,
57930                         24,
57931                         24,
57932                         24,
57933                         24,
57934                         23,
57935                         24,
57936                         24,
57937                         24,
57938                         24,
57939                         24,
57940                         24,
57941                         24,
57942                         24,
57943                         24,
57944                         24,
57945                         24,
57946                         24,
57947                         24,
57948                         24,
57949                         24,
57950                         24,
57951                         24,
57952                         24,
57953                         24,
57954                         24,
57955                         24,
57956                         24,
57957                         24,
57958                         24,
57959                         24,
57960                         24,
57961                         24,
57962                         23,
57963                         24,
57964                         24,
57965                         24,
57966                         24,
57967                         24,
57968                         24,
57969                         24,
57970                         24,
57971                         24,
57972                         24,
57973                         24,
57974                         24,
57975                         24,
57976                         24,
57977                         24,
57978                         24,
57979                         24,
57980                         24,
57981                         24,
57982                         24,
57983                         24,
57984                         24,
57985                         24,
57986                         24,
57987                         24,
57988                         24,
57989                         24,
57990                         23,
57991                         24,
57992                         24,
57993                         24,
57994                         24,
57995                         24,
57996                         24,
57997                         24,
57998                         24,
57999                         24,
58000                         24,
58001                         24,
58002                         24,
58003                         24,
58004                         24,
58005                         24,
58006                         24,
58007                         24,
58008                         24,
58009                         24,
58010                         24,
58011                         24,
58012                         24,
58013                         24,
58014                         24,
58015                         24,
58016                         24,
58017                         24,
58018                         23,
58019                         24,
58020                         24,
58021                         24,
58022                         24,
58023                         24,
58024                         24,
58025                         24,
58026                         24,
58027                         24,
58028                         24,
58029                         24,
58030                         24,
58031                         24,
58032                         24,
58033                         24,
58034                         24,
58035                         24,
58036                         24,
58037                         24,
58038                         24,
58039                         24,
58040                         24,
58041                         24,
58042                         24,
58043                         24,
58044                         24,
58045                         24,
58046                         23,
58047                         24,
58048                         24,
58049                         24,
58050                         24,
58051                         24,
58052                         24,
58053                         24,
58054                         24,
58055                         24,
58056                         24,
58057                         24,
58058                         24,
58059                         24,
58060                         24,
58061                         24,
58062                         24,
58063                         24,
58064                         24,
58065                         24,
58066                         24,
58067                         24,
58068                         24,
58069                         24,
58070                         24,
58071                         24,
58072                         24,
58073                         24,
58074                         23,
58075                         24,
58076                         24,
58077                         24,
58078                         24,
58079                         24,
58080                         24,
58081                         24,
58082                         24,
58083                         24,
58084                         24,
58085                         24,
58086                         24,
58087                         24,
58088                         24,
58089                         24,
58090                         24,
58091                         24,
58092                         24,
58093                         24,
58094                         24,
58095                         24,
58096                         24,
58097                         24,
58098                         24,
58099                         24,
58100                         24,
58101                         24,
58102                         23,
58103                         24,
58104                         24,
58105                         24,
58106                         24,
58107                         24,
58108                         24,
58109                         24,
58110                         24,
58111                         24,
58112                         24,
58113                         24,
58114                         24,
58115                         24,
58116                         24,
58117                         24,
58118                         24,
58119                         24,
58120                         24,
58121                         24,
58122                         24,
58123                         24,
58124                         24,
58125                         24,
58126                         24,
58127                         24,
58128                         24,
58129                         24,
58130                         23,
58131                         24,
58132                         24,
58133                         24,
58134                         24,
58135                         24,
58136                         24,
58137                         24,
58138                         24,
58139                         24,
58140                         24,
58141                         24,
58142                         24,
58143                         24,
58144                         24,
58145                         24,
58146                         24,
58147                         24,
58148                         24,
58149                         24,
58150                         24,
58151                         24,
58152                         24,
58153                         24,
58154                         24,
58155                         24,
58156                         24,
58157                         24,
58158                         23,
58159                         24,
58160                         24,
58161                         24,
58162                         24,
58163                         24,
58164                         24,
58165                         24,
58166                         24,
58167                         24,
58168                         24,
58169                         24,
58170                         24,
58171                         24,
58172                         24,
58173                         24,
58174                         24,
58175                         24,
58176                         24,
58177                         24,
58178                         24,
58179                         24,
58180                         24,
58181                         24,
58182                         24,
58183                         24,
58184                         24,
58185                         24,
58186                         23,
58187                         24,
58188                         24,
58189                         24,
58190                         24,
58191                         24,
58192                         24,
58193                         24,
58194                         24,
58195                         24,
58196                         24,
58197                         24,
58198                         24,
58199                         24,
58200                         24,
58201                         24,
58202                         24,
58203                         24,
58204                         24,
58205                         24,
58206                         24,
58207                         24,
58208                         24,
58209                         24,
58210                         24,
58211                         24,
58212                         24,
58213                         24,
58214                         23,
58215                         24,
58216                         24,
58217                         24,
58218                         24,
58219                         24,
58220                         24,
58221                         24,
58222                         24,
58223                         24,
58224                         24,
58225                         24,
58226                         24,
58227                         24,
58228                         24,
58229                         24,
58230                         24,
58231                         24,
58232                         24,
58233                         24,
58234                         24,
58235                         24,
58236                         24,
58237                         24,
58238                         24,
58239                         24,
58240                         24,
58241                         24,
58242                         23,
58243                         24,
58244                         24,
58245                         24,
58246                         24,
58247                         24,
58248                         24,
58249                         24,
58250                         24,
58251                         24,
58252                         24,
58253                         24,
58254                         24,
58255                         24,
58256                         24,
58257                         24,
58258                         24,
58259                         24,
58260                         24,
58261                         24,
58262                         24,
58263                         24,
58264                         24,
58265                         24,
58266                         24,
58267                         24,
58268                         24,
58269                         24,
58270                         23,
58271                         24,
58272                         24,
58273                         24,
58274                         24,
58275                         24,
58276                         24,
58277                         24,
58278                         24,
58279                         24,
58280                         24,
58281                         24,
58282                         24,
58283                         24,
58284                         24,
58285                         24,
58286                         24,
58287                         24,
58288                         24,
58289                         24,
58290                         24,
58291                         24,
58292                         24,
58293                         24,
58294                         24,
58295                         24,
58296                         24,
58297                         24,
58298                         23,
58299                         24,
58300                         24,
58301                         24,
58302                         24,
58303                         24,
58304                         24,
58305                         24,
58306                         24,
58307                         24,
58308                         24,
58309                         24,
58310                         24,
58311                         24,
58312                         24,
58313                         24,
58314                         24,
58315                         24,
58316                         24,
58317                         24,
58318                         24,
58319                         24,
58320                         24,
58321                         24,
58322                         24,
58323                         24,
58324                         24,
58325                         24,
58326                         23,
58327                         24,
58328                         24,
58329                         24,
58330                         24,
58331                         24,
58332                         24,
58333                         24,
58334                         24,
58335                         24,
58336                         24,
58337                         24,
58338                         24,
58339                         24,
58340                         24,
58341                         24,
58342                         24,
58343                         24,
58344                         24,
58345                         24,
58346                         24,
58347                         24,
58348                         24,
58349                         24,
58350                         24,
58351                         24,
58352                         24,
58353                         24,
58354                         23,
58355                         24,
58356                         24,
58357                         24,
58358                         24,
58359                         24,
58360                         24,
58361                         24,
58362                         24,
58363                         24,
58364                         24,
58365                         24,
58366                         24,
58367                         24,
58368                         24,
58369                         24,
58370                         24,
58371                         24,
58372                         24,
58373                         24,
58374                         24,
58375                         24,
58376                         24,
58377                         24,
58378                         24,
58379                         24,
58380                         24,
58381                         24,
58382                         23,
58383                         24,
58384                         24,
58385                         24,
58386                         24,
58387                         24,
58388                         24,
58389                         24,
58390                         24,
58391                         24,
58392                         24,
58393                         24,
58394                         24,
58395                         24,
58396                         24,
58397                         24,
58398                         24,
58399                         24,
58400                         24,
58401                         24,
58402                         24,
58403                         24,
58404                         24,
58405                         24,
58406                         24,
58407                         24,
58408                         24,
58409                         24,
58410                         23,
58411                         24,
58412                         24,
58413                         24,
58414                         24,
58415                         24,
58416                         24,
58417                         24,
58418                         24,
58419                         24,
58420                         24,
58421                         24,
58422                         24,
58423                         24,
58424                         24,
58425                         24,
58426                         24,
58427                         24,
58428                         24,
58429                         24,
58430                         24,
58431                         24,
58432                         24,
58433                         24,
58434                         24,
58435                         24,
58436                         24,
58437                         24,
58438                         23,
58439                         24,
58440                         24,
58441                         24,
58442                         24,
58443                         24,
58444                         24,
58445                         24,
58446                         24,
58447                         24,
58448                         24,
58449                         24,
58450                         24,
58451                         24,
58452                         24,
58453                         24,
58454                         24,
58455                         24,
58456                         24,
58457                         24,
58458                         24,
58459                         24,
58460                         24,
58461                         24,
58462                         24,
58463                         24,
58464                         24,
58465                         24,
58466                         23,
58467                         24,
58468                         24,
58469                         24,
58470                         24,
58471                         24,
58472                         24,
58473                         24,
58474                         24,
58475                         24,
58476                         24,
58477                         24,
58478                         24,
58479                         24,
58480                         24,
58481                         24,
58482                         24,
58483                         24,
58484                         24,
58485                         24,
58486                         24,
58487                         24,
58488                         24,
58489                         24,
58490                         24,
58491                         24,
58492                         24,
58493                         24,
58494                         23,
58495                         24,
58496                         24,
58497                         24,
58498                         24,
58499                         24,
58500                         24,
58501                         24,
58502                         24,
58503                         24,
58504                         24,
58505                         24,
58506                         24,
58507                         24,
58508                         24,
58509                         24,
58510                         24,
58511                         24,
58512                         24,
58513                         24,
58514                         24,
58515                         24,
58516                         24,
58517                         24,
58518                         24,
58519                         24,
58520                         24,
58521                         24,
58522                         23,
58523                         24,
58524                         24,
58525                         24,
58526                         24,
58527                         24,
58528                         24,
58529                         24,
58530                         24,
58531                         24,
58532                         24,
58533                         24,
58534                         24,
58535                         24,
58536                         24,
58537                         24,
58538                         24,
58539                         24,
58540                         24,
58541                         24,
58542                         24,
58543                         24,
58544                         24,
58545                         24,
58546                         24,
58547                         24,
58548                         24,
58549                         24,
58550                         23,
58551                         24,
58552                         24,
58553                         24,
58554                         24,
58555                         24,
58556                         24,
58557                         24,
58558                         24,
58559                         24,
58560                         24,
58561                         24,
58562                         24,
58563                         24,
58564                         24,
58565                         24,
58566                         24,
58567                         24,
58568                         24,
58569                         24,
58570                         24,
58571                         24,
58572                         24,
58573                         24,
58574                         24,
58575                         24,
58576                         24,
58577                         24,
58578                         23,
58579                         24,
58580                         24,
58581                         24,
58582                         24,
58583                         24,
58584                         24,
58585                         24,
58586                         24,
58587                         24,
58588                         24,
58589                         24,
58590                         24,
58591                         24,
58592                         24,
58593                         24,
58594                         24,
58595                         24,
58596                         24,
58597                         24,
58598                         24,
58599                         24,
58600                         24,
58601                         24,
58602                         24,
58603                         24,
58604                         24,
58605                         24,
58606                         23,
58607                         24,
58608                         24,
58609                         24,
58610                         24,
58611                         24,
58612                         24,
58613                         24,
58614                         24,
58615                         24,
58616                         24,
58617                         24,
58618                         24,
58619                         24,
58620                         24,
58621                         24,
58622                         24,
58623                         24,
58624                         24,
58625                         24,
58626                         24,
58627                         24,
58628                         24,
58629                         24,
58630                         24,
58631                         24,
58632                         24,
58633                         24,
58634                         23,
58635                         24,
58636                         24,
58637                         24,
58638                         24,
58639                         24,
58640                         24,
58641                         24,
58642                         24,
58643                         24,
58644                         24,
58645                         24,
58646                         24,
58647                         24,
58648                         24,
58649                         24,
58650                         24,
58651                         24,
58652                         24,
58653                         24,
58654                         24,
58655                         24,
58656                         24,
58657                         24,
58658                         24,
58659                         24,
58660                         24,
58661                         24,
58662                         23,
58663                         24,
58664                         24,
58665                         24,
58666                         24,
58667                         24,
58668                         24,
58669                         24,
58670                         24,
58671                         24,
58672                         24,
58673                         24,
58674                         24,
58675                         24,
58676                         24,
58677                         24,
58678                         24,
58679                         24,
58680                         24,
58681                         24,
58682                         24,
58683                         24,
58684                         24,
58685                         24,
58686                         24,
58687                         24,
58688                         24,
58689                         24,
58690                         23,
58691                         24,
58692                         24,
58693                         24,
58694                         24,
58695                         24,
58696                         24,
58697                         24,
58698                         24,
58699                         24,
58700                         24,
58701                         24,
58702                         24,
58703                         24,
58704                         24,
58705                         24,
58706                         24,
58707                         24,
58708                         24,
58709                         24,
58710                         24,
58711                         24,
58712                         24,
58713                         24,
58714                         24,
58715                         24,
58716                         24,
58717                         24,
58718                         23,
58719                         24,
58720                         24,
58721                         24,
58722                         24,
58723                         24,
58724                         24,
58725                         24,
58726                         24,
58727                         24,
58728                         24,
58729                         24,
58730                         24,
58731                         24,
58732                         24,
58733                         24,
58734                         24,
58735                         24,
58736                         24,
58737                         24,
58738                         24,
58739                         24,
58740                         24,
58741                         24,
58742                         24,
58743                         24,
58744                         24,
58745                         24,
58746                         23,
58747                         24,
58748                         24,
58749                         24,
58750                         24,
58751                         24,
58752                         24,
58753                         24,
58754                         24,
58755                         24,
58756                         24,
58757                         24,
58758                         24,
58759                         24,
58760                         24,
58761                         24,
58762                         24,
58763                         24,
58764                         24,
58765                         24,
58766                         24,
58767                         24,
58768                         24,
58769                         24,
58770                         24,
58771                         24,
58772                         24,
58773                         24,
58774                         23,
58775                         24,
58776                         24,
58777                         24,
58778                         24,
58779                         24,
58780                         24,
58781                         24,
58782                         24,
58783                         24,
58784                         24,
58785                         24,
58786                         24,
58787                         24,
58788                         24,
58789                         24,
58790                         24,
58791                         24,
58792                         24,
58793                         24,
58794                         24,
58795                         24,
58796                         24,
58797                         24,
58798                         24,
58799                         24,
58800                         24,
58801                         24,
58802                         23,
58803                         24,
58804                         24,
58805                         24,
58806                         24,
58807                         24,
58808                         24,
58809                         24,
58810                         24,
58811                         24,
58812                         24,
58813                         24,
58814                         24,
58815                         24,
58816                         24,
58817                         24,
58818                         24,
58819                         24,
58820                         24,
58821                         24,
58822                         24,
58823                         24,
58824                         24,
58825                         24,
58826                         24,
58827                         24,
58828                         24,
58829                         24,
58830                         23,
58831                         24,
58832                         24,
58833                         24,
58834                         24,
58835                         24,
58836                         24,
58837                         24,
58838                         24,
58839                         24,
58840                         24,
58841                         24,
58842                         24,
58843                         24,
58844                         24,
58845                         24,
58846                         24,
58847                         24,
58848                         24,
58849                         24,
58850                         24,
58851                         24,
58852                         24,
58853                         24,
58854                         24,
58855                         24,
58856                         24,
58857                         24,
58858                         23,
58859                         24,
58860                         24,
58861                         24,
58862                         24,
58863                         24,
58864                         24,
58865                         24,
58866                         24,
58867                         24,
58868                         24,
58869                         24,
58870                         24,
58871                         24,
58872                         24,
58873                         24,
58874                         24,
58875                         24,
58876                         24,
58877                         24,
58878                         24,
58879                         24,
58880                         24,
58881                         24,
58882                         24,
58883                         24,
58884                         24,
58885                         24,
58886                         23,
58887                         24,
58888                         24,
58889                         24,
58890                         24,
58891                         24,
58892                         24,
58893                         24,
58894                         24,
58895                         24,
58896                         24,
58897                         24,
58898                         24,
58899                         24,
58900                         24,
58901                         24,
58902                         24,
58903                         24,
58904                         24,
58905                         24,
58906                         24,
58907                         24,
58908                         24,
58909                         24,
58910                         24,
58911                         24,
58912                         24,
58913                         24,
58914                         23,
58915                         24,
58916                         24,
58917                         24,
58918                         24,
58919                         24,
58920                         24,
58921                         24,
58922                         24,
58923                         24,
58924                         24,
58925                         24,
58926                         24,
58927                         24,
58928                         24,
58929                         24,
58930                         24,
58931                         24,
58932                         24,
58933                         24,
58934                         24,
58935                         24,
58936                         24,
58937                         24,
58938                         24,
58939                         24,
58940                         24,
58941                         24,
58942                         23,
58943                         24,
58944                         24,
58945                         24,
58946                         24,
58947                         24,
58948                         24,
58949                         24,
58950                         24,
58951                         24,
58952                         24,
58953                         24,
58954                         24,
58955                         24,
58956                         24,
58957                         24,
58958                         24,
58959                         24,
58960                         24,
58961                         24,
58962                         24,
58963                         24,
58964                         24,
58965                         24,
58966                         24,
58967                         24,
58968                         24,
58969                         24,
58970                         23,
58971                         24,
58972                         24,
58973                         24,
58974                         24,
58975                         24,
58976                         24,
58977                         24,
58978                         24,
58979                         24,
58980                         24,
58981                         24,
58982                         24,
58983                         24,
58984                         24,
58985                         24,
58986                         24,
58987                         24,
58988                         24,
58989                         24,
58990                         24,
58991                         24,
58992                         24,
58993                         24,
58994                         24,
58995                         24,
58996                         24,
58997                         24,
58998                         23,
58999                         24,
59000                         24,
59001                         24,
59002                         24,
59003                         24,
59004                         24,
59005                         24,
59006                         24,
59007                         24,
59008                         24,
59009                         24,
59010                         24,
59011                         24,
59012                         24,
59013                         24,
59014                         24,
59015                         24,
59016                         24,
59017                         24,
59018                         24,
59019                         24,
59020                         24,
59021                         24,
59022                         24,
59023                         24,
59024                         24,
59025                         24,
59026                         23,
59027                         24,
59028                         24,
59029                         24,
59030                         24,
59031                         24,
59032                         24,
59033                         24,
59034                         24,
59035                         24,
59036                         24,
59037                         24,
59038                         24,
59039                         24,
59040                         24,
59041                         24,
59042                         24,
59043                         24,
59044                         24,
59045                         24,
59046                         24,
59047                         24,
59048                         24,
59049                         24,
59050                         24,
59051                         24,
59052                         24,
59053                         24,
59054                         23,
59055                         24,
59056                         24,
59057                         24,
59058                         24,
59059                         24,
59060                         24,
59061                         24,
59062                         24,
59063                         24,
59064                         24,
59065                         24,
59066                         24,
59067                         24,
59068                         24,
59069                         24,
59070                         24,
59071                         24,
59072                         24,
59073                         24,
59074                         24,
59075                         24,
59076                         24,
59077                         24,
59078                         24,
59079                         24,
59080                         24,
59081                         24,
59082                         23,
59083                         24,
59084                         24,
59085                         24,
59086                         24,
59087                         24,
59088                         24,
59089                         24,
59090                         24,
59091                         24,
59092                         24,
59093                         24,
59094                         24,
59095                         24,
59096                         24,
59097                         24,
59098                         24,
59099                         24,
59100                         24,
59101                         24,
59102                         24,
59103                         24,
59104                         24,
59105                         24,
59106                         24,
59107                         24,
59108                         24,
59109                         24,
59110                         23,
59111                         24,
59112                         24,
59113                         24,
59114                         24,
59115                         24,
59116                         24,
59117                         24,
59118                         24,
59119                         24,
59120                         24,
59121                         24,
59122                         24,
59123                         24,
59124                         24,
59125                         24,
59126                         24,
59127                         24,
59128                         24,
59129                         24,
59130                         24,
59131                         24,
59132                         24,
59133                         24,
59134                         24,
59135                         24,
59136                         24,
59137                         24,
59138                         23,
59139                         24,
59140                         24,
59141                         24,
59142                         24,
59143                         24,
59144                         24,
59145                         24,
59146                         24,
59147                         24,
59148                         24,
59149                         24,
59150                         24,
59151                         24,
59152                         24,
59153                         24,
59154                         24,
59155                         24,
59156                         24,
59157                         24,
59158                         24,
59159                         24,
59160                         24,
59161                         24,
59162                         24,
59163                         24,
59164                         24,
59165                         24,
59166                         23,
59167                         24,
59168                         24,
59169                         24,
59170                         24,
59171                         24,
59172                         24,
59173                         24,
59174                         24,
59175                         24,
59176                         24,
59177                         24,
59178                         24,
59179                         24,
59180                         24,
59181                         24,
59182                         24,
59183                         24,
59184                         24,
59185                         24,
59186                         24,
59187                         24,
59188                         24,
59189                         24,
59190                         24,
59191                         24,
59192                         24,
59193                         24,
59194                         23,
59195                         24,
59196                         24,
59197                         24,
59198                         24,
59199                         24,
59200                         24,
59201                         24,
59202                         24,
59203                         24,
59204                         24,
59205                         24,
59206                         24,
59207                         24,
59208                         24,
59209                         24,
59210                         24,
59211                         24,
59212                         24,
59213                         24,
59214                         24,
59215                         24,
59216                         24,
59217                         24,
59218                         24,
59219                         24,
59220                         24,
59221                         24,
59222                         23,
59223                         24,
59224                         24,
59225                         24,
59226                         24,
59227                         24,
59228                         24,
59229                         24,
59230                         24,
59231                         24,
59232                         24,
59233                         24,
59234                         24,
59235                         24,
59236                         24,
59237                         24,
59238                         24,
59239                         24,
59240                         24,
59241                         24,
59242                         24,
59243                         24,
59244                         24,
59245                         24,
59246                         24,
59247                         24,
59248                         24,
59249                         24,
59250                         23,
59251                         24,
59252                         24,
59253                         24,
59254                         24,
59255                         24,
59256                         24,
59257                         24,
59258                         24,
59259                         24,
59260                         24,
59261                         24,
59262                         24,
59263                         24,
59264                         24,
59265                         24,
59266                         24,
59267                         24,
59268                         24,
59269                         24,
59270                         24,
59271                         24,
59272                         24,
59273                         24,
59274                         24,
59275                         24,
59276                         24,
59277                         24,
59278                         23,
59279                         24,
59280                         24,
59281                         24,
59282                         24,
59283                         24,
59284                         24,
59285                         24,
59286                         24,
59287                         24,
59288                         24,
59289                         24,
59290                         24,
59291                         24,
59292                         24,
59293                         24,
59294                         24,
59295                         24,
59296                         24,
59297                         24,
59298                         24,
59299                         24,
59300                         24,
59301                         24,
59302                         24,
59303                         24,
59304                         24,
59305                         24,
59306                         23,
59307                         24,
59308                         24,
59309                         24,
59310                         24,
59311                         24,
59312                         24,
59313                         24,
59314                         24,
59315                         24,
59316                         24,
59317                         24,
59318                         24,
59319                         24,
59320                         24,
59321                         24,
59322                         24,
59323                         24,
59324                         24,
59325                         24,
59326                         24,
59327                         24,
59328                         24,
59329                         24,
59330                         24,
59331                         24,
59332                         24,
59333                         24,
59334                         23,
59335                         24,
59336                         24,
59337                         24,
59338                         24,
59339                         24,
59340                         24,
59341                         24,
59342                         24,
59343                         24,
59344                         24,
59345                         24,
59346                         24,
59347                         24,
59348                         24,
59349                         24,
59350                         24,
59351                         24,
59352                         24,
59353                         24,
59354                         24,
59355                         24,
59356                         24,
59357                         24,
59358                         24,
59359                         24,
59360                         24,
59361                         24,
59362                         23,
59363                         24,
59364                         24,
59365                         24,
59366                         24,
59367                         24,
59368                         24,
59369                         24,
59370                         24,
59371                         24,
59372                         24,
59373                         24,
59374                         24,
59375                         24,
59376                         24,
59377                         24,
59378                         24,
59379                         24,
59380                         24,
59381                         24,
59382                         24,
59383                         24,
59384                         24,
59385                         24,
59386                         24,
59387                         24,
59388                         24,
59389                         24,
59390                         23,
59391                         24,
59392                         24,
59393                         24,
59394                         24,
59395                         24,
59396                         24,
59397                         24,
59398                         24,
59399                         24,
59400                         24,
59401                         24,
59402                         24,
59403                         24,
59404                         24,
59405                         24,
59406                         24,
59407                         24,
59408                         24,
59409                         24,
59410                         24,
59411                         24,
59412                         24,
59413                         24,
59414                         24,
59415                         24,
59416                         24,
59417                         24,
59418                         23,
59419                         24,
59420                         24,
59421                         24,
59422                         24,
59423                         24,
59424                         24,
59425                         24,
59426                         24,
59427                         24,
59428                         24,
59429                         24,
59430                         24,
59431                         24,
59432                         24,
59433                         24,
59434                         24,
59435                         24,
59436                         24,
59437                         24,
59438                         24,
59439                         24,
59440                         24,
59441                         24,
59442                         24,
59443                         24,
59444                         24,
59445                         24,
59446                         23,
59447                         24,
59448                         24,
59449                         24,
59450                         24,
59451                         24,
59452                         24,
59453                         24,
59454                         24,
59455                         24,
59456                         24,
59457                         24,
59458                         24,
59459                         24,
59460                         24,
59461                         24,
59462                         24,
59463                         24,
59464                         24,
59465                         24,
59466                         24,
59467                         24,
59468                         24,
59469                         24,
59470                         24,
59471                         24,
59472                         24,
59473                         24,
59474                         23,
59475                         24,
59476                         24,
59477                         24,
59478                         24,
59479                         24,
59480                         24,
59481                         24,
59482                         24,
59483                         24,
59484                         24,
59485                         24,
59486                         24,
59487                         24,
59488                         24,
59489                         24,
59490                         24,
59491                         24,
59492                         24,
59493                         24,
59494                         24,
59495                         24,
59496                         24,
59497                         24,
59498                         24,
59499                         24,
59500                         24,
59501                         24,
59502                         23,
59503                         24,
59504                         24,
59505                         24,
59506                         24,
59507                         24,
59508                         24,
59509                         24,
59510                         24,
59511                         24,
59512                         24,
59513                         24,
59514                         24,
59515                         24,
59516                         24,
59517                         24,
59518                         24,
59519                         24,
59520                         24,
59521                         24,
59522                         24,
59523                         24,
59524                         24,
59525                         24,
59526                         24,
59527                         24,
59528                         24,
59529                         24,
59530                         23,
59531                         24,
59532                         24,
59533                         24,
59534                         24,
59535                         24,
59536                         24,
59537                         24,
59538                         24,
59539                         24,
59540                         24,
59541                         24,
59542                         24,
59543                         24,
59544                         24,
59545                         24,
59546                         24,
59547                         24,
59548                         24,
59549                         24,
59550                         24,
59551                         24,
59552                         24,
59553                         24,
59554                         24,
59555                         24,
59556                         24,
59557                         24,
59558                         23,
59559                         24,
59560                         24,
59561                         24,
59562                         24,
59563                         24,
59564                         24,
59565                         24,
59566                         24,
59567                         24,
59568                         24,
59569                         24,
59570                         24,
59571                         24,
59572                         24,
59573                         24,
59574                         24,
59575                         24,
59576                         24,
59577                         24,
59578                         24,
59579                         24,
59580                         24,
59581                         24,
59582                         24,
59583                         24,
59584                         24,
59585                         24,
59586                         23,
59587                         24,
59588                         24,
59589                         24,
59590                         24,
59591                         24,
59592                         24,
59593                         24,
59594                         24,
59595                         24,
59596                         24,
59597                         24,
59598                         24,
59599                         24,
59600                         24,
59601                         24,
59602                         24,
59603                         24,
59604                         24,
59605                         24,
59606                         24,
59607                         24,
59608                         24,
59609                         24,
59610                         24,
59611                         24,
59612                         24,
59613                         24,
59614                         23,
59615                         24,
59616                         24,
59617                         24,
59618                         24,
59619                         24,
59620                         24,
59621                         24,
59622                         24,
59623                         24,
59624                         24,
59625                         24,
59626                         24,
59627                         24,
59628                         24,
59629                         24,
59630                         24,
59631                         24,
59632                         24,
59633                         24,
59634                         24,
59635                         24,
59636                         24,
59637                         24,
59638                         24,
59639                         24,
59640                         24,
59641                         24,
59642                         23,
59643                         24,
59644                         24,
59645                         24,
59646                         24,
59647                         24,
59648                         24,
59649                         24,
59650                         24,
59651                         24,
59652                         24,
59653                         24,
59654                         24,
59655                         24,
59656                         24,
59657                         24,
59658                         24,
59659                         24,
59660                         24,
59661                         24,
59662                         24,
59663                         24,
59664                         24,
59665                         24,
59666                         24,
59667                         24,
59668                         24,
59669                         24,
59670                         23,
59671                         24,
59672                         24,
59673                         24,
59674                         24,
59675                         24,
59676                         24,
59677                         24,
59678                         24,
59679                         24,
59680                         24,
59681                         24,
59682                         24,
59683                         24,
59684                         24,
59685                         24,
59686                         24,
59687                         24,
59688                         24,
59689                         24,
59690                         24,
59691                         24,
59692                         24,
59693                         24,
59694                         24,
59695                         24,
59696                         24,
59697                         24,
59698                         23,
59699                         24,
59700                         24,
59701                         24,
59702                         24,
59703                         24,
59704                         24,
59705                         24,
59706                         24,
59707                         24,
59708                         24,
59709                         24,
59710                         24,
59711                         24,
59712                         24,
59713                         24,
59714                         24,
59715                         24,
59716                         24,
59717                         24,
59718                         24,
59719                         24,
59720                         24,
59721                         24,
59722                         24,
59723                         24,
59724                         24,
59725                         24,
59726                         23,
59727                         24,
59728                         24,
59729                         24,
59730                         24,
59731                         24,
59732                         24,
59733                         24,
59734                         24,
59735                         24,
59736                         24,
59737                         24,
59738                         24,
59739                         24,
59740                         24,
59741                         24,
59742                         24,
59743                         24,
59744                         24,
59745                         24,
59746                         24,
59747                         24,
59748                         24,
59749                         24,
59750                         24,
59751                         24,
59752                         24,
59753                         24,
59754                         23,
59755                         24,
59756                         24,
59757                         24,
59758                         24,
59759                         24,
59760                         24,
59761                         24,
59762                         24,
59763                         24,
59764                         24,
59765                         24,
59766                         24,
59767                         24,
59768                         24,
59769                         24,
59770                         24,
59771                         24,
59772                         24,
59773                         24,
59774                         24,
59775                         24,
59776                         24,
59777                         24,
59778                         24,
59779                         24,
59780                         24,
59781                         24,
59782                         23,
59783                         24,
59784                         24,
59785                         24,
59786                         24,
59787                         24,
59788                         24,
59789                         24,
59790                         24,
59791                         24,
59792                         24,
59793                         24,
59794                         24,
59795                         24,
59796                         24,
59797                         24,
59798                         24,
59799                         24,
59800                         24,
59801                         24,
59802                         24,
59803                         24,
59804                         24,
59805                         24,
59806                         24,
59807                         24,
59808                         24,
59809                         24,
59810                         23,
59811                         24,
59812                         24,
59813                         24,
59814                         24,
59815                         24,
59816                         24,
59817                         24,
59818                         24,
59819                         24,
59820                         24,
59821                         24,
59822                         24,
59823                         24,
59824                         24,
59825                         24,
59826                         24,
59827                         24,
59828                         24,
59829                         24,
59830                         24,
59831                         24,
59832                         24,
59833                         24,
59834                         24,
59835                         24,
59836                         24,
59837                         24,
59838                         23,
59839                         24,
59840                         24,
59841                         24,
59842                         24,
59843                         24,
59844                         24,
59845                         24,
59846                         24,
59847                         24,
59848                         24,
59849                         24,
59850                         24,
59851                         24,
59852                         24,
59853                         24,
59854                         24,
59855                         24,
59856                         24,
59857                         24,
59858                         24,
59859                         24,
59860                         24,
59861                         24,
59862                         24,
59863                         24,
59864                         24,
59865                         24,
59866                         23,
59867                         24,
59868                         24,
59869                         24,
59870                         24,
59871                         24,
59872                         24,
59873                         24,
59874                         24,
59875                         24,
59876                         24,
59877                         24,
59878                         24,
59879                         24,
59880                         24,
59881                         24,
59882                         24,
59883                         24,
59884                         24,
59885                         24,
59886                         24,
59887                         24,
59888                         24,
59889                         24,
59890                         24,
59891                         24,
59892                         24,
59893                         24,
59894                         23,
59895                         24,
59896                         24,
59897                         24,
59898                         24,
59899                         24,
59900                         24,
59901                         24,
59902                         24,
59903                         24,
59904                         24,
59905                         24,
59906                         24,
59907                         24,
59908                         24,
59909                         24,
59910                         24,
59911                         24,
59912                         24,
59913                         24,
59914                         24,
59915                         24,
59916                         24,
59917                         24,
59918                         24,
59919                         24,
59920                         24,
59921                         24,
59922                         23,
59923                         24,
59924                         24,
59925                         24,
59926                         24,
59927                         24,
59928                         24,
59929                         24,
59930                         24,
59931                         24,
59932                         24,
59933                         24,
59934                         24,
59935                         24,
59936                         24,
59937                         24,
59938                         24,
59939                         24,
59940                         24,
59941                         24,
59942                         24,
59943                         24,
59944                         24,
59945                         24,
59946                         24,
59947                         24,
59948                         24,
59949                         24,
59950                         23,
59951                         24,
59952                         24,
59953                         24,
59954                         24,
59955                         24,
59956                         24,
59957                         24,
59958                         24,
59959                         24,
59960                         24,
59961                         24,
59962                         24,
59963                         24,
59964                         24,
59965                         24,
59966                         24,
59967                         24,
59968                         24,
59969                         24,
59970                         24,
59971                         24,
59972                         24,
59973                         24,
59974                         24,
59975                         24,
59976                         24,
59977                         24,
59978                         23,
59979                         24,
59980                         24,
59981                         24,
59982                         24,
59983                         24,
59984                         24,
59985                         24,
59986                         24,
59987                         24,
59988                         24,
59989                         24,
59990                         24,
59991                         24,
59992                         24,
59993                         24,
59994                         24,
59995                         24,
59996                         24,
59997                         24,
59998                         24,
59999                         24,
60000                         24,
60001                         24,
60002                         24,
60003                         24,
60004                         24,
60005                         24,
60006                         23,
60007                         24,
60008                         24,
60009                         24,
60010                         24,
60011                         24,
60012                         24,
60013                         24,
60014                         24,
60015                         24,
60016                         24,
60017                         24,
60018                         24,
60019                         24,
60020                         24,
60021                         24,
60022                         24,
60023                         24,
60024                         24,
60025                         24,
60026                         24,
60027                         24,
60028                         24,
60029                         24,
60030                         24,
60031                         24,
60032                         24,
60033                         24,
60034                         23,
60035                         24,
60036                         24,
60037                         24,
60038                         24,
60039                         24,
60040                         24,
60041                         24,
60042                         24,
60043                         24,
60044                         24,
60045                         24,
60046                         24,
60047                         24,
60048                         24,
60049                         24,
60050                         24,
60051                         24,
60052                         24,
60053                         24,
60054                         24,
60055                         24,
60056                         24,
60057                         24,
60058                         24,
60059                         24,
60060                         24,
60061                         24,
60062                         23,
60063                         24,
60064                         24,
60065                         24,
60066                         24,
60067                         24,
60068                         24,
60069                         24,
60070                         24,
60071                         24,
60072                         24,
60073                         24,
60074                         24,
60075                         24,
60076                         24,
60077                         24,
60078                         24,
60079                         24,
60080                         24,
60081                         24,
60082                         24,
60083                         24,
60084                         24,
60085                         24,
60086                         24,
60087                         24,
60088                         24,
60089                         24,
60090                         23,
60091                         24,
60092                         24,
60093                         24,
60094                         24,
60095                         24,
60096                         24,
60097                         24,
60098                         24,
60099                         24,
60100                         24,
60101                         24,
60102                         24,
60103                         24,
60104                         24,
60105                         24,
60106                         24,
60107                         24,
60108                         24,
60109                         24,
60110                         24,
60111                         24,
60112                         24,
60113                         24,
60114                         24,
60115                         24,
60116                         24,
60117                         24,
60118                         23,
60119                         24,
60120                         24,
60121                         24,
60122                         24,
60123                         24,
60124                         24,
60125                         24,
60126                         24,
60127                         24,
60128                         24,
60129                         24,
60130                         24,
60131                         24,
60132                         24,
60133                         24,
60134                         24,
60135                         24,
60136                         24,
60137                         24,
60138                         24,
60139                         24,
60140                         24,
60141                         24,
60142                         24,
60143                         24,
60144                         24,
60145                         24,
60146                         23,
60147                         24,
60148                         24,
60149                         24,
60150                         24,
60151                         24,
60152                         24,
60153                         24,
60154                         24,
60155                         24,
60156                         24,
60157                         24,
60158                         24,
60159                         24,
60160                         24,
60161                         24,
60162                         24,
60163                         24,
60164                         24,
60165                         24,
60166                         24,
60167                         24,
60168                         24,
60169                         24,
60170                         24,
60171                         24,
60172                         24,
60173                         24,
60174                         23,
60175                         24,
60176                         24,
60177                         24,
60178                         24,
60179                         24,
60180                         24,
60181                         24,
60182                         24,
60183                         24,
60184                         24,
60185                         24,
60186                         24,
60187                         24,
60188                         24,
60189                         24,
60190                         24,
60191                         24,
60192                         24,
60193                         24,
60194                         24,
60195                         24,
60196                         24,
60197                         24,
60198                         24,
60199                         24,
60200                         24,
60201                         24,
60202                         23,
60203                         24,
60204                         24,
60205                         24,
60206                         24,
60207                         24,
60208                         24,
60209                         24,
60210                         24,
60211                         24,
60212                         24,
60213                         24,
60214                         24,
60215                         24,
60216                         24,
60217                         24,
60218                         24,
60219                         24,
60220                         24,
60221                         24,
60222                         24,
60223                         24,
60224                         24,
60225                         24,
60226                         24,
60227                         24,
60228                         24,
60229                         24,
60230                         23,
60231                         24,
60232                         24,
60233                         24,
60234                         24,
60235                         24,
60236                         24,
60237                         24,
60238                         24,
60239                         24,
60240                         24,
60241                         24,
60242                         24,
60243                         24,
60244                         24,
60245                         24,
60246                         24,
60247                         24,
60248                         24,
60249                         24,
60250                         24,
60251                         24,
60252                         24,
60253                         24,
60254                         24,
60255                         24,
60256                         24,
60257                         24,
60258                         23,
60259                         24,
60260                         24,
60261                         24,
60262                         24,
60263                         24,
60264                         24,
60265                         24,
60266                         24,
60267                         24,
60268                         24,
60269                         24,
60270                         24,
60271                         24,
60272                         24,
60273                         24,
60274                         24,
60275                         24,
60276                         24,
60277                         24,
60278                         24,
60279                         24,
60280                         24,
60281                         24,
60282                         24,
60283                         24,
60284                         24,
60285                         24,
60286                         23,
60287                         24,
60288                         24,
60289                         24,
60290                         24,
60291                         24,
60292                         24,
60293                         24,
60294                         24,
60295                         24,
60296                         24,
60297                         24,
60298                         24,
60299                         24,
60300                         24,
60301                         24,
60302                         24,
60303                         24,
60304                         24,
60305                         24,
60306                         24,
60307                         24,
60308                         24,
60309                         24,
60310                         24,
60311                         24,
60312                         24,
60313                         24,
60314                         23,
60315                         24,
60316                         24,
60317                         24,
60318                         24,
60319                         24,
60320                         24,
60321                         24,
60322                         24,
60323                         24,
60324                         24,
60325                         24,
60326                         24,
60327                         24,
60328                         24,
60329                         24,
60330                         24,
60331                         24,
60332                         24,
60333                         24,
60334                         24,
60335                         24,
60336                         24,
60337                         24,
60338                         24,
60339                         24,
60340                         24,
60341                         24,
60342                         23,
60343                         24,
60344                         24,
60345                         24,
60346                         24,
60347                         24,
60348                         24,
60349                         24,
60350                         24,
60351                         24,
60352                         24,
60353                         24,
60354                         24,
60355                         24,
60356                         24,
60357                         24,
60358                         24,
60359                         24,
60360                         24,
60361                         24,
60362                         24,
60363                         24,
60364                         24,
60365                         24,
60366                         24,
60367                         24,
60368                         24,
60369                         24,
60370                         23,
60371                         24,
60372                         24,
60373                         24,
60374                         24,
60375                         24,
60376                         24,
60377                         24,
60378                         24,
60379                         24,
60380                         24,
60381                         24,
60382                         24,
60383                         24,
60384                         24,
60385                         24,
60386                         24,
60387                         24,
60388                         24,
60389                         24,
60390                         24,
60391                         24,
60392                         24,
60393                         24,
60394                         24,
60395                         24,
60396                         24,
60397                         24,
60398                         23,
60399                         24,
60400                         24,
60401                         24,
60402                         24,
60403                         24,
60404                         24,
60405                         24,
60406                         24,
60407                         24,
60408                         24,
60409                         24,
60410                         24,
60411                         24,
60412                         24,
60413                         24,
60414                         24,
60415                         24,
60416                         24,
60417                         24,
60418                         24,
60419                         24,
60420                         24,
60421                         24,
60422                         24,
60423                         24,
60424                         24,
60425                         24,
60426                         23,
60427                         24,
60428                         24,
60429                         24,
60430                         24,
60431                         24,
60432                         24,
60433                         24,
60434                         24,
60435                         24,
60436                         24,
60437                         24,
60438                         24,
60439                         24,
60440                         24,
60441                         24,
60442                         24,
60443                         24,
60444                         24,
60445                         24,
60446                         24,
60447                         24,
60448                         24,
60449                         24,
60450                         24,
60451                         24,
60452                         24,
60453                         24,
60454                         23,
60455                         24,
60456                         24,
60457                         24,
60458                         24,
60459                         24,
60460                         24,
60461                         24,
60462                         24,
60463                         24,
60464                         24,
60465                         24,
60466                         24,
60467                         24,
60468                         24,
60469                         24,
60470                         24,
60471                         24,
60472                         24,
60473                         24,
60474                         24,
60475                         24,
60476                         24,
60477                         24,
60478                         24,
60479                         24,
60480                         24,
60481                         24,
60482                         23,
60483                         24,
60484                         24,
60485                         24,
60486                         24,
60487                         24,
60488                         24,
60489                         24,
60490                         24,
60491                         24,
60492                         24,
60493                         24,
60494                         24,
60495                         24,
60496                         24,
60497                         24,
60498                         24,
60499                         24,
60500                         24,
60501                         24,
60502                         24,
60503                         24,
60504                         24,
60505                         24,
60506                         24,
60507                         24,
60508                         24,
60509                         24,
60510                         23,
60511                         24,
60512                         24,
60513                         24,
60514                         24,
60515                         24,
60516                         24,
60517                         24,
60518                         24,
60519                         24,
60520                         24,
60521                         24,
60522                         24,
60523                         24,
60524                         24,
60525                         24,
60526                         24,
60527                         24,
60528                         24,
60529                         24,
60530                         24,
60531                         24,
60532                         24,
60533                         24,
60534                         24,
60535                         24,
60536                         24,
60537                         24,
60538                         23,
60539                         24,
60540                         24,
60541                         24,
60542                         24,
60543                         24,
60544                         24,
60545                         24,
60546                         24,
60547                         24,
60548                         24,
60549                         24,
60550                         24,
60551                         24,
60552                         24,
60553                         24,
60554                         24,
60555                         24,
60556                         24,
60557                         24,
60558                         24,
60559                         24,
60560                         24,
60561                         24,
60562                         24,
60563                         24,
60564                         24,
60565                         24,
60566                         23,
60567                         24,
60568                         24,
60569                         24,
60570                         24,
60571                         24,
60572                         24,
60573                         24,
60574                         24,
60575                         24,
60576                         24,
60577                         24,
60578                         24,
60579                         24,
60580                         24,
60581                         24,
60582                         24,
60583                         24,
60584                         24,
60585                         24,
60586                         24,
60587                         24,
60588                         24,
60589                         24,
60590                         24,
60591                         24,
60592                         24,
60593                         24,
60594                         23,
60595                         24,
60596                         24,
60597                         24,
60598                         24,
60599                         24,
60600                         24,
60601                         24,
60602                         24,
60603                         24,
60604                         24,
60605                         24,
60606                         24,
60607                         24,
60608                         24,
60609                         24,
60610                         24,
60611                         24,
60612                         24,
60613                         24,
60614                         24,
60615                         24,
60616                         24,
60617                         24,
60618                         24,
60619                         24,
60620                         24,
60621                         24,
60622                         23,
60623                         24,
60624                         24,
60625                         24,
60626                         24,
60627                         24,
60628                         24,
60629                         24,
60630                         24,
60631                         24,
60632                         24,
60633                         24,
60634                         24,
60635                         24,
60636                         24,
60637                         24,
60638                         24,
60639                         24,
60640                         24,
60641                         24,
60642                         24,
60643                         24,
60644                         24,
60645                         24,
60646                         24,
60647                         24,
60648                         24,
60649                         24,
60650                         23,
60651                         24,
60652                         24,
60653                         24,
60654                         24,
60655                         24,
60656                         24,
60657                         24,
60658                         24,
60659                         24,
60660                         24,
60661                         24,
60662                         24,
60663                         24,
60664                         24,
60665                         24,
60666                         24,
60667                         24,
60668                         24,
60669                         24,
60670                         24,
60671                         24,
60672                         24,
60673                         24,
60674                         24,
60675                         24,
60676                         24,
60677                         24,
60678                         23,
60679                         24,
60680                         24,
60681                         24,
60682                         24,
60683                         24,
60684                         24,
60685                         24,
60686                         24,
60687                         24,
60688                         24,
60689                         24,
60690                         24,
60691                         24,
60692                         24,
60693                         24,
60694                         24,
60695                         24,
60696                         24,
60697                         24,
60698                         24,
60699                         24,
60700                         24,
60701                         24,
60702                         24,
60703                         24,
60704                         24,
60705                         24,
60706                         23,
60707                         24,
60708                         24,
60709                         24,
60710                         24,
60711                         24,
60712                         24,
60713                         24,
60714                         24,
60715                         24,
60716                         24,
60717                         24,
60718                         24,
60719                         24,
60720                         24,
60721                         24,
60722                         24,
60723                         24,
60724                         24,
60725                         24,
60726                         24,
60727                         24,
60728                         24,
60729                         24,
60730                         24,
60731                         24,
60732                         24,
60733                         24,
60734                         23,
60735                         24,
60736                         24,
60737                         24,
60738                         24,
60739                         24,
60740                         24,
60741                         24,
60742                         24,
60743                         24,
60744                         24,
60745                         24,
60746                         24,
60747                         24,
60748                         24,
60749                         24,
60750                         24,
60751                         24,
60752                         24,
60753                         24,
60754                         24,
60755                         24,
60756                         24,
60757                         24,
60758                         24,
60759                         24,
60760                         24,
60761                         24,
60762                         23,
60763                         24,
60764                         24,
60765                         24,
60766                         24,
60767                         24,
60768                         24,
60769                         24,
60770                         24,
60771                         24,
60772                         24,
60773                         24,
60774                         24,
60775                         24,
60776                         24,
60777                         24,
60778                         24,
60779                         24,
60780                         24,
60781                         24,
60782                         24,
60783                         24,
60784                         24,
60785                         24,
60786                         24,
60787                         24,
60788                         24,
60789                         24,
60790                         23,
60791                         24,
60792                         24,
60793                         24,
60794                         24,
60795                         24,
60796                         24,
60797                         24,
60798                         24,
60799                         24,
60800                         24,
60801                         24,
60802                         24,
60803                         24,
60804                         24,
60805                         24,
60806                         24,
60807                         24,
60808                         24,
60809                         24,
60810                         24,
60811                         24,
60812                         24,
60813                         24,
60814                         24,
60815                         24,
60816                         24,
60817                         24,
60818                         23,
60819                         24,
60820                         24,
60821                         24,
60822                         24,
60823                         24,
60824                         24,
60825                         24,
60826                         24,
60827                         24,
60828                         24,
60829                         24,
60830                         24,
60831                         24,
60832                         24,
60833                         24,
60834                         24,
60835                         24,
60836                         24,
60837                         24,
60838                         24,
60839                         24,
60840                         24,
60841                         24,
60842                         24,
60843                         24,
60844                         24,
60845                         24,
60846                         23,
60847                         24,
60848                         24,
60849                         24,
60850                         24,
60851                         24,
60852                         24,
60853                         24,
60854                         24,
60855                         24,
60856                         24,
60857                         24,
60858                         24,
60859                         24,
60860                         24,
60861                         24,
60862                         24,
60863                         24,
60864                         24,
60865                         24,
60866                         24,
60867                         24,
60868                         24,
60869                         24,
60870                         24,
60871                         24,
60872                         24,
60873                         24,
60874                         23,
60875                         24,
60876                         24,
60877                         24,
60878                         24,
60879                         24,
60880                         24,
60881                         24,
60882                         24,
60883                         24,
60884                         24,
60885                         24,
60886                         24,
60887                         24,
60888                         24,
60889                         24,
60890                         24,
60891                         24,
60892                         24,
60893                         24,
60894                         24,
60895                         24,
60896                         24,
60897                         24,
60898                         24,
60899                         24,
60900                         24,
60901                         24,
60902                         23,
60903                         24,
60904                         24,
60905                         24,
60906                         24,
60907                         24,
60908                         24,
60909                         24,
60910                         24,
60911                         24,
60912                         24,
60913                         24,
60914                         24,
60915                         24,
60916                         24,
60917                         24,
60918                         24,
60919                         24,
60920                         24,
60921                         24,
60922                         24,
60923                         24,
60924                         24,
60925                         24,
60926                         24,
60927                         24,
60928                         24,
60929                         24,
60930                         23,
60931                         24,
60932                         24,
60933                         24,
60934                         24,
60935                         24,
60936                         24,
60937                         24,
60938                         24,
60939                         24,
60940                         24,
60941                         24,
60942                         24,
60943                         24,
60944                         24,
60945                         24,
60946                         24,
60947                         24,
60948                         24,
60949                         24,
60950                         24,
60951                         24,
60952                         24,
60953                         24,
60954                         24,
60955                         24,
60956                         24,
60957                         24,
60958                         23,
60959                         24,
60960                         24,
60961                         24,
60962                         24,
60963                         24,
60964                         24,
60965                         24,
60966                         24,
60967                         24,
60968                         24,
60969                         24,
60970                         24,
60971                         24,
60972                         24,
60973                         24,
60974                         24,
60975                         24,
60976                         24,
60977                         24,
60978                         24,
60979                         24,
60980                         24,
60981                         24,
60982                         24,
60983                         24,
60984                         24,
60985                         24,
60986                         23,
60987                         24,
60988                         24,
60989                         24,
60990                         24,
60991                         24,
60992                         24,
60993                         24,
60994                         24,
60995                         24,
60996                         24,
60997                         24,
60998                         24,
60999                         24,
61000                         24,
61001                         24,
61002                         24,
61003                         24,
61004                         24,
61005                         24,
61006                         24,
61007                         24,
61008                         24,
61009                         24,
61010                         24,
61011                         24,
61012                         24,
61013                         24,
61014                         23,
61015                         24,
61016                         24,
61017                         24,
61018                         24,
61019                         24,
61020                         24,
61021                         24,
61022                         24,
61023                         24,
61024                         24,
61025                         24,
61026                         24,
61027                         24,
61028                         24,
61029                         24,
61030                         24,
61031                         24,
61032                         24,
61033                         24,
61034                         24,
61035                         24,
61036                         24,
61037                         24,
61038                         24,
61039                         24,
61040                         24,
61041                         24,
61042                         23,
61043                         24,
61044                         24,
61045                         24,
61046                         24,
61047                         24,
61048                         24,
61049                         24,
61050                         24,
61051                         24,
61052                         24,
61053                         24,
61054                         24,
61055                         24,
61056                         24,
61057                         24,
61058                         24,
61059                         24,
61060                         24,
61061                         24,
61062                         24,
61063                         24,
61064                         24,
61065                         24,
61066                         24,
61067                         24,
61068                         24,
61069                         24,
61070                         23,
61071                         24,
61072                         24,
61073                         24,
61074                         24,
61075                         24,
61076                         24,
61077                         24,
61078                         24,
61079                         24,
61080                         24,
61081                         24,
61082                         24,
61083                         24,
61084                         24,
61085                         24,
61086                         24,
61087                         24,
61088                         24,
61089                         24,
61090                         24,
61091                         24,
61092                         24,
61093                         24,
61094                         24,
61095                         24,
61096                         24,
61097                         24,
61098                         23,
61099                         24,
61100                         24,
61101                         24,
61102                         24,
61103                         24,
61104                         24,
61105                         24,
61106                         24,
61107                         24,
61108                         24,
61109                         24,
61110                         24,
61111                         24,
61112                         24,
61113                         24,
61114                         24,
61115                         24,
61116                         24,
61117                         24,
61118                         24,
61119                         24,
61120                         24,
61121                         24,
61122                         24,
61123                         24,
61124                         24,
61125                         24,
61126                         23,
61127                         24,
61128                         24,
61129                         24,
61130                         24,
61131                         24,
61132                         24,
61133                         24,
61134                         24,
61135                         24,
61136                         24,
61137                         24,
61138                         24,
61139                         24,
61140                         24,
61141                         24,
61142                         24,
61143                         24,
61144                         24,
61145                         24,
61146                         24,
61147                         24,
61148                         24,
61149                         24,
61150                         24,
61151                         24,
61152                         24,
61153                         24,
61154                         23,
61155                         24,
61156                         24,
61157                         24,
61158                         24,
61159                         24,
61160                         24,
61161                         24,
61162                         24,
61163                         24,
61164                         24,
61165                         24,
61166                         24,
61167                         24,
61168                         24,
61169                         24,
61170                         24,
61171                         24,
61172                         24,
61173                         24,
61174                         24,
61175                         24,
61176                         24,
61177                         24,
61178                         24,
61179                         24,
61180                         24,
61181                         24,
61182                         23,
61183                         24,
61184                         24,
61185                         24,
61186                         24,
61187                         24,
61188                         24,
61189                         24,
61190                         24,
61191                         24,
61192                         24,
61193                         24,
61194                         24,
61195                         24,
61196                         24,
61197                         24,
61198                         24,
61199                         24,
61200                         24,
61201                         24,
61202                         24,
61203                         24,
61204                         24,
61205                         24,
61206                         24,
61207                         24,
61208                         24,
61209                         24,
61210                         23,
61211                         24,
61212                         24,
61213                         24,
61214                         24,
61215                         24,
61216                         24,
61217                         24,
61218                         24,
61219                         24,
61220                         24,
61221                         24,
61222                         24,
61223                         24,
61224                         24,
61225                         24,
61226                         24,
61227                         24,
61228                         24,
61229                         24,
61230                         24,
61231                         24,
61232                         24,
61233                         24,
61234                         24,
61235                         24,
61236                         24,
61237                         24,
61238                         23,
61239                         24,
61240                         24,
61241                         24,
61242                         24,
61243                         24,
61244                         24,
61245                         24,
61246                         24,
61247                         24,
61248                         24,
61249                         24,
61250                         24,
61251                         24,
61252                         24,
61253                         24,
61254                         24,
61255                         24,
61256                         24,
61257                         24,
61258                         24,
61259                         24,
61260                         24,
61261                         24,
61262                         24,
61263                         24,
61264                         24,
61265                         24,
61266                         23,
61267                         24,
61268                         24,
61269                         24,
61270                         24,
61271                         24,
61272                         24,
61273                         24,
61274                         24,
61275                         24,
61276                         24,
61277                         24,
61278                         24,
61279                         24,
61280                         24,
61281                         24,
61282                         24,
61283                         24,
61284                         24,
61285                         24,
61286                         24,
61287                         24,
61288                         24,
61289                         24,
61290                         24,
61291                         24,
61292                         24,
61293                         24,
61294                         23,
61295                         24,
61296                         24,
61297                         24,
61298                         24,
61299                         24,
61300                         24,
61301                         24,
61302                         24,
61303                         24,
61304                         24,
61305                         24,
61306                         24,
61307                         24,
61308                         24,
61309                         24,
61310                         24,
61311                         24,
61312                         24,
61313                         24,
61314                         24,
61315                         24,
61316                         24,
61317                         24,
61318                         24,
61319                         24,
61320                         24,
61321                         24,
61322                         23,
61323                         24,
61324                         24,
61325                         24,
61326                         24,
61327                         24,
61328                         24,
61329                         24,
61330                         24,
61331                         24,
61332                         24,
61333                         24,
61334                         24,
61335                         24,
61336                         24,
61337                         24,
61338                         24,
61339                         24,
61340                         24,
61341                         24,
61342                         24,
61343                         24,
61344                         24,
61345                         24,
61346                         24,
61347                         24,
61348                         24,
61349                         24,
61350                         23,
61351                         24,
61352                         24,
61353                         24,
61354                         24,
61355                         24,
61356                         24,
61357                         24,
61358                         24,
61359                         24,
61360                         24,
61361                         24,
61362                         24,
61363                         24,
61364                         24,
61365                         24,
61366                         24,
61367                         24,
61368                         24,
61369                         24,
61370                         24,
61371                         24,
61372                         24,
61373                         24,
61374                         24,
61375                         24,
61376                         24,
61377                         24,
61378                         23,
61379                         24,
61380                         24,
61381                         24,
61382                         24,
61383                         24,
61384                         24,
61385                         24,
61386                         24,
61387                         24,
61388                         24,
61389                         24,
61390                         24,
61391                         24,
61392                         24,
61393                         24,
61394                         24,
61395                         24,
61396                         24,
61397                         24,
61398                         24,
61399                         24,
61400                         24,
61401                         24,
61402                         24,
61403                         24,
61404                         24,
61405                         24,
61406                         23,
61407                         24,
61408                         24,
61409                         24,
61410                         24,
61411                         24,
61412                         24,
61413                         24,
61414                         24,
61415                         24,
61416                         24,
61417                         24,
61418                         24,
61419                         24,
61420                         24,
61421                         24,
61422                         24,
61423                         24,
61424                         24,
61425                         24,
61426                         24,
61427                         24,
61428                         24,
61429                         24,
61430                         24,
61431                         24,
61432                         24,
61433                         24,
61434                         23,
61435                         24,
61436                         24,
61437                         24,
61438                         24,
61439                         24,
61440                         24,
61441                         24,
61442                         24,
61443                         24,
61444                         24,
61445                         24,
61446                         24,
61447                         24,
61448                         24,
61449                         24,
61450                         24,
61451                         24,
61452                         24,
61453                         24,
61454                         24,
61455                         24,
61456                         24,
61457                         24,
61458                         24,
61459                         24,
61460                         24,
61461                         24,
61462                         23,
61463                         24,
61464                         24,
61465                         24,
61466                         24,
61467                         24,
61468                         24,
61469                         24,
61470                         24,
61471                         24,
61472                         24,
61473                         24,
61474                         24,
61475                         24,
61476                         24,
61477                         24,
61478                         24,
61479                         24,
61480                         24,
61481                         24,
61482                         24,
61483                         24,
61484                         24,
61485                         24,
61486                         24,
61487                         24,
61488                         24,
61489                         24,
61490                         23,
61491                         24,
61492                         24,
61493                         24,
61494                         24,
61495                         24,
61496                         24,
61497                         24,
61498                         24,
61499                         24,
61500                         24,
61501                         24,
61502                         24,
61503                         24,
61504                         24,
61505                         24,
61506                         24,
61507                         24,
61508                         24,
61509                         24,
61510                         24,
61511                         24,
61512                         24,
61513                         24,
61514                         24,
61515                         24,
61516                         24,
61517                         24,
61518                         23,
61519                         24,
61520                         24,
61521                         24,
61522                         24,
61523                         24,
61524                         24,
61525                         24,
61526                         24,
61527                         24,
61528                         24,
61529                         24,
61530                         24,
61531                         24,
61532                         24,
61533                         24,
61534                         24,
61535                         24,
61536                         24,
61537                         24,
61538                         24,
61539                         24,
61540                         24,
61541                         24,
61542                         24,
61543                         24,
61544                         24,
61545                         24,
61546                         23,
61547                         24,
61548                         24,
61549                         24,
61550                         24,
61551                         24,
61552                         24,
61553                         24,
61554                         24,
61555                         24,
61556                         24,
61557                         24,
61558                         24,
61559                         24,
61560                         24,
61561                         24,
61562                         24,
61563                         24,
61564                         24,
61565                         24,
61566                         24,
61567                         24,
61568                         24,
61569                         24,
61570                         24,
61571                         24,
61572                         24,
61573                         24,
61574                         23,
61575                         24,
61576                         24,
61577                         24,
61578                         24,
61579                         24,
61580                         24,
61581                         24,
61582                         24,
61583                         24,
61584                         24,
61585                         24,
61586                         24,
61587                         24,
61588                         24,
61589                         24,
61590                         24,
61591                         24,
61592                         24,
61593                         24,
61594                         24,
61595                         24,
61596                         24,
61597                         24,
61598                         24,
61599                         24,
61600                         24,
61601                         24,
61602                         23,
61603                         24,
61604                         24,
61605                         24,
61606                         24,
61607                         24,
61608                         24,
61609                         24,
61610                         24,
61611                         24,
61612                         24,
61613                         24,
61614                         24,
61615                         24,
61616                         24,
61617                         24,
61618                         24,
61619                         24,
61620                         24,
61621                         24,
61622                         24,
61623                         24,
61624                         24,
61625                         24,
61626                         24,
61627                         24,
61628                         24,
61629                         24,
61630                         23,
61631                         24,
61632                         24,
61633                         24,
61634                         24,
61635                         24,
61636                         24,
61637                         24,
61638                         24,
61639                         24,
61640                         24,
61641                         24,
61642                         24,
61643                         24,
61644                         24,
61645                         24,
61646                         24,
61647                         24,
61648                         24,
61649                         24,
61650                         24,
61651                         24,
61652                         24,
61653                         24,
61654                         24,
61655                         24,
61656                         24,
61657                         24,
61658                         23,
61659                         24,
61660                         24,
61661                         24,
61662                         24,
61663                         24,
61664                         24,
61665                         24,
61666                         24,
61667                         24,
61668                         24,
61669                         24,
61670                         24,
61671                         24,
61672                         24,
61673                         24,
61674                         24,
61675                         24,
61676                         24,
61677                         24,
61678                         24,
61679                         24,
61680                         24,
61681                         24,
61682                         24,
61683                         24,
61684                         24,
61685                         24,
61686                         23,
61687                         24,
61688                         24,
61689                         24,
61690                         24,
61691                         24,
61692                         24,
61693                         24,
61694                         24,
61695                         24,
61696                         24,
61697                         24,
61698                         24,
61699                         24,
61700                         24,
61701                         24,
61702                         24,
61703                         24,
61704                         24,
61705                         24,
61706                         24,
61707                         24,
61708                         24,
61709                         24,
61710                         24,
61711                         24,
61712                         24,
61713                         24,
61714                         23,
61715                         24,
61716                         24,
61717                         24,
61718                         24,
61719                         24,
61720                         24,
61721                         24,
61722                         24,
61723                         24,
61724                         24,
61725                         24,
61726                         24,
61727                         24,
61728                         24,
61729                         24,
61730                         24,
61731                         24,
61732                         24,
61733                         24,
61734                         24,
61735                         24,
61736                         24,
61737                         24,
61738                         24,
61739                         24,
61740                         24,
61741                         24,
61742                         23,
61743                         24,
61744                         24,
61745                         24,
61746                         24,
61747                         24,
61748                         24,
61749                         24,
61750                         24,
61751                         24,
61752                         24,
61753                         24,
61754                         24,
61755                         24,
61756                         24,
61757                         24,
61758                         24,
61759                         24,
61760                         24,
61761                         24,
61762                         24,
61763                         24,
61764                         24,
61765                         24,
61766                         24,
61767                         24,
61768                         24,
61769                         24,
61770                         23,
61771                         24,
61772                         24,
61773                         24,
61774                         24,
61775                         24,
61776                         24,
61777                         24,
61778                         24,
61779                         24,
61780                         24,
61781                         24,
61782                         24,
61783                         24,
61784                         24,
61785                         24,
61786                         24,
61787                         24,
61788                         24,
61789                         24,
61790                         24,
61791                         24,
61792                         24,
61793                         24,
61794                         24,
61795                         24,
61796                         24,
61797                         24,
61798                         23,
61799                         24,
61800                         24,
61801                         24,
61802                         24,
61803                         24,
61804                         24,
61805                         24,
61806                         24,
61807                         24,
61808                         24,
61809                         24,
61810                         24,
61811                         24,
61812                         24,
61813                         24,
61814                         24,
61815                         24,
61816                         24,
61817                         24,
61818                         24,
61819                         24,
61820                         24,
61821                         24,
61822                         24,
61823                         24,
61824                         24,
61825                         24,
61826                         23,
61827                         24,
61828                         24,
61829                         24,
61830                         24,
61831                         24,
61832                         24,
61833                         24,
61834                         24,
61835                         24,
61836                         24,
61837                         24,
61838                         24,
61839                         24,
61840                         24,
61841                         24,
61842                         24,
61843                         24,
61844                         24,
61845                         24,
61846                         24,
61847                         24,
61848                         24,
61849                         24,
61850                         24,
61851                         24,
61852                         24,
61853                         24,
61854                         23,
61855                         24,
61856                         24,
61857                         24,
61858                         24,
61859                         24,
61860                         24,
61861                         24,
61862                         24,
61863                         24,
61864                         24,
61865                         24,
61866                         24,
61867                         24,
61868                         24,
61869                         24,
61870                         24,
61871                         24,
61872                         24,
61873                         24,
61874                         24,
61875                         24,
61876                         24,
61877                         24,
61878                         24,
61879                         24,
61880                         24,
61881                         24,
61882                         23,
61883                         24,
61884                         24,
61885                         24,
61886                         24,
61887                         24,
61888                         24,
61889                         24,
61890                         24,
61891                         24,
61892                         24,
61893                         24,
61894                         24,
61895                         24,
61896                         24,
61897                         24,
61898                         24,
61899                         24,
61900                         24,
61901                         24,
61902                         24,
61903                         24,
61904                         24,
61905                         24,
61906                         24,
61907                         24,
61908                         24,
61909                         24,
61910                         23,
61911                         24,
61912                         24,
61913                         24,
61914                         24,
61915                         24,
61916                         24,
61917                         24,
61918                         24,
61919                         24,
61920                         24,
61921                         24,
61922                         24,
61923                         24,
61924                         24,
61925                         24,
61926                         24,
61927                         24,
61928                         24,
61929                         24,
61930                         24,
61931                         24,
61932                         24,
61933                         24,
61934                         24,
61935                         24,
61936                         24,
61937                         24,
61938                         23,
61939                         24,
61940                         24,
61941                         24,
61942                         24,
61943                         24,
61944                         24,
61945                         24,
61946                         24,
61947                         24,
61948                         24,
61949                         24,
61950                         24,
61951                         24,
61952                         24,
61953                         24,
61954                         24,
61955                         24,
61956                         24,
61957                         24,
61958                         24,
61959                         24,
61960                         24,
61961                         24,
61962                         24,
61963                         24,
61964                         24,
61965                         24,
61966                         23,
61967                         24,
61968                         24,
61969                         24,
61970                         24,
61971                         24,
61972                         24,
61973                         24,
61974                         24,
61975                         24,
61976                         24,
61977                         24,
61978                         24,
61979                         24,
61980                         24,
61981                         24,
61982                         24,
61983                         24,
61984                         24,
61985                         24,
61986                         24,
61987                         24,
61988                         24,
61989                         24,
61990                         24,
61991                         24,
61992                         24,
61993                         24,
61994                         23,
61995                         24,
61996                         24,
61997                         24,
61998                         24,
61999                         24,
62000                         24,
62001                         24,
62002                         24,
62003                         24,
62004                         24,
62005                         24,
62006                         24,
62007                         24,
62008                         24,
62009                         24,
62010                         24,
62011                         24,
62012                         24,
62013                         24,
62014                         24,
62015                         24,
62016                         24,
62017                         24,
62018                         24,
62019                         24,
62020                         24,
62021                         24,
62022                         23,
62023                         24,
62024                         24,
62025                         24,
62026                         24,
62027                         24,
62028                         24,
62029                         24,
62030                         24,
62031                         24,
62032                         24,
62033                         24,
62034                         24,
62035                         24,
62036                         24,
62037                         24,
62038                         24,
62039                         24,
62040                         24,
62041                         24,
62042                         24,
62043                         24,
62044                         24,
62045                         24,
62046                         24,
62047                         24,
62048                         24,
62049                         24,
62050                         23,
62051                         24,
62052                         24,
62053                         24,
62054                         24,
62055                         24,
62056                         24,
62057                         24,
62058                         24,
62059                         24,
62060                         24,
62061                         24,
62062                         24,
62063                         24,
62064                         24,
62065                         24,
62066                         24,
62067                         24,
62068                         24,
62069                         24,
62070                         24,
62071                         24,
62072                         24,
62073                         24,
62074                         24,
62075                         24,
62076                         24,
62077                         24,
62078                         23,
62079                         24,
62080                         24,
62081                         24,
62082                         24,
62083                         24,
62084                         24,
62085                         24,
62086                         24,
62087                         24,
62088                         24,
62089                         24,
62090                         24,
62091                         24,
62092                         24,
62093                         24,
62094                         24,
62095                         24,
62096                         24,
62097                         24,
62098                         24,
62099                         24,
62100                         24,
62101                         24,
62102                         24,
62103                         24,
62104                         24,
62105                         24,
62106                         23,
62107                         24,
62108                         24,
62109                         24,
62110                         24,
62111                         24,
62112                         24,
62113                         24,
62114                         24,
62115                         24,
62116                         24,
62117                         24,
62118                         24,
62119                         24,
62120                         24,
62121                         24,
62122                         24,
62123                         24,
62124                         24,
62125                         24,
62126                         24,
62127                         24,
62128                         24,
62129                         24,
62130                         24,
62131                         24,
62132                         24,
62133                         24,
62134                         23,
62135                         24,
62136                         24,
62137                         24,
62138                         24,
62139                         24,
62140                         24,
62141                         24,
62142                         24,
62143                         24,
62144                         24,
62145                         24,
62146                         24,
62147                         24,
62148                         24,
62149                         24,
62150                         24,
62151                         24,
62152                         24,
62153                         24,
62154                         24,
62155                         24,
62156                         24,
62157                         24,
62158                         24,
62159                         24,
62160                         24,
62161                         24,
62162                         23,
62163                         24,
62164                         24,
62165                         24,
62166                         24,
62167                         24,
62168                         24,
62169                         24,
62170                         24,
62171                         24,
62172                         24,
62173                         24,
62174                         24,
62175                         24,
62176                         24,
62177                         24,
62178                         24,
62179                         24,
62180                         24,
62181                         24,
62182                         24,
62183                         24,
62184                         24,
62185                         24,
62186                         24,
62187                         24,
62188                         24,
62189                         24,
62190                         23,
62191                         24,
62192                         24,
62193                         24,
62194                         24,
62195                         24,
62196                         24,
62197                         24,
62198                         24,
62199                         24,
62200                         24,
62201                         24,
62202                         24,
62203                         24,
62204                         24,
62205                         24,
62206                         24,
62207                         24,
62208                         24,
62209                         24,
62210                         24,
62211                         24,
62212                         24,
62213                         24,
62214                         24,
62215                         24,
62216                         24,
62217                         24,
62218                         23,
62219                         24,
62220                         24,
62221                         24,
62222                         24,
62223                         24,
62224                         24,
62225                         24,
62226                         24,
62227                         24,
62228                         24,
62229                         24,
62230                         24,
62231                         24,
62232                         24,
62233                         24,
62234                         24,
62235                         24,
62236                         24,
62237                         24,
62238                         24,
62239                         24,
62240                         24,
62241                         24,
62242                         24,
62243                         24,
62244                         24,
62245                         24,
62246                         23,
62247                         24,
62248                         24,
62249                         24,
62250                         24,
62251                         24,
62252                         24,
62253                         24,
62254                         24,
62255                         24,
62256                         24,
62257                         24,
62258                         24,
62259                         24,
62260                         24,
62261                         24,
62262                         24,
62263                         24,
62264                         24,
62265                         24,
62266                         24,
62267                         24,
62268                         24,
62269                         24,
62270                         24,
62271                         24,
62272                         24,
62273                         24,
62274                         23,
62275                         24,
62276                         24,
62277                         24,
62278                         24,
62279                         24,
62280                         24,
62281                         24,
62282                         24,
62283                         24,
62284                         24,
62285                         24,
62286                         24,
62287                         24,
62288                         24,
62289                         24,
62290                         24,
62291                         24,
62292                         24,
62293                         24,
62294                         24,
62295                         24,
62296                         24,
62297                         24,
62298                         24,
62299                         24,
62300                         24,
62301                         24,
62302                         23,
62303                         24,
62304                         24,
62305                         24,
62306                         24,
62307                         24,
62308                         24,
62309                         24,
62310                         24,
62311                         24,
62312                         24,
62313                         24,
62314                         24,
62315                         24,
62316                         24,
62317                         24,
62318                         24,
62319                         24,
62320                         24,
62321                         24,
62322                         24,
62323                         24,
62324                         24,
62325                         24,
62326                         24,
62327                         24,
62328                         24,
62329                         24,
62330                         23,
62331                         24,
62332                         24,
62333                         24,
62334                         24,
62335                         24,
62336                         24,
62337                         24,
62338                         24,
62339                         24,
62340                         24,
62341                         24,
62342                         24,
62343                         24,
62344                         24,
62345                         24,
62346                         24,
62347                         24,
62348                         24,
62349                         24,
62350                         24,
62351                         24,
62352                         24,
62353                         24,
62354                         24,
62355                         24,
62356                         24,
62357                         24,
62358                         23,
62359                         24,
62360                         24,
62361                         24,
62362                         24,
62363                         24,
62364                         24,
62365                         24,
62366                         24,
62367                         24,
62368                         24,
62369                         24,
62370                         24,
62371                         24,
62372                         24,
62373                         24,
62374                         24,
62375                         24,
62376                         24,
62377                         24,
62378                         24,
62379                         24,
62380                         24,
62381                         24,
62382                         24,
62383                         24,
62384                         24,
62385                         24,
62386                         23,
62387                         24,
62388                         24,
62389                         24,
62390                         24,
62391                         24,
62392                         24,
62393                         24,
62394                         24,
62395                         24,
62396                         24,
62397                         24,
62398                         24,
62399                         24,
62400                         24,
62401                         24,
62402                         24,
62403                         24,
62404                         24,
62405                         24,
62406                         24,
62407                         24,
62408                         24,
62409                         24,
62410                         24,
62411                         24,
62412                         24,
62413                         24,
62414                         23,
62415                         24,
62416                         24,
62417                         24,
62418                         24,
62419                         24,
62420                         24,
62421                         24,
62422                         24,
62423                         24,
62424                         24,
62425                         24,
62426                         24,
62427                         24,
62428                         24,
62429                         24,
62430                         24,
62431                         24,
62432                         24,
62433                         24,
62434                         24,
62435                         24,
62436                         24,
62437                         24,
62438                         24,
62439                         24,
62440                         24,
62441                         24,
62442                         23,
62443                         24,
62444                         24,
62445                         24,
62446                         24,
62447                         24,
62448                         24,
62449                         24,
62450                         24,
62451                         24,
62452                         24,
62453                         24,
62454                         24,
62455                         24,
62456                         24,
62457                         24,
62458                         24,
62459                         24,
62460                         24,
62461                         24,
62462                         24,
62463                         24,
62464                         24,
62465                         24,
62466                         24,
62467                         24,
62468                         24,
62469                         24,
62470                         23,
62471                         24,
62472                         24,
62473                         24,
62474                         24,
62475                         24,
62476                         24,
62477                         24,
62478                         24,
62479                         24,
62480                         24,
62481                         24,
62482                         24,
62483                         24,
62484                         24,
62485                         24,
62486                         24,
62487                         24,
62488                         24,
62489                         24,
62490                         24,
62491                         24,
62492                         24,
62493                         24,
62494                         24,
62495                         24,
62496                         24,
62497                         24,
62498                         23,
62499                         24,
62500                         24,
62501                         24,
62502                         24,
62503                         24,
62504                         24,
62505                         24,
62506                         24,
62507                         24,
62508                         24,
62509                         24,
62510                         24,
62511                         24,
62512                         24,
62513                         24,
62514                         24,
62515                         24,
62516                         24,
62517                         24,
62518                         24,
62519                         24,
62520                         24,
62521                         24,
62522                         24,
62523                         24,
62524                         24,
62525                         24,
62526                         23,
62527                         24,
62528                         24,
62529                         24,
62530                         24,
62531                         24,
62532                         24,
62533                         24,
62534                         24,
62535                         24,
62536                         24,
62537                         24,
62538                         24,
62539                         24,
62540                         24,
62541                         24,
62542                         24,
62543                         24,
62544                         24,
62545                         24,
62546                         24,
62547                         24,
62548                         24,
62549                         24,
62550                         24,
62551                         24,
62552                         24,
62553                         24,
62554                         23,
62555                         24,
62556                         24,
62557                         24,
62558                         24,
62559                         24,
62560                         24,
62561                         24,
62562                         24,
62563                         24,
62564                         24,
62565                         24,
62566                         24,
62567                         24,
62568                         24,
62569                         24,
62570                         24,
62571                         24,
62572                         24,
62573                         24,
62574                         24,
62575                         24,
62576                         24,
62577                         24,
62578                         24,
62579                         24,
62580                         24,
62581                         24,
62582                         23,
62583                         24,
62584                         24,
62585                         24,
62586                         24,
62587                         24,
62588                         24,
62589                         24,
62590                         24,
62591                         24,
62592                         24,
62593                         24,
62594                         24,
62595                         24,
62596                         24,
62597                         24,
62598                         24,
62599                         24,
62600                         24,
62601                         24,
62602                         24,
62603                         24,
62604                         24,
62605                         24,
62606                         24,
62607                         24,
62608                         24,
62609                         24,
62610                         23,
62611                         24,
62612                         24,
62613                         24,
62614                         24,
62615                         24,
62616                         24,
62617                         24,
62618                         24,
62619                         24,
62620                         24,
62621                         24,
62622                         24,
62623                         24,
62624                         24,
62625                         24,
62626                         24,
62627                         24,
62628                         24,
62629                         24,
62630                         24,
62631                         24,
62632                         24,
62633                         24,
62634                         24,
62635                         24,
62636                         24,
62637                         24,
62638                         23,
62639                         24,
62640                         24,
62641                         24,
62642                         24,
62643                         24,
62644                         24,
62645                         24,
62646                         24,
62647                         24,
62648                         24,
62649                         24,
62650                         24,
62651                         24,
62652                         24,
62653                         24,
62654                         24,
62655                         24,
62656                         24,
62657                         24,
62658                         24,
62659                         24,
62660                         24,
62661                         24,
62662                         24,
62663                         24,
62664                         24,
62665                         24,
62666                         23,
62667                         24,
62668                         24,
62669                         24,
62670                         24,
62671                         24,
62672                         24,
62673                         24,
62674                         24,
62675                         24,
62676                         24,
62677                         24,
62678                         24,
62679                         24,
62680                         24,
62681                         24,
62682                         24,
62683                         24,
62684                         24,
62685                         24,
62686                         24,
62687                         24,
62688                         24,
62689                         24,
62690                         24,
62691                         24,
62692                         24,
62693                         24,
62694                         23,
62695                         24,
62696                         24,
62697                         24,
62698                         24,
62699                         24,
62700                         24,
62701                         24,
62702                         24,
62703                         24,
62704                         24,
62705                         24,
62706                         24,
62707                         24,
62708                         24,
62709                         24,
62710                         24,
62711                         24,
62712                         24,
62713                         24,
62714                         24,
62715                         24,
62716                         24,
62717                         24,
62718                         24,
62719                         24,
62720                         24,
62721                         24,
62722                         23,
62723                         24,
62724                         24,
62725                         24,
62726                         24,
62727                         24,
62728                         24,
62729                         24,
62730                         24,
62731                         24,
62732                         24,
62733                         24,
62734                         24,
62735                         24,
62736                         24,
62737                         24,
62738                         24,
62739                         24,
62740                         24,
62741                         24,
62742                         24,
62743                         24,
62744                         24,
62745                         24,
62746                         24,
62747                         24,
62748                         24,
62749                         24,
62750                         23,
62751                         24,
62752                         24,
62753                         24,
62754                         24,
62755                         24,
62756                         24,
62757                         24,
62758                         24,
62759                         24,
62760                         24,
62761                         24,
62762                         24,
62763                         24,
62764                         24,
62765                         24,
62766                         24,
62767                         24,
62768                         24,
62769                         24,
62770                         24,
62771                         24,
62772                         24,
62773                         24,
62774                         24,
62775                         24,
62776                         24,
62777                         24,
62778                         23,
62779                         24,
62780                         24,
62781                         24,
62782                         24,
62783                         24,
62784                         24,
62785                         24,
62786                         24,
62787                         24,
62788                         24,
62789                         24,
62790                         24,
62791                         24,
62792                         24,
62793                         24,
62794                         24,
62795                         24,
62796                         24,
62797                         24,
62798                         24,
62799                         24,
62800                         24,
62801                         24,
62802                         24,
62803                         24,
62804                         24,
62805                         24,
62806                         23,
62807                         24,
62808                         24,
62809                         24,
62810                         24,
62811                         24,
62812                         24,
62813                         24,
62814                         24,
62815                         24,
62816                         24,
62817                         24,
62818                         24,
62819                         24,
62820                         24,
62821                         24,
62822                         24,
62823                         24,
62824                         24,
62825                         24,
62826                         24,
62827                         24,
62828                         24,
62829                         24,
62830                         24,
62831                         24,
62832                         24,
62833                         24,
62834                         23,
62835                         24,
62836                         24,
62837                         24,
62838                         24,
62839                         24,
62840                         24,
62841                         24,
62842                         24,
62843                         24,
62844                         24,
62845                         24,
62846                         24,
62847                         24,
62848                         24,
62849                         24,
62850                         24,
62851                         24,
62852                         24,
62853                         24,
62854                         24,
62855                         24,
62856                         24,
62857                         24,
62858                         24,
62859                         24,
62860                         24,
62861                         24,
62862                         23,
62863                         24,
62864                         24,
62865                         24,
62866                         24,
62867                         24,
62868                         24,
62869                         24,
62870                         24,
62871                         24,
62872                         24,
62873                         24,
62874                         24,
62875                         24,
62876                         24,
62877                         24,
62878                         24,
62879                         24,
62880                         24,
62881                         24,
62882                         24,
62883                         24,
62884                         24,
62885                         24,
62886                         24,
62887                         24,
62888                         24,
62889                         24,
62890                         39,
62891                         39,
62892                         39,
62893                         39,
62894                         39,
62895                         39,
62896                         39,
62897                         39,
62898                         39,
62899                         39,
62900                         39,
62901                         39,
62902                         26,
62903                         26,
62904                         26,
62905                         26,
62906                         26,
62907                         26,
62908                         26,
62909                         26,
62910                         26,
62911                         26,
62912                         26,
62913                         26,
62914                         26,
62915                         26,
62916                         26,
62917                         26,
62918                         26,
62919                         26,
62920                         26,
62921                         26,
62922                         26,
62923                         26,
62924                         26,
62925                         39,
62926                         39,
62927                         39,
62928                         39,
62929                         27,
62930                         27,
62931                         27,
62932                         27,
62933                         27,
62934                         27,
62935                         27,
62936                         27,
62937                         27,
62938                         27,
62939                         27,
62940                         27,
62941                         27,
62942                         27,
62943                         27,
62944                         27,
62945                         27,
62946                         27,
62947                         27,
62948                         27,
62949                         27,
62950                         27,
62951                         27,
62952                         27,
62953                         27,
62954                         27,
62955                         27,
62956                         27,
62957                         27,
62958                         27,
62959                         27,
62960                         27,
62961                         27,
62962                         27,
62963                         27,
62964                         27,
62965                         27,
62966                         27,
62967                         27,
62968                         27,
62969                         27,
62970                         27,
62971                         27,
62972                         27,
62973                         27,
62974                         27,
62975                         27,
62976                         27,
62977                         27,
62978                         39,
62979                         39,
62980                         39,
62981                         39,
62982                         37,
62983                         37,
62984                         37,
62985                         37,
62986                         37,
62987                         37,
62988                         37,
62989                         37,
62990                         37,
62991                         37,
62992                         37,
62993                         37,
62994                         37,
62995                         37,
62996                         37,
62997                         37,
62998                         37,
62999                         37,
63000                         37,
63001                         37,
63002                         37,
63003                         37,
63004                         37,
63005                         37,
63006                         37,
63007                         37,
63008                         37,
63009                         37,
63010                         37,
63011                         37,
63012                         37,
63013                         37,
63014                         14,
63015                         14,
63016                         14,
63017                         14,
63018                         14,
63019                         14,
63020                         14,
63021                         14,
63022                         14,
63023                         14,
63024                         14,
63025                         14,
63026                         14,
63027                         14,
63028                         14,
63029                         14,
63030                         14,
63031                         14,
63032                         14,
63033                         14,
63034                         14,
63035                         14,
63036                         14,
63037                         14,
63038                         14,
63039                         14,
63040                         14,
63041                         14,
63042                         14,
63043                         14,
63044                         14,
63045                         14,
63046                         12,
63047                         12,
63048                         12,
63049                         12,
63050                         12,
63051                         12,
63052                         12,
63053                         12,
63054                         12,
63055                         12,
63056                         12,
63057                         12,
63058                         12,
63059                         12,
63060                         12,
63061                         12,
63062                         12,
63063                         12,
63064                         12,
63065                         12,
63066                         12,
63067                         12,
63068                         12,
63069                         12,
63070                         39,
63071                         39,
63072                         39,
63073                         39,
63074                         39,
63075                         13,
63076                         21,
63077                         13,
63078                         13,
63079                         13,
63080                         13,
63081                         13,
63082                         13,
63083                         13,
63084                         13,
63085                         13,
63086                         13,
63087                         12,
63088                         13,
63089                         13,
63090                         13,
63091                         13,
63092                         13,
63093                         13,
63094                         13,
63095                         13,
63096                         13,
63097                         13,
63098                         13,
63099                         13,
63100                         13,
63101                         13,
63102                         13,
63103                         13,
63104                         13,
63105                         13,
63106                         13,
63107                         13,
63108                         13,
63109                         13,
63110                         13,
63111                         13,
63112                         13,
63113                         13,
63114                         13,
63115                         13,
63116                         13,
63117                         13,
63118                         13,
63119                         13,
63120                         13,
63121                         13,
63122                         13,
63123                         13,
63124                         13,
63125                         13,
63126                         12,
63127                         12,
63128                         12,
63129                         12,
63130                         12,
63131                         12,
63132                         12,
63133                         12,
63134                         12,
63135                         12,
63136                         12,
63137                         12,
63138                         12,
63139                         12,
63140                         12,
63141                         12,
63142                         12,
63143                         12,
63144                         12,
63145                         12,
63146                         12,
63147                         12,
63148                         12,
63149                         12,
63150                         12,
63151                         12,
63152                         12,
63153                         12,
63154                         12,
63155                         12,
63156                         12,
63157                         12,
63158                         12,
63159                         12,
63160                         12,
63161                         12,
63162                         12,
63163                         12,
63164                         12,
63165                         12,
63166                         12,
63167                         12,
63168                         12,
63169                         12,
63170                         12,
63171                         12,
63172                         12,
63173                         12,
63174                         12,
63175                         12,
63176                         12,
63177                         12,
63178                         12,
63179                         12,
63180                         12,
63181                         12,
63182                         12,
63183                         12,
63184                         12,
63185                         12,
63186                         12,
63187                         12,
63188                         12,
63189                         12,
63190                         12,
63191                         12,
63192                         12,
63193                         12,
63194                         12,
63195                         12,
63196                         12,
63197                         12,
63198                         12,
63199                         12,
63200                         12,
63201                         12,
63202                         12,
63203                         12,
63204                         0,
63205                         1,
63206                         39,
63207                         39,
63208                         39,
63209                         39,
63210                         39,
63211                         39,
63212                         39,
63213                         39,
63214                         39,
63215                         39,
63216                         39,
63217                         39,
63218                         39,
63219                         39,
63220                         39,
63221                         39,
63222                         12,
63223                         12,
63224                         12,
63225                         12,
63226                         12,
63227                         12,
63228                         12,
63229                         12,
63230                         12,
63231                         12,
63232                         12,
63233                         12,
63234                         12,
63235                         12,
63236                         12,
63237                         12,
63238                         12,
63239                         12,
63240                         12,
63241                         12,
63242                         12,
63243                         12,
63244                         12,
63245                         12,
63246                         12,
63247                         12,
63248                         12,
63249                         12,
63250                         12,
63251                         12,
63252                         12,
63253                         12,
63254                         12,
63255                         12,
63256                         12,
63257                         12,
63258                         12,
63259                         12,
63260                         12,
63261                         12,
63262                         12,
63263                         12,
63264                         12,
63265                         12,
63266                         12,
63267                         12,
63268                         12,
63269                         12,
63270                         12,
63271                         12,
63272                         12,
63273                         12,
63274                         12,
63275                         12,
63276                         12,
63277                         12,
63278                         12,
63279                         12,
63280                         12,
63281                         12,
63282                         12,
63283                         12,
63284                         12,
63285                         12,
63286                         12,
63287                         12,
63288                         12,
63289                         12,
63290                         12,
63291                         12,
63292                         12,
63293                         12,
63294                         12,
63295                         12,
63296                         12,
63297                         12,
63298                         10,
63299                         12,
63300                         39,
63301                         39,
63302                         21,
63303                         21,
63304                         21,
63305                         21,
63306                         21,
63307                         21,
63308                         21,
63309                         21,
63310                         21,
63311                         21,
63312                         21,
63313                         21,
63314                         21,
63315                         21,
63316                         21,
63317                         21,
63318                         8,
63319                         1,
63320                         1,
63321                         8,
63322                         8,
63323                         6,
63324                         6,
63325                         0,
63326                         1,
63327                         15,
63328                         39,
63329                         39,
63330                         39,
63331                         39,
63332                         39,
63333                         39,
63334                         21,
63335                         21,
63336                         21,
63337                         21,
63338                         21,
63339                         21,
63340                         21,
63341                         39,
63342                         39,
63343                         39,
63344                         39,
63345                         39,
63346                         39,
63347                         39,
63348                         39,
63349                         39,
63350                         14,
63351                         14,
63352                         14,
63353                         14,
63354                         14,
63355                         0,
63356                         1,
63357                         0,
63358                         1,
63359                         0,
63360                         1,
63361                         0,
63362                         1,
63363                         0,
63364                         1,
63365                         0,
63366                         1,
63367                         0,
63368                         1,
63369                         0,
63370                         1,
63371                         14,
63372                         14,
63373                         0,
63374                         1,
63375                         14,
63376                         14,
63377                         14,
63378                         14,
63379                         14,
63380                         14,
63381                         14,
63382                         1,
63383                         14,
63384                         1,
63385                         39,
63386                         5,
63387                         5,
63388                         6,
63389                         6,
63390                         14,
63391                         0,
63392                         1,
63393                         0,
63394                         1,
63395                         0,
63396                         1,
63397                         14,
63398                         14,
63399                         14,
63400                         14,
63401                         14,
63402                         14,
63403                         14,
63404                         14,
63405                         14,
63406                         14,
63407                         9,
63408                         10,
63409                         14,
63410                         39,
63411                         39,
63412                         39,
63413                         39,
63414                         12,
63415                         12,
63416                         12,
63417                         12,
63418                         12,
63419                         12,
63420                         12,
63421                         12,
63422                         12,
63423                         12,
63424                         12,
63425                         12,
63426                         12,
63427                         12,
63428                         12,
63429                         12,
63430                         12,
63431                         12,
63432                         12,
63433                         12,
63434                         12,
63435                         12,
63436                         12,
63437                         12,
63438                         12,
63439                         12,
63440                         12,
63441                         12,
63442                         12,
63443                         12,
63444                         12,
63445                         12,
63446                         12,
63447                         12,
63448                         12,
63449                         12,
63450                         12,
63451                         12,
63452                         12,
63453                         12,
63454                         12,
63455                         12,
63456                         12,
63457                         12,
63458                         12,
63459                         12,
63460                         12,
63461                         12,
63462                         12,
63463                         12,
63464                         12,
63465                         12,
63466                         12,
63467                         12,
63468                         12,
63469                         12,
63470                         12,
63471                         12,
63472                         12,
63473                         12,
63474                         12,
63475                         12,
63476                         12,
63477                         12,
63478                         12,
63479                         12,
63480                         12,
63481                         12,
63482                         12,
63483                         12,
63484                         12,
63485                         12,
63486                         12,
63487                         12,
63488                         12,
63489                         12,
63490                         12,
63491                         39,
63492                         39,
63493                         22,
63494                         39,
63495                         6,
63496                         14,
63497                         14,
63498                         9,
63499                         10,
63500                         14,
63501                         14,
63502                         0,
63503                         1,
63504                         14,
63505                         14,
63506                         1,
63507                         14,
63508                         1,
63509                         14,
63510                         14,
63511                         14,
63512                         14,
63513                         14,
63514                         14,
63515                         14,
63516                         14,
63517                         14,
63518                         14,
63519                         14,
63520                         5,
63521                         5,
63522                         14,
63523                         14,
63524                         14,
63525                         6,
63526                         14,
63527                         14,
63528                         14,
63529                         14,
63530                         14,
63531                         14,
63532                         14,
63533                         14,
63534                         14,
63535                         14,
63536                         14,
63537                         14,
63538                         14,
63539                         14,
63540                         14,
63541                         14,
63542                         14,
63543                         14,
63544                         14,
63545                         14,
63546                         14,
63547                         14,
63548                         14,
63549                         14,
63550                         14,
63551                         14,
63552                         14,
63553                         0,
63554                         14,
63555                         1,
63556                         14,
63557                         14,
63558                         14,
63559                         14,
63560                         14,
63561                         14,
63562                         14,
63563                         14,
63564                         14,
63565                         14,
63566                         14,
63567                         14,
63568                         14,
63569                         14,
63570                         14,
63571                         14,
63572                         14,
63573                         14,
63574                         14,
63575                         14,
63576                         14,
63577                         14,
63578                         14,
63579                         14,
63580                         14,
63581                         14,
63582                         14,
63583                         14,
63584                         14,
63585                         0,
63586                         14,
63587                         1,
63588                         14,
63589                         0,
63590                         1,
63591                         1,
63592                         0,
63593                         1,
63594                         1,
63595                         5,
63596                         12,
63597                         32,
63598                         32,
63599                         32,
63600                         32,
63601                         32,
63602                         32,
63603                         32,
63604                         32,
63605                         32,
63606                         32,
63607                         12,
63608                         12,
63609                         12,
63610                         12,
63611                         12,
63612                         12,
63613                         12,
63614                         12,
63615                         12,
63616                         12,
63617                         12,
63618                         12,
63619                         12,
63620                         12,
63621                         12,
63622                         12,
63623                         12,
63624                         12,
63625                         12,
63626                         12,
63627                         12,
63628                         12,
63629                         12,
63630                         12,
63631                         12,
63632                         12,
63633                         12,
63634                         12,
63635                         12,
63636                         12,
63637                         12,
63638                         12,
63639                         12,
63640                         12,
63641                         12,
63642                         12,
63643                         12,
63644                         12,
63645                         12,
63646                         12,
63647                         12,
63648                         12,
63649                         12,
63650                         12,
63651                         12,
63652                         5,
63653                         5,
63654                         12,
63655                         12,
63656                         12,
63657                         12,
63658                         12,
63659                         12,
63660                         12,
63661                         12,
63662                         12,
63663                         12,
63664                         12,
63665                         12,
63666                         12,
63667                         12,
63668                         12,
63669                         12,
63670                         12,
63671                         12,
63672                         12,
63673                         12,
63674                         12,
63675                         12,
63676                         12,
63677                         12,
63678                         12,
63679                         12,
63680                         12,
63681                         12,
63682                         12,
63683                         12,
63684                         12,
63685                         12,
63686                         12,
63687                         12,
63688                         12,
63689                         12,
63690                         12,
63691                         12,
63692                         12,
63693                         12,
63694                         12,
63695                         12,
63696                         12,
63697                         12,
63698                         12,
63699                         12,
63700                         12,
63701                         12,
63702                         12,
63703                         12,
63704                         12,
63705                         12,
63706                         12,
63707                         12,
63708                         12,
63709                         12,
63710                         12,
63711                         12,
63712                         12,
63713                         12,
63714                         12,
63715                         39,
63716                         39,
63717                         39,
63718                         10,
63719                         9,
63720                         14,
63721                         14,
63722                         14,
63723                         9,
63724                         9,
63725                         39,
63726                         12,
63727                         12,
63728                         12,
63729                         12,
63730                         12,
63731                         12,
63732                         12,
63733                         39,
63734                         39,
63735                         39,
63736                         39,
63737                         39,
63738                         39,
63739                         39,
63740                         39,
63741                         39,
63742                         39,
63743                         21,
63744                         21,
63745                         21,
63746                         31,
63747                         29,
63748                         39,
63749                         39,
63750                         12,
63751                         12,
63752                         12,
63753                         12,
63754                         12,
63755                         12,
63756                         12,
63757                         12,
63758                         12,
63759                         12,
63760                         12,
63761                         12,
63762                         12,
63763                         12,
63764                         12,
63765                         12,
63766                         12,
63767                         12,
63768                         12,
63769                         12,
63770                         12,
63771                         12,
63772                         12,
63773                         12,
63774                         12,
63775                         12,
63776                         12,
63777                         12,
63778                         12,
63779                         12,
63780                         12,
63781                         12,
63782                         12,
63783                         12,
63784                         12,
63785                         12,
63786                         12,
63787                         12,
63788                         12,
63789                         12,
63790                         12,
63791                         12,
63792                         12,
63793                         12,
63794                         12,
63795                         12,
63796                         12,
63797                         12,
63798                         12,
63799                         12,
63800                         12,
63801                         12,
63802                         12,
63803                         12,
63804                         12,
63805                         12,
63806                         12,
63807                         12,
63808                         12,
63809                         39,
63810                         39,
63811                         39,
63812                         39,
63813                         39,
63814                         17,
63815                         17,
63816                         17,
63817                         39,
63818                         39,
63819                         39,
63820                         39,
63821                         12,
63822                         12,
63823                         12,
63824                         12,
63825                         12,
63826                         12,
63827                         12,
63828                         12,
63829                         12,
63830                         12,
63831                         12,
63832                         12,
63833                         12,
63834                         12,
63835                         12,
63836                         12,
63837                         12,
63838                         12,
63839                         12,
63840                         12,
63841                         12,
63842                         12,
63843                         12,
63844                         12,
63845                         12,
63846                         12,
63847                         12,
63848                         12,
63849                         12,
63850                         12,
63851                         12,
63852                         12,
63853                         12,
63854                         12,
63855                         12,
63856                         12,
63857                         12,
63858                         12,
63859                         12,
63860                         12,
63861                         12,
63862                         12,
63863                         12,
63864                         12,
63865                         12,
63866                         12,
63867                         12,
63868                         12,
63869                         12,
63870                         12,
63871                         12,
63872                         12,
63873                         12,
63874                         12,
63875                         12,
63876                         12,
63877                         12,
63878                         12,
63879                         12,
63880                         12,
63881                         12,
63882                         12,
63883                         12,
63884                         12,
63885                         12,
63886                         12,
63887                         12,
63888                         12,
63889                         12,
63890                         12,
63891                         12,
63892                         12,
63893                         12,
63894                         12,
63895                         12,
63896                         12,
63897                         12,
63898                         12,
63899                         12,
63900                         12,
63901                         12,
63902                         12,
63903                         12,
63904                         12,
63905                         12,
63906                         12,
63907                         21,
63908                         39,
63909                         39,
63910                         12,
63911                         12,
63912                         12,
63913                         12,
63914                         12,
63915                         12,
63916                         12,
63917                         12,
63918                         12,
63919                         12,
63920                         12,
63921                         12,
63922                         12,
63923                         12,
63924                         12,
63925                         12,
63926                         12,
63927                         12,
63928                         12,
63929                         12,
63930                         12,
63931                         12,
63932                         12,
63933                         12,
63934                         12,
63935                         12,
63936                         12,
63937                         12,
63938                         12,
63939                         12,
63940                         12,
63941                         12,
63942                         12,
63943                         12,
63944                         12,
63945                         12,
63946                         12,
63947                         12,
63948                         12,
63949                         12,
63950                         12,
63951                         12,
63952                         12,
63953                         12,
63954                         12,
63955                         12,
63956                         12,
63957                         12,
63958                         12,
63959                         12,
63960                         12,
63961                         12,
63962                         12,
63963                         12,
63964                         12,
63965                         12,
63966                         12,
63967                         12,
63968                         12,
63969                         12,
63970                         12,
63971                         12,
63972                         39,
63973                         17,
63974                         12,
63975                         12,
63976                         12,
63977                         12,
63978                         12,
63979                         12,
63980                         12,
63981                         12,
63982                         12,
63983                         12,
63984                         12,
63985                         12,
63986                         12,
63987                         12,
63988                         12,
63989                         12,
63990                         12,
63991                         12,
63992                         12,
63993                         12,
63994                         12,
63995                         12,
63996                         12,
63997                         12,
63998                         12,
63999                         12,
64000                         12,
64001                         12,
64002                         12,
64003                         12,
64004                         12,
64005                         12,
64006                         12,
64007                         12,
64008                         12,
64009                         12,
64010                         12,
64011                         12,
64012                         12,
64013                         12,
64014                         12,
64015                         12,
64016                         12,
64017                         12,
64018                         12,
64019                         12,
64020                         12,
64021                         12,
64022                         17,
64023                         12,
64024                         12,
64025                         12,
64026                         12,
64027                         12,
64028                         12,
64029                         12,
64030                         12,
64031                         12,
64032                         12,
64033                         12,
64034                         12,
64035                         12,
64036                         12,
64037                         12,
64038                         12,
64039                         12,
64040                         12,
64041                         12,
64042                         12,
64043                         12,
64044                         12,
64045                         12,
64046                         12,
64047                         12,
64048                         12,
64049                         12,
64050                         12,
64051                         12,
64052                         12,
64053                         12,
64054                         12,
64055                         12,
64056                         12,
64057                         12,
64058                         12,
64059                         12,
64060                         12,
64061                         12,
64062                         12,
64063                         12,
64064                         12,
64065                         12,
64066                         12,
64067                         12,
64068                         12,
64069                         12,
64070                         12,
64071                         12,
64072                         12,
64073                         12,
64074                         12,
64075                         12,
64076                         12,
64077                         12,
64078                         12,
64079                         12,
64080                         12,
64081                         12,
64082                         12,
64083                         12,
64084                         12,
64085                         12,
64086                         12,
64087                         12,
64088                         12,
64089                         12,
64090                         12,
64091                         12,
64092                         12,
64093                         12,
64094                         12,
64095                         12,
64096                         12,
64097                         12,
64098                         12,
64099                         12,
64100                         39,
64101                         39,
64102                         11,
64103                         11,
64104                         11,
64105                         11,
64106                         11,
64107                         11,
64108                         11,
64109                         11,
64110                         11,
64111                         11,
64112                         39,
64113                         39,
64114                         39,
64115                         39,
64116                         39,
64117                         39,
64118                         39,
64119                         39,
64120                         39,
64121                         39,
64122                         39,
64123                         39,
64124                         39,
64125                         39,
64126                         39,
64127                         39,
64128                         39,
64129                         39,
64130                         39,
64131                         39,
64132                         39,
64133                         39,
64134                         12,
64135                         12,
64136                         12,
64137                         12,
64138                         12,
64139                         12,
64140                         12,
64141                         12,
64142                         12,
64143                         12,
64144                         12,
64145                         12,
64146                         12,
64147                         12,
64148                         12,
64149                         12,
64150                         12,
64151                         12,
64152                         12,
64153                         12,
64154                         12,
64155                         12,
64156                         12,
64157                         12,
64158                         12,
64159                         12,
64160                         12,
64161                         12,
64162                         12,
64163                         12,
64164                         12,
64165                         12,
64166                         12,
64167                         12,
64168                         12,
64169                         12,
64170                         12,
64171                         12,
64172                         12,
64173                         12,
64174                         12,
64175                         12,
64176                         12,
64177                         12,
64178                         12,
64179                         12,
64180                         12,
64181                         12,
64182                         12,
64183                         12,
64184                         12,
64185                         12,
64186                         12,
64187                         12,
64188                         39,
64189                         17,
64190                         12,
64191                         12,
64192                         12,
64193                         12,
64194                         12,
64195                         12,
64196                         12,
64197                         12,
64198                         12,
64199                         12,
64200                         12,
64201                         12,
64202                         12,
64203                         12,
64204                         12,
64205                         12,
64206                         12,
64207                         12,
64208                         12,
64209                         12,
64210                         12,
64211                         12,
64212                         12,
64213                         12,
64214                         12,
64215                         12,
64216                         12,
64217                         12,
64218                         12,
64219                         12,
64220                         12,
64221                         12,
64222                         12,
64223                         12,
64224                         12,
64225                         12,
64226                         12,
64227                         12,
64228                         12,
64229                         12,
64230                         12,
64231                         12,
64232                         12,
64233                         12,
64234                         12,
64235                         12,
64236                         12,
64237                         12,
64238                         12,
64239                         12,
64240                         12,
64241                         12,
64242                         12,
64243                         12,
64244                         12,
64245                         12,
64246                         12,
64247                         12,
64248                         12,
64249                         12,
64250                         12,
64251                         12,
64252                         12,
64253                         12,
64254                         12,
64255                         12,
64256                         12,
64257                         12,
64258                         39,
64259                         39,
64260                         39,
64261                         17,
64262                         12,
64263                         12,
64264                         12,
64265                         12,
64266                         12,
64267                         12,
64268                         12,
64269                         12,
64270                         12,
64271                         12,
64272                         12,
64273                         12,
64274                         12,
64275                         12,
64276                         12,
64277                         12,
64278                         12,
64279                         12,
64280                         12,
64281                         12,
64282                         12,
64283                         12,
64284                         12,
64285                         12,
64286                         12,
64287                         12,
64288                         12,
64289                         12,
64290                         12,
64291                         12,
64292                         12,
64293                         12,
64294                         12,
64295                         21,
64296                         21,
64297                         21,
64298                         21,
64299                         21,
64300                         21,
64301                         21,
64302                         21,
64303                         21,
64304                         21,
64305                         21,
64306                         21,
64307                         21,
64308                         21,
64309                         21,
64310                         12,
64311                         12,
64312                         12,
64313                         12,
64314                         12,
64315                         12,
64316                         12,
64317                         12,
64318                         12,
64319                         12,
64320                         12,
64321                         12,
64322                         12,
64323                         12,
64324                         12,
64325                         12,
64326                         12,
64327                         12,
64328                         12,
64329                         12,
64330                         12,
64331                         12,
64332                         12,
64333                         12,
64334                         12,
64335                         12,
64336                         12,
64337                         12,
64338                         12,
64339                         12,
64340                         12,
64341                         12,
64342                         12,
64343                         12,
64344                         12,
64345                         12,
64346                         39,
64347                         39,
64348                         39,
64349                         39,
64350                         21,
64351                         21,
64352                         21,
64353                         21,
64354                         21,
64355                         21,
64356                         21,
64357                         21,
64358                         12,
64359                         12,
64360                         12,
64361                         12,
64362                         12,
64363                         12,
64364                         12,
64365                         12,
64366                         39,
64367                         39,
64368                         39,
64369                         39,
64370                         39,
64371                         39,
64372                         39,
64373                         39,
64374                         17,
64375                         17,
64376                         17,
64377                         17,
64378                         17,
64379                         17,
64380                         17,
64381                         17,
64382                         12,
64383                         12,
64384                         12,
64385                         12,
64386                         12,
64387                         12,
64388                         12,
64389                         12,
64390                         12,
64391                         12,
64392                         12,
64393                         12,
64394                         12,
64395                         12,
64396                         12,
64397                         12,
64398                         12,
64399                         12,
64400                         12,
64401                         12,
64402                         12,
64403                         12,
64404                         12,
64405                         12,
64406                         12,
64407                         12,
64408                         12,
64409                         12,
64410                         12,
64411                         12,
64412                         12,
64413                         12,
64414                         12,
64415                         12,
64416                         12,
64417                         12,
64418                         12,
64419                         12,
64420                         12,
64421                         12,
64422                         12,
64423                         12,
64424                         12,
64425                         12,
64426                         12,
64427                         12,
64428                         12,
64429                         12,
64430                         12,
64431                         12,
64432                         12,
64433                         12,
64434                         12,
64435                         12,
64436                         12,
64437                         12,
64438                         12,
64439                         12,
64440                         12,
64441                         12,
64442                         12,
64443                         12,
64444                         39,
64445                         39,
64446                         39,
64447                         17,
64448                         17,
64449                         17,
64450                         17,
64451                         17,
64452                         17,
64453                         17,
64454                         12,
64455                         12,
64456                         12,
64457                         12,
64458                         12,
64459                         12,
64460                         12,
64461                         12,
64462                         12,
64463                         12,
64464                         12,
64465                         12,
64466                         12,
64467                         12,
64468                         12,
64469                         12,
64470                         12,
64471                         12,
64472                         12,
64473                         12,
64474                         12,
64475                         12,
64476                         12,
64477                         12,
64478                         12,
64479                         12,
64480                         12,
64481                         12,
64482                         12,
64483                         12,
64484                         12,
64485                         12,
64486                         12,
64487                         12,
64488                         12,
64489                         12,
64490                         12,
64491                         12,
64492                         12,
64493                         12,
64494                         12,
64495                         12,
64496                         12,
64497                         12,
64498                         12,
64499                         12,
64500                         12,
64501                         12,
64502                         12,
64503                         12,
64504                         12,
64505                         12,
64506                         12,
64507                         12,
64508                         12,
64509                         12,
64510                         12,
64511                         12,
64512                         12,
64513                         12,
64514                         12,
64515                         12,
64516                         12,
64517                         39,
64518                         21,
64519                         21,
64520                         21,
64521                         12,
64522                         12,
64523                         12,
64524                         12,
64525                         12,
64526                         12,
64527                         12,
64528                         12,
64529                         12,
64530                         12,
64531                         12,
64532                         12,
64533                         12,
64534                         12,
64535                         12,
64536                         12,
64537                         12,
64538                         12,
64539                         12,
64540                         12,
64541                         12,
64542                         12,
64543                         12,
64544                         12,
64545                         12,
64546                         12,
64547                         12,
64548                         12,
64549                         12,
64550                         12,
64551                         12,
64552                         12,
64553                         12,
64554                         12,
64555                         12,
64556                         12,
64557                         12,
64558                         12,
64559                         12,
64560                         12,
64561                         12,
64562                         12,
64563                         12,
64564                         12,
64565                         12,
64566                         12,
64567                         12,
64568                         12,
64569                         12,
64570                         12,
64571                         12,
64572                         12,
64573                         12,
64574                         21,
64575                         21,
64576                         21,
64577                         21,
64578                         21,
64579                         21,
64580                         21,
64581                         21,
64582                         21,
64583                         21,
64584                         21,
64585                         21,
64586                         21,
64587                         21,
64588                         21,
64589                         17,
64590                         17,
64591                         12,
64592                         12,
64593                         12,
64594                         12,
64595                         12,
64596                         12,
64597                         12,
64598                         12,
64599                         12,
64600                         12,
64601                         12,
64602                         12,
64603                         12,
64604                         12,
64605                         12,
64606                         12,
64607                         12,
64608                         12,
64609                         12,
64610                         12,
64611                         12,
64612                         12,
64613                         12,
64614                         12,
64615                         12,
64616                         12,
64617                         12,
64618                         12,
64619                         12,
64620                         11,
64621                         11,
64622                         11,
64623                         11,
64624                         11,
64625                         11,
64626                         11,
64627                         11,
64628                         11,
64629                         11,
64630                         39,
64631                         39,
64632                         39,
64633                         39,
64634                         39,
64635                         39,
64636                         39,
64637                         39,
64638                         39,
64639                         39,
64640                         39,
64641                         39,
64642                         39,
64643                         39,
64644                         39,
64645                         39,
64646                         21,
64647                         21,
64648                         21,
64649                         12,
64650                         12,
64651                         12,
64652                         12,
64653                         12,
64654                         12,
64655                         12,
64656                         12,
64657                         12,
64658                         12,
64659                         12,
64660                         12,
64661                         12,
64662                         12,
64663                         12,
64664                         12,
64665                         12,
64666                         12,
64667                         12,
64668                         12,
64669                         12,
64670                         12,
64671                         12,
64672                         12,
64673                         12,
64674                         12,
64675                         12,
64676                         12,
64677                         12,
64678                         12,
64679                         12,
64680                         12,
64681                         12,
64682                         12,
64683                         12,
64684                         12,
64685                         12,
64686                         12,
64687                         12,
64688                         12,
64689                         12,
64690                         12,
64691                         12,
64692                         12,
64693                         12,
64694                         21,
64695                         21,
64696                         21,
64697                         21,
64698                         21,
64699                         21,
64700                         21,
64701                         21,
64702                         21,
64703                         21,
64704                         21,
64705                         12,
64706                         12,
64707                         12,
64708                         17,
64709                         17,
64710                         17,
64711                         17,
64712                         39,
64713                         39,
64714                         39,
64715                         39,
64716                         39,
64717                         39,
64718                         39,
64719                         39,
64720                         39,
64721                         39,
64722                         39,
64723                         39,
64724                         39,
64725                         39,
64726                         12,
64727                         12,
64728                         12,
64729                         12,
64730                         12,
64731                         12,
64732                         12,
64733                         12,
64734                         12,
64735                         12,
64736                         12,
64737                         12,
64738                         12,
64739                         12,
64740                         12,
64741                         12,
64742                         12,
64743                         12,
64744                         12,
64745                         12,
64746                         12,
64747                         12,
64748                         12,
64749                         12,
64750                         12,
64751                         39,
64752                         39,
64753                         39,
64754                         39,
64755                         39,
64756                         39,
64757                         39,
64758                         11,
64759                         11,
64760                         11,
64761                         11,
64762                         11,
64763                         11,
64764                         11,
64765                         11,
64766                         11,
64767                         11,
64768                         39,
64769                         39,
64770                         39,
64771                         39,
64772                         39,
64773                         39,
64774                         21,
64775                         21,
64776                         21,
64777                         12,
64778                         12,
64779                         12,
64780                         12,
64781                         12,
64782                         12,
64783                         12,
64784                         12,
64785                         12,
64786                         12,
64787                         12,
64788                         12,
64789                         12,
64790                         12,
64791                         12,
64792                         12,
64793                         12,
64794                         12,
64795                         12,
64796                         12,
64797                         12,
64798                         12,
64799                         12,
64800                         12,
64801                         12,
64802                         12,
64803                         12,
64804                         12,
64805                         12,
64806                         12,
64807                         12,
64808                         12,
64809                         12,
64810                         12,
64811                         12,
64812                         12,
64813                         21,
64814                         21,
64815                         21,
64816                         21,
64817                         21,
64818                         21,
64819                         21,
64820                         21,
64821                         21,
64822                         21,
64823                         21,
64824                         21,
64825                         21,
64826                         21,
64827                         39,
64828                         11,
64829                         11,
64830                         11,
64831                         11,
64832                         11,
64833                         11,
64834                         11,
64835                         11,
64836                         11,
64837                         11,
64838                         17,
64839                         17,
64840                         17,
64841                         17,
64842                         39,
64843                         39,
64844                         39,
64845                         39,
64846                         39,
64847                         39,
64848                         39,
64849                         39,
64850                         39,
64851                         39,
64852                         39,
64853                         39,
64854                         39,
64855                         39,
64856                         39,
64857                         39,
64858                         39,
64859                         39,
64860                         39,
64861                         39,
64862                         39,
64863                         39,
64864                         39,
64865                         39,
64866                         39,
64867                         39,
64868                         39,
64869                         39,
64870                         21,
64871                         21,
64872                         21,
64873                         12,
64874                         12,
64875                         12,
64876                         12,
64877                         12,
64878                         12,
64879                         12,
64880                         12,
64881                         12,
64882                         12,
64883                         12,
64884                         12,
64885                         12,
64886                         12,
64887                         12,
64888                         12,
64889                         12,
64890                         12,
64891                         12,
64892                         12,
64893                         12,
64894                         12,
64895                         12,
64896                         12,
64897                         12,
64898                         12,
64899                         12,
64900                         12,
64901                         12,
64902                         12,
64903                         12,
64904                         12,
64905                         12,
64906                         12,
64907                         12,
64908                         12,
64909                         12,
64910                         12,
64911                         12,
64912                         12,
64913                         12,
64914                         12,
64915                         12,
64916                         12,
64917                         12,
64918                         12,
64919                         12,
64920                         12,
64921                         21,
64922                         21,
64923                         21,
64924                         21,
64925                         21,
64926                         21,
64927                         21,
64928                         21,
64929                         21,
64930                         21,
64931                         21,
64932                         21,
64933                         21,
64934                         21,
64935                         12,
64936                         12,
64937                         12,
64938                         12,
64939                         17,
64940                         17,
64941                         12,
64942                         17,
64943                         39,
64944                         39,
64945                         39,
64946                         39,
64947                         39,
64948                         39,
64949                         39,
64950                         11,
64951                         11,
64952                         11,
64953                         11,
64954                         11,
64955                         11,
64956                         11,
64957                         11,
64958                         11,
64959                         11,
64960                         39,
64961                         39,
64962                         39,
64963                         39,
64964                         39,
64965                         39,
64966                         12,
64967                         12,
64968                         12,
64969                         12,
64970                         12,
64971                         12,
64972                         12,
64973                         12,
64974                         12,
64975                         12,
64976                         12,
64977                         12,
64978                         12,
64979                         12,
64980                         12,
64981                         12,
64982                         12,
64983                         12,
64984                         12,
64985                         12,
64986                         12,
64987                         12,
64988                         12,
64989                         12,
64990                         12,
64991                         12,
64992                         12,
64993                         12,
64994                         12,
64995                         12,
64996                         12,
64997                         12,
64998                         12,
64999                         12,
65000                         12,
65001                         12,
65002                         12,
65003                         12,
65004                         12,
65005                         12,
65006                         12,
65007                         12,
65008                         12,
65009                         21,
65010                         21,
65011                         21,
65012                         21,
65013                         21,
65014                         21,
65015                         21,
65016                         21,
65017                         21,
65018                         21,
65019                         21,
65020                         21,
65021                         21,
65022                         39,
65023                         39,
65024                         39,
65025                         39,
65026                         39,
65027                         39,
65028                         39,
65029                         39,
65030                         11,
65031                         11,
65032                         11,
65033                         11,
65034                         11,
65035                         11,
65036                         11,
65037                         11,
65038                         11,
65039                         11,
65040                         39,
65041                         39,
65042                         39,
65043                         39,
65044                         39,
65045                         39,
65046                         39,
65047                         39,
65048                         39,
65049                         39,
65050                         39,
65051                         39,
65052                         39,
65053                         39,
65054                         39,
65055                         39,
65056                         39,
65057                         39,
65058                         39,
65059                         39,
65060                         39,
65061                         39,
65062                         12,
65063                         12,
65064                         12,
65065                         12,
65066                         12,
65067                         12,
65068                         12,
65069                         12,
65070                         12,
65071                         12,
65072                         12,
65073                         12,
65074                         12,
65075                         12,
65076                         12,
65077                         12,
65078                         12,
65079                         12,
65080                         12,
65081                         12,
65082                         12,
65083                         12,
65084                         12,
65085                         12,
65086                         12,
65087                         12,
65088                         12,
65089                         12,
65090                         12,
65091                         12,
65092                         12,
65093                         12,
65094                         12,
65095                         12,
65096                         12,
65097                         39,
65098                         39,
65099                         39,
65100                         39,
65101                         39,
65102                         39,
65103                         39,
65104                         39,
65105                         39,
65106                         39,
65107                         39,
65108                         39,
65109                         39,
65110                         17,
65111                         17,
65112                         17,
65113                         17,
65114                         39,
65115                         39,
65116                         39,
65117                         39,
65118                         39,
65119                         39,
65120                         39,
65121                         39,
65122                         39,
65123                         39,
65124                         39,
65125                         39,
65126                         12,
65127                         12,
65128                         12,
65129                         12,
65130                         12,
65131                         12,
65132                         12,
65133                         12,
65134                         12,
65135                         12,
65136                         12,
65137                         12,
65138                         12,
65139                         12,
65140                         12,
65141                         12,
65142                         12,
65143                         12,
65144                         12,
65145                         12,
65146                         12,
65147                         12,
65148                         12,
65149                         12,
65150                         12,
65151                         12,
65152                         12,
65153                         12,
65154                         12,
65155                         12,
65156                         12,
65157                         12,
65158                         12,
65159                         12,
65160                         12,
65161                         12,
65162                         12,
65163                         12,
65164                         12,
65165                         12,
65166                         12,
65167                         12,
65168                         12,
65169                         12,
65170                         12,
65171                         12,
65172                         12,
65173                         12,
65174                         12,
65175                         12,
65176                         12,
65177                         12,
65178                         12,
65179                         12,
65180                         12,
65181                         12,
65182                         0,
65183                         0,
65184                         0,
65185                         1,
65186                         1,
65187                         1,
65188                         12,
65189                         12,
65190                         12,
65191                         12,
65192                         12,
65193                         12,
65194                         12,
65195                         12,
65196                         12,
65197                         12,
65198                         12,
65199                         12,
65200                         12,
65201                         12,
65202                         12,
65203                         12,
65204                         12,
65205                         12,
65206                         12,
65207                         12,
65208                         12,
65209                         12,
65210                         12,
65211                         12,
65212                         12,
65213                         12,
65214                         12,
65215                         12,
65216                         12,
65217                         12,
65218                         12,
65219                         12,
65220                         12,
65221                         12,
65222                         12,
65223                         12,
65224                         1,
65225                         12,
65226                         12,
65227                         12,
65228                         0,
65229                         1,
65230                         0,
65231                         1,
65232                         12,
65233                         12,
65234                         12,
65235                         12,
65236                         12,
65237                         12,
65238                         12,
65239                         12,
65240                         12,
65241                         12,
65242                         12,
65243                         12,
65244                         12,
65245                         12,
65246                         12,
65247                         12,
65248                         12,
65249                         12,
65250                         12,
65251                         12,
65252                         12,
65253                         12,
65254                         12,
65255                         12,
65256                         12,
65257                         12,
65258                         12,
65259                         12,
65260                         12,
65261                         12,
65262                         12,
65263                         12,
65264                         12,
65265                         12,
65266                         12,
65267                         12,
65268                         12,
65269                         12,
65270                         12,
65271                         12,
65272                         12,
65273                         12,
65274                         12,
65275                         12,
65276                         12,
65277                         12,
65278                         12,
65279                         12,
65280                         12,
65281                         12,
65282                         12,
65283                         12,
65284                         12,
65285                         12,
65286                         12,
65287                         12,
65288                         12,
65289                         12,
65290                         12,
65291                         12,
65292                         12,
65293                         12,
65294                         12,
65295                         12,
65296                         12,
65297                         12,
65298                         12,
65299                         12,
65300                         12,
65301                         12,
65302                         12,
65303                         12,
65304                         12,
65305                         12,
65306                         12,
65307                         12,
65308                         12,
65309                         12,
65310                         12,
65311                         0,
65312                         1,
65313                         1,
65314                         12,
65315                         12,
65316                         12,
65317                         12,
65318                         12,
65319                         12,
65320                         12,
65321                         12,
65322                         12,
65323                         12,
65324                         12,
65325                         12,
65326                         12,
65327                         12,
65328                         12,
65329                         12,
65330                         12,
65331                         12,
65332                         12,
65333                         12,
65334                         12,
65335                         12,
65336                         12,
65337                         12,
65338                         12,
65339                         12,
65340                         12,
65341                         12,
65342                         12,
65343                         12,
65344                         12,
65345                         12,
65346                         12,
65347                         12,
65348                         12,
65349                         12,
65350                         12,
65351                         12,
65352                         12,
65353                         12,
65354                         12,
65355                         12,
65356                         12,
65357                         12,
65358                         12,
65359                         12,
65360                         12,
65361                         12,
65362                         12,
65363                         12,
65364                         12,
65365                         12,
65366                         12,
65367                         21,
65368                         21,
65369                         21,
65370                         21,
65371                         21,
65372                         21,
65373                         21,
65374                         21,
65375                         21,
65376                         21,
65377                         21,
65378                         21,
65379                         21,
65380                         21,
65381                         21,
65382                         21,
65383                         21,
65384                         21,
65385                         21,
65386                         21,
65387                         21,
65388                         21,
65389                         21,
65390                         21,
65391                         21,
65392                         21,
65393                         21,
65394                         21,
65395                         21,
65396                         21,
65397                         21,
65398                         21,
65399                         21,
65400                         21,
65401                         21,
65402                         21,
65403                         21,
65404                         21,
65405                         21,
65406                         21,
65407                         21,
65408                         21,
65409                         21,
65410                         21,
65411                         21,
65412                         21,
65413                         21,
65414                         21,
65415                         21,
65416                         21,
65417                         21,
65418                         21,
65419                         21,
65420                         21,
65421                         21,
65422                         21,
65423                         21,
65424                         21,
65425                         21,
65426                         21,
65427                         21,
65428                         21,
65429                         21,
65430                         21,
65431                         21,
65432                         21,
65433                         12,
65434                         12,
65435                         12,
65436                         12,
65437                         12,
65438                         12,
65439                         12,
65440                         12,
65441                         12,
65442                         12,
65443                         12,
65444                         12,
65445                         12,
65446                         14,
65447                         14,
65448                         39,
65449                         39,
65450                         39,
65451                         39,
65452                         39,
65453                         39,
65454                         39,
65455                         39,
65456                         39,
65457                         39,
65458                         39,
65459                         39,
65460                         39,
65461                         39,
65462                         39,
65463                         39,
65464                         39,
65465                         39,
65466                         39,
65467                         39,
65468                         39,
65469                         39,
65470                         39,
65471                         39,
65472                         39,
65473                         39,
65474                         39,
65475                         39,
65476                         39,
65477                         39,
65478                         12,
65479                         12,
65480                         12,
65481                         12,
65482                         12,
65483                         12,
65484                         12,
65485                         12,
65486                         12,
65487                         12,
65488                         12,
65489                         12,
65490                         12,
65491                         12,
65492                         12,
65493                         12,
65494                         12,
65495                         12,
65496                         12,
65497                         12,
65498                         12,
65499                         12,
65500                         12,
65501                         12,
65502                         12,
65503                         12,
65504                         12,
65505                         12,
65506                         12,
65507                         12,
65508                         12,
65509                         12,
65510                         12,
65511                         12,
65512                         12,
65513                         12,
65514                         12,
65515                         21,
65516                         21,
65517                         21,
65518                         21,
65519                         21,
65520                         12,
65521                         12,
65522                         12,
65523                         21,
65524                         21,
65525                         21,
65526                         21,
65527                         21,
65528                         21,
65529                         21,
65530                         21,
65531                         21,
65532                         21,
65533                         21,
65534                         21,
65535                         21,
65536                         21,
65537                         21,
65538                         21,
65539                         21,
65540                         21,
65541                         21,
65542                         21,
65543                         21,
65544                         21,
65545                         12,
65546                         12,
65547                         21,
65548                         21,
65549                         21,
65550                         21,
65551                         21,
65552                         21,
65553                         21,
65554                         12,
65555                         12,
65556                         12,
65557                         12,
65558                         12,
65559                         12,
65560                         12,
65561                         12,
65562                         12,
65563                         12,
65564                         12,
65565                         12,
65566                         12,
65567                         12,
65568                         12,
65569                         12,
65570                         12,
65571                         12,
65572                         12,
65573                         12,
65574                         12,
65575                         12,
65576                         12,
65577                         12,
65578                         12,
65579                         12,
65580                         12,
65581                         12,
65582                         12,
65583                         12,
65584                         21,
65585                         21,
65586                         21,
65587                         21,
65588                         12,
65589                         12,
65590                         12,
65591                         12,
65592                         12,
65593                         12,
65594                         12,
65595                         12,
65596                         12,
65597                         12,
65598                         12,
65599                         12,
65600                         12,
65601                         12,
65602                         12,
65603                         12,
65604                         12,
65605                         12,
65606                         12,
65607                         12,
65608                         12,
65609                         12,
65610                         12,
65611                         12,
65612                         12,
65613                         12,
65614                         12,
65615                         12,
65616                         12,
65617                         12,
65618                         12,
65619                         12,
65620                         12,
65621                         12,
65622                         12,
65623                         12,
65624                         12,
65625                         12,
65626                         12,
65627                         12,
65628                         12,
65629                         12,
65630                         12,
65631                         12,
65632                         12,
65633                         12,
65634                         12,
65635                         12,
65636                         12,
65637                         12,
65638                         12,
65639                         12,
65640                         21,
65641                         21,
65642                         21,
65643                         12,
65644                         12,
65645                         12,
65646                         12,
65647                         12,
65648                         12,
65649                         12,
65650                         12,
65651                         12,
65652                         12,
65653                         12,
65654                         12,
65655                         12,
65656                         12,
65657                         12,
65658                         12,
65659                         12,
65660                         12,
65661                         12,
65662                         12,
65663                         12,
65664                         12,
65665                         12,
65666                         12,
65667                         12,
65668                         12,
65669                         12,
65670                         12,
65671                         12,
65672                         12,
65673                         12,
65674                         12,
65675                         12,
65676                         12,
65677                         12,
65678                         12,
65679                         12,
65680                         12,
65681                         12,
65682                         12,
65683                         12,
65684                         12,
65685                         12,
65686                         12,
65687                         12,
65688                         12,
65689                         12,
65690                         12,
65691                         12,
65692                         12,
65693                         12,
65694                         12,
65695                         12,
65696                         12,
65697                         12,
65698                         12,
65699                         12,
65700                         12,
65701                         12,
65702                         12,
65703                         12,
65704                         12,
65705                         12,
65706                         12,
65707                         12,
65708                         12,
65709                         12,
65710                         12,
65711                         12,
65712                         12,
65713                         12,
65714                         39,
65715                         39,
65716                         11,
65717                         11,
65718                         11,
65719                         11,
65720                         11,
65721                         11,
65722                         11,
65723                         11,
65724                         11,
65725                         11,
65726                         11,
65727                         11,
65728                         11,
65729                         11,
65730                         11,
65731                         11,
65732                         11,
65733                         11,
65734                         11,
65735                         11,
65736                         11,
65737                         11,
65738                         11,
65739                         11,
65740                         11,
65741                         11,
65742                         11,
65743                         11,
65744                         11,
65745                         11,
65746                         11,
65747                         11,
65748                         11,
65749                         11,
65750                         11,
65751                         11,
65752                         11,
65753                         11,
65754                         11,
65755                         11,
65756                         11,
65757                         11,
65758                         11,
65759                         11,
65760                         11,
65761                         11,
65762                         11,
65763                         11,
65764                         11,
65765                         11,
65766                         12,
65767                         12,
65768                         12,
65769                         12,
65770                         12,
65771                         12,
65772                         12,
65773                         12,
65774                         12,
65775                         12,
65776                         12,
65777                         12,
65778                         12,
65779                         12,
65780                         12,
65781                         12,
65782                         12,
65783                         12,
65784                         12,
65785                         12,
65786                         12,
65787                         12,
65788                         12,
65789                         12,
65790                         12,
65791                         12,
65792                         12,
65793                         12,
65794                         12,
65795                         12,
65796                         12,
65797                         12,
65798                         12,
65799                         12,
65800                         12,
65801                         12,
65802                         12,
65803                         12,
65804                         12,
65805                         12,
65806                         12,
65807                         12,
65808                         12,
65809                         12,
65810                         12,
65811                         12,
65812                         12,
65813                         12,
65814                         12,
65815                         12,
65816                         39,
65817                         39,
65818                         39,
65819                         39,
65820                         39,
65821                         39,
65822                         39,
65823                         39,
65824                         39,
65825                         39,
65826                         39,
65827                         39,
65828                         39,
65829                         39,
65830                         14,
65831                         14,
65832                         14,
65833                         14,
65834                         14,
65835                         14,
65836                         14,
65837                         14,
65838                         14,
65839                         14,
65840                         14,
65841                         14,
65842                         14,
65843                         14,
65844                         14,
65845                         14,
65846                         14,
65847                         14,
65848                         14,
65849                         14,
65850                         14,
65851                         14,
65852                         14,
65853                         14,
65854                         14,
65855                         14,
65856                         14,
65857                         14,
65858                         14,
65859                         14,
65860                         14,
65861                         14,
65862                         29,
65863                         29,
65864                         29,
65865                         29,
65866                         29,
65867                         29,
65868                         29,
65869                         29,
65870                         29,
65871                         29,
65872                         29,
65873                         29,
65874                         29,
65875                         29,
65876                         29,
65877                         29,
65878                         29,
65879                         29,
65880                         29,
65881                         29,
65882                         29,
65883                         29,
65884                         29,
65885                         29,
65886                         29,
65887                         29,
65888                         29,
65889                         29,
65890                         29,
65891                         29,
65892                         29,
65893                         29,
65894                         29,
65895                         29,
65896                         29,
65897                         29,
65898                         29,
65899                         29,
65900                         29,
65901                         29,
65902                         29,
65903                         29,
65904                         29,
65905                         29,
65906                         29,
65907                         29,
65908                         12,
65909                         39,
65910                         29,
65911                         29,
65912                         29,
65913                         29,
65914                         29,
65915                         29,
65916                         29,
65917                         29,
65918                         29,
65919                         29,
65920                         29,
65921                         29,
65922                         29,
65923                         29,
65924                         29,
65925                         29,
65926                         29,
65927                         29,
65928                         29,
65929                         29,
65930                         29,
65931                         29,
65932                         29,
65933                         29,
65934                         29,
65935                         29,
65936                         29,
65937                         29,
65938                         29,
65939                         29,
65940                         29,
65941                         29,
65942                         29,
65943                         29,
65944                         29,
65945                         29,
65946                         29,
65947                         29,
65948                         29,
65949                         29,
65950                         29,
65951                         29,
65952                         29,
65953                         29,
65954                         29,
65955                         29,
65956                         29,
65957                         29,
65958                         29,
65959                         29,
65960                         29,
65961                         29,
65962                         29,
65963                         29,
65964                         29,
65965                         29,
65966                         29,
65967                         29,
65968                         12,
65969                         12,
65970                         39,
65971                         39,
65972                         39,
65973                         39,
65974                         29,
65975                         29,
65976                         29,
65977                         29,
65978                         29,
65979                         29,
65980                         29,
65981                         29,
65982                         29,
65983                         29,
65984                         29,
65985                         29,
65986                         29,
65987                         29,
65988                         29,
65989                         29,
65990                         29,
65991                         29,
65992                         29,
65993                         29,
65994                         29,
65995                         29,
65996                         29,
65997                         29,
65998                         29,
65999                         29,
66000                         29,
66001                         29,
66002                         29,
66003                         29,
66004                         29,
66005                         29,
66006                         29,
66007                         29,
66008                         29,
66009                         29,
66010                         29,
66011                         29,
66012                         29,
66013                         29,
66014                         29,
66015                         29,
66016                         29,
66017                         39,
66018                         39,
66019                         39,
66020                         39,
66021                         39,
66022                         39,
66023                         39,
66024                         39,
66025                         39,
66026                         39,
66027                         39,
66028                         28,
66029                         28,
66030                         28,
66031                         28,
66032                         28,
66033                         28,
66034                         28,
66035                         28,
66036                         28,
66037                         28,
66038                         28,
66039                         28,
66040                         28,
66041                         28,
66042                         28,
66043                         28,
66044                         28,
66045                         28,
66046                         28,
66047                         28,
66048                         28,
66049                         28,
66050                         28,
66051                         28,
66052                         28,
66053                         28,
66054                         14,
66055                         14,
66056                         14,
66057                         14,
66058                         14,
66059                         14,
66060                         14,
66061                         14,
66062                         14,
66063                         14,
66064                         14,
66065                         14,
66066                         14,
66067                         14,
66068                         14,
66069                         14,
66070                         14,
66071                         14,
66072                         14,
66073                         14,
66074                         14,
66075                         14,
66076                         14,
66077                         14,
66078                         14,
66079                         14,
66080                         14,
66081                         14,
66082                         14,
66083                         14,
66084                         14,
66085                         14,
66086                         14,
66087                         14,
66088                         14,
66089                         14,
66090                         14,
66091                         14,
66092                         14,
66093                         14,
66094                         14,
66095                         14,
66096                         14,
66097                         14,
66098                         14,
66099                         14,
66100                         14,
66101                         14,
66102                         14,
66103                         14,
66104                         14,
66105                         14,
66106                         14,
66107                         12,
66108                         12,
66109                         14,
66110                         14,
66111                         14,
66112                         14,
66113                         14,
66114                         12,
66115                         14,
66116                         14,
66117                         14,
66118                         14,
66119                         14,
66120                         14,
66121                         14,
66122                         14,
66123                         14,
66124                         14,
66125                         14,
66126                         14,
66127                         14,
66128                         14,
66129                         14,
66130                         14,
66131                         14,
66132                         14,
66133                         14,
66134                         14,
66135                         14,
66136                         14,
66137                         14,
66138                         14,
66139                         14,
66140                         14,
66141                         14,
66142                         14,
66143                         14,
66144                         14,
66145                         14,
66146                         14,
66147                         14,
66148                         14,
66149                         14,
66150                         12,
66151                         14,
66152                         12,
66153                         14,
66154                         12,
66155                         14,
66156                         14,
66157                         14,
66158                         14,
66159                         14,
66160                         14,
66161                         14,
66162                         14,
66163                         14,
66164                         14,
66165                         12,
66166                         14,
66167                         12,
66168                         12,
66169                         14,
66170                         14,
66171                         14,
66172                         14,
66173                         14,
66174                         14,
66175                         14,
66176                         14,
66177                         14,
66178                         14,
66179                         14,
66180                         14,
66181                         14,
66182                         14,
66183                         14,
66184                         14,
66185                         14,
66186                         14,
66187                         14,
66188                         14,
66189                         14,
66190                         14,
66191                         14,
66192                         14,
66193                         14,
66194                         14,
66195                         14,
66196                         14,
66197                         14,
66198                         14,
66199                         14,
66200                         14,
66201                         14,
66202                         14,
66203                         14,
66204                         14,
66205                         14,
66206                         14,
66207                         14,
66208                         14,
66209                         14,
66210                         14,
66211                         14,
66212                         14,
66213                         14,
66214                         14,
66215                         14,
66216                         14,
66217                         14,
66218                         14,
66219                         14,
66220                         14,
66221                         14,
66222                         14,
66223                         14,
66224                         14,
66225                         14,
66226                         14,
66227                         14,
66228                         14,
66229                         14,
66230                         14,
66231                         14,
66232                         14,
66233                         14,
66234                         14,
66235                         14,
66236                         14,
66237                         14,
66238                         14,
66239                         14,
66240                         14,
66241                         14,
66242                         14,
66243                         39,
66244                         39,
66245                         39,
66246                         12,
66247                         12,
66248                         12,
66249                         12,
66250                         12,
66251                         12,
66252                         12,
66253                         14,
66254                         14,
66255                         14,
66256                         14,
66257                         14,
66258                         14,
66259                         14,
66260                         14,
66261                         14,
66262                         14,
66263                         14,
66264                         14,
66265                         14,
66266                         14,
66267                         14,
66268                         14,
66269                         12,
66270                         12,
66271                         12,
66272                         12,
66273                         12,
66274                         12,
66275                         12,
66276                         12,
66277                         12,
66278                         12,
66279                         12,
66280                         12,
66281                         12,
66282                         12,
66283                         14,
66284                         14,
66285                         14,
66286                         14,
66287                         14,
66288                         14,
66289                         14,
66290                         14,
66291                         14,
66292                         14,
66293                         14,
66294                         14,
66295                         14,
66296                         12,
66297                         12,
66298                         12,
66299                         12,
66300                         12,
66301                         12,
66302                         12,
66303                         12,
66304                         12,
66305                         12,
66306                         12,
66307                         12,
66308                         12,
66309                         12,
66310                         12,
66311                         12,
66312                         12,
66313                         12,
66314                         39,
66315                         39,
66316                         39,
66317                         39,
66318                         39,
66319                         39,
66320                         39,
66321                         39,
66322                         39,
66323                         39,
66324                         39,
66325                         39,
66326                         14,
66327                         14,
66328                         14,
66329                         14,
66330                         14,
66331                         14,
66332                         14,
66333                         14,
66334                         14,
66335                         14,
66336                         14,
66337                         14,
66338                         14,
66339                         14,
66340                         14,
66341                         14,
66342                         14,
66343                         14,
66344                         14,
66345                         14,
66346                         14,
66347                         14,
66348                         14,
66349                         14,
66350                         14,
66351                         14,
66352                         14,
66353                         14,
66354                         14,
66355                         14,
66356                         14,
66357                         14,
66358                         14,
66359                         14,
66360                         14,
66361                         14,
66362                         14,
66363                         14,
66364                         14,
66365                         14,
66366                         14,
66367                         14,
66368                         14,
66369                         14,
66370                         14,
66371                         14,
66372                         14,
66373                         14,
66374                         14,
66375                         14,
66376                         14,
66377                         14,
66378                         14,
66379                         14,
66380                         39,
66381                         39,
66382                         39,
66383                         39,
66384                         39,
66385                         39,
66386                         39,
66387                         39,
66388                         39,
66389                         39,
66390                         39,
66391                         39,
66392                         39,
66393                         39,
66394                         39,
66395                         39,
66396                         39,
66397                         39,
66398                         39,
66399                         39,
66400                         39,
66401                         39,
66402                         39,
66403                         39,
66404                         39,
66405                         39,
66406                         12,
66407                         12,
66408                         12,
66409                         12,
66410                         12,
66411                         12,
66412                         12,
66413                         12,
66414                         12,
66415                         12,
66416                         12,
66417                         12,
66418                         12,
66419                         12,
66420                         12,
66421                         12,
66422                         12,
66423                         12,
66424                         12,
66425                         12,
66426                         12,
66427                         12,
66428                         12,
66429                         12,
66430                         12,
66431                         12,
66432                         12,
66433                         12,
66434                         12,
66435                         12,
66436                         12,
66437                         12,
66438                         12,
66439                         12,
66440                         12,
66441                         12,
66442                         12,
66443                         12,
66444                         12,
66445                         12,
66446                         12,
66447                         12,
66448                         12,
66449                         12,
66450                         12,
66451                         12,
66452                         12,
66453                         12,
66454                         12,
66455                         12,
66456                         12,
66457                         12,
66458                         39,
66459                         39,
66460                         39,
66461                         39,
66462                         39,
66463                         39,
66464                         39,
66465                         39,
66466                         39,
66467                         39,
66468                         39,
66469                         39,
66470                         14,
66471                         14,
66472                         14,
66473                         14,
66474                         14,
66475                         14,
66476                         14,
66477                         14,
66478                         14,
66479                         14,
66480                         14,
66481                         14,
66482                         14,
66483                         14,
66484                         14,
66485                         14,
66486                         14,
66487                         14,
66488                         14,
66489                         14,
66490                         14,
66491                         14,
66492                         14,
66493                         14,
66494                         14,
66495                         14,
66496                         14,
66497                         14,
66498                         14,
66499                         14,
66500                         14,
66501                         14,
66502                         14,
66503                         14,
66504                         14,
66505                         14,
66506                         14,
66507                         14,
66508                         14,
66509                         14,
66510                         14,
66511                         14,
66512                         14,
66513                         14,
66514                         14,
66515                         14,
66516                         14,
66517                         14,
66518                         14,
66519                         14,
66520                         14,
66521                         14,
66522                         14,
66523                         14,
66524                         14,
66525                         14,
66526                         14,
66527                         14,
66528                         14,
66529                         14,
66530                         14,
66531                         14,
66532                         39,
66533                         39,
66534                         39,
66535                         21,
66536                         21,
66537                         21,
66538                         21,
66539                         21,
66540                         21,
66541                         21,
66542                         21,
66543                         21,
66544                         21,
66545                         21,
66546                         21,
66547                         21,
66548                         21,
66549                         21,
66550                         21,
66551                         21,
66552                         21,
66553                         21,
66554                         21,
66555                         21,
66556                         21,
66557                         21,
66558                         21,
66559                         21,
66560                         21,
66561                         21,
66562                         21,
66563                         21,
66564                         21,
66565                         21,
66566                         21,
66567                         21,
66568                         21,
66569                         21,
66570                         21,
66571                         21,
66572                         21,
66573                         21,
66574                         21,
66575                         21,
66576                         21,
66577                         21,
66578                         21,
66579                         21,
66580                         21,
66581                         21,
66582                         21,
66583                         21,
66584                         21,
66585                         21,
66586                         21,
66587                         21,
66588                         21,
66589                         21,
66590                         21,
66591                         21,
66592                         21,
66593                         21,
66594                         21,
66595                         21,
66596                         21,
66597                         21,
66598                         21,
66599                         21,
66600                         21,
66601                         21,
66602                         21,
66603                         21,
66604                         21,
66605                         21,
66606                         21,
66607                         21,
66608                         21,
66609                         21,
66610                         21,
66611                         21,
66612                         21,
66613                         21,
66614                         39,
66615                         39,
66616                         39,
66617                         39,
66618                         39,
66619                         39,
66620                         39,
66621                         39,
66622                         39,
66623                         39,
66624                         39,
66625                         39,
66626                         39,
66627                         39,
66628                         39,
66629                         39,
66630                         39,
66631                         39,
66632                         39,
66633                         39
66634                 ],
66635                 "highStart": 919552,
66636                 "errorValue": 0
66637         };
66638
66639 /***/ },
66640 /* 94 */
66641 /***/ function(module, exports) {
66642
66643         // Generated by CoffeeScript 1.7.1
66644         (function() {
66645           var AI, AL, B2, BA, BB, BK, CB, CJ, CL, CM, CP, CR, EX, GL, H2, H3, HL, HY, ID, IN, IS, JL, JT, JV, LF, NL, NS, NU, OP, PO, PR, QU, RI, SA, SG, SP, SY, WJ, XX, ZW;
66646
66647           exports.OP = OP = 0;
66648
66649           exports.CL = CL = 1;
66650
66651           exports.CP = CP = 2;
66652
66653           exports.QU = QU = 3;
66654
66655           exports.GL = GL = 4;
66656
66657           exports.NS = NS = 5;
66658
66659           exports.EX = EX = 6;
66660
66661           exports.SY = SY = 7;
66662
66663           exports.IS = IS = 8;
66664
66665           exports.PR = PR = 9;
66666
66667           exports.PO = PO = 10;
66668
66669           exports.NU = NU = 11;
66670
66671           exports.AL = AL = 12;
66672
66673           exports.HL = HL = 13;
66674
66675           exports.ID = ID = 14;
66676
66677           exports.IN = IN = 15;
66678
66679           exports.HY = HY = 16;
66680
66681           exports.BA = BA = 17;
66682
66683           exports.BB = BB = 18;
66684
66685           exports.B2 = B2 = 19;
66686
66687           exports.ZW = ZW = 20;
66688
66689           exports.CM = CM = 21;
66690
66691           exports.WJ = WJ = 22;
66692
66693           exports.H2 = H2 = 23;
66694
66695           exports.H3 = H3 = 24;
66696
66697           exports.JL = JL = 25;
66698
66699           exports.JV = JV = 26;
66700
66701           exports.JT = JT = 27;
66702
66703           exports.RI = RI = 28;
66704
66705           exports.AI = AI = 29;
66706
66707           exports.BK = BK = 30;
66708
66709           exports.CB = CB = 31;
66710
66711           exports.CJ = CJ = 32;
66712
66713           exports.CR = CR = 33;
66714
66715           exports.LF = LF = 34;
66716
66717           exports.NL = NL = 35;
66718
66719           exports.SA = SA = 36;
66720
66721           exports.SG = SG = 37;
66722
66723           exports.SP = SP = 38;
66724
66725           exports.XX = XX = 39;
66726
66727         }).call(this);
66728
66729
66730 /***/ },
66731 /* 95 */
66732 /***/ function(module, exports) {
66733
66734         // Generated by CoffeeScript 1.7.1
66735         (function() {
66736           var CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;
66737
66738           exports.DI_BRK = DI_BRK = 0;
66739
66740           exports.IN_BRK = IN_BRK = 1;
66741
66742           exports.CI_BRK = CI_BRK = 2;
66743
66744           exports.CP_BRK = CP_BRK = 3;
66745
66746           exports.PR_BRK = PR_BRK = 4;
66747
66748           exports.pairTable = [[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK]];
66749
66750         }).call(this);
66751
66752
66753 /***/ },
66754 /* 96 */
66755 /***/ function(module, exports, __webpack_require__) {
66756
66757         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
66758         (function() {
66759           var PDFImage;
66760
66761           PDFImage = __webpack_require__(97);
66762
66763           module.exports = {
66764             initImages: function() {
66765               this._imageRegistry = {};
66766               return this._imageCount = 0;
66767             },
66768             image: function(src, x, y, options) {
66769               var bh, bp, bw, h, hp, image, ip, w, wp, _base, _name, _ref, _ref1, _ref2;
66770               if (options == null) {
66771                 options = {};
66772               }
66773               if (typeof x === 'object') {
66774                 options = x;
66775                 x = null;
66776               }
66777               x = (_ref = x != null ? x : options.x) != null ? _ref : this.x;
66778               y = (_ref1 = y != null ? y : options.y) != null ? _ref1 : this.y;
66779               if (!Buffer.isBuffer(src)) {
66780                 image = this._imageRegistry[src];
66781               }
66782               if (!image) {
66783                 image = PDFImage.open(src, 'I' + (++this._imageCount));
66784                 image.embed(this);
66785                 if (!Buffer.isBuffer(src)) {
66786                   this._imageRegistry[src] = image;
66787                 }
66788               }
66789               if ((_base = this.page.xobjects)[_name = image.label] == null) {
66790                 _base[_name] = image.obj;
66791               }
66792               w = options.width || image.width;
66793               h = options.height || image.height;
66794               if (options.width && !options.height) {
66795                 wp = w / image.width;
66796                 w = image.width * wp;
66797                 h = image.height * wp;
66798               } else if (options.height && !options.width) {
66799                 hp = h / image.height;
66800                 w = image.width * hp;
66801                 h = image.height * hp;
66802               } else if (options.scale) {
66803                 w = image.width * options.scale;
66804                 h = image.height * options.scale;
66805               } else if (options.fit) {
66806                 _ref2 = options.fit, bw = _ref2[0], bh = _ref2[1];
66807                 bp = bw / bh;
66808                 ip = image.width / image.height;
66809                 if (ip > bp) {
66810                   w = bw;
66811                   h = bw / ip;
66812                 } else {
66813                   h = bh;
66814                   w = bh * ip;
66815                 }
66816                 if (options.align === 'center') {
66817                   x = x + bw / 2 - w / 2;
66818                 } else if (options.align === 'right') {
66819                   x = x + bw - w;
66820                 }
66821                 if (options.valign === 'center') {
66822                   y = y + bh / 2 - h / 2;
66823                 } else if (options.valign === 'bottom') {
66824                   y = y + bh - h;
66825                 }
66826               }
66827               if (this.y === y) {
66828                 this.y += h;
66829               }
66830               this.save();
66831               this.transform(w, 0, 0, -h, x, y + h);
66832               this.addContent("/" + image.label + " Do");
66833               this.restore();
66834               return this;
66835             }
66836           };
66837
66838         }).call(this);
66839
66840         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
66841
66842 /***/ },
66843 /* 97 */
66844 /***/ function(module, exports, __webpack_require__) {
66845
66846         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
66847
66848         /*
66849         PDFImage - embeds images in PDF documents
66850         By Devon Govett
66851          */
66852
66853         (function() {
66854           var Data, JPEG, PDFImage, PNG, fs;
66855
66856           fs = __webpack_require__(44);
66857
66858           Data = __webpack_require__(72);
66859
66860           JPEG = __webpack_require__(98);
66861
66862           PNG = __webpack_require__(99);
66863
66864           PDFImage = (function() {
66865             function PDFImage() {}
66866
66867             PDFImage.open = function(src, label) {
66868               var data, match;
66869               if (Buffer.isBuffer(src)) {
66870                 data = src;
66871               } else {
66872                 if (match = /^data:.+;base64,(.*)$/.exec(src)) {
66873                   data = new Buffer(match[1], 'base64');
66874                 } else {
66875                   data = fs.readFileSync(src);
66876                   if (!data) {
66877                     return;
66878                   }
66879                 }
66880               }
66881               if (data[0] === 0xff && data[1] === 0xd8) {
66882                 return new JPEG(data, label);
66883               } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {
66884                 return new PNG(data, label);
66885               } else {
66886                 throw new Error('Unknown image format.');
66887               }
66888             };
66889
66890             return PDFImage;
66891
66892           })();
66893
66894           module.exports = PDFImage;
66895
66896         }).call(this);
66897
66898         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
66899
66900 /***/ },
66901 /* 98 */
66902 /***/ function(module, exports, __webpack_require__) {
66903
66904         // Generated by CoffeeScript 1.7.1
66905         (function() {
66906           var JPEG, fs,
66907             __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
66908
66909           fs = __webpack_require__(44);
66910
66911           JPEG = (function() {
66912             var MARKERS;
66913
66914             MARKERS = [0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF];
66915
66916             function JPEG(data, label) {
66917               var channels, marker, pos;
66918               this.data = data;
66919               this.label = label;
66920               if (this.data.readUInt16BE(0) !== 0xFFD8) {
66921                 throw "SOI not found in JPEG";
66922               }
66923               pos = 2;
66924               while (pos < this.data.length) {
66925                 marker = this.data.readUInt16BE(pos);
66926                 pos += 2;
66927                 if (__indexOf.call(MARKERS, marker) >= 0) {
66928                   break;
66929                 }
66930                 pos += this.data.readUInt16BE(pos);
66931               }
66932               if (__indexOf.call(MARKERS, marker) < 0) {
66933                 throw "Invalid JPEG.";
66934               }
66935               pos += 2;
66936               this.bits = this.data[pos++];
66937               this.height = this.data.readUInt16BE(pos);
66938               pos += 2;
66939               this.width = this.data.readUInt16BE(pos);
66940               pos += 2;
66941               channels = this.data[pos++];
66942               this.colorSpace = (function() {
66943                 switch (channels) {
66944                   case 1:
66945                     return 'DeviceGray';
66946                   case 3:
66947                     return 'DeviceRGB';
66948                   case 4:
66949                     return 'DeviceCMYK';
66950                 }
66951               })();
66952               this.obj = null;
66953             }
66954
66955             JPEG.prototype.embed = function(document) {
66956               if (this.obj) {
66957                 return;
66958               }
66959               this.obj = document.ref({
66960                 Type: 'XObject',
66961                 Subtype: 'Image',
66962                 BitsPerComponent: this.bits,
66963                 Width: this.width,
66964                 Height: this.height,
66965                 ColorSpace: this.colorSpace,
66966                 Filter: 'DCTDecode'
66967               });
66968               if (this.colorSpace === 'DeviceCMYK') {
66969                 this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];
66970               }
66971               this.obj.end(this.data);
66972               return this.data = null;
66973             };
66974
66975             return JPEG;
66976
66977           })();
66978
66979           module.exports = JPEG;
66980
66981         }).call(this);
66982
66983
66984 /***/ },
66985 /* 99 */
66986 /***/ function(module, exports, __webpack_require__) {
66987
66988         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
66989         (function() {
66990           var PNG, PNGImage, zlib;
66991
66992           zlib = __webpack_require__(47);
66993
66994           PNG = __webpack_require__(100);
66995
66996           PNGImage = (function() {
66997             function PNGImage(data, label) {
66998               this.label = label;
66999               this.image = new PNG(data);
67000               this.width = this.image.width;
67001               this.height = this.image.height;
67002               this.imgData = this.image.imgData;
67003               this.obj = null;
67004             }
67005
67006             PNGImage.prototype.embed = function(document) {
67007               var mask, palette, params, rgb, val, x, _i, _len;
67008               this.document = document;
67009               if (this.obj) {
67010                 return;
67011               }
67012               this.obj = document.ref({
67013                 Type: 'XObject',
67014                 Subtype: 'Image',
67015                 BitsPerComponent: this.image.bits,
67016                 Width: this.width,
67017                 Height: this.height,
67018                 Filter: 'FlateDecode'
67019               });
67020               if (!this.image.hasAlphaChannel) {
67021                 params = document.ref({
67022                   Predictor: 15,
67023                   Colors: this.image.colors,
67024                   BitsPerComponent: this.image.bits,
67025                   Columns: this.width
67026                 });
67027                 this.obj.data['DecodeParms'] = params;
67028                 params.end();
67029               }
67030               if (this.image.palette.length === 0) {
67031                 this.obj.data['ColorSpace'] = this.image.colorSpace;
67032               } else {
67033                 palette = document.ref();
67034                 palette.end(new Buffer(this.image.palette));
67035                 this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', (this.image.palette.length / 3) - 1, palette];
67036               }
67037               if (this.image.transparency.grayscale) {
67038                 val = this.image.transparency.greyscale;
67039                 return this.obj.data['Mask'] = [val, val];
67040               } else if (this.image.transparency.rgb) {
67041                 rgb = this.image.transparency.rgb;
67042                 mask = [];
67043                 for (_i = 0, _len = rgb.length; _i < _len; _i++) {
67044                   x = rgb[_i];
67045                   mask.push(x, x);
67046                 }
67047                 return this.obj.data['Mask'] = mask;
67048               } else if (this.image.transparency.indexed) {
67049                 return this.loadIndexedAlphaChannel();
67050               } else if (this.image.hasAlphaChannel) {
67051                 return this.splitAlphaChannel();
67052               } else {
67053                 return this.finalize();
67054               }
67055             };
67056
67057             PNGImage.prototype.finalize = function() {
67058               var sMask;
67059               if (this.alphaChannel) {
67060                 sMask = this.document.ref({
67061                   Type: 'XObject',
67062                   Subtype: 'Image',
67063                   Height: this.height,
67064                   Width: this.width,
67065                   BitsPerComponent: 8,
67066                   Filter: 'FlateDecode',
67067                   ColorSpace: 'DeviceGray',
67068                   Decode: [0, 1]
67069                 });
67070                 sMask.end(this.alphaChannel);
67071                 this.obj.data['SMask'] = sMask;
67072               }
67073               this.obj.end(this.imgData);
67074               this.image = null;
67075               return this.imgData = null;
67076             };
67077
67078             PNGImage.prototype.splitAlphaChannel = function() {
67079               return this.image.decodePixels((function(_this) {
67080                 return function(pixels) {
67081                   var a, alphaChannel, colorByteSize, done, i, imgData, len, p, pixelCount;
67082                   colorByteSize = _this.image.colors * _this.image.bits / 8;
67083                   pixelCount = _this.width * _this.height;
67084                   imgData = new Buffer(pixelCount * colorByteSize);
67085                   alphaChannel = new Buffer(pixelCount);
67086                   i = p = a = 0;
67087                   len = pixels.length;
67088                   while (i < len) {
67089                     imgData[p++] = pixels[i++];
67090                     imgData[p++] = pixels[i++];
67091                     imgData[p++] = pixels[i++];
67092                     alphaChannel[a++] = pixels[i++];
67093                   }
67094                   done = 0;
67095                   zlib.deflate(imgData, function(err, imgData) {
67096                     _this.imgData = imgData;
67097                     if (err) {
67098                       throw err;
67099                     }
67100                     if (++done === 2) {
67101                       return _this.finalize();
67102                     }
67103                   });
67104                   return zlib.deflate(alphaChannel, function(err, alphaChannel) {
67105                     _this.alphaChannel = alphaChannel;
67106                     if (err) {
67107                       throw err;
67108                     }
67109                     if (++done === 2) {
67110                       return _this.finalize();
67111                     }
67112                   });
67113                 };
67114               })(this));
67115             };
67116
67117             PNGImage.prototype.loadIndexedAlphaChannel = function(fn) {
67118               var transparency;
67119               transparency = this.image.transparency.indexed;
67120               return this.image.decodePixels((function(_this) {
67121                 return function(pixels) {
67122                   var alphaChannel, i, j, _i, _ref;
67123                   alphaChannel = new Buffer(_this.width * _this.height);
67124                   i = 0;
67125                   for (j = _i = 0, _ref = pixels.length; _i < _ref; j = _i += 1) {
67126                     alphaChannel[i++] = transparency[pixels[j]];
67127                   }
67128                   return zlib.deflate(alphaChannel, function(err, alphaChannel) {
67129                     _this.alphaChannel = alphaChannel;
67130                     if (err) {
67131                       throw err;
67132                     }
67133                     return _this.finalize();
67134                   });
67135                 };
67136               })(this));
67137             };
67138
67139             return PNGImage;
67140
67141           })();
67142
67143           module.exports = PNGImage;
67144
67145         }).call(this);
67146
67147         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
67148
67149 /***/ },
67150 /* 100 */
67151 /***/ function(module, exports, __webpack_require__) {
67152
67153         /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.4.0
67154
67155         /*
67156         # MIT LICENSE
67157         # Copyright (c) 2011 Devon Govett
67158         # 
67159         # Permission is hereby granted, free of charge, to any person obtaining a copy of this 
67160         # software and associated documentation files (the "Software"), to deal in the Software 
67161         # without restriction, including without limitation the rights to use, copy, modify, merge, 
67162         # publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons 
67163         # to whom the Software is furnished to do so, subject to the following conditions:
67164         # 
67165         # The above copyright notice and this permission notice shall be included in all copies or 
67166         # substantial portions of the Software.
67167         # 
67168         # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING 
67169         # BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
67170         # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
67171         # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
67172         # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
67173         */
67174
67175
67176         (function() {
67177           var PNG, fs, zlib;
67178
67179           fs = __webpack_require__(44);
67180
67181           zlib = __webpack_require__(47);
67182
67183           module.exports = PNG = (function() {
67184
67185             PNG.decode = function(path, fn) {
67186               return fs.readFile(path, function(err, file) {
67187                 var png;
67188                 png = new PNG(file);
67189                 return png.decode(function(pixels) {
67190                   return fn(pixels);
67191                 });
67192               });
67193             };
67194
67195             PNG.load = function(path) {
67196               var file;
67197               file = fs.readFileSync(path);
67198               return new PNG(file);
67199             };
67200
67201             function PNG(data) {
67202               var chunkSize, colors, i, index, key, section, short, text, _i, _j, _ref;
67203               this.data = data;
67204               this.pos = 8;
67205               this.palette = [];
67206               this.imgData = [];
67207               this.transparency = {};
67208               this.text = {};
67209               while (true) {
67210                 chunkSize = this.readUInt32();
67211                 section = ((function() {
67212                   var _i, _results;
67213                   _results = [];
67214                   for (i = _i = 0; _i < 4; i = ++_i) {
67215                     _results.push(String.fromCharCode(this.data[this.pos++]));
67216                   }
67217                   return _results;
67218                 }).call(this)).join('');
67219                 switch (section) {
67220                   case 'IHDR':
67221                     this.width = this.readUInt32();
67222                     this.height = this.readUInt32();
67223                     this.bits = this.data[this.pos++];
67224                     this.colorType = this.data[this.pos++];
67225                     this.compressionMethod = this.data[this.pos++];
67226                     this.filterMethod = this.data[this.pos++];
67227                     this.interlaceMethod = this.data[this.pos++];
67228                     break;
67229                   case 'PLTE':
67230                     this.palette = this.read(chunkSize);
67231                     break;
67232                   case 'IDAT':
67233                     for (i = _i = 0; _i < chunkSize; i = _i += 1) {
67234                       this.imgData.push(this.data[this.pos++]);
67235                     }
67236                     break;
67237                   case 'tRNS':
67238                     this.transparency = {};
67239                     switch (this.colorType) {
67240                       case 3:
67241                         this.transparency.indexed = this.read(chunkSize);
67242                         short = 255 - this.transparency.indexed.length;
67243                         if (short > 0) {
67244                           for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) {
67245                             this.transparency.indexed.push(255);
67246                           }
67247                         }
67248                         break;
67249                       case 0:
67250                         this.transparency.grayscale = this.read(chunkSize)[0];
67251                         break;
67252                       case 2:
67253                         this.transparency.rgb = this.read(chunkSize);
67254                     }
67255                     break;
67256                   case 'tEXt':
67257                     text = this.read(chunkSize);
67258                     index = text.indexOf(0);
67259                     key = String.fromCharCode.apply(String, text.slice(0, index));
67260                     this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));
67261                     break;
67262                   case 'IEND':
67263                     this.colors = (function() {
67264                       switch (this.colorType) {
67265                         case 0:
67266                         case 3:
67267                         case 4:
67268                           return 1;
67269                         case 2:
67270                         case 6:
67271                           return 3;
67272                       }
67273                     }).call(this);
67274                     this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;
67275                     colors = this.colors + (this.hasAlphaChannel ? 1 : 0);
67276                     this.pixelBitlength = this.bits * colors;
67277                     this.colorSpace = (function() {
67278                       switch (this.colors) {
67279                         case 1:
67280                           return 'DeviceGray';
67281                         case 3:
67282                           return 'DeviceRGB';
67283                       }
67284                     }).call(this);
67285                     this.imgData = new Buffer(this.imgData);
67286                     return;
67287                   default:
67288                     this.pos += chunkSize;
67289                 }
67290                 this.pos += 4;
67291                 if (this.pos > this.data.length) {
67292                   throw new Error("Incomplete or corrupt PNG file");
67293                 }
67294               }
67295               return;
67296             }
67297
67298             PNG.prototype.read = function(bytes) {
67299               var i, _i, _results;
67300               _results = [];
67301               for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
67302                 _results.push(this.data[this.pos++]);
67303               }
67304               return _results;
67305             };
67306
67307             PNG.prototype.readUInt32 = function() {
67308               var b1, b2, b3, b4;
67309               b1 = this.data[this.pos++] << 24;
67310               b2 = this.data[this.pos++] << 16;
67311               b3 = this.data[this.pos++] << 8;
67312               b4 = this.data[this.pos++];
67313               return b1 | b2 | b3 | b4;
67314             };
67315
67316             PNG.prototype.readUInt16 = function() {
67317               var b1, b2;
67318               b1 = this.data[this.pos++] << 8;
67319               b2 = this.data[this.pos++];
67320               return b1 | b2;
67321             };
67322
67323             PNG.prototype.decodePixels = function(fn) {
67324               var _this = this;
67325               return zlib.inflate(this.imgData, function(err, data) {
67326                 var byte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m;
67327                 if (err) {
67328                   throw err;
67329                 }
67330                 pixelBytes = _this.pixelBitlength / 8;
67331                 scanlineLength = pixelBytes * _this.width;
67332                 pixels = new Buffer(scanlineLength * _this.height);
67333                 length = data.length;
67334                 row = 0;
67335                 pos = 0;
67336                 c = 0;
67337                 while (pos < length) {
67338                   switch (data[pos++]) {
67339                     case 0:
67340                       for (i = _i = 0; _i < scanlineLength; i = _i += 1) {
67341                         pixels[c++] = data[pos++];
67342                       }
67343                       break;
67344                     case 1:
67345                       for (i = _j = 0; _j < scanlineLength; i = _j += 1) {
67346                         byte = data[pos++];
67347                         left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
67348                         pixels[c++] = (byte + left) % 256;
67349                       }
67350                       break;
67351                     case 2:
67352                       for (i = _k = 0; _k < scanlineLength; i = _k += 1) {
67353                         byte = data[pos++];
67354                         col = (i - (i % pixelBytes)) / pixelBytes;
67355                         upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
67356                         pixels[c++] = (upper + byte) % 256;
67357                       }
67358                       break;
67359                     case 3:
67360                       for (i = _l = 0; _l < scanlineLength; i = _l += 1) {
67361                         byte = data[pos++];
67362                         col = (i - (i % pixelBytes)) / pixelBytes;
67363                         left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
67364                         upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
67365                         pixels[c++] = (byte + Math.floor((left + upper) / 2)) % 256;
67366                       }
67367                       break;
67368                     case 4:
67369                       for (i = _m = 0; _m < scanlineLength; i = _m += 1) {
67370                         byte = data[pos++];
67371                         col = (i - (i % pixelBytes)) / pixelBytes;
67372                         left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
67373                         if (row === 0) {
67374                           upper = upperLeft = 0;
67375                         } else {
67376                           upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
67377                           upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + (i % pixelBytes)];
67378                         }
67379                         p = left + upper - upperLeft;
67380                         pa = Math.abs(p - left);
67381                         pb = Math.abs(p - upper);
67382                         pc = Math.abs(p - upperLeft);
67383                         if (pa <= pb && pa <= pc) {
67384                           paeth = left;
67385                         } else if (pb <= pc) {
67386                           paeth = upper;
67387                         } else {
67388                           paeth = upperLeft;
67389                         }
67390                         pixels[c++] = (byte + paeth) % 256;
67391                       }
67392                       break;
67393                     default:
67394                       throw new Error("Invalid filter algorithm: " + data[pos - 1]);
67395                   }
67396                   row++;
67397                 }
67398                 return fn(pixels);
67399               });
67400             };
67401
67402             PNG.prototype.decodePalette = function() {
67403               var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;
67404               palette = this.palette;
67405               transparency = this.transparency.indexed || [];
67406               ret = new Buffer(transparency.length + palette.length);
67407               pos = 0;
67408               length = palette.length;
67409               c = 0;
67410               for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) {
67411                 ret[pos++] = palette[i];
67412                 ret[pos++] = palette[i + 1];
67413                 ret[pos++] = palette[i + 2];
67414                 ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;
67415               }
67416               return ret;
67417             };
67418
67419             PNG.prototype.copyToImageData = function(imageData, pixels) {
67420               var alpha, colors, data, i, input, j, k, length, palette, v, _ref;
67421               colors = this.colors;
67422               palette = null;
67423               alpha = this.hasAlphaChannel;
67424               if (this.palette.length) {
67425                 palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette();
67426                 colors = 4;
67427                 alpha = true;
67428               }
67429               data = (imageData != null ? imageData.data : void 0) || imageData;
67430               length = data.length;
67431               input = palette || pixels;
67432               i = j = 0;
67433               if (colors === 1) {
67434                 while (i < length) {
67435                   k = palette ? pixels[i / 4] * 4 : j;
67436                   v = input[k++];
67437                   data[i++] = v;
67438                   data[i++] = v;
67439                   data[i++] = v;
67440                   data[i++] = alpha ? input[k++] : 255;
67441                   j = k;
67442                 }
67443               } else {
67444                 while (i < length) {
67445                   k = palette ? pixels[i / 4] * 4 : j;
67446                   data[i++] = input[k++];
67447                   data[i++] = input[k++];
67448                   data[i++] = input[k++];
67449                   data[i++] = alpha ? input[k++] : 255;
67450                   j = k;
67451                 }
67452               }
67453             };
67454
67455             PNG.prototype.decode = function(fn) {
67456               var ret,
67457                 _this = this;
67458               ret = new Buffer(this.width * this.height * 4);
67459               return this.decodePixels(function(pixels) {
67460                 _this.copyToImageData(ret, pixels);
67461                 return fn(ret);
67462               });
67463             };
67464
67465             return PNG;
67466
67467           })();
67468
67469         }).call(this);
67470
67471         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
67472
67473 /***/ },
67474 /* 101 */
67475 /***/ function(module, exports) {
67476
67477         // Generated by CoffeeScript 1.7.1
67478         (function() {
67479           module.exports = {
67480             annotate: function(x, y, w, h, options) {
67481               var key, ref, val;
67482               options.Type = 'Annot';
67483               options.Rect = this._convertRect(x, y, w, h);
67484               options.Border = [0, 0, 0];
67485               if (options.Subtype !== 'Link') {
67486                 if (options.C == null) {
67487                   options.C = this._normalizeColor(options.color || [0, 0, 0]);
67488                 }
67489               }
67490               delete options.color;
67491               if (typeof options.Dest === 'string') {
67492                 options.Dest = new String(options.Dest);
67493               }
67494               for (key in options) {
67495                 val = options[key];
67496                 options[key[0].toUpperCase() + key.slice(1)] = val;
67497               }
67498               ref = this.ref(options);
67499               this.page.annotations.push(ref);
67500               ref.end();
67501               return this;
67502             },
67503             note: function(x, y, w, h, contents, options) {
67504               if (options == null) {
67505                 options = {};
67506               }
67507               options.Subtype = 'Text';
67508               options.Contents = new String(contents);
67509               options.Name = 'Comment';
67510               if (options.color == null) {
67511                 options.color = [243, 223, 92];
67512               }
67513               return this.annotate(x, y, w, h, options);
67514             },
67515             link: function(x, y, w, h, url, options) {
67516               if (options == null) {
67517                 options = {};
67518               }
67519               options.Subtype = 'Link';
67520               options.A = this.ref({
67521                 S: 'URI',
67522                 URI: new String(url)
67523               });
67524               options.A.end();
67525               return this.annotate(x, y, w, h, options);
67526             },
67527             _markup: function(x, y, w, h, options) {
67528               var x1, x2, y1, y2, _ref;
67529               if (options == null) {
67530                 options = {};
67531               }
67532               _ref = this._convertRect(x, y, w, h), x1 = _ref[0], y1 = _ref[1], x2 = _ref[2], y2 = _ref[3];
67533               options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];
67534               options.Contents = new String;
67535               return this.annotate(x, y, w, h, options);
67536             },
67537             highlight: function(x, y, w, h, options) {
67538               if (options == null) {
67539                 options = {};
67540               }
67541               options.Subtype = 'Highlight';
67542               if (options.color == null) {
67543                 options.color = [241, 238, 148];
67544               }
67545               return this._markup(x, y, w, h, options);
67546             },
67547             underline: function(x, y, w, h, options) {
67548               if (options == null) {
67549                 options = {};
67550               }
67551               options.Subtype = 'Underline';
67552               return this._markup(x, y, w, h, options);
67553             },
67554             strike: function(x, y, w, h, options) {
67555               if (options == null) {
67556                 options = {};
67557               }
67558               options.Subtype = 'StrikeOut';
67559               return this._markup(x, y, w, h, options);
67560             },
67561             lineAnnotation: function(x1, y1, x2, y2, options) {
67562               if (options == null) {
67563                 options = {};
67564               }
67565               options.Subtype = 'Line';
67566               options.Contents = new String;
67567               options.L = [x1, this.page.height - y1, x2, this.page.height - y2];
67568               return this.annotate(x1, y1, x2, y2, options);
67569             },
67570             rectAnnotation: function(x, y, w, h, options) {
67571               if (options == null) {
67572                 options = {};
67573               }
67574               options.Subtype = 'Square';
67575               options.Contents = new String;
67576               return this.annotate(x, y, w, h, options);
67577             },
67578             ellipseAnnotation: function(x, y, w, h, options) {
67579               if (options == null) {
67580                 options = {};
67581               }
67582               options.Subtype = 'Circle';
67583               options.Contents = new String;
67584               return this.annotate(x, y, w, h, options);
67585             },
67586             textAnnotation: function(x, y, w, h, text, options) {
67587               if (options == null) {
67588                 options = {};
67589               }
67590               options.Subtype = 'FreeText';
67591               options.Contents = new String(text);
67592               options.DA = new String;
67593               return this.annotate(x, y, w, h, options);
67594             },
67595             _convertRect: function(x1, y1, w, h) {
67596               var m0, m1, m2, m3, m4, m5, x2, y2, _ref;
67597               y2 = y1;
67598               y1 += h;
67599               x2 = x1 + w;
67600               _ref = this._ctm, m0 = _ref[0], m1 = _ref[1], m2 = _ref[2], m3 = _ref[3], m4 = _ref[4], m5 = _ref[5];
67601               x1 = m0 * x1 + m2 * y1 + m4;
67602               y1 = m1 * x1 + m3 * y1 + m5;
67603               x2 = m0 * x2 + m2 * y2 + m4;
67604               y2 = m1 * x2 + m3 * y2 + m5;
67605               return [x1, y1, x2, y2];
67606             }
67607           };
67608
67609         }).call(this);
67610
67611
67612 /***/ },
67613 /* 102 */
67614 /***/ function(module, exports) {
67615
67616         module.exports = {
67617                 '4A0': [4767.87, 6740.79],
67618                 '2A0': [3370.39, 4767.87],
67619                 A0: [2383.94, 3370.39],
67620                 A1: [1683.78, 2383.94],
67621                 A2: [1190.55, 1683.78],
67622                 A3: [841.89, 1190.55],
67623                 A4: [595.28, 841.89],
67624                 A5: [419.53, 595.28],
67625                 A6: [297.64, 419.53],
67626                 A7: [209.76, 297.64],
67627                 A8: [147.40, 209.76],
67628                 A9: [104.88, 147.40],
67629                 A10: [73.70, 104.88],
67630                 B0: [2834.65, 4008.19],
67631                 B1: [2004.09, 2834.65],
67632                 B2: [1417.32, 2004.09],
67633                 B3: [1000.63, 1417.32],
67634                 B4: [708.66, 1000.63],
67635                 B5: [498.90, 708.66],
67636                 B6: [354.33, 498.90],
67637                 B7: [249.45, 354.33],
67638                 B8: [175.75, 249.45],
67639                 B9: [124.72, 175.75],
67640                 B10: [87.87, 124.72],
67641                 C0: [2599.37, 3676.54],
67642                 C1: [1836.85, 2599.37],
67643                 C2: [1298.27, 1836.85],
67644                 C3: [918.43, 1298.27],
67645                 C4: [649.13, 918.43],
67646                 C5: [459.21, 649.13],
67647                 C6: [323.15, 459.21],
67648                 C7: [229.61, 323.15],
67649                 C8: [161.57, 229.61],
67650                 C9: [113.39, 161.57],
67651                 C10: [79.37, 113.39],
67652                 RA0: [2437.80, 3458.27],
67653                 RA1: [1729.13, 2437.80],
67654                 RA2: [1218.90, 1729.13],
67655                 RA3: [864.57, 1218.90],
67656                 RA4: [609.45, 864.57],
67657                 SRA0: [2551.18, 3628.35],
67658                 SRA1: [1814.17, 2551.18],
67659                 SRA2: [1275.59, 1814.17],
67660                 SRA3: [907.09, 1275.59],
67661                 SRA4: [637.80, 907.09],
67662                 EXECUTIVE: [521.86, 756.00],
67663                 FOLIO: [612.00, 936.00],
67664                 LEGAL: [612.00, 1008.00],
67665                 LETTER: [612.00, 792.00],
67666                 TABLOID: [792.00, 1224.00]
67667         };
67668
67669
67670 /***/ },
67671 /* 103 */
67672 /***/ function(module, exports, __webpack_require__) {
67673
67674         /* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */
67675         'use strict';
67676
67677         var pdfKit = __webpack_require__(24);
67678         var PDFImage = __webpack_require__(97);
67679
67680         function ImageMeasure(pdfDoc, imageDictionary) {
67681                 this.pdfDoc = pdfDoc;
67682                 this.imageDictionary = imageDictionary || {};
67683         }
67684
67685         ImageMeasure.prototype.measureImage = function(src) {
67686                 var image, label;
67687                 var that = this;
67688
67689                 if (!this.pdfDoc._imageRegistry[src]) {
67690                         label = 'I' + (++this.pdfDoc._imageCount);
67691                         image = PDFImage.open(realImageSrc(src), label);
67692                         image.embed(this.pdfDoc);
67693                         this.pdfDoc._imageRegistry[src] = image;
67694                 } else {
67695                         image = this.pdfDoc._imageRegistry[src];
67696                 }
67697
67698                 return { width: image.width, height: image.height };
67699
67700                 function realImageSrc(src) {
67701                         var img = that.imageDictionary[src];
67702
67703                         if (!img) return src;
67704
67705                         var index = img.indexOf('base64,');
67706                         if (index < 0) {
67707                                 throw 'invalid image format, images dictionary should contain dataURL entries';
67708                         }
67709
67710                         return new Buffer(img.substring(index + 7), 'base64');
67711                 }
67712         };
67713
67714         module.exports = ImageMeasure;
67715
67716         /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
67717
67718 /***/ },
67719 /* 104 */
67720 /***/ function(module, exports) {
67721
67722         /* jslint node: true */
67723         'use strict';
67724
67725
67726         function groupDecorations(line) {
67727                 var groups = [], curGroup = null;
67728                 for(var i = 0, l = line.inlines.length; i < l; i++) {
67729                         var inline = line.inlines[i];
67730                         var decoration = inline.decoration;
67731                         if(!decoration) {
67732                                 curGroup = null;
67733                                 continue;
67734                         }
67735                         var color = inline.decorationColor || inline.color || 'black';
67736                         var style = inline.decorationStyle || 'solid';
67737                         decoration = Array.isArray(decoration) ? decoration : [ decoration ];
67738                         for(var ii = 0, ll = decoration.length; ii < ll; ii++) {
67739                                 var deco = decoration[ii];
67740                                 if(!curGroup || deco !== curGroup.decoration ||
67741                                                 style !== curGroup.decorationStyle || color !== curGroup.decorationColor ||
67742                                                 deco === 'lineThrough') {
67743                         
67744                                         curGroup = {
67745                                                 line: line,
67746                                                 decoration: deco, 
67747                                                 decorationColor: color, 
67748                                                 decorationStyle: style,
67749                                                 inlines: [ inline ]
67750                                         };
67751                                         groups.push(curGroup);
67752                                 } else {
67753                                         curGroup.inlines.push(inline);
67754                                 }
67755                         }
67756                 }
67757                 
67758                 return groups;
67759         }
67760
67761         function drawDecoration(group, x, y, pdfKitDoc) {
67762                 function maxInline() {
67763                         var max = 0;
67764                         for (var i = 0, l = group.inlines.length; i < l; i++) {
67765                                 var inl = group.inlines[i];
67766                                 max = inl.fontSize > max ? i : max;
67767                         }
67768                         return group.inlines[max];
67769                 }
67770                 function width() {
67771                         var sum = 0;
67772                         for (var i = 0, l = group.inlines.length; i < l; i++) {
67773                                 sum += group.inlines[i].width;
67774                         }
67775                         return sum;
67776                 }
67777                 var firstInline = group.inlines[0],
67778                         biggerInline = maxInline(),
67779                         totalWidth = width(),
67780                         lineAscent = group.line.getAscenderHeight(),
67781                         ascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,
67782                         height = biggerInline.height,
67783                         descent = height - ascent;
67784                 
67785                 var lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;
67786                 
67787                 switch (group.decoration) {
67788                         case 'underline':
67789                                 y += lineAscent + descent * 0.45;
67790                                 break;
67791                         case 'overline':
67792                                 y += lineAscent - (ascent * 0.85);
67793                                 break;
67794                         case 'lineThrough':
67795                                 y += lineAscent - (ascent * 0.25);
67796                                 break;
67797                         default:
67798                                 throw 'Unkown decoration : ' + group.decoration;
67799                 }
67800                 pdfKitDoc.save();
67801                 
67802                 if(group.decorationStyle === 'double') {
67803                         var gap = Math.max(0.5, lw*2);
67804                         pdfKitDoc       .fillColor(group.decorationColor)
67805                                                 .rect(x + firstInline.x, y-lw/2, totalWidth, lw/2).fill()
67806                                                 .rect(x + firstInline.x, y+gap-lw/2, totalWidth, lw/2).fill();
67807                 } else if(group.decorationStyle === 'dashed') {
67808                         var nbDashes = Math.ceil(totalWidth / (3.96+2.84));
67809                         var rdx = x + firstInline.x;
67810                         pdfKitDoc.rect(rdx, y, totalWidth, lw).clip();
67811                         pdfKitDoc.fillColor(group.decorationColor);
67812                         for (var i = 0; i < nbDashes; i++) {
67813                                 pdfKitDoc.rect(rdx, y-lw/2, 3.96, lw).fill();
67814                                 rdx += 3.96 + 2.84;
67815                         }
67816                 } else if(group.decorationStyle === 'dotted') {
67817                         var nbDots = Math.ceil(totalWidth / (lw*3));
67818                         var rx = x + firstInline.x;
67819                         pdfKitDoc.rect(rx, y, totalWidth, lw).clip();
67820                         pdfKitDoc.fillColor(group.decorationColor);
67821                         for (var ii = 0; ii < nbDots; ii++) {
67822                                 pdfKitDoc.rect(rx, y-lw/2, lw, lw).fill();
67823                                 rx += (lw*3);
67824                         }
67825                 } else if(group.decorationStyle === 'wavy') {
67826                         var sh = 0.7, sv = 1;
67827                         var nbWaves = Math.ceil(totalWidth / (sh*2))+1;
67828                         var rwx = x + firstInline.x - 1;
67829                         pdfKitDoc.rect(x + firstInline.x, y-sv, totalWidth, y+sv).clip();
67830                         pdfKitDoc.lineWidth(0.24);
67831                         pdfKitDoc.moveTo(rwx, y);
67832                         for(var iii = 0; iii < nbWaves; iii++) {
67833                                 pdfKitDoc   .bezierCurveTo(rwx+sh, y-sv, rwx+sh*2, y-sv, rwx+sh*3, y)
67834                                                         .bezierCurveTo(rwx+sh*4, y+sv, rwx+sh*5, y+sv, rwx+sh*6, y);
67835                                         rwx += sh*6;
67836                                 }
67837                         pdfKitDoc.stroke(group.decorationColor);
67838                         
67839                 } else {
67840                         pdfKitDoc       .fillColor(group.decorationColor)
67841                                                 .rect(x + firstInline.x, y-lw/2, totalWidth, lw)
67842                                                 .fill();
67843                 }
67844                 pdfKitDoc.restore();
67845         }
67846
67847         function drawDecorations(line, x, y, pdfKitDoc) {
67848                 var groups = groupDecorations(line);
67849                 for (var i = 0, l = groups.length; i < l; i++) {
67850                         drawDecoration(groups[i], x, y, pdfKitDoc);
67851                 }
67852         }
67853
67854         function drawBackground(line, x, y, pdfKitDoc) {
67855                 var height = line.getHeight();
67856                 for(var i = 0, l = line.inlines.length; i < l; i++) {
67857                         var inline = line.inlines[i];
67858                                 if(inline.background) {
67859                                         pdfKitDoc       .fillColor(inline.background)
67860                                                                 .rect(x + inline.x, y, inline.width, height)
67861                                                                 .fill();
67862                                 }
67863                 }
67864         }
67865
67866         module.exports = {
67867                 drawBackground: drawBackground,
67868                 drawDecorations: drawDecorations
67869         };
67870
67871 /***/ },
67872 /* 105 */
67873 /***/ function(module, exports, __webpack_require__) {
67874
67875         var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js
67876          * A saveAs() FileSaver implementation.
67877          * 1.1.20150716
67878          *
67879          * By Eli Grey, http://eligrey.com
67880          * License: X11/MIT
67881          *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
67882          */
67883
67884         /*global self */
67885         /*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
67886
67887         /*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
67888
67889         var saveAs = saveAs || (function(view) {
67890                 "use strict";
67891                 // IE <10 is explicitly unsupported
67892                 if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
67893                         return;
67894                 }
67895                 var
67896                           doc = view.document
67897                           // only get URL when necessary in case Blob.js hasn't overridden it yet
67898                         , get_URL = function() {
67899                                 return view.URL || view.webkitURL || view;
67900                         }
67901                         , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
67902                         , can_use_save_link = "download" in save_link
67903                         , click = function(node) {
67904                                 var event = new MouseEvent("click");
67905                                 node.dispatchEvent(event);
67906                         }
67907                         , webkit_req_fs = view.webkitRequestFileSystem
67908                         , req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
67909                         , throw_outside = function(ex) {
67910                                 (view.setImmediate || view.setTimeout)(function() {
67911                                         throw ex;
67912                                 }, 0);
67913                         }
67914                         , force_saveable_type = "application/octet-stream"
67915                         , fs_min_size = 0
67916                         // See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and
67917                         // https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047
67918                         // for the reasoning behind the timeout and revocation flow
67919                         , arbitrary_revoke_timeout = 500 // in ms
67920                         , revoke = function(file) {
67921                                 var revoker = function() {
67922                                         if (typeof file === "string") { // file is an object URL
67923                                                 get_URL().revokeObjectURL(file);
67924                                         } else { // file is a File
67925                                                 file.remove();
67926                                         }
67927                                 };
67928                                 if (view.chrome) {
67929                                         revoker();
67930                                 } else {
67931                                         setTimeout(revoker, arbitrary_revoke_timeout);
67932                                 }
67933                         }
67934                         , dispatch = function(filesaver, event_types, event) {
67935                                 event_types = [].concat(event_types);
67936                                 var i = event_types.length;
67937                                 while (i--) {
67938                                         var listener = filesaver["on" + event_types[i]];
67939                                         if (typeof listener === "function") {
67940                                                 try {
67941                                                         listener.call(filesaver, event || filesaver);
67942                                                 } catch (ex) {
67943                                                         throw_outside(ex);
67944                                                 }
67945                                         }
67946                                 }
67947                         }
67948                         , auto_bom = function(blob) {
67949                                 // prepend BOM for UTF-8 XML and text/* types (including HTML)
67950                                 if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
67951                                         return new Blob(["\ufeff", blob], {type: blob.type});
67952                                 }
67953                                 return blob;
67954                         }
67955                         , FileSaver = function(blob, name, no_auto_bom) {
67956                                 if (!no_auto_bom) {
67957                                         blob = auto_bom(blob);
67958                                 }
67959                                 // First try a.download, then web filesystem, then object URLs
67960                                 var
67961                                           filesaver = this
67962                                         , type = blob.type
67963                                         , blob_changed = false
67964                                         , object_url
67965                                         , target_view
67966                                         , dispatch_all = function() {
67967                                                 dispatch(filesaver, "writestart progress write writeend".split(" "));
67968                                         }
67969                                         // on any filesys errors revert to saving with object URLs
67970                                         , fs_error = function() {
67971                                                 // don't create more object URLs than needed
67972                                                 if (blob_changed || !object_url) {
67973                                                         object_url = get_URL().createObjectURL(blob);
67974                                                 }
67975                                                 if (target_view) {
67976                                                         target_view.location.href = object_url;
67977                                                 } else {
67978                                                         var new_tab = view.open(object_url, "_blank");
67979                                                         if (new_tab == undefined && typeof safari !== "undefined") {
67980                                                                 //Apple do not allow window.open, see http://bit.ly/1kZffRI
67981                                                                 view.location.href = object_url
67982                                                         }
67983                                                 }
67984                                                 filesaver.readyState = filesaver.DONE;
67985                                                 dispatch_all();
67986                                                 revoke(object_url);
67987                                         }
67988                                         , abortable = function(func) {
67989                                                 return function() {
67990                                                         if (filesaver.readyState !== filesaver.DONE) {
67991                                                                 return func.apply(this, arguments);
67992                                                         }
67993                                                 };
67994                                         }
67995                                         , create_if_not_found = {create: true, exclusive: false}
67996                                         , slice
67997                                 ;
67998                                 filesaver.readyState = filesaver.INIT;
67999                                 if (!name) {
68000                                         name = "download";
68001                                 }
68002                                 if (can_use_save_link) {
68003                                         object_url = get_URL().createObjectURL(blob);
68004                                         save_link.href = object_url;
68005                                         save_link.download = name;
68006                                         setTimeout(function() {
68007                                                 click(save_link);
68008                                                 dispatch_all();
68009                                                 revoke(object_url);
68010                                                 filesaver.readyState = filesaver.DONE;
68011                                         });
68012                                         return;
68013                                 }
68014                                 // Object and web filesystem URLs have a problem saving in Google Chrome when
68015                                 // viewed in a tab, so I force save with application/octet-stream
68016                                 // http://code.google.com/p/chromium/issues/detail?id=91158
68017                                 // Update: Google errantly closed 91158, I submitted it again:
68018                                 // https://code.google.com/p/chromium/issues/detail?id=389642
68019                                 if (view.chrome && type && type !== force_saveable_type) {
68020                                         slice = blob.slice || blob.webkitSlice;
68021                                         blob = slice.call(blob, 0, blob.size, force_saveable_type);
68022                                         blob_changed = true;
68023                                 }
68024                                 // Since I can't be sure that the guessed media type will trigger a download
68025                                 // in WebKit, I append .download to the filename.
68026                                 // https://bugs.webkit.org/show_bug.cgi?id=65440
68027                                 if (webkit_req_fs && name !== "download") {
68028                                         name += ".download";
68029                                 }
68030                                 if (type === force_saveable_type || webkit_req_fs) {
68031                                         target_view = view;
68032                                 }
68033                                 if (!req_fs) {
68034                                         fs_error();
68035                                         return;
68036                                 }
68037                                 fs_min_size += blob.size;
68038                                 req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
68039                                         fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
68040                                                 var save = function() {
68041                                                         dir.getFile(name, create_if_not_found, abortable(function(file) {
68042                                                                 file.createWriter(abortable(function(writer) {
68043                                                                         writer.onwriteend = function(event) {
68044                                                                                 target_view.location.href = file.toURL();
68045                                                                                 filesaver.readyState = filesaver.DONE;
68046                                                                                 dispatch(filesaver, "writeend", event);
68047                                                                                 revoke(file);
68048                                                                         };
68049                                                                         writer.onerror = function() {
68050                                                                                 var error = writer.error;
68051                                                                                 if (error.code !== error.ABORT_ERR) {
68052                                                                                         fs_error();
68053                                                                                 }
68054                                                                         };
68055                                                                         "writestart progress write abort".split(" ").forEach(function(event) {
68056                                                                                 writer["on" + event] = filesaver["on" + event];
68057                                                                         });
68058                                                                         writer.write(blob);
68059                                                                         filesaver.abort = function() {
68060                                                                                 writer.abort();
68061                                                                                 filesaver.readyState = filesaver.DONE;
68062                                                                         };
68063                                                                         filesaver.readyState = filesaver.WRITING;
68064                                                                 }), fs_error);
68065                                                         }), fs_error);
68066                                                 };
68067                                                 dir.getFile(name, {create: false}, abortable(function(file) {
68068                                                         // delete file if it already exists
68069                                                         file.remove();
68070                                                         save();
68071                                                 }), abortable(function(ex) {
68072                                                         if (ex.code === ex.NOT_FOUND_ERR) {
68073                                                                 save();
68074                                                         } else {
68075                                                                 fs_error();
68076                                                         }
68077                                                 }));
68078                                         }), fs_error);
68079                                 }), fs_error);
68080                         }
68081                         , FS_proto = FileSaver.prototype
68082                         , saveAs = function(blob, name, no_auto_bom) {
68083                                 return new FileSaver(blob, name, no_auto_bom);
68084                         }
68085                 ;
68086                 // IE 10+ (native saveAs)
68087                 if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
68088                         return function(blob, name, no_auto_bom) {
68089                                 if (!no_auto_bom) {
68090                                         blob = auto_bom(blob);
68091                                 }
68092                                 return navigator.msSaveOrOpenBlob(blob, name || "download");
68093                         };
68094                 }
68095
68096                 FS_proto.abort = function() {
68097                         var filesaver = this;
68098                         filesaver.readyState = filesaver.DONE;
68099                         dispatch(filesaver, "abort");
68100                 };
68101                 FS_proto.readyState = FS_proto.INIT = 0;
68102                 FS_proto.WRITING = 1;
68103                 FS_proto.DONE = 2;
68104
68105                 FS_proto.error =
68106                 FS_proto.onwritestart =
68107                 FS_proto.onprogress =
68108                 FS_proto.onwrite =
68109                 FS_proto.onabort =
68110                 FS_proto.onerror =
68111                 FS_proto.onwriteend =
68112                         null;
68113
68114                 return saveAs;
68115         }(
68116                    typeof self !== "undefined" && self
68117                 || typeof window !== "undefined" && window
68118                 || this.content
68119         ));
68120         // `self` is undefined in Firefox for Android content script context
68121         // while `this` is nsIContentFrameMessageManager
68122         // with an attribute `content` that corresponds to the window
68123
68124         if (typeof module !== "undefined" && module.exports) {
68125           module.exports.saveAs = saveAs;
68126         } else if (("function" !== "undefined" && __webpack_require__(106) !== null) && (__webpack_require__(107) != null)) {
68127           !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
68128             return saveAs;
68129           }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
68130         }
68131
68132
68133 /***/ },
68134 /* 106 */
68135 /***/ function(module, exports) {
68136
68137         module.exports = function() { throw new Error("define cannot be used indirect"); };
68138
68139
68140 /***/ },
68141 /* 107 */
68142 /***/ function(module, exports) {
68143
68144 (function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
68145
68146 }.call(exports, {}))
68147
68148  }
68149  ]);