From 9fc57b4a493920f5bf934b49cb78cdbde2407307 Mon Sep 17 00:00:00 2001 From: Philipp Fromme Date: Tue, 3 May 2016 13:05:46 +0200 Subject: [PATCH] feat(custom-elements): add custom connections closes #12 --- custom-elements/Gruntfile.js | 31 +- custom-elements/README.md | 44 +- custom-elements/app/app.js | 4 +- custom-elements/app/custom-elements.json | 117 ++- .../custom/CustomContextPadProvider.js | 61 ++ .../custom/CustomElementFactory.js | 19 +- .../custom-modeler/custom/CustomRenderer.js | 97 ++- .../app/custom-modeler/custom/CustomRules.js | 48 ++ .../custom-modeler/custom/CustomUpdater.js | 94 ++- .../app/custom-modeler/custom/index.js | 5 +- custom-elements/app/custom-modeler/index.js | 67 +- custom-elements/docs/screenshot.png | Bin 61150 -> 68498 bytes custom-elements/package.json | 31 +- .../resources/pizza-collaboration.bpmn | 764 +++++++++--------- custom-elements/test/TestHelper.js | 19 + custom-elements/test/config/karma.unit.js | 33 + .../test/spec/CustomModelerSpec.js | 119 +++ .../test/spec/CustomModelingSpec.js | 275 +++++++ custom-elements/test/spec/diagram.bpmn | 62 ++ 19 files changed, 1414 insertions(+), 476 deletions(-) create mode 100644 custom-elements/app/custom-modeler/custom/CustomContextPadProvider.js create mode 100644 custom-elements/test/TestHelper.js create mode 100644 custom-elements/test/config/karma.unit.js create mode 100644 custom-elements/test/spec/CustomModelerSpec.js create mode 100644 custom-elements/test/spec/CustomModelingSpec.js create mode 100644 custom-elements/test/spec/diagram.bpmn diff --git a/custom-elements/Gruntfile.js b/custom-elements/Gruntfile.js index 9dfe0131..9b41f799 100644 --- a/custom-elements/Gruntfile.js +++ b/custom-elements/Gruntfile.js @@ -3,6 +3,7 @@ module.exports = function(grunt) { require('load-grunt-tasks')(grunt); + require('time-grunt')(grunt); var path = require('path'); @@ -13,6 +14,10 @@ module.exports = function(grunt) { return path.join(path.dirname(require.resolve(project)), file); } + // configures browsers to run test against + // any of [ 'PhantomJS', 'Chrome', 'Firefox', 'IE'] + var TEST_BROWSERS = ((process.env.TEST_BROWSERS || '').replace(/^\s+|\s+$/, '') || 'PhantomJS').split(/\s*,\s*/g); + // project configuration grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), @@ -34,8 +39,10 @@ module.exports = function(grunt) { browserify: { options: { browserifyOptions: { - // make sure we do not include browser shims unnecessarily - builtins: false, + debug: true, + // strip unnecessary built-ins + builtins: [ 'events' ], + // make sure we do not include Node stubs unnecessarily insertGlobalVars: { process: function () { return 'undefined'; @@ -111,6 +118,20 @@ module.exports = function(grunt) { ] } } + }, + karma: { + options: { + configFile: 'test/config/karma.unit.js' + }, + single: { + singleRun: true, + autoWatch: false, + + browsers: TEST_BROWSERS + }, + unit: { + browsers: TEST_BROWSERS + } } }); @@ -125,5 +146,9 @@ module.exports = function(grunt) { 'watch' ]); - grunt.registerTask('default', [ 'jshint', 'build' ]); + grunt.registerTask('test', [ 'karma:single' ]); + + grunt.registerTask('auto-test', [ 'karma:unit' ]); + + grunt.registerTask('default', [ 'jshint', 'test', 'build' ]); }; diff --git a/custom-elements/README.md b/custom-elements/README.md index 3016d16c..73c493b8 100644 --- a/custom-elements/README.md +++ b/custom-elements/README.md @@ -1,31 +1,45 @@ # custom elements -> Advanced example. Works with [bpmn-js](https://github.com/bpmn-io/bpmn-js) version v0.12. +> Advanced example. Works with [bpmn-js](https://github.com/bpmn-io/bpmn-js) version v0.15. -This example shows how custom element support can be added to [bpmn-js](https://github.com/bpmn-io/bpmn-js). +This example shows how to add support for custom shapes and connections to [bpmn-js](https://github.com/bpmn-io/bpmn-js). ## About -This example creates a custom BPMN modeler that can display and add custom shapes to BPMN 2.0 diagrams. +This example creates a custom BPMN modeler that can display and add custom shapes and connections to BPMN 2.0 diagrams. -The renderer ships with custom rules that define which modeling operations are possible on the custom elements. -It can import custom shapes from a [JSON](http://json.org/) descriptor and updates their properties during modeling. +The renderer ships with custom rules that define which modeling operations are possible on custom shapes and connections. +It can import custom shapes and connections from a [JSON](http://json.org/) descriptor and updates their properties during modeling. -![demo application screenshot](https://raw.githubusercontent.com/bpmn-io/bpmn-js-examples/master/custom-elements/docs/screenshot.png "bpmn-js custom elements example") +![demo application screenshot](docs/screenshot.png "bpmn-js custom elements example") ## Usage Summary -The example provides a [custom modeler](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/index.js). After instantiation, the modeler allows you to set and get custom shapes. +The example provides a [custom modeler](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/index.js). After instantiation, the modeler allows you to add and get custom shapes and connections. ```javascript -// set custom elements +// add custom elements var customElements = [ - { type: 'custom:circle', x: 100, y: 300 } + { + "type":"custom:triangle", + "id":"CustomTriangle_1", + "x":300, + "y":300 + }, + { + "type":"custom:connection", + "id":"CustomConnection_1", + "source":"CustomTriangle_1", + "target":"Task_1", + "waypoints":[ + // ... + ] + } ]; -customModeler.setCustomElements(customElements); +customModeler.addCustomElements(customElements); // get them after modeling @@ -35,6 +49,7 @@ customModeler.getCustomElements(); // all currently existing custom elements The modeler ships with a [module](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/custom/index.js) that provides the following [bpmn-js](https://github.com/bpmn-io/bpmn-js) extensions: * [`CustomPalette`](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/custom/CustomPalette.js): A custom palette that allows you to create custom elements +* [`CustomContextPadProvider`](app/custom-modeler/custom/CustomContextPadProvider.js): A custom context pad that allows you to connect custom elements to BPMN elements * [`CustomElementFactory`](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/custom/CustomElementFactory.js): A factory that knows about how to create BPMN and custom shapes * [`CustomRenderer`](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/custom/CustomRenderer.js): A renderer that knows how to draw custom elements * [`CustomRules`](https://github.com/bpmn-io/bpmn-js-examples/blob/master/custom-elements/app/custom-modeler/custom/CustomRules.js): A rule provider that defines the allowed interaction with custom elements @@ -47,10 +62,19 @@ Fetch dependencies: ``` npm install +``` +Build example: +``` grunt auto-build ``` +Run tests: + +``` +grunt auto-test +``` + ## License MIT diff --git a/custom-elements/app/app.js b/custom-elements/app/app.js index d0969f7a..df28519d 100644 --- a/custom-elements/app/app.js +++ b/custom-elements/app/app.js @@ -21,9 +21,9 @@ modeler.importXML(pizzaDiagram, function(err) { modeler.get('canvas').zoom('fit-viewport'); - modeler.setCustomElements(customElements); + modeler.addCustomElements(customElements); }); // expose bpmnjs to window for debugging purposes -window.bpmnjs = modeler; \ No newline at end of file +window.bpmnjs = modeler; diff --git a/custom-elements/app/custom-elements.json b/custom-elements/app/custom-elements.json index 4d13b96f..f04d96cf 100644 --- a/custom-elements/app/custom-elements.json +++ b/custom-elements/app/custom-elements.json @@ -1,12 +1,109 @@ [ - { - "type": "custom:triangle", - "x": 300, - "y": 300 - }, - { - "type": "custom:circle", - "x": 500, - "y": 400 - } + { + "type":"custom:circle", + "id":"CustomCircle_1", + "x":806, + "y":210 + }, + { + "type":"custom:triangle", + "id":"CustomTriangle_1", + "x":300, + "y":300 + }, + { + "type":"custom:connection", + "id":"CustomConnection_2", + "waypoints":[ + { + "original":{ + "x":320, + "y":320 + }, + "x":330, + "y":320 + }, + { + "x":469, + "y":320 + }, + { + "x":469, + "y":225 + }, + { + "original":{ + "x":559, + "y":200 + }, + "x":517, + "y":212 + } + ], + "source":"CustomTriangle_1", + "target":"Task_2" + }, + { + "type":"custom:connection", + "id":"CustomConnection_1", + "source":"CustomTriangle_1", + "target":"Task_1", + "waypoints":[ + { + "original":{ + "x":319, + "y":302 + }, + "x":319, + "y":302 + }, + { + "x":319, + "y":200 + }, + { + "x":309, + "y":200 + }, + { + "original":{ + "x":309, + "y":145 + }, + "x":309, + "y":145 + } + ] + }, + { + "type":"custom:connection", + "waypoints":[ + { + "original":{ + "x":876, + "y":280 + }, + "x":946, + "y":280 + }, + { + "x":1028, + "y":280 + }, + { + "x":1028, + "y":111 + }, + { + "original":{ + "x":876, + "y":111 + }, + "x":917, + "y":111 + } + ], + "source":"CustomCircle_1", + "target":"Task_3" + } ] diff --git a/custom-elements/app/custom-modeler/custom/CustomContextPadProvider.js b/custom-elements/app/custom-modeler/custom/CustomContextPadProvider.js new file mode 100644 index 00000000..9675b2b0 --- /dev/null +++ b/custom-elements/app/custom-modeler/custom/CustomContextPadProvider.js @@ -0,0 +1,61 @@ +'use strict'; + +var inherits = require('inherits'); + +var ContextPadProvider = require('bpmn-js/lib/features/context-pad/ContextPadProvider'); + +var isAny = require('bpmn-js/lib/features/modeling/util/ModelingUtil').isAny; + +var assign = require('lodash/object/assign'), + bind = require('lodash/function/bind'); + +function CustomContextPadProvider(contextPad, modeling, elementFactory, connect, + create, popupMenu, canvas, rules, translate) { + + ContextPadProvider.call(this, contextPad, modeling, elementFactory, connect, create, + popupMenu, canvas, rules, translate); + + var cached = bind(this.getContextPadEntries, this); + + this.getContextPadEntries = function(element) { + var actions = cached(element); + + var businessObject = element.businessObject; + + function startConnect(event, element, autoActivate) { + connect.start(event, element, autoActivate); + } + + if (isAny(businessObject, [ 'custom:triangle', 'custom:circle'])) { + assign(actions, { + 'connect': { + group: 'connect', + className: 'bpmn-icon-connection-multi', + title: translate('Connect using custom connection'), + action: { + click: startConnect, + dragstart: startConnect + } + } + }); + } + + return actions; + }; +} + +inherits(CustomContextPadProvider, ContextPadProvider); + +CustomContextPadProvider.$inject = [ + 'contextPad', + 'modeling', + 'elementFactory', + 'connect', + 'create', + 'popupMenu', + 'canvas', + 'rules', + 'translate' +]; + +module.exports = CustomContextPadProvider; \ No newline at end of file diff --git a/custom-elements/app/custom-modeler/custom/CustomElementFactory.js b/custom-elements/app/custom-modeler/custom/CustomElementFactory.js index 33e3773a..51bd3356 100644 --- a/custom-elements/app/custom-modeler/custom/CustomElementFactory.js +++ b/custom-elements/app/custom-modeler/custom/CustomElementFactory.js @@ -24,23 +24,32 @@ function CustomElementFactory(bpmnFactory, moddle) { * @return {djs.model.Base} */ this.create = function(elementType, attrs) { - var type = attrs.type, - size; + var type = attrs.type; if (elementType === 'label') { return self.baseCreate(elementType, assign({ type: 'label' }, LabelUtil.DEFAULT_LABEL_SIZE, attrs)); } + // add type to businessObject if custom if (/^custom\:/.test(type)) { if (!attrs.businessObject) { attrs.businessObject = { - type: type + type: type, }; + + if(attrs.id) { + assign(attrs.businessObject, { + id: attrs.id + }); + } } - size = self._getCustomElementSize(type); + // add width and height if shape + if (!/\:connection$/.test(type)) { + assign(attrs, self._getCustomElementSize(type)); + } - return self.baseCreate(elementType, assign(attrs, size)); + return self.baseCreate(elementType, attrs); } return self.createBpmnElement(elementType, attrs); diff --git a/custom-elements/app/custom-modeler/custom/CustomRenderer.js b/custom-elements/app/custom-modeler/custom/CustomRenderer.js index 86cf7e5e..a3d2d010 100644 --- a/custom-elements/app/custom-modeler/custom/CustomRenderer.js +++ b/custom-elements/app/custom-modeler/custom/CustomRenderer.js @@ -4,7 +4,8 @@ var inherits = require('inherits'); var BaseRenderer = require('diagram-js/lib/draw/BaseRenderer'); -var componentsToPath = require('diagram-js/lib/util/RenderUtil').componentsToPath; +var componentsToPath = require('diagram-js/lib/util/RenderUtil').componentsToPath, + createLine = require('diagram-js/lib/util/RenderUtil').createLine; /** @@ -14,24 +15,12 @@ function CustomRenderer(eventBus, styles) { BaseRenderer.call(this, eventBus, 2000); - this._styles = styles; - - var self = this; - var computeStyle = styles.computeStyle; - this.handlers = { - 'custom:triangle': function(p, element) { - return self.drawTriangle(p, element.width); - }, - 'custom:circle': function(p, element, attrs) { - return self.drawCircle(p, element.width, element.height, attrs); - } - }; - - this.drawTriangle = function(p, side, attrs) { + this.drawTriangle = function(p, side) { var halfSide = side / 2, - points; + points, + attrs; points = [ halfSide, 0, side, side, 0, side ]; @@ -60,11 +49,11 @@ function CustomRenderer(eventBus, styles) { return componentsToPath(trianglePath); }; - this.drawCircle = function(p, width, height, attrs) { + this.drawCircle = function(p, width, height) { var cx = width / 2, cy = height / 2; - attrs = computeStyle(attrs, { + var attrs = computeStyle(attrs, { stroke: '#4488aa', strokeWidth: 4, fill: 'white' @@ -89,6 +78,32 @@ function CustomRenderer(eventBus, styles) { return componentsToPath(circlePath); }; + this.drawCustomConnection = function(p, element) { + var attrs = computeStyle(attrs, { + stroke: '#ff471a', + strokeWidth: 2 + }); + + return createLine(element.waypoints, attrs).appendTo(p); + }; + + this.getCustomConnectionPath = function(connection) { + var waypoints = connection.waypoints.map(function(p) { + return p.original || p; + }); + + var connectionPath = [ + ['M', waypoints[0].x, waypoints[0].y] + ]; + + waypoints.forEach(function(waypoint, index) { + if (index !== 0) { + connectionPath.push(['L', waypoint.x, waypoint.y]); + } + }); + + return componentsToPath(connectionPath); + }; } inherits(CustomRenderer, BaseRenderer); @@ -102,29 +117,45 @@ CustomRenderer.prototype.canRender = function(element) { return /^custom\:/.test(element.type); }; -CustomRenderer.prototype.drawShape = function(visuals, element) { +CustomRenderer.prototype.drawShape = function(p, element) { var type = element.type; - var h = this.handlers[type]; - /* jshint -W040 */ - return h(visuals, element); + if (type === 'custom:triangle') { + return this.drawTriangle(p, element.width); + } + + if (type === 'custom:circle') { + return this.drawCircle(p, element.width, element.height); + } +}; + +CustomRenderer.prototype.getShapePath = function(shape) { + var type = shape.type; + + if (type === 'custom:triangle') { + return this.getTrianglePath(shape); + } + + if (type === 'custom:circle') { + return this.getCirclePath(shape); + } }; -CustomRenderer.prototype.drawConnection = function(visuals, element) { +CustomRenderer.prototype.drawConnection = function(p, element) { + var type = element.type; - var h = this.handlers[type]; - /* jshint -W040 */ - return h(visuals, element); + if (type === 'custom:connection') { + return this.drawCustomConnection(p, element); + } }; -CustomRenderer.prototype.getShapePath = function(element) { - var type = element.type.replace(/^custom\:/, ''); - var shapes = { - triangle: this.getTrianglePath, - circle: this.getCirclePath - }; +CustomRenderer.prototype.getConnectionPath = function(connection) { + + var type = connection.type; - return shapes[type](element); + if (type === 'custom:connection') { + return this.getCustomConnectionPath(connection); + } }; diff --git a/custom-elements/app/custom-modeler/custom/CustomRules.js b/custom-elements/app/custom-modeler/custom/CustomRules.js index f3f26b40..f994f1c5 100644 --- a/custom-elements/app/custom-modeler/custom/CustomRules.js +++ b/custom-elements/app/custom-modeler/custom/CustomRules.js @@ -44,6 +44,31 @@ CustomRules.prototype.init = function() { return is(target, 'bpmn:Process') || is(target, 'bpmn:Participant') || is(target, 'bpmn:Collaboration'); } + /** + * Can source and target be connected? + */ + function canConnect(source, target) { + + // only judge about custom elements + if (!isCustom(source) && !isCustom(target)) { + return; + } + + // allow connection between custom shape and task + if (isCustom(source)) { + if (is(target, 'bpmn:Task')) { + return {type: 'custom:connection'}; + } else { + return false; + } + } else if (isCustom(target)) { + if (is(source, 'bpmn:Task')) { + return {type: 'custom:connection'}; + } else { + return false; + } + } + } this.addRule('elements.move', HIGH_PRIORITY, function(context) { @@ -87,4 +112,27 @@ CustomRules.prototype.init = function() { } }); + this.addRule('connection.create', HIGH_PRIORITY, function(context) { + var source = context.source, + target = context.target; + + return canConnect(source, target); + }); + + this.addRule('connection.reconnectStart', HIGH_PRIORITY, function(context) { + var connection = context.connection, + source = context.hover || context.source, + target = connection.target; + + return canConnect(source, target, connection); + }); + + this.addRule('connection.reconnectEnd', HIGH_PRIORITY, function(context) { + var connection = context.connection, + source = connection.source, + target = context.hover || context.target; + + return canConnect(source, target, connection); + }); + }; diff --git a/custom-elements/app/custom-modeler/custom/CustomUpdater.js b/custom-elements/app/custom-modeler/custom/CustomUpdater.js index aa297c67..6238f857 100644 --- a/custom-elements/app/custom-modeler/custom/CustomUpdater.js +++ b/custom-elements/app/custom-modeler/custom/CustomUpdater.js @@ -10,21 +10,6 @@ var CommandInterceptor = require('diagram-js/lib/command/CommandInterceptor'); var Collections = require('diagram-js/lib/util/Collections'); -function isCustom(element) { - return element && /custom\:/.test(element.type); -} - -function ifCustomElement(fn) { - return function(event) { - var context = event.context, - element = context.shape || context.connection; - - if (isCustom(element)) { - fn(event); - } - }; -} - /** * A handler responsible for updating the custom element's businessObject * once changes on the diagram happen. @@ -38,7 +23,7 @@ function CustomUpdater(eventBus, bpmnjs) { shape = context.shape, businessObject = shape.businessObject; - if (!isCustom(shape, 'custom:triangle')) { + if (!isCustom(shape)) { return; } @@ -57,6 +42,39 @@ function CustomUpdater(eventBus, bpmnjs) { assign(businessObject, pick(shape, [ 'x', 'y' ])); } + function updateCustomConnection(e) { + + var context = e.context, + connection = context.connection, + source = connection.source, + target = connection.target, + businessObject = connection.businessObject; + + var parent = connection.parent; + + var customElements = bpmnjs._customElements; + + // make sure element is added / removed from bpmnjs.customElements + if (!parent) { + Collections.remove(customElements, businessObject); + } else { + Collections.add(customElements, businessObject); + } + + // update waypoints + assign(businessObject, { + waypoints: copyWaypoints(connection) + }); + + if (source && target) { + assign(businessObject, { + source: source.id, + target: target.id + }); + } + + } + this.executed([ 'shape.create', 'shape.move', @@ -69,6 +87,26 @@ function CustomUpdater(eventBus, bpmnjs) { 'shape.delete' ], ifCustomElement(updateCustomElement)); + this.executed([ + 'connection.create', + 'connection.reconnectStart', + 'connection.reconnectEnd', + 'connection.updateWaypoints', + 'connection.delete', + 'connection.layout', + 'connection.move' + ], ifCustomElement(updateCustomConnection)); + + this.reverted([ + 'connection.create', + 'connection.reconnectStart', + 'connection.reconnectEnd', + 'connection.updateWaypoints', + 'connection.delete', + 'connection.layout', + 'connection.move' + ], ifCustomElement(updateCustomConnection)); + } inherits(CustomUpdater, CommandInterceptor); @@ -76,3 +114,27 @@ inherits(CustomUpdater, CommandInterceptor); module.exports = CustomUpdater; CustomUpdater.$inject = [ 'eventBus', 'bpmnjs' ]; + + +/////// helpers /////////////////////////////////// + +function copyWaypoints(connection) { + return connection.waypoints.map(function(p) { + return { x: p.x, y: p.y }; + }); +} + +function isCustom(element) { + return element && /custom\:/.test(element.type); +} + +function ifCustomElement(fn) { + return function(event) { + var context = event.context, + element = context.shape || context.connection; + + if (isCustom(element)) { + fn(event); + } + }; +} \ No newline at end of file diff --git a/custom-elements/app/custom-modeler/custom/index.js b/custom-elements/app/custom-modeler/custom/index.js index 729635f2..d11670e6 100644 --- a/custom-elements/app/custom-modeler/custom/index.js +++ b/custom-elements/app/custom-modeler/custom/index.js @@ -1,8 +1,9 @@ module.exports = { - __init__: [ 'customRenderer', 'paletteProvider', 'customRules', 'customUpdater' ], + __init__: [ 'customRenderer', 'paletteProvider', 'customRules', 'customUpdater', 'contextPadProvider' ], elementFactory: [ 'type', require('./CustomElementFactory') ], customRenderer: [ 'type', require('./CustomRenderer') ], paletteProvider: [ 'type', require('./CustomPalette') ], customRules: [ 'type', require('./CustomRules') ], - customUpdater: [ 'type', require('./CustomUpdater') ] + customUpdater: [ 'type', require('./CustomUpdater') ], + contextPadProvider: [ 'type', require('./CustomContextPadProvider') ] }; diff --git a/custom-elements/app/custom-modeler/index.js b/custom-elements/app/custom-modeler/index.js index 58c4ebb3..cbda9237 100644 --- a/custom-elements/app/custom-modeler/index.js +++ b/custom-elements/app/custom-modeler/index.js @@ -2,12 +2,15 @@ var Modeler = require('bpmn-js/lib/Modeler'); -var assign = require('lodash/object/assign'); +var assign = require('lodash/object/assign'), + isArray = require('lodash/lang/isArray'); var inherits = require('inherits'); function CustomModeler(options) { Modeler.call(this, options); + + this._customElements = []; } inherits(CustomModeler, Modeler); @@ -24,32 +27,68 @@ CustomModeler.prototype._modules = [].concat( * * @param {Object} customElement */ -CustomModeler.prototype.addCustomElement = function(customElement) { +CustomModeler.prototype._addCustomShape = function(customElement) { + + this._customElements.push(customElement); var canvas = this.get('canvas'), elementFactory = this.get('elementFactory'); - var customShapeAttrs = assign({ businessObject: customElement }, customElement); + var customAttrs = assign({ businessObject: customElement }, customElement); - var customShape = elementFactory.create('shape', customShapeAttrs); + var customShape = elementFactory.create('shape', customAttrs); + + return canvas.addShape(customShape); + +}; + +CustomModeler.prototype._addCustomConnection = function(customElement) { + + this._customElements.push(customElement); + + var canvas = this.get('canvas'), + elementFactory = this.get('elementFactory'), + elementRegistry = this.get('elementRegistry'); + + var customAttrs = assign({ businessObject: customElement }, customElement); + + var connection = elementFactory.create('connection', assign(customAttrs, { + source: elementRegistry.get(customElement.source), + target: elementRegistry.get(customElement.target) + }), + elementRegistry.get(customElement.source).parent); + + return canvas.addConnection(connection); - canvas.addShape(customShape); }; /** - * Add a number of custom elements to the underlying diagram. + * Add a number of custom elements and connections to the underlying diagram. * * @param {Array} customElements */ -CustomModeler.prototype.setCustomElements = function(customElements) { +CustomModeler.prototype.addCustomElements = function(customElements) { - if (!this.diagram) { - throw new Error('load a diagram first'); + if (!isArray(customElements)) { + throw new Error('argument must be an array'); } - this._customElements = customElements; + var shapes = [], + connections = []; + + customElements.forEach(function(customElement) { + if (isCustomConnection(customElement)) { + connections.push(customElement); + } else { + shapes.push(customElement); + } + }); + + // add shapes before connections so that connections + // can already rely on the shapes being part of the diagram + shapes.forEach(this._addCustomShape, this); - customElements.forEach(this.addCustomElement.bind(this)); + connections.forEach(this._addCustomConnection, this); }; /** @@ -62,3 +101,9 @@ CustomModeler.prototype.getCustomElements = function() { }; module.exports = CustomModeler; + + + +function isCustomConnection(element) { + return element.type === 'custom:connection'; +} diff --git a/custom-elements/docs/screenshot.png b/custom-elements/docs/screenshot.png index 080dcb09150fa22e34ee27c2695c040f3617ffda..c7274a9dbab2d02c9699334e869afd766e9512b9 100644 GIT binary patch literal 68498 zcmcG$gmPVvoTDrTtf9E=%neX!t zJa=YZgV%e{`<#9D*?X_G*CAZ_wJZiI2`U5v!H|0?^#%fg_kciPN01T0JBObMyTShu zjTB_1Adk?0vYQJ&fp<{sUurr*AZU2d|6m}g=|td7qz`h6(nw1PgvfYLZ)FmR!CT~( zsu~|8?QCpJZ9jlNLLickriLF(O{iQgKUh%7$|)+Fu$v-5AXE@JDREV|KYR0@UZm?8 zqBpVWK?1>4rYO>95cO>Q0&E3(9Vvg0Irh$k$n|{$r zRy~iWBvw3mKSWNwTZT`k(L0`rN&WAo$q}077xvG~!tAqPN=gd)zkkP5W6d`kv`Oxo z9okM#^Uo`HJUps7ihqmSl?E*(Vi@OtuR#}M1jhjZg-RI8S&a-%h8w57v+oOd|NGm~ zis`mNjl=F#+k5Y7F{LI^>DS!ofiM*Rj)@XMxD=lLgrkC6tAfFBtW*jny=Q62Vhq)#Qq6B(Vl(T|8iaCq4kyyCLL6ICgNzr$pV>cwTz{yR<_4Y%vSV|NRUsGycT!;a@F z?|g(!CITeO=jPjaxginCqiIFx{}#*m-Az0*Jv}|>5w_xiyjXK8EGiSc(-W1UBzphh zmz9Nug;WKD%3Jn-2cKcqdlE}Lp2BU8>FDVA@zW=`j%T?6f@U&GCT2=atXZ6Cw$g~U zF)wx)4{-kd4pX)Ft;^cln!!-|a}^G5_b&81h;eKK0l}7B!l1F)0rtPk8z&(mst6Et z+8pYf`{86rgt#$~f_MI$`_#O;BvXakgC@<0b42og8^d#cb9-9~QL?7&iBoJExQd$j z!jf6) z2(~!&`&PI! z7+F~Q>(Avq$4cAV#nCY^20xPv&JPZ63}Z0q(WilqHdo&Q~sTFFfs9#`$ZuC z_dH)L$WmR}g2a^=L3CHV_;J}iG zCfD+4)Q7y){c+fB!*_A1iwf99K9HDj%l*r(DR>wW@BUYt!==C$^0`^C36>X+_g~>4 zM+3KZ&x)a*&4^*9n$6&qjm2T($#AgfGjS?=U;~Ebxv^-Csb!mogm7D@OhBVcf(JMA z$mvqoBEwx;gB44tHrN7rTJE&&XXucD9q3t*4<*L?Ym;$ZZQ1)*_u9h_u^`NU6*u9- zvgRWSX)l3B^<19Moc@`ijgQYZ%w5h7#b+le4xGW;_}o?Q21FGw6*Jb5&;LB}JvYr? zi&9>Ar;nTaPMmU~eFigO!cQ4ACPO)b7^p*YfC`C;ceeTA5+t>o)9a?CJvMHSW-m{B$*p9zB_{d-6z#BZ7DT(p_KGwJMpP^SX?G~5B z;k)Dh#*kiUST_3SiSJFFvp3@olE2#>Ed_0OTh0nzW!oXeLZE|jsq@8#YYIa>{@bS- z|4i_drt19+Iq&XrkB1&wkWeimq7wfbYRAMTd$T>dHS5f^u(39G_mhnfD%cl#rWtDr zysE$c{DzhVPFOd~I;J^6`r<0b`yUUY}lf0Ihp(!|@E5ft!S zwDn*yU2L^Gq6%Q@c>;VO^&5TK|BaTC#>R5<^0I%L-|gAgemAH!F9?S_3HKR}dZ=<| ziq{@j__DvGBWE9-6py(73|BWBlKOm_dF%T?aAhILzh|Oz3AYr|SWgb@X7;_LXA6aL zt3zRSL9V|N>dzDeU@KOirC3w!3ZlbFb`{J)ok;3a0s*lwmhGMQpQNt`emOyw%{e?eVw5pz>!SqF4Ulpbnt*# z2M2u6)JH~XieWbU;7{tL>169USu8rREPQ?u`10Q0gJyBUB{Fhqe@XefW#Hc(LITc9 z_KDn*1t+Ernt^!SK~S-r{S%0FE0URH`dGAS`h*MkvC$Xi|8}vrclxh`@+hs^Z{8we zt;}F8tl>yVN#Rqg%?Qz(okKH^;_EJ#t|ogu_ROX;z5{SJbJ1~t!4*awX{tPIUsQ#W zW&>kU7?)Kw|*$x1kMA&VQ!4LIh3gxtw1c{%`6=|Gvla-!#Gvv!UTbCh_1uH|>h` zhn{Z|wTAyZfJF3fL}tv{?)&cnUjGahl>dK&9se`fO6va&7T+xfJ=>kU^ZzaC>Ho&3 zep~sU+hf8(4;qg|zRBt5{{;=Qe;z3h4LY?^TKxZ5B--}i)vfp~CZ^HpP)nhuLQLK2 z=j+q@I$+&+1JhHJLh}V*xW((=*U-HcjD%W6W)jK6W$(G)NT{Lp)zabCLao*K@RRf= zB0{fYw4=<8Unt!^F`ilAlQEvdES=4piH?#`^Y@}s`ii`r$^h%jX!@6PixBU2o!Fzrv$JWrdqmwtHKDq zo9xUT;n8b@sa{&6D_=KZf=5x($%z|Z+P|o1#MxWj7Ad(OA+{S%99vmM1$>)QGimhC zA5_J$Y{tIo(on|(dx#Epkfmlz_o{#Qs<@>kla~mkl08i>Yu@e)5>nC}MpPcfz4jLNzt>eNJX%STI{=W@e(R9AYLAOwwE~mNN_VJ0AiAX&*L( z2T?AWvbw)@&pMpl{SY{JYvdh%2n_vhX-?Tt>k~B+x?Fgz_t38n3{G3}a3DP?BsKHp z`*$3FF)HTzx2mc@FX(=>;`q~J&cwhzvg1i;}X?@`;FQh4Qt0!^UR-l0hRO>IK*Uy zrKQ2cn`!4YxDmNjMCiFceh_zdc4AB8)YQ}vYqzQ5BP1p!fsdlTs1Z7ey*LJ9c6WOJ~jfP zxWoWyX=!A5SWOk2Bzd!oYQ_lghmWSjyOX8HE?9#^nw(8Hln<2z7#y}ys3%_c{S3zQ zgNtqF`kF7w%-(emWQFdwR^sp4J|H#~JTKk8#lp;8?u@?bpi2wF`Kq9)No=ASGP^Hh zZq5Mf53zeq^tuxRF;Jt`M|jVrQSI%gZ^2Q(s1~Uqi7f9V)YPuLS~RnoSL_9rPOr0z znAOX4P;{qMz*LLh4upqs=~7|)(aBZJ?pxT|h0@8fCL7d0cLW>Y=_z<}azfS5#mvGo zR_mpiL>)o%L048%5)NNFBLp=>*s9?i~0go$wacS zQuEtw>$LYrxuZ3+0pbG_v(CitShg37r{m$_frx3Lb%Cl#NLpoNdK$TL9#e6Q=w+BB zHhf_bYTYb`W>Q|NRY63`JqBcde;->qPLSrcrlbnKs;a8S;B1&#KosWL-n0|sQt1Bu zc=e9Lu#DyMx3{%Xzkj|}@!p=9^sFMDY7w}H;F!WHjwyp}h5%=tqcWar8njW>)J##S z;qe!PfM`)z7=}>J8I~LN`}do|qSWs*no?3#i7Cz~=;pB%ziF-=<%$Hq@%4)U7cn`q zL64`?B!0Jz{1fM^mJE_drrZ5|;f7Y-6T&ZFurd^egq|{2nLoCRmslQdjEWQYS{v(X zYxlp(q`UGGNk~eP7^{v#jhdL40G8p_Nd98*3@kjRq2Wco8Xk`6G#pnTO7E$g5Y)ZP zcGZ1lzGX8;O#Bi}>`!5$3A8s0W>(?rpB7UZUKDAkd~6u>cs%FG68f4V^j#iJDSD@B zGuC%LB(v4~Cv6bd>v!)6A~;E~13YnSYs)}0&=ey# zp{GY|I7S$0q}e9Ey~H>MeaaRZ-~}(pmQ*B&JDRpDdMB?0$YP?3a>56; za*hdG-pm&OSoTzQ%Gn|nv2J!SnzP+gtEi8DqdDF*df*R-)OI`o2+-Jf*|M(xYPQli znV^wfD&+%S?pliC7p|O;E>@vuELKL{!q9Y=;(u8c&dqJ}X5uhCh3%L3C(YYnMqMth zk<*)7-@1oG;lY$7Yl<<>(@p8~3A`WdAU}GW$r~mH%Yy7oBmXrD9h#l0%(M^Qiez1^ z%d&Gj>VkYnpI2Fl3!>0J*j1&^L?_!^|Cjv^#D3@aqPkpikIQ%pWJ`-Ca0YSE5p#-| z1OFDe30wee%rrSEjo%JaHd5{H+JnfRR|X3IQMb?H6yPX;B^&%DYrejEonO8L(kA*kM)` z?Z&2A32$m@YGG@;!I;lIH}^`vo!k@ii*T{|*pLVXv8LGHObG*-v*izsrOS=N<>)cy z3KR~Y(rC}TxNyZv z2O5GkG?3E+RdtRDk`wS2~t)|B#jEoAG8psz~lA|tDKD?7o>`y zK}ADz=pr^>YPmh=*ceQ6Xh$GiI_c*KE!%b5$_cf9xZX70{{6MEu&^!7uB8`4R_ZN1 z5xP-t{8Mac2MOXA5xLo5c#u3;0|%ZFCyzP}+_|e9^6&3;RDOz4*nRQK?Ce(=-q++@ z#=_#_z+A>jp2m3*nv;^EqVsrYqRFnUeG))rPm8PahYoLzld~$6QLt3E@d=j56%~cY z7WJI_W`@A|_*+@8jXsw0>W9b6)<^Q@=4OqW_XO*|t$ zi0SE3NT~!-A)|1JnK9?m$*C6<__R`jthL%jms?HHFhDh|B1;||P0BCByZspuZ#wLR zsHmtF)-zn`z=FVwO~YGSMCR-}Fa++;#*SMbZ(AXL_qUg;`*n*kFNQaVG9sTUBx!73 zC%2qE_1d@6@0e=2;JrIZZVl>QZC{NQjRBRJLmuvE{Z>QF%F0ST8xim(FsH>sC4tsl zM&JwW2H4)--n1=sIXQ;o*Gz&YCfS=T1-|X5XF($9#*6Lk)ut1Bf&yXCqwSot-Rw8B z@A5J}VH}}*-BBE08Z6b|S(q4=A25%a+Vv7}I0DkOI8$Q4GV(xaJf9bR{r$`K0wtk8 zH?w>x9$g|T#vu?3svz5YI{Z4;oO7Q4Y;3vu7flSrTn*NbXMlsK=L zXgrG3iE+rHhGPy;6BpQddgbOZijG6P=Dr+ESYgzOn*QOpoEva>SuYoGIQ4ISC)*G5 zPHBu$_*@x!ofqqO=EaIc%-XePv{U4wkByGP$i-JU@2W%E7MeXBIxzT`s>fb;pm8)| zyJp_qdFgoW*GziK#oJ%Zn6DmpQ+B7AXNJGi_a>;Db40V|BeiYVrnfbrkuPe(Azk}c zSV&Zb@=gdd6fT~wee)FjD{Xq2keK+L_+3(e&+>$lz=e~FVm>JH48b-haJVkEi&wkY zRxWS|S~~oZy`$0aPl-5B7@ly$;4}MbSS~W!B-ELt#%V1OZ8hRE*CsG${Kc<>vh;cf#P+) zs~^f3pTJb!q9k+Jnx+s-$jAh;W4H3PgbZ~ItM z??YD=TKVpEewl^|BB;~@ucT*Zne;a}{w#Dog!#Q`s0?Ggft{R~Fcp5LsHRv;CpQ`R zi7{esBulq5XTL|bWw*y==sZ`CcSQAM#%0O`=P5g>^^jKr|2GFXo?}sNNX<90>(`{# zWw_%kFZ`Zq6_tszXgMgVq5V`@wxCa(mcH>3ci7NIzb(4E3Mg^41vOB@-S3 zo-5%D_JGiIlEhPyNX?h#{SNE*=g%LeU4`z|<0#~d!lDQ z-Hhc;6w_Cm^1d`9E%#>Q`X*WF^{s_|lOKkD+n&qq7jAc>6x!M8eHR`+KF2HPPh+7s zgk%;c4NK>d7VlL?NUw#y$urtH=IHSn1kEb{RuAyQ#q*XsBd$StpeIcAz#y^_sZN}d zB(~3O+LlYm#aH6%)XQ_ z%clJlEG@SakPHDdq?3zCot&QTIgw3DP3vWGwQ_)wpbRNxP2=64znW8Va_CJdc(v{L zaFkrC;tfkK>`P(G#=bNfXJ#g)h2NQQCI{jnHZr`ju5L7_2deApobur86JJ`4?ck`- zjyy?Fc2vYD;$tj4-k_N)UWz8vR;e%ib90BXpf`?|HJG)$KMs zz!#|*7?6Cy8Ri5iBIj_hx3?V{iolMLEnW|~RyeH6%=z5zGcqx?hhUJ}g95;Q6)#SD zjE9GxUsf>^qvzH7sm3#+>JY;zXYzPD&MF2p(+}C3fX%45X(WVV?V12#faZSrONJI$ z_nbeXHit6k`A&KGp2eBwTP1MZ?7>csj`}w>H6`f1lv1e<(R-(sNFJr>xO{fClPZSa|Fa`dD2_ejo2Q*ApB1C)YgoG{wGO;GMXgWFiA(9BGLVVJ%c&>a$=7m$LOo zU>h`W9tCm|f=0ih2X>>x`s=2_COUt7`0S6szj{)TG*V3`So27yYBTDTCiXY{9jC9a@%A8}foVNTTl{fmk5lq!&hP7d{^~ z4=LzZ{s7U!7D=N#u}H~+d+}3H=qNF{Ev;C>7NL?;MO960d}2b8Yfvqeq=e+)vS&le zCp;`^!9$E%QnPhVjYek;>shY3`^#{Efba>IC}YYqZr8dYW(2d$4j zkTy_(c?(@F1!~mW=Qw9Dv9bpJMbJ{VEi@6Usi|SZ!+@?MXyL)>d7n?H=wk_= zVLxHj@Pj5*04INiQu-hp)Why5`QG4(JX{&G>NeopH66>y*c6LVJv%;mQ;#4rYv1bG z!NG9SpO*bv`q2|4dmkLftDfd=^;o9nebcLZRwDG6o}8Kjln;4;NYeCJ{*_qt=4KmxEA7 z2z&G#A|TAjgu0ws^hD}jqJZ!L72yHlHF7-ML&)i9S};F>?i3C(e1%DGJPM*0V)kTm z_7|IaW9trNNgO9?6rXC7n~kH%wvWcQdVM;S-e)-Y((Un2g>6rK{?!5~#G_vQLOa=8 zY^4O8m%#RyPe&KCcB^gvaP=2|ta5f=6crbjQoRQ0o=35&Occ-o85tRquF%>GP-Y5A ztnD>ZdXc`5m%d04R-Jn6!{*D(iD4oD+di3RN&={thsfE`*r=kc><234CUEcsj(_2m zwhm^AQd&)xh=YAsFVzYrU{PQCq$EOoOb&|O!lEJxXJ=lh>)mzx-XQ^Zz&=j_mBbS; zI)%vN^)M|6Z_D-@LPN|E@#D4fCHP7{Cg`zymS?%W6G8EQT-R~@Z-oQQLl%btq*^@e zj(@5^uaX%($KS#6WA6F)eUbjlZWCU9{#dOC{xlUB00i{3wCH}h@MVP)tnt9X3Y%4! zpSyBIpkC~W3WR~kM!4v`c6lXdg$#1+$Z4JKbamD6%|L#J_ty0+J1EM2Drrex9niLR z=RxptjMHZq$F%I=zqaSllHwra^tBs{ zxhw7CzN;%FwG9}iBD{W}^5{TBFU5G%8@GgWqVhG!uxH&~x-=54#en0d3{k{dpc1+` zyQ}Fwr|`00Y+1IYnn-Hu-4WRg&QQDu&%~L8_47BPPl`eZ-v!<{GNkiTL*S6*p4!i( zWB+<0MKR+bD@Drb`zqVAWONu*$k(YOZ#dd4og}blLjqlJcx{)T=)Y22w%^yw-5z_s zlWIt0jOew3;10~)uQ_jRPYh>uYMAi z?7ju?*2BXC;s>f`9z@Qc%g=zEAP~Tv1>kINH8jGK^?itwbzO*ugfDgO&I&|p9xj#w zv5aOaO`+skE~CI<)9H$jEEuMtG4wV3Lcd{Izn0}IEAp7#R#9*T6rzWLL z{X!(nQ;2?~U(&oGV=i2CsjLY1pF&HV)9w-n$Gof>#2gf^pEAfk`&?n1+Y3XEGey*M zcP0qTnXI9%3EL^pcC>Q+lya$*tg{(T3`a^(0QF_eCx-zKtM2y_I|v8Md*hLKk6KN*T0m=9{=FY&Rx3nKUf3Q*llE$-PEEsG^0Bi3XvGpGSA zgy5y+Fc?0nSSMn2L4L?jNAf)JmNs$yabaP>66Nd{%kUeQlr$R_FF*^_7n?k9aY#Z_ zYIyHN9tOJ)d^z zld8GP&>UThir7Qk+x&Mn9hmxfO_-1v+=OIUl4o6omRW<8RYz+wqAUa|B28im3CX!{ z#{2{p3u>-##31dT_e$c%K2bWC=H=0T-7F(M3U8wCL_2|q+1YUy!2R>y5PI4$6mT#kCU}?Lo`R?keNmt?h* zH+n9Dyr2WQKJsuCBZd6b%Js}NxaxTver8hSz8_ZJ7T zJ;q)QS$O$XAjK*7ttDaeNWuzdA-s?2*g4b-0z4MgnITbm>*FP7ph*8~t*G+!2Lv}I zrU^iO&(I9)v}rbEX&`dc$!$JF#;VsuBL`_Zo-PX8Sm54rjn8$?;sMxcF{)c5wxL`E_42IejQ&5T$f1+NxC0B_m% zf>`4pE{($9NZ3xjUfgWut!8c_VNv{QYXbq*X=9)rm>%jAieoaYQ$V$HdordZ+6mY+ z5znJ1@YS`oTH-0AsGl}AVGIlmAout8Ptv7$a&TH1jh;?^#_GsB?{)r(!a&8(Pw08E_q`0x^YTDZ^9TKj&?2Z<05KQEJtSZp zlAs`iLQmIp;7OG*C8na__Yv8UEAM4@Ba+$3JvyZ2s*@w;_OsjuQKqUpry6aJS^Gnn zQ0yS;XI0YDH;f=d0ofN5#~hC*tng&;-t=%z^^vMo{W+)uzq@Z{77hbaPXjYK6CuBd zk9LNX4$^e9Q%qcg0WVJE@V#yp(D^vIj9QAk7AtgeB^lm8vpcJu;Hl>d>%?n zR04`ZAo4{4_T<|IvhQ|O)UvRc)}jR!S_BCHhRJ=jPOiU#C|A9 zj%-R777;4uB{IZD`KYVu!P*Ig-KbNw(hqHF1zPN~$*Q%4)F!E`UIjuD3V*8qpvnH) zMXHvqz$3i9Zd9Mdl#*)VB=~sX+8Wt7{8SF)Y3DhyH&oaaGBroH_kb&{4dIJLzre@G zUmE0JB=Z?@X&jxH2#(}vaeL#RDK*$$!c|%4Suh(5KkXir$z z%?QeOKx)doDlaS)1AUtQbqQHnB%g=VEbUEq=CrrqX_~ZiA6#8mp~nhfO3u^%r+GS; z!Yz(3jUde}B(FYrEJ8R@~<^XVGI2CZ427;}O3?KyhT zI|D5<&?$7HSTnoAPJUZjScnXIFUBH!vIOkE_!vb9cr%xmEt<~_!{o8UZ}Nu-U@eMw zf_>xg0(c;H->#+QqEh*C>5}%g%-OdpAq9$Jk-G@+UU7@0Av&$7rN!)Ru*LhWSZvEu zV{tfnWq`~B2u_2XHZ7o?3UoYkVOit+DXLagxkvD{8A(_e2}rlXLHifcn`n(%J~|=- z)f$x5?FJ+7D^rGioMZ$y%|HAwsorf-@XHQe!fQg=P<$3(K0e4Z<7sfQIJ`pMVN5zB z8>`l$a7Kz715J`er+Xz;LlN3$FL^I|Kiz-cR3vUMxlS^5ABa(4=x-8BN=h=@Ls%$b z>hD1ku){!4>9*#Aq2LZQza#6QO-WP;zx2l;*zqrr4^cO5DX+}$zR$!tl_jk3YS+68 z*zlzELJ?sY=gG;ZfB3G#PRba|ubsOs$HC9LsbhkuBxFWLErJMPF36U&Gf*KkPsC(pM=1VpRw4@ z{5AozFYDmI$!E6^1-NK~_5cL8)oA{s^2eKUJgo=7ZAKq@Z3<4_Le-7^`VU;Sw(}9e zXoP0tKZM!Vacd}s;`y$$P2Ak-U+)m*? zrFPzEvXtID3&3X8&JU@h>$pl7KbKR_SXmSf&ADs2EJG4Fx~xiC{02~udn#WR-KLGx zq}Bmq;QL%$FmRtJcY!hx%YZt9PEKBP(;RewrMN4r564(JS5a;D_7Qa;QT$xhvgsuk)=JFJ2ry+#YIYh%ADxiW^|P>zBhVq=>2C zfEhu1ngPPVom37}20vwhu9z7bhNCx{2NIVn2An?xWOg9NkUcvSAy8G5Ha5+U7fU5V?Im)h)C6U?^XlQ*ddU=#OOr1PbU@DD39meakm2?Kj9!yY{fbYqvs&eY1cn>HHpfUJ|$f$CU zPo$RA!8OeVai}2E1GR3^M-UVfDu5Sn0ySIxVaqL)2WQo&fY{cNA|N1uZE@Qzts4PZ z&KHn)0&YiCH#avWhxf_8*MveRJ+xPobuE7v*a)`yc+P3qa4?m(9?&Dlw~LPy(AEHj z=iYa@M6~|CzN7KCN}%t(dOoEeT2$n=cfWi{95kTIaWbTZ|h~qisH4JT&nD6@35(x z51F-Xw9#2S2NqinA+;5=vMNq&cLffz3Mz}W5c=F8GE5{u^}bg(O%l(ina*SE3!~Sz zt@D&m{r3CJfKs?B1j*+)zWH>!j>(@@$!A1CMIZzd0M6pOOl=D2h5=0oqT<++OCvaY zSiue{8DQU|FH;e`p6prL*>zV9i$p50|A4oeD(loV&j_v>dV$72XD>N-?Rqd54xC80 z(PbG#ppK`>IzOpEzswypk{nJ4`HlDg)CjC6ygdTO0Vq)IYJWPJEtczQVZ z0}o0-LPgi}jjo{A3_~=ubPIY1(W^0nF{CMBGV7POIgAm!6;YaqqdXY9Q{`Fq?$m(8 zLOxkrUymj-%BVzx6Rvt$)&V0t4*PsfEc|n% zDBi&4|CLph?qz@i;br_UBzhY8a5r)uefRam`przwY(~^1Htmpr09aP-T6EBmBIUQ0 za&_eg#7$gsawwFXf#%#SAt~ZMz(|kEQg(th2M8WE;QZM12tjd>>M6Y0=t&d$Y z{aS0{7~zZQ!qYowg993`p^gIyfs>um_Z7|rNXQ}fK~}1&u_?!r1O%xP%YVAcfL{W! zbJb&^sH}_vXXN|r{zuak(~qp(V#BPt@_JYJ3@6&nM`7%R=de;W81m6bDbrR;U}u4f z?60inA2AltV>yIgk2#Zr7iggZ8P}9E2s>f9JsVnhoC=}!bg2WpXknNa)z#J6;1&Q- zqHi4>K=nl+1KZzh7f9kuLoE^cgzaahuqV`0?Lm}<66$|3UE1OueWu$AiVg^<^+!L^ z9G2Q(Kv9|pC=$EYdp_tOpue8o&_Dv>gGRMQTw>?x{h=>qLzyvX2}7X@KPygjBx^sm zG$(VF>=@70y-!#!^54cLQr)a@E-SE#mbNy~!I@}M9M8Knl1Jpes^>*8#YFTl!yvFZ z*MqNd40^%{IZ>H-614MP(hgX{gE@_m<<#g2I$~)kQ`Ly6UbPWtWN6rLHoXeaJz4@M zv;*V-LRX3^N=`)guu3Q)ehl`_5DG_c4;md#dKvNn^3^LR)I03a!-9Ib=>4{m8(`h+ z0aRW!7riAeYrfF3eMysw9ok{27S`>OS+e^AoWY&4pR31WW7V9p+eXADW`^13PkNnq zMrcFdVeKLdI&u3n4@RcY$$`y?$kkwqjDvw{HvTFEK_GF90}}H%#%VmPKp@52hVu46 zmM}Up;>VEXg-Cg!E$= zy&}H!?hkXoW21-`6zvo)8rS*(X_V#IK?r;~r5{?e8tPpoYAn7)E#1a* zGEA@q7Z0zch&fUW{!W9Vl27-qz=Ika*#JBgDveMEbHGy)iX)8(dvhA(N~bNGWC|ZB z4&W%gaQVD#=;EO)6}G{(F`^Mzze8f3*m+1cBeezG>nkgHs(QCKcsO5wTC`ID#6JVWdwKegR z$TpKWgc&J^hEn7^Ji9G95Uvn%Os_ir0B)L^LxU6udhjausJJ*^Q~TE|Qw>M=y2OS{ za;P<0;9;7P%L;AX`>2mzh)E@IeQ&1#ZFi7*(Fs7aOG^tiwmT5$BDNZaoYKR>ezS+B z8PtyCgdU13y!6kNYAK38%-bC4rlk+o_ByHwDmZoxroPp!nCYWdns^_yQ*h0XGx`b- z9Z^L^1x9xYTwO`c0dzA6EG0OS&bsC@K%S$B2K8U8qJY=ceb3Scd z-L{#YTYfev#_oFZkvf-&03Fc*U~~!7ptlMy4n>91(g>h58LN+> z9>3LUD`L*I#I^M=7s2Q5P1Ysofg@R~U7#zI!%5t4r5vt_oci_wc;w_r4v(Bg!h6u! zqtQdHPQcHldA*`69K?(xl8nJ;E^=qKGw2uc#8)JpkI+jIw}?jMu(&8-NeD~yDwFVc z91aXp0*TvG-W}Mnl}1RhR(U(FKHATb5&EPy)2j9q{TO=ZrKk#Z(WVUdWeyC5trY${A0H9OvmVI=Tc)yKAlR3d zmVynOBaC#BRuo_ zI2Ynb?P!z1n9RTA|C`|$NG0ZKJ>b(}3Pb!W-eA@gp}Zfz3|3C0Y}PBK&X&jQP`3I= zY7u~oljo4s{|p`O{;*6^y7R^OZMs7N^>`48u%BLsA5KvKa}B3_M*EdtMyDy3?xqY? z?&#MlT!vg4OX+90S3PqG&vTz^`&9BS7ddeSqDc5M&w>kd7sn%JXY3sVscWSyus(Pd{Lva`LW;w^AoZ+Bu}=Z^+QO+qid($sL6Saa5#nAKuaeMmn#kB}Iwtgs z=HSbRBmLn|w`|TWPT+C)etuMN9D9J6E(`-Y?I#>Z$AKl_kUCiS1Z`9QNG>snsemS zS4^KXOaMg$?mRYW$<{;^Kg>vIpTE^`ZqF@@j2%>u9Z_YYAyk%R{s3tp3BbMWCVIUI z(TW+b-lj%yoEvVWN(jX+vGg}XjKpPISPm))3b`di4b3jpTNA|NpoHip#7ZSPBUJ7M z_dg$^!t$$N%|-DUM>4IhhF4Dg*=&KxG?0w|RXc7q*b;c;r)j!9L&HlT<8DhqX@5b} zrvvQBL~t_7-am4Q`HOsL`tY&?RMnz%C_ffFf_4xrc1Wt#+1p{$FlwbcHSSl;3Ep-P zKBp{_K$TF=sZPw(>5;YzaQB$tJ=(xpd`m{b5o9^NU|W~g9)tq4ntt=PN}Ac-P457e zv{BgwNBTyOX+f}$mrifJc8t(3`)XO!Ah2H>L9?TtxoCBWQkGu7fM}~%;+C(h69~gZ z?z9?lZtIosjwI%qNgHLGq}&SjVpb%nSZNkF0z~1XoM#;q`Ezub{Kqx|3ZLU;p0Q_9 z!dZQ|QjmF+k(I-MU4{tpk)}(a2~`T1RaO7Kdj<;xFBB+c`8_troNKA_JpAvBwgYIz zzuzo&r#uPZZiR>Q|EiI2DCs>N91p|xHEt(2mj*<6i3tG{E&4D`Hv_ZDUl%}nCB>6^ zroOVKb$C5rBzGk^UFh@FGMgVJ+Dakf7G!&RYZk%Wc`Dl+^6T5&(0Mj9 zQGgkdGTe{C_bRfjUE9XPluCcCltaum6^ABFM@xiGLxe7Yx$Q^Gf6XDVb4tr0w(cnP zUSH&ntr?k=WQ`d|(TrJNRaQ@LoGgVRNt%UR#qlC{aGfkhtlQ=8>n`%UtI#p@Rrrec zB?;n$@?ZEYLj3LR(29g)eP%7l!`<(Y-y@B^qJB!)7XvcP?)C@_FPI%q7xY+ zypcmG`tv@Y-Hop=T05SOVq6aNLHi3K;JO0PEXjgb7k(Q+jDVd4@DoUiA0)uDQK0<(-e{d#iUV4W~+h6C-0|+O!A;xg^uSV&IJ23@+Zpl^D7* z>NrFRT=|m>aR2S-rC7z>rz?`=UBBXW*l8LWtVn)ep%kx-)Wj%Sk^8f^tAKIm1*L2h z=pL<(~q!HE!w`CTs29gs}yXNyGhpmwuCU@`Z2R>s^Pj-~g zPLfh8j$YE=0+OXJ3i_!~EK0uLfNs&_f)Md9xEcRG{lJ%Qm#(a8I5#$8z{4|Vtcssu zkiIyQa(1VGzw<6SOw#P+Mlf1d;S?Prv+$KAnvk#idLRS|Jzd#E=ub*Obp0|+-dS&K zly#Nor7bw%q>v~eybY9@8W}NwJe#w1l_{ONIp4*Ag!Hd-xg0JCm+t;vSg-|99?lP@ z?L`Y2X6SdH`$O~mkD$xI)cRPi^W!(f00`RkXg>)| zg6F`r0dzbN=6ti&`zG(h{1M#mg9}ge%RZO9tVZV5yW?129taVjO6I?`TAlAqbah~f zT7%MZ6{xAAk5?i&NXnZpQUQ~0>UGqP1l5~G1N2D@x)+=PMjDX4_|OBc8}oqeDshVm zCkD_rqSgZ|z(#yLl1Az~MSCrk(7Da$TCV^dtRfSP5Qi_uCU`7f>#9b8lo2cf%OrOf8?juKn-&0aWplO0O6K?u8f? z20lPzj=g<}EMvdXpVvB8G&H0V1aSg74N$T`|2Vr}do$M;6B*kZpc37oajh zM^!(LnEcLf$+^9j2RY{(>fR)eAVQ#ciOvsPU^ie~piAe@oxd@$oBRjqO9Au?;u5$B z-!*v!(9A#gL!?!JJpA+Ig9CU{zGWVwGH4=v&{eYf_!Znr0-*y?1l6c|5xMpn&fxam z6J+?2kr9aQ6u9^TmOMH)CzOLusW>(Qu5QW2v?Uu;w)&zS3V?YHjhb*ovWp-}D zdAh;Y&!wssTvP-~jL*(BxB&H2#3BJ{((3V-4|I{L02Y828(=s<2MTnmi;G#-iM61D zi>|u?a6um%GZY6i^ewoAZOacj>Y%F)W>n=C7FHS6y&BG(%ot&GFQ{jXKm}Mc5Hmi; znNn2g7`5aJegrolO1yD3&C+8=MT31`pzd$7%XEukO1PbVs^(}dEbL*n0_Q%7*FvW6 zN^Dp#)(39UllftB=&^25yy32XD?F(>2+leluSbQ+$-`E-me1pi>Cy4<~ z1$E#?#ACtzjP$CD-$*aEg*(v4kUdC@!{rbh5EZyTu7_Q=yA!b$I+%pRaJiat*znW) z7b>#%sPM2`ySv6zaRB>vtsVnKSYBBf`?9%-rVQ}t1oNX*IEY1Rmxy*4qtzg|=&iYe zXgz&2v%6TH=`YGP1rsXiR~Uv(hAB`&D7ZzPIyiuyYw(Q7l@7CNG5gOSt$bcQoTqZw zK_ylq>EYlYf*7EwITLpKiM7A5q(llTUR9R@m)K%rFki+8y?y=sX=w&Mz>8XW zFZF*au;AVu7Y5T7kY5hhAAT*TPlZ7jE3}x<2 z-`>Yj^sCR?b7tnj)|JvyJR$*9Ure|5QifKK4eoEwfj0qi3a8~}qMU|-p?jykwYvI4 zpX?l$>>dxCGw2J9@I)t)OC>mSiRPI(K%)^$dya%Tv+JSSJB{yH9Cr-gfe*d%O1@ z4CAjF_7F`5oneNoRId*ISOV>DJ%xYH*kX`g%>fJfG6^&Boh>ROdF=JYDoEoI^OYv%Tf^`k69mH%vX@jt~*lm^41K~{{dkaTzft8Xtu6YD(ERbGYckcguL~R_2o?X6%dC|9P9Rd|FOx+o|zR{ zS;>}+lB~>Zva+%_*(=1>FWbYM;kYq&2p4nvnuaEcpJC6Tz^d9f~R-Vte@B6y1 z>%7kMymO-aEa;N5ua)JAqO1f{(axWn4al&rYZOJ+4K1p=*HMI}HiaK<>5cQ`zFl{6 zsNdKfj?9jz<4eiR348kBQj>&Q|ATDm_H4G^e@}ju5fXnk8F&&pxf&ud_gsj0je#{v zd|mcOv|=|YiJIW|)ji%c*7Kq-Ero^>kS4GS2)t?~imuuJ#wq;6E)(Vo z4e#sxhyL*O`2|bmOzS+EW$ctY(kk1&=TX{*kH;$cyhvYqDu;C(*iy`~2yoF~x{%57 z=CJQyazWCINEYqvy!e0OKi%+-V{Ydz%+aJrSDb_N5bhO*> zZ2FAM^+}o4zJ@qIXW~#pj%qKCgu*L}nI>Gysa_}g&oedR!WxKKjhsEQ%{q=cDK)ic{>RhN3~SBu*`VudcB8EK zCwl}(d*l(FxeN8`5JJ zmnY@CcKlkBykt#PitxQy`+`0{EtiHWdKL%A(38Hw^Nz%a|GB!f+|l`>rN&W#MEHlC zeuuE^A5}G(_kj}qF+`T!6JyvY4%(sz#ue6TkLE))r|H1D0zT~D-FyauKj5hBiV<4d zerM;pUyqM(`S5ewr!Q)!x&(FQI-+cZii>$OFjFN6FIg*RO0Q0Ng=u@!)o~=lwc8_c zEIzhb26x^YaP|>k@Z~0a?!?`iaogwJy)E)Hem0XdS<>D{XKtlV{Oze1pFi4` z)cxmQk&IqfT9{Kl#L%=U&myW|o-xoa6Y8B-#V7jeml$JH>v zxr;d^|6z;3i$$lz5|Wl|wvDH6Zry4tKyU1E(_o}k(lv9AgZEdG279kLZ_w-sWQlFFjOBDt2AnlCVVQZix5n3?da z%Xl6`pxmnJa&_qxL>U4f^(rkj8>bnTv9ldxrGa50o|G+l9-^HV;Z^dZiiO5EzJxN@ zOobJ`B<-%^=P6Z|m4?DIGN)zP#fdk(L|RjmoRYF_-EC@j@z3ctr`5iXqdJ3FS-OXD z;tl9MZ*M!L^qt@Zv3Nv#H^SrI@$?kI3CdCSUZiOFwCYQ5y>jX+OoE>20Q2=^tLO{y(c%)2=X(kI6pdw~Bu%h+6W0bjlEC6vM&x9G5kxC}#$P zQ?1x%iHn^b_Tc+UN+Ep~LF|#OD@n5S#Gr#$AO-LvK0Y3;U?_r+PH5BgO}N1mK*OYo zG)tuRL~3ij5-*Nq#{^NYeS%?iQozYAade zzKY_Y$>hu9+D{(0A=r#=&*hGKZDP8G?(vMnzhMmqI4`5`Z$xD431ddc*zmfaGg+8) zLqKu40{I#6k5SnT4fMcvoRP_NfE^B6i3LM%K7A4te)}Sv-SCsUVL+pgQ5JK5WXOT3 zVrwpeXB&jiww176kAHY1H>zXt{*6OS+u!zm_f)h!Ao4Qyg`PP`Lsb>ZiE@iR+EH5} zqWe7;dK+l<2|OSlOQ4NdE6GJ87grPZ1jzOPgXt}8HZGqmL6LIPbS1H3)6dDd`T0F_tMfkEn^?) zz_1`>0F(l90 z+#I@1JU#TYYWl2kQd5G!yM(yF{#um0pjL6fz5N_6;<8%nH$HR0Xu4(G0w5f(#43D5 zy-T2E+%TH(I^0z4IdlKtrknh85pi>QYKM~t6};SXR3D$ihGJReJ@~up`<@^#a>Mu^ z6!1T2;kTMfYud3g;SNaZVV%W9hlekX!;G=8xQ=5QjxG&NJbD6_$Qu|T;%i-GkH0A7 zmc7k(f3<)tmwyI+rdK$yB_ej7P|A99H&psFjT<}s#^|$~3fW~9h@z)wS-Fmj?j3u1 zunflY_TADEm~@UzRvkYwBu6;sUMJ-|=@#gPK-;W6T2U?Cs%Wwpi2a#C0VV6h2`#4kxlfvAyGPWfA@0f$1ufGVxpkT zV6_*d(OCN&*UYk3iKwhaguy5W{3@nli`b>vcBuQ=S8o61w2@Y@x#1YMJyY6v;FW4G z?{RvW=i!Bm7%h=uY4VWq6McAZ+9Qgp{S9B@*v5A&X-5{^&C{(lMT9YsAHhtqvlrgu z8P(?(etKb>^O1VDqf6wI?g#pC%pGgSnbyLvUII`1k4;I2&5&;1To-LKAHjjG1`ThF zr-n&d)^C=<1G)6?1z`mH>>6co}zD%O_Gvbd*eZg3UH?_cdepA^ zKns1e)|ri#mR8lsD0XMDpH)KQ3Z%uO&CjLaHwS+ICVKTHcz4&OH$#kS>iGA8umeo> zp~G>WnYRXS6y0w^(f~PvqXVcfitV|6^1Q}hjFD;eg`Bn}hB(!u5fV^b+7a3X2nYYP;xKj~vT~#Iqmj#)Z${R6^lJbl5&bbTGJAS3)rHXgfCECr zL_#u2{_RTG-J|Wi2}x|5`s9QBrH`q*0v_qfvU@Dj6L!NB%BS&`De>(=p zeC)0RjPp&|=OkS8FfHnc&Ud8FgXX^`&mvX=(4-GKZazD*p_lL?2c|C6R-uNa#9G^c z8>x|_pQE}LQy+}+t>o7`|QcT9bt!Q6d*4a zy(s~0ZFixF2aP>BPzTzj&Ss@d;T91+T+>$cGlWlous~oxn{{r{z!Qo_yH*+0;A@8` zm`Y0EvqSWw?jy66-~hod~u*^c7ub8A&AZ!#k1$q;h5=a8Gv{kXRwzx`_m@Dj8^~#bSd5hR*(z;cjE8X4Q{_?rf^77alHM2wyGejwBYikb? zp(+qW5kn!pD%(~Szil#93$foOh7K2Hu|d7i#^+w``OtkV9P4Y(FrN>ywCjxqe0d?9fVYX16{ z1kI6b_YOsRbBp{-z#2oBIj^iN-)U`m>>XoBm`nzu=chYTHXSyg7P?3x z&|q7;j5Zcyiz~5j)#p~z=$3*6UcvjIr$gktynZJhh*0)?`{sGz`C;riq!uZnt{hht z+Jf=O%A6N3Ql-e8X%PBd1cZLcV*-E#TOdFX%c;dBCWib6>YJIFVIJ={Y<;HFDL0in zAxQlb(v^avcC*F$uYbY4@3Tc5tsK61w5NXE%G_EMo_Eo&R90cSsR-$tzc~-Xz@AeG z+d_9LJGCX@D#YwM;V{$wH=`|Hc7Ke$aK$hE0Zk|=qtCUZf#YPmdqhrUja;S2RMPy$ z@!2P(IAfY_9%iVI_@3tI56q-an&4;6+n3FM$jFx4Kwf9{w4Q!Kxz?8eO1W1UWI;%A zRlfN<&bN4Fxee-z;T&1@KwSu1xdHhjjNiK0SaMp&AOfEqH=m1*c0Gj#)nWDX*fUh6XJe)9i``{FIu63Qpqu%Wu( zGL5@c_TWP~X>wKwjnt$K}>`bu7b%=^hCHSHl{k`~ConNcdJsysIk7>da0*<-XS)1Uwvg|>-&Z~-# zW6wNS9j8+$Hp)1%NU9f5XCr^ZnvY{k!z)`b0HCrE=weU05lMP-CbwnY75|F)7ykE+ zK-iXu9ug=j(+(H0*ys^zPn!;q9qjT($^$a5nxMNRL~ff-qso18GRCKaoL z!P|MsSc)-oN$LtaheUE_bv5tZmO&Yts&;diH+d_x{e4!lesAeCqfw$}_cP^Bx_xGw zd-$m3QpC;U$Wf}(RkX&Xe{hUhA|+sS%UFw3!_=$(v_l46h4*vh7FF-6leToeM#RGEVLwZp9b@7`eHG2%`ax z{^0{5m~G!zQGrB{cz;R6??f0_cQ}ueX58xe?8cD}9|r3C&=5>`DV8Ufm-saF_2~y& z?(NqxhcCn#6)tg)U4Brgir*5q7})spQjk1GkmlVgwg&f1$|M#xV|UY*pTb_8`e7An zi5~*wyJhUEf?uxLoN#m*%ez@{XO~6+hmzuLW@wN7Xkx|yrpfGP|9i4U&jW2MO<|;(501SCWL5+OWw#pA9D^pr! zdI}036j&UcfsM`GmwA#hFYk254O&u zJxsa6pC>M}q%6a5)rh1{mleOPj&5e>c*dsqZv5!!oAyVT&CSO`N45z!c)}Z#zI@8= zzRB$1(b$Qmu+{$8Cb-LF`BJhMLje`*njz!KBZlC(Uo>%S{{|~f>nT5rQx&3jRi-`0 zdnn5nHY~mst10mY($_}$ZarHEN>|O@IT6LUYB}s*?0`5L9pU=`NNvpj8s)M#_FBSQ z$gI}pNG+Q&V$7CEd1~dxW!yaiFHC9N*DF{qSQ6EfZgkgGGNV)^|6#(I0~LU7i;p^{ z1#C0zGaCsXlv*?FFGNVq%uF`TK4^>S{Lny8Djhr3__UJO;ZFEFMkt~o73kmv=6U4N zA~miLQ2sHcTOgy`0x1aTbBF<3unU@id>0W))ScT5nu0UJePv~N3k!?VSWK2@ z1f7PO8i{zx4yX#q@D?&-`}Mte!qa@);B+rvWt4!;X%;CR|4h8Ur)$^fOFb%f$|lYnqD!tqBpt-_f3( zheja!lJ2;$gKbc&Kd>Jre()hdgvMVUppx6-F#v;16_6$jTd&_bePzW938h2fp0&9J zppQCzWL=bflt_X(y`PDVRmAw9A@TAP&Lxq0{FsJCriPE0v9fE~>!Sx6lBs8^X!j;U zCHhU97RCk)TGy!@YNl$B!EsgL=6u_VG$zws_bSWhzddmEwM?I8XgRh`*`^M`+}yv1<_eeKlG;A?)Q ztSsw&^3He9V<7N2h-NVN?@hW-$@%(9$f^-2e^?pQW4oi4V5n{bXh{1EE>97U0;wcu zL#IdDy-(q|1Q6^$feJ$BquH0T=7miZ&#hY&$^|=hK@lcudgw|K{uPf5A1b#~V$Rf+ zp6e6_vgRx~y<2|Rz5iY0DSd*l#XxlDC-N(jc6Jy8!wDiJ12EEq*7Q_>aXxt4LHL1c4@^NueCUgYBau4cGA0;^U`uu22l~HaQ!(vHxG`W|$;{~+ zo$%v_MnZBjjyJg+g(ArbAMN&4QiYeoja;8UJgx{G>iE+E$Pu?)a?r1#M=p@#I~o6( z$Qe_YshW~>;-C4lF@WKsDfHzdY!3h1D?kkeMBtNl zsS^xTl+^$$?%iEX@ycrhI$x)6keCcmGl>>vV;*=NXeB z2`)LkTZLbFrC~oTi0fTGA?_xEDh&t*%Z6?QIv)E6~OY z>dV*ET(8cGhPm>7x)w@4{}TD>K&I&sD#MnGs)Utp7q*6_!s+)eG9=dyPb$l9Oog=1 z;{W@|tP%*E4RD6A{IwI`EJ2)vwvWMK?3VKY;`uqQ+?9~co`(Gh_NL+Ie)cUW|39y! zZwt-o8?7`10)j(ojoi0FYCs~LVwtcjCZqGNcyW;q&R5|kX~4w1bipPDHE^DyU!%v_=JGz54G$;cL?5^<+B_zbHXL6Qa3tW2kS^NfBvyVBMyp#d%`&yf1*CE5=%(1<{gCk_! z6aRSqDh^spo@Y(Q?)|&@hkD@3wykVQ%iEvOace_5U#zSc2wvd;ns#Gw2fRpz5RDhq zRFHNcl_C?au-lqWRu>4Dhw_!$6K<$GZ2ghT%g+Zi9GW$S@86@LxQv?Uq12qsCeF^S z!jy}=vcWPlemu-E+NYe|ftMx|JXnn*NyJRjS-yEGW|R1geCnb4^%x5cqW@z;eGF?z3Ky=>DU_4a(sIO&|HT+Iuv0U}c=QH?|0-m(Sr_MAj! zO>~Z%mMoD^W+>=q7*B3ADX9!TLE2tI1@>}9Wo2wR)Z5_XOxOdZ=oVz2Z}Rdm?~Fw1 zf!lB=D39}NtC4)WD#!@bI|qX!Cwv1*yiHM%830HsFeI+^YG{waf@*P z_Z0pwJM3^C3EQ-VH|1H&#=u+5&ZLmQE48d~f4}qKuF_Q9t^7wyu9kj`_2gJM=nG(53o3573i^;;l2rnG?@M@emvUb>s>bXk?Si=lLzkE zkeT&bIF~(j24o%BDc`^ZM%)bu@Mot}=NUl+Xr^j3k&#|&AIV#%PJi~kI_X|rwLe`C zLlxDNXt^8zy2QhvRNeu+jIuJ`(UuG=rgam>m4dfRaTB?9L8R@_MeL5$Lz+Eak&?`Y z#~=6(qW*rGZW3elYJpqz0R_9(xD`l&aNTWgo-w@Lx_ z0#NLC3!wC>nwnUTlK@0VG7}GR2A^5FsTKfR0%ug9O1ns-XaulPo8TOAIr*lMJdj9n zD3=N+ww$St3q$)9`?U=vPU0)$(d?3i44(m^2s#Ltk3M)n+)klzv3d zWM6%^eB&tik_S39a=46|EMQEOpvjZ-_V(r-06eD^bZ8i;6v&kUPm714`|^s-xrN=n zob+lH-@6yS0heM>%99WDp=<8nUur)BAiB*1ZE@3!RtZUBdU_NVJ|&`y2E?9))^Uc@ zUhU5%;(y~}%@4vyeDPHzkbXAU#A6u!dK*IrYRRobsxN!9FmsBAbU zD~nO4`vEjc81bs2Ov&@DRs(lfb=0oA?~XnT$sTMm{v`dVWM{MTTA7#6$kr$F` z60(>m2((})OOFfK*Cxe?uq)@!tI_SywZ?cZ5kVzNGI$3#R>`lF1f6Jlre#0$6F1ui z>CXjxZ=B-!#dLhSsTtt_eqjdvTikMS+XOPrS-SYuy@}7l-@Rau1hDMldu0tAqt&Zn zQzK1T`w)V{^9;nMt)N?YDUOQ(6yZXgyC^0zR^m#lHQah)W7dpaG7mrAXFBP6IK%a^=|@t<~UrHv)gNwc2wB>96{u z-B}W)xa7m(U-l=xN0(c2=ScODd6%7B^kMI+OuRn2b0R_57^%}Q>nxhA8-DjC@r3HB zByAXuO7{4eN^Ql&DbXHfqFE z_S?7GVFgHhHQpLCsT5@%x8tR1!0A0E(a+@937MfQ>g|093X5&VzCnz@wW}9P7O&R|yqVt1 zxy567b>b`Zg$|*pqgWcuNqs0e2_8_0mt`0C7ruUz@ZIWo;@U`$>dr^BT1rD|V|8Qk<02GKfDZ9%&^d_xAZo=1?kU8h$k zzoyeETmHqO!trwG(CDv#u_O~QAH`qS0Ct!EYBwwLGokEajbG#apo6KMdxf%HPj&C> z^lps_CaMBPM_fm+cIi-AvZru@m!OM`S8rzbvB?jYmXBkOm8AEJ!lqvnN1ySY$jOz7 zt?^p#XM6r}FY8?n_+^i6ZBRD;plorLGLJ_W!+mV?4EwjOP;O2R`rEf}+i7=!#|&6; z%ESB=;(J#W&<7}9l8~UG^83*Zy}U<>nir?>Y>WQ!)~wsqW0GBWn7HwV7a>$Vu<}Y- zXAm5hFgdQ|{dJ9fA8o_>Mxa^k(X;2%Q=#Jbf58%3WgLjjST++~Ip z4@7GArPOC#!zbZZc@GKn%-_ESus?*9Nc-ZbDq74&L&mlGN2;oqNxLW5q5Oa@1R}%+ zGdH9);Rbq6C^^i`&B0c(bHW4bvlR%@(^uqWS+A=l4_#l0xCmu~Oc6QZ0Ephv)Py{# zWp(fOCZ7Qh6;fXUbPQ?KMLP$&$TNFhNV)`chr3DhDb%c*n(>K=@C*Q6nDXa=q4uGw z`;q?LCVOPEk#}6rksVn8=mrih`wwJpYipw`+;9}l=!UY=og)QgePA;C@ZocChHUxq zULC&Qg#UHTHo06>VId!x8>!kZzmh_fpVHc(jI4~h9(s{!P=aO6YZdfsT3A9ih_N%{ z!<~fbfegu_c}aHbLFow2@h;}kJ}?AenWXeBFe|BV|MRi3v8i9+kOC`BWZzRmKrP~L zx*sTYKkSFbuzuwym&5yaxyhs*dw>2-xKsTkkmNqY4lGP9copC{VcZ0V9FC=b(Dupo zD%)r}wm0OHl}IanG!bFePm<$dS*Z(+1<2TdH3}Yf4TgVRvEGj88Yq^IAT1)bE18g0 z;0B@!hVUxJdhvr<&d$lsV{=+lB>8ram)}zw-j3)^&hD$pT`;QlLWjTWSsQspNN2A5x z%948m1fGWz&Gl90h<9b@-)0Ay3RLB2?IbX2NlBs4Pe-0dckkGPKpt_0yvoLg$nk;0 zRX)Z~BKHD%=ghyjpU)QRMR55H--7xh*kdvsxI?Ff#aNOreH>a}~bdqBFCET7< z*jz-r5^X=K=+9DwhHdxP_Z_!%{EBRD^CjIZ%(UD~lCihUdJ=Ut(F_=?LDF0udX1= zI_Jgl7<3z;aUFja%K&_IHMIaZdoLV|1E|DQHw~fsr+QOp-H{xrV&>I&mP(;ZJ_*es z_DJzqKCaUZym#j(`Ug0tU+Lp8-3o8*Cg1!ru7{ z=KG)k<=2Grc2dV&LJ8E@go{~Z2V){*Vhm%4-W(ZIa2o_fwW1GB%jK4?+KA+kc%h=V zDRrXmjt~!8DDpa3Csb#DH0H1$vdXSy#iu*iZMq3GMCbZR;8g-!e{Js;tg^H;{N^df z!Qmo+=^^ETMFJ1j^XjrR5L6%|XEN2Xx98D*@xpP2aiLvmP5qD6U)=RUL5XX8l2;&b z<@l|~H>jfS?A?9Ib=fOn24H!#=~wjZL4?=r@fc#sM0~|#w4V9TeF(XPYSQ&E$B%05 zS`m#KJYn^)F@J{=r8W1cZ?+aZ#}%2+nt6We2g>QgQwE*(4MkbR@60gn-*Cj_s7Eo) z@AKj9)Y0r-R%>>Ok`%@w6ttiU=Eo`7H?|Ma(D09pM4xa@!={bKPJLGlrmMT%GFM)q^gIJHlby!EScr^h)MSPZG-Cba5plK(TnWo|HY5268WxI+<9cH zeY>LK*n`i*eur5zphErqmg*Mp zaLevSr>f7P2V3Mts_LsV@QOV;1x*q;c6M0KzAuSkG^OIvr3Xj&Dxn|Y8!=E| zU?bagFLzMZr&me+(FM@zHo2??l+Vq+1g5s*ovYtJar`eW5n z4$1V@(go7`U^Oxyqf_|I97m95C>P8!1&`HiS%>t;$$SxqG>KDpgw)Kwn&E=E4Me%BbKJ2RD4klzFP^1&CR9%1dRJD1K zriV{JKmf;83{J$EnDFWQwd^9A(ig-jooG%2W^ zkT#OYHxfs$sQwiYSFw~HpECwm;9G1oyB!t4I0a7owVDjSgW%w_Dy$B<0cVm2>wXRM zo`m&N$D~Gk-t}gAl83xW^E~bClxVYu4EJ?jUL~ygWUDeiKM&f=k%o+~^R&CfJrG~0 ze~|tZO0ye~8YQZ_kvVLAMI$aQHT9C58n$b1D^FJjq)Q4fOFYHE=Bl{3So(@HkY9py zUt6#*`T)=qq^k?+JL02sMlm;ARpy>P@kIzzAGx}Qy(KP>)=t{{&9c(o$$a$9wG}dQ{-@JuD7AD6r(j6r zU5m`+VCnNX(NXyrnSXDzljfy;Qy3qZcfsludZ%ht77)iCNg{Q<-_xw$vlsw&D3=xG z$o5z-2NEq%(GK2$pT^pfjbKsjo5iWqD%w8I%`5Ce$>h`6RQ;9xZG0qiEZ%K^MWD^O z3@J)u{|lAPE04Q zxn2(%MSl~Hs((gmF>!$Fbfu;9)$wNCs$9cf5nGwfBCYLsO4wtrzY4$>Md$kbBWGmG99ONG02qHRG3P_NYqlkd-uZ? zMnRM137X=S2mv7H|m$C348}9xP<^Wf=ISHb68xOme7A-SwEit zQ&|tHRR^zgq;hyrCtBWURLLj$o&B1jWl=7c>-!@ULN9=8nIK_mU02M|_EOq83m@830hati*7qj;8> zzHWzW*8S%D9N7<5sRZ%IU02cFw3Pkf47 zx4XsW!Q2^t<(_h=trS1!E#@>{oDS6iXHq@<=OI$hZxJ_-){!V)pFAXa6|7$)-n?|l z+pm`F(i9`avjisCE(>mxM*Bz8v3fU17I~tFmKR#GV>07JM-uy^VUukd>U^J7|Bdkw zn;LbPpo@!rS|(Kx^7K`_({akQo8m9?wWrf;Egl2EJ+Xj>b!qJ2aDoO;;yNGMZu-O# zr>(tm=SOW8vTaNy-N5KlE}4}GDz#60SEsHa(bNTl(IKS9)*<`rCC|)d$HzWCqG8&?dC{>#eecpzOv-3K7ky}saE(h zUoUdxSl&Aydkn1|Oj&8o*jD4am8F~$e7N$T1dknD2_I54El^Tp$&55p;A6ITiG8{DMWNuf{DOnE9&Su-!YCF?1HEBJ`=q?$zF-01V<-KjPB$KXe%| z$$-bl`m)HL5c;E+2^+mW>87L(mpF87UNIAbMq>2q!x%IaIeQ{H0jrKr`O(ZkWIfQi z+eX|XsH~&LPwcJsCV{Pt2o7etu0ap%Tkhz;I^s~q;yVitJVBB?WSoA+{(tu}gvYsjb2_Q zEm)|VevPRyitoC_ zR?q4l3n*hTq>)kOGgloJN4s5Lc<-5iwo91Uk*)2SHwjnkOg!25sTOV^KElH`?PX%RjB22eQR#&2sASvbth2*nZ|R zLw_eZMxbM{xe_h|StDc*|6P^U6#N6TnuaSYF1;h(|kqx_#Xg*&hME3j@;^7EK#@1bM|ZFcIN?qe(f-F$yxnYkw@ z^M&xQIShUa=37s%GTfwiy5nCRBQ$%`LsRo=1P&R6&!m}5;eTs2zRYsTBoS+$ctmF3 zVAjGyAcnTy+EYds|NJ=t7{+kMl}1#cnLHmpcL>suN1>t zj%Ja4;u5=FckN*I_4@B=q|I2iH;tziDq9ZJfzlg#wa(v1{Y4(ya+PK#MCFlqy&G(} z4pVaJI)7RpLfwVfXK9r^(r#V(dCs|c@TuO#B_1|yjK^7#6+7kysh%3TPd0@diBMWJhBA3)=%?>m&soaQ zwT(;?<#QuOv(lb|V#WJITcyc8!g23lJn}0-&789uMYIzPX@Zx4mfhdhraVkI3Pue=>n-9*nE5nK(;33w_aDFJBGuWI7lJ>ij|mC=<)2 zZtHE$;>&2w)B!X4+m%~B0I)#BH6A^ywwdOPoxOq_EJ52?@aL9E6IuR9ciu zR|fCu@1RreP2Bo>Zt5J5HO?-I(;0iS<5R+b5z&97eUk66r2$p^h`@8y$J4>|iRYf< zYn?`WhNhQ4XKPow-OV?OT}>J>d-bYmU$3=2ycjhS{vQ^-?T=t_KIC*DRK}r|2${=?r;JBj9;kWukJsRi}^1SSydxuzO8&1hUvphe@6$z-m%rj@yrcWrg+ zg=fo|5rygMm+s*`7Y?!VCeHcRqie4`-7A|^e6X8Fy znd#|kDXfzl^)nW*t)eRPJY^AYuAo=re^QiuXH-C_n5y?{eXOxwUzm?NQBac?95xRc zHB*yuGopdZ6Qp7)uB1t}K3HF`XS6I7WPbiRd)si#dFxP1JmZ|@ciJa{Qd@oW&(H^z zB`0LG!pFxKxhyMDGr1AYaId{sdQ}&G)daCk!4U}oQ8_)%lj_bN4&R86U2{+lromH zCKHmXBrlTaa`biVm!m%@{`|c_DEEdP1qTOxN+)(Nawk~e^Z=#Beiw-xAG4$|*`#fd zotZcbge}&=qI-#IN#4Yle(MFVGbXlMtnsbq%Y?8fI!M)DnrgHpwWkpvJfP5MGwu)K z>-jbX-PEk18g#|d>M$%aK^Je@1WE60-nm-8>dzAb%Bdm4dJ^}K`@F=pkH{H(B`}Ko zDu`++(MIe`kzz=>#&1XT_c7^xy(+vkddi6}t8gZHIB66@&4SDwi5QU6J?2WmZuqCF zJ^3i_F1dJ-@z{R5u<-`T<~vRHUhd$6qbI>U4YzJy&v!iC?ZY_yRLNa~$Z^!UIgYy~ z{QLg)G$xf=&d$@h+t^C3D|pN$>zO>R!Y^%FYFlVyEA!m-$a~Dt@drnM@5y(MhY!+% z&3r<3`uYyHZ3WIw77a!Z7Re5`Ihj23DVj$=(JES$?eJerrx^Cgfz^LASCbHG0MIbB zid;JwDlBisTI4Zks41^)#S~-zK>%wpSJEjn>*()zbX01fDFjKXv@JXDzr|k4BP= zD<8c$eYW1AcYH13?D5KC#_LENs#2Mak6|Vx)SJj;SDOR>3N>;O$k^81Sa03BWh&kO zIeMfdoMzBE)1O&uPhUNZDrAaVZY3XH&dI!el}>*7YWC@Jq!oBj^-XQti>+@-&> zVBxVF)?L22;l&7oW1It{6+B8DwB`@d2jXr?i+d#}5l)B(X()l*)=!%Vj}wv7!logd zSj32MVArQ34Am=9)A5hr>zq1ZziihM$z64}nP|+(bEHldB&ygT_dvAa5ZMYR6W~qU z*WM#&VYBOCSdTSE%dQkI`}glaHF4cvjxKG{ZqOEOD)U`e>F*Ly;PT)cWLayP+?)za zB<_{nNEgJWngmIL@lHLz?l{lE5p5dJz2DsQ=nt;GygCyjwlRI@Vj~Qven)B{3#nOu z8L(t>s`5}gwHVl|*KKRbxG2L02N4epc8gkEBQj`Y+aKM2wuZUa5&5mkq>s%lReBAaLQfQC(Np`n=3_L%BmDpy)gpUWjW@j7(r03BDV-gLralnhA;~ocMmZv3E}dq* ze2D0i;ReJ-Io+CxVLFt<4P|1#o$_acS{B)jl9d>x3A~UAmeYIRC%baYc3^cc?rH>v zvS1W;;R4#_;{4j>x}AI*%{^#cA0B&s8@ILfTEu3M)I~4FRZyl4f!Wmom#~%aK!*i) zP^Sbh7E#uhZX|HJBEy9_8@nPf9u9@B)8}H;n-f0& zJ##n}1>2jBoZk8iHpyfl_TZjI7V3Tb^b~45AjUrQTL@**LpNaaSL(VD@LP~0q&k7aY!G=szMQ~t=g2Lo+Jsc`+3PSUOQUtswnoI&dj>HgIz_9gf+lGi~5 z?W)({3Ukb^lgLPryk-eCxlDkqNg@KGAE<-hM_!IkPqgIr3Ke#D^FKRtr~by3)^9LB zpTN!aMzu>1+2!)%k#l^v-my5P*!>!<`k?iUY-(-Mv8^jKp5yehUg(-jfM)U(m#z7YNR0pP$6ijA^mNqf*M(VfX3o#_FxDw0FO}CtS%O%G7FM)%Fah_fONqx_a=T_jP zUYf&v_ChO+!tc{qf`W=Sw1VPewwOQZQb4+U_il zHH<4UTY8>uqQNzLx6UHOo&k@j!fRdkXNh6Y-OzBx-%4MWZ{)n~!SvoWuY}1^5FKW1&Aw1!#{Ts{|o7C~d;pXS#j-q)RH7 zz66VNj*ioqxQ^XF_@Jb>@3?(3&*xE9l7IB3GvQ`Bam(hI-?s+G^!6|!XRAeZ`Y8R4 zs>&l8Q3ld!udP_ckWOyv%C!PtSwKIX*fHnSX;em+4tLkm04x(h7diq#r$G( zXZ+%b68(0Rx=vNPYyb1)QaeNW^H!z9YI>7w+gtVfC2!U`l!ex%J_y`}MPz>?tN%9Z zq&nBvwkl*6hTqTp5}nO<#vhMynov5~bM!WZfZi{Z5T|vtBH2>Q;2D^oP7soaR+ktb z9#+_nKTmCYyE@kJS?;`PQN%}!Ed*KB&8qBqeD~qow^fNSC1e`Bc-!c92m@7k-tzi| zTe@Xt`E_LV|B+T4e4a$6T+myajF325^ zfPTJZ(1by^+QQnRn?wIwsw;8pRy(~EzG4GmO{h{#y2f|bi|!r^OReQk90^N9Uz&F& z%cR1`*2K@s0z+5cr_mJ^*9B0dGwmOV=zL6|Wpb-CvJ8dCK|XWoj~RB;&8K&Hi*+7~ z3_M@JtVycym?5_}oiRhrEonbeje#R-U!^i*je_R8`_8CxF4^&q+4!-Dx#(@= zFUVS84GBJmg8(`1%3j5<5MO$&;)u8T&GXw^z2Cc882}dA{y)0jGOEfp>J~;Z36)Mk z0qNdIhe%5)DJ?DCDJ4pS2uMpvN|$sBA`Q|Y-Hp->-`e=R=l#x)v&V2a6!slgtZS~C zQz%*ktroHUMrup4gABP9h>XTKohDtDg3UWt?6Vsm8BY?FS>#ZNiWakWyi3Gx$FH95 zG{F{mUT6LYxO+R5AcD)q9p@F<(XRV7X;|Ld%!cUE<=yA;C8;B*BHB!*w_#V~BtYds)EXat%A>|chHC#v%tV=>DDc06p>;B;!do;kPlY$U2_yDZe z+@v2EJQzFLSC4#kWe!gRJc?^=fJ;&>(n(F2+jxcjIvvEWWm`%*hsqWp2ew41Jlo_V8^wDbQAEiumqF$mvw{ zXYgVBrBz^;Ti@M@Ju9%=tU}{!Sv%qSRdI67&}_fh%z;Rx=$1yOu8O%w9C1kF=i%@+ zD$tSm-zC3eYbY^+$v09pd;gB*@5Y(8Por+|Ex)XfL7XJcDy}(NAMTdUCE8`)EzzII zbT*wL!Y}ZAOW-X{2M1MDScZVPnpOsaqDL&X*JP#p9|;EqI|=T5cYain>#%k=hhVeZ zg)#R@qxMkVn=mV;i5`T;eo@Jmq2tuvy}=w6MJ+A4QLTkfY)>xumWa3~n!-?7>}C^m z7pF?SLs-@u>c74Ja`@0Yq?+eNnJKxrsTeQ}^5$8K&x#>V1t1JFI98uD>lK%>3uHalylJ{h)-0Z0@h> zf&Nb!_0V{n0!_{C;?4)KHl5S8S9ZH%lUon(}rJ_ zb{I+I)13`2D1jaLiYoj`;n-zhi&ABFDdJsPbEHAPd0l`#6DW|BkvUxCf86^qyF`&ZJ6ir8}E7oGX# zfLmLIYX(?q)uuk#J2=Ri#6}tR_V?R$?Ey*zW6HaTaO*4)5F`sl_DZ-AeQ3^$M zBhD|ad3C)o8(>9GV_*O!J$@0w6#kgo%B@$%`|r?vj0RH{AfBptE}J*c3F~pi=aPbr z%IfP{lz*oQ4EcZ4>mni?>hCX;BT41mGS}v6L=9)(mYblC3Su3WB60*`jWSHaWvKCx zPlma3b6PGl4-7c+lO}& zxn|fyQhI5l3{46zNQWjTKeWuf5c8MpZhx0-?EiK+)b?+~l{@5rmQK^w@D#Oc<4Vnj z3vEqepOPcrD%N((S@YeErHUsHlAi(WiRu^b8C5+fnTsv3olTfw91@hj*m}3l@9{CA zx#MNM+0C^mmI0#w)-Z(&C0ENbQJ|f(Uy{7VNVH)qqWdUfee5rtiUp6TnQbGHeIjdl@w4-8=2w4&| zmoJp93Yg;&2cP9KZwyDUVKg-??O>t#C=vbJUOTq5%S6+EqcBN7KbWV}E=$z zQZ56#3t>)kH5p@r$A-K#|Eyc20lO4G*)V}41%+B`Y`#Y3ftB7;z}ALMVAka620k+I zohV}=uNMLyrEcOBR~=oC8=Q_k`8N(6r%Nqnd+^p}F>ClixSNwijuRZXh$=&IJbmZG5L%580a zH+5qqB=5v5Vim6lN$&A!(vm3TJC9#TxQ(4~0}2m!5ToppdOmB`e5Bmt4x)PRvNd1@ zYZ&a`6cDkpKKxaY(Ukw#T&w<5JPBVV0PFH%qw#3vfC92vW!Xyb$|&qaRWahauF+Nd zq&z1X`WpOmflDe~q2?mOk(gxcHc9^NXe_hTM?@(skra4lKR?(bRQWu3668t^I&Csc zutQs5FaXZG|3cVr-&(Br;_`p6cROJ35G~GA_LiRI9{_>FDrXKtc6oSIsexns#flH#Lyki_2~5n?EWQlT3fm8zr-)+^1v@bZ?kY zKH)a)8zoB79;BzBuAAVVNR>gP2HVd&<4AfRGSAa3A^|lIXdSnOhVoi7ssha_dpbn-dpJNMp4php zKeL{1WIc0}I_8iQPqb+TH230mrE2??@O(^z-=OFACi_~O$@OgSaZtjnB3cu1 zgXjW+o4Xa7xz!3^3Cj%)19QO9>5@ z0kL6g6C^>)b;JI-Ox$0y8{2A)siTMN$I*-D0j9h*pl4iG17e22WqrBuc93xD=n6D6f)Z95- z3A_9eFiOKo2zIso9#$9$_N{CGAd!)ajMmem?Ph%f%oc8(q(<2vJ@-hs9`wvEEU01r zU<5}Ld?YZ+;L=lYK~4$un=UOw%-#mpL{N07nUkv#@Y^jQ5@RwW`8>ZO*=8>j*sQsidPl(Y$-JE{?F;+yj*%dKI~Yz>ow% zl@plh@P6A@?~Bs;_YICl#F`{r_KyffxRf_}TpfivdTl1k+LPQc764W$Qj$WS9L z0{!Q!pVPkYSyB|6XYD8+xI{{F7?0}HbOjh%N>_(X4|)AV^{WeIVjvvllglQ6e;M)G>x-MfelX(=x;KO==L#4J+E%A#O3e-ZIR%0R-Y zLIrxjq;iytknk}(!dgxde?YhfmzWT;I{O;Z4r^mDYhQLb(|g8)E;cIEdAJme*kkA6Rn;QZl$9fu(cc56^7QmnF&r8gFesh0 z|70@83CeDhkB1q6b$f1WJbVtJ7CSlwrn=Rht~Ei6Nq;ZD_Oppw;JdkVk2^^&u@myO zotv|MFDqRi4-PJzQg8D}Uu?mNX#1IKk|=SW<(PPXQ$0j4@s!}!HC7A}yodUh)Nm|5 zZJ@&r5f5mYgF!KGjF$rzQIoiVp&>oBsGmh2HJB%^TCnf!?Zsrc^e+TMIF0k^mtT*E z5wZ~(85z0l{PxSwRXnEva*UN*^<;Mfhk_Aa%C)O+b45Nud~nd!SJwb923!i=F-H|c zqZ1bdUJL)&6L9PdcyZ?kCh?gcjr4xkB1zPnBEfmjximGs{GE&2mGy*TN$6W5!G6BJ z)E7D5%BSx6hTmSX`u8k#tY$E%?(Ocr8sjXpkbe`MRaYm7R1?p+VZ0Kb2a=$HU<}{& zm$3jjKM1CcZ4AjqYxaXoAT`G0V$7Rvg5)5FqN4Jr$h-sN+Er)%M6(ZO3--JvmV@CN zPe4b5Zw+Oeh6<%XlkJYyGyX+Si>YqT9h1V;qkk8=lD?D7k_hNI|6>P~=+G9Z|!d#cvxeha~b% ztgo%CR7V&hZrtE{W9K0-)4I1ltQ7y@o?do`J#T`d_M$y$(h992H6Z^YMro!JF{D2h zUtN38%35g3-F%zPDc|UPwq>N|aqH?MViz^hZFw^@hA+?k0giyiBvNM6Qm@MjJ^eO`o2GGnq%6cF4g#j2@L`E-Ad~!DTU(InZJ@tQf+STV z7}1i=a~cZvXuSFD?r27}F2so{PH+pi>)(4fL&-8PPN^7r>Vy2Uhqq&CROcKRrm@0K zKarheeEaqZh*%&}Z)|_kW)O~Kb&1K~F^Rzr5JhpG4WP+5i~rku0zWsgut@*%1;o0a zzyrt;LY)3JJ~tSkHiqj*e<_}gYZI3_n~Yo)S?XqU^YB8TQU+W`wsl_0NCn)OfxF?O z`4loTAm#@1mgQa%-hf34!!A3rM{yRi4hz-D?Sdlgmai`SsQ2|Ja6(Ggk@hXDM)9K+ z%h$rR_u#=rnV~UZ#fq4Z83E@X^mqNBF~Z3%inE?jm{6 zn@ca}yydpf)Bmy~>B$nJix?fnpnGD2UaM|7zS;m~arSmhg@- zaEkfJ@IK*LSmEhNmqi+7T;h8_Nq({RJ0b%VHZEtJ@+9tAxB)M{>Rx>k4E%d^X0O4? zD%rXI^N(T<9#)u}Vlw?lx5b^K<&~AnMOU!OC95~oGXA*1ah+0MpAmz;d@ zi_(SZ-YqcIO-O^WZhSvLw2)C6wYd8sK!c17>Z@-X@U%XIv1?!=5n2=<-EVcOB9@*$ z1}Xp`S}L^A07tL$s+g+hz)IscJ&rfE+&FBEW6~w);~f zhUChP`f#e}ODfH9N<$1FjK@a59@sM|!dhdVv~b8mbnN@9=aC#O5P$&x8iEb6c8$f1 z$0sLNM^C9%T(0) z>F;kKB^=s$8>SS@zsdJ7%UU+o8?QpdQ;}BN(iC?;_}i+K{1Hq(2wn_!no-z2KQ4KW z^x^&I(IJ*Y1Jeyb4zS=o-zHm2V=d&h zfY7>&ywc;h{_`A|KN;;n(;_)5iw?)N(`T_hRfMdg_^&g6tcoloQsLmWg=`zo8@7l< z)B7=q?@4f1%>;|FxalXNwsFYu1n0N{925x(^`p>L2H&}u<8PckCK7y*~F5(5Kb~%PU zJs$fAZO=0Y*EermHcE$=H#Qbf$q!L#Yir%+DamI*@IE6uI}k{#kb3t>N&DKjmo6|> zChc-q4H5xaSTrM}Wp%S#TZ(xkzHfC2VK^2~&3dTkiE5cULkel`-LgL3H6e4Jz5)%) zNW=spR^Sprb-!`<=eGAkI>&v{70z1}P%nLPnsiYz`TU=sj=`^QR`E9+B+3{dqGr7eJFZ-Atg9 z_T`Iir#_NIqs(IR%^v|sW4^3$X7fDs^NewE1L8C{5C~ra1+-bvWFL&Atj55?!!-s>{VytXoV69%gb*De+{L|D)?NrBm zooHsQ*`1^d{_n3?cQjk;3zt?hlNJ-4CTGCy%Se7TKbK!x8VQ)mc6ETxV=GAKxt3N} zkLS4^u-J+j8a@I}TQ^{HT%5W%@$3Pq*295J!RGoSt_$FQ`YGcc;4isJc(%|p2p#A+ zx2_e_+rcTOmZz$y7%>1dzFh^BHg{0E!F~?cpb`EBP95l)hq>q{XEm z3+K&K7je7hbyT{T<|&_nbftiVhIqvn$*(*%sEIgUnEiovYiFHq!UsgHTpbh zO;t$2^i7nPyVsNJZobLG-}pb?l=eTu|B2;@cy(-(bydvZ25{Ih<|Na^|Gg$&_mUUr zj#Sn%6tZ%?6W8bvYRu zpQA0?z@b5=U$6tlt)IYtLvGJsH)Hm6<;x~YN$<2MUnDW3+X}58)lQuVfW1@$0@g*n zos09Siw>TX60*A3^H0;@5^4^3l$8fYJpyU7`x)Sw&-#FxW!LVOZL35=bv@#I`b=P z8y!pMW`TNHW{tzzp$(3h==|cs#_p=Ie0_UPX3y%ar4y#5ijOqJA(Qs3Gh5Du7V!{L zP3c|EtwX5{V{<8{Lqun4PXW(PsK7oUgGw$kX)i(M^4_o`YO4z{TlT{q(WURe!rhHD z3rNj)6m@lVZuevRp{}7Fg>fqL8@K#ct?{(#R<^FM1Up+(U%62}4s_{mR^2N4 zZe#ePkvo{PlM}VPNldIEjRpTp_eR5l+4pCwC9*~zKzhD7wcIBH$Iqu zpQ?C^8RAh!O7!bRw|tu0{N+;ifo|qZ+qC^9o@}^OF#?E z28lSMc6E?2f}-~|HUjExATZq0sNd6wWxq?x-SE5AY-#-s^C&@T%i5Qe*SmcbUU^yLG^qwPx91<+>bv_nysWO4qaHCRwDNo4>K3 z^$THbfWDR}(0#OR$jBhnvt>L?x89}*J8fu41)eXnMvW7WAgDM%fv~lSO6~p%hKslr z<#1yn1X^u@4GN|1uMbP1=^#Du8->L)AB-9&Es&qjko!05A+0lk=N7?f%f%u2()>yO z*RRXOW)*)cB3}01V(Jp6aF57aYWd6aYnSG|c1LgroyY@&1x>{yuEH1=!tp zf3j7d*lrpEN|5a+P4{n=Y0F`A^}yLCTpz8z&cfzsG4lRsowuwoNh_z_{>Kh-AIHiR zgXv;JWjQ!F*zr8?xv2cYu9$@zDtP>Q@dD0B$UVk}m~qNf3*tQNS+)?i3?4=5IRfcy zgP-8;!}Bfji?9OFUO(NKI%h)C4|GM>?LLBIrjCUEAiDna5g5$vHJ~@($z+mHd zDG*qPZ*E!wmFD8WNq+0b%z-|q`@3_QVJ4L7u7+)U>|7AgdH;Zv;@<9yutP!9Bua|# z%o?Vc$sGQ~V64&!LZ1ChcH$5Pa99@fNdW?Vs=4i&f6E2`s`F^E(_Py2Ht7{B^`Cdq z2+@2%W~}bJ$X$US^@ju(6l>eZ$H#|*1s=`7IjaU#g)!T4adH0QspXKeZu@Aw%Q-XT zBXD+h1}0Ut;xuJR?_c&ic-7)>epNlggL7-;bd3)FGLC(hS zvM%7NasVC!=Y>esuX%Zf&;WW0Jl8xhr=G$fbm+OK>iKxdn{51saH@CI$Gbb*+yZSc z-$#9o{-}JdjVhpAfa7HCFLlcM>f{u$BvlHElBbNpSRoM{7N;sSn`K6E8udNX??T>p zabCp}d-8d6dST%)Nq{)zK&1o|Nv$RP?%h{asf1BDPEP(q6@DQW7NV_Zw6`_;30It%CCMXaEl|{E}4IvDU94W_VhDu|IX#FLb6@ci7AVhmgF! z{#=?6@(xEj7i*qyAf9^T(8v|quk>|ts^qCR57+HKer4dBKRG#R;&~Qj_(DU2Z=s}U zoSVkMg6(NHtzbE-Uy~2l)i0a)HDX>J(#gFPg$+I|vs8t~*WJ|;=fGt;9yePo@>GQ7+xzFX&dO8dVjIwv$XH+iOmov~~Qzrxq{YF`ruK zq@LH;rF?{llyDEOFTV-e8_O_4i>`^&MSK=19pigRnIZ8Tc?oqZ3AsL90te$w<#l^Z ziLR@3#Kgov<=%m}2E>)0fW8$728kx!5445~bcD7n^7@f3`*MoFMo#(Ns6Bv>v@aHf6!K-_uI^8P_!m z+kT9u*5DEv{lOD@>#Oejs>`P8Kd$WLT)h!-8zYH;=J`A(4*H3|eDUV% zdaHpKGuJ)~Vx)$?H+qhX_2L)8;-UQF9a-I;&K(8g7>=7Vv$un+6Z{rqqB*O5;zQ{A z-gcB;4V8DB#ThB@`wj_4w4j!43k@b^uZS zF2-ARkE|uRzYX(VWU+ydvNfG%h?3sgJMRMy(W8f&&mDv}; zUQ(k}YajOA`-zWiSxj`}w8vLk9B3ipsoDLZ*G}tUPeq}G{(dK^lNL!rH>-mo^-l)Q zC@0gOj#4@ehI}eAc6JC*7&V`)iA5^^?Dor-m=0#=mPb#@nVGG9a+rzx`WYN04q^x( zf<_;>0LV~`bYjx^ZYENr5BXFM819d|5(h7VztCjQjgAwl^LJPM*<1 zhwp@9?5Q&h*j@Vbl0EivbhL^X?;j%T=0K~0S+n9}?De(MVeM+Y@r*4{OB=0rVgaWC zX#RtcRfam}+tF$p^1RDP93%yx7K!SdJeHg?HUv0cNEhr*PeatrF0nO)gp||(04&$( zDPUAK)JAZNuNrHicYQaaC!NZ?*u1HRvr6@Q{kz)m)52<^&^a!BC{+@`$>%#R@N^gR z{x~Llb8j8NC!ubE&tv1{f#J7~hy6qxBo1P19P)v6HvBb5yVco{ zm0@jHD0ot&Jhs=okl#7=yZB3PIl30wG8a27YdJnWJuU071tgs@>Ms|#$I6TcjdNSS z5h0|b;;SUNwptG(snrGBs#do3yl9?qj5o&AKkMeD*uupctnqIRZm&!>PKn~*>J}&C zBB!WXA~L1!Fu&nCQk3Px64LJlwwAeW z)KHu&rEwEHtGS&chyy`NzsRJYnxCvEw-QUriR~m|>L?+nY#9>Xy9Wn~ii&nkW5+Xh zJzF8kLL(Rv7zkon)3eP%pLrbuLFvJIrSB2=l6$$vlGTYHZ%+TYIRAqvsXXhNI>kgT zzRX%Nc?pS@_o0zdQL{To08h`)J=}N4lR+mG8Dmaw5x147lAZ@JogSqIK43V3E&XzA zZgo_(E`wQT=IhZPKXiK*J}wy!{e9ZB5X4=&9y>`wlNmuV8#6&8gafIhaifMpx zp6DzN563=-1N}K$VOvJkXC4_}hRA z>jKGKi30Vk4FNbbD9(p7ek&Ur3B_|9+Th}V`xrZQmyEv^pwkzV+S~WZsgb@Lnh&VQ zHnb8dlu$1deGA}}u<@l-4W42(6DkM{wEQa8BMRf8%1@^Hi_$jr=QmtzNWU@}-_WmH zjp6r^zU^4kK&+i%*nh`WJhX(LcYftovAz8PGv+V;iE{Z@@jtNNDQesDuE(sZ73MpN zMBlleAp&Pa#!1Ve7X^g7CMV?}%vM(B*lDH>f}>QxdkH5Nco-r21YRe6kL9s z#0C1>MsA5~w_P%tQ19|zN{YbI)Fso3s-Ma03Ga!F8e~|I_n``byiNUL60lfiJf0^i zsHyo3y5C?lspn%I!rf!;+uYc@LQ7E|Q>E12by}OSVn&J;mh}loSY8E{MILuwlWAT` zaRd>9O@+s&RE@e6qbn*Ib3KU{;NEuLnX~V0p6g1W@-krb zo^hPER-U%1<`0r)3~qYeWR9@r(^R@9bF7E8I(|p94!7w+2NclLe4MW_{J45(q0sLqENYGhb~)Q^(@V2IQIQen=S9@y*}NT3 zp4zgs11inWR83?|rzFS#6qq;#t+D8%nGZ3_PW`~*C!WU*8C_~dH*`ZYooH!sW7U`_`Ao(cGd zY7!i%B^KIoHw+XIjapsp}Q;i>gx~#JyvWkKNT9>`QHr;jvX5~gaKCV#kmNX@q zTND}bsbow2q5SWsEE;9`3x|p~xjk5aHe}zx-5al=$c!+^#X&5lF~1Z}A)#N*SlsMn z#en!BRQTv$1)*6}(9FwRf1K8lxEh7ag&j2>Sh%F(G~7--f8}ua;#gbDi`&Me;!mkY%)UTW!LT06HC{M#>r;F7z4 zJ8!bk#}wH;BzV0bXqQlie>Y5$3Sl;2kGc7#)~J|dIPZ>2ehXB=yPO{_Az#r2@>oZ^ znL=HVzsSfvrAc)5j@EX)O-OX=0)YdFeV=;b5a7Ld+-qB&)GbPG^h;W2Ah~l)d`ijc z%^cgLe7dC8xzxAU$7WbR2mM-!=~b#>qyGE**c;}R<7cVfi<`8Gk_Vs0?^R7$!kHls zHVguMs|S;1qjm0ltk{R0)CjEod4<*pM{vA{^0m+#jD=3rK9KS>-t|0eif48Luz?J( z{aoAI28*z@1eV1O$|t&WoN{s+C6qIH*ahYI17~i%qP`N1&c!xs^I%fec)0aAK<-^t z*)=?eD-<*Mrn7AfsN;cX#MLSG2Up&48X1#&u4h$zI5TMqM*R^$%p6x80TE|PTr`tl zSkkd2wtB3K;R|Z-1#mEH+)76)*n3C_wi#J^)!2LjHKoE+|D0n>VdrPXn+XtNC@3rY zTqYA`)hbs|9)YWF+>=N|g1+P`V>}WO^zd#&{jur=S`+Ib%f&)HiuEq#ldMnwQwy*R z216Y@TQ1GTCBXw8X7I%5?7;aZ<+grsF`1ia#QW}c90MplCREfDG+JNH=k?YIzeZ5` zSM0{tP-yPvw#4fXL=~iWG<~JCj1gog(SB8NgrQtc*iOWv+F7a9-EW&VXjF``^X-i4 zg|G--B%%7{eAukoTu)*^25s5>@aEe;e0VSLcfj}E`tHpyh{jd>i|m}P{KrOKMz{XB z_{Mea;BL$8Bv6WXJP@=(vF;x>$6~eM4i-&Sa=r`DKG`3tkSRb`h{Qe%sfrA68 z{UI**d2s5MTuY2VCGmEe#b~h)GH?aD)!V(H9-olTrule97}9e`h8+N=K3LnCh7j;8 zpk|6?^Jtu5m5yTk0@<9qQw3s5*HU(`r_4MPE4Ri=MFlEReh2r9x4H zKl#AOZTwB^*i-t*^HA`Bi1(hOA+*AUo|X$i(gR8=A-eB;z4BX0gpUAf5h`iz?{)Rq zLSxjMdP!e0zQ{c6!LT{uE2?EiNpps0WBgV}&%4%@a2He*7lLuz?tmRbH$JozWnpsQwUa`amYo4*t;Ly0K6P zG7N(>?EvOm_>pe*LTB8A<6G@6dM0D zk!ZpG4cpa8lltf77V(hzh4TzbJ^+LuA13!Ic|Qj-iBO!|DW=GL_N88BWan?w-I7<| zuOgEhC`iJ3hypk?H>(T2=SKnJ!q40`-k_$y+aGSc&>l&JeH((YY_bs>W92)@*a6si zWPOnx_--&jS-H9Mz|3vEsEJg$L*}B5+}D_~D!gryeI50i z1{?*w1^fr&cKiT(k>@1LlcJhh8)Yc})rMGvvGac!BmiETHO^Q-dpvd8HMPw2kN1uz z^+B}Lc~v8s4?m(+%BP1*HwM9dOH2$=Lh$y9*OLdV8GCZaG!s=VEB1>M6&S-f`}1#F z5$YVo3wh;}?eBRYq`14kZ#%5zw1rHzAS*ujPyaSSnaLK7=Qa&LP*)>`1zq`&)z1(f zrEA?I_^3RR`f({rN}Y+&gJwn)U0Y8S|8Rv5m(sMt$eetet+O)9yfLv7cRP(q{hL2j z2W{Q-{ChLjFhJD1udgrHcC(ZK*hCAx@nOS2(I|B=lZyx5w6w_=KtOcSJFvK1W`_MK%u#@(q~dqpet$ zxtQQyoi{8!Y1}7tSLwZ`JiI~~t3yZTf~+g(zoI+#Id%OMU~3eo2^jsWr>7g-9X}eO zaiHFZkh_A6ryOBzkMC|(G%s9^ufNPYm!rd!XHhp-PAzZVpW0ArMWAytxE-Pj-l#vL z6s*|d+f7$U!{)?F60>WdGPX>wWs31o?I!a>`ok!v`&Jia>f4=f=a?u)VNAgFg#Lpi zNVm?1xVW6O<1_2FJ-t6Ys>h0-&i6|^sHeHrUqDQW5bNnCYXT=_9!*^QR%Ok%z2=oW z$JRWWV92**=xnOqIaJ)gqltGVWo7Y+ej=Y~s_G}6?{*T=E9iaq>wh}(&b?&PrdY8F znS0?T93-5taxPl1Fhob&>O&SURTb|pI`^bF-pKFW;wIHSnpLw5z6lB;OYGfB7@u1) z0c+gy)O^}=-AUcoepKHcs%-S-p4 z=-2W)uzi=7{}M}>LHM$MBW%Hiee{SmOf)y-eSN&slswj-56`)TDU)_RYNk{~MWo3+ z7=*K{KfEqa;4!XZA|a$Qa-2Jm?V(lPs^~5x0g*E0+bL{Xu(+wLAUzygY2j2^bUceQ z9z#uA#ZRYNTX2=;m$B#dKMT)WSGH!WYb=w_@T%hQiyCGcY>b(z>#TaC2~Wni#G`q7 z?QZ^GkwhIsJ``t+IDLFJ^IS_I51rn$1^IpT`QMs?LN7Us>MZ%Yx}5dhN6M}{Om-IK zBg;c7G?g@4T>6~y^!Z(dg6|13cp1M%EiWfR2!3~QbP)>tZ24D3bCQN@^TkqdeRcfH zzLXLcf3{{G=nhawR;SV=?!MTtmhB}iueEi>|rwa?4=qq7q_lOy_h zr@)ZptRj?nW>HhIYtb3O@;nuRe|)DXHSd{bktNkpr$$5{#1ch*uRo$4*-k*Cjh z36`*G6tUwF=Z|c>gV#H5BJY|g+a1zFPWih}ivPZx?8EBTl3@IaW*@%x zwQ;!d)tcM7f}g|b&FdiI;QD&Uq0)Q7< z*O=`z+6adqMtjM~hp}59PfG~TJ7f|0TIVCf6gblM#P9j|*n;J-E4BzZ@0SsjcgXtm zWKeFlEY%h1yVtIzVg95TP_BRiBxj0yds8oIr#Y`;cs!Cywp{J;wjWMSOe9MX9iBnD z=TH#^CA#pL$CRLte0D|i+z;wD)1{*&(-n}F(~#$9<>&AG_3Iv-Iz6%$>kw_KIolt@ zz`%H}rWQ+pH}ZeA29E_>9JGc}LgY9JsWSr=rJb#u1dJ~mrl%j&pYIhwt?=7P0iK`5 zj8JV4G8Jw1YO$7rNuiJx?_BCA{gK-Bga3wOr>yg-mvkjFSvvE48p4$IzFndVKN)1_ zkp-n3tgrFmoP@&1`mBSdJZJf~U3X40K1Z1^I%HDh9V;GI89hnn7u^A^>t)dLg7nvm z-HvP_+jlOEM}aT}F~f0aKt@(lYii0!Nl7gp@NHJS1G$UmFJHDoYK4xLHaR&N1=^Tv zTy|g#QDQyOl@ch}H7ZaoDz13e?WG0y*bq*vua(8*2W+JF(t@#1&C0qB)v{N73vBeu zpuz{Tl5DbycogA&SKoReTPYS9kqz~+mJr*&9kghIQ3wLFP&GjrD}yYzC90r?R1hX6 zW`iU*(7`LyQMl0FyG09?b74HvPy!>F2>4)NU;xT5kvA(XRgPqD2TEzkcY%A-H!|{- z*%FEV!=ncrq(!$CFOyQoT3l++p^y#Hl{b}He|j)FG9;eXEnCd@w0umuk)C3N|IKln zT2v&FCp94k6r&=vDi>!DDWS3gS>%Zm+5*KjkBCF)=ffDjIz%Iv2$bPageM_0g7GZW zqxY#5u)eS;3%}?~X(q@R8}p?x!7A7KQT2Ul{rlq}ZC6@csQ-o@BkK8kU!hpfiK!AA zaiAdYJ`7a*M-pDo{q@mQXrT>L6N6WrFMCPYWIMZgrI|!)VHU4bJ zr=7Bn5Tx^9F!`dZ_C|L2`SI5vv+og>NluLobcA5`wvLVwne zr5(EEe`Va19E2tQ^EFdktA`h3)%Ap2nkF?BqA=p3~1+OPK)V{ZI@y`SbqRPI$FEZ4z7%khl4Q**bM(bcx` zv!YV!`1`sd@h9HcnPLJ@;{#2yoyQ6B7k(_-6;ae)lvbr6vZn*6u5{{yozRB68kumam8>^QCMwmxuOJ@dGy>z zK_Qdu|3ra;LXB^?3%7WcJ5nZ#g@S?;lzbBfMJAU+wzQ^3=ArcisqkMOC@3v=gzuuD z#Jsd2?Kp5>wEg~;N{V9YfbJT~^vj1Jkcs>d;-o$%+L6bpJ)ekDFZZPeQ*Z%#A7A5xXxT@_2`tdl!)Zm!N=mpoel)EdH7yFOT4$w2Ye=%SFUc)WofaIm_ za_xae2Cm0vr-tq;chOvr3nOAqoCc1A2=-9r9kY0ynLKsZ8C=J9zcloxV#XcT=6I=FvLbF!tq7 zTMbUMInNQ?xBU9&+{+iP%9>5u61L=mdliK>?8DiwylN+GseaehEK2SXKlwGv@Nhn- zM*?DND0kYRM3naG&+a^pa@wobGHOweI*Mtpp}e97E6FPk;)*zWG0V@JN4Kc|QclXyppKR5!+7-Gb?DyBz(Af1-X#2*;KN}ev z1Fz-vD_#ylBn3M4%wuJAtucSyb)b)ObVOB zun7sAv>YE_oY#bV9^O2gJ}Fq+m%n4uLLNJWNIHElxX-32-x~ol@`_PLR`vyQl!^0{ z%e(m>?L^48of^DFz|XuaToP$oZ2m2qWaM@sr18~lEoS`RIfDQDH?uN~O{`Q>872xC zut@RcUR;I0vKTuQ3Wihfao-y&GZ8}Z()T0#f2;<$Oz>^6OvsNHn=sNwz=xF@ECc+d zGRr;G*M|+OPKN68mx3c9NSZVF-{O%87S%2N;u!tx-pYQF;e9R3~&K!L{0zz%+VNUb7vS^o2+z|6>dFWbz zSsB`(a(7h8z@Bhs%8afj=#7Ud3dZZ_pu39l zN)HPj%KS^pP;K#Vo7@k!P(Bv?#eUg@A(yH+Tg)c*I+*^rwJKXuzo%ecv4wj^qz6CD z-o#-o7=AInD%svvyyI8%!&P! z@>LpADVB-eM76(2D^_^ik;p6jVA$=iLf=P?$G)sJ^b8$A16z878&PO4VqLtzx`*o$ z#w8|38Ey&T-I)Y)&n<_XSdA^!l48@f0=eQoRsGVn=7)RvMM@tS9n>)gHGBiLwG%Qv zvBaey9#ad)WmGw=Ma^=nkhVPIWPHO#WIh&Us1_F+t81%7Djj7gJ8z8hjU1)nkT@@S zDKkL(!csbKOo(S-!o#2{xzVnt_4Mycoxrb$wz(UlFK{u>Eyv38H7lP^BUcATum3fH zgGkL2Z^46hr@j5>`xlsb%Ob9u_3pA4XWm%|eV6Q#VtS@#M-kneRLlHi+vScTTM>Sv zT%*$D2Xt8uoZ+8TD~V`1<4si=eeHA^A4#P^uc2^5QDNbOevX?08q_AXzdYnKxIf_e zegR7dJuMDUi&vR1t&d!RzOSgf6ZxiGU!WI^5A5zl@1+aTF0VAn>1|HESYy#12r6J) zZtlk%^jKP96PVDVi&v~8-%PU*d%^o&xm@sLSNgN+HBNg42ix6+@6NCz?Ck8G^(%p- z0h;%#l%=ymMzg9nSFD~t0gfyJ^J zdOr`h+;wb7%^V%0J{l858PeUls#Rev9267;C*h(frZMtXz8gPmJl{F}p$gB~8&H(6 zF1(vGBtiAaY4gL}MkE@GsYI!|tZISw;OZ*9Kr#yHIi6%3{RjR3Og2vHgFjtd%9F(c zIWw4X&iqZyUa3R%vDT!1dh21Z;bLQZ0Wo~apld3J*YXmv^~RR@kgNN3%rYD6+b80z z-+4;xzOfB2>9ytXS}+D0ovR(zhSY<~mov)>lJ4DIZMK?#wdU0%@(Uq6t1j$gDl(&x z`=Kf@=Q>_aQI(%ZT2yvyFneqXZ~d-p?QRxLWShZ|K(?t3FRNTq-c8}_wF>*0LY*PW zH$zW$;@b>9QQdBCs1tjUCPOU(qtJpTQck_3pweY3EUcigW==&{V2gNe&N-O>(vM%K zTdwKHu`iD%M#EPrMc1>Lt@3&*sTh59u#(rk6K{vZ3LbWvT1i`-_eIzW(!FBEh$!j><6l-U=lW&J4DG@7zfmoaCEcy(3PL@7*> zU1>u}>A7@i$)nPOQe18xL3bD~Kt;txw_G>RH^|p6&UTVsA7}Zw&sez6?_4CA*6$36 zCYqNFJlA|p7pVTMil;I%#oR9D-B-Qq+8UNQTd$7xz3HtEZ9n_!wdlJzTwdn@`F`#92lQqM)AXWe}GEh|W;0lg#f7fg!T9vjgzhI+ye$c_}MXR*K91AU{pF zAkgC=-%>ix-IX+2r+j{hyh+TwJhftQlJ)NMID5lNu~@fr6qL|dleoYX|EJThR8^zW zSurl137+!^HqTieo=m>u9HEP-O^m%KPJ5npTdJ#{9e2lRUK9FJD!=qlZ?+X%P>?dL zr*O(ob8Y!3Y~z*3i^&74{Y-+nAZ1u-yYP>ha%7v*Aa5&Mb z*CNr`B)I@X?LLkA@$6&wi*9*`i|2Q(b%bhn+_g?-$yd=m83axw>NAbIf3e=^@a=^kNiUdI@BFbg(U=(&)j~rKe6UYg zOzKkB|JT@;heO%E{ZBE`;tdO$iARZ{+4i!_3oDtO)E@d3wJ^Xw?5|=#}ZvpbHX$srqdCEq7qL%vXT$(yO*kT5rDh>UcPMaUtNPW`W_~l;H zFX9s0;^M*Xx-!5*#GuvMe6Y{&FZf#;;eFOl?+iBIlNRom_UsSV#2DjS@1Evz#Cl)R z+@IEXm2#m6ZMxZOuf#Z_+qqLN=znoSqmN z3Lc*NqG9Z|I~n?&E-XKgW<+v2QLU}Nz`Dz%wq)!0>%Qs> zR^C9nDCuhPGG4yA1pqzzTwz)$Yw16Yf0S40Hp3N{?4vw$ZTXG8BDb>CzL+0b6A$6TI8w-gV>2KMu+D21xlk*9iYHO**F!NB` z+Lpvqji4p}u8Aeasdp^!@7D;z`3;}$O>#^^OE9YBnqBTfP-JAr zJb=xqoc8lQ6{EvF4%p5JUh(u)sv(03Y=1|E6{j6Ww{1WNm5=I}Ms)}+P(_valB=mr z&+H#ahm^1(#1@jrAVLgKx&u}w*QL1s*u^rDu!RoM)og8kTF-1(6}{%zk#Dz8q-EEr1>WG?mL)s7L3DvkM+=!(*!_I5=`{ zH^#Qsq~^2d5uth5P-yKXEAwq~Lxwx|OqO(E zS7O}oq7z}3?~8hH5R~teo$)ZcwC&b9x8em1o7DLwMRClh@mrh6!t%w!tqiFZ$sk%0 zU?l|xtg8atMF!e=T{_vPupKRR&qGu1f@3D}WaVwXS+%lkz>RH_WJm$DUicTNj=C;MKwqL)TrlEPoSij&YZD~=V<(VWp6Zv<_IFd`OmJKn&DndnC#TD zpQ+;T2D@a!tVwVbTVyr435PQ4GpC% z4G4s#v`5m*e+|F%Ia6lOrXoM*teMBtcJieU z47$!ceoVPY$?Eu}2g^O#+m|)mYUP5f&Oq0121}qNXcXh_JseBJ_Fo@K&;MST6If9? z#@pY!;L>>{Or%FhSW>bLH+u-3-PGJ^$Uoc)pIO7Kw|?$c8$snv{sTLYM(96%68^kUGI@?qC(Gyk%ROzt|{8@>D4swRm$P_Rko&(o&y9_5)~WG^TqV} zR8mJvKC=tIOwJ~4Lw$fVR44NxWYUWbs$2HF2jd=o!HXDH4L+D_Y! zSwZSVSpOV1c1kx?Wo;}p)HX-6h_N^!l>5wS!DAFvd9O{gb8s~S9hK94DoFM89`U)(N3JF>k02!OegM z`L3Ir)YHo)DHnoKY(GcEVnSo>Y@4!|J_Suc__)$0uQzs-HdRBjK#>_f6tNU0?!_T{ zj)zkc0;%u;4M}P2v1Z%rzS{i03rcb1#_shxGn4-Ba`+Sd1=J~X97(eZ;q(SpqD?Jf z9(m#R%3tUdwW7;a53)@8S?mA$Lhk8Ulf4#RU>z3?UqCI7W*1bAB0&(e072M6f#CU)6iWU`Vb|0ZE!!Udpd%LxabhSY==g_ zp=U+}Bz|`09dHxAdGiWDq?DUuek{$J09!EuU^V%MLi)+$NqoUPg`(f6`rM~k>kZ$Y?9fU5-q3D1OS&?0b7t}N*wzGl|fWqFlQ zFt44gLR35`${=_y{Gi*|8_pzFICcvhUR*ba6nu#AxC82OhKZA)d^w5u;Ytn>*lhsA zBC=$j+OaePCbBLx~Z@SpQxj9-cNoZv&f0VLn(#oH={;s#5+U3CBZx zqX%fV?usC_oGkraqZ0z%Lg}1U0F)kv!+J@xn)ECQ_!|%phymamAZI>O3PQRpAyr{f z(dN(Xk_KjG{cCGDsD*NTg6RirypztOpD&=#Ks)M}Z(5~r7|;QP&vJ^e1&dscSh(B% zFHf*8+R+p{!Vq;sUr;r?uDI#M%M@Hse_Kjx*ZB~?3dd+iBM`K!fij_&`)q}`Yh*kI zOZnPx94?RUvNQ+1h`nm#?ye_GPrpX$+QS|UX9zN zEs$~hJ7lN!$s-29Hba5mz~NF!>lF2pF`At;V!_Zm<%TJAt&cJ8O*|2G*qJ%IuR)ml z1qN4oGezIR!b)_c@O$oRg(1e{)0tw^J=3NDAwz$&a8Yk3q7>eiz=ZcFze# z7B+D32PA&H2l$*!da&rGb!XPd@&Y7y_k&7`i!z|ObITW=_##Pq2P@~r!7|QJa2GOb zcdKeG!jo=9wO9u47o`yVK!YkxMH}|?b7daP$U70gqy2wCW)4=@3b?`f5OL;+L5)=U?Nvfu zBqlM9-HLyS4iXt*{@tHnnTKPe43^`9ViKw%L)QSgv~c>xa@t}tKn zNXq=pd;C7}zjuWdU!;s~u@sSFw}Gv58^H8)oq_8~gbl)6>k#de2PvCsFjC|7$!W20 zDSQ-?$;I@^$hyzQg05%MleuMU8yh9a)t_Vs(?dgo$^~G~Yck0H2C!eBv|J4}ktUXbo3`s>BlnaY)z2_0GbM=%d#tS;>Q zlt>I`=Tg;%@Lx=X(o5hDpRTJX=Hs8pQO(#uXzL3B>J3tD_oC#zT=sd=zmRg337k|X zWf964FvcJ=X+Z0t#%RbbQT05%o+$NO+2H2MqKR-@H$*wjO_3DR)n@82*jN&dCP{f} z!6v*h#d(3;O4^tQdP-v$t5Z8bFv<+Lxj_ZEj?T^n$bBX~Zdi&kVEKboF^Cp4-=CcE z95)YKHp+vO^Kvv^EX`lLyU{bVvlPp-kgyI3u|Oe>mb#K1K{!Q+Kkmze@?Mml`+I}~ zQ&MiGVx@=7{?CZ3dC#Qd?gjT3C+2eHJZj~R(NQz9?UnMJuIz1Tu_Iffx)(}`5R*VM zEiClqRJu&J#v~lg^*^nL%H%G-9XRRb2_&F^1g_5DG#`4}ol>@C*r=d6rY+{9HQck0zd68cW7OUbGX z>tWrQu&l>zOL4fi{88oi?6H{cjMnYS?`rZU$B!VwLuWnXlamRBA&Pl=+6?k*zR5_j zD}G6_v9T2XGQ7|hBoe9erO0#_Ipl_@n{=6y_QDP2Ci$!>C5k!U2EoSp`6L0*U_%X{ zXxtF5v{xx6t8WQw@P}^4`PO{@7S60wjFwvLh&LW2`i`YpF1f1|76YgfM0X(`#`8Yp zEk34apni#D!ttsU6%`2u?qlT8bD+)*o%}m;)AeBAR|#!pXskCO0Y(PW7af-+s3CO$ zT>b)|X`WpNsCxtH?g|+#eJ2s$zOr}%s?yH9*Ui6&R!hE>m%O)R?RBuXrHFI7ruMcA zIwi$kBnOrxdZN95%jL2p{ciiLag!`a1R~+Wc2^!Gs?I|-6bUGN^hN!_+ZM~?bW2XK)uk@=y2}L>aW@9t6WFo@TTkji z`1a_GY_P}_4MrK6nH1}BERAo)NWeRKDrMp@#hjEi)}cXA@&EK~e-i2_!l;4q694A> zFV4{7@^Ue;YkO8*sy#ka;tu0}yC~l|IW~#nt>O8{#7`&qIhD|+1mpM&fKqN{)c$I# z9bK=9Vjt={^GQI5L7p@$?*#jUrEy(wW{GyP)cS0z$49PY+PGhy_YZs3-f;{OwOMu07xkovO?SIOCH*FC_gp z`3c@9Y*92M!1Q7yt1qN0Z=J^J>FK#s-``ob_Ve4199FLtfo&6BFIGZpsAT>`AiUiJ zPno~LRopr6=N!*&7j*;NJ7sY1oF)R{Awb3*WAjf7!#-}xqm9nFz>lB^lQ4ft$yitJ zKNu@T!P)I?&#Owf<=ykwG#Oy21qriurTa3piRFday}cw6n1zz1Kg|lZzAQIy`I^@H z`O-gUb@L_zl>#^(4HnrZWmf)DX$wU~f|$7`JMrpY)z1M?6+rqB^wI1vhx~Iz^J1*# z;i&^d!9q+0k&zOblQK~D%eolHXJKkNBop`-W980rHLGm%QnHHaY|rnW`{k_&2@RD# z+qjsR7zX)BVEU0vL7P2`8?=1IIFz?W^7ORTP-zEx84)0zqDU9aZJd?mwyG*@SM$qA z+i~13TMJlk#62`Td9XTAM2B4V#~>jB`p$Db16-cR+iTPHU2o#zm>ZoxE@G7xFHs(a zTsP^`7HkO0+1a_P$S(SJ(k=Y@l9(s z=Vb(H^T9vew^G zsOu+YWp_?rhH+K*mjNN@*zQemO@&l3_69XB#Ty5FX=0-INs@|Xkj{%}PWhk@rA`A> z?=oI0k00eR_Imbf8U=#mrvl?{EPIQEA-O%LJ|!6=h2ZsBHiVN9*uJnf&kAH#Hz_6x zI}Ex4E?u0f*RZ6K<4vUn`-`ai`XK!OcqwpBfP<+LI9!A|Ck%3cRM_)Wn-VkT&HGB= zr*Xs|Kl}{(5}l5UP!&eZXlkflxTiN<-(-SjHv&(Uo{Y}a27-NX^?_j0n>`jF_o<7I zT2mJDK3n-l&ij>C!F6uWr=QBxt~VY5e~Cv4{m9u_6RI>s&3e+&c^~YGSZBA(r>{RTbRSdg4?y}$tcDZ8RX*= z5_(`Bc1JJXL5Oh%J0PEHl{9E<2xtIhYU)0%cll~XZnTJQ=K$jq?$jud+|)fcTTai0 znczK3(Xn&cyGszIaoIGhr)+xP{-7KZ&r;6)8^Ccupm_TUS*NR)h{ zHc)WidW97+c#YIVYUYefJwl~%e+|8kn-vuTLB!*8E`rQf$LX}?3sN>4I6MH+cRsgZ zzrTxIXreMvN6yyY5Y#OZvuJ*wXc^rWs}n)z$x(+aNxuQ9_0RY&;lW!U_n4$1m;I0# z&?M9$`>p81hYu4aLaHREB-r^#-K~>E^XE7%7Hl7K!3t65*Rj|qDZSwZuR`vMcze;& z-46GZR5Jsul@A2HVLcCFq~=qLAvG`CZS;K`PVsg*>KwjT<*@GYoxaA;%gY&>dWto&k=P*-7Uu>R^Gap8bj^%`U^g% zytw0;tz0}Y3qSk6S#_OA%gI7V^~@>WDYT7AH~QG-XQXTOHWZuw)&) zw_0Om>&IP&zEHuN;?rYJ^a4`EJtXJ75zPt7MA?hwd!BQ^6-48$qHny!DzFjH3{^<8 zeBgVP%^6zS-r_pnosOEFS3=(*F_a7c69LY;MQP)KC@isZYOADUg65m))Ccx<-On*&n@zDEiKU@rwDgJ zJ&#k58yMKGA5#W&LwMUAZ+7u0)^gf+Yj6|M>;XurG*WO@jg14t= z_|k26zUSP(?k=!?+nYFDB_4w57m?cX^=~*eSC#j< zBx?VCTf*$GA(o3IY~n@S5pz1yBrlBb3k+0{FFj;`U+db166}s5Hm~dIJca%H+xV}GyF)Lb4OKT)-1^qsDoSE1tKNo` zET^REXr21fQcl%Vom`e?uhOiFWvdHMv@RcaYn{Kdj8^Wiy?PsDe<;vEGCf_N4No7jl$q(oqXk?_e|L| zy({v(yZbFVJwuv;G?!axVPmhiQTM|OBi7vwQ1eV6x&T3fWaqOYPY=wbn6cS?Q&Z_5 zKf#w1l(MU`Kp@T{JL0?wwGpg1%RwslH;i)iW|b=!r=SZ>3A}{ozKUCRTP6 z5qmA}sF8l~hb>1of6$hqBnziXB-q~Oq408go}wBfG@FF{&5;-d4SF)Fz(4aB7r=Ku zAEQiQ`HouYDDuqelg))0K8T-z;*GD)|N2HA5CYyza4WAcgXpoodxXcKre5%-1}6~M(@F>!j6P`Cb=x)k z18!C$o8huu$Y6dlam0^DZ^D@6qPZP zU|Yp#+{EM+AKKa~Lp*ejH`ez}wRCv3LvGy$L%2s!LQ+yc*u!Y{mhkH5BI@yw&hN_E zJkDaD&sHfWEZj&zjbH`Es$4W@IF4KI%2g#5+4T2;ap}AWfrsI!x*q+ktg|uElR7kG zcPONM4=MJslfJuE+}sxC{1XLH!|(q zEj?H??*B?IC7HO0!t3j6Ud?n_mo@0J`O+dSR!g^ey8l94+}kyWEccv@)Huz~d`_<) zd`ffKj~+(1OzUEs?JlY1V8gUEJB+>QJVkXHAJqCOJdc5d;sbdI*vBJf|!gHL3a&BIH z6)o0N!Xo3gv;QCb(^lf}r^wO}6n?{fmWOBLCxghq(RiWo-nAu)S^aKX(>$MdQ)Y6F zGvt`tDzB!(ZJWTKlF%~I&UV0_+v;5u(zQP`tw`5h(`Vq4urO+uHOQNDa#jahi}eJr zX=iTZvbTY`onZ_qa>h@Jjd$l`-HdLQt!#MY_nJQJSd!K{+b zERKeMv^%o^@(4_8$ciICD^R&-6c-^tT}GT4lFB`S_#h3Vx?WALloXyY;rjmUCFz>6lI;o1u%cJR`2~lP*_!Yx9=Ls!I)T=KH~|J}3L- zYqKr?vi%n1ot4{u9Iuf~pddV73IMU=A4u5q@(_~<1&*Qo5-~0@u@9X2>-TGN#lp*Y zGg+Gp0Vol*H#RVMCkk8ho|G#SAoCO-p&dGBB1kgK0_+*xU3x3&clsM0b5@vkzLlN0 z@T@PkxYEi3AAmqm#VFm8)!|O`&8|g(iY8lS#DPw?m2v9&-!Ax>=vsr=C)4fr5izU9jC=tg$mcz0D=c7G5C@(1jWXmt|IC>VPPk;lPldps%7?R3<~NH z*A|4*eZE@G0TBF1^uRqmU)gFbn{~gcB0<#TT-qX8Py?|13o<0=^c6 zBIy}HE(;rSJbw40LSIjB3dR8Hkb(K}x9TriL^Bg~sE%{qyW1rxPF#A5rj31pp?wr> zXyCwDTF8}j#d9)DIxzCWw9k-CR1HpTRK|cG1A#{ntnGC8Ek`Z;ORC%GU9sn*v%sDa z=jsItu)Vow7}&3tbSj|NxJ8dOKGa?gZG3hH@y!V}hdk1`A)zOqsP?S#f?$sjhP@>w zNm>d0#m&?+Nz@?B!qotz3aOl04D!lo%eERQUc?}O@)Gb#i2v)AS#bfERmU`^Ub*Bs z9%CkD6A#Y^ukX7R25# z^ytY*STTSov>%hfI+<3u$UC!~2GeupUoYjXQD|xm+Cj}BopZ!e5P*pQXN!?i&>w@t z)1aZrFc0b3UUOR=czjzasv^JbeH+4wlJvl{hc$CMEBS)A&DE0F^`fUNhdlMhp;wvY z@)v1ibR$ylIDLgICUF5P9=t~rN(A3iKvDQK-~)u-!{mNsfH zzrl(B!3W=dV;~vu1*gZPulR4GYZ4SoI%qFM-LQB*99kQ%d%esdDiTw3E=Se*@GY^& z@Q~;YxocQ*9$|F2&sw?<+ltg+iPH(xBhWyABPb8ilU9&#QG~Cdqj|De#x-*uZ~yhbiya^ zq9O2s%ih~yAqPbXjT*7oa0D?Sd^B(;HLI?;t&7xhAVdXHpwNyE5ioI>;vzR)d0ljC z_uFm_P^&k}g0aAfb~}RofJZTmTjWq_2<|ZaHhFriXSrBy5;TE1rnV^4vhWuh{LI>OH*nIbL@JNEK6{jon zzl%L&8aM{)T+p`@h=9FA#$GXBF9#?W8ZUkjlCdjsU`ezqF89UCS9V|e{SEJ8B3qP5 zaRDL0M$20WzKV|YRUWybWkjQZ;xj&R8R9WKuShHm_=ShV?Vr>l`1?P3I5_oBG70?E zL`M1`IR0y%(szcdOen%me;M(7?a%XyF1fo~t19SQJ6|KXqgph4NcUN!`PUu`lL$;Y z`DAOwbgbHY>u$t$r{t=J2kBiz_$7E}1M+a^AuDMjl64*G@D`Hz%R}+2xxFtjjV+y$ zM2KElfDEM_%>8Z573mpGw%@HQT1ca1A+&u+gJD7+|h6h{AHSVI<+$HM#o*c?U;6WI(E#>0xyHk0) zj}4gBJb(QUUoEDVB$W-tMeRLvlMAd}MT)fb*1O(WSKayJuwjUhNgyzSns;7XuM6Z? zTi*1h^6EeM{a!!=R20dsw{V>+8Vfb48tTCs6aUp`g!g2sFG97Mu59g0B2>DzXKpP? z{xI9?eqMC-UF{^PJPqV)RX$lwf}Kwn42fG&yK<&hW zErLJEVSyL=xc}j5gb1tZNPM)ztWryXpYO?Z11>C4+*Kh{J$byl%DTXHlbATXLPKnL zvtd!U<2Xb534hHK=X<=MY$XxOnyc)X-y0&80j=LOD-iWC{a05KW#N0Vht95lmIuO? zjcRWZI>NAnZhnWF^il_rZL#_JMo1DkS5Bz7w3bqJC~SCejA7V^nSPPZQ@ zvd;Wqy|*v2dVe@w5%17Y+8-ji_j(qx!h@2e7K2!o{_WkFN&=c|={k{n=kqk3IUY zr{MEtBZ^&});|P<)cx~_y(Kr6hUT{$O6km2mv2N4**VG8{hq-eM7>$jZs0kU%Dw)5 z#z|=N+z(=+SM)J@prc6#Oa5N44Q^Nt>b^lyVBOG%l=~5+m LwLAH@%>(}jbhV$f literal 61150 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 - - - - - - - OrderReceivedEvent - _6-652 - _6-674 - CalmCustomerTask - - - _6-463 - - - _6-514 - _6-565 - _6-616 - - - - _6-630 - - - - _6-630 - _6-691 - _6-693 - - - _6-691 - _6-746 - _6-748 - - - - _6-748 - _6-746 - - - _6-693 - _6-632 - - - _6-632 - _6-634 - - - _6-634 - _6-636 - - - _6-636 - - - - - - - - - - - - - - - _6-125 - - - _6-125 - _6-178 - - - _6-178 - _6-420 - - - _6-420 - _6-430 - _6-422 - _6-424 - - - _6-422 - _6-428 - - - - _6-424 - _6-426 - - - - - - _6-426 - _6-430 - - - _6-428 - _6-434 - - - _6-434 - _6-436 - - - _6-436 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + OrderReceivedEvent + _6-652 + _6-674 + CalmCustomerTask + + + _6-463 + + + _6-514 + _6-565 + _6-616 + + + + _6-630 + + + + _6-630 + _6-691 + _6-693 + + + _6-691 + _6-746 + _6-748 + + + + _6-748 + _6-746 + + + _6-693 + _6-632 + + + _6-632 + _6-634 + + + _6-634 + _6-636 + + + _6-636 + + + + + + + + + + + + + + + _6-125 + + + _6-125 + _6-178 + + + _6-178 + _6-420 + + + _6-420 + _6-430 + _6-422 + _6-424 + + + _6-422 + _6-428 + + + + _6-424 + _6-426 + + + + + + _6-426 + _6-430 + + + _6-428 + _6-434 + + + _6-434 + _6-436 + + + _6-436 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/custom-elements/test/TestHelper.js b/custom-elements/test/TestHelper.js new file mode 100644 index 00000000..674586f6 --- /dev/null +++ b/custom-elements/test/TestHelper.js @@ -0,0 +1,19 @@ +'use strict'; + +var TestHelper = module.exports = require('bpmn-js/test/helper'); + +TestHelper.insertCSS('diagram-js.css', require('diagram-js/assets/diagram-js.css')); +TestHelper.insertCSS('bpmn-embedded.css', require('bpmn-js/assets/bpmn-font/css/bpmn-embedded.css')); + +TestHelper.insertCSS('diagram-js-testing.css', + '.test-container .result { height: 500px; }' + '.test-container > div' +); + +TestHelper.insertCSS('custom-modeler-testing.css', + '.icon-custom-triangle {' + + 'background: url(\'data:image/svg+xml;utf8,\');' + + '}' + + '.icon-custom-circle {' + + 'background: url(\'data:image/svg+xml;utf8,\');' + + '}' +); diff --git a/custom-elements/test/config/karma.unit.js b/custom-elements/test/config/karma.unit.js new file mode 100644 index 00000000..1eaa0079 --- /dev/null +++ b/custom-elements/test/config/karma.unit.js @@ -0,0 +1,33 @@ +'use strict'; + +module.exports = function(karma) { + karma.set({ + + basePath: '../../', + + frameworks: [ 'browserify', 'mocha', 'chai' ], + + files: [ + 'test/spec/**/*Spec.js' + ], + + reporters: [ 'spec' ], + + preprocessors: { + 'test/spec/**/*Spec.js': [ 'browserify' ] + }, + + browsers: [ 'PhantomJS' ], + + browserNoActivityTimeout: 30000, + + singleRun: false, + autoWatch: true, + + // browserify configuration + browserify: { + debug: true, + transform: [ [ 'stringify', { global: true, extensions: [ '.bpmn', '.xml', '.css' ] } ] ] + } + }); +}; diff --git a/custom-elements/test/spec/CustomModelerSpec.js b/custom-elements/test/spec/CustomModelerSpec.js new file mode 100644 index 00000000..4dbca4d5 --- /dev/null +++ b/custom-elements/test/spec/CustomModelerSpec.js @@ -0,0 +1,119 @@ +'use strict'; + +var TestHelper = require('../TestHelper'); + +var TestContainer = require('mocha-test-container-support'); + +/* global bootstrapModeler, inject */ + +var CustomModeler = require('../../app/custom-modeler'); + + +describe('custom modeler', function() { + + var xml = require('./diagram.bpmn'); + + var container; + + beforeEach(function() { + container = TestContainer.get(this); + }); + + + describe('custom elements', function() { + + var modeler; + + // spin up modeler with custom element before each test + beforeEach(function(done) { + + modeler = new CustomModeler({ container: container }); + + modeler.importXML(xml, function(err) { + if (!err) { + done(); + } + }); + + }); + + + it('should import custom element', function() { + + // given + var elementRegistry = modeler.get('elementRegistry'), + customElements = modeler.getCustomElements(); + + // when + var customElement = { + type: 'custom:triangle', + id: 'CustomTriangle_1', + x: 300, + y: 200 + }; + + modeler.addCustomElements([ customElement ]); + var customTriangle = elementRegistry.get('CustomTriangle_1'); + + // then + expect(customTriangle).to.exist; + expect(customElements).to.contain(customElement); + + }); + + }); + + + describe('custom connections', function() { + + var modeler; + + // spin up modeler with custom element before each test + beforeEach(function(done) { + modeler = new CustomModeler({ container: container }); + + modeler.importXML(xml, function(err) { + if (!err) { + modeler.addCustomElements([{ + type: 'custom:triangle', + id: 'CustomTriangle_1', + x: 300, + y: 200 + }]); + + done(); + } + }); + }); + + + it('should import custom connection', function() { + + // given + var elementRegistry = modeler.get('elementRegistry'); + var customElements = modeler.getCustomElements(); + + // when + var customElement = { + type: 'custom:connection', + id: 'CustomConnection_1', + source: 'CustomTriangle_1', + target: 'Task_1', + waypoints: [ + { x: 100, y: 100 }, + { x: 200, y: 300 } + ] + }; + + modeler.addCustomElements([ customElement ]); + var customConnection = elementRegistry.get('CustomConnection_1'); + + // then + expect(customConnection).to.exist; + expect(customElements).to.contain(customElement); + + }); + + }); + +}); diff --git a/custom-elements/test/spec/CustomModelingSpec.js b/custom-elements/test/spec/CustomModelingSpec.js new file mode 100644 index 00000000..e3a63062 --- /dev/null +++ b/custom-elements/test/spec/CustomModelingSpec.js @@ -0,0 +1,275 @@ +'use strict'; + +var TestHelper = require('../TestHelper'); + +var assign = require('lodash/object/assign'); + +/* global bootstrapModeler, inject */ + +var CustomModeler = require('../../app/custom-modeler'), + customModules = CustomModeler._modules; + +var coreModule = require('bpmn-js/lib/core'); + + +describe('custom modeling', function() { + + var xml = require('./diagram.bpmn'); + + beforeEach(bootstrapBpmnJS(CustomModeler, xml)); + + + describe('custom elements', function() { + + beforeEach(inject(function(bpmnjs) { + + var customShape = { + type: 'custom:triangle', + id: 'CustomTriangle_1', + x: 300, + y: 300 + }; + + bpmnjs.addCustomElements([ customShape ]); + + })); + + + it('should export custom element', inject(function(bpmnjs, elementRegistry, modeling) { + + // given + var customElement = { + type: 'custom:circle', + id: 'CustomCircle_1', + x: 200, + y: 400 + }; + + var position = { x: customElement.x, y: customElement.y }, + target = elementRegistry.get('Process_1'); + + modeling.createShape( + assign({ businessObject: customElement }, customElement), + position, + target + ); + + // when + var customElements = bpmnjs.getCustomElements(); + + // then + expect(customElements).to.contain(customElement); + + })); + + + it('should not resize custom shape', inject(function(elementRegistry, rules) { + + // given + var customElement = elementRegistry.get('CustomTriangle_1'); + + // when + var allowed = rules.allowed('resize', { shape: customElement }); + + // then + expect(allowed).to.be.false; + })); + + + it('should update custom element', inject(function(elementRegistry, modeling) { + + // given + var customElement = elementRegistry.get('CustomTriangle_1'); + + // when + modeling.moveShape(customElement, { x: 200, y: 50 }, customElement.parent); + + // then + expect(customElement.businessObject.x).to.equal(500); + expect(customElement.businessObject.y).to.equal(350); + })); + + + it('should remove deleted shape from _customElements', inject(function(bpmnjs, elementRegistry, modeling) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + customElements = bpmnjs.getCustomElements(); + + // when + modeling.removeShape(customShape); + + // then + expect(customElements.length).to.equal(0); + })); + + }); + + + describe('custom connections', function() { + + beforeEach(inject(function(bpmnjs) { + + var customShape = { + type: 'custom:triangle', + id: 'CustomTriangle_1', + x: 400, + y: 300 + }; + + bpmnjs.addCustomElements([ customShape ]); + })); + + + it('should export custom connection', inject(function(bpmnjs, elementRegistry, modeling) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + taskShape = elementRegistry.get('Task_1'); + + modeling.connect(customShape, taskShape, { type: 'custom:connection', id: 'CustomConnection_1' }); + + // when + var customElements = bpmnjs.getCustomElements(); + + // then + var ids = customElements.map(function(element) { + return element.id; + }); + + expect(ids).to.include('CustomConnection_1'); + })); + + + it('should connect custom shape to task', inject(function(bpmnjs, elementRegistry, modeling, rules) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + taskShape = elementRegistry.get('Task_1'); + + // when + var allowed = rules.allowed('connection.create', { + source: customShape, + target: taskShape + }); + + modeling.connect(customShape, taskShape, rules.allowed('connection.create', { + source: customShape, + target: taskShape + })); + + // then + expect(allowed).to.eql({ type: 'custom:connection' }); + + expect(customShape.outgoing.length).to.equal(1); + expect(taskShape.outgoing.length).to.equal(1); + + expect(bpmnjs.getCustomElements().length).to.equal(2); + })); + + + it('should not connect custom shape to start event', inject(function(elementRegistry, rules) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + startEventShape = elementRegistry.get('StartEvent_1'); + + // when + var allowed = rules.allowed('connection.create', { + source: customShape, + target: startEventShape + }); + + // then + expect(allowed).to.be.false; + })); + + + it('should reconnect start', inject(function(bpmnjs, elementRegistry, modeling) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + taskShape = elementRegistry.get('Task_1'); + + var customConnection = modeling.connect(customShape, taskShape, { type: 'custom:connection' }); + + bpmnjs.addCustomElements([{ + type: 'custom:circle', + id: 'CustomCircle_1', + x: 200, + y: 300 + }]); + + var customCircle = elementRegistry.get('CustomCircle_1'); + + // when + modeling.reconnectStart(customConnection, customCircle, { + x: customCircle.x + customCircle.width / 2, + y: customCircle.y + customCircle.height / 2} + ); + + // then + expect(customConnection.source).to.equal(customCircle); + expect(customConnection.target).to.equal(taskShape); + })); + + + it('should reconnect end', inject(function(bpmnjs, elementRegistry, modeling) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + taskShape1 = elementRegistry.get('Task_1'), + taskShape2 = elementRegistry.get('Task_2'); + + var customConnection = modeling.connect(customShape, taskShape1, { type: 'custom:connection' }); + + // when + modeling.reconnectEnd(customConnection, taskShape2, { + x: taskShape2.x + taskShape2.width / 2, + y: taskShape2.y + taskShape2.height / 2} + ); + + // then + expect(customConnection.source).to.equal(customShape); + expect(customConnection.target).to.equal(taskShape2); + })); + + + it('should update custom connection', inject(function(elementRegistry, modeling) { + + // given + var customElement = elementRegistry.get('CustomTriangle_1'), + taskShape = elementRegistry.get('Task_1'); + + var customConnection = modeling.connect(customElement, taskShape, { type: 'custom:connection' }); + + // when + modeling.moveShape(customElement, { x: 200, y: 50 }, customElement.parent); + + // then + expect(customConnection.businessObject.waypoints).to.eql([ + { x: 613, y: 364 }, + { x: 351, y: 156 } + ]); + })); + + + it('should remove deleted connection from _customElements', inject(function(bpmnjs, elementRegistry, modeling) { + + // given + var customShape = elementRegistry.get('CustomTriangle_1'), + taskShape = elementRegistry.get('Task_1'), + customElements = bpmnjs.getCustomElements(); + + var customConnection = modeling.connect(customShape, taskShape, { type: 'custom:connection' }); + + // when + modeling.removeConnection(customConnection); + + // then + expect(customElements.length).to.equal(1); + })); + + }); + +}); diff --git a/custom-elements/test/spec/diagram.bpmn b/custom-elements/test/spec/diagram.bpmn new file mode 100644 index 00000000..416c6a90 --- /dev/null +++ b/custom-elements/test/spec/diagram.bpmn @@ -0,0 +1,62 @@ + + + + + SequenceFlow_1 + + + SequenceFlow_1 + SequenceFlow_1kp6wet + + + + SequenceFlow_1o6tfcd + + + SequenceFlow_1kp6wet + SequenceFlow_1o6tfcd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +