{"version":3,"sources":["webpack:///./node_modules/@progress/kendo-ui/js/pdf/mixins.js","webpack:///./node_modules/@progress/kendo-ui/js/pdf/pako.js","webpack:///./node_modules/@progress/kendo-ui/js/pdf/core.js"],"names":["module","exports","modules","installedModules","__webpack_require__","moduleId","id","loaded","call","m","c","p","0","3","Error","1609","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","f","define","apply","undefined","$","kendo","PDFMixin","extend","proto","events","push","options","pdf","this","saveAsPDF","_drawPDF","_drawPDFShadow","fileName","proxyURL","paperSize","allPages","landscape","margin","title","author","subject","keywords","creator","version","date","progress","Deferred","promise","args","trigger","multiPage","then","root","drawing","exportPDF","done","dataURI","saveAs","forceProxy","proxyTarget","resolve","fail","err","reject","drawDOM","wrapper","group","page","pageNumber","totalPages","notify","settings","drawOptions","shadow","width","css","overflow","before","append","content","clone","defer","setTimeout","always","remove","arguments","window","jQuery","1610","20","1611","supportsDeflate","pako","deflate","data","956","1606","support","supportBrowser","browser","util","extendStatic","kendoPdf","kendoGeometry","geometry","HAS_TYPED_ARRAYS","Uint8Array","msie","BASE64","keyStr","decode","str","input","replace","i","n","length","output","enc1","indexOf","charAt","enc2","enc3","enc4","chr1","chr2","chr3","encode","bytes","BinaryStream","offset","ensure","len","tmp","Math","max","set","get","buffer","write","writeString","writeByte","slice","start","x","eof","readByte","b","readShort","writeShort","w","readShort_","writeShort_","readLong","writeLong","readLong_","writeLong_","readFixed","writeFixed","round","readFixed_","writeFixed_","read","times","readString","String","fromCharCode","charCodeAt","reader","ret","Array","stream","pos","skip","nbytes","toString","saveExcursion","writeBase64","base64","atob","ucs2decode","string","value","extra","counter","ucs2encode","array","map","join","atobUint8Array","result","idx","createUint8Array","base64ToUint8Array","hasOwnProperty$1","obj","key","Object","prototype","hasOwnProperty","sortedKeys","keys","sort","a","parseFloat","Directory","raw","scalerType","tableCount","searchRange","entrySelector","rangeShift","tables","entry","tag","checksum","readTable","name","Ctor","def","table","render","this$1","maxpow2","pow","floor","log","LN2","out","directoryLength","headOffset","tableData","sum","adjustment","Table","file","definition","rawData","parse","HeadTable","create","constructor","fn","init","revision","checkSumAdjustment","magicNumber","flags","unitsPerEm","created","modified","xMin","yMin","xMax","yMax","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","LocaTable","format","head","offsets","offsetOf","lengthOf","needsLongFormat","HheaTable","ascent","descent","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numOfLongHorMetrics","ids","MaxpTable","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","glyphIds","HmtxTable","dir","hhea","metrics","advance","lsb","lsbCount","maxp","leftSideBearings","forGlyph","GlyfTable","SimpleGlyph","prototypeAccessors","compound","defineProperties","ARG_1_AND_2_ARE_WORDS","WE_HAVE_A_SCALE","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_TWO_BY_TWO","CompoundGlyph","idOffsets","prototypeAccessors$1","old2new","anonymous","cache","glyphFor","loca","numberOfContours","glyph","glyphs","oldIds","NameTable","NameEntry","text","platformID","platformSpecificID","languageID","nameID","count","stringOffset","nameRecords","strings","rec","postscriptEntry","postscriptName","psName","strCount","strTable","list","j","PostTable","POSTSCRIPT_GLYPHS","split","numberOfGlyphs","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","limit","code","index","mapping","indexes","post","CmapTable","CmapEntry","codeMap","self","language","segCount","endCode","startCode","idDelta","idRangeOffset","end","glyphId","ngroups","endCharCode","glyphCode","console","error","renderCharmap","ncid2ogid","ogid2ngid","codes","startCodes","endCodes","last","diff","new_gid","charcode","gid","delta","segCountX2","deltas","rangeOffsets","startGlyph","forEach","OS2Table","averageCharWidth","weightClass","widthClass","type","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","familyClass","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","winAscent","winDescent","codePageRange","xHeight","capHeight","defaultChar","breakChar","maxContext","subsetTag","nextSubsetTag","Subfont","font","subset","unicodes","ngid2ogid","next","firstChar","nextGid","use","ch","reduce","old_gid","cmap","encodeText","glyphsFor","glyf","parseInt","new_gid_ids","old_gid_ids","lastChar","hmtx","os2","directory","cidToGidMap","cid","TTFFont","contents","numFonts","scale","widthOfGlyph","makeSubset","BOM","encodeUnit","codeUnit","encodeUTF16BE","lead","trail","NL","RESOURCE_COUNTER","PAPER_SIZE","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","letter","tabloid","makeOutput","indentLevel","arguments$1","PDFValue","beforeRender","isArray","renderArray","isDate","renderDate","isNaN","num","toFixed","test","PDFDictionary","writeData","withIndent","indent","pad","wrapObject","renderValue","renderFull","_offset","getPaperOptions","getOption","toLowerCase","unitsToPoints","min","left","top","right","bottom","FONT_CACHE","loadBinary","url","cont","exec","substr","req","XMLHttpRequest","open","responseType","onload","status","response","VBArray","responseBody","toArray","onerror","send","loadFont","IMAGE_CACHE","clearImageCache","loadImage","size","bloburl","blob","img","Image","crossOrigin","xhr","URL","createObjectURL","_load","_onerror","src","complete","_onload","_trycanvas","height","canvas","document","createElement","imgdata","ctx","getContext","drawImage","getImageData","ex","revokeObjectURL","hasAlpha","rgb","alpha","rawbytes","keepPNG","PDFRawImage","toDataURL","jpegQuality","PDFJpegImage","svg","substring","upscale","FileReader","readAsArrayBuffer","manyLoader","loadOne","urls","callback","loadFonts","loadImages","images","PDFDocument","objcount","objects","defval","attach","pages","FONTS","IMAGES","GRAD_COL_FUNCTIONS","GRAD_OPC_FUNCTIONS","GRAD_COL","GRAD_OPC","catalog","PDFCatalog","pageTree","PDFPageTree","nameTree","JavaScript","Names","PDFString","S","_","JS","props","setPages","info","Producer","Title","Author","Subject","Keywords","Creator","CreationDate","Date","addPage","paperOptions","contentWidth","contentHeight","PDFStream","Contents","Parent","MediaBox","PDFPage","_content","transform","translate","rect","clip","xrefOffset","zeropad","Size","Root","Info","getFont","PDFStandardFont","PDFFont","getImage","asStream","getOpacityGS","opacity","forStroke","_opacityGSCache","gs","Type","CA","ca","_resourceName","dict","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","mm2pt","mm","cm2pt","cm","in2pt","inch","utf16be","Boolean","txt","PDFHexString","PDFName","escape","PDFName_cache","empty","compress","Filter","unshift","Length","pagesObj","Pages","Kids","Count","pageObj","SOF_CODES","colorSpace","bitsPerComponent","soi","ff","marker","Subtype","Width","Height","BitsPerComponent","ColorSpace","Decode","mask","SMask","BaseFont","Encoding","_pdf","_font","_sub","bbox","stemV","isSerif","isScript","getTextWidth","fontSize","sub","fontStream","Length1","descriptor","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","charWidths","loop","chunk","descendant","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","W","CIDToGIDMap","_makeCidToGidMap","DescendantFonts","unimap","PDFToUnicodeCmap","unimapStream","ToUnicode","unicode","makeHash","cacheColorGradientFunction","r1","g1","r2","g2","hash","func","FunctionType","Domain","Range","N","C0","C1","cacheOpacityGradientFunction","makeGradientFunctions","stops","prev","cur","prevColor","curColor","opacities","colors","color","r","g","pop","assemble","funcs","Functions","Bounds","Encode","cacheColorGradient","isRadial","coords","box","shading","concat","ShadingType","Coords","Function","Extend","cacheOpacityGradient","AIS","G","FormType","BBox","Group","CS","I","Resources","ExtGState","Shading","s0","cacheGradient","gradient","y","userSpace","_rcount","_textMode","_fontResources","_gsResources","_xResources","_patResources","_shResources","_opacity","_matrix","_annotations","_fontSize","_contextStack","ProcSet","Font","XObject","Pattern","Annots","_out","d","e","isIdentityMatrix","mmul","dx","dy","sx","sy","rotate","angle","cos","sin","beginText","endText","_requireTextMode","_requireFont","setFont","setTextLeading","setTextRenderingMode","mode","showText","requestedWidth","outputWidth","showTextNL","addLink","uri","ll","_toPage","ur","Rect","Border","A","URI","setStrokeColor","setOpacity","setFillOpacity","setStrokeOpacity","setFillColor","save","oname","sname","restore","setDashPattern","dashArray","dashPhase","setLineWidth","setLineCap","lineCap","setLineJoin","lineJoin","setMitterLimit","mitterLimit","_context","moveTo","lineTo","bezier","x1","y1","x2","y2","x3","y3","bezier1","bezier2","close","h","ellipse","rx","ry","_X","v","_Y","k","circle","stroke","nop","clipStroke","closeStroke","fill","fillStroke","comment","line","val","matrix","unquote","parseFontDef","fontdef","fontFamily","italic","variant","bold","lineHeight","getFontURL","style","mkFamily","FONT_MAPPINGS","fontAlias","alias","defineFont","d1","e1","f1","d2","e2","f2","TEXT_RENDERING_MODE","fillAndStroke","invisible","fillAndClip","strokeAndClip","fillStrokeClip","TEXT_RENDERING_MODE$1","DASH_PATTERNS","dash","dashDot","dot","longDash","longDashDot","longDashDotDot","solid","LINE_CAP","butt","square","LINE_JOIN","miter","bevel","render$1","fonts","imgDPI","doIt","producer","autoPrint","children","drawPage","optimize","addMargin","getSize","origin","getOrigin","Matrix","drawElement","traverse","element","dispatch","ceil","Text","toBlob","Blob","saveAs$1","filename","proxy","safari","dataURL","handlers","handler","nodeType","_pdfDebug","setStrokeOptions","setFillOptions","setClipping","Path","drawPath","MultiPath","drawMultiPath","Circle","drawCircle","Arc","drawArc","drawText","drawImage$1","drawGroup","drawRect","parseColor$1","dashType","Gradient","_drawPath","shouldDraw","thing","maybeGradient","RadialGradient","center","radius","elements","stop","rawBBox","tl","topLeft","maybeFillStroke","maybeDrawRect","path","segments","closed","controlIn","anchor","isRect","seg","prevOut","controlOut","paths","points","curvePoints","_position","_pdfRect","_pdfLink","sz","ref","cornerRadius","fromRect","parseColor","toRGB","changed","clipbox","unit","currentBox","opt","change","newShape","visible","shape","optArray","el","withClipping","saveclipbox","savematrix","multiplyCopy","intersect","inClipbox","union","createPromise","_ignoreMargin","exportPDFToBlob","deepExtend","Document","1607","1608"],"mappings":"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","file":"js/chunk-vendors~bc3477d6.b5446218.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1609);\n\tmodule.exports = __webpack_require__(1609);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 1609:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n\t __webpack_require__(1610)\n\t ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function ($, undefined) {\n\t \n\tkendo.PDFMixin = {\n\t extend: function(proto) {\n\t proto.events.push(\"pdfExport\");\n\t proto.options.pdf = this.options;\n\t proto.saveAsPDF = this.saveAsPDF;\n\t proto._drawPDF = this._drawPDF;\n\t proto._drawPDFShadow = this._drawPDFShadow;\n\t },\n\t options: {\n\t fileName : \"Export.pdf\",\n\t proxyURL : \"\",\n\n\t // paperSize can be an usual name, i.e. \"A4\", or an array of two Number-s specifying the\n\t // width/height in points (1pt = 1/72in), or strings including unit, i.e. \"10mm\". Supported\n\t // units are \"mm\", \"cm\", \"in\" and \"pt\". The default \"auto\" means paper size is determined\n\t // by content.\n\t paperSize : \"auto\",\n\n\t // Export all pages, if applicable\n\t allPages: false,\n\n\t // True to reverse the paper dimensions if needed such that width is the larger edge.\n\t landscape : false,\n\n\t // An object containing { left, top, bottom, right } margins with units.\n\t margin : null,\n\n\t // Optional information for the PDF Info dictionary; all strings except for the date.\n\t title : null,\n\t author : null,\n\t subject : null,\n\t keywords : null,\n\t creator : \"Kendo UI PDF Generator v.\" + kendo.version,\n\n\t // Creation Date; defaults to new Date()\n\t date : null\n\t },\n\n\t saveAsPDF: function() {\n\t var progress = new $.Deferred();\n\t var promise = progress.promise();\n\t var args = { promise: promise };\n\n\t if (this.trigger(\"pdfExport\", args)) {\n\t return;\n\t }\n\n\t var options = this.options.pdf;\n\t options.multiPage = options.multiPage || options.allPages;\n\n\t this._drawPDF(progress)\n\t .then(function(root) {\n\t return kendo.drawing.exportPDF(root, options);\n\t })\n\t .done(function(dataURI) {\n\t kendo.saveAs({\n\t dataURI: dataURI,\n\t fileName: options.fileName,\n\t proxyURL: options.proxyURL,\n\t forceProxy: options.forceProxy,\n\t proxyTarget: options.proxyTarget\n\t });\n\n\t progress.resolve();\n\t })\n\t .fail(function(err) {\n\t progress.reject(err);\n\t });\n\n\t return promise;\n\t },\n\n\t _drawPDF: function(progress) {\n\t var promise = new $.Deferred();\n\n\t kendo.drawing.drawDOM(this.wrapper)\n\t .done(function(group) {\n\t var args = {\n\t page: group,\n\t pageNumber: 1,\n\t progress: 1,\n\t totalPages: 1\n\t };\n\n\t progress.notify(args);\n\t promise.resolve(args.page);\n\t })\n\t .fail(function(err) {\n\t promise.reject(err);\n\t });\n\n\t return promise;\n\t },\n\n\t _drawPDFShadow: function(settings, drawOptions) {\n\t settings = settings || {};\n\t var wrapper = this.wrapper;\n\t var shadow = $(\"
\");\n\n\t // Content will be allowed to take up to 200\" if no width is given.\n\t if (settings.width) {\n\t shadow.css({\n\t width: settings.width,\n\t overflow: \"visible\"\n\t });\n\t }\n\n\t wrapper.before(shadow);\n\t shadow.append(settings.content || wrapper.clone(true, true));\n\n\t var defer = $.Deferred();\n\n\t /* https://github.com/telerik/kendo/issues/4790 -- We need to\n\t * allow a small timeout so that the browser finalizes the\n\t * layout of any images here. Another option would be to pass\n\t * forcePageBreak: \"-\" to drawDOM, but that would make it\n\t * clone the content as well and look for page breaks;\n\t * needless work, so better do it here.\n\t */\n\t setTimeout(function(){\n\t var promise = kendo.drawing.drawDOM(shadow, drawOptions);\n\t promise.always(function() {\n\t shadow.remove();\n\t }).then(function(){\n\t defer.resolve.apply(defer, arguments);\n\t }).fail(function(){\n\t defer.reject.apply(defer, arguments);\n\t }).progress(function(){\n\t defer.progress.apply(defer, arguments);\n\t });\n\t }, 15);\n\n\t return defer.promise();\n\t }\n\t};\n\n\t})(window.kendo.jQuery);\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n/***/ }),\n\n/***/ 1610:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./core\");\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1611);\n\tmodule.exports = __webpack_require__(1611);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 20:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.core\");\n\n/***/ }),\n\n/***/ 1611:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(20) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t})(function(){\n\n\t(function () {\n\n\t kendo.pdf = kendo.pdf || {};\n\n\t kendo.pdf.supportsDeflate = function() {\n\t return window.pako && typeof window.pako.deflate == \"function\";\n\t };\n\n\t kendo.pdf.deflate = function(data) {\n\t return window.pako.deflate(data);\n\t };\n\n\t})();\n\n\treturn window.kendo;\n\n\t}, __webpack_require__(3));\n\n\n/***/ })\n\n/******/ });","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(1606);\n\tmodule.exports = __webpack_require__(1606);\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\n\tmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ }),\n\n/***/ 20:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.core\");\n\n/***/ }),\n\n/***/ 956:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.color\");\n\n/***/ }),\n\n/***/ 1606:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/***********************************************************************\n\t * WARNING: this file is auto-generated. If you change it directly,\n\t * your modifications will eventually be lost. The source code is in\n\t * `kendo-drawing` repository, you should make your changes there and\n\t * run `src-modules/sync.sh` in this repository.\n\t */\n\t(function(f, define){\n\t !(__WEBPACK_AMD_DEFINE_ARRAY__ = [\n\t __webpack_require__(1607),\n\t __webpack_require__(20),\n\t __webpack_require__(956),\n\t __webpack_require__(1608)\n\t ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t}) (function(){\n\n\t(function($){\n\n\t// WARNING: removing the following jshint declaration and turning\n\t// == into === to make JSHint happy will break functionality.\n\t/* jshint eqnull:true */\n\t/* jshint -W069 */\n\t/* jshint loopfunc:true */\n\t/* jshint newcap:false */\n\t/* jshint latedef: nofunc */\n\t/* jshint shadow: true */\n\n\twindow.kendo.pdf = window.kendo.pdf || {};\n\tvar support = kendo.support;\n\tvar supportBrowser = support.browser;\n\tvar drawing = kendo.drawing;\n\tvar util = drawing.util;\n\tvar extendStatic = util.extendStatic;\n\tvar kendoPdf = kendo.pdf;\n\tvar kendoGeometry = kendo.geometry;\n\n\t/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n\t/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n\t/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n\t/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n\t// XXX: remove this junk (assume `true`) when we no longer have to support IE < 10\n\t// IE 9 (at least compatibility) reports having Uint8Array but the request response does not contain ArrayBuffer which results in missing table head error\n\tvar HAS_TYPED_ARRAYS = typeof Uint8Array !== 'undefined' && kendo.support.browser && (!kendo.support.browser.msie || kendo.support.browser.version > 9);\n\n\tvar BASE64 = (function(){\n\t var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\t return {\n\t decode: function(str) {\n\t var input = str.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\"), i = 0, n = input.length, output = [];\n\n\t while (i < n) {\n\t var enc1 = keyStr.indexOf(input.charAt(i++));\n\t var enc2 = keyStr.indexOf(input.charAt(i++));\n\t var enc3 = keyStr.indexOf(input.charAt(i++));\n\t var enc4 = keyStr.indexOf(input.charAt(i++));\n\n\t var chr1 = (enc1 << 2) | (enc2 >>> 4);\n\t var chr2 = ((enc2 & 15) << 4) | (enc3 >>> 2);\n\t var chr3 = ((enc3 & 3) << 6) | enc4;\n\n\t output.push(chr1);\n\t if (enc3 != 64) {\n\t output.push(chr2);\n\t }\n\t if (enc4 != 64) {\n\t output.push(chr3);\n\t }\n\t }\n\n\t return output;\n\t },\n\t encode: function(bytes) {\n\t var i = 0, n = bytes.length;\n\t var output = \"\";\n\n\t while (i < n) {\n\t var chr1 = bytes[i++];\n\t var chr2 = bytes[i++];\n\t var chr3 = bytes[i++];\n\n\t var enc1 = chr1 >>> 2;\n\t var enc2 = ((chr1 & 3) << 4) | (chr2 >>> 4);\n\t var enc3 = ((chr2 & 15) << 2) | (chr3 >>> 6);\n\t var enc4 = chr3 & 63;\n\n\t if (i - n == 2) {\n\t enc3 = enc4 = 64;\n\t } else if (i - n == 1) {\n\t enc4 = 64;\n\t }\n\n\t output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n\t }\n\t return output;\n\t }\n\t };\n\t}());\n\n\tfunction BinaryStream(data) {\n\t var offset = 0, length = 0;\n\t if (data == null) {\n\t data = HAS_TYPED_ARRAYS ? new Uint8Array(256) : [];\n\t } else {\n\t length = data.length;\n\t }\n\n\t var ensure = HAS_TYPED_ARRAYS ? function(len) {\n\t if (len >= data.length) {\n\t var tmp = new Uint8Array(Math.max(len + 256, data.length * 2));\n\t tmp.set(data, 0);\n\t data = tmp;\n\t }\n\t } : function() {};\n\n\t var get = HAS_TYPED_ARRAYS ? function() {\n\t return new Uint8Array(data.buffer, 0, length);\n\t } : function() {\n\t return data;\n\t };\n\n\t var write = HAS_TYPED_ARRAYS ? function(bytes) {\n\t if (typeof bytes == \"string\") {\n\t return writeString(bytes);\n\t }\n\t var len = bytes.length;\n\t ensure(offset + len);\n\t data.set(bytes, offset);\n\t offset += len;\n\t if (offset > length) {\n\t length = offset;\n\t }\n\t } : function(bytes) {\n\t if (typeof bytes == \"string\") {\n\t return writeString(bytes);\n\t }\n\t for (var i = 0; i < bytes.length; ++i) {\n\t writeByte(bytes[i]);\n\t }\n\t };\n\n\t var slice = HAS_TYPED_ARRAYS ? function(start, length) {\n\t if (data.buffer.slice) {\n\t return new Uint8Array(data.buffer.slice(start, start + length));\n\t } else {\n\t // IE10\n\t var x = new Uint8Array(length);\n\t x.set(new Uint8Array(data.buffer, start, length));\n\t return x;\n\t }\n\t } : function(start, length) {\n\t return data.slice(start, start + length);\n\t };\n\n\t function eof() {\n\t return offset >= length;\n\t }\n\t function readByte() {\n\t return offset < length ? data[offset++] : 0;\n\t }\n\t function writeByte(b) {\n\t ensure(offset);\n\t data[offset++] = b & 0xFF;\n\t if (offset > length) {\n\t length = offset;\n\t }\n\t }\n\t function readShort() {\n\t return (readByte() << 8) | readByte();\n\t }\n\t function writeShort(w) {\n\t writeByte(w >> 8);\n\t writeByte(w);\n\t }\n\t function readShort_() {\n\t var w = readShort();\n\t return w >= 0x8000 ? w - 0x10000 : w;\n\t }\n\t function writeShort_(w) {\n\t writeShort(w < 0 ? w + 0x10000 : w);\n\t }\n\t function readLong() {\n\t return (readShort() * 0x10000) + readShort();\n\t }\n\t function writeLong(w) {\n\t writeShort((w >>> 16) & 0xFFFF);\n\t writeShort(w & 0xFFFF);\n\t }\n\t function readLong_() {\n\t var w = readLong();\n\t return w >= 0x80000000 ? w - 0x100000000 : w;\n\t }\n\t function writeLong_(w) {\n\t writeLong(w < 0 ? w + 0x100000000 : w);\n\t }\n\t function readFixed() {\n\t return readLong() / 0x10000;\n\t }\n\t function writeFixed(f) {\n\t writeLong(Math.round(f * 0x10000));\n\t }\n\t function readFixed_() {\n\t return readLong_() / 0x10000;\n\t }\n\t function writeFixed_(f) {\n\t writeLong_(Math.round(f * 0x10000));\n\t }\n\t function read(len) {\n\t return times(len, readByte);\n\t }\n\t function readString(len) {\n\t return String.fromCharCode.apply(String, read(len));\n\t }\n\t function writeString(str) {\n\t for (var i = 0; i < str.length; ++i) {\n\t writeByte(str.charCodeAt(i));\n\t }\n\t }\n\t function times(n, reader) {\n\t for (var ret = new Array(n), i = 0; i < n; ++i) {\n\t ret[i] = reader();\n\t }\n\t return ret;\n\t }\n\n\t var stream = {\n\t eof : eof,\n\t readByte : readByte,\n\t writeByte : writeByte,\n\t readShort : readShort,\n\t writeShort : writeShort,\n\t readLong : readLong,\n\t writeLong : writeLong,\n\t readFixed : readFixed,\n\t writeFixed : writeFixed,\n\n\t // signed numbers.\n\t readShort_ : readShort_,\n\t writeShort_ : writeShort_,\n\t readLong_ : readLong_,\n\t writeLong_ : writeLong_,\n\t readFixed_ : readFixed_,\n\t writeFixed_ : writeFixed_,\n\n\t read : read,\n\t write : write,\n\t readString : readString,\n\t writeString : writeString,\n\n\t times : times,\n\t get : get,\n\t slice : slice,\n\n\t offset: function(pos) {\n\t if (pos != null) {\n\t offset = pos;\n\t return stream;\n\t }\n\t return offset;\n\t },\n\n\t skip: function(nbytes) {\n\t offset += nbytes;\n\t },\n\n\t toString: function() {\n\t throw new Error(\"FIX CALLER. BinaryStream is no longer convertible to string!\");\n\t },\n\n\t length: function() { return length; },\n\n\t saveExcursion: function(f) {\n\t var pos = offset;\n\t try {\n\t return f();\n\t } finally {\n\t offset = pos;\n\t }\n\t },\n\n\t writeBase64: function(base64) {\n\t if (window.atob) {\n\t writeString(window.atob(base64));\n\t } else {\n\t write(BASE64.decode(base64));\n\t }\n\t },\n\t base64: function() {\n\t return BASE64.encode(get());\n\t }\n\t };\n\n\t return stream;\n\t}\n\n\tfunction ucs2decode(string) {\n\t var output = [],\n\t counter = 0,\n\t length = string.length,\n\t value,\n\t extra;\n\t while (counter < length) {\n\t value = string.charCodeAt(counter++);\n\t if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t // high surrogate, and there is a next character\n\t extra = string.charCodeAt(counter++);\n\t if ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t } else {\n\t // unmatched surrogate; only append this code unit, in case the next\n\t // code unit is the high surrogate of a surrogate pair\n\t output.push(value);\n\t counter--;\n\t }\n\t } else {\n\t output.push(value);\n\t }\n\t }\n\t return output;\n\t}\n\n\tfunction ucs2encode(array) {\n\t return array.map(function(value){\n\t var output = \"\";\n\t if (value > 0xFFFF) {\n\t value -= 0x10000;\n\t output += String.fromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t value = 0xDC00 | value & 0x3FF;\n\t }\n\t output += String.fromCharCode(value);\n\t return output;\n\t }).join(\"\");\n\t}\n\n\tfunction atobUint8Array(base64) {\n\t var data = window.atob(base64);\n\t var result = new Uint8Array(data.length);\n\n\t for (var idx = 0; idx < data.length; idx++) {\n\t result[idx] = data.charCodeAt(idx);\n\t }\n\n\t return result;\n\t}\n\n\tfunction createUint8Array(data) {\n\t var result = new Uint8Array(data.length);\n\n\t for (var idx = 0; idx < data.length; idx++) {\n\t result[idx] = data[idx];\n\t }\n\n\t return result;\n\t}\n\n\tfunction base64ToUint8Array(base64) {\n\t if (window.atob) {\n\t return atobUint8Array(base64);\n\t }\n\n\t return createUint8Array(BASE64.decode(base64));\n\t}\n\n\t/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n\t/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n\t/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n\t/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n\t/*****************************************************************************\\\n\t *\n\t * The code in this file, although written from scratch, is influenced by the\n\t * TrueType parser/encoder in PDFKit -- http://pdfkit.org/ (a CoffeeScript\n\t * library for producing PDF files).\n\t *\n\t * PDFKit is (c) Devon Govett 2014 and released under the MIT License.\n\t *\n\t\\*****************************************************************************/\n\n\tfunction hasOwnProperty$1(obj, key) {\n\t return Object.prototype.hasOwnProperty.call(obj, key);\n\t}\n\n\tfunction sortedKeys(obj) {\n\t return Object.keys(obj).sort(function(a, b){ return a - b; }).map(parseFloat);\n\t}\n\n\t///\n\tvar Directory = function Directory(data) {\n\t this.raw = data;\n\t this.scalerType = data.readLong();\n\t this.tableCount = data.readShort();\n\t this.searchRange = data.readShort();\n\t this.entrySelector = data.readShort();\n\t this.rangeShift = data.readShort();\n\n\t var tables = this.tables = {};\n\t for (var i = 0; i < this.tableCount; ++i) {\n\t var entry = {\n\t tag : data.readString(4),\n\t checksum : data.readLong(),\n\t offset : data.readLong(),\n\t length : data.readLong()\n\t };\n\t tables[entry.tag] = entry;\n\t }\n\t};\n\n\tDirectory.prototype.readTable = function readTable (name, Ctor) {\n\t var def = this.tables[name];\n\t if (!def) {\n\t throw new Error(\"Table \" + name + \" not found in directory\");\n\t }\n\t return (this[name] = def.table = new Ctor(this, def));\n\t};\n\n\tDirectory.prototype.render = function render (tables) {\n\t var this$1 = this;\n\n\t var tableCount = Object.keys(tables).length;\n\n\t var maxpow2 = Math.pow(2, Math.floor(Math.log(tableCount) / Math.LN2));\n\t var searchRange = maxpow2 * 16;\n\t var entrySelector = Math.floor(Math.log(maxpow2) / Math.LN2);\n\t var rangeShift = tableCount * 16 - searchRange;\n\n\t var out = BinaryStream();\n\t out.writeLong(this.scalerType);\n\t out.writeShort(tableCount);\n\t out.writeShort(searchRange);\n\t out.writeShort(entrySelector);\n\t out.writeShort(rangeShift);\n\n\t var directoryLength = tableCount * 16;\n\t var offset = out.offset() + directoryLength;\n\t var headOffset = null;\n\t var tableData = BinaryStream();\n\n\t for (var tag in tables) {\n\t if (hasOwnProperty$1(tables, tag)) {\n\t var table = tables[tag];\n\n\t out.writeString(tag);\n\t out.writeLong(this$1.checksum(table));\n\t out.writeLong(offset);\n\t out.writeLong(table.length);\n\n\t tableData.write(table);\n\t if (tag == \"head\") {\n\t headOffset = offset;\n\t }\n\t offset += table.length;\n\n\t while (offset % 4) {\n\t tableData.writeByte(0);\n\t offset++;\n\t }\n\t }\n\t }\n\n\t out.write(tableData.get());\n\t var sum = this.checksum(out.get());\n\t var adjustment = 0xB1B0AFBA - sum;\n\n\t out.offset(headOffset + 8);\n\t out.writeLong(adjustment);\n\t return out.get();\n\t};\n\n\tDirectory.prototype.checksum = function checksum (data) {\n\t data = BinaryStream(data);\n\t var sum = 0;\n\t while (!data.eof()) {\n\t sum += data.readLong();\n\t }\n\t return sum & 0xFFFFFFFF;\n\t};\n\n\tvar Table = function Table(file, def) {\n\t this.definition = def;\n\t this.length = def.length;\n\t this.offset = def.offset;\n\t this.file = file;\n\t this.rawData = file.raw;\n\t this.parse(file.raw);\n\t};\n\n\tTable.prototype.raw = function raw () {\n\t return this.rawData.slice(this.offset, this.length);\n\t};\n\n\tTable.prototype.parse = function parse () {};\n\n\tvar HeadTable = (function (Table) {\n\t function HeadTable () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(HeadTable, Table);\n\t HeadTable.prototype = Object.create( Table && Table.prototype );\n\t HeadTable.prototype.constructor = HeadTable;\n\t HeadTable.fn = HeadTable.prototype;\n\t HeadTable.fn.init = HeadTable.fn.constructor;\n\n\t HeadTable.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\t this.version = data.readLong();\n\t this.revision = data.readLong();\n\t this.checkSumAdjustment = data.readLong();\n\t this.magicNumber = data.readLong();\n\t this.flags = data.readShort();\n\t this.unitsPerEm = data.readShort();\n\t this.created = data.read(8);\n\t this.modified = data.read(8);\n\n\t this.xMin = data.readShort_();\n\t this.yMin = data.readShort_();\n\t this.xMax = data.readShort_();\n\t this.yMax = data.readShort_();\n\n\t this.macStyle = data.readShort();\n\t this.lowestRecPPEM = data.readShort();\n\t this.fontDirectionHint = data.readShort_();\n\t this.indexToLocFormat = data.readShort_();\n\t this.glyphDataFormat = data.readShort_();\n\t };\n\n\t HeadTable.prototype.render = function render (indexToLocFormat) {\n\t var out = BinaryStream();\n\t out.writeLong(this.version);\n\t out.writeLong(this.revision);\n\t out.writeLong(0); // checksum adjustment; shall be computed later\n\t out.writeLong(this.magicNumber);\n\t out.writeShort(this.flags);\n\t out.writeShort(this.unitsPerEm);\n\t out.write(this.created);\n\t out.write(this.modified);\n\t out.writeShort_(this.xMin);\n\t out.writeShort_(this.yMin);\n\t out.writeShort_(this.xMax);\n\t out.writeShort_(this.yMax);\n\t out.writeShort(this.macStyle);\n\t out.writeShort(this.lowestRecPPEM);\n\t out.writeShort_(this.fontDirectionHint);\n\t out.writeShort_(indexToLocFormat); // this will depend on the `loca` table\n\t out.writeShort_(this.glyphDataFormat);\n\t return out.get();\n\t };\n\n\t return HeadTable;\n\t}(Table));\n\n\tvar LocaTable = (function (Table) {\n\t function LocaTable () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(LocaTable, Table);\n\t LocaTable.prototype = Object.create( Table && Table.prototype );\n\t LocaTable.prototype.constructor = LocaTable;\n\t LocaTable.fn = LocaTable.prototype;\n\t LocaTable.fn.init = LocaTable.fn.constructor;\n\n\t LocaTable.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\t var format = this.file.head.indexToLocFormat;\n\t if (format === 0) {\n\t this.offsets = data.times(this.length / 2, function(){\n\t return 2 * data.readShort();\n\t });\n\t } else {\n\t this.offsets = data.times(this.length / 4, data.readLong);\n\t }\n\t };\n\n\t LocaTable.prototype.offsetOf = function offsetOf (id) {\n\t return this.offsets[id];\n\t };\n\n\t LocaTable.prototype.lengthOf = function lengthOf (id) {\n\t return this.offsets[id + 1] - this.offsets[id];\n\t };\n\n\t LocaTable.prototype.render = function render (offsets) {\n\t var out = BinaryStream();\n\t var needsLongFormat = offsets[offsets.length - 1] > 0xFFFF;\n\t for (var i = 0; i < offsets.length; ++i) {\n\t if (needsLongFormat) {\n\t out.writeLong(offsets[i]);\n\t } else {\n\t out.writeShort(offsets[i] / 2);\n\t }\n\t }\n\t return {\n\t format: needsLongFormat ? 1 : 0,\n\t table: out.get()\n\t };\n\t };\n\n\t return LocaTable;\n\t}(Table));\n\n\tvar HheaTable = (function (Table) {\n\t function HheaTable () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(HheaTable, Table);\n\t HheaTable.prototype = Object.create( Table && Table.prototype );\n\t HheaTable.prototype.constructor = HheaTable;\n\t HheaTable.fn = HheaTable.prototype;\n\t HheaTable.fn.init = HheaTable.fn.constructor;\n\n\t HheaTable.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\n\t this.version = data.readLong();\n\t this.ascent = data.readShort_();\n\t this.descent = data.readShort_();\n\t this.lineGap = data.readShort_();\n\t this.advanceWidthMax = data.readShort();\n\t this.minLeftSideBearing = data.readShort_();\n\t this.minRightSideBearing = data.readShort_();\n\t this.xMaxExtent = data.readShort_();\n\t this.caretSlopeRise = data.readShort_();\n\t this.caretSlopeRun = data.readShort_();\n\t this.caretOffset = data.readShort_();\n\n\t data.skip(4 * 2); // reserved\n\n\t this.metricDataFormat = data.readShort_();\n\t this.numOfLongHorMetrics = data.readShort();\n\t };\n\n\t HheaTable.prototype.render = function render (ids) {\n\t var out = BinaryStream();\n\t out.writeLong(this.version);\n\t out.writeShort_(this.ascent);\n\t out.writeShort_(this.descent);\n\t out.writeShort_(this.lineGap);\n\t out.writeShort(this.advanceWidthMax);\n\t out.writeShort_(this.minLeftSideBearing);\n\t out.writeShort_(this.minRightSideBearing);\n\t out.writeShort_(this.xMaxExtent);\n\t out.writeShort_(this.caretSlopeRise);\n\t out.writeShort_(this.caretSlopeRun);\n\t out.writeShort_(this.caretOffset);\n\n\t out.write([ 0, 0, 0, 0, 0, 0, 0, 0 ]); // reserved bytes\n\n\t out.writeShort_(this.metricDataFormat);\n\t out.writeShort(ids.length);\n\t return out.get();\n\t };\n\n\t return HheaTable;\n\t}(Table));\n\n\tvar MaxpTable = (function (Table) {\n\t function MaxpTable () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(MaxpTable, Table);\n\t MaxpTable.prototype = Object.create( Table && Table.prototype );\n\t MaxpTable.prototype.constructor = MaxpTable;\n\t MaxpTable.fn = MaxpTable.prototype;\n\t MaxpTable.fn.init = MaxpTable.fn.constructor;\n\n\t MaxpTable.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\t this.version = data.readLong();\n\t this.numGlyphs = data.readShort();\n\t this.maxPoints = data.readShort();\n\t this.maxContours = data.readShort();\n\t this.maxComponentPoints = data.readShort();\n\t this.maxComponentContours = data.readShort();\n\t this.maxZones = data.readShort();\n\t this.maxTwilightPoints = data.readShort();\n\t this.maxStorage = data.readShort();\n\t this.maxFunctionDefs = data.readShort();\n\t this.maxInstructionDefs = data.readShort();\n\t this.maxStackElements = data.readShort();\n\t this.maxSizeOfInstructions = data.readShort();\n\t this.maxComponentElements = data.readShort();\n\t this.maxComponentDepth = data.readShort();\n\t };\n\n\t MaxpTable.prototype.render = function render (glyphIds) {\n\t var out = BinaryStream();\n\t out.writeLong(this.version);\n\t out.writeShort(glyphIds.length);\n\t out.writeShort(this.maxPoints);\n\t out.writeShort(this.maxContours);\n\t out.writeShort(this.maxComponentPoints);\n\t out.writeShort(this.maxComponentContours);\n\t out.writeShort(this.maxZones);\n\t out.writeShort(this.maxTwilightPoints);\n\t out.writeShort(this.maxStorage);\n\t out.writeShort(this.maxFunctionDefs);\n\t out.writeShort(this.maxInstructionDefs);\n\t out.writeShort(this.maxStackElements);\n\t out.writeShort(this.maxSizeOfInstructions);\n\t out.writeShort(this.maxComponentElements);\n\t out.writeShort(this.maxComponentDepth);\n\t return out.get();\n\t };\n\n\t return MaxpTable;\n\t}(Table));\n\n\tvar HmtxTable = (function (Table) {\n\t function HmtxTable () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(HmtxTable, Table);\n\t HmtxTable.prototype = Object.create( Table && Table.prototype );\n\t HmtxTable.prototype.constructor = HmtxTable;\n\t HmtxTable.fn = HmtxTable.prototype;\n\t HmtxTable.fn.init = HmtxTable.fn.constructor;\n\n\t HmtxTable.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\t var dir = this.file, hhea = dir.hhea;\n\t this.metrics = data.times(hhea.numOfLongHorMetrics, function(){\n\t return {\n\t advance: data.readShort(),\n\t lsb: data.readShort_()\n\t };\n\t });\n\t var lsbCount = dir.maxp.numGlyphs - dir.hhea.numOfLongHorMetrics;\n\t this.leftSideBearings = data.times(lsbCount, data.readShort_);\n\t };\n\n\t HmtxTable.prototype.forGlyph = function forGlyph (id) {\n\t var metrics = this.metrics;\n\t var n = metrics.length;\n\t if (id < n) {\n\t return metrics[id];\n\t }\n\t return {\n\t advance: metrics[n - 1].advance,\n\t lsb: this.leftSideBearings[id - n]\n\t };\n\t };\n\n\t HmtxTable.prototype.render = function render (glyphIds) {\n\t var this$1 = this;\n\n\t var out = BinaryStream();\n\t for (var i = 0; i < glyphIds.length; ++i) {\n\t var m = this$1.forGlyph(glyphIds[i]);\n\t out.writeShort(m.advance);\n\t out.writeShort_(m.lsb);\n\t }\n\t return out.get();\n\t };\n\n\t return HmtxTable;\n\t}(Table));\n\n\tvar GlyfTable = (function(){\n\t var SimpleGlyph = function SimpleGlyph(raw) {\n\t this.raw = raw;\n\t };\n\n\t var prototypeAccessors = { compound: {} };\n\n\t prototypeAccessors.compound.get = function () {\n\t return false;\n\t };\n\n\t SimpleGlyph.prototype.render = function render () {\n\t return this.raw.get();\n\t };\n\n\t Object.defineProperties( SimpleGlyph.prototype, prototypeAccessors );\n\n\t var ARG_1_AND_2_ARE_WORDS = 0x0001;\n\t var WE_HAVE_A_SCALE = 0x0008;\n\t var MORE_COMPONENTS = 0x0020;\n\t var WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n\t var WE_HAVE_A_TWO_BY_TWO = 0x0080;\n\t //var WE_HAVE_INSTRUCTIONS = 0x0100;\n\n\t var CompoundGlyph = function CompoundGlyph(data) {\n\t this.raw = data;\n\t var ids = this.glyphIds = [];\n\t var offsets = this.idOffsets = [];\n\t while (true) { // eslint-disable-line no-constant-condition\n\t var flags = data.readShort();\n\t offsets.push(data.offset());\n\t ids.push(data.readShort());\n\n\t if (!(flags & MORE_COMPONENTS)) {\n\t break;\n\t }\n\n\t data.skip(flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n\n\t if (flags & WE_HAVE_A_TWO_BY_TWO) {\n\t data.skip(8);\n\t } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n\t data.skip(4);\n\t } else if (flags & WE_HAVE_A_SCALE) {\n\t data.skip(2);\n\t }\n\t }\n\t };\n\n\t var prototypeAccessors$1 = { compound: {} };\n\n\t prototypeAccessors$1.compound.get = function () {\n\t return true;\n\t };\n\n\t CompoundGlyph.prototype.render = function render (old2new) {\n\t var this$1 = this;\n\n\t var out = BinaryStream(this.raw.get());\n\t for (var i = 0; i < this.glyphIds.length; ++i) {\n\t var id = this$1.glyphIds[i];\n\t out.offset(this$1.idOffsets[i]);\n\t out.writeShort(old2new[id]);\n\t }\n\t return out.get();\n\t };\n\n\t Object.defineProperties( CompoundGlyph.prototype, prototypeAccessors$1 );\n\n\t return (function (Table) {\n\t function anonymous () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, Table);\n\t anonymous.prototype = Object.create( Table && Table.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.parse = function parse () {\n\t this.cache = {};\n\t };\n\n\t anonymous.prototype.glyphFor = function glyphFor (id) {\n\t var cache = this.cache;\n\t if (hasOwnProperty$1(cache, id)) {\n\t return cache[id];\n\t }\n\n\t var loca = this.file.loca;\n\t var length = loca.lengthOf(id);\n\n\t if (length === 0) {\n\t return (cache[id] = null);\n\t }\n\n\t var data = this.rawData;\n\t var offset = this.offset + loca.offsetOf(id);\n\t var raw = BinaryStream(data.slice(offset, length));\n\n\t var numberOfContours = raw.readShort_();\n\t var xMin = raw.readShort_();\n\t var yMin = raw.readShort_();\n\t var xMax = raw.readShort_();\n\t var yMax = raw.readShort_();\n\n\t var glyph = cache[id] = numberOfContours < 0 ? new CompoundGlyph(raw) : new SimpleGlyph(raw);\n\n\t glyph.numberOfContours = numberOfContours;\n\t glyph.xMin = xMin;\n\t glyph.yMin = yMin;\n\t glyph.xMax = xMax;\n\t glyph.yMax = yMax;\n\n\t return glyph;\n\t };\n\n\t anonymous.prototype.render = function render (glyphs, oldIds, old2new) {\n\t var out = BinaryStream(), offsets = [];\n\t for (var i = 0; i < oldIds.length; ++i) {\n\t var id = oldIds[i];\n\t var glyph = glyphs[id];\n\t if (out.offset() % 2) {\n\t out.writeByte(0);\n\t }\n\t offsets.push(out.offset());\n\t if (glyph) {\n\t out.write(glyph.render(old2new));\n\t }\n\t }\n\t if (out.offset() % 2) {\n\t out.writeByte(0);\n\t }\n\t offsets.push(out.offset());\n\t return {\n\t table: out.get(),\n\t offsets: offsets\n\t };\n\t };\n\n\t return anonymous;\n\t }(Table));\n\t}());\n\n\tvar NameTable = (function(){\n\t var NameEntry = function NameEntry(text, entry) {\n\t this.text = text;\n\t this.length = text.length;\n\t this.platformID = entry.platformID;\n\t this.platformSpecificID = entry.platformSpecificID;\n\t this.languageID = entry.languageID;\n\t this.nameID = entry.nameID;\n\t };\n\n\t return (function (Table) {\n\t function anonymous () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, Table);\n\t anonymous.prototype = Object.create( Table && Table.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\t data.readShort(); // format\n\t var count = data.readShort();\n\t var stringOffset = this.offset + data.readShort();\n\t var nameRecords = data.times(count, function(){\n\t return {\n\t platformID : data.readShort(),\n\t platformSpecificID : data.readShort(),\n\t languageID : data.readShort(),\n\t nameID : data.readShort(),\n\t length : data.readShort(),\n\t offset : data.readShort() + stringOffset\n\t };\n\t });\n\t var strings = this.strings = {};\n\t for (var i = 0; i < nameRecords.length; ++i) {\n\t var rec = nameRecords[i];\n\t data.offset(rec.offset);\n\t var text = data.readString(rec.length);\n\t if (!strings[rec.nameID]) {\n\t strings[rec.nameID] = [];\n\t }\n\t strings[rec.nameID].push(new NameEntry(text, rec));\n\t }\n\t this.postscriptEntry = strings[6][0];\n\t this.postscriptName = this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g, \"\");\n\t };\n\n\t anonymous.prototype.render = function render (psName) {\n\t var this$1 = this;\n\n\t var strings = this.strings;\n\t var strCount = 0;\n\t for (var i in strings) {\n\t if (hasOwnProperty$1(strings, i)) {\n\t strCount += strings[i].length;\n\t }\n\t }\n\t var out = BinaryStream();\n\t var strTable = BinaryStream();\n\n\t out.writeShort(0); // format\n\t out.writeShort(strCount);\n\t out.writeShort(6 + 12 * strCount); // stringOffset\n\n\t for (i in strings) {\n\t if (hasOwnProperty$1(strings, i)) {\n\t var list = i == 6 ? [\n\t new NameEntry(psName, this$1.postscriptEntry)\n\t ] : strings[i];\n\t for (var j = 0; j < list.length; ++j) {\n\t var str = list[j];\n\t out.writeShort(str.platformID);\n\t out.writeShort(str.platformSpecificID);\n\t out.writeShort(str.languageID);\n\t out.writeShort(str.nameID);\n\t out.writeShort(str.length);\n\t out.writeShort(strTable.offset());\n\n\t strTable.writeString(str.text);\n\t }\n\t }\n\t }\n\n\t out.write(strTable.get());\n\n\t return out.get();\n\t };\n\n\t return anonymous;\n\t }(Table));\n\t})();\n\n\tvar PostTable = (function(){\n\t var POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question 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 bracketleft backslash bracketright asciicircum underscore grave 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 braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat\".split(/\\s+/g);\n\n\t return (function (Table) {\n\t function anonymous () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, Table);\n\t anonymous.prototype = Object.create( Table && Table.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.parse = function parse (data) {\n\t var this$1 = this;\n\n\t data.offset(this.offset);\n\n\t this.format = data.readLong();\n\t this.italicAngle = data.readFixed_();\n\t this.underlinePosition = data.readShort_();\n\t this.underlineThickness = data.readShort_();\n\t this.isFixedPitch = data.readLong();\n\t this.minMemType42 = data.readLong();\n\t this.maxMemType42 = data.readLong();\n\t this.minMemType1 = data.readLong();\n\t this.maxMemType1 = data.readLong();\n\n\t var numberOfGlyphs;\n\n\t switch (this.format) {\n\t case 0x00010000:\n\t case 0x00030000:\n\t break;\n\n\t case 0x00020000:\n\t numberOfGlyphs = data.readShort();\n\t this.glyphNameIndex = data.times(numberOfGlyphs, data.readShort);\n\t this.names = [];\n\t var limit = this.offset + this.length;\n\t while (data.offset() < limit) {\n\t this$1.names.push(data.readString(data.readByte()));\n\t }\n\t break;\n\n\t case 0x00025000:\n\t numberOfGlyphs = data.readShort();\n\t this.offsets = data.read(numberOfGlyphs);\n\t break;\n\n\t case 0x00040000:\n\t this.map = data.times(this.file.maxp.numGlyphs, data.readShort);\n\t break;\n\t }\n\t };\n\n\t anonymous.prototype.glyphFor = function glyphFor (code) {\n\t switch (this.format) {\n\t case 0x00010000:\n\t return POSTSCRIPT_GLYPHS[code] || \".notdef\";\n\n\t case 0x00020000:\n\t var index = this.glyphNameIndex[code];\n\t if (index < POSTSCRIPT_GLYPHS.length) {\n\t return POSTSCRIPT_GLYPHS[index];\n\t }\n\t return this.names[index - POSTSCRIPT_GLYPHS.length] || \".notdef\";\n\n\t case 0x00025000:\n\n\t case 0x00030000:\n\t return \".notdef\";\n\n\t case 0x00040000:\n\t return this.map[code] || 0xFFFF;\n\t }\n\t };\n\n\t anonymous.prototype.render = function render (mapping) {\n\t var this$1 = this;\n\n\t if (this.format == 0x00030000) {\n\t return this.raw();\n\t }\n\n\t // keep original header, but set format to 2.0\n\t var out = BinaryStream(this.rawData.slice(this.offset, 32));\n\t out.writeLong(0x00020000);\n\t out.offset(32);\n\n\t var indexes = [];\n\t var strings = [];\n\n\t for (var i = 0; i < mapping.length; ++i) {\n\t var id = mapping[i];\n\t var post = this$1.glyphFor(id);\n\t var index = POSTSCRIPT_GLYPHS.indexOf(post);\n\t if (index >= 0) {\n\t indexes.push(index);\n\t } else {\n\t indexes.push(POSTSCRIPT_GLYPHS.length + strings.length);\n\t strings.push(post);\n\t }\n\t }\n\n\t out.writeShort(mapping.length);\n\n\t for (i = 0; i < indexes.length; ++i) {\n\t out.writeShort(indexes[i]);\n\t }\n\n\t for (i = 0; i < strings.length; ++i) {\n\t out.writeByte(strings[i].length);\n\t out.writeString(strings[i]);\n\t }\n\n\t return out.get();\n\t };\n\n\t return anonymous;\n\t }(Table));\n\t})();\n\n\tvar CmapTable = (function(){\n\t var CmapEntry = function CmapEntry(data, offset, codeMap) {\n\t var self = this;\n\t self.platformID = data.readShort();\n\t self.platformSpecificID = data.readShort();\n\t self.offset = offset + data.readLong();\n\n\t data.saveExcursion(function(){\n\t var code;\n\t data.offset(self.offset);\n\t self.format = data.readShort();\n\n\t switch (self.format) {\n\t case 0:\n\t self.length = data.readShort();\n\t self.language = data.readShort();\n\t for (var i = 0; i < 256; ++i) {\n\t codeMap[i] = data.readByte();\n\t }\n\t break;\n\n\t case 4:\n\t self.length = data.readShort();\n\t self.language = data.readShort();\n\t var segCount = data.readShort() / 2;\n\n\t data.skip(6); // searchRange, entrySelector, rangeShift\n\t var endCode = data.times(segCount, data.readShort);\n\t data.skip(2); // reserved pad\n\t var startCode = data.times(segCount, data.readShort);\n\t var idDelta = data.times(segCount, data.readShort_);\n\t var idRangeOffset = data.times(segCount, data.readShort);\n\n\t var count = (self.length + self.offset - data.offset()) / 2;\n\t var glyphIds = data.times(count, data.readShort);\n\n\t for (i = 0; i < segCount; ++i) {\n\t var start = startCode[i], end = endCode[i];\n\t for (code = start; code <= end; ++code) {\n\t var glyphId;\n\t if (idRangeOffset[i] === 0) {\n\t glyphId = code + idDelta[i];\n\t } else {\n\t ///\n\t // When non-zero, idRangeOffset contains for each segment the byte offset of the Glyph ID\n\t // into the glyphIds table, from the *current* `i` cell of idRangeOffset. In other words,\n\t // this offset spans from the first into the second array. This works, because the arrays\n\t // are consecutive in the TTF file:\n\t //\n\t // [ ...idRangeOffset... ][ ...glyphIds... ]\n\t // ...... 48 ...... .... ID ....\n\t // ^----- 48 bytes -----^\n\t //\n\t // (but I can't stop wondering why is it not just a plain index, possibly incremented by 1\n\t // so that we can have that special `zero` value.)\n\t //\n\t // The elements of idRangeOffset are even numbers, because both arrays contain 16-bit words,\n\t // yet the offset is in bytes. That is why we divide it by 2. Then we subtract the\n\t // remaining segments (segCount-i), and add the code-start offset, to which we need to add\n\t // the corresponding delta to get the actual glyph ID.\n\t ///\n\t var index = idRangeOffset[i] / 2 - (segCount - i) + (code - start);\n\t glyphId = glyphIds[index] || 0;\n\t if (glyphId !== 0) {\n\t glyphId += idDelta[i];\n\t }\n\t }\n\t codeMap[code] = glyphId & 0xFFFF;\n\t }\n\t }\n\t break;\n\n\t case 6:\n\t self.length = data.readShort();\n\t self.language = data.readShort();\n\t code = data.readShort();\n\t var length = data.readShort();\n\t while (length-- > 0) {\n\t codeMap[code++] = data.readShort();\n\t }\n\t break;\n\n\t case 12:\n\t data.readShort(); // reserved\n\t self.length = data.readLong();\n\t self.language = data.readLong();\n\t var ngroups = data.readLong();\n\t while (ngroups-- > 0) {\n\t code = data.readLong();\n\t var endCharCode = data.readLong();\n\t var glyphCode = data.readLong();\n\t while (code <= endCharCode) {\n\t codeMap[code++] = glyphCode++;\n\t }\n\t }\n\t break;\n\n\t default:\n\t if (window.console) {\n\t window.console.error(\"Unhandled CMAP format: \" + self.format);\n\t }\n\t }\n\t });\n\t };\n\n\t function renderCharmap(ncid2ogid, ogid2ngid) {\n\t var codes = sortedKeys(ncid2ogid);\n\t var startCodes = [];\n\t var endCodes = [];\n\t var last = null;\n\t var diff = null;\n\n\t function new_gid(charcode) {\n\t return ogid2ngid[ncid2ogid[charcode]];\n\t }\n\n\t for (var i = 0; i < codes.length; ++i) {\n\t var code = codes[i];\n\t var gid = new_gid(code);\n\t var delta = gid - code;\n\t if (last == null || delta !== diff) {\n\t if (last) {\n\t endCodes.push(last);\n\t }\n\t startCodes.push(code);\n\t diff = delta;\n\t }\n\t last = code;\n\t }\n\n\t if (last) {\n\t endCodes.push(last);\n\t }\n\t endCodes.push(0xFFFF);\n\t startCodes.push(0xFFFF);\n\n\t var segCount = startCodes.length;\n\t var segCountX2 = segCount * 2;\n\t var searchRange = 2 * Math.pow(2, Math.floor(Math.log(segCount) / Math.LN2));\n\t var entrySelector = Math.log(searchRange / 2) / Math.LN2;\n\t var rangeShift = segCountX2 - searchRange;\n\n\t var deltas = [];\n\t var rangeOffsets = [];\n\t var glyphIds = [];\n\n\t for (i = 0; i < segCount; ++i) {\n\t var startCode = startCodes[i];\n\t var endCode = endCodes[i];\n\t if (startCode == 0xFFFF) {\n\t deltas.push(0);\n\t rangeOffsets.push(0);\n\t break;\n\t }\n\t var startGlyph = new_gid(startCode);\n\t if (startCode - startGlyph >= 0x8000) {\n\t deltas.push(0);\n\t rangeOffsets.push(2 * (glyphIds.length + segCount - i));\n\t for (var j = startCode; j <= endCode; ++j) {\n\t glyphIds.push(new_gid(j));\n\t }\n\t } else {\n\t deltas.push(startGlyph - startCode);\n\t rangeOffsets.push(0);\n\t }\n\t }\n\n\t var out = BinaryStream();\n\n\t out.writeShort(3); // platformID\n\t out.writeShort(1); // platformSpecificID\n\t out.writeLong(12); // offset\n\t out.writeShort(4); // format\n\t out.writeShort(16 + segCount * 8 + glyphIds.length * 2); // length\n\t out.writeShort(0); // language\n\t out.writeShort(segCountX2);\n\t out.writeShort(searchRange);\n\t out.writeShort(entrySelector);\n\t out.writeShort(rangeShift);\n\n\t endCodes.forEach(out.writeShort);\n\t out.writeShort(0); // reserved pad\n\t startCodes.forEach(out.writeShort);\n\t deltas.forEach(out.writeShort_);\n\t rangeOffsets.forEach(out.writeShort);\n\t glyphIds.forEach(out.writeShort);\n\n\t return out.get();\n\t }\n\n\t return (function (Table) {\n\t function anonymous () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(anonymous, Table);\n\t anonymous.prototype = Object.create( Table && Table.prototype );\n\t anonymous.prototype.constructor = anonymous;\n\t anonymous.fn = anonymous.prototype;\n\t anonymous.fn.init = anonymous.fn.constructor;\n\n\t anonymous.prototype.parse = function parse (data) {\n\t var self = this;\n\t var offset = self.offset;\n\t data.offset(offset);\n\t self.codeMap = {};\n\t self.version = data.readShort();\n\t var tableCount = data.readShort();\n\t self.tables = data.times(tableCount, function(){\n\t return new CmapEntry(data, offset, self.codeMap);\n\t });\n\t };\n\n\t anonymous.render = function render (ncid2ogid, ogid2ngid) {\n\t var out = BinaryStream();\n\t out.writeShort(0); // version\n\t out.writeShort(1); // tableCount\n\t out.write(renderCharmap(ncid2ogid, ogid2ngid));\n\t return out.get();\n\t };\n\n\t return anonymous;\n\t }(Table));\n\n\t})();\n\n\tvar OS2Table = (function (Table) {\n\t function OS2Table () {\n\t Table.apply(this, arguments);\n\t }\n\n\t extendStatic(OS2Table, Table);\n\t OS2Table.prototype = Object.create( Table && Table.prototype );\n\t OS2Table.prototype.constructor = OS2Table;\n\t OS2Table.fn = OS2Table.prototype;\n\t OS2Table.fn.init = OS2Table.fn.constructor;\n\n\t OS2Table.prototype.parse = function parse (data) {\n\t data.offset(this.offset);\n\t this.version = data.readShort();\n\t this.averageCharWidth = data.readShort_();\n\t this.weightClass = data.readShort();\n\t this.widthClass = data.readShort();\n\t this.type = data.readShort();\n\t this.ySubscriptXSize = data.readShort_();\n\t this.ySubscriptYSize = data.readShort_();\n\t this.ySubscriptXOffset = data.readShort_();\n\t this.ySubscriptYOffset = data.readShort_();\n\t this.ySuperscriptXSize = data.readShort_();\n\t this.ySuperscriptYSize = data.readShort_();\n\t this.ySuperscriptXOffset = data.readShort_();\n\t this.ySuperscriptYOffset = data.readShort_();\n\t this.yStrikeoutSize = data.readShort_();\n\t this.yStrikeoutPosition = data.readShort_();\n\t this.familyClass = data.readShort_();\n\n\t this.panose = data.times(10, data.readByte);\n\t this.charRange = data.times(4, data.readLong);\n\n\t this.vendorID = data.readString(4);\n\t this.selection = data.readShort();\n\t this.firstCharIndex = data.readShort();\n\t this.lastCharIndex = data.readShort();\n\n\t if (this.version > 0) {\n\t this.ascent = data.readShort_();\n\t this.descent = data.readShort_();\n\t this.lineGap = data.readShort_();\n\t this.winAscent = data.readShort();\n\t this.winDescent = data.readShort();\n\t this.codePageRange = data.times(2, data.readLong);\n\n\t if (this.version > 1) {\n\t this.xHeight = data.readShort();\n\t this.capHeight = data.readShort();\n\t this.defaultChar = data.readShort();\n\t this.breakChar = data.readShort();\n\t this.maxContext = data.readShort();\n\t }\n\t }\n\t };\n\n\t OS2Table.prototype.render = function render () {\n\t return this.raw();\n\t };\n\n\t return OS2Table;\n\t}(Table));\n\n\tvar subsetTag = 100000;\n\n\tfunction nextSubsetTag() {\n\t var ret = \"\", n = String(subsetTag);\n\t for (var i = 0; i < n.length; ++i) {\n\t ret += String.fromCharCode(n.charCodeAt(i) - 48 + 65);\n\t }\n\t ++subsetTag;\n\t return ret;\n\t}\n\n\tvar Subfont = function Subfont(font) {\n\t this.font = font;\n\t this.subset = {};\n\t this.unicodes = {};\n\t this.ogid2ngid = { 0: 0 };\n\t this.ngid2ogid = { 0: 0 };\n\t this.ncid2ogid = {};\n\t this.next = this.firstChar = 1;\n\t this.nextGid = 1;\n\t this.psName = nextSubsetTag() + \"+\" + this.font.psName;\n\t};\n\n\tSubfont.prototype.use = function use (ch) {\n\t var self = this;\n\t if (typeof ch == \"string\") {\n\t return ucs2decode(ch).reduce(function(ret, code){\n\t return ret + String.fromCharCode(self.use(code));\n\t }, \"\");\n\t }\n\t var code = self.unicodes[ch];\n\t if (!code) {\n\t code = self.next++;\n\t self.subset[code] = ch;\n\t self.unicodes[ch] = code;\n\n\t // generate new GID (glyph ID) and maintain newGID ->\n\t // oldGID and back mappings\n\t var old_gid = self.font.cmap.codeMap[ch];\n\t if (old_gid) {\n\t self.ncid2ogid[code] = old_gid;\n\t if (self.ogid2ngid[old_gid] == null) {\n\t var new_gid = self.nextGid++;\n\t self.ogid2ngid[old_gid] = new_gid;\n\t self.ngid2ogid[new_gid] = old_gid;\n\t }\n\t }\n\t }\n\t return code;\n\t};\n\n\tSubfont.prototype.encodeText = function encodeText (text) {\n\t return this.use(text);\n\t};\n\n\tSubfont.prototype.glyphIds = function glyphIds () {\n\t return sortedKeys(this.ogid2ngid);\n\t};\n\n\tSubfont.prototype.glyphsFor = function glyphsFor (glyphIds, result) {\n\t var this$1 = this;\n\n\t if (!result) {\n\t result = {};\n\t }\n\t for (var i = 0; i < glyphIds.length; ++i) {\n\t var id = glyphIds[i];\n\t if (!result[id]) {\n\t var glyph = result[id] = this$1.font.glyf.glyphFor(id);\n\t if (glyph && glyph.compound) {\n\t this$1.glyphsFor(glyph.glyphIds, result);\n\t }\n\t }\n\t }\n\t return result;\n\t};\n\n\tSubfont.prototype.render = function render () {\n\t var this$1 = this;\n\n\t var glyphs = this.glyphsFor(this.glyphIds());\n\n\t // add missing sub-glyphs\n\t for (var old_gid in glyphs) {\n\t if (hasOwnProperty$1(glyphs, old_gid)) {\n\t old_gid = parseInt(old_gid, 10);\n\t if (this$1.ogid2ngid[old_gid] == null) {\n\t var new_gid = this$1.nextGid++;\n\t this$1.ogid2ngid[old_gid] = new_gid;\n\t this$1.ngid2ogid[new_gid] = old_gid;\n\t }\n\t }\n\t }\n\n\t // must obtain old_gid_ids in an order matching sorted\n\t // new_gid_ids\n\t var new_gid_ids = sortedKeys(this.ngid2ogid);\n\t var old_gid_ids = new_gid_ids.map(function(id){\n\t return this.ngid2ogid[id];\n\t }, this);\n\n\t var font = this.font;\n\t var glyf = font.glyf.render(glyphs, old_gid_ids, this.ogid2ngid);\n\t var loca = font.loca.render(glyf.offsets);\n\n\t this.lastChar = this.next - 1;\n\n\t var tables = {\n\t \"cmap\" : CmapTable.render(this.ncid2ogid, this.ogid2ngid),\n\t \"glyf\" : glyf.table,\n\t \"loca\" : loca.table,\n\t \"hmtx\" : font.hmtx.render(old_gid_ids),\n\t \"hhea\" : font.hhea.render(old_gid_ids),\n\t \"maxp\" : font.maxp.render(old_gid_ids),\n\t \"post\" : font.post.render(old_gid_ids),\n\t \"name\" : font.name.render(this.psName),\n\t \"head\" : font.head.render(loca.format),\n\t \"OS/2\" : font.os2.render()\n\t };\n\n\t return this.font.directory.render(tables);\n\t};\n\n\tSubfont.prototype.cidToGidMap = function cidToGidMap () {\n\t var this$1 = this;\n\n\t var out = BinaryStream(), len = 0;\n\t for (var cid = this.firstChar; cid < this.next; ++cid) {\n\t while (len < cid) {\n\t out.writeShort(0);\n\t len++;\n\t }\n\t var old_gid = this$1.ncid2ogid[cid];\n\t if (old_gid) {\n\t var new_gid = this$1.ogid2ngid[old_gid];\n\t out.writeShort(new_gid);\n\t } else {\n\t out.writeShort(0);\n\t }\n\t len++;\n\t }\n\t return out.get();\n\t};\n\n\tvar TTFFont = function TTFFont(rawData, name) {\n\t var self = this;\n\t var data = self.contents = BinaryStream(rawData);\n\t if (data.readString(4) == \"ttcf\") {\n\t var offset;\n\t var parse = function() {\n\t data.offset(offset);\n\t self.parse();\n\t };\n\t if (!name) {\n\t throw new Error(\"Must specify a name for TTC files\");\n\t }\n\t data.readLong(); // version\n\t var numFonts = data.readLong();\n\t for (var i = 0; i < numFonts; ++i) {\n\t offset = data.readLong();\n\t data.saveExcursion(parse);\n\t if (self.psName == name) {\n\t return;\n\t }\n\t }\n\t throw new Error(\"Font \" + name + \" not found in collection\");\n\t } else {\n\t data.offset(0);\n\t self.parse();\n\t }\n\t};\n\n\tTTFFont.prototype.parse = function parse () {\n\t var dir = this.directory = new Directory(this.contents);\n\n\t this.head = dir.readTable(\"head\", HeadTable);\n\t this.loca = dir.readTable(\"loca\", LocaTable);\n\t this.hhea = dir.readTable(\"hhea\", HheaTable);\n\t this.maxp = dir.readTable(\"maxp\", MaxpTable);\n\t this.hmtx = dir.readTable(\"hmtx\", HmtxTable);\n\t this.glyf = dir.readTable(\"glyf\", GlyfTable);\n\t this.name = dir.readTable(\"name\", NameTable);\n\t this.post = dir.readTable(\"post\", PostTable);\n\t this.cmap = dir.readTable(\"cmap\", CmapTable);\n\t this.os2 = dir.readTable(\"OS/2\", OS2Table);\n\n\t this.psName = this.name.postscriptName;\n\t this.ascent = this.os2.ascent || this.hhea.ascent;\n\t this.descent = this.os2.descent || this.hhea.descent;\n\t this.lineGap = this.os2.lineGap || this.hhea.lineGap;\n\t this.scale = 1000 / this.head.unitsPerEm;\n\t};\n\n\tTTFFont.prototype.widthOfGlyph = function widthOfGlyph (glyph) {\n\t return this.hmtx.forGlyph(glyph).advance * this.scale;\n\t};\n\n\tTTFFont.prototype.makeSubset = function makeSubset () {\n\t return new Subfont(this);\n\t};\n\n\tvar fromCharCode = String.fromCharCode;\n\n\tvar BOM = '\\xfe\\xff';\n\n\t// Encodes a string as UTF-8\n\n\tfunction encodeUnit(codeUnit) {\n\t return fromCharCode(codeUnit >> 8) + fromCharCode(codeUnit & 0x00ff);\n\t}\n\n\t// Encodes a string as UTF-16 big-endian\n\tfunction encodeUTF16BE(input) {\n\t var output = '';\n\n\t for (var i = 0; i < input.length; i++) {\n\t var c = input.charCodeAt(i);\n\n\t if (c < 0xFFFF) {\n\t output += encodeUnit(c);\n\t } else {\n\t var lead = ((c - 0x10000) >> 10) + 0xD800;\n\t var trail = ((c - 0x10000) & 0x3FF) + 0xDC00;\n\t output += encodeUnit(lead);\n\t output += encodeUnit(trail);\n\t }\n\t }\n\n\t return output;\n\t}\n\n\t/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n\t/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n\t/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n\t/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n\tvar browser = kendo.support.browser;\n\tvar NL = \"\\n\";\n\n\tvar RESOURCE_COUNTER = 0;\n\n\tvar PAPER_SIZE = {\n\t a0 : [ 2383.94 , 3370.39 ],\n\t a1 : [ 1683.78 , 2383.94 ],\n\t a2 : [ 1190.55 , 1683.78 ],\n\t a3 : [ 841.89 , 1190.55 ],\n\t a4 : [ 595.28 , 841.89 ],\n\t a5 : [ 419.53 , 595.28 ],\n\t a6 : [ 297.64 , 419.53 ],\n\t a7 : [ 209.76 , 297.64 ],\n\t a8 : [ 147.40 , 209.76 ],\n\t a9 : [ 104.88 , 147.40 ],\n\t a10 : [ 73.70 , 104.88 ],\n\t b0 : [ 2834.65 , 4008.19 ],\n\t b1 : [ 2004.09 , 2834.65 ],\n\t b2 : [ 1417.32 , 2004.09 ],\n\t b3 : [ 1000.63 , 1417.32 ],\n\t b4 : [ 708.66 , 1000.63 ],\n\t b5 : [ 498.90 , 708.66 ],\n\t b6 : [ 354.33 , 498.90 ],\n\t b7 : [ 249.45 , 354.33 ],\n\t b8 : [ 175.75 , 249.45 ],\n\t b9 : [ 124.72 , 175.75 ],\n\t b10 : [ 87.87 , 124.72 ],\n\t c0 : [ 2599.37 , 3676.54 ],\n\t c1 : [ 1836.85 , 2599.37 ],\n\t c2 : [ 1298.27 , 1836.85 ],\n\t c3 : [ 918.43 , 1298.27 ],\n\t c4 : [ 649.13 , 918.43 ],\n\t c5 : [ 459.21 , 649.13 ],\n\t c6 : [ 323.15 , 459.21 ],\n\t c7 : [ 229.61 , 323.15 ],\n\t c8 : [ 161.57 , 229.61 ],\n\t c9 : [ 113.39 , 161.57 ],\n\t c10 : [ 79.37 , 113.39 ],\n\t executive : [ 521.86 , 756.00 ],\n\t folio : [ 612.00 , 936.00 ],\n\t legal : [ 612.00 , 1008.00 ],\n\t letter : [ 612.00 , 792.00 ],\n\t tabloid : [ 792.00 , 1224.00 ]\n\t};\n\n\tfunction makeOutput() {\n\t var indentLevel = 0, output = BinaryStream();\n\t function out() {\n\t var arguments$1 = arguments;\n\n\t for (var i = 0; i < arguments.length; ++i) {\n\t var x = arguments$1[i];\n\t if (x === undefined) {\n\t throw new Error(\"Cannot output undefined to PDF\");\n\t }\n\t else if (x instanceof PDFValue) {\n\t x.beforeRender(out);\n\t x.render(out);\n\t }\n\t else if (isArray(x)) {\n\t renderArray(x, out);\n\t }\n\t else if (isDate(x)) {\n\t renderDate(x, out);\n\t }\n\t else if (typeof x == \"number\") {\n\t if (isNaN(x)) {\n\t throw new Error(\"Cannot output NaN to PDF\");\n\t }\n\t // make sure it doesn't end up in exponent notation\n\t var num = x.toFixed(7);\n\t if (num.indexOf(\".\") >= 0) {\n\t num = num.replace(/\\.?0+$/, \"\");\n\t }\n\t if (num == \"-0\") {\n\t num = \"0\";\n\t }\n\t output.writeString(num);\n\t }\n\t else if (/string|boolean/.test(typeof x)) {\n\t output.writeString(String(x));\n\t }\n\t else if (typeof x.get == \"function\") {\n\t output.write(x.get());\n\t }\n\t else if (typeof x == \"object\") {\n\t if (!x) {\n\t output.writeString(\"null\");\n\t } else {\n\t out(new PDFDictionary(x));\n\t }\n\t }\n\t }\n\t }\n\t out.writeData = function(data) {\n\t output.write(data);\n\t };\n\t out.withIndent = function(f) {\n\t ++indentLevel;\n\t f(out);\n\t --indentLevel;\n\t };\n\t out.indent = function() {\n\t out(NL, pad(\"\", indentLevel * 2, \" \"));\n\t out.apply(null, arguments);\n\t };\n\t out.offset = function() {\n\t return output.offset();\n\t };\n\t out.toString = function() {\n\t throw new Error(\"FIX CALLER\");\n\t };\n\t out.get = function() {\n\t return output.get();\n\t };\n\t out.stream = function() {\n\t return output;\n\t };\n\t return out;\n\t}\n\n\tfunction wrapObject(value, id) {\n\t var beforeRender = value.beforeRender;\n\t var renderValue = value.render;\n\n\t value.beforeRender = function(){};\n\n\t value.render = function(out) {\n\t out(id, \" 0 R\");\n\t };\n\n\t value.renderFull = function(out) {\n\t value._offset = out.offset();\n\t out(id, \" 0 obj \");\n\t beforeRender.call(value, out);\n\t renderValue.call(value, out);\n\t out(\" endobj\");\n\t };\n\t}\n\n\tfunction getPaperOptions(getOption) {\n\t if (typeof getOption != \"function\") {\n\t var options = getOption;\n\t getOption = function(key, def) {\n\t return key in options ? options[key] : def;\n\t };\n\t }\n\t var paperSize = getOption(\"paperSize\", PAPER_SIZE.a4);\n\t if (!paperSize) {\n\t return {};\n\t }\n\t if (typeof paperSize == \"string\") {\n\t paperSize = PAPER_SIZE[paperSize.toLowerCase()];\n\t if (paperSize == null) {\n\t throw new Error(\"Unknown paper size\");\n\t }\n\t }\n\n\t paperSize[0] = unitsToPoints(paperSize[0]);\n\t paperSize[1] = unitsToPoints(paperSize[1]);\n\n\t if (getOption(\"landscape\", false)) {\n\t paperSize = [\n\t Math.max(paperSize[0], paperSize[1]),\n\t Math.min(paperSize[0], paperSize[1])\n\t ];\n\t }\n\n\t var margin = getOption(\"margin\");\n\t if (margin) {\n\t if (typeof margin == \"string\" || typeof margin == \"number\") {\n\t margin = unitsToPoints(margin, 0);\n\t margin = { left: margin, top: margin, right: margin, bottom: margin };\n\t } else {\n\t margin = {\n\t left : unitsToPoints(margin.left, 0),\n\t top : unitsToPoints(margin.top, 0),\n\t right : unitsToPoints(margin.right, 0),\n\t bottom : unitsToPoints(margin.bottom, 0)\n\t };\n\t }\n\t if (getOption(\"addMargin\")) {\n\t paperSize[0] += margin.left + margin.right;\n\t paperSize[1] += margin.top + margin.bottom;\n\t }\n\t }\n\t return { paperSize: paperSize, margin: margin };\n\t}\n\n\tvar FONT_CACHE = {\n\t \"Times-Roman\" : true,\n\t \"Times-Bold\" : true,\n\t \"Times-Italic\" : true,\n\t \"Times-BoldItalic\" : true,\n\t \"Helvetica\" : true,\n\t \"Helvetica-Bold\" : true,\n\t \"Helvetica-Oblique\" : true,\n\t \"Helvetica-BoldOblique\" : true,\n\t \"Courier\" : true,\n\t \"Courier-Bold\" : true,\n\t \"Courier-Oblique\" : true,\n\t \"Courier-BoldOblique\" : true,\n\t \"Symbol\" : true,\n\t \"ZapfDingbats\" : true\n\t};\n\n\tfunction loadBinary(url, cont) {\n\t // IE throws Accesss denied error for Data URIs\n\t var m;\n\t if (browser.msie && (m = /^data:.*?;base64,/i.exec(url))) {\n\t cont(base64ToUint8Array(url.substr(m[0].length)));\n\t return;\n\t }\n\n\t function error() {\n\t if (window.console) {\n\t if (window.console.error) {\n\t window.console.error(\"Cannot load URL: %s\", url);\n\t } else {\n\t window.console.log(\"Cannot load URL: %s\", url);\n\t }\n\t }\n\t cont(null);\n\t }\n\t var req = new XMLHttpRequest();\n\t req.open('GET', url, true);\n\t if (HAS_TYPED_ARRAYS) {\n\t req.responseType = \"arraybuffer\";\n\t }\n\t req.onload = function() {\n\t if (req.status == 200 || req.status == 304) {\n\t if (HAS_TYPED_ARRAYS) {\n\t cont(new Uint8Array(req.response));\n\t } else {\n\t cont(new window.VBArray(req.responseBody).toArray()); // IE9 only\n\t }\n\t } else {\n\t error();\n\t }\n\t };\n\t req.onerror = error;\n\t req.send(null);\n\t}\n\n\tfunction loadFont(url, cont) {\n\t var font = FONT_CACHE[url];\n\t if (font) {\n\t cont(font);\n\t } else {\n\t loadBinary(url, function(data){\n\t if (data == null) {\n\t throw new Error(\"Cannot load font from \" + url);\n\t } else {\n\t var font = new TTFFont(data);\n\t FONT_CACHE[url] = font;\n\t cont(font);\n\t }\n\t });\n\t }\n\t}\n\n\tvar IMAGE_CACHE = {};\n\n\tfunction clearImageCache() {\n\t IMAGE_CACHE = {};\n\t}\n\n\tfunction loadImage(url, size, cont, options) {\n\t var img = IMAGE_CACHE[url], bloburl, blob;\n\t if (img) {\n\t cont(img);\n\t } else {\n\t img = new Image();\n\t if (!(/^data:/i.test(url))) {\n\t img.crossOrigin = \"Anonymous\";\n\t }\n\t if (HAS_TYPED_ARRAYS && !(/^data:/i.test(url))) {\n\t // IE10 fails to load images from another domain even when the server sends the\n\t // proper CORS headers. a XHR, however, will be able to load the data.\n\t // http://stackoverflow.com/a/19734516/154985\n\t //\n\t // On the other hand, it's worth doing it this way for all browsers which support\n\t // responseType = \"blob\" (HAS_TYPED_ARRAYS will be true), because we can inspect the\n\t // mime type and if it's a JPEG (very common case) we can save a lot of time in\n\t // _load below.\n\t var xhr = new XMLHttpRequest();\n\t xhr.onload = function() {\n\t blob = xhr.response;\n\t bloburl = URL.createObjectURL(blob);\n\t _load(bloburl);\n\t };\n\t xhr.onerror = _onerror;\n\t xhr.open(\"GET\", url, true);\n\t xhr.responseType = \"blob\";\n\t xhr.send();\n\t } else {\n\t _load(url);\n\t }\n\t }\n\n\t function _load(url) {\n\t img.src = url;\n\t if (img.complete && !browser.msie) {\n\t // IE, bless it's little heart, says img.complete == true even though the image is\n\t // not loaded (width=0), therefore we must go the onload route (ticket 929635).\n\t _onload.call(img);\n\t } else {\n\t img.onload = _onload;\n\t img.onerror = _onerror;\n\t }\n\t }\n\n\t function _trycanvas() {\n\t if (!size) {\n\t size = { width: img.width, height: img.height };\n\t }\n\n\t var canvas = document.createElement(\"canvas\");\n\t canvas.width = size.width;\n\t canvas.height = size.height;\n\n\t var ctx = canvas.getContext(\"2d\");\n\t ctx.drawImage(img, 0, 0, size.width, size.height);\n\n\t var imgdata;\n\t try {\n\t imgdata = ctx.getImageData(0, 0, size.width, size.height);\n\t } catch (ex) {\n\t // it tainted the canvas -- can't draw it.\n\t _onerror();\n\t return;\n\t } finally {\n\t if (bloburl) {\n\t URL.revokeObjectURL(bloburl);\n\t }\n\t }\n\n\t // in case it contains transparency, we must separate rgb data from the alpha\n\t // channel and create a PDFRawImage image with opacity. otherwise we can use a\n\t // PDFJpegImage.\n\t //\n\t // to do this in one step, we create the rgb and alpha streams anyway, even if\n\t // we might end up not using them if hasAlpha remains false.\n\n\t var hasAlpha = false, rgb = BinaryStream(), alpha = BinaryStream();\n\t var rawbytes = imgdata.data;\n\t var i = 0;\n\t while (i < rawbytes.length) {\n\t rgb.writeByte(rawbytes[i++]);\n\t rgb.writeByte(rawbytes[i++]);\n\t rgb.writeByte(rawbytes[i++]);\n\t var a = rawbytes[i++];\n\t if (a < 255) {\n\t hasAlpha = true;\n\t }\n\t alpha.writeByte(a);\n\t }\n\n\t if (hasAlpha || options.keepPNG) {\n\t img = new PDFRawImage(size.width, size.height, rgb, alpha);\n\t } else {\n\t // no transparency, encode as JPEG.\n\t var data = canvas.toDataURL(\"image/jpeg\", options.jpegQuality);\n\t data = data.substr(data.indexOf(\";base64,\") + 8);\n\n\t var stream = BinaryStream();\n\t stream.writeBase64(data);\n\t img = new PDFJpegImage(stream);\n\t }\n\n\t cont(IMAGE_CACHE[url] = img);\n\t }\n\n\t function _onerror() {\n\t cont(IMAGE_CACHE[url] = \"ERROR\");\n\t }\n\n\t function _onload() {\n\t if (size) {\n\t var svg = (blob && blob.type === 'image/svg+xml') || (\n\t /^data:image\\/svg\\+xml;/i.test(this.src.substring(0, 19))\n\t );\n\n\t var upscale = size.width >= img.width || size.height >= img.height;\n\n\t // Use the original image if requested size is bigger than the source,\n\t // unless it's an SVG that can be upscaled.\n\t if (!svg && upscale) {\n\t size = null;\n\t }\n\t }\n\t if (!size && blob && /^image\\/jpe?g$/i.test(blob.type)) {\n\t // If we know we got a JPEG, we can skip the process of rendering it to a\n\t // canvas, getting the pixel data, searching for transparency we know we won't\n\t // find, getting back a data URI and then decoding the BASE64 to finally get the\n\t // binary we already have. Also, we avoid downgrading the image quality, with\n\t // the possible drawback of making a bigger PDF; still, seems legit.\n\t //\n\t // Besides saving a lot of work, this also reuses the buffer memory\n\t // (BinaryStream does not create a copy), potentially saving some GC cycles.\n\t var reader = new FileReader();\n\t reader.onload = function() {\n\t try {\n\t var img = new PDFJpegImage(BinaryStream(new Uint8Array(this.result)));\n\t URL.revokeObjectURL(bloburl);\n\t cont(IMAGE_CACHE[url] = img);\n\t } catch (ex) {\n\t // if there's an error parsing the JPEG stream, it could be due to a\n\t // misconfigured server (improper content-type:\n\t // https://github.com/telerik/kendo-ui-core/issues/4184). If that's the case,\n\t // the canvas will still be able to draw it.\n\t _trycanvas();\n\t }\n\t };\n\t reader.readAsArrayBuffer(blob);\n\t } else {\n\t _trycanvas();\n\t }\n\t }\n\t}\n\n\tfunction manyLoader(loadOne) {\n\t return function(urls, callback) {\n\t var n = urls.length, i = n;\n\t if (n === 0) {\n\t return callback();\n\t }\n\t function next() {\n\t if (--n === 0) {\n\t callback();\n\t }\n\t }\n\t while (i-- > 0) {\n\t loadOne(urls[i], next);\n\t }\n\t };\n\t}\n\n\tvar loadFonts = manyLoader(loadFont);\n\tvar loadImages = function(images, callback, options) {\n\t options = $.extend({\n\t jpegQuality : 0.92,\n\t keepPNG : false\n\t }, options);\n\t var urls = Object.keys(images), n = urls.length;\n\t if (n === 0) {\n\t return callback();\n\t }\n\t function next() {\n\t if (--n === 0) {\n\t callback();\n\t }\n\t }\n\t urls.forEach(function(url){\n\t loadImage(url, images[url], next, options);\n\t });\n\t};\n\n\tvar PDFDocument = function PDFDocument (options) {\n\t var self = this;\n\t var out = makeOutput();\n\t var objcount = 0;\n\t var objects = [];\n\n\t function getOption(name, defval) {\n\t return (options && options[name] != null) ? options[name] : defval;\n\t }\n\n\t self.getOption = getOption;\n\n\t self.attach = function(value) {\n\t if (objects.indexOf(value) < 0) {\n\t wrapObject(value, ++objcount);\n\t objects.push(value);\n\t }\n\t return value;\n\t };\n\n\t self.pages = [];\n\n\t self.FONTS = {};\n\t self.IMAGES = {};\n\t self.GRAD_COL_FUNCTIONS = {}; // cache for color gradient functions\n\t self.GRAD_OPC_FUNCTIONS = {}; // cache for opacity gradient functions\n\t self.GRAD_COL = {}; // cache for whole color gradient objects\n\t self.GRAD_OPC = {}; // cache for whole opacity gradient objects\n\n\t var catalog = self.attach(new PDFCatalog());\n\t var pageTree = self.attach(new PDFPageTree());\n\n\t if (getOption(\"autoPrint\")) {\n\t var nameTree = {};\n\t nameTree.JavaScript = new PDFDictionary({ Names: [\n\t new PDFString(\"JS\"), self.attach(new PDFDictionary({\n\t S: _(\"JavaScript\"),\n\t JS: new PDFString(\"print(true);\")\n\t }))\n\t ] });\n\t catalog.props.Names = new PDFDictionary(nameTree);\n\t }\n\n\t catalog.setPages(pageTree);\n\n\t var info = self.attach(new PDFDictionary({\n\t Producer : new PDFString(getOption(\"producer\", \"Kendo UI PDF Generator\"), true), // XXX: kendo.version?\n\t Title : new PDFString(getOption(\"title\", \"\"), true),\n\t Author : new PDFString(getOption(\"author\", \"\"), true),\n\t Subject : new PDFString(getOption(\"subject\", \"\"), true),\n\t Keywords : new PDFString(getOption(\"keywords\", \"\"), true),\n\t Creator : new PDFString(getOption(\"creator\", \"Kendo UI PDF Generator\"), true),\n\t CreationDate : getOption(\"date\", new Date())\n\t }));\n\n\t self.addPage = function(options) {\n\t var paperOptions = getPaperOptions(function(name, defval){\n\t return (options && options[name] != null) ? options[name] : defval;\n\t });\n\t var paperSize = paperOptions.paperSize;\n\t var margin = paperOptions.margin;\n\t var contentWidth = paperSize[0];\n\t var contentHeight = paperSize[1];\n\t if (margin) {\n\t contentWidth -= margin.left + margin.right;\n\t contentHeight -= margin.top + margin.bottom;\n\t }\n\t var content = new PDFStream(makeOutput(), null, true);\n\t var props = {\n\t Contents : self.attach(content),\n\t Parent : pageTree,\n\t MediaBox : [ 0, 0, paperSize[0], paperSize[1] ]\n\t };\n\t var page = new PDFPage(self, props);\n\t page._content = content;\n\t pageTree.addPage(self.attach(page));\n\n\t // canvas-like coord. system. (0,0) is upper-left.\n\t // text must be vertically mirorred before drawing.\n\t page.transform(1, 0, 0, -1, 0, paperSize[1]);\n\n\t if (margin) {\n\t page.translate(margin.left, margin.top);\n\t // XXX: clip to right/bottom margin. Make this optional?\n\t page.rect(0, 0, contentWidth, contentHeight);\n\t page.clip();\n\t }\n\n\t self.pages.push(page);\n\t return page;\n\t };\n\n\t self.render = function() {\n\t var i;\n\t /// file header\n\t out(\"%PDF-1.4\", NL, \"%\\xc2\\xc1\\xda\\xcf\\xce\", NL, NL);\n\n\t /// file body\n\t for (i = 0; i < objects.length; ++i) {\n\t objects[i].renderFull(out);\n\t out(NL, NL);\n\t }\n\n\t /// cross-reference table\n\t var xrefOffset = out.offset();\n\t out(\"xref\", NL, 0, \" \", objects.length + 1, NL);\n\t out(\"0000000000 65535 f \", NL);\n\t for (i = 0; i < objects.length; ++i) {\n\t out(zeropad(objects[i]._offset, 10), \" 00000 n \", NL);\n\t }\n\t out(NL);\n\n\t /// trailer\n\t out(\"trailer\", NL);\n\t out(new PDFDictionary({\n\t Size: objects.length + 1,\n\t Root: catalog,\n\t Info: info\n\t }), NL, NL);\n\n\t /// end\n\t out(\"startxref\", NL, xrefOffset, NL);\n\t out(\"%%EOF\", NL);\n\n\t return out.stream().offset(0);\n\t };\n\n\t self.loadFonts = loadFonts;\n\t self.loadImages = loadImages;\n\t};\n\n\tPDFDocument.prototype.getFont = function getFont (url) {\n\t var font = this.FONTS[url];\n\t if (!font) {\n\t font = FONT_CACHE[url];\n\t if (!font) {\n\t throw new Error(\"Font \" + url + \" has not been loaded\");\n\t }\n\t if (font === true) {\n\t font = this.attach(new PDFStandardFont(url));\n\t } else {\n\t font = this.attach(new PDFFont(this, font));\n\t }\n\t this.FONTS[url] = font;\n\t }\n\t return font;\n\t};\n\n\tPDFDocument.prototype.getImage = function getImage (url) {\n\t var img = this.IMAGES[url];\n\t if (!img) {\n\t img = IMAGE_CACHE[url];\n\t if (!img) {\n\t throw new Error(\"Image \" + url + \" has not been loaded\");\n\t }\n\t if (img === \"ERROR\") {\n\t return null;\n\t }\n\t img = this.IMAGES[url] = this.attach(img.asStream(this));\n\t }\n\t return img;\n\t};\n\n\tPDFDocument.prototype.getOpacityGS = function getOpacityGS (opacity, forStroke) {\n\t var id = parseFloat(opacity).toFixed(3);\n\t opacity = parseFloat(id);\n\t id += forStroke ? \"S\" : \"F\";\n\t var cache = this._opacityGSCache || (this._opacityGSCache = {});\n\t var gs = cache[id];\n\t if (!gs) {\n\t var props = {\n\t Type: _(\"ExtGState\")\n\t };\n\t if (forStroke) {\n\t props.CA = opacity;\n\t } else {\n\t props.ca = opacity;\n\t }\n\t gs = this.attach(new PDFDictionary(props));\n\t gs._resourceName = _(\"GS\" + (++RESOURCE_COUNTER));\n\t cache[id] = gs;\n\t }\n\t return gs;\n\t};\n\n\tPDFDocument.prototype.dict = function dict (props) {\n\t return new PDFDictionary(props);\n\t};\n\n\tPDFDocument.prototype.name = function name (str) {\n\t return _(str);\n\t};\n\n\tPDFDocument.prototype.stream = function stream (props, content) {\n\t return new PDFStream(content, props);\n\t};\n\n\t/* -----[ utils ]----- */\n\n\tfunction pad(str, len, ch) {\n\t while (str.length < len) {\n\t str = ch + str;\n\t }\n\t return str;\n\t}\n\n\tfunction zeropad(n, len) {\n\t return pad(String(n), len, \"0\");\n\t}\n\n\tfunction hasOwnProperty(obj, key) {\n\t return Object.prototype.hasOwnProperty.call(obj, key);\n\t}\n\n\tvar isArray = Array.isArray || function(obj) {\n\t return obj instanceof Array;\n\t};\n\n\tfunction isDate(obj) {\n\t return obj instanceof Date;\n\t}\n\n\tfunction renderArray(a, out) {\n\t out(\"[\");\n\t if (a.length > 0) {\n\t out.withIndent(function(){\n\t for (var i = 0; i < a.length; ++i) {\n\t if (i > 0 && i % 8 === 0) {\n\t out.indent(a[i]);\n\t } else {\n\t out(\" \", a[i]);\n\t }\n\t }\n\t });\n\t //out.indent();\n\t }\n\t out(\" ]\");\n\t}\n\n\tfunction renderDate(date, out) {\n\t out(\"(D:\",\n\t zeropad(date.getUTCFullYear(), 4),\n\t zeropad(date.getUTCMonth() + 1, 2),\n\t zeropad(date.getUTCDate(), 2),\n\t zeropad(date.getUTCHours(), 2),\n\t zeropad(date.getUTCMinutes(), 2),\n\t zeropad(date.getUTCSeconds(), 2),\n\t \"Z)\");\n\t}\n\n\tfunction mm2pt(mm) {\n\t return mm * (72/25.4);\n\t}\n\n\tfunction cm2pt(cm) {\n\t return mm2pt(cm * 10);\n\t}\n\n\tfunction in2pt(inch) {\n\t return inch * 72;\n\t}\n\n\tfunction unitsToPoints(x, def) {\n\t if (typeof x == \"number\") {\n\t return x;\n\t }\n\t if (typeof x == \"string\") {\n\t var m;\n\t m = /^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(x);\n\t if (m) {\n\t var num = parseFloat(m[1]);\n\t if (!isNaN(num)) {\n\t if (m[2] == \"pt\") {\n\t return num;\n\t }\n\t return {\n\t \"mm\": mm2pt,\n\t \"cm\": cm2pt,\n\t \"in\": in2pt\n\t }[m[2]](num);\n\t }\n\t }\n\t }\n\t if (def != null) {\n\t return def;\n\t }\n\t throw new Error(\"Can't parse unit: \" + x);\n\t}\n\n\t/* -----[ PDF basic objects ]----- */\n\n\tvar PDFValue = function PDFValue () {};\n\n\tPDFValue.prototype.beforeRender = function beforeRender () {};\n\n\tvar PDFString = (function (PDFValue) {\n\t function PDFString(value, utf16be) {\n\t PDFValue.call(this);\n\t this.value = value;\n\t this.utf16be = Boolean(utf16be);\n\t }\n\n\t extendStatic(PDFString, PDFValue);\n\t PDFString.prototype = Object.create( PDFValue && PDFValue.prototype );\n\t PDFString.prototype.constructor = PDFString;\n\t PDFString.fn = PDFString.prototype;\n\t PDFString.fn.init = PDFString.fn.constructor;\n\n\t PDFString.prototype.render = function render (out) {\n\t var txt = this.value;\n\t if (this.utf16be) {\n\t txt = BOM + encodeUTF16BE(txt);\n\t txt = txt.replace(/([\\(\\)\\\\])/g, \"\\\\$1\");\n\t out(\"(\", txt, \")\");\n\t } else {\n\t // out.writeString truncates charcodes to 8 bits and\n\t // 0x128 & 0xFF is 40, the code for open paren.\n\t // therefore we need to do the chopping here to make\n\t // sure we backslash all cases.\n\t var data = [ 40 ]; // open PDF string '('\n\t for (var i = 0; i < txt.length; ++i) {\n\t var code = txt.charCodeAt(i) & 0xFF;\n\t if (code == 40 || code == 41 || code == 92) {\n\t // backslash before (, ) and \\\n\t data.push(92);\n\t }\n\t data.push(code);\n\t }\n\t data.push(41); // ')' close PDF string\n\t out.writeData(data);\n\t }\n\t };\n\n\t PDFString.prototype.toString = function toString () {\n\t return this.value;\n\t };\n\n\t return PDFString;\n\t}(PDFValue));\n\n\tvar PDFHexString = (function (PDFString) {\n\t function PDFHexString(value) {\n\t PDFString.call(this, value);\n\t this.value = value;\n\t }\n\n\t extendStatic(PDFHexString, PDFString);\n\t PDFHexString.prototype = Object.create( PDFString && PDFString.prototype );\n\t PDFHexString.prototype.constructor = PDFHexString;\n\t PDFHexString.fn = PDFHexString.prototype;\n\t PDFHexString.fn.init = PDFHexString.fn.constructor;\n\n\t PDFHexString.prototype.render = function render (out) {\n\t var this$1 = this;\n\n\t out(\"<\");\n\t for (var i = 0; i < this.value.length; ++i) {\n\t out(zeropad(this$1.value.charCodeAt(i).toString(16), 4));\n\t }\n\t out(\">\");\n\t };\n\n\t return PDFHexString;\n\t}(PDFString));\n\n\t/// names\n\tvar PDFName = (function (PDFValue) {\n\t function PDFName(name) {\n\t PDFValue.call(this);\n\t this.name = name;\n\t }\n\n\t extendStatic(PDFName, PDFValue);\n\t PDFName.prototype = Object.create( PDFValue && PDFValue.prototype );\n\t PDFName.prototype.constructor = PDFName;\n\t PDFName.fn = PDFName.prototype;\n\t PDFName.fn.init = PDFName.fn.constructor;\n\n\t PDFName.get = function get (name) {\n\t return _(name);\n\t };\n\n\t PDFName.prototype.render = function render (out) {\n\t out(\"/\" + this.escape());\n\t };\n\n\t PDFName.prototype.escape = function escape () {\n\t return this.name.replace(/[^\\x21-\\x7E]/g, function(c){\n\t return \"#\" + zeropad(c.charCodeAt(0).toString(16), 2);\n\t });\n\t };\n\n\t PDFName.prototype.toString = function toString () {\n\t return this.name;\n\t };\n\n\t return PDFName;\n\t}(PDFValue));\n\n\tvar PDFName_cache = {};\n\n\tfunction _(name) {\n\t if (hasOwnProperty(PDFName_cache, name)) {\n\t return PDFName_cache[name];\n\t }\n\t return (PDFName_cache[name] = new PDFName(name));\n\t}\n\n\t/// dictionary\n\n\tvar PDFDictionary = (function (PDFValue) {\n\t function PDFDictionary(props) {\n\t PDFValue.call(this);\n\t this.props = props;\n\t }\n\n\t extendStatic(PDFDictionary, PDFValue);\n\t PDFDictionary.prototype = Object.create( PDFValue && PDFValue.prototype );\n\t PDFDictionary.prototype.constructor = PDFDictionary;\n\t PDFDictionary.fn = PDFDictionary.prototype;\n\t PDFDictionary.fn.init = PDFDictionary.fn.constructor;\n\n\t PDFDictionary.prototype.render = function render (out) {\n\t var props = this.props, empty = true;\n\t out(\"<<\");\n\t out.withIndent(function(){\n\t for (var i in props) {\n\t if (hasOwnProperty(props, i) && !/^_/.test(i)) {\n\t empty = false;\n\t out.indent(_(i), \" \", props[i]);\n\t }\n\t }\n\t });\n\t if (!empty) {\n\t out.indent();\n\t }\n\t out(\">>\");\n\t };\n\n\t return PDFDictionary;\n\t}(PDFValue));\n\n\t/// streams\n\n\tvar PDFStream = (function (PDFValue) {\n\t function PDFStream(data, props, compress) {\n\t PDFValue.call(this);\n\t if (typeof data == \"string\") {\n\t var tmp = BinaryStream();\n\t tmp.write(data);\n\t data = tmp;\n\t }\n\t this.data = data;\n\t this.props = props || {};\n\t this.compress = compress;\n\t }\n\n\t extendStatic(PDFStream, PDFValue);\n\t PDFStream.prototype = Object.create( PDFValue && PDFValue.prototype );\n\t PDFStream.prototype.constructor = PDFStream;\n\t PDFStream.fn = PDFStream.prototype;\n\t PDFStream.fn.init = PDFStream.fn.constructor;\n\n\t PDFStream.prototype.render = function render (out) {\n\t var data = this.data.get(), props = this.props;\n\t if (this.compress && kendoPdf.supportsDeflate()) {\n\t if (!props.Filter) {\n\t props.Filter = [];\n\t } else if (!(props.Filter instanceof Array)) {\n\t props.Filter = [ props.Filter ];\n\t }\n\t props.Filter.unshift(_(\"FlateDecode\"));\n\t data = kendoPdf.deflate(data);\n\t }\n\t props.Length = data.length;\n\t out(new PDFDictionary(props), \" stream\", NL);\n\t out.writeData(data);\n\t out(NL, \"endstream\");\n\t };\n\n\t return PDFStream;\n\t}(PDFValue));\n\n\t/// catalog\n\n\tvar PDFCatalog = (function (PDFDictionary) {\n\t function PDFCatalog() {\n\t PDFDictionary.call(this, {\n\t Type: _(\"Catalog\")\n\t });\n\t }\n\n\t extendStatic(PDFCatalog, PDFDictionary);\n\t PDFCatalog.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n\t PDFCatalog.prototype.constructor = PDFCatalog;\n\t PDFCatalog.fn = PDFCatalog.prototype;\n\t PDFCatalog.fn.init = PDFCatalog.fn.constructor;\n\n\t PDFCatalog.prototype.setPages = function setPages (pagesObj) {\n\t this.props.Pages = pagesObj;\n\t };\n\n\t return PDFCatalog;\n\t}(PDFDictionary));\n\n\t/// page tree\n\n\tvar PDFPageTree = (function (PDFDictionary) {\n\t function PDFPageTree() {\n\t PDFDictionary.call(this, {\n\t Type : _(\"Pages\"),\n\t Kids : [],\n\t Count : 0\n\t });\n\t }\n\n\t extendStatic(PDFPageTree, PDFDictionary);\n\t PDFPageTree.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n\t PDFPageTree.prototype.constructor = PDFPageTree;\n\t PDFPageTree.fn = PDFPageTree.prototype;\n\t PDFPageTree.fn.init = PDFPageTree.fn.constructor;\n\n\t PDFPageTree.prototype.addPage = function addPage (pageObj) {\n\t this.props.Kids.push(pageObj);\n\t this.props.Count++;\n\t };\n\n\t return PDFPageTree;\n\t}(PDFDictionary));\n\n\t/// images\n\n\t// JPEG\n\n\tvar SOF_CODES = [0xc0, 0xc1, 0xc2, 0xc3, 0xc5, 0xc6, 0xc7, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf];\n\n\tvar PDFJpegImage = function PDFJpegImage(data) {\n\t // we must determine the correct color space. we'll parse a bit\n\t // of the JPEG stream for this, it's still better than going\n\t // through the canvas.\n\t // https://github.com/telerik/kendo-ui-core/issues/2845\n\t data.offset(0);\n\t var width, height, colorSpace, bitsPerComponent;\n\t var soi = data.readShort();\n\t if (soi != 0xFFD8) {\n\t // XXX: do we have some better options here?\n\t throw new Error(\"Invalid JPEG image\");\n\t }\n\t while (!data.eof()) {\n\t var ff = data.readByte();\n\t if (ff != 0xFF) {\n\t throw new Error(\"Invalid JPEG image\");\n\t }\n\t var marker = data.readByte();\n\t var length = data.readShort();\n\t if (SOF_CODES.indexOf(marker) >= 0) {\n\t // \"start of frame\" marker\n\t bitsPerComponent = data.readByte();\n\t height = data.readShort();\n\t width = data.readShort();\n\t colorSpace = data.readByte();\n\t break;\n\t }\n\t data.skip(length - 2);\n\t }\n\n\t if (colorSpace == null) {\n\t throw new Error(\"Invalid JPEG image\");\n\t }\n\n\t var props = {\n\t Type : _(\"XObject\"),\n\t Subtype : _(\"Image\"),\n\t Width : width,\n\t Height : height,\n\t BitsPerComponent : bitsPerComponent,\n\t Filter : _(\"DCTDecode\")\n\t };\n\n\t switch (colorSpace) {\n\t case 1:\n\t props.ColorSpace = _(\"DeviceGray\");\n\t break;\n\t case 3:\n\t props.ColorSpace = _(\"DeviceRGB\");\n\t break;\n\t case 4:\n\t props.ColorSpace = _(\"DeviceCMYK\");\n\t props.Decode = [ 1, 0, 1, 0, 1, 0, 1, 0 ]; // invert colors\n\t break;\n\t }\n\n\t this.asStream = function() {\n\t data.offset(0);\n\t var stream = new PDFStream(data, props);\n\t stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n\t return stream;\n\t };\n\t};\n\n\t// PDFRawImage will be used for images with transparency (PNG)\n\n\tvar PDFRawImage = function PDFRawImage(width, height, rgb, alpha) {\n\t this.asStream = function(pdf) {\n\t var mask = new PDFStream(alpha, {\n\t Type : _(\"XObject\"),\n\t Subtype : _(\"Image\"),\n\t Width : width,\n\t Height : height,\n\t BitsPerComponent : 8,\n\t ColorSpace : _(\"DeviceGray\")\n\t }, true);\n\t var stream = new PDFStream(rgb, {\n\t Type : _(\"XObject\"),\n\t Subtype : _(\"Image\"),\n\t Width : width,\n\t Height : height,\n\t BitsPerComponent : 8,\n\t ColorSpace : _(\"DeviceRGB\"),\n\t SMask : pdf.attach(mask)\n\t }, true);\n\t stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n\t return stream;\n\t };\n\t};\n\n\t/// standard fonts\n\n\tvar PDFStandardFont = (function (PDFDictionary) {\n\t function PDFStandardFont(name){\n\t PDFDictionary.call(this, {\n\t Type : _(\"Font\"),\n\t Subtype : _(\"Type1\"),\n\t BaseFont : _(name)\n\t });\n\n\t this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n\t }\n\n\t extendStatic(PDFStandardFont, PDFDictionary);\n\t PDFStandardFont.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n\t PDFStandardFont.prototype.constructor = PDFStandardFont;\n\t PDFStandardFont.fn = PDFStandardFont.prototype;\n\t PDFStandardFont.fn.init = PDFStandardFont.fn.constructor;\n\n\t PDFStandardFont.prototype.encodeText = function encodeText (str) {\n\t return new PDFString(String(str));\n\t };\n\n\t return PDFStandardFont;\n\t}(PDFDictionary));\n\n\t/// TTF fonts\n\n\tvar PDFFont = (function (PDFDictionary) {\n\t function PDFFont(pdf, font, props){\n\t PDFDictionary.call(this, {});\n\n\t props = this.props;\n\t props.Type = _(\"Font\");\n\t props.Subtype = _(\"Type0\");\n\t props.Encoding = _(\"Identity-H\");\n\n\t this._pdf = pdf;\n\t this._font = font;\n\t this._sub = font.makeSubset();\n\t this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n\n\t var head = font.head;\n\n\t this.name = font.psName;\n\t var scale = this.scale = font.scale;\n\t this.bbox = [\n\t head.xMin * scale,\n\t head.yMin * scale,\n\t head.xMax * scale,\n\t head.yMax * scale\n\t ];\n\n\t this.italicAngle = font.post.italicAngle;\n\t this.ascent = font.ascent * scale;\n\t this.descent = font.descent * scale;\n\t this.lineGap = font.lineGap * scale;\n\t this.capHeight = font.os2.capHeight || this.ascent;\n\t this.xHeight = font.os2.xHeight || 0;\n\t this.stemV = 0;\n\n\t this.familyClass = (font.os2.familyClass || 0) >> 8;\n\t this.isSerif = this.familyClass >= 1 && this.familyClass <= 7;\n\t this.isScript = this.familyClass == 10;\n\n\t this.flags = ((font.post.isFixedPitch ? 1 : 0) |\n\t (this.isSerif ? 1 << 1 : 0) |\n\t (this.isScript ? 1 << 3 : 0) |\n\t (this.italicAngle !== 0 ? 1 << 6 : 0) |\n\t (1 << 5));\n\t }\n\n\t extendStatic(PDFFont, PDFDictionary);\n\t PDFFont.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n\t PDFFont.prototype.constructor = PDFFont;\n\t PDFFont.fn = PDFFont.prototype;\n\t PDFFont.fn.init = PDFFont.fn.constructor;\n\n\t PDFFont.prototype.encodeText = function encodeText (text) {\n\t return new PDFHexString(this._sub.encodeText(String(text)));\n\t };\n\n\t PDFFont.prototype.getTextWidth = function getTextWidth (fontSize, text) {\n\t var this$1 = this;\n\n\t var width = 0, codeMap = this._font.cmap.codeMap;\n\t for (var i = 0; i < text.length; ++i) {\n\t var glyphId = codeMap[text.charCodeAt(i)];\n\t width += this$1._font.widthOfGlyph(glyphId || 0);\n\t }\n\t return width * fontSize / 1000;\n\t };\n\n\t PDFFont.prototype.beforeRender = function beforeRender () {\n\t var self = this;\n\t var sub = self._sub;\n\n\t // write the TTF data\n\t var data = sub.render();\n\t var fontStream = new PDFStream(BinaryStream(data), {\n\t Length1: data.length\n\t }, true);\n\n\t var descriptor = self._pdf.attach(new PDFDictionary({\n\t Type : _(\"FontDescriptor\"),\n\t FontName : _(self._sub.psName),\n\t FontBBox : self.bbox,\n\t Flags : self.flags,\n\t StemV : self.stemV,\n\t ItalicAngle : self.italicAngle,\n\t Ascent : self.ascent,\n\t Descent : self.descent,\n\t CapHeight : self.capHeight,\n\t XHeight : self.xHeight,\n\t FontFile2 : self._pdf.attach(fontStream)\n\t }));\n\n\t var cmap = sub.ncid2ogid;\n\t var firstChar = sub.firstChar;\n\t var lastChar = sub.lastChar;\n\t var charWidths = [];\n\t (function loop(i, chunk){\n\t if (i <= lastChar) {\n\t var gid = cmap[i];\n\t if (gid == null) {\n\t loop(i + 1);\n\t } else {\n\t if (!chunk) {\n\t charWidths.push(i, chunk = []);\n\t }\n\t chunk.push(self._font.widthOfGlyph(gid));\n\t loop(i + 1, chunk);\n\t }\n\t }\n\t })(firstChar);\n\n\t // As if two dictionaries weren't enough, we need another\n\t // one, the \"descendant font\". Only that one can be of\n\t // Subtype CIDFontType2. PDF is the X11 of document\n\t // formats: portable but full of legacy that nobody cares\n\t // about anymore.\n\n\t var descendant = new PDFDictionary({\n\t Type: _(\"Font\"),\n\t Subtype: _(\"CIDFontType2\"),\n\t BaseFont: _(self._sub.psName),\n\t CIDSystemInfo: new PDFDictionary({\n\t Registry : new PDFString(\"Adobe\"),\n\t Ordering : new PDFString(\"Identity\"),\n\t Supplement : 0\n\t }),\n\t FontDescriptor: descriptor,\n\t FirstChar: firstChar,\n\t LastChar: lastChar,\n\t DW: Math.round(self._font.widthOfGlyph(0)),\n\t W: charWidths,\n\t CIDToGIDMap: self._pdf.attach(self._makeCidToGidMap())\n\t });\n\n\t var dict = self.props;\n\t dict.BaseFont = _(self._sub.psName);\n\t dict.DescendantFonts = [ self._pdf.attach(descendant) ];\n\n\t // Compute the ToUnicode map so that apps can extract\n\t // meaningful text from the PDF.\n\t var unimap = new PDFToUnicodeCmap(firstChar, lastChar, sub.subset);\n\t var unimapStream = new PDFStream(makeOutput(), null, true);\n\t unimapStream.data(unimap);\n\t dict.ToUnicode = self._pdf.attach(unimapStream);\n\t };\n\n\t PDFFont.prototype._makeCidToGidMap = function _makeCidToGidMap () {\n\t return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n\t };\n\n\t return PDFFont;\n\t}(PDFDictionary));\n\n\tvar PDFToUnicodeCmap = (function (PDFValue) {\n\t function PDFToUnicodeCmap(firstChar, lastChar, map){\n\t PDFValue.call(this);\n\t this.firstChar = firstChar;\n\t this.lastChar = lastChar;\n\t this.map = map;\n\t }\n\n\t extendStatic(PDFToUnicodeCmap, PDFValue);\n\t PDFToUnicodeCmap.prototype = Object.create( PDFValue && PDFValue.prototype );\n\t PDFToUnicodeCmap.prototype.constructor = PDFToUnicodeCmap;\n\t PDFToUnicodeCmap.fn = PDFToUnicodeCmap.prototype;\n\t PDFToUnicodeCmap.fn.init = PDFToUnicodeCmap.fn.constructor;\n\n\t PDFToUnicodeCmap.prototype.render = function render (out) {\n\t out.indent(\"/CIDInit /ProcSet findresource begin\");\n\t out.indent(\"12 dict begin\");\n\t out.indent(\"begincmap\");\n\t out.indent(\"/CIDSystemInfo <<\");\n\t out.indent(\" /Registry (Adobe)\");\n\t out.indent(\" /Ordering (UCS)\");\n\t out.indent(\" /Supplement 0\");\n\t out.indent(\">> def\");\n\t out.indent(\"/CMapName /Adobe-Identity-UCS def\");\n\t out.indent(\"/CMapType 2 def\");\n\t out.indent(\"1 begincodespacerange\");\n\t out.indent(\" <0000>\");\n\t out.indent(\"endcodespacerange\");\n\n\t var self = this;\n\t out.indent(self.lastChar - self.firstChar + 1, \" beginbfchar\");\n\t out.withIndent(function(){\n\t for (var code = self.firstChar; code <= self.lastChar; ++code) {\n\t var unicode = self.map[code];\n\t var str = ucs2encode([ unicode ]);\n\t out.indent(\"<\", zeropad(code.toString(16), 4), \">\", \"<\");\n\t for (var i = 0; i < str.length; ++i) {\n\t out(zeropad(str.charCodeAt(i).toString(16), 4));\n\t }\n\t out(\">\");\n\t }\n\t });\n\t out.indent(\"endbfchar\");\n\n\t out.indent(\"endcmap\");\n\t out.indent(\"CMapName currentdict /CMap defineresource pop\");\n\t out.indent(\"end\");\n\t out.indent(\"end\");\n\t };\n\n\t return PDFToUnicodeCmap;\n\t}(PDFValue));\n\n\t/// gradients\n\n\tfunction makeHash(a) {\n\t return a.map(function(x){\n\t return isArray(x) ? makeHash(x)\n\t : typeof x == \"number\" ? (Math.round(x * 1000) / 1000).toFixed(3)\n\t : x;\n\t }).join(\" \");\n\t}\n\n\tfunction cacheColorGradientFunction(pdf, r1, g1, b1, r2, g2, b2) {\n\t var hash = makeHash([ r1, g1, b1, r2, g2, b2 ]);\n\t var func = pdf.GRAD_COL_FUNCTIONS[hash];\n\t if (!func) {\n\t func = pdf.GRAD_COL_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n\t FunctionType: 2,\n\t Domain: [ 0, 1 ],\n\t Range: [ 0, 1, 0, 1, 0, 1 ],\n\t N: 1,\n\t C0: [ r1 , g1 , b1 ],\n\t C1: [ r2 , g2 , b2 ]\n\t }));\n\t }\n\t return func;\n\t}\n\n\tfunction cacheOpacityGradientFunction(pdf, a1, a2) {\n\t var hash = makeHash([ a1, a2 ]);\n\t var func = pdf.GRAD_OPC_FUNCTIONS[hash];\n\t if (!func) {\n\t func = pdf.GRAD_OPC_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n\t FunctionType: 2,\n\t Domain: [ 0, 1 ],\n\t Range: [ 0, 1 ],\n\t N: 1,\n\t C0: [ a1 ],\n\t C1: [ a2 ]\n\t }));\n\t }\n\t return func;\n\t}\n\n\tfunction makeGradientFunctions(pdf, stops) {\n\t var hasAlpha = false;\n\t var opacities = [];\n\t var colors = [];\n\t var offsets = [];\n\t var encode = [];\n\t var i, prev, cur, prevColor, curColor;\n\t for (i = 1; i < stops.length; ++i) {\n\t prev = stops[i - 1];\n\t cur = stops[i];\n\t prevColor = prev.color;\n\t curColor = cur.color;\n\t colors.push(cacheColorGradientFunction(\n\t pdf,\n\t prevColor.r, prevColor.g, prevColor.b,\n\t curColor.r, curColor.g, curColor.b\n\t ));\n\t if (prevColor.a < 1 || curColor.a < 1) {\n\t hasAlpha = true;\n\t }\n\t offsets.push(cur.offset);\n\t encode.push(0, 1);\n\t }\n\t if (hasAlpha) {\n\t for (i = 1; i < stops.length; ++i) {\n\t prev = stops[i - 1];\n\t cur = stops[i];\n\t prevColor = prev.color;\n\t curColor = cur.color;\n\t opacities.push(cacheOpacityGradientFunction(\n\t pdf, prevColor.a, curColor.a\n\t ));\n\t }\n\t }\n\t offsets.pop();\n\t return {\n\t hasAlpha : hasAlpha,\n\t colors : assemble(colors),\n\t opacities : hasAlpha ? assemble(opacities) : null\n\t };\n\t function assemble(funcs) {\n\t if (funcs.length == 1) {\n\t return funcs[0];\n\t }\n\t return {\n\t FunctionType: 3,\n\t Functions: funcs,\n\t Domain: [ 0, 1 ],\n\t Bounds: offsets,\n\t Encode: encode\n\t };\n\t }\n\t}\n\n\tfunction cacheColorGradient(pdf, isRadial, stops, coords, funcs, box) {\n\t var shading, hash;\n\t // if box is given then we have user-space coordinates, which\n\t // means the gradient is designed for a certain position/size\n\t // on page. caching won't do any good.\n\t if (!box) {\n\t var a = [ isRadial ].concat(coords);\n\t stops.forEach(function(x){\n\t a.push(x.offset, x.color.r, x.color.g, x.color.b);\n\t });\n\t hash = makeHash(a);\n\t shading = pdf.GRAD_COL[hash];\n\t }\n\t if (!shading) {\n\t shading = new PDFDictionary({\n\t Type: _(\"Shading\"),\n\t ShadingType: isRadial ? 3 : 2,\n\t ColorSpace: _(\"DeviceRGB\"),\n\t Coords: coords,\n\t Domain: [ 0, 1 ],\n\t Function: funcs,\n\t Extend: [ true, true ]\n\t });\n\t pdf.attach(shading);\n\t shading._resourceName = \"S\" + (++RESOURCE_COUNTER);\n\t if (hash) {\n\t pdf.GRAD_COL[hash] = shading;\n\t }\n\t }\n\t return shading;\n\t}\n\n\tfunction cacheOpacityGradient(pdf, isRadial, stops, coords, funcs, box) {\n\t var opacity, hash;\n\t // if box is given then we have user-space coordinates, which\n\t // means the gradient is designed for a certain position/size\n\t // on page. caching won't do any good.\n\t if (!box) {\n\t var a = [ isRadial ].concat(coords);\n\t stops.forEach(function(x){\n\t a.push(x.offset, x.color.a);\n\t });\n\t hash = makeHash(a);\n\t opacity = pdf.GRAD_OPC[hash];\n\t }\n\t if (!opacity) {\n\t opacity = new PDFDictionary({\n\t Type: _(\"ExtGState\"),\n\t AIS: false,\n\t CA: 1,\n\t ca: 1,\n\t SMask: {\n\t Type: _(\"Mask\"),\n\t S: _(\"Luminosity\"),\n\t G: pdf.attach(new PDFStream(\"/a0 gs /s0 sh\", {\n\t Type: _(\"XObject\"),\n\t Subtype: _(\"Form\"),\n\t FormType: 1,\n\t BBox: (box ? [\n\t box.left, box.top + box.height, box.left + box.width, box.top\n\t ] : [ 0, 1, 1, 0 ]),\n\t Group: {\n\t Type: _(\"Group\"),\n\t S: _(\"Transparency\"),\n\t CS: _(\"DeviceGray\"),\n\t I: true\n\t },\n\t Resources: {\n\t ExtGState: {\n\t a0: { CA: 1, ca: 1 }\n\t },\n\t Shading: {\n\t s0: {\n\t ColorSpace: _(\"DeviceGray\"),\n\t Coords: coords,\n\t Domain: [ 0, 1 ],\n\t ShadingType: isRadial ? 3 : 2,\n\t Function: funcs,\n\t Extend: [ true, true ]\n\t }\n\t }\n\t }\n\t }))\n\t }\n\t });\n\t pdf.attach(opacity);\n\t opacity._resourceName = \"O\" + (++RESOURCE_COUNTER);\n\t if (hash) {\n\t pdf.GRAD_OPC[hash] = opacity;\n\t }\n\t }\n\t return opacity;\n\t}\n\n\tfunction cacheGradient(pdf, gradient, box) {\n\t var isRadial = gradient.type == \"radial\";\n\t var funcs = makeGradientFunctions(pdf, gradient.stops);\n\t var coords = isRadial ? [\n\t gradient.start.x , gradient.start.y , gradient.start.r,\n\t gradient.end.x , gradient.end.y , gradient.end.r\n\t ] : [\n\t gradient.start.x , gradient.start.y,\n\t gradient.end.x , gradient.end.y\n\t ];\n\t var shading = cacheColorGradient(\n\t pdf, isRadial, gradient.stops, coords, funcs.colors, gradient.userSpace && box\n\t );\n\t var opacity = funcs.hasAlpha ? cacheOpacityGradient(\n\t pdf, isRadial, gradient.stops, coords, funcs.opacities, gradient.userSpace && box\n\t ) : null;\n\t return {\n\t hasAlpha: funcs.hasAlpha,\n\t shading: shading,\n\t opacity: opacity\n\t };\n\t}\n\n\t/// page object\n\n\tvar PDFPage = (function (PDFDictionary) {\n\t function PDFPage(pdf, props){\n\t PDFDictionary.call(this, props);\n\n\t this._pdf = pdf;\n\t this._rcount = 0;\n\t this._textMode = false;\n\t this._fontResources = {};\n\t this._gsResources = {};\n\t this._xResources = {};\n\t this._patResources = {};\n\t this._shResources = {};\n\t this._opacity = 1;\n\t this._matrix = [ 1, 0, 0, 1, 0, 0 ];\n\t this._annotations = [];\n\n\t this._font = null;\n\t this._fontSize = null;\n\n\t this._contextStack = [];\n\n\t props = this.props;\n\t props.Type = _(\"Page\");\n\t props.ProcSet = [\n\t _(\"PDF\"),\n\t _(\"Text\"),\n\t _(\"ImageB\"),\n\t _(\"ImageC\"),\n\t _(\"ImageI\")\n\t ];\n\t props.Resources = new PDFDictionary({\n\t Font : new PDFDictionary(this._fontResources),\n\t ExtGState : new PDFDictionary(this._gsResources),\n\t XObject : new PDFDictionary(this._xResources),\n\t Pattern : new PDFDictionary(this._patResources),\n\t Shading : new PDFDictionary(this._shResources)\n\t });\n\t props.Annots = this._annotations;\n\t }\n\n\t extendStatic(PDFPage, PDFDictionary);\n\t PDFPage.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n\t PDFPage.prototype.constructor = PDFPage;\n\t PDFPage.fn = PDFPage.prototype;\n\t PDFPage.fn.init = PDFPage.fn.constructor;\n\n\t PDFPage.prototype._out = function _out () {\n\t this._content.data.apply(null, arguments);\n\t };\n\n\t PDFPage.prototype.transform = function transform (a, b, c, d, e, f) {\n\t if (!isIdentityMatrix(arguments)) {\n\t this._matrix = mmul(arguments, this._matrix);\n\t this._out(a, \" \", b, \" \", c, \" \", d, \" \", e, \" \", f, \" cm\");\n\t // XXX: debug\n\t // this._out(\" % current matrix: \", this._matrix);\n\t this._out(NL);\n\t }\n\t };\n\n\t PDFPage.prototype.translate = function translate (dx, dy) {\n\t this.transform(1, 0, 0, 1, dx, dy);\n\t };\n\n\t PDFPage.prototype.scale = function scale (sx, sy) {\n\t this.transform(sx, 0, 0, sy, 0, 0);\n\t };\n\n\t PDFPage.prototype.rotate = function rotate (angle) {\n\t var cos = Math.cos(angle), sin = Math.sin(angle);\n\t this.transform(cos, sin, -sin, cos, 0, 0);\n\t };\n\n\t PDFPage.prototype.beginText = function beginText () {\n\t this._textMode = true;\n\t this._out(\"BT\", NL);\n\t };\n\n\t PDFPage.prototype.endText = function endText () {\n\t this._textMode = false;\n\t this._out(\"ET\", NL);\n\t };\n\n\t PDFPage.prototype._requireTextMode = function _requireTextMode () {\n\t if (!this._textMode) {\n\t throw new Error(\"Text mode required; call page.beginText() first\");\n\t }\n\t };\n\n\t PDFPage.prototype._requireFont = function _requireFont () {\n\t if (!this._font) {\n\t throw new Error(\"No font selected; call page.setFont() first\");\n\t }\n\t };\n\n\t PDFPage.prototype.setFont = function setFont (font, size) {\n\t this._requireTextMode();\n\t if (font == null) {\n\t font = this._font;\n\t } else if (!(font instanceof PDFFont)) {\n\t font = this._pdf.getFont(font);\n\t }\n\t if (size == null) {\n\t size = this._fontSize;\n\t }\n\t this._fontResources[font._resourceName] = font;\n\t this._font = font;\n\t this._fontSize = size;\n\t this._out(font._resourceName, \" \", size, \" Tf\", NL);\n\t };\n\n\t PDFPage.prototype.setTextLeading = function setTextLeading (size) {\n\t this._requireTextMode();\n\t this._out(size, \" TL\", NL);\n\t };\n\n\t PDFPage.prototype.setTextRenderingMode = function setTextRenderingMode (mode) {\n\t this._requireTextMode();\n\t this._out(mode, \" Tr\", NL);\n\t };\n\n\t PDFPage.prototype.showText = function showText (text, requestedWidth) {\n\t this._requireFont();\n\t if (text.length > 1 && requestedWidth && this._font instanceof PDFFont) {\n\t var outputWidth = this._font.getTextWidth(this._fontSize, text);\n\t var scale = requestedWidth / outputWidth * 100;\n\t this._out(scale, \" Tz \");\n\t }\n\t this._out(this._font.encodeText(text), \" Tj\", NL);\n\t };\n\n\t PDFPage.prototype.showTextNL = function showTextNL (text) {\n\t this._requireFont();\n\t this._out(this._font.encodeText(text), \" '\", NL);\n\t };\n\n\t PDFPage.prototype.addLink = function addLink (uri, box) {\n\t var ll = this._toPage({ x: box.left, y: box.bottom });\n\t var ur = this._toPage({ x: box.right, y: box.top });\n\t this._annotations.push(new PDFDictionary({\n\t Type : _(\"Annot\"),\n\t Subtype : _(\"Link\"),\n\t Rect : [ ll.x, ll.y, ur.x, ur.y ],\n\t Border : [ 0, 0, 0 ],\n\t A : new PDFDictionary({\n\t Type : _(\"Action\"),\n\t S : _(\"URI\"),\n\t URI : new PDFString(uri)\n\t })\n\t }));\n\t };\n\n\t PDFPage.prototype.setStrokeColor = function setStrokeColor (r, g, b) {\n\t this._out(r, \" \", g, \" \", b, \" RG\", NL);\n\t };\n\n\t PDFPage.prototype.setOpacity = function setOpacity (opacity) {\n\t this.setFillOpacity(opacity);\n\t this.setStrokeOpacity(opacity);\n\t this._opacity *= opacity;\n\t };\n\n\t PDFPage.prototype.setStrokeOpacity = function setStrokeOpacity (opacity) {\n\t if (opacity < 1) {\n\t var gs = this._pdf.getOpacityGS(this._opacity * opacity, true);\n\t this._gsResources[gs._resourceName] = gs;\n\t this._out(gs._resourceName, \" gs\", NL);\n\t }\n\t };\n\n\t PDFPage.prototype.setFillColor = function setFillColor (r, g, b) {\n\t this._out(r, \" \", g, \" \", b, \" rg\", NL);\n\t };\n\n\t PDFPage.prototype.setFillOpacity = function setFillOpacity (opacity) {\n\t if (opacity < 1) {\n\t var gs = this._pdf.getOpacityGS(this._opacity * opacity, false);\n\t this._gsResources[gs._resourceName] = gs;\n\t this._out(gs._resourceName, \" gs\", NL);\n\t }\n\t };\n\n\t PDFPage.prototype.gradient = function gradient (gradient, box) {\n\t this.save();\n\t this.rect(box.left, box.top, box.width, box.height);\n\t this.clip();\n\t if (!gradient.userSpace) {\n\t this.transform(box.width, 0, 0, box.height, box.left, box.top);\n\t }\n\t var g = cacheGradient(this._pdf, gradient, box);\n\t var sname = g.shading._resourceName, oname;\n\t this._shResources[sname] = g.shading;\n\t if (g.hasAlpha) {\n\t oname = g.opacity._resourceName;\n\t this._gsResources[oname] = g.opacity;\n\t this._out(\"/\" + oname + \" gs \");\n\t }\n\t this._out(\"/\" + sname + \" sh\", NL);\n\t this.restore();\n\t };\n\n\t PDFPage.prototype.setDashPattern = function setDashPattern (dashArray, dashPhase) {\n\t this._out(dashArray, \" \", dashPhase, \" d\", NL);\n\t };\n\n\t PDFPage.prototype.setLineWidth = function setLineWidth (width) {\n\t this._out(width, \" w\", NL);\n\t };\n\n\t PDFPage.prototype.setLineCap = function setLineCap (lineCap) {\n\t this._out(lineCap, \" J\", NL);\n\t };\n\n\t PDFPage.prototype.setLineJoin = function setLineJoin (lineJoin) {\n\t this._out(lineJoin, \" j\", NL);\n\t };\n\n\t PDFPage.prototype.setMitterLimit = function setMitterLimit (mitterLimit) {\n\t this._out(mitterLimit, \" M\", NL);\n\t };\n\n\t PDFPage.prototype.save = function save () {\n\t this._contextStack.push(this._context());\n\t this._out(\"q\", NL);\n\t };\n\n\t PDFPage.prototype.restore = function restore () {\n\t this._out(\"Q\", NL);\n\t this._context(this._contextStack.pop());\n\t };\n\n\t // paths\n\t PDFPage.prototype.moveTo = function moveTo (x, y) {\n\t this._out(x, \" \", y, \" m\", NL);\n\t };\n\n\t PDFPage.prototype.lineTo = function lineTo (x, y) {\n\t this._out(x, \" \", y, \" l\", NL);\n\t };\n\n\t PDFPage.prototype.bezier = function bezier (x1, y1, x2, y2, x3, y3) {\n\t this._out(x1, \" \", y1, \" \", x2, \" \", y2, \" \", x3, \" \", y3, \" c\", NL);\n\t };\n\n\t PDFPage.prototype.bezier1 = function bezier1 (x1, y1, x3, y3) {\n\t this._out(x1, \" \", y1, \" \", x3, \" \", y3, \" y\", NL);\n\t };\n\n\t PDFPage.prototype.bezier2 = function bezier2 (x2, y2, x3, y3) {\n\t this._out(x2, \" \", y2, \" \", x3, \" \", y3, \" v\", NL);\n\t };\n\n\t PDFPage.prototype.close = function close () {\n\t this._out(\"h\", NL);\n\t };\n\n\t PDFPage.prototype.rect = function rect (x, y, w, h) {\n\t this._out(x, \" \", y, \" \", w, \" \", h, \" re\", NL);\n\t };\n\n\t PDFPage.prototype.ellipse = function ellipse (x, y, rx, ry) {\n\t function _X(v) { return x + v; }\n\t function _Y(v) { return y + v; }\n\n\t // how to get to the \"magic number\" is explained here:\n\t // http://www.whizkidtech.redprince.net/bezier/circle/kappa/\n\t var k = 0.5522847498307936;\n\n\t this.moveTo(_X(0), _Y(ry));\n\t this.bezier(\n\t _X(rx * k) , _Y(ry),\n\t _X(rx) , _Y(ry * k),\n\t _X(rx) , _Y(0)\n\t );\n\t this.bezier(\n\t _X(rx) , _Y(-ry * k),\n\t _X(rx * k) , _Y(-ry),\n\t _X(0) , _Y(-ry)\n\t );\n\t this.bezier(\n\t _X(-rx * k) , _Y(-ry),\n\t _X(-rx) , _Y(-ry * k),\n\t _X(-rx) , _Y(0)\n\t );\n\t this.bezier(\n\t _X(-rx) , _Y(ry * k),\n\t _X(-rx * k) , _Y(ry),\n\t _X(0) , _Y(ry)\n\t );\n\t };\n\n\t PDFPage.prototype.circle = function circle (x, y, r) {\n\t this.ellipse(x, y, r, r);\n\t };\n\n\t PDFPage.prototype.stroke = function stroke () {\n\t this._out(\"S\", NL);\n\t };\n\n\t PDFPage.prototype.nop = function nop () {\n\t this._out(\"n\", NL);\n\t };\n\n\t PDFPage.prototype.clip = function clip () {\n\t this._out(\"W n\", NL);\n\t };\n\n\t PDFPage.prototype.clipStroke = function clipStroke () {\n\t this._out(\"W S\", NL);\n\t };\n\n\t PDFPage.prototype.closeStroke = function closeStroke () {\n\t this._out(\"s\", NL);\n\t };\n\n\t PDFPage.prototype.fill = function fill () {\n\t this._out(\"f\", NL);\n\t };\n\n\t PDFPage.prototype.fillStroke = function fillStroke () {\n\t this._out(\"B\", NL);\n\t };\n\n\t PDFPage.prototype.drawImage = function drawImage (url) {\n\t var img = this._pdf.getImage(url);\n\t if (img) { // the result can be null for a cross-domain image\n\t this._xResources[img._resourceName] = img;\n\t this._out(img._resourceName, \" Do\", NL);\n\t }\n\t };\n\n\t PDFPage.prototype.comment = function comment (txt) {\n\t var self = this;\n\t txt.split(/\\r?\\n/g).forEach(function(line){\n\t self._out(\"% \", line, NL);\n\t });\n\t };\n\n\t // internal\n\t PDFPage.prototype._context = function _context (val) {\n\t if (val != null) {\n\t this._opacity = val.opacity;\n\t this._matrix = val.matrix;\n\t } else {\n\t return {\n\t opacity: this._opacity,\n\t matrix: this._matrix\n\t };\n\t }\n\t };\n\n\t PDFPage.prototype._toPage = function _toPage (p) {\n\t var m = this._matrix;\n\t var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];\n\t return {\n\t x: a*p.x + c*p.y + e,\n\t y: b*p.x + d*p.y + f\n\t };\n\t };\n\n\t return PDFPage;\n\t}(PDFDictionary));\n\n\tfunction unquote(str) {\n\t return str.replace(/^\\s*(['\"])(.*)\\1\\s*$/, \"$2\");\n\t}\n\n\tfunction parseFontDef(fontdef) {\n\t // XXX: this is very crude for now and buggy. Proper parsing is quite involved.\n\t var rx = /^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i;\n\t var m = rx.exec(fontdef);\n\t if (!m) {\n\t return { fontSize: 12, fontFamily: \"sans-serif\" };\n\t }\n\t var fontSize = m[8] ? parseInt(m[8], 10) : 12;\n\t return {\n\t italic : m[2] && m[2].toLowerCase() == \"italic\",\n\t variant : m[4],\n\t bold : m[6] && /bold|700/i.test(m[6]),\n\t fontSize : fontSize,\n\t lineHeight : m[12] ? m[12] == \"normal\" ? fontSize : parseInt(m[12], 10) : null,\n\t fontFamily : m[14].split(/\\s*,\\s*/g).map(unquote)\n\t };\n\t}\n\n\tfunction getFontURL(style) {\n\t function mkFamily(name) {\n\t if (style.bold) {\n\t name += \"|bold\";\n\t }\n\t if (style.italic) {\n\t name += \"|italic\";\n\t }\n\t return name.toLowerCase();\n\t }\n\t var fontFamily = style.fontFamily;\n\t var name, url;\n\t if (fontFamily instanceof Array) {\n\t for (var i = 0; i < fontFamily.length; ++i) {\n\t name = mkFamily(fontFamily[i]);\n\t url = FONT_MAPPINGS[name];\n\t if (url) {\n\t break;\n\t }\n\t }\n\t } else {\n\t url = FONT_MAPPINGS[fontFamily.toLowerCase()];\n\t }\n\t while (typeof url == \"function\") {\n\t url = url();\n\t }\n\t if (!url) {\n\t url = \"Times-Roman\";\n\t }\n\t return url;\n\t}\n\n\tvar FONT_MAPPINGS = {\n\t \"serif\" : \"Times-Roman\",\n\t \"serif|bold\" : \"Times-Bold\",\n\t \"serif|italic\" : \"Times-Italic\",\n\t \"serif|bold|italic\" : \"Times-BoldItalic\",\n\t \"sans-serif\" : \"Helvetica\",\n\t \"sans-serif|bold\" : \"Helvetica-Bold\",\n\t \"sans-serif|italic\" : \"Helvetica-Oblique\",\n\t \"sans-serif|bold|italic\" : \"Helvetica-BoldOblique\",\n\t \"monospace\" : \"Courier\",\n\t \"monospace|bold\" : \"Courier-Bold\",\n\t \"monospace|italic\" : \"Courier-Oblique\",\n\t \"monospace|bold|italic\" : \"Courier-BoldOblique\",\n\t \"zapfdingbats\" : \"ZapfDingbats\",\n\t \"zapfdingbats|bold\" : \"ZapfDingbats\",\n\t \"zapfdingbats|italic\" : \"ZapfDingbats\",\n\t \"zapfdingbats|bold|italic\" : \"ZapfDingbats\"\n\t};\n\n\tfunction fontAlias(alias, name) {\n\t alias = alias.toLowerCase();\n\t FONT_MAPPINGS[alias] = function() {\n\t return FONT_MAPPINGS[name];\n\t };\n\t FONT_MAPPINGS[alias + \"|bold\"] = function() {\n\t return FONT_MAPPINGS[name + \"|bold\"];\n\t };\n\t FONT_MAPPINGS[alias + \"|italic\"] = function() {\n\t return FONT_MAPPINGS[name + \"|italic\"];\n\t };\n\t FONT_MAPPINGS[alias + \"|bold|italic\"] = function() {\n\t return FONT_MAPPINGS[name + \"|bold|italic\"];\n\t };\n\t}\n\n\t// Let's define some common names to an appropriate replacement.\n\t// These are overridable via pdf.defineFont, should the user want to\n\t// include the proper versions.\n\n\tfontAlias(\"Times New Roman\" , \"serif\");\n\tfontAlias(\"Courier New\" , \"monospace\");\n\tfontAlias(\"Arial\" , \"sans-serif\");\n\tfontAlias(\"Helvetica\" , \"sans-serif\");\n\tfontAlias(\"Verdana\" , \"sans-serif\");\n\tfontAlias(\"Tahoma\" , \"sans-serif\");\n\tfontAlias(\"Georgia\" , \"sans-serif\");\n\tfontAlias(\"Monaco\" , \"monospace\");\n\tfontAlias(\"Andale Mono\" , \"monospace\");\n\n\tfunction defineFont(name, url) {\n\t if (arguments.length == 1) {\n\t for (var i in name) {\n\t if (hasOwnProperty(name, i)) {\n\t defineFont(i, name[i]);\n\t }\n\t }\n\t } else {\n\t name = name.toLowerCase();\n\t FONT_MAPPINGS[name] = url;\n\n\t // special handling for DejaVu fonts: if they get defined,\n\t // let them also replace the default families, for good\n\t // Unicode support out of the box.\n\t switch (name) {\n\t case \"dejavu sans\" : FONT_MAPPINGS[\"sans-serif\"] = url; break;\n\t case \"dejavu sans|bold\" : FONT_MAPPINGS[\"sans-serif|bold\"] = url; break;\n\t case \"dejavu sans|italic\" : FONT_MAPPINGS[\"sans-serif|italic\"] = url; break;\n\t case \"dejavu sans|bold|italic\" : FONT_MAPPINGS[\"sans-serif|bold|italic\"] = url; break;\n\t case \"dejavu serif\" : FONT_MAPPINGS[\"serif\"] = url; break;\n\t case \"dejavu serif|bold\" : FONT_MAPPINGS[\"serif|bold\"] = url; break;\n\t case \"dejavu serif|italic\" : FONT_MAPPINGS[\"serif|italic\"] = url; break;\n\t case \"dejavu serif|bold|italic\" : FONT_MAPPINGS[\"serif|bold|italic\"] = url; break;\n\t case \"dejavu mono\" : FONT_MAPPINGS[\"monospace\"] = url; break;\n\t case \"dejavu mono|bold\" : FONT_MAPPINGS[\"monospace|bold\"] = url; break;\n\t case \"dejavu mono|italic\" : FONT_MAPPINGS[\"monospace|italic\"] = url; break;\n\t case \"dejavu mono|bold|italic\" : FONT_MAPPINGS[\"monospace|bold|italic\"] = url; break;\n\t }\n\t }\n\t}\n\n\tfunction mmul(a, b) {\n\t var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n\t var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n\t return [\n\t a1*a2 + b1*c2, a1*b2 + b1*d2,\n\t c1*a2 + d1*c2, c1*b2 + d1*d2,\n\t e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n\t ];\n\t}\n\n\tfunction isIdentityMatrix(m) {\n\t return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n\t}\n\n\tvar TEXT_RENDERING_MODE = {\n\t fill : 0,\n\t stroke : 1,\n\t fillAndStroke : 2,\n\t invisible : 3,\n\t fillAndClip : 4,\n\t strokeAndClip : 5,\n\t fillStrokeClip : 6,\n\t clip : 7\n\t};\n\n\t/* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n\t/* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n\t/* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n\t/* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n\tvar TEXT_RENDERING_MODE$1 = TEXT_RENDERING_MODE;\n\n\tvar DASH_PATTERNS = {\n\t dash : [ 4 ],\n\t dashDot : [ 4, 2, 1, 2 ],\n\t dot : [ 1, 2 ],\n\t longDash : [ 8, 2 ],\n\t longDashDot : [ 8, 2, 1, 2 ],\n\t longDashDotDot : [ 8, 2, 1, 2, 1, 2 ],\n\t solid : []\n\t};\n\n\tvar LINE_CAP = {\n\t butt : 0,\n\t round : 1,\n\t square : 2\n\t};\n\n\tvar LINE_JOIN = {\n\t miter : 0,\n\t round : 1,\n\t bevel : 2\n\t};\n\n\tfunction render$1(group, callback) {\n\t var fonts = [], images = {}, options = group.options;\n\n\t function getOption(name, defval, hash) {\n\t if (!hash) {\n\t hash = options;\n\t }\n\t if (hash.pdf && hash.pdf[name] != null) {\n\t return hash.pdf[name];\n\t }\n\t return defval;\n\t }\n\n\t var multiPage = getOption(\"multiPage\");\n\t var imgDPI = getOption(\"imgDPI\");\n\n\t clearImageCache();\n\n\t group.traverse(function(element){\n\t dispatch({\n\t Image: function(element) {\n\t var url = element.src();\n\t if (imgDPI) {\n\t var box = element.bbox().size;\n\t var prev = images[url];\n\t box = {\n\t width: Math.ceil(box.width * imgDPI / 72),\n\t height: Math.ceil(box.height * imgDPI / 72)\n\t };\n\t if (prev) {\n\t box.width = Math.max(prev.width, box.width);\n\t box.height = Math.max(prev.height, box.height);\n\t }\n\t images[url] = box;\n\t } else {\n\t images[url] = null;\n\t }\n\t },\n\t Text: function(element) {\n\t var style = parseFontDef(element.options.font);\n\t var url = getFontURL(style);\n\t if (fonts.indexOf(url) < 0) {\n\t fonts.push(url);\n\t }\n\t }\n\t }, element);\n\t });\n\n\t function doIt() {\n\t if (--count > 0) {\n\t return;\n\t }\n\n\t var pdf = new (PDFDocument)({\n\t producer : getOption(\"producer\"),\n\t title : getOption(\"title\"),\n\t author : getOption(\"author\"),\n\t subject : getOption(\"subject\"),\n\t keywords : getOption(\"keywords\"),\n\t creator : getOption(\"creator\"),\n\t date : getOption(\"date\"),\n\n\t autoPrint : getOption(\"autoPrint\")\n\t });\n\n\t function drawPage(group) {\n\t var options = group.options;\n\n\t var tmp = optimize(group);\n\t var bbox = tmp.bbox;\n\t group = tmp.root;\n\t // var tmp, bbox;\n\n\t var paperSize = getOption(\"paperSize\", getOption(\"paperSize\", \"auto\"), options), addMargin = false;\n\t if (paperSize == \"auto\") {\n\t if (bbox) {\n\t var size = bbox.getSize();\n\t paperSize = [ size.width, size.height ];\n\t addMargin = true;\n\t var origin = bbox.getOrigin();\n\t tmp = new drawing.Group();\n\t tmp.transform(new kendoGeometry.Matrix(1, 0, 0, 1, -origin.x, -origin.y));\n\t tmp.append(group);\n\t group = tmp;\n\t }\n\t else {\n\t paperSize = \"A4\";\n\t }\n\t }\n\n\t var page;\n\t page = pdf.addPage({\n\t paperSize : paperSize,\n\t margin : getOption(\"margin\", getOption(\"margin\"), options),\n\t addMargin : addMargin,\n\t landscape : getOption(\"landscape\", getOption(\"landscape\", false), options)\n\t });\n\t drawElement(group, page, pdf);\n\t }\n\n\t if (multiPage) {\n\t group.children.forEach(drawPage);\n\t } else {\n\t drawPage(group);\n\t }\n\n\t callback(pdf.render(), pdf);\n\t }\n\n\t var count = 2;\n\t loadFonts(fonts, doIt);\n\t loadImages(images, doIt, {\n\t jpegQuality : getOption(\"jpegQuality\", 0.92),\n\t keepPNG : getOption(\"keepPNG\", false)\n\t });\n\t}\n\n\tfunction toDataURL(group, callback) {\n\t render$1(group, function(data){\n\t callback(\"data:application/pdf;base64,\" + data.base64());\n\t });\n\t}\n\n\tfunction toBlob(group, callback) {\n\t render$1(group, function(data){\n\t callback(new window.Blob([ data.get() ], { type: \"application/pdf\" }));\n\t });\n\t}\n\n\tfunction saveAs$1(group, filename, proxy, callback) {\n\t // XXX: Safari has Blob, but does not support the download attribute\n\t // so we'd end up converting to dataURL and using the proxy anyway.\n\t if (window.Blob && !supportBrowser.safari) {\n\t toBlob(group, function(blob){\n\t kendo.saveAs({ dataURI: blob, fileName: filename });\n\t if (callback) {\n\t callback(blob);\n\t }\n\t });\n\t } else {\n\t toDataURL(group, function(dataURL){\n\t kendo.saveAs({ dataURI: dataURL, fileName: filename, proxyURL: proxy });\n\t if (callback) {\n\t callback(dataURL);\n\t }\n\t });\n\t }\n\t}\n\n\tfunction dispatch(handlers, element) {\n\t var handler = handlers[element.nodeType];\n\t if (handler) {\n\t return handler.call.apply(handler, arguments);\n\t }\n\t return element;\n\t}\n\n\tfunction drawElement(element, page, pdf) {\n\t if (element.options._pdfDebug) {\n\t page.comment(\"BEGIN: \" + element.options._pdfDebug);\n\t }\n\n\t var transform = element.transform();\n\t var opacity = element.opacity();\n\n\t page.save();\n\n\t if (opacity != null && opacity < 1) {\n\t page.setOpacity(opacity);\n\t }\n\n\t setStrokeOptions(element, page, pdf);\n\t setFillOptions(element, page, pdf);\n\n\t if (transform) {\n\t var m = transform.matrix();\n\t page.transform(m.a, m.b, m.c, m.d, m.e, m.f);\n\t }\n\n\t setClipping(element, page, pdf);\n\n\t dispatch({\n\t Path : drawPath,\n\t MultiPath : drawMultiPath,\n\t Circle : drawCircle,\n\t Arc : drawArc,\n\t Text : drawText,\n\t Image : drawImage$1,\n\t Group : drawGroup,\n\t Rect : drawRect\n\t }, element, page, pdf);\n\n\t page.restore();\n\n\t if (element.options._pdfDebug) {\n\t page.comment(\"END: \" + element.options._pdfDebug);\n\t }\n\t}\n\n\tfunction setStrokeOptions(element, page) {\n\t var stroke = element.stroke && element.stroke();\n\t if (!stroke) {\n\t return;\n\t }\n\n\t var color = stroke.color;\n\t if (color) {\n\t color = parseColor$1(color);\n\t if (color == null) {\n\t return; // no stroke\n\t }\n\t page.setStrokeColor(color.r, color.g, color.b);\n\t if (color.a != 1) {\n\t page.setStrokeOpacity(color.a);\n\t }\n\t }\n\n\t var width = stroke.width;\n\t if (width != null) {\n\t if (width === 0) {\n\t return; // no stroke\n\t }\n\t page.setLineWidth(width);\n\t }\n\n\t var dashType = stroke.dashType;\n\t if (dashType) {\n\t page.setDashPattern(DASH_PATTERNS[dashType], 0);\n\t }\n\n\t var lineCap = stroke.lineCap;\n\t if (lineCap) {\n\t page.setLineCap(LINE_CAP[lineCap]);\n\t }\n\n\t var lineJoin = stroke.lineJoin;\n\t if (lineJoin) {\n\t page.setLineJoin(LINE_JOIN[lineJoin]);\n\t }\n\n\t var opacity = stroke.opacity;\n\t if (opacity != null) {\n\t page.setStrokeOpacity(opacity);\n\t }\n\t}\n\n\tfunction setFillOptions(element, page) {\n\t var fill = element.fill && element.fill();\n\t if (!fill) {\n\t return;\n\t }\n\n\t if (fill instanceof drawing.Gradient) {\n\t return;\n\t }\n\n\t var color = fill.color;\n\t if (color) {\n\t color = parseColor$1(color);\n\t if (color == null) {\n\t return; // no fill\n\t }\n\t page.setFillColor(color.r, color.g, color.b);\n\t if (color.a != 1) {\n\t page.setFillOpacity(color.a);\n\t }\n\t }\n\n\t var opacity = fill.opacity;\n\t if (opacity != null) {\n\t page.setFillOpacity(opacity);\n\t }\n\t}\n\n\tfunction setClipping(element, page, pdf) {\n\t // XXX: only Path supported at the moment.\n\t var clip = element.clip();\n\t if (clip) {\n\t _drawPath(clip, page, pdf);\n\t page.clip();\n\t // page.setStrokeColor(Math.random(), Math.random(), Math.random());\n\t // page.setLineWidth(1);\n\t // page.stroke();\n\t }\n\t}\n\n\tfunction shouldDraw(thing) {\n\t return (thing &&\n\t (thing instanceof drawing.Gradient ||\n\t (thing.color && !/^(none|transparent)$/i.test(thing.color) &&\n\t (thing.width == null || thing.width > 0) &&\n\t (thing.opacity == null || thing.opacity > 0))));\n\t}\n\n\tfunction maybeGradient(element, page, pdf, stroke) {\n\t var fill = element.fill();\n\t if (fill instanceof drawing.Gradient) {\n\t if (stroke) {\n\t page.clipStroke();\n\t } else {\n\t page.clip();\n\t }\n\t var isRadial = fill instanceof drawing.RadialGradient;\n\t var start, end;\n\t if (isRadial) {\n\t start = { x: fill.center().x , y: fill.center().y , r: 0 };\n\t end = { x: fill.center().x , y: fill.center().y , r: fill.radius() };\n\t } else {\n\t start = { x: fill.start().x , y: fill.start().y };\n\t end = { x: fill.end().x , y: fill.end().y };\n\t }\n\n\t var stops = fill.stops.elements().map(function(stop){\n\t var offset = stop.offset();\n\t if (/%$/.test(offset)) {\n\t offset = parseFloat(offset) / 100;\n\t } else {\n\t offset = parseFloat(offset);\n\t }\n\t var color = parseColor$1(stop.color());\n\t color.a *= stop.opacity();\n\t return {\n\t offset: offset,\n\t color: color\n\t };\n\t });\n\n\t // Duplicats first and last stop to fix\n\t // https://github.com/telerik/kendo-ui-core/issues/1782\n\t stops.unshift(stops[0]);\n\t stops.push(stops[stops.length - 1]);\n\n\t var gradient = {\n\t userSpace : fill.userSpace(),\n\t type : isRadial ? \"radial\" : \"linear\",\n\t start : start,\n\t end : end,\n\t stops : stops\n\t };\n\t var box = element.rawBBox();\n\t var tl = box.topLeft(), size = box.getSize();\n\t box = {\n\t left : tl.x,\n\t top : tl.y,\n\t width : size.width,\n\t height : size.height\n\t };\n\t page.gradient(gradient, box);\n\t return true;\n\t }\n\t}\n\n\tfunction maybeFillStroke(element, page, pdf) {\n\t if (shouldDraw(element.fill()) && shouldDraw(element.stroke())) {\n\t if (!maybeGradient(element, page, pdf, true)) {\n\t page.fillStroke();\n\t }\n\t } else if (shouldDraw(element.fill())) {\n\t if (!maybeGradient(element, page, pdf, false)) {\n\t page.fill();\n\t }\n\t } else if (shouldDraw(element.stroke())) {\n\t page.stroke();\n\t } else {\n\t // we should not get here; the path should have been\n\t // optimized away. but let's be prepared.\n\t page.nop();\n\t }\n\t}\n\n\tfunction maybeDrawRect(path, page) {\n\t var segments = path.segments;\n\t if (segments.length == 4 && path.options.closed) {\n\t // detect if this path looks like a rectangle parallel to the axis\n\t var a = [];\n\t for (var i = 0; i < segments.length; ++i) {\n\t if (segments[i].controlIn()) { // has curve?\n\t return false;\n\t }\n\t a[i] = segments[i].anchor();\n\t }\n\t // it's a rectangle if the y/x/y/x or x/y/x/y coords of\n\t // consecutive points are the same.\n\t var isRect = (\n\t a[0].y == a[1].y && a[1].x == a[2].x && a[2].y == a[3].y && a[3].x == a[0].x\n\t ) || (\n\t a[0].x == a[1].x && a[1].y == a[2].y && a[2].x == a[3].x && a[3].y == a[0].y\n\t );\n\t if (isRect) {\n\t // this saves a bunch of instructions in PDF:\n\t // moveTo, lineTo, lineTo, lineTo, close -> rect.\n\t page.rect(a[0].x, a[0].y,\n\t a[2].x - a[0].x /*width*/,\n\t a[2].y - a[0].y /*height*/);\n\t return true;\n\t }\n\t }\n\t}\n\n\tfunction _drawPath(element, page, pdf) {\n\t var segments = element.segments;\n\t if (segments.length === 0) {\n\t return;\n\t }\n\t if (!maybeDrawRect(element, page, pdf)) {\n\t for (var prev, i = 0; i < segments.length; ++i) {\n\t var seg = segments[i];\n\t var anchor = seg.anchor();\n\t if (!prev) {\n\t page.moveTo(anchor.x, anchor.y);\n\t } else {\n\t var prevOut = prev.controlOut();\n\t var controlIn = seg.controlIn();\n\t if (prevOut && controlIn) {\n\t page.bezier(\n\t prevOut.x , prevOut.y,\n\t controlIn.x , controlIn.y,\n\t anchor.x , anchor.y\n\t );\n\t } else {\n\t page.lineTo(anchor.x, anchor.y);\n\t }\n\t }\n\t prev = seg;\n\t }\n\t if (element.options.closed) {\n\t page.close();\n\t }\n\t }\n\t}\n\n\tfunction drawPath(element, page, pdf) {\n\t _drawPath(element, page, pdf);\n\t maybeFillStroke(element, page, pdf);\n\t}\n\n\tfunction drawMultiPath(element, page, pdf) {\n\t var paths = element.paths;\n\t for (var i = 0; i < paths.length; ++i) {\n\t _drawPath(paths[i], page, pdf);\n\t }\n\t maybeFillStroke(element, page, pdf);\n\t}\n\n\tfunction drawCircle(element, page, pdf) {\n\t var g = element.geometry();\n\t page.circle(g.center.x, g.center.y, g.radius);\n\t maybeFillStroke(element, page, pdf);\n\t}\n\n\tfunction drawArc(element, page, pdf) {\n\t var points = element.geometry().curvePoints();\n\t page.moveTo(points[0].x, points[0].y);\n\t for (var i = 1; i < points.length;) {\n\t page.bezier(\n\t points[i].x, points[i++].y,\n\t points[i].x, points[i++].y,\n\t points[i].x, points[i++].y\n\t );\n\t }\n\t maybeFillStroke(element, page, pdf);\n\t}\n\n\tfunction drawText(element, page) {\n\t var style = parseFontDef(element.options.font);\n\t var pos = element._position;\n\t var mode;\n\t if (element.fill() && element.stroke()) {\n\t mode = TEXT_RENDERING_MODE$1.fillAndStroke;\n\t } else if (element.fill()) {\n\t mode = TEXT_RENDERING_MODE$1.fill;\n\t } else if (element.stroke()) {\n\t mode = TEXT_RENDERING_MODE$1.stroke;\n\t }\n\n\t page.transform(1, 0, 0, -1, pos.x, pos.y + style.fontSize);\n\t page.beginText();\n\t page.setFont(getFontURL(style), style.fontSize);\n\t page.setTextRenderingMode(mode);\n\t page.showText(element.content(), element._pdfRect ? element._pdfRect.width() : null);\n\t page.endText();\n\t}\n\n\tfunction drawGroup(element, page, pdf) {\n\t if (element._pdfLink) {\n\t page.addLink(element._pdfLink.url, element._pdfLink);\n\t }\n\t var children = element.children;\n\t for (var i = 0; i < children.length; ++i) {\n\t drawElement(children[i], page, pdf);\n\t }\n\t}\n\n\tfunction drawImage$1(element, page) {\n\t var url = element.src();\n\t if (!url) {\n\t return;\n\t }\n\n\t var rect = element.rect();\n\t var tl = rect.getOrigin();\n\t var sz = rect.getSize();\n\t page.transform(sz.width, 0, 0, -sz.height, tl.x, tl.y + sz.height);\n\t page.drawImage(url);\n\t}\n\n\tfunction drawRect(element, page, pdf) {\n\t var geometry = element.geometry();\n\t var ref = geometry.cornerRadius;\n\t var rx = ref[0];\n\t var ry = ref[1];\n\t if (rx === 0 && ry === 0) {\n\t page.rect(geometry.origin.x, geometry.origin.y, geometry.size.width, geometry.size.height);\n\t maybeFillStroke(element, page, pdf);\n\t } else {\n\t drawPath(drawing.Path.fromRect(geometry, element.options), page, pdf);\n\t }\n\t}\n\n\tfunction parseColor$1(value) {\n\t var color = kendo.parseColor(value, true);\n\t return color ? color.toRGB() : null;\n\t}\n\n\tfunction optimize(root) {\n\t var clipbox = false;\n\t var matrix = kendoGeometry.Matrix.unit();\n\t var currentBox = null;\n\t var changed;\n\t do {\n\t changed = false;\n\t root = opt(root);\n\t } while (root && changed);\n\t return { root: root, bbox: currentBox };\n\n\t function change(newShape) {\n\t changed = true;\n\t return newShape;\n\t }\n\n\t function visible(shape) {\n\t return (shape.visible() && shape.opacity() > 0 &&\n\t ( shouldDraw(shape.fill()) ||\n\t shouldDraw(shape.stroke()) ));\n\t }\n\n\t function optArray(a) {\n\t var b = [];\n\t for (var i = 0; i < a.length; ++i) {\n\t var el = opt(a[i]);\n\t if (el != null) {\n\t b.push(el);\n\t }\n\t }\n\t return b;\n\t }\n\n\t function withClipping(shape, f) {\n\t var saveclipbox = clipbox;\n\t var savematrix = matrix;\n\n\t if (shape.transform()) {\n\t matrix = matrix.multiplyCopy(shape.transform().matrix());\n\t }\n\n\t var clip = shape.clip();\n\t if (clip) {\n\t clip = clip.bbox();\n\t if (clip) {\n\t clip = clip.bbox(matrix);\n\t clipbox = clipbox ? kendoGeometry.Rect.intersect(clipbox, clip) : clip;\n\t }\n\t }\n\n\t try {\n\t return f();\n\t }\n\t finally {\n\t clipbox = saveclipbox;\n\t matrix = savematrix;\n\t }\n\t }\n\n\t function inClipbox(shape) {\n\t if (clipbox == null) {\n\t return false;\n\t }\n\t var box = shape.rawBBox().bbox(matrix);\n\t if (clipbox && box) {\n\t box = kendoGeometry.Rect.intersect(box, clipbox);\n\t }\n\t return box;\n\t }\n\n\t function opt(shape) {\n\t return withClipping(shape, function(){\n\t if (!(shape instanceof drawing.Group || shape instanceof drawing.MultiPath)) {\n\t var box = inClipbox(shape);\n\t if (!box) {\n\t return change(null);\n\t }\n\t currentBox = currentBox ? kendoGeometry.Rect.union(currentBox, box) : box;\n\t }\n\t return dispatch({\n\t Path: function(shape) {\n\t if (shape.segments.length === 0 || !visible(shape)) {\n\t return change(null);\n\t }\n\t return shape;\n\t },\n\t MultiPath: function(shape) {\n\t if (!visible(shape)) {\n\t return change(null);\n\t }\n\t var el = new drawing.MultiPath(shape.options);\n\t el.paths = optArray(shape.paths);\n\t if (el.paths.length === 0) {\n\t return change(null);\n\t }\n\t return el;\n\t },\n\t Circle: function(shape) {\n\t if (!visible(shape)) {\n\t return change(null);\n\t }\n\t return shape;\n\t },\n\t Arc: function(shape) {\n\t if (!visible(shape)) {\n\t return change(null);\n\t }\n\t return shape;\n\t },\n\t Text: function(shape) {\n\t if (!/\\S/.test(shape.content()) || !visible(shape)) {\n\t return change(null);\n\t }\n\t return shape;\n\t },\n\t Image: function(shape) {\n\t if (!(shape.visible() && shape.opacity() > 0)) {\n\t return change(null);\n\t }\n\t return shape;\n\t },\n\t Group: function(shape) {\n\t if (!(shape.visible() && shape.opacity() > 0)) {\n\t return change(null);\n\t }\n\t var el = new drawing.Group(shape.options);\n\t el.children = optArray(shape.children);\n\t el._pdfLink = shape._pdfLink;\n\t if (shape !== root && el.children.length === 0 && !shape._pdfLink) {\n\t return change(null);\n\t }\n\t return el;\n\t },\n\t Rect: function(shape) {\n\t if (!visible(shape)) {\n\t return change(null);\n\t }\n\t return shape;\n\t }\n\t }, shape);\n\t });\n\t }\n\t}\n\n\tfunction exportPDF(group, options) {\n\t var promise = util.createPromise();\n\n\t for (var i in options) {\n\t if (i == \"margin\" && group.options.pdf && group.options.pdf._ignoreMargin) {\n\t // This hackish option is set by the page breaking code in drawDOM. The idea is\n\t // that margin is already taken into account there (that's required to do proper\n\t // page breaking) and we don't want to set it again here, as it would double the\n\t // top-left margin, and truncate the content on bottom/right.\n\t continue;\n\t }\n\t group.options.set(\"pdf.\" + i, options[i]);\n\t }\n\n\t toDataURL(group, promise.resolve);\n\n\t return promise;\n\t}\n\n\t// XXX: the duplication is in order to keep exportPDF return a data\n\t// URI, which is what previous versions do. Currently only IE9 does\n\t// not support Blob, IMO we should switch to Blob by default\n\t// everywhere.\n\tfunction exportPDFToBlob(group, options) {\n\t var promise = util.createPromise();\n\n\t for (var i in options) {\n\t if (i == \"margin\" && group.options.pdf && group.options.pdf._ignoreMargin) {\n\t // This hackish option is set by the page breaking code in drawDOM. The idea is\n\t // that margin is already taken into account there (that's required to do proper\n\t // page breaking) and we don't want to set it again here, as it would double the\n\t // top-left margin, and truncate the content on bottom/right.\n\t continue;\n\t }\n\t group.options.set(\"pdf.\" + i, options[i]);\n\t }\n\n\t if (window.Blob && !supportBrowser.safari) {\n\t toBlob(group, promise.resolve);\n\t } else {\n\t toDataURL(group, promise.resolve);\n\t }\n\n\t return promise;\n\t}\n\n\tkendo.deepExtend(kendo.pdf, {\n\t Document: PDFDocument,\n\t BinaryStream: BinaryStream,\n\t defineFont: defineFont,\n\t parseFontDef: parseFontDef,\n\t getFontURL: getFontURL,\n\t loadFonts: loadFonts,\n\t loadImages: loadImages,\n\t getPaperOptions: getPaperOptions,\n\t clearImageCache: clearImageCache,\n\t TEXT_RENDERING_MODE: TEXT_RENDERING_MODE,\n\t exportPDF: exportPDF,\n\t exportPDFToBlob: exportPDFToBlob,\n\t saveAs: saveAs$1,\n\t toDataURL: toDataURL,\n\t toBlob: toBlob,\n\t render: render$1\n\t});\n\n\tkendo.drawing.exportPDF = kendo.pdf.exportPDF;\n\tkendo.drawing.pdf = kendo.pdf;\n\n\t})(window.kendo.jQuery);\n\n\t}, __webpack_require__(3));\n\n/***/ }),\n\n/***/ 1607:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"./pako\");\n\n/***/ }),\n\n/***/ 1608:\n/***/ (function(module, exports) {\n\n\tmodule.exports = require(\"../kendo.drawing\");\n\n/***/ })\n\n/******/ });"],"sourceRoot":""}