From 4f8b301c77bc7f1cbc91115e47d281c18cafd035 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sat, 13 May 2017 14:31:45 -0700 Subject: [PATCH] resume in color:_doOpacity --- pitfall/pdfkit/lib/gradient.js | 240 +++++++++++++++++++++++ pitfall/pdfkit/lib/mixins/color.js | 304 +++++++++++++++++++++++++++++ pitfall/pdfkit/lib/reference.js | 117 ----------- pitfall/pitfall/kit/color.rkt | 256 ++++++++++++++++++++++++ pitfall/pitfall/kit/document.rkt | 12 +- pitfall/pitfall/kit/helper.rkt | 21 +- pitfall/pitfall/kit/object.rkt | 10 +- pitfall/pitfall/kit/vector.rkt | 67 ++++++- pitfall/pktest/test.pdf | Bin 645078 -> 728094 bytes pitfall/pktest/test0.coffee | 2 +- pitfall/pktest/test0.pdf | Bin 692 -> 1163 bytes pitfall/pktest/test0.rkt | 7 + pitfall/pktest/test0rkt.pdf | 63 ++++++ pitfall/pktest/test1.coffee | 24 +++ pitfall/pktest/test1.pdf | 104 ++++++++++ pitfall/pktest/test1.rkt | 18 ++ pitfall/pktest/test1rkt.pdf | 0 pitfall/pktest/testrkt0.rkt | 21 -- 18 files changed, 1106 insertions(+), 160 deletions(-) create mode 100644 pitfall/pdfkit/lib/gradient.js create mode 100644 pitfall/pdfkit/lib/mixins/color.js delete mode 100644 pitfall/pdfkit/lib/reference.js create mode 100644 pitfall/pitfall/kit/color.rkt create mode 100644 pitfall/pktest/test0.rkt create mode 100644 pitfall/pktest/test0rkt.pdf create mode 100644 pitfall/pktest/test1.coffee create mode 100644 pitfall/pktest/test1.pdf create mode 100644 pitfall/pktest/test1.rkt create mode 100644 pitfall/pktest/test1rkt.pdf delete mode 100644 pitfall/pktest/testrkt0.rkt diff --git a/pitfall/pdfkit/lib/gradient.js b/pitfall/pdfkit/lib/gradient.js new file mode 100644 index 00000000..06a04606 --- /dev/null +++ b/pitfall/pdfkit/lib/gradient.js @@ -0,0 +1,240 @@ +// Generated by CoffeeScript 1.12.5 +(function() { + var PDFGradient, PDFLinearGradient, PDFRadialGradient, + extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty; + + PDFGradient = (function() { + function PDFGradient(doc) { + this.doc = doc; + this.stops = []; + this.embedded = false; + this.transform = [1, 0, 0, 1, 0, 0]; + this._colorSpace = 'DeviceRGB'; + } + + PDFGradient.prototype.stop = function(pos, color, opacity) { + if (opacity == null) { + opacity = 1; + } + opacity = Math.max(0, Math.min(1, opacity)); + this.stops.push([pos, this.doc._normalizeColor(color), opacity]); + return this; + }; + + PDFGradient.prototype.setTransform = function(m11, m12, m21, m22, dx, dy) { + this.transform = [m11, m12, m21, m22, dx, dy]; + return this; + }; + + PDFGradient.prototype.embed = function(m) { + var bounds, encode, fn, form, grad, gstate, i, j, k, last, len, opacityPattern, pageBBox, pattern, ref, ref1, shader, stop, stops, v; + if (this.stops.length === 0) { + return; + } + this.embedded = true; + this.matrix = m; + last = this.stops[this.stops.length - 1]; + if (last[0] < 1) { + this.stops.push([1, last[1], last[2]]); + } + bounds = []; + encode = []; + stops = []; + for (i = j = 0, ref = this.stops.length - 1; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { + encode.push(0, 1); + if (i + 2 !== this.stops.length) { + bounds.push(this.stops[i + 1][0]); + } + fn = this.doc.ref({ + FunctionType: 2, + Domain: [0, 1], + C0: this.stops[i + 0][1], + C1: this.stops[i + 1][1], + N: 1 + }); + stops.push(fn); + fn.end(); + } + if (stops.length === 1) { + fn = stops[0]; + } else { + fn = this.doc.ref({ + FunctionType: 3, + Domain: [0, 1], + Functions: stops, + Bounds: bounds, + Encode: encode + }); + fn.end(); + } + this.id = 'Sh' + (++this.doc._gradCount); + shader = this.shader(fn); + shader.end(); + pattern = this.doc.ref({ + Type: 'Pattern', + PatternType: 2, + Shading: shader, + Matrix: (function() { + var k, len, ref1, results; + ref1 = this.matrix; + results = []; + for (k = 0, len = ref1.length; k < len; k++) { + v = ref1[k]; + results.push(+v.toFixed(5)); + } + return results; + }).call(this) + }); + pattern.end(); + if (this.stops.some(function(stop) { + return stop[2] < 1; + })) { + grad = this.opacityGradient(); + grad._colorSpace = 'DeviceGray'; + ref1 = this.stops; + for (k = 0, len = ref1.length; k < len; k++) { + stop = ref1[k]; + grad.stop(stop[0], [stop[2]]); + } + grad = grad.embed(this.matrix); + pageBBox = [0, 0, this.doc.page.width, this.doc.page.height]; + form = this.doc.ref({ + Type: 'XObject', + Subtype: 'Form', + FormType: 1, + BBox: pageBBox, + Group: { + Type: 'Group', + S: 'Transparency', + CS: 'DeviceGray' + }, + Resources: { + ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], + Pattern: { + Sh1: grad + } + } + }); + form.write("/Pattern cs /Sh1 scn"); + form.end((pageBBox.join(" ")) + " re f"); + gstate = this.doc.ref({ + Type: 'ExtGState', + SMask: { + Type: 'Mask', + S: 'Luminosity', + G: form + } + }); + gstate.end(); + opacityPattern = this.doc.ref({ + Type: 'Pattern', + PatternType: 1, + PaintType: 1, + TilingType: 2, + BBox: pageBBox, + XStep: pageBBox[2], + YStep: pageBBox[3], + Resources: { + ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'], + Pattern: { + Sh1: pattern + }, + ExtGState: { + Gs1: gstate + } + } + }); + opacityPattern.write("/Gs1 gs /Pattern cs /Sh1 scn"); + opacityPattern.end((pageBBox.join(" ")) + " re f"); + this.doc.page.patterns[this.id] = opacityPattern; + } else { + this.doc.page.patterns[this.id] = pattern; + } + return pattern; + }; + + PDFGradient.prototype.apply = function(op) { + var dx, dy, m, m0, m1, m11, m12, m2, m21, m22, m3, m4, m5, ref, ref1; + ref = this.doc._ctm.slice(), m0 = ref[0], m1 = ref[1], m2 = ref[2], m3 = ref[3], m4 = ref[4], m5 = ref[5]; + ref1 = this.transform, m11 = ref1[0], m12 = ref1[1], m21 = ref1[2], m22 = ref1[3], dx = ref1[4], dy = ref1[5]; + m = [m0 * m11 + m2 * m12, m1 * m11 + m3 * m12, m0 * m21 + m2 * m22, m1 * m21 + m3 * m22, m0 * dx + m2 * dy + m4, m1 * dx + m3 * dy + m5]; + if (!(this.embedded && m.join(" ") === this.matrix.join(" "))) { + this.embed(m); + } + return this.doc.addContent("/" + this.id + " " + op); + }; + + return PDFGradient; + + })(); + + PDFLinearGradient = (function(superClass) { + extend(PDFLinearGradient, superClass); + + function PDFLinearGradient(doc, x1, y1, x2, y2) { + this.doc = doc; + this.x1 = x1; + this.y1 = y1; + this.x2 = x2; + this.y2 = y2; + PDFLinearGradient.__super__.constructor.apply(this, arguments); + } + + PDFLinearGradient.prototype.shader = function(fn) { + return this.doc.ref({ + ShadingType: 2, + ColorSpace: this._colorSpace, + Coords: [this.x1, this.y1, this.x2, this.y2], + Function: fn, + Extend: [true, true] + }); + }; + + PDFLinearGradient.prototype.opacityGradient = function() { + return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2); + }; + + return PDFLinearGradient; + + })(PDFGradient); + + PDFRadialGradient = (function(superClass) { + extend(PDFRadialGradient, superClass); + + function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) { + this.doc = doc; + this.x1 = x1; + this.y1 = y1; + this.r1 = r1; + this.x2 = x2; + this.y2 = y2; + this.r2 = r2; + PDFRadialGradient.__super__.constructor.apply(this, arguments); + } + + PDFRadialGradient.prototype.shader = function(fn) { + return this.doc.ref({ + ShadingType: 3, + ColorSpace: this._colorSpace, + Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2], + Function: fn, + Extend: [true, true] + }); + }; + + PDFRadialGradient.prototype.opacityGradient = function() { + return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2); + }; + + return PDFRadialGradient; + + })(PDFGradient); + + module.exports = { + PDFGradient: PDFGradient, + PDFLinearGradient: PDFLinearGradient, + PDFRadialGradient: PDFRadialGradient + }; + +}).call(this); diff --git a/pitfall/pdfkit/lib/mixins/color.js b/pitfall/pdfkit/lib/mixins/color.js new file mode 100644 index 00000000..5dd8bc4e --- /dev/null +++ b/pitfall/pdfkit/lib/mixins/color.js @@ -0,0 +1,304 @@ +// Generated by CoffeeScript 1.12.5 +(function() { + var PDFGradient, PDFLinearGradient, PDFRadialGradient, namedColors, ref; + + ref = require('../gradient'), PDFGradient = ref.PDFGradient, PDFLinearGradient = ref.PDFLinearGradient, PDFRadialGradient = ref.PDFRadialGradient; + + module.exports = { + initColor: function() { + this._opacityRegistry = {}; + this._opacityCount = 0; + return this._gradCount = 0; + }, + _normalizeColor: function(color) { + var hex, part; + if (color instanceof PDFGradient) { + return color; + } + if (typeof color === 'string') { + if (color.charAt(0) === '#') { + if (color.length === 4) { + color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, "#$1$1$2$2$3$3"); + } + hex = parseInt(color.slice(1), 16); + color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff]; + } else if (namedColors[color]) { + color = namedColors[color]; + } + } + if (Array.isArray(color)) { + if (color.length === 3) { + color = (function() { + var i, len, results; + results = []; + for (i = 0, len = color.length; i < len; i++) { + part = color[i]; + results.push(part / 255); + } + return results; + })(); + } else if (color.length === 4) { + color = (function() { + var i, len, results; + results = []; + for (i = 0, len = color.length; i < len; i++) { + part = color[i]; + results.push(part / 100); + } + return results; + })(); + } + return color; + } + return null; + }, + _setColor: function(color, stroke) { + var op, space; + color = this._normalizeColor(color); + if (!color) { + return false; + } + op = stroke ? 'SCN' : 'scn'; + if (color instanceof PDFGradient) { + this._setColorSpace('Pattern', stroke); + color.apply(op); + } else { + space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB'; + this._setColorSpace(space, stroke); + color = color.join(' '); + this.addContent(color + " " + op); + } + return true; + }, + _setColorSpace: function(space, stroke) { + var op; + op = stroke ? 'CS' : 'cs'; + return this.addContent("/" + space + " " + op); + }, + fillColor: function(color, opacity) { + var set; + if (opacity == null) { + opacity = 1; + } + set = this._setColor(color, false); + if (set) { + this.fillOpacity(opacity); + } + this._fillColor = [color, opacity]; + return this; + }, + strokeColor: function(color, opacity) { + var set; + if (opacity == null) { + opacity = 1; + } + set = this._setColor(color, true); + if (set) { + this.strokeOpacity(opacity); + } + return this; + }, + opacity: function(opacity) { + this._doOpacity(opacity, opacity); + return this; + }, + fillOpacity: function(opacity) { + this._doOpacity(opacity, null); + return this; + }, + strokeOpacity: function(opacity) { + this._doOpacity(null, opacity); + return this; + }, + _doOpacity: function(fillOpacity, strokeOpacity) { + var dictionary, id, key, name, ref1; + if (!((fillOpacity != null) || (strokeOpacity != null))) { + return; + } + if (fillOpacity != null) { + fillOpacity = Math.max(0, Math.min(1, fillOpacity)); + } + if (strokeOpacity != null) { + strokeOpacity = Math.max(0, Math.min(1, strokeOpacity)); + } + key = fillOpacity + "_" + strokeOpacity; + if (this._opacityRegistry[key]) { + ref1 = this._opacityRegistry[key], dictionary = ref1[0], name = ref1[1]; + } else { + dictionary = { + Type: 'ExtGState' + }; + if (fillOpacity != null) { + dictionary.ca = fillOpacity; + } + if (strokeOpacity != null) { + dictionary.CA = strokeOpacity; + } + dictionary = this.ref(dictionary); + dictionary.end(); + id = ++this._opacityCount; + name = "Gs" + id; + this._opacityRegistry[key] = [dictionary, name]; + } + this.page.ext_gstates[name] = dictionary; + return this.addContent("/" + name + " gs"); + }, + linearGradient: function(x1, y1, x2, y2) { + return new PDFLinearGradient(this, x1, y1, x2, y2); + }, + radialGradient: function(x1, y1, r1, x2, y2, r2) { + return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2); + } + }; + + namedColors = { + aliceblue: [240, 248, 255], + antiquewhite: [250, 235, 215], + aqua: [0, 255, 255], + aquamarine: [127, 255, 212], + azure: [240, 255, 255], + beige: [245, 245, 220], + bisque: [255, 228, 196], + black: [0, 0, 0], + blanchedalmond: [255, 235, 205], + blue: [0, 0, 255], + blueviolet: [138, 43, 226], + brown: [165, 42, 42], + burlywood: [222, 184, 135], + cadetblue: [95, 158, 160], + chartreuse: [127, 255, 0], + chocolate: [210, 105, 30], + coral: [255, 127, 80], + cornflowerblue: [100, 149, 237], + cornsilk: [255, 248, 220], + crimson: [220, 20, 60], + cyan: [0, 255, 255], + darkblue: [0, 0, 139], + darkcyan: [0, 139, 139], + darkgoldenrod: [184, 134, 11], + darkgray: [169, 169, 169], + darkgreen: [0, 100, 0], + darkgrey: [169, 169, 169], + darkkhaki: [189, 183, 107], + darkmagenta: [139, 0, 139], + darkolivegreen: [85, 107, 47], + darkorange: [255, 140, 0], + darkorchid: [153, 50, 204], + darkred: [139, 0, 0], + darksalmon: [233, 150, 122], + darkseagreen: [143, 188, 143], + darkslateblue: [72, 61, 139], + darkslategray: [47, 79, 79], + darkslategrey: [47, 79, 79], + darkturquoise: [0, 206, 209], + darkviolet: [148, 0, 211], + deeppink: [255, 20, 147], + deepskyblue: [0, 191, 255], + dimgray: [105, 105, 105], + dimgrey: [105, 105, 105], + dodgerblue: [30, 144, 255], + firebrick: [178, 34, 34], + floralwhite: [255, 250, 240], + forestgreen: [34, 139, 34], + fuchsia: [255, 0, 255], + gainsboro: [220, 220, 220], + ghostwhite: [248, 248, 255], + gold: [255, 215, 0], + goldenrod: [218, 165, 32], + gray: [128, 128, 128], + grey: [128, 128, 128], + green: [0, 128, 0], + greenyellow: [173, 255, 47], + honeydew: [240, 255, 240], + hotpink: [255, 105, 180], + indianred: [205, 92, 92], + indigo: [75, 0, 130], + ivory: [255, 255, 240], + khaki: [240, 230, 140], + lavender: [230, 230, 250], + lavenderblush: [255, 240, 245], + lawngreen: [124, 252, 0], + lemonchiffon: [255, 250, 205], + lightblue: [173, 216, 230], + lightcoral: [240, 128, 128], + lightcyan: [224, 255, 255], + lightgoldenrodyellow: [250, 250, 210], + lightgray: [211, 211, 211], + lightgreen: [144, 238, 144], + lightgrey: [211, 211, 211], + lightpink: [255, 182, 193], + lightsalmon: [255, 160, 122], + lightseagreen: [32, 178, 170], + lightskyblue: [135, 206, 250], + lightslategray: [119, 136, 153], + lightslategrey: [119, 136, 153], + lightsteelblue: [176, 196, 222], + lightyellow: [255, 255, 224], + lime: [0, 255, 0], + limegreen: [50, 205, 50], + linen: [250, 240, 230], + magenta: [255, 0, 255], + maroon: [128, 0, 0], + mediumaquamarine: [102, 205, 170], + mediumblue: [0, 0, 205], + mediumorchid: [186, 85, 211], + mediumpurple: [147, 112, 219], + mediumseagreen: [60, 179, 113], + mediumslateblue: [123, 104, 238], + mediumspringgreen: [0, 250, 154], + mediumturquoise: [72, 209, 204], + mediumvioletred: [199, 21, 133], + midnightblue: [25, 25, 112], + mintcream: [245, 255, 250], + mistyrose: [255, 228, 225], + moccasin: [255, 228, 181], + navajowhite: [255, 222, 173], + navy: [0, 0, 128], + oldlace: [253, 245, 230], + olive: [128, 128, 0], + olivedrab: [107, 142, 35], + orange: [255, 165, 0], + orangered: [255, 69, 0], + orchid: [218, 112, 214], + palegoldenrod: [238, 232, 170], + palegreen: [152, 251, 152], + paleturquoise: [175, 238, 238], + palevioletred: [219, 112, 147], + papayawhip: [255, 239, 213], + peachpuff: [255, 218, 185], + peru: [205, 133, 63], + pink: [255, 192, 203], + plum: [221, 160, 221], + powderblue: [176, 224, 230], + purple: [128, 0, 128], + red: [255, 0, 0], + rosybrown: [188, 143, 143], + royalblue: [65, 105, 225], + saddlebrown: [139, 69, 19], + salmon: [250, 128, 114], + sandybrown: [244, 164, 96], + seagreen: [46, 139, 87], + seashell: [255, 245, 238], + sienna: [160, 82, 45], + silver: [192, 192, 192], + skyblue: [135, 206, 235], + slateblue: [106, 90, 205], + slategray: [112, 128, 144], + slategrey: [112, 128, 144], + snow: [255, 250, 250], + springgreen: [0, 255, 127], + steelblue: [70, 130, 180], + tan: [210, 180, 140], + teal: [0, 128, 128], + thistle: [216, 191, 216], + tomato: [255, 99, 71], + turquoise: [64, 224, 208], + violet: [238, 130, 238], + wheat: [245, 222, 179], + white: [255, 255, 255], + whitesmoke: [245, 245, 245], + yellow: [255, 255, 0], + yellowgreen: [154, 205, 50] + }; + +}).call(this); diff --git a/pitfall/pdfkit/lib/reference.js b/pitfall/pdfkit/lib/reference.js deleted file mode 100644 index cf745f25..00000000 --- a/pitfall/pdfkit/lib/reference.js +++ /dev/null @@ -1,117 +0,0 @@ -// Generated by CoffeeScript 1.12.5 - -/* -PDFReference - represents a reference to another object in the PDF object heirarchy -By Devon Govett - */ - -(function() { - var PDFObject, PDFReference, stream, zlib, - bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty; - - zlib = require('zlib'); - - stream = require('stream'); - - PDFReference = (function(superClass) { - extend(PDFReference, superClass); - - function PDFReference(document, id, data) { - this.document = document; - this.id = id; - this.data = data != null ? data : {}; - this.finalize = bind(this.finalize, this); - PDFReference.__super__.constructor.call(this, { - decodeStrings: false - }); - this.gen = 0; - this.deflate = null; - this.compress = false; - this.uncompressedLength = 0; - this.chunks = []; - } - - PDFReference.prototype.initDeflate = function() { - this.data.Filter = 'FlateDecode'; - this.deflate = zlib.createDeflate(); - this.deflate.on('data', (function(_this) { - return function(chunk) { - console.log("got data event for ref " + _this.id + " from " + _this.toString()); - _this.chunks.push(chunk); - return _this.data.Length += chunk.length; - }; - })(this)); - return this.deflate.on('end', (function(_this) { - return function() { - console.log("got end event for ref " + _this.id + " from " + _this.toString()); - return _this.finalize(); - }; - })(this)); - }; - - PDFReference.prototype._write = function(chunk, encoding, callback) { - var base; - if (!Buffer.isBuffer(chunk)) { - chunk = new Buffer(chunk + '\n', 'binary'); - } - this.uncompressedLength += chunk.length; - if ((base = this.data).Length == null) { - base.Length = 0; - } - if (this.compress) { - if (!this.deflate) { - this.initDeflate(); - } - console.log("chunk = " + chunk); - this.deflate.write(chunk); - console.log("wrote chunk"); - } else { - this.chunks.push(chunk); - this.data.Length += chunk.length; - } - return callback(); - }; - - PDFReference.prototype.end = function(chunk) { - PDFReference.__super__.end.apply(this, arguments); - if (this.deflate) { - return this.deflate.end(); - } else { - return this.finalize(); - } - }; - - PDFReference.prototype.finalize = function() { - var chunk, i, len, ref; - this.offset = this.document._offset; - this.document._write(this.id + " " + this.gen + " obj"); - this.document._write(PDFObject.convert(this.data)); - if (this.chunks.length) { - this.document._write('stream'); - ref = this.chunks; - for (i = 0, len = ref.length; i < len; i++) { - chunk = ref[i]; - this.document._write(chunk); - } - this.chunks.length = 0; - this.document._write('\nendstream'); - } - this.document._write('endobj'); - return this.document._refEnd(this); - }; - - PDFReference.prototype.toString = function() { - return this.id + " " + this.gen + " R"; - }; - - return PDFReference; - - })(stream.Writable); - - module.exports = PDFReference; - - PDFObject = require('./object'); - -}).call(this); diff --git a/pitfall/pitfall/kit/color.rkt b/pitfall/pitfall/kit/color.rkt new file mode 100644 index 00000000..806aefa6 --- /dev/null +++ b/pitfall/pitfall/kit/color.rkt @@ -0,0 +1,256 @@ +#lang racket/base +(require racket/class racket/string) +(provide color-mixin) +(require "helper.rkt") + +(define (color-mixin %) + (class % + (super-new) + (field [(@_opacityRegistry _opacityRegistry) #f] + [(@_opacityCount _opacityCount) #f] + [(@_gradCount _gradCount) #f]) + + (define/public (initColor) + (set! @_opacityRegistry (mhash)) + (set! @_opacityCount 0) + (set! @_gradCount 0)) + + ;; parses color string into list of values + (public [@_normalizeColor _normalizeColor]) + (define (@_normalizeColor color) + (cond + #;[(is-a? color PDFGradient) color] ; todo + ;; 3-digit hex becomes 6-digit hex + [(and (string? color) + (regexp-match #px"^#(?i:[0-9A-F]){3}$" color)) + (@_normalizeColor + (list->string (cdr (apply append + (for/list ([c (in-string color)]) + (list c c))))))] + ;; 6-digit hexish string becomes list of hex numbers and maybe #f vals + [(and (string? color) (= 7 (string-length color)) (string-prefix? color "#")) + (@_normalizeColor + (for/list ([str (in-list (regexp-match* #rx".." (string-trim color "#")))]) + (string->number str 16)))] + ;; named color + [(and (string? color) (hash-ref namedColors color #f)) => @_normalizeColor] + ;; array of numbers + [(and (list? color) (andmap number? color)) + (for/list ([i (in-list color)]) + (define x (/ i (case (length color) + [(3) 255.0] ; RGB + [(4) 100.0] ; CMYK + [else 1]))) + (if (integer? x) (inexact->exact x) x))] + [else #f])) + + (public [@_setColor _setColor]) + (define (@_setColor color stroke) + (set! color (@_normalizeColor color)) + (define op (if stroke "SCN" "scn")) + (cond + [(not color)] + #;[(is-a? color PDFGradient) + (@_setColorSpace "Pattern" stroke) + (send color apply op) + #t] ; todo + [else + (define space (if (= (length color) 4) + "DeviceCMYK" + "DeviceRGB")) + (@_setColorSpace space stroke) + (set! color (string-join (map number color) " ")) + (send this addContent (format "~a ~a" color op)) + #t])) + + + (public [@_setColorSpace _setColorSpace]) + (define (@_setColorSpace space stroke) + (define op (if stroke "CS" "cs")) + (send this addContent (format "/~a ~a" space op))) + + + (field ([@_fillColor _fillColor] #f)) + (public [@fillColor fillColor]) + (define (@fillColor color [opacity 1]) + (define set (@_setColor color #f)) + (when set (@fillOpacity opacity)) + + ;; save this for text wrapper, which needs to reset + ;; the fill color on new pages + (set! @_fillColor (list color opacity)) + this) + + + (public [@fillOpacity fillOpacity]) + (define (@fillOpacity opacity) + (@_doOpacity opacity #f) + this) + + + (public [@_doOpacity doOpacity]) + (define (@_doOpacity fillOpacity strokeOpacity) + (error 'bonk)) + + )) + +(define namedColors + (mhash "aliceblue" '(240 248 255) + "antiquewhite" '(250 235 215) + "aqua" '(0 255 255) + "aquamarine" '(127 255 212) + "azure" '(240 255 255) + "beige" '(245 245 220) + "bisque" '(255 228 196) + "black" '(0 0 0) + "blanchedalmond" '(255 235 205) + "blue" '(0 0 255) + "blueviolet" '(138 43 226) + "brown" '(165 42 42) + "burlywood" '(222 184 135) + "cadetblue" '(95 158 160) + "chartreuse" '(127 255 0) + "chocolate" '(210 105 30) + "coral" '(255 127 80) + "cornflowerblue" '(100 149 237) + "cornsilk" '(255 248 220) + "crimson" '(220 20 60) + "cyan" '(0 255 255) + "darkblue" '(0 0 139) + "darkcyan" '(0 139 139) + "darkgoldenrod" '(184 134 11) + "darkgray" '(169 169 169) + "darkgreen" '(0 100 0) + "darkgrey" '(169 169 169) + "darkkhaki" '(189 183 107) + "darkmagenta" '(139 0 139) + "darkolivegreen" '(85 107 47) + "darkorange" '(255 140 0) + "darkorchid" '(153 50 204) + "darkred" '(139 0 0) + "darksalmon" '(233 150 122) + "darkseagreen" '(143 188 143) + "darkslateblue" '(72 61 139) + "darkslategray" '(47 79 79) + "darkslategrey" '(47 79 79) + "darkturquoise" '(0 206 209) + "darkviolet" '(148 0 211) + "deeppink" '(255 20 147) + "deepskyblue" '(0 191 255) + "dimgray" '(105 105 105) + "dimgrey" '(105 105 105) + "dodgerblue" '(30 144 255) + "firebrick" '(178 34 34) + "floralwhite" '(255 250 240) + "forestgreen" '(34 139 34) + "fuchsia" '(255 0 255) + "gainsboro" '(220 220 220) + "ghostwhite" '(248 248 255) + "gold" '(255 215 0) + "goldenrod" '(218 165 32) + "gray" '(128 128 128) + "grey" '(128 128 128) + "green" '(0 128 0) + "greenyellow" '(173 255 47) + "honeydew" '(240 255 240) + "hotpink" '(255 105 180) + "indianred" '(205 92 92) + "indigo" '(75 0 130) + "ivory" '(255 255 240) + "khaki" '(240 230 140) + "lavender" '(230 230 250) + "lavenderblush" '(255 240 245) + "lawngreen" '(124 252 0) + "lemonchiffon" '(255 250 205) + "lightblue" '(173 216 230) + "lightcoral" '(240 128 128) + "lightcyan" '(224 255 255) + "lightgoldenrodyellow" '(250 250 210) + "lightgray" '(211 211 211) + "lightgreen" '(144 238 144) + "lightgrey" '(211 211 211) + "lightpink" '(255 182 193) + "lightsalmon" '(255 160 122) + "lightseagreen" '(32 178 170) + "lightskyblue" '(135 206 250) + "lightslategray" '(119 136 153) + "lightslategrey" '(119 136 153) + "lightsteelblue" '(176 196 222) + "lightyellow" '(255 255 224) + "lime" '(0 255 0) + "limegreen" '(50 205 50) + "linen" '(250 240 230) + "magenta" '(255 0 255) + "maroon" '(128 0 0) + "mediumaquamarine" '(102 205 170) + "mediumblue" '(0 0 205) + "mediumorchid" '(186 85 211) + "mediumpurple" '(147 112 219) + "mediumseagreen" '(60 179 113) + "mediumslateblue" '(123 104 238) + "mediumspringgreen" '(0 250 154) + "mediumturquoise" '(72 209 204) + "mediumvioletred" '(199 21 133) + "midnightblue" '(25 25 112) + "mintcream" '(245 255 250) + "mistyrose" '(255 228 225) + "moccasin" '(255 228 181) + "navajowhite" '(255 222 173) + "navy" '(0 0 128) + "oldlace" '(253 245 230) + "olive" '(128 128 0) + "olivedrab" '(107 142 35) + "orange" '(255 165 0) + "orangered" '(255 69 0) + "orchid" '(218 112 214) + "palegoldenrod" '(238 232 170) + "palegreen" '(152 251 152) + "paleturquoise" '(175 238 238) + "palevioletred" '(219 112 147) + "papayawhip" '(255 239 213) + "peachpuff" '(255 218 185) + "peru" '(205 133 63) + "pink" '(255 192 203) + "plum" '(221 160 221) + "powderblue" '(176 224 230) + "purple" '(128 0 128) + "red" '(255 0 0) + "rosybrown" '(188 143 143) + "royalblue" '(65 105 225) + "saddlebrown" '(139 69 19) + "salmon" '(250 128 114) + "sandybrown" '(244 164 96) + "seagreen" '(46 139 87) + "seashell" '(255 245 238) + "sienna" '(160 82 45) + "silver" '(192 192 192) + "skyblue" '(135 206 235) + "slateblue" '(106 90 205) + "slategray" '(112 128 144) + "slategrey" '(112 128 144) + "snow" '(255 250 250) + "springgreen" '(0 255 127) + "steelblue" '(70 130 180) + "tan" '(210 180 140) + "teal" '(0 128 128) + "thistle" '(216 191 216) + "tomato" '(255 99 71) + "turquoise" '(64 224 208) + "violet" '(238 130 238) + "wheat" '(245 222 179) + "white" '(255 255 255) + "whitesmoke" '(245 245 245) + "yellow" '(255 255 0) + "yellowgreen" '(154 205 50))) + + +(define c (new (color-mixin object%))) + +(module+ test + (require rackunit) + (check-equal? (send c _normalizeColor "#6699Cc") '(0.4 0.6 0.8)) + (check-false (send c _normalizeColor "#88aaCCC")) + (check-equal? (send c _normalizeColor "#69C") '(0.4 0.6 0.8)) + (check-equal? (send c _normalizeColor "#69c") '(0.4 0.6 0.8)) + (check-false (send c _normalizeColor "#8aCC")) + (check-equal? (send c _normalizeColor "aqua") '(0 1 1))) \ No newline at end of file diff --git a/pitfall/pitfall/kit/document.rkt b/pitfall/pitfall/kit/document.rkt index c5dc604d..4fa2b28b 100644 --- a/pitfall/pitfall/kit/document.rkt +++ b/pitfall/pitfall/kit/document.rkt @@ -1,14 +1,14 @@ #lang sugar/debug racket/base -(require racket/class racket/draw br/list racket/list racket/format racket/port) +(require racket/class racket/draw racket/list racket/format racket/port) (require sugar/debug) (provide PDFDocument) (require "reference.rkt" "struct.rkt" "object.rkt" "page.rkt" "helper.rkt" "params.rkt") -(require "vector.rkt") +(require "vector.rkt" "color.rkt") (define PDFDocument ;; actually is an instance of readable.Stream, which is an input port - (class (vector-mixin object%) + (class (color-mixin (vector-mixin object%)) (init-field [(@options options) (mhash)]) (let ([output-file (hash-ref @options 'out "outrkt.pdf")]) (super-new)) @@ -48,7 +48,7 @@ ;; todo ;; Initialize mixins - #;(@initColor) + (· this initColor) (· this initVector) #;(@initFonts) #;(@initText) @@ -102,7 +102,7 @@ ;; create a page object (set! @page (make-object PDFPage this options)) - (push-end! @_pageBuffer @page) + (push! @_pageBuffer @page) ;; add the page to the object store (define pages (· @_root data Pages data)) (hash-update! pages 'Kids (λ (val) (cons (· @page dictionary) val)) null) @@ -235,4 +235,4 @@ (with-output-to-file (string-append fn ".pdf") (λ () (display result-str)) #:exists 'replace) (check-equal? (file->bytes (string-append fn ".pdf")) (file->bytes (string-append fn " copy.pdf"))) - #;(display (bytes->string/latin-1 result-str))) \ No newline at end of file + (display (bytes->string/latin-1 result-str))) \ No newline at end of file diff --git a/pitfall/pitfall/kit/helper.rkt b/pitfall/pitfall/kit/helper.rkt index d2be36fb..0f852296 100644 --- a/pitfall/pitfall/kit/helper.rkt +++ b/pitfall/pitfall/kit/helper.rkt @@ -1,6 +1,6 @@ #lang racket/base -(require (for-syntax racket/base) racket/class sugar/list racket/list) -(provide (all-defined-out)) +(require (for-syntax racket/base) racket/class sugar/list racket/list (only-in br/list push! pop!)) +(provide (all-defined-out) push! pop!) (define-syntax (· stx) (syntax-case stx () @@ -56,10 +56,25 @@ (define (newBuffer x) (string->bytes/latin-1 (format "~a" x))) (define buffer-length bytes-length) + ;; js-style `push`, which appends to end of list (define-syntax-rule (push-end! id thing) (set! id (append id (list thing)))) (module+ test (define xs '(1 2 3)) (push-end! xs 4) - (check-equal? xs '(1 2 3 4))) \ No newline at end of file + (check-equal? xs '(1 2 3 4))) + +;; fancy number->string. bounds are checked, inexact integers are coerced. +(define (number x) + (unless (< -1e21 x 1e21) + (raise-argument-error 'number "valid number" x)) + (let ([x (/ (round (* x 1e6)) 1e6)]) + (number->string (if (integer? x) + (inexact->exact x) + x)))) + +(module+ test + (check-equal? (number 4.5) "4.5") + (check-equal? (number 4.0) "4") + (check-equal? (number 4) "4")) \ No newline at end of file diff --git a/pitfall/pitfall/kit/object.rkt b/pitfall/pitfall/kit/object.rkt index 3c630571..e8b1c1ab 100644 --- a/pitfall/pitfall/kit/object.rkt +++ b/pitfall/pitfall/kit/object.rkt @@ -1,6 +1,6 @@ #lang at-exp br (require racket/class racket/string racket/list srfi/19) -(require "struct.rkt") +(require "struct.rkt" "helper.rkt") (provide PDFObject) (define PDFObject @@ -45,12 +45,8 @@ (bytes-set! newbuff (add1 bidx) (bytes-ref buff bidx)) newbuff)) - (define/public (number n) - (unless (< -1e21 n 1e21) - (raise-argument-error 'number "valid number" n)) - (define result (/ (round (* n 1e6)) 1e6)) - (if (integer? result) (inexact->exact result) result)) - + ;; moved this to helper module + #;(define/public (number n) ···) (define/public (convert object) (let loop ([x object]) diff --git a/pitfall/pitfall/kit/vector.rkt b/pitfall/pitfall/kit/vector.rkt index 137ce2c1..fdfee094 100644 --- a/pitfall/pitfall/kit/vector.rkt +++ b/pitfall/pitfall/kit/vector.rkt @@ -1,14 +1,71 @@ #lang racket/base -(require racket/class) +(require racket/class racket/match racket/string racket/format) (provide vector-mixin) +(require "helper.rkt") + +(define default-ctm-value '(1 0 0 1 0 0)) (define (vector-mixin %) (class % (super-new) - (field [(@_ctm _ctm) '(1 0 0 1 0 0)] + (field [(@_ctm _ctm) default-ctm-value] [(@_ctmStack _ctmStack) null]) - (define/public (initVector) (void)) + (define/public (initVector) + (set! @_ctm default-ctm-value) + (set! @_ctmStack null)) + + (define/public (save) + (push! @_ctmStack @_ctm) + (send this addContent "q")) + + (define/public (restore) + (set! @_ctm (if (pair? @_ctmStack) (pop! @_ctmStack) default-ctm-value)) + (send this addContent "Q")) - (define/public (transform m11 m12 m21 m22 dx dy) - (send this addContent "1 0 0 -1 0 792 cm")))) ; todo debug \ No newline at end of file + (define/public (transform m11 m12 m21 m22 dx dy #:debug [debug #f]) + ;; keep track of the current transformation matrix + (match-define (list m0 m1 m2 m3 m4 m5) @_ctm) + (set! @_ctm (list (+ (* m0 m11) (* m2 m12)) + (+ (* m1 m11) (* m3 m12)) + (+ (* m0 m21) (* m2 m22)) + (+ (* m1 m21) (* m3 m22)) + (+ (* m0 dx) (* m2 dy) m4) + (+ (* m1 dx) (* m3 dy) m5))) + (define values (string-join (map number (list m11 m12 m21 m22 dx dy)) " ")) + (define result (format "~a cm" values)) + (if debug + result + (send this addContent result))) + + (define/public (moveTo x y) + (send this addContent (format "~a ~a m" x y))) + + (define/public (lineTo x y) + (send this addContent (format "~a ~a l" x y))) + + (public [@_windingRule _windingRule]) + (define (@_windingRule rule) + (if (and (string? rule) (regexp-match #rx"^even-?odd$" rule)) + "*" + "")) + + (define/public (fill color [rule #f]) + (when (regexp-match #rx"^(even-?odd)|(non-?zero)$" color) + (set! rule color) + (set! color #f)) + (when color (send this fillColor color)) ;; fillColor method is from color mixin + (send this addContent (format "f~a" (@_windingRule rule)))) + + )) + +(module+ test + (require rackunit) + (define v (new (vector-mixin object%))) + (check-equal? (· v _ctm) default-ctm-value) + (check-equal? (send v transform 1 2 3 4 5 6 #:debug #t) "1 2 3 4 5 6 cm") + (check-equal? (· v _ctm) '(1 2 3 4 5 6)) + (check-equal? (send v transform 1 2 3 4 5 6 #:debug #t) "1 2 3 4 5 6 cm") + (check-equal? (· v _ctm) '(7 10 15 22 28 40)) + (check-equal? (send v transform 1 2 3 4 5 6 #:debug #t) "1 2 3 4 5 6 cm") + (check-equal? (· v _ctm) '(37 54 81 118 153 222))) \ No newline at end of file diff --git a/pitfall/pktest/test.pdf b/pitfall/pktest/test.pdf index dfeb8076cacbc070cb9f32de89db1937fe4bee17..dcccbd0dd62b34ae0c87c41c17c5a2ab5a184223 100644 GIT binary patch delta 125512 zcmce<%dT}xmfs~e`6PONfGyELLhN1ZevwMms4`d}galQR8;C~Lah46rQ&y3dY0k%R zk5>T69i9Uu#A}!*;P?BFh&dzXTHncYPGve%-`R7-j2SUv++)OL{XhTvfBL`upa1#) z@qhjM<@|B@_*Z}PKY#nvKmGP6|IKgy?qB@tfBA8_-oE|WpMCq?zy4o-^VdIqJ5u5B z@#&xY^Yrn@ z_;=>tg@4zD|J)jIZ_ii$KKS=+@L%)SvcKWq5AE5HZRDTx&*$H?fBo6|f6G5R^Bej& z9{%j(@IQY1)qnl%zxbTtEK1|NGzn$Ny+~^3_fVp4Y?ik0b@47N#9# ztPEQuA%#aJK$7`)5);bgzGQ9O^nDtzzTCAjNvlNoY+Mms>kbL`9REh zJY5eTzx_tT?debc$#4G6|MbIe{`-IW=N~`(PWk?lF~9ra@4o%XKmFbD<6r#l+uwdW zovFge4HNX>f?uR=fnN$cD$U3pTc!~mzHSur|MnLNDjRV8xZIU4 zI;PC7?pMZrKAk_#ha;3bp3(lBPv_gSJst1&_IBTWH7Yfim7M?Cs+d2imzVeE<*3Fh zA59G-2g*zrwC~8-ve_d(#`KKB6oFDod!svZ^?l(A6-UE4S{ImfIiJ3s_uI!`EoCQB z-)1M3{Z+v2`}}7gpO@qH>v}vrPR9>Tsq&4iE8i#0>YFNJOj9SD2GTM4mv`InxXWGiwp3}MrGL9uQZU!K2@|-qruUOG+24ofW{x>gG z(5iAOR?%#{B5tpTANrR|sJeFzKP`dBJ0|zEx`vf?ogc9~$|61W;T;^#`FZ+!pv!0o zZ1mM>35j^{Z|v1ey_3}BUl^tYIsm`r6UniPz}$R>FBTEnmsT5c%Pd866A`jzP@^Xf z=>E2;P;~w}P8c3!XpI~l@3oa>qeqwel7g3B`cU&)nGD5Vs+Gu2#XrSe^lwy6toh|| z{5s=yTLd#`W}|mRZ*Vik8+yFm9)t|%%k9+Jn;~^Am4&fJW7VbVLY}Zu4+fD}DgT?X zZmME?Yv?xB9OFshntPAX$S$iy5eAA4RTu4v%n>`aVtD7PAl#~;vfZ5KuX6a>bJ$L6 zeGIEq&n=%I3*>}fydjBb=z3>db`*pcrUU}xwJ0f_^B67$Gccyk=f_-GIi3`3YK)kRhl~Eg0Jl(FH=o(H0hXXT(3QTPmUH}hz?!vhW*PV z;P(8wy%B&@+6EsY>96zcer+zai~JH#Fu#)ny!T&}5=R&rP;TB-w<&sw4Crd(mF5<; z95GkCR@7ySpZx~;@8712%L}FQ@Ps+_!b-{TrK3C*;3$i~(G( zm#^ck`_GU|YDVQ=U$tiRP^EHH6{p~FUSSi@ji|9vQN`+T8G2L#LN*ECF#Qg4CweVm zZ&fw2JNz5FY_W@{G?w!u4_{&->S9(;E?pPBmn-Cg-V2CuW>QGnZ;EV}Sn=?U!%*Sp7Ckp^Md5 zHgU>$cU}2Pqa~RtR2`9h8OyT!+;J*0PBEf(x18ldl5Pue(}VJwUKDBOI;X?)o(W4t%uwdFRP34zlzflh zWp1ucNiqK_G0|$0U|aJ&%`+M4m#)HG8&JJ!b~m8d+lcBniCHB{Be`#n__HZbLfPqc z5NR~e=o-flFAWu=-yswSB_j6HzK<0!{H2`y!wXhclc0@6MWJ8BVWJ-5;Wu8ijWt$~ zE>1`EZ#7Ei)AQ?ey6M>V%Z)fn_3F>2sy{npak(!OhQ0TM&{LCL$W~EI%sN+5BpjRg8!FC2 zizX`bvWb6{m|Es0e#-oB&Fy&jdsujV5YoO2jAYpoOhmZ->kR4`o*$RZM22k+Z7Pi( zEO!#u4DLRoV}35y}gN;(t$yUOlbx#gD}jqO!R#ITgTtYY@si~ zu9H2LnuM&u4PP&m1It5fq-zSII#peS>$aZej>&A zTWavqav!pyS^4*f*i`SADS`pzYqX(Yb-`E%c{v@JzuylmlbK&!5=%{G88{>9au;6j zKC@+z&VZ#)bI@h>r`AG`$tz5+muUe}`YG9Q1JGmFtFK2<+P&^N(-4Y2$c-kml0D2D zKa>CJSmWNivC2s0di;!{-m<)NqO*IwN>~@Lm(IiDWmph@r=RPjftA~@%k51hGG!)j zWM>Xo)0P6460%8T{O7Z@b+%kpmtHsTA@C~p%|M66ogZ`aGYR)Wb%}=Y(f*m;7hnkMh&%M-+K~zKJzrkQm+;81r0{AC@WCEKNBfb`%Un(r=Nl z3VtJQ#8B~-u&>Q@TV^$Rkm@x-8=H26jIUSrmEcTOqK(EsjX(Jt{#5Vf;wOyPNJVQY z(yz@%SQ^(mf^W#t^8}|Qt0QwSw(dU#2;?R|be^iFH)YE)G<&ea`}ZjEF8|HCG9l%g zASlD7r`4o@T+Lu^_|t9CQ35s{DSJn?%%-MlC-995x&B|?V|pKbkctwyH`kuuRkv4> z`zcml<{luh7$p8us)CO8@(s580CO}T3Ss8DQ}aKQTnE;_%1CH^75juEYg506d2+;4=8v=+>(qQx z_@*^bl$Cs0uH@e&kKu`=Q5|#$GMcg^OZ>nx>)4or;1Fq~Oap&uI78h=+V>QpK5P)m zmZHD^_IV@$ZCcXF+{4{Plq^$Gs+>6p{8{45$@VFjRKpyLpt#Pz@ z{Ww3q4g@cs2sAq|&Mfj%{LB|~31848AE1ZV+sBeF2dvymb)fUp$N#$9QpNr!H&hM# zsfI0AfAN>!vajmnFaP4dbqCqW9b|tV)BkxqV%k}}ejL9}#7&NSEg?Nh5e3gL_gX!` z?f!7wEZedp^Ks(K8U`hgn+2DL+pmsata$=6;KPNTX*Y5a$BcU}Ns|vZY#N>0 zK#*EGR)2(XKN;`i@*xkePlr7hd_GvwT`uf@B&NJF1_Ds90=#~)HO?_ma(%GdOr#N< z&*S;|<^H?l@%)A2IBYVSeghpYbfSdpiYQ=j)tOd~r>`q~ozNgW_+yNmAo&TJXBRt< z8TwrE$wr}U5?szKi9O*51(!Pl2K;%g`diC+Q!?igyJ3j{N%#Q_+i>&Pwu=fXN{r@TiV{SCoPqmHp_!R^>e+KYUyM z@Y;TW;+P)h?C5f-`>yEo$TrbCf^j@9$ZbaBegbHAJQ5y+07pt(mr-mlNCbmHAYe1L zku_A{8-sE$Ci|Ig&{+cPiumS%tUNTiSF9o(&&d6-{4vZO+`T#$>^#aEdp8$heXeK- z%v*TC1f<}GjXWOVCVJptc!X#Exv}w-!I2GO{ql)1fDE5bh@RNU5C}T>$*zcRkUns&?}gWh9A342_B4vfLMMuNQ3~7rY3CHWq^$4 zj%GnM(lI49ceI2}?6IKD0_=*Q2|h)|IbcUFwnCRHehUcx5ln!>%MMBh^`uWpFqcFH zPR|G1qj7AJ0CeKXLWc13C|3Cf^LAptUMv6}3o_^?V*76w^nv$>GYRz4nO#u~zyk-% z?)ozZXOG1nMgKK>Aelk;XS^?ay+3e(aqbZ3!}Av3KG~j%2Ls?gV2h3WxVjY`ws9Z; z6Op2b_5dRZwiLtByZCinTt0p>aslfr!4l?KQzRSb5@0m@{DFbLA((l6l1JLE;vx7Q z;LfwlIV@6Z`E!BW#9xFon6Qt#X1o-CE@7}w-00ZI7V=d{1WUv7lYd?#4Gu=Xe(*D z3$X}$BEB;c|DciAz?YX`6?uFRx-g8xtp(}Ers^4XgRKM%UBkx6u-!L8%FqG>gR=M7 z6RFq=2-_5CW3&^DraDd!zl{Wto{pjqC9MLKz2euZem-a0%i8={5Tj1>H_d=w<3nj4 z0aJfsMv&qo_)v7y)F7RA!!sDN+>f}02ja>igMwyc#W%Z>&%63|ggxm3(LSORt^EP| zWVP|~anfar3OaMb3-)>&^hwv$BR!TeeG-d0i0%t<=4R4tRqm6%+i4-GnZW zdizQH^n&?qNC2OhnV!E`p3PX-0^!dqkp~|)`2)H!(ZWu*(T?yZ+u|;sg2~%YjD`EG zI{HAcQ3Ro2a{ z(^jL<1T!_@?Q$ke&6sh!R6bWH@N|Mdqo8L*&rY$(bHfwtTM%q=^~oF+QD}m)0iSwF zjz?i$ET0z#~B1@ zX+eEPSbtBC%xUZflLsXlC8;=qM#G_*+>2hz=^DWVGAE!#jIS+X;S?UM6u=MPSRNQ) z;_h>^vM5>gT!foIJT>pIbT0!l3>ka$mg&WNpV$u#&y2Y>js7BK&^LYZy+g4N7VA)0+i z6R1UZs!la_K&H_{;r+w6T>)vD6K*6`4UYg@2UP6^OLb{PZw=;2;sE~#qoOLWZ+^NeGXE=~c0`;qNA#gDD1N@}L)5USB5m}Ly`pnb6`F)3rC z%(v1RbBz4ePn2-%ONe5Z`UE@er$=nKBOuJ{o$N}EjMDCp1VlTq155mIgri##jY94Eq@?xO*`+G+Db{9Ja>6j#J%?WEZ>I&Y1LGj)u0(gw z7Ym=1u9GXRkuhI$WPGwKIbqU*7GH$WC{w}R5qqL^EIDD$LoMVmUjS#It0!F8UQw^m zTwifU7JHV;FvZ4ROAH{=3_6`rYXPZwA{en8)O#C@KL}}&Qlmun1SQkL0;$_*nW|gF zidO#8?XDzyK%-z;)B`ZaHodw^L%EU3j3__)`4!1ChvF%DuXXI-CLFz!Mjes}qPI5DYV2VTVz+MB8ja1Up>6u!0g->{GTV!K z3F`;JSOZclDM{F7782Mo^%9mk(zvtp3xddF$v=ns4mQ3 zf{}bNm+07@S=b>iML(IYGOg06Us@7inpFOFJFdR02k>eCS1hg!eVyow6YKDR_{PpJ zOqm_q6`YCX$%1#OK>N(T0M`5~u(B>?7zis$p`|fS>J6YQl$nNTsVFn9X6*f{0cS+n zN4%GzM2QJ;T(!m|pG+Sr#P;}{uTN)0jW);(hz|qUUE}WP-aeGkM$yykO)4}HK=qb zlP}&7f8Rc^36_^oemVtaFk;WM{~>qr3FCaSXC`L@-h8fleY|tmdO=E@xe2`CxInw3;Inf7Ig8-(?&dp70B&|6>Ln!j9@}fLxrkA$IjR+W;+T+8f-jyz!)E*~gh zH3YB}d7MWd?1fW zc9;=dQ}00hZ?cifBpXv5r?Hjf6ElewRy!5|NQs71JJYtT{{Zh?!45Q6I;_`o=ZoZ| zf7XQ#*T;j1hS?SqCGJLH(eyxmkCpffHusJi{i;=e`Qp&B1nL4TnjV2LX->A$grD&b zs=vZDt|F^;Mk~ss&Du5hm;h|b^bRlQ2dKAG8cjFpSxsaGJM1jbQ%gLQp7a>&FB?QX zgfCu8y~mB+GK=X-*XF3o4H>9HLV96sANr9&GwGbLr{qifE0`q5_5R@u#LXY%%nP?hrFixVv0+V>G<2Y!}Ygn!^$1r^u zF)E+fDAr!1dGv`^I2~k>z{GIAqkr_AK^5WAE~&wa-u9$Ym}qaJG{jCVbc!7Raxwnf zY))Bp*u+N=+*Nh117ZqEE)9ufVVypYEE=+{1R}EnfDD==V#@;WU=!amC@iqwGE;Gc z6ag^*qg7`9RTD|GZHi`?Of0^zADRSY51ZejcNXmTOAQn`$ zSxvtnl=ah3V<BTduzg$* zR^D-Ijphx4T_;gOS>Xx`FBlXjo3-TzGH!4fYyQP;4om~Y2{#-=K@ky^Xk#4MzQTjM zr*3YO*%zc87(>wOEaHHbMx3tMf>0yffikYY=XkVj;}qc?)>|q&;W1<`nrlAb9#kf( z=dE^?9pH-ffwbKYEF&W8U93$o3LE&^y4AZQ`hB-QV1|C8+phcoMM%&S--X6pg=B1LP-l_D}K z7f5N5zMN9t3)5j^d>bAvaZ^02-Rzh%N})TvH?{!Mo_TdFlMi?@0$mu#g+) z??Ud7z-nO-fN&fSAjk{ZfpN+=>tauUjA>pVRH@KNh|6obN#zpHg4q96AW{Tp$XO!Z zw)_bt&lp35+NQC9Y{iO+6Dw-#%d0@dSa-<#tQ!Vqn~tvu9$S6%+5%|md;Q4ygZU3S zgHRJ*raA_*s%w$mw?w${WIZy<`2e%_aFhUDat8&|F#A-O5Q+;$W}EEPeG=ga zI)zLEFH=ENCAsKELhVqoR$nb*I}qOO-Xp&<&*;zUIt{^2;}iLl@BmlC`_q&7-+OJE z=BZ2rs4~H`tp7flbm@}uWHjiOItrW{*&P~^VL>!oC!HgxIzeR$^h1tGSLA!K6J-6% z&ygZ|Vttgr0^*2_7S9i8cw+ro&fjX)5v3pEDKzLh2UA>Q$R3t8x>^jc*qJj1SY4~I z5snc-z40e9iEMAf9%6hR~`)!~T7Z;HNT??+f$;L8gpjTT(XP!8W&q>D=NGPB-HJ zR^T9!KSp;+37nnSTC$ z9T%wMegKgZ9zb|F7bwkA(`kynVt+tT~vr?uypIn@o-~C zrMy+G{0lK8yN z?lj(`wSEgJwfZvz%c|RI*fr^F1~x{evL5T{=3u5=BB?ULk(3aWT7v+vY7ij?CjVDW zAo}$Q`gY|LLZGy19LtswW-i<;g*s6@G)NaHq5-PW*)wvFHn9u=76>_UNz`d9==zj8 z%)jg=3I!D@qlYKziEF~dtEVtXoBdLdb_mR@gMVZ9pEGkw$(Ld248p{@KySeHMCg+y z1B`L4%1EO<)F$8ShD!yR_mx>?B2?l1#nFC^?HDM3Be|@P2%6G)0ykh__zK~ zeHy)2Wdkllc0lj;)>k0~yg|P71*#WM79a!^s9g>TLqdv5d-voevK9NsP<*6>h*krK zeKd&08QU7Mvf(do$EKunrYD5@)`c8SRv?`L!3?o_E*geJ^%|O3nHWq%B(!WG+2(YM ztlO}8MJ_ywAlvjOVs#5lU{;c%N7M*wK;Fx#%9vKil(kUfnU2cvjwlayi4*DW;S*YLe zQ-u7yc;j%KfyRzYMUPP^qcBh6l5+`e6SJ8`G!%z0)suw!nUP zV>F|FDU3|14 z3l8i&4A_kZRxTNsAr!3eaJPgag2S{jEHsRtp&!0gw+cHiKZ#h6tiOOfJy_rr*-5-} z1Yi|Rj#f#86l0be2zDkxULnzN_*B;w%XMO9-e->z-6RYb^ zRImEnAcBJIxa2+RQphP|=FA%@-HD=%ne22-pkZ@FL3ZA8#cInKwTm$F%K8gwGkHm@ z5DTY;^z&Kb->O$7tk($_>cu|eZEAI<88nU=^ybvgd*xcZDyfa7YHkrV|4 zV-%G4ke7&vqGE`Ib`d4>R_!93q5ylL#1M?IAZ`@i=9=bx%qpZZj!}7IK`0YV@;`#c z6ugF51B7;o2R*__Uqh3;u6|~Sd0BN^4YPHcXrMfwpBgOYcmQ}^#6rhr`7fcz!_M>8311HB%* zab{P+`yia9F^1#-a3=~0`XZ=y$w>+b@+eTB6n`gWZW$P%QZ6fli!QX3%Xy;La~Yv< z)+@as0rJ9>qxDU5r8lurBwakFz!as}pgeZoam8dyAGM1U3%-XXzBh#kh=luo5cs8p z;dO0jT>e3;bY3nE-6jRwtqirf7H&ryh;%pv)rrW}0{kxp%G<-;<`@9-&*+mgc-#;% zBCpjaWRwE9?HJrDUQj3k4nSx|RmNUew@s-rFG2|+82tpHPKAfECN)s|hyIUfETk=C z-XLnzZBC>r1+I)<6-tn=`Mp^XVa^@~Yu#6+zj0E2fk#OVlg)wgH2H!UtbOtPTIys0 zrpqeu=k6g_6wdWR@|XDn9jU=ap_FMSa`7s3pTsxBWc3O(cLiOa^pea!9H-u@N!^3_ zmllNr#Y?kmQb$eQ6*Ps)Y?5iO+RS)wT56p#&F(;Cetz$^BKc?es!J z@jc~!+WV`xE2qd%1j~_ZyNU*kEi_?kxPoY4|4$sKHm=coV>fuIZV`0>GaRUf{)M=N zzBI+e)OI0gsv?ZmBv_;-bP<3`5O)GllXiesC?xn<-Q+LtO@HtnAFg4|&=6>MX5{NM zMs@5uu_Wj37^k}`)SR;_03N2fUJ9ZDC}jA1EWId zKcAz~#$dXoYM#(f-F64Az13QP`9&Kyu@zZzolH1*yCyCwXb4?*Jjs+n7xf1_>0A63 zZ`C@Wv-SrNneo$-=(pN4Pn-O?n#X=Br9#zqg{EhZx5}fTBm+)3M5z7af_K6lRY@(l zU|JPJr4iKNufYv!FjN#GLNN9z z2>VwcYE*c*$n1L;h^$?_n<3C3*5@s5-j)fFxFA5?=y4UC3QUTK_iBfNX$_35UpR>e zUR+?ZiUrjK4z_)Qaq|;mkpycx9o&*LLEQHzs|WQ#wOA^(&Uw^Wou$bSG8m&1(k_Wnc^u>M1&;DHNt8a1L6bbyC#cOt`ZOEXaf9% zgXDUmXiQLqT6SR60s`q4c^9$T^c*#_44u#%(K*McV>#7KYzwS(vJ@!6r7RqC~%uD#N%phc3 zcL<@ajcM82!wdpboV_+=8|VUyKr8sdB0gFx2&!<3!2-YuhN8d-R5cVd0MWEG@OmQh zG_a>IHf19(<(hBoDuEj-(@-@l`p=2z z{V%{t5u{jY@FtJ-F;jj@@s9px7nwvjj(MxGnFIq13@TU{TJl+FLFohGme6kCKpent$L%W+E5gYZh)VRd~YG;fa z)*Ok(I293)eW%ayE|Qk-CfNR5n2PvtJvG3pV!F)+)keQlmn32~ZaHjJWu0S%%pze7 z8$FG|fwmTLb-)-bNm|Z z6Sy065@2zgE?Wd*a@4;%|55w6JBMce%+MR&e@AJYydW<`$f5+-CpZSu?5*eT+AAz} zNnnvwZywWzM{zNu#?}t7ZxVtf;%$SS6QOJU%c;vZsPiT3Pv4c>SbMPVBbZ>0FQdpP zUgRjRj8EDKzz31XVrK-Qx3hamQN%X(3GdkdNt~i@tpf6v+lNz+-x2zj zUd)Hz2`$8v*c3m}aBFWIj!$_dRbw`3HEu$?Z zI=DjG&G^RxxEk|KTo68@7mRlc8z#8!Fz`l*$S8E6Q-ryh#R>j|1FkPCI58;zu|F_i zgLzq_Y$iKzn%?w^4b0&j2W6ANk|0t%h@r)~LGcLG@=Zpz8ag5NKb5Epxa6B^nN8Io zSa4;g<#R$#PYc^0r!jo2?gjw+F2}52bZo8_oT~HkvPAlz=Z0)GT3uaueuGkl~j`6AlWLu5uT` z2%^psyj3*d?f?}>5L+vfW#Kq3!2YWqD+x8AK52qaM-HX?Y2qPI)JYAd8lqkRpi;i@0$qA2@&qSSgYw7VJ0WUmql&XD|$89 zEWrL-hf=n_jo7PwoVo?IngC&SMA=omHQeS5gLCYv#?Wl1hqk}zyr>00L z`A2tG_$gwZzer_?z9nfC>98%x7`X=7AQL%4ngp`hS&LIuIWE%A)g!>NygP{rJU%^t z-vW)8(zV{_2xgNdHJgvdUR76xCr9cO1ZX5&L5K(7#eIgf^@b?hTh4#30ig?$81o{S zRgKeJ33Grzu&dZGGx&|6|6Wk0j5;9`vme=;%K5vbQPRF{u~|KGru|vr#Fj9#%iu@? zardB3f_vSW0E%&=x%(Sj-1G7VH_5T&Vm(dN@YorJmvdOGzh#hBZvvQek9>xx&TtH=2iRNgb@xg^M^*J@Vr2Mt1uk z$q0N2*&=XeWx*-_h!=zf^yk5gA4yg8(ba6LO|!8k_yv+0CQQ7>4t*$6v>7H6k}hQ{ zR2#vHX_y8|v(Tu;taLB(#NQqJcV_2hzYYn=AsZ%%Tp8t#v?)t=c}J^Aa|?5!RDs<8 z8@Y1!@3c%b%N=791;8_orGe1Qiba3~;m)?o22EhA*g}p7Qp=st;s!GQL@LBO;$hI( zn+t+KF+mCDnzc)GzfA{GSd;)eWCNI9@N2D200wt_$30D20q%c5J>sI)jwg`37!r~u z&+K+LO$JcPgT|5Ph8$#&X{G{4tfO=*m)IzptAjui&mK8QeYZTXvwA2;Dwq);N6a7r2b?F_cre)-m<7dOsK zAY8k1`ap)?$?dHXev3Z`*bFLsD*n378k~C+Rq;k+6s|ynSMf&q<<)1Ctp z1#yUcE300LT0YbJ$ADY(mFa__f}c$ke`U66^XBC2%L%HHv%~S*_0q}Z&E<=wPvweW z{RkSwBlAJ9ai&KLt^rBn=7lR9MU_$)g@lqV?F08$c#$eh!MBNHX&4i(QinSJ?gT6~ z`Ab8Mv^lJSlj~vs41-X7V@%pO2&svC$pz!fZ~o1eNW;QI);Yv`N3>U(F+aMSMK=V- zdH?9fUs>#tTkjP|k+|6_oOhSrCNC9#;-*QdA~Nhi#BC9TW+oA0 zoul?L5-GYNj0`qL%k^i{Bgx*npU}A%6V3gnEYiKMF2CCCSD|wUEBG|=M^h)b zWi?i9#jIh9noD=a8p!+~lAumi2&kOU=$az0m6jfjx=Dh%ECH4Y7!erN>St@!^5;K& z0j~RH=x<8`P6gRzh+DycKXWrJ5+m|`g6z^u z?_vUDd~&xsD(&4zrVGMM{3Fev9FDNPWQ5#7$Xss4pzQDF4}P}bzOr%{BKuM#FS`!t zjXRM>kl!3-YzJ^;dk^6BxVPUU9FEpHQpTe>y~vQ+<`Bwh(e# zRjOr+2Ah<%w=#$`R?6GJ$=vqzCYN=4GXLv0dnArWc=i+--Ba!GH%2v)+WpTAJA(eM z5`H~nGD1ecY{W|br$S!-t8%q%Mmf9$SRMz@rAEbexlJzhMhFz>w52+z&9tVi2N+gb zvv0j|TH4X`{K9B0c+SS)-96* zo5^Xkoi1)Ig7qwyH9;eUL1Wr9sa;3kA&i!FI}_+9U#8DTTmNoz50-D>9ogEle{~U@ zbLh-AcDRot`PGyo|NNa8M|vQep@8RjAl|Mdx9X(^JHq|(Gh#8fyo2vGA!v4Bh zHf!?Edy;lo&!igmUmDc>I#)m!tDuBTDZTTop#g%hlQr%{Eq*3Ek}-v7m3bK5QL zcL$LSD&NX#Q9dkvFB7*d0;%z}X2zC+^_kuWsD5a`L~8IPeI;5w*Zax&x1j)e;bqf> zfu?V)>GxKca9Yy40xEbh!4A&7d?uwN1(^=^KLR73MPo{sHo6MJ`XCh~3{2TQJH+t~ zq;t)s(+nGK8x`VN7nWJjtRqVzMFW+3nK7J&^AC}ki!sWe5f1QzCQ4y1St#=E%m-QC<9lEIP$rKG_2=uwCiU6U^tQcr5UUXQp`AZC4pVhrqKiU+_<@q zd^WJNaQ6edpUU5lvczA-6J~9{RKS5xI2eEYp=aO0k#v6s4h9U|Q4A$+h`DM-`FU0{ zueH0%t1Z=gxWg!nv4;}j18>4E($!j+JBQFR?wDbxJK8J0bNjH1NG=(o>rYMp4ud}G z<=wAb{z@zCJRs)NS#*ZIE6JT<)^LwA$O13qei=5I3eGz?Y!(x@0u6>gd{pL=QSmyr zBWW?(2Y7z1mfOBzwlSf{9vC(!%YbK``mongkM~di%3;&h-7aye9AT2%m@m&8wm5AgtZBrqE z*t+3B?NzBg`GUiXQ{*oSW#mozn)e0!!CZnocu2Fo$MM836aRn?8875-D9~0?mzfTx z1@jS;iUj3^zzCAxyk=N%6s)E}Dr5V(#~b2R(RTl!w+;Rbf~wct34@woA6e(ASk?6` zvv3F&#bAu;v#w(P4pi|J?ggiPinH*-*&-5?RE_`RU`jzcLv5&gEv(AS&)XviL={_2 z4x0~HYT`qG%?SE2ZM7oa1#+0|geR_!5ss1@ZRJd1wbFnrEOBVdMr%ur^rzg#eQ`_< z*;|^tV1)m&W5J%02}QU%W+a3!N_e_XwQlVEq&>6tBW~UhatA}i2m}a!&N$YAhU7oq z@(X6XS>AljYrRemwbKp{ImRk*W+2ufcjG8dxOx_VYg-7n&@Bv~fnAYt28OU2Yik~m z*;EDBT;MhWjE##ypd^Fyaytf>3uM>^fGy+;uW2wXgvP+5%4AdAe#(y(Wrdr0;1l|L zT?kh{`kQ<(o{vx$W#mGVoHeOCm?;)eZ-ycz2Y*x)DPcO`Sv+M>F*&eMfSeqhFc2sM zfd+%7OQnN#MrDPKjdlMwM})+hYW-~_CRYTRpQUdmjC7&UM1V#TzvCaaV%m%VJFo4Y z&wjL+qBHy7=4$WQX=YKGbmbm}L&QZytwKndUU2JDxmqNx#FQVLlA8#xHiB%3@n~u? zPw>~OH(&vRok%ppLuPV43;F}`8LI^3o#e!kNj~UEsD%E}Qm)eWFfhlNArA*NR8(xf z$JSIQEI{46&AgDAne$h}O9J2(;{Lw^sZA~7=xo17g7I0kHiK$oB8^OxjKo`_;jI$X zX6Eg$@50W59-ZC#+-D#+rCNI#Zax^21y2}=coheU|G*SOHPHAiKXXmww#i6ax%;0Q zTglXIJ#$)GsN4;)X!yru6@)nd%J9U@$U@!oW=I%%H~w~74Ug5ITq=RF2TvG!^%k$x zWJia(I|1+$U4v$BRD^@*v%xva>iI7D3HjkCN9aEI{bd-c-q4cV;jqnxa*57eQ4m+6 zTc4b_OS>9B0pH!3N7gzdO}0qNER>SLWEu`XohofCBY1`;<5qu4~BBXN3Q#bGLziWdBRVEFfS6+?7D`=L3Ff3{=rXh zgrDRe?9H7LkQYZAonpeOJ)I!VmUk!AR1yqKBGnrx1q&c5qGhz9V~|`tG>mM7GzO*wZ?5Di zU;L+DYYQl-mlxI_Qi}&<47sek=Q%8bY!S+=qimOBK|8^LA|5Qv~ z)LoRde+97O0BOUI_9R+(n3NjfCpKbl1LXsBK8T85rbj=kH$k6z{|YDbZx< zb|Jqv0OCKd*?NtqjVZn`{fFr~E5uZ~;1<0D8L4pk%~-Jaj2S$gebajgWB-<0d8cpEBgthK#_gam?ZY=Ensm@Fgxy#Oc3k$0F3C&2s$d|*0 z;Rs24E>qAUye8G#SE5DrwAh|8Z|r6Y!oG342&f+T{bfIEU~95L>CBHh5(9#-<9glt z*4FBnK)_P<(FEiQxX^*6CjYI`*Uy+aP@YG~*$aNa04pGy-bB#2h-v4A%e3`@YGUpclV#4lcQ2I=ktVzwt>JM(bKN52n|0D$hVV|snSZp3u&aL6WM-1F1!(e;OO}Hw{v^Nir}(jP)ak9Pol)Y*1_=E0p{#|I* zXz+MlDvPA^YSie|~mSanpQRa%^0aE2%_EY{qwRE2NE`}#N z(U2$zqj543<9URL3D2>mAc2r{NTaS2g!HNhki9A?-10erN%NW@* zdc56WO}r#9#KPmikCI(u=nrABKLy8$`f(4E<`*KA(kSQs9K#GKqX4j zYnH$Xi86&~1Q$UWKxIQaNko}?{tO!O$JAMgA~h4(nRKg&MA;&d$sJN+7OiJUfJ71d zYN9qsiOTMUXnqM)Tpb@FP+qYMB|LDJWxw8v^`zr#t}$n`s0Xrh|gF_^WdiUOTu)lzXq^4+*oeUzXdT~VW49{Fd-~g=jYJK^aAuQ-k=B-Y@V-&q(U9b ze)TI%0V#F@{M+$>M+z9+pz-i4qR z^vQygPRrf*l;xCi{xa()wI~BKBO)APvgm*EWERE!cWF3jGi-bROCn8yB)}#KOv}b0 z+fz=tLu&|I*)^@|^bFEYfXps9L-vy0S*)+Qy^1Xz>LeMiv5JJ=wg z8m@qW&I%~&b|xB`ln>8Tvl-slC+E+TOs6@X+hetq75~f{`-rk}xQ)(dn{o&`K5c^( z6U`Wk37{sMmaBOQ(Qf)6WFY@N0Oa$*mnKLp*UG=XW_Y9m=7tJ>YM8*IJQyCSQk>4x zOIRi++9i~5(HN6;G(QFM{>K_bQugh(FY^~74JE0@(E0&Pm3{)ORj4K>=O&8`ATh=W zSdqAm<_K)*lt9d9?tf#j4e%M{uu;BJ-P&pg$rFY^JV7~AW$K`OKAX%TP`6nO%l3qR zl*}OfCZcKByyx&l4XpIl^H)sPoVcuiSqf3xqLwU*v`@FEsAjAH>Z(j4!Q&I(%eO2M z5J`&>!7NU5vW^b%uq~Cj-^% zB7kDRIBmCJ>|YgFS;m+`qcTP+-4L8om8dZ9Ab;+ponTKqsSIu|fO)Vc-8dEUTSAXQ z*l)ddDlKJjIBNV)s6v0*P)f!EZ+dD}(+Qnik4$w0)TRf}_2+3h|dsx#_d z(C9oCN$Bj!G175Efrrc7ITlK{b^U#j*Co0SUFuxV*k4=mav{Ua%-VMalG|&Sokm|B z5Bi&3Mbxjm)g`zae_NA`Sap>IP~5@oX*5v0@4tN)!2aB_*Fe`E6NSqtABs^^kyzsY zq&YP52U&8KS&~B{_mo3&7-a&bU=t({o7@Q` zo6!HP-Q-+gD@&1la`{%Gy5?#t*9n}Utt-m#&-^nKadUwT>wpMB(!%s#f(We4cFT{f2+_fjcS$_!z7=SyP zUnHN3q+$pf&7)hbK?%?lgM<_0A^*4$>>a(cf&#s7 zZ|265_iB<)ieH%w6~(6_X?`v9L*|WvE7MN;5Ng;>{<{%41>Mb_ zy`T|&Eb<(6_M>_Cxf5}(am^u(`hmKzcUOe{f#}(%2GKp4BGKbu2sp86^fMPo^plE# zU3V*Ah%Of)`Yr2i65U;v=1|h2Brr2+G8c%0E&nD@1!v>7y^e^P0kRn~ zOV4_W0Ij441xV~t83e=sGrw{9vrFHbc$*%GMRvkI_Wm@`Mxo)&)TgO`khw1vT`jN6{u6XMvLd(|u@wEuf!sthbXnrcFr&Rte^)ukvujj*>TqI*hs zvv&49Vt${NveG`JWq-zrl7ArcSA0%3QT}3nbErh!A(wk1d*a6sluR5?1|8NLAb&H) zH;{L2{^ub%+&`Wl@W#pM9GwoEpDqv7OZZvQxYd5wh^NAIWjcHv90Y9>cIQ)iGA?Xn zrk^?lg8sFHP{yyEZF~RHuE)peA@lpc| zX#Uqr?Zm#jaWf&}=O^XIdxB?Em+PMyAo#+IT%cK;*nsfJbeFsAgc5fBOtQw6lo$N}ysU$T}t@@(aguwNIU~@yiR$??6_{{m&j2*ijBwDK5 zPKx*bkZ_?@IRS~ISx6x$$F}3VZI0b)NNEdVK%a`V;@6T`@{C}z3i3ZWOmj@ujKjC) z0BXFYGhzPLH)@b38!7>9(u#a+-z8^w)*v~8-cKXO7yOSF$)4S25Ec%g91n*LAGFBD ziJ=-oT(-Er3TVV^>!AQ%G9T%6`l!$a180Wl__Z%>xHT8ufFx$9;?@!^YO>pN(yh zMnC6o@!wZc0b*dUwHcqf6P#bV^sW1kjq=*!0OKom7SoK$48GP7HEp*MK;~h>Uk8%n0^@mx?-9ry>?XDWLxWmO)~w z>4RP+mj3=<1ZIN!oq%ST{G>C;M5>4s%Sv~fjpO@hB7}E{$*h+C(OrGg1SCh0tpZhi z<0b9sgdr3Rx9f}U5?QON8kOMgKR46)>NWB*M6|XxbN{e-h?m#tqzMdG!G))v6y_?F zjVP$8L0F!@P3E;^Z6Lc6r`)NDK2;w@=o9B(!wx%XMXjV~#rw~ubf1w-S&gK5kzUe` zn8qlbV74Qz*t1UGxrFC9Uz~7&>^G`50 zr82{9#g@sm6TG&}2c){QsMqr=QB~Kn(~>{-$;_$A9@`eFIzrra&G}RNWC4u$w}q2J zsXD>AaUpfHw%cr)$<$sqEd^dXA&J;8!>Q#dL)7Ll;I+R$iXoDMxFzUanwPz@;yS^d zr5?$2zSzcW?5hYh0dQNO^WL@^mA5lw-Sw^hSL>q8&@CvGLYRBVJavLyD9k7^nywU< z)P6FeqCs0+WBI5D;-5^uyqrVH`($N1Z4R*aFB7xZYe%wPk^xeV%h_JKWQrkr4RhD# znKrp`%a*fLABvScQjmxVlUDEj{Ux&8X~}G93_1nNP-1i+R*=kxC}lKE@!4=^6ZRg7 zDjQGg0!d?TQ~^66=va9!a1NLO9<`5DXJkPd|IGNUKa^0R?O>oiGdG4bRUa!6FFY5> z%^D&Tx0p zmQ89y*#^Wdl0FxZ5NRVWt;0pOF_n1vBb-Bl1g!2cK8z8Q8BE=OQO);~D(F81gEVOM zXtSuVxP$v#pwX^zN6K{@t$G{kT+px7N67j8qaCN;2o2OA)|qd?x9Bw^`kH=JQnE&b z74b*kkt{;{9D;Y%@!|TLv|*n-jG*N1W*iD?j{&@A!H@w{l54D#1{YpaCHDnUKnKES zCONbLi74P3Iyz^y9({2=Qd~?7rVe*SP=NohLp4Zb=@x=~?;qW0P|2oEKcWt&RW$zB zT4YC}m;u_8I}uvv7xr=M|8v2j*j!i{BsJDpVk>@vcwE2<`$v^03$;)n>**;tljJvj z^30Jx$l`HyzoN)H9i)^$Nt6_eTl6hBs1s&b3Ka@CeBwtWE2|y02e2>1-&%IP+mBd( zlrqGXtHhMBvl+mnIa<4$yMi>?)T99S!O{^d4l zQC9^ARz%GjowMpmjcd`)6$ke*_|cUg_qNW__&X)JRmxlw?!F3YOit@VV7@xDK2*V_ z6sN!i_w1bXFo^~J{x}rRa%}4ginux8P|MRbBe!bNoBQ|j0l@|bcWDC=)n-DmOLgnu z;TdFi|5s|%)p$B)?{c6Blj5Bf%9b0RvqmeU36jbNRSct~<*)`e=RsnCM%(Y-*o2vB za|1bw<*@12v4B7n3*zJ=8|NyKf9m)E^3=HUz(?ddp)gh&Bk4tw@TbO`M!?Lx zq@>6G!Ipf&(l{CKd~@c(xP;ED;Htz~5IMG=##2142To+dncRQ&HOUK*)FCTzUMLtE z9iSh$Q6$=-B=_%?oSur=EnVBRi!DoWm%l(t0*`H&*&-z2Oj+D*=4CIxcRy+ zERS@B4UAy8#|O5Oz4Dh&f{TJKdIZC0FYyoWRB*yD+O`g2Oa~TRVhP0;3GgFS6HcVg zRq|q5`Zos&mnm)rjVNX%(V}~aw$ce3DaiJBJ31~h){xccH#Q_5>`(f}N_fY{KNV%&v zgjs>LgAhT>U8o=>cm|{WLt<7UOKrW;e|#RWm#OfL{-8Kgc2$q@@YoCV*SA6h{LI1i zXJa@o1@J47DO-+$vlNq`am)r9>KxeNu=lRN+<7nC(Z)BcnJoQy)l78q4gx)5YoGEhPOy>c9u}$3TH|#C@6CgE`ez^uu2OBO@k3gd;^ntY=*nZ z+?M6dImnMpGt5GkiA&2r<0j4#WlC6$u?FW(d0=*#+k3OY9=T!{Nc1I!tuCjOyFSLdo+i4r2l0N2SP zu~DXuH7aVOA-U=-+Jaa-?Eov*#RPh#eNwU@K!r0)u~b-L9YOoR{u!%sCr0?d6!1G{ z!8x2)m?3Ns>cSoK!5}N9r-lKnqg;_d!hmyqS0ou3qz|VS>A}5-e9!$K(JyQxisS2; zEVN6b2Aut8YMa~#W;xad=oxDS+}x_O$<)7vO}bY&&HIu+V6Q_pZx-JH?5$bIA4M_p zu3zKw;H-Ct(*wZ~?q+WRez}GDNdt4`{3U4@`ZL&LXzT)lXxKwa@CJl8%(I@6cVNOo zT+lNHNCz1%SW>~DE|arGnBOS89up-KCZwW4-~@FhJ`i(Dh<_M9&afglYz(?&UO75x zR3sm8u*wirA(XbhUOGmJFawz(!Q&4*<-P6kg%befpD*rEdUgH;D*W29@KsI{|9EqR zAqD{hx7_&&$q4cUs72fiobX(L0fsMI)q5VLgM3adiZIco@_j2 z{everT`}GWkPMZ@%;O%JOi4s2ZU7X&qd3@v!EkH|iYgO`Iv!mn-BWBvKEVz$O)Ty_ ze4YJd>P5+2`-@&(=m{{UC2IGqMR8stCp6Afx<$XjPOO{Gy6qLP!XIR;94s>gw!h|U zufW8I-m;CF!0W=+Ar|NIdj$kp?EhsHI8N=33?%OIR}X;Mm>^6vfE@ykzz7!hgtmn* zy2wn0fGQW<8Qh(SI3UMlSiWPpynm9-*|_-g6}M`(1Vq$mC!Ut>`pTTp>QBU+V;#91T<68cjOssU{=3B^V`3l*({VD z6s{^NmjfVUl7GWMG8(%}W}R9i!SS@gGm372*dqxQ|QZYg5Qv=bU&IqZHek*C1 z7k{$UWMFY+{imMM5Gokpsm)cYxU}Vhe3;EB617fGGQ7e>y0=RXZ44nzW7S)h71qAB z5@sBkrUq}$-`ZP-+=k(wjM-%VEAvz z5Y{V<-XQk>stn9@sic|Wxl6+awM!?QShGqQBJ(WTBjnC#)-7p=e}uWbZBJ~!0TJG! zw6x%YW03Xtmm1gv$H`(JvlC0J)u;pIHUt-QGPK-|=8r;xb)J3WwFzhk<{hrIrGpJX zYv~d51}1#<%@1%K1|Z5#F`bK^iW>fJ02i#F(iATIH}W5HXK&y`{Rcg$g?zw# z{)?ao(Xs|^p2-{jYaSFvT3>e4OnD6I)FF-dk3iO=cIw3nL?QeFLYHzl$viJnC7Q8$ zg}NH;kQdI|X}O^cEWs1CM5crWYerMf7ieR9w$27|OeIvX(&*r%5@ZbTo1~UFF7P--@qZ6BLW5Y1D8-S8RGfnYRzE_*7CcfKLFkCo7Gy8 zav=%Ro?^pe!kN#7mxdGdgj&Pe@|On=MFH{h&2Mb})NfTTf2sT2|Ky@yy#DGhMuM&t z9F8%p&yj*MW?`-?tsv4)dByk>OJXp?fl$;*Si^PM9sL+cQSj$kN;xwQT`mWK)Q`Fhxfs#k= zF_j&ki2Jo-rbQP2OJdgw+Y`zz25jr#UKQ~|%V}?YO1^~TtQLWct0p?Ejbx5U8Y3T9av-y#=PFy@x1&cd%ce#MZ#<6f#gZUoZtuOEb(D z$hvQsf9Q3x&A^H@T@BRazr(OZrO9F$)mUapay!c}?FpKMlB|g6Dic6&Pc(pI;8V!q zS1>RC&Hg(N4OtMjQ!jVQg#0>`mgOg>;|f8V7@iz_EdxYE%*>mTr+Y%M5vVceohT?> zjsE(76PLboQQyDTu4ZLyNTNr#23!bDcktG}w5=~1-`d)ARyu5`~JpD@7=qE5h41MT*&i7! zL9(Dj9N^g9NgsIG74V6H;#dViNfXW}C|7Vs*e_bQNJI#04%HUSq4>oP=8LwUkp1t- zqE*nlbZYM54U85P+dUy+g{BIgo_GVUR>uo;q^S!}{NZG5{?b?w6?g^>;6iwbAb z5*KvNpGSvda?EEr8YcY|6A8Z25xaW`b=6F8HaxV?;I2a8s-H>7-Qi?G{B%ho$rwXo@} ziT`7@KUF{@n9+;@$;qcKQ09~7zjiQRG+FH1tkMgli=lq z`3>wRB?(%hG}^ytwsviy!NV7n89kyggE>0lEv`5dVoM(O8|=TLEj9BxIi3>7Uv61lVs`#AJG;hzOEa z>iD4dnVNvDv?5OPUD?P5axkfDPyidOo|7l&hZULc506yBQ-?_gVak}j(#{U3apYab z==_X|nMHHrs_q}Ni4tTv;4HKdNIX3OB3D9^YZiOIY-}GM)uNJ%q`N)XC0#3#IYZbV zeN%f)BgOnWw>d*1*jk0)1Y`6ey8KA%^la}H?p2~?#YM}UnsTB2UJ~bzd-n=GmZFWE zNdlE8s2a}4^_CfNAhebUYJ#YXrLDJ4G~9ueL1ucmL7YE!{-MRJ*D}csY5A0Cer-?N zAnTU6x!Oj<&1pDc=gSGAZqv3p`r=j>C81V70%iYcf<-DjQOaxMe)oY@Wu;?=m_UGU zOW|^O)0szZ!>*eMD;rAKMIIrEM5ZfbC77u(8{sqNLYa>6$o>$k3&0>aLEBFnv8^@ zH`U|@*<@=(&xqkD7uDo#f~;GCa;>`PCxUoLJww)oCy~D-7u@j^c|&iIw+W&$vyP&H zf@ealoeD}GW3A0v&iL$i4I$&9yh|&__Y8&ePwA4hKnM-?8F>~mREH1`qY5b}NbJjp z*U5A{jYKBDJVPSUTG9i6MERU#H9h|{fJm1c(u0&8;G8S|B#ALSTd$%<5zq{D8|zSJ zh`K}#8MjdcZ<_=GvHmoIaRd0V8h6A^p;O!#Aq}IhX$YE>-D+%b&p5t5)FTZ!K8tGW zFaqtCytLu$nDLLGB1GW|PgS70w3~EKk zSoMCJN70mgj)Mq5bIet30g&d}tP0kEzzA5ekjr|eEz0p&(+Obxp&v3eoKGv(WQ&ar zwnv+*;py1Ho&Q=X@;L%jgy{LIs9LH8)%no1NOa;Y^3OIIRV2~Pt73H~LK9Hc>{;4SvCv>pel-AAENd3y36t!L z>-YF*1jLa2&yG85&+GYmCx}G;EgHdP$02mnULKT&M5Q*W*z5+`e~Y8bGXu#7_8p6BRgx$gPIZ>$-Kbkmj+eeD^SC6m^d(q zgTmTM`KS?~;t1}5vbcPe0HlSmnn=RQQaOHq%yG8}pExe!P zvvkY}v~^%Sp;_7Qlvqjet+OKA6Vnv#-_II`M@4GOZHCBZSw0qRYP+CO>q=}ChN!B8 z8xPo4sc~X!Ai)q9JgVp06Khb$U5Pt1khM2$d%~qz%Kh`y(#F~a+kV!k)&O02PooUn z{_@V^aM)alrUW;;KBe(1r%;d&&zoT^Pi#Wa&bajno#-oa+<*6G>*C8QZ2K)wHjf(X z@UtuJN%2FZkPu^$%+C~Xhf5a4umk+ZCotPeQSYTzH?`FtnDTJn0D=Kg;K(doA7EK8 z)0!l+)Ny$;j`u6u<7VP^{@w-M13UIJopaULEebdI?Tm;J(f345Y=pRHOB84WzkPY|iU-xJ*09e3wWlw$xvC`$XV(l*HKfTkNv)S28=<5x3(?$;8vGv^J zK{Jl;hWkr?jHa67{`E}yYRnE6Z3GFivp?oF@Yv1cKxo1`X0LP~$IK4sHfo>7akEA- zjQdgJZo?%0=#^{S7vOAf_Anp@ZyvW>nct0j{6*iN`a$2?!{YduD9dElKRg%MN+fvB zYZ_C!JEg#2*q+_>t~e0x@g2e#;ZVlwnSrB~clJ8=cNh%3R{yS`YSCx*pD_Wd-s-y* z7aMKBn=yY+MWb)-hySTvC)=izl$Lg~PnMp;GxMPsCU!*d&i{ zo7Xm|0;<-C4r4)RVQBi+9@*Th)y zHW}+ENZ*s-Wi-ak%e4LNP0AvXA$Ti5CL>8YHR*4T8d0ej5UeJcyOGv+mHr&07fyNq zQIonZbB+D+++6}`c7nBrblT=I=>&0*Xd*zD4f3Zt6_utw&efskO72GgR#1D+)?Af0 zbF{cFqgtURDTJ?btrE6<#%E1ffP_XiOCuY9>zCI0?0}ji5VSw&TG%b``iIVRSIDYb z{`D=n1H;;efWpzSrfO~CS9F7d^rn+F1qdkRDn54qB^BTS0gQv0dA|eS2oaIYgY!z; z?|iZavaalZCs=xTrUwT!QL$p>gZ-DeS|ELAD}FACDsURsJm#4mFVq?-8Aa|iW@%Q6 z*8~k>asNsRN+f39B~ETLcB+>B>_i`=1BqW{LsnsNRdQ{D2UtkEd8k@7etHOql*L(A z!yw|{>?56u*q{pxw+Uv$6Q;USi7*ec&;eNzn`7!FnMib%Oc%Gw+*p|~rz(4mfZ7mI zZKBbpQ!pU=PrG{1bRC)KE3&=qCP^l6(yv&FN2GAY!>nsF$*z+HY8adC7s*mldRa%1 z{5#H%m)(TEI8JYb*vr^!#IY}VCx5teDA!zK3>)VUwh|DNn2Za5sPD<{GUrYslv;#k z&Nq1G#JMC-9fyTLv92T`c`p7CKwG(!jL_D#D|@+m{{qj9-Kk3IWMRj%f7xH>6ciid zT-7X?jbzC*PL(=z?R*K3*m$a+?8WR(>5`wjTKv;UW+Q(Jd~y$ju`(H=Fku2TCu zm`r65T4c91aUxRWyKDo`lsHsNhMhhuG*`C*xM4VxE0>~jw%7Fzys`IRWlmEoglHQz ziZlc{)*(<}=A@5-sLY(4urvbm>>Q3tN)%9IoL?~O40{OuIs<*8rc<>#K}{9*9}3$9 z2ewdMt0V)H6FvR8v9G`` znSS1##(a12e$L6+8&X8`3U|2K3jn(lFGFuOfZu;>hF`?1Wb*`^a*fMrj-kLc^weee zz6uy@c_?Cgx(DP?Y^>tB4c1vNT29!P_XrgR!}HH&nHs#h<{A4}+Ta`B{hkK$qS`Y1 zg#!H%Y*aIZNWmfV!3IY~g+UYlh7Pd8VY=^sDgac7o3azLVz z&YFJo>H%YMP8vf-uO317vd~3aXU|o*w-ppG*gv~AbClB#Ins_f_D8m8nj^_{1rNPU z1}HzihHvL)5y$M2Fd*-Pp|U@-2G3ZI^WqAEhdXHx&yjjyTF>lhe)3jzLYjgr=e8G1 zyk~{_7*Q(d>~q^fE|C!=WmUmD3K%`sCoBD93(ljK^-uMi?vN@7u)N}E+!w|`oe2(k;@V% z??K~cLI4%^ZnmHi4@H6Zt?~XDC*YWIh~(eB2q~;baHtRKc~EqSR{Yr&uL;3vbb^&XYcHQx?q)5 zqxbF5tQ1jw{HgXUK{1q+tmOZxro=)G?{Prz@L%v9+OQEg{8beZ;;;wdF#l(lR0TO@ z8Uj%hLG%^|oHA(BC=5XU6!$2DvgJBUMIRSsh#C*{KXtv!NjA%FK4qAgIj#Ueh4ouy zcivdA@1%hk-!s=1A-1%|8FFk=?%t{q_&zp;^LJiH;_KXYq0~pTpoXb9yw4q5!24V7 ze}FmMC<5p;CvIqCFQ6kJ_{hyWM0+H2e9z!{{ZL7G87Wr=Om4}c+8>R!|c*argEWbWeWI)643(4-IsO4d;s>cb1w{87Bj)l4whs|5Jt)fPEZ zhzSYS$e;C(--@Xcgv=s-6rf%f zTo^yi<%%RgWFJ79xc{+8NJ(Lb;6q|QzIY1*NYkZIq!Ql|)GbilWTe|dkv<3+Q>{*r zvGLw3+l<+w;OQ^2NmO1?9y4ojEACf1A8fC=lHZt|5aH;FcAh8+;E*>MN z_L*=1@Z7+wP5F|m60P*4j z6fg0HM1d4Vih7xnMZFkFmMDsn<%pCb$&Q^&eAOg&CQ2uDE2nM~cRVw3$8oaOM6Mf` z7Tv^Y-FDi}q+V(4teIreIFpswahlGIo!A+V!1=y^pZfwxigY9!yyxF%pS}10@Bh8` z*{4}1k}y@yzVF#HXRBXVyn;00Ow7s87y*xsIp;e)YJHTYCnOmzNLx--AtYh4^_k+3 z5rBml09J!(!4sJZDMG+;K8YsM{x9^WGG{@YkE*VPafD|~(*b)1VT2z(AFvuT;#xV@ z61Tn(_0335=1ybmuKftoft^~z6we8Cs;6Kd{0}Uaf{W;tX~>j_l#Q2wX~;(qJawLI zfoR8@3K~cl(-*oT@-fYTl&IQMCn_CF7OFMWJ&2W}>=Sdjn9Wtvd7_Rh_!rj$mr1!j?T36fb3-A zuG&*#TA&zGpq=9Bif2CwPeEH-%R%`eKt%go8iU((%gpppL{zgT6NgSzt6!rke*h5STj{tETUP05L^XJy~v?QskWyO?(_Sf9`;OF3I+fRj!RQ# zZAKkRkj_Z3Q=lIzQf2Y?wrj%7Ol~^O@1vpw*+3)R%<2dl@sU-XlOMc`356V-e-aJ_ z{VGt*LmV+g1?>RSG^=^z?tG%N+E7Mh-cg`TahYC1*#p7vR^}n<#NLNEAd3RmG)daQ zW^o%A3n-}J`BPlS(P>mv!2`x>GoWXQ0y-N$n2!4+4IP16m>kaq^SfpmAWv^|{aQr< z)jdRz#tpcDk!6I3q?o~5+-Afmf{NneUHA{KXBLcQDeyc!z-jEQ&cXsX!T5gAThMO| zQk`mH|I?7o{RKC1pGk3_t3s`-fvuxD%>;)iRNTj49q{}a7^)1HBXTJ?!+*my2^kE% z1h-Br+p?ijz%)W9!5ADiUYP;*e5x2MY)tEEY&bl~Id`Q#8qTVW%tx7L_+L7B;ARBn zEat_Of(jMggcYF)W)X`DnDnlii05DzpTmV@FKntlqm=7mLPqZMkw8G%kWh-J=oCn) zim74!DOv6*)Qhd_)MKXOY0M1hsPa)nRM#1?H3Uj(AS0?%?(0z|r3BtV<{8CShah$# zMFxUyJvm(+XtYfy?B_E6CdC`aM^dr?*#X_(WxFyK3N=K6Ud51YA+GQ96GQb7(8jgW?qq+nz>oMism`%;*1>lbgC{AeA**(9+|Sc=DjeNM6)OfrT+5b5WJ=kNLGy>eFjDG0t?H zM#;i6h`RXjig?{zUxKtGvh>R?(tzr&FH!@Bi?|fG&*hY zC+PYAb`q#kA0ef_D%1+h0cr`{;_O#IPu&EJ^p?#;l0$+T&)N=dgV`?aH}y<8m^M=L z0J;_wi6U)ooDegO{4up*-OPi*STbBZj?WQXEvslZX=n-t1JqNMK|FI${xg>J7ciQS z6c_b84A$;dx_FWveMl#Mja?9tVEvzhNbpeL;c?)iW5k%|z)jV~r4;9e2b>Ff1T5ez zq!AQlv;STPwc!jWml4f*_MeeZ5+u)=hPLW3M&}v$@IO@30aseEOiZQ2^u9WYiJzu7 z@0NqsIGRQPNVp#r*N@bmMifYGCITQS8EP7Qr%;)Ou_+Fi01U5@2j@f2u>LcHPK2XW zCZU6-Ux3K0YmeH89_k~@Mh z6V4q(;urn{!SrZYaqgFqWL2Xl=h~6;f%PGUgIkuq`~V|{pF+X38W4M-!30zh3UZrK z(~!3uu_^$Gwj35Pi z%Bi=eiD4vha?_kM#gmbsNu3u-?{n<`W6W%a7gSF$P}OsQXmEf?@S(X9T|?Kvo8b;f zc1a7{i9A$ypB8md4bag;RK162(=4K_ro^N3kY$$udB*cs!-YgG8-9gH7ZwWB5ylJ` z2k(~K=>zUKGLQl=QqFpHOd={Dk(aqBn8Cj5+s3pYTN+k^P%RI%Prhx+$qIA+Q*5b> zhmFmI9416c?WSX^>4;gQp)mJwJp6Q;tsp4*{~Fn(9(O ziG~LAvtj?afUTuTjDw0q-GJ&VonktJf=Id=9R-c;Rll2G)Uc%b$v z=aRLiX}&)b*D93Mnbj3Iy0>!eI(35bg&jcNjg91&$<*pix-P-$ zT%5mEy;f5>_0RwhRUc7#P{)V}dXazOgW7eJ9y%#<^=h#_&FV^ z|3HjNI($k5X&ziIjq~#?b-4AbYZtnlJ~{@2=iGl3=KgJu4TwnN6KmbMP7QvH0vu+-q3!-^>ySQJyOo5wpuVUhOELf; zP%!<_qGSbw7!9Ul{02iy(CON?pP@v z4*w(GZqD10;)rZ&M|Sr6b54+)lNvE*bD<(Is1ju5?gLK?yX-EE*iE9ZE2Gqbv}Y^1 zspLyz_q1X(A3(JtJ7a&``^i67XIkQE&5KlWz zf~3&}rc`yP(Rg+~_F&*eTM1JLade?5K(W`RX z;xt}&Z0o^a5f$DMGsef?44_{Nmye+I=Ua9!30B$yxs zj1i^QFbCcY3izEZTrpuj;>&$0k=MrObNp~C-c!7IO`sy|Vd2%co?U{FJvo01(m-Ad z;sZ*kel>|OCzA7c%spPGtGV1GK9+#0C*wVLj+*E#7)y^F_$!4YLnk+ z4VW79zW+_ZLUe)KYU;p!wJtOHgbAm3{nH0Xg&ZqC{IO$@UkpHtcIMi|B7G{FL$}>SgCZVbJ-nV zG8rAC1Joa!U~f(U6QRJy#|UB51<8ra6GPK2aKc>xN&ByS#II#ogdFn=Awzz^g5*hb zkw22Y>tu-uSD&cXFqK?u!F)!w6Mi88tZgPvJ;BjF!FTY#GKXRbJ|hn*g}}rw&iRO{ z1|m8f92+&GUlvg#MyDDSJE7^c_dWRErAy>sO2$$ih~sT(P9+5#!-B_ER^&fyEIwmL zky!*gb5lvk1-TW66C#M5_{*>;nR5!w-NX}Uduc)AlTM|>m1?wXYSAZ*k)yywnc%E? zZHoL`ENWU1JtY&cd}x6UJ{7H-xk>>J8Z0N4K~3zxL>NKL zNR!48seC7O1B8`qzN;BkDX~7!pOUWFF*Rg|v}7)WhX2AsVe(+{1zj99Va8oewGj3f zL14l-)E;-w3ma{?jL5fIE=JLaRdF5EaIlYK(PL0!a)FlvaT$|>SGx=s&eddaRWk&G z#{189OAO)-0v`#=qd7%rTGtCm8pKe6qiPISN38Z7vYgk{PtkVf6_X-JRE}GaK5F9s zV zO$BUODw9)GQP0ZIWVD4`&)YRh;gg<~nBBvw%3ugMnjYm}aCQjFUts;EVS+9*!B_ILJ z?7xj@OcHc_;Jx|f+DdcKMX!tRVr(}%uirkY^-0*G;j? z%GPfvKn!xs*CL7{mk6a$%A5v>;Q356WL0zC*B?#Gi7I<$9O|$%r)KkvvsaQmRGH&SHbSM^2%`g>Pc*I^mzXShDa>YYbCm(bdD{I? zRtz9rQ?IGT>xjOgogAJbN=McRn-6o`X*A~gs9VWLW2eC(D3!2TP6L&5tJDNpx3S^t z7+{1ncm|-X+Cu*;k4ZR9W!0q9m!k8b&>d#b!RR$9#;NnFP&Y!>g%k5OuVG-7{OJ3X zuNGgsP*B6O%3(83k}jtP87Ik{20)kaCPPQXh00C-NOiDHkaZi|eXgUj+||2MW+gdE zX>#!K?J)OclKWHhYmmvL(PB_=l8l(NFVe8=TK~79scRrum0rOf8oETTMi3_1!5Jo_WAmX+;(t`Zv;t7|&cguV8K$X>l}~Es{Fi%$ zRTH0LfU5m;@uJ%1TMw*K{q{r7#Pv`jF?9~-GKb_PSq)2X@;%LI1U@8;gFeVDM0AMEvAH#c&#{;;gX36qrYo|!V{F<#z<^%i27 zOuBDG_?i`U-1zMlcSBGp-VEX7H}`g#Ve~qG6CevW_H^wdgsswp?hI9OnhQApIStZx*W^pQ0tx8` z=oljuO+zG)C0k-`V~o(BYE2Mq+1%MRjIwTj!@wquqWNtA!$L8kYV0s%xNNyzOknP8 zL1{vnWP@v$>YRqQmJbR2cO{kMd&cqBSuA?h0gf#ox*=1bPe7W_Xtn`xO^C%4Tp6l0uKy9n#6~c<+9W7+q+~XB8WSXu5)_V|Yw|hC zE8%$(f8sJj!p})IB|@lgVCwb>Xg@>dQrK67gy#@5VYk}jf7yt6bT>4(HOMLp?q3wP z3GVyuo@>2Rk%LH2P?M5)ea}va>LQbbRN6x9OhNfAgnsixqxk$Y3fk8dtx?uDo8tWI z=+oFym_8w;q;;K&-nCEQ!%|@E9R~D$A7Nj4(VmkJu|9zqsxUTk5SDogkt$I*-d%AM z4x@JwIX`QPk}1xgvBcLX{F0a(h4ql*Fk$@_QIt`H3b~6 z4LFn#IrrSSDVb5ux+76GBFfdBH@8EVynjL1=(_tPizDJ8LedhN#sreuLEv?O7GmEO zDIc2zPD|||P6LqIZF2yVgmTW^0uH0FXI&(AhCJ~PY+m?hI?w#?)x7UDq%rsaw7(=Zq%ghN7|9yURCL>L?Q*Cx6fox3A3#^A`+*0O@8#q+OF_>`ol7#U=uu2{tt zhJvXWh6d(-Rr(L>~26Nb(oz1g`JK5L|&N__=|d&225+IRgw2estdasGu&j<9}h ztvcirk{{Z|P^cTrzYZ&1OAE;#?KDtq1)VEbaX(DZAP`}Qs@LxSkjYTn?#tCrvr^iYX>|Sw_k}iSIHJGwMH0k*x`6X8lPt<;RSyYDDEn9zTh}!%tUNFnbFZN0Q z8O#NIj3&{bHo}q-`FBdw-e!DI-!Iow4V%&gyMZPY7?x9oiKSI_qiC@O%nynO$woA_ zATh3u|42e+d}5{wVkfVm4#(#OG!3{aY8-c~=&Ya+c}Dx+ToNZ;kwrzH zlBEC>tUubGSx;I|XMooM&~{0T8+&RTM>CpN#InN2AFpvP)gc&7lr!2NG@IZMV|0&b zs$hAE4rg2}P{+(p6YTj;MsM7$xOX0fxB%%e1G%%iN`fsrNc>Ew z>)028+DdPofsb1a8e#SylC1RYA|9PVNSeC*o8z|(JtvQ_P3;JFK;(ZDNKECv5f%-w z4+dBXR|0IYV^+~R+9!;x_A87hwj@G|87gTy;Zv|f#OtsNwy|yi+k#v}{|PtNf8H)- zLv{yy3kC~V3{D(q1j+Td{T>7984N$$KVBX4=pW_7E+M_`Znf>7Q_6zT;=c+kT;K`QagV;7>mb{ ze;Z`^fMKvS=0k1*tf68!1ehpgMkXf=5haf^;?ygwP6IhX8_C&tjsLY`{Q->42Kcvf zOMx$WqV%8dmcR<2WnH>BA_xy6ZcR;q^7Zj4rl1p|d^612CA* z)n9BVDvMzwQerW!V+gr$fL*LMwXqBgN3o&t=PK7M;%fY87&8QYSORMPJP$UZqI+V4CK1m-RM?voVOCuNCK76YneoV;#)Ss!cbHvho&3 z|1hg@pjFa*(6R|uThp&j2x>GShKhiI5VY|wuo(l6TyX0jD5Sh1CrXqZk>6h@1mi4- zydc2@*Kz?_O+Is}huAQPx6Abl&rkVdhS}6f$MQ<;nzvrGudct#9_;4dLYK3_}Bsx?;0O_H*AnH4UWY4SPgUypoUsm8Y zbJ)b=KjW~FCD1A!2(a?;ffI6UF{ml;5w0m;c|`RO&zRQcuzbMgJwr&;DYFS zyIRdpbLQ3a2dgCuy#EkS=KgoR%eR%wU@|kG3@CZ%cpf>JfB(s>q~2o0F#1WfwC?S6KII;#VgaVJd@ zjKu^31cIDDiEzhbVmMiqB2&r2Fl|*R5{Ao5CRHfZOgjU4qTcPbOkpK4UxSx>m2{%< zEuO3cF}|+>5;q1Qli@~)pUc)xpecs{V~|XgXd!{jHy%F7QC(%t%_ME7JI@_+ZFCy1LQIgBPFU3n@HaWWKCQ%XDObHxr&-;`a>_EkP=#r z5MQgYId9leZU5cdiB#YuhtXBiT42=#vwW7u9p|6B1pzP#7iclZ%o&e57l!}dO@Xa% z1^Xe#q@f!jms4ysshZ~Qu8f@ezbVeWHcpI1%NSxlXDG*ntuQN+F_4%u%yB|4pR*)y zAQw|mi8o=A3CZ8ja0xk0ufj)0C&98p!Y>|d>hQ|=y%l=IKjp!diF;@{W3b}O7_4?0 zsWlYD48Ke_vbp2$AJfYt>ifqLmiandV7jb;zv~?YOtb{g^T1%2pVD2 z|60!(aE05&mBlS_)h9_2Y;ytoe{m!cL+C|auo)JV7t3(zVE1MiT-~!kh~t4`%lp2}d{&MOlGag5zb`cuj+yEFm`_4=QBR;t zodis=3E%a9Q{P}|(wkxoBU8uzdtZt43|grG-}=foL@;!~l9My=0OJ%&)M1$0JPeVM zYsXE!UIxXhVpxf@Pp@M0-C5xnH2fZXq9tiA5%!c*_xi>0ThyHL)n(vxG`OqPMwHy} zQ(_=Yw8ZQA1E!^55pxM>FZ}Pu z64y*1jT6hd+_Jvk26UUSB^H?X`^SupujqiR1$9`ZiB@5G)Fb`WtEf;QPtl3&kXC{y zFkY`W-2uS}#@xT;w{<;Gl$?wUR%oy00>3WmI^8t+M-P%}?)YuTQ!9=r>CJ#-1H}GM zrV?S(ok1rNXj=(+Q;?NDAdG^QlK&Gv07qOV=e7}2TSW`rYV72y=v2NB=SS|Lr{tDk zMH)es57r@%35-R}<|cmz6;sC+#UW1d{ZG`7-&amPT?2ssV@D|)-_*@jak?IqD*5tL zE%7h)2%f6z05Jg(`r_TP{#;)Er zysBtvw4gMB>jM4=h&2~X#`~WT*;n%1!$6KgWeb>Ib4Q89xd@T?!up|Y*w0}i%hT@I zk`c}iIf}HYZ&?9O`$A9%#Y-lCS?41Aw#L82ff_GU$nM=k)|v|dJx{xW%n}I7i!SW~r0fQRj+l{0xiw?{J*|Z1St_E9q=HhGDhGYHNzBO( zPvg(J%L5>Fd^xnP8LP@=f{$t>m$aNNT}!l62WEL}n8IUhAJf6jJQJ9r$`o5+ z7#K0hvm}o-F!WD~&{C-1+}Ym#3I$oFe(u~Hqq6`vYRYqU*DAk&2nseTwY?fJOWO)*dhR|KQ<2M?Z#HE6WDsV zir6kI0IYb5VZ4(lw#-#vOBfm08aRqAYE-v`2?bkeA+})cOW}MnhFDYSU0%Xkd%_ki z!~@GZPsqNF`%g%6CSs~G#dcW%u60bUyr-v){-5Rh!y%=CEejtpw-^MKkOoh5Wo|UH z@0jTLc`i|)yS#*~h$r0oUX$o9>-`FI%lm)dZ|s3`cj{^ho+db*`4@bu21@bE@Yb?Z%D$FN*zul0`n=dbfr5%l<`}&66`ExQ@lbPD*E;a{{xLpf1gtoQRgy0& z3c`eIVH}i5j+jgGa5B=sbtN4*(w0b0E1oGGuQ~?Fmle4G+QfZh@7FqV($><0m@;_` z(7Ortuubx1`CSiZ7OJr_>?O?kOCf5;K!7@2a5LEqz84?Y(6#~cEJnM`le|qGs^J>4 zx9*lf)T)0g_cEba*?)qUhGsRF7YqNMb;b(@Z0CzTo*wuw=o^_@A@pj1aX2K-kZ&tQ z0W*PJ^0gGfd4g;}LK&fy5~a51v-8#>(6LU&>zfAnp9HxnI~LH9 z+lY{PWeCg1Dev))4EOyi5=VoR9f(-H%>D;vCiZNCI*fuhZvm+q#Q`6}+U_y{oJ0bq z5PVO{DynkNSQTIGJZkuv|+hRt8stA4#dpZrbV?iB;iSIeF$r8SifBb9| zZIhyMgb>CZ4CK4#U7gQU$7ECN7c7FPL{@y;qC$x(oIBiR1|14}2YuKSB3pN0PE$3K ziA0YDzB%N5W>7q2vt}Az`y5pAZ(f6nR09={IYXAA1R<0K@d+z1w{Q0Ll4;}S412%> z&v>l>7Ip@}P2Tm5e{(Ugi>KcJ&XBT^x6HL5(2$Ak-7@Dw#rin*AsHsY-3}gI%YJ!A z3lcz18!&~b{f;?Hp(#FpngwGvXTkSyOc;p^HX3l2*9ipUy(c6i$jl(gwE6yrUP+pC z{YZTPHySw+aRxP92+o3Ll%u}sDkp+tfl__=7FRQo3imG9mHIpv^)W1b;egvT&-B8~ zHco(=7W)8`Mm|~C_q>F4Pkq9VB!NCT1@6j$K&|_AyY9TMn-+4%%~xhRXo8`3M(^`Abqz-+9Q}DMZRCi)KY?F_pLPZ zp$NRpWsDwY#WrBPoMOKJdsQo;8Ji0|tZ|L)b{aMqdD0hBd=(IQ22q_P3lc9A0vpu` z`|&+cLV@}kphSspRH9#fr4yp@{vlPhoW3FM$8M}HL=n$3Hx0x?;D%YeyrQs2b_c)aQ+Vt1qLNPmq0;arLTa&b~#9cqj39( z*2AfzakPQoZACoUPd8N6L4luYI{Z*{2lm+Z&Q^lRV z4vtZoz>0$7EotAL7oFlFr!#&ga)CerAfX&6fbbOS{3Y? z2Z-1TNXr3FN$n|F!M*WiE*l488j=ps)-z>td-|@F%c%Bcwu%XXieX^vD;8~|L2ds1~59AB~U`eW%nCBoZpSae`0` z81;yx!in%0@|(znZud=8OM-1-Lcjm1>Ya+(DMRSf$ybWE))|S)+HC;w8Z#peYKO&Jbg^f+)ZUR%EM9AI)fK*7OK#Zpj zf=xouxospV`i@a3GZWspS1$->BKnXc|c?mImDfrm>(4(pach>m){*L-4lz z=YBxO?CK#0ALOjm2pIySXyl}(ZmxI8sCfAU(?Ux`7y*jEaAfW|1t9P-0-#U48}1;) zjUWK6phrRh1Y3cxKva|{d2+xQR)Z<`@TRGAm2#C-tbwurEEr3xPR%4MiLPm_L<&h| z_YBIy*1{cS;JMh(hXqCFnh0rHqf`^D zx`qU3fuJzCVQHF#iFN`C`>%bcq9L(EZ|M9gBftE>alh>{4Two@g43ov4y{O&2gS*M zJEna4EU3Yrp^*j^qxT_bQnMUQu!sIhlbC8$qZ5_*in(rr9T0uwyQ?|>p>e#|k1Z6V ziGq)CfNLA;K#UViYZ7qgnHv%PMM_cayVty#37!H%$f!v zpV=ljeG*5zA`3SUP;@KTlQFYnaY!Bo_%^|5uERUAtH{(D_2&3C!3HFvOZ*co*VNE; zPlF5a*y!3yL=(Kv(2PZs=!Z-*{s&M};ro35uwIY|JIOjs5Q`Kg&AQ<}%~%thfByx4 zHzq8Ov^5B=HXN2ThwF8n&h*Wce7M@b>+>QUo{nm~vQoR|$W%-9l5qpb(g9(jYS)vz zb>4PyU; z=>|KGU-A-;t9H$m54xB|jnwFM56ew_C^h%Qrz<9vos2k&bAi9fUOSZ*Ucg19zw>E& z1bJ(u6L&;-O$}X$dhSYXy*Qh=28-+HsnBJ!K{J}>1+fd;uIAU078>JPz zUI)Uxa|AeMR!H33&}Qniq0cybqM^bSJMB1o{;8KPVL%Y*yx zeewA-C(ph-`1G^qpL+4^OV7Xe#WQCIpFI1_v*+3WGx*fAXI{>sC_8iR^a~w6eDVV? zy?plE9p|5Zevl~|9Nd2&k1#bK7~FNsQ_nwncDH5sy!h1F7oR=<%;2sEDz~1DqLc4^ z;f3eUo;!Q~<-s!J8GP#O)3o=F(=VJjeeUew{&;rZ9Zzxp*_S`C?}1xS)@$7VffvpW zG9;cjkj8Z8`KQjl^up;gXJ0&h{+Y8Kkhol4Joq&KElQ)t+ZFETPd)i`WA#CvnmoHW z=mhb!;LKF~%s!odo=QJ6@iUpK%uNS0H=lmyQk8}DlL}`KB#5?YvobrG!1UnkY(SH# z&P-}_I#r!ctxcbfD$}Xo*;F`}hBlSo%ezla&!skJQXX0lrZ!|%Z z>1QTAKb?2+WO^WBKbH?Qe=hGne;}bWlOy=#;$srON@eE(rn#k~Hpyq+`{IktZ?INO zy;J(^`Li|dd*S&PY$5*qCrSKkXTN)6mBIhA#QjGy84|a`?CT9eM8gGgbJnfS)*b`u#7Y`-KPj9X#{Cmj`qBef(~H z;l;Dn`yT;5@yv4{s63rl_=7AP{h!}`?&bFI6l_X|(I@XWac?|L%J3NK{^pkkIC z{#4K4)!vZmft*-e!ujsOOIdLxa!j_{}OnOb@`8{T7KtJPnNCvx7>YV z)u*GKxK)XNvuuC-emMJ+!p|3b_}>o{f4k*K%STsjTJ_7TCsu#Fb)@yx*57Koz3pGO zA8!B1nvONU)p2{r-(Nen_9xeVxpS=ZLgyc@+q3R{>wdqhyKBDdC%gV^eR=&CyBE9v zr&4R_#nM-MKG^fe(dGW^>8vfgCtH;dpd+g=MDXIDY-6@JJIOG*FO4zeuVrhCpU8TO zf0(sj$hh+cH40gAZ{dxo%*AhTacefmy&c&Go@?Km{RUND$)3&b%WlesQ_&k)OSU>| z+e;&Z$A0YD%}1$n@Y1&n-zxq}Hl4k$! zQ#uh)|NhTsTeIS~DewM#wv(%jhL1gbA?w@U|M{#hTeEm7FF0Vqfvjcm)aMyMfk*my zWCvGh>!}@uO$772-hD%H{Dzj9>BZvIWMA*_{=(Ss&eqGkW!rVroVGdw*!c4By9aT`p7F^gw*}u`L`})WAMr- zoY5V;k}>cx5NPMOojcuJZ{T_Z*X`iV)YRlN)wSD`@;Ya2c9=mn)-H)}eZ(n=*2L}dz_vXVJN2doF z#+FNO7H%yrGKeD=L!YeHx zE+OJL{Jj+s7@H|=IkI>3AN+&Xo}sOSqrn&K{z^gg)R%-H!dWFcVsFVef+ZcEUf9vzX z!=v!z#@hWp?#a0w-50X$UoIcm(7V3SH@CkqGsQ*DspD<=1;yXEVfFoww3q+s{7=4i z@GE;(Klb$Mg@3;Ak;;c}E_`jYwc{sVS=Tx`+VQJjZ66(NYyY{w+u1fc+WwpWa_uO{ zURpxFTflfz_P4Ky@oEu7(bx3RS_{@T6s#aY4>c;N`YVv&4NO&)7!qO~=$C3Gy*bML zg{l5RVBOX-ytXjhGCuRWGo6oo_~!RL-9G!7`MtvOF&`Tdvvmyu)GdD94*m_; zqBU#5fc3$8n}R*NnYH!ID2B>`A{!f9WwhzpzM9@ZRs4Kq^Uj@{`Ma@a_G>ex+g>Vu z32Gjv;L3uU~9S z>c3_BvPnaJcIuwNBS(ACjg=CIY##2}k4}8Yj}-rK=|5~6Y*dJI<(dvGJ|!87*`7;( zUHCd0a2Ol%-(ASc&>-Wl3>{h-K&vp<>Uzx}N|Q;jM77>Z$?k?p?5~Jxe~la$vbq-J zDXFp38aop;)kk_A(`1_Iom>qCHB_1yAUuswkWBkxk?*vl5!-r$3v@Sv zK$YI%madjuXBJMB?;SaKbolo3ca6=Cjvp&^ZJWMp|2?<$%=|a&X5KNmdC%CEo5yY( z96G)*KC^4EXYk;3_xo{F#kMB3QfSbE!9*dI@2cRJL0VK(G8J5H z<;u3#W?O@5PDqJo^QaV zok4sTsp$sYpFmYYgFgPYGl0%7U#MiA5TaBQ9DT&9;B+<#PR-P@;(<4zFV?!ZP^y6RhE0>n3Dc|i^c{yM?wB6D&wlvoU1Ul|;5D2!$Tz7JX z^T1rM;knV6Yk6ycGW;l{6rSeC|?%cEcw(0F- zM;~9SDMPu+iHBA0t%IW+j#2$F2``7JuuUA`0)1GyC#PB_HKOSmY@0CrOM(rdqqjQJ)`rNZ zWI-uSn#0U~Kl!(7f1k)_xCL!AHQBqdtwp0$$*t0FmbbOc&9zKxd-`_n{FTB7hql~) zd-tBD!@@(@BzoP#Xf_ZPZpp?Z+&C;X$lo}9B$WaTfjWcnbhLFiWwk2~b#v(7@Zm4Y zBMe(IZ*Cy7jI0)s!1_F^_#IA!*6i1!nz8X-ot+Kau{}mK!+UT>7fPjD{`mH1j}94} zb&d6vj{kq3+%&ZI!BdZ(?%dk7dv#Z(INsH|tG9e&p?uH6j+WxT>RP?KaG==o;K_I1 z6~TJ}{>h5J8d(1#xP)*e7OLWGfYH;0^A+*Uz3zIHT3Mk@>rqXe)lvkjO!Y+66sn7` zQ2(S_lIRnPG~A&=DSp-$O2dW3d^h*>9R5P#fu4iEeX!@q(oggp{ExfaD;tVCAi$QT ztnk&IHM@4L>3Q>$#rdVq4eh&SK4Pd#-!A?F%(pjt??se+HKIegplzHh=R+mF5z6Qz z=!8`9&ylO6oAYYuOj|Ehq78%j{+MMAwEE*hR-oNI%yR*EwihmK4%4gpBE0w+FfIPV zT3HD?GyY$OclF(J&!Y$K zdF7D<1D~io(z9;e_?+u&(>|Xa}W?SwcmbY@rPP> z?P~2>`bR(g6PrKv!F9#r51uPLlcr?|rW|2_1KB^ksQJRYnL!~#!2i7J=XWbt8r`kA ztJ02DAScC$`XDaWFYB&wvEj<{xlL8FEong_C8 zRfc<~jJ&)m4S6-BY%UZk|7pIf>rX$~)v=0$!$-huIilykKusW~%M0;O@9qhNDKU=M>55A2)wfYC+YL=@MFpTm$8}09d zHszRqUBn|?$;`u%RN7l0$+U@?ui*Q&wxuAHo&4zLxf=?3I;zbKjlne9tfi|E*NfzC zNLdxL^V|9-kMAw5Efk)ZIJ{@$j)7fg7an@o!c<53#v}bxw@)n0|LDZ*>;!-J@0qxB zacFLQQ|FfPt%d)vfA8eb!k*2W`c`$euWzet7}&LK+riC)JC7YK-@2x6)7ZkgcP@~*1K_Qsbh6eU=N9iXPAmT>ILOuG$%rR#+M=wFGBrgl|FcU9?`j}2~{?iHjQ9v_Qb-KIQMrzJzQ z`Vz&=>p@6dt-iv;2inJnckSJ~XY1USu_sTB9obs$+_QILa^2Rk%9g{oJo4bJlZB^_ z_m1rx9N)NZ%f{{Vx81w84-iMJKkoF-mN_{>0X?v8`K2N4Ms`g|ChDd)Ys-^mC*A zTSrIw`$uI;b;56=6NaCl*>lwblv|H02_NH?PoSh?NFkmJLJKfl>R4iYlY~5proqjhg9VzFls^aQ0c-JwOCsErTn`13H0Qj|2dY7-#7m^)Hph%ux{yF=_<4d!yzInydS3R z&z{M3WwJl2!?xP2t%!KG%9~r078JvcFt{#2)j;dtw}4sFwQGaHo!u=-2j+3j+$?TB zIcB&v1;g8CdX86K9@{$G-@2}K`}V<&JN7S@Zu`IUh~{1W5sw_EL{2? zqyHYv*PT6BRa7e&Y(?U!$%D`5#55CGEXP@i=r8h24AvY{J)1%*<#%Q}-}?%Al$(Ba z{=d(YD4#DJuO?8;oyd5jgyf%wtb^G*lDpjofvQ8y2T+fja-$hBMQ4Q}ku`xWHJ3&S zZy2&?oeYlX8JVtU7sFuAIZ*uJ%IQ{R?b?tApa;X`{4 zjNI}_;UHV>@7uj{$TAA4rcv?APx4OtaDusi!@@ZW=w4D+{#2}>SbO0=iAc$iVG z58YLbi<9x(R^yi3{AhSeS@)_e>$?U2L4I8%kA7NALt|V z9IS*+tETdEpBI&(dqXd**ZD!xz*jp zqeRRHci#NabmgWej*hPRl(~bA-2>Bi-SE)qQpq{J3r+X$viG6scGmS=bx!MUoY4hQ zMMHk;XL3#TzPf6H?3cdFKd%-)g|D)arM;XoE&D4-R^*)XlH5TKWkR+I=S5L7sK)R^ zs?}ev`o36z4M-CS-SOd+=A7HmGSyOe*Z+0!|6FXl{m+kg-14Ox|Lo+yd#3oQH-ENM zeefHhkFLrH8UFXYXM;doM~4!eSJWaTDS2UPNg2=EAT^ShH`e?X`_p&L8d`+B&vp^S;Hg z|GM}2wWaqHR#&;^p;9E^vH>#>XZSl( zQ&#!V>SL`mX=7;K8#GrL=PNv@;P9j(QKJLj77Iq}LPlRJODDctIQ{=aqoyO`a=ynQ3ws)6i= zi~1>qwRICxw{mYVK9Vx7N7xNx|dkOzH=XYG4tJZNbh-_*&QvJ)ksg~iEkf9w1d)6KKoiF_Q zS1X4)I}iPrBOU*F?;rQvOg*j4y*@<1cm z&$)iWd0w$@G`plnS0Y(Gy|{+Px@c@C zT>1tQ-j(ePYiYtLU*;xIs=ACb4emo*-ES!T`(m+Y=Fbk5-f{Cp<@V`;@!Oxd<>uA< z2TnZl&f`M|3%@ro(*EZET3R(Sva0kiMuyBVo<2G{yY{&!-*v`_ZwsRLsc^H;UxesI z@^bQrp{Oe*Rj$aHw$21OM)d-jpaK!Y6RP{mTfn6)q);p3jCb=_b&*3U&(746JJsk> z8MUy`wb*m=iN{ZFIQSnA_N*Tmc+c&(zh_`zeQ6=7lE44-=_j5koJpykrH{^49vmLt zy?c20f%(Eq=or;#@zOtG2gv`zYS<>|eAK*Lk^zOUFB=Gg_vZ6m#Wq(g%-6zYG7Gr6w@QXV}md=kK zxoK+C;L!HXrT+GtO0O0^`=?umVx=s!;TGifubGnm>~AFlV=R8Tyhw81BJ%-lNqkiK zZ-opu`uz3GN8RUNnfYk&_?d^4^+*;!vK}TUBOh7#!@2eAzLuvvDxV}JS@i%u{`mT( zzwWx@|F~oQr7SX0#fa&C8q9j2>N%Fz5VcK^KJ5+Z2Zt_rql*$4v1a{OuwFeaW!R@t zmE8=+z<*s(A|>(MF|dUex1vMRh7qQ0Z^2Cu;Iv_Cki8Fk3x&<6e)?Sper)P}cYVh| z?34Etx%@hI5d9C+K&A-9D>XI&;a@M4dP3H&b`~YLRf$JN&z9|TRlh8(bp@sk7R82yXht$oEWOJ1+)dd_#Gx#Gv z{6E||(6Me!dt3Xa?Yjro>>D~d)YH3uZF|So(aD`_w{(>j{vxQ>*T4Fa2P;4Du5$4c z4?XtdBOCXZ#>Pf_Hf>wqI<{t@dwin2dB^T8mSifsb^3@$MlYI07ecbNR8CPaFWOG+}^98%oRMVb= z@!=rM7MF9!HvGf3eZPMAr(Zw(@t?YpCEna$TiWp}U9Q0Y-S4g*8>;+^U)FmokX|WH zWCx4vYiYSF+m7cuYFXh#wx#f$th1%%(o$h_He8&}HWa>>?J3S@+o{`LoXJKCw`2o_ z`?42`H)LCi|2ErN{9LxT@P(|icsLs>uFZB8K9cPz9Lk<3{!unm_#kcn#ij2Remxs4 zj%R&^%BJkDVg=r8&-#lC+13KNQaTA3Vyid*RD z*J%91{H@M5K$D5PNd4UV@Mj8zpFMS355NA( z(f-#DA3fDSG*lTp_WBp^efae+9_=4Gb&6`OwXrg0_v@umw=wG0J=||k&76Gr^~3$I zXQy6$)kaS~JUsOJE3dxV|0;;&@P+J)%L)qF@`A&!E~IB528}?AV;2gq+)Hcx3=j2N zFg!Fo#7IvarSmltcb$Cr7(*R8weP1s)nDMR$X^S8tN2^ZUn_rY{I&nHPxY^P{icsS z@Rc!duewyyoG(dL>T6nf})dpgHa(PNdD%4Q1FR_Ht>@-4js>A5JFxsmC)2z`P%W$ylJl#U zm+`sr`oq;{J=J^Jv$LLH)m%0|=kXe~vX@^x{p@pRKlXFKyJmXb9A6find%rFJ$BD+ G9sfV5px_<= delta 41792 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�*^ee5}-Ru1umM}O&(`KL4PdEDLCu_x;RMm0S z`9>er?K!gi$)L0L>pI)C&5$9wJ5|Ymm#af<3g3U?_xJPWqw6Gk8Q;6c(KafNn(x$a z=(mcP-?ItvTsg6e662Ycl*`7 z3qo7)^HH3*Fzq>G6ryC3q z0I;-pCV)rqiF+M>N4q1Bv+#uyGTVJGfo-*QIcPObAcTo%3T0(4d6bY2s`c3if$M)l z)f5Cut-PQH@90VuRS<$~%%5M+D*T3KqlzQz3z1pU9wl&PDM{XCp~#m7pplsGUBT4% z63}PY3nIgA=4?sUYRX|v#75EK}hQ3ek!oGuzev}ZK3p8Aj z0hfwkwMLPbx`TIZ1&|X+6C@d_5OjZH5kXSe1Au`ND`cU45#frV)cy6Wz;9^u{8BTB zt&rGgIKY*qH~c}p;nexNoRHg_ym=C^`aypD`11QnxgA7JH8@FX>E;_v9Vtoz6y#My z07+5hl5z+>s{5^{$Tu-Rf16T_kWDSQxtUUI8p==@q)kJ}U`5!ZqSZzrkd=ST&;o;n zaC_u32+%lT+cM3b(ezEfm6R3X4{EM8#qgFH&~m3~p{3D%N)&@7fO{)F_;>OE{Diz) zE3!@QP5en0fxoRcF`qlryV7K5$~#V`I%6+jgPS$X#C+^bp9*WMysvAP-MJCyu0*YP z^-g^JfTKj##;FoAOu7OxlD>b47ZsQnh=IK@S7JeljNB}luGVuihukq%&a)TbK_iSY zzSMs_X=|`jLjht9X%?oBXcu&>87F8a4EnA>?J|!xvLVd6h}*7d@X1I%^KSTw33Y+_ zS9M~(dhjm;+STYlICm;pa~R>%&uK<98pgMy>P0RcdCoipU`+W>Ag+HRr5dw7*`3JU z+a3g6sY)O|Vqm&2fwmNagk@nQz~mFi-7-$+cj_3Cx7G0+DBg*GKO$!lT2O zhQ6Z@4<28L)+yg}~@_m_Jb zkxNcWPbpU#N_-JxhupI`Ov4IZFghH{P}h(06CElT0bqePe8^S$x_9vRkXZK!Zb-<- z|1ec=gF9vCH-kBB@DK_J_~6c-rXrCDoH=WUSYsZbCTNkEI75S3nPqRPj?M1OnzT29 zt~aF+{TJ>~IP8C`6hK*ECD;g4nHw5ROqlsB#)8R^u-?SE?hT>T9#|m2BM3Gol;KIn z1D;M>XH$~FxtQ|j_bSb%qR1%-U#_4MJ!NbWe#s^@+7%%lSV&yTJA`gD=l=;FAft?LH?eWYL_y<$kK>v@@ z=Tp>JGK_y7yT3WdkQcjaJBg+P#4fHM4G%GLaG85MQ08MSHL`mLe-EwjW#sx}8lvcd zP5hlY!<=LY)%=v75^>rsl@(E_xi42Lfl=IVt1=$j_V@WttjM>6*(n(MH+v19zE!}! zFG6N10|dK@AlBS1a-Gfg3w$fsX;sPvQRH4cq_%$wy~TG?eisZ(r3FPl2ikS3e$40k zJK1Y?q2SwrUxR919r2yl)c3)Zo>7Utw-J><_2>&Y9lit~zb<7Q=MfFhLS7c;izFum zBY<65m9iXzZ>o#__U-alV?r$J+sP~g8&MfK#=)>F)atsP+XYJ^0oObJcwN)Eh&fEW zFI9i-M8nye7*?J64mB!le?kDfU(t^aN1qA}u*@gdb(ID9o$X41___u=^}>!dE>s4O zu7m_+VS3QL`)h0Q&)d)dZdc7}k_E+NG;oZ7J{Os8z^JIoIdxL0vgZIG(5Gh6{7Nwm zfaVbm13GccxnDGj=}FifpePi^%bv5ETy=l^_ISlO;;ZZLx7(Y9b(Tq&K5=$f=wm#W zR?6RuY(SCg69LqTEd@kjj_X;tGl*Q3X&m~d#er+Tx46ihQmCsHc)p?eof)2QB$JR5 zdl5cqw|aip=yY$aU~#``u$X*sMqJk=h|7wdzoOc@qMP@er`NqdFE11`*l0}o#1elu zc%(}j$KUW3o?6hl)?9K*hB#d$EPMNtkUONz5m*rQbGPu$Z&bE4H@T^|f2I4S9FO+Z$B2d{sX#N@h$@d%cX&g4eS22YcaU&EFpe@NV+R7_g> zcFI!vbk7N-dAt#J16yXfeLgI^GJgJJyFQpjij_VTePR7n69IXmP?{|*F~5F|#9zG0 zJ_raw3^=o(JH?|Zj(Jh;rWDl|p1tX!Z7AX2BLeylj@88>JADvnom-+Id%J(qH_4P% zxTOPrY^v*<8Jh_*0-ooRzY#<~?{MMjA-bIw{-w{d}qAb)g1cM;6_l?4P( zhN{Zyrc(>2>stvyZZv;JN=Twf_$872lZ~Ag33e(b@->IeSm1Mbkq7*5n- z@Owt$*&AoPI0@%k_;ldxI%Sm^Li>Ug&%rp!2yha_4D#McHWeiWln`?oX#|XwF8WXo zQ8Jcf)0xOU!I){0V5T6=0;@R!9ST+o$?TnE;y?^LC0cnSSy(Zszn%2^W{Zauk%sL+ zFlL&QBOA8gMuC5s=zPE#FJ_9i-d16uBUP7)9IEI=LOxLzErGL0FjS(?b{VV3A%UxD z1{V!3QM3R+6QR*5L5jrljRw`F44`$lVg6Y}%DdGBoztGu>i;G4Q{yr6`Zz|BYslonK1)4+OUT|Rg+^*47Xg-?Fh**F0mKlNURt!AgpfEncC5lR~ zSFNjG1_OcVdG6jm*Oi)^xSt^E*~>i5Xsr!$M5_p!nAJ~mK#HK8 z0?bz&njwFPo?z*jhur{E!6AC#NdlZ{=oI3HMOegiIw}i}+~Wz?U@2G;m;%!R)99wL z{?6Tc*WH}-@SNVRXd|)r(jJ!c`pXzW*wuhwxXJ#q}b{M*~@~t_I735lOMr@z+L8J!0|mT=R8%4osjng z10XC3D}Mr8?$HSZ9F zJit?+M6SPv7sL73lHY$_aZY9-@l+lLwA+6bPbRBO{`7)o>2-x!YhR`yx&HEK7)apE zWT!mP*A?q!_Ilwo1RRPUUUtCr^CSNf`-~E>1w_?iCgWMg!mJAnyj~gqeTG zi<{W~`DF^we1=?r)$>Ned&`jG;!0qASW4eJO|K|FCmUUeZvC% zJR%%7sd`~0mM@mGs@$qU}t|F*UOkb zj+#5X^Ip#$`Gwho(1dK66)OEQzZ4-bs44rxFc1N_3oxtk9Ai5leH1YoU0EvS^28n` zjJ*|DC+|gsoT7^rWF9nsWcDdZooWa3&mw>k(lH#)oHkTvR?jNW-Ms*P4Gd%KE(%(c zlbnGNP-BSPO5VKQSmn^c?nZyxo;~!P%K9CQ&(D>8KT5G#LJVAdel0>Jfkr`$>z))} zScgU=)NX^cmtgu5Gznq>Nb4AoI@(pBF}f8Ilb^m*FrA=x5QHa4^+f*?jnSD09a$l1ndE5I1h_YN^>NfUycGRLS4pAmG6_cx;X^mavBfb@U*(m&sgQGWTq z@A^ExjWtK8?D1Ox<{bM4UO!#&>8b!sX(3vF--^)Tnn_6Ea0*tXDhH(sti$&rbj?uW zam@P64#zUe-j!$Amm=V<(Ekv->#CVW2i6u%T-^&0XG)JmuzFYIZ^JB`KO2fX>^k9k zVRajQgZ1dqIe)f?)4zZ3JG(>!*e|79ci)Qe#Uc^Y)J7Vmy1G}`^IwY4K`6G!MeFme03Uyp+JMw1jO(}6-h6-V z1?X#wsH7@uaPmf4KX1RMb$fXWs@ag#b$I+JK>upN9EK<*yfR6Ti$cFjQDU95X(-K< zvvOMGtv68ZJ*i{eoB#86C7KC4#Ij!z!@6dv+_-uf#*g{)!^fAwYE8*Gc|o|X!p$;b z+N$fRe$9|z94CLh6zi+lCBGEnH7*!hXV(4lVqC-@*ClM_wVEq?rPa|dQR%{MchE2T zOS7-G1B@2aJ&F`F0$5Mfjd?Cc-@BI`l8I0pVU@o?Q7ctHUMi+9t8FWqs$W_n#?tC+f+(CRC%_GBfFKm|CZcx8DNt*hY@4GdH!P~z5;PCLeU z-+~N&AHV*c?X1Jqgeh_D3UMF8(gV0DQ9)5xy9yoW3<}00{NzjdKXh$Z4g9RP{j!9D zegP9Rgwubz#!jLTW`aqv2(YO1S$+)!L&EwI+@TPCl-a!U$@(CrMk6?Fxm`o=D1?A!JBU+z^~VjTA7^Givv zb<`m~Jaiw6k>QEhjvTut0TTza?jhUHX(d`dV_b-dkCJE>Tmp`gwsaC>!OYnn+=G9k z8A5*@|Mp3PKc9CPeDIL<&{yd&7KqBD1RG;Ps2D;@GF#WkKd) zN3)2QwZ?&UF-NN15x=1^^B;Fa13gZ|p3oS1st`PJFM;|(+Td+qtzjLa!*;o{0d+{V zGP5+TEJ@uk@_TJ~P9@1%I!l+{q_z!HvUY#ctp>D5dIkDvH*O?8O`yxNeY)BkcM@-; zDYa}WTan4|MgkIskg1ZXg#NJ)?<7W>V?{$$%6{^2-NtzGKklUWhV()kskk*Ns0vQ( zm-|h!x=?9s2Kgl8d)@~0G=mERVG%nQv_IM%mY$QR_PKGGJEL6-!tsTxqfh!Y6WbPobj+^x}n7Olv zTNsMF5zb*6?c%t=&N_=kI}Ny3NH>25KCf+hbFwnkfg!}^J8|7uEi0EHMgUm-NxI#X zx~f0dY$TfnZ)CB{PI|Me*RyNt>+>6l!7z~#i9{vH8{?`Q?I3%>z;AtYU<`F}>XX() zTXB?m6OP41VZFquc){T}vGI;3kok=opG%J~f~Uc2RfCzg3@tvWSZHinDA#{GyVZh% z*bknpU7nmr?G`4t&Wi9&(uP0m+#b_<;!)yeb%z&rn7#|S_F3X~ZbusOWx}zkBu4iV z7gu@-qEjcteO$Cotj+kr;3+@N>D)nW6s8<+>^h|i z3v!8f-slC=LjRv&!s}>l-FwmN8?|3>Gex`DJMHNL=R!n8BP~(gHne{`?ZbI+tG-UY z%vZq&|KOe)r)1~)^-k#w?V_0nSzjSejiVIFI2`7O}y+PR0_$bc0&~ zM5!O*F`;AhC$E%_I`x07j%KF#x#CU?N#F&Kg5W8es0v@X{et~Y z?U?UYfRVIgKt?-wqARA%WRKhm!a8qc=9=I}zhH-}kAh%%7bbbGe0oP9zT%Zm&k8J2 z7^$w1@YQMto@S@3G6k{{us7jK`qFg`7d^N+v5(o6bQ0RAK#za0kPIM{R#bVrT+~q| z0wSYOLU0QeUQTBYrO1NRFq6}=kKRZcvy`jm^f4R zDw<=lU)Pi3@}1(Dj(GT_hN0;oXAz%N^>vqxcj^};Zg+ni>}hG2x)lKZrMevL1XSNh zh|+rdy)28ia`u1Pfwjp8KY!=x!OAE}PDc}}KTBiNPP)?!MwM+{W^;ARtzhLP#Q}Q= zj?86D(Lm?*$G@k2L46$0+~B;Zficp7(!D>4C)OldI}b7&?x#I>Hv| zs#sOf;6(#;iE1?(bgOHp0HaV+36X@63Aue}Zrd9f?=^0pOuT5EZ=_a96xV7KIa@rKwOfiuaN1>QVFaH$fLCj)em4!*0P={s{t(ZT7Il<0$$3|Jl<2}jf^ zr<1%oGNWAa%xR!Y!4ROPge+&1TucF~Tl1;_LxF$25SfFXj33}uiamcDDmVem72)by zRZ!G(5Z}Xm9ZHkcD6Hv&o`V@F*ju7ngl+n;!}nC9>5*1|6LWgoq^yEIlrwo4dl*m@ zc1Jp4)|MOPesIV8k-dTUcOE#SyYjFH1|~z0&zAg&1Ukfg>cu1p;3B|QDcD08-$TH;z>ucr%L$83c|DiYzj(DCf#@!rYAs>4 zo?B_;jG-S>t^_yfQp6DCglG=7DGIrcez7>HWJv~WT>|im-4RIJ%oS$Zd?LyL3|bVR zY69amsZ%9d*tHAEPYw_8w!6$%E@a|Q!eNX~JCupji1 zKdD4v2Q&!%R>eh=yJqv&evqEac)r^JLqWyUoF`F&8@PhbB4z0Hv6y>UDg+)}G=%^4 zKvS$A-)MUTB)8`mqcQ1ds*kfZrN$_}eQDHH@x-b_stYHJpQP{P(B6L#-aL&l1BHEz zJ#}3;EOO!0-SiL(7D)(q{bBR$oI+@k>T>pwycCsM3XU$Rtm4td`Zma7C(Zoo5-3m z2oa|xG4csG!){9?%o=~i?tl+zZf|L80AS4wDyrr+OK%FGR~6fUm8`%8YK_n;D$zzV zbwp@F^fN91{P%FAl+Tm zRLVN+B8I)X41n%11Dm~!m1&e%d;tXX8V$n1k#56j3Zhvua=aQeNA$c^pUzEN1BMCq z>-VhtGbgEHv7O@m)}bij{kQHZ=l*sC-tKS53CZ3)LRazb!NJ?G+5yfQ`c1QUj|K;+ z+1lZQiQ$DmfAW7Gti;lx<%z5i2tH*iFWf?3f`D>%grhG^?55Aw#&hbl_Bh;MAy=O0 zJU>)BLx?rshK{wRpuLD1XL>F@+_0n?(McBjt!YI)iATp0fJ*}RRX&_kOtp&ae1!Xl zzLe;S)F5u6N&vQx^SfdS6TG^S+#wpNx;L9S(8A`1WNLp;MOz+3vJxEXCQ$xjc?D5` zE&ya{gB}ErQA{5+ZFFHvMn!}G>2y{fqNQOsNx;{@nEFW<3668!4+a z&azZ5gOYI3AVpk3dSA;3&Mk{fMH`{y-a4u|u+1!4N)fkO=r>#yoAAFDg~D;tPQg_rDB{kJlw%2LEEm z0?B{5e^K=0v5tWY>@avVzZ9MqlsN*JvXn;`8e%?2zY!Yv8OnGJgOAf?x*nsI*&Y&T zrc=@EkzEO$?Zk@>UerOi9vrL*+kn^XS-*zQ%0V9o;CkeB@VQe5ovr23eW-3thWDL1 z=;g~JnauZ9=Y)$gyazfJAL`R$p3EC{Ffe~52@t7TN&#LS3{fdUBsDxUrCxH%c&2Hg zV=KF}?L{39O-7>YIPkg_XqiI3IV5%za1p{t8%cO_D3b@)B4V|PVd1C8sOD$02>SeE zl>IPhXj`xmj0wa95a&{bSeL{pRX}30;bbi~0urV-xyS=ALh)UT;3V(DRbUT_lQ)0j z(AT(H9Af-pL%&f+iGr>x1a`CN`km70@c~V?ij53>Zlesqju3nXW0wtWXrmMpYHuwX z%=~t|5T}SUYsqDfBIHzu-n%G8n-UODYhBE5hZAv12n>hL3U%$i_arEI;GFYH=7aCh ze8iG{N5ihd*XDj@y&u@}-P*|kqvC(+_<%~~lQ~H$({>5!PftgJrz%s>QHY0}l`tN^ zE<$0h2m4DcDp%tQeXma{qfY1ci=-tbR2B#@0hCnZ(yZOxa*L5Y%|Y%U z5~>*L4`lbXiS-9#E~4FcrwpS@?-Jr<6=0KPqB>L-B@C;b>%OanLKjMPU~E-$`%v_U z?#u>q>3`>Mb~UIvRxx)KPi%jpzyKQYb!ToQxFEa#gO2xK9LtdB^-;i zQ22!MqAr=N1oVQDUD1D%ZedR6tJ=c! zH>7d=lArPW)HLj2cqbyrU|o{~B*L`+H2BbqP+l@IG5fQbOT}-jD&_(a()@~nPSPwa zNXyf{8*y+QhY5+3xpb4@i6ROsIT@RquEFj+X(*=VJ{%0c=QMm8%fkDl@r1o2d7gjIa*M2Z(mH+>dXeH6 z&-Eoef2Vn3Qx}L&bL{c$isvo>+J8|cXW4aS$p-?>^7E-Va`suOo; z$MQhKrhHxL^qpZGbeoEDs2aj4+6c8cdkq``N&Bi`zPn*%JPj62u!g|Af6?XVH}v&- zo@?7*-eJefPa1zaJB#+H=G~j@n;r)Bpyip6&&$u8XIQ5^T>3XO4!^BdmgY8iP>y9` zeA1VLl;>;==3DLgB%d^%Fn{@e_ZNmkQ~!omtynVboyp!{;Ym;Wsui4KPh)ha^Eb4< z;lW+%8}p_1Y4@P75nOk~u)?eIH?&+O6y!D5gq6R!_1%Aih8Kr>*c*b^=^ow5gu|V_ zAh5DNVXW`Thacn;HqkQlnpbtS)Sw2-6IkVH5L=F zlryOf<%56TCPuX<>bc?><2SV2(6UX(Zj+FAnj_(pzI?QmiI4#R&8M^tX?HQxzop?> zXhOn*Q-YzYdHBkchX1s!9_9TV)ibok)mmFE zOy@x>a74l&GH8U$8{^G(0{2-=B!l3Cg#@1aB|60-q!>kDJyaOIxD&WhT)>^I|Hke0 zjlgFuR*L~@aaf?(3U$r?KJ^{_#XT&RA%HhRNKm{{O;rCOR_(f!n>_oQ4%w&4vGgR= z3YX-k!HW0^YO{R}2qf3;j#S?Gp3HoV8UqccP~y@J68-?w;Hk zxwXYi-Y7w+@ukWq?BOs-y0Tqg5kRt{tg0|I&7Io5P8_opijftlu~T~Q_N#~0FzL^o zg4nWq1@~sLYzKFJcglRXNOSL6JjjOb)i-}iK4^-IlwG{8aGm;~u-?08y>KvXd`uJE zsY}6@wKn)zQk%b1A3wCE9Wu+vjssk20sS2pBA_mjfluHbvLj{fI{ebM9RMt^O7DTm zwq0IvPn?w&d@VcrjacY~vfB`Y=>l-#1#1C`uHMeaO-5>s77V3Its2fuk~P4OljbQF%eO- z?-cI!SczuujYic6B_CjULn+6W$1;4SAi0!#9wWyL%sx)yI zb55^IeUk(a_bgZt2rAd5Rx*DQjIuGz40Y&Ed=QBzo)(cFZ0pp7V7d_>3*NLTic@_{ z8G0i=R=g)YIq(t%uJ4z4o8i#%1-6_kBy}e~et0aUY%!h>PM}E}@j;*yZuiOx{~dZ} zBR*DaSnt-wG^%iHcS0Kk+ik{$Y{ISMgMy0T8%YZ(Kf`@1{GhKmSC@ZO(SVUx`2B-M z^L&GDVfVxJen(Qd)9PY3+sIU5J2N+SJm`-f&Ssc%zVp)lq<>3ebWGQ*Znp6|Y}fIi zwa?Y=)b@iGV0S%nr{&16cNplj;on^4cN#O;rk+7uctD%S$vtU#y}L0A7k-N)K({JAoU` z;A1K^r8&R56PqedHD=)$b8%@NjcAKNy_QA2N55A4#6>Ag!izD02`Ao@nBGcAzO zdQ%JKlaPLoc=~rj_@CJlw0d3FSY4e1w*_O1~n>!&*OQt+7*J>N; za9vt-&dL33XN^d7tKK41KW-(-Jr;_m2>+eXvb+7JH9(*NW+N^3Mq8h?gR-eh%^L)6 ztRAZ*5m>u@+K7LCCoWB*amQoUYb{GVA@$_@-+cPoiI;1uO}P=ubu!?Zd^2^~0-$wz z(ykSEzqSAa|3$n{9hwSy!;Ge15;Y^93Nw!5x|+L@@-}GtW)SqOH`6b((p=d4sUxBm zb&N+ZVK`qxCZ!@Md+xrjD|&lnsTuTs6Mk{*RRaiEz4NqJ9{2`G8760D+E!*p|wK&iVcor090}FKU?(*-h%G&HLj*k|n z_t>uXR>xbb`>oaa(ds2(I^5=Raxn&t`wPwLMK>I1bud8K!3i1PD&tY~=GI zSwXvQ3WKocsxe04se0y~0sf7xUB6|z`}%XDhTVtj^)WrRs7WZ z+#y|g6`<`!Guu_6wp-v`(GzuLYve{*=eW&+d8D>GZ!|L&ChHo6ROh(vE2d!Kw?7^< z^NCi4w+5xt>r3g!Sh`JBx*I?fc;Fnql5~H1x&IC`lHr>Q)%jwgUtnJIKsSc^d=@DB zLxJbUaCx1#p#3|2An0~o%LO6bhshYu+0AXFd1F2><4#*vFdtxiBlgAO7bRcXixG+` zi$3-{E#I(Zg#skTg7w-dCaE6AC+^?xnf5S`_bM#w}swyn66^(5NQdDY}fdV8MSeb}FC_ zqf7e1uh@xH)P|(m6rV&Q&t#?f0>f6Ojv@~d?OicE&Ei=6LITRlh(X3PB)ZxqYsy6& zw1Gx>__vn1TyWvt zNH=yK^vRoB{bIhHJh)S^0#AQ~EE#|>*p2&_@d|e*~{N$%g26Y(R1omLOzYn?I5vt6I;`3Qx z;4bdPcyPDBc{Mx=7$BD@18?M7tnUSa%AuxG{PsdwnEdTLbp}R}t0sRpB$}Q4c-H-E z&xAiqaLNd;0?*oYDfl2E(ON8RuQpjtlXgJyM}c5me3AnwBVU#4204d!8(Ia=KU#Bk zT9iQr4&4=tDMYKSdx3(JUjkgQaT4HAxW?%!AihI+5yqW}Y2-cKcu~BLu!b_;5kaBd zlkl%TkcJVGY5bZHa%5wJjJA?E8rz zUWIc`otClux#)E+<#&wL2seu)YGFJb>Q<#RoAwbD%?EixH+Zsiu&ABpy@P3os+5Ty4O1A@)dOjt#_+BZ!i5 z$_a_EhmMaseXSYb&c&Tj2gGejGDgYF#kx$U8x-F}4WGpYLfqPntP#a6Ux3U=f<}VD zEGe2RXG#?lRK$<|^xe~tUs4}h}zs)I53OI#FWQc8o3NAhXPqPiWW61S$dpft!J%0|JdWl>KhrI+(w` zh}8!93a2JgHgaHOU=o82;wCYPeNz~Pg0Enf-Nen$?~)S|yAQHltuSKYaE%~WY5;zx zENKJ*!LP)bXv_f3Af`Ylibe=UqE$zo&W!vbOj>`|!47i?09l{VHdC`p`d#NfJ&+Q1 zP&crpR2a%nDAmaWkOj%&C(+~7E~A_d@Ehg=cFdevxfj9Vcao>VjRgwC!xhP*u7M;D zQc@^?5~>7a{DxH;Sz9PA5YGkZx11`Og!Q+@#q zLlV3t@-YJD2k)#F1wH^th%Qb1IK>Omx$29nvU}v9VpSlwRavvd1%qo0zRQ6Gke5{? z1zVq})~6tz>#^!?o$y&s$~pa#SP*gz-$H+zp;<_D3G}O22Et*WU`12yG=M*l9IVv* z?jSKZ2o{1Rfc!0(9_$KUkJ<3^(`dll8YuXI)ba`U_n??n;1OY4P`IehhB*8Zu{|a+ zin<06p##fG)C$p7rsl&@UE#zzv~)ulgD&VvF6GgD&U|TC3h^L7I+PS;wJu3hYEXal znjRd3`Mzc1@L`-&X~M?^JHjWv3}We`TN#X-1P2LREU^&~Di}CWEc_LTg|WY>7Bfw2 z0e6~JG2p}RfXKm`4ezE&H=AHhFr7>-kmwCGxIhGACvCqXKS$*cESP?J`A|h2bMg7D*=gQF62!<=>Ug77GVM{6)8@0*$cFQ zAafNd5Ckg1t;F`|)CrG7U6X$)Me$a=9G)#wxFV7Hkc6{P|C;ZHm4N&^JGv692%kWA zp^Xf%;iEV=hCn3&ebQWRUyKP1;06H8RcwqPIFCm5Y=fGV1?9sRuv5dpSoc7UkNO2{ zLy-$2$VLtYAfupR=Tn6LO9H`})kxf(5>qS@ZLK~a2i zY8?cjZMqvEf0We7yQmO-WLizk_>{B+O7x+cyqO0x@EJtw@iWeK>sl;fpT`0R9k$UX z1CtF!Y-XHki@I6hrSO07!QcTrPlHhGvylC8{cT!Hx;hy$FtH#MB3Pc-1wgH<96weL1xZ%98Qd6G89FCs zQGiIpVQf~HpV{Lxr4#~#k7(QiSOEa%6aZZ8p#wrYhF=B2zB+#a>)@3^C^U$dM4U31 zq_KQc_|F0@|Ee*}cu}fEoFf8{)Ts46a34|UYr3=n3<8{4g0@)aVG&HELy2k(95gP zC-^Xva8t~mhTB%qSKP4-y0lQQ?NlBmi<0$mVVYBPF6^G!>Hz$4NIq~D3~bzp)gWZX z1b{6%aA3QL*Mg^}6y;=qBJd)L9gO7%eT?PdVM`Ups{ntrRf+(9L%4oJkg8ZKBVR(`Z^Ya6%v_|o*;0U&9e$RBCOxuY z)`3ca5upo0gaCI_pCHf~P%10&(oTpIJUzLVFl>UV88qwx{7Cp8uwB53DClA6Oh8<& zLK{hp)5(8>_7)T%eK9<3qCQ?=eeXQ`;qAoj0?uVKToFKN8lEcLy#^uLXt=^#xI;y6 zVlTzI5~zx}hx0yI6krl6BExC0lvrhn%982m#PuvEx9aHW$W1)$DFF**23K$=eNs{E z1hoU}HIaGYV@6qh0I-U$L(<}0zwt-{Dak>GBAb63jW>q6oim}~VV45nq?j(7Neo?p z$_`rFD(B$rKuhxKUhCirPAKGo4urXknnJ*A2Bu{-lN5Wp6Ra51WQzZyO5$gTB6xS1 zJxh?VV2a3@jojK$8L@zJrzbBgDNVYw(+D*Lc9^vJ#ZFmy)tcaRuuKAOjHtn|?KIv@ z0Rn%JOX8RjqL?_aM0!A?0qqW834#Vh=~Sps@oYsvJ&ZS^f;xW#96Bp#hCI!s7IqGYPb5^*+1VT#?gUB8t^lf?vuoEYd60T6yePx_QQ4Yd z5=YP4l&Me(?cA*d>E@IzOqI!Nr*d>EU$AFzn$RZ^y7{elv$NF0Bp3a~L$pXVkwRhR zJPa-PO?%WcCJ@Rm?^`}Gd3mwWbh0&y+|8MkMK;%2r?GT0c>`m7bZaK#pB3;ix}lrB zIuyCA=%R8rUg(dsIVoFwxA|0#n8WNyzMDQPu|~&apfkKbT3-%}LLo3_lN34+Zrq|@ zEV{5e>d!VCNQ7#MU1n8*YrB zh+!%X@{X3o!zPoYH_qklX$mD=l+3jpGUuMIl?WnTbbx43MDhtv)+(6TfMVH5yJH)l zJ`DP2`yhPU^l0JLZwBP}V6k_fy~^9tuT#P6y>xv9aJ4@70u9GTMU^>U_|`-|#ZkdW z#$nMqbm8EEe?=Wg#_MExoXC@W!Z1=1%*I)Dt6&K)s%Yr}i}xl`=n4~&%e$LQUiRFX zlx|eQk^#IQ(-hY3XuR|aqT(%gy@## z`xU_s1uLzNUaOajpxIMi%U@$_^7Sx-D%>?6iSfoP0$Y#vMSWD_`t?N$@tWY2G7QbV z`3q&T+;*#Iv`moRPJ1bZ?Th&^w&E}Kt#Y!GP$GBZ@^b}EUQ!|R2f^(boj-T2jzTuT z0e~8^=Dzr*z=ZJ-z`9(ObVe@dkjz!Ggs@=)e<7~c;Zcoy{IxZgHC*?9s$$N+cTLI4s#_kbh{7GJMEmk zmQZs1!lg%*m%nBC;ZxCuW4+uP{=%XX)&gs#ed7-@Lob?rcuPe5PBS)_QfjnoDrvcO^2wc`FK z%KNk}Uw38%_*Uc*k~7hWLRoAt>UL!d)tHMEICx#zShwdPbqNPvr@!ewvf86JLBJio z%1$y2NBq!iL4&004$P_saw!a5>U?zVIKV-q?7D%}(M*h~nrrZd=KMo)VuD&2gsGSo>+eI4 z;F;ZB81;t7JS(4I$^c0&$c7%F%@F-;kf<-xfVjh0*_t>Y#!~r)Vl88ntVSZS{L}Z5 zDUqo2cU;Jnqo4h-%sJgyQbo=j;9wcZIXpu?aGc`08G<)!oOKUmv6n45xPbcnC}~)F zFZ_UxcW{K@RhPM?!k+{STH_59dlTt6miy$~FS7mhrf8!#lEj6GLBu;j%QY?xiU9#$ zV9*d;d0KjLhhR!8*2V<(JvFw3FV?;1q+f$*9DZQ^k}y3h4yWCWmfLp+RIQ4&^v^dF zS1jMql3h}sPLX@p{RSi#2LNVgDcwjzLS`Dht8y2ySTqd6TRs>+?D#MrY4vi^dizys+YX^3NAb7A>N zNYSuu!0RA~MC3t>bnkh^34~A*RVY^bItodjNk8g(fgbPeML4aa%mEzPoVzQ=Y%>LI z?a2=qADgre$34{}eayzIDE(Z~v@)8@Bwf|(`^m6o@`!3X-Rhkdr>)R@?9&BD|vqdAW}Duba5|ahXtjekurW_W2GOFc-YhMiq#eI!j*$Pw>_C66Wt`pZXCj z{kBLO^@&{<8=$$n0|8Hh5YJxYN)3DU)sJ47V7tp7e|As#nZ&g6`%;c2<6rX;t1?Ln z7I?Zmra$?!q22I>P6>aSjlQFlz^$Vj3Y~IE5pcn#5@`s6Ke0F`NwdsP(_^`gBd%%V)xsBcqX_!FaPEtAR`OV{juPL2b z8~&Tf>!9n~u-i>JEgG)UKI1I+E3t2a8;_TD zpwP`Oog=%)Th@2K5j1183iM5J*kUGY6J(165!o%B6 z#S{hGF@4cs2bI7Q;K+ecz?<%|YXg)W@RU z;RLRPt&#s-snH{gS|H2MqiqKUBy_59AY){XFoAsZ6 zWszqK3?r4y*wf8xLR8#;b?2hEhA{_%+TrzzGR9WwD;e_0xiVgDWZ~oc1W3*lgEHh) zWj-qwN9E?AI1VH`TaGI8n4B6<0To@8sD%;lV$Z)FZVSlvZhg1x4gH)0;8+EYL+h^* zzGCmzm+p6?w%=2^q-p4_L^rnFC|26GFx|MX|RuvWve2tY7nXyMi~ ztQb@KJ~hCCu2w)~Di=f;u$Dn!-n+ZL$c*hC5@xL1*X(sREE#|jGro>7(N(+6heIZ5 zFGmz^dC`3+b@x2TS>Js-8k1Tb`__!WxCW}_gRc?$QA@LOhXnnJ?C)LdIyv>%$c(Vf zD0lRBxpUi)&nhy2tEBoX58!$zZx1G;hAavLj}T&Lq$*^R)Z66hMYkzasYWx1MX%>% zSzBca+}K{{tT=Qtjf=NCu_8z?4aW7aif=#*Mhm1fJ*Y~lbLgfnQYq$B!dQfJP)|iQ z^7}JMFa*haKBW=B{Bai$K^V{-HgG6%`Z~W%?PXN#_>1Z%s4YHDecv z{XhB}!4=Dbp8`c^kALIANPyKv?T8%QN9sPS-IJGFLBkJACRh^kZ?ZV&I@2O|H+WF| z=p(5fWMmaroR7``Ugl(9-#f;&in<)5j-oSxCxMUR*NStq6;t>cIAJel zw%W^wWm#|BE~Uja^^G1z^oU8j6&Cs?$l|MME-^)mh&0)-1T!U+YDB}7e;~6YXvyD{ z8f!^WVBk7!E8(A~j){SOK6Q08+rY36*uO%n_QL@`J^WXj=kHc*=RiOPwtrI(FT(fdDX7< z4^N+{#~sApFMs^xWAWx%P}xY0G9o8ts@ZnD_T{@rhgv#X|I=<~o3+Pwlwx-fFi2tRO_mMti>0``(;NN%7s< zIuZoZ;^Dl>l!ep0-ish=R9u~>^S+}shk`jnnFgvkpZ&qso7qI%n9V8aee2Rbb3lz@ zYXP%YdbD)vRtd)#n@#|a3{G$>R>lg>Fn#DR;ozjT0n=fZG5pi)w-f42h!qDEcEDjV z^BF8~Y&8uVoTKP9R2DQdk@5YoKphX15AQx|%ss2#2tT}R&SREu9ngsDATGdr+$M7G z9jQwGXE0u_t2CTyT7sTL2P|QAWt*@79%3>ia14}CnV&qU)V^#JdKk*r9gLA0{4mr< zAL7f57vx1CPE=@FZ@R4rF)TwR2T%=Y7}>E4V=vYz?>g6X{#Z*wEbLkm{D`*!yf>=^ zvlDuDX^zglKgbYvCWhy?gVpaX+phyf&WFe%h^u<>h1%%g)U_>q*pXU=yPc6u6-XWQ z-oc}vAs3f}Qg;;}KfDA#f8*@JCvvY03F?`!ROigTyh8FuHeIhdO(b&!O5FDJc2c&V3@b&EZ(uYN=+a znR%Ze8}~EM?P(-enum(E%)%bxHr*vVd?l7dIgaW*-ab{Sqb<-HwS~4(@I$ zp2+=2_gslCDlEu|N*ms!R8}fD^P%P&6 z7_0|Tb#-yMrr}LD>Ut2*%r<>vFkjYVpOw}Wuk%6APNM1&x4w2ClyV;PE`L}Za|Q11 zze!Mh>B>CfA~iE>chzn%ow_(k@No3E*x1C(&edymkv}Sswj?_d82E$@-ZHaedD2ys z{Ut>#eebA9It|=#dyVDCPtU4K$dzN7?64ud-}*VSPrBCR)e->5iiF~zgnWcy@HvAT zU=LJEX@KUn`g8~*XOezyK@_bk1QGk8*K4;sJwBm%QRxZS;-;Dux(oATTG|Ej%#B-= zLwT4Mk5lX_Xu~S>)b+ba%VJ#Zjjof^F(T}02rz#^-T}yGO75clwI-*Fs`#@Srk;kS zOWS+(zM!+PcEfxXtS4R^xmZOk1D5)piwEn=m@gWiyM}u0<(ni%F_ad|$1C6Vm&r{ds?_-|g}FSx>|o#9QSV zP+-`?VQ-Os(c_HzI5~z&N3<^+Z{edEOqe#M)IL2Sjl99fFg0S|m)9qk9FkGpqocO0 zWef-0IF+b41exN`EOBuV82mo&_1D1+5K6~%!ru9iZu1u?baZ?%w+x;m`tml@hzV5G zsoeb>TYZjN$`E3QCyUWBJZV}iwY4r4)~msbr@8SV(~Yc%TUIEaZRf0#)|-Q%%~R~- zP>MK?+)R6%9~&&#hMTHo3M&debWy}vFSME(wby-q zbIR~t4Nmr`(`=oGsf+0y>ad_f0aagFUU~Kb3X23s$frQAx04&_i@3d(VzbH4*R;;d zOz>~sF@NuC?==oz@KD<79REyK0pT)yz`XaW_wPkljh%>${kdg~V^JyT_Q- zN#-%$WDH>yRk^86x0>2$QSU>Kg$o6`y*N+!`(GJ5DH&A~&NHC}`))thG8k)5)8>OP zVfwE$3lPSrWmQv}esp6Ky6&AKWa<+G9OQpGk-As#a0*8M%F;Hi{C>J4n{PDiVoTFq zV54Tv$fOz4HgFUhXhw#($(3d^!n+~Zj_NE7H&1u?G+%YPaoc*&6Z9_D)-TY;kva$- zJUzCJz2Soy+*w16LVoYuiVfu9=G%)}p)c<{Ml%MgUyT&>N%pEPc!QC;RHUU}^p~?X zTe=dHHZ?|tx5ebp>nNmm2Lvp~Ei7=92 ztWoBAr9bt(=pfRPgPpUj_Fm^2Z!^)0XDnui>H7i2@@j61-p}`Ov2Sq0_0~5kSk})Z zTtUgsYj`z`u1n{^HLKZ0mp-U~JuVgVC&{g4O2H(>Ps9kd%2_!Y3vBt)rKN)`4Xqug zFMfb=g>%mGaOw60ga|*;ALLb6zyCxZjlUr!k?~-D^6t4yiNKBbR;0B4o@Z2*|3h?K z2Tz+y%Vq50xY8=5^wP4rub7uc;3{X0GdO5^;y@9{aR9& zyc~wIKE96eD#FNt({=s>K`mt_PY#Q<|u7298*%vl_COeQ)76I9cjWtjJR9aG6a>wpcetHzeKx z(yv?$Xd`gTa4v`>OEYhol<73qkEuW?8_4hAB*@K|Iv)rrsDm%V<8Eo0cs?WaZs*Bl z7xgrPVo%oitERR($u4?+L_)GN!1(E?oT}_7V|ZVjfOUs9`%`27-#c5peyTM%(Vy97 zoe&5GYK=o+j%E@&>t+knY=Z?_#^e24Gc*Pf8jB%Zy5Frbm zU)h@^o&pwgYBbr?9}$n=Cu$IrvqdEr>o!}5@BEBs7KjR_XotjW2T7}g`noiYfF)Y&(1Y|QM^1(_uPHQII9Um zMHT13xn4hl`Z0B|Cg+lQcq1I%cp<6=i$`5pMQB9LX5I-u1Uj%~(Awr7#yC_~EvhU@ z;Gric=q7c$Ah#xQsTNwfoaP;1f^#0R7YayG00&#%*DGL^k?3fP^JQ_JK=NK|pJQV~ zJBPRMI3;jvo~rHzVS{P{rUM*!Ty{c;sVPQsxlx%>R4RK2 z;uWTg7R}|-Q~UdWQ|X=0OGVVimhgHz29Ri1v$Qm|N3LM(+NOC{r{KK_%x9G;@T0l% z1=6TD=LlD2iv6SoF4Fs42u<9rW9;8!1XW7LYD#|SmPUmp=a?Hz6b{M~#EMh|ri_3< z@kLGD$QhA|=uEUDGG0P6$cp5)ws(~Wmk6hdF9rcG>Y6@LyfO>t?s+QNx1f)sCUG-5 z;ASm~5^ViC3l7abGg`y@bLWb$9RhPqz+`x!Bt=E?$u8pS?G1+rteR4B?4b_}aZDZ5 z7t#^rmenqOI~AB}Yu&HE^GR!ukPzsYgh6QVz2R%$!2L(>0?x#5Wm8#)HkP%1_uX-s%i2oHf0{?lsD~B1mLxW*PQ)J3Ti4; zzN~FhYfusnQl^yHNTmedM)J%Ehd|yAG`5|-hMvq4mo%1~zKjcM@@c&rk{~0BjX9Wd z&~%V8(^_$veN8;u~M>fU2UcW@!`!o_vNRnJz zByKHZ?USrQfRnG!^=UoM7m`@*)A0kF zGP5nj=%;Z{)bH{}ra^m_+VVf;qn}sqd4xM^lrjQ2kKNZYDhC)AzM`D3B^0!gAa9TN zw3ERtKmeTy$-N2PJ*?D)#Of00znv8N0y7#SgOf(g7Ik zuPSEeyi_sZ1vX5tnldj}d8fwkE%1j;I~<-$=HH-x%G=WiYV9Hhzb0Ws{~ERXGjEz| z86q~Czlj^!71g?U?V3+5ka&85j+88F%U3NJK0(dv+3iKbyB7pMPy!W3arkY#0ufea z^6-4Mnv?Ds0Ek?=4^h>M4d#C9rqCQ5xQbK`*kqG;*7GK*GJYn0{O0*8zOK7&Hd5r$ zvG{wlfdBi2LQ($1K|_Xek;^|53x{+uiiISi_gO!kfLG?z2UBs+BJ0FmELTo7<=%zw zTEirMtUQtmhvEyP*^gGnh_=E#y$no#?z(;2*uX6+N6_T#sbxc;WzSW6I5v8o34Ly; zs{M!%kpj93e(ja^HE#};%?(D^9&faZABrpflPh8{8DBp^AgDTKV+a?rrLSEJ7Pfa_ zA?EW*D)4>?7ktKIQuDq~3?;>YvVwWIcwxL$;QxK7?5WWI@8t#Kg8dhRawi^>V!%jW z7~FjSW$?mayorLZF=*L%!Mxny|8gNsPS-~9hmhw=QE%nRY+N*pD_kiz1DLZMu|=yY^a%F^in0{}-(XaE2J diff --git a/pitfall/pktest/test0.coffee b/pitfall/pktest/test0.coffee index f068cb68..44ac70db 100644 --- a/pitfall/pktest/test0.coffee +++ b/pitfall/pktest/test0.coffee @@ -2,7 +2,7 @@ PDFDocument = require 'pdfkit' fs = require 'fs' # Create a new PDFDocument -doc = new PDFDocument +doc = new PDFDocument({compress: no}) doc.pipe(fs.createWriteStream('test0.pdf')) doc.end() \ No newline at end of file diff --git a/pitfall/pktest/test0.pdf b/pitfall/pktest/test0.pdf index 7597a01893dbebca797c42097c4a2d6d7440503f..c79a55b0293839ed0d8fdc0dc6e0175608dced12 100644 GIT binary patch literal 1163 zcmZWpOK;mS48HSM@DiXMP+O1Ka)zRZByA9M!!oC*1wD93eY%sLhQU8t5Td~1`wzIk2mj^IPmBKJ!OfN~aTfeEK?x5JVDmNG1Xs3; zWJ_j?q_nw1N!Ky>pY1wJ#>D|wf)t@tXh!N4{7I2JGOJKGcCoFB_cFB=4r|3R51%_s zi?T?U*5S%0+~~j9gF}D5r@Z5KpS1g&a`f1d>zP#&xxScdIELr^UHDHn-?}#(s=Cg~ zl{VP}7b5VEH-e7o9)5uo0%ahOZb?!k?LhUCKefNJ)W)+hrWN~pikz!7Z$NA-*nraH zM;`lHl16zt3QVXeSTAx06*ZYs(874394c+<)S3dExbczWksV8_w>@!VoE(q$6iyP= z7w2vrz7*czydL54MC3(1!sFi3*Y4D&rg0L7hT5koFX=dw38-qVG-@HKZ&FK?Axk8J2lxt1%648YJq>~B=1R0#zo)ju8=}o~=5C39G+S3(X|f`p64~)) z`cVmKL_p|9Y9z(C+Y`?4IJ?-*GnphV*%e!6|CTt+C~KazVEBCQP}}h{c;~kQ{&Tjj zaK&#bem%)_DD4IWMj-lyVG!s5H`wVSL*aR0e$*+#c%f54bfuHTxJx?`jIMQ(pk2f> z#F$>^$|T#_vi@@{v%i)g`*Be?}DB5 delta 265 zcmeC?+``JI8sOrlYp7?;rTQNTCR#1xwzK0(%}dEo%HlGce4ELG&A`~e!pLZ{CUf~@ zCPv{PBO@+-x6GW9)FK6ax17Y1RF~A`{FGEKptj@8B5i2Sr5}`^U!q{7V4x7hrSF-Smakw2W`o_BSX2VG*~HwOOI6j? H-;E0ZYd=Sz diff --git a/pitfall/pktest/test0.rkt b/pitfall/pktest/test0.rkt new file mode 100644 index 00000000..1df60153 --- /dev/null +++ b/pitfall/pktest/test0.rkt @@ -0,0 +1,7 @@ +#lang br + +(require pitfall/kit/document) + +(define doc (new PDFDocument)) +(send doc pipe (open-output-file "test0rkt.pdf" #:exists 'replace)) +(send doc end) \ No newline at end of file diff --git a/pitfall/pktest/test0rkt.pdf b/pitfall/pktest/test0rkt.pdf new file mode 100644 index 00000000..f84357ef --- /dev/null +++ b/pitfall/pktest/test0rkt.pdf @@ -0,0 +1,63 @@ +%PDF-1.3 +%ÿÿÿÿ +5 0 obj +<< +/Parent 1 0 R +/Resources 4 0 R +/Contents 3 0 R +/MediaBox [0 0 612 792] +/Type /Page +>> +endobj +4 0 obj +<< +/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +>> +endobj +3 0 obj +<< +/Length 18 +>> +stream +1 0 0 -1 0 792 cm + +endstream +endobj +6 0 obj +<< +/CreationDate (D:19700101000000Z) +/Creator (PitfallKit) +/Producer (PitfallKit) +>> +endobj +2 0 obj +<< +/Pages 1 0 R +/Type /Catalog +>> +endobj +1 0 obj +<< +/Kids [5 0 R] +/Count 1 +/Type /Pages +>> +endobj +xref +0 7 +0000000000 65535 f +0000000403 00000 n +0000000354 00000 n +0000000186 00000 n +0000000119 00000 n +0000000015 00000 n +0000000254 00000 n +trailer +<< +/Info 6 0 R +/Root 2 0 R +/Size 7 +>> +startxref +460 +%%EOF diff --git a/pitfall/pktest/test1.coffee b/pitfall/pktest/test1.coffee new file mode 100644 index 00000000..48b758a1 --- /dev/null +++ b/pitfall/pktest/test1.coffee @@ -0,0 +1,24 @@ +PDFDocument = require 'pdfkit' +fs = require 'fs' + +# Create a new PDFDocument +doc = new PDFDocument({compress: no}) +doc.pipe(fs.createWriteStream('test1.pdf')) + +# Draw a triangle and a circle +doc.save() + .moveTo(100, 150) + .lineTo(100, 250) + .lineTo(200, 250) + .fill("#FF3300") + +doc.circle(280, 200, 50) + .fill("#6600FF") + +doc.scale(0.6) + .translate(470, -380) + .path('M 250,75 L 323,301 131,161 369,161 177,301 z') # render an SVG path + .fill('red', 'even-odd') # fill using the even-odd winding rule + .restore() + +doc.end() \ No newline at end of file diff --git a/pitfall/pktest/test1.pdf b/pitfall/pktest/test1.pdf new file mode 100644 index 00000000..3abf80fb --- /dev/null +++ b/pitfall/pktest/test1.pdf @@ -0,0 +1,104 @@ +%PDF-1.3 +%ÿÿÿÿ +6 0 obj +<< +/Type /ExtGState +/ca 1 +>> +endobj +5 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [0 0 612 792] +/Contents 3 0 R +/Resources 4 0 R +>> +endobj +4 0 obj +<< +/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/ExtGState << +/Gs1 6 0 R +>> +>> +endobj +3 0 obj +<< +/Length 421 +>> +stream +1 0 0 -1 0 792 cm +q +100 150 m +100 250 l +200 250 l +/DeviceRGB cs +1 0.2 0 scn +/Gs1 gs +f +230 200 m +230 172.385763 252.385763 150 280 150 c +307.614237 150 330 172.385763 330 200 c +330 227.614237 307.614237 250 280 250 c +252.385763 250 230 227.614237 230 200 c +h +/DeviceRGB cs +0.4 0 1 scn +/Gs1 gs +f +0.6 0 0 0.6 0 0 cm +1 0 0 1 470 -380 cm +250 75 m +323 301 l +131 161 l +369 161 l +177 301 l +h +/DeviceRGB cs +1 0 0 scn +/Gs1 gs +f* +Q + +endstream +endobj +7 0 obj +<< +/Producer (PDFKit) +/Creator (PDFKit) +/CreationDate (D:20170513192922Z) +>> +endobj +2 0 obj +<< +/Type /Catalog +/Pages 1 0 R +>> +endobj +1 0 obj +<< +/Type /Pages +/Count 1 +/Kids [5 0 R] +>> +endobj +xref +0 8 +0000000000 65535 f +0000000871 00000 n +0000000822 00000 n +0000000258 00000 n +0000000163 00000 n +0000000059 00000 n +0000000015 00000 n +0000000730 00000 n +trailer +<< +/Size 8 +/Root 2 0 R +/Info 7 0 R +>> +startxref +928 +%%EOF diff --git a/pitfall/pktest/test1.rkt b/pitfall/pktest/test1.rkt new file mode 100644 index 00000000..2bfcc677 --- /dev/null +++ b/pitfall/pktest/test1.rkt @@ -0,0 +1,18 @@ +#lang br + +(require pitfall/kit/document) + +;; Create a new PDFDocument +(define doc (new PDFDocument)) +(send doc pipe (open-output-file "test1rkt.pdf" #:exists 'replace)) + +;; Draw a triangle and a circle +(send (send (send (send (send doc save) moveTo 100 150) lineTo 100 250) lineTo 200 250) fill "#FF3300") + +(send (send doc circle 280 200 50) fill "#6600FF") + +;; render an SVG path +;; fill using the even-odd winding rule +(send (send (send (send (send doc scale 0.6) translate 470 -380) path "M 250,75 L 323,301 131,161 369,161 177,301 z") fill "red" "even-odd") restore) + +(send doc end) \ No newline at end of file diff --git a/pitfall/pktest/test1rkt.pdf b/pitfall/pktest/test1rkt.pdf new file mode 100644 index 00000000..e69de29b diff --git a/pitfall/pktest/testrkt0.rkt b/pitfall/pktest/testrkt0.rkt deleted file mode 100644 index 1bdd8054..00000000 --- a/pitfall/pktest/testrkt0.rkt +++ /dev/null @@ -1,21 +0,0 @@ -#lang br - -(require pitfall/kit/document) - -(define doc (new PDFDocument)) -(send doc pipe (open-output-file "testrkt0.pdf" #:exists 'replace)) -(send doc end) - -#| - var PDFDocument, doc, fs; - - PDFDocument = require('pdfkit'); - - fs = require('fs'); - - doc = new PDFDocument; - - doc.pipe(fs.createWriteStream('out.pdf')); - - doc.end(); -|# \ No newline at end of file