// ==================== |-------| ====================
// ==================== | DuAEF | ====================
// ==================== |-------| ====================

// ==================== |----------| ====================
// ==================== | DuAEFLib | ====================
// ==================== |----------| ====================

/**
 * The Duduf After Effects ExtendScript Framework.<br />
 * by {@link https://rainboxlab.org Rainbox Lab}.
 * @example
 *   //encapsulate the script in a function to avoid global variables
 *   (function (thisObj) {
 *
 *       //================
 *       #include DuAEF.jsxinc
 *       DuAEF.init("Your Script Name", "1.0.2");
 *
 *       DuAEF.forumURL = 'https://forum.rainboxlab.org';
 *       DuAEF.chatURL = 'http://chat.rainboxlab.org';
 *       DuAEF.bugReportURL = 'https://github.com/Rainbox-dev/DuAEF/issues/new?template=bug_report.md';
 *       DuAEF.featureRequestURL = 'https://github.com/Rainbox-dev/DuAEF/issues/new?template=feature_request.md';
 *       DuAEF.aboutURL = 'https://rainboxlab.org/tools/duik/';
 *       DuAEF.scriptAbout = 'The Duduf After Effects Framework\nDeveloped by Nicolas Dufresne and Contributors.\n\nLicensed under the GNU General Public License v3.';
 *       DuAEF.newsServer = 'rainboxprod.net'
 *       DuAEF.newsArgs = 'wp/?call_custom_simple_rss=1&csrp_show_meta=0&csrp_cat=20';
 *
 *       // ================ FUNCTIONS =============
 *       //MAIN
 *
 *
 *       //UI EVENTS
 *
 *
 *       // _______ UI SETUP _______
 *       var ui = DuAEF.DuScriptUI.createUI(thisObj);
 *
 *       // ============ UI CONTENT =================
 *       var contents = ui.contents;
 *       DuAEF.DuScriptUI.addStaticText(contents, "Welcome to " + DuAEF.scriptName);
 *
 *
 *       //Show UI
 *       DuAEF.DuScriptUI.showUI(ui);
 *       DuAEF.enterRunTime();
 *   })(this);
 * @namespace
 * @author Nicolas Dufresne and contributors
 * @copyright 2017 - 2019 Nicolas Dufresne, Rainbox Laboratory
 * @version 0.2.0
 * @license GPL-3.0 <br />
 * DuAEF is free software: you can redistribute it and/or modify<br />
 * it under the terms of the GNU General Public License as published by<br />
 * the Free Software Foundation, either version 3 of the License, or<br />
 * (at your option) any later version.<br />
 *<br />
 * DuAEF is distributed in the hope that it will be useful,<br />
 * but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br />
 * GNU General Public License for more details.<br />
 *<br />
 * You should have received a copy of the GNU General Public License<br />
 * along with DuAEF. If not, see {@link http://www.gnu.org/licenses/}.
 */
var DuAEF = {};
/**
 * The Current DuAEF Version
 * @readonly
 * @memberof DuAEF
 * @type {string}
 */
DuAEF.version = new DuVersion('0.2.0');
/**
 * Set to true and enable debug mode if you're a developper
 * @memberof DuAEF
 * @type {boolean}
 */
DuAEF.debug = false;
/**
 * The name of the script using this instance of DuAEF. Must be set by {@link  DuAEF.init}.
 * @memberof DuAEF
 * @type {string}
 * @readonly
 */
DuAEF.scriptName = "DuAEF";
/**
 * The version of the script using this instance of DuAEF. Must be set by {@link  DuAEF.init}.
 * @memberof DuAEF
 * @type {DuVersion}
 * @readonly
 */
DuAEF.scriptVersion = new DuVersion('0.0.0');
/**
 * True if the script is run for the first time (new or the version has changed since last run)
 * @memberof DuAEF
 * @type {boolean}
 * @readonly
 */
DuAEF.scriptFirstRun = true;
/**
 * The url for the forum about the script
 */
DuAEF.forumURL = '';
/**
 * The url for a chat server about the script
 */
DuAEF.chatURL = '';
/**
 * The url for reporting bugs
 */
DuAEF.bugReportURL = '';
/**
 * The url for requesting features
 */
DuAEF.featureRequestURL = '';
/**
 * The url about the script
 */
DuAEF.aboutURL = '';
/**
 * The text about the script
 */
DuAEF.scriptAbout = '';
/**
 * The RSS server providing some news (only the domain name)
 * @default 'rainboxprod.net'
 */
DuAEF.newsServer = 'rainboxprod.net';
/**
 * The  subfolder and arguments needed to get the news
 */
DuAEF.newsArgs = 'wp/feed';
/**
 * The port of the RSS server
 * @default 80
 */
DuAEF.newsPort = 80;
/**
 * The user agent to use when getting news
 */
DuAEF.newsUserAgentVersion = 'DuAEF/' + DuAEF.version.fullVersion;

/**
 * The current DuAEF File
 * @readonly
 * @memberof DuAEF
 * @type {File}
 */
DuAEF.file = new File( $.fileName );

/**
 * Enum for states.
 * @readonly
 * @enum {int}
 */
DuAEF.States = {
    NOT_SET: -1,
    INIT: 0,
    RUNTIME: 1
};

/**
 * The current state of the script
 * @type {DuAEF.States}
 */
DuAEF.state = DuAEF.States.NOT_SET;

//Initializes DuAEF
( function()
{
    //detect OS Version
    var mac = $.os.toLowerCase().indexOf( "mac" ) >= 0;
    /**
     * The current OS, true if we're on Mac OS
     * @memberof DuAEF
     * @readonly
     * @type {boolean}
     */
    DuAEF.mac = mac;
    /**
     * The current OS, true if we're on Windows
     * @memberof DuAEF
     * @readonly
     * @type {boolean}
     */
    DuAEF.win = !mac;
} )();

/**
 * This method has to be called once at the very beginning of the script, just after the inclusion of DuAEF <code>#include DuAEF.jsxinc</code>
 * @param {string} [scriptName="DuAEF"] - The name of your script, as it has to be displayed in the UI and the filesystem
 * @param {string} [scriptVersion="0.0.0"] - The version of your script, in the form "XX.XX.XX-Comment", for example "1.0.12-Beta". The "-Comment" part is optional.
 */
DuAEF.init = function( scriptName, scriptVersion )
{
    DuAEF.state = DuAEF.States.INIT;

    scriptName = def( scriptName, "DuAEF" );
    scriptVersion = def( scriptVersion, "0.0.0" );
    DuAEF.scriptName = scriptName;
    DuAEF.scriptVersion = new DuVersion(scriptVersion);

    //check if this script has already been run once
    // Check the version from latest run
    if ( app.settings.haveSetting( DuAEF.scriptName, "version" ) )
    {
        var prevVersion = app.settings.getSetting( DuAEF.scriptName, "version" );
        if ( prevVersion == scriptVersion ) DuAEF.scriptFirstRun = false;
    }
}

/**
 * This method has to be called once at the end of the script, when everything is ready and the main UI visible (after any prompt or setup during startup).
 */
DuAEF.enterRunTime = function()
{
    app.settings.saveSetting( DuAEF.scriptName, "version", DuAEF.scriptVersion.fullVersion );
    DuAEF.state = DuAEF.States.RUNTIME;

    //do post init methods
    DuAEF.DuAE.postInit();
    DuAEF.Duik.postInit();
    DuAEF.Duik.Structure.postInit();
}
// ==================== |------| ====================
// ==================== | JSON | ====================
// ==================== |------| ====================

/**
 * JSON parser.
 * @name JSON
 * @see {@link http://www.JSON.org/js.html|Json2}
 * @license Public-Domain
 */

 // We include JSON in the DuAEF Object to not share it globally
DuAEF.JSON = {};

 (function () {
     "use strict";

     var rx_one = /^[\],:{}\s]*$/;
     var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
     var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
     var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
     var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
     var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;

     function f(n) {
         // Format integers to have at least two digits.
         return (n < 10)
             ? "0" + n
             : n;
     }

     function this_value() {
         return this.valueOf();
     }

     if (typeof Date.prototype.toJSON !== "function") {

         Date.prototype.toJSON = function () {

             return isFinite(this.valueOf())
                 ? (
                     this.getUTCFullYear()
                     + "-"
                     + f(this.getUTCMonth() + 1)
                     + "-"
                     + f(this.getUTCDate())
                     + "T"
                     + f(this.getUTCHours())
                     + ":"
                     + f(this.getUTCMinutes())
                     + ":"
                     + f(this.getUTCSeconds())
                     + "Z"
                 )
                 : null;
         };

         Boolean.prototype.toJSON = this_value;
         Number.prototype.toJSON = this_value;
         String.prototype.toJSON = this_value;
     }

     var gap;
     var indent;
     var meta;
     var rep;


     function quote(string) {

 // If the string contains no control characters, no quote characters, and no
 // backslash characters, then we can safely slap some quotes around it.
 // Otherwise we must also replace the offending characters with safe escape
 // sequences.

         rx_escapable.lastIndex = 0;
         return rx_escapable.test(string)
             ? "\"" + string.replace(rx_escapable, function (a) {
                 var c = meta[a];
                 return typeof c === "string"
                     ? c
                     : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
             }) + "\""
             : "\"" + string + "\"";
     }


     function str(key, holder) {

 // Produce a string from holder[key].

         var i;          // The loop counter.
         var k;          // The member key.
         var v;          // The member value.
         var length;
         var mind = gap;
         var partial;
         var value = holder[key];

 // If the value has a toJSON method, call it to obtain a replacement value.

         if (
             value
             && typeof value === "object"
             && typeof value.toJSON === "function"
         ) {
             value = value.toJSON(key);
         }

 // If we were called with a replacer function, then call the replacer to
 // obtain a replacement value.

         if (typeof rep === "function") {
             value = rep.call(holder, key, value);
         }

 // What happens next depends on the value's type.

         switch (typeof value) {
         case "string":
             return quote(value);

         case "number":

 // JSON numbers must be finite. Encode non-finite numbers as null.

             return (isFinite(value))
                 ? String(value)
                 : "null";

         case "boolean":
         case "null":

 // If the value is a boolean or null, convert it to a string. Note:
 // typeof null does not produce "null". The case is included here in
 // the remote chance that this gets fixed someday.

             return String(value);

 // If the type is "object", we might be dealing with an object or an array or
 // null.

         case "object":

 // Due to a specification blunder in ECMAScript, typeof null is "object",
 // so watch out for that case.

             if (!value) {
                 return "null";
             }

 // Make an array to hold the partial results of stringifying this object value.

             gap += indent;
             partial = [];

 // Is the value an array?

             if (Object.prototype.toString.apply(value) === "[object Array]") {

 // The value is an array. Stringify every element. Use null as a placeholder
 // for non-JSON values.

                 length = value.length;
                 for (i = 0; i < length; i += 1) {
                     partial[i] = str(i, value) || "null";
                 }

 // Join all of the elements together, separated with commas, and wrap them in
 // brackets.

                 v = partial.length === 0
                     ? "[]"
                     : gap
                         ? (
                             "[\n"
                             + gap
                             + partial.join(",\n" + gap)
                             + "\n"
                             + mind
                             + "]"
                         )
                         : "[" + partial.join(",") + "]";
                 gap = mind;
                 return v;
             }

 // If the replacer is an array, use it to select the members to be stringified.

             if (rep && typeof rep === "object") {
                 length = rep.length;
                 for (i = 0; i < length; i += 1) {
                     if (typeof rep[i] === "string") {
                         k = rep[i];
                         v = str(k, value);
                         if (v) {
                             partial.push(quote(k) + (
                                 (gap)
                                     ? ": "
                                     : ":"
                             ) + v);
                         }
                     }
                 }
             } else {

 // Otherwise, iterate through all of the keys in the object.

                 for (k in value) {
                     if (Object.prototype.hasOwnProperty.call(value, k)) {
                         v = str(k, value);
                         if (v) {
                             partial.push(quote(k) + (
                                 (gap)
                                     ? ": "
                                     : ":"
                             ) + v);
                         }
                     }
                 }
             }

 // Join all of the member texts together, separated with commas,
 // and wrap them in braces.

             v = partial.length === 0
                 ? "{}"
                 : gap
                     ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
                     : "{" + partial.join(",") + "}";
             gap = mind;
             return v;
         }
     }

 // If the JSON object does not yet have a stringify method, give it one.

     if (typeof DuAEF.JSON.stringify !== "function") {
         meta = {    // table of character substitutions
             "\b": "\\b",
             "\t": "\\t",
             "\n": "\\n",
             "\f": "\\f",
             "\r": "\\r",
             "\"": "\\\"",
             "\\": "\\\\"
         };
         DuAEF.JSON.stringify = function (value, replacer, space) {

 // The stringify method takes a value and an optional replacer, and an optional
 // space parameter, and returns a JSON text. The replacer can be a function
 // that can replace values, or an array of strings that will select the keys.
 // A default replacer method can be provided. Use of the space parameter can
 // produce text that is more easily readable.

             var i;
             gap = "";
             indent = "";

 // If the space parameter is a number, make an indent string containing that
 // many spaces.

             if (typeof space === "number") {
                 for (i = 0; i < space; i += 1) {
                     indent += " ";
                 }

 // If the space parameter is a string, it will be used as the indent string.

             } else if (typeof space === "string") {
                 indent = space;
             }

 // If there is a replacer, it must be a function or an array.
 // Otherwise, throw an error.

             rep = replacer;
             if (replacer && typeof replacer !== "function" && (
                 typeof replacer !== "object"
                 || typeof replacer.length !== "number"
             )) {
                 throw new Error("JSON.stringify");
             }

 // Make a fake root object containing our value under the key of "".
 // Return the result of stringifying the value.

             return str("", {"": value});
         };
     }


 // If the JSON object does not yet have a parse method, give it one.

     if (typeof DuAEF.JSON.parse !== "function") {
         DuAEF.JSON.parse = function (text, reviver) {

 // The parse method takes a text and an optional reviver function, and returns
 // a JavaScript value if the text is a valid JSON text.

             var j;

             function walk(holder, key) {

 // The walk method is used to recursively walk the resulting structure so
 // that modifications can be made.

                 var k;
                 var v;
                 var value = holder[key];
                 if (value && typeof value === "object") {
                     for (k in value) {
                         if (Object.prototype.hasOwnProperty.call(value, k)) {
                             v = walk(value, k);
                             if (v !== undefined) {
                                 value[k] = v;
                             } else {
                                 delete value[k];
                             }
                         }
                     }
                 }
                 return reviver.call(holder, key, value);
             }


 // Parsing happens in four stages. In the first stage, we replace certain
 // Unicode characters with escape sequences. JavaScript handles many characters
 // incorrectly, either silently deleting them, or treating them as line endings.

             text = String(text);
             rx_dangerous.lastIndex = 0;
             if (rx_dangerous.test(text)) {
                 text = text.replace(rx_dangerous, function (a) {
                     return (
                         "\\u"
                         + ("0000" + a.charCodeAt(0).toString(16)).slice(-4)
                     );
                 });
             }

 // In the second stage, we run the text against regular expressions that look
 // for non-JSON patterns. We are especially concerned with "()" and "new"
 // because they can cause invocation, and "=" because it can cause mutation.
 // But just to be safe, we want to reject all unexpected forms.

 // We split the second stage into 4 regexp operations in order to work around
 // crippling inefficiencies in IE's and Safari's regexp engines. First we
 // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
 // replace all simple value tokens with "]" characters. Third, we delete all
 // open brackets that follow a colon or comma or that begin the text. Finally,
 // we look to see that the remaining characters are only whitespace or "]" or
 // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.

             if (
                 rx_one.test(
                     text
                         .replace(rx_two, "@")
                         .replace(rx_three, "]")
                         .replace(rx_four, "")
                 )
             ) {

 // In the third stage we use the eval function to compile the text into a
 // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
 // in JavaScript: it can begin a block or an object literal. We wrap the text
 // in parens to eliminate the ambiguity.

                 j = eval("(" + text + ")");

 // In the optional fourth stage, we recursively walk the new structure, passing
 // each name/value pair to a reviver function for possible transformation.

                 return (typeof reviver === "function")
                     ? walk({"": j}, "")
                     : j;
             }

 // If the text is not JSON parseable, then a SyntaxError is thrown.

             throw new SyntaxError("JSON.parse");
         };
     }
 }());
// ==================== |--------| ====================
// ==================== | Matrix | ====================
// ==================== |--------| ====================

/*!
  2D Transformation Matrix v2.7.5 LT
  (c) Epistemex.com 2014-2018
  License: MIT
*/

/**
  * 2D transformation matrix object initialized with identity matrix.
  *
  * @prop {number} a - scale x
  * @prop {number} b - shear y
  * @prop {number} c - shear x
  * @prop {number} d - scale y
  * @prop {number} e - translate x
  * @prop {number} f - translate y
  * @constructor
  * @overview 2D Transformation Matrix.
  * @author Epistemex
  * @version 2.7.5
  * @license MIT license (header required)
  * @copyright Epistemex.com 2014-2018
*/
function Matrix() {

	var me = this, _el;
	me._t = me.transform;

	me.a = me.d = 1;
	me.b = me.c = me.e = me.f = 0;
}

 /**
  * Create and transform a new matrix based on given matrix values, or
  * provide SVGMatrix or a (2D) DOMMatrix, WebKitCSSMatrix or another
  * instance of a generic matrix.
  *
  * @example
  *
  * var m = Matrix.from(1, 0.2, 0, 2, 120, 97);
  * var m = Matrix.from(domMatrix, ctx);
  * var m = Matrix.from(svgMatrix);
  * var m = Matrix.from(matrix);
  *
  * @param {*} a - number representing a (scale x) in [a-f], or a Matrix object containing properties a-f.
  * @param {*} [b] - b property (shear y) if a is not a matrix object, or optional canvas 2D context.
  * If vector is input this will be pre-translate for x.
  * @param {number} [c] - c property (shear x)
  * @param {number} [d] - d property (scale y)
  * @param {number} [e] - e property (translate x)
  * @param {number} [f] - f property (translate y)
  * @param {CanvasRenderingContext2D} [context] - optional canvas context to synchronize
  * @returns {Matrix} - new Matrix instance
  * @static
  */
Matrix.from = function(a, b, c, d, e, f, context) {

	var m = new Matrix(context), scale, dist, q;

	if (typeof a === "number")
	 m.setTransform(a, b, c, d, e, f);

	else {
	 if (typeof a.is2D === "boolean" && !a.is2D) throw "Cannot use 3D DOMMatrix.";
	 if (b) m.context = b;
	 m.multiply(a)
	}

	return m
 };

Matrix.prototype = {

	/**
	* Short-hand to reset current matrix to an identity matrix.
	* @returns {Matrix}
	*/
	reset: function() {
	 return this.setTransform(1, 0, 0, 1, 0, 0)
	},

	/**
	* Rotates current matrix by angle (accumulative).
	* @param {number} angle - angle in degrees
	* @returns {Matrix}
	*/
	rotate: function(angle) {
	 angle = DuAEF.DuJS.Math.toRadians(angle);
	 var
		cos = Math.cos(angle),
		sin = Math.sin(angle);

	 return this._t(cos, sin, -sin, cos, 0, 0)
	},

	/**
	* Converts a vector given as `x` and `y` to angle, and
	* rotates (accumulative). x can instead contain an object with
	* properties x and y and if so, y parameter will be ignored.
	* @param {number|*} x
	* @param {number} [y]
	* @returns {Matrix}
	*/
	rotateFromVector: function(x, y) {
	 return this.rotate(typeof x === "number" ? Math.atan2(y, x) : Math.atan2(x.y, x.x))
	},

	/**
	* Scales current matrix accumulative.
	* @param {number[]} s - scale factor [x, y]. 1 does nothing, any third value (Z) is ignored.
	* @returns {Matrix}
	*/
	scale: function(s) {
	 return this._t(s[0], 0, 0, s[1], 0, 0);
	},

	/**
	* Apply shear to the current matrix accumulative.
	* @param {number} sx - amount of shear for x
	* @param {number} sy - amount of shear for y
	* @returns {Matrix}
	*/
	shear: function(sx, sy) {
	 return this._t(1, sy, sx, 1, 0, 0)
	},

	/**
	* Apply skew to the current matrix accumulative. Angles in radians.
	* Also see [`skewDeg()`]{@link Matrix#skewDeg}.
	* @param {number} ax - angle of skew for x
	* @param {number} ay - angle of skew for y
	* @returns {Matrix}
	*/
	skew: function(ax, ay) {
	 return this.shear(Math.tan(ax), Math.tan(ay))
	},

	/**
	* Set current matrix to new absolute matrix.
	* @param {number} a - scale x
	* @param {number} b - shear y
	* @param {number} c - shear x
	* @param {number} d - scale y
	* @param {number} e - translate x
	* @param {number} f - translate y
	* @returns {Matrix}
	*/
	setTransform: function(a, b, c, d, e, f) {
	 var me = this;
	 me.a = a;
	 me.b = b;
	 me.c = c;
	 me.d = d;
	 me.e = e;
	 me.f = f;
	 return me._x()
	},

	/**
	* Translate current matrix accumulative.
	* @param {number[]} t - translation [x, y]. Any third value (Z) is ignored.
	* @returns {Matrix}
	*/
	translate: function(t) {
	 return this._t(1, 0, 0, 1, t[0], t[1]);
	},

	/**
	* Multiplies current matrix with new matrix values. Also see [`multiply()`]{@link Matrix#multiply}.
	*
	* @param {number} a2 - scale x
	* @param {number} b2 - skew y
	* @param {number} c2 - skew x
	* @param {number} d2 - scale y
	* @param {number} e2 - translate x
	* @param {number} f2 - translate y
	* @returns {Matrix}
	*/
	transform: function(a2, b2, c2, d2, e2, f2) {

	 var
		me = this,
		a1 = me.a,
		b1 = me.b,
		c1 = me.c,
		d1 = me.d,
		e1 = me.e,
		f1 = me.f;

	 /* matrix column order is:
	  *	a c e
	  *	b d f
	  *	0 0 1
	  */
	 me.a = a1 * a2 + c1 * b2;
	 me.b = b1 * a2 + d1 * b2;
	 me.c = a1 * c2 + c1 * d2;
	 me.d = b1 * c2 + d1 * d2;
	 me.e = a1 * e2 + c1 * f2 + e1;
	 me.f = b1 * e2 + d1 * f2 + f1;

	 return me._x()
	},

	/**
	* Multiplies current matrix with source matrix.
	* @param {Matrix|Matrix|DOMMatrix|SVGMatrix} m - source matrix to multiply with.
	* @returns {Matrix}
	*/
	multiply: function(m) {
	 return this._t(m.a, m.b, m.c, m.d, m.e, m.f)
	},

	/**
	* Get an inverse matrix of current matrix. The method returns a new
	* matrix with values you need to use to get to an identity matrix.
	* Context from parent matrix is not applied to the returned matrix.
	*
	* @param {boolean} [cloneContext=false] - clone current context to resulting matrix
	* @throws Exception is input matrix is not invertible
	* @returns {Matrix} - new Matrix instance
	*/
	inverse: function(cloneContext) {

	 var
		me = this,
		m  = new Matrix(cloneContext ? me.context : null),
		dt = me.determinant();

	 if (dt === 0) throw "Matrix not invertible.";

	 m.a = me.d / dt;
	 m.b = -me.b / dt;
	 m.c = -me.c / dt;
	 m.d = me.a / dt;
	 m.e = (me.c * me.f - me.d * me.e) / dt;
	 m.f = -(me.a * me.f - me.b * me.e) / dt;

	 return m
	},

	/**
	* Decompose the current matrix into simple transforms using QR.
	*
	* @returns {*} - an object containing current decomposed values (translate, rotation, scale, skew)
	* @see {@link https://en.wikipedia.org/wiki/QR_decomposition|More on QR decomposition}
	*/
	decompose: function() {

	 var
		me		= this,
		a		 = me.a,
		b		 = me.b,
		c		 = me.c,
		d		 = me.d,
		acos	  = Math.acos,
		atan	  = Math.atan,
		sqrt	  = Math.sqrt,
		pi		= Math.PI,

		translate = {x: me.e, y: me.f},
		rotation  = 0,
		scale	 = {x: 1, y: 1},
		skew	  = {x: 0, y: 0},

		determ	= a * d - b * c,	// determinant(), skip DRY here...
		r, s;

	 // Apply the QR-like decomposition.
	 if (a || b) {
		r = sqrt(a * a + b * b);
		rotation = b > 0 ? acos(a / r) : -acos(a / r);
		scale = {x: r, y: determ / r};
		skew.x = atan((a * c + b * d) / (r * r));
	 }
	 else if (c || d) {
		s = sqrt(c * c + d * d);
		rotation = pi * 0.5 - (d > 0 ? acos(-c / s) : -acos(c / s));
		scale = {x: determ / s, y: s};
		skew.y = atan((a * c + b * d) / (s * s));
	 }
	 else { // a = b = c = d = 0
		scale = {x: 0, y: 0};
	 }

	 return {
		translate: translate,
		rotation : rotation,
		scale	: scale,
		skew	 : skew
	 }
	},

	/**
	* Returns the determinant of the current matrix.
	* @returns {number}
	*/
	determinant: function() {
	 return this.a * this.d - this.b * this.c
	},

	/**
	* Apply current matrix to `x` and `y` of a point.
	* Returns a point object.
	*
	* @param {number[]} pt - the point to transform ([x, y]).<br />
	* If an optionnal Z value is provided, it will be kept without transformation.
	* @returns {number[]} A new transformed point [x, y]. If pt had a third value, it is returned too, as it was without transformation.
	*/
	applyToPoint: function(pt) {
	 var me = this;
	 var x = pt[0] * me.a + pt[1] * me.c + me.e;
	 var y = pt[0] * me.b + pt[1] * me.d + me.f;
	 var result = [x,y];
	 if (pt.length == 3) result.push(pt[2]);
	 return result;
	},

	/**
	* Returns true if matrix is an identity matrix (no transforms applied).
	* @returns {boolean}
	*/
	isIdentity: function() {
	 var me = this;
	 return me.a === 1 && !me.b && !me.c && me.d === 1 && !me.e && !me.f
	},

	/**
	* Returns true if matrix is invertible
	* @returns {boolean}
	*/
	isInvertible: function() {
	 return !this._q(this.determinant(), 0)
	},

	/**
	* The method is intended for situations where scale is accumulated
	* via multiplications, to detect situations where scale becomes
	* "trapped" with a value of zero. And in which case scale must be
	* set explicitly to a non-zero value.
	*
	* @returns {boolean}
	*/
	isValid: function() {
	 return !(this.a * this.d)
	},

	/**
	* Compares current matrix with another matrix. Returns true if equal
	* (within epsilon tolerance).
	* @param {Matrix|Matrix|DOMMatrix|SVGMatrix} m - matrix to compare this matrix with
	* @returns {boolean}
	*/
	isEqual: function(m) {

	 var
		me = this,
		q = me._q;

	 return  q(me.a, m.a) &&
			 q(me.b, m.b) &&
			 q(me.c, m.c) &&
			 q(me.d, m.d) &&
			 q(me.e, m.e) &&
			 q(me.f, m.f)
	},

	/**
	* Clones current instance and returning a new matrix.
	* @param {boolean} [noContext=false] don't clone context reference if true
	* @returns {Matrix} - a new Matrix instance with identical transformations as this instance
	*/
	clone: function(noContext) {
	 return new Matrix(noContext ? null : this.context).multiply(this)
	},

	/**
	* Generates a string that can be used with CSS `transform`.
	* @example
	*	 element.style.transform = m.toCSS();
	* @returns {string}
	*/
	toCSS: function() {
	 return "matrix(" + this.toArray() + ")"
	},

	/**
	* Generates a `matrix3d()` string that can be used with CSS `transform`.
	* Although the matrix is for 2D use you may see performance benefits
	* on some devices using a 3D CSS transform instead of a 2D.
	* @example
	*	 element.style.transform = m.toCSS3D();
	* @returns {string}
	*/
	toCSS3D: function() {
	 var me = this;
	 return "matrix3d(" + me.a + "," + me.b + ",0,0," + me.c + "," + me.d + ",0,0,0,0,1,0," + me.e + "," + me.f + ",0,1)"
	},

	/**
	* Returns a JSON compatible string of current matrix.
	* @returns {string}
	*/
	toJSON: function() {
	 var me = this;
	 return '{"a":' + me.a + ',"b":' + me.b + ',"c":' + me.c + ',"d":' + me.d + ',"e":' + me.e + ',"f":' + me.f + '}'
	},

	/**
	* Compares floating point values with some tolerance (epsilon)
	* @param {number} f1 - float 1
	* @param {number} f2 - float 2
	* @returns {boolean}
	* @private
	*/
	_q: function(f1, f2) {
	 return Math.abs(f1 - f2) < 1e-14
	},

	/**
	* Apply current absolute matrix to context if defined, to sync it.
	* Apply current absolute matrix to element if defined, to sync it.
	* @returns {Matrix}
	* @private
	*/
	_x: function() {

	 var me = this;

	 if (me.context)
		me.context.setTransform(me.a, me.b, me.c, me.d, me.e, me.f);

	 return me
	}
};
// ==================== |------------| ====================
// ==================== | SeedRandom | ====================
// ==================== |------------| ====================

/**
 * Adds a new Math.seedRandom() method, used as a workaround for a bug in Math.random() with After Effects on Mac OS
 * @name seedRandom
 * @author David Bau
 * @copyright David Bau
 * @license MIT
 */

!function(a,b){function c(c,j,k){var n=[];j=1==j?{entropy:!0}:j||{};var s=g(f(j.entropy?[c,i(a)]:null==c?h():c,3),n),t=new d(n),u=function(){for(var a=t.g(m),b=p,c=0;q>a;)a=(a+c)*l,b*=l,c=t.g(1);for(;a>=r;)a/=2,b/=2,c>>>=1;return(a+c)/b};return u.int32=function(){return 0|t.g(4)},u.quick=function(){return t.g(4)/4294967296},u["double"]=u,g(i(t.S),a),(j.pass||k||function(a,c,d,f){return f&&(f.S&&e(f,t),a.state=function(){return e(t,{})}),d?(b[o]=a,c):a})(u,s,"global"in j?j.global:this==b,j.state)}function d(a){var b,c=a.length,d=this,e=0,f=d.i=d.j=0,g=d.S=[];for(c||(a=[c++]);l>e;)g[e]=e++;for(e=0;l>e;e++)g[e]=g[f=s&f+a[e%c]+(b=g[e])],g[f]=b;(d.g=function(a){for(var b,c=0,e=d.i,f=d.j,g=d.S;a--;)b=g[e=s&e+1],c=c*l+g[s&(g[e]=g[f=s&f+b])+(g[f]=b)];return d.i=e,d.j=f,c})(l)}function e(a,b){return b.i=a.i,b.j=a.j,b.S=a.S.slice(),b}function f(a,b){var c,d=[],e=typeof a;if(b&&"object"==e)for(c in a)try{d.push(f(a[c],b-1))}catch(g){}return d.length?d:"string"==e?a:a+"\0"}function g(a,b){for(var c,d=a+"",e=0;e<d.length;)b[s&e]=s&(c^=19*b[s&e])+d.charCodeAt(e++);return i(b)}function h(){try{if(j)return i(j.randomBytes(l));var b=new Uint8Array(l);return(k.crypto||k.msCrypto).getRandomValues(b),i(b)}catch(c){var d=k.navigator,e=d&&d.plugins;return[+new Date,k,e,k.screen,i(a)]}}function i(a){return String.fromCharCode.apply(0,a)}var j,k=this,l=256,m=6,n=52,o="random",p=b.pow(l,m),q=b.pow(2,n),r=2*q,s=l-1;if(b["seed"+o]=c,g(b.random(),a),"object"==typeof module&&module.exports){module.exports=c;try{j=require("crypto")}catch(t){}}else"function"==typeof define&&define.amd&&define(function(){return c})}([],Math);
// ==================== |-------------| ====================
// ==================== | colorPicker | ====================
// ==================== |-------------| ====================

;(function(){
/**
 * ColorPicker v2.0 for Adobe scripting.<br />
 * 2016-5-11 -> 2016-7-24<br />
 * This is a rebuilt color picker for Adobe scripting.<br />
 * Support all Adobe softwares such as PS,AI,PR and so on.<br />
 * See usage on {@link github.com/Smallpath/AdobeColorPicker}
 * @name colorPicker
 * @author smallpath
 * @copyright smallpath
 * @license MIT
 * @link https://github.com/Smallpath/AdobeColorPicker
 */
function colorPicker(inputColour,options){
    if(!(this instanceof colorPicker))
        return new colorPicker(inputColour,options)

    this.options = {
        name : "Adobe Color Picker ",
        version : "v2.0",
        shouldUpdateCursor: false,
        backupLocation : [],

        windowType:"dialog",  // "dialog","palette" and the reference of Panel
    }

    if(options && colorPicker.isType(options,"Object")){
        for(var i in options)
            this.options[i] = options[i];
    }
    
    this.inputColour = colorPicker.parseColor(inputColour);
    this.outputColour = this.inputColour.slice(0);
    this.initSetting();
    return this.showColorPicker();
}

colorPicker.parseColor = function(inputValue){
        if(!inputValue)
            return [1,1,1];
            
        if(colorPicker.isRgb(inputValue))                   //[0,0,0] - [1,1,1] 
            return colorPicker.parseRgb(inputValue);
        else if(colorPicker.isLargeRgb(inputValue))    //[0,0,0] - [255,255,255]
            return colorPicker.parseLargeRgb(inputValue);
        else if(colorPicker.isHex(inputValue) )            //FFFFFF
            return colorPicker.parseHex(inputValue);
        else if(colorPicker.isShortHex(inputValue))     //FFF
            return colorPicker.parseShortHex(inputValue);
        else if(colorPicker.isHsb(inputValue))             //[0,0,0,'hsb'] - [360,100,100,'hsb']
            return colorPicker.parseHsb(inputValue);
        else
            return [1,1,1];
}

colorPicker.prototype.showColorPicker =  function(){
        var win = this.initWindow();
        if(win.type == "dialog" ||win.type == "palette" ){
            if(this.haveSetting ("location")){
                win.location = this.getSetting ("location").split(",");
                if(win.location.length != 2)
                    win.center();
                else if(win.location[0]<0 || win.location[1]<0)
                    win.center();
            } 
            win.show();
            this.saveSetting ("location", win.location);
        }else if(win.type == "panel"){
            win.layout.layout(true);
        }
        if(!this.isSmallMode){
            this.outputColour.hex = colorPicker.RgbToHex(this.outputColour);
            this.outputColour.hsb = colorPicker.RgbToHsb(this.outputColour);
            this.outputColour.rgb = this.outputColour.slice(0);
            
            return this.outputColour;
        }else{
            return {
                window:win, 
                colorPicker:this
            };
        }
}

colorPicker.prototype.initWindow = function(){
            var _this = this;
            var type = this.options["windowType"];
            if(type=="palette"){
                    var win = new Window("palette", this.options["name"] + this.options["version"], undefined, {
                            maximizeButton: false,
                            minimizeButton: false,
                        });
                    this.size = this.options["size"] = 90;
            }else if(type instanceof Panel){
                    var win = type;
                    this.size = this.options["size"] = 90;
            }else{
                    var win = new Window("dialog", this.options["name"] + this.options["version"], undefined, {
                        maximizeButton: false,
                        minimizeButton: false,
                        closeButton:false
                    });
                    this.size = this.options["size"] = 130;
            }
        
            var isSmallMode = this.isSmallMode = this.size != 130;
            var targetImage = isSmallMode ? this.options["smallColorWheel"]:  this.img ;
            var targetSize = this.size*2;

            var colourGroup = win.add('group');
            	colourGroup.orientation = "stack";
                    
	    		win.image = colourGroup.add("image", undefined,targetImage);

	    		var colourCursorGroup = this.colourCursorGroup = colourGroup.add('customBoundedValue',[0,0,targetSize+2,targetSize+2]);
		    		colourCursorGroup.fillColour = [0,0,0,0];

                 var colourSelectCursor = this.colourSelectCursor = colourCursorGroup.colourSelectCursor = {};
                        colourSelectCursor.size = [12,12];
                        colourSelectCursor.strokeWidth = 1;
                        colourSelectCursor.strokeColour = [0,0,0];
                        
                        this.setCursorLocation (this.inputColour);
                        
                colourCursorGroup.onDraw = function () {
		                this.graphics.drawOSControl();
		                this.graphics.newPath();
		                this.graphics.ellipsePath(0,0,this.size[0],this.size[1]);
		                this.graphics.fillPath(colourCursorGroup.graphics.newBrush(colourCursorGroup.graphics.BrushType.SOLID_COLOR, colourCursorGroup.fillColour));
                        
		                this.graphics.newPath();
                        
		                this.graphics.ellipsePath(this.colourSelectCursor.location[0]+this.colourSelectCursor.strokeWidth/2+1,
                                                                        this.colourSelectCursor.location[1]+this.colourSelectCursor.strokeWidth/2+1,
                                                                        this.colourSelectCursor.size[0]-this.colourSelectCursor.strokeWidth,
                                                                        this.colourSelectCursor.size[1]-this.colourSelectCursor.strokeWidth);
		                this.graphics.strokePath(this.graphics.newPen(this.graphics.PenType.SOLID_COLOR, 
                                                                   this.colourSelectCursor.strokeColour, this.colourSelectCursor.strokeWidth));
		    		};  


            win.brightGroup = win.add("group");
            win.staticBright = win.brightGroup.add("statictext",undefined,"Bright:");
            win.editBright = win.brightGroup.add("edittext{text:'0',characters:3,justify:'center',active:1}");
            win.slider = win.brightGroup.add("slider",undefined,100,0,100); 
            if(!isSmallMode){
                win.slider.size = "width:160,height:20";
                var spacing = 10;
                var character = 4;
            }else{
                win.slider.size = "width:100,height:20";
                win.brightGroup.spacing = 2;
                win.spacing = 5;
                win.margins = 2;
                var spacing = 0;
                var character = 3;
            }


            var editor = win.add('group');
                editor.orientation = 'column';

                editor.gulu = editor.add('group');

                    editor.gulu.uni = editor.gulu.add('group');
                    editor.gulu.uni.spacing = spacing;

                        editor.gulu.uni.Ed = editor.gulu.uni.add('statictext', undefined, '#');
                        editor.gulu.uni.unicode = editor.gulu.uni.add('edittext', undefined, 'FF0000')
                        editor.gulu.uni.unicode.characters = 6;
                        editor.gulu.uni.unicode.justify = 'center';

                    editor.gulu.color = editor.gulu.add('customBoundedValue', undefined, 'Redraw original image');
                    editor.gulu.color.size = [80, 25];

                editor.colorHolder = editor.add('group');
                editor.colorHolder.orientation = 'row';

                    editor.colorHolder.colorCol1 = editor.colorHolder.add('group');
                    editor.colorHolder.colorCol1.orientation = 'column';

                        editor.colorHolder.colorCol1.hGroup = editor.colorHolder.colorCol1.add('group');
                        editor.colorHolder.colorCol1.hGroup.spacing = spacing;

                            editor.colorHolder.colorCol1.hGroup.hRad = editor.colorHolder.colorCol1.hGroup.add('statictext', undefined, 'H:');
                            editor.colorHolder.colorCol1.hGroup.hValue = editor.colorHolder.colorCol1.hGroup.add('edittext', undefined, '0');
                            editor.colorHolder.colorCol1.hGroup.hValue.characters = character;
                            editor.colorHolder.colorCol1.hGroup.hValue.justify = 'center';
                            editor.colorHolder.colorCol1.hGroup.hValue._index = 0;

                        editor.colorHolder.colorCol1.rGroup = editor.colorHolder.colorCol1.add('group');
                        editor.colorHolder.colorCol1.rGroup.spacing = spacing;

                            editor.colorHolder.colorCol1.rGroup.rRad = editor.colorHolder.colorCol1.rGroup.add('statictext', undefined, 'R:');
                            editor.colorHolder.colorCol1.rGroup.rValue = editor.colorHolder.colorCol1.rGroup.add('edittext', undefined, '0');
                            editor.colorHolder.colorCol1.rGroup.rValue.characters = character;
                            editor.colorHolder.colorCol1.rGroup.rValue.justify = 'center';
                            editor.colorHolder.colorCol1.rGroup.rValue._index = 0;

                    editor.colorHolder.colorCol2 = editor.colorHolder.add('group');
                    editor.colorHolder.colorCol2.orientation = 'column';

                        editor.colorHolder.colorCol2.sGroup = editor.colorHolder.colorCol2.add('group');
                        editor.colorHolder.colorCol2.sGroup.spacing = spacing;

                            editor.colorHolder.colorCol2.sGroup.sRad = editor.colorHolder.colorCol2.sGroup.add('statictext', undefined, 'S:');
                            editor.colorHolder.colorCol2.sGroup.sValue = editor.colorHolder.colorCol2.sGroup.add('edittext', undefined, '0');
                            editor.colorHolder.colorCol2.sGroup.sValue.characters = character;
                            editor.colorHolder.colorCol2.sGroup.sValue.justify = 'center';
                            editor.colorHolder.colorCol2.sGroup.sValue._index = 1;

                        editor.colorHolder.colorCol2.gGroup = editor.colorHolder.colorCol2.add('group');
                        editor.colorHolder.colorCol2.gGroup.spacing = spacing;

                            editor.colorHolder.colorCol2.gGroup.gRad = editor.colorHolder.colorCol2.gGroup.add('statictext', undefined, 'G:');
                            editor.colorHolder.colorCol2.gGroup.gValue = editor.colorHolder.colorCol2.gGroup.add('edittext', undefined, '0');
                            editor.colorHolder.colorCol2.gGroup.gValue.characters = character;
                            editor.colorHolder.colorCol2.gGroup.gValue.justify = 'center';
                            editor.colorHolder.colorCol2.gGroup.gValue._index = 1;

                    editor.colorHolder.colorCol3 = editor.colorHolder.add('group');
                    editor.colorHolder.colorCol3.orientation = 'column';

                        editor.colorHolder.colorCol3.lGroup = editor.colorHolder.colorCol3.add('group');
                        editor.colorHolder.colorCol3.lGroup.spacing = spacing;

                            editor.colorHolder.colorCol3.lGroup.lRad = editor.colorHolder.colorCol3.lGroup.add('statictext', undefined, 'B:');
                            editor.colorHolder.colorCol3.lGroup.lValue = editor.colorHolder.colorCol3.lGroup.add('edittext', undefined, '0');
                            editor.colorHolder.colorCol3.lGroup.lValue.characters = character;
                            editor.colorHolder.colorCol3.lGroup.lValue.justify = 'center';
                            editor.colorHolder.colorCol3.lGroup.lValue._index = 2;

                        editor.colorHolder.colorCol3.bGroup = editor.colorHolder.colorCol3.add('group');
                        editor.colorHolder.colorCol3.bGroup.spacing = spacing;

                            editor.colorHolder.colorCol3.bGroup.bRad = editor.colorHolder.colorCol3.bGroup.add('statictext', undefined, 'B:');
                            editor.colorHolder.colorCol3.bGroup.bValue = editor.colorHolder.colorCol3.bGroup.add('edittext', undefined, '0');
                            editor.colorHolder.colorCol3.bGroup.bValue.characters = character;
                            editor.colorHolder.colorCol3.bGroup.bValue.justify = 'center';
                            editor.colorHolder.colorCol3.bGroup.bValue._index = 2;


                win.editor = editor;
                if(win.type == "dialog"){

                    
                    editor.oc = win.editor.oc = win.add("Group{ok:Button{text:'Ok'},can:Button{text:'Cancel'}}");
                    
                        editor.oc.ok.onClick = function(){
                            win.close();
                        }

                        editor.oc.can.onClick = function(){
                            colorPicker.copyArr(_this.outputColour,_this.inputColour);
                            win.close();
                        }
                    
                    }

            editor.gulu.color.onDraw = function(draw){
            	var targetColour = _this.outputColour;

                var gfxs=this.graphics;
                gfxs.newPath();
                gfxs.rectPath(0, 0, this.size[0], this.size[1]);
                gfxs.fillPath(gfxs.newBrush (gfxs.BrushType.SOLID_COLOR, targetColour));
            };




        
            this.updateCursor(win);

            this.setDefaultValue(win)

            this.bindingKeydown(win);

            this.bindingHandler(win);

            return win;

}

colorPicker.prototype.setDefaultValue = function(win){
        var pi = win.editor;
        var startColour = this.outputColour;


        pi.gulu.uni.unicode.text= colorPicker.RgbToHex (startColour);
        pi.gulu.uni.unicode.active = true;



        pi.colorHolder.colorCol1.rGroup.rValue.text=Math.round(startColour[0]*255);
        pi.colorHolder.colorCol2.gGroup.gValue.text=Math.round(startColour[1]*255);
        pi.colorHolder.colorCol3.bGroup.bValue.text=Math.round(startColour[2]*255);

        var hsbHere= colorPicker.RgbToHsb([
                                        startColour[0]*255,
                                        startColour[1]*255,
                                        startColour[2]*255
                                    ]);
                                    

        pi.colorHolder.colorCol1.hGroup.hValue.text=hsbHere[0];
        pi.colorHolder.colorCol2.sGroup.sValue.text=hsbHere[1];
        pi.colorHolder.colorCol3.lGroup.lValue.text=hsbHere[2];

        win.slider.value=hsbHere[2];
        win.editBright.text=hsbHere[2];
        
        this.colourCursorGroup.fillColour[3] = 1 - (hsbHere[2])/100;
        this.colourCursorGroup.notify("onDraw");
}

colorPicker.prototype.bindingHandler =  function(win){
           var _this = this;

          win.editor.colorHolder.colorCol1.hGroup.hValue.onChange =
          win.editor.colorHolder.colorCol2.sGroup.sValue.onChange =
          win.editor.colorHolder.colorCol3.lGroup.lValue.onChange = function(){
                    _this.options.backupLocation.length = 0;
                    this.text=Math.round(this.text);

                    if(this._index ==0 ){
                        if( this.text<0 || this.text>360 || isNaN(this.text)==true ){
                                this.text= colorPicker.RgbToHsb([
                                                                                    _this.outputColour[0]*255,
                                                                                    _this.outputColour[1]*255,
                                                                                    _this.outputColour[2]*255,
                                                                                ])[this._index];
                       }
                    }else{
                        if( this.text<0 || this.text>100 || isNaN(this.text)==true ){
                                this.text= colorPicker.RgbToHsb([
                                                                                    _this.outputColour[0]*255,
                                                                                    _this.outputColour[1]*255,
                                                                                    _this.outputColour[2]*255,
                                                                                ])[this._index];
                       }
                    }
                    var hsbArr = [
                                          Math.round(win.editor.colorHolder.colorCol1.hGroup.hValue.text),
                                          Math.round(win.editor.colorHolder.colorCol2.sGroup.sValue.text),
                                          Math.round(win.editor.colorHolder.colorCol3.lGroup.lValue.text)
                                        ];

                    var rgbArr = colorPicker.HsbToRgb (hsbArr);
                    var hexStr = colorPicker.RgbToHex ([rgbArr[0]/255,rgbArr[1]/255,rgbArr[2]/255]);
                    win.editor.gulu.uni.unicode.text = hexStr;
                    win.editor.gulu.uni.unicode.notify("onChange");
                     
          }


           win.editor.colorHolder.colorCol1.rGroup.rValue.onChange  =
           win.editor.colorHolder.colorCol2.gGroup.gValue.onChange =
           win.editor.colorHolder.colorCol3.bGroup.bValue.onChange = function (){
                    _this.options.backupLocation.length = 0;
                    this.text=Math.round(this.text);

                    if( this.text<0 || this.text>255 || isNaN(this.text)==true ){
                            this.text=Math.round(_this.outputColour[this._index]*255);
                   }

                    if(this._index ==0)
                        win.editor.gulu.uni.unicode.text= colorPicker.RgbToHex ([this.text/255,_this.outputColour[1],_this.outputColour[2]]);
                    else if(this._index ==1)
                        win.editor.gulu.uni.unicode.text= colorPicker.RgbToHex ([_this.outputColour[0],this.text/255,_this.outputColour[2]]);
                    else if(this._index ==2)
                        win.editor.gulu.uni.unicode.text= colorPicker.RgbToHex ([_this.outputColour[0],_this.outputColour[1],this.text/255]);
                     win.editor.gulu.uni.unicode.notify("onChange");
                     
               }

           win.editBright.onChange = win.editBright.onChanging = function () {
                    _this.options.backupLocation.length = 0;
           		if (this.text < 0)
           			this.text = 0;
           		if (this.text > 100)
           			this.text = 100;
           		if (isNaN(this.text)==true)
           			this.text = 100;

           		win.slider.value = parseInt(this.text);
                    if(isNaN(win.slider.value))
                        return;
           		win.slider.notify('onChange');
           };

           win.slider.onChange = win.slider.onChanging = function(){

                    var thisColor= colorPicker.HsbToRgb ([
                                                            Math.round(win.editor.colorHolder.colorCol1.hGroup.hValue.text),
                                                            Math.round(win.editor.colorHolder.colorCol2.sGroup.sValue.text),
                                                            Math.round(this.value)
                                                        ]);
                    if(this.value != 0){
                        if(_this.options.backupLocation.length != 0 && _this.options.shouldUpdateCursor == true){
                            _this.getColor({
                                    type:"mouseup",
                                    clientX: _this.options.backupLocation[0]+6,
                                    clientY: _this.options.backupLocation[1]+6,
                            });
                            _this.options.backupLocation.length = 0;
                            _this.colourCursorGroup.fillColour[3] = 1 - (this.value)/100;
                            _this.colourCursorGroup.notify("onDraw");
                            return;
                        }
                    }                
                                             
                    colorPicker.copyArr(_this.outputColour,[thisColor[0]/255,thisColor[1]/255,thisColor[2]/255]);

                    _this.setDefaultValue(win);
                    _this.notifyColor(win);
                	_this.updateCursor(win);
                    
                    _this.setCursorLocation (_this.outputColour);

                    if(this.value == 0){
                        _this.options.shouldUpdateCursor = true;
                    }else{
                        _this.options.shouldUpdateCursor = false;
                    }
                            
                            
                    if(_this.options.backupLocation.length == 0){
                        colorPicker.copyArr(_this.options.backupLocation,_this.colourSelectCursor.location);
                    }

                    _this.colourCursorGroup.fillColour[3] = 1 - (this.value)/100;
                    _this.colourCursorGroup.notify("onDraw");
                     
               }

            win.editor.gulu.uni.unicode.onChange= function(){
                    var hexHere="0x"+this.text;
                    var eV=0;
                    if(colorPicker.isHex (this.text) == false && colorPicker.isShortHex(this.text) == false){
                        this.text = colorPicker.RgbToHex (_this.outputColour);
                        eV=1;
                    }
                    if(eV==0){
                            var rgbHere= (this.text.length == 6) ? colorPicker.parseHex (this.text): colorPicker.parseShortHex (this.text);
                            colorPicker.copyArr(_this.outputColour,rgbHere);
                            _this.setDefaultValue(win);
                            _this.setCursorLocation(rgbHere);
                            _this.notifyColor(win);
                        }
                }

}

colorPicker.prototype.updateCursor = function(win) {
    if (colorPicker.arraysEqual(this.colourSelectCursor.strokeColour,[1,1,1])) {
		if (win.slider.value > 63)
	    	this.colourSelectCursor.strokeColour = [0,0,0];
	} else if (colorPicker.arraysEqual(this.colourSelectCursor.strokeColour,[0,0,0])) {
		if (win.slider.value <= 63)
			this.colourSelectCursor.strokeColour = [1,1,1];
	}
};

colorPicker.prototype.notifyColor = function(win){
    win.editor.gulu.color.notify("onDraw");
}

colorPicker.prototype.setCursorLocation= function(inputColor){
     this.colourSelectCursor.location = (function(_this){
            var hsb = colorPicker.RgbToHsb(inputColor);  
            hsb = colorPicker.convertHsbToKulerHsb(hsb);
            var angle = Math.round(hsb[0]); 
            var length = Math.round(hsb[1]/100*_this.size);
                            
            var point = [length*Math.cos(angle*2*Math.PI/360),length*Math.sin(angle*2*Math.PI/360)];

            return [point[0]+_this.size,_this.size-point[1]]
      })(this)
    
      this.colourSelectCursor.location = [this.colourSelectCursor.location[0]-this.colourSelectCursor.size[0]/2,
                                                         this.colourSelectCursor.location[1]-this.colourSelectCursor.size[1]/2];    
};

colorPicker.prototype.bindingKeydown = function(win){
    var _this = this;


    var keyDownHandle1 = function(k){
        if (k.keyName == "Up") {
            if (k.shiftKey == false) {
                this.text = parseFloat(this.text) + 1;
            } else {
                this.text = parseFloat(this.text) + 10;
            }
        } else if (k.keyName == "Down") {
            if (k.shiftKey == false) {
                this.text = parseFloat(this.text) - 1;
            } else {
                this.text = parseFloat(this.text) - 10;
            }
        }
    }

    win.editor.colorHolder.colorCol1.rGroup.rValue.addEventListener('keydown', keyDownHandle1);
    win.editor.colorHolder.colorCol2.gGroup.gValue.addEventListener('keydown', keyDownHandle1);
    win.editor.colorHolder.colorCol3.bGroup.bValue.addEventListener('keydown', keyDownHandle1);
    win.editBright.addEventListener('keydown', keyDownHandle1);

    win.addEventListener('keydown', function (k) {
        if (k.keyName == "Escape") {
            win.close();
        }
    });

    var leftPressed = false;

    var getColor = this.getColor = function (k) {
        _this.options.backupLocation.length = 0;
        
        if(k.type == "mouseup"){
                leftPressed = false;
        }else if(k.type == "mousemove"){
                if(leftPressed == false)
                    return;
        }else if(k.type == "mousedown"){
                leftPressed = true;
        }
        var point = [k.clientX, k.clientY];
        if(!_this.isInCircle(point)) return;

        var thisColor = _this.getColorFromPoint(point);
        thisColor = colorPicker.RgbToHsb(thisColor);
        thisColor[2] = win.slider.value;
        thisColor = colorPicker.HsbToRgb(thisColor);

        colorPicker.copyArr(_this.outputColour ,[
                                            thisColor[0]/255,
                                            thisColor[1]/255,
                                            thisColor[2]/255
        ]);
        _this.setCursorLocation (_this.outputColour);
        _this.setDefaultValue(win);
        win.editor.gulu.color.notify("onDraw");
    }

    this.colourCursorGroup.addEventListener ('mouseup', getColor)
    this.colourCursorGroup.addEventListener ('mousemove',getColor)
    this.colourCursorGroup.addEventListener ('mousedown',getColor)
}

colorPicker.prototype.isInCircle = function(point){
    return Math.pow (point[0]-this.size, 2) + Math.pow(point[1]-this.size,2) <= Math.pow(this.size,2);
}

colorPicker.prototype.getColorFromPoint =  function(point){
    var transformedPoint = this.transformPoint(point);
    var hAndS =  this.getAngleAndLength(transformedPoint);
    return this.CoreGetColorFromPoint(hAndS[0],hAndS[1]);
}

colorPicker.prototype.getAngleAndLength = function(point){
        var angle,length;
        var x = point[0],y=point[1];
        length =Math.sqrt( x*x + y*y);
        angle = Math.atan2(y,x)/Math.PI*180
        if(angle<=0)
            angle += 360;
        return [angle,length/this.size];
    }

colorPicker.prototype.transformPoint = function(point){
        var x = point[0];
        var y = point[1];
        return [x-this.size,this.size-y];
    },


colorPicker.prototype.CoreGetColorFromPoint = function(h,s){
    var i;
    
    var f, p, q, t;
    var r=1,g=1,b=1;
    var v = 1;
    if( s == 0 ) {
        v = Math.floor(v*255);
        return [v,v,v];
        }
    var originHeight = h;
    var condition;
    var tempI
    
    if(originHeight<45 && originHeight>=0){
        i = 0;      
        f = originHeight/90; 
    }else if(originHeight<120 && originHeight>=45){ 
        i = 1 
        f = (originHeight-45)/(120-45); 
    }else if(originHeight<180 && originHeight>=120){ 
        i = 2 
        f = (originHeight-120)/(180-120); 
    }else if(originHeight<220 && originHeight>=180){ 
        i = 3 
        f = (originHeight-180)/(220-180); 
    }else if(originHeight<275 && originHeight>=220){ 
        i = 4  
        f = (originHeight-220)/(275-220); 
    }else if(originHeight<320 && originHeight>=275){ 
        i = 5  
        f = (originHeight-275)/(320-275);
    }else if(originHeight<360 && originHeight>=320){ 
        i = 6
        f = (originHeight-320)/(360-320)
    }

    p =  1 - s ;
    q =  1 - s * f ;
    t =  1 - s * ( 1 - f );
    
    switch( i ) {
        case 0:r = v;g = t;b = p;break;        
        case 1:r = v;g = 0.5+t/2;b = p;break;   
        case 2:r = q;g = v;b = p;break;     
        case 3:r = p;g = v;b = t;break;      
        case 4:r = p;g = q;b = v;break;        
        case 5:r = t;g = p;b = v;break;         
        case 6:r = v;g = p;b = q;break;         
        
    }
    return [r,g,b];
}

colorPicker.copyArr =  function(defaultArr,otherArr){
    while(defaultArr.length!=0){
        defaultArr.pop();
    }
    defaultArr.push(otherArr[0]);
    defaultArr.push(otherArr[1]);
    defaultArr.push(otherArr[2]);
    return defaultArr;
}

colorPicker.HexToRgb =  function(hex){
            var ccolorhex = hex.toString(16);
            ccolorb = parseInt(ccolorhex.substr(-2), 16);
            ccolorg = parseInt(ccolorhex.substr(-4).substr(0, 2), 16);
            ccolorr = parseInt(ccolorhex.substr(-6).substr(0, 2), 16);
            return [ccolorr / 255, ccolorg / 255, ccolorb / 255];
}

colorPicker.RgbToHex =  function(rgb){
                var a=(rgb[0]*255).toString(16);
                var b=(rgb[1]*255).toString(16);
                var c=(rgb[2]*255).toString(16);
                if(a.length!=2){
                    a="0"+a;
                    }
                if(b.length!=2){
                    b="0"+b;
                    }
                if(c.length!=2){
                    c="0"+c;
                    }
                return (a+b+c).toUpperCase();
}

colorPicker.HsbToRgb =  function(hsb){
        var rgb = [];
        hsb = [hsb[0], hsb[1] / 100, hsb[2] / 100];
        for (var offset = 240, i = 0; i < 3; i++, offset -= 120) {
            x = Math.abs((hsb[0] + offset) %360 - 240);
            if (x <= 60) {
                rgb[i] = 255;
            } else if (60 < x && x < 120) {
                rgb[i] = ((1 - (x - 60) / 60) * 255);
            } else {
                rgb[i] = 0;
            }
        }
        for (var i = 0; i < 3; i++) {
            rgb[i] += (255 - rgb[i]) * (1 - hsb[1]);
        }
        for (var i = 0; i < 3; i++) {
            rgb[i] *= hsb[2];
        }
        return [rgb[0], rgb[1], rgb[2]]
}

colorPicker.RgbToHsb = function(rgb){
        rgb = colorPicker.parseColor (rgb);
        rgb = [rgb[0]*255,rgb[1]*255,rgb[2]*255]
        var hsb = [];
        var rearranged=rgb.slice(0);
        var maxIndex = 0;
        var minIndex = 0;
        var tmp;
        rearranged.sort(function(a, b) {
            return a - b;
        })
        for (var i = 0; i < 3; i++) {
            if (rearranged[0] == rgb[i]) minIndex = i;
            if (rearranged[2] == rgb[i]) maxIndex = i;
        }
        if(rearranged[2] !=0 ){
            hsb[2] = rearranged[2] / 255;
            hsb[1] = 1 - rearranged[0] / rearranged[2];
            if(hsb[1]!=0){
                hsb[0] = maxIndex * 120 + 60 * (rearranged[1] / hsb[1] / rearranged[2] + (1 - 1 / hsb[1])) * ((maxIndex - minIndex + 3) % 3 == 1 ? 1 : -1);
                hsb[0] = (hsb[0] + 360) % 360;
            }else{
                hsb[0] =0;
            }
        }else{
            hsb[2]=0;
            hsb[1]=0;
            hsb[0]=0;
        }
        return [Math.round(hsb[0]), Math.round(hsb[1] * 100), Math.round(hsb[2] * 100)];
}

colorPicker.convertHsbToKulerHsb =  function(hsb){
    var originHeight = hsb[0];
    var s = hsb[1], b = hsb[2];
    var i,f,h;
    if(originHeight<30 && originHeight>=0){
        
        h = (originHeight-0)/(30-0)*(45-0)+0;
        
    }else if(originHeight<60 && originHeight>=30){ 
        h = (originHeight-30)/(60-30)*(120-45)+45;
        
    }else if(originHeight<120 && originHeight>=60){ 
        h = (originHeight-60)/(120-60)*(180-120)+120;
        
    }else if(originHeight<180 && originHeight>=120){ 
        h = (originHeight-120)/(180-120)*(220-180)+180;
        
    }else if(originHeight<240 && originHeight>=180){ 
        h = (originHeight-180)/(240-180)*(275-220)+220;
        
    }else if(originHeight<300 && originHeight>=240){ 
        h = (originHeight-240)/(300-240)*(320-275)+275;
        
    }else if(originHeight<360 && originHeight>=300){ 
        h = (originHeight-300)/(360-300)*(360-320)+320;
        
    }else{
      return hsb;
    }

    return [h,s,b];

}



colorPicker.isType =  function(content,type){
    return Object.prototype.toString.call(content) == "[object "+type+"]"
}

colorPicker.isRgb =  function(rgbArr){
    if(!rgbArr) 
        return false;
    
    if(!colorPicker.isType(rgbArr,"Array")) 
        return false;
    
    if(rgbArr.length != 3)
        return false;
    
    for(var i =0,len = rgbArr.length;i<len;i++){
            if(rgbArr[i]>1 || rgbArr[i]<0)
                return false;
    }
        
    return true;
}

colorPicker.isLargeRgb =  function(rgbArr){
    if(!rgbArr) 
        return false;
    
    if(!colorPicker.isType(rgbArr,"Array")) 
        return false;
        
    if(rgbArr.length != 3)
        return false;
    
    for(var i =0,len = rgbArr.length;i<len;i++){
            if(rgbArr[i]>255 || rgbArr[i]<0)
                return false;
    }

    return true;
}


colorPicker.isHex = function(hexStr){
    if(!hexStr)
        return false;
        
    if(!colorPicker.isType(hexStr,"String")) 
        return false;
        
    if(hexStr.length != 6) 
        return false;
        
    
    var arr = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
    var isHex = true;
    hexStr = hexStr.toUpperCase();
    for(var i=0,len = hexStr.length;i<len;i++){
            if(this.arrayIndexOf(arr,hexStr[i]) == false){
                    isHex = false;
                    break;
                }
        }

    return isHex;
}


colorPicker.isShortHex =  function(hexStr){
    if(!hexStr)
        return false;
        
    if(!colorPicker.isType(hexStr,"String")) 
        return false;
        
    
    if(hexStr.length != 3) 
        return false;
        
    var arr = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"];
    var isShortHex = true;
    hexStr = hexStr.toUpperCase();
    for(var i=0,len = hexStr.length;i<len;i++){
        if(colorPicker.arrayIndexOf(arr,hexStr[i]) == false){
            isShortHex = false;
            break;
        }
    }
        
    return isShortHex;
}

colorPicker.isHsb =  function(hsbArr){
    if(!hsbArr)
        return false;
        
    if(!colorPicker.isType(hsbArr,"Array")) 
        return false;
        
    if(hsbArr.length!=4)   
        return false;   
        
    if(hsbArr[3] !="hsb") return false;
    if(hsbArr[0]>360 || hsbArr[0]<0) return false;
    if(hsbArr[1]>100 || hsbArr[1]<0) return false;
    if(hsbArr[2]>100 || hsbArr[2]<0) return false;

    
    return true;
}

colorPicker.parseRgb =  function(inputValue){
    return inputValue;
}

colorPicker.parseLargeRgb =  function(inputValue){
    var arr = [inputValue[0]/255,inputValue[1]/255,inputValue[2]/255];
    return arr;
}

colorPicker.parseHex =  function(inputValue){
    return colorPicker.HexToRgb("0x"+inputValue);
}

colorPicker.parseShortHex =  function(inputValue){
    inputValue = inputValue.toUpperCase();
    var hex = "0x"+inputValue[0].toString() + inputValue[0].toString() 
                            +inputValue[1].toString() +inputValue[1].toString()
                                +inputValue[2].toString() +inputValue[2].toString();
    return colorPicker.HexToRgb(hex);
}

colorPicker.parseHsb =  function(inputValue){
    var hsb = [inputValue[0],inputValue[1],inputValue[2]];
    return colorPicker.parseLargeRgb(colorPicker.HsbToRgb (hsb));
}

colorPicker.arrayIndexOf = function(arr,str){
    for(var i=0,len = arr.length;i<len;i++){
        if(arr[i] == str)
            return true;
    }
    return false;
}
    
colorPicker.arraysEqual = function(a, b) {
    if (a === b) return true;
    if (a == null || b == null) return false;
    if (a.length != b.length) return false;

    for (var i = 0; i < a.length; ++i) {
        if (a[i] !== b[i]) return false;
    }

    return true;
}

colorPicker.prototype.initSetting = function(){
    this.img ="\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x01\x04\x00\x00\x01\x04\b\x06\x00\x00\x00\u00CE\bJ\n\x00\x00\x00\tpHYs\x00\x00\x00\x01\x00\x00\x00\x01\x018\"\u00F4@\x00\x00\x00$zTXtCreator\x00\x00\b\u0099sL\u00C9OJUpL+I-RpMKKM.)\x06\x00Az\x06\u00CEjz\x15\u00C5\x00\x00 \x00IDATx\u009C\u00EC\u00BD{\u00BCeWU&\u00FA\u008D\u00B9\u00F6>\u00E7T*\x02I\u0088\x04A\u00D4hLT\u00BC\b-\bb\x0B\x11[\u00EDn\x04\u00FBj\u00BC\u00F8k\x105\u00B7\u00EDn\x1Ft\u00B7^_\r\u00AD\x17\u00C5\u00A6\x01\u00DB\u009F\u00B7\u00B1\x1BE\u00BD`@\x1E\"\u00D7\u0080\u00A1\u0095\u0097B\b\x10\f\x1D\b\t\x18\b\x04\b\u00AF<I\u00AAR\u008Fs\u00CE\u00DEk\u008E\u00FB\u00C7\x18\u00DF\x18c\u00EDS\u0095\u00A4\u008A$\u0095\u0084\u009ApR{\u00EF\u00B5\u00D6\\s\u00CD5\u00C7\x18\u00DFxN\u00C1\u00F1v\u00AFn\u00AA\u00FBw\u00A3\u00DF\u00F8\u00B5\u0090\u008F}\r\u00B6\u00AE}\u00D8\u00E6\u0081[\x1E\u00D2\u00C6\x1B\x1F\u00DC\u00967\u009E\u00A6\u00BA\u00E7T\u00F4}\u00A7\u00E88\u009C\u008C>\u00DEO\u00C6[\x06\u00E8\u008D\u0090\u00C5-h\u008B\u00BD\u0090\u00BE\x1F2\u008E\u00806\x00\x02@\x01\b\u00BA\u009C\x00\u009D\u00ED\u0086\u00B6\x07`9<\x10\u0083\u00EC\x1E\u0081\u008D\u00BD\u00E3\u00AC\x7F\u00B1\u00C9\u00EE\u009B\u00BA|\u00C5\r\u00D2\u00BE\u00F2Zi\u00A7~a~\u00E2\u00FD>'\u00F7\u00FB\u00AAk0\u00FF\u00FAO\u008F\u00FA\u00D0O\u00CD\u0086]\u00FB\u008F\u00F1\u0094\x1Co_B\u0093c=\u0080\u00E3\u00ED\u008E\u00B5\u00DE?\u00F5 \x197\u00BFu\\^\u00FE\u00F0\u00BE\u00F5\u00C1o\u0092\u00C5\u00CDg\u00E9\u00F2\u008630\u00DEx\u009An\u00DE \u00C3\u00E2F\u00A8\u00DE\x02\u00C56\u00A0\u008A\u00D6gh\u00AA\x10\u0085\u00D19:\u00A0\x02h\x07\x7F\x12\x00\u00D2\u00FD\u008B\u008A\u00FD\u00A2\u0080\u00EA\b\u0085@\u00B4\x01\u00BDC\u00BA\x02*PQ(\x06@;D\u00ED\u00B2\u00A5\u00AE\x01r?\u00C8\u00FCd\f\u00B3Su\u00B9~\u00EA\u00B5m~\u00D2U2\u00BF\u00FF\u0095\u008B\u00FB\u009F\u00F9\x0F\u00EB\x0Fx\u00CC\x152?\u00E5r\u0091\u00AF\u00B9\u00EEX\u00CD\u00DD\u00F1v\u00C7\u00DBq\u0086p\x0Fl\u00AA\u00B7<P\u00F5\u00EF\x1F+\x07\u00AEy\u00F4x\u00F0#\u00DF\u00DE\u00FB\x17\x1E%\u00DB\u009F9M\x16\u009F\u00C4\u00B8\u00BC\x193l\x03\u00B2\u0084\u008Cpb\u00E7kT@\u00C4\u0088\u00BB7\u0088*T\u009DrU\u00ED\u00AC`\x00~\u009D\u00AA\u00FDu\x01\u00A4\u00F9\u00B5\u00A3\u00FD\x16\x03r\u00F4\u00D0\u00F3^\u00DD\u00FBU\x00\u00AD[\u00BF\x12\u00C7\x05\u00A36\u008Ch\u00C0\u00B0\x1B\u00BA\u00FB\u00EB\u00D0\u00D6\u00BE\u00E1\u00DA\u00E5\u00C6)\u0097\u00CEv\u009D\u00FE\u00FE\u00F9i\u00DFr\t6\u00BE\u00FDb\u0091\u00AF\u00BC\u00F1\u00AE\u009E\u00CB\u00E3\u00ED\u00C8\u00DAq\u0086p\x0Fh\u00AAW?\f\u00CB\x1B\u009F\u00B8\u00DC|\u00F3\x13d\u00F3\x0B\u00DF\u00D5\u00C7\u008F\u009E\u00A1\u008B\u00ABd\u00B6}=\x1A\u0096\x00:\u00D0;T\x05]\x14\u00A2\x02\u0081K\u00FF.\u00DE\u0087N\u00FA\u0094n\u008C\u00A1\u00BB4\x07\x0Fk\u00B3\u00EFPC\tD\x07\n'x\x04\x03a\u00BF\u0093\u00EB\x01h\u00CF\u00AF\u00810\u00BA3\rm\u00CE|$\x18\u008F\u00F5!q\u00ED8;\t\u00F8\u008A\u00B3\u00B4\u00AF\u009Fq\x15v=\u00F8\u00A2\u00F9\u0083\u00FF\u00F1;\u00E5\u00FEg\u00BDC\u00DA\u00E9\u00D7\u00DCi\u0093z\u00BC\x1DU;\u00CE\x10\u008EAS\u00DD{\u00A2\u00F6\x0F=i{\u00EB\u00B2\u00EF\u009Fm_\u00FA\u00BD\u00D8\u00FE\u00F8\x19}\u00FB\u0083\x10=\x00\u00C1\x12\u00AD\u00CF\u00A1:\u00A2\x05\u00B1\x1ACX\x11\u00D2.\u0099\x1D\x11\u00A8B\u00A5R- *\u00E8\u00DD~\x13%\x1Ahf-P\u00A3V\u00FB]\u0092\th^\x0F\x15\u00A8vg\"\u00C9\x15\u00B4\u00E7m\u00D0\u00ADoU\u00C4qh2\u00A4`4\u0093\u008B\x00\u008C\u00E2\u00C0\u00C4m\x16\u00BB\u00BF\t\u00FD\x01_\x7F\u0095\u00EC\u00FE\u00A6\u00B7\u00AD?\u00F8\u00F1o\u00D6]\u008Fz{\u009B\u009D\u00BC\u00EFN\u0099\u00F0\u00E3\u00ED\x0E\u00B7\u00E3\f\u00E1nj\u00DA?\u00FD\u00D0qq\u00D9Se\u00EB\u00A2\u00A7\u00E8\u00F8\u0091'\u008C[\u0097\u00AF\u008B~\x1Es\u00C2\u00F3\x15\t\u008F.P'(C\x02\u00C6\x10H\u00D7\x00\u00D0\u00D4\u00E8L\x0Eq\u00B9\u00DD\u00B4\x15\u00E9,\u00E8\u00DD\u0098\u00CC\u00E4\u00FC\u00EE\u008B@\x04\u00E8\u0085!t^\u00DF\u00ED\x18\x00\u00ED\u008A\u00D6\u00A7\u00F72\x1E\u00D4\u00FC\x11\x12\u008D\u0088#\u0097\u00E8\u00B32\x1Ax\x1F\u00CA\x05(\u0086:D\u00A0P\u008Cr\x1A\u00DA\u00C9\u008F\u00D8\u00D2\u00DD\u00DF\u00F8N|\u00E5\u00B7\u00BDq\u00FE\u00A0\u00EF~\u0083\u00B4o\u00F8\u00EC\u0091\u00CF\u00FA\u00F1v\u00A4\u00ED8C\u00B8\x0B\u009B\u00EA\u00E7\x1F\u00A6\u00E3\u00C5\u00E7\u00F4}\x17\u009E#\u00FD\u0083\u008F\u00D1\u00ED\u00F7\u008B\u00E8\x01\u0093\u00EC\nhs8n'\x17\u00E3\x1E\u0092\u0088*J \u00BD\u00FA\u00BFBf\u00A1I`\u00D3\x01\x14\u0086\u0082f\u00EACg\x07\u0085`A\x04\u0081r\x03\u00DA\"4\f\u0090\u00DAs\u00BC\x13\x06\u00B4\u008A0t\u00B5?8\u0083\tS\u00A6\u00DB6\u00AA:\"9|\x15H\x17ho\x18e\x06}\u00C0\u00B7h\x7F\u00C0#\u00FE~v\u00D2\u00E3^'\x0Fy\u00FC\u00EB\u0086\u00F97\x1DW-\u00EE\u00A2v\u009C!\u00DC\u00C9M\u00F5\u00B3'a\u00FC\u00F0\u008F\u00EA\u00E6\u00DB\u009F\u00DE\x17\u0097<\x1E[\u0097\u0089\u00C8^4\b:\x16\u00C1\fr\u00F5K\u00BD\x18\u00E8-\u00A9-\u0088L\u00F28\x7Fr\x04\u00DE\u0082Z\u0091\u00A8\x02T\x07\u00F8\u00D1\x11\u0082\u00A3\x05\u00A2\x06\u0081\u00A2Ol\x11\u00E2\u00E8\u0081\u00D7\u00B6D/ac\u00D0\u00B0E\x06_\u00F1c\u00D5\u00D6`*\x03\u009F\u00CB\u00FB\u00D7\x0E\u00A09\u00CFQc\x01\u009C\x0F\x01\u00B4O\u00E7B|.\u0094\fMf\x18\u00BF\u00E2\u00E1:\u009C\u00F4\u00A8w\u00E3k\u00BE\u00F7\u0095\u00C3\u00C9\u008F\u00FAs\x19\u00CE\u00B8\u00F9(_\u00D5\u00F1v\u0088v\u009C!\u00DC\tm\u00B9\u00D8\u00D7\x06\\\u00F6\u00A4\u00AE\x17\u009E\u00DB\u00B7/~j\u00DBz\u00D7\u0086\u00F4\u00BD\x10\x1D\u00FD\u008CJP(\x04\u00CC/~\u0096\x16\u00A3\\X\u00FC\x10\u00C4j\x12Z\x0F\u00CF\x10T\x12\u00E6\x17\u00B8@\u00C2\u00A2\u00B4\u00AF\u00E8\u00A2\u00A3\x10\u00B28C\x18\x15\u0082\x06\u00A0%3Pu\u0095@\u00CAE\u00C0\u00A8H5$\u00DC\u0096\u008A6J\x1D\u0082\u00DD{\u0082*\u00A8\na\u00C2\x10\u00BAx\x7F\u00BD2GI\u00A68\u008EP\x05\u00C6a7\u0096\x0F|\u00DC&N\u00F9\u008E7\u00AC\x7F\u00ED\u00D9\x7F\"\u00BB\x1F\u00FFv\x19v\u00AD\x18*\u008E\u00B7#m\u00C7\x19\u00C2\u0097\u00D0T\u00AF:\u00B5/\u00DE\u00FFS\u00BAx\u00C7O\u00CB\u00E2\x1D\u00A7k\u00FF\x14\u009A*\u0080\u00D1\u008CpA\x01+\f\x01HB\u00A8\f\u00A1\u00FC^\u00ED\u0083\u008C\x0F q\u00AA\u00EB\u00E5\u00EA\u00E7E\x0Fa\u00C9\u009F\u00EA\x0ER\u008D{\u00D0T/(\u00DE\u00DD0!$\u00BC\u009E\u00D0~\u00CA\x10\u00EC\u00B3t\u0089\x01\u00F6^\u00EF\u00EF\x06F\x1F\x1F\u008D\u008D\x02^o\u00F7\u0094 \u00F2|&\x1Bw\u00CE\x07c\x1Fv\u00B8H\u00F9\u00EC\u00BD\u00C5\u00B9\u00DBk\x0F\u0081<\u00F8\u00B1W\u00B7\x07=\u00F6\u00A5\u00B3\u00D3\x7F\u00F8\u00FF\x15\u00F9\u009A\x1Bn\u00E7\u00D5\x1Do\u0087i\u00C7\x19\u00C2Q\u00B4\u00BE\u00FC\u00C0#\u00D1/|\u0096.\u00DE\u00F64]\u00BC{\u00A3\u00F5\u00BD\x10\u008CyB\u00D1\u00A5\u00A7\x17\x02\u0080\x13\x1C!\u00F5\u00EA\x1B\u00A8\u00C4\x1A\u00FC\u00A4X\x12\x01wA\u00DA\u00EF\u00AA\u008A\u00A6\u00D4\u00CB{\u00DC~\u0095\u00A1H\x10\u00BA\u008D\u0083h$\"\x18h_\u00D06}\u0086\x18SJx\x19WPM\x19\u00BBT\u00A3\u00A3\x1B5\u009B\u00E6\u00B9\u0081VB\r\u00EAq\u00ADj2\u00AFP[\u00F8\u00FC\x00z\u00D7psNb*`\u00F6\u0086e\u00DB\u0080\u009E\u00F4\u00E8M<\u00F81\u00AFY\u00FB\u00FA\x7F\u00F1\u00DF\u00E4+\x1E\u00F7\x01\x1CoG\u00D4\u008E3\u0084;\u00D8T\u00AF\x17\u00E8U?0.\u00DE\u00F8K\u00B2x\u00D7\u00D9\u00B2|?\x04K\u00A4B\u008D)\u00D1R\x02\u00F6\x02\x0B\u00C8\x10&F8\u00CD\u00F3\u00E3^\u00E9\x19\u0098\u00A0\n\x12\u00D2\nC\x00\u00DC\u0095\u0088\x1E\u009E\u0087\x1D\u00CC\b\b\u00E9\u00CE\u00A0\"\u00C2|\t\u00C9\u00EF\u00E3\u0090\x12\u00B0\x14\u0092\u00DC\u00A5}Hz\u009D0\x1D%R\u00E0e\n\u00A0\u00B7\x15\u00C2V\u008F~\u009C\"\x04u\u00DD\u00C5\u00AE\u0097\x00TfG\u00F0>\u0091\u00F7\u0097\u008E\u00F0\u00AELl1*\u00E8\x1E\u0086\u00BD}\u00E27b8\u00ED\u00BB\u00FF\u00AE\u009D\u00FE/^4<\u00F0\u00B1\x7F#\u00ED~\u0087\u009A\u0091\u00E3m\u00A5\x1Dg\b\u00B7\u00D3Tu\u00D0\u00E5[\x7Fd\u00EC\x17\u00FC\u009A.\u00FE\u00FA\x11\u00D2?\u0085\x06E\u00EB\u0087\u0080\x00U\u00AA\x020\u0082.Q<\x13\u0098\u008E\t\u00EC\u008F\u00F3\u00E1\f\u00A1\u00C2w\u0091 \x10\u00B3\u00C0\x17\u0086\u00D0\u008D!Xs\u0086\u00B0\u00AA\u009E\u0094\u00E1I7\u00D7^\u00C4\x0F\u0088\x13\x1D\x10\u00FF\u00D2\u00E2OF\x116\fu\x1BF\u00C0w\u00F7Hja\b(\fI\x0BC\x0B&\u0092\f&\x18\u0082O\u0090I})\u00FCU\u008B'%\u00BD/\u00DA\x01\x14\u00B4\u0090\x0F\u00E8j\u0084\x02\x18\u00E7PUl\u009Ep\n\u00F0\u00E0\u00EF\u00B9l\u00FEuO~\u00FE\u00EC\u00C1\u00FF\u00E4/d8\u00A5@\u00B9\u00E3m\u00B5\x1Dg\b\u0087i\u00AA\u00D7\x0F\u00D0\x0F?M\x17\u00AF\x7FN_\u00BE\u00F1\u00AC\u00A1_\x0B\u00C8\u00B6/H\u0087\u00E0h\x00z\x12+\u00CA\u0084V=~\x07\u00E4OF\u00D0\x1D\u00FE\u008AN\u00AE\u009E\u00C2k0\u008F\u00C0m\x06\u00BD\x10g\u0091\u00DE\u00ADx!v\u00A8,D\x1C\x107\u00D8\u00F9u\x18w\u00BA\x12\x15\x19i\u00B8\u00D4\u00B8n\u00E2\u00FA\u00F4F\u00F5\u0081\u00AAC\u00C48L\u0090\u008D\u00DB\x1DbNJ|D\x18:]\u00B5\u00D0\x16@H\u00DCf\x10h\u00896\x14\u00F5\u00F9%##\u00E3\u0099\u00DC3U.\u00ED\u00C0b~\n\u00F0\u0090\u00B3\u00AF\x1C\u00BE\u00FE\u009F?o\u00F8\u00EA\x1F|\u008D\u00C8\u00C9\u00C7\x19\u00C3!\u00DAq\u0086\u00B0\u00D2TU\u00FA\u00F8\u008E\x1F\u00D6\u00F1\u0082\u00E7\x02\u00AF\u00FDf\x19o@\u00EB\u00DB)\u00C6}\u00D1\u0086qK\u00A6D\u00DC\u0082Z\x14\x13\u00A3Xa\b\n\x14(\\\u00AC\u00ED\u00AB\u00AF\u00A3\u00B8(\u00ABI\u0081\u00C4%+\f \rx\u00E5F;`u\u00D1\u00F3\u00CB\u00B8\u00C4\u00EFA\u00DBF\u00C0w\x12\u00F1\x04\u00D9PUQg\b9\u008E\n\u00E3\u0095\u00FF\u00E9S7\u00A4B\u0092\u00D0\u00E3\u00F9z\u00AA,Z\u0080E\u00D7\u00F0b\u00D49RG(D:\u0093\u00A0\u00AA\x1A}\u00C9\u0081i\x03\u00C6\u008E\u00ED\u00F9\x03\u00D0\x1F\u00F6O?2\u00FF\u00FA\x1F\u00FC\u008D~\u00EA\u00F7\u00BD~m\u00D7)\u00C7U\u0089\u00D2\u008E3\u0084\u00D2\u00C6\u00F1\u00D2\u00B3u|\u00D5\x0B\u00B4\u00BF\u00E1\u00D1\rW\u00FB\u00E2\x1E'\u00BA\u00B2-22\x04\u0087\u00CFe\u0091N\x18\x02m\x00\u00AB\fA\u009C!t\u00B1K\u008B\u00B4\u009B\u00BC\x12^W \u00B3\u00B2\u0083\u00C2\x10\u00E0\u00A7u]\u00F5: u\u00ED\u00C9\u0083\u008A\u008F\u00DD\u00CE\u00A9\u00C6;\t\u00D5\x00\u00888\u0084\u00A2\u00E2\u0098+\x12\u0080v'J\u0089\u0090\u00A2\u00C9\u00BD\u009COtOz\u0092\x12c@\x04!\u00D5\u00CB\u0081>\u0091\u00F0]\u00BD\u00D7C1\x04\u00D1D!=\x19\u00E4\x04\u00BA\u00F4\u00B6\u00C2\x10`>RiP\fX\u00CENA\u00FF\u00EA\u00EF\u00BF\x04\u00DFr\u00CE\u00AFl<\u00E8\u00C9\x7F\u0087\u00E3\r\u00C0q\u0086\x00\x00\u00E8\u00FA\u00E13\u00FB\u00F8W\u00BF\u0083\u00EDW=\u00B9\rW\x01\u00D8\u0086\u00D0\u00FAM\x1D\u00BEH\u00D2$\x14\u0093`\u00D5\x18\x16m\u0095\bU\u00A0\u00BDO\u0088\x15\u00B1\u00C8W~\u00B3;\u00D9OaX+\x04\x15\u0092\u00BE\x01\u00BA\u00F4\u00F3\u008C \u00D3\u00A2O\u0082\u00F3{\u00D7\x1B\x15\u00EB?\x01\u00800\nq\x15U\u00D0\u00C0X=\x10\u00B4a\u00DC\u00CE\u00B3P\u00B5\u0089\u009F\x14h+\u00AAC\x18]\u00FBT\u00AD\u00D22\u009F\u0093x\x05m\u00C6a\u00C2\u00FD\u0088dj<\u00DE\u0089X\u008C\u00D9H\u00A7\u00E7\x04\u00C1\u00C8\u00CC%\u00DA\u00B0\u00BD\u00FBk\u00A0_}\u00F6\x05\x1B\x0F\u00FF\u00F1\u00FFKN~\u00C2G\u00F1e\u00DE\u00BE\u00AC\x19\u0082\u00EA\u00A7\u00EE?\u008Eo\u00FB\r\u00ED\u00AF\u00FD\u00B9\u0086w\u00CE\x1B:\u0080\x11\x1A\u00BEr$\u00E1\u00C3\u008Cq\u0093\u00EC@\u0097\u00E0i\u00F4\u0092\u00C95\u00AB\fbjq/\u00FFR\bWi]\u00FB\u00AA\u00F7\u008C\u00B1\u008B\u00DF\u0097H\x05\u00A0:0\u0085\u00CE\u00DEw\u00B9\u0098\f\u00A5Q(ke\b+\u00CF0\u0089E :\u00C8\u0098\x04E\u00BA\nWU\u0098I\u00CE\u0084\x16\u0086\u0080\u00D2\x1F\x19\x02\u009F\u00BF\u00CC\x17m#S\u0082'\u00F4\u00D0\u00B8\x06\u00F5\u009C\u00BE\u00C2\x10 \u00AE\u00D6\u00D0k\u00D3\x11\x01Vj\u0091\u009D#\u0080\u00F1\u00E4oY\u00C8\u00D7\u00FD\u00E0\u00EF\u00AF}\u00EB\u008F?W\u00D6\u00CF\u00DC\u0083/\u00D3\u00F6e\u00C9\x10\u00C6qK\u009A\u00BE\u00ED\x19\x1D\x7F\u00FE\u00C2\u00AEox\u00D0L\u00F6B\u00A5\u00E7\"\u00EE2\u00CD1\x00\u00A0\u00AD\u00A1\u00FB\u00E2m!\x11\u009DI8\u0094\x15\x14\t*\u0098\x12\u00BF\x1B\x00W\u00E1;\u00D5\x07\x1DI\\\u00F6\u00BB\x14D\u0090\x12\u00D8\x16\u00B8\rK]\u00EFoa|c\u00EB\x0E\u00C7\x05\u0088 \u00A1\t3q\u0084\u00DE\u00BA\u00A07u\u00C8\r\u0084[\x10\u0080\u00D6\u00EC\u00C4\u009A\x13\u00A1\u0080\u00A2\x01}\u00CCHG\u0097\u00EE4\u00A70@s5\u0089\u008A\f!\u00DC\u008C\u0095!`\u00FA\u00FC6^\u0081\u008EN\u00D4\u0095\u00A1\x16\u00DBF\f\u0093Lal\u0089J\u0098\u00A7\u00C1\u00CC\u00CB`\bD\b\u00D3\u00F7\u00B1\u00A5s\u00E8iO\u00BC\u00AE\u009Du\u00CE/\u00EB\u00D7\u00FE\u00D0+66N]y[\u00F7\u00FD\u00F6e\u00C7\x10\u00B4_qV\u00D7\u00BFx\t\u00FA+\u009E\u0088\u00E1\u0093\u0096[P\u00CD\u00EC\u00AB\b .\u00AC\x04M\u00A3\u0095QVD\u00F0\u00D5\u00A0\x1E\u0094\u00EB\x15\x0E\u00BD\u00D9w1pS\x1D \u0095\u00C6}\x0FaK\u0088\u00CF2\u00FDL\u0094P\u00A5\u00AA\u009FP\u00DDv\t\u00DF\u0093@\u00A4{\x05%WM\u00EATD\u00CA4\u00C7\u00C2\u0080*\u00B1\u00AAI\u00F0k\u00D9\u00A8\u00DA\u00D4\u00FBs\u00CE\u0098CAU\"]\u00B45_B\u00A6\u00CF\n\u0089\u00E8E\x16{YuA\u00C2]\u0090;T\u0096.1\u0096L\u00E8B0>\u00DE&\f\u009B\u0081Z\x06\u008C\u00EDT,N\u00FF\u00A7\u00EFX\u00FF\u00DF\u009E\u00FEo\u0087\x07=\u00E9J|\x19\u00B5/\x1B\u0086\u00A0\u00BAw\u00DE\u00FB\x1B~u\u00C4\u009F>[\u00E5]\u00EB\x03\u00B6\u00C3\x1C\u00B8#\u00E30\u008C\u0081\u00E9\u00DF?$CpW\u009C\u00C6\"n\t\u00E3\u0081)C\u00A1\x1B/\u00EE\u00B3B\u00E0\u00BCn\u00C2\u0088n\u00DB\u00C08\u00D5\u00F7ih3\u00C2\u00AB\b\u00A5\x05\u00A1\u00EEd\b\u00E1Jt\u00A9)u\f\u00D5]*\x00F\u00DE{\u0088\u00EB\u008C!\u00FA)\u00E5>\u00BC\u00FF\u00E1\x19B\u00CE\x19B\x05Xa\b\x13\u00E6\x027\u00A4\u0096\u00E7\u0087\u008F\u00A9\u0097w\x13\u0088$\x19B\u00A83\u00EC\u00BB\x0B\u00BA[U\u009A\u00A3\u008DV\u00E7s\\G\u00EFKl\u009D\u00F2\u00AD[\u00C3YO\u00FB\u00ED\u00B53\u00FF\u00E5\x7F\u0091\x13\u00BFz\u0081/\u0083\u00F6e\u00C1\x10T/}\u00E4v\x7F\u00F9\u00CB\u00C6\u00FE\u00DAG\u00CCf7`\x00Cy:F\u00E4\u0082\x05\x17q\r\u00ACA\u00EA\u00C6\u0094\u0096\u00D5\x16\u00C0\f=\u00E1a^3\u0089C\u00C0\u00E4z\u0088CeU\u00FBL\u00C8\u00DF\u00F34\u00A9\u00D7y\u00F4\u00A0z\u0090S\u00B5\u00D8\x1Bn\u0097B\u00D4\u0085\u00DFh\u009E2\u00D1\u00C5\u00EB\u00DC\u0090\u0089\x157\u00E0\u00A4\u00C2\x11k\x1C\u0084-A\x10\u00B6\x04\u009B\u0080D'%8\u00A9\u00D7{\u00D5\u00FB\x1F\u00C2\u00E3\u00C0\u00FB'\u0093J\u0086Y\u00F3\x1Bb\u00DE\u00BB\u00E4\u00C2-\f!\u00CE\x1B=\u009C\u00DB\u009F\u00C5\u0090P\u00CE\u0087M\u00A33\u00A7C1\u0084\u00CE\u00C7j\u00E8\u00B2\x0B\u008B\u00D3\u00FF\u00D9e\u00B3o>\u00E7'\u00D7\u00BE\u00EEG\u00EF\u00F3\u00A1\u00D0\u00F7i\u00860\u00EA\u00FE\u00D9\u00F6\u00F2u\u00FFq\u00D9^\u00F6\x1C\u0095w\u00CF\u009B\u008C\u0098\x01\u0098\u00C1\x18\u0082\u00D0\u00D4\u00A6\f4*R\u00A4\"\x05\u00B6j4\u00F3\u0096\u00C4\u00E6zt@\u00D0\u00DB20\u00D6E_\u00EE;1\b\u00A2\u00F4#y\u0080\x16\x7F\u00F6\x13\u00FD!\u00FA\\5\u00E4\u00ED0\u0084N\f\n-$(\x0F\u00D1\u00F7_\u0087/\x15\u0095T\u00AF\u0087GlV\x064E.+\u00DF\u00CB_\u00CD\u00AF\u00A8\u00E3\\5\u00BE\u00F2\x1D\u00C5\u00FD\u0082\u00D9H\x06$\u00D1\u00C8\x19\u008Cg\u0085!\u00F8\u009C\u00D7w\x156\u0099nk\x01\u00CEl8\x07\u00E8\u00E6\u00A1\u00E8\u00DA\u00B0}\u00CA7.\u00E4\u00E1?\u00FA\u00BC\u00F5\u0087\u00FF\u00EB\u00FF,\u00EB\u00A7-q\x1Fm\u00F7Y\u00860\u008E\u0097\u009F\u00B1\x1F\x7F\u00F6\u008A\x03\u00F2\u00F2\u00EFX\u00C3u\x18\f\x00`\x06\u00C5\f\x02\u00F3F{\u008B\u0090W\u00EA\u00F0\u0085\u0088\u008B\u00D4?\x1CC\x00\x1C)L\x16\u00F2a\u00EC\t\u00F0\u00FE\x0E\x15\u00FA\x1C\u00F6\x04\u009D\u00DE\u00B72\x04 u\u00E6\x18W\u00C6\x06L\x18\x02\u0092\u00D0\x12\u00A6\u00AF\u00BA \u0093Xz\x19+m\x0F;\x19\u0082\x06\u00D1\u00C4X\u0090C\x16\x7F\u008EP\x11\u00D8\u00DF\u00E1\\\u0090\u0085\u0090s.W\u0090\u008C\x02\x1Ah\ra\u00EF\b5\u008C\f\u00A1\x04rU\u00A6\x15\u00B6\x02\u00C0S\u00C8\x0BCX\u00AD\u00F9@d\u00D1\x01\x19\u00ED\u00B7\u008E\x01\u00AA\x02\u00C5.\u008Cg<\u00E5}k\u00FF\u00E8'\u009F\u00D1\u00BE\u00EA{\u00AF\u00C2}\u00B0\u00DD'\x19\u00C2\u00A6\u00FE\u00E5O\u00EC\u00D5\u0097\u00BEx\u0081\u00B7\u009F8\u0093%\x06tg\x02\u0086\fLeP\u00CC\x14hu\x06V\nt\u00C4B\u00ED\u00AB\u00D3\u00B4s\x11\u00D7H\u00BE\u0094v\u00A5\u00D8I\u00B94\u00FA\u00C7\u008A\u0095\u00BD\x10!\u00EF\u00A8\u00BD\x10c\u009C\u00A7IP\u0093\x03\u0094\u008A\x19\u00E4\u0093:|J\u00CFU>\x04PZ\u00D3X\u00DA\u0083\u00B8\u00E9\u00CB\u00AF\u00EAG\u00CC\u00D5\u00A4\b\u008AzAW/\u00D3\u00EE\x07\u00E8\x05\u0088\u00BA\u008B\n0\u0097\u0082\x1E\u0087\f=&GX\u00B5%\u00DC\x06C\x00\u0092A\u00B2\n\u00F5\u00EAs\u0086\u0097\u00E1(\x18\u00C2d^\x15\u00AA\r\u009B\x0F|\u00CC\u00BE\u00D9\u00B7\u00FD\x1F?\u00BF\u00FEm\u00FF\u00E1\u00E5;g\u00F2\u00DE\u00DD\u00EES\f\u00A1\u00EBU'\u00DE\u00DA\u00DF\u00F4\u0092\u00BD\u00F2\u00E2\u00A7\u008F\u00F8\x14\x06\u00E9\u0098A1\u00A8\u00AB\t\x02\fh\u00CE\x10z0\u0084\u00A9\u00DE[\u00F4SMC\x1DP\u00A5\u0096\x11\u0089\u00ADWM\u00F8\u00AA\u00E5\x1A\x05\u00CC\u00C8\u00A8+\u00E8 \u00FB\x06\x122\u00F3\x10m\x18S\u0086\u00E0\u00FD\u00C7y\u008A\u00ACPT\u0099\x18\u008D\u00A1=nQ\x19B\u00DC\u00B6\u008E\u00B7\\+\u008E4*\u00CC\u00D6J,X\u00C9\u00C2\f\x02\"#\u00EC\u00F1]\u00DC\u00A8\u00A2\u0085\u00C8\x15E\u00A5\u00F2\u00F1\u00F3\u0099'\u0092\x1E8D\u00A0\x12\u00C7\u0088T)\u00F8\x1C4*\u00D6|\x06\u008Em\u00C5-\x19\f\u0096\u00CF\u00B5\u00C2\u00D4\u00AA\u00CA\x10\u00C9^nS`\u009F\x1D\r\u00E3\u00DA)\u00C07=\u00E3\u0095k\u00DF\u00F5o\u00FE\u00AD\u009Cp\u00C6}\u00A6\x18\u00EC}\u0086!l\u00E9\u00DF?\u00FC\u0096\u00F1O_w\x13^q\u00D6l\u00B8\x15\r\u00C0\\\u00A9\"\x00\x03\x04\u0083\x003/f&P\u00AC)m\t\u00B0\x1A\u00A3\x00@\u00E9L?\u00FE\u008A\u00E4\u0098X\u00B2U\u00D0\u00D1\u00C3S\u00D1'\x0B\u0096\u00BA?\u00AF)\u00D4W\u00BFW\x1BE=\u00CE\\\u0087\u0090\u00CC+\u00AFj\u0087\u00DA\u00C01\u00EA\u008E{\u00A9\x1B\x02E\x07\u00C0]y\u0082\x16L\u00CDG\t\u00BA?\u00ED7~\u00F6\x10\u00E9\u00F8k;\u00EF\u00EB\f*m\x18|\u00B6\u009E\u008C\b\u00F4\x04\u00D896\u00C7\u009A\u00CF\x11:|_\u00E9\u00BF0\u0085\u00A2\u008AL\x18\x02\u0099X\u00ECSAC\u00E5j\u0090\u0092\u00A3\u00BD.9\u00CE\u0082\u00B22\u00E9+\u00E7\u00D3\x18\u0083\x04C\u00A0\u00F1R\u00D1\u00A0}\u008E\u00ED\u00AF\u00FB\u009E+7\u00BE\u00FD'\u00CE\x19N?\u00E7\u008AC\u00BC\u00C9{]\u00BBO0\u0084}\u00FD\u008D?v}\x7F\u00C9\x1F\u00ED\u0093\u00B7\u00EC\u009EA14\u00B3\x0F\u00CC\u00D4U\x03\x18Ch\x02\u00CC\u0091L`\u00EEv\u0084\u00AC\u00BDS\u00BC\x055\x18\u00C6\u008F)-\u00E4Q/\x00\x18\u00A1\u0093\x12b;\u00A5j\u00EA\u00E8\u00D1\u00AAd\x0E=\u0098\x18\x7F\u00A5@I\u00FC[\u00CE\u009F\x1Co\u00D9\x15\x17q,\u00FE9h\u00B57\x1B\u00C7\x00\u00E8,\u009F\u00CF\u00AF\x11\u00DE7\u00AE_a@\u0094\u00AE!\u00A5\u00D5C&\u0082\u00DA\u00D3\u00D7\x0Fx0T\u00CEA\x10?\f1\u00D8\u009C*DGG\x15=\u00BD*\u009C\x06g&\u00AB\u00F3\u009F^\u0088\u00A9\u00B1\u0094j\x14\x19\u0085\u00A1\u0085\x12\u00A4\u00C4k<\u0098,\x10\u00C5\u00B8\u00CA\x10\u00AA\r\u00A7\u0099g\u00A7\u00A3xr\u00CA\u00BCu@\u00BB`\u00FB\u0094o\u00DD\u008FG\u009F\u00FB\u00AF6\x1E\u00F5\u00F3\u00AF\u00C6\u00BD\u00BC\u00DD\u00AB\x19\u00C2Ro\x1En\u00EE\u00AFz\u00E1u\u00FD\x0F~a{v\x15\x1A\u00B6ME\u0080\x18C\u0080\u00BA\u00CD@\\= s\u00B0s\x1A\x14s\u00FF\u0097d\x15\f\u00A1 \x04JPJ\x0B4\u0087\u00FA\u00AAQ^\u00B02\x04(-\u00F6\\\u00B8\u00AB\u00F0\u00BC|\x16\u00B8>~\x1B\f\u0081\u00D7P\"\u00FAw\x052N\x1F\u00CD\t\u00BE\x19\u00E1\u0088B\u00FAZH}\u00AA0\u00CCc\u00A8\x03\u0091p%\u0096sw\u008CYr\fa|M\u00E1n\x04R~<\u00DC\u00F8u4\"#aw\u00AF\u00D5\b\u00B7\u00F4w\u0086\u008F\u008F\u00A0\u00CA!\u00D0\u00A9[\u00D7\u00FB]\rR\u00EA\u00BD\x04b9\x11O\x1E\u00D5\u0089\u00B8\u00FB\u00FC\u00EEd\b\u0098x,\u00A6\bA\u00C1P\u00E7\f\u00F62T\u00A2\x10,\u00D7O\u0083~\u00FB\u00D3\x7Fw\u00ED\x1F?\u00EB\u0097ex\u00E8\u00BD6\u00B5\u00FA^\u00CB\x10\x0E\u00EA'O\u00BA\u00BE\u00BF\u00EC5\u00D7\u00EB\x7F\u00FF\u00BE\u00DE\u00F6\u00B8}\u00A0\u00FB\u009F`\x0E\u00C1\u00CC%\u00D1\x00\u00C1\f\u0082A\u00D4\u0098\u0084\u00C2\u00D5\x07\t\u00840\x14\u00A6p(\u00E2c\u00E8\u00AD\u00D9\x05\u00AA\u0095\u00DE\u00FF\r]\u00B9\u00F8\u00E8A\x1D\u00FA0(A\u00F3\x16v\u008F\u0095\u00E3E\u008FN\u00D4\u00C2\u00E2\u00A7\u00FC\u00D7\u00EEi\u00F9\tm\u0082\x00Z$#\u00B5\u00F2<\u00AD\u00D4\\\u00A4-\u00C0\u00F5\u00FE\x18\u00BF\u0096gpc\u009C3\u008B\u0088\u00AF\u00A0z\x00E\u00A6\u0083\u00AF$H\u00A1F\x17\u00F22\u008D\u00E8H\x06\x1A1\u0095\x1APHw\u008F^\x1F\u00BD\u00EF\x0EQ\u00CB?P\u00EF\u00AFi\u0086N\u00C7s\u0089\u0098\u00CA0\u00F6\t\u00D2\u00C8\u00B9l\u008E \u00EC\u00DA(#\x07\u0084=\u00C3\u00C2\u00B0Q\x10\x06\x19\u00BFLl!\u0093\u00EC\u00CA\u00D2\u00C7\x12\u00BB\u00B1x\u00F8\u008F\u00BCe\u00E3;\u00FF\u00DD\u00D3\u00DAW>\u00EA^Y\r\u00FA^\u00C9\x106\u00F5\u00B2o\u00F8\u00F4\u00F8\u00E2\x0B>\u0083W\u009E9o\u00DB\u0098\u00A1\x192\x10\r\u00860\u0080\u00EA\u0081\x19\x15\x07\x11\fP\u00FB\u00CD\x19\u0082\u009D\u00A7\u00E9\u0081P\u00844\u009A2\u0084b`(\u008B\u00DB\u008E\x15\t\u00C8s\u00AB\u00F4\u009C\x14,\x05d\u0095)H\u00E9s\u00D5\u009E@F\u00E4\u00A3\u00B2HB\u00C38F\u00B8\u00CD\u0089}\u00F0\u00FE\u00E9G\u00A1E\u00DF\x18\u00C2\u0084p*\x13@\u00F3b\u00A5q\u00A3x\u00D6\u0088\u00CB\x00b\u00EC\u00D3}\"\u008DP\u00BA\u00DF\u00C7\u00A4\u00B2)\u00F1B\u00D8@&\u00B7\x03)\u0088\u00A3\u008C\u00D1\u00C7\u0099\u00D7di4\u00BAPml\u00A2#\x14\x0B\u00A8v\u00B4b\u00A7\u0090\u0092\u00DF\u0081\x11\x11\u00BCU\u00FFjH\u00B5\u00A83\u008E\u0089\u00AD\u00E30\fa\x15!\u00F8\u00FB\u00AD\f!\x12\u00DE:\u00A0\u00E3\u0080\x0E\u00C1\u00F2\u00F4\x1F\u00F8\u00E8\u00FAc\u00FF\u00CF'\u00CB\x19?\u00F4q\u00DC\u00CB\u00DA\u00BD\u008E!\u00EC\u00D1\u008B\u00BE\u00EB\u00EA\u00E5\u00EF\u009E\x7F\u00ED\u00F0\u00A6S\x06,\u00B0\u00AE\u00DD<\x07\u008D\u00AA\u0080\u00D9\x05\u00A6\x7Fb\u00AA\u0082*f\u0082\u00C2 \u00D2\x0598S\x18T\u00D1\\0\u0087\x1E\x1D\u0095\u008B\u00FCo\u00E2\u00EE#\u00E5\u00AFD0N\u00A2\u00FE\u00EC8\u00ED\x12\x13\u00A4P\u0098L\u00E8\u00C0q\u00C8\u0089^\x07'\u00FA6\u00FDW\u00C5\u00C7F\u0086\x01\x7F\u009A\u00FCl\u00E3ru\u00A0,^2\u0090\u0090\u00D4\x00\x18\u0085\x18F\u00D1\t!3\u00BEA1\u0089\u00E0,\u00EED\u00D0\x00\t>\u00B7&\u00DA\u0098\x140\u00D1\u00F2\x07\u00D4B\u00AB\u0093\u00DF\u00B4g\u00BC\u0086.m\u00EA\u00B5\u00A31\\\u00DA\u00D1\x03\u009Ci\u00A0\u00AB\u00AB#\u00F9\u00FEt\u00A4\x1A\u00C1\u00F7\u00E3hf\x05!\u00A4\n\u0086\u009D\f\u0081\b\u00C1\u0099\u00D9\u00E1\x18\x02T\u00D0G`\u00D4\u0086\u00E5\u0083\x1FyS{\u00DCO\u00FE\u00D0\u00C6#~\u00F6\u00A2\u009D\u00AB\u00F8\u009E\u00DB\u00EEU\f\u00E1\u00DA\u00F1/\u00CE\u00B9\u00BA\u00BF\u00F8\u00BC\x1B\u0087wm4\u0098+q\r\u00DD\u0088\u00BC\u00D8\x04\u008C\u00D0i/\x00\x06m\x18\u00C4T\x05C\x12<\u00D7Hf\u00A6\u0082A\x1A\x1Az\u00D8\x1381]=\u00DE\u009DR\r\u00C8p\u00E5\x15\u00A4P\u00E9<\u00F7L\\\u0085\u0096\u0094\u00C8\u00BC.\u00AEp}\u00BA!\u00CA\u00B3\x05\u00F1\u00CF\u00CBg\u00AA\n\u0082\u00D4\u009F\u00AB\u00E5\u00BF\u00D4\x15\fd\u00D0\x10~\u00FC\x12\u00A0d\u00D7\u00A69\u00B5\u00C6\x1Cd\u00E0\x0F\t\u0099\u00CFa\f\u0083?5'\u008A\u0089\u00A4\u00AFAW\x135bu.4%\u00B5\u00C7.h\t\x0E\u00CB\u00A4$'>\x1D\u00C1\u00BD.\u00B42\x03\u00ED\u00E8:\u00A2\u00C5\x1E\u0098Z\u0090\t\u00E7\u0096]\u00B14\u009D\u00A1\x1B\u00E9c\x18\x18\u00A5\u00BA\u0081i\u0083`\u00DC\x02]\u008F\u009C\u00C3\u008A|z\u00F6\u00CFu\u00A0\u00E3\u0080\u00C5Ign\u00EAw\u00FE\u00C4\u008F\u00EFz\u00DC/\u00BF\x0E\u00F7\u0092v\u00AFa\b\u00D7\u008D\u00E7\u00FD\u00FCe\u00FA_\x7Fo\u00DFpEk\x1Ehd\u0084\u00DF=\x1C9\u0089<U\x01`-\u00BE\x1B\x01O\u008C\u008D\u00C2\u00EFfc\u0090@\x17I\u00B0\u00944\u00A1F(\u008B\u008C\u00DA\u00F7i\u009A4\u00F5\u00ED\u0095\u00BA\t<\u00EE\x04\u0095\u00E7\u00B3Q\u00A5\x10\u00A0\u00CF\x00]+\u00A8\u0080\u00CC\x01 #\u00982\u008DrmA\x05S\u00D8,\u00B9\u0098\u00D1V\x02\u00B0\u00CA\u00FD\u00B9\u0093tx\tVT\x0E\u008F3PZ\u00F8V\u009E\u009Fi\u00D7\x13\x04\u00E0\u00C7\u00CC`\u00A8\u00D1\x7F\u0086\n;S\b\u00B5e\u008C\u00DF'\u00E1\u00D2N\u00F8\u00DCNN1B\u00B0\u00F49\u00EB\u00CE,\u00C8 Fg\f\u00FC~\u00FB\f\x01d\u00FC+\f\u00A1\u00D3\u0090\\\u0098\u00FB\u00ED1\x04\x00\u00BE\u0099\u00ED\u0080\u00ED\u00DD\u00A7\u00F5\u00F6\u00D8s\u00FF\u00FD\u00DA\u00D9\u00CF}1\u00EE\x05\u00ED\x1E\u00CF\x10\u00C6q\x0B\u009F\u00EB\u00AF\u00FE\u00CD\u00CB\u00F0\u00BC\u00FF\u00B4o\u00B8\u00DA\r\u0083\u00A6\x02\u0098\u0087\u00A0O\u00BC\x06\u00F6\u00BB\u0091\u00851\u0083\u00E9\u009F\u00A1\u0081\u00AA*0\u00B7\u00A1M\u00BEG\u00A4\x1D\x10\u00903'K\u00BD\u00F2\u00EF*Rh~\u00AC\u00F8\u00DF\t3\u0085\u0084\u00D6L\x12Q\u00EA\u00C9\u00CC\t\x7Fpb\u009A\u00D9_ \x04)\u00D6\u00F2J\u00FC\x02\u00F4\x01\"m\u00B2X\u00AB\rAz=\u009F\x03j\u00A5/8Q\u00AF\u00F6QS\u00A9i\u00BB\u0088\u0087\u0099.\u00FC\u00F2\u0099nA\u00EE0U\u0099\u00C2\u0084q2\u0090\u00A8|\u0087\u00AAmu\u00DFG\x1F\x13\x19\u00883Z\u00BF\u00B7\u008E\u00DD\u00FB\x1B\u00E1~``tOE\x07\u00C8T\fu,\u00D2\u00F8\u00C8\u00CDr'\fAK\x05\u00EB\u00C33\x04\u009Bk7\u00BC\x1E\u008E!8?\u008B\u00B9\u00F0>{o\u00D0\u00F5\u00D3\u00D0\u00FF\u00D13\x7Fk\u00EDI\u00BF\u00F4\u00EB\u00B2~\u00F2!\u00D7\u00F9=\u00A5\u00CD\u008E\u00F5\x00n\u00AB\u008Dz\u00B3\\\u00D3_\u00FE{\u00EF\u00D7\u00E7=k\u00FF\u00EC\u00B3\u0098\u00F9\u00E2h\x10\u00F3\u00FF\u009B\u00AC\u00B6\u0080\u00A0X\u00DF\u0096\u00DA*H\x1B\u009D/I\u00C0\t\u009E\u00EF\u0090\u00E0]\u00CBy\u00BE\u00EC\x02\x11\u00D4H\u00C6z\u0092\x00n\u0089\u00AA\u00D2\u0096w\u00948Y\u00D8\u0091\u00A64\u00B7\u00FB\u00B9\u00D2\u00A3\u00FCwf\u00BA>\x1A,\x03\u00D2q\u008D#\x01\u00BB_G\u00E8\u00FD\u00D2 \u00E2\fC\u00A4\u00D0\u008C\u00E4\u00F8\u009Am`\"~\u008E\x11\u00A1\u00D7M$\u008A\u0080B\u00C5~\u00A3\u00C8\u00D7\u00CE\u00F9l\u00E1N\u00E5V\u00F3\u00A2\u00CD9$\u00E2\u00FA` \u00E2\bA(\u00F5;l{8I\u00CD\u00A4\u00DAb8\u00F1\u00CD~o]\x1D\u00BB)\u0080\u00D1\u00F5\x11\u008E\u0093\u00CA}\u00DAa\u00B3o5\u00C6\u00E5\u00FFF\u009C\b\u00D4\u009F\u00DB\u00DC\u009A\u00D6\x15\u00DF\u0089\u0097\u00ACG\u00B0Y\u00F0\u00D2\u00AA\u00C61\x01N@F$\x01\u00AA\x025\x06\u00B7[\u0091\u00AF]0t\u0085\u00EE\u00BF\x0E\u00FD\u00BD/\u00FEO[\u00BA\u00E7\u00FE\u00BA\u00BC\u00F6\u00DF\u00CB\u00EC4\u00C5=\u00B4\u00DDc\x19\u00C2R\x0F\u00B6\u00AB\u00C7\u0097\u00BF\u00F4\u00DD\u00FD\u00B7\u00CE\u00DD\u009A]\u008B9\x14\x0B8\u0087\u00F7\u0085\u00EB\u00B5}<\x1F\u00C1\x16\x12]\u00C9\u00A2\u00C0R\u0082\u00EC\u00D0}\u00A9\x19\x13w\x15\u00C2\u00A1\u00EF\u00E8o\u00B6\u00A9\x1A\u00B3\u00F1\u00F7\x1A\u00B6\u0084\u00A4ooE\u00E2N\x1A\u0097W\u00ADG\u00E00\u009CT\u00AA\u00F4\x10x\u00DEex\x06\u0086\u00F2\u00AF r2\u00E3\u00D9\x04*\u00CD\u00D8a!\u00A4P\x1Fj\x1C\x01\u00F2\u00BE\x12{:\u00B8\u008E\u00EC\u00A3\u00B1\u00E7\u00F2\u00B1\u00D2&\x00\u00EBK\u00A4\u00F4#:}\u00FCbK\u00B1\x1F]4J\u0092\x16\u00DF\u008F\bc\x1E\u008A\u00EA\u0084\x0Ei@\u00D4\u009F\u00AF\u00AEVa\u00C5&\u0085\x15a\u0081\x13\u00B3\u0082\t\u00EB\x12o\u00B8\u0099\u009A\u00E0oU\u00D0,/\x02\n\u00C5h\u00F3\x0F\x010\x022B\u00C5\u00FBq\u00F7\u00A5\u0084\u009A\u00A2\u00ABd<\u0099\u00BF\u00E0\u0093\u00A8\u00AF\u00BF0\u00B3rN=i\x12{\"\u008A6\u00EEG\x7F\u00EFy\u00CF:\u00B8\u00DC\u00DE\u00AD\u00E3M?-\u00C3)\u0087\u008AQ=\u00E6\u00ED\x1E\u00C9\x10\u0096\u00BAg\u00B8r|\u00F1\u009F\\\u00A8/zf\u009F}\x11\x03\u0080\u00A5\u00BB\r;\u0080\u00AE\u00CA\u00EA\u0087q\rQ\u00C1\b_:\u00B1 \u0092I(\u0080%\u00CC\u00A8(\x10\u008C\x10\u0080\x0B\u0085D\f\u00BBX\\\u0092\u00F4\u00E8\u008F\u0092\u0082\x12\b&\x05\u0093n@\u0098\u00C2u\u00A1\x11E\u00D8\u00A0b\u0084/\u00E1\u00E4\u009C\u00C5\u00EF\n\u00B7\x17\u0088\u00A3\x01f_F\u0092v\x04X\u00DBgJb\u00C0T\x06\u008E)\f\u0081\x1C\u00A3\x11\u0097LV\u00EA\n\u0083PJA\u0081\u008A\u00AB\b1\x7F6{\u00C67\u008D\u00C3\u00A9\u008B\u00D2`.\x05I\x00$\u00AF,\u00A7\u00C6\u0098\u008D\u00C8\u00B0\u0094\x01\u00E1NQMi^)\u008Eh\u0086\x1AO \x11\u00F8\u00DC\u008D\x10\u00C9\u00E0&\u00F1\u00B8b\u00CD\u00B2'\u00C68\u00B4\u008A\u0083\x0E\u00C5\x12\r\x1D\u0090%\u00B4\u0099\u00D12\u00EC!\x13\n\u00BF\u00BDv\x18Dp\u0098&\x10\u00CCT\u00A0\u00DB\u00FB\u0080\u00F7\u00BE\u00F2\u00DC\u00ADq>S\u00DDs\u00AE\u00C8\u00FD\u00EFq\x01L\u00F78\u0086\u00B0\u00A5\x07\u00DB\u0087\x17\u00BF\u00FF'\x7F+/x\u00E6r\u00D8\u008B\u00B9sc\n \u0093\x07d\f\u00F6\u00EA\x15U\x05\u00B0%\u00EC\u00CB\x12\u00C5\\er\u00C4\x17XG\u00B7eSP\u00BFi\x00\x1A\u00B0\u00DAH\u0092\u008C\u00C0\u009Ae\u00E7\u00F1\x07\u00814\u00B7*\u00A3\u00D4a\u00CC\u00C30\u00CC\u00E1\u008EO\u009D#\u00AB1\u00E4_\u00E4a\nU\x04\u0087\u00F8\u00F08\u0083\u0080\u00F9\u00EC\u00D9\u0088\u00D7\u00B2%+s\x00\"\u00BC*\u00F0o2\u0096\u00C9\u00D8\u009C\x19$\u00AD\u00B9\x11\u00AF0\u00BB\u00C9\u00D9b\u00E8\f\"@\x1B\u00C2//\u00BC\x17\u00FB\x10\u009B\u00F1@H\"6\u00F3\u00AC\u00D5\u0088\x02>2\u00DA\x0B\x14\u00C3\u00EA8>\u008C\u008E\u00BC>E/R\u00DD\u00E8\u00C6H\u00A1P,\u0091f\u00E1\x0ES\u00A9J\u00FF\x02Ge\u00BD\u00A0\x1CgD\u00BE7\u00DC4\u00A2tU-J\u00E45\u00F1.\u00DD\u00D1\u00E6hqm{\x0B\u00CB\u008B\u00FF\u00F4\u0099\u009B\u00E3\x12z\u00F0s?%\u00BB\x1Er\u008FB\n\u00F7(\u00860\u00EA\u00ADr\u00E9\u00F2\u008F_\u00FA\x0E\u00BC\u00E8\u0099\x07\u00DB\x1E\u00ACa\u0089\u00A6\u00E4\u00F7)\u00E7T\u009C!\u00888X\x04\x00\r\u00E2\x1E\u00E1h\u00D4\u00DFn\u0087\u00A9\u00A3K\u00AA\x06\u00E29\f\u00CA\u00FB\u00DA\u00BF\x12L\u0085\u00CC\u0084\u00EB\u00A3\u00FE\u00B7\u0090\x16\u00E1\u00A4\u00B8J\u0090+\x1D\u00E9\x02\u009CC1\u00F7\u0080\u00A2\u0099\x11=\x04i'pI.\u00E9Q \u00A9I\x1B\\b\x1398t\x0E\u00D1I\u00DD\u00DCg\u00A0\u00AA(\u00BE\u00B5;%xz7\u009A\x11\x00!@\x18Z\u00B4\x1COB\u0097B\x18R\u00E7Bh\x18,\u0093G\x03\u00A2T\x17\u00AC\u00C2\u00D4 \u0083\u00EB9\u0089!\u009E\x1D\x11\u00B8\u00F1\x12\x1AR{\u00BA\u00AD=\x19\u00A11l\u00A5\u00FBQ\u009A\x1Fi@\u00EF\x10LK\u00DA\x01\x1D\u00AC\u00A2\u00CD\u00BC\t3\u00DCv@\x17\u00BEz\x16\u00C6\u00C0V=\x05\u00AB\u00A8a\u00F2Uv\x1E?ls&\u00D7\x01H\u00C3l\u00DC\u00C2\u00F8\u00F7\x7F\u00F6\u00CC\u00ADa\u00B6\u00D4\u00C5-\u00FFJ\u00E6\x0F8\x1A\x16s\u0097\u00B4{\fC\u00D0\u00AD\x11\u0097-_\u00FE{\x7F\u0083\u00DF>\u00F7\u00C0\u00FCzxZ\x0E\x06 \u00F6U\u00E6\u00FA]\u0080\u0081\u0083\u00B1Ja\u0084\u009E\u00F2\u0090\u0088\x00\u00FEy\u0094\u00A9\u00A4\x17X\x18;\rl\u009DF# P\u0085\u008B\u00F8\u00EC7`B\u00ED\u00C9\u00FB\x13\u00B8ZA?\u0085\u00FB5t\x0E\u00E1w)\x01E\u0081\x10\u00F8\u0094D\t\x04\u00E3$b\x0F:\u00A2>\x1E^\x05J\u00B3\u00A2R\x04s\u00A0\u00B4GJ\u00D9\u0096q\x06\u00C6\u009C\\\x01j\u00AE\x0E\x18lr\x06\u00E0\u00E2]\u0087\u0088\u00E1\x07\u00ABR\u00C3\u008E9y\"8bw\x1C\u00A6\u0085\u00B7\u00C0&-=\f-$\u00B3\u00EA\x00\u00B4fx\u00AE'\u00A22\x17\u00A5]-\u0092\x18M\u00BDc\u0081@\u00DBhs\u00C2\u0098\x0E\u00D1\u009C\u0093@\\\u009E8%\x03\u00C4sO\x04n\x10E\u0087\u0088[\u0095\u00B4\x032\x03t\x01\u0095\x11\"N\u00B9\u00BD2#\x7F\u009A\u0098\u00CF\u00FC\u00E9h\u00DB\u00FAr\x13\u00DB\u00EFy\u00D9\u00B9\u00FBe}\u00BF.n\u00FDw2\u00FF\u008A\u00A3\u00EF\u00ECNl\u00F7\x18\u0086\u00F0\u00A1\u00F6\u0087\u00BFy~\x7F\u00FE\u00B3n\u009E\u00DF\u0080\r\u0095p\u00ED.\u008B\u0084\x18\x1C\u00D2Sr\u008Dj\u00CB\u00C5\b\u00DE\u00DE\u00D3\x120i@\u00FA0`\x1A\u008B\u008C\u009F\u0093i\u00E4yD\x15\u00FCNx\u00ABJ\u00C9d\u00AD;\u00BD\u00ACj\u0090*\u00E2\x10v\u00CD\u0099@a\x04\u00D5X\x18\u0084\u00DB\u00CC\u00CE\u00E0\u00C7\r\r{\u00CC\u00814\u0087\u00BD\u00C2\u00CE!\u00AD\x01}@\u00D8\x01\\\u0095\u0080\x1B\x013i\u00A9\u00C4\"\u00F8yS\u0089V\u00D4\u0089\bT2\u00C9n\u00F7*\u00B1\x16\x01\u00CB\u00DA\u00B4o\u00F4\u0082\u0084\u009C\u0088\u0088.B\u00C2W\x1D\u008AP_\u00CAW\u0093\u00DC\x12F\u00C9\u00A2\x0Ex\x1F\u0089*\u009C\u00E1\u00C0\x18\u00958S\u0096\u00F0&\u00901\u00E43ReP\u00FF\u00ACq/z|L\u00BD\x10\x1A\x1A\u00A5\u0085\u00FA\u00E0b\x04\u0081\x15w\u00A8\x0FD\u008De\x0F\u008F\u00BA\x16@\u00DBMY%\x02\u00EF\u00BBA\x1B0loB\u00DF\u00F5\u00B2g\x1D\x18\u0096{\x00\u00FC\u00FA\u008EN\u008EA[]\u00D3\u00C7\u00A4]\u00BE|\u00FD\u00CF\u00BF\u00B6\u00FF\u00DA\x7F\u00BBi\u00F6q\u00CCDqB\x17\u00CC\x04\u0098\u0089bM\x1531S\u00DC\x1AJ$\u00A2*\u00E6\u00B0c\x19ld\tM$\u00C5\u00994Ot\u00B2\u0090f\u00F1\u00F3\"&\x01-\n\u00A8X\u00BD\u0084\x15\u00F9\u00AE\x04\u00FDN\u00BE\u0092\u00E5\u00BB\x01\u0094\u00C0\x19z\r\x06\u0088\x0E@\u00F7\b\b\u009D\u0095\u0085G\"u\u00CF\u00C2J\"\u00920\u00F8(\b/%^\u00A2\x01z(d\u00B2\u00F0\u00E3\u009C\x12\u00C5[\u00C3\u00A5\u00F3\u00BCr\x0E\u0088\x16\u00A8~\u00A0\x04\u00D7\u00F8aU\b}s\u00B5`IHc\u008D\u0090]\u0085Z^A\u00A0\x01\u009D0\u0085\u00DCI\u00DA\u00FF\u008D\x18\x05\u00F6\u00AB\u00C8\u009D\u00B2=\u00A7\u00C13\x1FA/\u0088\u00C7\r\x00\u00DEOw\u0086\u00C1\u00A6c\u00C44\u00D89\x16\u00AB\u00A0,\x19\u00DF\x01\x19\x1D7v5\u00B5\u00A3\u00BBQR\u0097\x1E\u00CB\u00D03\u00A6A\x17\u0088 \u00A7\u00D1\u00E7\u00A3\u00FA\u00B2\u00BB\u00F8\x1E\x1E\x1C\x0B\u0091\u0092]\x16\u0099\u00A8\u00BD\u008C7\n\u00B2\u00F8s/\x05\u00DB\u00EB\u00A7B\u00BF\u00FB'\u009F\u00B5\u00F1\u0094\u00FFr\u00CC\u0083\u0097\u008E9C\u00B8r\u00FC\u00FF\u00CEy\u00F5\u00F8\u00BC\u00D7|j\u00FE\u0081\u00B6\u00A6\u00C0\\\x04\x1B\u00AAX\u0093\u0086\x19:\u00D6\u009C\u0080\u00E7h\u00CE\x10j$\u00A2\x05)\x19(\u00AF\u0084\u00CE\u00C2(\u00CD\u00CDy\x1A\u00D9\u008C5\u00A4\u0099\u00A9\u00CF3\u0098\x15XD'\u00C7\u00C3\x1F\u00A0\u0099\u00E3\x00\u00A0\u00ACaIu@\u00E7\x16e\u0088\u0099\u00A5\x1DC\u0090a\u00C65\u00A2\u0090\u00C1D\u00E6YP\u00FF]\"\b\u00C8n\x10j\u0080\u00BA\u00D7\u00A1J\u00E8\x12D\x14)\u00D7\u0090\b\u00CCc\x1F\u00D3\u00AD\u00DC\u00E0\u00C4\u00E9\u00B1\x05N\u0090\u0096\x1198\u00F1J\b\u00FE\u00E4|I\u008C\n\u0084\u00E1\u008D\x12>\u00F7\u00A4@\u00BA\x10W\u0082\u0092\u00F2\u00B7<F=?j\x1E\u0094\x00%\u00F0\u00FE\u00BE\u00A9\u008A\u00E16\x1B\u008B\u00D594\u00E6\u0091\u00F5\x12$\u00CE7\x061\x16\u00A6\u00B0\u00B4>z\u00B7\u00FEGEl\u00E7\x16\x01T~~Wg\"dN#\u00B4/\x01\u00ED\u0090\t\x03I&\u00F9%3\u0084Q\u00A1}\u00C0b\u00F7\u0083\u00FB\u00F2\u00EC\u009Fy\u00DA\u00EE\x1F\u00F8\u008F\u00C74\u00CC\u00F9\u0098\u00AA\f\u009F\u00D3\u008B\u00BF\u00EB\u008F\u00B7\u00FE\u00C6\u0092\u00E1\u00EF\x00\x00 \x00IDAT\u00C3yW\u00CD.kM\u00CD)\u00D4`j\u0082 \u00EB\u00FA\x01\u00AE\x1A\u00B8\u00BBQ\\\u00CF^\"d+\u00A8y\u008B\u009A\u0083\u00C9T\b3E\u00A6\fQ\u00F7J\u00A8\u00DB\"XhUC\u0093W\x15\u00F74\u00D0\u00ADiq\t*\u0099/A\u00B7\u00A6b\x06\u00E8:\u0098U\u00D1\x18G\x10*\x02\u00D5\x04\u00EF]\x05\u00E6I\x18,~`\"\u00C1\u00DBDUI\u0086R\u00EC\x0B<7\x14\u00EE\u00C2h\u00AAB\x1Bq\x04U\u00E9\u0095\u00BC\u00954\u0097\u00E6\u00E5\u00B8\u00B8\u009F\u00BF\u00B1\u00D0\b\u00FB\x0F\u00B8\x10s\u009C0\u00A2\u008E\u009B\u0090}\u00F58\u00A6\u00D7(h\x11\u0088w<a\x1E\u00E5_\u0083\u00FA\u0080\u00A2\u0083\x1B\u00B5\u0084j\u00D1X\u00DE\u008E(AA\u00E3j\u00DE\u00DE\u0099\x1C:,\u0094\u008Dc\u00F2\x10i~\u00A7\u00D7abL\u0094\u00F2G\u00F5\u0081\u00ABB\u00CB\u00AAJ\u00A5\u00F3\u0088\u009B\u00C2\u00E7]1\u00DB\u00FB\u00F9\u00B6\u00BC\u00E8e\u00E7m\u00BD\u00FB\u00C5_X\x7F\u00FC\u00CF\x1F\u00B3\u0084\u00A8c\u00C6\x10n\u00D2+\u00BF\u00E1\u00A5[\u00BFr\u00FE\u00C5k\x7F\u00BF\u00B1K\x15k*\x18\u009A@\u00DD\u00BC\u00D7U1\u008A\u00ED\u00BBg\u009E\x063&\u009A\u0085\u00D9\u00D6|Ss\x1F\u009A\u00C6\u00D7\u00CC\u00A5(\u00D5\u00CB`\u00CB`\x12\u009D\x17\u00CBB\u00E2\u00DB\b\u00AF\u0087\u00E0:0e\x12\u00ED\f\u00C2\u00FB\u0082\u00C6\u00B4\u00E6\u00ACa\u00DD0\x0BC\u008D#\f\u00D9\u0089\t\u00E5\u00B3x\u009C\u0081\u00CE|\u00BD6\u00D8\u00FE\x02$j\x06!\u0099\u0094\x11\u00A1m\u00C1\u008E\u00F1\u00CEP\u0084\u00B5\x1A\u0092L\x04>'\u00A1\x02x_\u00E1*\u00F49H\u00BF}\x03Z\u009B\u0084s\u00B2/\u00EA\u00E7\u009C\u008B\u00EC\u0093\u00A4?\u0086\u00E7f\u00E2\u0082\u00F3/v\u00F5\n: \x1Bh0\u00C9,\u00FE\u00CE\u00F8@\u00A4A\u00AA(\u00D4aD\u0081n\x1E\x16\u0086 \u00AB\u00F4\x18\u008BMFs\u0091L&\u00EA\x04\u00CE\u00F7\x1EF\u00D8\u009E\u00B6\x07\x7F\u008E\x12B\u0089p\u00B9b\u00CC\u00B9\u00E7\"@2D-\u00CC@\u00F8\u00DC+<ygc\u00DF-\x19`\u00D7x\u0087\x02\u00C5\u00DA\u008D\u009F\u00DC\u00D8z\u00FB\x1F\u009E?^\u00F6\u00CA\u00C7\x0E\u008Fx\u00FA1I\u009D>&\fa\u00AF~\u00EE\u00A4\u0097m\u00FD\u00E6\x05\x17\fo:eC:\u00EA\u00B2o\u00BE2m\u008E-\u0085\u00A5I\u00C6\u00A9\u0091\u0088\x07h\x18\u00F7\u00962\u00F5\u00D2\x03\u00C9\u00D3k\x135oC:0=b1z\x15\u008C*\u00E8b\tSc\u00C82.\u00AD\u00E6\u0098\u00C3c\nt#z\x00\u0086\b>\u0082\x1B\x17Y\u00C3\u0090\u00A8\u00A0Ju\x01\u00DD\u008A\x1A\x18\x07\u00EA\x01L\u00E4l\u009A\u00AB,\u00D0\u0083\f\u00D0F4T$\x13\u00E3\x12\u00FCX\u00EC\u00CD\u00C8\u00D8\u0086\u009E\u00BD$zh\x11\u0092L\b\x1BFJ\u00E1y\u00D5MN\u00F68\u00C0\u0082\u0094\u00C4\r\u0091\u00CE\u00CC\u009C\u00F0\x05\x1A\u009Fsl\u00894\u00D2;+\x1E\x04\u00A2P\u00A9o\u00CB\u0098\u0096\x05]u\u00A7}I\u0081\u009D\u00AC\x0B\u008AE\x12\u009A \x11\u0084\u0088{\n\u008A\u00DB\u00D6v\u0089\x01\u00BDS;\u0098\u0099\u00ABTTO\u00AA\u0091R\u00FD\x02\x11q\u0086\u00BA\u00F4a\u00F4\u00C9{:\u00E2V\u009C\x193U\f\u009F\u00FB\u00C8)\x07\u00DE\u00FC\x07\x17\u00E8\u00E7.|\u009C<\u00E4\u00BB\u00EF\u00F6\"+w;CX\u00E8bx\u00CD\u00F6\u00EF\u00BC\u00E6\u00E5\u00F8\u00B33g2\u00A2\u00F9\"\u00A4\u0083\u008D\u0084_u\u00FE\u00D1\x7F#`\u00B3(C\x7F\u00FF\x0E\u00B9\u00C4\t\u00BC9q\u0093\u00EB2\x1C\u00BEC\u00B0\u0094\u00EE\u00A1\u00B9\u00F6\x06\u00E8\u00A10\x15\u00C3\u00A4\u00E9\f\x04\u0086\u00F4\u00E33/\u00C2=\x01X\x03\x03\u008DDf\u00E6\u00C2\x13\u00D3\u00F15P\u0082\u00BB\u00BE\x1A\u00F5\u00FD\u00C1\b\u0093\u00CC\u0080D\u00A4\u00A6\u00B0$K\u00F4\u0085.-\u00FC\u00F2\u00D3\u00A0\"\u0097xe\u009FH\x1B\"\u00CFQ\u0097l\u00B47\x18\u00D22\x15'\u0099L\u008F\u00D9\u00B3\x19h\u00AE\u00D3\u00D6\u00A8g\u00A6?\x13_\x01pz\u00A6;\u00D0\u008C\r]Z\u00BC3;\u00E6~\u00FF \u0094\u00AA\u00BD\u00D8{\u00EA\u00EE\u009ElE'Tm%\u008F\u00A0\u00A8\x0F\u00E2\u00DF\u0093\u0087#\u00FCF\u00AA\u0080\f\u00E6.D\x0BI\x1E\x1E\u0087\u0098\x13G!\u009D\u00F3I\x1F@\u0089\u00C9\b\u00A2v/\x00Fgl\u00CD\u00C3\u009CGD\x15Ww\u00C9&|PL\u00F6\u00EB\u00BC\u00CDv(Uj\u00FA\u00DC\u00F3\u008F\u00BF\u00E7\u00CC\u00AD7\u00FD\u00FEk\u00F4\u00C0g\u00FF\u0099\u009Cp\u00F7\u0096c\u00BB\u00DB\x19\u00C2\u009B\u0097\x7F\u00F6\u00C2g\u00E3w\u00BF\u00EF\u00E0\u00DAA\u009C\u00EC\u00849\u00F8+\x1E\u00A1Xz\u00ED\u0082\x11\u0082\u00B1\u00DBk\u00A0\u00CD`\u008Cs\u00D5\u00ED\x07\u00BEdI\x1F\u00C8 $\u00F5\x05\u00DE\u00C5Q\u0087;\x14M\u00E6\u00FB\u00A2piU\u00DD\u008F\u00DD\r\u008B\nE\x17[4\x1A\u00BE\u00865\x003\u008C:G\u0093\x19\u0086\u0082\x06B\x12\u00AB\u00D9\x10\u00CC\u00D8\u00C7p\u00E4\u0082\x10\u0084z\u00AE\u00A9\x11\u00A2\u00EAIJ-\x17\x1A\u00C3\u00FC\u00DA\u00AA\u00AB\x0F\u00A6fpM5\u00F3L\u00A8C\x7F\u0091b\u00C0\u00F4\u00C8\u00BB\x18#<\u00BB\x0F\u0080\u0088Ey\u00A4\u00844\u0082\u00A0\u00A1\x0F\u00C1^}\u00A8\u00E2\u00D2X\x11\u00CCT(\u0091\u009B'\x16\u00C5~\x07\u00AErHs;\u00A8\"\n\u00B0\b|\u00F6\x07W;\u008C\x15B\x05\u008D\u00B9\x0BN\x14\x16p\u00A4\u00B0\u00C2(+\u00E2\u00DC\x19S\x07\u00D0d\x16H\u00C2\u00E2@<\u00AA\u0091h\u0081U\u0099\x18\u008F\u00A0\u008C\u00A7\u00F0't&b\u00D6%\u008F[@)\u00A4\"#\u0088R\u00C2;\u0083f\u00B9\x11tO\u00EA\x12io\u00F1\x19%wsf\u009B\u008C$\u00BF\u00FA\x0BE\u0085+\u00D2\x05k]\u00B1\u00BC\u00E4\u0082\u00EF\u00DB\u00DE\u00F5U/\x04\u00F0\u008B\u00B8\x1B\u00DB\u00DD\u00CA\x10.\x19\u00FF\u00E6\u00C7~v\u00F9\x0B\u00BFp\u00DD\u00B0\x17\u00A2\x1Dk\x10\u00CC\x05\u0098k\u00C7\u00DC%Q\u00A4&\u008B\x04B\u00E0,\u008A\u0087\r\u00AB\x18\u00D1\x0F\n,]\x124\x15\u008C\u00CE8Dh1\u0090@\u008F\u0084\u00B1\x1D\rcx\f\b\u0093\u00BD\x1F!\u00BA \u0082\x00:\x064\u009D\u00A3\u00CB:\u00809\u00BA\x17r763\u00A0\u00D68\u00AC5\u0098\x02\u00C2\u00F3)\u00C2\u0088\u0098\nR\x1A\u00C1\u00F8\u0099\u00AB\u00858\u00C5\u00C7\b\u00AA\x01\u0094\u00CE\x1C;|!\u00931%2\b\u0098Mb\x17\u00FFQ\u00A4\u00AC[\x0F\u00EEqF\x10\u0091\u00CE\u008AHpj\u00E1\x1D\x002\x00\bH\u00DF\u00A63\x10i\u0099\u00D9Y\u00D4\u009C0\x04R{\bJ\u00A8\x19\x16\u00DD\x19MB\u00F4tw\u00F8|uC%6\fC Lz\"\u0083\x17\u00D0>\u00B2,\x04\u0097R<\u00A2\u00B9+\u00BB\u008B\u00B1y\x16L\u00B5)\x04\"\u00E0@MY\r\u00F1\u00A4\u00DD\u00D1\u0089\u00A0\u0084\u00CB\u00A1\u00DC\u00FC0\u00AD\u00B2\u00DBC\x1F\u009E\u008D[\u00D8|\u00DF+~a\u00F3M/x\u00FF\u00C6?\u00FF\u0095\u00BB\u00AD\u009A\u00F3\u00DD\u00C6\x10\u00AE\u00EE\x1F|\u00F8\u00AFn\u00FF\u00EA\x1F]\u00BA\u00F6\t\u00A8,\x00\x15\u00EC\u0083b\x03\u0082\r\u00C0+\x1AYu\u00E49\u008C\u00B8G\u00E9\x18\u00FD}\u008C\u00A2\x1E\u0098\u0084\x00oKAl\u00D1f 8\u0093\u009E\x04\x12\u00A1\u00C9U\u00F5\u00A4i\u00D1\x12\u009B8:;q\u00F4\u00C5lK\u00B0ad\u00D8\u00B1\u00B1.d9\x16E:>[2\x05\x1A\x0F\x03\u00C2\u00B3\u00B2Bs\u0098O\u00C8\u00EF\x06A\u00F5\u00DF\u009D\u0098\u00A3\u00CAR\u00E8\u00C3\u00FC\u00EE\f\u00C1Q\u008Ee<\x0E\u00C8\u00D0b\u00B1\u00AC\u00C6@\x0F\u008A\u0089\u0087\u00C3\u00C5\u009BiW\u0092nG\u00CE\u008E\u00DF+\u00A6\u00C3\u00A0\x12\nwp~\u00A5N[\u00DE\x7F\u00C4&9Y7\u00A60k\u008C\u0083\u00C6X{\x00'\x04\u00CD\u00F7\u00D1\u00DD(\u00C8B\u00AB\u0089@\u00FC9\u00AA\u009D$xM\x03\u00D5\u008F\u00A9\u008D\u00C3\u008Fu\u008F\u00C4t&ch\u008D\u00CA:W\u0089\u00C6<\u00C7|\u00A2;\"(\x0B\u00C6\u00DF\u0087B\u0090\u00E9\u00E9\u00DD\u0099l\u00F7\u009A\x13#B\u00D2+\x19Im\u00B7\u00C7 \x0E\u00D1\u00A4c\u00E3\u00C0\x17q\u00F0\u009D/\u00FF\u00A3\u00E5%\u00E7]>{\u00F4\u008F\u00DF-\u00FB>\u00DC-\f\u00E1:\u00BD\u00F6\u00C4\u00FFg\u00EB\u00FF~\u00DD\u00EBgo\u00DB=zv\u00A1\n\u00B0\x1F\u008A\r\x00\u00BB\u009D\u00D8\u00E7\u00A2\u0098\u00AB\u00B9\x13\u00E1\u0084\u00EBk\x18J\u00F0\u00AEf7\x1B\u0085\x0E/\u00F7\x06\u0088\u0086l\u00CF?_L\u00AA\u00EE\u00FEe-\u0085\u0089\u00DD\u00DE\u0092\u00A4\u00C4\u00E4\u00CF\x00\u00AF\u00C7\u00A4\x16\u00E1\x00Y\u0087\u00CA\x1C\u00AAV@\u00B3\u0083\u009E\u0081\u00E6\f\x01\x0E3kHr\u00F54\u0098\x112\f\u0080\"\u00A9\u00F3\u00ABDxn\u00D4i\u00A2\u00FB/\u0098\x03\u00E2\\\u00B7\u00C9\u0083\u0099\u0089\u00ADY_\u00EA1\f\x00\x11j\u0089\u0092s\u00C8*\u00AB\u00C8\u0080\u00A9\u00C6\x0EL\f\u0095;\u00EA\u0098l\u00B0\"\u00FE\f\u00E2\b\u00A20R\u008F\x11`\u00BD\u00C2\u00A6-\u008D\u0099\x1C\r\u00D1\x19\u00BF\u00A7Ng$\u00E9\u0086K\u00A6`k\u00F3\u00D4\u00E4\x0E3\nJ\x0B[\u008E\u00BD,\u00CE\u0087\x02\u00DA\u00ED\u00B9\u009A\u00D9\x07\u0094\f\u0085\u00CCK\u00C9\u00E0\u008DX5\u0090\u00D2\x10\u00C7L\u00CDr\x13\u00B4$Z\u00E2\u00D8\u00B5\u00D3q=:j\"\u009B$\u00D4\u00A7w\u00C8\u00D5\x0BzL\u0094\u00C7{\u00BC\u0083T\x1FJ+?O7\u00E31\u00E6\u00B5~\u00DD\u0095\u00BB\u00B7\u00DF\u00FA\u00B2\u00D7\u00E9\u008DW>Z\x1Ex\u00D6]\u00BEC\u00D4\u00DD\u00C2\x10\u00DE\u00BC|\u00FD\x1F\u00FC\x0Fy\u00C5Y\u00E3@\u008E\r\x00f\x07\u00D8\x03`\x17\f\u00A22\u00B8\u00A8\t\x17\u008B\u00BB\x1A\u00D5\x10\x04\u00E3:h?`_\x16\u00A3 XJz\u0088=\u0080\x0Es\x00py>\u00C0\u00FA0f\u00C2Q$\u00CA\u00B0W?@\u00B0\u008E\u00E6\u00EA\x01\u00D3\u0095\u00BB'\x1FY1\u0096\x01c\u00893hn`J\u0095\u0080jDa\f\u008CjR\u00C2{\tn\u00A7\u0091P4\u00F89dU\u00C3!\x16Q\u00DA\x13\u00D4\u00A5;},\x12\u00C7\u0081\u00F0\u00CD\x16\u00C6B\u00A1\x17\u008B\u0090\u00D2\u0096C\u00F3'Hwg\u0089\u00E2H|\u009F\\:\x16;\u00BB\u0090\u00A2\u00D2\u00F8\u00AF$\u008C\u00F8\u00C9G*H\u00C4`\u00D4\u00E0\u00844P\u00A6\u00DB\x7F\u00C5\u00C2\u00C6\u008D\x10\u009D\x00\u00B9\u00D7]\x10ZU\u00B7\u00AA4\u00EE9\u00E7\u00EA1)\u00EAy\f\u0081\u008A\u00A8\u00D2\x144F5\u00C9\u0089\\\u00C3`H\u00C6\u00C2\u00ACI+\u00D3#D\x04\u00E1\u0095I\u00C7\u00F74\u00AA\u00B4\u00BEK\u009D\u00FE\u00A4\u0089\u00A7j\u00D3\u00A6\u0098]y\u00D1Y\x07\u00CE\x7F\u00FEK\x00<\x03wqk\u00B7\x7F\u00CA\u0097\u00D6\u00FEn|\u00DBO<\u00BF\u00FF\u00DE\u00BF\u00BCem\u00D3\x7F\u0099.\u0098-\x007w\u00C1\x01\x05\u00B6\u00E1\x7F*X@\u00B0\x00\u00B0\x10S\r\u009605b\u00E1\u009F\u0097Hc \u00D5\u0087\u00B12\x03\x18\u00BB\u00E8\u00E5\u00BC\u00E2\u00E1\t\u0090\u0097\x7F\u0086\f:\u00D61b\rK\u0099\u00FBw\u00EE\u00F6\u00D0\u00CC\u00D0)3\u008C\x180\u00A2a\u0084\u0095e\u00EDbj\u0080\u00B6\x01*\x03\u00D0\u00D2\u008E\u00E0\u009A-hs\u00C8\u0090ff?\u00CE\u00D2\u00A8\b\x01\u00CB\u00A9A\x06\u00A0\u0089\u00B9\x18K\x1A\u00B3\u00D9\x0BL5\u00D1\u00E6\u00FF\u008A\u00C7gj\u00AA\t*\u0083\x1Fs\x06\u00E4}(\x1A\u00BA\u00D7`0\x17g\u00B3\u00F1\u008A\u00A9/v\x1DK\u00B8!\u00CB\x12\u00C2\u00A4\u00AB\u00D9,\u00FD\u00D9\u00A4\u00F9\u00BD%\u00FAS\u0099#b=e\x06\u00C8\u00DC\u00FF\u00EC\u00B3\u00CA\x1C\u00C6\u00A6\x1D\u00811\x03\u00D4\u009F\t\u008E\u00C0\x04\x16\u00D1\u0099\u00CFkc\x17&j\u0089\u00C4\u00BCU4e\u00CF\u00E0\u00CF\x1B\u00CF\u00E4\u009F\u0083i'\u00A3\u00CF\u0087J[\u00D0\x0E;\u008Fr<\u00F6\u00A7\u008E\x14w2\x7F\u00FE1\u00CD}\u0096(5\u00DA\u0091\u00A9\x0FV\x1D\u00BC\u00A3\u00BD\u00EF\u008DO?\u00F8\u00C6\u00DF\u00FE\u0089#\u00BA\u00F8(\u00DA]\u008A\x10>\u00AB\u009F>\u00E3Y\u00DB?\u00F3\u00E2\u008F\u00AD]\u008D\u009D\u00BA^B\u00DC}M\u00B1\x0B\u0082u\b\u00E6\u00A2\u00E6\u008F\u0085\x05\x05/\u00E0S\u00AE,u!\x1Epd\x10\u00BF\x03\u00F1]\u00DCX\u00D8\u00E2\x18\x19D\u00AA\x07K\u00CFGH\u00B3\x1D\u00E3\x0B\u00E6\u00E8:\u00C3(\u00EB`\u00D4!\x03\u009E\x15\x03\u00BA641\x06\u00D0\u00D4\u0088\u00CA\u00CD\u00A0h\u0093\u0085\u00D4\u00A0\x13\u008F\u0082\x13\u00B2\x0ENX-~\u0097N\u00E3\u00A3K?\u00D8B\u008E\u0094gM\u0087l\u00CC\x19\u00DDs!\u00D6K>\x02]h\u0094\u009A\u008A\u00D0\u00C9\u00AD\u00C0\t2\u00AC9R\u00A8{~\u00DF\x11\u00D7\u0080@6R~WwwB\u00A8Z\fn\u008F-\u00EA\x04u\u0082bhS\u00A2\x02A\tSN4\x02\u00B1\u00DC\t\u00D6Q\u0088x\u00D40Lj\x10\u00B0\u0094d&cVn\u0098,v\u008A\u0090\u00F6\x00Pl\b6_\u008CTl\u00B9\x1CUa\u00F5.V\u0095N\x12\u00FD\u0098\u00EF\u00C4\u008B\u00C1\u008A\u00BB)s\u00DE\u00DD\u00D8\b\u0081H\t\u00A1\x0E\u0083K\u00A6=\x11D\u0088j<\u00E2\u00A4)\x02\u00B5l\x1C\u00B8\x05\u00FB\u00DE\u00F9\u008A\x17/\u00AEx\u00CD\u00BB\u00E7\x0F\x7F\u00DA]\u00B6\x15\u00FD]\u00C6\x10\x0E\u00EA\u00DE\u00D9\u008B\u00B6^\u00F8\u008A\x0B\u00E6o9\u00D1\u00EA\u00F0\u00D5$f\u00FE\u00D9bQ\x00\u00B7\u00C0\u0098\u00C2\u00CC'\u00A5\u00A9\u00D9\x15\u00C8\u0087\x07\u00A4\u00FA\u00D0\u00C4\u00C3\u0093\x15\u0090\u00F0F \u00EA#0]vt\u00AB|\u00B5g7G\u00D2\u00B6<\x1A\u0080\x19T-K\u00A23\u00BE\x00n/\x10+\u00BD\u00DAK\u00A6b\u00C3\f#\u00A5\u0086\u00B8g\u0081\u00AE\u00BE *'\u00FA0k\u00D3\u00ED\bp\u00F1h,\u00FA\"\u0091\u008A\u00AB*\u00AD\u00D9T18}\x1E\u009D\x18\x1E\u0085JT.\u00AD\u00C3bo\u00F3\u00AD\u00939\u00AFYx\u0084\u00EE|/pI\fD\u0090R\x10\u00B9C\u00F5\u00D0M\u00CC\x06aR\u009BC\u0099\u00E8\x0F9\u0086J\u0097\u00F5p\u00B42\x16\x0E\u00A8\u00FA\u0092\u00C3\x1E\u00C0\u009C\x06'\x1E\u00B7#\u00D8}\x06\u00EFi\u0084\u00EA2\u0099G0\u00A4\u00F46\x04*\x10\u0080\u00D9\u0087\u00D9\u00F7\u0088(\u0082\x13\u009E\u008E2\u00C7\u00D2<\u00F1\u00C9\\\u0094\x18\x07c\x022&\x12\u00D3% \u00DD\u008D\u0090\x03R\x1D\u00CA\u00F5\x1E\u008F\u00E9?L\u0083\u00A4\u0080Pa\x14f\x10m\u0082]\u009F\u00FF\u00F8\u0089\x07\u00DF\u00F4\u00A7\u00AF\u00D0[>\u00F3]\u00F2\u0080\u00AF^\u00EE\u0098\u00C6;\u00A1\r\u00B7\x7F\u00CA\u00D1\u00B5o\x7F\u00CE\u00A3\u009E\u00F3\u009Bx\u00DE\u00D3o\u009D\u00DD\n\u0095\u008E|\u00DE\u00E9\u00E2\u0084\u00FF\u00D7\u00DC\u00C1\u008254/q\u00A6\u00BE=\u009B3\x04\x117vk\u00AC\x1D\u00BA\x0E\x05\x00\u008B\u0087\u0088\u00A4\u00DB0\u00D5\u00D9B\x02\u00C2o\u00C6\f\u00809D\u00D6\x00Y\u0083A\u00E5L\u009F\u00CA\x14\u00E6\u0099\u00FB\u00EE\u00FDw\u0087\u00AB\u0082\x01\u0083\u00E7.\b\x04M\x04\x01u\u00A5\u00C0^G\f\u00BC&\u00E11\u00AD\u00D6\u008E\x06\u00DC\u00C0H\u0098ly\u009A\u00CE\u00D0\b\u00AB\u00A3\u009E\u0082\u00CFeQ'\u00D8\u00AF\u0090\u00D1DNE+4\u00CF-i\x1C\u00867\u00EF[[<\u0087\x05<\u0091\u00B90\u00D8\u00AB\u00F2\r\u00BBg\u00D4\\\u00F0\u00E3\u00B9\u00E35]\u0081-\u0098\u009E\x10\u00AE\x0B \u00EEuI\u00ECA\u00A3g\u00FE\u00C6O\x11v,\x16\u00C5\u00D9d%~\x02\u00EE\u00E5q\u00E9+\u00F0\u00C5\u00C4\u00D4q\u00A6\u00AD\x07s\u00A1\u00DA@\u00E4\u0094\u00C4\x18k\u0083a\u00D2<Ki\u00BE\u00AE\u00AB\u00B8\u00A8*\u00BC\x01\u00EFA\x01\u00E2L+7\u00BD\u00C9>'\u008C \u008EI\u009EP\u008D\u00CA\n\u00A0+Z\u00EFh7\\\u00F3\u00D0\u0083\x1D\u00E3\x7F\u00FE\u00CB\u00F7\u00BC\x13wA\u00BBKl\b\u009F\u00D2+\x1E\u00F9?\u0096\u00BF\u00FF\u009C\x1B\u00E6_\u00F4_\x0E\u0089\u0085&\u00BFt\x00\u00B7\u008Ab/\u0080\u0083*\u00D8\x12`\u00E16\u0083\x11\u0096\u00A46\"\u00ED\x07\u00F69\u0099I\u00A8\x10\n\x0B?\u008Ec\u00F4<\u00A4}\u00816\u0083\x11st\u00DB\u00EA\u00C5m\b\f\u009E\u009E\u00C1\u0092\u00AB\u00D7L\u0095\u0088|\u00C9T!\u00EA\u00F7\x0E\u00C1\u00E8\u00EA\u00C4\u00A4\u00E8{\u00842\u00A7\u009A\u0090\u00B5\x15\u00CB\u00B1\u00D5]\u0099\u0088(\u0088@\"\u00CA1\u00ED\x01\u00A9\u00BFS\x0F\u0097<G\x19Z\u00CD])\u008C)\u0089\u009A\u009D!k46H\u009FC:\x170%\u00DA\u00E0\u00C4T\u00C6\tVy\u00AE\u00EE\u00CC\u0086d\u009E\u00ABI]\u00E5Y\u00CA\x1F\u00B7\u00A2c\u00D2z-&cP|6\u00BD\x07\u00EF\x13\u00C4\u00BA\u00F3\x1E\u00E9\u008F\"cL\u009B\f\u00CD\u00C9\u00B9\x7FW\u00CB>\u0094\u00D7S%\u0090$F\u00BE\x0F/{\u00C7\u00C4x\u0089=1\x1C\u0091M\u00E2MZ\u008C]&\u00E3\u00A4\u00F0\u00E1\u00B3\u00DFN\u00A3As\u0095n\x04\u0098\u008DK\u00B4\u00F7\u00BE\u00F19[\u00EF\u00FE\u00E3G\u00DE^7G\u00D3\u00EEt\u0095a\u00EF\u00C1/\u00CC\u009F\u00BF\u00FD\u00C2\u0097\u00BDc\u00ED]\u00F31\u0092]\x0E5\x05\u00AB\x18\u00C9\u0088z\u00AF\x00\u00BBT\u00B1\x0E\u00C16\u00CA\u0094\u008A\u00A1\x00\u00BE\u00E6\u00EEn\u00AA\u00A5d\u00A6\u00E2\b\u00DA\x10\f&\u00AF\u0094\u00D8\x07m\u00B8\x1D\x03D\u00E7hn8\x1C}\u0081Z\u00C2\u00B5%M's\u0090\u00C2\x04\u009C\u00A8\u00C1\x1D \u009A\u00D9\u0097}\u0081\u008Chh\\\x10\u00AE2\u00984pi\\-\u00D9~\u008E(\x17\u00BCd\u0096\u00A1b\"\u00C5s\u00BA\b\u008D)\u0095|\u00EE(]C\u00CAH^\u00EBY\u008DR\u00CF\u00ED\u00D3\u00EAQ$\u009C\u0094\u00F6~\r\u00AD\u00F1 |e?\u00E9y\u0090IG:\u00F9\u0087'\u00D9)\u009E\u0090\x14\u00FA9\u0093\u00C5\x04\u008C/\u00A7\u00A4\u008F-\u00E3\u00A3\u00E2r\u00C4\u0091z\u00DF-\u00FAQ\u00F4\x12\u00C8H\u00BB\u0089\u00C3v\x00\u00A1\u0086\u00E5\u00E3\u00DB\u00DD\u00F9\x1EZ\u00B3~\x18g\x15\u00EB\u00B1\u008CSl\u00E3\\\u009B^\u00CD\u00E35\u00A9\u00C9k;\u009A\u00AA\u0090o!m\x14\u00EA\u00FE\u00F2\x05b'\u00A8\u00FA^W\u009B\u00A3\u0082\u00A2\u008F\u00F9.b\x1D\u00B3\x1B?1_\u00BC\u00E3\u00CF_\u00A6\x07>\u00FFh9\u00E1\u00AB\x16;/>\u00FAv\u00A7\u00AB\f\u008F\u00FD\u008Do{\u00F6\u00AF\u00CB\u008B~l\u00FFl\x13\u00AB.\u0094;\u00D2FX\x04\u00E2L|\u00F7f\u00E1r\u00A5\u00AD\u00A0\u0085<`H-\u00A1(\u00E1s\u00FC\u00D7\u00ED\x0BI?\u00ACz\u00BC\u00E6\x7F\u00EBP\u00B1\x12*\u00C9\u00BD\u00D3B\x1CP\u0097\u00B9\t\x10'x\u00C2\u00DFT\x0B\u00E0\x16\u00E8p\x1DJIv\x02%.s \u00AA\x04\u00F3\x01\u00B2\x1F0X\u0089\u00D2:\u00F7U\u0088x\u0085\x12\u00B0\u0094\u00C9\u00DF\u0084\u00AF\u0094\u00D4\u00DE\x187\x10(\u00C5\u00A5ZQeR\u00DA\u00C3\u008D\u00A5\r\x11\x06\x1DR\u00CF\u00E1\x7F\u0098&\b\u00EB\u0093\u00F9X\u00F0N\u00C2t\u008B]\u00E0\u0082vD\u00C2\u008F@a|dB~P\u00CBx\u00A9\x12Q\rb\f\x07\u00D5+M\x0BId\u00B4P\u00D2\x07\u00DDfNF\u00A2sJ\u00F1\u00A2\x06\x043\u00B6\x0B\x15,\u00F0\u00E2\u00EA\x11U\t\u008FgH\u00B8\u00EF6\x0EWIb\u00F3[\u00DA!\u00AAJ@B\u00E7\u00F3\u0087zP&\u00A6\u00AA\x11aK\u00D1`4\x03\x04\u00B8\u00EE\u00DA\u00D3\x0E.\x16\u008B\u00E7\u009F\u00FF\u009E\x0Bq'\u00B6;\x15!\\\u00ADW\u009D\u00F53[\u00FF\u00E6\u00D9{\u00E77\u00E3\u0090\\\u00EF\x0E4\x05\u00B0G\x14\u00BB0`\x1D\u0096x3\x13C\x0B\x16s\u00D2\u0083A\x00S\u00B0F\u00B3Q\u0087\u00E7@\u00C4\x12\u00F0\x00\x18ihj1\x06\u0090\x19D-`\u00BA\u00EB\x1C\"t-\u009A\u00E4\x17w-\x02\n\u0096J\x1F\u00FC.44j%F\x1F\u0095\x11T\u00A6+\x19\u0081\x0Fe:x\r\u00B7p\u00F7\u00E5\\\u00F4\u00EF\\\u00CD<\u00C6\u00DE\u00AA\u00FF\u00DD\u0089^\u00F3Nv\u00AC\u0095\u00FB\u00D8\u008C\x06yN\x02_lB#\u00F7S\u0090\u00CC,F@\u00E9\u00E6\u00BF\u00A8\u00AF\u00DD@\nH\u00B1Z\u00B3))\u00C1\u008B\u00FF=\f\u009D \x120\u008FBTb\"qNR\u00AF5\u0098\u009C1\u00A2\x1A\u009D\u00C8\u00FE\u0086\u00F2\u0099\u00CF\u00DB\x1D\u00BD$\u00E7!+\u00A8\u00BE\u00A7@\\\u009A\u0088\u0083\u00E5\u00D32\u00EF\u00C5v\u009B\u00AE\u0088!\u0099W\u00CFk\u00F9\u00BD\u009E\u00A7\u00FE\u00DE\u00D5\u009D\u00DC\u00EA\u00F1\t\f\u0080\u00C2\u00EA5\u0085)\u00D6\u00B9\u00F5\u0093\x03\u00EC(0\x1B\x0F`\u00F3\u00E27>{\u00F3\u00D27\u00BEn\u00E3QO\u00B9\x12wR\u00BB\u00D3\x18\u00C28\u008E\u00F2\u0082\u00AD\u00E7\u00BE\u00E4\u00EF\u00E6\x17\u00AE/\u009AW\u00C4=\u008A~\x14f;\u00B8\tK\u00AC\u0089\u00A1\u0085Z:mA\u00A9\u00EA\u00FFI\u00CD\u0091\x1E\u00FF\u00EA\x04R41\u00F2\\\u00CA\u0080\x01\u00A6&\bf\u0098\u00D3\x06\u00A03LU\x02\u0097\u00D2\u00FE\u00D7\u0089\n\u00C2\u00E8f\u00DC\u009F\x06\u00C0\x0E\u00A0\u00EB\f\u00CD!\u00BF\u00A5d\u009B+R\u00A4\u00EC\u00B1P!\u00AA\u00A6\u00B1\r\x00\u00B4{\u00A4\u009FL\x19\fd\x06\u00ED\x1DQA\u00D9\u00F5\u00DC\u00C8] \u00BBc\u00E0Q\x18\x18\u00EB\u0084\u0096\u00F3}\u00CEr\x0Bu\x12\t\u00E7\u00DE\u00C3\u00BD]\x1AUo&\u0085X\x0B\u00B4\u00C4.z\u00B9\x1A\u00C82\u00EC4\x14\u00BA:@f&\x00\u0098?\x01&$y\u00DF\u00A2\u00CE\u00F3\u009C\x00v \x07\u008E\u0094L\u00B3\u0097\u00CFD\u008D\u00B5\u00B0\x0E\u0099M\x12\u009C\u00B8\u0084\u00AE\u00E6K\u008B\u0094d\u00D7bN\x035\u00C5\u00D3J\u00F4\x17OE\r228\u0092\u00DFc>*c\u00D7r\u00CC\u00D7\u00816\x00\u00BEq\u00AD\u00F2=\x10\tHv\u00ED*\x16Yz\u00DE\u00D7\u00C6\x7F\u00E2\x17>\u00B1~\u00F0m/\x7F\u0089\x1E\u00B8\u00E1{\u00E4\u0084S\u008FN\x02\u00AF\u00B4;\u008D!\\\u00A4o\x7F\u00C6Kq\u00DE\x13\x17mt\u00B9\u00FC\u00A5\u008D\u00EF \u0080[`\u00B5\x15\u00D7\u0094\x1A{\u00A9\x1F\u00A4fN\u00EBPw72\x1B\x12\x1E\u008DH\u00DB\u0082I\u00F3\x063\u00B2)\u00E6P\x190b\x0E\u00C1<\u0082_\f\x11T\u0083VZ\u00E3G'*\u00D1\u00861`,\u00F7[\x10tF.\n3\r\u00FC\u009E\u00DA\u00FC}K\x10p\x1A\u00A4\u009C\u008D\t,\x0BO\u0080\u00DC\u00D8\x05\u00A0e;\u00B6k\u008B\x05V\x10\x01\u00FB\u0093\u00B2\u0088\u00B8\u00B0\u00C85\u00E9\u00EB\u00E7\x16l\n\u00B0\u00A4\u00BDAz\"\u00D2\u00BA\u00E8\u00BC?Z\u00D0\u00C3\r\u00C7G\u0091X\u00E7\x14[\u00CA\u00F8\x01\u00B8\x1F\u009F\u00CC\u00A7\u00C0nk\u00FE\x1C\u0082\x18w\x12>Q\u0090F\u00FF\u00E1\u00C5U\u00B8*\u00A5EpV\x06\u00E8\u00F51z\u009B\u00C2y\u00A2\x0E\u00A5\u0094\u0095\u0098\x16a\u00DDu\u00E5\x1E\x0EH\x06J\u00A6\x14\u00CC\u00C8\x11\u0094(\u00AC\u00DC;%}\u00F7q\regm\u00A2\x1C\u00CDg\u00ED\u0092\u00CC\"\u00F6\u00A8(s>)9\x7F\u00C7\u009A@1\\\u00F2\u00F6'n\u00BE\u00E5%\u00CF\x00p\u00DE\x11]|\u0098v\u00A70\u0084\u00EB\u00FA\x17\u00EF\u00FF\u008B[\u00BF\u00F8\u00C2k\u00D6?\u00F3%\u00B2\u0081l\x02\u00E0V\x00\u00BB\u00B4a\x1D\x1D3\u00A1\u00F4\u00CF\x05\u00D0\u0080\x02%\u0093\x0El\u00BD\x12\u00B8[(\u00B2`\x06\u0088%)\u0089G\u00AAu\u00C9(\u00C4\u00B4t\u00DBw\u0093i)y\u00BB6,\u00C5l\x10<wBX\u00E5\x7F\u0090\x06fDr\u00B9G\t\u00B5B\x18\x1D\u00E2\u00E8\u00B8\u00A1(7\u0091\x19\u00C9\u00B5(a\rG\u00CC@\u00CAP2\t'V\u0095\u00E9y\u00A2\u00C9\u0084\u0094k^b\u009D\u009A\u00CB\u00B1O$}\u00BE\x03\x12~\u00D1\u00F3\u0085\x05N\u00A8'\u00BB\u00E4\u00E5Eua\u00FB\u00F1\u00D8+\u00A1\u00CA9-\u00E7\u00C65\u0096\u00BB\u00B0J\x18\u0081\u00C8\u00E1\u00B1\x0F\u00CC\u00D5\x10^\u00EBs\x13\u00B0\u00BF2P.\b~V'\u00E4)\x1C7\u00F2\x1A\x0B\u00A1[\u00DF\u00A6\u00DA1/\u00A1>\u009F\x1B\u008D\u00B5\x01\u00BAD\u0098H\u00E39\x15\u00901\u0088?\u008D\u00A0\x1C\u008E\x0B\x04H\u00B8\u00CCw\x06\u00EF\u00DD\x1E\u008BP\u00ACm\u00ED\u00C3\u00FE\x0B\u00CF\x7F\u00A1\u00DEt\u00E5\x1B\u00E4\u0094\u00B3\u00F6\u00DC\u00E6\u00E9w\u00A0\u00DD)F\u00C5oy\u00F6\u0099\u00CF\u00FF\u00DD\u00E1\u00F7\u00BEw9l}\u00C9\u00C8\u0080-\u00C2C\x05X\x070\x17/v*40j\u0098\u00F7X-\u00B9z\u00BC\u00F9m\u00C0\x1C\u00A2s\fX\x03d\u008E\x06n\x1C\u00DF\x1C\u00DA'\u00A4\u0096\u00E8\x01.\u00E7\u008D\x014\x1D\u00D0\u00E8\u00BE\u00E39\u008E\x12Z\x04\x10\u00F1~t\u00AF\u00F9\u00B9\u00D2\u00DC\u00D8\u0098\u00D7\x00\u00F4\u00EFs\u00C7\u00E74\u00E0\u0089G\"\u00DA\u00F9\u00C5\u00855qw9k\u009C\u00C4\x01\u00B0\u00FF!\u00C6\b\u00BF?&\u00A8\u00C6\u009E*~W\u00B2\u00B5\u00EA\u00E2\u00F4\u00F1G<\u0085\u00DB;\u00C2\rI#f+\u0092^\x12\u00E6\u0086J\u00E1\u00E8\u00A5DuJ\u00B8M\u0081\u00AA\u00FAX\u00FA\u00B5\x11\x19\u00B8\u00FD:\u00EC\u00DFF5-\u00882\u00E3\x14r\u00B5p(I\u00E0t\u00EBN\u00EC\x0EZ\u00C6\u00AB\u00CEP'(\u00A0el\x02\u00A3;\u00A3w2 )\u00E7\u0093q\u0092)\u00FA\u00C8\u0098\x19\n\u00A4\x1A@\x04\u00E5\u00EFN\u00E2>\u00D8\u00C9\x1Ci\u00A7\u00E9Ts\u00C4\x02\u00A2F\u00AAa\u00A9\u00A2\r_\u00BC\u00FE\u00C4\u00ED}\u00DB\u00EB\u00BF\u00FD\u00D7\u00FF\u00EB\u00CDw\u009C\u00C2\x0E\u00DD\u00DA\u00ED\u009Fr\u00DB\u00ED\x1F\u00F4cg\u009E\u00D7_\u00F9s\u009B\u00B3}w\x1A:\u00A8\u00EDV(n\x05\u00B0\t\u008BM\u00D8V\u008BI\u00E8\u00EA\u00F1\tb\u00DF\u0097\u009A\u00A1\u00CC\u00A33\u0093\x0ES\rF\u00CC\u00B1\u0088X\u0082\u0099\u00C7\x15\u00CC\u00D0\u00A5a\u0094\x01\u00A3\u00D0\u0097M\u00A16\u00B3\u00ECF\u00CF9P\f\u00A6\x16\u0088\u00A9\f\u008C\u0088\u00E4\u00BD\u0098\u00D7`\x7F\u0083\u00E7<\u00D8_\u00C4A\x04\u00E1f\u00AEBz!$\x18R\u00AEl\u0093\u00E4\u0096#\u00C0`&\u00DA\x02<F\u00BF%\u00B2\u0099\u00C61T+\u008AD\u00FF\u00D3\u0080(\x1E/)\u00D8q\x0E\u00CF+}\u00FB\u00EF\u008C\x7FPa\u00EEB\u00BAg%\u009E\u00A7x'\u00D4\u00C7\u00A5\x19\u0097\u00A1\u00931\u00D6\x7F[\u00B9\x7F\u00F9\u00C3\u00CA\u0098\"\x7F\u0083\u00B1\f~\x1F2\u00A9\u00959\u00B0V\u00ECC\u00BAz^\u00AAaL\u00E5\u008E\x1C\b\u00CE\u0081\u00AE\u008E\u00D7\x19\x1B\u0099%\u008FM\u00EC\x04\u009C\x03\u00FB\x0B&Z\u00FB\u00AA\u00DF'\f\x1F\t\x0Fn\u0087\u00B0\x06U\u00E8\u00A5o\u00F9\u00B9\u00F1\u0083\u00AF:\u00F3\u00B6\u00CF\u00BC\u00FD\u00F6%\u00AB\f\u00E7o\u009D\u00FF;\x17\x0E\u00EF\u00993d\u00F8\u00CEl\u009C\u009A\u00BD\x10\x0Bk\u0086o\u00C3\u00A6\u00BEc\u00A2\u00D6\x18\x05C\x10\u00A3\b\x06\x15\u008C\u0098a\u00C0\x1A\u0096\x1E\u0081(\x18\u00B0\u00C4\fC\u0091\u00A0\u00DD=\t\u008CAXj\u0091\u0082\u00FEoS)v\x062\u0082D\n,\u00EF\u00A6\u00E5\u00BB8\u00E1'\u00AA\x00\x02f\u0092\u00F0(\u00F9]\u008F\u00B6\u00A2\u00AE\x02\x0B\x1C2\u0083\\D\u00E0\x11U\x14\x1B\u0082\x04\u00E4,\u00FAz\u00A0\u008D\x0E\x15\u00F7\u008E\u00F8\\M\u00D0\u0084\x12BK\u0098\x16\u00A0\x16\u00FA\u00DD4\u0080\u00AD\u009B\x07\\Jz\u00DC\x07\x04\u00B1\u00FF\u0082\b#L]b\u00D1\u00C5\u00C8\u00EB\u008A\x14\u00A7}C\u00E3\x1B_2\u00E7\u00DC\u009FS,t\u0098u\u00AD\u00C2\u00D7F{\u00C0\x04\u00EE\u00FB=z\u0095\u00DE\u008A\u00CC6\u00F4\u00CF>'\u00A0F\x11\u0092\u00BD\u0095k\x1C]u@\u00B1\u008D\u009D\x16\u0095\u0096\u00D7\x07\u00E2\u00A8\u00CFE$\u00E2\u0089W\x05E\u00D8\u0089\u0082pG\u00A2\u00C3\x18E\u00A5x\u00CF\u00A0\u008C\u00F1W\x1BFm\u0087\u00A6\u00B1\u00B5\u00EB?3?\u00F87o\u00F8\x1D\x00?x\u00C8\x13\u00EE`\u00FB\u0092\x10\u00C2\x07\u00FB\u00A5g\u009F\u0087\u00F3\u009E\u009C\u00BBW\u00DC\u00B9\u008D\x12\x7FS\u0080/B\u00B1\t`\u00A1\u008A\u0085\u00A2dC\u00AA\u00A3\x03\u008FPT\u00C5(\x03\x14\x1B\u00E8X\u00F3D#\u00F3&\u008ChX\u00AAI\u00F1\u00AE\u00CD\u00AB\u00E6\u0099d_\u00C2\u00D1\x02f\u00FEo\u00C3\x12\u009Em\t\u00BE*\u0093\u00D8d\n\u00E9\x04#q\u00D2n\u00D1\u00CAw\u00B8\x141cf\u0084\x15O$\u00B3\u00C3u\f\u00E1\u00E2\u00D4\bw\u0096\u008C\x1Ad\u00B90\x15\u0087\u009C\x02f\u00E0e\u00B5&\x01\u00EB34\u0088\u00BB[%$9\x17\u00AC6\u0097\u00F4T\u00BE\u00C2x\u00C9\u00F0\u00EC6E1B\u00D5\b\u00B6!\u00AB\x0B\u00C3\u00E6cD\u0093\u00AC\u00A9\u00E2F\u00B6\u0088\u00D6\x14\u00AA?\u00B0g\u00F2{(w\u00DE\u0085\u00C0jQ\x02\u00DC\u00B7\u00A2\u0081\u0090\u00DC\u00A0}\u0087\u00A1\x11{n\x1F\x0B\x03\u0083\u009A#\u009BT\"\u008Da\x07\u0083*\u00E3\u00C1`\u00E5\u00DA|\u00AE\x12\u00AD\u00C0\u00BC\"\u0082xV\u00DA\u00A8\u00A6.a\u00F6O\u0081\u0091q*LG\u00B7\u00E7\u00E1x\u00D8\nbp\u00C4\u00A1b\x1E.D\u0086)\u00EDSE\u0088\x04_\u00A2\r\u00C4\u009F\u00A7\u00B9\u00DD\u00A4\x03\u00E8&\u00DA\u00E4\u00D2\u00BF}\u00F2\u00D6\u009B\u00FF\u00E8\u00EC;H^\u0087lG\u008D\x10\x0E\u008E\x07\u00E4\u00B9[\u00BF\u00F5\u0082O\u00CC>j\x05*\nG\u00BD3\x1B\u00F9\u00E1>(\u00F6B\u00AC\u00AA\u00A1\u00B8\u009C\u008C\u00C9O\u00AE\u00D9\u009D\x19\u00A8\u00AC{\u00AC@\u00C2\u00CC\x0E\u009B\u00F8\u00CE\u0097\u0080\x06`\u00869\u00A6)\u00CAF\u0090N\u00ECB\u009Em\x0B!\u00CBm\u00B0z\x12\x1Cm\u00D0\x1A\u00C1\rh\u00D3(\u00D9\u009D<c\u008E\u00DC\x1D\u00A9\x13\u0088h\x12\u00DDBw\u00B12\u009F\u00BE\x18\x05\u0098d;\u00D6\u00B8\x02\nD\u00B1\u0085\x12\u00F1\u00F9P\u00E4vq\u00D4\u00975\u00AE\u00B5\u00FA\u0086\u009Cg\u00FF$(\u00E7\u00DAYI\u00AC\u00BD\u00E8\u00F7\u00C5\x10\u00A6\u00D9\u008B\u00DDXR\u00DF\x16 \u00B6z\u00AB\u0083\u00D3\x01\u00AA\u00CC\u0098\u00D4r\r\u00AF\u00BF\r\u00C4\x19\x1E\u0099\u009A\u00EC.ak\u00C8\u00AAH%N\u0081\tv%\u00EE\u0080\u0086X\u0080\u0092\x1Fn\u00D4\u00E5\u00A4\u00F2\u00F9\u0090\u00F3=\x19W\u00DA\x14\x18\u00BC\u0094\b\u00AC\u00B8E\u00A5\u00CCQE\r\u0081\u00FA,z\u00C6\u00FA`\u00CE\u00F9r\u00BA\fx\x19\u00F8\u00BA\u00D3\u0088\u00A9\x006n\u00BD\t\x07.\u00FC\u00CB\x17\u00E8\u00BE\u00EB\u00BECN|\u00D0Q\u00C1\u00F5\u00A3f\b\u00EF\u00D3\u00CB\x7F\u00F8\u00D5\u00F2\u00BAG/fGu\u00DF#j\u00ACy\u00FBE\u00B5\u0092k.K1Sc\x0E#hS\x104]\u00C7\fs\u00ABQ\u0080\u00E6q\x063\u00E4\u009E\t\x06\u00D3US\u00BFVm\x18\x1B\u00F3\u00E5\u0093\u00C97'\u00F4\u0091\u00FA\u00B9KK\x0Bc\u00B5\u0085>\x03C\u00A5\bBSG\x16g4\r4P\x02\u00DC\x1E\x1E\u0080I\u00E1\u00CE\u0085H)\u009C\x069\u00B35y\u00AD(\u00C9\u00FEke\u009F\u00EE\u00C93\u00A2\u00CD%\u00AE\u00C4\u009A3)J\x15\u00C5I\u00A6y\x1C\x02\x17Z\u00B7\u00E3\u00DD-i\x1D\u00E2^\u008D\x18\u0086\u00AF\u00E3\x1EFK\u00B0\u00B2\u00B2G7\u009AV\u00A3\x163\u0081\u00B2\u0086=\x07\u00A1\u0086\u00E0\u008Ad\u0081\x1CSm\x1AI\u00D9\x18E\x17Xm\u0087\f&\x120%\u00D9\u00C3\u009F#\x18\u00AA\u00C2n\u00EF3\u00EEns\u00C1\u00CA\u00CA*K \b\x1D\u00A0\u0092F:\u00CFRh\u00DE\x07\x03\u00A6\u009C\u0099\u0091\x17\u0084\x17\u00C1\u00A3E3\u00A2\u0081\f\u00D7\u0082\u00E8\u00C9\u00BC\u00CD9>B=5]\u00F8n'\u00A8\u00C3\u0099e\u00A8\"\u00FC\u00CC\u00E7+\u00AA\u0085\u00BFwn\u00C2\u00CB\u00B9#\x0F\u009F}\u00E8\u009D\u008F\u00DE|\u00DB\x1F\u00FD0\u0080\u00BF\u00C0Q\u00B4\u00A3R\x19\u00B6t\u00FF\u00F0\u00DA\u00C5\u00AB\u009E\u00FB\u0099\u00B5O\u0082\u00E9C\u0099Nt\u00D7\u00B5-\u00B1\nK\u009B\"\u00D8tMo\u00E9\u008C`[\x1A\x16\u00B2fFDI5`!\x16\u0094\u00B4\u0080`)\u00E2\u00C7\u00868Gai\u00CE\x195oU\u0091\u00BA\x0E\x18\u00B5E\u00D2\x13\u00D0\u00D0\u00B5\u00A1\u00AB\x17\x19\u00E1y@\u00E6=\u00A8\u00B8\x1Ab\x7F\u00A32\u00B8)\u00D5\u0089\f\u009Dr\u00C4\u00D0\f\u00B5\u00D0gR\"-\x10!\u00C4\u00C5\u0086\u0091(\x03\u00F9\u00BB\x1B\x1D\u0099xcp\u00D9\u00D5\x00I\u0088*Q\u00C4\u0083Q\x1D\u00EC\u00CEJ\u008F%\u00C6)\u0085[\u00985\u00D8\u00A8>P\x1D\u00A9R\u00D4\u00FF\u00FC|\u00A5\u00AD$\x1A\u00D5\x02S-x?\u0086\u00A5\u00F3\u0098\u00F8^\x16i\x0Ba\x02\u0092\u0087\u0093s_L^\x13\u00A1\u00DA\u0086\u00DC\u00C2\u00A8\u00E9\u0089E5iI&\x04\u0098\u00FFf9\u00BCz\x7F2f\u009E7\u00E4\u00BB\u00E0\u00EFJ^\u00C4\u00F7\u00C5\u00C7\u00F4\u00F7\u00C1\u0094xJpE2\u00E7\u0089\u00D4\u00F7\u00FB3\u0097#\f\u00B1+\x06O\u00E5\u00F6w\u00AE*Z\u00AF`\f\x07\u00C3\u00BB\u00D6\u00B6\x0E\u00A0\u00BF\u00FBo\u009F\u00AB{\u00AE=*\x0F\u00E2Q!\u0084\u008B\u0097\u0097<\u00ED|\u00FD\u008Bo\u00F6G=\u009A.\u008E\u00BA\u00ED\u0085b\u00B7\u0096\u00DC1q\t\u00ACs,\u00B1\u0086\x19\u00E6X\u00AAW\u00E8\u00C1\f\x03f\x18\u00A9\u0097\u00AAy\x00\u00A8\u00C7\x0BfX\u00C0\u00CB\u00A3\u00A9\u00EB\u00B5B\u00C8_\u0089\u00D9\u00EC\x0BT\x03h-\u00CE\u00CC\u00C9d\x02\u00AA\u00D6\u0087*U\x10[l#\u00A6.Q\u0084\u00A4\u00A1^\u00AF\u00C8\x1C\u0087\x1E\u0092H\u0084\u008B5-\u00D8*\u00C4\x14\u00B9\u00A0\x01\u00F8\ne\u00BCCK\u00D5W\u00E9\u00EB&a\x02\u00DA\u00E7\u0081dW\u00DF\u00A1]\u00E7\x12H\x11\u0084\u00CB\x05\u00E9g\u00D9\u00FF]\u00C2\u00C7\u00BD\u00BA\u00DF\u00A7\u00BB\u00C2TC\x1EaRXH\u00CC\u00A1\u00AC\u00B4<\x17\u00FC\u009DF\u00BB\u0094\u00C1\u00C4R\u00A6n1\u00B88\u008Dyv\u00FD8\u0091K\x19\u00FCS=\x00<\u00CFK\u00AE\x03\u00A6b\u00B0\u00A8\u00CC$\u009C\u0098\u0090\u00DF\u00DF\u0099\b \u00A3\u00DB\"+\u00E2(\u00A8\u00CB\u00E3\x13\u00D2\u0080\u00E8\u00EF\x03\x00d,9\x14n\x00\u00AE\u008C\u00BE\u00C4P\u00A8_?\u00D9\u0087\u00C2_M<#U\x11g>\u0082\u0086\u00F9\x15\u0097|\u00F3\u00D6\u00DF\u009E\u00F74\x00\x7F\u0086#lG\u00CC\x10Tu\u00F8\u00D9\u0083?\u00FB\u009C\u00EB7\u00AEu\x18tH5\u00E7.i\n\u00DB\u00A5\u00E9F\u00B0(+\u00A3\x18\x07\fXC\u00935\u00CCt\x0E\x11&'\u00CD0b\u0086&&\u00D1Fa\u00DC\u0080y\x00F\u00D0\u00AFN\x1F\u00FEDi\x00`\x1E\x0B\x11[z45\u00D1\x7F^\u00D1\u00C1\b7zQ\u00AATKsi#\u00EF\u00D7`\u00BEeg\n\u00E1U\u00D8\x01\u00DA$\x18\x15\x02\u0086*\u009A[\u00F0\u0094\x12<\x16\x14U\"\u00E4o\x023B1b\u00AF\x19\u00B3b\u00982O\u00C9O$\x07z\x16\u00C8P\x00\u0090qu~v5@5rv\u0092\u00D1\u0095\u00A8\u00C3\u00B8~\x063B\x1B4\u00AE~\u0087\u00D8iZ\x19\u00AF\u0090\u00CCJ\u0099\x02\u00DD\u00FD\u00DF\u00D8\u009B\u00D1G-\u0095\u00C1\u0098\u00AD\u00C0\u00C2\u008E\r-51U'\u008B\u00A0:\u00E3\u00B5\u00CEB\u00FD\tB\rX\u00CF\u00C2|~\u008C\u0084\u00A7\fX\"\u00D3HT\u00A4|n\u00C9\u00FB\u0090)\u0088o\u00FAjU\u0092\u00B8;\x15\u00D5\u00A0\u00CA8\u00874\u008D\u00F5\u00C1\x18\u00EC\u00A4\u0080\u00AD\u008F\u00A8\u00DA,\u00BA1\u00B3\u00F9\u00D6\u00AD8\u00F8\u008E\x0B\u009E\u00A3\u00DB7\u00BEF\u00D6\x1ExD\x1B\u00BD\x1C1Cx\u00DB\u00F2\u00A2\x1Fy\x03\u00DEpV/n\u0097\u00BB\u00BBmA\u00B0G\u00D4\x03\u0096\u00B2\u00CAQ\u00D3\x01s\u00CF#\u0098\u00C1\u00CA\u009C\u008D\n/\\\".\u00F7\u00FD|e\u0088q\x03\u00D3\u0091\b\u00EBI\u009C\u00DDa\"\x11C/\x7F\u00B4*\u00AB\u00AB\x12Le\u00EEE\u00D7\x0F\x1D\x15\u00A9Tqy4\u0080\u00C2\u00DA\u009B\u00BB\u00ABVtT.\u008E\tq3\\9\"\x1A+|\u00AF\f\u00C5\u00DF\u008E\u00D6s)I\u009Cx\x18z\\\u0089\x19(v\u00DA\u00B0F\u00F8\u0093d\u00B7\u00F1\u00C5C\t[q\u00EDY3\u00A2\x11.\u00F6\u00C8\n\u0094\t\u00AA\u0091\u00B8\x7FYM\u00D2\u009Cq\u0090\u00E0Sb&\u00FB\u00E2x\x14\x19i\u00C99\u00F0-\u00E0\u00E8^-Oa\u00FD\u00F9y\u00B1\u00E9m+D\u00C9q4\u00C4N\u00CF1A\u00EE2\u008C\u0099R\u00D8\u0096\u00F1d\u00C8\u00EA\u00F3\u00CBq8\u00EAP\u00B1\u00F3\u00C2>\u00C0s<\u00E9I\u00C9D\x15i\u00F4\u00E4\u00A9\u00E5])\x19d\u00FE\f\u00AA\x12Dm\x00p\u00E5\u00FB\u00CF\u00DA\u00FC\u00AB?\u00FE\x11\x00\u00AF\u00C5\x11\u00B4#b\b\u00B7\u00EA\u00A6\u00FC\u00D2\u00E6\u00AF\u00FD\u00DA\u00B5\u00EB\u00D7q\u00CAA\x18ww5\u00F5\u00FB\u00EE\u0085`C\x05\x1BX\u00C3\u00809\u00E6\u0098a\x01\u00C16\x18\x13g:\u00F3\u00E8\u008C\u00C2T\x06\u008F\x13\x103\u00D4u\u00D0v\u0090\u00CC\u0080\fB\u00C5\\\x7FZ\u00CEcP\r=\n\u00C6\f\\\u00CE021\x10\u0085\u00DB\x1E\u0094\u00B5\x18m\u00C1\u00D8\u00B5\u008C5pfA\u00D7\u00A0/\u00A4\u0088\u00D8\u00A3\u00F4p\u00C6\u00A4Z\u00B2\u008Cb<izk\\\u00E4\u00B1\u0080\u00AB\u00C4\u00A1k\rf\u00A8\u00F4Eg\u00C2%\u00D3\u0095c\u0092)\u00D0\u00F3c\u00F9\u00C4\u00B0j\u0085p\u00FF\u00C4\x02\u0084\x18\x1A\u00ADN\u00C4y\u00CC\x19B-G\u00C4\u00BD\x16\u00E3\u0086\x03\"\u009BR\u00B8\x1D\u00BC\u00C6b\u00CF\u00C1\f\u00C8\u00A2\x02\u00F4| \x18\u008D\u00D0c!\u0085q\u0088\x13\u00BD{J\u008CQ\x15C\u00A2\x1FWe\u009C\u00AC1\u00AExVN\b\u00FC\x19B\u00FD\u00D0\x1CK\u00BC\x1FH\u00CF|h\x00\x00 \x00IDAT2)\x7F\x7F\x1C<\u00BD\b\u00BC'g\u00D9kn\u00E6\x032\u00E4\u00DC\u00FB\x0EF?\u00B5\u00D5I\u00E9)z\x14`}q\x10\u00FB\u00DF\u00FD\u00E6_\u00D3\u00CD[\u00FE\\6\x1Ep\u0087I\u00F4\u0088\x18\u00C2\u00C7\u00FA'\x7F\u00E0\u00AF\u00DB_=bl\f\u00C79vm\u0084`\x0F\x04\u00BB\u00C4\u00EA\x1C\u00CE0\u0083e32'\u00C1\fg\u00AD\x18\u00EBf\x10c\x10\u00C8=\x16\u00AC@\u00AB1\u0091\x11\u00E9\x11\u00C8\u00FA\x04<f\u009F\u00C7X\u00E0R\x00/\u00E2Md\u00C0\u00921\u00A4\u00D0\u00FF\x1D9\u00B0\u00CA\u00D3\f\u0082\u0081Y\u008F\u00D5_\u00AE\u00E2{\x01\u00B4\u0082\x10\\\u00AD\u00E0\u00FD\x1A\u00DC5V\u00AC\u00FC(\u008CB\u0090P\x14\u00F9\u009B\u00AAB:\u00DD\u0096\x1A\u00BF\x1B:\u00F1\x05\u00C8 \x1F\u00C2__\u00BC\x11\u00DE\u00CFE/.\u00F5\u008A\u00CBW\u00D1\u0080\u00D6c\x1Cy<%\\\u00F0\u0083\u00C2{\u00F2\u00FA\u00CA\u00EC\u0090D\u00EEscS(\u00C9T\u00C4\u00C4Q\u00E8\u00E4\u00A1V\u00A1\u00F4SB\u0096i\u0083\u00C12\u0099\x02\x00f\x1F\x16\u00A3K\x19\u00D8*j`\u00BF\u00C5\u00E5\n\u00F3\x10\u00E5\u00FE\u008E\u0095<\u00CBg\u00AA\x0F\x15!\u00C5\u00F7\u00BE\u00D2o\u00B9'\u00DD\u00B5\u00DEO0\u00DA\u0095Qq\u00B8\u00CCg\u0099\x7F\u00E4\u0092Gl\u00BE\u00F5U?\x00\u00E0\u00AFWO;\\;\"\u0086\u00F0\u00EA\u00CD\u00D7\u00FE\u00D2\x17v}z\x02\u00BD\u008E]k8 k\u00D8\u00A3s\u00CCd\u00869\x1A\u00E6\x180s\u00A8O/\u00C2\u00A8\x1E\x13\u00E0\u00DF\u00850^\u008C`\u00C3=\t\x16S\u00B5z\u00CC3\u00A4=\u00A0*\x1C\u00F4H\u0088\u0087(CX\u008E\u00ADM\x18\u0087@0J\u0095\u00E3l\u00CC\u00A5\u00ABe\u00C1\u00EDy\u00F2\u00AF\u00C0X\u00BF\u0086\u00E7\b\u00A6n\u00CEC.< \u0098\u00CB\u00E4\u00FA\u00D2'\u00A5\x1E\u00C7\x1A;9\u00C5@\u009D\u0089q\x0B5Bog&\u00C9\x07\u008A\u008A\"\x15\x0Ep1S\x15J\u00C8\x1D\u00DF\x05\u0098\u00D6\x13 %\u0093\u00C0c\u00A0S\u00E6P\u00FA\u00B1\u00CAHb\x04\u00C9\u00B4n2\u008D\u0089\u00C4\u00ADh\u0096(\u00CA\\\u008F\x10xl\x1D\u00E7\u00A3>W%\u00E0\u00AA\u0096\bl\u00AD\u00AC\x14\x0FV\x1ASW\u0086\u008BJ\u00F0\u00E5\u0084>\u0094gc\u00FF3djt\u00B9\x07U\x03E\u00B9o\u00B6:C\r\u0082\u00F5\u00AD\u00FD\u00B8\u00F5\u00A2\u00F3\x7F\tG\u00C0\x10\u00EE\u00B0\u00DB\u00F1\u00E3\u00FD\u00EAG\u00BEux\u00D3\u00D9KYB\u00CB\u00FF\u008EE3\x0B\u00FE\x00\u00C5:\u00F6\u00A0a?f8\u0088\x01\u00DB\x10l\u00A3a[\x1A\u00B6\x01l\x01\u00D8\u0086E$.\x01l\x0B\u00F7o\u00F0hEa\u00F8\u00B2\u00FD\u00D1\u009E\u00ABJ\u0097\u00A2\u00AB\x12d2\u00A8\u00C1K\u00B5fB\u008D^l\u0081:\u00F2x+\u00E7\x0F\x18\u00DD\u00DB\x11\x05R\"\u00B1I\\j\t\u00D0\u009C i0\u00EC\u00EE\u0092r\x03\u00A9%\u00FA\t\u00CCHg.B\u00EE\r\u00D1\u0099\u00F3\u00D0\u00FC\u00CFU\x17\t\u00B7\u00A0\u00F5),\x0E\x02\t\u00F7&\u00C2\u00AB\u00A7N\u0093\x19\u0089g\x11\u0084\u008C\u00A9\u00F0\u00F14\u00AB\u00C0\u00C4\u00F8\nV\u0084b\u00A2T\u00BAS\x19\u0088\u00D5\u00C2\u00E8\u00CB\u00F8~i\rh\x12\x02^buq\u00FC\u00C0D\u00AD a\u0085\u00EE\u00EF\x7F\u00F1y\u00C8\u00F9\u00EC\x00m.dzT\u00EF\x10\u00EB\u00C8\u009F\u0085\u00E4P\\\u0083\fI'z\u008A\u00F8\x01\u0097\u00DA\x1A\u00E7\x0Bv\u00D6\u0093l\u00D8\u00C1\u0094\u00E3\u00B3\u00C4\u00DC\x07\x02,\x11\u00A8\u00F9\"xIA\u008C\u008C\u008E\u00E4\u00B9\u00EA\u00E3\u00AA\u0081Sn\u00BC\x1C>|\u00F9\u00D9\u00E3\u00BB^}\u0087\u00EB/\u00DEa\u0084\u00F0\u009A\u0083\u00AF{\u00D6G\u00D6?\u00E4\u0093w\u00D7\u0084*\u00DF\u00B1F\u00AEi\x05D\u00972\u00C7\x1E\x15l`\u00C0L\u00E6\u00B0\u00C0\u00A1\x19\x06\x190x\u00CA\u00F2\u00B6\u00FB\u00B3\x1B\x06,]\u00CF\x1EP\u008D\u0084%\u00B6\u00C0\u0089\x19\x11b\u00EC/\u00CB?\u00B7\u00A4\u0098\u00F2?#\x06\u00BB\u00D6j9u4,]M\u00D1bl\x14HT\u008B\u00EER\u00FAP&\u00D3\u00F8\u00BD\u00B9(\x14\u00BE\u00D8J\x04\u00A2\u0087\u00AE\u00DA\x16WC\u00AA\u00B3\u00CD\u00B3\x02C\u00FAJ\\_\u00AB;\u00D9\u00FE\u00D9U\x1E\u00DAB\u00CA\u00FD\x1E\u00FDwJ\u00FBf\u00C4\u00A4]3.H\u00D2\u00A1G_\u00F8\u00A1\u00E5\u0083\u0093\u00B8 \u00A1~Qv\x15\u00D5\u0080\u00D6\fvG\u00BEB\u00CFc\u0085\b\x01@\x19\u00A4t8\u0099\u00E4\u00E1\u00DE\fr\u009A\")\x1F\u00B5\u00D8;\u00B0@\u00DB\x15[\x06\u00EF)\u00E4'R\x0EW\x14\u00B4\u0082\u00CC\u0082\u00C9{\u00B5\u00A4\u0089)\u00B9\u008Ew\u008Ax\u00D4\x03\u00CCRm\u00C9\u00B9\u00CBHF\u00AEI\x18\u00BA\u00D1j[\u00C8!e\u00AE\x06\u00B0~\u00CB\r\u00D8\u00F7?\u00DF\u00F4,\x00?y\u0098\u0099\u009A\u00B4;\u0084\x10>\u00A7\u009F9\u00F5\u00A2\u00E1\u00A2\u00A7\u00F5\u00B6<D\u00B2\u00C5\u00DD\u00DD\x1A,P\u00C5j()\x1A\u00F6\u00A3a\x0F\x06\x1CD\u00C3\u00A64l\u00A2a\x1B\rK\u0098\u0091q[\x04\x0B4,\u00D0\u00B0\u00D4!*7/a;D-1\u00D81\u00FF\x1Ba\u009E\u0083Q%\u00BE\u00DB\x06\u00B3\u00E2N(\x1A!3\x16>\u00AB0\u00F38\x02Ce\\\u0082\u00EC@\x12,\u00E3\u0082\u00F8\f3 \u008A@=?\u00A03\u00AB\u0090\x01+2\x00\u00ADAZ#]\u00D9\u00F9\u00B1x\x1A,\x04\u009A\u00EAAap\u00DE\x17\x19]\u0081\x04N\u009C)\u00BD#8F\u009A#\x11{F\"+\u008D\u00BE\u00AC\u00D8LV\u008F\u00AE\u00FD\x16U\u00A8d;\u00C6_0\u00AB\x1A4\u00C51\u0094\u00B1\u00C0\u0088\u009B\u00D7\u00B115|zO\u009F\u0094*\u00A9\u00CBsR\u00C5\u00D06C\u00A8\x07\u00BC>\u00E2=*\u00E3\u00F79.\u00EF{\u0095\u00A0\x03\u00ADL\u00A4\u00BB\u008F!\u00CA\u00B4U\x02'\x1AA9\u00B7\u00F1e\u0096\u00E7\u00A9\u0081JD\x00\u00F5y\x15\u0099FM\x04\u0091c\x12\fh\u009F\u00FC\u00C0\u00D3\u00F4\u00AA\u00CBO\u00C5\x1Dhw\b!\u00FC\u00ED\u00F6\u00C5?ua{\u00D7F\u0096!96\u00CD\u008Cj\x1E=\u00C7\x04\x19X\u00C5\"C\t\u00CD}\x0E\x19\u00C1\u00D8\\j\u00E7&.$\u00CC\u00C1\u00A59\u008D\u0089\bb\u00A6\rB\u00D4\u00E0q]\b\u00A6B\b\u0096\x0E\u00E1\u00E8A\x10 \f\u008E)u\x1D\x11\u00B8[\x12\n4\u0087\u00EC\u00A3/\u009C\u00EER\u00D8\x02\u00AC\u009C0Cof\u008C\u0081C\u00C4\u0080\u00A5\u00BE\t\u008D\u00B2\u00EC\x1A\r\u00A1@\u00C1\u00DD\u00DE\u0097\u00BA\u00F7.%\u008F\u00C8\u00E0k\u0089\x12\u00DB\u00A0u\u00F3\u00EB\x1DX\x17\u00C9\u00ED\u00A8#\x10\u0093\u00AD\u0082Fh\x1A\x02\u00D8-\u00FF\u00F5\u009D\u00B5\u009Ee\u00D1\u00C4;\u008B\u00BF\x0E\u00D1\u00B9I\u00BBncQ\u00D7\u00FFm\u00F8\r\u00DA\u00DDU\u00E7\u00AB^\u00D0l3Z\x12\x1F\u0091\x07\u00FC\u00DF \u008AUi\u00EF\u00CF\u00AD<\u00DF\u00F2\x1D\u00C2\u00DB\x02\u0084qR\u00DD0\u0087.\u00E6\u00FB\u00F7\u00AEl\u0095\u008C\u00D0\u0088_h\u0085\x10]4\u00A3\u00C16m\u00B1\u00F1\u0087]#\b\u00DE\u00CFS\x18Qw\u00D8<0N\u0082\u00E7\u00F0\u009A\u00E2\x16\x15\u00F5\u00FE\u00B8\u00DB\x16\u008D\u00C0\u00BD\u00C73\x11aj\x17HW\u00B4q\u0081\u00F5O\x7Flc\u00FF\u009B\u00FE\u00F8\u00A7\x00\u00BC\u00E00\u00A4\x15\u00EDv\x19\u00C2\u00D6\u00F2@\u00FB\u00D7\u008B_\u00F8\u00E9\u00AD\u00B5\u00BDH\x7F\u00F7\u00B1jU\u0082\f\u0093\u00BFmi\u00B8Q\x15\u00EB\u00DA0\u0097\u0086-\u00D7y)M\u00A2\u00DC\u0089\x13\u00961\u008A\x04\u00D1\u0091\u0081H\u00E2\u00F2\u00F3\u00A8\x0E\u00D4\u00C2 \u00EA\u00C46\u0080\u00B6\x06\x7F\tN\u00B0\n\u00EE\x1C\u00E8\u0088@H\x10\u008C9K)\u0093\u009E\x02\u00C5\x10\u009B\u00C6\x12\u0099\u00B2\x10k\x03\x03\u009D\u00D2Ah\u008B\u009D\u00C7\x03\u00E2\u00FB\u00FAa\u0090S\b\u00A0p\x11\u00B8z\x000\x04\x01\u0088s\x10\u00C7\x11gec\u00E4\u00BCS\x07b\u00B7e\u00EA2A\x1C@\u00D8\u0097\x18OP\x02\u009BHaY-\u00C8]\u0080\x11}\u00C8-\u00D58\x1E#B\u00EB;\x0B\u00BA\u00A0\u00E4E\x04\u00C3!\u008C.\x1B\u00D1N\x1F'\x1F:B\u00A4\u00C3\u00E0gk,\\\u0084\u0084\u00FB\u00CED\u00ECJF \u00FA\\2\u00DD\\\u00BB\x07Ka\u00F2{DG\x06\u00AA\u00F1\u00BE\u00AB1\u0095\u00EE\u00CBp3R-(\u0088F+\u00B3@\u009E\x17\u00C6S\u00FF\u008Dh!fE1h\x07>|\u00E9O\u00EB\u00DE/\u00BEH\u00EEw\u00F2m\u00EA\u00FB\u00B7\u00CB\x10\u00AE\x18>\u00F1\u00A4\u00BF[\u00BC\u00F5\u00F4\u00DE\x00\u00A0\u00EF\u0098\u00E3\u00BB\u00AFQ:\u00CE\x01\u009D\u0081\u00A9\u00BB\u00B99\u00EA\f\x0B\x01n\x15\u00B3.\x18A\x0E\u0098\x17\u0083\u00E0\u0082\u0084\u00AA\x1E\u00B4\u00E4}2\u008Dut\u00A2[B\u00C0-\u00E0\x1A\u00EAn\u00D3\u00FE\u00AA\u00D4<\b\u00CB\u0088\x104\u00F7\u00E6\x00\x17dRC\u00953\x17\"\u00D3PZ\b7[BL[\u00CE\u00BA\u00C7\x11\u00B5X\x16\x14mF\u00CCW0\u00B4Rc\b\u00A8\x1Ad\x16\u009F\u00F9\u00D4\u009B\u00AB\u00A1I$<>\r \x00i}:\u00EFQ\u00E3P\u00DD\u0080\u00EF\u0096tqw%\u00D1\u0086\u00EAd\u00B9F?\u00E2\x01J<&d-\n\x0B\u0097\u00E4\u00D8\u008C\u00E0+\u00E1\u009A\u00FA\u00E4\u00DE\x00h\u00CE\x0BLR\u00AA\u00BB\x1Fm\u0088C\u00DC\u00DD\u00EE\u00C5 \u00A2\u008E\u00F0\u00FD\x0B\u0090\u00AEK\u00B7~T\u00C3\u00DF!9e\x12\u00A5\u00ACfY2\"\u00B1\u00AF\u009C\x1B\u00AB\u00A5\u00A0\x178\u0093\u0088w\u00CE\u00E1\u0092q\x14\u0084\x03gT\u0093\u00EFd4dF<V]\u00AB|\x17\x1C\u008F\u00A1\u00BB\u00E1\u00C3\x1F<}\u00EB\u009D\u00E7?\t\u00C0[q\x1B\u00EDv\x19\u00C2_\x1D\u00B8\u00E0\u00DC\u00CF\u00AD\x7F\n\u00C7\u00CA\u00A3\u0090-\u00E3\x0B&\u00BB(\x17i\u00DB!\u00B8\x19\u008A\u00B96\u00CC\u00BC\u00E8\x063\u00D7\x07\x15\f\u00D2\u00B0\u00D4\u00C8\u0096\u008FpUb\x00\x06+\u008D\u0092\u00B6\u00F4\u008E\x16D\x1D\u00DF\u0085F\u00C3|\u00F9\u00E6\u00AC\u00E4&\u00B0\fE1o\u0086p\u00FB\u00B5\u00E6\u00EA\u00853\u008D\x0E&#Y7m\u00B2\u00A0\x04f\u0085\x07ha6!\u00CB@\x19;G\u00DD\x00\u0099\u00B1\u00F3\u00D6\u0099]\u00A7\x11Al\u008Bgp:3\u00A6\u0091&\u00A96]\u00C7\u0094\u0080nL\x14\x1D\u009C\u00E2\u00B8\u00D0lQ\u00A6+\u00D1\u00CEW\x12\u00B8z\u00BF\u00CCk\u00F0p\u00E90\x12v\u0089\u00F8 \u00BB\u00B4\u0085!\u00CC\x1Em4\x03\u00A7\u00C0\r\u009D\u0083=\u00B5\u00AA1\u008E\b\x02\u0082\u00ABt\f\u00A1\u0097\u0082\x12lL\u0089\u00A5\u00EA\u00D4:\x1AQ\u00CFbd9\u00F8|\x14\u00FE'\u0099\u00F8\u00A4\u0093\x16\u00CFaII\u00EA|\u0095\u00BFs\u00D2\u00F3\u00A6\u0096\u00DA>\u00C6\x1C\n\t\u009EHG\u0099\u00B3A\u00A9\u00AFN\u00E3\u00BD\u0080\u00AA\u00D5~\u00BD\u00BE$#\x1C+\u008D\u00BA\u00AA\u00C8\u009A\u00A3\u00EB\u00CB\u00FD\u00B8\u00E5\u00C27\u009D\u008B/\u0085!\\\u00A3\u00D7\u009Dt\u00EE\u00E6\u00B9O\u00EDm5\u0093\u00F1\u00EEW\x1C\x04\u00BE=\x19\u00B7>\u008F\u00B7\u009B\u00C6 \u0095\u0086\x05\x06|\x11\x03v\u00A1\u0099r!3\u00CB\u00CD\u00F3\u00AAI\u0083\u00DB\x06b\x03\x14\"\x044\u00B0\u00B8i\x0B\u0084\u0090\x0E\u00B6\u00E0\u00C3*\u008E$\u00CC\u00E0\u00A3j/\u00BBF;\u00DA\u00B9C \x03\u00AB\u00C8l\u00E3\u00ED\u00A0{\u008D9\x11\u0088gY\u00F2\u00EEb(fbd\u00E2i\u00A17\x0B&\x1B\u00BF\u0086[\u008D~\u00F4B\u00E1d\x1E\r\u0099\x0B\x00\u0097\u00AE\x15\u0089D\u00D3\u0089\n\x10\u00D6mF\u00FD)-\u00FCIx\u00B9:8>\u00EFg\u00D2\u00AF\x13\x06\u00C7O\u00A9\x06M\u00A9\x1D\x1D\u00D5<\x01B\u00EC\u00ACM\u00C0\u00E4&S\u0097\u00B4\u009C\u00EB\u00F7Q\x14\u0086UU\u00AD\u00D2\u00BF\x02\u00CAd#\x12\u00DFd\u00D1\u0089?\x7FM\u00BEb\u00AA\u00B2\u00A3\u0096\n\u00D7\x0F\x19qE\"g\u00FF2\u00F9=\n\u00B8\x06\u00A6j\u00E5x\u0099\u00A7\u00C9q&b9\u00E3\b\u00F5&\u0091\u008D\"U\x07\u00AA8kW\x7F\u00F8\u00A9\u00FA\u00F9\u008F\u009D$_\u00F5\u008D7\u00E30\u00ED6\x19\u00C2\u00FF\u00DA\u00BE\u00E2G\u00DF\u0087\u00F7l\u0088\u00CE\x00\u00B9Sw\u008C:\u00C2f\x15\u008F\u00B8\x11+K\u00A21;P\u0095\u00B6\x02\u00B3\u00E8n\u008Ab\u008F6\u00AC\u00C9\u00CC\u00E2\x15\x15\x18$}\x01\x10\u00B5]\u00A0}\u00F1\u00B2@\u00C6L@\u00EC\x00q\u00D4\u00D0a\x1E\x07\x06%\u008D\u0092R\u00A3\x01\x101\u00CF\x04\u00B9;\u0097g\u0087y(\x06\u00B4\u00A0\u0091\u0080\u00F9HGT\u00DE\u00D1\x18\u00C4\b+Y\u00A2M`{1j\u00BA#\t\u00FF\u0095R\u00CF1\u0085\x1B\u00B7\u00B4\x19R\u00E0\x1Aa\u00B5\u00A4\u0088e\u0080\u0086kR\u0089>J\u00B3{\"U\x0B\u00A1\u00DE\u00CCPe\x01\x0B\x1D\u0087\u00FBs\u0082\x12J#4'\u00DD\x13\u00DD\u0088B\u0086\u00F2\u00A3\u00DFk\"1\u00C3m\u00D7\u0091\n[\u0081\u00F0\u00D2`%\u00D4\u00FD\u009C\x1D1\n\u00F53\\\u00AD \u00F3\x17d\u00895\u0087\u00E0\u00F5\u00BB]Q\u00FE\u00F1\u00C8N\u009A\u00F2\u0083\u00D1\x19^\u00A4*S\u00DFh\u00BD\u00F7\u00E4_\u00A2\u00B4\x18\u009F\u00AFY q\u00CC\u00AA\u00CA0Q\x1D\x14\u00C9\u00DC\u00E2\u00E9l\u008D\u0094\u00BD&\x0E\u00D5T\x15\u00C35\u009F\u00DC\u00B8\u00F5/\u00CF\u00FBQ\x00\x7Fx\u00B8\u00F3n\u0093!\u00BCe|\u00EB\u00D3\u00F7m\u00DC\u008A.U\u008B\u00BE\u00BB\x1B_d\rr\u00A9\u0093\u00E6\u00A4F\x03\u009C\u00BB\u00DFn\x11\u00C5\t\u00AE&\f\u00D20\u0087\u00A55\u00CD\u00B5\u00C4\x1C\u0088\u00A4\u00FB\u00AC\u00FC\u00AE\x1E\x13\u0090\x11\u0088TQ\x10\u00D2\u00DD\x18\u00D1,\u00DCf\u00D3\u0094ic2\u00CD\u00EF\u00D1\u008A\r!\u00AB)Q\u00EE\u00D4c\u00F463\x10\u0088l$\tz\x12\u00AB\x0F8<\u00A5A3\u0099\x1B\u00AB\x1B\x07\u00C4wv\u00C4\u00FC\u0088\u0080\u00C1&\u00FA|\u00AE)R(\u0095\u00ED\u00B70\u00A4z\u00EE\u0083m6\u0083P\t4\u00A4\u00A3&\u00BC\u00ADR\u009F\u00F7\u0086\x16T\u00E1\u00C3\u00EA\u00E5^\u00E1?K\u00F4!A@=\u00C7\x05\u00D7/te\u00DC\x05N\u00A7\u00BF>\u00F36R\u00F7N\u00C9\u009E\u00DB\u00B7\u00AD\u00A2`#D\u00FA\u009F\x02\u00B2+@+\x7F\u00C6\u00E4Ti^\u00A4\u00BDq\u00D1r\x1FC9\u00E6\x1D\u00A0\u00FA@\u00A3$\u00C7\u00E1\u008CC\u00810pr>\u00CB\u00BA\u00B7\u0090mu E\u00EF\u008E3\x07N\u00A3??\u00A7k\u00DE\x17\u00D8\u00FA\u00D0%O\u00C7\u00D10\u0084\u00EBu\u00DF\u00C3~x\u00F3\u00A9\u008F\u00EF\u0093\u0082\u0095\u00C7\u00A25\u00E4\u008E\u00C0\u00B5\u00EA\x11an\u0081\u00D6\u0085\u00E3.z\u00C3\r\u00E2\u00FB.\u00A9:B\u0080o5_!\u00B9\u00873\u00D3\u00BD\x07I}0\u008EcBLD#\u00AC\u008A<C\u00CD\u008Bp\t\\\u00DC\u0091D\f-\u00A4\u00A4\u00F8{\u009A\x16+\u00B1:\x07\u0095\u00E1\u00A1\u00C0k\u00FF]\u00A6\x0B-\x17_e\x1E\u0088\u00B1&\x13\u0091\x102\u00A1s\u009Ae\u0091O\u0097:\u00BD\u00F0?\u0089\x00\u00EC\u00D2\u008C\u00DD'I0/B\u00BB)H\x13)jGR\u00FA\u00F5d\x1A\u00B1\u009A\x1A\"<:\u009FSs\u00C9\x15t\x13\x03\u00E9\x1E\u00A4\x15\u00DC\u0087\u00CF\u008A$|Jc\x1Da\u00A9\u00C6\u008A\u00C8W\u00E0\u00C6\u00ACT7xM/\u0088\u00A3zE&\u00C9H\u00F5\u00CF\x07\x14\u00F5\rP\x1E\u00AC0\u00AENU\u0087\b!\u0099\"\u00ED?vz\u00EEx&\u00D1\u00EF0\u00ED\u00DBm*\u0093\u00A4,\u00AE}\u009D\u00868\u0093\u00FF\u00A6\u00EA \x18>\u00F9\x0F\u008F\u00D7\u00CB\u00DF\u00F30\u00F9\u00D6\u00EF\u00BC\x06\u0087h\u0087e\b\x17,\u00DE|\u00CE\u00A5\u00B8\u00F4X\u00C1\u0082\u00D2\x06\x00\u00EB\u00B0\u0082'T\x0B\u008CP\u00E9\u00C3O\u0089@\u00A9`\u00BA\u00EAAi\u00D8\u008B\x01\u00BB X\u00D3\u00C1\u00B3!\r1\u0088\x133\u00C9\u0088\fB\u0085\u0092:\u00E3\x16F\u00CF\u0094\u00CC<\u0082V\u00CE\u0099\x02Nj\u00DC\u0095M\x13\u0094\x0E\x18\x10!\u00F3\u00B0\u00D4lH\u008F1\x18w\u00EFf\u0098\u0094d\x02M\u00B88\x04\x16PC\u00AEoz}x.T3\u00E8\u00C8\u00E7\u00A5\u0092s\u00A0\x064wo8\u00D1\u00BA$\x0F\u0095As+\u00B6j\u00C0\u008B0\u00E7p\x0F\u00E6\u00ECW\u009BB\u008F\x1C\t\u00D8\u00EFf|q\u00E3\u00DD\f\u00DDk\x1B\u00C6NG\u0085iA\u0096\u0080\u0088mQ/\n\x1DK=o\x0E?f\u00D5\u00F3\"\u009C\u0089\x18O44\x1B\u008E\u00826\x00\u00A3\u00BF\u00A5\u0089\x04w\u00A2\u009A0\u00D7\n\u00D5\u0081\u0084\u00E9\u00D3\x16\x01\u00A0$\u00BC\u00B0\u00C1tT\u0094\u0092\u00E8\u008CL\x0B\u0098\u00AA\x15~\u00A6\u00B62\u009B\u00FE,\u00AAa\u00C7\u009DVkv\u0083\u00EC\u00C4\u00C0Xb\x14z\u00BE\u00F5\u00C9\u00F8; :b\u00D7\u00F5\u009F\u0093[\u00DF\u00FC\u00FAs\x00\u00FC\u00D7\x1D\x03\u00C1m0\u0084\u008B\u00B7\u00DFs\u00CE\u00D6\t{o3:\u00F4\u00AEo3\b\u00E6\u0080\u00B8\u00ED\u00A0J\u00CFp\u0099\u00D5(?\x12\u008E\u009D\u00D7\u00B5a\u00AF4\u009C\u0080\u0086\u00990\u00A2\u00C0\\\u0091\u0083\u00D7JX\u008A\u0095Z_\u0082\u0081A\u00FE_\x157\u00EE\x05\u00B9\x01ji\u00D5]\u00C4K\u00A9\u0099ps\u00F9\x1E\u00B2p\x14\u00C6\u00C8\x0F\u00CEt<\u0091I\u00AA\u00CA\x00\u008F\u00F8K5\u0083\u00F5\x12\u00C9\"\u00FC\u0097\u0088S\u0097\u00F2\u00FCA\x17\u0093\b\u00C5\u009E\x04\x16\x11n\\\u00EE\u00C5\u00AFO\u00AA\u00AA\u00EE5!\u00CA@\u00FE6! \u00F5s|\u00F1\u0092\"\nl\u00CF\u00CB\u00C9A\u00EA8y.k\fT\t\u00CC\x11\u008E\x10\f&\u00CDc+xx?V\u0090\x154hv\u0092\x10359\u00DE\x01;\u00A4\u00BB\u00F8\u00F5A\u0098\u009C\u00A7\x01,r\"Er[\u00A1\u009B\u00AA\n ?\u00C7\u00FC\u00F3\u0098\x14T\u00E2\u00FDO\u00EA\x19\u00F8\u00F3\u00D1\u009B\u00A4\u00D9\u00C7\x04Y\u00F0;]\u0090q\u00E3D\x7F\u00C9|\u00C6@\x01Y\u00AF\u00A1\u00A2\x14\u00C5\u0084\u00F1P\u008DTE\x1B;\u00DAG/?,Ch\u0087\u00FA\u00F1\x1A\u00BD\u00FE\u00A1\x1F\x1A.}L\u008F\u009B\x1C\x1B\u0096 \u00A8nE\u00FF<\t\u00D6\u00A0\u0091h\n\u00B3Eh\x12\u00B4R\u00EA7\x03\u00D8\u00AF\u0082\u00ED>`\u00A1V\u009Bq\x01\u00DF\u00E8E\u008Dq\u00A8\n\x16RB\u009A\u00DDE\u00B9\u0084y\x15\x16\u00C2\u00D8\x03\x0Fe\u0096\u0086\u00A50\u00F4\u00D9\u00A2!\u0097:\u00F3$)\u00BAH[\u00B8}\x00\r\u00C4A\x06\u00C6d\u009F\u00F8\u008E\x06\u00AB\u00C1\u00C0Me2\u00CC\u00B9BCF\u00C9\u00E5\u00C6-\u0096\u00AA\x1D\u00B1\u008E%\u00ECX\u00A4\u0095\u0099\u00F1F\u009F\u00B94d\u00D9u\x0F\u00BE\u00F2MP\x04Y\u008A\u00CDB\u00A5g\u00906\u00C45\u0093\u00C4%\u008F\u008B\u00C8$##\u00CCI\rB\u008E=\u00DE\r\u00AB@\re\x0EL\u0085\u008A\u00E7\u00AD*a\u009C\u0097HP\u00B50! %\u00A7r>\u00B9\\\u008C\tN\x0B\u009B\x165\n\u00E2\u00F3\u009Eu\x18i\u0093\u00D1\u0080\u00DF-\u00FE\x15w%KOi\u00AE\x11\u00B1\u00C9\u00A45^\u0087\u00BCg\u008Dw\u00F0\u00B9\u00B3\rar\u00C5\u00C7\u00F9\u00BA\u00F2\u00D6\u00D8/\u00F2x\u0084\u00B2\u00ABL\u00E9\x02b\u00B6\x19gJ\u00E1\x1C\u00F1Ml\u00F5\u00EA\u008F>F\u00AF|\u00EFCq\u0088vH\u0084\u00F0\u00FE\u00AD\u00CB\u009E\u00FA\u00A1\u00E1\u00FD\u00A2my\f\u00D1A\u00F1\x1C\u00AC,\u00AA\u0086\x06\x15\"\u0083\u00BA\u00E8\x10\u00E7\u00E4\u00AEH\r\u00FB\u00C5\\\u00913X|\u00C2L\x1B\u00E6\u00F0\u009D\u00A4=\x18H`Kq\tF X\x12\x12\u00F3\x17\u008C\u00B9\u00A4\u008C\x1E}<FF\u00A6\u008E\f\u00B5\u00A0\tG,\b\u0082Q\x0F\u00BD\rP')o\u00A8\\t\u0091\u00E8\u009F\u00FF\u0083H\u00EE\f]\x02\u0095\b\u008D\u00CD\u00B6$h\u00AD\u0081U\u0094\u00F9TF4\u00D58\u00D5\u00F2\u00C6\u00FC\u00B7\u00B3\u0090\u0089\u008F:\u00F2\u00ED\x05\u00A5.\x1A\u00A0c\u00A8\x1D\u0099.\u00DDL\x15PK\u00CEQt\u00CB^,\u00E89z\x10xucJ\u00E9\"\u00CD\u00A9\u00D2(\u00D0\x18\u00B4#\x007aM\u00D5\u0087L\u00DF\u00CEQ\u00ED\u0089\u00CD\u009A\u008D\u00B7\u00EE:\r4\u00D7\u00E1}N\u0094\x03+h\x01\x05)9Q**J\u00E0q\u00A2\x01DH\u0085\u00C6\u0088\u00B0B\u0094\u00AD\\#\u0098n\x01\u00E7\u00CFD\x06S\u00DD\u00AD\u0081.\u0088,r\x0E%\u00D4\u00E5\x11\u00B9[H\u0099O\u009B\u00C5\x12I\u00D9,\u00D6\x02\u00B5\t\u00D6\u00AE\u00FB\u0082\u00EC\u00F9\u009F\u00E7?\x15\u00C0\x7F\u00C7J;$Cxk\x7F\u00FBS\u00B6\u00E6\x07\u008F!3 \u00F4\u00F3\u00D4^\x12~$xP\u008A\u0090a\u00AC\u00A0\x04\u00F7\u00CBW\u008Ey+\x14'H\u00C7\u00BA\u00D2\u00F9d5\x17\x15\u0088JC\u00AA&)c\u00C7\u00C7P%l'gi\fF\u00F2\u0080\"\u00C9\u00F0d\u00D6C`\u00BA\u00F3\u00E8\u008Ce\x04\x00\u00E1\x1E\r\u00F4Z\u00D83f\u00D5&\u0080L\u0084\u009E\b\u00EA\u0085M&\u00EC\x05N%\u00C8\x04\u0097l\x1Dno\u0090\u00B2\x10\u00FD^\\\u00B8\u0091\u00E8T\x16\u009B\u00D9!\u00D4\b\x14(\u0090;.B\x12\x10\x10*G\u00FC\u00EE\u008C\u0085\u00CCj\x02Y\u00B5tT\u0089\u00A2\u00EA\u00D6\x0E\u00DB'>w\u00EF/\u008Cg<\u00B7\u009E#\u00C6\u00A4xn0\u0097\u00D1\u00CF*\u00F7v\x0FCT7V\u00C4oY^\x0E\u00D1w\u00A3\u00F1N\u0081Iy6\u0091\x12\u00C4\u00A4\u00E6\x1A\u00F6\u00D4\u00B7\u00BCW\u00CE\u00F7\u00C4\u0086\x10\u00DE\x0E\u0081j\u00DDQJP\x19\u0081\u00D0u\u00CC\u00F9\u00E2\u0098{QM\u00B49\n\x00&5\x19BUi\u00C1\u0084\u00AA%\t\u00DA1W\u00C5\u00F2\u008A\x0F>\x05\u0087`\b;T\u0086\u00EBu\u00CF\u0089\x1F\u0097\u008F>\u00A1\u00B7#\u00AA\u00CDx'6\u00BE\u00F8\x1606e8\x00pwf\u00FA\u00FE\u008B\u00B4\x04w0\x02\u00A6j\u0086\u00A1\u008D\u00BD*\u00D8'\x03\x0E\u00C8\u0080M\x01\u00B6\u00A0\x18;0v\u00C1B\u00ADL\u00BB\x11\u00B7\x0B\x01\x11\u00DF!\u00DA\u00D2\u00A8\u00BB\u00C34F3\u009A\u00CF\u00BF\u00B9\u00CAQ\u00BE\u00D3.\u00A04P\u00DA\u00A6.\u00DD\u00EB p\x03\u0099t5f\u00F6\x1F\u00F7\u0098P(zx\x1D\u00CA_0:>\u00A63&\u00F1\x04*i\u00E6\x16\u0094f\x06\u00B5\u00C6\u00D0*GU~N\x17Af;\u00BA\u00B7#j\txt%\u00B8\u00AFd\u00E6\u00F8\u0087\u009A#T\t\u00CAq\u00AA.m\u0080xv\u00A41\u00F4\u0096\u00EF\u00D1\u00C7FH\x0E(\x10\u00AACaR\u00C1\u00D0\u008A\u00AA ^\u0086\u00DD\u00E1\x15\u008D\u00C1\u00B6#t\u0081\u00CD\u00C5\u00B5Ji\u00A9\u0091.\u00EC}\u0093=\u00F6Da\x02\u0098\u00C14\u00F4~7\u00D6\u00F9|\u00D3\x13\x05\u0087~\u00A9\u00A6\u00B1\u00BE\u0082\u00A2\x06k\u00E5\u00C6\u00ADpDAAW\x18\u009B?\u008B\r\u00B3\u00AC\u00E5b\x06I\u00A3\u00ADf2Y\u00D7\x12z\u00CE\u00E3\u00E2\u00D1\u0093\x151#\u00F9g\u00ED\u00F3\u00BA\u00CF?A\u00BF\u00F0\u00F1\x13\u00B1\u00D2v \u0084\u00CB\u00F5\u00D3O\u00FA\x00\u00DE\u00BB~\u00CC\u00D1\u0081\u00EBsf\f\x02rQ &\u00B1\u00EA\u0082)u\u00EAb\u00B3\u00F3\x18SpP\x047\u00A9\x15g\u009D\t0\x13\u00AB\u008C\u00C4x\x01\u00C0\u00F6\u008B\x14\x01\x18\u00A3\u00D8`\u00F6\x03\u0086\u00D6r\u00A9\u00D9\u00F6b\u0099\u00B3\u0090\u00A8@\x10\u008BQh=f\u00F2\u008D\u00A2a\u00C0\u00A8\u008C\u00844\u00CE?\u0082\u00BA\u00B7\x19\x11\u00AD\u00D2\u0092\u00E5G0\u00C6\u00813\u00C0\bE\u00A2\u0084L\x00\u00F2\u0081\u00C3\t&\u0082\u0099\u0098\x1D\u008A \b\x03\x0E\x1E;Q|\u00F21cQ\u00FD\x18\u00C8\u0083\u009Ak\u0098\u0096f\u00F1\u00DF\u0095\u00F7\u00F6]\u00A2\u00E0\u0086<\u00BE\u00AB\u00A8oP\u00DF[\x05\u00DBD\x0F<w,\u00E7M\u00C3\u00B8\x12\x1DQ\u00ADa_c>{\x18\u00F7xOw/JJ\u00CB\u0098\u009B\u008A\u00C9\u00B5\u008E\u008B\u0086\u00C7\u00D2\u008F\u00C3\u00EF\u00A9\u0085\u00BF0\"~\u00A6D\u00AFT\u00C8\u0089\u00F7\u00ECE\x06\u00A9\u00D9\x14\u00B6\u008C\u00AA\u00D4\u00B2\u00D9M \u00AE\x1CN\u00AE\u00EC\u0082|\u0094/\u00B5E\x1F\u00C1l&\u00C75\u009EE\u00AF\u00FE\u00C4\u00FA\u00D6\u00DB\u00DE\u00F8$\x00o@i;\x18\u00C2\u0085\u009Bo\u00FD\u00FE\u009B7n\u00C2\u00A0\r\u00E3]\u00B4g\u00E3\u00ED6ui\u00E00\u00DE\x16\t\u00E3\x10l\"\n\bBr|\x0F\u008D]\u00F9\r>\u00F9#\x04\u00FBD\u00B0\x07\x16\u00CE<\u0087{\x1F\x14\u00BEAl\x1A\x1A\u00B7\x0B\u0083\u00E8jD\u00CA\u00A4\u00A7\u00E0\u00C8(\u00DE\rg\x02\u0099\u00F3`)\u00CE,\u009C\u00D2\u00C5\x7F\u00F7B-\u00AA-<\x14D<\u00BC\u008E\u00EEM\x16de<\x03\u00C3\u009E\u00E1\u00E7X \x14\u00A1v\u00DA/\u008Cp\u00D3hF\u008B8\x19YX\u009D\u00A1\u00E9%\u00D1:gH\u00CB}e\b\x10\u00C0c\u00E7\u0095:.\u0095i0\u00A8\u00AA\x07dV?\x1Fp/M,b }3F\x1A\u0091\u00BC\u00B4\u00CA\x00\u00F89\x18\u0097\x07(\u0085NNX]\u00C0n\u00C0e\x12%R\u0090\u0094J\u00CEq@K\u00B2UxH\u00FCZ\u00E3\x00\u00E5\u0092U\u00C3\b\u009B\u00CF;\u0098R\u00BDb\x7F\u0098\u00CC\u00AF3\u00F3`\x18\x1C+\u0092\u0080s\u00C0E\u00C2\u00F37\u00CEe\u00B9\u008FGv\n4\u00DFq\\\u00A7\u00F9\u00DD\u00EF\u00B11.\u00B0\u00EF\u00E2\u00F7}\x1Fn\u008F!\\\u00D5>\u00FA\u00BD\u0090\x05\u00D2\u00A2y76Up\u00E7\u009B\u00A6^\fClkv\u0080\u00D0\u0089\u00E8\u00A10\x035\b\u009B\u00CC\u0080\x05V\x1D1\u00805\r\u00CC\u0092\u00FDE\u00ED\u0098K\u00C3\x1C\u00DD\\\u0090hh\x1Eq8hn\u009BjD\u00ED\u0089NJw\u00A3\u0085/\x13\x15\u00C4\x06\u00AA\u0090\u00D8\u00A2\u009ED\u00DB0x\u00A4b\u00B8\u0088\u00C1\u00ADAX\u00B9\u00B9C#\u00E6\u0080\u009E\x06\u00CA\u00B14\x13\u0099\x04\u00B1\u00BB\rf`t&\u00C0 *\u0085\u00D7=\bfe\u0086\u00BD\u00E6?q\u0091\u008B\u0087,\u00B3\u009Aql\x0B\x07\u009D\u00D2\u00E0\u00AA\x0F^\u00C4\u00E2\x14\\\u008F\u008D:\x01\x00\u0098\x04\u00D5\u0088^\u00D0\x1C\u00D2\u00F2\t`\u00EF\u008D\x0BS\u0080\u0088\u00E0\x10\u00C0\u00AA\x1F\u00F9Vq$l\u00D2\u0082.!\u009E\u00A4\u00C5\u00ED\u00CB\u00C8PRS\u00AF\u0084\u00E6\u00918\u00EAv'I\x17]\x18J\x0B\u0086\u00E6\u009E\x1BtcN\x10\u0087x\x1A\u00B6\u00F9\u0088\u00D3\u00F6@q=r\r\u0092y\u00F0\u00F9\u0097\u00F6\u00AC4\u00A0\u00F6\u00CA\u0084$\u009F/~\u00CE=\x1E\x04j\u00A5\u00F1T2i\u00CD\x14I\x0B\u00C4\u00EA\u00D6\u00AF\u00F6\x16\x15\u00AF\u00C3\u00FE`\u00D5t\u008A7Y\u00C0\x04,u\u0084\u00D7F\u00F1\u00F7\u00DC\u00D1\u00AE\u00BB\u00E6\u009F`\u00A5M\x18\u00C2g\u00F5\x0B\x0F\u00FB\u00C1\u00CD\u00FF\u00FD\u008Cx\u0089\u00C7\u00A4\u0091\u00E0\u0087 b\u00E3\u0084\u0083?(\u00D3\u0080\x0BD\x02\u00BF\u00A7\u0084\x03\x10\u00D2;\u00FD\u00F469[\"\u00D8\u0083\u008E\r\f^\u0098\x04`Y\u00B1&\u00D5^\u00A1h\u00A2Pt_\u0087\\\u0084\u00B5w.\"c^)\u008F\x19\u00FC\u00E4\x05Q\u00A4\u0085\u00DCqYm\u00D7\u00BA\u00EA0\u0082\u0092\u0094s/\u0091\u0084\u00D5\u00D1|\u00D3\u00D9L\u00D1\u0099\u00F8\u00C1\u00E1\u00EAIC\u00EA\u00BC\x13)\u0083$T\u00F7\x00d`\u0091f)7\u00E3\x14\u00B6\u00A8\u009C<\u00C4\x17\x12{\u00CB\u00D8d1\u00EFB\u00CF\u00F9\u00A8\u00FF\n\u00D3\u0082I@~M\u00C6\fp\u00F85B\x11\u0087\x18;+W\u00F7\u00A2\x1E\u00D5V%&\u00FB\t|\x12\u00F3c\u00EF\u009E^\u0086:^)\u00BF\u00D5.I\u0094TCh\u00FC#\x04/\u008C+\u00F6e\u00A8\f\x02\x05Y\x1C\u008A\u009A$\u00EEa\u00CC\u0093\f\u00B3\x04Eiy\x1E\u00AAAPLj8h\u00C3\u00B4\u00FC\u00DA\u008A\u00A1\x12H\u00E4S\u008C\u00CC\u00ADw\u00CC>\u00FD\u00E93\u00F4\u00A3\x1Fx\u0098\u009C\u00F9\u00C8k8\u00AA\tC\u00B8b\u00F9\u0089'^9\u00BB\u00FC\x182\u0083\x06\u00F3,x\u00C9\u00B0\t\u00C1\u00D7i\u009DB\u00AF\u00E9wJ\u00C8zM\x1Ecb\u00D2>4\u00DF\u00F8m\u00865\u00D5\u00D8\x12n\x11\u008ED\u00F3,4'\u00CA\u009A|D\u0092\u00A4'\u00A11\u00E6\x00@W#~2\x06\x120\u0097iw\t9e`F\u00ACV\u00C9\u0099\u00B5\u008F2Yetd\u0090\u0091\u0092\u00E6a3?x\u00E9\u008B\u00A1\u00D5A\u00C3+\u00C6\u00A50\u008A\x11-\x18\u00B3\u00A3\u00D1\u00AA7w\x1DR\u00DA\u00C75(\x0B{*a\x11Q\u0093\\t+\u00EF\u00D3\u00BB\bD\u00A2\u00F5\u0098\u0096\u0085[\u00FB>\x04Q\u0093(+\u0093\x03\x10\u00B5\x0B\u00AB\x00\u00D6\x12\u00EB\u00CF\u0083\u00F4(D\u00DFTE\x10\u00F9\x1Fe\u00A2\u00CA\u00B9\u00E9\u00DAS\u00E6!T\u00E3e\x04\x12\u00F1>u-\u00E6\u00D4\u00C9\u00EA\u00B8\u00E3\x1C\u00FD\u00FF\u0089{\u00B7^\u00DB\u00B2\u00E3<\u00EC\u00AB1\u00E7\u00DE\u00E7\u009C\u00BE\u00F2*6E\u009ATD5E\u00C5V\b\u00EB\x02:1\x1D\u00CB@\"8\u0092\x03%A\x12+\x01b\x04A\x00\u00FF\u0080<\u00E5=\u0081\x1F\x14 \u0080\u00DFb\u00C0\x0E\u0090\u00F8\u00C1\u0090^L#\x12\x02\u00CB\u0092%@\u0092\x05\u00CA\u00B2@\u008B&e\u00D1\u00A1\u00A9\u00B6D5\u00D9d\u00F3\u00D6\u0097s\u00CE^sT\x1E\u00EA\u00FB\u00AAj\u00CC\u00BD\u009Bl\u00C1\u00BA\u00AC\u00EEu\u00D6\u00DAs\u00CD9\u00E6\x18c\u008E\u00AA\u00FA\u00EA:\x1AZ\u00A8u\u00D3\u00EF\u00EF\u00B29\u0088\u00F0\u00DB\u00DC:=\fr\u00B3\u00F6\u00A2\u00AB*>\u0083d\x18\u00FD\u00F6\u0086\u00ED\u00E5/\u00E0k?\u00F3\u0093?\x04\u00E0\u00FF\u00D2\u00E1\u0085!\u00FC\u00C2\u00CD\u00CF\u00FF\u00C5\u009B\u00FB\u00AF\u00E1O\u00EC\u0095\u00FE\u00F3^\u00B8\u009C\u00E4\u00A4\x00\u008E\x1CT,\u00A4\u00DA\u00E0\x13-\u00D0\u00A5$\u008E\u00A9-\u00B7<\u00D7\x11\u00EE\u00C3\u00AF\u00BB\u00E3I\u00F3,\u009A\u00B2a\u00C3\x05\u00B1\u00ED\u00D7cJ\u00DD*\u00B0*\u00A3\u00DF`\u00AB\u0083\u00E9\u00CA\f\x7F\u0096\u00A1P\u00D26U\u0080-\u009FwH\u00FA\u008A\\<\u00F2\u00CC\u00AA\u00B1X\t\u00B2\u0081\u0084\u00C2\u00F0\x17\u00C1Q\u00A5npd\x06\u00A4;\x0B\u0096\u00B6\u0084\u00A0{/\u00A9\u00E5c\u00A5#\u00931-\u00DA\u00AE\u009CF\u00E9\u00C1*)\u00D6\u009E\r\x17\u00AE\u00A0'\u00CCs[2\u009E\u0080Jr\u00C2\u0089\x18\u00A5\x1C\x11\u00F6fX\u00F7\u00A0JO\x1B\x01\u008B78\u009D\u00BBz\u00CCI\u00C0mw\u00EB5:\u00D0\u00D9n\u00D93\x14\u00F7Q\u008C@s\u00A5\x10f\u0084\u00E0\x11\u00F7t\u00A1+\x05\x18X\u008D\t\u009D\u00BDw\u009B\x06\x0B\u009F\x0E\x00\x07%\u00F5l\f\x03\u00D1'\u00F3\x1E\x14\u00C5y\u00F4\u00AE\u00947\u00CE1\u00F9\u00BC\u00BCv\u00D3\u008A{7\x17hhX\u00C9\x002\u00D5\"\x19\u00A3\x10\u009E\u00AF\u00E8!\u00D5\n\x07&\u00B0\u00CF\u0089\u00FD\u0093\u009F\u00FE\u008Bx#\u0086\u00F09{\u00E9\u00A3\x07zG\u00FF\u00B8_\x03\u00EB\u00AE\u00BDUG \t;\u00A5\x7FI\u00D6\u00EE\u00AE\u00A97\u0090aD^@_\u00D7\u008Eix4\u0080\u0097\u00DC\u00C3\u0086\x000\u00AE\x00\u00D8\u00DC#\x12\x11*\u0093\x16\u00F1\u00F9\x13\x1E\u00AED\u00AB\u00D2i\x07\u00E2\u00FA\u0083\u00EBj\u0098\x12\u009Dr[SXJwp\u00A9g\u0089\x16DmGY\x01\u00C2 T\x1B\u00CEV\u0088\u00B3l\x16\u00950\u00C5\u00D2ln9\u00CE\u00B4\u00FEC\u008CA\u0088i,\u008B\x05\u00C9H\x10-\u00E5z\u008C\\\b\x11I\u00AE\u0083D\x07]\x14#\u0088\u00DA.1\u00BF\u008C\x7F\u00D0B\x0F\u00E2G#\u00AC\u00B6\u00AAD\u00C8\x16*A\x1C;?\u00D7\u008E(\u00C4\u00CDJ\u00FDK\u00F5&\u00D5\u0091\x16\u00A4\u00E3\u0086\u00C5\u00D2\u00AE\u00B5\u00D5\u0099\x14\u00DB\u008C\x023rm\u0093\u00D0\u009B\x07\u00A1\x03\u008F\u00EA\x7F\x19\x1Cm1\x1E\nI\u00E8J#\u0081w&\u00D1Q\u0087\u00B5{\u00F5;\u00E9\u009C\u0086j\\;II\u00ED\u00A9\u00B0\x00\u00AD\u0087\u00A5\u008DTi\u00BA\u00D7\u00C2k\u00F8\u00D3\u0082\u00A9|\u00F1\u00C5\u008F\u00F6\u00A1%&\u00FF\u00DA|\u00F5\x1D\u009F\x1B\u009Fz\u00BE\u00FC\u00F8\x7F\u00DC\u00AFB\x07\u00F1\u008E\u00A0\u00A4[*\x01\u00CF\u00AD\u00CFB\x03\u00BD\u00AD\u0080\u008D\x15\x11x~\x05\u00DA\x0EW\u00E4\u00D71\u00F0\u009A\u00EDx\u00E4\u0086G\u0088J\u00CD7\x0E\\(\u00AB.\x16\x01J\x17\u00C6*\x1C\u0088\u00B0\u00E5xo\u00B8Al/\u00DF\u0093\u009D\x0E\"\u0080x\u00EBX1\x11\u00C5\u009A\x1D\u0098\u00BC.v\u00A9\u008E}#\u0090^\x06\u00B93\x0F\u00AF\u00EBj\u00D7\u00A9\u0088-P\u00C5\u00E5x\u00CE\u008Dq\u009A\u0085\u00CD@s\u00AA8\x03#\u00A3\u00D5\u00DF\u0083\u009F\fWVT\u00E4\u00F2V[ryj\u00F1\u00DB\x0E_\u00FC\u00F1#\u00ECzz.C\u00EA\x1F\u0090\u00D9{\u00EA\x1B\x14\u00B6\u00CB6\u00B9`U\u00C9\u00CA\x19Ay\u00FB!\u00B6>\x01\u0090\x01\u00B1b6\x001\u00BA\b1n\u00EB(\u00C3}G;fi|C\u009F;\u00FD\u0086\u0090\u00E8\u00BDL}_g\u00C8$\u00ADF\u00F8\u00F2\u00F2\u00F4k\x14f\u00CC\u00FE'\u009F\u00D5gB|\u00B5\u0081BD4l\u00D6\u00AB\u00D90Z?S\x006&\x14\u00CC 6\u00DBq\u00AAO9\u009E\x17_|\u00DE\u00FF\u00D5\u00AF\u00BFC\u00AD&B\u00F8\u00B8}\u00F6\u00CF\u00FD\u00D6\u00FC\u00B4\u00C1\u00FE\u00A4\x02\u0092\u00A2|I1\x05@\u008B\u00C0\u00F3\u00BB\x1E8\x07\u00DA\u0085N\x0B\u00D81J\u00CB5\x07@\u00EF*\u0098\x1Ar\u00CC\u00F1U\x00\u00F7\u00A6c\x1B\u00B1I\u00EC\u00EE\u00AC\u00A3\u00C0H\u00C1\r!E6T\u00AC\u00C1\u00C0\u00A0\x07b\u00E3.Q(\u0082 \u00E2P\u0090\u0093\x1EK\x14M\u00A9\x07w\u0085\nb\u00BA``\u00E3\x18\u00D4~\u00EE3\t\u00ED\u00E1P5\x15\x00\u0085k)@K#\u00D7Bi\u00D2\u00B2Gmv]\u00D24\u00BB\u009C\u00B7\u00F4U\u0083\u00F7j\u00B3o\r\u00E66\u009F\u00F9j\u008B\u0088\u00A6,\u00A1=c\u00FC\x01\x06,90\u008F`>)\u00C1%\u00C1\x06\u00BB7\u00B9\u00CB\u00DA@l\x0Bg\u00C8\u009D\u009E\u00A8\u00AFgr\u00D4t\x12/J\"\u00C2q\u00CE?\u008D\u00B1\x15a\u00BA\u00EA\u00CA\x11B;\u00A1w\x15ia\u00D7Dd9g\x16v\u0084\x05o\u00A6u\u00E8\u008E\u00F8\x042@?\b\u00ED=\x04\u00D5\u00AD\u00E2\u00AB\u00CD\x0B\u00E1=Q\u008B\u00EA\u00C0\u00ECc\u00D15\u0097\u0094\u00F4\u00B9\u008B8\u0091Dz`\u00BA\u00BB\u00D1\u00DB\u00E3NDh\x18/}\u00C1\x1E\u00FD\u00FC?\u00FAs\x00\u00FE\x1F\u00A01\u0084\x7F\u00FE\u00E8\u009F\u00FC\u00E0\u00D7\u00EF\u00BDae\u00A5?\u00E2\u0097\x16eS\x17\u00806ae\u00F3\u0086o\u0094H\u008Al\u00B3\u00C6\f\u00EA\u00FC7\u00FF\u008E<\u0084/Z\x04)_aFz4{f^E\u00D6v'\x02\u00B0\u0088O\u0088\u00A5\u00E7\u0084\u00FB[\u00EC\u00F0d\u00D1\x03\u00ED\u00F3\u00AB\u00D8\u0082\u00D5\u00D5\x18\u008B\u00EF\u00E0&\u00B4\x07\u00C7\x11*\u00CBF\x15O\u0089Ib\u008A}?\u0083x\u0098!P\x14\x04\u00A3\u0099\u00ECsUR1\u00D5fI\x1E\u00A0\b\u00A9UN.\u0097{ \b\x11t\u00FC|R\x19\u00B4\u00F0\x10\u00C5>XG\x19J\u008ENv\u009E\u00CA0\u0099\u0093\x03k\x1E\u00836\u008E\x19dJ\"\u00AA\r\u0081k\u00AD5#)Z\u00AB<\u00F8X\u0093\u00BC^\u00B3\x10]\u00E0\u008C\u00E8\u0092D\b\u0092\u0096\u00D9H\u00B47\u00EB\u00DC\u0094\u00D4yO\u00F5`\u00B6\u00F6\u0089h\u00D3C\u00D0\u00D5\x1D}\u00F7;l\f\x03\u0085\nd\u00B4\u00CC\x07\u0089\x1E\u00C8\u0094\u00E7&\u0081\u00B7k\u00F5\u00AC;\u00A3\u00F6\u0081,\\\u00DBJ\u00CF\u00F5\u0097\x01\u00B8w\u00B9\u00E0\u00CB\u009F\u00FA\u00E4\x0F\u00E2\x16C\u00B8\u00F9\u009D\x1F\u00C0\u00F5\u009FP \x12\ts%f\u00A0\u00A0n{(\x0B\u00E1\u00F7\u00D78]\x7Fn\u00AB\u00D3\u00C1\u008A6\u00DC\f\u008Fp\x0F/;p\u00C5\u00E8E\u00B3H\u00BE~\u00DC\u0096x\u00B46K\u00EAzd\u00DBE\u00CEC\u00DCJ\u00E8c\u00A0\x1B\tU\u00E19z\u0093\u00DF[.\u0084\u00BA9\u00E0\x11\x19\u009981\u00FAY\u008A\\\u0090\u00DA\u00C6\u00B3{]FS%\u00EA\u00A9\u00FD\rF\x0E\u00DA\u00BC\u00E6Bkd\u00B8\u0095\u00A1\u00AE\u0095G7\u0080\u00BEk\x00C\u0090\x13\u00B0\u00D12\u00FB\u00E0\u00B0a\x19>k\x18\u0098\u00D4\u00E9\x1D\u0091\x04\u00E5\u0083\u00D2\u00CE\u0082\u00C8\u00E7\u009C\x19\u0093\u009F\u0088\u009C\x022\u00E0\u00BD\x10\u00CA\u00A8\u0085\u009FO\u00CE\u00B1\u00DA\x01,\x17\u00BD\u00B9a\u00FAAb\u0092~/\x0E\u00A2ur\u00D2\u00F5s=9\x0B\u00D7\u00D0;C\u00F5!\x18\b\r\u0082\x1A\u0082m\u00E9\u00FAt\u00868\u00CB\u00BA\u00EFS\u00F1\n\u0088\u00FB\x1E\u0081`l\"7\u00EF\x1D\u00B0@\x0B\x1CG\u00DAc'\u00DA\u00EA\u00908\u00C9\u00C5\x1A\u008F\u00E7\u00F0\x005'\x03\u00A2\u00C2\u00AC\u00DDQ\u00FBo\u00A4\u00C1\u00D5\u00D8\x1Fk\u00E7\u0098,\u00DC\tL\u009E\u00F8\u00D7\u009F\u00FD\x01\u00DD.\x19\u00C2W\u00AE_\u00F8>7e7\x16\x11\u00FD\u00D1\u00BE\b\u00A9\u00B0\x01\u00B8\u008FH6:\x13<\u00FF\u00EE\u00BA\u00B1\u008C\u008D~\u009B\u00E8MF\u00B4s\x1B\u00E7\x1C\u0080\u00BC?-\u00B5\x06\u00BC\u0086\r_\u0081\u00E1\u00BEE\u00DD\x04\u00ED\x13\x14F\u00C3\u00C8\u00D6?\u00BCX\u008D\u008C\u0086\u00B1wdH7\x19\x15o\u00C8\u00E4\x14\u0087\u00A0\u00FEt\u00AFB\u00A6\u00E8\u0082Q\u0088\u00A88\u00BDH\u0085\x0E\u00AF\u0084\u00E4pW!\u009C\u008C\u00CC]\u00E5\u00DDc\u009C\\\u00E2\bT\u00A7@\u008A\x04\x00\x00 \x00IDAT\u00C5\u00DF\u00C8\u00BC\u00CAR\x0E\u0098\u0095A-\u00E6\u0087\u0090\\sfB\x04E\u0098\u00AE2iMj\u00E7K\x014\u008E\u008Cp\\\x11E\u0087\u00F4Hi&tcy\u00E1@\u00ED\u00A9\x10\u00CF\u00D8\x16\u00C9[\u00CC\u00DEM\u0086\u00CB\x16U\u0099\u00AE\u00CF2\u00FC%\u0093I\u00DF\u00BD\u00C6eK4\u00A6\u00DD)}i\u00DA\u00F5\u0089\u00AA=\u0080ZK\x1Ak[S\u0096\x15\u0099t\x02\x11\u0080DA\u0081\u009B\u00BA\u00D72\u00CE\u00D6\u00B6\u00B71%\u00D3\f\x06\u009B\u00EB\u00CA\u00DB\u00F8rA\t\u0089\u008Cv\u00BD\x15(\u00CB>O\x1C\u00AF\u00BE\u00FE}\u00D5{\x00\u009F\u00F3\x17\u00DE\u00F5{\u00F3w\u009E\u00FB\u00E3-\u00B5\u00BE\x01\u00FE\x00\u00C3\u009F\u0086\u00F9\u00D3\x00\u00EE\u00C3\u00F1\x00\u00F0\x07\u0080\u00DF\x03\u00FC\n\u00C0\u008E\u009E?\x7F\u00CB\u00AF\x0E\u00E0\u008C\x18j\u00F1\u00B7W\u00B3\u00C4\u00AF\f\u00A4?\u00B4\u00A8B\u00FC\r\x07\u00BE\u00E2\u0086G\u00BE\u00E3\u00B1ox\u00E8\x1B\x1E\u00FB\u008E\u00C7\u00D8\u00F1\bWxl;nl\u00E4\u00FB\u0082\u0081\x1B\x03n\fx\u00CC\u00BF\u00C3\x18H\x15\x02R\x17D\u00C8\x15\u0096\u00AC2\u00ED\x077\u009F\t\u00B5\u0083oh\u00A7i\u00C5\u00B0\u00A9\u00DEc\u00B0\u00A8If\x13F\u00C60\n.IDRXZ\u00A8\u00B5\x18\u0089I\x1D\x11\u00E3L\u00D5\u008CjX\x1A\x0E\x17VKU\u00AD\u00BBV\u00DB|\x12%X\x12Z\x19\u00EEn\u00D9r\u00DA\u00F4\u00C7\u00B3Q\u0082\u0094-\u00A7\x14hQ\x1F\u00D9\u008Fdt]\u00A0\u0088)\u00CE$\x00\u00CD\u00F7*\x10\x1A\u00D1\u00E7\u00F76\x07\u00D2\u00C7\u00BB\r&\tJ\u00EB\u0085B\u00C99\x1F\u00DEB\u00E0\f\u00D5\u00EE\u00C2\u00A6\x151hK$\u00A2\x1C\u00CF+\u0083U\u00BF\u00C44\u00E2\u009Fr\u0082\u00AA\u00D5Q\u00FD\u00F0& [\u009F\u00A5\":\u0099\u0081/\u00F7\u0089\u0095\u00B9\x7F\u00E1\u00F3\u00CF\u00F9\u00EF\u00FC\u00E6\u00BB\x00\"\u0084\u0087\u00B0\u00EF\u00FD\u00ED\u00F1/\u00D1\u00CE\u00FC#zQ\"c\x0B\u00E2\u00B7k\u00A8(H\u00EE\u00E3\u0097\u00BB2\r.\u00E2^$\u00A5G\x11\x02\u0099}\u00D6\u008F\u00A1\u00AD\u009D;_Z\x18*\u00CB\u00D5$\x0E\u00C2{\u00F0\u00B2\x03O\x00\u00D8|`\u00B3\u0089G\u0092\u00B2\by\u00D1\x1F\u00B4\x02\u009D6\u008FH\u00D6\x1B(\u00847\u00D0x\u009C!5\"\u00DE\u008A?\u0088\u00AC\u00CAZ\x10[\u00BB\u008F\u00BC\x0B\x002\x19*\u00AA@\u00D7\u00EB\u00E0\x1C\x1D}n=T\x07\x10\u00F5\u00C0\u009C\u00D2b\u00A3\u00E6\u00D5\x12\u00AE\\\u00BBJ\u0099\u00A2}\u00A1-\u00E7\u00AA\u0090\u0091\u00E5\u00BC\u00C6\u009C\u008F\u0092\u00AAF\u00FD\u009B\u00D5\u0099cj\u0084H8\u00B7Q\u00C6y\u00F1\u00AFG T\u00E8\t\x11\u008E;\u0097\u00A5\u00E7Z\u00C8w2\x7FO\x02\u009Es\u00B6\u00E71\x1A\x11\x11s\u00B9\u00B2\x1CWC]Iw\u00AD)\u0086P\u00BB\u00A3\u00D4S\"\u00A4\u00CC\x00=\u00EA\u00BAY\u00D1\u0096\u00B5U\u00DE\u0089v\u00C8@\u00B4\u00A5\x1A\x1C-\u00E6\u00A3\u00ADC\u0097*@&1i\u00B8\u0094\u00BDb\u00DA\x1Dm7u@1\u00F1\u009Da-\u00A7\x13\u00E5P\u00BD\u00F0\u00D9\u00F7y\u0088\u00F3\u00B7\u0097^\u00C2+?\u00FF\x0B\u00DF\x0B\u00E0\x0B;\x00\u00FC\u00C2k\u00BF\u00F9g^\u00BB\u00FAFM\u00F8\x1F\u00EAK\u00D0kC\u0096Q\u00C7\x15\f\x0F\u00E0\u00B8\u00E2X\u00E3\u00D8`\x1A\u00EE\\\u00D4\u0081\u00BD]_AG\u00EE\u0092b\u00FD\u00DD\f\u0092}\u00E2\u00AD,\x00+B\u00E8RC\u00B6\u008A\u0081G\x06|\x15\x07\u00AE1\u00B01\x1FrO\u00B7\u00DFl[\u00C7\x07A\x1D\u00EE\u00B8 \x16\u00C9D\u00B8\b\x07\u0099\u008B\u0081y\x10$p[\\z\u00C0\x15\u009Ca\u00CBA\x02e#\x0E\u0089\u00A2\u00FA\u008AR)\x0E\u0084\u00F4\u009D)\u00917\x14\x18\u008Ex\u00C6\u0090\u00D6X$_n\x06K\u00A3\u009DBr\u00E5\u00E2\u00CB\u00B8\x00o\u00D3\u00E3[-\u0089\u00E4\b\u00FA\u0083\u00C4\u00BE$\u00FE\x14Z\u00A86\u009B\x1D#\u00F5x\x05\u00F6\u00B4\u0086]\u00D9\u008AvZ\u00D4\u00DD\x1F_\u00CC<\bL\x12\u00D1C\u00A0\u00F8\rR\u00AC\u008A\x01e\x1B\u0093:\u00B4\x18\x07\u008D\u00A0KVb{;Pp\u00BB\u008D9a\u00BD<\x1E\u0082\u00EA\rI\u00E8\u00EC;\u00D0M \u00A2 h\u00CF\u00FC\b19\u00E54\u00A8\x1B1\u00DE<\x078uSk\u00DE\u00D7{w\u008FI\u00F7\u00AE\u00A8O\x1A\u009F\x0F`\x02W\x07\u00F0\u00F0\u00E3\u00BF\u00F2g\x00\u00FC\u00A3\x1D\x00>5~\u00FD{\x06.\u0098\u00EE\u00DFB\u00BA\u00FEA_\u00E4N\u00D8`\u00B8_\u00D2\u00DE\u00AF\u00E1\x16;8'\u00B13\u00AB1\u00BD\fK\u00C9,\x11\u00AC~\u00EB\u0088Ae\u00BCF\u00BB^\x13\u00C2\u00AA:X\u00890^\u00CA\u00A3\u00EF\u00A8\u0083\x10\u00D3\u0081\u0097\u00CD\u00B1Q\u00F2\u00EDn\u00B8\u00C2\u0086*\u008C\u00A6jM\u00D1\u00CEN\u00C6\u00A0`\u00A4\u00D8N>\u00DA\u00DB\u0081T\x19\u00CA\u008E#\u00DB\u00C1m;B &1\x1B\u00C1W\x16\x7Fu\x05>\x11q\u00E88\u00F5\u00DCn\u00AF\ba\u00DD\x18\x1D\u00CAh\u00B6\x14%\x05\u00FD\x01\x14\u00DA\x19\u00C8\x04TT!\u0098\u00D3\u0091\u00AA\u00D8\u00D0\u00CA\u00AA\u009C\u0085|\u00E4\u00AA\u009B03h\u00C7\u00A4#s\u0091\x062St!8\u00FA\u00C1\u00C9\t\u00A3[FD\u0082\u00AAJc<q\u0098s\u00ACtb\x0F\u00C7\u00E7H~!&2\u00A0\nE\u00F1\u00CC\u00E86\x14\u00A3S\u00F0\u0096\u00A3\x11'\u00FB4y\u00B7i\u00E5y\u00A0\u009B/\u00CFI\u0084y4\u00A9my?\u00C8V3k\u0085\u0095tv\u0094\u00FB\u00B5\u00FA\u00DB\u0099Vy\t\u0082\u0089\u009Av\x7FR\u00B1\x14M\u0088Y\u00B5\u00D3\f\u0089\x1D5\u00C4\u00DE\r\u00C8u\u00A0\u00DF\x07\x1C\u00E3\u008B_\u00F9\x1E\u0080*\u00C3\u0097\u00F1\u00E5\x0F]\u00B6\u00CB\x1F23\x00\u0082 \u00AFQ\u00AA\u00C0\x15\u009C\u00C7\u00ACm\u00D8\u00AA\x1D\u009Dg\x12{ \x03k\f!\u00D4\x03]\u00A3\u0087\u00A0\u009A\u008A'f\u0092\u0088\u00E2\u00AE\x01u4q\u00F7K\x15\u0099\u00BF\x06\u00E0\t8\u00AEp\u00C1\x0E\u0099\x03\u00D5g\u00B5\u0094\u00C1\u00CBI\u00D8\n\x1C5\u008E\u00D6\u00CDi\u00BD\u00B5\u00BCF\x06\u00C6s\u00BF\u00B2\u00EC\u008BEf%\u00AC\u00DB\x01\x1C=>M{Q&\u00E3t\u00F5R\u00B0\\h\u00AA\u00A4vx\x19K\x1B\u00F5d\u009A\x0E\u008C\x16\u00E6Jf\x01x\u00C6\x00,`\x00\u0092\u0080\u00CDXg\n\u00B7\x15w\u00D1\u0089d \u00B9\u0093\u00B2\u00AEQk\u00A6\u0089\u008Fs'PQ\u0083\u008E\x15%\u009C\u008F\u00E9\u00A5\u00E8E\x1A6\u00C9\b|\n\x05\u00A0\u00FA\u00C9\u00A1\u0099\u00DCz\u0082\u00E5\u00A9\u00877\x15&\u00F7\u0087\u00B0UJ\u00AB\u00DF\x1A\u00EFb\u00DD?\u008D\u00EB\u0096T\x17\u00DAh\b\u0087\u00E7\u00D6\u009E\u009E\u009Dq\u00A0\u0098L\u00A2'\u00DE\u00A3\u00AB\fh\u00E7\u00F4\bI\u00AA\x16b\x06\x19\u00E3\x00\u00CF8\u008C\u00F9\u00CA7>\x04\u0090!\u00BC\u008C\u00AF<\u00EF\u00D6&\u00EB\u00DF\u00FA\x15\x04\x19j\u00C1u,:\x17s\u00D8`\u00B8\u0086\u00F2\u00FC\u00CB^\u00D0\u00A5\u00FE\u009A?Pp\u00BF3\x04\x19\u0092J\u0095X\u00CA\u00AC-\x05>\u00CF\u00AFv\u00DE\u009D}\u008FE\u00F7\b\u0086/9\x03\u008F-\u00AE\u0089\u00AB&\u0086E]\u00C6\x0B<\u00F7\u0082\x149\x1B\x03i\x06\u00A2&\u00C2`\x1E\u0086B\u009F\x0F[\u00FB\u00A2\u00B1.\u00EEI\u00E2;\u0095\u0089\u00A9\u00A8\u0086b'\x15\x1E\u00CD\x14%sd\u00BC\x03U\u008A\x10\u00FEc\x11&\x159X\u008C\x06\u00D2\u009F\u00D1\u00C8\u00D4\u00FB\n,\u00DB\x03l6\u00B4P\u00BE\u00EE\u00CC\u00C30Gn\u00C0\"\u00D6(co\u00BA\x16\u00CFs?0\u00CD\u00D3`Y\u0084?\x1A!PZ\u00BA\x18\u00C2\u00FA\u00DC*\u00F6b\r\u00F4)\u0082U\u009B\t# F\u00AC\x04\u00A2\u00BAg\u00F5\u00BD\u00A4m\u00BB\u00DD\"\u0081\u00C5\u00FA\u00F5\u00F4\u00CE\f(\u00DA\x121.F\u00CB\u00F4+\u0089\u00C1\u0096\u00A8)\x06\u00D2\u00EF\u00D9\u00A6\u00D5\u0085\u008386\u00A7\u00AD\x06\u008D\u00A9\t\x1D\u00F8\u00CA\x104<\u00B3\u00E0\u00A1W\u00AF\u00BC\u00F6<\x00\u00EC\u0097\u00E3\u00F1\u0093\x7F\u00FE\u00F2\u00A3\u00CF\u00E1\u00DF\u00FA%\"e\u00E9\u00F4D\x05\u00C1\x04`\x1B\u00DC\u00AFQq\u00FD\x0600\u00C7\u0093\t\u0088\u00E8\u008BQ\u00DC\u0096\u00FA!\u00A5\u00B5o\u00E2\\\u00EE]\b#c\u00DEq\u00F60lm\u0092\u00AD\u00DE\u00A7\u00C2*bB\u00AF\u00C2\u00F1\x15l\u00DC@\u00D6\u00B2^\u00C2\x15\f\x17\x1F\x186pL\u0095/\u0093V\u00CF\u00BD\x1C`\u00B8\u00B4 \u00AA\u00D1\u00A4\u00FAX\u00D4\u0085JZR\u00C4\u00E3A\u00DB\u0083\u009B\u00EA5\u00D6\u00F9\u00CA\u00A84DN\u00C5A\x06\u00A0\u00EF\u009B\u00957!^#-\u00E1\u00AB\u00FB5\x16\u00C6\u0098\u0083,%\u00DC\u00B9\u0086Iz\u0093\u00B4s\u00C0\u009Ar\u00E3\x05}'\u00801\x1C8\x18\u00DB\u00D8k d\u00CC\u00FF\u0084\u00CD\x19\u00CAB/\u00BCB\u00C9\u00EDd2c\u00C6\u00B9KYu\u00DB\u00A1\u00A8<\u00CB\b\u00BF#\bx\x0E\x1A\u00C9\u00C8 &\u00EF)~\u00C1\u00C8\u00C0,\u00B2\u00EA\u00CC\x15q\u0083Mn\u00E1\x0Ea6\u008B\u00F32\u00D0\u00D0\u009A\u00DF\x7F\u00D6\u00D85\u00A7\u008B\x04\x17\u0083\u00E3\u00BD\u00D2\u0088\u0089\u00AC\x1F\u00A1 #\u00D5V\u0080\u00EA\x19\u00F0o;\u00C8\\foS\u00E8,\u00C6#\u00E3\u00A4\"+\u00E5\u00EAM\x16\u0097\u00A8Gv\x1B\u00CF6\u00CD\u00A5\u0092]\u008Aq\u00CC\u0098{\x1B\u008E\u00F1\u00F5\u00AF>\u00E7_\u00FC\u00EC\u0093\u00FB\u00A7\u00C7\u00A3\u00EF\u00F8\u00A2\x7F\u00FE\x0F\x01\x1A\u0088\u00F8w \u008A\u0094\u00C1\u00A9&\u00C8m\u00A8\u00B0\u00DEr\x05m(/B#j\x18b\u00CB\u00F7b\x06Ys\x00\u00C5@\u00EA:\x1A\u00A3\u00D2\u00EE\u0080\u00DB\u00BF/oq`\u00E9\u00D7\u00FD\u00BC\u00D5\x009\u00CD\u00F05\x18\x1E\u00D0\u008E\u00B0\u00DBZ\u00A9\u00C1a\u00F4&\u00C4\u00FB\u00B2\u00DCE\u009E\u0085 \u00F2KJ!\u00D9\x1F\u00C4\u0088\u008AY\x053(r\u0096\x17#\u00A2t\x15\u00B6\x1Cm\u008B\x11\u0084\u00CD!\u00C6=\u00DB}\x13\x05\u0084\u00D9\u00BEIP=\u00EE8\u00ABB\u00AE:\u00FE\x00\u00C4\bJ\u00B4\u0080\x0B^\u0092-\u00B6\u009F)\u0089\u00DD\u00C5\u0097\u00B5\b\u00C2\u00F0\u00B4D\u00A0\u00A2\x16\u00BB\u00AE\u00EBbW\u008B\u00BC!\u0080\u00F4\u00B1c\u00E9w1\x1E\u009D\u00DFavk/\tx\"\u00ED\x05]2w\u00C2\u00D6Ks\u0096(b\u00A0vE\u00EA\u00C7\x1A\u008A\u00C8\u00FEKZ{^n\u00D9\u00DE\x1D\u00AF\u00C5`\u00D8\u00D1\u0088\u00A4|\u00FD\u00AD\u00FD\u00BA\r\u00ED\x19L\u00F6M]!#\x17\u00D3H\u008FMGG\u0099\u00F8D\x0F\u00C8\x04n\u00BE\u00F0\u0092\u00DD\u00FF\u00C4\u00A7\u00BFc\u00FF<>\u00FB\u00FE/\u00F9\x17\u00EF\u00EE\u00EC\u00B7|IrQ\x1D\u00F0\x07\u008D\u00C8O6\x02/\u0089\x1F:q7\b6\u00EF\u0081\b$\u0089[\u0099\u0081\"\u00D6\x1E\u00DELF\u0090\x0F\u00BE\x18B\u00A1\u0082~\u00AEBxuNg\x06\u009C\u00F8\u008C\x1D\u00AD\u00C5t\u00C0\u00F1\x12.\u0098\u0088\u008A\u00CCW\x1E[\u00C2)\x1D9\u008Dv\u0090\u00F6^\u00FDm\u00A4\u0085^\x19\u00C9@wb\x12\u00A1X\u0091\u00DA\x03\u00C3\u00A6\u0091\u00C7\f(\u0086\u00E0#\u00C3\u009E\x15\u00E2\u00EC(\u0086\x03\x18v\u00EF\x006\u0098\u008Fc\u00CBEb\u00CAl\u00D4\u00FAu\u00D4\x02\x1A\u0088]\u0093\u0086\u0091/H\u00E4\u00B5\u00CAG1\u008A6\x7F\u00BC\x0F\u00A5tm\u00D3.\x04\"f\u00AF2\u00B6@\x11~\u00BF^\u00F3\x0F\u00DA\x00R\x06V\u00FB\u00BA\u00D6\x00WPOJ\u00EC\u00B6D\r\u00D0\u00EEN\u00B9;\u00B6\u00B7D\u00A6\u0084\u00DE\u00ED>\u00CD\x1EP\x04\u00AD\u00A0\x1E\x06f\u00BB\u0096JS\u008D\x1C\u00C9^\x01@\tDRE\\\x1E\u0086[/^\u0091\u00FDg\x1Fd\u00D4\u00F4B\u00BC\u00F5;r\f\u00C6s+\u00C7\x03\u00AB\u0087#\x19R\u00C4\u00B1\x18Z\u00B1\x19\u00A2\u008E\u00ABG7x\u00F5W\x7F\u00ED\u00FD\u00FBg/\u00BF\u00FD\u00BE\u0087\u00FBk\u00B9\b\u00DF\u00D4\u00CB\u00B50\u00AE\x11U\u00826D \u00D1\x15\u00E0\u00D7X\u00F5w\x12~\x0B\"\u00A9\u00C1\u00B5\x1D\u009C\u0093\x19\u00A8\\Z@\u00ED\u00DA\x01I\u0093/\u00D5\"\u00CE\u00ED{2\u0096\u0085\u00BDK\u00DD\u00CEpl\u00F1,\u00B8\x01*d\u00EAP\u00AAu\u009A\u00F5\u00EAA!\n\u00A7|\u00CD\x1DO\u00C0\u00B1g\u0089\u00B6\u00E8\u00C5\u00EE\x11\u00BA\u00AC\u00F4\u00E9\b\x16r\x1C\u00A0\u00C7\u00C0T\u00CE\u00BDBe&\u00FFR:u\u0094/pL\u00D7\u00B6\u00B1u\u00B6\u00DESnH\x10\t\u00CC\u00B0mD\u00FE\x04\u00F3\b,\u0097'\u00F9\u009B!\u00C2\u008Fe)7\u00AA7q\u0082\x10\u00861\u00F0 G\u00ED@n7\u009F-\u00D2\u00C2\u00DD\u00D2\u00A9\u00C52k\u00FD\u0094\u00F45\u00B7Zx\u0090\x7F}\u00A2j\":\r\u00E8R#\u0088\u00D1\x13:\u00D3\u00BB`\x07b\u00EF\b\x0F\u0089\u0096(\u00B0\u00A0yA\u00E4r\u00DB%\u00E9Ir6\u00D8\x1D\u00C7\u00E2|m\u00C9\u00EE\u00C3aG\u00EB\x03\u00DD\u008AF\u0088mB\nn\x11\u00ADi\u00CE*\u00F1TA&\u00A0\x023\u00C6\u00EF\u0091\u00BB0\u00819\u00A9Ry\u00FE\x1DoKFU\u00B1\x131\u00E42$\u00F2\u00F9%\u00C3\u0098\u00A7\u00B1\u00AB_\u0089;\u00D7E\u00C0\u0083>g\u00C4\u00C8\u00A4Z\u00E59?\u00F7\u00E6\r^\u00FE\u00FC\u00E7\u00DE\u00B7?|\u00FC\u00D2{\u00E6\u00BD?\u00C8V\u00EF\u0082\u00D9\u00D7\x00\x1E Kx\u00F3m\u00A6\u009D\u009Ae\u00DD\u00BE\x02\x16\u0098\u00DF\u00DC\u00840\u0094j\u00D0Q\x03\u00DA\u00B9=B\u00B1\u009F\u00D7\u00A2\u00D0\u00F2S\u008B\u00E5\u00BC\u00CB\u0093\u00D4\rk\u00F7\u00B76\u0096\u00DEn\x1B\u00A7\x10\u008AK\u00C2\u0084A\u00F0u\u00D3]Fco\u00AB\u0084\x16\u0083\x1A\u0088b\u00AE\x0E\u00A4\u00FD\u00E1b%\u00F5uMh\u0083\x03\u00C3\x02\x11\u00A9\u00A2s~w\u00E6G4\u00B5\u00C3\u00C8\f\u00A2\u00D2\x12U2\u00DA\x1D\u00E4\u00BA4\u009B\u0090)tAD\t\u009D\u00C1\u00C5\x16+\u00A8\u008B\u0085UD4h\u00DC\u0092\u00A9j\u00DEY\x7F0\x11B${\u00AF\u00D7\u0091\u009F\u00F4\\\u0085^\fU\x0B\u00B5\u00FB\u00FE;\u00B17Cb\u00EA\u00D0\u00DD\u00AA/i\u0098]n\\!\u00F5\u00F8Q\u00B6\x05\u009F\u00CD\u00D0\u00D7\u00AF\u00EF#W\u00FF\x1B\u008CR{b~D\n\u00A6\u00A4\"U\u008D\u00EE\x1E\u0083\u00DE\u00C6R#\u00A1\u00882\u00E7\u00B3\u00CF\x031G\u00CD\u0099~\x17s\u00E1\u00FD\u00D2\u00D5\u00D8\u00E6LjKc\u0088\u0098-Xj2/\u0085v\u008EG/\u00FD\u00FE{\u00F6O\u00F9+\u00EF\u009Eo:\u00E5yC0\x01\x1A\rMq\x04\n8\"3p\u00C1\u00FA\r\u00A6\u0092h9!\u00A3P\u00C1\u00ADHD\u009D\x13\u00F0vv\u0086\u0090\u008Bp\u00AC\u00ED5\u0082\u00B7\u00EC\u00E3\u008E\u0082\u009D\u00B4\x00\u00F7\u00FC\u0086\u0096\x058\u009B11\u00F5{\u0097\u00F7b\u00B57h\u0087\u0081\u00CD\u0081a\u00DCW\u0081B\u00E2\u0086\u0090~\u00A3WasK\u009D\u00D9\x11\u00A6\u00D6\r\u00ABGA\u00F7\x1CP\r\u0082\x0E\u00FD\u00F5\u00AB\u00E5\\\u00E9\u00E5\u00CE]\u00A2\u00BA\u00BB\n\u008EK\u009Eb\u0080\u0089\u00DCc\x1E\x07\u008C\x05\u0089\u009A\u009D\u00C5-\u0093\x1D\u00E5%Lz\u0092\u0094\x06\x00G\u00ED\u00C6\u00C4\x13K75\x04\x02\u00EBk\u00C8\u00D9\x16\u008D\u0096\u00EAS\u00E1\u008F|\u0096f\x1B\u00A15Z\u009C\u00FE\u0089\x19d\u0092\x16W6\u00F5\u00DE\u00E9\u009EO\u00BD\u0090\t\u00E1\u00F4\u00D4\u00B3t:Q\x18\u00B5\bo\u00FD\x11CQ\f\u0081%a)y)\u00F7A\u00D05\u00D4\u00C5}\u0081\u00E9\u00BC\u00F5\x1C\u00C0lR\u00DE\x03\x04X\u00CF\u009E\u00F4>\x0FA\u00C0\x15\u00F5\u00D8\u00C7_\u00F7*\u00E2/\u00F5\x05\u00ED\x1E]\u00B5(\u00A60\u00D9?2\u00C1\u00F4\u00864\u00A6\u00A6\u00A7\u00C1\u00B6\u009E\u00FA\u00CA\u00D7\u00DE\u00BD;^~\u008E\u00A7}\u008B\u00D7\x15\x02\x15\u0084\u00C10\u0088\u00EE\x1A\u00A5\u00E7Sjg\u00ECz\x10\u00A6\u00DBJ\u00EC\u00B5\u00AF_?n\u00AD\u009DA\u00C9\u00B9\u00EA\u00FEk\u00C2R\x19\x19\u00E3\u00D5\u0099\x06\u00D3\u00A3\u00CD\u00DA\x02\x13Zimb\u0090n\u00D4\u00AE\x16\u009C\u0098A\u008D)\u00C8\r,\u00DE\u00EE\u00DCR\u00BET\u0097\u0091\x12W\x11\u0086b\u00C6m\u009Bx\u00D3Vp\u00C6\rdK\u00BD\u00E831\x01\x19\u00B811\u00D3\u00AD(\u00CF\u00CC$\u00F3\u00C8\u00E4\u00A6T-\u00E2)N\u008F\u0080\u009F0:V\u0095\u00E7$\u0083\u00AC\u00D8\u00CC\x05\u00A1\x07o\r\u0096\u0082\u00D9\u0092,\u00A2*\x0B{2\x01\u0084z\u00E4\u00A6\x055P\x16q\x11P,J-8x\u0099I]\u0090\x17\bk\u00BB\x18\u00CA\u00C9\u00D3#\u00E5K\u00CC\u00A1\u00EA\x19\x02n\n\u00C1\u00F5bJ\u009D\u0099\u00F9d\u00DB^\u00DE\u0089\u00DE\u0097DH\"\u00E8\u00D9$7\u00C8\x14\x1A\u0081\nb\u0093I\u0098\u0098\u008ES\u0086\u00BB\u00E7\u00DC\x01\u00C5X\u00D2\u008A\u00D4\x19\x0F\u00E7\u00ABl\x00\u00EDY8\u00D0\x0B\u00A1\u0094\x04G1\x13\u00CECg$\x19T\x06+F!f\u00E1\u00F5N\x03\u00E7\u00D43\x15rr\u00EC\u00AF\u00FBs\u00FB\u00EF]\u00BF\u00FC\u00CE76\x1F\x18$\u00DB\"\u00A6`Gls\u00B2\u00C2\u00FF5\x16\u00A0\u00DB\x0B\u00E8BL\u00CB\u00B6\u00AE\x0BY\u00EB\u009D\u00A0}\u00A06\x10\u00ED\u0092\\\u00FC\u00BC\x1B\x13\x0B\x15tDQjDW\x11\u00C4\u0088\u00F4\u0080\u00E3>\u00B5z\u00D4\u00AF\"\u00FE\u0090\\T=\x04\x07\u00CD\u00B1\u00DB\u0086\u00E1\u008E\u00E1{\u00C9x\x0B\u00F7\u00E0P\u00A6\x1E\u00F6\b-\u0086\x12\u009AT;1<\x10]!\u009A\u00C6\u008D^|\u00D0Uit\x0F\x1A.\u00AD?\x1A\u0091\u0092\u00A2\u00B8\u0099z\u00FC\u00E2\u00D1\x7F7\u009A_\u008D\u00BA;\u00E3<\u00CC\u0094!IF\u00BA\x18\x05{\u00F0\u0090\u00DA\u0094e\x1A\u00F0\u00BE\u00A2\u00F2\u00FC&\u00C1\r%m\u00D2(\u0088|\u00E6\u00B1(e\x11\x07R\u00DA\u0081\x16\x7F\u00BD8\u0086\u00D2\u00DD5C\u0088s\x17c\u009F\u00EENt\u00E0\u00FDw\x11\x1A\u00AF\u00EF}\u00C3\u00865kR\u00C7G\x0EG\x03H\u00EF~\x0F\x06\"\u0083\u00ABk\u00D5w\u0096L\u00A3\u00A1T\u00C6<'s,5\r\u00C8\x1C\u0085\u008Cv\x14\u0083\u00CB\u00C6\u009AAP\x03\u00ED\u008CVcT\x07t\f\u00E8\u008CF\u00CC\u00CCN}-F\x11c\u00A9jN\u00C1\\\u00E6\u00CD\u00F1\u00CE}\u00C7\u00E5\u00ED\u00B1L/X_\u0086@\x03\x0F\u0090\u009B\u00A4`\x07p\x1F]\u00E7\u00D6\u00C6\u00ABE\u00C8*E.c\u00A3\x16,?\u00DB\u00E2\f\u00E9ZFG\u00B9\u00CE\u00C2\u00D8\u00D8\u0089\u00FCl/\u00E8de\u00E8\u00E1\u00C7J\x7F.\u00EB\u00FF\u00DE\u00AE\x03\u00D6\u008AI\rnz\u00DB\u00AD\u00B8\u00E5>8\t\u00E5\n\x03W\u00D8\u00B1\u00D9\u00C4\u00E6;v\u00CC\u0088K\x00\u00F7uH\u0099OF\u0097\x1E\x05\u008DA\u00C9O\u00F1\u00BA\u00A9\x1E\u0087\u00E1\f\u0091\u00FC\u00DD\u0093\u0087\u00D6 \x1D=\u00D7b\u0086\u0096\u00AADy+\u00C2\u00EB \u00B7c\u0095Z\u0093d\u009F\u00EE\x18C\u00F3\u00D7\u0088\u00D85_\u00B1\u00D0Ls\t@\u00F5\x12\u00D9@#\u00D87R5\u009B$C\u00A4\u00FDj\u00E1f\u00FD\u00C2)\u00E2'#\u00CD\u00E2\u00A7lw!\u008AQ\u00DF\u00F5\u00C4\u00D2-W\u00AB]\u00F6\u0080,4\u0092HH\u00E3\u0092pJ\b\u00B7H_\u00C5(\u00C0Uu\u00BA\u00F5\u00A7\u00EE\u009CR5U\u00A6\u00C9\x1D\u00AB\u00E4\nmFI\u00F5\u00AD\f\u00A5\u00D5W\u0099I\u00CC{_\u00BC\u008D\u00B53\x13\u00CEIG\x0BT\u009D\u0084\x0E\u00DC\u00F5]H\u00AE1\x1C?\u00BD\u00F9|=\u00D5$\u00C7\u00E5\u00F1\u00ABo\u00DF\u00E1\u008F\u00DE6M\u00C0\u00D4['\u00AE\x11\u00F9\x07\x11[\x10\u008B\u00BC\u00D2k\u009Dh`\u00A2\x16h7\u00C4I\u00C2gFb\u00CBE(\u008F\u00C0\u00EA\u0092\u00AC\x1A\x07\u00E5\u00BE\u00F3\u00A5\u00FD\u0093n/\x0EkM\u00A5\u00B0\u0086,Nj\u00C6\u00AAj\b\u0095\u00F4\u0089\u00D7\u00BD\u00E3X!\u008C\u008Dx'R\u009D\u00E2\u0092\u00D8E\u00CAhK\u0080\u00CB\u00FDW)\u00C0\u00D0o\u00F9x\u009AM\x00\u00E1a\u00F0\f(*5\u00E2B\x06(\u0095\u00C5x.,f\u00EF@\u00CDc\n\u00EAT\x1F\u00E45Q\u00B95@EZ\u00D4\u00BB\"\u0094Q\u0084\u0092\u0084\x03\u0094\x18N\u00F1X\u0084)I\u00B9\\\u00D7(5\u00D1\x03\x19\u008C\u00AF\u0086\u00CA\u0080\u00D3\u0092\u00CA\u008A\u0082hm5x[\x018\u008D\u00B8\u00FA\u00EBdsX\n:'\x1C\u00A7\u00D1o\u00F6q7\u00A9\u009C\x12\u00D6\x01g0X7\u00DA-p\x1Dd\x06\u00EC-\u00DB\x15sr\x12\u00ECZ7\x01\u0089\br]pU\u00F4\u00B1v\u00E9\u00DE\u00D1A\u00ADs!\x1EM\u00CE<\u009DKD\u00A09\u009B\u00A76\u00DB\u009E\u0090i\x7F\u0098\u0086\u00AE\u00E6\u0099\u00FB\u00DB\u00F6/\u00CEG\u00CF\u0098S2I\u00BF\u00C7= \u0093\u009168\x17\u00FF\u00C0\u0086HS\u00EE.\u00C2\"P[\u00D4\x04\u00C2\u00C0\u0085\u00D8*\"\u00D1\u0093\u00F8\u00B6\u00F5\u00BC\u00D4\u00F3\u00B1\u00A0\u0082$d/\u00E2N\u00A2\u00F5-\u00D5\u0080\u0094\u00A2\u00D9\u00BF\u00CE\b\u0080\u0085\x19\u00F4\u00E3V\u008C\u00C8\u00FBy\x00\u0080-\x1D\u008D\u00AB_\u00A0\u00F7GD\x1A\u00D7f\u00FEA{\u00F70%\u00CD\u0091\u0082\u0081\u00B6\u00A6\u00E6D\u0095e@E\u00C9\u00E2X\\3\u00C1 %\u00AE3c\u00D8\u00F4\u00C4\u00A0\u00AA2pX\u00CD\u00CD\u0086\u00B2Y$\u00EAZ\f[T\x03d\u00B8\u00E0K\u00E5\u00D0\u0082\u00A8\u009C\x0BZ\u00BA>o\u009E\u00B0\\\u0084v\u00BB\u00D2OJ+;/p\u00A1\u0093\ri\x02o\u0084\u0094a\u00D2\u00A9\x1B\u00FBz\u00DDd\u00F8\u00B4\\\u0098$ \u00DDf)E\u0096\u00D1\x7FXxWyV\u00E4\u00C6\x0B\u00C2\u00B3D\x19\u009Di\x18\x19\u00C5\u0091\u008Cx\u0089*\u00840\u0098l-\r\u00D1\u00A4\u00CE\u00DE\x11C!D\u009F#*\"\u009D\u008C\u0082\u00B59-n3F\x11\u00BDxs3\u00B6\u00BE\u0091\u00B7!\x19JC\x12u=\u00B0=\u00BCyf\x7F\x1D\u00AFmS\u00FA2\u00EEC\tIB\x06)\u00BDIx\u008EkT\u00F8k\u00CFV\u0094\u00B4\x152\u00E8\x04\u00D9\t]a\u00C7\u00ED\u00BA\u0085iti~\x1B}\u0094zPRX\u00DF\u00CDV\u00BB\u00C1\u00DA\u0086\x18\x14\u00892\u0083\u00A3\u0092_\u00C7\u00C3\u00B9C51\f\u00EC\x0En\u00CDN7$\u0089+\u00D2\u009B\u00AB\u00ACz\u00B4\u00AAH\u0082\u00DA\u00C2E\x7F[~G\u00A8\x04&\u00B5\u00A9\u0098h\u00852\u008B\u00D8\x01\x05\u00CF\u00EA\u00BAD\bdB\"\u00BA\u00B346p\u00E3\u0098&ae\x14\u008DS\u00A4\u00D6y<&\u00D7\u0095y6\u009F\u009F\bVL`\u00A2\x16<\u009F{\u00A78Z\u00F4\u00D3\n>u\u008E\u00EC\x10\u0094\u0094\\\u00A8\u00DE$kAi=\u00E7\u00F5xy\x02f\u009E\u00A7\u0082\u00A8\u00F2(\u00A8\u00ED@\x19\u00B3]\x1F\fN<$\u00CF\u00F7\u00D6\x17Il\x00\u00C9\u00A8\x14c\u0080fsX\u00D4\u008D\u00D6_(\x00\u00C8\u008B\u00B1\b\u00BDt\x067\u00AB?\u0080\u00FA\u00AA9\u00AD\u00FE\x04\u00A1\u00CF\u00AAe\u00C0P\u0089\u00B2\x07\u00F8\x12\u00B3\u00B00\x1E\x04\u0093\u00AB@\u00ACv^\u00DA\x10\u00E25^\x7Fe\u00DB_\u00B5\u0087\x18\u00B8\u008F\u00E9\x0F`\u00B8\n\u0088\u00EF*\u0081\u00BE\"\u0080i\"\u00E0\u0093\u00E4\u00F7\u00FA\u00F4,(q:\u00AF\x1B\x16\u0097\u00CDTn\x13lq\u00DB\u00C6\f\u00BC3\x17\x0END\u00DDR|;C\u00A9\u00EF\u00DD\u009Eayn\u00FAw\r\u00B8\x1D\u00D3\u00B0\"\f\u00E5\x11\x02\u0083EXO\u009E\x0E\x03\u008A\x01\u009D\u00D1\u00C0\u00E0}*\u00EAR5\x04\x07\u0090\u00C7\u00F5\u00F0:Z\u0091\n\u0093\u00FB4x\u0086\u00D10OB\u0085\u00B9\u00E8\u0089p\u0087<\x06\u008CIc\u00EC\u0082\x18\x07\u0099\u0092\u00F5\x05\u00AC\u0085\u00C4\u00A1\u00A8\u0084Y\x1E\u00D2\"\x12%\u0088X\n\u00C2\x06AtH+\u00F8Z\u00A5W\u00EB\u0092\u00C6\u00B6|\x04\u00CCNHOi\u009B\x0B\u0096Ld1\u0080\x19\x1Cs%\bJ\u00CC4\u0094y\u00BF\u00D7@\u00A6'/\u00F7\u00D6\u0083\x0BE\u00AC\u00FA.b\u00B3\u00A6\u00DE\x00\u00DAt%!7\f\u00C9YZ\u00CA\u00B2\u00A1\u00D56\u00E2\u009Cx\x1F\u00BB\x1B\u00B2^C\u00AB\u0095X.E1N_\u00AE1\x18\u0094\u009D)\u00E6$1\x11\u00ED\x0B\u00BDx\u00A9\x06sf\u00FE\u0084\u00EB\u00BE\u009C\u00A7\u00F0\u00C0\x14\u00F3\u00D8_\x7F\u008C\u00FDw\u00AF^\u0081\u00F9\x13\u0088\u00A8C\x11\u00FC\u0080T\u0083a\u00FBj'\u00B0\u00C6$(\u0095a\u00BDv`\u00A0\r\u00E5.\u0088\u00F0|\u00D1\u00E7\x1B\u0083H\u00BBBG\x07\u00FA\x04\x16\u0084\u00A2\u00C5`\u00E5\u00BD0\u0093\u00C1\x12\u0089\x0En\u0087-\u00F3X\x0BB\u00EA\u00F9\n\u00C5Pz`T\u00FF\u00BD\b\u00BC\b^\u00E3\u00E3\u00B9\x0E\u0084aT\u00FD\u00DC2\u00A48\u00E2\u00F8k>\u00AC1\u00A5\u00F5\x1C}\u00E3\u00BD|5\x1A\x02\u008A\u00F2'Q\u00FB\u00A4\u00ED \u0096\\\u00C4\u00DC\x05\u00E3\u00AB:\t@\u00B7'\fhWjFCz\u00A9\x06\u008B\u00C4`\u0084`\u00FD\u008Ez^\u008Cjt\u009F\u00CDY \u00C2\u00D4\u009F\u00C6\"\u00AE[$\u00F1\u00A4\u00D8g\u00DB<\u00A4'w\u00FB\u009B\b\u00A3\u00FAd4\u00AC\u0095*\u0082$H1\u0087\u00B9\u0094!?Z\u009F\u0094\x03\u0080\u00B4'd$\u00A1\u00A2\x1Fy\u00BE\u00A9#\t\u00BFQL\u00C0CZg\u00A2\u0091\u00E6M\u00F7\u0091Q\u00CF\u00C1\u0098\x04\u00A4\u00E1\u00CF%\u00E53\u00DD\u00BAT\u009DDI\x19\u00FB1\u00A2\u00AD\u00E3(\x03\u00A8n \x14\u0093%\u00E4\u00C5L\x06\u00E0\x17\u009E\x1F\u00CCL\u00F75%y\u00B1\x7F\u00A3\x1B.i\u00D0\u00B4\u00CB\r\u00F6\u008B=\u00C2a\x0F\u0082\u0087\u009B$\u00F1\u0080\u00BC\x04k\u00E0\u00D0\u008E\x0E\u00E3k\u00FF\u00C5N\u00CC\x05\u0092\x01y\x0E\x1Aq)\u00A2\u00CE\u00BA\x0E\u00AFs\x1C+\u00C3 Ax\u009A\u00C3Je\u00F0\x1E\x06-\x02VnEh\u00CFKTbC\x05\u00F5\u00A9\u00DC\u0086\u008E\b\u00C6\u00D2\u009E\u00D6c\x10\u00E9\u00C6\u00C5\u00A2\u00F6\n\u00AEG\u00BD\u008E\u00DA\u00EA\u00CD\u00BAjs\u008Ai\u00E8o\x15N\u00D5}\u00CB0\u00B9\u00A1*\x1A\u0097$7\x14\u00A3\t\u00A3\\\u008D'\u00CA\u00C0\u00C7\u00DF\x17\u0088}X\u00CE\u00EC\u00EE#\u00B20\u00AD\x10G\x19@\u0081\u00B2\tt$P\u00C5<s\u00EC\u00F97\x17\u0099`3F\x0B\u00CA\u00D1\x02\u00AD\u00DF\u0093i\u00A0\u00AA7\u00F7\u00D0c\u00A7\x0B/\b\u00A8\x13\x0B\u00AA\u008D<f\u008B\u00E1\u00CC\u0093({\u009B\u00D6\u00FC\u00F1\u00A1&\u0088\x18\u0095\u00F8\u0093\bB:~\u0087\u00D3\x0B\x02A\x12\u00F7\u00DA\u00973\u00C3\u00A0\x17\u00E2T\x7F\u00A0\f\u00A7\u009A\x07\u00AA\x15\u00CD8X*\u0092\u00DA$\u0083\u00EC\u00A8g\u009E\u00FA4\u0085b\u008A\u00F9\u00D5\u00FC\u0083\u00FD\u00E6:\u00CE\x00%\u0090\u0099pL\b\x01\u00B2=\u00BA`\u009F\u00CAX\u00C3N\u00F8\u00AA]n\u0094C w\u00E3\n\u0081\x157P\x7FK\u00DAWA\u00D4\n\x15n\u00E7`\x00g\u00FBB\x12 \u0089\u00B8[\u00C1\x13\u00F2\u0091\u00D0\\y\r\u00ED\x1C\x11\u0093\u0088z\u00AA/\u00EB9kt\u00E3\x1B\u00A3\x15,\x0B\u009F\u00BD\u00B3\u009D\u00FE}\x1A\u00B2\u009A\u00814\u00CE\x0F\u00D5Cd\u00E6\u00E8h\u00A2#\u0095\"`\u00CF\u00BE5\x14\u00E0;\u0096\u0082\u00A3}n\u00BC\u0098^0\u00C9\u00F5zEN\u0086}\u00B0R\u008B\u00A6\x01\u00C3\u0099\u0086D\u00FB\u0087\u00B6\u0085\x1B\u008C\u00B0L\bl'b\u00D0k1\u00EC\r.\u00E03\u00C1\u00B3\u00AF\u00AEg7sQ\u00EAx,p\u00AC\u00ED\u00B3\u00CDe3\u00D5\u00B6\u00A0W\u00F8o0\x12\u00B7\u00A0\u00B57\u0086\x10L\u00CB\u00D7\u00EB:u\t6\u0083L\u0081\u00C7M\u00CF\x10b\x14\"\u00DD\u00AE\u00CB[#*1\t\u00F5U\u0081F@\u00D6V\u0090\x04\u00AFU\u00C4\u00F6W&\u00E7\u009C\u00AF*\u00ED\x1E(b\r|j\u00ED\u00B2?\u0099ZM&QQ\u0099\x14\x1E\u00ECS\u0096^\u00CF\u00FE\u008A9\u00D5\x031\x18ps\u00C1\u00EE\u00B8\x00\u00CEb\u00A7\u00A9\x16\u0094\u00C7\u00C0Z\x1ArL\u00F7~\"\x1E\x12\x07\u00FF\x1E\x103\u00E9D\u00A1v\u0081\u00DBR\u00BD\x13\u00BC\x18@\u008B\x12\x1Bb.h\u00F7)\u0089\u00BEz\x0F\u00A2\u00CD\u00AA(\u00DCT\x16\u00FE\u00BE0\x05\u0096m[\u0092\u00B1\u00BC\u00DA\u0089\u00B6hg\u00C0\u008EaLP\u009A\u00D6\u0098\u00A1\u00D5=Q\u00BB*\r\u0096\u008AO\u00B5\u00A91\u00C3\u00D4\u00E7\u009B\u009B\u00D2NsR*\u0084\u0088I\x06H2\x03\u00AA8\u0092*1\u00E6bH#\u00DB\u00D2\u00DA#\u00A2\u00CBHR\u00CD\tK|i\u00CDJ\u00FA\u00BAQ\u00CA\x19J\u009F\x15aI\u00BA\u00D1\u00FF>\x0F\u00C0\x0F\u00E6\u00F4\u00CB\u0088\u00E7\u00CB\"\u00CD\u00EF\u00DC\u00AF\x00\u00CE'6\u008F<W\u00D08K\u00C9&\u008C\u009E\u0081D\u00E0'\u00F7\u00A1\u00B7MU\u00D8\u00EF\u00C3\u0088<\u00A8\u0098\u00A3\u00FA\u00A1k\u00CA\"o\u00D5\u00B6\u00AA+\x1DF\u00D5\u0084\u00E3\u00CF\u00B1\x10\u008E\u00FB\u008C\u0080\x12\u00F7\u00E8\u00FB4hC\x141\u00BA\u00D1\u00D0\u00CB\u0098\x06\u009FG0\u0092y\u00B0M\x12\u00FA\u00BC@\u009B\u00AFV\u00F5\u00A6\u009A\u008Bs\u00B4\u00A1\u00B5\u00D8\u0089\u00AA\u00B3\x00\u00C8\u00C0kto\x0E=\x13\u00DEO6\x05\u00B9#=\r\u0090\u009A\u008B\u00B2\u00D1\u00EC1\u00B5W\u009C*\u00AA\f2,\u00B6x\u0082[\f@n;\u00DB\x1A\u0091U\u00E1\u0092U\u008D\u00E8\u00D6\u00FB3t\u00D6=\u00E46\u00E4\u00C3V\x1F\u009A\x11\u00B3\u00EC\x10w\u00BD[\u00DF\u00DA1_>\u00B1\u00DE\u00B338 \u00C7\u00B4\u00B6\u00D9\u0088\u009E\x10ZRZ\u00A1\u00B8\u00BA\u00B7\b\u00BBB\u0089;\u00F3\u00AA\u00F7\u00D9\x13R\b\n\u00ED\u009CB\x1F\x15\u00E2\u00DA\u00E6\"\u00D5#$\u00C3\x0En\x7F\u00F7\u00DCd\u009F\x18tu\u00B4\u00DF\u00B6\x06\x04\x16\u00E9\u00DA\u0099A\u00FEnPH\u00B2R}\u009D\u00AB'\u00A5?\ne\u0094\u00BB\fm#\x11\u0090N9&\u00EA\u00D3\u0096\u00CC\u00C3\u00E0MeX\u00AA&w}\x1D\u00E5A(C\x1C\x19\u00BF\x0B\u00B2{k\u00B7\u008FO\u00D0\u00B9\u0090Cm\u00F7&)\u00DA\u00FA+i\n\u00ACs\"i\u00DB\x11M\u008B\x17.\u0084\u0081\u00EAgJ\u00E8\r\u00E5Z\u00D4\u00F9\x1AKC4hm\u00A7\u00D1\u0091\u00F7q\u00CF\u00AB\x01\u00CE7\u00D6\u0082\u00ED\u00D5\u00D7\x1Ag=\u00ABz\u0099;\u00F6\u00F2&\x10\u00EAZ\u008B3\u00F0N\u00C0\u00D2\u00C9iSh6\u0080\u0095\u00D8\u008B8V\x03\u00DEh\u00BF\u00AD\u0086\u00C2(\u00FE\u00C0\u00EF=\u00F3q\u00F1\u0099\u00DF\u0086\u00DD+\u00D3i\u0086IC\u00B6}\u009B\u00F8\x1A\u00D3\u00D0\u00BD\x16\u00B8\x1B\bia\u0080\u0086\u00C6\x14\u0089\x1A:C\u00B0>\u00B6\u0090\u00D6JbN\u00C6`\x1D\t4\u00B5\u00C4:\u00E3\x00\u00AA\u00DEC\x11\u00B4[p\u00FE2\u00A06\u00F4chc\u00D4\u00B8\u00CFh\u00A7\x10\u009B\u0082\u0094\u0092q%\u00E1\x17iW\u009F<\x17J\u00FCNK\u00BC$\u00E0ls;\u00AFR\"{JAk\u00EE\u00B0\x18\u00AF\u0082~R=\u00C88\x04C\u00E8\u00C1\u00A3I\u00C7\tO\u00EF\u0092\x0E\x02i'\u0090;S)\u00C6\x1D\x0E{\u00FB\u008D\u00D22\u00E3\u00F6\x1BS0\u00CE\u0099{\u00B5+\tj\u00D9_\u00D6\u0093\u00CCpl\u009E3\x0F,AH\u0089\u008A\u0090\u00CC\u00A8\x18\x0E\u00C0\x1D\u0086O\u00CCc *@\u00A9oV\u00F7Y\bY\u00E7\x04\u00E37\u00DEn\u0099\x07^\x13)\u00E5\x03!\u00D4{\u00D4g\x13n\u00CB<i\u00ED8vw\u00C5\x12h\u0091U\u00A8\u00AF\u00A5\u00AA\u00D0\u00A5\u00AF\u00D4\x02!\u0082\u00BA\u00B6\x16{\u008F\u00D0[\u0099\u00C3\x1A\u00C5\u00C8c\u00860\u00C6,\u008CB\u00C4X\u008B\u00AEt\u00F1.\u0095O\u00CC\x05\x15\u00E5\u00D8\u008D\x7F8\u008D\u00A1\x18A\x11h$\u00ECt\u00E2\u00D6y1\u0092\u00C8h\x17\u00C4\x16r\"Wn\f\u00F2\u00B6G\u00A2\u00A2\x0E\u00B3O.oB\u008B\x1E\u00EC*\x06\u00D6h\u00C58\u00E5\u008C\u00BAb\u0087)\x03U\u0092\u00C5\x00I\x0FPcrg\u00C6\x1C\u00BC\u00C0\u00B2\u0084\x00\x18\u00B9\u00B6\u00FA\u00B8k\u00A1I\u0092\u008B\u00F9\u0088\u00A0#Ym\u00C2\u00EC@5\u00D6\x18m\n\u00DBH\u00B5\u00A2\u00F9\u009C\u00CF\u00A8\x11\u00B2\u0091Xl@n\u00C2|\u008Eb\n\u00D5X;\x1E\fhbFb\u0097\u00F8\x17\x06\u00EB\x16\u00C4\u00F8-#,\u00E3\u00FE%\u00B0jL\u0080lD\u00E9\u0093\u00E1X\u0088\u008A\\\x1E\u00A6\u00F8\u00DD\u00AD\u00DC\u0099i8t\x07\x18\u009B\u00E2\u00D9g>\u00F7I\u00E9\u009D\x15\u00A3f\u00CCa\"\u008B\x18gHp\u00AA1I\u0093\u00AA\x18=\u0081\u00A9m\u0083\u00F5,jz\u00CA\u009D|i\u00AA\u0092\u00CE\u00A5\x10rC\u00D6\x0172\x06\x18v\u00C3\u00D3p\u00BC\u0086\u00F2\u00D5\u008BH\u00EFH42Y\u00F6\u00CF\x04\u00A6\u00C9\u00EC\f\u00E4,\u0095\u0081\u00D5hhK\u00DB\u00D9\u00A6\u00A4Z+\u0096R\u008Cde(\u008B\u0094O\"9Cr\u00D4\u00B8\x14\x1F\u00B1\x18\fW\x02[s\x1Ft}\u00EB;\x1CU\u00C6M\u00C7\u0081u\u008C\u008D\u0090\u00DB\u00B1@\u0081M\u0092g\u0088\u00F5y>8\u00FF\u008B\u00AA\u00D6\u00C7X\u00FD^\r\u00B75\u008En\u00C8\\6\u00B4q\u00A5\u009DG;\u00C7\x04F\u00A3\u0087\u00DA\x01\b)\u00D5\u00D7\u00A4\x1EJq8*\u00E3\u00B0\u00E5\x0E$\u0081s\u00B1q\u00E1\u00BB_P6\u0088\u008E8\u008Cs\u00AAx\u0085K.\u00CE0\x18N\u00C4\u00EE\u00C9$R\x17c\u00D0b\u0096\u009D \u00CE\u008B>6\u00FB\x01\u00A3'=\tJ\u00D7n\u00F5\u00BB\x18\u009D\u0088\u00D4[\u00FB\x18\b\u00DB\u0081\u0098{C!b`\u00CE\u00FD,\u00F3\u00DE[\u00EB\u00CFl\u00ED\u00F5\u00ECM\u00D9I.\u00EC\u00D3V\u00EB\u00C0\u00F5tf\u00FE\u00BD0\x10\u00D5[H\u00E9?\u0090\u00B9HY_\x02\u0081\x10\u00CE\u00F3\u00A5k0\u00E1Y\u00B3\u00E2&\u00E6\u00D1\f\u00BB\u00F9\x13p{\u008C\u00C8](\"\u00A8\x14f-Z\u00E9\u00AC\u00DDfp&\u009A\nI^\u00A0q?\u00B7\u00BB\x13\u00B5\u0098E\u00FC\x0Bt\u00D7\x04\x01\u00E9\u00AAL\x03\u009A&n\u00CFI\x14\x1F\\\u00DC\u008A-7\x02\x19\x07\u00B0\u00A1x\u00A61\u00BAqE\x18\u00854jl\u00B91K\u00FE\u00C6\u00BE\u00B8\u0082BH\u0084\u00E7LJG\u008EC.AW\u00F2V\x1B\u008B\u00E7\u00F9\u00B4\x0Bd\x7F\u00DA+\x11\u008F^\u009DY\u00C4\u00F5\x13*\u00ED62\x0EA\u00F1\f\u0086\b\u0081\u008E\u0080,\u0086\x0ByT\u0082\x0E\u00C1S9\u00F6\x15\u00B02\x1A\u00A1Sh\u0098\u00C7b\u00B2\x03>[\u00A5\u00E1\u00D4\u00ED\u00D1\u00E6R\x12-qs|\u00FA\u008E\u0089\r\u00C3\x0E\u00C08\u00B3\x0E8v>\u008A\t\u008C\u0090\u00E21\u00C7A\u0094Q\u00D2\u00ED\u00C8\u00F1$\u00F15Cd>\u00CBD8!\u00AB]\f\u00C0\x0E\u00B8\u008A\u00C6\u009A%\u008A\u008859\u00AB\u00DF\"H\u00F5'%\u00BA\x18\u00CFF\u00E8\u00ADJ\u009AD\x15\u00D6\u00F7\u00FE>\u00C88\x1D*\x18\u00EBv\u00C4F\u00B9\u00A9rq\u00D2\u00FDB\x06G\u00D5,\x11\u00DFd7\u00CE\u008CH\u00EA\x16\u00E9t\x1C\u00A8\u00CAI\u009C\u00F7dH\u00D1\u008Fb\u00A2\u0091n\u00EE\u0089\u00D4.\u00F0}\u00C3>\u00FC-\u0098x5&\u009A\x0F\u00B2$J!\x04[\x18A\u00FD\u00DEc\u00F3o\u00FF~\u0092\u00D0:O\x12\u00C0z\u00FB\u008DI\x106.\u0081?\"\x1EB\u00B1\x18\f\u008A\u0090\x00\u00DCfT\u0092\u00BEg\u00E6e\u00F9\u00DB\u0099\x19h_e\u00EFR\u00D7\x10\u00D2\u009AR>\u00FAM\"\u00B0\u00B0$[O\u00AA\x02\u008A\u00DB7\u00A8\x1E\x0B\u009E\f\u00D1\u00BB\u00F1Q\u00F3R\u0084\u00AB\u00E7057h\u0086A\u0097qp\u009C$\u00FEj\u00D0T\u00F9\u0090\u00F2\x12\u00898L\u0086g\u00C0\u008D\u009F\x01\u00BBG\u00D2m\u00E8\u009CA_q\u009F\n\u00F6!JH.\u00ACE}\u00C0\u0099~-\t\u00CF\t\u00E3\u00B3\u0093t\u00F3x\u00B6)M/(\b/D\x00\u0082\u0089\"pK\u00E9\bd\u008CC\u00C2l\u00AD_y\x05\u00D8'!\u0097\u00A6n\u00B8\fo6I\u00E7b\u0090Z\x1B\u00ABj\x14\x0B@\u00C6\u00CB#\u009E\x7F\u00D6\u0085\u009C\u00C8\u00F8\x1C!\u0082\u00F6\u0092Z\x06\u00CCl-\u00C7\u0092\b\u00A4I}Ix\"\x15\u00B7\u00A6\x1A\u0098\u00A4;\u009F\u0089]\u00F8y \u00D3\f\u009C\u00CFhr\x1E\u008D\u00B9'\x14\x02\u00EA\u00A3\x00\u00DF\u00A2\u00E6\u00EF\u00D7\u00D8\u00DF=\u009F\u00C5\u00BF\u00D9_\u00E4$(W\x00(\u0088,\u00F8\u00D9\u00D0\x02\f&c\u00CF\u009D\u0085N\u0080\u00B2G4x\u009F\u008FD\u00AAC\u00AB\u00B8l\u00ED:\u00C3\u00C2hV5\u00A11\x1C\u008B\u00F3K\u0092\u00EB\u00DCv\u008D\u00EE\u0097\u00D2U\u00D7v\u00C4\"\u0086s\x1B\u009E/\u00E3q\u00A9\f[\u00B9\x11\u00B3\x1FE\u00A4\u0082\u00BF1w\u00C5XJ\u00BF\u008F\x07\x1ALA\u009F\u0080v|\u00CE\u00D4i\x17\u00E3;\u00ABa\u00BC\x1F\x06k,\x0E\u00DA\u00F9d\u00C8\u00EC\u00DF\u0089N@\u00C9\u00CF\u00AD\u00D8\u00C5\f\u00E0\u00F2\u00E8\x19\u00B4\x11\u00CB\u0096\x06C\u00DEILB\u00EA\u0084k>\u009C\u00CF\u00F0\x12\x12\x06@\u00AE4\x12\u00A0t\u00E8\u00B5\u009C\u009A$\x17\u0089/\u00E1{\u00F4:R\u0090\u00C5t\x1C\u00A52 \u00EE\u00B3\u0084\u00F6\x1E@\u00AFS\u00ED\u0092\u00B0\u00C6\u00CF=\u00A4\u00A0\u00E2\x07\x16Uc\u00C0-$\u00B1\u00A2'\x0BY\x18\u00F9\t\x05\u0094ww\u00A8\u00D6\u00D6\u0081\u00CEF\u0096\u00D2f\u0098|\u00AE\u00CC$\u00A6\u009B\x16\u0086e\x0F\u009BZ\u0093\u009CS1\x0E\u00F7Z\u009F2V\u00E2\x06\u00B5?x\u00F7Nh\x1E/\x10b\u00E8q0\x19\x0B1\u00D5\u00FF\x15\u00D5\u00C7<\x1D\u00B8\\=\u0089\u00FD-\u0097\u00A7\x1E\u00DDN\u00DE\x00\x00 \x00IDAT\u00F1\u00BB\u00BB\fL\u00B5\x11J\u00ED\u00B8\u00AC\x12\u00DF\u00AB\u00E4W}\u0083U\u00BA\u008E[\u00C7\u0096\x14hM&\u008D<\x0Bj\x00P\x04\u00D3\u00A5z\u00F5\x07\u00AD\x1D\x11\u00D0mD\u00D2uz\u00DD\x13y^\u00D5*\u00A0\u00AE\x7F\u0087\r\u00E2\u008Cp\x1C\u00C0AC\u00CC\u00E4#\u009BV*\x04\u00CBg\x06\u00E1\u00F2\u00BCE\u00F2C^\x07\u00E4xT|uRzn\u00A97\u00F7\u00F9C\u00F6\u00C5y\u00CF-\u008F\x15\n\u0098\x10\u00BB)\u00A4T\x1E\u0085x2\rNaN`\x10\x19d\u0099/\u0099\b<l\n\u00A9:\u00F4k'\u008A!\u00A4>k\u0094L\"\u00A4\u00C9\u00D3\u00A5\x1B\u00EBaI\u00AF\u00F6\u00D6\u00F7\u00F8{\u00A9]`\u0093\u00F5!b\u0081\u0097QO\u00C7b-\u00B8]\u00E0C#\x0F\u00E2\u00B4\u0083\x062\x11\u00B8\u00ED!ai$\u00B4\u00B4\u00BC\x1D\u00C0T\x7F\u00D0\u0088\u0098\x10\u00DC\x1C>\u008E\u00C83@\u0084\u009D\u00C3z\u0081\u00FD\u0099\u00E0#\u00B4\x0B\u00A3\u00BCi6\x020\u008E\u00C4\u00E5Z<\u00F2:]\u00EC\x12~\u00C3\u00E3^D\n\u00B1\u008E\u008Ed \u0081\x00\x0E\u00C0\u00E9\u00C9i\u00AE\u00D6\u00F0\u00D6\x1C\b;\x00i$\u00A8\u00BF\x18\u00B8\u0091\u00F1\u008DIM\u0081\u00E3\u00CD\x02\u00AF1\u00AEy\u00EF\x19\u00EC\u00D7v\u00EF0\u00EC[-\u00BC2\u00AA-F\u00C5\u0093\u00AAp\u00F7q\u00CEPOD\"\u00F2H\x04 \u00A2N\u00E9p&@\u00B5S\tI\u0096H\u0080\u00CB\u00DB5\u00E8\u008E\x04z\u00DF\u00F8\u00DB\x12dt\u008A\u009C\u00F4\u00DB\u00CC\u00E0.t 2;<vh\u008A\x1C>\u00E4\u00A2V\u00C4\u009F\x02\u0092\x02\u00F6#!\u00BE\u00F2\x0E\u00BC3\r\u008D\u00B3y'\u0082\u009E\x14\u00845R\u00AD\u00AA\x10k\u00A9\b\x1Di\u00E9\u00DFb@\x07F\u00DA\x10\u0084\u009CD\u00F8\"tAqkLAE\u0084\u008D\u00F41g\u009B\t\u00AD\u00F1\u0094\u009C\u0092Z$\u00EA\u009CoI5\u00B9\x1D\x19\u00B0\u00B4\u00B8\u00E6\u00AER\u00EA\u0097>n\u00EA\x14*\u00ED8\"h5\u00D7\u00850t/\u00F5g\x12\x1E\x13\u00C63mX^\x12\u00EBF5\x0F\u00C4\x12*X\u00D5\u009DR\u00AB]\x00\x14\u0092\u00A1\u00B0\u00B2=\u00DAm\x06\u00DAtK\u009E\u00FBF\u009D\u00BFl/D8\u0089z\u009A\u00D1\u00D1UR.\u0098\u0099LD\u00B2\x1D$\"\u00A0\u00D1/\u00D7h\u00A2\u00B3\u00A62\u00A5q\u00F4\u00E0:\u0092\x11Q\u00CF\u00A6\f\u0099I\u00A3i\x006\x1C\u00D7\u00F7\u008F\u00FDm\u00E3\u00FE\u00D7\u00CD\u00F6\u00B7\n\u00A2O\u00EC)a\u00CE\u0092>\r%-\u0087\u00A1\u00A4\u00FAI\u00B2\u00B1\u00BE\u0082+\u00966\t\u00B1!\x04=X\u00EB\u00B6\bU\\\u0092*\u00D1\t\u00B4\x19\x0BA\u0083\u00DEyS\u00D8\u009C\u009C\x13a\u00AB\u00CF\u00DE\x1F\u00A6E\u00F1\u00D0&Y\u00CF\x16{\u00F5\u00E3\u00B0\u00C9\u00EB\u00A92\u0088\u00E0\u008C\u00BBG\u00D9`\u00C1\u0093\u00D2\u00F5E\u00DC\u00F2\u00F9O\u0093{\u0090\x0B\u00DD\u00CB6\u00A0\u00B1U\u009D\bd\x1B\u0089\x10P\u00F5\x1A\u00A6\u00D3]i{\u00DE/\u00B2\x0E\u0082a\u008E6\u00BF\u00EE\u00E1M\x00\u0099\x02\u00BC\u0098\u0084+j\u0090\u00BE\u00F7aB\x10|4\x0E\u008C\u008C\u008C\x03\u00FBY\u00D1vK5\u00E0)\u009D\u00DC\u00A1\u00F8yo\x121\u00D6\u0085\u00D3\x1F/\u009B\u0080`>\tc\x16\u00B3\u00E9B&\u00B2\x1B=\x16s\u00EA\u00DE`?6\u00C0o\u0088j:\u0081\n\u00F6\u0084\u008A\u00E0\u00C9h\u00DA\u00DA\x13\u0094O\x042\x11\u00C8Dc\u00D5\u00B3!\u00D7\u00C4\u0085\u00CB\u008B\x0Ec\u00F7\u0088sp!\u0088#\u00EF\u0095\u00C8\u0085\u00AB+.\x14S\u00B8\u00D4\u00FD\u0098\u00C3a|\u00E6\u00F5)b\u00A7A\u00D7y\u00FF\u00B4?hN\u00B5\u0084\x1Bs6Gz>8V\u00938cL\u00CB\u00E4\u00D6\u00C4\u00C4\u0090\u00C0\u00FD{_\u00DF\u00AFa/O\u00C7[{|\u00FEm\x02+i\u00EAw\x11\u00DFI\u00C7\u0097q0 \u00D5\u00C6\x07\x06fF\u009E\u00DC\u0082\u00E9{o\u00EDf\u00C1\u00CC\x15\u00A9\x14\u0091i\u00D0gTq\x1B\x15\u00E8\u00BC\x1E<e\u00B0X\u00F9I\u008C\u00B85\u00DEU\u0082\x0F\u00DC \u00F6V\u00B8\u00B1`\u009A]]\x00\x1F\u00E0a\u00F2P\u00AFLAEP\u00E2A7\u00E3`{\u00A2\u0093s,\u00D5\u00C2\u00A9N\u008Cv\x0F\u00C0p\u00B18\x16\u0089J\x01\u009F\u0095\x04\u00EB\u0090-\u009D}\u0093\u0094\u00CF\u00C5&[\u0082\x07\u00C1\u00CB\u00FEFUH\x06\u00C5\x0B\u00E9w\u00F0zxEU\u0084p\u00B7\n\u008AIUAL\u00987rC\u00BA\u00BD2\u00848\u00CEq\u009B\u00D4\u00A9%\u00A1(=\x11\u008B\u00BA\u009E\tPu\x1D\u0095\u00B4\u00D6\"\u00FF\x00\u00A4\u00A5\u009D\x0B>\u00E3\x1B\u0092hX\x17\u00D3I\u00B4\u00DE\u00CA\u009D\u00A5\u00BD\u00A33\u0083b\x14\u00E9\u00E2K&\u00A3u\u00DDvJ\u00EA\u0082\u008A\x04I\u00B3-\u00A5:\u00D7\u0092\u00A9\x1D\u00A9%Z\u00F74n\u0082\u00D0\u00DFG\u00EB\u009F\u00DEZ\u009B\u00B2\u00BBL\u0084\x01\u00B7?U\u00F5Qs\u00A0\u00B1\r\x18.\u00E4\u00FEuO\u00F8\rF\x06\u0085\x05Z\u00BBl\u00F7_\u00DE_\u00C3\u0093_\x06\u00AE?P\u0092\u00AC\x11\u0099w\u0082\u00EAj@'\"\u0085\x17sj\u00F3\x1A>hS\u00C4\u00E1\u0099P%%\u00BA\u00F1O\u00EA\x06\u00D6~t&\u00B0\u00F4\u00A1\u00A9/KlA\u00FB-\u00FB\u00D1\b\u00DE\u00CE}\u00E9\u00E39\u00C7\x15\u00C42<|\u00CFi\u008E\u00E2\u00A8\u00A1.\u00B8\u008F\u00F6H\f\u00B7J\u0098\u00F9\u00A0\u00B4\x16\u009D\fLZ\u00A53\u00C1\b\u00C5(tLRbM+\u00AF\nK\u00B2\u00F9%\x12O\u00A6\u00B0G\x7F&p\u0099\x1C\u0085P\x01b\u008D\u008Eiw \x044\"\u00E3gg(\u0084\u00E0~\u00BAq\u00EEUH\u00C4\u00B5Z\u00F7\u00E99\u00C8\u0085\u00ED\u0094\u00C8\x07Ty\u00B9\x16\u00B2\x18\u0087\u00A4\u00DC\u00D1\u009E\u00A9\u008ESM\u00A1\x1A\u00E2i\u00C7\u00E8*CAe\u00F3~\u009D\f\u0097V\u009F\u00B2\u00A2j0\x0B\u0083j\u00C4\u00A8\u00BE\u00CF\u00F2\u00B0\x18&\u00D2\u00DB``_\x19\u00F3\u0090\u00A8\u00A3o\u008A\u00AB\u0095D\u00F4#\u00A3\u00B4;\u00C7\u00D2\u008C\u00A8\u008D\u00B0\u008B1\u00A9\u00EFV\u00E3\u00C9{L\u00D8\u0094\u00D7\u00E3\u0080\u00D3\u00F6bhh\u00AB#\u0092|\u00C6\u00CEg\u00B4\x018\u00B0\u008F\u00AB/\u00EF\u00CF\x1D\u00CF\u00BE\u0084k-b$A\u0084kO\u0092\u00F9.\u00DD\u00FA\u00C44`\t{\x04\u0095\u00CBp\x18\u0084\u00E9\u00CB\u00B5'i\f\x04sH$\x02t\u00C8v\u008B\x01\u00F4\u00F7\u0089\u00D9X\u008F\u00CA\u00F3\u00B1\u00DE\u00D3\u00B0\x10Xg\b\u00E3\x1C\u00F5\u00A8\u00E8C\u00DFh\x00Dn\u00A8\u00AA\u008DP\u0090S<\u00A0\u00AD\u00BC\u008B8\u00B38W\u008E%=\n\r\u00B5\u00F4c=\x0E\u00C1\u00AD3\u0083\u00EEv\u00C4\u0082\u00C2\n(\x0E\x1C\u00EE\u00B4bKN:\u00B6T\x11\f\u00F3@Z\u00B9\x0F\t1G\u00E6\x0E\u0089\\<\u00AFAJd\x03\u00DD\u0092\u00B31\u0088\u00B4\x17\x00KJq\u00C0\u00C3\u00B6\u0090I\u00C8$\u0088\u009C\u00B9<\x0F\x15m\u00A7\x05\u00EB\x06k\u00C4\u00E9\u00E9q\x10\x10\u009E\\\u00E8\u008C%@\u00B3\u00EF\u00B0\u00BF\u00D2\u00F1\u00B5\"B\"\u0087\x0F\u00DE\u009A\u00C4\u00F5|\u009A\x16\u00C6\u00C7\u008C\x13\u00E1\u00BArURB\u00F5=\u0091\x02\u00BDn\\\u00EB.\"%\u00B3*$\u00A8I\u00EE\u00F3\u00E6\u00C1\x14\x18\u009E^\u00ABFj\u0091T\x1C\u008E\u00D7d_:`\u00B8\u00D0\u0088\u00ED9'A\u00B3\u00B3\u00BE\u00AB\x1Ax\u00AAb\x07*\u00F6 tC\u0085D_\u00AE\u00AF_\u00DA\u00AFn\x1E\u00BC\u00E8\x0F\u009Ad\u00CC0\u00D7\u00AE\x1A\u009CR\u009F\x11\u00D0\x1B\u00BEU,Q\u00BA\u00C86J\u0095-\u00F4\u00FBn\b\u00C9\x7F\u008B\u00DB\u00AD\b\u00A1\x11\u008E\u00EE\u00D1\u008E\u00DF\u00A5\u00CA\u00DC\u008Az\u00ECD\u00E4\u00AD\u00AF\u00C9\u00A7\u00EFj\u00E7\u00AE7\u00E7\u0084D>\x01<\x060\u00AD,\u00FEQ\x12\u00BDvY\u00DA\u00B1a\u00D2\u0096\u00A09\x14$\x17*qF \u00A6G\x02\u008A7\u00A0\u009B\u00D0\u0094\u00C2\\\u00E5\u00D3\u00CBKA\u00C3\u00A1\u009E=\x1F\u00AD\x02i\u00E1\u00C0&\u00A2\x04m\x01\b\u00C2\u00DF(\u00D9e\n\x18\x0El\"b\tQ\u00A7\u00B1\u009BD,\u00CF\u00C3\u00C1\u00DF\u0086\x18\x04\u0080J8\x02\u00E9\u00DA\u0080\u00C6\x1C\n\r\b-\x00\u008Bz\u00B0d#\u008A0\u00B5\u0096t\u00AE\x0E\u0088\u00F17\u00BD9\u00D7P#\u0080\u00FCI\u00C2J\u00C4E+}\u00CC\x00*\u00BA\u00F0\u00EC\u00AAT\u00BBjC(eFP\u00CF\u0082\x1E\x1A\u00EA\u00F5\u00AD\u00AC\u00F5\x1C\u00D7r_\u00D7\u00BA\u00EE\u0091\u0092\u00ECKC'1\u00A2f\x07\u00D0\x10\x15\u00C0\u0094FC!\x06y\u00E0@\u00B4\u00A3\u00DF\u0091\u00CCW\u008C\u00CE\u00C7\b\x1B\x0F\x06r\x1F\f\x06@E\x0F6\u00F8\u00F6\u00C4\u008B\u00FB\x07\u00F6g~?R\u009C\u00F9\x10\u00D2g\u00DF\u00A5q'\x1E1\x0E\u00E35\u008D\u0098\x15\u00DA\u00ECa\u00B4P6^\u00A9\x07\u00FA\u00DEl\x0E\u00B6\x12\u00BD/\u00D7\u0094G\u00A0$\u00B6\u00CEGNtF56w\u00E2\u00A2B$\u00B3\u00AA\u00BET\u00FB\u008E\u00BB\u0099\x03%2%\u0084\u00C1\u00F0\u00C8\x1D7VL\x00\u00B0|\u00C4Q\u0081\u00BA\n\u00A4H\u008FW\t\u0095\u00A8\u00B1\u00D7\u00BC\x05yN\u00F3\x17\u00EBoC^\u00BFVP6-aLlY\u00A99%7%v\u00D8\t\"\x02^\u00C1E\u0092n\x13M\u00E2\u008B&[j\u00EC\x007{\u00C9\u00A7\u00E2i\u0080\u00D55\u0083\u00CC@9\u00FB\u0099\u00DF\x0Fkk\\\u008CA\u00CFI\u00CF\u008C\u00CF]\u009D\u00F2\x1B\x14,\x16\u00B3\x00J\u008D\u00B8\x0B\u00CA\u00AB\u00DD\u00A6\u00E3\u00E7w]\u00D3U\x11\u009D/\u00EB~\u00BDs\x13Z\u00A9\x1C\u0099\n,\u00F4\u00B2\u00BA\u0090\x13\u00B1\u00A0$7\u00D0}Ozi\u00DD\u00CA \u00DA\u00D5\x10\u00A0\u0082\u00B1\u00D2\u0090\u00C3\u00F9ij\x16,\u00CE3\u00CD\u00CBy.v\u00C0/0y\x1B\u00D2{\x13\u00F3\x1CZ\u00C1%\u00FB\u00EB\u0090%KQ\u00C1D\x0ED:\u00AF>\u00F3\u00CC\u00EF\u00EFo\x1Do\u00FB=;\u00EE\x01\u00FB\r\u00BA\u00AD\u00A0b\nDDEL\u00B91\u00AA\x1B\"vAS1\u00928\x0Ba\u00E8\u00D7Fhs0\x7F\x7F;\u00B5\u00DBU\x04\x12\u00A9:\u00DE\u00F5\u00FE\\`\u00F4\x1E\u009Cb\u00F5\x03\u00EA\u00D5\u00FD\x15\x1B\u00B0\x04?\u00F1\u00FCq\u00BE\u009F\x18\u0081\x16\u00B8U<\u00C6a\u00A5\u009D\x1D\x1E\u00B1\t{\u00DA\x11\x14\u00C9\u00B9%\u008C\u00B7\u00BC\u00F7\u0096\f$\u0090\u00C1\u00C6\u00CA\u00C9e#0\u00A2\x101\x14A\u00D6\u00BEE{\u00CD#\u00AD\u00D2\x19\u00F3 \u00A1a\u0090\u00A4\u00EF\u00C2\x07m\u009D\b\u009A\u00BB{,\x11\x0F\u008F\u008B\u00BC\x03a\u00EF\u008A67g\u008F\u00E9\u00B3\u00CE\u00B6\u00A6P\x02\x19\x11\u0089.\u00DC\u00F0Z\u00D8:\u009F\u009F\x07\u0090\u00A9\u00CE\b\u00B9d\u00CE\u0080\u00A1\u00B6\u00D7b\u00BDF\u00DD,\t\u00B0\u0090e\u00D4/\x10\u008A\u00E9\u0088\u00B3\u0090\u0087\u00DB\u00803\tHi\u00C1u\u009FK\u00AD%\u008E\u00B3\u008C\x7FL.b\u0096TT\u00AF:\u00E0\u0098\u00E4\u00A2\x1A[1\r\u00A3@\u008D0\u00E8\u0089\u00A8\nMF\u00C15l\u00A6:V\x13\u00DA\u00C0x\u00D8`\u00D7\u00C94l\x0B{\u0082]8O\u00D71Of\u0088pkn\u0098\u00CB\u0087\u0091\u00D0_\u0091\u0093\u008AC\u00B0#<C\u00B6sLV\u00AB\u00D2\x1CU\\76\x1Fr\\\u00B0\u00BD\u00ED\u00A9\u00DF\u00DB\u00BF\u00FD\u00FE{_x\u00E2\u00F1\x03\u00BC\u009AK\u00B8\u00A9\t\u00A9\x12T\u00F6b\x11\u00FEz\u00EEB\u00BC\x0B$\u00EF\\3\u00A2\x13C\u0098\x17Q\u00BFQ.ATG:!\u0094\u00C5^\x10\x7F/a\u00CF\u00A7w\u00A2\u0082S\u008A\u00F2z\u00AF\u00BE\b\u009B\u00FD\u00A3y7\f\u00C0\r\x06\x1Ec\u00C3\x05Q#cR\u00A5p7\x1C#\u008A\u0099N_4@T\u00ACB\u00F4\u00F3 \x132\u008B\u009A\u0083\u00DAXe\u0082\u00AEPp\x07'\u00C8\u00C3P\u00FDL\u009DX\u00B9\x11\x1E\x15q\u00B4.\u00E5.T\u009D\u008D\u008B\x03\u00BB#\u00AB\u009C\r\u00A1\u0082&\u00E1\u00C1:~\u00E3\u00E0\x1D\u00A8\x1A\x00\u00B41\u00A4\u0084\u008D\u00CF1\u00A3\u00ED\u00EE\u00A50\u00D1dJ9^C\u00DA\\\u00EB\x01\u00F0\u0099M1\u0099.\u00B5\u0081\u008AS\u00F0\u0092\u0092\u00D9\u00BET\u008B\u00A6[\u00DF\u00B2\u00C87\u00E2\u00F0\u00C95\u00C7\u00F5\u00D2\u0082\u009B\u00A2=qI\x14\u00B1hM\u00A5$\u0096Z#\u00E4\u00A1k.\u00C8\u00BD\u00B8Z\u00C0\u00D5\x12\u0086\u00AC\u00BE\x13\u00CE\x07\u00F3\u0092\x17\u0084B$m\r\x1A\u008B\u00C6\x15\u00EDZ\u00BA@\u0085\x12\u00B8\x1E;\u00D7\u00B7\u00AE\u00FE\u008C\u008A\u008F`\u00BF\u009C\u0088\u00C3\u0096\u0084+C\u0097\x1A\u0097ax\u00EA=\u00EF\x7Fa\x7F\x1F\u00BE\u00EDw\u009E\u00F5\u00A7\u00F1*^\u00BFE\u00F4\u00D2qW&\u00A0A\nz\u0090\u00D0,\u00A4\u00A9\u0088\u00D5\x16b\u0093NG)\u00B7\x18+\u00D1\u00E0XIF\u00F3\u00B6_d2\x1B=\u00D8\u0091\u00E7\u00B9m\u00B1\u00E1\x04\x1A\u00AC3k\u00E7\u00B5\u00FB\u008B\u00D1,6\u008B\u00C6\u00D4\x18Gp\u009B9IZ\x03\u008F)\u00D1\x0F>\u00AA\x1BD$\u00FBt\u00EE\u00DDh\u00B1\u00D1\u00AB\u00B6n\u008F}\x12\u00AA\x16B\u00EE\u00A1\u0080\u00F0V\u00C8\u00AD(\u00BB\u00C4\u00C1\u00FB\x1E\u009C7\u0095r\x17\u00969\u00E0\u00DCg!\u0088+\u0089\u0093\u00EFd\n$\u00A2\u00C3\u0081\u00CD\u009D\u0085sbQ\u0087!\u00D1\u00C3\u00AD\u0098UxCj\u008F\u0089\u00F4r\x04c\x18!\u00F4e\u0088\u009ChFJ\u0084\u0097\u0082k>\u00E8\u00AA\x13\u00F0\u0099\x19T;\u00B9\u0096\u00F4|\u00FC\u00B22\u0095\u0084\u00FB\u009D0\u00BB\u00FE\u00AC6$\u00F5\u008F:\x1FjG\u00D7v\u00C8\u00DDaw\u00CFI\u00A0\x14\u009DB&\u0092\u00EC\x1D\u00D2\u008Bi\u00CC\u0090\u00BC\u008DH\u00B3?i_`\x1E\u00C1\f}\u00DDR\u00E7\u00AF\x1C\u00880\u00B0^\x1A\u0093\u00E9\u00CC\u00AE\"K\x16\u00E9\u009EL\u00D2s\u00CD\u008A)\u00AE^\u008C\x1E\u0089\x19\u00F1\x06\u00DER\u00B9\u00CBs\x11\u00DF_\u00BF\u00DE\u00F0\u00CC\u00F7\x7F\u00FF\u00EF\u00EC\u00DF\u00EDW\u009F{\u00CE\u00DE\u00E6\u009F\u00C7\u0097\u00CCN\u0084\x13\u00D2WD\u00B2\u0086\x0E\u00DF\u0085\b\u00ECD@uLL\x03\u00D9~\u00A9\x07\u00C8\u00F3U\u009C\x05\u00BAg\u00DA)Z\u009B>\u0080q\"\u00EEqF\x05\u00EC\u00D7\u00A2\"4{DC'\u00A9\u00E6\u00C0V;Vcj\u00F2\x1A\x18\x19\u00C0\u008D\x1B\u00EE\u0091x\x0F\u00C4\u00CE\u00CF\u00831\b\u00E5k\x0FUBh\u00C1A\u0081\u00E8H\x15&\u0093\u0094,\x18\u008AQ\u00D5: i-\u00E6\u00A6\u00D8t0\x0F\u00A1\fz\u0087;\u00B6\\\u00B3\u0096h =j$z\u00B9\u00E9\u00B2|V\u00EA\u00FE\u00D1\u00A9\u0083\x06\u00C19-#\x7F\x01_\u0099MC\x06b6zml3\u00D1\u0082\u00D6\u00BD\u00DE@\x11\u00F2\u00B4\u008A~<t\\\u00F6\u00AA\u00B8\u0099\u00EA\x07\u00CA;\u00B2\x18\u00FF\u00FC@\x16N\u00C9E\x1D$\x14j\x14\u00B1!\u008B\u008Ff\u00B2\x15]*!\u0090.A \x19\x0E\f(\u00A6\u00A1\u008C\x7FB\x17\"`1\x0B\u00ADI\u00D1\u0084\u00A4/\u00EA\u00B7d.\u0092\u00C6JO\u0096\u00B4\u0096\u00FA$\x15qk\u00E7\"\u00DBKuqr\u00B51\u00932\x12\u00B38o\x1E\"\u00AAB\u009F\u00DBs\u0080W\u00BF\x01\u00AA\x1D\u00A2\u0083x\x00\x0E\u0083\u00BD\u00FDi\u00C7G?\u00FC\u00B9\u00FD\u00D91^\u00FD\u00E1\u0087\u00FF\u00C7\u008B\x06{wZ\u00F6\u0097\u00D0c\u0094\u00C7`\u00D1\u00E1Hp\u009A\u0098v~}?\u00878\u00EB\u00B7\u00DB\u009E\u0085z\u0097[Q\x06\u00BDx\u00F5\u0089\x13\u00DA8\x13w;o\u00B9\x7F\u00DD\u00A7\u00F4q\u00E3\"\x12\u00E3\u00A0\u009DA\u008CF\tF\u00A7>>\x06\u00F0:\f\u00F71p\x10\x05\u0084aMR~\u00B0\u00F4=U\x05\u00E5<\u00B8\u00BC\x04\u008C3\u00B0\u00B6\u009B3\u00DBQ\u00C9\x14\x00\u00A9JH\u00CD\u00D0k\u008A\u00F0\b\u00DF\u0093&$\u00C4\u00B8\x10f IHJ\u008FYR?a<\u0089\u00D1\x0E$c\u00B0Yl0\u00D7\u00BE\u00DA\x012\x11j\u00B0\u00AD\u0083\u00C7\u00D3\u00D8\u00B8TH\x02\u00D6\u008E\u00C7\u00FD\u00E2\u00FE\u00D6\x10\u00EBh\u009FM\x1A\u00EB\x128l\u0091\u00EC\u0082\u00C3\u00DD\u00D0\u00A6k\x1Ba&\u00D4\u0097\x14\u00A7\u0084\x16\x03\u00CA\u00F9\x1Ad\x1E4\u00BEI\u00E7\u0097\u00AD&\u008D\u0094\u0092\u00BE\r\u008E{\u00CB\x02\u009D\u00DDS1\u00B0\u00D8=|o\u00E3\u00D2\u00B5^\u008CA\u00EAH\u00F6U\u00A2\u00A4\x19/S]Rx6\u00DB\u00C8\u0089\u008A\u00F9\u00B1^/a\u00A1Y\u00A9&\u00BE\u00B4mp\u00DC{\u00F2\u0099\x17\u00ED\x03O\u00BD\u00BA\x03\u00C0\u0093\u00FE\u00E03\u00C0\u00FE\u00EE\u00AA/\u00D0uvC\x05\u00F5H\u0097m\u00A5\u00BC\u00A8\x0B\x17\u00F1\u00DC\u00A5\u00A7\x17\u00F2\u00E8\x16\u00F6\u0085\x11\u009C\u0083\u0087\x12\u0081\u0088@\u00CBh\u00B7\u00A8.K;w\u00C3\u00FD*w\x06\u00F4\u00E2\u00A8\u00F34\u00A6\u00BE\u00FDZ\u00E9y\u00C5\u00C5\x1D\x03\x17\x00\u008F\u00A0\u00C8\u00C5\u00B0\u00F4\x1FV\u00D1\u0081\u00B1\u00ED\u00FBP\u00AF\u00A1\u00E0\u00A2d\f\u00A6\u00DD\u0098\u00C2V\x10\x19\u00F3UeIp\u00DD\u00C4,\u00C0\u00D0hg0\u00AB\u00ECZ)\u00B1=\u0093\u0093\u00FA\x1Bn\x18s\u00F2\u00B1S\u00DEM\u00C31\x01;\u0082\u00C0\u00E6\u0094\"C\u00B67\r\u00F3p\u00C0,\u008Dp\u00CA\u008A\x17})U\u009A]\nd\u00E0\u0080O\u00C3\u00D1\u0098\u0081\u00D8\u00B3\u008B1\u00F1\u00FA\u00CE\u00B4\u00C4p\u0096\u00C8CHB\n\x0E\u008B\u00E8\u0081e\u00B3\x15\u00BD\u009B\x1B\u00B1\u00CEkR\x1F\u0088\u00B5\u00EA\u00CA\"\x14\x01v\u00DB\u0085\u00B8\u00A3\u00DA\u0094\rB\u008C\u00CA\u00EB\\\u00AD\u00AB\fzj*L2 \u00ED\u0092\u00E1\u0080_\u00C1z\u00DFx\u009DCi\u00C84\u0084v.\u00DA\u00ED\"BF\x0B\x13\u008C\u00B9P\x1B5\u00EE\x01\u00D8\rJ\u00BDo\x13\u009ELS\u00C7\x15P\x15(\u00E6\u00F1\u00BDg?\x03D\u00E2\x00\u00DE\u00E6\u00EF\u00FC-\u00F3\u00AB\u00FF0Cd\u00E5Ah\u00D23\u009E\\\u00AF\u008B\u00D0\u00B8\u00A8e`k\x12TO:\u00EA1\rk\u00AArSQ\u00EEHG\u00EE\u00E9\u00CA\u00E5%(\u00CF\u0084e;\u009D\u00C1(\u00B0\u00AA\b_\x0E\u00CFz\x15cZ34\u0089\u0088\u00B2=\u00DC\u00D9\u00A7G6p\u00E3\u0083\x06\u00C4 \u00E8\u00C3\u00C2\u0096p\u00806\x04>\u00E6\u0083\f \u00C3M<\u00A2\f\u00E5a\u0098\x1EhA\u00A6&\x19\x1DG_&'\u00EFA\u00B7\u00B9i\u008DM\x12a\u00DA\u00C0P\u00814N\x06Q\u0081F\u0096\u00C1E\u00DD\u00B8\u00A8\bF\u00E7q-\u00D1\f\x04Jf\x13m\x0F\x00\u0098\u0091\u00A9)\u00D4!\x17dn 2{\x1F\u00B40k\u00ED\u00C7\u00EF\u00BC\u00D9\u0082.\u0082p\u0087[X\u00EByN\x19\u00FBZ[\\\u009F\u0095\x1BA7\u00AF+\u009DZ\u00D7!t\u00FA\u0094\u00C6\x17(|+\u0089\u0099\u00CF_\u008CB\x15\u00A1J=\u0096\x0E\u00CF\u0088\u00C5\u00B4A\u0088V\u00C4\u00B1\x15)(D\u00A2\u00F3\u0080>\u00FE\u00A4\u00B5zp\u00CB\u00BA\u008E99\u008A\x1E\u0092\u00A1\u0095\u00D8P\u0088\u00B4\u00FB%b\fR\u00E7\x13s\x0Btc4>z\u00B8|8\u00CE`]7\u00CF\u00DC\u00FB-\u0080\f\u00E1;\u00E7;?\u00BDM\u00C3\u00DC|!\u00DE\u00D0\u00D7\u00B7\u009C\u00A8\u00D5#\u00D0\u00E3\x15z~\u0082-\u00C7o\x13l'4C\u00ED\x04e\u00ED>\u00D4\x053\u00F3\u00B23\u00A0\u0080\u00F6\u0096i\u009Et\u0083\u009E\x19L\x12\u00BB\u00DA\u0094\u00AAQ\u00F6\x02\u00F5S[\x7FW\t\x00\u00E3sk*Q\x1A\u008E\u0080G\x03x\u00DD\f\x0F\u00B0\u00E1\u00C6\"\u009B\u00E0\u00A0\n\u00B1\u00A11\u0083\u0094\u00F0\u00F1\x1EtgM(\u00E2@\u00F9\b\u00F4@44\u0096\u00E6+\x1A\t\x1DXlj\u00D3\u00C1\u00EC\u00C5\u0090\u00FA\u009E\u0092\f\u0099\u0093 \"\u00E8\u0086\u00C79\u00B5f\u00A9v\u00A0\u00CE\u009D\u00EE8<\\\u0089\u0083\u00F4\x19\f\u00C8\x0B\u00B9\u00CC\u0098\u009F\u00C1\u00FEH5\u0091w\u00C2i(I\x06\u00A0\u00CDX\u00D2 \u00BE2\u0084[\x04\u0082bH\u009A{m\u00BE\u00BA0\x00\x11rJz\x11qAi\u00C1{KI\u00DA\u00A5\u00BC>\u00BD\u00AD\u00BDhgIv\u00D2\u009AHBT8qC\x12\x1C\u0084\u0083kR\u0097\u0085o\u00B8\u00EE\u00D5=\x10\u00EA[2\x02\u0096i[<,\x13\u00BEx\x19\u00E2\u0098a\u00D6\u00FCr\f\u00F1\u00DF\u0080\u00C9H\u0099\u00E8b\u00AF\u00FB\u00BAvyo\u00F3\u00CE\u00CE\u008Eg\u009E\u00FD4@\u0086\u00F0\x1F=\u00F9\u0081O\u00FE\u00AF7\u00F7\u00F1x<B\u00AA\f\u00D6\u00D0\u0081\u0095\u00B4\u00CF\u00E4 \u00D4\u00E2\x15\x11e\u00D4aJv$d\x06\u00D6sW\x14\u00C1cM]Y\x19\u00C8\u00D6R\u0095\x01\x1B\u00CD\u009D\u00D8\x19\x14\u0099\u00C2\u00B8u\u00AFB\x1F\u00B3\u00A1\u008E5\u00FD\u00B9Im\x04\u00C20\u00A9\f9\u0083\u0080\u00A2\n\x1F\"\\\u0090W>p\x05\u00C7Aubs\u00C3f#5\u00BF\u00CDA\u00A2G\x04k%\u00BC\u008C{o\\\\\u00B1\u00D6=\x17Q\x12\u009F\u00D7\x1A\u00E9\u00DB\x13\x18\u00D7\u00CC\u00CC\u008E\u00AD#\u008E5\x15\u008B\u00DD\u00A7\u00D5\u00B9\u00B2\x1F\u00E82\u00D2HT\u00D5\u00B2(\u00A3\u00D6\u00DA\x01=\x14\u00C2Y\u00DDk \u00C4\u0090\u00F6\nh\f\u0084\u00C2D\t[g\x02\u00B3}vt\u00A0\u009BNp\x7F\u0087\u00FA\u00BB$\u00BC\x04\u008E\x17gL\u00A8\u008F *T\u00FF\ny\x04AL\u00D6h\u00A814\"\x17SH\u0095A\u00F7\u00E9u\t\u00F5\u00DCnP5 \u00AC\u00EE\u0093\u00D1\u008E\u0086\u00CA5\u00B8\u00E8\u0089\u00C4\u00BA2\u00E1ON\u0082_h{\u00D8\u00D6{\u00E78v\u00DC\u00AE\u00C4\x14\u00A82B\u00FDew\u00F0\u00D6\u00FFH\u00EFN\x1BC\u00DA=\x06\x1C\x17\u00A2\u00BET\u00EApc\x13\u00C7\u00F7}\u00D7'\u00F13d\b\u00EF\u00C03\u00BF\u00F9\x1D7\u00EF\u00C7\u00A7\u00F7\u00CFB\u00D5{\u0093\u008B%\u0091v\u0088]Du\u0097\u008D\u00C1s9\u00E9\u00A6g\u00DD\u00BE\u00C1\u00F0;U\u0084~^cP9\u00D9\u00FD\u00DC\u00BB\u00FAV\x13\u00A7\x18\nW\u00FB\x19\u00B8THe\n-,}U\u00BB^\x7F\x1B\u00B2\u00FD\u0087\u00EEx\b\u00E0\n\x03;\x0E\u00EE\u0095\x1D}r\u00A7aQ\x01Q\nU\u00E6xB\u00C8\t\t\u00B0\u0090\x06,\u00F4u\u00EA\u00AD}\u00CD\u00A7\u008B\u00AF3\x07.\x11\u00E5\x16\x00@\u00ED\x1C\u0084\"\u00E2N\u00C0\\d\u00B9\u00A1\u00C8A\u00A6\u00E1\u0096R\x1E\u00B3?\u00E1\u00F8\u00ED\u00F0\x16SI/D!\u0094b\n\u00EE\u00CE$)2X\x17r\b\u0082It\u00D0R\u00A9\u00B9&qr\u00F1\u00D4wO<\u00A2A\"P\u0080H\u008CD\r\u00CD\u009D\u0092x\u00BC\u008E#\u00D0\u0082y\u0095\u008AO\u00FBDN^\u00BBq\x164\u00E5D'z\u0090\u00E4\u00BEB&\x1E\u00A5\u00B7@\u00C8\x04\u00C8\u00BC\x01\u00F6\u0081\u00D6\u009F\u00EAS\u0089wT\u00AC\u00CBD\x16\u0083\u0091\n\u0092O\u0099\u00E8\x07\u00ED\u009D\u00AE\u00C3\"\u00EC\\\u00AB\u00F2\u00CA\u00A4-\u0084c\u00B4`p\u0096\u00DE\u0094(U\u00E7\u00CF<\u00C0\u00DB~\u00EC\u0087~\x13\u00FF\x0B\x19\u00C2\x07l\u00FB\u00C2\x7F\u00FC\u00E8\u00FF~\u00F1S6\u009E+X]\u009DM}\u00C5\u0094\x11)\"!|o\u00D2\u00F6\u0096\u008D`a0\u0094\u00E4Y\x0Fad\u00DBqE\u00E9\u00F6\u00D9\x0F2\u009CE\u00A7\u00CF\u00F6\u00D7D\u00A7\u00F2 \u00D4\u00C3Mf\u00C0v\u00D4\u00CF\u00C8\x06\u0095\u00E5c\x14?pF?vx\u00DA\u00CA\u0094\u00C9xz\u00B1@\t\u00F7a\u00B8\u00F1\u0081\u00C7\x00\u0086\u00E7\u00EE\u008F\u00D0>\f7\u00ECS\u0094 \u00A7\u00A11\x13\u0093b'\u00E92>\x16\u00D1\x06\u00D4\u00F7\u00ACc\u00A0\u009D\u00A2S\u00A0\u00BA\u00B6fkk\u0086k\u00ED\u00A0\u009A\u00A1\u009A\u009AZ\u0087\u00C9<x\u00A2)\u00EBq\u00D6\u00B9\u00AA$\x16\u00EAD\u00F4I\u00B1\f\u008Ep[N\u008B\u00DF\u008F\u0089B\r\u00B3\b>J\u00A2\u00F3)\u0092QT@\u00945B\u00D5X\u00AD\u00EC\x16\u00CB\x1E\u008B\x1C\u00BB\u00C60\u0089\x14\u00B8\u00D3r\u008D\u00CF\u00B1\x06(\u00A1\x11\x0F\u009Fa&Tu\x1D\u00BC\u00C1x\x07!\u00B7\u0084@\u00B4\u00A5\f\u00CE\u00B0E\u00CCbP\u00BAG\u0086]k\u00ECr\u00FF\u0089\u00F0\u00F7\u00EC\u0097\u00A5\u008A \u0098$\u009Ap0\u00C2\x04f\x17z\x0ED\u00C4m]\u00B4\u00B5\u00BE\u00BC\x1C\u00A8\u00BD34~]\u00A1\u00B9\u00E6\u00DF\u0099y{pz\x1C\u0097\u00E7\u00DE\u00F6\u00A2\u00FD\u00E0\u00BB\u00BE\x00\u0090!\x00\u00C0[\u008E\u00A7\u00FE\x19\x1C?\x12\u00C4z\u00CA(4\u0085\u00C6D\x03=y\u00C8F\u00C5\x1AT\x1E\x02\u0089\u00D3\u00B5\u00F8)m[\u00F4\u00DF\u0082\f\u00B2\u00EB\u00ABZb\u0094\u00EAk\u0080\u00D4\u008AHFg K{\n'\u00E6\u00FDN\x1E\u0084\u00F4\"\u00901 \u00ED\x12\u00A3\x18x2.\u00E4\u00B8\u0090\u00E3\x1A\u00F8\x06\u0080\u00FB\x00\u00AEh\x14\u00BC\u00B1\u0081\u00DD\u00A3'\x1B\u0098\u0080jat\u009BpL\u0097\x0B\u0091nJ\u00B3&\x17\u00BCT\u0082\u00C6\x1AK\u00A8\u009C\u00A2\x12i\u00F0R4\u00A1\u00898I\u00DC\u0092\u00E0\u00A0\x17B%\u00D3\u00CAR\x191\x07\x00Je\u00F0\u0088n\u00DCH\u009C\\^\u008C\u00A0\u0094j\u00C0\u00CC\u00BC\u0086\n\u00DC\u00A3\x0E\u00E3\u0080\u00A5\u00BD\u00C3y\u00FF\u00890\u00A4f\u00F1V\u008E.\x11\u0081\u0090\u00BF\x16\u00F6lK\u00B8\u008D\u00DB\u008EB6\u00EB\u00F3n\u0093\u0084\x01\u00CCk6\u00AA\u0098\u00FE\u0093\u00C4o\u00E1\u00C6\u00D1\u0087\u00EE~l\x1DZB\u00A6;\u00A1q\u0080\"\u00F4d}\u008A \x04\u00D2;\u00A1~\u00E4}*V\u00A0{A\u00D2\x16\u0092\f\u00E2R\u00E3\u00C9\u00F6\u00B6\u00B5_\u00E9\u00A2T\x1F\u00B5P\u0080\u00F2\u00B2\u0088\u00F9\u0089\u00C9\t5\x1C\x00\u00A3\u0080\u00DD.\x18O\u00DC\u00FFg\u00EAI2\u0084\x0F\u00D8;\u00FF)\u00FC\u0089\x1F\x01<c\u00D9\x0B\u008A+0\u00E4\u0094\u00C7\u0090l\u00A2\u0095\x05\u00E3#\u00AF2\u00EE+\u00AC\u00EF\u00B5\x13\u00E2o\x11,\u00EF\u00D7\u008A\u00B7\u00BA\u00D4\u0084\x16\u0099\u00B8\"\u0083\u00B3\u008A\u00A0>K%9\u00AB<\u00FA\u00DD\x1B\u0093i\u00EA\x0BP\x0BU\u00FD[\x18M\u00FD-\x17\u00E4+nx\x02\x03\u008F\x11Pzo\u00E1]Y\x18\u0085\x06V\u00A5\u00D2z\"\u00AA\u00E8S_\u00F8\x11X\x14=\u008B-\x07-U\x00\u00BD\u00E1h\x01C\x1EL\u0081D\u00E73\u00A4\u00F9\u0090\u008B\u0091\u00D27\u00A4\u00BFC1\f\u00EE\u0091\u008F\u0091u\x10BH\u00E1\u00D2\u00DA\u008F$\u00A7r\u0083&AK\u00BD`;)\u00AD\u00D5gt4\u0092\u0082\b\u00B2\u00DAo\u00F4r\u00A0\u00D3\x04\u00C7R\u008C\u00C2\u0093a \u00CB\u00C3[ \u0088Ts\u00880s\u009F\u00C3T\u00A4\u00C2\u009B\u00C0D\u00A5\u00A8\u009F\u00D0`F\x0E\x18$\x1C\u00D9\x03\x1C\x151Y\u00CC\u00DF\\\u009CZD\u0086F\u00D4'\x06\u0092\u00D1gg\u00E6\u00B3J\u00EA\\\x07\u00A9z\u00B4k2UY\u0084\u00DF\u00DAj\u00C6\u00C1X\u00BB=\u00A1K\x13&f\b\x1E\x13\ni\u00B4\u0091\u008Cd\u00E0\u0095\u00E7\u009E\u00FE\u00A7z\f\u00C9\x10\u00BE\u00FF\u00DE\u009F\u00FE\u00B5'\x1F\u00FD\"^\u00BB\u00F7\b\u009D\u00D0\u008B\u00FB!\u00A1\u00AE\u00A1\x13h/\x03\x06,\u00C4z\u00B2-\u00DC\u0082<\u008A\u00CE\x13\u008C\x17\u00B19\u0090Qg@#jMB\x1C\x1B\u00D96\u00D6\u00B6=\u0098\u0089'\u00A7\u0096\u00CD\u00A0\u00A3\x07\u00DDCVlF\u00EE\x199\u00BE\n\u00BB\u00C8\u00D8\u00E3\x00\u0088\u0086BPD\u00DF\x1E\u009A\u00E1U\u0084\u00FD\u00E0\u00CA\u00C3\u00D2;\x19y\u00B8A5\f*\bIy\n\u0086\u00B2\u00E6\u00870\u00A1\u00B4\u00D6:\u00A5\u00D5_H \u0098BA|\x07R\u00FF\u0097\u00B4\x06%\u00BB\"\x01\u00A3b\u0092W`\u00D2$\x13\u00A0%}6bN\u0095\u00D9\u00CB\u00FD\x18\u00A8\t\x19\u00B5(\x04\u00A2\u00E5\bGl\u00DE\n\u00D1d\x10\u00BAT\x1B\u00A5_\u0097A3\u00C6\u009Cq\x13<oU9$\u00E5x\u00FF\\\u00D8m|I\u00CC\ri\u00E4w1\u00D9 \"\u00CFMV\u009A\u00AA\u00C0|n[,\u00FB\u00FA\fx\u00E53\x18\u00CE\u00B2n\u0092Q\u00E8S\tR\u00B3\u00FA\u0098\u009D\x173\u0090Z\\\u00CF\u00AA\u00CC\u00B6\u00DAcq\u00B2?RA\u00F4\u00BB\u00D6\u00FC\u00C15\u00D1\u00A2\f5\u00D6Y\x04n\x19\u00D6\u00CC\u00F5\u0094\u00EA\u0088\u00A1\u00B2(c\u00E2\u009D\u008B\u00EDf8\u009E|\u00FE\u00BD\u00BF\u00C6\x1B\x16C\u00F8\u0088\u00BD\u00E5W?8\u00DE\u00E5\u009F\u00B0\x17\u00AC\u0092\u0099Dl\u00E5ehql(\u0086p&v]\u00BB\u00DA \x12\u00B2K:\u00B7\u00DA\u008C\u008B\u00AB\u0092ha\u00CD|l\f\u00C1\u00CE\x06\u00C4Vl\u00846\n[\u0098\u0080P\f h'\u00A4\x11\u0084\u00C0\u0087\x10YWXb\"\f\u00EDo2\u00C5\u00B6H.\x18\u00F8:\u0080k\f\\Y\x18\x19eS\u00B1Y\u00FDH\u0094\u00C5o\x1B\u0098\u00AA\u00EC\x01\u00B5'J\u00D8\f1E\u00E5\x19\u00A0\b\u00B6\u00DB\u00A4\u0084(\f\u0096\u00B1\b\u0092\u00DC\x17\x0Fc\u00DE\u00F0b\x0E! \u009D\u00E7[&*eD#\u0085\u00E0D\u0085%\x1B\x17\u00F0>\u0085\x1A,\u009F<fx\x10\u0084\x00D\u00EC\\kdZ\u00B9\x06oy(R5\u00E9j\u00B5\u00D4\u00FE4@\u00B6\u00DF\u0092\u00F0\u00C5\u00E8\u00FB\u00B1\u00F8\u00D4\u00E6\u00A9\u00C6uQ\u00D2\x7FV\u00870\x11!\u00CB\x1B-\u00FC\u0095_\x00\u00BF\u00C6\u00A2.t}&p[\u00DD;\x13\u009B\u00B8\u00862h\u00A8\u00A1\x01G\u00B5\u00DF\u0098VV\u008D\u00EA\x12\u00BC\u0095\u0083\u00CB\x01\u00A7\u0084\u00E0\x18\u00D6\u0081c\u008D\u009C\u00A4\x1A\x012\u00AB\u00DEN\u00D2a\u00ACu#3{\u00FC\u00F6k\x7F\u00FA\u00C7\u00FF\u00F2\u00AF\u00E2\x7F\u008FV\u0093!\u00BC\u00CF\u00ECK?\u00F6\u00FA\u00DF\u00FF\u00CC'\u00F0\u00E2\x07ej+H\u00CD`\u009F;\tL\u00D3\u00AF:\t\"^\u00C5y\u00EBw\u00BEO^\u008B\u0085q\u00E4\u00EF\u00FD}\x0E\u008B\u0096\u00DD\x00K\x1BI\u00E4\u00B9+\u00D2\u00AA\u009A\u0094\u00FF\u00B5\u00A3\x15qo\u00E3\u00FFb\x16=\x1A\u0092D\u00BC\u00A8Qu\u00DF\t\u00C3C\x07^\u00B7\r\u00D7pl\x1E\u00EE\u00A0a\u00A1>l\x1E6\x02\u00DE\"\u00D9B\x1A-\u00D3&\u0090\b\u00B7\u00D4\u0082F\u00E4\"0\u00C5\x14\u00A4t\u00A7Tw\x0F\x02\u00DFR\x1A\u00C7=\u00BA\u00EBR\u00A877Q:\x1AA\u00F2S\u00C6\u00BF\u00AA\x1F\u00C4>\u008B05\x16\u00E7\u00BD:\"H)Y}\u00D6\u00BDG\u00BB\x0F\u009C*\u00D5\\\u008F\u00F5\u009D\u0098\u00D3\u008E#U\u00A71\u00C1\u00BE\u00A3t\x11\x14\u008A\u00B97\u00D5\u00C3\x16b\x01\u0096*\u00C4\u00A9\x16\u00E8\x1C\u00BD%}\x19\u00AE\u009F\u00FAz\u00D3\u00FDS\u009A\u00AB\u00B8js\u00EF\u00E1\u0092\u00F7\u00EF\x10]\u00F5!Cu\u00DB`\u00CE\u00CDl\u00BB\x0BuQA4\x0E\x11\u00B9\u0090\u0081~\x13\u00C7\u00F4\u00EC\u00C3:6\u00A9\x1B\u00CD~!\u00E6#Zy\u00FB[?c\x1Fy\u00CB\u0097D)\u00C9\x10\x00\u00E0\u00BD\u00FE\u00F6_2\u00B7\x0F\u008Ah3\u008A\u00CFD\b@\u00A1\x07 \u00FD\u00F4\u00A0\u00CF\u0099\x06\u00C9\u0099\u0093`yM\u00955\x0B\u00FEtk\x0F\u0087[\x05L\u008A \u0097\u00D0\u00E3\x055D{\u00B3\u009D\u0087\u0093j\u00D0c\x0B:\u00C3pI\u0096\u00AC\x16\u00B2\u0096+\x13*\u00E8\u00C6\u00C7\u008A\u0094\u00F4\u00E5\u00FE\u0087\x01\u00AF\u00B8\u00E3\u00DA\f\u00BB\x19v\x0F\u00C6p\x03$:\x00h\u00AD\u00EFk\x7Fz\u00956s\x12\u00E2\u008C~\u00DA\x01\u00AA\f\"\x18K\u00AF\u00C2\u00A1.O\u00A1\u00DFF\u00B0d\x12\x10s\u00F0 \u00A8\u0083D\u0099\x16}\u009E\u00DFK\u00B0\u00FBD\u00C4\x00\u00E8\u00E5\u00C0\u00B0\u00C6\u0090<l\u00E1rM\u00CEYL+\u0097dcf@yBrW\u00B1\u00C6\u00D8\u00D4\u00D7286\x15A\u00CC\"\u009F\x1BNo1\u00D4\u00FA-\u00E3+d\u00A3\u00E8\u00E7\u0083*\u00E1\u00E4:q\x12:\u00AA\u00AD\u008A\u00AF\u00D9B\u0082J\u00D7q\x0B5,\u0083\u00DB\u00C44\u00E4.\u00D4+\b\u00CE'\u00C5\x0F\u00ED\x01\f\\\u0084\b\u00D1\u00DD\u0083V\u00BC%9e\x0E\u00C3\u0085\u00B5\x15\u00A4\u00E7\u008Bx\u00D5H#\u00F4\u009C\u00F5\u0081^\u00DD\u00A9\x06m\u00C5h$\u009CY/\u00CF\u00E0p\x03.\u00CF=\u00F5K\u00F8T=\u00F2\u0085!|\u009F}\u00C7/\u00DE\u00BB\u00F9\u0095\u00FF\u00E1\u00D1\u0095\u00A3\u0082\u0091\u00F8@nA\u00EE\u0095p\u009D\u00C5V\u00ED\u00D6o\u00ED\u00A1v\u0082KH\u00DE8_2\u009E&\u0099\u00FB\u00F9\u00F9\u00E2\u00C4*A\u00A5\u00D5:\x18\u00D4!\u00D7\u00ED\u00CD8\u00C1\u0089\"z\u00BF\u00C6r}\u00D9(\u00AA\u00DF\u00B1\u009EVd\u0091\u00F5\x13\u00B9j_7\u00E05\x18\u00EEa`\u0087\u00A5;\x11*)\u0097\u00FD\x103X\u00AD\u00EF!\u00C1\u00ED\x14{\x10v\u0084\u0084\u00E3(\u00E8\u009F\u00926\x19\u0081S\u0087\u00AFLHy\x16\x04\u00E5\u00C3\u00F2\u00EFI0\u009D(\u0085\x0Ez^\u00C1\u0092F\r \u00CAzX\u00D9\u00BF\u00BCl\u00EC\u00AA\u00C3\x004\x1E\u008B\"\u00F8\u00AE\u00CEt\u00C4\u00D0]\u00E4\u0098\x1E\u00DC\u00B5\u00F5\u00A1\u008F\u00D5[\x1B\u0089\x0E\u00A4\u0097\u00CF:&\x06\\\u008C\u0083\t{\x0E\u00944\u00E6\x059wh\u0086G\u00E7\u00F9#\u00CE\u00CB\u00F5\u00A2\u008E4\"\u00CE\u00AD\u00E8[\u00DB\u008B\u00D1\u008E\x1C\u00D0\x07\u00A0\u008D\\\x12>\x01\x05\u00BB\u00B8\u00BEr\\\u00FCM\u00ED\u00E6\u00EF\u00CD\u00CE\u0090\u00A8\u00C2\u00EA\x1Egd\u00A1\u00F3'\u00DA\u0084\u0087 \x7F\u00BC\x01\u00F6\u00FEw\u00FFb#\u0086\u0095!|\u00F4\u00FE\u00BB~\u00E1}\u00AF\u00BF\x03\u00BF}\u00F5\u00E5vt\u0095\u00C6\u009E\u00C7:\u00DC\x1F\u00C8-\u00C7\u00FC\u00FC;\u00FFn\u00C4\x1F>\u00DD \u00CC,n\u0092\u00CC\u00E0\u008D\x18\u00C2\u008A\x1ATqF\u00D7\u00A4m\u00C3\n\u00AA\u00A9\n\u00D1r\u00AD\u00B7<\u0085\u00B4\x17l\u00B7\u00EE\x1B\u0083\x1D\u008D\x19l\u00CB\u00FD\u00FB\u00F6\u00EF\u00B1L\f\u00DFp\u00E0\x1Evlp\u00EC\x18\u00D8<\u0082\u008D.\x1E\u00E5\u00CC\u00A4\x16\x04\u0093\u008E\u00E4\"-M\u00D5\x18H\x15\x01Z\u00ABA\u00D4\x07\x17\u00D0\u00D1\u00A4\u00A2\b9\u00D2\u009A\u00D9e\x14\u0081\u00E4\u008ELd\x00Z\u0087C\u00D2\u00B7\u00A1\n\x1D\u00D3\u0086\u00AFB$\u00C3%\u0093\u00C2\u00FBdIG\u00B1\u008F\u00C2\u0086-=\x1E:\u00B7\u00EE\u00CB>u\u00D5g\x16\"\u00A8\u00BC\b>=\x07\"\u008B\u008F\ts\x0B\u00E1\u00AB\u00CF'\u00A2!1;\x12_\u00AC\u00AF<O\u00CFT\u008C\u00E1\u00A8\u00CF)\u0089?Q;:\u00B5\u00CE\u00FB\u00A5\u00D94\u00F8w\x12\u00B4\u0088\x10+\u00A3\x01\u00EF\u0099\u00F0\u009D\u008Cb\nRq2\u00BA1S\b\u00C3\u00B5\x07EW\x11f1\"\u00B9%\u0093qh\u00CD{1\u00B1T\u00EB/\u00A8jQU\x0F\u00C1|\u00E0\u00F2\u00F4\u008Eg\u00FF\u00AB\x1F\u00FC\x05\u00FC\u009F5]\x0BC\u00F8n\u00BB~\u00E1G\x1E\u00FE\u00F4g\u00FE%^~\u00BE\u00D7\x02\u00C0\u00F2\x1Dy\u00B3\u0090\u00EA\u008D\u0098\u0092\u00936I\u00DC\u00F6?\u00E8j\u0082\u00BC\x0B\u0095r\u00DC\x19\f\u009A\u009A\u00D0\u00B9\u00F3\u0086\u00D9\u00C3\u009D\u00A5\u00A64\u0086\u00E1\u00E9\u00D6T@\u0087\f\u008E\u00C0Rm)\u0099A\u00BF?\u00ED \u00C9TP\b\u00A6\u00A3\u0083\u00A5_\x15\u00DCt\u00B1\u0081\u00AF\u00C33\x16\u00C1\f,f\u00CA\x18\x03\x00GZ\u00DA-\u0098\x02\u00AF\u00EF\u00D0^~\u00FF1[P\x10\u00AF\x1F\u00D3\x1B\u0081\u0095\x0BQQ\u0081Z\u0093\u00DDX\x18\u00C2\u00C4)\u0095-\u00897\u0089qz\"\u008F\u00E1\u0096\u00CCE\u00C2-\x10\u0080\u0095\u0080rP\u00ED\x1A\u008B\u00E4\u00EFu\x1A\u00A09\u00C8\u00BFcN7\u00ADc/\u0084\u00B2%\u00BA\u0089\u00B5\u00B5\u00A0\u0080\u00E6r\u00ACc\u00D5\u00DEtz\x04H\u00A0v\u00CB\x18\x19\u0081tB+\u0091\u00F4E\u00CC\u00E6\u00DA\u00EBA\u0091\u0084\u0094\u00BC\u00F3dO\u00A0\u00A2\u0097\tV\x18pS\u00A1\x19I`\u00C6Kx\u00EC\u00BF\u00AD\n\u00CA\u009AD\u00F3\u0083\u0091\u0092\u00E5F\u008C\u00BC\u00A8\u009Dm4\u00FA\u00E9\u008C\x105VU\u00D3\u008Cc\u00EA\x1F\u00DAuz\u00F8\u00FA\u00EE\u0088\u00BD-\u0095\u00D8\u00C4\u00B9\u0085a\u009A\x03\u00DF\u00FE\u00F6\u00CF\u00D8\u008F\u00BC\u00FF\x05\u00B4\u00D7\u00C2\x10\x00\u00E0{\u00E6;~\u00F6gl</\u00E2\u008C.u\u00B8>8\u0091\u009D\x10[\u00A7:\u00F1t(\u009E\u00E9\u00CD\u00BD\u00AD\u008E\"\u00B6\u00D3\u00F1\u00DB\u00EF\u00DB\u009B\u00C4\u00C4\u00F7\u00E1\u0083s\u00C6\u00A4%\u00FD\u00A6\u00CC/-\u00A6\x1E1\u0099{ET?\u00D3^\u0080vn2\u0081\r\u0089.\u00AC\u0098\u00CD:f\u00C7C\x18\u00BEj\x03\u00FB\x04\u00EE9\x0B\u00A5R\u008A\u00B1FN\x12\u00F4\u00A4J\u00A0\u00C8>\u00C0\u00D2((&!\u00D5\u00C2\u0088\u00DD\u008F\x19.\u00D2M\u00FA\u00BF\x0Bq`\u00B1!dfb'tIq\u00AE\u00A5(\u0092\u00EA\u00CC\x1Dp8\u0089o\u00CCbJ{5Q\x11\u008D a\u00B1\u008Fi\u008Bh\u00FD\u00D7\u00A2\u00B6\u00F6]R\u00DE\t\u00D5\x1Dq\u009F\u0091q5\u0085|\u00DC\x11a\u00FAn,\x04\u0082$t\u009F\u0091\u00BE\u00ED\u00D2\u00ED3\x14:\u00A4q\x06Z\u00E5\u00B9\u0096L\u00B1\u0092\u00AB(\u00A4\u00BA\u0084NC]\t\u0084 rI\u00EA\u00BBb\x06&m#\u009D@\u00DBy\u00B7tz\u00D4y\u00ECo\u00ACC]\u0083Z\u00AF\u00F9\u00BD\u00DFW*\u00C2D\u00EE\u00A9\u00B0\u00C4\"\u00F4s\r\u00E6\x17T\u00887\u00F2\x1E\u00E6\x1B\u008Eo{\u00FAgqz\u008D\u00F3\u0081\u00FF\u00E0\u00FEw\u00FD\u00C3g\x1F\u00DD\u00C7\u0098w\u00D4QDd&\u009A]a\u00D8\x0E\x187iI\u00FD\u00BC%7\u0099\u00D0C\u0087\u00E3\"\u00C8\u00E4\x1B\u00B5A\x00\x00 \x00IDAT*\u00E6\x1A.\u00C2\u00BD\u00A1\x07\x15\r\u00EBz}\u00B4\u00E3\u00CB\u00DF\u00CDGl\x1CJ\u00BAU\u00E4\u00FA\u00B3\u00E6\u00A9!\u00E13|9\u008C\u00A0[\"\x1C\u00A91\u00E9eX\u00DE,^\u00D2B\u009F\u0085z\u00AA\u00F2\u0093\u008C\u0097\x03\u00AF{\x04*\x1Dn\u00B8x\u00F8\u00FB\u00C3F\u00E0\u008B'\u00A1\u00DE\u008E\u00C9E\u00ADu\")/f//\u00C1\u009C\u0091[p\u00F0\u009A9\u0083\u0090\u00E7\u00E9\u00AD\u00B5\u00AAuz\u00F0^B\u00C8\x19\u00DF3\x19\u00EF0\u0091\x04\x16*J]w\u00CC~\u008DS\u00F5\u0089\u00C0\u00A7c:n\u00DC\u0097\x02IP\x7FI\x0E\x1D!\u00EB\u00DA\u00E9V(\u00A9\u00CD\u0083\u00CF@I*\u00FD\u00BE@b\u00D7*%\u0093\u00F6\n\u009A\x1A@\u0096\u0083[\u00DD\u009B\u0085\x18neZfM\u00C7\r\u00F0\x1D\u0098;07\u00F8l\u00C7\u00F2S\x1B!\u00C7\u00DF\u00A6\u00E8A\u00EC\u00A8\u00AD\u00D8u\u00DEu\u009E\x17\u00EE\u00CD\u00ABjK\x05\u0088\u00F4\u00EE\u00D7\u00EB\x1A\u00EDk\u00BA\u00D0^[\u00FB\u00DA}\u00BA\u00F5\u00CF\u00FB\u00F5\u00DE\u00CE\u00CF\u00FB_5Z\x1C\u00B8l\x03\u00E3\u00FB\u00DF\u00F7\x0F\u00CF\u00F4\x7F\x0B!\u00FCy{\u00F6\u00E7\u00FE]\u00BC\u00E7\u00D1\u00AF\u00DA\u00EF\u00DE\u00EB\u00B0\u00B8\u0088zG\x16\u00FAL\x02\x04\x1F\u008B\u00A1P\u0085\u00A44P\u00D27\u00AEY\u00C2\u0099\u00F9\u00C0+\u00D9H\u009F\u00ED\u00E1;\u00D1\u00C1\u00B2\x07\u00A4\u00E5\u00B92\x1C\u00F6\u00C0\u00A9RE\u00D8Fk?@b\x0F\u00A1V7\u00FA\u00C4\x03\u00C5\\\u00BA\u00BA\u00A4>j\f\u008E\u00B6$\u0089\x13\x1C\x17g\x1E\u0085#\u00BD\tA\u00DC\u00D4yi\x1B\u0088JJ\n>\u00F2B\x04\u0094\u0094\u0087\x16\u00F8\u008C\b?\u009Fq\u0097\u00CE$J\u00AA:#\x15u\x1FKB\u00CC\x1C\x05\u009D?\u00CB \u00A9\u00DC\x07\u0097D%\x172X\u00AA1Q\u0088K^\x10!\x02\u00B2E\u00A7\u00AD]\u0089Y3f\x19^\x06\u00C5\u0090\u00B4\u00D1\t\u00C1\u00F7\u00C12\u00EE\u00E9\x01\u00A14W\u0094\u00A3\x10s\"\u009DE\x05\u00AA\u00EFe\u0098;3\u008E\u00F6J&P\u00DF\u00EB\u0089\u00EA:\u00A3T\u00D5X\x1CY*=\u00DB\x10\u00F4\u00E8\u00A1\u00C4\n\x18\x02T\u00D2,\u008D\u0094\u00D3\u00E1\u00C9@\u0094:}\u00E4*\u00F2D%\u00CCjT?:\u00A2\u0080\u00A4\u00BF\x10E\x1B\u00A3;j\u00C3]\u00F6\x07\u00EC'\u008D\u008F\u00F2x\u0098\u00E0\u009A9n\u00DE\u00FB\u00F4\u00A3\u00A7\u00FE\u00BB\u00BF\u00F0s\u00F8\u0089u\u009An1\u0084\u00E7l\x7F\u00E5\u00BF|\u00F8s\u00BF\u00E86~\u00B8\u008E\x0E\u009E*C\u00C5\u00A8\x0E\u00A5\u00CAP\u00C5RB\u00B7\u00E7r\u00D1\u0080\u0086\u008C~\u00DDx\u00A7c\x01\u00BFWVP\u00F5\x0B\u009C\u00C3Z`?V\x02\u00F7$\u00EE\x16\u00FF\u0090\u00C8@j\u0081\u00AE\u00DB\u00E0]e\u00C8qX\u009B\x12\u00E3\u00BF\u00C5\u00F4\x16F\u00D7\x18agnN\x11yxHP\x11\u00BD\x13*O!\x06\x1A\x15\u00A7\x1E\x19\u00AF\u00D5nJ\u00C3\x11\u00D5\u0090\u00C8\x14@\u00B5A\x19\u0086\u008E\u00D2\u00FB\x15\u008E\u009C;(u&\u00D1\u0088\u00DD\u0080\u00DC\u00D9I\x11\u008D8\u00BC\u00DC\u009E-\u00F3\u00D1!b\u00B6\x1Ce\u00E4^h\u00B1\u00B3\r\x0B\u00C2\x0E\x1E\x12\u008B0\u0092\u0098|\u0089\u00A3\b&`\x00fTnj\u00AE\u00C1n\u00EB0\u00F6\u00CFip\u00D5\x18\x143\u00A1\x07\x11\f\u00816\u008B\u0084\u00DE\u00FC\u009C\u00F5\u00B7\u00C3\x19\u00E2\u008Cb*qi2\u009Ae\u00D3\u0099\u00CC\u00C2\u00CD\u0089F\u0096Ws\u008B\u008E\u00E4\u00C6\u00AB\u0084\u00ED\u00D3\u00B1Z\u00F8y.K\u00B1+\u00DE!\u0093\u00962\u00B0J6\x01^\u00DF\u00C2\u00AD\u0093\u00DB\u00FB\x01\u00CCKk\u00B7\u00F5#!%\x10\x1B\bKl\u00B5\u00E8Z8*J\u00F1\n\u00C0\u0084\u009B\u00E3x\u00F7\x13\u00BFh\u00FF\u009E\u00BD\u0082\u00D3\u00EB\x16C\x00\u0080\u00BF\u00E0\u00DF\u00F5\x0F>v\u00F9\u00FF~\u00F8f\u00D7\u00CD\u00A5\u00FF\x17\u00A1\u00E8e\u00F2\u00DF\u00B3F`\x11\x19\u0089\u00C4\u0080\u008A18C 0\u0083\u00F2.\u00BB\x02=\t\u008B~\u00DF\u0091\n+\x17\u00C7\u00D2E7\x1E\u00CAJ^5\x1D\u00A4N\u00C4\u00C4\u00DD2&.\u0086I\u00B4\u00F6;\u00E3\x11S\x18\u00CB1Y\u00B6\u0095\u00C9\u00E7,2\u00F8h\x1An\x1ATO\u00D8\u00EC\u0096\x06F\x00\u00CCh\f5@\u0086\u00C0L0\x02\x16\x03\u009A\b\u00C4dg\u0090\u00AE\u00CF\u00B5\u0093\u00C4\u00E4\x15\u00B9\u00E8It\u008C\x18\u0099u\x1D\u00846\u00DA\u00B1@3\u00B1\u00FD\u00DB!\x15\u008A\u008B.\ri\u009C\u0081m\x063\u00BF\u00C0\u00B1\x13\u008EOg\u00D19\x0Fu \u00D9*\u0089=\x19\x1B<m#\x19k!\u0083\u00AB\u008C\u00A5\x1A/\u00AF\u00DD\u009A\u008D!dh\x10\u00BD\u00F2lJ\x1D\u0090@\u00A0\u00B4\u00EFK+\x16\r2\u00D8\t\u0086\u00B21\x00UC\u0080s?\u0085\x16J\u00F0E\x04\u00E9\x01LUS\u008E\u0095\u0091\bb\x1A,a}/\u0088\u0082\u00C6H\u00FA\u00C2h5\rP\u00CD\u0095\u00ADA\u008B\u00FA\u00A8\u00BE$s\u00D2\u00B9^c'zq\x16e\r\u00C0\x11\u0093f>p\x19\u00C0\u00CDw\u00BE\u00FD\x1F\u00E0\u009F\u00E0\u00D6\u00EB\u0096\r\x01\x00\u00FE\u0093\u00FB\u00EF\u00FD\u00D8\x07\u00E6;|\u00CCU\u008F\u00AE\b>\x12ZfE\u008E;\u00DE\"\u00C0~\u00AB\u00B3M\u00A1\b\u00AA\u00AE\u00DB\x11[\u00D2K\u00AF:\x13&JE\u00A0\u00B1/\f~\u00E2\u00EC\u00D4\u00B1ny\x10\x06\u00A2tv\u00BB\u00FF9\u00FE u\u00C4\u00DB\u009E\u0084*\u00F4\u00D2\u00DA\u00CB{\u00C6;\u009F\u00E74\\(\u00D9\u00F5\u00CC\u00F3;\u00A5c\u00EA\u00CF\u0093L\u00C1\u0095Oa\u00A9\u00EE$\u00E4\u00EF\u00C2Az\u00BD\x17\u00C1\u00CF\u00A3\u00E9\u00E6\u00A9\u00DB\u00CB\u00E6@\u009B\x02\x17N!\u0096B\x1F\u0093\u00E7\x1FG\u00BC'\u00EB#\u00CAF0\u00B3-\u00ABX\u0089n\x0F\u0098#\u008D\u009D\u00C1\u008C\u00C8\u0090P\u00B6\u0082 \u00A2\u00F8\u009C\x138\x0Ek}\u00D4\u00FCx\u00DA=\x0E\tH\u00BD\x1D\u00CB8\u009C\u00C6\tsh\u0093\u008C|{\x12\x1B\u00EEx'w\x03\u00AB\u00E1\u009E\u00D4\x11\u00CB\x18\u0093e-S\u008D\u0090g\u00A7J\u00B9\u00C5zr\u00A1S\u00DFB\u00D27;\u0081\u00B9\u00EC\x0E\u00D7\u0080_\x03\u00F3:\u00EC\x15\u008B\u00DE\u00AF\u00B2\u00EE\u00ED\u009D\u00F7\x1E\u00ED<}\u00B2\x1D\u00D9\x07\u00E65l\u00B6\u00F6}\x0F\u00BA\u0090\u00DD\x0F;l\u00EEp\f\u00DC\u00BC\u00E5\u00CA\u009F\u00F9o>\u00FC\u00B1\u00BBh\u00FFN\u0084\u00F0A\u00DB~\u00F7\u00BF~\u00F8K\x1F\u00FFW\u00FE\u00D5\u008F\u00CC\u00A5nA\x10\u00AEe\x0EB\u00B9%m!\u00B23\f/+\u00FDZ\u00DB\u00E0,\u00F5\x19l\u0094\x04\u00DC\u00EB&\u00A2\u00A1\x00\u009D\x1B&HG\x11\x11 \u0097\u00A6\u00FA\u008D\u00ECWff\u00BA\x173XB\u00A9\u00FB8\u00D1\u00EE\u00D3\x19K\u00EF;\u009A\x0BO\x12&\u00A4\u00CD\r3\x07':J\u00B0\u008A\u00CEu\u00E0\u009C\u00C9\x18Q\u0088\u0094\u00F2\u00D0o\x11\u0085\u0098\u0082%\u00D1E;N\u00E2\u00A9\x00$\u00CF\u00F6A\u00C4\u0090:\u00F3\u008C\bFg\x00P\u00EE\u00FE\u00EC\u008C\u00E4\u00F3\u00AA\u00BB\x10\u00B6\x03/\u00CF\x01\u00CA\u00D87\u00E0\u0090{V\u0099\u0091@\u00FB\x1B\u00CA\u00B3@Ju\x17\u0082\u0090\u00CA\u00D2\u00E6m\u00B4\u00B9\x03\u00D1VO\u00BA\u0082\u00AB&\u00A4\u00B7\x18\x05e?\u00A2\u00A9\x1D\u00D1`\x0F\u00DB\u00C6\u00F2\u00DB\u00E9\u00D8<}w\u00F0\u0081\u0090\u00C1\x1B#\x0F}T\u00C9x\u00D9\r\x14\u00A3 \u00AEE\u008B\u00BFv\u00A7\x06c*\u00EAw\u00D9\x11\u00C8\u00B4R\u00FA\u00CB\u00BE\u00E2\u0088HJM\x16\u00E0SnI\u00B95\u00E3\u00D9G\u00ACB<\u00D0r[:J\r\t\u00E1\x1A\u00DB\u00BC\u00D5\u00F6\u00F06\x07\u00E6\u009Fz\u00FA\u00E3W\x7F\u00E5\u00B9\u00DF\u00C5\x1D\u00AF;\x19\x02\x00\u00FC\x00\u00DE\u00F9S\x1F\u00B3\x7F\u00FD\u0091\u00AAfUDy[\u00C2\x07\u0087\u00B4\u00D4\u00CBA\u0082\x04:\u0087\x1DY\x7FQ\u00EDm\u00D9\u00AE\u009F\u0099\u00C1be\rh;{{I\u00DC@VC\u0082\x01v\u00F2\u008E\x18\x00\u00A2\b=\u00E0\u00DB\u00DB\u00C1\u00F7\u00B2pg\x15\x01\u00D5Vg^\r\u00A2NJ*\u0083\u00D5\u00A2\x02p\x03\u00C7\r\u0089T\u0096{\u0085/\u008B\t\u008CR7\u00C38\u00D7\bG>{\x05\u00FA\fG\x06\x0B\x01\u00F1\u00DB\u0085\u0084\u00B4\u00CFb*N5\u00C3\u00F8\u0099q\x0B@\u00EA\u00F5\x1A\u009C\u0098\u0098\u00F4v\x19\x1F\u00BB\u00F1o\u00BAs\u0099\u00D5\u0098\u00C3U\u00CA4m\u00AF1\u009B\u00CF\u00A62 \u00F5~#\u00C3\x19\u008C\x19\x18d\f\x19\u00FC$\u00E64G\u00AA\n@\u00AF\u00CD\u00C0\x152\u0095m\u008A\u00AA\u00CE\u00D4\b\u00BE\x04\u0083\x06\u00D9\u00C6\u00AAx\u0085\u00C6\u00BC\u00CE\u00E7d\u00ECB\u00DA'\u0082).\u00A1\u00D2\x13\u008D\u00B9lM\u00AD\u00F0\x12(\u00F9}\u00AE7\u00E8\u00AEE\u00D9 \u00A4\u00DFg\u00CE\x01 [\u0081)\x122C\u0093\x072E[}N\u009BF\u00CF]\x10zi\u00CC\u00C2\x01\u00C7\u00C4\u00FCw\u009E\u00FA)\u00FC:\u00EE|\u00DD\u00A92\x00\u00C0\u008F\u00DE\u00FB\u00E0O}\u00F0\u00E6-\u00BE\x10\u0081`\u00B3 \u00CCbl$l61\x03\x11<\u00DF\x19\u00C0\u00D4a7\u00BB\u00E0;\u0099A\x18\x11\u00ED\u00D69\u00E7p\u00E9jG\u008B#N;K\u00F2\u00DEO;\u00FD^\u00FD\u00B1\u00E5\x1A\u00AC}\u00EB\u00EA\u0092\u00EE+#\x1E%SE\u00F9\u00A1`\u00EB\x04\x1EM\u00C7\r@\x17\u00A1\u0098\u0080K\u00FDL{\u00D4\u00CC\u009C\x16K\x1B\u0083O\u00C3<,az\u00BEy\u00CC\u008F\u0080\u00F5B\x1D\u00F9NhO(~4\u00F5\u00E1\u00A0\n\u0090\u00AA\u0081G{\x07\u00DD\u009ErW\u00EAw^{L\u00F0\u00BE\u00C5\u00A0\x0E\u00DA\x1Az\u00DF|:\u00D5\u0085~\u00CC\u00B8e\u0081T\u008F\u00F35\u00D5\u00EF\u00EE\x02\u009D\u00D3\u00DB=J]\u0099\u00AE~G\u00BFr\u00D76\u0097:ABey\u00B8\u0088\u00AD\u00A8\u00DFJ\r\u0093\x04\u00D6\x066\u00BC\u0096\u00EB\u00C9\u00D4Tz]\u0096\u0085F\u00C6P\u00AA\u00A6\u00DDrU\u0096*\u00E0R\t\u00F2-\u0098\u00AF\u00BF\u00EFP\u00B9\u00FD\u00B4\u0096{\u00DBrUN\u00B9\x14\u00AF\x01\u00BF\u00C7\u00F75\x7F\u0097\u009BQ;\u00A0E\u00B1\u00A0\u00D7\u00DF\u00BE\u00F93\u00FF\u00C5\u009F\u00FD\u00A97 \u00FB7F\b\x7F\u00DA\u00EC\u0085\x1F\x7F\u00FDW~\u00F9_\u00E0\u0095\u008F\u00C2YJ\u00AAy\nn\u0085\x14\u00B7\u00FA\u0081\u00E7\u00A2$\u008A:\\#\x1D\x01\u00E9\u00EB\u00B3\u00B9\x0B\u00D3H\t\u00B9\x07\u0085 4I\u008Ct\u0084\u009E\u009D5\u00A9/]\x0B\u00AD\x0F@\x1A\x18\u00D1\u008E\u0091)\u00DC\u00AE\u00C3\u00B8A\u008F>$\u00A4T\x0B.\x07.\x0EA\u00D9\n\rnp\u0094R\u00F6r8\x0Es\u00CC9\u00B8\u00CFb\x15AI\u0084\u00C0\u00CB\u00F2;%|W#F;\u0096\x05Mx\u008D<\x12\x12|K*q\u00EB\u00A3\u00DC\u0097F\"\u00DCH\u0080\u0092z\u0087\u00EE\u00D5\u00AE-\u00A3=U\x01\u008D\x1F\u0092\u00F8H\u0097\u00A190\x19\u00DA,dQ\x11\u00C0U\x02\u00DE=\"\x13\u00D30*\u00F4\u0091\u00F7\x1F\x10\x021_\u00C7\u00BCTt\u0086\u00B3\u00DC\u00BDW(\u00F4\"\u00F5%\u00A9\u00DB|\b9,\u00A8\u00A2\u00A9*\u0089\u00F0|}\u00B62\u00C0\u00E6\u009C\u00B6\u00B61\u008A\u0091\u00A4\u00D1C\u00AE\u00C7\u0086\x0E\x16\u0086R\u00D0$\u009E\u0097\u00D0\u0085\u00AE\x15\u00E4?\u00A0\u00DCu\u00CF\u00FCu\u00F5O\u00E8ChH.M\u00A1W\"\x03\u00C5\x04\u00F9\u00C4\x1C\u00F7p\u00F3\u009DW\u00BFl\u00FF\u00ED;_\u00C0\x1B\u00BC\u00DE\u0090!\x00\u00C0G\u00ECO\u00FD\u00DD\u00BF\x7F\u00F3{\x1F}\u00BC]\x16\"\u00AF=\x12:q\u00F5c\u00C5\u00D9\u00AA\x0E\u00C0*\u00F5\u00B3\u00E8\u00E8\u00A9\\\u009B\u00B6\u00DD\u00AA\u0088\u00C0j#\u00A7\u00B1\x0F\u00B4\u00DF\u00FF.$\u0090v\u008B\u0095!\f\x17\u0091\u009FQAj[q\u00EF\u00BE/E.\x12\u00AC\x0BD\u00D0U\u00DFy\u00F8\u0082\u0081\u00C3A\x03c\x04\u00EF\x1C$\u00AC\u00E9U\u009D\u00C8QD==\x12j\x05SwJho\u00E7ed\u00A0W\u00E6\u00E3\u00A51\x0F\u00E88\u00FD\u00FAJ3\x16\u00C1\u00F7\u00A8FL\u00CE\u009A$hk[\x0B\u00FF\u00A0\u00E7@%\u00C2&G\u00E8\u008D\u00C8\u009D\u00E3rxf:b\x02\u009BE\u00F4\"\u00FA9\u00C9\u0080\x14\u00EBPm`\"c\x17\u00E4M\u00E8\u00CC\u00AD\u00CF\u00BDP\u0095\u00C6\t1D\u00AC\u00E3[?m\u00B5\x1B\u00DCq\u00CE\u00CA\u00ECQ\x04\u00B8x2\u00B8fRU\x00\u00B2&\x02\b\u00D1U\x1C\u008F\u00B1\x07\u0091'b\u00A8m\u00DF\u00FA\u00F5z\u00C8\u0082\u00FD:F\x18\u00E4\x07\u0096\u00ED\u00E0 \x15aba\x10d\x04A?\u00CC\u00A6\u00E4\u00E0|8\u00F0\u00DD\u00EF\u00F8\u00BB\u00F88\u00DE\u00F0\u00F5\u0086*\x03\x00\u00FC\u00A7\u00F7\u00DE\u00FB\u0093\x1F\u009E\u00EFx\x18\u00C4Qq\b\ti8 opz\u00F8\u0086\u00D1\u00AC\u00F4+\x1C\u0097\x0E\u00B4\u009F\u00DA\u00D3y\u0081\x16n\x1B\u00F1h\u0094LuE\u00CFF\u0088A\u00D1]c=\u0097\u0086\u00C9\u00DBpl\u0087\u009B\u00FA\u008D\u00EC\x03\u00D2h)\u00A4\u00D1l\x1Cm!\u00F4\u00A2\u009F\t==\u00D4\u0081\\\u00B03\u00DCv\u008F\x0E\u00C3\u008Dw\u00CF\u00C2\u00EA%\u0098h\x7F\x0B\u00E6;\u00D5\u0081YB'\u00ED\x10\u00B3\u009D\u00D7>/^P^P\u00DB\x1D8\u00E6\f\u0082\x16\u00C3Q{\u00BA\x7F\u00FB\u00EE\u00ED\u009E\u00A1J \u00A3\n\u00D3s\u00A0hH\u00AA\x15\x19U\u0098\u00D0\u009Fj\u008FGM\u00C9\u009B\u00D6\u00DF\u00F3\u00BB\u00E6\u00C4\u009AJ\u00C2m\u00D4\u00BDy7\u00BC\u00F7\u00B7\f\u00C8a\u00E0l\u00A5\u00E7\u00F8\u00EE\x04\u00EEd\u008Cg\u0086\u0082~\x1C\u00ED\u00B7\u00E4L\u00BE0)\u009D\u00B3\u00A8%\u00C9\x14\u00F8\u0096-`^#\u00EA\x1AF\u0084\u00A2\u00F9\x06\u00CC+\u00B8\u0087\u00F5\x7FQ\u00A53\u00E2\u00F1\u00A4\x0E\u00EBxF4n\u0080\u00BC\x14\u008A\u00AA<\u00AB\"\u00E9\u00B9 \u00CAV\u008A\x01\u00D5\u008C\u0087\u00DF\u00BE=|\u00F6\u00AF\x7F\u00EFO~3\u009A\u00FF\u00A6\f\u00E1\u00BB\u00CC\u00BE\u00F2!\x7F\u00EB\u00C7`{K\"\u00A2\u00F1P\u0095\u00833\b(\f\x19\u00D3\x00U,\u00AAP\u00A3u\u00A0\u00B2H\x1BTL\u00B5\u00D0\u00831\u00F6 \x02\u0087\u00C2]\x02l\u0084\u00AD\u00BC\u00EF8\u00D9#\\L\u0083;K\u00A5j\u00D1\u0099\x00\u00F2\u00F7^\u00E8%\u00D3\u00A5q\u00DB\u00FB\u0091\x15j\u00B5\u00C8\u00A6g\u00DC|H\u00E30\u0092i\u00B1\u0098\u00BE\u00F3Ca\u00BF\u00C7\u00F4 X\u00EF\u00E1\u00C5\u0080\u00C2\u008E1'\u00E6\x11\x15\u0096/\x13\u00B418\x0E\u00BE/\u00D4\u00EDU\u00C2_\x06\u00CA\u00EE\u00A1\x10\u00B1\x1E\u008D\u0080\u0093\u00A9t[@cHB\x1E\u00E1Z\u009C\u00D0\u00FE\u00C1\u00D3\u008D\f\u00AAl\n\u00EA\u00B3\u0098\u0095\x18\u0090\u00B3\u00E0\u0090\u00BE;\u00EF\u0083\u00A3\u00C6z\u0099\u009EnWW_$\f\u00B3]\u00B5QL\u00A2\u00E6O\u008C\u00C1\u00E9\u00A2\u008Dy\n\u0082\u00ED;\\\x05u\u008B\u0088+l]' \u00E3y4qFA[\u00BB\u00A2ibi\u00D0\u0093K\u0093}\u00CDm\u00EC\u00B5\u00EE\x16w+\u0088^\f\u0098#\x18\u00C1\u00B1\u00F1;\u00D5\u008EcPE\bB\u00CF\u00CD\u0088f\u00B9+\u00FD\x0E\u00B7\u00A5\u00DE>7\"\x0EC\x0F[\u008E>\u00D0\u00A6g;\x06\u00AE`\u00B6\u00C3,\u00B6]\u00F4a\u00C0{\u009F\u00FE\u0098}\u00F4\u00C1W\u00BE\x19\u00CD\x7FS\u0095\x01\x00\u00FE\u00CA\u00F5\x07\u00FE\u00F6O_\u00FE\u00CD_\u00FD\u00F2\u0095f\u00B7$wF\x1D\u009E\u0092\u0084\n~\u00F7\u0097\u0091\u00E8\u00B68\u00F5\u0096\x1A\x11\u00D7\u00CC\u00A4\u00A8R\x01\u0094*\r2\x1B\u00E49D*M\u00ED\b\u00A6}R!h8\u00CC\u009A\x04@\x12\u00FF\u00BC\x15\u00AFP\x0F\u00DB\x05Y\u00C5\x10\u00A8:\u00C8\x00%\x1D\\\u00D0\u00B9K\x0EG,\u0080\u00C7\x1E\u00BBCk\u00D7\u00E8\u00DD=k\x1B\u00CE\x19\u00FBB\x0E\u00BA\u00B8X\u00AEcI.\u00F2l\x0F\u00F2D\u00C59 \u00F4O\u0083\x19\x16U\"\u0089APZ\u00C7f\u00D9$\u00B2\u00BF\x13\t\u00A5\u009Djk\x1E\u00E3l\x01\u0080\u009B\u00A0i\u00CC\u00E8\u009C\u00C8=\x1A\u00A4\u00EF'\u00CC\u009F\u00B6\u00F6\u0093\u00CDHmI\x01-\u00FB\u0084#\x03\u0092\u00A4\u00C2H\u00F5H;Bs\u00D3f\u00FD\x05G\x1Av\x0F\u00D9r\u00A0:\x13~z>\u00D5\u008F86\u009A\u00A4oCms^\u0093\u00DF\u00D4\u00A8\u009Cs[\u00ED\n\u00D3s\u00BE\u00E3\u00D2\r\x19\u00D7\u0090\u0081G\x1E\u0084O.S\u00D5\u00A0f[{\u00EC\u00A07\u009AKw\u00B8\u00D4\f\u00A9%\x13\u0085\u00D69\u00B1T\u00DE\u00CA\u00E2z\u00C1\u00E3\u00AB\x1B\u00F8\u00BF\u00FFm\x7F\x1B\u00BF\u008Co\u00FA\u00FA\u0096\f\u00E1/\u008F\u00A7~\u00EE#7\u00EF\u00FC\u00EC\u00CF\u00E0\x0B\u00DF\u00D9\u0089\u00BFB\u0090\x15\x04\x04\f\u009C\x19\x02\x7F\u00A7\x04w%\x17%0\u00E9\u009F\u00F2\x18P\u0085PI\u00F4\u00D9\u009E\u00D6\x1B\u00DA-Z\u00FEB\u00DA::\f\u00B3\u00AC\\\u00E4\u00FDZ\u009C\u0083\u008D\u00F40\u00F5p\u0083\u00B0\u00B3\u00BA\x10\u00D0\u00A4\x0BO\u00F5R!\u00D2G,\x1F\u009F\x03\u008F\u00A7\u00E3\x06e\u0080;\u00DC\x18\x05\x18\u009Bt\u00D9\x01\u00EC\x13\u0094\u00CCqMU:\n\u00A9X\u0099\u008B\u00B18\u00E6\u00AC\u00C2*e{h\u00BA8U\x16K\x1Ff[\u00B8\u0094\u009C\u00C6v#Z\u00B06\u008C\x15\u00D2\u00B0\u00C9(B\x032C\u00E3\u00E4R3\tK1\"\u0080FB\x16f\u00E1\u00A9\u00AA\u00C4l@\u00DA3z\u00AD\x05w\u00CD\x01\x055\u00C7\u00A5\x10\u00EA\u00CA\u00DA\u008C\x1B\u00AAv\x04\x10\u00C7\u00D3\u0095\u00AAq\u00A3\x13\u00AC\u0097\u008A\u0090\u0084^\u0084\u009BL\u009F\u00EDed\u00A3\x18Bc\u00AAu\u008D-mZg\x06\u00B3\x11\u00B0\x03\u00ABZ\u00A0\x10dU[\u00AE\u00B9L\u00A9C\u00FB@\u00C6)\u00CC\u0081\u00AA\u00D1\u00A02h\u008D\u0089\u00B86wU5%\u00B4\u00DF\u00C4\x18\u00AEp<\x7F\u00FD\u00D9\u00A7\u00FF\u00A7\u00E7\x7F\x0E\u00FF\x1B\u00BE\u00E9\u00EB\u009B\u00AA\f\x00\u00F0\u00B4\u00D9\u00FC\u00C8|\u00EEo]\x1F\x01Q\x12\u00CE/\u00C4n\x18\u00BDNA\u00B2\u00C8P\x11\u00A2\x12\u00B1&\u00D4\u00DA\u00EF\x1A\u0082\n\u00B1m\u0091\u0081\u0088\u0088kp\x05\u00E0\u00A7\u009A\u00D0\u00F4\u00AE\u00B4\x1D\u00F0\x1E\u00CE\u00F3\u0096~\u00C4\x1D\u0082\x118f\u00E2\x0F*4\u00BEg\u00D4\u00D9\u00F2\u009F\u008E\u00F9Z\u009A\u00AC\u00A2NipL\u00A9\u00D1\u00E3\x10h\x01\u00A1;\u00EB\u00E2\u008EG\u0097\u0089\u008B\u00D4\u0080\u0093\u00CA\u0090P\u009Cn9\x1C\u00A5\u0093w\u0097\\@\u00E6\u00E6\u00AA\x13\u00FCOH\u00ED\u00B4\x1F\u0094}\u00E2\u00E2H\u00DD\x7F\u0085\u00DD\u00D4\u00DF\x1D\u00CD\u0085\x17\u00EE@EX\u008A\u0081\u00F5\u00FBkM*\x1AR\u00EE\u00D3y\x04\u0084?\u00A8\u00F6\u0094\u00AB\u0092\u00EA\u008A\u009F\u00FA\u009B}C\u00DA\u00CB\u00CE\u0091\u0089]\u008D\u0088\u00EF\u009E.V\u0085y\u00CFv^Fn\u00CA.\u00E1\u0096c\u00C5a\x01\u00F9\u00C5m\x14\u008F\u0080\u00CElPB\u0080j\u0080\x1D\u00FA\u00EE\u008BJ\u00D2\u00F1o\u00DA\x0E\u00C5\x00L\u00EB;\u00B8M\u00AA\x18\x13\u00E5\u009A\u0094^?\u00B7\"\u00F8)w\u00A4\u00D4\x04\u00ED4%\u00D5A\u00E7m\u00B0\u00B977\u00E75lR\u00A5P\u0096\u00A4m\u0080\u00B2\u0091m\u00C0\u0087\u00E1\u00D1w=\u00F1\u00B7\u00EC\u00DDU\u0094\u00EE\u008D^\u00DF\u0092!\x00\u00C0\u008F?x\u00DF\u00DF\u00F9\u009E\u009B\u00B7?,\x12\x161vC\u009F\u009D~\u00BB\u0082\u00FB\x0EW\n\u00F4\x1D\u0086\u0093\nF\u00EA\u00BA\u00BE8\u00EA\u00C9\u00D8\u00B2\u00F8j\u00E3\u00DE\u00A6{\u009F\u00DD\u008E\u00A8{\u00DA\u00E9\u009E]=\u00A9\u00FEJ5)\u00A2\u00EF\u00D24%\x0F\to\u00958\x12%\u00A0O[a\u00BA\x00\u00A8\x0F?\u0086\u00E1\x11\"\u00E6\u00FFp\x11\u008Dt\u00FC\u00B1\u0084!\u00CB\u00B7~\u00D1Bg\u00A8\u00F3b\u0094$\u00A38\x1C\x19\u0097p\x1CE 3u\u00FA5\u0094Y\be:\u00D5\u00E6\u00C6h\u0082\u0090*m\u00BA\u00EE\u00AF\u00F3\u00C2\u00C8\u00B8\x18&\u00F3\u00FA\u0095a-\u0084\u00DD\u0098[o\u00FB\x1C#\u00B1\u00F4\u009F\f\u00A9\u00DBJd+\u0088\u00A9/uj\u00E6\u00EF\u00EDoh\u00BC\u00B4\u00A7\u00F07x\u0095\u0099\u008B\x07\u0086\u00E5\u00B7\u00C5\u009B\u00C0\u009BIUY\x10\u0083\u00C8\u00CA\u009D5\x1B$\u00B1\u00F5\u00AEPmE\u008E\u0096\u00910\b\u00DB\u00E7\x06?\x18\u0082,C\u00A3\u008C\u0082\u00F9\u00EE\u00EB\u009E\u00B6\u0083\u009E6\u00ED\u00BAFo\x1A3q\x05\u00D9\x12\u00E0;\x1E}\u00FB\u00FE\u00F0\u00D9\u00BF\u00F6\u00A1\u00BF\u00F3fh\u00FD[\u00AA\f\x00\u00F0A\x1B/\u00FD\u00F5\u00D7>\u00F9\u00F7\u00FE9\u00BE\u00FA\u00DF\u009F\x0B\u00A3\u008C;\u00F6^\u00C8\u00ECC\u00EE\u00F8\u00B4\u0086 \u0087\x14\u008E9\u00ED\u00A9\u00D2[\u00D9\n\u00A42\u00C0\u00A8:\u008D<\x1E\u00BFm|v]E8C\u00FF^\u00BB@\u00CF\u009F\u00AA\u008B\u008EY\u00FBu6i\u0081\u00A6G\u00FBz\\a\u00B3g\u00BD]\r*\u00DC\u00B6*\x00\x01\u008F\u00CC\"\u0094\x19\u0086\u00CB\x04vI\u00B9i\u00B5A\u00AC\u0087\u00F1m\u00D3\"d\u00CFv\x07z\u00D5\u00E1\u0088;\u00A8\u0084&\u00A1\x13\u009F\u00EB\u00B6lZ\u00E3\u0087G\u00A8o\u00BA#\u00D9\u00BFHk\u00B6$\x06\u009B\u0081\u0086\u00E4\u0096\u008C\u0094f\u00A2\x1E\u00B6\x0B\x04mt\u00FD]\u0084\u0092\u00FB\x1A:\u00FB\u009E\u00E8)'\u00BF!\u00AA8t\x00-6A*R\u009D\u00A3B(\u0080e\\B\u00CE/\u0090\u00E3U\u00FF\u00F4\u009B!\u00FA8\u00C8p\u00C0\u00F6\u00C11\u00AEj@t\u00CE\u00F9\u00BB\u00EE\u00DD\u00ABUk\u008E\u00D3k\u0091s\u00A6\u00E7oy\u00AC\u00E7\u00B4\u00E4\u00B2\u00E8\u00F7\u009A\u00DA\x12N\u00C2\u00D49_\u00E2\u0098\x1Bl\x0E8\u00EB5z\"\x1A\n?fP\u00AArs\u00C6.\u00A4RF\u00F5.V+\u00DC&.\u00EF\u00BF\u00F7\u00F7\u009E\u00F8\u00CF\u009Fx\to\u00E2\u00F5\u00A6\x10\x02\x00\u00FC\u00C8\u0083\u00F7\u00FF\u00CD\u00F7\u00DF<\u0085\b\fVRQW\x11\u00A2C\u00DE\n\u0099\u00ACII\u00F5\u00D9\u00A3\x0E3\x01#\u008D&N\u00FA\u0097~\u00DF#\x1D{\br\u00B7\x13\x14\x17U\u00BF\u00AA\u00BE\u0082\u00F3\u00DF\u00D1\u00EE\u00D9\u00E2#\x16\u00CE\x0E41T\x0B\u00DEyXPu\u0091,@F\u00BFI\u00C5\u009B\u0088\u00AD\u00C7\u00F8\u00FD8\u0080\u009B\x19\u00EFC\u0089m\u00CDr\x1FR\u00D3R\x15\u00C9\u009C\u0087\u0094\u0098k\u00F4\u009FP\u0080\x13\u00D2V\x04\x1Fc\x1E\x1C\u0098\u0097RC\u00E6,(/F2\x19A\x18\u00EB\u00D0Jb\x1F\u00CA\u0083@F\x18\x1E\x07\u008B\u0096\u00A8\u009D\x03\u00B7\" \u00FD\u00F0j\u00CB;\u008C/\x17h\u00CE\u00A5\u00BC-\u00BE\u00BAC\u0085~\u00D2\u00BD\u00E9B\x1D5\u00B7\u00D3\x03a\\\u009A\u00E7\u00A4\u008F\u00CD\u0081\u00F4\\4 \u00B0\x18g\u00B1\x100\u009F\u00D7\u00AC\u00AC\u00C7s\u00BD\u00C9d\u008Ah\u00F8\u0092\fd\u00AA\u00ED\u00E9\u00CB}t}\u00A8\u00A3\u00DE:'\x06\u00D2\u00EA.\u00CC\u00EEy\u0090\x0B\u00F1\x1A\u00E6\u00D7Eg\x1E\u0095\u00CA\fJ\u0096:#k\u00EER\u00ED\u00FCN\u00DAx\u00F5\u0099k\u00DC\u00FF\u00D1\u00F7\u00FC\u00CD7K\u00E7o\n!\x00\u00C0\u008F\u00D9\u00D3\u00BF\u00F1W_\u00FF\u00C4?~a\u00DE\u00FC%\x1BgO\u0082ES^\u00F6\u0085\u00D0\u00C5\x03\x19\u00A4z\u0095\u00E8\u00A1\u00A9\x19D\x0F.\u00C9\u00D2\u0083\u008AT\u0084%#\x19\u00CF\f&\x18R$p\u00F4k\u00FB\u00EB\u00B6\u00E1Pq\x0E2\x02\u00F6\x12\u00E1\x19\u00BF\u00DE$\u0095\u00A4V\x04\u009E\u0085\x14\u0088`\u0098Z\x1C\u00A5n\u00B4\u00DCz\x18\u00C2\x1B\x11\u00DE\u0086\x0B\u00DF74,\u00CE\u00C9uC\x1D\x1A@\u00A9'(\t\u00D8%\u00B2\u00E0\u00B4\u00A4a\x1A\u00D3\u00DA\u00F7\u00F4&L\u00CB\u00FE\u00A9M\u00B5\u008FI\u0097)\u00BF\u0087\x0Bn4\u00A4TFC\u00ED\u00D1\bXz\f\f\u00C1%g\u00DAR\u00A2\u008C]&?9\x18x\u00E4u]RL\u00A1\u0085\u00990\u009D\u00FD\u00E4\u00E7\u0098\u008D\b\u009Bd\u009Em\u00ECzV\u00D3#ZQ\x06[m\u00A7&/P\u009FG]\u00A7<\u008F\u0090\u00FE\u0096\u00EDg9\u00B6Y\u0092\u00BE\u0090\x04\u008A\u00D0i[\u00B0\u00BE\u00DE\u00D2\u00B8\u00A8\u00F9+\u0086S\fA\u00CC\u00A0\u00AFQ\u00A9\u00C9\u00E2\u00C4\u00E2nz~jw\u00B6s$\u0081,\u00C7\x11\u00D6\u00E2cY\u00C0\u00F6\u0081\u00ED\x1F_\u00FF\u00CF\u00DF\u00F6\x1Bx\u0093\u00AF7\u00CD\x10\x00\u00E0?\u00DB\u00DF\u00F7\x13?{\u00F3\u00D5\u00BF\u00F4\u00D5{\x05M\u00E2E\u0097b\u00D6.\u00E8jD\f\u00C8\u00AC%'5\x17\u008A\u00AC\u00C1\u0090\u00F1\u00F0\x1CD\x04$\u00F3\u00A80\u00E5\u009E\x04E\u00E6c\u00AA\u00B0\u00DC_2\u00FEu\u00B7(\u00EF-\t\x00\u0084\u008E7\u00FB\u0083m\u00C4\x02-@\u00BF\u00E3\u00FB\u00AA>\u00A4\u00CB\u00AF?|\u00B6\u00F3\x18\u00C1\x14\x1E\x1C\x01\u0095/\u0088<\x07\u00A3\u00CF_\u00D6\u00F1\u00D4\u00A3\x1B\u00F1az\u00EE\u0087xq`\u009B\u008E\u008B\u00DC\u00A2\x1E\u00A1\u00C088#\u00B3\u00AEs\u00AB\u00FE\u00C8\u0095\u0089\u00C9\u00DD\u009C\u00DCr\u00BE\u00D4\u00CE\u0098m\u0083\x16W%\u00E75:q\u00A2\b\u00E5jJ\u00AD\u0088\u00F1O\u0094:\u00A3\u00E4\u00A0,\x18\u00CB{\x1Cd\u0092\u00C1P\x18\u00AB\u0092\u008C\u00AC\u0092\u00A5\u00AE\u008EZa\x07}\u00FC\x06\u0086\\\u0093\x01\\<\u0098\u00D5v\u00A86eA\u00FB!\u00BF?j\u0099\u00CA})\x0F\u00CC\u0098\u0094\u00FE\u00C9\x04\u009D0\u009D\u00CF]\u008C \u0099G\u00FB{A\u0091d\u00A8\u00CD\u00D8,\u00A6\u00D0\u00ED\n\u00B9\u00BC4g\u00BC\u0097\u00EADD?\u0085\u00BA'\u00B2|\u00FA\x042\x14Y.\x1BeWB\u00A8@\x0B\u0091\u00DE\f\x00\u008F\u00AE\x1E\u00C3\x7F\u00E8\u0099\u009F@\u00EE\u00DC\u00F8\u00AD_gq\u00FAM__p\u00B7\u00FF\u00F1\u00E1\u00BF\u00F8\u008D\u009F\u00BE\u00FF\u00F2\u0087c\u008EE\u00A8\x1D\u008E\u009F\u008Cx\u0092\u0094}#\x14\u00D9\x03\u00BAo\u00F5\rK\u00A2\u00A3\u00CEK/\x02\x11\x01\u00CF\u00A9\u00A8\u00C8\u00AC\u00AF\u008B\u008E\x04\u00EA\u009ChK\x10/\u0082\u008BJ:\u00A0\x11\u00B3\u00A4d\u00D7\x19\u0081UZ\u00A9\u00A8\u0088\fG\u00E5\x1A\u00E4\u00EF\u00ED\u0081\x0E\x07\u009Eq\u00E0-\u0087\u00E3\x01\u0080{0\u00DC\u009F\u00C0\u00B5\x03\u00F7\u008E\u00B0\x15\u00EC\b\u00F7\u00DB\u00EE\u00F1\u00B9\u0091HwJ\u00DC}rvf\x10\u00C66\u0099\x10>\u0083I\u0084W\u00C4*L9\t=\u00DAQ.\u00C38(\u00BD\x13-\x00v8\u00FD\u00F9\u0096\x12iL\u00C7\u0086\x11\u0095\u00A3\x01dL*\u00DDd\u00D7\u00B3\x14\u00C3m\x02c \u00E3\b6\u008Fcz\u008A;\u00DD\u0085\x0EVS\u00E28\x06\u00DB\u00AF\u009D\u009D\u0082\u00D8\u00AFy\u00AD\u00F3\x19mm,Q`\u00A5\u00C68fI\u00FD\u00A5\u00F8\u00AC\u00BE\u00EB^\u00B3\u00EE\u0093L\u0081RX\u00A8\u00A9\u00F6@Q\u00B6(V\u00E2g\x00S\u00E9\u008E\x03r9\u00CA\u00DD\u009B\x06\u008E\u00A3\u00AEW\x1E\u0086\x1D1\u00B7i\u00B3\u00D09\u00D2K\u0099b\x1D\u00C5o\u00BDt2\u00EA@~\u00A8D\u00FB\x05e\u00DD\u00E5\u00FD\u00A2Q8\u00E1\u00EE\u00EB\x1F~\u00F4\u0089'~\u00F6\u00F9?k\u00EF\\\u00F1\u00C87{\u00BDi\x1B\x02\x00\u00BC\u00CB\u00CC\x7Fx\u00FF\u00B6\u00BF\u00F1\u00E4\u00A5\u0092\u0095\x14\x15\u00A8B%\u00A1&4\u00A2dm\x02w\u00C3R\u00CC\u00C4\u008BX\u00A1b\u00A7\u00EDx\u0096a\u00EF\u00E7\u00C9\x0B\u0081\u00D2\u00BFz\u00B0\u0091\u00AE\u00CB<\u0089\u0093\u00CD\u00A0\u00B6O\u00F3|\u00C0\u0081\u00C4\u00BC8\u00B1\"\u00D6\u00E6\u00CA(\u00F4\u00C0U\u0088T\u00EF\u0092\u0086\r\u00EDH?\u00CC\u00C5\x13\u00F7y\x1D\u00C0CC\u00BA\u00F6z\x01\u0095\u00D9\u008E\u00F5\u00D0by\n\u00E0Ul\u00E4\u00A0\x15;P\"\u00ED\x0B\u00C7H\x17\u00E3\"\u00B8\u00B2-E0\x06\u00C4\u00CE(F\u008D+\u00C3\u0096U\u00B8\u00C5\u00E9\u00D9\u00C0\u00E2\x06\u00D4y\u00EE\u00A3\u00DC{i\u00C3P_*\x13\u00D3a\u00E5\u00D9`?\u009Czs\u00B4\u0081\u00C5~\u0090\x1E\u008F\u00E5]\u00E3\u0090\u009A$\u00D5\u00A9\u00FF\u00DD\u00DD\u009A\u00B7\u008A\u00D3\u009C\u00BC\x185'm\u00AE\u0093p\u0091\x02\u00A0G?:\t\u00B5\u00EF@\u009D\u009E%/4V\u00D9\u0095\u00ED=\u00D1\x10C\u00AC\u009D\u0085yt\u00C6##\"6D\x14\u00A2\u00EC\x02\u00F1vlp\u00BF\u0082\u00DFU\x00\u0096\u0086\u00FC\u009Bk\u00C7\u00CDG\u009E\u00FA\x1B\x7F\x10f\x00\u00FC\x01\x11\x02\x00|\u00D9}\u00FBk\x0F\x7F\u00FB\u0093\u00FF\u00EF\u00F5W>t\f@\u0084*&0\u00E8\x06\u009CwH\u00E8\u0098$\u00C1w\u00D9\b\u0090D,\u0084`\u00A7k\u00AB\u009B\u00C1|\x06\u00B4\tK\x1C\u00F7\u0085\u00AF\u009D\u00BC\r\x10\u00E3@F\u00E7\t\u00CA\u00A6\u00DE\u00CA\x18\u0091\u00E4\u00E6\u00FC.\tu\u00F66T<\u0082PC\u00B5\u0095\u00C5R\x1A\u00AC\u00D4b\x1A0\u00BC\u00D5\u0081g'\u00F0\u0084\x03\x0Ff8\u0088\u00EEM\u00E0j\x06L\x1E\b\u00E98< \u00F9\x15\u0083\u00906\u0084D\u00DB&35\u0088\x18\x14\u00F7puXIZ/\x14\u00E1\u00EE\u00D8\u008E\n\u00D0\u00D9fH(\x13b8\x06\u00B6\u00A3\u00A4\u00D98\x1CR\u00E5\u00C6\u00E1\u00CDL\x0B\fL\\90h\x19\u00DF<\u009E\u0086\x01\u00D8|\u0086\u00A9\u00B9\u00F5as`X\u00AC\u008C}VV\u00E2F\u0084`>R\u00C2\u0083c:\u00BFAuG\u0088 \x11\x00b,\u008AR\x14JP\u00E99!\x00\u00A9Q\u00FD\u00F7\u00B4\u00D3\u00B4~voEHr\u00AA;\u00ED\u00B8\u0093\u00AB\u0099PT\u00DA\b\u009A\x1A\u00AAR\x05D]\u0081*\u00EC\u00842<U\u00C9\u00FF\u00BF\u00BDo\u008F\u00BA\u00F4\u00AC\u00EA\u00FB\u00ED\u00E7=\u00E7\u00FB\u00BE\u0099df2\u0099\u00DC\x00\t\u0082@\u00B8#wQ,\u00B1,\u00AC\b\u0088\u00B5\u00A6\x0B\u00A8\u00B4R\u0090.\u00DAJ\u00ADE\u00B0\u00DAbU\u00BCVY\n\u00AC\u00A5b\u00B5\x15X\u008A\u008D-\u00A2(\u0082J\u00B1R*\x17A@0\x01\u008A\x10\b\u00B9\x13&s\u00F9.\u00E7\u00BC\u00CF\u00EE\x1F{\u00FF\u00F6\u00DE\u00EF\u0099Q\u0099\u00CC$\u0099$\u00F3\u00CC\u00FA\u00D6\u00F7\u00CD9\u00EF\u00FD}\u00F6\u00ED\u00B7\x7F{?\u0093\u00F0\u00A3\u00FE\u009F\u009C\t\u0085e\x15\u00C6\u00B1P\u00A7\u00D5\u00BD\u00881\u00BD\x05^\u008B\u00EF|\u00F4\u00E1\u00E3\x15\u00BB\x7F\u00E7^\x0F\u0093\u00FB\x10T\u00F8\u00F2\u00C6\ta\b\x00p@d\u00FC\u00A9\u00C5\u00F5\u00AF|w?\u00F8\u00C6[D\u00A12mJ:u\u00D5Kh %|\x00\x10x\u0081\x00\\oO+-\u00B9\u0080\u0089S!?\x1E\u009F\x00Hg\u00E7X\u00AE\u00C1\u00B4BQR\u00F8G\u00FFC\u00A7\u0096>\u00C3\x07\u00B8\"H+\x10\u00BD-\u00A9\u00E9I9\u00E5\u00A4)\u00E7b,J\u00C5a\u00BC~\u0099\u00E4\u00F8E\u00DC\u00DD\u00A6\u00FB\u00DA\u00FD\u00B2h\u00ADy\u00AEn\u00E9\u00C9UPMz.\u00B1\u00CE\u00EB\u0092\u00B2O(3\x07\u00B9\u00A4+0f\n/\u00C2\x06\u009F\u00D8\u00AAE\x10z}\u00AF\u0080\n\x1B\u00B1\u00F8\u0092!\u009Ao\u00A4\u00FB\u00BB%\x00\u00DA\u00FC\u00D1v\x17l\u00A68\u00A3\x0B3\u00F2\u00B92M\u008A\u00F2}Z\u00D6\x12\u0087\x03\u0093\u00F2\u00EAi\u00F5\u00A6WN\u00D6\u0090A\u00CB\u00B3\u00F1wA\u00F7\u00BAi\u00A6 \u00A3\u0081L(\x043I\u0083\u00F2\u00C6\x11\u009EA\u00D3:\u00E7$CE\x1A\x01\u00E2\x01\u00EEm\u00C4w|/~\u00F3\u0089\x1Bh\u00CC\u009Fc\x7F\u0088\u00E7\u0090\u008BS^jP\u009D)W|\u0089\x03\u0096\u00F3\u008E\u00C5c\u00F1\u00CA\x13U\x06\u00D3\u00B7}\x02\u00E3\x0B\u00BA\x18^\u00B4\u00F9\u00E9\u008F\u00BC}\u00FD\u0096\u0087,\u009B\u00A5\x19\u00DD?\u0080\u00A0\u00D9\u0082\u00A0H\u00D7\u00DF\u0098\u0084\u00C5\u00CA\u00B7\"\u00B4\u00D1)\u0099\\\u0085\u00BA\u00B0j\u00C1\n\u00FC\u00B3\u00D5^\u0087\u0088\u00F0@\u00FC\u0081\x14\u00BC\u00A0\x1B\u00AA\x10\u008A`Uh\u00FD%M\u0084?0\u0080\u00E2:\x16w/\u00F6\x05\u00C2\u00D7\u00CC\x05;}\x7F\x0F\x1B\x02\u00E7\u00E9y\u009E55\x0Fa\u008F*vw\u00C1\x1A\u00CCCX\u00EF6\x01\u00D7F\u00D8\u00DA\u0090\u00DD,\u00E9\u009Ag\n\u0086\x11\u0098+-\u00A4\u00FA\u008APn\u00FD\u00FC\u00F3\x16\u00F7c\x13w\u00E6!K\u00C4\u00CDj\u00C7i%\u00B6m]18\u00D3\u00AE{\u008CKv\u00A68.1\u0083\u00BD\u00B2\x06\u00BB\u009E\u00D65\u00B1\x03\u00A0`\f\u00C9'\x18\u0090\u00D6\u009A\u00D7e\u009EB\u00BE9Z\u00E7Yw\u00E6\u008A\u008Ay0\u00E58\u00D2\u00BB\x0B\u00AF\u00C4\u00B1\x1A\u00EF\u009Fx\u0089\u00DF[S5\u0080U\u00E1\u00CA\u0095\x19\u0090\x04\x1C\x07\u00EF\u00B7@\x0FJ\u00CA\u00BBi\u00E5o>\u00F3\u00C8.-\u00F9~\u0085\u00DAob\u00FDY6~\u008C\u00B5WD\x19\u0083yd\u00A6\u0090c\u009B\u00C0\x10\u00CA>\u00AB\u009F\u00BB\u00B7`J\u00BAC\"^r\u00ED\u00989h\x00\u00C0\u00D1\u0087\u008E\x1F\u00DF\u00FD\x1B\x07\x1E!\x0F;q\u0085p\u00C2\x1E\x02\x00\u00DCS\u00E6\u00E3kw\x0E\u00FE\u00D0\u00FF\x19\u008F^~s\u00AB\x00\u009E\u00CB-\u00B9\x02\u00E5sS\x04\u00C5\u00DA\u00D3k(\x05Q\x1A\u00D9\u0086\n.\u00C2~\u00C7*\u00CA\u00AB\u00CA\u00A0z#\u00A5i+s\u00CAD\u009Bu\u00E5\u0085izY\u0093\u0094\x1C\u00B5\u00B8 4=_\u00A0\u00D2\u008CUE2A\u0092\u00E1J\b\u00F1\u0082\u00EB9\u009B\x02;\u00AA8\u00D2\x15k\x00\u00E6\x0E\u0096Y\u0097e\u00EF]\u00E0\u00E7\u00E9n!\u00BA\u00FA\x1D\u00AAF\u00AE=\u00D2gL\u00CDi\u00C6\u00D7\u0083O(\u00C6\u00CESo\u00C2~:\u0080\u00ACe\u00E0\u00F5i(\u00CC\b\x7F\u00FC\u00F3.\x06~u!\u00C5Y\u00CB\u00DB\u00A1\x153o\u00A7\u00BB{\u00DF\u00F9\x19\u00CA\u00F9a\u00E0'\x1F\u00CF\u00A4E\x1C\u00DC;p7\x7F\u00D4$\x13\u00B1AK\u00EC\u00D8\u00D3\u0083\u00A9\u00DE\u0082yq\u00DE8\u00A5\u00A3x\x13\x02\u00AEX=IwvL<\u0085\u00CE\u00E7\u00A7\u00E4\x14\x14\u00B7\u009Es\u0089\u0083\u00DFQ\u0081\u00AC\u0086\x0F\u00FE\\\u00DD9,D'\u00C99\u00C1\u00FD15\x1C\u00AA9\x1F'\u00DE\u0082\x02\x1AM[\u00A9\u00A9\x04\u00C0\u00C2\x1D\x13\u00C1\u00CE\u00DA\x02x\u00FC\u00EC\u0087n\u008D2\u00C8\u00B7y+\u00C6-\u00AA\u00F2\u00DC\u009DO\u00BC\u00F7\u00F7\u00D6\u00B6\x1E\u0097\u0082\u00EF\u00F1:\u00D7l\u008C\x07\u00E8\u0082\u00DD\u00DC\u00A6(\u00C3\u0085\u00B2H+\u0095D`\t5T\u00A8\u00DD\u0099\u00EDxZ\u0095E\u0080\u0087vK\u00C7\u00B8g=_^6\u00D0\u00F0\u0085T\u0090/+&KW\u00D0E\u00D3N\u00E4\x1D`<g\u00FB\u00DB\x04\u00E9\u00A3\u009D\u0093\u0096yBs-\u00EE)]JU`C;\u00CE\u00E9\u0082\u00B3 \u00D8\u00D5\u0081uu\x1CA\x15k\u00A3+\u008Anw9Wz\x02\u00863\x04\u00B2\u00AE\u00F6\x7FNh\u00C6\u00D7\u009C\u00D0\u00D2\u00BD1\t\u00F9\x06\u00AE\x00fK\u00BB\u00DE(\x1E\x1A\u0081\u0099s\u00A7\r\bM7wX\u00BA%\u0096\\Lf\u00EEnx\x13s\u00D1\u0087\u009E\u00DE@\x13\x04\u0086\u00D0\u0080(^b\u00E6A\u00A0\u0098\u008D\u00E5\u00AD\u00BA\u00C0\u00F2\u00FEV\u00BD\u0089yX\u00F0\u00E4S\u00D0\x1B\u00AAx\x020\u00C5\x11f\u008E;\u00B0n\u0086a\x15\u00D4\u00EE5\u00B1\x03Stl:\x03\x0F\x13\u00E8\u00E5\u00CD\u00AA\x07\u00C2y\u00A3H\f@\u0091\u00C0\u00B1\u0083\u0089\u00B6,^z\r\u00AB\u009E\x00\u009Fy(\x12b6,\u00AF.JH\u008A'\u0097\u00D8U\tk\u00BB?tGL\x15\x1D\x07\x1F\u00B9\u00F5\u00FEs~k\u00DF\x13\u00E4\u00FE'\x06&r\u00DC*\x0F\x01\x00\u00F6\u008A\u00E8\x1B\u00B7o|\u00F9\u0087v\u00AE{\u00E75su*\u0081e\f\"\u00D4\u0081\u00C0HLH|@\x05\u00D3\u00E5\u00D3\u0080\u00C4\x13*F@\u00F2\u0092\u008FP\u00BC5dhHI\u00CD\u00E6\u009C\u00B1\u00EE_<\u00B8bE\u0080\u00D0\u00A6\u00E15\x10h\x04s\u00EC\u00C4\x04\u00FC\u00C5\u00FAY \bB\u008A\t]sk\u00CD^\u00FE\u0092\u00D5\u0099\u00DD\u00F7GN\x0E\u0085\u009Dk\u00D4\u0086m(\u00D6\u00BBy\x07\u00B3\u00EE\x14\u00E3n\u00B1v\x02j\u00B6^\x03'\u00D2\u00E8B`\u00C8=2\x06.\x7F\u00F3\u00BA\u00B3S\u00F3\u00D4\u0083ag\u00E5\u00D1\x05\b=\x17\u0098%\u00D0H\u00CB\u00D8\x1C\u00C3\u0080p\u00AD\x05\u00BF\u00D7\x15\u008F\u0090\x1E\t\x04\u00B1\u00B8\u008C\u00DDj\t\u00F0\u00BA=_\x12\u0091\u00F8.hY\u0089]\u00D0]\x17\u00B5y\u009Ex@z\x1B\u00DD\x15\u00DF\u0088\x14T\u00A1\u00DB\u00DE\u00E9aK(\x05\u00BB&\u00C7g\u00A8@\u00B9\u00AF&\u0081\u0089\u00EF\u009F\u00CA\u00A6\u00FB\u00FDFj\x12\u00F6\u00BC\u00A4(\x03\x1E\u00C3\u009E{\u00CBgM%BY\u00A8\u009F\u0097\u00BF9?\u00E8\u0081PaLZ\u00E1\u00D1\u00B0Q\x10(\u00EA\u008D\u00A1\u00F4\x004\u00E0\u00E8\u00EE\x05\u0086\u00AF\u00C7\u00CBo\u00AD2\x00\u00EF\u00F1d\u00C6e\u009B\u009F\u00F9\u00DD7\u00AF\x1Dz\u00C62\u00AC\x7FI\x15\u00D2\u00D2\u00D76d%\u00930\u00C5\x0B8u\n\u00E9\u00C8\u00A5\u00D0X\u00C8l\u00A1\u00B6\u009AE\x00\u00B2\u0097\x1C\x02M\u009F<h>\\\x00\\\u00D04<\u008A\u00F0\"\u00F8}\u00BA\u00E15\u0093\u00C0\x14\u0093L44\u0095\x032^\u00E4dA\u00F1\f&\u00B9f\x13\u00F85(\u00CE\u00E9\u00C0Y*\u00D8\u00E8\u008A\u00F5\u00AEX\u0083`\u00DE\x05kjX\u0082hf\x10fj\u0096tN\u00A1W\u00B3\u00A0D\u00C8E\u00BD\x0E\u00C2\x05\u00BB\u008D\u0088\u009C\u00BD\u0091\u009A\u00E8!\u00F8z\u00C7=\x17Y\u00CD<>-\x1C\u0080\u00D1\u00B3\f\u009A\u00A8\u008C\u00C00\x10Q\u00F3\x10\u00CC30\u00A0\u0091*bp\x014k\u00EFX\u0083\u00FA[\u00F5{h\u00F4P\u0090\u0082>\u00A3\u0087\u00D0\u00E3\u00ED\u009B\x07\u00E4\u00CF\u0095\u00DB\u00E7=\u00E5s\u0080oKk\u00CF\u00E3\x0Eu\u00DF>\u00DD\u00DE\u00E9^\u00CF\x00\x00 \x00IDAT\u009F\u009C\u0084\x00\x18\u00C19\u00A2Q\u0092NrS\u00DD?\u0095\x00\u009C\u009EN+\u00C3\u00F0\u0092\u00F3`E!\u00F0\u00EFR\u00C1\x1C\u00DC\x07-\x1C\u0086\u0092\u00AAF1.\x18\u00CD\u00DBY\x05Y}\u00D2\u00A2Cq\u00F81\u0087\u00DE\u00BA\u00EF}\u00FB\u009F\u0089\u0093\x18'\u00C4C8\u00DE\u00F8Gk\x17\u00BE\u00F4\u00BE\u00CB\u00B5E\u00AE\u009E\u00E3\u0082\u00DA\u00DC\u00F5\u00AF\u0099\u0082P\x06\u00B9P\u00EA\u00DF\u00DC\u0087\u00D1\u00D8\u008DT\x06S%P\u008E\u00C9\u00C53\u00F8\x10'\x0F\x14\u00A1\u00A9\u00834T\u00E3\u00C2\u00F2\u00BD\u00D22N4\u00BA+\x17\x02I\u00DD\u00CC\x0FIK\x00\u00F2\u009E' Vz\x17S\x1C\u0081q \u00B0\u00E8\u008A\u00EDn\u00F5\r\u00CBnU\u008D\x0B5\u008EYt4\u00F2Sv\u00D5\u00B85\u00B6u\u00CF\u00D2h.\u00F6Z\u00F2\u00EF\u00AC'\x00\u00B9\n\u00AC3\x00\u00D8M\u00A9\u00E6\u00F5\u00AD{\u0091:\x7F@\u00A3\u00CEbY\u00AE\u0081\u00CF\u0084\x19\u00CA\u00B1\x1CgT\u00A0\u00C3R\u00CD\u00C6\u00AB\x11_\t\u00C0+(\x15\u00D3\u009F>\u00BD\u0087z\u00AF\u00BC\u00CE\u00E8\x1EU\x7F\u00C6\u00E9\u00F7<V\u00E5I\u00F0\u00F9\u00F5\u00E3\u009D+\u00EA/4\u00CE]\u00AF\u00A9\u00FE\u009Ep\x14\u00FA\u00CA\u00F5i\nu\u00E0\x06uN\u00B9A\u00E0\n\u00D9\u00F5\u00DE#4\u00AD\u00FBW\u00A3\u00B5b`\u00C0PZs\u00FE\x00\u00F5xv\u0096\u00ED\x03\u008B\u00C5\u00C67o\u00BC\u00F4$D\x19\u0094\u00B4\u0093\x1A\u00CF\x1Ev]\u00F9\u00D4q\u00EFk7\x16\u00D6\u009AL\u009Ada\u0091\n\u00A6e\u00CB\u00ECe \u00F9\u00FF\u00F2S3\u00DE6\u00DC\u008B\b\u00CC`JY&\x01\u00A8>\u00ECI\u0098@+0\u0099\u0090\u009E\u009ErA\x11>tz\x14\x14\u00F8\u00D1[\u008AGx\u0080p\x1Dc\u0081\u0095\u00A2\u00E9'/\x18\u0098Z\x06?\u008FY'\u00EFu\u00A8\u0082E\u00B7~\t#\n\u00C1\u0087\u0093\u0096\n\u00CA\u00BD\u0094\u00DA+1\n\u0086z\u00AE\u0094\\\u00E3L+\f\u0092\u0089\u00B0\u0090t\x13-\u00E1W~\u0082\u00E8\u00A4t\u00EB\u00CD\u0085\u00ED\u00FEy\u00F6&pr\u00CE\u0098\u0082be\u00D8\be\u00ECd;?&\tS\u0095p\u0084\x00=\u00B34\u00DA\x15\u009Bf\u008F\u0088\u00C9J\u00D5\x14\u00FA\u009E\x02?!v\x01HR\u0090N\u00AF\u00ADk(\u00CFT\x06\u009A\u008A\u0096\u00C2>\x02\x18]\u00D1)&\n\u00A1\u00D7s\u00B9qQ\u00E5\u00CA\x14\u00F9\u00EE9\u00C7\"\u00E4\\\t{\x10j\u00C24\u00CBj\u00B3\x15\x14\x0F\u00B3*\u008C8\x07\u0087\u0094\x10B\x04\u00CBG._\u00BB\u00FE\u009Fv]y\"\u00B2{\u00BCq\u00D2!\x03\x00|Hu\u00DF\u00BF\u00D8\u00FA\u00EC\u0095\u00EF__^h\x12C:3\u008B\u008E\u008A\u00DEQS\x1C\x13&!\u009B\u0099\u00CA\u00AA~\u00E2\u00A2+\u00A9 \u00C8\x17G\b5L`+\u00D0B\u00CE\u0080\u00A7\u00C7\u00A6\u00F1\u00B3_\u009F\x0B9\x00LR\u008AT\x12\u00AE(\u00A84\u00E2<NJQ`\u0092\x1A\u0092z\x0E\u0086\x1D\u00D5\u009DT\u00EE\u008F\u0088o\x07\u00ED\u00D8\u00A7\rg+\u00B0\u00BB\u009B\u00DB\u00BB\u00A6FL2r\u0092Ze\u00BB\u0083\u008C\x02\u00A35\u00B7Q\u0093\u00CA\u00ACL\u00A1I(@*\u00A8A\u00E1\u00EE\u00AFZ\b\x00\u00C7\t\u00E85\u0095<y\x0BE\u0098\u008A\u00ABy\u00F8@\u0095-\u00F0\u00B0\x04\u00A6\u00BEg0\x07P\u00B4\u00D0\u00AA\u00D5B[\u00BA\u00EC\u00E6\u00C2\u00DB\u00C2,\x06N\u0096\x18^\x13\u00C4\u008A\u00B2\u00EF\u00CE7.Q\u00CF@ u\u00F57\x14\u00C1\x15\u0098\u00D1\x00\u00F0\u00D8\x05Le(E\u00F7?0\x1A\u00C0(\u00DB*\x18\u00C6\fC\u00E0\u00F7He_\u00C3\u0096\u00D6\u0093\u00E2M\u00CC%:a\u008F\u0089A\u0098\u00C6*\x1Eg7U\u0080Q \u00DD\u00975\u00E8bD'*\u00FE\x12\u008E\u00847\u00CB\u00FD\u00F9\u009Bb\u00C49\x0F\u00E0\u00E8}\x0E_\u00B7\u00FB\u00A7v_\"\u0097\r\x07\u008F+\u00A0'0N\u00DAC\x00\u0080G\u0089\x1C|z;\u00FBe\u00FB\u0096|\t9\u0085\x12?p\u0090P\u00ACDzZ\u00BA,\u00DE\u00BB\u0080\u00A3x\x01!\u00FC\u00CD\x18\u008A<\u009E?d{!R\u00C2\x02{\u0088\u008D\u0093\u0080Z;\b!\u0080\u00E5\u00E9\u008F\u00E3\u00DA\u00F7\u009Cp\u00D5\u00F2s\x02\u00B4\u00E8e\u0097aH\x02\u0080~\u00E5.d,&\u00AAu\u00FCV7!\u00A1\u00FC\u0097*\u00D8T\x0B\x03v\u00BA\u00FD^\u00AA7[U\u0096\x1C\x0B\u0096]\u00AD5\u00FB\u00E8n\u00B3\u00B2\x11*i\u00C1i\u00D1\u00AA+l\u00EE\u00BD\u00AFD\rZ\u00C5\\@%\u00D6R\x1Ck\u00B92\u00BC)\u00AAL\u00AD\u00A3{\x11<\u0087*\u00DD\u00FD\u00F4X\u0096\f3\u00E8Eh^\x0B\u008F\u00BBpO\u00C7<0\u00C5rDt\u0093\u008A\u00B5\x1B\u00FD\u009A\u0096\u009D\u00E1TV\u008AF\u00EB\u00FA\u00D1\x1B\u00C3\u008E\x1A%\u00DA\u00CB\u00DE1\u00F6\x11}\u00EC\x16V@'tk^\u00EF\u0092\u00D7L\u00CF\u00C8\u00BF[\u00F2\u009E\u00B0\x12\u00D2\u00C0\u00BD\x0E\u00D5\u00A0k/\u00E1+Oi\u00E9\u00FE\u00A4\u00D5S,\u00B1~\u00CC\u00A7t\u00FDWC\u0086jT2T\u00C0\u00B1\u00A1\b\u0095\u0085{:\u008B\u00D9\x02\u00CB'\u00F6\u0097\u009D\ne@\u00C9;%\u00E3FUy\u00E1\u00E65\u00EF\u00FC\u00DD\u00F5\u00EDK;\u00BCu\u00D3J\u0083\x12\u00B7q\u00A8\u00C2^C\x04\u0083M\u00ECs\u009D\u0084\x0E\u008E\x15\u00F8\u00FF\x02\u0094\u00D1\u00D4\u00AE\u00F9\u00B0\u00FCyF\ff\u00BF\u0089\u00FEWaO\u00B7\u0098\x1A\x17H '\u0081\u00C3\u00E9q\u00CA\u00B1\x1D\u0081\u008E\u0090\u00A5W\u00AF\x00\u0088\u0082\u0096\u00F2\u00B2\u00FB\x04\u00F5W\u00CC;\f\\\u00EC\u0096\u0082\\S{Bk\u00DD\x00\u00C49L\u00B9\u00CC\x14\u0098\u00B9\x15\x0B\u00F2O'\u00F8\u0095)8\x16.\rE1\u0091hD\u008F!\u00AC\u009E\u0093~\u00C8\u00AB\u009F\x14;u?\x16\u0098J\u00B4{\u00ADA\x1ES\u0089\r~\x1D\x0E\u00D4\u00F2\x1A-\u00EF\u00EF\u00C0\u00A4\u00A7kE\u00C5\u0080H\x07k\u009B+\u00CC$Z\u00B99\u00F0l\u008B\u00C4\u00FD\x12\u00A8,\u00DBQ\u00A9\u00C7\u00B6Z\u008A\u009D\u00DC\u00A1\x1E\u008D\x02^{\x1D4\u0094\u00F3\u00D4\u00E7\u0081L\u00DBFS\u0099\u00EE\u00E7.\u00DB\x13\x0F2\x0FF\u00D33\u00E9E\u00E8;J\u00E1\x12&\u0085N\u00D5\u00E2OR\u008D\u0095\u00AE\\\u008F\u00E5\u0099\u0099\u009C\u0084\u0082\u00EE\u00FF6\x1Fy\u00F4]{~\x7F\u00EF\u00DF\u0097\x0Bo}f\u00A1\u008E[\u009Dv\\\x1D\u00E7\u0089\u00E8ol\x1Dy\u00F1\x15\u008B\x1B\u00FF\u00E2\x13k\u00C3:S\u0088\u00B6\u00B0ju\u00FB\x07\x00\u0080h.#\u00AF0\u00D5@g\u00D1\u00A7\u008AoO\x1C\u00A2\n:\u0085\u008E\x05E\u00F9P\u00D9\u0094\u00B4\u0096\u009BN\u00E20\u0086\x07\u00FER\x02W`\x16\u0081\u00AC\u00C3\u00AE\u0088\u00BAz\u0086'\u00AA\u00EE\x06Z\u00B6\u0081<\u0086\x04+5\u00D1`\u009F\u00AC$\u0093\u00992\x00\u00A6\u00EE\u009F`\x1C\x15G\x15X\u00EB\x14\u009C\u00A4\u00DB\u0092\u009CC\x04\u009A\u00CDE+\u00C9\u0088\x1D\u0098\u0082\u00F8\x12\x13S\x03l\x1D\u00CB\u00F7\u00CD\u00D3f\u00DA\u0081\u00A6\rc'o?\u008F\u00CB\u00A0|B\u00BD\u00F5\u00A0\u00D5h\u00C8\u00F9\\\x05VF\u00DD\u00BA\u00BD*\u0092\u0092\u00C2\u00EAy\u0098\x12\n\u009D\u008F\u00D6\u00FF\u00DF\u0095\u00E9L\x04-\u00BB\u00BE\u00E6\u00A8u\u00F00mB\u00C2\u00F2\u00FB\r\u00BAs\u0080\u00A8\x19\x12\u00A47h;\r\u00DE\x7F\u0093\u00D7\u00CC\u0095\u00A78?\u009A\x1B\u0081\u00BC\x07z\u00BD|\u0087I\u00B5S\u009FO\u009C\u0083q\x1C\u00DE;\u00FF^\u00F1\x0624-\u00C6\u00C1o\u0098i\u00E1\u00C8Z\u00F9|V\u0097\u00F7 G\t\u00B0\u00D8?n\u008F\u00DF,/>U\u00CA\x008E!\x03\u00C7s6\u00CE\u00BA\u00E2Y\u00D8\u00FBc\x1BK\x00\u008C\u0093\u00A4\u00F6_\u00B40\u00A2a@\u0093\u00A1\u0084\t\u0099u\u0098b\x06\u00E9a0\u00BE\u0095N\u00A2IZ\u00B5\u00DA\u00BB\u00A0E\u00A6#'9=\x01\u00EE\u0093\x15\u008D^f\u00EA\u00FB\u00D3\u00D2X|\u00D8\u00C0.:A&\x19\x052r-\u0086V\u00E2K\u0099Z\u00A5n\u0084\x17\u00B3\u00C6\x0E\u00A8\u00D1\u00B2\u00F07\u00EC\u00DA\x15\u0082-(\u00B6\u0094\x19\x07kz\u00BADv?\u00A2\x0B;]\u00E6\x1D\u0093,\x00\x01?\x02rK\u00B5\u0086\u00A9\x0B\u0094\u00EDK(\u00A0\u00B1\u009F$J\u00EF\u00F7\u00C9NL\x04\u00F9\u00CC\u00CDv\u00D7\x1D\u00D6\u00CBa\x02\u00DA\u00B9\x10N\u00D7\u009C\u00C8\u00AAN.\u00C2R\u00AF\u0093\u008CG-?]5\u00DC\u00FC\u00E8\u0084\u00E4 \u00AB}\u00EE l\x00\u00AA\x1Aa\u0084e!,|X\u00F6\x1E\u008DX\u00A7\u009D\u00A6\u00B2'\u00E5\u00B2#\u00C0\u00CC\u009A\u00E5\u00B0\u00BF\u00F3\u00D8\u00B9N&\u00AF7\u00DF\u00A7u\u00D4f\x18\"Xj\u0086Y\x15\u00E8\u00A6\u00FD\x02\x10^J0h\x1DxL%\u00E2Y3\x0F\x19\u00B8\u0092Y\u00E0\f~\u00E0\u008E\x11;\u008F\u00DE\u00FA\u00B1\u00FD?\u00BA\u00F7\u008AS$\u00BE6'O\u00E5\u00C1\x00\u00E0\u00AFT\u00E7/\u00D9\u00BE\u00E9\u00FD\u00EF\u009C/\x1E9\n[\u00B4W6\u00E1qx\x04\u00A5\x1E\u00C1:\u00EFL\u00AD;5ih~j\u00D4\x0Et\u00A4\u00A6\u00D5\x00\u00FDP,T\u00D9\u00DE\x7F\u00F7\u0089\x16w\u008D\x1CV\u00D4\u00DF\x1E\u00E9\u00B1(\u00C7u\u00E5a\u0096\u00CD&G\u00E4\u00AF\u00FD\u00FA\u008C\u0080\u00A38\u00A6\u00F6\u00C1'\u00C9j\u00ECh\x16@\u00B1\u00A1\u0082}#\u00B0\u00A1\u0082\r\u00F5>\t\u00DD~7\u00B5pa\u00EE\u00AE\u00EC\u008C.\u00AA[\u00C9\u00F9\u00D2\u009FfO\u00E0\u008B!\u0083\u00A8s\u00F2\u00B9\u00BD\u00BB\u00B2\u00D5\u00CB\u00A0G\x01\x15\fK\u008D\u00EB\u0095\u00B1\u00D4\x0F !\u00DE\x01F\u00B9f\u009F\x06\u0081_\x1B$\u00F8\x06\u00AB\u00F5\x0B\u00B6\x1F\u00C2Z[\x1F\u00C9\fI\u0092\u00DA\u00EC3B\x11\u00E7&\u00DD\x19J\u009EC\u0086\r\u0080fX\u00C1\u00D0G\u0093[ \u009D\u00E0\u00A6i.\u00D6J@\x05k\u00ACr\u00EDy\u00CD\u00E4.0\x1Ce\u00BDC\u00E5j\u00B4\u008Aa\u00F1\u0099\u00FB\u00F3\x1C\u00C8\u00ED\u00E0\u00F5\u00F5\u00E2u\u00A9=\u00D3I\u00DDC\u0084\x12\u00F6\u00BD\u008E9\u00DF'\u009E-\x10\u00F3\x11\u00D2\u00B1y\u00C9\u0091\x0F\u00EF\u00FE\u00CF{\x1E'\u00DF,\u008B\u00BFM\x1EOt\u009C\u00B2\u0090\u0081\u00E3\u00C1\"\u008B\u00FF\u00B2s\u00F4\u00F9W.\x0F\u00BE\u00F7\u00AA9\u00E6!\u00F8\u008A\u00B2b\u0092\u00BB\x7F@\u00FC_\u00948B*\u008Ax\x00\u00F1\u00920\x11\u00EC\x10*d,\t\u008F5k\x05c\u00C5\x02&\u00DDp\u00F8\x12\"\x04IA\x0E\"\x13?sO T\u00952\u008C\u0098^\x13\u00DB{GM<\u00EC\u00DC\u00E1\u00A9\u00F8i\u0098\u00BD\x10\u00FF~\u0084Yu\u0082T\u0083\u00DAa\u0097\x14\u00E2\u009ETa\u008C\u00D3x\u009Bno^O\u00D2\u0099\x19\u00AAD\x15`\u00B9\u00D6\u00DAX$Z\u0096\u00F1Z{y\u00FE\u00AA\x1E\x1AH\u0084\x04\u0093\u00D0\x05\u00D99it\u00E5A\u00A4^a\x169\\\u00D1nX\u00C3\u00E8\u00D7\x16\u00F5\x05\u00BE\x7F,\u00CE\x02\x0F\x05\u0090\u00EF^|Nt\u0098\u00C5\u009E9[\u009FF\u0082\u008A@\u00CA\u00BB\u00E1\u00EF\u00DE\u00F33\u00DE\u00D7\x18\u00F7\u0087l\x13\u00E7.:\u00B3.\u009D\u00DFu*\u00DD\x14V>'\x1A\x18q\u00EF\u008FF\u0088\u0082\u00DFz\u00EEW\rD\u0086\x0B\x1AaB8\u00FF+\u00CA \u00E6\x0E\x14[\u00E7\x1E]\u00C8S\u00DB\u00F3O\u00B52\x00Nq\u00C8\u00C0\u00F1\u00C2\u00B5\u00DD\x1F\u00FA\u0096\u00BE\u00EB\u0095k\u009D \u00A2\u00AD\u00B7\u00D0&\u00DEA\u00F2\x0B\u00AC\u00FD\x1A`@d\n\u00AE\x1C\u00EFg\u00CC\u00BFc\x02\u00BB&\x0E\x16\x19y\u00E3\u00AE$X\x0F_\u00B5\u00BC\u00F6\u00EE8\x02\u00BFg\u0098\u0080|\x11.(\x15\u00C0\"\u00FA|<r\u0093x\u00BC\u0099EG99\u00E9\u0081D\u00BF\u00C3:1F`\x1C\x15[\u00AA\u0081\u00ACGSVE!\t\u00E9\u00D4\x15W\u00C4\x12p\u00C7\u0086\x0E\u00C5\x05F\n\u0082\x03\u00FC6\x1F\u00B9=VHP\u009D\u00C74\u00D7\u00DE\u0090~\u00C5r\u00EC\u0091\u00E9\u00C0\b\u008CK\u00B8\u00EB\u00CF\u0090C3\x1Cpa:\u00F6\u0087\u00CDUK8R\u00CE_\u00FF\u00D6\bA\u009CX5\u0096\u00B0\u0084\u00C6\u00A0\u00FCp\t:\u0086CyO\u00AE\u00A0;\u0082W\u00C1%\u00E1j\x16\u0084Y\x18.\u00CB\u00C6F\u00B0I\u00C6\u00B2\u00D0e\x1Ar\u00E51T\u00F3\u00BE\u00EB\u00B3\x185\u00C3\x12\u00BE\x07\u00E5\x01\x148^F\u0082#\u008C\x15L\x19\u008C\u00B2\u00C0\u00D1\u00C7\x1Cz\u00E5\u00EE\u009F;\u00FB\u00CB\u00EE\u0093x\"\u00E3\u0094\u0087\f\x1C\x1FS\u009D\u00BDt\u00EB\u0096w\u00BF}\u00AD=A\u00A5Y\u00BE\x1A4\u00BC\u00B5\u00A3\x11\u0087c\u00D4\u009A\u00B9\u00DC\u00E8\x17Y\u00B4i\u00F0\u00CF\u00FDAR\u00E3\u00D6\u009A\x04`\u00DA\u00BB +\u00CD\x00\u00C0;\u00DE\u00B8\u00E57\u00FE:{\x05\x00\u00D1\u00F7\u00A0x\x0Bm\u00B2?\u00D2DN\u00BC\x04f)r\x7F\u00D5\u00A95\u00A1\u0092c\u0098\u00A0Tf<?\x04\u00FB:\u008C\u00CA\u00EC\u00A1\u00C3z\u00F7\u00B6j\u00DD\\t\x16\u00FCX\u008B2\rD\x7F6V\x1E\u0082b\u00D6\u00B3\u008AO\u00D4B\u008E\u00D6\u00DDj\u00BA\x0B>_\u00DA\u00FDR\u00A1\u00B6\x0E\u00B4\u00A5\u0086%&\u008D\u0099\u00DC\x03\x16[\u00D1\u009D\u009F\u00A9`\u0090\u0092\u00F9@\u00F2\x02\u0086\u00F2w4x\u0081_3\u00B3\x11\u00B4\u00BA\u009A\u00D9\u0083\b\x1DT\u0093\u009E\f\u00CD,\u008A\u00B6\u00B0\u00A2k\u00A3=K\x16R!0\u00A0\u00F4\u0098\u00E2\u00FF=\u00C9a\u00E8\x02\u0095\u00CC\u00D0\u00D8sS\x10\u009C\x1E\u00BA\u0084\u00EB\x0F\x14O(\u008E\u0085r\u00ACr\u00BE\u008E\u00C825\x05\u00DA\u0092\u00F3/\u0097\u0096\u009B4\u00A8!\u0088\u00DDK\x18\u00E1\u008A\u0085\x18B\u00E5\x1Btt\x1Cy\u00C8\u00E1\u00F7\u00EE\u00F9\u00A5\u00BDO\u0092\u00AF\u0095\u00E5\t\u0088\u00E3\u0097=Ny\u00C8\u00C0\u00F1P\u0091\u00E5\x1B\u00FA\u00E2y\u009FYn~\u00F0\u00CA\u00B9\u009E\u009D\u00CEv\u00A5*#?#xR\u0084\x7F\"\u00EC>y\u00BA:\u00D3\u008B\u009AT\u00B2\x12\u00CE\u00F6\u00F1\u00E3\u00D6*\u00B4\x0E\u0098\u0092\u00D0xA\x14\u00C2\u00EE\u00BF\x03\x04*iC\u00BAp\u0091)p\x173\u00B2\x18n\r\u00A8\fX\u008D\x06\u0094}9\u00C9c;qE\u00E3\u00E7u\u009FX}\u00E2o\u00BA\u00E0\x0Fn\u0099\x07\x17\u00D8@\u00C4{*(\u00F1,\b\u0095^\u0084\t]\u0082\u00DA\x1B\n\u00B1kL\u00DAT\u00AEN\u00CEr\u00E5A\x0B\x16\u009F\u00F93\u00ECJw\u00D5\u00AC\u00B0\x02V\u00B8\u00EA\u00F7\u00DCk\x00\u00D83t\b\f\x07)\u00F8\u00D1\u0097B\\A!\u0089`\u0082L5*\u00A4\u0084,F\u0081\u00B6\x10\u00C2\u00F1\x1Ca\u00F6$[\u00A13\x05\u00D8\u00E9\u00F9i\u00A58O\u00E7\t\u00C3\x01zk\u00DC\u00C7\x04\u00DD\u00F8\x06@n\u00CBP\u0086\u00EB<D\u00F8\u00EA\u00CF\u00BD\u00C7v\u0099\u0091\u00EA\u00E1\x1D\u0092\u0091\u00C8\u00FBp/\u00C4\u00B1\x14z\u008D\u009D\u00CFbr\u009D\u00AE,\x04\u00D8\u00BC`\u00E7p\u00FB\u00B6\u00D9\u00F3n+e\x00\u00DCF!\x03\u00C7\u00F3\u00DA\u00FC\u0093\u00FFP\u00DBw\u00EF]v\u00A86t\u00E7 d\u00C5\u00A2)\x07f\x00\b\u00BCU\u00D2\u0091\u00BDD\u00CD\x17\u00A0\x12\x02\r\u00D0\r/\u00F1\u00BA\x02Q@\u00E2\u009E@-@\u00AA\u00AE\u00BA\u00F6\x16\x02$t\u00F5\u00FD\u00A7\u00E6\u00E4\x03{\u0088\u00FD`\u00EB\x10\x04XG7S\u00F2\u00FA\u0098\u00B9(\u00FB\u00D52\u00EC\u00F0S\u00C1\u00FB\x15`\x14\u00EC\u00A8`\u00A7{\u00D8\u00E0!DE\u00C6\x17=\u00DD\u00EF$\x05\u00C1;9\u00BBP\u00BB\u00EBonrG\u00AC\x7F\u00D03\u00E41\u0097:q\u0096\u008Et\u008F{\u00D9\u0096n\u00EF\u00B2\u00AB\u00AD)\u00E1J\u00C3B\x17\u008D\u00CCE\u00D4\x1Dhn\u00C3\u00DB\f\u00C5\u00A1\u00B9\r3\b\u00B9\u008C\u009CN~/\u00BBb\u00A1\x1A\u0099\u0083\\\r;\u00D7\u00A5X\u00D6c)\u008E\u00C9\u0098L\u00B2\x03\f\u0085\u00F8\u00CC\u00EA\u00F5\u00F6\u00BCft\t\"W\r)\u00F8\x7F\x1A\u0081\u00B1\u00DCk\u00BE\u008FZ\u008B\"\u00E55K\t\x192\x1C\u0089\u00F7\u00E1\u00D3 C\u00CCcA\u00C5\u00ED\u00F5m\u00E0\u00EF-\u00BE\u00FB\u00EC\x1F>\u00EB\u0093\u00A7L@\u008F3n\u00B3\u0090\u00A1\u008E\u00E7\u00EE\x1C~\u00C3o\r\u00F2\x1D\x0BY\x07 \x13\u008A@\u00E4\u00A7)<@\u00B8O\u00B5\u00F5y\x05\x05iU\u00A8\u00E5\u00CD\x05v\u00F7\u00BF\u00A2\u00B6.p\u00E6v\u00B5\u00CCR\u00C4\x04(\x00\u00A2z>\u009CV\u00A9\u00E7\u00DFD\u00E0#\u00DB\u00E0\u0096(\x1A\u009A\x14\u00AB\x1B\u00C0\x10\x15\u0089j\u00B8\u00B3\u00DA}\u00A5g\u00B0\\\u009Ai,\u00C0L\u009EY\u00B15U\u009C=\x02\x1B\n\u00EB\u00AA\u00D4\u00D3\u00BD\u009DuC\u00F4\x07\x18]\u00D9:+%uwp\x0F\u00A3uX\x7FD\u00BA\u00C1c>\u00C7\u00EC`\u00ACAUV\u009F\u00D9m\x14\f\u008E\u00A5p-D\u00D1\u00CC,\u00CC\x15IM\u0086F\x06\u0082\u00FD\x14\u008D\u00ACna\u00C1\u008C\u00E7\u0081\u00B9\u00E4\u00E1\u00C2{\x16imi/7\u00C3\x04\u00C1L\u00D3\u00927d\u0086 i\u00C2\x12\f\u00D4\x19\u00AD(\x18\u008E\u00AC\x10\u008B:\u00C3\u0081\u00E9\u00F9\u00E9\u00C50\u00A5<\u00F4\u009CO\u00B1\u0096Ex\\\u00C9\u00E7\x10d\x17%\u0086\u00B4\u00ADO)\u00CF|\x07@\u0086\x12\u00B5B2B\u00B7\u009E-\u00F3\u00F8\u008Cj\u0088R\u00A9\u00CB\u00A3(\x0E\x7F\u00ED\u00E17\u009E\u00F3\u00EE\u00BD\u00CF;!\u00C1\u00BB\x15\u00E36\x0B\x19\u00EA\u00F8W\u00F3\u00B3^\u00FC\u00D9\u00A3G\x1E\u00FB\u009E\u00F5\u00FE \x1Df\u00E1~\u00CAD \u00FD\x01\x14\u0081\u008A%\u00D1\u00FDe\u00A8\u00C9}\u0080v\u00DD_\u00BC\u00C2\u00E22z\x17&l\x1D\x19&4\x10\u00F5\u00B6\u00EF\u008B;\u00C8\u00F3\x15mL\u00AB\u0096D\u0093\u0095\u00EB\u00F4c\u00F0\u00DA\x18J\u00A4G\u00A0yl^\x7F\u00B7\u00C9l\nM\u008A\u00D2h\x06r\u0096s,\x14\u00D8D\u00C7L\x1B\u0096\u009C\u0098>\u0081:\u00CC\u00FAL\x14O\u00F9;p\nZ\x1E\u008F_\u00B53\u00BE6\u00EB\u00D8 \u00C17\u00E8\u00BCV\u00FE\u00BF\x1C\u0087\u00E4,q%\u00BC\x14\u00AF\u00C3\x00B0\u00FDQ\x068I\u00AF\u008EY\u0099\x16\u008A\x02\t\u00AA\u00C1\u00EEk\u00E6\x19'\u00C0\u00DE\u00E7RS\u00F0\u00C5-.\u00DB\u00A5Y\u00C8 \x11>VRQ5\x0E\x04\x7F\u00C5\u00CF\u00A3\u00FE\u00BE\x18\u00C2\u0091u)\u009D\u00DEN*\u0081t\u00D5\u00B3n\u0085\u0099\u0086\u00C8\u00C8h\u00F1|4\u0085\u009D^%\u00C3\x07Z\u00FFZc\u00D1\x03[r\x03\x03\u00F8j\u00E0\x00$C&\u009B\u00E8@oKl\u00DE\x7F\u00F3\u008A}\u00FFr\u00CF\u008B\u00F1\u00EE[#}'6n\x17\u0085\u00F0u\"\u0087\x7Fe\u00B1s\u00D9\u00F5\u00CB\u00F1\u00CF\u00FEZfg\u008D\u00E4\x19\u00C4\x0BP\u00B0\u00F5\u0098\x14\u00CD\u00C8\u0087\x1E3\u00A6hb0\u0096\u00F4\u0097\x17}\b\b\u00EE\u0085\u00DB\u00E5\x0F\u009F/'\x00I\u00A4\u00A7@\u0081\x02\u0092J\x1A\u00E7\u00D7\x10\n\u00F8$\u0099\u0080\u008BeB&\b\u0084\u00D8?\u00D9\x7F~\x1BJ\u00EFG\u00E2>\u00AA\u00A2\u00A1\x17\u00B4\u00A3\u0082-L\u00EB\u00FE[U\x1C\u00DA]\u00C1(\u00E0\u008D9\x06\u00BF\u009F\u00A5\u00D2\u009B\u0090P6\u00E1\u00C6\x17w\u0094q,\u00C3%\u0082\u00AA|\u008E=\u00C22o\u0094\u0082d\u00E9Q \x15\t\x1A\u00F2s\n.i\u00C2\u00E6r'\u00AD\u0099\x19\u0082\u00DE\u0081\u00D11\u00A0\u008A\x1B\u0090?\x10\u0082\u0085\x14n\nce\x05N\x18\u0081\u00E4\u0086\u00F0\u00F9#\u00BDB\n}\x02\u00C79\x07\u00EA1L\u00A1I\u0080\u00B044\u00AD\\;\u0085\u009Fn\x7F\u00E0AZK\u00E0\u00D3\u009B\u0088g\u00DE\u0099X\u00D7\u00C8@\u0091UY\u00E7\u00BB\u00DD\u00ABb\u00FB\u00DC\u00C5\u0091\u00E5S\x16\u0097\u00C9s\u00E5\u00F0\u00DF,a\u00A7n\u00DC.!\x03\u00C7\x0Fnm?\u00E7u\u00D2\x7F\u00FD\u00C6\u00F9FX\u00B5\u00C0\f\\\u00F8d\u00B4K\u009A(\u0083\u00D5\x1F`j\x195_\\Xh\x07\x07M\u00D8[\x1E\x0FSl\x00e\x7F\u0081B\u00DDm\u00A7\u00F5\bBIy\u00A1q}\u00E58i\u00A1\u008BBb&\u00A2O\u00CF3Qvq\x1F\u00EA\x12F\x0Bh\u00C4\u0099\u00B3\x15\u00D8\u00A5\u008A\u008D\u00D1\u009B\u00AC\u00AA-\f;S\u0089\u00D0 \u00C2\u00841\u00D1\u00FA\u00E6U\u008E\u008D\u00D5t>\u00F9\x06'1\x11\u009C\u00D4n\u00A1E\x00\u008C\u00DA\u00CC\u009A\u0095n@<\u00AE\u00887\u0080\u00D5\u00CC:\b\u009C(\x05\u00ADkrg}\x054\u00DB\u00B1\u00FBs\u008A\u0090E\u0081Ah\u00B1\x11\u00A1C\u00A0\u00FFE\u00A0'\u00D5\u008E\u00E5\u00F8\u00F1\u00B9\u0083y<6\u00CA\u00FE\f%\u00F8^\u00E9\u00FD\u00CDz\u00BE\x076\u009A\u0099Tb\u008Ei,\u009A{}\fE\x18:@\u00E9=tW\x12-\u00CE3x\u0096LF\u0086oTh\x06(G\u0095\u00AAf\u00D8C\x1EK\u0083b\u00B9k\u0081\u009D\u00A7\x1F}\u00EE\u00BE\u00DF<\u00F77n\u00BD\u00D4\u009D\u00D8\u00B8]\x15\x02\x00<\x7F\u00FB\u00C8\u00CF\u00FE:\u00D6\u00BEw\u00C4,d\u0086\x16i\u00E2~\x13\u00A1\x05Bp&\u00CB\u0083\x15aLP\x06\u0091t'\u00BAkB\u00DC\u008A@j\u00E0\x11t\x0B\u00AD-\u0098\u009F\u00D3\u0089\u00FA6\x11<\u00EE\x0F\r\u00EE\u00A9BZ\u0098\u00E3\b|]\u00E3\u0081\x16\u00825\u00FF\u00C7x:\x1E\u009F*\u0089\x02\x1DY2\u00EB\x13\u00DE\u00D6oP[\u00C3A\u00815\u00C7\x00\u00E6H\u00C1\x1F\u00D4\u00D2r\u00C3\b\u00B0\x0BsS\u00EF\u00BAT\u0094&\u00D4R\u008D\u0099\u00A5\u00F0\u00F3,M!\u00D4\u00C5C\u0086\u0091\x1E\u0083F\u00B8bBo1|\u0093d\x1E\u00CE\u00BA\u00E1\n\r\u00885\x17\x06%k1k4\x04H\\\u0081\u00CA\x01S\u00C1W\u00E4\u00CAUA`\u00D7\u00F4\b\u00A2;SG4\u00A6\u00AD\x05R\u00A1H4\u0085\u00BBi.e\x17)Cn\u00E7\u00F3mV\u00B8+\u00C1:,\u00EFp\u00D2]\u00C9\u009F\u00B5\"=\x05\u00D1\x1E\u00CF\u009E\u00F8R%\u0083\u00D5\u00B4%\rY\u00AClU\u0094W\u00CC\u00F96b\u00F3\u00D2\u00A3\u00AF\u00DA\u00FFG{\u00FF\u00DD\t\t\u00D8I\u008E\u00DB%d\u00A8\u00E3%k\u00BB_v\u00DD\u00D1\u00AD\u0087\u00BD}\u00C07J\u00B7\u00D3'\x1BP\x01\u00C6\u00D7!p\u0098\u00B8\u0086\x15\u00B5N\u00E5\x01D6!\x18a\u00C7\u00D2\u0098\u00A3\x1E=\u008E\u00EFB^\u00D2C\u00D9\tI\u00D3\u00F2\u00C3<\x03U\u0098\u00C0\n\u00DD\u00C5\u008C\u00FB'\u00E9\u00A5r\u008DUq\u00F0\u00B0qo\u00DC?\u00E8\u00AA\\\u00C6\u00DB\u008E?*\u00B0\u00A5\u00E6-4\u00A4\x0B-=Kn-\u00A4\x10g\u00C9\u00E9\x04\u008Cb\u00E8P'!3\x05\u00E1\u00CAr\u00E1\x11\u00AF\u00924\u00CCAb\u00DD\u00C4\u00C0\x12\u00EC\u00AA\x02=wq0\u00D7\u00B6\u00E7k`\u00EB{\x03N1q\u00DF\u009B8k\u00D1\u00DFE\u008D\u00FF\x13W\x02\x14\x12\u00E4\u00A9\u00DA\u00E0&R\u00BB\f\u00954\u00D7\u0086\u00ACJ/\x04]3L\u00E0\x1C\u00C1X\u00D6\u008EPs\u00F7!EI\u00F2Zy\u00FF\u00FE\u009B\u0085i\u008A\u00A2\u00DC\u008B\u00B0\x0F\u00DA\u00B28\u00AB\\3\x15}4\u0084\u00F5w\u00D3\u00D4l\x17\u00D9\u0098\x13\u0082\u00BF(\u00B6\x1F\u00BE\u00F3\u008Es^\u00B5\u00E7ex\u00C4\u00DF)R\u00A7t\u00DC\u00EE\n\u00E1Q\"\u00E3\u00DBT\u009F}\u00F3\u00E1\u00CD\u00FF\u00FB\u0081\u00D6.\x01$\x1E\x12 \u00FE\u00F0s\u00A5\u0087hP\u00C2\x17\u00EFnX\u00C4\u00DD\x10D\x1FEmeR\u00C81\x02\x1A\u00AC\u00C1\u00F0,\u00F2\u00E50\u00A5\u00A9\u00F5E\u00FB66\u00D15C\x04\u009E\u00DA5<\u00CA\u00FE\u00D3x\u00B6\u00A4<y\u00FD\x1EVT:sN\u009E\x04\u00BAx\x1D\u008B\u00B1cP\u00C1\\\r\x0FX\u00F85\u00AF\u00F1\u00FE+8V\u00EE1Ro\u009A\u00CDGxL\u00F2\nH\u00A9%\u00B8%\u00CE\u00D8\u00E4\u00C4fZ\u008D(x\u008F\u00DF\u00EA\u009C\x01\u0085\u008A\u00E3\x0B\u00DA-\u00CF\u00E3\n,dA\u00DD\x13So\u00E7\u00EE\u00CF\u00A6Y\u0080\x16B\u00AF\u00AE\x11\u00D8<\u0095\u00D9\x19>\x0B\u0086\n\u00CB\u009Ea\u0081\u00A5\x05{\u009C\u0093\u0095\u00A2y\u00BF%\u00C3\u00E3/\u008D^\b\u00A7E\u00BC\u00BF\u00FA\x1E\u00FC\u00DE\u00C7\u00E2\u00E1q\x15(f\u00B4\u0080\u00F4`b>h\u00C1\x18\x14\u00A1\u009C[7\u00E6\u00A7\u0091\u00E0\u00FC\x19z\u00A6F\u00CBo\x00\u00E8}\u00C4\u00E2+\x0F_\u00B9\u00EFE\u00BB\u009F-\u008F\u00B8u\u00AD\u00D4Of\u00DC\u00EE\n\x01\x00\u009E&r\u00F3\u00AB\x17\u00DB\u00CF8tt\u00FB\u00CF>\u00D66\x0E\u00F0%\u0085\u00E0\u00A2Z\u00F6\u00D2\u0085\u0086\x13$\u00B6\u00D5\u00B0\u00C4\u00B4x\u00B5 )\u00ADr\x11\u00C0\x12f\u00C4q'\x1A_CYh9G\u0086\x19+\u00D6\u00C8\x15\x05_\u00F6$\x05\x19\u00D7\u00AFay\u00C8w\u00AF\x13PBy \t4\x11\x12\t\u0096\u00A3b\u00E1\x13)]\u00DE\u00AC\u00C3\u00E7\u00FA\x0B\u00A1\u00D8\u00FA\u00D4%>\u00E6\x1E\u00A9\u0098\u00A2\x17\u0080\x04:\x1F\x18\u0088\x13\u0093\b4Z\u008D\u0082#\u00EE*\u00DE\u00EC\u00C7\u0098\u008A\u00BD\x03\u00A1\u00F0\nV0bZ\u008A\u00DEt\u00F5=\u00DA\u00E7,~\u00A2\u00D5\u00B6\u00F7;}\u00DEI\u00FCq\u0090\u00D1\u00FF\u008E\u008CMy\u00E7\u00E4<4'-Qqg\u00EF\x0BW\u0088@d<\u0096\u009A \x1FT\x03\u0093H\x0F\u0086\x041;\u0099\u00FAs\x1F\u00E8\u0089N\u00DE\u00A9\u00960\u00C1\u008D\x12\x14u\u00DE\u00F1\u00B8\u00EE\u00A0\u00D8\u00B9\u00A4cy\u00AF\u00AD\u009B\u00E4\u0099\u00B3g\f/^\u00BB\u00F9\u00C4%\u00EB\u00E4\u00C7\x1D\u00A2\x10\x00\u00E0%\u00F3\u00F5O\u00FD\u00A7\u00AD\u009Do=\u00BC\u00B9\u00FC\u00C3\u00AB\u0086\u00D9F\x15\u009E\u00AC\t\u0097I\x18\u00C0\u0087m\u0093\u008FT\u00E3d~U%\u00C1c\x01\u00B0\t\u00E1\u009A=\x15\u0086\u00BB\u00C8\x13\u00C4\u00B9f\b4\u00CEy\u00BC\u00E2$(_6{(\u00F8\u00A9\x03\u0084\u00AC\u0093D&\u00C4\u00A6\u008ADW`r\u00F2\u00D3\u00F3X]\u009B)\x04\u00B5\u00DC\u00FF\u008E\x0Bt\u00E3*K\u00CA\"\u00A8\u00E3\x1C\u0097n/\x05h\u00AC\u00CA\u0082J\u00A0\u00D6kHxC\u00D1\u00ECe4\u00C1\u00E3\u00E3\u00A5@\u00AA\"V\u00C3c\u00A8\u00C7\u00EF\u00CC\u00BF\u00CB\f\u0082\u00F8kc\u00F8Q\u00F1\u00A1d$\u00A6\x17\x12\u0082\x03D\u00E8U?\u00D7r\x1E\x14%BA\u00E5\u00FD\u00A8\x7F\u00CF\u00D0#\u00C2.Me\u00AC\u00D0\u00C8\x14X\u00EC\u00EF}%}\u00DE\r\u00AE4l.\u00E5<\x0BP\u00B1\bx\u00ADUi\u00E5\u00BD\u00B7\be\u00F3\x19\u00D9\u0083H\x0Fa{\u00EF\u00E6\u00D6\u00DAS\u0096\u00DF\u00BA\u00FF\u00E7\u00CF\u00F9\u00D4\u0097#C\u00B7\u00C5\u00B8\u00DDA\u00C5\u00D5\u00F1\u00FD\u0087\u00B6.\u00FB\u00E5\u00A5\u00BC\u00E9\u00A0\u00CCm\u009D\u00D1\u00D1\\\u00C9I\x1F\u0082x\u00F1\u009A\x02\u00DD;Zw\u00A7\u00AD\u0082|\u00A5\u0096`\u00D5\u00AA\x0B\u00DC\u009A\u0085\u00D0\u0090R\u00AA\u00A1\x1CZ)~\u00A1\u00D5;f\u00B9-N\x06W2\u00ADX%\u009D\x1C\u00FF\u00D8\u00BF'\u00BF;\u008E\u00F1(2\u00BB\u0091\u00F1\u00A8\u00AA-\u00CD\u00BE\u00A6\u00C0n\x15\u00CC\u00D5\u0097\x7F\x1B\u00B9X\u008B\u00F74\u00EC$)e1W\x05\u00C2*:.\u008A\u00E0\u00DA\u00B3i\u008A\u00A8\u0081\u0094\u00EA\u00CAbX\u00A6\u0095c91\x17ba[\\\x02\u0085\\\u00C8e\x10\u0099\u00D46\u0088f\u00BBvZ\u00E5\u0086\\\u008A\u008E\u00E0\x1AC\x02\u00DBOJ\u00A9\u00F4\nP\u00E8\u008AAx\u00DD\u00FCL\u00E9A\u00D1\u00DBI\u00F4>j\x19\u00C0X\u00BE\u0086\u008A\x1A\u0099\u008D\n(\u00D6mf|\x0F\u00DD\u00B2;Tj\u00CC\u00D8X&\u00C6\u0095\u00DF\u0098\x00&\x17\u0096\u00D5r\u008D\u00F5>\x04\u0096e\u0081*\x16g\u00ED\u00F4\u00E1\x1F,\u009E}\u00D1\u00E5{.?I\u0091:\u00A9q\u0087+\x04\x00x\u00E1\u0097\u00B6\u00BF\u00FB\u00F2e{\u00F5!\f\u00E9\t\u00C0\u0080.s\u00B3\u00BD\u00E0\u0086BJ\u00A1\u00EC\x00\u00AAu\u00F6mk'\u00A5t\u00913\u00F4\u0098\u0084\x02L\r\u00ADz%\u008AH1\u00D6\u00F4&\u00B1\u0081\x10\u00F4\u00C2YXm\u00B0\x1Ay\u00FD*\u00F4+\u00C7Ze9\u00C66=\u00F3\u00DA4Om\u00EC\u00D8\u00E8\u0082]\x00\u00D6\u00BB`}\u00CC\u0095\u00A2C!t\x16>\u00D5\u00F0\x02\u0099\u0092\x1CY\u0091\u0089\u00F81\u00A5\u0090?P@GE[d\u00A3R\u00AE\u00CD\x10\u00A4$\u0098\u00A0\u00CF\u00D0r\u00B2\u00C3W\u008Bv\u0090\u00CEX\u0089\u00DE\x10\u0096\n\u00C1\u00B7#\x0BQ\u00B4d\x1E\u00E0\x19\x12\u0094^\x04(\b\u00BF\u0094\x15\u00AE\u00B9?\u00AC\x1E\u0080\u00AC\u00C2X\x03\u0092\x1E\x0F\x18\x16\u00A5r\x10?\x16\u0095\n\u00C0\u00E7u,\u0087\u0080d.\u00BE\u00F3\x19\u008B\u00AB\u00D4\u00FB4\u0094U\u00B7\u00C9n\u00E4\u00DFdM\u0082\u00D7\x00\u00DEg^[\u0083\u00A0\u00AF\u00ED\x00\u0097\x1E}\u00C9\u00BD\u00DE\u00B6\u00FF5\u00A7B\u009ENf\u009C\x16\n\x01\x00^t\u00CB\u00E6\u008F\u00BC\u00E1\u00A8\u00FC\u00C7\x1D\u0099\x03hnm]h]\u00E3G\u00E5\x17\x1F\u00B43\u00C9\u00C2\u00E5W$\u00E8X\x05?\u00D2i\u009A\x02\x16\u00F1&\x17T\u00B1s\x19kM#\u00ED\x18 b(!)\u00D7\x04\x18\u0093\u00AD\x1C\u00D7'\u0098)\u00A6\u00964l*\x11fS\u00FC\u00D8t\u008B\u00E9E\u00E4\u00F2]~\x7F\x00\u00D8[AF[\u00EAm\u0097\n6\u00C4R\u0090\u00EBN\u0085\u00AD\u009E\x02\u00C3\x03\u00AB\u0086\u0094\u00E8\u00B3h\u00FC\x02\x13\u009A\u00A1TG\u00D2#hK$\u00FBpt\x0FA\u0081X\x17\x11\u00DE=\u00D9\u0085w\u00A6\u00E6\x11\u0090\x1A\x1C\u00A9G\u0094&&\u00C8\u00CA\u00C7\x14bL<\u0084\u00B0\u00FA\u00FC\u00BC\u00E7\u00B6L\u00F9\u00F2\u00BBJC\u00B6\u00FD\u00F3\\\u00D0\u00E9\u00F1\u00AB+?I7\u00F6\u0082\u00E8\u008F+\u00DE\x06\u0089CE\u00B0M\u00C8\u00ED\u009D5\u008F\u0093\x04l\u009E\u0092\u00FD\x17\u00E3<\u009DJ\u00C8\x19\u009E\u00C8P\u00C9\u00B2\b\x12\u00F7\u00A0\u00C3\b\u00BDt\u00F3G/~\u00C7\u00BEW\u009C\x021:\u00E9q\u0087a\b\u00AB\u00E3\u00C7\u00F7l\u00BC\u00E2\u00D0\u00CE\u00E1}o\u00DEi/YHKk\t\x14a\u00AB(~\u0092\u008D\"\u00C5\u00E4\u00FFW\u00D4\u00CF+O@\u0082\u00F1\x16e\u00BF!\u00F4\x068\x11\u0095\u00AE\u00E0cZ\u008C\u00FC\u00DC\u0080.\x05J\u0096\u0084\n\u00C2\u00BC\u0085\u00CCC\x13S\u00C8\u00D0A\u00F2:QB\u0083h\u00B2\u0099%\u00AFZ\u00D8\u0089\u00B6\x00\n\u00B0\u00ADe;\u00AFu0\u00DE\u008B\x1D18\u00FE%nm^*\u00CC~\u008A\x1D)X\u00E2iO\u00A3\u0082k2\u00F4 N\u00DE\u00E9\x01\u00C4\x01\x1E\x1B\u00FB3dzp\x1E\u008AQ!\u00AE_\u0089\u0098\x11$n\u00AE\u0088#{\x00\u00A0\u00C9\u00B4\u0084=>\u00E7\u00ABG\u0089\u00FF\u0081\u00D8\u00D6\u0096Z\u0093\u00C9<!\x01\u0096\u008B\u00C8\u008E\u00E5\u00DD\x05\u00B0\u00D8\u00ED\u0099\x1A\u00CC'\u0091\u0089`\u00DF\u00C9\u00CA\u0094\u00ED\u00A1\u0098\u00E1\u0098\x05\u0095t-\u00A5\u00F6K\u0098xZ\u00CC\u008C\x15\u00E5\u0094\u00CE\u00A6\u009F[\u00D1\u0087\x1D\u00B4'\u00ED\u00BC\u00FA>\u00AF\u00DF\u00F7\n\\\u00F4\u00E5H\u00C9m?N\x1B\u0085p\u009E\b>\u00AD\u00FA=;7n\u009D\u00F5;\u00DB\u00ED\x05#Z\bRX]\n\u00BC\u00CF\u008C\u0089;\u00DEsB1\u00EE>&\u00B3\u0080\u00F4\x1A\u0098R\u00C4X?\u0087\u0083K\u00C7Q2=\x15\r4\x17\x04\u00A9^G\u00E0\x18\u009A.y\x02\u0096\u00B9\x7F%)\u00D5\u00ED\u00ECo\x07HyM\u00BC\u00EF\x0E`4%\u00B4tr\x14\u00BB.\u008F\u008E\u00EC\t\x10\u0098K\u00F3\u0090c\u00E8Rp\r\x16\x0E\u0089O|\u0086\x04\u00F4V$B\"[\u008CE\x03\u00EB\u00B0\u0094\u00A2\u00ED\u00CF&\u00ABK8\x1E\u00E0\u00BC\u0081P\u00A6\u00C8\u00F6e$\x18(\x15\u0096\u00AA\x0B\u0097\x1Dz\x06\n^\n\x0F\u0095\x11\u0090\u00EF\u008E\u00E0!\u008Fk\u00AE\u00BD)N\u00AB\u00F0\u00B40 C1\r\u0081\x1CF\u00D8\\(\u00C7Su\u00E2TyG\u00CD\u00EB8\u00F8^\u009A\x1B\n\x05\"$\u00B1\x05]\u00EDb\u0082\u00A7\x10\u00FB\u00C3\u00B1$g\"\u00A24^u\u00D0U\x01H\x13`Xb\u00FE\u00D8\u00E5\u00AF\u00DC\u00FB\u00F5\u00FB\u00BEG.:m\x1C\u00F5\u00D3G!\x00\u00C0\u00FDD\u00F4\x13\u00AA/\u00C2\u00F5\u009B\u00B3\u00B7\u00EC\u00AC\u00FD\u00B3Q\u0087\u0089P\u00860u\u009F0\x13eP8\x07\x00&H>\u0090\u0093\u008A\u00E9\u00BD\u00C2O\u00E0\u00F7S \u00CF\u00AD\x050\u00C9\x04hy\u00C1\x14\u0094p\u00FD;\u00A2b1\u00EA\x17\u00A8m\"\u00FCI\u00A6\u00A3\u00E1\x04\u00D3\u00FB`\u00B8`\u00BB\u0099\u00B0NR\u0095]\u00C2\u009A-4\u009B\u0090p1\x17\u00E6\u00BCSY\u00B2\u00CE\u00C3\u00EEw\u00E6\u00A5\u00C49y\x19#'\u0088\u00DB=\u00AC!\u00EE\u00C24\x1A\u00DB\u00A7\u00C5\u00F4us\u00DEDaEGt\r\x10\u00D9\x18\u00EA\u00C8 \u0091\x05W\u0081\u00E8\u00BD\x1D-:L\u00F3=#\u00AD\u00BC\u00BA\u00F0\u00C7\u00F9\x19\u00EA\u00F8{k\u00AE\u00EC\u0098\u008D\u0088\u00E5\u00E74\u0081F\u00B6@\u00B3y\u0090\\\x0BhR\u00AD\u00BB\u00A6W\x11s\x00\u00A9\u00B4\r_\u00EA!\u00D8\u00AD\x18+\u00DE{\x16|\u00D1\u008B\u00F2g\x03x\u0093 {\x18k\u008F\u00DA\u00FE\u00B5{\u00FF\u00CC\u00DE\x17\u00C9W\u00C4\f=-\u00C6i\u00A5\x10\x00\u00E0\u0081\"\u00FDJ\u00D5\x17,\u00AF;\u0082?\u00D8\u00DA\u00F8g\u008B>L,\u00FCd\u00B1\u00CB\u0089\x15\u00972\u00F9\u00D3\u00BD\u009B\u00E0\x0B+J\u00A3\u00BA\u00AA5\u00E7\u009C_f\u0098\u0090\u00C7\u00D1\u00DC\u00AE\u00B8\u00E4\u00D5KY\u00BD\u00B6\u00C95\x04\u00FB\u00D2\u00FB'\x14\u0092R\u00E0\x14\u00A1\u0090|?\u00BA\u00FBE\u00B8G\x05\u00B6\u00DD\x1BI\u00A5S\x14\x1A-\u00BB[|z\x19\u00F4\u0080jX\u00D3\u00BBD\u00F6\u0081\u009E\u0085\u00B8\u00E2\x19\x01_,\u00D6n7\n|\u00F8l@\\6\u009F\u0097\x02\x18]pjHe>\u00BD\u00DD?\u008B\u009CF ,wM\u00E3\u00C5\u00A3.\u009Fu \u0084\u00D1X\u009A\u00C5\u0093\u00A2\x07\u00E6\u00F7\u00DD\u00F8\x1DX\u0081\u00E9\u00D6\u009A\u009EB=n}\x7F\u00F1\u00DE40\x1C\u00E2\x0E\u00E9\u00B1\u009AR\u0089\u00CAN\u00BF\u00F6\u00DE\u00F9\u009D\u008D\x0EWr>UZ\x17,gK\u00CC\x1E{\u00F4\u00D7\u00BE\u00EAU\u00FB^ _\u0093\x1C\u00D0\u00D3e\u009Cv\n\x01\x00.\x11\x19\u00FFJ\u00F5\u009F\u00CF\u00AE9\u00B2|\u00EB\u00D1\u008D\x17,\x1C\u009C\u009B\u00F4\u009E+\x13(x\x0B\u008A\u00A8E\u0088\u00859B\u00D0r\u00FF*\u00A0\f=\x18&\x103\u00E0[\u00D4\u0095s\u00C5Lu+\x1C` \u0090@ \x05\u00CEc\u00D5\u0089\u00F5\u00E7D\u009Bx\f\u0088I\x18\x1Dr\x14e\u00D5\u00E8\u00B4fp\u00D0\u00B3wk\u00FB\u00CD%\u00CB\u0088\u0092s\u009DG\u00A6\x1C\u0087\u0091\x16\u00DA\u00CEC\u00F6\x1D\u00A0\u008E5H\u00C6\u00D8\u008APR\u00B4\u0088\x00\u00A2\u009E\u00BFAc\x01Y*h+k\u00EE\u00FE\x7Fs\u0095\x15F)\x1E;\u0082\u0081G\u00EC\u00C6\x18zL\u00ED\u009A\u008E`\u00980*\u00CA3\u00F6\u00FB\x06\u009FM\u00E8\u00E8t\u00C3Kz\x11\u00C0D\u00A0\u00B9\u009Dm\u00A6\u00A9$\u00CB\\!+\u0096\u00FBV\x12\\cM\f\x10\rZ9\u0087\u00D8\u0099\u00B9\u00BB\u00C2\u0093\u00F2n#3\x05\u0080\u00AB86X\u00EB4\u009Dob\u00FE\u0098\u009D_\u00B9\u00E4g\u00F6\u00BD\u00E8tT\x06\u00C0i\u00AA\x10\x00\u00E0\u00C1\"\u00FDj\u00D5\u00EF\u00DA\u00F5\u0085\u00C3G\u00DErd\u00FD%Gd\x0E\x00\u00C1\u00AD\u009FZQ\u00BE\u00C8\u00ACy\x0F\u00A1\fSC\u00F4\x1C9\u00E1\u00A0E ]1\u0084\u00A0\u00A2\b\t\u00D2}t7\x1E\u00C0D\u0090\u00A3n\u0081\u00D7\u00E4\u00E7\u00B1\u00D3\u0088#\u00D3\u00F99S\u0092\u00AB\u0093{r^*\u00BB:\u00D1\u00FD~\u00F9=\u00BB\x15-YX\x13}(\u00AD\u00E0i\u008Cs\u00E5\u00BD\x18*\u00EF\u00E7Z\u00DA\u00BD\u00F7\u00A2\x18\u00E0\x1EB\\\u0087c\x17\u00BC\u0084\u00C8\x0E\u0080:\u00C3\x1A\u00AA\u00F0\u00B6'\u00E9XI\u00AF\u00AB\u00C3\u0094V,\u00D9\u00A3EX\u0091\u00F7\x1Cy\x7F R\u0085\u00A3k\x03k\u00A3.q\x1Ef\x0EB\u00A1\u00F8>ld\u00CA\u00FD\u00ADn\u0081\u00CA\u009F\u0082n7\u00C0\u00BA\x02\u008A\u00B2({*d\u00D1\x14i\u00DCCxY\x1A\u00A1\x0F\u00FB)\u0088\u00DA\u00C9D\u00E9=\u00D9\u009DvU\u00B4\u00D9\x0Ef\u008F\u00DFy\u00F5%\u00BF\u00B4\u00EF{\u00E4!\u00A7W\u0098P\u00C7i\u00AB\x10\x00\u00E0^\"z\u0093\u00EA\u00BF\u0099}a<\u00F8\u00DB\x07\x17\u00FF\u00F1\x16\u0099E\u00E3O\x00\x13W\u00DE\u00F4mZh s\u00EA=P}M\u00ABW'\u00AD\u00BA\x00(\u00AB\x19\x01\u0086\x06\u00D5\u009B\u00E0\x04\u00A5`\u00AE\u00B6U\u00CB\u00F0\u00A5\u00DC\x043\x1B]b\u00D2\u00F3\u00DCU\x19To$Zz\u00D5T\u00A5\x0B\u00F3\x04XuA\u00D9!\u00FB\u00D0\u00D3}v\x1C\u0089u\x10\u009B\u00DF\b\u00C9G\u00A3zO\u0088\u00D5\u00F5\x19\u00E2Z\x10a\x06\u00E3o\u00ED\x02\x11\u008D\u009A\x06>n\"\u00FBl\u00B5\x1E\u0082\u00C1\u00EF\u00B9m}vq\u00DF\u00E6UPY\x11w\u00A0+\u00CFc\u00D9\u00BB%(g\u0099\x10\b\u00A2U\u00BA\u0096sq\u00DB\u00C6k.\u00F3\u0084\u00CF\u0087\u00E7'\u008E\u00A0\u00E5\u00BC\n\x03!\u00C7\u009E\u00A9\u00C4j \u00B8O\u009C\u00CB\u0081\u00CC\x16\u00D7\u009F|\x0B^\u0094\u00ACw\fO<\u00F4\u00A3\x0F\u00FA\u008D\u00F3^!\x17\u009E>\x00\u00E2\u00F1\u00C6i\u00AD\x10\x00\u00E0\u0080\u00CD\u00B8W<\u00EF\u00BA\u009Box\u00DBM\x1B?\u00F7%]o\x14\u00F0\u009CX\u00EAVS\u00FF\u00F5_]\x00\x00\x17\u00F9IDAT\u00F2\u00ED\u00BAPL\u00B6\u00C3\u00CA\u00FF\u00EB$r!\u00AD-\u00D4\u00E8Y(_.\u00B2\u00ECZ'B\u0094\x05F5\u00AC\b\u00F7\u009F\x16\u008F\x13k%\u00F4\u0099\u00AC\x05A\x0B\u00AF\x1A\u0093p\x12\u00C6\x14e@\u0080t\u00A9\u00B6X,\u00AD\u00F9\x1ASe\u00BE\u00AD5\x01\x15\u00B4\u0091\u00F8@GG\x0BO\u00C0\u00D6\u0082t\u008B\u00D7\u00BD\u00A0\u00CC\x19\x7Fl_\u00AE\u00DD\u00B2\t|<K8\u00F1\u0086R\u00EE\u00D8\u0081\t\u00B1\u0086pwL=\x05*\u00E5P\u00E4R\x14\u009D\x1F\u008A\u00AF\u0083\\\u0083\u00AEi\u00BD\u00B5\u00D3\x13\u00B0\u00FBi\u00E5\x12\u0082e\u00E8!\u00D5*]\x19\u00AE\b\t\u00C4\u00F6\u00E3.\u008Ab\u00BD\x17\u00D9\x1Eo\u00A6\u00C8\x0ERT\u00A2H\u00EF\u0084J\u0084\u00AB\u008A\fPp\u00E1AQ@\u00F6l\u00F6\u008D\u00AF\u00DD\u00FC\u009E\u0087\u00BF\u00ED\u00FC\u00D7\u00E0\u00C2\u00BFs\u00BA\u00DF\u00E1\u00E3\u00F4VW+\u00E3\u00E5Wo^\u00F6\u00EB7\u00EB\u00EB??\u00AEo\u0090\u0087\u00C0:\u00FE\x10p\u00C6\u0084@\u0096'\u00BB\u00B0\x05\u009E\x10\x02\u00CA\u009C\u00B8\x1FC*\u00E2_\u008E\x0B\u00A40\u00AAZ&\u00A1\u00A3\u009C\x13)\u00A8\u00DCF\u008B\u00DB]\u00B6\u00D58\u00AE\u00FA$N\u00A5\u00C1\u00B5\b\x00\u00BF\u00DE\u00BA\u00BCx\u00D9_\u00D8~<\u00BC\n\u008Bk\u00D7\u00BAb\u00AD\x1B\u008B1\u00DA\u00B3w`>&+p\bwW0_$\u00F9\u0086\u00CC\u00CA\u00B6D(\x06\x02\u0092\u00CD;\u008C\n\x043\u00B6\u00F9\x12o\r\u008FB\u00F2Q\u00EF\u00B9\b\u00F6D\u00D0d\x1F\x164?[\u00B2#Rs\x14\u00B2\fG$HIl\x04c\u00C0\u00A0\u00C4\x020\u00B6\u00F2R\u0092\u0094jk4R\u0087\u00E9\u00F2\u00B3\f;\u00FB$:\u0089\u00ABg\u00F8G\u00A5\u00D4\x1C\u0097\u0099\u00B0\x1By\u00AC\u00CEtd\u0092\u00A6\u0082<\u00C5s\u00B9\u00F2k\u00FB\u008El\u009D}\u00E9\u0091\x7F\u00FA\u00F07_x\u0087\u00D2\u0091Od\u00DC\u00A9\x14\x02\x00\u00BC\u00FC\u00DACOz\u00F3\r\u00ED\u00B7?\u00B5\u00D88\u00A0*e\u00E9+Mp/\u00C8A\u009A\u009E\u0082\u00BFD\x19i\u00C9\u00B5\u00E0\x05\u008E\x0BHZy\u0089NCi\u00D9\x05fU\u00A8\\\b\x0B\u00A5\u00AB?U\"\u0093~\x02.\u00E8:\u00F2$\u0098(\rZ\u00E1\u00C0;|RO\u00C3\x04E\u00AC\x10\f\u00B7\u00E6\u00B1\u00F8l\u00AE\u00DD\u00B0\u00E1\na\u00D6\u0081\u008D\u00A2\f\u00B8\x04\x1C\\1\u00CC\u0096\u00C5\u00AA2L\u00F0&+V<\u00C5\u00CF\u00F8l\x053\u00B8K,y>*\u0084\x01N\u00A1\u00F6YE\u0081d5#k!\x06\u0099\njU\b\u00F3\u009E\x7F\u00F3\u00F3`'\u0082M]\u00CD\x06\u00AF\u0095\u00DE\x0EA\u009D\u00EE^c\x11J$\u00EF\u008F\u00D4kT\u0085@\u00D4\u00B3\u00F3<\u00A9$\u00EB\u00B2r\u00F0k\u00E5\u00B3\f\x05\u0081\fw\u00E2Z\x05\x18/<t\u00D3\u00DE\u00A7\u00F6o}\u00F4\u00AF\u009Ds;tB<u\u00E3N\u00A7\x10\x00\u00E0g\x0Fn\u00DD\u00FFM\u009F[\u00BE\u00F5\u00C3G6.Y(\u00EB\x1F\u00B2\u00A6\u009Fn\\6(Y\u0089\x05\u00B5\x14'\x15R\u008E\u00B9\u00B9\u00DE\u00D8c\u00C5\u00BB\b`\u00B1\u00A7'\u00C0\u00C5U4\u0094L9\x17\u00BD\u0082\u0091\x15\u0085\x00S\u00A3\x00\u00F7\u0097\u00B2~\u00C4T\u00A1d\u00E7\u00E9\u009C\u00A0\u00DA\x11\u008D\f\u00ED\u00BC\\\u00ECEC\u00F14\x00\u00BB\u009C\u00BD8/\u00B5\x0E\f\t\u00B8V\u00E1\u00AC\x1B\u00A5\u0099\u00DC~\x02am\u00F4\x02\u00A8\u00D2pE\u00DCCh\x10/^\u00CA8\u0099\x1E\x02=\u0083\u0099c\r& \x12kLL\u00FE\u008F$\x185)\u0082\u00DF\u00FF&\u0085\u00A0Q<%\u00B0f$\x02\x07\x1F{\u00CF\u0085Z:=\x05\x0B\x1F\u00AB\x05\u00E7\u00FD\u00C7\u00FD\u00C2\x00J6X\u0081j\u00D4\u0081\u00E4\u00FA\f\x14|\u008D9c\u00CA\u00AF\x15E5U\b\x02\u00C5p\u00F1\u0091+/x\u0086<\u00E3\u00C1\u00AF9\u00FB\x0E\u00ABZ\u00BC\u00B5\u00E3N\u00A9\x10\x00\u00E0\x7F\x1E\u00D5\u00FD\u00BF\u00FC\u0099\u00AD7\u00BD\u00F3\u00E0\u00F0\u008D\x0B\x1D\u008C_\x00)18B\u00D0B@\u0081@\u00C4\u00A8\x104\u008A\u00A3\x14\u0088\x14\u00D2\u00B4\u00DB\u00D2$\u00CC\u0088\x10\u00C0YkhSP\u0090\u00C5R\u00BE\u009Dj\x0F\u0082O\u00C6\u00AA\u00D9\u00DC\u0094\u00EEzz\x19\u0092\u00D7Lo\u00A5x\x10R\u0094\x18F6YEx:\x02`\u00BD[\u00CD\u00C3Z\x07\u00E6]\u00AC\u00B7\"h\x15]\u00E8\u008B\x17@!\u0081\u00FF\x7F\u00E8~,\u00B6v\x1B\u00CD\u008D\u00B6\u00B6h^; \u00C5\u00A2\x02\u0098Ac}o\x13Pq\u00E1e\x1D\u0083F\u00ABv\u00B6M\u009B\x15\u00E1\u009Fx\bj!\u00C9P>\x1FT\u00DDKH\u00EBl!G\u009B\u00B4Q\u00A7\x07\u0093L\u00C3\u00A9\u00E0\u00D6\u00B6h\u00ACFl\u00E59\u00B3\u00FE\"i\u00CC\u00A6\x10\"\u00E4\x00\\\x1D kF,\x7F\u0082&K\u00AC=\u00EC\u00C8;\x1E\u00F8\u009D\u00EB\u00CF\u00BE\u00E8\u00DF\u00EE\u00BEC\u00FA\x19\u009C\u00EC\u00B8\u00D3*\x04\x00\u00F8\u00A0\u00EA\u00F0\u0093\u009F\u00D9\u00FA\u00E9\u00B7]/\u00DF{x\u00B1\x06@&\u00D6VV\u0084+R\u0088.\u00D0\u0093\u00BC\u00B1\x0B\u00AA\x05\u00F2\u00E4\x17\x14\u00B0/\x14\nR\x00\u00A9H\nEZ\u0099\u00FB\u00EA\x05\x1FP\u00B2#\u00BDwB\u00D7\u0089\u0092\u00A9\u00FC\u00F9\u00D5\u00AEM\x01,v\x05z\x07\u00D7\u0097Hfa\u00D6\u00E5\u00F3x\u00B3nK\u00BB\u00CD}\u0082ot\n\x0F\u00AD\u00AA\u00F5\x10\x14\x05\u00DAR}\u00CD\x066\u00F5\u0090P\b\u00F5Y\x0EK\u00B3\u00FE\x112\u00C0\u00AB\x14Qp\x04\n\u009C\u00A4`\u00B1z\u00B1\u00A9\u00C6\u00DA\x0E\u00EC\u00930\x1F33\u00C1T\u00E4\u00DC\x15j\u0093\x04\u00FF\u00A2h\u008Ba_Q$3L\u00DDx*\x11\n+\u00F7\u009F\x14\x1F\u00D5\u00FFs\u00BB\u00A2d&\u00E9\u00CC\u00AE\u00A1\x042{P\u00CF\u00E5+J\u00ED\u00DA\u00C6\u00FE\u00AF9\u00FC\u00AA'\u00FE\u00E4y/\u0093\u00C7\u00DF\u00FE\u009D\u008EN\u00D5\u00B8S+\x04\u008E\u0097|\u00F6\u00D0s\u00DE\u00FA\u0085\u00D9/\x7Ff{\u00FD,\u00A2\u00DA\x13\u00E6\x1B\u0095\x000\t\x19\u00A2G>\x15\u0087\x7F\x1Fi\u00B0\u00A8<DZ\u00F7\x1A\x1E\u00F0<\u00DC/\u00BC\u0087\u00E2\u00F2W\u0090\x10\x05/\u00F0N\u00C7\u00F6]6x\t\u00E5\u00C5\u00E3D\u00C1\x13\u00CF'\u00A9\u0094\u00E850\u00B5\x19\u00F8\u0083\t\u00F7Z7\u00A5\u0090\u00EBCf'\u00A0\u00A1x\x033\u00F6Sw\u00AF\u0083\u00DFE\u00C8\u00E3\n\u00A3)0\x0F\x0F\u00C1\u009B\u008DR\u00F8\x1D\x17\u0098\u008F\u00A6\x10R\x19\u00F0\u00EF\u00EE\u00DEE\u00BA\u00F2\u00F3\u00DE\u00AD\u00C3\x12\x12p\u009Cw@\x1D\u0094\u009C\x05\u00DF\u00C3Vz\u00E6~\u0083\x16.\u0083\u00DF\x17y\"\x14~\u00AE\u00E3\x00\u00AC(\x04\u00CD{\u0089\u009E\tE\u0099\u00B0d\u00D9\u00C2FSb\x00\u0095\u0096\x1F\u00B3\u00A7\u00A7\u00D2\u00DA\x12\u00B3\u00FD[G.x\u00F2\u00F6w=\u00F6\x7F\u009C\x7F\u00BBuG\u00BE\u00AD\u00C6]B!\x00\u00C0\u00CF}q\u00EBa\u00AF\u00FF\u00D4x\u00F9\u0087\u008F\u00CC\x1F\u00A4:\u009F\u00BA\u00EF\u00A3N\u00AC\u00BDW\n\u0098\u00D0BV\u00B2\x11\x1A\u00827\x11N*\x14\x12\u008E\u00FC'\u0094Fx%\bkO\f \x04\x0B\x00\x17x\u00E5JI\u0093\u00C2\"*\u0084\x10\u00F8\f%\u00C2\x0BXN;N\x13\u00DC4\u00AF\u00A7\u009Brq/\u00A7u\u00C1\u00C6\u0098\u008A\u0081V\u0096\x15\u008D\u00CD=\u0089!\u00C2(S&\u00C3h)=fHH\u00B42\u00CC@\"S\x10\u0099\x04\u00CD\u0086)\u00D9\u00A2}U! \u009A\u009Ed\u00F6@#\u0086\u00E763\u00CF16\u00D5\u00E8\u0093`\u00F8\u0082\u00E4\u00F1\u00AA\x10\u00C3\u00DB\u00A5\u00A3X|5\u00EF\u00AC\u0082\u0082\x15\u00A7\b\u0085\u0080T\n$/\u00F1\u00FA\u00BB+\x0E\u00B6\u0095\x17\u0098\u00A2\u00E3\u00FB!\u00C8\u00B9v\u00FF\u0083W\u00DC\u00F7i\u00F3\u00CB\x1E\u00FA\u00EA=\x7FyJ&\u00F2\x1D<\u00EE2\n\x01\x00\u00FE\u00F7B\u00CF\u00FE\u00D9\u008F\x1D\u00FA\u0085w\u00DD\u00B4\u00F1\x1D\u00B7\u00F4\x19\x02\u00C4\x1B\x11\u0084&3\u00CA\u00DE!\u00A9\x03\u0082\u0096\u008C\u00C6b\u00E1\u0083W\u0080\"p\u00C4\x05P0\n\n\u00AB\x0Bo\u0086\tU\x19\u00F8\x0E\u00C5s@\u00F7\u00B5!\u00A5M\x04\u009CJ,\u00D6i\u00A7\x07SHJ5L\u0088\u00A2\u009E^\u00F7\u00F1\u00FDF`\u00CDC\u0087y7\u00EB\u00CD\u00CC@\b\x14ADNtv\u00FC\u00F1g&.\x18\u00FC{\u0086bM\u0091B^\u00B3\r\x12\x16\x1E\u00C7\u0082\u0089U8\u0091x\x02\u00E3yz\x1B\u0083+-\u00EE\u00DF\u00CAv\u0091*\u00D5\u00F4*\u0080\u00A2\x10x\x1E\x7F\x16\u0091\u00EA<\u00C6C \x00Y\x15\t\x1C\\Ne\u00C4\u00B0\u0088^\x01T\u00D1\u00D6vp\u00EEW\x1F}\u00E3W\u00BFt\u00FF\u008B\x0F|\u00FB\u00ED\u00B3\u0088\u00CA\u00ED1\u00EER\n\u0081\u00E3\u00A5\u009F<\u00FA\u009Do\u00F9<^\u00F3\u00FF\u00B67\u00CE\u00A6\x15\u00AF\u00BD\x01\u00D2\u00B5\u00B6\u00EDW\u00DBj\u00C7\u00DFE\u00A0\u0093c\u00E0\x0F\u008D\u009E\x02)\u00C7E\u00A1P\u0091T\u0097~\u008A\x17\u00F8u\u008C@\u00E0\x1E\u00FD\u00D8\u00F3S\thm\x1D?vpm\u00888\u00D7\u0088HY\u0092\x12\r\u00CF>\u00C8h\u00AE73\x0E\u00F3\u009Em\u00C0\x18O\u00CF\u0096\u009Aq\u00F4\u00D2-\u00F1X\x04\u008A<\x04ZL5\u00F7\u0099\u00D8\u00C1\f+\u00DE\x00hm\u00D5+\u00FC\u009C\x0BQ\x05\u00DB\u00EE|B\u0083\u00E6o\n\u00FD\x04\x13@\u00F9\u00BF&\x1F\u00C1\u00C2\x03{\u00DC5\x14 \u00EE\u00C0\u0090\u00AEr\x1F\b$\u009A\"\u00C8\f\u00CB\u00F1\u00D2\u0088@*\u00B2A\x15\u00DA:\u00DA\u00B9\u009B\u0087\u00EF\u00F1\u00A4\u00ED\u00EF~\u00F2\u00FF<\u00EF\u00BF\u009D\u00E4T=\u00ED\u00C6]R!\x00\u00C0/_\u00B7|\u00C0\u00AF\u00FF\u00F5\u00D6\x1B\u00DE}\u00E3\u00DA\x13F\u009D\u0085\u00B55,\u00C1-\u00A9\u00F3\x0F\u0092\u00FC\u00A3\u0089'\u00ACX\u00F8\u008A\x1B\u00D4\u00B4bd\b\u0082;\u0090\u00DB\u008A+\u0092\x001\u0091\u008A\u0089\x1EB\u00ACVCE\u0080<N*\x1D*\n\u008D\u00EB\u00E65t\x0F-\u00B2\u0083S+\u00DC\x07\u00C3*\u00B8(\u00EC\u009AZ\x1F\u00C6A\x0B\u00B8\u00E6\x18BcX0\u00A6\u00B2`\x11\x0FF\u00CD\u00AEKZ\u00C3\x02c\u00E6\u00B1=Z\b\x0E3\x10\u00DD\u00B1\x05\u0098[\u009F\x19\b\u00EE\u009F\u0096:\x17l\u00F1\x15\u00A9\\\u00A9\u00D6~\u008B\u00E1! \x15\x02\u00F1\x10\u0085\tw\u00AC\u00D0\u00A4\u00C0|\u0094\u0088\u00F7\x1B\u00D2\x13\x10\u00CD>\x05\u00D5[R\u0092\u00AE\u0090\u00A1\x03x\u00CD\x00\x1A\u00B6\u00B0\u00EBA\u00B7\u00BC\u00F7\x01\u00DF6<\u00EF\x11?z\u00DEm\u00BA\n\u00F3\x1D5\u00EE\u00B2\n\x01\x00nP\u009D}\u00DF\u00C7\x0F\u00FF\u00C0;\u00AEn\u00FF\u00E1\u00BA\u00CD\u00B59tf2\u00E7\x02\u00CE\u00BC\u00BE\x1CO\u00A0};\u00A0\u0084\t\u009E^\u00A40\x06\u00BF\u00A0\u00B8\u00AC\u00BD\u0097\u00E3\u00AD\n4\u00A6\x1E@\u00BA\u00FAT2=\u00F0\u0087)x\u00A8\x01v\u00C2\u00BD\u008A\x00,\u00A9\f\bL\u00B2\u00D6\u00A3S!e\x0F\u00C59\x14\u00EBKKCJ\u0097X1\u009A\u00B8\u0082t\u00B16jc\n\u00B4:S\u0091\u00D7\u00CD\\\u00BD\u0088uIb\u00CFDZ\u00FF\u009AV\u00AC`\u00E3\u00CC\u00D3\u0096)\\\u00CE\u008B\u0080L\x04\x1E\u00F0%\u00EBz\x11H\u00CD\u0098\x7F\u00E8\u0092<\x06\u00F7\u00A8\"\u00E4P\u00A3`\u00DBwb\u0085P\u00BA\x12\u00A6(\u008F\u00B9\x12&(\x00\u0099z\"\u00D6\u00EE\f\x10\u008C\u0098\u00ED\u00DBY\u00EC\x7F\u00C2\u00D1W>\u00FDG\x0E\u00FC\u00B8<N\u0096'=9O\u00D3q\u0097V\b\x1C?\u00F5\u00D9\u00A3\u008Fz\u00CBU\u00FD\u00BF~\u00E0\u00C6\u00B5G\u00F6>\u00CF\u00EE\u00C8$\u00F90\u00D5\x17\u00C2\u00AA\u00A8\u008B\u00AE\u00AC2\x11\u0089\x01\u00D4\u00DC\u00FF\u0094\x15\u00A9\u00A1\x10Hf\u008A,Fa\u00D7\u0099\x05\u00F7\u00CF\u0095\x1C\u00FA\u00E45\u00D0\u00C3\u00A0\u00F5'M\u00B9\u0086\x14\u00E4!\x18\u00960\u00CD@\u00ACfI\u0086n\na\u00DE\u00E9\x19 \u0080\u00B6\x16\u00D4e\t\u00E5\x10k\x1BF\x16B-\u0095)m\u0082\x11Tl\u0080L\u00C4\u00CAQ\u00E0\u00B6\u00C1+\u00A8\u00FB\x00\x13\u00AB\u00CE\u00EF\u00AAg@\x16\"\x15B+\u00E7k\u00FE\x1E\u00B2\u0083sV\x1E\u0092;0\u00A10k\u009EG\u00FC\u00B8\x11>\u0094\u0085g\x07\u00D8\x1F3Yb\u00EF\x03\u00B6>|\u00CF\u00A7.\u009F\u00FF\u00A4\u009F?\u00F7C\u00A7|r\u009Ef\u00E3n\u00A1\x10\x00\u00E0}\u00AA\u00F3\u00D7\u00FE\u00F9\u00C1\u00EF\u00FF\u0093k\u00D7\x7F\u00F0\u00AA\u00A3\u00EB\u00EBY\u009C$S\u008F \\w\x14\u00C1C\u00C4\u00E9\u00AB}\x15\x01W\x14\x10T\u00A6a\x05\"Y\u00E84\u00E14\x14A\u0095n=\x04\u00C2\u00D2\x17\u00A1\u00D61\u00AB\x14\u00B9\u00EC\\\x1E\u0087\u00A9KR\u0098\u00CB=\u00B8\u00D0O\u00C0\u00CF\u00AE\u0098\u008F&\u00E8\u00A46\x1BkQ\u00A39h[z7\u0083n\u00EB@\x06\x0E\u00E2\u00CAf\u00EE\u00AE\u00BF\u00C8T!DCUMjr\u0082\u008A\u0096Q \u00A5\u0098.9=\u0089\u00B9[gvB\u00AA\x1EF\u00C4\u00F5<NG\u00F4P\x18\x14Q\u00EE=\u00F8s\u009C\x00\u0091\u00FE\u00FEV\u00BD\u0081\u00BA\u009E$\u0090\u008A\u00878\x03`D\u00AE\u00E1\u00C0\u00C1\u00ED{>Z\x7F\u00EC\u00E9?p\u00EEO\x0E\x7FO\x16'5\x01\u00EF$\u00E3n\u00A3\x108~\u00ED\u00BA#\x0Fz\u00FD\u00C7\x17\u00BF\u00F0\u00DE\u00EBw]\u00BA=\u00CE0\u00F6\x16a\u00C4\u00B4W\x02\x02\u00B4\u00E3:\u0082(\u0082\x01wc\u00ED\u00CF\u00A9e\x060\u00C9XT\x1E\u00C3jQT4Q\u00ED\u00A4!\u0097\x10\u00C3\u00BD\t\u00BA\u00B9q-%L\u00806\u00AF\u00E7\u00C8\u00FDB\u00D9uW\"]\u0081nB>\u0090{\u00D0\u00D3\n\u00CF:0\u008C\u009EI\u00A0@\u008DV\u00EB\x10)Wz\b\u00A3\x1CCH2k\u00EF\u0099\x05\u00CB\u00DB\u0080]\u0099i\u00A5\u00C5\u00D3\u0088\x03$)\u00CB\u0098\u00A6\u00FA\x02\u00F4\u00C3\u00B1\u00C0b\u00F3d\u00B1-\x02+\u00A1\x1C\u00E8m\u00CDz\x12\u0099\u00C0\u00EBQ@\u00A4\u00B6s/\u00FC\x03\x14O\x01E\u00B9\u00A9B\u00E6Gq\u00EEC\u0097\u00EF\u00BA\u00E4i\u00FD\u00C5\u008F\u00F9\u00F1s\u00AF8\x15\u00F3\u00EE\u00CE2\u00EEv\n\x01\x00\u00BE\u00A8*?\u00F1\u00B1#\u00CF\u00FB\u0083\u00BFn?\u00FD\u00F1\u009B\u00D7.\u00EC:\u0084\u0090O*\x1C\u00DD\n\u009B[_\u00C0>n\u00AB@\x10\u00A1h\u00991\r\x07\"\u009E\u00D7\x12>\u0084\u0087a\u008Af\u00B5\u00A4\u009A\u00CDM'\u00A5\u00B9\u00A0\u00C7\u00D1#$\u0091\u00DE&\u00DEDz\x02\u00C80#>\u0097\b#\b\u00C4\u00CD\u00C7$\u00E3\u00CC\u00D8\x15i\x04\x00\u009D(\x04*\x1Cx\x18\x11\u0085L\u00A8\x1EBw\u00901\u0089C\u0095\u00AF\x00\u00FF\u009Bt\u00E5\u008A\x03$\u00BBP\u00A7t\u00E5n\u00DD\u00A1b\u0089w0\u00F4(\u00ACAw\u00EF\u00E8\u00F5\u00A4\u0090'\u00EE@B\u0091\u00F8\u00B5\x05\u00B7\x01\u00F6\x0E\x1B\x18\u00E6t\u00EC\u00BE\u00F7\u00E6u_\u00F1\u00B5\u00CB\u0097=\u00FD\u00D5\u00E7\u00BCA\u00CE\u00E7Y\u00EF>\u00E3n\u00A9\x108\u00FEd[\u00F7\u00FD\u00E2\x07\x0E\u00FF\u00D0\u00BB>/\u00FF\u00FA\u00BA\u00C3\u00BB\u00E7Q\u00D3O\u00CB\u00CAJ\u00CAb\u00E9\x05\u00C8\u00AC\x00$\x1B\u0088v+t\u008A\u00B4\u00A2\x0Ba\u00E57\u00B0Y)\u00AD\u00ADhK\u00A0\u0090\u00FB\u008C+a\t*\u0086\u00D1\u00CB\u00B1\u00E4\u00B8\u00C0c\u00D0\u00B5\u00EB\u00825\x04\x05\u00A9\u00A4\\A\u0091\u0097\u00C0\u00D4]\u00EB\u00C0\u00B0T\u00A0[\u00FD\u00C5|l\x19~\u00F85\u00B6\u009E\u00A1A-}\x1E\\\x00\t0r\u00C5\u00A6Y\u00B0\n\u00CDk\u0098\u00BB\u00CB\x1Fk5(\u00A6\u0098\u0080\u00D7\u00944X\u009AT\\\u00F1\u00D6\u00E5\u00E4#EI\x0F\x04\u00CC\u009A\u00E8\u00E4\u00FC\u00C2\u00CC\x0E\u008F/\u0080h\x0B\u00CA\u00B1\u00A83%\u00A5cc\u00FF\u00F6\u00E2\x1E\x0F\u00DF~\u00ED\u00D7\u00BFp\u00DF\x0F\u00DF\u00FB\u00B9\u00B3\u0083\u00A7|\u00B2\u00DDI\u00C6\u00DDZ!p\u00BC\u00F6\u00FA\u00EDK~\u00EFC;?\u00F3\u009Ekf\u00CF8\u00B2\u00B3\u00EE\x0B\u0082f\u009DCm'\u00C6N\u00C9\u00C7\u00C4\u00F3>q3\u00AD\u0088\u00E47L\u00C2\x07\u00AE\x07\u00E9\u00DD\u0097+n\u00A1\u00F0\u0096f\u00E9Q\x00\b,\u00C1x\x06\r\u00AC\u00C1\u0098tm\u00A6w\u00C0\u009E\u0092\u00A5\u00ACz\u00EAAx\x1B\u00B1\u00D1\u00AC*\x19\u008B\\\u00E8\u00A5-5\u0084kXz\u00B1\u00D7\u0098@j\u00AC\f%iy#\u00DD\b\u00B7\u00F2\u00C5\u00A5O\x0F\u00C1\u00DA\u00A4\u0093Dd\u00C0\u00A1\x06\u00907\x14\u0085@\u00AB\x1E\u0085N\u00C8\u00F0\u0081J \u0084\\\u00A7\u00DBP\u00B9\u00F9z\u00CF\u00B1\u00DA\u0093(\n\u00A5ZC\u00F1\f\u00BB\x0E\u00E3\u00A2\u0087\u00E2\u00AD_\u00FD\u008C\u00E1\u00A5\u008F}\u00C5YW\u009E\u00D2\u0089u'\x1Cg\x14B\x19?\u00F1\u00C9\u00A3\u00DF\u00F0\u00FBW\u00F4\u009F\u00FA\u00E0\u00D5\u00F3\u00C7m\u00F6\x19b\u00E5\u00A4\x11`S\u0093\x00\u00FD\\\u0080k\u00A7\u00E4\f\x0F\u00B2%x\u0084\x0F\u0091\u0095(\u00E1\x00\u00BB\x13\u0091\u00BE\\\u00B3\x18\u00A1h\u00E0a\x02\u00CF;\u00F5X\u00D8\u00BA\u00D8\u00CE\u00A9%\u009C\u00E01\u00BB\x0B\u00B4/Q\u00C7\u00E6.%Dh=\u00B3\x00\u00ACoh]\u00D1\u0096\x12\u00CA\u008C\u0095\u008F\u008D\n\u00C1\u00C3\x03\"\u00F2\x0348\x04\x04\u00FD,#\u0091\x02[C\u0086Ua\u00AE\u00DF\u00D1k \x1FaU!\u0084W\x01\u00842\u00A1sOO`\u0082K\u00F0oq\u008C\x00\x00f[\u00B8\u00F0\u0081[\u00EF\u00BF\u00FFS\u00F1\u00F2o|\u00D5\u00B9\u00FF\u00EB6\u009ARw\u00BAqF!\u00AC\u008Ck\x16*\u00BF\u00F0\u0097\u009B\u00FF\u00E8\u00ED\u009F\u00DA\u00FE\u00E1\u008F\\\u00BB\u00EB!\u00DB}\u00EE\x02\u00ECe\u00D2\u0085\u00B5\x18\u00AE?\x00\u00AE\t\u00D9\u00BADCNV\u00DB\x05\u0093\x10\u00E9Ap)\u00F6\u009A\x05\u00A8\u00A0\u00A3N\u0094H*\u0099)\u0093q\x1A\x02\u00C0\u00C3\x04\u0092\u0089\u00A8p\u00F2s\x01\nP\u00A8T\b\u009AJ\u0080$&\x19\u0093\u00E5\u0088\x0EH,\u00EBV\u00D2\u0088@\x10\u0091\x06e\u0097$\t\u0081\x1C:\u00A2\u00DF\x01\u00BA\u0085\x10s\u0095\u00E8\u00C6\x1E\x0B\u00BA\x02\u0098\u00ABN\u00AD=Jz\u00B1\u00F3\u00F8\x12a\x14\x0B\u00AB*\u00C7@\u0080Ia\x15y\x10\u00E6U\x18(9\u00C76\x0E<x\u00E7\u00E3\u00F7y\u00E2\u00F8C\u00FF\u00F0\u00A7\u00F7\u00FF\x0F\u00D9\x7F\u00F7\u00C3\t\u00FE\u00B6qF!\u00FC\r\u00E3\u00F3\u00AA\u00C3\u00AB>p\u00CB\u00B3\u00DF\u00F3\u00A9\u00F6\x1F>t\u00ED\u00ECA;}\x1D\u00D10\u0095`!\u00A6 \u00A1\u0096\u00DF\u00ABl\u00C6\u00E43\u00ACd$\u00A8\x1C\u008E\u00F1\ntE\u00F10l\u00D1\u00F8;\u00EB+\u00E8\x150\u0084\u00D0\u00C0\x13t\u00B5\u00D4ztO\u00C3\x15\x12\u00AF\u00DFV\u0086\u00F6\u0085Y\u00F9\u00DD\u0098+\x18K\u00C1!fj\u00EC\u00C4\x106a\u0083\x14Zo\u00EF\u009D\x10\x02\u00C9\u00E6\"\u00CE\u0081\u00F0g\u00CC0\x03\u0092\u008D\\(\u00D8\u0095\u00C7P3\x0E\u0099\u0086,m\u00DA\x14\u0096fDvs\u008A\u00F0\u0081\ni\u00D8\u00C4E\u0097l^\u00F1\u0095\u008F\u00D7W~\u00DB\x0F\x1Ex\u0093|\u00D5\u009D\u00B7D\u00F9\u00B6\x1Cg\x14\u00C2\u00DF1nP\x1D~\u00E6\u00CF\x0F}\u00FB\u00FF\u00FE\u0084\u00FE\u00FB\u00BF\u00B8z\u00E3\u0091[\u00E3\x1C\u00D1\u0099\u00B9g#US\x04:\u00C1\x10\b\u0088u-K\u00A6\x05\rZ\x0B~0\r\x13&MO\"\u00A5Y\u00D6J(\u00E7\u00AAaB\x0B\x0ECn\x1B\u00DC\u0088\u00DE}?\u00C9\u00DA\x0E*\u0095\u00D1\u00B6\x1F\u00BA@F5\u00D7\u00DD\u008B\u009B\x06 J\u00A0\u00A1@s%1\u00D7\u00E4#\b\u008C\x16m\u0096=-t\u00F6IP\u00F7\b$\u00B0\u008A\u00E0\x00\u00F8\u00CF\u00BC\n\u00BB \x17\u008E\u0091\u00A2\x10\u0090^\u0085\u00BAWR\u00B9\x0E\x02\t\x16\u00A5\u00A5\x1C;\u00E6\u00F3M\u009C\u00F3\u00A0\u00C5\u0087\u00EF\u00F7\u0084\u009D\u009F\u00F8'?v\u00C1o\u00C9yg\x14\u00C1\u00DF6\u00CE(\u0084/s\u00DC\u00A4*\u00BF\u00F8\u0091[\u00BE\u00E9\u008F>\u008E\u00EF\u00FB\u00F0\u00E7\u00E7\u00DFpp{\u00CD\u00AC\u00EF8K\x10\u00B0\x02\u0089,o\x06\u009CX$\u00D30A1\u00E5\x19\u00D0\u00C3\u0088B\u00A5\u00C2\u0094t\u00A1]]T%HC\x05\x1F\b2\u0093V\u00A6c\u00CF~\x10\u00A3D\u00E5'\u0097\u0088\u00AB\u00EBA\u00A2K\u00B4P\u0093\u00DEm\u00F9s\u00E7h\u0088Z(1\u00C0:1\u0091\u00C8\x13\x1E\u0082\x0B4-4\u0097\u008D\u00E7\u008A\u00CA\u0086\x13h\bpM\x1F2Kaq\u00BEd\u00FA\u0091\u00C7*\n#AE-\u00D8\u0080g\x19\x00\u00B4\x06\u00CCv\x1F\u00C2=/\u00D9\u00FE_\x0F\u00FFz\u00FC\u00E7g\u00BE\u00EC\u0082?\u0090\u008B\u00CE\u0084\x06_\u00CE8\u00A3\x10n\u00C5x\u00DD\u00A7\u00B7\x1Eu\u00F9\u00FB\x0F\u00BF\u00E4\u0093\u00D7\u00AC=\u00FBs7\u00ED\u00DE\x18\u00D1\f\u00D5\x1E%\u0080H\u0096CG\u00DD\u00C3\u0098\x169\u0081\u00C8\u009A\u00A5pE\x10\u00DC\u0085Z\u00E1X>\u00AF\u00A0\u00A2f/\u00C5\x00\x1DGWD\u00DD\u0081E\u00ED\b\u00A6%$\u00AE#\u0088OU\u00C1x3\x16\u00E9ITj\u00DEg1\x14\u00D1h\u0085E\u00F3\x1A\u00A3\u00A3T<V\u00AB\x0ED\x01\u00D3\u00E0\u0084%\u00F6<\u009C\u00D4\x17\u00C0B\x00\u00B3\u00FE2\u00A15\x1B&P\u008B\u00A0\u00A4(\tE\u0093\x0E\u00A0y\u00B8\u00D0\u00B1\u00FF\u0082\u00A3[\u00E7\u00DDw\u00E7MO|\u00D6\u00AEW\u00FF\u00FD\u0097\u00EF\u00BE\u00CBS\u008DO\u00F58\u00A3\x10Nb\u00BC\u00E7\u0090\u009E\u00FF\u00BA?\u00BD\u00E5\u009F\u00FF\u00E5\u00D5x\u00D1\u00C7>7\u00BB\u00DF\u00D6\u00F6\x06 \u00CD\u0090} \u00847]t\u00F5\u00EAD\u0084\x070\u00A9U`\x16\u00C1\u00853j&jj\u00D2\u00C1\u00CB\u00BA\u00D2S\u00E0\x02+!\u0087Q\u0097uJ`\u00A2\u0097r\x1C\u0085@\u009C@\u00C7\u00EE]\u0093\u00DA\x04?\x10\x05\u00DA\u00C8\u00B6\u00E7\x12\x1D\u0096\u00A3\x7F\x01d\n\u00E4)\u00D0\u009A\u0096\u00BE\u008A\x12\u00D6~V\u0094\x070\r5\u00C87\b<\x00\u00EC\u00A7\u00E8\u00CA\u00C23\x17\u00B3\x0EH\x1B1\f\x0B\u00DC\u00E3\u0092\u00FE\u00E9\x0B\u00EEw\u00E4u\u00DF\u00FC\u00C2\u00F3\x7F\u00F5\u00C1\u00CFl7\u00DC>3\u00E0\u00AE7\u00CE(\u0084S0nPm\u00BF\u00FA\u00C1\u00AD\u00A7\u00FC\u00D1G7_p\u00E5\u00B5\u00C3\u00B3\u00AE\u00BEq\u00D7F\u00979d\u00EC\u00D0\u009E\u00E5\u00C8\u00E6\x01$m6\x00H\u00EF\u00F8\u00B3\u00DA\u0082\u00AD\x15\u00C1\r\u008F\u00A2\u0084\t\x13\u009EAaE\u00B2{R\x1B\u00C5\u00D6.\u00EC\x19&P\u00C0'@\u00A8\u00EF\u009B\n\u00C1\x0B\u009DF\u00C9\u00BF\u00BB@tD\x1B\u00CD\u00E1\u00B7\u00B4\u00A2U;\x1A\x01)\x05\u00BAIV5\x0E\u00A2\u0091%\u00A8\u00B5\fMR\u00A1\x10,\u0094\u00A6%4(U\u008D\x00\x04=k%\u009Ab\u00AE#\u00F6\u00DEck\u00EB\u00C2\u008B\u00FB[\x1E\u00F1u\u00F2+\u0097}\u00EF\u00BE?\u0096{\u00B0\u00A6\u00F4\u00CC\u00B8\u00B5\u00E3\u008CB8\u00C5\u00E3\u00A3\u00DB\u00BA\u00FFu\u00EF8\u00F4\u008F?x\u00D5\u00F8\x1D\u009F\u00B9v\u00F6u_\u00B8e]0\x0E%\u00BB\u00E0\u008F\u00FC\x18\x001]y\u00F5X=\x0B\u00A4\u00DC\u009B\x00\u0080\u00B1\u00B4U\u00EB2\u00B5\u00F8\u009E\u0081`wf\u00E9\r\u00DD\u00B9\x13Qe\u00E9\x05KUy\u00C4Z\x15\u00A3\u00A5!\u0089u\u0084\u0097\u00C2f)\u00DD\u00BEg\u00E5!\x15B\u0083Z\u00B3S\u0086\x02\u0092\u00C2L\u009As\u00E5\x05\x10+`\u00B6\x02\u00D2]\t\u00B4l\u00AC\u008A\u00C4 \u00C4=\u0084&\u0082=\u00FB\u008E\u00E8=\u00BEj\u00FC?\u00F7{X{\u00E37}\u00E7\u00DE\u00FF\u00FE\u00C0K\u00E5N\u00D9\u00DD\u00F8t\x1Dg\x14\u00C2m8\u00DEv\u0093^|\u00F9;o\u00BC\u00EC\x13\u009F\u00DB}\u00D9g\u00AE\u00E9\u008F\u00BF\u00E1K\x1B\u00B2h\u0080\u00F6Y\u00A4\x13\u00938d\x19\x00x#\u0092\x1A&\u00E4\u0092\u00F4Z\u00D2\u0089\u0098x\x05LSF\x1B\u00F9\u00B1\u00B4V+\x00c\u00F5\x0Ejed\u00FDa\u00F6\u00A3\u0091\u00E30j\\#y\x0B@\x12\u0092\x06\u00F1\u00DF\x10\u00D4\u00F6\u00EB\u0081/\x1400\u00BD\b\x0F%JS\x12\x02\u008F\u00CC.4\x05\u00B4m\u00E3\u009C\u00FDK\u00BD\u00E7}v\u00DEw\u00AF\u008B\u00FB\u00E5O\u00BB\u00EC\u00C0\u00E5\u008F~\u008E\\u\u00DB\u00BF\u00BD\u00BB\u00E78\u00A3\x10n\u00A7\u00F1\u00A7\u00D7\u00EAW\u00BC\u00FEO\u00BF\u00F8\u00AC+>7|\u00CBu7\u00CC\u009E\u00FC\u00E9\u00EB\u00DB\u00BA\u00F6\r\u00F4>B\u00FAP\\\u00FF$\x16\u00B1\u00D1\u00CA$\u00ADY]\u00FF\x122\u00B0\u0085Z\x1Bk\u00AAq\u00CAy\u0098\u0084!\x05C\u00A0\x17\u0090\u00C5U\u00E4!\u00A4\x12!\u0086 E!4'\x18\u00AD\u00B9R\b\u008C@\x10\x1D\u008BY\u00B7\x10\u009C\x02$.@\u00C6c\u0093\x1E\x15\u0088\u0096\u00A5\u00D8\u00C2E_\u00B1\u00D8>\u00FF\u00C2\u00FE'\x17\u00DF\u00B7\u00FF\u00CE3\u009F\u00B7\u00E7-\u008Fx\u00FA\u00DA\u00E7o\u00CF\u00F7uw\x1Dg\x14\u00C2\x1D0>\u00BE\u00D0\u00B3\x7F\u00F3O7\u009F\u00F2\u00BE\x0Fo~\u00E3\u00F57\u00F7\u00A7^u\u00ED\u00EE\x07\u00DC|x\u008E\u00DEg\u00C1\u0084\u00AC\u009C\u0083\u00EA\x1D`d\x1A\u00D3>\u00EF$*\u00D5\x02&\x0F\x13j\x0B\u00B7\u00C8\x12\x14\u00E5\x10\u00D8\u00C3q?K\u00E5\x12e\u00D1\x1E\u00CAp\u00DA\x18\u00E3P\u00B1\x06\u00F1\u00DA\u0086\x04\n[\u00CFjH\u0092\u0093\u00A2\u00AB\u0092\u00A470\x03 \u00B2\u0085\u00B3\u00F6\u00EE\u00E0\u009E\u00F7\\~\u00F2\u00FC\u00F3\u00C7?|\u00F0c\u00E7\u00EFx\u00CE\u00F3\u00CF\u00F9\u00E3\x03\x0F\u00B9\u00EB4/\u00BD\u00B3\u008C3\n\u00E14\x18\x1F\u00B8Q/~\u00FD\x1F|\u00F1\u00D2+\u00AF\u009A?\u00F9\u00FA\u0083\u00FDI_\u00B8\x01\x0F\u00B8\u00F1Kk\u0082\u00E5\x06\u00FA\u00D8\x01VE\u00BA\u0092hZ\u00D8\u0087U\u00E0'!@\u0082\u008E\u00D19\tn\u00FD\u00C9+\b\u00D0R\u00DD\x13\u00D1LK\u008E\u0088B\u00AB\u00C8Bxf@\u00FD\x070\u00D7\x7F\x069\u0086\x1D\u00C8\u008E\u00CC\x19\x06X\u008ApP\u00C5 K\u009Cs\u00EE\u00B6^x\u00E1\u00E2\u0093\u00FB\x0F,\u00DF}\u00DF\u00FB\x0F\x7F\u00F2-\u00CF=\u00FF]\u008Fy\u00CA\u0099P\u00E0\u008E\x1Eg\x14\u00C2i8>pT\u00CF{\u00F3\u00DB\u008F|\u00CDG>q\u00E4q7\u00DC8\x7F\u00EC\u00E6Qy\u00F4\u00E7\u00AF_\u00BB\u00E8\u00E6\u0083\u0082\u00D6\u00D7c\t\u00B7\u00DE-o?\u00EAh\u00DE\u00C08K*uu\u00F9)\u00C4\u00A55[\u00A65\u00E1\u0095\u0094\x1E^,\u00CB\u00BET$c\u00F6\x16`\u00898\u00E0J\x02\u008A\u00D6\x14M\u009B\t|o\u0096Y\x000H\u00C7\\\x17\u00D8\u00BBg\u00C4\x05\x17m_{\u00F6Y\u00F3\x0F\x1E\u00B8\u00E0\u00E0\x07\x1E\u00F2\u0088s\u00DE\u00FF\u00DC\x7Fz\u00F6\u009F]\u00FCP\u00B9\u00F1\u00F6\x7F\u00BAg\u00C6\u00DF6\u00CE(\u0084;\u00C9\u00F8\u00C4!\u00BD\u00F0w\u00FE\u00E8\u00E6\u0087\u00BF\u00E7\u00A3\u00FA\u00B0\u009B\u00BE\u00D8\x1E|\u00F0\u00E8\u00F8\u00A0qs\u00FD\x01_:\u0084\u008B\u00AE\u00F9\u00E2R\u0096\u00DB\u00EB\u00C0\u00B8\x11K\u00C8G\u00C6\u0080)\u00BD\x0Et_\x1C\u00D6\u00BAC\x19zo\x1C\x05\u008D\x05`\u00C4S\u00A3p\u00CFA<,\x19\u00E0\u00D4kXH\u00A2\u009EZ\x1C\u00A0\x18t\u0089\u00F9p\x14\u00E7\u009E\u00DFt\u00FF\u00DE\u00E1\u00DA=\u00B3\u00ADO\u009E\u00BDG\u00AF\u00D8\x7F`\u00FC\u00ABG>\u00BA\u00FF\u00E5\u00B7?\u00E7\u00A2\u008F\u00DE\u00EF\u00C1r\u00DD\x1D\u00F8\u00F8\u00CE\u008C/s\u009CQ\bw\u00F2q\u00D5\u00A8g\u00BD\u00FFS\u00F8\u00CA\u00F7\u00BD\u00EB\u00E6\u00FB\\\u00FD\u00B9\u00E5\u00C5\u009F\u00BFe\u00F3^\u0087\x0F\u00EE\u00B9\u00C7\u00F6\u0091\u00D9E}G\u00CE_.\x16\x07\x16\u0090s\u0097\u00DB\u00B3\u00BD[Gt\u00D8\u00DC\u009Ec\u00B15\u00C3r{\u0080.\x15:6\u00E8\u00C2\u00B3\x1A\u00EA\x1D\u008A\u00A0\u0098\r#\u00D6\u00D0\u00B1\u00BE\u00B6\u00C4\u00AE\u008D>\u00CEf\u008B[f\u00D0/\x0Em\u00FD\u00A6a\u00BE\u00BCa>\u00C7\u00B5{\u00F6}\u00F1\u009A\u008B\u00F6\u00AE_}\u00EF\u008B\u00CF\u00BA\u00EA\u00D2'\u009F\u00F3\u00D9\u00C7=\x11\u009F\u00B9\u00F0^r\u00E4\u008E~&g\u00C6\u00AD\x1F\u00FF\x1F\x00\u00F3\u00AA\r=e\u0082\u0081\x00\x00\x00\x00IEND\u00AEB`\u0082" ;
    this.slash = "/"
    var targetFolder = new Folder(Folder.userData.fullName +this.slash+ "Aescripts"+this.slash+"colorPicker");
    !targetFolder.exists && targetFolder.create();

    this.settingFile = new File(targetFolder.fullName + this.slash + "colorPicker.xml");
    if(!this.settingFile.exists){
            this.settingFile.open("w");
            this.settingFile.write("<setting></setting>");
            this.settingFile.close();
    }

    this.haveSetting = function(name){
            this.settingFile.open("r");
            var content = this.settingFile.read();
            this.settingFile.close();
            return content.toString().indexOf("<"+name+">") !=-1;
        }

    this.getSetting = function(name){
            this.settingFile.open("r");
            var xml= new XML( this.settingFile.read() );
            this.settingFile.close();
            return xml[name].toString();
        }

    this.getSettingAsBool = function(name){
            var result = this.getSetting(name);
            return  result == "true" ? true:false;
        }

    this.saveSetting = function(name,value){
            this.settingFile.open("r");
            var xml= new XML( this.settingFile.read() );
            this.settingFile.close();
            var isOk = true;
            try{
                xml[name] = value.toString();
            }catch(err){
                isOk = false;
            }
            this.settingFile.open("w");
            this.settingFile.write(xml);
            this.settingFile.close();
            return isOk;
        }

}
    $.global.colorPicker = colorPicker;
    return colorPicker;
})();
// ==================== |-----------------| ====================
// ==================== | DuTranslatorLib | ====================
// ==================== |-----------------| ====================

/*
DuTranslatorLib
Translator Framework Library
Copyright (c) 2017,2018 Nicolas Dufresne, Rainbox Productions
https://rainboxprod.coop

_Contributors:_
Nicolas Dufresne - Lead developer

This file is part of DuAEF.

DuAEF is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

DuAEF is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/

/**
 * Creates a new string translation.
 * @class
 * @classdesc An translation for a string.
 * @param {string} source - The source string
 * @param {string} [translation=''] - The translated string
 * @param {string} [comment=''] - A comment to explain what needs to be explained
 * @param {string} [context=''] - The context where the string is used
 * @param {int} [contextId=0] - A unique id for the couple source/context
 * @property {string} source - The source string
 * @property {string} translation - The translated string
 * @property {string} comment - A comment to explain what needs to be explained
 * @property {string} context - The context where the string is used
 * @property {int} contextId - A unique id for the couple source/context
 */
function Translation(source,translation,comment,context,contextId)
{
	if (typeof translation === 'undefined') translation = '';
	if (typeof comment === 'undefined') comment = '';
	if (typeof context === 'undefined') context = '';
	if (typeof contextId === 'undefined') contextId = 0;
	this.source = source;
	this.translation = translation;
	this.comment = comment;
	this.context = context;
	this.contextId = contextId;
}

/**
 * The Javascript translator part of the Dutranslator Framework<br />
 * see {@link https://github.com/Rainbox-dev/Dutranslator}
 * @namespace
 * @memberof DuAEF
 */
DuAEF.Dutranslator = {};

/**
 * The current language id (fr, en, ..)
 * @memberof DuAEF.Dutranslator
 */
DuAEF.Dutranslator.current = '';

/**
 * The current language name
 * @memberof DuAEF.Dutranslator
 */
DuAEF.Dutranslator.currentName = '';

/**
 * A map containing available languages.
 * There is a language name and a file name for each language id.
 * languages["fr_FR"] ["name"] is "Francais" for example.
 *
 * Will be filled when executing Dutranslator.getAvailable().
 *
 * @memberof DuAEF.Dutranslator
 */
DuAEF.Dutranslator.languages = {};

/**
 * The translated strings  of the current language
 *
 * An array of compounds containing the source, the translation and the context
 *
 * @memberof DuAEF.Dutranslator
 */
DuAEF.Dutranslator.localizedStrings = [];

/**
 * Some Settings for the translator
 * @namespace
 * @memberof DuAEF.Dutranslator
 */
DuAEF.Dutranslator.Settings = {}

/**
 * The folder containing the translation files
 * @memberof DuAEF.Dutranslator.Settings
 * @type {string}
 * @default "thisScriptFile/file/path/"
 *
 */
DuAEF.Dutranslator.Settings.folder = File($.fileName).path + "/";

/**
 * The prefix in the translation filenames
 * @memberof DuAEF.Dutranslator.Settings
 * @type {string}
 * @default "thisScriptFileName_"
 */
DuAEF.Dutranslator.Settings.prefix = File($.fileName).name.substring(0,File($.fileName).name.lastIndexOf('.')) + "_";

/**
 * The suffix (including file extension) in the translation filenames
 * @memberof DuAEF.Dutranslator.Settings
 * @type {string}
 * @default ".json"
 */
DuAEF.Dutranslator.Settings.suffix = ".json";

/**
 * The application name (root of the json translations)
 * @memberof DuAEF.Dutranslator.Settings
 * @type {string}
 * @default "duaef"
 */
DuAEF.Dutranslator.Settings.name = "duaef";

/**
 * The original languageId
 * @memberof DuAEF.Dutranslator.Settings
 */
DuAEF.Dutranslator.Settings.originalLanguageId = "en";

/**
 * The original language name
 * @memberof DuAEF.Dutranslator.Settings
 */
DuAEF.Dutranslator.Settings.originalLanguageName = "English";

/**
 * Load the list of available languages
 *
 * If the language id and or the language name can't be found in the file, the file name will be used
 * to determine the language id and the name will be set as the id.
 *
 * @return A success code
 * 0	Success
 * 1	One of the file haven't been correctly opened
 */
DuAEF.Dutranslator.getAvailable = function ()
{
	DuAEF.Dutranslator.languages = {};
	//Add original language
	DuAEF.Dutranslator.languages[DuAEF.Dutranslator.Settings.originalLanguageId] = {
		"name": DuAEF.Dutranslator.Settings.originalLanguageName,
		"file": undefined
	};


	var folder = new Folder(DuAEF.Dutranslator.Settings.folder);

	// Get the list of translations
	languageFiles = folder.getFiles(DuAEF.Dutranslator.Settings.prefix + '*' + DuAEF.Dutranslator.Settings.suffix);

	for (var i = 0 ; i < languageFiles.length ; i++)
	{
		  var fileName = languageFiles[i].name;
		  var langId = langName = "";

		  // Determine the language name and the language id by reading the file
		  // Values are stored at the top so it should be fase
		  var file = new File(folder.absoluteURI + "/" + fileName);
		  if(!file.open("r")) return 1; // Unable to open the file

		  // Line by line reading
		  while(langName == "" || langId == "" && !file.eof )
		  {
			  var line = file.readln();
			  var indexName = line.lastIndexOf("languageName");
			  var indexId = line.lastIndexOf("languageId");

			  var index;
			  if(indexName != -1 && langName == "") index = indexName;
			  else if(indexId != -1 && langId == "") index = indexId;
			  else continue;
			  // ..... "lang" : "value"
			  line = line.substring(index, line.length);
			  // .lang" : "value"
			  line = line.substring(line.indexOf("\"") + 1, line.length);
			  // : "value"
			  line = line.substring(line.indexOf("\"") + 1, line.length);
			  // value"
			  line = line.substring(0, line.indexOf("\""));
			  // value
			   if(indexName != -1 && langName == "") langName = line ;
			  else if(indexId != -1 && langId == "") langId = line ;
			  else continue;
		  }

		  file.close();


		  if(langId == "") langId = fileName.replace(DuAEF.Dutranslator.Settings.prefix, "").replace(DuAEF.Dutranslator.Settings.suffix, "");
		  if(langName == "") langName = langId;

		  DuAEF.Dutranslator.languages[langId] = {
			  "name": langName,
			  "file":  DuAEF.Dutranslator.Settings.folder + "/" + fileName
		  };

	}

}

/**
  * Returns the pretty name of a given language
  * @param {string} langId - The id of the request language
 */
DuAEF.Dutranslator.getPrettyName = function(langId)
{
	if(!DuAEF.Dutranslator.languages[langId]) return 1;
	return DuAEF.Dutranslator.languages[langId]["name"];
}

/**
  * Returns the language id of a given language name
  * @param {string} prettyName - The pretty name of the request language
 */
DuAEF.Dutranslator.getLanguageId = function(prettyName)
{
	for(var langId in DuAEF.Dutranslator.languages)
	{
		if(DuAEF.Dutranslator.languages[langId]["name"] == prettyName) return langId;
	}
	return 1;
}

/**
  * Returns a list containing pretty names of all languages
  * @param {string} langId - The id of the request language
 */
DuAEF.Dutranslator.getPrettyNames = function()
{
	var res = [];
	for(var langId in DuAEF.Dutranslator.languages)
	{
		res[res.length] = DuAEF.Dutranslator.languages[langId]["name"];
	}

	// Order the list by name
	res.sort ();
	return res;
}

/**
 * Set the current language
 * @param {string} languageId - The id of the language to set
 * @return success code
 * 0	Everything went ok
 * 1	The file linked to the given id can't be opened
 * 2	The json content doesn't match a translation file
 */
DuAEF.Dutranslator.setLanguage = function (languageId)
{

	for (var langId in DuAEF.Dutranslator.languages)
	{
		if (langId == languageId)
		{
			DuAEF.Dutranslator.current = languageId;
			DuAEF.Dutranslator.currentName = DuAEF.Dutranslator.getPrettyName(languageId);

			if(languageId == DuAEF.Dutranslator.Settings.originalLanguageId) return 0;  // Default language, no translation

			// Parse process

			var fPath = DuAEF.Dutranslator.languages[langId]["file"];
			var file = new File(fPath);

			var jsonData = DuAEF.DuJS.Fs.parseJSON(file);

			if(!jsonData[DuAEF.Dutranslator.Settings.name] ||
				jsonData[DuAEF.Dutranslator.Settings.name].length != 2 ||
				!jsonData[DuAEF.Dutranslator.Settings.name][1]["translations"]) return 2; // Wrong json format

			var translations = jsonData[DuAEF.Dutranslator.Settings.name][1]["translations"];
			DuAEF.Dutranslator.localizedStrings = translations;

			return 0;

		}
	}
}

/**
 * Set the current language with a given pretty name
 * @param {string} languageName - The pretty name of the language to set
 * @return success code
 * 0	Everything went ok
 * -1   Can't find any language with the given pretty name
 * >0  Call to setLanguage(languageId) failed
 */
DuAEF.Dutranslator.setPrettyLanguage = function (languageName)
{

	var langId = DuAEF.Dutranslator.getLanguageId(languageName);
	if(langId == 1) return -1;

	return DuAEF.Dutranslator.setLanguage(langId);
}

/**
 * Creates a file for translation with the given base strings.
 * @memberof DuAEF.Dutranslator
 * @param {Translation[]|strings} [translations=DuAEF.Dutranslator.localizedStrings] - The translations or source strings to be included in the translation file.
 * @param {File|string} file - The file or URI
 * @param {string} [appName="dutranslator"] - A name for the app using this translation file.
 * @param {string} [version="0.0"] - A version (as a string) for this translation file or app.
 * @param {string} [languageId=DuAEF.Dutranslator.current] - A version (as a string) for this translation file or app.
 * @param {string} [languageName=DuAEF.Dutranslator.currentName] - A version (as a string) for this translation file or app.
 */
DuAEF.Dutranslator.generateTranslationFile = function (file,translations,appName,version,languageId,languageName)
{
	if (!(file instanceof File)) file = new File(file);
	if (typeof translations === 'undefined') translations = DuAEF.Dutranslator.localizedStrings;
	if (typeof appName === 'undefined') appName = 'dutranslator';
	else appName = appName.toLowerCase();
	if (typeof version === 'undefined') version = '0.0';
	if (typeof languageId === 'undefined') languageId = DuAEF.Dutranslator.current;
	if (typeof languageName === 'undefined') languageName = DuAEF.Dutranslator.currentName;
	if (!translations.length) return;

	//if translations is an array of strings, convert to translations
	if (typeof translations[0] === 'string') translations = DuAEF.Dutranslator.generateTranslations(translations);

	var data = {};
	data[appName] = [];
	var metaData = {};
	metaData.languageId = languageId;
	metaData.languageName = languageName;
	metaData.version = version;
	data[appName].push(metaData);
	var translationsObject = {};
	translationsObject.translations = translations;
	data[appName].push(translationsObject);

	DuAEF.DuJS.Fs.saveJSON(data,file);
}

/**
 * Converts an Array of strings to an Array of empty translations
 * @memberof DuAEF.Dutranslator
 * @param {string[]} strings - The base strings to convert.
 * @return {Translation[]} The empty translations
 */
DuAEF.Dutranslator.generateTranslations = function (strings)
{
	DuAEF.DuJS.Array.removeDuplicates(strings);
	var translations = [];
	for (var i = 0, num = strings.length; i < num ; i++)
	{
		translations.push(new Translation(strings[i]));
	}
	return translations;
}

/**
 * Translate a given string based on the current seted language<br />
 * see {@link DuAEF.Dutranslator} for more details about the translation framework.
 * @function
 * @param {string} s - 		The text to be translated
 * @param {int} or {string} context - 	Can be an integer or a string which is related to contextId or context in a translation file
 * @param {string[]} args -	Args to format into the translated string, default is []<br />
 * For example, when calling tr("Welcome {#}", -1, "Paul"), the output will be "Welcome Paul"<br />
 * If too many args are given, there are ignored<br />
 * If not enough args are given, the {#} are replaced with ?
 * @return {string} The translated text or s if nothing is set or available
 */
function tr(s, context, args)
{
	// Default args
	var useContextId = true;
	if (DuAEF.DuJS.typeof(s) != 'string') throw 'DuTranslator: tr(s, context, args): Error.\ns has to be a string.\ns is ' + DuAEF.DuJS.typeof(s) + ' with value ' + s.toString();
	if (typeof context === 'string' || context instanceof String) useContextId = false;
	if (typeof context === 'undefined') context = -1;
	else if (context < 0) context = -1;
	if (typeof args === 'undefined') args = [];
	if (typeof args === 'string' || args instanceof String) args = [args];

	var languageNumber = -1;
	var res = s;

	//a function to get the translation id from a given string
	function getTranslationId( str, noCapsNorSpaces )
	{
		noCapsNorSpaces = def (noCapsNorSpaces, false);

		for (var i = 0 ; i < DuAEF.Dutranslator.localizedStrings.length ; i++)
		{
			var localizedString = DuAEF.Dutranslator.localizedStrings[i];
			var testString = localizedString["source"];
			if (noCapsNorSpaces) testString = testString.replace(/[\s\n\r]+/g,'');
			if( testString == str)
			{
				// Check context
				if (useContextId && context > -1)
				{
					if (localizedString["contextId"] == context)
					{
						return i;
					}
				}
				else if(!useContextId)
				{
					if (localizedString["context"] == context)
					{
						return i;
					}
				}
				else {
					return i;
				}
			}
		}

		return -1;
	}

	// If a language is set, search for the translation
	if (DuAEF.Dutranslator.current != DuAEF.Dutranslator.Settings.originalLanguageId)
	{
		// Get the translation
		var stringNumber = getTranslationId( s )
		
		// If a translation is found, set it to res
		if (stringNumber > -1) res = DuAEF.Dutranslator.localizedStrings[stringNumber]["translation"];
		if (!res) res = s;
		if (res == "") res = s;
	}

	// Args process
	while(res.indexOf("{#}") !== -1)
	{
		// While there is stuff to format
		if(args.length < 1)
		{ // If no more args, replace with ?
			res = res.replace("{#}", "?"); // Will replace the first occurence
		}
		else
		{
			var arg = args.shift(); // Take the first arg and remove it
			res = res.replace("{#}", arg);
		}
	}

	return res;
}
// ==================== |------------| ====================
// ==================== | DuDebugLib | ====================
// ==================== |------------| ====================

/*
	DuDebugLib
  Library to with tools for debugging
	Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
	https://rainboxprod.coop

	_Contributors:_
		Nicolas Dufresne - Lead developer

	This file is part of DuAEF.

	DuAEF is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	DuAEF is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/


/**
* Tools for debugging
* @namespace
* @memberof DuAEF
*/
DuAEF.Debug = {};

/**
 * Set this attribute to a DebugLog you have created to automatically add some debug infos to the log (like catched errors).
 * @type {DebugLog|null}
 */
DuAEF.Debug.DebugLog = null;

/**
 * The log levels
 * @enum {int}
 * @readonly
 */
DuAEF.Debug.LogLevel =
{
	VERBOSE: 0,
	DEBUG: 1,
	WARNING: 2,
	CRITICAL: 3,
	FATAL: 4,
	NO_DEBUG: 5
}

/**
 * Logs a message to DuAEF.Debug.DebugLog if it has been set.
 * @param {string} message - The message to log
 * @param {DuAEF.Debug.LogLevel} [level=DuAEF.Debug.LogLevel.DEBUG] - The level of the message
 */
DuAEF.Debug.log = function (message,level)
{
	if ( DuAEF.Debug.DebugLog != null ) DuAEF.Debug.DebugLog.log( message,level );
}

/**
 * This methods shows an alert with an error thrown if DuAEF.debug is set to true, and logs it in DuAEF.Debug.DebugLog if it has been set.
 * @param {Error|string} error - An error thrown and catched
 */
DuAEF.Debug.error = function (error)
{
	var errorString = 'An error has occured in file\n' + error.fileName + '\nat line ' + error.line + '\n\n' + error.description;
	DuAEF.Debug.log( errorString, DuAEF.Debug.LogLevel.WARNING );
	if ( DuAEF.debug )
	{
		alert( errorString );
	}
}

/**
 * Runs a method/script safely, i.e. enclosed in a try...catch, and logs any error thrown.<br />
 * arguments can be added after the first parameter, they will be passed to the callback.<br />
 * The callback is enclosed in a function to make sure it does not create global variables.
 * @param {function|string} callback - The method to run, or a script as a string
 */
DuAEF.Debug.safeRun = function (callback)
{
	if (typeof callback === 'undefined') throw "Error: DuAEF.Debug.safeRun(callback): Invalid parameter: callback cannot be undefined";
	if (callback == '') throw "Error: DuAEF.Debug.safeRun(callback): Invalid parameter: callback cannot be an empty string";
	var call = callback;
	if (DuAEF.DuJS.typeof(callback) != 'string')
	{
		var args = [];
		for (var i = 1, num = arguments.length; i < num; i++)
		{
			args.push(arguments[i]);
		}
		var params = args.join(',');
		var call = 'callback(' + params + ');'
	}
	
	try
	{
		(function(){
			eval(call);
		})();
	}
	catch ( error )
	{
		DuAEF.Debug.error(error);
	}
}

/**
 * Inspects a javascript object and outputs all of its attributes
 * @param {object} obj - The object to inspect.
 * @param {boolean} [ownProperties=true] - Wether to inspect only the own properties of the object.
 * @return {string} The report. 
 */
DuAEF.Debug.inspect = function(obj, ownProperties)
{
	ownProperties = def(ownProperties, true, false);

	var report = "";
	for (var key in obj)
	{
		if (ownProperties && !obj.hasOwnProperty(key)) continue;
		report += key + " | type: " + typeof(obj[key]) + " | value: " + obj[key].toString() + "\n";
	}
	return report;
}

/**
 * Alerts a nice TypeError description, if {@link DuAEF.debug} is true.<br />
 * Note that it does not actually throws an error.
 * @param {any} variable The failing argument
 * @param {string} varName The failing argument name
 * @param {string} varType The expected type
 * @param {string} [functionName] The name or description of the function throwing the error.
 * @return {string} The (multiline) description for the error
 */
DuAEF.Debug.throwTypeError = function (variable, varName, varType, functionName)
{
	if (!DuAEF.debug) return;
	functionName = def (functionName, '');
	if (typeof functionName === 'Function') {
		functionName = func.toString().split('\n')[0];
	}

	var e = 'TypeError:\n';
	if (functionName != '') e += "in function " + functionName + "\n";
	e += "\n" + varName + " should be of the type " + varType + "\n";
	e += "but it is of the type " + DuAEF.DuJS.typeof(variable);
	if (typeof variable !== 'undefined') try { e += "and has value: " + variable.toString(); } catch(e) {};
	alert(e);
}


/**
 * Constructs a new debug logger
 * @class DebugLog
 * @classdesc A logger for debugging purposes: writes debug messages to a file, with date and type
 * @param	{string|File} pathOrFile - The log file.
 * @param	{boolean} [clear=true] - Whether to clear the previous log file before starting
 * @param	{DuAEF.Debug.LogLevel}	[logLevel=DuAEF.Debug.LogLevel.DEBUG] -  The log level.
 * @param	{boolean}	[enabled=DuAEF.debug] -  true to enable the log and start recording
 * @property {DuAEF.Debug.LogLevel} level - The log level.
 * @property {File}	file - The log file.
 * @property {boolean}	running - true if the timer is running, false if it is stopped.
 */
function DebugLog(pathOrFile,clear,logLevel,enabled)
{
	if (!(pathOrFile instanceof File)) this.file = new File(pathOrFile);
	else this.file = pathOrFile;
	this.file.encoding = 'UTF-8';

	if (logLevel == undefined) logLevel = DuAEF.Debug.LogLevel.DEBUG;
	this.level = logLevel;

	if (enabled == undefined) enabled = DuAEF.debug;
	this.enabled = enabled;

	if (clear == undefined) clear = true;
	var openOption = 'a';
	if (clear || !this.file.exists) openOption = 'w';
	if (this.level <= DuAEF.Debug.LogLevel.DEBUG && DuAEF.DuAE.App.hasFilesAndNetworkAccess)
	{
		if (this.file.open(openOption))
		{
			var currentDate = new Date();
			this.file.writeln('[' + currentDate.toString() + '] == Debugger started. ==');
			this.file.close();
		}
	}

	this.elapsed = 0;
	this.running = false;

	this.log( "\n=========== NEW LOG =============\n=================================" , DuAEF.Debug.LogLevel.NO_DEBUG);
}

/**
* Logs a message
* @param {string} message - The message to log
* @param {DuAEF.Debug.LogLevel} [level=DuAEF.Debug.LogLevel.DEBUG] - The level of the message
*/
DebugLog.prototype.log = function (message,level)
{
	if (typeof level === 'undefined') level = DuAEF.Debug.LogLevel.DEBUG;

	if (!this.enabled) return;
	if (level < this.level) return;
	if (!DuAEF.DuAE.App.hasFilesAndNetworkAccess) return;

	if (!this.file.open('a')) return;

	if (level == undefined) level = DuAEF.Debug.DEBUG;

	var currentDate = new Date();
	var levelString = " || Debug info || ";
	if (level == DuAEF.Debug.LogLevel.WARNING) levelString = " || Warning || ";
	else if (level == DuAEF.Debug.LogLevel.CRITICAL) levelString = " || Critical || ";
	else if (level == DuAEF.Debug.LogLevel.FATAL) levelString = " || Fatal || ";
	this.file.writeln('[' + currentDate.toString() + ']' + levelString + message );
	this.file.close();
}

/**
* Starts the debugger timer.
* @param {string} [message] - A message to display in the log
* @param {DuAEF.Debug.LogLevel} [level=DuAEF.Debug.LogLevel.VERBOSE] - The level of the message
*/
DebugLog.prototype.startTimer = function(message, level)
{
	if (typeof level === 'undefined') level = DuAEF.Debug.LogLevel.VERBOSE;

	if (!this.enabled) return;

	if (message == undefined) message = '';

	if (level >= this.level && DuAEF.DuAE.App.hasFilesAndNetworkAccess)
	{
		if (this.file.open('a'))
		{
			var currentDate = new Date();
			this.file.writeln('[' + currentDate.toString() + '] == Timer started. == ' + message);
			this.file.close();
		}
	}

	if (!this.running) this.elapsed = 0;
	this.running = true;
	$.hiresTimer;
}

/**
* Stops the debugger timer.
* @param {string} [message] - A message to display in the log
* @param {DuAEF.Debug.LogLevel} [level=DuAEF.Debug.LogLevel.DEBUG] - The level of the message
*/
DebugLog.prototype.stopTimer = function(message, level)
{
	if (typeof level === 'undefined') level = DuAEF.Debug.LogLevel.DEBUG;
	if (!this.enabled) return;
	if (!this.running) return;

	this.elapsed += Math.round($.hiresTimer/1000);

	if (typeof message === 'undefined') message = '';

	if (level >= this.level && DuAEF.DuAE.App.hasFilesAndNetworkAccess)
	{
		if (this.file.open('a'))
		{
			var currentDate = new Date();
			this.file.writeln('[' + currentDate.toString() + '] == Timer stopped == Time elapsed | ' + this.elapsed + 'ms | == ' + message);
			this.file.close();
		}
	}

	this.elapsed = 0;
	this.running = false;
	$.hiresTimer;
}

/**
* Checks the time elapsed since the timer has started<br />
* If the timer is not running, it will be started.
* @param {string} message - A message to display in the log
* @param {DuAEF.Debug.LogLevel} [level=DuAEF.Debug.LogLevel.DEBUG] - The level of the message
* @return {int} The time elapsed in milliseconds
*/
DebugLog.prototype.checkTimer = function(message, level)
{
	if (typeof level === 'undefined') level = DuAEF.Debug.LogLevel.DEBUG;
	if (!this.running) this.startTimer();
	this.elapsed += Math.round($.hiresTimer/1000);

	if (!this.enabled) return -1;

	if (level >= this.level && DuAEF.DuAE.App.hasFilesAndNetworkAccess)
	{
		if (this.file.open('a'))
		{
			if (message == undefined) message = '';

			var currentDate = new Date();
			this.file.writeln('[' + currentDate.toString() + '] == Time elapsed | ' + this.elapsed + 'ms | == ' + message);
			this.file.close();
		}
	}

	return this.elapsed;
}
// ==================== |-------------| ====================
// ==================== | DuAECoreLib | ====================
// ==================== |-------------| ====================

/**
	* Constructs a new KeySpatialProperty
	* @class KeySpatialProperties
	* @classdesc Spatial properties of a {@linkcode KeyFrame}.
	* @property {float[]|null}	  [inTangent=null]     - The incoming spatial tangent
	* @property {float[]|null}    [outTangent=null]            -  The outgoing spatial tangent
	* @property {boolean}      [_continuous=true]         - true if the specified keyframe has spatial continuity
	* @property {boolean}	[_autoBezier=false]			- true if the specified keyframe has temporal auto-Bezier interpolation
	* @property {boolean}	[_roving=false]	- true if the specified keyframe is roving
*/
function KeySpatialProperties (){
	this.inTangent = null;
	this.outTangent = null;
	this._continuous = true;
	this._autoBezier = false;
	this._roving = false;
}

/**
	 Constructs a new KeyFrame
	* @class KeyFrame
	* @classdesc Properties of an After Effects Keyframe, as returned by {@linkcode DuAEF.DuAE.Property.getKeyFrames} or {@linkcode DuAEF.DuAE.Property.getKeyFrameAtIndex} or {@linkcode DuAEF.DuAE.Property.getKeyFrameAtTime}.
	* @property {float}	  _time     - The keyframe time
	* @property {null|folat[]|float|MarkerValue|int|Shape|TextDocument}    value  -  The keyframe value
	* @property {KeyframeInterpolationType}   _inInterpolationType  - The incoming temporal interpolation type
	* @property {KeyframeInterpolationType}	_outInterpolationType		- The outgoing temporal interpolation type
	* @property {boolean}	_spatial	- true if this keyframe has a spatial value
	* @property {KeySpatialProperties}	spatialProperties	- the spatial properties {@linkcode KeySpatialProperties} of this keyframe
	* @property {KeyframeEase[]}	inEase	- The incoming temporal ease. The number of objects in the Array depends on the value type
	* @property {KeyframeEase[]}	outEase	- The outgoing temporal ease. The number of objects in the Array depends on the value type
	* @property {boolean}	_continuous	- true if the keyframe has temporal continuity
	* @property {boolean}	_autoBezier	- true if the keyframe has temporal auto-Bezier interpolation
	* @property {int}		_index	- The index of the keyFrame. Warning: not updated when another key frame is added on the property some time before this key._time!
*/
function KeyFrame(){
	this._time = 0;
	this.value = null;
	this._inInterpolationType = KeyframeInterpolationType.LINEAR;
	this._outInterpolationType = KeyframeInterpolationType.LINEAR;
	this._spatial = false;
	this.spatialProperties = new KeySpatialProperties();
	this.inEase = null;
	this.outEase = null;
	this._continuous = false;
	this._autoBezier = false;
	this._index = 0;
}

/**
	* Constructs a new animation
	* @class PropertyAnim
	* @classdesc Describes the animation of an After Effects property
	* @property {string}	  [_name=""]     - The property name
	* @property {string}    [_matchName=""]  - The property matchName
	* @property {KeyFrame[]}   [keys=[]]  - The keyframes of the animation
	* @property {null|float[]|float|MarkerValue|int|Shape|TextDocument}	[startValue=null]		- The value at the beginning of the animation
	* @property {string}	[expression=""]		- The expression on the property, if any.
	* @property {string}   [type="anim"]  - Read Only.
	* @property {float}   startTime  - Read Only. The starting time of the animation.
	* @property {float}   endTime  - Read Only. The ending time of the animation.
*/
function PropertyAnim()
{
	this._name = "";
	this._matchName = "";
	this.keys = [];
	this.startValue = null;
	this.type = "anim";
	this.expression = "";
	this.dimensions = 0;
	this.startTime = null;
	this.endTime = null;
}

/**
	* Constructs a new group animation
	* @class PropertyGroupAnim
	* @classdesc Contains all PropertyAnim from an After Effects PropertyGroup
	* @property {string}	  [_name=""]     - The property name
	* @property {string}    [_matchName=""]  - The property matchName
	* @property {PropertyAnim[]|PropertyGroupAnim[]}   [anims=[]]  - The animations in the group
	* @property {string}   [type="group"]  - Read Only.
	* @property {float}   startTime  - Read Only. The starting time of the animation.
	* @property {float}   endTime  - Read Only. The ending time of the animation.
*/
function PropertyGroupAnim()
{
	this._name = "";
	this._matchName = "";
	this.anims = [];
	this.type = "group";
	this.startTime = null;
	this.endTile = null;
}

/**
	* Constructs a new layer animation
	* @class LayerAnim
	* @classdesc Contains all PropertyGroupAnim from an After Effects Layer
	* @property {string}	  [_name=""]     - The property name
	* @property {int}    [_index=""]  - The index of the layer
	* @property {PropertyGroupAnim[]} [anims=[]] - All the animations of the layer
	* @property {float} [firstKeyFrameTime=0] - The time of the first keyframe
	* @property {string}   [type="layer"]  - Read Only.
	* @property {float}   startTime  - Read Only. The starting time of the animation.
	* @property {float}   endTime  - Read Only. The ending time of the animation.
*/
function LayerAnim()
{
	this._name = "";
	this._index = 0;
	this.anims = [];
	this.type = 'layer';
	this.startTime = null;
	this.endTile = null;
}

/**
	* Constructs a new PropertyInfo
	* @example
	* var propInfo = new PropertyInfo(property);
	* layer("ADBE effect parade").addProperty("ADBE layer control"); //now the property object is broken
	* property = propInfo.getProperty(); // You can retrieve the property like this, fixed if it's an effect
	* @class PropertyInfo
	* @classdesc Get some handy informations about a property<br />
	* This class is able to "fix" effects properties which have been broken by
	* the addition of another effect on the same layer, as long as the class has been
	* instanciated before the effect has been broken.
	* @param {PropertyBase|PropertyInfo} property - The property. If a PropertyInfo is provided, the constructor returns it (it does not make a copy).<br />
	* This makes it easy to avoid type checking, as you can always pass any property or PropertyInfo to the constructor to be sure to handle a PropertyInfo, without any impact on performance.<br />
	* @example
	* myFunction (prop) //This function can be passed either a property or a PropertyInfo
	* {
	* propInfo = new PropertyInfo(prop);
	* prop = propInfo.getProperty();
	* }
	* @property {int} index - The propertyIndex
	* @property {boolean} isEffect - true if this is an effect (sub)property
	* @property {boolean} riggable  - true if this prop can be rigged (it's a value which can set expressions)
	* @property {Layer} layer - The layer containing the property
	* @property {int} dimensions - The number of dimensions, 0 if this is not a dimensionnal value (text, shape...)
	* @property {string} name - The name of the property
	* @property {string} matchName - The matchName of the property
	* @property {PropertyGroup|null} effect - The effect containing the property
	* @property {boolean} editable - true if the value of the property can be changed
	* @property {boolean} numerical - true if the value is a number or an array of numbers
	* @property {boolean} isPercent - true if the unit is a percentage
	* @property {boolean} isAngle - true if the unit is a degree
	* @property {boolean} isPixels - true if the unit is a pixel
	* @property {int} numKeys - the number of keyframes on the property
	* @property {bool} group - true if the property is a PropertyGroup
	* @property {string} unitsText - the name of the unit (localized)
	* @property {string} unit - the abbreviated unit, as displayed in the UI (localized)
	* @property {string} expression - the expression in the property
*/
function PropertyInfo(property)
{
	if (property instanceof PropertyInfo) return property;
	
	var expressionEnabled = property.expressionEnabled;
	if (property.propertyType == PropertyType.PROPERTY)
	{
		this.numKeys = property.numKeys;
		this.group = false;
	}
	else
	{
		this.group = true;
		this.numKeys = 0;
	}
	this.property = property;
	this.name = property.name;
	this.matchName = property.matchName;
	this.index = property.propertyIndex;
	this.parentIndices  = [this.index];
	this.isEffect = property.isEffect;
	this.effect = null;
	if (!this.isEffect)
	{
		var parentProp = property;
		while (parentProp.parentProperty)
		{
			// Traverse up the property tree
			parentProp = parentProp.parentProperty;
			this.isEffect = parentProp.isEffect;
			this.parentIndices.unshift(parentProp.propertyIndex);
			if (this.isEffect) this.effect = parentProp;
			if (this.isEffect) break;
		}
	}
	else this.effect = property;

	this.riggable = DuAEF.DuAE.Property.isRiggable(property);
	this.editable = DuAEF.DuAE.Property.isEditable(property);
	this.numerical = DuAEF.DuAE.Property.isNumerical(property);
	this.layer = DuAEF.DuAE.Property.getLayer(property);
	this.comp = this.layer.containingComp;
	this.dimensions = DuAEF.DuAE.Property.getDimensions(property);
	this.unitsText = property.unitsText;
	this.isPercent = this.unitsText == localize("$$$/AE/TLW/GraphEditor/PercentSource=percent");
	this.isAngle = this.unitsText == localize("$$$/AE/TLW/GraphEditor/DegreesSource=degrees");
	this.isPixels = this.unitsText == localize("$$$/AE/TLW/GraphEditor/PixelsSource=pixels");
	this.unit = "";
	if (this.isPercent) this.unit = localize("$$$/AE/TLW/GraphEditor/PercentDest=%");
	if (this.isAngle) this.unit = localize("$$$/AE/TLW/GraphEditor/DegreesDest=°");
	if (this.isPixels) this.unit = localize("$$$/AE/TLW/GraphEditor/PixelsDest=px");

	if (this.riggable) {
		this.expression = property.expression;
	}
}

//undocumented object used for quick access to expressions in the cache
function PropertyExpression(property)
{
	if (property instanceof PropertyExpression)
	{
		property.expression = property.getProperty().expression;
		return property;
	}

	this.property = property;
	this.empty = false;

	if ( !DuAEF.DuAE.Property.isRiggable(property) ) {
		this.empty = true;
		return;
	} 
	if (property.expression == '') {
		this.empty = true;
		return;
	}
	
	this.parentIndices  = [property.propertyIndex];
	this.isEffect = property.isEffect;
	if (!this.isEffect)
	{
		var parentProp = property;
		while (parentProp.parentProperty)
		{
			// Traverse up the property tree
			parentProp = parentProp.parentProperty;
			this.isEffect = parentProp.isEffect;
			this.parentIndices.unshift(parentProp.propertyIndex);
			if (this.isEffect) break;
		}
	}
	this.layer = DuAEF.DuAE.Property.getLayer(property);
	this.expression = property.expression;

	this.changed = false;
}

/**
	* Gets the original Property<br />
	* Always works even if this PropertyInfo represents an effect which has been broken<br />
	* ---AE Hack---
	* @memberof PropertyInfo
	* @return {PropertyBase} The property
	* @todo When returning an effect, check if the matchName corresponds too.
*/
PropertyInfo.prototype.getProperty = function()
{
	if (this.isEffect)
	{
		var parentProp = this.layer("ADBE Effect Parade");
		for (var i = 0 ; i < this.parentIndices.length ; i++)
		{
			parentProp = parentProp(this.parentIndices[i]);
		}
		this.property = parentProp;
	}
	return this.property;
}

PropertyExpression.prototype.getProperty = function()
{
	if (this.isEffect)
	{
		var parentProp = this.layer("ADBE Effect Parade");
		for (var i = 0 ; i < this.parentIndices.length ; i++)
		{
			parentProp = parentProp(this.parentIndices[i]);
		}
		this.property = parentProp;
	}
	return this.property;
}

/**
 * After Effects Tools
 * @author Nicolas Dufresne, Kevin Masson and contributors
 * @copyright 2017,2018 Nicolas Dufresne, Rainbox Productions<br />
 * {@link https://rainboxprod.coop}
 * @namespace
 * @memberof DuAEF
 * @license GPL-3.0 <br />
 * DuAEF is free software: you can redistribute it and/or modify<br />
 * it under the terms of the GNU General Public License as published by<br />
 * the Free Software Foundation, either version 3 of the License, or<br />
 * (at your option) any later version.<br />
 *<br />
 * DuAEF is distributed in the hope that it will be useful,<br />
 * but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br />
 * GNU General Public License for more details.<br />
 *<br />
 * You should have received a copy of the GNU General Public License<br />
 * along with DuAEF. If not, see {@link http://www.gnu.org/licenses/}.
*/
DuAEF.DuAE = {};


// low-level undocumented method
// Loads pseudo effects and presets
// just before entering runtime
DuAEF.DuAE.postInit = function()
{

	//PRESETS

// ==================== |-------------| ====================
// ==================== | duaef_magic | ====================
// ==================== |-------------| ====================

var duaef_magic = {"binAsString":"RIFX\x00\x00\u00BA\fFaFXhead\x00\x00\x00\x10\x00\x00\x00\x03\x00\x00\x00Q\x00\x00\x00\b\x01\x00\x00\x00LIST\x00\x00\u00B9\u00E8bescbeso\x00\x00\x008\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00]\u00A8\x00\x1D\u00F8R\x00\x00\x00\x04\x00\x01\x00\x01\x01\u00F4\x01\u00F4?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\u00FF\u00FF\u00FF\u00FFLIST\x00\x00\x00dtdsptdot\x00\x00\x00\x04\u00FF\u00FF\u00FF\u00FFtdpl\x00\x00\x00\x04\x00\x00\x00\x01LIST\x00\x00\x00@tdsitdix\x00\x00\x00\x04\u00FF\u00FF\u00FF\u00FFtdmn\x00\x00\x00(ADBE Root Vectors Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdsn\x00\x00\x00\tContents\x00\x00LIST\x00\x00\x00dtdsptdot\x00\x00\x00\x04\u00FF\u00FF\u00FF\u00FFtdpl\x00\x00\x00\x04\x00\x00\x00\x01LIST\x00\x00\x00@tdsitdix\x00\x00\x00\x04\u00FF\u00FF\u00FF\u00FFtdmn\x00\x00\x00(ADBE End of path sentinel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\u00B8\u00B2tdgptdsb\x00\x00\x00\x04\x00\x00\x04\x01tdsn\x00\x00\x00\tContents\x00\x00tdmn\x00\x00\x00(ADBE Vector Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00j\u00BAtdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\bGroup 1\x00tdmn\x00\x00\x00(ADBE Vector Blend Mode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vectors Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00(\u00E6tdgptdsb\x00\x00\x00\x04\x00\x00\x04\x01tdsn\x00\x00\x00\x02\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u00F4tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Path 1\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x02fom-sLIST\x00\x00\x00\u00AAtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x07\x00\x01\x00\x02\x00\x07\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x01\x00\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00\x04\x00\x00\x00\x00LIST\x00\x00\x01\u00A8omksLIST\x00\x00\x01\u009Cshapshph\x00\x00\x00\x18\u00B3\u00DE\x02\x00\u00C2pN\u00F8\u00C1:\u00DC@\u00C2\x11H\u00F0AA<\x00\x01\x00\x00\x00LIST\x00\x00\x01hlistlhd3\x00\x00\x004\x00\u00D0\x0B\u00EE\x00\x00\x00\x00\x00\x00\x00$\x00\x00\x00\t\x00\x00\x00\b\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ldat\x00\x00\x01 \u00C2\x12X\u00F0\u00C0\u00E5;\u00C0\u00C2\x12X\u00F0\u00C0\u00E5;\u00C0\u00C2^>\u00E0A<\u00FC \u00C2^>\u00E0A<\u00FC \u00C2^\u00F4\u00F0A?\u00D1\u00E0\u00C2_\u00E5\u00F0AA<\x00\u00C2`\u00E6\u00F0AA<\x00\u00C2a\u00E7\u00F0AA<\x00\u00C2b\u00D8\u00F0A?\u00D1\u00E0\u00C2c\u008F\x00A<\u00FC \u00C2c\u008F\x00A<\u00FC \u00C2o>\u00E8A\x0E>\x00\u00C2o>\u00E8A\x0E>\x00\u00C2o\u00F3\u00F0A\x0Bg\u00C0\u00C2pN\u00F8A\x07\u00A2\x00\u00C2pN\u00F8A\x03\u009D\u00E0\u00C2pN\u00F8@\u00FF4@\u00C2o\u00F3\u00F0@\u00F7\u00A7\u00C0\u00C2o>\u00E8@\u00F1\u00FC@\u00C2o>\u00E8@\u00F1\u00FC@\u00C2#X\x00\u00C16\u009B\u00E0\u00C2#X\x00\u00C16\u009B\u00E0\u00C2\"\u00A2\u00F0\u00C19r \u00C2!\u00B1\x00\u00C1:\u00DC@\u00C2 \u00AF\u00F0\u00C1:\u00DC@\u00C2\x1F\u00AE\u00F0\u00C1:\u00DC@\u00C2\x1E\u00BC\u00F0\u00C19r \u00C2\x1E\x07\u00F0\u00C16\u009B\u00E0\u00C2\x1E\x07\u00F0\u00C16\u009B\u00E0\u00C2\x12X\u00F0\u00C1\x07\u00DD\u00E0\u00C2\x12X\u00F0\u00C1\x07\u00DD\u00E0\u00C2\x11\u00A2\u00F0\u00C1\x05\b\x00\u00C2\x11H\u00F0\u00C1\x01B \u00C2\x11H\u00F0\u00C0\u00FA|@\u00C2\x11H\u00F0\u00C0\u00F2t\x00\u00C2\x11\u00A2\u00F0\u00C0\u00EA\u00E8@omtn\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u0094tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Path 2\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x02\x06om-sLIST\x00\x00\x00\u00AAtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x07\x00\x01\x00\x02\x00\x07\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x01\x00\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00\x04\x00\x00\x00\x00LIST\x00\x00\x01HomksLIST\x00\x00\x01<shapshph\x00\x00\x00\x18\u00B3\u00DE\x02\x00\u00C2jX\u00F0\u00C1A<\x00\u00C2[<\u00F0\u00C1\x04\u00CB\u00C0\x01\x00\x00\x00LIST\x00\x00\x01\blistlhd3\x00\x00\x004\x00\u00D0\x0B\u00EE\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x06\x00\x00\x00\b\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ldat\x00\x00\x00\u00C0\u00C2[<\u00F0\u00C1#\x03\u00E0\u00C2[<\u00F0\u00C1#\x03\u00E0\u00C2a\x04\u00F0\u00C1\x1B\u00ED\u00C0\u00C2a\x04\u00F0\u00C1\x1B\u00ED\u00C0\u00C2a\x04\u00F0\u00C1\x1B\u00ED\u00C0\u00C2b\u00CB\x00\u00C1\x04\u00CB\u00C0\u00C2b\u00CB\x00\u00C1\x04\u00CB\u00C0\u00C2b\u00CB\x00\u00C1\x04\u00CB\u00C0\u00C2d\u008F\u00E0\u00C1\x1B\u00ED\u00C0\u00C2d\u008F\u00E0\u00C1\x1B\u00ED\u00C0\u00C2d\u008F\u00E0\u00C1\x1B\u00ED\u00C0\u00C2jX\u00F0\u00C1#\x03\u00E0\u00C2jX\u00F0\u00C1#\x03\u00E0\u00C2jX\u00F0\u00C1#\x03\u00E0\u00C2d\u008F\u00E0\u00C1*\x1A\x00\u00C2d\u008F\u00E0\u00C1*\x1A\x00\u00C2d\u008F\u00E0\u00C1*\x1A\x00\u00C2b\u00CB\x00\u00C1A<\x00\u00C2b\u00CB\x00\u00C1A<\x00\u00C2b\u00CB\x00\u00C1A<\x00\u00C2a\x04\u00F0\u00C1*\x1A\x00\u00C2a\x04\u00F0\u00C1*\x1A\x00\u00C2a\x04\u00F0\u00C1*\x1A\x00\u00C2[<\u00F0\u00C1#\x03\u00E0omtn\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u0094tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Path 3\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x02\x06om-sLIST\x00\x00\x00\u00AAtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x07\x00\x01\x00\x02\x00\x07\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x01\x00\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00\x04\x00\x00\x00\x00LIST\x00\x00\x01HomksLIST\x00\x00\x01<shapshph\x00\x00\x00\x18\u00B3\u00DE\x02\x00\u00C2_\x02\u00E0\u00C12  \u00C2@\u00CB\x00\u00C0e\x00\u0080\x01\x00\x00\x00LIST\x00\x00\x01\blistlhd3\x00\x00\x004\x00\u00D0\x0B\u00EE\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x06\x00\x00\x00\b\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ldat\x00\x00\x00\u00C0\u00C2@\u00CB\x00\u00C0\u00EB`\x00\u00C2@\u00CB\x00\u00C0\u00EB`\x00\u00C2L\\\u00E0\u00C0\u00CF\f@\u00C2L\\\u00E0\u00C0\u00CF\f@\u00C2L\\\u00E0\u00C0\u00CF\f@\u00C2O\u00E6\u00F0\u00C0e\x00\u0080\u00C2O\u00E6\u00F0\u00C0e\x00\u0080\u00C2O\u00E6\u00F0\u00C0e\x00\u0080\u00C2Sq\u00E0\u00C0\u00CF\f@\u00C2Sq\u00E0\u00C0\u00CF\f@\u00C2Sq\u00E0\u00C0\u00CF\f@\u00C2_\x02\u00E0\u00C0\u00EB`\x00\u00C2_\x02\u00E0\u00C0\u00EB`\x00\u00C2_\x02\u00E0\u00C0\u00EB`\x00\u00C2Sq\u00E0\u00C1\x03\u00DA \u00C2Sq\u00E0\u00C1\x03\u00DA \u00C2Sq\u00E0\u00C1\x03\u00DA \u00C2O\u00E6\u00F0\u00C12  \u00C2O\u00E6\u00F0\u00C12  \u00C2O\u00E6\u00F0\u00C12  \u00C2L\\\u00E0\u00C1\x03\u00DA \u00C2L\\\u00E0\u00C1\x03\u00DA \u00C2L\\\u00E0\u00C1\x03\u00DA \u00C2@\u00CB\x00\u00C0\u00EB`\x00omtn\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u0094tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Path 4\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x02\x06om-sLIST\x00\x00\x00\u00AAtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x07\x00\x01\x00\x02\x00\x07\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x01\x00\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00\x04\x00\x00\x00\x00LIST\x00\x00\x01HomksLIST\x00\x00\x01<shapshph\x00\x00\x00\x18\u00B3\u00DE\x02\x00\u00C2D\u0093\x00\u00C1A<\x00\u00C25v\u00F0\u00C1\x04\u00CB\u00C0\x01\x00\x00\x00LIST\x00\x00\x01\blistlhd3\x00\x00\x004\x00\u00D0\x0B\u00EE\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x06\x00\x00\x00\b\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ldat\x00\x00\x00\u00C0\u00C25v\u00F0\u00C1#\x03\u00E0\u00C25v\u00F0\u00C1#\x03\u00E0\u00C2;>\u00E0\u00C1\x1B\u00ED\u00C0\u00C2;>\u00E0\u00C1\x1B\u00ED\u00C0\u00C2;>\u00E0\u00C1\x1B\u00ED\u00C0\u00C2=\x04\u00F0\u00C1\x04\u00CB\u00C0\u00C2=\x04\u00F0\u00C1\x04\u00CB\u00C0\u00C2=\x04\u00F0\u00C1\x04\u00CB\u00C0\u00C2>\u00C9\u00F0\u00C1\x1B\u00ED\u00C0\u00C2>\u00C9\u00F0\u00C1\x1B\u00ED\u00C0\u00C2>\u00C9\u00F0\u00C1\x1B\u00ED\u00C0\u00C2D\u0093\x00\u00C1#\x03\u00E0\u00C2D\u0093\x00\u00C1#\x03\u00E0\u00C2D\u0093\x00\u00C1#\x03\u00E0\u00C2>\u00C9\u00F0\u00C1*\x1A\x00\u00C2>\u00C9\u00F0\u00C1*\x1A\x00\u00C2>\u00C9\u00F0\u00C1*\x1A\x00\u00C2=\x04\u00F0\u00C1A<\x00\u00C2=\x04\u00F0\u00C1A<\x00\u00C2=\x04\u00F0\u00C1A<\x00\u00C2;>\u00E0\u00C1*\x1A\x00\u00C2;>\u00E0\u00C1*\x1A\x00\u00C2;>\u00E0\u00C1*\x1A\x00\u00C25v\u00F0\u00C1#\x03\u00E0omtn\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x034tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Path 5\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\u00A6om-sLIST\x00\x00\x00\u00AAtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x07\x00\x01\x00\x02\x00\x07\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x01\x00\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00\x04\x00\x00\x00\x00LIST\x00\x00\x00\u00E8omksLIST\x00\x00\x00\u00DCshapshph\x00\x00\x00\x18\u00B3\u00DE\x02\x00\u00C21\u00FA\u00E0\u00C1\x16\u0080\x00\u00C2\x1A^\u00F0\u00C0`G\u0080\x01\x00\x00\x00LIST\x00\x00\x00\u00A8listlhd3\x00\x00\x004\x00\u00D0\x0B\u00EE\x00\x00\x00\x00\x00\x00\x00\f\x00\x00\x00\x03\x00\x00\x00\b\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ldat\x00\x00\x00`\u00C2\x1A^\u00F0\u00C0\u00FA|@\u00C2\x1A^\u00F0\u00C0\u00FA|@\u00C2 \u00AF\u00F0\u00C1\x16\u0080\x00\u00C2 \u00AF\u00F0\u00C1\x16\u0080\x00\u00C2 \u00AF\u00F0\u00C1\x16\u0080\x00\u00C21\u00FA\u00E0\u00C0\u00A2\u00A8\u0080\u00C21\u00FA\u00E0\u00C0\u00A2\u00A8\u0080\u00C21\u00FA\u00E0\u00C0\u00A2\u00A8\u0080\u00C2+\u00AA\u00F0\u00C0`G\u0080\u00C2+\u00AA\u00F0\u00C0`G\u0080\u00C2+\u00AA\u00F0\u00C0`G\u0080\u00C2\x1A^\u00F0\u00C0\u00FA|@omtn\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u0094tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Path 6\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x02\x06om-sLIST\x00\x00\x00\u00AAtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x07\x00\x01\x00\x02\x00\x07\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x01\x00\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00\x04\x00\x00\x00\x00LIST\x00\x00\x01HomksLIST\x00\x00\x01<shapshph\x00\x00\x00\x18\u00B3\u00DE\x02\x00\u00C2\x1E\u00CC\u00F0\u00C0(\u008F\u0080\u00C2\x0F\u00B1\x00?\u0092`\x00\x01\x00\x00\x00LIST\x00\x00\x01\blistlhd3\x00\x00\x004\x00\u00D0\x0B\u00EE\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x06\x00\x00\x00\b\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ldat\x00\x00\x00\u00C0\u00C2\x0F\u00B1\x00\u00BF>\u00C2\x00\u00C2\x0F\u00B1\x00\u00BF>\u00C2\x00\u00C2\x15x\u00F0\u00BE\u009A\u00C0\x00\u00C2\x15x\u00F0\u00BE\u009A\u00C0\x00\u00C2\x15x\u00F0\u00BE\u009A\u00C0\x00\u00C2\x17>\u00E0?\u0092`\x00\u00C2\x17>\u00E0?\u0092`\x00\u00C2\x17>\u00E0?\u0092`\x00\u00C2\x19\x03\u00F0\u00BE\u009A\u00C0\x00\u00C2\x19\x03\u00F0\u00BE\u009A\u00C0\x00\u00C2\x19\x03\u00F0\u00BE\u009A\u00C0\x00\u00C2\x1E\u00CC\u00F0\u00BF>\u00C2\x00\u00C2\x1E\u00CC\u00F0\u00BF>\u00C2\x00\u00C2\x1E\u00CC\u00F0\u00BF>\u00C2\x00\u00C2\x19\x03\u00F0\u00BF\u0098\x0F\x00\u00C2\x19\x03\u00F0\u00BF\u0098\x0F\x00\u00C2\x19\x03\u00F0\u00BF\u0098\x0F\x00\u00C2\x17>\u00E0\u00C0(\u008F\u0080\u00C2\x17>\u00E0\u00C0(\u008F\u0080\u00C2\x17>\u00E0\u00C0(\u008F\u0080\u00C2\x15x\u00F0\u00BF\u0098\x0F\x00\u00C2\x15x\u00F0\u00BF\u0098\x0F\x00\u00C2\x15x\u00F0\u00BF\u0098\x0F\x00\u00C2\x0F\u00B1\x00\u00BF>\u00C2\x00omtn\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Ellipse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u00BAtdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x0FEllipse Path 1\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Ellipse Size\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x16tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00P@\x18\u00CC\u00CC\u00CC\u00CC\u00CC\u00D2@\x18\u00CC\u00CC\u00CC\u00CC\u00CC\u00D1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0\u00DF@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\u00DF@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Ellipse Position\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000@(\x00\x00\x00\x00\x00\x02@!fffffe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Ellipse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u00BAtdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x0FEllipse Path 2\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Ellipse Size\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x16tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00P@\x18\u00CC\u00CC\u00CC\u00CC\u00CC\u00D2@\x18\u00CC\u00CC\u00CC\u00CC\u00CC\u00D1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0\u00DF@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\u00DF@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Ellipse Position\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000@4\x19\u0099\u0099\u0099\u0099\u009B@!fffffe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Ellipse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x03\u00BAtdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x0FEllipse Path 3\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Ellipse Size\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x16tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00P@\x18\u00CC\u00CC\u00CC\u00CC\u00CC\u00D2@\x18\u00CC\u00CC\u00CC\u00CC\u00CC\u00D1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0\u00DF@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\u00DF@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Ellipse Position\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000@<\x19\u0099\u0099\u0099\u0099\u009B@!fffffe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Graphic - Fill\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x05\u00C6tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Fill 1\x00\x00tdmn\x00\x00\x00(ADBE Vector Blend Mode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Composite Order\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Fill Rule\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Fill Color\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Fill Opacity\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Transform Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\b\ftdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdmn\x00\x00\x00(ADBE Vector Anchor\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Position\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000\u00C0H\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Scale\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x16tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00P@\x7F\u00E0\x00\x00\x00\x00\x00@\x7F\u00E0\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0\u00DF@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\u00DF@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Skew\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0U@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@U@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Skew Axis\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Rotation\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Group Opacity\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Materials Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x007\u00CAtdgptdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00M6tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\bGroup 2\x00tdmn\x00\x00\x00(ADBE Vector Blend Mode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vectors Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x0Bbtdgptdsb\x00\x00\x00\x04\x00\x00\x04\x01tdsn\x00\x00\x00\x02\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape - Rect\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x04\u00E2tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x11Rectangle Path 1\x00\x00tdmn\x00\x00\x00(ADBE Vector Shape Direction\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Rect Size\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x16tdbstdsb\x00\x00\x00\x04\x00\x00 \x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00P@o \x00\x00\x00\x00\x00@d \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0\u00DF@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\u00DF@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Rect Position\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Rect Roundness\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Graphic - Fill\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x05\u00C6tdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x07Fill 1\x00\x00tdmn\x00\x00\x00(ADBE Vector Blend Mode\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Composite Order\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Fill Rule\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\x00\x00\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Fill Color\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Fill Opacity\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Transform Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\b\ftdgptdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdmn\x00\x00\x00(ADBE Vector Anchor\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Position\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00D6tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x0F\x00\x03\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x000\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Scale\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x16tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x02\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00P@Y\x00\x00\x00\x00\x00\x00@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0\u00DF@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\u00DF@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Skew\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\u00C0U@\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@U@\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Skew Axis\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Rotation\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00CEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Group Opacity\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x01tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vector Materials Group\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x007\u00CAtdgptdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Front IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Bevel IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Side IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back RGB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x01\x06tdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x04\x00\x07\x00\x00\x00\x02\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00`@o\u00E0\x00\x00\x00\x00\x00@o\u00E0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Ambient\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Diffuse\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Specular\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@I\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Shininess\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Metal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Reflection\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Gloss\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(@Y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Fresnel\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back Xparency\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back XparRoll\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\x00\x01\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b\x00\x00\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@Y\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Vec3D Back IOR\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00LIST\x00\x00\x00\u00EEtdbstdsb\x00\x00\x00\x04\x00\x00\x00\x03tdsn\x00\x00\x00\x02\x00\x00tdb4\x00\x00\x00|\u00DB\u0099\x00\x01\x00\x01\x00\x00\u00FF\u00FF\u00FF\u00FF\x00\x00]\u00A8?\x1A6\u00E2\u00EB\x1CC-?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00cdat\x00\x00\x00(?\u00F0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdum\x00\x00\x00\b?\u00F0\x00\x00\x00\x00\x00\x00tduM\x00\x00\x00\b@\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00tdmn\x00\x00\x00(ADBE Group End\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00<?xpacket begin=\"\u00EF\u00BB\u00BF\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 5.3-c011 66.146227, 2012/04/10-09:44:09        \">\n   <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n      <rdf:Description rdf:about=\"\"\n            xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n         <dc:format>application/vnd.adobe.aftereffects.preset-animation</dc:format>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\">\n         <xmp:CreatorTool>Adobe After Effects CS6 (Windows)</xmp:CreatorTool>\n         <xmp:CreateDate>2018-04-04T19:04:33+02:00</xmp:CreateDate>\n         <xmp:MetadataDate>2018-04-04T19:04:33+02:00</xmp:MetadataDate>\n         <xmp:ModifyDate>2018-04-04T19:04:33+02:00</xmp:ModifyDate>\n      </rdf:Description>\n      <rdf:Description rdf:about=\"\"\n            xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\"\n            xmlns:stEvt=\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\">\n         <xmpMM:InstanceID>xmp.iid:0EF8588D2938E811ADF7A3DA43F57928</xmpMM:InstanceID>\n         <xmpMM:DocumentID>xmp.did:0EF8588D2938E811ADF7A3DA43F57928</xmpMM:DocumentID>\n         <xmpMM:OriginalDocumentID>xmp.did:0EF8588D2938E811ADF7A3DA43F57928</xmpMM:OriginalDocumentID>\n         <xmpMM:History>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stEvt:action>created</stEvt:action>\n                  <stEvt:instanceID>xmp.iid:0EF8588D2938E811ADF7A3DA43F57928</stEvt:instanceID>\n                  <stEvt:when>2018-04-04T19:04:33+02:00</stEvt:when>\n                  <stEvt:softwareAgent>Adobe After Effects CS6 (Windows)</stEvt:softwareAgent>\n               </rdf:li>\n            </rdf:Seq>\n         </xmpMM:History>\n      </rdf:Description>\n   </rdf:RDF>\n</x:xmpmeta>\n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                           \n<?xpacket end=\"w\"?>","fileName":"duaef_magic.ffx","category":"pseudoEffects"};
duaef_magic;
	duaef_magic = DuAEF.DuBinary.toFile(duaef_magic);

	DuAEF.DuAE.Presets =
	{
		MAGIC: duaef_magic
	};

	//PSEUDO EFFECTS

	
}


/**
 * The axis or channels
 * @enum {int}
 * @readonly
*/
DuAEF.DuAE.Axis =
{
	X: 1,
	Y: 2,
	Z: 3,
	RED: 4,
	GREEN: 5,
	BLUE: 6,
	ALPHA: 7,
	HUE: 8,
	SATURATION: 9,
	VALUE: 10
}

/**
 * Types of values
 * @enum {int}
 * @readonly
*/
DuAEF.DuAE.Types =
{
	VALUE: 1,
	VELOCITY: 2
}

/**
 * Abbreviated units used in the UI.<br />
 * These strings are localized based on internal After Effects dictionnaries.
 * @enum {string}
 * @readonly
*/
DuAEF.DuAE.Units =
{
	PIXELS: localize("$$$/AE/TLW/GraphEditor/PixelsDest=px"),
	DEGREES: localize("$$$/AE/TLW/GraphEditor/DegreesDest=°"),
	PERCENT: localize("$$$/AE/TLW/GraphEditor/PercentDest=%")
}

/**
 * Units used in the UI<br />
 * These strings are localized based on internal After Effects dictionnaries.
 * @enum {string}
 * @readonly
*/
DuAEF.DuAE.UnitsText =
{
	PERCENT: localize("$$$/AE/TLW/GraphEditor/PixelsSource=percent"),
	DEGREES: localize("$$$/AE/TLW/GraphEditor/DegreesSource=degrees"),
	PIXELS: localize("$$$/AE/TLW/GraphEditor/PercentSource=pixels")
}

/**
	* Associative array that converts property match names to their compact English expression statements.
	* @example
	* DuAEF.DuAE.compactExpressions["ADBE Transform Group"]
	* //returns "'transform'"
	* @type {Object}
*/
DuAEF.DuAE.compactExpressions =
{
	"ADBE Transform Group":"'transform'",
	// Handle camera/light vs. AV layers
	"ADBE Anchor Point":"((prop.propertyGroup(prop.propertyDepth).property('intensity')!=null) || (prop.propertyGroup(prop.propertyDepth).property('zoom')!=null)) ? '.pointOfInterest' : '.anchorPoint'",
	"ADBE Position":"'.position'",
	"ADBE Scale":"'.scale'",
	"ADBE Orientation":"'.orientation'",
	"ADBE Rotate X":"'.xRotation'",
	"ADBE Rotate Y":"'.yRotation'",
	// Handle 3D vs. 2D layers
	"ADBE Rotate Z":"(prop.propertyGroup(prop.propertyDepth).threeDLayer || (prop.propertyGroup(prop.propertyDepth).property('intensity')!=null) || (prop.propertyGroup(prop.propertyDepth).property('zoom')!=null)) ? '.zRotation' : '.rotation'",
	"ADBE Opacity":"'.opacity'",
	"ADBE Material Options Group":"'materialOption'",
	"ADBE Casts Shadows":"'.castsShadows'",
	"ADBE Light Transmission":"'.lightTransmission'",
	"ADBE Accepts Shadows":"'.acceptsShadows'",
	"ADBE Accepts Lights":"'.acceptsLights'",
	"ADBE Ambient Coefficient":"'.ambient'",
	"ADBE Diffuse Coefficient":"'.diffuse'",
	"ADBE Specular Coefficient":"'.specular'",
	"ADBE Shininess Coefficient":"'.shininess'",
	"ADBE Metal Coefficient":"'.metal'",
	"ADBE Light Options Group":"'lightOption'",
	"ADBE Light Intensity":"'.intensity'",
	"ADBE Light Color":"'.color'",
	"ADBE Light Cone Angle":"'.coneAngle'",
	"ADBE Light Cone Feather 2":"'.coneFeather'",
	"ADBE Light Shadow Darkness":"'.shadowDarkness'",
	"ADBE Light Shadow Diffusion":"'.shadowDiffusion'",
	"ADBE Camera Options Group":"'cameraOption'",
	"ADBE Camera Zoom":"'.zoom'",
	"ADBE Camera Depth of Field":"'.depthOfField'",
	"ADBE Camera Focus Distance":"'.focusDistance'",
	"ADBE Camera Aperture":"'.aperture'",
	"ADBE Camera Blur Level":"'.blurLevel'",
	"ADBE Text Properties":"'text'",
	"ADBE Text Document":"'.sourceText'",
	"ADBE Text Path Options":"'.pathOption'",
	"ADBE Text Path":"'.path'",
	"ADBE Text Reverse Path":"'.reversePath'",
	"ADBE Text Perpendicular To Path":"'.perpendicularToPath'",
	"ADBE Text Force Align Path":"'.forceAlignment'",
	"ADBE Text First Margin":"'.firstMargin'",
	"ADBE Text Last Margin":"'.lastMargin'",
	"ADBE Text More Options":"'.moreOption'",
	"ADBE Text Anchor Point Option":"'.anchorPointGrouping'",
	"ADBE Text Anchor Point Align":"'.groupingAlignment'",
	"ADBE Text Render Order":"'.fillANdStroke'",
	"ADBE Text Character Blend Mode":"'.interCharacterBlending'",
	"ADBE Text Animators":"'.animator'",
	"ADBE Text Selectors":"'.selector'",
	"ADBE Text Percent Start":"'.start'",
	"ADBE Text Percent End":"'.end'",
	"ADBE Text Percent Offset":"'.offset'",
	"ADBE Text Index Start":"'.start'",
	"ADBE Text Index End":"'.end'",
	"ADBE Text Index Offset":"'.offset'",
	"ADBE Text Range Advanced":"'.advanced'",
	"ADBE Text Range Units":"'.units'",
	"ADBE Text Range Type2":"'.basedOn'",
	"ADBE Text Selector Mode":"'.mode'",
	"ADBE Text Selector Max Amount":"'.amount'",
	"ADBE Text Range Shape":"'.shape'",
	"ADBE Text Selector Smoothness":"'.smoothness'",
	"ADBE Text Levels Max Ease":"'.easeHigh'",
	"ADBE Text Levels Min Ease":"'.easeLow'",
	"ADBE Text Randomize Order":"'.randomizeOrder'",
	"ADBE Text Random Seed":"'.randomSeed'",
	"ADBE Text Selector Mode":"'.mode'",
	"ADBE Text Wiggly Max Amount":"'.maxAmount'",
	"ADBE Text Wiggly Min Amount":"'.minAmount'",
	"ADBE Text Range Type2":"'.basedOn'",
	"ADBE Text Temporal Freq":"'.wigglesSecond'",
	"ADBE Text Character Correlation":"'.correlation'",
	"ADBE Text Temporal Phase":"'.temporalPhase'",
	"ADBE Text Spatial Phase":"'.spatialPhase'",
	"ADBE Text Wiggly Lock Dim":"'.lockDimensions'",
	"ADBE Text Wiggly Random Seed":"'.randomSeed'",
	"ADBE Text Range Type2":"'.basedOn'",
	"ADBE Text Expressible Amount":"'.amount'",
	"ADBE Text Animator Properties":"'.property'",
	"ADBE Text Anchor Point 3D":"'.anchorPoint'",
	"ADBE Text Position 3D":"'.position'",
	"ADBE Text Scale 3D":"'.scale'",
	"ADBE Text Skew":"'.skew'",
	"ADBE Text Skew Axis":"'.skewAxis'",
	"ADBE Text Rotation X":"'.xRotation'",
	"ADBE Text Rotation Y":"'.yRotation'",
	"ADBE Text Rotation":"'.zRotation'",
	"ADBE Text Opacity":"'.opacity'",
	"ADBE Text Fill Opacity":"'.fillOpacity'",
	"ADBE Text Fill Color":"'.fillColor'",
	"ADBE Text Fill Hue":"'.fillHue'",
	"ADBE Text Fill Saturation":"'.fillSaturation'",
	"ADBE Text Fill Brightness":"'.fillBrightness'",
	"ADBE Text Stroke Opacity":"'.strokeOpacity'",
	"ADBE Text Stroke Color":"'.strokeColor'",
	"ADBE Text Stroke Hue":"'.strokeHue'",
	"ADBE Text Stroke Saturation":"'.strokeSaturation'",
	"ADBE Text Stroke Brightness":"'.strokeBrightness'",
	"ADBE Text Stroke Width":"'.strokeWidth'",
	"ADBE Text Line Anchor":"'.lineAnchor'",
	"ADBE Text Line Spacing":"'.lineSpacing'",
	"ADBE Text Track Type":"'.trackingType'",
	"ADBE Text Tracking Amount":"'.trackingAmount'",
	"ADBE Text Character Change Type":"'.characterAlignment'",
	"ADBE Text Character Range":"'.characterRange'",
	"ADBE Text Character Replace":"'.characterValue'",
	"ADBE Text Character Offset":"'.characterOffset'",
	"ADBE Text Blur":"'.blur'",
	"ADBE Mask Parade":"'mask'",
	"ADBE Mask Shape":"'.maskPath'",
	"ADBE Mask Feather":"'.maskFeather'",
	"ADBE Mask Opacity":"'.maskOpacity'",
	"ADBE Mask Offset":"'.maskExpansion'",
	"ADBE Effect Parade":"'effect'",
	"ADBE Paint Group":"'.stroke'",
	"ADBE Paint Shape":"'.path'",
	"ADBE Paint Properties":"'.strokeOption'",
	"ADBE Paint Begin":"'.start'",
	"ADBE Paint End":"'.end'",
	"ADBE Paint Color":"'.color'",
	"ADBE Paint Diameter":"'.diameter'",
	"ADBE Paint Angle":"'.angle'",
	"ADBE Paint Hardness":"'.hardness'",
	"ADBE Paint Roundness":"'.roundness'",
	"ADBE Paint Tip Spacing":"'.spacing'",
	"ADBE Paint Target Channels":"'.channels'",
	"ADBE Paint Opacity":"'.opacity'",
	"ADBE Paint Flow":"'.flow'",
	"ADBE Paint Clone Layer":"'.cloneSource'",
	"ADBE Paint Clone Position":"'.clonePosition'",
	"ADBE Paint Clone Time":"'.cloneTime'",
	"ADBE Paint Clone Time Shift":"'.cloneTimeShift'",
	"ADBE Paint Transform":"'.transform'",
	"ADBE Paint Anchor Point":"'.anchorPoint'",
	"ADBE Paint Position":"'.position'",
	"ADBE Paint Scale":"'.scale'",
	"ADBE Paint Rotation":"'.rotation'",
	"ADBE MTrackers":"'motionTracker'",
	"ADBE MTracker Pt Feature Center":"'.featureCenter'",
	"ADBE MTracker Pt Feature Size":"'.featureSize'",
	"ADBE MTracker Pt Search Ofst":"'.searchOffset'",
	"ADBE MTracker Pt Search Size":"'.searchSize'",
	"ADBE MTracker Pt Confidence":"'.confidence'",
	"ADBE MTracker Pt Attach Pt":"'.attachPoint'",
	"ADBE MTracker Pt Attach Pt Ofst":"'.attachPointOffset'",
	"ADBE Audio Group":"'audio'",
	"ADBE Audio Levels":"'.audioLevels'",
	"ADBE Time Remapping":"'timeRemap'",
	"ADBE Layer Styles":"'layerStyle'",
	"ADBE Blend Options Group":"'.blendingOption'",
		"ADBE Global Angle2":"'.globalLightAngle'",
		"ADBE Global Altitude2":"'.globalLightAltitude'",
		"ADBE Adv Blend Group":"'.advancedBlending'",
		"ADBE Layer Fill Opacity2":"'.fillOpacity'",
		"ADBE R Channel Blend":"'.red'",
		"ADBE G Channel Blend":"'.green'",
		"ADBE B Channel Blend":"'.blue'",
		"ADBE Blend Interior":"'.blendInteriorStylesAsGroup'",
		"ADBE Blend Ranges":"'.useBlendRangesFromSource'",
	"dropShadow/enabled":"'.dropShadow'",
		"dropShadow/mode2":"'.blendMode'",
		"dropShadow/color":"'.color'",
		"dropShadow/opacity":"'.opacity'",
		"dropShadow/useGlobalAngle":"'.useGlobalLight'",
		"dropShadow/localLightingAngle":"'.angle'",
		"dropShadow/distance":"'.distance'",
		"dropShadow/chokeMatte":"'.spread'",
		"dropShadow/blur":"'.size'",
		"dropShadow/noise":"'.noise'",
		"dropShadow/layerConceals":"'.layerKnocksOutDropShadow'",
	"innerShadow/enabled":"'.innerShadow'",
		"innerShadow/mode2":"'.blendMode'",
		"innerShadow/color":"'.color'",
		"innerShadow/opacity":"'.opacity'",
		"innerShadow/useGlobalAngle":"'.useGlobalLight'",
		"innerShadow/localLightingAngle":"'.angle'",
		"innerShadow/distance":"'.distance'",
		"innerShadow/chokeMatte":"'.choke'",
		"innerShadow/blur":"'.size'",
		"innerShadow/noise":"'.noise'",
	"outerGlow/enabled":"'.outerGlow'",
		"outerGlow/mode2":"'.blendMode'",
		"outerGlow/opacity":"'.opacity'",
		"outerGlow/noise":"'.noise'",
		"outerGlow/AEColorChoice":"'.colorType'",
		"outerGlow/color":"'.color'",
		"outerGlow/gradientSmoothness":"'.gradientSmoothness'",
		"outerGlow/glowTechnique":"'.technique'",
		"outerGlow/chokeMatte":"'.spread'",
		"outerGlow/blur":"'.size'",
		"outerGlow/inputRange":"'.range'",
		"outerGlow/shadingNoise":"'.jitter'",
	"innerGlow/enabled":"'.innerGlow'",
		"innerGlow/mode2":"'.blendMode'",
		"innerGlow/opacity":"'.opacity'",
		"innerGlow/noise":"'.noise'",
		"innerGlow/AEColorChoice":"'.colorType'",
		"innerGlow/color":"'.color'",
		"innerGlow/gradientSmoothness":"'.gradientSmoothness'",
		"innerGlow/glowTechnique":"'.technique'",
		"innerGlow/innerGlowSource":"'.source'",
		"innerGlow/chokeMatte":"'.choke'",
		"innerGlow/blur":"'.size'",
		"innerGlow/inputRange":"'.range'",
		"innerGlow/shadingNoise":"'.jitter'",
	"bevelEmboss/enabled":"'.bevelAndEmboss'",
		"bevelEmboss/bevelStyle":"'.style'",
		"bevelEmboss/bevelTechnique":"'.technique'",
		"bevelEmboss/strengthRatio":"'.depth'",
		"bevelEmboss/bevelDirection":"'.direction'",
		"bevelEmboss/blur":"'.size'",
		"bevelEmboss/softness":"'.soften'",
		"bevelEmboss/useGlobalAngle":"'.useGlobalLight'",
		"bevelEmboss/localLightingAngle":"'.angle'",
		"bevelEmboss/localLightingAltitude":"'.altitude'",
		"bevelEmboss/highlightMode":"'.highlightMode'",
		"bevelEmboss/highlightColor":"'.highlightColor'",
		"bevelEmboss/highlightOpacity":"'.highlightOpacity'",
		"bevelEmboss/shadowMode":"'.shadowMode'",
		"bevelEmboss/shadowColor":"'.shadowColor'",
		"bevelEmboss/shadowOpacity":"'.shadowOpacity'",
	"chromeFX/enabled":"'.satin'",
		"chromeFX/mode2":"'.blendMode'",
		"chromeFX/color":"'.color'",
		"chromeFX/opacity":"'.opacity'",
		"chromeFX/localLightingAngle":"'.angle'",
		"chromeFX/distance":"'.distance'",
		"chromeFX/blur":"'.size'",
		"chromeFX/invert":"'.invert'",
	"solidFill/enabled":"'.colorOverlay'",
		"solidFill/mode2":"'.blendMode'",
		"solidFill/color":"'.color'",
		"solidFill/opacity":"'.opacity'",
	"gradientFill/enabled":"'.gradientOverlay'",
		"gradientFill/mode2":"'.blendMode'",
		"gradientFill/opacity":"'.opacity'",
		"gradientFill/gradientSmoothness":"'.gradientSmoothness'",
		"gradientFill/angle":"'.angle'",
		"gradientFill/type":"'.style'",
		"gradientFill/reverse":"'.reverse'",
		"gradientFill/align":"'.alignWithLayer'",
		"gradientFill/scale":"'.scale'",
		"gradientFill/offset":"'.offset'",
	"patternFill/enabled":"'.patternOverlay'",
		"patternFill/mode2":"'.blendMode'",
		"patternFill/opacity":"'.opacity'",
		"patternFill/align":"'.linkWithLayer'",
		"patternFill/scale":"'.scale'",
		"patternFill/phase":"'.offset'",
	"frameFX/enabled":"'.stroke'",
		"frameFX/mode2":"'.blendMode'",
		"frameFX/color":"'.color'",
		"frameFX/size":"'.size'",
		"frameFX/opacity":"'.opacity'",
		"frameFX/style":"'.position'",
};

/**
	* Menu Command Ids<br />
	* These are the ids which can be found using <code>app.findMenuCommandID("insertMenuNameHere");</code><br />
	* Use <code>app.executeCommand(id)</code> to run them.
	* @enum {int}
	* @readonly
	* @example
	* app.executeCommand(DuAEF.DuAE.menuCommandID.COPY); //copies the selection
	* app.executeCommand(DuAEF.DuAE.menuCommandID.PASTE); //pastes the selection
*/
DuAEF.DuAE.menuCommandID =
{
	//EDIT menu
	CUT: 18,
	COPY: 19,
	COPY_WITH_PROPERTY_LINKS: 10310,
	PASTE: 20,
	DUPLICATE: 2080
}

/**
	* How to place new layers
	* @enum {int}
	* @readonly
*/
DuAEF.DuAE.LayerPlacements =
{
	BOTTOM: 0,
	UNDER_LAYER: 1,
	ABOVE_LAYER: 2,
	TOP: 3
}

/**
 * Types of layers used by Ae
 * @enum {string}
 * @readonly
*/
DuAEF.DuAE.LayerTypes =
{
	NULL: 'null',
	SOLID: 'solid',
	SHAPE: 'shape',
	TEXT: 'text',
	ADJUSTMENT: 'adjustment',
	LIGHT: 'light',
	CAMERA: 'camera'
}

/**
 * Attributes of layers in Ae
 * @enum {string}
 * @readonly
*/
DuAEF.DuAE.LayerAttributes =
{
	SELECTED: 'selected',
	VISIBLE: 'visible',
	AUDIO: 'audio',
	SOLO: 'solo',
	LOCKED: 'locked',
	SHY: 'shy',
	EFFECTS_ENABLED: 'effects',
	MOTION_BLUR: 'motionblur',
	THREE_D: '3d',
	GUIDE: 'guide'
}

/**
 * Loop types
 * @enum {string}
 * @readonly
*/
DuAEF.DuAE.LoopTypes = 
{
	HOLD: 'hold',
	NONE: 'none',
	CYCLE: 'cycle',
	PINGPONG: 'pingpong',
	OFFSET: 'offset',
	CONTINUE: 'continue'
}

/**
 * Default color labels
 * @readonly
 * @todo get real labels (from pref file?)
 */
DuAEF.DuAE.ColorLabels = [];
DuAEF.DuAE.ColorLabels[0]  = [0, 0, 0 ];	// 0. None
DuAEF.DuAE.ColorLabels[1]  = [121/255, 058/255, 058/255 ];	// 1. Red
DuAEF.DuAE.ColorLabels[2]  = [144/255, 138/255, 068/255 ];	// 2. Yellow
DuAEF.DuAE.ColorLabels[3]  = [115/255, 132/255, 130/255 ];	// 3. Aqua
DuAEF.DuAE.ColorLabels[4]  = [145/255, 124/255, 131/255 ];	// 4. Pink
DuAEF.DuAE.ColorLabels[5]  = [115/255, 115/255, 131/255 ];	// 5. Lavender
DuAEF.DuAE.ColorLabels[6]  = [146/255, 127/255, 109/255 ];	// 6. Peach
DuAEF.DuAE.ColorLabels[7]  = [120/255, 130/255, 120/255 ];	// 7. Sea Foam
DuAEF.DuAE.ColorLabels[8]  = [082/255, 093/255, 142/255 ];	// 8. Blue
DuAEF.DuAE.ColorLabels[9]  = [067/255, 112/255, 068/255 ];	// 9. Green
DuAEF.DuAE.ColorLabels[10] = [101/255, 052/255, 107/255 ];	// 10. Purple
DuAEF.DuAE.ColorLabels[11] = [146/255, 103/255, 037/255 ];	// 11. Orange
DuAEF.DuAE.ColorLabels[12] = [094/255, 065/255, 051/255 ];	// 12. Brown
DuAEF.DuAE.ColorLabels[13] = [152/255, 085/255, 137/255 ];	// 13. Fuchsia
DuAEF.DuAE.ColorLabels[14] = [061/255, 111/255, 113/255 ];	// 14. Cyan
DuAEF.DuAE.ColorLabels[15] = [114/255, 105/255, 090/255 ];	// 15. Sandstone
DuAEF.DuAE.ColorLabels[16] = [045/255, 062/255, 045/255 ];	// 16. DarkGreen

/**
	* Checks if the param is an AE collection or an Array
	* @param {Array|Collection} collection - The list to check
	* @return {boolean} true if collection is a collection, false if it's an array
*/
DuAEF.DuAE.isCollection = function (collection)
{
	return collection instanceof ItemCollection || collection instanceof LayerCollection || collection instanceof OMCollection || collection instanceof RQItemCollection;
}

/**
	* Gets the PropertyInfo for the properties
	* @param {PropertyBase[]} props - The Properties
	* @return {PropertyInfo[]} The info
*/
DuAEF.DuAE.getPropertyInfos = function (props)
{
	//convert to propinfo
	var propInfos = [];
	for (var i = 0 ; i < props.length ; i++)
	{
		var propInfo;
		if (props[i] instanceof PropertyInfo) propInfo = props[i];
		else propInfo = new PropertyInfo(props[i]);
		propInfos.push(propInfo);
	}
	return propInfos;
}

/**
	* Converts an AE Collection to an Array<br />
	* Should only be used in case you need an copy of the collection as an Array,<br />
	* you should use an {@link Iterator} otherwise
	* @param {Array|Collection} collection - The collection to convert
	* @return {Array} The array
*/
DuAEF.DuAE.convertCollectionToArray = function (collection)
{
	var arr = [];
	if (DuAEF.DuAE.isCollection(collection))
	{
		for (var i = 1;i<=collection.length;i++)
		{
			arr.push(collection[i]);
		}
	}
	else
	{
		arr = collection;
	}
	return arr;
}


// ==================== |------------| ====================
// ==================== | DuAEAppLib | ====================
// ==================== |------------| ====================

/**
 * Application related methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.App = {};

/**
 * Informations about the version of after effects.
 * @type {DuVersion}
 * @readonly
 */
DuAEF.DuAE.App.version = new DuVersion( app.version );

/**
 * Has scripting file and network authorization
 * @readonly
 * @type {boolean}
 */
DuAEF.DuAE.App.hasFilesAndNetworkAccess = app.preferences.getPrefAsLong( "Main Pref Section", "Pref_SCRIPTING_FILE_NETWORK_SECURITY" ) == 1;

/**
 * Asks the user to check the file and network security pref if not already set.
 * Opens the general prefrences of After Effects.
 * @memberof DuAEF.DuAE.App
 * @param {boolean}	[showAlert=true]	- Wether to display an alert before opening the preferences
 * @param {string}	[message=The Duduf After Effects scripting framework needs to be allowed to write files\nPlease, check the box called 'Allow Scripts to write files...' in the general preferences of After Effects.]	- The message to display in the alert.
 * @return {boolean}	Wether the preference has been set
 */
DuAEF.DuAE.App.askFilesAndNetworkAccess = function ( showAlert, message ) {
    if ( showAlert == undefined ) alert = true;
    if ( message == undefined ) message = "The Duduf After Effects framework needs to be allowed to write files\nPlease, check the box called 'Allow Scripts to write files...' in the general preferences of After Effects.";
    if ( !DuAEF.DuAE.App.hasFilesAndNetworkAccess ) {
        if ( showAlert ) alert( message );
        if ( DuAEF.DuAE.App.version.version < 16.1 ) app.executeCommand( 2359 );
        else app.executeCommand( 3131 );
        DuAEF.DuAE.App.hasFilesAndNetworkAccess = app.preferences.getPrefAsLong( "Main Pref Section", "Pref_SCRIPTING_FILE_NETWORK_SECURITY" ) == 1;
    }
    return DuAEF.DuAE.App.hasFilesAndNetworkAccess;
}

/**
 * Gets the public name of a version of After Effects (like CC2015.3 for version 13.8)
 * @param {float}	[versionAsFloat]	- The version as a float. If not provided, will default to the current version of the running instance of After Effects.
 * @return {string}	The version name.
 */
DuAEF.DuAE.App.getAEVersionName = function ( versionAsFloat ) {
    if ( versionAsFloat == undefined ) versionAsFloat = DuAEF.DuAE.App.version.version;
    if ( versionAsFloat < 8 ) return "" + versionAsFloat;
    if ( versionAsFloat >= 8 && versionAsFloat < 9 ) return "CS3";
    if ( versionAsFloat >= 9 && versionAsFloat < 10 ) return "CS4";
    if ( versionAsFloat >= 10 && versionAsFloat < 10.5 ) return "CS5";
    if ( versionAsFloat >= 10.5 && versionAsFloat < 11 ) return "CS5.5";
    if ( versionAsFloat >= 11 && versionAsFloat < 12 ) return "CS6";
    if ( versionAsFloat >= 12 && versionAsFloat < 13 ) return "CC";
    if ( versionAsFloat >= 13 && versionAsFloat < 13.1 ) return "CC2014";
    if ( versionAsFloat >= 13.1 && versionAsFloat < 13.2 ) return "CC2014.1";
    if ( versionAsFloat >= 13.2 && versionAsFloat < 13.5 ) return "CC2014.2";
    if ( versionAsFloat >= 13.5 && versionAsFloat < 13.6 ) return "CC2015";
    if ( versionAsFloat >= 13.6 && versionAsFloat < 13.7 ) return "CC2015.1";
    if ( versionAsFloat >= 13.7 && versionAsFloat < 13.8 ) return "CC2015.2";
    if ( versionAsFloat >= 13.8 && versionAsFloat < 14 ) return "CC2015.3";
    if ( versionAsFloat >= 14 && versionAsFloat < 15 ) return "CC2017";
    if ( versionAsFloat >= 15 && versionAsFloat < 16 ) return "CC2018";
    if ( versionAsFloat >= 16 && versionAsFloat < 17 ) return "CC2019";
    else return "Unknown";
}

//low-level undocumented flag.
//true if an undo group has been opened and has not been closed yet.
DuAEF.DuAE.App.openedUndoGroup = false;

//low-level undocumented flag.
//the name of the currently opened undo group
DuAEF.DuAE.App.undoGroupName = '';

/**
 * Begins an undoGroup.<br />
 * Automatically prepend the group name with the script name.<br />
 * Using this method is safer than the native one, as DuAEF will try to avoid opening several undo groups at once.<br />
 * The group name is translatable.
 * @param {string} groupName - The name of the Undo Group.
 * @param {boolean} [autoClose=true] - By default, DuAEF will close any previously opened undogroup (which has a different name) to prevent any error.<br />
 * Set this to <code>false</code> in order to ignore this new group beginning and keep the previously opened one.
 */
DuAEF.DuAE.App.beginUndoGroup = function ( groupName, autoClose ) {
    groupName = def( groupName, "" );
    autoClose = def( autoClose, true );

    if ( groupName != "" ) {
        DuAEF.DuScriptUI.uiStrings.push( groupName );
        groupName = tr( groupName );
    }

    if ( DuAEF.DuAE.App.openedUndoGroup ) {
        if ( autoClose && DuAEF.DuAE.App.undoGroupName != groupName ) DuAEF.DuAE.App.endUndoGroup();
        else return;
    }
    app.beginUndoGroup( DuAEF.scriptName + ' | ' + groupName );

    DuAEF.DuAE.App.undoGroupName = groupName;

    DuAEF.DuAE.App.openedUndoGroup = true;
}

/**
 * Ends an undoGroup.<br />
 * Using this method is safer than the native one, as DuAEF will try to avoid opening several undo groups at once.
 */
DuAEF.DuAE.App.endUndoGroup = function () {
    app.endUndoGroup();
    DuAEF.DuAE.App.openedUndoGroup = false;
}

/**
 * Runs app.executeCommand in a safer way, taking care of undogroups.
 * @param {int|string} commandID - The ID of the command as given by app.findMenuCommandID(), or if it is a string, the name of the command.
 */
DuAEF.DuAE.App.executeCommand = function ( commandID ) {
    if ( commandID === "" ) return;
    if ( DuAEF.DuJS.typeof( commandID ) == 'string' ) commandID = app.findMenuCommandId( commandID );
    //the command will mess undo groups up if there already is one opened.
    openedUndoGroup = DuAEF.DuAE.App.openedUndoGroup;
    DuAEF.DuAE.App.endUndoGroup();
    app.executeCommand( commandID );
    if ( openedUndoGroup ) DuAEF.DuAE.App.beginUndoGroup( DuAEF.DuAE.App.undoGroupName );
}

/**
 * Opens a ScriptUI Panel if it is installed, or displays an alert otherwise.
 * @param {string} panelScriptName - The Script name of the panel "script.jsx"
 */
DuAEF.DuAE.App.openScriptUIPanel = function ( panelScriptName ) {
    if ( panelScriptName == "" ) return;
    var scriptUIFile = new File( Folder.appPackage.absoluteURI + '/Scripts/ScriptUI Panels/' + panelScriptName );
    if ( !scriptUIFile.exists ) {
        scriptUIFile = new File( Folder.userData.absoluteURI + '/Adobe/After Effects/' + DuAEF.DuAE.App.version.versionString + '/Scripts/ScriptUI Panels/' + panelScriptName );
    }
    if ( !scriptUIFile.exists ) {
        alert( "The panel " + panelScriptName + " is not installed." );
        return;
    }
    DuAEF.DuAE.App.executeCommand( panelScriptName );
}

/**
 * Cuts the selection (runs the cut menu command)
 */
DuAEF.DuAE.App.cut = function () {
    DuAEF.DuAE.App.executeCommand( DuAEF.DuAE.menuCommandID.CUT );
}

/**
 * Copies the selection (runs the copy menu command)
 */
DuAEF.DuAE.App.copy = function () {
    DuAEF.DuAE.App.executeCommand( DuAEF.DuAE.menuCommandID.COPY );
}

/**
 * Duplcates the selection (runs the duplicate menu command)
 */
DuAEF.DuAE.App.duplicate = function () {
    DuAEF.DuAE.App.executeCommand( DuAEF.DuAE.menuCommandID.DUPLICATE );
}

/**
 * Copies the selection with property links (runs the copy menu command)<br />
 * Only on versions of After Effects greater than 11.0 (CS6)<br />
 * On CS6 and below, a standard copy will be done.
 */
DuAEF.DuAE.App.copyWithPropertyLinks = function () {
    if ( DuAEF.DuAE.App.version >= 12.0 ) DuAEF.DuAE.App.executeCommand( DuAEF.DuAE.menuCommandID.COPY_WITH_PROPERTY_LINKS );
    else DuAEF.DuAE.App.copy();
}

/**
 * Pastes the selection (runs the paste menu command)
 */
DuAEF.DuAE.App.paste = function () {
    DuAEF.DuAE.App.executeCommand( DuAEF.DuAE.menuCommandID.PASTE );
}

/**
 * Checks if the Folder is an Auto-Save folder
 * @param {Folder|string} folder The folder or path to check
 * @return {boolean} true if the folder is an auto-save folder 
 */
DuAEF.DuAE.App.isAutoSaveFolder = function ( folder ) {
    if (DuAEF.DuJS.typeof(folder).toLowerCase() == 'string' ) folder = new Folder(folder);
    if (!(folder instanceof Folder)) {
        DuAEF.Debug.throwTypeError( folder, 'folder', 'Folder/string', 'DuAEF.DuAE.App.isAutoSaveFolder( folder )');
        return false;
    }

    var folderName = folder.fsName.toLowerCase();
    if (DuAEF.win) folderName = folderName.split('\\').pop();
    else folderName = folderName.split('/').pop();
    
    var aaeString = 'adobe after effects';
    var autosaveString = localize("$$$/AE/MenuID/0307/AutoSave=Auto-Save").toLowerCase();

    return folderName.indexOf( aaeString ) >= 0 && folderName.indexOf( autosaveString ) >= 0;
}// ==================== |----------------| ====================
// ==================== | DuAEProjectLib | ====================
// ==================== |----------------| ====================

/**
 * After Effects project methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.Project = {};

//undocumented flags
DuAEF.DuAE.Project.progressMode = false;
DuAEF.DuAE.Project.activeComp = null;
DuAEF.DuAE.Project.progressComp = null;
DuAEF.DuAE.Project.viewerMaximized = false;

//caches
//this must be set to true during work on the cache to prevent it from updating
DuAEF.DuAE.Project.suspendCacheUpdates = false;

// the expression cache is an array of PropertyExpression
DuAEF.DuAE.Project.expressionCache = [];
DuAEF.DuAE.Project.lastExpressionCacheUpdateTime = 0;

/**
 * Sets the project in "waiting mode" to speed up things.
 * @param {bool} [inProgress=true] - True to set progress mode, false to stop it.
 */
DuAEF.DuAE.Project.setProgressMode = function ( inProgress ) {
    inProgress = def (inProgress, true);
    if ( !inProgress && !DuAEF.DuAE.Project.progressMode ) return;

    if ( inProgress ) {

        //if not already in progress, create temp comp etc
        if (!DuAEF.DuAE.Project.progressMode || !Object.isValid(DuAEF.DuAE.Project.progressComp))
        {
            //store the current comp
            DuAEF.DuAE.Project.activeComp = DuAEF.DuAE.Project.getActiveComp();

            if ( app.activeViewer != null ) DuAEF.DuAE.Project.viewerMaximized = app.activeViewer.maximized;

            //create a temp comp, open it
            DuAEF.DuAE.Project.progressComp = app.project.items.addComp( "MAGIC IS HAPPENING...", 500, 500, 1, 1, 1 );

            var tempL = DuAEF.DuAE.Project.progressComp.layers.addShape();
            tempL.applyPreset( DuAEF.DuAE.Presets.MAGIC );
            tempL.selected = false;
        }

        //open and maximize the temp comp
        DuAEF.DuAE.Project.progressComp.openInViewer();
        if ( app.activeViewer != null ) app.activeViewer.maximized = true;

        DuAEF.DuAE.Project.progressMode = true;
    } else {
        //remove temp comp
        if ( DuAEF.DuAE.Project.progressComp != null ) DuAEF.DuAE.Project.progressComp.remove();
        //re-activate previous comp
        if ( DuAEF.DuAE.Project.activeComp != null ) DuAEF.DuAE.Project.activeComp.openInViewer();
        if ( app.activeViewer != null ) app.activeViewer.maximized = DuAEF.DuAE.Project.viewerMaximized;

        DuAEF.DuAE.Project.progressMode = false;
    }

}

/**
 * Gets all compositions in the project (or only the root of the project, ignoring subfolders)
 * @param {boolean} [rootOnly=false] Set to true to get only comps from the root of the project
 * @return {CompItem[]} The compositions
 */
DuAEF.DuAE.Project.getComps = function ( rootOnly ) {
    rootOnly = def( rootOnly, false );
    var comps = [];
    var it = new Iterator( app.project.items );
    it.do( function ( comp ) {
        if ( comp instanceof CompItem ) {
            if ( rootOnly && comp.parentFolder != app.project.rootFolder ) return;
            comps.push( comp );
        }
    } );
    return comps;
}

/**
 * Gets the After Effects current composition
 * @return {CompItem|null} The current composition or null if there's no current comp
 */
DuAEF.DuAE.Project.getActiveComp = function () {
    if ( DuAEF.DuAE.Project.progressMode ) return DuAEF.DuAE.Project.activeComp;
    //activate the viewer first to try to get the opened composition
    if ( app.activeViewer.type == ViewerType.VIEWER_COMPOSITION ) app.activeViewer.setActive();
    var comp = app.project.activeItem;
    if ( !comp ) return null;
    if ( !( comp instanceof CompItem ) ) return null;
    return comp;
}

/**
 * Retrieves an item by its Item ID
 * @return {Item|null} The item
 */
DuAEF.DuAE.Project.getItemById = function ( id ) {

    var it = new Iterator( app.project.items );
    while ( item = it.next() ) {
        if ( item.id == id ) return item;
    }
    return null;
}

/**
 * Generates a new unique name for a composition
 * @param {string} newName - The wanted new name
 * @param {CompItem} comp  - The comp
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuAE.Project.newUniqueCompName = function ( newName, increment ) {
    if ( typeof increment == 'undefined' ) increment = true;
    var compNames = [];
    var it = new Iterator( app.project.items );
    it.do( function ( comp ) {
        if ( comp instanceof CompItem ) compNames.push( comp.name );
    } );
    return DuAEF.DuJS.String.generateUnique( newName, compNames, increment );
}

/**
 * Makes sure all compositions in the project have unique names, renaming them if needed.
 */
DuAEF.DuAE.Project.setUniqueCompNames = function () {
    var comps = DuAEF.DuAE.Project.getComps();
    var it = new Iterator( app.project.items );
    it.do( function ( comp ) {
        //temporarily set another name to correctly generate a new unique name 
        var newName = comp.name;
        comp.name = '***Duik-temp-name-xxx***';
        comp.name = DuAEF.DuAE.Project.newUniqueCompName( newName );
    } );
}

/**
 * Updates the cache of the expressions used by Duik to speed up batch process of expressions in the whole project.<br />
 * It's automatically run when needed if it's not been updated in a long time (1 mn) or if it's empty
 */
DuAEF.DuAE.Project.updateExpressionCache = function () {

    if ( DuAEF.DuAE.Project.suspendCacheUpdates ) return;

    //clear cache
    DuAEF.DuAE.Project.expressionCache = [];

    for ( var i = 1, num = app.project.numItems; i <= num; i++ ) {
        var comp = app.project.item( i );
        if ( !( comp instanceof CompItem ) ) continue;

        for ( var l = 1, num = comp.numLayers; l <= num; l++ ) {
            DuAEF.DuAE.Property.addToExpressionCache( comp.layer( l ) );
        }
    }

    DuAEF.DuAE.Project.lastExpressionCacheUpdateTime = new Date().getTime();
}

//low-level undocumented method used to re-set expressions once they have been modified in the cache
DuAEF.DuAE.Project.updateExpressionsFromCache = function ( cache ) {
    for (var i = 0, num = cache.length; i < num; i++)
    {
        var pExp = cache[i];
        if (pExp.layer.locked) continue;
        if (!pExp.changed) continue;

        var prop = pExp.getProperty();
        prop.expression = pExp.expression;
    } 
}

/**
 * Reduces the project using the selected compositions, the same way the native command does it, but being able to keep comps used only by expressions. If there's no comp selected, will use all comps at the root of the project.
 * @param {boolean} [keepExpressionOnly=true] Set to false to ignore comps used only by expressions (same as the native command)
 */
DuAEF.DuAE.Project.reduceSelected = function ( keepExpressionOnly ) {
    var comps = [];
    for (var i = 0, num = app.project.selection.length; i < num; i++) {
        var item = app.project.selection[i];
        if (item instanceof CompItem) comps.push(item);
    }
    DuAEF.DuAE.Project.reduce( comps, keepExpressionOnly );
}

/**
 * Reduces the project, the same way the native command does it, but being able to keep comps used only by expressions.
 * @param {CompItem|CompItem[]} [comps] The name or the id of the comp(s) to keep. If omitted, it will use all comps at the root of the project (the ones not in a subfolder).
 * @param {boolean} [keepExpressionOnly=true] Set to false to ignore comps used only by expressions (same as the native command)
 */
DuAEF.DuAE.Project.reduce = function ( comps, keepExpressionOnly ) {
    keepExpressionOnly = def( keepExpressionOnly, true );
    comps = def( comps, DuAEF.DuAE.Project.getComps( true ) );
    if ( comps instanceof CompItem ) comps = [ comps ];
    if ( comps.length == 0 ) return;

    //consolidate footage
    app.project.consolidateFootage();

    //update cache before running
    DuAEF.DuAE.Project.updateExpressionCache();

    for ( i = app.project.numItems; i > 0; i-- ) {
        var item = app.project.item( i );
        //if it's one of the comp, ignore
        if ( DuAEF.DuJS.Array.indexOf( comps, item, DuAEF.DuAE.Item.compareItems ) >= 0 ) continue;
        //if AVItem
        if ( item instanceof CompItem || item instanceof FootageItem ) {
            var usedIn = DuAEF.DuAE.Item.usedIn( item, true, keepExpressionOnly );

            if ( usedIn.length == 0 ) {
                item.remove();
                continue;
            }

            var remove = true;

            for ( j = 0, num = usedIn.length; j < num; j++ ) {
                //if there's one of the comp to keep, do not remove
                if ( DuAEF.DuJS.Array.indexOf( comps, usedIn[ j ], DuAEF.DuAE.Item.compareItems ) >= 0 ) {
                    remove = false;
                    break;
                }
            }

            if ( remove ) item.remove();
        }
        //remove folder if  empty 
        else if ( item.numItems == 0 ) item.remove();
    }
}

/**
 * Collects all dependencies in a folder
 * @param {Folder} [destination] The folder where to save the files. The project files will be collected in a subfolder called "project name.aep.archive" or "project name.aep.zip". If not provided, will use the current folder.
 * @param {boolean} [overwrite=false] Wether to overwrite existing footage in the destination.
 * @param {boolean} [zip=false] Set to true to automatically zip the archive.
 * @param {boolean} [createProjectFolder=true] Wether to create a folder for this project or use the destination as is.
 */
DuAEF.DuAE.Project.collectFiles = function ( destination, overwrite, zip, createProjectFolder ) {
    var projectFile = app.project.file;

    var result = {};
    result.missingFootages = [];
    
    destination = def ( destination, projectFile.parent );
    overwrite = def (overwrite, false);
    zip = def (zip, false);
    createProjectFolder = def (createProjectFolder, true);

    //create folder for the project
    var projectName = DuAEF.DuJS.Fs.getBasename( projectFile.name );
    var projectFolderPath = destination.absoluteURI;
    if (createProjectFolder) {
        projectFolderPath += '/' + projectName + ".archive";
    }
    var projectFolder = new Folder( projectFolderPath );
	var footageFolder = new Folder( projectFolder.absoluteURI + "/(Footage)/" );
	projectFolder.create();
	footageFolder.create();

    //create report file
    var missingFootageString = "=== MISSING FOOTAGE ===\n\n";

    var currentFootageFolder = footageFolder;
    currentFootageFolder.id = -1;

	//for each item, copy and re-link
	for (var i = 1, num = app.project.numItems; i <= num; i++ ) {
        var item = app.project.item(i);

        //check if we're still in the right folder
        if (item.parentFolder.id != currentFootageFolder.id) {
            if (item.parentFolder == app.project.rootFolder )
            {
                currentFootageFolder = footageFolder;  
            }
            else
            {
                currentFootageFolder = currentFootageFolder.parent;
            }
            currentFootageFolder.id = item.parentFolder.id;
        }

        if ( item instanceof CompItem ) continue;
        if ( item instanceof FolderItem ) {
            currentFootageFolder = new Folder( currentFootageFolder.absoluteURI + "/" + item.name);
            currentFootageFolder.create();
            currentFootageFolder.id = item.id;
            continue;
        }

        //if no source file
        if (item.file == null) continue;
        //if missing source
        if (item.footageMissing) {
            missingFootageString += item.name + " @ " + item.file.fsName + "\n";
            result.missingFootages.push(item.file.fsName);
            continue;
        }

        //if this is not an image sequence
        if (!DuAEF.DuAE.Item.isImageSequence(item)) {
            var newPath = currentFootageFolder.absoluteURI + "/" + item.file.name;
            var newFile = new File( newPath );
            //copy
            if ( (newFile.exists && overwrite) || !newFile.exists) item.file.copy( newPath );
            //re-link
            item.replace(new File( newPath ));
        }
        else {
            //get files and create a folder
            var sequenceFolder = item.file.parent;
            var frameSequence = sequenceFolder.getFiles();
            var sequenceFolderTarget = new Folder(currentFootageFolder.absoluteURI + "/" + sequenceFolder.name + "/");
            sequenceFolderTarget.create();
            var newPath = sequenceFolderTarget.absoluteURI + "/" + item.file.name;
            var newFile = new File(newPath);

            //copy frames
            if ( (newFile.exists && overwrite) || !newFile.exists) {
                for (var j = 0, numFrames = frameSequence.length; j < numFrames; j++ ) {
                    var frame = frameSequence[j];
                    if ( frame instanceof Folder ) continue;
                    frame.copy( sequenceFolderTarget.absoluteURI + "/" + frame.name );
                }
            }
            
            //re-link
            item.replaceWithSequence(newFile, true);
        }

	}

	//sauvegarder le projet
    var newProjectFileName = DuAEF.DuJS.Fs.newUniqueFileName(app.project.file.name , projectFolder);
	app.project.save(new File(projectFolder.absoluteURI + "/" + newProjectFileName));

    //write report
    var reportFile = new File(projectFolder.absoluteURI + "/" + app.project.file.name + "_report.txt");
    var report = app.project.file.name + "\n\n";
    report += missingFootageString;
    DuAEF.DuJS.Fs.writeTextFile( reportFile, report );

    //ZIP
    if (zip) {
        app.project.close( CloseOptions.DO_NOT_SAVE_CHANGES );
        app.open( projectFile );
        var zipFile = DuAEF.Zip.compressFolderContent( projectFolder, projectName + ".zip", true );
    }
}

/**
 * Replaces text in Expressions
 * @param {string} oldString - The string to replace
 * @param {string} newString - The new string
 * @param {boolean} [caseSensitive=true] - Wether the search has to be case sensitive
 */
DuAEF.DuAE.Project.replaceInExpressions = function ( oldString, newString, caseSensitive ) {
    caseSensitive = def (caseSensitive, true);

    //update expression cache before searching
    DuAEF.DuAE.Project.updateExpressionCache();

    var re = new RegExp( DuAEF.DuJS.RegExp.escapeRegExp(oldString), caseSensitive ? 'g' : 'gi');

    //search and replace in the cache
    for (var i = 0, num = DuAEF.DuAE.Project.expressionCache.length; i < num; i++) {
        DuAEF.DuAE.Project.expressionCache[i].changed = re.test( DuAEF.DuAE.Project.expressionCache[i].expression );
        if (DuAEF.DuAE.Project.expressionCache[i].changed) DuAEF.DuAE.Project.expressionCache[i].expression = DuAEF.DuAE.Project.expressionCache[i].expression.replace( re, newString );
    }

    //update expressions from cache
    DuAEF.DuAE.Project.updateExpressionsFromCache( DuAEF.DuAE.Project.expressionCache )
}// ==================== |-------------| ====================
// ==================== | DuAEItemLib | ====================
// ==================== |-------------| ====================

/**
 * After Effects item methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.Item = {};

DuAEF.DuAE.Item.stillFormats = [
    "bmp",
    "rle",
    "dib",
    "tif",
    "crw",
    "nef",
    "raf",
    "orf",
    "mrw",
    "dcr",
    "mos",
    "raw",
    "pef",
    "srf",
    "dng",
    "x3f",
    "cr2",
    "erf",
    "sr2",
    "kdc",
    "mfw",
    "mef",
    "arw",
    "nrw",
    "rw2",
    "rwl",
    "iiq",
    "3fr",
    "fff",
    "srw",
    "gpr",
    "dxo",
    "heic",
    "arq",
    "cr3",
    "cin",
    "dpx",
    "img",
    "ei",
    "ai",
    "pdf",
    "eps",
    "ai3",
    "ai4",
    "ai5",
    "ai6",
    "ai7",
    "ai8",
    "epsf",
    "epsp",
    "jpg",
    "jpeg",
    "jfif",
    "jpe",
    "ico",
    "exr",
    "sxr",
    "mxr",
    "psd",
    "psb",
    "png",
    "hdr",
    "rgbe",
    "xyze",
    "rla",
    "rpf",
    "sgi",
    "bw",
    "rgb",
    "pic",
    "tga",
    "vda",
    "icb",
    "vst",
    "tiff"
]

//low-level undocumented method
//a function to compare items
DuAEF.DuAE.Item.compareItems = function (itemA, itemB) { return itemA.id == itemB.id; }

/**
 * Gets the compositions this item is used in.
 * @param {AVItem} item The item
 * @param {boolean} [includeExpressionOnly=false] Check for comps using this item only through expressions. The cache has to be updated with {@link DuAEF.DuAE.Project.updateExpressionCache} before using this method with this argument set to true.
 * @param {boolean} [recursive=false] Check recursively in parent comps too.
 * @return {CompItem[]} The compositions.
 */
DuAEF.DuAE.Item.usedIn = function (item, recursive, keepExpressionOnly ) {
    keepExpressionOnly = def (keepExpressionOnly, false);
    recursive = def (recursive, false);
    var cacheSuspended = false;

    if (item instanceof FolderItem) return [];

    var usedIn = item.usedIn;

    if (!keepExpressionOnly) return usedIn;

    //update cache if needed
    var currentTime = new Date().getTime();
    if ( ( currentTime - DuAEF.DuAE.Project.lastExpressionCacheUpdateTime > 60000 ) || DuAEF.DuAE.Project.expressionCache.length == 0) {
        DuAEF.DuAE.Project.updateExpressionCache();
        DuAEF.DuAE.Project.suspendCacheUpdates = true;
        cacheSuspended = true;
    }

    //the regexps we need 
    var regExp = '';
    var itemNameRegEx = DuAEF.DuJS.RegExp.escapeRegExp(item.name);
    if (item instanceof CompItem ) regExp = new RegExp("comp\\s*\\(\\s*(\"|')" + itemNameRegEx + "\\1\\s*\\)");
    else regExp = new RegExp("footage\\s*\\(\\s*(\"|')" + itemNameRegEx + "\\1\\s*\\)");

    //check for expressions using this item
    for (var i = 0, num = DuAEF.DuAE.Project.expressionCache.length; i < num; i++)
    {
        var exp = DuAEF.DuAE.Project.expressionCache[i];
        if ( regExp.test(exp.expression) ) usedIn.push( exp.layer.containingComp );
    }

    if ( recursive ) {
        for ( var i = 0, num = usedIn.length; i < num; i++) {
            usedIn = usedIn.concat( DuAEF.DuAE.Item.usedIn( usedIn[i] , true, keepExpressionOnly ) );
        }
    }

    DuAEF.DuJS.Array.removeDuplicates(usedIn, DuAEF.DuAE.Item.compareItems);

    if (cacheSuspended) DuAEF.DuAE.Project.suspendCacheUpdates = false;

    return usedIn;
}

/**
 * Checks if this item source is an image sequence
 * @param {FootageItem} item The item
 * @return {boolean} true if the source is an image sequence
 */
DuAEF.DuAE.Item.isImageSequence = function (item) {
    if (!(item instanceof FootageItem)) return false;

    //check if it's still
    if (item.mainSource.isStill) return false;

    //check if it's a video 
    var extension = DuAEF.DuJS.Fs.getExtension(item.file);
    extension = extension.toLowerCase();

    return DuAEF.DuJS.Array.indexOf( DuAEF.DuAE.Item.stillFormats, extension ) >= 0;

}// ==================== |-------------| ====================
// ==================== | DuAECompLib | ====================
// ==================== |-------------| ====================

/**
 * After Effects composition methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.Comp = {};

//caches
//this must be set to true during work on the cache to prevent it from updating
DuAEF.DuAE.Comp.suspendCacheUpdates = false;

// the expression cache is an array of PropertyExpression
DuAEF.DuAE.Comp.expressionCache = [];
DuAEF.DuAE.Comp.lastExpressionCacheUpdateTime = 0;

/**
 * Updates the cache of the expressions used by Duik to speed up batch process of expressions in the whole project.<br />
 * It's automatically run when needed if it's not been updated in a long time (1 mn) or if it's empty
 * @param {CompItem} [comp=DuAEF.DuAE.Project.getActiveComp()] The comp with expressions to cache
 * @param {boolean} [selectedLayers=false] Set to true to cache only selected layers.
 */
DuAEF.DuAE.Comp.updateExpressionCache = function ( comp, selectedLayers ) {
    if ( DuAEF.DuAE.Comp.suspendCacheUpdates ) return;

    comp = def(comp, DuAEF.DuAE.Project.getActiveComp());
    if (!comp) return;
    selectedLayers = def (selectedLayers, false);

    //clear cache
    DuAEF.DuAE.Comp.expressionCache = [];

    var layers = [];
    if (selectedLayers) layers = comp.selectedLayers;
    else layers = comp.layers;

    var it = new Iterator(layers);
    it.do(function(layer) {
        DuAEF.DuAE.Property.addToExpressionCache( layer, true );
    });

    DuAEF.DuAE.Comp.lastExpressionCacheUpdateTime = new Date().getTime();
}

/**
 * Replaces text in Expressions
 * @param {string} oldString - The string to replace
 * @param {string} newString - The new string
 * @param {CompItem} [comp=DuAEF.DuAE.Project.getActiveComp()] The comp with expressions to cache
 * @param {boolean} [caseSensitive=true] - Wether the search has to be case sensitive
 * @param {boolean} [selectedLayers=false] Set to true to cache only selected layers.
 */
DuAEF.DuAE.Comp.replaceInExpressions = function ( oldString, newString, comp, caseSensitive, selectedLayers ) {
    comp = def(comp, DuAEF.DuAE.Project.getActiveComp());
    if (!comp) return;
    caseSensitive = def (caseSensitive, true);
    selectedLayers = def (selectedLayers, false);

    //update expression cache before searching
    DuAEF.DuAE.Comp.updateExpressionCache( comp, selectedLayers );

    var re = new RegExp( DuAEF.DuJS.RegExp.escapeRegExp(oldString), caseSensitive ? 'g' : 'gi');

    //search and replace in the cache
    for (var i = 0, num = DuAEF.DuAE.Comp.expressionCache.length; i < num; i++) {
        DuAEF.DuAE.Comp.expressionCache[i].changed = re.test( DuAEF.DuAE.Comp.expressionCache[i].expression );
        if (DuAEF.DuAE.Comp.expressionCache[i].changed) DuAEF.DuAE.Comp.expressionCache[i].expression = DuAEF.DuAE.Comp.expressionCache[i].expression.replace( re, newString );
    }

    //update expressions from cache
    DuAEF.DuAE.Project.updateExpressionsFromCache( DuAEF.DuAE.Comp.expressionCache )
}


/**
 * Makes sure the composition has a unique name, renaming it if needed.
 * @param {CompItem} comp - The composition
 * @return {string} The new name.
 */
DuAEF.DuAE.Comp.setUniqueCompName = function ( comp ) {
    if ( !( comp instanceof CompItem ) ) throw "Cannot set a unique composition name, this is not a composition.";
    //temporarily rename the comp to check for its name
    var newName = comp.name;
    comp.name = '***Duik-temp-name-xxx***';
    comp.name = DuAEF.DuAE.Project.newUniqueCompName( newName, false );
    app.project.autoFixExpressions( newName, comp.name );
    return comp.name;
}

/**
 * Gets the After Effects selected properties in the current comp
 * @param {PropertyType|PropertyValueType|string|function}	 [filter]	- A filter to get only a certain type, or value type, or property name or matchName.<br />
 * A function which take one PropertyBase as argument can be used to filter the properties: the Property will be returned if the function returns true.
 * @param {boolean}	[strict=false]	- If a string filter is provided, wether to search for the exact name/matchName or if it contains the filter.
 * @param {boolean}	[caseSensitive=true]	- If a string filter is provided, and not strict is false, does the search have to be case sensitive?
 * @return {PropertyInfo[]} The selected properties, an empty Array if nothing active or selected
 */
DuAEF.DuAE.Comp.getSelectedProps = function ( filter, strict, caseSensitive ) {
    var props = [];
    var comp = DuAEF.DuAE.Project.getActiveComp();
    if ( !comp ) return props;

    //if no filter, get all using AE native API
    if ( typeof filter === 'undefined' ) {
        var layers = comp.selectedLayers;
        var itLayers = new Iterator( layers );
        itLayers.do( function ( layer ) {
            props = props.concat( layer.selectedProperties );
        } );
    } else {
        var layers = comp.selectedLayers;
        if ( layers.length === 0 ) return props;

        for ( var i = 0; i < layers.length; i++ ) {
            props = props.concat( DuAEF.DuAE.Layer.getSelectedProps( layers[ i ], filter, strict, caseSensitive ) );
        }
    }

    return DuAEF.DuAE.getPropertyInfos( props );
}

/**
 * Gets the selected layers in the current comp
 * @return {Layer[]} The selected layers
 */
DuAEF.DuAE.Comp.getSelectedLayers = function () {
    var comp = DuAEF.DuAE.Project.getActiveComp();
    if ( !comp ) return [];
    return comp.selectedLayers;
}

/**
 * Runs a function on all the selected layers
 * @param {function} method - The function to run on the layers, which takes a layer as its only argument.
 * @param {string} [undoGroupName] - The name of the undoGroup created before the execution. If not provided, there will not be any undoGroup created.
 */
DuAEF.DuAE.Comp.doSelectedLayers = function ( method, undoGroupName ) {
    //get layers
    var layers = DuAEF.DuAE.Comp.unselectLayers();

    // run
    DuAEF.DuAE.Layer.doLayers( layers, method, undoGroupName );

    //reselect
    DuAEF.DuAE.Comp.selectLayers( layers );
}

/**
 * Runs a function on all the layers
 * @param {function} method - The function to run on the layers, which takes a layer as its only argument.
 * @param {string} [undoGroupName] - The name of the undoGroup created before the execution. If not provided, there will not be any undoGroup created.
 * @param {CompItem} [comp] - The comp containing the layers. Will use the current comp if not provided.
 */
DuAEF.DuAE.Comp.doLayers = function ( method, undoGroupName, comp ) {
    if ( typeof comp === 'undefined' ) {
        comp = DuAEF.DuAE.Project.getActiveComp();
    }
    if ( !( comp instanceof CompItem ) ) return;

    //get layers
    var layers = comp.layers;
    if ( layers.length == 0 ) return;

    // run
    DuAEF.DuAE.Layer.doLayers( layers, method, undoGroupName );
}

/**
 * Gets the After Effects animated (with keyframes) properties in the current comp
 * @param {PropertyType|PropertyValueType|string|function}	 [filter]	- A filter to get only a certain type, or value type, or property name or matchName.<br />
 * A function which take one PropertyBase as argument can be used to filter the properties: the Property will be returned if the function returns true.
 * @param {boolean}	[strict=false]	- If a string filter is provided, wether to search for the exact name/matchName or if it contains the filter.
 * @param {boolean}	[caseSensitive=true]	- If a string filter is provided, and not strict is false, does the search have to be case sensitive?
 * @param {boolean}	[selectedLayersOnly=false]	- True to get the properties on the selected layers only
 * @param {CompItem}	[comp=DuAEF.DuAE.Project.getActiveComp]	- The composition
 * @return {PropertyInfo[]} The selected properties, an empty Array if nothing active or selected
 */
DuAEF.DuAE.Comp.getAnimatedProps = function ( filter, strict, caseSensitive, selectedLayersOnly, comp ) {
    var props = [];
    if ( typeof comp === 'undefined' ) comp = DuAEF.DuAE.Project.getActiveComp();
    if ( !comp ) return props;

    if ( typeof selectedLayersOnly === 'undefined' ) selectedLayersOnly = false;


    var layers;
    if ( selectedLayersOnly ) layers = comp.selectedLayers;
    else layers = comp.layers;

    var it = new Iterator( layers );
    it.do( function ( layer ) {
        props = props.concat( DuAEF.DuAE.Property.getAnimatedProps( layer, filter, strict, caseSensitive ) );
    } );

    return props;
}

/**
 * Deselects all properties in the current composition
 */
DuAEF.DuAE.Comp.unselectProperties = function () {
    var comp = DuAEF.DuAE.Project.getActiveComp();
    if ( !comp ) return props;
    var props = comp.selectedProperties;
    for ( var i = 0; i < props.length; i++ ) {
        props[ i ].selected = false;
    }
}

/**
 * Deselects all layers in a composition
 * @param {CompItem} [comp=app.project.activeItem] - The composition
 * @return {Layer[]} The previously selected layers.<br />
 * A custom attribute, Layer.props is added on each layer object which is an array of all previously selected properties as PropertyInfo objects
 */
DuAEF.DuAE.Comp.unselectLayers = function ( comp ) {
    if ( typeof comp === 'undefined' ) comp = DuAEF.DuAE.Project.getActiveComp();
    if ( !comp ) return [];

    var layers = [];

    if ( !comp ) return layers;
    if ( !( comp instanceof CompItem ) ) return layers;

    layers = [];

    while ( comp.selectedLayers.length > 0 ) {
        var layer = comp.selectedLayers[ 0 ];
        layer.props = DuAEF.DuAE.getPropertyInfos( layer.selectedProperties );
        layer.selected = false;
        layers.push( layer );
    }

    return layers;
}

/**
 * Selects the layers
 * @param {Layer[]} layers - The layers
 */
DuAEF.DuAE.Comp.selectLayers = function ( layers ) {
    new Iterator( layers ).do( function ( layer ) {
        if ( layer == undefined ) return;
        if ( layer == null ) return;
        layer.selected = true;
    } );
}

/**
 * Generates a new unique name for a layer
 * @param {string} newName	- The wanted new name
 * @param {CompItem} comp 	- The comp
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuAE.Comp.newUniqueLayerName = function ( newName, comp, increment ) {
    if ( increment == undefined ) increment = true;
    var layerNames = [];
    for ( var i = 1; i <= comp.layers.length; i++ ) {
        layerNames.push( comp.layer( i ).name );
    }
    return DuAEF.DuJS.String.generateUnique( newName, layerNames, increment );
}

/**
 * Generates a new unique name for a marker for this comp
 * @param {string} newName	- The wanted new name
 * @param {CompItem} comp 	- The comp
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuAE.Comp.newUniqueMarkerName = function ( newName, comp, increment ) {
    if ( increment == undefined ) increment = true;
    var markerNames = [];
    for ( var i = 1, num = comp.markerProperty.numKeys; i <= num; i++ ) {
        markerNames.push( comp.markerProperty.keyValue( i ).comment );
    }
    return DuAEF.DuJS.String.generateUnique( newName, markerNames, increment );
}

/**
 * Creates a new Adjustment layer
 * @param {CompItem} comp 	- The comp
 * @return {AVLayer}	The layer.
 */
DuAEF.DuAE.Comp.addAdjustmentLayer = function ( comp ) {
    if ( comp == undefined ) return null;
    var layer = comp.layers.addSolid( [ 1, 1, 1 ], DuAEF.DuAE.Comp.newUniqueLayerName( "Adjustment Layer", comp ), comp.width, comp.height, comp.pixelAspect, comp.duration );
    layer.adjustmentLayer = true;
    return layer;
}

/**
 * Links all orphan layers in the comp to a layer
 * @param {Layer} layer - The parent layer
 * @param {bool} [includeLockedLayers=false] - True to parent layers even if they are locked
 */
DuAEF.DuAE.Comp.parentAllOrphans = function ( layer, includeLockedLayers ) {
    if ( typeof includeLockedLayers === "undefined" ) includeLockedLayers = false;
    var comp = layer.containingComp;
    for ( var i = 1, num = comp.numLayers; i <= num; i++ ) {
        if ( i == layer.index ) continue;
        var l = comp.layer( i );
        if ( DuAEF.DuAE.Layer.getRelation( l, layer ) < 0 ) continue;
        var locked = l.locked;
        if ( locked && includeLockedLayers ) l.locked = false;
        if ( !locked && l.parent == null ) l.parent = layer;
        if ( locked && includeLockedLayers ) l.locked = locked;
    }
}

/**
 * Gets all precomps and parent comps of the composition
 * @param {CompItem} [comp=DuAEF.DuAE.Project.getActiveComp()] - The composition
 * @param {bool} [recursive=false] - True to search to more than one level of precomposition
 * @return {CompItem[]} The related compositons
 */
DuAEF.DuAE.Comp.getRelatives = function ( comp, recursive ) {
    if ( typeof recursive === 'undefined' ) recursive = false;
    if ( typeof comp === 'undefined' ) comp = DuAEF.DuAE.Project.getActiveComp();
    if ( !comp ) return [];
    //get precomps
    var precomps = DuAEF.DuAE.Comp.getPrecomps( comp, recursive );
    //get parent
    var parentComps = [];
    if ( recursive ) {
        parentComps = DuAEF.DuAE.Comp.getParentComps( comp );
    } else {
        parentComps = comp.usedIn;
    }

    return precomps.concat( parentComps );
}

/**
 * Gets all the precomposition found in the comp.
 * @param {CompItem} comp - The composition
 * @param {bool} [recursive=false] - True to get nested compositions
 * @return {CompItem[]} The precompositions
 */
DuAEF.DuAE.Comp.getPrecomps = function ( comp, recursive ) {
    if ( typeof recursive === 'undefined' ) recursive = true;
    var precomps = [];
    var it = new Iterator( comp.layers );
    it.do( function ( layer ) {
        var precomp = layer.source;
        if ( precomp instanceof CompItem ) {
            precomps.push( precomp );
            if ( recursive ) precomps = precomps.concat( DuAEF.DuAE.Comp.getPrecomps( precomp ) );
        }
    } );
    //remove duplicates
    DuAEF.DuJS.Array.removeDuplicates( precomps );
    return precomps;
}

/**
 * Recursively gets all compositions where this item is used
 * @param {AVItem} item - The item
 * @return {CompItem[]} The compositions
 */
DuAEF.DuAE.Comp.getParentComps = function ( item ) {
    var parentComps = item.usedIn;
    new Iterator( parentComps ).do( function ( parentComp ) {
        parentComps = parentComps.concat( DuAEF.DuAE.Comp.getParentComps( parentComp ) );
    } );
    DuAEF.DuJS.Array.removeDuplicates( parentComps );
    return parentComps;
}

/**
 * Gets all the layers with audio in the composition
 * @param {CompItem}	 comp	The composition where the audio will be searched
 * @param {bool}	[audioActiveOnly=false]	 If true, does not get muted layers.
 * @return {AVLayer[]} An array of AVLayer containing the audio layers
 */
DuAEF.DuAE.Comp.getAudioLayers = function ( comp, audioActiveOnly ) {
    if ( typeof audioActiveOnly === 'undefined' ) audioActiveOnly = false;
    var layers = comp.layers;
    var audioLayers = [];
    var it = new Iterator( layers );
    it.do( function ( layer ) {
        if ( layer.hasAudio ) {
            if ( audioActiveOnly && layer.audioEnabled || !audioActiveOnly ) {
                audioLayers.push( layer );
            }
        }
    } );

    return audioLayers;
}
// ==================== |--------------| ====================
// ==================== | DuAELayerLib | ====================
// ==================== |--------------| ====================

/**
 * After Effects layer methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.Layer = {};

/**
 * Runs a function on all the layers
 * @param {function} method - The function to run on the layers, which takes a layer as its only argument.
 * @param {string} [undoGroupName] - The name of the undoGroup created before the execution. If not provided, there will not be any undoGroup created.
 */
DuAEF.DuAE.Layer.doLayers = function ( layers, method, undoGroupName ) {
    if ( typeof undoGroupName === 'undefined' ) undoGroupName = "";
    // run
    if ( undoGroupName != "" ) DuAEF.DuAE.App.beginUndoGroup( undoGroupName );
    new Iterator( layers ).do( method );
    if ( undoGroupName != "" ) DuAEF.DuAE.App.endUndoGroup();
}

/**
 * Generates a new unique name for an effect
 * @param {string} newName	- The wanted new name
 * @param {Layer} layer 	- The layer
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuAE.Layer.newUniqueEffectName = function ( newName, layer, increment ) {
    if ( !layer ) throw new Error( "Needs a layer to generate a new unique effect name", "DuAECOreLib", 645 );
    if ( increment == undefined ) increment = true;
    if ( newName == undefined ) return "";
    if ( newName == "" ) return "";
    var effectNames = [];
    for ( var i = 1; i <= layer.effect.numProperties; i++ ) {
        effectNames.push( layer.effect( i ).name );
    }
    return DuAEF.DuJS.String.generateUnique( newName, effectNames, increment );
}

/**
 * Generates a new unique name for a marker for this comp
 * @param {string} newName	- The wanted new name
 * @param {Layer} layer 	- The comp
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuAE.Layer.newUniqueMarkerName = function ( newName, layer, increment ) {
    if ( increment == undefined ) increment = true;
    var markerNames = [];
    for ( var i = 1, num = layer.property( 'ADBE Marker' ).numKeys; i <= num; i++ ) {
        markerNames.push( layer.property( 'ADBE Marker' ).keyValue( i ).comment );
    }
    return DuAEF.DuJS.String.generateUnique( newName, markerNames, increment );
}

/**
 * Gets the After Effects selected properties in the layer
 * @param {Layer}	layer	- The layer
 * @param {PropertyType|PropertyValueType|string|function}	 [filter]	- A filter to get only a certain type, or value type, or property name or matchName.<br />
 * A function which take one PropertyBase as argument can be used to filter the properties: the Property will be returned if the function returns true.
 * @param {boolean}	[strict=false]	- If a string filter is provided, wether to search for the exact name/matchName or if it contains the filter.
 * @param {boolean}	[caseSensitive=true]	- If a string filter is provided, and not strict is false, does the search have to be case sensitive?
 * @return {PropertyBase[]} The selected properties, an empty Array if nothing active or selected
 */
DuAEF.DuAE.Layer.getSelectedProps = function ( layer, filter, strict, caseSensitive ) {
    if ( typeof strict === 'undefined' ) strict = false;
    if ( typeof caseSensitive === 'undefined' ) caseSensitive = true;

    var props = [];

    if ( !caseSensitive && typeof filter === "string" ) filter = filter.toLowerCase();

    var selectedProps = layer.selectedProperties;
    if ( typeof filter === 'undefined' ) {
        props = props.concat( selectedProps );
    } else {
        for ( var j = 0; j < selectedProps.length; j++ ) {
            var prop = selectedProps[ j ];

            var name = prop.name;
            var matchName = prop.matchName;
            if ( !caseSensitive ) {
                name = name.toLowerCase();
                matchName = matchName.toLowerCase();
            }

            if ( strict && name === filter ) {
                props.push( prop );
            } else if ( strict && matchName === filter ) {
                props.push( prop );
            } else if ( typeof filter === "string" ) {
                if ( name.indexOf( filter ) >= 0 ) props.push( prop );
                else if ( matchName.indexOf( filter ) >= 0 ) props.push( prop );
            } else if ( prop.propertyType == PropertyType.PROPERTY ) {
                if ( prop.propertyValueType == filter ) props.push( prop );
            } else if ( props.length == 0 && filter == PropertyValueType.SHAPE ) {
                if ( matchName == 'ADBE Mask Atom' ) props.push( prop.property( 'ADBE Mask Shape' ) );
                else if ( matchName == 'ADBE Vector Shape - Group' ) props.push( prop.property( 'ADBE Vector Shape' ) );
            } else if ( prop.propertyType == filter ) {
                props.push( prop );
            } else if ( typeof filter === "function" ) {
                if ( filter( prop ) ) props.push( prop );
            };
        }
    }
    return DuAEF.DuAE.getPropertyInfos( props );
}

/**
 * Gets all animations on the layer in the whole timeline or in the time range<br />
 * The first KeyFrame._time will be adjusted relatively to the start of the time range (if provided) instead of the startTime of the composition.
 * @param {Layer}	layer	- The layer.
 * @param {boolean}	[selected=false]	- true to get only selected keyframes.
 * @param {float[]}	[timeRange]	- The time range, an array of two time values, in seconds.
 * @return {LayerAnim}	The animation.
 */
DuAEF.DuAE.Layer.getAnim = function ( layer, selected, timeRange ) {
    var anim = new LayerAnim();
    anim._name = layer.name;
    anim._index = layer.index;
    anim.anims = [];
    for ( var propIndex = 1; propIndex <= layer.numProperties; propIndex++ ) {
        var prop = layer.property( propIndex );
        if ( prop.matchName == 'ADBE Marker' ) continue;

        var subAnim = DuAEF.DuAE.Property.getAnim( prop, selected, timeRange );
        if ( subAnim != null ) {
            if ( anim.startTime == null ) anim.startTime = subAnim.startTime;
            else if ( anim.startTime > subAnim.startTime ) anim.startTime = subAnim.startTime;
            if ( anim.endTime == null ) anim.endTime = subAnim.endTime;
            else if ( anim.endTime > subAnim.endTime ) anim.endTime = subAnim.endTimeendTime;
            anim.anims.push( subAnim );
        }

    }
    return anim;
}

/**
 * Gets all animations on the layers in the whole timeline or in the time range<br />
 * The first KeyFrame._time will be adjusted relatively to the start of the time range (if provided) instead of the startTime of the composition.
 * @param {Layer[]|LayerCollection}	layers	- The layers.
 * @param {boolean}	[selected=false]	- true to get only selected keyframes.
 * @param {float[]}	[timeRange]	- The time range, an array of two time values, in seconds.
 * @return {LayerAnim[]}	The animations.
 */
DuAEF.DuAE.Layer.getAnims = function ( layers, selected, timeRange ) {
    var anims = [];
    new Iterator( layers ).do( function ( layer ) {
        anims.push( DuAEF.DuAE.Layer.getAnim( layer, selected, timeRange ) );
    } );
    return anims;
}

/**
 * Sets the property animation on the property
 * @param {Layer}	layer	- The layer.
 * @param {LayerAnim} anims	- The animation
 * @param {float}	[time=comp.time]	- The time where to begin the animation
 * @param {boolean}	[ignoreName=false]	- true to set the anim even if name of the property do not match the name of the animation.<br />
 * This way, only the type of property (i.e. matchName) is checked.
 * @param {boolean}	[setExpression=false]	- Set the expression on the property
 * @param {boolean}	[onlyKeyframes=true]	- If false, the value of properties without keyframes will be set too.
 * @param {boolean}	[replace=false]	- true to remove any existing keyframe on the properties before adding new keyframes
 * @param {string[]}	[propertyWhiteList]	- A list of matchNames used as a white list for properties to set anims.<br />
 * Can be the matchName of a propertyGroup to set all the subproperties.
 * @param {boolean}	[offset=false]	- true to offset the current value, instead of replacing it
 * @param {boolean}	[reverse=false]	- true to reverse the keyframes (in time)
 * @return {boolean} true if the anim was actually set.
 */
DuAEF.DuAE.Layer.setAnim = function ( layer, anim, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, reverse ) {
    if ( typeof time === 'undefined' ) time = layer.containingComp.time;
    if ( typeof ignoreName === 'undefined' ) ignoreName = false;
    if ( typeof setExpression === 'undefined' ) setExpression = false;
    if ( typeof onlyKeyframes === 'undefined' ) onlyKeyframes = false;
    if ( typeof replace === 'undefined' ) replace = false;
    if ( typeof offset === 'undefined' ) offset = false;

    if ( reverse ) DuAEF.DuAE.Layer.reverseAnims( anim );

    for ( var i = 0; i < anim.anims.length; i++ ) {
        var subAnim = anim.anims[ i ];
        for ( var propIndex = 1; propIndex <= layer.numProperties; propIndex++ ) {
            var subProp = layer.property( propIndex );
            if ( subProp == null ) continue;
            if ( subProp.matchName == subAnim._matchName && subProp.matchName != 'ADBE Marker' ) {
                var ok = DuAEF.DuAE.Property.setGroupAnim( subProp, subAnim, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, reverse );
                if ( ok ) break;
            }
        }
    }
}

/**
 * Sets the animations on the layers.<br />
 * If you need to set only on the same layers (same index, same name), use {@link DuAEF.DuAE.Layer.setAnims}.
 * @param {Layer[]|LayerCollection}	layers	- The layers.<br />
 * If there are more layers than animations, the layers array will be truncated.
 * @param {LayerAnim[]} anims	- The layer animations.<br />
 * If there are more animations than layers, the animations array will be truncated.
 * @param {float}	[time=comp.time]	- The time where to begin the animation
 * @param {boolean}	[ignoreName=false]	- true to set the anim even if name of the property do not match the name animation.<br />
 * This way, only the type of property (i.e. matchName) is checked.
 * @param {boolean}	[setExpression=false]	- Set the expression on the property
 * @param {boolean}	[onlyKeyframes=true]	- If false, the value of properties without keyframes will be set too.
 * @param {boolean}	[replace=false]	- true to remove any existing keyframe on the properties before adding new keyframes
 * @param {string[]}	[whiteList]	- A list of matchNames used as a white list for properties to set anims.<br />
 * Can be the matchName of a propertyGroup to set all the subproperties.
 * @param {boolean}	[offset=false]	- true to offset the current value, instead of replacing it
 * @param {boolean}	[reverse=false]	- true to reverse the keyframes (in time)<br />
 * Note: the remaining animations which are returned will already be reversed, do not set this to true again if you plan to set them later.
 */
DuAEF.DuAE.Layer.setAllAnims = function ( layers, anims, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, reverse ) {
    layers = DuAEF.DuAE.convertCollectionToArray( layers );
    var num = anims.length;
    if ( num > layers.length ) num = layers.length;

    if ( reverse ) DuAEF.DuAE.Layer.reverseAnims( anims );

    for ( var i = 0; i < num; i++ ) {
        var layer = layers[ i ];
        if ( layer ) DuAEF.DuAE.Layer.setAnim( layer, anims[ i ], time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, false );
    }
}

/**
 * Sets the animations on the corresponding layers.<br />
 * The animation will be set only on layers with the same name and index.<br />
 * To set all animations on all layers, not checking their names or indices, use {@link DuAEF.DuAE.Layer.setAllAnims}.
 * @param {Layer[]|LayerCollection}	layers	- The layers.
 * @param {LayerAnim[]} anims	- The layer animations
 * @param {float}	[time=comp.time]	- The time where to begin the animation
 * @param {boolean}	[ignoreName=false]	- true to set the anim even if name of the property do not match the name animation.<br />
 * This way, only the type of property (i.e. matchName) is checked.
 * @param {boolean}	[setExpression=false]	- Set the expression on the property
 * @param {boolean}	[onlyKeyframes=true]	- If false, the value of properties without keyframes will be set too.
 * @param {boolean}	[replace=false]	- true to remove any existing keyframe on the properties before adding new keyframes
 * @param {string[]}	[whiteList]	- A list of matchNames used as a white list for properties to set anims.<br />
 * Can be the matchName of a propertyGroup to set all the subproperties.
 * @param {boolean}	[offset=false]	- true to offset the current value, instead of replacing it
 * @param {boolean}	[reverse=false]	- true to reverse the keyframes (in time)<br />
 * Note: the remaining animations which are returned will already be reversed, do not set this to true again if you plan to set them later.
 * @return {LayerAnim[]} The animations which were not set (no corresponding layers)
 */
DuAEF.DuAE.Layer.setAnims = function ( layers, anims, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, reverse ) {
    //clone the array
    var remaining = anims.slice();

    if ( reverse ) DuAEF.DuAE.Layer.reverseAnims( anims );

    //for each layeranim, search for the layer and apply anim
    for ( var i = remaining.length - 1; i >= 0; i-- ) {
        var anim = remaining[ i ];
        var it = new Iterator( layers );
        var ok = false;
        while ( layer = it.next() ) {
            if ( layer.name == anim._name && layer.index == anim._index ) {
                DuAEF.DuAE.Layer.setAnim( layer, anim, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, false );
                ok = true;
                break;
            }
        }
        if ( ok ) remaining.pop();
    }

    return remaining;
}

/**
 * Reverses the times of the keyframes to reverse the animation
 * @param {LayerAnim[]|LayerAnim} anims The animation
 */
DuAEF.DuAE.Layer.reverseAnims = function ( anims ) {
    if ( anims instanceof LayerAnim ) anims = [ anims ];

    var it = new Iterator( anims );

    //get times
    var startTime = null;
    var endTime = null;
    it.do( function ( anim ) {
        if ( startTime == null ) startTime = anim.startTime;
        else if ( startTime > anim.startTime ) startTime = anim.startTime;
        if ( endTime == null ) endTime = anim.endTime;
        else if ( endTime > anim.endTime ) endTime = anim.endTime;
    } );

    var duration = endTime - startTime;


    //recursive function to reverse keyframes in anim
    function reverse( anim ) {
        if ( anim.type == 'anim' ) {
            //reverse the array
            anim.keys = anim.keys.reverse();
            //set the new times
            for ( var i = 0, num = anim.keys.length; i < num; i++ ) {
                var ratio = 1 - ( ( anim.keys[ i ]._time - startTime ) / duration );
                anim.keys[ i ]._time = ratio * duration + startTime;
                var sV = anim.endValue;
                anim.endValue = anim.startValue;
                anim.startValue = sV;
            }
        } else if ( anim.anims ) {
            for ( var i = 0, num = anim.anims.length; i < num; i++ ) {
                reverse( anim.anims[ i ] );
            }
        }
    }

    //reverse keyframes and times
    it.do( reverse );
}

/**
 * Gets the children of a layer
 * @param {Layer}	layer	- The layer.
 * @return {Layer[]} All the children of the layer
 */
DuAEF.DuAE.Layer.getChildren = function ( layer ) {
    var comp = layer.containingComp;
    var children = [];
    for ( var i = 1; i <= comp.layers.length; i++ ) {
        var l = comp.layer( i );
        if ( l.index == layer.index ) continue;
        if ( l.parent == null ) continue;
        if ( l.parent.index == layer.index ) children.push( l );
    }
    return children;
}

/**
 * Checks if a layer is a descendant of another layer
 * @param {Layer} layer1 - The first layer
 * @param {Layer} layer2 - The second layer
 * @return {int|null} the degree of relation. 0 if layer1 is not a relative of layer2,<br />
 * negative if layer2 is a descendant of layer1, positive if layer2 is an ancestor.<br />
 * null if the two layers are not in the same composition or if they are the same layer.
 */
DuAEF.DuAE.Layer.getRelation = function ( layer1, layer2 ) {
    var comp1 = layer1.containingComp;
    var comp2 = layer2.containingComp;
    if ( comp1 !== comp2 ) return null;
    if ( layer1.index == layer2.index ) return null;
    if ( layer1.parent == null && layer2.parent == null ) return 0;
    //check
    var degree = 0;
    var parent = layer1.parent;
    while ( parent ) {
        degree++;
        if ( layer2.index == parent.index ) return degree;
        parent = parent.parent;
    }
    var parent = layer2.parent;
    degree = 0;
    while ( parent ) {
        degree++;
        if ( layer1.index == parent.index ) return -degree;
        parent = parent.parent;
    }
    return 0;
}

/**
 * Measures the distance between two layers
 * @param {Layer} layer1 - The first layer
 * @param {Layer} layer2 - The second layer
 * @return {int} The distance (in pixels)
 */
DuAEF.DuAE.Layer.getDistance = function ( layer1, layer2 ) {
    var O = DuAEF.DuAE.Layer.getWorldPos( layer1 );
    var A = DuAEF.DuAE.Layer.getWorldPos( layer2 );
    var OA = DuAEF.DuJS.Math.getLength( O, A );

    return Math.round( OA );
}

/**
 * Gets the world coordinates of the point of a layer
 * @param {Layer} layer - The layer
 * @param {float[]} [point=layer.transform.anchorPoint.value] - the point
 * @return {float[]} The world coordinates of the layer
 */
DuAEF.DuAE.Layer.getWorldPos = function ( layer, point ) {
    if ( layer instanceof CameraLayer || layer instanceof LightLayer || layer.threeDLayer ) {
        var parent = layer.parent;
        layer.parent = null;
        var pos = layer.transform.position.value;
        layer.parent = parent;
        return pos;
    }

    var matrix = DuAEF.DuAE.Layer.getTransformMatrix( layer );
    if ( typeof point === 'undefined' ) {
        if ( layer.transform.anchorPoint ) point = layer.transform.anchorPoint.value;
    }

    return matrix.applyToPoint( point );
}

/**
 * Adds an animation preset on the layer.<br />
 * Be careful as layer selection will be kept but not properties selection,<br />
 * and this can result in an "invalid object" if referencing a property.
 * @param {Layer} layer - The layer
 * @param {File} preset - The preset file
 * @param {string} matchName - The pseudo Effect matchName
 * @return {PropertyGroup|null} The effect corresponding to matchName or null if anything went wrong
 */
DuAEF.DuAE.Layer.applyPreset = function ( layer, preset, matchName ) {
    if ( typeof layer === 'undefined' ) return null;
    if ( typeof preset === 'undefined' ) return null;
    if ( typeof matchName === 'undefined' ) matchName = '';
    if ( !preset.exists ) throw new Error( "The pseudo effect file does not exist" );

    //remove layer selection
    var comp = layer.containingComp;
    var selection = [];
    for ( var i = 1, num = comp.numLayers; i <= num; i++ ) {
        var l = comp.layer( i );
        selection.push( l.selected );
        l.selected = false;
    }

    layer.selected = true;
    layer.applyPreset( preset );

    //applying a presets gets out of progress mode
    if (DuAEF.DuAE.Project.progressMode) DuAEF.DuAE.Project.setProgressMode( true );

    var effect = null;
    if ( matchName != '' ) effect = layer.property( "ADBE Effect Parade" )( matchName );

    //restore selection
    for ( var i = 1, num = comp.numLayers; i <= num; i++ ) {
        var l = comp.layer( i );
        l.selected = selection[ i - 1 ];
    }

    return effect;
}

/**
 * This method is a workaround to AE API method layer.applyPreset to work like addProperty when adding pseudoEffects
 * @param {Layer} layer - The layer
 * @param {File} preset - The preset file
 * @param {string} matchName - The pseudo Effect matchName.
 * @param {string} [name] - The name to set on the effect
 * @return {PropertyGroup|null} The effect or null if anything went wrong
 */
DuAEF.DuAE.Layer.addPseudoEffect = function ( layer, preset, matchName, name ) {
    var typeofPreset = DuAEF.DuJS.typeof( preset );
    if ( typeofPreset != 'File' ) throw new Error( "DuAEF.DuAE.Layer.addPseudoEffect( layer, preset, matchName, name): error. preset has to be a File object, got a " + typeofPreset + "." );
    if ( !preset.exists ) throw new Error( "DuAEF.DuAE.Layer.addPseudoEffect( layer, preset, matchName, name): error. The pseudo effect file does not exist" );
    if ( layer == undefined ) return null;
    if ( preset == undefined ) return null;
    if ( matchName == undefined ) return null;

    var effects = layer( "ADBE Effect Parade" );
    //add the preset to a temp comp if not available as an effect
    if ( !effects.canAddProperty( matchName ) || DuAEF.debug ) {
        //create comp
        var comp = app.project.items.addComp( "DuAEF Temp", 10, 10, 1, 1, 24 );
        //add null
        var n = comp.layers.addNull();
        //apply preset
        n.applyPreset( preset );
        //remove all
        var nullSource = n.source;
        n.remove();
        nullSource.remove();
        comp.remove();
    }

    if ( !effects.canAddProperty( matchName ) ) {
        throw new Error( "Invalid pseudo effect file or match name" );
    }

    //add the pseudoEffect as a property
    var newEffectName = "";
    newEffectName = DuAEF.DuAE.Layer.newUniqueEffectName( name, layer );
    var effect = effects.addProperty( matchName );
    if ( newEffectName != "" ) effect.name = newEffectName;
    return effect;
}

/**
 * Checks if the layers have some selected keyframes
 * @param {Layer[]|LayerCollection} layers - The layers
 * @return {boolean} true if the layers have at least one selected keyframe
 */
DuAEF.DuAE.Layer.haveSelectedKeys = function ( layers ) {
    var it = new Iterator( layers );
    if ( it.length == 0 ) return;
    while ( layer = it.next() ) {
        if ( DuAEF.DuAE.Property.hasSelectedKeys( layer ) ) return true;
    }
    return false;
}

/**
 * Gets the time of the first keyFrame
 * @param {Layer[]|LayerCollection} layer - The layer
 * @param {boolean} selected - true to check selected keyframes only
 * @return {float|null} The keyframe time or null if there are no keyframe
 */
DuAEF.DuAE.Layer.firstKeyFrameTime = function ( layers, selected ) {
    var it = new Iterator( layers );
    var time = null;
    for ( var i = it.min; i <= it.max; i++ ) {
        var test = DuAEF.DuAE.Property.firstKeyFrameTime( layers[ i ], selected );
        if ( time == null ) time = test;
        else if ( test != null ) {
            if ( time > test ) time = test;
        }
    }
    return time;
}

/**
 * Sort the layers by their parenting (root at first index 0)
 * @param {Layer[]|Collection} layers - The layers to sort
 * @return {Layer[]} The sorted array
 */
DuAEF.DuAE.Layer.sortByParent = function ( layers ) {
    var sortedLayers = [];
    var layersToSort = DuAEF.DuAE.convertCollectionToArray( layers );

    //add layers with a parent outside
    //those with a parent outside of the selection
    for ( var i = layersToSort.length - 1; i >= 0; i-- ) {
        var l = layersToSort[ i ];
        var parent = l.parent;
        if ( parent == null ) continue;
        var isParentOutside = true;
        for ( var j = 0; j < layersToSort.length; j++ ) {
            if ( parent.index == layersToSort[ j ].index ) {
                isParentOutside = false;
                break;
            }
        }
        if ( isParentOutside ) {
            sortedLayers.push( l );
            layersToSort.splice( i, 1 );
        }
    }

    //add layers with no parents
    for ( var i = layersToSort.length - 1; i >= 0; i-- ) {
        var l = layersToSort[ i ];
        if ( l.parent == null ) {
            sortedLayers.push( l );
            layersToSort.splice( i, 1 );
        }
    }

    //sort the rest
    while ( layersToSort.length > 0 ) {
        for ( var i = layersToSort.length - 1; i >= 0; i-- ) {
            var l = layersToSort[ i ];
            for ( var j = 0; j < sortedLayers.length; j++ ) {
                var sL = sortedLayers[ j ];
                if ( l.parent.index == sL.index ) {
                    sortedLayers.push( l );
                    layersToSort.splice( i, 1 );
                    break;
                }
            }
        }
    }
    return sortedLayers;

}

/**
 * Sort the layers by their indices. Returns a new Array, the original array or collection is not changed.
 * @param {Layer[]|LayerCollection} layers - The layers to sort
 * @return {Layer[]} The sorted array
 */
DuAEF.DuAE.Layer.sortByIndex = function ( layers ) {
    var sortedLayers = DuAEF.DuAE.convertCollectionToArray( layers );

    function compareLayerIndices( lay1, lay2 ) {
        return lay1.index - lay2.index;
    }
    return sortedLayers.sort( compareLayerIndices );
}

/**
 * Parents all the layers together beginning by the end of the array
 * @param {Layer[]} layers - The layers to parent
 */
DuAEF.DuAE.Layer.parentChain = function ( layers ) {
    //unparent  all but the first
    var layersUnparent = [];
    for ( var i = 1; i < layers.length; i++ ) {
        layersUnparent.push( layers[ i ] );
    }
    DuAEF.DuAE.Layer.unparent( layersUnparent );

    for ( var i = layers.length - 1; i >= 1; i-- ) {
        layers[ i ].parent = layers[ i - 1 ];
    }
}

/**
 * Un-parents all the layers
 * @param {Layer[]} layers - The layers
 */
DuAEF.DuAE.Layer.unparent = function ( layers ) {
    for ( var i = layers.length - 1; i >= 0; i-- ) {
        layers[ i ].parent = null;
    }
}

/**
 * (Un)parent the children of the layer.< br/>
 * When children are unparented, an effect is added and the name of the layer is changed to show the "edit mode" is enabled.<br />
 * When toggled again, the effect is removed, and the name is restored.
 * @param {Layer} layer - The layer to toggle.
 */
DuAEF.DuAE.Layer.toggleEditMode = function ( layer ) {
    //a reg exp to retrieve the list of children
    var reChildren = / \|Duik::ChildrenLayers:([\d,]*)\|/;

    var setEditMode = !reChildren.test( layer.comment );

    var comp = layer.containingComp;

    if ( setEditMode ) {
        var children = DuAEF.DuAE.Layer.getChildren( layer );
        layer.comment = layer.comment + ' |Duik::ChildrenLayers:';
        for ( var j = 0, num = children.length; j < num; j++ ) {
            var child = children[ j ];
            layer.comment = layer.comment + child.index;
            if ( j < children.length - 1 ) layer.comment = layer.comment + ',';
            child.parent = null;
        }
        layer.comment = layer.comment + "|";
        layer.name = '=EDIT= ' + layer.name;
        var tint = layer.property( 'ADBE Effect Parade' ).addProperty( 'ADBE Tint' );
        tint.name = 'DUIK EDIT MODE';
        tint( 1 ).setValue( [ 0.5, 0, 0, 1 ] );
        tint( 2 ).setValue( [ 1, 0, 0, 1 ] );
    } else {
        var match = reChildren.exec( layer.comment );
        if ( match.length == 2 ) {
            var indices = match[ 1 ].split( ',' );
            //reparent
            if ( indices.length > 0 ) {
                for ( var i = 0; i < indices.length; i++ ) {
                    var index = parseInt( indices[ i ] );
                    if ( isNaN( index ) ) continue;
                    comp.layer( index ).parent = layer;
                }
            }
            //remove comment
            layer.comment = layer.comment.replace( match[ 0 ], '' );
            layer.name = layer.name.replace( '=EDIT= ', '' );
            var tint = layer.property( 'ADBE Effect Parade' ).property( 'ADBE Tint' );
            if ( tint )
                if ( tint.name == 'DUIK EDIT MODE' ) tint.remove();
        }
    }
}

/**
 * Creates a sequence with the layers, but using opacities.
 * This enables more possibilities to rig them, like with the Connector
 * @param {Layer[]|LayerCollection} layers - The layers
 * @param {string} [expr] - An expression to add to the opacity of the layers
 */
DuAEF.DuAE.Layer.sequence = function ( layers, expr ) {
    if ( layers.length == 0 ) return;
    if ( expr == undefined ) expr = '';
    var comp = layers[ 0 ].containingComp;
    var it = new Iterator( layers );
    it.do( function ( layer ) {
        while ( layer.transform.opacity.numKeys > 0 ) {
            layer.transform.opacity.removeKey( layer.transform.opacity.numKeys );
        }
        var i = it.current;
        var t = i * comp.frameDuration;
        var endTime = ( layers.length - 1 ) * comp.frameDuration;
        layer.transform.opacity.setValueAtTime( 0, 0 );
        layer.transform.opacity.setValueAtTime( endTime, 0 );
        layer.transform.opacity.setValueAtTime( t, 100 );
        if ( i < layers.length - 1 ) layer.transform.opacity.setValueAtTime( t + comp.frameDuration, 0 );
        for ( var keyIndex = 1; keyIndex <= layer.transform.opacity.numKeys; keyIndex++ ) {
            layer.transform.opacity.setInterpolationTypeAtKey( keyIndex, KeyframeInterpolationType.HOLD, KeyframeInterpolationType.HOLD );
        }
        layer.transform.opacity.expression = expr;
    } );
}

/**
 * Adds a new Null object just above a layer, at the same position
 * @param {Layer} layer - The layer
 * @return {Layer} the null
 */
DuAEF.DuAE.Layer.addNull = function ( layer ) {
    if ( layer == undefined ) return null;
    var nullLayer = layer.containingComp.layers.addNull();
    layerParent = layer.parent;
    layer.parent = null;
    nullLayer.transform.position.setValue( layer.transform.position.value );
    layer.parent = layerParent;
    nullLayer.moveBefore( layer );
    nullLayer.name = "N | " + layer.name;
    return nullLayer;
}

/**
 * Locks the scale with an expression so its value cannot be changed
 * @param {Layer} layer - The layer
 * @param {bool} [allAEVersions=false] - true to lock scale even on CS6 and older<br />
 * Those older versions will display the scale property when typing the "U" shorcut when it's locked.
 */
DuAEF.DuAE.Layer.lockScale = function ( layer, allAEVersions ) {
    if ( typeof allAEVersions == "undefined" ) allAEVersions = false;
    if ( allAEVersions || DuAEF.DuAE.App.version.version > 12 ) DuAEF.DuAE.Property.lock( layer.transform.scale );
}

/**
 * Copies the layers to another comp
 * @param {Layer[]} layers - The layers to copy and paste
 * @param {CompItem} destinationComp - The composition to copy to
 * @param {boolean} [withPropertyLinks=false] - Add expressions on the properties to link them to the orriginal layers<br />
 * Works only on 12.0 and above, ignored on 11.0 (CS6) and below
 * @return {Layer[]} The new layers
 */
DuAEF.DuAE.Layer.copyToComp = function ( layers, destinationComp, withPropertyLinks ) {
    if ( DuAEF.DuAE.App.version.version < 12.0 ) withPropertyLinks = false;
    if ( typeof withPropertyLinks === 'undefined' ) withPropertyLinks = false;

    if ( layers.length == 0 ) return;

    var it = new Iterator( layers );

    var previousActiveComp = DuAEF.DuAE.Project.getActiveComp();

    //activate the origin comp
    var originComp = it.firstItem().containingComp;
    originComp.openInViewer();

    //select the layers
    var previousSelection = DuAEF.DuAE.Comp.unselectLayers( originComp );
    DuAEF.DuAE.Comp.selectLayers( layers );

    //copy
    if ( withPropertyLinks ) DuAEF.DuAE.App.copyWithPropertyLinks();
    else DuAEF.DuAE.App.copy();

    //destination
    destinationComp.openInViewer();

    //unselect layers in destination
    var previousSelectionDestination = DuAEF.DuAE.Comp.unselectLayers( destinationComp );

    //paste
    DuAEF.DuAE.App.paste();

    //keep new layers to return them
    var newLayers = destinationComp.selectedLayers;

    //restore previous state
    DuAEF.DuAE.Comp.selectLayers( previousSelection );
    previousActiveComp.openInViewer();
    DuAEF.DuAE.Comp.selectLayers( previousSelectionDestination );

    return newLayers;
}

/**
 * Parents all (unparented) layers
 * @param {Layer|LayerCollection|Layer[]} layers - The layers to parent
 * @param {Layer} [parent] - The parent. If not defined, will use the last layer of the list
 * @param {boolean} [unparentedOnly=true] - True to parent only layers which do not have a parent yet 
 */
DuAEF.DuAE.Layer.parent = function ( layers, parent, unparentedOnly ) {
    unparentedOnly = def( unparentedOnly, true );
    if ( typeof parent === 'undefined' ) {
        if ( !layers.length ) return;
        if ( layers.length == 1 ) return;
        parent = layers.pop();
    }

    if ( layers.length ) {
        var it = new Iterator( layers );
        it.do( function ( layer ) {
            var locked = layer.locked;
            layer.locked = false;
            if ( ( layer.parent == null && unparentedOnly ) || !unparentedOnly ) {
                if ( layer.parent != parent ) layer.parent = parent;
            }
            layer.locked = locked;
        } );
    } else {
        var locked = layers.locked;
        layers.locked = false;
        if ( ( layers.parent == null && unparentedOnly ) || !unparentedOnly ) {
            if ( layers.parent != parent ) layers.parent = parent;
        }
        layers.locked = locked;
    }
}

/**
 * Gets all the (selected) puppet pins found on the layer.<br />
 * Will return all puppet pins if there is no puppet selection.
 * @param {Layer} layer - The layer
 * @return {PropertyInfo[]} The properties
 */
DuAEF.DuAE.Layer.getPuppetPins = function ( layer ) {
    var pins = [];
    var selectedProps = layer.selectedProperties;

    function getPins( puppet ) {
        //get pins
        var mesh = puppet.property( "ADBE FreePin3 ARAP Group" ).property( "ADBE FreePin3 Mesh Group" ).property( "ADBE FreePin3 Mesh Atom" ).property( "ADBE FreePin3 PosPins" );
        for ( var i = 1, num = mesh.numProperties; i <= num; i++ ) {
            pins.push( new PropertyInfo( mesh.property( i ) ) );
        }
    }

    if ( selectedProps == 0 ) {
        //look for puppet effects
        for ( var i = 1, num = layer( 'ADBE Effect Parade' ).numProperties; i <= num; i++ ) {
            var effect = layer.effect( i );
            if ( effect.matchName == 'ADBE FreePin3' ) {
                getPins( effect );
            }
        }
    } else {
        //get any selected pin
        var itProps = new Iterator( selectedProps );
        itProps.do( function ( prop ) {
            if ( prop.matchName == 'ADBE FreePin3 PosPin Atom' ) pins.push( new PropertyInfo( prop ) );
        } );
        //try to find selected puppets
        if ( pins.length == 0 ) {
            itProps.do( function ( prop ) {
                if ( prop.matchName == 'ADBE FreePin3' ) getPins( prop );
            } );
        }
    }


    return pins;
}

/**
 * Aligns a layer in position to another layer
 * @param {Layer} layer - The layer to align.
 * @param {Layer} target - The reference layer.
 */
DuAEF.DuAE.Layer.alignPosition = function ( layer, target ) {
    //parent to target
    var layerParent = layer.parent;
    if ( layerParent != target ) layer.parent = target;

    var comp = layer.containingComp;

    //TODO if dimensions dimensions separated
    //TODO if 3D

    //set position
    if ( layer.transform.position.numKeys == 0 ) layer.transform.position.setValue( target.transform.anchorPoint.value );
    else layer.transform.position.setValueAtTime( comp.time, target.transform.anchorPoint.value );

    //reparent
    if ( layerParent != target ) layer.parent = layerParent;
}

/**
 * Aligns a layer's orientation to another layer
 * @param {Layer} layer - The layer to align.
 * @param {Layer} target - The reference layer.
 */
DuAEF.DuAE.Layer.alignOrientation = function ( layer, target ) {
    //parent to target
    var layerParent = layer.parent;
    if ( layerParent != target ) layer.parent = target;

    var comp = layer.containingComp;

    //TODO if 3D/2D

    //set rotation
    if ( layer.transform.rotation.numKeys == 0 ) layer.transform.rotation.setValue( 0 );
    else layer.transform.rotation.setValueAtTime( comp.time, 0 );

    //reparent
    if ( layerParent != target ) layer.parent = layerParent;
}

/**
 * Aligns a layer's scale to another layer
 * @param {Layer} layer - The layer to align.
 * @param {Layer} target - The reference layer.
 */
DuAEF.DuAE.Layer.alignScale = function ( layer, target ) {
    //parent to target
    var layerParent = layer.parent;
    if ( layerParent != target ) layer.parent = target;

    var comp = layer.containingComp;

    //TODO 3D

    //set scale
    if ( layer.transform.scale.numKeys == 0 ) layer.transform.scale.setValue( [ 100, 100 ] );
    else layer.transform.scale.setValueAtTime( comp.time, [ 100, 100 ] );

    //reparent
    if ( layerParent != target ) layer.parent = layerParent;
}

/**
 * Aligns a layer's opcaity to another layer
 * @param {Layer} layer - The layer to align.
 * @param {Layer} target - The reference layer.
 */
DuAEF.DuAE.Layer.alignOpacity = function ( layer, target ) {
    var comp = layer.containingComp;

    //set scale
    if ( layer.transform.opacity.numKeys == 0 ) layer.transform.opacity.setValue( target.transform.opacity.value );
    else layer.transform.opacity.setValueAtTime( comp.time, target.transform.opacity.value );
}

/**
 * Aligns the layers' transformations (position, rotation, scale) to another layer
 * @param {Layer[]|LayerCollection} layers - The layers to align.
 * @param {Layer} target - The reference layer.
 * @param {boolean} [position=true] - True to align position.
 * @param {boolean} [rotation=true] - True to align orientation.
 * @param {boolean} [scale=true] - True to align scale.
 * @param {boolean} [opacity=false] - True to align opcacity.
 */
DuAEF.DuAE.Layer.align = function ( layers, target, position, rotation, scale, opacity ) {
    if ( typeof position === 'undefined' ) position = true;
    if ( typeof rotation === 'undefined' ) rotation = true;
    if ( typeof scale === 'undefined' ) scale = true;
    if ( typeof opacity === 'undefined' ) opacity = false;

    var it = new Iterator( layers );


    var comp = layers[ 0 ].containingComp;

    var targetParent = target.parent;
    target.parent = null;

    //unparent all layers
    var parents = [];
    it.do( function ( layer ) {
        if ( layer == target ) return;
        //parent to target
        parents[ it.current ] = layer.parent;

        layer.parent = target;
    } );

    //set values
    it.do( function ( layer ) {
        if ( layer == target ) return;

        if ( position ) DuAEF.DuAE.Layer.alignPosition( layer, target );
        if ( rotation ) DuAEF.DuAE.Layer.alignOrientation( layer, target );
        if ( scale ) DuAEF.DuAE.Layer.alignScale( layer, target );
        if ( opacity ) DuAEF.DuAE.Layer.alignOpacity( layer, target );
    } );

    //re-parent
    it.do( function ( layer ) {
        if ( layer == target ) return;
        //reparent
        layer.parent = parents[ it.current ];
    } );

    target.parent = targetParent;
}

/**
 * Gets the transformation matrix of the layer from the compostion.<br />
 * Use Matrix.applyToPoint(point) to transform any coordinate with the matrix returned by this method.
 * @param {Layer[]} layer - the layer
 * @return {Matrix} The coordinates.
 */
DuAEF.DuAE.Layer.getTransformMatrix = function ( layer ) {
    var matrix = new Matrix();

    //get the ancestors
    var layers = [ layer ];
    var parent = layer.parent;
    while ( parent ) {
        layers.push( parent );
        parent = parent.parent;
    }

    //apply transforms from the ancestor
    for ( var i = layers.length - 1; i >= 0; i-- ) {
        var l = layers[ i ];

        //position
        matrix.translate( l.transform.position.value );

        //rotation
        if ( l.threeDLayer || l instanceof CameraLayer ) matrix.rotate( l.transform.zRotation.value );
        else matrix.rotate( l.transform.rotation.value );

        if ( !( l instanceof CameraLayer ) ) {
            //anchor point inverse transform, taking scale into account
            var aPX = -( l.transform.anchorPoint.value[ 0 ] * l.transform.scale.value[ 0 ] / 100 );
            var aPY = -( l.transform.anchorPoint.value[ 1 ] * l.transform.scale.value[ 1 ] / 100 );

            matrix.translate( [ aPX, aPY ] );

            //scale
            matrix.scale( l.transform.scale.value / 100 );
        }
    }

    return matrix;
}

/**
 * Moves a layer to the coordinates of a spatial property
 * @param {Layer} layer - The layer
 * @param {Property|PropertyInfo} prop - The property
 */
DuAEF.DuAE.Layer.moveLayerToProperty = function ( layer, prop ) {
    var propInfo;
    if ( prop instanceof PropertyInfo ) {
        propInfo = prop;
        prop = propInfo.getProperty();
    } else {
        propInfo = new PropertyInfo( prop );
    }

    var propLayer = propInfo.layer;
    var comp = propInfo.comp;

    if ( !( propLayer instanceof ShapeLayer ) ) {
        var matrix = DuAEF.DuAE.Layer.getTransformMatrix( propLayer );
        var pos = matrix.applyToPoint( prop.value );
        var parent = layer.parent;
        layer.parent = null;
        layer.position.setValue( pos );
        layer.parent = parent;
    } else {
        var parent = layer.parent;
        layer.parent = null;
        layer.position.setValue( prop.value );
        layer.parent = parent;
    }
}

/**
 * Sets the In and Out points of a layer according to its opacity (cuts at 0%)
 * @param {Layer} layer - The layer
 * @param {boolean} [preExpression=false] - Whether to check for the opacity post or pre-expression value
 */
DuAEF.DuAE.Layer.autoDuration = function ( layer, preExpression ) {
    if ( typeof preExpression === 'undefined' ) preExpression = false;

    var comp = layer.containingComp;

    var inPoint = layer.inPoint;
    var outPoint = layer.outPoint;
    var inFrame = inPoint / comp.frameDuration;
    var outFrame = outPoint / comp.frameDuration;

    //search in
    if ( layer.transform.opacity.valueAtTime( inPoint, preExpression ) == 0 ) {
        for ( var i = inFrame; i < outFrame; i++ ) {
            var time = i * comp.frameDuration;
            if ( layer.transform.opacity.valueAtTime( time, preExpression ) == 0 ) inPoint = time + comp.frameDuration;
            else break;
        }
    }

    //search out 
    if ( layer.transform.opacity.valueAtTime( outPoint, preExpression ) == 0 ) {
        for ( var i = outFrame; i > inFrame; i-- ) {
            var time = i * comp.frameDuration;
            if ( layer.transform.opacity.valueAtTime( time, preExpression ) == 0 ) outPoint = time;
            else break;
        }
    }

    //set new in and out points
    if ( inPoint != layer.inPoint ) layer.inPoint = inPoint;
    if ( outPoint != layer.outPoint ) layer.outPoint = outPoint;
}
// ==================== |-----------------| ====================
// ==================== | DuAEPropertyLib | ====================
// ==================== |-----------------| ====================

/**
 * After Effects properties methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.Property = {};

/**
 * Gets the After Effects properties in the property
 * @param {PropertyBase|PropertyInfo}	property	- The layer
 * @param {PropertyType|PropertyValueType|string|function}	 [filter]	- A filter to get only a certain type, or value type, or property name or matchName.<br />
 * A function which take one PropertyBase as argument can be used to filter the properties: the Property will be returned if the function returns true.
 * @param {boolean}	[strict=false]	- If a string filter is provided, wether to search for the exact name/matchName or if it contains the filter.
 * @param {boolean}	[caseSensitive=true]	- If a string filter is provided, and not strict is false, does the search have to be case sensitive?
 * @return {PropertyInfo[]} The selected properties, an empty Array if nothing found
 */
DuAEF.DuAE.Property.getProps = function ( property, filter, strict, caseSensitive ) {
    if ( strict == undefined ) strict = false;
    if ( caseSensitive == undefined ) caseSensitive = true;
    var prop;
    if ( property instanceof PropertyInfo ) prop = property.getProperty();
    else prop = property;

    var props = [];

    if ( !caseSensitive && typeof filter === "string" ) filter = filter.toLowerCase();

    var name = prop.name;
    var matchName = prop.matchName;
    if ( !caseSensitive ) {
        name = name.toLowerCase();
        matchName = matchName.toLowerCase();
    }

    if ( strict && name === filter ) props.push( prop );
    else if ( strict && matchName === filter ) props.push( prop );
    else if ( !strict && typeof filter === "string" ) {
        if ( name.indexOf( filter ) >= 0 ) props.push( prop );
        else if ( matchName.indexOf( filter ) >= 0 ) props.push( prop );
    } else if ( typeof filter === "function" )
        if ( filter( prop ) ) props.push( prop );
        else if ( prop.propertyType == PropertyType.PROPERTY )
        if ( prop.propertyValueType == filter ) props.push( prop );
        else if ( prop.propertyType == filter ) props.push( prop );

    if ( prop.numProperties > 0 ) {
        for ( var k = 1; k <= prop.numProperties; k++ ) {
            props = props.concat( DuAEF.DuAE.Property.getProps( prop.property( k ), filter, strict, caseSensitive ) );
        }
    }

    return DuAEF.DuAE.getPropertyInfos( props );
}

/**
 * Gets the layer containing the property
 * @param {PropertyBase|PropertyInfo}	prop	- The After Effects Property
 * @return {Layer}	The layer
 */
DuAEF.DuAE.Property.getLayer = function ( prop ) {
    if ( prop == undefined ) throw "You must provide a property.";
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    var parentProp = prop;
    while ( parentProp.parentProperty ) {
        // Traverse up the property tree
        parentProp = parentProp.parentProperty;
    }
    return parentProp;
}

/**
 * Gets the composition containing the property
 * @param {PropertyBase|PropertyInfo}	prop	- The After Effects Property
 * @return {CompItem}	The composition
 */
DuAEF.DuAE.Property.getComp = function ( prop ) {
    var layer = DuAEF.DuAE.Property.getLayer( prop );
    return layer.containingComp;
}

/**
 * Generates a new unique name for a marker for this marker porperty
 * @param {string} newName	- The wanted new name
 * @param {Property} prop 	- The comp
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuAE.Property.newUniqueMarkerName = function ( newName, prop, increment ) {
    if ( increment == undefined ) increment = true;
    var markerNames = [];
    for ( var i = 1, num = prop.numKeys; i <= num; i++ ) {
        markerNames.push( prop.keyValue( i ).comment );
    }
    return DuAEF.DuJS.String.generateUnique( newName, markerNames, increment );
}

/**
 * Gets the number of dimensions of a property
 * @param {Property|PropertyInfo}	prop	- The After Effects Property
 * @return {int}	The number of dimensions, 0 if this is not a dimensionnal value (ie color, text, shape...)
 */
DuAEF.DuAE.Property.getDimensions = function ( prop ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    var dimensions = 0;
    if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL || prop.propertyValueType == PropertyValueType.ThreeD ) {
        //if this is a position or scale and the layer is not 3D, AFX uses a 3D value in the position (with 0 as Z position), but the expression must return a 2D value.......
        if ( ( prop.matchName == "ADBE Scale" || prop.matchName == "ADBE Position" ) && !DuAEF.DuAE.Property.getLayer( prop ).threeDLayer ) {
            dimensions = 2;
        } else {
            dimensions = 3;
        }
    } else if ( prop.propertyValueType == PropertyValueType.TwoD_SPATIAL || prop.propertyValueType == PropertyValueType.TwoD ) {
        dimensions = 2;
    } else if ( prop.propertyValueType == PropertyValueType.OneD ) {
        dimensions = 1;
    } else if ( prop.propertyValueType == PropertyValueType.COLOR ) {
        dimensions = 4;
    }
    return dimensions;
}

/**
 * Checks if this property value can be edited
 * @param {Property|PropertyInfo} prop - The After Effects Property
 * @return {bool} true if the value of the property can be edited, false otherwise
 */
DuAEF.DuAE.Property.isEditable = function ( prop ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();

    if ( prop.propertyType != PropertyType.PROPERTY ) return false;
    if ( prop.elided ) return false;
    if ( prop.dimensionsSeparated ) return false;
    if ( prop.propertyValueType == PropertyValueType.NO_VALUE ) return false;
    if ( prop.propertyValueType == PropertyValueType.CUSTOM_VALUE ) return false;
    if ( prop.propertyValueType == PropertyValueType.LAYER_INDEX ) return false;
    if ( prop.propertyValueType == PropertyValueType.MASK_INDEX ) return false;
    try {
        if ( typeof prop.value === 'undefined' ) return false;
    } catch ( e ) {
        return false;
    }
    //TODO find a way to detect if prop is hidden without using a try/catch
    //try to set a value if there's no keyframe
    if ( prop.numKeys == 0 ) {
        try {
            prop.setValue( prop.valueAtTime( 0, true ) );
            return true;
        } catch ( e ) {
            return false;
        }
    } else {
        try {
            prop.setValueAtKey( 1, prop.keyValue( 1 ) );
            return true;
        } catch ( e ) {
            return false;
        }
    }

    return true;
}

/**
 * Checks if this property value can be rigged (with an expression)
 * @param {Property|PropertyInfo} prop - The After Effects Property
 * @return {bool} true if the value of the property can be rigged, false otherwise
 */
DuAEF.DuAE.Property.isRiggable = function ( prop ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();

    if ( prop.propertyType != PropertyType.PROPERTY ) return false;
    if ( !prop.canVaryOverTime ) return false;
    if ( !prop.canSetExpression ) return false;
    if ( prop.elided ) return false;
    if ( prop.dimensionsSeparated ) return false;
    if ( typeof prop.expression !== 'string' ) return false;
    //TODO find a way to detect if prop is hidden without using a try/catch
    var expressionEnabled = prop.expressionEnabled;
    try {
        prop.expressionEnabled = expressionEnabled;
        return true
    } catch ( e ) {
        return false;
    }
}

/**
 * Gets the key at a given index on a property
 * @param {Property|PropertyInfo}	prop	- The property.
 * @param {int}	keyIndex	- The index of the key to retrieve. If the index is negative, it is counted from the end i.e. to retrieve the keyframe before the last one, use -2 (-1 is the last)
 * @return {KeyFrame}	The keyframe, or null if incorrect index
 */
DuAEF.DuAE.Property.getKeyFrameAtIndex = function ( prop, keyIndex ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( Math.abs( keyIndex ) > prop.numKeys || keyIndex == 0 ) {
        return null;
    }
    if ( keyIndex < 0 ) {
        keyIndex = prop.numKeys - keyIndex + 1;
    }

    var key = new KeyFrame();
    key._time = prop.keyTime( keyIndex );
    key.value = prop.keyValue( keyIndex );
    key._inInterpolationType = prop.keyInInterpolationType( keyIndex );
    key._outInterpolationType = prop.keyOutInterpolationType( keyIndex );
    if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL || prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) {
        key._spatial = true;
        key.spatialProperties.inTangent = prop.keyInSpatialTangent( keyIndex );
        key.spatialProperties.outTangent = prop.keyOutSpatialTangent( keyIndex );
        key.spatialProperties._continuous = prop.keySpatialContinuous( keyIndex );
        key.spatialProperties._autoBezier = prop.keySpatialAutoBezier( keyIndex );
        key.spatialProperties._roving = prop.keyRoving( keyIndex );
    }
    key.inEase = prop.keyInTemporalEase( keyIndex );
    key.outEase = prop.keyOutTemporalEase( keyIndex );
    key._continuous = prop.keyTemporalContinuous( keyIndex );
    key._autoBezier = prop.keyTemporalAutoBezier( keyIndex );
    key._index = keyIndex;

    return key;
}

/**
 * Gets the nearest key at a given time on a property
 * @param {Property|PropertyInfo}	prop	- The property.
 * @param {float}	time	- The time of the key to retrieve.
 * @return {KeyFrame}	The keyframe, or null if incorrect time or not found
 */
DuAEF.DuAE.Property.getNearestKeyFrameAtTime = function ( prop, time ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    return DuAEF.DuAE.Property.getKeyFrameAtIndex( prop.nearestKeyIndex( time ) );
}

/**
 * Gets the key at an exactly given time on a property
 * @param {Property|PropertyInfo}	prop	- The property.
 * @param {float}	time	- The time of the key to retrieve.
 * @return {KeyFrame}	The keyframe, or null if incorrect time
 */
DuAEF.DuAE.Property.getKeyFrameAtTime = function ( prop, time ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( !prop.canVaryOverTime ) return null;
    if ( prop.numKeys == 0 ) return null;
    var key = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, prop.nearestKeyIndex( time ) );
    if ( key === null ) return key;
    if ( key._time == time ) return key;
    else return null;
}

/**
 * Gets the property keyframes in the whole timeline or in the time range<br />
 * The KeyFrame._time will be adjusted relatively to the start of the time range instead of the startTime of the composition.
 * @param {Property|PropertyInfo}	prop	- The property.
 * @param {boolean}	[selected=false]	- true to get only selected keyframes.
 * @param {float[]}	[timeRange]	- The time range, an array of two time values, in seconds. If not provided, will use the comp time range.<br />
 * Ignored if selected is true;
 * @return {KeyFrame[]}	The keyframes, or null of this property is of type PropertyValueType.NO_VALUE or PropertyValueType.CUSTOM_VALUE
 */
DuAEF.DuAE.Property.getKeyFrames = function ( prop, selected, timeRange ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( prop.propertyValueType == PropertyValueType.NO_VALUE ) return [];
    if ( prop.propertyValueType == PropertyValueType.CUSTOM_VALUE ) return [];

    var comp = DuAEF.DuAE.Property.getComp( prop );
    if ( timeRange == undefined ) timeRange = [ 0, comp.duration ];
    if ( selected == undefined ) selected = false;

    var keyFrames = [];

    if ( prop.elided ) return keyFrames;

    if ( prop.isTimeVarying ) {
        if ( selected ) {
            for ( var keyIndex = 0; keyIndex < prop.selectedKeys.length; keyIndex++ ) {
                var key = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, prop.selectedKeys[ keyIndex ] );
                if ( key._time >= timeRange[ 0 ] && key._time <= timeRange[ 1 ] ) {
                    key._time = key._time - timeRange[ 0 ];
                    keyFrames.push( key );
                }
            }
        } else if ( prop.numKeys > 0 ) {
            for ( var keyIndex = 1; keyIndex <= prop.numKeys; keyIndex++ ) {
                var key = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, keyIndex );
                if ( key._time >= timeRange[ 0 ] && key._time <= timeRange[ 1 ] ) {
                    key._time = key._time - timeRange[ 0 ];
                    keyFrames.push( key );
                }
            }
        }
    }
    return keyFrames;
}

/**
 * Gets all animations in the group in the whole timeline or in the time range<br />
 * The first KeyFrame._time will be adjusted relatively to the start of the time range (if provided) instead of the startTime of the composition.
 * @param {PropertyGroup|PropertyInfo}	prop	- The property.
 * @param {boolean}	[selected=false]	- true to get only selected keyframes.
 * @param {float[]}	[timeRange]	- The time range, an array of two time values, in seconds. If not provided, will use the comp time range.
 * @return {PropertyGroupAnim|PropertyAnim}	The animations. A PropertyAnim if prop is a Property, a PopertyGroupAnim if it is a PropertyGroup
 */
DuAEF.DuAE.Property.getAnim = function ( prop, selected, timeRange ) {
    var comp = DuAEF.DuAE.Property.getComp( prop );
    if ( typeof timeRange === 'undefined' ) timeRange = [ 0, comp.duration ];
    if ( typeof selected === 'undefined' ) selected = false;

    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();

    if ( selected && !DuAEF.DuAE.Property.hasSelectedKeys( prop ) ) return null;

    if ( prop.propertyType === PropertyType.PROPERTY ) {
        if ( prop.propertyValueType == PropertyValueType.NO_VALUE ) return null;
        if ( prop.elided ) return null;
        if ( !prop.canVaryOverTime ) return null;
        var anim = new PropertyAnim();
        anim._name = prop.name;
        anim._matchName = prop.matchName;
        anim.startValue = prop.valueAtTime( timeRange[ 0 ], true );
        anim.endValue = prop.valueAtTime( timeRange[ 1 ], true );
        anim.keys = DuAEF.DuAE.Property.getKeyFrames( prop, selected, timeRange );
        if ( anim.keys.length > 0 ) {
            anim.startTime = anim.keys[ 0 ]._time;
            anim.endTime = anim.keys[ anim.keys.length - 1 ]._time;
        } else {
            anim.startTime = 0;
            anim.endTime = 0;
        }
        anim.dimensions = DuAEF.DuAE.Property.getDimensions( prop );
        if ( prop.canSetExpression ) anim.expression = prop.expression;
        return anim;
    } else if ( prop.numProperties > 0 ) {
        var groupAnim = new PropertyGroupAnim();
        groupAnim._name = prop.name;
        groupAnim._matchName = prop.matchName;

        for ( var propIndex = 1; propIndex <= prop.numProperties; propIndex++ ) {
            var anim = DuAEF.DuAE.Property.getAnim( prop.property( propIndex ), selected, timeRange );
            if ( anim != null ) {
                if ( groupAnim.startTime == null ) groupAnim.startTime = anim.startTime;
                else if ( groupAnim.startTime > anim.startTime ) groupAnim.startTime = anim.startTime;
                if ( groupAnim.endTime == null ) groupAnim.endTime = anim.endTime;
                else if ( groupAnim.endTime > anim.endTime ) groupAnim.endTime = anim.endTimeendTime;
                groupAnim.anims.push( anim );
            }
        }
        return groupAnim;
    }
    return null;
}

// low-level undocumented method to get all expressions and cache them
//if compCache is true, add to the comp cache instead of the project cache
DuAEF.DuAE.Property.addToExpressionCache = function ( prop , compCache) {
    compCache = def(compCache, false);
    //it it's a prop, add to cache
    if ( prop.propertyType === PropertyType.PROPERTY ) {
        var exp = new PropertyExpression(prop);
        if ( !exp.empty && compCache) DuAEF.DuAE.Comp.expressionCache.push(exp);
        else if (!exp.empty) DuAEF.DuAE.Project.expressionCache.push(exp);
    }
    //if it's a group, get props inside
    else if ( prop.numProperties > 0 ) {
        for ( var p = 1; p <= prop.numProperties; p++ ) {
            DuAEF.DuAE.Property.addToExpressionCache( prop.property(p), compCache );
        }
    }
}

/**
 * Gets the time of the first keyFrame
 * @param {PropertyBase[]|PropertyInfo[]} props - The properties
 * @param {boolean} selected - true to check selected keyframes only
 * @return {float|null} The keyframe time or null if there are no keyframe
 */
DuAEF.DuAE.Property.firstKeyFrameTime = function ( prop, selected ) {
    var time = null;

    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( prop.propertyType == PropertyType.PROPERTY ) {
        if ( !prop.canVaryOverTime ) return null;
        if ( selected ) {
            if ( prop.selectedKeys.length == 0 ) return null;
            for ( var keyIndex = 0; keyIndex < prop.selectedKeys.length; keyIndex++ ) {
                var key = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, prop.selectedKeys[ keyIndex ] );
                if ( time == null ) time = key._time;
                else if ( time > key._time ) time = key._time;
            }
        } else {
            if ( prop.numKeys == 0 ) return null;
            for ( var keyIndex = 1; keyIndex <= prop.numKeys; keyIndex++ ) {
                var key = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, keyIndex );
                if ( time == null ) time = key._time;
                else if ( time > key._time ) time = key._time;
            }
        }
    } else if ( prop.numProperties > 0 ) {
        for ( var propIndex = 1; propIndex <= prop.numProperties; propIndex++ ) {
            var test = DuAEF.DuAE.Property.firstKeyFrameTime( prop.property( propIndex ), selected );
            if ( time == null ) time = test;
            else if ( test != null ) {
                if ( time > test ) time = test;
            }
        }
    }

    return time;
}

/**
 * Sets a {@linkcode KeyFrame} on a property
 * @param {Property|PropertyInfo}	prop	- The property.
 * @param {KeyFrame}	key	- The KeyFrame.
 * @param {float}	[timeOffset=comp.time]	- The time offset (added to KeyFrame._time) where to add the key frame.
 */
DuAEF.DuAE.Property.setKey = function ( prop, key, timeOffset ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( prop.elided ) return;
    if ( !prop.propertyType === PropertyType.PROPERTY ) throw "Can not set a key on a group property";
    if ( !prop.canVaryOverTime ) return;
    if ( prop.isSeparationLeader )
        if ( prop.dimensionsSeparated ) return;

    if ( timeOffset == undefined ) timeOffset = DuAEF.DuAE.Property.getComp( prop ).time;
    var time = key._time + timeOffset;
    var propDimensions = DuAEF.DuAE.Property.getDimensions( prop );
    var val = key.value;

    if ( propDimensions > 1 && !( val instanceof Array ) ) {
        val = [ val ];
    }

    //adjust dimensions
    if ( val instanceof Array ) {
        while ( val.length < propDimensions ) {
            val.push( 0 );
        }
        while ( val.length > propDimensions ) {
            val.pop();
        }
    }

    DuAEF.DuAE.Property.setValueAtTime( prop, val, time );
    if ( prop.numKeys == 0 ) return;

    //get the index of the created key
    var index = prop.nearestKeyIndex( time );

    //set interpolations
    if ( key._spatial && ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL || prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) ) {
        try {
            prop.setSpatialContinuousAtKey( index, key.spatialProperties._continuous );
            prop.setSpatialAutoBezierAtKey( index, key.spatialProperties._autoBezier );
            prop.setRovingAtKey( index, key.spatialProperties._roving );
            prop.setSpatialTangentsAtKey( index, key.spatialProperties.inTangent, key.spatialProperties.outTangent );
        } catch ( err ) {
            if ( DuAEF.debug ) alert( err.description );
        };
    }

    try {
        prop.setTemporalContinuousAtKey( index, key._continuous );
        prop.setTemporalAutoBezierAtKey( index, key._autoBezier );
        prop.setTemporalEaseAtKey( index, key.inEase, key.outEase );
        prop.setInterpolationTypeAtKey( index, key._inInterpolationType, key._outInterpolationType );
    } catch ( err ) {
        if ( DuAEF.debug ) alert( err.description );
    }

}

/**
 * Sets the property animation on the property.<br />
 * Use this method only to force the animation onto the property without checks.<br />
 * Must be used on a Property (not a group) with a PropertyAnim (not a PropertyGroupAnim).<br />
 * To easily set an animation on a property with automatic compatibility checks, you should use setGroupAnim().
 * @param {Property|PropertyInfo}	prop	- The property.
 * @param {PropertyAnim} anims	- The animation
 * @param {float}	[time=comp.time]	- The time where to begin the animation
 * @param {boolean}	[setExpression=false]	- Sets the expression too
 * @param {boolean}	[replace=false]	- true to remove any existing keyframe on the properties before adding new keyframes
 * @param {boolean}	[offset=false]	- true to offset the current value, instead of replacing it
 * @return {boolean} true if the anim was actually set.
 */
DuAEF.DuAE.Property.setAnim = function ( prop, anim, time, setExpression, replace, offset ) {
    var propInfo = new PropertyInfo( prop );
    prop = propInfo.getProperty();
    var comp = propInfo.comp;
    time = def( time, comp.time );
    setExpression = def( setExpression, false );
    replace = def( replace, false );
    offset = def( offset, false );

    if ( !propInfo.numerical ) offset = false;

    var dimensions = anim.dimensions;

    var ok = false;

    if ( anim == null ) return true;
    if ( anim.type == 'group' ) return false;

    if ( propInfo.editable ) {
        //keep current value
        var val = prop.valueAtTime( comp.time, true );

        //remove keyframes
        if ( replace && prop.numKeys > 0 ) {
            for ( var i = prop.numKeys; i > 0; i-- ) {
                prop.removeKey( i );
            }
            DuAEF.DuAE.Property.setValue( prop, val );
        }

        //if there are keys, set them
        if ( anim.keys.length > 0 ) {
            for ( var iclef = 0; iclef < anim.keys.length; iclef++ ) {
                var key = anim.keys[ iclef ];
                if ( offset ) {
                    if ( iclef == 0 ) key.value = val;
                    else key.value = val + ( key.value - anim.startValue );
                }
                DuAEF.DuAE.Property.setKey( prop, key, time );
                ok = true;
            }
        } else //set the start value
        {
            var value = anim.startValue;
            if ( value instanceof Array ) {
                while ( value.length < dimensions ) {
                    value.push( 0 );
                }
                while ( value.length > dimensions ) {
                    value.pop();
                }
            }

            if ( anim.startValue != null && !offset ) {
                if ( prop.numKeys == 0 ) {
                    DuAEF.DuAE.Property.setValue( prop, anim.startValue );
                } else {
                    try {
                        prop.setValueAtTime( time, anim.startValue );
                    } catch ( e ) {};
                }
            }
            ok = true;
        }

        //set the expression
        if ( propInfo.riggable && setExpression ) {
            try {
                prop.expression = anim.expression;
            } catch ( e ) {
                if ( DuAEF.debug ) alert( e.description );
            };
        }
    }

    return ok;
}

/**
 * Sets all animations on a Property or a PropertyGroup.
 * @param {PropertyGroup|PropertyInfo}	prop	- The property group.
 * @param {PropertyAnim} anims	- The animation
 * @param {float}	[time=comp.time]	- The time where to begin the animation
 * @param {boolean}	[ignoreName=false]	- true to set the anim even if name of the property do not match the animation.
 * @param {boolean}	[setExpression=false]	- Sets the expression too
 * @param {boolean}	[onlyKeyframes=true]	- If false, the value of properties without keyframes will be set too.
 * @param {boolean}	[replace=false]	- true to remove any existing keyframe on the properties before adding new keyframes
 * @param {string[]}	[whiteList]	- A list of matchNames used as a white list for properties to set anims.<br />
 * Can be the matchName of a propertyGroup to set all the subproperties.<br />
 * Ignored if the list is empty.
 * @param {boolean}	[offset=false]	- true to offset the current value, instead of replacing it
 * @return {boolean} true if the anim was actually set.
 */
DuAEF.DuAE.Property.setGroupAnim = function ( prop, anim, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, set ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( typeof time === 'undefined' ) time = DuAEF.DuAE.Property.getComp( prop ).time;
    if ( typeof ignoreName === 'undefined' ) ignoreName = false;
    if ( typeof setExpression === 'undefined' ) setExpression = false;
    if ( typeof onlyKeyframes === 'undefined' ) onlyKeyframes = false;
    if ( typeof replace === 'undefined' ) replace = false;
    if ( typeof whiteList === 'undefined' ) whiteList = [];
    if ( typeof offset === 'undefined' ) offset = false;
    if ( typeof reverse === 'undefined' ) reverse = false;
    if ( typeof set === 'undefined' ) set = false;

    if ( whiteList.length == 0 ) set = true;
    if ( DuAEF.DuJS.Array.indexOf( whiteList, anim._matchName ) >= 0 ) set = true;

    var ok = false;

    if ( anim == null ) return true;

    if ( anim.type == 'anim' ) {
        if ( set ) {
            var okToSet = false;
            if ( prop.matchName == anim._matchName ) {
                if ( !ignoreName && prop.name == anim._name ) okToSet = true;
                if ( ignoreName ) okToSet = true;
                if ( onlyKeyframes && anim.keys.length == 0 ) okToSet = false;
            }

            if ( okToSet ) return DuAEF.DuAE.Property.setAnim( prop, anim, time, setExpression, replace, offset );
        }
    } else {
        for ( var i = 0; i < anim.anims.length; i++ ) {
            var propAnim = anim.anims[ i ];
            //find the property with the same name and matchname
            for ( var j = 1; j <= prop.numProperties; j++ ) {
                var subProp = prop.property( j );
                var okToSet = false;
                if ( subProp.matchName == propAnim._matchName ) {
                    if ( !ignoreName && subProp.name == propAnim._name ) okToSet = true;
                    if ( ignoreName ) okToSet = true;
                }
                if ( okToSet ) {
                    ok = DuAEF.DuAE.Property.setGroupAnim( subProp, propAnim, time, ignoreName, setExpression, onlyKeyframes, replace, whiteList, offset, set );
                    break;
                }
            }
        }
    }

    return ok;
}

/**
 * Removes the animation from the property
 * @param {Property|PropertyInfo} prop -The property
 * @param {boolean} [removeExpression=false] - Set to true to remove the expression too
 */
DuAEF.DuAE.Property.removeAnim = function ( prop, removeExpression ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    while ( prop.numKeys > 0 ) {
        prop.removeKey( 1 );
    }
    if ( removeExpression && prop.canSetExpression ) {
        prop.expression = '';
    }
}

/**
 * Selects the keyframes in the propoerty.<br />
 * Selects all nested keyframes if the property is a group.
 * @param {PropertyBase|PropertyInfo} property - The property
 * @param {float} [inTime=0] - The time at which to select the keyframes
 * @param {float} [outTime=inTime] - The end time
 */
DuAEF.DuAE.Property.selectKeyFrames = function ( property, inTime, outTime ) {
    if ( inTime == undefined ) inTime = 0;
    if ( outTime == undefined ) outTime = inTime;
    var prop;
    if ( property instanceof PropertyInfo ) prop = property.getProperty();
    else prop = property;

    if ( prop.propertyType == PropertyType.PROPERTY ) {
        if ( prop.elided ) return;
        if ( prop.isSeparationLeader )
            if ( prop.dimensionsSeparated ) return;
        if ( inTime == outTime ) {
            //get key
            var key = DuAEF.DuAE.Property.getKeyFrameAtTime( prop, inTime );
            if ( key ) prop.setSelectedAtKey( key._index, true );
        } else {
            //get keys
            var keys = DuAEF.DuAE.Property.getKeyFrames( prop, false, [ inTime, outTime ] );
            if ( !keys ) return;
            for ( var i = 0; i < keys.length; i++ ) {
                prop.setSelectedAtKey( keys[ i ]._index, true );
            }
        }
    } else if ( prop.numProperties > 0 ) {
        for ( var i = 1; i <= prop.numProperties; i++ ) {
            DuAEF.DuAE.Property.selectKeyFrames( prop.property( i ), inTime, outTime );
        }
    }
}

/**
 * Gets an expression link to the property
 * @memberof DuAEF.DuAE.Property
 * @param {Property|PropertyInfo}	prop			- The property
 * @param {bool}		[useThisComp=false]		- Wether to begin the expression by 'thisComp' or 'comp("name")'
 * @param {bool}		[fromLayer=true]		- Wether to begin the expression by comp.layer or directly from the first prop of the layer
 * @return {str}		The expression link to the property
 */
DuAEF.DuAE.Property.getExpressionLink = function ( prop, useThisComp, fromLayer ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( useThisComp == undefined ) useThisComp = false;
    if ( fromLayer == undefined ) fromLayer = true;

    //get compact expression from matchName, if available
    function getCompactExpression( matchName, name ) {
        var translatedName = DuAEF.DuAE.compactExpressions[ matchName ];

        if ( translatedName !== undefined )
            return eval( translatedName );
        else
            return ( "(" + name + ")" );
    }

    var exprCode = "";
    var name;
    while ( prop.parentProperty !== null ) {
        if ( prop.propertyType == PropertyType.PROPERTY ) name = prop.propertyIndex;
        else if ( prop.parentProperty.propertyType == PropertyType.INDEXED_GROUP ) {
            name = "\"" + prop.name + "\"";
        } else name = "\"" + prop.matchName + "\"";
        compactName = getCompactExpression( prop.matchName, name );
        exprCode = compactName + exprCode;

        // Traverse up the property tree
        prop = prop.parentProperty;
    }

    if ( exprCode.indexOf( "(" ) != 0 && exprCode != "" ) exprCode = '.' + exprCode;

    if ( fromLayer ) {
        var comp = prop.containingComp;
        // Prefix the layer reference
        name = "\"" + prop.name + "\"";
        exprCode = "layer(" + name + ")" + exprCode;
        // Prefix the comp reference
        if ( useThisComp ) exprCode = "thisComp." + exprCode;
        else exprCode = "comp(\"" + comp.name + "\")." + exprCode;
    }

    return exprCode;
}

/**
 * Sets a value on a property, adjusting the dimensions if needed
 * @param {Property|PropertyInfo} prop - The property
 * @param {any} value - The value to set
 * @return {boolean} True if the value has correctly been set, false otherwise.
 */
DuAEF.DuAE.Property.setValue = function ( prop, value ) {
    var dimensions = 0;
    var editable = false;
    if ( prop instanceof PropertyInfo ) {
        propInfo = prop;
        prop = propInfo.getProperty();
    } else {
        propInfo = new PropertyInfo( prop );
    }
    dimensions = propInfo.dimensions;
    editable = propInfo.editable;

    if ( prop.isSeparationLeader )
        if ( prop.dimensionsSeparated ) return false;

    if ( !editable ) return false;

    //check dimensions of the property
    if ( dimensions == 0 || dimensions == 1 ) {
        if ( value instanceof Array ) value = value[ 0 ];
        try {
            prop.setValue( value );
            return true;
        } catch ( e ) {
            if ( DuAEF.debug ) alert( e.description );
            return false;
        }
    } else {
        if ( !( value instanceof Array ) ) value = [ value ];
        while ( value.length < dimensions ) {
            value.push( 0 );
        }
        while ( value.length > dimensions ) {
            value.pop();
        }
        try {
            prop.setValue( value );
            return true;
        } catch ( e ) {
            if ( DuAEF.debug ) alert( e.description );
            return false;
        }
    }
}

/**
 * Sets a new keyframe on a property, adjusting the dimensions if needed, at desired time
 * @param {Property|PropertyInfo} prop - The property
 * @param {any} value - The value to set
 * @param {float} [time] - The time of the new keyframe
 */
DuAEF.DuAE.Property.setValueAtTime = function ( prop, value, time ) {
    var dimensions = 0;
    var editable = false;
    if ( prop instanceof PropertyInfo ) {
        propInfo = prop;
        prop = propInfo.getProperty();
    } else {
        propInfo = new PropertyInfo( prop );
    }
    dimensions = propInfo.dimensions;
    editable = propInfo.editable;

    if ( typeof time === 'undefined' ) time = propInfo.comp.time;

    if ( !prop.canVaryOverTime ) return;
    if ( prop.isSeparationLeader )
        if ( prop.dimensionsSeparated ) return;

    if ( !editable ) return;

    //check dimensions of the property
    if ( dimensions == 0 || dimensions == 1 ) {
        if ( value instanceof Array ) value = value[ 0 ];
        try {
            prop.setValueAtTime( time, value );
        } catch ( e ) {
            if ( DuAEF.debug ) alert( e.description );
        }
    } else {
        if ( !( value instanceof Array ) ) value = [ value ];
        while ( value.length < dimensions ) {
            value.push( 0 );
        }
        while ( value.length > dimensions ) {
            value.pop();
        }
        try {
            prop.setValueAtTime( time, value );
        } catch ( e ) {
            if ( DuAEF.debug ) alert( e.description );
        }
    }
}

/**
 * Changes the interpolation type on selected keyframes, or sets a new key at current time if there are no keyframes selected.
 * @param {Layer[]|LayerCollection} layers - The layers containing the properties
 * @param {PropertyBase[]|PropertyInfo[]} props - The properties
 * @param {KeyframeInterpolationType|string} typeIn - The in interpolation type (see AE API) or the string "roving" or "continuous"
 * @param {KeyframeInterpolationType|string} [typeOut=typeIn] - The out interpolation type (see AE API)
 * @param {int[]|int} [easeInValue=33] - The in interpolation ease value (used if typeIn is KeyframeInterpolationType.BEZIER)
 * @param {int[]|int} [easeOutValue=easeInValue] - The out interpolation ease value (used if typeOut is KeyframeInterpolationType.BEZIER)
 */
DuAEF.DuAE.Property.setInterpolationType = function ( layers, props, typeIn, typeOut, easeInValue, easeOutValue ) {
    if ( typeOut == undefined ) typeOut = typeIn;
    if ( easeInValue == undefined ) easeInValue = 33;
    if ( isNaN( easeInValue ) ) easeInValue = 33;
    if ( easeOutValue == undefined ) easeOutValue = easeInValue;
    if ( isNaN( easeOutValue ) ) easeOutValue = 33;

    if ( layers.length == 0 ) return;

    if ( !DuAEF.DuAE.Layer.haveSelectedKeys( layers ) ) {
        DuAEF.DuAE.Property.addKey( props, typeIn, typeOut, easeInValue, easeOutValue );
    } else {
        for ( var i = 0; i < props.length; i++ ) {
            var propInfo = props[ i ];
            var prop = props[ i ];
            if ( !( propInfo instanceof PropertyInfo ) ) propInfo = new PropertyInfo( prop );
            prop = props[ i ].getProperty();

            if ( prop.canVaryOverTime ) {
                //for keys
                for ( var k = 0, num = prop.selectedKeys.length; k < num; k++ ) {
                    DuAEF.DuAE.Property.setKeyInterpolation( prop, prop.selectedKeys[ k ], typeIn, typeOut, easeInValue, easeOutValue );
                }
            }
        }
    }
}

/**
 * Sets interpolations on a keyframe.<br />
 * @param {Property} prop - The property
 * @param {int} key - The key index
 * @param {KeyframeInterpolationType|string} typeIn - The in interpolation type (see AE API) or the string "roving" or "continuous"
 * @param {KeyframeInterpolationType|string} [typeOut=typeIn] - The out interpolation type (see AE API)
 * @param {int[]|int} [easeInValue=33] - The in interpolation ease value (used if typeIn is KeyframeInterpolationType.BEZIER)
 * @param {int[]|int} [easeOutValue=easeInValue] - The out interpolation ease value (used if typeOut is KeyframeInterpolationType.BEZIER)
 */
DuAEF.DuAE.Property.setKeyInterpolation = function ( prop, key, typeIn, typeOut, easeInValue, easeOutValue ) {
    if ( typeOut == undefined ) typeOut = typeIn;
    if ( easeInValue == undefined ) easeInValue = 33;
    if ( isNaN( easeInValue ) ) easeInValue = 33;
    if ( easeOutValue == undefined ) easeOutValue = easeInValue;
    if ( isNaN( easeOutValue ) ) easeOutValue = 33;

    easeInValue = new KeyframeEase( 0, easeInValue );
    easeOutValue = new KeyframeEase( 0, easeOutValue );

    if ( typeIn == "roving" && prop.isSpatial ) {
        prop.setRovingAtKey( key, true );
    } else if ( typeIn == "continuous" ) {
        prop.setInterpolationTypeAtKey( key, KeyframeInterpolationType.BEZIER );
        prop.setTemporalContinuousAtKey( key, true );
        prop.setTemporalAutoBezierAtKey( key, true );
        //not roving
        if ( prop.isSpatial ) prop.setRovingAtKey( key, false );
    } else if ( typeIn != "roving" ) {
        //influences
        if ( !prop.isSpatial && prop.value.length == 3 ) {
            prop.setTemporalEaseAtKey( key, [ easeInValue, easeInValue, easeInValue ], [ easeOutValue, easeOutValue, easeOutValue ] );
        } else if ( !prop.isSpatial && prop.value.length == 2 ) {
            prop.setTemporalEaseAtKey( key, [ easeInValue, easeInValue ], [ easeOutValue, easeOutValue ] );
        } else {
            prop.setTemporalEaseAtKey( key, [ easeInValue ], [ easeOutValue ] );
        }
        //type
        prop.setInterpolationTypeAtKey( key, typeIn, typeOut );
        //not roving
        if ( prop.isSpatial ) {
            if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL || prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) prop.setRovingAtKey( key, false );
        }
        //not continuous
        prop.setTemporalContinuousAtKey( key, false );
    }
}

/**
 * Adds a new keyframe on the properties.<br />
 * To set a value of your choice on one property,<br />
 * you can create a new {@link KeyFrame}, then use {@link DuAEF.DuAE.Property.setKey}.
 * @param {PropertyBase[]|PropertyInfo[]} props - The properties
 * @param {KeyframeInterpolationType|string} typeIn - The in interpolation type (see AE API) or the string "roving" or "continuous"
 * @param {KeyframeInterpolationType|string} [typeOut=typeIn] - The out interpolation type (see AE API)
 * @param {int[]|int} [easeInValue=33] - The in interpolation ease value (used if typeIn is KeyframeInterpolationType.BEZIER)
 * @param {int[]|int} [easeOutValue=easeInValue] - The out interpolation ease value (used if typeOut is KeyframeInterpolationType.BEZIER)
 * @param {float} [time=comp.time] - The time at which to add the key
 */
DuAEF.DuAE.Property.addKey = function ( props, typeIn, typeOut, easeInValue, easeOutValue, time ) {
    for ( var i = 0; i < props.length; i++ ) {
        var propInfo = props[ i ];
        var prop = props[ i ];
        if ( !( propInfo instanceof PropertyInfo ) ) propInfo = new PropertyInfo( prop );
        prop = props[ i ].getProperty();
        var comp = DuAEF.DuAE.Property.getComp( prop );
        if ( prop.canVaryOverTime ) {
            var keyTime;
            if ( typeof time === 'undefined' ) keyTime = comp.time;
            else keyTime = time;
            var key = prop.addKey( keyTime );
            DuAEF.DuAE.Property.setKeyInterpolation( prop, key, typeIn, typeOut, easeInValue, easeOutValue );
        }
    }
}

/**
 * Computes a percentage from a velocity on a given keyframe. 
 * @param {Property|PropertyInfo} prop - The property
 * @param {int} key - The index of the keyframe where to compute the velocity
 * @return {float[]} The velocities [in, out] as a percentage.
 */
DuAEF.DuAE.Property.velocityToPercent = function ( prop, key ) {
    var propInfo = new PropertyInfo( prop );
    prop = propInfo.getProperty();

    var speedIn = prop.keyInTemporalEase( key )[ 0 ].speed;
    var speedOut = prop.keyOutTemporalEase( key )[ 0 ].speed;

    //get speed just before and after as if it was linear
    var prevSpeed = 0;
    var nextSpeed = 0;
    var val = prop.keyValue( key );
    var currentTime = prop.keyTime( key );
    if ( key > 1 ) {
        var valBefore = prop.keyValue( key - 1 );
        var timeBefore = prop.keyTime( key - 1 );
        prevSpeed = DuAEF.DuJS.Math.getLength( val, valBefore ) / ( currentTime - timeBefore );
    }

    if ( key < prop.numKeys ) {
        var valAfter = prop.keyValue( key + 1 );
        var timeAfter = prop.keyTime( key + 1 );
        nextSpeed = DuAEF.DuJS.Math.getLength( val, valBefore ) / ( timeAfter - currentTime );
    }

    //get average speed
    var speed = ( prevSpeed + nextSpeed ) / 2;

    //compare to the original speeds 
    var speedInAsPercent = speedIn / speed * 100;
    var speedOutAsPercent = speedOut / speed * 100;

    return [ speedInAsPercent, speedOutAsPercent ];
}

/**
 * Changes the ease influences of the selected keys
 * @param {PropertyBase[]|PropertyInfo[]} props - The properties
 * @param {int[]|int} [easeInValue] - The in interpolation ease value. Will be ignored if undefined.
 * @param {int[]|int} [easeOutValue] - The out interpolation ease value. Will be ignored if undefined.
 * @param {int[]|int} [velocityInValue] - The out interpolation ease value. Will be ignored if undefined.
 * @param {int[]|int} [velocityOutValue] - The out interpolation ease value. Will be ignored if undefined.
 * @param {boolean} [velocityAsPercent=false] - Use a percent instead of a value to set velocities.<br />
 * In this case, the proper velocity value will be deduced by multiplying the max speed of the property by the percent.
 */
DuAEF.DuAE.Property.setEase = function ( props, easeInValue, easeOutValue, velocityInValue, velocityOutValue, velocityAsPercent ) {
    if ( isNaN( easeInValue ) && typeof easeInValue !== 'undefined' ) easeInValue = 33;
    if ( isNaN( easeOutValue ) && typeof easeOutValue !== 'undefined' ) easeOutValue = 33;
    if ( isNaN( velocityInValue ) && typeof velocityInValue !== 'undefined' ) velocityInValue = 0;
    if ( isNaN( velocityOutValue ) && typeof velocityOutValue !== 'undefined' ) velocityOutValue = 0;

    for ( var i = 0; i < props.length; i++ ) {
        var propInfo = new PropertyInfo( props[ i ] );
        var prop = propInfo.getProperty();

        var comp = propInfo.comp;

        if ( prop.canVaryOverTime ) {

            var vInValue = velocityInValue;
            var vOutValue = velocityOutValue;

            for ( var k = 0; k < prop.selectedKeys.length; k++ ) {
                var key = prop.selectedKeys[ k ];

                if ( typeof easeInValue !== 'undefined' ) {
                    if ( typeof velocityInValue === 'undefined' && prop.keyInInterpolationType( key ) == KeyframeInterpolationType.LINEAR ) {
                        vInValue = 0;
                    }
                }

                if ( typeof easeOutValue !== 'undefined' ) {
                    if ( typeof velocityOutValue === 'undefined' && prop.keyOutInterpolationType( key ) == KeyframeInterpolationType.LINEAR ) {
                        vOutValue = 0;
                    }
                }

                //compute the velocity
                if ( velocityAsPercent ) {
                    //get speed just before and after as if it was linear
                    var prevSpeed;
                    var nextSpeed;
                    var val = prop.keyValue( key );
                    var currentTime = prop.keyTime( key );
                    var valBefore = val;
                    var valAfter = val;
                    if ( key > 1 ) {
                        var valBefore = prop.keyValue( key - 1 );
                        var timeBefore = prop.keyTime( key - 1 );
                        prevSpeed = DuAEF.DuJS.Math.getLength( val, valBefore ) / ( currentTime - timeBefore );
                    }

                    if ( key < prop.numKeys ) {
                        var valAfter = prop.keyValue( key + 1 );
                        var timeAfter = prop.keyTime( key + 1 );
                        nextSpeed = DuAEF.DuJS.Math.getLength( val, valBefore ) / ( timeAfter - currentTime );
                    }

                    if ( typeof prevSpeed === 'undefined' && typeof nextSpeed === 'undefined' ) {
                        prevSpeed = 0;
                        nextSpeed = 0;
                    } else if ( typeof prevSpeed === 'undefined' ) {
                        prevSpeed = nextSpeed;
                    } else if ( typeof nextSpeed === 'undefined' ) {
                        nextSpeed = prevSpeed;
                    }

                    //detect sign
                    var signBefore = 1;
                    var signAfter = 1;
                    if ( propInfo.dimensions == 1 ) {
                        if ( val - valBefore < 1 ) signBefore = -1;
                        if ( valAfter - val < 1 ) signAfter = -1;
                    }

                    if ( velocityInValue == velocityOutValue ) {
                        //select average speed
                        var speed = ( prevSpeed + nextSpeed ) / 2;

                        vInValue = velocityInValue * speed / 100 * signBefore;
                        vOutValue = velocityOutValue * speed / 100 * signBefore;
                    } else {

                        vInValue = velocityInValue * prevSpeed / 100 * signBefore;
                        vOutValue = velocityOutValue * nextSpeed / 100 * signAfter;
                    }

                }


                //set interpolation 
                var easeIn = [ new KeyframeEase(
                    def( vInValue, prop.keyInTemporalEase( key )[ 0 ].speed ),
                    def( easeInValue, prop.keyInTemporalEase( key )[ 0 ].influence )
                ) ];
                var easeOut = [ new KeyframeEase(
                    def( vOutValue, prop.keyOutTemporalEase( key )[ 0 ].speed ),
                    def( easeOutValue, prop.keyOutTemporalEase( key )[ 0 ].influence )
                ) ];

                if ( !prop.isSpatial ) {
                    for ( var j = 1; j < prop.keyInTemporalEase( prop.selectedKeys[ k ] ).length; j++ ) {
                        easeIn.push( new KeyframeEase(
                            def( vInValue, prop.keyInTemporalEase( key )[ j ].speed ),
                            def( easeInValue, prop.keyInTemporalEase( key )[ j ].influence )
                        ) );
                        easeOut.push( new KeyframeEase(
                            def( vOutValue, prop.keyOutTemporalEase( key )[ j ].speed ),
                            def( easeOutValue, prop.keyOutTemporalEase( key )[ j ].influence )
                        ) );
                    }
                }

                //adjust interpolation types
                var inType = KeyframeInterpolationType.BEZIER;
                var outType = KeyframeInterpolationType.BEZIER;

                if ( typeof easeInValue === 'undefined' && typeof velocityInValue === 'undefined' ) {
                    inType = prop.keyInInterpolationType( key );
                }
                if ( typeof easeOutValue === 'undefined' && typeof velocityOutValue === 'undefined' ) {
                    outType = prop.keyOutInterpolationType( key );
                }

                prop.setInterpolationTypeAtKey( key, inType, outType );

                prop.setTemporalEaseAtKey( key, easeIn, easeOut );
            }
        }
    }
}

/**
 * Checks if the property has some selected keyframes.<br />
 * The property can be either a Property or a PropertyGroup.
 * @param {PropertyBase} prop - The property
 * @return {boolean} true if the property have at least one selected keyframe
 */
DuAEF.DuAE.Property.hasSelectedKeys = function ( prop ) {
    var yes = false;

    if ( prop.propertyType == PropertyType.PROPERTY ) {
        if ( prop.selectedKeys.length > 0 ) {
            yes = true;
        }
    } else if ( prop.numProperties > 0 ) {
        for ( var propIndex = 1; propIndex <= prop.numProperties; propIndex++ ) {
            yes = DuAEF.DuAE.Property.hasSelectedKeys( prop.property( propIndex ) );
            if ( yes ) break;
        }
    }
    return yes;
}

/**
 * Sets the spatial interpolation of the selected keyframes on the property
 * @param {Property|PropertyInfo} prop - The property
 * @param {KeyframeInterpolationType} typeIn - The in interpolation type (see AE API)
 * @param {KeyframeInterpolationType} [typeOut=typeIn] - The in interpolation type (see AE API)
 */
DuAEF.DuAE.Property.setSpatialInterpolation = function ( prop, typeIn, typeOut ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( typeOut == undefined ) typeOut = typeIn;
    if ( !prop.isSpatial ) return;
    if ( prop.selectedKeys.length == 0 ) return;
    for ( var k = 0; k < prop.selectedKeys.length; k++ ) {
        if ( typeIn == KeyframeInterpolationType.BEZIER && typeOut == KeyframeInterpolationType.BEZIER ) {
            prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], true );
        } else if ( typeIn == KeyframeInterpolationType.LINEAR && typeOut == KeyframeInterpolationType.LINEAR ) {
            prop.setSpatialContinuousAtKey( prop.selectedKeys[ k ], false );
            prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], false );
            if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL ) {
                prop.setSpatialTangentsAtKey( prop.selectedKeys[ k ], [ 0, 0, 0 ], [ 0, 0, 0 ] );
            } else if ( prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) {
                prop.setSpatialTangentsAtKey( prop.selectedKeys[ k ], [ 0, 0 ], [ 0, 0 ] );
            }
        } else if ( typeIn == KeyframeInterpolationType.BEZIER ) {
            prop.setSpatialContinuousAtKey( prop.selectedKeys[ k ], false );
            prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], false );
            var keyIndex = prop.selectedKeys[ k ];
            if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL ) {
                if ( prop.keyInSpatialTangent( keyIndex )[ 0 ] == 0 && prop.keyInSpatialTangent( keyIndex )[ 1 ] == 0 && prop.keyInSpatialTangent( keyIndex )[ 2 ] == 0 ) {
                    prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], true );
                }
                prop.setSpatialTangentsAtKey( keyIndex, prop.keyInSpatialTangent( keyIndex ), [ 0, 0, 0 ] );
            } else if ( prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) {
                if ( prop.keyInSpatialTangent( keyIndex )[ 0 ] == 0 && prop.keyInSpatialTangent( keyIndex )[ 1 ] == 0 ) {
                    prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], true );
                }
                prop.setSpatialTangentsAtKey( keyIndex, prop.keyInSpatialTangent( keyIndex ), [ 0, 0 ] );
            }
        } else if ( typeIn == KeyframeInterpolationType.LINEAR ) {
            prop.setSpatialContinuousAtKey( prop.selectedKeys[ k ], false );
            prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], false );
            var keyIndex = prop.selectedKeys[ k ];
            if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL ) {
                if ( prop.keyOutSpatialTangent( keyIndex )[ 0 ] == 0 && prop.keyOutSpatialTangent( keyIndex )[ 1 ] == 0 && prop.keyOutSpatialTangent( keyIndex )[ 2 ] == 0 ) {
                    prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], true );
                }
                prop.setSpatialTangentsAtKey( keyIndex, [ 0, 0, 0 ], prop.keyOutSpatialTangent( keyIndex ) );
            } else if ( prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) {
                if ( prop.keyOutSpatialTangent( keyIndex )[ 0 ] == 0 && prop.keyOutSpatialTangent( keyIndex )[ 1 ] == 0 ) {
                    prop.setSpatialAutoBezierAtKey( prop.selectedKeys[ k ], true );
                }
                prop.setSpatialTangentsAtKey( keyIndex, [ 0, 0 ], prop.keyOutSpatialTangent( keyIndex ) );
            }
        }
    }
}

/**
 * Fixes the spatial interpolation of the selected keys.<br />
 * Sets the interpolation to linear when the property does not move between keyframes
 * @param {Property|PropertyInfo} prop - The property
 */
DuAEF.DuAE.Property.fixSpatialInterpolation = function ( prop ) {
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();

    if ( !prop.isSpatial ) return;
    if ( !prop.canVaryOverTime ) return;

    var keyIndices = prop.selectedKeys;
    if ( keyIndices.length < 2 ) return;

    for ( var k = 0; k < keyIndices.length - 1; k++ ) {
        var key = keyIndices[ k ];
        var nextKey = keyIndices[ k + 1 ]
        //get this key value
        var keyValue = prop.valueAtTime( prop.keyTime( key ), true );
        //get next key value
        var nextKeyValue = prop.valueAtTime( prop.keyTime( key + 1 ), true );

        //compare and set
        if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL ) {
            if ( keyValue[ 0 ] == nextKeyValue[ 0 ] && keyValue[ 1 ] == nextKeyValue[ 1 ] && keyValue[ 2 ] == nextKeyValue[ 2 ] ) {
                prop.setSpatialTangentsAtKey( key, prop.keyInSpatialTangent( key ), [ 0, 0, 0 ] );
                prop.setSpatialTangentsAtKey( nextKey, [ 0, 0, 0 ], prop.keyOutSpatialTangent( nextKey ) );
            }
        } else if ( prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) {
            if ( keyValue[ 0 ] == nextKeyValue[ 0 ] && keyValue[ 1 ] == nextKeyValue[ 1 ] ) {
                prop.setSpatialTangentsAtKey( key, prop.keyInSpatialTangent( key ), [ 0, 0 ] );
                prop.setSpatialTangentsAtKey( nextKey, [ 0, 0 ], prop.keyOutSpatialTangent( nextKey ) );
            }
        }
    }
}

/**
 * Removes all unneeded keyframes from the property.< br/>
 * Also checks the interpolation values to reset the correct display as linear/smooth.
 * @param {Property|PropertyInfo} property - The property
 */
DuAEF.DuAE.Property.cleanKeyframes = function ( property ) {
    var prop = property;
    if ( prop instanceof PropertyInfo ) prop = property.getProperty();

    var numKeys = prop.numKeys;
    if ( numKeys == 0 ) return;
    if ( numKeys == 1 ) {
        prop.removeKey( 1 );
        return;
    }

    for ( var i = numKeys; i > 0; i-- ) {
        var currentKey = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, i );

        if ( i > 1 ) var prevKey = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, i - 1 );
        if ( i < prop.numKeys ) var nextKey = DuAEF.DuAE.Property.getKeyFrameAtIndex( prop, i + 1 );

        //check values
        if ( i > 1 && !DuAEF.DuJS.Array.compare( currentKey.value, prevKey.value, 3 ) ) continue;
        if ( i < prop.numKeys && !DuAEF.DuJS.Array.compare( currentKey.value, nextKey.value, 3 ) ) continue;
        //check velocities
        var remove = false;
        for ( var j = 0; j < currentKey.inEase.length; j++ ) {
            remove = false
            if ( i > 1 && !DuAEF.DuJS.Math.compare( prevKey.outEase[ j ].speed, 0, 4 ) ) break;
            if ( i > 1 && !DuAEF.DuJS.Math.compare( currentKey.inEase[ j ].speed, 0, 4 ) ) break;
            if ( i < prop.numKeys && !DuAEF.DuJS.Math.compare( currentKey.outEase[ j ].speed, 0, 4 ) ) break;
            if ( i < prop.numKeys && !DuAEF.DuJS.Math.compare( nextKey.inEase[ j ].speed, 0, 4 ) ) break;
            remove = true;
        }
        //remove key
        if ( remove ) prop.removeKey( i );
    }
}

/**
 * Gets the maximum speed of the animated propreties
 * @param {Property[]|PropertyInfo[]} props - The Properties
 * @param {bool}	 [preExpression=true]	- True to get the velocity from keyframes instead of the result of the exression
 * @return {float} The average speed
 */
DuAEF.DuAE.Property.getMaximumSpeed = function ( props ) {
    var maxSpeed = 0;

    for ( var i = 0; i < props.length; i++ ) {
        var speed = DuAEF.DuAE.Property.getMaxVelocity( props[ i ], false );
        if ( speed > maxSpeed ) maxSpeed = speed;
    }

    return maxSpeed;
}

/**
 * Gets the speed of a property at a given time
 * @param {Property|PropertyInfo} prop - The property
 * @param {float} [time=composition.time] - The time.
 * @param {boolean} [preExpression=true] - true to get the pre-expression speed.
 * @return {float} The speed
 */
DuAEF.DuAE.Property.getSpeed = function ( prop, time, preExpression ) {
    preExpression = def (preExpression, true);
    if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
    if ( prop.propertyType != PropertyType.PROPERTY ) return 0;
    if ( prop.numKeys == 0 && preExpression ) return 0;
    var comp = DuAEF.DuAE.Property.getComp( prop );
    if ( time == undefined ) time = comp.time;

    var speed = DuAEF.DuJS.Math.getLength( prop.valueAtTime( time + comp.frameDuration / 2, preExpression ), prop.valueAtTime( time - comp.frameDuration / 2, preExpression ) );
    return speed / comp.frameDuration;
}

/**
 * Sets an expression to a property.<br />
 * With the ability to keep the initial value.
 * @param {Property|PropertyInfo} property - The property
 * @param {string} expr - The expression
 * @param {bool} [keepValue=true] - When true, the method will try to keep the same resulting value as before applying the expression.
 */
DuAEF.DuAE.Property.setExpression = function ( property, expr, keepValue ) {
    keepValue = def( keepValue, true );

    var propInfo = new PropertyInfo( property );
    if ( !propInfo.riggable ) return;

    property = propInfo.getProperty();

    var originalValue = property.valueAtTime( propInfo.comp.time, false );

    //remove current expression
    if ( keepValue ) DuAEF.DuAE.Property.removeExpression( property );
    else try {
        property.expression = ""
    } catch ( e ) {
        if ( DuAEF.debug ) alert( e.description );
        return;
    }
    //set new expression
    try {
        property.expression = expr;
    } catch ( e ) {
        if ( DuAEF.debug ) alert( e.description );
    }

    //restore value
    if ( propInfo.editable && keepValue && propInfo.dimensions > 0 ) DuAEF.DuAE.Property.setValue( property, 2 * originalValue - property.valueAtTime( propInfo.comp.time, false ) );
}

/**
 * Replaces text in Expressions
 * @param {PropertyBase|PropertyInfo} prop - The property (can be a group)
 * @param {string} oldString - The string to replace
 * @param {string} newString - The new string
 * @param {boolean} [caseSensitive=true] - Wether the search has to be case sensitive
 */
DuAEF.DuAE.Property.replaceInExpressions = function ( prop, oldString, newString, caseSensitive ) {
    caseSensitive = def (caseSensitive, true);

    if ( prop.propertyType == PropertyType.PROPERTY ) {
        if ( prop.canSetExpression ) {
            if ( prop.expression = '' ) return;
            if ( prop.expression.length < oldString.length ) return;
            try {
                prop.expression = DuAEF.DuJS.String.replace( prop.expression, oldString, newString, caseSensitive );
            } catch ( e ) {};
        }
    } else if ( prop.numProperties > 0 ) {
        for ( var propertyIndex = 1; propertyIndex <= prop.numProperties; propertyIndex++ ) {
            DuAEF.DuAE.Property.replaceInExpressions( prop.property( propertyIndex ), oldString, newString, caseSensitive );
        }
    }
}

/**
 * Adds an expression to the child property, linking it to the parent property
 * @memberof DuAEF.DuAE.Property
 * @param {Property} childProp - The child property (the one which gets an expression).
 * @param {Property} parentProp - The parent property.
 * @param {bool} useThisComp - Wether to begin the expression by 'thisComp' or 'comp("name")', default: will detect if the properties are in the same comp
 */
DuAEF.DuAE.Property.pickWhip = function ( childProp, parentProp, useThisComp ) {
    if ( !childProp.canSetExpression ) return;
    if ( typeof useThisComp === 'undefined' ) {
        var parentComp = DuAEF.DuAE.Property.getComp( parentProp );
        var childComp = DuAEF.DuAE.Property.getComp( childProp );
        if ( parentComp.id == childComp.id ) useThisComp = true;
        else useThisComp = false;
    }
    var exp = DuAEF.DuAE.Property.getExpressionLink( parentProp, useThisComp );
    DuAEF.DuAE.Property.setExpression( childProp, exp, false );
}

/**
 * Link all the properties found in childProp to all the same properties of parentProp (this is a recursive method)<br />
 * Note: any Property or PropertyGroup (and its subproperties) named "Data" will be linked the opposite way (from parentProp to childProp).
 * @memberof DuAEF.DuAE.Property
 * @param {PropertyBase} childProp - The child property
 * @param {PropertyBase} parentProp - The parent property
 * @param {bool} [useThisComp] - Wether to begin the expression by 'thisComp' or 'comp("name")', default: will detect if the properties are in the same comp
 * @param {LayerItem} [timeLayer=null] - A layer used to offset the time (typically, in case of link between precompositions, the precomposition layer).<br />
 * When not null, the start time of this layer will be taken into account to get the values and synchronize them.
 */
DuAEF.DuAE.Property.linkProperties = function ( childProp, parentProp, useThisComp, timeLayer ) {
    if ( parentProp.name.toLowerCase() == 'data' ) return;
    if ( childProp.propertyType == PropertyType.PROPERTY && !childProp.elided && childProp.propertyValueType != PropertyValueType.NO_VALUE ) {
        if ( typeof timeLayer === 'undefined' ) timeLayer = null;

        if ( typeof useThisComp === 'undefined' ) {
            var parentComp = DuAEF.DuAE.Property.getComp( parentProp );
            var childComp = DuAEF.DuAE.Property.getComp( childProp );

            useThisComp = parentComp.id == childComp.id;
        }

        //copy paste the animation / value
        var anim = DuAEF.DuAE.Property.getAnim( parentProp, false );
        if ( anim != null ) DuAEF.DuAE.Property.setAnim( childProp, anim, 0, true, true, false );

        //set the link
        var exp = DuAEF.Duik.expressionIds.LINK + '\n';
        if ( timeLayer != null ) {
            exp += 'var timeLayer = ' + DuAEF.DuAE.Property.getExpressionLink( timeLayer ) + ';\n' +
                'var st = timeLayer.startTime;\n' +
                'var t = time + st;\n' +
                DuAEF.DuAE.Property.getExpressionLink( parentProp, useThisComp ) + '.valueAtTime(t);';

        } else {
            exp += DuAEF.DuAE.Property.getExpressionLink( parentProp, useThisComp ) + ';';
        }

        DuAEF.DuAE.Property.setExpression( childProp, exp, false );
    } else {
        if ( parentProp.isEffect ) {
            var insideData = 0;
            for ( var p = 1, num = childProp.numProperties; p <= num; p++ ) {
                var subProp = parentProp( p );
                if ( subProp.propertyValueType == PropertyValueType.NO_VALUE ) {
                    if ( subProp.name.toLowerCase() == 'data' ) {
                        insideData++;
                        continue;
                    }

                    if ( insideData > 0 ) {
                        if ( subProp.name == parentProp.name || subProp.name == "" ) insideData--;
                        else insideData++;
                        continue;
                    }
                }
                if ( insideData == 0 ) DuAEF.DuAE.Property.linkProperties( childProp( p ), subProp, useThisComp, timeLayer );
                else DuAEF.DuAE.Property.linkProperties( subProp, childProp( p ), useThisComp, timeLayer );
            }
        } else {
            for ( var p = 1, num = childProp.numProperties; p <= num; p++ ) {
                DuAEF.DuAE.Property.linkProperties( childProp( p ), parentProp( p ), useThisComp, timeLayer );
            }
        }
    }
}

/**
 * Removes all expressions found in groups or sections named "Data" in the property.
 * @memberof DuAEF.DuAE.Property
 * @param {PropertyBase} prop - The property
 */
DuAEF.DuAE.Property.removeDataExpressions = function ( prop ) {
    if ( prop.propertyType == PropertyType.PROPERTY && prop.name.toLowerCase() == 'data' ) {
        DuAEF.DuAE.Property.removeExpression( prop );
    } else if ( prop.isEffect ) {
        var insideData = 0;
        for ( var p = 1, num = prop.numProperties; p <= num; p++ ) {
            var subProp = prop( p );
            if ( subProp.propertyValueType == PropertyValueType.NO_VALUE ) {
                if ( subProp.name.toLowerCase() == 'data' ) {
                    insideData++;
                    continue;
                }

                if ( insideData > 0 ) {
                    if ( subProp.name == "" || subProp.name == prop.name ) insideData--;
                    else insideData++;
                    continue;
                }
            }
            if ( insideData > 0 ) DuAEF.DuAE.Property.removeExpression( subProp );
        }
    } else {
        if ( prop.name.toLowerCase() == 'data' ) DuAEF.DuAE.Property.removeExpressions( prop );
        for ( var p = 1, num = prop.numProperties; p <= num; p++ ) {
            DuAEF.DuAE.Property.removeDataExpressions( prop( p ) );
        }
    }
}

/**
 * Removes all expressions found in the property.
 * @memberof DuAEF.DuAE.Property
 * @param {PropertyBase} prop - The property
 * @param {function} filter - A function which takes a string as a parameter (the expression). Returns true if the expression has to be removed.
 */
DuAEF.DuAE.Property.removeExpressions = function ( prop, filter ) {
    if ( prop.propertyType == PropertyType.PROPERTY ) {
        DuAEF.DuAE.Property.removeExpression( prop, filter );
    } else {
        for ( var p = 1, num = prop.numProperties; p <= num; p++ ) {
            DuAEF.DuAE.Property.removeExpressions( prop( p ), filter );
        }
    }
}

/**
 * Adds all the (supported) properties found in a property to the essential graphics panel<br />
 * Note: any Property or PropertyGroup (and its subproperties) named "data" will be ignored.
 * @memberof DuAEF.DuAE.Property
 * @param {PropertyBase} prop - The property
 * @return {int} The number of properties added
 */
DuAEF.DuAE.Property.addToEGP = function ( prop ) {
    var numProps = 0;
    if ( prop.name.toLowerCase() == 'data' ) return numProps;
    if ( prop.propertyType == PropertyType.PROPERTY && prop.propertyValueType != PropertyValueType.NO_VALUE ) {
        var comp = DuAEF.DuAE.Property.getComp( prop );
        var layer = DuAEF.DuAE.Property.getLayer( prop );
        //set the link
        if ( prop.canAddToMotionGraphicsTemplate( comp ) && !prop.elided && prop.canSetExpression ) {
            //get the name 
            var mPropName = layer.name + ' / ' + DuAEF.DuAE.Property.getExpressionLink( prop, true, false );
            //add with name
            if ( DuAEF.DuAE.App.version.version >= 16.1 ) {
                prop.addToMotionGraphicsTemplateAs( comp, mPropName);
            }
            else {
                prop.addToMotionGraphicsTemplate( comp );
            }

            //rename the master property if >=15.1 and < 16.1
            if ( DuAEF.DuAE.App.version.version >= 15.1 && DuAEF.DuAE.App.version.version < 16.1 ) {
                var it = new Iterator( comp.usedIn );
                it.do( function ( mainComp ) {
                    //search the layer of the precomp
                    for ( var i = 1, num = mainComp.numLayers; i <= num; i++ ) {
                        var l = mainComp.layer( i );
                        if ( l.source )
                            if ( l.source.id == comp.id ) {
                                l( 'ADBE Layer Overrides' )( 1 ).name = mPropName;
                            }
                    }
                } );
            }
            numProps++;
        }
    } else {
        if ( prop.isEffect ) {
            var insideData = 0;
            for ( var p = 1, num = prop.numProperties; p <= num; p++ ) {
                var subProp = prop( p );
                if ( subProp.propertyValueType == PropertyValueType.NO_VALUE ) {
                    if ( subProp.name.toLowerCase() == 'data' ) {
                        insideData++;
                        continue;
                    }

                    if ( insideData > 0 ) {
                        if ( subProp.name == prop.name ) insideData--;
                        else insideData++;
                        continue;
                    }
                }
                if ( insideData == 0 ) numProps += DuAEF.DuAE.Property.addToEGP( subProp );
            }
        } else {
            for ( var p = 1; p <= prop.numProperties; p++ ) {
                numProps += DuAEF.DuAE.Property.addToEGP( prop( p ) );
            }
        }
    }
    return numProps;
}

/**
 * Locks the property with an expression so its value cannot be changed
 * @memberof DuAEF.DuAE.Property
 * @param {PropertyBase|PropertyInfo|PropertyBase[]|PropertyInfo[]} properties - The property or properties
 */
DuAEF.DuAE.Property.lock = function ( properties ) {
    var it = new Iterator( properties );
    it.do( function ( property ) {
        var p = property;
        var riggable = false;
        var dimensions = 0;
        if ( property instanceof PropertyInfo ) {
            p = property.getProperty();
            riggable = property.riggable;
            dimensions = property.dimensions;
        } else {
            riggable = DuAEF.DuAE.Property.isRiggable( p );
            dimensions = DuAEF.DuAE.Property.getDimensions( p );
        }

        if ( riggable ) {
            var exp = "";
            if ( dimensions == 0 ) exp = "value";
            else if ( dimensions == 1 ) exp = p.value.toString();
            else exp = p.value.toSource();
            DuAEF.DuAE.Property.setExpression( property, exp );
        }
    } );
}

/**
 * Removes the expression from the property, keeping the post-expression value.
 * @memberof DuAEF.DuAE.Property
 * @param {Property|PropertyInfo} prop - The property
 * @param {function} filter - A function which takes a string as a parameter (the expression). Returns true if the expression has to be removed.
 */
DuAEF.DuAE.Property.removeExpression = function ( prop, filter ) {
    if ( typeof ( prop ) === 'undefined' ) return;

    var propInfo = new PropertyInfo( prop );
    prop = propInfo.getProperty();

    var expression = prop.expression;

    if ( expression == '' ) return;
    if (typeof filter === 'function') {
        if (!filter(expression )) return;
    }
    if ( propInfo.riggable ) {
        DuAEF.DuAE.Property.setValue( prop, prop.value );
        prop.expression = '';
    }
}

/**
 * Checks if the property has an animation (keyframes)
 * @param {Property} prop - The property
 * @return {boolean} True if the property is animated
 */
DuAEF.DuAE.Property.isAnimated = function ( prop ) {
    if ( prop.canVaryOverTime ) {
        if ( prop.numKeys > 0 ) return true;
    }
    return false;
}

/**
 * Gets the After Effects animated (with keyframes) properties in the propertyGroup
 * @param {PropertyGroup}	 prop	- The parent propertyGroup where to search for animations
 * @param {PropertyType|PropertyValueType|string|function}	 [filter]	- A filter to get only a certain type, or value type, or property name or matchName.<br />
 * A function which take one PropertyBase as argument can be used to filter the properties: the Property will be returned if the function returns true.
 * @param {boolean}	[strict=false]	- If a string filter is provided, wether to search for the exact name/matchName or if it contains the filter.
 * @param {boolean}	[caseSensitive=true]	- If a string filter is provided, and not strict is false, does the search have to be case sensitive?
 * @return {PropertyInfo[]} The selected properties, an empty Array if nothing active or selected
 */
DuAEF.DuAE.Property.getAnimatedProps = function ( prop, filter, strict, caseSensitive ) {
    if ( strict == undefined ) strict = false;
    if ( caseSensitive == undefined ) caseSensitive = true;

    var props = [];

    if ( !caseSensitive && typeof filter === "string" ) filter = filter.toLowerCase();

    if ( prop.propertyType == PropertyType.PROPERTY ) {
        if ( DuAEF.DuAE.Property.isAnimated( prop ) ) {
            if ( typeof filter === 'undefined' ) {
                props.push( prop );
            } else {
                var name = prop.name;
                var matchName = prop.matchName;
                if ( !caseSensitive ) {
                    name = name.toLowerCase();
                    matchName = matchName.toLowerCase();
                }

                if ( strict && name === filter ) props.push( prop );
                else if ( strict && matchName === filter ) props.push( prop );
                else if ( typeof filter === 'string' ) {
                    if ( name.indexOf( filter ) >= 0 ) props.push( prop );
                    else if ( matchName.indexOf( filter ) >= 0 ) props.push( prop );
                } else if ( prop.propertyValueType == filter ) props.push( prop );
                else if ( typeof filter === 'function' ) {
                    if ( filter( prop ) ) props.push( prop );
                }
            }
        }
    } else {
        for ( var i = 0, num = prop.numProperties; i < num; i++ ) {
            props = props.concat( DuAEF.DuAE.Property.getAnimatedProps( prop.property( i + 1 ), filter, strict, caseSensitive ) );
        }
    }


    return DuAEF.DuAE.getPropertyInfos( props );
}

/**
 * Checks if the property value is a number or an Array of Number.<br >
 * I.e if its value type is one of: one D, two D, three D (spatial or not), Color.
 * @param {Property}	 prop	- The property
 * @return {bool}
 */
DuAEF.DuAE.Property.isNumerical = function ( prop ) {
    if ( prop.propertyValueType == PropertyValueType.ThreeD_SPATIAL ) return true;
    if ( prop.propertyValueType == PropertyValueType.ThreeD ) return true;
    if ( prop.propertyValueType == PropertyValueType.TwoD_SPATIAL ) return true;
    if ( prop.propertyValueType == PropertyValueType.TwoD ) return true;
    if ( prop.propertyValueType == PropertyValueType.OneD ) return true;
    if ( prop.propertyValueType == PropertyValueType.COLOR ) return true;
    return false;
}

/**
 * Gets the value range of the animated property.<br >
 * The property type must be one of: one D, two D, three D (spatial or not), Color.
 * If the property is not one of these types, returns an empty Array.
 * @param {Property|PropertyInfo}	 prop	- The property
 * @param {int}	 [axis=0]	- The axis (or the color channel) to get the range
 * @param {bool}	 [preExpression=true]	- True to get the range from keyframes instead of the result of the exression
 * @param {bool}	 [fastMode=true]	- True to check the range with values only at keyframe times. False to check the range with all values, at each frame of the comp.
 * @return {float[]} The minimum and maximum value.<br />
 * The first item in the Array is not necesarily the lowest value, it is the first in time.
 */
DuAEF.DuAE.Property.getRange = function ( prop, axis, preExpression, fastMode ) {
    axis = def(axis, 0);
    preExpression = def(preExpression, true);
    fastMode = def(fastMode, true);

    var propInfo = new PropertyInfo( prop );
    prop = propInfo.getProperty();

    if ( !propInfo.numerical ) return [];

    if ( prop.expression == '' || !prop.expressionEnabled ) preExpression = true;

    var comp = propInfo.comp;
    var frames = comp.duration / comp.frameDuration;
    var min = prop.valueAtTime( 0, preExpression );
    var minTime = 0;
    var max = prop.valueAtTime( 0, preExpression );
    var maxTime = 0;

    if ( propInfo.dimensions > 1 ) {
        max = max[ axis ];
        min = min[ axis ];
    }

    var count = frames-1;
    if ( fastMode ) count = prop.numKeys;

    if (count == 0) return [min, max];

    for ( var i = 1; i <= count; i++ ) {
        var iTime = i*comp.frameDuration;
        if (fastMode) iTime = prop.keyTime(i);
        var val = prop.valueAtTime( iTime, preExpression );
        if ( propInfo.dimensions > 1 ) val = val[ axis ];
        if ( val < min ) {
            min = val;
            minTime = i;
        }
        if ( val > max ) {
            max = val;
            maxTime = i;
        }
    }

    if ( minTime < maxTime ) return [ min, max ];
    else return [ max, min ];
}

/**
 * Gets the maximum velocity of the animated property.<br >
 * The property type must be one of: one D, two D, three D (spatial or not), Color.
 * If the property is not one of these types, returns 0.
 * @param {Property|PropertyInfo}	 prop	- The property
 * @param {bool}	 [preExpression=true]	- True to get the velocity from keyframes instead of the result of the exression
 * @param {bool}	 [fastMode=true]	- True to limit the number of samples used to compute the velocity and make the process faster.<br />
 * The number of samples is automatically adapted from the duration of the composition.<br />
 * When true and if there are more than one keyframe, the velocity is sampled only between keyframes.
 * @return {float} The velocity.
 */
DuAEF.DuAE.Property.getMaxVelocity = function ( prop, preExpression, fastMode ) {
    preExpression = def(preExpression, true);
    fastMode = def(fastMode, true);

    var propInfo = prop;
    if ( !( prop instanceof PropertyInfo ) ) {
        propInfo = new PropertyInfo( prop );
    } else {
        prop = propInfo.getProperty();
    }

    var velocity = 0;
    if ( !propInfo.numerical ) return velocity;

    if ( prop.expression == '' ) preExpression = true;

    var comp = propInfo.comp;
    var frames = comp.duration / comp.frameDuration;

    var startFrame = 0;
    var endFrame = frames;
    var step = 1;
    if (fastMode) {

        if (prop.numKeys > 1) {
            startFrame = prop.keyTime(1) / comp.frameDuration;
            endFrame = prop.keyTime(prop.numKeys) / comp.frameDuration;
        }
    }

    var numFrames = endFrame - startFrame;

    if (numFrames > 1000 && fastMode) {
        step = Math.floor( numFrames/500 );
    }

    for ( var i = startFrame; i < endFrame; i = i+step ) {
        var vel = DuAEF.DuAE.Property.getSpeed( prop, i * comp.frameDuration, preExpression );
        if ( vel > velocity ) velocity = vel;
    }

    return velocity;

}

/**
 * Gets the average speed of the animated propreties
 * @param {Property[]|PropertyInfo[]} props - The Properties
 * @param {bool}	 [preExpression=true]	- True to get the velocity from keyframes instead of the result of the exression
 * @param {bool}	 [fastMode=true]	- True to limit the number of samples used to compute the velocity and make the process faster.
 * @return {float} The average speed in unit per second
 */
DuAEF.DuAE.Property.getAverageSpeed = function ( props, preExpression, fastMode ) {
    preExpression = def(preExpression, true);
    fastMode = def(fastMode, true);

    var averageSpeed = 0;
    var count = 0;

    for ( var i = 0; i < props.length; i++ ) {
        var prop = props[ i ];
        if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
        if ( prop.propertyType != PropertyType.PROPERTY ) continue;
        if ( !prop.canVaryOverTime ) continue;
        if ( prop.numKeys < 1 && !preExpression ) continue;

        var comp = DuAEF.DuAE.Property.getComp( prop );
        var frames = comp.duration / comp.frameDuration;
        var lastTime = comp.duration;
        var firstTime = 0;
        if ( preExpression || (fastMode && prop.numKeys > 1) ) {
            lastTime = prop.keyTime( prop.numKeys );
            firstTime = prop.keyTime( 1 );
        }
        var lastFrame = lastTime / comp.frameDuration;
        var firstFrame = firstTime / comp.frameDuration;
        if ( lastFrame > frames ) lastFrames = frames;
        if ( firstFrame < 1 ) firstFrame = 1;

        var step = 1;
        if (fastMode) {
            var numFrames = lastFrame - firstFrame;
            if (numFrames > 1000) {
                step = Math.floor( numFrames/500 );
            }
        }
        
        var sum = 0;
        for ( var frame = firstFrame; frame < lastFrame; frame = frame + step ) {
            var time = frame * comp.frameDuration;
            sum += DuAEF.DuAE.Property.getSpeed( prop, time, preExpression );
        }
        var speed = sum / ( lastFrame - firstFrame );

        if ( speed > 0 ) {
            averageSpeed += speed;
            count++;
        }
    }

    averageSpeed = averageSpeed / count;
    return averageSpeed;
}


/**
 * Converts the expression as a string which can be copy/pasted and included in a script.
 * @param {Property|PropertyInfo|string} prop - The property containing the expression or the expression itself.
 * @param {string} [varName] - A name for the variable
 * @return {string} The stringified expression.
 */
DuAEF.DuAE.Property.scriptifyExpression = function ( prop, varName ) {
    varName = def( varName, '' );

    var propType = DuAEF.DuJS.typeof( prop );
    var exp = '';
    if ( propType.toLowerCase() === 'string' ) exp = prop;
    else {
        if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
        var exp = prop.expression;
    }

    var expArray = exp.split( '\n' );
    var expString = "";
    if ( varName != '' ) expString += "var " + varName + " ";
    expString += "['"
    var nextLine = expArray[ 0 ].replace( "\r", "" );
    nextLine = DuAEF.DuJS.String.replace( nextLine, "'", "\\'") + "'";
    expString += nextLine;
    for ( var i = 1; i < expArray.length; i++ ) {
        expString += ",\n\t'" + expArray[ i ].replace( '\r', '' ).replace("'","\\'") + "'";
    }
    expString += "\n\t].join('\\n');";

    return expString;
}

/**
 * Puppet tool methods
 * @namespace
 * @memberof DuAEF.DuAE.Property
 */
DuAEF.DuAE.Property.PuppetTool = {};

/**
 * Checks if a pin can be rigged or not.\nFor now, the only pins which can not be rigged are starch pins.
 * @param {PropertyGroup} pin - The pin to test
 * @return {boolean} True if this pin has either a position, rotation or scale property
 */
DuAEF.DuAE.Property.PuppetTool.isRiggable = function ( pin ) {
    if ( pin.position.canSetExpression ) return true;
    if ( pin.rotation.canSetExpression ) return true;
    if ( pin.scale.canSetExpression ) return true;
    return false;
}

/**
 * Bezier Path methods
 * @namespace
 * @memberof DuAEF.DuAE.Property
 */
DuAEF.DuAE.Property.Bezier = {};

/**
 * Scriptifies the given shape property.<br/>
 * @param {Property}	 [shapeProp]	- The path property to export
 * @param {boolean}	[offsetToCenter=false]	- If true, offset the path to the center
 * @param {string}	[varName=shape]	- A name for the variable storing the shape
 * @return {string} The scriptified shape
 */
DuAEF.DuAE.Property.Bezier.scriptify = function ( pathProperty, offsetToCenter, varName ) {
    if ( pathProperty instanceof PropertyInfo ) pathProperty = pathProperty.getProperty();
    offsetToCenter = def( offsetToCenter, false );
    varName = def( varName, 'shape' );

    if ( pathProperty.propertyType !== PropertyType.PROPERTY ) throw "Expected a shape property, got a group.";
    if ( pathProperty.propertyValueType !== PropertyValueType.SHAPE ) throw "Expected a shape property, got another type of value.";
    offsetToCenter = def( offsetToCenter, false );

    var shape = pathProperty.value;
    var vertices = shape.vertices;

    if ( offsetToCenter ) {
        //get center and offset
        var sum = [ 0, 0 ];
        for ( var i = 0; i < vertices.length; i++ ) {
            sum[ 0 ] += vertices[ i ][ 0 ];
            sum[ 1 ] += vertices[ i ][ 1 ];
        }
        var center = sum / vertices.length;
        //adjust values
        for ( var i = 0; i < vertices.length; i++ ) {
            vertices[ i ][ 0 ] -= center[ 0 ];
            vertices[ i ][ 1 ] -= center[ 1 ];
        }
    }

    var verticesStr = vertices.toSource();
    var inTangentsStr = shape.inTangents.toSource();
    var outTangentsStr = shape.outTangents.toSource();
    var closedStr = shape.closed ? 'true' : 'false';

    var scriptified = [
        'var ' + varName + ' = new Shape();',
        varName + '.vertices = ' + verticesStr + ';',
        varName + '.inTangents = ' + inTangentsStr + ';',
        varName + '.outTangents = ' + outTangentsStr + ';',
        varName + '.closed = ' + closedStr + ';'
    ].join( '\n' );

    return scriptified;
}

/**
 * Export the given shape property to the given file <br/>
 * The file name in the given path will be used to name the shape in the jsx code
 * @example
 * var props = DuAEF.DuAE.Comp.getSelectedProps(PropertyValueType.SHAPE);
 * var prop = props[0].getProperty();
 * var out = DuAEF.DuAE.Property.Shape.exportToJsxinc(prop, "D:/shape.test");
 * @param {Property}	 [shapeProp]	- The path property to export
 * @param {String}	[file]	- The path or File where the jsxinc shape will be written
 * @param {boolean}	[offsetToCenter=false]	- If true, offset the path to the center
 * @param {boolean}	[append=false]	- If true, appends the shape at the end of the file instead of overwriting it.
 * @param {string}	[varName=shape]	- A name for the variable storing the shape
 * @return {int} A status code. [0: success, ...]
 */
DuAEF.DuAE.Property.Bezier.exportToJsxinc = function ( pathProperty, file, offsetToCenter, append, varName ) {
    append = def( append, false );

    if ( !( file instanceof File ) ) file = new File( file );

    var mode = 'w';
    if ( append ) mode = 'a';

    if ( !file.open( mode ) ) return 3;

    if ( append ) file.write( '\n' );
    file.write( DuAEF.DuAE.Property.Bezier.scriptify( pathProperty, offsetToCenter, varName ) );

    file.close();
    return 0;
}

/**
 * Makes a horizontal symetry transformation on the paths, using the same axis of symetry for all shapes (shapes must be on the same layer).
 * @param {Property[]}	pathProperties	- The After Effects Properties containing the paths to symetrize
 */
DuAEF.DuAE.Property.Bezier.horizontalSymetry = function ( pathProperties ) {
    if ( !( pathProperties instanceof Array ) ) pathProperties = [ pathProperties ];

    var shapes = [];
    //get shapes and center
    var center = 0;
    var verticesCount = 0;
    for ( var i = 0; i < pathProperties.length; i++ ) {
        var prop = pathProperties[ i ];
        if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
        var shape = prop.value;
        shapes.push( shape );
        for ( var j = 0; j < shape.vertices.length; j++ ) {
            verticesCount++;
            center += shape.vertices[ j ][ 0 ];
        }
    }
    center = center / verticesCount;
    center = center * 2;

    //compute
    for ( var i = 0; i < shapes.length; i++ ) {
        var prop = pathProperties[ i ];
        if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
        var shape = shapes[ i ];
        var vertices = shape.vertices;
        var inTangents = shape.inTangents;
        var outTangents = shape.outTangents;
        for ( var j = 0; j < shape.vertices.length; j++ ) {
            vertices[ j ][ 0 ] = center - vertices[ j ][ 0 ];
            inTangents[ j ][ 0 ] = -inTangents[ j ][ 0 ];
            outTangents[ j ][ 0 ] = -outTangents[ j ][ 0 ];
        }
        shape.vertices = vertices;
        shape.inTangents = inTangents;
        shape.outTangents = outTangents;
        if ( prop.numKeys > 0 ) {
            prop.setValueAtTime( DuAEF.DuAE.Property.getComp( prop ).time, shape );
        } else {
            prop.setValue( shape );
        }
    }
}

/**
 * Makes a vertical symetry transformation on the paths, using the same axis of symetry for all shapes (shapes must be on the same layer).
 * @param {Property[]}	pathProperties	- The After Effects Properties containing the paths to symetrize
 */
DuAEF.DuAE.Property.Bezier.verticalSymetry = function ( pathProperties ) {
    if ( !( pathProperties instanceof Array ) ) pathProperties = [ pathProperties ];

    var shapes = [];
    //get shapes and center
    var center = 0;
    var verticesCount = 0;
    for ( var i = 0; i < pathProperties.length; i++ ) {
        var prop = pathProperties[ i ];
        if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
        var shape = prop.value;
        shapes.push( shape );
        for ( var j = 0; j < shape.vertices.length; j++ ) {
            verticesCount++;
            center += shape.vertices[ j ][ 1 ];
        }
    }
    center = center / verticesCount;
    center = center * 2;

    //compute
    for ( var i = 0; i < shapes.length; i++ ) {
        var prop = pathProperties[ i ];
        if ( prop instanceof PropertyInfo ) prop = prop.getProperty();
        var shape = shapes[ i ];
        var vertices = shape.vertices;
        var inTangents = shape.inTangents;
        var outTangents = shape.outTangents;
        for ( var j = 0; j < shape.vertices.length; j++ ) {
            vertices[ j ][ 1 ] = center - vertices[ j ][ 1 ];
            inTangents[ j ][ 1 ] = -inTangents[ j ][ 1 ];
            outTangents[ j ][ 1 ] = -outTangents[ j ][ 1 ];
        }
        shape.vertices = vertices;
        shape.inTangents = inTangents;
        shape.outTangents = outTangents;
        if ( prop.numKeys > 0 ) {
            prop.setValueAtTime( DuAEF.DuAE.Property.getComp( prop ).time, shape );
        } else {
            prop.setValue( shape );
        }
    }
}

/**
 * Gets the vertices array in comp coordinates.
 * @param {Property|PropertyInfo} prop - The property, a bezier path.
 * @return {float[][]} The vertices in comp coordinates.
 */
DuAEF.DuAE.Property.Bezier.verticesToComp = function ( pathProperty ) {
    var propInfo = DuAEF.DuAE.Property.Bezier.checkProperty( pathProperty );
    if ( !propInfo ) throw "Expected a shape property, got another type of value.";
    var pathProperty = propInfo.getProperty();

    //get the layer matrix
    var matrix = DuAEF.DuAE.Shape.getTransformMatrix( propInfo );

    //apply transform
    var vertices = [];
    var origin = pathProperty.value.vertices;
    for ( var i = 0, num = origin.length; i < num; i++ ) {
        vertices.push( matrix.applyToPoint( origin[ i ] ) );
    }

    return vertices;
}

/**
 * Checks if the property is a bezier property, or return the child bezier property if this is a shape or a mask
 * @param {Property|PropertyInfo} prop - The property
 * @return {PropertyInfo|null} the bezier property or null if it is not.
 */
DuAEF.DuAE.Property.Bezier.checkProperty = function ( prop ) {
    propInfo = new PropertyInfo( prop );
    prop = propInfo.getProperty();

    //get the path property in case it was a mask or a shape path selected
    if ( prop.matchName == "ADBE Vector Shape - Group" ) {
        prop = prop.property( "ADBE Vector Shape" );
        return new PropertyInfo( prop );
    } else if ( prop.matchName == "ADBE Mask Atom" ) {
        prop = prop.property( "ADBE Mask Shape" );
        return new PropertyInfo( prop );
    } else if ( prop.propertyType !== PropertyType.PROPERTY ) return null;
    if ( prop.propertyValueType !== PropertyValueType.SHAPE ) return null;

    return propInfo;
}
// ==================== |--------------| ====================
// ==================== | DuAEShapeLib | ====================
// ==================== |--------------| ====================

/**
 * Shape Layers methods
 * @namespace
 * @memberof DuAEF.DuAE
 */
DuAEF.DuAE.Shape = {};

/**
 * Gets the transformation matrix for all the parent groups of a given property
 * @param {Property|PropertyInfo} prop - The property
 * @return {Matrix} The transformation matrix.
 */
DuAEF.DuAE.Shape.getTransformMatrix = function ( prop ) {
    var propInfo = new PropertyInfo( prop );
    prop = propInfo.getProperty();
    var matrix = DuAEF.DuAE.Layer.getTransformMatrix( propInfo.layer );

    var props = [];

    //get the groups
    var parentProp = prop;
    while ( parentProp.parentProperty ) {
        if ( parentProp.matchName == "ADBE Vector Group" ) {
            props.push( parentProp );
        }
        // Traverse up the property tree
        parentProp = parentProp.parentProperty;
    }

    //apply transforms from the ancestor
    for ( var i = props.length - 1; i >= 0; i-- ) {
        var p = props[ i ].property( "ADBE Vector Transform Group" );
        matrix.translate( -p.property( "ADBE Vector Anchor" ).value );
        matrix.translate( p.property( "ADBE Vector Position" ).value );
        matrix.rotate( p.property( "ADBE Vector Rotation" ).value );
        matrix.scale( p.property( "ADBE Vector Scale" ).value / 100 );
    }

    return matrix;
}

/**
 * Checks if this shape layers contains only one shape, one fill, and one stroke,\n
 * just like After Effects creates them at first.
 * @param {Layer} layer - The layer to test
 * @return {bool} True if the layer is a shape layer containing only one shape, one fill, and one stroke in a group. False otherwise.
 */
DuAEF.DuAE.Shape.isSingleShape = function ( layer ) {
    if ( !( layer instanceof ShapeLayer ) ) return false;

    var content = layer.property( "ADBE Root Vectors Group" );
    if ( content.numProperties != 1 ) return false;

    var shape = content.property( "ADBE Vector Group" ).property( "ADBE Vectors Group" );
    if ( shape.numProperties != 3 ) return false;

    var path = shape.property( 1 );
    if ( path.matchName != "ADBE Vector Shape - Group" && path.matchName != "ADBE Vector Shape - Rect" && path.matchName != "ADBE Vector Shape - Ellipse" && path.matchName != "ADBE Vector Shape - Star" ) return false;
    var stroke = shape.property( 2 );
    if ( stroke.matchName != "ADBE Vector Graphic - Stroke" ) return false;
    var fill = shape.property( 3 );
    if ( fill.matchName != "ADBE Vector Graphic - Fill" ) return false;

    return true;
}
// ==================== |-------------| ====================
// ==================== | DuBinaryLib | ====================
// ==================== |-------------| ====================

/*
	DuBinaryLib
  Library to create/extract json representations of binary files
	Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
	https://rainboxprod.coop

	_Contributors:_
		Nicolas Dufresne - Lead developer

	This file is part of DuAEF.

	DuAEF is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	DuAEF is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* Tools to include and extract binary files directly in your script files, allowing to deploy only one .jsx files containing any needed image, preset or executable.
*
* You can easily convert binaries to text (*.jsxinc) files using the {@link https://github.com/Rainbox-dev/DuAEF/tree/master/tools|tools provided with DuAEF}. You can then include those *.jsxinc files inside your scripts, and use the {@link DuAEF.DuBinary.toFile|toFile()} method to extract and use them at runtime.
* @namespace
* @memberof DuAEF
* @example
* //First, include the text representation of the file (Add a # before the include word)
* include icon.png.jsxinc
* // Now, a variable called `icon` (the original file name without extension) is available, you can pass this object to the `DuBinary.toFile()` method to extract it and get an ExtendScript File object representation of it.
* // Note: This object is an instance of a `DuBinaryFile` class, which contains all information and a string representation of the original binary file
* var iconFile = DuBinary.toFile(icon);
* iconFile.fsName; // C:\users\duduf\appData\Roaming\DuAEF\icon.png (Example on Windows)
* //You can also directly use a PNG string in ScriptUI without extracting the file. (Add a # before the include word)
* var button = somePanel.add('iconbutton',undefined,icon.binAsString);
*/
DuAEF.DuBinary = {};

/**
 * Creates a file from a DuBinaryFile object representation.
 * @memberof DuAEF.DuBinary
 * @param {DuBinaryFile}	duBinaryFile  	- The DuBinaryFile object containing the string representation.<br />
 * This object will be replaced by the File object created.<br />
 * If a file object is provided (the file has already been extracted), does nothing.
 * @param {string}			[outputFileName=DuAEF.DuJS.Fs.duaefData/DuAEF/scriptName/category/binaryfilename]	- The output filename.
 * @param {boolean}			[onlyAtFirstRun=true]	- Does not extract the file if it already exists and this is not the first time this version of the script is being used.<br />
 * The file will be extracted only if the script is new or has just been updated (the version changed).
 * @return {File|null} The file created, null if the file could not be written.<br />
 * If the file is not written, check user permissions, and check if the file and network access preference is checked<br />
 * You can check {@link DuAEF.DuAE.App.hasFilesAndNetworkAccess} and call {@link DuAEF.DuAE.App.askFilesAndNetworkAccess}.
 * @example
 * //First, include the text representation of the file (Add a # before the include word)
 * include executable.exe.jsxinc
 * // Now, a variable called `executable` (the original file name without extension) is available, you can pass this object to the `DuBinary.toFile()` method to extract it and get an ExtendScript File object representation of it.
 * // Note: This object is an instance of a `DuBinaryFile` class, which contains all information and a string representation of the original binary file
 * var execFile = DuBinary.toFile(executable);
 * //Now, the file exists in the file system, and execFile is an ExtendScript File object.
 * // The `DuBinary.toFile()` method extracts the file to the Application Data folder by default.
 * execFile.fsName; // C:\users\duduf\appData\Roaming\DuAEF\icon.png (Example on Windows)
 * @example
 * //You can specify the output file name. (Add a # before the include word)
 * include preset.ffx.jsxinc
 * var presetFile = DuBinary.toFile(preset,"C:/test/test_preset.ffx");
 * presetFile.fsName; // C:\test\test_preset.exe");
 */
DuAEF.DuBinary.toFile = function(duBinaryFile,outputFileName,onlyAtFirstRun)
{
  onlyAtFirstRun = def( onlyAtFirstRun, true );
	if (!DuAEF.DuAE.App.hasFilesAndNetworkAccess) return null;
  if (typeof duBinaryFile === 'undefined') return;
	if (duBinaryFile instanceof File) return;
  var rootFolder = DuAEF.DuJS.Fs.duaefData.absoluteURI;
  if (DuAEF.scriptName != '') rootFolder += '/'  + DuAEF.scriptName;
	if (typeof outputFileName === 'undefined') outputFileName = rootFolder + '/' + duBinaryFile.category + '/' + duBinaryFile.fileName;
	var file = new File(outputFileName);

  // performance
  // do not extract if the file exists and we're not in the first run (or debug mode)
  if (file.exists && !DuAEF.scriptFirstRun && !DuAEF.debug)
  {
    return file;
  }

	if (!file.exists)
	{
		var folder = new Folder(file.path);
		if (!folder.exists)
		{
			folder.create();
		}
	}

	file.encoding = 'BINARY';
	if (file.open('w'))
	{
		success = file.write(duBinaryFile.binAsString);
		file.close();
	}

	duBinaryFile = file;

	return file;
}

/**
 * Creates a DuBinaryFile object from a binary file
 * @memberof DuAEF.DuBinary
 * @param {File}    file      - The File to convert
 * @param {string}  [category]  - A Category for the file, will be used as a subfolder to extract files. Can have subcategories like "category/subcategory".
 * @return {DuBinaryFile} The DuBinaryFile object containing the file as a string
 */
DuAEF.DuBinary.toObj = function(binaryFile,category)
{
  var content = '';

  binaryFile.encoding = "BINARY";
  if (binaryFile.open("r"))
  {
    content = binaryFile.read().toSource();
    content = content.substr(content.indexOf("\"")+1, content.length);
    content = content.substr(0, content.lastIndexOf("\""));
    binaryFile.close();
  }

  var obj = new DuBinaryFile(content,binaryFile.name,category);

  return obj;
}

/**
 * Converts a binary file to a jsxinc file
 * @memberof DuAEF.DuBinary
 * @param {File}    binaryFile      - The binary file to convert
 * @param {string}  [category]        - A Category for the file, will be used as a subfolder to extract files. Can have subcategories like "category/subcategory". Default: ""
 * @param {string}  [outputFileName=Same folder, same name with .json extension]  - The file name for the output.
 * @param {string}	[varName=File name without extension]	- The name of the variable used to store the javascript object.
 * @return {File} The json file created
 */
DuAEF.DuBinary.convertToIncludeFile = function(binaryFile,category,outputFileName,varName)
{
	if (typeof  outputFileName === 'undefined') outputFileName = binaryFile.absoluteURI + '.jsxinc';
	if (typeof varName === 'undefined') varName = binaryFile.name.replace(/\..+/,'');
	varName = DuAEF.DuJS.String.replace(varName,'%20','_');
	var duBinary = DuAEF.DuBinary.toObj(binaryFile,category);
	var jsString = 'var ' + varName + ' = ';
	jsString += '{"binAsString":"' + duBinary.binAsString + '","fileName":"' + duBinary.fileName + '","category":"' + duBinary.category + '"}'
	jsString += ';\r\n';
	jsString += varName + ';\r\n';
	var outputFile = new File(outputFileName);
	outputFile.encoding = 'UTF8';
	if (outputFile.open("w", "TEXT", "????"))
	{
		outputFile.write(jsString);
		outputFile.close();
	}

    return outputFile;
}

/**
 * Converts a JS file to a binary file
 * @memberof DuAEF.DuBinary
 * @param {File}    jsFile        - The JS file to convert
 * @param {string}	[outputFileName=DuAEF.DuJS.Fs.duaefData/category/binaryfilename]	- The output filename.
 * @return {File} The binary file created, or null if failed
 * @example
 * //If you don't want to include the file in the script. (Add a # before the include word)
 * var stringFile = new File("C:\test\image.jpg.jsxinc");
 * var jpgFile = DuBinary.convertToBinaryFile(stringFile);
 * // Warning, this method uses `$.eval()` which is a bad security issue.
 * //This will be changed in the future, but for now, do not use this method for anything else than debugging and testing.
 * @todo Do not use $.eval() but parse the file.
 */
DuAEF.DuBinary.convertToBinaryFile = function(jsFile,outputFileName)
{
	//TODO parse instead of eval
	var obj = $.eval(jsFile);
	return this.toFile(obj);
}

/**
 *  Extract paths from a given file. Paths are not checked, be sure to check them before using them. (checking if they exist)
 * Ignore lines starting with "#include".
 * Also returns the surounding elements "path" or 'path'.
 * @memberof DuAEF.DuBinary
 * @param {String}    filePath        - The path to the file
 * @return {string[]} List of paths.
 * @return {int} 1 if the file can't be opened
*/
DuAEF.DuBinary.parseFilePaths = function(filePath)
{
    var paths = [];

    var file = new File(filePath);
    if(!file.open("r")) return 1; // Unable to open the file

    var folder = file.parent.absoluteURI;

    var indexSimple, indexDouble, indexEnd;
    var offset = 0;
    var simple = false;
    var currentString;
    var start;
    // Line by line reading
    while(!file.eof )
    {
          var line = file.readln();

          if (line.indexOf("#include", 0) == 0) continue;

          // Detect strings
          var strings = [];
          offset = 0;
          do{
              // Start string
              indexDouble = line.indexOf('"', offset); // "
              indexSimple = line.indexOf("'", offset); // '
              if(indexDouble == indexSimple) break; // No match
              if((indexDouble < indexSimple || indexSimple == -1) && indexDouble != -1)
              {
                    simple = false;
                    offset = indexDouble + 1;
              }else if(indexSimple != -1)
              {
                    simple = true;
                    offset = indexSimple + 1;
               }else break;
                start = offset - 1;
                // End string
               do{
                    if(simple)
                        indexEnd = line.indexOf("'", offset) + 1; // '
                    else
                        indexEnd = line.indexOf('"', offset) + 1; // "
                    offset = indexEnd + 1;
                } while (indexEnd != -1 && line.charAt(indexEnd - 1) == '\\'); // Escaped end string

                if(indexEnd == -1) break;
                // String
                currentString = line.slice(start, indexEnd);

                // Test if its a file
                // Dumb check
                var indexPoint = currentString.lastIndexOf('.');
                if(indexPoint != -1 && indexPoint != currentString.length - 1)
                {
                    paths.push(currentString);
                }

          }while(indexSimple != indexDouble);

    }

    file.close();

    return paths;
}

/**
 * Constructs a new string representation of a file
 * @class DuBinaryFile
 * @classdesc Represents a binary file as a string and a filename.
 * @param	{string}	binAsString			- The string representation.
 * @param	{string}	fileName			- The name of the original file.
 * @param	{string}	[category]			- A Category for the file, will be used as a subfolder to extract files. Can have subcategories like "category/subcategory".
 * @property {string}	binAsString	   - The string representation.
 * @property {string}	fileName  	   - The name of the original file
 * @property {string}	category       - A Category for the file, will be used as a subfolder to extract files. Can have subcategories like "category/subcategory".
 */
function DuBinaryFile(binAsString,fileName,category)
{
	this.binAsString = binAsString;
	fileName = DuAEF.DuJS.String.replace(fileName,'%20','_');
	this.fileName = fileName;
	if (category === undefined) category = '';
	this.category = category;
}
// ==================== |-------------| ====================
// ==================== | DuFFMpegLib | ====================
// ==================== |-------------| ====================

/*
	DuFFMpeg
	Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
	https://rainboxprod.coop

	_Contributors:_
		Nicolas Dufresne - Lead developer

	_DuFFMpeg makes use of:_

		• FFMpeg
		http://ffmpeg.org

	This file is part of DuFFMpeg.

	DuFFMpeg is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	DuFFMpeg is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with DuFFMpeg. If not, see <http://www.gnu.org/licenses/>.
*/

//TODO Use DuProcessLibs

/**
 * Constructs a new FFMpeg encoder.
 * The constructor will try to find the ffmpeg binary in the same folder as DuFFMpeg, or an (ffmpeg) subfolder, or in the scripts folder of After Effects.
 * If ffmpeg is not in one of those, the property ffmpegPath will be an empty string, and it has to be set by the user.
 * @class DuFFMpeg
 * @classdesc A class used to easily encode medias with ffmpeg
 * @param {string}	   [options=-stats]			- The options of the encoder.
 * @property {string}	  ffmpegPath		- The path to the FFMpeg binary.
 * @property {string}	   options			- The options of the encoder.
 * @property {FFMpegQueueItem[]} queue		- The render queue
 * @example
 * //Very simple transcoding
 * //create a new FFMpeg instance
 * var ffmpeg = new DuFFMpeg();
 * //input file. Note that you can use any path format you want, URI, fsName, or path, using either / or \
 * var input = new DuFFMpegInputModule('C:/RAINBOX/Test video 1.mp4');
 * //output to an audio wav file using PCM 32 bit float little-endian codec
 * var output = new DuFFMpegOutputModule('pcm_f32le','C:/RAINBOX/Test audio 1.wav');
 * //create the render queue item
 * var item = new DuFFMpegQueueItem(input,[output]);
 * //add the item to the render queue
 * ffmpeg.queue.push(item);
 *
 * ffmpeg.launch(); //and launch the process!
 * @example
 * //Transcoding two different files, and a few more options
 * //new FFMpeg instance, encoding will overwrite files, and statistics will be shown
 * var ffmpeg = new DuFFMpeg('-y -stats');
 * //input file
 * var input = new DuFFMpegInputModule('C:/RAINBOX/Test video 1.mp4');
 * //output to an audio wav file using PCM 32 bit float little-endian codec, forcing 48000Hz sampling and disabling video
 * var output = new DuFFMpegOutputModule('pcm_f32le','C:/RAINBOX/Test audio 1.wav','-ar 48000 -vn');
 * //create the render queue item
 * var item = new DuFFMpegQueueItem(input,[output]);
 * //add the item to the render queue
 * ffmpeg.queue.push(item);
 *
 * //another render queue item
 * var input = new DuFFMpegInputModule('C:/RAINBOX/Test video 2.mp4');
 * var output = new DuFFMpegOutputModule('pcm_f32le','C:/RAINBOX/Test audio 2.wav','-ar 48000 -vn');
 * var item = new DuFFMpegQueueItem(input,[output]);
 * ffmpeg.queue.push(item);
 *
 * //and launch the process! Both items will be transcoded.
 * ffmpeg.launch();
 */
function DuFFMpeg(options)
{
	if (typeof options === 'undefined') options = '-stats';

	this.ffmpegPath = '';

	//try to detect the ffmpeg path
	var ffmpegBinName = '';
	if (DuAEF.win) ffmpegBinName = 'ffmpeg.exe';
	else ffmpegBinName = 'ffmpeg';
	//first, in the same dir
	var thisScriptFile = new File($.fileName);
	var ffmpegFile = new File(thisScriptFile.parent.absoluteURI + '/' + ffmpegBinName);
	//in an (ffmpeg) subfolder
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(thisScriptFile.parent.absoluteURI + '/(ffmpeg)/' + ffmpegBinName);
	}
	//in AE Scripts folder
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(Folder.appPackage.absoluteURI + '/Scripts/' + ffmpegBinName);
	}
	//in AE Scripts/(ffmpeg) folder
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(Folder.appPackage.absoluteURI + '/Scripts/(ffmpeg)/' + ffmpegBinName);
	}
	//in AE ScriptUI Panels
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(Folder.appPackage.absoluteURI + '/Scripts/ScriptUI Panels/' + ffmpegBinName);
	}
	//in AE ScriptUI Panels/(ffmpeg)
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(Folder.appPackage.absoluteURI + '/Scripts/ScriptUI Panels/(ffmpeg)/' + ffmpegBinName);
	}
	//in the parent dir
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(thisScriptFile.parent.parent.absoluteURI + '/' + ffmpegBinName);
	}
	//in the parent dir (fmmpeg)
	if (!ffmpegFile.exists)
	{
		ffmpegFile = new File(thisScriptFile.parent.parent.absoluteURI + '/(ffmpeg)' + ffmpegBinName);
	}

	if (ffmpegFile.exists) this.ffmpegPath = ffmpegFile.fsName;

	this.options = options;
	this.queue = [];
}

/**
 * Launches encoding
 * @memberof DuFFMpeg
 */
DuFFMpeg.prototype.launch = function ()
{
	if (!DuAEF.DuJS.Fs.fileExists(this.ffmpegPath) || this.ffmpegPath == '') return;

	var cmd = '';

	var ffmpegCmd = '';

	if (DuAEF.win) ffmpegCmd += '"' + this.ffmpegPath + '"';
	else
	{
	  var ffmpegFile = new File(this.ffmpegPath);
	  ffmpegCmd += '"' + ffmpegFile.parent.fsName + '"/./' + ffmpegFile.name;
	}

	if (DuAEF.win) cmd += 'cmd.exe /c "';

	//add RenderItems
	for (var i = 0 ; i < this.queue.length ; i++)
	{
		if (i > 0) cmd += ' & ';
		cmd += ffmpegCmd + ' ' + this.options;
		var item = this.queue[i];
		cmd += ' ' + item.input.options;
		cmd += ' -i "' + item.input.inputPath + '"';
		//add outputs
		for (var j = 0 ; j < item.outputs.length ; j++)
		{
			var output = item.outputs[j];
			cmd += ' -c ' + output.codec;
			cmd += ' ' + output.options;
			cmd += ' "' + output.outputPath + '"';
		}
	}

	if (DuAEF.win) cmd += '"';

	//launch!

	// mac hack, do not wait for ffmpeg as it freezes AE
	if (DuAEF.mac) cmd = cmd + ' && ';

	system.callSystem(cmd);

	// mac hack, but let's wait anyway
	if (DuAEF.mac)
	{
		//timeout
		var currentDate = new Date();
		var timeout = currentDate.getTime() + 30000;
		var checkTime = new Date();

		var cmd = 'ps -A | grep "[f]fmpeg"';

		//wait
		while(checkTime.getTime() < timeout)
		{
			var test = system.callSystem(cmd);
			if (test == '') break;
			$.sleep(300);
			checkTime = new Date();
		}
	}
}

/**
 * Constructs a new FFMpegInputModule module
 * @class DuFFMpegInputModule
 * @classdesc A class used to easily encode medias with ffmpeg
 * @param {string}	inputPath		- The path to the input file.
 * @param {string}	[options]			- The options for the input file.
 * @property {string}	inputPath		- The path to the input file.
 * @property {string}	options			- The options for the input file. Default: ''
 */
function DuFFMpegInputModule(inputPath,options)
{
	if (!inputPath) throw "No input file set";
	if (inputPath == '') throw "No input file set";
	var inputFile = new File(inputPath);
	if (!inputFile.exists) throw "The input file does not exist";

	this.inputPath = inputFile.fsName;

	if (!options) options = '';
	this.options = options;
}

/**
 * Constructs a new FFMpegOutputModule module
 * @class DuFFMpegOutputModule
 * @classdesc A class used to easily encode medias with ffmpeg
 * @param {string}	codec			- The codec used for transcoding.
 * @param {string}	outputPath		- The path to the output file.
 * @param {string}	[options]			- The options for the output file (other than setting the codec).
 * @property {string}	codec			- The codec used for transcoding.
 * @property {string}	outputPath		- The path to the output file.
 * @property {string}	options			- The options for the output file (other than setting the codec).
 */
function DuFFMpegOutputModule(codec,outputPath,options)
{
	if (!codec) throw "No codec set";
	if (codec == '') throw "No codec set";

	this.codec = codec;

	//f (!outputPath) throw "No output file set";
	//if (outputPath == '') throw "No output file set";

	var outputFile = new File(outputPath);
	this.outputPath = outputFile.fsName;

	if (!options) options = '';
	this.options = options;
}

/**
 * Constructs a new FFMpegQueueItem
 * @class DuFFMpegQueueItem
 * @classdesc A class used to easily encode medias with ffmpeg
 * @param {FFMpegInputModule}		input	  - The input module.
 * @param {FFMpegOutputModule[]}	outputs	   - The output modules
 * @property {FFMpegInputModule}	input	  - The input module.
 * @property {FFMpegOutputModule[]}	outputs	   - The output modules
 */
function DuFFMpegQueueItem(input,outputs)
{
	if (!input) throw "No input set";

	this.input = input;

	if (!outputs) throw "No output set";
	if (outputs.length < 1) throw "Empty outputs";

	this.outputs = outputs;
}
// ==================== |---------| ====================
// ==================== | DuJSLib | ====================
// ==================== |---------| ====================

/**
	* Useful JavaScript tools
	* @namespace
	* @memberof DuAEF
*/
DuAEF.DuJS = {};

/**
 * Assigns a default value to a var if it's undefined.
 * @param {object} val - The variable to set
 * @param {object} defaultVal - The default value
 * @param {boolean} [doPostInit=true] - True to trigger the post-init method of DuAEF when run.<br />
 * Set it to false if it is used in a method which has to run during initialisation of your script,<br />
 * and true if it is used in a method run by the user later.
 * @return {object} The var
 */
def = function(val,defaultVal)
{
	return typeof val === 'undefined' ? defaultVal : val;
}

/**
 * Improved typeof which returns the type of object instead of 'object'
 * @param {any} exp - The expression to check.
 * @return {string} The type. For primitives, in lower case ('string', 'number', 'boolean', 'null', 'undefined')
*/
DuAEF.DuJS.typeof = function (value) {
    var type = typeof value;

    switch(type) {
        case 'object':
        return value === null ? 'null' : Object.prototype.toString.call(value).
            match(/^\[object (.*)\]$/)[1]

        case 'function':
        return 'Function';

        default:
        return type;
    }
}

// ==================== |---------------| ====================
// ==================== | DuIteratorLib | ====================
// ==================== |---------------| ====================

/*
	DuJSLib
	Library javascript tools
	Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
	https://rainboxprod.coop

	_Contributors:_
	Nicolas Dufresne - Lead developer

	This file is part of DuAEF.

	DuAEF is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	DuAEF is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/


/**
	* Constructs an iterator
	* @example
	* //When iterating through the whole list,
	* //using the function do() has the best performance
	* //but you can not break the loop.
	* //If you need it, instead of using the word 'continue',
	* //just make the function return.
	* var it = new Iterator(layers);
	* it.do(function doSomething(layer) {
	* 	layer.name = something;
	*	//If we need to continue to the next item, return.
	*	if (dontWantThis) return;
	*	//else do something here
	* });
	* @example
	* //If you need to break the loop at one time,
	* //like if you're searching for something,
	* //you can use this method instead, which is a bit less quick than using the function do()
	* var it = new Iterator(layers);
	* while (layer = it.next())
	* {
	*	//do something with the layer
		layer.name = something;
		//when found what we're looking for
		if (found) break;
	* }
	* @class Iterator
	* @classdesc An iterator object to use for easier loops
	* @property {Array|Collection} list - An array or an After Effects Collection
	* @param {Array|Collection} list - An array or an After Effects Collection
	* @property {int} min - The minimum value (inclusive)
	* @property {int} max - The maximum (inclusive)
	* @property {int} length - The number of items
	* @property {int} current - The current item number
	* @property {boolean} atEnd - true if the iterator has reached the end
	* @property {boolean} atStart - true if the iterator is at the start
	* @property {boolean} valid - true if the iterator is between min and max. false until next() or previous() has been called at least once
	* @property {boolean} isCollection - true if the list is a Collection, false if it's a controller
*/
function Iterator(list)
{
	//check if list is an Array, a collection, or something else.
	//if something else, store it in a one-item array
	this.isCollection = DuAEF.DuAE.isCollection(list);
	if (!(list instanceof Array) && !this.isCollection)
	{
		list = [list];
	}

	this.min = 0;
	this.max = list.length -1;
	this.length = list.length;
	if (list.length == 0) return;
	if (this.isCollection)
	{
		this.min = 1;
		this.max = this.length;
	}
	this.current = -1;
	this.atStart = false;
	this.atEnd = false;
	this.valid = false;
	this.list = list;
}

/**
	* Increments the Iterator<br />
	* Must be called at least once to validate the iterator
	* @return {Object} The next item, or null if there isn't
*/
Iterator.prototype.next = function ()
{
	if (this.length == 0) return null;

	if (!this.valid)
	{
		return this.goToStart();
	}
	if (this.current < this.max)
	{
		return this.goTo(this.current + 1);
	}

	return null;
}

/**
	* Decrements the Iterator
	* if it's called while valid is false, goes to the end
	* @return {Object} The previous item, or null if there isn't
*/
Iterator.prototype.previous = function ()
{
	if (this.length == 0) return null;
	if (!this.valid)
	{
		return this.goToEnd();
	}
	if (this.current > this.min)
	{
		return this.goTo(this.current - 1);
	}

	return null;
}

/**
	* Goes to the end of the Iterator
	* @return {Object} The item at the end, or null if length is 0
*/
Iterator.prototype.goToEnd = function ()
{
	if (this.length == 0) return null;
	return this.goTo(this.max);
}

/**
	* Goes to the start of the Iterator
	* @return {Object} The item at the start, or null if length is 0
*/
Iterator.prototype.goToStart = function ()
{
	if (this.length == 0) return null;
	return this.goTo(this.min);
}

/**
	* Sets the iterator on the index
	* @param {int} index - The index
	* @return {Object} The item at index, or null if there isn't
*/
Iterator.prototype.goTo = function(index)
{
	if (this.length == 0) return;
	this.current = index;
	if (this.current < this.min || this.current > this.max) this.valid = false;
	else this.valid = true;
	if (this.current == this.min) this.atStart = true;
	else this.atStart = false;
	if (this.current == this.max) this.atEnd = true;
	else this.atEnd = false;

	if (this.valid) return this.list[this.current];
	else return null;
}

/**
	* Executes a function on each item of the List
	* @param {function} callBack - The function to execute, which takes one parameter: an item of the list
*/
Iterator.prototype.do = function (callBack)
{
	if (this.length == 0) return;
	var current = this.current;

	for (var i = this.min ; i <= this.max ; i++)
	{
		this.valid = true;
		this.current = i;
		callBack(this.list[i]);
	}

	this.goTo(current);
}

/**
	* Gets the item at an index,<br />
	* without changing the current iterator index.
	* @param {int} index - The index of the item
	* @return {Object} The item at index, or null if there isn't one
*/
Iterator.prototype.itemAt = function (index)
{
	if (index < this.min) return null;
	if (index > this.max) return null;
	else return this.list[index];
}

/**
	* Gets the first item,<br />
	* without changing the current iterator index.
	* @return {Object} The first item, or null if there isn't one
*/
Iterator.prototype.firstItem = function ()
{
	if (this.list.length == 0) return null;
	else return this.list[this.min];
}

/**
	* Gets the last item,<br />
	* without changing the current iterator index.
	* @return {Object} The last item, or null if there isn't one
*/
Iterator.prototype.lastItem = function ()
{
	if (this.list.length == 0) return null;
	else return this.list[this.max];
}
// ==================== |--------------| ====================
// ==================== | DuJSArrayLib | ====================
// ==================== |--------------| ====================

/**
	* JavaScript Array related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Array = {};

/**
	* Checks if this is an Array or an After Effects collection type
	* @memberof DuAEF.DuJS.Array
	* @param {Array|Collection} list - The list to check
	* @return {boolean} true if this is a Cllection or an Array
*/
DuAEF.DuJS.Array.isList = function (list)
{
	return (list instanceof Array || DuAEF.DuAE.isCollection(list));
}

/**
	* A function to compare two elements in an array
	* @callback DuAEF.DuJS.Array.indexOf~comparisonFunction
	* @memberof DuAEF.DuJS.Array.indexOf
	* @param {*} elementInArray The element in the array
	* @param {*} value The value to compare
	* @return {bool} true if the two values should be considered the same
*/

/**
	* Gets the first index of a value in an Array, or -1 if not found
	* @memberof DuAEF.DuJS.Array
	* @param {Array}	arr	- The array
	* @param {*}	value	- The value to find. Must be compatible with the == operand, or provide a comparison function
	* @param {function}	[comparisonFunction]	- A function which compares two values which returns true if the values are considered the same.
	* @return {int}	The index of the value, -1 if not found
*/
DuAEF.DuJS.Array.indexOf = function (arr,value,comparisonFunction)
{
	if (value == undefined) throw "Value can not be undefined";
	var useFunction = typeof comparisonFunction === 'function';

	for (var i = 0;i<arr.length;i++)
	{
		if (!useFunction && arr[i] == value) return i;
		if (useFunction && comparisonFunction(arr[i],value)) return i;
	}
	return -1;
}

/**
	* Checks if the array has duplicate values
	* @memberof DuAEF.DuJS.Array
	* @param {Array}	arr	- The array
	* @return {boolean}	true if the array has duplicate values
*/
DuAEF.DuJS.Array.hasDuplicates = function (arr)
{
	for (var i = 0;i<arr.length-1;i++) {
		for (var j=i+1;j<arr.length;j++) {
			if (arr[i] === arr[j]) return true;
		}
	}
	return false;
}

/**
	* Returns all duplicated values found in the array
	* @memberof DuAEF.DuJS.Array
	* @param {Array}	arr	- The array
	* @return {Array}	The duplicated values
*/
DuAEF.DuJS.Array.getDuplicates = function (arr)
{
	var duplicates = [];
	for (var i = 0;i<arr.length-1;i++) {
	for (var j=i+1;j<arr.length;j++) {
	if (arr[i] === arr[j]) duplicates.push(arr[j]);
	}
	}
	DuAEF.DuJS.Array.removeDuplicates(duplicates);
	return duplicates;
}

/**
	* Removes all duplicated values from the Array, and returns them
	* @memberof DuAEF.DuJS.Array
	* @param {Array}	arr	- The array
	* @param {function}	[comparisonFunction] - A function which compares two values which returns true if the values are considered the same.
	* @return {Array}	The duplicated (and removed) values
*/
DuAEF.DuJS.Array.removeDuplicates = function (arr, comparisonFunction)
{
	var useFunction = typeof comparisonFunction === 'function';
	var removed = [];
	for (var i = 0;i<arr.length-1;i++)
	{
        for (var j=i+1;j<arr.length;j++)
		{
            if (! useFunction && arr[i] === arr[j]) removed = removed.concat(arr.splice(j,1));
			if (useFunction && comparisonFunction(arr[i],arr[j]) ) removed = removed.concat(arr.splice(j,1));
        }
	}
	return removed;
}

/**
	* Compares two arrays.<br />
	* The items in the arrays must be compatible with the == operand
	* @memberof DuAEF.DuJS.Array
	* @param {Array|Collection} array1 - The array
	* @param {Array|Collection} array2 - The array
	* @param {int} [floatPrecision=-1] - The precision for (float) number comparison, number of decimals. Set to -1 to not use.
	* @return {boolean} true if the two arrays contain the same values
*/
DuAEF.DuJS.Array.compare = function (array1,array2,floatPrecision)
{
	if (!DuAEF.DuJS.Array.isList(array1) && !DuAEF.DuJS.Array.isList(array2))
	{
		if (typeof array1 == 'number' && typeof array2 == 'number')
		{
			return DuAEF.DuJS.Math.compare(array1,array2,floatPrecision)
		}
		else return array1 == array2;
	}
	if (DuAEF.DuJS.Array.isList(array1) && !DuAEF.DuJS.Array.isList(array2)) return false;
	if (!DuAEF.DuJS.Array.isList(array1) && DuAEF.DuJS.Array.isList(array2)) return false;
	if (array1.length != array2.length) return false;

	var it = new Iterator(array1);
	var ok = true;
	it.do(function (item1)
	{
		var item2 = array2[it.current];
		if (!DuAEF.DuJS.Array.compare(item1,item2,floatPrecision))
		{
			ok = false;
			return;
		}
	});

	return ok;
}
// ==================== |--------------| ====================
// ==================== | DuJSColorLib | ====================
// ==================== |--------------| ====================

/**
	* Color related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Color = {};

/**
 * Enum for predefined colors.
 * @readonly
 * @enum {float[]}
 */
DuAEF.DuJS.Color.Colors =
{
	BLACK: [0,0,0,1],
	VERY_DARK_GREY: [0.12,0.12,0.12,1],
	DARK_GREY: [.262,.262,.262,1],
	LIGHT_GREY: [.65,.65,.65,1],
	VERY_LIGHT_GREY: [.85,.85,.85,1],
	RAINBOX_RED: [.925,.094,.094,1],
	ORANGE: [.925,.471,.094,1],
	YELLOW: [.925,.839,.094,1],
	GREEN: [.094,.925,.094],
	LIGHT_BLUE: [.471,.839,.925,1],
	LIGHT_PURPLE: [.471,.471,.925,1],
	AFTER_EFFECTS_BLUE: [.439,.722,1,1],
	RAINBOX_PURPLE: [.443,.004,.196,1],
	RANDOM: [-1,-1,-1,-1]
};

/**
 * Checks if this color is valid ([R,V,B,A] in the range 0.0 ... 1.0)
 * @param {float[]} color - The color to validate
 * @param {boolean} [ignoreAlpha=false] - Will return true even if the array does not have any alpha value
 * @return {boolean} true if the color is valid
 */
DuAEF.DuJS.Color.validateColor = function (color, ignoreAlpha)
{
	ignoreAlpha = def( ignoreAlpha, false, false );
	if ( !DuAEF.DuJS.typeof(color) == 'Array' ) return false;
	var numChannels = color.length;
	if ( numChannels != 4 && !ignoreAlpha ) return false;
	if ( numChannels != 4 && numChannels != 3 ) return false;
	for (var i = 0, numChannels; i < numChannels; i++)
	{
		var c = color[i];
		if (isNaN(c)) return false;
		if (!DuAEF.DuJS.typeof(color) == 'number') return false;
		if (c < 0) return false;
		if (c > 1) return false;
	}
	return true;
}

/**
	* Generates a random color
	* @memberof DuAEF.DuJS.Color
	* @return {float[]}	The color as an [R,G,B,A] Array with float values between 0.0 and 1.0
*/
DuAEF.DuJS.Color.random = function ()
{
	var color = [0,0,0,1];
	for (var i = 0 ; i < 3 ; i++)
	{
		color[i] = DuAEF.DuJS.Math.random();
		$.sleep(10);
	}
	return color;
}

/**
	* Converts an hexadecimal color to an RVB Array
	* @memberof DuAEF.DuJS.Color
	* @param {string|int[]} hexColor	- The hexadecimal color
	* @param {boolean}	[isString=true] 	- Whether hexColor is a string or an Array of int of base 16
	* @return {float[]}	The color as an [R,G,B,A] Array with float values between 0.0 and 1.0
*/
DuAEF.DuJS.Color.hexToRGB = function (hexColor,isString)
{
		if (isString == undefined) isString = true;
		if (isString)
		{
			if (hexColor.indexOf("#") == 0) hexColor = hexColor.replace("#","");
			var red = parseInt(hexColor.substr(0,2),16)/255.0;
			var green = parseInt(hexColor.substr(2,2),16)/255.0;
			var blue = parseInt(hexColor.substr(4,2),16)/255.0;
			return [red,green,blue,1];
		}
		else
		{
			var r = hexColor >> 16;
			var g = (hexColor & 0x00ff00) >> 8;
			var b = hexColor & 0xff;
			return [r/255,g/255,b/255,1];
		}
	}


/**
	* Converts an RGB color to a hex string
	* @memberof DuAEF.DuJS.Color
	* @param {float[]} rgbColor	- The rgb color
	* @return {string}	The color as an hex string
*/
DuAEF.DuJS.Color.rgbToHex = function (rgbColor)
{
	var red = rgbColor[0]*255;
	var green = rgbColor[1]*255;
	var blue = rgbColor[2]*255;
	var hexR = red.toString(16)
	var hexG = green.toString(16)
	var hexB = blue.toString(16);
	if (hexR.length == 1) hexR = "0" + hexR;
	if (hexG.length == 1) hexG = "0" + hexG;
	if (hexB.length == 1) hexB = "0" + hexB;
	var hex = hexR+hexG+hexB;
	return hex;
}

/**
	* Converts an HSL color to RGB
	* @param {float[]} color - The RGBA color array
	* @return {float[]} the HSLA color array
*/
DuAEF.DuJS.Color.hslToRgb = function (color)
{
    var r, g, b;
	var h = color[0];
	var s = color[1];
	var l = color[2];

    if(s == 0)
	{
        r = g = b = l; // achromatic
    }
	else
	{
        function hue2rgb(p, q, t)
		{
            if(t < 0) t += 1;
            if(t > 1) t -= 1;
            if(t < 1/6) return p + (q - p) * 6 * t;
            if(t < 1/2) return q;
            if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        }

        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        var p = 2 * l - q;
        r = hue2rgb(p, q, h + 1/3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1/3);
    }

    return [r, g, b, color[3]];
}

/**
	* Converts an RGB color to HSL
	* @param {float[]} color - The HSLA color array
	* @return {float[]} the RGBA color array
*/
DuAEF.DuJS.Color.rgbToHsl = function (color)
{
	var r = color[0];
	var g = color[1];
	var b = color[2];

    var max = Math.max(r, g, b), min = Math.min(r, g, b);
    var h, s, l = (max + min) / 2;

    if(max == min)
	{
        h = s = 0; // achromatic
    }
	else
	{
        var d = max - min;
        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
        switch(max)
		{
            case r: h = (g - b) / d + (g < b ? 6 : 0); break;
            case g: h = (b - r) / d + 2; break;
            case b: h = (r - g) / d + 4; break;
        }
        h /= 6;
    }

    return [h, s, l, color[3]];
}

/**
 * Converts an 8bpc color array to a 32bpc float color array
 * @param {int[]} color - The RGB(A) color array in 8bpc (0-255 range)
 * @return {float[]} the RGBA color array
 */
DuAEF.DuJS.Color.eightBpcToFloat = function (color)
{
	var floatColor = [];
	for (var i = 0, numChannels = color.length; i < numChannels; i++)
	{
		floatColor.push( color[ i ] / 255 );
	}
	return floatColor;
}
// ==================== |-------------| ====================
// ==================== | DuJSDateLib | ====================
// ==================== |-------------| ====================

/**
	* Date related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Date = {};

/**
	* Gets the month number from a literal name
	* @memberof DuAEF.DuJS.Date
	* @param {string} string - The month name
	* @return {int} The month number
*/
DuAEF.DuJS.Date.getMonth = function (string)
{
	var month = 0;
	if (string.toLowerCase().indexOf('feb') == 0) month = 1;
	if (string.toLowerCase().indexOf('mar') == 0) month = 2;
	if (string.toLowerCase().indexOf('apr') == 0) month = 3;
	if (string.toLowerCase().indexOf('may') == 0) month = 4;
	if (string.toLowerCase().indexOf('jun') == 0) month = 5;
	if (string.toLowerCase().indexOf('jul') == 0) month = 6;
	if (string.toLowerCase().indexOf('aug') == 0) month = 7;
	if (string.toLowerCase().indexOf('sep') == 0) month = 8;
	if (string.toLowerCase().indexOf('oct') == 0) month = 9;
	if (string.toLowerCase().indexOf('nov') == 0) month = 10;
	if (string.toLowerCase().indexOf('dec') == 0) month = 11;

	return month;
}
// ==================== |-----------| ====================
// ==================== | DuJSFsLib | ====================
// ==================== |-----------| ====================

/**
	* JavaScript File System related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Fs = {};

/**
 * The default user data.<br />
 * Replaces the Folder.userData provided by ESTK which does not work properly with mac network sessions.<br />
 * In windows, the value of %APPDATA% ("C:\Documents and Settings\username\Application Data")<br />
 * In Mac OS, "~/Library/Application Support"
 * @type {Folder}
 */
DuAEF.DuJS.Fs.userData = Folder.userData;

if (DuAEF.mac) DuAEF.DuJS.Fs.userData = new Folder('~/Library/Application Support');

/**
 * The folder where DuAEF stores its data, a "DuAEF" subfolder of DuAEF.DuJS.Fs.userData
 * @type {Folder}
 */
DuAEF.DuJS.Fs.duaefData = new Folder(DuAEF.DuJS.Fs.userData.absoluteURI + '/DuAEF/');

/**
 * Recursively remove all content from folder and the folder itself. Warning, this does not move files to the recycle bin and can not be undone.
 * @param {string|Folder} folder - the path or Folder object to wipe.
 */
DuAEF.DuJS.Fs.wipeFolder = function(folder)
{
	if (DuAEF.DuJS.typeof(folder) == 'string' && folder != '') folder = new Folder(folder);
	if (!folder.exists) return;

	//get content and remove 
	var files = folder.getFiles();
	var it = new Iterator(files);
	it.do(function (file)
	{
		if (DuAEF.DuJS.typeof(file) == 'Folder') DuAEF.DuJS.Fs.wipeFolder(file);
		else file.remove();
	});
	folder.remove();
}

/**
	* Recursively gets all files in a folder using a name filter
	* Returns an array of File objects.
	* @memberof DuAEF.DuJS.Fs
	* @param {Folder}	folder	- The Folder
	* @param {string|function}	[filter="*"]	- A search mask for file names, specified as a string or a function.
	* A mask string can contain question mark (?) and asterisk (*) wild cards. Default is "*", which matches all file names.
	* Can also be the name of a function that takes a File or Folder object as its argument. It is called for each file or folder found in the search; if it returns true, the object is added to the return array.
	* @return {Array}	The files found.
*/
DuAEF.DuJS.Fs.getFilesInFolder = function (folder,filter)
{
	if (typeof folder === 'undefined') return [];
	if (!(folder instanceof Folder)) return [];

	var files = folder.getFiles(filter);
	if (files === null) files = [];

	var folders = folder.getFiles(DuAEF.DuJS.Fs.isFolder);

	for (var i = 0, num = folders.length ; i < num ; i++)
	{
		files = files.concat(DuAEF.DuJS.Fs.getFilesInFolder(folders[i],filter));
	}
	return files;
}

/**
	* Checks if an object is a Folder
	* @memberof DuAEF.DuJS.Fs
	* @param {*}	file	- The object to check
	* @return {boolean}	true if this object is an instance of Folder
*/
DuAEF.DuJS.Fs.isFolder = function (file)
{
	return file instanceof Folder;
}

/**
	* Checks if an object is a File
	* @memberof DuAEF.DuJS.Fs
	* @param {*}	file	- The object to check
	* @return {boolean}	true if this object is an instance of Folder
*/
DuAEF.DuJS.Fs.isFile = function (file)
{
	return file instanceof File;
}


/**
	* Returns the name of the given path or file, as displayed by the filesystem
	* @memberof DuAEF.DuJS.Fs
	* @example
	* DuAEF.DuJS.Fs.getName(new File("D:\\code\\open\\Duik\\shape test.test")) // "shape test.test"
	* DuAEF.DuJS.Fs.getName("D:/code/open/Duik/other shape.test") // "other shape.test"
	* @param {String|File|Folder}  [pathOrFile]	- The file or the path
	* @return {String} The basename
*/
DuAEF.DuJS.Fs.getName = function(pathOrFile)
{
    if (pathOrFile instanceof File || pathOrFile instanceof Folder) pathOrFile = pathOrFile.fsName;
	else {
		//make sure it's the fsName we use
		pathOrFile = new File(pathOrFile).fsName;
	}
    var name = pathOrFile.split("/").pop();
    name = name.split("\\").pop();
    return name;
}

/**
	* Returns the basename of the given path or file
	* @memberof DuAEF.DuJS.Fs
	* @example
	* DuAEF.DuJS.Fs.getBasename(new File("D:/code/open/Duik/shape.test")) // "shape"
	* DuAEF.DuJS.Fs.getBasename("D:/code/open/Duik/shape.test") // "shape"
	* @param {String|File}	 [pathOrFile]	- The file or the path
	* @return {String} The basename
*/
DuAEF.DuJS.Fs.getBasename = function(pathOrFile)
{
    if (pathOrFile instanceof File) pathOrFile = pathOrFile.fsName;
	else {
		//make sure it's the fsName we use
		pathOrFile = new File(pathOrFile).fsName;
	}
    var name = pathOrFile.split("/").pop();
    name = name.split("\\").pop();
    if(name.lastIndexOf(".") > 0) return name.slice(0, name.lastIndexOf("."));
    return name;
}

/**
	* Returns the extension of the given path or file
	* @memberof DuAEF.DuJS.Fs
	* @example
	* DuAEF.DuJS.Fs.getExtension(new File("D:/code/open/Duik/shape.other.test")) // "test"
	* DuAEF.DuJS.Fs.getExtension("D:/code/open/Duik/shape.test") // "test"
	* @param {String|File}	 [pathOrFile]	- The file or the path
	* @return {String} The extension
*/
DuAEF.DuJS.Fs.getExtension = function(pathOrFile)
{
    if (pathOrFile instanceof File) pathOrFile = pathOrFile.absoluteURI;
    var name = pathOrFile.split("/").pop();
    name = name.split("\\").pop();
    if(name.indexOf(".") > 0) return name.split(".").pop();
    return '';
}

/**
	* Switch the extension of the given path. Create a new path from a given path and a given extension.
	* @memberof DuAEF.DuJS.Fs
	* @param {String|File}	 [pathOrFile]	- The file or the path
	* @param {String}	     [newExtension]	- The new extension
	* @return {String}  The new path
*/
DuAEF.DuJS.Fs.switchExtension = function(pathOrFile, newExtension)
{
    if (pathOrFile instanceof File) pathOrFile = pathOrFile.absoluteURI;
    var point = pathOrFile.lastIndexOf(".");
    if (point == -1) return pathOrFile + "." + newExtension;
    return pathOrFile.slice(0, point) + "." + newExtension;
}

/**
	* Checks if the given path exists
	* @memberof DuAEF.DuJS.Fs
	* @param {string}	 [path]	- The file path
	* @return {boolean} True or false
*/
DuAEF.DuJS.Fs.fileExists = function(path)
{
	var file;
	if (path instanceof File) file = path;
  else file = new File(path);
  return file.exists;
}

/**
	* Reads the first line of a file and return its content
	* @memberof DuAEF.DuJS.Fs
	* @param {File}	 file	- The file
	* @return {string} The content
*/
DuAEF.DuJS.Fs.readFirstLine = function(file)
{
	//open and parse file
	if (!file.open('r')) return '';
	var data = file.readln();
	file.close();
	return data;
}

/**
	* Reads a whole file and return its content
	* @memberof DuAEF.DuJS.Fs
	* @param {File}	 file	- The file
	* @param {string}	 [encoding='UTF-8']	- The text encoding
	* @return {string} The content
*/
DuAEF.DuJS.Fs.readFile = function(file,encoding)
{
	if (typeof encoding === 'undefined') encoding = 'UTF-8';
	//open and parse file
	file.encoding = encoding;
	if (!file.open('r')) return '';
	var data = file.read();
	file.close();
	return data;
}

/**
	* Writes a text file
	* @memberof DuAEF.DuJS.Fs
	* @param {File}	 file	- The file
	* @param {string}	 content	- The content to write
	* @param {boolean}	 [append=false]	- Appends instead of replacing
	* @param {string}	 [encoding='UTF-8']	- The text encoding
*/
DuAEF.DuJS.Fs.writeTextFile = function(file, content, append, encoding)
{
	append = def(append, false);
	encoding = def(encoding, 'UTF-8');
	//open and parse file
	file.encoding = encoding;
	var mode = 'w';
	if (append) mode = 'a';
	if (!file.open(mode)) return;
	file.write(content);
	file.close();
}

/**
	* Parses a JSON file
	* @memberof DuAEF.DuJS.Fs
	* @param {File}	 file	- The file
	* @return {Object|null} The content or null if the file couldn't be parsed
*/
DuAEF.DuJS.Fs.parseJSON = function(file)
{
	if (!file.exists) return {};
	//open and parse file
	var json = DuAEF.DuJS.Fs.readFile(file);
	if (json == '') return null;
	var data = {};

	try { data = DuAEF.JSON.parse(json); } catch (e) { if (DuAEF.debug) alert(e.description + '\n\nJSON DATA:\n\n' + json); }
	return data;
}

/**
	* Saves a js object to a JSON file
	* @memberof DuAEF.DuJS.Fs
	* @param {Object} obj - The object to save
	* @param {File|string} file - The file or URI
	* @return {boolean} true if the file has been correctly written
*/
DuAEF.DuJS.Fs.saveJSON = function (obj,file)
{
	if (!DuAEF.DuAE.App.hasFilesAndNetworkAccess) return false;
	if (!(file instanceof File)) file = new File(file);
	var data = DuAEF.JSON.stringify(obj,null,4);
	//save to file
	file.encoding = 'UTF-8';
	if (file.open('w'))
	{
		file.write(data);
		file.close();
		return true;
	}
	return false;
}

/**
	* Parses a CSV file
	* @memberof DuAEF.DuJS.Fs
	* @param {File}	 file	- The file
	* @param {string}	 [delimiter=',']	- The delimiter used
	* @param {string}	 [textSeparator='"']	- The separator for texts
	* @return {string[]|null} The content (a two-dimensionnal Array) or null if the file couldn't be parsed
*/
DuAEF.DuJS.Fs.parseCSV = function(file,delimiter,textSeparator)
{
	if (typeof delimiter === 'undefined') delimiter = ',';
	if (typeof textSeparator === 'undefined') textSeparator = '"';
	var reQuoted = new RegExp("(" + textSeparator + ")((?:\\\\\\1|(?:(?!\\1).))*)\\1");
	//open and parse file
	var data = DuAEF.DuJS.Fs.readFile(file);
	if (data == '') return null;
	data = data.split('\n');
	for (var i = 0, num = data.length; i < num; i++)
	{
		//get quoted values
		var quotedValues = [];
		var line = data[i];
		var quoted = reQuoted.exec(line);
		while (quoted)
		{
			quotedValues.push(quoted[2]);
			line = line.replace(quoted[0],'%%');
			quoted = reQuoted.exec(line);
		}
		data[i] = line.split(delimiter);
		for (var j = 0, numJ = data[i].length; j < numJ; j++)
		{
			data[i][j] = DuAEF.DuJS.String.trim(data[i][j]);
			if (data[i][j] == '%%')
			{
				data[i][j] = quotedValues.shift();
			}
		}
	}
	return data;
}

/**
	* Shows the default save file dialog and returns the file selected by the user.<r />
	* If the user ommits the extension, the default extension will be appended (Mac OS fix).
	* @memberof DuAEF.DuJS.Fs
	* @param {string}	 prompt	- The prompt text, displayed if the dialog allows a prompt.
	* @param {string}	 [filter='']	- The file type filter (windows only)
	* @param {string}	 [defaultExtension='']	- The default extension
	* @return {File|null} The file or null if the user cancels
*/
DuAEF.DuJS.Fs.saveFileDialog = function(prompt, filter, defaultExtension)
{
	if (typeof defaultExtension === 'undefined') defaultExtension = '';

	var saveFile = File.saveDialog(prompt, filter);
	if (!saveFile) return null;

	if (saveFile.name.indexOf('.') < 1 && defaultExtension != '')
	{
		if (defaultExtension.indexOf('.') != 0) defaultExtension = '.' + defaultExtension;
		saveFile = new File(saveFile.parent.absoluteURI + '/' + saveFile.name + defaultExtension);
	}

	return saveFile;
}

/**
 * Generates a new unique name for a file
 * @param {string} newName	- The wanted new name
 * @param {Folder} folder 	- The folder
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @return {string}	The unique name, with a new number at the end if needed.
 */
DuAEF.DuJS.Fs.newUniqueFileName = function ( newName, folder ) {   
	var file = new File(folder.absoluteURI + "/" + newName);
	while (file.exists)
	{
		file = new File(folder.absoluteURI + "/" + DuAEF.DuJS.Fs.incrementFileName(file) );
	}
	return DuAEF.DuJS.Fs.getName(file);
}

/**
 * Increments the last number before the extension in a filename
 * @param {File} file The file
 * @return {string} The incremented fileName
 */
DuAEF.DuJS.Fs.incrementFileName = function (file) {

	var ext = DuAEF.DuJS.Fs.getExtension(file);
	var baseName = DuAEF.DuJS.Fs.getBasename(file);

	var regex = /(\d*)$/
	var match = baseName.match(regex);
	var num = '_01';
	var numDigits = 0;
	if (match) {
		var n = match[0];
		numDigits = n.length;
		var n = parseInt(n);
		if (!isNaN(n)) {
			n++;
			num = DuAEF.DuJS.Number.convertToString(n,numDigits);
		}
	}

	return baseName.substring(0, baseName.length - numDigits) + num + '.' + ext;

}

/**
 * Removes all forbidden characters from a string to be used as a filename
 * @param {string} name - The filename to fix
 * @param {string} [placeholder='.'] - The string used to replace the forbidden characters
 * @return {string} The fixed filename
 */
DuAEF.DuJS.Fs.fixFileName = function (name, placeholder ) {
	placeholder = def( placeholder, '.');
	
	return name.replace( /([\/\\:*?"<>|])/g, placeholder);
}

/**
	* Image sequences tools
	* @namespace
	* @memberof DuAEF.DuJS.Fs
*/
DuAEF.DuJS.Fs.ImageSequence  ={};

/**
	* Gets the number of a frame from an image sequence<br />
	* The number must be right before the extension.
	* @param {string}	path	- The path of the frame
*/
DuAEF.DuJS.Fs.ImageSequence.getNumber = function(path)
{
	var string_noExt = path.substring(0,path.lastIndexOf('.'));
	var numberi = 0;
	var namei = 0;
	for(var i = string_noExt.length-1;i>=0;i--)
	{
		if(isNaN(parseInt(string_noExt.charAt(i))))
		{
			numberi = i+1;
			break;
		}
	}
	number = string_noExt.substring(numberi,string_noExt.length);
	return number;
}
// ==================== |-------------| ====================
// ==================== | DuJSMathLib | ====================
// ==================== |-------------| ====================

/**
	* JavaScript Math related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Math = {};

/**
	* Generates a random integer between minimum and maximum
	* @memberof DuAEF.DuJS.Math
	* @param {int}	[min=0]	- The minimum value
	* @param {int}	[max=1]	- The maximum value
	* @return {int}	The randomly generated integer
*/
DuAEF.DuJS.Math.random = function (min, max)
{
	if (min == undefined) min = 0;
	if (max == undefined) max = 1;
	var rng = null;
	$.sleep(1);
	var date = new Date();
	var rng = new Math.seedrandom(date.getTime())();
	//rng = Math.random();

	if (!rng) return 0;
	return rng * (max - min) + min;
}

/**
	* Measures the vector length between two points
	* @param {int[]} value1 - The first value
	* @param {int[]} value2 - The second value
	* @return {float} The length
*/
DuAEF.DuJS.Math.getLength = function (value1,value2)
{
	if (typeof value1 !== typeof value2)
	{
		return null;
	}
	if (value1.length > 0)
	{
		var result = 0;
		for (var dim = 0;dim<value1.length;dim++)
		{
			result += (value1[dim]-value2[dim])*(value1[dim]-value2[dim]);
		}
		result = Math.sqrt(result);
		return result;
	}
	else return Math.abs(value1 - value2) ;
}

/**
	* Compares two numbers
	* @memberof DuAEF.DuJS.Array
	* @param {Number} value1 - The first value
	* @param {Number} value2 - The second value
	* @param {int} [floatPrecision=-1] - The precision for (float) number comparison, number of decimals. Set to -1 to not use.
	* @return {boolean} true if the two values are equal
*/
DuAEF.DuJS.Math.compare = function (value1,value2,floatPrecision)
{
	if (typeof value1 != 'number') return false;
	if (typeof value2 != 'number') return false;
	if (floatPrecision >= 0)
	{
		var mul = Math.pow(10,floatPrecision);
		var num1 = Math.round(value1*mul)/mul;
		var num2 = Math.round(value2*mul)/mul;
		return num1 == num2;
	}
	else return value1 == value2;
}

/**
	* Calculates the log10 of a number
	* @memberof DuAEF.DuJS.Math
	* @param {float}	w	- The number
	* @return {float}	The result of log10(x)<br />
	* i.e. Math.log(x)/Math.LN10
*/
DuAEF.DuJS.Math.log10 = function (x)
{
	return Math.log(x)/Math.LN10;
}

/**
	* Calculates the average value in a list
	* @memberof DuAEF.DuJS.Math
	* @param {Number|Number[]}	values	- values
	* @return {float}	The average value
*/
DuAEF.DuJS.Math.average = function (values)
{
	if (!(values instanceof Array)) return values;
	var sum = 0;
	var total = values.length;
	if (total == 0) return 0;
	for (var i = 0; i < total; i++)
	{
		sum += values[i];
	}
	return sum/total;
}

/**
	* Clamps the value
	* @memberof DuAEF.DuJS.Math
	* @param {Number|Number[]}	values	- values
	* @param {Number}	[min=0] - The minimum value
	* @param {Number}	[max=1] - The maximum value
	* @return {Number|Number[]}	The clamped values
*/
DuAEF.DuJS.Math.clamp = function (values, min, max)
{
	if (typeof min === 'undefined') min = 0;
	if (typeof max === 'undefined') max = 1;
	var isArray = true;
	var result = [];
	if (!(values instanceof Array))
	{
		isArray = false;
		values = [values];
	}
	for (var i = 0, num = values.length; i < num; i++)
	{
		var v = values[i];
		if (v < min) v = min;
		if (v > max) v = max;
		result.push(v);
	}
	if (isArray) return result;
	else return result[0];
}

/**
	* Converts the number from degrees to radians
	* @memberof DuAEF.DuJS.Math
	* @param {number} value - the value
	* @return {float} The value in radians
*/
DuAEF.DuJS.Math.toRadians = function (value)
{
	return value * Math.PI / 180;
}

/**
	* Converts the number from radians to degrees
	* @memberof DuAEF.DuJS.Math
	* @param {number} value - the value
	* @return {float} The value in degrees
*/
DuAEF.DuJS.Math.toDegrees = function (value)
{
	return value * 180 / Math.PI;
}

/**
	* Converts the number from degrees to radians
	* @memberof DuAEF.DuJS.Math
	* @param {number} value - the value
	* @return {float} The value in radians
*/
DuAEF.DuJS.Math.toRadians = function (value)
{
	return value * Math.PI / 180;
}

/**
	* Converts the number from radians to degrees
	* @memberof DuAEF.DuJS.Math
	* @param {number} value - the value
	* @return {float} The value in degrees
*/
DuAEF.DuJS.Math.toDegrees = function (value)
{
	return value * 180 / Math.PI;
}
// ==================== |---------------| ====================
// ==================== | DuJSNumberLib | ====================
// ==================== |---------------| ====================

/**
	* Number related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Number = {};

/**
 * Converts a number to a string, adding optionnal leading zeroes
 * @param {Number} num	- The number
 * @param {int} numDigits 	- The number of digits in the string. Adds leading zeroes
 * @param {int} [base=10]	- The conversion base
 * @return {string}	The number as a string
 */
DuAEF.DuJS.Number.convertToString = function (num, numDigits, base)
{
	if (base == undefined) base = 10;
	var result = num.toString(base);
	while(numDigits > result.length)
	{
		result  = "0" + result ;
	}
	return result;
}
// ==================== |---------------| ====================
// ==================== | DuJSRegExpLib | ====================
// ==================== |---------------| ====================

/**
	* JavaScript Regular Expression related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.RegExp = {};

/**
	* Escape reg exp reserved characters from a string to build a regular expression compatible string
	* @memberof DuAEF.DuJS.RegExp
	* @param {string}	string		- The string to escape
	* @return	{string}	The escaped string
*/
DuAEF.DuJS.RegExp.escapeRegExp = function (string)
{
	return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
}
// ==================== |---------------| ====================
// ==================== | DuJSStringLib | ====================
// ==================== |---------------| ====================

/**
	* JavaScript String related methods
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.String = {};

/**
 * Counts the number of occurences of item in string
 * @param {string} string - The string where to count
 * @param {string} item - the string to search
 * @return {int} the number of occurences
 */
DuAEF.DuJS.String.occurences = function (string, item)
{
	return (string.split(item).length -1);
}

/**
	* Parses the string as a boolean.<br />
	* The following strings are falsy:<br />
	* 'false', '0', '', 'null', 'undefined', 'NaN'.<br />
	* Note that any string consisiting only in any number of 0 will be falsy.
	* @memberof DuAEF.DuJS.String
	* @param {string} string - The string to parse
	* @param {boolean} [caseSensitive=true] - When false, 'FALSE', 'nan', 'UNdefined'... for example will be falsy too.
	* @return {boolean} The resulting boolean
*/
DuAEF.DuJS.String.parseBool = function (string, caseSensitive)
{
	if (typeof caseSensitive === 'undefined') caseSensitive = true;

	if (!caseSensitive) string = string.toLowerCase();
	var nan = 'NaN';
	if (!caseSensitive) nan = 'nan';

	// test if string is only zeroes
	var reZeroes = /^0+$/g;
	if (reZeroes.test(string)) return false;

	return string === 'false' || string === 'null' || string === '' || string === 'undefined' || string === nan;
}

/**
	* Replaces all occurences of a substring by another and returns the new string.
	* @memberof DuAEF.DuJS.String
	* @param {string}	string			- The original string
	* @param {string}	find			- The substring to replace
	* @param {string}	replace			- The new substring to insert
	* @param {boolean}	[caseSensitive=true]	- Optionnal. Do a case sensitive search of substring.
	* @return	{string}	The new string
	*/
DuAEF.DuJS.String.replace = function (string, find, replace, caseSensitive)
{
	if (caseSensitive == undefined) caseSensitive = true;
	var re = new RegExp(DuAEF.DuJS.RegExp.escapeRegExp(find),caseSensitive ? 'g' : 'gi');
	return string.replace(re, replace);
}

/**
	* Replaces all occurences of "{#}" in the string by the args. Uses "?" if there are less args than occurences of "{#}".
	* @memberof DuAEF.DuJS.String
	* @param {string}	string			- The original string
	* @param {string[]}	args			- The arguments
	* @return {string}	The new string
	*/
DuAEF.DuJS.String.args = function (string, args)
{
    var str = string;
    while(str.indexOf("{#}") !== -1)
	{
		// While there is stuff to format
		if(args.length < 1)
		{ // If no more args, replace with ?
			str = str.replace("{#}", "?"); // Will replace the first occurence
		}
		else
		{
			var arg = args.shift(); // Take the first arg and remove it
			str = str.replace("{#}", arg);
		}
	}
    return str;
}

/**
 * Checks if a string ends with a given suffix
 * @memberof DuAEF.DuJS.String
 * @param {string}	str 	The string to check
 * @param {string}	suffix	The suffix
 * @return {bool}	Wether the string ends with the given suffix or not
 */
DuAEF.DuJS.String.endsWith = function (str, suffix)
{
	return str.indexOf(suffix, str.length - suffix.length) !== -1;
}

/**
 * Generates a new unique string (numbered)
 * @param {string} newString	- The wanted new string
 * @param {string[]} stringList 	- The list of strings where the new one must be generateUnique
 * @param {boolean} [increment=true] - true to automatically increment the new name if it already ends with a digit
 * @param {boolean} [isFile=false] - when generating name for files, setting this to true will add the increment before the extension
 * @return {string}	The unique string, with a new number at the end if needed.
 */
DuAEF.DuJS.String.generateUnique = function ( newString , stringList , increment )
{
	increment =def(increment, true);
	if (!increment) newString += ' ';

    //detect digits
    var reg = "( *)(\\d+)([.,]?\\d*)$";
    //clean input
    var regexClean = new RegExp(reg);
    newString = newString.replace(regexClean,"");
    //go!
    var regex = new RegExp( DuAEF.DuJS.RegExp.escapeRegExp(newString) + reg);
    //The greatest number found
    var greatestNumber = 0;
    //The number of digits for the number as string
    var numDigits = 0;
    var spaceString = "";
    for ( var i =0 ; i < stringList.length ; i ++)
    {
        var currentNumberMatch = stringList[i].match(regex);
        if (stringList[i] === newString && greatestNumber == 0) greatestNumber++;
        else if (currentNumberMatch !== null)
        {
            //if its a decimal number, keep only the integer part
            var numberAsString = currentNumberMatch[2];
            //convert to int
            var numberAsInt = parseInt(currentNumberMatch[2],10);
			if (isNaN(numberAsInt)) continue;
            if(numberAsInt >= greatestNumber ){
                greatestNumber = numberAsInt  + 1;
                spaceString = currentNumberMatch[1];
            }
            //check if there are zeroes before the number, count the digits
            if(numberAsInt.toString().length < numberAsString.length && numDigits < numberAsString.length) numDigits = numberAsString.length;
        }
    }

    //add leading 0 if needed
    if (greatestNumber > 0)
    {
            //convert to string with leading zeroes
            if (greatestNumber == 1) {
                greatestNumber++;
                spaceString = " ";
            }
            newString += spaceString;
            greatestNumber = DuAEF.DuJS.Number.convertToString(greatestNumber,numDigits);
            newString += greatestNumber;
    }

	if (!increment) newString = newString.substr(0,newString.length-1);

    return newString;
}

/**
	* Join multiple paths togetther.
	* @param {string[]}	 [parts]	- The parts to join togehter
	* @param {String}	[sep=/]	- The separator to use. If not defined, will look for the first sep in the path.
	* @return {String} The final path
*/
DuAEF.DuJS.String.pathJoin = function(parts, sep)
{
   var separator = sep || false;
   if(!separator)
   {
       // Find first /
       if(parts[0].indexOf('/') != -1) separator = '/';
       if(parts[0].indexOf('\\') != -1) separator = '\\';
   }
   if(!separator) separator = '/';
   var replace   = new RegExp(separator+'{1,}', 'g');  // Replace ///// with /
   return parts.join(separator).replace(replace, separator);
}

/**
	* Returns a copy of the string without leading and trailing white spaces.
	* @param {string}	 str	- The string to trim
	* @return {String} The trimmed string
*/
DuAEF.DuJS.String.trim = function(str)
{
	return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
}

/**
	* Returns a copy of the string without leading white spaces.
	* @param {string}	 str	- The string to trim
	* @return {String} The trimmed string
*/
DuAEF.DuJS.String.leftTrim = function(str)
{
	return str.replace(/^[\s\uFEFF\xA0]+/, '');
}

/**
	* Returns a copy of the string without trailing white spaces.
	* @param {string}	 str	- The string to trim
	* @return {String} The trimmed string
*/
DuAEF.DuJS.String.rightTrim = function(str)
{
	return str.replace(/[\s\uFEFF\xA0]+$/, '');
}

/**
	* Returns a copy of the string without leading and trailing white spaces, and without any new line, leaving only standard spaces.
	* @param {string}	 str	- The string to trim
	* @return {String} The trimmed string
*/
DuAEF.DuJS.String.fullTrim = function(str)
{
	var newStr = str.replace(/[\s\uFEFF\xA0]+/g,' ');
	return DuAEF.DuJS.String.trim(newStr);
}
// ==================== |----------------| ====================
// ==================== | DuJSVersionLib | ====================
// ==================== |----------------| ====================

/**
 * Constructs a new version object
 * @class
 * @name DuVersion
 * @classdesc Informations about the version of an application.<br />
 * The version is in the form: Major.Minor.Patch#Build. Example: <code>17.0.0x557</code> or <code>17.0.0-Alpha1</code> or <code>17.4</code><br />
 * The only required part is the Major version.
 * @param {string} [version='1.0.0'] The version in the form Major.Minor.Patch
 * @property {string} fullVersion The complete version name
 * @property {string} versionString The Major.Minor part as a string
 * @property {float} version The Major.Minor part as a float
 * @property {int} major
 * @property {int} minor
 * @property {int} patch
 * @property {int} build The build is -1 if it cannot be parsed as an int, like "alpha".
 * @property {string} buildString The build as a string
 */
function DuVersion( version )
{
	if (typeof version === 'undefined') version = '';
	
	var reV = /^(\d+)\.?(\d*)\.?(\d*)\D?(\S*)/i;
    var v = version.match( reV );

	if (version == '' || !v)
	{
		this.fullVersion = '1.0.0';
		this.versionString = '1.0';
		this.version = 1;
		this.major = 1;
		this.minor = 0;
		this.patch = 0;
		this.build = -1;
		this.buildString = "";
		return;
	}

	if (!v[ 1 ]) v[ 1 ]  = '1';
	if (!v[ 2 ]) v[ 2 ]  = '0';
	if (!v[ 3 ]) v[ 3 ]  = '0';
	if (!v[ 4 ]) v[ 4 ]  = '';

	this.fullVersion = version;
	this.versionString = v[ 1 ] + '.' + v[ 2 ];
	this.version = parseFloat(this.versionString);
	if ( isNaN(this.version) ) this.version = parseFloat(v[ 1 ]);
	if ( isNaN(this.version) ) this.version = 0;
	this.major = parseInt( v[ 1 ] );
	if ( isNaN(this.major) ) this.major = 0;
	this.minor = parseInt( v[ 2 ] );
	if ( isNaN(this.minor) ) this.minor = 0;
	this.patch = parseInt( v[ 3 ] );
	if ( isNaN(this.patch) ) this.patch = 0;
	this.build = parseInt( v[ 4 ] );
	if ( isNaN(this.build) ) this.build = -1;
	this.buildString = v[ 4 ];
}

/**
 * Checks if this version is higher than another.
 * @memberof DuVersion
 * @param {DuVersion|string} otherVersion The version to compare with.
 * @return {bool} true if this version is more recent than otherVersion
*/
DuVersion.prototype.isHigherThan = function( otherVersion )
{
	return DuAEF.DuJS.Version.compare(this, otherVersion);
}

/**
	* Version handling
	* @namespace
	* @memberof DuAEF.DuJS
*/
DuAEF.DuJS.Version = {};

/**
 * Compares two versions of an application
 * @param {string|DuVersion} vA - The first version
 * @param {string|DuVersion} [vB=DuAEF.scriptVersion] - The other version
 * @return {boolean} True if vA is more recent than vB (strict, if they're equal it will return false)
*/
DuAEF.DuJS.Version.compare = function (vA, vB)
{
	vB = def(vB, DuAEF.scriptVersion);

	if (! (vA instanceof DuVersion) ) vA = new DuVersion( vA );
	if (! (vB instanceof DuVersion) ) vB = new DuVersion( vB );

	//compare major version
	if ( vA.major > vB.major ) return true;
	if ( vA.major < vB.major ) return false;

	//minor
	if ( vA.minor > vB.minor ) return true;
	if ( vA.minor < vB.minor ) return false;

	//patch
	if ( vA.patch > vB.patch ) return true;
	if ( vA.patch < vB.patch ) return false;

	//build 
	if ( vA.build >= 0 && vB.build >= 0 )
	{
		if ( vA.build > vB.build ) return true;
		if ( vA.build < vB.build ) return false;
	}

	//build as a string
	if ( vA.buildString == vB.buildString ) return false;
	if ( vA.buildString == '' && vB.buildString != '') return true;
	if ( vA.buildString != '' && vB.buildString == '') return false;

	var vABuildString = vA.buildString.toLowerCase();
	var vBBuildString = vB.buildString.toLowerCase();

	if ( vABuildString.indexOf('rc') >= 0 )
	{
		if ( vBBuildString.indexOf('rc') < 0 ) return true;
		return vABuildString > vBBuildString ;
	}

	if ( vABuildString.indexOf('gamma') >= 0 )
	{
		if ( vBBuildString.indexOf('rc') >= 0 ) return false;
		if ( vBBuildString.indexOf('gamma') < 0 ) return true;
		return vABuildString > vBBuildString ;
	}

	if ( vABuildString.indexOf('beta') >= 0 )
	{
		if ( vBBuildString.indexOf('rc') >= 0 ) return false;
		if ( vBBuildString.indexOf('gamma') >= 0 ) return false;
		if ( vBBuildString.indexOf('beta') < 0 ) return true;
		return vABuildString > vBBuildString ;
	}

	if ( vABuildString.indexOf('alpha') >= 0 )
	{
		if ( vBBuildString.indexOf('rc') >= 0 ) return false;
		if ( vBBuildString.indexOf('gamma') >= 0 ) return false;
		if ( vBBuildString.indexOf('beta') >= 0 ) return false;
		if ( vBBuildString.indexOf('alpha') < 0 ) return true;
		return vABuildString > vBBuildString ;
	}

	return vABuildString > vBBuildString;
}
// ==================== |--------------| ====================
// ==================== | DuProcessLib | ====================
// ==================== |--------------| ====================

/*
DuProcessLib
Library of tools to run command line tools and processes from After Effects scripts
Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
https://rainboxprod.coop

_Contributors:_
Nicolas Dufresne - Lead developer

This file is part of DuAEF.

DuAEF is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

DuAEF is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* Constructs a new DuProcess instance
* @class DuProcess
* @classdesc A class to launch and manage processes, using the system command line.
* @param {string}	  processPath     - The path to the process executable binary
* @param {string[]}    [args]            - The common arguments used to run the process. You can append arguments each time you run the process with start(args)
* @param {int}      [timeout=0]         - Waiting timeout after process start, in ms, 0 to avoid waiting, -1 for infinite.
* If the process times out, process will not be killed, the script will just stop waiting.
* @property {string}	  processPath     - The path to the process executable binary
* @property {array}    args            - The common arguments used to run the process. You can append arguments each time you run the process with start(args)
* @property {int}      timeout         - Waiting timeout after process start, in ms, 0 to avoid waiting, -1 for infinite.
* If the process times out, process will not be killed, the script will just stop waiting. Default: 0
* @property {string[]}	queue			- An Array of arguments array.
Arrays of arguments in the queue will be processed one after each other.
Update the Array and launch the queue with startQueue()
* @property {string}	latestCommand	- The latest command which has been run.
*/
function DuProcess( processPath, args, timeout ) {
    if ( processPath === undefined ) processPath = "";
    this.processPath = processPath;
    if ( args === undefined ) args = [];
    this.args = args;
    if ( timeout === undefined ) timeout = 0;
    this.timeout = timeout;

    this.queue = [];

    this.latestCommand = '';
}

/**
 * Starts the process
 * @memberof DuProcess
 * @param {Array}  args  - Args to append to DuProcess.args before starting
 * @param {int}		[timeout] 	- Overrides the default timeout.
 */
DuProcess.prototype.start = function ( args, timeout ) {
    if ( timeout === undefined ) timeout = this.timeout;

    var cmd = this.buildCmd( args );

    this.startCmd( cmd );
    this.latestCommand = cmd;
    this.waitForFinished( timeout );
}

/**
 * Starts the queue
 * @memberof DuProcess
 * @param {int}		[timeout] 	- Overrides the default timeout.
 */
DuProcess.prototype.startQueue = function ( timeout ) {
    if ( timeout === undefined ) timeout = this.timeout;

    var cmd = this.buildQueueCmd();

    this.startCmd( cmd );
    this.latestCommand = cmd;
    this.queue = [];

    this.waitForFinished( timeout );
}

/**
 * Waits for the process to finish
 * @memberof DuProcess
 * @param {int}		[timeout] 	- Overrides the default timeout.
 */
DuProcess.prototype.waitForFinished = function ( timeout ) {
    if ( timeout === undefined ) timeout = this.timeout;
    //wait
    var wait = true;
    var currentDate = new Date();
    var timeout = currentDate.getTime() + timeout;
    var checkTime = new Date();

    var checkCmd = '';
    var processName = new File( this.processPath ).name;
    if ( DuAEF.mac ) checkCmd = 'ps -A | grep "' + processName + '"';
    if ( DuAEF.win ) checkCmd = 'tasklist /FO TABLE /NH /FI "Imagename eq ' + processName + '"';

    //wait
    while ( wait ) {
        var test = system.callSystem( checkCmd );
        if ( test.indexOf( processName ) < 0 ) break;
        $.sleep( 100 );
        checkTime = new Date();

        if ( this.timeout >= 0 ) {
            wait = checkTime.getTime() < timeout;
        }
    }
}

/**
 * Buidls and returns the command line
 * @memberof DuProcess
 * @param {string[]}  [args]  - Args to append to DuProcess.args before starting
 * @return {string}	The command
 */
DuProcess.prototype.buildCmd = function ( args ) {
    if ( args === undefined ) args = [];
    //build command
    //make sure to use fsName
    if ( this.processPath.indexOf( '/' ) >= 0 || this.processPath.indexOf( '\\' ) >= 0 ) {
        var processFile = new File( this.processPath );
        this.processPath = processFile.fsName;
        if ( this.processPath.indexOf( ' ' ) > 0 ) {
            this.processPath = '"' + this.processPath + '"';
        }
    }
    var cmd = this.processPath;

    //args
    for ( var a = 0; a < this.args.length; a++ ) {
        var arg = this.args[ a ];
        if ( arg.indexOf( ' ' ) > 0 ) {
            arg = '"' + arg + '"';
        }
        cmd += ' ' + arg;
    }
    for ( var b = 0; b < args.length; b++ ) {
        var arg = args[ b ];
        if ( arg.indexOf( ' ' ) > 0 ) {
            arg = '"' + arg + '"';
        }
        cmd += ' ' + arg;
    }

    return cmd;
}

/**
 * Builds and returns the command line to launch the current queue
 * @memberof DuProcess
 * @return {string}	The command
 */
DuProcess.prototype.buildQueueCmd = function () {
    var cmd = '';

    if ( this.queue.length == 0 ) {
        return this.buildCmd();
    }

    for ( var i = 0; i < this.queue.length; i++ ) {
        if ( i > 0 ) {
            if ( DuAEF.mac ) cmd += ' && ';
            if ( DuAEF.win ) cmd += '\r\n';
        }
        cmd += this.buildCmd( this.queue[ i ] );
    }
    return cmd;
}

/**
 * Starts a command (in another thread).
 * @memberof DuProcess
 * @param {string}  cmd  - The command to start
 */
DuProcess.prototype.startCmd = function ( cmd ) {
    //Start
    if ( DuAEF.mac ) {
        //add ' &' at the end to start detached
        cmd += ' &';
        system.callSystem( cmd );
    }
    if ( DuAEF.win ) {
        //create batch file
        var batName = 'DuProcess_' + new Date().getTime() + '.bat'
        var bat = new File( DuAEF.DuJS.Fs.duaefData.absoluteURI + '/' + batName );
        cmd += '\ndel "' + DuAEF.DuJS.Fs.duaefData.fsName + '\\' + batName + '"';
        bat.open( 'w' );
        bat.write( cmd );
        bat.close();
        bat.execute();
    }
}

/**
 * Constructs a queue of different processes
 * @class DuProcessQueue
 * @classdesc A class to launch several processes
 * @param {DuProcess[]}	  [processes]     - The DuProcess Array
 * @property {DuProcess[]}	  processes     - The DuProcess Array
 */
function DuProcessQueue( processes ) {
    if ( processes === undefined ) processes = [];
    this.processes = processes;
}

/**
 * Starts the processes
 * @memberof DuProcessQueue
 */
DuProcessQueue.prototype.start = function () {
    if ( !this.processes.length ) return;
    var cmd = '';
    for ( var i = 0; i < this.processes.length; i++ ) {
        var p = this.processes[ i ];
        if ( i > 0 ) {
            if ( DuAEF.mac ) cmd += ' && ';
            if ( DuAEF.win ) cmd += '\r\n';
        }
        cmd += p.buildQueueCmd();
        p.queue = [];
    }

    this.processes[ 0 ].startCmd( cmd );
}
// ==================== |------------| ====================
// ==================== | DuQuantLib | ====================
// ==================== |------------| ====================

/*
DuQuantLib
Library to easily use a pngquant binary executable in After Effects
Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
https://rainboxprod.coop

_Contributors:_
Nicolas Dufresne - Lead developer

_DuQuant makes use of:_

• pngquant
https://pngquant.org/ licensed under BSD by Kornel Lesiński and contributors.

This file is part of DuAEF.

DuAEF is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

DuAEF is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* Constructs a new PNGQuant instance
* The constructor will try to find the pngquant binary in the same folder as DuQuant, or a (pngquant) subfolder, or in the scripts folder of After Effects.
* If pngquant is not in one of those, the property pngquantPath will be an empty string, and it has to be set by the user.
* @class DuQuant
* @classdesc A class used to easily compress png files using pngquant
* @param {string}   [suffix=_DuQuant]          - The suffix added to compressed files. Using an empty string will overwrite input files.
* @param {int}		[quality=85]			- range 0 (worst) to 100 (perfect), similar to JPEG. pngquant will use the least amount of colors required to meet or exceed the quality.
* @param {string}	  [pngquantPath]		- The path to the pngquant binary. Will try to extract or auto find it if not set
* @property {string}	  pngquantPath		- The path to the pngquant binary. Will try to extract or auto find it if not set
* @property {string}   suffix          - The suffix added to compressed files. Using an empty string will overwrite input files.
* @property {int}			quality					- range 0 (worst) to 100 (perfect), similar to JPEG. pngquant will use the least amount of colors required to meet or exceed the quality.
* @property {File[]|Folder[]}		queue			- An Array of File or Folder objects to compress.
*/
function DuQuant(suffix,quality,pngquantPath)
{
	if (quality === undefined) this.quality = 85;
	else this.quality = quality;

	if (suffix === undefined) this.suffix = "_DuQuant";
	else this.suffix = suffix;

	this.pngquantPath = '';
	this.process = null;

	this.queue = [];
	this.folders = [];

	//find pngquant
	this.setPngquantPath(pngquantPath);
}

/**
* Launches compression on all files in a given folder
* @memberof DuQuant
* @param {string}  path  - The path to the folder containing files
*/
DuQuant.prototype.compressFolder = function (path)
{
	if (this.process === null) throw 'pngquant not found, cannot compress folder. You should set pngquant path with DuQuant.setPngquantPath()'
	var folder = new Folder(path);
	//get PNG files in folder
	var pngs = DuJS.fs.getFilesInFolder(folder,"*.png");
	if (pngs.length == 0) return;

	this.compress(pngs);
}

/**
* Launches compression on queue
* @memberof DuQuant
* @param {File[]|Folder[]}  [files=DuQuant.queue]  - The File or Folder objects to compress.
*/
DuQuant.prototype.compress = function (files)
{
	if (files === undefined) files = this.queue;
	else if (!files.length) files = this.queue;
	if (!files.length) return;

	var args = [];

	if (this.suffix != '')
	{
		args.push('--ext');
		args.push(this.suffix + '.png');
	}
	else
	{
		args.push('--ext=.png');
	}
	args.push('--quality');
	args.push('0-' + this.quality);

	for (var i = 0 ; i < files.length ; i++)
	{
		var file = files[i];
		//if folder, get qll files inside
		if (DuJS.fs.isFolder(file))
		{
			var filesInFolder = DuJS.fs.getFilesInFolder(file,"*.png");
			for (var j = 0 ; j < filesInFolder.length  ; j++)
			{
				this.process.queue.push(args.concat(filesInFolder[j].fsName));
			}
		}
		//if file, add it
		else
		{
			this.process.queue.push(args.concat(file.fsName));
		}
	}
	this.process.startQueue();
}

/**
* Sets the path to the pngquant binary executable
* @memberof DuQuant
* @param {pngquantPath}  [path]  - The path to the pngquant binary executable. If not provided, DuAEF will extract the binary if it has been included, or try to find it in common folders.
*/
DuQuant.prototype.setPngquantPath = function (pngquantPath)
{
	if (pngquantPath === undefined) pngquantPath = "";
	var pngquantFile = new File(pngquantPath);
	var pngquantBinName = '';
	if (DuAEF.win) pngquantBinName = 'pngquant.exe';
	else pngquantBinName = 'pngquant';
	//extract
	if(!pngquantFile.exists)
	{
		if (DuAEF.bin.pngquant != null)
		{
			pngquantFile = DuBinary.toFile(DuAEF.bin.pngquant);
		}
	}
	//first, in the same dir
	if (!pngquantFile.exists)
	{
		pngquantFile = new File($.fileName.substring(0,$.fileName.lastIndexOf('/')) + '/' + pngquantBinName);
	}
	//in an (ffmpeg) subfolder
	if (!pngquantFile.exists)
	{
		pngquantFile = new File($.fileName.substring(0,$.fileName.lastIndexOf('/')) + '/(pngquant)/' + pngquantBinName);
	}
	//in AE Scripts folder
	if (!pngquantFile.exists)
	{
		pngquantFile = new File(Folder.appPackage.absoluteURI + '/Scripts/' + pngquantBinName);
	}
	//in AE Scripts/(ffmpeg) folder
	if (!pngquantFile.exists)
	{
		pngquantFile = new File(Folder.appPackage.absoluteURI + '/Scripts/(pngquant)/' + pngquantBinName);
	}
	//in AE ScriptUI Panels
	if (!pngquantFile.exists)
	{
		pngquantFile = new File(Folder.appPackage.absoluteURI + '/Scripts/ScriptUI Panels/' + pngquantBinName);
	}
	//in AE ScriptUI Panels/(ffmpeg)
	if (!pngquantFile.exists)
	{
		pngquantFile = new File(Folder.appPackage.absoluteURI + '/Scripts/ScriptUI Panels/(pngquant)/' + pngquantBinName);
	}

	if (pngquantFile.exists)
	{
		this.pngquantPath = pngquantFile.fsName;
		//create process
		var timeout = 0;
		var commonArgs = ['--force','--skip-if-larger'];
		this.process = new DuProcess(this.pngquantPath,commonArgs,timeout);
	}
}
// ==================== |---------------| ====================
// ==================== | DuRendererLib | ====================
// ==================== |---------------| ====================

/*
DuRendererLib
Library to manage the After Effects Renderer/RenderQueue
Copyright (c) 2017 Nicolas Dufresne, Rainbox Productions
https://rainboxprod.coop

_Contributors:_
Nicolas Dufresne - Lead developer

This file is part of DuAEF.

DuAEF is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

DuAEF is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/

/**
* Constructs a new DuRenderer instance
* @class DuRenderer
* @classdesc A class used to easily manage After Effects Renderer/RenderQueue
* @param {string}             [defaultOutputTemplate]       - The default output module template name to use when adding comp to the queue. Empty string to let default AE OM defaultOutputTemplate.
* @param {PostRenderAction}   [defaultPostRenderAction=PostRenderAction.NONE]     - The default PostRenderAction.
* @param {boolean}				[pngquant=false]					- Compress PNG Sequences using pngquant after render.
* @property {string}             defaultOutputTemplate       - The default output module template name to use when adding comp to the queue. Empty string to let default AE OM defaultOutputTemplate.
* @property {PostRenderAction}   defaultPostRenderAction     - The default PostRenderAction.
* @property {boolean}				pngquant				- Compress PNG Sequences using pngquant after render.
* @property {DuRendererItem[]}              items            - The DuRendererItems in the queue
*/
function DuRenderer(defaultOutputTemplate,defaultPostRenderAction,pngquant)
{
	if (defaultOutputTemplate === undefined) defaultOutputTemplate = '';
	this.defaultOutputTemplate = defaultOutputTemplate;
	if (defaultPostRenderAction === undefined) defaultPostRenderAction = PostRenderAction.NONE;;
	this.defaultPostRenderAction = defaultPostRenderAction;
	if (pngquant === undefined) pngquant = false;
	this.pngquant = pngquant;

	//create pngquant process
	var suffix = '';
	this.pngquantProcess = new DuQuant(suffix);
	if (this.pngquantProcess.pngquantPath == '')
	{
		this.pngquant = false;
	}

	this.items = [];

	this.rqItemsEnabled = [];

	// get aerender
	var aerenderBinName = "aerender";
	if (DuAEF.win) aerenderBinName += ".exe";
	this.aerender = new DuProcess(Folder.appPackage.absoluteURI + "/" + aerenderBinName,['-continueOnMissingFootage']);

	//get pngquant-batch

	pngquantbatchFile = DuBinary.toFile(DuAEF.bin.pngquantbatch);
	this.pngquantbatch = new DuProcess(pngquantbatchFile.fsName,['--force','--skip-if-larger','--ext=.png','--quality','0-85','*.png']);
}

/**
* Adds a comp to the render queue
* @memberof DuRenderer
* @param {CompItem}          comp              - The Composition to add
* @param {string}            outputPath        - The output file path
* @param {string}            [outputTemplate]    - Overrides the default output module template
* @param {PostRenderAction}  [postRenderAction]  - Overrides the default PostRenderAction
*/
DuRenderer.prototype.addComp = function(comp,outputPath,outputTemplate,postRenderAction)
{
	if (outputTemplate === undefined) outputTemplate = this.defaultOutputTemplate;
	if (postRenderAction === undefined) postRenderAction = this.defaultPostRenderAction;
	var item = new DuRendererItem(comp,outputPath,outputTemplate,postRenderAction);
	this.items.push(item);
}

/**
* Adds a DuRendererItem to the After Effects renderQueue
* @memberof DuRenderer
* @param {DuRendererItem}          item              - The Item to add.
* @return {RenderQueueItem}		The item created.
*/
DuRenderer.prototype.addItemToAEQueue = function (item)
{
	//add comp to render queue
	var rqItem = app.project.renderQueue.items.add(item.comp);
	var outputModule = rqItem.outputModule(1);
	//set output format
	outputModule.applyTemplate(item.outputTemplate);

	//set output file
	var outputFile = new File(item.outputPath);
	outputModule.file = outputFile;
	//set post render action
	outputModule.postRenderAction = item.postRenderAction;
	return rqItem;
}

/**
* Renders a comp in background using aerender.exe
* Automatically manages the existing After Effects render queue to leave it untouched.
* The project will be saved.
* @memberof DuRenderer
* @param {CompItem}          comp              - The Composition to render
* @param {string}            outputPath        - The output file path
* @param {string}            [outputTemplate]    - Overrides Durenderer.defaultOutputTemplate
* @param {PostRenderAction}  [postRenderAction]  - Overrides DuRenderer.defaultPostRenderAction
* @property {bool}				[pngquant]		- Overrides DuRenderer.pngquant
*/
DuRenderer.prototype.backgroundRenderComp = function(comp,outputPath,outputTemplate,postRenderAction,pngquant)
{
	if (outputTemplate === undefined) outputTemplate = this.defaultOutputTemplate;
	if (postRenderAction === undefined) postRenderAction = this.defaultPostRenderAction;
	if (pngquant === undefined) pngquant = this.pngquant;

	//disable existing items
	this.disableRqItems();
	if (!app.project.file) app.project.save();
	//launch
	var rqItem = this.addItemToAEQueue(new DuRendererItem(comp,outputPath,outputTemplate,postRenderAction));
	app.project.save();
	var newProjectName = app.project.file.fsName.replace(/\.aep$/gi,"") + "_Durenderer.aep";
	//copy the project as a new file
	app.project.file.copy(newProjectName);

	//launch aerender.exe
	this.aerender.queue.push(['-project',newProjectName]);
	//pngquant
	if (pngquant)
	{
		var cdProcess = new DuProcess('cd',[rqItem.outputModule(1).file.parent.fsName]);
		//launch
		var queue = new DuProcessQueue([this.aerender,cdProcess,this.pngquantbatch]);
		queue.start();
	}
	else
	{
		this.aerender.startQueue();
	}

	rqItem.remove();
	this.enableRqItems();
	app.project.save();
}

/**
* Renders a comp in After Effects
* Automatically manages the existing After Effects render queue to leave it untouched.
* @memberof DuRenderer
* @param {CompItem}          comp              - The Composition to render
* @param {string}            outputPath        - The output file path
* @param {string}            [outputTemplate]    - Overrides Durenderer.defaultOutputTemplate
* @param {PostRenderAction}  [postRenderAction]  - Overrides DuRenderer.defaultPostRenderAction
* @property {bool}				[pngquant]		- Overrides DuRenderer.pngquant
*/
DuRenderer.prototype.renderComp = function(comp,outputPath,outputTemplate,postRenderAction,pngquant)
{
	if (outputTemplate === undefined) outputTemplate = this.defaultOutputTemplate;
	if (postRenderAction === undefined) postRenderAction = this.defaultPostRenderAction;
	if (pngquant === undefined) pngquant = this.pngquant;

	//disable existing items
	this.disableRqItems();

	//launch
	var rqItem = this.addItemToAEQueue(new DuRendererItem(comp,outputPath,outputTemplate,postRenderAction));
	app.project.renderQueue.render();

	//pngquant
	if (rqItem.file.name.toLowerCase().lastIndexOf(".png") == rqItem.file.name.length-4 && pngquant)
	{
		//go!
		this.pngquantProcess.compressFolder(rqItem.file.parent.fsName);
	}

	//remove item after render
	rqItem.remove();

	//enable existing items
	this.enableRqItems();

}

/**
* Renders the queue in background using aerender.exe
* Automatically manages the existing After Effects render queue to leave it untouched.
* The project will be saved.
* @memberof DuRenderer
*/
DuRenderer.prototype.backgroundRender = function()
{
	//disable existing items
	this.disableRqItems();
	if (!app.project.file) app.project.save();

	var rqItems = [];
	var postProcesses = [];
	for (var i = 0 ; i < this.items.length ; i++)
	{
		var item = this.items[i];
		//add comp to render queue
		var rqItem = this.addItemToAEQueue(item);
		//pngquant queue
		var outputFile = rqItem.outputModule(1).file;
		if (this.pngquant)
		{
			var cdProcess = new DuProcess('cd',[rqItem.outputModule(1).file.parent.fsName]);
			postProcesses.push(cdProcess);
			postProcesses.push(this.pngquantbatch);
		}
		rqItems.push(rqItem);
	}

	app.project.save();
	var newProjectName = app.project.file.fsName.replace(/\.aep$/gi,"") + "_Durenderer.aep";
	//copy the project as a new file
	app.project.file.copy(newProjectName);
	this.aerender.queue.push(['-project',newProjectName]);

	if (this.pngquant)
	{
		var queueProcesses = [this.aerender];
		var queue = new DuProcessQueue(queueProcesses.concat(postProcesses));
		queue.start();
	}
	else
	{
		this.aerender.startQueue();
	}

	this.items = [];

	//remove items
	for (var i = rqItems.length -1 ; i>=0  ; i--)
	{
		rqItems[i].remove();
	}

	//enable existing items
	this.enableRqItems();
	app.project.save();
}

/**
* Renders the queue in After Effects
* Automatically manages the existing After Effects render queue to leave it untouched.
* @memberof DuRenderer
*/
DuRenderer.prototype.render = function()
{
	//disable existing items
	this.disableRqItems();
	var rqItems = [];
	for (var i = 0 ; i < this.items.length ; i++)
	{
		var item = this.items[i];
		//add comp to render queue
		var rqItem = this.addItemToAEQueue(item);
		//pngquant queue
		var outputFile = rqItem.outputModule(1).file;
		if (outputFile.name.toLowerCase().lastIndexOf(".png") == outputFile.name.length-4 && this.pngquant)
		{
			//go!
			this.pngquantProcess.queue.push(outputFile.parent);
		}
		rqItems.push(rqItem);
	}
	//render
	app.project.renderQueue.render();
	this.pngquantProcess.compress();

	this.items = [];

	//remove items
	for (var i = rqItems.length -1 ; i>=0  ; i--)
	{
		rqItems[i].remove();
	}

	//enable existing items
	this.enableRqItems();
}

/**
* Disables all previously added Items in the AE renderQueue
* You can re-enable them using DuRenderer.enableRqItems()
*/
DuRenderer.prototype.disableRqItems = function()
{
	for (var i = 1 ; i <= app.project.renderQueue.numItems ; i++)
	{
		var item = app.project.renderQueue.items[i];
		if (item.render) this.rqItemsEnabled.push(i);
		if(item.status != RQItemStatus.RENDERING && item.status != RQItemStatus.DONE &&  item.status != RQItemStatus.WILL_CONTINUE) item.render = false;
	}
}

/**
* Enables all previously added Items in the AE renderQueue, if they were previously disabled by DuRenderer.disableRqItems()
*/
DuRenderer.prototype.enableRqItems = function ()
{
	//re-enable render queue
	for (var i = 0 ; i < this.rqItemsEnabled ; i++)
	{
		var item = app.project.renderQueue.items[this.rqItemsEnabled[i]];
		item.render = true;
	}
}

/**
* Constructs a new item to render
* @class DuRendererItem
* @classdesc An item in the Durenderer queue
* @param {CompItem}			comp				- The composition to render
* @param {string}             [outputTemplate]       - The output module template name to use when adding comp to the queue. Empty string to let default AE OM defaultOutputTemplate.
* @param {PostRenderAction}   [postRenderAction]     - The PostRenderAction.
* @param {string}			outputPath			- The output file path.
* @property {CompItem}			comp				- The composition to render
* @property {string}             outputTemplate       - The output module template name to use when adding comp to the queue. Empty string to let default AE OM defaultOutputTemplate.
* @property {PostRenderAction}   postRenderAction     - The PostRenderAction.
* @property {string}			outputPath			- The output file path.
*/
function DuRendererItem(comp,outputPath,outputTemplate,postRenderAction)
{
	this.comp = comp;
	this.outputPath = outputPath;
	this.outputTemplate = outputTemplate;
	this.postRenderAction = postRenderAction;
}

/**
* Renderer tools
* @namespace
* @memberof DuAEF
*/
DuAEF.DuRenderer = {};

/**
 * Loads the outputModules found in the project and recreates them to make them available in the current Ae installation
 * @memberof DuAEF.Renderer
 * @param {file|string} project - An After Effects project file containing one render queue item with the modules to load
 */
DuAEF.DuRenderer.loadOutputModules = function(project)
{
	if (!(project instanceof File)) project = new File(project);
	if (!project.exists) return;
	//import project
	var importedProject = app.project.importFile(new ImportOptions(project));

	//the last rqItem contains the modules
	var rqItem = app.project.renderQueue.item(app.project.renderQueue.numItems);

	//load modules
	for (var i = 1, num =  rqItem.outputModules.length; i <= num; i++)
	{
		var om = rqItem.outputModule(i);
		if (DuAEF.DuJS.Array.indexOf(om.templates,om.name) < 0) om.saveAsTemplate(om.name);
	}

	//remove project
	importedProject.remove();
}
// ==================== |---------------| ====================
// ==================== | DuScriptUILib | ====================
// ==================== |---------------| ====================

/*
DuScriptUILib
Library with ScriptUI tools.
Copyright (c) 2017-2019 Nicolas Dufresne, Rainbox Laboratory and Contributors
https://rainboxlab.org

_Contributors:_
Nicolas Dufresne - Lead developer

This file is part of DuAEF.

DuAEF is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

DuAEF is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with DuAEF. If not, see <http://www.gnu.org/licenses/>.
*/

// ==================== |-----------------| ====================
// ==================== | DuScriptUIIcons | ====================
// ==================== |-----------------| ====================

// ==================== |------------| ====================
// ==================== | w14_menu_l | ====================
// ==================== |------------| ====================

var w14_menu_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00TIDAT(\u0091c\u00FC\u00FF\u00FF?\x039\u0080\u0089,]\f\f\f,\f\f\f\fO\u009E<!\u00C5\u00DA{222\u00CA\u00E4\u00D8(\b\u00B7\u0091\u0081\u0081\u00C1\u0084\u0081\u0081\u00C1\u0098H\u008Dg\x19\x18\x18\x18\x18\u00C9\r\u009C!\u00E4Grl|\u008Fl\u00E3\x19\x125\n\u0091m#\u00D9\u00D1AvZ\x05\x00+\u00B3\x19Pff\x1C\u00C1\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_menu_l.png","category":""};
w14_menu_l;
// ==================== |------------| ====================
// ==================== | w14_menu_m | ====================
// ==================== |------------| ====================

var w14_menu_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00SIDAT(\u0091c\u00FC\u00FF\u00FF?\x039\u0080\u0089,]\f\f\f,\f\f\f\f---\u00A4X{\u00AF\u00A6\u00A6F\u0099\x1C\x1B\x05\u00E16200\u0098000\x18\x13\u00A9\u00F1,\x03\x03\x03\x03#\u00B9\u00813\u0084\u00FCH\u008E\u008D\u00EF\u0091m<C\u00A2F!\u00B2m$;:\u00C8N\u00AB\x00\u00BF\u00A4\x19P\u00CFx\u00CB\u00B2\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_menu_m.png","category":""};
w14_menu_m;
// ==================== |--------------| ====================
// ==================== | w14_layers_m | ====================
// ==================== |--------------| ====================

var w14_layers_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00D7IDAT(\u0091\u009D\u00D2\u00CDQ\x02A\x10\u00C5\u00F1\x1F&\u00E0f\u00A0!l\x06\u00AE\x11\u0088\x11\u0088\x19\x18@\x1F\u00A0\u00AA\u00EF\x12\x02F\u00A0F\u00C0\u0092\x01f\u0080\x19\u0090\u00C1zp\u00B4\x16X\u00F0\u00E3U\u00CDe\u00FA\u00FD\u00A7_\u00CF\u00CC\u00A8\u00EB:\u00FF\u00D1\u00D9\u00B1BfV\u0099y\u00F9'03k\u00AC\u00B1\u00CE\u00CC\u00E6W`fN\u00D0\u00E2\x02\u00E7Xf\u00E6t\u00DF7\u00EA\u00CF\u0098\u0099\x0B\u00DC\x1DI\u00F7\u008AIDlw:ff{\x02\u0082\u009B\x12\u00FF \u00EA\x04o'\u00C0w\u008C\u0087@x\u00C0\u00D3\x00\u00B4*\x07\x7F\u00AB\x0F.\u00B0,q\u00EE{\u00FB3\u00CC\u00F1R\u00D6.\x18\x11M\u00E9\u00F6\u0088\x06\u00D7\u00B8E\u0085g\u009F7]\x7F\u00F9G\u00FB?\u00A7<\u00C7\x1C\x1Blq\u0085YDL\u00FB\u00BE\x03\u00B0\u00C0u\u0089Ua\x1C\x11\u00ED\u00BEg\x10,p\u0085*\"6C\u00F5\u00A3\u00E0O\u00FA\x00!\u00C4H\u00DE\u00C8\u00F9\u00AFt\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_layers_m.png","category":""};
w14_layers_m;
// ==================== |--------------| ====================
// ==================== | w14_layers_l | ====================
// ==================== |--------------| ====================

var w14_layers_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00DAIDAT(\u0091\u009D\u0092\u00D1q\u00C20\x10D\u009F\u00D3@T\u00C0\u00CE\u0084\x12\u00DC\x01\u00A6\x03R\x01\u00A6\u0083\u0094\x00\x15@\tP\x01\u00A1\x02\u009C\x0E\u00A0\x03\u0098\u00D9\x02\u00E8\u00C0\u00F9\u00B0\u009C1\u00C2&!;\u00A3\x0F\u00E9\u00F6\u009D\u00EEN\u00CA\u00EA\u00BA\u00E6?z\x19\n\u00D8\x0E\u00B6GO\u0081\u00B6s\u00E0\b\x1Cm\x17\x7F\x02m\u0097@\x05\u00BC\x01\u00AF\u00C0\u00C1\u00F6\"\u00F5e\u00DD\x1Emo\u0080\u00D9@u{\u00A0\u0094t\u00BD\x01mW\u00C0x\x00ju\u00914JK-\u0081\u00D3#\b\u0098\u00B6\u009B\u00B4\u00C7\x0F`\u00DB\x03}\u00C5\u00C4?\u00EA\u0082\x1B\u00E0@3\u00CDy\u00E7|\t\u00AC\u0081\u00CF\u00B8nAIE\u00BCm\x05\x14\u00C0\x04x\x07\x02\u00B0\u00A3\u0099t\u00DE\u00FA\u00B3\u00F4\u00E7\u00C4\u00E7X\x03g\u00E0J3\u00B0\u00A5\u00A4E\u00D7w\x07F8\u008Fe\x05`*\u00A9J=\u00BD`\u0084\x03\x10$\u009D\u00FB\u00E2\u0083\u00E0o\u00FA\x06\u00E4\u00C0R\u00B0\x14\u00E1\u009C\u00B1\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_layers_l.png","category":""};
w14_layers_l;
// ==================== |--------------| ====================
// ==================== | w14_update_l | ====================
// ==================== |--------------| ====================

var w14_update_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00C3IDAT(\u0091\u009D\u0092\u00C1\r\u0083@\f\x04\x07\u0094\x06\u00F8\u00EF\u008B\u0094\x10ZH\t\u00A4\x04(\x01J\b%\u0084\x16h\u0081\x16h\u0081\u0097\u00FF)\u0081|\u008E\u00C4\u009C\u00E0\x11,\u009D,\u00AFn\u00BD^\u00DF%\u00CB\u00B2p&\u00D2S,\u00E0\x12\x03fv\x03\x1A\u00A0\f\u00D0\b\u00F4!W\u0092:\u0080\u00C4\u008Fjf\x15\u00F0:\x10y\x03\x19p\u00974\u00A6\u008ET:R-)\u0091\u0094\x00u\u00C02\u00DF\u00C5{lBn%\u00F5\x0E\u00AFv\u00947\x1E; _=\u00C4\u00F8ZH\u009Ab\u00C5<\u008C\u00DC\u0098Y\u00E3.\x0E;\u00CD~\u00CB13\u00FF\u00A0\u0093\u00A4b-\u00DC\u00D2fI\u00D7X\u00D1\u00C7\u00E8H%\u00F0\fe{\u00A48{?\u00B1WI_\u00A2Wl\u0081\"\u009C!R\x7Fx\u00D2F\u00F1\u00DF8\u00FDW?\u00FCXH \u00C0\"\u00E5P\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_update_l.png","category":""};
w14_update_l;
// ==================== |--------------| ====================
// ==================== | w14_update_m | ====================
// ==================== |--------------| ====================

var w14_update_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00C4IDAT(\u0091\u009D\u0092\u00C1\r\u00830\fE\x1F\u00A8\x0B\u00B0\x02+\u00B4+t\x04:\x02\u008C\x00\u0087\x7F\u00F4\u00A1\u008CPV`\x05V`\u0085\u00AE\u00D0\x11\u00E8\u00C5T&\u0082C\u00B1\x149\u00F9\u00C9\u00FF\u00DF\u0096\u0093-\u00CB\u00C2\u0099\u00C8O\u00B1\u0080K\n\u0098\u00D9\x15h\u0081\u00CA\u00A1\t\x18<\u00D7\u0092z\u0080,\u0096jf5\u00F0:0\u00F9\x00\x05p\u00974\u00E5\u0081T\x05R#)\u0093\u0094\x01\u008DcET\u0089=\u00B6\u009E;IC\u00C0\u00EB\x1D\u00E7M\u008F=P\u00AE=\u00A4\u00F8z\u00904\u00A7\u008E\u00A5\u0097\u00DC\u009AY\x1B\x1E\u008E;b\x1B\u00C7g\u00D8\u00CF\u00EE\u0084\u008B\u00D5~\u00FF^\u00F1\u00A39N\u0081T\x05\u00D1n\u00C5\x7F\u00E30\u00B3\u00C5\x15K\u00F6\u00A3\u0097\u00F4#F\u00C7\x0E\u00B8\u00F9\x1A\x13\u00F7G$m\x1C\u00FF\u008D\u00D3\x7F\u00F5\x0B\u00A6\u00E6Ee\u00E0\u0089\u00FA\u00DF\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_update_m.png","category":""};
w14_update_m;
// ==================== |---------------| ====================
// ==================== | w14_checked_m | ====================
// ==================== |---------------| ====================

var w14_checked_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u009BIDAT(\u0091\u009D\u00D2Q\r\u00C3 \x10\u00C6\u00F1\x7F\x1B\f\u00CC\u00C2,0\t\u00AB\u0085Y\u00C0\u00C4=\u009E\u0089U\u00C2,\u00B4\x16f\x01+\u00DD\u00C3\u008E\u0086\u0090RH\u00BF\u0084\u0084\x1C\u00DF\u00EF\u00E1\x12\u0086m\u00DB\u00B8\x12\x07\u00A0\u00AAw\u00E0\r\u00F8F\u00FF\x0B\x04\x11\u0089\u00CE\x06\u009F\x0E\x04\u00F0\u00B4\u00EEc\u00B4A\x0FJ\u00F1\x00c\u00ABe\tv\u00F6\u00F4\u00C0IDf\u00FE\u00FBUa\x00\u00A6\x02\u00AD\u00AA\u00EA\u0081\u00E5\fF\x11Y\r\u0097\u00E8\u0096\x17]\x01\x17U\u009D\fSCGp\u00C7\u00E9~\u00F0^\u0085\u00A7 %\u00ED\x18[\u00C5,1\u0087\u00AFN\x1C\u00AD\u00CBp\u00F5\u0093\u00FF\x005\u00BC/\u00CD\f\u00D5\u00AF\x04\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_checked_m.png","category":""};
w14_checked_m;
// ==================== |---------------| ====================
// ==================== | w14_checked_l | ====================
// ==================== |---------------| ====================

var w14_checked_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u009AIDAT(\u0091\u009D\u00D2\u00B1\r\u00C3 \x10\u0085\u00E1\u00DF\x16\x0B\u00A4\u00BF*+\u0090\x11\u00C2\nY\u0081\u0099\u0092\x11\u00BC\u0082\u00BDBV\u00A0\u00BA=H\u0091\u00C3\u00B2,c\u0090\u009F\u0084\u0084\u008E\u00F7\x15'1\u00E4\u009C\u00B9\x12\x07\u00A0\u00AAw\u00E0\r\u00F8F\u00FF\x0BD\x11I\u00CE\x06S\x07\x02xZ\u00F71\u00DA\u00A0\x07\u0095x\u0080\u00B1\u00D5\u00B2D;kz`\x10\u0091\x0F\u00FF\u00FD\u00AA0\x02a\u0087\x16U\u00F5\u00C0|\x06\u0093\u0088,\u0086\u00F7\u00E8\u00B6-\u00BA\x1D\u009CU5\x18\u00A6\u0086\u008E\u00E0\u008A\u00CB\u00FD\u00E0\u00BD\nOAI\u00D91\u00B5\u008A\u009B\u00A4-|u\u00E2d]\u0086\u00AB\u009F\u00FC\x07+\r/\u00CD\u00BF\u008E\u00F5\x06\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_checked_l.png","category":""};
w14_checked_l;
// ==================== |-----------------| ====================
// ==================== | w14_unchecked_l | ====================
// ==================== |-----------------| ====================

var w14_unchecked_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00fIDAT(\u0091\u00ED\u00921\x11\u00800\x10\x047\u0099\u00C8\u00F8\"N\u0088\x04$\u00E0\x04$\u0080\x03$E\u00C4\x0B\u0088\u0083\u00A7IJ&\u0081\u008A\u0082\u00AB\u00FEfn\u00E7\u00AF8gf\u00BCQh\u0087\u00AA.@\u00EC\u00E4\x0Bp\u008AH\t\x15\u00DA\u0080u\u00F0\u00D9\f$_M\x1A/\u00C9\x04\u00E0{\u00A9;\u00FD\u00E0'\u00C1\u00FD\x01s\x00\u00B86rU\u008D\flUD2\u00C0\x05\x07\u00A1\x16\u00F4\u00DE\x11\u0080-\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_unchecked_l.png","category":""};
w14_unchecked_l;
// ==================== |-------------------| ====================
// ==================== | w14_emptysquare_m | ====================
// ==================== |-------------------| ====================

var w14_emptysquare_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u008CIDAT(\u0091\u00ED\u0092A\r\u00C2@\x10E_I\x05\u00E0\u0080:\u00A1\x12\u0090\u0080\u0090\u009F\u0094\u00C3\x17P\x1C\u00D4\x02\x0E\u0090P\tH\u00A8\u0083\u00E5\u00C0.\t\u00B4]6\u009C\u00FB\u0092\u00CD\u00CEa^\u00E6'3U\b\u0081\x7F\u00A8Sa\u00FB\f4?\u00FA'`\u00904\u00D5Q\u00BA\x00]\u00E1\u00B0\x13\u00D0\u00A6\u0089m\u00FCo\u00C0\u0098\u0091:\u00E0\u00F8\x115\u00D2K\u00BA\u00AFY\u00B6\u00DF\u00A9v\u0085\u00F1flb\u0086\u00EFu\f\u00B6\x1F+\u00BD\u00FB%\u00B1\u00E7\u00B5\u00D8C|9\u00AE\x00U:r\u00DB\r\x05\u00B7*i\x04x\x02\u009BT D7\u00D6'\u009B\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_emptysquare_m.png","category":""};
w14_emptysquare_m;
// ==================== |-----------| ====================
// ==================== | w14_url_m | ====================
// ==================== |-----------| ====================

var w14_url_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00AEIDAT(\u0091\u0095\u0092\u00C1\r\u00C20\fE\x1F\u00A8\x0Bt\x05V`\x05\x18\x01V\u00E8\b\\|\u00FC\u0087\u00B2\n\u008C@W\u00E8\be\x04\x18\u00A1\u00C8(\u00A9\u00D4\u0094@\u00F8\u0087(v\u00FC\u00F2m\u00C9\u00ABq\x1CqI\u00DAP 3\u00BB{\u00D5\x1B\u00944\x00E \u00D0\u0099\u00D9\u00BE\nN9\u00A8\x07\u009E\u00E1^\x03[`\u00E7A\u00B5(\u009D\u00AB1\u00B3>f$=\u00C2\x07\u00AC\x17\u00A5s]\u00928\u00BA\x7F\x05\u00BD\u00A8\tNu\u00FA\u0098\x03\x1D:\u009AY'\u00A9\x05\x06I\u0087\u00D8fn\u00C6\x14:\u0085\u00FC\u00AC\u00ED\u00D41\x07-\u0094\u0082E\u00D0\u00C7\x19K W:\u00E3\u00ED\x1709\u0086\u00DD\u00BB\u0096\x02\u00C0\u00D9\u008Fi\u00C9\u00FF\x12\u00F0\x02\u00E6\u008B@\u00CB\u00D9<\u00D2r\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_url_m.png","category":""};
w14_url_m;
// ==================== |-----------| ====================
// ==================== | w14_url_l | ====================
// ==================== |-----------| ====================

var w14_url_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00ADIDAT(\x15\u0095\u0092\u00C1\r\u00C20\fE\x1F\u00A8\x0B\u00F4\u00EE\x13+\u00B0\x02\u008C\x00+t\x04V\u00A0\u00AB\u00C0\bt\u0085\u008EPN\u00FF\f#\x14\x19%\u0095\u009A\x12\b\u00FF\x10\u00C5\u008E_\u00BE-y5\u008E#.I\x1B\ndfw\u00AFz\u0083\u0092\x06\u00A0\b\x04:3\u00DBW\u00C1)\x07\u00F5\u00C03\u00DCk`\x0B\u00EC<\u00A8\x16\u00A5s5f\u00D6\u00C7\u008C\u00A4G\u00F8\u0080\u00F5\u00A2t\u00AEK\x12G\u00F7\u00AF\u00A0\x175\u00C1\u00A9N\x1Fs\u00A0CG3\u00EB$\u009D\u0081A\u00D2!\u00B6\u0099\u009B1\u0085N!?k;u\u00CCA\x0B\u00A5`\x11\u00F4q\u00C6\x12\u00C8\u0095\u00CEx\u00FB\x05L\u008Ea\u00F7\u00AE\u00A5\x00\u00D0\u00FA1-\u00F9_\x02^\u0080#D+\u00F8\u00E3\u00E5\u008F\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_url_l.png","category":""};
w14_url_l;
// ==================== |--------------| ====================
// ==================== | w14_cancel_m | ====================
// ==================== |--------------| ====================

var w14_cancel_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00F3IDAT(\u0091\u008D\u0092\u00C1m\u00C30\fE\u009F\u00BD\u0081WpFHFpFHFhF\u0088\x0F\u00FF\u00F8\x0F\u00CE\b\u00ED\bY\u00A1^\u00C1#4+x\u0084\u00F4P\u00B2P\u0095\x04\u00E8\x07\x04\t\u0094\x1E\u00F9\t\u00AA\u00B9\u00DF\u00EF\u0094\u00B2\u00DD\x03\x03\u00D0\x03+\u00B0H\u009A\u00A9\u00D4\u0094\u00A0\u00EDw\u00E0\u00AD~\x04,\u00C0I\u00D2\u00F2\x00\u00DA\u00FE\u008CJ\u00AF\u00B4\x02\u00FB\u0084\u00DB\u0080\u00A6\x02Zc\u00A5n\u00B1w\u00C05\u0083m\u00EC\u00A5\u00BD\x1D\u00B0\x0Fx\u0094\u00B4\x01\u00B2\u00C7\u00DE\u00F6\x01\u00A0\u00B5=D\u00B6\u00D4!\u00ECl$]lo\u0081mq?d\u00C5\u00BE\u00EAe\u00B2=HJ\u00BB\u00D7*q\u0097\u00E0\u00AD\x02GI\u00B3\u00ED||\u00ACz^\x01\u00DA\u0098Qy1\u0087\u00BD/\u00DB\u00E7\u00B0]&\u009F!\u00C6a\u00FB\fLe\u00C6\u00C2\u00DEZ\u009C\x17I\u00BB\u00B4\u008A\u00A4\x0B\u00F0Q\x00\x0F=E\u00D5c\x06s\x1CH:\x01#\u00CF5\u00F33\u00FC_\u00CB\u00CD\u0093\u00BF\u00DA\u00F1\u00F7\u00AF\u00CE%\u00F0\x12\u00FC\u00AF\u00BE\x01E\u00F7i6V*\x04\x14\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_cancel_m.png","category":""};
w14_cancel_m;
// ==================== |--------------| ====================
// ==================== | w14_cancel_l | ====================
// ==================== |--------------| ====================

var w14_cancel_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00F2IDAT(\u0091\u008D\u0092\u00C1m\u00C30\fE\u009F\u00BD\u0081\u00EF\u00FF\u00E4\u008C\u0090\u008C\u00E0\u008C\u0090\u008C\u00D0\u008C\x10\u008F\u00E0\u008C\u00D0\u008E\u0090\x15\u00EA\x15<Bs\u00FAw\u008F\u0090\x1EJ\x15\u00AC\u0092\x00\u00FD\u0080 \u0081\u00D2#?A5\u00F7\u00FB\u009D,\u00DB=0\x00=\u00B0\x02\u008B\u00A4\u0099JM\x06m\u00BF\x03o\u00F5#`\x01N\u0092\u0096\x07\u00D0\u00F6gTz\u00A5\x15\u00D8\x17\u00B8\rhJ\u00D0\x1A\u00AB\u00E8\x16{\x07\\K\u00B0\u008D=\u00DB\u00DB\x01\u00FB\u0080GI\x1B\u00A0\u00F4\u00D8\u00DB>\x00\u00B4\u00B6\u0087\u00C8Vt\b;\x1BI\x17\u00DB[`\u009B\u00EE\u0087R\u00B1\u00AFz\u0099l\x0F\u0092\u008A\u00DDk\u0095\u00B8+\u00E0\u00AD\x02GI\u00B3\u00ED\u00F2\u00F8X\u00F5\u00BC\x02\u00B41\u00A3|1\u0087\u00BD/\u00DB\u00E7\u00B0\u009D\u0093\u00CF\x10\u00E3\u00B0}\x06\u00A6\u009C1\u00D9[\u00D3y\u0091\u00B4+V\u0091t\x01>\x12\u00F0\u00D0ST=\u0096`\x19\x07\u0092N\u00C0\u00C8s\u00CD\u00FC\f\u00FF\u00D7r\u00F3\u00E4\u00AFv\u00FC\u00FD\u00ABs\x06^\u0082\u00FF\u00D57b\u00A6f\u00F6G\x12\u009Bk\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_cancel_l.png","category":""};
w14_cancel_l;
// ==================== |------------| ====================
// ==================== | w14_comp_l | ====================
// ==================== |------------| ====================

var w14_comp_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u0097IDAT(\u0091\u00D5\u0092M\r\u00C2\x00\f\u0085\u00BF.\x13\u0080\u0080z`\x12\u0090\u0080\x04p\u0080\x04\u00EE\\\u00E6\x00\x0E\x130\tH\u00D8\x1C\u0090\u00B4\x02\u0086\u0082r\u00E9\x0E\x1C`?\x07\x12\u00DE\u00A9I\u00FB\u00F2\u00BE\u00A6\u0095\u0088`\u008D\u008AU.\u00A0t\u00F7\rp\x07j\u00A0\u00CDz\u00FB\u00C5\u00D3\x03\u00BB\x128\u00E5\u00E0\x15\u00A8&Ld\u00BF\u0096\u0088\u00C0\u00DDo\u0099\u00B4(\u0091\u00D1\u00A0\u00AA\u0083\u00BB\u009F3\u00F9\u0093:U\x1D\u00C4\u00CC\x0E\u0089\u00D9\x03\x17\u00A0\u0099@\x058\x16@\x07<g\f\u00BFi\u00DC\u00B1\x02\x1E\u0089\u00BA\u009F\u0081\u00DA\u008A\u0099\u00FD\u00C99\u00E4\u00E7\u00BF\u00FA\x02QBH\u00A2\x16\x16\u00F1\u00BB\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_comp_l.png","category":""};
w14_comp_l;
// ==================== |------------| ====================
// ==================== | w14_comp_m | ====================
// ==================== |------------| ====================

var w14_comp_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u0098IDAT(\x15c\u00FC\u00FF\u00FF?\x039\u0080\u0089,]\f\f\f,---\x02\f\f\f\x07\x18\x18\x18&000l\u0080\u00B2\u00F51T\"\u00C0E\x06\x06\x06\x07\x16\x06\x06\u0086\x02\u00A8\u00C2\u00F9\f\f\f\x06\x0441@\u00E5'\u0080\u00FD\u00D8\u00D2\u00D2\u00B2\x00j\x13I62\u00C04\u00D4\u00D4\u00D4|hiii\u0080\u00DA\u008C\x0B\\\x00\u00A9clnnN\u0080:\x13dR7\x03\x03\u00C3\x12\x1C\x1A\u0090A\"(T/000|\u00C4\u0090\"\x00`~\x049\u00ED\x01\u00D4\u00A9\x01D8u\x03\u00C8\u00A9C$:\u00E8\u009CV\x19\x18\x18\x00\u00B7\u00AAD\"\u00B2\u00E0\u0082\x02\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_comp_m.png","category":""};
w14_comp_m;
// ==================== |------------------| ====================
// ==================== | w14_eyedropper_m | ====================
// ==================== |------------------| ====================

var w14_eyedropper_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00BEIDAT(\x15\u009D\u0092\u00D1\r\u00C2 \x10\u0086?M\x17\u00E8\n8\u0082+\u00D8\x11t\u0084\u00CE\u00D0\u0087{\u00BC\x07W\u00D0\x11t\x04]\u0081Y:\x02\u00E6\f4\u00A4@\x1F\u00FA'$\u00C0\u00FD\x1Fw\x07\x1CB\b\u00EC\u00D1q\x17\x05t\u00C5NE\u00AAz\x05\u00EE12\u0089\u00C8\u00BBY\u00AA\u00AA\u00F6\u00C0\b\u00CC\u00C0#\x0B\u00D9\u00FAT\u00CD\x18\u00A1\x0Fp.\u0082`1\u00D7\u00EA\u00D1\u00C5Q\u00D3WD|\x0B\u00B4L}\u00B1\x0B\x1E\u00B8Q\u00BBUU\x1DcOf\x1AbO\x0B(\"s\x01V \u00B7\u00CA\u00EC\u00D3\u00A4\u00DB\u0080\u00EC\t\u00D2z\u00B2CD\u00E4Y\u0080\u00D1hZCC*/W\x0E\u00A6\u0092^\u00C0e\x0B2\u00FD?\u0080\u00AA\u009A\u00D1\u00DE-\u00EF\u00A5\t\u00E5\x19\u00CD`\u00F5\u00DBwj\u009A\x17\x01?\x0EABN\u00EAi\u00F9b\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_eyedropper_m.png","category":""};
w14_eyedropper_m;
// ==================== |------------------| ====================
// ==================== | w14_eyedropper_l | ====================
// ==================== |------------------| ====================

var w14_eyedropper_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00B4IDAT(\u0091\u009D\u0092\u00C1\r\u00830\fE\x1FU\x17\u00E0\u00EE\x13\x1D\u0081\x15`\x04:\x023\u00B0J\x19\u00A1+\u00B4+d\u0084\u00DE\u00FE=#\u00D0\x03\u00A1\u008A \u0089*\u00BEd)\u0091\u00FD\u00E2\u00EF$\u00D5\u00B2,\u009C\u00D1\u00E5\x14\u00F5/(i\u0090\u00F4\t1\x00T9\u00AB\u0092j`\x04<\u00F0\u0088R\x1E\u00B8]\x0B\u00D0\x0Bh\x13\u00E9\x1AhrV\u009B\x10)\u00BD\u00CD\u00CC\u00E5\u00C06\u009C\u00BC\u0097\x03\u00EE\u0090\u00B8\x1CI#\u00EBL\x0E\u00E8Yg\u00FA\u0081f\u00E6\x0F`\x02jv\u009D\u00DD\u00B6\u00B8\x16\u00A0!\u00DAO@cf\u00F3\x01\f\u0085$\u00A0~\u00B3\x17+\x067KO\u00A0+A\x10>\u0080\u00A4\u008E\u00F5\u00DD\u00E2Y\u00B2P\u00DC\u00D1\x0330\u0095\u008Ac}\x01\u008C*I@\u00A4\x153\u00A2\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_eyedropper_l.png","category":""};
w14_eyedropper_l;
// ==================== |------------| ====================
// ==================== | w14_back_l | ====================
// ==================== |------------| ====================

var w14_back_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00C8IDAT(\u0091\u009D\u0092\u00C1\x11\u0082@\fE\x1F\u008Ew) 3\u00D2\x01\u0096\u00A0\x1D`\x07v \x1D\u0088\x1D\u00D0\x01\u0094@\x0Bv\x00\x1D\u00E8L\n\u00C0\n\u00F0@`2+\x1E$\u00B7M\u00F6\u00ED\u00FF\u00C9&\x1A\u0086\u00815\u00B1\r\x13\u00AA\u009A\x009p\u00B0T\x0F4\"R\u00FB{\u0091WT\u00D5\x12\u00B8\u00FE\x10\u00E9\u0080LD\u009E\x00\x1B\x07\x15\x01\u00F4\x06\x1E\u00EE\u009C\x02\u008D\u00AA\u00C63h\u00F6n\x01t\x04\u008A@5\u00B56f\u00C5l\x01\x02h\x16,_<\x18{HDZ\u00C6\u00A1d\u00C0\t8[\r`\x0F\u00DFS\u00DD1N\u00B3\x05\x12\u00A7\x1C[m\u008E\t\u00EC]\u00AER\u00D5\u00C9fi}\u00F9xy\u00ABa/\u0095\u00D9\u00CC\u00C3\x06\u0081z\x06\u00EDo\u00EE\x0Bp\u00F8`g.\u00D6/@\x14\u00EE\u00EA\u00AA\u0095\u00FB'>\u00DE'L\u0097\u009C?\x7F3\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_back_l.png","category":"14w"};
w14_back_l;
// ==================== |------------| ====================
// ==================== | w14_back_m | ====================
// ==================== |------------| ====================

var w14_back_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00C8IDAT(\u0091\u009D\u0092\u00C1\x11\u0082@\fE\x1F\u008Ew\u00E9@:\u00C0\x12\u00B4\x03\u00EC\u00C0\x0E\u00A4\u0080\u00CC\u00883)\u0080\x0E\u00A0\x04Z\u00B0\x03\u00E8@;\u00C0\n\u00F0@`2+\x1E$\u00B7M\u00F6\u00ED\u00FF\u00C9&\x1A\u0086\u00815\u00B1\r\x13\u00AA\u009A\x009p\u00B0T\x0F4\"R\u00FB{\u0091WT\u00D5\x12\u00B8\u00FE\x10\u00E9\u0080LD\u009E\x00\x1B\x07\x15\x01\u00F4\x06\x1E\u00EE\u009C\x02\u008D\u00AA\u00C63h\u00F6n\x01t\x04\u008A@5\u00B56f\u00C5l\x01\x02h\x16,_<\x18{HDZ\u00C6\u00A1d\u00C0\t8[\r`\x0F\u00DFS\u00DD1N\u00B3\x05\x12\u00A7\x1C[m\u008E\t\u00EC]\u00AER\u00D5\u00C9fi}\u00F9xy\u00ABa/\u0095\u00D9\u00CC\u00C3\x06\u0081z\x06\u00EDo\u00EE\x0Bp\u00F8`g.\u00D6/@\x14\u00EE\u00EA\u00AA\u0095\u00FB'>\x17\rJWp\u00D7\u00A6{\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_back_m.png","category":"14w"};
w14_back_m;
// ==================== |------------| ====================
// ==================== | w14_next_m | ====================
// ==================== |------------| ====================

var w14_next_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00D2IDAT(\x15\u009D\u0092\u008D\t\u00C2@\fF\u009F\u00E2\x00\u00DD@7\u00D0\r\u00EC\x06\u00BA\u0081\u00DD\u00C0\x0E\x10P!\x038\u0082nP'\u00D0\x11t\u0083\u00BAA\u009D\u00A0r\u0092\u0096\u00F4\u00AA \r\x04\u00EEr\u00F7\u00C8\u0097\u009FQ]\u00D7\f\u00B1I\u00CC\u00A8\u00EA\f\u00C8\u0081\u0085\u0085*\u00A0\x10\u0091\u0093\u00FF\u00D7\u00C9\u00A8\u00AAG`\u00FBC\u00C0\x03X\u008BH\x19.c\x07\u00ED\u00BF@Ow\u009E\u0087\u00CC\u00AA\u009A\u00B4\u00A0\u00C9\u00DBE\u00D0\u00D9\u00E4>\"8\u00F7\x19\u00D7=a\u00B0\u00B1x\x1A\u00C1\u0099\x07\x13\u00F7p\x01\x0E\u00E63\x11\u00A9\"x\u00DA\u00A9\u00D1Y(\u00FE\u00E6\x1C\u0083K\u00FF\u00A9\x01+\x17\x0B\r\u00BA\u009Ag\u00D6\u00830\u008A\u0095oX\x03\x16\u00BD\u00BCp\x11\u0091\u00CC\u00A0Poc\u009Fy\u00B6s\u00B4q\u00F8\u00CE\u00BE\u0080;\u00B0t\u00B1Pg\x1A\u00A4\x0F^\u0080\u00DE\u00AE\x0EZ\u00B9\u00BF\rx\x03\x14\u00D6W\u008E\u00A8\u00FC\u00C4\u00AA\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_next_m.png","category":"14w"};
w14_next_m;
// ==================== |------------| ====================
// ==================== | w14_next_l | ====================
// ==================== |------------| ====================

var w14_next_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00D6IDAT(\x15\u009D\u0092\u0081\r\u0082@\fE\u00BF\u00C6\x01\x18\u00A0\u0089l\u00A0\x1B\u00C8\x06\u00B2\u0081l \x1B\u00E8\b\u008E\u00A0\x1B\u00C8\x04:\u0082l\u0080I\x07\u00C0\t05\u00FFH941\u00FC\u00E4\u0092\u00A3\u00DCK\u00DB\u00DF\u00CE\u00BA\u00AE\u00C3\x14-bFUS\x00%\u00805C-\u0080\u00AB\u0088\u009C\u00FD\u00BBAFU=\x01\u00D8\u00FF(\u00A0\x06\u0090\u008BHc\x1Fs\x07\x1D\u00BF@Ow_YfUMz\u0090\u00E5\x1D\"\u00E8\u00C2r\u00EB\b.}\u00C6|T\x18\u00B0c<\u008B\u00E0\x02\u00CE\u009C\u00C4\u00FD\u00A8\x00<xOE\u00A4UU\u0083\u00EF\u00CC\u00B8\x1C\u00F4\u00E8\u00D4\u00F0Q80\u0098\u00F1^\x01l]\u00CC\f\u00BA\u00F1\x14\u00F4\u00C0F\u00B1\u00F5\u0086\x05\u00F0:\u00CA\x0BT\"R\x10\u00B2~\u0083>\u00F3\u00EC\u00E7\u00C8qxg_\u00ECu\u00E3bfRf\u00A5O^\u0080\u00D1\u00AENZ\u00B9\u00BF\x05\u00E0\r\u00A5\u00E4\\hP:\u00AF\u00D3\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_next_l.png","category":"14w"};
w14_next_l;
// ==================== |------------| ====================
// ==================== | w14_news_l | ====================
// ==================== |------------| ====================

var w14_news_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u0095IDAT(\x15c\u00FC\u00FF\u00FF?\x039\u0080\u0089,]\f\f\f,0\u00C6\u0093'OB\x19\x18\x18\u008C1T`\x07gY\u009E<y\"\u00C8\u00C0\u00C0p\u0086\u0081\u0081A\t\u00AB\x12\u00EC\u00E0,\x0B\u00D4\x16dM\u00AEX\u0095\"\u00C0*\x14\u00A7\"\u0081\x0E\f\x11T \u0088K#\u00B2\u00ED\u0082P\u00FA=\u00BA\"l\x1A\u00F7 \u00B1a\u0081u\x16I,\x14\u0097\u00C6P\f\x11,\x01\u0087Mc'\x12\u00DB\x05\u008B+\u00CAA\x048\u00E5<y\u00F2\u00E4.\u0089\u00D1\u00B1\x1A\u009E\u00E4\u009E<y\x023\u009D \u0090\u0091\u0091\u00D9C\u00E7\u00B4\u00CA\u00C0\u00C0\x00\x00\u00AE1$s4X\u00AE`\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_news_l.png","category":"14w"};
w14_news_l;
// ==================== |------------| ====================
// ==================== | w14_news_m | ====================
// ==================== |------------| ====================

var w14_news_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u0093IDAT(\x15c\u00FC\u00FF\u00FF?\x039\u0080\u0089,]\f\f\f,0FKKK(\x03\x03\u00831\u0086\n\u00EC\u00E0,KKK\u008B \x03\x03\u00C3\x19\x06\x06\x06%\u00ACJ\u00B0\u0083\u00B3,P[\u00905\u00B9bU\u008A\x00\u00ABP\u009C\u008A\x04:0DP\u0081 .\u008D\u00C8\u00B6\x0BB\u00E9\u00F7\u00E8\u008A\u00B0i\u00DC\u0083\u00C4\u0086\x05\u00D6Y$\u00B1P\\\x1AC1D\u00B0\x04\x1C6\u008D\u009DHl\x17,\u00AE(\x07\x11\u00E0\u0094\u00D3\u00D2\u00D2r\u0097\u00C4\u00E8X\rOr---0\u00D3\t\u0082\u009A\u009A\u009A=tN\u00AB\f\f\f\x00\u00CD(!\x13rv\u00DD\u00FE\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_news_m.png","category":"14w"};
w14_news_m;
// ==================== |------------| ====================
// ==================== | w14_help_m | ====================
// ==================== |------------| ====================

var w14_help_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u008BIDAT(\u0091c\u00FC\u00FF\u00FF?\x039\u0080\u0089,]\u0094hdA\x17hii\x11d``\u0098\u00C9\u00C0\u00C0\x10\n\x15z\u00CF\u00C0\u00C0PQSS3\u008B\u0090\u008D\x1DH\u009A@\x00lPKK\u008B\x0B!\u008D \u0093\u00CF200\u0084100\b!\u0089\x1B#+\u00C2\x19\u00AA--- \u0085\u00BB\u00A16\u0082\u009CkRSSs\x0F\u009F\u008D0\x00\u00D3\x04\u00B2]\x19Y\x13!\u008D\u00EFaN\u00AF\u00A9\u00A9y\u008F.\u0089O\u00A3\x12\u0094\x06\u00D9\u008A\x01\u0088\u00B1\x11+\x18*I\u008E\u0081\u0081\x01\x00\u00A0\u00CB#\u0088\u00C0\u00B4'\u00EE\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_help_m.png","category":"14w"};
w14_help_m;
// ==================== |------------| ====================
// ==================== | w14_help_l | ====================
// ==================== |------------| ====================

var w14_help_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u0090IDAT(\u0091\u00BD\u0092\u00C1\r\u00830\fE\x1F\x15\x0B\u00A4\u00E7\x7F\u0082\x11\u00E8\b\u00AC\u00D0\u00CE\u00D2\x11X\x01V\u00E9\f\u00AC\u00D0\u0093\u00EF\x19!\\\x12)B@\x10\u0095\u00FA/\u0096\u00BE\u00FD\u00F4-\u00CBU\b\u0081+\u00BA]\u00A2~\x01\u00EB\u00B5af\x0E\x18\u0081g\u00B4<\u00F0\u00964\u0095\x12\u0087\f\x02p\u00C0hf}\t\u009C\u0080\x19x\x01\u00F7\u00CC\u00EF\u00F2\u00A1j\u00EF\u00AAf\u00D6\x01\u009F\u0098\u00E8\u0081\u0087\u00A4\u00EFQbR\u0082f\u00A0\u00CD\u00A1\x12\u00E8\u00D3\u00EA\u0092\u00FC\u00BAy\x046\u00B1\u00BA\u00AD\u00E6\u0099\u00C4M\u00ED\x1E\u00A7\u00A4\u00FF\u00BF\u00DC\x02<\u00AB\"hN6\u00BD:\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_help_l.png","category":"14w"};
w14_help_l;
// ==================== |------------| ====================
// ==================== | w25_back_r | ====================
// ==================== |------------| ====================

var w25_back_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x19\x00\x00\x00\x19\b\x06\x00\x00\x00\u00C4\u00E9\u0085c\x00\x00\x00\tpHYs\x00\x00\b\u00A6\x00\x00\b\u00A6\x01\u00E0\u0081\u00E0\u00E7\x00\x00\x01\u0084IDATH\u0089\u00BD\u0096\u00C1q\u00C20\x10E\x1F\u0099\u00DCa\u00C6\u00A7=\u00E1\x0EB*\u0088K \x15\x00\x1DP\x02\u00A9 \u00E9 N\x07\u00A4\x03\u00E8\u0080T\x10\u00FB\u00A4\u0093fH\x05\u00E4`\u0089\u0091\u00C5Z&\t\u00E4\u009Fly\u00A5'\u00ADV_\x1E\x1C\x0E\x07\u00AE\u00AD\u009B\u00AB\x13\u0080\u00DBs\u0082\u00AC\u00C8\x04\u0098\x02E\u00D0\u00BC\x076\u00C0:3\u00A6J\u00F5\x1F\u00A4\u00D2eE\u00A6\u00C0\x0B0\u00EE\u0099\u00C7\x16Xf\u00C6\u00EC~\x04\u00B1\"%0\u00EB\x19<\u00D6\"3\u00A6\u008C\x1B\u00D5=\u00F9%\x00\u00E0\u00D5\u008A,{!Vd\u0095\x00|\x01\x0B\u00E0=\x01zvi>\u00AA\u0095.+\u0092\x03\u009F\t@\u00E1\u00F3nEv\u00C0]Gl\u009D\x19\u0093\u00FB\u0097x%\u00AB3\x01\u0093\x04\x00`lE\u00E6]\u0090)\u00A7\u00D2\x00\u009B\x04\u00C0\u00EB\x14bE\n`\u00D8\x03\u00C8\x1D \u008E\u00D3\u00F4\u00E0\x1F\u00C2\u00C38R\x02\u008B\u00B0\u00F6\u00DD\u00A1;\u0089\x0BV7\u008C\u00DA\u00F3\u00CC\u0098*L\u00D7$\u00EA[w\x1D\u00AEX.\u00AER>\u00E5\u00D0^I<\u00E0\u00D8\u008A\u0094\u00991\u00F3`f#e2\u00D0\u00EC\u00A5V\bU\f\u00D9+A3+B\b\u00A2\u00B1\u0099Te\x1D\u00E5=\u00ED&h\u00D8\u00D0l\u00B4\x06*]\u00CC\u009E\u00C6$?\u00CE`l\u00FDC\\\u00C2\u00EB\u008E\x0E\x1A\u00A8\u00EE\u0081\u0094]\u0090U\u00A2\u00D3\x11\u00E4\u00A4U\u00A3W\x1D\x1Ae\x0B\u00E2r\u00F8\u00D4\x03\u00DA\u00D1\x14I\u00EA\u00AC\u00B4LR\u00B5\u00FA?\u00B80(v\u00AFZ\u00BD\u00AB\u00A6\u00B7K\x00:!\x01\u00E8\u0091\u00FE\r\u0086\u00A6\u0092\u00EE5\x00\u00F4\\\u00BF^W\u00BD\u00E3/\u00A5\x7F\u00F9%\u00FA\x06\u00E04\u00AC\u00B1\u00C1X\x1B8\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w25_back_r.png","category":""};
w25_back_r;
// ==================== |------------| ====================
// ==================== | w25_back_m | ====================
// ==================== |------------| ====================

var w25_back_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x19\x00\x00\x00\x19\b\x06\x00\x00\x00\u00C4\u00E9\u0085c\x00\x00\x00\tpHYs\x00\x00\b\u00A6\x00\x00\b\u00A6\x01\u00E0\u0081\u00E0\u00E7\x00\x00\x01}IDATH\u0089\u00BD\u0096\u00EDm\u00C20\x10\u0086\x1FP\u00FF\u0097\r\u00A0\x13\x14&(#\u00A4\x13\x00\x13\u0094\x01N*\u0095\u00EE\x7F\u00D9\u00A0\u00E9\x04\u00A5\x13\x146\u00A0\x1B\u0084\r\u00E8\x04\u00F4G\u009C\u00CA1g\u009B~\u00D0W\u008A\x149\u00E7<\u00CE\u00DD\u00F9u:\u0087\u00C3\u0081s\u00AB{v\x02pqJ\u0090\u00AA\x0E\u0081\x02\x18{\u00C3{`\r\u00ACD\u00A4J\u00CD\u00EF\u00A4\u00D2\u00A5\u00AA\x05\u00B0\x04\u00FA\u0099ul\u0080\u00B9\u0088l\u00BF\x05Q\u00D5\x12\u0098d^\x1Ej&\"e8h\u00D6\u00E4\u0087\x00\u0080'U\u009Dg!\u00AA\u00BAH\x00>\u0080\x19\u00F0\u009A\x00=\u00BA4\u00DB\x10U\x1D\x00\u00F7\t\u00C0XDJ\x11)\u0080\u00F7\x04h\x19\u0085\x00\u008B\f`\u00EB\x163\x04\u00AE\x13\u0090\u00BE\u00AANc\u0090\u0082cY\u0080u\x02\u00D0\u00E8\x18\u00A2\u00AAc\u00E02\x03\x188@\x18g\u00E9\u00A6\u00B9\u00F9jaW\u00AC\u0097 p\x14\u00EB}_\u00DE\u00D7\u0085\u00F0+\x11\u00A9\u00FCt\r\u0083\u0080\u00DD)\x00\x00\x17W\x19\u008F\x06\u00D0\u00B6\u0095\u00F0\u0085}U-Ed\u00EA\u00AD\u00B8g,\x06\u00EAZZ\u008DPA\u00BB\u00F0{#h\u00E26\u00A6\u00AF%\u00F0\x16\\w\u00C6\\\x1AO\u00EBz\x03k\u00EABGA\"\u00B2\u00A76\u00C9\u00D4\x1Ei\u00B4in\u00C2\x16^E&X\u00A0]\x06R\u00C6 \u008B\u00C4\u00A40u\u00BDD\u00EC\u00CE7\u00CA\x16\u00C4\u00E5\u00F0!\x03\u00DAR7Ij\u00AF\u00B4L\u00D2\u00B4\u00FA_\u00B80\x18voZ\u00BDk\u00DB\u00E7\u00BF\x00D!\x1E\u00E8\u0096|\u0081\u00A1\u00EE\u00A4\u0091\x05\u0080\u00CC\u00F1\u00DB\u00E8\u00ACg\u00FC_\u00E9_~\u0089>\x01E\u00F9\u00A9\u00ED\x02\u009A\u00F5\u00AF\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w25_back_m.png","category":""};
w25_back_m;
// ==================== |-------------| ====================
// ==================== | w25_check_r | ====================
// ==================== |-------------| ====================

var w25_check_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x19\x00\x00\x00\x19\b\x06\x00\x00\x00\u00C4\u00E9\u0085c\x00\x00\x00\tpHYs\x00\x00\b\u00A6\x00\x00\b\u00A6\x01\u00E0\u0081\u00E0\u00E7\x00\x00\x01\u008BIDATH\u0089\u00BD\u0095\u00C1q\u00C20\x10E\x1F\u00994\u00E0\u00D1IWR\x02)\u00C1\u0094@J0%\u0090\x12\u00D2B\\\x02\u0094\x00%@\t\u00F8\u00AA\u0093\u00C6%\u0090\u0083$\u00CFZ\u0096@\u00C0\u0090\u009Da\x18\u00DBk=\u00ED\u00EE\u00D7\u00F7\u00ECr\u00B9\u00F0\u00EAx{9\u00E1\u00BF \u00EF\u00B7\x12\u00AC\u00D65\u00B0\x02j`\u00EEo\u00F7\u00FE\u00B7\x03ZeLwm\u008DYn&V\u00EB9\u00B0\x05\x16\x05\u009B\u00DD\x01keL\u009Fz\u0098l\u0097\u00D5z\x03\x1C\x0B\x01\u00E0*=[\u00AD\u0093\u00F9\u0093J<\u00E0\u00A7p\u00F18z`\u00A9\u008C9e!\u00BEEG\u00A0z\x10\x02\u00D0\x01\u009F\u00B2uq\u00BB\u00B6O\x02\u00C0\u0089c#o\f\x10\u00AF\u00A2\u00D2\x19\u00C8h\u0081% [\u00D4X\u00AD\u0087\u00CD\u00CAJV\u008F\x00\u00941ke\u00CC\u00C1\u0083\u0082\u0094+\u00A0IA\u00EAh\u0081p\x0E\u0092\u00B2\f\u0080p\u00E1g s\u00C3\u0099\x1AA\u00E4,\u0082J\u00BE\u00FC\x0Ec\u00D0\b\x00`\u00B5\u00FEe\u00DC\u00EEa\u00D39H\x1Bd\u00E8\u00FF%(\x07h\u00C8\u0084\u0084Hk\u00A8\u00E5\u00E0\x04\u00E8\x1E\u00C0\u00F0\u00FEpN\u00AC\u00D6gD\x1FqjY\u00E6\u00AC\u00A2\u00A0\u0082N\x19\u00F3\x11W\u00D2FI\x0B`/+\u00BA\x030ZOB\x0E\u0089\u00C4$\u00A8\x000Zo\u0080\u00F8\u00BE\u00C7\u00D5L@\u0085\u0080V\u00FAW\u00EC]\x15\u00CE\u00BB\u00E6\u0089\x17;\u009C\u00C2n\u00B9\u00C2\u00C4\u00BBR.\u00BC\x00\u00F6<\u00E6aI\x17\u009E|O\u0084\\O\u00F1\u00B3\x1B\x11\u00D48y\u00EF\u00DA\u0097\u00B1\u00C2\u00B9i\u00C3\u00F5\u00AAz\u00DC\f\u00BEs\tYH\x04lps\n&\u00DA\u00F9\u009Dw\u00CA\u0098\u0094X\u00EE\u0087<\x1B\x7F\u00DD\u0083\u00B8\x12\f\u008B7\u00CF\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w25_check_r.png","category":""};
w25_check_r;
// ==================== |-------------| ====================
// ==================== | w25_check_g | ====================
// ==================== |-------------| ====================

var w25_check_g = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x19\x00\x00\x00\x19\b\x06\x00\x00\x00\u00C4\u00E9\u0085c\x00\x00\x00\tpHYs\x00\x00\b\u00A6\x00\x00\b\u00A6\x01\u00E0\u0081\u00E0\u00E7\x00\x00\x01\u0092IDATH\u0089\u00BD\u0095\u00C1q\u00C20\x10E\x1F\u00994\u00E0\u00B3n\u00A4\x04R\u00829\u00A8\x00R\u00829\u00A8\x00RB\x1A\u00F0!.\x01\n\u00F0\x01J\u0080\x12\u00F0\u00CDg\u0097@\x0E\u0092<kY\x02\x03Cv\u0086al\u00AF\u00F5\u00B4\u00BB_\u00DF\u00B3\u00CB\u00E5\u00C2\u00AB\u00E3\u00ED\u00E5\u0084\u00FF\u0082\u00BC\u00DFJ\u00D0m\u0099\x03+ \x07\u00E6\u00EEv\u00E7~;\u00A0\u00AA\u0095i\u00AE\u00AD1K\u00CDD\u00B7\u00E5\x1C\u00D8\x02\u008B\t\u009B\u00DD\x01\u00EBZ\u0099.\u00F60\u00DA.\u00DD\u0096\x1B\u00E08\x11\x00\u00B6\u00D2\u00B3n\u00CBh\u00FE\u00A8\x12\x07\u00F8\u0099\u00B8x\x18\x1D\u00B0\u00AC\u00959%!\u00AEEG {\x10\x02\u00D0\x00\u009F\u00B2ua\u00BB\u00B6O\x02\u00C0\u008Ac#o\u00F4\x10\u00A7\u00A2\u00A93\u0090Q\x01K@\u00B6\u00A8\u00D0m\u00D9oVV\u00B2z\x04P+\u00B3\u00AE\u009598\u0090\u0097r\x06\x141H\x1E,\u00E0\u00CFAT\u0096\x1E\u00E0/\u00DC\fd\u00AE?S\x03\u0088\u009C\u0085W\u00C9\u0097\u00DBa\b\x1A\x00\x00t[\u00FE2lw\u00BF\u00E9\x14\u00A4\u00F22t\u00FF\x12\u0094\x02\x14$BB\u00A45\u00E4rp\x02t\x0F\u00A0\x7F\u00BF?'\u00BA-\u00CF\u0088>b\u00D5\u00B2LY\u00C5\u0084\n\u009AZ\u0099\u008F\u00B0\u0092*HZ\x00{Y\u00D1\x1D\u0080\u00C1z\x12r\u0088$FA\x13\x00\u0083\u00F5z\u0088\u00EB{X\u00CD\b4\x11PI\u00FF\n\u00BD+\u00C3z\u00D7<\u00F2b\u0083U\u00D8-W\x18yW\u00CC\u0085\x17\u00C0\u009E\u00C7<,\u00EA\u00C2\u00A3\u00EF\u0089\u0090\u00EB)|v#\u00BC\x1AG\u00EF]\u00FB2fX7-\u00B8^U\u0087\u009D\u00C1w*!\t\t\u0080\x05vN\u00DED\x1B\u00B7\u00F3\u00A6V&&\u0096\u00FB!\u00CF\u00C6\x1F\x06d\u00B7nH\u00F3\u00FB+\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w25_check_g.png","category":""};
w25_check_g;
// ==================== |---------------| ====================
// ==================== | w18_discord_l | ====================
// ==================== |---------------| ====================

var w18_discord_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x00\u00E8IDAT8\u008D\u00CD\u0094\u00E1\r\u00820\x10\u0085\u009F\u0086\u00FF2\u00C0\u00FB\u00E1\b\u008C\u00C2\b\u00B8\x01n\u00E2\x06\u00EA\x06\u00BA\x01\x1B\u00C8\b\u009A\u00BE\x01p\x02L\u00C9A*\u00A9\x06\u00D4\x1F^\u00D2\x14\u008E\u00BE/w\u00AF-\u008B\u00B6m\u00F1\u008BHB\u0086\u00A4\x1C@6\u0081[\u0093<\u0085\u0089\u00A1\"I\x05\u0080\u00FD\u008C\u00E26$\x0F1\u00D0\u00EC\x1EI.\u00FA\u00E7\u00E5\\\u00F1\u00ABH\u00DE|\u00BB\x01\u00A8\x00\\\x01\u00A4\x00r\u009BW\u00B1\u00C5\u00AF@[\u0092\u00BBQ\u00AE\u0094\u00E47\u00E2\x12\x13\u00C4Z\u00BB\u00F7\x10I\u00EB~\u0096\u0094\u0092\u00AC\x01\u009C\u00A7\u0082*\x13\u0097~\u009B\u0083\\_a\x1D\u00D1DA\u00B5U\u00E2\u00C5\u0085\u00E5\u00BC?\x07k\u00AD\u008A\u0081b\x1E\u00E5\u00B6\u00B8;\u009C&\u00F6\u00A3\u00B1\u00AA\u00C6\u00DEu\u00F1\x7F\u00E7(\x04\x1D\u00BF\x01\r\x1E\u0091,$5\x13.\u00AD\u00BF_\u00DE\u00A7\u00E7\u0083\u00E9=\u009A;\u009Cs\u0099s\u00AE\tu\x1F\u0081\f\u00B6\x0E\u00DF\x7F\u00F3c\x03\u00F0\x00\u00F8\u00FE\u00BE}\u00EC\u00FC1\u00F7\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_discord_l.png","category":"18w"};
w18_discord_l;
// ==================== |---------------| ====================
// ==================== | w18_discord_r | ====================
// ==================== |---------------| ====================

var w18_discord_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x00\u00EFIDAT8\u008D\u00CD\u0094\u00D1\r\u00820\x10\u0086\x7F\f\u00EF\u0092\u00F4\u0085{c\x04Fa\x04\u00DC@7q\x03q\x03\u00DD\u0080\r\u00EC\b\u00FAt/4\u00C1\t0%\x07\u00A9\u00A4\x18\u00AA<xIS8\u00FA\x7F\u00B9\u00FB\u00DB\x12u]\u00875\"v\x19\u0086\u00A8\x00\u0090/\u00E0j\u00C5|q\x13cE\u0086\u00A8\x04p\n(n\u00A7\u0098+\x1F(\u00B8G\u00C5\x1C\r\u00CF\u009BP\u00F1\\\u00C4\x1F\u00BE=\x00\u00D4\x00\u00EE\x00\x12\x00\u0085\u00CC[\u00DF\u00E29\u00D0A1\x1F'\u00B9\u00BD!\u00B2\x1Bq\u00F3\t|\u00AD=\x07\u0088!\u00CA\u0086\u00D9\x10%\u008AY\x03\u00B8.\x05\u00D5\"\u00DE\u00DBmvrC\u0085\u00DA\u00A3\u00F1\u0082\u00B4Tb\u00C5\u00A5\u00E4\u00AC?\u0095\u00B4V\u00FB@>\u008F\nY\u00DC\x1FN\x11\u00DB\u00D1JUS\u00EF\u00FA\u00F8\u00BFs\u00E4\u0082\u00CE\u00BF\u0080F\u008F\x14si\u0088\u00DA\x05\u0097\u00D6\u00DE/\u00EB\u00D3\u00FB\u00C1\u00B4\x1E\u0085\u008E&M\u00F3&M[W\u00F7\x15H`\u0099\u00FB\u00BE\u00CE\u008F\r\u00C0\x0B\u00AA6\u00B2\x15\u008F\u0093s\u00A1\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_discord_r.png","category":"18w"};
w18_discord_r;
// ==================== |-------------| ====================
// ==================== | w18_forum_l | ====================
// ==================== |-------------| ====================

var w18_forum_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x00\u00F7IDAT8\u008D\u00DD\u0093\u00C1\r\u0082@\x10E\u00BF\u00C6\u00BBz\u009FD:\u0090\x12(\u0081\x0E\u00A4\x04\u00EC\u0080\x0E\u00A4\x04\u00EC\x00;\u00A0\x04\u00EC\x00\u0093)\x00*\u00C0\u00AC\u00F9k\x16\x02,\x07O\u00CEe\u00C3\u00EE\u00F2\u00E6\u00CF\u009F\u009DM\u00DF\u00F7\u00F8E\u00EC\u00A6\x18\u00AA\x1A\x028\u00F0\u00B3\x16\u0091\u00D6\u0097k\u00A0HU3\x00)\u0080\u00FD\u00E8\u00DE\x03@&\"\u00F5\"HUM\u00F6\n\u00C0y!i\x07 \u009A\u0083m\u00B9\u00A6\x1E\b\u00A8\u00B2\u009C;\u00B4\x1EE\x1E\u0088\u008D\u0093\u00AA&\u00F4\u00AFp\u00BD\u00B3\u008A\u00BCf:\x11\x00\u00B8\u0099&\u00B0)\x03P\u00B1\x12\u00D2\u00B9\u00EAL\u00A9\u00F4\u00F7\x0B\u00AAV\u0082r\u00FA\u00E9\u00C2b\x17\u0094s}\u00CE\x00\u00CC\u00FE\u0095?\u008D\u009F\u00C6G\u0091m\u00BF\u00A9\u00B5\x15\u0091\u0086RC\u00E7RH_.3I\u008E\u00C6\u00F4\u00C9\x11!\u00AC\u0099\u00C8>\u008E\u00BB\u0088$ni\u0083`[\u00CD\u0093xy@\u00B15\u00DB;\u00B4\u00AA\x1A\x13j\u00CB\u00AD\u00F80\x03\u00EEW\"R\u00FEl\u00FA'K\u00FB\x03\x10\u00807\u00A9hW\u00E3q\u00A9fS\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_forum_l.png","category":"18w"};
w18_forum_l;
// ==================== |-------------| ====================
// ==================== | w18_forum_r | ====================
// ==================== |-------------| ====================

var w18_forum_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x00\u00FCIDAT8\u008D\u00DD\u0093\u00C1\x11\u00820\x10E\u00BF\u008Ewur\u00DA\u0093t %P\x02\x1DH\t\u00D8\x01\x1DH\t\u00D8\x01v@\t\u00D8\u0081\u009E\u00F6\u0094\x19\u00A8\x00'\u00CE\u00C6\t\f\x10\x0E\u009C\u00DCK\u0086$\u00BC\u00FD\u00FB7\u00BB\u00E9\u00BA\x0Ek\u00C4n\u008C\u00A1\u0089B\x00\x07\u00F9\u00AC\x15s\u00E3\u00CB\u00D5S\u00A4\u00892\x00)\u0080\u00FD\u00E0\u00DE\x03@\u00A6\u0098\u00EBY\u0090&2\u00D9+\x00\u00E7\u0099\u00A4-\u0080h\n\u00B6\u00955\u00F5@ *\u00CB\u00A9C\u00EBQ\u00E4\u0081\u00D88i\u00A2D\u00FC+\\\u00EF\u00AC\"\u00AF\u0099N\x04\x00n\u00A6\t\u00D2\u0094\x1E\u00A8X\bi]u\u00A6T\u00F1\u00F7\x07\u00AA\x16\u0082r\u00F1\u00D3\u0085\u00C5.(\u0097\u00F59\x010\u00FBW\u00F9i\u00F84\u00BE\u008Al\u00FBM\u00AD\u008Db~\u0089\u00D4\u00D0\u00B9\x14\u008A/\u0097\u0089$Gc\u00FA\u00E8\u0088\b\u00EC5\u0092}\x18w\u00C5\u009C\u00B8\u00A5\u00F5B\u00DAj\u009E\u00C4\u00DB\x03\u008A\u00AD\u00D9\u00DE\u00A1\u00D5D\u00B1@m\u00B9\u0095<\u00CC@\u00F6+\u00C5\\\u00AE6\u00FD\u00A3\u00A5\u00FD\x01\b\u00C0\x07\x0F\x0FT\u00C9\u009AR\u0088\u00C0\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_forum_r.png","category":"18w"};
w18_forum_r;
// ==================== |-----------------| ====================
// ==================== | w18_bugreport_l | ====================
// ==================== |-----------------| ====================

var w18_bugreport_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x01\x0BIDAT8\u008D\u00AD\u0094\u00DBM\u00C3@\x10E\x0F\x11\u00FF\u00B8\u0080\u0091\u0092\x0E\x12*\x00:\u00A0\u0083\u0098\x0E\u00A0\x02D\x07\u00D0\u0081\u00E9\x00* %$\x15`\u00A4[@\u00A8\u00C0h\u00D0.8\u008BG1\u0092\u00EF\u00D7\u00AE\u00BD>s\u00E7\u00B1>\u00E9\u00BA\u008E)4\u009B\u0084\x02\u009C\u00E6\u0085\u00A4\x15\u00B0\x01\u00CEF~\u00FBlfu\u00DE\u00CCF@v\u00C0\u00E7\u00C0\u00F3\u00B5\u00A4\u00E6\x00\x04\\\x07\u0090;3\u00F3 \x0B\u00E0c\bV\u0082J=%\x17\u00B5$w\u00FA\x02T\u009EN\x00\u00FC\u00ADQ\u00A1K ;\u00E9k\u00D1w\u00D1W\u00E4hif\u00AD\u0099mR\u00DA\u00FB\u00B4\u00AE\u0083\u00F3\u0083 \u00B7~\u00D5\u00DB\u00AFRZ\u00AE[\u00E0a,h\x0E\u00BC\u00A5N\u0096z\x04\u00EE\u00FF\u0093\u00DA\u009FvK\u00F2\u00FAl\u0083\u00F3!\u00C8#7\u0092\u00F6)5\u009F\u0097w\u00A0\u008D\u00BA\u00F6}\u00D7$Ui \u0097Q\u00C4@7f\u00D6\u00FC\u0080\u0092\u00F5*E\u00CE\u0085\u00BD(R-\u00D3j2\u00E4\x00TJR~\u00E1W\u00A46\u00B3\u00B0>\u00AEc\u00B7\u00FF\u00D5\u0087\u00F3\x18\u00C4\x15M\u00B6\u00EB|\f k\u009A\x1F\x1B\u00F0\x05\u00FA\x1AV\u00FC\x00\u00FE\u0089\u00BA\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_bugreport_l.png","category":"18w"};
w18_bugreport_l;
// ==================== |-----------------| ====================
// ==================== | w18_bugreport_r | ====================
// ==================== |-----------------| ====================

var w18_bugreport_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x01\x11IDAT8\u008D\u00AD\u0094\u00CDM\u00C3@\x10F\x1FQ\u00EEX\u00DA\u00D3\u009CH\x07\t\x15\x00\x1D\u00A4\x03L\x07P\x01\u00A2\x03\u00E8\u00C0t\x00\x15\u0090\x12H\x05INsZ)\u00A9\u00C0h\u00D0.8\u008BG1\u0092\u00BF\u00D3\u00AE\u00BD~\u00F3\u00CD\u00CF\u00FA\u00ACm[\u00C6\u00D0d\x14\n0\u00CD\u008B(\u00B2\x00V\u00C0\u00F9\u00C0o_\u0083j\u009D7\u0093\x01\u00905p\u00E8y~\x1BE\u009A#\x10\u00B0t \x0FA\u00D5\u0082\u00CC\u0080]\x1F\u00AC\x04\u0095zI.\u00EA(bN\u00DF\u0080\u00CA\u00D2q\u0080\u00BF5*t\rd']\u00CD\u00BA.\u00BA\u00F2\x1C\u00CD\u0083\u00EA6\u00A8\u00AER\u00DA\u00FB\u00B4\u00AE\u009D\u00F3\u00BD \u00B3~\u00D3\u00D9/RZ\u00A6{\u00E0i(\u00E8\x02\u00F8H\u009D,\u00F5\f<\u00FE'\u00B5?\u00ED\u008E\"V\u009FO\u00E7\u00BC\x0B\u00B2\u00C8M\x14\u00D9\u00A7\u00D4l^6\u00C0\u00D6\u00EB\u00DA\u00F7]\u008B\"U\x1A\u00C8\u00B9\x17\u00D1\u00D1]Pm~@\u00C9z\u0095\"\u00E7\u00C2^\x15\u00A9\u0096i5\x19r\x04*\x15E\u00F2\x0B\u00BB\"uPu\u00EBc:u\u00FB\u00DFm8OAL\u00DEd\u009B.\u0087\x00\u00B2\u00C6\u00F9\u00B1\x01_@rV\u00FC\"\u00A2\u00FE\u00D5\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_bugreport_r.png","category":"18w"};
w18_bugreport_r;
// ==================== |----------------------| ====================
// ==================== | w18_featurerequest_r | ====================
// ==================== |----------------------| ====================

var w18_featurerequest_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x00\u00CCIDAT8\u008D\u00AD\u0094\u00B1\r\u00C20\x10\x00\u008F\u0088\u009EH\u00AE\u00BE\u0082\r\u0080\t`\x046 l\u00C0(\x19!l\x00\x1B0\x02\u008C@\u00E5\u00CA\x05\x13\x04\x19\u00C5\b\u008C\u009D\x18\u00E1\u00AB\u009C\u00BC|\u00F9\u00F7\u00BF3j\u00DB\u0096\x1C\x14Y,\u00C0\u00D8-\u008C\u00C8\x028\x03\u0093\u00C4\u00BD\x07\u00A5u\u00E5\x1E\u008A\x04\u00C9\x15\u00B8\x05\u00DEo\u008DH\u00F3!\x026\x11\u00C9Mim?R\x05bO\u0099/\u008A1\x1D\u00AE0M\u0094L\u00FE\u00AE\u00C50\"50\u00FB[\x04\u00ACSD)\u00A5\u00D9\u008E\u00EEsdt\u00FC%\u00A3\u00BA\x1B\u00BC\x10\u00F3\u009Ei\u00DF\u00B9\u00C5\u00EB\u00D2\x1A\u0091\x12\u00B0\u0093Zv\u00B1\u00D5\u00DB\u0086;p\u00F1$\u008D\u00D2\u00BA\u00F9\x12\u00F9\x18\x11\x17\u00B0\u0099VJk_\x14,-\u00C6\u00C9vmHb\u00E9;\u00ECe\u008A\u00C0\u0091\u00E7\u00C7\x06<\x00\u00C2<4\x7F\u0096r\u00F7\u00B4\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_featurerequest_r.png","category":"18w"};
w18_featurerequest_r;
// ==================== |----------------------| ====================
// ==================== | w18_featurerequest_l | ====================
// ==================== |----------------------| ====================

var w18_featurerequest_l = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x12\x00\x00\x00\x12\b\x06\x00\x00\x00V\u00CE\u008EW\x00\x00\x00\tpHYs\x00\x00\x06:\x00\x00\x06:\x01\rp\u00A5\u009E\x00\x00\x00\u00C7IDAT8\u008D\u00AD\u0094Q\r\u00C20\x10@\x1F\u0084\x7F&\u00E0\x12p\x00(\x00\t8`8@\u00CA$\f\x07\u00E0\x00\t a\u00C9\x19@\u00C1H\u00C9J\u00A0\u00B4\u00DB\x11\u00FA\u00BE\u00BA]\u00FAv\u00D7\u00BBn\u00D4\u00B6-9\x18g\u00B1\x00\x13\u00BFP\u00D5%p\x01\u00A6\u00C6\u00BDG\x11)\u00FD\u00C3\u00D8 \u00B9\x01M\u00E4\u00FDNU\u00EB\x0F\x11\u00B0MH\x1A\x11q\x1F)#\u00B1\u00A7,\x14\u00A5\u0098\rWh\x13\u0099\u00C9\u00DF\u00B5\x14\u00AAZ\x01\u00F3\u00BFE\u00C0\u00C6\"\u00B2\u0094\u00E6:z\u00C8\u0091\u00D1\u00E9\u0097\u008C\u00AAn\u00F0b,z\u00A6}\u00EF\x17\u00AFK\u00AB\u00AA\x05\u00E0&\u00B5\u00E8b\u00EB\u00B7\rw\u00E0\x1AHj\x11\u00A9\u00BFD!\u00AA\u00EA\x03.\u00D3RDBQ\u00B4\u00B4\x14g\u00D7\u00B5!\u0089\u00A3\u00EF\u00B0W\x16\u0081'\u00CF\u008F\rx\x00\u00C6C4\x7F\u00C8@\u00D2\u00A5\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w18_featurerequest_l.png","category":"18w"};
w18_featurerequest_l;
// ==================== |--------------| ====================
// ==================== | w14_folder_r | ====================
// ==================== |--------------| ====================

var w14_folder_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u0099IDAT(\u0091\u00BD\u00D2\u00B1\r\u00C20\x14\u0084\u00E1\u00DF\u0088\x05\u00C0\u0095\u00EB\u008C\u00C0\n\u00B0\nY\u0081\x11\u00C8\bx\x05f\u00C9\ni\u00AF\u008A<\u00C2\u00A3\u0089E\u00E4@\x14\\p\u009D\u009F\u00F4=\u009D-;3\u00A3&\u00BB*\x05\u00EC\x01\u00C6\x10\x1E\u00C0u6O@\u00E3\u00A5\u00F4\r:3c\f\u00E1S\u00DF~Z\u0090\x13\u00BD\u00F4\u00DC\x02\u00CB$/\x1D\u00F3\u00E1\u0097;\x1E\u00D6\u00AA& \x16\x15\x17\u00F1RW\u00C2\x16\u00B8\u0097\u00DB\u00CB\u00CA@3\u00AF\u00DAm@\x00\x17/\u00A5\fo\u00C0y\x03j\u00BD\u00D4\u00C3\u00FBq\x06\u00E0\u00B4\x02\u0086\t\u00C5<p\x7F\u00FFr\u00D5\u00F0\x05\u00EB\u00AA<2\u00D5?\u00F2\x1C\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_folder_r.png","category":"14w"};
w14_folder_r;
// ==================== |--------------| ====================
// ==================== | w14_folder_m | ====================
// ==================== |--------------| ====================

var w14_folder_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\x04sBIT\b\b\b\b|\bd\u0088\x00\x00\x00\tpHYs\x00\x00\x06v\x00\x00\x06v\x01)&o\u0080\x00\x00\x00\x19tEXtSoftware\x00www.inkscape.org\u009B\u00EE<\x1A\x00\x00\x00\x0EtEXtTitle\x00folder_rf\u008Fi\u00F7\x00\x00\x00\u00E7IDAT(\u0091\u00BD\u008F1N\u00C3@\x10E\u00DF\u00EC&r\u0093\u008E\x03\u00A4\u00E2\x04H4\u00B9\t7 =\u0091\x0B\u008C\x17\u00AF\u008F\u0080h\u00D3\"\x1A\x10\r}8C\u00A4\u009C!\u008A\x02\b:\u00AFw\u00A8\f\x16\"K\n\u00C4\u00AFF#\u00BD?o\u00E0\u00BF#\u00DD\u00E0\u009C\x1BeY6\x04\x10\u0091\u0098\u00E7\u00F9k\n4\x00u]\u009F[k\u00DFB\b\u00DB\x10\u00C2\u00B6i\u009A\u00E7\u00AA\u00AA\u00A6)p\x00\u00A0\u00AAG\u00DFMD\u00E4\u00CA{?\x11\u0091\u00F7n\u00D9\u00B6\u00ED}Y\u0096\u008F\u009F`\u00E2\u008D\x13U\u00FD\u00D23\u00E6\x18\u00F8\x11\\\u008A\u00C8\u008D\u00AA6;\u00CA6\u00FDV\u00BC\u00F7w\u00C0!\u0090\x03\x17\"r\u00900!\u00C6\u00B8\u00EC_\u009C\x01\u00D7\u00C0\u00B8\u00AF\u00B7#\x0F\x06@DnUu\x02\u008C\x7F#\u0080u\u008C\u00F1r\x00\x10Bx\u00B2\u00D6\u00CE\u00F7\u0080P\u00D53\u00E7\u00DCK\u00A7\u00BA\x01NUu\u0098\u0082\u008C1\u00AB\u00A2(\x16\u00FB\x1C\u00F8\u00FB|\x00\u00EA.R\u00EE\u0086\u00EA\u008A\u00CA\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_folder_m.png","category":"14w"};
w14_folder_m;
// ==================== |-----------| ====================
// ==================== | w14_pin_r | ====================
// ==================== |-----------| ====================

var w14_pin_r = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\tpHYs\x00\x00\x04\u00D8\x00\x00\x04\u00D8\x01\u00AE\u00AFK>\x00\x00\x00\u00BBIDAT(\u0091\u009D\u0092\u00CD\r\u00C20\fF_\x11\x1B\u00E4\x12\u00DF\u00BA\x01l@7\u00A1l\u00C2\b\u00DD\u0080\u00B2IG(\x13\u00C0-\u0097D*\x13\u0098K\u008AB\u009B\u008A\u00C2'\u00F9\u00E0\u009Fg\u00C7V\nU\u00E5\x1Fm\u00D6\x14\x05\u0091\u00F2g0\u0088t\u00C0=\u0088\u00D4\u00AB\u00C1 \u00D2\x00\u0087\u00E8^Rx\u009B)\u00AE\u0080\x06\u00D8ez\u00D5@\u009B\u009Dh\u009C\u00EB\u0080>\x03\u00DD\"\b@\u00B1t\u00D5 \u00D2\x02\u00C7\u00E8>\u0081\u00D287\u008C\u00F9\u00EC\u008E\x11\u00DA\x03\u00D7\x18\u00EAS\b\u00F2;\u008E\u0093N\u00C6\u00B96\u0088\x00<f\u00DDU\u00F5m\u00DE\u00DA\u00B3\u00B7V\u00BD\u00B5\u00F5$^\u00A6\u00BE\u00AA\u00F2\u0091\u00F4\u00D6\x0ESh\u00C9\u00D2\u00A7\u00D6@e\u009C\u00CB]t\u00A6\u00C5\u00AB~\u00D3\u00AA\u00BF\u009A\u00D3\x0B\u00977z\u00D00K!u\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_pin_r.png","category":"14w"};
w14_pin_r;
// ==================== |-----------| ====================
// ==================== | w14_pin_m | ====================
// ==================== |-----------| ====================

var w14_pin_m = {"binAsString":"\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x0E\x00\x00\x00\x0E\b\x06\x00\x00\x00\x1FH-\u00D1\x00\x00\x00\x04sBIT\b\b\b\b|\bd\u0088\x00\x00\x00\tpHYs\x00\x00\x06v\x00\x00\x06v\x01)&o\u0080\x00\x00\x00\x19tEXtSoftware\x00www.inkscape.org\u009B\u00EE<\x1A\x00\x00\x00\x0BtEXtTitle\x00pin_r\u0082\u00A1Q\u00B7\x00\x00\x00\u00EFIDAT(\u0091\u00C5\u0091\u00A1N\x03Q\x10E\u00EF}\x0F\u0083\"\u00FD\x01T\u00EBq\b$\u00D4T\u0092\x10\x04AT\u00A3@\u00BFMf3\u00D9d\u0083XS\u00C5\x07\u00B4\u00FF\u00C0\x0F\x10\x04\u00C1\u00E0\u0090\u00FC@\u00CD\u00BAew0K\u00F2\u00D8\u00BE\u00B4\u008At\u00E4\u00BDs2wf\u0080\u00FF*\x11qeY\x1E\ru\u00B7\x0B\u00F4\u00DE?6M\u00F3Y\x14\u00C5I\u00ACs\x1B\u00A4\u00AA\x17\x00\u009E\u00FB\x01k\u0092\u00B3\x10\u00C2+\x00\x1C$\u00A2\x1D{\u00EF\x0B\x00\u00A7\x00&\u009152\u00B3{\x00\u00D7\u00C9\u00A8\"\u00F2E\u00F2\x03\u00C0x`\u00AD\u00DA\u00B6\u009D\u00EF\u008C\u00AA\u00AAw\x00\x16}\u00CFK\u0096eg\u00B1\u009F<\u008E\u00AA^\x02\u0098\u0090\u00BC\x05\u00F0M\u00F2}\u00D8\u00B3\x01\u00F6\u00D0\x13\u00C9U\baif7f\u00B6\x01\u00FE\u0089\u009A\u00E7\u00F9\u00D49\u00B7\u00EC\u00AF\u00F7\u00F6\u00AB\u009B\x19IZrbUU\u0087\u00CE\u00B9\x073;\u008F!\x00\x18B@\u00F4\u008E\u00BA\u00AE\u00C7]\u00D7]\u0089H\u009D\u00DA{\u00FF\u00F5\x03\u009F\u00D4M\n\u0089\u009Cv\x7F\x00\x00\x00\x00IEND\u00AEB`\u0082","fileName":"w14_pin_m.png","category":"14w"};
w14_pin_m;
// ==================== |--------------------| ====================
// ==================== | DuScriptUIDefaults | ====================
// ==================== |--------------------| ====================

/**
 * ScriptUI tools
 * @namespace
 * @memberof DuAEF
 */
DuAEF.DuScriptUI = {};

/**
 * The default alignment of children of containers with "column" orientation
 * @memberof DuAEF.DuScriptUI
 * @type {String[]}
 * @default ["fill","top"]
 */
DuAEF.DuScriptUI.defaultColumnAlignment = [ "fill", "top" ];

/**
 * The default alignment of children of containers with "row" orientation
 * @memberof DuAEF.DuScriptUI
 * @type {String[]}
 * @default ["left","center"]
 */
DuAEF.DuScriptUI.defaultRowAlignment = [ "left", "center" ];

/**
 * The default alignment of children of containers with "stack" orientation
 * @memberof DuAEF.DuScriptUI
 * @type {String[]}
 * @default ["fill","top"]
 */
DuAEF.DuScriptUI.defaultStackAlignment = [ "fill", "fill" ];

/**
 * The default spacing of containers
 * @memberof DuAEF.DuScriptUI
 * @type {int}
 * @default 2
 */
DuAEF.DuScriptUI.defaultSpacing = 2;

/**
 * The default margins of containers
 * @memberof DuAEF.DuScriptUI
 * @type {int}
 * @default 2
 */
DuAEF.DuScriptUI.defaultMargins = 2;

/**
 * Stores all strings used by the UI.<br />
 * This can be very useful to work with a translation framework.
 */
DuAEF.DuScriptUI.uiStrings = [];
// ==================== |-----------------------| ====================
// ==================== | DuScriptUILowLevelLib | ====================
// ==================== |-----------------------| ====================


//low-level undocumented list: keeps the currently highlighted controls
DuAEF.DuScriptUI.highlightedControls = [];

//low-level undocumented list: keeps all the tabs, used in the buildAllTabs method
DuAEF.DuScriptUI.allTabs = [];

//low-level undocumented flag: set to true when showUI has been called. Before this, there's no need to set layout for childre, this will improve performance greatly.
DuAEF.DuScriptUI.uiShown = false;


//low-level undocumented function: dims all currently highlighted controls
DuAEF.DuScriptUI.dimControls = function( e )
{
    if ( DuAEF.DuScriptUI.highlightedControls.length == 0 ) return;
    for ( var i = DuAEF.DuScriptUI.highlightedControls.length - 1; i >= 0; i-- )
    {
        try
        {
            DuAEF.DuScriptUI.highlightedControls[ i ].dim();
        }
        catch ( e )
        {};
        DuAEF.DuScriptUI.highlightedControls.pop();
    }
}

// ==================== |--------------------| ====================
// ==================== | DuScriptUIStyleLib | ====================
// ==================== |--------------------| ====================


/**
 * Resets the layout of the whole ui containing a scriptUI item.
 * @memberof DuAEF.DuScriptUI
 * @param {ScriptUI} item - The ScriptUI element which needs to be resized
 */
DuAEF.DuScriptUI.layout = function( item )
{
    item.layout.layout( true );
    item.layout.resize();
}

/**
 * Adjust the color according to the brightness setting of After Effects
 * @memberof DuAEF.DuScriptUI
 * @param {float[]} color - The color [R,V,B,A] Array
 * @return {float[]} - The new color [R,V,B,A] Array
 */
DuAEF.DuScriptUI.adjustColor = function( color )
{
    if ( !DuAEF.DuJS.Color.validateColor(color) ) return color;
    //gets the main application color
    var q = app.themeColor( 78 )[ 0 ];
    //the darkest one is 0.15000000596046
    q = q - 0.15000000596046;
    var newColor = color + [ q, q, q, 0 ];
    newColor = DuAEF.DuJS.Math.clamp( newColor );
    return newColor;
}

/**
 * Changes the color of the text of a ScriptUI Object
 * @memberof DuAEF.DuScriptUI
 * @param {ScriptUI}		text	- The ScriptUI Object
 * @param {float[]}				color	- The new color [R,V,B,A] Array
 * @param {bool}				[adjusted=true]	- lightens the color if the brightness setting of Ae is not set on the darkest one
 * @param {bool}				[fauxBold=false]
 */
DuAEF.DuScriptUI.setTextColor = function( text, color, adjusted )
{
    adjusted = def( adjusted, true);
    if ( !text ) throw "You must provide a ScriptUI Control to change the color of the text";
    if ( color.length == 3 ) color.push( 1 );
    if ( adjusted ) color = DuAEF.DuScriptUI.adjustColor( color );
    color = DuAEF.DuJS.Math.clamp( color );
    var g = text.graphics;
    var textPen = g.newPen( g.PenType.SOLID_COLOR, color, 1 );
    g.foregroundColor = textPen;
}

/**
 * Changes the color of the background of a ScriptUI Object
 * @memberof DuAEF.DuScriptUI
 * @param {ScriptUI} uiItem - The ScriptUI Object
 * @param {Array} color - The new color [R,V,B,A] Array
 * @param {bool} [adjusted=true] - lightens the color if the brightness setting of Ae is not set on the darkest one
 */
DuAEF.DuScriptUI.setBackgroundColor = function( uiItem, color, adjusted )
{
    adjusted = def( adjusted, true );
    if ( typeof uiItem === 'undefined' ) throw "You must provide a ScriptUI Control to change the color of the background";
    var c = color;
    if ( adjusted ) c = DuAEF.DuScriptUI.adjustColor( color );
    if ( !DuAEF.DuJS.Color.validateColor(c) ) return;
    var g = uiItem.graphics;
    var brush = g.newBrush( g.BrushType.SOLID_COLOR, c );
    g.backgroundColor = brush;
}// ==================== |--------------------| ====================
// ==================== | DuScriptUIPanelLib | ====================
// ==================== |--------------------| ====================


/**
 * @class
 * @name DuPanel
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A Panel or Window.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.createUI} to create a Panel.<br />
 * The DuPanel inherits the Panel or Window object from ScriptUI and has all of its properties and methods.
 * @property {Group} contents - The ScriptUI group where the new controls must be added. Do not add any control directly inside the DuPanel.
 * @property {DuPanel~refreshUI} refreshUI - A function to reload a script in this panel
 */

/**
 * A function to reload a script in this panel.
 * @callback DuPanel~refreshUI
 * @param {File} file - The script to reload. 
 * @return {boolean} true on success, false otherwise.
 * @memberof DuPanel
 */

/**
 * Creates the main panel of a script
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|null}		container	- The container ('this' in the root of the calling script), either a Panel (when launched from the 'Window' menu) or null (when launched from 'file/scripts/run...')
 * @param {string}	scriptName	- A name for this UI
 * @param {string[]}	[contentAlignment=DuAEF.DuScriptUI.defaultColumnAlignment]	- The alignment of the contents in the panel
 * @param {string}	[borderless=false]	- When true, creates a borderless window if container is not a panel
 * @return {DuPanel}	The panel created, either a ScriptUI Panel or a ScriptUI Window.
 * @example
 * var ui = DuAEF.DuScriptUI.createUI(this,"Test Script");
 * var refreshButton = ui.contents.add('button',undefined,"Refresh");
 * refreshButton.onClick = function() { ui.refreshUI( new File($.fileName) ); }; //reloads the current script
 * DuAEF.DuScriptUI.showUI(ui);
 */
DuAEF.DuScriptUI.createUI = function( container, scriptName, contentAlignment, bless )
{
    scriptName = def(scriptName, DuAEF.scriptName, false);
    contentAlignment = def(contentAlignment, DuAEF.DuScriptUI.defaultColumnAlignment, false);
    bless = def (bless, false);

    if ( scriptName != '' ) DuAEF.DuScriptUI.uiStrings.push( scriptName );
    scriptName = tr( scriptName );

    var myPal = null;
    container instanceof Panel ? myPal = container : myPal = new Window( 'palette', scriptName, undefined,
    {
        resizeable: true,
        borderless: bless
    } );

    if ( myPal == null ) throw "Failed to create User Interface.";

    myPal.margins = 0;
    myPal.spacing = 0;

    //create margins to dim buttons
    var topMargin = myPal.add( 'button' );
    topMargin.onDraw = function() {};
    topMargin.minimumSize.height = DuAEF.DuScriptUI.defaultMargins;
    topMargin.alignment = [ 'fill', 'top' ];
    topMargin.maximumSize.height = topMargin.minimumSize.height = topMargin.preferredSize.height = DuAEF.DuScriptUI.defaultMargins;

    var mainRow = myPal.add( 'group' );
    mainRow.alignment = contentAlignment;
    mainRow.alignChildren = contentAlignment;
    mainRow.margins = 0;
    mainRow.spacing = 0;

    var leftMargin = mainRow.add( 'button' );
    leftMargin.onDraw = function() {};
    leftMargin.maximumSize.width = leftMargin.minimumSize.width = leftMargin.preferredSize.width = DuAEF.DuScriptUI.defaultMargins;
    leftMargin.alignment = [ 'left', 'fill' ];

    myPal.contents = mainRow.add( 'group' );
    myPal.contents.margins = 0;
    myPal.contents.spacing = DuAEF.DuScriptUI.defaultSpacing;
    myPal.contents.alignChildren = DuAEF.DuScriptUI.defaultColumnAlignment;
    myPal.contents.orientation = "column";

    var rightMargin = mainRow.add( 'button' );
    rightMargin.onDraw = function() {};
    rightMargin.maximumSize.width = rightMargin.minimumSize.width = rightMargin.preferredSize.width = DuAEF.DuScriptUI.defaultMargins;
    rightMargin.alignment = [ 'right', 'fill' ];

    var bottomMargin = myPal.add( 'button' );
    bottomMargin.onDraw = function() {};
    bottomMargin.maximumSize.height = bottomMargin.minimumSize.height = bottomMargin.preferredSize.height = DuAEF.DuScriptUI.defaultMargins;
    bottomMargin.alignment = [ 'fill', 'bottom' ];

    myPal.refreshUI = function( scriptFile )
    {

        function refresh ()
        {
            var ok = false;
            DuAEF.DuScriptUI.dimControls();
            // Remove everything
            for ( var i = myPal.children.length - 1; i >= 0; i-- )
            {
                myPal.remove( this.children[ i ] );
            }

            // delete DuAEF
            delete DuAEF;
            delete tr;

            // Run the scriptFile
            try
            {
                ok = true;
                $.evalFile( scriptFile );
            }
            catch ( err )
            {
                ok = false;
                //add debug info
                if ( DuAEF.debug )
                {
                    myPal.add( 'statictext', undefined, err.fileName,
                    {
                        multiline: true
                    } );
                    myPal.add( 'statictext', undefined, err.message,
                    {
                        multiline: true
                    } );
                    myPal.add( 'statictext', undefined, "on line" + err.line );
                    //add a refresh button
                    var button = myPal.add( 'button', undefined, "Refresh UI" );
                    button.onClick = function()
                    {
                        myPal.refreshUI( scriptFile )
                    };
                }
            }

            // Recalculate UI
            myPal.layout.layout( true );
            myPal.layout.resize();

            return ok;
        }

        return refresh.call( myPal );
    }

    myPal.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    topMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    leftMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    rightMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    bottomMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );

    return myPal;
}

/**
 * @class
 * @name DuPopup
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A borderless popup, to be tied to a ui control.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.createPopup} to create a Popup.<br />
 * The DuPopup inherits the Window object from ScriptUI and has all of its properties and methods.
 * @property {Group} contents - The ScriptUI group where the new controls must be added. Do not add any control directly inside the DuPopup.
 * @property {boolean} pinned - true if this popup is "pinned", which means it won't hide when the user clicks outside of the window.
 */

/**
 * Ties the popup to a ui control. The popup will be shown just above the control when it is clicked.<br />
 * The control must have an addEventListener method.
 * @method
 * @memberof DuPopup
 * @name tieTo
 * @param {ScriptUI} [control] - The control
 */

/**
 * Pins the popup (it won't be hidden anymore when deactivated).
 * @method
 * @memberof DuPopup
 * @name pin
 * @param {boolean} [pinned=true] - true to pin the popup, false to un-pin it.
 */

/**
 * Creates a borderless popup
 * @memberof DuAEF.DuScriptUI
 * @param {string} title The title of the popup
 * @param {string[]} [alignment=DuAEF.DuScriptUI.defaultColumnAlignment] The alignement of this window
 * @return {DuPopup} The popup, a ScriptUI Window which is borderless, with a 'tieTo(control)' method.
 * @example
 * var popup = DuAEF.DuScriptUI.createPopup( );
 * var popupButton = DuAEF.DuScriptUI.addButton( myUI, "My Buttton for the popup" );
 * popup.tieTo( popupButton ); // will show the popup when the button is clicked, just above it.
 */
DuAEF.DuScriptUI.createPopup = function( title, alignment )
{
    alignment = def( alignment, DuAEF.DuScriptUI.defaultColumnAlignment );
    title = def (title, "");

    if (title != "")
    {
        DuAEF.DuScriptUI.uiStrings.push( title );
        title = tr( title );
    }
    
    var popup = new Window( 'palette', title, undefined,
    {
        resizeable: false,
        borderless: true
    } );

    popup.margins = 0;
    popup.spacing = 0;
    popup.pinned = false;

    //add stroke around
    function drawBorder ( drawState ) {
        var g = this.graphics;
        var c = DuAEF.DuJS.Color.Colors.DARK_GREY;
        c = DuAEF.DuScriptUI.adjustColor( c );

        var pen = g.newPen( g.PenType.SOLID_COLOR, c, 1 );

        g.newPath();
        if (this.side == 0) {
            g.moveTo (0, 0);
            g.lineTo (this.size.width, 0);
        }
        else if (this.side == 2) {
            g.moveTo (this.size.width, 0);
            g.lineTo (this.size.width, this.size.height);
        }
        else if (this.side == 1) {
            g.moveTo (0, 0);
            g.lineTo (0, this.size.height);
        }
        else if (this.side == 3) {
            g.moveTo (0, this.size.height);
            g.lineTo (this.size.width, this.size.height);
        }

        g.strokePath( pen );
    };

    //create margins to dim buttons
    var topMargin = popup.add( 'group' );
    topMargin.onDraw = drawBorder;
    topMargin.side = 0;
    topMargin.minimumSize.height = DuAEF.DuScriptUI.defaultMargins;
    topMargin.alignment = [ 'fill', 'top' ];
    topMargin.maximumSize.height = topMargin.minimumSize.height = topMargin.preferredSize.height = 1;
    DuAEF.DuScriptUI.setBackgroundColor( topMargin, DuAEF.DuJS.Color.Colors.DARK_GREY );
    
    var mainRow = popup.add( 'group' );
    mainRow.alignment = alignment;
    mainRow.alignChildren = alignment;
    mainRow.margins = 0;
    mainRow.spacing = 0;

    var leftMargin = mainRow.add( 'button' );
    leftMargin.onDraw = drawBorder;
    leftMargin.side = 1;
    leftMargin.maximumSize.width = leftMargin.minimumSize.width = leftMargin.preferredSize.width = 1;
    leftMargin.alignment = [ 'left', 'fill' ];

    var mainColumn = mainRow.add( 'group' );
    mainColumn.orientation = 'column';
    mainColumn.spacing = DuAEF.DuScriptUI.defaultMargins;
    mainColumn.margins = 0;
    mainColumn.alignment = ['fill','fill'];

    var titleBar = mainColumn.add( 'group' );
    titleBar.margins = 0;
    titleBar.spacing = 0;
    titleBar.alignment = ['fill','top'];
    DuAEF.DuScriptUI.setBackgroundColor( titleBar, DuAEF.DuJS.Color.Colors.DARK_GREY );
    //add pin
    var pinButton = DuAEF.DuScriptUI.addCheckBox(titleBar, '', DuAEF.DuBinary.toFile(w14_pin_m), 'Pin window', DuAEF.DuBinary.toFile(w14_pin_r));
    pinButton.alignment = [ 'left', 'top' ];
    //add title
    var titleLabel = titleBar.add('statictext', undefined,  title);
    titleLabel.alignment = [ 'center', 'top' ];
    //add close button
    var closeButton = DuAEF.DuScriptUI.addButton(titleBar, '', DuAEF.DuBinary.toFile(w14_cancel_m), 'Close', DuAEF.DuBinary.toFile(w14_cancel_l));
    closeButton.alignment = [ 'right', 'top' ];

    popup.contents = mainColumn.add( 'group' );
    popup.contents.margins = 0;
    popup.contents.spacing = DuAEF.DuScriptUI.defaultSpacing;
    popup.contents.alignChildren = alignment;
    popup.contents.orientation = "column";

    var rightMargin = mainRow.add( 'button' );
    rightMargin.onDraw = drawBorder;
    rightMargin.side = 2;
    rightMargin.maximumSize.width = rightMargin.minimumSize.width = rightMargin.preferredSize.width = 1;
    rightMargin.alignment = [ 'right', 'fill' ];

    var bottomMargin = popup.add( 'button' );
    bottomMargin.onDraw = drawBorder;
    bottomMargin.side = 3;
    bottomMargin.maximumSize.height = bottomMargin.minimumSize.height = bottomMargin.preferredSize.height = 1;
    bottomMargin.alignment = [ 'fill', 'bottom' ];

    popup.tieTo = function (control)
    {
        control.addEventListener( 'click', function(e) {
            var x = e.screenX - e.clientX;
            var y = e.screenY - e.clientY;
            popup.location = [ x, y ];
            popup.show();
        }, true);
    }

    popup.pin = function(p)
    {
        p = def (p, true);
        popup.pinned = p;
        pinButton.setChecked(p);
    }

    var movingTitle = false;
    var movingPopup = false;
    var startMouseLocation = [0,0];
    var startPopupLocation = [0,0];

    function enterTitleMoveState(e)
    {
        movingTitle = true;
        startMouseLocation = [e.screenX, e.screenY];
        startPopupLocation = [popup.location[0], popup.location[1]];
    }

    function enterPopupMoveState(e)
    {
        movingPopup = true;
        startMouseLocation = [e.screenX, e.screenY];
        startPopupLocation = [popup.location[0], popup.location[1]];
    }

    function movePopup(e)
    {
        if (!movingPopup) return;
        if (movingTitle) return;
        var x = e.screenX - startMouseLocation[0];
        var y = e.screenY - startMouseLocation[1];
        popup.location = [ x, y ] + startPopupLocation;
    }

    function moveTitle(e)
    {
        if (!movingTitle) return;
        var x = e.screenX - startMouseLocation[0];
        var y = e.screenY - startMouseLocation[1];
        popup.location = [ x, y ] + startPopupLocation;
    }

    function endMoveState(e)
    {
        movingTitle = false;
        movingPopup = false;
    }

    function esc(e)
    {
        if ( e.keyName == "Escape") popup.hide();
    }

    popup.onDeactivate = function () { if (!popup.pinned) popup.hide(); };
    closeButton.onClick = function () { popup.hide(); };

    pinButton.onClick = function () { popup.pin(pinButton.checked); };

    popup.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    popup.addEventListener( "keydown", esc );
    topMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    leftMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    rightMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    bottomMargin.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );
    titleBar.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );

    titleBar.addEventListener( "mousedown", enterPopupMoveState );
    titleBar.addEventListener( "mousemove", movePopup);
    titleBar.addEventListener( "mouseup", endMoveState );
    titleBar.addEventListener( "mouseout", endMoveState );

    titleLabel.addEventListener( "mousedown", enterTitleMoveState );
    titleLabel.addEventListener( "mousemove", moveTitle );
    titleLabel.addEventListener( "mouseup", endMoveState );
    titleLabel.addEventListener( "mouseout", endMoveState );

    return popup;
}

/**
 * Resizes and shows the main panel of a script
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window}		ui	- The UI created by Duik.ui.createUI
 * @param {boolean}		[enterRunTime=false]	- Set to true to automatically set DuAEF to runtime state<br />
 * Set this to false if the ui shown is not the actual main panel of the script and it is shown before the main panel has been loaded.
 */
DuAEF.DuScriptUI.showUI = function( ui, enterRunTime )
{
    enterRunTime = def( enterRunTime, true);

    DuAEF.Debug.log( "DuAEF.DuScriptUI.showUI" );

    DuAEF.Debug.log( "DuAEF.DuScriptUI.showUI: Defining layout" );
    ui.layout.layout( true );
    DuAEF.Debug.log( "DuAEF.DuScriptUI.showUI: Resizing" );
    ui.layout.resize();
    ui.onResizing = ui.onResize = function()
    {
        try
        {
            ui.layout.resize();
        }
        catch ( e )
        {}
    }
    DuAEF.Debug.log( "DuAEF.DuScriptUI.showUI: UI Ready" );

    // If it's a Window, it needs to be shown
    if ( ui instanceof Window )
    {
        DuAEF.Debug.log( "DuAEF.DuScriptUI.showUI: Showing window" );
        //ui.center();
        ui.show();
        DuAEF.Debug.log( "DuAEF.DuScriptUI.showUI: Window visible." );
    }

    DuAEF.DuScriptUI.uiShown = true;

    if (enterRunTime) DuAEF.enterRunTime();
}// ==================== |---------------------| ====================
// ==================== | DuScriptUILayoutLib | ====================
// ==================== |---------------------| ====================


/**
 * Adds a group in a container, using  DuAEF.DuScriptUI default alignments, and DuAEF.DuScriptUI.defaultSpacing. Margins are set to 0.
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window|Group}		container	- Where to create the group
 * @param {string}					[orientation] - The orientation to use. One of "column", "row" or "stack". By default, "column" if added in a row, "row" if added in a column.
 * @return {Group}	The group created
 */
DuAEF.DuScriptUI.addGroup = function( container, orientation )
{
    var group = container.add( "group" );
    group.spacing = 2;
    group.margins = 0;
    if ( orientation !== undefined ) group.orientation = orientation;
    if ( group.orientation === "row" )
    {
        group.alignChildren = DuAEF.DuScriptUI.defaultRowAlignment;
    }
    else if ( group.orientation === "column" )
    {
        group.alignChildren = DuAEF.DuScriptUI.defaultColumnAlignment;
    }
    else
    {
        group.alignChildren = DuAEF.DuScriptUI.defaultStackAlignment;
    }

    group.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );

    return group;
}

/**
 * @class
 * @name Separator
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A Separator.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addSeparator} to create a Separator.<br />
 * The Separator inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {StaticText|CheckBox} label - the label
 * @property {boolean} checkable - Read-Only | true if a checkbox is displayed
 */

/**
 * Adds separator with an optionnal name in the group
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window|Group} container - Where to create the separator
 * @param {string} [name] - The name displayed
 * @param {boolean} [checkable=false] - When true, adds a checkbox to the separator
 * @param {boolean} [drawLine=true] - Draws a line when there is no name. When false, the separator is an empty space
 * @return {Separator} The separator
 */
DuAEF.DuScriptUI.addSeparator = function( container, name, checkable, drawLine )
{
    if ( name == undefined ) name = '';
    if ( checkable == undefined ) checkable = false;
    if ( drawLine == undefined ) drawLine = true;

    if ( name != '' ) DuAEF.DuScriptUI.uiStrings.push( name );
    name = tr( name );

    var separator = DuAEF.DuScriptUI.addGroup( container, "row" );
    separator.margins = DuAEF.DuScriptUI.defaultMargins;
    separator.margins.bottom = DuAEF.DuScriptUI.defaultMargins * 2;
    separator.alignment = [ 'fill', 'top' ];
    separator.checkable = checkable;

    separator.label = null;
    if ( name != '' || checkable )
    {
        DuAEF.DuScriptUI.uiStrings.push( name );
        name = tr( name );
        if ( checkable ) separator.label = separator.add( 'checkbox', undefined, name );
        else separator.label = separator.add( 'statictext', undefined, name );
        separator.label.alignment = [ 'center', 'bottom' ];
        if ( drawLine ) DuAEF.DuScriptUI.setBackgroundColor( separator, DuAEF.DuJS.Color.Colors.DARK_GREY );
    }
    else if ( drawLine )
    {
        DuAEF.DuScriptUI.setBackgroundColor( separator, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
    }

    separator.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );

    return separator;
}
// ==================== |---------------------| ====================
// ==================== | DuScriptUIButtonLib | ====================
// ==================== |---------------------| ====================


/**
 * @class
 * @name DuButton
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * An Image Button.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addButton} to create an Image Button.<br />
 * The Image Button inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {string} standardImage - The path to the image (or a PNG as a string representation)
 * @property {string} imageOver - The path to the image (or a PNG as a string representation) to display when mouseover
 * @property {Image} image - The scriptui object representing the image
 * @property {StaticText} label - The label
 * @property {DuButton~onClick} onClick - The function to execute when the button is clicked
 * @property {DuButton~onAltClick} onClick - The function to execute when the button is Alt + clicked
 * @property {DuButton~onCtrlClick} onClick - The function to execute when the button is Ctrl + clicked
 * @property {DuButton~onCtrlAltClick} onClick - The function to execute when the button is Ctrl + Alt + clicked
 */

/**
 * The function to execute when the button is clicked.
 * @callback DuButton~onClick
 * @memberof DuButton
 */

/**
 * The function to execute when the button is Alt + clicked.
 * @callback DuButton~onAltClick
 * @memberof DuButton
 */

/**
 * The function to execute when the button is Ctrl + clicked.
 * @callback DuButton~onCtrlClick
 * @memberof DuButton
 */

/**
 * The function to execute when the button is Ctrl + Alt + clicked.
 * @callback DuButton~onCtrlAltClick
 * @memberof DuButton
 */

/**
 * Creates a button with an optionnal icon. Must have at least an icon or a text, or both.
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window|Group}			container	- The ScriptUI Object which will contain and display the button.
 * @param {string}					[text]		- The label of the button. Default: empty string
 * @param {string}					[image]		- The path to the icon. Default: empty string
 * @param {string}					[helpTip]		- The helptip. Default: empty string
 * @param {string}					[imageOver=image]	- The path to an icon displayed when the mouse is over the button.
 * @param {string}					[imageDisabled=image]	- The path to an icon displayed when the button is disabled.
 * @return {DuButton}			The image button created.
 */
DuAEF.DuScriptUI.addButton = function( container, text, image, helpTip, imageOver )
{
    if (DuAEF.DuJS.typeof(container) != 'Group' && DuAEF.DuJS.typeof(container) != 'Panel' && DuAEF.DuJS.typeof(container) != 'Window' )
    {
        throw 'DuScriptUI: DuAEF.DuScriptUI.addButton(container, text, image, helpTip, imageOver):\nTypeError.\n\ncontainer has to be a Group/Panel/Window.\n\ncontainer is ' + DuAEF.DuJS.typeof(container) + ' with value ' + container.toString();
    }

    if ( typeof text === 'undefined' ) text = '';
    if ( typeof image === 'undefined' ) image = '';
    if ( typeof helpTip === 'undefined' ) helpTip = '';
    if ( typeof imageOver === 'undefined' ) imageOver = '';
    if ( typeof imageDisabled === 'undefined' ) imageDisabled = '';
    if ( imageOver != '' && !DuAEF.DuJS.Fs.fileExists( imageOver ) ) imageOver = '';
    if ( image != '' && !DuAEF.DuJS.Fs.fileExists( image ) ) image = '';
    if ( imageDisabled != '' && !DuAEF.DuJS.Fs.fileExists( imageDisabled ) ) imageDisabled = '';

    if ( text != '' )
    {
        DuAEF.DuScriptUI.uiStrings.push( text );
        text = tr( text );
    }
    if ( helpTip != '' )
    {
        DuAEF.DuScriptUI.uiStrings.push( helpTip );
        helpTip = tr( helpTip );
    }

    if ( image == '' && text == '' ) text = 'o';

    var imageButton = container.add( 'group' );
    imageButton.orientation = 'row';
    imageButton.margins = 2;
    if ( image == '' ) imageButton.margins = 5;
    imageButton.alignment = [ 'fill', 'fill' ];
    imageButton.spacing = 0;
    imageButton.group = imageButton;

    imageButton.standardImage = image;
    imageButton.imageOver = imageOver;
    imageButton.onClick = function() {};
    imageButton.onAltClick = function() {};
    imageButton.onCtrlAltClick = function() {};
    imageButton.onCtrlClick = function() {};
    imageButton.image = null;
    imageButton.label = null;

    //Add fillers to be able to click anywhere on the button
    if ( text != '' )
    {
        imageButton.fillerL = imageButton.add( 'statictext', undefined, "" );
        imageButton.fillerL.alignment = [ 'fill', 'fill' ];
    }

    if ( image != '' )
    {
        var icon = imageButton.add( 'image', undefined, imageButton.standardImage );
        icon.alignment = [ 'center', 'center' ];
        icon.helpTip = helpTip;
        imageButton.image = icon;
        imageButton.icon = icon;
    }

    if ( text != '' )
    {
        var label = imageButton.add( 'statictext', undefined, text );
        label.helpTip = helpTip;
        if ( image == '' ) label.alignment = [ 'left', 'center' ];
        imageButton.label = label;
        DuAEF.DuScriptUI.setBackgroundColor( imageButton, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
        imageButton.alignment = [ 'fill', 'top' ];
    }

    //Add fillers to be able to click anywhere on the button
    if ( text != '' )
    {
        imageButton.fillerR = imageButton.add( 'statictext', undefined, "" );
        imageButton.fillerR.alignment = [ 'fill', 'fill' ];
    }

    //events
    imageButton.clicked = function()
    {
        DuAEF.Debug.safeRun(imageButton.onClick);
    }

    imageButton.shiftClicked = function()
    {
        DuAEF.DuScriptUI.updateHelpPopup( imageButton.help.title, imageButton.help.text, imageButton.help.link );

        if ( imageButton.help.text != '' )
        {
            DuAEF.DuScriptUI.showHelp();
        }
    }

    imageButton.altClicked = function()
    {
        DuAEF.Debug.safeRun(imageButton.onAltClick);
    }

    imageButton.ctrlAltClicked = function()
    {
        DuAEF.Debug.safeRun(imageButton.onCtrlAltClick);
    }

    imageButton.ctrlClicked = function()
    {
        DuAEF.Debug.safeRun(imageButton.onCtrlClick);
    }

    imageButton.highlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();
        if ( icon )
            if ( imageButton.imageOver != '' ) icon.image = imageButton.imageOver;
        if ( label )
        {
            DuAEF.DuScriptUI.setTextColor( imageButton.label, DuAEF.DuJS.Color.Colors.VERY_LIGHT_GREY );
            DuAEF.DuScriptUI.setBackgroundColor( imageButton.group, DuAEF.DuJS.Color.Colors.DARK_GREY );
        }
        DuAEF.DuScriptUI.highlightedControls.push( imageButton );
    }

    imageButton.dim = function()
    {
        if ( icon )
            if ( imageButton.standardImage != '' ) icon.image = imageButton.standardImage;
        if ( label )
        {
            DuAEF.DuScriptUI.setTextColor( imageButton.label, DuAEF.DuJS.Color.Colors.LIGHT_GREY );
            DuAEF.DuScriptUI.setBackgroundColor( imageButton.group, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
        }
    }

    //add events
    imageButton.addEventListener( 'click', function( e )
    {
        if ( e.shiftKey ) imageButton.shiftClicked();
        else if ( e.altKey && e.ctrlKey ) imageButton.ctrlAltClicked();
        else if ( e.altKey ) imageButton.altClicked();
        else if ( e.ctrlKey ) imageButton.ctrlClicked();
        else imageButton.clicked();
    }, true );

    if ( label )
    {
        imageButton.label.addEventListener( "mouseover", imageButton.highlight );
        imageButton.fillerL.addEventListener( "mouseover", imageButton.highlight );
        imageButton.fillerR.addEventListener( "mouseover", imageButton.highlight );
    }
    // Hack - CS6 Bug on mouseover with images
    if ( DuAEF.DuAE.App.version.version > 11 && icon )
    {
        imageButton.icon.addEventListener( "mouseover", imageButton.highlight );
    }

    imageButton.help = {};
    imageButton.help.title = '';
    imageButton.help.text = '';
    imageButton.help.link = '';

    //help popup
    imageButton.setHelp = function( title, text, link )
    {
        if ( text != '' ) DuAEF.DuScriptUI.uiStrings.push( title );
        title = tr( title );
        imageButton.help.title = title;
        imageButton.help.text = text;
        imageButton.help.link = link;
    }

    return imageButton;
}

/**
 * @class
 * @name DuSmallButton
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * An Small Button.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addSmallButton} to create a Small Button.<br />
 * The Small Button inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {StaticText} label - The label
 * @property {any} value - A user value stored in the button, which is passed to the onClick method
 * @property {DuSmallButton~onClick} onClick - The function to execute when the button is clicked
 */

/**
 * The function to execute when the button is clicked.<br />
 * The implementation of this function can take one parameter which is the used defined value of the button.
 * @callback DuSmallButton~onClick
 * @memberof DuSmallButton
 * @param {any} value - The used defined value of the button
 */

/**
 * Creates a small button.
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window|Group}			container	- The ScriptUI Object which will contain and display the button.
 * @param {string}					text		- The label of the button. Default: empty string
 * @param {string}					[helpTip]		- The helptip. Default: empty string
 * @param {any}					[value]		- A user value stored in the button, which is passed to the onClick method
 * @return {DuButton}			The image button created.
 */
DuAEF.DuScriptUI.addSmallButton = function( container, text, helpTip, value )
{
    if ( typeof helpTip === 'undefined' ) helpTip = '';

    DuAEF.DuScriptUI.uiStrings.push( text );
    text = tr( text );
    if ( helpTip != '' )
    {
        DuAEF.DuScriptUI.uiStrings.push( helpTip );
        helpTip = tr( helpTip );
    }

    var smallButton = container.add( 'group' );
    smallButton.orientation = 'row';
    smallButton.margins = 0;
    smallButton.alignment = [ 'fill', 'top' ];
    smallButton.alignChildren = [ 'fill', 'fill' ];
    smallButton.spacing = 0;

    smallButton.onClick = function() {};
    smallButton.onAltClick = function() {};
    smallButton.onCtrlAltClick = function() {};
    smallButton.onCtrlClick = function() {};
    smallButton.label = smallButton.add( 'statictext', undefined, text );
    smallButton.label.helpTip = helpTip;
    smallButton.label.justify = 'center';
    DuAEF.DuScriptUI.setBackgroundColor( smallButton, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );

    smallButton.value = value;

    //events
    smallButton.clicked = function()
    {
        DuAEF.Debug.safeRun(smallButton.onClick, smallButton.value);
    }

    smallButton.shiftClicked = function()
    {
        DuAEF.DuScriptUI.updateHelpPopup( smallButton.help.title, smallButton.help.text, smallButton.help.link );

        if ( smallButton.help.text != '' )
        {
            DuAEF.DuScriptUI.showHelp();
        }
    }

    smallButton.altClicked = function()
    {
        DuAEF.Debug.safeRun(smallButton.onAltClick);
    }

    smallButton.ctrlAltClicked = function()
    {
        DuAEF.Debug.safeRun(smallButton.onCtrlAltClick);
    }

    smallButton.ctrlClicked = function()
    {
        DuAEF.Debug.safeRun(smallButton.onCtrlClick);
    }

    smallButton.highlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();

        DuAEF.DuScriptUI.setTextColor( smallButton.label, DuAEF.DuJS.Color.Colors.VERY_LIGHT_GREY );
        DuAEF.DuScriptUI.setBackgroundColor( smallButton, DuAEF.DuJS.Color.Colors.DARK_GREY );

        DuAEF.DuScriptUI.highlightedControls.push( smallButton );
    }

    smallButton.dim = function()
    {
        DuAEF.DuScriptUI.setTextColor( smallButton.label, DuAEF.DuJS.Color.Colors.LIGHT_GREY );
        DuAEF.DuScriptUI.setBackgroundColor( smallButton, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
    }

    //add events
    smallButton.addEventListener( 'click', function( e )
    {
        if ( e.shiftKey ) smallButton.shiftClicked();
        else if ( e.altKey && e.ctrlKey ) smallButton.ctrlAltClicked();
        else if ( e.altKey ) smallButton.altClicked();
        else if ( e.ctrlKey ) smallButton.ctrlClicked();
        else smallButton.clicked();
    }, true );


    smallButton.addEventListener( "mouseover", smallButton.highlight );


    smallButton.help = {};
    smallButton.help.title = '';
    smallButton.help.text = '';
    smallButton.help.link = '';

    //help popup
    smallButton.setHelp = function( title, text, link )
    {
        if ( text != '' ) DuAEF.DuScriptUI.uiStrings.push( title );
        title = tr( title );
        smallButton.help.title = title;
        smallButton.help.text = text;
        smallButton.help.link = link;
    }

    return smallButton;
}
// ==================== |-----------------------| ====================
// ==================== | DuScriptUICheckboxLib | ====================
// ==================== |-----------------------| ====================


/**
 * @class
 * @name DuCheckBox
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * An Image Checkbox.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addCheckBox} to create an Image Checkbox.<br />
 * The Image Checkbox inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {Group} group - The scriptUI Group containing the label and the image.
 * @property {string} standardImage - The path to the image (or a PNG as a string representation)
 * @property {string} imageOver - The path to the image (or a PNG as a string representation) to display when mouseover
 * @property {string} imageChecked - The path to the image (or a PNG as a string representation) to display when the button is checked
 * @property {Image}	image	- The scriptui object representing the image, if any
 * @property {StaticText}	label	- The label, if any
 * @property {string} text - The current text
 * @property {string} textChecked - The text to display when the checkbox is checked
 * @property {string} defaultText - The text to display when the checkbox is unchecked
 * @property {boolean}	checked 	- The checked state of the button
 * @property {DuCheckBox~onClick} onClick - The function to execute when the button is clicked
 */

/**
 * The function to execute when the button is clicked.
 * @callback DuCheckBox~onClick
 * @memberof DuCheckBox
 */

/**
 * Sets the checked state of the button
 * @method
 * @memberof DuCheckBox
 * @name setChecked
 * @param {boolean} [checked=true] - The state
 */

/**
 * Sets the help information for this button
 * @method
 * @memberof DuCheckBox
 * @name setHelp
 * @param {string} title - The title
 * @param {string} text - The content
 * @param {string} link - A URL to an online help
 */

/**
 * Creates a checkbox with an optionnal icon. Must have at least an icon or a text, or both.
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window|Group}			container		- The ScriptUI Object which will contain and display the button.
 * @param {string}					text			- The label of the button. Default: empty string
 * @param {string}					image			- The path to the icon. Default: empty string
 * @param {string}					helpTip			- The helptip. Default: empty string
 * @param {string}					imageChecked	- The path to an icon displayed when the button is checked. Default: empty string
 * @param {string}					imageOver		- The path to an icon displayed when the mouse is over the button. Default: same as imageChecked
 * @param {string}					[textChecked]			- The label of the button displayed when it is checked.
 * @return {DuCheckBox}					The image checkbox created.
 */
DuAEF.DuScriptUI.addCheckBox = function( container, text, image, helpTip, imageChecked, imageOver, textChecked, isTab )
{
    //isTab is an undocumented low-level param used to create buttons for tabs in tabpanel
    isTab = def(isTab, false);
    if ( !container ) return null;
    text = def(text, '');
    image = def(image, '');
    helpTip = def(helpTip, '');
    imageChecked = def(imageChecked, '');
    imageOver = def(imageOver, imageChecked);
    textChecked = def(textChecked, '');

    //check if images exist
    if ( imageOver != '' && !DuAEF.DuJS.Fs.fileExists( imageOver ) ) imageOver = '';
    if ( image != '' && !DuAEF.DuJS.Fs.fileExists( image ) ) image = '';
    if ( imageChecked != '' && !DuAEF.DuJS.Fs.fileExists( imageChecked ) ) imageChecked = '';

    //if no image and no text, a placeholder character
    if ( image == '' && text == '' ) text = '#';

    //translate text and helptip
    if ( text != '' ) DuAEF.DuScriptUI.uiStrings.push( text );
    if ( helpTip != '' ) DuAEF.DuScriptUI.uiStrings.push( helpTip );
    text = tr( text );
    helpTip = tr( helpTip );

    //create ui
    var duCheckBox = container.add( 'group' );
    duCheckBox.orientation = 'column';
    duCheckBox.margins = 2;
    if ( isTab ) duCheckBox.spacing = 3;
    else duCheckBox.spacing = 0;

    duCheckBox.group = duCheckBox.add( 'group' );
    duCheckBox.group.orientation = 'row';
    duCheckBox.group.margins = 0;
    duCheckBox.group.spacing = 0;

    var outLine;
    if ( isTab && text != '' )
    {
        outLine = duCheckBox.add( 'group' );
        outLine.margins = 0;
        outLine.minimumSize.height = 2;
        outLine.alignment = [ 'fill', 'top' ];
    }

    duCheckBox.standardImage = image;
    duCheckBox.imageOver = imageOver;
    duCheckBox.imageChecked = imageChecked;
    duCheckBox.onClick = function() {};
    duCheckBox.onAltClick = function() {};
    duCheckBox.checked = duCheckBox.value = false;
    duCheckBox.textChecked = textChecked;
    duCheckBox.defaultText = text;
    duCheckBox.text = text;

    iconChecked = DuAEF.DuBinary.toFile( w14_checked_m );
    iconCheckedOver = DuAEF.DuBinary.toFile( w14_checked_l );
    iconUnchecked = DuAEF.DuBinary.toFile( w14_emptysquare_m );
    iconUncheckedOver = DuAEF.DuBinary.toFile( w14_unchecked_l );
    var checkbox; //the icon checkbox

    //adjust appearance if there's some text
    if ( text != '')
    {
        //checkbox icon
        if ( !isTab && DuAEF.DuAE.App.hasFilesAndNetworkAccess )
        {
            checkbox = duCheckBox.group.add( 'image', undefined, iconUnchecked );
            checkbox.alignment = [ 'left', 'center' ];
            checkbox.helpTip = helpTip;
        }
        //general appearance
        DuAEF.DuScriptUI.setBackgroundColor( duCheckBox, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
        duCheckBox.alignment = [ 'fill', 'top' ];
        duCheckBox.alignChildren = [ 'fill', 'center' ];
    }

    //adjust appearance if there's an image
    if ( image != '' && DuAEF.DuAE.App.hasFilesAndNetworkAccess )
    {
        duCheckBox.image = duCheckBox.group.add( 'image', undefined, image );
        if ( isTab ) duCheckBox.image.alignment = [ 'center', 'center' ];
        else duCheckBox.image.alignment = [ 'left', 'center' ];
        duCheckBox.image.helpTip = helpTip;
    }

    //add the label 
    //label
    if ( text != '')
    {
        duCheckBox.label = duCheckBox.group.add( 'statictext', undefined, text );
        duCheckBox.label.helpTip = helpTip;
        if ( isTab ) duCheckBox.label.alignment = [ 'center', 'center' ];
        else duCheckBox.label.alignment = [ 'left', 'center' ];
        //label size
        if ( text.length < textChecked.length ) duCheckBox.label.characters = textChecked.length;
        else duCheckBox.label.characters = text.length;
    }

    /**
     * Checks or unchecks the button
     * @memberof DuCheckBox
     * @param {boolean} c - The checked state
     */
    duCheckBox.setChecked = function( c )
    {
        c = def(c, true);
        duCheckBox.checked = duCheckBox.value = c;

        if ( c )
        {
            //label
            if ( duCheckBox.label && duCheckBox.textChecked != '' )
            {
                duCheckBox.label.text = duCheckBox.textChecked;
                duCheckBox.text = duCheckBox.textChecked;
            }
            //checkbox
            if ( checkbox ) checkbox.image = iconChecked;
            //image 
            if ( duCheckBox.image && duCheckBox.imageChecked != '' ) duCheckBox.image.image = duCheckBox.imageChecked;
            //outline
            if (outLine) DuAEF.DuScriptUI.setBackgroundColor( outLine, DuAEF.DuJS.Color.Colors.RAINBOX_RED, true );
        }
        else 
        {
            //label
            if ( duCheckBox.label)
            {
                duCheckBox.label.text = duCheckBox.defaultText;
                duCheckBox.text = duCheckBox.defaultText;
            }
            //checkbox
            if ( checkbox ) checkbox.image = iconUnchecked;
            //image 
            if ( duCheckBox.image && duCheckBox.standardImage != '' ) duCheckBox.image.image = duCheckBox.standardImage;
            //outline 
            if (outLine) DuAEF.DuScriptUI.setBackgroundColor( outLine, DuAEF.DuJS.Color.Colors.DARK_GREY, true );
        }
    }

    duCheckBox.clicked = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.updateHelpPopup( duCheckBox.help.title, duCheckBox.help.text, duCheckBox.help.link );
        if ( e.shiftKey )
        {
            if ( duCheckBox.help.text != '' )
            {
                DuAEF.DuScriptUI.showHelp();
            }
            return;
        }

        duCheckBox.setChecked( !duCheckBox.checked );
        DuAEF.Debug.safeRun(duCheckBox.onClick);
    }

    duCheckBox.altClicked = function()
    {
        DuAEF.Debug.safeRun(duCheckBox.onAltClick);
    }

    duCheckBox.highlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();
        //image
        if ( duCheckBox.image && duCheckBox.imageOver != '' ) duCheckBox.image.image = duCheckBox.imageOver;
        //label
        if ( duCheckBox.label ) DuAEF.DuScriptUI.setBackgroundColor( duCheckBox, DuAEF.DuJS.Color.Colors.DARK_GREY );
        //checkbox 
        if ( checkbox && duCheckBox.checked ) checkbox.image = iconCheckedOver;
        else if ( checkbox ) checkbox.image = iconUncheckedOver;
        //outline
        if ( outLine ) DuAEF.DuScriptUI.setBackgroundColor( outLine, DuAEF.DuJS.Color.Colors.LIGHT_GREY, true );

        DuAEF.DuScriptUI.highlightedControls.push( duCheckBox );
    }

    duCheckBox.dim = function( e )
    {
        //image
        if ( duCheckBox.image && duCheckBox.imageChecked != '' && duCheckBox.checked ) duCheckBox.image.image = duCheckBox.imageChecked;
        else if ( duCheckBox.image && duCheckBox.imageChecked != '' ) duCheckBox.image.image = duCheckBox.standardImage;
        //label
        if ( duCheckBox.label ) DuAEF.DuScriptUI.setBackgroundColor( duCheckBox, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
        //checkbox 
        if ( checkbox && duCheckBox.checked ) checkbox.image = iconChecked;
        else if ( checkbox ) checkbox.image = iconUnchecked;
        //outline
        if ( outLine && duCheckBox.checked ) DuAEF.DuScriptUI.setBackgroundColor( outLine, DuAEF.DuJS.Color.Colors.RAINBOX_RED, true );
        else if ( outLine ) DuAEF.DuScriptUI.setBackgroundColor( outLine, DuAEF.DuJS.Color.Colors.DARK_GREY, true );
    }

    duCheckBox.group.addEventListener( "mousedown", function(e)
    {
        if ( e.altKey ) duCheckBox.altClicked();
        else duCheckBox.clicked(e);
    }, true );
    // Hack - CS6 Bug on mouseover with images
    if ( DuAEF.DuAE.App.version.version >= 11 && DuAEF.DuAE.App.version.version < 12 )
    {
        if ( duCheckBox.label ) duCheckBox.label.addEventListener( "mouseover", duCheckBox.highlight );
    }
    else
    {
        duCheckBox.addEventListener( "mouseover", duCheckBox.highlight );
    }

    duCheckBox.help = {};
    duCheckBox.help.title = '';
    duCheckBox.help.text = '';
    duCheckBox.help.link = '';

    //help popup
    duCheckBox.setHelp = function( title, text, link )
    {
        duCheckBox.help.title = title;
        duCheckBox.help.text = text;
        duCheckBox.help.link = link;
    }

    return duCheckBox;
}

/**
 * @class
 * @name SimpleCheckBox
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A Nice Checkbox.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addSimpleCheckBox} to create an Nice Checkbox.<br />
 * The Nice Checkbox inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {StaticText} label - The statictext used as a label
 * @property {CheckBox} checkbox - The box
 * @property {float[]} color - The color [R,G,B,A]
 * @property {NiceCheckbox~onClick} onClick - Function to execute when clicked
 */

/**
 * The function to execute when the button is clicked.
 * @callback NiceCheckbox~onClick
 * @memberof NiceCheckbox
 */

/**
 * Creates a checkbox which can be colored, and changes color on hover
 * @memberof DuAEF.DuScriptUI
 * @param {Panel|Window|Group}		container		- The ScriptUI Object which will contain and display the button.
 * @param {string}					[text]			- The label of the button.
 * @param {string}					[helpTip]			- The helptip.
 * @param {color}					[color=DuAEF.DuJS.Color.Colors.LIGHT_GREY]			- The color of the text
 * @return {SimpleCheckBox}					The image checkbox created.
 */
DuAEF.DuScriptUI.addSimpleCheckBox = function( container, text, helpTip, color )
{
    if ( color == undefined ) color = DuAEF.DuJS.Color.Colors.LIGHT_GREY;
    if ( helpTip == undefined ) helpTip = '';
    if ( text == undefined ) text = '';

    if ( text != '' ) DuAEF.DuScriptUI.uiStrings.push( text );
    if ( helpTip != '' ) DuAEF.DuScriptUI.uiStrings.push( helpTip );
    text = tr( text );
    helpTip = tr( helpTip );

    var niceCheckBox = container.add( 'group' );
    niceCheckBox.orientation = 'row';
    niceCheckBox.alignChildren = [ 'left', 'center' ];
    niceCheckBox.spacing = DuAEF.DuScriptUI.defaultSpacing;
    niceCheckBox.margins = 0;
    niceCheckBox.checkBox = niceCheckBox.add( 'checkbox', undefined, '' );
    niceCheckBox.label = niceCheckBox.add( 'statictext', undefined, text );
    niceCheckBox.onClick = function() {};
    niceCheckBox.checked = niceCheckBox.value = false;
    niceCheckBox.color = color;

    niceCheckBox.checkBox.helpTip = helpTip;
    niceCheckBox.label.helpTip = helpTip;

    DuAEF.DuScriptUI.setTextColor( niceCheckBox.label, niceCheckBox.color );

    /**
     * Checks or unchecks the button
     * @memberof SimpleCheckBox
     * @param {boolean} c	- The checked state
     */
    niceCheckBox.setChecked = function( c )
    {
        niceCheckBox.checked = niceCheckBox.value = c;
        niceCheckBox.checkBox.value = c;
    }

    niceCheckBox.labelClicked = function( e )
    {
        niceCheckBox.setChecked( !niceCheckBox.checked );
        DuAEF.Debug.safeRun(niceCheckBox.onClick);
    }

    niceCheckBox.checkBoxClicked = function( e )
    {
        niceCheckBox.checked = niceCheckBox.value = niceCheckBox.checkBox.value;
        DuAEF.Debug.safeRun(niceCheckBox.onClick);
    }

    niceCheckBox.highlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();
        DuAEF.DuScriptUI.setTextColor( niceCheckBox.label, DuAEF.DuJS.Color.Colors.RAINBOX_RED );
        DuAEF.DuScriptUI.highlightedControls.push( niceCheckBox );
    }

    niceCheckBox.dim = function( e )
    {
        DuAEF.DuScriptUI.setTextColor( niceCheckBox.label, niceCheckBox.color );
    }

    niceCheckBox.label.addEventListener( "mousedown", niceCheckBox.labelClicked, false );
    niceCheckBox.checkBox.onClick = niceCheckBox.checkBoxClicked;
    niceCheckBox.addEventListener( "mouseover", niceCheckBox.highlight );

    return niceCheckBox;
}
// ==================== |---------------------------| ====================
// ==================== | DuScriptUIFileSelectorLib | ====================
// ==================== |---------------------------| ====================


/**
 * @class
 * @name DuFolderSelector
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A "Browse" button for folders only, with an optional text field for the path.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addFolderSelector} to create a selector.<br />
 * The DuFolderSelector inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {string} path - The folder path, initialized with an empty string. Note that this may not point to an existing folder if the user entered an incorrect path in the text field.<br />
 * To be sure to get an existing folder, you can use the getFolder() method.
 * @property {DuEditText|null} editText - The text field, if any.
 * @property {DuButton} button - The "Browse" button.
 */

/**
 * Gets the selected folder.
 * @method
 * @memberof DuFolderSelector
 * @name getFolder
 * @return {Folder|null} The new Folder, if any. null if the Folder does not exist or the user has input an incorrect path.
 */

/**
 * Creates a folder selector with a field for the path and a browse button<br />
 * @memberof DuAEF.DuScriptUI
 * @param {Window|Panel|Group} container - The ScriptUI Object which will contain and display the panel.
 * @param {string} [text="Browse..."] - The text to display on the button.
 * @param {boolean} [textField=true] - Wether to show the text field for the path.
 * @param {string} [helpTip=''] - The helptip for this control.
 * @return {TabPanel} The panel.
 */
DuAEF.DuScriptUI.addFolderSelector = function ( container, text, textField, helpTip )
{
    text = def(text, "Browse...");
    textField = def(textField, true);
    helpTip = def(helpTip, '');

    var folderSelector = container.add('group');
    folderSelector.orientation = 'row';
    folderSelector.margins = 2;
    folderSelector.spacing = 0;

    folderSelector.path = '';

    folderSelector.button = DuAEF.DuScriptUI.addButton(
        folderSelector,
        text,
        DuAEF.DuBinary.toFile(w14_folder_m),
        helpTip,
        DuAEF.DuBinary.toFile(w14_folder_r)
        );
    folderSelector.button.alignment = ['left','fill'];

    folderSelector.editText = null;
    if (textField) {
        folderSelector.editText = DuAEF.DuScriptUI.addEditText(
            folderSelector,
            '',
            '',
            '',
            'Path...',
            helpTip,
            false
            );
        folderSelector.editText.alignment = ['fill','center'];

        folderSelector.editText.onChange = function () {
            folderSelector.path = folderSelector.editText.text;
        }
    }

    folderSelector.button.onClick = function () {
        var folder = Folder.selectDialog ("Select Folder");
        if (!folder) return;
        folderSelector.editText.setText(folder.fsName);
        folderSelector.path = folder.absoluteURI;
    }

    folderSelector.getFolder = function () {
        var folder = new Folder(folderSelector.path);
        if (folder.exists) return folder;
        else return null;
    }

    return folderSelector;
}// ==================== |-------------------| ====================
// ==================== | DuScriptUIFormLib | ====================
// ==================== |-------------------| ====================


/**
 * @class
 * @name Form
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A Form.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addForm} to create a Form.<br />
 * The Form inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {Group} labels - The left vertical group
 * @property {Group} buttons - The right vertical group
 */

/**
 * Adds a field to the form
 * example: form.addField('Composition:','dropdownlist',['Composition1','Composition2'],'Select a composition')
 * @method
 * @memberof Form
 * @name addField
 * @param {string}			label		- The label text.
 * @param {string}			type		- The type of ScriptUI object to add (like 'button','edittext', etc.).
 * @param {object}			[value]		- The default value or content of the field added, depends on the type.
 * @param {string}			[helpTip]		- The helpTip of the form control.
 * @return {ScriptUI[]}		An array with at 0 the StaticText label, and at 1 the ScriptUI object of the type type, added to the form
 */

/**
 * Creates a layout to add forms to a UI, using ScriptUI groups.<br />
 * You can easily add controls/fields to this form using DuAEF.DuScriptUI.addField
 * @memberof DuAEF.DuScriptUI
 * @param {Window|Panel|Group}	container		- The ScriptUI Object which will contain and display the form.
 * @return {Form}		The custom Group containing the form.
 */
DuAEF.DuScriptUI.addForm = function( container )
{
    var mainGroup = container.add( 'group' );
    mainGroup.orientation = 'row';
    mainGroup.margins = 0;
    mainGroup.spacing = DuAEF.DuScriptUI.defaultSpacing;

    var labelsGroup = mainGroup.add( 'group' );
    labelsGroup.alignment = [ 'left', 'top' ];
    labelsGroup.orientation = 'column';
    labelsGroup.alignChildren = [ 'left', 'bottom' ];
    labelsGroup.spacing = DuAEF.DuScriptUI.defaultSpacing;

    var buttonsGroup = mainGroup.add( 'group' );
    buttonsGroup.alignment = [ 'fill', 'top' ];
    buttonsGroup.orientation = 'column';
    buttonsGroup.alignChildren = [ 'fill', 'fill' ];
    buttonsGroup.spacing = DuAEF.DuScriptUI.defaultSpacing;

    mainGroup.labels = labelsGroup;
    mainGroup.buttons = buttonsGroup;

    mainGroup.addEventListener( "mouseover", DuAEF.DuScriptUI.dimControls );

    mainGroup.addField = function( label, type, value, helpTip )
    {
        if ( helpTip == undefined ) helpTip = '';

        if ( label != '' ) DuAEF.DuScriptUI.uiStrings.push( label );
        if ( helpTip != '' ) DuAEF.DuScriptUI.uiStrings.push( helpTip );
        label = tr( label );
        helpTip = tr( helpTip );

        var control = null;
        var height = 20;
        if ( type == "DuButton" )
        {
            control = DuAEF.DuScriptUI.addButton( mainGroup.buttons, '', value[ 0 ], helpTip, value[ 1 ] );
            height = control.image.preferredSize[ 1 ];
        }
        else
        {
            control = mainGroup.buttons.add( type, undefined, value );
            control.helpTip = helpTip;
            height = control.preferredSize[ 1 ];
        }

        var l = mainGroup.labels.add( 'statictext', undefined, label );
        l.helpTip = helpTip;

        l.minimumSize.height = l.maximumSize.height = height;
        return [ l, control ];
    }

    return mainGroup;
}
// ==================== |-------------------| ====================
// ==================== | DuScriptUIHelpLib | ====================
// ==================== |-------------------| ====================


/**
 * The panel where the help is displayed
 */
DuAEF.DuScriptUI.helpPanel = DuAEF.DuScriptUI.createPopup( "Help" );

//low-level undocumented flag. true if the help panel has been initialized (happens on first display)
DuAEF.DuScriptUI.helpPanel.initialized = false;

//Initializes the help panel
DuAEF.DuScriptUI.initHelpPanel = function()
{
    if ( DuAEF.DuScriptUI.helpPanel.initialized ) return;

    DuAEF.DuScriptUI.helpPanel.pin(true);

    DuAEF.DuScriptUI.helpPanel.initialized = true;

    DuAEF.DuScriptUI.helpPanel.link = '';
    DuAEF.DuScriptUI.helpPanel.news = {};
    DuAEF.DuScriptUI.helpPanel.about = {};

    DuAEF.DuScriptUI.helpPanel.contents.margins = 2;
    DuAEF.DuScriptUI.helpPanel.contents.spacing = 0;
    DuAEF.DuScriptUI.helpPanel.contents.maximumSize.height = 500;
    DuAEF.DuScriptUI.helpPanel.contents.alignChildren = [ 'fill', 'fill' ];

    //add the tab panel
    var tabPanel = DuAEF.DuScriptUI.addTabPanel( DuAEF.DuScriptUI.helpPanel.contents );

    //add tabs
    var helpTab = tabPanel.addTab(
        "Help",
        DuAEF.DuBinary.toFile( w14_help_m ),
        '',
        DuAEF.DuBinary.toFile( w14_help_l )
    );
    var newsTab = tabPanel.addTab(
        "News",
        DuAEF.DuBinary.toFile( w14_news_m ),
        '',
        DuAEF.DuBinary.toFile( w14_news_l )
    );
    var aboutTab = tabPanel.addTab(
        "About",
        DuAEF.DuBinary.toFile( w14_help_m ),
        '',
        DuAEF.DuBinary.toFile( w14_help_l )
    );

    helpTab.build = function ( helpGroup ) {
        //add title
        DuAEF.DuScriptUI.helpPanel.title = DuAEF.DuScriptUI.addStaticText( helpGroup, '', DuAEF.DuJS.Color.Colors.VERY_LIGHT_GREY );
        DuAEF.DuScriptUI.helpPanel.title.alignment = [ 'fill', 'top' ];

        //add text
        DuAEF.DuScriptUI.helpPanel.help = helpGroup.add( 'edittext', undefined, '',
        {
            multiline: true
        } );
        DuAEF.DuScriptUI.helpPanel.help.alignment = [ 'fill', 'fill' ];

        //more button
        DuAEF.DuScriptUI.helpPanel.helpMoreButton = DuAEF.DuScriptUI.addButton( helpGroup, "More...", DuAEF.DuBinary.toFile( w14_url_m ), "Read more details online", DuAEF.DuBinary.toFile( w14_url_l ) );
        DuAEF.DuScriptUI.helpPanel.helpMoreButton.alignment = ['fill','bottom'];

        DuAEF.DuScriptUI.helpPanel.helpMoreButton.onClick = function () { DuAEF.DuSystem.openURL( DuAEF.DuScriptUI.helpPanel.link ); };
        DuAEF.DuScriptUI.helpPanel.helpMoreButton.onAltClick = function () { DuAEF.DuSystem.openURL( 'https://bat-ultra-bunny.tumblr.com/' ); };
    }

    newsTab.build = function ( newsGroup ) {
        DuAEF.DuScriptUI.helpPanel.newsPanel = DuAEF.DuScriptUI.addRSSPanel(
            newsGroup,
            3600*24,
            DuAEF.newsServer,
            DuAEF.DuJS.Color.Colors.VERY_LIGHT_GRAY,
            DuAEF.newsArgs,
            DuAEF.newsUserAgentVersion
            );
    }

    aboutTab.build = function ( aboutGroup ) {
        //add title
        DuAEF.DuScriptUI.helpPanel.title = DuAEF.DuScriptUI.addStaticText( aboutGroup, DuAEF.scriptName + " (v" + DuAEF.scriptVersion.fullVersion + ")", DuAEF.DuJS.Color.Colors.VERY_LIGHT_GREY );
        DuAEF.DuScriptUI.helpPanel.title.alignment = [ 'fill', 'top' ];

        //add text
        DuAEF.DuScriptUI.helpPanel.about.help = aboutGroup.add( 'edittext', undefined, DuAEF.scriptAbout,
        {
            multiline: true
        } );
        DuAEF.DuScriptUI.helpPanel.about.help.alignment = [ 'fill', 'fill' ];

        //more button
        DuAEF.DuScriptUI.helpPanel.moreButton = DuAEF.DuScriptUI.addButton( aboutGroup, "More...", DuAEF.DuBinary.toFile( w14_url_m ), "Read more details online", DuAEF.DuBinary.toFile( w14_url_l ) );
        DuAEF.DuScriptUI.helpPanel.moreButton.alignment = ['fill','bottom'];

        DuAEF.DuScriptUI.helpPanel.moreButton.onClick = function () { DuAEF.DuSystem.openURL( DuAEF.aboutURL ); };
        DuAEF.DuScriptUI.helpPanel.moreButton.onAltClick = function () { DuAEF.DuSystem.openURL( 'https://bat-ultra-bunny.tumblr.com/' ); };
    }

    var urlButtonsGroup = DuAEF.DuScriptUI.addGroup( DuAEF.DuScriptUI.helpPanel.contents, 'row' );
    urlButtonsGroup.alignment = [ 'fill', 'bottom' ];

    var socialButtonsGroup1 = DuAEF.DuScriptUI.addGroup( urlButtonsGroup, 'column' );
    socialButtonsGroup1.alignment= ['fill','bottom'];
    if (DuAEF.forumURL != '')
    {
        DuAEF.DuScriptUI.helpPanel.forumButton = DuAEF.DuScriptUI.addButton( socialButtonsGroup1, "Forum", DuAEF.DuBinary.toFile( w18_forum_l ), "Visit our forum", DuAEF.DuBinary.toFile( w18_forum_r ) );
        DuAEF.DuScriptUI.helpPanel.forumButton.onClick = function ()
        {
            DuAEF.DuSystem.openURL( DuAEF.forumURL );
        }
    }
    if (DuAEF.featureRequestURL != '')
    {
        DuAEF.DuScriptUI.helpPanel.featureRequestURL = DuAEF.DuScriptUI.addButton( socialButtonsGroup1, "Feature Request", DuAEF.DuBinary.toFile( w18_featurerequest_l ), "Request something new", DuAEF.DuBinary.toFile( w18_featurerequest_r ) );
        DuAEF.DuScriptUI.helpPanel.featureRequestURL.onClick = function ()
        {
            DuAEF.DuSystem.openURL( DuAEF.featureRequestURL );
        }
    }

    var socialButtonsGroup2 = DuAEF.DuScriptUI.addGroup( urlButtonsGroup, 'column' );
    socialButtonsGroup2.alignment= ['fill','bottom'];
    if (DuAEF.chatURL != '')
    {
        DuAEF.DuScriptUI.helpPanel.discordButton = DuAEF.DuScriptUI.addButton( socialButtonsGroup2, "Live chat", DuAEF.DuBinary.toFile( w18_discord_l ), "Come and have a chat!", DuAEF.DuBinary.toFile( w18_discord_r ) );
        DuAEF.DuScriptUI.helpPanel.discordButton.onClick = function ()
        {
            DuAEF.DuSystem.openURL( DuAEF.chatURL );
        }
    }
    if (DuAEF.bugReportURL != '')
    {
        DuAEF.DuScriptUI.helpPanel.bugReportButton = DuAEF.DuScriptUI.addButton( socialButtonsGroup2, "Bug Report", DuAEF.DuBinary.toFile( w18_bugreport_l ), "Tell us what's wrong", DuAEF.DuBinary.toFile( w18_bugreport_r ) );
        DuAEF.DuScriptUI.helpPanel.bugReportButton.onClick = function ()
        {
            DuAEF.DuSystem.openURL( DuAEF.bugReportURL );
        }
    }
       

    DuAEF.DuScriptUI.helpPanel.setPanel = function( panel )
    {
        if ( typeof panel === 'undefined' ) panel = 0;

        tabPanel.setCurrentIndex( panel )

        if ( panel == 0 )
        {
            if ( DuAEF.DuScriptUI.helpPanel.link != '' ) DuAEF.DuScriptUI.helpPanel.helpMoreButton.show();
            else DuAEF.DuScriptUI.helpPanel.helpMoreButton.hide();
        }
        else if ( panel == 2 )
        {
            if ( DuAEF.aboutURL != '' ) DuAEF.DuScriptUI.helpPanel.moreButton.show();
            else DuAEF.DuScriptUI.helpPanel.moreButton.hide();
        }
    }
}

/**
 * Updates the helpPopup with new information
 * @memberof DuAEF.DuScriptUI
 * @param {string} title - A title.
 * @param {string} text - The help text.
 * @param {string} link - The http link to a webpage
 */
DuAEF.DuScriptUI.updateHelpPopup = function( title, text, link )
{
    DuAEF.DuScriptUI.initHelpPanel();
    if ( typeof link === 'undefined' ) link = '';

    if ( text == '' ) return;

    if ( text != '' ) DuAEF.DuScriptUI.uiStrings.push( text );
    if ( title != '' ) DuAEF.DuScriptUI.uiStrings.push( title );
    text = tr( text );
    title = tr( title );

    DuAEF.DuScriptUI.helpPanel.setPanel( 0 );

    DuAEF.DuScriptUI.helpPanel.title.text = title;
    DuAEF.DuScriptUI.helpPanel.help.text = text;
    DuAEF.DuScriptUI.helpPanel.link = link;

    DuAEF.DuScriptUI.helpPanel.layout.layout( true );
    DuAEF.DuScriptUI.helpPanel.layout.resize();
}

/**
 * Shows the help popup
 * @memberof DuAEF.DuScriptUI
 */
DuAEF.DuScriptUI.showHelp = function()
{
    DuAEF.DuScriptUI.initHelpPanel();
    DuAEF.DuScriptUI.helpPanel.setPanel( 0 );
    DuAEF.DuScriptUI.helpPanel.show();
}

/**
 * Shows the news popup
 * @memberof DuAEF.DuScriptUI
 */
DuAEF.DuScriptUI.showNews = function()
{
    DuAEF.DuScriptUI.initHelpPanel();
    DuAEF.DuScriptUI.helpPanel.setPanel( 1 );
    DuAEF.DuScriptUI.helpPanel.newsPanel.updateRSS();
    DuAEF.DuScriptUI.helpPanel.show();
}

/**
 * Shows the about popup
 * @memberof DuAEF.DuScriptUI
 */
DuAEF.DuScriptUI.showAbout = function()
{
    DuAEF.DuScriptUI.initHelpPanel();
    DuAEF.DuScriptUI.helpPanel.setPanel( 2 );
    DuAEF.DuScriptUI.helpPanel.show();
}
// ==================== |--------------------------| ====================
// ==================== | DuScriptUILayerPickerLib | ====================
// ==================== |--------------------------| ====================


/**
 * @class
 * @name LayerPicker
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A picker for layers with labels.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.createLayerPicker} to create a picker.<br />
 * The picker inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {LayerSelector[]} selectors  - The layer selectors
 * @property {string[]} inputs - The labels texts
 */

/**
 * Empties the LayerPicker
 * @method
 * @memberof LayerPicker
 * @name removeAll
 */

/**
 * Adds a new line on the LayerPicker
 * @method
 * @memberof LayerPicker
 * @name addSelector
 * @return {LayerSelector} The added LayerSelector
 */

/**
 * Creates a two-columns group to allow the user to pick layers
 * @memberof DuAEF.DuScriptUI
 * @param {Window|Panel|Group} container - The ScriptUI Object which will contain and display the selector.
 * @return {LayerPicker} The picker.
 */
DuAEF.DuScriptUI.addLayerPicker = function( container )
{
    var name = "Select layers";
    DuAEF.DuScriptUI.uiStrings.push( name );
    name = tr( name );
    var layerPicker = container.add( 'group' );
    layerPicker.orientation = 'row';
    layerPicker.margins = 0;
    layerPicker.spacing = DuAEF.DuScriptUI.defaultSpacing;
    layerPicker.alignment = [ 'fill', 'top' ];

    layerPicker.labelsGroup = layerPicker.add( 'group' );
    layerPicker.labelsGroup.orientation = 'column';
    layerPicker.labelsGroup.margins = 0;
    layerPicker.labelsGroup.spacing = DuAEF.DuScriptUI.defaultSpacing;
    layerPicker.labelsGroup.alignment = [ 'left', 'fill' ];
    layerPicker.labelsGroup.alignChildren = [ 'left', 'fill' ];

    layerPicker.selectorsGroup = layerPicker.add( 'group' );
    layerPicker.selectorsGroup.orientation = 'column';
    layerPicker.selectorsGroup.margins = 0;
    layerPicker.selectorsGroup.spacing = DuAEF.DuScriptUI.defaultSpacing;
    layerPicker.selectorsGroup.alignment = [ 'fill', 'fill' ];

    layerPicker.selectors = [];
    layerPicker.inputs = [];

    layerPicker.removeAll = function()
    {
        layerPicker.selectors = [];
        layerPicker.inputs = [];
        for ( var i = layerPicker.labelsGroup.children.length - 1; i >= 0; i-- )
        {
            layerPicker.labelsGroup.remove( layerPicker.labelsGroup.children[ i ] );
            layerPicker.selectorsGroup.remove( layerPicker.selectorsGroup.children[ i ] );
        }
    }

    layerPicker.addSelector = function( inputLabel )
    {
        DuAEF.DuScriptUI.uiStrings.push( inputLabel );
        inputLabel = tr( inputLabel );
        var l = layerPicker.labelsGroup.add( 'statictext', undefined, inputLabel );

        var sel = DuAEF.DuScriptUI.addLayerSelector( layerPicker.selectorsGroup );
        layerPicker.selectors.push( sel );
        sel.alignment = [ 'fill', 'fill' ];

        //l.minimumSize.height = l.maximumSize.height = 18;

        return sel;
    }

    return layerPicker;
}

/**
 * @class
 * @name LayerPickerDialog
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A picker for layers with labels.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.createLayerPicker} to create a picker.<br />
 * The picker inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {LayerPicker} layerPicker The layer picker inside the dialog.
 * @property {bool} accepted This property is true if the user has clicked the OK button, false otherwise.
 */

/**
 * Empties the LayerPicker<br />
 * This is a convenience function equivalent to {@link LayerPickerDialog.layerPicker.removeAll}.
 * @method
 * @memberof LayerPickerDialog
 * @name removeAll
 */

/**
 * Adds a new line on the LayerPicker
 * This is a convenience function equivalent to {@link LayerPickerDialog.layerPicker.addSelector}.
 * @method
 * @memberof LayerPickerDialog
 * @name addSelector
 * @return {LayerSelector} The added LayerSelector
 */

/**
 * Gets the layers picked by the user.
 * @method
 * @memberof LayerPickerDialog
 * @name getLayers
 * @return {Layer[]} The layers picked (null if the user has set none in the selector), in the display order.
 */

/**
 * Gets the layers picked by the user.
 * @method
 * @memberof LayerPickerDialog
 * @name getLayers
 * @return {Layer[]} The layers picked (null if the user has set none in the selector), in the display order.
 */

/**
 * The function called when the dialog is accepted.
 * @callback LayerPickerDialog~onAccept
 * @memberof LayerPickerDialog
 */

/**
 * Creates a dialog with a LayerPicker<br />
 * Use {@link DuAEF.DuScriptUI.showUI} to show it after creation.
 * @memberof DuAEF.DuScriptUI
 * @param {string} title - The title of the dialog.
 * @return {LayerPickerDialog} The dialog window.
 */
DuAEF.DuScriptUI.createLayerPickerDialog = function( title )
{
    var dialog = new Window( 'palette', title, undefined,
    {
        resizeable: true
    } );
    dialog.minimumSize.width = 300;

    dialog.margins = DuAEF.DuScriptUI.defaultMargins;
    dialog.orientation = 'column';

    dialog.layerPicker = DuAEF.DuScriptUI.addLayerPicker( dialog );

    dialog.onAccept = function() {};
    dialog.removeAll = dialog.layerPicker.removeAll;
    dialog.addSelector = dialog.layerPicker.addSelector;
    dialog.getLayers = function()
    {
        var layers = [];
        for ( var i = 0, num = dialog.layerPicker.selectors.length; i < num; i++ )
        {
            var sel = dialog.layerPicker.selectors[ i ];
            layers.push( sel.getLayer() );
        }
        return layers;
    }

    dialog.accepted = false;

    //add buttons
    var validGroup = dialog.add( 'group' );
    validGroup.alignment = [ 'fill', 'bottom' ];
    var validGroupCancelButton = DuAEF.DuScriptUI.addButton( validGroup, "Cancel", DuAEF.DuBinary.toFile( w25_back_m ), "Cancel", DuAEF.DuBinary.toFile( w25_back_r ) );
    var validGroupValidButton = DuAEF.DuScriptUI.addButton( validGroup, "OK", DuAEF.DuBinary.toFile( w25_check_g ), "OK", DuAEF.DuBinary.toFile( w25_check_r ) );

    validGroupValidButton.onClick = function()
    {
        dialog.accepted = true;
        dialog.hide();
        dialog.onAccept();
    };
    validGroupCancelButton.onClick = function()
    {
        dialog.hide();
    };

    return dialog;
}
// ==================== |-----------------------| ====================
// ==================== | DuScriptUISelectorLib | ====================
// ==================== |-----------------------| ====================


/**
 * @class
 * @name Selector
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A drop down selector.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addSelector} to create a Selector.<br />
 * The Selector inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {string} image - The path to the current image (or a PNG as a string representation)
 * @property {Image} icon - The Image currently displayed
 * @property {StaticText} label - The current text
 * @property {DuButton[]} items  - The buttons
 * @property {int} index  - The current index
 * @property {Selector~onChange} onChange  - The function to execute when the index changes.<br />
 * You can set your own function here, which must take no argument.<br />
 * The method is called after the index has changed.
 */

/**
 * The function to execute when the index changes.<br />
 * The method is called after the index has changed.
 * @callback Selector~onChange
 * @memberof Selector
 */

/**
 * Adds a new button to the selector
 * @method
 * @memberof Selector
 * @name addButton
 * @param {string} text - The text displayed by the button
 * @param {string} image - The icon, either a path to the file or a PNG represented as a string.
 * @param {string} helpTip - The help tip
 * @param {string} imageOver - The roll over icon, either a path to the file or a PNG represented as a string.
 */

/**
 * Removes all buttons from the selector
 * @method
 * @memberof Selector
 * @name removeAll
 */

/**
 * Changes the selection and the current index of the selector
 * @method
 * @memberof Selector
 * @name setCurrentIndex
 * @param {int} index - The new index
 */

/**
 * Creates a drop down selector, using image buttons
 * @memberof DuAEF.DuScriptUI
 * @param {Window|Panel|Group} container - The ScriptUI Object which will contain and display the selector.
 * @return {Selector} - The selector
 */
DuAEF.DuScriptUI.addSelector = function( container )
{
    //create main group
    var selector = container.add( 'group' );
    selector.orientation = 'row';
    selector.margins = 2;
    selector.spacing = 0;
    selector.alignment = [ 'fill', 'top' ];
    selector.alignChildren = [ 'center', 'center' ];
    DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );

    selector.addButton = function( text, image, helpTip, imageOver )
    {
        if ( !text ) text = '-';
        if ( !image ) image = '';
        if ( !helpTip ) helpTip = '';
        if ( !imageOver ) imageOver = '';

        if ( text != '' ) DuAEF.DuScriptUI.uiStrings.push( text );
        if ( helpTip != '' ) DuAEF.DuScriptUI.uiStrings.push( helpTip );
        text = tr( text );
        helpTip = tr( helpTip );

        var size = text.length * 7;
        if ( selector.label.minimumSize.width < size ) selector.label.minimumSize.width = size;

        var index = selector.items.length;
        selector.items.push( [ text, image, helpTip, imageOver ] );
        //add to popup
        var button = DuAEF.DuScriptUI.addButton( selector.popup.buttons, text, image, helpTip, imageOver );
        button.onClick = function()
        {
            selector.setCurrentIndex( index );
            selector.popup.hide();
        };
        if ( button.icon ) button.icon.alignment = [ 'left', 'center' ];
    }

    selector.removeAll = function()
    {
        selector.items = [];
        selector.setCurrentIndex( 0 );
        for ( var i = selector.popup.buttons.children.length - 1; i >= 0; i-- )
        {
            selector.popup.buttons.remove( selector.popup.buttons.children[ i ] );
        }
    }

    selector.setCurrentIndex = function( index )
    {
        if ( index < 0 ) return;
        if ( index >= selector.items.length ) return;

        var item = selector.items[ index ];

        if ( !item ) return;

        selector.image = item[ 1 ];
        if ( selector.image != '' )
        {
            selector.icon.image = selector.image;
            selector.icon.helpTip = item[ 2 ];
        }
        selector.label.helpTip = item[ 2 ];
        selector.label.text = item[ 0 ];
        selector.imageOver = item[ 3 ];

        selector.index = index;

        selector.onChange();
    }

    //the menu button
    selector.menuImage = DuAEF.DuBinary.toFile( w14_menu_m );
    selector.menuImageOver = DuAEF.DuBinary.toFile( w14_menu_l );
    if ( DuAEF.DuAE.App.hasFilesAndNetworkAccess ) selector.menuButton = selector.add( 'image', undefined, selector.menuImage );
    else selector.menuButton = selector.add( 'statictext', undefined, 'M' );
    selector.menuButton.alignment = [ 'left', 'center' ];

    //the image
    selector.image = '';
    selector.icon = selector.add( 'image' );
    selector.icon.alignment = [ 'left', 'center' ];

    //the text
    selector.label = selector.add( 'statictext', undefined, '' );
    selector.label.helpTip = '';
    selector.label.alignment = [ 'fill', 'center' ];

    //if not CS6, add fillers to be able to click anywhere on the button
    if ( DuAEF.DuAE.App.version.version > 11 )
    {
        selector.fillerR = selector.add( 'statictext', undefined, "" );
        selector.fillerR.alignment = [ 'fill', 'fill' ];
    }

    //the image over
    selector.imageOver = '';

    //create popup
    selector.popup = new Window( 'palette', '', undefined,
    {
        borderless: true
    } );
    selector.popup.margins = 2;
    selector.popup.spacing = 0;
    //DuAEF.DuScriptUI.setBackgroundColor(selector.popup,DuAEF.DuJS.Color.Colors.DARK_GREY);
    selector.popup.closeButton = DuAEF.DuScriptUI.addButton( selector.popup, "Cancel" );
    selector.popup.closeButton.onClick = function()
    {
        selector.popup.hide();
    };
    selector.popup.buttons = selector.popup.add( 'group' );
    selector.popup.buttons.orientation = 'column';
    selector.popup.buttons.margins = 0;
    selector.popup.buttons.spacing = 0;
    //Deactivate bugs on CS6, needs a try/catch
    selector.popup.onDeactivate = function()
    {
        try
        {
            selector.popup.hide();
        }
        catch ( e )
        {}
    };

    //add default button
    selector.items = [];
    selector.index = -1;


    selector.clicked = function( e )
    {
        var popup = false;

        if ( e.target === selector.menuButton ) popup = true;
        if ( e.altKey ) popup = true;

        if ( popup )
        {
            if ( DuAEF.DuAE.App.version.version < 11 || DuAEF.DuAE.App.version.version >= 12 )
            {
                var x = e.screenX - e.clientX;
                var y = e.screenY - e.clientY;
                selector.popup.location = [ x, y ];
            }
            selector.popup.show();
        }
        else
        {
            var index = selector.index;
            if ( index == selector.items.length - 1 ) index = 0;
            else index++;
            selector.setCurrentIndex( index );
        }
    }

    //mouse over
    selector.highlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();
        selector.menuButton.image = selector.menuImageOver;
        DuAEF.DuScriptUI.setTextColor( selector.label, DuAEF.DuJS.Color.Colors.VERY_LIGHT_GREY );
        DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.DARK_GREY );
        if ( selector.imageOver != '' ) selector.icon.image = selector.imageOver;
        DuAEF.DuScriptUI.highlightedControls.push( selector );
    }

    selector.dim = function( e )
    {
        selector.menuButton.image = selector.menuImage;
        DuAEF.DuScriptUI.setTextColor( selector.label, DuAEF.DuJS.Color.Colors.LIGHT_GREY );
        DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
        if ( selector.image != '' ) selector.icon.image = selector.image;
    }

    // Hack - CS6 Bugs on mouseover with images
    if ( DuAEF.DuAE.App.version.version >= 11 && DuAEF.DuAE.App.version.version < 12 )
    {
        selector.label.addEventListener( "mouseover", selector.highlight );
    }
    else
    {
        selector.addEventListener( "mouseover", selector.highlight );
    }
    selector.addEventListener( "click", selector.clicked, true );

    selector.onChange = function() {};

    return selector;
}

/**
 * @class
 * @name LayerSelector
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A drop down selector.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addLayerSelector} to create a Selector.<br />
 * The Selector inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {int} [index=0]  - The current layer index, 0 if None
 * @property {CompItem|null} [comp=null] - The composition linked to the selector.<br />
 * If set to null, the seletor will use the current active composition.
 * @property {boolean} [selectedOnly=false] - True to list only selected layers in the composition
 * @property {Selector~onChange} onChange  - The function to execute when the index changes.<br />
 * You can set your own function here, which must take no argument.<br />
 * The method is called after the index has changed.
 */

/**
 * The function to execute when the index changes.<br />
 * The method is called after the index has changed.
 * @callback LayerSelector~onChange
 * @memberof LayerSelector
 */

/**
 * Changes the selection and the current layer index of the selector
 * @method
 * @memberof LayerSelector
 * @name setCurrentIndex
 * @param {int} index - The new layer index
 */

/**
 * Force the refresh of the layer list
 * @method
 * @memberof LayerSelector
 * @name refresh
 */

/**
 * Creates a drop down selector for layers
 * @memberof DuAEF.DuScriptUI
 * @param {Window|Panel|Group} container - The ScriptUI Object which will contain and display the selector.
 * @return {Selector} - The selector
 */
DuAEF.DuScriptUI.addLayerSelector = function( container )
{
    //create main group
    var selector = container.add( 'group' );
    selector.orientation = 'row';
    selector.margins = 2;
    selector.spacing = 5;
    selector.alignment = [ 'fill', 'top' ];
    selector.mainGroup = selector.add( 'group' );
    selector.mainGroup.orientation = 'row';
    selector.mainGroup.margins = 0;
    selector.mainGroup.spacing = 5;
    selector.mainGroup.alignment = [ 'fill', 'fill' ];
    selector.mainGroup.alignChildren = [ 'center', 'center' ];
    DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );

    //init
    selector.index = 0;
    selector.comp = null;
    selector.selectedOnly = false;
    selector.pauseRefresh = false;

    var cs6 = DuAEF.DuAE.App.version.version < 12;

    //CS6
    if ( cs6 )
    {
        //the menu button
        selector.menuImage = DuAEF.DuBinary.toFile( w14_layers_m );
        selector.menuButton = selector.mainGroup.add( 'image', undefined, selector.menuImage );
        selector.menuButton.alignment = [ 'left', 'center' ];

        //the dropdownlist
        selector.popup = {};
        selector.popup.list = selector.mainGroup.add( 'dropdownlist' );
        selector.popup.list.alignment = [ 'fill', 'center' ];

        //the refresh button
        selector.refreshImage = DuAEF.DuBinary.toFile( w14_update_m );
        selector.refreshImageOver = DuAEF.DuBinary.toFile( w14_update_l );
        selector.refreshButton = selector.add( 'image', undefined, selector.refreshImage );
        selector.refreshButton.alignment = [ 'right', 'center' ];
    }
    else
    {
        //the menu button
        selector.menuImage = DuAEF.DuBinary.toFile( w14_layers_m );
        selector.menuImageOver = DuAEF.DuBinary.toFile( w14_layers_l );
        if ( DuAEF.DuAE.App.hasFilesAndNetworkAccess ) selector.menuButton = selector.mainGroup.add( 'image', undefined, selector.menuImage );
        else selector.menuButton = selector.mainGroup.add( 'statictext', undefined, 'L' );
        selector.menuButton.alignment = [ 'left', 'center' ];

        //the text
        selector.label = selector.mainGroup.add( 'statictext', undefined, 'None' );
        selector.label.helpTip = '';
        selector.label.alignment = [ 'fill', 'center' ];

        //create popup
        selector.popup = new Window( 'palette', '', undefined,
        {
            borderless: true
        } );
        selector.popup.margins = 2;
        selector.popup.spacing = 0;
        DuAEF.DuScriptUI.setBackgroundColor( selector.popup, DuAEF.DuJS.Color.Colors.DARK_GREY );
        selector.popup.closeButton = DuAEF.DuScriptUI.addButton( selector.popup, "Cancel" );
        selector.popup.closeButton.onClick = function()
        {
            selector.popup.hide();
        };
        selector.popup.onDeactivate = function()
        {
            selector.popup.hide();
        };
        selector.popup.list = selector.popup.add( 'listbox', undefined );

        selector.clicked = function( e )
        {
            selector.refresh();

            selector.popup.list.minimumSize.width = selector.popup.list.maximumSize.width = selector.size.width;
            selector.popup.list.minimumSize.height = selector.popup.list.maximumSize.height = selector.size.height * 10;

            selector.popup.layout.layout();
            selector.popup.layout.resize();

            var x = e.screenX - e.clientX;
            var y = e.screenY - e.clientY;
            selector.popup.location = [ x, y ];

            selector.popup.show();
        }

        selector.mainGroup.addEventListener( "click", selector.clicked, true );
    }

    //the pick button
    selector.pickImage = DuAEF.DuBinary.toFile( w14_eyedropper_m );
    selector.pickImageOver = DuAEF.DuBinary.toFile( w14_eyedropper_l );
    if ( DuAEF.DuAE.App.hasFilesAndNetworkAccess ) selector.pickButton = selector.add( 'image', undefined, selector.pickImage );
    else selector.pickButton = selector.add( 'statictext', undefined, 'P' );
    selector.pickButton.alignment = [ 'right', 'center' ];

    selector.popup.list.add( 'item', "None" );
    selector.popup.list.selection = 0;

    selector.refresh = function()
    {
        var comp = selector.comp;
        if ( !comp ) comp = DuAEF.DuAE.Project.getActiveComp();
        if ( !comp ) return;

        selector.pauseRefresh = true;

        var layers;
        if ( selector.selectedOnly )
        {
            layers = DuAEF.DuAE.Layer.sortByIndex ( comp.selectedLayers );
        }
        else layers = comp.layers;

        var prevIndex = selector.index;
        selector.popup.list.removeAll();
        selector.popup.list.add( 'item', "None" );
        var it = new Iterator( layers );
        it.do( function( layer )
        {
            selector.popup.list.add( 'item', layer.index + ' | ' + layer.name );
        } );
        selector.setCurrentIndex( prevIndex );

        selector.pauseRefresh = false;
    };

    selector.setCurrentIndex = function( index )
    {
        if ( index < 0 ) return;

        selector.pauseRefresh = true;

        if ( index == 0 )
        {
            selector.popup.list.selection = 0;
        }
        else
        {
            for ( var i = 0, num = selector.popup.list.items.length; i < num; i++ )
            {
                var t = selector.popup.list.items[ i ].text;
                if ( index == parseInt( t.split( ' | ' )[ 0 ] ) )
                {
                    selector.popup.list.selection = i;
                    break;
                }
            }
        }

        if ( !cs6 )
        {
            if ( selector.popup.list.selection ) selector.label.text = selector.popup.list.selection.text;
            else
            {
                selector.popup.list.selection = 0;
                selector.label.text = "None";
            }
        }

        selector.index = index;

        selector.pauseRefresh = false;

        selector.onChange();
    };

    selector.popup.list.onChange = function()
    {
        if ( selector.pauseRefresh ) return;
        var t = selector.popup.list.selection.text;
        var index = parseInt( t.split( ' | ' )[ 0 ] );
        selector.setCurrentIndex( index );
        if ( !cs6 ) selector.popup.hide();
    };

    //mouse over
    selector.highlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();
        selector.menuButton.image = selector.menuImageOver;
        DuAEF.DuScriptUI.setTextColor( selector.label, DuAEF.DuJS.Color.Colors.VERY_LIGHT_GREY );
        DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.DARK_GREY );
        DuAEF.DuScriptUI.highlightedControls.push( selector );
    }

    selector.pickHighlight = function( e )
    {
        e.stopPropagation();
        DuAEF.DuScriptUI.dimControls();
        selector.pickButton.image = selector.pickImageOver;
        DuAEF.DuScriptUI.highlightedControls.push( selector );
    }

    selector.dim = function( e )
    {
        selector.menuButton.image = selector.menuImage;
        selector.pickButton.image = selector.pickImage;
        DuAEF.DuScriptUI.setTextColor( selector.label, DuAEF.DuJS.Color.Colors.LIGHT_GREY );
        DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );
    }

    selector.pick = function()
    {
        var layers = DuAEF.DuAE.Comp.getSelectedLayers();
        if ( layers.length > 0 ) selector.setCurrentIndex( layers[ 0 ].index );
    }

    selector.getLayer = function()
    {
        if ( selector.index < 1 ) return null;
        var comp = selector.comp;
        if ( !comp ) comp = DuAEF.DuAE.Project.getActiveComp();
        if ( !comp ) return null;
        try
        {
            alert(selector.index);
            return comp.layer( selector.index )
        }
        catch ( e )
        {
            return null
        };
    }

    // Hack - CS6 Bugs on mouseover with images
    if ( DuAEF.DuAE.App.version.version >= 11 && DuAEF.DuAE.App.version.version < 12 )
    {
        selector.refreshButton.addEventListener( "mousedown", selector.refresh, false );
    }
    else
    {
        selector.mainGroup.addEventListener( "mouseover", selector.highlight );
        selector.pickButton.addEventListener( "mouseover", selector.pickHighlight );
    }

    selector.pickButton.addEventListener( "click", selector.pick );

    selector.onChange = function() {};

    selector.refresh();

    return selector;
}


/**
 * @class
 * @name CompSelector
 * @classdesc For use with {@link DuAEF.DuScriptUI}.<br />
 * A drop down selector.<br />
 * This is not a real class, and cannot be instanciated.<br />
 * Use {@link DuAEF.DuScriptUI.addCompSelector} to create a Selector.<br />
 * The Selector inherits the Group object from ScriptUI and has all of its properties and methods.
 * @property {int} [id=0]  - The current compitem id, 0 if None
 * @property {CompItem[]} [comps] - The compositions listed in the selector.
 * @property {Selector~onChange} onChange  - The function to execute when the index changes.<br />
 * You can set your own function here, which must take no argument.<br />
 * The method is called after the index has changed.
 * @property {Selector~filterComps} filterComps - A function which gets the comps to set in the selector.<br />
 * The default function will get all the comps in the project,<br />
 * You can set your own function here, which must take no argument.<br />
 * The function must return an array of CompItem.
 */

/**
 * The function to execute when the index changes.<br />
 * The method is called after the index has changed.
 * @callback CompSelector~onChange
 * @memberof CompSelector
 */


/**
 * A function which gets the comps to set in the selector.<br />
 * The default function will get all the comps in the project,<br />
 * assign another function to this callback if you need to filter these comps.<br />
 * The function must return an array of CompItem.
 * @callback CompSelector~filterComps
 * @memberof CompSelector
 * @return {CompItem[]} The compositions to set in the selector.
 */

/**
 * Changes the selection and the current comp id of the selector
 * @method
 * @memberof CompSelector
 * @name setCurrentId
 * @param {int} index - The new comp id
 */

/**
 * Sets the comp list
 * @method
 * @memberof CompSelector
 * @name setComps
 * @param {CompItem[]} [comps] - The list of compositions. By default, will use {@link CompSelector.filterComps()} to get the comps.
 */

/**
 * Gets the selected comp
 * @method
 * @memberof CompSelector
 * @name getComp
 * @return {CompItem|null} the selected comp
 */

/**
 * Creates a drop down selector for compositions
 * @memberof DuAEF.DuScriptUI
 * @param {Window|Panel|Group} container - The ScriptUI Object which will contain and display the selector.
 * @return {CompSelector} - The selector
 */
DuAEF.DuScriptUI.addCompSelector = function( container )
{
    //create main group
    var selector = container.add( 'group' );
    selector.orientation = 'row';
    selector.margins = 2;
    selector.spacing = 5;
    selector.alignment = [ 'fill', 'top' ];
    selector.mainGroup = selector.add( 'group' );
    selector.mainGroup.orientation = 'row';
    selector.mainGroup.margins = 0;
    selector.mainGroup.spacing = 5;
    selector.mainGroup.alignment = [ 'fill', 'fill' ];
    selector.mainGroup.alignChildren = [ 'center', 'center' ];
    DuAEF.DuScriptUI.setBackgroundColor( selector, DuAEF.DuJS.Color.Colors.VERY_DARK_GREY );

    //init
    selector.id = 0;
    selector.comp = null;
    selector.selectedOnly = false;
    selector.pauseRefresh = false;

    var cs6 = DuAEF.DuAE.App.version.version >= 11 && DuAEF.DuAE.App.version.version < 12;

    //CS6
    if ( cs6 )
    {
        //the menu button
        selector.menuImage = DuAEF.DuBinary.toFile( w14_comp_m );
        selector.menuButton = selector.mainGroup.add( 'image', undefined, selector.menuImage );
        selector.menuButton.alignment = [ 'left', 'center' ];

        //the dropdownlist
        selector.popup = {};
        selector.popup.list = selector.mainGroup.add( 'dropdownlist' );
        selector.popup.list.alignment = [ 'fill', 'center' ];
    }
    else
    {
        //the menu button
        if ( DuAEF.DuAE.App.hasFilesAndNetworkAccess )
        {
            selector.menuImage = DuAEF.DuBinary.toFile( w14_comp_m );
            selector.menuImageOver = DuAEF.DuBinary.toFile( w14_comp_l );
            selector.menuButton = selector.mainGroup.add( 'image', undefined, selector.menuImage );
            selector.menuButton.alignment = [ 'left', 'center' ];
        }


        //the text
        selector.label = selector.mainGroup.add( 'statictext', undefined, 'None' );
        selector.label.helpTip = '';
        selector.label.alignment = [ 'fill', 'center' ];

        //create popup
        selector.popup = new Window( 'palette', '', undefined,
        {
            borderless: true
        } );
        selector.popup.margins = 2;
        selector.popup.spacing = 0;
        DuAEF.DuScriptUI.setBackgroundColor( selector.popup, DuAEF.DuJS.Color.Colors.DARK_GREY );
        selector.popup.closeButton = DuAEF.DuScriptUI.addButton( selector.popup, "Cancel" );
        selector.popup.closeButton.onClick = function()
        {
            selector.popup.hide();
        };
        selector.popup.onDeactivate = function()
        {
            selector.popup.hide();
        };
        selector.popup.list = selector.popup.add( 'listbox', undefined );

        selector.clicked = function( e )
        {
            selector.popup.list.minimumSize.width = selector.popup.list.maximumSize.width = selector.size.width;
            selector.popup.list.minimumSize.height = selector.popup.list.maximumSize.height = selector.size.height * 10;

            selector.popup.layout.layout();
            selector.popup.layout.resize();

            var x = e.screenX - e.clientX;
            var y = e.screenY - e.clientY;
            selector.popup.location = [ x, y ];

            selector.popup.show();
        }
    }

    //the pick & refresh buttons
    selector.pickImage = DuAEF.DuBinary.toFile( w14_eyedropper_m );
    selector.pickImageOver = DuAEF.DuBinary.toFile( w14_eyedropper_l );
    if ( DuAEF.DuAE.App.hasFilesAndNetworkAccess ) selector.pickButton = selector.add( 'image', undefined, selector.pickImage );
    else selector.pickButton = selector.add( 'statictext', undefined, 'P' );
    selector.pickButton.alignment = [ 'right', 'center' ];

    //the refresh button
    selec