mirror of
https://github.com/Pax1601/DCSOlympus.git
synced 2025-10-29 16:56:34 +00:00
16284 lines
3.3 MiB
16284 lines
3.3 MiB
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
||
/* @preserve
|
||
* Leaflet 1.9.3, a JS library for interactive maps. https://leafletjs.com
|
||
* (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade
|
||
*/
|
||
|
||
(function (global, factory) {
|
||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.leaflet = {}));
|
||
})(this, (function (exports) { 'use strict';
|
||
|
||
var version = "1.9.3";
|
||
|
||
/*
|
||
* @namespace Util
|
||
*
|
||
* Various utility functions, used by Leaflet internally.
|
||
*/
|
||
|
||
// @function extend(dest: Object, src?: Object): Object
|
||
// Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.
|
||
function extend(dest) {
|
||
var i, j, len, src;
|
||
|
||
for (j = 1, len = arguments.length; j < len; j++) {
|
||
src = arguments[j];
|
||
for (i in src) {
|
||
dest[i] = src[i];
|
||
}
|
||
}
|
||
return dest;
|
||
}
|
||
|
||
// @function create(proto: Object, properties?: Object): Object
|
||
// Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)
|
||
var create$2 = Object.create || (function () {
|
||
function F() {}
|
||
return function (proto) {
|
||
F.prototype = proto;
|
||
return new F();
|
||
};
|
||
})();
|
||
|
||
// @function bind(fn: Function, …): Function
|
||
// Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
|
||
// Has a `L.bind()` shortcut.
|
||
function bind(fn, obj) {
|
||
var slice = Array.prototype.slice;
|
||
|
||
if (fn.bind) {
|
||
return fn.bind.apply(fn, slice.call(arguments, 1));
|
||
}
|
||
|
||
var args = slice.call(arguments, 2);
|
||
|
||
return function () {
|
||
return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);
|
||
};
|
||
}
|
||
|
||
// @property lastId: Number
|
||
// Last unique ID used by [`stamp()`](#util-stamp)
|
||
var lastId = 0;
|
||
|
||
// @function stamp(obj: Object): Number
|
||
// Returns the unique ID of an object, assigning it one if it doesn't have it.
|
||
function stamp(obj) {
|
||
if (!('_leaflet_id' in obj)) {
|
||
obj['_leaflet_id'] = ++lastId;
|
||
}
|
||
return obj._leaflet_id;
|
||
}
|
||
|
||
// @function throttle(fn: Function, time: Number, context: Object): Function
|
||
// Returns a function which executes function `fn` with the given scope `context`
|
||
// (so that the `this` keyword refers to `context` inside `fn`'s code). The function
|
||
// `fn` will be called no more than one time per given amount of `time`. The arguments
|
||
// received by the bound function will be any arguments passed when binding the
|
||
// function, followed by any arguments passed when invoking the bound function.
|
||
// Has an `L.throttle` shortcut.
|
||
function throttle(fn, time, context) {
|
||
var lock, args, wrapperFn, later;
|
||
|
||
later = function () {
|
||
// reset lock and call if queued
|
||
lock = false;
|
||
if (args) {
|
||
wrapperFn.apply(context, args);
|
||
args = false;
|
||
}
|
||
};
|
||
|
||
wrapperFn = function () {
|
||
if (lock) {
|
||
// called too soon, queue to call later
|
||
args = arguments;
|
||
|
||
} else {
|
||
// call and lock until later
|
||
fn.apply(context, arguments);
|
||
setTimeout(later, time);
|
||
lock = true;
|
||
}
|
||
};
|
||
|
||
return wrapperFn;
|
||
}
|
||
|
||
// @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number
|
||
// Returns the number `num` modulo `range` in such a way so it lies within
|
||
// `range[0]` and `range[1]`. The returned value will be always smaller than
|
||
// `range[1]` unless `includeMax` is set to `true`.
|
||
function wrapNum(x, range, includeMax) {
|
||
var max = range[1],
|
||
min = range[0],
|
||
d = max - min;
|
||
return x === max && includeMax ? x : ((x - min) % d + d) % d + min;
|
||
}
|
||
|
||
// @function falseFn(): Function
|
||
// Returns a function which always returns `false`.
|
||
function falseFn() { return false; }
|
||
|
||
// @function formatNum(num: Number, precision?: Number|false): Number
|
||
// Returns the number `num` rounded with specified `precision`.
|
||
// The default `precision` value is 6 decimal places.
|
||
// `false` can be passed to skip any processing (can be useful to avoid round-off errors).
|
||
function formatNum(num, precision) {
|
||
if (precision === false) { return num; }
|
||
var pow = Math.pow(10, precision === undefined ? 6 : precision);
|
||
return Math.round(num * pow) / pow;
|
||
}
|
||
|
||
// @function trim(str: String): String
|
||
// Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
|
||
function trim(str) {
|
||
return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
|
||
}
|
||
|
||
// @function splitWords(str: String): String[]
|
||
// Trims and splits the string on whitespace and returns the array of parts.
|
||
function splitWords(str) {
|
||
return trim(str).split(/\s+/);
|
||
}
|
||
|
||
// @function setOptions(obj: Object, options: Object): Object
|
||
// Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.
|
||
function setOptions(obj, options) {
|
||
if (!Object.prototype.hasOwnProperty.call(obj, 'options')) {
|
||
obj.options = obj.options ? create$2(obj.options) : {};
|
||
}
|
||
for (var i in options) {
|
||
obj.options[i] = options[i];
|
||
}
|
||
return obj.options;
|
||
}
|
||
|
||
// @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String
|
||
// Converts an object into a parameter URL string, e.g. `{a: "foo", b: "bar"}`
|
||
// translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will
|
||
// be appended at the end. If `uppercase` is `true`, the parameter names will
|
||
// be uppercased (e.g. `'?A=foo&B=bar'`)
|
||
function getParamString(obj, existingUrl, uppercase) {
|
||
var params = [];
|
||
for (var i in obj) {
|
||
params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
|
||
}
|
||
return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
|
||
}
|
||
|
||
var templateRe = /\{ *([\w_ -]+) *\}/g;
|
||
|
||
// @function template(str: String, data: Object): String
|
||
// Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`
|
||
// and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string
|
||
// `('Hello foo, bar')`. You can also specify functions instead of strings for
|
||
// data values — they will be evaluated passing `data` as an argument.
|
||
function template(str, data) {
|
||
return str.replace(templateRe, function (str, key) {
|
||
var value = data[key];
|
||
|
||
if (value === undefined) {
|
||
throw new Error('No value provided for variable ' + str);
|
||
|
||
} else if (typeof value === 'function') {
|
||
value = value(data);
|
||
}
|
||
return value;
|
||
});
|
||
}
|
||
|
||
// @function isArray(obj): Boolean
|
||
// Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)
|
||
var isArray = Array.isArray || function (obj) {
|
||
return (Object.prototype.toString.call(obj) === '[object Array]');
|
||
};
|
||
|
||
// @function indexOf(array: Array, el: Object): Number
|
||
// Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
|
||
function indexOf(array, el) {
|
||
for (var i = 0; i < array.length; i++) {
|
||
if (array[i] === el) { return i; }
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
// @property emptyImageUrl: String
|
||
// Data URI string containing a base64-encoded empty GIF image.
|
||
// Used as a hack to free memory from unused images on WebKit-powered
|
||
// mobile devices (by setting image `src` to this string).
|
||
var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
|
||
|
||
// inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
||
|
||
function getPrefixed(name) {
|
||
return window['webkit' + name] || window['moz' + name] || window['ms' + name];
|
||
}
|
||
|
||
var lastTime = 0;
|
||
|
||
// fallback for IE 7-8
|
||
function timeoutDefer(fn) {
|
||
var time = +new Date(),
|
||
timeToCall = Math.max(0, 16 - (time - lastTime));
|
||
|
||
lastTime = time + timeToCall;
|
||
return window.setTimeout(fn, timeToCall);
|
||
}
|
||
|
||
var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;
|
||
var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||
|
||
getPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };
|
||
|
||
// @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number
|
||
// Schedules `fn` to be executed when the browser repaints. `fn` is bound to
|
||
// `context` if given. When `immediate` is set, `fn` is called immediately if
|
||
// the browser doesn't have native support for
|
||
// [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),
|
||
// otherwise it's delayed. Returns a request ID that can be used to cancel the request.
|
||
function requestAnimFrame(fn, context, immediate) {
|
||
if (immediate && requestFn === timeoutDefer) {
|
||
fn.call(context);
|
||
} else {
|
||
return requestFn.call(window, bind(fn, context));
|
||
}
|
||
}
|
||
|
||
// @function cancelAnimFrame(id: Number): undefined
|
||
// Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).
|
||
function cancelAnimFrame(id) {
|
||
if (id) {
|
||
cancelFn.call(window, id);
|
||
}
|
||
}
|
||
|
||
var Util = {
|
||
__proto__: null,
|
||
extend: extend,
|
||
create: create$2,
|
||
bind: bind,
|
||
get lastId () { return lastId; },
|
||
stamp: stamp,
|
||
throttle: throttle,
|
||
wrapNum: wrapNum,
|
||
falseFn: falseFn,
|
||
formatNum: formatNum,
|
||
trim: trim,
|
||
splitWords: splitWords,
|
||
setOptions: setOptions,
|
||
getParamString: getParamString,
|
||
template: template,
|
||
isArray: isArray,
|
||
indexOf: indexOf,
|
||
emptyImageUrl: emptyImageUrl,
|
||
requestFn: requestFn,
|
||
cancelFn: cancelFn,
|
||
requestAnimFrame: requestAnimFrame,
|
||
cancelAnimFrame: cancelAnimFrame
|
||
};
|
||
|
||
// @class Class
|
||
// @aka L.Class
|
||
|
||
// @section
|
||
// @uninheritable
|
||
|
||
// Thanks to John Resig and Dean Edwards for inspiration!
|
||
|
||
function Class() {}
|
||
|
||
Class.extend = function (props) {
|
||
|
||
// @function extend(props: Object): Function
|
||
// [Extends the current class](#class-inheritance) given the properties to be included.
|
||
// Returns a Javascript function that is a class constructor (to be called with `new`).
|
||
var NewClass = function () {
|
||
|
||
setOptions(this);
|
||
|
||
// call the constructor
|
||
if (this.initialize) {
|
||
this.initialize.apply(this, arguments);
|
||
}
|
||
|
||
// call all constructor hooks
|
||
this.callInitHooks();
|
||
};
|
||
|
||
var parentProto = NewClass.__super__ = this.prototype;
|
||
|
||
var proto = create$2(parentProto);
|
||
proto.constructor = NewClass;
|
||
|
||
NewClass.prototype = proto;
|
||
|
||
// inherit parent's statics
|
||
for (var i in this) {
|
||
if (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {
|
||
NewClass[i] = this[i];
|
||
}
|
||
}
|
||
|
||
// mix static properties into the class
|
||
if (props.statics) {
|
||
extend(NewClass, props.statics);
|
||
}
|
||
|
||
// mix includes into the prototype
|
||
if (props.includes) {
|
||
checkDeprecatedMixinEvents(props.includes);
|
||
extend.apply(null, [proto].concat(props.includes));
|
||
}
|
||
|
||
// mix given properties into the prototype
|
||
extend(proto, props);
|
||
delete proto.statics;
|
||
delete proto.includes;
|
||
|
||
// merge options
|
||
if (proto.options) {
|
||
proto.options = parentProto.options ? create$2(parentProto.options) : {};
|
||
extend(proto.options, props.options);
|
||
}
|
||
|
||
proto._initHooks = [];
|
||
|
||
// add method for calling all hooks
|
||
proto.callInitHooks = function () {
|
||
|
||
if (this._initHooksCalled) { return; }
|
||
|
||
if (parentProto.callInitHooks) {
|
||
parentProto.callInitHooks.call(this);
|
||
}
|
||
|
||
this._initHooksCalled = true;
|
||
|
||
for (var i = 0, len = proto._initHooks.length; i < len; i++) {
|
||
proto._initHooks[i].call(this);
|
||
}
|
||
};
|
||
|
||
return NewClass;
|
||
};
|
||
|
||
|
||
// @function include(properties: Object): this
|
||
// [Includes a mixin](#class-includes) into the current class.
|
||
Class.include = function (props) {
|
||
var parentOptions = this.prototype.options;
|
||
extend(this.prototype, props);
|
||
if (props.options) {
|
||
this.prototype.options = parentOptions;
|
||
this.mergeOptions(props.options);
|
||
}
|
||
return this;
|
||
};
|
||
|
||
// @function mergeOptions(options: Object): this
|
||
// [Merges `options`](#class-options) into the defaults of the class.
|
||
Class.mergeOptions = function (options) {
|
||
extend(this.prototype.options, options);
|
||
return this;
|
||
};
|
||
|
||
// @function addInitHook(fn: Function): this
|
||
// Adds a [constructor hook](#class-constructor-hooks) to the class.
|
||
Class.addInitHook = function (fn) { // (Function) || (String, args...)
|
||
var args = Array.prototype.slice.call(arguments, 1);
|
||
|
||
var init = typeof fn === 'function' ? fn : function () {
|
||
this[fn].apply(this, args);
|
||
};
|
||
|
||
this.prototype._initHooks = this.prototype._initHooks || [];
|
||
this.prototype._initHooks.push(init);
|
||
return this;
|
||
};
|
||
|
||
function checkDeprecatedMixinEvents(includes) {
|
||
/* global L: true */
|
||
if (typeof L === 'undefined' || !L || !L.Mixin) { return; }
|
||
|
||
includes = isArray(includes) ? includes : [includes];
|
||
|
||
for (var i = 0; i < includes.length; i++) {
|
||
if (includes[i] === L.Mixin.Events) {
|
||
console.warn('Deprecated include of L.Mixin.Events: ' +
|
||
'this property will be removed in future releases, ' +
|
||
'please inherit from L.Evented instead.', new Error().stack);
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
* @class Evented
|
||
* @aka L.Evented
|
||
* @inherits Class
|
||
*
|
||
* A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* map.on('click', function(e) {
|
||
* alert(e.latlng);
|
||
* } );
|
||
* ```
|
||
*
|
||
* Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:
|
||
*
|
||
* ```js
|
||
* function onClick(e) { ... }
|
||
*
|
||
* map.on('click', onClick);
|
||
* map.off('click', onClick);
|
||
* ```
|
||
*/
|
||
|
||
var Events = {
|
||
/* @method on(type: String, fn: Function, context?: Object): this
|
||
* Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).
|
||
*
|
||
* @alternative
|
||
* @method on(eventMap: Object): this
|
||
* Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
|
||
*/
|
||
on: function (types, fn, context) {
|
||
|
||
// types can be a map of types/handlers
|
||
if (typeof types === 'object') {
|
||
for (var type in types) {
|
||
// we don't process space-separated events here for performance;
|
||
// it's a hot path since Layer uses the on(obj) syntax
|
||
this._on(type, types[type], fn);
|
||
}
|
||
|
||
} else {
|
||
// types can be a string of space-separated words
|
||
types = splitWords(types);
|
||
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
this._on(types[i], fn, context);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
/* @method off(type: String, fn?: Function, context?: Object): this
|
||
* Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.
|
||
*
|
||
* @alternative
|
||
* @method off(eventMap: Object): this
|
||
* Removes a set of type/listener pairs.
|
||
*
|
||
* @alternative
|
||
* @method off: this
|
||
* Removes all listeners to all events on the object. This includes implicitly attached events.
|
||
*/
|
||
off: function (types, fn, context) {
|
||
|
||
if (!arguments.length) {
|
||
// clear all listeners if called without arguments
|
||
delete this._events;
|
||
|
||
} else if (typeof types === 'object') {
|
||
for (var type in types) {
|
||
this._off(type, types[type], fn);
|
||
}
|
||
|
||
} else {
|
||
types = splitWords(types);
|
||
|
||
var removeAll = arguments.length === 1;
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
if (removeAll) {
|
||
this._off(types[i]);
|
||
} else {
|
||
this._off(types[i], fn, context);
|
||
}
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// attach listener (without syntactic sugar now)
|
||
_on: function (type, fn, context, _once) {
|
||
if (typeof fn !== 'function') {
|
||
console.warn('wrong listener type: ' + typeof fn);
|
||
return;
|
||
}
|
||
|
||
// check if fn already there
|
||
if (this._listens(type, fn, context) !== false) {
|
||
return;
|
||
}
|
||
|
||
if (context === this) {
|
||
// Less memory footprint.
|
||
context = undefined;
|
||
}
|
||
|
||
var newListener = {fn: fn, ctx: context};
|
||
if (_once) {
|
||
newListener.once = true;
|
||
}
|
||
|
||
this._events = this._events || {};
|
||
this._events[type] = this._events[type] || [];
|
||
this._events[type].push(newListener);
|
||
},
|
||
|
||
_off: function (type, fn, context) {
|
||
var listeners,
|
||
i,
|
||
len;
|
||
|
||
if (!this._events) {
|
||
return;
|
||
}
|
||
|
||
listeners = this._events[type];
|
||
if (!listeners) {
|
||
return;
|
||
}
|
||
|
||
if (arguments.length === 1) { // remove all
|
||
if (this._firingCount) {
|
||
// Set all removed listeners to noop
|
||
// so they are not called if remove happens in fire
|
||
for (i = 0, len = listeners.length; i < len; i++) {
|
||
listeners[i].fn = falseFn;
|
||
}
|
||
}
|
||
// clear all listeners for a type if function isn't specified
|
||
delete this._events[type];
|
||
return;
|
||
}
|
||
|
||
if (typeof fn !== 'function') {
|
||
console.warn('wrong listener type: ' + typeof fn);
|
||
return;
|
||
}
|
||
|
||
// find fn and remove it
|
||
var index = this._listens(type, fn, context);
|
||
if (index !== false) {
|
||
var listener = listeners[index];
|
||
if (this._firingCount) {
|
||
// set the removed listener to noop so that's not called if remove happens in fire
|
||
listener.fn = falseFn;
|
||
|
||
/* copy array in case events are being fired */
|
||
this._events[type] = listeners = listeners.slice();
|
||
}
|
||
listeners.splice(index, 1);
|
||
}
|
||
},
|
||
|
||
// @method fire(type: String, data?: Object, propagate?: Boolean): this
|
||
// Fires an event of the specified type. You can optionally provide a data
|
||
// object — the first argument of the listener function will contain its
|
||
// properties. The event can optionally be propagated to event parents.
|
||
fire: function (type, data, propagate) {
|
||
if (!this.listens(type, propagate)) { return this; }
|
||
|
||
var event = extend({}, data, {
|
||
type: type,
|
||
target: this,
|
||
sourceTarget: data && data.sourceTarget || this
|
||
});
|
||
|
||
if (this._events) {
|
||
var listeners = this._events[type];
|
||
if (listeners) {
|
||
this._firingCount = (this._firingCount + 1) || 1;
|
||
for (var i = 0, len = listeners.length; i < len; i++) {
|
||
var l = listeners[i];
|
||
// off overwrites l.fn, so we need to copy fn to a var
|
||
var fn = l.fn;
|
||
if (l.once) {
|
||
this.off(type, fn, l.ctx);
|
||
}
|
||
fn.call(l.ctx || this, event);
|
||
}
|
||
|
||
this._firingCount--;
|
||
}
|
||
}
|
||
|
||
if (propagate) {
|
||
// propagate the event to parents (set with addEventParent)
|
||
this._propagateEvent(event);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method listens(type: String, propagate?: Boolean): Boolean
|
||
// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean
|
||
// Returns `true` if a particular event type has any listeners attached to it.
|
||
// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.
|
||
listens: function (type, fn, context, propagate) {
|
||
if (typeof type !== 'string') {
|
||
console.warn('"string" type argument expected');
|
||
}
|
||
|
||
// we don't overwrite the input `fn` value, because we need to use it for propagation
|
||
var _fn = fn;
|
||
if (typeof fn !== 'function') {
|
||
propagate = !!fn;
|
||
_fn = undefined;
|
||
context = undefined;
|
||
}
|
||
|
||
var listeners = this._events && this._events[type];
|
||
if (listeners && listeners.length) {
|
||
if (this._listens(type, _fn, context) !== false) {
|
||
return true;
|
||
}
|
||
}
|
||
|
||
if (propagate) {
|
||
// also check parents for listeners if event propagates
|
||
for (var id in this._eventParents) {
|
||
if (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }
|
||
}
|
||
}
|
||
return false;
|
||
},
|
||
|
||
// returns the index (number) or false
|
||
_listens: function (type, fn, context) {
|
||
if (!this._events) {
|
||
return false;
|
||
}
|
||
|
||
var listeners = this._events[type] || [];
|
||
if (!fn) {
|
||
return !!listeners.length;
|
||
}
|
||
|
||
if (context === this) {
|
||
// Less memory footprint.
|
||
context = undefined;
|
||
}
|
||
|
||
for (var i = 0, len = listeners.length; i < len; i++) {
|
||
if (listeners[i].fn === fn && listeners[i].ctx === context) {
|
||
return i;
|
||
}
|
||
}
|
||
return false;
|
||
|
||
},
|
||
|
||
// @method once(…): this
|
||
// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.
|
||
once: function (types, fn, context) {
|
||
|
||
// types can be a map of types/handlers
|
||
if (typeof types === 'object') {
|
||
for (var type in types) {
|
||
// we don't process space-separated events here for performance;
|
||
// it's a hot path since Layer uses the on(obj) syntax
|
||
this._on(type, types[type], fn, true);
|
||
}
|
||
|
||
} else {
|
||
// types can be a string of space-separated words
|
||
types = splitWords(types);
|
||
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
this._on(types[i], fn, context, true);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method addEventParent(obj: Evented): this
|
||
// Adds an event parent - an `Evented` that will receive propagated events
|
||
addEventParent: function (obj) {
|
||
this._eventParents = this._eventParents || {};
|
||
this._eventParents[stamp(obj)] = obj;
|
||
return this;
|
||
},
|
||
|
||
// @method removeEventParent(obj: Evented): this
|
||
// Removes an event parent, so it will stop receiving propagated events
|
||
removeEventParent: function (obj) {
|
||
if (this._eventParents) {
|
||
delete this._eventParents[stamp(obj)];
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_propagateEvent: function (e) {
|
||
for (var id in this._eventParents) {
|
||
this._eventParents[id].fire(e.type, extend({
|
||
layer: e.target,
|
||
propagatedFrom: e.target
|
||
}, e), true);
|
||
}
|
||
}
|
||
};
|
||
|
||
// aliases; we should ditch those eventually
|
||
|
||
// @method addEventListener(…): this
|
||
// Alias to [`on(…)`](#evented-on)
|
||
Events.addEventListener = Events.on;
|
||
|
||
// @method removeEventListener(…): this
|
||
// Alias to [`off(…)`](#evented-off)
|
||
|
||
// @method clearAllEventListeners(…): this
|
||
// Alias to [`off()`](#evented-off)
|
||
Events.removeEventListener = Events.clearAllEventListeners = Events.off;
|
||
|
||
// @method addOneTimeEventListener(…): this
|
||
// Alias to [`once(…)`](#evented-once)
|
||
Events.addOneTimeEventListener = Events.once;
|
||
|
||
// @method fireEvent(…): this
|
||
// Alias to [`fire(…)`](#evented-fire)
|
||
Events.fireEvent = Events.fire;
|
||
|
||
// @method hasEventListeners(…): Boolean
|
||
// Alias to [`listens(…)`](#evented-listens)
|
||
Events.hasEventListeners = Events.listens;
|
||
|
||
var Evented = Class.extend(Events);
|
||
|
||
/*
|
||
* @class Point
|
||
* @aka L.Point
|
||
*
|
||
* Represents a point with `x` and `y` coordinates in pixels.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var point = L.point(200, 300);
|
||
* ```
|
||
*
|
||
* All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:
|
||
*
|
||
* ```js
|
||
* map.panBy([200, 300]);
|
||
* map.panBy(L.point(200, 300));
|
||
* ```
|
||
*
|
||
* Note that `Point` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function Point(x, y, round) {
|
||
// @property x: Number; The `x` coordinate of the point
|
||
this.x = (round ? Math.round(x) : x);
|
||
// @property y: Number; The `y` coordinate of the point
|
||
this.y = (round ? Math.round(y) : y);
|
||
}
|
||
|
||
var trunc = Math.trunc || function (v) {
|
||
return v > 0 ? Math.floor(v) : Math.ceil(v);
|
||
};
|
||
|
||
Point.prototype = {
|
||
|
||
// @method clone(): Point
|
||
// Returns a copy of the current point.
|
||
clone: function () {
|
||
return new Point(this.x, this.y);
|
||
},
|
||
|
||
// @method add(otherPoint: Point): Point
|
||
// Returns the result of addition of the current and the given points.
|
||
add: function (point) {
|
||
// non-destructive, returns a new point
|
||
return this.clone()._add(toPoint(point));
|
||
},
|
||
|
||
_add: function (point) {
|
||
// destructive, used directly for performance in situations where it's safe to modify existing point
|
||
this.x += point.x;
|
||
this.y += point.y;
|
||
return this;
|
||
},
|
||
|
||
// @method subtract(otherPoint: Point): Point
|
||
// Returns the result of subtraction of the given point from the current.
|
||
subtract: function (point) {
|
||
return this.clone()._subtract(toPoint(point));
|
||
},
|
||
|
||
_subtract: function (point) {
|
||
this.x -= point.x;
|
||
this.y -= point.y;
|
||
return this;
|
||
},
|
||
|
||
// @method divideBy(num: Number): Point
|
||
// Returns the result of division of the current point by the given number.
|
||
divideBy: function (num) {
|
||
return this.clone()._divideBy(num);
|
||
},
|
||
|
||
_divideBy: function (num) {
|
||
this.x /= num;
|
||
this.y /= num;
|
||
return this;
|
||
},
|
||
|
||
// @method multiplyBy(num: Number): Point
|
||
// Returns the result of multiplication of the current point by the given number.
|
||
multiplyBy: function (num) {
|
||
return this.clone()._multiplyBy(num);
|
||
},
|
||
|
||
_multiplyBy: function (num) {
|
||
this.x *= num;
|
||
this.y *= num;
|
||
return this;
|
||
},
|
||
|
||
// @method scaleBy(scale: Point): Point
|
||
// Multiply each coordinate of the current point by each coordinate of
|
||
// `scale`. In linear algebra terms, multiply the point by the
|
||
// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)
|
||
// defined by `scale`.
|
||
scaleBy: function (point) {
|
||
return new Point(this.x * point.x, this.y * point.y);
|
||
},
|
||
|
||
// @method unscaleBy(scale: Point): Point
|
||
// Inverse of `scaleBy`. Divide each coordinate of the current point by
|
||
// each coordinate of `scale`.
|
||
unscaleBy: function (point) {
|
||
return new Point(this.x / point.x, this.y / point.y);
|
||
},
|
||
|
||
// @method round(): Point
|
||
// Returns a copy of the current point with rounded coordinates.
|
||
round: function () {
|
||
return this.clone()._round();
|
||
},
|
||
|
||
_round: function () {
|
||
this.x = Math.round(this.x);
|
||
this.y = Math.round(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method floor(): Point
|
||
// Returns a copy of the current point with floored coordinates (rounded down).
|
||
floor: function () {
|
||
return this.clone()._floor();
|
||
},
|
||
|
||
_floor: function () {
|
||
this.x = Math.floor(this.x);
|
||
this.y = Math.floor(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method ceil(): Point
|
||
// Returns a copy of the current point with ceiled coordinates (rounded up).
|
||
ceil: function () {
|
||
return this.clone()._ceil();
|
||
},
|
||
|
||
_ceil: function () {
|
||
this.x = Math.ceil(this.x);
|
||
this.y = Math.ceil(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method trunc(): Point
|
||
// Returns a copy of the current point with truncated coordinates (rounded towards zero).
|
||
trunc: function () {
|
||
return this.clone()._trunc();
|
||
},
|
||
|
||
_trunc: function () {
|
||
this.x = trunc(this.x);
|
||
this.y = trunc(this.y);
|
||
return this;
|
||
},
|
||
|
||
// @method distanceTo(otherPoint: Point): Number
|
||
// Returns the cartesian distance between the current and the given points.
|
||
distanceTo: function (point) {
|
||
point = toPoint(point);
|
||
|
||
var x = point.x - this.x,
|
||
y = point.y - this.y;
|
||
|
||
return Math.sqrt(x * x + y * y);
|
||
},
|
||
|
||
// @method equals(otherPoint: Point): Boolean
|
||
// Returns `true` if the given point has the same coordinates.
|
||
equals: function (point) {
|
||
point = toPoint(point);
|
||
|
||
return point.x === this.x &&
|
||
point.y === this.y;
|
||
},
|
||
|
||
// @method contains(otherPoint: Point): Boolean
|
||
// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).
|
||
contains: function (point) {
|
||
point = toPoint(point);
|
||
|
||
return Math.abs(point.x) <= Math.abs(this.x) &&
|
||
Math.abs(point.y) <= Math.abs(this.y);
|
||
},
|
||
|
||
// @method toString(): String
|
||
// Returns a string representation of the point for debugging purposes.
|
||
toString: function () {
|
||
return 'Point(' +
|
||
formatNum(this.x) + ', ' +
|
||
formatNum(this.y) + ')';
|
||
}
|
||
};
|
||
|
||
// @factory L.point(x: Number, y: Number, round?: Boolean)
|
||
// Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.
|
||
|
||
// @alternative
|
||
// @factory L.point(coords: Number[])
|
||
// Expects an array of the form `[x, y]` instead.
|
||
|
||
// @alternative
|
||
// @factory L.point(coords: Object)
|
||
// Expects a plain object of the form `{x: Number, y: Number}` instead.
|
||
function toPoint(x, y, round) {
|
||
if (x instanceof Point) {
|
||
return x;
|
||
}
|
||
if (isArray(x)) {
|
||
return new Point(x[0], x[1]);
|
||
}
|
||
if (x === undefined || x === null) {
|
||
return x;
|
||
}
|
||
if (typeof x === 'object' && 'x' in x && 'y' in x) {
|
||
return new Point(x.x, x.y);
|
||
}
|
||
return new Point(x, y, round);
|
||
}
|
||
|
||
/*
|
||
* @class Bounds
|
||
* @aka L.Bounds
|
||
*
|
||
* Represents a rectangular area in pixel coordinates.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var p1 = L.point(10, 10),
|
||
* p2 = L.point(40, 60),
|
||
* bounds = L.bounds(p1, p2);
|
||
* ```
|
||
*
|
||
* All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:
|
||
*
|
||
* ```js
|
||
* otherBounds.intersects([[10, 10], [40, 60]]);
|
||
* ```
|
||
*
|
||
* Note that `Bounds` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function Bounds(a, b) {
|
||
if (!a) { return; }
|
||
|
||
var points = b ? [a, b] : a;
|
||
|
||
for (var i = 0, len = points.length; i < len; i++) {
|
||
this.extend(points[i]);
|
||
}
|
||
}
|
||
|
||
Bounds.prototype = {
|
||
// @method extend(point: Point): this
|
||
// Extends the bounds to contain the given point.
|
||
|
||
// @alternative
|
||
// @method extend(otherBounds: Bounds): this
|
||
// Extend the bounds to contain the given bounds
|
||
extend: function (obj) {
|
||
var min2, max2;
|
||
if (!obj) { return this; }
|
||
|
||
if (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {
|
||
min2 = max2 = toPoint(obj);
|
||
} else {
|
||
obj = toBounds(obj);
|
||
min2 = obj.min;
|
||
max2 = obj.max;
|
||
|
||
if (!min2 || !max2) { return this; }
|
||
}
|
||
|
||
// @property min: Point
|
||
// The top left corner of the rectangle.
|
||
// @property max: Point
|
||
// The bottom right corner of the rectangle.
|
||
if (!this.min && !this.max) {
|
||
this.min = min2.clone();
|
||
this.max = max2.clone();
|
||
} else {
|
||
this.min.x = Math.min(min2.x, this.min.x);
|
||
this.max.x = Math.max(max2.x, this.max.x);
|
||
this.min.y = Math.min(min2.y, this.min.y);
|
||
this.max.y = Math.max(max2.y, this.max.y);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getCenter(round?: Boolean): Point
|
||
// Returns the center point of the bounds.
|
||
getCenter: function (round) {
|
||
return toPoint(
|
||
(this.min.x + this.max.x) / 2,
|
||
(this.min.y + this.max.y) / 2, round);
|
||
},
|
||
|
||
// @method getBottomLeft(): Point
|
||
// Returns the bottom-left point of the bounds.
|
||
getBottomLeft: function () {
|
||
return toPoint(this.min.x, this.max.y);
|
||
},
|
||
|
||
// @method getTopRight(): Point
|
||
// Returns the top-right point of the bounds.
|
||
getTopRight: function () { // -> Point
|
||
return toPoint(this.max.x, this.min.y);
|
||
},
|
||
|
||
// @method getTopLeft(): Point
|
||
// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).
|
||
getTopLeft: function () {
|
||
return this.min; // left, top
|
||
},
|
||
|
||
// @method getBottomRight(): Point
|
||
// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).
|
||
getBottomRight: function () {
|
||
return this.max; // right, bottom
|
||
},
|
||
|
||
// @method getSize(): Point
|
||
// Returns the size of the given bounds
|
||
getSize: function () {
|
||
return this.max.subtract(this.min);
|
||
},
|
||
|
||
// @method contains(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle contains the given one.
|
||
// @alternative
|
||
// @method contains(point: Point): Boolean
|
||
// Returns `true` if the rectangle contains the given point.
|
||
contains: function (obj) {
|
||
var min, max;
|
||
|
||
if (typeof obj[0] === 'number' || obj instanceof Point) {
|
||
obj = toPoint(obj);
|
||
} else {
|
||
obj = toBounds(obj);
|
||
}
|
||
|
||
if (obj instanceof Bounds) {
|
||
min = obj.min;
|
||
max = obj.max;
|
||
} else {
|
||
min = max = obj;
|
||
}
|
||
|
||
return (min.x >= this.min.x) &&
|
||
(max.x <= this.max.x) &&
|
||
(min.y >= this.min.y) &&
|
||
(max.y <= this.max.y);
|
||
},
|
||
|
||
// @method intersects(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle intersects the given bounds. Two bounds
|
||
// intersect if they have at least one point in common.
|
||
intersects: function (bounds) { // (Bounds) -> Boolean
|
||
bounds = toBounds(bounds);
|
||
|
||
var min = this.min,
|
||
max = this.max,
|
||
min2 = bounds.min,
|
||
max2 = bounds.max,
|
||
xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
|
||
yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
|
||
|
||
return xIntersects && yIntersects;
|
||
},
|
||
|
||
// @method overlaps(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle overlaps the given bounds. Two bounds
|
||
// overlap if their intersection is an area.
|
||
overlaps: function (bounds) { // (Bounds) -> Boolean
|
||
bounds = toBounds(bounds);
|
||
|
||
var min = this.min,
|
||
max = this.max,
|
||
min2 = bounds.min,
|
||
max2 = bounds.max,
|
||
xOverlaps = (max2.x > min.x) && (min2.x < max.x),
|
||
yOverlaps = (max2.y > min.y) && (min2.y < max.y);
|
||
|
||
return xOverlaps && yOverlaps;
|
||
},
|
||
|
||
// @method isValid(): Boolean
|
||
// Returns `true` if the bounds are properly initialized.
|
||
isValid: function () {
|
||
return !!(this.min && this.max);
|
||
},
|
||
|
||
|
||
// @method pad(bufferRatio: Number): Bounds
|
||
// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
|
||
// For example, a ratio of 0.5 extends the bounds by 50% in each direction.
|
||
// Negative values will retract the bounds.
|
||
pad: function (bufferRatio) {
|
||
var min = this.min,
|
||
max = this.max,
|
||
heightBuffer = Math.abs(min.x - max.x) * bufferRatio,
|
||
widthBuffer = Math.abs(min.y - max.y) * bufferRatio;
|
||
|
||
|
||
return toBounds(
|
||
toPoint(min.x - heightBuffer, min.y - widthBuffer),
|
||
toPoint(max.x + heightBuffer, max.y + widthBuffer));
|
||
},
|
||
|
||
|
||
// @method equals(otherBounds: Bounds): Boolean
|
||
// Returns `true` if the rectangle is equivalent to the given bounds.
|
||
equals: function (bounds) {
|
||
if (!bounds) { return false; }
|
||
|
||
bounds = toBounds(bounds);
|
||
|
||
return this.min.equals(bounds.getTopLeft()) &&
|
||
this.max.equals(bounds.getBottomRight());
|
||
},
|
||
};
|
||
|
||
|
||
// @factory L.bounds(corner1: Point, corner2: Point)
|
||
// Creates a Bounds object from two corners coordinate pairs.
|
||
// @alternative
|
||
// @factory L.bounds(points: Point[])
|
||
// Creates a Bounds object from the given array of points.
|
||
function toBounds(a, b) {
|
||
if (!a || a instanceof Bounds) {
|
||
return a;
|
||
}
|
||
return new Bounds(a, b);
|
||
}
|
||
|
||
/*
|
||
* @class LatLngBounds
|
||
* @aka L.LatLngBounds
|
||
*
|
||
* Represents a rectangular geographical area on a map.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var corner1 = L.latLng(40.712, -74.227),
|
||
* corner2 = L.latLng(40.774, -74.125),
|
||
* bounds = L.latLngBounds(corner1, corner2);
|
||
* ```
|
||
*
|
||
* All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:
|
||
*
|
||
* ```js
|
||
* map.fitBounds([
|
||
* [40.712, -74.227],
|
||
* [40.774, -74.125]
|
||
* ]);
|
||
* ```
|
||
*
|
||
* Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.
|
||
*
|
||
* Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])
|
||
if (!corner1) { return; }
|
||
|
||
var latlngs = corner2 ? [corner1, corner2] : corner1;
|
||
|
||
for (var i = 0, len = latlngs.length; i < len; i++) {
|
||
this.extend(latlngs[i]);
|
||
}
|
||
}
|
||
|
||
LatLngBounds.prototype = {
|
||
|
||
// @method extend(latlng: LatLng): this
|
||
// Extend the bounds to contain the given point
|
||
|
||
// @alternative
|
||
// @method extend(otherBounds: LatLngBounds): this
|
||
// Extend the bounds to contain the given bounds
|
||
extend: function (obj) {
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2, ne2;
|
||
|
||
if (obj instanceof LatLng) {
|
||
sw2 = obj;
|
||
ne2 = obj;
|
||
|
||
} else if (obj instanceof LatLngBounds) {
|
||
sw2 = obj._southWest;
|
||
ne2 = obj._northEast;
|
||
|
||
if (!sw2 || !ne2) { return this; }
|
||
|
||
} else {
|
||
return obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;
|
||
}
|
||
|
||
if (!sw && !ne) {
|
||
this._southWest = new LatLng(sw2.lat, sw2.lng);
|
||
this._northEast = new LatLng(ne2.lat, ne2.lng);
|
||
} else {
|
||
sw.lat = Math.min(sw2.lat, sw.lat);
|
||
sw.lng = Math.min(sw2.lng, sw.lng);
|
||
ne.lat = Math.max(ne2.lat, ne.lat);
|
||
ne.lng = Math.max(ne2.lng, ne.lng);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method pad(bufferRatio: Number): LatLngBounds
|
||
// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
|
||
// For example, a ratio of 0.5 extends the bounds by 50% in each direction.
|
||
// Negative values will retract the bounds.
|
||
pad: function (bufferRatio) {
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
|
||
widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
|
||
|
||
return new LatLngBounds(
|
||
new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
|
||
new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center point of the bounds.
|
||
getCenter: function () {
|
||
return new LatLng(
|
||
(this._southWest.lat + this._northEast.lat) / 2,
|
||
(this._southWest.lng + this._northEast.lng) / 2);
|
||
},
|
||
|
||
// @method getSouthWest(): LatLng
|
||
// Returns the south-west point of the bounds.
|
||
getSouthWest: function () {
|
||
return this._southWest;
|
||
},
|
||
|
||
// @method getNorthEast(): LatLng
|
||
// Returns the north-east point of the bounds.
|
||
getNorthEast: function () {
|
||
return this._northEast;
|
||
},
|
||
|
||
// @method getNorthWest(): LatLng
|
||
// Returns the north-west point of the bounds.
|
||
getNorthWest: function () {
|
||
return new LatLng(this.getNorth(), this.getWest());
|
||
},
|
||
|
||
// @method getSouthEast(): LatLng
|
||
// Returns the south-east point of the bounds.
|
||
getSouthEast: function () {
|
||
return new LatLng(this.getSouth(), this.getEast());
|
||
},
|
||
|
||
// @method getWest(): Number
|
||
// Returns the west longitude of the bounds
|
||
getWest: function () {
|
||
return this._southWest.lng;
|
||
},
|
||
|
||
// @method getSouth(): Number
|
||
// Returns the south latitude of the bounds
|
||
getSouth: function () {
|
||
return this._southWest.lat;
|
||
},
|
||
|
||
// @method getEast(): Number
|
||
// Returns the east longitude of the bounds
|
||
getEast: function () {
|
||
return this._northEast.lng;
|
||
},
|
||
|
||
// @method getNorth(): Number
|
||
// Returns the north latitude of the bounds
|
||
getNorth: function () {
|
||
return this._northEast.lat;
|
||
},
|
||
|
||
// @method contains(otherBounds: LatLngBounds): Boolean
|
||
// Returns `true` if the rectangle contains the given one.
|
||
|
||
// @alternative
|
||
// @method contains (latlng: LatLng): Boolean
|
||
// Returns `true` if the rectangle contains the given point.
|
||
contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
|
||
if (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {
|
||
obj = toLatLng(obj);
|
||
} else {
|
||
obj = toLatLngBounds(obj);
|
||
}
|
||
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2, ne2;
|
||
|
||
if (obj instanceof LatLngBounds) {
|
||
sw2 = obj.getSouthWest();
|
||
ne2 = obj.getNorthEast();
|
||
} else {
|
||
sw2 = ne2 = obj;
|
||
}
|
||
|
||
return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
|
||
(sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
|
||
},
|
||
|
||
// @method intersects(otherBounds: LatLngBounds): Boolean
|
||
// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.
|
||
intersects: function (bounds) {
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2 = bounds.getSouthWest(),
|
||
ne2 = bounds.getNorthEast(),
|
||
|
||
latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
|
||
lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
|
||
|
||
return latIntersects && lngIntersects;
|
||
},
|
||
|
||
// @method overlaps(otherBounds: LatLngBounds): Boolean
|
||
// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.
|
||
overlaps: function (bounds) {
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
var sw = this._southWest,
|
||
ne = this._northEast,
|
||
sw2 = bounds.getSouthWest(),
|
||
ne2 = bounds.getNorthEast(),
|
||
|
||
latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),
|
||
lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);
|
||
|
||
return latOverlaps && lngOverlaps;
|
||
},
|
||
|
||
// @method toBBoxString(): String
|
||
// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.
|
||
toBBoxString: function () {
|
||
return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
|
||
},
|
||
|
||
// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean
|
||
// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.
|
||
equals: function (bounds, maxMargin) {
|
||
if (!bounds) { return false; }
|
||
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
return this._southWest.equals(bounds.getSouthWest(), maxMargin) &&
|
||
this._northEast.equals(bounds.getNorthEast(), maxMargin);
|
||
},
|
||
|
||
// @method isValid(): Boolean
|
||
// Returns `true` if the bounds are properly initialized.
|
||
isValid: function () {
|
||
return !!(this._southWest && this._northEast);
|
||
}
|
||
};
|
||
|
||
// TODO International date line?
|
||
|
||
// @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)
|
||
// Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.
|
||
|
||
// @alternative
|
||
// @factory L.latLngBounds(latlngs: LatLng[])
|
||
// Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).
|
||
function toLatLngBounds(a, b) {
|
||
if (a instanceof LatLngBounds) {
|
||
return a;
|
||
}
|
||
return new LatLngBounds(a, b);
|
||
}
|
||
|
||
/* @class LatLng
|
||
* @aka L.LatLng
|
||
*
|
||
* Represents a geographical point with a certain latitude and longitude.
|
||
*
|
||
* @example
|
||
*
|
||
* ```
|
||
* var latlng = L.latLng(50.5, 30.5);
|
||
* ```
|
||
*
|
||
* All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:
|
||
*
|
||
* ```
|
||
* map.panTo([50, 30]);
|
||
* map.panTo({lon: 30, lat: 50});
|
||
* map.panTo({lat: 50, lng: 30});
|
||
* map.panTo(L.latLng(50, 30));
|
||
* ```
|
||
*
|
||
* Note that `LatLng` does not inherit from Leaflet's `Class` object,
|
||
* which means new classes can't inherit from it, and new methods
|
||
* can't be added to it with the `include` function.
|
||
*/
|
||
|
||
function LatLng(lat, lng, alt) {
|
||
if (isNaN(lat) || isNaN(lng)) {
|
||
throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
|
||
}
|
||
|
||
// @property lat: Number
|
||
// Latitude in degrees
|
||
this.lat = +lat;
|
||
|
||
// @property lng: Number
|
||
// Longitude in degrees
|
||
this.lng = +lng;
|
||
|
||
// @property alt: Number
|
||
// Altitude in meters (optional)
|
||
if (alt !== undefined) {
|
||
this.alt = +alt;
|
||
}
|
||
}
|
||
|
||
LatLng.prototype = {
|
||
// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean
|
||
// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.
|
||
equals: function (obj, maxMargin) {
|
||
if (!obj) { return false; }
|
||
|
||
obj = toLatLng(obj);
|
||
|
||
var margin = Math.max(
|
||
Math.abs(this.lat - obj.lat),
|
||
Math.abs(this.lng - obj.lng));
|
||
|
||
return margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);
|
||
},
|
||
|
||
// @method toString(): String
|
||
// Returns a string representation of the point (for debugging purposes).
|
||
toString: function (precision) {
|
||
return 'LatLng(' +
|
||
formatNum(this.lat, precision) + ', ' +
|
||
formatNum(this.lng, precision) + ')';
|
||
},
|
||
|
||
// @method distanceTo(otherLatLng: LatLng): Number
|
||
// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).
|
||
distanceTo: function (other) {
|
||
return Earth.distance(this, toLatLng(other));
|
||
},
|
||
|
||
// @method wrap(): LatLng
|
||
// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.
|
||
wrap: function () {
|
||
return Earth.wrapLatLng(this);
|
||
},
|
||
|
||
// @method toBounds(sizeInMeters: Number): LatLngBounds
|
||
// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.
|
||
toBounds: function (sizeInMeters) {
|
||
var latAccuracy = 180 * sizeInMeters / 40075017,
|
||
lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);
|
||
|
||
return toLatLngBounds(
|
||
[this.lat - latAccuracy, this.lng - lngAccuracy],
|
||
[this.lat + latAccuracy, this.lng + lngAccuracy]);
|
||
},
|
||
|
||
clone: function () {
|
||
return new LatLng(this.lat, this.lng, this.alt);
|
||
}
|
||
};
|
||
|
||
|
||
|
||
// @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng
|
||
// Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).
|
||
|
||
// @alternative
|
||
// @factory L.latLng(coords: Array): LatLng
|
||
// Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.
|
||
|
||
// @alternative
|
||
// @factory L.latLng(coords: Object): LatLng
|
||
// Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.
|
||
|
||
function toLatLng(a, b, c) {
|
||
if (a instanceof LatLng) {
|
||
return a;
|
||
}
|
||
if (isArray(a) && typeof a[0] !== 'object') {
|
||
if (a.length === 3) {
|
||
return new LatLng(a[0], a[1], a[2]);
|
||
}
|
||
if (a.length === 2) {
|
||
return new LatLng(a[0], a[1]);
|
||
}
|
||
return null;
|
||
}
|
||
if (a === undefined || a === null) {
|
||
return a;
|
||
}
|
||
if (typeof a === 'object' && 'lat' in a) {
|
||
return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);
|
||
}
|
||
if (b === undefined) {
|
||
return null;
|
||
}
|
||
return new LatLng(a, b, c);
|
||
}
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.Base
|
||
* Object that defines coordinate reference systems for projecting
|
||
* geographical points into pixel (screen) coordinates and back (and to
|
||
* coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See
|
||
* [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).
|
||
*
|
||
* Leaflet defines the most usual CRSs by default. If you want to use a
|
||
* CRS not defined by default, take a look at the
|
||
* [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.
|
||
*
|
||
* Note that the CRS instances do not inherit from Leaflet's `Class` object,
|
||
* and can't be instantiated. Also, new classes can't inherit from them,
|
||
* and methods can't be added to them with the `include` function.
|
||
*/
|
||
|
||
var CRS = {
|
||
// @method latLngToPoint(latlng: LatLng, zoom: Number): Point
|
||
// Projects geographical coordinates into pixel coordinates for a given zoom.
|
||
latLngToPoint: function (latlng, zoom) {
|
||
var projectedPoint = this.projection.project(latlng),
|
||
scale = this.scale(zoom);
|
||
|
||
return this.transformation._transform(projectedPoint, scale);
|
||
},
|
||
|
||
// @method pointToLatLng(point: Point, zoom: Number): LatLng
|
||
// The inverse of `latLngToPoint`. Projects pixel coordinates on a given
|
||
// zoom into geographical coordinates.
|
||
pointToLatLng: function (point, zoom) {
|
||
var scale = this.scale(zoom),
|
||
untransformedPoint = this.transformation.untransform(point, scale);
|
||
|
||
return this.projection.unproject(untransformedPoint);
|
||
},
|
||
|
||
// @method project(latlng: LatLng): Point
|
||
// Projects geographical coordinates into coordinates in units accepted for
|
||
// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).
|
||
project: function (latlng) {
|
||
return this.projection.project(latlng);
|
||
},
|
||
|
||
// @method unproject(point: Point): LatLng
|
||
// Given a projected coordinate returns the corresponding LatLng.
|
||
// The inverse of `project`.
|
||
unproject: function (point) {
|
||
return this.projection.unproject(point);
|
||
},
|
||
|
||
// @method scale(zoom: Number): Number
|
||
// Returns the scale used when transforming projected coordinates into
|
||
// pixel coordinates for a particular zoom. For example, it returns
|
||
// `256 * 2^zoom` for Mercator-based CRS.
|
||
scale: function (zoom) {
|
||
return 256 * Math.pow(2, zoom);
|
||
},
|
||
|
||
// @method zoom(scale: Number): Number
|
||
// Inverse of `scale()`, returns the zoom level corresponding to a scale
|
||
// factor of `scale`.
|
||
zoom: function (scale) {
|
||
return Math.log(scale / 256) / Math.LN2;
|
||
},
|
||
|
||
// @method getProjectedBounds(zoom: Number): Bounds
|
||
// Returns the projection's bounds scaled and transformed for the provided `zoom`.
|
||
getProjectedBounds: function (zoom) {
|
||
if (this.infinite) { return null; }
|
||
|
||
var b = this.projection.bounds,
|
||
s = this.scale(zoom),
|
||
min = this.transformation.transform(b.min, s),
|
||
max = this.transformation.transform(b.max, s);
|
||
|
||
return new Bounds(min, max);
|
||
},
|
||
|
||
// @method distance(latlng1: LatLng, latlng2: LatLng): Number
|
||
// Returns the distance between two geographical coordinates.
|
||
|
||
// @property code: String
|
||
// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)
|
||
//
|
||
// @property wrapLng: Number[]
|
||
// An array of two numbers defining whether the longitude (horizontal) coordinate
|
||
// axis wraps around a given range and how. Defaults to `[-180, 180]` in most
|
||
// geographical CRSs. If `undefined`, the longitude axis does not wrap around.
|
||
//
|
||
// @property wrapLat: Number[]
|
||
// Like `wrapLng`, but for the latitude (vertical) axis.
|
||
|
||
// wrapLng: [min, max],
|
||
// wrapLat: [min, max],
|
||
|
||
// @property infinite: Boolean
|
||
// If true, the coordinate space will be unbounded (infinite in both axes)
|
||
infinite: false,
|
||
|
||
// @method wrapLatLng(latlng: LatLng): LatLng
|
||
// Returns a `LatLng` where lat and lng has been wrapped according to the
|
||
// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.
|
||
wrapLatLng: function (latlng) {
|
||
var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,
|
||
lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,
|
||
alt = latlng.alt;
|
||
|
||
return new LatLng(lat, lng, alt);
|
||
},
|
||
|
||
// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
|
||
// Returns a `LatLngBounds` with the same size as the given one, ensuring
|
||
// that its center is within the CRS's bounds.
|
||
// Only accepts actual `L.LatLngBounds` instances, not arrays.
|
||
wrapLatLngBounds: function (bounds) {
|
||
var center = bounds.getCenter(),
|
||
newCenter = this.wrapLatLng(center),
|
||
latShift = center.lat - newCenter.lat,
|
||
lngShift = center.lng - newCenter.lng;
|
||
|
||
if (latShift === 0 && lngShift === 0) {
|
||
return bounds;
|
||
}
|
||
|
||
var sw = bounds.getSouthWest(),
|
||
ne = bounds.getNorthEast(),
|
||
newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),
|
||
newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);
|
||
|
||
return new LatLngBounds(newSw, newNe);
|
||
}
|
||
};
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.Earth
|
||
*
|
||
* Serves as the base for CRS that are global such that they cover the earth.
|
||
* Can only be used as the base for other CRS and cannot be used directly,
|
||
* since it does not have a `code`, `projection` or `transformation`. `distance()` returns
|
||
* meters.
|
||
*/
|
||
|
||
var Earth = extend({}, CRS, {
|
||
wrapLng: [-180, 180],
|
||
|
||
// Mean Earth Radius, as recommended for use by
|
||
// the International Union of Geodesy and Geophysics,
|
||
// see https://rosettacode.org/wiki/Haversine_formula
|
||
R: 6371000,
|
||
|
||
// distance between two geographical points using spherical law of cosines approximation
|
||
distance: function (latlng1, latlng2) {
|
||
var rad = Math.PI / 180,
|
||
lat1 = latlng1.lat * rad,
|
||
lat2 = latlng2.lat * rad,
|
||
sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),
|
||
sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),
|
||
a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,
|
||
c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
||
return this.R * c;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @namespace Projection
|
||
* @projection L.Projection.SphericalMercator
|
||
*
|
||
* Spherical Mercator projection — the most common projection for online maps,
|
||
* used by almost all free and commercial tile providers. Assumes that Earth is
|
||
* a sphere. Used by the `EPSG:3857` CRS.
|
||
*/
|
||
|
||
var earthRadius = 6378137;
|
||
|
||
var SphericalMercator = {
|
||
|
||
R: earthRadius,
|
||
MAX_LATITUDE: 85.0511287798,
|
||
|
||
project: function (latlng) {
|
||
var d = Math.PI / 180,
|
||
max = this.MAX_LATITUDE,
|
||
lat = Math.max(Math.min(max, latlng.lat), -max),
|
||
sin = Math.sin(lat * d);
|
||
|
||
return new Point(
|
||
this.R * latlng.lng * d,
|
||
this.R * Math.log((1 + sin) / (1 - sin)) / 2);
|
||
},
|
||
|
||
unproject: function (point) {
|
||
var d = 180 / Math.PI;
|
||
|
||
return new LatLng(
|
||
(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,
|
||
point.x * d / this.R);
|
||
},
|
||
|
||
bounds: (function () {
|
||
var d = earthRadius * Math.PI;
|
||
return new Bounds([-d, -d], [d, d]);
|
||
})()
|
||
};
|
||
|
||
/*
|
||
* @class Transformation
|
||
* @aka L.Transformation
|
||
*
|
||
* Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`
|
||
* for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing
|
||
* the reverse. Used by Leaflet in its projections code.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var transformation = L.transformation(2, 5, -1, 10),
|
||
* p = L.point(1, 2),
|
||
* p2 = transformation.transform(p), // L.point(7, 8)
|
||
* p3 = transformation.untransform(p2); // L.point(1, 2)
|
||
* ```
|
||
*/
|
||
|
||
|
||
// factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)
|
||
// Creates a `Transformation` object with the given coefficients.
|
||
function Transformation(a, b, c, d) {
|
||
if (isArray(a)) {
|
||
// use array properties
|
||
this._a = a[0];
|
||
this._b = a[1];
|
||
this._c = a[2];
|
||
this._d = a[3];
|
||
return;
|
||
}
|
||
this._a = a;
|
||
this._b = b;
|
||
this._c = c;
|
||
this._d = d;
|
||
}
|
||
|
||
Transformation.prototype = {
|
||
// @method transform(point: Point, scale?: Number): Point
|
||
// Returns a transformed point, optionally multiplied by the given scale.
|
||
// Only accepts actual `L.Point` instances, not arrays.
|
||
transform: function (point, scale) { // (Point, Number) -> Point
|
||
return this._transform(point.clone(), scale);
|
||
},
|
||
|
||
// destructive transform (faster)
|
||
_transform: function (point, scale) {
|
||
scale = scale || 1;
|
||
point.x = scale * (this._a * point.x + this._b);
|
||
point.y = scale * (this._c * point.y + this._d);
|
||
return point;
|
||
},
|
||
|
||
// @method untransform(point: Point, scale?: Number): Point
|
||
// Returns the reverse transformation of the given point, optionally divided
|
||
// by the given scale. Only accepts actual `L.Point` instances, not arrays.
|
||
untransform: function (point, scale) {
|
||
scale = scale || 1;
|
||
return new Point(
|
||
(point.x / scale - this._b) / this._a,
|
||
(point.y / scale - this._d) / this._c);
|
||
}
|
||
};
|
||
|
||
// factory L.transformation(a: Number, b: Number, c: Number, d: Number)
|
||
|
||
// @factory L.transformation(a: Number, b: Number, c: Number, d: Number)
|
||
// Instantiates a Transformation object with the given coefficients.
|
||
|
||
// @alternative
|
||
// @factory L.transformation(coefficients: Array): Transformation
|
||
// Expects an coefficients array of the form
|
||
// `[a: Number, b: Number, c: Number, d: Number]`.
|
||
|
||
function toTransformation(a, b, c, d) {
|
||
return new Transformation(a, b, c, d);
|
||
}
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.EPSG3857
|
||
*
|
||
* The most common CRS for online maps, used by almost all free and commercial
|
||
* tile providers. Uses Spherical Mercator projection. Set in by default in
|
||
* Map's `crs` option.
|
||
*/
|
||
|
||
var EPSG3857 = extend({}, Earth, {
|
||
code: 'EPSG:3857',
|
||
projection: SphericalMercator,
|
||
|
||
transformation: (function () {
|
||
var scale = 0.5 / (Math.PI * SphericalMercator.R);
|
||
return toTransformation(scale, 0.5, -scale, 0.5);
|
||
}())
|
||
});
|
||
|
||
var EPSG900913 = extend({}, EPSG3857, {
|
||
code: 'EPSG:900913'
|
||
});
|
||
|
||
// @namespace SVG; @section
|
||
// There are several static functions which can be called without instantiating L.SVG:
|
||
|
||
// @function create(name: String): SVGElement
|
||
// Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),
|
||
// corresponding to the class name passed. For example, using 'line' will return
|
||
// an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).
|
||
function svgCreate(name) {
|
||
return document.createElementNS('http://www.w3.org/2000/svg', name);
|
||
}
|
||
|
||
// @function pointsToPath(rings: Point[], closed: Boolean): String
|
||
// Generates a SVG path string for multiple rings, with each ring turning
|
||
// into "M..L..L.." instructions
|
||
function pointsToPath(rings, closed) {
|
||
var str = '',
|
||
i, j, len, len2, points, p;
|
||
|
||
for (i = 0, len = rings.length; i < len; i++) {
|
||
points = rings[i];
|
||
|
||
for (j = 0, len2 = points.length; j < len2; j++) {
|
||
p = points[j];
|
||
str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
|
||
}
|
||
|
||
// closes the ring for polygons; "x" is VML syntax
|
||
str += closed ? (Browser.svg ? 'z' : 'x') : '';
|
||
}
|
||
|
||
// SVG complains about empty path strings
|
||
return str || 'M0 0';
|
||
}
|
||
|
||
/*
|
||
* @namespace Browser
|
||
* @aka L.Browser
|
||
*
|
||
* A namespace with static properties for browser/feature detection used by Leaflet internally.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* if (L.Browser.ielt9) {
|
||
* alert('Upgrade your browser, dude!');
|
||
* }
|
||
* ```
|
||
*/
|
||
|
||
var style = document.documentElement.style;
|
||
|
||
// @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).
|
||
var ie = 'ActiveXObject' in window;
|
||
|
||
// @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.
|
||
var ielt9 = ie && !document.addEventListener;
|
||
|
||
// @property edge: Boolean; `true` for the Edge web browser.
|
||
var edge = 'msLaunchUri' in navigator && !('documentMode' in document);
|
||
|
||
// @property webkit: Boolean;
|
||
// `true` for webkit-based browsers like Chrome and Safari (including mobile versions).
|
||
var webkit = userAgentContains('webkit');
|
||
|
||
// @property android: Boolean
|
||
// **Deprecated.** `true` for any browser running on an Android platform.
|
||
var android = userAgentContains('android');
|
||
|
||
// @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.
|
||
var android23 = userAgentContains('android 2') || userAgentContains('android 3');
|
||
|
||
/* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */
|
||
var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit
|
||
// @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)
|
||
var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);
|
||
|
||
// @property opera: Boolean; `true` for the Opera browser
|
||
var opera = !!window.opera;
|
||
|
||
// @property chrome: Boolean; `true` for the Chrome browser.
|
||
var chrome = !edge && userAgentContains('chrome');
|
||
|
||
// @property gecko: Boolean; `true` for gecko-based browsers like Firefox.
|
||
var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;
|
||
|
||
// @property safari: Boolean; `true` for the Safari browser.
|
||
var safari = !chrome && userAgentContains('safari');
|
||
|
||
var phantom = userAgentContains('phantom');
|
||
|
||
// @property opera12: Boolean
|
||
// `true` for the Opera browser supporting CSS transforms (version 12 or later).
|
||
var opera12 = 'OTransition' in style;
|
||
|
||
// @property win: Boolean; `true` when the browser is running in a Windows platform
|
||
var win = navigator.platform.indexOf('Win') === 0;
|
||
|
||
// @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.
|
||
var ie3d = ie && ('transition' in style);
|
||
|
||
// @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.
|
||
var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;
|
||
|
||
// @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.
|
||
var gecko3d = 'MozPerspective' in style;
|
||
|
||
// @property any3d: Boolean
|
||
// `true` for all browsers supporting CSS transforms.
|
||
var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;
|
||
|
||
// @property mobile: Boolean; `true` for all browsers running in a mobile device.
|
||
var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');
|
||
|
||
// @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.
|
||
var mobileWebkit = mobile && webkit;
|
||
|
||
// @property mobileWebkit3d: Boolean
|
||
// `true` for all webkit-based browsers in a mobile device supporting CSS transforms.
|
||
var mobileWebkit3d = mobile && webkit3d;
|
||
|
||
// @property msPointer: Boolean
|
||
// `true` for browsers implementing the Microsoft touch events model (notably IE10).
|
||
var msPointer = !window.PointerEvent && window.MSPointerEvent;
|
||
|
||
// @property pointer: Boolean
|
||
// `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).
|
||
var pointer = !!(window.PointerEvent || msPointer);
|
||
|
||
// @property touchNative: Boolean
|
||
// `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).
|
||
// **This does not necessarily mean** that the browser is running in a computer with
|
||
// a touchscreen, it only means that the browser is capable of understanding
|
||
// touch events.
|
||
var touchNative = 'ontouchstart' in window || !!window.TouchEvent;
|
||
|
||
// @property touch: Boolean
|
||
// `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.
|
||
// Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.
|
||
var touch = !window.L_NO_TOUCH && (touchNative || pointer);
|
||
|
||
// @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.
|
||
var mobileOpera = mobile && opera;
|
||
|
||
// @property mobileGecko: Boolean
|
||
// `true` for gecko-based browsers running in a mobile device.
|
||
var mobileGecko = mobile && gecko;
|
||
|
||
// @property retina: Boolean
|
||
// `true` for browsers on a high-resolution "retina" screen or on any screen when browser's display zoom is more than 100%.
|
||
var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;
|
||
|
||
// @property passiveEvents: Boolean
|
||
// `true` for browsers that support passive events.
|
||
var passiveEvents = (function () {
|
||
var supportsPassiveOption = false;
|
||
try {
|
||
var opts = Object.defineProperty({}, 'passive', {
|
||
get: function () { // eslint-disable-line getter-return
|
||
supportsPassiveOption = true;
|
||
}
|
||
});
|
||
window.addEventListener('testPassiveEventSupport', falseFn, opts);
|
||
window.removeEventListener('testPassiveEventSupport', falseFn, opts);
|
||
} catch (e) {
|
||
// Errors can safely be ignored since this is only a browser support test.
|
||
}
|
||
return supportsPassiveOption;
|
||
}());
|
||
|
||
// @property canvas: Boolean
|
||
// `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
|
||
var canvas$1 = (function () {
|
||
return !!document.createElement('canvas').getContext;
|
||
}());
|
||
|
||
// @property svg: Boolean
|
||
// `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).
|
||
var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect);
|
||
|
||
var inlineSvg = !!svg$1 && (function () {
|
||
var div = document.createElement('div');
|
||
div.innerHTML = '<svg/>';
|
||
return (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';
|
||
})();
|
||
|
||
// @property vml: Boolean
|
||
// `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).
|
||
var vml = !svg$1 && (function () {
|
||
try {
|
||
var div = document.createElement('div');
|
||
div.innerHTML = '<v:shape adj="1"/>';
|
||
|
||
var shape = div.firstChild;
|
||
shape.style.behavior = 'url(#default#VML)';
|
||
|
||
return shape && (typeof shape.adj === 'object');
|
||
|
||
} catch (e) {
|
||
return false;
|
||
}
|
||
}());
|
||
|
||
|
||
// @property mac: Boolean; `true` when the browser is running in a Mac platform
|
||
var mac = navigator.platform.indexOf('Mac') === 0;
|
||
|
||
// @property mac: Boolean; `true` when the browser is running in a Linux platform
|
||
var linux = navigator.platform.indexOf('Linux') === 0;
|
||
|
||
function userAgentContains(str) {
|
||
return navigator.userAgent.toLowerCase().indexOf(str) >= 0;
|
||
}
|
||
|
||
|
||
var Browser = {
|
||
ie: ie,
|
||
ielt9: ielt9,
|
||
edge: edge,
|
||
webkit: webkit,
|
||
android: android,
|
||
android23: android23,
|
||
androidStock: androidStock,
|
||
opera: opera,
|
||
chrome: chrome,
|
||
gecko: gecko,
|
||
safari: safari,
|
||
phantom: phantom,
|
||
opera12: opera12,
|
||
win: win,
|
||
ie3d: ie3d,
|
||
webkit3d: webkit3d,
|
||
gecko3d: gecko3d,
|
||
any3d: any3d,
|
||
mobile: mobile,
|
||
mobileWebkit: mobileWebkit,
|
||
mobileWebkit3d: mobileWebkit3d,
|
||
msPointer: msPointer,
|
||
pointer: pointer,
|
||
touch: touch,
|
||
touchNative: touchNative,
|
||
mobileOpera: mobileOpera,
|
||
mobileGecko: mobileGecko,
|
||
retina: retina,
|
||
passiveEvents: passiveEvents,
|
||
canvas: canvas$1,
|
||
svg: svg$1,
|
||
vml: vml,
|
||
inlineSvg: inlineSvg,
|
||
mac: mac,
|
||
linux: linux
|
||
};
|
||
|
||
/*
|
||
* Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.
|
||
*/
|
||
|
||
var POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';
|
||
var POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';
|
||
var POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';
|
||
var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';
|
||
var pEvent = {
|
||
touchstart : POINTER_DOWN,
|
||
touchmove : POINTER_MOVE,
|
||
touchend : POINTER_UP,
|
||
touchcancel : POINTER_CANCEL
|
||
};
|
||
var handle = {
|
||
touchstart : _onPointerStart,
|
||
touchmove : _handlePointer,
|
||
touchend : _handlePointer,
|
||
touchcancel : _handlePointer
|
||
};
|
||
var _pointers = {};
|
||
var _pointerDocListener = false;
|
||
|
||
// Provides a touch events wrapper for (ms)pointer events.
|
||
// ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890
|
||
|
||
function addPointerListener(obj, type, handler) {
|
||
if (type === 'touchstart') {
|
||
_addPointerDocListener();
|
||
}
|
||
if (!handle[type]) {
|
||
console.warn('wrong event specified:', type);
|
||
return falseFn;
|
||
}
|
||
handler = handle[type].bind(this, handler);
|
||
obj.addEventListener(pEvent[type], handler, false);
|
||
return handler;
|
||
}
|
||
|
||
function removePointerListener(obj, type, handler) {
|
||
if (!pEvent[type]) {
|
||
console.warn('wrong event specified:', type);
|
||
return;
|
||
}
|
||
obj.removeEventListener(pEvent[type], handler, false);
|
||
}
|
||
|
||
function _globalPointerDown(e) {
|
||
_pointers[e.pointerId] = e;
|
||
}
|
||
|
||
function _globalPointerMove(e) {
|
||
if (_pointers[e.pointerId]) {
|
||
_pointers[e.pointerId] = e;
|
||
}
|
||
}
|
||
|
||
function _globalPointerUp(e) {
|
||
delete _pointers[e.pointerId];
|
||
}
|
||
|
||
function _addPointerDocListener() {
|
||
// need to keep track of what pointers and how many are active to provide e.touches emulation
|
||
if (!_pointerDocListener) {
|
||
// we listen document as any drags that end by moving the touch off the screen get fired there
|
||
document.addEventListener(POINTER_DOWN, _globalPointerDown, true);
|
||
document.addEventListener(POINTER_MOVE, _globalPointerMove, true);
|
||
document.addEventListener(POINTER_UP, _globalPointerUp, true);
|
||
document.addEventListener(POINTER_CANCEL, _globalPointerUp, true);
|
||
|
||
_pointerDocListener = true;
|
||
}
|
||
}
|
||
|
||
function _handlePointer(handler, e) {
|
||
if (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }
|
||
|
||
e.touches = [];
|
||
for (var i in _pointers) {
|
||
e.touches.push(_pointers[i]);
|
||
}
|
||
e.changedTouches = [e];
|
||
|
||
handler(e);
|
||
}
|
||
|
||
function _onPointerStart(handler, e) {
|
||
// IE10 specific: MsTouch needs preventDefault. See #2000
|
||
if (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {
|
||
preventDefault(e);
|
||
}
|
||
_handlePointer(handler, e);
|
||
}
|
||
|
||
/*
|
||
* Extends the event handling code with double tap support for mobile browsers.
|
||
*
|
||
* Note: currently most browsers fire native dblclick, with only a few exceptions
|
||
* (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)
|
||
*/
|
||
|
||
function makeDblclick(event) {
|
||
// in modern browsers `type` cannot be just overridden:
|
||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only
|
||
var newEvent = {},
|
||
prop, i;
|
||
for (i in event) {
|
||
prop = event[i];
|
||
newEvent[i] = prop && prop.bind ? prop.bind(event) : prop;
|
||
}
|
||
event = newEvent;
|
||
newEvent.type = 'dblclick';
|
||
newEvent.detail = 2;
|
||
newEvent.isTrusted = false;
|
||
newEvent._simulated = true; // for debug purposes
|
||
return newEvent;
|
||
}
|
||
|
||
var delay = 200;
|
||
function addDoubleTapListener(obj, handler) {
|
||
// Most browsers handle double tap natively
|
||
obj.addEventListener('dblclick', handler);
|
||
|
||
// On some platforms the browser doesn't fire native dblclicks for touch events.
|
||
// It seems that in all such cases `detail` property of `click` event is always `1`.
|
||
// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.
|
||
var last = 0,
|
||
detail;
|
||
function simDblclick(e) {
|
||
if (e.detail !== 1) {
|
||
detail = e.detail; // keep in sync to avoid false dblclick in some cases
|
||
return;
|
||
}
|
||
|
||
if (e.pointerType === 'mouse' ||
|
||
(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {
|
||
|
||
return;
|
||
}
|
||
|
||
// When clicking on an <input>, the browser generates a click on its
|
||
// <label> (and vice versa) triggering two clicks in quick succession.
|
||
// This ignores clicks on elements which are a label with a 'for'
|
||
// attribute (or children of such a label), but not children of
|
||
// a <input>.
|
||
var path = getPropagationPath(e);
|
||
if (path.some(function (el) {
|
||
return el instanceof HTMLLabelElement && el.attributes.for;
|
||
}) &&
|
||
!path.some(function (el) {
|
||
return (
|
||
el instanceof HTMLInputElement ||
|
||
el instanceof HTMLSelectElement
|
||
);
|
||
})
|
||
) {
|
||
return;
|
||
}
|
||
|
||
var now = Date.now();
|
||
if (now - last <= delay) {
|
||
detail++;
|
||
if (detail === 2) {
|
||
handler(makeDblclick(e));
|
||
}
|
||
} else {
|
||
detail = 1;
|
||
}
|
||
last = now;
|
||
}
|
||
|
||
obj.addEventListener('click', simDblclick);
|
||
|
||
return {
|
||
dblclick: handler,
|
||
simDblclick: simDblclick
|
||
};
|
||
}
|
||
|
||
function removeDoubleTapListener(obj, handlers) {
|
||
obj.removeEventListener('dblclick', handlers.dblclick);
|
||
obj.removeEventListener('click', handlers.simDblclick);
|
||
}
|
||
|
||
/*
|
||
* @namespace DomUtil
|
||
*
|
||
* Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)
|
||
* tree, used by Leaflet internally.
|
||
*
|
||
* Most functions expecting or returning a `HTMLElement` also work for
|
||
* SVG elements. The only difference is that classes refer to CSS classes
|
||
* in HTML and SVG classes in SVG.
|
||
*/
|
||
|
||
|
||
// @property TRANSFORM: String
|
||
// Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).
|
||
var TRANSFORM = testProp(
|
||
['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
|
||
|
||
// webkitTransition comes first because some browser versions that drop vendor prefix don't do
|
||
// the same for the transitionend event, in particular the Android 4.1 stock browser
|
||
|
||
// @property TRANSITION: String
|
||
// Vendor-prefixed transition style name.
|
||
var TRANSITION = testProp(
|
||
['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
|
||
|
||
// @property TRANSITION_END: String
|
||
// Vendor-prefixed transitionend event name.
|
||
var TRANSITION_END =
|
||
TRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';
|
||
|
||
|
||
// @function get(id: String|HTMLElement): HTMLElement
|
||
// Returns an element given its DOM id, or returns the element itself
|
||
// if it was passed directly.
|
||
function get(id) {
|
||
return typeof id === 'string' ? document.getElementById(id) : id;
|
||
}
|
||
|
||
// @function getStyle(el: HTMLElement, styleAttrib: String): String
|
||
// Returns the value for a certain style attribute on an element,
|
||
// including computed values or values set through CSS.
|
||
function getStyle(el, style) {
|
||
var value = el.style[style] || (el.currentStyle && el.currentStyle[style]);
|
||
|
||
if ((!value || value === 'auto') && document.defaultView) {
|
||
var css = document.defaultView.getComputedStyle(el, null);
|
||
value = css ? css[style] : null;
|
||
}
|
||
return value === 'auto' ? null : value;
|
||
}
|
||
|
||
// @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement
|
||
// Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.
|
||
function create$1(tagName, className, container) {
|
||
var el = document.createElement(tagName);
|
||
el.className = className || '';
|
||
|
||
if (container) {
|
||
container.appendChild(el);
|
||
}
|
||
return el;
|
||
}
|
||
|
||
// @function remove(el: HTMLElement)
|
||
// Removes `el` from its parent element
|
||
function remove(el) {
|
||
var parent = el.parentNode;
|
||
if (parent) {
|
||
parent.removeChild(el);
|
||
}
|
||
}
|
||
|
||
// @function empty(el: HTMLElement)
|
||
// Removes all of `el`'s children elements from `el`
|
||
function empty(el) {
|
||
while (el.firstChild) {
|
||
el.removeChild(el.firstChild);
|
||
}
|
||
}
|
||
|
||
// @function toFront(el: HTMLElement)
|
||
// Makes `el` the last child of its parent, so it renders in front of the other children.
|
||
function toFront(el) {
|
||
var parent = el.parentNode;
|
||
if (parent && parent.lastChild !== el) {
|
||
parent.appendChild(el);
|
||
}
|
||
}
|
||
|
||
// @function toBack(el: HTMLElement)
|
||
// Makes `el` the first child of its parent, so it renders behind the other children.
|
||
function toBack(el) {
|
||
var parent = el.parentNode;
|
||
if (parent && parent.firstChild !== el) {
|
||
parent.insertBefore(el, parent.firstChild);
|
||
}
|
||
}
|
||
|
||
// @function hasClass(el: HTMLElement, name: String): Boolean
|
||
// Returns `true` if the element's class attribute contains `name`.
|
||
function hasClass(el, name) {
|
||
if (el.classList !== undefined) {
|
||
return el.classList.contains(name);
|
||
}
|
||
var className = getClass(el);
|
||
return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
|
||
}
|
||
|
||
// @function addClass(el: HTMLElement, name: String)
|
||
// Adds `name` to the element's class attribute.
|
||
function addClass(el, name) {
|
||
if (el.classList !== undefined) {
|
||
var classes = splitWords(name);
|
||
for (var i = 0, len = classes.length; i < len; i++) {
|
||
el.classList.add(classes[i]);
|
||
}
|
||
} else if (!hasClass(el, name)) {
|
||
var className = getClass(el);
|
||
setClass(el, (className ? className + ' ' : '') + name);
|
||
}
|
||
}
|
||
|
||
// @function removeClass(el: HTMLElement, name: String)
|
||
// Removes `name` from the element's class attribute.
|
||
function removeClass(el, name) {
|
||
if (el.classList !== undefined) {
|
||
el.classList.remove(name);
|
||
} else {
|
||
setClass(el, trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));
|
||
}
|
||
}
|
||
|
||
// @function setClass(el: HTMLElement, name: String)
|
||
// Sets the element's class.
|
||
function setClass(el, name) {
|
||
if (el.className.baseVal === undefined) {
|
||
el.className = name;
|
||
} else {
|
||
// in case of SVG element
|
||
el.className.baseVal = name;
|
||
}
|
||
}
|
||
|
||
// @function getClass(el: HTMLElement): String
|
||
// Returns the element's class.
|
||
function getClass(el) {
|
||
// Check if the element is an SVGElementInstance and use the correspondingElement instead
|
||
// (Required for linked SVG elements in IE11.)
|
||
if (el.correspondingElement) {
|
||
el = el.correspondingElement;
|
||
}
|
||
return el.className.baseVal === undefined ? el.className : el.className.baseVal;
|
||
}
|
||
|
||
// @function setOpacity(el: HTMLElement, opacity: Number)
|
||
// Set the opacity of an element (including old IE support).
|
||
// `opacity` must be a number from `0` to `1`.
|
||
function setOpacity(el, value) {
|
||
if ('opacity' in el.style) {
|
||
el.style.opacity = value;
|
||
} else if ('filter' in el.style) {
|
||
_setOpacityIE(el, value);
|
||
}
|
||
}
|
||
|
||
function _setOpacityIE(el, value) {
|
||
var filter = false,
|
||
filterName = 'DXImageTransform.Microsoft.Alpha';
|
||
|
||
// filters collection throws an error if we try to retrieve a filter that doesn't exist
|
||
try {
|
||
filter = el.filters.item(filterName);
|
||
} catch (e) {
|
||
// don't set opacity to 1 if we haven't already set an opacity,
|
||
// it isn't needed and breaks transparent pngs.
|
||
if (value === 1) { return; }
|
||
}
|
||
|
||
value = Math.round(value * 100);
|
||
|
||
if (filter) {
|
||
filter.Enabled = (value !== 100);
|
||
filter.Opacity = value;
|
||
} else {
|
||
el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
|
||
}
|
||
}
|
||
|
||
// @function testProp(props: String[]): String|false
|
||
// Goes through the array of style names and returns the first name
|
||
// that is a valid style name for an element. If no such name is found,
|
||
// it returns false. Useful for vendor-prefixed styles like `transform`.
|
||
function testProp(props) {
|
||
var style = document.documentElement.style;
|
||
|
||
for (var i = 0; i < props.length; i++) {
|
||
if (props[i] in style) {
|
||
return props[i];
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
// @function setTransform(el: HTMLElement, offset: Point, scale?: Number)
|
||
// Resets the 3D CSS transform of `el` so it is translated by `offset` pixels
|
||
// and optionally scaled by `scale`. Does not have an effect if the
|
||
// browser doesn't support 3D CSS transforms.
|
||
function setTransform(el, offset, scale) {
|
||
var pos = offset || new Point(0, 0);
|
||
|
||
el.style[TRANSFORM] =
|
||
(Browser.ie3d ?
|
||
'translate(' + pos.x + 'px,' + pos.y + 'px)' :
|
||
'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +
|
||
(scale ? ' scale(' + scale + ')' : '');
|
||
}
|
||
|
||
// @function setPosition(el: HTMLElement, position: Point)
|
||
// Sets the position of `el` to coordinates specified by `position`,
|
||
// using CSS translate or top/left positioning depending on the browser
|
||
// (used by Leaflet internally to position its layers).
|
||
function setPosition(el, point) {
|
||
|
||
/*eslint-disable */
|
||
el._leaflet_pos = point;
|
||
/* eslint-enable */
|
||
|
||
if (Browser.any3d) {
|
||
setTransform(el, point);
|
||
} else {
|
||
el.style.left = point.x + 'px';
|
||
el.style.top = point.y + 'px';
|
||
}
|
||
}
|
||
|
||
// @function getPosition(el: HTMLElement): Point
|
||
// Returns the coordinates of an element previously positioned with setPosition.
|
||
function getPosition(el) {
|
||
// this method is only used for elements previously positioned using setPosition,
|
||
// so it's safe to cache the position for performance
|
||
|
||
return el._leaflet_pos || new Point(0, 0);
|
||
}
|
||
|
||
// @function disableTextSelection()
|
||
// Prevents the user from generating `selectstart` DOM events, usually generated
|
||
// when the user drags the mouse through a page with text. Used internally
|
||
// by Leaflet to override the behaviour of any click-and-drag interaction on
|
||
// the map. Affects drag interactions on the whole document.
|
||
|
||
// @function enableTextSelection()
|
||
// Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).
|
||
var disableTextSelection;
|
||
var enableTextSelection;
|
||
var _userSelect;
|
||
if ('onselectstart' in document) {
|
||
disableTextSelection = function () {
|
||
on(window, 'selectstart', preventDefault);
|
||
};
|
||
enableTextSelection = function () {
|
||
off(window, 'selectstart', preventDefault);
|
||
};
|
||
} else {
|
||
var userSelectProperty = testProp(
|
||
['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
|
||
|
||
disableTextSelection = function () {
|
||
if (userSelectProperty) {
|
||
var style = document.documentElement.style;
|
||
_userSelect = style[userSelectProperty];
|
||
style[userSelectProperty] = 'none';
|
||
}
|
||
};
|
||
enableTextSelection = function () {
|
||
if (userSelectProperty) {
|
||
document.documentElement.style[userSelectProperty] = _userSelect;
|
||
_userSelect = undefined;
|
||
}
|
||
};
|
||
}
|
||
|
||
// @function disableImageDrag()
|
||
// As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but
|
||
// for `dragstart` DOM events, usually generated when the user drags an image.
|
||
function disableImageDrag() {
|
||
on(window, 'dragstart', preventDefault);
|
||
}
|
||
|
||
// @function enableImageDrag()
|
||
// Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).
|
||
function enableImageDrag() {
|
||
off(window, 'dragstart', preventDefault);
|
||
}
|
||
|
||
var _outlineElement, _outlineStyle;
|
||
// @function preventOutline(el: HTMLElement)
|
||
// Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)
|
||
// of the element `el` invisible. Used internally by Leaflet to prevent
|
||
// focusable elements from displaying an outline when the user performs a
|
||
// drag interaction on them.
|
||
function preventOutline(element) {
|
||
while (element.tabIndex === -1) {
|
||
element = element.parentNode;
|
||
}
|
||
if (!element.style) { return; }
|
||
restoreOutline();
|
||
_outlineElement = element;
|
||
_outlineStyle = element.style.outline;
|
||
element.style.outline = 'none';
|
||
on(window, 'keydown', restoreOutline);
|
||
}
|
||
|
||
// @function restoreOutline()
|
||
// Cancels the effects of a previous [`L.DomUtil.preventOutline`]().
|
||
function restoreOutline() {
|
||
if (!_outlineElement) { return; }
|
||
_outlineElement.style.outline = _outlineStyle;
|
||
_outlineElement = undefined;
|
||
_outlineStyle = undefined;
|
||
off(window, 'keydown', restoreOutline);
|
||
}
|
||
|
||
// @function getSizedParentNode(el: HTMLElement): HTMLElement
|
||
// Finds the closest parent node which size (width and height) is not null.
|
||
function getSizedParentNode(element) {
|
||
do {
|
||
element = element.parentNode;
|
||
} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);
|
||
return element;
|
||
}
|
||
|
||
// @function getScale(el: HTMLElement): Object
|
||
// Computes the CSS scale currently applied on the element.
|
||
// Returns an object with `x` and `y` members as horizontal and vertical scales respectively,
|
||
// and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
|
||
function getScale(element) {
|
||
var rect = element.getBoundingClientRect(); // Read-only in old browsers.
|
||
|
||
return {
|
||
x: rect.width / element.offsetWidth || 1,
|
||
y: rect.height / element.offsetHeight || 1,
|
||
boundingClientRect: rect
|
||
};
|
||
}
|
||
|
||
var DomUtil = {
|
||
__proto__: null,
|
||
TRANSFORM: TRANSFORM,
|
||
TRANSITION: TRANSITION,
|
||
TRANSITION_END: TRANSITION_END,
|
||
get: get,
|
||
getStyle: getStyle,
|
||
create: create$1,
|
||
remove: remove,
|
||
empty: empty,
|
||
toFront: toFront,
|
||
toBack: toBack,
|
||
hasClass: hasClass,
|
||
addClass: addClass,
|
||
removeClass: removeClass,
|
||
setClass: setClass,
|
||
getClass: getClass,
|
||
setOpacity: setOpacity,
|
||
testProp: testProp,
|
||
setTransform: setTransform,
|
||
setPosition: setPosition,
|
||
getPosition: getPosition,
|
||
get disableTextSelection () { return disableTextSelection; },
|
||
get enableTextSelection () { return enableTextSelection; },
|
||
disableImageDrag: disableImageDrag,
|
||
enableImageDrag: enableImageDrag,
|
||
preventOutline: preventOutline,
|
||
restoreOutline: restoreOutline,
|
||
getSizedParentNode: getSizedParentNode,
|
||
getScale: getScale
|
||
};
|
||
|
||
/*
|
||
* @namespace DomEvent
|
||
* Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.
|
||
*/
|
||
|
||
// Inspired by John Resig, Dean Edwards and YUI addEvent implementations.
|
||
|
||
// @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this
|
||
// Adds a listener function (`fn`) to a particular DOM event type of the
|
||
// element `el`. You can optionally specify the context of the listener
|
||
// (object the `this` keyword will point to). You can also pass several
|
||
// space-separated types (e.g. `'click dblclick'`).
|
||
|
||
// @alternative
|
||
// @function on(el: HTMLElement, eventMap: Object, context?: Object): this
|
||
// Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
|
||
function on(obj, types, fn, context) {
|
||
|
||
if (types && typeof types === 'object') {
|
||
for (var type in types) {
|
||
addOne(obj, type, types[type], fn);
|
||
}
|
||
} else {
|
||
types = splitWords(types);
|
||
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
addOne(obj, types[i], fn, context);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
var eventsKey = '_leaflet_events';
|
||
|
||
// @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this
|
||
// Removes a previously added listener function.
|
||
// Note that if you passed a custom context to on, you must pass the same
|
||
// context to `off` in order to remove the listener.
|
||
|
||
// @alternative
|
||
// @function off(el: HTMLElement, eventMap: Object, context?: Object): this
|
||
// Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
|
||
|
||
// @alternative
|
||
// @function off(el: HTMLElement, types: String): this
|
||
// Removes all previously added listeners of given types.
|
||
|
||
// @alternative
|
||
// @function off(el: HTMLElement): this
|
||
// Removes all previously added listeners from given HTMLElement
|
||
function off(obj, types, fn, context) {
|
||
|
||
if (arguments.length === 1) {
|
||
batchRemove(obj);
|
||
delete obj[eventsKey];
|
||
|
||
} else if (types && typeof types === 'object') {
|
||
for (var type in types) {
|
||
removeOne(obj, type, types[type], fn);
|
||
}
|
||
|
||
} else {
|
||
types = splitWords(types);
|
||
|
||
if (arguments.length === 2) {
|
||
batchRemove(obj, function (type) {
|
||
return indexOf(types, type) !== -1;
|
||
});
|
||
} else {
|
||
for (var i = 0, len = types.length; i < len; i++) {
|
||
removeOne(obj, types[i], fn, context);
|
||
}
|
||
}
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
function batchRemove(obj, filterFn) {
|
||
for (var id in obj[eventsKey]) {
|
||
var type = id.split(/\d/)[0];
|
||
if (!filterFn || filterFn(type)) {
|
||
removeOne(obj, type, null, null, id);
|
||
}
|
||
}
|
||
}
|
||
|
||
var mouseSubst = {
|
||
mouseenter: 'mouseover',
|
||
mouseleave: 'mouseout',
|
||
wheel: !('onwheel' in window) && 'mousewheel'
|
||
};
|
||
|
||
function addOne(obj, type, fn, context) {
|
||
var id = type + stamp(fn) + (context ? '_' + stamp(context) : '');
|
||
|
||
if (obj[eventsKey] && obj[eventsKey][id]) { return this; }
|
||
|
||
var handler = function (e) {
|
||
return fn.call(context || obj, e || window.event);
|
||
};
|
||
|
||
var originalHandler = handler;
|
||
|
||
if (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {
|
||
// Needs DomEvent.Pointer.js
|
||
handler = addPointerListener(obj, type, handler);
|
||
|
||
} else if (Browser.touch && (type === 'dblclick')) {
|
||
handler = addDoubleTapListener(obj, handler);
|
||
|
||
} else if ('addEventListener' in obj) {
|
||
|
||
if (type === 'touchstart' || type === 'touchmove' || type === 'wheel' || type === 'mousewheel') {
|
||
obj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);
|
||
|
||
} else if (type === 'mouseenter' || type === 'mouseleave') {
|
||
handler = function (e) {
|
||
e = e || window.event;
|
||
if (isExternalTarget(obj, e)) {
|
||
originalHandler(e);
|
||
}
|
||
};
|
||
obj.addEventListener(mouseSubst[type], handler, false);
|
||
|
||
} else {
|
||
obj.addEventListener(type, originalHandler, false);
|
||
}
|
||
|
||
} else {
|
||
obj.attachEvent('on' + type, handler);
|
||
}
|
||
|
||
obj[eventsKey] = obj[eventsKey] || {};
|
||
obj[eventsKey][id] = handler;
|
||
}
|
||
|
||
function removeOne(obj, type, fn, context, id) {
|
||
id = id || type + stamp(fn) + (context ? '_' + stamp(context) : '');
|
||
var handler = obj[eventsKey] && obj[eventsKey][id];
|
||
|
||
if (!handler) { return this; }
|
||
|
||
if (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {
|
||
removePointerListener(obj, type, handler);
|
||
|
||
} else if (Browser.touch && (type === 'dblclick')) {
|
||
removeDoubleTapListener(obj, handler);
|
||
|
||
} else if ('removeEventListener' in obj) {
|
||
|
||
obj.removeEventListener(mouseSubst[type] || type, handler, false);
|
||
|
||
} else {
|
||
obj.detachEvent('on' + type, handler);
|
||
}
|
||
|
||
obj[eventsKey][id] = null;
|
||
}
|
||
|
||
// @function stopPropagation(ev: DOMEvent): this
|
||
// Stop the given event from propagation to parent elements. Used inside the listener functions:
|
||
// ```js
|
||
// L.DomEvent.on(div, 'click', function (ev) {
|
||
// L.DomEvent.stopPropagation(ev);
|
||
// });
|
||
// ```
|
||
function stopPropagation(e) {
|
||
|
||
if (e.stopPropagation) {
|
||
e.stopPropagation();
|
||
} else if (e.originalEvent) { // In case of Leaflet event.
|
||
e.originalEvent._stopped = true;
|
||
} else {
|
||
e.cancelBubble = true;
|
||
}
|
||
|
||
return this;
|
||
}
|
||
|
||
// @function disableScrollPropagation(el: HTMLElement): this
|
||
// Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).
|
||
function disableScrollPropagation(el) {
|
||
addOne(el, 'wheel', stopPropagation);
|
||
return this;
|
||
}
|
||
|
||
// @function disableClickPropagation(el: HTMLElement): this
|
||
// Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,
|
||
// `'mousedown'` and `'touchstart'` events (plus browser variants).
|
||
function disableClickPropagation(el) {
|
||
on(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);
|
||
el['_leaflet_disable_click'] = true;
|
||
return this;
|
||
}
|
||
|
||
// @function preventDefault(ev: DOMEvent): this
|
||
// Prevents the default action of the DOM Event `ev` from happening (such as
|
||
// following a link in the href of the a element, or doing a POST request
|
||
// with page reload when a `<form>` is submitted).
|
||
// Use it inside listener functions.
|
||
function preventDefault(e) {
|
||
if (e.preventDefault) {
|
||
e.preventDefault();
|
||
} else {
|
||
e.returnValue = false;
|
||
}
|
||
return this;
|
||
}
|
||
|
||
// @function stop(ev: DOMEvent): this
|
||
// Does `stopPropagation` and `preventDefault` at the same time.
|
||
function stop(e) {
|
||
preventDefault(e);
|
||
stopPropagation(e);
|
||
return this;
|
||
}
|
||
|
||
// @function getPropagationPath(ev: DOMEvent): Array
|
||
// Compatibility polyfill for [`Event.composedPath()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath).
|
||
// Returns an array containing the `HTMLElement`s that the given DOM event
|
||
// should propagate to (if not stopped).
|
||
function getPropagationPath(ev) {
|
||
if (ev.composedPath) {
|
||
return ev.composedPath();
|
||
}
|
||
|
||
var path = [];
|
||
var el = ev.target;
|
||
|
||
while (el) {
|
||
path.push(el);
|
||
el = el.parentNode;
|
||
}
|
||
return path;
|
||
}
|
||
|
||
|
||
// @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point
|
||
// Gets normalized mouse position from a DOM event relative to the
|
||
// `container` (border excluded) or to the whole page if not specified.
|
||
function getMousePosition(e, container) {
|
||
if (!container) {
|
||
return new Point(e.clientX, e.clientY);
|
||
}
|
||
|
||
var scale = getScale(container),
|
||
offset = scale.boundingClientRect; // left and top values are in page scale (like the event clientX/Y)
|
||
|
||
return new Point(
|
||
// offset.left/top values are in page scale (like clientX/Y),
|
||
// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).
|
||
(e.clientX - offset.left) / scale.x - container.clientLeft,
|
||
(e.clientY - offset.top) / scale.y - container.clientTop
|
||
);
|
||
}
|
||
|
||
|
||
// except , Safari and
|
||
// We need double the scroll pixels (see #7403 and #4538) for all Browsers
|
||
// except OSX (Mac) -> 3x, Chrome running on Linux 1x
|
||
|
||
var wheelPxFactor =
|
||
(Browser.linux && Browser.chrome) ? window.devicePixelRatio :
|
||
Browser.mac ? window.devicePixelRatio * 3 :
|
||
window.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;
|
||
// @function getWheelDelta(ev: DOMEvent): Number
|
||
// Gets normalized wheel delta from a wheel DOM event, in vertical
|
||
// pixels scrolled (negative if scrolling down).
|
||
// Events from pointing devices without precise scrolling are mapped to
|
||
// a best guess of 60 pixels.
|
||
function getWheelDelta(e) {
|
||
return (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta
|
||
(e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels
|
||
(e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines
|
||
(e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages
|
||
(e.deltaX || e.deltaZ) ? 0 : // Skip horizontal/depth wheel events
|
||
e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels
|
||
(e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines
|
||
e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages
|
||
0;
|
||
}
|
||
|
||
// check if element really left/entered the event target (for mouseenter/mouseleave)
|
||
function isExternalTarget(el, e) {
|
||
|
||
var related = e.relatedTarget;
|
||
|
||
if (!related) { return true; }
|
||
|
||
try {
|
||
while (related && (related !== el)) {
|
||
related = related.parentNode;
|
||
}
|
||
} catch (err) {
|
||
return false;
|
||
}
|
||
return (related !== el);
|
||
}
|
||
|
||
var DomEvent = {
|
||
__proto__: null,
|
||
on: on,
|
||
off: off,
|
||
stopPropagation: stopPropagation,
|
||
disableScrollPropagation: disableScrollPropagation,
|
||
disableClickPropagation: disableClickPropagation,
|
||
preventDefault: preventDefault,
|
||
stop: stop,
|
||
getPropagationPath: getPropagationPath,
|
||
getMousePosition: getMousePosition,
|
||
getWheelDelta: getWheelDelta,
|
||
isExternalTarget: isExternalTarget,
|
||
addListener: on,
|
||
removeListener: off
|
||
};
|
||
|
||
/*
|
||
* @class PosAnimation
|
||
* @aka L.PosAnimation
|
||
* @inherits Evented
|
||
* Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.
|
||
*
|
||
* @example
|
||
* ```js
|
||
* var myPositionMarker = L.marker([48.864716, 2.294694]).addTo(map);
|
||
*
|
||
* myPositionMarker.on("click", function() {
|
||
* var pos = map.latLngToLayerPoint(myPositionMarker.getLatLng());
|
||
* pos.y -= 25;
|
||
* var fx = new L.PosAnimation();
|
||
*
|
||
* fx.once('end',function() {
|
||
* pos.y += 25;
|
||
* fx.run(myPositionMarker._icon, pos, 0.8);
|
||
* });
|
||
*
|
||
* fx.run(myPositionMarker._icon, pos, 0.3);
|
||
* });
|
||
*
|
||
* ```
|
||
*
|
||
* @constructor L.PosAnimation()
|
||
* Creates a `PosAnimation` object.
|
||
*
|
||
*/
|
||
|
||
var PosAnimation = Evented.extend({
|
||
|
||
// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)
|
||
// Run an animation of a given element to a new position, optionally setting
|
||
// duration in seconds (`0.25` by default) and easing linearity factor (3rd
|
||
// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),
|
||
// `0.5` by default).
|
||
run: function (el, newPos, duration, easeLinearity) {
|
||
this.stop();
|
||
|
||
this._el = el;
|
||
this._inProgress = true;
|
||
this._duration = duration || 0.25;
|
||
this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);
|
||
|
||
this._startPos = getPosition(el);
|
||
this._offset = newPos.subtract(this._startPos);
|
||
this._startTime = +new Date();
|
||
|
||
// @event start: Event
|
||
// Fired when the animation starts
|
||
this.fire('start');
|
||
|
||
this._animate();
|
||
},
|
||
|
||
// @method stop()
|
||
// Stops the animation (if currently running).
|
||
stop: function () {
|
||
if (!this._inProgress) { return; }
|
||
|
||
this._step(true);
|
||
this._complete();
|
||
},
|
||
|
||
_animate: function () {
|
||
// animation loop
|
||
this._animId = requestAnimFrame(this._animate, this);
|
||
this._step();
|
||
},
|
||
|
||
_step: function (round) {
|
||
var elapsed = (+new Date()) - this._startTime,
|
||
duration = this._duration * 1000;
|
||
|
||
if (elapsed < duration) {
|
||
this._runFrame(this._easeOut(elapsed / duration), round);
|
||
} else {
|
||
this._runFrame(1);
|
||
this._complete();
|
||
}
|
||
},
|
||
|
||
_runFrame: function (progress, round) {
|
||
var pos = this._startPos.add(this._offset.multiplyBy(progress));
|
||
if (round) {
|
||
pos._round();
|
||
}
|
||
setPosition(this._el, pos);
|
||
|
||
// @event step: Event
|
||
// Fired continuously during the animation.
|
||
this.fire('step');
|
||
},
|
||
|
||
_complete: function () {
|
||
cancelAnimFrame(this._animId);
|
||
|
||
this._inProgress = false;
|
||
// @event end: Event
|
||
// Fired when the animation ends.
|
||
this.fire('end');
|
||
},
|
||
|
||
_easeOut: function (t) {
|
||
return 1 - Math.pow(1 - t, this._easeOutPower);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Map
|
||
* @aka L.Map
|
||
* @inherits Evented
|
||
*
|
||
* The central class of the API — it is used to create a map on a page and manipulate it.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // initialize the map on the "map" div with a given center and zoom
|
||
* var map = L.map('map', {
|
||
* center: [51.505, -0.09],
|
||
* zoom: 13
|
||
* });
|
||
* ```
|
||
*
|
||
*/
|
||
|
||
var Map = Evented.extend({
|
||
|
||
options: {
|
||
// @section Map State Options
|
||
// @option crs: CRS = L.CRS.EPSG3857
|
||
// The [Coordinate Reference System](#crs) to use. Don't change this if you're not
|
||
// sure what it means.
|
||
crs: EPSG3857,
|
||
|
||
// @option center: LatLng = undefined
|
||
// Initial geographic center of the map
|
||
center: undefined,
|
||
|
||
// @option zoom: Number = undefined
|
||
// Initial map zoom level
|
||
zoom: undefined,
|
||
|
||
// @option minZoom: Number = *
|
||
// Minimum zoom level of the map.
|
||
// If not specified and at least one `GridLayer` or `TileLayer` is in the map,
|
||
// the lowest of their `minZoom` options will be used instead.
|
||
minZoom: undefined,
|
||
|
||
// @option maxZoom: Number = *
|
||
// Maximum zoom level of the map.
|
||
// If not specified and at least one `GridLayer` or `TileLayer` is in the map,
|
||
// the highest of their `maxZoom` options will be used instead.
|
||
maxZoom: undefined,
|
||
|
||
// @option layers: Layer[] = []
|
||
// Array of layers that will be added to the map initially
|
||
layers: [],
|
||
|
||
// @option maxBounds: LatLngBounds = null
|
||
// When this option is set, the map restricts the view to the given
|
||
// geographical bounds, bouncing the user back if the user tries to pan
|
||
// outside the view. To set the restriction dynamically, use
|
||
// [`setMaxBounds`](#map-setmaxbounds) method.
|
||
maxBounds: undefined,
|
||
|
||
// @option renderer: Renderer = *
|
||
// The default method for drawing vector layers on the map. `L.SVG`
|
||
// or `L.Canvas` by default depending on browser support.
|
||
renderer: undefined,
|
||
|
||
|
||
// @section Animation Options
|
||
// @option zoomAnimation: Boolean = true
|
||
// Whether the map zoom animation is enabled. By default it's enabled
|
||
// in all browsers that support CSS3 Transitions except Android.
|
||
zoomAnimation: true,
|
||
|
||
// @option zoomAnimationThreshold: Number = 4
|
||
// Won't animate zoom if the zoom difference exceeds this value.
|
||
zoomAnimationThreshold: 4,
|
||
|
||
// @option fadeAnimation: Boolean = true
|
||
// Whether the tile fade animation is enabled. By default it's enabled
|
||
// in all browsers that support CSS3 Transitions except Android.
|
||
fadeAnimation: true,
|
||
|
||
// @option markerZoomAnimation: Boolean = true
|
||
// Whether markers animate their zoom with the zoom animation, if disabled
|
||
// they will disappear for the length of the animation. By default it's
|
||
// enabled in all browsers that support CSS3 Transitions except Android.
|
||
markerZoomAnimation: true,
|
||
|
||
// @option transform3DLimit: Number = 2^23
|
||
// Defines the maximum size of a CSS translation transform. The default
|
||
// value should not be changed unless a web browser positions layers in
|
||
// the wrong place after doing a large `panBy`.
|
||
transform3DLimit: 8388608, // Precision limit of a 32-bit float
|
||
|
||
// @section Interaction Options
|
||
// @option zoomSnap: Number = 1
|
||
// Forces the map's zoom level to always be a multiple of this, particularly
|
||
// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.
|
||
// By default, the zoom level snaps to the nearest integer; lower values
|
||
// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`
|
||
// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.
|
||
zoomSnap: 1,
|
||
|
||
// @option zoomDelta: Number = 1
|
||
// Controls how much the map's zoom level will change after a
|
||
// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`
|
||
// or `-` on the keyboard, or using the [zoom controls](#control-zoom).
|
||
// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.
|
||
zoomDelta: 1,
|
||
|
||
// @option trackResize: Boolean = true
|
||
// Whether the map automatically handles browser window resize to update itself.
|
||
trackResize: true
|
||
},
|
||
|
||
initialize: function (id, options) { // (HTMLElement or String, Object)
|
||
options = setOptions(this, options);
|
||
|
||
// Make sure to assign internal flags at the beginning,
|
||
// to avoid inconsistent state in some edge cases.
|
||
this._handlers = [];
|
||
this._layers = {};
|
||
this._zoomBoundLayers = {};
|
||
this._sizeChanged = true;
|
||
|
||
this._initContainer(id);
|
||
this._initLayout();
|
||
|
||
// hack for https://github.com/Leaflet/Leaflet/issues/1980
|
||
this._onResize = bind(this._onResize, this);
|
||
|
||
this._initEvents();
|
||
|
||
if (options.maxBounds) {
|
||
this.setMaxBounds(options.maxBounds);
|
||
}
|
||
|
||
if (options.zoom !== undefined) {
|
||
this._zoom = this._limitZoom(options.zoom);
|
||
}
|
||
|
||
if (options.center && options.zoom !== undefined) {
|
||
this.setView(toLatLng(options.center), options.zoom, {reset: true});
|
||
}
|
||
|
||
this.callInitHooks();
|
||
|
||
// don't animate on browsers without hardware-accelerated transitions or old Android/Opera
|
||
this._zoomAnimated = TRANSITION && Browser.any3d && !Browser.mobileOpera &&
|
||
this.options.zoomAnimation;
|
||
|
||
// zoom transitions run with the same duration for all layers, so if one of transitionend events
|
||
// happens after starting zoom animation (propagating to the map pane), we know that it ended globally
|
||
if (this._zoomAnimated) {
|
||
this._createAnimProxy();
|
||
on(this._proxy, TRANSITION_END, this._catchTransitionEnd, this);
|
||
}
|
||
|
||
this._addLayers(this.options.layers);
|
||
},
|
||
|
||
|
||
// @section Methods for modifying map state
|
||
|
||
// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this
|
||
// Sets the view of the map (geographical center and zoom) with the given
|
||
// animation options.
|
||
setView: function (center, zoom, options) {
|
||
|
||
zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);
|
||
center = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);
|
||
options = options || {};
|
||
|
||
this._stop();
|
||
|
||
if (this._loaded && !options.reset && options !== true) {
|
||
|
||
if (options.animate !== undefined) {
|
||
options.zoom = extend({animate: options.animate}, options.zoom);
|
||
options.pan = extend({animate: options.animate, duration: options.duration}, options.pan);
|
||
}
|
||
|
||
// try animating pan or zoom
|
||
var moved = (this._zoom !== zoom) ?
|
||
this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
|
||
this._tryAnimatedPan(center, options.pan);
|
||
|
||
if (moved) {
|
||
// prevent resize handler call, the view will refresh after animation anyway
|
||
clearTimeout(this._sizeTimer);
|
||
return this;
|
||
}
|
||
}
|
||
|
||
// animation didn't start, just reset the map view
|
||
this._resetView(center, zoom, options.pan && options.pan.noMoveStart);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method setZoom(zoom: Number, options?: Zoom/pan options): this
|
||
// Sets the zoom of the map.
|
||
setZoom: function (zoom, options) {
|
||
if (!this._loaded) {
|
||
this._zoom = zoom;
|
||
return this;
|
||
}
|
||
return this.setView(this.getCenter(), zoom, {zoom: options});
|
||
},
|
||
|
||
// @method zoomIn(delta?: Number, options?: Zoom options): this
|
||
// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
|
||
zoomIn: function (delta, options) {
|
||
delta = delta || (Browser.any3d ? this.options.zoomDelta : 1);
|
||
return this.setZoom(this._zoom + delta, options);
|
||
},
|
||
|
||
// @method zoomOut(delta?: Number, options?: Zoom options): this
|
||
// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
|
||
zoomOut: function (delta, options) {
|
||
delta = delta || (Browser.any3d ? this.options.zoomDelta : 1);
|
||
return this.setZoom(this._zoom - delta, options);
|
||
},
|
||
|
||
// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this
|
||
// Zooms the map while keeping a specified geographical point on the map
|
||
// stationary (e.g. used internally for scroll zoom and double-click zoom).
|
||
// @alternative
|
||
// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this
|
||
// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.
|
||
setZoomAround: function (latlng, zoom, options) {
|
||
var scale = this.getZoomScale(zoom),
|
||
viewHalf = this.getSize().divideBy(2),
|
||
containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),
|
||
|
||
centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),
|
||
newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));
|
||
|
||
return this.setView(newCenter, zoom, {zoom: options});
|
||
},
|
||
|
||
_getBoundsCenterZoom: function (bounds, options) {
|
||
|
||
options = options || {};
|
||
bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);
|
||
|
||
var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
|
||
paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
|
||
|
||
zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));
|
||
|
||
zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;
|
||
|
||
if (zoom === Infinity) {
|
||
return {
|
||
center: bounds.getCenter(),
|
||
zoom: zoom
|
||
};
|
||
}
|
||
|
||
var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
|
||
|
||
swPoint = this.project(bounds.getSouthWest(), zoom),
|
||
nePoint = this.project(bounds.getNorthEast(), zoom),
|
||
center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);
|
||
|
||
return {
|
||
center: center,
|
||
zoom: zoom
|
||
};
|
||
},
|
||
|
||
// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this
|
||
// Sets a map view that contains the given geographical bounds with the
|
||
// maximum zoom level possible.
|
||
fitBounds: function (bounds, options) {
|
||
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
if (!bounds.isValid()) {
|
||
throw new Error('Bounds are not valid.');
|
||
}
|
||
|
||
var target = this._getBoundsCenterZoom(bounds, options);
|
||
return this.setView(target.center, target.zoom, options);
|
||
},
|
||
|
||
// @method fitWorld(options?: fitBounds options): this
|
||
// Sets a map view that mostly contains the whole world with the maximum
|
||
// zoom level possible.
|
||
fitWorld: function (options) {
|
||
return this.fitBounds([[-90, -180], [90, 180]], options);
|
||
},
|
||
|
||
// @method panTo(latlng: LatLng, options?: Pan options): this
|
||
// Pans the map to a given center.
|
||
panTo: function (center, options) { // (LatLng)
|
||
return this.setView(center, this._zoom, {pan: options});
|
||
},
|
||
|
||
// @method panBy(offset: Point, options?: Pan options): this
|
||
// Pans the map by a given number of pixels (animated).
|
||
panBy: function (offset, options) {
|
||
offset = toPoint(offset).round();
|
||
options = options || {};
|
||
|
||
if (!offset.x && !offset.y) {
|
||
return this.fire('moveend');
|
||
}
|
||
// If we pan too far, Chrome gets issues with tiles
|
||
// and makes them disappear or appear in the wrong place (slightly offset) #2602
|
||
if (options.animate !== true && !this.getSize().contains(offset)) {
|
||
this._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());
|
||
return this;
|
||
}
|
||
|
||
if (!this._panAnim) {
|
||
this._panAnim = new PosAnimation();
|
||
|
||
this._panAnim.on({
|
||
'step': this._onPanTransitionStep,
|
||
'end': this._onPanTransitionEnd
|
||
}, this);
|
||
}
|
||
|
||
// don't fire movestart if animating inertia
|
||
if (!options.noMoveStart) {
|
||
this.fire('movestart');
|
||
}
|
||
|
||
// animate pan unless animate: false specified
|
||
if (options.animate !== false) {
|
||
addClass(this._mapPane, 'leaflet-pan-anim');
|
||
|
||
var newPos = this._getMapPanePos().subtract(offset).round();
|
||
this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
|
||
} else {
|
||
this._rawPanBy(offset);
|
||
this.fire('move').fire('moveend');
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this
|
||
// Sets the view of the map (geographical center and zoom) performing a smooth
|
||
// pan-zoom animation.
|
||
flyTo: function (targetCenter, targetZoom, options) {
|
||
|
||
options = options || {};
|
||
if (options.animate === false || !Browser.any3d) {
|
||
return this.setView(targetCenter, targetZoom, options);
|
||
}
|
||
|
||
this._stop();
|
||
|
||
var from = this.project(this.getCenter()),
|
||
to = this.project(targetCenter),
|
||
size = this.getSize(),
|
||
startZoom = this._zoom;
|
||
|
||
targetCenter = toLatLng(targetCenter);
|
||
targetZoom = targetZoom === undefined ? startZoom : targetZoom;
|
||
|
||
var w0 = Math.max(size.x, size.y),
|
||
w1 = w0 * this.getZoomScale(startZoom, targetZoom),
|
||
u1 = (to.distanceTo(from)) || 1,
|
||
rho = 1.42,
|
||
rho2 = rho * rho;
|
||
|
||
function r(i) {
|
||
var s1 = i ? -1 : 1,
|
||
s2 = i ? w1 : w0,
|
||
t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,
|
||
b1 = 2 * s2 * rho2 * u1,
|
||
b = t1 / b1,
|
||
sq = Math.sqrt(b * b + 1) - b;
|
||
|
||
// workaround for floating point precision bug when sq = 0, log = -Infinite,
|
||
// thus triggering an infinite loop in flyTo
|
||
var log = sq < 0.000000001 ? -18 : Math.log(sq);
|
||
|
||
return log;
|
||
}
|
||
|
||
function sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }
|
||
function cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }
|
||
function tanh(n) { return sinh(n) / cosh(n); }
|
||
|
||
var r0 = r(0);
|
||
|
||
function w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }
|
||
function u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }
|
||
|
||
function easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }
|
||
|
||
var start = Date.now(),
|
||
S = (r(1) - r0) / rho,
|
||
duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;
|
||
|
||
function frame() {
|
||
var t = (Date.now() - start) / duration,
|
||
s = easeOut(t) * S;
|
||
|
||
if (t <= 1) {
|
||
this._flyToFrame = requestAnimFrame(frame, this);
|
||
|
||
this._move(
|
||
this.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),
|
||
this.getScaleZoom(w0 / w(s), startZoom),
|
||
{flyTo: true});
|
||
|
||
} else {
|
||
this
|
||
._move(targetCenter, targetZoom)
|
||
._moveEnd(true);
|
||
}
|
||
}
|
||
|
||
this._moveStart(true, options.noMoveStart);
|
||
|
||
frame.call(this);
|
||
return this;
|
||
},
|
||
|
||
// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this
|
||
// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),
|
||
// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).
|
||
flyToBounds: function (bounds, options) {
|
||
var target = this._getBoundsCenterZoom(bounds, options);
|
||
return this.flyTo(target.center, target.zoom, options);
|
||
},
|
||
|
||
// @method setMaxBounds(bounds: LatLngBounds): this
|
||
// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).
|
||
setMaxBounds: function (bounds) {
|
||
bounds = toLatLngBounds(bounds);
|
||
|
||
if (this.listens('moveend', this._panInsideMaxBounds)) {
|
||
this.off('moveend', this._panInsideMaxBounds);
|
||
}
|
||
|
||
if (!bounds.isValid()) {
|
||
this.options.maxBounds = null;
|
||
return this;
|
||
}
|
||
|
||
this.options.maxBounds = bounds;
|
||
|
||
if (this._loaded) {
|
||
this._panInsideMaxBounds();
|
||
}
|
||
|
||
return this.on('moveend', this._panInsideMaxBounds);
|
||
},
|
||
|
||
// @method setMinZoom(zoom: Number): this
|
||
// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).
|
||
setMinZoom: function (zoom) {
|
||
var oldZoom = this.options.minZoom;
|
||
this.options.minZoom = zoom;
|
||
|
||
if (this._loaded && oldZoom !== zoom) {
|
||
this.fire('zoomlevelschange');
|
||
|
||
if (this.getZoom() < this.options.minZoom) {
|
||
return this.setZoom(zoom);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method setMaxZoom(zoom: Number): this
|
||
// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).
|
||
setMaxZoom: function (zoom) {
|
||
var oldZoom = this.options.maxZoom;
|
||
this.options.maxZoom = zoom;
|
||
|
||
if (this._loaded && oldZoom !== zoom) {
|
||
this.fire('zoomlevelschange');
|
||
|
||
if (this.getZoom() > this.options.maxZoom) {
|
||
return this.setZoom(zoom);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this
|
||
// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.
|
||
panInsideBounds: function (bounds, options) {
|
||
this._enforcingBounds = true;
|
||
var center = this.getCenter(),
|
||
newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));
|
||
|
||
if (!center.equals(newCenter)) {
|
||
this.panTo(newCenter, options);
|
||
}
|
||
|
||
this._enforcingBounds = false;
|
||
return this;
|
||
},
|
||
|
||
// @method panInside(latlng: LatLng, options?: padding options): this
|
||
// Pans the map the minimum amount to make the `latlng` visible. Use
|
||
// padding options to fit the display to more restricted bounds.
|
||
// If `latlng` is already within the (optionally padded) display bounds,
|
||
// the map will not be panned.
|
||
panInside: function (latlng, options) {
|
||
options = options || {};
|
||
|
||
var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
|
||
paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
|
||
pixelCenter = this.project(this.getCenter()),
|
||
pixelPoint = this.project(latlng),
|
||
pixelBounds = this.getPixelBounds(),
|
||
paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),
|
||
paddedSize = paddedBounds.getSize();
|
||
|
||
if (!paddedBounds.contains(pixelPoint)) {
|
||
this._enforcingBounds = true;
|
||
var centerOffset = pixelPoint.subtract(paddedBounds.getCenter());
|
||
var offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);
|
||
pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;
|
||
pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;
|
||
this.panTo(this.unproject(pixelCenter), options);
|
||
this._enforcingBounds = false;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method invalidateSize(options: Zoom/pan options): this
|
||
// Checks if the map container size changed and updates the map if so —
|
||
// call it after you've changed the map size dynamically, also animating
|
||
// pan by default. If `options.pan` is `false`, panning will not occur.
|
||
// If `options.debounceMoveend` is `true`, it will delay `moveend` event so
|
||
// that it doesn't happen often even if the method is called many
|
||
// times in a row.
|
||
|
||
// @alternative
|
||
// @method invalidateSize(animate: Boolean): this
|
||
// Checks if the map container size changed and updates the map if so —
|
||
// call it after you've changed the map size dynamically, also animating
|
||
// pan by default.
|
||
invalidateSize: function (options) {
|
||
if (!this._loaded) { return this; }
|
||
|
||
options = extend({
|
||
animate: false,
|
||
pan: true
|
||
}, options === true ? {animate: true} : options);
|
||
|
||
var oldSize = this.getSize();
|
||
this._sizeChanged = true;
|
||
this._lastCenter = null;
|
||
|
||
var newSize = this.getSize(),
|
||
oldCenter = oldSize.divideBy(2).round(),
|
||
newCenter = newSize.divideBy(2).round(),
|
||
offset = oldCenter.subtract(newCenter);
|
||
|
||
if (!offset.x && !offset.y) { return this; }
|
||
|
||
if (options.animate && options.pan) {
|
||
this.panBy(offset);
|
||
|
||
} else {
|
||
if (options.pan) {
|
||
this._rawPanBy(offset);
|
||
}
|
||
|
||
this.fire('move');
|
||
|
||
if (options.debounceMoveend) {
|
||
clearTimeout(this._sizeTimer);
|
||
this._sizeTimer = setTimeout(bind(this.fire, this, 'moveend'), 200);
|
||
} else {
|
||
this.fire('moveend');
|
||
}
|
||
}
|
||
|
||
// @section Map state change events
|
||
// @event resize: ResizeEvent
|
||
// Fired when the map is resized.
|
||
return this.fire('resize', {
|
||
oldSize: oldSize,
|
||
newSize: newSize
|
||
});
|
||
},
|
||
|
||
// @section Methods for modifying map state
|
||
// @method stop(): this
|
||
// Stops the currently running `panTo` or `flyTo` animation, if any.
|
||
stop: function () {
|
||
this.setZoom(this._limitZoom(this._zoom));
|
||
if (!this.options.zoomSnap) {
|
||
this.fire('viewreset');
|
||
}
|
||
return this._stop();
|
||
},
|
||
|
||
// @section Geolocation methods
|
||
// @method locate(options?: Locate options): this
|
||
// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)
|
||
// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,
|
||
// and optionally sets the map view to the user's location with respect to
|
||
// detection accuracy (or to the world view if geolocation failed).
|
||
// Note that, if your page doesn't use HTTPS, this method will fail in
|
||
// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))
|
||
// See `Locate options` for more details.
|
||
locate: function (options) {
|
||
|
||
options = this._locateOptions = extend({
|
||
timeout: 10000,
|
||
watch: false
|
||
// setView: false
|
||
// maxZoom: <Number>
|
||
// maximumAge: 0
|
||
// enableHighAccuracy: false
|
||
}, options);
|
||
|
||
if (!('geolocation' in navigator)) {
|
||
this._handleGeolocationError({
|
||
code: 0,
|
||
message: 'Geolocation not supported.'
|
||
});
|
||
return this;
|
||
}
|
||
|
||
var onResponse = bind(this._handleGeolocationResponse, this),
|
||
onError = bind(this._handleGeolocationError, this);
|
||
|
||
if (options.watch) {
|
||
this._locationWatchId =
|
||
navigator.geolocation.watchPosition(onResponse, onError, options);
|
||
} else {
|
||
navigator.geolocation.getCurrentPosition(onResponse, onError, options);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method stopLocate(): this
|
||
// Stops watching location previously initiated by `map.locate({watch: true})`
|
||
// and aborts resetting the map view if map.locate was called with
|
||
// `{setView: true}`.
|
||
stopLocate: function () {
|
||
if (navigator.geolocation && navigator.geolocation.clearWatch) {
|
||
navigator.geolocation.clearWatch(this._locationWatchId);
|
||
}
|
||
if (this._locateOptions) {
|
||
this._locateOptions.setView = false;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_handleGeolocationError: function (error) {
|
||
if (!this._container._leaflet_id) { return; }
|
||
|
||
var c = error.code,
|
||
message = error.message ||
|
||
(c === 1 ? 'permission denied' :
|
||
(c === 2 ? 'position unavailable' : 'timeout'));
|
||
|
||
if (this._locateOptions.setView && !this._loaded) {
|
||
this.fitWorld();
|
||
}
|
||
|
||
// @section Location events
|
||
// @event locationerror: ErrorEvent
|
||
// Fired when geolocation (using the [`locate`](#map-locate) method) failed.
|
||
this.fire('locationerror', {
|
||
code: c,
|
||
message: 'Geolocation error: ' + message + '.'
|
||
});
|
||
},
|
||
|
||
_handleGeolocationResponse: function (pos) {
|
||
if (!this._container._leaflet_id) { return; }
|
||
|
||
var lat = pos.coords.latitude,
|
||
lng = pos.coords.longitude,
|
||
latlng = new LatLng(lat, lng),
|
||
bounds = latlng.toBounds(pos.coords.accuracy * 2),
|
||
options = this._locateOptions;
|
||
|
||
if (options.setView) {
|
||
var zoom = this.getBoundsZoom(bounds);
|
||
this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);
|
||
}
|
||
|
||
var data = {
|
||
latlng: latlng,
|
||
bounds: bounds,
|
||
timestamp: pos.timestamp
|
||
};
|
||
|
||
for (var i in pos.coords) {
|
||
if (typeof pos.coords[i] === 'number') {
|
||
data[i] = pos.coords[i];
|
||
}
|
||
}
|
||
|
||
// @event locationfound: LocationEvent
|
||
// Fired when geolocation (using the [`locate`](#map-locate) method)
|
||
// went successfully.
|
||
this.fire('locationfound', data);
|
||
},
|
||
|
||
// TODO Appropriate docs section?
|
||
// @section Other Methods
|
||
// @method addHandler(name: String, HandlerClass: Function): this
|
||
// Adds a new `Handler` to the map, given its name and constructor function.
|
||
addHandler: function (name, HandlerClass) {
|
||
if (!HandlerClass) { return this; }
|
||
|
||
var handler = this[name] = new HandlerClass(this);
|
||
|
||
this._handlers.push(handler);
|
||
|
||
if (this.options[name]) {
|
||
handler.enable();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method remove(): this
|
||
// Destroys the map and clears all related event listeners.
|
||
remove: function () {
|
||
|
||
this._initEvents(true);
|
||
if (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }
|
||
|
||
if (this._containerId !== this._container._leaflet_id) {
|
||
throw new Error('Map container is being reused by another instance');
|
||
}
|
||
|
||
try {
|
||
// throws error in IE6-8
|
||
delete this._container._leaflet_id;
|
||
delete this._containerId;
|
||
} catch (e) {
|
||
/*eslint-disable */
|
||
this._container._leaflet_id = undefined;
|
||
/* eslint-enable */
|
||
this._containerId = undefined;
|
||
}
|
||
|
||
if (this._locationWatchId !== undefined) {
|
||
this.stopLocate();
|
||
}
|
||
|
||
this._stop();
|
||
|
||
remove(this._mapPane);
|
||
|
||
if (this._clearControlPos) {
|
||
this._clearControlPos();
|
||
}
|
||
if (this._resizeRequest) {
|
||
cancelAnimFrame(this._resizeRequest);
|
||
this._resizeRequest = null;
|
||
}
|
||
|
||
this._clearHandlers();
|
||
|
||
if (this._loaded) {
|
||
// @section Map state change events
|
||
// @event unload: Event
|
||
// Fired when the map is destroyed with [remove](#map-remove) method.
|
||
this.fire('unload');
|
||
}
|
||
|
||
var i;
|
||
for (i in this._layers) {
|
||
this._layers[i].remove();
|
||
}
|
||
for (i in this._panes) {
|
||
remove(this._panes[i]);
|
||
}
|
||
|
||
this._layers = [];
|
||
this._panes = [];
|
||
delete this._mapPane;
|
||
delete this._renderer;
|
||
|
||
return this;
|
||
},
|
||
|
||
// @section Other Methods
|
||
// @method createPane(name: String, container?: HTMLElement): HTMLElement
|
||
// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,
|
||
// then returns it. The pane is created as a child of `container`, or
|
||
// as a child of the main map pane if not set.
|
||
createPane: function (name, container) {
|
||
var className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),
|
||
pane = create$1('div', className, container || this._mapPane);
|
||
|
||
if (name) {
|
||
this._panes[name] = pane;
|
||
}
|
||
return pane;
|
||
},
|
||
|
||
// @section Methods for Getting Map State
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the geographical center of the map view
|
||
getCenter: function () {
|
||
this._checkIfLoaded();
|
||
|
||
if (this._lastCenter && !this._moved()) {
|
||
return this._lastCenter.clone();
|
||
}
|
||
return this.layerPointToLatLng(this._getCenterLayerPoint());
|
||
},
|
||
|
||
// @method getZoom(): Number
|
||
// Returns the current zoom level of the map view
|
||
getZoom: function () {
|
||
return this._zoom;
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the geographical bounds visible in the current map view
|
||
getBounds: function () {
|
||
var bounds = this.getPixelBounds(),
|
||
sw = this.unproject(bounds.getBottomLeft()),
|
||
ne = this.unproject(bounds.getTopRight());
|
||
|
||
return new LatLngBounds(sw, ne);
|
||
},
|
||
|
||
// @method getMinZoom(): Number
|
||
// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.
|
||
getMinZoom: function () {
|
||
return this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;
|
||
},
|
||
|
||
// @method getMaxZoom(): Number
|
||
// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).
|
||
getMaxZoom: function () {
|
||
return this.options.maxZoom === undefined ?
|
||
(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :
|
||
this.options.maxZoom;
|
||
},
|
||
|
||
// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number
|
||
// Returns the maximum zoom level on which the given bounds fit to the map
|
||
// view in its entirety. If `inside` (optional) is set to `true`, the method
|
||
// instead returns the minimum zoom level on which the map view fits into
|
||
// the given bounds in its entirety.
|
||
getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number
|
||
bounds = toLatLngBounds(bounds);
|
||
padding = toPoint(padding || [0, 0]);
|
||
|
||
var zoom = this.getZoom() || 0,
|
||
min = this.getMinZoom(),
|
||
max = this.getMaxZoom(),
|
||
nw = bounds.getNorthWest(),
|
||
se = bounds.getSouthEast(),
|
||
size = this.getSize().subtract(padding),
|
||
boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),
|
||
snap = Browser.any3d ? this.options.zoomSnap : 1,
|
||
scalex = size.x / boundsSize.x,
|
||
scaley = size.y / boundsSize.y,
|
||
scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);
|
||
|
||
zoom = this.getScaleZoom(scale, zoom);
|
||
|
||
if (snap) {
|
||
zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level
|
||
zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;
|
||
}
|
||
|
||
return Math.max(min, Math.min(max, zoom));
|
||
},
|
||
|
||
// @method getSize(): Point
|
||
// Returns the current size of the map container (in pixels).
|
||
getSize: function () {
|
||
if (!this._size || this._sizeChanged) {
|
||
this._size = new Point(
|
||
this._container.clientWidth || 0,
|
||
this._container.clientHeight || 0);
|
||
|
||
this._sizeChanged = false;
|
||
}
|
||
return this._size.clone();
|
||
},
|
||
|
||
// @method getPixelBounds(): Bounds
|
||
// Returns the bounds of the current map view in projected pixel
|
||
// coordinates (sometimes useful in layer and overlay implementations).
|
||
getPixelBounds: function (center, zoom) {
|
||
var topLeftPoint = this._getTopLeftPoint(center, zoom);
|
||
return new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
|
||
},
|
||
|
||
// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to
|
||
// the map pane? "left point of the map layer" can be confusing, specially
|
||
// since there can be negative offsets.
|
||
// @method getPixelOrigin(): Point
|
||
// Returns the projected pixel coordinates of the top left point of
|
||
// the map layer (useful in custom layer and overlay implementations).
|
||
getPixelOrigin: function () {
|
||
this._checkIfLoaded();
|
||
return this._pixelOrigin;
|
||
},
|
||
|
||
// @method getPixelWorldBounds(zoom?: Number): Bounds
|
||
// Returns the world's bounds in pixel coordinates for zoom level `zoom`.
|
||
// If `zoom` is omitted, the map's current zoom level is used.
|
||
getPixelWorldBounds: function (zoom) {
|
||
return this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);
|
||
},
|
||
|
||
// @section Other Methods
|
||
|
||
// @method getPane(pane: String|HTMLElement): HTMLElement
|
||
// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).
|
||
getPane: function (pane) {
|
||
return typeof pane === 'string' ? this._panes[pane] : pane;
|
||
},
|
||
|
||
// @method getPanes(): Object
|
||
// Returns a plain object containing the names of all [panes](#map-pane) as keys and
|
||
// the panes as values.
|
||
getPanes: function () {
|
||
return this._panes;
|
||
},
|
||
|
||
// @method getContainer: HTMLElement
|
||
// Returns the HTML element that contains the map.
|
||
getContainer: function () {
|
||
return this._container;
|
||
},
|
||
|
||
|
||
// @section Conversion Methods
|
||
|
||
// @method getZoomScale(toZoom: Number, fromZoom: Number): Number
|
||
// Returns the scale factor to be applied to a map transition from zoom level
|
||
// `fromZoom` to `toZoom`. Used internally to help with zoom animations.
|
||
getZoomScale: function (toZoom, fromZoom) {
|
||
// TODO replace with universal implementation after refactoring projections
|
||
var crs = this.options.crs;
|
||
fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
|
||
return crs.scale(toZoom) / crs.scale(fromZoom);
|
||
},
|
||
|
||
// @method getScaleZoom(scale: Number, fromZoom: Number): Number
|
||
// Returns the zoom level that the map would end up at, if it is at `fromZoom`
|
||
// level and everything is scaled by a factor of `scale`. Inverse of
|
||
// [`getZoomScale`](#map-getZoomScale).
|
||
getScaleZoom: function (scale, fromZoom) {
|
||
var crs = this.options.crs;
|
||
fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
|
||
var zoom = crs.zoom(scale * crs.scale(fromZoom));
|
||
return isNaN(zoom) ? Infinity : zoom;
|
||
},
|
||
|
||
// @method project(latlng: LatLng, zoom: Number): Point
|
||
// Projects a geographical coordinate `LatLng` according to the projection
|
||
// of the map's CRS, then scales it according to `zoom` and the CRS's
|
||
// `Transformation`. The result is pixel coordinate relative to
|
||
// the CRS origin.
|
||
project: function (latlng, zoom) {
|
||
zoom = zoom === undefined ? this._zoom : zoom;
|
||
return this.options.crs.latLngToPoint(toLatLng(latlng), zoom);
|
||
},
|
||
|
||
// @method unproject(point: Point, zoom: Number): LatLng
|
||
// Inverse of [`project`](#map-project).
|
||
unproject: function (point, zoom) {
|
||
zoom = zoom === undefined ? this._zoom : zoom;
|
||
return this.options.crs.pointToLatLng(toPoint(point), zoom);
|
||
},
|
||
|
||
// @method layerPointToLatLng(point: Point): LatLng
|
||
// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
|
||
// returns the corresponding geographical coordinate (for the current zoom level).
|
||
layerPointToLatLng: function (point) {
|
||
var projectedPoint = toPoint(point).add(this.getPixelOrigin());
|
||
return this.unproject(projectedPoint);
|
||
},
|
||
|
||
// @method latLngToLayerPoint(latlng: LatLng): Point
|
||
// Given a geographical coordinate, returns the corresponding pixel coordinate
|
||
// relative to the [origin pixel](#map-getpixelorigin).
|
||
latLngToLayerPoint: function (latlng) {
|
||
var projectedPoint = this.project(toLatLng(latlng))._round();
|
||
return projectedPoint._subtract(this.getPixelOrigin());
|
||
},
|
||
|
||
// @method wrapLatLng(latlng: LatLng): LatLng
|
||
// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the
|
||
// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the
|
||
// CRS's bounds.
|
||
// By default this means longitude is wrapped around the dateline so its
|
||
// value is between -180 and +180 degrees.
|
||
wrapLatLng: function (latlng) {
|
||
return this.options.crs.wrapLatLng(toLatLng(latlng));
|
||
},
|
||
|
||
// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
|
||
// Returns a `LatLngBounds` with the same size as the given one, ensuring that
|
||
// its center is within the CRS's bounds.
|
||
// By default this means the center longitude is wrapped around the dateline so its
|
||
// value is between -180 and +180 degrees, and the majority of the bounds
|
||
// overlaps the CRS's bounds.
|
||
wrapLatLngBounds: function (latlng) {
|
||
return this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));
|
||
},
|
||
|
||
// @method distance(latlng1: LatLng, latlng2: LatLng): Number
|
||
// Returns the distance between two geographical coordinates according to
|
||
// the map's CRS. By default this measures distance in meters.
|
||
distance: function (latlng1, latlng2) {
|
||
return this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));
|
||
},
|
||
|
||
// @method containerPointToLayerPoint(point: Point): Point
|
||
// Given a pixel coordinate relative to the map container, returns the corresponding
|
||
// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).
|
||
containerPointToLayerPoint: function (point) { // (Point)
|
||
return toPoint(point).subtract(this._getMapPanePos());
|
||
},
|
||
|
||
// @method layerPointToContainerPoint(point: Point): Point
|
||
// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
|
||
// returns the corresponding pixel coordinate relative to the map container.
|
||
layerPointToContainerPoint: function (point) { // (Point)
|
||
return toPoint(point).add(this._getMapPanePos());
|
||
},
|
||
|
||
// @method containerPointToLatLng(point: Point): LatLng
|
||
// Given a pixel coordinate relative to the map container, returns
|
||
// the corresponding geographical coordinate (for the current zoom level).
|
||
containerPointToLatLng: function (point) {
|
||
var layerPoint = this.containerPointToLayerPoint(toPoint(point));
|
||
return this.layerPointToLatLng(layerPoint);
|
||
},
|
||
|
||
// @method latLngToContainerPoint(latlng: LatLng): Point
|
||
// Given a geographical coordinate, returns the corresponding pixel coordinate
|
||
// relative to the map container.
|
||
latLngToContainerPoint: function (latlng) {
|
||
return this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));
|
||
},
|
||
|
||
// @method mouseEventToContainerPoint(ev: MouseEvent): Point
|
||
// Given a MouseEvent object, returns the pixel coordinate relative to the
|
||
// map container where the event took place.
|
||
mouseEventToContainerPoint: function (e) {
|
||
return getMousePosition(e, this._container);
|
||
},
|
||
|
||
// @method mouseEventToLayerPoint(ev: MouseEvent): Point
|
||
// Given a MouseEvent object, returns the pixel coordinate relative to
|
||
// the [origin pixel](#map-getpixelorigin) where the event took place.
|
||
mouseEventToLayerPoint: function (e) {
|
||
return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
|
||
},
|
||
|
||
// @method mouseEventToLatLng(ev: MouseEvent): LatLng
|
||
// Given a MouseEvent object, returns geographical coordinate where the
|
||
// event took place.
|
||
mouseEventToLatLng: function (e) { // (MouseEvent)
|
||
return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
|
||
},
|
||
|
||
|
||
// map initialization methods
|
||
|
||
_initContainer: function (id) {
|
||
var container = this._container = get(id);
|
||
|
||
if (!container) {
|
||
throw new Error('Map container not found.');
|
||
} else if (container._leaflet_id) {
|
||
throw new Error('Map container is already initialized.');
|
||
}
|
||
|
||
on(container, 'scroll', this._onScroll, this);
|
||
this._containerId = stamp(container);
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var container = this._container;
|
||
|
||
this._fadeAnimated = this.options.fadeAnimation && Browser.any3d;
|
||
|
||
addClass(container, 'leaflet-container' +
|
||
(Browser.touch ? ' leaflet-touch' : '') +
|
||
(Browser.retina ? ' leaflet-retina' : '') +
|
||
(Browser.ielt9 ? ' leaflet-oldie' : '') +
|
||
(Browser.safari ? ' leaflet-safari' : '') +
|
||
(this._fadeAnimated ? ' leaflet-fade-anim' : ''));
|
||
|
||
var position = getStyle(container, 'position');
|
||
|
||
if (position !== 'absolute' && position !== 'relative' && position !== 'fixed' && position !== 'sticky') {
|
||
container.style.position = 'relative';
|
||
}
|
||
|
||
this._initPanes();
|
||
|
||
if (this._initControlPos) {
|
||
this._initControlPos();
|
||
}
|
||
},
|
||
|
||
_initPanes: function () {
|
||
var panes = this._panes = {};
|
||
this._paneRenderers = {};
|
||
|
||
// @section
|
||
//
|
||
// Panes are DOM elements used to control the ordering of layers on the map. You
|
||
// can access panes with [`map.getPane`](#map-getpane) or
|
||
// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the
|
||
// [`map.createPane`](#map-createpane) method.
|
||
//
|
||
// Every map has the following default panes that differ only in zIndex.
|
||
//
|
||
// @pane mapPane: HTMLElement = 'auto'
|
||
// Pane that contains all other map panes
|
||
|
||
this._mapPane = this.createPane('mapPane', this._container);
|
||
setPosition(this._mapPane, new Point(0, 0));
|
||
|
||
// @pane tilePane: HTMLElement = 200
|
||
// Pane for `GridLayer`s and `TileLayer`s
|
||
this.createPane('tilePane');
|
||
// @pane overlayPane: HTMLElement = 400
|
||
// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s
|
||
this.createPane('overlayPane');
|
||
// @pane shadowPane: HTMLElement = 500
|
||
// Pane for overlay shadows (e.g. `Marker` shadows)
|
||
this.createPane('shadowPane');
|
||
// @pane markerPane: HTMLElement = 600
|
||
// Pane for `Icon`s of `Marker`s
|
||
this.createPane('markerPane');
|
||
// @pane tooltipPane: HTMLElement = 650
|
||
// Pane for `Tooltip`s.
|
||
this.createPane('tooltipPane');
|
||
// @pane popupPane: HTMLElement = 700
|
||
// Pane for `Popup`s.
|
||
this.createPane('popupPane');
|
||
|
||
if (!this.options.markerZoomAnimation) {
|
||
addClass(panes.markerPane, 'leaflet-zoom-hide');
|
||
addClass(panes.shadowPane, 'leaflet-zoom-hide');
|
||
}
|
||
},
|
||
|
||
|
||
// private methods that modify map state
|
||
|
||
// @section Map state change events
|
||
_resetView: function (center, zoom, noMoveStart) {
|
||
setPosition(this._mapPane, new Point(0, 0));
|
||
|
||
var loading = !this._loaded;
|
||
this._loaded = true;
|
||
zoom = this._limitZoom(zoom);
|
||
|
||
this.fire('viewprereset');
|
||
|
||
var zoomChanged = this._zoom !== zoom;
|
||
this
|
||
._moveStart(zoomChanged, noMoveStart)
|
||
._move(center, zoom)
|
||
._moveEnd(zoomChanged);
|
||
|
||
// @event viewreset: Event
|
||
// Fired when the map needs to redraw its content (this usually happens
|
||
// on map zoom or load). Very useful for creating custom overlays.
|
||
this.fire('viewreset');
|
||
|
||
// @event load: Event
|
||
// Fired when the map is initialized (when its center and zoom are set
|
||
// for the first time).
|
||
if (loading) {
|
||
this.fire('load');
|
||
}
|
||
},
|
||
|
||
_moveStart: function (zoomChanged, noMoveStart) {
|
||
// @event zoomstart: Event
|
||
// Fired when the map zoom is about to change (e.g. before zoom animation).
|
||
// @event movestart: Event
|
||
// Fired when the view of the map starts changing (e.g. user starts dragging the map).
|
||
if (zoomChanged) {
|
||
this.fire('zoomstart');
|
||
}
|
||
if (!noMoveStart) {
|
||
this.fire('movestart');
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_move: function (center, zoom, data, supressEvent) {
|
||
if (zoom === undefined) {
|
||
zoom = this._zoom;
|
||
}
|
||
var zoomChanged = this._zoom !== zoom;
|
||
|
||
this._zoom = zoom;
|
||
this._lastCenter = center;
|
||
this._pixelOrigin = this._getNewPixelOrigin(center);
|
||
|
||
if (!supressEvent) {
|
||
// @event zoom: Event
|
||
// Fired repeatedly during any change in zoom level,
|
||
// including zoom and fly animations.
|
||
if (zoomChanged || (data && data.pinch)) { // Always fire 'zoom' if pinching because #3530
|
||
this.fire('zoom', data);
|
||
}
|
||
|
||
// @event move: Event
|
||
// Fired repeatedly during any movement of the map,
|
||
// including pan and fly animations.
|
||
this.fire('move', data);
|
||
} else if (data && data.pinch) { // Always fire 'zoom' if pinching because #3530
|
||
this.fire('zoom', data);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_moveEnd: function (zoomChanged) {
|
||
// @event zoomend: Event
|
||
// Fired when the map zoom changed, after any animations.
|
||
if (zoomChanged) {
|
||
this.fire('zoomend');
|
||
}
|
||
|
||
// @event moveend: Event
|
||
// Fired when the center of the map stops changing
|
||
// (e.g. user stopped dragging the map or after non-centered zoom).
|
||
return this.fire('moveend');
|
||
},
|
||
|
||
_stop: function () {
|
||
cancelAnimFrame(this._flyToFrame);
|
||
if (this._panAnim) {
|
||
this._panAnim.stop();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_rawPanBy: function (offset) {
|
||
setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
|
||
},
|
||
|
||
_getZoomSpan: function () {
|
||
return this.getMaxZoom() - this.getMinZoom();
|
||
},
|
||
|
||
_panInsideMaxBounds: function () {
|
||
if (!this._enforcingBounds) {
|
||
this.panInsideBounds(this.options.maxBounds);
|
||
}
|
||
},
|
||
|
||
_checkIfLoaded: function () {
|
||
if (!this._loaded) {
|
||
throw new Error('Set map center and zoom first.');
|
||
}
|
||
},
|
||
|
||
// DOM event handling
|
||
|
||
// @section Interaction events
|
||
_initEvents: function (remove) {
|
||
this._targets = {};
|
||
this._targets[stamp(this._container)] = this;
|
||
|
||
var onOff = remove ? off : on;
|
||
|
||
// @event click: MouseEvent
|
||
// Fired when the user clicks (or taps) the map.
|
||
// @event dblclick: MouseEvent
|
||
// Fired when the user double-clicks (or double-taps) the map.
|
||
// @event mousedown: MouseEvent
|
||
// Fired when the user pushes the mouse button on the map.
|
||
// @event mouseup: MouseEvent
|
||
// Fired when the user releases the mouse button on the map.
|
||
// @event mouseover: MouseEvent
|
||
// Fired when the mouse enters the map.
|
||
// @event mouseout: MouseEvent
|
||
// Fired when the mouse leaves the map.
|
||
// @event mousemove: MouseEvent
|
||
// Fired while the mouse moves over the map.
|
||
// @event contextmenu: MouseEvent
|
||
// Fired when the user pushes the right mouse button on the map, prevents
|
||
// default browser context menu from showing if there are listeners on
|
||
// this event. Also fired on mobile when the user holds a single touch
|
||
// for a second (also called long press).
|
||
// @event keypress: KeyboardEvent
|
||
// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.
|
||
// @event keydown: KeyboardEvent
|
||
// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,
|
||
// the `keydown` event is fired for keys that produce a character value and for keys
|
||
// that do not produce a character value.
|
||
// @event keyup: KeyboardEvent
|
||
// Fired when the user releases a key from the keyboard while the map is focused.
|
||
onOff(this._container, 'click dblclick mousedown mouseup ' +
|
||
'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);
|
||
|
||
if (this.options.trackResize) {
|
||
onOff(window, 'resize', this._onResize, this);
|
||
}
|
||
|
||
if (Browser.any3d && this.options.transform3DLimit) {
|
||
(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);
|
||
}
|
||
},
|
||
|
||
_onResize: function () {
|
||
cancelAnimFrame(this._resizeRequest);
|
||
this._resizeRequest = requestAnimFrame(
|
||
function () { this.invalidateSize({debounceMoveend: true}); }, this);
|
||
},
|
||
|
||
_onScroll: function () {
|
||
this._container.scrollTop = 0;
|
||
this._container.scrollLeft = 0;
|
||
},
|
||
|
||
_onMoveEnd: function () {
|
||
var pos = this._getMapPanePos();
|
||
if (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {
|
||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have
|
||
// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/
|
||
this._resetView(this.getCenter(), this.getZoom());
|
||
}
|
||
},
|
||
|
||
_findEventTargets: function (e, type) {
|
||
var targets = [],
|
||
target,
|
||
isHover = type === 'mouseout' || type === 'mouseover',
|
||
src = e.target || e.srcElement,
|
||
dragging = false;
|
||
|
||
while (src) {
|
||
target = this._targets[stamp(src)];
|
||
if (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {
|
||
// Prevent firing click after you just dragged an object.
|
||
dragging = true;
|
||
break;
|
||
}
|
||
if (target && target.listens(type, true)) {
|
||
if (isHover && !isExternalTarget(src, e)) { break; }
|
||
targets.push(target);
|
||
if (isHover) { break; }
|
||
}
|
||
if (src === this._container) { break; }
|
||
src = src.parentNode;
|
||
}
|
||
if (!targets.length && !dragging && !isHover && this.listens(type, true)) {
|
||
targets = [this];
|
||
}
|
||
return targets;
|
||
},
|
||
|
||
_isClickDisabled: function (el) {
|
||
while (el && el !== this._container) {
|
||
if (el['_leaflet_disable_click']) { return true; }
|
||
el = el.parentNode;
|
||
}
|
||
},
|
||
|
||
_handleDOMEvent: function (e) {
|
||
var el = (e.target || e.srcElement);
|
||
if (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {
|
||
return;
|
||
}
|
||
|
||
var type = e.type;
|
||
|
||
if (type === 'mousedown') {
|
||
// prevents outline when clicking on keyboard-focusable element
|
||
preventOutline(el);
|
||
}
|
||
|
||
this._fireDOMEvent(e, type);
|
||
},
|
||
|
||
_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],
|
||
|
||
_fireDOMEvent: function (e, type, canvasTargets) {
|
||
|
||
if (e.type === 'click') {
|
||
// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).
|
||
// @event preclick: MouseEvent
|
||
// Fired before mouse click on the map (sometimes useful when you
|
||
// want something to happen on click before any existing click
|
||
// handlers start running).
|
||
var synth = extend({}, e);
|
||
synth.type = 'preclick';
|
||
this._fireDOMEvent(synth, synth.type, canvasTargets);
|
||
}
|
||
|
||
// Find the layer the event is propagating from and its parents.
|
||
var targets = this._findEventTargets(e, type);
|
||
|
||
if (canvasTargets) {
|
||
var filtered = []; // pick only targets with listeners
|
||
for (var i = 0; i < canvasTargets.length; i++) {
|
||
if (canvasTargets[i].listens(type, true)) {
|
||
filtered.push(canvasTargets[i]);
|
||
}
|
||
}
|
||
targets = filtered.concat(targets);
|
||
}
|
||
|
||
if (!targets.length) { return; }
|
||
|
||
if (type === 'contextmenu') {
|
||
preventDefault(e);
|
||
}
|
||
|
||
var target = targets[0];
|
||
var data = {
|
||
originalEvent: e
|
||
};
|
||
|
||
if (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {
|
||
var isMarker = target.getLatLng && (!target._radius || target._radius <= 10);
|
||
data.containerPoint = isMarker ?
|
||
this.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);
|
||
data.layerPoint = this.containerPointToLayerPoint(data.containerPoint);
|
||
data.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);
|
||
}
|
||
|
||
for (i = 0; i < targets.length; i++) {
|
||
targets[i].fire(type, data, true);
|
||
if (data.originalEvent._stopped ||
|
||
(targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1)) { return; }
|
||
}
|
||
},
|
||
|
||
_draggableMoved: function (obj) {
|
||
obj = obj.dragging && obj.dragging.enabled() ? obj : this;
|
||
return (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());
|
||
},
|
||
|
||
_clearHandlers: function () {
|
||
for (var i = 0, len = this._handlers.length; i < len; i++) {
|
||
this._handlers[i].disable();
|
||
}
|
||
},
|
||
|
||
// @section Other Methods
|
||
|
||
// @method whenReady(fn: Function, context?: Object): this
|
||
// Runs the given function `fn` when the map gets initialized with
|
||
// a view (center and zoom) and at least one layer, or immediately
|
||
// if it's already initialized, optionally passing a function context.
|
||
whenReady: function (callback, context) {
|
||
if (this._loaded) {
|
||
callback.call(context || this, {target: this});
|
||
} else {
|
||
this.on('load', callback, context);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
|
||
// private methods for getting map state
|
||
|
||
_getMapPanePos: function () {
|
||
return getPosition(this._mapPane) || new Point(0, 0);
|
||
},
|
||
|
||
_moved: function () {
|
||
var pos = this._getMapPanePos();
|
||
return pos && !pos.equals([0, 0]);
|
||
},
|
||
|
||
_getTopLeftPoint: function (center, zoom) {
|
||
var pixelOrigin = center && zoom !== undefined ?
|
||
this._getNewPixelOrigin(center, zoom) :
|
||
this.getPixelOrigin();
|
||
return pixelOrigin.subtract(this._getMapPanePos());
|
||
},
|
||
|
||
_getNewPixelOrigin: function (center, zoom) {
|
||
var viewHalf = this.getSize()._divideBy(2);
|
||
return this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();
|
||
},
|
||
|
||
_latLngToNewLayerPoint: function (latlng, zoom, center) {
|
||
var topLeft = this._getNewPixelOrigin(center, zoom);
|
||
return this.project(latlng, zoom)._subtract(topLeft);
|
||
},
|
||
|
||
_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {
|
||
var topLeft = this._getNewPixelOrigin(center, zoom);
|
||
return toBounds([
|
||
this.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),
|
||
this.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),
|
||
this.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),
|
||
this.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)
|
||
]);
|
||
},
|
||
|
||
// layer point of the current center
|
||
_getCenterLayerPoint: function () {
|
||
return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
|
||
},
|
||
|
||
// offset of the specified place to the current center in pixels
|
||
_getCenterOffset: function (latlng) {
|
||
return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());
|
||
},
|
||
|
||
// adjust center for view to get inside bounds
|
||
_limitCenter: function (center, zoom, bounds) {
|
||
|
||
if (!bounds) { return center; }
|
||
|
||
var centerPoint = this.project(center, zoom),
|
||
viewHalf = this.getSize().divideBy(2),
|
||
viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),
|
||
offset = this._getBoundsOffset(viewBounds, bounds, zoom);
|
||
|
||
// If offset is less than a pixel, ignore.
|
||
// This prevents unstable projections from getting into
|
||
// an infinite loop of tiny offsets.
|
||
if (Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1) {
|
||
return center;
|
||
}
|
||
|
||
return this.unproject(centerPoint.add(offset), zoom);
|
||
},
|
||
|
||
// adjust offset for view to get inside bounds
|
||
_limitOffset: function (offset, bounds) {
|
||
if (!bounds) { return offset; }
|
||
|
||
var viewBounds = this.getPixelBounds(),
|
||
newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));
|
||
|
||
return offset.add(this._getBoundsOffset(newBounds, bounds));
|
||
},
|
||
|
||
// returns offset needed for pxBounds to get inside maxBounds at a specified zoom
|
||
_getBoundsOffset: function (pxBounds, maxBounds, zoom) {
|
||
var projectedMaxBounds = toBounds(
|
||
this.project(maxBounds.getNorthEast(), zoom),
|
||
this.project(maxBounds.getSouthWest(), zoom)
|
||
),
|
||
minOffset = projectedMaxBounds.min.subtract(pxBounds.min),
|
||
maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),
|
||
|
||
dx = this._rebound(minOffset.x, -maxOffset.x),
|
||
dy = this._rebound(minOffset.y, -maxOffset.y);
|
||
|
||
return new Point(dx, dy);
|
||
},
|
||
|
||
_rebound: function (left, right) {
|
||
return left + right > 0 ?
|
||
Math.round(left - right) / 2 :
|
||
Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));
|
||
},
|
||
|
||
_limitZoom: function (zoom) {
|
||
var min = this.getMinZoom(),
|
||
max = this.getMaxZoom(),
|
||
snap = Browser.any3d ? this.options.zoomSnap : 1;
|
||
if (snap) {
|
||
zoom = Math.round(zoom / snap) * snap;
|
||
}
|
||
return Math.max(min, Math.min(max, zoom));
|
||
},
|
||
|
||
_onPanTransitionStep: function () {
|
||
this.fire('move');
|
||
},
|
||
|
||
_onPanTransitionEnd: function () {
|
||
removeClass(this._mapPane, 'leaflet-pan-anim');
|
||
this.fire('moveend');
|
||
},
|
||
|
||
_tryAnimatedPan: function (center, options) {
|
||
// difference between the new and current centers in pixels
|
||
var offset = this._getCenterOffset(center)._trunc();
|
||
|
||
// don't animate too far unless animate: true specified in options
|
||
if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
|
||
|
||
this.panBy(offset, options);
|
||
|
||
return true;
|
||
},
|
||
|
||
_createAnimProxy: function () {
|
||
|
||
var proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');
|
||
this._panes.mapPane.appendChild(proxy);
|
||
|
||
this.on('zoomanim', function (e) {
|
||
var prop = TRANSFORM,
|
||
transform = this._proxy.style[prop];
|
||
|
||
setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));
|
||
|
||
// workaround for case when transform is the same and so transitionend event is not fired
|
||
if (transform === this._proxy.style[prop] && this._animatingZoom) {
|
||
this._onZoomTransitionEnd();
|
||
}
|
||
}, this);
|
||
|
||
this.on('load moveend', this._animMoveEnd, this);
|
||
|
||
this._on('unload', this._destroyAnimProxy, this);
|
||
},
|
||
|
||
_destroyAnimProxy: function () {
|
||
remove(this._proxy);
|
||
this.off('load moveend', this._animMoveEnd, this);
|
||
delete this._proxy;
|
||
},
|
||
|
||
_animMoveEnd: function () {
|
||
var c = this.getCenter(),
|
||
z = this.getZoom();
|
||
setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));
|
||
},
|
||
|
||
_catchTransitionEnd: function (e) {
|
||
if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {
|
||
this._onZoomTransitionEnd();
|
||
}
|
||
},
|
||
|
||
_nothingToAnimate: function () {
|
||
return !this._container.getElementsByClassName('leaflet-zoom-animated').length;
|
||
},
|
||
|
||
_tryAnimatedZoom: function (center, zoom, options) {
|
||
|
||
if (this._animatingZoom) { return true; }
|
||
|
||
options = options || {};
|
||
|
||
// don't animate if disabled, not supported or zoom difference is too large
|
||
if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||
|
||
Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
|
||
|
||
// offset is the pixel coords of the zoom origin relative to the current center
|
||
var scale = this.getZoomScale(zoom),
|
||
offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);
|
||
|
||
// don't animate if the zoom origin isn't within one screen from the current center, unless forced
|
||
if (options.animate !== true && !this.getSize().contains(offset)) { return false; }
|
||
|
||
requestAnimFrame(function () {
|
||
this
|
||
._moveStart(true, false)
|
||
._animateZoom(center, zoom, true);
|
||
}, this);
|
||
|
||
return true;
|
||
},
|
||
|
||
_animateZoom: function (center, zoom, startAnim, noUpdate) {
|
||
if (!this._mapPane) { return; }
|
||
|
||
if (startAnim) {
|
||
this._animatingZoom = true;
|
||
|
||
// remember what center/zoom to set after animation
|
||
this._animateToCenter = center;
|
||
this._animateToZoom = zoom;
|
||
|
||
addClass(this._mapPane, 'leaflet-zoom-anim');
|
||
}
|
||
|
||
// @section Other Events
|
||
// @event zoomanim: ZoomAnimEvent
|
||
// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.
|
||
this.fire('zoomanim', {
|
||
center: center,
|
||
zoom: zoom,
|
||
noUpdate: noUpdate
|
||
});
|
||
|
||
if (!this._tempFireZoomEvent) {
|
||
this._tempFireZoomEvent = this._zoom !== this._animateToZoom;
|
||
}
|
||
|
||
this._move(this._animateToCenter, this._animateToZoom, undefined, true);
|
||
|
||
// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693
|
||
setTimeout(bind(this._onZoomTransitionEnd, this), 250);
|
||
},
|
||
|
||
_onZoomTransitionEnd: function () {
|
||
if (!this._animatingZoom) { return; }
|
||
|
||
if (this._mapPane) {
|
||
removeClass(this._mapPane, 'leaflet-zoom-anim');
|
||
}
|
||
|
||
this._animatingZoom = false;
|
||
|
||
this._move(this._animateToCenter, this._animateToZoom, undefined, true);
|
||
|
||
if (this._tempFireZoomEvent) {
|
||
this.fire('zoom');
|
||
}
|
||
delete this._tempFireZoomEvent;
|
||
|
||
this.fire('move');
|
||
|
||
this._moveEnd(true);
|
||
}
|
||
});
|
||
|
||
// @section
|
||
|
||
// @factory L.map(id: String, options?: Map options)
|
||
// Instantiates a map object given the DOM ID of a `<div>` element
|
||
// and optionally an object literal with `Map options`.
|
||
//
|
||
// @alternative
|
||
// @factory L.map(el: HTMLElement, options?: Map options)
|
||
// Instantiates a map object given an instance of a `<div>` HTML element
|
||
// and optionally an object literal with `Map options`.
|
||
function createMap(id, options) {
|
||
return new Map(id, options);
|
||
}
|
||
|
||
/*
|
||
* @class Control
|
||
* @aka L.Control
|
||
* @inherits Class
|
||
*
|
||
* L.Control is a base class for implementing map controls. Handles positioning.
|
||
* All other controls extend from this class.
|
||
*/
|
||
|
||
var Control = Class.extend({
|
||
// @section
|
||
// @aka Control Options
|
||
options: {
|
||
// @option position: String = 'topright'
|
||
// The position of the control (one of the map corners). Possible values are `'topleft'`,
|
||
// `'topright'`, `'bottomleft'` or `'bottomright'`
|
||
position: 'topright'
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
},
|
||
|
||
/* @section
|
||
* Classes extending L.Control will inherit the following methods:
|
||
*
|
||
* @method getPosition: string
|
||
* Returns the position of the control.
|
||
*/
|
||
getPosition: function () {
|
||
return this.options.position;
|
||
},
|
||
|
||
// @method setPosition(position: string): this
|
||
// Sets the position of the control.
|
||
setPosition: function (position) {
|
||
var map = this._map;
|
||
|
||
if (map) {
|
||
map.removeControl(this);
|
||
}
|
||
|
||
this.options.position = position;
|
||
|
||
if (map) {
|
||
map.addControl(this);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method getContainer: HTMLElement
|
||
// Returns the HTMLElement that contains the control.
|
||
getContainer: function () {
|
||
return this._container;
|
||
},
|
||
|
||
// @method addTo(map: Map): this
|
||
// Adds the control to the given map.
|
||
addTo: function (map) {
|
||
this.remove();
|
||
this._map = map;
|
||
|
||
var container = this._container = this.onAdd(map),
|
||
pos = this.getPosition(),
|
||
corner = map._controlCorners[pos];
|
||
|
||
addClass(container, 'leaflet-control');
|
||
|
||
if (pos.indexOf('bottom') !== -1) {
|
||
corner.insertBefore(container, corner.firstChild);
|
||
} else {
|
||
corner.appendChild(container);
|
||
}
|
||
|
||
this._map.on('unload', this.remove, this);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method remove: this
|
||
// Removes the control from the map it is currently active on.
|
||
remove: function () {
|
||
if (!this._map) {
|
||
return this;
|
||
}
|
||
|
||
remove(this._container);
|
||
|
||
if (this.onRemove) {
|
||
this.onRemove(this._map);
|
||
}
|
||
|
||
this._map.off('unload', this.remove, this);
|
||
this._map = null;
|
||
|
||
return this;
|
||
},
|
||
|
||
_refocusOnMap: function (e) {
|
||
// if map exists and event is not a keyboard event
|
||
if (this._map && e && e.screenX > 0 && e.screenY > 0) {
|
||
this._map.getContainer().focus();
|
||
}
|
||
}
|
||
});
|
||
|
||
var control = function (options) {
|
||
return new Control(options);
|
||
};
|
||
|
||
/* @section Extension methods
|
||
* @uninheritable
|
||
*
|
||
* Every control should extend from `L.Control` and (re-)implement the following methods.
|
||
*
|
||
* @method onAdd(map: Map): HTMLElement
|
||
* Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).
|
||
*
|
||
* @method onRemove(map: Map)
|
||
* Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).
|
||
*/
|
||
|
||
/* @namespace Map
|
||
* @section Methods for Layers and Controls
|
||
*/
|
||
Map.include({
|
||
// @method addControl(control: Control): this
|
||
// Adds the given control to the map
|
||
addControl: function (control) {
|
||
control.addTo(this);
|
||
return this;
|
||
},
|
||
|
||
// @method removeControl(control: Control): this
|
||
// Removes the given control from the map
|
||
removeControl: function (control) {
|
||
control.remove();
|
||
return this;
|
||
},
|
||
|
||
_initControlPos: function () {
|
||
var corners = this._controlCorners = {},
|
||
l = 'leaflet-',
|
||
container = this._controlContainer =
|
||
create$1('div', l + 'control-container', this._container);
|
||
|
||
function createCorner(vSide, hSide) {
|
||
var className = l + vSide + ' ' + l + hSide;
|
||
|
||
corners[vSide + hSide] = create$1('div', className, container);
|
||
}
|
||
|
||
createCorner('top', 'left');
|
||
createCorner('top', 'right');
|
||
createCorner('bottom', 'left');
|
||
createCorner('bottom', 'right');
|
||
},
|
||
|
||
_clearControlPos: function () {
|
||
for (var i in this._controlCorners) {
|
||
remove(this._controlCorners[i]);
|
||
}
|
||
remove(this._controlContainer);
|
||
delete this._controlCorners;
|
||
delete this._controlContainer;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Control.Layers
|
||
* @aka L.Control.Layers
|
||
* @inherits Control
|
||
*
|
||
* The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var baseLayers = {
|
||
* "Mapbox": mapbox,
|
||
* "OpenStreetMap": osm
|
||
* };
|
||
*
|
||
* var overlays = {
|
||
* "Marker": marker,
|
||
* "Roads": roadsLayer
|
||
* };
|
||
*
|
||
* L.control.layers(baseLayers, overlays).addTo(map);
|
||
* ```
|
||
*
|
||
* The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:
|
||
*
|
||
* ```js
|
||
* {
|
||
* "<someName1>": layer1,
|
||
* "<someName2>": layer2
|
||
* }
|
||
* ```
|
||
*
|
||
* The layer names can contain HTML, which allows you to add additional styling to the items:
|
||
*
|
||
* ```js
|
||
* {"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>": myLayer}
|
||
* ```
|
||
*/
|
||
|
||
var Layers = Control.extend({
|
||
// @section
|
||
// @aka Control.Layers options
|
||
options: {
|
||
// @option collapsed: Boolean = true
|
||
// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.
|
||
collapsed: true,
|
||
position: 'topright',
|
||
|
||
// @option autoZIndex: Boolean = true
|
||
// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.
|
||
autoZIndex: true,
|
||
|
||
// @option hideSingleBase: Boolean = false
|
||
// If `true`, the base layers in the control will be hidden when there is only one.
|
||
hideSingleBase: false,
|
||
|
||
// @option sortLayers: Boolean = false
|
||
// Whether to sort the layers. When `false`, layers will keep the order
|
||
// in which they were added to the control.
|
||
sortLayers: false,
|
||
|
||
// @option sortFunction: Function = *
|
||
// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
|
||
// that will be used for sorting the layers, when `sortLayers` is `true`.
|
||
// The function receives both the `L.Layer` instances and their names, as in
|
||
// `sortFunction(layerA, layerB, nameA, nameB)`.
|
||
// By default, it sorts layers alphabetically by their name.
|
||
sortFunction: function (layerA, layerB, nameA, nameB) {
|
||
return nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);
|
||
}
|
||
},
|
||
|
||
initialize: function (baseLayers, overlays, options) {
|
||
setOptions(this, options);
|
||
|
||
this._layerControlInputs = [];
|
||
this._layers = [];
|
||
this._lastZIndex = 0;
|
||
this._handlingClick = false;
|
||
|
||
for (var i in baseLayers) {
|
||
this._addLayer(baseLayers[i], i);
|
||
}
|
||
|
||
for (i in overlays) {
|
||
this._addLayer(overlays[i], i, true);
|
||
}
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this._initLayout();
|
||
this._update();
|
||
|
||
this._map = map;
|
||
map.on('zoomend', this._checkDisabledLayers, this);
|
||
|
||
for (var i = 0; i < this._layers.length; i++) {
|
||
this._layers[i].layer.on('add remove', this._onLayerChange, this);
|
||
}
|
||
|
||
return this._container;
|
||
},
|
||
|
||
addTo: function (map) {
|
||
Control.prototype.addTo.call(this, map);
|
||
// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.
|
||
return this._expandIfNotCollapsed();
|
||
},
|
||
|
||
onRemove: function () {
|
||
this._map.off('zoomend', this._checkDisabledLayers, this);
|
||
|
||
for (var i = 0; i < this._layers.length; i++) {
|
||
this._layers[i].layer.off('add remove', this._onLayerChange, this);
|
||
}
|
||
},
|
||
|
||
// @method addBaseLayer(layer: Layer, name: String): this
|
||
// Adds a base layer (radio button entry) with the given name to the control.
|
||
addBaseLayer: function (layer, name) {
|
||
this._addLayer(layer, name);
|
||
return (this._map) ? this._update() : this;
|
||
},
|
||
|
||
// @method addOverlay(layer: Layer, name: String): this
|
||
// Adds an overlay (checkbox entry) with the given name to the control.
|
||
addOverlay: function (layer, name) {
|
||
this._addLayer(layer, name, true);
|
||
return (this._map) ? this._update() : this;
|
||
},
|
||
|
||
// @method removeLayer(layer: Layer): this
|
||
// Remove the given layer from the control.
|
||
removeLayer: function (layer) {
|
||
layer.off('add remove', this._onLayerChange, this);
|
||
|
||
var obj = this._getLayer(stamp(layer));
|
||
if (obj) {
|
||
this._layers.splice(this._layers.indexOf(obj), 1);
|
||
}
|
||
return (this._map) ? this._update() : this;
|
||
},
|
||
|
||
// @method expand(): this
|
||
// Expand the control container if collapsed.
|
||
expand: function () {
|
||
addClass(this._container, 'leaflet-control-layers-expanded');
|
||
this._section.style.height = null;
|
||
var acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);
|
||
if (acceptableHeight < this._section.clientHeight) {
|
||
addClass(this._section, 'leaflet-control-layers-scrollbar');
|
||
this._section.style.height = acceptableHeight + 'px';
|
||
} else {
|
||
removeClass(this._section, 'leaflet-control-layers-scrollbar');
|
||
}
|
||
this._checkDisabledLayers();
|
||
return this;
|
||
},
|
||
|
||
// @method collapse(): this
|
||
// Collapse the control container if expanded.
|
||
collapse: function () {
|
||
removeClass(this._container, 'leaflet-control-layers-expanded');
|
||
return this;
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var className = 'leaflet-control-layers',
|
||
container = this._container = create$1('div', className),
|
||
collapsed = this.options.collapsed;
|
||
|
||
// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released
|
||
container.setAttribute('aria-haspopup', true);
|
||
|
||
disableClickPropagation(container);
|
||
disableScrollPropagation(container);
|
||
|
||
var section = this._section = create$1('section', className + '-list');
|
||
|
||
if (collapsed) {
|
||
this._map.on('click', this.collapse, this);
|
||
|
||
on(container, {
|
||
mouseenter: this._expandSafely,
|
||
mouseleave: this.collapse
|
||
}, this);
|
||
}
|
||
|
||
var link = this._layersLink = create$1('a', className + '-toggle', container);
|
||
link.href = '#';
|
||
link.title = 'Layers';
|
||
link.setAttribute('role', 'button');
|
||
|
||
on(link, {
|
||
keydown: function (e) {
|
||
if (e.keyCode === 13) {
|
||
this._expandSafely();
|
||
}
|
||
},
|
||
// Certain screen readers intercept the key event and instead send a click event
|
||
click: function (e) {
|
||
preventDefault(e);
|
||
this._expandSafely();
|
||
}
|
||
}, this);
|
||
|
||
if (!collapsed) {
|
||
this.expand();
|
||
}
|
||
|
||
this._baseLayersList = create$1('div', className + '-base', section);
|
||
this._separator = create$1('div', className + '-separator', section);
|
||
this._overlaysList = create$1('div', className + '-overlays', section);
|
||
|
||
container.appendChild(section);
|
||
},
|
||
|
||
_getLayer: function (id) {
|
||
for (var i = 0; i < this._layers.length; i++) {
|
||
|
||
if (this._layers[i] && stamp(this._layers[i].layer) === id) {
|
||
return this._layers[i];
|
||
}
|
||
}
|
||
},
|
||
|
||
_addLayer: function (layer, name, overlay) {
|
||
if (this._map) {
|
||
layer.on('add remove', this._onLayerChange, this);
|
||
}
|
||
|
||
this._layers.push({
|
||
layer: layer,
|
||
name: name,
|
||
overlay: overlay
|
||
});
|
||
|
||
if (this.options.sortLayers) {
|
||
this._layers.sort(bind(function (a, b) {
|
||
return this.options.sortFunction(a.layer, b.layer, a.name, b.name);
|
||
}, this));
|
||
}
|
||
|
||
if (this.options.autoZIndex && layer.setZIndex) {
|
||
this._lastZIndex++;
|
||
layer.setZIndex(this._lastZIndex);
|
||
}
|
||
|
||
this._expandIfNotCollapsed();
|
||
},
|
||
|
||
_update: function () {
|
||
if (!this._container) { return this; }
|
||
|
||
empty(this._baseLayersList);
|
||
empty(this._overlaysList);
|
||
|
||
this._layerControlInputs = [];
|
||
var baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;
|
||
|
||
for (i = 0; i < this._layers.length; i++) {
|
||
obj = this._layers[i];
|
||
this._addItem(obj);
|
||
overlaysPresent = overlaysPresent || obj.overlay;
|
||
baseLayersPresent = baseLayersPresent || !obj.overlay;
|
||
baseLayersCount += !obj.overlay ? 1 : 0;
|
||
}
|
||
|
||
// Hide base layers section if there's only one layer.
|
||
if (this.options.hideSingleBase) {
|
||
baseLayersPresent = baseLayersPresent && baseLayersCount > 1;
|
||
this._baseLayersList.style.display = baseLayersPresent ? '' : 'none';
|
||
}
|
||
|
||
this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
|
||
|
||
return this;
|
||
},
|
||
|
||
_onLayerChange: function (e) {
|
||
if (!this._handlingClick) {
|
||
this._update();
|
||
}
|
||
|
||
var obj = this._getLayer(stamp(e.target));
|
||
|
||
// @namespace Map
|
||
// @section Layer events
|
||
// @event baselayerchange: LayersControlEvent
|
||
// Fired when the base layer is changed through the [layers control](#control-layers).
|
||
// @event overlayadd: LayersControlEvent
|
||
// Fired when an overlay is selected through the [layers control](#control-layers).
|
||
// @event overlayremove: LayersControlEvent
|
||
// Fired when an overlay is deselected through the [layers control](#control-layers).
|
||
// @namespace Control.Layers
|
||
var type = obj.overlay ?
|
||
(e.type === 'add' ? 'overlayadd' : 'overlayremove') :
|
||
(e.type === 'add' ? 'baselayerchange' : null);
|
||
|
||
if (type) {
|
||
this._map.fire(type, obj);
|
||
}
|
||
},
|
||
|
||
// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)
|
||
_createRadioElement: function (name, checked) {
|
||
|
||
var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' +
|
||
name + '"' + (checked ? ' checked="checked"' : '') + '/>';
|
||
|
||
var radioFragment = document.createElement('div');
|
||
radioFragment.innerHTML = radioHtml;
|
||
|
||
return radioFragment.firstChild;
|
||
},
|
||
|
||
_addItem: function (obj) {
|
||
var label = document.createElement('label'),
|
||
checked = this._map.hasLayer(obj.layer),
|
||
input;
|
||
|
||
if (obj.overlay) {
|
||
input = document.createElement('input');
|
||
input.type = 'checkbox';
|
||
input.className = 'leaflet-control-layers-selector';
|
||
input.defaultChecked = checked;
|
||
} else {
|
||
input = this._createRadioElement('leaflet-base-layers_' + stamp(this), checked);
|
||
}
|
||
|
||
this._layerControlInputs.push(input);
|
||
input.layerId = stamp(obj.layer);
|
||
|
||
on(input, 'click', this._onInputClick, this);
|
||
|
||
var name = document.createElement('span');
|
||
name.innerHTML = ' ' + obj.name;
|
||
|
||
// Helps from preventing layer control flicker when checkboxes are disabled
|
||
// https://github.com/Leaflet/Leaflet/issues/2771
|
||
var holder = document.createElement('span');
|
||
|
||
label.appendChild(holder);
|
||
holder.appendChild(input);
|
||
holder.appendChild(name);
|
||
|
||
var container = obj.overlay ? this._overlaysList : this._baseLayersList;
|
||
container.appendChild(label);
|
||
|
||
this._checkDisabledLayers();
|
||
return label;
|
||
},
|
||
|
||
_onInputClick: function () {
|
||
var inputs = this._layerControlInputs,
|
||
input, layer;
|
||
var addedLayers = [],
|
||
removedLayers = [];
|
||
|
||
this._handlingClick = true;
|
||
|
||
for (var i = inputs.length - 1; i >= 0; i--) {
|
||
input = inputs[i];
|
||
layer = this._getLayer(input.layerId).layer;
|
||
|
||
if (input.checked) {
|
||
addedLayers.push(layer);
|
||
} else if (!input.checked) {
|
||
removedLayers.push(layer);
|
||
}
|
||
}
|
||
|
||
// Bugfix issue 2318: Should remove all old layers before readding new ones
|
||
for (i = 0; i < removedLayers.length; i++) {
|
||
if (this._map.hasLayer(removedLayers[i])) {
|
||
this._map.removeLayer(removedLayers[i]);
|
||
}
|
||
}
|
||
for (i = 0; i < addedLayers.length; i++) {
|
||
if (!this._map.hasLayer(addedLayers[i])) {
|
||
this._map.addLayer(addedLayers[i]);
|
||
}
|
||
}
|
||
|
||
this._handlingClick = false;
|
||
|
||
this._refocusOnMap();
|
||
},
|
||
|
||
_checkDisabledLayers: function () {
|
||
var inputs = this._layerControlInputs,
|
||
input,
|
||
layer,
|
||
zoom = this._map.getZoom();
|
||
|
||
for (var i = inputs.length - 1; i >= 0; i--) {
|
||
input = inputs[i];
|
||
layer = this._getLayer(input.layerId).layer;
|
||
input.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||
|
||
(layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);
|
||
|
||
}
|
||
},
|
||
|
||
_expandIfNotCollapsed: function () {
|
||
if (this._map && !this.options.collapsed) {
|
||
this.expand();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_expandSafely: function () {
|
||
var section = this._section;
|
||
on(section, 'click', preventDefault);
|
||
this.expand();
|
||
setTimeout(function () {
|
||
off(section, 'click', preventDefault);
|
||
});
|
||
}
|
||
|
||
});
|
||
|
||
|
||
// @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)
|
||
// Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.
|
||
var layers = function (baseLayers, overlays, options) {
|
||
return new Layers(baseLayers, overlays, options);
|
||
};
|
||
|
||
/*
|
||
* @class Control.Zoom
|
||
* @aka L.Control.Zoom
|
||
* @inherits Control
|
||
*
|
||
* A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.
|
||
*/
|
||
|
||
var Zoom = Control.extend({
|
||
// @section
|
||
// @aka Control.Zoom options
|
||
options: {
|
||
position: 'topleft',
|
||
|
||
// @option zoomInText: String = '<span aria-hidden="true">+</span>'
|
||
// The text set on the 'zoom in' button.
|
||
zoomInText: '<span aria-hidden="true">+</span>',
|
||
|
||
// @option zoomInTitle: String = 'Zoom in'
|
||
// The title set on the 'zoom in' button.
|
||
zoomInTitle: 'Zoom in',
|
||
|
||
// @option zoomOutText: String = '<span aria-hidden="true">−</span>'
|
||
// The text set on the 'zoom out' button.
|
||
zoomOutText: '<span aria-hidden="true">−</span>',
|
||
|
||
// @option zoomOutTitle: String = 'Zoom out'
|
||
// The title set on the 'zoom out' button.
|
||
zoomOutTitle: 'Zoom out'
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
var zoomName = 'leaflet-control-zoom',
|
||
container = create$1('div', zoomName + ' leaflet-bar'),
|
||
options = this.options;
|
||
|
||
this._zoomInButton = this._createButton(options.zoomInText, options.zoomInTitle,
|
||
zoomName + '-in', container, this._zoomIn);
|
||
this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,
|
||
zoomName + '-out', container, this._zoomOut);
|
||
|
||
this._updateDisabled();
|
||
map.on('zoomend zoomlevelschange', this._updateDisabled, this);
|
||
|
||
return container;
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
map.off('zoomend zoomlevelschange', this._updateDisabled, this);
|
||
},
|
||
|
||
disable: function () {
|
||
this._disabled = true;
|
||
this._updateDisabled();
|
||
return this;
|
||
},
|
||
|
||
enable: function () {
|
||
this._disabled = false;
|
||
this._updateDisabled();
|
||
return this;
|
||
},
|
||
|
||
_zoomIn: function (e) {
|
||
if (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {
|
||
this._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));
|
||
}
|
||
},
|
||
|
||
_zoomOut: function (e) {
|
||
if (!this._disabled && this._map._zoom > this._map.getMinZoom()) {
|
||
this._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));
|
||
}
|
||
},
|
||
|
||
_createButton: function (html, title, className, container, fn) {
|
||
var link = create$1('a', className, container);
|
||
link.innerHTML = html;
|
||
link.href = '#';
|
||
link.title = title;
|
||
|
||
/*
|
||
* Will force screen readers like VoiceOver to read this as "Zoom in - button"
|
||
*/
|
||
link.setAttribute('role', 'button');
|
||
link.setAttribute('aria-label', title);
|
||
|
||
disableClickPropagation(link);
|
||
on(link, 'click', stop);
|
||
on(link, 'click', fn, this);
|
||
on(link, 'click', this._refocusOnMap, this);
|
||
|
||
return link;
|
||
},
|
||
|
||
_updateDisabled: function () {
|
||
var map = this._map,
|
||
className = 'leaflet-disabled';
|
||
|
||
removeClass(this._zoomInButton, className);
|
||
removeClass(this._zoomOutButton, className);
|
||
this._zoomInButton.setAttribute('aria-disabled', 'false');
|
||
this._zoomOutButton.setAttribute('aria-disabled', 'false');
|
||
|
||
if (this._disabled || map._zoom === map.getMinZoom()) {
|
||
addClass(this._zoomOutButton, className);
|
||
this._zoomOutButton.setAttribute('aria-disabled', 'true');
|
||
}
|
||
if (this._disabled || map._zoom === map.getMaxZoom()) {
|
||
addClass(this._zoomInButton, className);
|
||
this._zoomInButton.setAttribute('aria-disabled', 'true');
|
||
}
|
||
}
|
||
});
|
||
|
||
// @namespace Map
|
||
// @section Control options
|
||
// @option zoomControl: Boolean = true
|
||
// Whether a [zoom control](#control-zoom) is added to the map by default.
|
||
Map.mergeOptions({
|
||
zoomControl: true
|
||
});
|
||
|
||
Map.addInitHook(function () {
|
||
if (this.options.zoomControl) {
|
||
// @section Controls
|
||
// @property zoomControl: Control.Zoom
|
||
// The default zoom control (only available if the
|
||
// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).
|
||
this.zoomControl = new Zoom();
|
||
this.addControl(this.zoomControl);
|
||
}
|
||
});
|
||
|
||
// @namespace Control.Zoom
|
||
// @factory L.control.zoom(options: Control.Zoom options)
|
||
// Creates a zoom control
|
||
var zoom = function (options) {
|
||
return new Zoom(options);
|
||
};
|
||
|
||
/*
|
||
* @class Control.Scale
|
||
* @aka L.Control.Scale
|
||
* @inherits Control
|
||
*
|
||
* A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.control.scale().addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var Scale = Control.extend({
|
||
// @section
|
||
// @aka Control.Scale options
|
||
options: {
|
||
position: 'bottomleft',
|
||
|
||
// @option maxWidth: Number = 100
|
||
// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).
|
||
maxWidth: 100,
|
||
|
||
// @option metric: Boolean = True
|
||
// Whether to show the metric scale line (m/km).
|
||
metric: true,
|
||
|
||
// @option imperial: Boolean = True
|
||
// Whether to show the imperial scale line (mi/ft).
|
||
imperial: true
|
||
|
||
// @option updateWhenIdle: Boolean = false
|
||
// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
var className = 'leaflet-control-scale',
|
||
container = create$1('div', className),
|
||
options = this.options;
|
||
|
||
this._addScales(options, className + '-line', container);
|
||
|
||
map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
|
||
map.whenReady(this._update, this);
|
||
|
||
return container;
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
|
||
},
|
||
|
||
_addScales: function (options, className, container) {
|
||
if (options.metric) {
|
||
this._mScale = create$1('div', className, container);
|
||
}
|
||
if (options.imperial) {
|
||
this._iScale = create$1('div', className, container);
|
||
}
|
||
},
|
||
|
||
_update: function () {
|
||
var map = this._map,
|
||
y = map.getSize().y / 2;
|
||
|
||
var maxMeters = map.distance(
|
||
map.containerPointToLatLng([0, y]),
|
||
map.containerPointToLatLng([this.options.maxWidth, y]));
|
||
|
||
this._updateScales(maxMeters);
|
||
},
|
||
|
||
_updateScales: function (maxMeters) {
|
||
if (this.options.metric && maxMeters) {
|
||
this._updateMetric(maxMeters);
|
||
}
|
||
if (this.options.imperial && maxMeters) {
|
||
this._updateImperial(maxMeters);
|
||
}
|
||
},
|
||
|
||
_updateMetric: function (maxMeters) {
|
||
var meters = this._getRoundNum(maxMeters),
|
||
label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
|
||
|
||
this._updateScale(this._mScale, label, meters / maxMeters);
|
||
},
|
||
|
||
_updateImperial: function (maxMeters) {
|
||
var maxFeet = maxMeters * 3.2808399,
|
||
maxMiles, miles, feet;
|
||
|
||
if (maxFeet > 5280) {
|
||
maxMiles = maxFeet / 5280;
|
||
miles = this._getRoundNum(maxMiles);
|
||
this._updateScale(this._iScale, miles + ' mi', miles / maxMiles);
|
||
|
||
} else {
|
||
feet = this._getRoundNum(maxFeet);
|
||
this._updateScale(this._iScale, feet + ' ft', feet / maxFeet);
|
||
}
|
||
},
|
||
|
||
_updateScale: function (scale, text, ratio) {
|
||
scale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';
|
||
scale.innerHTML = text;
|
||
},
|
||
|
||
_getRoundNum: function (num) {
|
||
var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),
|
||
d = num / pow10;
|
||
|
||
d = d >= 10 ? 10 :
|
||
d >= 5 ? 5 :
|
||
d >= 3 ? 3 :
|
||
d >= 2 ? 2 : 1;
|
||
|
||
return pow10 * d;
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.control.scale(options?: Control.Scale options)
|
||
// Creates an scale control with the given options.
|
||
var scale = function (options) {
|
||
return new Scale(options);
|
||
};
|
||
|
||
var ukrainianFlag = '<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg>';
|
||
|
||
|
||
/*
|
||
* @class Control.Attribution
|
||
* @aka L.Control.Attribution
|
||
* @inherits Control
|
||
*
|
||
* The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.
|
||
*/
|
||
|
||
var Attribution = Control.extend({
|
||
// @section
|
||
// @aka Control.Attribution options
|
||
options: {
|
||
position: 'bottomright',
|
||
|
||
// @option prefix: String|false = 'Leaflet'
|
||
// The HTML text shown before the attributions. Pass `false` to disable.
|
||
prefix: '<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
|
||
this._attributions = {};
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
map.attributionControl = this;
|
||
this._container = create$1('div', 'leaflet-control-attribution');
|
||
disableClickPropagation(this._container);
|
||
|
||
// TODO ugly, refactor
|
||
for (var i in map._layers) {
|
||
if (map._layers[i].getAttribution) {
|
||
this.addAttribution(map._layers[i].getAttribution());
|
||
}
|
||
}
|
||
|
||
this._update();
|
||
|
||
map.on('layeradd', this._addAttribution, this);
|
||
|
||
return this._container;
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
map.off('layeradd', this._addAttribution, this);
|
||
},
|
||
|
||
_addAttribution: function (ev) {
|
||
if (ev.layer.getAttribution) {
|
||
this.addAttribution(ev.layer.getAttribution());
|
||
ev.layer.once('remove', function () {
|
||
this.removeAttribution(ev.layer.getAttribution());
|
||
}, this);
|
||
}
|
||
},
|
||
|
||
// @method setPrefix(prefix: String|false): this
|
||
// The HTML text shown before the attributions. Pass `false` to disable.
|
||
setPrefix: function (prefix) {
|
||
this.options.prefix = prefix;
|
||
this._update();
|
||
return this;
|
||
},
|
||
|
||
// @method addAttribution(text: String): this
|
||
// Adds an attribution text (e.g. `'© OpenStreetMap contributors'`).
|
||
addAttribution: function (text) {
|
||
if (!text) { return this; }
|
||
|
||
if (!this._attributions[text]) {
|
||
this._attributions[text] = 0;
|
||
}
|
||
this._attributions[text]++;
|
||
|
||
this._update();
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method removeAttribution(text: String): this
|
||
// Removes an attribution text.
|
||
removeAttribution: function (text) {
|
||
if (!text) { return this; }
|
||
|
||
if (this._attributions[text]) {
|
||
this._attributions[text]--;
|
||
this._update();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
_update: function () {
|
||
if (!this._map) { return; }
|
||
|
||
var attribs = [];
|
||
|
||
for (var i in this._attributions) {
|
||
if (this._attributions[i]) {
|
||
attribs.push(i);
|
||
}
|
||
}
|
||
|
||
var prefixAndAttribs = [];
|
||
|
||
if (this.options.prefix) {
|
||
prefixAndAttribs.push(this.options.prefix);
|
||
}
|
||
if (attribs.length) {
|
||
prefixAndAttribs.push(attribs.join(', '));
|
||
}
|
||
|
||
this._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden="true">|</span> ');
|
||
}
|
||
});
|
||
|
||
// @namespace Map
|
||
// @section Control options
|
||
// @option attributionControl: Boolean = true
|
||
// Whether a [attribution control](#control-attribution) is added to the map by default.
|
||
Map.mergeOptions({
|
||
attributionControl: true
|
||
});
|
||
|
||
Map.addInitHook(function () {
|
||
if (this.options.attributionControl) {
|
||
new Attribution().addTo(this);
|
||
}
|
||
});
|
||
|
||
// @namespace Control.Attribution
|
||
// @factory L.control.attribution(options: Control.Attribution options)
|
||
// Creates an attribution control.
|
||
var attribution = function (options) {
|
||
return new Attribution(options);
|
||
};
|
||
|
||
Control.Layers = Layers;
|
||
Control.Zoom = Zoom;
|
||
Control.Scale = Scale;
|
||
Control.Attribution = Attribution;
|
||
|
||
control.layers = layers;
|
||
control.zoom = zoom;
|
||
control.scale = scale;
|
||
control.attribution = attribution;
|
||
|
||
/*
|
||
L.Handler is a base class for handler classes that are used internally to inject
|
||
interaction features like dragging to classes like Map and Marker.
|
||
*/
|
||
|
||
// @class Handler
|
||
// @aka L.Handler
|
||
// Abstract class for map interaction handlers
|
||
|
||
var Handler = Class.extend({
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
},
|
||
|
||
// @method enable(): this
|
||
// Enables the handler
|
||
enable: function () {
|
||
if (this._enabled) { return this; }
|
||
|
||
this._enabled = true;
|
||
this.addHooks();
|
||
return this;
|
||
},
|
||
|
||
// @method disable(): this
|
||
// Disables the handler
|
||
disable: function () {
|
||
if (!this._enabled) { return this; }
|
||
|
||
this._enabled = false;
|
||
this.removeHooks();
|
||
return this;
|
||
},
|
||
|
||
// @method enabled(): Boolean
|
||
// Returns `true` if the handler is enabled
|
||
enabled: function () {
|
||
return !!this._enabled;
|
||
}
|
||
|
||
// @section Extension methods
|
||
// Classes inheriting from `Handler` must implement the two following methods:
|
||
// @method addHooks()
|
||
// Called when the handler is enabled, should add event hooks.
|
||
// @method removeHooks()
|
||
// Called when the handler is disabled, should remove the event hooks added previously.
|
||
});
|
||
|
||
// @section There is static function which can be called without instantiating L.Handler:
|
||
// @function addTo(map: Map, name: String): this
|
||
// Adds a new Handler to the given map with the given name.
|
||
Handler.addTo = function (map, name) {
|
||
map.addHandler(name, this);
|
||
return this;
|
||
};
|
||
|
||
var Mixin = {Events: Events};
|
||
|
||
/*
|
||
* @class Draggable
|
||
* @aka L.Draggable
|
||
* @inherits Evented
|
||
*
|
||
* A class for making DOM elements draggable (including touch support).
|
||
* Used internally for map and marker dragging. Only works for elements
|
||
* that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).
|
||
*
|
||
* @example
|
||
* ```js
|
||
* var draggable = new L.Draggable(elementToDrag);
|
||
* draggable.enable();
|
||
* ```
|
||
*/
|
||
|
||
var START = Browser.touch ? 'touchstart mousedown' : 'mousedown';
|
||
|
||
var Draggable = Evented.extend({
|
||
|
||
options: {
|
||
// @section
|
||
// @aka Draggable options
|
||
// @option clickTolerance: Number = 3
|
||
// The max number of pixels a user can shift the mouse pointer during a click
|
||
// for it to be considered a valid click (as opposed to a mouse drag).
|
||
clickTolerance: 3
|
||
},
|
||
|
||
// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)
|
||
// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).
|
||
initialize: function (element, dragStartTarget, preventOutline, options) {
|
||
setOptions(this, options);
|
||
|
||
this._element = element;
|
||
this._dragStartTarget = dragStartTarget || element;
|
||
this._preventOutline = preventOutline;
|
||
},
|
||
|
||
// @method enable()
|
||
// Enables the dragging ability
|
||
enable: function () {
|
||
if (this._enabled) { return; }
|
||
|
||
on(this._dragStartTarget, START, this._onDown, this);
|
||
|
||
this._enabled = true;
|
||
},
|
||
|
||
// @method disable()
|
||
// Disables the dragging ability
|
||
disable: function () {
|
||
if (!this._enabled) { return; }
|
||
|
||
// If we're currently dragging this draggable,
|
||
// disabling it counts as first ending the drag.
|
||
if (Draggable._dragging === this) {
|
||
this.finishDrag(true);
|
||
}
|
||
|
||
off(this._dragStartTarget, START, this._onDown, this);
|
||
|
||
this._enabled = false;
|
||
this._moved = false;
|
||
},
|
||
|
||
_onDown: function (e) {
|
||
// Ignore the event if disabled; this happens in IE11
|
||
// under some circumstances, see #3666.
|
||
if (!this._enabled) { return; }
|
||
|
||
this._moved = false;
|
||
|
||
if (hasClass(this._element, 'leaflet-zoom-anim')) { return; }
|
||
|
||
if (e.touches && e.touches.length !== 1) {
|
||
// Finish dragging to avoid conflict with touchZoom
|
||
if (Draggable._dragging === this) {
|
||
this.finishDrag();
|
||
}
|
||
return;
|
||
}
|
||
|
||
if (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
|
||
Draggable._dragging = this; // Prevent dragging multiple objects at once.
|
||
|
||
if (this._preventOutline) {
|
||
preventOutline(this._element);
|
||
}
|
||
|
||
disableImageDrag();
|
||
disableTextSelection();
|
||
|
||
if (this._moving) { return; }
|
||
|
||
// @event down: Event
|
||
// Fired when a drag is about to start.
|
||
this.fire('down');
|
||
|
||
var first = e.touches ? e.touches[0] : e,
|
||
sizedParent = getSizedParentNode(this._element);
|
||
|
||
this._startPoint = new Point(first.clientX, first.clientY);
|
||
this._startPos = getPosition(this._element);
|
||
|
||
// Cache the scale, so that we can continuously compensate for it during drag (_onMove).
|
||
this._parentScale = getScale(sizedParent);
|
||
|
||
var mouseevent = e.type === 'mousedown';
|
||
on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);
|
||
on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);
|
||
},
|
||
|
||
_onMove: function (e) {
|
||
// Ignore the event if disabled; this happens in IE11
|
||
// under some circumstances, see #3666.
|
||
if (!this._enabled) { return; }
|
||
|
||
if (e.touches && e.touches.length > 1) {
|
||
this._moved = true;
|
||
return;
|
||
}
|
||
|
||
var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
|
||
offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);
|
||
|
||
if (!offset.x && !offset.y) { return; }
|
||
if (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }
|
||
|
||
// We assume that the parent container's position, border and scale do not change for the duration of the drag.
|
||
// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)
|
||
// and we can use the cached value for the scale.
|
||
offset.x /= this._parentScale.x;
|
||
offset.y /= this._parentScale.y;
|
||
|
||
preventDefault(e);
|
||
|
||
if (!this._moved) {
|
||
// @event dragstart: Event
|
||
// Fired when a drag starts
|
||
this.fire('dragstart');
|
||
|
||
this._moved = true;
|
||
|
||
addClass(document.body, 'leaflet-dragging');
|
||
|
||
this._lastTarget = e.target || e.srcElement;
|
||
// IE and Edge do not give the <use> element, so fetch it
|
||
// if necessary
|
||
if (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {
|
||
this._lastTarget = this._lastTarget.correspondingUseElement;
|
||
}
|
||
addClass(this._lastTarget, 'leaflet-drag-target');
|
||
}
|
||
|
||
this._newPos = this._startPos.add(offset);
|
||
this._moving = true;
|
||
|
||
this._lastEvent = e;
|
||
this._updatePosition();
|
||
},
|
||
|
||
_updatePosition: function () {
|
||
var e = {originalEvent: this._lastEvent};
|
||
|
||
// @event predrag: Event
|
||
// Fired continuously during dragging *before* each corresponding
|
||
// update of the element's position.
|
||
this.fire('predrag', e);
|
||
setPosition(this._element, this._newPos);
|
||
|
||
// @event drag: Event
|
||
// Fired continuously during dragging.
|
||
this.fire('drag', e);
|
||
},
|
||
|
||
_onUp: function () {
|
||
// Ignore the event if disabled; this happens in IE11
|
||
// under some circumstances, see #3666.
|
||
if (!this._enabled) { return; }
|
||
this.finishDrag();
|
||
},
|
||
|
||
finishDrag: function (noInertia) {
|
||
removeClass(document.body, 'leaflet-dragging');
|
||
|
||
if (this._lastTarget) {
|
||
removeClass(this._lastTarget, 'leaflet-drag-target');
|
||
this._lastTarget = null;
|
||
}
|
||
|
||
off(document, 'mousemove touchmove', this._onMove, this);
|
||
off(document, 'mouseup touchend touchcancel', this._onUp, this);
|
||
|
||
enableImageDrag();
|
||
enableTextSelection();
|
||
|
||
if (this._moved && this._moving) {
|
||
|
||
// @event dragend: DragEndEvent
|
||
// Fired when the drag ends.
|
||
this.fire('dragend', {
|
||
noInertia: noInertia,
|
||
distance: this._newPos.distanceTo(this._startPos)
|
||
});
|
||
}
|
||
|
||
this._moving = false;
|
||
Draggable._dragging = false;
|
||
}
|
||
|
||
});
|
||
|
||
/*
|
||
* @namespace LineUtil
|
||
*
|
||
* Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.
|
||
*/
|
||
|
||
// Simplify polyline with vertex reduction and Douglas-Peucker simplification.
|
||
// Improves rendering performance dramatically by lessening the number of points to draw.
|
||
|
||
// @function simplify(points: Point[], tolerance: Number): Point[]
|
||
// Dramatically reduces the number of points in a polyline while retaining
|
||
// its shape and returns a new array of simplified points, using the
|
||
// [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).
|
||
// Used for a huge performance boost when processing/displaying Leaflet polylines for
|
||
// each zoom level and also reducing visual noise. tolerance affects the amount of
|
||
// simplification (lesser value means higher quality but slower and with more points).
|
||
// Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).
|
||
function simplify(points, tolerance) {
|
||
if (!tolerance || !points.length) {
|
||
return points.slice();
|
||
}
|
||
|
||
var sqTolerance = tolerance * tolerance;
|
||
|
||
// stage 1: vertex reduction
|
||
points = _reducePoints(points, sqTolerance);
|
||
|
||
// stage 2: Douglas-Peucker simplification
|
||
points = _simplifyDP(points, sqTolerance);
|
||
|
||
return points;
|
||
}
|
||
|
||
// @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number
|
||
// Returns the distance between point `p` and segment `p1` to `p2`.
|
||
function pointToSegmentDistance(p, p1, p2) {
|
||
return Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));
|
||
}
|
||
|
||
// @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number
|
||
// Returns the closest point from a point `p` on a segment `p1` to `p2`.
|
||
function closestPointOnSegment(p, p1, p2) {
|
||
return _sqClosestPointOnSegment(p, p1, p2);
|
||
}
|
||
|
||
// Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
|
||
function _simplifyDP(points, sqTolerance) {
|
||
|
||
var len = points.length,
|
||
ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
|
||
markers = new ArrayConstructor(len);
|
||
|
||
markers[0] = markers[len - 1] = 1;
|
||
|
||
_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
|
||
|
||
var i,
|
||
newPoints = [];
|
||
|
||
for (i = 0; i < len; i++) {
|
||
if (markers[i]) {
|
||
newPoints.push(points[i]);
|
||
}
|
||
}
|
||
|
||
return newPoints;
|
||
}
|
||
|
||
function _simplifyDPStep(points, markers, sqTolerance, first, last) {
|
||
|
||
var maxSqDist = 0,
|
||
index, i, sqDist;
|
||
|
||
for (i = first + 1; i <= last - 1; i++) {
|
||
sqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);
|
||
|
||
if (sqDist > maxSqDist) {
|
||
index = i;
|
||
maxSqDist = sqDist;
|
||
}
|
||
}
|
||
|
||
if (maxSqDist > sqTolerance) {
|
||
markers[index] = 1;
|
||
|
||
_simplifyDPStep(points, markers, sqTolerance, first, index);
|
||
_simplifyDPStep(points, markers, sqTolerance, index, last);
|
||
}
|
||
}
|
||
|
||
// reduce points that are too close to each other to a single point
|
||
function _reducePoints(points, sqTolerance) {
|
||
var reducedPoints = [points[0]];
|
||
|
||
for (var i = 1, prev = 0, len = points.length; i < len; i++) {
|
||
if (_sqDist(points[i], points[prev]) > sqTolerance) {
|
||
reducedPoints.push(points[i]);
|
||
prev = i;
|
||
}
|
||
}
|
||
if (prev < len - 1) {
|
||
reducedPoints.push(points[len - 1]);
|
||
}
|
||
return reducedPoints;
|
||
}
|
||
|
||
var _lastCode;
|
||
|
||
// @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean
|
||
// Clips the segment a to b by rectangular bounds with the
|
||
// [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)
|
||
// (modifying the segment points directly!). Used by Leaflet to only show polyline
|
||
// points that are on the screen or near, increasing performance.
|
||
function clipSegment(a, b, bounds, useLastCode, round) {
|
||
var codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),
|
||
codeB = _getBitCode(b, bounds),
|
||
|
||
codeOut, p, newCode;
|
||
|
||
// save 2nd code to avoid calculating it on the next segment
|
||
_lastCode = codeB;
|
||
|
||
while (true) {
|
||
// if a,b is inside the clip window (trivial accept)
|
||
if (!(codeA | codeB)) {
|
||
return [a, b];
|
||
}
|
||
|
||
// if a,b is outside the clip window (trivial reject)
|
||
if (codeA & codeB) {
|
||
return false;
|
||
}
|
||
|
||
// other cases
|
||
codeOut = codeA || codeB;
|
||
p = _getEdgeIntersection(a, b, codeOut, bounds, round);
|
||
newCode = _getBitCode(p, bounds);
|
||
|
||
if (codeOut === codeA) {
|
||
a = p;
|
||
codeA = newCode;
|
||
} else {
|
||
b = p;
|
||
codeB = newCode;
|
||
}
|
||
}
|
||
}
|
||
|
||
function _getEdgeIntersection(a, b, code, bounds, round) {
|
||
var dx = b.x - a.x,
|
||
dy = b.y - a.y,
|
||
min = bounds.min,
|
||
max = bounds.max,
|
||
x, y;
|
||
|
||
if (code & 8) { // top
|
||
x = a.x + dx * (max.y - a.y) / dy;
|
||
y = max.y;
|
||
|
||
} else if (code & 4) { // bottom
|
||
x = a.x + dx * (min.y - a.y) / dy;
|
||
y = min.y;
|
||
|
||
} else if (code & 2) { // right
|
||
x = max.x;
|
||
y = a.y + dy * (max.x - a.x) / dx;
|
||
|
||
} else if (code & 1) { // left
|
||
x = min.x;
|
||
y = a.y + dy * (min.x - a.x) / dx;
|
||
}
|
||
|
||
return new Point(x, y, round);
|
||
}
|
||
|
||
function _getBitCode(p, bounds) {
|
||
var code = 0;
|
||
|
||
if (p.x < bounds.min.x) { // left
|
||
code |= 1;
|
||
} else if (p.x > bounds.max.x) { // right
|
||
code |= 2;
|
||
}
|
||
|
||
if (p.y < bounds.min.y) { // bottom
|
||
code |= 4;
|
||
} else if (p.y > bounds.max.y) { // top
|
||
code |= 8;
|
||
}
|
||
|
||
return code;
|
||
}
|
||
|
||
// square distance (to avoid unnecessary Math.sqrt calls)
|
||
function _sqDist(p1, p2) {
|
||
var dx = p2.x - p1.x,
|
||
dy = p2.y - p1.y;
|
||
return dx * dx + dy * dy;
|
||
}
|
||
|
||
// return closest point on segment or distance to that point
|
||
function _sqClosestPointOnSegment(p, p1, p2, sqDist) {
|
||
var x = p1.x,
|
||
y = p1.y,
|
||
dx = p2.x - x,
|
||
dy = p2.y - y,
|
||
dot = dx * dx + dy * dy,
|
||
t;
|
||
|
||
if (dot > 0) {
|
||
t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
|
||
|
||
if (t > 1) {
|
||
x = p2.x;
|
||
y = p2.y;
|
||
} else if (t > 0) {
|
||
x += dx * t;
|
||
y += dy * t;
|
||
}
|
||
}
|
||
|
||
dx = p.x - x;
|
||
dy = p.y - y;
|
||
|
||
return sqDist ? dx * dx + dy * dy : new Point(x, y);
|
||
}
|
||
|
||
|
||
// @function isFlat(latlngs: LatLng[]): Boolean
|
||
// Returns true if `latlngs` is a flat array, false is nested.
|
||
function isFlat(latlngs) {
|
||
return !isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');
|
||
}
|
||
|
||
function _flat(latlngs) {
|
||
console.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');
|
||
return isFlat(latlngs);
|
||
}
|
||
|
||
/* @function polylineCenter(latlngs: LatLng[], crs: CRS): LatLng
|
||
* Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polyline.
|
||
*/
|
||
function polylineCenter(latlngs, crs) {
|
||
var i, halfDist, segDist, dist, p1, p2, ratio, center;
|
||
|
||
if (!latlngs || latlngs.length === 0) {
|
||
throw new Error('latlngs not passed');
|
||
}
|
||
|
||
if (!isFlat(latlngs)) {
|
||
console.warn('latlngs are not flat! Only the first ring will be used');
|
||
latlngs = latlngs[0];
|
||
}
|
||
|
||
var points = [];
|
||
for (var j in latlngs) {
|
||
points.push(crs.project(toLatLng(latlngs[j])));
|
||
}
|
||
|
||
var len = points.length;
|
||
|
||
for (i = 0, halfDist = 0; i < len - 1; i++) {
|
||
halfDist += points[i].distanceTo(points[i + 1]) / 2;
|
||
}
|
||
|
||
// The line is so small in the current view that all points are on the same pixel.
|
||
if (halfDist === 0) {
|
||
center = points[0];
|
||
} else {
|
||
for (i = 0, dist = 0; i < len - 1; i++) {
|
||
p1 = points[i];
|
||
p2 = points[i + 1];
|
||
segDist = p1.distanceTo(p2);
|
||
dist += segDist;
|
||
|
||
if (dist > halfDist) {
|
||
ratio = (dist - halfDist) / segDist;
|
||
center = [
|
||
p2.x - ratio * (p2.x - p1.x),
|
||
p2.y - ratio * (p2.y - p1.y)
|
||
];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return crs.unproject(toPoint(center));
|
||
}
|
||
|
||
var LineUtil = {
|
||
__proto__: null,
|
||
simplify: simplify,
|
||
pointToSegmentDistance: pointToSegmentDistance,
|
||
closestPointOnSegment: closestPointOnSegment,
|
||
clipSegment: clipSegment,
|
||
_getEdgeIntersection: _getEdgeIntersection,
|
||
_getBitCode: _getBitCode,
|
||
_sqClosestPointOnSegment: _sqClosestPointOnSegment,
|
||
isFlat: isFlat,
|
||
_flat: _flat,
|
||
polylineCenter: polylineCenter
|
||
};
|
||
|
||
/*
|
||
* @namespace PolyUtil
|
||
* Various utility functions for polygon geometries.
|
||
*/
|
||
|
||
/* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]
|
||
* Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).
|
||
* Used by Leaflet to only show polygon points that are on the screen or near, increasing
|
||
* performance. Note that polygon points needs different algorithm for clipping
|
||
* than polyline, so there's a separate method for it.
|
||
*/
|
||
function clipPolygon(points, bounds, round) {
|
||
var clippedPoints,
|
||
edges = [1, 4, 2, 8],
|
||
i, j, k,
|
||
a, b,
|
||
len, edge, p;
|
||
|
||
for (i = 0, len = points.length; i < len; i++) {
|
||
points[i]._code = _getBitCode(points[i], bounds);
|
||
}
|
||
|
||
// for each edge (left, bottom, right, top)
|
||
for (k = 0; k < 4; k++) {
|
||
edge = edges[k];
|
||
clippedPoints = [];
|
||
|
||
for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
|
||
a = points[i];
|
||
b = points[j];
|
||
|
||
// if a is inside the clip window
|
||
if (!(a._code & edge)) {
|
||
// if b is outside the clip window (a->b goes out of screen)
|
||
if (b._code & edge) {
|
||
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
||
p._code = _getBitCode(p, bounds);
|
||
clippedPoints.push(p);
|
||
}
|
||
clippedPoints.push(a);
|
||
|
||
// else if b is inside the clip window (a->b enters the screen)
|
||
} else if (!(b._code & edge)) {
|
||
p = _getEdgeIntersection(b, a, edge, bounds, round);
|
||
p._code = _getBitCode(p, bounds);
|
||
clippedPoints.push(p);
|
||
}
|
||
}
|
||
points = clippedPoints;
|
||
}
|
||
|
||
return points;
|
||
}
|
||
|
||
/* @function polygonCenter(latlngs: LatLng[] crs: CRS): LatLng
|
||
* Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the passed LatLngs (first ring) from a polygon.
|
||
*/
|
||
function polygonCenter(latlngs, crs) {
|
||
var i, j, p1, p2, f, area, x, y, center;
|
||
|
||
if (!latlngs || latlngs.length === 0) {
|
||
throw new Error('latlngs not passed');
|
||
}
|
||
|
||
if (!isFlat(latlngs)) {
|
||
console.warn('latlngs are not flat! Only the first ring will be used');
|
||
latlngs = latlngs[0];
|
||
}
|
||
|
||
var points = [];
|
||
for (var k in latlngs) {
|
||
points.push(crs.project(toLatLng(latlngs[k])));
|
||
}
|
||
|
||
var len = points.length;
|
||
area = x = y = 0;
|
||
|
||
// polygon centroid algorithm;
|
||
for (i = 0, j = len - 1; i < len; j = i++) {
|
||
p1 = points[i];
|
||
p2 = points[j];
|
||
|
||
f = p1.y * p2.x - p2.y * p1.x;
|
||
x += (p1.x + p2.x) * f;
|
||
y += (p1.y + p2.y) * f;
|
||
area += f * 3;
|
||
}
|
||
|
||
if (area === 0) {
|
||
// Polygon is so small that all points are on same pixel.
|
||
center = points[0];
|
||
} else {
|
||
center = [x / area, y / area];
|
||
}
|
||
return crs.unproject(toPoint(center));
|
||
}
|
||
|
||
var PolyUtil = {
|
||
__proto__: null,
|
||
clipPolygon: clipPolygon,
|
||
polygonCenter: polygonCenter
|
||
};
|
||
|
||
/*
|
||
* @namespace Projection
|
||
* @section
|
||
* Leaflet comes with a set of already defined Projections out of the box:
|
||
*
|
||
* @projection L.Projection.LonLat
|
||
*
|
||
* Equirectangular, or Plate Carree projection — the most simple projection,
|
||
* mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as
|
||
* latitude. Also suitable for flat worlds, e.g. game maps. Used by the
|
||
* `EPSG:4326` and `Simple` CRS.
|
||
*/
|
||
|
||
var LonLat = {
|
||
project: function (latlng) {
|
||
return new Point(latlng.lng, latlng.lat);
|
||
},
|
||
|
||
unproject: function (point) {
|
||
return new LatLng(point.y, point.x);
|
||
},
|
||
|
||
bounds: new Bounds([-180, -90], [180, 90])
|
||
};
|
||
|
||
/*
|
||
* @namespace Projection
|
||
* @projection L.Projection.Mercator
|
||
*
|
||
* Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.
|
||
*/
|
||
|
||
var Mercator = {
|
||
R: 6378137,
|
||
R_MINOR: 6356752.314245179,
|
||
|
||
bounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),
|
||
|
||
project: function (latlng) {
|
||
var d = Math.PI / 180,
|
||
r = this.R,
|
||
y = latlng.lat * d,
|
||
tmp = this.R_MINOR / r,
|
||
e = Math.sqrt(1 - tmp * tmp),
|
||
con = e * Math.sin(y);
|
||
|
||
var ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);
|
||
y = -r * Math.log(Math.max(ts, 1E-10));
|
||
|
||
return new Point(latlng.lng * d * r, y);
|
||
},
|
||
|
||
unproject: function (point) {
|
||
var d = 180 / Math.PI,
|
||
r = this.R,
|
||
tmp = this.R_MINOR / r,
|
||
e = Math.sqrt(1 - tmp * tmp),
|
||
ts = Math.exp(-point.y / r),
|
||
phi = Math.PI / 2 - 2 * Math.atan(ts);
|
||
|
||
for (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {
|
||
con = e * Math.sin(phi);
|
||
con = Math.pow((1 - con) / (1 + con), e / 2);
|
||
dphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;
|
||
phi += dphi;
|
||
}
|
||
|
||
return new LatLng(phi * d, point.x * d / r);
|
||
}
|
||
};
|
||
|
||
/*
|
||
* @class Projection
|
||
|
||
* An object with methods for projecting geographical coordinates of the world onto
|
||
* a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).
|
||
|
||
* @property bounds: Bounds
|
||
* The bounds (specified in CRS units) where the projection is valid
|
||
|
||
* @method project(latlng: LatLng): Point
|
||
* Projects geographical coordinates into a 2D point.
|
||
* Only accepts actual `L.LatLng` instances, not arrays.
|
||
|
||
* @method unproject(point: Point): LatLng
|
||
* The inverse of `project`. Projects a 2D point into a geographical location.
|
||
* Only accepts actual `L.Point` instances, not arrays.
|
||
|
||
* Note that the projection instances do not inherit from Leaflet's `Class` object,
|
||
* and can't be instantiated. Also, new classes can't inherit from them,
|
||
* and methods can't be added to them with the `include` function.
|
||
|
||
*/
|
||
|
||
var index = {
|
||
__proto__: null,
|
||
LonLat: LonLat,
|
||
Mercator: Mercator,
|
||
SphericalMercator: SphericalMercator
|
||
};
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.EPSG3395
|
||
*
|
||
* Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.
|
||
*/
|
||
var EPSG3395 = extend({}, Earth, {
|
||
code: 'EPSG:3395',
|
||
projection: Mercator,
|
||
|
||
transformation: (function () {
|
||
var scale = 0.5 / (Math.PI * Mercator.R);
|
||
return toTransformation(scale, 0.5, -scale, 0.5);
|
||
}())
|
||
});
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.EPSG4326
|
||
*
|
||
* A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.
|
||
*
|
||
* Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),
|
||
* which is a breaking change from 0.7.x behaviour. If you are using a `TileLayer`
|
||
* with this CRS, ensure that there are two 256x256 pixel tiles covering the
|
||
* whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),
|
||
* or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.
|
||
*/
|
||
|
||
var EPSG4326 = extend({}, Earth, {
|
||
code: 'EPSG:4326',
|
||
projection: LonLat,
|
||
transformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)
|
||
});
|
||
|
||
/*
|
||
* @namespace CRS
|
||
* @crs L.CRS.Simple
|
||
*
|
||
* A simple CRS that maps longitude and latitude into `x` and `y` directly.
|
||
* May be used for maps of flat surfaces (e.g. game maps). Note that the `y`
|
||
* axis should still be inverted (going from bottom to top). `distance()` returns
|
||
* simple euclidean distance.
|
||
*/
|
||
|
||
var Simple = extend({}, CRS, {
|
||
projection: LonLat,
|
||
transformation: toTransformation(1, 0, -1, 0),
|
||
|
||
scale: function (zoom) {
|
||
return Math.pow(2, zoom);
|
||
},
|
||
|
||
zoom: function (scale) {
|
||
return Math.log(scale) / Math.LN2;
|
||
},
|
||
|
||
distance: function (latlng1, latlng2) {
|
||
var dx = latlng2.lng - latlng1.lng,
|
||
dy = latlng2.lat - latlng1.lat;
|
||
|
||
return Math.sqrt(dx * dx + dy * dy);
|
||
},
|
||
|
||
infinite: true
|
||
});
|
||
|
||
CRS.Earth = Earth;
|
||
CRS.EPSG3395 = EPSG3395;
|
||
CRS.EPSG3857 = EPSG3857;
|
||
CRS.EPSG900913 = EPSG900913;
|
||
CRS.EPSG4326 = EPSG4326;
|
||
CRS.Simple = Simple;
|
||
|
||
/*
|
||
* @class Layer
|
||
* @inherits Evented
|
||
* @aka L.Layer
|
||
* @aka ILayer
|
||
*
|
||
* A set of methods from the Layer base class that all Leaflet layers use.
|
||
* Inherits all methods, options and events from `L.Evented`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var layer = L.marker(latlng).addTo(map);
|
||
* layer.addTo(map);
|
||
* layer.remove();
|
||
* ```
|
||
*
|
||
* @event add: Event
|
||
* Fired after the layer is added to a map
|
||
*
|
||
* @event remove: Event
|
||
* Fired after the layer is removed from a map
|
||
*/
|
||
|
||
|
||
var Layer = Evented.extend({
|
||
|
||
// Classes extending `L.Layer` will inherit the following options:
|
||
options: {
|
||
// @option pane: String = 'overlayPane'
|
||
// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.
|
||
pane: 'overlayPane',
|
||
|
||
// @option attribution: String = null
|
||
// String to be shown in the attribution control, e.g. "© OpenStreetMap contributors". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.
|
||
attribution: null,
|
||
|
||
bubblingMouseEvents: true
|
||
},
|
||
|
||
/* @section
|
||
* Classes extending `L.Layer` will inherit the following methods:
|
||
*
|
||
* @method addTo(map: Map|LayerGroup): this
|
||
* Adds the layer to the given map or layer group.
|
||
*/
|
||
addTo: function (map) {
|
||
map.addLayer(this);
|
||
return this;
|
||
},
|
||
|
||
// @method remove: this
|
||
// Removes the layer from the map it is currently active on.
|
||
remove: function () {
|
||
return this.removeFrom(this._map || this._mapToAdd);
|
||
},
|
||
|
||
// @method removeFrom(map: Map): this
|
||
// Removes the layer from the given map
|
||
//
|
||
// @alternative
|
||
// @method removeFrom(group: LayerGroup): this
|
||
// Removes the layer from the given `LayerGroup`
|
||
removeFrom: function (obj) {
|
||
if (obj) {
|
||
obj.removeLayer(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getPane(name? : String): HTMLElement
|
||
// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.
|
||
getPane: function (name) {
|
||
return this._map.getPane(name ? (this.options[name] || name) : this.options.pane);
|
||
},
|
||
|
||
addInteractiveTarget: function (targetEl) {
|
||
this._map._targets[stamp(targetEl)] = this;
|
||
return this;
|
||
},
|
||
|
||
removeInteractiveTarget: function (targetEl) {
|
||
delete this._map._targets[stamp(targetEl)];
|
||
return this;
|
||
},
|
||
|
||
// @method getAttribution: String
|
||
// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).
|
||
getAttribution: function () {
|
||
return this.options.attribution;
|
||
},
|
||
|
||
_layerAdd: function (e) {
|
||
var map = e.target;
|
||
|
||
// check in case layer gets added and then removed before the map is ready
|
||
if (!map.hasLayer(this)) { return; }
|
||
|
||
this._map = map;
|
||
this._zoomAnimated = map._zoomAnimated;
|
||
|
||
if (this.getEvents) {
|
||
var events = this.getEvents();
|
||
map.on(events, this);
|
||
this.once('remove', function () {
|
||
map.off(events, this);
|
||
}, this);
|
||
}
|
||
|
||
this.onAdd(map);
|
||
|
||
this.fire('add');
|
||
map.fire('layeradd', {layer: this});
|
||
}
|
||
});
|
||
|
||
/* @section Extension methods
|
||
* @uninheritable
|
||
*
|
||
* Every layer should extend from `L.Layer` and (re-)implement the following methods.
|
||
*
|
||
* @method onAdd(map: Map): this
|
||
* Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).
|
||
*
|
||
* @method onRemove(map: Map): this
|
||
* Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).
|
||
*
|
||
* @method getEvents(): Object
|
||
* This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.
|
||
*
|
||
* @method getAttribution(): String
|
||
* This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.
|
||
*
|
||
* @method beforeAdd(map: Map): this
|
||
* Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.
|
||
*/
|
||
|
||
|
||
/* @namespace Map
|
||
* @section Layer events
|
||
*
|
||
* @event layeradd: LayerEvent
|
||
* Fired when a new layer is added to the map.
|
||
*
|
||
* @event layerremove: LayerEvent
|
||
* Fired when some layer is removed from the map
|
||
*
|
||
* @section Methods for Layers and Controls
|
||
*/
|
||
Map.include({
|
||
// @method addLayer(layer: Layer): this
|
||
// Adds the given layer to the map
|
||
addLayer: function (layer) {
|
||
if (!layer._layerAdd) {
|
||
throw new Error('The provided object is not a Layer.');
|
||
}
|
||
|
||
var id = stamp(layer);
|
||
if (this._layers[id]) { return this; }
|
||
this._layers[id] = layer;
|
||
|
||
layer._mapToAdd = this;
|
||
|
||
if (layer.beforeAdd) {
|
||
layer.beforeAdd(this);
|
||
}
|
||
|
||
this.whenReady(layer._layerAdd, layer);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method removeLayer(layer: Layer): this
|
||
// Removes the given layer from the map.
|
||
removeLayer: function (layer) {
|
||
var id = stamp(layer);
|
||
|
||
if (!this._layers[id]) { return this; }
|
||
|
||
if (this._loaded) {
|
||
layer.onRemove(this);
|
||
}
|
||
|
||
delete this._layers[id];
|
||
|
||
if (this._loaded) {
|
||
this.fire('layerremove', {layer: layer});
|
||
layer.fire('remove');
|
||
}
|
||
|
||
layer._map = layer._mapToAdd = null;
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method hasLayer(layer: Layer): Boolean
|
||
// Returns `true` if the given layer is currently added to the map
|
||
hasLayer: function (layer) {
|
||
return stamp(layer) in this._layers;
|
||
},
|
||
|
||
/* @method eachLayer(fn: Function, context?: Object): this
|
||
* Iterates over the layers of the map, optionally specifying context of the iterator function.
|
||
* ```
|
||
* map.eachLayer(function(layer){
|
||
* layer.bindPopup('Hello');
|
||
* });
|
||
* ```
|
||
*/
|
||
eachLayer: function (method, context) {
|
||
for (var i in this._layers) {
|
||
method.call(context, this._layers[i]);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_addLayers: function (layers) {
|
||
layers = layers ? (isArray(layers) ? layers : [layers]) : [];
|
||
|
||
for (var i = 0, len = layers.length; i < len; i++) {
|
||
this.addLayer(layers[i]);
|
||
}
|
||
},
|
||
|
||
_addZoomLimit: function (layer) {
|
||
if (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {
|
||
this._zoomBoundLayers[stamp(layer)] = layer;
|
||
this._updateZoomLevels();
|
||
}
|
||
},
|
||
|
||
_removeZoomLimit: function (layer) {
|
||
var id = stamp(layer);
|
||
|
||
if (this._zoomBoundLayers[id]) {
|
||
delete this._zoomBoundLayers[id];
|
||
this._updateZoomLevels();
|
||
}
|
||
},
|
||
|
||
_updateZoomLevels: function () {
|
||
var minZoom = Infinity,
|
||
maxZoom = -Infinity,
|
||
oldZoomSpan = this._getZoomSpan();
|
||
|
||
for (var i in this._zoomBoundLayers) {
|
||
var options = this._zoomBoundLayers[i].options;
|
||
|
||
minZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);
|
||
maxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);
|
||
}
|
||
|
||
this._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;
|
||
this._layersMinZoom = minZoom === Infinity ? undefined : minZoom;
|
||
|
||
// @section Map state change events
|
||
// @event zoomlevelschange: Event
|
||
// Fired when the number of zoomlevels on the map is changed due
|
||
// to adding or removing a layer.
|
||
if (oldZoomSpan !== this._getZoomSpan()) {
|
||
this.fire('zoomlevelschange');
|
||
}
|
||
|
||
if (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {
|
||
this.setZoom(this._layersMaxZoom);
|
||
}
|
||
if (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {
|
||
this.setZoom(this._layersMinZoom);
|
||
}
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class LayerGroup
|
||
* @aka L.LayerGroup
|
||
* @inherits Interactive layer
|
||
*
|
||
* Used to group several layers and handle them as one. If you add it to the map,
|
||
* any layers added or removed from the group will be added/removed on the map as
|
||
* well. Extends `Layer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.layerGroup([marker1, marker2])
|
||
* .addLayer(polyline)
|
||
* .addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var LayerGroup = Layer.extend({
|
||
|
||
initialize: function (layers, options) {
|
||
setOptions(this, options);
|
||
|
||
this._layers = {};
|
||
|
||
var i, len;
|
||
|
||
if (layers) {
|
||
for (i = 0, len = layers.length; i < len; i++) {
|
||
this.addLayer(layers[i]);
|
||
}
|
||
}
|
||
},
|
||
|
||
// @method addLayer(layer: Layer): this
|
||
// Adds the given layer to the group.
|
||
addLayer: function (layer) {
|
||
var id = this.getLayerId(layer);
|
||
|
||
this._layers[id] = layer;
|
||
|
||
if (this._map) {
|
||
this._map.addLayer(layer);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method removeLayer(layer: Layer): this
|
||
// Removes the given layer from the group.
|
||
// @alternative
|
||
// @method removeLayer(id: Number): this
|
||
// Removes the layer with the given internal ID from the group.
|
||
removeLayer: function (layer) {
|
||
var id = layer in this._layers ? layer : this.getLayerId(layer);
|
||
|
||
if (this._map && this._layers[id]) {
|
||
this._map.removeLayer(this._layers[id]);
|
||
}
|
||
|
||
delete this._layers[id];
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method hasLayer(layer: Layer): Boolean
|
||
// Returns `true` if the given layer is currently added to the group.
|
||
// @alternative
|
||
// @method hasLayer(id: Number): Boolean
|
||
// Returns `true` if the given internal ID is currently added to the group.
|
||
hasLayer: function (layer) {
|
||
var layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);
|
||
return layerId in this._layers;
|
||
},
|
||
|
||
// @method clearLayers(): this
|
||
// Removes all the layers from the group.
|
||
clearLayers: function () {
|
||
return this.eachLayer(this.removeLayer, this);
|
||
},
|
||
|
||
// @method invoke(methodName: String, …): this
|
||
// Calls `methodName` on every layer contained in this group, passing any
|
||
// additional parameters. Has no effect if the layers contained do not
|
||
// implement `methodName`.
|
||
invoke: function (methodName) {
|
||
var args = Array.prototype.slice.call(arguments, 1),
|
||
i, layer;
|
||
|
||
for (i in this._layers) {
|
||
layer = this._layers[i];
|
||
|
||
if (layer[methodName]) {
|
||
layer[methodName].apply(layer, args);
|
||
}
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this.eachLayer(map.addLayer, map);
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
this.eachLayer(map.removeLayer, map);
|
||
},
|
||
|
||
// @method eachLayer(fn: Function, context?: Object): this
|
||
// Iterates over the layers of the group, optionally specifying context of the iterator function.
|
||
// ```js
|
||
// group.eachLayer(function (layer) {
|
||
// layer.bindPopup('Hello');
|
||
// });
|
||
// ```
|
||
eachLayer: function (method, context) {
|
||
for (var i in this._layers) {
|
||
method.call(context, this._layers[i]);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getLayer(id: Number): Layer
|
||
// Returns the layer with the given internal ID.
|
||
getLayer: function (id) {
|
||
return this._layers[id];
|
||
},
|
||
|
||
// @method getLayers(): Layer[]
|
||
// Returns an array of all the layers added to the group.
|
||
getLayers: function () {
|
||
var layers = [];
|
||
this.eachLayer(layers.push, layers);
|
||
return layers;
|
||
},
|
||
|
||
// @method setZIndex(zIndex: Number): this
|
||
// Calls `setZIndex` on every layer contained in this group, passing the z-index.
|
||
setZIndex: function (zIndex) {
|
||
return this.invoke('setZIndex', zIndex);
|
||
},
|
||
|
||
// @method getLayerId(layer: Layer): Number
|
||
// Returns the internal ID for a layer
|
||
getLayerId: function (layer) {
|
||
return stamp(layer);
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.layerGroup(layers?: Layer[], options?: Object)
|
||
// Create a layer group, optionally given an initial set of layers and an `options` object.
|
||
var layerGroup = function (layers, options) {
|
||
return new LayerGroup(layers, options);
|
||
};
|
||
|
||
/*
|
||
* @class FeatureGroup
|
||
* @aka L.FeatureGroup
|
||
* @inherits LayerGroup
|
||
*
|
||
* Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:
|
||
* * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))
|
||
* * Events are propagated to the `FeatureGroup`, so if the group has an event
|
||
* handler, it will handle events from any of the layers. This includes mouse events
|
||
* and custom events.
|
||
* * Has `layeradd` and `layerremove` events
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.featureGroup([marker1, marker2, polyline])
|
||
* .bindPopup('Hello world!')
|
||
* .on('click', function() { alert('Clicked on a member of the group!'); })
|
||
* .addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var FeatureGroup = LayerGroup.extend({
|
||
|
||
addLayer: function (layer) {
|
||
if (this.hasLayer(layer)) {
|
||
return this;
|
||
}
|
||
|
||
layer.addEventParent(this);
|
||
|
||
LayerGroup.prototype.addLayer.call(this, layer);
|
||
|
||
// @event layeradd: LayerEvent
|
||
// Fired when a layer is added to this `FeatureGroup`
|
||
return this.fire('layeradd', {layer: layer});
|
||
},
|
||
|
||
removeLayer: function (layer) {
|
||
if (!this.hasLayer(layer)) {
|
||
return this;
|
||
}
|
||
if (layer in this._layers) {
|
||
layer = this._layers[layer];
|
||
}
|
||
|
||
layer.removeEventParent(this);
|
||
|
||
LayerGroup.prototype.removeLayer.call(this, layer);
|
||
|
||
// @event layerremove: LayerEvent
|
||
// Fired when a layer is removed from this `FeatureGroup`
|
||
return this.fire('layerremove', {layer: layer});
|
||
},
|
||
|
||
// @method setStyle(style: Path options): this
|
||
// Sets the given path options to each layer of the group that has a `setStyle` method.
|
||
setStyle: function (style) {
|
||
return this.invoke('setStyle', style);
|
||
},
|
||
|
||
// @method bringToFront(): this
|
||
// Brings the layer group to the top of all other layers
|
||
bringToFront: function () {
|
||
return this.invoke('bringToFront');
|
||
},
|
||
|
||
// @method bringToBack(): this
|
||
// Brings the layer group to the back of all other layers
|
||
bringToBack: function () {
|
||
return this.invoke('bringToBack');
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
|
||
getBounds: function () {
|
||
var bounds = new LatLngBounds();
|
||
|
||
for (var id in this._layers) {
|
||
var layer = this._layers[id];
|
||
bounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());
|
||
}
|
||
return bounds;
|
||
}
|
||
});
|
||
|
||
// @factory L.featureGroup(layers?: Layer[], options?: Object)
|
||
// Create a feature group, optionally given an initial set of layers and an `options` object.
|
||
var featureGroup = function (layers, options) {
|
||
return new FeatureGroup(layers, options);
|
||
};
|
||
|
||
/*
|
||
* @class Icon
|
||
* @aka L.Icon
|
||
*
|
||
* Represents an icon to provide when creating a marker.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var myIcon = L.icon({
|
||
* iconUrl: 'my-icon.png',
|
||
* iconRetinaUrl: 'my-icon@2x.png',
|
||
* iconSize: [38, 95],
|
||
* iconAnchor: [22, 94],
|
||
* popupAnchor: [-3, -76],
|
||
* shadowUrl: 'my-icon-shadow.png',
|
||
* shadowRetinaUrl: 'my-icon-shadow@2x.png',
|
||
* shadowSize: [68, 95],
|
||
* shadowAnchor: [22, 94]
|
||
* });
|
||
*
|
||
* L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
|
||
* ```
|
||
*
|
||
* `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.
|
||
*
|
||
*/
|
||
|
||
var Icon = Class.extend({
|
||
|
||
/* @section
|
||
* @aka Icon options
|
||
*
|
||
* @option iconUrl: String = null
|
||
* **(required)** The URL to the icon image (absolute or relative to your script path).
|
||
*
|
||
* @option iconRetinaUrl: String = null
|
||
* The URL to a retina sized version of the icon image (absolute or relative to your
|
||
* script path). Used for Retina screen devices.
|
||
*
|
||
* @option iconSize: Point = null
|
||
* Size of the icon image in pixels.
|
||
*
|
||
* @option iconAnchor: Point = null
|
||
* The coordinates of the "tip" of the icon (relative to its top left corner). The icon
|
||
* will be aligned so that this point is at the marker's geographical location. Centered
|
||
* by default if size is specified, also can be set in CSS with negative margins.
|
||
*
|
||
* @option popupAnchor: Point = [0, 0]
|
||
* The coordinates of the point from which popups will "open", relative to the icon anchor.
|
||
*
|
||
* @option tooltipAnchor: Point = [0, 0]
|
||
* The coordinates of the point from which tooltips will "open", relative to the icon anchor.
|
||
*
|
||
* @option shadowUrl: String = null
|
||
* The URL to the icon shadow image. If not specified, no shadow image will be created.
|
||
*
|
||
* @option shadowRetinaUrl: String = null
|
||
*
|
||
* @option shadowSize: Point = null
|
||
* Size of the shadow image in pixels.
|
||
*
|
||
* @option shadowAnchor: Point = null
|
||
* The coordinates of the "tip" of the shadow (relative to its top left corner) (the same
|
||
* as iconAnchor if not specified).
|
||
*
|
||
* @option className: String = ''
|
||
* A custom class name to assign to both icon and shadow images. Empty by default.
|
||
*/
|
||
|
||
options: {
|
||
popupAnchor: [0, 0],
|
||
tooltipAnchor: [0, 0],
|
||
|
||
// @option crossOrigin: Boolean|String = false
|
||
// Whether the crossOrigin attribute will be added to the tiles.
|
||
// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
|
||
// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
|
||
crossOrigin: false
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
},
|
||
|
||
// @method createIcon(oldIcon?: HTMLElement): HTMLElement
|
||
// Called internally when the icon has to be shown, returns a `<img>` HTML element
|
||
// styled according to the options.
|
||
createIcon: function (oldIcon) {
|
||
return this._createIcon('icon', oldIcon);
|
||
},
|
||
|
||
// @method createShadow(oldIcon?: HTMLElement): HTMLElement
|
||
// As `createIcon`, but for the shadow beneath it.
|
||
createShadow: function (oldIcon) {
|
||
return this._createIcon('shadow', oldIcon);
|
||
},
|
||
|
||
_createIcon: function (name, oldIcon) {
|
||
var src = this._getIconUrl(name);
|
||
|
||
if (!src) {
|
||
if (name === 'icon') {
|
||
throw new Error('iconUrl not set in Icon options (see the docs).');
|
||
}
|
||
return null;
|
||
}
|
||
|
||
var img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);
|
||
this._setIconStyles(img, name);
|
||
|
||
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||
img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||
}
|
||
|
||
return img;
|
||
},
|
||
|
||
_setIconStyles: function (img, name) {
|
||
var options = this.options;
|
||
var sizeOption = options[name + 'Size'];
|
||
|
||
if (typeof sizeOption === 'number') {
|
||
sizeOption = [sizeOption, sizeOption];
|
||
}
|
||
|
||
var size = toPoint(sizeOption),
|
||
anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||
|
||
size && size.divideBy(2, true));
|
||
|
||
img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');
|
||
|
||
if (anchor) {
|
||
img.style.marginLeft = (-anchor.x) + 'px';
|
||
img.style.marginTop = (-anchor.y) + 'px';
|
||
}
|
||
|
||
if (size) {
|
||
img.style.width = size.x + 'px';
|
||
img.style.height = size.y + 'px';
|
||
}
|
||
},
|
||
|
||
_createImg: function (src, el) {
|
||
el = el || document.createElement('img');
|
||
el.src = src;
|
||
return el;
|
||
},
|
||
|
||
_getIconUrl: function (name) {
|
||
return Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.icon(options: Icon options)
|
||
// Creates an icon instance with the given options.
|
||
function icon(options) {
|
||
return new Icon(options);
|
||
}
|
||
|
||
/*
|
||
* @miniclass Icon.Default (Icon)
|
||
* @aka L.Icon.Default
|
||
* @section
|
||
*
|
||
* A trivial subclass of `Icon`, represents the icon to use in `Marker`s when
|
||
* no icon is specified. Points to the blue marker image distributed with Leaflet
|
||
* releases.
|
||
*
|
||
* In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`
|
||
* (which is a set of `Icon options`).
|
||
*
|
||
* If you want to _completely_ replace the default icon, override the
|
||
* `L.Marker.prototype.options.icon` with your own icon instead.
|
||
*/
|
||
|
||
var IconDefault = Icon.extend({
|
||
|
||
options: {
|
||
iconUrl: 'marker-icon.png',
|
||
iconRetinaUrl: 'marker-icon-2x.png',
|
||
shadowUrl: 'marker-shadow.png',
|
||
iconSize: [25, 41],
|
||
iconAnchor: [12, 41],
|
||
popupAnchor: [1, -34],
|
||
tooltipAnchor: [16, -28],
|
||
shadowSize: [41, 41]
|
||
},
|
||
|
||
_getIconUrl: function (name) {
|
||
if (typeof IconDefault.imagePath !== 'string') { // Deprecated, backwards-compatibility only
|
||
IconDefault.imagePath = this._detectIconPath();
|
||
}
|
||
|
||
// @option imagePath: String
|
||
// `Icon.Default` will try to auto-detect the location of the
|
||
// blue icon images. If you are placing these images in a non-standard
|
||
// way, set this option to point to the right path.
|
||
return (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);
|
||
},
|
||
|
||
_stripUrl: function (path) { // separate function to use in tests
|
||
var strip = function (str, re, idx) {
|
||
var match = re.exec(str);
|
||
return match && match[idx];
|
||
};
|
||
path = strip(path, /^url\((['"])?(.+)\1\)$/, 2);
|
||
return path && strip(path, /^(.*)marker-icon\.png$/, 1);
|
||
},
|
||
|
||
_detectIconPath: function () {
|
||
var el = create$1('div', 'leaflet-default-icon-path', document.body);
|
||
var path = getStyle(el, 'background-image') ||
|
||
getStyle(el, 'backgroundImage'); // IE8
|
||
|
||
document.body.removeChild(el);
|
||
path = this._stripUrl(path);
|
||
if (path) { return path; }
|
||
var link = document.querySelector('link[href$="leaflet.css"]');
|
||
if (!link) { return ''; }
|
||
return link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
|
||
*/
|
||
|
||
|
||
/* @namespace Marker
|
||
* @section Interaction handlers
|
||
*
|
||
* Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:
|
||
*
|
||
* ```js
|
||
* marker.dragging.disable();
|
||
* ```
|
||
*
|
||
* @property dragging: Handler
|
||
* Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).
|
||
*/
|
||
|
||
var MarkerDrag = Handler.extend({
|
||
initialize: function (marker) {
|
||
this._marker = marker;
|
||
},
|
||
|
||
addHooks: function () {
|
||
var icon = this._marker._icon;
|
||
|
||
if (!this._draggable) {
|
||
this._draggable = new Draggable(icon, icon, true);
|
||
}
|
||
|
||
this._draggable.on({
|
||
dragstart: this._onDragStart,
|
||
predrag: this._onPreDrag,
|
||
drag: this._onDrag,
|
||
dragend: this._onDragEnd
|
||
}, this).enable();
|
||
|
||
addClass(icon, 'leaflet-marker-draggable');
|
||
},
|
||
|
||
removeHooks: function () {
|
||
this._draggable.off({
|
||
dragstart: this._onDragStart,
|
||
predrag: this._onPreDrag,
|
||
drag: this._onDrag,
|
||
dragend: this._onDragEnd
|
||
}, this).disable();
|
||
|
||
if (this._marker._icon) {
|
||
removeClass(this._marker._icon, 'leaflet-marker-draggable');
|
||
}
|
||
},
|
||
|
||
moved: function () {
|
||
return this._draggable && this._draggable._moved;
|
||
},
|
||
|
||
_adjustPan: function (e) {
|
||
var marker = this._marker,
|
||
map = marker._map,
|
||
speed = this._marker.options.autoPanSpeed,
|
||
padding = this._marker.options.autoPanPadding,
|
||
iconPos = getPosition(marker._icon),
|
||
bounds = map.getPixelBounds(),
|
||
origin = map.getPixelOrigin();
|
||
|
||
var panBounds = toBounds(
|
||
bounds.min._subtract(origin).add(padding),
|
||
bounds.max._subtract(origin).subtract(padding)
|
||
);
|
||
|
||
if (!panBounds.contains(iconPos)) {
|
||
// Compute incremental movement
|
||
var movement = toPoint(
|
||
(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -
|
||
(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),
|
||
|
||
(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -
|
||
(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)
|
||
).multiplyBy(speed);
|
||
|
||
map.panBy(movement, {animate: false});
|
||
|
||
this._draggable._newPos._add(movement);
|
||
this._draggable._startPos._add(movement);
|
||
|
||
setPosition(marker._icon, this._draggable._newPos);
|
||
this._onDrag(e);
|
||
|
||
this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));
|
||
}
|
||
},
|
||
|
||
_onDragStart: function () {
|
||
// @section Dragging events
|
||
// @event dragstart: Event
|
||
// Fired when the user starts dragging the marker.
|
||
|
||
// @event movestart: Event
|
||
// Fired when the marker starts moving (because of dragging).
|
||
|
||
this._oldLatLng = this._marker.getLatLng();
|
||
|
||
// When using ES6 imports it could not be set when `Popup` was not imported as well
|
||
this._marker.closePopup && this._marker.closePopup();
|
||
|
||
this._marker
|
||
.fire('movestart')
|
||
.fire('dragstart');
|
||
},
|
||
|
||
_onPreDrag: function (e) {
|
||
if (this._marker.options.autoPan) {
|
||
cancelAnimFrame(this._panRequest);
|
||
this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));
|
||
}
|
||
},
|
||
|
||
_onDrag: function (e) {
|
||
var marker = this._marker,
|
||
shadow = marker._shadow,
|
||
iconPos = getPosition(marker._icon),
|
||
latlng = marker._map.layerPointToLatLng(iconPos);
|
||
|
||
// update shadow position
|
||
if (shadow) {
|
||
setPosition(shadow, iconPos);
|
||
}
|
||
|
||
marker._latlng = latlng;
|
||
e.latlng = latlng;
|
||
e.oldLatLng = this._oldLatLng;
|
||
|
||
// @event drag: Event
|
||
// Fired repeatedly while the user drags the marker.
|
||
marker
|
||
.fire('move', e)
|
||
.fire('drag', e);
|
||
},
|
||
|
||
_onDragEnd: function (e) {
|
||
// @event dragend: DragEndEvent
|
||
// Fired when the user stops dragging the marker.
|
||
|
||
cancelAnimFrame(this._panRequest);
|
||
|
||
// @event moveend: Event
|
||
// Fired when the marker stops moving (because of dragging).
|
||
delete this._oldLatLng;
|
||
this._marker
|
||
.fire('moveend')
|
||
.fire('dragend', e);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Marker
|
||
* @inherits Interactive layer
|
||
* @aka L.Marker
|
||
* L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.marker([50.5, 30.5]).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var Marker = Layer.extend({
|
||
|
||
// @section
|
||
// @aka Marker options
|
||
options: {
|
||
// @option icon: Icon = *
|
||
// Icon instance to use for rendering the marker.
|
||
// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.
|
||
// If not specified, a common instance of `L.Icon.Default` is used.
|
||
icon: new IconDefault(),
|
||
|
||
// Option inherited from "Interactive layer" abstract class
|
||
interactive: true,
|
||
|
||
// @option keyboard: Boolean = true
|
||
// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.
|
||
keyboard: true,
|
||
|
||
// @option title: String = ''
|
||
// Text for the browser tooltip that appear on marker hover (no tooltip by default).
|
||
// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
|
||
title: '',
|
||
|
||
// @option alt: String = 'Marker'
|
||
// Text for the `alt` attribute of the icon image.
|
||
// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
|
||
alt: 'Marker',
|
||
|
||
// @option zIndexOffset: Number = 0
|
||
// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).
|
||
zIndexOffset: 0,
|
||
|
||
// @option opacity: Number = 1.0
|
||
// The opacity of the marker.
|
||
opacity: 1,
|
||
|
||
// @option riseOnHover: Boolean = false
|
||
// If `true`, the marker will get on top of others when you hover the mouse over it.
|
||
riseOnHover: false,
|
||
|
||
// @option riseOffset: Number = 250
|
||
// The z-index offset used for the `riseOnHover` feature.
|
||
riseOffset: 250,
|
||
|
||
// @option pane: String = 'markerPane'
|
||
// `Map pane` where the markers icon will be added.
|
||
pane: 'markerPane',
|
||
|
||
// @option shadowPane: String = 'shadowPane'
|
||
// `Map pane` where the markers shadow will be added.
|
||
shadowPane: 'shadowPane',
|
||
|
||
// @option bubblingMouseEvents: Boolean = false
|
||
// When `true`, a mouse event on this marker will trigger the same event on the map
|
||
// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
|
||
bubblingMouseEvents: false,
|
||
|
||
// @option autoPanOnFocus: Boolean = true
|
||
// When `true`, the map will pan whenever the marker is focused (via
|
||
// e.g. pressing `tab` on the keyboard) to ensure the marker is
|
||
// visible within the map's bounds
|
||
autoPanOnFocus: true,
|
||
|
||
// @section Draggable marker options
|
||
// @option draggable: Boolean = false
|
||
// Whether the marker is draggable with mouse/touch or not.
|
||
draggable: false,
|
||
|
||
// @option autoPan: Boolean = false
|
||
// Whether to pan the map when dragging this marker near its edge or not.
|
||
autoPan: false,
|
||
|
||
// @option autoPanPadding: Point = Point(50, 50)
|
||
// Distance (in pixels to the left/right and to the top/bottom) of the
|
||
// map edge to start panning the map.
|
||
autoPanPadding: [50, 50],
|
||
|
||
// @option autoPanSpeed: Number = 10
|
||
// Number of pixels the map should pan by.
|
||
autoPanSpeed: 10
|
||
},
|
||
|
||
/* @section
|
||
*
|
||
* In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:
|
||
*/
|
||
|
||
initialize: function (latlng, options) {
|
||
setOptions(this, options);
|
||
this._latlng = toLatLng(latlng);
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;
|
||
|
||
if (this._zoomAnimated) {
|
||
map.on('zoomanim', this._animateZoom, this);
|
||
}
|
||
|
||
this._initIcon();
|
||
this.update();
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
if (this.dragging && this.dragging.enabled()) {
|
||
this.options.draggable = true;
|
||
this.dragging.removeHooks();
|
||
}
|
||
delete this.dragging;
|
||
|
||
if (this._zoomAnimated) {
|
||
map.off('zoomanim', this._animateZoom, this);
|
||
}
|
||
|
||
this._removeIcon();
|
||
this._removeShadow();
|
||
},
|
||
|
||
getEvents: function () {
|
||
return {
|
||
zoom: this.update,
|
||
viewreset: this.update
|
||
};
|
||
},
|
||
|
||
// @method getLatLng: LatLng
|
||
// Returns the current geographical position of the marker.
|
||
getLatLng: function () {
|
||
return this._latlng;
|
||
},
|
||
|
||
// @method setLatLng(latlng: LatLng): this
|
||
// Changes the marker position to the given point.
|
||
setLatLng: function (latlng) {
|
||
var oldLatLng = this._latlng;
|
||
this._latlng = toLatLng(latlng);
|
||
this.update();
|
||
|
||
// @event move: Event
|
||
// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.
|
||
return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});
|
||
},
|
||
|
||
// @method setZIndexOffset(offset: Number): this
|
||
// Changes the [zIndex offset](#marker-zindexoffset) of the marker.
|
||
setZIndexOffset: function (offset) {
|
||
this.options.zIndexOffset = offset;
|
||
return this.update();
|
||
},
|
||
|
||
// @method getIcon: Icon
|
||
// Returns the current icon used by the marker
|
||
getIcon: function () {
|
||
return this.options.icon;
|
||
},
|
||
|
||
// @method setIcon(icon: Icon): this
|
||
// Changes the marker icon.
|
||
setIcon: function (icon) {
|
||
|
||
this.options.icon = icon;
|
||
|
||
if (this._map) {
|
||
this._initIcon();
|
||
this.update();
|
||
}
|
||
|
||
if (this._popup) {
|
||
this.bindPopup(this._popup, this._popup.options);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
getElement: function () {
|
||
return this._icon;
|
||
},
|
||
|
||
update: function () {
|
||
|
||
if (this._icon && this._map) {
|
||
var pos = this._map.latLngToLayerPoint(this._latlng).round();
|
||
this._setPos(pos);
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
_initIcon: function () {
|
||
var options = this.options,
|
||
classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
|
||
|
||
var icon = options.icon.createIcon(this._icon),
|
||
addIcon = false;
|
||
|
||
// if we're not reusing the icon, remove the old one and init new one
|
||
if (icon !== this._icon) {
|
||
if (this._icon) {
|
||
this._removeIcon();
|
||
}
|
||
addIcon = true;
|
||
|
||
if (options.title) {
|
||
icon.title = options.title;
|
||
}
|
||
|
||
if (icon.tagName === 'IMG') {
|
||
icon.alt = options.alt || '';
|
||
}
|
||
}
|
||
|
||
addClass(icon, classToAdd);
|
||
|
||
if (options.keyboard) {
|
||
icon.tabIndex = '0';
|
||
icon.setAttribute('role', 'button');
|
||
}
|
||
|
||
this._icon = icon;
|
||
|
||
if (options.riseOnHover) {
|
||
this.on({
|
||
mouseover: this._bringToFront,
|
||
mouseout: this._resetZIndex
|
||
});
|
||
}
|
||
|
||
if (this.options.autoPanOnFocus) {
|
||
on(icon, 'focus', this._panOnFocus, this);
|
||
}
|
||
|
||
var newShadow = options.icon.createShadow(this._shadow),
|
||
addShadow = false;
|
||
|
||
if (newShadow !== this._shadow) {
|
||
this._removeShadow();
|
||
addShadow = true;
|
||
}
|
||
|
||
if (newShadow) {
|
||
addClass(newShadow, classToAdd);
|
||
newShadow.alt = '';
|
||
}
|
||
this._shadow = newShadow;
|
||
|
||
|
||
if (options.opacity < 1) {
|
||
this._updateOpacity();
|
||
}
|
||
|
||
|
||
if (addIcon) {
|
||
this.getPane().appendChild(this._icon);
|
||
}
|
||
this._initInteraction();
|
||
if (newShadow && addShadow) {
|
||
this.getPane(options.shadowPane).appendChild(this._shadow);
|
||
}
|
||
},
|
||
|
||
_removeIcon: function () {
|
||
if (this.options.riseOnHover) {
|
||
this.off({
|
||
mouseover: this._bringToFront,
|
||
mouseout: this._resetZIndex
|
||
});
|
||
}
|
||
|
||
if (this.options.autoPanOnFocus) {
|
||
off(this._icon, 'focus', this._panOnFocus, this);
|
||
}
|
||
|
||
remove(this._icon);
|
||
this.removeInteractiveTarget(this._icon);
|
||
|
||
this._icon = null;
|
||
},
|
||
|
||
_removeShadow: function () {
|
||
if (this._shadow) {
|
||
remove(this._shadow);
|
||
}
|
||
this._shadow = null;
|
||
},
|
||
|
||
_setPos: function (pos) {
|
||
|
||
if (this._icon) {
|
||
setPosition(this._icon, pos);
|
||
}
|
||
|
||
if (this._shadow) {
|
||
setPosition(this._shadow, pos);
|
||
}
|
||
|
||
this._zIndex = pos.y + this.options.zIndexOffset;
|
||
|
||
this._resetZIndex();
|
||
},
|
||
|
||
_updateZIndex: function (offset) {
|
||
if (this._icon) {
|
||
this._icon.style.zIndex = this._zIndex + offset;
|
||
}
|
||
},
|
||
|
||
_animateZoom: function (opt) {
|
||
var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
|
||
|
||
this._setPos(pos);
|
||
},
|
||
|
||
_initInteraction: function () {
|
||
|
||
if (!this.options.interactive) { return; }
|
||
|
||
addClass(this._icon, 'leaflet-interactive');
|
||
|
||
this.addInteractiveTarget(this._icon);
|
||
|
||
if (MarkerDrag) {
|
||
var draggable = this.options.draggable;
|
||
if (this.dragging) {
|
||
draggable = this.dragging.enabled();
|
||
this.dragging.disable();
|
||
}
|
||
|
||
this.dragging = new MarkerDrag(this);
|
||
|
||
if (draggable) {
|
||
this.dragging.enable();
|
||
}
|
||
}
|
||
},
|
||
|
||
// @method setOpacity(opacity: Number): this
|
||
// Changes the opacity of the marker.
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
if (this._map) {
|
||
this._updateOpacity();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
_updateOpacity: function () {
|
||
var opacity = this.options.opacity;
|
||
|
||
if (this._icon) {
|
||
setOpacity(this._icon, opacity);
|
||
}
|
||
|
||
if (this._shadow) {
|
||
setOpacity(this._shadow, opacity);
|
||
}
|
||
},
|
||
|
||
_bringToFront: function () {
|
||
this._updateZIndex(this.options.riseOffset);
|
||
},
|
||
|
||
_resetZIndex: function () {
|
||
this._updateZIndex(0);
|
||
},
|
||
|
||
_panOnFocus: function () {
|
||
var map = this._map;
|
||
if (!map) { return; }
|
||
|
||
var iconOpts = this.options.icon.options;
|
||
var size = iconOpts.iconSize ? toPoint(iconOpts.iconSize) : toPoint(0, 0);
|
||
var anchor = iconOpts.iconAnchor ? toPoint(iconOpts.iconAnchor) : toPoint(0, 0);
|
||
|
||
map.panInside(this._latlng, {
|
||
paddingTopLeft: anchor,
|
||
paddingBottomRight: size.subtract(anchor)
|
||
});
|
||
},
|
||
|
||
_getPopupAnchor: function () {
|
||
return this.options.icon.options.popupAnchor;
|
||
},
|
||
|
||
_getTooltipAnchor: function () {
|
||
return this.options.icon.options.tooltipAnchor;
|
||
}
|
||
});
|
||
|
||
|
||
// factory L.marker(latlng: LatLng, options? : Marker options)
|
||
|
||
// @factory L.marker(latlng: LatLng, options? : Marker options)
|
||
// Instantiates a Marker object given a geographical point and optionally an options object.
|
||
function marker(latlng, options) {
|
||
return new Marker(latlng, options);
|
||
}
|
||
|
||
/*
|
||
* @class Path
|
||
* @aka L.Path
|
||
* @inherits Interactive layer
|
||
*
|
||
* An abstract class that contains options and constants shared between vector
|
||
* overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.
|
||
*/
|
||
|
||
var Path = Layer.extend({
|
||
|
||
// @section
|
||
// @aka Path options
|
||
options: {
|
||
// @option stroke: Boolean = true
|
||
// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.
|
||
stroke: true,
|
||
|
||
// @option color: String = '#3388ff'
|
||
// Stroke color
|
||
color: '#3388ff',
|
||
|
||
// @option weight: Number = 3
|
||
// Stroke width in pixels
|
||
weight: 3,
|
||
|
||
// @option opacity: Number = 1.0
|
||
// Stroke opacity
|
||
opacity: 1,
|
||
|
||
// @option lineCap: String= 'round'
|
||
// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.
|
||
lineCap: 'round',
|
||
|
||
// @option lineJoin: String = 'round'
|
||
// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.
|
||
lineJoin: 'round',
|
||
|
||
// @option dashArray: String = null
|
||
// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
|
||
dashArray: null,
|
||
|
||
// @option dashOffset: String = null
|
||
// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
|
||
dashOffset: null,
|
||
|
||
// @option fill: Boolean = depends
|
||
// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.
|
||
fill: false,
|
||
|
||
// @option fillColor: String = *
|
||
// Fill color. Defaults to the value of the [`color`](#path-color) option
|
||
fillColor: null,
|
||
|
||
// @option fillOpacity: Number = 0.2
|
||
// Fill opacity.
|
||
fillOpacity: 0.2,
|
||
|
||
// @option fillRule: String = 'evenodd'
|
||
// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.
|
||
fillRule: 'evenodd',
|
||
|
||
// className: '',
|
||
|
||
// Option inherited from "Interactive layer" abstract class
|
||
interactive: true,
|
||
|
||
// @option bubblingMouseEvents: Boolean = true
|
||
// When `true`, a mouse event on this path will trigger the same event on the map
|
||
// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
|
||
bubblingMouseEvents: true
|
||
},
|
||
|
||
beforeAdd: function (map) {
|
||
// Renderer is set here because we need to call renderer.getEvents
|
||
// before this.getEvents.
|
||
this._renderer = map.getRenderer(this);
|
||
},
|
||
|
||
onAdd: function () {
|
||
this._renderer._initPath(this);
|
||
this._reset();
|
||
this._renderer._addPath(this);
|
||
},
|
||
|
||
onRemove: function () {
|
||
this._renderer._removePath(this);
|
||
},
|
||
|
||
// @method redraw(): this
|
||
// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.
|
||
redraw: function () {
|
||
if (this._map) {
|
||
this._renderer._updatePath(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method setStyle(style: Path options): this
|
||
// Changes the appearance of a Path based on the options in the `Path options` object.
|
||
setStyle: function (style) {
|
||
setOptions(this, style);
|
||
if (this._renderer) {
|
||
this._renderer._updateStyle(this);
|
||
if (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {
|
||
this._updateBounds();
|
||
}
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToFront(): this
|
||
// Brings the layer to the top of all path layers.
|
||
bringToFront: function () {
|
||
if (this._renderer) {
|
||
this._renderer._bringToFront(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack(): this
|
||
// Brings the layer to the bottom of all path layers.
|
||
bringToBack: function () {
|
||
if (this._renderer) {
|
||
this._renderer._bringToBack(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
getElement: function () {
|
||
return this._path;
|
||
},
|
||
|
||
_reset: function () {
|
||
// defined in child classes
|
||
this._project();
|
||
this._update();
|
||
},
|
||
|
||
_clickTolerance: function () {
|
||
// used when doing hit detection for Canvas layers
|
||
return (this.options.stroke ? this.options.weight / 2 : 0) +
|
||
(this._renderer.options.tolerance || 0);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class CircleMarker
|
||
* @aka L.CircleMarker
|
||
* @inherits Path
|
||
*
|
||
* A circle of a fixed size with radius specified in pixels. Extends `Path`.
|
||
*/
|
||
|
||
var CircleMarker = Path.extend({
|
||
|
||
// @section
|
||
// @aka CircleMarker options
|
||
options: {
|
||
fill: true,
|
||
|
||
// @option radius: Number = 10
|
||
// Radius of the circle marker, in pixels
|
||
radius: 10
|
||
},
|
||
|
||
initialize: function (latlng, options) {
|
||
setOptions(this, options);
|
||
this._latlng = toLatLng(latlng);
|
||
this._radius = this.options.radius;
|
||
},
|
||
|
||
// @method setLatLng(latLng: LatLng): this
|
||
// Sets the position of a circle marker to a new location.
|
||
setLatLng: function (latlng) {
|
||
var oldLatLng = this._latlng;
|
||
this._latlng = toLatLng(latlng);
|
||
this.redraw();
|
||
|
||
// @event move: Event
|
||
// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.
|
||
return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});
|
||
},
|
||
|
||
// @method getLatLng(): LatLng
|
||
// Returns the current geographical position of the circle marker
|
||
getLatLng: function () {
|
||
return this._latlng;
|
||
},
|
||
|
||
// @method setRadius(radius: Number): this
|
||
// Sets the radius of a circle marker. Units are in pixels.
|
||
setRadius: function (radius) {
|
||
this.options.radius = this._radius = radius;
|
||
return this.redraw();
|
||
},
|
||
|
||
// @method getRadius(): Number
|
||
// Returns the current radius of the circle
|
||
getRadius: function () {
|
||
return this._radius;
|
||
},
|
||
|
||
setStyle : function (options) {
|
||
var radius = options && options.radius || this._radius;
|
||
Path.prototype.setStyle.call(this, options);
|
||
this.setRadius(radius);
|
||
return this;
|
||
},
|
||
|
||
_project: function () {
|
||
this._point = this._map.latLngToLayerPoint(this._latlng);
|
||
this._updateBounds();
|
||
},
|
||
|
||
_updateBounds: function () {
|
||
var r = this._radius,
|
||
r2 = this._radiusY || r,
|
||
w = this._clickTolerance(),
|
||
p = [r + w, r2 + w];
|
||
this._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map) {
|
||
this._updatePath();
|
||
}
|
||
},
|
||
|
||
_updatePath: function () {
|
||
this._renderer._updateCircle(this);
|
||
},
|
||
|
||
_empty: function () {
|
||
return this._radius && !this._renderer._bounds.intersects(this._pxBounds);
|
||
},
|
||
|
||
// Needed by the `Canvas` renderer for interactivity
|
||
_containsPoint: function (p) {
|
||
return p.distanceTo(this._point) <= this._radius + this._clickTolerance();
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)
|
||
// Instantiates a circle marker object given a geographical point, and an optional options object.
|
||
function circleMarker(latlng, options) {
|
||
return new CircleMarker(latlng, options);
|
||
}
|
||
|
||
/*
|
||
* @class Circle
|
||
* @aka L.Circle
|
||
* @inherits CircleMarker
|
||
*
|
||
* A class for drawing circle overlays on a map. Extends `CircleMarker`.
|
||
*
|
||
* It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.circle([50.5, 30.5], {radius: 200}).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var Circle = CircleMarker.extend({
|
||
|
||
initialize: function (latlng, options, legacyOptions) {
|
||
if (typeof options === 'number') {
|
||
// Backwards compatibility with 0.7.x factory (latlng, radius, options?)
|
||
options = extend({}, legacyOptions, {radius: options});
|
||
}
|
||
setOptions(this, options);
|
||
this._latlng = toLatLng(latlng);
|
||
|
||
if (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }
|
||
|
||
// @section
|
||
// @aka Circle options
|
||
// @option radius: Number; Radius of the circle, in meters.
|
||
this._mRadius = this.options.radius;
|
||
},
|
||
|
||
// @method setRadius(radius: Number): this
|
||
// Sets the radius of a circle. Units are in meters.
|
||
setRadius: function (radius) {
|
||
this._mRadius = radius;
|
||
return this.redraw();
|
||
},
|
||
|
||
// @method getRadius(): Number
|
||
// Returns the current radius of a circle. Units are in meters.
|
||
getRadius: function () {
|
||
return this._mRadius;
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the `LatLngBounds` of the path.
|
||
getBounds: function () {
|
||
var half = [this._radius, this._radiusY || this._radius];
|
||
|
||
return new LatLngBounds(
|
||
this._map.layerPointToLatLng(this._point.subtract(half)),
|
||
this._map.layerPointToLatLng(this._point.add(half)));
|
||
},
|
||
|
||
setStyle: Path.prototype.setStyle,
|
||
|
||
_project: function () {
|
||
|
||
var lng = this._latlng.lng,
|
||
lat = this._latlng.lat,
|
||
map = this._map,
|
||
crs = map.options.crs;
|
||
|
||
if (crs.distance === Earth.distance) {
|
||
var d = Math.PI / 180,
|
||
latR = (this._mRadius / Earth.R) / d,
|
||
top = map.project([lat + latR, lng]),
|
||
bottom = map.project([lat - latR, lng]),
|
||
p = top.add(bottom).divideBy(2),
|
||
lat2 = map.unproject(p).lat,
|
||
lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /
|
||
(Math.cos(lat * d) * Math.cos(lat2 * d))) / d;
|
||
|
||
if (isNaN(lngR) || lngR === 0) {
|
||
lngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425
|
||
}
|
||
|
||
this._point = p.subtract(map.getPixelOrigin());
|
||
this._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;
|
||
this._radiusY = p.y - top.y;
|
||
|
||
} else {
|
||
var latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));
|
||
|
||
this._point = map.latLngToLayerPoint(this._latlng);
|
||
this._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;
|
||
}
|
||
|
||
this._updateBounds();
|
||
}
|
||
});
|
||
|
||
// @factory L.circle(latlng: LatLng, options?: Circle options)
|
||
// Instantiates a circle object given a geographical point, and an options object
|
||
// which contains the circle radius.
|
||
// @alternative
|
||
// @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)
|
||
// Obsolete way of instantiating a circle, for compatibility with 0.7.x code.
|
||
// Do not use in new applications or plugins.
|
||
function circle(latlng, options, legacyOptions) {
|
||
return new Circle(latlng, options, legacyOptions);
|
||
}
|
||
|
||
/*
|
||
* @class Polyline
|
||
* @aka L.Polyline
|
||
* @inherits Path
|
||
*
|
||
* A class for drawing polyline overlays on a map. Extends `Path`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // create a red polyline from an array of LatLng points
|
||
* var latlngs = [
|
||
* [45.51, -122.68],
|
||
* [37.77, -122.43],
|
||
* [34.04, -118.2]
|
||
* ];
|
||
*
|
||
* var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
|
||
*
|
||
* // zoom the map to the polyline
|
||
* map.fitBounds(polyline.getBounds());
|
||
* ```
|
||
*
|
||
* You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:
|
||
*
|
||
* ```js
|
||
* // create a red polyline from an array of arrays of LatLng points
|
||
* var latlngs = [
|
||
* [[45.51, -122.68],
|
||
* [37.77, -122.43],
|
||
* [34.04, -118.2]],
|
||
* [[40.78, -73.91],
|
||
* [41.83, -87.62],
|
||
* [32.76, -96.72]]
|
||
* ];
|
||
* ```
|
||
*/
|
||
|
||
|
||
var Polyline = Path.extend({
|
||
|
||
// @section
|
||
// @aka Polyline options
|
||
options: {
|
||
// @option smoothFactor: Number = 1.0
|
||
// How much to simplify the polyline on each zoom level. More means
|
||
// better performance and smoother look, and less means more accurate representation.
|
||
smoothFactor: 1.0,
|
||
|
||
// @option noClip: Boolean = false
|
||
// Disable polyline clipping.
|
||
noClip: false
|
||
},
|
||
|
||
initialize: function (latlngs, options) {
|
||
setOptions(this, options);
|
||
this._setLatLngs(latlngs);
|
||
},
|
||
|
||
// @method getLatLngs(): LatLng[]
|
||
// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.
|
||
getLatLngs: function () {
|
||
return this._latlngs;
|
||
},
|
||
|
||
// @method setLatLngs(latlngs: LatLng[]): this
|
||
// Replaces all the points in the polyline with the given array of geographical points.
|
||
setLatLngs: function (latlngs) {
|
||
this._setLatLngs(latlngs);
|
||
return this.redraw();
|
||
},
|
||
|
||
// @method isEmpty(): Boolean
|
||
// Returns `true` if the Polyline has no LatLngs.
|
||
isEmpty: function () {
|
||
return !this._latlngs.length;
|
||
},
|
||
|
||
// @method closestLayerPoint(p: Point): Point
|
||
// Returns the point closest to `p` on the Polyline.
|
||
closestLayerPoint: function (p) {
|
||
var minDistance = Infinity,
|
||
minPoint = null,
|
||
closest = _sqClosestPointOnSegment,
|
||
p1, p2;
|
||
|
||
for (var j = 0, jLen = this._parts.length; j < jLen; j++) {
|
||
var points = this._parts[j];
|
||
|
||
for (var i = 1, len = points.length; i < len; i++) {
|
||
p1 = points[i - 1];
|
||
p2 = points[i];
|
||
|
||
var sqDist = closest(p, p1, p2, true);
|
||
|
||
if (sqDist < minDistance) {
|
||
minDistance = sqDist;
|
||
minPoint = closest(p, p1, p2);
|
||
}
|
||
}
|
||
}
|
||
if (minPoint) {
|
||
minPoint.distance = Math.sqrt(minDistance);
|
||
}
|
||
return minPoint;
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.
|
||
getCenter: function () {
|
||
// throws error when not yet added to map as this center calculation requires projected coordinates
|
||
if (!this._map) {
|
||
throw new Error('Must add layer to map before using getCenter()');
|
||
}
|
||
return polylineCenter(this._defaultShape(), this._map.options.crs);
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Returns the `LatLngBounds` of the path.
|
||
getBounds: function () {
|
||
return this._bounds;
|
||
},
|
||
|
||
// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this
|
||
// Adds a given point to the polyline. By default, adds to the first ring of
|
||
// the polyline in case of a multi-polyline, but can be overridden by passing
|
||
// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).
|
||
addLatLng: function (latlng, latlngs) {
|
||
latlngs = latlngs || this._defaultShape();
|
||
latlng = toLatLng(latlng);
|
||
latlngs.push(latlng);
|
||
this._bounds.extend(latlng);
|
||
return this.redraw();
|
||
},
|
||
|
||
_setLatLngs: function (latlngs) {
|
||
this._bounds = new LatLngBounds();
|
||
this._latlngs = this._convertLatLngs(latlngs);
|
||
},
|
||
|
||
_defaultShape: function () {
|
||
return isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];
|
||
},
|
||
|
||
// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way
|
||
_convertLatLngs: function (latlngs) {
|
||
var result = [],
|
||
flat = isFlat(latlngs);
|
||
|
||
for (var i = 0, len = latlngs.length; i < len; i++) {
|
||
if (flat) {
|
||
result[i] = toLatLng(latlngs[i]);
|
||
this._bounds.extend(result[i]);
|
||
} else {
|
||
result[i] = this._convertLatLngs(latlngs[i]);
|
||
}
|
||
}
|
||
|
||
return result;
|
||
},
|
||
|
||
_project: function () {
|
||
var pxBounds = new Bounds();
|
||
this._rings = [];
|
||
this._projectLatlngs(this._latlngs, this._rings, pxBounds);
|
||
|
||
if (this._bounds.isValid() && pxBounds.isValid()) {
|
||
this._rawPxBounds = pxBounds;
|
||
this._updateBounds();
|
||
}
|
||
},
|
||
|
||
_updateBounds: function () {
|
||
var w = this._clickTolerance(),
|
||
p = new Point(w, w);
|
||
|
||
if (!this._rawPxBounds) {
|
||
return;
|
||
}
|
||
|
||
this._pxBounds = new Bounds([
|
||
this._rawPxBounds.min.subtract(p),
|
||
this._rawPxBounds.max.add(p)
|
||
]);
|
||
},
|
||
|
||
// recursively turns latlngs into a set of rings with projected coordinates
|
||
_projectLatlngs: function (latlngs, result, projectedBounds) {
|
||
var flat = latlngs[0] instanceof LatLng,
|
||
len = latlngs.length,
|
||
i, ring;
|
||
|
||
if (flat) {
|
||
ring = [];
|
||
for (i = 0; i < len; i++) {
|
||
ring[i] = this._map.latLngToLayerPoint(latlngs[i]);
|
||
projectedBounds.extend(ring[i]);
|
||
}
|
||
result.push(ring);
|
||
} else {
|
||
for (i = 0; i < len; i++) {
|
||
this._projectLatlngs(latlngs[i], result, projectedBounds);
|
||
}
|
||
}
|
||
},
|
||
|
||
// clip polyline by renderer bounds so that we have less to render for performance
|
||
_clipPoints: function () {
|
||
var bounds = this._renderer._bounds;
|
||
|
||
this._parts = [];
|
||
if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
|
||
return;
|
||
}
|
||
|
||
if (this.options.noClip) {
|
||
this._parts = this._rings;
|
||
return;
|
||
}
|
||
|
||
var parts = this._parts,
|
||
i, j, k, len, len2, segment, points;
|
||
|
||
for (i = 0, k = 0, len = this._rings.length; i < len; i++) {
|
||
points = this._rings[i];
|
||
|
||
for (j = 0, len2 = points.length; j < len2 - 1; j++) {
|
||
segment = clipSegment(points[j], points[j + 1], bounds, j, true);
|
||
|
||
if (!segment) { continue; }
|
||
|
||
parts[k] = parts[k] || [];
|
||
parts[k].push(segment[0]);
|
||
|
||
// if segment goes out of screen, or it's the last one, it's the end of the line part
|
||
if ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {
|
||
parts[k].push(segment[1]);
|
||
k++;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
// simplify each clipped part of the polyline for performance
|
||
_simplifyPoints: function () {
|
||
var parts = this._parts,
|
||
tolerance = this.options.smoothFactor;
|
||
|
||
for (var i = 0, len = parts.length; i < len; i++) {
|
||
parts[i] = simplify(parts[i], tolerance);
|
||
}
|
||
},
|
||
|
||
_update: function () {
|
||
if (!this._map) { return; }
|
||
|
||
this._clipPoints();
|
||
this._simplifyPoints();
|
||
this._updatePath();
|
||
},
|
||
|
||
_updatePath: function () {
|
||
this._renderer._updatePoly(this);
|
||
},
|
||
|
||
// Needed by the `Canvas` renderer for interactivity
|
||
_containsPoint: function (p, closed) {
|
||
var i, j, k, len, len2, part,
|
||
w = this._clickTolerance();
|
||
|
||
if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
|
||
|
||
// hit detection for polylines
|
||
for (i = 0, len = this._parts.length; i < len; i++) {
|
||
part = this._parts[i];
|
||
|
||
for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
|
||
if (!closed && (j === 0)) { continue; }
|
||
|
||
if (pointToSegmentDistance(p, part[k], part[j]) <= w) {
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
});
|
||
|
||
// @factory L.polyline(latlngs: LatLng[], options?: Polyline options)
|
||
// Instantiates a polyline object given an array of geographical points and
|
||
// optionally an options object. You can create a `Polyline` object with
|
||
// multiple separate lines (`MultiPolyline`) by passing an array of arrays
|
||
// of geographic points.
|
||
function polyline(latlngs, options) {
|
||
return new Polyline(latlngs, options);
|
||
}
|
||
|
||
// Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.
|
||
Polyline._flat = _flat;
|
||
|
||
/*
|
||
* @class Polygon
|
||
* @aka L.Polygon
|
||
* @inherits Polyline
|
||
*
|
||
* A class for drawing polygon overlays on a map. Extends `Polyline`.
|
||
*
|
||
* Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.
|
||
*
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // create a red polygon from an array of LatLng points
|
||
* var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
|
||
*
|
||
* var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);
|
||
*
|
||
* // zoom the map to the polygon
|
||
* map.fitBounds(polygon.getBounds());
|
||
* ```
|
||
*
|
||
* You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:
|
||
*
|
||
* ```js
|
||
* var latlngs = [
|
||
* [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
|
||
* [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
|
||
* ];
|
||
* ```
|
||
*
|
||
* Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.
|
||
*
|
||
* ```js
|
||
* var latlngs = [
|
||
* [ // first polygon
|
||
* [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
|
||
* [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
|
||
* ],
|
||
* [ // second polygon
|
||
* [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]
|
||
* ]
|
||
* ];
|
||
* ```
|
||
*/
|
||
|
||
var Polygon = Polyline.extend({
|
||
|
||
options: {
|
||
fill: true
|
||
},
|
||
|
||
isEmpty: function () {
|
||
return !this._latlngs.length || !this._latlngs[0].length;
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.
|
||
getCenter: function () {
|
||
// throws error when not yet added to map as this center calculation requires projected coordinates
|
||
if (!this._map) {
|
||
throw new Error('Must add layer to map before using getCenter()');
|
||
}
|
||
return polygonCenter(this._defaultShape(), this._map.options.crs);
|
||
},
|
||
|
||
_convertLatLngs: function (latlngs) {
|
||
var result = Polyline.prototype._convertLatLngs.call(this, latlngs),
|
||
len = result.length;
|
||
|
||
// remove last point if it equals first one
|
||
if (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {
|
||
result.pop();
|
||
}
|
||
return result;
|
||
},
|
||
|
||
_setLatLngs: function (latlngs) {
|
||
Polyline.prototype._setLatLngs.call(this, latlngs);
|
||
if (isFlat(this._latlngs)) {
|
||
this._latlngs = [this._latlngs];
|
||
}
|
||
},
|
||
|
||
_defaultShape: function () {
|
||
return isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];
|
||
},
|
||
|
||
_clipPoints: function () {
|
||
// polygons need a different clipping algorithm so we redefine that
|
||
|
||
var bounds = this._renderer._bounds,
|
||
w = this.options.weight,
|
||
p = new Point(w, w);
|
||
|
||
// increase clip padding by stroke width to avoid stroke on clip edges
|
||
bounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));
|
||
|
||
this._parts = [];
|
||
if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
|
||
return;
|
||
}
|
||
|
||
if (this.options.noClip) {
|
||
this._parts = this._rings;
|
||
return;
|
||
}
|
||
|
||
for (var i = 0, len = this._rings.length, clipped; i < len; i++) {
|
||
clipped = clipPolygon(this._rings[i], bounds, true);
|
||
if (clipped.length) {
|
||
this._parts.push(clipped);
|
||
}
|
||
}
|
||
},
|
||
|
||
_updatePath: function () {
|
||
this._renderer._updatePoly(this, true);
|
||
},
|
||
|
||
// Needed by the `Canvas` renderer for interactivity
|
||
_containsPoint: function (p) {
|
||
var inside = false,
|
||
part, p1, p2, i, j, k, len, len2;
|
||
|
||
if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
|
||
|
||
// ray casting algorithm for detecting if point is in polygon
|
||
for (i = 0, len = this._parts.length; i < len; i++) {
|
||
part = this._parts[i];
|
||
|
||
for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
|
||
p1 = part[j];
|
||
p2 = part[k];
|
||
|
||
if (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
|
||
inside = !inside;
|
||
}
|
||
}
|
||
}
|
||
|
||
// also check if it's on polygon stroke
|
||
return inside || Polyline.prototype._containsPoint.call(this, p, true);
|
||
}
|
||
|
||
});
|
||
|
||
|
||
// @factory L.polygon(latlngs: LatLng[], options?: Polyline options)
|
||
function polygon(latlngs, options) {
|
||
return new Polygon(latlngs, options);
|
||
}
|
||
|
||
/*
|
||
* @class GeoJSON
|
||
* @aka L.GeoJSON
|
||
* @inherits FeatureGroup
|
||
*
|
||
* Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse
|
||
* GeoJSON data and display it on the map. Extends `FeatureGroup`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.geoJSON(data, {
|
||
* style: function (feature) {
|
||
* return {color: feature.properties.color};
|
||
* }
|
||
* }).bindPopup(function (layer) {
|
||
* return layer.feature.properties.description;
|
||
* }).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var GeoJSON = FeatureGroup.extend({
|
||
|
||
/* @section
|
||
* @aka GeoJSON options
|
||
*
|
||
* @option pointToLayer: Function = *
|
||
* A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally
|
||
* called when data is added, passing the GeoJSON point feature and its `LatLng`.
|
||
* The default is to spawn a default `Marker`:
|
||
* ```js
|
||
* function(geoJsonPoint, latlng) {
|
||
* return L.marker(latlng);
|
||
* }
|
||
* ```
|
||
*
|
||
* @option style: Function = *
|
||
* A `Function` defining the `Path options` for styling GeoJSON lines and polygons,
|
||
* called internally when data is added.
|
||
* The default value is to not override any defaults:
|
||
* ```js
|
||
* function (geoJsonFeature) {
|
||
* return {}
|
||
* }
|
||
* ```
|
||
*
|
||
* @option onEachFeature: Function = *
|
||
* A `Function` that will be called once for each created `Feature`, after it has
|
||
* been created and styled. Useful for attaching events and popups to features.
|
||
* The default is to do nothing with the newly created layers:
|
||
* ```js
|
||
* function (feature, layer) {}
|
||
* ```
|
||
*
|
||
* @option filter: Function = *
|
||
* A `Function` that will be used to decide whether to include a feature or not.
|
||
* The default is to include all features:
|
||
* ```js
|
||
* function (geoJsonFeature) {
|
||
* return true;
|
||
* }
|
||
* ```
|
||
* Note: dynamically changing the `filter` option will have effect only on newly
|
||
* added data. It will _not_ re-evaluate already included features.
|
||
*
|
||
* @option coordsToLatLng: Function = *
|
||
* A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.
|
||
* The default is the `coordsToLatLng` static method.
|
||
*
|
||
* @option markersInheritOptions: Boolean = false
|
||
* Whether default Markers for "Point" type Features inherit from group options.
|
||
*/
|
||
|
||
initialize: function (geojson, options) {
|
||
setOptions(this, options);
|
||
|
||
this._layers = {};
|
||
|
||
if (geojson) {
|
||
this.addData(geojson);
|
||
}
|
||
},
|
||
|
||
// @method addData( <GeoJSON> data ): this
|
||
// Adds a GeoJSON object to the layer.
|
||
addData: function (geojson) {
|
||
var features = isArray(geojson) ? geojson : geojson.features,
|
||
i, len, feature;
|
||
|
||
if (features) {
|
||
for (i = 0, len = features.length; i < len; i++) {
|
||
// only add this if geometry or geometries are set and not null
|
||
feature = features[i];
|
||
if (feature.geometries || feature.geometry || feature.features || feature.coordinates) {
|
||
this.addData(feature);
|
||
}
|
||
}
|
||
return this;
|
||
}
|
||
|
||
var options = this.options;
|
||
|
||
if (options.filter && !options.filter(geojson)) { return this; }
|
||
|
||
var layer = geometryToLayer(geojson, options);
|
||
if (!layer) {
|
||
return this;
|
||
}
|
||
layer.feature = asFeature(geojson);
|
||
|
||
layer.defaultOptions = layer.options;
|
||
this.resetStyle(layer);
|
||
|
||
if (options.onEachFeature) {
|
||
options.onEachFeature(geojson, layer);
|
||
}
|
||
|
||
return this.addLayer(layer);
|
||
},
|
||
|
||
// @method resetStyle( <Path> layer? ): this
|
||
// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.
|
||
// If `layer` is omitted, the style of all features in the current layer is reset.
|
||
resetStyle: function (layer) {
|
||
if (layer === undefined) {
|
||
return this.eachLayer(this.resetStyle, this);
|
||
}
|
||
// reset any custom styles
|
||
layer.options = extend({}, layer.defaultOptions);
|
||
this._setLayerStyle(layer, this.options.style);
|
||
return this;
|
||
},
|
||
|
||
// @method setStyle( <Function> style ): this
|
||
// Changes styles of GeoJSON vector layers with the given style function.
|
||
setStyle: function (style) {
|
||
return this.eachLayer(function (layer) {
|
||
this._setLayerStyle(layer, style);
|
||
}, this);
|
||
},
|
||
|
||
_setLayerStyle: function (layer, style) {
|
||
if (layer.setStyle) {
|
||
if (typeof style === 'function') {
|
||
style = style(layer.feature);
|
||
}
|
||
layer.setStyle(style);
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section
|
||
// There are several static functions which can be called without instantiating L.GeoJSON:
|
||
|
||
// @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer
|
||
// Creates a `Layer` from a given GeoJSON feature. Can use a custom
|
||
// [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)
|
||
// functions if provided as options.
|
||
function geometryToLayer(geojson, options) {
|
||
|
||
var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
|
||
coords = geometry ? geometry.coordinates : null,
|
||
layers = [],
|
||
pointToLayer = options && options.pointToLayer,
|
||
_coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,
|
||
latlng, latlngs, i, len;
|
||
|
||
if (!coords && !geometry) {
|
||
return null;
|
||
}
|
||
|
||
switch (geometry.type) {
|
||
case 'Point':
|
||
latlng = _coordsToLatLng(coords);
|
||
return _pointToLayer(pointToLayer, geojson, latlng, options);
|
||
|
||
case 'MultiPoint':
|
||
for (i = 0, len = coords.length; i < len; i++) {
|
||
latlng = _coordsToLatLng(coords[i]);
|
||
layers.push(_pointToLayer(pointToLayer, geojson, latlng, options));
|
||
}
|
||
return new FeatureGroup(layers);
|
||
|
||
case 'LineString':
|
||
case 'MultiLineString':
|
||
latlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);
|
||
return new Polyline(latlngs, options);
|
||
|
||
case 'Polygon':
|
||
case 'MultiPolygon':
|
||
latlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);
|
||
return new Polygon(latlngs, options);
|
||
|
||
case 'GeometryCollection':
|
||
for (i = 0, len = geometry.geometries.length; i < len; i++) {
|
||
var geoLayer = geometryToLayer({
|
||
geometry: geometry.geometries[i],
|
||
type: 'Feature',
|
||
properties: geojson.properties
|
||
}, options);
|
||
|
||
if (geoLayer) {
|
||
layers.push(geoLayer);
|
||
}
|
||
}
|
||
return new FeatureGroup(layers);
|
||
|
||
case 'FeatureCollection':
|
||
for (i = 0, len = geometry.features.length; i < len; i++) {
|
||
var featureLayer = geometryToLayer(geometry.features[i], options);
|
||
|
||
if (featureLayer) {
|
||
layers.push(featureLayer);
|
||
}
|
||
}
|
||
return new FeatureGroup(layers);
|
||
|
||
default:
|
||
throw new Error('Invalid GeoJSON object.');
|
||
}
|
||
}
|
||
|
||
function _pointToLayer(pointToLayerFn, geojson, latlng, options) {
|
||
return pointToLayerFn ?
|
||
pointToLayerFn(geojson, latlng) :
|
||
new Marker(latlng, options && options.markersInheritOptions && options);
|
||
}
|
||
|
||
// @function coordsToLatLng(coords: Array): LatLng
|
||
// Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)
|
||
// or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.
|
||
function coordsToLatLng(coords) {
|
||
return new LatLng(coords[1], coords[0], coords[2]);
|
||
}
|
||
|
||
// @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array
|
||
// Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.
|
||
// `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).
|
||
// Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.
|
||
function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {
|
||
var latlngs = [];
|
||
|
||
for (var i = 0, len = coords.length, latlng; i < len; i++) {
|
||
latlng = levelsDeep ?
|
||
coordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :
|
||
(_coordsToLatLng || coordsToLatLng)(coords[i]);
|
||
|
||
latlngs.push(latlng);
|
||
}
|
||
|
||
return latlngs;
|
||
}
|
||
|
||
// @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array
|
||
// Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.
|
||
function latLngToCoords(latlng, precision) {
|
||
latlng = toLatLng(latlng);
|
||
return latlng.alt !== undefined ?
|
||
[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision), formatNum(latlng.alt, precision)] :
|
||
[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision)];
|
||
}
|
||
|
||
// @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array
|
||
// Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)
|
||
// `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function.
|
||
function latLngsToCoords(latlngs, levelsDeep, closed, precision) {
|
||
var coords = [];
|
||
|
||
for (var i = 0, len = latlngs.length; i < len; i++) {
|
||
// Check for flat arrays required to ensure unbalanced arrays are correctly converted in recursion
|
||
coords.push(levelsDeep ?
|
||
latLngsToCoords(latlngs[i], isFlat(latlngs[i]) ? 0 : levelsDeep - 1, closed, precision) :
|
||
latLngToCoords(latlngs[i], precision));
|
||
}
|
||
|
||
if (!levelsDeep && closed) {
|
||
coords.push(coords[0].slice());
|
||
}
|
||
|
||
return coords;
|
||
}
|
||
|
||
function getFeature(layer, newGeometry) {
|
||
return layer.feature ?
|
||
extend({}, layer.feature, {geometry: newGeometry}) :
|
||
asFeature(newGeometry);
|
||
}
|
||
|
||
// @function asFeature(geojson: Object): Object
|
||
// Normalize GeoJSON geometries/features into GeoJSON features.
|
||
function asFeature(geojson) {
|
||
if (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {
|
||
return geojson;
|
||
}
|
||
|
||
return {
|
||
type: 'Feature',
|
||
properties: {},
|
||
geometry: geojson
|
||
};
|
||
}
|
||
|
||
var PointToGeoJSON = {
|
||
toGeoJSON: function (precision) {
|
||
return getFeature(this, {
|
||
type: 'Point',
|
||
coordinates: latLngToCoords(this.getLatLng(), precision)
|
||
});
|
||
}
|
||
};
|
||
|
||
// @namespace Marker
|
||
// @section Other methods
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).
|
||
Marker.include(PointToGeoJSON);
|
||
|
||
// @namespace CircleMarker
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).
|
||
Circle.include(PointToGeoJSON);
|
||
CircleMarker.include(PointToGeoJSON);
|
||
|
||
|
||
// @namespace Polyline
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).
|
||
Polyline.include({
|
||
toGeoJSON: function (precision) {
|
||
var multi = !isFlat(this._latlngs);
|
||
|
||
var coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);
|
||
|
||
return getFeature(this, {
|
||
type: (multi ? 'Multi' : '') + 'LineString',
|
||
coordinates: coords
|
||
});
|
||
}
|
||
});
|
||
|
||
// @namespace Polygon
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).
|
||
Polygon.include({
|
||
toGeoJSON: function (precision) {
|
||
var holes = !isFlat(this._latlngs),
|
||
multi = holes && !isFlat(this._latlngs[0]);
|
||
|
||
var coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);
|
||
|
||
if (!holes) {
|
||
coords = [coords];
|
||
}
|
||
|
||
return getFeature(this, {
|
||
type: (multi ? 'Multi' : '') + 'Polygon',
|
||
coordinates: coords
|
||
});
|
||
}
|
||
});
|
||
|
||
|
||
// @namespace LayerGroup
|
||
LayerGroup.include({
|
||
toMultiPoint: function (precision) {
|
||
var coords = [];
|
||
|
||
this.eachLayer(function (layer) {
|
||
coords.push(layer.toGeoJSON(precision).geometry.coordinates);
|
||
});
|
||
|
||
return getFeature(this, {
|
||
type: 'MultiPoint',
|
||
coordinates: coords
|
||
});
|
||
},
|
||
|
||
// @method toGeoJSON(precision?: Number|false): Object
|
||
// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
|
||
// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).
|
||
toGeoJSON: function (precision) {
|
||
|
||
var type = this.feature && this.feature.geometry && this.feature.geometry.type;
|
||
|
||
if (type === 'MultiPoint') {
|
||
return this.toMultiPoint(precision);
|
||
}
|
||
|
||
var isGeometryCollection = type === 'GeometryCollection',
|
||
jsons = [];
|
||
|
||
this.eachLayer(function (layer) {
|
||
if (layer.toGeoJSON) {
|
||
var json = layer.toGeoJSON(precision);
|
||
if (isGeometryCollection) {
|
||
jsons.push(json.geometry);
|
||
} else {
|
||
var feature = asFeature(json);
|
||
// Squash nested feature collections
|
||
if (feature.type === 'FeatureCollection') {
|
||
jsons.push.apply(jsons, feature.features);
|
||
} else {
|
||
jsons.push(feature);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
if (isGeometryCollection) {
|
||
return getFeature(this, {
|
||
geometries: jsons,
|
||
type: 'GeometryCollection'
|
||
});
|
||
}
|
||
|
||
return {
|
||
type: 'FeatureCollection',
|
||
features: jsons
|
||
};
|
||
}
|
||
});
|
||
|
||
// @namespace GeoJSON
|
||
// @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)
|
||
// Creates a GeoJSON layer. Optionally accepts an object in
|
||
// [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map
|
||
// (you can alternatively add it later with `addData` method) and an `options` object.
|
||
function geoJSON(geojson, options) {
|
||
return new GeoJSON(geojson, options);
|
||
}
|
||
|
||
// Backward compatibility.
|
||
var geoJson = geoJSON;
|
||
|
||
/*
|
||
* @class ImageOverlay
|
||
* @aka L.ImageOverlay
|
||
* @inherits Interactive layer
|
||
*
|
||
* Used to load and display a single image over specific bounds of the map. Extends `Layer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
|
||
* imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];
|
||
* L.imageOverlay(imageUrl, imageBounds).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var ImageOverlay = Layer.extend({
|
||
|
||
// @section
|
||
// @aka ImageOverlay options
|
||
options: {
|
||
// @option opacity: Number = 1.0
|
||
// The opacity of the image overlay.
|
||
opacity: 1,
|
||
|
||
// @option alt: String = ''
|
||
// Text for the `alt` attribute of the image (useful for accessibility).
|
||
alt: '',
|
||
|
||
// @option interactive: Boolean = false
|
||
// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.
|
||
interactive: false,
|
||
|
||
// @option crossOrigin: Boolean|String = false
|
||
// Whether the crossOrigin attribute will be added to the image.
|
||
// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.
|
||
// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
|
||
crossOrigin: false,
|
||
|
||
// @option errorOverlayUrl: String = ''
|
||
// URL to the overlay image to show in place of the overlay that failed to load.
|
||
errorOverlayUrl: '',
|
||
|
||
// @option zIndex: Number = 1
|
||
// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.
|
||
zIndex: 1,
|
||
|
||
// @option className: String = ''
|
||
// A custom class name to assign to the image. Empty by default.
|
||
className: ''
|
||
},
|
||
|
||
initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
|
||
this._url = url;
|
||
this._bounds = toLatLngBounds(bounds);
|
||
|
||
setOptions(this, options);
|
||
},
|
||
|
||
onAdd: function () {
|
||
if (!this._image) {
|
||
this._initImage();
|
||
|
||
if (this.options.opacity < 1) {
|
||
this._updateOpacity();
|
||
}
|
||
}
|
||
|
||
if (this.options.interactive) {
|
||
addClass(this._image, 'leaflet-interactive');
|
||
this.addInteractiveTarget(this._image);
|
||
}
|
||
|
||
this.getPane().appendChild(this._image);
|
||
this._reset();
|
||
},
|
||
|
||
onRemove: function () {
|
||
remove(this._image);
|
||
if (this.options.interactive) {
|
||
this.removeInteractiveTarget(this._image);
|
||
}
|
||
},
|
||
|
||
// @method setOpacity(opacity: Number): this
|
||
// Sets the opacity of the overlay.
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
|
||
if (this._image) {
|
||
this._updateOpacity();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
setStyle: function (styleOpts) {
|
||
if (styleOpts.opacity) {
|
||
this.setOpacity(styleOpts.opacity);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToFront(): this
|
||
// Brings the layer to the top of all overlays.
|
||
bringToFront: function () {
|
||
if (this._map) {
|
||
toFront(this._image);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack(): this
|
||
// Brings the layer to the bottom of all overlays.
|
||
bringToBack: function () {
|
||
if (this._map) {
|
||
toBack(this._image);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method setUrl(url: String): this
|
||
// Changes the URL of the image.
|
||
setUrl: function (url) {
|
||
this._url = url;
|
||
|
||
if (this._image) {
|
||
this._image.src = url;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method setBounds(bounds: LatLngBounds): this
|
||
// Update the bounds that this ImageOverlay covers
|
||
setBounds: function (bounds) {
|
||
this._bounds = toLatLngBounds(bounds);
|
||
|
||
if (this._map) {
|
||
this._reset();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
zoom: this._reset,
|
||
viewreset: this._reset
|
||
};
|
||
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._animateZoom;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
// @method setZIndex(value: Number): this
|
||
// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.
|
||
setZIndex: function (value) {
|
||
this.options.zIndex = value;
|
||
this._updateZIndex();
|
||
return this;
|
||
},
|
||
|
||
// @method getBounds(): LatLngBounds
|
||
// Get the bounds that this ImageOverlay covers
|
||
getBounds: function () {
|
||
return this._bounds;
|
||
},
|
||
|
||
// @method getElement(): HTMLElement
|
||
// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)
|
||
// used by this overlay.
|
||
getElement: function () {
|
||
return this._image;
|
||
},
|
||
|
||
_initImage: function () {
|
||
var wasElementSupplied = this._url.tagName === 'IMG';
|
||
var img = this._image = wasElementSupplied ? this._url : create$1('img');
|
||
|
||
addClass(img, 'leaflet-image-layer');
|
||
if (this._zoomAnimated) { addClass(img, 'leaflet-zoom-animated'); }
|
||
if (this.options.className) { addClass(img, this.options.className); }
|
||
|
||
img.onselectstart = falseFn;
|
||
img.onmousemove = falseFn;
|
||
|
||
// @event load: Event
|
||
// Fired when the ImageOverlay layer has loaded its image
|
||
img.onload = bind(this.fire, this, 'load');
|
||
img.onerror = bind(this._overlayOnError, this, 'error');
|
||
|
||
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||
img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||
}
|
||
|
||
if (this.options.zIndex) {
|
||
this._updateZIndex();
|
||
}
|
||
|
||
if (wasElementSupplied) {
|
||
this._url = img.src;
|
||
return;
|
||
}
|
||
|
||
img.src = this._url;
|
||
img.alt = this.options.alt;
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
var scale = this._map.getZoomScale(e.zoom),
|
||
offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;
|
||
|
||
setTransform(this._image, offset, scale);
|
||
},
|
||
|
||
_reset: function () {
|
||
var image = this._image,
|
||
bounds = new Bounds(
|
||
this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
|
||
this._map.latLngToLayerPoint(this._bounds.getSouthEast())),
|
||
size = bounds.getSize();
|
||
|
||
setPosition(image, bounds.min);
|
||
|
||
image.style.width = size.x + 'px';
|
||
image.style.height = size.y + 'px';
|
||
},
|
||
|
||
_updateOpacity: function () {
|
||
setOpacity(this._image, this.options.opacity);
|
||
},
|
||
|
||
_updateZIndex: function () {
|
||
if (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {
|
||
this._image.style.zIndex = this.options.zIndex;
|
||
}
|
||
},
|
||
|
||
_overlayOnError: function () {
|
||
// @event error: Event
|
||
// Fired when the ImageOverlay layer fails to load its image
|
||
this.fire('error');
|
||
|
||
var errorUrl = this.options.errorOverlayUrl;
|
||
if (errorUrl && this._url !== errorUrl) {
|
||
this._url = errorUrl;
|
||
this._image.src = errorUrl;
|
||
}
|
||
},
|
||
|
||
// @method getCenter(): LatLng
|
||
// Returns the center of the ImageOverlay.
|
||
getCenter: function () {
|
||
return this._bounds.getCenter();
|
||
}
|
||
});
|
||
|
||
// @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)
|
||
// Instantiates an image overlay object given the URL of the image and the
|
||
// geographical bounds it is tied to.
|
||
var imageOverlay = function (url, bounds, options) {
|
||
return new ImageOverlay(url, bounds, options);
|
||
};
|
||
|
||
/*
|
||
* @class VideoOverlay
|
||
* @aka L.VideoOverlay
|
||
* @inherits ImageOverlay
|
||
*
|
||
* Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.
|
||
*
|
||
* A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)
|
||
* HTML5 element.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',
|
||
* videoBounds = [[ 32, -130], [ 13, -100]];
|
||
* L.videoOverlay(videoUrl, videoBounds ).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var VideoOverlay = ImageOverlay.extend({
|
||
|
||
// @section
|
||
// @aka VideoOverlay options
|
||
options: {
|
||
// @option autoplay: Boolean = true
|
||
// Whether the video starts playing automatically when loaded.
|
||
// On some browsers autoplay will only work with `muted: true`
|
||
autoplay: true,
|
||
|
||
// @option loop: Boolean = true
|
||
// Whether the video will loop back to the beginning when played.
|
||
loop: true,
|
||
|
||
// @option keepAspectRatio: Boolean = true
|
||
// Whether the video will save aspect ratio after the projection.
|
||
// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)
|
||
keepAspectRatio: true,
|
||
|
||
// @option muted: Boolean = false
|
||
// Whether the video starts on mute when loaded.
|
||
muted: false,
|
||
|
||
// @option playsInline: Boolean = true
|
||
// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.
|
||
playsInline: true
|
||
},
|
||
|
||
_initImage: function () {
|
||
var wasElementSupplied = this._url.tagName === 'VIDEO';
|
||
var vid = this._image = wasElementSupplied ? this._url : create$1('video');
|
||
|
||
addClass(vid, 'leaflet-image-layer');
|
||
if (this._zoomAnimated) { addClass(vid, 'leaflet-zoom-animated'); }
|
||
if (this.options.className) { addClass(vid, this.options.className); }
|
||
|
||
vid.onselectstart = falseFn;
|
||
vid.onmousemove = falseFn;
|
||
|
||
// @event load: Event
|
||
// Fired when the video has finished loading the first frame
|
||
vid.onloadeddata = bind(this.fire, this, 'load');
|
||
|
||
if (wasElementSupplied) {
|
||
var sourceElements = vid.getElementsByTagName('source');
|
||
var sources = [];
|
||
for (var j = 0; j < sourceElements.length; j++) {
|
||
sources.push(sourceElements[j].src);
|
||
}
|
||
|
||
this._url = (sourceElements.length > 0) ? sources : [vid.src];
|
||
return;
|
||
}
|
||
|
||
if (!isArray(this._url)) { this._url = [this._url]; }
|
||
|
||
if (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {
|
||
vid.style['objectFit'] = 'fill';
|
||
}
|
||
vid.autoplay = !!this.options.autoplay;
|
||
vid.loop = !!this.options.loop;
|
||
vid.muted = !!this.options.muted;
|
||
vid.playsInline = !!this.options.playsInline;
|
||
for (var i = 0; i < this._url.length; i++) {
|
||
var source = create$1('source');
|
||
source.src = this._url[i];
|
||
vid.appendChild(source);
|
||
}
|
||
}
|
||
|
||
// @method getElement(): HTMLVideoElement
|
||
// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)
|
||
// used by this overlay.
|
||
});
|
||
|
||
|
||
// @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)
|
||
// Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the
|
||
// geographical bounds it is tied to.
|
||
|
||
function videoOverlay(video, bounds, options) {
|
||
return new VideoOverlay(video, bounds, options);
|
||
}
|
||
|
||
/*
|
||
* @class SVGOverlay
|
||
* @aka L.SVGOverlay
|
||
* @inherits ImageOverlay
|
||
*
|
||
* Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.
|
||
*
|
||
* An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||
* svgElement.setAttribute('xmlns', "http://www.w3.org/2000/svg");
|
||
* svgElement.setAttribute('viewBox', "0 0 200 200");
|
||
* svgElement.innerHTML = '<rect width="200" height="200"/><rect x="75" y="23" width="50" height="50" style="fill:red"/><rect x="75" y="123" width="50" height="50" style="fill:#0013ff"/>';
|
||
* var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];
|
||
* L.svgOverlay(svgElement, svgElementBounds).addTo(map);
|
||
* ```
|
||
*/
|
||
|
||
var SVGOverlay = ImageOverlay.extend({
|
||
_initImage: function () {
|
||
var el = this._image = this._url;
|
||
|
||
addClass(el, 'leaflet-image-layer');
|
||
if (this._zoomAnimated) { addClass(el, 'leaflet-zoom-animated'); }
|
||
if (this.options.className) { addClass(el, this.options.className); }
|
||
|
||
el.onselectstart = falseFn;
|
||
el.onmousemove = falseFn;
|
||
}
|
||
|
||
// @method getElement(): SVGElement
|
||
// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)
|
||
// used by this overlay.
|
||
});
|
||
|
||
|
||
// @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)
|
||
// Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.
|
||
// A viewBox attribute is required on the SVG element to zoom in and out properly.
|
||
|
||
function svgOverlay(el, bounds, options) {
|
||
return new SVGOverlay(el, bounds, options);
|
||
}
|
||
|
||
/*
|
||
* @class DivOverlay
|
||
* @inherits Interactive layer
|
||
* @aka L.DivOverlay
|
||
* Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.
|
||
*/
|
||
|
||
// @namespace DivOverlay
|
||
var DivOverlay = Layer.extend({
|
||
|
||
// @section
|
||
// @aka DivOverlay options
|
||
options: {
|
||
// @option interactive: Boolean = false
|
||
// If true, the popup/tooltip will listen to the mouse events.
|
||
interactive: false,
|
||
|
||
// @option offset: Point = Point(0, 0)
|
||
// The offset of the overlay position.
|
||
offset: [0, 0],
|
||
|
||
// @option className: String = ''
|
||
// A custom CSS class name to assign to the overlay.
|
||
className: '',
|
||
|
||
// @option pane: String = undefined
|
||
// `Map pane` where the overlay will be added.
|
||
pane: undefined,
|
||
|
||
// @option content: String|HTMLElement|Function = ''
|
||
// Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be
|
||
// passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.
|
||
content: ''
|
||
},
|
||
|
||
initialize: function (options, source) {
|
||
if (options && (options instanceof LatLng || isArray(options))) {
|
||
this._latlng = toLatLng(options);
|
||
setOptions(this, source);
|
||
} else {
|
||
setOptions(this, options);
|
||
this._source = source;
|
||
}
|
||
if (this.options.content) {
|
||
this._content = this.options.content;
|
||
}
|
||
},
|
||
|
||
// @method openOn(map: Map): this
|
||
// Adds the overlay to the map.
|
||
// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.
|
||
openOn: function (map) {
|
||
map = arguments.length ? map : this._source._map; // experimental, not the part of public api
|
||
if (!map.hasLayer(this)) {
|
||
map.addLayer(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method close(): this
|
||
// Closes the overlay.
|
||
// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`
|
||
// and `layer.closePopup()`/`.closeTooltip()`.
|
||
close: function () {
|
||
if (this._map) {
|
||
this._map.removeLayer(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method toggle(layer?: Layer): this
|
||
// Opens or closes the overlay bound to layer depending on its current state.
|
||
// Argument may be omitted only for overlay bound to layer.
|
||
// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.
|
||
toggle: function (layer) {
|
||
if (this._map) {
|
||
this.close();
|
||
} else {
|
||
if (arguments.length) {
|
||
this._source = layer;
|
||
} else {
|
||
layer = this._source;
|
||
}
|
||
this._prepareOpen();
|
||
|
||
// open the overlay on the map
|
||
this.openOn(layer._map);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
this._zoomAnimated = map._zoomAnimated;
|
||
|
||
if (!this._container) {
|
||
this._initLayout();
|
||
}
|
||
|
||
if (map._fadeAnimated) {
|
||
setOpacity(this._container, 0);
|
||
}
|
||
|
||
clearTimeout(this._removeTimeout);
|
||
this.getPane().appendChild(this._container);
|
||
this.update();
|
||
|
||
if (map._fadeAnimated) {
|
||
setOpacity(this._container, 1);
|
||
}
|
||
|
||
this.bringToFront();
|
||
|
||
if (this.options.interactive) {
|
||
addClass(this._container, 'leaflet-interactive');
|
||
this.addInteractiveTarget(this._container);
|
||
}
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
if (map._fadeAnimated) {
|
||
setOpacity(this._container, 0);
|
||
this._removeTimeout = setTimeout(bind(remove, undefined, this._container), 200);
|
||
} else {
|
||
remove(this._container);
|
||
}
|
||
|
||
if (this.options.interactive) {
|
||
removeClass(this._container, 'leaflet-interactive');
|
||
this.removeInteractiveTarget(this._container);
|
||
}
|
||
},
|
||
|
||
// @namespace DivOverlay
|
||
// @method getLatLng: LatLng
|
||
// Returns the geographical point of the overlay.
|
||
getLatLng: function () {
|
||
return this._latlng;
|
||
},
|
||
|
||
// @method setLatLng(latlng: LatLng): this
|
||
// Sets the geographical point where the overlay will open.
|
||
setLatLng: function (latlng) {
|
||
this._latlng = toLatLng(latlng);
|
||
if (this._map) {
|
||
this._updatePosition();
|
||
this._adjustPan();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getContent: String|HTMLElement
|
||
// Returns the content of the overlay.
|
||
getContent: function () {
|
||
return this._content;
|
||
},
|
||
|
||
// @method setContent(htmlContent: String|HTMLElement|Function): this
|
||
// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.
|
||
// The function should return a `String` or `HTMLElement` to be used in the overlay.
|
||
setContent: function (content) {
|
||
this._content = content;
|
||
this.update();
|
||
return this;
|
||
},
|
||
|
||
// @method getElement: String|HTMLElement
|
||
// Returns the HTML container of the overlay.
|
||
getElement: function () {
|
||
return this._container;
|
||
},
|
||
|
||
// @method update: null
|
||
// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.
|
||
update: function () {
|
||
if (!this._map) { return; }
|
||
|
||
this._container.style.visibility = 'hidden';
|
||
|
||
this._updateContent();
|
||
this._updateLayout();
|
||
this._updatePosition();
|
||
|
||
this._container.style.visibility = '';
|
||
|
||
this._adjustPan();
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
zoom: this._updatePosition,
|
||
viewreset: this._updatePosition
|
||
};
|
||
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._animateZoom;
|
||
}
|
||
return events;
|
||
},
|
||
|
||
// @method isOpen: Boolean
|
||
// Returns `true` when the overlay is visible on the map.
|
||
isOpen: function () {
|
||
return !!this._map && this._map.hasLayer(this);
|
||
},
|
||
|
||
// @method bringToFront: this
|
||
// Brings this overlay in front of other overlays (in the same map pane).
|
||
bringToFront: function () {
|
||
if (this._map) {
|
||
toFront(this._container);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack: this
|
||
// Brings this overlay to the back of other overlays (in the same map pane).
|
||
bringToBack: function () {
|
||
if (this._map) {
|
||
toBack(this._container);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)
|
||
_prepareOpen: function (latlng) {
|
||
var source = this._source;
|
||
if (!source._map) { return false; }
|
||
|
||
if (source instanceof FeatureGroup) {
|
||
source = null;
|
||
var layers = this._source._layers;
|
||
for (var id in layers) {
|
||
if (layers[id]._map) {
|
||
source = layers[id];
|
||
break;
|
||
}
|
||
}
|
||
if (!source) { return false; } // Unable to get source layer.
|
||
|
||
// set overlay source to this layer
|
||
this._source = source;
|
||
}
|
||
|
||
if (!latlng) {
|
||
if (source.getCenter) {
|
||
latlng = source.getCenter();
|
||
} else if (source.getLatLng) {
|
||
latlng = source.getLatLng();
|
||
} else if (source.getBounds) {
|
||
latlng = source.getBounds().getCenter();
|
||
} else {
|
||
throw new Error('Unable to get source layer LatLng.');
|
||
}
|
||
}
|
||
this.setLatLng(latlng);
|
||
|
||
if (this._map) {
|
||
// update the overlay (content, layout, etc...)
|
||
this.update();
|
||
}
|
||
|
||
return true;
|
||
},
|
||
|
||
_updateContent: function () {
|
||
if (!this._content) { return; }
|
||
|
||
var node = this._contentNode;
|
||
var content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;
|
||
|
||
if (typeof content === 'string') {
|
||
node.innerHTML = content;
|
||
} else {
|
||
while (node.hasChildNodes()) {
|
||
node.removeChild(node.firstChild);
|
||
}
|
||
node.appendChild(content);
|
||
}
|
||
|
||
// @namespace DivOverlay
|
||
// @section DivOverlay events
|
||
// @event contentupdate: Event
|
||
// Fired when the content of the overlay is updated
|
||
this.fire('contentupdate');
|
||
},
|
||
|
||
_updatePosition: function () {
|
||
if (!this._map) { return; }
|
||
|
||
var pos = this._map.latLngToLayerPoint(this._latlng),
|
||
offset = toPoint(this.options.offset),
|
||
anchor = this._getAnchor();
|
||
|
||
if (this._zoomAnimated) {
|
||
setPosition(this._container, pos.add(anchor));
|
||
} else {
|
||
offset = offset.add(pos).add(anchor);
|
||
}
|
||
|
||
var bottom = this._containerBottom = -offset.y,
|
||
left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;
|
||
|
||
// bottom position the overlay in case the height of the overlay changes (images loading etc)
|
||
this._container.style.bottom = bottom + 'px';
|
||
this._container.style.left = left + 'px';
|
||
},
|
||
|
||
_getAnchor: function () {
|
||
return [0, 0];
|
||
}
|
||
|
||
});
|
||
|
||
Map.include({
|
||
_initOverlay: function (OverlayClass, content, latlng, options) {
|
||
var overlay = content;
|
||
if (!(overlay instanceof OverlayClass)) {
|
||
overlay = new OverlayClass(options).setContent(content);
|
||
}
|
||
if (latlng) {
|
||
overlay.setLatLng(latlng);
|
||
}
|
||
return overlay;
|
||
}
|
||
});
|
||
|
||
|
||
Layer.include({
|
||
_initOverlay: function (OverlayClass, old, content, options) {
|
||
var overlay = content;
|
||
if (overlay instanceof OverlayClass) {
|
||
setOptions(overlay, options);
|
||
overlay._source = this;
|
||
} else {
|
||
overlay = (old && !options) ? old : new OverlayClass(options, this);
|
||
overlay.setContent(content);
|
||
}
|
||
return overlay;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Popup
|
||
* @inherits DivOverlay
|
||
* @aka L.Popup
|
||
* Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to
|
||
* open popups while making sure that only one popup is open at one time
|
||
* (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.
|
||
*
|
||
* @example
|
||
*
|
||
* If you want to just bind a popup to marker click and then open it, it's really easy:
|
||
*
|
||
* ```js
|
||
* marker.bindPopup(popupContent).openPopup();
|
||
* ```
|
||
* Path overlays like polylines also have a `bindPopup` method.
|
||
*
|
||
* A popup can be also standalone:
|
||
*
|
||
* ```js
|
||
* var popup = L.popup()
|
||
* .setLatLng(latlng)
|
||
* .setContent('<p>Hello world!<br />This is a nice popup.</p>')
|
||
* .openOn(map);
|
||
* ```
|
||
* or
|
||
* ```js
|
||
* var popup = L.popup(latlng, {content: '<p>Hello world!<br />This is a nice popup.</p>')
|
||
* .openOn(map);
|
||
* ```
|
||
*/
|
||
|
||
|
||
// @namespace Popup
|
||
var Popup = DivOverlay.extend({
|
||
|
||
// @section
|
||
// @aka Popup options
|
||
options: {
|
||
// @option pane: String = 'popupPane'
|
||
// `Map pane` where the popup will be added.
|
||
pane: 'popupPane',
|
||
|
||
// @option offset: Point = Point(0, 7)
|
||
// The offset of the popup position.
|
||
offset: [0, 7],
|
||
|
||
// @option maxWidth: Number = 300
|
||
// Max width of the popup, in pixels.
|
||
maxWidth: 300,
|
||
|
||
// @option minWidth: Number = 50
|
||
// Min width of the popup, in pixels.
|
||
minWidth: 50,
|
||
|
||
// @option maxHeight: Number = null
|
||
// If set, creates a scrollable container of the given height
|
||
// inside a popup if its content exceeds it.
|
||
// The scrollable container can be styled using the
|
||
// `leaflet-popup-scrolled` CSS class selector.
|
||
maxHeight: null,
|
||
|
||
// @option autoPan: Boolean = true
|
||
// Set it to `false` if you don't want the map to do panning animation
|
||
// to fit the opened popup.
|
||
autoPan: true,
|
||
|
||
// @option autoPanPaddingTopLeft: Point = null
|
||
// The margin between the popup and the top left corner of the map
|
||
// view after autopanning was performed.
|
||
autoPanPaddingTopLeft: null,
|
||
|
||
// @option autoPanPaddingBottomRight: Point = null
|
||
// The margin between the popup and the bottom right corner of the map
|
||
// view after autopanning was performed.
|
||
autoPanPaddingBottomRight: null,
|
||
|
||
// @option autoPanPadding: Point = Point(5, 5)
|
||
// Equivalent of setting both top left and bottom right autopan padding to the same value.
|
||
autoPanPadding: [5, 5],
|
||
|
||
// @option keepInView: Boolean = false
|
||
// Set it to `true` if you want to prevent users from panning the popup
|
||
// off of the screen while it is open.
|
||
keepInView: false,
|
||
|
||
// @option closeButton: Boolean = true
|
||
// Controls the presence of a close button in the popup.
|
||
closeButton: true,
|
||
|
||
// @option autoClose: Boolean = true
|
||
// Set it to `false` if you want to override the default behavior of
|
||
// the popup closing when another popup is opened.
|
||
autoClose: true,
|
||
|
||
// @option closeOnEscapeKey: Boolean = true
|
||
// Set it to `false` if you want to override the default behavior of
|
||
// the ESC key for closing of the popup.
|
||
closeOnEscapeKey: true,
|
||
|
||
// @option closeOnClick: Boolean = *
|
||
// Set it if you want to override the default behavior of the popup closing when user clicks
|
||
// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.
|
||
|
||
// @option className: String = ''
|
||
// A custom CSS class name to assign to the popup.
|
||
className: ''
|
||
},
|
||
|
||
// @namespace Popup
|
||
// @method openOn(map: Map): this
|
||
// Alternative to `map.openPopup(popup)`.
|
||
// Adds the popup to the map and closes the previous one.
|
||
openOn: function (map) {
|
||
map = arguments.length ? map : this._source._map; // experimental, not the part of public api
|
||
|
||
if (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {
|
||
map.removeLayer(map._popup);
|
||
}
|
||
map._popup = this;
|
||
|
||
return DivOverlay.prototype.openOn.call(this, map);
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
DivOverlay.prototype.onAdd.call(this, map);
|
||
|
||
// @namespace Map
|
||
// @section Popup events
|
||
// @event popupopen: PopupEvent
|
||
// Fired when a popup is opened in the map
|
||
map.fire('popupopen', {popup: this});
|
||
|
||
if (this._source) {
|
||
// @namespace Layer
|
||
// @section Popup events
|
||
// @event popupopen: PopupEvent
|
||
// Fired when a popup bound to this layer is opened
|
||
this._source.fire('popupopen', {popup: this}, true);
|
||
// For non-path layers, we toggle the popup when clicking
|
||
// again the layer, so prevent the map to reopen it.
|
||
if (!(this._source instanceof Path)) {
|
||
this._source.on('preclick', stopPropagation);
|
||
}
|
||
}
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
DivOverlay.prototype.onRemove.call(this, map);
|
||
|
||
// @namespace Map
|
||
// @section Popup events
|
||
// @event popupclose: PopupEvent
|
||
// Fired when a popup in the map is closed
|
||
map.fire('popupclose', {popup: this});
|
||
|
||
if (this._source) {
|
||
// @namespace Layer
|
||
// @section Popup events
|
||
// @event popupclose: PopupEvent
|
||
// Fired when a popup bound to this layer is closed
|
||
this._source.fire('popupclose', {popup: this}, true);
|
||
if (!(this._source instanceof Path)) {
|
||
this._source.off('preclick', stopPropagation);
|
||
}
|
||
}
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = DivOverlay.prototype.getEvents.call(this);
|
||
|
||
if (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
|
||
events.preclick = this.close;
|
||
}
|
||
|
||
if (this.options.keepInView) {
|
||
events.moveend = this._adjustPan;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var prefix = 'leaflet-popup',
|
||
container = this._container = create$1('div',
|
||
prefix + ' ' + (this.options.className || '') +
|
||
' leaflet-zoom-animated');
|
||
|
||
var wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);
|
||
this._contentNode = create$1('div', prefix + '-content', wrapper);
|
||
|
||
disableClickPropagation(container);
|
||
disableScrollPropagation(this._contentNode);
|
||
on(container, 'contextmenu', stopPropagation);
|
||
|
||
this._tipContainer = create$1('div', prefix + '-tip-container', container);
|
||
this._tip = create$1('div', prefix + '-tip', this._tipContainer);
|
||
|
||
if (this.options.closeButton) {
|
||
var closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);
|
||
closeButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399
|
||
closeButton.setAttribute('aria-label', 'Close popup');
|
||
closeButton.href = '#close';
|
||
closeButton.innerHTML = '<span aria-hidden="true">×</span>';
|
||
|
||
on(closeButton, 'click', function (ev) {
|
||
preventDefault(ev);
|
||
this.close();
|
||
}, this);
|
||
}
|
||
},
|
||
|
||
_updateLayout: function () {
|
||
var container = this._contentNode,
|
||
style = container.style;
|
||
|
||
style.width = '';
|
||
style.whiteSpace = 'nowrap';
|
||
|
||
var width = container.offsetWidth;
|
||
width = Math.min(width, this.options.maxWidth);
|
||
width = Math.max(width, this.options.minWidth);
|
||
|
||
style.width = (width + 1) + 'px';
|
||
style.whiteSpace = '';
|
||
|
||
style.height = '';
|
||
|
||
var height = container.offsetHeight,
|
||
maxHeight = this.options.maxHeight,
|
||
scrolledClass = 'leaflet-popup-scrolled';
|
||
|
||
if (maxHeight && height > maxHeight) {
|
||
style.height = maxHeight + 'px';
|
||
addClass(container, scrolledClass);
|
||
} else {
|
||
removeClass(container, scrolledClass);
|
||
}
|
||
|
||
this._containerWidth = this._container.offsetWidth;
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),
|
||
anchor = this._getAnchor();
|
||
setPosition(this._container, pos.add(anchor));
|
||
},
|
||
|
||
_adjustPan: function () {
|
||
if (!this.options.autoPan) { return; }
|
||
if (this._map._panAnim) { this._map._panAnim.stop(); }
|
||
|
||
// We can endlessly recurse if keepInView is set and the view resets.
|
||
// Let's guard against that by exiting early if we're responding to our own autopan.
|
||
if (this._autopanning) {
|
||
this._autopanning = false;
|
||
return;
|
||
}
|
||
|
||
var map = this._map,
|
||
marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,
|
||
containerHeight = this._container.offsetHeight + marginBottom,
|
||
containerWidth = this._containerWidth,
|
||
layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);
|
||
|
||
layerPos._add(getPosition(this._container));
|
||
|
||
var containerPos = map.layerPointToContainerPoint(layerPos),
|
||
padding = toPoint(this.options.autoPanPadding),
|
||
paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),
|
||
paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),
|
||
size = map.getSize(),
|
||
dx = 0,
|
||
dy = 0;
|
||
|
||
if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right
|
||
dx = containerPos.x + containerWidth - size.x + paddingBR.x;
|
||
}
|
||
if (containerPos.x - dx - paddingTL.x < 0) { // left
|
||
dx = containerPos.x - paddingTL.x;
|
||
}
|
||
if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom
|
||
dy = containerPos.y + containerHeight - size.y + paddingBR.y;
|
||
}
|
||
if (containerPos.y - dy - paddingTL.y < 0) { // top
|
||
dy = containerPos.y - paddingTL.y;
|
||
}
|
||
|
||
// @namespace Map
|
||
// @section Popup events
|
||
// @event autopanstart: Event
|
||
// Fired when the map starts autopanning when opening a popup.
|
||
if (dx || dy) {
|
||
// Track that we're autopanning, as this function will be re-ran on moveend
|
||
if (this.options.keepInView) {
|
||
this._autopanning = true;
|
||
}
|
||
|
||
map
|
||
.fire('autopanstart')
|
||
.panBy([dx, dy]);
|
||
}
|
||
},
|
||
|
||
_getAnchor: function () {
|
||
// Where should we anchor the popup on the source layer?
|
||
return toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);
|
||
}
|
||
|
||
});
|
||
|
||
// @namespace Popup
|
||
// @factory L.popup(options?: Popup options, source?: Layer)
|
||
// Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.
|
||
// @alternative
|
||
// @factory L.popup(latlng: LatLng, options?: Popup options)
|
||
// Instantiates a `Popup` object given `latlng` where the popup will open and an optional `options` object that describes its appearance and location.
|
||
var popup = function (options, source) {
|
||
return new Popup(options, source);
|
||
};
|
||
|
||
|
||
/* @namespace Map
|
||
* @section Interaction Options
|
||
* @option closePopupOnClick: Boolean = true
|
||
* Set it to `false` if you don't want popups to close when user clicks the map.
|
||
*/
|
||
Map.mergeOptions({
|
||
closePopupOnClick: true
|
||
});
|
||
|
||
|
||
// @namespace Map
|
||
// @section Methods for Layers and Controls
|
||
Map.include({
|
||
// @method openPopup(popup: Popup): this
|
||
// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).
|
||
// @alternative
|
||
// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this
|
||
// Creates a popup with the specified content and options and opens it in the given point on a map.
|
||
openPopup: function (popup, latlng, options) {
|
||
this._initOverlay(Popup, popup, latlng, options)
|
||
.openOn(this);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method closePopup(popup?: Popup): this
|
||
// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).
|
||
closePopup: function (popup) {
|
||
popup = arguments.length ? popup : this._popup;
|
||
if (popup) {
|
||
popup.close();
|
||
}
|
||
return this;
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @namespace Layer
|
||
* @section Popup methods example
|
||
*
|
||
* All layers share a set of methods convenient for binding popups to it.
|
||
*
|
||
* ```js
|
||
* var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);
|
||
* layer.openPopup();
|
||
* layer.closePopup();
|
||
* ```
|
||
*
|
||
* Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.
|
||
*/
|
||
|
||
// @section Popup methods
|
||
Layer.include({
|
||
|
||
// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this
|
||
// Binds a popup to the layer with the passed `content` and sets up the
|
||
// necessary event listeners. If a `Function` is passed it will receive
|
||
// the layer as the first argument and should return a `String` or `HTMLElement`.
|
||
bindPopup: function (content, options) {
|
||
this._popup = this._initOverlay(Popup, this._popup, content, options);
|
||
if (!this._popupHandlersAdded) {
|
||
this.on({
|
||
click: this._openPopup,
|
||
keypress: this._onKeyPress,
|
||
remove: this.closePopup,
|
||
move: this._movePopup
|
||
});
|
||
this._popupHandlersAdded = true;
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method unbindPopup(): this
|
||
// Removes the popup previously bound with `bindPopup`.
|
||
unbindPopup: function () {
|
||
if (this._popup) {
|
||
this.off({
|
||
click: this._openPopup,
|
||
keypress: this._onKeyPress,
|
||
remove: this.closePopup,
|
||
move: this._movePopup
|
||
});
|
||
this._popupHandlersAdded = false;
|
||
this._popup = null;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method openPopup(latlng?: LatLng): this
|
||
// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.
|
||
openPopup: function (latlng) {
|
||
if (this._popup) {
|
||
if (!(this instanceof FeatureGroup)) {
|
||
this._popup._source = this;
|
||
}
|
||
if (this._popup._prepareOpen(latlng || this._latlng)) {
|
||
// open the popup on the map
|
||
this._popup.openOn(this._map);
|
||
}
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method closePopup(): this
|
||
// Closes the popup bound to this layer if it is open.
|
||
closePopup: function () {
|
||
if (this._popup) {
|
||
this._popup.close();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method togglePopup(): this
|
||
// Opens or closes the popup bound to this layer depending on its current state.
|
||
togglePopup: function () {
|
||
if (this._popup) {
|
||
this._popup.toggle(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method isPopupOpen(): boolean
|
||
// Returns `true` if the popup bound to this layer is currently open.
|
||
isPopupOpen: function () {
|
||
return (this._popup ? this._popup.isOpen() : false);
|
||
},
|
||
|
||
// @method setPopupContent(content: String|HTMLElement|Popup): this
|
||
// Sets the content of the popup bound to this layer.
|
||
setPopupContent: function (content) {
|
||
if (this._popup) {
|
||
this._popup.setContent(content);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getPopup(): Popup
|
||
// Returns the popup bound to this layer.
|
||
getPopup: function () {
|
||
return this._popup;
|
||
},
|
||
|
||
_openPopup: function (e) {
|
||
if (!this._popup || !this._map) {
|
||
return;
|
||
}
|
||
// prevent map click
|
||
stop(e);
|
||
|
||
var target = e.layer || e.target;
|
||
if (this._popup._source === target && !(target instanceof Path)) {
|
||
// treat it like a marker and figure out
|
||
// if we should toggle it open/closed
|
||
if (this._map.hasLayer(this._popup)) {
|
||
this.closePopup();
|
||
} else {
|
||
this.openPopup(e.latlng);
|
||
}
|
||
return;
|
||
}
|
||
this._popup._source = target;
|
||
this.openPopup(e.latlng);
|
||
},
|
||
|
||
_movePopup: function (e) {
|
||
this._popup.setLatLng(e.latlng);
|
||
},
|
||
|
||
_onKeyPress: function (e) {
|
||
if (e.originalEvent.keyCode === 13) {
|
||
this._openPopup(e);
|
||
}
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Tooltip
|
||
* @inherits DivOverlay
|
||
* @aka L.Tooltip
|
||
* Used to display small texts on top of map layers.
|
||
*
|
||
* @example
|
||
* If you want to just bind a tooltip to marker:
|
||
*
|
||
* ```js
|
||
* marker.bindTooltip("my tooltip text").openTooltip();
|
||
* ```
|
||
* Path overlays like polylines also have a `bindTooltip` method.
|
||
*
|
||
* A tooltip can be also standalone:
|
||
*
|
||
* ```js
|
||
* var tooltip = L.tooltip()
|
||
* .setLatLng(latlng)
|
||
* .setContent('Hello world!<br />This is a nice tooltip.')
|
||
* .addTo(map);
|
||
* ```
|
||
* or
|
||
* ```js
|
||
* var tooltip = L.tooltip(latlng, {content: 'Hello world!<br />This is a nice tooltip.'})
|
||
* .addTo(map);
|
||
* ```
|
||
*
|
||
*
|
||
* Note about tooltip offset. Leaflet takes two options in consideration
|
||
* for computing tooltip offsetting:
|
||
* - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.
|
||
* Add a positive x offset to move the tooltip to the right, and a positive y offset to
|
||
* move it to the bottom. Negatives will move to the left and top.
|
||
* - the `tooltipAnchor` Icon option: this will only be considered for Marker. You
|
||
* should adapt this value if you use a custom icon.
|
||
*/
|
||
|
||
|
||
// @namespace Tooltip
|
||
var Tooltip = DivOverlay.extend({
|
||
|
||
// @section
|
||
// @aka Tooltip options
|
||
options: {
|
||
// @option pane: String = 'tooltipPane'
|
||
// `Map pane` where the tooltip will be added.
|
||
pane: 'tooltipPane',
|
||
|
||
// @option offset: Point = Point(0, 0)
|
||
// Optional offset of the tooltip position.
|
||
offset: [0, 0],
|
||
|
||
// @option direction: String = 'auto'
|
||
// Direction where to open the tooltip. Possible values are: `right`, `left`,
|
||
// `top`, `bottom`, `center`, `auto`.
|
||
// `auto` will dynamically switch between `right` and `left` according to the tooltip
|
||
// position on the map.
|
||
direction: 'auto',
|
||
|
||
// @option permanent: Boolean = false
|
||
// Whether to open the tooltip permanently or only on mouseover.
|
||
permanent: false,
|
||
|
||
// @option sticky: Boolean = false
|
||
// If true, the tooltip will follow the mouse instead of being fixed at the feature center.
|
||
sticky: false,
|
||
|
||
// @option opacity: Number = 0.9
|
||
// Tooltip container opacity.
|
||
opacity: 0.9
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
DivOverlay.prototype.onAdd.call(this, map);
|
||
this.setOpacity(this.options.opacity);
|
||
|
||
// @namespace Map
|
||
// @section Tooltip events
|
||
// @event tooltipopen: TooltipEvent
|
||
// Fired when a tooltip is opened in the map.
|
||
map.fire('tooltipopen', {tooltip: this});
|
||
|
||
if (this._source) {
|
||
this.addEventParent(this._source);
|
||
|
||
// @namespace Layer
|
||
// @section Tooltip events
|
||
// @event tooltipopen: TooltipEvent
|
||
// Fired when a tooltip bound to this layer is opened.
|
||
this._source.fire('tooltipopen', {tooltip: this}, true);
|
||
}
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
DivOverlay.prototype.onRemove.call(this, map);
|
||
|
||
// @namespace Map
|
||
// @section Tooltip events
|
||
// @event tooltipclose: TooltipEvent
|
||
// Fired when a tooltip in the map is closed.
|
||
map.fire('tooltipclose', {tooltip: this});
|
||
|
||
if (this._source) {
|
||
this.removeEventParent(this._source);
|
||
|
||
// @namespace Layer
|
||
// @section Tooltip events
|
||
// @event tooltipclose: TooltipEvent
|
||
// Fired when a tooltip bound to this layer is closed.
|
||
this._source.fire('tooltipclose', {tooltip: this}, true);
|
||
}
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = DivOverlay.prototype.getEvents.call(this);
|
||
|
||
if (!this.options.permanent) {
|
||
events.preclick = this.close;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
_initLayout: function () {
|
||
var prefix = 'leaflet-tooltip',
|
||
className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
|
||
|
||
this._contentNode = this._container = create$1('div', className);
|
||
|
||
this._container.setAttribute('role', 'tooltip');
|
||
this._container.setAttribute('id', 'leaflet-tooltip-' + stamp(this));
|
||
},
|
||
|
||
_updateLayout: function () {},
|
||
|
||
_adjustPan: function () {},
|
||
|
||
_setPosition: function (pos) {
|
||
var subX, subY,
|
||
map = this._map,
|
||
container = this._container,
|
||
centerPoint = map.latLngToContainerPoint(map.getCenter()),
|
||
tooltipPoint = map.layerPointToContainerPoint(pos),
|
||
direction = this.options.direction,
|
||
tooltipWidth = container.offsetWidth,
|
||
tooltipHeight = container.offsetHeight,
|
||
offset = toPoint(this.options.offset),
|
||
anchor = this._getAnchor();
|
||
|
||
if (direction === 'top') {
|
||
subX = tooltipWidth / 2;
|
||
subY = tooltipHeight;
|
||
} else if (direction === 'bottom') {
|
||
subX = tooltipWidth / 2;
|
||
subY = 0;
|
||
} else if (direction === 'center') {
|
||
subX = tooltipWidth / 2;
|
||
subY = tooltipHeight / 2;
|
||
} else if (direction === 'right') {
|
||
subX = 0;
|
||
subY = tooltipHeight / 2;
|
||
} else if (direction === 'left') {
|
||
subX = tooltipWidth;
|
||
subY = tooltipHeight / 2;
|
||
} else if (tooltipPoint.x < centerPoint.x) {
|
||
direction = 'right';
|
||
subX = 0;
|
||
subY = tooltipHeight / 2;
|
||
} else {
|
||
direction = 'left';
|
||
subX = tooltipWidth + (offset.x + anchor.x) * 2;
|
||
subY = tooltipHeight / 2;
|
||
}
|
||
|
||
pos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);
|
||
|
||
removeClass(container, 'leaflet-tooltip-right');
|
||
removeClass(container, 'leaflet-tooltip-left');
|
||
removeClass(container, 'leaflet-tooltip-top');
|
||
removeClass(container, 'leaflet-tooltip-bottom');
|
||
addClass(container, 'leaflet-tooltip-' + direction);
|
||
setPosition(container, pos);
|
||
},
|
||
|
||
_updatePosition: function () {
|
||
var pos = this._map.latLngToLayerPoint(this._latlng);
|
||
this._setPosition(pos);
|
||
},
|
||
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
|
||
if (this._container) {
|
||
setOpacity(this._container, opacity);
|
||
}
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);
|
||
this._setPosition(pos);
|
||
},
|
||
|
||
_getAnchor: function () {
|
||
// Where should we anchor the tooltip on the source layer?
|
||
return toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
|
||
}
|
||
|
||
});
|
||
|
||
// @namespace Tooltip
|
||
// @factory L.tooltip(options?: Tooltip options, source?: Layer)
|
||
// Instantiates a `Tooltip` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.
|
||
// @alternative
|
||
// @factory L.tooltip(latlng: LatLng, options?: Tooltip options)
|
||
// Instantiates a `Tooltip` object given `latlng` where the tooltip will open and an optional `options` object that describes its appearance and location.
|
||
var tooltip = function (options, source) {
|
||
return new Tooltip(options, source);
|
||
};
|
||
|
||
// @namespace Map
|
||
// @section Methods for Layers and Controls
|
||
Map.include({
|
||
|
||
// @method openTooltip(tooltip: Tooltip): this
|
||
// Opens the specified tooltip.
|
||
// @alternative
|
||
// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this
|
||
// Creates a tooltip with the specified content and options and open it.
|
||
openTooltip: function (tooltip, latlng, options) {
|
||
this._initOverlay(Tooltip, tooltip, latlng, options)
|
||
.openOn(this);
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method closeTooltip(tooltip: Tooltip): this
|
||
// Closes the tooltip given as parameter.
|
||
closeTooltip: function (tooltip) {
|
||
tooltip.close();
|
||
return this;
|
||
}
|
||
|
||
});
|
||
|
||
/*
|
||
* @namespace Layer
|
||
* @section Tooltip methods example
|
||
*
|
||
* All layers share a set of methods convenient for binding tooltips to it.
|
||
*
|
||
* ```js
|
||
* var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);
|
||
* layer.openTooltip();
|
||
* layer.closeTooltip();
|
||
* ```
|
||
*/
|
||
|
||
// @section Tooltip methods
|
||
Layer.include({
|
||
|
||
// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this
|
||
// Binds a tooltip to the layer with the passed `content` and sets up the
|
||
// necessary event listeners. If a `Function` is passed it will receive
|
||
// the layer as the first argument and should return a `String` or `HTMLElement`.
|
||
bindTooltip: function (content, options) {
|
||
|
||
if (this._tooltip && this.isTooltipOpen()) {
|
||
this.unbindTooltip();
|
||
}
|
||
|
||
this._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);
|
||
this._initTooltipInteractions();
|
||
|
||
if (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {
|
||
this.openTooltip();
|
||
}
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method unbindTooltip(): this
|
||
// Removes the tooltip previously bound with `bindTooltip`.
|
||
unbindTooltip: function () {
|
||
if (this._tooltip) {
|
||
this._initTooltipInteractions(true);
|
||
this.closeTooltip();
|
||
this._tooltip = null;
|
||
}
|
||
return this;
|
||
},
|
||
|
||
_initTooltipInteractions: function (remove) {
|
||
if (!remove && this._tooltipHandlersAdded) { return; }
|
||
var onOff = remove ? 'off' : 'on',
|
||
events = {
|
||
remove: this.closeTooltip,
|
||
move: this._moveTooltip
|
||
};
|
||
if (!this._tooltip.options.permanent) {
|
||
events.mouseover = this._openTooltip;
|
||
events.mouseout = this.closeTooltip;
|
||
events.click = this._openTooltip;
|
||
if (this._map) {
|
||
this._addFocusListeners();
|
||
} else {
|
||
events.add = this._addFocusListeners;
|
||
}
|
||
} else {
|
||
events.add = this._openTooltip;
|
||
}
|
||
if (this._tooltip.options.sticky) {
|
||
events.mousemove = this._moveTooltip;
|
||
}
|
||
this[onOff](events);
|
||
this._tooltipHandlersAdded = !remove;
|
||
},
|
||
|
||
// @method openTooltip(latlng?: LatLng): this
|
||
// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.
|
||
openTooltip: function (latlng) {
|
||
if (this._tooltip) {
|
||
if (!(this instanceof FeatureGroup)) {
|
||
this._tooltip._source = this;
|
||
}
|
||
if (this._tooltip._prepareOpen(latlng)) {
|
||
// open the tooltip on the map
|
||
this._tooltip.openOn(this._map);
|
||
|
||
if (this.getElement) {
|
||
this._setAriaDescribedByOnLayer(this);
|
||
} else if (this.eachLayer) {
|
||
this.eachLayer(this._setAriaDescribedByOnLayer, this);
|
||
}
|
||
}
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method closeTooltip(): this
|
||
// Closes the tooltip bound to this layer if it is open.
|
||
closeTooltip: function () {
|
||
if (this._tooltip) {
|
||
return this._tooltip.close();
|
||
}
|
||
},
|
||
|
||
// @method toggleTooltip(): this
|
||
// Opens or closes the tooltip bound to this layer depending on its current state.
|
||
toggleTooltip: function () {
|
||
if (this._tooltip) {
|
||
this._tooltip.toggle(this);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method isTooltipOpen(): boolean
|
||
// Returns `true` if the tooltip bound to this layer is currently open.
|
||
isTooltipOpen: function () {
|
||
return this._tooltip.isOpen();
|
||
},
|
||
|
||
// @method setTooltipContent(content: String|HTMLElement|Tooltip): this
|
||
// Sets the content of the tooltip bound to this layer.
|
||
setTooltipContent: function (content) {
|
||
if (this._tooltip) {
|
||
this._tooltip.setContent(content);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getTooltip(): Tooltip
|
||
// Returns the tooltip bound to this layer.
|
||
getTooltip: function () {
|
||
return this._tooltip;
|
||
},
|
||
|
||
_addFocusListeners: function () {
|
||
if (this.getElement) {
|
||
this._addFocusListenersOnLayer(this);
|
||
} else if (this.eachLayer) {
|
||
this.eachLayer(this._addFocusListenersOnLayer, this);
|
||
}
|
||
},
|
||
|
||
_addFocusListenersOnLayer: function (layer) {
|
||
var el = layer.getElement();
|
||
if (el) {
|
||
on(el, 'focus', function () {
|
||
this._tooltip._source = layer;
|
||
this.openTooltip();
|
||
}, this);
|
||
on(el, 'blur', this.closeTooltip, this);
|
||
}
|
||
},
|
||
|
||
_setAriaDescribedByOnLayer: function (layer) {
|
||
var el = layer.getElement();
|
||
if (el) {
|
||
el.setAttribute('aria-describedby', this._tooltip._container.id);
|
||
}
|
||
},
|
||
|
||
|
||
_openTooltip: function (e) {
|
||
if (!this._tooltip || !this._map || (this._map.dragging && this._map.dragging.moving())) {
|
||
return;
|
||
}
|
||
this._tooltip._source = e.layer || e.target;
|
||
|
||
this.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);
|
||
},
|
||
|
||
_moveTooltip: function (e) {
|
||
var latlng = e.latlng, containerPoint, layerPoint;
|
||
if (this._tooltip.options.sticky && e.originalEvent) {
|
||
containerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);
|
||
layerPoint = this._map.containerPointToLayerPoint(containerPoint);
|
||
latlng = this._map.layerPointToLatLng(layerPoint);
|
||
}
|
||
this._tooltip.setLatLng(latlng);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class DivIcon
|
||
* @aka L.DivIcon
|
||
* @inherits Icon
|
||
*
|
||
* Represents a lightweight icon for markers that uses a simple `<div>`
|
||
* element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.
|
||
*
|
||
* @example
|
||
* ```js
|
||
* var myIcon = L.divIcon({className: 'my-div-icon'});
|
||
* // you can set .my-div-icon styles in CSS
|
||
*
|
||
* L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
|
||
* ```
|
||
*
|
||
* By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.
|
||
*/
|
||
|
||
var DivIcon = Icon.extend({
|
||
options: {
|
||
// @section
|
||
// @aka DivIcon options
|
||
iconSize: [12, 12], // also can be set through CSS
|
||
|
||
// iconAnchor: (Point),
|
||
// popupAnchor: (Point),
|
||
|
||
// @option html: String|HTMLElement = ''
|
||
// Custom HTML code to put inside the div element, empty by default. Alternatively,
|
||
// an instance of `HTMLElement`.
|
||
html: false,
|
||
|
||
// @option bgPos: Point = [0, 0]
|
||
// Optional relative position of the background, in pixels
|
||
bgPos: null,
|
||
|
||
className: 'leaflet-div-icon'
|
||
},
|
||
|
||
createIcon: function (oldIcon) {
|
||
var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
|
||
options = this.options;
|
||
|
||
if (options.html instanceof Element) {
|
||
empty(div);
|
||
div.appendChild(options.html);
|
||
} else {
|
||
div.innerHTML = options.html !== false ? options.html : '';
|
||
}
|
||
|
||
if (options.bgPos) {
|
||
var bgPos = toPoint(options.bgPos);
|
||
div.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';
|
||
}
|
||
this._setIconStyles(div, 'icon');
|
||
|
||
return div;
|
||
},
|
||
|
||
createShadow: function () {
|
||
return null;
|
||
}
|
||
});
|
||
|
||
// @factory L.divIcon(options: DivIcon options)
|
||
// Creates a `DivIcon` instance with the given options.
|
||
function divIcon(options) {
|
||
return new DivIcon(options);
|
||
}
|
||
|
||
Icon.Default = IconDefault;
|
||
|
||
/*
|
||
* @class GridLayer
|
||
* @inherits Layer
|
||
* @aka L.GridLayer
|
||
*
|
||
* Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.
|
||
* GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.
|
||
*
|
||
*
|
||
* @section Synchronous usage
|
||
* @example
|
||
*
|
||
* To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.
|
||
*
|
||
* ```js
|
||
* var CanvasLayer = L.GridLayer.extend({
|
||
* createTile: function(coords){
|
||
* // create a <canvas> element for drawing
|
||
* var tile = L.DomUtil.create('canvas', 'leaflet-tile');
|
||
*
|
||
* // setup tile width and height according to the options
|
||
* var size = this.getTileSize();
|
||
* tile.width = size.x;
|
||
* tile.height = size.y;
|
||
*
|
||
* // get a canvas context and draw something on it using coords.x, coords.y and coords.z
|
||
* var ctx = tile.getContext('2d');
|
||
*
|
||
* // return the tile so it can be rendered on screen
|
||
* return tile;
|
||
* }
|
||
* });
|
||
* ```
|
||
*
|
||
* @section Asynchronous usage
|
||
* @example
|
||
*
|
||
* Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.
|
||
*
|
||
* ```js
|
||
* var CanvasLayer = L.GridLayer.extend({
|
||
* createTile: function(coords, done){
|
||
* var error;
|
||
*
|
||
* // create a <canvas> element for drawing
|
||
* var tile = L.DomUtil.create('canvas', 'leaflet-tile');
|
||
*
|
||
* // setup tile width and height according to the options
|
||
* var size = this.getTileSize();
|
||
* tile.width = size.x;
|
||
* tile.height = size.y;
|
||
*
|
||
* // draw something asynchronously and pass the tile to the done() callback
|
||
* setTimeout(function() {
|
||
* done(error, tile);
|
||
* }, 1000);
|
||
*
|
||
* return tile;
|
||
* }
|
||
* });
|
||
* ```
|
||
*
|
||
* @section
|
||
*/
|
||
|
||
|
||
var GridLayer = Layer.extend({
|
||
|
||
// @section
|
||
// @aka GridLayer options
|
||
options: {
|
||
// @option tileSize: Number|Point = 256
|
||
// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.
|
||
tileSize: 256,
|
||
|
||
// @option opacity: Number = 1.0
|
||
// Opacity of the tiles. Can be used in the `createTile()` function.
|
||
opacity: 1,
|
||
|
||
// @option updateWhenIdle: Boolean = (depends)
|
||
// Load new tiles only when panning ends.
|
||
// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.
|
||
// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the
|
||
// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.
|
||
updateWhenIdle: Browser.mobile,
|
||
|
||
// @option updateWhenZooming: Boolean = true
|
||
// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.
|
||
updateWhenZooming: true,
|
||
|
||
// @option updateInterval: Number = 200
|
||
// Tiles will not update more than once every `updateInterval` milliseconds when panning.
|
||
updateInterval: 200,
|
||
|
||
// @option zIndex: Number = 1
|
||
// The explicit zIndex of the tile layer.
|
||
zIndex: 1,
|
||
|
||
// @option bounds: LatLngBounds = undefined
|
||
// If set, tiles will only be loaded inside the set `LatLngBounds`.
|
||
bounds: null,
|
||
|
||
// @option minZoom: Number = 0
|
||
// The minimum zoom level down to which this layer will be displayed (inclusive).
|
||
minZoom: 0,
|
||
|
||
// @option maxZoom: Number = undefined
|
||
// The maximum zoom level up to which this layer will be displayed (inclusive).
|
||
maxZoom: undefined,
|
||
|
||
// @option maxNativeZoom: Number = undefined
|
||
// Maximum zoom number the tile source has available. If it is specified,
|
||
// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded
|
||
// from `maxNativeZoom` level and auto-scaled.
|
||
maxNativeZoom: undefined,
|
||
|
||
// @option minNativeZoom: Number = undefined
|
||
// Minimum zoom number the tile source has available. If it is specified,
|
||
// the tiles on all zoom levels lower than `minNativeZoom` will be loaded
|
||
// from `minNativeZoom` level and auto-scaled.
|
||
minNativeZoom: undefined,
|
||
|
||
// @option noWrap: Boolean = false
|
||
// Whether the layer is wrapped around the antimeridian. If `true`, the
|
||
// GridLayer will only be displayed once at low zoom levels. Has no
|
||
// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used
|
||
// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting
|
||
// tiles outside the CRS limits.
|
||
noWrap: false,
|
||
|
||
// @option pane: String = 'tilePane'
|
||
// `Map pane` where the grid layer will be added.
|
||
pane: 'tilePane',
|
||
|
||
// @option className: String = ''
|
||
// A custom class name to assign to the tile layer. Empty by default.
|
||
className: '',
|
||
|
||
// @option keepBuffer: Number = 2
|
||
// When panning the map, keep this many rows and columns of tiles before unloading them.
|
||
keepBuffer: 2
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
},
|
||
|
||
onAdd: function () {
|
||
this._initContainer();
|
||
|
||
this._levels = {};
|
||
this._tiles = {};
|
||
|
||
this._resetView(); // implicit _update() call
|
||
},
|
||
|
||
beforeAdd: function (map) {
|
||
map._addZoomLimit(this);
|
||
},
|
||
|
||
onRemove: function (map) {
|
||
this._removeAllTiles();
|
||
remove(this._container);
|
||
map._removeZoomLimit(this);
|
||
this._container = null;
|
||
this._tileZoom = undefined;
|
||
},
|
||
|
||
// @method bringToFront: this
|
||
// Brings the tile layer to the top of all tile layers.
|
||
bringToFront: function () {
|
||
if (this._map) {
|
||
toFront(this._container);
|
||
this._setAutoZIndex(Math.max);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method bringToBack: this
|
||
// Brings the tile layer to the bottom of all tile layers.
|
||
bringToBack: function () {
|
||
if (this._map) {
|
||
toBack(this._container);
|
||
this._setAutoZIndex(Math.min);
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method getContainer: HTMLElement
|
||
// Returns the HTML element that contains the tiles for this layer.
|
||
getContainer: function () {
|
||
return this._container;
|
||
},
|
||
|
||
// @method setOpacity(opacity: Number): this
|
||
// Changes the [opacity](#gridlayer-opacity) of the grid layer.
|
||
setOpacity: function (opacity) {
|
||
this.options.opacity = opacity;
|
||
this._updateOpacity();
|
||
return this;
|
||
},
|
||
|
||
// @method setZIndex(zIndex: Number): this
|
||
// Changes the [zIndex](#gridlayer-zindex) of the grid layer.
|
||
setZIndex: function (zIndex) {
|
||
this.options.zIndex = zIndex;
|
||
this._updateZIndex();
|
||
|
||
return this;
|
||
},
|
||
|
||
// @method isLoading: Boolean
|
||
// Returns `true` if any tile in the grid layer has not finished loading.
|
||
isLoading: function () {
|
||
return this._loading;
|
||
},
|
||
|
||
// @method redraw: this
|
||
// Causes the layer to clear all the tiles and request them again.
|
||
redraw: function () {
|
||
if (this._map) {
|
||
this._removeAllTiles();
|
||
var tileZoom = this._clampZoom(this._map.getZoom());
|
||
if (tileZoom !== this._tileZoom) {
|
||
this._tileZoom = tileZoom;
|
||
this._updateLevels();
|
||
}
|
||
this._update();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
viewprereset: this._invalidateAll,
|
||
viewreset: this._resetView,
|
||
zoom: this._resetView,
|
||
moveend: this._onMoveEnd
|
||
};
|
||
|
||
if (!this.options.updateWhenIdle) {
|
||
// update tiles on move, but not more often than once per given interval
|
||
if (!this._onMove) {
|
||
this._onMove = throttle(this._onMoveEnd, this.options.updateInterval, this);
|
||
}
|
||
|
||
events.move = this._onMove;
|
||
}
|
||
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._animateZoom;
|
||
}
|
||
|
||
return events;
|
||
},
|
||
|
||
// @section Extension methods
|
||
// Layers extending `GridLayer` shall reimplement the following method.
|
||
// @method createTile(coords: Object, done?: Function): HTMLElement
|
||
// Called only internally, must be overridden by classes extending `GridLayer`.
|
||
// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback
|
||
// is specified, it must be called when the tile has finished loading and drawing.
|
||
createTile: function () {
|
||
return document.createElement('div');
|
||
},
|
||
|
||
// @section
|
||
// @method getTileSize: Point
|
||
// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.
|
||
getTileSize: function () {
|
||
var s = this.options.tileSize;
|
||
return s instanceof Point ? s : new Point(s, s);
|
||
},
|
||
|
||
_updateZIndex: function () {
|
||
if (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {
|
||
this._container.style.zIndex = this.options.zIndex;
|
||
}
|
||
},
|
||
|
||
_setAutoZIndex: function (compare) {
|
||
// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)
|
||
|
||
var layers = this.getPane().children,
|
||
edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min
|
||
|
||
for (var i = 0, len = layers.length, zIndex; i < len; i++) {
|
||
|
||
zIndex = layers[i].style.zIndex;
|
||
|
||
if (layers[i] !== this._container && zIndex) {
|
||
edgeZIndex = compare(edgeZIndex, +zIndex);
|
||
}
|
||
}
|
||
|
||
if (isFinite(edgeZIndex)) {
|
||
this.options.zIndex = edgeZIndex + compare(-1, 1);
|
||
this._updateZIndex();
|
||
}
|
||
},
|
||
|
||
_updateOpacity: function () {
|
||
if (!this._map) { return; }
|
||
|
||
// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles
|
||
if (Browser.ielt9) { return; }
|
||
|
||
setOpacity(this._container, this.options.opacity);
|
||
|
||
var now = +new Date(),
|
||
nextFrame = false,
|
||
willPrune = false;
|
||
|
||
for (var key in this._tiles) {
|
||
var tile = this._tiles[key];
|
||
if (!tile.current || !tile.loaded) { continue; }
|
||
|
||
var fade = Math.min(1, (now - tile.loaded) / 200);
|
||
|
||
setOpacity(tile.el, fade);
|
||
if (fade < 1) {
|
||
nextFrame = true;
|
||
} else {
|
||
if (tile.active) {
|
||
willPrune = true;
|
||
} else {
|
||
this._onOpaqueTile(tile);
|
||
}
|
||
tile.active = true;
|
||
}
|
||
}
|
||
|
||
if (willPrune && !this._noPrune) { this._pruneTiles(); }
|
||
|
||
if (nextFrame) {
|
||
cancelAnimFrame(this._fadeFrame);
|
||
this._fadeFrame = requestAnimFrame(this._updateOpacity, this);
|
||
}
|
||
},
|
||
|
||
_onOpaqueTile: falseFn,
|
||
|
||
_initContainer: function () {
|
||
if (this._container) { return; }
|
||
|
||
this._container = create$1('div', 'leaflet-layer ' + (this.options.className || ''));
|
||
this._updateZIndex();
|
||
|
||
if (this.options.opacity < 1) {
|
||
this._updateOpacity();
|
||
}
|
||
|
||
this.getPane().appendChild(this._container);
|
||
},
|
||
|
||
_updateLevels: function () {
|
||
|
||
var zoom = this._tileZoom,
|
||
maxZoom = this.options.maxZoom;
|
||
|
||
if (zoom === undefined) { return undefined; }
|
||
|
||
for (var z in this._levels) {
|
||
z = Number(z);
|
||
if (this._levels[z].el.children.length || z === zoom) {
|
||
this._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);
|
||
this._onUpdateLevel(z);
|
||
} else {
|
||
remove(this._levels[z].el);
|
||
this._removeTilesAtZoom(z);
|
||
this._onRemoveLevel(z);
|
||
delete this._levels[z];
|
||
}
|
||
}
|
||
|
||
var level = this._levels[zoom],
|
||
map = this._map;
|
||
|
||
if (!level) {
|
||
level = this._levels[zoom] = {};
|
||
|
||
level.el = create$1('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);
|
||
level.el.style.zIndex = maxZoom;
|
||
|
||
level.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();
|
||
level.zoom = zoom;
|
||
|
||
this._setZoomTransform(level, map.getCenter(), map.getZoom());
|
||
|
||
// force the browser to consider the newly added element for transition
|
||
falseFn(level.el.offsetWidth);
|
||
|
||
this._onCreateLevel(level);
|
||
}
|
||
|
||
this._level = level;
|
||
|
||
return level;
|
||
},
|
||
|
||
_onUpdateLevel: falseFn,
|
||
|
||
_onRemoveLevel: falseFn,
|
||
|
||
_onCreateLevel: falseFn,
|
||
|
||
_pruneTiles: function () {
|
||
if (!this._map) {
|
||
return;
|
||
}
|
||
|
||
var key, tile;
|
||
|
||
var zoom = this._map.getZoom();
|
||
if (zoom > this.options.maxZoom ||
|
||
zoom < this.options.minZoom) {
|
||
this._removeAllTiles();
|
||
return;
|
||
}
|
||
|
||
for (key in this._tiles) {
|
||
tile = this._tiles[key];
|
||
tile.retain = tile.current;
|
||
}
|
||
|
||
for (key in this._tiles) {
|
||
tile = this._tiles[key];
|
||
if (tile.current && !tile.active) {
|
||
var coords = tile.coords;
|
||
if (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {
|
||
this._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);
|
||
}
|
||
}
|
||
}
|
||
|
||
for (key in this._tiles) {
|
||
if (!this._tiles[key].retain) {
|
||
this._removeTile(key);
|
||
}
|
||
}
|
||
},
|
||
|
||
_removeTilesAtZoom: function (zoom) {
|
||
for (var key in this._tiles) {
|
||
if (this._tiles[key].coords.z !== zoom) {
|
||
continue;
|
||
}
|
||
this._removeTile(key);
|
||
}
|
||
},
|
||
|
||
_removeAllTiles: function () {
|
||
for (var key in this._tiles) {
|
||
this._removeTile(key);
|
||
}
|
||
},
|
||
|
||
_invalidateAll: function () {
|
||
for (var z in this._levels) {
|
||
remove(this._levels[z].el);
|
||
this._onRemoveLevel(Number(z));
|
||
delete this._levels[z];
|
||
}
|
||
this._removeAllTiles();
|
||
|
||
this._tileZoom = undefined;
|
||
},
|
||
|
||
_retainParent: function (x, y, z, minZoom) {
|
||
var x2 = Math.floor(x / 2),
|
||
y2 = Math.floor(y / 2),
|
||
z2 = z - 1,
|
||
coords2 = new Point(+x2, +y2);
|
||
coords2.z = +z2;
|
||
|
||
var key = this._tileCoordsToKey(coords2),
|
||
tile = this._tiles[key];
|
||
|
||
if (tile && tile.active) {
|
||
tile.retain = true;
|
||
return true;
|
||
|
||
} else if (tile && tile.loaded) {
|
||
tile.retain = true;
|
||
}
|
||
|
||
if (z2 > minZoom) {
|
||
return this._retainParent(x2, y2, z2, minZoom);
|
||
}
|
||
|
||
return false;
|
||
},
|
||
|
||
_retainChildren: function (x, y, z, maxZoom) {
|
||
|
||
for (var i = 2 * x; i < 2 * x + 2; i++) {
|
||
for (var j = 2 * y; j < 2 * y + 2; j++) {
|
||
|
||
var coords = new Point(i, j);
|
||
coords.z = z + 1;
|
||
|
||
var key = this._tileCoordsToKey(coords),
|
||
tile = this._tiles[key];
|
||
|
||
if (tile && tile.active) {
|
||
tile.retain = true;
|
||
continue;
|
||
|
||
} else if (tile && tile.loaded) {
|
||
tile.retain = true;
|
||
}
|
||
|
||
if (z + 1 < maxZoom) {
|
||
this._retainChildren(i, j, z + 1, maxZoom);
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
_resetView: function (e) {
|
||
var animating = e && (e.pinch || e.flyTo);
|
||
this._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);
|
||
},
|
||
|
||
_animateZoom: function (e) {
|
||
this._setView(e.center, e.zoom, true, e.noUpdate);
|
||
},
|
||
|
||
_clampZoom: function (zoom) {
|
||
var options = this.options;
|
||
|
||
if (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {
|
||
return options.minNativeZoom;
|
||
}
|
||
|
||
if (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {
|
||
return options.maxNativeZoom;
|
||
}
|
||
|
||
return zoom;
|
||
},
|
||
|
||
_setView: function (center, zoom, noPrune, noUpdate) {
|
||
var tileZoom = Math.round(zoom);
|
||
if ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||
|
||
(this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {
|
||
tileZoom = undefined;
|
||
} else {
|
||
tileZoom = this._clampZoom(tileZoom);
|
||
}
|
||
|
||
var tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);
|
||
|
||
if (!noUpdate || tileZoomChanged) {
|
||
|
||
this._tileZoom = tileZoom;
|
||
|
||
if (this._abortLoading) {
|
||
this._abortLoading();
|
||
}
|
||
|
||
this._updateLevels();
|
||
this._resetGrid();
|
||
|
||
if (tileZoom !== undefined) {
|
||
this._update(center);
|
||
}
|
||
|
||
if (!noPrune) {
|
||
this._pruneTiles();
|
||
}
|
||
|
||
// Flag to prevent _updateOpacity from pruning tiles during
|
||
// a zoom anim or a pinch gesture
|
||
this._noPrune = !!noPrune;
|
||
}
|
||
|
||
this._setZoomTransforms(center, zoom);
|
||
},
|
||
|
||
_setZoomTransforms: function (center, zoom) {
|
||
for (var i in this._levels) {
|
||
this._setZoomTransform(this._levels[i], center, zoom);
|
||
}
|
||
},
|
||
|
||
_setZoomTransform: function (level, center, zoom) {
|
||
var scale = this._map.getZoomScale(zoom, level.zoom),
|
||
translate = level.origin.multiplyBy(scale)
|
||
.subtract(this._map._getNewPixelOrigin(center, zoom)).round();
|
||
|
||
if (Browser.any3d) {
|
||
setTransform(level.el, translate, scale);
|
||
} else {
|
||
setPosition(level.el, translate);
|
||
}
|
||
},
|
||
|
||
_resetGrid: function () {
|
||
var map = this._map,
|
||
crs = map.options.crs,
|
||
tileSize = this._tileSize = this.getTileSize(),
|
||
tileZoom = this._tileZoom;
|
||
|
||
var bounds = this._map.getPixelWorldBounds(this._tileZoom);
|
||
if (bounds) {
|
||
this._globalTileRange = this._pxBoundsToTileRange(bounds);
|
||
}
|
||
|
||
this._wrapX = crs.wrapLng && !this.options.noWrap && [
|
||
Math.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),
|
||
Math.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)
|
||
];
|
||
this._wrapY = crs.wrapLat && !this.options.noWrap && [
|
||
Math.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),
|
||
Math.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)
|
||
];
|
||
},
|
||
|
||
_onMoveEnd: function () {
|
||
if (!this._map || this._map._animatingZoom) { return; }
|
||
|
||
this._update();
|
||
},
|
||
|
||
_getTiledPixelBounds: function (center) {
|
||
var map = this._map,
|
||
mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),
|
||
scale = map.getZoomScale(mapZoom, this._tileZoom),
|
||
pixelCenter = map.project(center, this._tileZoom).floor(),
|
||
halfSize = map.getSize().divideBy(scale * 2);
|
||
|
||
return new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));
|
||
},
|
||
|
||
// Private method to load tiles in the grid's active zoom level according to map bounds
|
||
_update: function (center) {
|
||
var map = this._map;
|
||
if (!map) { return; }
|
||
var zoom = this._clampZoom(map.getZoom());
|
||
|
||
if (center === undefined) { center = map.getCenter(); }
|
||
if (this._tileZoom === undefined) { return; } // if out of minzoom/maxzoom
|
||
|
||
var pixelBounds = this._getTiledPixelBounds(center),
|
||
tileRange = this._pxBoundsToTileRange(pixelBounds),
|
||
tileCenter = tileRange.getCenter(),
|
||
queue = [],
|
||
margin = this.options.keepBuffer,
|
||
noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),
|
||
tileRange.getTopRight().add([margin, -margin]));
|
||
|
||
// Sanity check: panic if the tile range contains Infinity somewhere.
|
||
if (!(isFinite(tileRange.min.x) &&
|
||
isFinite(tileRange.min.y) &&
|
||
isFinite(tileRange.max.x) &&
|
||
isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }
|
||
|
||
for (var key in this._tiles) {
|
||
var c = this._tiles[key].coords;
|
||
if (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {
|
||
this._tiles[key].current = false;
|
||
}
|
||
}
|
||
|
||
// _update just loads more tiles. If the tile zoom level differs too much
|
||
// from the map's, let _setView reset levels and prune old tiles.
|
||
if (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }
|
||
|
||
// create a queue of coordinates to load tiles from
|
||
for (var j = tileRange.min.y; j <= tileRange.max.y; j++) {
|
||
for (var i = tileRange.min.x; i <= tileRange.max.x; i++) {
|
||
var coords = new Point(i, j);
|
||
coords.z = this._tileZoom;
|
||
|
||
if (!this._isValidTile(coords)) { continue; }
|
||
|
||
var tile = this._tiles[this._tileCoordsToKey(coords)];
|
||
if (tile) {
|
||
tile.current = true;
|
||
} else {
|
||
queue.push(coords);
|
||
}
|
||
}
|
||
}
|
||
|
||
// sort tile queue to load tiles in order of their distance to center
|
||
queue.sort(function (a, b) {
|
||
return a.distanceTo(tileCenter) - b.distanceTo(tileCenter);
|
||
});
|
||
|
||
if (queue.length !== 0) {
|
||
// if it's the first batch of tiles to load
|
||
if (!this._loading) {
|
||
this._loading = true;
|
||
// @event loading: Event
|
||
// Fired when the grid layer starts loading tiles.
|
||
this.fire('loading');
|
||
}
|
||
|
||
// create DOM fragment to append tiles in one batch
|
||
var fragment = document.createDocumentFragment();
|
||
|
||
for (i = 0; i < queue.length; i++) {
|
||
this._addTile(queue[i], fragment);
|
||
}
|
||
|
||
this._level.el.appendChild(fragment);
|
||
}
|
||
},
|
||
|
||
_isValidTile: function (coords) {
|
||
var crs = this._map.options.crs;
|
||
|
||
if (!crs.infinite) {
|
||
// don't load tile if it's out of bounds and not wrapped
|
||
var bounds = this._globalTileRange;
|
||
if ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||
|
||
(!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }
|
||
}
|
||
|
||
if (!this.options.bounds) { return true; }
|
||
|
||
// don't load tile if it doesn't intersect the bounds in options
|
||
var tileBounds = this._tileCoordsToBounds(coords);
|
||
return toLatLngBounds(this.options.bounds).overlaps(tileBounds);
|
||
},
|
||
|
||
_keyToBounds: function (key) {
|
||
return this._tileCoordsToBounds(this._keyToTileCoords(key));
|
||
},
|
||
|
||
_tileCoordsToNwSe: function (coords) {
|
||
var map = this._map,
|
||
tileSize = this.getTileSize(),
|
||
nwPoint = coords.scaleBy(tileSize),
|
||
sePoint = nwPoint.add(tileSize),
|
||
nw = map.unproject(nwPoint, coords.z),
|
||
se = map.unproject(sePoint, coords.z);
|
||
return [nw, se];
|
||
},
|
||
|
||
// converts tile coordinates to its geographical bounds
|
||
_tileCoordsToBounds: function (coords) {
|
||
var bp = this._tileCoordsToNwSe(coords),
|
||
bounds = new LatLngBounds(bp[0], bp[1]);
|
||
|
||
if (!this.options.noWrap) {
|
||
bounds = this._map.wrapLatLngBounds(bounds);
|
||
}
|
||
return bounds;
|
||
},
|
||
// converts tile coordinates to key for the tile cache
|
||
_tileCoordsToKey: function (coords) {
|
||
return coords.x + ':' + coords.y + ':' + coords.z;
|
||
},
|
||
|
||
// converts tile cache key to coordinates
|
||
_keyToTileCoords: function (key) {
|
||
var k = key.split(':'),
|
||
coords = new Point(+k[0], +k[1]);
|
||
coords.z = +k[2];
|
||
return coords;
|
||
},
|
||
|
||
_removeTile: function (key) {
|
||
var tile = this._tiles[key];
|
||
if (!tile) { return; }
|
||
|
||
remove(tile.el);
|
||
|
||
delete this._tiles[key];
|
||
|
||
// @event tileunload: TileEvent
|
||
// Fired when a tile is removed (e.g. when a tile goes off the screen).
|
||
this.fire('tileunload', {
|
||
tile: tile.el,
|
||
coords: this._keyToTileCoords(key)
|
||
});
|
||
},
|
||
|
||
_initTile: function (tile) {
|
||
addClass(tile, 'leaflet-tile');
|
||
|
||
var tileSize = this.getTileSize();
|
||
tile.style.width = tileSize.x + 'px';
|
||
tile.style.height = tileSize.y + 'px';
|
||
|
||
tile.onselectstart = falseFn;
|
||
tile.onmousemove = falseFn;
|
||
|
||
// update opacity on tiles in IE7-8 because of filter inheritance problems
|
||
if (Browser.ielt9 && this.options.opacity < 1) {
|
||
setOpacity(tile, this.options.opacity);
|
||
}
|
||
},
|
||
|
||
_addTile: function (coords, container) {
|
||
var tilePos = this._getTilePos(coords),
|
||
key = this._tileCoordsToKey(coords);
|
||
|
||
var tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));
|
||
|
||
this._initTile(tile);
|
||
|
||
// if createTile is defined with a second argument ("done" callback),
|
||
// we know that tile is async and will be ready later; otherwise
|
||
if (this.createTile.length < 2) {
|
||
// mark tile as ready, but delay one frame for opacity animation to happen
|
||
requestAnimFrame(bind(this._tileReady, this, coords, null, tile));
|
||
}
|
||
|
||
setPosition(tile, tilePos);
|
||
|
||
// save tile in cache
|
||
this._tiles[key] = {
|
||
el: tile,
|
||
coords: coords,
|
||
current: true
|
||
};
|
||
|
||
container.appendChild(tile);
|
||
// @event tileloadstart: TileEvent
|
||
// Fired when a tile is requested and starts loading.
|
||
this.fire('tileloadstart', {
|
||
tile: tile,
|
||
coords: coords
|
||
});
|
||
},
|
||
|
||
_tileReady: function (coords, err, tile) {
|
||
if (err) {
|
||
// @event tileerror: TileErrorEvent
|
||
// Fired when there is an error loading a tile.
|
||
this.fire('tileerror', {
|
||
error: err,
|
||
tile: tile,
|
||
coords: coords
|
||
});
|
||
}
|
||
|
||
var key = this._tileCoordsToKey(coords);
|
||
|
||
tile = this._tiles[key];
|
||
if (!tile) { return; }
|
||
|
||
tile.loaded = +new Date();
|
||
if (this._map._fadeAnimated) {
|
||
setOpacity(tile.el, 0);
|
||
cancelAnimFrame(this._fadeFrame);
|
||
this._fadeFrame = requestAnimFrame(this._updateOpacity, this);
|
||
} else {
|
||
tile.active = true;
|
||
this._pruneTiles();
|
||
}
|
||
|
||
if (!err) {
|
||
addClass(tile.el, 'leaflet-tile-loaded');
|
||
|
||
// @event tileload: TileEvent
|
||
// Fired when a tile loads.
|
||
this.fire('tileload', {
|
||
tile: tile.el,
|
||
coords: coords
|
||
});
|
||
}
|
||
|
||
if (this._noTilesToLoad()) {
|
||
this._loading = false;
|
||
// @event load: Event
|
||
// Fired when the grid layer loaded all visible tiles.
|
||
this.fire('load');
|
||
|
||
if (Browser.ielt9 || !this._map._fadeAnimated) {
|
||
requestAnimFrame(this._pruneTiles, this);
|
||
} else {
|
||
// Wait a bit more than 0.2 secs (the duration of the tile fade-in)
|
||
// to trigger a pruning.
|
||
setTimeout(bind(this._pruneTiles, this), 250);
|
||
}
|
||
}
|
||
},
|
||
|
||
_getTilePos: function (coords) {
|
||
return coords.scaleBy(this.getTileSize()).subtract(this._level.origin);
|
||
},
|
||
|
||
_wrapCoords: function (coords) {
|
||
var newCoords = new Point(
|
||
this._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x,
|
||
this._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y);
|
||
newCoords.z = coords.z;
|
||
return newCoords;
|
||
},
|
||
|
||
_pxBoundsToTileRange: function (bounds) {
|
||
var tileSize = this.getTileSize();
|
||
return new Bounds(
|
||
bounds.min.unscaleBy(tileSize).floor(),
|
||
bounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));
|
||
},
|
||
|
||
_noTilesToLoad: function () {
|
||
for (var key in this._tiles) {
|
||
if (!this._tiles[key].loaded) { return false; }
|
||
}
|
||
return true;
|
||
}
|
||
});
|
||
|
||
// @factory L.gridLayer(options?: GridLayer options)
|
||
// Creates a new instance of GridLayer with the supplied options.
|
||
function gridLayer(options) {
|
||
return new GridLayer(options);
|
||
}
|
||
|
||
/*
|
||
* @class TileLayer
|
||
* @inherits GridLayer
|
||
* @aka L.TileLayer
|
||
* Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(map);
|
||
* ```
|
||
*
|
||
* @section URL template
|
||
* @example
|
||
*
|
||
* A string of the following form:
|
||
*
|
||
* ```
|
||
* 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'
|
||
* ```
|
||
*
|
||
* `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add "@2x" to the URL to load retina tiles.
|
||
*
|
||
* You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:
|
||
*
|
||
* ```
|
||
* L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});
|
||
* ```
|
||
*/
|
||
|
||
|
||
var TileLayer = GridLayer.extend({
|
||
|
||
// @section
|
||
// @aka TileLayer options
|
||
options: {
|
||
// @option minZoom: Number = 0
|
||
// The minimum zoom level down to which this layer will be displayed (inclusive).
|
||
minZoom: 0,
|
||
|
||
// @option maxZoom: Number = 18
|
||
// The maximum zoom level up to which this layer will be displayed (inclusive).
|
||
maxZoom: 18,
|
||
|
||
// @option subdomains: String|String[] = 'abc'
|
||
// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.
|
||
subdomains: 'abc',
|
||
|
||
// @option errorTileUrl: String = ''
|
||
// URL to the tile image to show in place of the tile that failed to load.
|
||
errorTileUrl: '',
|
||
|
||
// @option zoomOffset: Number = 0
|
||
// The zoom number used in tile URLs will be offset with this value.
|
||
zoomOffset: 0,
|
||
|
||
// @option tms: Boolean = false
|
||
// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).
|
||
tms: false,
|
||
|
||
// @option zoomReverse: Boolean = false
|
||
// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)
|
||
zoomReverse: false,
|
||
|
||
// @option detectRetina: Boolean = false
|
||
// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.
|
||
detectRetina: false,
|
||
|
||
// @option crossOrigin: Boolean|String = false
|
||
// Whether the crossOrigin attribute will be added to the tiles.
|
||
// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
|
||
// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
|
||
crossOrigin: false,
|
||
|
||
// @option referrerPolicy: Boolean|String = false
|
||
// Whether the referrerPolicy attribute will be added to the tiles.
|
||
// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.
|
||
// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer
|
||
// (e.g. to validate an API token).
|
||
// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.
|
||
referrerPolicy: false
|
||
},
|
||
|
||
initialize: function (url, options) {
|
||
|
||
this._url = url;
|
||
|
||
options = setOptions(this, options);
|
||
|
||
// detecting retina displays, adjusting tileSize and zoom levels
|
||
if (options.detectRetina && Browser.retina && options.maxZoom > 0) {
|
||
|
||
options.tileSize = Math.floor(options.tileSize / 2);
|
||
|
||
if (!options.zoomReverse) {
|
||
options.zoomOffset++;
|
||
options.maxZoom = Math.max(options.minZoom, options.maxZoom - 1);
|
||
} else {
|
||
options.zoomOffset--;
|
||
options.minZoom = Math.min(options.maxZoom, options.minZoom + 1);
|
||
}
|
||
|
||
options.minZoom = Math.max(0, options.minZoom);
|
||
} else if (!options.zoomReverse) {
|
||
// make sure maxZoom is gte minZoom
|
||
options.maxZoom = Math.max(options.minZoom, options.maxZoom);
|
||
} else {
|
||
// make sure minZoom is lte maxZoom
|
||
options.minZoom = Math.min(options.maxZoom, options.minZoom);
|
||
}
|
||
|
||
if (typeof options.subdomains === 'string') {
|
||
options.subdomains = options.subdomains.split('');
|
||
}
|
||
|
||
this.on('tileunload', this._onTileRemove);
|
||
},
|
||
|
||
// @method setUrl(url: String, noRedraw?: Boolean): this
|
||
// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).
|
||
// If the URL does not change, the layer will not be redrawn unless
|
||
// the noRedraw parameter is set to false.
|
||
setUrl: function (url, noRedraw) {
|
||
if (this._url === url && noRedraw === undefined) {
|
||
noRedraw = true;
|
||
}
|
||
|
||
this._url = url;
|
||
|
||
if (!noRedraw) {
|
||
this.redraw();
|
||
}
|
||
return this;
|
||
},
|
||
|
||
// @method createTile(coords: Object, done?: Function): HTMLElement
|
||
// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)
|
||
// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`
|
||
// callback is called when the tile has been loaded.
|
||
createTile: function (coords, done) {
|
||
var tile = document.createElement('img');
|
||
|
||
on(tile, 'load', bind(this._tileOnLoad, this, done, tile));
|
||
on(tile, 'error', bind(this._tileOnError, this, done, tile));
|
||
|
||
if (this.options.crossOrigin || this.options.crossOrigin === '') {
|
||
tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
|
||
}
|
||
|
||
// for this new option we follow the documented behavior
|
||
// more closely by only setting the property when string
|
||
if (typeof this.options.referrerPolicy === 'string') {
|
||
tile.referrerPolicy = this.options.referrerPolicy;
|
||
}
|
||
|
||
// The alt attribute is set to the empty string,
|
||
// allowing screen readers to ignore the decorative image tiles.
|
||
// https://www.w3.org/WAI/tutorials/images/decorative/
|
||
// https://www.w3.org/TR/html-aria/#el-img-empty-alt
|
||
tile.alt = '';
|
||
|
||
tile.src = this.getTileUrl(coords);
|
||
|
||
return tile;
|
||
},
|
||
|
||
// @section Extension methods
|
||
// @uninheritable
|
||
// Layers extending `TileLayer` might reimplement the following method.
|
||
// @method getTileUrl(coords: Object): String
|
||
// Called only internally, returns the URL for a tile given its coordinates.
|
||
// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.
|
||
getTileUrl: function (coords) {
|
||
var data = {
|
||
r: Browser.retina ? '@2x' : '',
|
||
s: this._getSubdomain(coords),
|
||
x: coords.x,
|
||
y: coords.y,
|
||
z: this._getZoomForUrl()
|
||
};
|
||
if (this._map && !this._map.options.crs.infinite) {
|
||
var invertedY = this._globalTileRange.max.y - coords.y;
|
||
if (this.options.tms) {
|
||
data['y'] = invertedY;
|
||
}
|
||
data['-y'] = invertedY;
|
||
}
|
||
|
||
return template(this._url, extend(data, this.options));
|
||
},
|
||
|
||
_tileOnLoad: function (done, tile) {
|
||
// For https://github.com/Leaflet/Leaflet/issues/3332
|
||
if (Browser.ielt9) {
|
||
setTimeout(bind(done, this, null, tile), 0);
|
||
} else {
|
||
done(null, tile);
|
||
}
|
||
},
|
||
|
||
_tileOnError: function (done, tile, e) {
|
||
var errorUrl = this.options.errorTileUrl;
|
||
if (errorUrl && tile.getAttribute('src') !== errorUrl) {
|
||
tile.src = errorUrl;
|
||
}
|
||
done(e, tile);
|
||
},
|
||
|
||
_onTileRemove: function (e) {
|
||
e.tile.onload = null;
|
||
},
|
||
|
||
_getZoomForUrl: function () {
|
||
var zoom = this._tileZoom,
|
||
maxZoom = this.options.maxZoom,
|
||
zoomReverse = this.options.zoomReverse,
|
||
zoomOffset = this.options.zoomOffset;
|
||
|
||
if (zoomReverse) {
|
||
zoom = maxZoom - zoom;
|
||
}
|
||
|
||
return zoom + zoomOffset;
|
||
},
|
||
|
||
_getSubdomain: function (tilePoint) {
|
||
var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
|
||
return this.options.subdomains[index];
|
||
},
|
||
|
||
// stops loading all tiles in the background layer
|
||
_abortLoading: function () {
|
||
var i, tile;
|
||
for (i in this._tiles) {
|
||
if (this._tiles[i].coords.z !== this._tileZoom) {
|
||
tile = this._tiles[i].el;
|
||
|
||
tile.onload = falseFn;
|
||
tile.onerror = falseFn;
|
||
|
||
if (!tile.complete) {
|
||
tile.src = emptyImageUrl;
|
||
var coords = this._tiles[i].coords;
|
||
remove(tile);
|
||
delete this._tiles[i];
|
||
// @event tileabort: TileEvent
|
||
// Fired when a tile was loading but is now not wanted.
|
||
this.fire('tileabort', {
|
||
tile: tile,
|
||
coords: coords
|
||
});
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
_removeTile: function (key) {
|
||
var tile = this._tiles[key];
|
||
if (!tile) { return; }
|
||
|
||
// Cancels any pending http requests associated with the tile
|
||
tile.el.setAttribute('src', emptyImageUrl);
|
||
|
||
return GridLayer.prototype._removeTile.call(this, key);
|
||
},
|
||
|
||
_tileReady: function (coords, err, tile) {
|
||
if (!this._map || (tile && tile.getAttribute('src') === emptyImageUrl)) {
|
||
return;
|
||
}
|
||
|
||
return GridLayer.prototype._tileReady.call(this, coords, err, tile);
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)
|
||
// Instantiates a tile layer object given a `URL template` and optionally an options object.
|
||
|
||
function tileLayer(url, options) {
|
||
return new TileLayer(url, options);
|
||
}
|
||
|
||
/*
|
||
* @class TileLayer.WMS
|
||
* @inherits TileLayer
|
||
* @aka L.TileLayer.WMS
|
||
* Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
|
||
* layers: 'nexrad-n0r-900913',
|
||
* format: 'image/png',
|
||
* transparent: true,
|
||
* attribution: "Weather data © 2012 IEM Nexrad"
|
||
* });
|
||
* ```
|
||
*/
|
||
|
||
var TileLayerWMS = TileLayer.extend({
|
||
|
||
// @section
|
||
// @aka TileLayer.WMS options
|
||
// If any custom options not documented here are used, they will be sent to the
|
||
// WMS server as extra parameters in each request URL. This can be useful for
|
||
// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).
|
||
defaultWmsParams: {
|
||
service: 'WMS',
|
||
request: 'GetMap',
|
||
|
||
// @option layers: String = ''
|
||
// **(required)** Comma-separated list of WMS layers to show.
|
||
layers: '',
|
||
|
||
// @option styles: String = ''
|
||
// Comma-separated list of WMS styles.
|
||
styles: '',
|
||
|
||
// @option format: String = 'image/jpeg'
|
||
// WMS image format (use `'image/png'` for layers with transparency).
|
||
format: 'image/jpeg',
|
||
|
||
// @option transparent: Boolean = false
|
||
// If `true`, the WMS service will return images with transparency.
|
||
transparent: false,
|
||
|
||
// @option version: String = '1.1.1'
|
||
// Version of the WMS service to use
|
||
version: '1.1.1'
|
||
},
|
||
|
||
options: {
|
||
// @option crs: CRS = null
|
||
// Coordinate Reference System to use for the WMS requests, defaults to
|
||
// map CRS. Don't change this if you're not sure what it means.
|
||
crs: null,
|
||
|
||
// @option uppercase: Boolean = false
|
||
// If `true`, WMS request parameter keys will be uppercase.
|
||
uppercase: false
|
||
},
|
||
|
||
initialize: function (url, options) {
|
||
|
||
this._url = url;
|
||
|
||
var wmsParams = extend({}, this.defaultWmsParams);
|
||
|
||
// all keys that are not TileLayer options go to WMS params
|
||
for (var i in options) {
|
||
if (!(i in this.options)) {
|
||
wmsParams[i] = options[i];
|
||
}
|
||
}
|
||
|
||
options = setOptions(this, options);
|
||
|
||
var realRetina = options.detectRetina && Browser.retina ? 2 : 1;
|
||
var tileSize = this.getTileSize();
|
||
wmsParams.width = tileSize.x * realRetina;
|
||
wmsParams.height = tileSize.y * realRetina;
|
||
|
||
this.wmsParams = wmsParams;
|
||
},
|
||
|
||
onAdd: function (map) {
|
||
|
||
this._crs = this.options.crs || map.options.crs;
|
||
this._wmsVersion = parseFloat(this.wmsParams.version);
|
||
|
||
var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
|
||
this.wmsParams[projectionKey] = this._crs.code;
|
||
|
||
TileLayer.prototype.onAdd.call(this, map);
|
||
},
|
||
|
||
getTileUrl: function (coords) {
|
||
|
||
var tileBounds = this._tileCoordsToNwSe(coords),
|
||
crs = this._crs,
|
||
bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),
|
||
min = bounds.min,
|
||
max = bounds.max,
|
||
bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?
|
||
[min.y, min.x, max.y, max.x] :
|
||
[min.x, min.y, max.x, max.y]).join(','),
|
||
url = TileLayer.prototype.getTileUrl.call(this, coords);
|
||
return url +
|
||
getParamString(this.wmsParams, url, this.options.uppercase) +
|
||
(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;
|
||
},
|
||
|
||
// @method setParams(params: Object, noRedraw?: Boolean): this
|
||
// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).
|
||
setParams: function (params, noRedraw) {
|
||
|
||
extend(this.wmsParams, params);
|
||
|
||
if (!noRedraw) {
|
||
this.redraw();
|
||
}
|
||
|
||
return this;
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)
|
||
// Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.
|
||
function tileLayerWMS(url, options) {
|
||
return new TileLayerWMS(url, options);
|
||
}
|
||
|
||
TileLayer.WMS = TileLayerWMS;
|
||
tileLayer.wms = tileLayerWMS;
|
||
|
||
/*
|
||
* @class Renderer
|
||
* @inherits Layer
|
||
* @aka L.Renderer
|
||
*
|
||
* Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the
|
||
* DOM container of the renderer, its bounds, and its zoom animation.
|
||
*
|
||
* A `Renderer` works as an implicit layer group for all `Path`s - the renderer
|
||
* itself can be added or removed to the map. All paths use a renderer, which can
|
||
* be implicit (the map will decide the type of renderer and use it automatically)
|
||
* or explicit (using the [`renderer`](#path-renderer) option of the path).
|
||
*
|
||
* Do not use this class directly, use `SVG` and `Canvas` instead.
|
||
*
|
||
* @event update: Event
|
||
* Fired when the renderer updates its bounds, center and zoom, for example when
|
||
* its map has moved
|
||
*/
|
||
|
||
var Renderer = Layer.extend({
|
||
|
||
// @section
|
||
// @aka Renderer options
|
||
options: {
|
||
// @option padding: Number = 0.1
|
||
// How much to extend the clip area around the map view (relative to its size)
|
||
// e.g. 0.1 would be 10% of map view in each direction
|
||
padding: 0.1
|
||
},
|
||
|
||
initialize: function (options) {
|
||
setOptions(this, options);
|
||
stamp(this);
|
||
this._layers = this._layers || {};
|
||
},
|
||
|
||
onAdd: function () {
|
||
if (!this._container) {
|
||
this._initContainer(); // defined by renderer implementations
|
||
|
||
if (this._zoomAnimated) {
|
||
addClass(this._container, 'leaflet-zoom-animated');
|
||
}
|
||
}
|
||
|
||
this.getPane().appendChild(this._container);
|
||
this._update();
|
||
this.on('update', this._updatePaths, this);
|
||
},
|
||
|
||
onRemove: function () {
|
||
this.off('update', this._updatePaths, this);
|
||
this._destroyContainer();
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = {
|
||
viewreset: this._reset,
|
||
zoom: this._onZoom,
|
||
moveend: this._update,
|
||
zoomend: this._onZoomEnd
|
||
};
|
||
if (this._zoomAnimated) {
|
||
events.zoomanim = this._onAnimZoom;
|
||
}
|
||
return events;
|
||
},
|
||
|
||
_onAnimZoom: function (ev) {
|
||
this._updateTransform(ev.center, ev.zoom);
|
||
},
|
||
|
||
_onZoom: function () {
|
||
this._updateTransform(this._map.getCenter(), this._map.getZoom());
|
||
},
|
||
|
||
_updateTransform: function (center, zoom) {
|
||
var scale = this._map.getZoomScale(zoom, this._zoom),
|
||
viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),
|
||
currentCenterPoint = this._map.project(this._center, zoom),
|
||
|
||
topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)
|
||
.subtract(this._map._getNewPixelOrigin(center, zoom));
|
||
|
||
if (Browser.any3d) {
|
||
setTransform(this._container, topLeftOffset, scale);
|
||
} else {
|
||
setPosition(this._container, topLeftOffset);
|
||
}
|
||
},
|
||
|
||
_reset: function () {
|
||
this._update();
|
||
this._updateTransform(this._center, this._zoom);
|
||
|
||
for (var id in this._layers) {
|
||
this._layers[id]._reset();
|
||
}
|
||
},
|
||
|
||
_onZoomEnd: function () {
|
||
for (var id in this._layers) {
|
||
this._layers[id]._project();
|
||
}
|
||
},
|
||
|
||
_updatePaths: function () {
|
||
for (var id in this._layers) {
|
||
this._layers[id]._update();
|
||
}
|
||
},
|
||
|
||
_update: function () {
|
||
// Update pixel bounds of renderer container (for positioning/sizing/clipping later)
|
||
// Subclasses are responsible of firing the 'update' event.
|
||
var p = this.options.padding,
|
||
size = this._map.getSize(),
|
||
min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();
|
||
|
||
this._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());
|
||
|
||
this._center = this._map.getCenter();
|
||
this._zoom = this._map.getZoom();
|
||
}
|
||
});
|
||
|
||
/*
|
||
* @class Canvas
|
||
* @inherits Renderer
|
||
* @aka L.Canvas
|
||
*
|
||
* Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
|
||
* Inherits `Renderer`.
|
||
*
|
||
* Due to [technical limitations](https://caniuse.com/canvas), Canvas is not
|
||
* available in all web browsers, notably IE8, and overlapping geometries might
|
||
* not display properly in some edge cases.
|
||
*
|
||
* @example
|
||
*
|
||
* Use Canvas by default for all paths in the map:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map', {
|
||
* renderer: L.canvas()
|
||
* });
|
||
* ```
|
||
*
|
||
* Use a Canvas renderer with extra padding for specific vector geometries:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map');
|
||
* var myRenderer = L.canvas({ padding: 0.5 });
|
||
* var line = L.polyline( coordinates, { renderer: myRenderer } );
|
||
* var circle = L.circle( center, { renderer: myRenderer } );
|
||
* ```
|
||
*/
|
||
|
||
var Canvas = Renderer.extend({
|
||
|
||
// @section
|
||
// @aka Canvas options
|
||
options: {
|
||
// @option tolerance: Number = 0
|
||
// How much to extend the click tolerance around a path/object on the map.
|
||
tolerance: 0
|
||
},
|
||
|
||
getEvents: function () {
|
||
var events = Renderer.prototype.getEvents.call(this);
|
||
events.viewprereset = this._onViewPreReset;
|
||
return events;
|
||
},
|
||
|
||
_onViewPreReset: function () {
|
||
// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once
|
||
this._postponeUpdatePaths = true;
|
||
},
|
||
|
||
onAdd: function () {
|
||
Renderer.prototype.onAdd.call(this);
|
||
|
||
// Redraw vectors since canvas is cleared upon removal,
|
||
// in case of removing the renderer itself from the map.
|
||
this._draw();
|
||
},
|
||
|
||
_initContainer: function () {
|
||
var container = this._container = document.createElement('canvas');
|
||
|
||
on(container, 'mousemove', this._onMouseMove, this);
|
||
on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);
|
||
on(container, 'mouseout', this._handleMouseOut, this);
|
||
container['_leaflet_disable_events'] = true;
|
||
|
||
this._ctx = container.getContext('2d');
|
||
},
|
||
|
||
_destroyContainer: function () {
|
||
cancelAnimFrame(this._redrawRequest);
|
||
delete this._ctx;
|
||
remove(this._container);
|
||
off(this._container);
|
||
delete this._container;
|
||
},
|
||
|
||
_updatePaths: function () {
|
||
if (this._postponeUpdatePaths) { return; }
|
||
|
||
var layer;
|
||
this._redrawBounds = null;
|
||
for (var id in this._layers) {
|
||
layer = this._layers[id];
|
||
layer._update();
|
||
}
|
||
this._redraw();
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map._animatingZoom && this._bounds) { return; }
|
||
|
||
Renderer.prototype._update.call(this);
|
||
|
||
var b = this._bounds,
|
||
container = this._container,
|
||
size = b.getSize(),
|
||
m = Browser.retina ? 2 : 1;
|
||
|
||
setPosition(container, b.min);
|
||
|
||
// set canvas size (also clearing it); use double size on retina
|
||
container.width = m * size.x;
|
||
container.height = m * size.y;
|
||
container.style.width = size.x + 'px';
|
||
container.style.height = size.y + 'px';
|
||
|
||
if (Browser.retina) {
|
||
this._ctx.scale(2, 2);
|
||
}
|
||
|
||
// translate so we use the same path coordinates after canvas element moves
|
||
this._ctx.translate(-b.min.x, -b.min.y);
|
||
|
||
// Tell paths to redraw themselves
|
||
this.fire('update');
|
||
},
|
||
|
||
_reset: function () {
|
||
Renderer.prototype._reset.call(this);
|
||
|
||
if (this._postponeUpdatePaths) {
|
||
this._postponeUpdatePaths = false;
|
||
this._updatePaths();
|
||
}
|
||
},
|
||
|
||
_initPath: function (layer) {
|
||
this._updateDashArray(layer);
|
||
this._layers[stamp(layer)] = layer;
|
||
|
||
var order = layer._order = {
|
||
layer: layer,
|
||
prev: this._drawLast,
|
||
next: null
|
||
};
|
||
if (this._drawLast) { this._drawLast.next = order; }
|
||
this._drawLast = order;
|
||
this._drawFirst = this._drawFirst || this._drawLast;
|
||
},
|
||
|
||
_addPath: function (layer) {
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_removePath: function (layer) {
|
||
var order = layer._order;
|
||
var next = order.next;
|
||
var prev = order.prev;
|
||
|
||
if (next) {
|
||
next.prev = prev;
|
||
} else {
|
||
this._drawLast = prev;
|
||
}
|
||
if (prev) {
|
||
prev.next = next;
|
||
} else {
|
||
this._drawFirst = next;
|
||
}
|
||
|
||
delete layer._order;
|
||
|
||
delete this._layers[stamp(layer)];
|
||
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_updatePath: function (layer) {
|
||
// Redraw the union of the layer's old pixel
|
||
// bounds and the new pixel bounds.
|
||
this._extendRedrawBounds(layer);
|
||
layer._project();
|
||
layer._update();
|
||
// The redraw will extend the redraw bounds
|
||
// with the new pixel bounds.
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_updateStyle: function (layer) {
|
||
this._updateDashArray(layer);
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_updateDashArray: function (layer) {
|
||
if (typeof layer.options.dashArray === 'string') {
|
||
var parts = layer.options.dashArray.split(/[, ]+/),
|
||
dashArray = [],
|
||
dashValue,
|
||
i;
|
||
for (i = 0; i < parts.length; i++) {
|
||
dashValue = Number(parts[i]);
|
||
// Ignore dash array containing invalid lengths
|
||
if (isNaN(dashValue)) { return; }
|
||
dashArray.push(dashValue);
|
||
}
|
||
layer.options._dashArray = dashArray;
|
||
} else {
|
||
layer.options._dashArray = layer.options.dashArray;
|
||
}
|
||
},
|
||
|
||
_requestRedraw: function (layer) {
|
||
if (!this._map) { return; }
|
||
|
||
this._extendRedrawBounds(layer);
|
||
this._redrawRequest = this._redrawRequest || requestAnimFrame(this._redraw, this);
|
||
},
|
||
|
||
_extendRedrawBounds: function (layer) {
|
||
if (layer._pxBounds) {
|
||
var padding = (layer.options.weight || 0) + 1;
|
||
this._redrawBounds = this._redrawBounds || new Bounds();
|
||
this._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));
|
||
this._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));
|
||
}
|
||
},
|
||
|
||
_redraw: function () {
|
||
this._redrawRequest = null;
|
||
|
||
if (this._redrawBounds) {
|
||
this._redrawBounds.min._floor();
|
||
this._redrawBounds.max._ceil();
|
||
}
|
||
|
||
this._clear(); // clear layers in redraw bounds
|
||
this._draw(); // draw layers
|
||
|
||
this._redrawBounds = null;
|
||
},
|
||
|
||
_clear: function () {
|
||
var bounds = this._redrawBounds;
|
||
if (bounds) {
|
||
var size = bounds.getSize();
|
||
this._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);
|
||
} else {
|
||
this._ctx.save();
|
||
this._ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||
this._ctx.clearRect(0, 0, this._container.width, this._container.height);
|
||
this._ctx.restore();
|
||
}
|
||
},
|
||
|
||
_draw: function () {
|
||
var layer, bounds = this._redrawBounds;
|
||
this._ctx.save();
|
||
if (bounds) {
|
||
var size = bounds.getSize();
|
||
this._ctx.beginPath();
|
||
this._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);
|
||
this._ctx.clip();
|
||
}
|
||
|
||
this._drawing = true;
|
||
|
||
for (var order = this._drawFirst; order; order = order.next) {
|
||
layer = order.layer;
|
||
if (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {
|
||
layer._updatePath();
|
||
}
|
||
}
|
||
|
||
this._drawing = false;
|
||
|
||
this._ctx.restore(); // Restore state before clipping.
|
||
},
|
||
|
||
_updatePoly: function (layer, closed) {
|
||
if (!this._drawing) { return; }
|
||
|
||
var i, j, len2, p,
|
||
parts = layer._parts,
|
||
len = parts.length,
|
||
ctx = this._ctx;
|
||
|
||
if (!len) { return; }
|
||
|
||
ctx.beginPath();
|
||
|
||
for (i = 0; i < len; i++) {
|
||
for (j = 0, len2 = parts[i].length; j < len2; j++) {
|
||
p = parts[i][j];
|
||
ctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);
|
||
}
|
||
if (closed) {
|
||
ctx.closePath();
|
||
}
|
||
}
|
||
|
||
this._fillStroke(ctx, layer);
|
||
|
||
// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
|
||
},
|
||
|
||
_updateCircle: function (layer) {
|
||
|
||
if (!this._drawing || layer._empty()) { return; }
|
||
|
||
var p = layer._point,
|
||
ctx = this._ctx,
|
||
r = Math.max(Math.round(layer._radius), 1),
|
||
s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;
|
||
|
||
if (s !== 1) {
|
||
ctx.save();
|
||
ctx.scale(1, s);
|
||
}
|
||
|
||
ctx.beginPath();
|
||
ctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);
|
||
|
||
if (s !== 1) {
|
||
ctx.restore();
|
||
}
|
||
|
||
this._fillStroke(ctx, layer);
|
||
},
|
||
|
||
_fillStroke: function (ctx, layer) {
|
||
var options = layer.options;
|
||
|
||
if (options.fill) {
|
||
ctx.globalAlpha = options.fillOpacity;
|
||
ctx.fillStyle = options.fillColor || options.color;
|
||
ctx.fill(options.fillRule || 'evenodd');
|
||
}
|
||
|
||
if (options.stroke && options.weight !== 0) {
|
||
if (ctx.setLineDash) {
|
||
ctx.setLineDash(layer.options && layer.options._dashArray || []);
|
||
}
|
||
ctx.globalAlpha = options.opacity;
|
||
ctx.lineWidth = options.weight;
|
||
ctx.strokeStyle = options.color;
|
||
ctx.lineCap = options.lineCap;
|
||
ctx.lineJoin = options.lineJoin;
|
||
ctx.stroke();
|
||
}
|
||
},
|
||
|
||
// Canvas obviously doesn't have mouse events for individual drawn objects,
|
||
// so we emulate that by calculating what's under the mouse on mousemove/click manually
|
||
|
||
_onClick: function (e) {
|
||
var point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;
|
||
|
||
for (var order = this._drawFirst; order; order = order.next) {
|
||
layer = order.layer;
|
||
if (layer.options.interactive && layer._containsPoint(point)) {
|
||
if (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {
|
||
clickedLayer = layer;
|
||
}
|
||
}
|
||
}
|
||
this._fireEvent(clickedLayer ? [clickedLayer] : false, e);
|
||
},
|
||
|
||
_onMouseMove: function (e) {
|
||
if (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }
|
||
|
||
var point = this._map.mouseEventToLayerPoint(e);
|
||
this._handleMouseHover(e, point);
|
||
},
|
||
|
||
|
||
_handleMouseOut: function (e) {
|
||
var layer = this._hoveredLayer;
|
||
if (layer) {
|
||
// if we're leaving the layer, fire mouseout
|
||
removeClass(this._container, 'leaflet-interactive');
|
||
this._fireEvent([layer], e, 'mouseout');
|
||
this._hoveredLayer = null;
|
||
this._mouseHoverThrottled = false;
|
||
}
|
||
},
|
||
|
||
_handleMouseHover: function (e, point) {
|
||
if (this._mouseHoverThrottled) {
|
||
return;
|
||
}
|
||
|
||
var layer, candidateHoveredLayer;
|
||
|
||
for (var order = this._drawFirst; order; order = order.next) {
|
||
layer = order.layer;
|
||
if (layer.options.interactive && layer._containsPoint(point)) {
|
||
candidateHoveredLayer = layer;
|
||
}
|
||
}
|
||
|
||
if (candidateHoveredLayer !== this._hoveredLayer) {
|
||
this._handleMouseOut(e);
|
||
|
||
if (candidateHoveredLayer) {
|
||
addClass(this._container, 'leaflet-interactive'); // change cursor
|
||
this._fireEvent([candidateHoveredLayer], e, 'mouseover');
|
||
this._hoveredLayer = candidateHoveredLayer;
|
||
}
|
||
}
|
||
|
||
this._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);
|
||
|
||
this._mouseHoverThrottled = true;
|
||
setTimeout(bind(function () {
|
||
this._mouseHoverThrottled = false;
|
||
}, this), 32);
|
||
},
|
||
|
||
_fireEvent: function (layers, e, type) {
|
||
this._map._fireDOMEvent(e, type || e.type, layers);
|
||
},
|
||
|
||
_bringToFront: function (layer) {
|
||
var order = layer._order;
|
||
|
||
if (!order) { return; }
|
||
|
||
var next = order.next;
|
||
var prev = order.prev;
|
||
|
||
if (next) {
|
||
next.prev = prev;
|
||
} else {
|
||
// Already last
|
||
return;
|
||
}
|
||
if (prev) {
|
||
prev.next = next;
|
||
} else if (next) {
|
||
// Update first entry unless this is the
|
||
// single entry
|
||
this._drawFirst = next;
|
||
}
|
||
|
||
order.prev = this._drawLast;
|
||
this._drawLast.next = order;
|
||
|
||
order.next = null;
|
||
this._drawLast = order;
|
||
|
||
this._requestRedraw(layer);
|
||
},
|
||
|
||
_bringToBack: function (layer) {
|
||
var order = layer._order;
|
||
|
||
if (!order) { return; }
|
||
|
||
var next = order.next;
|
||
var prev = order.prev;
|
||
|
||
if (prev) {
|
||
prev.next = next;
|
||
} else {
|
||
// Already first
|
||
return;
|
||
}
|
||
if (next) {
|
||
next.prev = prev;
|
||
} else if (prev) {
|
||
// Update last entry unless this is the
|
||
// single entry
|
||
this._drawLast = prev;
|
||
}
|
||
|
||
order.prev = null;
|
||
|
||
order.next = this._drawFirst;
|
||
this._drawFirst.prev = order;
|
||
this._drawFirst = order;
|
||
|
||
this._requestRedraw(layer);
|
||
}
|
||
});
|
||
|
||
// @factory L.canvas(options?: Renderer options)
|
||
// Creates a Canvas renderer with the given options.
|
||
function canvas(options) {
|
||
return Browser.canvas ? new Canvas(options) : null;
|
||
}
|
||
|
||
/*
|
||
* Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
|
||
*/
|
||
|
||
|
||
var vmlCreate = (function () {
|
||
try {
|
||
document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
|
||
return function (name) {
|
||
return document.createElement('<lvml:' + name + ' class="lvml">');
|
||
};
|
||
} catch (e) {
|
||
// Do not return fn from catch block so `e` can be garbage collected
|
||
// See https://github.com/Leaflet/Leaflet/pull/7279
|
||
}
|
||
return function (name) {
|
||
return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
|
||
};
|
||
})();
|
||
|
||
|
||
/*
|
||
* @class SVG
|
||
*
|
||
*
|
||
* VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility
|
||
* with old versions of Internet Explorer.
|
||
*/
|
||
|
||
// mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences
|
||
var vmlMixin = {
|
||
|
||
_initContainer: function () {
|
||
this._container = create$1('div', 'leaflet-vml-container');
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map._animatingZoom) { return; }
|
||
Renderer.prototype._update.call(this);
|
||
this.fire('update');
|
||
},
|
||
|
||
_initPath: function (layer) {
|
||
var container = layer._container = vmlCreate('shape');
|
||
|
||
addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));
|
||
|
||
container.coordsize = '1 1';
|
||
|
||
layer._path = vmlCreate('path');
|
||
container.appendChild(layer._path);
|
||
|
||
this._updateStyle(layer);
|
||
this._layers[stamp(layer)] = layer;
|
||
},
|
||
|
||
_addPath: function (layer) {
|
||
var container = layer._container;
|
||
this._container.appendChild(container);
|
||
|
||
if (layer.options.interactive) {
|
||
layer.addInteractiveTarget(container);
|
||
}
|
||
},
|
||
|
||
_removePath: function (layer) {
|
||
var container = layer._container;
|
||
remove(container);
|
||
layer.removeInteractiveTarget(container);
|
||
delete this._layers[stamp(layer)];
|
||
},
|
||
|
||
_updateStyle: function (layer) {
|
||
var stroke = layer._stroke,
|
||
fill = layer._fill,
|
||
options = layer.options,
|
||
container = layer._container;
|
||
|
||
container.stroked = !!options.stroke;
|
||
container.filled = !!options.fill;
|
||
|
||
if (options.stroke) {
|
||
if (!stroke) {
|
||
stroke = layer._stroke = vmlCreate('stroke');
|
||
}
|
||
container.appendChild(stroke);
|
||
stroke.weight = options.weight + 'px';
|
||
stroke.color = options.color;
|
||
stroke.opacity = options.opacity;
|
||
|
||
if (options.dashArray) {
|
||
stroke.dashStyle = isArray(options.dashArray) ?
|
||
options.dashArray.join(' ') :
|
||
options.dashArray.replace(/( *, *)/g, ' ');
|
||
} else {
|
||
stroke.dashStyle = '';
|
||
}
|
||
stroke.endcap = options.lineCap.replace('butt', 'flat');
|
||
stroke.joinstyle = options.lineJoin;
|
||
|
||
} else if (stroke) {
|
||
container.removeChild(stroke);
|
||
layer._stroke = null;
|
||
}
|
||
|
||
if (options.fill) {
|
||
if (!fill) {
|
||
fill = layer._fill = vmlCreate('fill');
|
||
}
|
||
container.appendChild(fill);
|
||
fill.color = options.fillColor || options.color;
|
||
fill.opacity = options.fillOpacity;
|
||
|
||
} else if (fill) {
|
||
container.removeChild(fill);
|
||
layer._fill = null;
|
||
}
|
||
},
|
||
|
||
_updateCircle: function (layer) {
|
||
var p = layer._point.round(),
|
||
r = Math.round(layer._radius),
|
||
r2 = Math.round(layer._radiusY || r);
|
||
|
||
this._setPath(layer, layer._empty() ? 'M0 0' :
|
||
'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));
|
||
},
|
||
|
||
_setPath: function (layer, path) {
|
||
layer._path.v = path;
|
||
},
|
||
|
||
_bringToFront: function (layer) {
|
||
toFront(layer._container);
|
||
},
|
||
|
||
_bringToBack: function (layer) {
|
||
toBack(layer._container);
|
||
}
|
||
};
|
||
|
||
var create = Browser.vml ? vmlCreate : svgCreate;
|
||
|
||
/*
|
||
* @class SVG
|
||
* @inherits Renderer
|
||
* @aka L.SVG
|
||
*
|
||
* Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).
|
||
* Inherits `Renderer`.
|
||
*
|
||
* Due to [technical limitations](https://caniuse.com/svg), SVG is not
|
||
* available in all web browsers, notably Android 2.x and 3.x.
|
||
*
|
||
* Although SVG is not available on IE7 and IE8, these browsers support
|
||
* [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)
|
||
* (a now deprecated technology), and the SVG renderer will fall back to VML in
|
||
* this case.
|
||
*
|
||
* @example
|
||
*
|
||
* Use SVG by default for all paths in the map:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map', {
|
||
* renderer: L.svg()
|
||
* });
|
||
* ```
|
||
*
|
||
* Use a SVG renderer with extra padding for specific vector geometries:
|
||
*
|
||
* ```js
|
||
* var map = L.map('map');
|
||
* var myRenderer = L.svg({ padding: 0.5 });
|
||
* var line = L.polyline( coordinates, { renderer: myRenderer } );
|
||
* var circle = L.circle( center, { renderer: myRenderer } );
|
||
* ```
|
||
*/
|
||
|
||
var SVG = Renderer.extend({
|
||
|
||
_initContainer: function () {
|
||
this._container = create('svg');
|
||
|
||
// makes it possible to click through svg root; we'll reset it back in individual paths
|
||
this._container.setAttribute('pointer-events', 'none');
|
||
|
||
this._rootGroup = create('g');
|
||
this._container.appendChild(this._rootGroup);
|
||
},
|
||
|
||
_destroyContainer: function () {
|
||
remove(this._container);
|
||
off(this._container);
|
||
delete this._container;
|
||
delete this._rootGroup;
|
||
delete this._svgSize;
|
||
},
|
||
|
||
_update: function () {
|
||
if (this._map._animatingZoom && this._bounds) { return; }
|
||
|
||
Renderer.prototype._update.call(this);
|
||
|
||
var b = this._bounds,
|
||
size = b.getSize(),
|
||
container = this._container;
|
||
|
||
// set size of svg-container if changed
|
||
if (!this._svgSize || !this._svgSize.equals(size)) {
|
||
this._svgSize = size;
|
||
container.setAttribute('width', size.x);
|
||
container.setAttribute('height', size.y);
|
||
}
|
||
|
||
// movement: update container viewBox so that we don't have to change coordinates of individual layers
|
||
setPosition(container, b.min);
|
||
container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));
|
||
|
||
this.fire('update');
|
||
},
|
||
|
||
// methods below are called by vector layers implementations
|
||
|
||
_initPath: function (layer) {
|
||
var path = layer._path = create('path');
|
||
|
||
// @namespace Path
|
||
// @option className: String = null
|
||
// Custom class name set on an element. Only for SVG renderer.
|
||
if (layer.options.className) {
|
||
addClass(path, layer.options.className);
|
||
}
|
||
|
||
if (layer.options.interactive) {
|
||
addClass(path, 'leaflet-interactive');
|
||
}
|
||
|
||
this._updateStyle(layer);
|
||
this._layers[stamp(layer)] = layer;
|
||
},
|
||
|
||
_addPath: function (layer) {
|
||
if (!this._rootGroup) { this._initContainer(); }
|
||
this._rootGroup.appendChild(layer._path);
|
||
layer.addInteractiveTarget(layer._path);
|
||
},
|
||
|
||
_removePath: function (layer) {
|
||
remove(layer._path);
|
||
layer.removeInteractiveTarget(layer._path);
|
||
delete this._layers[stamp(layer)];
|
||
},
|
||
|
||
_updatePath: function (layer) {
|
||
layer._project();
|
||
layer._update();
|
||
},
|
||
|
||
_updateStyle: function (layer) {
|
||
var path = layer._path,
|
||
options = layer.options;
|
||
|
||
if (!path) { return; }
|
||
|
||
if (options.stroke) {
|
||
path.setAttribute('stroke', options.color);
|
||
path.setAttribute('stroke-opacity', options.opacity);
|
||
path.setAttribute('stroke-width', options.weight);
|
||
path.setAttribute('stroke-linecap', options.lineCap);
|
||
path.setAttribute('stroke-linejoin', options.lineJoin);
|
||
|
||
if (options.dashArray) {
|
||
path.setAttribute('stroke-dasharray', options.dashArray);
|
||
} else {
|
||
path.removeAttribute('stroke-dasharray');
|
||
}
|
||
|
||
if (options.dashOffset) {
|
||
path.setAttribute('stroke-dashoffset', options.dashOffset);
|
||
} else {
|
||
path.removeAttribute('stroke-dashoffset');
|
||
}
|
||
} else {
|
||
path.setAttribute('stroke', 'none');
|
||
}
|
||
|
||
if (options.fill) {
|
||
path.setAttribute('fill', options.fillColor || options.color);
|
||
path.setAttribute('fill-opacity', options.fillOpacity);
|
||
path.setAttribute('fill-rule', options.fillRule || 'evenodd');
|
||
} else {
|
||
path.setAttribute('fill', 'none');
|
||
}
|
||
},
|
||
|
||
_updatePoly: function (layer, closed) {
|
||
this._setPath(layer, pointsToPath(layer._parts, closed));
|
||
},
|
||
|
||
_updateCircle: function (layer) {
|
||
var p = layer._point,
|
||
r = Math.max(Math.round(layer._radius), 1),
|
||
r2 = Math.max(Math.round(layer._radiusY), 1) || r,
|
||
arc = 'a' + r + ',' + r2 + ' 0 1,0 ';
|
||
|
||
// drawing a circle with two half-arcs
|
||
var d = layer._empty() ? 'M0 0' :
|
||
'M' + (p.x - r) + ',' + p.y +
|
||
arc + (r * 2) + ',0 ' +
|
||
arc + (-r * 2) + ',0 ';
|
||
|
||
this._setPath(layer, d);
|
||
},
|
||
|
||
_setPath: function (layer, path) {
|
||
layer._path.setAttribute('d', path);
|
||
},
|
||
|
||
// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements
|
||
_bringToFront: function (layer) {
|
||
toFront(layer._path);
|
||
},
|
||
|
||
_bringToBack: function (layer) {
|
||
toBack(layer._path);
|
||
}
|
||
});
|
||
|
||
if (Browser.vml) {
|
||
SVG.include(vmlMixin);
|
||
}
|
||
|
||
// @namespace SVG
|
||
// @factory L.svg(options?: Renderer options)
|
||
// Creates a SVG renderer with the given options.
|
||
function svg(options) {
|
||
return Browser.svg || Browser.vml ? new SVG(options) : null;
|
||
}
|
||
|
||
Map.include({
|
||
// @namespace Map; @method getRenderer(layer: Path): Renderer
|
||
// Returns the instance of `Renderer` that should be used to render the given
|
||
// `Path`. It will ensure that the `renderer` options of the map and paths
|
||
// are respected, and that the renderers do exist on the map.
|
||
getRenderer: function (layer) {
|
||
// @namespace Path; @option renderer: Renderer
|
||
// Use this specific instance of `Renderer` for this path. Takes
|
||
// precedence over the map's [default renderer](#map-renderer).
|
||
var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
|
||
|
||
if (!renderer) {
|
||
renderer = this._renderer = this._createRenderer();
|
||
}
|
||
|
||
if (!this.hasLayer(renderer)) {
|
||
this.addLayer(renderer);
|
||
}
|
||
return renderer;
|
||
},
|
||
|
||
_getPaneRenderer: function (name) {
|
||
if (name === 'overlayPane' || name === undefined) {
|
||
return false;
|
||
}
|
||
|
||
var renderer = this._paneRenderers[name];
|
||
if (renderer === undefined) {
|
||
renderer = this._createRenderer({pane: name});
|
||
this._paneRenderers[name] = renderer;
|
||
}
|
||
return renderer;
|
||
},
|
||
|
||
_createRenderer: function (options) {
|
||
// @namespace Map; @option preferCanvas: Boolean = false
|
||
// Whether `Path`s should be rendered on a `Canvas` renderer.
|
||
// By default, all `Path`s are rendered in a `SVG` renderer.
|
||
return (this.options.preferCanvas && canvas(options)) || svg(options);
|
||
}
|
||
});
|
||
|
||
/*
|
||
* L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
|
||
*/
|
||
|
||
/*
|
||
* @class Rectangle
|
||
* @aka L.Rectangle
|
||
* @inherits Polygon
|
||
*
|
||
* A class for drawing rectangle overlays on a map. Extends `Polygon`.
|
||
*
|
||
* @example
|
||
*
|
||
* ```js
|
||
* // define rectangle geographical bounds
|
||
* var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
|
||
*
|
||
* // create an orange rectangle
|
||
* L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
|
||
*
|
||
* // zoom the map to the rectangle bounds
|
||
* map.fitBounds(bounds);
|
||
* ```
|
||
*
|
||
*/
|
||
|
||
|
||
var Rectangle = Polygon.extend({
|
||
initialize: function (latLngBounds, options) {
|
||
Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
|
||
},
|
||
|
||
// @method setBounds(latLngBounds: LatLngBounds): this
|
||
// Redraws the rectangle with the passed bounds.
|
||
setBounds: function (latLngBounds) {
|
||
return this.setLatLngs(this._boundsToLatLngs(latLngBounds));
|
||
},
|
||
|
||
_boundsToLatLngs: function (latLngBounds) {
|
||
latLngBounds = toLatLngBounds(latLngBounds);
|
||
return [
|
||
latLngBounds.getSouthWest(),
|
||
latLngBounds.getNorthWest(),
|
||
latLngBounds.getNorthEast(),
|
||
latLngBounds.getSouthEast()
|
||
];
|
||
}
|
||
});
|
||
|
||
|
||
// @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)
|
||
function rectangle(latLngBounds, options) {
|
||
return new Rectangle(latLngBounds, options);
|
||
}
|
||
|
||
SVG.create = create;
|
||
SVG.pointsToPath = pointsToPath;
|
||
|
||
GeoJSON.geometryToLayer = geometryToLayer;
|
||
GeoJSON.coordsToLatLng = coordsToLatLng;
|
||
GeoJSON.coordsToLatLngs = coordsToLatLngs;
|
||
GeoJSON.latLngToCoords = latLngToCoords;
|
||
GeoJSON.latLngsToCoords = latLngsToCoords;
|
||
GeoJSON.getFeature = getFeature;
|
||
GeoJSON.asFeature = asFeature;
|
||
|
||
/*
|
||
* L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map
|
||
* (zoom to a selected bounding box), enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @option boxZoom: Boolean = true
|
||
// Whether the map can be zoomed to a rectangular area specified by
|
||
// dragging the mouse while pressing the shift key.
|
||
boxZoom: true
|
||
});
|
||
|
||
var BoxZoom = Handler.extend({
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
this._container = map._container;
|
||
this._pane = map._panes.overlayPane;
|
||
this._resetStateTimeout = 0;
|
||
map.on('unload', this._destroy, this);
|
||
},
|
||
|
||
addHooks: function () {
|
||
on(this._container, 'mousedown', this._onMouseDown, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
off(this._container, 'mousedown', this._onMouseDown, this);
|
||
},
|
||
|
||
moved: function () {
|
||
return this._moved;
|
||
},
|
||
|
||
_destroy: function () {
|
||
remove(this._pane);
|
||
delete this._pane;
|
||
},
|
||
|
||
_resetState: function () {
|
||
this._resetStateTimeout = 0;
|
||
this._moved = false;
|
||
},
|
||
|
||
_clearDeferredResetState: function () {
|
||
if (this._resetStateTimeout !== 0) {
|
||
clearTimeout(this._resetStateTimeout);
|
||
this._resetStateTimeout = 0;
|
||
}
|
||
},
|
||
|
||
_onMouseDown: function (e) {
|
||
if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
|
||
|
||
// Clear the deferred resetState if it hasn't executed yet, otherwise it
|
||
// will interrupt the interaction and orphan a box element in the container.
|
||
this._clearDeferredResetState();
|
||
this._resetState();
|
||
|
||
disableTextSelection();
|
||
disableImageDrag();
|
||
|
||
this._startPoint = this._map.mouseEventToContainerPoint(e);
|
||
|
||
on(document, {
|
||
contextmenu: stop,
|
||
mousemove: this._onMouseMove,
|
||
mouseup: this._onMouseUp,
|
||
keydown: this._onKeyDown
|
||
}, this);
|
||
},
|
||
|
||
_onMouseMove: function (e) {
|
||
if (!this._moved) {
|
||
this._moved = true;
|
||
|
||
this._box = create$1('div', 'leaflet-zoom-box', this._container);
|
||
addClass(this._container, 'leaflet-crosshair');
|
||
|
||
this._map.fire('boxzoomstart');
|
||
}
|
||
|
||
this._point = this._map.mouseEventToContainerPoint(e);
|
||
|
||
var bounds = new Bounds(this._point, this._startPoint),
|
||
size = bounds.getSize();
|
||
|
||
setPosition(this._box, bounds.min);
|
||
|
||
this._box.style.width = size.x + 'px';
|
||
this._box.style.height = size.y + 'px';
|
||
},
|
||
|
||
_finish: function () {
|
||
if (this._moved) {
|
||
remove(this._box);
|
||
removeClass(this._container, 'leaflet-crosshair');
|
||
}
|
||
|
||
enableTextSelection();
|
||
enableImageDrag();
|
||
|
||
off(document, {
|
||
contextmenu: stop,
|
||
mousemove: this._onMouseMove,
|
||
mouseup: this._onMouseUp,
|
||
keydown: this._onKeyDown
|
||
}, this);
|
||
},
|
||
|
||
_onMouseUp: function (e) {
|
||
if ((e.which !== 1) && (e.button !== 1)) { return; }
|
||
|
||
this._finish();
|
||
|
||
if (!this._moved) { return; }
|
||
// Postpone to next JS tick so internal click event handling
|
||
// still see it as "moved".
|
||
this._clearDeferredResetState();
|
||
this._resetStateTimeout = setTimeout(bind(this._resetState, this), 0);
|
||
|
||
var bounds = new LatLngBounds(
|
||
this._map.containerPointToLatLng(this._startPoint),
|
||
this._map.containerPointToLatLng(this._point));
|
||
|
||
this._map
|
||
.fitBounds(bounds)
|
||
.fire('boxzoomend', {boxZoomBounds: bounds});
|
||
},
|
||
|
||
_onKeyDown: function (e) {
|
||
if (e.keyCode === 27) {
|
||
this._finish();
|
||
this._clearDeferredResetState();
|
||
this._resetState();
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property boxZoom: Handler
|
||
// Box (shift-drag with mouse) zoom handler.
|
||
Map.addInitHook('addHandler', 'boxZoom', BoxZoom);
|
||
|
||
/*
|
||
* L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
|
||
Map.mergeOptions({
|
||
// @option doubleClickZoom: Boolean|String = true
|
||
// Whether the map can be zoomed in by double clicking on it and
|
||
// zoomed out by double clicking while holding shift. If passed
|
||
// `'center'`, double-click zoom will zoom to the center of the
|
||
// view regardless of where the mouse was.
|
||
doubleClickZoom: true
|
||
});
|
||
|
||
var DoubleClickZoom = Handler.extend({
|
||
addHooks: function () {
|
||
this._map.on('dblclick', this._onDoubleClick, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
this._map.off('dblclick', this._onDoubleClick, this);
|
||
},
|
||
|
||
_onDoubleClick: function (e) {
|
||
var map = this._map,
|
||
oldZoom = map.getZoom(),
|
||
delta = map.options.zoomDelta,
|
||
zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;
|
||
|
||
if (map.options.doubleClickZoom === 'center') {
|
||
map.setZoom(zoom);
|
||
} else {
|
||
map.setZoomAround(e.containerPoint, zoom);
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
//
|
||
// Map properties include interaction handlers that allow you to control
|
||
// interaction behavior in runtime, enabling or disabling certain features such
|
||
// as dragging or touch zoom (see `Handler` methods). For example:
|
||
//
|
||
// ```js
|
||
// map.doubleClickZoom.disable();
|
||
// ```
|
||
//
|
||
// @property doubleClickZoom: Handler
|
||
// Double click zoom handler.
|
||
Map.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);
|
||
|
||
/*
|
||
* L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @option dragging: Boolean = true
|
||
// Whether the map is draggable with mouse/touch or not.
|
||
dragging: true,
|
||
|
||
// @section Panning Inertia Options
|
||
// @option inertia: Boolean = *
|
||
// If enabled, panning of the map will have an inertia effect where
|
||
// the map builds momentum while dragging and continues moving in
|
||
// the same direction for some time. Feels especially nice on touch
|
||
// devices. Enabled by default.
|
||
inertia: true,
|
||
|
||
// @option inertiaDeceleration: Number = 3000
|
||
// The rate with which the inertial movement slows down, in pixels/second².
|
||
inertiaDeceleration: 3400, // px/s^2
|
||
|
||
// @option inertiaMaxSpeed: Number = Infinity
|
||
// Max speed of the inertial movement, in pixels/second.
|
||
inertiaMaxSpeed: Infinity, // px/s
|
||
|
||
// @option easeLinearity: Number = 0.2
|
||
easeLinearity: 0.2,
|
||
|
||
// TODO refactor, move to CRS
|
||
// @option worldCopyJump: Boolean = false
|
||
// With this option enabled, the map tracks when you pan to another "copy"
|
||
// of the world and seamlessly jumps to the original one so that all overlays
|
||
// like markers and vector layers are still visible.
|
||
worldCopyJump: false,
|
||
|
||
// @option maxBoundsViscosity: Number = 0.0
|
||
// If `maxBounds` is set, this option will control how solid the bounds
|
||
// are when dragging the map around. The default value of `0.0` allows the
|
||
// user to drag outside the bounds at normal speed, higher values will
|
||
// slow down map dragging outside bounds, and `1.0` makes the bounds fully
|
||
// solid, preventing the user from dragging outside the bounds.
|
||
maxBoundsViscosity: 0.0
|
||
});
|
||
|
||
var Drag = Handler.extend({
|
||
addHooks: function () {
|
||
if (!this._draggable) {
|
||
var map = this._map;
|
||
|
||
this._draggable = new Draggable(map._mapPane, map._container);
|
||
|
||
this._draggable.on({
|
||
dragstart: this._onDragStart,
|
||
drag: this._onDrag,
|
||
dragend: this._onDragEnd
|
||
}, this);
|
||
|
||
this._draggable.on('predrag', this._onPreDragLimit, this);
|
||
if (map.options.worldCopyJump) {
|
||
this._draggable.on('predrag', this._onPreDragWrap, this);
|
||
map.on('zoomend', this._onZoomEnd, this);
|
||
|
||
map.whenReady(this._onZoomEnd, this);
|
||
}
|
||
}
|
||
addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');
|
||
this._draggable.enable();
|
||
this._positions = [];
|
||
this._times = [];
|
||
},
|
||
|
||
removeHooks: function () {
|
||
removeClass(this._map._container, 'leaflet-grab');
|
||
removeClass(this._map._container, 'leaflet-touch-drag');
|
||
this._draggable.disable();
|
||
},
|
||
|
||
moved: function () {
|
||
return this._draggable && this._draggable._moved;
|
||
},
|
||
|
||
moving: function () {
|
||
return this._draggable && this._draggable._moving;
|
||
},
|
||
|
||
_onDragStart: function () {
|
||
var map = this._map;
|
||
|
||
map._stop();
|
||
if (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {
|
||
var bounds = toLatLngBounds(this._map.options.maxBounds);
|
||
|
||
this._offsetLimit = toBounds(
|
||
this._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),
|
||
this._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)
|
||
.add(this._map.getSize()));
|
||
|
||
this._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));
|
||
} else {
|
||
this._offsetLimit = null;
|
||
}
|
||
|
||
map
|
||
.fire('movestart')
|
||
.fire('dragstart');
|
||
|
||
if (map.options.inertia) {
|
||
this._positions = [];
|
||
this._times = [];
|
||
}
|
||
},
|
||
|
||
_onDrag: function (e) {
|
||
if (this._map.options.inertia) {
|
||
var time = this._lastTime = +new Date(),
|
||
pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;
|
||
|
||
this._positions.push(pos);
|
||
this._times.push(time);
|
||
|
||
this._prunePositions(time);
|
||
}
|
||
|
||
this._map
|
||
.fire('move', e)
|
||
.fire('drag', e);
|
||
},
|
||
|
||
_prunePositions: function (time) {
|
||
while (this._positions.length > 1 && time - this._times[0] > 50) {
|
||
this._positions.shift();
|
||
this._times.shift();
|
||
}
|
||
},
|
||
|
||
_onZoomEnd: function () {
|
||
var pxCenter = this._map.getSize().divideBy(2),
|
||
pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
|
||
|
||
this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
|
||
this._worldWidth = this._map.getPixelWorldBounds().getSize().x;
|
||
},
|
||
|
||
_viscousLimit: function (value, threshold) {
|
||
return value - (value - threshold) * this._viscosity;
|
||
},
|
||
|
||
_onPreDragLimit: function () {
|
||
if (!this._viscosity || !this._offsetLimit) { return; }
|
||
|
||
var offset = this._draggable._newPos.subtract(this._draggable._startPos);
|
||
|
||
var limit = this._offsetLimit;
|
||
if (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }
|
||
if (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }
|
||
if (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }
|
||
if (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }
|
||
|
||
this._draggable._newPos = this._draggable._startPos.add(offset);
|
||
},
|
||
|
||
_onPreDragWrap: function () {
|
||
// TODO refactor to be able to adjust map pane position after zoom
|
||
var worldWidth = this._worldWidth,
|
||
halfWidth = Math.round(worldWidth / 2),
|
||
dx = this._initialWorldOffset,
|
||
x = this._draggable._newPos.x,
|
||
newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
|
||
newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
|
||
newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
|
||
|
||
this._draggable._absPos = this._draggable._newPos.clone();
|
||
this._draggable._newPos.x = newX;
|
||
},
|
||
|
||
_onDragEnd: function (e) {
|
||
var map = this._map,
|
||
options = map.options,
|
||
|
||
noInertia = !options.inertia || e.noInertia || this._times.length < 2;
|
||
|
||
map.fire('dragend', e);
|
||
|
||
if (noInertia) {
|
||
map.fire('moveend');
|
||
|
||
} else {
|
||
this._prunePositions(+new Date());
|
||
|
||
var direction = this._lastPos.subtract(this._positions[0]),
|
||
duration = (this._lastTime - this._times[0]) / 1000,
|
||
ease = options.easeLinearity,
|
||
|
||
speedVector = direction.multiplyBy(ease / duration),
|
||
speed = speedVector.distanceTo([0, 0]),
|
||
|
||
limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),
|
||
limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),
|
||
|
||
decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),
|
||
offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();
|
||
|
||
if (!offset.x && !offset.y) {
|
||
map.fire('moveend');
|
||
|
||
} else {
|
||
offset = map._limitOffset(offset, map.options.maxBounds);
|
||
|
||
requestAnimFrame(function () {
|
||
map.panBy(offset, {
|
||
duration: decelerationDuration,
|
||
easeLinearity: ease,
|
||
noMoveStart: true,
|
||
animate: true
|
||
});
|
||
});
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property dragging: Handler
|
||
// Map dragging handler (by both mouse and touch).
|
||
Map.addInitHook('addHandler', 'dragging', Drag);
|
||
|
||
/*
|
||
* L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Keyboard Navigation Options
|
||
Map.mergeOptions({
|
||
// @option keyboard: Boolean = true
|
||
// Makes the map focusable and allows users to navigate the map with keyboard
|
||
// arrows and `+`/`-` keys.
|
||
keyboard: true,
|
||
|
||
// @option keyboardPanDelta: Number = 80
|
||
// Amount of pixels to pan when pressing an arrow key.
|
||
keyboardPanDelta: 80
|
||
});
|
||
|
||
var Keyboard = Handler.extend({
|
||
|
||
keyCodes: {
|
||
left: [37],
|
||
right: [39],
|
||
down: [40],
|
||
up: [38],
|
||
zoomIn: [187, 107, 61, 171],
|
||
zoomOut: [189, 109, 54, 173]
|
||
},
|
||
|
||
initialize: function (map) {
|
||
this._map = map;
|
||
|
||
this._setPanDelta(map.options.keyboardPanDelta);
|
||
this._setZoomDelta(map.options.zoomDelta);
|
||
},
|
||
|
||
addHooks: function () {
|
||
var container = this._map._container;
|
||
|
||
// make the container focusable by tabbing
|
||
if (container.tabIndex <= 0) {
|
||
container.tabIndex = '0';
|
||
}
|
||
|
||
on(container, {
|
||
focus: this._onFocus,
|
||
blur: this._onBlur,
|
||
mousedown: this._onMouseDown
|
||
}, this);
|
||
|
||
this._map.on({
|
||
focus: this._addHooks,
|
||
blur: this._removeHooks
|
||
}, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
this._removeHooks();
|
||
|
||
off(this._map._container, {
|
||
focus: this._onFocus,
|
||
blur: this._onBlur,
|
||
mousedown: this._onMouseDown
|
||
}, this);
|
||
|
||
this._map.off({
|
||
focus: this._addHooks,
|
||
blur: this._removeHooks
|
||
}, this);
|
||
},
|
||
|
||
_onMouseDown: function () {
|
||
if (this._focused) { return; }
|
||
|
||
var body = document.body,
|
||
docEl = document.documentElement,
|
||
top = body.scrollTop || docEl.scrollTop,
|
||
left = body.scrollLeft || docEl.scrollLeft;
|
||
|
||
this._map._container.focus();
|
||
|
||
window.scrollTo(left, top);
|
||
},
|
||
|
||
_onFocus: function () {
|
||
this._focused = true;
|
||
this._map.fire('focus');
|
||
},
|
||
|
||
_onBlur: function () {
|
||
this._focused = false;
|
||
this._map.fire('blur');
|
||
},
|
||
|
||
_setPanDelta: function (panDelta) {
|
||
var keys = this._panKeys = {},
|
||
codes = this.keyCodes,
|
||
i, len;
|
||
|
||
for (i = 0, len = codes.left.length; i < len; i++) {
|
||
keys[codes.left[i]] = [-1 * panDelta, 0];
|
||
}
|
||
for (i = 0, len = codes.right.length; i < len; i++) {
|
||
keys[codes.right[i]] = [panDelta, 0];
|
||
}
|
||
for (i = 0, len = codes.down.length; i < len; i++) {
|
||
keys[codes.down[i]] = [0, panDelta];
|
||
}
|
||
for (i = 0, len = codes.up.length; i < len; i++) {
|
||
keys[codes.up[i]] = [0, -1 * panDelta];
|
||
}
|
||
},
|
||
|
||
_setZoomDelta: function (zoomDelta) {
|
||
var keys = this._zoomKeys = {},
|
||
codes = this.keyCodes,
|
||
i, len;
|
||
|
||
for (i = 0, len = codes.zoomIn.length; i < len; i++) {
|
||
keys[codes.zoomIn[i]] = zoomDelta;
|
||
}
|
||
for (i = 0, len = codes.zoomOut.length; i < len; i++) {
|
||
keys[codes.zoomOut[i]] = -zoomDelta;
|
||
}
|
||
},
|
||
|
||
_addHooks: function () {
|
||
on(document, 'keydown', this._onKeyDown, this);
|
||
},
|
||
|
||
_removeHooks: function () {
|
||
off(document, 'keydown', this._onKeyDown, this);
|
||
},
|
||
|
||
_onKeyDown: function (e) {
|
||
if (e.altKey || e.ctrlKey || e.metaKey) { return; }
|
||
|
||
var key = e.keyCode,
|
||
map = this._map,
|
||
offset;
|
||
|
||
if (key in this._panKeys) {
|
||
if (!map._panAnim || !map._panAnim._inProgress) {
|
||
offset = this._panKeys[key];
|
||
if (e.shiftKey) {
|
||
offset = toPoint(offset).multiplyBy(3);
|
||
}
|
||
|
||
if (map.options.maxBounds) {
|
||
offset = map._limitOffset(toPoint(offset), map.options.maxBounds);
|
||
}
|
||
|
||
if (map.options.worldCopyJump) {
|
||
var newLatLng = map.wrapLatLng(map.unproject(map.project(map.getCenter()).add(offset)));
|
||
map.panTo(newLatLng);
|
||
} else {
|
||
map.panBy(offset);
|
||
}
|
||
}
|
||
} else if (key in this._zoomKeys) {
|
||
map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);
|
||
|
||
} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {
|
||
map.closePopup();
|
||
|
||
} else {
|
||
return;
|
||
}
|
||
|
||
stop(e);
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @section Handlers
|
||
// @property keyboard: Handler
|
||
// Keyboard navigation handler.
|
||
Map.addInitHook('addHandler', 'keyboard', Keyboard);
|
||
|
||
/*
|
||
* L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @section Mouse wheel options
|
||
// @option scrollWheelZoom: Boolean|String = true
|
||
// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,
|
||
// it will zoom to the center of the view regardless of where the mouse was.
|
||
scrollWheelZoom: true,
|
||
|
||
// @option wheelDebounceTime: Number = 40
|
||
// Limits the rate at which a wheel can fire (in milliseconds). By default
|
||
// user can't zoom via wheel more often than once per 40 ms.
|
||
wheelDebounceTime: 40,
|
||
|
||
// @option wheelPxPerZoomLevel: Number = 60
|
||
// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))
|
||
// mean a change of one full zoom level. Smaller values will make wheel-zooming
|
||
// faster (and vice versa).
|
||
wheelPxPerZoomLevel: 60
|
||
});
|
||
|
||
var ScrollWheelZoom = Handler.extend({
|
||
addHooks: function () {
|
||
on(this._map._container, 'wheel', this._onWheelScroll, this);
|
||
|
||
this._delta = 0;
|
||
},
|
||
|
||
removeHooks: function () {
|
||
off(this._map._container, 'wheel', this._onWheelScroll, this);
|
||
},
|
||
|
||
_onWheelScroll: function (e) {
|
||
var delta = getWheelDelta(e);
|
||
|
||
var debounce = this._map.options.wheelDebounceTime;
|
||
|
||
this._delta += delta;
|
||
this._lastMousePos = this._map.mouseEventToContainerPoint(e);
|
||
|
||
if (!this._startTime) {
|
||
this._startTime = +new Date();
|
||
}
|
||
|
||
var left = Math.max(debounce - (+new Date() - this._startTime), 0);
|
||
|
||
clearTimeout(this._timer);
|
||
this._timer = setTimeout(bind(this._performZoom, this), left);
|
||
|
||
stop(e);
|
||
},
|
||
|
||
_performZoom: function () {
|
||
var map = this._map,
|
||
zoom = map.getZoom(),
|
||
snap = this._map.options.zoomSnap || 0;
|
||
|
||
map._stop(); // stop panning and fly animations if any
|
||
|
||
// map the delta with a sigmoid function to -4..4 range leaning on -1..1
|
||
var d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),
|
||
d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,
|
||
d4 = snap ? Math.ceil(d3 / snap) * snap : d3,
|
||
delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;
|
||
|
||
this._delta = 0;
|
||
this._startTime = null;
|
||
|
||
if (!delta) { return; }
|
||
|
||
if (map.options.scrollWheelZoom === 'center') {
|
||
map.setZoom(zoom + delta);
|
||
} else {
|
||
map.setZoomAround(this._lastMousePos, zoom + delta);
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property scrollWheelZoom: Handler
|
||
// Scroll wheel zoom handler.
|
||
Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);
|
||
|
||
/*
|
||
* L.Map.TapHold is used to simulate `contextmenu` event on long hold,
|
||
* which otherwise is not fired by mobile Safari.
|
||
*/
|
||
|
||
var tapHoldDelay = 600;
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @section Touch interaction options
|
||
// @option tapHold: Boolean
|
||
// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.
|
||
tapHold: Browser.touchNative && Browser.safari && Browser.mobile,
|
||
|
||
// @option tapTolerance: Number = 15
|
||
// The max number of pixels a user can shift his finger during touch
|
||
// for it to be considered a valid tap.
|
||
tapTolerance: 15
|
||
});
|
||
|
||
var TapHold = Handler.extend({
|
||
addHooks: function () {
|
||
on(this._map._container, 'touchstart', this._onDown, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
off(this._map._container, 'touchstart', this._onDown, this);
|
||
},
|
||
|
||
_onDown: function (e) {
|
||
clearTimeout(this._holdTimeout);
|
||
if (e.touches.length !== 1) { return; }
|
||
|
||
var first = e.touches[0];
|
||
this._startPos = this._newPos = new Point(first.clientX, first.clientY);
|
||
|
||
this._holdTimeout = setTimeout(bind(function () {
|
||
this._cancel();
|
||
if (!this._isTapValid()) { return; }
|
||
|
||
// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events
|
||
on(document, 'touchend', preventDefault);
|
||
on(document, 'touchend touchcancel', this._cancelClickPrevent);
|
||
this._simulateEvent('contextmenu', first);
|
||
}, this), tapHoldDelay);
|
||
|
||
on(document, 'touchend touchcancel contextmenu', this._cancel, this);
|
||
on(document, 'touchmove', this._onMove, this);
|
||
},
|
||
|
||
_cancelClickPrevent: function cancelClickPrevent() {
|
||
off(document, 'touchend', preventDefault);
|
||
off(document, 'touchend touchcancel', cancelClickPrevent);
|
||
},
|
||
|
||
_cancel: function () {
|
||
clearTimeout(this._holdTimeout);
|
||
off(document, 'touchend touchcancel contextmenu', this._cancel, this);
|
||
off(document, 'touchmove', this._onMove, this);
|
||
},
|
||
|
||
_onMove: function (e) {
|
||
var first = e.touches[0];
|
||
this._newPos = new Point(first.clientX, first.clientY);
|
||
},
|
||
|
||
_isTapValid: function () {
|
||
return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
|
||
},
|
||
|
||
_simulateEvent: function (type, e) {
|
||
var simulatedEvent = new MouseEvent(type, {
|
||
bubbles: true,
|
||
cancelable: true,
|
||
view: window,
|
||
// detail: 1,
|
||
screenX: e.screenX,
|
||
screenY: e.screenY,
|
||
clientX: e.clientX,
|
||
clientY: e.clientY,
|
||
// button: 2,
|
||
// buttons: 2
|
||
});
|
||
|
||
simulatedEvent._simulated = true;
|
||
|
||
e.target.dispatchEvent(simulatedEvent);
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property tapHold: Handler
|
||
// Long tap handler to simulate `contextmenu` event (useful in mobile Safari).
|
||
Map.addInitHook('addHandler', 'tapHold', TapHold);
|
||
|
||
/*
|
||
* L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.
|
||
*/
|
||
|
||
// @namespace Map
|
||
// @section Interaction Options
|
||
Map.mergeOptions({
|
||
// @section Touch interaction options
|
||
// @option touchZoom: Boolean|String = *
|
||
// Whether the map can be zoomed by touch-dragging with two fingers. If
|
||
// passed `'center'`, it will zoom to the center of the view regardless of
|
||
// where the touch events (fingers) were. Enabled for touch-capable web
|
||
// browsers.
|
||
touchZoom: Browser.touch,
|
||
|
||
// @option bounceAtZoomLimits: Boolean = true
|
||
// Set it to false if you don't want the map to zoom beyond min/max zoom
|
||
// and then bounce back when pinch-zooming.
|
||
bounceAtZoomLimits: true
|
||
});
|
||
|
||
var TouchZoom = Handler.extend({
|
||
addHooks: function () {
|
||
addClass(this._map._container, 'leaflet-touch-zoom');
|
||
on(this._map._container, 'touchstart', this._onTouchStart, this);
|
||
},
|
||
|
||
removeHooks: function () {
|
||
removeClass(this._map._container, 'leaflet-touch-zoom');
|
||
off(this._map._container, 'touchstart', this._onTouchStart, this);
|
||
},
|
||
|
||
_onTouchStart: function (e) {
|
||
var map = this._map;
|
||
if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
|
||
|
||
var p1 = map.mouseEventToContainerPoint(e.touches[0]),
|
||
p2 = map.mouseEventToContainerPoint(e.touches[1]);
|
||
|
||
this._centerPoint = map.getSize()._divideBy(2);
|
||
this._startLatLng = map.containerPointToLatLng(this._centerPoint);
|
||
if (map.options.touchZoom !== 'center') {
|
||
this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));
|
||
}
|
||
|
||
this._startDist = p1.distanceTo(p2);
|
||
this._startZoom = map.getZoom();
|
||
|
||
this._moved = false;
|
||
this._zooming = true;
|
||
|
||
map._stop();
|
||
|
||
on(document, 'touchmove', this._onTouchMove, this);
|
||
on(document, 'touchend touchcancel', this._onTouchEnd, this);
|
||
|
||
preventDefault(e);
|
||
},
|
||
|
||
_onTouchMove: function (e) {
|
||
if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
|
||
|
||
var map = this._map,
|
||
p1 = map.mouseEventToContainerPoint(e.touches[0]),
|
||
p2 = map.mouseEventToContainerPoint(e.touches[1]),
|
||
scale = p1.distanceTo(p2) / this._startDist;
|
||
|
||
this._zoom = map.getScaleZoom(scale, this._startZoom);
|
||
|
||
if (!map.options.bounceAtZoomLimits && (
|
||
(this._zoom < map.getMinZoom() && scale < 1) ||
|
||
(this._zoom > map.getMaxZoom() && scale > 1))) {
|
||
this._zoom = map._limitZoom(this._zoom);
|
||
}
|
||
|
||
if (map.options.touchZoom === 'center') {
|
||
this._center = this._startLatLng;
|
||
if (scale === 1) { return; }
|
||
} else {
|
||
// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng
|
||
var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);
|
||
if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }
|
||
this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);
|
||
}
|
||
|
||
if (!this._moved) {
|
||
map._moveStart(true, false);
|
||
this._moved = true;
|
||
}
|
||
|
||
cancelAnimFrame(this._animRequest);
|
||
|
||
var moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}, undefined);
|
||
this._animRequest = requestAnimFrame(moveFn, this, true);
|
||
|
||
preventDefault(e);
|
||
},
|
||
|
||
_onTouchEnd: function () {
|
||
if (!this._moved || !this._zooming) {
|
||
this._zooming = false;
|
||
return;
|
||
}
|
||
|
||
this._zooming = false;
|
||
cancelAnimFrame(this._animRequest);
|
||
|
||
off(document, 'touchmove', this._onTouchMove, this);
|
||
off(document, 'touchend touchcancel', this._onTouchEnd, this);
|
||
|
||
// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.
|
||
if (this._map.options.zoomAnimation) {
|
||
this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);
|
||
} else {
|
||
this._map._resetView(this._center, this._map._limitZoom(this._zoom));
|
||
}
|
||
}
|
||
});
|
||
|
||
// @section Handlers
|
||
// @property touchZoom: Handler
|
||
// Touch zoom handler.
|
||
Map.addInitHook('addHandler', 'touchZoom', TouchZoom);
|
||
|
||
Map.BoxZoom = BoxZoom;
|
||
Map.DoubleClickZoom = DoubleClickZoom;
|
||
Map.Drag = Drag;
|
||
Map.Keyboard = Keyboard;
|
||
Map.ScrollWheelZoom = ScrollWheelZoom;
|
||
Map.TapHold = TapHold;
|
||
Map.TouchZoom = TouchZoom;
|
||
|
||
exports.Bounds = Bounds;
|
||
exports.Browser = Browser;
|
||
exports.CRS = CRS;
|
||
exports.Canvas = Canvas;
|
||
exports.Circle = Circle;
|
||
exports.CircleMarker = CircleMarker;
|
||
exports.Class = Class;
|
||
exports.Control = Control;
|
||
exports.DivIcon = DivIcon;
|
||
exports.DivOverlay = DivOverlay;
|
||
exports.DomEvent = DomEvent;
|
||
exports.DomUtil = DomUtil;
|
||
exports.Draggable = Draggable;
|
||
exports.Evented = Evented;
|
||
exports.FeatureGroup = FeatureGroup;
|
||
exports.GeoJSON = GeoJSON;
|
||
exports.GridLayer = GridLayer;
|
||
exports.Handler = Handler;
|
||
exports.Icon = Icon;
|
||
exports.ImageOverlay = ImageOverlay;
|
||
exports.LatLng = LatLng;
|
||
exports.LatLngBounds = LatLngBounds;
|
||
exports.Layer = Layer;
|
||
exports.LayerGroup = LayerGroup;
|
||
exports.LineUtil = LineUtil;
|
||
exports.Map = Map;
|
||
exports.Marker = Marker;
|
||
exports.Mixin = Mixin;
|
||
exports.Path = Path;
|
||
exports.Point = Point;
|
||
exports.PolyUtil = PolyUtil;
|
||
exports.Polygon = Polygon;
|
||
exports.Polyline = Polyline;
|
||
exports.Popup = Popup;
|
||
exports.PosAnimation = PosAnimation;
|
||
exports.Projection = index;
|
||
exports.Rectangle = Rectangle;
|
||
exports.Renderer = Renderer;
|
||
exports.SVG = SVG;
|
||
exports.SVGOverlay = SVGOverlay;
|
||
exports.TileLayer = TileLayer;
|
||
exports.Tooltip = Tooltip;
|
||
exports.Transformation = Transformation;
|
||
exports.Util = Util;
|
||
exports.VideoOverlay = VideoOverlay;
|
||
exports.bind = bind;
|
||
exports.bounds = toBounds;
|
||
exports.canvas = canvas;
|
||
exports.circle = circle;
|
||
exports.circleMarker = circleMarker;
|
||
exports.control = control;
|
||
exports.divIcon = divIcon;
|
||
exports.extend = extend;
|
||
exports.featureGroup = featureGroup;
|
||
exports.geoJSON = geoJSON;
|
||
exports.geoJson = geoJson;
|
||
exports.gridLayer = gridLayer;
|
||
exports.icon = icon;
|
||
exports.imageOverlay = imageOverlay;
|
||
exports.latLng = toLatLng;
|
||
exports.latLngBounds = toLatLngBounds;
|
||
exports.layerGroup = layerGroup;
|
||
exports.map = createMap;
|
||
exports.marker = marker;
|
||
exports.point = toPoint;
|
||
exports.polygon = polygon;
|
||
exports.polyline = polyline;
|
||
exports.popup = popup;
|
||
exports.rectangle = rectangle;
|
||
exports.setOptions = setOptions;
|
||
exports.stamp = stamp;
|
||
exports.svg = svg;
|
||
exports.svgOverlay = svgOverlay;
|
||
exports.tileLayer = tileLayer;
|
||
exports.tooltip = tooltip;
|
||
exports.transformation = toTransformation;
|
||
exports.version = version;
|
||
exports.videoOverlay = videoOverlay;
|
||
|
||
var oldL = window.L;
|
||
exports.noConflict = function() {
|
||
window.L = oldL;
|
||
return this;
|
||
}
|
||
// Always export us to window global (see #2364)
|
||
window.L = exports;
|
||
|
||
}));
|
||
|
||
|
||
},{}],2:[function(require,module,exports){
|
||
(function (process){(function (){
|
||
/**!
|
||
* @license
|
||
* The MIT License (MIT)
|
||
*
|
||
* Copyright (c) 2017 Måns Beckman - www.spatialillusions.com
|
||
*
|
||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
* of this software and associated documentation files (the "Software"), to deal
|
||
* in the Software without restriction, including without limitation the rights
|
||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
* copies of the Software, and to permit persons to whom the Software is
|
||
* furnished to do so, subject to the following conditions:
|
||
*
|
||
* The above copyright notice and this permission notice shall be included in all
|
||
* copies or substantial portions of the Software.
|
||
*
|
||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||
* SOFTWARE.
|
||
*
|
||
* More information can be found at www.spatialillusions.com
|
||
*/
|
||
!function(I,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("milsymbol",t):I.ms=t()}(this,function(){"use strict";var t={Black:{Civilian:"black",Friend:"black",Hostile:"black",Neutral:"black",Unknown:"black"},Dark:{Civilian:"rgb(80,0,80)",Friend:"rgb(0,107,140)",Hostile:"rgb(200,0,0)",Neutral:"rgb(0,160,0)",Unknown:"rgb(225,220,0)"},FrameColor:{Civilian:"rgb(255,0,255)",Friend:"rgb(0, 255, 255)",Hostile:"rgb(255, 0, 0)",Neutral:"rgb(0, 255, 0)",Unknown:"rgb(255, 255, 0)"},IconColor:{Civilian:"rgb(255,0,255)",Friend:"rgb(0, 255, 255)",Hostile:"rgb(255, 0, 0)",Neutral:"rgb(0, 255, 0)",Unknown:"rgb(255, 255, 0)"},Light:{Civilian:"rgb(255,161,255)",Friend:"rgb(128,224,255)",Hostile:"rgb(255,128,128)",Neutral:"rgb(170,255,170)",Unknown:"rgb(255,255,128)"},Medium:{Civilian:"rgb(128,0,128)",Friend:"rgb(0,168,220)",Hostile:"rgb(255,48,49)",Neutral:"rgb(0,226,110)",Unknown:"rgb(255,255,0)"},None:{Civilian:!1,Friend:!1,Hostile:!1,Neutral:!1,Unknown:!1},OffWhite:{Civilian:"rgb(239, 239, 239)",Friend:"rgb(239, 239, 239)",Hostile:"rgb(239, 239, 239)",Neutral:"rgb(239, 239, 239)",Unknown:"rgb(239, 239, 239)"},White:{Civilian:"white",Friend:"white",Hostile:"white",Neutral:"white",Unknown:"white"}};function E(I){var t,E=[],R=[],e=this.colors.frameColor[this.metadata.affiliation];if(!this.metadata.frame&&this.style.icon||void 0===this.metadata.baseGeometry.g.type)return{pre:E,post:R,bbox:this.metadata.baseGeometry.bbox};var A,C={type:this.metadata.baseGeometry.g.type};switch(C.type){case"path":C.d=this.metadata.baseGeometry.g.d;break;case"circle":C.cx=this.metadata.baseGeometry.g.cx,C.cy=this.metadata.baseGeometry.g.cy,C.r=this.metadata.baseGeometry.g.r}(C.fill=this.colors.fillColor[this.metadata.affiliation],C.fillopacity=this.style.fillOpacity,C.stroke=e,C.strokewidth=10<=this.style.size?this.style.strokeWidth:10,this.style.frame&&0<this.style.outlineWidth)&&("path"==C.type&&this.metadata.fill&&!this.style.monoColor?((A={type:this.metadata.baseGeometry.g.type}).d=this.metadata.baseGeometry.g.d+" Z",A.strokewidth=10<=this.style.size?this.style.strokeWidth:10):A=C,E.push(I.outline(A,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)));if(""==this.style.monoColor&&this.style.fill||!this.metadata.notpresent||(C.strokedasharray=this.metadata.notpresent),R.push(C),this.metadata.space&&(t={Friend:{type:"path",stroke:!1,fill:e,d:"M 100,30 C 90,30 80,35 68.65625,50 l 62.6875,0 C 120,35 110,30 100,30"},Hostile:{type:"path",stroke:!1,fill:e,d:"M67,50 L100,20 133,50 z"},Neutral:{type:"path",stroke:!1,fill:e,d:"M45,50 l0,-20 110,0 0,20 z"},Unknown:{type:"path",stroke:!1,fill:e,d:"M 100 22.5 C 85 22.5 70 31.669211 66 50 L 134 50 C 130 31.669204 115 22.5 100 22.5 z"}},R.push(t[this.metadata.affiliation])),this.metadata.activity&&(t={Friend:{type:"path",stroke:!1,fill:e,d:"m 160,135 0,15 15,0 0,-15 z m -135,0 15,0 0,15 -15,0 z m 135,-85 0,15 15,0 0,-15 z m -135,0 15,0 0,15 -15,0 z"},Hostile:{type:"path",stroke:!1,fill:e,d:"M 100 28 L 89.40625 38.59375 L 100 49.21875 L 110.59375 38.59375 L 100 28 z M 38.6875 89.3125 L 28.0625 99.9375 L 38.6875 110.53125 L 49.28125 99.9375 L 38.6875 89.3125 z M 161.40625 89.40625 L 150.78125 100 L 161.40625 110.59375 L 172 100 L 161.40625 89.40625 z M 99.9375 150.71875 L 89.3125 161.3125 L 99.9375 171.9375 L 110.53125 161.3125 L 99.9375 150.71875"},Neutral:{type:"path",stroke:!1,fill:e,d:"m 140,140 15,0 0,15 -15,0 z m -80,0 0,15 -15,0 0,-15 z m 80,-80 0,-15 15,0 0,15 z m -80,0 -15,0 0,-15 15,0 z"},Unknown:{type:"path",stroke:!1,fill:e,d:"M 107.96875 31.46875 L 92.03125 31.71875 L 92.03125 46.4375 L 107.71875 46.4375 L 107.96875 31.46875 z M 47.03125 92.5 L 31.09375 92.75 L 31.09375 107.5 L 46.78125 107.5 L 47.03125 92.5 z M 168.4375 92.5 L 152.5 92.75 L 152.5 107.5 L 168.1875 107.5 L 168.4375 92.5 z M 107.96875 153.5625 L 92.03125 153.8125 L 92.03125 168.53125 L 107.71875 168.53125 L 107.96875 153.5625 z"}},R.push(t[this.metadata.affiliation])),this.metadata.cyberspace&&(t={Friend:{type:"path",stroke:!1,fill:e,d:"m 135,150 40,-40 0,40 z"},Hostile:{type:"path",stroke:!1,fill:e,d:"m 150,78 0,44 22,-22 z"},Neutral:{type:"path",stroke:!1,fill:e,d:"m 115,155 40,-40 0,40 z"},Unknown:{type:"path",stroke:!1,fill:e,d:"M 150 65.7 L 150 134 C 176 123 176 77.2 150 65.7 z"}},R.push(t[this.metadata.affiliation])),this.style.fill&&this.style.frame&&this.metadata.notpresent&&!this.metadata.unframed){switch((C={type:this.metadata.baseGeometry.g.type}).type){case"path":C.d=this.metadata.baseGeometry.g.d;break;case"circle":C.cx=this.metadata.baseGeometry.g.cx,C.cy=this.metadata.baseGeometry.g.cy,C.r=this.metadata.baseGeometry.g.r}C.fill=!1,C.stroke=this.colors.white[this.metadata.affiliation],C.strokewidth=parseFloat(this.style.strokeWidth)+1,C.strokedasharray=this.metadata.notpresent,R.push(C)}return{pre:E,post:R,bbox:this.metadata.baseGeometry.bbox}}function R(I){var t,E,R=[],e=[],A=new I.BBox({x1:50,x2:150,y1:50,y2:150}),C=[],T=[],S=[],N=[];if(this.style.icon){var O=this.colors.fillColor[this.metadata.affiliation],G=this.colors.fillColor.Neutral;E=this.colors.iconColor[this.metadata.affiliation];var o=this.colors.iconFillColor[this.metadata.affiliation],M=this.colors.none[this.metadata.affiliation],i=this.colors.black[this.metadata.affiliation],L=this.colors.white[this.metadata.affiliation],s=(this.metadata.STD2525?"2525":"APP6")+","+this.metadata.dimension+this.metadata.affiliation+this.metadata.notpresent+this.metadata.numberSIDC+",frame:"+this.style.frame+",alternateMedal:"+this.style.alternateMedal+",colors:{fillcolor:"+O+",neutralColor"+G+",iconColor:"+E+",iconFillColor:"+o+",none:"+M+",black:"+i+",white:"+L+"}";if(C=I._iconCache.hasOwnProperty(s)?I._iconCache[s].iconParts:(I._iconCache[s]={},I._iconCache[s].iconParts=I._getIconParts(this.metadata,this.colors,this.metadata.STD2525,this.style.monoColor,this.style.alternateMedal)),this.metadata.numberSIDC||(-1!=["WMGX--","WMMX--","WMFX--","WMX---","WMSX--"].indexOf(this.metadata.functionid)&&(A.y1=10,"Unknown"!=this.metadata.affiliation&&(A.x2=this.metadata.baseGeometry.bbox.x2+20)),I._iconCache[s].hasOwnProperty("letterSIDC")?(t=I._iconCache[s].letterSIDC.icons,N=I._iconCache[s].letterSIDC.bbox):"function"==typeof I._getIcons.letter?(I._iconCache[s].letterSIDC=I._getIcons.letter(I,C,this.metadata.STD2525),t=I._iconCache[s].letterSIDC.icons,N=I._iconCache[s].letterSIDC.bbox):console.warn("ms._getIcons.letter() is not present, you will need to load functionality for letter based SIDCs")),this.metadata.numberSIDC){var n=String(this.options.sidc).substr(4,2);I._iconCache[s].hasOwnProperty("numberSIDC")?I._iconCache[s].numberSIDC.symbolSet.hasOwnProperty(n)?(t=I._iconCache[s].numberSIDC.symbolSet[n].icons,T=I._iconCache[s].numberSIDC.symbolSet[n].m1,S=I._iconCache[s].numberSIDC.symbolSet[n].m2,N=I._iconCache[s].numberSIDC.symbolSet[n].bbox):"function"==typeof I._getIcons.number?(I._iconCache[s].numberSIDC.symbolSet[n]=I._getIcons.number(I,n,C,this.metadata.STD2525),t=I._iconCache[s].numberSIDC.symbolSet[n].icons,T=I._iconCache[s].numberSIDC.symbolSet[n].m1,S=I._iconCache[s].numberSIDC.symbolSet[n].m2,N=I._iconCache[s].numberSIDC.symbolSet[n].bbox):console.warn("ms._getIcons.number() is not present, you will need to load functionality for number based SIDCs"):(I._iconCache[s].numberSIDC={},I._iconCache[s].numberSIDC.symbolSet={},"function"==typeof I._getIcons.number?(I._iconCache[s].numberSIDC.symbolSet[n]=I._getIcons.number(I,n,C,this.metadata.STD2525),t=I._iconCache[s].numberSIDC.symbolSet[n].icons,T=I._iconCache[s].numberSIDC.symbolSet[n].m1,S=I._iconCache[s].numberSIDC.symbolSet[n].m2,N=I._iconCache[s].numberSIDC.symbolSet[n].bbox):console.warn("ms._getIcons.number() is not present, you will need to load functionality for number based SIDCs"))}var a=[{type:"path",stroke:!1,fill:E=this.colors.iconColor[this.metadata.affiliation],d:"m 94.8206,78.1372 c -0.4542,6.8983 0.6532,14.323 5.3424,19.6985 4.509,5.6933 11.309,9.3573 14.98,15.7283 3.164,6.353 -0.09,14.245 -5.903,17.822 -7.268,4.817 -18.6219,2.785 -22.7328,-5.249 -1.5511,-2.796 -2.3828,-5.931 -2.8815,-9.071 -3.5048,0.416 -7.0093,0.835 -10.5142,1.252 0.8239,8.555 5.2263,17.287 13.2544,21.111 7.8232,3.736 17.1891,3.783 25.3291,1.052 8.846,-3.103 15.737,-11.958 15.171,-21.537 0.05,-6.951 -4.272,-12.85 -9.134,-17.403 -4.526,-4.6949 -11.048,-8.3862 -12.401,-15.2748 -1.215,-2.3639 -0.889,-8.129 -0.889,-8.129 z m -0.6253,-20.5177 0,11.6509 11.6527,0 0,-11.6509 z"}];if(this.metadata.numberSIDC){var l=t[this.metadata.functionid.substr(0,6)];if(void 0===l&&95<=this.metadata.functionid.substr(4,2)&&(l=t[this.metadata.functionid.substr(0,4)+"00"]),void 0===l)"000000"!=this.metadata.functionid.substr(0,6)&&""!=this.metadata.functionid.substr(0,6)&&(e.push(a),this.validIcon=!1);else{var r=Number(this.metadata.functionid.substr(0,6));this.metadata.dismounted&&110301<=r&&r<=110403&&("00"!=this.metadata.functionid.substr(6,2)&&"00"!=this.metadata.functionid.substr(8,2)&&(l=[I._scale(.5,l)]),"00"==this.metadata.functionid.substr(6,2)&&"00"!=this.metadata.functionid.substr(8,2)&&(l=[I._translate(0,-10,I._scale(.7,l))]),"00"!=this.metadata.functionid.substr(6,2)&&"00"==this.metadata.functionid.substr(8,2)&&(l=[I._translate(0,10,I._scale(.7,l))])),e.push(l)}if(N.hasOwnProperty(this.metadata.functionid.substr(0,6))&&(A=new I.BBox(N[this.metadata.functionid.substr(0,6)])),"95"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]),"96"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.DIVISION AND BELOW SUPPORT"]),"97"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.CORPS SUPPORT"]),"98"==this.metadata.functionid.substr(4,2)&&e.push(C["GR.IC.FF.THEATRE SUPPORT"]),"00"!=this.metadata.functionid.substr(6,2)){var P=T[this.metadata.functionid.substr(6,2)];void 0===P?this.validIcon=!1:e.push(P)}if("00"!=this.metadata.functionid.substr(8,2)){var y=S[this.metadata.functionid.substr(8,2)];void 0===y?this.validIcon=!1:e.push(y)}}else{var c=this.options.sidc.substr(0,1)+"-"+this.options.sidc.substr(2,1)+"-"+this.options.sidc.substr(4,6);t.hasOwnProperty(c)?e.push(t[c]):"------"!=this.options.sidc.substr(4,6)&&""!=this.options.sidc.substr(4,6)&&(e.push(a),this.validIcon=!1),N[c]&&(A=new I.BBox(N[c]))}}return this.style.frame&&this.metadata.fill&&!this.style.monoColor&&!this.metadata.controlMeasure||0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:R,post:e,bbox:A}}function e(I){var t,E=[],R=[],e=new I.BBox(this.metadata.baseGeometry.bbox),A=this.style.frameColor?this.style.frameColor[this.metadata.affiliation]:this.colors.iconColor[this.metadata.affiliation],C=new I.BBox,T=Number(this.style.hqStaffLength||I._hqStaffLength);if(this.metadata.headquarters&&0<T){var S=100;-1<["AirFriend","AirNeutral","GroundFriend","GroundNeutral","SeaNeutral","SubsurfaceNeutral"].indexOf(this.metadata.dimension+this.metadata.affiliation)&&(S=e.y2),this.metadata.dimensionType+this.metadata.affiliationType=="SubsurfaceFriend"&&(S=e.y1),t={type:"path",d:"M"+e.x1+","+S+" L"+e.x1+","+(e.y2+T)},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.y2=e.y2+T}if(this.metadata.taskForce){var N={"Corps/MEF":110,Army:145,"Army Group/front":180,"Region/Theater":215};t={type:"path",d:"M"+(100-(N=N[this.metadata.echelon]||90)/2)+","+e.y1+" L"+(100-N/2)+","+(e.y1-40)+" "+(100+N/2)+","+(e.y1-40)+" "+(100+N/2)+","+e.y1},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.x1=Math.min(e.x1,100-N/2),C.x2=Math.max(e.x2,100+N/2),C.y1=e.y1-40}if(this.metadata.installation){var O=0;-1<["AirHostile","GroundHostile","SeaHostile"].indexOf(this.metadata.dimension+this.metadata.affiliation)&&(O=14),-1<["AirUnknown","GroundUnknown","SeaUnknown","AirFriend","SeaFriend"].indexOf(this.metadata.dimension+this.metadata.affiliation)&&(O=2),t={type:"path",fill:A,d:"M85,"+(e.y1+O-this.style.strokeWidth/2)+" 85,"+(e.y1-10)+" 115,"+(e.y1-10)+" 115,"+(e.y1+O-this.style.strokeWidth/2)+" 100,"+(e.y1-this.style.strokeWidth)+" Z"},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.merge({y1:e.y1-10})}if(this.metadata.feintDummy){var G=e.y1-0-e.width()/2;t={type:"path",strokedasharray:I._dashArrays.feintDummy,d:"M100,"+G+" L"+e.x1+","+(e.y1-0)+" M100,"+G+" L"+e.x2+","+(e.y1-0)},0<this.style.outlineWidth&&E.push(I.outline(t,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push(t),C.merge({y1:G})}if(this.metadata.echelon){var o=this.metadata.installation?15:0,M={"Team/Crew":{g:[{type:"circle",cx:100,cy:e.y1-20,r:15},{type:"path",d:"M80,"+(e.y1-10)+"L120,"+(e.y1-30)}],bbox:{y1:e.y1-40-o}},Squad:{g:[{type:"circle",fill:A,cx:100,cy:e.y1-20,r:7.5}],bbox:{y1:e.y1-20-7.5-o}},Section:{g:[{type:"circle",fill:A,cx:115,cy:e.y1-20,r:7.5},{type:"circle",fill:A,cx:85,cy:e.y1-20,r:7.5}],bbox:{y1:e.y1-20-7.5-o}},"Platoon/detachment":{g:[{type:"circle",fill:A,cx:100,cy:e.y1-20,r:7.5},{type:"circle",fill:A,cx:70,cy:e.y1-20,r:7.5},{type:"circle",fill:A,cx:130,cy:e.y1-20,r:7.5}],bbox:{y1:e.y1-20-7.5-o}},"Company/battery/troop":{g:[{type:"path",d:"M100,"+(e.y1-10)+"L100,"+(e.y1-35)}],bbox:{y1:e.y1-40-o}},"Battalion/squadron":{g:[{type:"path",d:"M90,"+(e.y1-10)+"L90,"+(e.y1-35)},{type:"path",d:"M110,"+(e.y1-10)+"L110,"+(e.y1-35)}],bbox:{y1:e.y1-40-o}},"Regiment/group":{g:[{type:"path",d:"M100,"+(e.y1-10)+"L100,"+(e.y1-35)},{type:"path",d:"M120,"+(e.y1-10)+"L120,"+(e.y1-35)},{type:"path",d:"M80,"+(e.y1-10)+"L80,"+(e.y1-35)}],bbox:{y1:e.y1-40-o}},Brigade:{g:[{type:"path",d:"M87.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o}},Division:{g:[{type:"path",d:"M70,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:70,x2:130}},"Corps/MEF":{g:[{type:"path",d:"M52.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M87.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M122.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:52.5,x2:147.5}},Army:{g:[{type:"path",d:"M35,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M70,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M140,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:35,x2:165}},"Army Group/front":{g:[{type:"path",d:"M17.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M52.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M87.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M122.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M157.5,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:17.5,x2:182.5}},"Region/Theater":{g:[{type:"path",d:"M0,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M35,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M70,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M105,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M140,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25 M175,"+(e.y1-10)+" l25,-25 m0,25 l-25,-25"}],bbox:{y1:e.y1-15-25-o,x1:0,x2:200}},Command:{g:[{type:"path",d:"M70,"+(e.y1-22.5)+" l25,0 m-12.5,12.5 l0,-25 M105,"+(e.y1-22.5)+" l25,0 m-12.5,12.5 l0,-25"}],bbox:{y1:e.y1-15-25-o,x1:70,x2:130}}};M.hasOwnProperty(this.metadata.echelon)&&(t=M[this.metadata.echelon].g,0<this.style.outlineWidth&&E.push(I.outline({type:"translate",x:0,y:-o,draw:t},this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push({type:"translate",x:0,y:-o,draw:t}),C.merge(M[this.metadata.echelon].bbox))}if(this.metadata.mobility){this.style.frame||(e.y2=this.bbox.y2),"Neutral"==this.metadata.affiliation&&("Towed"!=this.metadata.mobility&&"Short towed array"!=this.metadata.mobility&&"Long towed Array"!=this.metadata.mobility||(e.y2+=8),"Over snow (prime mover)"!=this.metadata.mobility&&"Sled"!=this.metadata.mobility||(e.y2+=13));var i={"Wheeled limited cross country":{g:[{type:"path",d:"M 53,1 l 94,0"},{type:"circle",cx:58,cy:8,r:8},{type:"circle",cx:142,cy:8,r:8}],bbox:{y2:e.y2+16}},"Wheeled cross country":{g:[{type:"path",d:"M 53,1 l 94,0"},{type:"circle",cx:58,cy:8,r:8},{type:"circle",cx:142,cy:8,r:8},{type:"circle",cx:100,cy:8,r:8}],bbox:{y2:e.y2+16}},Tracked:{g:[{type:"path",d:"M 53,1 l 100,0 c15,0 15,15 0,15 l -100,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:e.y2+18,x1:42,x2:168}},"Wheeled and tracked combination":{g:[{type:"circle",cx:58,cy:8,r:8},{type:"path",d:"M 83,1 l 70,0 c15,0 15,15 0,15 l -70,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:e.y2+16,x2:168}},Towed:{g:[{type:"path",d:"M 63,1 l 74,0"},{type:"circle",cx:58,cy:3,r:8},{type:"circle",cx:142,cy:3,r:8}],bbox:{y2:e.y2+10}},Rail:{g:[{type:"path",d:"M 53,1 l 96,0"},{type:"circle",cx:58,cy:8,r:8},{type:"circle",cx:73,cy:8,r:8},{type:"circle",cx:127,cy:8,r:8},{type:"circle",cx:142,cy:8,r:8}],bbox:{y2:e.y2+16}},"Over snow (prime mover)":{g:[{type:"path",d:"M 50,-9 l10,10 90,0"}],bbox:{y2:e.y2+9}},Sled:{g:[{type:"path",d:"M 145,-12 c15,0 15,15 0,15 l -90,0 c-15,0 -15,-15 0,-15"}],bbox:{y2:e.y2+15,x1:42,x2:168}},"Pack animals":{g:[{type:"path",d:"M 80,20 l 10,-20 10,20 10,-20 10,20"}],bbox:{y2:e.y2+20}},Barge:{g:[{type:"path",d:"M 50,1 l 100,0 c0,10 -100,10 -100,0"}],bbox:{y2:e.y2+10}},Amphibious:{g:[{type:"path",d:"M 65,10 c 0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0 0,10 10,10 10,0\t0,-10 10,-10 10,0"}],bbox:{y2:e.y2+20}},"Short towed array":{g:[{type:"path",fill:A,d:"M 50,5 l 100,0 M50,0 l10,0 0,10 -10,0 z M150,0 l-10,0 0,10 10,0 z M100,0 l5,5 -5,5 -5,-5 z"}],bbox:{y2:e.y2+10}},"Long towed Array":{g:[{type:"path",fill:A,d:"M 50,5 l 100,0 M50,0 l10,0 0,10 -10,0 z M150,0 l-10,0 0,10 10,0 z M105,0 l-10,0 0,10 10,0 z M75,0 l5,5 -5,5 -5,-5 z M125,0 l5,5 -5,5 -5,-5 z"}],bbox:{y2:e.y2+10}}};i.hasOwnProperty(this.metadata.mobility)&&(t=i[this.metadata.mobility].g,0<this.style.outlineWidth&&E.push(I.outline({type:"translate",x:0,y:e.y2,draw:t},this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),R.push({type:"translate",x:0,y:e.y2,draw:t}),C.merge(i[this.metadata.mobility].bbox))}if(this.metadata.leadership){var L={Friend:{type:"path",d:"m 45,60 55,-25 55,25"}}[this.metadata.affiliation];L&&(E.push(L),C.merge({y1:e.y1-20}))}for(var s=0;s<E.length;s++)E[s].hasOwnProperty("fill")||(E[s].fill=!1),E[s].hasOwnProperty("stroke")||(E[s].stroke=A),E[s].hasOwnProperty("strokewidth")||(E[s].strokewidth=this.style.strokeWidth);for(s=0;s<R.length;s++)R[s].hasOwnProperty("fill")||(R[s].fill=!1),R[s].hasOwnProperty("stroke")||(R[s].stroke=A),R[s].hasOwnProperty("strokewidth")||(R[s].strokewidth=this.style.strokeWidth);return{pre:E,post:R,bbox:C}}function A(I){var t=[],E=[],R=this.metadata.baseGeometry.bbox,e=R.y1,A=R.y2;if(this.metadata.condition)if(this.metadata.fill&&""===this.style.monoColor&&!this.style.simpleStatusModifier){!this.metadata.frame&&this.metadata.iconBottom&&(A=this.metadata.iconBottom),this.options.headquartersElement&&(A+=35),A+=this.metadata.mobility?25:5,E.push({type:"path",strokewidth:this.style.strokeWidth,fill:{FullyCapable:"rgb(0,255,0)",Damaged:"rgb(255,255,0)",Destroyed:"rgb(255,0,0)",FullToCapacity:"rgb(0, 180, 240)"}[this.metadata.condition],stroke:this.colors.frameColor[this.metadata.affiliation],d:"M"+R.x1+","+A+" l"+R.width()+",0 0,25 -"+R.width()+",0 z"}),A+=25,0<this.style.outlineWidth&&t.push(I.outline(E,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}else"Damaged"!=this.metadata.condition&&"Destroyed"!=this.metadata.condition||(E.push({type:"path",d:"M150,20 L50,180",strokewidth:2*this.style.strokeWidth,stroke:this.colors.frameColor[this.metadata.affiliation]}),e=20,A=180),"Destroyed"==this.metadata.condition&&E.push({type:"path",d:"M50,20 L150,180",strokewidth:2*this.style.strokeWidth,stroke:this.colors.frameColor[this.metadata.affiliation]}),0<this.style.outlineWidth&&t.push(I.outline(E,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor));return{pre:t,post:E,bbox:{y1:e,y2:A}}}function C(I){var t=[],E=[],R=this.bbox,e=R.x1,A=R.x2,C=R.y1,T=R.y2;if(""!==this.options.engagementBar){C-=6;var S=this.style.fontfamily,N=this.colors.iconColor[this.metadata.affiliation]||this.colors.iconColor.Friend;E.push({type:"text",text:this.options.engagementBar,x:100,y:R.y1-11,textanchor:"middle",fontsize:22,fontfamily:S,fontweight:"bold",fill:N,stroke:!1});var O=!1;if(this.metadata.fill&&""===this.style.monoColor){O={TARGET:"rgb(255, 0, 0)","NON-TARGET":"rgb(255, 255, 255)",EXPIRED:"rgb(255, 120, 0)"}[this.options.engagementType.toUpperCase()]||this.colors.fillColor[this.metadata.affiliation]}var G,o=Math.max(R.width(),16*this.options.engagementBar.length);if(e=Math.min(e,100-o/2),A=Math.max(A,100+o/2),E.unshift({type:"path",strokewidth:this.style.strokeWidth,fill:O,stroke:this.colors.frameColor[this.metadata.affiliation],d:"M"+(100-o/2)+","+C+" l"+o+",0 0,-25 -"+o+",0 z"}),C-=25,0<this.style.outlineWidth)G=this.metadata.fill&&""===this.style.monoColor?E[0]:E,t.push(I.outline(G,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}return{pre:t,post:E,bbox:{x1:e,x2:A,y1:C,y2:T}}}function T(I){var t=[],E=[],R=this.metadata.baseGeometry.bbox,e=this.colors.frameColor[this.metadata.affiliation];if(this.metadata.dimensionUnknown&&e&&E.push({type:"text",text:"?",x:100,y:127,fill:e,fontfamily:this.style.fontfamily,fontsize:80,fontweight:"bold",textanchor:"middle"}),this.metadata.baseGeometry.g&&e){var A=10;("Unknown"==this.metadata.affiliation||"Hostile"==this.metadata.affiliation&&"Subsurface"!=this.metadata.dimension)&&(A=-10),"Exercise"==this.metadata.context&&(this.metadata.joker||this.metadata.faker||E.push({type:"text",text:"X",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),this.metadata.joker&&E.push({type:"text",text:"J",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),this.metadata.faker&&E.push({type:"text",text:"K",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),R={x2:R.x2+A+22,y1:35}),"Simulation"==this.metadata.context&&(E.push({type:"text",text:"S",x:R.x2+A,y:60,fill:e,fontfamily:this.style.fontfamily,fontsize:35,fontweight:"bold",textanchor:"start"}),R=new I.BBox({x2:R.x2+A+22,y1:35}))}return 0<this.style.outlineWidth&&t.push(I.outline(E,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:t,post:E,bbox:R}}function S(I){var t,E,R=[],e=[],A=this.metadata.baseGeometry.bbox,S=("object"==typeof this.style.infoColor?this.style.infoColor[this.metadata.affiliation]:this.style.infoColor)||this.colors.iconColor[this.metadata.affiliation]||this.colors.iconColor.Friend,N=this.style.fontfamily,O=this.style.infoSize,C="object"==typeof this.style.infoBackground?this.style.infoBackground[this.metadata.affiliation]:this.style.infoBackground,T="object"==typeof this.style.infoBackground?this.style.infoBackground[this.metadata.affiliation]:this.style.infoBackground,G=new I.BBox,o=20;function M(I){var t,E=[];for(var R in I)if(this.options.hasOwnProperty(R)&&""!=this.options[R]){if(!I.hasOwnProperty(R))continue;for(var e=0;e<(I[R].length||1);e++){var A;if(t={y2:(A=Array.isArray(I[R])?I[R][e]:I[R]).y,y1:A.y-A.fontsize},"start"==A.textanchor&&(t.x1=A.x,t.x2=A.x+i(this.options[R])*(A.fontsize/O)),"middle"==A.textanchor){var C=i(this.options[R])*(A.fontsize/O);t.x1=A.x-C/2,t.x2=A.x+C/2}"end"==A.textanchor&&(t.x1=A.x-i(this.options[R])*(A.fontsize/O),t.x2=A.x),G.merge(t);var T={type:"text",fontfamily:N,fill:S};A.hasOwnProperty("fill")&&(T.fill=A.fill),A.hasOwnProperty("stroke")&&(T.stroke=A.stroke),A.hasOwnProperty("textanchor")&&(T.textanchor=A.textanchor),A.hasOwnProperty("fontsize")&&(T.fontsize=A.fontsize),A.hasOwnProperty("fontweight")&&(T.fontweight=A.fontweight),T.x=A.x,T.y=A.y,T.text=this.options[R],E.push(T)}}return E}function i(I){if(0==I.length)return 0;for(var t={" ":9,"!":10,'"':15,"#":17,$:17,"%":27,"&":22,"'":8,"(":10,")":10,"*":12,"+":18,",":9,"-":10,".":9,"/":9,0:17,1:17,2:17,3:17,4:17,5:17,6:17,7:17,8:17,9:17,":":10,";":10,"<":18,"=":18,">":18,"?":19,"@":30,A:22,B:22,C:22,D:22,E:21,F:19,G:24,H:22,I:9,J:17,K:22,L:19,M:25,N:22,O:24,P:21,Q:24,R:22,S:21,T:19,U:22,V:21,W:29,X:21,Y:21,Z:19,"[":10,"]":10,"^":18,_:17,"`":10,a:17,b:19,c:17,d:19,e:17,f:10,g:19,h:19,i:9,j:9,k:17,l:9,m:27,n:19,o:19,p:19,q:19,r:12,s:17,t:10,u:19,v:17,w:24,x:17,y:17,z:15,"{":12,"|":9,"}":12,"~":18},E=0,R=0;R<I.length;R++)E+=O/30*(t[I[R]]?t[I[R]]:28.5);return E+=o}if(this.metadata.numberSIDC){if(!I._labelCache.hasOwnProperty("number"))for(t in I._labelCache.number={},I._labelOverrides.number)I._labelOverrides.number.hasOwnProperty(t)&&I._labelOverrides.number[t].call(this,I._labelCache.number);if(E=this.metadata.functionid.substr(0,6),this.metadata.controlMeasure&&I._labelCache.number.hasOwnProperty(E))return e.push(M.call(this,I._labelCache.number[E])),0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:R,post:e,bbox:G}}else{if(!I._labelCache.hasOwnProperty("letter"))for(t in I._labelCache.letter={},I._labelOverrides.letter)I._labelOverrides.letter.hasOwnProperty(t)&&I._labelOverrides.letter[t].call(this,I._labelCache.letter);if(E=this.options.sidc.substr(0,1)+"-"+this.options.sidc.substr(2,1)+"-"+this.options.sidc.substr(4,6),I._labelCache.letter.hasOwnProperty(E))return e.push(M.call(this,I._labelCache.letter[E])),0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor)),{pre:R,post:e,bbox:G}}var L,s,n,a=this.options.quantity||this.options.reinforcedReduced||this.options.staffComments||this.options.additionalInformation||this.options.evaluationRating||this.options.combatEffectiveness||this.options.signatureEquipment||this.options.higherFormation||this.options.hostile||this.options.iffSif||this.options.sigint||this.options.uniqueDesignation||this.options.type||this.options.dtg||this.options.altitudeDepth||this.options.location||this.options.speed||this.options.specialHeadquarters||this.options.platformType||this.options.equipmentTeardownTime||this.options.commonIdentifier||this.options.auxiliaryEquipmentIndicator||this.options.headquartersElement||this.options.installationComposition||this.options.guardedUnit||this.options.specialDesignator;if(this.style.infoFields&&a){this.options.specialHeadquarters&&e.push((L=this.options.specialHeadquarters,s=42,n=115,1==L.length&&(s=45,n=115),3==L.length&&(s=35,n=110),4<=L.length&&(s=32,n=110),{type:"text",text:L,x:100,y:n,textanchor:"middle",fontsize:s,fontfamily:N,fill:S,stroke:!1,fontweight:"bold"})),this.options.quantity&&!this.metadata.dismounted&&(e.push({type:"text",text:this.options.quantity,x:100,y:A.y1-10,textanchor:"middle",fontsize:O,fontfamily:N,fill:S,stroke:!1}),G.y1=A.y1-10-O),this.options.headquartersElement&&(e.push({type:"text",text:this.options.headquartersElement,x:100,y:A.y2+35,textanchor:"middle",fontsize:35,fontfamily:N,fontweight:"bold",fill:S,stroke:!1}),G.y2=A.y2+35);var l,r={L1:"",L2:"",L3:"",L4:"",L5:"",R1:"",R2:"",R3:"",R4:"",R5:""};if(isNaN(this.options.sidc)||"Air"!=this.metadata.baseDimension||(r.R1=this.options.uniqueDesignation,r.R2=this.options.iffSif,r.R3=this.options.type,(this.options.speed||this.options.altitudeDepth)&&(l=[],this.options.speed&&l.push(this.options.speed),this.options.altitudeDepth&&l.push(this.options.altitudeDepth),r.R4=l.join("/")),(this.options.staffComments||this.options.additionalInformation)&&(l=[],this.options.staffComments&&l.push(this.options.staffComments),this.options.additionalInformation&&l.push(this.options.additionalInformation),r.R5=l.join("/"))),(isNaN(this.options.sidc)||"Ground"==this.metadata.baseDimension)&&(r.L1=this.options.dtg,(this.options.altitudeDepth||this.options.location)&&(l=[],this.options.altitudeDepth&&l.push(this.options.altitudeDepth),this.options.location&&l.push(this.options.location),r.L2=l.join("/")),r.L4=this.options.uniqueDesignation,r.L5=this.options.speed,r.R2=this.options.staffComments,r.R4=this.options.higherFormation,(this.options.evaluationRating||this.options.combatEffectiveness||this.options.signatureEquipment||this.options.hostile||this.options.iffSif)&&(l=[],this.options.evaluationRating&&l.push(this.options.evaluationRating),this.options.combatEffectiveness&&l.push(this.options.combatEffectiveness),this.options.signatureEquipment&&l.push(this.options.signatureEquipment),this.options.hostile&&l.push(this.options.hostile),this.options.iffSif&&l.push(this.options.iffSif),r.R5=l.join("/")),isNaN(this.options.sidc)||this.metadata.unit?((this.options.type||this.options.platformType||this.options.equipmentTeardownTime)&&(l=[],this.options.type&&l.push(this.options.type),this.options.platformType&&l.push(this.options.platformType),this.options.equipmentTeardownTime&&l.push(this.options.equipmentTeardownTime),r.L3=l.join("/")),r.R1=this.options.reinforcedReduced,this.metadata.activity&&(r.R1=this.options.country),(this.options.additionalInformation||this.options.commonIdentifier)&&(l=[],this.options.additionalInformation&&l.push(this.options.additionalInformation),this.options.commonIdentifier&&l.push(this.options.commonIdentifier),r.R3=l.join("/"))):((this.options.type||this.options.platformType||this.options.commonIdentifier||this.options.installationComposition)&&(l=[],this.options.type&&l.push(this.options.type),this.options.platformType&&l.push(this.options.platformType),this.options.commonIdentifier&&l.push(this.options.commonIdentifier),this.options.installationComposition&&l.push(this.options.installationComposition),r.L3=l.join("/")),r.R1=this.options.country,(this.options.additionalInformation||this.options.equipmentTeardownTime)&&(l=[],this.options.additionalInformation&&l.push(this.options.additionalInformation),this.options.equipmentTeardownTime&&l.push(this.options.equipmentTeardownTime),r.R3=l.join("/")))),this.metadata.dismounted&&(this.options.quantity&&(e.push({type:"text",text:this.options.quantity,x:100,y:A.y2+O,textanchor:"middle",fontsize:O,fontfamily:N,fill:S,stroke:!1}),G.y2=A.y2+O),r.L1=this.options.dtg,(this.options.altitudeDepth||this.options.location)&&(l=[],this.options.altitudeDepth&&l.push(this.options.altitudeDepth),this.options.location&&l.push(this.options.location),r.L2=l.join("/")),(this.options.type||this.options.platformType||this.options.commonIdentifier)&&(l=[],this.options.type&&l.push(this.options.type),this.options.platformType&&l.push(this.options.platformType),this.options.commonIdentifier&&l.push(this.options.commonIdentifier),r.L3=l.join("/")),r.L4=this.options.uniqueDesignation,r.L5=this.options.speed,r.R1=this.options.country,r.R2=this.options.staffComments,this.options.additionalInformation&&(l=[],this.options.additionalInformation&&l.push(this.options.additionalInformation),r.R3=l.join("/")),r.R4=this.options.higherFormation,(this.options.evaluationRating||this.options.combatEffectiveness||this.options.signatureEquipment||this.options.hostile||this.options.iffSif)&&(l=[],this.options.evaluationRating&&l.push(this.options.evaluationRating),this.options.combatEffectiveness&&l.push(this.options.combatEffectiveness),this.options.signatureEquipment&&l.push(this.options.signatureEquipment),this.options.hostile&&l.push(this.options.hostile),this.options.iffSif&&l.push(this.options.iffSif),r.R5=l.join("/"))),isNaN(this.options.sidc)||"Sea"!=this.metadata.baseDimension||((this.options.guardedUnit||this.options.specialDesignator)&&(l=[],this.options.guardedUnit&&l.push(this.options.guardedUnit),this.options.specialDesignator&&l.push(this.options.specialDesignator),r.L1=l.join("/")),r.R1=this.options.uniqueDesignation,r.R2=this.options.type,r.R3=this.options.iffSif,(this.options.staffComments||this.options.additionalInformation)&&(l=[],this.options.staffComments&&l.push(this.options.staffComments),this.options.additionalInformation&&l.push(this.options.additionalInformation),r.R4=l.join("/")),(this.options.location||this.options.speed)&&(l=[],this.options.location&&l.push(this.options.location),this.options.speed&&l.push(this.options.speed),r.R5=l.join("/"))),isNaN(this.options.sidc)||"Subsurface"!=this.metadata.baseDimension||(r.L1=this.options.specialDesignator,r.R1=this.options.uniqueDesignation,r.R2=this.options.type,r.R3=this.options.altitudeDepth,r.R4=this.options.staffComments,r.R5=this.options.additionalInformation),G.x1=A.x1-Math.max(this.options.specialHeadquarters?(i(this.options.specialHeadquarters)-this.metadata.baseGeometry.bbox.width())/2:0,this.options.quantity?(i(this.options.quantity)-this.metadata.baseGeometry.bbox.width())/2:0,i(r.L1),i(r.L2),i(r.L3),i(r.L4),i(r.L5)),G.x2=A.x2+Math.max(this.options.specialHeadquarters?(i(this.options.specialHeadquarters)-this.metadata.baseGeometry.bbox.width())/2:0,this.options.quantity?(i(this.options.quantity)-this.metadata.baseGeometry.bbox.width())/2:0,i(r.R1),i(r.R2),i(r.R3),i(r.R4),i(r.R5)),(r.L1||r.R1)&&(G.y1=Math.min(G.y1,100-2.5*O)),(r.L2||r.R2)&&(G.y1=Math.min(G.y1,100-1.5*O)),(r.L4||r.R4)&&(G.y2=Math.max(G.y2,100+1.7*O)),(r.L5||r.R5)&&(G.y2=Math.max(G.y2,100+2.7*O)),this.style.infoBackground){var P={x1:100,y1:1e3,y2:0},y={x2:100,y1:1e3,y2:0};r.L1&&(P={x1:Math.min(P.x1,A.x1-i(r.L1)),x2:A.x1-o/2,y1:Math.min(P.y1,100-2.5*O),y2:Math.max(P.y2,100-1.5*O+o/2)}),r.L2&&(P={x1:Math.min(P.x1,A.x1-i(r.L2)),x2:A.x1-o/2,y1:Math.min(P.y1,100-1.5*O),y2:Math.max(P.y2,100-.5*O+o/2)}),r.L3&&(P={x1:Math.min(P.x1,A.x1-i(r.L3)),x2:A.x1-o/2,y1:Math.min(P.y1,100-.5*O),y2:Math.max(P.y2,100+.5*O+o/2)}),r.L4&&(P={x1:Math.min(P.x1,A.x1-i(r.L4)),x2:A.x1-o/2,y1:Math.min(P.y1,100+.5*O),y2:Math.max(P.y2,100+1.5*O+o/2)}),r.L5&&(P={x1:Math.min(P.x1,A.x1-i(r.L5)),x2:A.x1-o/2,y1:Math.min(P.y1,100+1.5*O),y2:Math.max(P.y2,100+2.5*O+o/2)}),P.hasOwnProperty("x2")&&(G.x1-=O/2,e.push({type:"path",d:"M "+(P.x1-O/2)+","+(P.y1+O/2)+" "+P.x1+","+P.y1+" "+P.x2+","+P.y1+" "+P.x2+","+P.y2+" "+(P.x1-O/2)+","+P.y2+"z",fill:C,stroke:T||!1})),r.R1&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R1)),y1:Math.min(y.y1,100-2.5*O),y2:Math.max(y.y2,100-1.5*O+o/2)}),r.R2&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R2)),y1:Math.min(y.y1,100-1.5*O),y2:Math.max(y.y2,100-.5*O+o/2)}),r.R3&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R3)),y1:Math.min(y.y1,100-.5*O),y2:Math.max(y.y2,100+.5*O+o/2)}),r.R4&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R4)),y1:Math.min(y.y1,100+.5*O),y2:Math.max(y.y2,100+1.5*O+o/2)}),r.R5&&(y={x1:A.x2+o/2,x2:Math.max(y.x2,A.x2+i(r.R5)),y1:Math.min(y.y1,100+1.5*O),y2:Math.max(y.y2,100+2.5*O+o/2)}),y.hasOwnProperty("x1")&&(G.x2+=O/2,e.push({type:"path",d:"M "+y.x1+","+y.y1+" "+(y.x2+O/2)+","+y.y1+" "+(y.x2+O/2)+","+(y.y2-O/2)+" "+y.x2+","+y.y2+" "+y.x1+","+y.y2+"z",fill:C,stroke:T||!1}))}r.L1&&e.push({type:"text",text:r.L1,x:A.x1-o,y:100-1.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L2&&e.push({type:"text",text:r.L2,x:A.x1-o,y:100-.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L3&&e.push({type:"text",text:r.L3,x:A.x1-o,y:100+.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L4&&e.push({type:"text",text:r.L4,x:A.x1-o,y:100+1.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.L5&&e.push({type:"text",text:r.L5,x:A.x1-o,y:100+2.5*O,textanchor:"end",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R1&&e.push({type:"text",text:r.R1,x:A.x2+o,y:100-1.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R2&&e.push({type:"text",text:r.R2,x:A.x2+o,y:100-.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R3&&e.push({type:"text",text:r.R3,x:A.x2+o,y:100+.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R4&&e.push({type:"text",text:r.R4,x:A.x2+o,y:100+1.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),r.R5&&e.push({type:"text",text:r.R5,x:A.x2+o,y:100+2.5*O,textanchor:"start",fontsize:O,fontfamily:N,fill:S,stroke:!1}),0<this.style.outlineWidth&&R.push(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}return{pre:R,post:e,bbox:G}}function N(I){var t=[],E=[],R=this.metadata.baseGeometry.bbox;""==this.metadata.baseGeometry.g&&(R=this.bbox);var e,A=new I.BBox,C=this.colors.iconColor[this.metadata.affiliation]||this.colors.iconColor.Friend;if(this.style.infoFields&&""!==this.options.direction){if(0==this.options.speedLeader){e=[{type:"rotate",degree:this.options.direction,x:100,y:100,draw:[{type:"path",fill:C,stroke:C,strokewidth:this.style.strokeWidth,d:"M100,100 l0,-75 -5,3 5,-15 5,15 -5,-3"}]}],A.y1=Math.min(100-95*Math.cos(this.options.direction/360*Math.PI*2),100),A.y2=Math.max(100-95*Math.cos(this.options.direction/360*Math.PI*2),100),A.x1=Math.min(100+95*Math.sin(this.options.direction/360*Math.PI*2),100),A.x2=Math.max(100+95*Math.sin(this.options.direction/360*Math.PI*2),100),"Ground"!=this.metadata.baseDimension&&""!=this.metadata.baseDimension||(this.metadata.headquarters?(e=[{type:"translate",x:R.x1-100,y:R.y2-(100-(this.style.hqStaffLength||I._hqStaffLength)),draw:e}],A.x1+=R.x1-100,A.x2+=R.x1-100):e=[{type:"translate",x:0,y:R.y2,draw:e},{type:"path",fill:C,stroke:C,strokewidth:this.style.strokeWidth,d:"M 100,"+R.y2+"l0,100"}]),A.y2+=R.y2+parseFloat(this.style.strokeWidth),E.push(e)}else{var T=this.options.speedLeader*(100/this.style.size),S=this.options.direction*Math.PI/180,N=-T*Math.cos(S),O=T*Math.sin(S);A.x1=Math.min(100,100+O),A.x2=Math.max(100,100+O),A.y1=Math.min(100,100+N),A.y2=Math.max(100,100+N),e={type:"path",fill:C,stroke:C,strokewidth:this.style.strokeWidth,d:"M 100,100 l"+O+","+N},t.push(e)}0<this.style.outlineWidth&&t.unshift(I.outline(e,this.style.outlineWidth,this.style.strokeWidth,"object"==typeof this.style.outlineColor?this.style.outlineColor[this.metadata.affiliation]:this.style.outlineColor))}return{pre:t,post:E,bbox:A}}function I(I){return void 0===I&&(I={}),{x1:void 0!==I.x1?I.x1:100,y1:void 0!==I.y1?I.y1:100,x2:void 0!==I.x2?I.x2:100,y2:void 0!==I.y2?I.y2:100,width:function(){return this.x2-this.x1},height:function(){return this.y2-this.y1},getSize:function(){return{height:this.y2-this.y1,width:this.x2-this.x1}},merge:function(I){return this.x1=I.x1<=this.x1?I.x1:this.x1,this.y1=I.y1<=this.y1?I.y1:this.y1,this.x2=I.x2>=this.x2?I.x2:this.x2,this.y2=I.y2>=this.y2?I.y2:this.y2,this}}}var O={AirHostile:{g:{type:"path",d:"M 45,150 L45,70 100,20 155,70 155,150"},bbox:new I({x1:45,y1:20,x2:155,y2:150})},AirFriend:{g:{type:"path",d:"M 155,150 C 155,50 115,30 100,30 85,30 45,50 45,150"},bbox:new I({x1:45,y1:30,x2:155,y2:150})},AirNeutral:{g:{type:"path",d:"M 45,150 L 45,30,155,30,155,150"},bbox:new I({x1:45,y1:30,x2:155,y2:150})},AirUnknown:{g:{type:"path",d:"M 65,150 c -55,0 -50,-90 0,-90 0,-50 70,-50 70,0 50,0 55,90 0,90"},bbox:new I({x1:25,y1:20,x2:175,y2:150})},GroundHostile:{g:{type:"path",d:"M 100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new I({x1:28,y1:28,x2:172,y2:172})},GroundFriend:{g:{type:"path",d:"M25,50 l150,0 0,100 -150,0 z"},bbox:new I({x1:25,y1:50,x2:175,y2:150})},GroundNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},GroundUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new I({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},LandDismountedIndividualHostile:{g:{type:"path",d:"M 100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new I({x1:28,y1:28,x2:172,y2:172})},LandDismountedIndividualFriend:{g:{type:"path",d:"m 100,45 55,25 0,60 -55,25 -55,-25 0,-60 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},LandDismountedIndividualNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},LandDismountedIndividualUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new I({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},SeaHostile:{g:{type:"path",d:"M100,28 L172,100 100,172 28,100 100,28 Z"},bbox:new I({x1:28,y1:28,x2:172,y2:172})},SeaFriend:{g:{type:"circle",cx:100,cy:100,r:60},bbox:new I({x1:40,y1:40,x2:160,y2:160})},SeaNeutral:{g:{type:"path",d:"M45,45 l110,0 0,110 -110,0 z"},bbox:new I({x1:45,y1:45,x2:155,y2:155})},SeaUnknown:{g:{type:"path",d:"M63,63 C63,20 137,20 137,63 C180,63 180,137 137,137 C137,180 63,180 63,137 C20,137 20,63 63,63 Z"},bbox:new I({x1:30.75,y1:30.75,x2:169.25,y2:169.25})},SubsurfaceHostile:{g:{type:"path",d:"M45,50 L45,130 100,180 155,130 155,50"},bbox:new I({x1:45,y1:50,x2:155,y2:180})},SubsurfaceFriend:{g:{type:"path",d:"m 45,50 c 0,100 40,120 55,120 15,0 55,-20 55,-120"},bbox:new I({x1:45,y1:50,x2:155,y2:170})},SubsurfaceNeutral:{g:{type:"path",d:"M45,50 L45,170 155,170 155,50"},bbox:new I({x1:45,y1:50,x2:155,y2:170})},SubsurfaceUnknown:{g:{type:"path",d:"m 65,50 c -55,0 -50,90 0,90 0,50 70,50 70,0 50,0 55,-90 0,-90"},bbox:new I({x1:25,y1:50,x2:175,y2:180})},PositionMarker:{g:{type:"circle",cx:100,cy:100,r:15},bbox:new I({x1:85,y1:85,x2:115,y2:115})}},s=new function(){this._autoValidation=!1,this.version="2.0.0","object"==typeof console&&"object"!=typeof process&&console.info("milsymbol.js "+this.version+" - Copyright (c) 2018 M"+String.fromCharCode(229)+"ns Beckman http://www.spatialillusions.com")};function G(){this.bbox=new I,this.colors={},this.metadata={},this.octagonAnchor={x:50,y:50},this.options={},this.options.quantity="",this.options.reinforcedReduced="",this.options.staffComments="",this.options.additionalInformation="",this.options.evaluationRating="",this.options.combatEffectiveness="",this.options.signatureEquipment="",this.options.higherFormation="",this.options.hostile="",this.options.iffSif="",this.options.direction="",this.options.sigint="",this.options.uniqueDesignation="",this.options.type="",this.options.dtg="",this.options.altitudeDepth="",this.options.location="",this.options.speed="",this.options.speedLeader=0,this.options.specialHeadquarters="",this.options.country="",this.options.platformType="",this.options.equipmentTeardownTime="",this.options.commonIdentifier="",this.options.auxiliaryEquipmentIndicator="",this.options.headquartersElement="",this.options.installationComposition="",this.options.engagementBar="",this.options.engagementType="",this.options.guardedUnit="",this.options.specialDesignator="",this.style={},this.style.alternateMedal=!1,this.style.civilianColor=!0,this.style.colorMode="Light",this.style.fill=!0,this.style.fillOpacity=1,this.style.fontfamily="Arial",this.style.frame=!0,this.style.frameColor="",this.style.hqStaffLength=0,this.style.icon=!0,this.style.iconColor="",this.style.infoBackground="",this.style.infoBackgroundFrame="",this.style.infoColor="",this.style.infoFields=!0,this.style.infoSize=40,this.style.monoColor="",this.style.outlineColor="rgb(239, 239, 239)",this.style.outlineWidth=0,this.style.padding=0,this.style.simpleStatusModifier=!1,this.style.size=100,this.style.square=!1,this.style.standard="",this.style.strokeWidth=4,this.symbolAnchor={x:50,y:50},this.validIcon=!0,0<arguments.length&&this.setOptions.apply(this,arguments)}function o(I,t,E){this.options.sidc=this.options.sidc.toUpperCase();var R=""!=this.options.sidc.charAt(0)?this.options.sidc.charAt(0):"-",e=""!=this.options.sidc.charAt(1)?this.options.sidc.charAt(1):"-",A=""!=this.options.sidc.charAt(2)?this.options.sidc.charAt(2):"-",C=""!=this.options.sidc.charAt(3)?this.options.sidc.charAt(3):"-",T=t.functionid=""!=this.options.sidc.substr(4,6)?this.options.sidc.substr(4,6):"------",S=""!=this.options.sidc.charAt(10)?this.options.sidc.charAt(10):"-",N=""!=this.options.sidc.charAt(11)?this.options.sidc.charAt(11):"-";if(-1<["H","S","J","K"].indexOf(e)&&(t.affiliation=E.affiliation[0]),-1<["F","A","D","M"].indexOf(e)&&(t.affiliation=E.affiliation[1]),-1<["N","L"].indexOf(e)&&(t.affiliation=E.affiliation[2]),-1<["P","U","G","W","O"].indexOf(e)&&(t.affiliation=E.affiliation[3]),-1<["P","A"].indexOf(A)&&(t.dimension=E.dimension[0]),-1<["G","Z","F","X"].indexOf(A)&&(t.dimension=E.dimension[1]),-1<["S"].indexOf(A)&&(t.dimension=E.dimension[2]),-1<["U"].indexOf(A)&&(t.dimension=E.dimension[3]),"P"==A&&"O"!=R&&(t.space=!0),"O"==R&&-1<["V","O","R"].indexOf(A)&&(t.activity=!0),"G"==R&&(t.controlMeasure=!0),"H"==S&&(t.installation=!0),this.style.frame&&"A"==C&&(t.notpresent=I._dashArrays.anticipated),this.style.frame&&-1<["P","A","S","G","M"].indexOf(e)&&(t.notpresent=I._dashArrays.pending),"C"==C&&(t.condition=E.status[2]),"D"==C&&(t.condition=E.status[3]),"X"==C&&(t.condition=E.status[4]),"F"==C&&(t.condition=E.status[5]),-1<["G","W","D","L","M","J","K"].indexOf(e)&&(t.context=E.context[1]),"O"==R&&(t.dimension=E.dimension[1]),"E"==R&&(t.dimension=E.dimension[1]),t.baseDimension=t.dimension,t.baseAffilation=t.affiliation,"J"==e&&(t.joker=!0),"K"==e&&(t.faker=!0),(t.joker||t.faker)&&(t.affiliation=E.affiliation[1]),"S"==R&&"G"==A&&"E"==T.charAt(0)&&(t.dimension=E.dimension[2]),"I"==R&&"G"==A&&(t.dimension=E.dimension[2]),"E"==R&&("O"==A&&-1<["AB----","AE----","AF----","BB----","CB----","CC----","DB----","DDB---","DEB---","DFB---","DGB---","DHB---","DIB---","DJB---","DLB---","DMB---","DOB---","EA----","EB----","EC----","ED----","EE----"].indexOf(T)||"F"==A&&-1<["BA----","MA----","MC----"].indexOf(T))&&(t.dimension=E.dimension[2]),(-1<["F","G","C","D"].indexOf(S)||"H"==S&&"B"==N)&&(t.feintDummy=!0),-1<["A","B","C","D"].indexOf(S)&&(t.headquarters=!0),"G"==A&&"UH----"==T&&(t.headquarters=!0),-1<["E","B","G","D"].indexOf(S)&&(t.taskForce=!0),"A"==N&&(t.echelon=E.echelonMobility[11]),"B"==N&&"H"!=S&&(t.echelon=E.echelonMobility[12]),"C"==N&&(t.echelon=E.echelonMobility[13]),"D"==N&&(t.echelon=E.echelonMobility[14]),"E"==N&&(t.echelon=E.echelonMobility[15]),"F"==N&&(t.echelon=E.echelonMobility[16]),"G"==N&&(t.echelon=E.echelonMobility[17]),"H"==N&&(t.echelon=E.echelonMobility[18]),"I"==N&&(t.echelon=E.echelonMobility[21]),"J"==N&&(t.echelon=E.echelonMobility[22]),"K"==N&&(t.echelon=E.echelonMobility[23]),"L"==N&&"N"!=S&&(t.echelon=E.echelonMobility[24]),"M"==N&&(t.echelon=E.echelonMobility[25]),"N"==N&&(t.echelon=E.echelonMobility[26]),"M"==S)switch(N){case"O":t.mobility=E.echelonMobility[31];break;case"P":t.mobility=E.echelonMobility[32];break;case"Q":t.mobility=E.echelonMobility[33];break;case"R":t.mobility=E.echelonMobility[34];break;case"S":t.mobility=E.echelonMobility[35];break;case"T":t.mobility=E.echelonMobility[36];break;case"U":t.mobility=E.echelonMobility[41];break;case"V":t.mobility=E.echelonMobility[42];break;case"W":t.mobility=E.echelonMobility[37];break;case"Y":t.mobility=E.echelonMobility[51];break;case"Z":t.mobility=E.echelonMobility[52];break;default:t.mobility=void 0}if("N"==S)switch(N){case"S":t.mobility=E.echelonMobility[61];break;case"L":t.mobility=E.echelonMobility[62];break;default:t.mobility=void 0}return("A"==A&&"C"==T.charAt(0)||"G"==A&&"EVC"==T.substring(0,3)||"S"==A&&"X"==T.charAt(0))&&(t.civilian=!0),"Z"!=A&&"X"!=A||(-1<["P","U","F","N","H","A","S","G","W"].indexOf(e)&&(t.dimensionUnknown=!0),-1<["F","A"].indexOf(e)&&(t.dimension="Sea"),-1<["D","L","M","J","K"].indexOf(e)&&(t.affiliation="none")),"S"==A&&-1<["O-----","ED----","EP----","EV----","ZM----","ZN----","ZI----"].indexOf(T)&&(t.frame=!1),"E"==R&&"N"==A&&-1<["AA----","AB----","AC----","AD----","AE----","AG----","BB----","BC----","BF----","BM----","-C-----","CA----","CB----","CC----","CD----","CE----"].indexOf(T)&&(t.frame=!1),"W"==R&&"S"==A&&-1<["WSVE--","WSD-LI","WSFGSO","WSGRL-","WSR-LI","WSDSLM","WSS-LI","WSTMH-","WST-FC","WSTSS-"].indexOf(T)&&(t.frame=!1),"U"==A&&-1<["WM----","WMD---","WMG---","WMGD--","WMGX--","WMGE--","WMGC--","WMGR--","WMGO--","WMM---","WMMD--","WMMX--","WMME--","WMMC--","WMMR--","WMMO--","WMF---","WMFD--","WMFX--","WMFE--","WMFC--","WMFR--","WMFO--","WMO---","WMOD--","WMX---","WME---","WMA---","WMC---","WMR---","WMB---","WMBD--","WMN---","WMS---","WMSX--","WMSD--","WD----","WDM---","WDMG--","WDMM--","ND----","E-----","V-----","X-----","NBS---","NBR---","NBW---","NM----","NA----"].indexOf(T)&&(t.STD2525?(t.fill=!1,"WD----"==T&&(t.fill=!0),-1<["ND----","NBS---","NBR---","NBW---","NM----","NA----"].indexOf(T)&&(t.fill=!0,t.frame=!1)):(t.frame=!1,-1<["E-----","V-----","X-----"].indexOf(T)&&(t.fill=!1,t.frame=!1))),"WAS"!=this.options.sidc.substr(0,3)&&"WOS"!=this.options.sidc.substr(0,3)&&"G"!=R||(t.frame=!1),"G"==R&&"O"==A&&-1<["V","L","P","I"].indexOf(T.charAt(0))&&(t.frame=!0,t.dimension=E.dimension[1]),t}function M(I,t,E){var R={},e={};for(var A in I._iconSIDC.letter)I._iconSIDC.letter.hasOwnProperty(A)&&I._iconSIDC.letter[A].call(this,R,e,t,E);return{icons:R,bbox:e}}function n(I,t){if("object"==typeof I){if(Array.isArray(I)){for(var E=0;E<I.length;E++)n.call(this,I[E],t);return}return I.icon=!0,"text"==I.type&&(I.hasOwnProperty("fontfamily")||(I.fontfamily="Arial"),I.hasOwnProperty("fontweight")||(I.fontweight="bold"),I.hasOwnProperty("textanchor")||(I.textanchor="middle"),I.hasOwnProperty("stroke")||(I.stroke=!1)),I.hasOwnProperty("fill")||(I.fill=t),void(I.hasOwnProperty("stroke")||(I.stroke=t))}}function a(I){var t=42,E=115;return 1==I.length&&(t=45,E=115),3==I.length&&(t=35,E=110),4<=I.length&&(t=32,E=110),{type:"text",stroke:!1,textanchor:"middle",x:100,y:E,fontsize:t,text:I}}function l(I){var t=30;return 3==I.length&&(t=25),4<=I.length&&(t=22),{type:"text",stroke:!1,textanchor:"middle",x:100,y:77,fontsize:t,text:I}}function r(I){var t=30,E=145;return 3==I.length&&(t=25,E=140),4<=I.length&&(t=20,E=135),{type:"text",stroke:!1,textanchor:"middle",x:100,y:E,fontsize:t,text:I}}function i(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=t.frame,S=t.numberSIDC,N=E.iconColor[C],O=E.iconFillColor[C],G=E.none[C],o=E.black[C],M={"SP.I.ANTISATELLITE WEAPON":{type:"path",d:"m 100,110 0,9 m 0,-34 0,5 m 0,-9 -2,4 4,0 z m -10,9 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"},"SP.I.ASTRONOMICAL SATELLITE":{type:"path",d:"m 97,90 -1,-9 8,0 -1,9 m -5,20 1,9 2,0 1,-9 m 8,-10 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},"SP.I.BIOSATELLITE":{type:"path",d:"m 100,89 c 0,4.4 -3.6,8 -8,8 -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 4.4,0 8,3.6 8,8 z m -10,10 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0 m -17,-25 17,10 -1,2 -14,-7"},"SP.I.CAPSULE":{type:"path",d:"m 85,115 c -2,5 32,5 30,0 l -5,-30 c -1,-5 -19,-5 -20,0 z"}};for(var i in M["SP.I.CIVILIAN ASTRONOMICAL SATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 97,90 -1,-9 8,0 -1,9 m -5,20 1,9 2,0 1,-9 m 8,-10 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.CIVILIAN BIOSATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 100,89 c 0,4.4 -3.6,8 -8,8 -4.4,0 -8,-3.6 -8,-8 0,-4.4 3.6,-8 8,-8 4.4,0 8,3.6 8,8 z m -10,10 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0 m -17,-25 17,10 -1,2 -14,-7"},M["SP.I.CIVILIAN CAPSULE"]={type:"path",fill:R?O:!T&&O,d:"m 85,115 c -2,5 32,5 30,0 l -5,-30 c -1,-5 -19,-5 -20,0 z"},M["SP.I.CIVILIAN COMMUNICATIONS SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 100,90 0,9 M 75,81 c 16,12 34,12 50,0"}],M["SP.I.CIVILIAN EARTH OBSERVATION SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 107,113 c 0,3.9 -3.1,7 -7,7 -3.9,0 -7,-3.1 -7,-7 0,-3.9 3.1,-7 7,-7 3.9,0 7,3.1 7,7 z m -17,-33 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"},{type:"path",fill:!1,d:"m 88,107 c 8,-9 16,-9 24,0"}],M["SP.I.CIVILIAN MINIATURIZED SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 91.1,92 0,16 17.8,0 0,-16 z m 22.2,0 0,16 22.2,0 0,-16 z m -26.6,0 -22.2,0 0,16 22.2,0 z m 0,8 4.4,0 m 17.8,0 4.4,0"},{type:"path",fill:!1,d:"m 90,119 10,-9 10,9 m -20,-38 10,9 10,-9 m 35,9 -10,10 10,10 M 55,90 65,100 55,110"}],M["SP.I.CIVILIAN NAVIGATIONAL SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 88,87 c 8,6 16,6 24,0 m -20,8 8,-14 8,14"}],M["SP.I.CIVILIAN ORBITER SHUTTLE"]={type:"path",fill:R?O:!T&&O,d:"m 89,115 6,-25 c 3,-12 7,-12 10,0 l 6,25 -10,0 -1,5 -1,-5 z"},M["SP.I.CIVILIAN SATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 110,100 10,0 m -40,0 10,0 m -10,-10 -25,0 0,20 25,0 z m 40,0 0,20 25,0 0,-20 z m -30,0 0,20 20,0 0,-20 z"},M["SP.I.CIVILIAN SPACE STATION"]={type:"path",fill:R?O:!T&&O,d:"m 97.5,112.5 0,7.5 5,0 0,-7.5 z m 0,-32.5 5,0 0,26.4 -5,0 z m -0.3,7.6 C 83.3,88.2 72.5,93.5 72.5,100 c 0,6.9 12.3,12.5 27.5,12.5 15.2,0 27.5,-5.6 27.5,-12.5 0,-6.5 -11,-11.9 -25,-12.4 l 0,5.6 c 9.9,0.4 17.5,3.2 17.5,6.6 0,3.7 -8.9,6.7 -19.8,6.7 -10.9,0 -19.8,-3 -19.8,-6.7 0,-3.4 7.4,-6.1 17.1,-6.6 l 0,-5.6 c -0.1,0 -0.2,-0 -0.3,0 z"},M["SP.I.CIVILIAN TETHERED SATELLITE"]={type:"path",fill:R?O:!T&&O,d:"m 120,87 -20,12 m 33,-12 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 0,-3.6 2.9,-6.5 6.5,-6.5 3.6,0 6.5,2.9 6.5,6.5 z m -23,22 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.CIVILIAN WEATHER SATELLITE"]=[{type:"path",fill:R?O:!T&&O,d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:25,text:"WX"}],M["SP.I.CIVILIAN"]=a("CIV"),M["SP.I.CIVILIAN"].fill=R||S?O:!T&&O,M["SP.I.CIVILIAN"].stroke=o,M["SP.I.CIVILIAN"].strokewidth=3,M["SP.I.COMMUNICATIONS SATELLITE"]=[{type:"path",d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 100,90 0,9 M 75,81 c 16,12 34,12 50,0"}],M["SP.M1.CYBERSPACE"]=l("CYB"),M["SP.M2.CYBERSPACE"]=r("CYB"),M["SP.I.EARTH OBSERVATION SATELLITE"]=[{type:"path",d:"m 107,113 c 0,3.9 -3.1,7 -7,7 -3.9,0 -7,-3.1 -7,-7 0,-3.9 3.1,-7 7,-7 3.9,0 7,3.1 7,7 z m -17,-33 0,20 20,0 0,-20 z m 25,0 0,20 25,0 0,-20 z m -30,0 -25,0 0,20 25,0 z m 0,10 5,0 m 20,0 5,0"},{type:"path",fill:!1,d:"m 88,107 c 8,-9 16,-9 24,0"}],M["SP.I.FF.CREWED SPACE VEHICLE"]={type:"path",stroke:!1,d:"m 100.3,62.4 c -1.8,-0 -4.3,3.7 -4.5,5.4 -2.5,11.3 -3.4,23.1 -6.2,33.4 -2.9,6.7 -6.8,8.3 -9.9,12.1 -3,3.6 -8.5,10.4 -8.5,10.4 l 0,6.4 c 0,0 5.9,0.9 8.9,1.2 3,0.2 8.7,0.1 8.7,0.1 l 0.3,4.3 4.3,0.2 0.2,3.1 5.8,0 0.9,6.5 0.9,-6.4 5.8,0 0.2,-3.1 4.3,-0.2 0.3,-4.3 c 0,0 5.7,0.1 8.7,-0.1 3,-0.2 8.9,-1.2 8.9,-1.2 l 0,-6.4 c 0,0 -5.5,-6.7 -8.5,-10.3 -3.1,-3.8 -7,-5.4 -9.9,-12.1 -2.8,-10.4 -3.7,-22.2 -6.2,-33.4 -0.3,-2.9 -2.7,-5.5 -4.5,-5.5 z"},M["SP.I.FF.SATELLITE"]=[{type:"path",stroke:!1,d:"m 115,70 20,0 0,55 -20,0 z m -25,5 20,0 0,45 -20,0 z m -25,-5 20,0 0,55 -20,0 z"},{type:"path",fill:!1,d:"M80,135 c10,-10 30,-10 40,0 M100,127 L100,100 M70,100 L130,100"}],M["SP.I.FF.SPACE STATION"]=[{type:"path",d:"m 103.1,97.4 c -12.4,0.3 -25.7,0.1 -36.7,6.7 -4.1,2.1 -8.5,5.9 -7.8,11 0.2,3.7 0.3,7.4 0.5,11.1 6.2,7.8 16.6,10.4 26,11.8 14,1.8 28.5,1.2 42.1,-3 5.2,-1.7 10.4,-4.3 14.2,-8.3 0.3,-5.1 -0.3,-10.4 0.7,-15.3 -1.2,-4.3 -5.9,-6.4 -9.7,-8.2 -9.2,-4 -19.3,-5.4 -29.2,-5.6 z m -3.2,9.6 c 10.1,-0.2 20.5,1.9 29.1,7.4 -13,8.4 -29.6,9.7 -44.3,6.1 -4.9,-1.3 -9.7,-3.3 -13.7,-6.4 8.8,-4.9 18.9,-6.9 28.9,-7.2 z",fill:R?O:G},{type:"path",fill:!1,stroke:"black",d:"m 96.9,107 c 0.7,-8.1 1.4,-16.3 2.1,-24.4 M 89.3,121.8 c 3.1,-13.2 6.2,-26.3 9.3,-39.5 4.9,12.7 9.7,25.5 14.6,38.2 m 27.8,-5.3 c -0.1,3.9 -0.2,7.8 -0.3,11.6 M 58.6,113.3 c 0.2,4.5 0.3,9 0.5,13.5 m -0.5,-1.2 c 3.5,6.3 11,8.6 17.6,10.5 16.4,4.1 33.9,3.9 50.1,-0.8 5.5,-1.8 11.8,-4.3 14.7,-9.7 m 0.5,-13 c -0.5,5.4 -6.1,8.1 -10.5,10 -15.4,5.7 -32.4,6.1 -48.5,3.6 -7.9,-1.4 -16.3,-3.4 -22.2,-9.2 -3.6,-3.9 -0.9,-9.6 3.4,-11.7 8.3,-5.2 18.3,-6.6 27.9,-7.5 13.5,-1 27.5,0 40.2,5.1 4.2,1.8 9.3,4.6 9.7,9.7 z m -13.3,1.6 c -8.2,-5.9 -18.8,-6.8 -28.6,-7 -9.5,0.1 -19.5,1.2 -27.6,6.4 l -0.6,0.5 m 58.9,-2.6 c -0.8,4.8 -6.1,6.4 -10,7.8 -13.2,3.7 -27.4,3.7 -40.5,-0 -3.8,-1.2 -8.1,-2.8 -9.8,-6.7 -0.7,-4.9 5,-7.1 8.7,-8.5 12.7,-4 26.6,-4 39.5,-1 4.4,1.2 9.8,2.8 11.9,7.3 l 0.1,0.5 0,0.5 z"},{type:"path",fill:"black",stroke:!1,d:"M 75.2,93.1 C 88.9,87 102.6,80.8 116.3,74.7 c 2.3,1.3 4.7,2.6 7,3.9 -13.7,6 -27.3,12 -41,18 -2.4,-1.2 -4.8,-2.3 -7.2,-3.5 z"}],M["SP.I.MANUAL TRACK"]=a("MAN"),M["SP.I.MILITARY"]=a("MIL"),M["SP.I.MINIATURIZED SATELLITE"]=[{type:"path",d:"m 91.1,92 0,16 17.8,0 0,-16 z m 22.2,0 0,16 22.2,0 0,-16 z m -26.6,0 -22.2,0 0,16 22.2,0 z m 0,8 4.4,0 m 17.8,0 4.4,0"},{type:"path",fill:!1,d:"m 90,119 10,-9 10,9 m -20,-38 10,9 10,-9 m 35,9 -10,10 10,10 M 55,90 65,100 55,110"}],M["SP.I.NAVIGATIONAL SATELLITE"]=[{type:"path",d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"path",fill:!1,d:"m 88,87 c 8,6 16,6 24,0 m -20,8 8,-14 8,14"}],M["SP.I.ORBITER SHUTTLE"]={type:"path",d:"m 89,115 6,-25 c 3,-12 7,-12 10,0 l 6,25 -10,0 -1,5 -1,-5 z"},M["SP.I.RE-ENTRY VEHICLE"]=a("RV"),M["SP.I.RECONNAISSANCE SATELLITE"]={type:"path",d:"m 106,100 9,20 m -21,-20 -9,20 m 17,-20 3,20 m -7,-20 -3,20 m 15,-30 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.SATELLITE, GENERAL"]=a("SAT"),M["SP.I.SATELLITE"]={type:"path",d:"m 110,100 10,0 m -40,0 10,0 m -10,-10 -25,0 0,20 25,0 z m 40,0 0,20 25,0 0,-20 z m -30,0 0,20 20,0 0,-20 z"},M["SP.I.SPACE LAUNCH VEHICLE"]=a("SLV"),M["SP.I.SPACE STATION"]={type:"path",d:"m 97.5,112.5 0,7.5 5,0 0,-7.5 z m 0,-32.5 5,0 0,26.4 -5,0 z m -0.3,7.6 C 83.3,88.2 72.5,93.5 72.5,100 c 0,6.9 12.3,12.5 27.5,12.5 15.2,0 27.5,-5.6 27.5,-12.5 0,-6.5 -11,-11.9 -25,-12.4 l 0,5.6 c 9.9,0.4 17.5,3.2 17.5,6.6 0,3.7 -8.9,6.7 -19.8,6.7 -10.9,0 -19.8,-3 -19.8,-6.7 0,-3.4 7.4,-6.1 17.1,-6.6 l 0,-5.6 c -0.1,0 -0.2,-0 -0.3,0 z"},M["SP.I.SPACE VEHICLE"]=a("SV"),M["SP.I.TETHERED SATELLITE"]={type:"path",d:"m 120,87 -20,12 m 33,-12 c 0,3.6 -2.9,6.5 -6.5,6.5 -3.6,0 -6.5,-2.9 -6.5,-6.5 0,-3.6 2.9,-6.5 6.5,-6.5 3.6,0 6.5,2.9 6.5,6.5 z m -23,22 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},M["SP.I.WEATHER SATELLITE"]=[{type:"path",d:"m 110,109 5,0 m -30,0 5,0 m -5,-10 -25,0 0,20 25,0 z m 30,0 0,20 25,0 0,-20 z m -25,0 0,20 20,0 0,-20 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:100,fontsize:25,text:"WX"}],M["SP.M1.GEOSTATIONARY ORBIT (GO)"]=l("GO"),M["SP.M1.GEOSYNCHRONOUS ORBIT (GSO)"]=l("GSO"),M["SP.M1.HIGH EARTH ORBIT (HEO)"]=l("HEO"),M["SP.M1.LOW EARTH ORBIT (LEO)"]=l("LEO"),M["SP.M1.MEDIUM EARTH ORBIT (MEO)"]=l("MEO"),M["SP.M1.MOLNIYA ORBIT (MO)"]=l("MO"),M["SP.M2.INFRARED"]=r("IR"),M["SP.M2.OPTICAL"]=r("O"),M["SP.M2.RADAR"]=r("R"),M["SP.M2.SIGNALS INTELLIGENCE (SIGINT)"]=r("SI"),M["SPACE.MISSILE.ICON"]={type:"path",d:"M90,135 l0,-10 5,-5 0,-55 5,-5 5,5 0,55 5,5 0,10 -10,-10 z"},(R||S)&&(M["SPACE.MISSILE.ICON"].fill=T?E.fillColor.Unknown:E.iconFillColor.Unknown),M["SPACE.MISSILE.M1.BALLISTIC"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"B"},M["SPACE.MISSILE.M1.INTERCEPTOR"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"I"},M["SPACE.MISSILE.M1.SPACE"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"P"}],M["SPACE.MISSILE.M2.ARROW"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"A"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.GROUND-BASED INTERCEPTOR (GBI)"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"G"},M["SPACE.MISSILE.M2.INTERCONTINENTAL"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"C"}],M["SPACE.MISSILE.M2.INTERMEDIATE RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.LONG RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"L"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.MEDIUM RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"M"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.PATRIOT"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"P"},M["SPACE.MISSILE.M2.SHORT RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.SPACE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"P"}],M["SPACE.MISSILE.M2.STANDARD MISSILE - 3 (SM-3)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"3"}],M["SPACE.MISSILE.M2.STANDARD MISSILE - TERMINAL PHASE (SM-T)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"T"}],M["SPACE.MISSILE.M2.TERMINAL HIGH-ALTITUDE AREA DEFENSE (THAAD)"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"T"},M["SPACE.MISSILE.M2.CLOSE RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"C"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],M["SPACE.MISSILE.M2.DEBRIS"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"D"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"B"}],M["SPACE.MISSILE.M2.UNKNOWN"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"U"},M["SPACE.PLANET LANDER"]=a("PL"),M)M.hasOwnProperty(i)&&(I.hasOwnProperty(i)&&console.warn("Override of: "+i),n.call(this,M[i],N),I[i]=M[i])}s.setColorMode=function(I,t){return this._colorModes[I]={},this._colorModes[I].Hostile=t.Hostile,this._colorModes[I].Friend=t.Friend,this._colorModes[I].Neutral=t.Neutral,this._colorModes[I].Unknown=t.Unknown,this._colorModes[I].Civilian=t.Civilian,this._colorModes[I]},s.addSymbolPart=function(I){if("function"==typeof I){var t=s.getSymbolParts();-1==t.indexOf(I)&&s.setSymbolParts(t.concat(I))}return s},s.getSymbolParts=function(){return this._symbolParts.slice(0)},s.setSymbolParts=function(I){return this._symbolParts=I,s},s.reset=function(){for(var I in this._brokenPath2D=void 0,this._colorModes={},t)s.setColorMode(I,t[I]);this._dashArrays={pending:"4,4",anticipated:"8,12",feintDummy:"8,8"},this._getIcons={},this._getMetadata={},this._hqStaffLength=100,this._iconCache={},this._iconParts=[],this._labelCache={},this._labelOverrides={},this._iconSIDC={},this._iconSIDC.letter=[],this._iconSIDC.number=[],this._STD2525=!0,this._svgNS="http://www.w3.org/2000/svg",this._symbolParts=[],s.addSymbolPart(E),s.addSymbolPart(R),s.addSymbolPart(e),s.addSymbolPart(A),s.addSymbolPart(C),s.addSymbolPart(T),s.addSymbolPart(S),s.addSymbolPart(N)},s.reset(),s.BBox=I,s.ColorMode=function(I,t,E,R,e){var A={};return A.Civilian=I,A.Friend=t,A.Hostile=E,A.Neutral=R,A.Unknown=e,A},s.setBrokenPath2D=function(I){s._brokenPath2D=I},s._getIconParts=function(I,t,E,R,e){var A={};for(var C in this._iconParts)this._iconParts.hasOwnProperty(C)&&this._iconParts[C].call(this,A,I,t,E,R,e);return A},s._scale=function(I,t){return{type:"translate",x:100-100*I,y:100-100*I,draw:[{type:"scale",factor:I,draw:[t]}]}},s._translate=function(I,t,E){return{type:"translate",x:I,y:t,draw:[E]}},s.addIconParts=function(I){Array.isArray(I)||(I=[I]);for(var t=0;t<I.length;t++)"function"==typeof I[t]&&-1==this._iconParts.indexOf(I[t])&&(this._iconParts=this._iconParts.concat(I[t]));return s},s.addLabelOverrides=function(I,t){return this._labelCache={},"function"==typeof I&&(this._labelOverrides.hasOwnProperty(t)||(this._labelOverrides[t]=[]),this._labelOverrides[t]=this._labelOverrides[t].concat(I)),s},s.addIcons=function(I){this._iconCache={},Array.isArray(I)||(I=[I]);for(var t=0;t<I.length;t++)I[t].hasOwnProperty("getMetadata")&&(s._getMetadata[I[t].type]=I[t].getMetadata),I[t].hasOwnProperty("getIcons")&&(s._getIcons[I[t].type]=I[t].getIcons),I[t].hasOwnProperty("iconParts")&&s.addIconParts(I[t].iconParts),I[t].hasOwnProperty("labels")&&s.addLabelOverrides(I[t].labels,I[t].type),I[t].hasOwnProperty("icons")&&s.addSIDCicons(I[t].icons,I[t].type)},s.addSIDCicons=function(I,t){return"function"==typeof I&&-1==this._iconSIDC[t].indexOf(I)&&(this._iconSIDC[t]=this._iconSIDC[t].concat(I)),s},s.getColorMode=function(I){var t=this._colorModes[I];return new s.ColorMode(t.Civilian,t.Friend,t.Hostile,t.Neutral,t.Unknown)},s.getDashArrays=function(){return this._dashArrays},s.getHqStaffLength=function(){return this._hqStaffLength},s.getVersion=function(){return this.version},s.outline=function(I,t,E,R){return function I(t,E,R,e){var A;if(Array.isArray(t))for(var C in A=[],t)A.push(I(t[C],E,R,e));else{for(var T in A={},t)-1==["fill","fillopacity"].indexOf(T)&&(A[T]=t[T]);if("translate"==t.type||"rotate"==t.type||"scale"==t.type)for(var S in A.draw=[],t.draw)A.draw.push(I(t.draw[S],E,R,e));else A.strokewidth=!1!==A.stroke?Number(A.strokewidth||R)+2*E:2*E,A.stroke=e,A.fill=!1,A.linecap="round"}return A}(I,t,E,R)},s.setDashArrays=function(I,t,E){return this._dashArrays.pending=I,this._dashArrays.anticipated=t,this._dashArrays.feintDummy=E,this._dashArrays},s.setHqStaffLength=function(I){return this._hqStaffLength=I,this._hqStaffLength},s.setStandard=function(I){return"2525"==I?this._STD2525=!0:"APP6"==I&&!(this._STD2525=!1)},s._symbolGeometries=O,G.prototype.asCanvas=function(I){if(void 0===s._brokenPath2D)if("undefined"==typeof Path2D)s.setBrokenPath2D(!0);else{var t=document.createElement("canvas");t.widht=1,t.height=1;var E=t.getContext("2d"),R=new Path2D("M0 0 h 10 v 10 h -10 Z");E.fill(R);var e=E.getImageData(0,0,1,1).data.join();s.setBrokenPath2D(!("0,0,0,255"==e))}var A=document.createElement("canvas");I=I||1,A.width=this.width*I,A.height=this.height*I;var C=A.getContext("2d");return C.scale(I*this.style.size/100,I*this.style.size/100),C.translate(-(this.bbox.x1-this.style.strokeWidth-this.style.outlineWidth),-(this.bbox.y1-this.style.strokeWidth-this.style.outlineWidth)),this.canvasDraw.call(this,C,this.drawInstructions),A},G.prototype.canvasDraw=function I(t,E){for(var R=0;R<E.length;R++)if(Array.isArray(E[R]))E[R].length&&I.call(this,t,E[R]);else if("object"==typeof E[R]){switch(t.lineWidth=E[R].strokewidth||this.style.strokeWidth,void 0!==E[R].stroke&&(E[R].stroke?t.strokeStyle=E[R].stroke:t.strokeStyle="rgba(0,0,0,0)"),E[R].strokedasharray?t.setLineDash(E[R].strokedasharray.split(",")):0!=t.getLineDash().length&&t.setLineDash([]),E[R].linecap&&(t.lineCap=E[R].linecap,t.lineJoin=E[R].linecap),E[R].fill&&(t.fillStyle=E[R].fill),E[R].fill||(t.fillStyle="rgba(0,0,0,0)"),void 0!==E[R].fillopacity&&(t.globalAlpha=E[R].fillopacity),E[R].type){case"path":if(s._brokenPath2D)"function"==typeof s.Path2D?(s.Path2D(t,E[R].d),(void 0===E[R].fill||void 0!==E[R].fill&&E[R].fill)&&t.fill(),1!=t.globalAlpha&&(t.globalAlpha=1),(void 0===E[R].stroke||void 0!==E[R].stroke&&E[R].stroke)&&t.stroke()):console.warn("ms.Path2D() is not present, you will need to load functionality for using Canvas in older version of Internet Explorer.");else{var e=new Path2D(E[R].d);E[R].hasOwnProperty("clipPath")&&(t.save(),t.clip(new Path2D(E[R].clipPath),"nonzero")),(void 0===E[R].fill||void 0!==E[R].fill&&E[R].fill)&&t.fill(e),E[R].hasOwnProperty("clipPath")&&t.restore(),1!=t.globalAlpha&&(t.globalAlpha=1),(void 0===E[R].stroke||void 0!==E[R].stroke&&E[R].stroke)&&t.stroke(e)}break;case"circle":E[R].hasOwnProperty("clipPath")&&(t.save(),t.clip(new Path2D(E[R].clipPath),"nonzero")),t.beginPath(),t.arc(E[R].cx,E[R].cy,E[R].r,0,2*Math.PI,!1),(void 0===E[R].fill||void 0!==E[R].fill&&E[R].fill)&&t.fill(),E[R].hasOwnProperty("clipPath")&&t.restore(),(void 0===E[R].stroke||void 0!==E[R].stroke&&E[R].stroke)&&t.stroke();break;case"text":t.font=(void 0!==E[R].fontweight?E[R].fontweight+" ":"")+E[R].fontsize+"px "+E[R].fontfamily,t.textAlign="middle"==E[R].textanchor?"center":E[R].textanchor,t.fillText(E[R].text,E[R].x,E[R].y),E[R].stroke&&t.strokeText(E[R].text,E[R].x,E[R].y);break;case"translate":t.save(),t.translate(E[R].x,E[R].y),I.call(this,t,E[R].draw),t.restore();break;case"rotate":var A=E[R].x,C=E[R].y;t.save(),t.translate(A,C),t.rotate(E[R].degree*Math.PI/180),t.translate(-A,-C),I.call(this,t,E[R].draw),t.restore();break;case"scale":t.save(),t.scale(E[R].factor,E[R].factor),I.call(this,t,E[R].draw),t.restore()}E[R].linecap&&(t.lineCap="butt",t.lineJoin="miter"),void 0!==E[R].fillopacity&&(t.globalAlpha=1)}},G.prototype.asDOM=function(){var I=document,t=(new DOMParser).parseFromString(this.asSVG(),"text/xml");return I.adoptNode(t.documentElement)},G.prototype.asSVG=function(){var I='<svg xmlns="'+s._svgNS+'" version="1.2" baseProfile="tiny" width="'+this.width+'" height="'+this.height+'" viewBox="'+(this.bbox.x1-this.style.strokeWidth-this.style.outlineWidth)+" "+(this.bbox.y1-this.style.strokeWidth-this.style.outlineWidth)+" "+this.baseWidth+" "+this.baseHeight+'">';return I+=function I(t){for(var E="",R=0;R<t.length;R++)if(Array.isArray(t[R]))t[R].length&&(E+=I.call(this,t[R]));else if("object"==typeof t[R]){var e="";if("svg"==t[R].type)e+=t[R].svg;else{switch(t[R].hasOwnProperty("clipPath")&&(e+='<clipPath id="clip">',e+='<path d="'+t[R].clipPath+'" clip-rule="nonzero" />',e+="</clipPath>"),t[R].type){case"path":e+='<path d="'+t[R].d+'" ',t[R].hasOwnProperty("clipPath")&&(e+='clip-path="url(#clip)" ');break;case"circle":e+='<circle cx="'+t[R].cx+'" cy="'+t[R].cy+'" r="'+t[R].r+'" ',t[R].hasOwnProperty("clipPath")&&(e+='clip-path="url(#clip)" ');break;case"text":e+='<text x="'+t[R].x+'" y="'+t[R].y+'" text-anchor="'+t[R].textanchor+'" font-size="'+t[R].fontsize+'" font-family="'+t[R].fontfamily+'" ',t[R].fontweight&&(e+='font-weight="'+t[R].fontweight+'" ');break;case"translate":e+='<g transform="translate('+t[R].x+","+t[R].y+')" ';break;case"rotate":e+='<g transform="rotate('+t[R].degree+","+t[R].x+","+t[R].y+')" ';break;case"scale":e+='<g transform="scale('+t[R].factor+')" '}switch(void 0!==t[R].stroke&&(e+='stroke-width="'+(t[R].strokewidth||this.style.strokeWidth)+'" ',t[R].strokedasharray&&(e+='stroke-dasharray="'+t[R].strokedasharray+'" '),t[R].linecap&&(e+='stroke-linecap="'+t[R].linecap+'" ',e+='stroke-linejoin="'+t[R].linecap+'" '),t[R].stroke?e+='stroke="'+t[R].stroke+'" ':e+='stroke="none" '),void 0!==t[R].fill&&(e+='fill="'+(t[R].fill?t[R].fill:"none")+'" '),void 0!==t[R].fillopacity&&(e+='fill-opacity="'+t[R].fillopacity+'" '),e+=">",t[R].type){case"path":e+="</path>";break;case"circle":e+="</circle>";break;case"text":e+=String(t[R].text).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")+"</text>";break;case"translate":case"rotate":case"scale":e+=I.call(this,t[R].draw),e+="</g>"}}E+=e}return E}.call(this,this.drawInstructions),I+="</svg>",this.XML=I},G.prototype.getAnchor=function(){return this.symbolAnchor},G.prototype.getColors=function(){var I="object"==typeof this.style.colorMode?this.style.colorMode:s.getColorMode(this.style.colorMode),t="object"==typeof this.style.frameColor?this.style.frameColor:s.getColorMode("FrameColor"),E="object"==typeof this.style.iconColor?this.style.iconColor:s.getColorMode("IconColor"),R=I,e=s.getColorMode("Black"),A=s.getColorMode("White"),C=s.getColorMode("OffWhite"),T=s.getColorMode("None");this.style.civilianColor&&this.metadata.civilian&&(I.Friend=I.Neutral=I.Unknown=I.Civilian,t.Friend=t.Neutral=t.Unknown=t.Civilian,E.Friend=E.Neutral=E.Unknown=E.Civilian),(this.metadata.joker||this.metadata.faker)&&(I.Friend=I.Hostile,t.Friend=t.Hostile,E.Friend=E.Hostile),""!=this.style.monoColor&&(t.Friend=t.Neutral=t.Hostile=t.Unknown=t.Civilian=this.style.monoColor,e=t,A=I=T);var S={fillColor:I,frameColor:t,iconColor:E,iconFillColor:R,none:T,black:e,white:A};return this.metadata.frame?S.frameColor="object"==typeof this.style.frameColor?this.style.frameColor:e:S.frameColor=T,this.metadata.fill?(S.fillColor=this.metadata.frame||!this.metadata.frame&&!this.style.icon?I:T,S.iconColor="object"==typeof this.style.iconColor?this.style.iconColor:e,S.iconFillColor=this.metadata.frame?C:I,S.white=C):(S.fillColor=T,S.frameColor=this.metadata.frame?t:T,S.iconColor=t,S.iconFillColor=T,this.metadata.frame||this.metadata.fill||this.style.icon||(S.frameColor=e,S.fillColor=e)),S},G.prototype.getOctagonAnchor=function(){return this.octagonAnchor},G.prototype.getMetadata=function(){var I={activity:!1,affiliation:"undefined",baseAffilation:"",baseDimension:"",baseGeometry:{g:"",bbox:{}},civilian:!1,condition:"",context:"",dimension:"undefined",dimensionUnknown:!1,echelon:"",faker:!1,fenintDummy:!1,fill:this.style.fill,frame:this.style.frame,functionid:"",headquarters:!1,installation:!1,joker:!1,mobility:"",notpresent:"",numberSIDC:!1,space:!1,STD2525:s._STD2525,taskForce:!1,unit:!1},t={context:["Reality","Exercise","Simulation"],status:["Present","Planned","FullyCapable","Damaged","Destroyed","FullToCapacity"],echelonMobility:{11:"Team/Crew",12:"Squad",13:"Section",14:"Platoon/detachment",15:"Company/battery/troop",16:"Battalion/squadron",17:"Regiment/group",18:"Brigade",21:"Division",22:"Corps/MEF",23:"Army",24:"Army Group/front",25:"Region/Theater",26:"Command",31:"Wheeled limited cross country",32:"Wheeled cross country",33:"Tracked",34:"Wheeled and tracked combination",35:"Towed",36:"Rail",37:"Pack animals",41:"Over snow (prime mover)",42:"Sled",51:"Barge",52:"Amphibious",61:"Short towed array",62:"Long towed Array",71:"Leader Individual",72:"Deputy Individual"},affiliation:["Hostile","Friend","Neutral","Unknown"],dimension:["Air","Ground","Sea","Subsurface"]};return I.context=t.context[0],this.style.standard&&(I.STD2525="APP6"!=this.style.standard),""!=this.style.monoColor&&(I.fill=!1),this.options.sidc=String(this.options.sidc).replace(/\*/g,"-").replace(/ /g,""),I.numberSIDC=!isNaN(this.options.sidc),I.numberSIDC?"function"==typeof s._getMetadata.number?I=s._getMetadata.number.call(this,s,I,t):console.warn("ms._getMetadata.number() is not present, you will need to load functionality for number based SIDCs"):"function"==typeof s._getMetadata.letter?I=s._getMetadata.letter.call(this,s,I,t):console.warn("ms._getMetadata.letter() is not present, you will need to load functionality for letter based SIDCs"),s._symbolGeometries.hasOwnProperty(I.dimension+I.affiliation)?I.baseGeometry=s._symbolGeometries[I.dimension+I.affiliation]:I.baseGeometry.bbox=new s.BBox,this.style.frame||this.style.icon||(I.baseGeometry=s._symbolGeometries.PositionMarker),I},G.prototype.getOptions=function(I){var t,E={};for(t in this.options)this.options.hasOwnProperty(t)&&(E[t]=this.options[t]);if(I||void 0===I)for(t in this.style)this.style.hasOwnProperty(t)&&(E[t]=this.style[t]);return E},G.prototype.getSize=function(){return void 0!==this.width&&void 0!==this.height||this.updateSymbol(),{width:this.width,height:this.height}},G.prototype.getStyle=function(){var I,t={};for(I in this.style)this.style.hasOwnProperty(I)&&(t[I]=this.style[I]);return t},G.prototype.isValid=function(I){var t=-1==JSON.stringify(this.drawInstructions).indexOf("null");return I?{affiliation:this.metadata.affiliation,dimension:this.metadata.dimension,dimensionUnknown:this.metadata.dimensionUnknown,drawInstructions:t,icon:this.validIcon,mobility:null!=this.metadata.mobility}:!("undefined"==this.metadata.affiliation||"undefined"==this.metadata.dimension&&!this.metadata.controlMeasure)&&t&&this.validIcon&&null!=this.metadata.mobility},G.prototype.setOptions=function(){var I;for(I=0;I<arguments.length;I++){var t=arguments[I];if("object"==typeof t)for(var E in t)t.hasOwnProperty(E)&&("SIDC"!==E?this.style.hasOwnProperty(E)?this.style[E]=t[E]:this.options[E]=t[E]:this.options.sidc=t[E]);else this.options.sidc=t}for(I in this.validIcon=!0,this.metadata=this.getMetadata(),this.colors=this.getColors(),this.drawInstructions=[],this.bbox=new s.BBox,s._symbolParts)if(s._symbolParts.hasOwnProperty(I)){var R=s._symbolParts[I].call(this,s),e=0<R.pre.length||0<R.post.length;if(R.pre){if(0<R.pre.length){for(;1==R.pre.length;)R.pre=R.pre[0];0!=R.pre.length&&(this.drawInstructions=[].concat(R.pre,this.drawInstructions))}if(0<R.post.length){for(;1==R.post.length&&(R.post=R.post[0],void 0!==R.post););void 0!==R.post&&0==R.post.length||(this.drawInstructions=this.drawInstructions.concat(R.post))}"object"==typeof R.bbox&&e&&this.bbox.merge(R.bbox)}}this.style.padding&&(this.bbox.x1-=this.style.padding,this.bbox.x2+=this.style.padding,this.bbox.y1-=this.style.padding,this.bbox.y2+=this.style.padding);var A={x:100,y:100};if(this.octagonAnchor={x:(A.x-this.bbox.x1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100,y:(A.y-this.bbox.y1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100},this.metadata.headquarters){var C=this.style.hqStaffLength||s._hqStaffLength;A={x:this.metadata.baseGeometry.bbox.x1,y:this.metadata.baseGeometry.bbox.y2+C}}if(this.style.square){var T=Math.max(A.x-this.bbox.x1,this.bbox.x2-A.x),S=Math.max(A.y-this.bbox.y1,this.bbox.y2-A.y),N=Math.max(T,S);this.bbox.x1=A.x-N,this.bbox.y1=A.y-N,this.bbox.x2=A.x+N,this.bbox.y2=A.y+N}return this.baseWidth=this.bbox.width()+Number(2*this.style.strokeWidth)+Number(2*this.style.outlineWidth),this.baseHeight=this.bbox.height()+Number(2*this.style.strokeWidth)+Number(2*this.style.outlineWidth),this.width=this.baseWidth*this.style.size/100,this.height=this.baseHeight*this.style.size/100,this.symbolAnchor={x:(A.x-this.bbox.x1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100,y:(A.y-this.bbox.y1+parseFloat(this.style.strokeWidth)+parseFloat(this.style.outlineWidth))*this.style.size/100},s._autoValidation&&(this.isValid()||(console.warn("Error in symbol: "+this.options.sidc),console.warn(this.isValid(!0)))),this},G.prototype.toDataURL=function(){return"data:image/svg+xml;base64,"+window.btoa(this.asSVG())},s.Symbol=G;var L={type:"letter",getMetadata:o,getIcons:M,iconParts:[i],icons:function(I,t,E,R){I["S-P-------"]=[],I["S-P-S-----"]=[E["SP.I.FF.SATELLITE"]],I["S-P-V-----"]=[E["SP.I.FF.CREWED SPACE VEHICLE"]],I["S-P-T-----"]=[E["SP.I.FF.SPACE STATION"]],I["S-P-L-----"]=[E["SP.I.SPACE LAUNCH VEHICLE"]]}};function P(I,t,E,R,e,A){var C=t.frame,T=t.affiliation||"Friend",S=t.numberSIDC,N=E.iconColor[T],O=E.iconFillColor[T],G=E.black[T],o={};for(var M in o["AR.I.MILITARY"]=a("MIL"),o["AR.I.CIVILIAN"]=a("CIV"),o["AR.I.CIVILIAN"].fill=R||S?O:!C&&O,o["AR.I.CIVILIAN"].stroke=G,o["AR.I.CIVILIAN"].strokewidth=3,o["AR.I.MILITARY FIXED WING"]={type:"path",d:"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.CIVILIAN FIXED WING"]={type:"path",fill:!1,d:"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.FF.CIVILIAN FIXED WING"]={type:"path",stroke:G,d:"M62,80 l30,0 0,-10 16,0 0,10 30,0 0,15 -30,0 0,25 10,0 0,5 -36,0 0,-5 10,0 0,-25 -30,0 Z M95,70 l0,-5 10,0 0,5",fill:!!R&&O},o["AR.I.MILITARY ROTARY WING"]={type:"path",d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"},o["AR.I.CIVILIAN ROTARY WING"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"},o["AR.I.FF.CIVILIAN ROTARY WING"]=[{type:"path",stroke:G,d:"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",fill:!1},{type:"path",stroke:G,fill:!!R&&O,d:"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"}],o["AR.I.MILITARY BALLOON"]=[{type:"circle",cx:100,cy:95,r:15},{type:"path",d:"M95,110 l0,10 10,0 0,-10 z"}],o["AR.I.FF.MILITARY BALLOON"]=[{type:"path",d:"M90,115 l20,0 0,20 -20,0 z"},{type:"circle",cx:100,cy:90,r:35}],o["AR.I.CIVILIAN BALLOON"]=[{type:"circle",fill:!(!R&&!S)&&O,stroke:G,cx:100,cy:95,r:15},{type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M95,110 l0,10 10,0 0,-10 z"}],o["AR.I.FF.CIVILIAN BALLOON"]=[{type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M90,125 l20,0 0,10 -20,0 z"},{type:"circle",fill:!(!R&&!S)&&O,stroke:G,cx:100,cy:90,r:35}],o["AR.I.MILITARY AIRSHIP"]={type:"path",d:"m 110,110 10,10 10,0 -5,-15 m 0,-10 5,-15 -10,0 -10,10 m 17.2,10 c 0,6.1 -12.2,11.1 -27.2,11.1 -15,0 -27.2,-5 -27.2,-11.1 0,-6.1 12.2,-11.1 27.2,-11.1 15,0 27.2,5 27.2,11.1 z"},o["AR.I.CIVILIAN AIRSHIP"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"m 110,110 10,10 10,0 -5,-15 m 0,-10 5,-15 -10,0 -10,10 m 17.2,10 c 0,6.1 -12.2,11.1 -27.2,11.1 -15,0 -27.2,-5 -27.2,-11.1 0,-6.1 12.2,-11.1 27.2,-11.1 15,0 27.2,5 27.2,11.1 z"},o["AR.I.UNMANNED AERIAL VEHICLE"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},o["AR.I.AIR DECOY"]={type:"path",d:"M65,95 l15,-15 0,30 Z M92.5,95 l15,-15 0,30 Z M120,95 l15,-15 0,30 Z M65,120 l70,0 0,-5 -70,0 Z"},o["SU.IC.AIR DECOY DSymbol"]={type:"path",d:"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"},o["AR.I.MEDICAL EVACUATION"]={type:"path",d:"M93,83 l14,0 0,10 10,0 0,14 -10,0 0,10 -14,0 0,-10 -10,0 0,-14 10,0 Z"},o["AR.I.ATTACK/STRIKE"]=a("A"),o["AR.I.BOMBER"]=a("B"),o["AR.I.CARGO"]=a("C"),o["AR.I.ESCORT"]=a("E"),o["AR.I.FIGHTER"]=a("F"),o["AR.I.FIGHTER INTERCEPTOR"]=a("I"),o["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]=a("J"),o["AR.I.TANKER"]=a("K"),o["AR.I.PATROL"]=a("P"),o["AR.I.RECONNAISSANCE"]=a("R"),o["AR.I.2525 PHOTOGRAPHIC"]=a("X"),o["AR.I.TRAINER"]=a("T"),o["AR.I.UTILITY"]=a("U"),o["AR.I.VSTOL"]=a(R&&!S?"L":"V"),o["AR.I.AIRBORNE COMMAND POST"]=a(R&&!S?"D":"ACP"),o["AR.I.AIRBORNE EARLY WARNING"]=a(R&&!S?"W":"AEW"),o["AR.I.ANTISURFACE WARFARE"]=a(R&&!S?"N":"ASUW"),o["AR.I.ANTISUBMARINE WARFARE"]=a(R&&!S?"S":"ASW"),o["AR.I.COMMUNICATIONS"]=a(R&&!S?"Y":"COM"),o["AR.I.COMBAT SEARCH AND RESCUE"]=a("CSAR"),o["AR.I.ELECTRONIC SUPPORT MEASURES"]=a(R?"Z":"ESM"),o["AR.I.GOVERNMENT"]=a("GOV"),o["AR.I.MINE COUNTERMEASURES"]=a("MCM"),o["AR.I.PERSONNEL RECOVERY"]=a(R?"H":"PRO"),o["AR.I.PASSENGER"]=a("PX"),o["AR.I.SEARCH AND RESCUE"]=a("SAR"),o["AR.I.SUPRESSION OF ENEMY AIR DEFENCE"]=a("SEAD"),o["AR.I.SPECIAL OPERATIONS FORCES"]=a("SOF"),o["AR.I.ULTRA LIGHT"]=a("UL"),o["AR.I.VIP"]=a("VIP"),o["AR.I.FF.MILITARY FIXED WING"]={type:"path",d:"m 99.2,58.2 c -3,0.8 -2.5,5.8 -2.5,5.8 l -0.3,16 -37.2,36.5 1.3,4.6 L 96.7,96.6 97,128.6 l -8.5,8.2 0,4.6 9.3,-4.2 c 0.7,0.6 1.8,1.7 1.8,1.7 0,0 1.2,-1.1 1.9,-1.7 l 9.3,4.2 0,-4.6 -8.5,-8.2 0.3,-32 36.2,24.5 1.3,-4.6 -37.2,-36.5 -0.3,-16 c 0,0 0.5,-5 -2.5,-5.8 -0.4,-0.1 -0.7,-0.1 -1.1,0 z",stroke:!1},o["AR.I.FIXED-WING DSymbol"]={type:"path",d:R?"M 99.4 80.8 C 97.9 81.1 98.1 83.4 98.1 83.4 L 98 90.7 L 78.6 107.4 L 79.3 109.4 L 98.1 98.3 L 98.3 112.9 L 93.9 116.6 L 93.9 118.7 L 98.8 116.8 C 99.1 117 99.7 117.5 99.7 117.5 C 99.7 117.5 100.4 117 100.7 116.8 L 105.6 118.7 L 105.6 116.6 L 101.1 112.9 L 101.3 98.3 L 120.2 109.4 L 120.9 107.4 L 101.5 90.7 L 101.3 83.4 C 101.3 83.4 101.6 81.1 100 80.8 C 99.8 80.8 99.6 80.8 99.4 80.8 z":"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.CIVILIAN FIXED-WING DSymbol"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:R?"m 75.1,90.3 19.6,0 0,-6.5 10.5,0 0,6.5 19.6,0 0,9.7 -19.6,0 0,16.2 6.5,0 0,3.2 -23.6,0 0,-3.2 6.5,0 0,-16.2 -19.6,0 z m 21.6,-6.5 0,-3.2 6.5,0 0,3.2":"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},o["AR.I.FIGHTER/BOMBER"]=a("F/B"),o["AR.I.ELECTRONIC SUPPORT"]=a(R?"ES":"ESM"),o["AR.I.PERSONNEL RECOVERY DSymbol"]=a("PR"),o["AR.I.PHOTOGRAPHIC RECONNAISSANCE"]=a("PH"),o["AR.I.ELECTRONIC ATTACK (EA)"]=a("EA"),o["AR.I.VERTICAL-TAKEOFF UAV (VT-UAV)"]={type:"path",d:"m 70,85 30,10 30,-10 0,-5 -30,5 -30,-5 z m -10,5 40,15 40,-15 0,30 -40,-15 -40,15 z"},o["AR.I.TETHERED LIGHTER THAN AIR"]={type:"path",d:"M 75,110 85,95 m -5,20 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m 15,-6 0,11 10,0 0,-11 m 10,-14 c 0,8.3 -6.7,15 -15,15 -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 z"},o["AR.I.CIVILIAN TETHERED LIGHTER THAN AIR"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"M 75,110 85,95 m -5,20 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m 15,-6 0,11 10,0 0,-11 m 10,-14 c 0,8.3 -6.7,15 -15,15 -8.3,0 -15,-6.7 -15,-15 0,-8.3 6.7,-15 15,-15 8.3,0 15,6.7 15,15 z"},o["AR.I.CIVILIAN UNMANNED AERIAL VEHICLE"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"},o["AR.I.WEAPON"]=a("WPN"),o["AR.I.UNDERWATER DECOY DSymbol"]={type:"path",d:"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"},o["AR.I.BOMB"]=a("BOMB"),o["AR.I.MANUAL TRACK"]=a("MAN"),o["AIR.M1.ATTACK"]=l("A"),o["AIR.M1.BOMBER"]=l("B"),o["AIR.M1.CARGO"]=l("C"),o["AIR.M1.FIGHTER"]=l("F"),o["AIR.M1.INTERCEPTOR"]=l("I"),o["AIR.M1.TANKER"]=l("K"),o["AIR.M1.UTILITY"]=l("U"),o["AIR.M1.VSTOL"]=l(R&&!S?"L":"V"),o["AIR.M1.PASSENGER"]=l("PX"),o["AIR.M1.ULTRA LIGHT"]=l("UL"),o["AIR.M1.AIRBORNE COMMAND POST"]=l(R&&!S?"D":"ACP"),o["AIR.M1.ANTISURFACE WARFARE"]=l(R&&!S?"N":"ASUW"),o["AIR.M1.AIRBORNE EARLY WARNING"]=l(R&&!S?"W":"AEW"),o["AIR.M1.GOVERNMENT"]=l("GOV"),o["AIR.M1.MEDEVAC"]={type:"path",stroke:!1,d:"M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"},o["AIR.M1.ESCORT"]=l("E"),o["AIR.M1.INTENSIVE CARE"]=l("IC"),o["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]=l("J"),o["AIR.M1.PATROL"]=l("P"),o["AIR.M1.RECONNAISSANCE"]=l("R"),o["AIR.M1.TRAINER"]=l("T"),o["AIR.M1.PHOTOGRAPHIC"]=l(R&&!S?"X":"PH"),o["AIR.M1.PERSONNEL RECOVERY"]=l("PR"),o["AIR.M1.ANTISUBMARINE WARFARE"]=l(R&&!S?"S":"ASW"),o["AIR.M1.COMMUNICATIONS"]=l(R&&!S?"Y":"COM"),o["AIR.M1.ELECTRONIC SURVEILLANCE MEASURES"]=l(R?"Z":"ESM"),o["AIR.M1.MINE COUNTERMEASURES"]=l("MCM"),o["AIR.M1.SEARCH AND RESCUE"]=l("SAR"),o["AIR.M1.SPECIAL OPERATIONS FORCES"]=l("SOF"),o["AIR.M1.SURFACE WARFARE"]=l("SUW"),o["AIR.M1.VIP"]=l("VIP"),o["AIR.M1.COMBAT SEARCH AND RESCUE"]=l(R&&!S?"H":"CSAR"),o["AIR.M1.SUPRESSION OF ENEMY AIR DEFENCE"]=l("SEAD"),o["AIR.M1.UNMANNED AERIAL VEHICLE"]={type:"path",stroke:!1,d:"m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"},o["AIR.M1.BOOM-ONLY"]=l("B"),o["AIR.M1.DROUGE-ONLY"]=l("D"),o["AIR.M1.ELECTRONIC SUPPORT (ES)"]=l(R?"ES":"ESM"),o["AIR.M1.HIJACKER"]=l("HJ"),o["AIR.M1.CYBERSPACE"]=l("CYB"),o["AIR.M1.FIGHTER/BOMBER"]=l("F/B"),o["AIR.M1.ELECTRONIC ATTACK (EA)"]=l("EA"),o["AIR.M1.MULTIMISSION"]=l("MM"),o["AIR.M1.HIJACKING"]=l("H"),o["AIR.M1.ASW HELO-LAMPS"]=l("LP"),o["AIR.M1.ASW HELO - SH-60R"]=l("60R"),o["AIR.M2.HEAVY"]=r("H"),o["AIR.M2.MEDIUM"]=r("M"),o["AIR.M2.LIGHT"]=r("L"),o["AIR.M2.BOOM-ONLY"]=r("B"),o["AIR.M2.DROUGE-ONLY"]=r("D"),o["AIR.M2.BOOM AND DROUGE"]=r("B/D"),o["AIR.M2.CLOSE RANGE"]=r("CR"),o["AIR.M2.SHORT RANGE"]=r("SR"),o["AIR.M2.MEDIUM RANGE"]=r("MR"),o["AIR.M2.LONG RANGE"]=r("LR"),o["AIR.M2.PHOTOGRAPHIC"]=r("P"),o["AIR.M2.CYBERSPACE"]=r("CYB"),o["AIR.M2.DOWNLINKED"]={type:"text",stroke:!1,x:100,y:140,fontsize:25,text:"DL"},o["AIR.MISSILE.ICON"]={type:"path",d:"M90,135 l0,-10 5,-5 0,-55 5,-5 5,5 0,55 5,5 0,10 -10,-10 z"},(R||S)&&(o["AIR.MISSILE.ICON"].fill=C?E.fillColor.Unknown:E.iconFillColor.Unknown),o["AIR.MISSILE.IC.ANTIBALLISTIC MISSILE"]={type:"text",stroke:!1,x:100,y:110,fontsize:25,text:"ABM"},o["AIR.MISSILE.IC.BOMB"]={type:"text",stroke:!1,x:100,y:110,fontsize:25,text:"BOMB"},o["AIR.MISSILE.M1.AIR"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"A"},o["AIR.MISSILE.M1.SURFACE"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"S"},o["AIR.MISSILE.M1.SUBSURFACE"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"U"}],o["AIR.MISSILE.M1.SPACE"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"P"}],o["AIR.MISSILE.M1.ANTI-BALLISTIC"]=[{type:"text",stroke:!1,x:68,y:95,fontsize:30,text:"A"},{type:"text",stroke:!1,x:68,y:125,fontsize:30,text:"B"}],o["AIR.MISSILE.M1.BALLISTIC"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"B"},o["AIR.MISSILE.M1.CRUISE"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"C"},o["AIR.MISSILE.M1.LAND"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"L"},o["AIR.MISSILE.M1.INTERCEPTOR"]={type:"text",stroke:!1,x:68,y:110,fontsize:30,text:"I"},o["AIR.MISSILE.M2.AIR"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"A"},o["AIR.MISSILE.M2.SURFACE"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"S"},o["AIR.MISSILE.M2.SUBSURFACE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"U"}],o["AIR.MISSILE.M2.SPACE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"P"}],o["AIR.MISSILE.M2.LAUNCHED"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"L"},o["AIR.MISSILE.M2.MISSILE"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"M"},o["AIR.MISSILE.M2.PATRIOT"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"P"},o["AIR.MISSILE.M2.STANDARD MISSILE - 2 (SM-2)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"2"}],o["AIR.MISSILE.M2.STANDARD MISSILE - 6 (SM-6)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"6"}],o["AIR.MISSILE.M2.EVOLVED SEA SPARROW MISSILE (ESSM)"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"S"}],o["AIR.MISSILE.M2.ROLLING AIRFRAME MISSILE (RAM)"]={type:"text",stroke:!1,x:132,y:110,fontsize:30,text:"R"},o["AIR.MISSILE.M2.SHORT RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"S"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.MEDIUM RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"M"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.INTERMEDIATE RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.LONG RANGE"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"L"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"R"}],o["AIR.MISSILE.M2.INTERCONTINENTAL"]=[{type:"text",stroke:!1,x:132,y:95,fontsize:30,text:"I"},{type:"text",stroke:!1,x:132,y:125,fontsize:30,text:"C"}],o)o.hasOwnProperty(M)&&(I.hasOwnProperty(M)&&console.warn("Override of: "+M),n.call(this,o[M],N),I[M]=o[M])}var y={type:"letter",getMetadata:o,getIcons:M,iconParts:[P],icons:function(I,t,E,R){I["S-A-------"]=[],I["S-A-M-----"]=[E["AR.I.MILITARY"]],I["S-A-MF----"]=[E["AR.I.FF.MILITARY FIXED WING"]],I["S-A-MFB---"]=[E["AR.I.BOMBER"]],I["S-A-MFF---"]=[E["AR.I.FIGHTER"]],I["S-A-MFFI--"]=[E["AR.I.FIGHTER INTERCEPTOR"]],I["S-A-MFT---"]=[E["AR.I.TRAINER"]],I["S-A-MFA---"]=[E["AR.I.ATTACK/STRIKE"]],I["S-A-MFL---"]=[E["AR.I.VSTOL"]],I["S-A-MFK---"]=[E["AR.I.TANKER"]],I["S-A-MFKB--"]=[E["AR.I.TANKER"],E["AIR.M1.BOOM-ONLY"]],I["S-A-MFKD--"]=[E["AR.I.TANKER"],E["AIR.M1.DROUGE-ONLY"]],I["S-A-MFC---"]=[E["AR.I.CARGO"]],I["S-A-MFCL--"]=[E["AR.I.CARGO"],E["AIR.M2.LIGHT"]],I["S-A-MFCM--"]=[E["AR.I.CARGO"],E["AIR.M2.MEDIUM"]],I["S-A-MFCH--"]=[E["AR.I.CARGO"],E["AIR.M2.HEAVY"]],I["S-A-MFJ---"]=[E["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I["S-A-MFO---"]=[E["AR.I.MEDICAL EVACUATION"]],I["S-A-MFR---"]=[E["AR.I.RECONNAISSANCE"]],I["S-A-MFRW--"]=[E["AR.I.AIRBORNE EARLY WARNING"]],I["S-A-MFRZ--"]=[E["AR.I.ELECTRONIC SUPPORT MEASURES"]],I["S-A-MFRX--"]=R?[E["AR.I.2525 PHOTOGRAPHIC"]]:[E["AR.I.RECONNAISSANCE"],E["AIR.M2.PHOTOGRAPHIC"]],I["S-A-MFP---"]=[E["AR.I.PATROL"]],I["S-A-MFPN--"]=[E["AR.I.ANTISURFACE WARFARE"]],I["S-A-MFPM--"]=[E["AR.I.MINE COUNTERMEASURES"]],I["S-A-MFU---"]=[E["AR.I.UTILITY"]],I["S-A-MFUL--"]=[E["AR.I.UTILITY"],E["AIR.M2.LIGHT"]],I["S-A-MFUM--"]=[E["AR.I.UTILITY"],E["AIR.M2.MEDIUM"]],I["S-A-MFUH--"]=[E["AR.I.UTILITY"],E["AIR.M2.HEAVY"]],I["S-A-MFY---"]=[E["AR.I.COMMUNICATIONS"]],I["S-A-MFH---"]=[E["AR.I.PERSONNEL RECOVERY"]],I["S-A-MFD---"]=[E["AR.I.AIRBORNE COMMAND POST"]],I["S-A-MFQ---"]=[E["AR.I.UNMANNED AERIAL VEHICLE"]],I["S-A-MFQA--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ATTACK"]],I["S-A-MFQB--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.BOMBER"]],I["S-A-MFQC--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.CARGO"]],I["S-A-MFQD--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.AIRBORNE COMMAND POST"]],I["S-A-MFQF--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.FIGHTER"]],I["S-A-MFQH--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.COMBAT SEARCH AND RESCUE"]],I["S-A-MFQJ--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I["S-A-MFQK--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.TANKER"]],I["S-A-MFQL--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.VSTOL"]],I["S-A-MFQM--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-A-MFQI--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.MINE COUNTERMEASURES"]],I["S-A-MFQN--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ANTISURFACE WARFARE"]],I["S-A-MFQP--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.PATROL"]],I["S-A-MFQR--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.RECONNAISSANCE"]],I["S-A-MFQRW-"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.AIRBORNE EARLY WARNING"]],I["S-A-MFQRZ-"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ELECTRONIC SURVEILLANCE MEASURES"]],I["S-A-MFQRX-"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.PHOTOGRAPHIC"]],I["S-A-MFQS--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.ANTISUBMARINE WARFARE"]],I["S-A-MFQT--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.TRAINER"]],I["S-A-MFQU--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.UTILITY"]],I["S-A-MFQY--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.COMMUNICATIONS"]],I["S-A-MFQO--"]=[E["AR.I.UNMANNED AERIAL VEHICLE"],E["AIR.M1.MEDEVAC"]],I["S-A-MFS---"]=[E["AR.I.ANTISUBMARINE WARFARE"]],I["S-A-MFM---"]=[E["AR.I.SPECIAL OPERATIONS FORCES"]],I["S-A-MH----"]=[E["AR.I.MILITARY ROTARY WING"]],I["S-A-MHA---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.ATTACK"]],I["S-A-MHS---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.ANTISUBMARINE WARFARE"]],I["S-A-MHU---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"]],I["S-A-MHUL--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"],E["AIR.M2.LIGHT"]],I["S-A-MHUM--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"],E["AIR.M2.MEDIUM"]],I["S-A-MHUH--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UTILITY"],E["AIR.M2.HEAVY"]],I["S-A-MHI---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.MINE COUNTERMEASURES"]],I["S-A-MHH---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.COMBAT SEARCH AND RESCUE"]],I["S-A-MHR---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.RECONNAISSANCE"]],I["S-A-MHQ---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.UNMANNED AERIAL VEHICLE"]],I["S-A-MHC---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"]],I["S-A-MHCL--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"],E["AIR.M2.LIGHT"]],I["S-A-MHCM--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"],E["AIR.M2.MEDIUM"]],I["S-A-MHCH--"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.CARGO"],E["AIR.M2.HEAVY"]],I["S-A-MHT---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.TRAINER"]],I["S-A-MHO---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.MEDEVAC"]],I["S-A-MHM---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-A-MHD---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.AIRBORNE COMMAND POST"]],I["S-A-MHK---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.TANKER"]],I["S-A-MHJ---"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I["S-A-ML----"]=[E["AR.I.FF.MILITARY BALLOON"]],I["S-A-MV----"]=[E["AR.I.VIP"]],I["S-A-ME----"]=[E["AR.I.ESCORT"]],I["S-A-W-----"]=[E["AIR.MISSILE.ICON"]],I["S-A-WM----"]=[E["AIR.MISSILE.ICON"]],I["S-A-WMS---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.LAUNCHED"]],I["S-A-WMSS--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.SURFACE"]],I["S-A-WMSA--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.AIR"]],I["S-A-WMSU--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SURFACE"],E["AIR.MISSILE.M2.SUBSURFACE"]],I["S-A-WMSB--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.IC.ANTIBALLISTIC MISSILE"]],I["S-A-WMA---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.LAUNCHED"]],I["S-A-WMAS--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.SURFACE"]],I["S-A-WMAA--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.AIR"]],I["S-A-WMAP--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.AIR"],E["AIR.MISSILE.M2.SPACE"]],I["S-A-WMU---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.SUBSURFACE"],E["AIR.MISSILE.M2.SURFACE"]],I["S-A-WML---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.LAND"],E["AIR.MISSILE.M2.AIR"]],I["S-A-WMCM--"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.CRUISE"],E["AIR.MISSILE.M2.MISSILE"]],I["S-A-WMB---"]=[E["AIR.MISSILE.ICON"],E["AIR.MISSILE.M1.BALLISTIC"],E["AIR.MISSILE.M2.MISSILE"]],I["S-A-WB----"]=[E["AIR.MISSILE.IC.BOMB"]],I["S-A-WD----"]=[E["AR.I.AIR DECOY"]],I["S-A-C-----"]=[E["AR.I.CIVILIAN"]],I["S-A-CF----"]=[E["AR.I.FF.CIVILIAN FIXED WING"]],I["S-A-CH----"]=[E["AR.I.FF.CIVILIAN ROTARY WING"]],I["S-A-CL----"]=[E["AR.I.FF.CIVILIAN BALLOON"]]}};function c(I,t,E,R,e,A){var C=t.frame,T=t.affiliation||"Friend",S=t.baseGeometry,N=t.numberSIDC,O=E.iconColor[T],G=E.iconFillColor[T],o=E.black[T],M=E.white[T],i={};for(var L in i["GR.IC.MILITARY"]=a("MIL"),i["GR.I.GOVERNMENT"]=a("GOV"),i["GR.IC.SUBMARINE NUCLEAR PROPULSION"]={type:"path",d:"m 75,110 -10,-10 10,-10 0,-10 50,0 0,10 10,10 -10,10 z"},i["GR.IC.FERRY"]=[{type:"path",fill:R?G:!C&&G,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"FE":"F"}],i["GR.IC.ADMINISTRATIVE"]=a("ADM"),i["GR.IC.MANUAL TRACK"]=a("MAN"),i["GR.IC.AIR DEFENSE CHAPARRAL"]=[{type:"path",fill:!1,d:"m 85,80 30,0 c 5.54,0 10,4.46 10,10 l 0,5 c 0,5.54 -4.46,10 -10,10 l -30,0 c -5.54,0 -10,-4.46 -10,-10 l 0,-5 c 0,-5.54 4.46,-10 10,-10 z"},{type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"C"}],i["GR.IC.AIR DEFENSE COMPOSITE"]={type:"path",d:"M85,120 C85,110 115,110 115,120 M90,115 L90,90 C90,80 110,80 110,90 L110,115 M100,112 l0,-30",fill:!1},i["GR.IC.AIR DEFENSE H/MAD"]=a("HMD"),i["GR.IC.AIR DEFENSE H/MAD HAWK"]={type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"H"},i["GR.IC.AIR DEFENSE H/MAD PATRIOT"]={type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"P"},i["GR.IC.AIR DEFENSE MISSILE"]={type:"path",d:"M90,120 L90,90 C90,80 110,80 110,90 L110,120",fill:!1},i["GR.IC.FLOATING CRAFT"]={type:"path",d:"m 90,75 20,0 0,-10 -5,0 0,-10 -10,0 0,10 -5,0 z",stroke:!1},i["GR.IC.AIR AND MISSILE DEFENSE"]=a("MD"),i["GR.IC.MILITARY HISTORY"]=a("MH"),i["GR.IC.AIR DEFENSE TARGETING UNIT"]=[{type:"path",d:"M80,100 l20,-15 0,15 20,-15 M75,80 C75,100 85,115 105,115",fill:!1},{type:"circle",cx:75,cy:110,r:5}],i["GR.IC.AIR DEFENSE THEATER MISSILE DEFENSE UNIT"]=a("TMD"),i["GR.IC.AIR DEFENSE SHORT RANGE"]=a("SRD"),i["GR.IC.AIR DEFENSE STINGER"]=[{type:"path",fill:!1,d:"m 85,80 30,0 c 5.54,0 10,4.46 10,10 l 0,5 c 0,5.54 -4.46,10 -10,10 l -30,0 c -5.54,0 -10,-4.46 -10,-10 l 0,-5 c 0,-5.54 4.46,-10 10,-10 z"},{type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"S"}],i["GR.IC.AIR DEFENSE VULCAN"]=[{type:"path",fill:!1,d:"m 85,80 30,0 c 5.54,0 10,4.46 10,10 l 0,5 c 0,5.54 -4.46,10 -10,10 l -30,0 c -5.54,0 -10,-4.46 -10,-10 l 0,-5 c 0,-5.54 4.46,-10 10,-10 z"},{type:"text",stroke:!1,x:100,y:101,fontsize:20,text:"V"}],i["GR.IC.AIR DEFENSE GUN UNIT"]={type:"path",d:"M100,80 L100,120 M92,90 l0,20 M108,90 l0,20",fill:!1},i["GR.IC.AIR TRAFFIC SERVICES"]={type:"path",d:"m 100,95 0,25 m 7.5,-32.5 c 0,4.1 -3.4,7.5 -7.5,7.5 -4.1,0 -7.5,-3.4 -7.5,-7.5 0,-4.1 3.4,-7.5 7.5,-7.5 4.1,0 7.5,3.4 7.5,7.5 z M 60,85 l 40,15 40,-15 0,30 -40,-15 -40,15 z"},i["GR.IC.AIRPORT OF DEBARKATION"]=[{type:"path",fill:!1,d:"M80,70 l40,0 M80,80 l25,-25 M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1}],i["GR.IC.ALLIED COMMAND EUROPE RAPID REACTION CORPS (ARRC)"]=a("ARRC"),i["GR.IC.ALLIED COMMAND OPERATIONS"]=a("ACO"),i["GR.IC.AMMUNITION"]={type:"path",d:"m 90,117 0,-25 c 0,-15 20,-15 20,0 l 0,25 m -25,0 30,0",fill:!1},i["GR.IC.ARMOUR"]={type:"path",d:"M125,80 C150,80 150,120 125,120 L75,120 C50,120 50,80 75,80 Z",fill:!1},i["GR.IC.ARMOR, WHEELED"]=[{type:"path",d:"m 120,80 c 25,0 25,30 0,30 l -40,0 C 55,110 55,80 80,80 Z",fill:!1},{type:"circle",cx:70,cy:115,r:5,fill:!1},{type:"circle",cx:100,cy:115,r:5,fill:!1},{type:"circle",cx:130,cy:115,r:5,fill:!1}],i["GR.IC.AVIATION ROTARY WING"]={type:"path",d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z"},i["GR.IC.AVIATION ROTARY WING 2525C"]={type:"path",d:"M100,100 L100,140"},i["GR.IC.AVIATION FIXED WING"]={type:"path",d:"M100,100 L130,88 c15,0 15,24 0,24 L100,100 70,112 c-15,0 -15,-24 0,-24 Z"},i["GR.IC.COMBATANT"]=[{type:"path",d:"m 86.9,110 c -3.6,2 -7.2,3.9 -10.8,5.9 2.1,2.9 6.7,3.9 10,2.1 2.6,-0.9 4.7,-3.8 3.1,-6.1 -0.8,-0.6 -1.5,-1.3 -2.3,-1.9 z m 26.3,0.1 c 3.6,2 7.2,3.9 10.8,5.9 -2.1,2.9 -6.7,3.9 -10,2.1 -2.6,-0.9 -4.7,-3.8 -3.1,-6.1 0.8,-0.6 1.5,-1.3 2.3,-1.9 z",fill:!1},{type:"path",d:"m 112.9,110 c -5.6,-4 -11.3,-7.9 -16.1,-12.5 -4.2,-4.5 -7,-9.8 -9.2,-15.1 -0.8,4.4 -0.9,9.3 2.4,13.2 3.6,4.5 8.6,8.1 13.5,11.8 2.3,1.7 4.7,3.3 7.1,4.8 0.8,-0.7 1.5,-1.5 2.3,-2.2 m -25.7,0 c 5.6,-4 11.3,-7.9 16.1,-12.5 4.2,-4.5 7,-9.8 9.2,-15.1 0.8,4.4 0.9,9.3 -2.4,13.2 -3.6,4.5 -8.6,8.1 -13.5,11.8 -2.3,1.7 -4.7,3.3 -7.1,4.8 -0.8,-0.7 -1.5,-1.5 -2.3,-2.2",fill:M,strokewidth:2}],i["GR.IC.AVIATION COMPOSITE"]={type:"path",d:"m 100,100 15.7,7.9 c 11.8,0 11.8,-15.7 0,-15.7 z m 0,0 -15.7,-7.9 c -11.8,0 -11.8,15.7 0,15.7 z m -10,-20 10,20 -10,20 20,0 -10,-20 10,-20 z"},i["GR.IC.AVIATION TACTICAL AIR CONTROL PARTY"]=a("TACP"),i["GR.IC.AVIATION FORWARD AIR CONTROLLER"]=a("FAC"),i["GR.IC.SPECIAL TROOPS"]=a("ST"),i["GR.IC.RANGER"]=a("RGR"),i["GR.IC.BAND"]=a("BAND"),i["GR.IC.ARMY MUSIC"]={type:"path",d:"m 99.6,110.5 c -4.8,-1.4 -10.9,2.2 -10.4,7.7 1,2.5 6.2,2.4 9.6,-0.2 1.9,-1.5 2.7,-3.8 2.3,-6.9 l -0.1,-21.3 c 12.7,5.8 7.6,14.8 5.6,20.7 4.7,-4.9 5.8,-13.2 1.5,-17.9 -4.4,-4.6 -5,-7 -8.4,-13 z",stroke:!1},i["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]=a("ATF"),i["GR.IC.CBRN"]=[{type:"path",d:"m 80,120 c 0,-20 10,-32 50,-35 m -10,35 C 120,100 110,88 70,85",fill:!1},{type:"circle",cx:75,cy:90,r:6},{type:"circle",cx:125,cy:90,r:6}],i["GR.CHEMICAL, BIOLOGICAL, RADIOLOGICAL, NUCLEAR, AND HIGH-YIELD EXPLOSIVES"]=[{type:"path",d:"m 90,80 20,0 10,20 -10,20 -20,0 -10,-20 z",fill:G},a("E")],i["GR.IC.SPACE"]=[{type:"path",d:"m 100,80 -1.25,16.5 -4.2,-3.3 2.5,4.9 -5.5,1.7 -0.4,-0 0.2,0 -0.2,0 0.4,-0 5.4,2.3 -1.8,4.6 3.6,-3.5 1.3,16.5 1.3,-16.5 4.2,3.3 -2.5,-4.9 5.5,-1.7 0.4,0 -0.2,-0 0.2,0 -0.4,0 -5.3,-1.7 2.5,-4.6 -4,3.2 z",stroke:!1}],i["GR.IC.CIVIL AFFAIRS"]=a("CA"),i["GR.IC.CIVIL-MILITARY-COOPERATION"]={type:"path",d:"m 60,80 80,0 0,20 c 0,25 -80,25 -80,0 z",fill:!1},i["GR.I.CIVILIAN"]=a("CIV"),i["GR.I.CIVILIAN"].fill=R||N?G:!C&&G,i["GR.I.CIVILIAN"].stroke=o,i["GR.I.CIVILIAN"].strokewidth=3,i["GR.IC.COMMAND AND CONTROL"]=a("C2"),i["GR.IC.COMBAT"]=a("CBT"),i["GR.IC.COMBAT SERVICE SUPPORT"]=a("CSS"),i["GR.IC.COMBAT SUPPORT"]=a("CS"),i["GR.IC.COMBAT SUPPORT (MANOEUVRE ENHANCEMENT)"]={type:"path",d:"m 85,80 0,25 15,15 15,-15 0,-25 z"},i["GR.IC.COMBINED ARMS"]={type:"path",d:"m 70,80 60,40 m 0,-40 -60,40 m 55,-40 c 25,0 25,40 0,40 l -50,0 C 50,120 50,80 75,80 z",fill:!1},i["GR.IC.COUNTER-INTELLIGENCE"]=a("CI"),i["GR.IC.CRIMINAL INVESTIGATION DIVISION"]=a("CID"),i["GR.IC.DIVING"]=[],i["GR.IC.DOG"]=a("DOG"),i["GR.IC.DRILLING"]={type:"path",d:"m 85,80 5,40 20,0 5,-40 z"},i["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]=a("DEA"),i["GR.IC.ELECTRONIC RANGING"]={type:"path",d:"M120,130 c-40,20 -80,-45 -40,-70 z M100,95 L140,75",fill:!!R&&G},i["GR.IC.ELECTRONIC WARFARE"]=a("EW"),i["GR.IC.EMERGENCY MEDICAL OPERATION"]={type:"path",d:"m 90,60 0,22.7 -19.7,-11.3 -10,17.3 L 80,100 l -19.7,11.3 10,17.3 L 90,117.3 90,140 l 20,0 0,-22.7 19.7,11.3 10,-17.3 L 120,100 l 19.7,-11.3 -10,-17.3 L 110,82.7 110,60 90,60 z"},i["GR.IC.ENGINEER"]={type:"path",fill:!1,d:"M60,120 L60,80 140,80 140,120 M100,80 L100,110"},i["GR.IC.ENGINEER MECHANIZED"]={type:"path",fill:!1,d:"m 100,90 0,15 m -25,5 0,-20 50,0 0,20 m 0,-30 c 25,0 25,40 0,40 l -50,0 C 50,120 50,80 75,80 Z"},i["GR.IC.ENGINEER UTILITY VEHICLE"]={type:"path",fill:!1,d:"m 100,100 0,10 m -15,5 0,-15 30,0 0,15 M 70,80 c 0,15 60,15 60,0 l 0,40 -60,0 z"},i["GR.IC.ENVIRONMENTAL PROTECTION"]={type:"path",d:"m 100,80 -10,15 5,0 -10,10 5,0 -10,10 15,0 0,5 10,0 0,-5 15,0 -10,-10 5,0 -10,-10 5,0 z",fill:!1},i["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]=a("EOD"),i["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]=a("FBI"),i["GR.IC.FIELD ARTILLERY"]={type:"circle",cx:100,cy:100,r:15},i["GR.IC.FIELD ARTILLERY OBSERVER"]=[{type:"circle",cx:100,cy:108,r:5},{type:"path",d:"m 80,120 30,-20 m -30,20 20,-40 20,40 z",fill:!1}],i["GR.IC.FIELD CAMP CONSTRUCTION"]=[i["GR.IC.ENGINEER"],{type:"text",stroke:!1,x:100,y:77,fontsize:25,text:"CAMP"}],i["GR.IC.FINANCE"]={type:"path",d:"m 80,95 10,-10 20,0 10,10 m -40,0 0,20 40,0 0,-20 z",fill:!1},i["GR.IC.FIRE PROTECTION"]={type:"path",d:"m 120,90 -5,5 -10,-10 5,-5 -20,0 5,5 -10,10 -5,-5 0,20 5,-5 10,10 -5,5 20,0 -5,-5 10,-10 5,5 z"},i["GR.IC.FIXED WING MISO"]=[{type:"path",fill:!!R&&G,stroke:o,d:"M70,85 l40,0 10,-10 0,50 -10,-10 -40,0 z M120,85 l10,0 M120,95 l10,0 M120,105 l10,0 M120,115 l10,0"},{type:"path",d:"M 78.8 61.5 C 68.1 61.5 68.1 78.5 78.8 78.5 L 100 70 L 78.8 61.5 z M 100 70 L 121.3 78.5 C 131.9 78.5 131.9 61.5 121.3 61.5 L 100 70 z"}],i["GR.IC.GEOSPATIAL SUPPORT"]=a("GEO"),i["GR.IC.GOVERNMENT ORGANIZATION"]=a("GO"),i["GR.IC.INFORMATION OPERATIONS"]=a(R&&!N?"IW":"IO"),i["GR.IC.INTERNATIONAL SECURITY ASSISTANCE FORCE (ISAF)"]=a("ISAF"),i["GR.IC.INTERROGATION"]=a("IPW"),i["GR.IC.JOINT FIRE SUPPORT"]=a("JFS"),i["GR.IC.JOINT INFORMATION BUREAU"]=a("JIB"),i["GR.IC.JOINT INTELLIGENCE CENTRE"]=a("JIC"),i["GR.IC.JUDGE ADVOCATE GENERAL"]=a("JAG"),i["GR.IC.LABOUR"]={type:"path",d:"m 90,85 20,0 m -10,0 0,25 -10,0 10,10 10,-10 -10,0",fill:!1},i["GR.IC.LAUNDRY/BATH"]={type:"path",d:"m 95,80 10,10 0,30 m 0,-30 -10,0 m 10,0 -10,10",fill:!1},i["GR.IC.LAW ENFORCEMENT"]={type:"path",d:"M 100,118 C 76,109 85,95 82,82 c 6,7 12,7 18,0 6,7 12,7 18,0 -3,13 6,27 -18,36 z",fill:!1},i["GR.IC.LAW ENFORCEMENT VESSEL"]=[{type:"path",fill:R?G:!C&&G,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},{type:"path",d:"m 135,100 -15,35 -10,0 15,-35 z"}],i["GR.IC.LIAISON"]=a("LO"),i["GR.IC.MAINTENANCE"]={type:"path",d:"M70,90 c10,0 10,20 0,20 m10,-10 l40,0 m10,-10 c-10,0 -10,20 0,20",fill:!1},i["GR.IC.MATERIEL"]=a("MAT"),i["GR.IC.MEDICAL EVACUATION HELICOPTER"]={type:"path",d:"M60,85 l40,15 40,-15 0,30 -40,-15 -40,15 z M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"},i["GR.IC.MESSENGER"]=a("M"),i["GR.IC.METEOROLOGICAL"]=a("MET"),i["GR.IC.MILITARY INFORMATION SUPPORT OPERATIONS (MISO)"]={type:"path",d:"M70,85 l40,0 10,-10 0,50 -10,-10 -40,0 z M120,85 l10,0 M120,95 l10,0 M120,105 l10,0 M120,115 l10,0"},i["GR.IC.MILITARY INTELLIGENCE"]=a("MI"),i["GR.IC.MILITARY POLICE"]=a("MP"),i["GR.IC.MINE"]={type:"path",d:"m 120,100 c 0,5.5 -9,10 -20,10 -11,0 -20,-4.5 -20,-10 0,-5.5 9,-10 20,-10 11,0 20,4.5 20,10 z m -5,-20 -30,40 m 0,-40 30,40 m -15,-40 0,40"},i["GR.IC.MINE CLEARING"]=[i["GR.IC.MINE"],{type:"text",stroke:!1,x:100,y:77,fontsize:25,text:"CLR"}],i["GR.IC.MINE LAUNCHING"]=[i["GR.IC.MINE"],{type:"path",d:"m 80,125 0,10 40,0 0,-10 z"}],i["GR.IC.MINE LAYING"]=[i["GR.IC.MINE"],{type:"path",d:"m 80,65 0,10 40,0 0,-10 z"}],i["GR.IC.MISSILE"]={type:"path",d:"M90,120 L90,90 C90,80 110,80 110,90 L110,120 M100,120 L100,80",fill:!1},i["GR.IC.MISSILE.LIGHT"]={type:"path",d:"M90,90 L110,90"},i["GR.IC.MISSILE.MEDIUM"]={type:"path",d:"M90,90 L110,90 M90,97 L110,97"},i["GR.IC.MISSILE.HEAVY"]={type:"path",d:"M90,90 L110,90 M90,97 L110,97 M90,104 L110,104"},i["GR.IC.MORALE, WELFARE, AND RECREATION"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MWR"},i["GR.IC.MORTAR"]=[{type:"circle",cx:100,cy:115,r:5,fill:!1},{type:"path",d:"M100,111 l0,-30 M90,90 l10,-10 10,10",fill:!1}],i["GR.IC.MORTUARY AFFAIRS"]={type:"path",d:"m 90,95 20,0 m -10,-10 0,30 m -15,-35 30,0 0,40 -30,0 z",fill:!1},i["GR.IC.MULTINATIONAL (MN)"]=a("MN"),i["GR.IC.NAVAL"]=[{type:"path",d:"m 105,85 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -20,5 30,0 m -15,0 0,30",fill:!1},{type:"path",d:"M 82.3 102.6 C 82.3 113.9 84.2 115.9 84.2 115.9 L 86.5 114.1 C 90.2 117.8 94.8 120.8 99.9 120.9 L 100.5 120.9 L 101 120.9 C 106.2 120.8 110.8 117.8 114.4 114.1 L 116.7 115.9 C 116.7 115.9 118.6 113.9 118.7 102.6 C 113.9 106.8 108.9 109 108.9 109 L 110.9 110.7 C 110.9 110.7 106.8 115.2 100.5 115.2 L 100.5 115.2 C 100.5 115.2 100.4 115.2 100.4 115.2 C 94.2 115.2 90 110.7 90 110.7 L 92 109 C 92 109 87 106.8 82.3 102.6 z",stroke:!1}],i["GR.IC.OBSERVER/OBSERVATION"]={type:"path",d:"m 100,80 -25,40 50,0 z",fill:!1},i["GR.IC.ORDNANCE"]={type:"path",d:"M 90,97 83,83 m 27,14 7,-14 M 95,95 90,81 m 15,14 5,-14 m 10,26.5 c 0,6.9 -9,12.5 -20,12.5 -11,0 -20,-5.6 -20,-12.5 0,-6.9 9,-12.5 20,-12.5 11,0 20,5.6 20,12.5 z",fill:!1},i["GR.IC.PERSONNEL SERVICES"]=a("PS"),i["GR.IC.PETROLEUM OIL LUBRICANTS"]={type:"path",d:"m 100,119 0,-24 m 0,0 C 99,95 85,81 85,81 l 30,0 z",fill:!1},i["GR.IC.PIPELINE"]={type:"path",d:"m 115,110 15,0 m -15,-15 15,0 m -45,15 -15,0 M 85,95 70,95 m 30,-15 0,10 -15,0 0,25 30,0 0,-25 -15,0 m -10,-10 20,0",fill:!1},i["GR.IC.POSTAL"]={type:"path",d:"m 80,80 30,0 c -1.4,15.5 0,25 10,35 -20,0 -40,-20 -40,-35 z",fill:!1},i["GR.IC.PUBLIC AFFAIRS"]=a("PA"),i["GR.IC.PUBLIC AFFAIRS BROADCAST"]=a("BPAD"),i["GR.IC.PSYCHOLOGICAL OPERATIONS"]={type:"path",fill:!!R&&G,stroke:o,d:"M70,85 l40,0 10,-10 0,50 -10,-10 -40,0 z M120,85 l10,0 M120,95 l10,0 M120,105 l10,0 M120,115 l10,0"},i["GR.IC.QUARTERMASTER"]={type:"path",fill:!1,d:"m 115,95 c 0,15 15,15 15,0 0,-15 -15,-15 -15,0 z m 0,0 -45,0 0,10 10,0 0,-10"},i["GR.IC.RADAR"]={type:"path",d:"M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",fill:!1},i["GR.IC.RADIO"]=[{type:"circle",cx:100,cy:130,r:10,fill:!1},{type:"path",fill:!1,d:"M100,120 l0,-60 M70,70 l10,-10 10,10 10,-10 10,10 10,-10 10,10"}],i["GR.IC.RADIO RELAY"]=[{type:"circle",cx:100,cy:130,r:10,fill:!1},{type:"path",fill:!1,d:"M100,120 l-15,-40 15,0 0,-20 M70,60 l60,0"}],i["GR.IC.RADIO TELETYPE CENTRE"]=[{type:"text",stroke:!1,x:100,y:135,fontsize:30,text:"C"},{type:"path",fill:!1,d:"M100,140 l0,-80 M70,60 l60,0 M80,70 l40,0"}],i["GR.IC.RAILHEAD"]=[{type:"path",fill:!1,d:"M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1},s._translate(0,-50,[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:125,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}])],i["GR.IC.RELIGIOUS SUPPORT"]=a("REL"),i["GR.IC.REPLACEMENT HOLDING UNIT"]=a("RHU"),i["GR.IC.SEA-AIR-LAND"]=a("SEAL"),i["GR.IC.SUPPORT"]=a("SPT"),i["GR.IC.ARMY FIELD SUPPORT"]=a("AFS"),i["GR.IC.CONTRACTING SERVICES"]=a("KS"),i["GR.IC.SEAPORT OF DEBARKATION"]=[{type:"path",fill:!1,d:"M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1},s._translate(0,-35,s._scale(.6,i["GR.IC.NAVAL"]))],i["GR.IC.SECURITY"]=a("SEC"),i["GR.IC.SECURITY POLICE (AIR)"]=[a("SP"),{type:"path",d:"M 78.8 121.5 C 68.1 121.5 68.1 138.5 78.8 138.5 L 100 130 L 78.8 121.5 z M 100 130 L 121.3 138.5 C 131.9 138.5 131.9 121.5 121.3 121.5 L 100 130 z"}],i["GR.IC.SENSOR"]={type:"path",d:"m 100,80 c 0,7.5 12.5,20 20,20 -7.5,0 -20,12.5 -20,20 0,-7.5 -12.5,-20 -20,-20 7.5,0 20,-12.5 20,-20 z"},i["GR.IC.SHORE PATROL"]=a("SP"),i["GR.IC.SNIPER"]={type:"path",fill:!1,d:"M 60 85 L 90 85 L 60 85 z M 110 85 L 140 85 L 110 85 z M 100 90 L 100 115 L 100 90 z"},i["GR.IC.PARACHUTE RIGGER"]={type:"path",fill:!1,d:"m 120,100 -20,20 -20,-20 m 0,0 c 0,-25 40,-25 40,0 l -40,0"},i["GR.IC.SPECIAL FORCES"]=a("SF"),i["GR.IC.SPECIAL OPERATIONS FORCES"]=a("SOF"),i["GR.IC.SURVEILLANCE"]={type:"path",d:"m 100,80 -25,40 50,0 z"},i["GR.IC.SURVEY"]=[{type:"path",d:"M85,120 l15,-15 15,15 ",fill:!1},{type:"path",d:"M100,105 l0,-25 20,12.5 z",fill:!!R&&G}],i["GR.IC.SUSTAINMENT"]=a("SUST"),i["GR.IC.TELEPHONE SWITCH"]=[{type:"text",stroke:!1,x:100,y:135,fontsize:30,text:"C"},{type:"path",fill:!1,d:"M100,140 l0,-80 M70,60 l60,0"}],i["GR.IC.TOPOGRAPHIC"]={type:"path",fill:!1,d:"m 85,105 c 10,5 20,5 30,0 m -15,-15 15,30 m -30,0 15,-30 0,-10"},i["GR.IC.TRANSPORTATION"]=[{type:"path",fill:!1,d:"M100,80 l0,40 M81,90.5 l38,19 M81,109.5 l38,-19"},{type:"circle",cx:100,cy:100,r:20,fill:!1}],i["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]=a("TSA"),i["GR.IC.UNMANNED SYSTEMS"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},i["GR.IC.SEARCH AND RESCUE"]=a("SAR"),i["GR.IC.DIVER, CIVILIAN"]={type:"path",fill:G,d:"M 114.3,94 C 114.3,102.3 107.9,109 100,109 c -7.9,0 -14.2,-6.7 -14.2,-15 0,-8.3 6.4,-15 14.2,-15 7.9,0 14.3,6.7 14.3,15 z m 0,27 14.3,15 -57,0 14.3,-15 M 125.7,79 l 14.3,0 0,30 -14.3,0 m -51.3,0 -14.3,0 0,-30 14.3,0 m 54.2,15 c 0,16.6 -12.8,30 -28.5,30 -15.7,0 -28.5,-13.4 -28.5,-30 C 71.5,77.4 84.3,64 100,64 115.7,64 128.5,77.4 128.5,94 z"},i["GR.IC.VIDEO IMAGERY"]={type:"path",fill:!1,d:"m 140,110 -26,0 m 7,-20 19,0 m -15,-10 -65,0 0,40 50,0 z m 15,5 0,30"},i["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]=a("USSS"),i["GR.IC.WATER"]={type:"path",d:"m 65,90 50,0 c 10,0 20,10 20,20 m -40,-30 20,0 m -10,0 0,10",fill:!1},i["GR.IC.WATER PURIFICATION"]=[i["GR.IC.WATER"],{type:"text",stroke:!1,x:90,y:110,fontsize:20,text:"PURE"}],i["GR.IC.FF.AIR ASSAULT WITH ORGANIC LIFT"]={Unknown:{type:"path",d:"M35,120 L 90,120 l10,10 10,-10 L165,120",fill:!1},Friend:{type:"path",d:"M25,120 L 90,120 l10,10 10,-10 L175,120",fill:!1},Neutral:{type:"path",d:"M45,120 L 90,120 l10,10 10,-10 L155,120",fill:!1},Hostile:{type:"path",d:"M50,120 L 90,120 l10,10 10,-10 L150,120",fill:!1}}[T],i["GR.IC.FF.AIR DEFENCE"]={Unknown:{type:"path",d:"m 55,135 c 10,-20 80,-20 90,0",fill:!1},Friend:{type:"path",d:"M25,150 C25,110 175,110 175,150",fill:!1},Neutral:{type:"path",d:"M45,150 C45,110 155,110 155,150",fill:!1},Hostile:{type:"path",d:"M70,140 C70,115 130,115 130,140",fill:!1}}[T],i["GR.IC.FF.AIR AND NAVAL GUNFIRE LIAISON COMPANY"]=[],i["GR.IC.FF.AMPHIBIOUS"]={Unknown:{type:"path",d:"m 30,95 c 10,0 0,15 13.5,15 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 13.5,0 3.5,-15 13.5,-15",fill:!1},Friend:{type:"path",d:"m 25,90 c 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 20,-20",fill:!1},Neutral:{type:"path",d:"m 45,110 c 18.8,0 0,-20 18,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18,20",fill:!1},Hostile:{type:"path",d:"m 32,95 c 10,0 0,15 11.5,15 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 11.5,0 1.5,-15 11.5,-15",fill:!1}}[T],i["GR.IC.FF.ANALYSIS"]={type:"path",d:"m 100,120 0,-65 m 0,90 -30,-25 60,0 z",fill:!1},i["GR.IC.FF.ANTITANK/ANTIARMOUR"]={Unknown:{type:"path",fill:!1,d:"M55,135 L100,33 145,135"},Friend:{type:"path",fill:!1,d:"M25,150 L100,52 175,150"},Neutral:{type:"path",fill:!1,d:"M45,150 L100,47 155,150"},Hostile:{type:"path",fill:!1,d:"M60,132 L100,30 140,132"}}[T],i["GR.IC.FF.BORDER PATROL"]=[{type:"path",stroke:!1,d:"M 122.8 66.8 C 119.9 66.8 117.4 68.6 117.4 71.6 L 117.4 73.1 L 128.7 73.1 L 128.7 72.4 C 128.7 68.8 126.5 66.8 122.8 66.8 z M 108.6 74.8 L 108.6 76 L 117.6 76 L 117.5 77.5 L 118 80.8 C 119.1 81.5 118.9 82.5 120.8 83.5 C 122.1 84.1 124 84 125.2 83.4 C 127.5 82.4 129 79.2 128.3 76 L 137.5 76 L 137.5 74.8 L 108.6 74.8 z M 94.8 82.1 C 93.3 82.1 92 83.5 92 85 L 92 85.2 C 92 86.6 96 91.3 97 92.6 C 98.2 94.3 100.8 98.8 103.2 98.8 C 104.5 98.8 111.1 93.7 112.6 92.8 L 112.6 106.2 L 126.4 85.6 C 123 85.6 114.9 85.2 112.2 85.9 C 110.2 86.4 105 91.6 103.6 91.7 C 103.4 91 100.6 87.5 100 86.5 C 99.2 85.4 97.2 82.1 95.6 82.1 L 94.8 82.1 z M 130.4 85.6 C 129.6 85.6 117.5 104.1 116.3 106.2 L 128.1 106.2 L 128.1 110.6 L 112.5 110.6 L 112.5 133.2 L 120.7 133.2 L 122 117.5 L 124.3 117.5 L 125.6 133.2 L 133.5 133.2 L 133.5 87.9 C 133.5 87.2 131.2 85.6 130.4 85.6 z M 66.9 90.7 C 66.5 91.4 62.5 96.9 62.5 96.9 C 62.5 97.8 76.7 107.2 78.5 108.3 C 81.4 110.2 83.9 112.1 86.7 114 C 88.2 115 89.4 115.9 90.8 116.8 C 92.1 117.7 94.1 118.5 94.1 120.4 L 94.1 133.2 L 105.5 133.2 L 105.5 121.7 C 105.5 120.6 107.2 119 107.2 118.8 C 107.2 117.6 106.1 118.6 105.6 116.9 C 105.2 115.4 105.4 115.6 104.5 114.5 C 103.5 113.1 101.9 112 99.8 112 C 96.8 112 97.6 111.8 95.3 110.3 C 93.9 109.3 92.5 108.4 91.2 107.4 C 88.7 105.5 85.8 103.5 83.2 101.8 C 80.9 100.3 68.2 91 66.9 90.7 z M 67.9 92.6 L 72.7 95.7 L 72.8 103 L 67.9 99.9 L 67.9 92.6 z M 77.8 99.3 L 82.6 102.6 L 82.6 110 L 77.8 106.6 L 77.8 99.3 z M 87.4 106.2 L 92.5 109.5 L 92.4 116.9 L 87.4 113.5 L 87.4 106.2 z"},{type:"path",fill:!!R&&G,stroke:!1,d:"M 117.4 73.1 L 117.4 74.8 L 128.7 74.8 L 128.7 73.1 L 117.4 73.1 z M 126.4 85.6 L 112.6 106.2 L 112.6 110.6 L 128.1 110.6 L 128.1 106.2 L 116.4 106.2 C 117.5 104.1 129.6 85.6 130.4 85.6 L 126.4 85.6 z M 67.9 92.6 L 67.9 99.9 L 72.8 103 L 72.7 95.7 L 67.9 92.6 z M 77.8 99.3 L 77.8 106.6 L 82.6 110 L 82.6 102.6 L 77.8 99.3 z M 87.4 106.2 L 87.4 113.5 L 92.4 116.9 L 92.5 109.5 L 87.4 106.2 z "}],i["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]={type:"path",fill:!1,d:"m 80,60 20,20 20,-20 m -20,0 0,80"},i["GR.IC.FF.CORPS SUPPORT"]={Unknown:{type:"path",d:"M160,75 l-15,25 15,25",fill:!1},Friend:{type:"path",d:"M175,50 l-30,50 30,50",fill:!1},Neutral:{type:"path",d:"M155,50 l-20,50 20,50",fill:!1},Hostile:{type:"path",d:"M150,80 l-15,20 15,20",fill:!1}}[T],i["GR.IC.FF.CUSTOMS SERVICE"]=[{type:"path",stroke:!1,d:"M 115.5 69.8 C 115.8 70.4 116.9 72.9 117.5 72.9 L 128.3 72.9 L 128.3 69.8 L 115.5 69.8 z M 117.3 74.7 C 116.8 74.7 116 75.7 115.8 76.1 L 117.2 76.1 L 117.2 76.8 C 117.2 79.6 119.8 81.8 122.8 81.8 C 126.5 81.8 128.3 78.6 128.3 74.7 L 117.3 74.7 z M 111.3 83.6 C 110.5 83.6 99.4 91.8 97.8 92.9 C 95.6 94.4 93 96.1 91 97.7 C 89.1 99.2 85.4 100.5 85.4 103.6 L 85.4 104 C 85.4 104.7 87.1 106.7 88.2 106.7 L 88.8 106.7 C 90.2 106.7 108 93.4 111.3 91.7 L 111.3 105.3 L 126 83.6 L 111.3 83.6 z M 75.3 83.6 C 74.5 83.6 73.4 84.4 73.4 85 L 73.4 108.9 C 73.4 109.8 73.9 110.2 74.4 110.5 L 78.5 110.5 L 78.5 83.6 L 75.3 83.6 z M 78.5 110.5 L 78.5 135.2 L 105.6 135.2 L 105.6 110.5 L 78.5 110.5 z M 130.5 83.6 C 129.6 83.6 123.8 92.9 122.9 94.2 C 121.9 95.7 115.7 104.5 115.5 105.3 L 127.6 105.3 L 127.6 110.3 L 111.5 110.3 L 111.5 134.8 L 119.6 134.8 C 120.6 134.8 121.1 127.9 121.3 126.6 C 121.7 123.9 122.4 120.4 122.6 117.8 L 122.9 117.8 L 125.4 134.8 L 133.9 134.8 L 133.9 86.7 C 133.9 85.6 131.9 83.6 130.7 83.6 L 130.5 83.6"},{type:"path",fill:!!R&&G,stroke:!1,d:"M 117.5 72.9 L 117.3 74.7 L 128.3 74.7 L 128.3 72.9 L 117.5 72.9 z M 126 83.7 L 111.3 105.3 L 111.5 110.3 L 127.7 110.3 L 127.7 105.3 L 115.5 105.3 C 115.7 104.5 121.9 95.7 122.9 94.3 C 123.8 92.9 129.6 83.7 130.5 83.7 L 126 83.7 z "}],i["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]={type:"path",stroke:!1,d:"M 100.2 62.3 C 100.1 63.2 99 66.3 98.7 67.4 C 97.8 69.9 99.4 70 99.4 72.3 L 99.4 73 C 99.4 73.7 98.9 73.5 98.3 73.8 C 96.6 72.4 94.2 71 91.3 71 L 90 71 C 84.2 71 80 75.5 74.6 75.5 L 73.9 75.5 C 72.3 75.5 71.5 74.1 71.3 75.8 L 74.3 77.2 C 71.8 82.4 69.9 89.7 67.5 95.5 C 66.3 98.6 65.3 101.6 64.1 104.7 C 63.5 106.3 63.1 107.7 62.5 109.3 C 62 110.5 61.8 113.1 60.2 113.2 C 62.4 116.4 68 120.5 73.3 120.5 L 76 120.5 C 81.6 120.5 87.3 116.6 89.5 113.2 L 88.2 113.2 L 75.4 77.2 L 74.5 77.2 L 74.5 77 L 75.4 77.2 L 78.6 77.7 L 79.3 77.7 L 89.3 76.2 L 90.4 76.3 C 93.7 76.3 93.8 80.2 94.7 80.2 L 97.7 80.2 L 97.7 129.2 L 86.1 129.2 L 86.1 131.5 L 81.4 131.5 L 81.4 134.1 L 77.5 134.1 L 77.5 138.2 L 123.3 138.2 L 123.3 133.9 L 119.3 133.9 L 119.3 131.6 L 114.5 131.6 L 114.5 129.2 L 102.6 129.2 L 102.6 80.2 L 106 80.2 C 107 80.2 106.6 76.4 110.7 76.4 L 111.3 76.4 L 121.2 77.7 L 122.2 77.7 L 125.4 77.3 C 124.3 79.7 123.1 83.8 122.1 86.4 C 120.9 89.6 119.9 92.6 118.7 95.8 C 117.5 98.9 116.6 101.9 115.4 105 C 114.9 106.4 114.2 108.1 113.7 109.6 C 113.4 110.4 113.1 111.1 112.9 111.9 C 112.5 113.2 112.8 113.2 111.2 113.2 C 113.3 116.4 119.2 120.5 124.6 120.5 L 127.2 120.5 C 132.6 120.5 138.8 116.4 140.9 113.2 L 139.8 113.2 L 126.4 77.1 C 127.4 76.9 129.3 76.2 129.3 75.3 C 129.3 74.5 127.8 75.5 126.7 75.5 L 126.3 75.5 C 120.8 75.5 116.6 71 110.9 71 L 109.6 71 C 106.7 71 104.2 72.4 102.6 73.8 C 101.8 73.4 101.3 73.6 101.3 72.3 C 101.3 71.9 102.4 68.8 102.5 68.5 L 100.6 62.3 L 100.2 62.3 z M 126.1 80.8 L 137.8 113.2 L 114.1 113.2 L 126.1 80.8 z M 74.8 80.8 L 86.5 113.2 L 63.1 113.1 L 74.8 80.8 z"},i["GR.IC.FF.DIRECTION FINDING"]={type:"path",d:"M100,140 l0,-80 M80,80 l20,-20 20,20",fill:!1},i["GR.IC.FF.DIVISION AND BELOW SUPPORT"]={Unknown:{type:"path",d:"M40,75 l15,25 -15,25",fill:!1},Friend:{type:"path",d:"M25,50 l30,50 -30,50",fill:!1},Neutral:{type:"path",d:"M45,50 l20,50 -20,50",fill:!1},Hostile:{type:"path",d:"M50,80 l15,20 -15,20",fill:!1}}[T],i["GR.IC.FF.EMERGENCY OPERATION"]=[{type:"path",d:"M 100 65 L 115.2 91.3 L 130.3 117.5 C 133.3 112.4 135 106.4 135 100 C 135 80.7 119.3 65 100 65 z M 100 65 C 80.7 65 65 80.7 65 100 C 65 106.4 66.7 112.4 69.7 117.5 L 84.8 91.3 L 100 65 z M 69.7 117.5 C 75.7 128 87 135 100 135 C 113 135 124.3 128 130.3 117.5 L 100 117.5 L 69.7 117.5 z"},{type:"path",fill:!!R&&G,stroke:!1,d:"M 69.7,117.5 100,65 l 30.3,52.5 z"}],i["GR.IC.FF.FIELD ARTILLERY ROCKET"]={type:"path",d:"M100,150 l0,-97 M85,130 l0,-50 M115,130 l0,-50 M85,73 l15,-20 15,20",fill:!1},i["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]={Unknown:{type:"path",d:"M35,80 l130,0 ",fill:!1},Friend:{type:"path",d:"M25,80 l150,0 ",fill:!1},Neutral:{type:"path",d:"M45,80 l110,0 ",fill:!1},Hostile:{type:"path",d:"M50,80 l100,0 ",fill:!1}}[T],i["GR.IC.FF.HORSE"]={type:"path",d:"m 129,72.8 c 0,0 -6.3,2 -9,2.6 -3.4,0.7 -4.9,1.8 -7.7,3.1 -4.2,1.9 -6.8,3.6 -11.3,4.3 -3.3,0.5 -7.7,1.7 -11,1 -3.9,-0.9 -6.1,-2.9 -10.1,-2.9 -3.7,-0 -7.4,-0.6 -10.6,1.3 -2.6,1.6 -4.7,4.2 -5.8,7.1 -2.3,5.4 -0.8,12.5 -1.2,18.4 -0.2,3.1 -0.4,9.3 -0.6,10.2 0,0 1.6,-0 3.4,-2.5 0.9,-1.2 1.7,-3.4 1.9,-4.9 0.5,-3.1 -0.7,-7.5 -0.4,-10 1.1,-0.3 2.4,2.8 2.6,4.7 0.2,2 -1,3.3 -1.4,5.2 -0.5,3 0.3,5 0.6,8.3 0.1,1.6 0.8,3.9 0.5,6 -0.2,2 -0.2,4.3 -0.2,4.3 l 6.9,0 -0.4,-3.8 c 0,0 -1.8,-2.5 -2.1,-4.3 -0.5,-2.7 -0.5,-5.4 0.2,-8 0.5,-2 3.1,-4.3 4.1,-6.1 1.8,-3.1 3.1,-7.1 3.1,-7.1 0,0 5.1,3.4 9.1,4.2 3.8,0.8 11.6,1.4 11.6,1.4 0,0 -0.2,7.3 0.1,12.4 -0,0.1 0.3,3.9 0.3,3.1 -1.4,3.2 -0,8.2 -0,8.2 0,0 2.9,0 6.3,-0 l -0.3,-3.4 c 0,0 -1.5,-3.5 -1.5,-5.3 0,-3.1 0.1,-5.9 0.9,-8.9 0.4,-1.2 0.7,-2.9 1.3,-4 1.4,-2.2 3.1,-3.8 4.2,-6.1 1.1,-2.6 2.3,-5.3 3.6,-7.9 1.6,-3.3 7.8,-7.3 7.8,-7.3 0,0 5,2.9 8.4,4.9 1.2,0.7 3,0.1 3.7,-1 0.7,-1.1 0.8,-2.2 0.3,-3.3 -3.2,-6.7 -7.8,-9.4 -7.8,-9.4 z",stroke:!1},i["GR.IC.FF.INFANTRY"]={Unknown:{type:"path",d:"M50,65L150,135M50,135L150,65"},Friend:{type:"path",d:"M25,50 L175,150 M25,150 L175,50"},Neutral:{type:"path",d:"M45,45L155,155M45,155L155,45"},Hostile:{type:"path",d:"M60,70L140,130M60,130L140,70"}}[T],i["GR.IC.FF.INFANTRY DISMOUNTED"]={Unknown:{type:"path",d:"M50,65L150,135M50,135L150,65"},Friend:{type:"path",d:"m 45,70 110,60 M 45,130 155,70"},Neutral:{type:"path",d:"M45,45L155,155M45,155L155,45"},Hostile:{type:"path",d:"M60,70L140,130M60,130L140,70"}}[T],i["GR.IC.FF.INTERCEPT"]={type:"path",d:"M100,120 l0,-60 M80,120 l20,20 20,-20"},i["GR.IC.FF.JAMMING"]={Unknown:{type:"path",d:"M63,60 c10,0 0,10 7,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 7,-10 M40,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10",fill:!1},Friend:{type:"path",d:"M25,60 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 M25,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10",fill:!1},Neutral:{type:"path",d:"M45,60 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 M45,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10",fill:!1},Hostile:{type:"path",d:"M67,60 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 13,10 M52,75 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 10,-10 c10,0 0,10 10,10 c10,0 0,-10 7,-10",fill:!1}}[T],i["GR.IC.FF.LAW ENFORCEMENT"]={type:"path",d:"m 99.6,51 c -2.8,0 -5,2.3 -5,5.3 0,2.1 1.2,3.9 2.8,4.7 L 87.8,78.3 69.5,78.4 c -0.1,-2.8 -2.3,-5.1 -5,-5.1 -2.8,0 -5,2.3 -5,5.3 0,2.9 2.2,5.3 5,5.3 0.7,0 1.4,-0.2 2,-0.4 l 9.2,16.8 -9.4,17.2 c -0.6,-0.2 -1.2,-0.4 -1.8,-0.4 -2.8,0 -5,2.4 -5,5.3 0,2.9 2.2,5.3 5,5.3 2.8,0 5,-2.3 5,-5.3 0,-0.1 -0,-0.2 -0,-0.3 l 18.3,0.1 9.5,17.1 c -1.6,0.9 -2.7,2.6 -2.7,4.6 0,2.9 2.3,5.3 5,5.3 2.8,0 5,-2.3 5,-5.3 0,-1.9 -0.9,-3.5 -2.3,-4.4 l 9.6,-17.3 18.7,-0.1 c -0,0.1 -0,0.2 -0,0.3 0,2.9 2.3,5.3 5,5.3 2.8,0 5,-2.3 5,-5.3 0,-2.9 -2.2,-5.3 -5,-5.3 -0.8,0 -1.5,0.2 -2.1,0.5 l -9.5,-17.4 9.5,-17.4 c 0.6,0.3 1.4,0.5 2.1,0.5 2.8,0 5,-2.4 5,-5.3 0,-2.9 -2.2,-5.3 -5,-5.3 -2.8,0 -5,2.3 -5,5.3 0,0.1 0,0.2 0,0.3 L 111.8,78.3 102.1,60.8 c 1.5,-0.9 2.5,-2.6 2.5,-4.5 0,-2.9 -2.2,-5.3 -5,-5.3 z"},i["GR.IC.FF.MAIN GUN SYSTEM"]={Unknown:{type:"path",d:"M55,65L55,135"},Friend:{type:"path",d:"M55,50L55,150"},Neutral:{type:"path",d:"M55,45L55,155"},Hostile:{type:"path",d:"M55,72L55,128"}}[T],i["GR.IC.FF.MEDICAL"]={type:"path",d:"M100,"+S.bbox.y1+"L100,"+S.bbox.y2+"M"+S.bbox.x1+",100L"+S.bbox.x2+",100"},i["GR.IC.FF.MEDICAL THEATER"]={Unknown:{type:"path",d:"M100,170 l0,-140 M40,75 l15,25 -15,25 M160,75 l-15,25 15,25 M55,100 l90,0",fill:!1},Friend:{type:"path",d:"M100,150 l0,-100 M25,50 l30,50 -30,50 M175,50 l-30,50 30,50 M55,100 l90,0",fill:!1},Neutral:{type:"path",d:"M100,155 l0,-110 M45,50 l20,50 -20,50 M155,50 l-20,50 20,50 M65,100 l70,0",fill:!1},Hostile:{type:"path",d:"M100,172 l0,-144 M50,80 l15,20 -15,20 M150,80 l-15,20 15,20 M65,100 l70,0",fill:!1}}[T],i["GR.IC.FF.MEDICAL CORPS"]={Unknown:{type:"path",d:"M100,170 l0,-140 M160,75 l-15,25 15,25 M30,100 l115,0",fill:!1},Friend:{type:"path",d:"M100,150 l0,-100 M175,50 l-30,50 30,50 M25,100 l120,0",fill:!1},Neutral:{type:"path",d:"M100,155 l0,-110 M155,50 l-20,50 20,50 M45,100 l90,0",fill:!1},Hostile:{type:"path",d:"M100,172 l0,-144 M150,80 l-15,20 15,20 M28,100 l110,0",fill:!1}}[T],i["GR.IC.FF.MEDICAL TREATMENT FACILITY"]=[i["GR.IC.FF.MEDICAL"],{type:"path",fill:!1,d:"M70,90 l0,20 M130,90 l0,20"}],i["GR.IC.FF.MILITARY POLICE"]={type:"path",d:"M 100,140 C 53.7465,122.654 71.0916,95.6737 65.3099,70.6197 c 11.5634,13.4906 23.1267,13.4906 34.6901,0 11.564,13.4906 23.126,13.4906 34.69,0 C 128.908,95.6737 146.254,122.654 100,140 Z",fill:!1},i["GR.IC.FF.MOTORIZED"]={type:"path",d:"M100,"+S.bbox.y1+"L100,"+S.bbox.y2},i["GR.IC.FF.NAVAL"]=[{type:"path",d:"M 100,145 100,65",fill:!1},{type:"path",d:"m 70,70 60,0",fill:!1},{type:"path",d:"m 57.8,105.5 c -2.2,0.1 1.3,20.6 2.8,22.1 0.8,0.8 3.5,-3.8 4.6,-2.6 17.4,20.2 33,19.7 34.7,19.6 0,0 0.2,-0 0.3,0 1.7,0.1 17.3,0.5 34.7,-19.6 1,-1.2 3.7,3.4 4.6,2.6 1.4,-1.5 4.9,-21.9 2.8,-22.1 -2.2,-0.1 -4,4.2 -6.7,6.4 -3,2.4 -7.5,3.4 -7.7,4.5 -0.1,0.8 4.9,3.5 3.9,4.9 -5.1,6.3 -15.1,16.6 -31.3,17 l -0.3,4.3 -0.3,-4.3 c -16.2,-0.4 -26.3,-10.7 -31.3,-17 -1.1,-1.3 4,-4.1 3.9,-4.9 -0.2,-1 -4.7,-2 -7.7,-4.5 -2.7,-2.3 -4.5,-6.6 -6.7,-6.4 z",stroke:!1},{type:"circle",cx:100,cy:60,r:5,fill:!1}],i["GR.IC.FF.PRISON"]={type:"path",stroke:!1,d:"M 62.5 67.9 L 62.5 73.4 L 69.9 73.4 L 69.9 106 C 66.8 106.7 64.4 109.6 64.4 113.4 C 64.4 116 65.8 116.9 65.9 118.4 C 66 120.4 65.6 122.5 65.6 124.7 L 65.6 126.6 L 62.5 126.6 L 62.5 132.1 L 137.5 132.1 L 137.5 126.6 L 136 126.6 L 135.6 117.5 C 138.3 113.4 135.8 107 131.5 106 L 131.5 73.4 L 137.5 73.4 L 137.5 67.9 L 62.5 67.9 z M 74.5 73.4 L 87.2 73.4 L 87.2 108.4 C 87.2 109.2 84.8 109.7 83.9 110.6 C 83.1 111.3 82.2 112.7 81.6 113.6 C 80.5 115.2 78.6 118.7 78.6 121.1 L 76.1 117 C 76.5 116.4 76.9 114.6 76.9 113.7 L 76.9 112.2 C 76.9 109.5 74.5 107.9 74.5 106.5 L 74.5 73.4 z M 91.5 73.4 L 110.2 73.4 L 110.2 90.9 C 109 89.6 108.8 87.8 106.8 85.7 C 105.4 84.3 103.5 83 100.8 83 L 100.3 83 C 98.2 83 96.1 83.6 94.9 84.5 C 94.3 85 93.6 85.4 93.1 86 C 92.4 86.6 92.2 87.3 91.5 87.8 L 91.5 73.4 z M 114.3 73.4 L 127.2 73.4 L 127.2 106.5 C 127.2 106.9 124.8 109.2 124.4 111.1 C 123.7 114.2 124.5 114.6 125 117 L 123.3 120.2 C 122.7 118.3 120.7 115 119.7 113.5 C 118.3 111.4 117.3 109.1 114.3 108.9 L 114.3 73.4 z M 99.7 84.9 L 100.6 84.9 C 104.8 84.9 108.5 90.4 108.5 94.7 L 108.5 96.4 C 108.5 100.4 105 106.2 101.3 106.2 L 99.4 106.2 C 94.9 106.2 91.4 100.2 91.6 95.5 C 91.8 90.7 94.9 84.9 99.7 84.9 z M 110.3 100.5 L 110.2 106.9 L 106.7 106.3 L 110.3 100.5 z M 91.5 103.6 L 94.3 106.8 L 91.5 107.4 L 91.5 103.6 z M 70.7 107.9 C 72.9 107.9 74.7 110.4 74.7 112.7 L 74.7 113.4 C 74.7 117.9 70 120.2 67.6 116.7 C 65.7 113.8 66.9 107.9 70.7 107.9 z M 130.6 107.9 C 132.8 107.9 134.4 110.8 134.4 113.2 L 134.4 113.4 C 134.4 116.7 133 116.7 132 118.2 L 128.9 118.3 L 126.7 115.4 L 126.5 113.2 C 126.1 111 128.2 107.9 130.6 107.9 z M 105.9 108.2 C 107.2 108.2 108.9 109 110.2 109.3 L 110.2 126.6 L 91.5 126.6 L 91.5 110.1 C 91.5 108.6 96.6 108.9 98.4 108.9 C 101.1 108.9 104 108.2 105.9 108.2 z M 114.3 110.8 C 117.2 112.3 117.4 113.4 119 116.4 C 120.1 118.5 121.7 120.9 121.7 124 C 121.9 124.2 122.3 124.9 122.7 124.9 C 124 124.9 125.5 119.8 126.7 118.9 L 126.7 119.4 L 127.2 119.4 L 127.2 126.6 L 114.3 126.6 L 114.3 110.8 z M 87.2 111.3 L 87.2 126.6 L 74.5 126.6 L 74.5 118.9 C 75.8 119.4 77.4 125.4 78.6 125.4 C 80.6 125.4 80.7 119.6 81.9 117.5 C 83.2 115.3 84.4 111.9 87.2 111.3 z M 133.6 119.7 L 133.9 126.6 L 131.5 126.6 L 131.5 120.4 L 133.6 119.7 z M 68.1 119.9 C 68.6 120.1 69.9 120.3 69.9 121.1 L 69.9 126.6 L 67.7 126.6 L 68.1 119.9 z"},i["GR.IC.FF.JAIL BREAK"]=[i["GR.IC.FF.PRISON"],{type:"path",strokewidth:5,d:"m 70,130 L130,70",fill:!1}],i["GR.IC.FF.RECONNAISSANCE"]={Unknown:{type:"path",d:"M50,135L150,65"},Friend:{type:"path",d:"M25,150L175,50"},Neutral:{type:"path",d:"M45,155L155,45"},Hostile:{type:"path",d:"M60,130L140,70"}}[T],i["GR.IC.FF.RECONNAISSANCE DISMOUNTED"]={Unknown:{type:"path",d:"M50,135L150,65"},Friend:{type:"path",d:"M 45,130 155,70"},Neutral:{type:"path",d:"M45,155L155,45"},Hostile:{type:"path",d:"M60,130L140,70"}}[T],i["GR.IC.FF.RECONNAISSANCE EQUPIMENT"]={Unknown:{type:"path",d:"M50,135L150,65"},Friend:{type:"path",d:"M 50.6 132.9 L 149.3 67"},Neutral:{type:"path",d:"M45,155L155,45"},Hostile:{type:"path",d:"M60,130L140,70"}}[T],i["GR.IC.FF.SEARCH"]={type:"path",d:"m 100,145 0,-90 m 30,65 -30,25 -30,-25",fill:!1},i["GR.IC.FF.SENSOR"]=[{type:"path",d:"M"+S.bbox.x1+",100 L75,100 M"+(200-S.bbox.x1)+",100 L125,100"},{type:"path",d:"M65,85 l70,0 -15,30 -40,0 z",fill:!!R&&G}],i["GR.IC.FF.SIGNAL"]={Unknown:{type:"path",fill:!1,d:"M50,65 100,110 100,90 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 100,110 100,90 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 100,110 100,90 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 100,110 100,90 143,130"}}[T],i["GR.IC.FF.SIGNAL DISMOUNTED"]={Unknown:{type:"path",fill:!1,d:"M50,65 100,110 100,90 150,135"},Friend:{type:"path",fill:!1,d:"M 52,66.8 100,110 l 0,-20 47.9,43.1"},Neutral:{type:"path",fill:!1,d:"M45,45 100,110 100,90 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 100,110 100,90 143,130"}}[T],i["GR.IC.FF.SOUND"]=[{type:"path",d:"M"+S.bbox.x1+",100 L75,100 M"+(200-S.bbox.x1)+",100 L125,100"},{type:"path",d:"M65,85 l70,0 -15,30 -40,0 z",fill:!!R&&G},{type:"text",stroke:!1,x:100,y:110,fontsize:25,text:"S"}],i["GR.IC.FF.SUPPLY"]={Unknown:{type:"path",d:"M35,120 l130,0 ",fill:!1},Friend:{type:"path",d:"M25,120 l150,0",fill:!1},Neutral:{type:"path",d:"M45,120 l110,0",fill:!1},Hostile:{type:"path",d:"M50,120 l100,0 ",fill:!1}}[T],i["GR.IC.FF.SUPPLY CORPS"]={Unknown:{type:"path",d:"M160,75 l-15,25 15,25 M35,120 l120,0",fill:!1},Friend:{type:"path",d:"M175,50 l-30,50 30,50 M25,120 l135,0",fill:!1},Neutral:{type:"path",d:"M155,50 l-20,50 20,50 M45,120 l100,0",fill:!1},Hostile:{type:"path",d:"M150,80 l-15,20 15,20 M50,120 l100,0",fill:!1}}[T],i["GR.IC.FF.SUPPLY DIVISION AND BELOW"]={Unknown:{type:"path",d:"m 45,120 120,0 M 40,75 55,100 40,125",fill:!1},Friend:{type:"path",d:"m 45,120 130,0 M 25,50 55,100 25,150",fill:!1},Neutral:{type:"path",d:"m 57,120 98,0 M 45,50 65,100 45,150",fill:!1},Hostile:{type:"path",d:"m 50,120 100,0 M 50,80 65,100 50,120",fill:!1}}[T],i["GR.IC.FF.SUPPLY THEATER"]={Unknown:{type:"path",d:"M40,75 l15,25 -15,25 M160,75 l-15,25 15,25 M45,120 l110,0 ",fill:!1},Friend:{type:"path",d:"M25,50 l30,50 -30,50 M175,50 l-30,50 30,50 M40,120 l120,0 ",fill:!1},Neutral:{type:"path",d:" M45,50 l20,50 -20,50 M155,50 l-20,50 20,50 M55,120 l90,0 ",fill:!1},Hostile:{type:"path",d:"M50,80 l15,20 -15,20 M150,80 l-15,20 15,20 M50,120 l100,0",fill:!1}}[T],i["GR.IC.FF.CLASS ALL"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"ALL"},i["GR.IC.FF.CLASS MULTIPLE"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MULT"},i["GR.IC.FF.CLASS I"]={type:"path",d:"m 105,85 c -5,10 -5,20 0,30 m 0,-30 c -20,0 -20,30 0,30",fill:!1},i["GR.IC.FF.NATO SUPPLY CLASS I"]=a("I"),i["GR.IC.FF.CLASS II"]=i["GR.IC.QUARTERMASTER"],i["GR.IC.FF.NATO SUPPLY CLASS II"]=a("II"),i["GR.IC.FF.CLASS III"]={type:"path",d:"m 100,120 0,-20 -15,-20 30,0 -15,20 ",fill:!1},i["GR.IC.FF.CLASS IV"]=i["GR.IC.ENGINEER"],i["GR.IC.FF.NATO SUPPLY CLASS IV"]=a("IV"),i["GR.IC.FF.CLASS V"]={type:"path",d:"m 90,115 0,-25 c 0,-10 20,-10 20,0 l 0,25 m -25,0 30,0",fill:!1},i["GR.IC.INTERPRETER/TRANSLATOR"]=[{type:"path",d:"m 65,90 15,0 0,-10 20,20 -20,20 0,-10 -15,0 z",fill:G},{type:"path",d:"m 135,90 -15,0 0,-10 -20,20 20,20 0,-10 15,0 z"}],i["GR.IC.FF.NATO SUPPLY CLASS ALL"]=a("ALL"),i["GR.IC.FF.CLASS VI"]=[{type:"circle",cx:100,cy:85,r:5,fill:!1},{type:"path",d:"m 85,95 30,0 m -15,15 0,-20 m -10,30 10,-10 10,10",fill:!1}],i["GR.IC.FF.CLASS VII"]=[{type:"circle",cx:75,cy:100,r:7},{type:"circle",cx:125,cy:100,r:7},{type:"path",d:"M75,100 c0,-20 50,-20 50,0",fill:!1}],i["GR.IC.FF.CLASS VIII"]={Unknown:{type:"path",fill:!1,d:"M100,120 l0,-90 M165,80 l-130,0"},Friend:{type:"path",fill:!1,d:"M100,120 l0,-70 M175,80 l-150,0"},Neutral:{type:"path",fill:!1,d:"M100,120 l0,-75 M155,80 l-110,0"},Hostile:{type:"path",fill:!1,d:"M100,120 l0,-92 M153,80 l-106,0"}}[T],i["GR.IC.FF.CLASS VIII.THEATER"]={Unknown:{type:"path",fill:!1,d:"M100,120 l0,-90 M155,80 l-110,0"},Friend:{type:"path",fill:!1,d:"M100,120 l0,-70 M155,80 l-110,0"},Neutral:{type:"path",fill:!1,d:"M100,120 l0,-75 M145,80 l-90,0"},Hostile:{type:"path",fill:!1,d:"M100,120 l0,-92 M153,80 l-106,0"}}[T],i["GR.IC.FF.CLASS VIII.CORPS"]={Unknown:{type:"path",fill:!1,d:"M100,120 l0,-90 M155,80 l-120,0"},Friend:{type:"path",fill:!1,d:"M100,120 l0,-70 M155,80 l-130,0"},Neutral:{type:"path",fill:!1,d:"M100,120 l0,-75 M145,80 l-100,0"},Hostile:{type:"path",fill:!1,d:"M100,120 l0,-92 M153,80 l-106,0"}}[T],i["GR.IC.FF.CLASS IX"]=[{type:"circle",cx:100,cy:100,r:10,fill:!1},{type:"path",d:"m 100,110 0,10 m 0,-30 0,-10 m 8.7,14.2 8.4,-4.8 m -8.4,15.9 8,5.4 m -25.4,-5.4 -8.2,5.4 m 8.2,-16.3 -8,-5.4",fill:!1}],i["GR.IC.EQUIPMENT MANUFACTURE"]=[{type:"circle",cx:100,cy:100,r:20,fill:!1},{type:"path",d:"m 100,120 0,20 m 0,-60 0,-20 m 18.1,28.4 16,-9.6 m -16,31.2 16,12 M 82.5,110 66.1,122 M 82.5,88.8 66.5,78",fill:!1}],i["GR.IC.FF.CLASS X"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"CA"},i["GR.IC.FF.THEATRE SUPPORT"]={Unknown:{type:"path",d:"M40,75 l15,25 -15,25 M160,75 l-15,25 15,25",fill:!1},Friend:{type:"path",d:"M25,50 l30,50 -30,50 M175,50 l-30,50 30,50",fill:!1},Neutral:{type:"path",d:"M45,50 l20,50 -20,50 M155,50 l-20,50 20,50",fill:!1},Hostile:{type:"path",d:"M50,80 l15,20 -15,20 M150,80 l-15,20 15,20",fill:!1}}[T],i["GR.IC.FF.US MARSHALS SERVICE"]={type:"path",d:"m 100,70 7.1,20.3 21.5,0.4 -17.1,13 6.2,20.6 L 100,112 82.4,124.3 88.6,103.7 71.5,90.7 92.9,90.3 z m 0,-5 c -19.3,0 -35,15.7 -35,35 0,19.3 15.7,35 35,35 19.3,0 35,-15.7 35,-35 0,-19.3 -15.7,-35 -35,-35 z m 0,5 c 16.6,0 30,13.4 30,30 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 z"},i["GR.M1.ACCIDENT"]=l("ACC"),i["GR.M1.AIRMOBILE/AIR ASSAULT"]={type:"path",fill:!1,d:"M85,55 L100,75 115,55"},i["GR.M1.ARMORED"]={type:"path",fill:!1,d:"m 90,60 20,0 c 10,0 10,15 0,15 L 90,75 C 80,75 80,60 90,60"},i["GR.M1.CARGO"]={type:"path",fill:!1,d:"m 100,60 0,15 -15,0 0,-15 30,0 0,15 -15,0"},i["GR.M1.AMMUNITION"]={type:"path",d:"M95,75 L95,60 C95,55 105,55 105,60 L105,75 M90,75 L110,75",fill:!1},i["GR.M1.AMPHIBIOUS WARFARE SHIP "]={type:"path",d:"M 113,75 100,75 90,64.3 95,65 l 0,-8 10,0 0,8 5.5,-0.6 L 100,75"},i["GR.M1.ANTISUBMARINE WARFARE"]=l("P"),i["GR.M1.AREA"]=l("AREA"),i["GR.M1.ARMY"]=l("XXXX"),i["GR.M1.ATTACK"]=l("A"),i["GR.M1.AVIATION"]={type:"path",d:"m 75,60 0,15 50,-15 0,15 z"},i["GR.M1.BATTALION"]=l("II"),i["GR.M1.BIOLOGICAL"]=l("B"),i["GR.M1.BORDER"]=l("BOR"),i["GR.M1.BRIDGING"]={type:"path",fill:!1,d:"m 80,80 5,-5 30,0 5,5 m -40,-20 5,5 30,0 5,-5"},i["GR.M1.BRIGADE"]=l("X"),i["GR.M1.CHEMICAL"]=l("C"),i["GR.M1.INTRUSION"]=l("I"),i["GR.M1.CHEMICAL SURVEILLANCE"]=l("RS"),i["GR.M1.CIVILIAN"]=l("CIV"),i["GR.M1.CLOSE PROTECTION"]=l("CLP"),i["GR.M1.COMBAT"]=l("CBT"),i["GR.M1.COMMAND AND CONTROL"]=l("C2"),i["GR.M1.COMMAND AND CONTROL ROTARY WING"]=l(R?"Y":"C2"),i["GR.M1.TILT-ROTOR"]=l("TR"),i["GR.M1.COMMAND POST NODE"]=l("CPN"),i["GR.M1.COMMUNICATIONS CONTINGENCY PACKAGE"]=l("CCP"),i["GR.M1.CONSTRUCTION"]={type:"text",stroke:!1,x:100,y:75,fontsize:20,text:"CONST"},i["GR.M1.COMPANY"]=l("I"),i["GR.M1.CORPS"]=l("XXX"),i["GR.M1.CROSS CULTURAL COMMUNICATION"]=l("CCC"),i["GR.M1.CROWD AND RIOT CONTROL"]=l("CRC"),i["GR.M1.DECONTAMINATION"]=l("D"),i["GR.M1.DETENTION"]=l("DET"),i["GR.M1.DEPUTY"]=l("DEP"),i["GR.M1.DIRECT COMMUNICATIONS"]={type:"path",fill:!1,d:"m 95,65 -5,5 5,5 m 10,-10 5,5 -5,5 M 90,70 c 20,0 20,0 20,0 m 15,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -40,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z"},i["GR.M1.DIVING"]={type:"path",fill:!1,d:"m 104.6,64.8 c 0,2.7 -2.1,4.8 -4.6,4.8 -2.5,0 -4.6,-2.2 -4.6,-4.8 0,-2.7 2.1,-4.8 4.6,-4.8 2.5,0 4.6,2.2 4.6,4.8 z m 0,8.7 4.6,4.8 -18.3,0 4.6,-4.8 M 108.3,60 l 4.6,0 0,9.6 -4.6,0 m -16.5,0 -4.6,0 0,-9.6 4.6,0 m 17.4,4.8 c 0,5.3 -4.1,9.6 -9.2,9.6 -5.1,0 -9.2,-4.3 -9.2,-9.6 0,-5.3 4.1,-9.6 9.2,-9.6 5.1,0 9.2,4.3 9.2,9.6 z"},i["GR.M1.DIVISION"]=l("XX"),i["GR.M1.MARINE DIVISION"]=l("D"),i["GR.M1.DOG"]=l("DOG"),i["GR.M1.DRILLING"]={type:"path",d:"m 90,60 5,15 10,0 5,-15 z"},i["GR.M1.ELECTRO-OPTICAL"]=l("EO"),i["GR.M1.ENHANCED"]=l("ENH"),i["GR.M1.EXPLOSIVE ORDNANCE DISPOSAL"]=l("EOD"),i["GR.M1.EARLY WARNING RADAR"]=l("EWR"),i["GR.M1.FIRE DIRECTION CENTRE"]=l("FDC"),i["GR.M1.FORCE"]=l("F"),i["GR.M1.FORWARD"]=l("FWD"),i["GR.M1.GROUND STATION MODULE"]=l("GSM"),i["GR.M1.HIJACKING"]=l("H"),i["GR.M1.INDIVIDUAL"]={type:"path",fill:!1,d:"M85,65 l30,0"},i["GR.M1.INTRUSION"]=l("I"),i["GR.M1.J1"]=l("J1"),i["GR.M1.J2"]=l("J2"),i["GR.M1.J3"]=l("J3"),i["GR.M1.J4"]=l("J4"),i["GR.M1.J5"]=l("J5"),i["GR.M1.J6"]=l("J6"),i["GR.M1.J7"]=l("J7"),i["GR.M1.J8"]=l("J8"),i["GR.M1.J9"]=l("J9"),i["GR.M1.JOINT NETWORK NODE"]=l("JNN"),i["GR.M1.LANDING SUPPORT"]=l("LS"),i["GR.M1.LARGE COMMUNICATIONS CONTINGENCY PACKAGE"]=l("LCCP"),i["GR.M1.LARGE EXTENSION NODE"]=l("LEN"),i["GR.M1.LOAD HANDLING SYSTEM"]=l("LHS"),i["GR.M1.MAINTENANCE"]={type:"path",fill:!1,d:"m 84,70 32,0 m 4,-5 c -5,0 -5,10 0,10 M 80,65 c 5,0 5,10 0,10"},i["GR.M1.MEDEVAC"]={type:"path",stroke:!1,d:"M95.5,80 l9,0 0,-9 9,0 0,-9 -9,0 0,-9 -9,0 0,9 -9,0 0,9 9,0 Z"},i["GR.M1.METEOROLOGICAL"]=l("MET"),i["GR.M1.MINE COUNTERMEASURE"]=l("MCM"),i["GR.M1.MISSILE"]={type:"path",d:"M95,80 L95,60 C95,55 105,55 105,60 L105,80 M100,80 L100,55",fill:!1},i["GR.M1.(MOBILE) ADVISOR AND SUPPORT"]={type:"path",d:"m 105,65 5,5 -5,5 M 90,70 c 20,0 20,0 20,0 m 15,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -40,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z",fill:!1},i["GR.M1.MOBILE SUBSCRIBER EQUIPMENT"]=l("MSE"),i["GR.M1.MOBILITY ASSAULT"]=l("MA"),i["GR.M1.MOBILITY SUPPORT"]=l("MS"),i["GR.M1.MOVEMENT CONTROL CENTRE"]=l("MCC"),i["GR.M1.MULTINATIONAL"]=l("MN"),i["GR.M1.MULTINATIONAL SPECIALIZED UNIT"]=l("MSU"),i["GR.M1.MULTIPLE ROCKET LAUNCHER"]={type:"path",d:"M85,75 l15,-15 15,15 M85,67 l15,-15 15,15",fill:!1},i["GR.M1.NATO MEDICAL ROLE 1"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"1"},i["GR.M1.NATO MEDICAL ROLE 2"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"2"},i["GR.M1.NATO MEDICAL ROLE 3"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"3"},i["GR.M1.NATO MEDICAL ROLE 4"]={type:"text",stroke:!1,x:120,y:77,fontsize:25,text:"4"},i["GR.M1.NAVAL"]=s._translate(0,-35,s._scale(.6,i["GR.IC.NAVAL"])),i["GR.M1.NODE CENTRE"]=l("NC"),i["GR.M1.NUCLEAR"]=l("N"),i["GR.M1.OF-1"]=l("OF-1"),i["GR.M1.OF-2"]=l("OF-2"),i["GR.M1.OF-3"]=l("OF-3"),i["GR.M1.OF-4"]=l("OF-4"),i["GR.M1.OF-5"]=l("OF-5"),i["GR.M1.OF-6"]=l("OF-6"),i["GR.M1.OF-7"]=l("OF-7"),i["GR.M1.OF-8"]=l("OF-8"),i["GR.M1.OF-9"]=l("OF-9"),i["GR.M1.OF-10"]=l("OF-10"),i["GR.M1.OF-D"]=l("OF-D"),i["GR.M1.OPERATIONS"]=l("OPS"),i["GR.M1.OPTICAL"]=l("OPT"),i["GR.M1.OR-1"]=l("OR-1"),i["GR.M1.OR-2"]=l("OR-2"),i["GR.M1.OR-3"]=l("OR-3"),i["GR.M1.OR-4"]=l("OR-4"),i["GR.M1.OR-5"]=l("OR-5"),i["GR.M1.OR-6"]=l("OR-6"),i["GR.M1.OR-7"]=l("OR-7"),i["GR.M1.OR-8"]=l("OR-8"),i["GR.M1.OR-9"]=l("OR-9"),i["GR.M1.OTHER"]=l("OTH"),i["GR.M1.PALLETIZED LOAD SYSTEM"]=l("PLS"),i["GR.M1.PERSONNEL RECOVERY"]=l("H"),i["GR.M1.PLATOON"]=[{type:"circle",stroke:!1,cx:80,cy:68,r:8},{type:"circle",stroke:!1,cx:100,cy:68,r:8},{type:"circle",stroke:!1,cx:120,cy:68,r:8}],i["GR.M1.RADAR"]={type:"path",fill:!1,d:"m 85,55 c 0.1,21.4 11.7,24.6 25,25 M 116,55 101,67.5 101,55 86.6,66.9"},i["GR.M1.RADIO FREQUENCY IDENTIFICATION (RFID) INTERROGATOR/ SENSOR"]=l("RF"),i["GR.M1.RAILROAD"]=s._translate(0,-50,[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:125,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}]),i["GR.M1.RADIOLOGICAL"]=l("RAD"),i["GR.M1.RANGER"]=l("RGR"),i["GR.M1.RECON"]=l("R"),i["GR.M1.REGIMENT"]=l("III"),i["GR.M1.RETRANSMISSION SITE"]=l("RTNS"),i["GR.M1.ROBOTIC"]={type:"path",d:"m 100,52.7 14.9,14.8 c 0.4,-0.3 0.9,-0.4 1.4,-0.4 1.5,0 2.7,1.2 2.7,2.7 0,1.4 -1.2,2.7 -2.7,2.7 -1.5,0 -2.7,-1.3 -2.7,-2.7 0,-0.4 0.1,-0.7 0.2,-1 l -10.4,-5.2 -2.5,8.6 c 0.2,0.1 0.4,0.2 0.6,0.3 0.7,0.5 1.2,1.3 1.2,2.3 0,1.5 -1.2,2.7 -2.7,2.7 -0.55,0 -1.06,-0.2 -1.49,-0.5 -0.73,-0.4 -1.22,-1.3 -1.22,-2.2 0,-1.2 0.77,-2.2 1.85,-2.6 l -2.53,-8.6 -10.42,5.2 c 0.12,0.3 0.18,0.6 0.18,1 0,1.5 -1.21,2.7 -2.7,2.7 -1.49,0 -2.7,-1.2 -2.7,-2.7 0,-1.5 1.21,-2.7 2.7,-2.7 0.52,0 1.01,0.1 1.42,0.4 l 14.9,-14.8 0,0 0,0 z",stroke:!1},i["GR.M1.ASSAULT"]=l("ASLT"),i["GR.M1.WEAPON"]=l("WPN"),i["GR.M1.WEAPONS"]=l("W"),i["GR.M1.CRIMINAL INVESTIGATION DIVISION"]=l("CID"),i["GR.M1.DIGITAL"]=l("DIG"),i["GR.M1.NETWORK OR NETWORK OPERATIONS"]=l("NET"),i["GR.M1.AIRFIELD, AERIAL PORT OF DEBARKATION, OR AERIAL PORT OF EMBARKATION"]={type:"path",d:"m 80,70 40,0 M 80,80 111,55",fill:!1},i["GR.M1.PIPELINE"]={type:"path",d:"m 92,66 -12,0 m 12,8 -12,0 m 28,0 12,0 m -12,-8 12,0 m -20,-11 0,7 m -5,-7 10,0 m -13,7 0,16 16,0 0,-16 -16,0",fill:!1},i["GR.M1.POSTAL"]={type:"path",d:"m 90,60 15,0 c 0,5 0,10 10,15 -15,0 -20,0 -25,-15",fill:!1},i["GR.M1.WATER"]={type:"path",d:"m 90,55 20,0 m -10,10 0,-10 m -25,10 40,0 c 10,0 15,5 15,10",fill:!1},i["GR.M1.INDEPENDENT COMMAND"]={type:"path",d:"m 111.8,59.2 0,15.8 m -7.9,-7.9 15.8,0 m -31.6,-7.9 0,15.8 m 7.9,-7.9 -15.8,0",fill:!1},i["GR.M1.MULTI-PURPOSE BLADE"]={type:"path",d:"m 80,65 20,-10 20,10 m -20,15 0,-25",fill:!1},i["GR.M1.TANK-WIDTH MINE PLOW"]={type:"path",d:"m 80,65 5,-2.5 m 5,-2.5 5,-2.5 m 10,0 5,2.5 m 5,2.5 5,2.5 m -20,15 0,-20",fill:!1},i["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"]=l("RRC"),i["GR.M1.SEARCH AND RESCUE"]=l("SAR"),i["GR.M1.SECTION"]=[{type:"circle",stroke:!1,cx:90,cy:68,r:8},{type:"circle",stroke:!1,cx:110,cy:68,r:8}],i["GR.M1.SECURITY"]=l("SEC"),i["GR.M1.SENSOR"]={type:"path",d:"m 100,55 c -2,5 -5,8 -10,10 5,2 8,5 10,10 2,-5 5,-8 10,-10 -5,-2 -8,-5 -10,-10 z"},i["GR.M1.SENSOR CONTROL MODULE"]=l("SCM"),i["GR.M1.SIGNALS INTELLIGENCE"]={type:"path",fill:!1,d:"m 100,55 0,23 m -15,-18 5,-5 5,5 5,-5 5,5 5,-5 5,5"},i["GR.M1.SIGNAL SUPPORT"]=l("SPT"),i["GR.M1.SINGLE SHELTER SWITCH"]=l("SSS"),i["GR.M1.SINGLE ROCKET LAUNCHER"]={type:"path",d:"M85,75 l15,-15 15,15",fill:!1},i["GR.M1.SMALL EXTENSION NODE"]=l("SEN"),i["GR.M1.SMOKE"]=l("S"),i["GR.M1.SMOKE/DECON"]=l("SD"),i["GR.M1.SNIPER"]={type:"path",d:"M75,60 l20,0 M100,76 l0,-18 M125,60 l-20,0",fill:!1},i["GR.M1.SOUND RANGING"]=l("SDR"),i["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]=l("SOF"),i["GR.M1.SPECIAL WEAPONS AND TACTICS"]={type:"text",stroke:!1,x:100,y:77,fontsize:23,text:"SWAT"},i["GR.M1.SQUAD"]={type:"circle",stroke:!1,cx:100,cy:68,r:8},i["GR.M1.SUPPORT"]=l("SPT"),i["GR.M1.SURVEY"]={type:"path",d:"m 108,78 -8,-8 m 0,0 -8,8 m 8,-8 0,-15 15,8 z"},i["GR.M1.TACTICAL EXPLOITATION"]=l("TE"),i["GR.M1.TARGET ACQUISITION"]=l("TA"),i["GR.M1.TEAM"]=[{type:"circle",fill:!1,cx:100,cy:65,r:10},{type:"path",d:"m 90,75 l20,-20"}],i["GR.M1.THEATRE"]=l("XXXXX"),i["GR.M1.TOPOGRAPHIC"]={type:"path",fill:!1,d:"m 92,65 c 6,3 10,3 16,0 m -18,13 10,-23 10,23"},i["GR.M1.TRAINING CAMP"]=l("TNG"),i["GR.M1.HIJACKER"]=l("HJ"),i["GR.M1.UNMANNED AERIAL VEHICLE"]={type:"path",stroke:!1,d:"m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"},i["GR.M1.UPGRADED EARLY WARNING RADAR"]=l("UEW"),i["GR.M1.UTILITY"]=l("U"),i["GR.M1.VIDEO IMAGERY"]={type:"path",fill:!1,d:"m 120,65 -11,0 m 11,10 -14,0 m 4,-14 -30,0 0,18 25,0 z m 10,2 0,14"},i["GR.M1.WO-1"]=l("WO-1"),i["GR.M1.WO-2"]=l("WO-2"),i["GR.M1.WO-3"]=l("WO-3"),i["GR.M1.WO-4"]=l("WO-4"),i["GR.M1.WO-5"]=l("WO-5"),i["GR.M1.YARD"]=l("YRD"),i["GR.M2.AIRBORNE"]={type:"path",d:"M75,140 C75,125 100,125 100,140 C100,125 125,125 125,140",fill:!1},i["GR.M2.ARCTIC"]={type:"path",d:"M115,125 C125,125 125,135 115,135 L85,135 C75,135 75,125 85,125",fill:!1},i["GR.M2.ATTACK"]=r("A"),i["GR.M2.LANDING CRAFT"]=r("LC"),i["GR.M2.LANDING SHIP"]=r("LS"),i["GR.M2.SERVICE CRAFT/YARD"]=r("YY"),i["GR.M2.TUG HARBOR"]=r("YT"),i["GR.M2.OCEAN GOING TUG BOAT"]=r("AT"),i["GR.M2.SURFACE DEPLOYMENT AND DISTRIBUTION COMMAND"]=r("SDDC"),i["GR.M2.COMPOSITE"]=r("COMP"),i["GR.M2.LIGHT AND MEDIUM"]=r("L/M"),i["GR.M2.BATTLE DAMAGE REPAIR"]=r("BDR"),i["GR.M2.BICYCLE EQUIPPED"]={type:"circle",cx:100,cy:132,r:11,fill:!1},i["GR.M2.CASUALTY STAGING"]=r("CS"),i["GR.M2.CLEARING"]=r("CLR"),i["GR.M2.CLOSE RANGE"]=r("CR"),i["GR.M2.COMBAT SEARCH AND RESCUE"]=r("CSAR"),i["GR.M2.CONTROL"]={type:"path",d:"m 98,130 2,-4 2,4 m -8,8 -4,-2 4,-2 m 8,8 -2,4 -2,-4 m 8,-8 4,2 -4,2 m -14,-2 16,0 m -8,-8 0,16",fill:!1},i["GR.M2.NONCOMBATANT GENERIC VESSEL"]={type:"path",d:"m 95,135 0,-10 10,0 0,10 5,0 0,10 -20,0 0,-10 z",stroke:!1},i["GR.M2.SHELTER"]={type:"path",d:"m 85,140 30,0 -5,-15 -10,-5 -10,5 z",stroke:!1},i["GR.M2.SELF-PROPELLED"]={type:"path",d:"m 85,125 30,0 c 10,0 10,15 0,15 l -30,0 c -10,0 -10,-15 0,-15",fill:!1},i["GR.M2.CROSS-COUNTRY TRUCK"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:100,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.CAVALRY"]={type:"text",stroke:!1,x:110,y:140,fontsize:25,text:"CAV"},i["GR.M2.DECONTAMINATION"]=r("D"),i["GR.M2.DEMOLITION"]=r("DEM"),i["GR.M2.DENTAL"]={type:"text",stroke:!1,x:115,y:133,fontsize:25,text:"D"},i["GR.M2.DIGITAL"]=r("DIG"),i["GR.M2.ENHANCED POSITION LOCATION REPORTING SYSTEM"]={type:"path",d:"m 87,142 13,-12 13,12 m -13,-20 0,20 0,0",fill:!1},i["GR.M2.EQUIPMENT"]=r("E"),i["GR.M2.EQUIMENT/TROOP"]=r("E/T"),i["GR.M2.HEAVY"]=r("H"),i["GR.M2.HIGH ALTITUDE"]=r("HA"),i["GR.M2.HIGH TO MEDIUM ALTITUDE"]=r("HMA"),i["GR.M2.HIGH TO LOW ALTITUDE"]=r("HLA"),i["GR.M1.CYBERSPACE"]=l("CYB"),i["GR.M2.AIR ASSAULT"]={type:"path",fill:!1,d:"m 85,125 15,20 15,-20"},i["GR.M2.VERY HEAVY"]=r("VH"),i["GR.M2.CYBERSPACE"]=r("CYB"),i["GR.M2.NAVY BARGE, SELF-PROPELLED"]=r("YS"),i["GR.M2.NAVY BARGE, NOT SELF-PROPELLED"]=r("YB"),i["GR.M2.LAUNCH"]=r("YFT"),i["GR.M1.TACTICAL SATELLITE COMMUNICATIONS"]=[{type:"path",d:"m 105,65 10,0 m -30,0 10,0 M 85,77 c 10,-7 20,-7 30,0",fill:!1},{type:"path",d:"m 75.4,60.9 0,9.1 13.1,0 0,-9.1 z m 36,0 0,9.1 13.1,0 0,-9.1 z m -18,0 0,9.1 13.1,0 0,-9.1 z",stroke:!1}],i["GR.M2.INTERMODAL"]={type:"path",d:"m 80,125 40,0 0,-4 8,9 -8,9 0,-4 -40,0 0,4 -8,-9 8,-9 z",fill:!1},i["GR.M2.INTENSIVE CARE"]=r("IC"),i["GR.M2.J1"]=r("J1"),i["GR.M2.J2"]=r("J2"),i["GR.M2.J3"]=r("J3"),i["GR.M2.J4"]=r("J4"),i["GR.M2.J5"]=r("J5"),i["GR.M2.J6"]=r("J6"),i["GR.M2.J7"]=r("J7"),i["GR.M2.J8"]=r("J8"),i["GR.M2.J9"]=r("J9"),i["GR.M2.LIGHT"]=r("L"),i["GR.M2.LABORATORY"]=r("LAB"),i["GR.M2.LAUNCHER"]={type:"path",fill:!1,d:"M80,140 L115,120 120,140"},i["GR.M2.LONG RANGE"]=r("LR"),i["GR.M2.LONG RANGE SURVEILLANCE"]={type:"text",stroke:!1,x:110,y:140,fontsize:25,text:"LRS"},i["GR.M2.LOW ALTITUDE"]=r("LA"),i["GR.M2.MEDIUM"]=r("M"),i["GR.M2.MEDIUM ALTITUDE"]=r("MA"),i["GR.M2.MEDIUM TO LOW ALTITUDE"]=r("MLA"),i["GR.M2.MEDIUM RANGE"]=r("MR"),i["GR.M2.MOUNTAIN"]={type:"path",stroke:!1,d:"M90,140 L100,120 110,140"},i["GR.M2.MULTIPLE ALTITUDES"]=r("H/MA"),i["GR.M2.MULTI-CHANNEL"]=r("MC"),i["GR.M2.OF-1"]=r("OF-1"),i["GR.M2.OF-2"]=r("OF-2"),i["GR.M2.OF-3"]=r("OF-3"),i["GR.M2.OF-4"]=r("OF-4"),i["GR.M2.OF-5"]=r("OF-5"),i["GR.M2.OF-6"]=r("OF-6"),i["GR.M2.OF-7"]=r("OF-7"),i["GR.M2.OF-8"]=r("OF-8"),i["GR.M2.OF-9"]=r("OF-9"),i["GR.M2.OF-10"]=r("OF-10"),i["GR.M2.OF-D"]=r("OF-D"),i["GR.M2.OPTICAL"]=r("OPT"),i["GR.M2.OR-1"]=r("OR-1"),i["GR.M2.OR-2"]=r("OR-2"),i["GR.M2.OR-3"]=r("OR-3"),i["GR.M2.OR-4"]=r("OR-4"),i["GR.M2.OR-5"]=r("OR-5"),i["GR.M2.OR-6"]=r("OR-6"),i["GR.M2.OR-7"]=r("OR-7"),i["GR.M2.OR-8"]=r("OR-8"),i["GR.M2.OR-9"]=r("OR-9"),i["GR.M2.GUERILLA"]=r("G"),i["GR.M2.AMPHIBIOUS"]={Unknown:{type:"path",d:"M 64 144.9 C 80.4 143.9 63.1 125 81.4 125 C 100.2 125 81.4 145 100.2 145 C 119 145 100.2 125 119 125 C 137.1 125 120.2 143.6 135.9 144.9",fill:!1},Friend:{type:"path",d:"m 25,145 c 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 18.8,20 18.8,0 0,-20 18.8,-20 18.8,0 0,20 20,20",fill:!1},Neutral:{type:"path",d:"M 45 125 C 61.7 125.9 44.2 145 62.6 145 C 81.4 145 62.6 125 81.4 125 C 100.2 125 81.4 145 100.2 145 C 119 145 100.2 125 119 125 C 137.8 125 119 145 137.8 145 C 155.9 145 138.9 126.2 154.8 125 ",fill:!1},Hostile:{type:"path",d:"M 70.4 142.4 C 74.8 137 66.8 125 81.4 125 C 100.2 125 81.4 145 100.2 145 C 119 145 100.2 125 119 125 C 133.3 125 125.7 136.6 129.7 142.1 ",fill:!1}}[T],i["GR.M2.PACK ANIMAL"]={type:"path",d:"m 84,140 9,-15 7,15 7,-15 9,15",fill:!1},i["GR.M2.PATIENT EVACUATION COORDINATION"]=r("PEC"),i["GR.M2.PREVENTIVE MAINTENANCE"]=r("PM"),i["GR.M2.PSYCHOLOGICAL"]={type:"text",stroke:!1,x:115,y:133,fontsize:25,text:"P"},i["GR.M2.RADIO RELAY LINE OF SIGHT"]=[{type:"circle",cx:100,cy:132,r:11,fill:!1},{type:"path",d:"M 90.8 128.2 C 90.3 129.3 90 130.6 90 132 C 90 133.4 90.3 134.7 90.8 135.8 L 100 132 L 90.8 128.2 z M 100 132 L 109.3 135.8 C 109.7 134.7 110 133.4 110 132 C 110 130.6 109.7 129.3 109.3 128.2 L 100 132 z"}],i["GR.M2.RAILROAD"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:125,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.TRACTOR TRAILER"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:75,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.RECOVERY (UNMANNED SYSTEMS)"]={type:"path",d:"m 70,125 c0,20 60,20 60,0",fill:!1},i["GR.M2.RECOVERY (MAINTENANCE)"]={type:"path",fill:!1,d:"M75,125 c8,0 8,16 0,16 m8,-8 l35,0 m8,-8 c-8,0 -8,16 0,16"},i["GR.M2.REFUEL"]=r("K"),i["GR.M2.RESCUE COORDINATION CENTRE"]=r("RCC"),i["GR.M2.RIVERINE"]={type:"path",d:"m 80,125 c 0,10 40,10 40,0 z",fill:!1},i["GR.M2.ROBOTIC"]={type:"path",d:"M100,121.68L114.895,136.459C115.309,136.201 115.798,136.052 116.321,136.052C117.812,136.052 119.022,137.262 119.022,138.753C119.022,140.243 117.812,141.454 116.321,141.454C114.831,141.454 113.62,140.243 113.62,138.753C113.62,138.407 113.686,138.076 113.805,137.772L103.378,132.6L100.851,141.224C101.072,141.298 101.28,141.4 101.471,141.526C102.211,142.008 102.701,142.843 102.701,143.791C102.701,145.281 101.491,146.492 100,146.492C99.451,146.492 98.939,146.327 98.512,146.045C97.776,145.562 97.29,144.73 97.29,143.785C97.29,142.592 98.064,141.579 99.138,141.222L96.613,132.606L86.186,137.778C86.305,138.082 86.37,138.413 86.37,138.759C86.37,140.25 85.16,141.46 83.669,141.46C82.179,141.46 80.969,140.25 80.969,138.759C80.969,137.268 82.179,136.058 83.669,136.058C84.193,136.058 84.681,136.207 85.095,136.465L99.991,121.671L100,121.662L100,121.68Z",stroke:!1},i["GR.M2.SECURITY FORCE ASSISTANCE"]=r("SFA"),i["GR.M2.SINGLE CHANNEL"]=r("SC"),i["GR.M2.SKI"]={type:"path",d:"m 95,145 -9,-8 m 28,0 -9,8 m -15,-24 20,20 m 0,-20 -20,20",fill:!1},i["GR.M2.SHORT RANGE"]=r("SR"),i["GR.M2.STRATEGIC"]=r("STR"),i["GR.M2.STRATEGIC MISSILE"]=r("S"),i["GR.M2.SUPPORT"]=r("SPT"),i["GR.M2.TACTICAL"]=r("TAC"),i["GR.M2.TACTICAL MISSILE"]=r("T"),i["GR.M2.TARGET ACQUISITION"]=r("TA"),i["GR.M2.TOWED"]=[{type:"path",d:"M70,120 l60,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:120,r:5},{type:"circle",fill:!1,cx:135,cy:120,r:5}],i["GR.M2.TROOP"]=r("T"),i["GR.M2.TRACKED"]={type:"path",d:"M 70,120 l 60,0 c10,0 10,10 0,10 l -60,0 c-10,0 -10,-10 0,-10",fill:!1},i["GR.M2.TRUCK"]=[{type:"path",d:"M60,120 l80,0",fill:!1},{type:"circle",fill:!1,cx:65,cy:125,r:5},{type:"circle",fill:!1,cx:135,cy:125,r:5}],i["GR.M2.UTILITY"]=r("U"),i["GR.M2.VERTICAL OR SHORT TAKE-OFF AND LANDING "]={type:"text",stroke:!1,x:100,y:135,fontsize:20,text:"VSTOL"},i["GR.M2.VETERINARY"]={type:"text",stroke:!1,x:115,y:133,fontsize:25,text:"V"},i["GR.M2.WHEELED"]=[{type:"circle",cx:70,cy:125,r:5,fill:!1},{type:"circle",cx:100,cy:125,r:5,fill:!1},{type:"circle",cx:130,cy:125,r:5,fill:!1}],i["GR.M2.WHEELED LIMITED"]=[{type:"circle",cx:70,cy:125,r:5,fill:!1},{type:"circle",cx:130,cy:125,r:5,fill:!1}],i["GR.M2.WO-1"]=r("WO-1"),i["GR.M2.WO-2"]=r("WO-2"),i["GR.M2.WO-3"]=r("WO-3"),i["GR.M2.WO-4"]=r("WO-4"),i["GR.M2.WO-5"]=r("WO-5"),i["GR.EQ.SHORT RANGE"]={type:"path",d:"m 85,100 30,0",fill:!1},i["GR.EQ.INTERMEDIATE RANGE"]={type:"path",d:"m 85,105 30,0 m -30,-10 30,0",fill:!1},i["GR.EQ.LONG RANGE"]={type:"path",d:"m 85,110 30,0 m -30,-20 30,0 m -30,10 30,0",fill:!1},i["GR.EQ.WEAPON"]={type:"path",d:"m 100,60 0,80",fill:!1},i["GR.EQ.RIFLE"]={type:"path",d:"m 100,60 0,80 M 85,75 100,60 115,75",fill:!1},i["GR.EQ.RIFLE DISMOUNTED1"]={type:"path",d:"m 90,90 10,-10 10,10 m -10,-10 0,40",fill:!1},i["GR.EQ.MACHINE GUN"]={type:"path",d:"m 100,60 0,80 M 85,75 100,60 115,75 M 80,140 120,140",fill:!1},i["GR.EQ.GRENADE LAUNCHER"]=[i["GR.EQ.RIFLE"],{type:"circle",cx:100,cy:90,r:15,fill:!1}],i["GR.EQ.FLAME THROWER"]={type:"path",fill:!1,d:"m 90,135 0,-70 c 0,-15 20,-15 20,0"},i["GR.EQ.AIR DEFENCE GUN"]=[{type:"path",d:"m 85,140 30,0 c 0,-20 -30,-20 -30,0 z m 15,-80 0,65 m 15,-45 0,40 m -30,-40 0,40",fill:!1}],R||N||i["GR.EQ.AIR DEFENCE GUN"].push({type:"path",d:"M 85,75 100,60 115,75",fill:!1}),i["GR.EQ.ANTITANK GUN"]={type:"path",d:"m 85,140 15,-15 15,15 m -15,-80 0,65 m -15,-45 0,40 m 30,-40 0,40",fill:!1},i["GR.EQ.DIRECT FIRE GUN"]={type:"path",d:"m 100,60 0,80 m 15,-60 0,40 m -30,-40 0,40",fill:!1},i["GR.EQ.RECOILLESS GUN"]={type:"path",d:"m 85,75 15,-15 15,15 m 0,5 0,40 m -30,-40 0,40 m 15,-60 0,80",fill:!1},i["GR.EQ.HOWITZER"]=[{type:"circle",cx:100,cy:130,r:10,fill:!1},{type:"path",d:"m 115,80 0,40 m -30,-40 0,40 m 15,-60 0,60",fill:!1}],R||i["GR.EQ.HOWITZER"].push({type:"path",d:"M 85,75 100,60 115,75",fill:!1}),i["GR.EQ.HOWITZER TRACKED"]={type:"path",d:"M 70,120 l 60,0 c10,0 10,10 0,10 l -60,0 c-10,0 -10,-10 0,-10",fill:!1},i["GR.EQ.MISSILE LAUNCHER"]={type:"path",d:"m 100,140 0,-80 m -15,80 0,-65 c 0,-20 30,-20 30,0 l 0,65",fill:!1},i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]={type:"path",d:"m 85,140 30,0 c 0,-20 -30,-20 -30,0 z m 15,-15 0,-65 m -15,80 0,-65 c 0,-20 30,-20 30,0 l 0,65",fill:!1},i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"R"},i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]=[{type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"E"},{type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"R"}],i["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"]={type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"T"},i["GR.EQ.ANTITANK MISSILE LAUNCHER"]={type:"path",d:"m 85,140 15,-15 15,15 M 85,120 85,75 c 0,-20 30,-20 30,0 l 0,45 m -15,5 0,-65",fill:!1},i["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]=[i["GR.EQ.MISSILE LAUNCHER"]],R&&i["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"].push({type:"path",d:"m 85,140 30,0",fill:!1}),i["GR.EQ.MORTAR"]=[{type:"path",d:"m 100,60 0,60 M 85,75 100,60 115,75",fill:!1},{type:"circle",cx:100,cy:130,r:10,fill:!1}],i["GR.EQ.SINGLE ROCKET LAUNCHER"]={type:"path",d:"m 85,75 15,-15 15,15 m -15,-5 0,70 M 85,85 100,70 115,85",fill:!1},i["GR.EQ.MULTIPLE ROCKET LAUNCHER"]={type:"path",d:"m 115,90 0,40 m -30,-40 0,40 m 0,-55 15,-15 15,15 m -15,-5 0,70 M 85,85 100,70 115,85",fill:!1},i["GR.EQ.ANTITANK ROCKET LAUNCHER"]={type:"path",d:"m 85,140 15,-15 15,15 M 85,85 100,70 115,85 m -15,-15 0,55 M 85,75 100,60 115,75",fill:!1},i["GR.EQ.NON-LETHAL WEAPON"]={type:"path",d:"m 100,60 0,80 M 80,60 l40,0",fill:!1},i["GR.EQ.NON-LETHAL GRENADE LAUNCHER"]=[i["GR.EQ.NON-LETHAL WEAPON"],{type:"circle",cx:100,cy:90,r:15,fill:!1}],i["GR.EQ.TASER"]=[i["GR.EQ.NON-LETHAL WEAPON"],a("Z")],i["GR.EQ.WATER CANNON"]=[i["GR.EQ.NON-LETHAL WEAPON"],a("W")],i["GR.EQ.LIMITED CROSS-COUNTRY"]=[{type:"path",d:"m 70,130 60,0",fill:!1},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.CROSS-COUNTRY"]=[{type:"path",d:"m 70,130 60,0",fill:!1},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:100,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.ARMOURED FIGHTING VEHICLE"]={type:"path",d:"m 70,100 30,-30 30,30 -30,30 z m 60,-30 0,60 m -60,-60 0,60 0,0",fill:!1},i["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]=[i["GR.EQ.ARMOURED FIGHTING VEHICLE"]],N?i["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"].push({type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"C2"}):i["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"].push({type:"path",d:"m 80,90 20,15 0,-10 20,15",fill:!1}),i["GR.EQ.ARMOURED PERSONNEL CARRIER"]={type:"path",fill:!1,d:"m 70,80 30,-10 30,10 m -60,-10 0,60 60,0 0,-60"},i["GR.EQ.ARMOURED PERSONNEL CARRIER COMBAT SERVICE SUPPORT VEHICLE"]=[i["GR.EQ.ARMOURED PERSONNEL CARRIER"],{type:"path",d:"m 70,120 60,0",fill:!1}],i["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]={type:"path",fill:!1,d:"M 130,80 70,130"},i["GR.EQ.COMBAT SERVICE SUPPORT VEHICLE"]={type:"path",fill:!1,d:"M 70,120 130,120"},i["GR.EQ.ARMOURED MEDICAL PERSONNEL CARRIER"]={type:"path",fill:!1,d:"m 70,100 60,0 m -30,-30 0,60"},i["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"]=[{type:"path",d:"m 60,120 80,0 M 120,80 c 25,0.2 25,40 0,40 l -40,0 C 55,120 55,80 80,80 Z",fill:!1},i["GR.M2.WHEELED LIMITED"]],i["GR.EQ.ARMOURED VEHICLE"]=a("A"),i["GR.EQ.ARMORED CARRIER WITH VOLCANO"]=a("V"),i["GR.EQ.TANK"]={type:"path",fill:!1,d:"m 70,80 60,0 m -60,40 60,0 m -60,-50 0,60 0,0 m 60,-60 0,60"},i["GR.EQ.ASSAULT BREACHER VEHICLE (ABV) WITH COMBAT DOZER BLADE"]={type:"path",fill:!1,d:"m 100,95 30,25 m -30,-60 0,35 -30,25 m 10,-60 40,0 m -50,20 60,0 m -60,40 60,0 m -60,-50 0,60 0,0 m 60,-60 0,60"},i["GR.EQ.LIGHT TANK"]={type:"path",fill:!1,d:"m 100,80 0,40"},i["GR.EQ.MEDIUM TANK"]={type:"path",fill:!1,d:"m 105,80 0,40 m -10,-40 0,40"},i["GR.EQ.HEAVY TANK"]={type:"path",fill:!1,d:"m 110,80 0,40 m -20,-40 0,40 m 10,-40 0,40"},i["GR.EQ.TANK RECOVERY VEHICLE"]={type:"path",fill:!1,d:"m 85,100 30,0 m 10,-10 c -13.1,0 -12.4,20 0,20 M 75,90 c 12.7,0.3 12.7,20.3 0,20"},i["GR.EQ.BRIDGE"]={type:"path",d:"m 115,75 -10,10 0,30 10,10 m -30,-50 10,10 0,30 -10,10 m -15,-55 60,0 0,60 -60,0 0,-60",fill:!1},i["GR.EQ.FIXED BRIDGE"]={type:"path",d:"M 100,70 100,130",fill:!1},i["GR.EQ.FOLDING GIRDER BRIDGE"]={type:"path",d:"M 110, 80 90,80 90,120 110,120",fill:!1},i["GR.EQ.HOLLOW DECK BRIDGE"]={type:"path",d:"M 110, 80 90,80 90,120 110,120 z",fill:!1},i["GR.EQ.DRILL"]=i["GR.IC.DRILLING"],i["GR.EQ.DOZER"]={type:"path",d:"m 90,60 20,0 m -10,0 0,20 m -30,0 60,0 m -60,-10 0,60 0,0 m 60,-60 0,60 m -60,-10 60,0",fill:!1},i["GR.EQ.DOZER ARMORED"]={type:"path",d:"m 70,130 60,0 m -30,-70 0,10 m -30,10 30,-10 30,10 m 0,-10 0,60 m -60,-60 0,60 0,0 m 20,-70 20,0",fill:!1},i["GR.EQ.EARTHMOVER"]={type:"path",d:"m 100,60 0,20 m -25,-15 5,-5 40,0 5,5 m -55,15 60,0 m -60,40 60,0 m 0,-50 0,60 m -60,-60 0,60 0,0",fill:!1},i["GR.EQ.MULTIFUNCTIONAL EARTHMOVER/DIGGER"]=[i["GR.EQ.EARTHMOVER"],a("MF")],i["GR.EQ.MINE CLEARING EQUIPMENT"]={type:"path",d:"m 100,80 0,15 -30,25 60,0 -30,-25",fill:!1},i["GR.EQ.MINE LAYING VEHICLE"]=[{type:"path",d:"m 90,85 20,30 m 0,-30 -20,30 m 10,-30 0,30",fill:!1},{type:"circle",cx:100,cy:100,r:10}],i["GR.EQ.MINE SCATTERABLE"]=[a("S"),{type:"circle",cx:85,cy:115,r:5,fill:!1},{type:"circle",cx:100,cy:115,r:5,fill:!1},{type:"circle",cx:115,cy:115,r:5,fill:!1}],i["GR.EQ.UTILITY VEHICLE"]={type:"path",fill:!1,d:"m 70,65 c 0,15 60,15 60,0 l 0,65 -60,0 z"},i["GR.EQ.UTILITY VEHICLE BACKHOE"]=[{type:"path",fill:!1,d:"M 130,130 100,80 75,95 75,95"},{type:"path",d:"M 75,105 85,95 75,95 z"}],i["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]={type:"path",fill:!1,d:"m 75,100 c 15,15 35,15 50,0 z"},i["GR.EQ.UTILITY VEHICLE LIGHT"]={type:"path",fill:!1,d:"M 100,78.3 100,130"},i["GR.EQ.UTILITY VEHICLE MEDIUM"]={type:"path",fill:!1,d:"m 105,130 0,-52 M 95,130 l0,-52"},i["GR.EQ.UTILITY VEHICLE HEAVY"]={type:"path",fill:!1,d:"m 110,130 0,-53 m -20,50 0,-53 m 10,1.3 0,52"},i["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]={type:"path",fill:!1,d:"m 130,130 -40,-40 0,25 c 0,5 -10,5 -10,0"},i["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]={type:"path",fill:!1,d:"m 105,115 10,-10"},i["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]={type:"path",fill:!1,d:"m 120,110 -10,10 m -10,-10 10,-10 m -5,15 10,-10"},i["GR.EQ.MEDICAL VEHICLE"]={type:"path",fill:!1,d:"m 70,100 l 60,0 M 100,78.3 100,130"},i["GR.EQ.MEDICAL EVACUATION"]={type:"path",d:"m 95,85 10,0 0,10 10,0 0,10 -10,0 0,10 -10,0 0,-10 -10,0 0,-10 10,0 z"},i["GR.EQ.MOBILE EMERGENCY PHYSICIAN"]={type:"path",fill:!1,d:"m 70,100 l 60,0 M 100,78.3 100,130 M 85,85 115,85"},i["GR.EQ.BUS"]=[i["GR.EQ.UTILITY VEHICLE"],a("B")],i["GR.EQ.SEMI-TRAILER TRUCK"]=[i["GR.EQ.UTILITY VEHICLE"],{type:"path",fill:!1,d:"m 140,90 0,20 m -10,-10 10,0"},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:85,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.WATER VEHICLE"]=[i["GR.EQ.UTILITY VEHICLE"],{type:"path",fill:!1,d:"m 70,95 c 10,0 0,10 10,10 10,0 0,-10 10,-10 10,0 0,10 10,10 10,0 0,-10 10,-10 10,0 0,10 10,10 10,0 0,-10 10,-10"},{type:"circle",cx:75,cy:135,r:5,fill:!1},{type:"circle",cx:125,cy:135,r:5,fill:!1}],i["GR.EQ.TRAIN LOCOMOTIVE"]={type:"path",fill:!1,d:"m 70,70 0,60 60,0 0,-30 -30,0 0,-30 z"},i["GR.EQ.RAILCAR"]=[i["GR.EQ.UTILITY VEHICLE"],{type:"circle",fill:!1,cx:75,cy:135,r:5},{type:"circle",fill:!1,cx:85,cy:135,r:5},{type:"circle",fill:!1,cx:115,cy:135,r:5},{type:"circle",fill:!1,cx:125,cy:135,r:5}],i["GR.EQ.CBRN EQUIPMENT"]=[{type:"path",d:"M80,140 c0,-20 10,-60 50,-63 m-10,63 c0,-20 -10,-60 -50,-63 ",fill:!1},{type:"circle",cx:70,cy:85,r:8},{type:"circle",cx:130,cy:85,r:8}],i["GR.EQ.COMPUTER SYSTEM"]={type:"path",d:"m 100,132 0,-10 -35,0 0,-50 70,0 0,50 -35,0 m -25,10 50,0",fill:!1},i["GR.EQ.COMMAND LAUNCH EQUIPMENT (CLE)"]=a("CLE"),i["GR.EQ.GENERATOR SET"]=a("G"),i["GR.EQ.GROUND-BASED MIDCOURSE DEFENSE (GMD) FIRE CONTROL (GFC) CENTER"]=a("GFC"),i["GR.EQ.IN-FLIGHT INTERCEPTOR COMMUNICATIONS SYSTEM (IFICS) DATA TERMINAL (IDT)"]={type:"path",fill:!1,d:"m 80,82.4 45,-2 -4,37 m -6,-1 0,-35 -34,9 m 12,21 0,8 M 80,82.4 c 0,25 16,35 41,35"},i["GR.EQ.LASER"]={type:"path",fill:!1,d:"m 100,55 0,25 10,5 -20,5 20,5 -20,5 10,5 0,15 10,5 -20,5 20,5 -20,5 20,5 M 90,65 100,55 110,65"},i["GR.EQ.TENT"]={type:"path",fill:!1,d:"m 65,124.4 10,-37 25,-10 25,10 10,37 z"},i["GR.EQ.TENT CIVILIAN"]={type:"path",fill:!1,d:"m 75,120 10,-30 15,-10 15,10 10,30 z"},i["GR.EQ.TENT MILITARY"]={type:"path",d:"m 75,120 10,-30 15,-10 15,10 10,30 z"},i["GR.EQ.UNIT DEPLOYMENT SHIPMENTS"]=a("DPLY"),i["GR.EQ.CIVILIAN VEHICLE.LIGHT"]={type:"path",fill:!1,d:"m 100,125 0,-20"},i["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]={type:"path",fill:!1,d:"m 103,105 0,20 m -6,-20 0,20"},i["GR.EQ.CIVILIAN VEHICLE.HEAVY"]={type:"path",fill:!1,d:"m 106,105 0,20 m -12,-20 0,20 m 6,-20 0,20"},i["GR.EQ.CIVILIAN VEHICLE.TRAILER"]={type:"path",fill:!1,d:"m 140,105 0,20 m -10,-10 10,0"},i["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]=[{type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 5,0 0,-20 -20,0 0,-20 -20,0 0,20 -20,0 0,20 5,0 m 50,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z"},{type:"path",fill:!1,strokewidth:2,d:"m 95,90 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]=[{type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 0,0 5,0 0,-20 -20,0 -20,0 0,-20 -20,0 0,20 0,20 5,0"},{type:"path",fill:!1,strokewidth:2,d:"m 75,90 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]=[{type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 0,0 5,0 0,-20 0,-20 -20,0 -20,0 -20,0 0,20 0,20 5,0"},{type:"path",fill:!1,strokewidth:2,d:"m 115,90 0,15 10,0 0,-15 z m -20,0 0,15 10,0 0,-15 z m -20,0 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]=[{type:"path",fill:!!R&&G,d:"m 90,125 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m -35,0 20,0 m 15,0 5,0 0,-20 0,-20 -20,0 -20,0 0,20 -20,0 0,20 5,0"},{type:"path",fill:!1,strokewidth:2,d:"m 95,90 0,15 10,0 0,-15 z"}],i["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]={type:"path",fill:!!R&&G,d:"m 90,125 20,0 m -20,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 35,0 c 0,-4.1 -3.4,-7.5 -7.5,-7.5 -4.1,0 -7.5,3.4 -7.5,7.5 0,4.1 3.4,7.5 7.5,7.5 4.1,0 7.5,-3.4 7.5,-7.5 z m 0,0 5,0 0,-20 -60,0 0,20 5,0 m 15,-20 5,-15"},i["GR.EQ.PACK ANIMAL"]={type:"path",fill:!1,d:"m 70,125 15,-50 15,50 15,-50 15,50 "},i["GR.EQ.MISSILE SUPPORT"]=[{type:"text",stroke:!1,x:100,y:100,fontsize:20,text:"MSL"},{type:"text",stroke:!1,x:100,y:115,fontsize:20,text:"SPT"}],i["GR.EQ.MISSILE TRANSLOADER"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MSL"},{type:"path",fill:!1,d:"m 75,70 50,0 m -25,10 c 0,-5 0,-10 0,-10"}],i["GR.EQ.MISSILE TRANSPORTER"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MSL"},{type:"path",fill:!1,d:"m 55,85 90,0"}],i["GR.EQ.MISSILE CRANE/LOADING DEVICE"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"MSL"},{type:"path",fill:!1,d:"m 75,80 25,-20 c 0,0 0,15 0,15 l 5,0 0,-5"}],i["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]=[{type:"text",stroke:!1,x:90,y:110,fontsize:20,text:"MSL"},{type:"path",fill:!1,d:"m 120,115 0,-15 -10,-10 20,0 -10,10"}],i["GR.EQ.MISSILE WARHEAD TRANSPORTER"]=[{type:"text",stroke:!1,x:100,y:100,fontsize:20,text:"MSL"},{type:"text",stroke:!1,x:100,y:115,fontsize:20,text:"WHD"}],i["GR.EQ.LAND MINE"]=N?{type:"circle",cx:100,cy:100,r:22,fill:!1}:[{type:"path",fill:!1,d:"m 70,65 60,0 -30,65 z"},{type:"text",stroke:!1,x:100,y:90,fontfamily:"Arial",fontsize:30,text:"M"}],i["GR.EQ.ANTIPERSONNEL LAND MINE"]=[{type:"circle",cx:100,cy:100,r:22},{type:"path",d:"M117,82 l20,-18 -18,25z M83,82 l-20,-18 18,25z",stroke:!1}],i["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]=[{type:"circle",cx:100,cy:100,r:22,fill:!1},{type:"path",d:"M117,82 l20,-18 -18,25z M83,82 l-20,-18 18,25z",stroke:!1}],i["GR.EQ.ANTITANK MINE"]={type:"circle",cx:100,cy:100,r:22},i["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]=a("IED"),i["GR.EQ.LAND MINES"]=[{type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"M"},{type:"path",fill:!1,d:R?"m 135,70 -70,0 35,70 z":"m 65,130 70,0 -35,-70 z"}],i["GR.EQ.SENSOR"]={type:"path",d:"m 100,60 c 0,15 25,40 40,40 -15,0 -40,25 -40,40 0,-15 -25,-40 -40,-40 15,0 40,-25 40,-40 z"},i["GR.EQ.SENSOR EMPLACED"]=[s._scale(.75,i["GR.EQ.SENSOR"]),{type:"path",fill:!1,d:"m 70,75 10,-15 10,15 10,-15 10,15 10,-15 10,15"}],i["GR.EQ.RADAR"]={type:"path",d:"M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",fill:!1},i["GR.EQ.ANTENNAE"]=[],i["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]={type:"path",fill:!!R&&G,stroke:o,d:"m 110,95 10,0 m -10,10 10,0 m -10,10 10,0 m -10,-30 10,0 m -10,-5 -10,10 -30,0 0,20 30,0 10,10 z"},i["GR.IN.IC.ELDER CARE"]={type:"path",d:"m 120.1,119.1 c 0,-6.3 2.3,-8.2 3.9,-12.6 1,-2.6 1.6,-3.3 1.8,-6.5 0.2,-2.4 0.9,-4.7 0.9,-7.2 v -2.6 c 0,-2.6 -2.2,-8.9 -3.3,-10.5 -1.3,-2 -4.8,-5.4 -6.7,-6.9 -2.2,-1.8 -5.4,-4.6 -8.2,-5.6 -1.6,-0.5 -9.8,-2.4 -11.4,-2.3 l -5.7,0.6 v 0.8 c 0,0.8 2,2.7 2.4,3.3 0,3.3 0.8,6.8 -1.3,8.4 -2.2,1.6 -2.8,3.4 -3.8,6.3 -0.4,1 -0.9,3.1 -1,4 -0.2,1 -0.2,4 -0.4,4.6 -1.1,2.4 -2.6,4.2 -3.8,6.4 l -5.1,0.5 c -2.1,3.2 -4.6,4.1 -4.6,9.6 v 26.4 c 0.6,0.2 0.4,0.2 0.9,0.2 0.5,0 0.3,-0.1 0.9,-0.2 v -27.5 c 0,-0.7 0.8,-3 1.1,-3.5 0.4,0.2 0.8,0.6 1.3,0.6 0.3,0 1.1,-0.3 1.3,-0.4 l 2.6,0.9 0.8,-0.6 0.6,2.5 c 0.4,0.3 0.4,0.5 0.8,0.5 h 0.4 c 0.5,0 0.6,-0.2 0.6,-0.6 v -0.4 c 0,-1 -1.2,-3 -1.5,-3.7 1.2,-2.5 6.3,-2.6 8.2,-5.8 0.9,-1.6 1.8,-3 2.6,-4.5 0.4,-0.9 2.3,-4.1 2.4,-4.4 h 4.4 c 2.3,0 2.1,2.5 2.6,4.2 0.6,2 2,2 2,4.6 0,2.8 -2.9,7 -4,9 -0.3,0.7 -3.9,8.8 -3.9,8.9 v 2 c 0,3 2.6,9.1 2.6,11.2 v 2.2 c -1.2,0.3 -6.8,2.4 -6.8,3.5 0,0.3 0.4,0.6 0.9,0.6 h 6.8 c 2.3,0 4.5,-1 6.6,-1.1 v -3 c 0,-0.6 -1.1,-2.2 -1.1,-3.7 -0.9,-1.3 -1.8,-6 -1.8,-8.2 0,-3.2 1.2,-5.4 2.5,-7.4 2.5,-4 0.4,-2.3 4.6,-5.1 l 1.8,1.7 c -1,1.8 -2.3,3.7 -2.3,6.4 v 5.9 h 0.4 v 0.6 c 0,0.9 5,9 5.7,10.3 -1.5,2.3 -6.7,1.6 -6.8,5 h 7.5 c 1.2,0 3.3,-1 4.5,-1.4 1.6,-0.5 2.9,-1.1 2.9,-3 0,-0.7 -2.9,-4.6 -3.6,-5.7 -0.3,-0.4 -2.4,-6 -2.4,-6.6 v -0.4 z m -45.3,-47.9 v 0.6 c 0,4.3 3.7,7.9 8.1,7.9 h 0.2 c 3.7,0 7.7,-3.6 7.7,-7 v -2.2 c 0,-3.2 -3.9,-6.8 -7.5,-6.8 h -1.2 c -3.4,0 -7.3,4 -7.3,7.5 z",stroke:!1},i["GR.IN.IC.RAW MATERIAL PRODUCTION/STORAGE"]=[{type:"text",stroke:!1,x:100,y:90,fontsize:30,text:"PS"},{type:"text",stroke:!1,x:100,y:120,fontsize:30,text:"RM"}],i["GR.IN.IC.MINE"]={type:"path",d:"m 105,85 10,10 5,-5 c -5,-5 -10,-5 -15,-5 z M 95,85 85,95 80,90 c 5,-5 10,-5 15,-5 z m -5,5 30,30 m -40,0 30,-30"},i["GR.IN.IC.PROCESSING FACILITY"]=[{type:"text",stroke:!1,x:100,y:90,fontsize:30,text:"PROC"},{type:"text",stroke:!1,x:100,y:120,fontsize:30,text:"FAC"}],i["GR.IN.IC.UTILITY FACILITY"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"UTIL"},i["GR.IN.IC.RESEARCH"]={type:"text",stroke:!1,x:100,y:110,fontsize:30,text:"R&D"},i["GR.IN.IC.TELECOMMUNICATIONS"]={type:"path",d:"m 95,80 10,20 -10,0 10,20",fill:!1},i["GR.IN.IC.ELECTRIC POWER"]={type:"path",d:"m 100,60.5 c -16.4,0 -29.6,13.2 -29.6,29.6 0,12.8 8.3,23.9 19.7,27.8 l 0,19.7 c 3.2,1.2 6.3,1.8 9.9,1.8 3.6,0 6.7,-0.6 9.9,-1.8 l 0,-19.8 c 11.5,-3.9 19.8,-15 19.7,-27.8 0,-16.4 -13.2,-29.6 -29.6,-29.6 z",fill:!1},i["GR.IN.IC.ELECTRIC POWER NUCLEAR"]={type:"text",stroke:!1,x:100,y:105,fontsize:40,text:"N"},i["GR.IN.IC.ELECTRIC POWER DAM"]={type:"text",stroke:!1,x:100,y:105,fontsize:40,text:"H"},i["GR.IN.IC.ELECTRIC POWER FOSSIL"]={type:"text",stroke:!1,x:100,y:105,fontsize:40,text:"F"},i["GR.IN.IC.ATOMIC ENERGY"]={type:"path",d:R?"M 90.4,119 C 84.2,115 80,109 80,101 l 20,0 -9.6,18 z m 19.6,0 -10,-18 20,0 c 0,8 -4,14 -10,18 z M 100,101 89.7,83.8 c 3,-2 6.5,-3 10.3,-3 4,0 7,1 10,3 L 100,101 Z":"M 89.9,82.5 110,82.7 89.7,117.1 80,99.9 120.1,100 110,117.3 z",fill:!1},i["GR.IN.IC.ATOMIC ENERGY WEAPONS GRADE"]={type:"path",d:R?"M 90.4,119 C 84.2,115 80,109 80,101 l 20,0 -9.6,18 z m 19.6,0 -10,-18 20,0 c 0,8 -4,14 -10,18 z M 100,101 89.7,83.8 c 3,-2 6.5,-3 10.3,-3 4,0 7,1 10,3 L 100,101 Z":"M 89.9,82.5 110,82.7 89.7,117.1 80,99.9 120.1,100 110,117.3 z"},i["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]={type:"path",stroke:!1,d:"m 95.1,109.3 c 0,0 -20.8,4.9 -30.1,6.7 -2.2,0.4 -5.7,0.2 -6.5,-2 -0.4,-1.1 3.3,-6.6 6.5,-7.3 8.7,-1.9 25.7,-5.5 25.7,-5.5 l 3.1,-16.1 4,-0.8 0.3,15.9 25.6,-5.8 6.5,-13.2 5.3,-1.4 -3.3,16.1 14,4.8 -4.3,1.2 -13.7,-2.8 -23.6,6.7 31.6,11.8 -5.5,2.5 z"},i["GR.IN.IC.BRIDGE"]={type:"path",d:"m 70,115 10,-10 40,0 10,10 m -60,-30 10,10 40,0 10,-10",fill:!1},i["GR.IN.IC.BASE"]={type:"path",d:"m 75,85 50,30 m -50,0 50,-30",fill:!1},i["GR.IN.IC.SEA SURFACE INSTALLATION, OIL RIG/PLATFORM"]=[{type:"path",d:"m 85,105 0,-40 m 25,40 0,15 m -35,0 0,-15 50,0 0,15",fill:!1},{type:"path",d:"m 85,90 15,0 0,15 -15,0 0,-15"}],i["GR.IN.IC.MILITARY/CIVILIAN.MATERIEL"]=a("MAT"),i["GR.IN.IC.MILITARY/CIVILIAN.PRINTED MEDIA"]=[{type:"circle",cx:100,cy:90,r:10,fill:!1},{type:"circle",cx:100,cy:110,r:10,fill:!1},{type:"path",d:"m 65,100 75,0",fill:!1}],i["GR.IN.IC.INFRASTRUCTURE.BANKING FINANCE AND INSURANCE INFRASTRUCTURE.ECONOMIC INFRASTRUCTURE ASSET"]=a("ECON"),i["GR.IN.IC.INFRASTRUCTURE.TELECOMMUNICATIONS INFRASTRUCTURE.TELECOMMUNICATIONS"]={type:"path",d:"m 90,105 20,0 0,0 m -25,15 15,-30 15,30 m -55,-40 25,10 0,-10 15,10 15,-10 0,10 25,-10",fill:!1},i["GR.IN.M1.RADIOLOGICAL"]=l("R"),i["GR.IN.M1.COAL"]=l("CO"),i["GR.IN.M1.GEOTHERMAL"]=l("GT"),i["GR.IN.M1.HYDROELECTRIC"]=l("HY"),i["GR.IN.M1.NATURAL GAS"]=l("NG"),i["GR.IN.M1.PETROLEUM"]={type:"path",d:"m 100,75 0,-10 -6,-10 12,0 -6,10",fill:!1},i["GR.IN.M1.CIVILIAN"]=l("CIV"),i["GR.IN.M1.CIVILIAN TELEPHONE"]=l("T"),i["GR.IN.M1.CIVILIAN TELEVISION"]=l("TV"),i["GR.IN.M2.CHEMICAL WARFARE PRODUCTION"]=r("C"),i["GR.IN.M2.NUCLEAR WARFARE PRODUCTION"]=r("N"),i["GR.IN.M2.RADIOLOGICAL WARFARE PRODUCTION"]=r("R"),i["GR.IN.M2.ATOMIC ENERGY REACTOR"]=r("A"),i["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]=r("P"),i["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]=r("S"),i["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]=r("B"),i["GR.IN.M2.SHIP CONSTRUCTION"]=r("YRD"),i["GR.IN.M2.WEAPONS GRADE PRODUCTION"]=r("W"),i["SOF.IC.UNDERWATER DEMOLITION TEAM"]={type:"text",stroke:!1,x:100,y:110,fontsize:32,text:"UDT"},i["SOF.M2.ATTACK"]=r("A"),i["SOF.M2.REFUEL"]=r("K"),i["SOF.M2.UTILITY"]=r("U"),i["SOF.M2.VSTOL"]={type:"text",stroke:!1,x:100,y:135,fontsize:20,text:"VSTOL"},i["SOF.M2.COMBAT SEARCH AND RESCUE"]=r(R?"CSAR":"H"),i["ST.IC.ARREST"]={type:"path",d:"m 92.5,100 15,0 m -2.5,-10 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -5,5 0,20 m 20,-15 c 0,11 -9,20 -20,20 -11,0 -20,-9 -20,-20 0,-11 9,-20 20,-20 11,0 20,9 20,20 z",fill:!1},i["ST.IC.ARSON/FIRE"]=R?[{type:"path",d:"m 84.6,101.6 c 1.3,23.1 31,23.2 30.7,-1.9 -1.5,2.1 -4.6,6.5 -8.1,7.3 1.9,-2.4 2.6,-8.5 2.4,-12.9 -1.7,3.4 -4,7.9 -7,7.8 1.7,-4.3 2.7,-9.4 -0.5,-13.7 -0.2,3 0.8,7.1 -1.9,7 -2.7,-0.1 -2.9,-4.4 -1.1,-10.8 -4,4.1 -6.2,9.8 -3.8,17.5 -1.9,-0.2 -4.4,-1.9 -7,-7.8 -1.5,4.9 1.2,9.6 3.2,13.7 -2.4,-1.1 -6,-3 -7,-6.2 z",stroke:!1},{type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"ASN"}]:{type:"text",stroke:!1,x:100,y:110,fontsize:35,text:"FIRE"},i["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]={type:"path",d:"m 127,127 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5 m -15,-15 5,5",fill:!1},i["ST.IC.BLACK LIST LOCATION"]=a("BLK"),i["ST.IC.BLACK MARKETING"]=[{type:"text",stroke:!1,x:100,y:95,fontsize:30,text:"BLK"},{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"MKT"}],i["ST.IC.BOMB"]=a("BOMB"),i["ST.IC.BOOBY TRAP"]={type:"path",d:"m 85,105 15,-25 15,25 m -35,5 c 0,-10 40,-10 40,0 0,10 -40,10 -40,0 z",fill:!1},i["ST.IC.COMPOSITE LOSS"]={type:"path",d:"m 100,85 0,30 m -35,-15 45,0 m 20,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z",fill:!1},i["ST.IC.DEMONSTRATION"]=a("MASS"),i["ST.IC.DRIVE-BY SHOOTING"]={type:"path",d:"m 95,85 5,-5 5,5 m -5,-5 0,30 m -15,0 30,0 m 5,5 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z m -30,0 c 0,2.8 -2.2,5 -5,5 -2.8,0 -5,-2.2 -5,-5 0,-2.8 2.2,-5 5,-5 2.8,0 5,2.2 5,5 z",fill:!1},i["ST.IC.DRUG RELATED ACTIVITIES"]=a("DRUG"),i["ST.IC.EXPLOSION"]={type:"path",d:"m 110,55 5,20 15,-10 0,15 15,5 -15,10 15,10 -15,5 5,15 -20,-5 -5,20 -10,-15 -10,20 -5,-25 -20,10 5,-15 L 55,105 70,95 60,85 70,80 70,65 85,75 90,55 100,70 z",fill:!1},i["ST.IC.EXTORTION"]={type:"text",stroke:!1,x:100,y:130,fontsize:80,text:"$"},i["ST.IC.FOOD DISTRIBUTION"]=[{type:"path",d:"m 105,85 c -5,10 -5,20 0,30 m 0,-30 c -20,0 -20,30 0,30",fill:!1},{Unknown:{type:"path",d:"M35,120 l130,0 ",fill:!1},Friend:{type:"path",d:"M25,120 l150,0 ",fill:!1},Neutral:{type:"path",d:"M45,120 l110,0 ",fill:!1},Hostile:{type:"path",d:"M50,120 l100,0 ",fill:!1}}[T]],i["ST.IC.GRAFFITI"]={type:"path",d:"m 110,80 c -10,0 -10,10 0,10 10,0 10,10 0,10 -10,0 -10,10 0,10 10,0 10,10 0,10 M 90,80 c -10,0 -10,10 0,10 10,0 10,10 0,10 -10,0 -10,10 0,10 10,0 10,10 0,10",fill:!1},i["ST.IC.GROUP"]={type:"path",d:"m 133,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m -52,-12.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m 23,-7.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},i["ST.IC.HIJACKING (AIRPLANE)"]={type:"path",fill:!!R&&G,d:"m 70,95 0,10 65,0 0,-10 z m 55,10 0,10 5,0 0,-10 z m 0,-10 0,-10 5,0 0,10 z m -45,10 0,15 10,0 0,-15 z m 0,-10 0,-15 10,0 0,15 z"},i["ST.IC.HIJACKING (BOAT)"]={type:"path",fill:R?G:!C&&G,d:"m 105,80 0,20 20,0 z m -5,25 0,-25 m -30,25 10,15 40,0 10,-15 z"},i["ST.IC.GRAY LIST LOCATION"]=a("GRAY"),i["ST.IC.IED"]=a("IED"),i["ST.IC.INDIVIDUAL"]={type:"path",d:"m 108,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},i["ST.IC.INTERNAL SECURITY FORCE"]=a("ISF"),i["ST.IC.KILLING VICTIM"]=[{type:"path",d:"m 108,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},{Unknown:{type:"path",fill:!1,d:"M50,65 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 143,130"}}[T]],i["ST.IC.KILLING VICTIMS"]=[{type:"path",d:"m 133,90 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m -52,-12.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0 m 23,-7.3 c 0,10 -15,10 -15,0 0,-10 15,-10 15,0 z m -8,7.3 0,25 m -10,-20 20,0",fill:!1},{Unknown:{type:"path",fill:!1,d:"M50,65 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 143,130"}}[T]],i["ST.IC.KNOWN INSURGENT VEHICLE"]={type:"path",d:"m 65,95 70,0 m 0,10 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z m -50,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z",fill:!1},i["ST.IC.MASS GRAVE LOCATION"]={type:"path",d:"m 77.5,90 10,0 m -5,-5 0,15 m 7.5,-20 0,30 -15,0 0,-30 z m 22.5,10 10,0 m -5,-5 0,15 m -7.5,-20 0,30 15,0 0,-30 z m -15,20 10,0 m -5,-5 0,20 m -7.5,-25 15,0 0,30 -15,0 z",fill:!1},i["ST.IC.MINE LAYING"]=[{type:"path",d:"m 60,85 80,0 0,30 -80,0 z",fill:!1},{type:"path",d:"m 135,100 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z m -25,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z m -25,0 c 0,5.5 -4.5,10 -10,10 -5.5,0 -10,-4.5 -10,-10 0,-5.5 4.5,-10 10,-10 5.5,0 10,4.5 10,10 z",stroke:!1}],i["ST.IC.PATROLLING"]={type:"path",d:"m 131,97 0,-14 5,0 c 4,0 4,7 0,7 l -5,0 m -71,15 15,10 M 60,105 75,95 m -15,10 40,0 -15,-15 40,0",fill:!1},i["ST.IC.POISONING"]={type:"path",d:"m 85,95 c 0,-20 30,-20 30,0 0,20 -30,20 -30,0 z m -15,10 60,15 m -60,0 60,-15",fill:!1},i["ST.IC.PSYCHOLOGICAL OPERATIONS"]={type:"path",fill:!!R&&G,stroke:o,d:"m 110,95 10,0 m -10,10 10,0 m -10,10 10,0 m -10,-30 10,0 m -10,-5 -10,10 -30,0 0,20 30,0 10,10 z"},i["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]=[i["ST.IC.PSYCHOLOGICAL OPERATIONS"],{Unknown:{type:"path",fill:!1,d:"M50,65 100,110 100,90 150,135"},Friend:{type:"path",fill:!1,d:"M25,50 100,110 100,90 175,150"},Neutral:{type:"path",fill:!1,d:"M45,45 100,110 100,90 155,155"},Hostile:{type:"path",fill:!1,d:"M57,70 100,110 100,90 143,130"}}[T]],i["ST.IC.RIOT"]=a("RIOT"),i["ST.IC.SAFE HOUSE"]=a("SAFE"),i["ST.IC.SEARCHING"]={type:"path",d:"m 140,105 c -10,0 -5,0 -10,0 -15,0 -5,-15 -20,-15 -15,0 -5,20 -20,20 -15,0 -5,-20 -20,-20 -10,0 -10,10 -10,10 m 70,0 10,5 -10,5",fill:!1},i["ST.IC.SPY"]=a("SPY"),i["ST.IC.SNIPING"]=[{type:"path",d:"m 95,85 5,-5 5,5 m -5,-5 0,40",fill:!1},{type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"S"}],i["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]={type:"path",d:"m 115,100 c 0,-5 5,-10 10,-10 M 85,100 C 85,95 80,90 75,90 m 5,25 c -0.5,-29.5 40,-30 40,0 z",fill:!1},i["ST.IC.WHITE LIST LOCATION"]=a("WHT"),i["ST.IC.ROBBERY"]=a("ROB"),i["ST.IC.THEFT"]=a("THF"),i["ST.IC.BURGLARY"]=a("BUR"),i["ST.IC.SMUGGLING"]=a("SMGL"),i["ST.IC.SABOTAGE"]=a("SAB"),i["ST.IC.ILLEGAL DRUG OPERATION"]=a("DRUG"),i["ST.IC.SPY"]=a("SPY"),i["ST.IC.WARRANT SERVED"]=a("WNT"),i["ST.IC.POLLING PLACE/ELECTION"]=a("VOTE"),i["ST.IC.NATURAL EVENT"]=a("NAT"),i["ST.IC.GEOLOGIC"]=a("GEOL"),i["ST.IC.HYDRO-METEOROLOGICAL"]=a("HYDR"),i["ST.IC.INFESTATION"]=a("INFS"),i["ST.IC.GRENADE"]=a("G"),i["ST.IC.INCENDIARY"]=a("I"),i["ST.IC.MINE"]=a("M"),i["ST.IC.HOUSE"]={type:"path",fill:!!R&&G,d:"m 70,100 60,0 m -30,-20 -30,20 0,35 60,0 0,-35 -30,-20 z"},i["ST.IC.ROCK THROWING"]={type:"path",d:"m 90,60 25,25 M 70,65 95,90 M 60,80 80,100 m 45,-5 5,15 -5,15 -20,10 -20,-5 -5,-20 5,-5 10,0 5,-10 10,-5 15,5 z"},i["ST.M1.ACCIDENT"]=l("ACC"),i["ST.M1.ASSASSINATION"]=l("AS"),i["ST.M1.CIVILIAN"]=l("CIV"),i["ST.M1.COERCED/IMPRESSED"]=l("C"),i["ST.M1.COMBAT"]=l("CBT"),i["ST.M1.DEAD BODY"]=l("DB"),i["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]=l("DPRE"),i["ST.M1.DRUG"]=l("DRUG"),i["ST.M1.EVICTION"]=l("EV"),i["ST.M1.EXECUTION (WRONGFUL KILLING)"]=l("EX"),i["ST.M1.EXFILTRATION"]=l("EXFL"),i["ST.M1.FOREIGN FIGHTERS"]=l("FF"),i["ST.M1.GANG"]=l("GANG"),i["ST.M1.GOVERNMENT ORGANIZATION"]=l("GO"),i["ST.M1.HIJACKING/HIJACKED"]=l("H"),i["ST.M1.HOUSE-TO-HOUSE"]={type:"path",fill:!!R&&G,d:"m 110,65 -20,0 0,15 20,0 z m -10,-10 -10,10 20,0 z"},i["ST.M1.IED"]=l("IED"),i["ST.M1.INCIDENT"]=l("INC"),i["ST.M1.INFILTRATION"]=l("INFL"),i["ST.M1.KIDNAPPING"]=l("K"),i["ST.M1.LABRATORY"]=l("LAB"),i["ST.M1.LEADER"]=l("LDR"),i["ST.M1.LOOT"]=l("LOOT"),i["ST.M1.MEETING"]=l("MTG"),i["ST.M1.MURDER"]=l("MU"),i["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]=l("NGO"),i["ST.M1.OTHER"]=l("OTH"),i["ST.M1.PIRACY"]=l("PI"),i["ST.M1.PREMATURE"]=l("P"),i["ST.M1.RAID"]=l("RAID"),i["ST.M1.RAPE"]=l("RA"),i["ST.M1.RELIGIOUS"]=l("REL"),i["ST.M1.SPEAKER"]=l("SPK"),i["ST.M1.TARGETED"]=l("TGT"),i["ST.M1.TERRORIST"]=l("TER"),i["ST.M1.TRAFFICKING"]=l("TFK"),i["ST.M1.WILLING RECRUIT"]=l("WR"),i["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]=i["ST.M1.WILLING"]=l("W"),i["ST.M1.FALSE"]=l("FAL"),i["ST.M1.FIND"]=l("FND"),i["ST.M1.FOUND AND CLEARED"]=l("CLR"),i["ST.M1.HOAX (DECOY)"]={type:"path",d:"M 90,75 80,67.5 90,60 90,75 Z m 15,0 -10,-7.5 10,-7.5 0,15 z m 15,0 -10,-7.5 10,-7.5 0,15 z"},i["ST.M1.ATTEMPTED"]=l("ATT"),i["ST.M1.ACCIDENT"]=l("ACC"),i["ST.M1.INCIDENT"]=l("INC"),i["ST.M1.THEFT"]=l("THF"),i["ST.M1.PIRATE"]=[{type:"circle",cx:100,cy:60,r:7,fill:!1},{type:"path",fill:!1,d:"m 82.5,75 35,-15 m 0,15 -35,-15 m 3,7 5,10 m 27,-10 -10,10"}],i["ST.M2.LEADER OR LEADERSHIP"]=r("LDR"),i["ST.M2.RELIGIOUS"]=r("REL"),i["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]=[{type:"path",stroke:!1,d:"m 98.7,66.7 c -3.2,0.7 -6.3,3.7 -6.4,7 0.3,3.6 5.3,2.8 7,0.6 2,-1.2 1.7,-4.5 4.5,-3.7 2.6,-0.6 3.2,3.2 5.9,3.2 1.6,1.5 4.4,-0.6 5.4,1.2 0.7,1.1 1.5,2.2 2.2,3.3 -2,3.1 -1.3,7.9 1.9,10 3.5,1.1 4.8,-3.5 4.1,-6.2 -0.2,-3 -2.5,-5 -5.1,-5.4 -1.5,-1.9 -2.7,-3.4 -1.6,-5.6 -1,-3.3 -5.1,-4.5 -8.2,-4.3 -2.2,0.3 -2.9,2.6 -5.3,1.9 -1.9,0.4 -1.9,-2.8 -4.3,-2 z m 0.2,1.3 c 2.7,0.5 0.9,0.6 -0.6,1.3 -0.5,2.2 3.8,0.4 1.4,2.9 -0.9,1.9 -5.8,4.7 -5.9,1.1 0.1,-2.5 2.7,-4.8 5.1,-5.2 z m 10.3,0.1 c 2.4,-0.5 7.1,2.3 5.6,3.7 -0.8,-2.1 -3,0 -1.2,1.2 -1.7,0.9 -7.4,-1.6 -5.7,-2.4 2.5,0.8 2.8,-2.7 -0,-1.9 -1.4,0.2 1.1,-0.8 1.3,-0.6 z M 81.9,71.6 c -1.8,1.9 -3.6,3.9 -5.5,5.8 -7.5,-0.1 -14,6.2 -15.7,13.2 -0.6,4.2 0.5,8.5 2.8,12 0.7,3.9 -3.2,6.7 -3,10.7 -0.8,7.4 4.8,14.5 11.7,16.8 2.3,-0.4 1.3,1.3 1.4,2 1.5,-0.4 3,-0.8 4.6,-1.2 -0.2,1.5 -0.1,2.7 1.4,1.2 0.9,-0.3 2.3,-2.2 2.9,-1.5 0.2,2.2 1.2,0.1 2,-0.7 0.8,-1.2 1.6,-2.3 2.4,-0.5 1.2,-2.4 4.1,-7.2 -0.8,-7.3 -3.4,2.3 -7.5,4.6 -11.8,3.5 -6.3,-1.5 -10.9,-8.8 -8.2,-14.9 0.4,-3.9 6.8,-3.4 5,-8.2 -1.8,-2.6 -5.7,-2.9 -5.7,-7 -1.5,-7.3 5.6,-14.7 13,-13.7 4.7,0.5 7.4,4.9 10.8,7.6 1.9,1.9 4.1,5.1 5.9,1.4 2.8,-2 4.3,-4.7 1.8,-7.6 C 94.8,79.7 90.9,77.3 88,74.4 86.3,72.9 83.9,72.6 81.9,71.6 z m 3.3,3.8 c 1.6,1.1 2.9,2.1 0.3,3.3 -0.9,3.7 -5.1,-0.5 -1.5,-1.5 0.4,-0.6 0.9,-1.1 1.2,-1.8 z m 34.2,3.1 c 3,1.4 3.9,6.4 1.4,8.8 -2.9,0.1 -3.6,-4.3 -3.1,-6.6 0.1,-2.9 2.5,2.7 2.5,-0.7 -0.2,-0.5 -0.5,-1 -0.8,-1.4 z M 127.3,90.2 c -4.3,0.4 -8.8,-0 -13.1,1 -2.1,1.1 -5.7,1.5 -4.6,4.5 0.1,1.8 0.2,3.6 0.4,5.4 -4.9,4.9 -5.5,13.3 -2.2,19.2 2.4,4.3 7,7 11.8,7.8 3.3,4.9 7.3,-1.3 11.2,-1.7 5.5,-2.5 8.9,-8.5 8.5,-14.5 0.2,-5 -2.4,-10.1 -6.7,-12.8 -0.1,-2.3 -0.2,-4.6 -0.3,-6.9 -1.6,-0.8 -3.4,-1.4 -5.1,-2.1 z M 127.8,92.5 c -0.9,1.7 0.6,3.8 -0.9,4.9 -2.3,0.7 -1.7,-2.4 -1.9,-3.8 -0.6,-1.7 1.9,-0.7 2.8,-1 z m -2.9,8.3 c 4.1,0.9 8,3.7 9.3,7.9 0.9,3.7 0.5,8 -2.3,10.9 -1.7,2 -5.3,4.3 -7.7,3.1 -3.1,-0.8 -5.8,2.1 -8.6,-0.5 -6.9,-4.2 -7.2,-16 0.2,-19.8 2.7,-1.6 6,-1.6 9.1,-1.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 85.1 75.3 C 85 75.8 84.2 76.7 83.9 77.1 C 83.6 77.6 82.4 77.9 82.4 78.6 L 82.4 79 C 82.4 79.4 83.3 80.1 83.6 80.1 L 83.8 80.1 C 84.8 80.1 85 79.1 85.4 78.6 C 85.7 78.2 86.7 77.4 87.2 77 L 85.1 75.3 z M 127.8 92.5 L 125 92.7 L 125.2 96.5 C 125.3 97.5 125.9 97.3 126.5 97.6 C 127.1 97.3 127.8 97.1 127.8 96.3 C 127.8 95.8 127.7 95.6 127.5 95.3 L 127.8 92.5 z"}],i["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]={type:"path",stroke:!1,d:"m 110.6,142.4 0,-28.6 -7.1,0 0,28.6 z m -21.2,0 7.1,0 0,-28.6 -7.1,0 z m 7.1,-28.6 h 7.1 v -11.8 h 24.4 V 77.2 h -6.3 v 18.6 h -18 v -10.7 c 0,-0.9 2.1,-1.2 3,-1.7 0.8,-0.4 2.1,-1.4 2.7,-2 1.5,-1.4 3.2,-3.6 3.8,-5.9 1.6,-6.3 -0.2,-10.6 -3.8,-14.1 -3,-3.1 -9.2,-4.9 -14.3,-2.7 -3.6,1.6 -8.4,6.2 -8.4,11 v 3.2 c 0,2.8 1.9,6.2 3.3,7.7 1,1 1.8,1.7 3,2.5 1,0.6 3.6,1.3 3.6,2.2 v 10.7 H 78.4 v -18.6 h -6.3 v 24.9 h 24.4 v 11.8 h -0 z"},i["AC.IC.SHOOTING"]={type:"path",stroke:!1,d:"m 93.2,89.7 h 16.8 v 9.3 c -2.6,0 -7.3,1.6 -9,1 -2.3,-0.8 -5.4,-2 -7.8,-2.6 v -7.8 l 0,0 z m -30,0 h 26.1 v 9.6 c 0,0.9 4.1,2 5,2.3 1.9,0.6 3.6,1.4 5.5,2 2,0.7 3.4,0.4 6,-0.1 1.6,-0.3 5.7,-0.4 6.6,-0.9 0.6,2.7 4.6,14 4.6,15.2 0,1.6 -1.2,4 -1.3,5.7 l 21.5,0 -8.2,-25.9 7.8,-7.7 c -0.8,-1.6 -4.1,-13.4 -5.2,-13.4 h -68.4 v 13.2 l 0,0 z"},i["AC.IC.FIRE EVENT"]={type:"path",stroke:!1,d:"m 96.5,78.5 c 0,-5.1 4.1,-9.7 4.1,-13 v -0.4 c 0,-1.3 -0,-3.8 -1.1,-4.1 -1,4.5 -3.5,8 -5.9,11.2 -1.2,1.6 -2.4,3.3 -3.6,5 -1,1.4 -3.1,3.5 -3.1,5.5 0,1.4 6.1,17.7 3,17.7 -0.1,0 -3.8,-2.5 -4.2,-2.9 -1.4,-1 -2.4,-2.3 -3.3,-3.7 -3.1,-4.6 -2.4,-4.4 -3.8,-10.3 -1.5,0.4 -2.6,5 -2.9,6.9 -0.4,2.4 -0.3,6.6 0.2,9 0.6,2.8 1.4,5 2.5,7.3 0.6,1.2 3,5.5 3.1,6.5 -2.2,-0.5 -7,-4.6 -8.6,-6.2 -1.5,-1.5 -5.5,-8.3 -5.9,-8.6 0,9.9 5,22.8 9.8,27.6 3.1,3.1 6.3,6.4 10.2,8.6 2.4,1.5 10.5,4.3 14.3,4.3 h 2.4 c 2.8,0 10.8,-3 12.9,-4.2 3.4,-1.9 6.9,-4.7 9,-7.9 4.4,-6.5 8,-15 8,-25.8 v -1.3 l -0.4,-5.8 c -0.7,0.4 -2.2,4.4 -2.5,5.2 -0.5,1.3 -2,3.4 -2.9,4.6 -1.4,2.1 -5.2,6.3 -7.8,6.9 v -1.1 c 0,-4.4 2.8,-8.8 2.8,-12.4 v -1.9 l -1.3,-12.2 h -0.6 c -0.3,3.9 -1.6,7.9 -3.4,10.5 -1.3,2 -5.3,5.6 -7.7,6.2 -0.2,-0.4 -0.4,-0.6 -0.4,-1.3 v -2.3 c 0,-5.1 3,-8.9 3,-12.8 v -0.8 c 0,-1.5 -2.1,-3.9 -2.9,-5.2 -0.7,-1.1 -2.4,-4.3 -3.5,-4.6 v 1.3 c 0,6.2 -1.4,10.6 -5.6,12.6 -1.1,-1.7 -3.6,-3.2 -3.6,-6.2 v -1.9 l 0,0 z"},i["AC.IC.NON-REsIdENTIAL FIRE"]={type:"path",stroke:!1,d:"m 121.2,122.3 -6.2,0 0,5.9 6.2,0 z m -12.1,0 -6.1,0 0,5.9 6.1,0 z m -12.2,0 -5.9,0 0,5.9 5.9,0 z m -12.3,0 -5.7,0 0,5.9 5.7,0 z m 30.4,-4.8 h 6.1 v -6.2 h -2.5 c -1.2,0 -2.5,1.5 -3.6,1.8 v 4.4 z m -5.9,-6.2 -6.1,0 0,6.2 6.1,0 z m -12.2,0 -5.9,0 0,6.2 5.9,0 z m -12.3,0 -5.7,0 0,6.2 5.7,0 z m 25,-33.4 c 0,-3.4 3.4,-7.4 3.4,-9.1 0,-1.4 -0.8,-4.2 -1.8,-4.6 0,7.1 -8.6,12.8 -8.6,15.7 v 0.4 c 0,0.7 1.9,5.2 2.3,6.6 0.4,1.7 1.4,5.6 1.6,7.3 -6.2,-0.1 -7.3,-9.8 -10.3,-11.8 l -0.3,3 0,4.6 c 0,4.7 3.4,11.4 5.6,13.9 1,1.1 4.2,3.7 5.5,4.3 0.8,0.4 6.3,3 6.6,3 1.4,0 9.2,-7.2 10.5,-8.6 2.5,-2.5 4,-9.6 4,-14.8 v -0.7 l -0.7,-5.7 c -1,0.6 -2.1,5.6 -2.8,7 -1.5,3.2 -1.8,3.1 -5.4,4 -0.3,-12.2 6.7,-8.3 -2.7,-19.1 0,4.9 -0.9,7.9 -4.1,9.6 -1.4,-0.7 -3,-2.7 -3,-4.8 z m -14.8,26.4 h 3.6 c -0.1,-0.6 -0.3,-1.4 -1.1,-1.4 h -1.2 v -2.7 c 0,-0.9 -0.9,-2.4 -1.4,-3 v 7 z m -16.4,-28.6 h 3.9 v 28.6 h 8.9 v -28.6 h 3.6 v 5.4 c 0.3,-0.2 1.4,-1.4 1.4,-1.8 v -5 h -6.4 v 28.6 h -6.4 v -28.6 h -6.1 v 28.6 h -5.2 v 32.7 h 54.8 v -30.7 c -0.4,0.2 -1.1,1 -1.1,1.6 v 27.5 h -52.5 v -29.8 h 5.2 v -28.6 h -0 z"},i["AC.IC.REsIdENTIAL FIRE"]={type:"path",stroke:!1,d:"m 91.5,88.3 -0.7,-3 -30.1,25.2 15.6,0.1 v 25.6 h 50.5 v -25.6 h 12.4 c -0.4,-0.5 -7.6,-5.9 -8,-5.9 -0.3,0 -1.2,1.6 -1.4,1.9 l 1.4,1.4 h -2.4 c -0.7,0.5 -4.9,3.1 -4.9,3.8 v 22.3 h -18.3 v -12.9 h -8.7 v 12.9 h -18.1 v -23.5 h 22.6 l -2.2,-2.7 -30.7,-0.1 L 91.5,88.3 z m 27.6,28 -8.2,0 0,8.5 8.2,0 z m -27,0.2 -8.7,0 0,8.2 8.7,0 z m 11,-36.4 c 0,0.9 2.1,5.3 2.5,6.9 0.4,1.8 1.5,6.1 1.5,7.8 -7.1,-1.6 -6.9,-9.9 -10.3,-12.2 -1.7,7.5 0.8,15.1 3.7,19.5 2.4,3.6 2.6,3.4 6,6 0.4,0.4 7.9,4.3 7.9,4.3 2,0 9.6,-7.1 11.1,-8.6 1.8,-1.8 5.6,-10.8 5.6,-14.4 V 83.5 c 0,-1.9 -0.3,-3.2 -1.4,-4 0,2 -1.8,7 -2.6,8.4 -0.8,1.8 -4.3,4.2 -6.3,4.7 v -1.7 c 0,-4.4 2.4,-6.8 2.4,-10.1 0,-2 -4,-7.2 -5.2,-8 0,5.4 -0.7,8 -4.2,9.8 -1.2,-0.7 -3.1,-2.6 -3.1,-4.4 v -1 c 0,-1.5 1.8,-5.4 2.5,-6.6 2,-3.9 0.5,-3.8 -0.4,-7 h -0.4 c -1.3,5.5 -0.8,4.8 -3.8,8.9 -1,1.4 -5.4,5.9 -5.4,7.5 z"},i["AC.IC.SCHOOL FIRE"]={type:"path",stroke:!1,d:"m 131.3,73 c -4,-1 -17,-7.2 -19.8,-7.2 h -2.4 V 96 h -0.7 c 0,5.6 -3.8,15.3 -6.2,18.6 -2,2.7 -3.7,4.1 -6.2,6.2 -0.8,0.6 -7,4.9 -7,5.4 v 8 h 44.1 V 96 h -20.4 l 0,-14.8 18.8,-8.2 z m -49.2,11.8 c 0,-3 3.6,-8 3.6,-10 0,-1.8 -0.8,-3.9 -2,-4.6 -0.4,0.8 -0.4,3.6 -0.9,5 -0.3,0.7 -1.8,2.7 -2.3,3.5 -1.6,2.3 -3.4,4.2 -5.1,6.4 -2.2,2.8 0,5 1.1,8.2 0.8,2.2 1.4,7.9 2.1,9.4 C 71.9,102.4 70.6,91.8 67.6,89.9 l -0.6,7.6 0.1,0.2 c 0,5 3.6,12.3 5.9,15 1.1,1.3 4.3,3.6 5.9,4.6 1.1,0.7 2.5,1 3.7,1.6 0.4,0.2 3.2,1.9 3.2,1.9 2.1,0 9.9,-7.4 11.5,-9 1.8,-1.8 5.8,-11 5.8,-14.4 v -6.3 c 0,-2.1 -0.4,-2.6 -0.7,-4.2 h -0.8 c -0.2,1.9 -2.2,7.1 -3,8.7 -0.7,1.3 -6.3,5.7 -6.3,3.7 v -1.2 c 0,-3.8 2.4,-7.2 2.4,-10 v -0.8 c 0,-1.5 -4.3,-6.8 -5.4,-7.6 0,2.5 0.1,4.8 -0.8,6.5 -0.5,0.9 -2.5,3.5 -3.6,3.5 -1.1,0 -3.2,-3.4 -3.2,-5.1 z"},i["AC.IC.HOT SPOT"]=[{type:"path",stroke:!1,d:"m 96.3,78.5 c 0,-5.1 4.1,-9.7 4.1,-13 v -0.4 c 0,-1.3 -0,-3.8 -1.1,-4.1 -1,4.5 -3.5,8 -5.9,11.2 -1.3,1.6 -2.3,3.3 -3.6,4.9 -1,1.3 -3.1,3.4 -3.1,5.5 0,1.4 6.1,17.7 3,17.7 -0.1,0 -3.7,-2.5 -4.2,-2.9 -1.4,-1 -2.4,-2.3 -3.3,-3.7 -3.1,-4.6 -2.4,-4.4 -3.8,-10.3 -1.5,0.4 -2.6,5 -2.9,6.9 -0.4,2.4 -0.3,6.7 0.3,9 0.6,2.8 1.3,5 2.5,7.3 0.6,1.2 3.1,5.5 3.1,6.5 -2.2,-0.5 -7.1,-4.6 -8.6,-6.1 -1.5,-1.5 -5.5,-8.3 -5.9,-8.6 0,9.9 5,22.8 9.8,27.6 3.1,3.1 6.3,6.4 10.1,8.7 2.5,1.5 10.5,4.3 14.3,4.3 h 2.4 c 2.9,0 10.8,-3 12.9,-4.2 3.4,-1.9 6.9,-4.7 9,-7.9 4.4,-6.5 8,-15 8,-25.7 V 99.9 l -0.4,-5.8 c -0.7,0.4 -2.2,4.4 -2.5,5.2 -0.5,1.3 -2,3.4 -2.8,4.6 -1.4,2.1 -5.2,6.3 -7.9,6.9 v -1.1 c 0,-4.4 2.8,-8.8 2.8,-12.4 v -1.9 l -1.3,-12.2 -0.7,8e-4 c -0.3,3.9 -1.7,7.9 -3.4,10.5 -1.3,2 -5.3,5.6 -7.7,6.2 -0.2,-0.4 -0.4,-0.6 -0.4,-1.3 v -2.4 c 0,-5.1 3,-8.9 3,-12.8 V 82.6 c 0,-1.5 -2.1,-3.9 -2.9,-5.2 -0.7,-1.1 -2.4,-4.3 -3.5,-4.6 v 1.3 c 0,6.2 -1.4,10.6 -5.6,12.6 -1.1,-1.7 -3.6,-3.1 -3.6,-6.2 v -1.9 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 113,126.9 c 0,6.3 -5.1,11.4 -11.4,11.4 -6.3,0 -11.4,-5.1 -11.4,-11.4 0,-6.3 5.1,-11.4 11.4,-11.4 6.3,0 11.4,5.1 11.4,11.4 z"}],i["AC.IC.FIRE ORIGIN"]=[{type:"path",stroke:!1,d:"m 96.3,78.5 c 0,-5.1 4.1,-9.7 4.1,-13 v -0.4 c 0,-1.3 -0,-3.8 -1.1,-4.1 -1,4.5 -3.5,8 -5.9,11.2 -1.3,1.6 -2.3,3.3 -3.6,4.9 -1,1.3 -3.1,3.4 -3.1,5.5 0,1.4 6.1,17.7 3,17.7 -0.1,0 -3.7,-2.5 -4.2,-2.9 -1.4,-1 -2.4,-2.3 -3.3,-3.7 -3.1,-4.6 -2.4,-4.4 -3.8,-10.3 -1.5,0.4 -2.6,5 -2.9,6.9 -0.4,2.4 -0.3,6.7 0.3,9 0.6,2.8 1.3,5 2.5,7.3 0.6,1.2 3.1,5.5 3.1,6.5 -2.2,-0.5 -7.1,-4.6 -8.6,-6.1 -1.5,-1.5 -5.5,-8.3 -5.9,-8.6 0,9.9 5,22.8 9.8,27.6 3.1,3.1 6.3,6.4 10.1,8.7 2.5,1.5 10.5,4.3 14.3,4.3 h 2.4 c 2.9,0 10.8,-3 12.9,-4.2 3.4,-1.9 6.9,-4.7 9,-7.9 4.4,-6.5 8,-15 8,-25.7 V 99.9 l -0.4,-5.8 c -0.7,0.4 -2.2,4.4 -2.5,5.2 -0.5,1.3 -2,3.4 -2.8,4.6 -1.4,2.1 -5.2,6.3 -7.9,6.9 v -1.1 c 0,-4.4 2.8,-8.8 2.8,-12.4 v -1.9 l -1.3,-12.2 -0.7,8e-4 c -0.3,3.9 -1.7,7.9 -3.4,10.5 -1.3,2 -5.3,5.6 -7.7,6.2 -0.2,-0.4 -0.4,-0.6 -0.4,-1.3 v -2.4 c 0,-5.1 3,-8.9 3,-12.8 V 82.6 c 0,-1.5 -2.1,-3.9 -2.9,-5.2 -0.7,-1.1 -2.4,-4.3 -3.5,-4.6 v 1.3 c 0,6.2 -1.4,10.6 -5.6,12.6 -1.1,-1.7 -3.6,-3.1 -3.6,-6.2 v -1.9 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 99.6 105.9 C 93.3 105.9 88.2 111 88.2 117.3 C 88.2 123.6 93.3 128.7 99.6 128.7 C 105.9 128.7 111 123.6 111 117.3 C 111 111 105.9 105.9 99.6 105.9 z M 105 109.4 L 106.8 111 L 101.2 117.1 L 107.3 123.2 L 105.6 124.9 L 99.5 118.8 L 93.7 125.3 L 91.9 123.6 L 97.8 117.2 L 92.1 111.4 L 93.8 109.8 L 99.5 115.4 L 105 109.4 z"}],i["AC.IC.SMOKE"]=[{type:"path",stroke:!1,d:"m 99.3,69.2 c 0.2,-2.6 4.4,-5.5 7.2,-6 4.2,-0.8 6.9,1.2 9.1,3.3 1.1,1.1 1.9,2.7 2.4,4.3 0.6,2.2 1.9,1.3 4,2.5 2.4,1.4 4.9,4.4 5.6,7.4 5.3,0 10.3,4.8 10.3,9.9 v 1.3 c 0,3 -1.2,4.9 -2.8,6.5 -1.1,1.1 -1.2,1.2 -2.6,2.1 -1.3,0.8 -2.5,0.6 -2.7,2 -0.6,4.6 -4.2,9 -9.4,9 3.3,5 2.3,8.7 -0.6,13 0,4.8 -0.2,6.2 -2.8,8.8 -2.4,2.5 -4.5,2.4 -8.6,2.4 0.7,-1 1.2,-1 2,-2.4 0.6,-1.1 0.8,-1.7 1.4,-2.9 1,-2.2 1.8,-3.7 1.8,-6.8 v -2.1 c 0,-1.4 -0.2,-2.4 -0.8,-3.2 -1.2,5.2 -1.4,6.4 -5.7,8.6 0,-8.3 3.8,-6.8 -1.9,-13.4 0,3.8 -0.2,5.6 -2.7,6.9 -0.8,-0.5 -2.1,-1.7 -2.1,-2.9 v -0.4 c 0,-2 2.5,-5.2 2.5,-6.7 v -0.4 c 0,-1.1 -0.4,-2.1 -1,-2.5 0,2.9 -3.4,7.6 -4.9,9.2 -1.6,1.7 -1.1,2.8 -0.2,5 0.7,1.7 1.1,3.5 1.1,5.8 v 1 c -3.2,-0.3 -4.4,-6.2 -6.1,-8.2 0,3.4 -0.8,6.3 0.4,9.4 0.8,1.9 2.4,5.6 4.4,6.1 v 0.4 l -3.4,0.6 -0.2,-0.1 c -3.4,0 -6.4,-2.4 -7.8,-4.4 -0.8,-1.1 -1.5,-2.7 -1.7,-4.4 -0.3,-2.3 0.6,-3.6 0.6,-5 0,0 -5.1,-4.7 -4.4,-9 l 0.2,-1.7 c -0.4,-0.5 -1.4,-1.4 -2,-2.2 -0.6,-0.8 -1.1,-1.8 -1.6,-2.6 -1.4,0 -2,0.6 -3.2,0.6 h -0.6 c -5.4,0 -10.5,-5.2 -10.5,-10.5 v -0.8 c 0,-4.9 4.1,-9.2 9,-9.2 h 2.1 c 0.8,-3.2 5.7,-6.9 10.1,-5.9 -0.4,-1.5 -1,-2.7 -1,-4.8 v -0.4 c 0,-3.8 3.2,-7.8 6.1,-8.8 1.9,-0.7 3.9,-1 6.1,-0.4 2.3,0.6 3.7,2.2 4.8,2.5 l 0,0 z m -0.4,-1.9 c -1.3,-0.1 -2.9,-2.1 -5.9,-2.1 h -1.9 c -5,0 -10.6,5.8 -10,11.4 l 0.5,3.4 h -0.6 c -4.3,0 -7.1,3.2 -8.6,6.1 -2.3,-1.1 -6.8,1.2 -7.9,2.4 -1.6,1.6 -3.6,4.2 -3.6,7.3 v 1.5 c 0,3.6 2.4,7.3 4.5,8.9 1.8,1.3 2,1.6 4.4,2.4 2.7,0.9 3.7,0.1 5.9,0.2 l 3.1,3.7 c -0.6,1.3 0.4,4.9 0.9,6 0.5,1.2 0.7,1.4 1.4,2.4 0.2,0.4 1.7,2 1.7,2 0,1.1 -0.4,1.4 -0.4,2.7 v 0.2 c 0,6.3 4.8,12 10.7,12 2.1,0 3.6,-0.4 5,-1 2.6,1.4 7.1,3 9.2,-0.1 l 3.4,0.5 c 2.7,0.4 6.8,-2.2 7.9,-3.6 1,-1.4 3.7,-6 2.4,-8.8 1.1,-0.7 2.6,-3.7 2.7,-5.5 0.1,-1.7 0.2,-1.8 -0.1,-3.6 -0.2,-1.4 -0.9,-2.2 -1,-3.2 4,-0.3 8.4,-5.2 8.4,-9.7 2.5,-1.6 3.4,-1.2 5.6,-3.8 1.3,-1.4 2.6,-4.4 2.6,-7 0,-6.3 -4.7,-12 -10.7,-12 -0.9,-4 -4.8,-8.3 -9.2,-8.6 -0.4,-4.4 -5.7,-9.4 -10.7,-9.4 -4.1,-0 -8.9,2.7 -9.6,5.6 l 0,0 z m 15.8,38.4 c 0.5,0 1,0.1 1,-0.4 0,-3.1 -4.1,-6.7 -7.6,-6.7 h -1.9 c -0.6,0 -1,0.8 -0.6,1 0.4,0.2 1.6,0.1 2,0.1 1.2,0 2.6,0.5 3.4,1 2.1,1.6 2.8,2.1 3.5,5.1 z m -34.5,-12.6 v 1.7 c 0,1.4 0.6,2.2 0.6,3.2 0,0 -3.6,3.4 -3.8,5.4 l 0.6,0.2 c 1,-0.6 1.6,-2.6 3,-4 1,-0.9 3.1,-2.2 4.8,-2.2 h 0.6 c 1.3,0 3.6,1 3.6,-0.2 0,-0.9 -2.6,-1 -3.6,-1 h -0.2 c -1.6,0 -3,0.6 -4,1.3 -0.1,-1 -0.6,-1.9 -0.6,-3.2 0,-4.6 3.7,-8.6 8.4,-8.6 h 1 c 1,0 1.5,0.2 2.3,0.4 0.1,-0.2 0.4,-0.6 0.4,-0.7 0,-0.7 -1.8,-1 -2.5,-1 h -1.5 c -4.5,-8e-4 -9.2,4.4 -9.2,8.6 z m 19.1,-15.8 0.6,0.6 c 1.6,-0.9 3.4,-2.3 5.9,-2.3 h 1 c 5.5,0 10.1,4.4 10.1,9.7 v 0.6 c -1.5,-0 -2.6,-0.8 -4.6,-0.8 h -1 c -1.5,0 -4.1,0.3 -4.2,1.7 0.6,0.1 0.4,0.2 0.8,0.2 0.9,0 1.4,-0.6 3,-0.6 h 2.3 c 2.2,0 5.6,1.8 6.6,3.1 2,2.6 1.8,3.7 2.6,7.2 0.5,0 1,0.1 1,-0.4 0,-4 -2.6,-8.1 -5.2,-9.4 0,-6.9 -4.5,-12.4 -11.1,-12.4 h -1.3 c -2.3,0 -5.6,1.6 -6.5,2.9 z"}],i["AC.IC.SPECIAL NEEDS FIRE"]=[{type:"path",stroke:!1,d:"m 75.3,133.9 h 49.4 v -28.9 c -0.6,0.4 -2.4,1.2 -2.4,2 v 24.8 H 77.4 v -30 h -2.2 v 32.1 l 0,0 z M 93,129.1 h 2 c 4.2,0 7.6,-2.4 9.3,-5 l -1.3,-3.5 c -1.2,0.3 -2.1,5.2 -8.6,5.2 h -0.8 c -3.4,0 -6.3,-3.3 -7.2,-6 -0.6,-1.7 -0.6,-3.6 0,-5.4 0.8,-2.5 1.6,-2.4 2.6,-4 l -0.4,-3.4 c -3.2,0.8 -7.1,8 -5.7,12.8 1.2,4.1 5.4,9.2 10.2,9.2 z M 88.9,97.9 v 0.4 c 0,0.8 0.5,1.4 0.8,2 l 1.4,14.7 11.3,0 4.3,10.2 6.2,-2 -1,-3 -3.5,1 C 108,119.9 104.8,111.7 104,111.7 H 94.1 C 94,111 93.8,110.9 93.8,110.1 v -1.1 h 7.6 v -2.4 h -8 l -0.2,-3.7 v -2.2 c 3.4,-0.8 2.7,-6.2 -1.1,-6.2 -1.8,0 -3.2,1.4 -3.2,3.2 z m 19.9,-7.4 v 1 l -0.4,0.3 C 105.1,89.7 101,86.1 101,80.8 99.6,81.7 98.8,84.8 98.8,87.1 v 1.1 c 0,4.5 3,10.7 5,13.3 2.8,3.7 7.4,4.8 11.6,7 1.6,-0.8 9.3,-5.4 10,-6.3 1.3,-1.7 4.2,-9.8 4.2,-12.4 0,-1.9 -0.3,-8.2 -1.3,-8.8 -0.7,2.7 -0.8,4.7 -2.3,6.8 -1,1.4 -3.3,3.5 -5,4 l -0.2,-2.4 v -0.2 c 0,-3 2,-5.4 2,-8.8 0,-1 -3.4,-6.1 -4.1,-6.2 0,1.8 -0.2,4.1 -0.6,5.4 -0.3,1 -1.9,3.4 -2.9,3.4 h -0.6 c -0.4,-1.4 -1.9,-1.7 -1.9,-4.8 V 76.9 c 0,-2.3 2.6,-5.5 2.6,-7.8 l 0,-0.6 -0.3,-2.4 c -1,0.2 -1,1.9 -1.4,2.9 -0.4,1 -1,2 -1.6,2.9 -1.3,1.7 -2.6,3.4 -3.9,5.1 -2,2.8 -2.1,2.7 -1,6.1 0.6,2 1.7,4.8 1.7,7.4 z m 24.3,10.2 -3.3,-2 -1.2,1.9 3.5,2 z m -66.2,0 1,1.9 c 5,-2.7 11,-6.9 16,-10.1 2.7,-1.7 5.2,-3.4 7.8,-5.1 1.4,-0.9 2.6,-1.6 3.9,-2.6 1.8,-1.2 1.9,-1.9 2.4,-4.3 l -31.2,20.2 z"}],i["AC.IC.WILD FIRE"]=[{type:"path",stroke:!1,d:"m 110.8,139.5 c 0.2,-0.5 6.5,-6.2 7.4,-7 2.6,-2.6 5.6,-5.2 7.8,-8.1 3.9,-5.2 8,-15 8,-24 v -6.9 c 0,-1 0,-2.2 -0.8,-2.4 -0.8,3.4 -3.3,7.7 -5.1,10.1 -0.5,0.6 -7.9,8.7 -7.9,6.2 0,-4.7 2.5,-8.4 2.9,-13.4 0.2,-2.9 -0.8,-11.4 -1.4,-14.3 -0.9,0.7 -1.2,4.2 -1.7,5.7 -0.6,1.7 -1.2,3.6 -2.1,5 -0.7,1.1 -6.1,7.2 -7,7.2 -0.7,0 -1.6,-2.9 -1.6,-4.1 0,-4.7 3.3,-9.7 3.3,-13.4 v -0.6 c 0,-2.4 -1.9,-3.6 -3,-5.6 -0.6,-1 -2.7,-4.7 -3.7,-4.8 v 2.9 c 0,2.2 -0.5,5.6 -1.3,7.1 -0.4,0.8 -3.2,4.1 -4,4.1 -1,0 -3.9,-3.9 -3.9,-5.7 v -3.5 c 0,-4.1 4.1,-8.6 4.1,-12.6 v -0.2 c 0,-1.5 -0,-4 -1.4,-4.1 -0.7,8 -12.6,18.7 -12.6,21.8 0,4.4 3.9,9.2 3.9,15.9 v 2.2 c 0,0.7 -0.2,0.8 -0.2,1.4 -0.8,-0.2 -1.4,-1.3 -1.9,-2 -0.7,-0.8 -1.4,-1.1 -2.2,-1.7 -1.5,-1 -2.7,-2.3 -3.8,-3.7 -1.9,-2.5 -4.1,-6.7 -4.1,-10.9 -1.8,0.5 -3.3,6.3 -3.3,8.8 v 3.5 c 0,8.3 5.9,15.1 5.9,18.1 -3.2,-1.7 -6,-3.9 -8.5,-6.4 -1.2,-1.2 -5.5,-8.5 -6.2,-8.7 0,5.7 1.7,10.3 2.6,15.1 0.5,2.3 1.2,5.1 1.9,7.1 1,2.7 1.9,3.3 3.4,5.3 3,4 4.9,6 8.3,9.4 1.5,1.5 2.9,2.9 4.4,4.4 l 4.7,3.4 5.9,2.8 V 129.9 h -13 l 9.9,-11.5 -7.4,-0.1 9.8,-11.1 -6.6,-0.1 10.9,-17.3 0.1,-0.2 11.2,17.5 -6.1,-0 9.4,11 -7.6,0 10.1,11.7 -13.1,0.1 v 13 l 6,-3.4 z"}],i["AC.IC.HAZARDOUS MATERIALS INCIDENT"]=[{type:"path",stroke:!1,d:"m 60.7,100.6 78.5,-0 -39.3,39.2 -39.2,-39.2 z M 127.6,87.8 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 87.8 z M 115.3,75.5 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 75.5 z M 90.8,69.5 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 90.8 V 69.5 z m -12.2,12.2 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 78.6 V 81.7 z m -6.3,6 0,12.2 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 30.8,-24.5 6.2,6.1 c -0.2,0.4 -0.1,-0.1 -0.1,0.4 V 100 h -6.1 V 63.3 z M 56.7,100 100,143.3 143.3,100 100,56.7 56.7,100 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 103.1,63.3 6.2,6.1 c -0.2,0.4 -0.1,-0.1 -0.1,0.4 V 100 h -6.1 V 63.3 z m -30.8,24.5 0,12.2 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 6.3,-6 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 78.6 V 81.7 z m 12.2,-12.2 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 100 H 90.8 V 69.5 z m 24.5,6 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 75.5 z m 12.3,12.3 c 0.6,0.4 6.1,5.9 6.1,6.2 V 100 h -6.1 V 87.8 z m -66.9,12.8 78.5,-0 -39.3,39.2 -39.2,-39.2 z"}],i["AC.IC.CHEMICAL AGENT"]=[{type:"path",stroke:!1,d:"m 100.7,107.7 c -3.2,2e-5 -5.8,1 -7.6,3 -1.9,2 -2.8,4.7 -2.8,8.1 -2e-6,3.4 0.9,6.1 2.8,8.1 1.9,2 4.4,3 7.6,3 1.3,0 2.4,-0.2 3.6,-0.5 1.1,-0.3 2.2,-0.9 3.2,-1.5 l 0.1,-0.1 0,-0.1 0,-3 0,-0.5 -0.3,0.3 c -0.9,0.9 -1.9,1.5 -3,1.9 -1.1,0.4 -2.2,0.7 -3.4,0.7 -2.4,0 -4.1,-0.7 -5.3,-2.1 -1.2,-1.4 -1.9,-3.5 -1.9,-6.2 -4e-6,-2.7 0.6,-4.8 1.9,-6.2 1.2,-1.4 3,-2.1 5.3,-2.1 1.2,2e-5 2.3,0.2 3.4,0.6 1.1,0.4 2.1,1.1 3,1.9 l 0.3,0.3 0,-0.5 0,-3 -0.2,0 0.1,-0.2 c -1,-0.7 -2.1,-1.2 -3.2,-1.5 -1.1,-0.3 -2.3,-0.5 -3.6,-0.5 z M 92.7,64.2 h 14.7 v 33 c 0,8.2 12.9,9.6 12.4,21.8 -0.3,6.8 -7,18.6 -14.3,18.6 h -11 c -6.8,0 -14.6,-13.1 -14.3,-20 0.6,-10.6 12.4,-12.8 12.4,-20.4 v -33 z m -14.7,55 c 0,6.8 7.9,20.2 14.7,20.2 h 14.7 c 8.1,0 14.7,-13 14.7,-22 0,-11.8 -12.8,-13.6 -12.8,-22 V 60.6 H 90.8 V 95.4 c 0,7.8 -12.8,8.7 -12.8,23.9 l 0,0 z"},{type:"path",stroke:!1,fill:E.fillColor.Unknown,d:"m 92.7,64.2 0,33 c 0,7.6 -11.9,9.8 -12.4,20.4 C 79.9,124.5 87.7,137.6 94.5,137.6 l 11,0 c 7.2,0 14,-11.8 14.3,-18.6 0.5,-12.2 -12.4,-13.6 -12.4,-21.8 l 0,-33 -14.7,0 z M 100.7,107.7 c 1.3,2e-5 2.5,0.2 3.6,0.5 1.1,0.3 2.2,0.8 3.2,1.5 l -0.1,0.2 0.2,0 0,3 0,0.5 -0.3,-0.3 c -0.9,-0.9 -1.9,-1.5 -3,-1.9 -1.1,-0.4 -2.2,-0.6 -3.4,-0.6 -2.4,2e-5 -4.1,0.7 -5.3,2.1 -1.2,1.4 -1.9,3.5 -1.9,6.2 -4e-6,2.7 0.6,4.8 1.9,6.2 1.2,1.4 3,2.1 5.3,2.1 1.2,0 2.3,-0.2 3.4,-0.7 1.1,-0.4 2.1,-1.1 3,-1.9 l 0.3,-0.3 0,0.5 0,3 0,0.1 -0.1,0.1 c -1,0.7 -2.1,1.2 -3.2,1.5 -1.1,0.3 -2.3,0.5 -3.6,0.5 -3.2,0 -5.8,-1 -7.6,-3 -1.9,-2 -2.8,-4.7 -2.8,-8.1 -2e-6,-3.4 0.9,-6.1 2.8,-8.1 1.9,-2 4.4,-3 7.6,-3 z"}],i["AC.IC.CORROSIVE MATERIAL"]=[{type:"path",stroke:!1,d:"m 102.9,135.4 c 0.8,0 1.4,-0.8 1.4,-1.5 0,-0.7 -0.6,-1.5 -1.2,-1.5 H 102.3 c -0.5,0 -1.2,0.7 -1.2,1.4 v 0.3 c 0,0.8 0.6,1.4 1.4,1.4 H 102.9 z M 96.9,132.5 c 0,0.7 0.6,1.5 1.2,1.5 h 0.6 c 0.8,0 1.4,-0.8 1.4,-1.5 v -0.2 c 0,-0.7 -0.6,-1.5 -1.2,-1.5 H 98.1 c -0.6,0 -1.2,0.9 -1.2,1.5 v 0.2 z m 8.5,-0.9 c 1.3,0 2.2,-1.8 1.1,-2.8 -1,-1 -2.8,-0.2 -2.8,1.1 0,0.8 0.9,1.7 1.7,1.7 z m -6.2,-4.4 c 0,0.6 0.6,1.5 1.2,1.5 h 0.6 c 0.8,0 1.4,-0.6 1.4,-1.4 v -0.6 c 0,-0.5 -0.7,-1.2 -1.4,-1.2 h -0.3 c -0.8,0 -1.5,0.8 -1.5,1.6 z m -0.6,-4.1 c 0.6,0 1.2,-0.8 1.2,-1.5 0,-1 -0.7,-1.7 -1.7,-1.7 -0.6,0 -1.5,0.6 -1.5,1.2 v 0.6 c 0,0.7 0.7,1.4 1.2,1.4 h 0.8 V 123.1 z m 2.4,-2.7 c 0,0.6 0.7,1.5 1.2,1.5 h 0.8 c 0.4,0 1.2,-0.8 1.2,-1.2 v -0.8 c 0,-0.6 -0.8,-1.2 -1.5,-1.2 h -0.1 c -0.8,0 -1.5,0.8 -1.5,1.5 v 0.1 z m -2.7,-3.5 c 0.6,0 1.4,-0.8 1.4,-1.5 v -0.2 c 0,-2.2 -3.2,-1.8 -3.2,-0.3 v 0.8 c 0,0.7 1.1,1.2 1.8,1.2 z m 4.1,-3.6 c 0,2 3.3,1.9 3.2,-0.1 -0.1,-2.3 -3.2,-1.8 -3.2,-0.3 v 0.4 z m 4.7,-16.2 0,2.9 -3,-0.2 0.9,2.8 -1.1,0.1 -1.6,-0.9 -0.4,3 -1,-1.5 -3.3,1 -0.6,-3.2 -2,1.3 -0.6,-1.6 -2.5,0.4 1.5,-2.7 -0.6,-1.5 -22.2,0 0,12.4 59.2,0 0,-12.4 z M 94.3,85.2 v 1.4 c 0,4.4 2.1,8.7 5.7,9.4 3.7,0.8 7,-4.5 7,-8 v -1.5 c 0,-3 -2.1,-8.6 -3,-11.3 -0.5,-1.4 -3.1,-10.6 -3.9,-10.6 -0.8,0 -0.9,4.5 -1.1,5.4 -0.6,2.1 -0.9,3.2 -1.6,5.1 -0.8,2.3 -3.2,7.6 -3.2,10.1 l 0,0 z"}],i["AC.IC.HAZARDOUS WHEN WET"]=[{type:"path",stroke:!1,d:"m 60.6,100.5 78.8,-0 -39.4,39.4 L 60.6,100.5 z M 127.6,87.8 c 0.6,0.4 6.1,5.9 6.1,6.2 v 5.8 H 127.6 V 87.8 z M 115.3,75.5 c 0.6,0.4 6.1,5.9 6.1,6.2 v 18.1 h -6.1 V 75.5 z M 90.8,69.5 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 90.8 V 69.5 z M 78.6,81.7 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 78.6 V 81.7 z m -6.3,6 0,12.1 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 30.8,-24.5 6.2,6.1 c -0.2,0.4 -0.1,-0.2 -0.1,0.4 v 30 h -6.1 V 63.3 z M 56.7,100 100,143.3 143.3,100 100,56.7 56.7,100 z m 41.2,25.3 c 0.2,1 0.6,1.6 1.6,1.8 l -0.8,0.6 c -1.3,-0.6 -1.3,-0.1 -1.7,-1.9 l 0.9,-0.4 z m -2.4,-1 c 0,2.9 1.3,4.9 4.2,4.9 h 0.9 c 1.9,0 3,-1 3.6,-2.3 0.9,-1.8 0.6,-3.1 -0.2,-4.6 -0.8,-1.4 -1.6,-2.3 -2.2,-3.8 -0.5,-1.2 -0.8,-3.8 -1.7,-4.4 C 99.6,118.1 95.5,122.5 95.5,124.2 z m -12.6,-9.4 c 0.4,0.9 0.4,1.4 1.5,1.7 l -0.6,0.6 C 82.2,116.7 82.6,116.5 82,115.3 l 0.9,-0.5 z m 1.6,3.8 H 86 c 2.3,0 3.7,-2.2 3.7,-4.6 0,-1.2 -1.9,-3.9 -2.6,-4.9 -0.9,-1.4 -1.2,-4.7 -2.2,-5.4 -0.2,3 -2.3,5.9 -3.6,8 -1.9,2.9 -0.4,6.9 3.1,6.9 z m 28.4,-3.8 c 0.2,1.6 0.9,1.1 1.5,2 l -0.8,0.3 c -1,-0.2 -1.7,-0.8 -1.8,-1.9 L 112.9,114.8 z m 2,-11.1 c -0.3,3.6 -2.2,5.6 -3.6,8.1 -1.7,3.1 -0.3,6.8 3.2,6.8 h 1.3 c 2.2,0 3.7,-1.7 3.7,-3.9 v -0.9 c 0,-1.4 -1.9,-3.8 -2.6,-4.9 -0.9,-1.4 -0.7,-4.4 -2,-5.2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 112.9,114.8 c 0.2,1.6 0.9,1.1 1.5,2 l -0.8,0.3 c -1,-0.2 -1.7,-0.8 -1.8,-1.9 L 112.9,114.8 z m -30,0 c 0.4,0.9 0.4,1.4 1.5,1.7 l -0.6,0.6 C 82.2,116.7 82.6,116.5 82,115.3 l 0.9,-0.5 z m 15,10.4 c 0.2,1 0.6,1.6 1.6,1.8 l -0.8,0.6 c -1.3,-0.6 -1.3,-0.1 -1.7,-1.9 l 0.9,-0.4 z m 5.2,-62 6.2,6.1 c -0.2,0.4 -0.1,-0.2 -0.1,0.4 v 30 h -6.1 V 63.3 z m -30.8,24.5 0,12.1 H 66.4 V 94.2 c 0,-0.3 -0,-0.3 -0.1,-0.4 l 6,-6 z m 6.3,-6 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 78.6 V 81.7 z m 12.2,-12.2 c 0,-0.4 5.5,-5.8 6.1,-6.2 V 99.8 H 90.8 V 69.5 z m 24.5,6 c 0.6,0.4 6.1,5.9 6.1,6.2 v 18.1 h -6.1 V 75.5 z m 12.4,12.3 c 0.6,0.4 6.1,5.9 6.1,6.2 v 5.8 H 127.6 V 87.8 z m 11.7,12.6 -78.8,0 39.4,39.4 L 139.4,100.4 z M 85,103.7 c 1,0.7 1.3,4 2.2,5.4 0.6,1 2.6,3.6 2.6,4.9 0,2.4 -1.4,4.6 -3.7,4.6 l -1.5,0 c -3.5,0 -5,-4 -3.1,-6.9 1.3,-2.1 3.4,-5 3.6,-8 z m 29.8,0 c 1.3,0.9 1.2,3.8 2,5.2 0.7,1.1 2.6,3.5 2.6,4.9 l 0,0.9 c 0,2.2 -1.6,3.9 -3.7,3.9 l -1.3,0 c -3.5,0 -4.9,-3.7 -3.2,-6.8 1.4,-2.5 3.4,-4.5 3.7,-8.1 z M 100,114.1 c 0.8,0.6 1.2,3.1 1.7,4.3 0.6,1.5 1.5,2.4 2.2,3.8 0.8,1.5 1.2,2.7 0.3,4.6 -0.6,1.3 -1.7,2.3 -3.6,2.3 l -0.9,0 c -2.8,0 -4.2,-2 -4.2,-4.9 0,-1.7 4.1,-6.1 4.5,-10.1 z"}],i["AC.IC.EXPLOSIVE MATERIAL"]=[{type:"path",stroke:!1,d:"m 96.5,104.6 0,0.2 -0.2,0 0,4 0,0.2 0.2,0 3.2,0 0.2,0 0,-0.2 0,-4 0,-0.2 -0.2,0 -3.2,0 z m 2.3,-20 c -1.1,2.4e-5 -2.2,0.1 -3.2,0.5 -1,0.3 -2,0.8 -3,1.4 l -0.1,0.1 0,0.1 0,3 0,0.4 0.3,-0.2 c 1,-0.7 2,-1.2 2.9,-1.6 0.9,-0.4 1.8,-0.5 2.6,-0.5 1.1,2.1e-5 2,0.3 2.6,0.8 0.7,0.5 1,1.2 1,2.1 -10e-6,0.5 -0.1,1 -0.4,1.4 -0.2,0.5 -0.7,1 -1.3,1.5 l -0,0 -1.4,1.4 c -1,0.9 -1.6,1.7 -1.9,2.5 -0.3,0.7 -0.5,1.6 -0.5,2.7 l 0,2.4 0,0.2 0.2,0 3,0 0,-0.2 0.2,0 0,-1.9 c -8e-6,-0.5 0,-1 0,-1.3 0,-0.3 0.1,-0.6 0.1,-0.8 0.1,-0.2 0.2,-0.5 0.4,-0.8 0.2,-0.3 0.5,-0.7 1,-1.1 l 1.4,-1.4 c 1,-0.9 1.6,-1.7 2,-2.5 0.4,-0.8 0.6,-1.6 0.6,-2.4 -2e-5,-1.7 -0.6,-3.1 -1.8,-4.2 -1.2,-1.1 -2.8,-1.6 -4.8,-1.6 z m 4.8,-31.1 -1.5,4.5 -4.3,12.9 -4.5,-7 -1.6,-2.5 -0.3,2.9 -1.3,14.4 -9.5,-10.7 -2.8,-3.2 1.1,4.1 3.4,12.9 -13.1,-0.7 -0.7,-0 -0.3,0.6 -0.1,0.2 -0.4,0.8 0.7,0.5 11.3,8.1 -20.1,1.4 -5.6,0.4 5.4,1.6 18,5.3 -12.3,7.1 -0.8,0.4 0.3,0.8 0.1,0.2 0.3,0.7 0.8,-0.1 16.1,-2 -4.8,8.3 -1.5,2.6 2.7,-1.1 8.8,-3.7 -3.4,14.5 -1.1,4.5 2.8,-3.7 8.9,-11.6 5,19.2 0.2,0.8 0.8,0 0.4,0 0.9,0 0.1,-1 0.9,-18.7 9.2,11.2 2.6,3.2 -0.9,-4 -3.3,-15.2 10.6,5.9 4.7,2.6 -3.4,-4.1 -5.5,-6.6 15.6,4.4 4,1.2 -3.1,-2.9 -10.7,-9.9 13.7,-2.1 4.6,-0.7 -4.5,-1.2 -15.5,-4.3 18.9,-9.6 4.7,-2.4 -5.2,0.5 -17.1,1.6 6.7,-10.8 2,-3.2 -3.3,1.8 -14.6,7.9 5.2,-16.5 1.7,-5.5 -3.5,4.5 -10.6,14 -1.7,-18.8 -0.4,-4.8 z m -1.1,9.7 1.5,16.6 0.2,2.6 1.6,-2 8.7,-11.5 -4.2,13.4 -0.8,2.4 2.2,-1.2 13.4,-7.3 -5.8,9.3 -1.1,1.7 2,-0.2 13.9,-1.3 -16.5,8.4 -2.3,1.2 2.5,0.7 13.5,3.7 -11.2,1.7 -2,0.3 1.5,1.4 9.1,8.4 -14.6,-4.2 -3.1,-0.9 2.1,2.5 4.2,5 -7.8,-4.3 -1.9,-1.1 0.5,2.2 2.9,13.3 -8.2,-10 -1.6,-2 -0.1,2.6 -0.8,16.1 -4.2,-16.3 -0.5,-2 -1.2,1.6 -7.3,9.5 2.8,-11.9 0.4,-1.9 -1.8,0.7 -7.9,3.3 4.3,-7.4 1,-1.7 -2,0.2 -13.9,1.7 10.3,-6 0.5,-0.3 0,-0.6 0,-0.3 0,-0.8 -0.7,-0.2 -14.5,-4.2 17.3,-1.2 2.8,-0.2 -2.3,-1.6 -11,-8 11.5,0.6 1.4,0.1 -0.3,-1.3 -2.7,-10.1 8.2,9.3 1.5,1.8 0.2,-2.3 1.3,-13.8 4,6.3 1.1,1.8 0.7,-2 3.4,-10.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 102.5 63.2 L 99 73.5 L 98.4 75.5 L 97.3 73.7 L 93.2 67.4 L 91.9 81.3 L 91.7 83.6 L 90.2 81.8 L 82 72.5 L 84.7 82.7 L 85.1 84 L 83.7 83.9 L 72.2 83.4 L 83.2 91.3 L 85.5 93 L 82.7 93.2 L 65.4 94.3 L 79.9 98.5 L 80.7 98.8 L 80.7 99.5 L 80.7 99.8 L 80.7 100.3 L 80.2 100.7 L 69.8 106.6 L 83.8 104.9 L 85.8 104.7 L 84.8 106.4 L 80.4 113.8 L 88.3 110.6 L 90.1 109.8 L 89.7 111.7 L 86.9 123.6 L 94.2 114.1 L 95.5 112.5 L 96 114.4 L 100.2 130.8 L 101 114.6 L 101.2 112 L 102.8 114 L 111 124 L 108.1 110.7 L 107.6 108.5 L 109.6 109.6 L 117.3 113.9 L 113.2 108.9 L 111.1 106.4 L 114.3 107.3 L 128.9 111.5 L 119.7 103.1 L 118.2 101.7 L 120.3 101.3 L 131.4 99.6 L 117.9 95.9 L 115.4 95.2 L 117.8 94 L 134.3 85.6 L 120.3 86.9 L 118.3 87.1 L 119.4 85.4 L 125.2 76.1 L 111.8 83.3 L 109.6 84.5 L 110.3 82.2 L 114.5 68.8 L 105.8 80.3 L 104.3 82.3 L 104 79.8 L 102.5 63.2 z M 98.8 84.5 C 100.8 84.5 102.4 85.1 103.6 86.1 C 104.8 87.2 105.5 88.6 105.5 90.3 C 105.5 91.2 105.3 92 104.9 92.7 C 104.5 93.5 103.8 94.3 102.8 95.2 L 101.5 96.6 C 101 97.1 100.6 97.4 100.4 97.7 C 100.2 98 100.1 98.2 100 98.5 C 100 98.7 99.9 98.9 99.9 99.2 C 99.8 99.5 99.8 100 99.8 100.5 L 99.8 102.4 L 99.7 102.4 L 99.7 102.7 L 96.6 102.7 L 96.4 102.7 L 96.4 102.4 L 96.4 100 C 96.4 98.9 96.6 98 96.9 97.3 C 97.2 96.6 97.9 95.8 98.8 94.8 L 100.2 93.4 C 100.8 92.9 101.2 92.4 101.5 91.9 C 101.7 91.4 101.9 91 101.9 90.5 C 101.9 89.6 101.5 88.9 100.9 88.3 C 100.2 87.8 99.4 87.5 98.3 87.5 C 97.5 87.5 96.6 87.7 95.7 88.1 C 94.8 88.5 93.8 89 92.8 89.7 L 92.5 89.9 L 92.5 89.5 L 92.5 86.5 L 92.5 86.4 L 92.6 86.3 C 93.6 85.7 94.6 85.3 95.6 85 C 96.7 84.7 97.7 84.5 98.8 84.5 z M 96.5 104.6 L 99.8 104.6 L 99.9 104.6 L 99.9 104.8 L 99.9 108.8 L 99.9 109 L 99.8 109 L 96.5 109 L 96.3 109 L 96.3 108.8 L 96.3 104.8 L 96.5 104.8 L 96.5 104.6 z"}],i["AC.IC.FLAMMABLE GAS"]=[{type:"path",stroke:!1,d:"m 93.3,82.5 c 0,-4.3 13.8,-4.3 13.8,0 v 55.6 c 0,1.3 -4.4,1.2 -5.9,1.2 h -2 c -1.5,0 -5.9,0.1 -5.9,-1.2 V 82.5 l 4e-4,0 z m 5.3,-20.6 h -6.5 v 2.9 h 6.3 v 3.2 h -3.7 v 2 h 3.7 v 5.3 h -4.6 v 4.5 c -1.1,0.3 -2,1.6 -2,3 v 54.8 c 0,3.3 3.7,3.2 7.1,3.2 h 2.4 c 3.4,0 7.1,0.2 7.1,-3.2 V 83.1 c 0,-2.8 -1.8,-2.8 -1.8,-3.7 v -4.1 h -4.7 v -10.4 h 6.3 v -3 h -6.7 v -2.5 h -2.9 v 2.5 l 0,0 z m 21.8,32.3 v 0.6 c 0,2.2 2.3,5.1 1.6,8.1 -1.3,-0.3 -3.1,-2 -3.8,-3 -0.3,-0.4 -0.9,-1.7 -1.2,-2.2 -0.4,-0.9 -0.4,-2.3 -0.7,-2.8 -1.1,0.8 -1.6,3.5 -1.6,5.5 v 0.2 c 0,3.2 2.4,7.5 3.8,9.6 2,3 6.3,3.3 8.4,5.1 1.6,-0.9 6.9,-3.7 7.7,-4.9 0.9,-1.2 3.2,-7.4 3,-9.6 l -0.7,-5.9 h -0.4 c -0,3.2 -2.7,7.6 -5.5,7.9 v -2 c 0,-1.7 1.4,-4 1.4,-6.1 v -0.2 c 0,-0.9 -2.4,-4.4 -3.2,-4.7 0,3.4 -0.3,5.5 -2.5,6.7 -0.8,-0.7 -1.8,-1.6 -1.8,-3.1 v -1.2 c 0,-2.1 2,-4.1 2,-6.1 0,-0.9 -0.1,-1.6 -0.6,-2 -0.9,3.8 -5.9,8.9 -5.9,10.2 z m -52.7,0 v 0.4 c 0,1.2 1.8,4.3 1.8,6.1 v 2.2 c -2.4,-0.2 -5.7,-5 -5.7,-8.1 -1.7,1.1 -1.5,4.3 -1.4,6.7 0.1,2.4 1.3,4.7 2.2,6.3 1.3,2.6 1.6,2.9 4,4.5 0.6,0.4 5.3,2.8 5.9,2.8 1.2,0 6.8,-3.9 7.5,-4.7 0.9,-1 3.3,-7.3 3.1,-9.1 l -0.6,-6.5 h -0.4 c -0.5,2.3 -0.3,3.3 -1.6,5 -0.6,0.8 -2.7,2.7 -3.8,2.8 0,-0.9 -0.2,-0.7 -0.2,-1.4 0,-1.8 1.4,-4.3 1.7,-6.6 0.1,-1 -2.6,-4.6 -3.3,-5 0.4,2 -0.8,6.5 -2.4,6.5 h -0.2 c -0.9,0 -1.8,-2.2 -1.8,-3.4 0,-3.9 2.6,-4.5 1.6,-8.8 -0,0 -2.2,4.5 -2.9,5.4 -0.6,0.6 -3.5,4.3 -3.5,4.9 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 93.3,82.5 c 0,-4.3 13.8,-4.3 13.8,0 v 55.6 c 0,1.3 -4.4,1.2 -5.9,1.2 h -2 c -1.5,0 -5.9,0.1 -5.9,-1.2 V 82.5 l 4e-4,0 z"}],i["AC.IC.FLAMMABLE LIQUID"]=[{type:"path",stroke:!1,d:"m 100.1,135.4 c -7.4,0 -11.3,-5.4 -13.1,-11.1 -2.1,-6.7 -2.4,-14.4 0.8,-20.2 5.9,-10.6 10.7,-21.6 11.9,-36.7 4,4.6 3.6,17.4 6.3,23.9 2.6,6.5 8.9,13.4 8.9,21 v 1.7 c 0,10 -4.5,21.3 -14.2,21.3 h -0.7 v 0 z m -0.6,1.7 h 1.9 c 10.1,0 15.4,-11.7 15.4,-21.9 v -3 c 0,-9.5 -7.7,-15.8 -9.9,-24.1 -2.4,-8.9 -1.7,-21.2 -9.1,-25.1 0,8.6 -1.3,16 -3.6,22.4 -1.2,3.3 -2.4,6.2 -3.6,9.5 -1.2,2.7 -3.1,5.8 -4.5,8.6 -1.4,2.7 -3,6.1 -2.6,10.5 0.4,4.4 0.6,7.6 1.8,11.3 2,5.9 6.7,11.9 14.3,11.9 z M 122,87 v 0.2 c 0,2.3 2.4,5.5 1.7,8.6 -1.3,-0.1 -3.5,-2.2 -4.1,-3.2 -0.5,-0.9 -0.9,-1.3 -1.2,-2.4 -0.3,-0.7 -0.6,-2.6 -0.8,-3 -1.2,0.9 -1.7,4 -1.7,6.1 0,3.2 2.6,8.4 4,10.4 1,1.3 2.5,2.3 4.1,3.1 0.6,0.3 4.8,2.4 5,2.4 0.9,0 7.6,-4.4 8.2,-5.1 0.9,-1.1 3.5,-8 3.3,-10.1 l -0.7,-6.8 h -0.4 c -0.1,3.5 -2.8,8.2 -5.9,8.4 0,0 0.3,-3.5 0.5,-4.4 0.3,-1.3 1,-2.9 1,-4.3 V 86.8 c 0,-1 -2.7,-4.6 -3.4,-5.1 0,3.7 -0.2,6 -2.7,7.2 -0.7,-0.6 -1.9,-1.7 -1.9,-3 v -1.4 c 0,-2.3 2.1,-4.7 2.1,-6.5 l 0,-0.2 -0.3,-1.9 c -1,0.2 -1.1,2 -1.5,2.9 -0.5,0.9 -1.2,1.9 -1.8,2.6 -0.9,1.2 -3.5,4.1 -3.5,5.7 z m -56.6,0 c 0,1.3 1.9,4.7 1.9,7 v 1.9 c -2.6,-0.2 -6.1,-5.2 -6.1,-8.6 -3.4,2.4 -0.7,11.4 0.9,14.1 1.5,2.6 1.8,3 4.4,4.7 0.4,0.3 6.1,3.1 6.2,3.1 1.3,0 4.1,-2.5 5.3,-3.2 2.5,-1.2 2.9,-1.7 4.2,-4.3 0.4,-0.9 1.6,-5.4 1.9,-6.6 0.4,-2.1 -0.5,-5.8 -0.5,-7.9 h -0.5 c -0.3,3.5 -2.9,8.4 -5.9,8.4 -0,-0.9 -0.2,-0.5 -0.2,-1.2 0,-2 1.5,-4.9 1.8,-7.1 0.2,-1.2 -2.7,-5.2 -3.5,-5.4 1,2.1 -1.1,6.1 -2.7,7 -0.9,-0.6 -1.9,-2.2 -1.9,-3.6 v -0.4 c 0,-3.7 2.7,-4.6 1.7,-9.1 -0.5,0.4 -0.8,2 -1.4,3 -0.7,1 -1,1.7 -1.8,2.7 -0.8,1 -3.6,4.2 -3.6,5.5 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 100.1,135.4 c -7.4,0 -11.3,-5.4 -13.1,-11.1 -2.1,-6.7 -2.4,-14.4 0.8,-20.2 5.9,-10.6 10.7,-21.6 11.9,-36.7 4,4.6 3.6,17.4 6.3,23.9 2.6,6.5 8.9,13.4 8.9,21 v 1.7 c 0,10 -4.5,21.3 -14.2,21.3 h -0.7 v 0 z"}],i["AC.IC.FLAMMABLE SOLID"]=[{type:"path",stroke:!1,d:"m 68.6,102 c 0,-2 1.9,-4.2 1.9,-6.3 v -1.5 c 0,-0.6 -0.1,-0.4 -0.4,-0.7 -0.8,3.7 -6.1,9.1 -6.1,10.4 0,1.6 1.9,4.6 1.9,8.2 -2.6,-0.2 -5.9,-4.9 -5.9,-8 -0.8,0.9 -1.5,2.6 -1.5,4.3 0,4.4 1.7,8.1 3.5,10.6 0.8,1.2 7,5.2 8.7,5.2 1.1,0 6.7,-3.7 7.3,-4.4 0.9,-1.2 3.2,-6.8 3.2,-8.6 0,-1.6 -0,-6.6 -0.9,-7.2 -1.1,4.8 -1.5,5.9 -5.4,8.1 0,-4.3 1.3,-5.7 1.3,-8.2 v -0.4 c 0,-0.1 -2.8,-4.4 -3,-4.6 0,2.4 -0.7,6.7 -2.6,6.7 -1,8e-4 -2,-2.4 -2,-3.7 z m 60.3,-0.4 c 0,-1.7 2.2,-4.5 2.2,-6.3 0,-0.7 -0.2,-1.6 -0.7,-1.9 -0.9,3.7 -5.9,8.9 -5.9,10.2 v 0.4 c 0,1.9 1.5,3.7 1.5,6.1 v 2.2 c -2.3,-0.6 -5.6,-4.9 -5.7,-8 -1,0.7 -1.5,3 -1.5,4.8 v 1.1 c 0,2.8 2.5,7.7 3.8,9.5 2,2.7 6.4,3.1 8.4,4.8 2.1,-1.1 3.1,-1.8 5.1,-2.9 2.6,-1.6 2.2,-1.5 3.5,-4.3 0.7,-1.4 1.7,-4.5 1.8,-6.2 0.1,-1.5 -0.1,-6.4 -0.9,-7 -0.8,3.5 -2.1,7.1 -5.4,8 -0,-0.7 -0.2,-0.7 -0.2,-1.5 v -0.2 c 0,-1.8 1.7,-4.9 1.5,-6.4 -0.1,-0.8 -2.5,-4.8 -3,-5.1 0,2.8 -0.5,6.7 -3,6.7 -0.4,-1.3 -1.5,-1 -1.5,-3.9 z m -35.6,1.9 v -20 l 20,-0.4 v 19.4 l -20,1 z m -13.9,-7.6 0,-16.8 10.8,4 v 19.8 c -1.2,-0.7 -10.9,-6.2 -10.9,-7 z m 1.5,-18.4 c 5.7,0 11.4,0 17.2,0 2.1,0 12.1,3.1 13.2,3.9 l -3.7,0.3 H 92.6 c -0.9,0 -11.1,-3.7 -11.7,-4.1 z m -3.5,-1.5 0,14.7 -0.3,6.7 c 2.2,1.2 5.3,3 7.5,4.5 1.9,1.2 5.5,4 8.1,4 7.6,0 15.3,-1.1 23.1,-1.1 l -0,-23.6 c -1,-0.5 -14.8,-5.4 -15.2,-5.4 l -3.9,-0.1 -19.3,0.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 80.9,77.5 c 5.7,0 11.4,0 17.2,0 2.1,0 12.1,3.1 13.2,3.9 l -3.7,0.3 H 92.6 c -0.9,0 -11.1,-3.7 -11.7,-4.1 z m -1.5,18.4 0,-16.8 10.8,4 v 19.8 c -1.2,-0.7 -10.9,-6.2 -10.9,-7 z m 13.9,7.6 v -20 l 20,-0.4 v 19.4 l -20,1 z"}],i["AC.IC.NON-FLAMMABLE GAS"]=[{type:"path",stroke:!1,d:"m 92.7,81.3 c 0,-4.6 14.7,-4.6 14.7,0 v 59.4 c 0,1.4 -4.7,1.3 -6.3,1.3 h -2.1 c -1.6,0 -6.3,0.1 -6.3,-1.3 V 81.3 z m 5.7,-22 h -7 v 3.2 h 6.7 v 3.3 h -4 v 2.1 h 4 v 5.7 h -4.8 v 4.8 c -1.1,0.3 -2.1,1.7 -2.1,3.1 v 58.6 c 0,3.5 4,3.3 7.6,3.3 h 2.5 c 3.6,0 7.6,0.2 7.6,-3.3 V 81.9 c 0,-3 -1.9,-3 -1.9,-4 v -4.4 h -5 v -11.1 h 6.7 v -3.1 h -7.2 v -2.7 h -3.1 v 2.7 l -4e-4,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 92.7,81.3 c 0,-4.6 14.7,-4.6 14.7,0 v 59.4 c 0,1.4 -4.7,1.3 -6.3,1.3 h -2.1 c -1.6,0 -6.3,0.1 -6.3,-1.3 V 81.3 z"}],i["AC.IC.ORGANIC PEROXIDE"]=[{type:"path",stroke:!1,d:"m 132.1,128.2 v 6.2 l -36.6,2.2 v -6.7 l 0.6,0.1 36,-1.7 z m -63.8,-11.1 c 2.6,1.7 26.1,12.1 26.1,13.2 v 5.9 l -0.1,0.2 -26,-14.7 v -4.6 z m 61.1,10 c -4.7,0 -33,2.1 -34.6,1.5 -1.8,-0.7 -23.8,-11.4 -24.4,-12 3.8,0 7.5,0 11.3,0 2.9,0 8.8,-0.8 10,1.1 l -9,0.6 2.1,0.7 v 0.4 h -1.2 l -1.8,0.2 c 2,1.3 18.3,5.2 22.4,5.2 h 1.9 c 4.8,0 9.2,-1.3 13,-1.4 0.7,0 9.9,3.3 10.4,3.7 z m -25.4,-23.2 1.1,9.4 5.4,-6.8 -2.5,8.2 7.7,-4.3 -3.7,5.9 8.4,-0.8 -9.2,4.7 8.1,2.6 -14.4,1.7 c -3.3,0.2 -19,-3.7 -20.5,-4.8 l 10.3,-0.6 -6.2,-4.5 6.8,0.1 -1.7,-5.9 5.1,5.2 0.7,-7.5 2.6,3.9 2.1,-6.6 z m 0.7,-2.2 -0.1,-0.6 h -0.3 l -1.8,6.2 -0.4,-0 -2.4,-3.7 -0,2.1 -0.7,-1.1 -0.6,6.2 -4.9,-5.4 0.6,2.6 -1.5,-1.2 1.8,6.2 -2.5,0 -4,-0.2 1.5,1.1 -2.4,-0.1 1.5,1.4 h -21.3 c -0.1,0.5 -0.2,0.5 -0.2,1.1 v 5 c 0,1.6 4.8,3.7 6.2,4.4 2.3,1.3 4.6,2.4 6.9,3.8 4.4,2.7 9.2,5 13.7,7.6 1.8,1.1 6.8,0.5 9.6,0.2 2.8,-0.3 7.2,-0.2 9.9,-0.7 2.8,-0.5 7,-0.4 9.9,-0.7 2.7,-0.4 7.4,-0.6 10,-0.7 v -7.9 c 0,-0.9 -5.3,-2.4 -6.4,-2.8 -1.6,-0.5 -5.7,-1.9 -6.8,-2.6 l 2.9,-0.3 -8.4,-2.2 0,-0.4 9.2,-4.7 -1.5,0.2 1.7,-1.1 -10,1 3.9,-6.6 -8.1,4.7 2.9,-10 -6.4,8.4 -1.1,-11.1 -0.6,1.9 z m 1.1,-6.2 c -5.6,0 -9.6,-3.4 -9.6,-9 v -1.1 c 0,-4.8 9,-12.5 9,-21.1 2.8,3.2 2.2,7.6 4.3,11 1.2,1.9 5.3,7.8 5.3,9.9 v 1.1 c 0,5.3 -3.7,9.2 -9,9.2 z m -10.9,-10 v 1.1 c 0,13.7 21.1,13.2 21.1,0.8 v -2.1 c 0,-3.5 -4.5,-8.3 -5.9,-11.7 -2.2,-5.1 -1.1,-8.8 -6.2,-11.6 0,11.2 -9,17.6 -9,23.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 105.7,95.5 c -5.6,0 -9.6,-3.4 -9.6,-9 v -1.1 c 0,-4.8 9,-12.5 9,-21.1 2.8,3.2 2.2,7.6 4.3,11 1.2,1.9 5.3,7.8 5.3,9.9 v 1.1 c 0,5.3 -3.7,9.2 -9,9.2 z m -1.8,8.4 1.1,9.4 5.4,-6.8 -2.5,8.2 7.7,-4.3 -3.7,5.9 8.4,-0.8 -9.2,4.7 8.1,2.6 -14.4,1.7 c -3.3,0.2 -19,-3.7 -20.5,-4.8 l 10.3,-0.6 -6.2,-4.5 6.8,0.1 -1.7,-5.9 5.1,5.2 0.7,-7.5 2.6,3.9 2.1,-6.6 z m -35.6,13.2 c 2.6,1.7 26.1,12.1 26.1,13.2 v 5.9 l -0.1,0.2 -26,-14.7 v -4.6 z m 63.8,11.1 v 6.2 l -36.6,2.2 v -6.7 l 0.6,0.1 36,-1.7 z m -2.7,-1.1 c -4.7,0 -33,2.1 -34.6,1.5 -1.8,-0.7 -23.8,-11.4 -24.4,-12 3.8,0 7.5,0 11.3,0 2.9,0 8.8,-0.8 10,1.1 l -9,0.6 2.1,0.7 v 0.4 h -1.2 l -1.8,0.2 c 2,1.3 18.3,5.2 22.4,5.2 h 1.9 c 4.8,0 9.2,-1.3 13,-1.4 0.7,0 9.9,3.3 10.4,3.7 z"}],i["AC.IC.OXIDIZER"]=[{type:"path",stroke:!1,d:"m 80.9,135.3 0,0.2 0,4.2 0,0.2 0.2,0 40.7,0 0.2,0 0,-0.2 0,-4.2 0,-0.2 -0.2,0 -40.7,0 -0.2,0 z m 6.5,-20.7 c 0,-7.4 6.1,-14 13.4,-14 h 1.1 c 7.5,0 13.6,6.6 13.6,14 0,7.1 -6.2,13.9 -13.2,13.9 h -1.9 c -6.8,-0 -13,-6.8 -13,-13.9 z m 12.8,-35.9 c -0.7,0 -2.1,-2.1 -2.3,-2.9 -0.3,-1.2 -0.4,-3 0,-4.4 0.5,-2.1 2.8,-5.9 2.8,-7.5 0,-1.1 -0.1,-3 -1.3,-3.1 -1,4.4 -2.1,4.9 -4.1,8 -1,1.5 -4.7,5.8 -4.7,7.3 v 0.4 c 0,2.4 3.1,8.1 2.7,10.5 l -0.2,1.7 c -3.5,-0.8 -8.1,-7.3 -8.1,-12 -1.4,0.1 -2.5,4.4 -2.5,6.1 v 2.9 c 0,5.7 3.3,8.3 4.2,12 -2.7,-1.4 -4,-2.2 -5.9,-4.4 -1.1,-1.2 -3.7,-5.6 -4.1,-5.9 -1.1,2.4 1.7,10.3 2.4,12.1 0.7,1.7 1.4,3.5 2.3,5 1.1,1.8 2.2,2.6 3.2,4.1 0,1.7 -0.5,2.4 -0.6,4.7 -0,1.8 -0,2.6 0.2,4.6 0.2,2.1 2.1,6.1 3.2,7.3 2.4,2.6 2.4,2.8 5.6,4.8 2,1.3 4.9,2.2 8.1,2.2 h 0.6 c 6.4,0 11.4,-3.5 14.2,-7.2 3.8,-5.2 3.8,-9.9 2.2,-16.7 3.5,-6.6 5.9,-9.3 5.9,-19.7 v -0.4 l -0.4,-4 c -0.1,0 -3.3,6.2 -3.8,7 -1,1.5 -3.7,4.8 -5.7,5 0.1,-3.2 2.1,-6.2 2.1,-9.4 v -2.2 l -1.1,-8 c -1,0.7 -1.5,5.9 -3,7.7 -0.4,0.5 -5.6,5.5 -5.6,3.6 v -1.7 c 0,-3.1 2.1,-6.3 2.1,-9 v -1.3 c 0,-0.8 -3.9,-6.5 -4.6,-6.9 0,2.3 -0.2,4.4 -0.7,6.2 -0.3,1.1 -2,3.7 -3,3.7 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 87.4,114.5 c 0,-7.4 6.1,-14 13.4,-14 h 1.1 c 7.5,0 13.6,6.6 13.6,14 0,7.1 -6.2,13.9 -13.2,13.9 h -1.9 c -6.8,-0 -13,-6.8 -13,-13.9 z"}],i["AC.IC.RADIOACTIVE MATERIAL"]=[{type:"path",stroke:!1,d:"m 83.7,130.4 c -10.1,-5.6 -16.6,-17 -16.4,-28.5 l 17.8,-0 c -0.2,5 3.1,10.7 7.5,13.1 l -9,15.4 z m 49.1,-28.2 c 0.2,11.5 -6.4,22.9 -16.4,28.5 l -9,-15.4 c 4.4,-2.4 7.7,-8.1 7.6,-13.1 l 17.8,0 z M 83.5,73.8 c 9.9,-5.9 23,-5.9 32.9,0 l -8.9,15.5 c -4.3,-2.6 -10.9,-2.6 -15.1,0 l -8.9,-15.5 z m 26.5,28.5 c 0,5.5 -4.4,9.9 -9.9,9.9 -5.5,0 -9.9,-4.4 -9.9,-9.9 0,-5.5 4.4,-9.9 9.9,-9.9 5.5,0 9.9,4.4 9.9,9.9 z"}],i["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]=[{type:"path",stroke:!1,d:"m 101.2,128.4 -2.1,0 0,12.6 2.1,0 z m 26.5,0.6 -8.7,-8.6 -1.2,1.2 8.7,8.7 z m -45,-7.5 -1.3,-1.3 -8.8,8.8 1.3,1.4 z m 55.5,-19.7 -12.2,0 0,1.9 12.2,0 z m -63.3,0 -13.1,0 0,1.9 12.8,0 z m 52.8,-25.3 -1.3,-1.2 -9,8.7 1.5,1.5 z m -46.1,9.1 1.4,-1.5 -9.3,-9.2 -0,0.2 -1.2,1.3 z m 19.5,-26.5 -2.1,0 0,9.7 2.1,0 z M 91.7,88 v 0.6 c 0,0.5 1.4,4.3 1.7,5.1 0.7,2.2 0.7,3.4 0.7,5.7 -1.2,-0.1 -4.4,-3 -5.1,-4 -1.7,-2.5 -1.7,-3.4 -2.5,-6.7 -0.9,0.7 -1.9,3.8 -1.9,5.5 v 2.3 c 0,5.6 3.6,8.4 3.8,11.1 -0.9,-0.2 -4.8,-3.2 -5.4,-3.8 -0.7,-0.8 -3.3,-5.3 -3.8,-5.4 0,3.9 1.1,6.9 2.1,9.7 0.6,1.5 1.2,2.9 1.7,4.2 0.8,2.2 1.4,2 2.6,3.5 2.9,3.6 9.4,8.3 15.7,8.3 h 0.8 c 2.2,0 6.4,-1.7 7.9,-2.6 2.4,-1.3 4.5,-2.7 6,-4.8 2.8,-3.8 5.3,-9.3 5.3,-16 v -2.7 l -0.2,-2.3 h -0.4 c -1.1,4.7 -4.2,8.4 -8,10.5 0,-3.6 1.3,-5.3 1.9,-8.4 0.4,-2.4 -1,-6.9 -1,-9.2 -0.4,0.3 -1.2,5.4 -2.5,7 -0.3,0.4 -5.1,5.2 -5.1,3.1 v -2.1 c 0,-3 1.9,-4.8 1.9,-8.2 0,-0.8 -3.5,-6 -4.1,-6.3 l 0.1,0.9 c 0,1.2 -0.4,4.1 -0.7,5 -0.2,0.5 -2.3,3 -2.6,3 -1.2,0 -2.5,-2.9 -2.5,-4.4 v -1.1 c 0,-2.9 2.8,-6.1 2.6,-8 l -0.5,-2.9 c -0.5,0.4 -1.2,3 -1.6,3.9 -0.6,1.3 -1.4,2.2 -2.2,3.2 C 95.4,82.4 91.7,87.1 91.7,88 z"}],i["AC.IC.UNEXPLODED ORDNANCE"]=a("UXO"),i["AC.IC.TOXIC INFECTIOUS MATERIAL"]=[{type:"path",stroke:!1,d:"m 104.6,116.2 c 0,-3.6 0.9,-4.6 1.5,-7.3 l -2.5,-1.2 c -2.4,2.1 -4.4,1.6 -6.8,0 l -2.5,1.4 c 0.2,2.6 2,3.9 1.5,8.7 -0.4,3.1 -1.1,5.8 -2.6,7.8 -2.9,3.9 -7,7.4 -13.7,7.4 h -1 c -4.7,0 -10.2,-3.2 -12,-6 l -1.2,0.6 c 3.3,4.9 11.4,10 19.8,10 h 0.2 c 6.4,0 10.9,-2.7 14.8,-5.3 3.7,2.5 7.6,5 13.8,5 h 3 c 3.8,0 8.2,-1.6 10.6,-3.2 1.8,-1.2 6.7,-4.5 7.2,-6.6 -1.1,-0.3 -0.5,-0.5 -1.3,-0.5 -0.5,0 -1.7,1.9 -2.2,2.3 -0.8,0.6 -1.8,1.1 -2.6,1.6 -1.4,0.9 -4.7,1.8 -7,1.8 h -1.8 c -7.9,0 -15.3,-7.7 -15.3,-15.8 v -0.8 z m 2.3,3.5 2.5,4.3 c 3.2,-0.8 7.7,-5.2 9.3,-7.8 2.2,-3.7 3.5,-7.8 3.5,-13.8 h -5.5 c 0.1,5.2 -0.1,7.2 -2.5,10.8 -1.2,1.8 -1.7,2.1 -3.2,3.6 -1,1 -3.6,2.2 -4.1,2.9 z m -28.6,-13.8 c 0,7.4 6.8,16.7 12.5,18 l 2.3,-4.5 c -6.5,-3.4 -9.5,-8 -9.5,-17.1 h -5.3 v 3.5 z m -2.5,-17 v 1 c 0,0.5 -5,3.2 -5.8,3.8 -1.6,1.1 -3.5,3.2 -4.7,4.8 -2.8,3.6 -4.8,8.1 -4.8,14.2 0,4.4 1,6 1.8,9.4 l 1.2,-0.6 c -0.1,-1.5 -0.8,-2.3 -0.8,-4 v -2 c 0,-7.8 7.9,-15.6 16,-15.6 h 1.8 c 2.6,0 5.9,1.3 7.5,2.2 2.2,1.3 3.6,3.6 5.3,4.8 l 2.3,-1 v -1.8 c 0,-2 1.6,-3.9 3.3,-4.3 v -3 c -7.6,-0.2 -15.3,-7.8 -15.3,-15.5 v -1.5 c 0,-4.1 2.1,-8.6 4.2,-10.6 1.3,-1.2 2.5,-2.3 4,-3.2 0.8,-0.5 5.1,-1.5 5.1,-2.5 v -1 c -6.6,1.6 -11.7,3.8 -15.4,8.5 -4.3,5.5 -5.7,9 -5.7,17.9 l 0,0 z m 27.6,-25.4 c 0,0.6 4.2,2.1 5,2.5 1.2,0.6 3.5,2.4 4.2,3.5 2.1,2.9 4.3,6 4.3,11 0,8.2 -7.4,16.3 -15.6,16.3 v 3 c 2.3,0.2 4.4,3.4 3.3,5.8 0.6,0.2 2.5,1.2 2.5,1.2 0.7,0 5,-7 14.3,-7 h 0.2 c 4.5,0 9,2.6 11.1,5 1.7,1.9 5.3,7.6 4.8,11.4 l -0.8,5.5 1.2,0.6 c 0.1,-0.9 0.8,-2.3 1.1,-3.6 0.3,-1.2 0.4,-3 0.4,-4.4 v -3.3 c 0,-8.4 -8.3,-18.8 -15,-20.3 0,-5 0.4,-6.4 -0.9,-10.9 -0.9,-2.8 -2.6,-6.4 -4.3,-8.3 -5.1,-5.3 -7.5,-7 -15.9,-9 v 1 l -4e-4,0 z m -15.8,22.6 2.8,4.8 c 3,-1.6 4.8,-3.3 9.5,-3.3 h 0.5 c 5.8,0 6.9,2.6 9.7,3.2 l 2.6,-4.7 c -9.5,-5 -15.7,-5 -25.1,0 z"}],i["AC.IC.TOXIC GAS"]=[{type:"path",stroke:!1,fill:!!R&&G,d:"m 90.2,102.3 c 0.6,-1.9 5.7,-1.9 11.3,-0 5.6,1.9 9.6,4.9 9,6.8 -0.6,1.9 -5.7,1.9 -11.3,0 -5.6,-1.9 -9.6,-4.9 -9,-6.8 z m 7.7,-22.2 c 10e-7,3.7 -1.7,6.7 -3.8,6.7 -2.1,-2e-6 -3.8,-3 -3.8,-6.7 2e-6,-3.7 1.7,-6.7 3.8,-6.7 2.1,0 3.8,3 3.8,6.7 z m 17,2.2 c 0,4.1 -2.8,7.3 -6.3,7.3 -3.5,2e-6 -6.3,-3.3 -6.3,-7.3 0,-4.1 2.8,-7.3 6.3,-7.3 3.5,0 6.3,3.3 6.3,7.3 z m -7.9,49.6 c -1,2.9 -8.5,2.9 -16.6,0 -8.2,-2.9 -13.9,-7.6 -12.9,-10.5 1,-2.9 8.5,-2.9 16.6,-0 8.2,2.9 13.9,7.6 12.9,10.5 z"},{type:"path",stroke:!1,d:"M 107.5 64.3 C 102.2 64.2 96.9 67.1 92.8 71.6 C 90.6 73.6 89.2 76.8 89.2 80.4 C 89.2 83 90 85.4 91.2 87.3 C 92.1 89.9 92.7 91.8 92.7 94.5 L 92.4 96.7 L 90.7 101.6 C 92.3 100.5 96.7 100.7 101.5 102.3 C 106.6 104 110.4 106.7 110.5 108.6 L 112 104.2 C 115.9 104 120.5 96.9 122.7 87.6 C 124.9 77.9 123.5 69.3 119.8 67.9 C 118.4 66.6 116.1 65.5 112.8 65.3 C 111.1 64.6 109.3 64.3 107.5 64.3 z M 94.1 73.4 C 94.4 73.4 94.6 73.4 94.8 73.5 C 95.1 73.6 95.3 73.8 95.6 73.9 C 96.2 74.4 96.8 75.3 97.2 76.3 C 97.5 77.1 97.7 77.9 97.8 78.7 C 97.9 79.2 97.9 79.6 97.9 80.1 C 97.9 80.5 97.9 81 97.8 81.4 C 97.7 82.3 97.5 83.1 97.2 83.8 C 96.9 84.7 96.4 85.4 95.9 85.9 C 95.6 86.2 95.2 86.5 94.8 86.6 C 94.7 86.6 94.6 86.7 94.5 86.7 C 94.3 86.7 94.2 86.7 94.1 86.7 C 93.8 86.7 93.6 86.7 93.3 86.6 C 93 86.5 92.6 86.2 92.3 85.9 C 92.2 85.8 92.1 85.7 92 85.6 C 91.6 85.1 91.2 84.5 91 83.8 C 90.8 83.4 90.7 83.1 90.6 82.7 C 90.4 81.9 90.3 81 90.3 80.1 C 90.3 79.1 90.4 78.3 90.6 77.5 C 90.7 77.1 90.8 76.7 91 76.3 C 91.2 75.6 91.6 75 92 74.5 C 92.2 74.3 92.4 74.1 92.6 73.9 C 92.9 73.8 93.1 73.6 93.3 73.5 C 93.6 73.4 93.8 73.4 94.1 73.4 z M 108.6 75 C 110.4 75 112.1 75.9 113.3 77.3 C 113.3 77.4 113.4 77.5 113.5 77.6 C 113.5 77.6 113.5 77.6 113.5 77.7 C 113.6 77.8 113.7 78 113.8 78.2 C 113.8 78.3 113.9 78.3 113.9 78.4 C 114 78.5 114 78.5 114 78.6 C 114.1 78.7 114.2 78.8 114.2 79 C 114.3 79.1 114.3 79.3 114.4 79.4 C 114.4 79.5 114.5 79.5 114.5 79.6 C 114.5 79.7 114.6 79.9 114.6 80 C 114.6 80.1 114.6 80.2 114.7 80.3 C 114.7 80.4 114.7 80.6 114.8 80.8 C 114.9 81.3 114.9 81.8 114.9 82.3 C 114.9 84.6 114 86.6 112.6 88 C 112 88.6 111.3 89 110.5 89.3 C 110.3 89.4 110.1 89.5 109.9 89.5 C 109.5 89.6 109 89.7 108.6 89.7 C 108.2 89.7 107.7 89.6 107.3 89.5 C 107.3 89.5 107.3 89.5 107.3 89.5 C 107.1 89.5 106.9 89.4 106.7 89.3 C 105.9 89 105.2 88.6 104.6 88 C 104 87.4 103.5 86.6 103.1 85.8 C 102.9 85.4 102.7 85 102.6 84.5 C 102.5 84.3 102.5 84 102.4 83.8 C 102.4 83.5 102.4 83.3 102.3 83.1 C 102.3 82.8 102.3 82.6 102.3 82.3 C 102.3 82 102.3 81.8 102.3 81.5 C 102.3 81.5 102.4 81.5 102.4 81.4 C 102.4 81 102.5 80.5 102.6 80.1 C 102.6 80.1 102.6 80.1 102.6 80 C 103.4 77.1 105.8 75 108.6 75 z M 88.8 104 C 86.6 104 84.8 104.4 83.9 105.2 L 83.8 105.2 L 83.7 105.3 C 83.4 105.6 83.2 105.9 83.1 106.2 C 83 106.5 83 106.8 83 107.2 L 78.1 120.5 C 80.2 118.5 86.9 118.7 94.2 121.3 C 101.2 123.8 106.4 127.7 107.1 130.6 L 111.8 117.8 C 112.2 117.5 112.5 117.2 112.7 116.8 C 113.7 113.8 107.9 109.1 99.8 106.2 C 95.7 104.8 91.8 104 88.8 104 z M 82 120.8 C 79 120.8 76.9 121.5 76.4 123 C 75.4 125.9 81.1 130.7 89.3 133.6 C 97.4 136.5 104.9 136.5 105.9 133.6 C 107 130.6 101.2 125.9 93 123 C 89 121.5 85 120.8 82 120.8 z M 86.1 125.6 C 87.4 125.5 89.4 125.9 91.5 126.6 C 94.8 127.8 97.2 129.6 96.9 130.6 C 96.5 131.6 93.5 131.5 90.1 130.3 C 86.8 129.1 84.4 127.3 84.7 126.3 C 84.9 125.9 85.4 125.7 86.1 125.6 z "}],i["AC.IC.AFTERSHOCK"]=[{type:"path",stroke:!1,d:"m 99,62.5 -0,0 -0,0 -0.9,0 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.1 -0,0 -0,0 -0.9,0.2 -0,0 -0,0 -0.7,0.1 0.6,2.7 0.7,-0.1 0,-0 0.8,-0.1 0,-0 0.8,-0.1 0,0 0.8,-0.1 0,0 0.9,-0.1 0,0 0.9,-0.1 0,0 0.9,-0.1 0,0 0.9,-0 0,0 0.9,-0 0,0 0,0 0.9,0 0,0 0.9,0 0,0 0.1,0 0.2,-2.8 -0.1,-0 -0,0 -0,0 -0.9,-0 -0,0 -0,0 -1,-0 -0,0 -0,0 z m 8.8,3.6 0.2,0 0,0 0.8,0.2 0,0 0.8,0.2 0,0 0.8,0.2 0,0 0.8,0.3 0,0 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.3 0,0 0.8,0.4 0,0 0,0 0.7,0.4 0,0 0.1,0 1.3,-2.5 -0.1,-0.1 -0,-0 -0,0 -0.8,-0.4 -0,-0 -0,0 -0.8,-0.4 -0,0 -0,-0 -0.8,-0.4 -0,-0 -0,0 -0.8,-0.4 -0,0 -0,-0 -0.8,-0.3 -0,-0 -0,0 -0.8,-0.3 -0,-0 -0,0 -0.8,-0.3 -0,0 -0,-0 -0.9,-0.3 -0,0 -0,0 -0.9,-0.3 -0,0 -0,0 -0.9,-0.2 -0,0 -0,-0 -0.9,-0.2 -0,0 -0,0 -0.2,-0.1 z m -22.7,-0.7 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0,0 -0.8,0.5 -0,0 -0,0 -0.8,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.7,0.5 -0,0 -0,0 -0.1,0.1 1.7,2.2 0.1,-0.1 0,-0 0.7,-0.5 0,-0 0.7,-0.5 0,-0 0.7,-0.5 0,-0 0.7,-0.5 0,-0 0.7,-0.4 0,-0 0.7,-0.4 0,-0 0.7,-0.4 0,-0 0.7,-0.4 0,-0 0,0 0.8,-0.4 0,-0 0.8,-0.3 0,-0 0.8,-0.3 0,-0 0.3,-0.1 -1,-2.6 z m 36.9,7.3 0.6,0.5 0,0 0.6,0.5 0,0 0.6,0.5 0,0 0.6,0.5 0,0 0.6,0.6 0,0 0,0 0.6,0.6 0,0 0.6,0.6 0,0 0.5,0.6 0,0 0.5,0.6 0,0 0.5,0.6 0,0 0.5,0.6 0,0 0.4,0.5 2.3,-1.7 -0.4,-0.6 -0,-0 0,-0 -0.6,-0.7 -0,-0 0,-0 -0.6,-0.7 -0,-0 -0,-0 -0.6,-0.7 -0,-0 -0,-0 -0.6,-0.7 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0,0 -0.7,-0.6 -0,-0 -0,0 -0.7,-0.6 -0,-0 -0,-0 -0.7,-0.6 -0,-0 -0,-0 -0.6,-0.5 z m -51,2.7 -0,0 -0,0 -0.6,0.7 -0,0 -0,0 -0.6,0.7 0,0 -0,0 -0.6,0.7 0,0 -0,0 -0.5,0.7 -0,0 -0,0 -0.5,0.7 -0,0 -0,0 -0.5,0.7 -0,0 0,0 -0.5,0.7 -0,0 0,0 -0.5,0.8 0,0 -0,0 -0.4,0.8 -0,0 0,0 -0.4,0.8 0,0 -0,0 -0.3,0.6 2.5,1.3 0.3,-0.6 0,-0 0.4,-0.7 0,-0 0.4,-0.7 0,-0 0.4,-0.7 0,-0 0.4,-0.7 0,-0 0.5,-0.7 0,-0 0.5,-0.7 0,-0 0.5,-0.7 0,-0 0.5,-0.6 0,-0 0.5,-0.6 0,-0 0.5,-0.6 0,-0 0.5,-0.5 -2.1,-1.9 z m 60.9,9.4 0.1,0.1 0,0 0,0 0.3,0.7 0,0 0.3,0.7 0,0 0.3,0.8 0,0 0.3,0.8 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0.2,0.8 0,0 0,0.2 2.8,-0.5 -0,-0.3 -0,-0 0,-0 -0.2,-0.9 0,-0 0,-0 -0.2,-0.9 0,-0 -0,-0 -0.2,-0.9 0,-0 -0,-0 -0.2,-0.9 0,-0 -0,-0 -0.3,-0.8 -0,-0 0,-0 -0.3,-0.8 0,-0 -0,-0 -0.3,-0.8 0,-0 -0,-0 -0.3,-0.8 -0,-0 0,-0 -0.3,-0.8 0,-0 -0,-0 -0.3,-0.8 -0,-0 -0,-0 -0.4,-0.8 -0,-0 0,-0 -0.1,-0.2 z m -68.8,4.9 -0,0 0,0 -0.2,0.9 -0,0 0,0 -0.2,0.9 -0,0 0,0 -0.2,0.9 0,0 0,0 -0.2,0.9 0,0 -0,0 -0.1,0.9 0,0 0,0 -0.1,0.9 -0,0 0,0 -0.1,0.9 0,0 -0,0 -0.1,0.9 0,0 0,0 -0.1,0.9 0,0 0,0 -0,0.9 0,0 0,0 -0,0.9 0,0 0,0 0,0 1.4,-0 0.3,0 1.1,0 0,-0 0,-0.9 0,-0 0,-0.9 -0,0 0.1,-0.8 0,-0 0.1,-0.9 -0,0 0.1,-0.9 0.1,-0.9 -0,0 0.1,-0.8 0,-0 0.2,-0.8 0,-0 0.2,-0.8 0,-0 0.2,-0.8 0,-0 0.2,-0.8 0,-0 0.1,-0.2 -2.7,-0.8 z m 73,10.3 -0.6,0 0,0 0,0 -0,0.9 0,0 -0,0.9 0,0 -0.1,0.8 0,0 -0.1,0.9 0,0 -0.1,0.9 -0.1,0.9 0,0 -0.1,0.8 0,0 -0.2,0.8 -0,0 -0.2,0.8 -0,0 -0.2,0.8 0,0 -0.2,0.8 -0,0 -0.1,0.2 2.7,0.8 0.1,-0.2 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.2,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0.1,-0.9 0,-0 0,-0 0,-0.9 0,-0 0,-0 0,-0.9 -1.4,-0 1.4,-0 0,-0 z m -73.9,6.4 0,0.3 0,0 0,0 0.2,0.9 0,0 0,0 0.2,0.9 0,0 0,0 0.2,0.9 0,0 0,0 0.2,0.9 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.3,0.8 0,0 0,0 0.4,0.8 0,0 0,0 0.1,0.2 2.5,-1.3 -0.1,-0.1 -0,-0 -0.3,-0.7 -0,-0 -0.3,-0.7 -0,-0 -0.3,-0.8 -0,-0 -0.3,-0.8 -0,-0 -0.3,-0.8 -0,-0 0,-0 -0.3,-0.8 -0,-0 -0.2,-0.8 -0,-0 -0.2,-0.8 0,-0 -0.2,-0.8 -0,-0 -0.2,-0.8 -0,-0 -0.2,-0.8 0,-0 -0,-0.2 z m 69.4,9.4 -0,0 -0.4,0.7 -0,0 -0.4,0.7 -0,0 -0.4,0.7 -0,0 -0.4,0.7 -0,0 -0.5,0.7 -0,0 -0.5,0.7 -0,0 -0.5,0.7 -0,0 -0.5,0.6 -0,0 -0.5,0.6 -0,0 -0.5,0.6 -0,0 -0.5,0.6 2.1,1.9 0.5,-0.6 0,-0 0,-0 0.6,-0.7 0,-0 0,-0 0.6,-0.7 0,-0 0,-0 0.6,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.7 0,-0 0,-0 0.5,-0.8 0,-0 0,-0 0.4,-0.8 0,-0 0,-0 0.4,-0.8 0,-0 0,-0 0.3,-0.6 -2.5,-1.3 z m -62.8,6.1 0.4,0.6 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.7 0,0 0,0 0.6,0.6 0,0 0,0 0.6,0.6 0,0 0,0 0.6,0.6 0,0 0,0 0.7,0.6 0,0 0,0 0.7,0.6 0,0 0,0 0.7,0.6 0,0 0,0 0.6,0.5 1.7,-2.2 -0.6,-0.5 -0,-0 -0.6,-0.5 -0,-0 -0.6,-0.5 -0,-0 -0.6,-0.5 -0,-0 -0.6,-0.6 -0,-0 -0,-0 -0.6,-0.6 -0,-0 -0.6,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.5,-0.6 -0,-0 -0.4,-0.5 z m 53.1,5.4 -0,0 -0.7,0.5 -0,0 -0.7,0.5 -0,0 -0.7,0.5 -0,0 -0.7,0.5 -0,0 -0.7,0.4 -0,0 -0.7,0.4 -0,0 -0.7,0.4 -0,0 -0.7,0.4 -0,0 -0,0 -0.8,0.4 -0,0 -0.8,0.3 -0,0 -0.8,0.3 -0,0 -0.3,0.1 1,2.6 0.4,-0.1 0,-0 0,0 0.8,-0.4 0,0 0,-0 0.8,-0.4 0,-0 0,0 0.8,-0.4 0,0 0,-0 0.8,-0.4 0,0 0,-0 0.8,-0.4 0,-0 0,0 0.8,-0.5 0,0 0,-0 0.8,-0.5 0,-0 0,0 0.7,-0.5 0,0 0,-0 0.7,-0.5 0,-0 0,0 0.7,-0.5 0,-0 0,-0 0.7,-0.5 0,-0 0,-0 0.1,-0.1 -1.7,-2.2 z m -40.4,5.6 0.1,0.1 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.4 0,0 0,0 0.8,0.3 0,0 0,0 0.8,0.3 0,0 0,0 0.8,0.3 0,0 0,0 0.9,0.3 0,0 0,0 0.9,0.3 0,0 0,0 0.9,0.2 0,0 0,0 0.9,0.2 0,0 0,0 0.2,0.1 0.6,-2.7 -0.2,-0 -0,-0 -0.8,-0.2 -0,-0 -0.8,-0.2 -0,-0 -0.8,-0.2 -0,-0 -0.8,-0.3 -0,-0 -0,0 -0.8,-0.3 0,-0 -0.8,-0.3 -0,-0 -0.8,-0.3 -0,-0 -0.8,-0.3 -0,-0 -0.8,-0.3 -0,-0 -0.8,-0.4 -0,0 -0,-0 -0.7,-0.4 -0,-0 -0.1,-0 z m 25.6,1.1 -0,0 -0.8,0.1 -0,0 -0.8,0.1 -0,0 -0.8,0.1 0,-0 -0.9,0.1 0,-0 -0.9,0.1 -0,0 -0.9,0.1 -0,0 -0.9,0 -0,0 -0.9,0 -0,0 -0,0 -0.9,-0 -0,0 -0.9,-0 -0,0 -0.1,0 -0.2,2.8 0.1,0 0,0 0,0 0.9,0 0,0 0,0 1,0 0,0 0,0 1,-0 0,0 0,0 0.9,-0 0,0 0,0 0.9,-0.1 0,0 0,0 0.9,-0.1 0,-0 0,0 0.9,-0.1 0,0 0,0 0.9,-0.1 0,-0 0,0 0.9,-0.1 0,0 0,0 0.9,-0.2 0,0 0,0 0.7,-0.1 -0.6,-2.7 z m -7.2,-58.9 -0,1.2 0.1,0 0,0 1.3,0 0,-0 1.3,0.1 1.1,0.1 0.1,0 0,0 1.1,0.2 0.1,0 0.7,0.1 0.7,-3.1 -0.7,-0.2 -0,0 -0,-0 -1.3,-0.2 -0,0 -0,-0 -1.3,-0.2 -0,0 -0,0 -1.3,-0.1 -0,0 -0.1,0 -1.3,-0 -0,0 -0,0 -0,0 z m -5.5,-1.4 -0,0 -0,0 -1.3,0.3 -0,0 -0,0 -1.2,0.3 -0,0 -0,0 -1.2,0.4 -0,0 -0,0 -0.9,0.3 1.1,3 0.8,-0.3 0.1,-0 0,0 1.1,-0.4 0,-0 1.1,-0.3 1.2,-0.3 0.1,-0 1.1,-0.2 -0.6,-3.1 z m 14.8,4.4 0.2,0.1 0.1,0 1.1,0.5 1,0.5 0.1,0 1,0.5 0,0 0,0 0.9,0.6 0.1,0 0.5,0.4 1.8,-2.6 -0.6,-0.4 -0,-0 -0,-0 -1.1,-0.7 -0,-0 -0,-0 -1.1,-0.6 -0,-0 -0,-0 -1.1,-0.6 -0,-0 -0,-0 -1.1,-0.5 -0,-0 -0,-0 -0.3,-0.1 z m -23.6,-1.1 -0,0 -0,0 -1.1,0.7 -0,0 -0,0 -1,0.7 -0,0 -0,0 -1,0.8 -0,0 -0,0 -0.9,0.8 -0,0 -0,0 -0.8,0.7 2.2,2.4 0.7,-0.7 0.1,-0.1 0.8,-0.7 0,-0 0,-0 0.9,-0.7 0.1,-0 0.9,-0.6 0.1,-0 0.9,-0.6 0,-0 0,-0 -0.4,-0.6 -1.2,-2.2 z m 31.5,6.2 0.1,0.1 0,0 0,0 0.8,0.8 0.1,0.1 0.7,0.8 0.1,0.1 0.7,0.8 0,0 0,0.1 0.6,0.9 0,0.1 0,0 0.5,0.7 2.7,-1.8 -0.5,-0.8 -0,-0 -0,-0 -0.7,-1 -0,-0 -0,-0 -0.8,-0.9 -0,-0 -0,-0 -0.8,-0.9 -0,-0 -0,-0 -0.9,-0.9 -0,-0 -0,-0 -0.1,-0.1 z m -40.1,1.8 -0,0 -0,0 -0.7,1 -0,0 -0,0 -0.6,1.1 -0,0 -0,0 -0.6,1.1 -0,0 -0,0 -0.5,1.1 -0,0 -0,0 -0,0.1 2.4,1 0.5,0.3 0,-0 0.5,-1 0,-0.1 0,-0 0.5,-0.9 0,-0.1 0.6,-0.9 0.6,-1 0,-0 0,-0.1 0.6,-0.8 -2.6,-1.9 z m 45.4,5.9 0.4,1.1 0,0.1 0.3,1 0,0.1 0.3,1.1 0.3,1.1 0.2,1 3.1,-0.6 -0.2,-1.1 0,-0 -0,-0 -0.3,-1.2 -0,-0 -0,-0.1 -0.3,-1.2 -0,-0 -0,-0 -0.4,-1.2 -0,-0 -0,-0 -0.5,-1.1 z m -49.6,3.8 -0,0 0,0 -0.2,1.3 0,0 -0,0 -0.2,1.3 -0,0 0,0 -0.1,1.3 0,0 0,0.1 -0,1.3 0,0 0,0 0,0 1.9,-0 1.3,0 0,-0.1 0,-0 0,-1.2 0.1,-1.1 0,0 0.1,-1.2 0,-0.1 0,-0 0.2,-1.1 0.2,-0.9 -3.1,-0.7 z m 52.8,5.5 -1.2,-0 0,0.1 0,0 -0,1.2 -0.1,1.1 -0,0 -0.1,1.2 0,0 -0,0.1 -0.2,1.1 -0.2,0.9 3.1,0.8 0.2,-0.9 0,-0 0,-0 0.2,-1.3 0,-0 0,-0 0.2,-1.3 0,-0 0,-0 0.1,-1.3 0,-0 0,-0.1 0,-1.3 -1.6,-0 1.6,-0 0,-0 z m -53,4.3 0.2,1.1 0,0 0,0 0.3,1.2 0,0 0,0.1 0.3,1.2 0,0 0,0 0.4,1.2 0,0 0,0 0.5,1.1 3,-1.2 -0.4,-1 -0,-0.1 -0.3,-1 -0,-0.1 -0.3,-1.1 -0.3,-1.1 -0.2,-1 z m 49.9,4.9 -0.5,1 -0,0.1 -0,0 -0.5,1 -0,0.1 -0.6,0.9 -0.6,1 -0,0 -0,0.1 -0.6,0.8 2.6,1.9 0.6,-0.9 0,-0 0,-0 0.7,-1 0,-0 0,-0 0.6,-1.1 0,-0 0,-0 0.6,-1.1 0,-0 0,-0 0.5,-1.1 0,-0 0,-0 0,-0 -2.2,-0.9 -0.8,-0.3 z m -46,5 0.5,0.8 0,0 0,0 0.7,1 0,0 0,0 0.8,0.9 0,0 0,0 0.8,0.9 0,0 0,0 0.9,0.9 0,0 0,0 0.1,0.1 2.2,-2.3 -0.1,-0.1 -0,-0 -0,-0 -0.8,-0.8 -0.1,-0.1 -0.7,-0.8 -0.1,-0.1 -0.7,-0.8 -0,-0 -0,-0.1 -0.6,-0.9 -0.1,-0.1 -0.5,-0.7 z m 40,3.3 -0.1,0.1 -0.8,0.7 -0,0 -0,0 -0.9,0.7 -0.1,0 -0.9,0.6 -0.1,0 -0.9,0.6 0,-0 -0.1,0 0,0 -0,0 0.3,0.4 1.3,2.4 0,-0 0,-0 0,-0 1.1,-0.7 0,-0 0,-0 1,-0.7 0,-0 0,-0 1,-0.8 0,-0 0,-0 0.9,-0.8 0,-0 0,-0 0.8,-0.7 -2.2,-2.4 z m -32.6,4.4 0.6,0.4 0,0 0,0 1.1,0.7 0,0 0,0 1.1,0.6 0,0 0,0 1.1,0.6 0,0 0,0 1.1,0.5 0,0 0,0 0.3,0.1 1.1,-3 -0.2,-0.1 -0.1,-0 -1.1,-0.5 -1,-0.5 -0.1,-0 -1,-0.6 0,0 -0.9,-0.6 -0.1,-0 -0.5,-0.4 z m 24.5,0.3 -0.1,0 -1.1,0.3 -0.1,0 -1.1,0.3 -1.2,0.3 -0.1,0 -1.1,0.2 0.6,3.1 1.2,-0.2 0,0 0,-0 1.3,-0.3 0,0 0,-0 1.2,-0.3 0,-0 0,-0 1.2,-0.4 0,-0 0,-0 0.9,-0.3 -1.1,-3 z m -14.8,3.9 0.7,0.2 0,0 0,0 1.3,0.2 0,0 0,0 1.3,0.2 0,0 0,0 1.3,0.1 0,0 0.1,0 1.3,0 0,0 0,0 0,0 -0.1,-1.6 0,-0.1 0,-1.5 -0.1,0 -1.3,-0 0,0 -1.3,-0.1 -1.1,-0.1 -0.1,-0 -0,0 -1.1,-0.2 -0.1,-0 -0.7,-0.1 z m 6.3,-43.1 -0.4,0 0.1,4 0.3,-0 0.1,0 0.1,0 0.6,0 0.1,0 0.6,0 0.1,0 0.6,0.1 0.1,0 0.6,0.1 0.7,0.1 0.1,0 0.1,0 0.6,0.2 0.5,0.2 0.1,0 0.5,0.2 0.1,0 0,0 0.5,0.2 0.1,0 0.4,0.2 1.8,-3.6 -0.5,-0.3 -0,-0 -0.1,-0 -0.7,-0.3 -0.1,-0 -0.1,-0 -0.7,-0.3 -0,-0 -0.1,-0 -0.7,-0.2 -0.1,-0 -0,-0 -0.7,-0.2 -0.1,-0 -0.1,-0 -0.7,-0.2 -0.1,-0 -0.1,-0 -0.8,-0.1 -0,-0 -0.1,-0 -0.8,-0.1 -0.1,-0 -0.1,0 -0.8,-0.1 -0.1,0 -0.1,0 -0.8,-0 -0.1,-0 z m -5.1,0.7 -0.1,0 -0,0 -0.7,0.2 -0.1,0 -0.1,0 -0.7,0.3 -0,0 -0.1,0 -0.7,0.3 -0.1,0 -0,0 -0.7,0.3 -0,0 -0,0 -0.7,0.4 -0,0 -0.1,0 -0.6,0.4 -0,0 -0,0 -0.6,0.4 -0,0 -0,0 -0.6,0.4 -0,0 -0,0 -0.6,0.5 -0,0 -0,0 -0.5,0.5 -0,0 -0,0 -0.2,0.2 2.9,2.8 0.1,-0.1 0.1,-0.1 0.4,-0.4 0.1,-0.1 0.4,-0.3 0,-0 0.1,-0.1 0.4,-0.3 0.5,-0.4 0.1,-0.1 0.6,-0.3 0,-0 0.5,-0.3 0.1,-0 0.5,-0.3 0.1,-0 0.5,-0.2 0,0 0.1,-0 0.6,-0.2 0,-0 0.5,-0.2 0.1,-0 0.1,-0 -1.1,-3.9 z m 14.2,6.7 0.4,0.3 0.5,0.5 0.1,0.1 0.3,0.4 0.1,0.1 0.3,0.4 0.1,0.1 0.3,0.4 0,0 0,0.1 0.3,0.4 0.1,0.1 0.3,0.5 0,0 0,0.1 0.3,0.5 0,0.1 0.2,0.5 0,0.1 0.2,0.5 0,0.1 0,0 0.2,0.6 3.8,-1.3 -0.2,-0.7 -0,-0.1 -0,-0.1 -0.3,-0.7 -0,-0.1 -0,-0 -0.3,-0.7 -0,-0.1 -0,-0 -0.3,-0.7 -0,-0.1 -0,-0 -0.4,-0.6 -0,-0 -0,-0.1 -0.4,-0.6 -0,-0 -0,-0.1 -0.4,-0.6 -0,-0.1 -0,-0 -0.5,-0.6 -0,-0 -0,-0 -0.5,-0.5 -0,-0 -0,-0 -0.5,-0.5 -0,-0 -0,-0 -0.5,-0.4 z m -24.4,1.4 -0,0 -0,0.1 -0.3,0.7 -0,0 -0,0.1 -0.3,0.7 -0,0 -0,0.1 -0.3,0.7 -0,0.1 -0,0.1 -0.2,0.7 -0,0.1 -0,0.1 -0.2,0.7 -0,0.1 0,0.1 -0.2,0.7 -0,0.1 -0,0.1 -0.1,0.7 -0,0.1 0,0.1 -0.1,0.8 0,0.1 -0,0.1 -0.1,0.8 0,0.1 0,0.1 -0,0.8 0,0.1 0,0.1 0,0.3 4,-0.1 -0,-0.2 0,-0.1 0,-0 0,-0.7 0,-0.6 0,-0.1 0,-0 0.1,-0.5 0.1,-0.6 0,-0.1 0.1,-0.5 0,-0 0,-0.1 0.1,-0.5 0.2,-0.6 0,-0.1 0,-0 0.2,-0.5 0.3,-0.6 0.1,-0.1 0.3,-0.5 0,-0.1 0,-0 0,-0 -3.5,-2 z m 28.7,7.6 0,0.5 0,0.1 0,0 -0,0.6 -0.1,0.7 -0,0.1 0,0.1 -0.1,0.6 -0.1,0.5 -0,0.1 -0.1,0.5 0,0 -0,0.1 -0.1,0.5 -0,0.1 -0.2,0.5 -0,0 -0,0.1 -0.2,0.5 -0,0 -0,0.1 -0.2,0.5 -0,0.1 -0.3,0.5 -0,0.1 -0,0 -0.2,0.3 3.5,2 0.2,-0.4 0,-0.1 0,-0 0.3,-0.7 0,-0 0,-0.1 0.3,-0.7 0,-0 0,-0.1 0.3,-0.7 0,-0.1 0,-0.1 0.2,-0.7 0,-0 0,-0.1 0.2,-0.7 0,-0.1 0,-0.1 0.2,-0.7 0,-0.1 0,-0.1 0.1,-0.7 0,-0.1 0,-0.1 0.1,-0.8 0,-0.1 0,-0.1 0.1,-0.8 0,-0.1 0,-0.1 0,-0.8 -2,-0.1 2,-0.1 -0,-0.6 z m -30.1,5.3 0.1,0.3 0,0.1 0,0 0.2,0.7 0,0.1 0,0.1 0.3,0.7 0,0.1 0,0 0.3,0.7 0,0.1 0,0 0.3,0.7 0,0 0,0.1 0.4,0.6 0,0 0,0.1 0.4,0.6 0,0 0,0 0.4,0.6 0,0 0,0 0.5,0.6 0,0 0,0 0.5,0.5 0,0 0,0 0.5,0.5 0,0 0,0 0.2,0.2 2.7,-2.9 -0.2,-0.1 -0.1,-0.1 -0,-0 -0.4,-0.4 -0.1,-0.1 -0.4,-0.4 -0,-0.1 -0,-0 -0.3,-0.4 -0.1,-0.1 -0.4,-0.5 -0.3,-0.4 -0.1,-0.1 -0.3,-0.5 -0,-0 -0,-0.1 -0.3,-0.5 -0.1,-0.1 -0.2,-0.5 -0,-0.1 -0,-0 -0.2,-0.5 -0,-0.1 -0,-0.1 -0.2,-0.6 -0,-0.1 z m 25.8,4.8 -0.1,0.1 -0.4,0.3 -0,0 -0.1,0.1 -0.4,0.3 -0.1,0.1 -0.5,0.3 -0,0 -0.1,0 -0.5,0.3 -0.1,0 -0,0 -0.6,0.3 -0.5,0.3 -0.1,0 -0.5,0.2 -0,0 -0.1,0 -0.5,0.2 -0.1,0 -0.5,0.2 -0.5,0.1 1.1,3.9 0.5,-0.1 0,-0 0.1,-0 0.7,-0.2 0.1,-0 0,-0 0.7,-0.3 0.1,-0 0.1,-0 0.7,-0.3 0.1,-0 0,-0 0.7,-0.3 0.1,-0 0,-0 0.7,-0.4 0,-0 0,-0 0.6,-0.4 0,-0 0.1,-0 0.6,-0.4 0,-0 0,-0 0.6,-0.5 0,-0 0,-0 0.6,-0.5 0,-0 0,-0 0.5,-0.5 -2.7,-2.9 z m -15.5,1.8 -1.9,3.5 0.1,0.1 0,0 0,0 0.7,0.3 0,0 0.1,0 0.7,0.3 0.1,0 0,0 0.7,0.3 0.1,0 0.1,0 0.7,0.2 0,0 0.1,0 0.7,0.2 0,0 0.1,0 0.8,0.2 0.1,0 0.1,0 0.8,0.1 0.1,0 0.1,0 0.8,0.1 0.1,0 0.1,0 0.8,0.1 0.1,0 0.1,0 0.8,0 0.1,0 0.1,0 0.1,0 -0.1,-4 -0.1,0 -0.1,0 -0.6,-0 -0.1,0 -0.6,-0 0,-0 -0.7,-0.1 -0,0 -0.1,-0 -0.6,-0.1 -0.1,-0 -0.6,-0.1 0,-0 -0.7,-0.2 -0.5,-0.2 0,-0 -0.6,-0.2 -0.1,-0 -0,0 -0.5,-0.2 -0.1,-0 -0.5,-0.3 -0.1,-0.1 z M 100,93.2 c -3.5,-4e-4 -6.7,2.9 -6.7,6.5 l 0,0.4 c 0,3.5 3,6.5 6.5,6.5 l 0.4,0 c 3.4,0 6.5,-3 6.5,-6.3 l 0,-0.9 c 0,-3.4 -3.3,-6.3 -6.8,-6.3 z"}],i["AC.IC.AVALANCHE"]=[{type:"path",stroke:!1,d:"m 115.7,87.3 -3.6,0.9 11,38 -4.6,1.5 9.6,9.2 3.1,-13 -4.6,1.4 z m 3,46.4 -8.5,-10 4.3,-1.2 -11.2,-40.6 -34.5,51.9 z m -12.1,-59.8 0,8.4 1.6,0 0,-8.3 7.1,4.3 0.8,-1.3 -7.4,-4.1 7.5,-4.4 -1,-1.2 -7,4 0,-8.2 -1.6,0 0,8.2 -7.4,-4 -0.6,1.1 7.2,4.4 -7.2,4.1 0.6,1.4 z"}],i["AC.IC.EARTHQUAKE EPICENTER"]=[{type:"path",stroke:!1,d:"m 62.8,99.8 c 0,-10.8 4.9,-20.2 10.3,-25.7 5.1,-5.1 14.8,-11.3 24.7,-11.3 h 4.1 c 4.9,0 10.5,1.9 13.9,3.6 5,2.5 6.4,4 10.4,7 4.6,3.6 11.1,15.4 11.1,23.8 v 5.3 c 0,17.4 -17.5,34.6 -35.1,34.6 h -4.6 c -10.3,0 -19.4,-6.2 -24.6,-11.4 -5.5,-5.4 -10.3,-15 -10.3,-25.8 z m 39.4,38.5 c 10.7,0 20,-6.3 25.5,-11.8 6.7,-6.7 9.9,-13.9 10.7,-26.5 1.3,-19.2 -17.7,-38.1 -36.2,-38.1 h -4.8 c -10.3,0 -20.1,6.6 -25.2,12.1 -3,3.2 -5.6,6.7 -7.5,11.1 -1.1,2.8 -3.5,11.3 -3,15.3 0.7,6.4 0.9,10.4 3.4,15.3 2.2,4.4 4,7.6 7.3,11 5,5.3 15.2,11.7 25.3,11.7 h 4.6 z m -3.9,-11.6 c -13.6,0 -24.7,-13.1 -25.2,-26.8 -0.5,-13.2 12.5,-26.4 25.4,-26.4 h 2.9 c 12.8,0 25.2,12.4 25.2,25.2 v 2.4 c 0,12.8 -12.4,25.7 -25.2,25.7 h -3.1 v -0 z m -27.1,-26.9 c 0,8.8 3.7,16 8.1,20.5 2.3,2.4 5.2,4.4 8.3,5.9 4.2,2.2 6.3,1.9 11.5,2.8 2.9,0.5 10,-1.3 12,-2.2 4.6,-2.2 5,-2.9 8.6,-5.6 4.3,-3.1 9.1,-12.3 9.1,-19.7 v -3.4 c 0,-13.7 -13.6,-26.8 -27.3,-26.8 h -3.2 c -14.5,-4e-4 -27.1,13.6 -27.1,28.5 z m 28.5,14.8 c -8.4,0 -13.5,-6.5 -14.4,-14.4 -0.7,-7.3 6.8,-14.6 13.9,-14.6 h 1.7 c 7.3,0 13.6,6.9 13.6,14.5 0,7.7 -6.2,14.5 -13.8,14.5 h -1 z m -18.6,-14.8 c 0,11.5 8,18.1 18.4,19.3 6.2,0.8 10.3,-2.9 13.6,-5.3 2.8,-2 5.8,-8.3 5.8,-13.3 V 99.8 c 0,-10.4 -8.3,-18.6 -18.6,-18.6 h -0.7 c -9.9,0 -18.4,8.6 -18.4,18.6 z m 10.9,0 v 0.2 c 0,3.7 3.5,7.7 7,7.7 h 1.7 c 3.9,0 7.3,-3.9 7.3,-7.7 0,-4 -3.5,-8 -7,-8 h -1.7 c -3.5,0 -7.3,4 -7.3,7.7 z"}],i["AC.IC.LANDSLIDE"]=[{type:"path",stroke:!1,d:"m 129.4,110.8 c -2.7,0 -6.2,4.1 -4.3,5.1 -1,1.5 -3.6,2 -3.6,4 0,1.8 2.6,4.7 3.4,6.2 1.1,2 3.2,3.2 6.2,3.2 h 1.8 c 2.7,0 4.6,-2.6 4.6,-5.3 v -1 c 0,-3.4 -1,-5 -2.1,-7.5 -1,-2.4 -1.6,-4.6 -4.9,-4.6 h -1 z m -22.2,-35 -5.3,-5.2 -39.3,58.3 55.8,0.1 v -1.2 c 0,-0.7 -1,-1.5 -1.5,-1.8 0,-2 -0.6,-1.6 -0.9,-2.9 -0.2,-0.9 -0.1,-2.7 -0.1,-3.7 0,-2.8 -0.1,-4.3 -1.7,-5.6 -2.2,-1.9 -1.3,-1.5 -4.3,-3.1 -2,-1 -1.5,-2.1 -5.2,-2.2 v -1.5 c 0,-1.9 -2,-3.6 -2.8,-4.8 0,-2.3 -0.5,-4.7 -0.5,-6.8 0,-1.6 -0.2,-2 -0.2,-3.3 -0.1,-1.7 -0.8,-1.5 -0.8,-2.8 v -0.2 c 0,-3 0.5,-4.5 2.1,-6 2.2,-2.1 0.9,-2.2 3.8,-3.9 l 0.8,-3.3 0,0 z m 9.7,34 c 0,3.6 6.1,2.8 6.1,-0.8 0,-4.2 -6.1,-1.9 -6.1,0.8 z m 2.8,-16.4 c -2.2,0 -7,6.4 -4,8.6 1.7,1.2 2.6,1.6 5.3,0.6 2,-0.8 2.8,-1.6 2.8,-4.3 4e-4,-2.4 -2,-4.8 -4,-4.8 z m -8.4,5.3 c 0.8,0 1,-0.7 1.3,-1.3 -0.6,-1.4 -0.5,-2.5 -2.6,-2.5 h -0.2 c -1,0 -2,0.6 -2,1.5 0,0.7 1.6,2.3 2.8,2.3 h 0.8 z m -3.3,-13.7 c -0.1,1 -0.3,0.6 -0.3,1.5 0,1 0.8,3 1.8,3 h 0.2 c 3.1,0 3.1,-0.2 4.8,-1.5 -1,-2.3 -0.4,-3.6 -4.2,-3.6 -1.1,0 -1.4,0.3 -2.3,0.5 z"}],i["AC.IC.SUBSIDENCE"]=[{type:"path",stroke:!1,d:"m 56.8,75.6 0,2 14.4,0 3.8,7.9 c -0.1,0.3 -0.3,0.7 -0.3,1.6 l 0,0.6 c 0,0.7 0.3,1.1 0.7,1.5 0.3,0.4 0.7,0.8 1.1,1.3 0.7,0.8 1.5,1.5 1.8,2 l -0.3,4.1 c -0.1,1 0.4,2 1,2.6 0.6,0.6 1.3,1.1 2,1.5 0.7,0.4 1.3,0.8 1.7,1.2 0.4,0.4 0.6,0.6 0.6,1 0,1.3 -0.5,2.2 -0.5,4.2 0,0.9 0.5,1.7 1.1,2.1 0.6,0.4 1.2,0.7 1.8,0.9 0.6,0.2 1.1,0.4 1.4,0.6 0.3,0.2 0.3,0.2 0.3,0.3 0,0.6 -0.1,0.8 -0.3,1.2 -0.2,0.3 -0.5,0.7 -0.5,1.5 l 0,0.6 c 0,1.8 1,2.9 1.9,3.5 0.8,0.6 1.3,0.8 1.5,1.3 0,0 0,0 0,0 0.2,0.8 0.3,2 0.7,3.1 0.2,0.6 0.5,1.2 1,1.6 0.5,0.5 1.2,0.7 2,0.7 l 0.3,0 c 1.1,0 1.9,-0 2.6,-0.2 0.7,-0.1 1.3,-0.4 1.7,-0.9 0.4,-0.5 0.5,-1.1 0.7,-1.7 0.1,-0.6 0.2,-1.3 0.3,-2.1 7.6e-4,-0 -7.6e-4,-0 0,-0 0.2,-1.4 0.7,-2.1 1.3,-2.8 0.5,-0.7 1.2,-1.7 1.2,-3.1 0,-0.6 -0.2,-1 -0.5,-1.3 -0.2,-0.3 -0.5,-0.7 -0.7,-1 -0.5,-0.7 -0.8,-1.5 -0.8,-2.4 l 0,-0.9 c 0,-0 -0,-0 0.1,-0.2 0.2,-0.2 0.5,-0.4 0.8,-0.6 0.4,-0.3 0.8,-0.5 1.1,-1 0.4,-0.4 0.7,-1.1 0.7,-1.8 0,-1.2 -0.5,-2.4 -0.9,-3.5 -0.4,-1.1 -0.8,-2.2 -0.8,-2.5 0,-0.5 0.2,-1 0.6,-1.6 0.4,-0.6 1,-1.3 1.5,-2.2 0.5,-0.8 0.9,-1.8 0.9,-3 -0,-1.1 -0.5,-2.4 -1.6,-3.6 l -0,-0 -0,0 c -0.3,-0.3 -0.7,-1.3 -0.8,-2.2 -0.1,-0.9 0.1,-1.9 0.4,-2.3 0.3,-0.5 0.9,-0.9 1.7,-1.4 0.7,-0.6 1.5,-1.6 1.5,-3 l 0,-1.4 38.1,0 0,-2 -40.1,0 -30.6,0 -0.6,0 -15,0 z"}],i["AC.IC.VOLCANIC ERUPTION"]=[{type:"path",stroke:!1,d:"m 122.2,66 -10.4,17.9 1.7,1 10.4,-17.9 -1.7,-1 z m -23.2,0.5 0,17.9 2,0 0,-17.9 -2,0 z m -19.5,-0.4 -1.8,0.8 8,17.9 1.8,-0.8 -8,-17.9 z M 99.3,120.8 c -1.7,-0 -3.3,0.8 -4.5,2 -1.2,1.2 -2,2.9 -2,4.5 l 0,1.9 c 0,1.7 0.8,3.3 2,4.5 1.2,1.2 2.8,2 4.5,2 l 1.3,0 c 1.7,0 3.3,-0.8 4.5,-2 1.2,-1.2 2,-2.8 2,-4.5 l 0,-1.9 c 0,-1.7 -0.8,-3.3 -2,-4.5 -1.2,-1.2 -2.8,-2 -4.5,-2 l -1.2,0 -0,0 z M 80.3,86.5 c -0.5,0 -0.9,0.3 -1.4,0.8 -0.4,0.5 -0.8,1.2 -1.3,2 -0.8,1.7 -1.6,3.9 -2.4,6.3 -1.5,4.7 -2.8,9.8 -3.4,11.4 l -0,0 c -2,7 -5.8,15.2 -7,21.6 l -0.1,0.2 0.2,0 20.9,0.6 0.2,0 0,-0.2 0,-1.9 0,-0.2 -0.2,-0 -17.6,-0.7 L 80.5,89.4 l 39.1,0 11.9,37.1 -17.5,0.7 -0.2,0 0,0.2 0,1.9 0,0.2 0.2,-0 20.9,-0.6 0.2,0 -0.1,-0.2 c -1.3,-6.4 -5.1,-14.7 -7,-21.6 L 128.1,107 c -0.6,-1.6 -1.9,-6.7 -3.4,-11.4 -0.8,-2.3 -1.6,-4.6 -2.4,-6.3 -0.4,-0.8 -0.8,-1.5 -1.3,-2 -0.4,-0.5 -0.9,-0.8 -1.4,-0.8 l -39.4,0 z"}],i["AC.IC.VOLCANIC THREAT"]=[{type:"path",stroke:!1,d:"m 80.3,85.6 c -0.5,0 -0.9,0.3 -1.4,0.8 -0.4,0.5 -0.8,1.2 -1.3,2 -0.8,1.7 -1.6,3.9 -2.4,6.3 -1.5,4.7 -2.8,9.8 -3.4,11.3 l 0,0 -0,0 c -2,7 -5.8,15.2 -7,21.6 l -0.1,0.2 0.2,0 20.9,0.6 0.2,0 0,-0.2 0,-1.9 0,-0.2 -0.2,-0 -17.6,-0.7 12,-37.1 39.1,0 11.9,37.1 -17.5,0.7 -0.2,0 0,0.2 0,1.9 0,0.2 0.2,0 20.9,-0.6 0.2,-0 -0.1,-0.2 c -1.3,-6.4 -5.1,-14.7 -7,-21.6 l -0,0 0,-0 c -0.6,-1.6 -1.9,-6.7 -3.4,-11.3 -0.8,-2.3 -1.6,-4.6 -2.4,-6.3 -0.4,-0.8 -0.8,-1.5 -1.3,-2 -0.4,-0.5 -0.9,-0.8 -1.4,-0.8 l -39.4,0 z M 99.3,120 c -1.7,-0 -3.3,0.8 -4.5,2 -1.2,1.2 -2,2.9 -2,4.5 l 0,1.9 c 0,1.7 0.8,3.3 2,4.5 1.2,1.2 2.8,2 4.5,2 l 1.3,0 c 1.7,0 3.3,-0.8 4.5,-2 1.2,-1.2 2,-2.8 2,-4.5 l 0,-1.9 c 0,-1.7 -0.8,-3.3 -2,-4.5 -1.2,-1.2 -2.8,-2 -4.5,-2 l -1.2,0 -0,0 z m -2.7,-42.1 0,0.2 -0.2,0 0,4.2 0,0.2 0.2,0 3.3,0 0.2,0 0,-0.2 0,-4.2 0,-0.2 -0.2,0 -3.3,0 z M 99,57.1 c -1.1,2.5e-5 -2.3,0.2 -3.3,0.5 -1.1,0.3 -2.1,0.8 -3.2,1.4 l -0.1,0.1 0,0.1 0,3.1 0,0.4 0.3,-0.2 c 1.1,-0.7 2,-1.3 3,-1.6 1,-0.4 1.9,-0.6 2.7,-0.6 1.1,2.2e-5 2,0.3 2.7,0.8 0.7,0.6 1,1.3 1,2.2 -1e-5,0.5 -0.1,1 -0.4,1.5 -0.3,0.5 -0.7,1 -1.3,1.6 l 0,0 -1.5,1.5 c -1,0.9 -1.7,1.8 -2,2.5 -0.3,0.7 -0.5,1.7 -0.5,2.8 l 0,2.5 0,0.2 0.2,0 3.1,0 0,-0.2 0.2,0 0,-2 c -10e-6,-0.6 0,-1 0.1,-1.3 0,-0.3 0.1,-0.6 0.1,-0.8 0.1,-0.2 0.2,-0.5 0.4,-0.8 0.2,-0.3 0.6,-0.7 1.1,-1.2 l 1.4,-1.4 c 1,-0.9 1.7,-1.8 2.1,-2.6 l 0,-0 c 0.4,-0.8 0.6,-1.6 0.6,-2.5 -2e-5,-1.8 -0.6,-3.3 -1.9,-4.3 -1.3,-1.1 -2.9,-1.6 -5,-1.6 z"}],i["AC.IC.CAVE ENTRANCE"]=[{type:"path",fill:!1,d:"m 55,100 55,0 30,-20 0,40 -30,-20"}],i["AC.IC.DROUGHT"]=[{type:"path",stroke:!1,d:"m 87.6,127.4 c 1.3,0.6 4.5,0 6.1,0 h 4.2 l -2,-5.9 -4.9,-0.3 c -5.7,10.8 -2.4,4.3 -3.4,6.2 z m -24.1,-7 c -0.6,1.9 17.6,6.9 20.5,7.4 2.7,-1.8 4.5,-2.4 4.8,-6.7 -4,0 -11.4,-0.8 -14.8,-1.7 -2.2,-0.6 -4.2,-1.2 -6.4,-1.7 -3.5,-0.9 -4.2,-1.5 -4.2,2.6 z m 35.9,6.1 6.7,-0.3 18.6,-1.7 c 1.5,-0.4 4.5,-0.4 6,-1.4 -1.3,-2.6 -2.4,-4.1 -3.7,-6.6 -1.4,-2.6 -1.9,-4.9 -3,-7.2 -3.7,0.8 -4.7,3.5 -6.3,4 -3.5,1.1 -4.8,0.4 -6.7,3.8 -1.7,3 -2.5,3.3 -5.3,5.2 -2.4,1.7 -3.6,2.8 -6.3,4.2 z m -2.8,-9 c 0,3.7 0.5,4.2 2.2,7.3 l 8.5,-7.1 -0.2,-0.2 c -1.7,-0.4 -2.4,-1.5 -4.8,-2.2 -1.6,-0.4 -4.1,-1.3 -5.8,-1.4 v 3.6 h 0.1 z m 37.6,0.5 c -0.9,0 -1,-0.2 -1.9,-0.2 l 1,2.4 2.7,-2.8 c -0.9,0.2 -0.8,0.5 -1.8,0.5 z m -51.3,-0.3 c -0.1,1.9 7.7,1.5 9.3,1.5 h 2.8 c 0,-1.7 -0.7,-2.8 -0.8,-4.4 -0.1,-2.5 -0.4,-1.8 -3.1,-2.1 -4,-0.4 -4.6,-2 -7.7,-2.8 l -0.6,7.7 z m -25.5,-12.6 3,12.1 c 0.7,-3 2.2,-4.5 2.8,-7.3 0.3,-1.8 0.1,-2.6 0.9,-4 0.4,-0.7 1.3,-2.8 1.5,-3.6 -1.4,-0.3 -6.9,-1.6 -8.6,-1.6 l 0.4,4.4 z m 69.9,-2.2 c -1,4.1 -0.7,3.5 1,7 1.2,2.4 2,4.4 3.1,6.6 5.8,-0.5 6.2,-0.5 9.4,-3.6 1.6,-1.6 1,-6.8 2,-8.3 -2.5,-1.2 -1.7,-0.6 -4.6,-1.3 -4.5,-1 -6.6,-0.4 -10.9,-0.3 z m -30.9,1.1 v 0.8 c 0,2.2 -0.1,3.3 0,5.4 0.1,3.3 -0.3,2.5 3.1,2.8 1.2,0.1 3.5,1 4.5,1.4 0.7,0.4 1.5,0.5 2,0.8 0.8,0.4 0.3,0.6 1.7,1.4 l -0.2,-0.2 5.6,-4.7 c 3.1,0 4.2,0.4 5.8,-1.3 2.4,-2.5 0.8,-1.4 4,-3.1 l 0.6,-3.1 c -2.5,0.6 -5.5,2.2 -8.2,1.1 -2.6,-1.1 -3.8,-2.8 -7.4,-2.8 l -1.6,-0.3 -9.9,1.8 z m -32.1,11.2 c 1.3,0 5.8,0.7 6.9,1 1.4,0.4 4.7,2.3 5.6,2.3 h 2.8 c 1,0 0.9,-0.3 1.7,-0.5 l 1.7,-8.3 -5.2,-4.5 -9,-2 c -0.4,1.7 -2.4,3 -3.1,5.1 -0.3,0.7 -1.5,6.3 -1.5,7 z m 41,-35.1 c 1,1.2 1.4,2.8 2.2,4.2 0.4,0.6 2.9,3.3 2.9,3.5 0,0.8 -0.9,2.3 -1.3,2.3 -2.7,0 -3.8,-6.7 -3.8,-10 z m -1.8,-1.2 c -0.3,1 -1.9,4.5 -2.5,5.6 -0.9,1.8 -1.9,3.5 -4.4,3.5 -0.5,0 -1,-0.4 -1,-0.8 0,-3.1 3.8,-5.8 5.2,-7.6 l 2.8,-0.8 z m 9.5,8.6 h -0.8 c -2.3,0 -6.9,-8 -6.9,-9.7 0,-0.1 0.3,-0.5 0.3,-0.5 1.7,0.5 7.9,6 7.9,8.7 -4e-4,0.5 -0.4,0.8 -0.5,1.5 z m 0.6,-6 c -0.7,-0.3 -1.7,-1 -2.4,-1.3 -1.4,-0.8 -3.5,-2.9 -4.7,-3.3 l 1.1,-1.3 c 3.1,1.5 10.1,1.3 10.1,5.7 0,0.3 -0.8,0.8 -1,1 -0.8,-0.3 -2,-0.4 -3.1,-0.8 z m -24.9,1.3 h -1 c 1,-2 -2.2,-6.7 -4.4,-7.2 -2.2,1.2 -4.2,0.6 -5.5,3.3 -0.4,1 -0.7,2.2 -1.5,2.8 -0.8,0.6 -2.4,0.8 -2.4,1.9 0,1.5 4.3,0.4 4.9,-0.2 1.2,-1.1 2.4,-2.1 4.5,-2.1 2,0 2.9,5.8 3.1,8.2 0.2,3.2 -2.3,7.7 -2.2,9.5 l 0.9,6.8 -4.4,-0.3 c 2.1,3.1 8.5,6 13.4,6.4 l -0.4,-7.7 -5.6,1.3 c 0,-4.4 -2,-5.5 -0.5,-9.5 0.6,-1.7 1,-2.2 1,-4.7 0,-1.1 0.2,-4.6 0.6,-5.3 1.5,-2.5 1.9,-5.6 3.1,-8.4 1.2,-2.8 5,-2.6 8.3,-3.5 l 1.2,1.3 -1,0.3 0.8,1.8 c -1.7,2 -2.9,2.9 -4.5,5 -0.8,1 -3.8,6.3 -0.6,6.3 h 1 c 3.9,0 5.1,-7.1 6.9,-9.2 0.4,4.4 1.2,9.5 4.4,11.2 1.7,-0.4 2.2,-1.1 2.6,-2.8 0.7,0.2 0.5,0.3 1,0.3 1.3,0 2,-1.1 2,-2.3 V 85.8 c 0,-2.1 -1.2,-2.4 -1.5,-3.8 0.8,0.4 2.2,1 3.3,1 h 0.5 c 1.2,0 1.3,-0.6 1.8,-1.3 -0.2,-2.5 -1.5,-3.9 -3.5,-4.6 -1.3,-0.4 -5.2,-1.7 -6.7,-1.7 l 0.5,-1 h -0.7 l 0.8,-1.6 -4.9,1 c -0.9,-0.6 -1.2,-1.5 -2.6,-1.5 h -1.8 C 92.3,72.2 88.7,75.8 88.7,82.9 l 0,0 z"}],i["AC.IC.FLOOD"]=[{type:"path",stroke:!1,d:"M77.2,92.9L77.3,92.8L99.3,72.5L99.7,72.1L100,72.1L100.4,72.5L122.4,92.8L123.5,93.9L122.4,93.9L122.4,115.902C123.023,115.106 123.657,114.5 124.4,114.5C125.454,114.199 124.857,116.712 125.5,117.6C125.988,118.273 126.805,118.721 127.609,118.928C130.146,119.58 132.747,117.303 134.5,116.2C135.043,115.859 136.356,115.26 136.4,115.9C136.652,119.558 136.526,123.235 136.4,126.9L63.7,126.9L63.7,114.9C64.819,117.943 66.835,120.948 70.637,119.05C72.357,118.192 73.209,115.745 75.1,115.4C75.464,115.334 76.266,116.335 77.1,117.278L77.1,93.9L76.2,93.9L77.1,93L77.1,92.9L77.2,92.9ZM121.2,117.544L121.2,94.1L78.3,94.1L78.3,118.49C78.521,118.667 78.727,118.795 78.911,118.845C83.407,120.084 82.345,116.009 86.9,115.5C87.588,115.423 90.549,119.114 91.583,119.536C95.694,121.215 95.826,116.694 98.9,115.9C100.074,115.597 100.538,118.237 100.9,118.5C101.86,119.198 103.028,119.651 104.2,119.837C109.33,120.655 108.685,117.216 111.9,114.9C112.848,114.217 113.556,116.602 113.563,116.613C115.1,119.229 115.092,120.273 118.659,119.606C119.666,119.418 120.465,118.529 121.2,117.544ZM99.75,73.846L99.8,73.8L99.7,73.8L99.75,73.846L79.3,92.7L120.2,92.7L99.75,73.846Z"}],i["AC.IC.INVERSION"]=[{type:"path",stroke:!1,d:"M 69.5,87.9 C 69.5,86.7 73.6,83.9 75.5,83.9 h 0.3 c 3.3,0 9,9.1 15.2,9.1 h 1.8 c 5.4,0 11.3,-9.1 14.9,-9.1 3.5,0 8.8,9.1 15.2,9.1 h 0.9 c 8.5,0 10.5,-4.4 15.5,-7 l -5.3,-6.4 c -3.4,1.8 -4.1,4.6 -9.5,5.3 -2.2,0.3 -6.6,-3.9 -8.3,-5.5 -8,-6.8 -13,-3 -19.4,2 -3.9,3.1 -3.9,5.3 -8.5,1.3 -2.2,-1.8 -5.6,-4.8 -8.2,-6 -3.8,-1.8 -8.6,-0.7 -11.4,1.2 -1.6,1 -7.3,5.2 -7.3,6.9 v 52.2 h 8.2 V 87.9 z m -9.4,-16.4 79.9,0 0,-8.5 -79.9,0 z"}],i["AC.IC.TSUNAMI"]=[{type:"path",stroke:!1,d:"m 63,122 39.5,-0.1 30.8,0.3 c -7.1,0 -12.8,-1.7 -16.9,-4.8 -3.7,-2.9 -7.7,-8 -7.7,-14.4 0,-9.1 6.9,-16.5 15.8,-16.5 h 0.7 c 6.5,0 8.2,2.8 11.8,5.3 -2,-8.6 -10.6,-14.2 -21.4,-14.2 h -0.2 c -18.2,0 -44.9,33 -52.4,44.3 l 0,0 0,0 z"}],i["AC.IC.BIRD"]=[{type:"path",stroke:!1,d:"m 81.6,92.5 -18.4,2.9 v 0.3 l 6.6,0.5 c -0.7,0.5 -3.3,1.1 -4.5,1.5 -2.6,0.9 -2,0.3 -3.5,2.4 l 3.4,0.1 -1,1 c 1.8,0 3.3,0.1 4.8,0.2 1.4,0.1 1.9,-1.3 3.5,-1.4 3,-0.2 5.7,0.2 9.3,0.3 l -0.8,0.5 c 0.6,0.1 0.7,0.2 1.4,0.2 h 1.6 l 0.1,0.9 2.9,1.2 1.6,-0.1 c 1.6,1.1 1.9,2.3 5.2,2.4 0.2,2.7 0.6,3.8 3,4.4 v 0.8 c 0,2.2 0.2,4.8 2.1,5 l 1.2,5.3 h -0.4 v 0.4 c -0.3,-0.3 -1.4,-1.2 -1.8,-1.2 h -0.2 c -0.5,0 -0.5,0.1 -1,0.2 0.6,0.8 2.7,1.7 3.1,2.7 0.5,1.6 0.1,3.8 0.2,5.3 l 0.9,0.6 0.8,-0.1 0.1,-0.8 -0.1,-2.7 c 0.7,0.5 2.7,3 3.3,3 h 1 c -0.5,-2 -1.8,-2.4 -2.7,-3.9 l 3.7,1.1 c -1,-1.5 -0.9,-1.8 -2.9,-2.3 -3.1,-0.8 -1.8,-1.9 -3.1,-2.2 l -1,-5.4 c 1,-0.2 1.4,-1 1.4,-2.2 l 0.1,-1.6 -0.3,-2.6 h 1 c 0.7,0 0.7,-0.2 1.4,-0.4 0.1,1.6 1.2,3.3 2.7,3.4 l 3.1,6.3 c -0.3,0.3 -0.4,0.3 -0.4,0.8 v 0.7 l -4.4,-0.9 v 0.2 c 0.8,0.7 3.7,1.7 5.1,2.8 1.1,0.8 1.2,0.6 2,1.9 0.3,0.5 1.3,2.2 1.9,2.2 h 0.8 l 0.2,-0.1 -1.7,-3.2 4.3,1.9 c -0.1,-2.1 -2.1,-1.5 -3.6,-2.8 h 3 c -1.3,-1.1 -1.6,-0.9 -3.5,-1.2 -1.6,-0.2 -1.7,-1.2 -2.7,-2.1 -1.1,-1.2 -2,-4.9 -2.9,-6.6 1.2,-1.8 1,-1.4 1,-4.4 4.8,-2.3 5.6,-2.1 9.3,-5.9 2.7,-2.7 3.9,-6.1 5.8,-9.7 0.9,-1.8 1.5,-3.3 2.2,-5.2 0.7,-1.8 0.7,-4.7 1.4,-6.3 2.3,-4.6 9,-3.2 10.3,-5.2 l -4.4,0.2 v -0.2 l 5,-0.6 c -2.2,-1.9 -4.8,-1.4 -8.3,-1.8 -2.1,-0.3 -2.9,0.7 -4.4,-0.3 -1.4,-1 -1.6,-1.2 -3.7,-1.5 -3.1,-0.5 -5.6,1.2 -7.4,2.5 -1.7,1.3 -3.2,5.2 -4.2,6.1 -0.3,0.2 -6.1,2.7 -7.1,3.2 -2.9,1.5 -3.5,2.5 -7.3,3.1 -6.3,1 -9.9,3.4 -14.2,6.3 l 0,0 z"}],i["AC.IC.INSECT"]=[{type:"path",stroke:!1,d:"m 77.4,88.8 0.1,-0.3 6.1,4.9 -0.1,0.2 c -2.2,1.5 -7.7,9 -10,9 l -1.6,-0.1 5.6,-13.7 z m 7.1,3.3 c -0.4,-1.7 -5,-6.4 -6.7,-7.2 -0.4,0.3 -1.8,1 -1.8,1.6 0,0.8 0.3,1 0.5,1.5 l -5.6,14.7 h -1 c 0.2,0.9 0.5,0.7 0.5,1 0,0.3 -3,7.8 -3.3,8.7 -0.6,1.4 -1,2.7 -1.6,4.2 -0.3,0.8 -0.6,1.6 -0.9,2.2 -0.5,1.1 -0.6,0.3 -1.4,1.7 l -1.3,0.3 c 0.3,0.5 1.8,0.5 2.5,0.4 1.2,-0.2 0.4,-1 0.8,-2.2 0.7,-1.8 1.4,-3.5 2.1,-5.4 0.5,-1.2 3.7,-10.3 4.6,-10.3 h 1.3 c 0.8,0 1,0.3 1.5,0.5 l 2.3,-2.8 c 2.7,1.8 8.5,4.6 12.8,4.6 h 0.7 l 0.2,-0.1 -3.5,-5 -9.9,-0.1 6.5,-6.3 c 4.3,2.9 11.7,16.9 14.9,16.9 h 0.3 c 1.4,0 1.3,-0.6 1.8,-1.6 -0.9,-3.7 -4.8,-6.3 -7.3,-8.5 -2.4,-2 -6.1,-6.5 -8.3,-7.9 1.2,-1.7 10.3,-10.8 12.2,-11.3 l 0.9,7.7 0.1,2.9 -1.2,7.4 h -1.8 l 5.2,4.4 7.2,-3.9 c -0.5,2.1 -0.3,2.5 -2.2,3.4 -0.6,0.3 -3.7,1.9 -3.7,2.3 0,0.5 0.7,1.7 0.7,3.1 0,2.9 -3.1,4.4 -5.8,3.3 -2.1,-1 -4.9,-5.1 -5.5,-5.1 h -1 c -4.6,0 -6.7,1.6 -10.5,1.6 h -0.5 c -1.9,0 -2.5,-0.7 -4.1,-0.7 h -0.5 c -0.6,0 -1,0.4 -1,1 0,3.2 12.3,4.7 16.9,4.6 l 13.1,-0.3 v 0.3 c -0.9,1.3 -5.8,4.8 -8,4.8 -0.1,0.2 -0.5,0.7 -0.5,0.8 0,0.7 0.1,0.7 0.3,1.3 0.7,0.1 0.5,0.3 1,0.3 0.5,0 0.5,-0.2 1,-0.5 v -1.3 l 7.7,-5.4 -1.6,6.1 c -0.9,0.1 -1.3,0.4 -1.3,1.3 0,0.9 0.5,0.7 1.4,1.2 l 1.2,-1.4 c 0,-0.2 -0.7,-1.3 -0.7,-1.4 0,-1.3 2.4,-7.6 2.8,-9.5 l 15.6,-0.5 1.2,8.4 -0.4,0.1 c 0.3,0.5 0.3,1 1,1 1,0 1.1,-0.3 1.6,-0.7 -0.5,-1 -0.5,-1.9 -1.7,-1.3 l -0.8,-6.7 4.8,5.5 -0.7,0.8 1.4,1.2 c 0.5,-0.3 1,-0.2 1,-1 v -0.5 c 0,-0.9 -0.9,-1 -1.6,-1.2 l -4.5,-5 0.3,-1 h -8.5 c 0,-5 2,-8.2 2.3,-12.4 l -9.2,0.4 -0.8,2.5 h -4.6 c -1.8,0 -2.8,-8 -2.9,-10.3 0,-2.4 -0.3,-4.1 -0.2,-6.4 0.1,-1.4 1,-5.1 -1,-5.1 h -0.7 c -1,0 -1.3,1 -1.6,1.8 -0.3,1 -1,1.4 -1.6,2 -1.2,1.3 -2.3,2.4 -3.5,3.6 -1.2,1.2 -6.2,6.7 -7.4,7 l 0,0 z m 37.9,8 c 0,-0.3 0.3,-0.5 0.7,-0.5 h 0.7 l 0.1,0.5 -0.3,1 h -1 c -0.1,-0.7 -0.3,-0.4 -0.3,-1 z m 3.6,-1.8 c -0.2,0 -1.6,-1.8 -3.3,-1.8 h -0.5 c -2,0 -2,2.2 -2.5,3.9 -0.5,1.4 -1.4,3.7 -1.4,5.4 0,0.6 0.4,1 1,1 2.4,0 6.4,-5.2 6.9,-7.4 3.9,0 11.1,-1.1 11.8,-3.9 -2.6,0.7 -2.9,2.4 -8,2.8 1.8,-1.6 5.6,-4.3 5.9,-7.2 h -0.5 c -0.8,3.1 -5.6,7.2 -9.5,7.2 z"}],i["AC.IC.MICROBIAL"]=[{type:"path",stroke:!1,d:"m 83.9,93.3 c -3.3,0 -6,2.7 -6,6 0,3.3 2.7,6 6,6 3.3,0 6,-2.7 6,-6 0,-3.3 -2.7,-6 -6,-6 z M 100,85.5 c -11.1,0 -21.2,1.5 -28.6,4.1 -3.7,1.3 -6.7,2.8 -8.8,4.5 -2.1,1.7 -3.4,3.7 -3.4,5.9 0,2.2 1.3,4.2 3.4,5.9 2.1,1.7 5.1,3.2 8.8,4.5 7.4,2.5 17.5,4.1 28.6,4.1 11.1,0 21.2,-1.5 28.6,-4.1 3.7,-1.3 6.7,-2.8 8.8,-4.5 2.1,-1.7 3.4,-3.7 3.4,-5.9 0,-2.2 -1.3,-4.2 -3.4,-5.9 -2.1,-1.7 -5.1,-3.2 -8.8,-4.5 C 121.2,87.1 111.1,85.5 100,85.5 z m 0,1.4 c 11,0 21,1.5 28.2,4 3.6,1.2 6.5,2.7 8.4,4.3 1.9,1.6 2.9,3.2 2.9,4.8 0,1.6 -1,3.3 -2.9,4.8 -1.9,1.6 -4.8,3 -8.4,4.3 -7.2,2.5 -17.1,4 -28.2,4 -11,0 -21,-1.5 -28.2,-4 -3.6,-1.2 -6.5,-2.7 -8.4,-4.3 -1.9,-1.6 -2.9,-3.2 -2.9,-4.8 0,-1.6 1,-3.3 2.9,-4.8 1.9,-1.6 4.8,-3 8.4,-4.3 7.2,-2.5 17.1,-4 28.2,-4 z"}],i["AC.IC.REPTILE"]=[{type:"path",stroke:!1,d:"m 93.5,82.3 c 0,-2 1.8,-2.7 1.8,-4.3 0,-1 -0.6,-1.5 -1.2,-2 -2.8,0.3 -6.5,0.6 -7.4,2.7 -0.5,1.2 -0.5,2.4 -1.2,3.9 -0.5,1 -1.2,2.4 -1.2,3.8 0,0.8 0.4,0.7 0.4,1.6 v 0.8 c 0,2.2 -2.4,3.5 -0.6,6.1 -0.2,0.3 -2,1.5 -2.4,1.7 -1.7,1 -1.8,-0.6 -2.6,-0.6 h -0.8 l -0.3,-1.2 c -0.5,-0.3 -1,-0.8 -1.7,-0.8 -0.8,0 -0.8,0.5 -0.6,1 l -2.1,0.4 -0.8,2.3 h 1 c 0.9,0 1.4,0.4 1.6,1.2 l -1.5,1.2 -0.1,0.4 c 2.8,0.3 4.6,-0.6 7.2,-1.2 1.5,-0.4 6.8,-0.6 7.3,-1 l 0.1,-2.2 c 1,0.3 2,1.3 3.1,1.7 1.2,0.4 1.7,0.8 3.1,1.2 2.4,0.6 4.5,1.2 7.7,1.2 h 0.6 l 6.1,-0.6 c 0,2.6 2.3,2.5 2.8,4.5 -1.3,-0.3 -2.3,-2 -3.5,-2 -0.1,0 -0.4,0.1 -0.6,0.2 l 0.3,1.2 -1.6,0.3 v 0.8 l 0.6,0.4 -0.9,0.6 1,1 c -0.2,0.8 -0.7,0.6 -0.7,1.3 0,0.4 0.1,0.6 0.6,0.6 0.6,0 1.6,-1 2.8,-1 1.9,0 8.3,0.8 8.3,-0.8 v -0.2 c 0,-1.5 -3.5,-1.6 -3.3,-5.5 5,2.6 9.3,7.4 4.5,13.6 -1.5,2 -4.1,3.6 -6.7,4.5 -1.4,0.5 -7.4,1.9 -9.3,1.5 -4.2,-0.8 -5.4,-0.8 -8.8,-2.4 -2.6,-1.2 -4.7,-2.5 -7,-4 -3.9,-2.4 -10,-6.1 -16.1,-6.1 -5,0 -11.4,3.1 -11.4,7.9 1.2,-0.6 1.3,-1.3 2.1,-2.2 0.5,-0.6 1.7,-1.3 2.4,-1.7 1.5,-1 3.9,-1.8 6.5,-1.8 h 1 c 4.4,0 11.6,4.7 14.5,6.7 4.5,3.1 8.1,5.5 14.7,6.7 7,1.2 12.7,-0.1 17.4,-2.8 1.9,-1.1 4.3,-3.3 5.5,-5.1 1,-1.6 2.9,-5.4 2.7,-8 l -0.3,-2.6 c 0.3,0.1 2.8,3.7 3.6,4.5 0.8,0.8 3.8,2.5 5.3,2.5 1,0 4.4,-2.2 4.7,-2.9 l -1.3,-0.6 1.2,-1 c -1.5,-1 -0.8,-0.6 -2.4,-0.6 h -1 c 0,-1.4 -0.3,-1.8 -1.3,-1.6 l 0.2,0.1 -1.7,3.4 c -1.4,0 -2.9,-0.9 -3.6,-1.8 0,-0.1 -1.3,-3.8 -1.3,-3.9 -0.6,-2 -0.6,-2.2 -1.8,-3.6 -1.2,-1.3 -1.9,-1.2 -3.4,-1.9 l -0.1,0.6 c -0.6,-1.8 -6.2,-6.5 -8.1,-7.4 -2.2,-1.2 -3.2,-1.2 -6,-1.7 -2.1,-0.3 -5.4,0.3 -7,-0.5 0.4,-1.5 1.6,-0.6 1.6,-2.2 0,-0.5 -0.7,-0.4 -1.2,-0.4 0.6,-1.2 -0.3,-1 -1.3,-1 0.1,-0.3 0.4,-0.6 0.4,-1 0,-0.3 -0.3,-0.4 -0.6,-0.4 -0.4,0 0,0.6 -1.3,0.6 -0.3,-1 -0.3,-1.3 -1.5,-1.4 v 1.6 h -1.3 v 0.6 c 0,0.8 0.6,1.5 1,2.2 -0.4,0.7 -0.3,2 -1.4,2 -0.6,0 -1.8,-1.5 -3.1,-1.9 -1.3,-0.4 -3,0.5 -3,-1.5 -0,-0.9 2.1,-2.5 2.8,-3.5 l 0,0 z"}],i["AC.IC.RODENT"]=[{type:"path",stroke:!1,d:"m 117.2,80.3 c 0.6,1.2 0.6,1.7 1.5,2.6 0.6,0.7 1.8,1.2 1.9,2.2 -2,-0.1 -4.2,-3.3 -4.4,-5.3 -2.1,-0.5 -8.4,-3.6 -10.9,-4.7 -3.1,-1.3 -8.3,-2.7 -12.7,-2.7 h -2.2 c -4,0 -9,2.5 -11.3,4.2 -3,2.2 -5.2,5.2 -5.2,10.4 v 0.7 c -4.6,1.1 -11.7,8.4 -11.7,13.9 v 2.4 c 0,6.2 7.7,10 11.8,12.7 2.5,1.7 4.7,3.3 7,5.1 2.2,1.7 4.7,4.2 6.7,5.5 -2.1,-9 -22.4,-12.7 -22.4,-25.1 0,-4.5 4.9,-9.3 8.5,-10.2 -0.1,0.6 -0.3,0.6 -0.3,1.3 v 0.5 c 0,4.5 7.8,4.1 11.5,3 5.1,-1.5 8.1,-2.2 13.6,-1.2 5.4,1.1 8.3,1.5 12.7,3.6 3.7,1.9 2,1.2 4.2,3.8 1.1,1.3 1,1.1 2.9,1.3 0.8,0.1 1.8,1 2.4,1.5 h 1.7 c -1.3,-2.6 -4.9,-2.9 -5.6,-5.8 0.8,-1.5 1.7,-1.7 3.9,-1.7 0.8,0 1,0.2 1.7,0.3 -0.3,-0.6 -0.6,-1.7 0.5,-1.7 h 1.9 c 4.5,0 9,2.5 12.7,0 0,-3 0.4,-2.2 -0.9,-4.9 -0.5,-0.8 -2.1,-2.7 -2.8,-3.4 -1.6,-1.5 -5.7,-4.1 -6.7,-5.5 0,-2.8 -0.4,-3.4 -2.7,-3.9 l -0.5,1 0.5,2.7 -1,0.3 v 0.9 h -0.8 c -0.2,-2.4 -1.2,-5.8 -3.6,-5.8 h -0.2 c -1.8,-4e-4 -1.5,1 -2,1.9 z m 9.5,24.6 h 1.2 c -0.2,-2.6 -5.1,-2.8 -5.4,-5.4 l -2.2,0.3 c 0.2,1.5 1.1,2.9 2.4,3.5 0.9,0.3 1.5,0 2.3,0.6 0.4,0.3 1.1,1 1.7,1 z m -45.1,-6.1 c 1.2,1.8 5.9,4.2 8.8,4.2 1,0 1.6,-0.8 1.9,-1.5 -0.9,-1.3 -2.9,-2.8 -4.7,-3.1 -3.7,-0.8 -2.9,0.1 -6,0.4 l 0,0 z m 9.5,-1.9 c 1.3,2 5,2.9 8.3,2.9 0.8,0 1.4,-0.4 1.9,-0.7 -2,-2.9 -6.1,-2.6 -10.2,-2.2 z"}],i["AC.IC.PHARMACY"]=[{type:"path",stroke:!1,d:"m 83.3,74.5 h 13.2 c 3,0 6.2,3.8 6,7.3 -0.1,3.6 -2.9,6.6 -6.5,6.6 H 83.3 V 74.5 z m -8.7,45.9 h 8.7 V 98 h 2.4 c 0.6,0 13.6,16.1 13.6,17.2 0,0.6 -13.6,16.6 -15,19.3 l 10.5,-0.1 10.3,-12.2 9.6,12.3 10.9,-0 -15.2,-19.3 14.4,-17.8 -10.2,-0.1 -9.7,10.8 -7.4,-10 c 8.5,-2 14.1,-6.8 14.1,-17.2 0,-8.1 -7,-15.3 -15,-15.3 H 74.6 v 54.8 z"}],i["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 99.6,107.1 h -14.8 v 31.7 h 32 v -31.7 h -14.8 V 95.2 c 0,-0.6 6.5,-3 7.5,-3.4 1.3,-0.5 6.9,-3 7.9,-3 -0.3,-0.4 -14.7,-6.3 -15.7,-6.3 h -2.3 v 24.5 z m -3.1,-45 -5.6,14.8 1.7,0 1.3,-3.8 0.1,-0.1 0.1,0 6.8,0 0.1,0 0.1,0.1 1.3,3.8 1.7,0 -5.6,-14.8 -2.1,0 z m 0.8,1.8 0.2,0.1 0.2,-0.1 2.8,7.5 0.1,0.3 -0.3,0 -5.6,0 -0.3,0 0.1,-0.3 2.8,-7.5 z m -14.8,-1.8 8.3,0 0,1.3 -6.5,0 -0.2,0 0,0.2 0,4.5 0,0.2 0.2,0 5.8,0 0,1.3 -5.8,0 -0.2,0 0,0.2 0,7 -1.6,0 0,-14.8 z m 30.3,-0.3 c 0.9,1.5e-5 1.7,0.1 2.5,0.4 l 0,0 c 0.8,0.2 1.4,0.6 2.1,1 l 0,1.6 c -0.6,-0.5 -1.3,-0.9 -1.9,-1.2 -0.8,-0.3 -1.7,-0.5 -2.6,-0.5 -1.8,1.4e-5 -3.2,0.6 -4.1,1.7 -1,1.1 -1.4,2.7 -1.4,4.7 -1e-5,2 0.5,3.6 1.4,4.7 1,1.1 2.4,1.7 4.1,1.6 0.9,2e-6 1.8,-0.2 2.6,-0.5 0.7,-0.3 1.3,-0.7 1.9,-1.2 l 0,1.6 c -0.7,0.4 -1.4,0.8 -2.1,1 -0.8,0.2 -1.6,0.4 -2.5,0.4 -2.3,0 -4,-0.7 -5.3,-2 -1.3,-1.4 -1.9,-3.2 -1.9,-5.6 0,-2.4 0.6,-4.3 1.9,-5.6 1.3,-1.4 3,-2 5.3,-2 z"}],i["ATMOSPHERIC.IC.DRIZZLE.INTERMITTENT LIGHT"]=[{type:"path",stroke:!1,fill:"rgb(0, 128, 0)",d:"m 100,82.7 c -5.5,0 -10,4.5 -10,10 0,5.5 4.5,10 10,10 0.1,0 0.1,0 0.2,0 l -0.2,0.2 c 0.9,5 -8.4,14.4 -8.4,14.4 12.8,0.1 18.4,-13.4 18.3,-23.4 l -0,0 c 0,-0.4 0.1,-0.8 0.1,-1.2 0,-5.5 -4.5,-10 -10,-10 z"}],i["ATMOSPHERIC.IC.FOG.SKY OBSCURED"]=[{type:"path",stroke:!1,fill:"rgb(255, 247, 0)",d:"m 49.6,59.7 0,8 100.9,0 0,-8 -100.9,0 z m 0,71.6 0,8 100.9,0 0,-8 -100.9,0 z m 0,-35.6 0,8 100.9,0 0,-8 -100.9,0 z"}],i["ATMOSPHERIC.IC.HAIL.LIGHT NOT ASSOCIATED WITH THUNDER"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"m 100,45.5 -0.9,2.1 -16,36 -0.6,1.4 1.5,0 32,0 1.5,0 -0.6,-1.4 -16,-36 L 100,45.5 z m -21.4,46.7 0.4,1.3 20,60 0.9,2.9 0.9,-2.9 20,-60 0.4,-1.3 -1.4,0 -40,0 -1.4,0 z m 2.8,2 37.2,0 L 100,150 81.4,94.1 z"}],i["ATMOSPHERIC.IC.RAIN.INTERMITTENT LIGHT"]=[{type:"path",stroke:!1,fill:"rgb(0, 128, 0)",d:"m 100,79.8 c -11.2,0 -20.2,9 -20.2,20.2 0,11.2 9,20.2 20.2,20.2 11.2,0 20.2,-9 20.2,-20.2 0,-11.2 -9,-20.2 -20.2,-20.2 z"}],i["ATMOSPHERIC.IC.DUST OR SAND.LIGHT TO MODERATE"]=[{type:"path",stroke:!1,fill:"rgb(173, 105, 75)",d:"m 140.7,85 -2,2 13,13 -13,13 2,2 14,-14 1,-1 -1,-1 L 140.7,85 z m -93.5,13.6 0,2.8 106.5,0 0,-2.8 -106.5,0 z M 98.5,62.3 c -3.2,0 -6.4,0.8 -9.2,2.2 -3.7,1.8 -6.9,4.4 -9.3,7.3 -2.3,2.9 -3.9,6.1 -3.9,9.3 0,5.6 2.9,9.9 6.9,13.2 4,3.3 9,5.8 13.9,8.3 4.9,2.5 9.7,4.9 13.1,7.7 3.4,2.8 5.4,5.8 5.4,10.1 0,3.6 -4,9 -10,11.6 -6,2.6 -13.6,2.7 -20.9,-3.4 l -2.7,3.2 c 8.4,7.1 18,7.2 25.3,4 7.2,-3.1 12.5,-9.2 12.5,-15.4 0,-5.6 -2.9,-10 -6.9,-13.3 -4,-3.3 -9,-5.8 -13.9,-8.2 -4.9,-2.5 -9.7,-4.9 -13.1,-7.7 -3.4,-2.8 -5.4,-5.8 -5.4,-10 0,-1.7 1,-4.3 2.9,-6.7 1.9,-2.4 4.7,-4.7 7.8,-6.2 6.2,-3 13.5,-3.1 19.9,4.4 l 3.2,-2.7 C 109.5,64.4 103.9,62.3 98.5,62.3 z"}],i["ATMOSPHERIC.IC.SNOW.INTERMITTENT LIGHT"]=[{type:"path",stroke:!1,fill:"rgb(0, 128, 0)",d:"m 111.5,78.9 -26.4,40 3.3,2.2 26.4,-40 -3.3,-2.2 z m -23.1,0 -3.3,2.2 26.4,40 3.3,-2.2 -26.4,-40 z M 80,98 l 0,4 40,0 0,-4 -40,0 z"}],i["ATMOSPHERIC.IC.STORMS.THUNDERSTORM LIGHT TO MODERATE - WITH HAIL"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"M 101 51.9 L 99.7 54.4 L 85.8 82.3 L 84.8 84.3 L 87 84.3 L 114.9 84.3 L 117.2 84.3 L 116.2 82.3 L 102.2 54.4 L 101 51.9 z M 101 58.1 L 112.7 81.5 L 89.3 81.5 L 101 58.1 z M 78.3 87.7 L 78.3 90.5 L 83.9 90.5 L 83.9 145 L 86.7 145 L 86.7 90.5 L 117.8 90.5 L 102.8 116.4 L 102.4 117.1 L 102.9 117.8 L 117.8 140.9 L 111.2 136.8 L 109.8 139.2 L 120.9 146.2 L 123.3 147.7 L 123 144.9 L 121.7 130.9 L 118.9 131.2 L 119.6 138.6 L 105.7 117 L 121.5 89.8 L 122.7 87.7 L 120.3 87.7 L 78.3 87.7 z "}],i["ATMOSPHERIC.IC.STORMS.FUNNEL CLOUD (TORNADO/WATERSPOUT)"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"M 125.7,59.1 112.4,72.4 112,72.8 l 0,0.6 0,53.3 0,0.6 0.4,0.4 13.3,13.3 1.9,-1.9 -12.9,-12.9 0,-52.2 12.9,-12.9 -1.9,-1.9 z m -51.5,0 -1.9,1.9 12.9,12.9 0,52.2 L 72.4,139.1 74.3,140.9 87.6,127.6 88,127.2 l 0,-0.6 0,-53.3 0,-0.6 L 87.6,72.4 74.3,59.1 z"}],i["ATMOSPHERIC.IC.TROPICAL STORM SYSTEMS.TROPICAL STORM"]=[{type:"path",stroke:!1,fill:"rgb(198, 16, 33)",d:"M 112.1 55 C 96.9 59.9 76.7 81.8 82.2 101.4 C 82.9 110.6 90.6 117.9 100 117.9 C 100 117.9 100 117.9 100.1 117.9 C 99.3 128.2 87.9 145 87.9 145 C 103.1 140.1 123.3 118.2 117.8 98.6 C 117.1 89.4 109.4 82.1 100 82.1 C 100 82.1 100 82.1 99.9 82.1 C 100.7 71.8 112.1 55 112.1 55 z M 100 84.5 C 106.8 84.5 112.5 88.8 114.6 94.8 C 114.8 95.2 114.9 95.6 115 96 C 115 96.1 115 96.1 115 96.2 C 115.1 96.6 115.2 96.9 115.3 97.3 C 115.4 98.1 115.5 99.1 115.5 100 C 115.5 101.1 115.4 102.1 115.2 103.1 C 115 104.1 114.7 105 114.4 105.8 C 114.4 105.9 114.3 105.9 114.3 106 C 114.1 106.4 114 106.7 113.8 107.1 C 113.7 107.2 113.7 107.3 113.7 107.3 C 113.6 107.4 113.6 107.5 113.5 107.6 C 113.3 107.9 113.1 108.3 112.9 108.6 C 112.4 109.3 111.9 110 111.3 110.6 C 111.2 110.7 111.1 110.8 111.1 110.9 C 110.8 111.1 110.5 111.4 110.3 111.6 C 110.2 111.7 110.2 111.7 110.1 111.8 C 109.8 112 109.5 112.3 109.2 112.5 C 109.1 112.5 109.1 112.5 109.1 112.5 C 108.9 112.7 108.6 112.9 108.4 113 C 108.1 113.2 107.8 113.4 107.5 113.6 C 107.4 113.6 107.4 113.6 107.4 113.7 C 106.6 114.1 105.7 114.4 104.9 114.7 C 104.7 114.8 104.5 114.8 104.3 114.9 C 104 115 103.6 115.1 103.3 115.2 C 103.2 115.2 103.1 115.2 103.1 115.2 C 102.1 115.4 101.1 115.5 100 115.5 C 93.3 115.5 87.6 111.3 85.4 105.3 C 85.4 105.3 85.4 105.2 85.4 105.2 C 85.3 104.8 85.2 104.5 85.1 104.2 C 85 104 85 103.9 85 103.8 C 84.9 103.5 84.8 103.2 84.8 102.9 C 84.7 102.5 84.6 102 84.6 101.6 C 84.5 101.1 84.5 100.5 84.5 100 C 84.5 99 84.6 98 84.8 97 C 84.8 97 84.8 96.9 84.8 96.9 C 84.9 96.4 85 96 85.2 95.6 C 85.3 95.2 85.4 94.9 85.5 94.5 C 85.6 94.3 85.6 94.2 85.7 94 C 85.7 93.9 85.8 93.8 85.8 93.8 C 86 93.4 86.2 93 86.3 92.7 C 86.4 92.6 86.4 92.5 86.5 92.4 C 86.7 92.1 86.9 91.7 87.1 91.4 C 87.3 91.1 87.5 90.8 87.8 90.5 C 88 90.2 88.2 90 88.4 89.7 C 88.6 89.5 88.8 89.3 88.9 89.1 C 89 89 89.1 89 89.2 88.9 C 89.4 88.7 89.7 88.4 89.9 88.2 C 90.2 88 90.5 87.8 90.8 87.5 C 90.8 87.5 90.9 87.5 90.9 87.5 C 91.1 87.3 91.4 87.1 91.6 87 C 91.9 86.8 92.2 86.6 92.5 86.4 C 92.6 86.4 92.6 86.4 92.6 86.3 C 93.1 86.1 93.5 85.9 94 85.7 C 94.4 85.6 94.7 85.4 95.1 85.3 C 95.3 85.2 95.5 85.2 95.7 85.1 C 96 85 96.4 84.9 96.8 84.8 C 96.8 84.8 96.8 84.8 96.9 84.8 C 96.9 84.8 96.9 84.8 96.9 84.8 C 97.4 84.7 97.9 84.6 98.4 84.6 C 98.9 84.5 99.5 84.5 100 84.5 z "}],i["AC.IC.EMT STATION LOCATION"]=[{type:"path",stroke:!1,d:"M 100 55 L 70 80 L 75 80 L 75 125 L 125 125 L 125 80 L 130 80 L 100 55 z M 95 80 L 105 80 L 105 91.3 L 114.8 85.7 L 119.8 94.3 L 110 100 L 119.8 105.7 L 114.8 114.3 L 105 108.7 L 105 120 L 95 120 L 95 108.7 L 85.2 114.3 L 80.2 105.7 L 90 100 L 80.2 94.3 L 85.2 85.7 L 95 91.3 L 95 80 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"M 95 80 L 95 91.3 L 85.2 85.7 L 80.2 94.3 L 90 100 L 80.2 105.7 L 85.2 114.3 L 95 108.7 L 95 120 L 105 120 L 105 108.7 L 114.8 114.3 L 119.8 105.7 L 110 100 L 119.8 94.3 L 114.8 85.7 L 105 91.3 L 105 80 L 95 80 z "}],i["AC.IC.HEALTH DEPARTMENT FACILITY"]=[{type:"path",stroke:!1,d:"M 131.4,83.6 100,68.4 68.5,83.5 z m -26.4,14.6 0,-9.7 -10.1,0 0,9.7 -9.5,0 0,10.4 9.5,0 0,9.5 10.1,0 0,-9.5 9.6,0 0,-10.4 z m -27.2,19.5 0,-27.8 1.4,0 0,-3.7 -7.3,0 0,3.7 1.2,0 0,27.8 -1.2,0 0,3.8 7.3,0 0,-3.8 z m 48.7,0 0,-27.8 1.4,0 0,-3.7 -7.3,0 0,3.7 1.2,0 0,27.8 -1.2,0 0,3.8 7.3,0 0,-3.8 z m -56.4,5.1 0,3 59.4,0 0,-3 z m -1.8,6.1 0,2.8 63.2,0 0,-2.8 z"}],i["AC.IC.MEDICAL FACILITIES OUTPATIENT"]=[{type:"path",stroke:!1,d:"m 81.8,63.6 26.6,9 0,63.9 -26.6,-9.1 v -63.8 l 0,0 z m -1.6,65 29.9,10.4 v -10.6 h 9.8 V 61 H 80.2 v 67.6 l 0,0 z m 21.4,-18.1 c 0,1.1 1,2.6 2.2,2.6 0.8,0 1.2,-0.8 1.2,-1.6 v -0.4 c 0,-1.2 -1.1,-3 -2,-3 -0.8,0 -1.4,0.8 -1.4,1.6 v 0.8 H 101.5 z M 85.9,90.9 c 0.9,0.1 5.3,1.8 5.3,2.4 v 7.1 l 5.7,2.2 v -7.5 l 5.5,1.9 V 89.1 C 101.5,88.8 96.9,87.2 96.9,86.6 V 79.5 L 91.2,77.6 v 7.4 l -5.3,-2 v 7.9 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 81.8 63.6 L 81.8 127.4 L 108.4 136.6 L 108.4 72.7 L 81.8 63.6 z M 91.2 77.6 L 96.9 79.5 L 96.9 86.6 C 96.9 87.2 101.5 88.9 102.3 89.1 L 102.3 97 L 96.8 95.2 L 96.8 102.6 L 91.1 100.4 L 91.1 93.3 C 91.1 92.6 86.8 91 85.9 90.9 L 85.9 83 L 91.2 85 L 91.2 77.6 z M 102.9 108.1 C 103.9 108.1 105 109.9 105 111.2 L 105 111.6 C 105 112.4 104.6 113.2 103.8 113.2 C 102.5 113.2 101.5 111.6 101.5 110.6 L 101.5 110.6 L 101.5 109.8 C 101.5 108.9 102.1 108.1 102.9 108.1 z "}],i["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]=[{type:"path",stroke:!1,d:"m 73.7,89.7 c 0.4,4.9 2.3,11.3 3.4,15.6 1.4,5.7 3.5,8.7 6.1,13.1 2.2,3.6 3.4,9.6 5.6,13.4 0.7,1.3 2.8,5.3 3.6,6 0.5,0.4 5.5,4 5.6,4 1.6,0 9.7,-0.4 10.4,-0.7 0.3,-0.1 4.1,-6.6 4.1,-7 v -3 h -7.8 c -2.7,0 -5.6,-1.3 -8.4,-1.3 V 112.6 c 0,-2.4 1.3,-17.3 2.1,-18 0.8,-0.7 11.4,-8.2 11.9,-8.3 l -1,-8.5 c -0.5,0.2 -5.6,1 -6,0.9 -1,-0.2 -4.7,-1.4 -5.5,-1.8 -1.9,1.1 -4.4,1.8 -6.5,2.7 -1.6,0.7 -3.5,2.7 -5.5,3.7 -2.4,1.2 -3.9,1.7 -6.7,2.5 -1.6,0.4 -2.4,0.4 -3.3,1.5 -0.7,0.8 -1.7,1.8 -2.2,2.5 z m 27.8,36.1 c 0,-8.1 2,-16.8 1.9,-24.8 0,-1.2 0.2,-1.9 0.2,-3.2 0,-1.4 0.4,-1.4 1.2,-2.2 1.2,-1.1 2.4,-2 3.6,-3 2.1,-1.7 5,-4.8 7.1,-6.1 0.3,0.1 0.3,0.2 0.9,0.2 h 4.9 c 0.2,0.8 4.9,6.4 5.8,7.4 2.6,3.1 3.8,3.9 2.9,9.6 -0.5,3.2 -0.7,8.6 -1,12 -0.3,4 -0.9,8.1 -0.9,12.2 l -26.7,-2.2 z m -1.7,1.3 29.8,2.2 2.4,-31.4 -9.8,-12.6 -7.2,-0.3 c -0.2,0 -6.9,5.9 -7.8,6.5 -1.4,1.1 -2.5,2.3 -3.9,3.2 -1.7,1.2 -1.2,3.3 -1.4,5.9 -0.6,8.4 -2.1,18.1 -2.1,26.5 z m 12.8,-9 0.2,0 c 2.3,0 6.5,2.8 8.1,2.8 h 3 V 119.4 H 121.4 c -0.6,0 -6.1,-2.3 -7.2,-2.7 -1.5,-0.6 -6.6,0.3 -8.6,0.3 v 1.3 l 7.1,-0.3 z m -5.6,-7.9 0.2,1.5 c 3.1,-0.7 5.6,-1.4 8.7,-0.8 1.3,0.3 2.8,0.6 4.2,0.9 2.5,0.6 2.8,1.2 3.3,-1 -1.3,0 -6.8,-1.3 -8.4,-1.7 -2.5,-0.7 -5.5,0.4 -8.1,1.1 z m -0.2,-8.1 0.5,1.4 5.7,-1.9 5,3.7 8,-1 -0.3,-1.7 -7.3,1 c -0.8,-0.6 -4.7,-3.6 -5.3,-3.6 -0.5,0 -5.6,1.9 -6.2,2.2 z m 10.7,-7.3 h 1.1 c 1.2,0 2.5,-1.3 2.5,-2.5 v -0.4 c 0,-1.4 -1.6,-2.5 -3,-2.5 -4.4,-0 -3.6,5.5 -0.6,5.5 z M 67.9,81.8 c 0,1.5 3.2,4.4 4.2,5.1 l 1.5,-1.6 -2.1,-4.7 h -2.2 c -0.5,0 -1.5,1.1 -1.5,1.2 z M 110.2,70.5 c 0.8,0.4 2.4,0.8 2.4,1.9 0,0.9 -0.5,1.4 -0.6,2.1 l -2.6,-0.4 c -1,-0.1 -4.2,0.6 -5.8,0.6 v 1.1 c 0,1.1 4,0 5.6,0 h 0.4 c 1.7,0 5.4,1.2 6.2,1.9 0.5,0.5 1.4,5.2 1.9,6.2 1.8,-0.9 1.3,-0.5 0.6,-3.2 -0.3,-0.9 -1.1,-3.1 -1.1,-4 l -3.9,-1.6 1.2,-2.3 c -1.1,-2.1 -0.8,-3.6 -4,-3.6 l -0.3,1.2 z m -36.5,6.6 c 0,0.9 2,4.6 2.2,6 0.3,0.1 1.1,0.4 1.1,0.4 0.3,0 2.1,-0.9 2.8,-1.1 -0.7,-3.1 -1.7,-6.6 -4.3,-7.9 -0.2,0.7 -1.7,2.3 -1.7,2.5 z m 5.9,-3.6 c 1.9,4.1 0.4,3.7 4.2,7 l 2.4,-1.2 v -3.8 c 0,-1.5 -1.2,-3.6 -1.3,-5.3 l -1.9,-0.2 h -1.7 l -1.6,3.7 z m 7.6,-2.8 2.5,5 3.9,-0.8 c 0,-1 0.6,-2.5 0.6,-3.4 0,-2.2 -1.1,-4.7 -1.1,-6.9 H 88.5 l -1.3,6 z M 97.8,62.8 c 0,0.6 0.2,7.2 0.3,7.4 0.3,1 3.7,2.6 5.5,2.4 0.9,-0.1 2.5,-0.3 3.5,-0.4 1.8,-0.2 1.2,-0.6 1.5,-2.6 0.2,-1.9 0.6,-4.9 1.1,-6.8 -0.4,-0.8 -2.4,-4.7 -3.2,-4.7 h -5.1 c -0.7,0 -3,4 -3.5,4.7 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 115.6 86.6 C 113.5 88 110.6 91 108.5 92.7 C 107.3 93.7 106 94.6 104.8 95.7 C 104 96.4 103.6 96.5 103.6 97.8 C 103.6 99.2 103.4 99.9 103.4 101.1 C 103.5 109.1 101.5 117.8 101.5 125.9 L 128.2 128 C 128.2 124 128.8 119.9 129.1 115.8 C 129.3 112.4 129.6 107.1 130.1 103.8 C 131 98.1 129.8 97.3 127.2 94.2 C 126.3 93.1 121.6 87.6 121.4 86.8 L 116.5 86.8 C 115.9 86.8 115.9 86.7 115.6 86.6 z M 118.2 89.3 C 119.5 89.3 121.1 90.4 121.1 91.9 L 121.1 92.3 C 121.1 93.6 119.8 94.9 118.6 94.9 L 117.5 94.9 C 114.5 94.9 113.8 89.3 118.2 89.3 z M 113.1 100 C 113.7 100 117.6 103.1 118.4 103.7 L 125.7 102.6 L 126 104.3 L 118 105.3 L 113 101.6 L 107.3 103.6 L 106.9 102.2 C 107.5 101.9 112.5 100 113.1 100 z M 113.2 109 C 113.9 109 114.5 109.1 115.2 109.2 C 116.7 109.6 122.2 110.9 123.5 110.9 C 123 113 122.7 112.4 120.2 111.8 C 118.8 111.5 117.3 111.2 116 110.9 C 112.8 110.3 110.4 111 107.3 111.8 L 107.1 110.3 C 109 109.8 111.2 109.1 113.2 109 z M 112.5 116.5 C 113.2 116.5 113.8 116.6 114.2 116.8 C 115.2 117.1 120.8 119.4 121.4 119.4 L 123.9 119.4 L 123.9 121 L 121 121 C 119.4 121 115.1 118.2 112.9 118.2 L 112.6 118.2 L 105.6 118.4 L 105.6 117.1 C 107.1 117.1 110.4 116.5 112.5 116.5 z"}],i["AC.IC.TRIAGE"]=[{type:"path",stroke:!1,d:"M 91.6 69 C 87.3 69 83.6 71.5 83.6 75.3 L 83.6 83.3 L 80.5 83.3 C 74 83.3 73.6 88.1 71.2 91.5 C 69.3 94.3 63 94.4 63 100.9 L 63 131 L 137 131 L 137 102.6 C 137 99.5 136.2 97.3 134.7 95.6 C 133.2 94 130.8 93.6 129.1 92 C 126 88.8 126.9 83.3 119.1 83.3 L 116.2 83.3 L 116.2 75.5 C 116.2 71.3 112.9 69 108.4 69 L 91.6 69 z M 89.9 76 L 110.1 76 L 110.1 83.3 L 89.9 83.3 L 89.9 76 z M 95.3 90.4 L 104.4 90.4 L 104.4 99.4 L 112.2 94.9 L 116.8 102.8 L 109.1 107.3 L 116.8 111.9 L 112.1 119.8 L 104.4 115.3 L 104.4 124.1 L 95.3 124.1 L 95.3 115.3 L 87.6 119.7 L 83 111.8 L 90.7 107.3 L 83 102.8 L 87.6 94.9 L 95.3 99.3 L 95.3 90.4 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"m 112.1,119.8 4.6,-7.9 -7.6,-4.6 7.7,-4.5 -4.6,-7.9 -7.7,4.4 -0,-8.9 -9.1,0 0,8.9 -7.7,-4.4 -4.5,7.9 7.6,4.5 -7.6,4.5 4.5,7.9 7.7,-4.4 0,8.8 9.1,0 0,-8.8 z"}],i["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]=[i["GR.IC.FF.EMERGENCY OPERATION"],a("i")],i["AC.IC.FIRE HYDRANT"]=[{type:"path",stroke:!1,d:"m 80,131.3 v -1 c 1.3,0.1 5.7,1.8 7.7,2.2 2.8,0.6 5.8,1 9.1,1 h 6.5 c 3.4,0 6.1,-0.4 8.9,-1 2,-0.4 6.5,-2.1 7.7,-2.2 v 1 c 0,2.9 -12.5,4.5 -16.6,4.5 h -6.4 c -4.1,0 -16.9,-1.6 -16.9,-4.5 l 0,0 z m 17.9,-43.4 4.5,0.1 12.4,0.4 v 8.3 h 6.3 v 11.9 h -6.3 v 17.4 l 4.5,1.3 c -1.2,1.6 -12.2,3.3 -15.8,3.3 h -6.4 c -3.5,0 -15,-1.8 -16,-3.2 l 4.6,-1.6 0.1,-17.2 h -6.3 V 96.7 h 6.3 v -8.3 l 12.4,-0.4 0,0 z m 25.7,5.9 h 3 v 6.7 h 3.2 v 3.9 h -3.2 v 6.7 h -3 V 93.8 z m -50,0 h 2.9 v 17.2 h -2.9 v -6.7 h -3.5 v -3.9 h 3.4 V 93.8 h 0.1 z m 26.1,-8.3 c -5.2,0 -9.7,0.2 -14.8,0.2 -4.4,0 -3.5,-2.6 -1.8,-2.8 2.1,-0.3 4.9,-0.1 6.9,-0.4 5.3,-0.8 23.6,-0.3 28.1,0.8 0.2,1.8 0.4,1.5 -1,2.4 l -15.8,-0.2 -1.6,0.1 z m -1,-21.1 h 2.9 v 3.8 h 2 v 1.8 c 3.2,0.7 5.3,1.1 7.4,3.1 1.3,1.3 3.5,4.3 3.7,6.7 l -10.4,-0.3 -9.9,0.1 0.2,-0.1 -9.1,0.5 c 0.4,-4.7 5.2,-9.7 10.4,-9.7 h 0.8 v -2 h 2 v -3.8 z m -2.6,1.2 h -2 v 2.2 c -5.7,0.5 -10.6,6.6 -11.1,12.5 -2.2,0.2 -2.3,1.3 -3.4,2.1 l -0.2,1.6 c -0.3,2.2 2,3.9 3.6,4.3 v 5.5 h -3.6 v -2.4 h -8.3 v 6.7 h -3.2 V 107 h 3.2 v 6.3 h 8.3 v -2.4 h 3.6 V 123.8 c -2.3,0.6 -5.5,2 -5.5,4.9 v 2 c 0,6.3 12.9,7.7 19.8,7.7 h 5.9 c 6.9,0 19.4,-1.2 19.4,-7.7 v -2 c 0,-2.8 -3,-4.3 -5.3,-4.9 v -12.9 h 3.6 v 2.4 h 8.1 V 107 h 3.2 v -9.1 h -3.2 v -6.4 h -8.1 v 2.4 h -3.6 v -5.5 c 1.6,-0.3 3.6,-1.8 3.6,-3.8 0,-2.2 -1.6,-3.9 -3.6,-4 -0.5,-5.9 -5.7,-12.1 -11.4,-12.6 v -2.2 h -2 V 61.6 h -7.9 v 4 z m 2.9,47.2 c -4,0 -8.3,-5 -8.1,-9.3 0.2,-4.4 4.2,-9 8.3,-9 h 2 c 4.2,0 8.3,4.7 8.3,9.1 0,4.3 -4,9.1 -8.1,9.1 h -2.4 l 0,0 z m -10.5,-9.9 v 1.8 c 0,5.2 5.4,10.8 10.5,10.8 h 2.4 c 5.6,0 10.8,-5.8 10.8,-11.8 0,-6 -5.3,-11.8 -10.9,-11.8 h -2.1 C 93.7,92 88.4,97.5 88.4,103 l 0,0 z m 9.5,0.8 c 0.3,-0.6 0.8,-1.8 1.4,-1.8 h 1.4 c 0.7,0 1.4,1.3 1.4,2 0,0.1 -0.9,1.6 -1.4,1.6 h -1.4 c -0.6,0.1 -1.1,-1.2 -1.4,-1.8 z m -2.9,0 2.2,4.3 h 5 c 0.7,0 2.4,-3.6 2.9,-4.3 l -2.4,-4.5 h -4.9 c -0.8,0.1 -2.5,3.7 -2.9,4.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 97.9,103.8 c 0.3,-0.6 0.8,-1.8 1.4,-1.8 h 1.4 c 0.7,0 1.4,1.3 1.4,2 0,0.1 -0.9,1.6 -1.4,1.6 h -1.4 c -0.6,0.1 -1.1,-1.2 -1.4,-1.8 z m 1.2,-9.1 c -4.1,0 -8.1,4.6 -8.3,9 -0.2,4.3 4.1,9.3 8.1,9.3 l 2.4,0 c 4,0 8.1,-4.9 8.1,-9.1 0,-4.4 -4.1,-9.1 -8.3,-9.1 l -2,0 z m -1.2,4.7 4.9,0 2.4,4.5 c -0.4,0.7 -2.1,4.3 -2.9,4.3 l -5,0 -2.3,-4.3 c 0.4,-0.8 2.1,-4.4 2.9,-4.5 z M 98.7,64.5 h 2.9 v 3.8 h 2 v 1.8 c 3.2,0.7 5.3,1.1 7.4,3.1 1.3,1.3 3.5,4.3 3.7,6.7 l -10.4,-0.3 -9.9,0.1 0.2,-0.1 -9.1,0.5 c 0.4,-4.7 5.2,-9.7 10.4,-9.7 h 0.8 v -2 h 2 v -3.8 z m 1,21.1 c -5.2,0 -9.7,0.2 -14.8,0.2 -4.4,0 -3.5,-2.6 -1.8,-2.8 2.1,-0.3 4.9,-0.1 6.9,-0.4 5.3,-0.8 23.6,-0.3 28.1,0.8 0.2,1.8 0.4,1.5 -1,2.4 l -15.8,-0.2 -1.6,0.1 z m -26.1,8.3 h 2.9 v 17.2 h -2.9 v -6.7 h -3.5 v -3.9 h 3.4 V 93.8 h 0.1 z m 50,0 h 3 v 6.7 h 3.2 v 3.9 h -3.2 v 6.7 h -3 V 93.8 z m -25.7,-5.9 -12.4,0.4 0,8.3 -6.3,0 0,11.9 6.3,0 -0.1,17.3 -4.6,1.6 c 1.1,1.5 12.5,3.3 16,3.3 l 6.4,0 c 3.6,0 14.7,-1.7 15.8,-3.3 l -4.5,-1.3 0,-17.4 6.3,0 0,-11.9 -6.3,0 0,-8.3 -12.4,-0.4 -4.5,-0.1 z m 1.2,4.2 2.1,0 c 5.7,0 10.9,5.8 10.9,11.8 0,5.9 -5.2,11.8 -10.8,11.8 l -2.4,0 c -5.2,0 -10.5,-5.6 -10.5,-10.8 l 0,-1.8 c 0,-5.5 5.3,-11 10.7,-10.9 z M 80,131.3 v -1 c 1.3,0.1 5.7,1.8 7.7,2.2 2.8,0.6 5.8,1 9.1,1 h 6.5 c 3.4,0 6.1,-0.4 8.9,-1 2,-0.4 6.5,-2.1 7.7,-2.2 v 1 c 0,2.9 -12.5,4.5 -16.6,4.5 h -6.4 c -4.1,0 -16.9,-1.6 -16.9,-4.5 l 0,0 z"}],i["AC.IC.OTHER WATER SUPPLY LOCATION"]=[{type:"path",stroke:!1,d:"m 113.2,116.5 c 0,-2.9 4.4,-9.3 5.8,-11.8 2.8,-5 3.1,-6.8 4.6,-13 2.1,1.4 2.2,4.3 3,7.1 0.8,2.8 1.6,4.8 2.9,7 2.2,3.8 6.7,8 5,14.1 -1.6,5.8 -5.2,7.8 -12.2,7.5 -5.8,-0.2 -9.1,-4.9 -9.1,-11 z m -1.2,-0.4 v 0.6 c 0,7.5 4.6,12.2 12,12.2 6.8,0 12,-4.6 12,-11 v -1.3 c 0,-5 -4.7,-10 -6.6,-13.8 -1.1,-2.2 -1.6,-5.5 -2.3,-8.1 -0.9,-3.3 -2.4,-4 -4.8,-5.6 0,13.6 -10.3,20 -10.3,26.8 z m 4.8,3.6 c 0,2.4 1.8,4.4 3.8,4.4 0.7,0 1.5,-0.6 1.7,-1.3 -1.6,-0.4 -3.2,-2.5 -3.4,-4.4 l -2.1,1.3 z M 89.2,73 v 15.8 h -2.1 v -15.8 l 0.6,-0.1 1.5,0.1 z m -10.4,2.3 h 6.6 v 11 H 78.8 v -11 z m 37.2,1.1 c 0,-0.5 0.2,-0.6 0.6,-0.6 h 1.5 c 0.5,0 0.6,0.2 0.6,0.6 v 9.1 h -2.8 v -9.1 z m -24.9,-1.3 22.8,2.4 v 6.5 l -22.8,1.9 v -10.7 z m -27,11.8 h 12.9 v 1 l 8.3,0.1 1.2,2.4 1.6,0.3 c 0.6,0.1 1,-0.2 1.8,-0.3 l 0.9,-0.6 0.2,-2.4 22.8,-1.6 c 1.2,2.5 4.2,1.6 6.6,1 0,-0.7 0.2,-0.8 0.2,-1.5 v -9.5 c 0,-1.5 -0.8,-2.1 -2.3,-2.1 h -2.1 c -3.8,0 0.2,2.5 -5,1.6 -2.1,-0.4 -4.6,-0.4 -6.7,-0.7 -3.3,-0.5 -10.4,-1.3 -13.5,-1.3 -0.1,-3.1 -5.6,-3.3 -5.7,0.4 h -8.4 v 0.6 h -13 l 0.1,12.4 0,0 z m 15.6,-4.8 0,1.9 4.6,0 0,-1.9 z m 0,-4.2 0,1.7 4.6,0 0,-1.7 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 91,75.1 22.8,2.4 v 6.5 l -22.8,1.9 v -10.7 z m 24.9,1.3 c 0,-0.5 0.2,-0.6 0.6,-0.6 h 1.5 c 0.5,0 0.6,0.2 0.6,0.6 v 9.1 h -2.8 v -9.1 z M 78.8,75.3 l 0,11 6.6,0 0,-11 -6.6,0 z m 0.8,2.6 4.7,0 0,1.7 -4.7,0 0,-1.7 z m 0,4.2 4.7,0 0,1.9 -4.7,0 0,-1.9 z M 123.5,91.8 c -1.4,6.2 -1.8,8 -4.6,13 -1.3,2.5 -5.8,8.9 -5.8,11.8 0,6.1 3.3,10.8 9.1,11 7,0.2 10.5,-1.7 12.2,-7.5 1.7,-6.1 -2.8,-10.3 -5,-14.1 -1.3,-2.2 -2,-4.3 -2.9,-7 -0.8,-2.8 -0.9,-5.7 -3,-7.1 z m -4.6,26.7 c 0.2,1.9 1.8,4 3.4,4.4 -0.2,0.6 -1,1.3 -1.7,1.3 -2,0 -3.8,-2.1 -3.8,-4.4 l 2.1,-1.3 z M 89.2,73 v 15.8 h -2.1 v -15.8 l 0.6,-0.1 1.5,0.1 z"}],i["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]=a("€$£"),i["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 87.9,87.3 c -3.2,0 -5.8,2.6 -5.8,5.8 0,2.8 2.1,5.2 4.8,5.7 l 0,3.3 -3.8,0 0,2 3.8,0 0,9.4 2,0 0,-9.4 3.8,0 0,-2 -3.8,0 0,-3.3 c 2.7,-0.5 4.8,-2.8 4.8,-5.7 0,-3.2 -2.6,-5.8 -5.8,-5.8 z m 24,0 c -3.2,0 -5.8,2.6 -5.8,5.8 0,2.8 2.1,5.2 4.8,5.7 l 0,3.3 -3.8,0 0,2 3.8,0 0,9.4 2,0 0,-9.4 3.8,0 0,-2 -3.8,0 0,-3.3 c 2.7,-0.5 4.8,-2.8 4.8,-5.7 0,-3.2 -2.6,-5.8 -5.8,-5.8 z m -24,2 c 2.1,0 3.8,1.7 3.8,3.8 0,2.1 -1.7,3.8 -3.8,3.8 -2.1,0 -3.8,-1.7 -3.8,-3.8 0,-2.1 1.7,-3.8 3.8,-3.8 z m 24,0 c 2.1,0 3.8,1.7 3.8,3.8 0,2.1 -1.7,3.8 -3.8,3.8 -2.1,0 -3.8,-1.7 -3.8,-3.8 0,-2.1 1.7,-3.8 3.8,-3.8 z m 24.2,37.8 0,-3 -72.1,0 0,3 z m -3,-6.2 0,-2.8 -66.2,0 0,2.8 z M 66.8,98.2 c 0,1.3 -0.7,2.6 -0.7,4.3 -0,1.8 -0.2,3.1 -0.2,5 v 3.2 l 0.6,3.6 h 2.7 l -0.8,-6.4 v -1.8 c 0,-8.1 5,-17.9 9.3,-21.5 5.6,-4.6 11.6,-9.1 21.7,-9.1 h 0.9 c 9,0 17.1,4.4 21.6,8.8 3.2,3.2 4.1,4.7 6.4,8.7 1.4,2.4 3.3,8.4 3.3,12 v 4.3 c 0,1.4 -0.7,3 -0.7,4.4 v 0.5 h 2.7 l 0.6,-6.4 v -3.8 c 0,-1.6 -1,-5.2 -1.4,-6.6 -0.8,-2.5 -1.3,-3.6 -2.3,-5.7 -1.8,-3.8 -3.8,-6.4 -6.7,-9.3 -4.6,-4.6 -13.6,-9.6 -22.6,-9.6 h -2.5 c -7.8,0 -16.6,4.1 -20.6,7.9 -2.8,2.7 -4.4,4.1 -6.7,7.5 -1.1,1.6 -1.5,3 -2.5,4.6 -0.9,1.6 -1.2,4 -2,5.2 z"}],i["GR.IN.IC.RECREATIONAL AREA"]=[{type:"path",stroke:!1,d:"m 96.4,78.8 8.1,-0 c 0.9,0 2.4,5.7 2.4,6.9 l 1.5,4.3 c 0,0.4 2,6.6 2,7 v 0.6 l -19.4,-0 5.4,-18.8 z m -19.9,-0 11.1,0 -3.5,11.2 c 0,1.7 -1.9,5.7 -1.9,6.9 v 0.6 h -20.8 v 7.2 l 18.5,0 -1.2,3 -0.1,0.8 -2.6,8.3 -3.6,11.5 c 1.1,0 9.3,0.1 9.7,-0.1 0.2,-0.1 2,-6.8 2.3,-7.7 0.5,-1.2 4.5,-15 4.5,-15.2 v -0.6 l 23.5,0 6.7,23.6 9.8,0 -1.4,-4.8 -0.7,-2.6 -2.4,-7.8 -0.9,-2.8 -1.7,-5.7 h 15.8 v -7.2 h -18.2 l -2.9,-8.9 -0.1,-0.8 -1,-3 -1.7,-6.2 h 10.6 v -7.2 h -47.9 v 7.2 l 0,0 0,0 z m 62.1,16.9 0,-6.1 -15.2,0 0,6.1 z m -62.3,0 0,-6.1 -14.9,0 0,6.1 z"}],i["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 73.1,111.2 c 0,-3.8 1,-5.8 2.3,-8.4 1.4,-2.8 3.3,-3.8 4.6,-5.8 l -1.1,-8.2 c -2.6,0.7 -7.7,6.5 -9.2,9 -2.4,4.1 -3.8,7.9 -3.8,14.2 v 3.3 c 0,2.2 2.2,8.1 3.1,9.6 2,3.2 3,4.5 5.5,7.1 3.6,3.6 10.7,7.1 17.9,7.1 h 1 c 4.9,0 9.9,-1.6 13.1,-3.6 1.7,-1 8.5,-6.2 8.5,-7.8 0,-1.2 -3.1,-6.6 -3.5,-8.4 -1.2,1.5 -1.6,3 -3,4.8 -1.2,1.5 -2.3,2.7 -3.8,3.8 -2.6,2 -6.8,4 -11.3,4 h -1.2 c -10.2,0 -19.1,-9 -19.1,-19.3 v -1.4 l 0,0 z m 8.9,-37.9 c 0.5,0.4 0.5,2.9 0.5,4 L 85,106.8 l 25.4,0 10,23 c 1.5,-0.1 5.5,-1.5 7.1,-2.1 1.2,-0.4 6.5,-1.4 6.5,-2.6 v -0.2 c 0,-0.7 -1.9,-4.8 -2,-6.3 l -7.6,2.6 -9,-21.6 H 91.6 l -0.4,-6 h 17.3 v -5.4 H 90.8 l -1.1,-12.9 c 2.6,-0.2 5.2,-3.9 5.2,-6.7 v -2.2 h -0.5 v -0.8 c 0,-0.8 -2.1,-3.1 -2.7,-3.5 -1,-0.7 -3.3,-1.6 -4.8,-1.3 -2.2,0.4 -3.2,0.8 -4.4,2 -0.7,0.7 -2.2,3.2 -2.2,4.3 v 1.2 c 0,2.4 0.8,3.6 1.7,4.9 l 0,0 z m 0.5,4 c 0,-1.1 0,-3.6 -0.5,-4 0,1.1 -0,3.6 0.5,4 z"}],i["GR.IN.IC.ADULT DAY CARE"]=[{type:"path",stroke:!1,d:"m 107,118.3 v -0.2 c 0,-15.5 22.4,-14.7 22.4,-0.6 v 1.3 c 0,5.4 -5.3,10.4 -10.8,10.4 h -0.6 c -5.9,0 -11,-5.1 -11,-11 z m -1.6,-22.2 h 4.6 v 10 c 0,0 -3.2,3.3 -3.8,4.3 -0.5,0.8 -2.2,4.7 -2.2,5.8 v 2.3 c 0,6.8 6.6,13.7 13.3,13.7 h 1 c 5.8,0 10.8,-5 11,-5 h 7.1 v -1.9 h -3.2 c 0.2,-0.5 0.8,-1.3 0.8,-1.9 v -11 c 0,-1.9 -1,-3.3 -2.1,-4 h -3.3 l -0.8,-0.7 c 1.1,-0.3 2,-0.9 2,-2.2 v -0.4 c 0,-0.5 -1,-1.7 -1.6,-1.7 h -5 v -5.4 c 0,-2.7 -1.5,-4.2 -4.2,-4.2 h -2.1 c -5.9,0 -4.6,5.8 -4.6,11.6 l -0.6,0.4 V 94.7 c -0.4,-0.2 -0.4,-0.4 -0.8,-0.4 h -5.4 v 1.7 z m -22.6,1 c 0,-2.2 3.3,-4.8 4.5,-6.6 1.4,1 1.4,1.8 3.4,2.8 1.4,0.7 2.6,1.4 4,1.9 2.4,0.9 2.2,-0.1 4.3,1.9 0.9,0.9 1.8,2.5 3.5,2.5 0.4,0 0.8,-0.8 0.8,-1.3 v -1.1 c 0,-2.8 -3.3,-3.6 -5.3,-4.5 -2.3,-0.9 -5.3,-1.6 -6.1,-3.8 -0.8,-2.3 -2.2,-4.6 -2.9,-6.9 -0.7,-2.1 -1.9,-5.1 -4.6,-5.1 h -0.4 c -3,0 -7.4,7.5 -8.1,10.4 -0.6,2.3 -1.6,4.7 -2.1,7.2 -0.5,2.8 -0.6,5.2 -1.1,8 -0.3,1.8 0.1,2.3 -0.6,4 -0.4,1.2 -0.8,2.3 -1.2,3.4 -0.9,2.3 -1.7,4.6 -2.5,6.8 -0.8,2.1 -4.9,11.8 -4.9,13.5 0,2.6 6.2,1.3 7.7,1.1 -0,-1.9 -2.3,-1.6 -3.1,-2.7 2.1,-3.1 3.8,-6.3 5.8,-9.5 1,-1.7 4.6,-9.2 5.4,-9.8 0.6,0.4 3,3.1 3.8,3.9 1.9,1.9 2,1.8 2.8,4.8 1.1,4.2 1.9,7.7 1.9,13.1 l 1.7,0.2 4.2,-0 c 1.3,0 1.8,-0.2 2.3,-1 -0.6,-1 -3.1,-1.7 -4.6,-2.1 v -1.1 c 0,-0.4 -0.1,-0.4 -0.4,-0.8 v -12.1 c -1.5,-2.3 -2.9,-4.9 -4.6,-7.1 -1.1,-1.6 -3.8,-5.2 -3.8,-7.6 v -2.5 l 0,0 z m 30.3,-9.7 v 1.6 c 0,1.5 2.3,3.9 4.2,3.9 h 0.8 c 2.1,0 4.2,-2.3 4.2,-4.5 V 87.6 c 0,-2.2 -2.2,-4.2 -4.5,-4.2 h -0.1 c -2.3,-0 -4.6,2 -4.6,4 z m -28.4,-15.6 v 1.7 c 0,0.6 1,2.1 1.4,2.5 0.6,0.6 1.8,1.2 2.9,1.2 h 1 c 2,0 4.2,-2.2 4.2,-4 v -1.4 c 0,-1.6 -2.5,-3.9 -4.5,-3.9 h -0.7 c -1.8,0 -4.2,2.2 -4.2,3.9 z"}],i["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 79.5,127.9 h -7.8 v -21.4 c 0,-1 6.8,-13.3 7.4,-13.6 1,-0.6 13.9,-7.1 14.1,-7.1 0.5,0 13.2,6.3 14.4,7 0.4,0.3 7.7,13.1 7.7,13.7 v 21.4 h -7.6 V 110.4 H 79.5 v 17.5 z m 37.4,-39.4 h 15.4 v 39.8 h -12.1 v -18.8 h 2.6 c -0.5,-0.8 -5.8,-9.8 -5.8,-10 V 88.5 z m 0.2,-1.9 c 0,-4.4 2.9,-8.2 7.2,-8.2 h 0.4 c 4.5,0 7.6,3.7 7.6,8.2 h -15.2 v 0 z M 105.2,82.1 h 8.9 c -0.2,1.6 -0.9,2.5 -0.9,5 0,2 0,3.9 0,5.8 -1.4,-1 -0.9,-2.8 -3.2,-4 -1.2,-0.6 -3.8,-2 -4.8,-2.3 v -4.6 z m 0,-2.8 c 0,-2.8 3.8,-7.4 6.9,-7.4 h 0.6 c 3.1,0 5.5,1.8 6.7,3.7 -0.2,0.2 -4.8,4.3 -4.8,4.3 h -9.5 v -0.6 z m -11.9,1.5 c -3.2,1.7 -6.6,3.2 -9.9,4.8 -1.7,0.9 -3.3,1.5 -5,2.4 -2.8,1.4 -2.3,0.7 -4,3.1 -0.9,1.3 -1.8,3.2 -2.7,4.7 -0.9,1.6 -1.9,3 -2.8,4.6 -1.6,2.9 -3.6,6.5 -5.4,9.1 h 2.8 v 22.5 H 84 V 114.7 h 19 v 17.3 h 33.3 V 87.5 c 0,-7.5 -4.2,-13 -11.7,-13 h -1.7 c -0.8,-2.9 -5.9,-6.5 -10,-6.5 h -0.4 c -6.4,0 -11,5.9 -11,12.1 v 4.6 l -8.2,-3.9 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 79.5,110.4 h 28.1 v 17.5 h 7.6 v -21.4 c 0,-0.6 -7.2,-13.4 -7.7,-13.7 -1.1,-0.8 -13.8,-7.1 -14.4,-7.1 -0.1,0 -13,6.5 -14.1,7.1 -0.6,0.4 -7.3,12.6 -7.3,13.6 v 21.4 h 7.8 v -17.5 z m 37.4,-10.8 c 0,0.1 5.3,9.2 5.8,10 h -2.6 v 18.8 h 12.1 v -39.8 h -15.4 v 11 z m 0.2,-13 h 15.1 c 0,-4.6 -3,-8.2 -7.6,-8.2 h -0.4 c -4.2,-0 -7.2,3.8 -7.2,8.2 z m -11.9,0 c 1.1,0.2 3.6,1.7 4.8,2.3 2.2,1.1 1.7,3 3.2,3.9 0,-2 0,-3.9 0,-5.8 0,-2.5 0.7,-3.4 0.9,-5 h -8.9 v 4.6 z m 0,-7.4 v 0.6 h 9.5 c 0,0 4.6,-4.1 4.8,-4.3 -1.2,-1.8 -3.6,-3.7 -6.7,-3.7 h -0.6 c -3.1,0 -6.9,4.6 -6.9,7.4 z"}],i["GR.IN.IC.AGRICULTURAL LABORATORY"]=[{type:"path",stroke:!1,d:"m 98.4,77.9 -0.1,0.3 2.6,0.6 0,-0.3 z m 2.1,7.3 0.4,-3.2 -0.3,-0.1 -0.4,3.2 z m -3.8,-16.8 0.1,-0.2 -1.4,-0.3 1,-2.6 -0.4,-0.3 -1.7,5.7 0.1,0 0.3,-0.1 0.7,-2.4 z m -1,5.3 c 0.8,0 0.5,-1.7 0.8,-2.3 l -0.4,-0.1 -0.4,2.4 z m 1.4,-5.5 0.6,-2.6 -0.4,-0.1 -0.6,2.7 z m 0.2,-2.7 0.1,-0.3 -1,-0.2 -0.1,0.2 z m 11.8,65.6 0,5.6 3.3,0 c 1.1,0 1.9,-0.2 2.4,-0.7 0.5,-0.5 0.8,-1.2 0.8,-2.1 -10e-6,-0.9 -0.3,-1.6 -0.8,-2.1 -0.5,-0.5 -1.3,-0.7 -2.4,-0.7 l -3.3,0 m 0,-6.2 0,4.6 3,0 c 1,0 1.7,-0.2 2.2,-0.6 0.5,-0.4 0.7,-1 0.7,-1.7 -10e-6,-0.8 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.6 -2.2,-0.6 l -3,0 m -2.1,-1.7 5.2,0 c 1.6,1e-5 2.8,0.3 3.6,1 0.8,0.7 1.3,1.6 1.3,2.8 -2e-5,0.9 -0.2,1.7 -0.7,2.2 -0.4,0.5 -1.1,0.9 -1.9,1 1,0.2 1.8,0.7 2.3,1.4 0.6,0.7 0.8,1.5 0.8,2.6 -1e-5,1.4 -0.5,2.4 -1.4,3.1 -0.9,0.7 -2.2,1.1 -3.9,1.1 l -5.4,0 0,-15.2 m -9.2,2 -2.8,7.5 5.6,0 -2.8,-7.5 m -1.2,-2 2.3,0 5.8,15.2 -2.1,0 -1.4,-3.9 -6.8,0 -1.4,3.9 -2.2,0 5.8,-15.2 m -16,0 2.1,0 0,13.4 7.4,0 0,1.7 -9.4,0 0,-15.2 M 98.6,92.5 c 0.9,-0.2 0.8,-1.8 1.1,-2.6 l 0.9,0.4 -1.4,4.2 -0.6,-2 z m -0.2,-0.4 0.1,0.2 c -0.5,-0.1 -0.8,-1.3 -0.8,-1.9 l 0.4,0.6 -0.3,-2.2 1.6,0.8 c -0,0.7 -0.4,2.3 -0.9,2.4 z m -0.9,-2.3 -0.6,-1.4 c 0.4,0.1 0.6,0.3 0.6,0.9 v 0.5 z m 2.6,-4.4 -0.6,3.9 -1.7,-0.8 v -3.4 -0.3 l 2.3,0.6 z m -2.6,-1.1 0.4,0.1 v 0.4 h -0.4 v 3.5 l -0.8,-0.4 0.1,0.4 h -0.2 c 0,-0.9 -1.2,-2.8 -1.6,-3.5 0.1,-0.1 0.1,-0.1 0.1,-0.4 v -0.4 l 2.4,0.6 0,-0.4 z m 6.1,-1.7 2.5,0.6 v 0.4 c 0,0.2 0,0.2 0.1,0.3 -1.2,0 -1.9,0.4 -2.8,0.8 l 0.2,-2 z m -6.1,1.7 -2.4,-0.8 0.1,-1.8 v -1 l 2.4,0.5 -0.2,3 z m 8.6,-1.6 c -0.3,0 -2.3,-0.4 -2.4,-0.6 0,0 0.2,-2.3 0.2,-2.7 l 2.2,0.4 0.1,1.6 -0,1.2 z m -12.7,-2.4 c 0.4,0 0.7,0.2 1.1,0.2 0.8,0.2 0.4,0.1 0.4,0.7 v 2.1 c -0.3,-0 -0.7,-0.2 -1,-0.3 -0.7,-0.2 -0.5,0.1 -0.5,-0.4 v -2.4 z m 10.7,-4.2 1.7,0.4 0.3,3 -2.2,-0.4 0.2,-3 z m -6.4,5.2 v -0.4 l -2.4,-0.5 0.3,-2.8 2.4,0.5 -0.2,2.9 h 0.3 v 0.4 h -0.3 z m -4,-4.2 1.6,0.4 -0.3,2.9 -1.5,-0.4 0.2,-2.9 z m 7.6,1.4 0.3,-3.1 2.4,0.6 -0.3,3 -2.4,-0.5 z m -0.4,-0.1 0.4,0.1 v 0.4 c 0.4,0 2.3,0.4 2.4,0.6 0,0.1 -0.2,2.3 -0.2,2.6 -0.8,0 -1.6,-0.4 -2.3,-0.4 -0.2,0 -0.2,0.2 -0.2,0.4 l 2.4,0.5 -0.2,2.2 h 0.2 c -0.5,0.7 -1.1,1.6 -1.4,2.4 -0.3,0.8 -0.7,2.1 -1.1,2.8 l -0.9,-0.4 0.6,-4 h -0.2 l -0.2,-0.1 v -0.4 l -2.3,-0.7 0.2,-3 2.5,0.5 v -0.3 h 0.4 l 0.2,-2.8 h -0.3 l -0.3,2.7 -2.4,-0.4 0.2,-2.9 c -0.3,-0.1 -0.2,0 -0.3,-0.4 h 0.2 l 0.2,0.1 0.4,-3.2 2.4,0.6 -0.3,3.1 z m 3.2,-5.4 v -0.3 l 0.3,0.1 v 0.3 c 1,0.1 1.1,0.1 1.2,1 0,0.3 0.2,1.8 0.3,1.9 l -1.7,-0.3 v 0.4 h -0.3 v -0.5 l -2.4,-0.6 0.3,-2.5 2.3,0.4 z m 0.2,-0.2 0.2,-2.9 c 0.6,0.1 0.7,2.4 0.8,3.1 l -1,-0.2 z m -5.1,-0.9 2.4,0.5 -0.3,2.6 -2.4,-0.6 0.4,-2.5 z m 4.9,0.8 c -3.3,-0.8 -2,0 -2,-3.3 l 2.2,0.4 -0.2,2.9 z m -4.4,-3.8 c 3.2,0.8 1.9,-0.2 1.9,3.2 l -2.3,-0.5 0.4,-2.7 z m -2.5,-0.4 2.1,0.4 -0.4,2.7 -2.2,-0.4 0.4,-2.6 z m 7.1,1.3 v -0.4 l -2.2,-0.4 0.2,-2.6 c 0.3,0 0.7,0.1 1.1,0.2 0.6,0.1 0.5,0 0.7,0.6 0.3,1 0.3,0.9 0.3,2.2 l 0.3,0.4 -0.4,0.1 z m -4.1,-3.9 1.8,0.4 -0.2,2.6 -2.1,-0.4 0.4,-2.6 z m 2.3,-2.2 1.4,2.6 -1.5,-0.2 0.1,-2.4 z m -1.6,-1.6 0,-0.1 1.2,1.2 -0.1,0 c 0.3,-0.1 0.3,-0.1 0.4,0.3 l -0.2,-0.2 -0.2,2.6 -1.8,-0.4 0.7,-3.5 z m -2.9,3 c 0.5,-1.1 0.3,-3.4 1.9,-3.4 0.3,0 0.2,0 0.5,0.1 l -0.6,3.7 -1.8,-0.4 z m -0.4,-0.1 0.4,0.1 v 0.3 l 1.8,0.4 -0.4,2.6 -2.1,-0.4 v 0.2 l -0.1,0.2 -0.2,-0.1 h -0.2 l -0.5,2.6 -1.6,-0.3 v 0.3 c 0.5,0 1,0.3 1.4,0.3 0.2,0 0,-0.2 0.5,-0.2 v 0.4 l 2.2,0.4 -0.3,2.4 -2.4,-0.6 v 0.4 l 2.3,0.6 -0.3,3.1 -2.4,-0.6 0.4,-3.2 h -0.4 c -0,0.8 -0.3,1.7 -0.3,2.4 -0,0.8 -0,0.7 -0.7,0.5 -0.2,-0 -0.9,-0.1 -0.9,-0.3 -0,-0.3 0.2,-2 0.3,-2.4 0.2,-1.2 0.5,-0.4 1.7,-0.3 l 0.1,-0.3 c -0.2,-0.1 -1.6,-0.3 -1.6,-0.5 0,-0.8 0.4,-1.5 0.4,-2.3 -0.6,0.1 -0.7,2.3 -0.8,3 -0.1,0.8 -0.4,2.6 -0.4,3.3 0,0.8 -0.2,2.4 -0.2,3.5 0,1.3 -0.1,2.4 -0.1,3.8 h 0.3 v -0.9 l 1.5,0.4 v 1 l -3.4,-0.5 h -0.1 c -5,0 -8.8,9.7 -8.8,15.4 0,2.3 0.8,5.4 2,6.2 0.7,-1.4 1.3,-3.1 2,-4.6 0.8,-1.5 1.4,-3.1 2.1,-4.6 0.3,-0.7 0.7,-1.5 1,-2.2 0.4,-0.8 0.8,-1.5 1.8,-1.2 0.9,0.3 1.9,3.2 2.1,4.6 0.5,3.8 0,9 0.6,12.6 0.7,4 2.3,6.4 5.4,8 1,-0.4 2.5,-0.6 3.4,-1.2 0.9,-0.6 1.8,-1.2 2.4,-2.2 1.2,-1.8 2,-4.1 2,-7.2 l 0,-0.6 -0.3,-5.6 v -0.3 c 0,-2.7 0.5,-8.3 2.8,-8.3 h 0.1 c 1.4,0 2,0.6 2.6,1.4 0.6,0.8 1.2,1.4 1.8,2.2 1.2,1.5 2.6,2.9 2.6,5.5 v 0.6 l 0.4,0.1 c 0.4,-1.6 1.8,-2.8 1.8,-5.2 v -1.5 c 0,-3.5 -1.4,-6.2 -3,-8.3 -0.8,-1.1 -1.8,-2 -2.8,-2.8 -0.7,-0.5 -2.7,-1.9 -3.8,-1.9 l -0.8,-0 -2.3,0.4 c -0.2,-0.8 0.1,-2 -0.1,-3.1 -0.1,-0.8 -0.2,-2.5 -0.2,-3.3 -0.2,-2.1 -0.5,-4.2 -0.9,-6.1 -0.6,-3.3 -2,-8.2 -4.6,-9.4 v 0.3 l -0.4,-0.1 0.1,-0.3 -0.8,-0.1 c -0.9,-0.1 -1.9,0.8 -2.3,1.3 -0.2,0.3 -1.7,2 -0.8,2 0.2,-0.6 1.3,-2.2 1.8,-2.4 l -0.8,2.7 z m 3,20.4 1.6,0.5 0.2,-0 c -0.1,-0.5 -1.4,-0.6 -1.8,-0.8 v 0.4 z m 3.6,-9.8 0.2,-2.6 -0.2,-0.1 -0.2,2.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 98.6,92.5 0.6,2 1.4,-4.2 -0.9,-0.4 c -0.3,0.7 -0.2,2.3 -1.1,2.6 z m -0.6,-1.4 -0.3,-0.6 c 0,0.6 0.4,1.8 0.8,1.9 l -0.1,-0.2 c 0.6,-0.2 0.9,-1.8 1,-2.4 l -1.6,-0.8 0.2,2.2 z m 2.4,-5.9 c 0.4,0.2 1.7,0.3 1.8,0.8 l -0.2,0 -1.6,-0.5 -0.6,4 0.9,0.5 c 0.4,-0.7 0.8,-2 1.1,-2.8 0.4,-0.8 1,-1.7 1.4,-2.4 h -0.2 l 0.2,-2.3 -2.4,-0.5 -0.4,3.2 z m -1,4.1 0.6,-3.9 -2.3,-0.6 0,0.2 0,3.4 z m 0.6,-4.2 0.4,-3.2 -2.5,-0.5 -0.2,3 z m 0.7,-6.6 0.3,-3.1 -2.4,-0.6 -0.4,3.2 z m -5.1,-4.8 -0.1,0.3 c -1.2,-0 -1.5,-0.9 -1.7,0.3 -0.1,0.4 -0.3,2.1 -0.3,2.4 0,0.2 0.7,0.2 1,0.3 0.7,0.2 0.7,0.2 0.7,-0.5 0,-0.8 0.3,-1.7 0.4,-2.4 h 0.4 l -0.4,3.2 2.4,0.6 0.4,-3.2 -2.3,-0.5 v -0.4 l 2.3,0.6 0.3,-2.4 -2.2,-0.4 c -0.3,0.6 0,2.3 -0.8,2.3 z m 8.3,-1 0.2,-2.9 -2.2,-0.4 c 0,3.4 -1.3,2.6 2,3.3 z m -6.2,11.7 -0.4,-0.1 v 0.4 l -2.4,-0.6 v 0.4 c 0,0.2 -0,0.2 -0.1,0.4 0.4,0.7 1.6,2.6 1.6,3.5 h 0.2 l -0.1,-0.4 0.8,0.4 v -3.5 h 0.4 l -0,-0.4 0,0 z m -0.3,5.4 0,-0.6 c 0,-0.5 -0.2,-0.8 -0.6,-0.9 l 0.6,1.4 z m 2.6,-4.8 0,0.4 0.2,0.1 0.2,0 0,-0.3 z m 3.3,-0.4 c 0.8,-0.4 1.5,-0.8 2.8,-0.8 -0.1,-0.1 -0.1,-0.1 -0.1,-0.2 v -0.4 l -2.5,-0.6 -0.2,2 z m -8.3,-1.1 2.4,0.8 0.2,-3 -2.5,-0.5 0,1 z m -1.8,-0.8 c 0,0.5 -0.2,0.2 0.5,0.4 0.3,0.1 0.6,0.2 1,0.3 v -2.1 c 0,-0.7 0.4,-0.6 -0.4,-0.7 -0.4,-0.1 -0.7,-0.2 -1.1,-0.2 v 2.4 z m 7.5,-4 h 0.3 l -0.2,2.8 h -0.4 v 0.4 l 0.3,0.1 c 0,-0.2 0,-0.4 0.2,-0.4 0.7,0 1.6,0.4 2.3,0.4 0,-0.3 0.3,-2.5 0.2,-2.6 -0,-0.2 -2,-0.6 -2.3,-0.6 v -0.4 l -0.4,-0.1 v 0.3 z m 3.3,-8.9 0.4,-0 -0.3,-0.4 c 0,-1.3 -0,-1.2 -0.3,-2.2 -0.2,-0.6 -0,-0.5 -0.7,-0.6 -0.4,-0.1 -0.8,-0.2 -1.1,-0.2 l -0.2,2.6 2.2,0.4 v 0.4 z m -2.4,-0.9 0.2,-2.6 -1.8,-0.4 -0.4,2.6 z m 4.4,13.8 0,-1.2 -0.1,-1.6 -2.2,-0.4 c 0,0.4 -0.2,2.7 -0.2,2.7 0.1,0.2 2.2,0.6 2.4,0.6 z m -7.8,-4.6 -0.2,2.9 2.4,0.4 0.3,-2.7 z m -0.2,3.2 0,-0.4 -0.3,0 0.2,-2.9 -2.3,-0.5 -0.3,2.8 2.4,0.5 0,0.4 z m -3.1,-1 0.3,-2.9 -1.6,-0.4 -0.2,2.9 z m 11.1,-0.8 -0.3,-3 -1.7,-0.4 -0.2,3 z m -2,-6.6 -2.3,-0.4 -0.3,2.5 2.4,0.6 z m -0.4,6 0.2,-3 -2.4,-0.6 -0.2,3.1 z m -2.4,-4 0.3,-2.6 -2.3,-0.5 -0.3,2.5 z m -2.9,3.2 0.1,-0.3 -0.2,-0.1 h -0.2 c 0,0.4 -0.1,0.3 0.2,0.4 z m 5.8,-2.4 1.7,0.3 c -0.1,-0.2 -0.2,-1.6 -0.3,-1.9 -0.1,-1 -0.2,-1 -1.2,-1 l -0.2,2.6 z m 0,0.3 0,-0.3 -0.3,-0.1 0,0.4 z m 0.2,-3 0,-0.3 -0.2,-0.1 0,0.3 z m 0,-0.3 1,0.2 c -0.1,-0.6 -0.2,-3 -0.8,-3 l -0.2,2.9 z m -5.1,-1.1 2.3,0.5 c 0,-3.4 1.3,-2.5 -1.9,-3.2 l -0.4,2.7 z m -2.5,-0.6 2.2,0.4 0.4,-2.7 -2.1,-0.4 z m 1.1,-5.6 -0.6,2.6 2.1,0.4 0.4,-2.6 -1.8,-0.4 0,-0.3 -0.4,-0.1 -0.1,0.3 z m -0.6,2.8 0,-0.2 -0.4,0 -0.1,0.2 0.2,0 0.2,0.1 z m 0.2,-2.9 -1,-0.2 -1,2.6 1.4,0.3 z m 4.8,0.7 1.5,0.2 -1.4,-2.6 z m -2.1,-0.4 1.8,0.4 0.2,-2.6 0.2,0.2 c -0,-0.4 -0,-0.3 -0.4,-0.3 l 0.1,-0.1 -1.2,-1.1 -0.1,0.1 -0.7,3.5 z m -2.2,-0.4 1.8,0.4 0.6,-3.7 c -0.4,-0 -0.2,-0.1 -0.6,-0.1 -1.6,0 -1.4,2.3 -1.9,3.4 z"}],i["GR.IN.IC.ANIMAL FEEDLOT"]=[{type:"path",stroke:!1,d:"m 121.6,107.1 -0.4,-2.3 -0.2,-2 h 16.3 l -1.7,13.2 h -13 v -0.6 l -1,-8.2 z m 16.1,4.3 0.4,-2.3 0.9,-6.2 -0.1,-1.6 h -19.6 l 1.4,10.7 0.3,0.6 0.5,4.3 -0.1,0.6 h 15.7 v -1.6 l 0.6,-4.6 z M 123,82.6 c -3.3,-0.8 -4.6,0.4 -6.8,1.9 h -1.4 c -0.3,0.4 -0.6,1.2 -1.2,1.2 h -1 c -2.2,0 -3.9,-1.8 -5.8,-1.8 h -0.6 c -0.9,0 -2.1,0.8 -3.9,0.8 -5.1,0 -3.9,0.2 -8,1.5 -2,0.6 -6.2,0.8 -8.9,0.8 h -5.2 c -2.8,0 -5,-0.6 -7.2,-0.6 -2.6,0 -4.7,0.2 -7.4,0.2 -0.5,0 -0.5,-0.1 -0.8,-0.2 -2.4,1.2 -3.1,4.2 -3.1,7.8 0,3.6 -0.6,6.3 -0.6,10.1 v 0.2 c 0,0.6 0.1,0.6 0.2,1 l 1,-0.3 0,-0.5 h 0.4 l 0.2,-12.2 h 0.2 c 0,2 0.1,4.5 0.6,6 0.4,1.2 1.7,3.8 1.7,4.9 v 0.2 l -1.6,13.2 h 3.7 c 0,-1.4 -0.4,-1.1 -0.4,-2.1 v -2.1 c 0,-1.4 1,-4.2 2.3,-4.3 0.4,1.5 3.3,3.7 3.3,6.8 v 0.6 c 0,0.6 -0.1,0.6 -0.2,1 0.4,-0.1 0.5,-0.2 1,-0.2 1.2,0 3.5,0.7 3.5,-0.4 0,-0.3 -1.9,-3.2 -2.2,-3.5 -0.4,-0.5 -1.3,-3.6 -1.3,-4.3 v -0.2 c 0,-0.2 1.2,-2.3 1.2,-4.8 4,2.2 3.5,2.7 9.9,2.7 2.2,0 4.2,0.5 6,0.4 1,-0 3.3,-1.4 4.3,-1.9 0,1.2 0.4,2.4 0.2,3.3 l -1.2,8 c 1,0.3 1.6,0.6 2.8,0.6 h 0.6 -0.2 l 0.7,-11.3 c 0.6,0.4 2.8,7.1 2.6,8.4 l -0.3,2.3 c 0.8,0.4 1.5,0.6 2.6,0.6 h 1 l -1.2,-7.4 -0.1,-0.8 c 0,-0.9 1.6,-0.7 2.5,-1.2 0.6,-0.3 1.4,-1.2 1.8,-1.7 1.1,-1.5 2,-2.7 3,-4.2 3.9,-5.4 3.5,-2.4 10.2,-4 v -0.6 h 1.6 c 1,0 1.8,-0.8 1.8,-1.8 v -0.4 c 0,-2.4 -2.5,-2.5 -2.5,-5.6 l -3.3,-3.4 5.4,-2.9 z m 14.6,28.9 c 0.4,-0.4 0.4,-1.5 0.4,-2.3 l -0.4,2.3 z m -16.1,-4.3 c 0,-0.8 0,-1.9 -0.4,-2.3 l 0.4,2.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 121.2,104.9 c 0.4,0.4 0.4,1.5 0.4,2.3 l 1,8.2 v 0.6 h 13 l 1.7,-13.2 h -16.3 l 0.2,2.1 z"}],i["GR.I.FF.SATELLITE"]=[{type:"path",stroke:!N&&O,fill:!!N&&O,d:"m 115,70 20,0 0,55 -20,0 z m -25,5 20,0 0,45 -20,0 z m -25,-5 20,0 0,55 -20,0 z"},{type:"path",fill:!1,d:"m 110,100 5,0 m -30,0 5,0 m 10,27 0,-7 m -20,15 c 10,-10 30,-10 40,0"}],i["GR.IN.IC.FARM/RANCH"]=[{type:"path",stroke:!1,d:"m 119.9,119 v -0.2 c 0,-2 1.5,-3.7 3.5,-3.7 h 0.4 c 2.2,0 3.7,1.6 3.7,4 v 0.6 c 0,1.2 -2.1,2.8 -3.7,2.8 h -0.4 c -1.9,0 -3.5,-1.6 -3.5,-3.5 z m -52,-10.7 c 1.3,-2 1.1,-2.7 3.2,-4.4 1.3,-1 3.3,-1.9 5.5,-1.9 h 0.6 c 4.7,0 9,4.1 9,8.8 v 1.1 c 0,5 -4,9.2 -8.8,9.2 H 76.9 c -5.4,0 -9.4,-4.2 -9.4,-9.6 0,-1.4 0.4,-1.6 0.4,-3 l 0,0 z m 7.9,-20.2 c -0.8,0 -1.5,-4.4 -1.8,-5.3 -0.2,-1 -1.3,-4.6 -1.3,-5.5 h 24.1 c 0.5,0 1.3,-0.8 1.3,-1.3 v -2.2 c 0,-0.7 -0.8,-1.1 -1.5,-1.1 h -31.8 c -0.7,0 -1.5,0.4 -1.5,1.1 v 2.2 c 0,0.5 0.8,1.3 1.3,1.3 h 3.5 l 2.6,16 -6.8,2.5 2.8,3.4 c -1,1.3 -2.3,2.1 -3.6,4.2 -0.4,0.8 -1.9,4.4 -1.9,5.5 v 2.2 c 0,5.4 1.6,8.8 4.3,11.5 2.3,2.3 6.5,4.8 11,4.8 h 0.4 c 8.8,0 15.8,-7.4 15.8,-16 h 13.4 c 0.6,0 1.9,1.4 2.4,1.8 h 8.6 c -1.1,1.6 -2.2,2.9 -2.2,5.7 0,4.6 3.9,8.6 8.6,8.6 4.4,0 8.8,-3.8 8.8,-7.9 v -2 c 0,-1.2 -1.5,-3.4 -2,-4.4 h 7.2 l 1,-4.6 h -7.2 v -0.6 l 1.2,-8.1 -0.1,-3.3 c 0,-0.6 -1.7,-2.1 -2.2,-2.4 l -16,-0.5 V 78.2 c 0,-0.5 -0.4,-0.9 -0.9,-0.9 -0.5,0 -0.9,0.4 -0.9,0.9 v 15.4 c -2.2,-0.2 -6,-0.4 -8.1,-0.4 -1.3,0 -2.9,0.1 -4.2,0 -2.1,-0.1 -2,-1.3 -2.9,-1.3 h -4.6 l 2,12.3 H 91.1 V 98.6 C 91.1,97.8 87.1,94.4 86.1,94.4 H 78.7 V 89.8 L 77.5,88.1 75.8,88 z M 88.1,92 c 0,0.5 0.1,0.2 0.2,0.9 h 0.6 c 0.9,0 8.5,-6.4 10.1,-6.8 V 85.4 c 0,-0.5 -0.2,-0.6 -0.6,-0.6 h -0.4 C 97.5,84.7 88.1,91.6 88.1,92 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 119.9,119 c 0,1.9 1.6,3.5 3.5,3.5 h 0.4 c 1.6,0 3.7,-1.6 3.7,-2.8 v -0.7 c 0,-2.3 -1.5,-4 -3.7,-4 h -0.4 c -2,0 -3.5,1.7 -3.5,3.7 v 0.2 z m -52,-10.7 c 0,1.4 -0.4,1.7 -0.4,3.1 0,5.4 4.1,9.6 9.4,9.6 h 0.6 c 4.8,0 8.8,-4.3 8.8,-9.2 v -1.1 c 0,-4.7 -4.3,-8.8 -9,-8.8 h -0.6 c -2.2,0 -4.3,0.9 -5.5,1.9 -2.2,1.7 -1.9,2.4 -3.2,4.4 z"}],i["GR.IN.IC.GRAIN STORAGE"]=[{type:"path",stroke:!1,d:"m 122.8,69.6 c 0.4,0.1 0.9,0.5 1.3,1 0.4,0.5 0.8,1.2 1.3,2 l 2.1,4.1 -2.2,0 -1.9,-3.9 c -0.5,-1 -1,-1.7 -1.5,-2 -0.5,-0.3 -1.1,-0.5 -1.9,-0.5 l -2.2,0 0,6.4 -2.1,0 0,-15.2 4.6,0 c 1.7,1.5e-5 3,0.4 3.9,1.1 0.9,0.7 1.3,1.8 1.3,3.3 -1e-5,1 -0.2,1.7 -0.7,2.4 -0.4,0.6 -1.1,1.1 -1.9,1.3 m -5.1,-6.4 0,5.4 2.6,0 c 1,8e-6 1.7,-0.2 2.2,-0.7 0.5,-0.5 0.8,-1.1 0.8,-2 -1e-5,-0.9 -0.3,-1.6 -0.8,-2 -0.5,-0.5 -1.2,-0.7 -2.2,-0.7 l -2.6,0 m -12.3,-0.3 c -1.5,1.4e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 0,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,1e-6 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -2e-5,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.6e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -2e-5,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,0 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -10e-7,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1 m -21,0.3 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -2,0.5 0,2 c -0.8,-0.4 -1.5,-0.6 -2.2,-0.8 -0.7,-0.2 -1.4,-0.3 -2,-0.3 -1.1,1.4e-5 -2,0.2 -2.6,0.7 -0.6,0.4 -0.9,1 -0.9,1.8 -4e-6,0.7 0.2,1.2 0.6,1.5 0.4,0.3 1.2,0.6 2.3,0.8 l 1.2,0.3 c 1.5,0.3 2.7,0.8 3.4,1.5 0.7,0.7 1.1,1.7 1.1,2.9 -1.2e-5,1.5 -0.5,2.6 -1.5,3.3 -1,0.8 -2.4,1.1 -4.3,1.1 -0.7,0 -1.5,-0.1 -2.3,-0.2 -0.8,-0.2 -1.6,-0.4 -2.5,-0.7 l 0,-2.1 c 0.8,0.5 1.6,0.8 2.4,1.1 0.8,0.2 1.6,0.4 2.4,0.4 1.2,1e-6 2.1,-0.2 2.7,-0.7 0.6,-0.5 1,-1.1 1,-2 -10e-6,-0.7 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.7 -2.2,-0.9 l -1.2,-0.2 c -1.5,-0.3 -2.6,-0.8 -3.3,-1.4 -0.7,-0.6 -1,-1.6 -1,-2.7 -10e-7,-1.3 0.5,-2.4 1.4,-3.2 0.9,-0.8 2.3,-1.2 3.9,-1.2 0.7,1.6e-5 1.4,0.1 2.2,0.2 0.7,0.1 1.5,0.3 2.3,0.6 m 24.4,48.1 -0.2,2.4 h 0.4 l -1.7,3 -1,-1.7 -0.1,2 0.5,0.6 -1.2,3 -1.5,-3 0.4,3.6 0.8,0.2 -3.1,9.7 -0.5,-4.2 0.1,-1.8 c 0,-1.5 0.8,-4.7 1,-6.3 0.3,-1.7 1.3,-4.5 1.4,-6 0.6,0.1 0.4,0.2 0.8,0.2 0.4,0 2.3,-1.5 2.6,-1.8 l -3,0.6 0.8,-2.7 c 0.6,0.1 0.4,0.2 0.8,0.2 0.4,0 2.6,-1.7 2.8,-2 l -3,0.8 0.7,-2.4 c 1.3,0 2.1,-0.8 2.8,-1.4 l -2.4,0.4 0.8,-2 c 1.1,-0 1.5,-0.9 1.8,-1.8 l -1.3,0.7 2.3,-6.1 -0.8,-0.1 -2.1,5.9 -0.3,0 -0.5,-2.1 -0.1,-0 c 0,1.5 -0.4,1.6 -0.4,2.4 0,0.5 0.2,0.5 0.6,0.6 l -0.9,2.1 -1,-1.4 c -0.1,1.6 -0.4,1.9 0.7,2.4 l -0.8,2.4 -1.7,-2.2 0.4,2.8 0.6,0.5 -0.5,2.7 -1.5,-1.9 0.2,2.4 0.9,0.5 c 0,0.4 -1,4.6 -1.2,6 -0.4,2.3 -0.9,3.5 -0.9,6.3 l -1.2,-3.6 0.6,-0.8 -0,-2 -1.2,1.2 -0.8,-2.8 0.6,-0.8 -0,-2 -1.1,1.2 -0.7,-1.7 c 1,-0.5 1,-1.6 1,-3.2 l -1.3,2.1 c -0.7,-0.2 -1.1,-1.4 -1.3,-2.3 0.3,-0.4 0.6,-0.5 0.6,-1 v -1.6 h -0.4 l -0.7,1.8 c -0.2,-0.2 -0.7,-0.7 -0.7,-1.2 0,-0.4 0.6,-0.3 0.6,-1 v -0.2 c 0,-1.1 -0.4,-1.1 -0.4,-2.4 l -0.7,2.3 -0.3,0 -2.8,-5.9 -0.4,0.2 2.5,5.7 -1.3,-0.7 1,1.9 1,0 0.6,1 -2.6,-0.4 c 0.4,0.4 1.7,1.4 2.4,1.4 0.1,0 0.4,-0.1 0.6,-0.2 l 1,2.2 -3.2,-0.6 c 1.1,1 2,1.7 3.6,1.6 l 1.1,2.7 -2.9,-0.4 c 0.7,1 1.7,1.3 3,1.5 0.4,0.1 1.1,2.8 1.2,3.5 l -3,-0.6 2.2,1.6 h 1 c 1.2,2.3 2.4,11.9 2.4,15.8 h 1.4 l -0.2,-2.2 0,-1 c 0,-4 2.9,-9.3 3.2,-12.3 0.8,0.1 0.5,0.2 1,0.2 0.2,0 2.9,-1.2 3.2,-1.4 l -3.6,0.3 1.2,-3.1 0.8,0.4 3,-1.3 -3.2,0.2 1.4,-2.8 c 0.4,0.1 0.4,0.2 1,0.2 0.3,0 2.1,-1 2.4,-1.2 l -2.8,0.2 1.4,-2 c 1.5,0.1 1.5,-0.4 2.4,-1.6 l -1.4,0.4 c 0.5,-1.1 1.2,-2.2 1.8,-3.2 0.4,-0.6 2,-2.7 0.8,-3 l 0.2,0.1 -3.4,5.8 -0.4,-2.3 h -0.2 c 0,1.4 -0.6,1.7 -0.6,2.2 0,0.3 0.3,0.7 0.4,1 l -1.5,2 -0.7,-1.9 z m -25.4,13.5 c 0,-3.7 0.1,-9.1 0.7,-12.4 0.4,-2 0.1,-4 0.6,-6 0.4,-1.7 0.4,-4.2 0.8,-5.8 2.8,-10.1 1,-11.8 14.3,-11.8 h 4.4 c 11.6,0 12.6,1.2 14.2,11.3 1.2,7.6 2,14.6 2,23.6 v 8.3 l -0.4,3.6 c -1.1,1.6 -2.1,3.4 -4.9,3.4 H 86.7 c -5.4,0 -5.3,-6.4 -5.3,-11.9 v -2.4 z m -5.8,-32.5 c 2.1,-0.6 0.4,-1.3 4.4,-1 2.4,0.2 3,0.3 5,0.8 -0.7,1.1 -4.6,3 -6.5,3 h -0.4 c -0.9,0 -2.4,-1.2 -2.4,-2 v -0.8 h -0 z m 43.2,-1.5 c 2.2,-0.2 4.8,0.9 4.8,3.1 v 0.6 c 0,0.6 -0.6,0.8 -1.2,0.8 h -0.6 c -1.8,0 -6.2,-2.7 -6.9,-3.9 l 4,-0.6 z m -36.6,-6.7 c 0,-1 1,-2.2 1.8,-2.2 h 0.6 c 0.6,0 1.4,1.6 1.4,2.2 v 4.2 c 0,1.3 -0.4,1.5 -0.4,2.8 -1,-0.3 -3.4,-4.3 -3.4,-5.5 v -1.4 h -0 z m 31.7,2.8 c 0,-2.8 -0,-5.2 2.8,-5.2 h 0.6 c 0.6,0 1,0.7 1,1.4 0,2 -3,6.8 -4.4,7.3 v -3.6 h -0 z m 1.4,3.8 c 0.5,-1.8 3.8,-5 3.8,-7.1 v -1.4 c -0.6,-0.3 -0.7,-1.2 -1.6,-1.2 h -0.6 c -2.6,0 -3.8,2 -3.8,4.5 v 4.2 c -2,-0.5 -2.3,-1 -5.2,-1.2 -2,-0.2 -3.7,-0.4 -6,-0.4 h -3.6 c -4.8,0 -8.9,0.3 -12.1,2 0.2,-0.7 0.4,-0.9 0.4,-1.8 v -3.4 c 0,-1.4 -1,-3.8 -2.2,-3.8 h -0.8 c -0.8,0 -2.6,1.9 -2.6,3 0,2 2.1,5.5 3,6.8 l -5.7,-0.5 c -1.2,0 -3.4,1.1 -3.4,2.1 v 0.6 c 0,1.3 1.7,2.8 3,2.8 h 0.2 c 2.9,0 4.5,-2 6.3,-2.4 -1.9,3.5 -3.8,22 -3.8,28.1 v 6 c 0,5.9 0.3,12.3 6.1,12.3 h 26.1 c 4.1,0 6.1,-3.8 6.1,-7.9 v -10.5 c 0,-2.3 -0.2,-5.5 -0.4,-7.7 -0.2,-1.8 -0.8,-5.7 -0.8,-7.4 0,-2.6 -0.7,-4.7 -1,-7.1 -0.2,-2.1 -1.3,-4.3 -1.8,-6.2 1.2,0.6 4.9,3 6.1,3 h 1.2 c 1,0 1.8,-0.8 1.8,-1.8 v -0.2 c 0,-2.2 -1.5,-3.8 -3.8,-3.8 h -2.6 l -2.8,0.4 z m -28.1,0.6 c 0.5,1.9 8.9,3.2 11.9,3.2 h 1 c 3.1,0 12.5,-1.4 12.7,-3.6 -4.1,-1 -6.5,-1.8 -11.9,-1.8 h -1.4 c -2.4,0 -4.4,0.4 -6.5,0.6 -2.9,0.4 -3.8,1.1 -5.8,1.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 105.3,110.1 c -0.3,0.3 -2.2,1.8 -2.6,1.8 -0.4,0 -0.2,-0.1 -0.8,-0.2 0,1.5 -1.1,4.3 -1.3,6 -0.3,1.6 -1,4.8 -1,6.3 l -0.1,1.8 0.5,4.2 3.1,-9.7 -0.8,-0.2 -0.4,-3.6 1.5,3 1.2,-3 -0.5,-0.6 0.1,-2 1,1.7 1.7,-3 h -0.4 l 0.2,-2.4 -0.3,-1.2 -1.2,1.2 z m 0,0 1.2,-1.2 0.3,1.2 0.7,1.9 1.5,-2 c -0.1,-0.3 -0.4,-0.7 -0.4,-1 0,-0.5 0.6,-0.8 0.6,-2.2 h 0.2 l 0.4,2.3 3.4,-5.7 -0.2,-0.1 c 1.3,0.4 -0.4,2.4 -0.8,3 -0.6,1 -1.3,2.1 -1.8,3.2 l 1.4,-0.4 c -0.8,1.2 -0.9,1.7 -2.4,1.6 l -1.4,2 2.8,-0.2 c -0.3,0.2 -2,1.2 -2.4,1.2 -0.5,0 -0.5,-0.1 -1,-0.2 l -1.4,2.8 3.2,-0.2 -3,1.3 -0.8,-0.4 -1.2,3.1 3.6,-0.4 c -0.3,0.2 -2.9,1.4 -3.2,1.4 -0.5,0 -0.2,-0.1 -1,-0.2 -0.3,2.9 -3.2,8.2 -3.2,12.3 l -0.1,1 0.3,2.2 h -1.4 c 0,-4 -1.2,-13.6 -2.4,-15.8 h -1 l -2.2,-1.6 3,0.6 c 0,-0.7 -0.8,-3.4 -1.2,-3.5 -1.3,-0.2 -2.3,-0.5 -3,-1.5 l 2.9,0.4 -1.1,-2.8 c -1.5,0.1 -2.5,-0.6 -3.6,-1.6 l 3.2,0.6 -1.1,-2.2 c -0.2,0.1 -0.5,0.2 -0.6,0.2 -0.7,0 -2,-1 -2.4,-1.4 l 2.6,0.4 -0.6,-1 h -1 l -1,-1.9 1.3,0.7 -2.5,-5.7 0.4,-0.2 2.8,5.9 0.3,-0 0.7,-2.4 c 0,1.3 0.4,1.2 0.4,2.4 v 0.2 c 0,0.7 -0.6,0.6 -0.6,1 0,0.4 0.5,1 0.7,1.2 l 0.7,-1.8 h 0.4 v 1.6 c 0,0.5 -0.3,0.6 -0.6,1 0.2,0.9 0.5,2.1 1.3,2.3 l 1.3,-2.1 c 0,1.5 0,2.6 -1,3.2 l 0.7,1.7 1.1,-1.2 0,2 -0.6,0.8 0.8,2.8 1.2,-1.2 0,2 -0.6,0.7 1.2,3.6 c 0,-2.8 0.4,-4 0.9,-6.2 0.3,-1.3 1.3,-5.6 1.2,-6 l -0.9,-0.5 -0.2,-2.5 1.5,1.9 0.5,-2.7 -0.6,-0.5 -0.4,-2.8 1.7,2.2 0.8,-2.4 c -1,-0.5 -0.8,-0.8 -0.7,-2.4 l 1,1.4 0.9,-2.1 c -0.4,-0.1 -0.6,-0 -0.6,-0.6 0,-0.8 0.4,-0.9 0.4,-2.4 l 0.1,0 0.5,2.1 0.3,-0 2.1,-5.9 0.8,0.1 -2.3,6.1 1.3,-0.7 c -0.2,0.9 -0.6,1.8 -1.8,1.8 l -0.8,2 2.4,-0.4 c -0.7,0.6 -1.5,1.4 -2.8,1.4 l -0.7,2.4 3,-0.8 c -0.2,0.3 -2.4,2 -2.8,2 -0.4,0 -0.2,-0.1 -0.8,-0.2 l -0.8,2.7 3,-0.5 z M 87.1,90.1 c 2,-0.5 2.9,-1.2 5.8,-1.6 2.1,-0.3 4.1,-0.6 6.5,-0.6 h 1.4 c 5.4,0 7.8,0.8 11.9,1.8 -0.2,2.2 -9.6,3.6 -12.7,3.6 h -1 c -3,0 -11.4,-1.3 -11.9,-3.2 z m -5.8,33.5 v 2.4 c 0,5.5 -0.1,11.9 5.3,11.9 h 26.4 c 2.8,0 3.8,-1.7 4.9,-3.4 l 0.4,-3.6 v -8.3 c 0,-9 -0.8,-15.9 -2,-23.6 -1.6,-10.1 -2.6,-11.3 -14.2,-11.3 h -4.4 c -13.3,0 -11.6,1.7 -14.3,11.8 -0.4,1.6 -0.4,4 -0.8,5.8 -0.5,2 -0.2,3.9 -0.6,6 -0.6,3.3 -0.7,8.6 -0.7,12.4 z M 114.8,90.2 c 0.7,1.2 5.2,3.9 6.9,3.9 h 0.6 c 0.6,0 1.2,-0.2 1.2,-0.8 v -0.6 c 0,-2.2 -2.6,-3.3 -4.8,-3.1 l -4,0.6 0,0 z m -39.2,0.9 v 0.8 c 0,0.8 1.4,2 2.4,2 h 0.4 c 2,0 5.8,-1.9 6.5,-3 -2,-0.4 -2.6,-0.6 -5,-0.8 -3.8,-0.3 -2.1,0.4 -4.3,1 z m 38.3,-5.3 v 3.6 c 1.3,-0.5 4.4,-5.3 4.4,-7.3 0,-0.7 -0.4,-1.4 -1,-1.4 h -0.6 c -2.8,-0 -2.8,2.4 -2.8,5.1 z m -31.7,-2.8 v 1.4 c 0,1.3 2.4,5.3 3.4,5.5 0,-1.3 0.4,-1.5 0.4,-2.8 v -4.2 c 0,-0.6 -0.8,-2.2 -1.4,-2.2 h -0.6 c -0.8,0 -1.8,1.3 -1.8,2.2 z"}],i["GR.IN.IC.ATM"]=[{type:"path",stroke:!1,d:"m 73.6,116.3 c 5.1,-0.1 15.8,-6.6 17,-6.6 0.4,0 7.4,3.8 8.9,4.2 -0.4,0.6 -5.1,4.6 -6.2,5.7 -1.2,1.2 -4.7,5.8 -5.5,6.4 -1.6,-0.8 -14,-8.9 -14.2,-9.6 z m -15.1,-6.2 11.9,-2.5 11.1,5.6 -9.6,3 16.2,10.7 -0,-0.2 6.4,-7.5 26.9,12.7 20.3,-46.8 -50.2,-17.2 c -0.6,2.2 -5.2,9.1 -6.5,11.8 -0.8,1.8 -2.3,4.4 -3.3,6 -1.2,1.8 -2.2,4.1 -3.3,6 -1.2,2 -2.1,3.8 -3.3,5.8 -1.2,1.9 -2.1,4.2 -3.3,6 -2.4,3.6 -0.2,2.7 -5.5,3.7 -2.6,0.5 -5.2,1 -7.7,1.6 m 62,21.5 -25.2,-11.8 4.8,-4 7.3,3.5 1.2,-2.4 -23.9,-11.7 v 0.2 l -1,2.2 6,2.9 -6.2,3.4 -11.8,-5.8 -0.2,0 20.7,-37 0.2,0.1 47.4,16.1 h 0.2 l -19.4,44.2 z m 7.8,-31.3 1.1,-2 -5.8,-2.3 -0.8,2.3 z m -2.7,5.2 1.2,-1.9 -5.6,-2.3 -0.8,2.2 z m -22,-7.3 c 0.6,0.4 2.1,1.4 2.1,2.1 v 2.4 c 0,0.8 -1.7,1.5 -2.6,1.5 h -0.2 c -0.8,0 -1,-0.2 -1.7,-0.4 l 2.4,-5.7 z m -3.4,-6.4 c 0,-2.2 1.1,-2.8 3.2,-2.8 h 0.2 c 0.7,0 1,0.2 1.5,0.4 l -2.2,5.1 c -0.9,-0 -2.8,-1.2 -2.8,-2.4 v -0.2 z m 5.6,-4.2 c -0.3,-0.1 -1.2,-0.5 -1.6,-0.5 h -1.9 c -0.7,0 -2.5,0.6 -2.9,0.9 -0.3,0.2 -1.4,2.1 -1.4,2.5 v 1.7 c 0,2.1 3.8,4.2 3.8,4.9 0,0.4 -2.2,4.6 -2.4,5.7 -0.6,-0.3 -2.5,-1.8 -2.5,-2.6 v -0.6 c 0,-0.8 0.6,-1.4 0.8,-2.1 -0.9,-0.2 -2,-1.1 -2.4,-1.2 -0.4,-0.1 -1,1.7 -1,2.3 v 0.4 c 0,2.7 4.2,5.4 4.2,5.7 0,0.6 -0.4,1.4 -0.5,2 l 1.7,0.8 0.6,-1.7 c 1.4,0 2,0.8 3.6,0.8 h 0.6 c 1.4,0 2.6,-0.5 3.2,-1.3 0.3,-0.4 1.5,-2.4 1.5,-3 v -0.4 c 0,-2.6 -2.8,-4.8 -4.4,-5.9 l 2.5,-5.6 h 0.4 c 0.4,1.2 1.5,0.6 1.5,3.6 l 2.8,1.2 v -1.7 c 0,-2 -2,-4.1 -3.8,-4.6 l 0.8,-2.1 -2.1,-0.5 -0.8,1.5 z m 13,18.4 -0.9,2 5.4,2.2 -0,-0.2 1.2,-1.8 z m -22.4,-25.2 26.1,9.5 -11,24.1 -26.7,-12.8 11.6,-20.8 z m -12.5,21.2 27.8,13.4 11.7,-25.7 c -1,-0.1 -11.8,-4.2 -13.4,-4.8 -1.2,-0.5 -13.3,-5 -13.5,-5 -0.9,0 -5.4,9.5 -6.4,10.8 -0.8,1.3 -5.9,10.3 -6.1,11.2 z m 31.7,11.2 5.4,2.2 -0.1,-0.2 1.3,-1.8 c -1.1,-0.2 -5,-2.2 -5.5,-2.2 -0.4,0 -1.1,1.6 -1.2,2.1 z m -25.8,0.6 4.3,2.9 -6,5.8 -6,-4.1 7.7,-4.6 z m -9.1,4.5 7.4,4.9 7.1,-6.6 c -0.5,-0.4 -5.3,-3.6 -5.4,-3.6 -1,0 -7.6,4.9 -9.1,5.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 115.7,111.8 c 0,-0.5 0.8,-2.1 1.2,-2.1 0.5,0 4.4,2 5.5,2.3 l -1.3,1.8 0.1,0.2 -5.4,-2.2 z m 3.2,-7.1 5.7,2.2 -1.2,1.8 0,0.2 -5.4,-2.2 0.9,-2 z m 2.4,-4.8 5.6,2.3 -1.2,1.9 -5.2,-2 0.8,-2.2 z m 2.5,-5.3 5.8,2.3 -1.1,2 -5.5,-2 0.8,-2.3 z m -39.7,6 c 0.2,-1 5.3,-10 6.1,-11.2 0.9,-1.4 5.4,-10.8 6.4,-10.8 0.2,0 12.3,4.5 13.5,5 1.7,0.7 12.5,4.8 13.5,4.8 l -11.7,25.7 -27.8,-13.4 z m 55.9,-14.6 h -0.2 l -47.4,-16.1 -0.2,-0.1 -20.7,37 0.2,-0 11.8,5.8 6.3,-3.4 -6,-2.9 1,-2.2 v -0.2 l 23.9,11.7 -1.2,2.4 -7.3,-3.5 -4.8,4 25.2,11.8 19.4,-44.2 0,0 z m -59.1,30.9 c 1.5,-0.4 8,-5.3 9.1,-5.3 0.2,0 4.9,3.2 5.5,3.6 l -7.2,6.6 -7.4,-4.9 z m -7.2,-0.6 c 0.2,0.8 12.6,8.8 14.2,9.6 0.8,-0.6 4.3,-5.2 5.5,-6.4 1.1,-1.1 5.8,-5.1 6.2,-5.7 -1.6,-0.3 -8.5,-4.1 -8.9,-4.1 -1.2,0 -11.9,6.5 -17,6.6 z m 26.6,-25.9 v 0.2 c 0,1.2 1.8,2.4 2.7,2.4 l 2.2,-5 c -0.4,-0.2 -0.8,-0.4 -1.5,-0.4 h -0.2 c -2.1,0 -3.2,0.7 -3.2,2.8 z m 0.9,12.1 c 0.7,0.2 0.9,0.4 1.7,0.4 h 0.2 c 1,0 2.6,-0.7 2.6,-1.5 v -2.4 c 0,-0.7 -1.6,-1.7 -2.1,-2.1 l -2.4,5.6 z m 5.5,-17.7 2.1,0.5 -0.8,2.1 c 1.8,0.4 3.8,2.5 3.8,4.6 v 1.7 l -2.8,-1.1 c 0,-3 -1.1,-2.4 -1.5,-3.6 h -0.4 l -2.5,5.6 c 1.6,1.1 4.4,3.3 4.4,5.9 v 0.4 c 0,0.6 -1.2,2.6 -1.5,3 -0.6,0.8 -1.8,1.3 -3.2,1.3 h -0.6 c -1.6,0 -2.2,-0.7 -3.6,-0.8 l -0.6,1.7 -1.7,-0.8 c 0.1,-0.6 0.5,-1.4 0.5,-2 0,-0.3 -4.2,-2.9 -4.2,-5.7 v -0.4 c 0,-0.6 0.6,-2.4 1,-2.4 0.4,0.1 1.4,1 2.4,1.2 -0.2,0.7 -0.7,1.3 -0.7,2.1 v 0.6 c 0,0.8 1.8,2.3 2.4,2.6 0.2,-1 2.4,-5.3 2.4,-5.7 0,-0.7 -3.8,-2.8 -3.8,-4.9 V 89.1 c 0,-0.4 1.1,-2.3 1.4,-2.5 0.4,-0.3 2.2,-0.9 2.9,-0.9 h 1.9 c 0.4,0 1.4,0.4 1.6,0.5 l 0.8,-1.4 z m -21.8,15.4 26.6,12.9 11,-24.1 -26,-9.5 -11.6,20.8 z m 5,12.1 -7.7,4.6 6,4.1 6,-5.8 z"}],i["GR.IN.IC.BANK"]=[{type:"path",stroke:!1,d:"m 100.8,110.6 c 2.4,0 5.3,1.9 5.3,4.4 v 0.7 c 0,3.1 -2.1,4.9 -5.3,4.9 v -9.9 z m -6.6,-8.8 c 0,-2.3 1.7,-4.4 4,-4.4 h 0.7 v 9 c -1.9,-0.4 -4.6,-1.6 -4.6,-3.7 v -0.9 z m 6.6,-4.4 c 2.2,0 4.6,1.6 4.6,3.5 v 0.9 h 3.5 c 0,-5.3 -3.7,-6.7 -8.1,-7.7 v -2.4 h -2 v 2.4 c -3.9,0 -8.2,3.5 -8.2,7 v 2.6 c 0,1.3 2,3.6 3,4.2 1,0.6 3.8,1.8 5.1,1.9 v 10.6 c -3.4,-0.1 -5.2,-2.6 -5.2,-6.1 h -3.3 l 0.2,3.5 c 1.1,1.7 0.9,2.8 2.9,4.1 1.3,0.8 3.4,1.6 5.5,1.6 v 4 h 2 v -3.9 c 4.9,0 9,-3.4 9,-8.1 v -1.8 c 0,-4.2 -5.4,-6 -9,-6.8 v -9.4 z m -25.3,15.2 v -2.4 c 0,-2.2 2.6,-7.4 3.1,-9.4 0.7,-2.7 3.1,-5.9 4.7,-8 3.5,-4.6 8.5,-8.9 16.5,-8.9 h 4.4 c 3.4,0 8.8,4.3 10.4,6.5 1.3,1.7 2.2,3.1 3.4,5 0.5,0.7 2.7,5.2 2.7,5.9 v 0.7 h 0.4 v 0.7 c 0,0.4 0.9,1.5 0.8,3.1 l 0.5,0.7 c 0,2 1.1,6.8 1.3,9 0.4,3.2 1.3,5.6 -0.7,8.5 0,2.4 -5.2,8.7 -6.2,8.8 l -9.2,-1.5 c -1.8,-0.3 -6.8,2 -9.2,2 -2,0 -5.6,-1.7 -7.5,-1.7 -1.6,0 -3.2,1.3 -5.5,1.3 h -0.6 c -1.9,0 -5.9,-6.1 -7,-7.7 -1.8,-2.6 -2.4,-8 -2.4,-12.3 z m 30.7,-31 -6.1,-1.1 c -0.8,-0.1 -5.2,1.1 -5.8,1.3 l -6.3,-11.5 1.7,0.5 v -2.9 l 8.9,3.4 0.3,-3.5 3.2,2.5 5.7,-2.6 v 2.6 l 7.5,-1.4 -9.3,13 0,0 z m 11.8,-14.5 -9.1,1.6 v -2.8 c -0.9,0.5 -5.7,2.9 -6.6,2.9 -0.1,0 -3.4,-2.6 -4,-2.9 l -0.7,4 -8.8,-3.6 v 2.9 l -3.1,-1 8.1,15.1 -0.2,0.1 c -4.6,1.1 -10.3,6.8 -12.7,10.4 -0.8,1.1 -1.3,2.6 -2,3.7 -1.4,1.8 -0.9,2.5 -1.7,4 -0.6,1.1 -2.9,7.2 -2.9,8.6 v 3.7 c 0,1 0.7,5.8 1,6.7 0.4,1.4 0.4,2 0.8,3.2 0.3,0.9 0.9,1.6 1.4,2.3 1.3,2 4.8,7.5 7.6,7.5 2.5,0 4.3,-1.3 5.7,-1.3 2.3,0 5.2,1.7 7.3,1.7 h 0.7 c 2,0 5.7,-1.4 8,-1.9 1.8,-0.3 5.9,1 8.5,1 h 1.7 c 1.7,0 4.8,-4.2 5.8,-5.5 1.1,-1.4 1.3,-2.2 1.7,-4 0.1,-0.4 1.1,-4.3 1.1,-4.4 0,-3 -0.9,-4.1 -1.1,-5.9 -0.2,-2.4 -0.4,-4 -0.7,-6.1 -0.2,-1.7 -2.8,-8.6 -3.6,-10.3 -2.4,-4.9 -7.7,-13.2 -14,-13.7 l 11.7,-16.2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 100.8,120.4 c 3.2,0 5.3,-1.7 5.3,-4.9 v -0.6 c 0,-2.5 -2.9,-4.3 -5.3,-4.4 v 9.8 z m -6.6,-18.7 v 0.9 c 0,2.2 2.8,3.3 4.6,3.7 v -9 h -0.7 c -2.3,0 -4,2 -4,4.4 z m 6.6,5 c 3.6,0.8 9,2.6 9,6.8 v 1.7 c 0,4.7 -4.1,8.1 -9,8.1 v 4 h -2 v -3.9 c -2,0 -4.2,-0.7 -5.5,-1.6 -2,-1.3 -1.7,-2.5 -2.9,-4.2 l -0.2,-3.5 h 3.3 c 0,3.5 1.8,6.1 5.3,6.2 v -10.6 c -1.3,-0.1 -4.1,-1.3 -5.1,-2 -1,-0.6 -3,-3 -3,-4.2 v -2.6 c 0,-3.5 4.2,-7 8.1,-7 v -2.4 h 2 v 2.4 c 4.4,1 8.1,2.3 8.1,7.7 h -3.5 v -0.9 c 0,-1.9 -2.5,-3.5 -4.6,-3.5 v 9.5 l 0,0 z m -25.3,5.8 c 0,4.3 0.6,9.8 2.4,12.3 1.1,1.6 5.1,7.7 7,7.7 h 0.7 c 2.3,0 3.9,-1.3 5.5,-1.3 1.9,0 5.5,1.7 7.5,1.7 2.5,0 7.4,-2.3 9.2,-2 l 9.1,1.5 c 1,0 6.2,-6.4 6.2,-8.8 2,-2.9 1,-5.3 0.7,-8.6 -0.2,-2.2 -1.3,-6.9 -1.3,-9 l -0.5,-0.6 c 0.1,-1.6 -0.8,-2.7 -0.8,-3.1 v -0.7 h -0.4 v -0.7 c 0,-0.7 -2.2,-5.2 -2.7,-5.9 -1.1,-1.9 -2.1,-3.2 -3.4,-5 -1.6,-2.2 -7,-6.5 -10.4,-6.5 h -4.4 c -8,0 -13,4.4 -16.5,8.9 -1.6,2.1 -4,5.3 -4.7,8 -0.5,2 -3.1,7.2 -3.1,9.4 v 2.4 z m 40,-44 -7.4,1.5 v -2.6 l -5.8,2.6 -3.2,-2.4 -0.3,3.5 -8.9,-3.4 v 2.9 l -1.7,-0.5 6.3,11.5 c 0.5,-0.2 5,-1.4 5.8,-1.3 l 6.1,1.1 9.3,-13 0,0 z"}],i["GR.IN.IC.BULLION STORAGE"]=[{type:"path",stroke:!1,d:"m 123.1,77.9 c 0.4,0.1 0.9,0.5 1.3,1 0.4,0.5 0.8,1.2 1.3,2 l 2.1,4.1 -2.2,0 -1.9,-3.9 c -0.5,-1 -1,-1.7 -1.5,-2 -0.5,-0.3 -1.1,-0.5 -1.9,-0.5 l -2.2,0 0,6.4 -2.1,0 0,-15.2 4.6,0 c 1.7,1.5e-5 3,0.4 3.9,1.1 0.9,0.7 1.3,1.8 1.3,3.3 -1e-5,1 -0.2,1.7 -0.7,2.4 -0.4,0.6 -1.1,1.1 -1.9,1.3 m -5.1,-6.4 0,5.4 2.6,0 c 1,8e-6 1.7,-0.2 2.2,-0.7 0.5,-0.5 0.8,-1.1 0.8,-2 -1e-5,-0.9 -0.3,-1.6 -0.8,-2 -0.5,-0.5 -1.2,-0.7 -2.2,-0.7 l -2.6,0 m -12.3,-0.3 c -1.5,1.4e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 -10e-6,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,10e-7 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -1e-5,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.5e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -1e-5,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,0 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -10e-7,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1 m -21,0.3 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -2,0.5 0,2 c -0.8,-0.4 -1.5,-0.6 -2.2,-0.8 -0.7,-0.2 -1.4,-0.3 -2,-0.3 -1.1,1.4e-5 -2,0.2 -2.6,0.7 -0.6,0.4 -0.9,1 -0.9,1.8 -3e-6,0.7 0.2,1.2 0.6,1.5 0.4,0.3 1.2,0.6 2.3,0.8 l 1.2,0.3 c 1.5,0.3 2.7,0.8 3.4,1.5 0.7,0.7 1.1,1.7 1.1,2.9 -1.2e-5,1.5 -0.5,2.6 -1.5,3.3 -1,0.8 -2.4,1.1 -4.3,1.1 -0.7,0 -1.5,-0.1 -2.3,-0.2 -0.8,-0.2 -1.6,-0.4 -2.5,-0.7 l 0,-2.1 c 0.8,0.5 1.6,0.8 2.4,1.1 0.8,0.2 1.6,0.4 2.4,0.4 1.2,10e-7 2.1,-0.2 2.7,-0.7 0.6,-0.5 1,-1.1 1,-2 -1e-5,-0.7 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.7 -2.2,-0.9 l -1.2,-0.2 c -1.5,-0.3 -2.6,-0.8 -3.3,-1.4 -0.7,-0.6 -1,-1.6 -1,-2.7 -2e-6,-1.3 0.5,-2.4 1.4,-3.2 0.9,-0.8 2.3,-1.2 3.9,-1.2 0.7,1.5e-5 1.4,0.1 2.2,0.2 0.7,0.1 1.5,0.3 2.3,0.6 M 103.6,119.3 h 9.6 c 0.4,0 9,9.2 9.6,10.1 H 95.6 c 0.2,-1 7.4,-10.1 8,-10.1 z m -29.2,0 h 9.9 c 0.6,0 8.2,9 8.9,10.1 H 65.9 c 0.3,-1 7.8,-10.1 8.4,-10.1 l 0,0 z m 11.5,0 h 15.4 l -6.9,9.9 -8.5,-9.9 z m -5.5,-1 c 0.7,-1.1 7.6,-9.4 8.4,-9.4 h 9.2 c 0.7,0 8.9,8.5 9.2,9.4 H 80.4 z m 43.7,10.8 -9.5,-10.4 10.4,-14.3 9.7,8.5 -10.7,16.1 0,0 z m -4.8,-24.8 4.8,-0 -10.5,14.1 -4.1,-0.1 9.8,-13.9 z m -31.1,-0.2 2.8,0.1 c -1.1,1.6 -4.6,4.9 -6.2,6.8 -1.7,2.1 -4.2,5.1 -5.6,7.2 l -4.2,-0.1 13.2,-14.1 z m 21.1,-8.6 c 0.9,0.6 9,8.2 9,8.5 0,0.1 -9.3,13.6 -9.9,14 l -8.9,-9.9 9.8,-12.6 z M 89.1,108 c 0.9,-1.3 11.4,-12.6 12.1,-12.6 h 6.8 l -9.5,12.5 -9.4,0 z m 2.9,-4.6 h -4.6 c -1.2,1.8 -4.3,4.9 -6,6.6 -2.1,2.1 -3.9,4.4 -6,6.5 -1.3,1.3 -11.2,12.8 -11.4,13.7 0.5,0.1 0.5,0.2 1.2,0.2 l 59.3,-0 11.6,-17.5 -0.3,0.1 -10.5,-9.6 h -5.8 c -1.5,-1 -9.6,-8.9 -10.4,-8.9 h -8.2 c -0.9,0 -7.6,8 -9,8.9 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 103.6,119.3 c -0.5,0 -7.7,9.2 -8,10.1 h 27.3 c -0.6,-1 -9.2,-10.1 -9.6,-10.1 h -9.6 z m -29.2,0 c -0.6,0 -8.2,9.1 -8.4,10.1 h 27.3 c -0.7,-1.1 -8.3,-10.1 -8.9,-10.1 H 74.3 l 0,0 z m 50.7,-14.7 -10.4,14.3 9.5,10.4 10.7,-16.1 z m -30.7,24.7 6.9,-9.9 -15.4,0 z m 5.1,-21.1 8.9,9.9 c 0.6,-0.4 9.9,-13.9 9.9,-14 0,-0.3 -8.1,-7.9 -9,-8.5 l -9.9,12.6 z m -19.1,10.2 h 26.8 c -0.2,-0.9 -8.5,-9.4 -9.2,-9.4 h -9.2 c -0.9,0 -7.7,8.3 -8.4,9.4 z m 33.2,0.1 10.5,-14.1 -4.8,0 -9.8,13.9 z m -38.6,-0.2 4.2,0.1 c 1.4,-2.1 3.9,-5.1 5.6,-7.2 1.6,-1.9 5.1,-5.2 6.2,-6.8 l -2.8,-0.1 -13.2,14.1 z m 14.1,-10.3 9.4,-0 9.5,-12.5 h -6.7 c -0.7,0 -11.2,11.2 -12.1,12.6 z"}],i["GR.IN.IC.FEDERAL RESERVE BANK"]=[{type:"path",stroke:!1,d:"m 65.6,125.4 h 68.8 v 4.4 H 65.6 v -4.4 z m 58.1,-31.3 h 5.3 v 29.9 h -5.3 v -29.9 z m -10.6,0 h 5.1 v 29.9 h -5.1 v -29.9 z m -31.3,0 h 5.3 v 29.9 H 81.8 v -29.9 z m -10.6,0 h 5.1 v 29.9 h -5.1 v -29.9 z m 27.7,1.5 h 2 v 1.4 h 0.5 c 2.9,0 6,2.3 6,5.3 l -2.9,0.4 c -0.2,-0 -1,-1.9 -1.4,-2.4 -0.4,-0.5 -1.5,-1.1 -2.3,-1.2 v 7.8 c 3,0.3 7.3,2.3 7.3,5.3 v 1.1 c 0,4 -3.4,6.7 -7.3,6.7 v 2.5 h -2 v -2.5 c -1.7,-0 -4.1,-0.8 -5.1,-1.7 -0.8,-0.7 -2.4,-2.8 -2.4,-4.1 v -0.9 l 3.1,-0.5 c 0,2.3 2,4.9 4.4,4.9 v -8.6 c -2.3,-0 -6.9,-2.5 -6.9,-5.1 v -1.8 c 0,-3 3.2,-5.3 6.2,-5.3 h 0.7 v -1.4 z m -33.3,-7.5 h 68.8 v 4.6 H 65.6 v -4.6 z M 100,70.3 c 0.7,0.6 6.5,3.4 7.9,4.1 2.7,1.4 5.2,2.7 7.9,4.1 2.7,1.3 5.3,2.7 7.9,4.1 1.1,0.6 7.7,3.6 8.1,4 H 68.5 l 31.5,-16.1 0,0 z m -35.9,17.1 v 6 c 0,0.4 0.3,0.7 0.7,0.7 h 4.9 v 29.9 h -5.6 v 7.4 h 71.7 v -7.4 h -5.5 v -29.9 h 4.9 c 0.4,0 0.5,-0.1 0.5,-0.5 v -6.7 c -2,-0.7 -6.7,-3.4 -8.9,-4.6 -3,-1.5 -5.9,-3 -8.9,-4.6 -1.7,-0.8 -17.8,-9.1 -17.9,-9.1 -0.4,0 -16.3,8.2 -18.1,9.2 -1.9,1 -17.8,8.7 -17.8,9.6 l 0,0 0,0 z m 36.7,30.4 c 1.7,0 4,-2 4,-3.5 v -1.4 c 0,-2.1 -2.3,-2.7 -4,-3.1 v 8 z m -5.6,-14 c 0,1.6 2.2,2.6 3.6,2.7 v -7.4 c -1.3,0.3 -3.6,1.4 -3.6,2.7 v 2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 134.4,129.8 0,-4.4 -68.8,0 0,4.4 z m -5.5,-5.8 0,-29.9 -5.3,0 0,29.9 z m -10.8,0 0,-29.9 -5.1,0 0,29.9 z m -31.1,0 0,-29.9 -5.3,0 0,29.9 z m -10.7,0 0,-29.9 -5.1,0 0,29.9 z m -7.9,-37.5 63.3,0 c -0.4,-0.3 -6.9,-3.4 -8.1,-4 -2.7,-1.3 -5.2,-2.7 -7.9,-4.1 -2.7,-1.3 -5.2,-2.7 -7.9,-4.1 -1.4,-0.7 -7.2,-3.5 -7.9,-4.1 l -31.5,16.1 0,0 z m 65.9,6.2 0,-4.6 -68.8,0 0,4.6 z m -33.5,25.1 v -8 c 1.7,0.4 4,1 4,3.1 v 1.5 c 0,1.4 -2.2,3.5 -4,3.5 z m -5.6,-14 v -2 c 0,-1.3 2.4,-2.4 3.6,-2.7 v 7.4 c -1.5,-0.1 -3.6,-1.1 -3.6,-2.7 z m 3.6,-6.7 h -0.8 c -3,0 -6.2,2.3 -6.2,5.3 v 1.8 c 0,2.5 4.6,5.1 6.9,5.1 v 8.6 c -2.4,0 -4.4,-2.5 -4.4,-4.9 l -3.1,0.5 v 0.9 c 0,1.3 1.6,3.5 2.4,4.1 1,0.8 3.3,1.6 5.1,1.7 v 2.5 h 2 v -2.5 c 3.9,0 7.3,-2.7 7.3,-6.7 v -1.1 c 0,-3 -4.3,-5 -7.3,-5.3 v -7.8 c 0.8,0.1 1.9,0.6 2.3,1.2 0.3,0.5 1.1,2.3 1.4,2.4 l 2.9,-0.4 c 0,-3 -3.1,-5.3 -6,-5.3 h -0.6 v -1.4 h -2 v 1.4 z"}],i["GR.IN.IC.FINANCIAL EXCHANGE"]=[{type:"path",stroke:!1,d:"m 133.7,124.6 0,-1.4 -66.8,0 0.3,0 0,-47 -1,0 0,48.4 z m -29.5,-8.6 -9.8,-20.8 -5.9,14.4 -5.3,-6.5 -13.3,12.4 0.9,1 v 0.2 l 12.4,-11.3 5.5,7 h 0.3 c 0,-1 2.3,-5.6 2.8,-7 0.3,-1 1.1,-2.4 1.5,-3.4 0.3,-0.8 0.9,-3.1 1.5,-3.2 l 9.4,20.3 0.1,0.2 17.4,-27.4 0.2,0.1 8,15.6 1.4,-0.5 -9.4,-18 c -0.1,0.5 -7.7,12.1 -8.7,13.6 -1,1.6 -8.2,13.2 -8.9,13.4 z m 2.8,-19.4 V 89.2 c 2.1,0 4.1,1.4 4.1,3.6 v 0.2 c 0,2.1 -1.9,3.6 -4.1,3.6 z m -4.7,-13.6 c 0,-2 1,-3.4 3,-3.4 h 0.5 v 6.6 c -1.8,-0.1 -3.4,-1.3 -3.4,-3.2 z m 3.5,-5.6 h -1 c -2.6,0 -5.2,2.9 -5.2,5.6 v 1 c 0,1.1 1.3,2.8 2.1,3.4 1.1,0.8 2.5,1.2 4,1.5 v 7.8 c -2.6,-0.6 -4.1,-1.7 -4.1,-4.8 h -2.4 l 0.2,2.5 c 0.9,1.4 0.6,2.1 2.2,3.2 1.1,0.7 2.4,1.2 4.1,1.2 v 2.8 h 1.2 v -2.8 c 3,0 6.4,-2.3 6.4,-5 v -2.5 c 0,-2.9 -4,-4.3 -6.4,-4.8 v -6.9 c 2,0 3.4,1.4 3.4,3.3 h 2.7 c 0,-3.2 -2.8,-5.5 -6.1,-5.5 V 75.4 h -1.2 v 1.9 z"}],i["GR.IN.IC.FINANCIAL SERVICES, OTHER"]=[{type:"path",stroke:!1,d:"m 103.4,138.2 -2.7,0 -0,-8.2 c -1.9,-0 -3.8,-0.3 -5.7,-0.7 -1.9,-0.4 -3.8,-1 -5.8,-1.9 l 0,-4.9 c 1.9,1.2 3.7,2.1 5.6,2.7 1.9,0.6 3.9,0.9 5.9,0.9 l 0,-12.5 c -4,-0.7 -7,-1.8 -8.8,-3.3 -1.8,-1.6 -2.7,-3.7 -2.7,-6.5 -5e-6,-3 1,-5.3 3,-7 2,-1.7 4.8,-2.7 8.6,-3 l 0,-6.4 2.7,0 0,6.3 c 1.7,0.1 3.3,0.3 4.9,0.5 1.6,0.3 3.1,0.7 4.6,1.1 l 0,4.8 c -1.5,-0.8 -3.1,-1.4 -4.7,-1.8 -1.6,-0.4 -3.2,-0.7 -4.9,-0.7 l 0,11.7 c 4.1,0.6 7.2,1.8 9.1,3.4 2,1.6 2.9,3.9 2.9,6.7 -3e-5,3.1 -1,5.5 -3.1,7.3 -2.1,1.8 -5,2.8 -8.9,3.1 l 0,8.3 m -2.7,-29.3 0,-11.2 c -2.1,0.2 -3.7,0.8 -4.8,1.8 -1.1,1 -1.7,2.3 -1.7,3.9 -1e-5,1.6 0.5,2.8 1.5,3.7 1,0.9 2.7,1.5 5,1.9 m 2.7,5.3 0,11.8 c 2.3,-0.3 4.1,-1 5.2,-2 1.2,-1 1.8,-2.3 1.8,-4 -3e-5,-1.6 -0.6,-2.9 -1.7,-3.8 -1.1,-0.9 -2.9,-1.6 -5.3,-2.1 m 5.8,-52.2 2.1,0 0,6.2 7.5,0 0,-6.2 2.1,0 0,15.2 -2.1,0 0,-7.2 -7.5,0 0,7.2 -2.1,0 0,-15.2 m -14.8,0 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -8.1,1.4 c -1.5,1.3e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 -3e-6,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,1e-6 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -1.3e-5,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.5e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -1.5e-5,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,-10e-7 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -1e-6,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1"}],i["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 101.9,123.3 -1.7,0 -0,-5 c -1.2,-0 -2.3,-0.2 -3.5,-0.4 -1.2,-0.3 -2.3,-0.6 -3.5,-1.1 l 0,-3 c 1.1,0.7 2.3,1.2 3.4,1.6 1.2,0.4 2.4,0.5 3.6,0.5 l 0,-7.6 c -2.4,-0.4 -4.2,-1.1 -5.3,-2 -1.1,-1 -1.7,-2.3 -1.7,-3.9 -2e-6,-1.8 0.6,-3.2 1.8,-4.3 1.2,-1 2.9,-1.6 5.2,-1.8 l 0,-3.9 1.7,0 0,3.9 c 1,0 2,0.2 3,0.3 1,0.2 1.9,0.4 2.8,0.7 l 0,2.9 c -0.9,-0.5 -1.9,-0.8 -2.8,-1.1 -1,-0.3 -2,-0.4 -3,-0.4 l 0,7.1 c 2.5,0.4 4.4,1.1 5.5,2.1 1.2,1 1.8,2.4 1.8,4.1 -2e-5,1.9 -0.6,3.3 -1.9,4.4 -1.3,1.1 -3.1,1.7 -5.4,1.9 l 0,5 m -1.7,-17.8 0,-6.8 c -1.3,0.1 -2.3,0.5 -2.9,1.1 -0.7,0.6 -1,1.4 -1,2.3 -6e-6,1 0.3,1.7 0.9,2.2 0.6,0.5 1.6,0.9 3,1.1 m 1.7,3.2 0,7.2 c 1.4,-0.2 2.5,-0.6 3.2,-1.2 0.7,-0.6 1.1,-1.4 1.1,-2.4 -1e-5,-1 -0.3,-1.7 -1,-2.3 -0.7,-0.6 -1.7,-1 -3.2,-1.3 M 104.5,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 70 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 V 86.9 H 68.8 v 39.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 101.9,108.7 0,7.2 c 1.4,-0.2 2.5,-0.6 3.2,-1.2 0.7,-0.6 1.1,-1.4 1.1,-2.4 -1e-5,-1 -0.3,-1.7 -1,-2.3 -0.7,-0.6 -1.7,-1 -3.2,-1.3 m -1.7,-3.2 0,-6.8 c -1.3,0.1 -2.3,0.5 -2.9,1.1 -0.7,0.6 -1,1.4 -1,2.3 -6e-6,1 0.3,1.7 0.9,2.2 0.6,0.5 1.6,0.9 3,1.1 m 4.3,-30.7 0,13.4 -34.6,0 0,37 60.1,0 0,-37 -6.7,0 0,-13.4 -4.5,0 0,13.4 -9.9,0 0,-13.4 -4.5,0 z m -4.3,17.6 1.7,0 0,3.8 c 1,0 2,0.2 3,0.3 1,0.2 1.9,0.4 2.8,0.7 l 0,2.9 c -0.9,-0.5 -1.9,-0.8 -2.8,-1.1 -1,-0.3 -2,-0.4 -3,-0.5 l 0,7.1 c 2.5,0.4 4.3,1.1 5.5,2.1 1.2,1 1.8,2.4 1.8,4.1 -2e-5,1.9 -0.6,3.4 -1.9,4.4 -1.3,1.1 -3.1,1.7 -5.4,1.9 l 0,5 -1.7,0 -0,-5 c -1.2,-0 -2.3,-0.2 -3.5,-0.4 -1.2,-0.3 -2.3,-0.6 -3.5,-1.1 l 0,-3 c 1.1,0.7 2.3,1.3 3.4,1.6 1.2,0.4 2.4,0.5 3.6,0.5 l 0,-7.6 c -2.4,-0.4 -4.2,-1.1 -5.3,-2 -1.1,-1 -1.7,-2.2 -1.7,-3.9 -2e-6,-1.8 0.6,-3.2 1.8,-4.3 1.2,-1 3,-1.6 5.2,-1.8 l 0,-3.9 z"}],i["GR.IN.IC.CHEMICAL PLANT"]=[{type:"path",stroke:!1,d:"m 94.4,89.6 0,0.1 c -0.5,0.1 -1,0.3 -1.4,0.6 -0.5,0.5 -0.6,1.3 -0.5,1.9 0.2,0.8 0.8,1.5 1.7,1.8 -0,0.5 -0.1,1.7 0,3 l -0.1,0 c -0,2.7 -2.3,5.7 -4.9,8.8 -2.4,3 -5,6.4 -5.3,10.4 l -0.1,0 c 0,0.1 0,0.2 0,0.2 -0,0.1 -0,0.2 -0,0.3 l 0.1,0 c 0.2,2.4 1.7,4.2 3.7,5.3 2.1,1.2 4.6,1.7 6.8,1.6 l 0,-0 8.9,0 0,0.1 c 0.3,-0 0.5,-0 0.8,-0.1 l 0.5,0 0,-0.1 c 2.1,-0.2 4.2,-0.3 6,-1 1.1,-0.4 2.1,-1.1 2.8,-2.1 0.6,-0.9 0.9,-2.1 1.1,-3.6 l 0.2,0 c 0.2,-4.4 -2.1,-7.5 -4.5,-10.3 -2.3,-2.8 -4.7,-5.5 -5.4,-9.6 0,-1.3 0.1,-3 0.1,-3.3 0.2,-0.1 0.4,-0.2 0.6,-0.3 0.5,-0.4 0.9,-1 0.9,-1.7 -0,-0.7 -0.5,-1.3 -1.1,-1.6 -0.4,-0.2 -0.9,-0.3 -1.5,-0.4 l 0,-0.1 c -0.2,0 -0.4,-0 -0.6,0 -2.5,0 -7.2,0 -8.1,0 -0.1,-2.4e-4 -0.7,0 -0.7,0 z m 0.7,2 c 0.8,0 5.5,0 8.1,0 0.6,0 0.9,0.1 1.1,0.2 -0.2,0.1 -0.5,0.3 -0.9,0.4 l -8.1,0 c -0.4,-0.1 -0.7,-0.3 -0.7,-0.4 -0,-0.1 -0,-0.1 -0,-0.1 0,-0 0.1,-0.1 0.6,-0.1 z m 1.2,2.6 6.7,0 c -0,0.7 -0.1,1.9 -0.1,3.1 -0,0.1 -0,0.2 -0,0.3 l 0.1,0 c 0.9,4.5 3.5,7.6 5.8,10.3 2.2,2.7 4,5 4,8.4 l -0.1,0 c -0,1.4 -0.4,2.4 -0.8,3 -0.4,0.7 -1,1.1 -1.8,1.4 -1.4,0.6 -3.6,0.7 -5.8,0.9 l -10.3,0 0,0 c -1.6,0 -3.6,-0.4 -5.1,-1.3 -1.6,-0.9 -2.6,-2.2 -2.7,-3.9 0.1,-3.2 2.4,-6.3 4.9,-9.4 2.4,-3 5.1,-6.1 5.3,-9.6 l 0.1,-0 c -0.1,-1 -0.1,-2.7 -0,-3.3 z m -7,19.6 v 1.9 c 0,3.5 6,4.3 9.9,4.3 h 3.2 c 2.5,0 8,-2.2 8,-4.2 v -0.8 c 0,-3.2 -6.6,-9.4 -7.3,-12.4 h -7.5 c -0.6,2.5 -6.2,10 -6.2,11.2 z m 14.8,-39 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 v 13.4 h -34.4 v 39.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 104.1 74.8 L 104.1 88.2 L 69.6 88.2 L 69.6 125.2 L 129.6 125.2 L 129.6 88.2 L 122.9 88.2 L 122.9 74.8 L 118.5 74.8 L 118.5 88.2 L 108.6 88.2 L 108.6 74.8 L 104.1 74.8 z M 94.4 89.6 C 94.4 89.6 95.1 89.6 95.2 89.6 C 96.1 89.6 100.8 89.6 103.3 89.6 C 103.5 89.6 103.8 89.6 103.9 89.6 L 103.9 89.7 C 104.5 89.8 105 89.9 105.4 90.1 C 106 90.4 106.5 91 106.5 91.7 C 106.5 92.4 106.1 93 105.6 93.4 C 105.4 93.5 105.2 93.6 105 93.8 C 105 94 104.9 95.7 104.9 97.1 C 105.6 101.1 108 103.8 110.3 106.7 C 112.6 109.5 114.9 112.6 114.7 117 L 114.6 116.9 C 114.4 118.4 114.1 119.6 113.5 120.5 C 112.8 121.5 111.8 122.2 110.8 122.7 C 108.9 123.4 106.8 123.5 104.8 123.7 L 104.8 123.7 L 104.3 123.7 C 104.1 123.7 103.8 123.8 103.5 123.8 L 103.5 123.7 L 94.6 123.7 L 94.6 123.8 C 92.4 123.9 89.9 123.4 87.8 122.2 C 85.9 121.1 84.3 119.2 84.1 116.8 L 84.1 116.8 C 84.1 116.7 84.1 116.6 84.1 116.5 C 84.1 116.4 84 116.4 84 116.3 L 84.1 116.3 C 84.3 112.3 86.9 109 89.4 105.9 C 91.9 102.7 94.2 99.8 94.3 97.1 L 94.3 97.1 C 94.2 95.7 94.3 94.6 94.3 94 C 93.5 93.7 92.8 93.1 92.6 92.3 C 92.4 91.6 92.6 90.9 93.1 90.4 C 93.4 90 93.9 89.8 94.4 89.7 L 94.4 89.6 z M 95.1 91.6 C 94.7 91.6 94.5 91.7 94.5 91.8 C 94.5 91.8 94.5 91.7 94.6 91.8 C 94.6 91.9 94.8 92.2 95.3 92.2 L 103.4 92.2 C 103.8 92.1 104.1 92 104.3 91.8 C 104.1 91.8 103.8 91.6 103.2 91.6 C 100.6 91.6 95.9 91.6 95.1 91.6 z M 96.3 94.2 C 96.2 94.9 96.2 96.5 96.3 97.5 L 96.2 97.6 C 96 101.1 93.4 104.2 90.9 107.2 C 88.5 110.3 86.2 113.3 86.1 116.6 C 86.2 118.3 87.2 119.5 88.8 120.5 C 90.3 121.3 92.3 121.8 93.9 121.8 L 93.9 121.7 L 104.2 121.7 C 106.5 121.5 108.6 121.4 110 120.8 C 110.8 120.5 111.4 120.1 111.8 119.4 C 112.3 118.8 112.6 117.8 112.7 116.4 L 112.7 116.4 C 112.7 113 110.9 110.6 108.7 107.9 C 106.5 105.2 103.8 102.1 103 97.6 L 102.8 97.6 C 102.8 97.5 102.9 97.4 102.9 97.3 C 102.9 96.1 102.9 94.9 103 94.2 L 96.3 94.2 z M 95.5 102.6 L 103 102.6 C 103.8 105.7 110.3 111.9 110.3 115.1 L 110.3 115.9 C 110.3 117.9 104.9 120 102.4 120 L 99.2 120 C 95.3 120 89.3 119.2 89.3 115.7 L 89.3 113.8 C 89.3 112.6 94.9 105.1 95.5 102.6 z "}],i["GR.IN.IC.FIREARMS MANUFACTURER"]=[{type:"path",stroke:!1,d:"m 104.1,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 v 13.4 h -34.4 v 39.5 z m 25.8,-26.6 h 10.8 v 5.8 c -1.6,0 -4.7,1 -5.8,0.7 -1.2,-0.4 -3.8,-1.5 -5,-1.6 v -4.8 z m -19.2,0 h 16.6 v 6 c 0,0.6 3,1.4 3.7,1.7 0.4,0.1 3.9,1.4 3.9,1.5 l 7.2,-0.9 0.8,2.7 1.1,3.7 c 0.3,0.4 1,2.4 1,3.1 v 0.2 c 0,1.1 -0.6,1.9 -0.6,3.5 l 13.5,-0 -0.9,-3 -0.6,-1.7 -3,-10 c -0.2,-0.4 -0.5,-0.7 -0.5,-1.3 0,-1.3 3.9,-4.1 4.7,-5.3 l -2.7,-8.4 h -43.9 v 8.4 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 94.2,99.9 h 10.8 v 5.8 c -1.6,0 -4.7,1 -5.8,0.7 -1.2,-0.4 -3.8,-1.5 -5,-1.6 v -4.8 z m 9.9,-25.1 0,13.4 -34.6,0 0,37 60.1,0 0,-37 -6.7,0 0,-13.4 -4.5,0 0,13.4 -9.9,0 0,-13.4 -4.5,0 z m -29.1,16.7 43.9,0 2.7,8.4 c -0.8,1.2 -4.7,4.1 -4.7,5.3 0,0.6 0.2,0.9 0.5,1.3 l 3.1,10 0.6,1.8 0.9,3 -13.5,0 c 0,-1.6 0.7,-2.4 0.7,-3.6 l 0,-0.2 c 0,-0.7 -0.7,-2.7 -1,-3.1 L 107.2,110.8 106.4,108.1 99.2,109 c -0,-0.1 -3.6,-1.4 -3.9,-1.5 -0.7,-0.3 -3.7,-1.1 -3.7,-1.7 l 0,-5.9 -16.6,0 0,-8.4 z"}],i["GR.IN.IC.FIREARMS RETAILER"]=[{type:"path",stroke:!1,d:"m 85.1,123 -1.1,0 -0,-3.2 c -0.8,-0 -1.5,-0.1 -2.3,-0.3 -0.8,-0.2 -1.5,-0.4 -2.3,-0.7 l 0,-1.9 c 0.7,0.5 1.5,0.8 2.2,1 0.8,0.2 1.5,0.3 2.3,0.4 l 0,-4.9 c -1.6,-0.3 -2.7,-0.7 -3.5,-1.3 -0.7,-0.6 -1.1,-1.5 -1.1,-2.5 -2e-6,-1.2 0.4,-2.1 1.2,-2.8 0.8,-0.7 1.9,-1.1 3.4,-1.2 l 0,-2.5 1.1,0 0,2.5 c 0.7,0 1.3,0.1 1.9,0.2 0.6,0.1 1.2,0.3 1.8,0.5 l 0,1.9 c -0.6,-0.3 -1.2,-0.5 -1.8,-0.7 -0.6,-0.2 -1.3,-0.3 -1.9,-0.3 l 0,4.6 c 1.6,0.3 2.8,0.7 3.6,1.3 0.8,0.6 1.1,1.5 1.1,2.6 -1.2e-5,1.2 -0.4,2.2 -1.2,2.9 -0.8,0.7 -2,1.1 -3.5,1.2 l 0,3.3 m -1.1,-11.5 0,-4.4 c -0.8,0.1 -1.5,0.3 -1.9,0.7 -0.4,0.4 -0.7,0.9 -0.7,1.5 -4e-6,0.6 0.2,1.1 0.6,1.4 0.4,0.3 1.1,0.6 2,0.7 m 1.1,2.1 0,4.7 c 0.9,-0.1 1.6,-0.4 2.1,-0.8 0.5,-0.4 0.7,-0.9 0.7,-1.6 -1e-5,-0.6 -0.2,-1.1 -0.7,-1.5 -0.4,-0.4 -1.1,-0.6 -2.1,-0.8 m 22.6,-21.9 -8,20.8 0.8,0.3 8,-20.8 -0.8,-0.3 z m -43,6.5 0,0.8 0.3,26 0,0.8 0.8,0 32.2,-0.2 0.4,0 0.2,-0.3 7.3,-8.7 0.2,-0.2 -0,-0.3 -0.2,-10.1 0,-0.4 -0.3,-0.2 -8.4,-6.6 -0.2,-0.2 -0.3,0 -31.3,-0.4 -0.8,0 z m 1.6,1.6 30.2,0.3 7.9,6.2 0.2,9.4 -6.9,8.2 -31,0.2 -0.3,-24.3 z M 97.3,85.4 h 14.4 v 7.7 c -2.1,0 -6.2,1.4 -7.8,0.9 -1.6,-0.5 -5,-2.1 -6.6,-2.2 v -6.4 z m -25.5,0 h 22.1 v 7.9 c 0,0.8 4,1.9 4.8,2.2 0.5,0.2 5.2,1.9 5.2,2 l 9.6,-1.2 1,3.6 1.4,4.9 c 0.3,0.5 1.3,3.2 1.3,4.1 v 0.2 c 0,1.5 -0.9,2.5 -0.9,4.7 h 18 l -1.1,-3.9 -0.8,-2.4 -4,-13.4 c -0.3,-0.5 -0.6,-0.9 -0.6,-1.7 0,-1.7 5.2,-5.5 6.2,-7.1 l -3.6,-11.1 H 71.8 v 11.1 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 85.1,113.6 0,4.7 c 0.9,-0.1 1.6,-0.4 2.1,-0.8 0.5,-0.4 0.7,-0.9 0.7,-1.6 -1e-5,-0.6 -0.2,-1.1 -0.7,-1.5 -0.4,-0.4 -1.1,-0.6 -2.1,-0.8 m -1.1,-2.1 0,-4.4 c -0.8,0.1 -1.5,0.3 -1.9,0.7 -0.4,0.4 -0.7,0.9 -0.7,1.5 -4e-6,0.6 0.2,1.1 0.6,1.4 0.4,0.3 1.1,0.6 2,0.7 M 66.4,99.8 l 0.3,24.3 31,-0.2 6.9,-8.2 -0.2,-9.4 -7.9,-6.2 -30.2,-0.3 z m 17.7,3.3 1.1,0 0,2.5 c 0.7,0 1.3,0.1 1.9,0.2 0.6,0.1 1.2,0.2 1.8,0.4 l 0,1.9 c -0.6,-0.3 -1.2,-0.5 -1.8,-0.7 -0.6,-0.2 -1.3,-0.3 -1.9,-0.3 l 0,4.6 c 1.6,0.3 2.8,0.7 3.6,1.3 0.8,0.6 1.2,1.5 1.2,2.7 -1.2e-5,1.2 -0.4,2.2 -1.2,2.9 -0.8,0.7 -2,1.1 -3.5,1.2 l 0,3.3 -1.1,0 0,-3.2 c -0.8,-0 -1.5,-0.1 -2.3,-0.3 -0.8,-0.2 -1.5,-0.4 -2.3,-0.8 l 0,-1.9 c 0.7,0.5 1.5,0.8 2.2,1.1 0.8,0.2 1.5,0.3 2.3,0.3 l 0,-4.9 c -1.6,-0.3 -2.7,-0.7 -3.5,-1.3 -0.7,-0.6 -1.1,-1.5 -1.1,-2.5 -2e-6,-1.2 0.4,-2.1 1.2,-2.8 0.8,-0.7 1.9,-1.1 3.4,-1.2 l 0,-2.5 z"}],i["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]=[{type:"path",stroke:!1,d:"m 104.7,71.8 h 5 v 15 h 11.1 v -15 h 5 v 15 h 7.5 v 41.4 h -67.4 V 86.8 h 38.8 v -15 z m -40,57.9 h 69.8 V 85.5 h -7.1 v -15.2 h -8 v 15.2 h -8 v -15.2 h -8 v 15.2 h -38.6 v 44.1 l 0,0 z m 15.5,-21.8 h 38.6 l -19.3,18.6 -19.3,-18.6 z m 21.8,-16.8 c 0.5,0.4 4.3,3.8 4.3,4.3 v 12 h -4.3 V 91.1 z m -5,-0 0,16.3 h -4.3 l 0.1,-12.2 4.1,-4.1 0,0 z m -12.1,12 c 0,-0.4 3.1,-3.2 3.6,-3.6 v 7.8 h -3.6 v -4.3 z m 25.7,-3.6 3.7,3.4 c -0.2,0.4 -0.2,-0.2 -0.2,0.5 v 4 h -3.6 v -7.9 z m 9.4,8.2 -20.5,-20 -20.4,20 20.4,19.9 20.5,-19.9 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 99.5,126.5 19.3,-18.6 -38.6,0 z m 0,1 -20.4,-19.9 20.4,-20 20.5,20 -20.5,19.8 z m 5.2,-40.8 h -38.8 v 41.4 h 67.4 V 86.8 h -7.5 v -15 h -5 v 15 h -11.1 v -15 h -5 v 15 z m 5.9,20.6 h 3.6 v -4 c 0,-0.7 -0,-0.1 0.2,-0.5 l -3.7,-3.4 v 7.9 z m -8.6,0 h 4.3 v -12 c 0,-0.4 -3.8,-3.9 -4.3,-4.3 v 16.3 z m -9.3,0 4.3,0 -0,-16.3 -4.1,4.1 z m -7.8,-4.3 v 4.3 h 3.6 v -7.9 c -0.5,0.3 -3.6,3.2 -3.6,3.6 z"}],i["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]=[{type:"path",stroke:!1,d:"m 122.4,68.8 c 0.4,0.1 0.9,0.5 1.3,1 0.4,0.5 0.8,1.2 1.3,2 l 2.1,4.1 -2.2,0 -1.9,-3.9 c -0.5,-1 -1,-1.7 -1.5,-2 -0.5,-0.3 -1.1,-0.5 -1.9,-0.5 l -2.2,0 0,6.4 -2.1,0 0,-15.2 4.6,0 c 1.7,1.5e-5 3,0.4 3.9,1.1 0.9,0.7 1.3,1.8 1.3,3.3 -10e-6,1 -0.2,1.7 -0.7,2.4 -0.4,0.6 -1.1,1.1 -1.9,1.3 m -5.1,-6.4 0,5.4 2.6,0 c 1,8e-6 1.7,-0.2 2.2,-0.7 0.5,-0.5 0.8,-1.1 0.8,-2 -10e-6,-0.9 -0.3,-1.6 -0.8,-2 -0.5,-0.5 -1.2,-0.7 -2.2,-0.7 l -2.6,0 m -12.3,-0.3 c -1.5,1.4e-5 -2.7,0.6 -3.6,1.7 -0.9,1.1 -1.3,2.6 -1.3,4.5 -1e-5,1.9 0.4,3.4 1.3,4.5 0.9,1.1 2.1,1.7 3.6,1.7 1.5,1e-6 2.7,-0.6 3.5,-1.7 0.9,-1.1 1.3,-2.6 1.3,-4.5 -10e-6,-1.9 -0.4,-3.4 -1.3,-4.5 -0.9,-1.1 -2,-1.7 -3.5,-1.7 m 0,-1.7 c 2.1,1.5e-5 3.8,0.7 5.1,2.1 1.3,1.4 1.9,3.3 1.9,5.7 -10e-6,2.4 -0.6,4.3 -1.9,5.7 -1.3,1.4 -3,2.1 -5.1,2.1 -2.1,-10e-7 -3.8,-0.7 -5.1,-2.1 -1.3,-1.4 -1.9,-3.3 -1.9,-5.7 -2e-6,-2.4 0.6,-4.3 1.9,-5.7 1.3,-1.4 3,-2.1 5.1,-2.1 m -21,0.3 12.8,0 0,1.7 -5.4,0 0,13.4 -2.1,0 0,-13.4 -5.4,0 0,-1.7 m -2,0.5 0,2 c -0.8,-0.4 -1.5,-0.6 -2.2,-0.8 -0.7,-0.2 -1.4,-0.3 -2,-0.3 -1.1,1.4e-5 -2,0.2 -2.6,0.7 -0.6,0.4 -0.9,1 -0.9,1.8 -3e-6,0.7 0.2,1.2 0.6,1.5 0.4,0.3 1.2,0.6 2.3,0.8 l 1.2,0.3 c 1.5,0.3 2.7,0.8 3.4,1.5 0.7,0.7 1.1,1.7 1.1,2.9 -1.2e-5,1.5 -0.5,2.6 -1.5,3.3 -1,0.8 -2.4,1.1 -4.3,1.1 -0.7,-10e-7 -1.5,-0.1 -2.3,-0.2 -0.8,-0.2 -1.6,-0.4 -2.5,-0.7 l 0,-2.1 c 0.8,0.5 1.6,0.8 2.4,1.1 0.8,0.2 1.6,0.4 2.4,0.4 1.2,1e-6 2.1,-0.2 2.7,-0.7 0.6,-0.5 1,-1.1 1,-2 -1e-5,-0.7 -0.2,-1.3 -0.7,-1.7 -0.5,-0.4 -1.2,-0.7 -2.2,-0.9 l -1.2,-0.2 c -1.5,-0.3 -2.6,-0.8 -3.3,-1.4 -0.7,-0.6 -1,-1.6 -1,-2.7 -2e-6,-1.3 0.5,-2.4 1.4,-3.2 0.9,-0.8 2.3,-1.2 3.9,-1.2 0.7,1.5e-5 1.4,0.1 2.2,0.2 0.7,0.1 1.5,0.3 2.3,0.6 M 70.6,110 h 57.9 l -29,27.9 -28.9,-27.9 z m 32.8,-25.2 c 0.8,0.5 6.4,5.8 6.4,6.4 v 17.9 h -6.4 V 84.8 z m -7.6,-0.1 0.1,24.4 h -6.5 l 0.2,-18.3 6.2,-6.1 0,0 z m -18.2,18 c 0,-0.7 4.7,-4.9 5.3,-5.3 v 11.8 h -5.3 v -6.5 z m 38.6,-5.3 5.6,5.2 c -0.3,0.7 -0.2,-0.3 -0.2,0.7 v 5.9 h -5.3 V 97.4 z m 14.2,12.3 -30.7,-30.1 -30.7,30 30.7,29.9 30.8,-29.8 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 99.5,137.9 29,-27.9 -57.9,0 z m 16.7,-28.7 h 5.3 v -5.9 c 0,-1 -0.1,-0.1 0.2,-0.7 l -5.6,-5.2 v 11.8 z m -12.8,0 h 6.4 V 91.2 c 0,-0.7 -5.6,-5.9 -6.4,-6.4 v 24.4 z m -14,-10e-6 6.5,0 -0.1,-24.4 -6.2,6.1 z m -11.8,-6.4 v 6.4 h 5.3 V 97.4 c -0.7,0.5 -5.3,4.7 -5.3,5.3 z"}],i["GR.IN.IC.INDUSTRIAL SITE"]=[{type:"path",stroke:!1,d:"m 104.1,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z m -35.7,51.6 h 62.3 V 86.9 h -6.4 V 73.5 h -7.2 v 13.4 h -7.2 V 73.5 h -7.2 v 13.4 h -34.4 v 39.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 104.1,74.8 h 4.5 v 13.4 h 9.9 V 74.8 h 4.5 v 13.4 h 6.7 v 37 H 69.6 V 88.2 h 34.6 l 4e-4,-13.4 0,0 z"}],i["GR.IN.IC.LANDFILL"]=[{type:"path",stroke:!1,d:"m 124.1,115.8 c 0,2.5 1.6,2.7 3,3.6 h -22.8 c 1.2,-0.7 2.8,-1.2 2.8,-3.3 v -1.2 c 0,-1.3 -1.9,-2.8 -3.6,-2.8 -1,0 -1.8,0.4 -2.3,0.9 -0.4,0.4 -1.1,1.6 -1.1,2.1 v 1.3 c 0,0.2 0.9,1.7 1,1.9 0.6,0.7 1.2,0.6 1.8,1 h -8.6 c 0.6,-0.4 1.3,-0.5 1.8,-1.1 0.4,-0.4 0.6,-1.4 1,-1.6 v -1.7 c 0,-0.4 -0.9,-1.8 -1.2,-2.1 -0.6,-0.6 -1.3,-0.9 -2.4,-0.9 h -0.1 c -1.7,0 -3.5,1.5 -3.5,3.1 v 1.3 c 0,1.5 2,2.2 2.8,2.8 h -8.7 c -0.1,-3.2 -2.5,-1.8 -3.1,-3 -1.1,-1.9 0.9,-2.2 -2.8,-3.1 -3.1,-0.8 -2,-0.3 -3.9,-2.2 -0.6,-0.7 -3,-1.8 -4.2,-1.8 h -0.1 c -1,0 -1.9,1.2 -2.7,1.5 -1.1,0.5 -2.3,0.4 -3.2,1.1 -1.1,0.8 -2.3,4.4 -2.3,6.2 v 0.6 h -0.4 v 2.2 h 72.1 4.9 v -1.5 h -9.5 c 0.8,-0.5 0.9,-0.2 1.8,-1 0.4,-0.4 0.9,-1.5 1.2,-1.6 v -1.6 c 0,-0.5 -0.9,-1.9 -1.3,-2.2 -0.7,-0.5 -1.4,-0.8 -2.5,-0.8 -1.9,0 -3.6,1.5 -3.6,3.5 v 0.2 h 0 z m -1,-17.6 h 3.5 c 0.5,0 4.2,4.8 4.6,5.4 h -8.1 v -5.4 z m -4.1,-17.8 -0.7,-1.3 -7,3.9 1.4,3.5 -32,14.5 c 0.8,0.4 2.1,4.3 2.6,5.3 0.2,0.4 2.3,5 2.3,5.1 0,0.5 -0.9,0.2 -0.8,0.6 l 0.5,3.1 h 3.4 c 0,-2.4 2,-4.8 4.3,-4.8 h 1 c 2.4,0 4.3,2.3 4.3,4.8 h 0.6 c 0,-2.4 0.6,-2.3 1.5,-3.6 l -2.1,-5.6 9.5,-4.3 4.2,9.9 -5.1,0 c 0.9,1.3 1.6,1.3 1.6,3.6 h 14.4 v -0.5 c 0,-2.1 2.5,-4.3 4.8,-4.3 h 0.5 c 2.6,0 4.6,2.2 4.6,4.8 h 2.6 v -3.1 h -1.2 v -7.4 c 0,-1.2 -5.8,-6.8 -6.1,-8.1 h -6.4 v 15 h -4.1 l -5.3,-12.1 5.5,-2.3 -4.3,-9.5 5.6,-7.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 123.1,103.6 h 8.1 c -0.5,-0.6 -4.2,-5.4 -4.6,-5.4 h -3.5 v 5.4 z"}],i["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]=[{type:"path",stroke:!1,d:"m 105.2,71.3 h 5.1 V 86.5 H 121.5 V 71.3 h 5.1 v 15.2 h 7.6 v 42.1 H 65.8 V 86.6 h 39.4 V 71.3 z M 64.5,130.1 h 71 V 85.3 h -7.3 V 69.9 h -8.2 V 85.3 h -8.2 V 69.9 H 103.7 V 85.3 H 64.5 v 44.8 z M 90.3,93.1 h 7.6 c 1.2,0 3.4,1.8 3.4,2.7 v 2.6 c 0,1.3 -2.4,2.9 -3.6,2.9 h -7.4 v -8.2 z m -4.9,26.5 h 4.9 v -13.1 l 1.7,0.1 7.6,10 -8.8,11 5.9,0.1 5.9,-7 c 1.2,0.3 4.2,5.9 5.6,6.9 h 6.2 c -0.9,-1.7 -8.4,-10.4 -8.4,-11 0,-0.3 7.4,-9.7 8.2,-10.4 l -6,-0.1 -5.6,6.2 -4.3,-5.7 c 5.2,-1.2 8.4,-3.3 8.4,-9.8 v -0.6 c 0,-2 -1.7,-4.7 -2.8,-5.8 -1,-1 -4.1,-2.4 -6.2,-2.4 H 85.4 v 31.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 85.4,88 h 12.4 c 2.1,0 5.1,1.4 6.1,2.4 1.1,1.1 2.8,3.8 2.8,5.8 v 0.6 c 0,6.5 -3.1,8.6 -8.4,9.8 l 4.3,5.7 5.6,-6.2 6.1,0.1 c -0.8,0.6 -8.2,10 -8.2,10.4 0,0.7 7.4,9.4 8.4,11.1 h -6.2 c -1.5,-1 -4.4,-6.6 -5.6,-6.9 l -5.9,6.9 -5.9,-0.1 8.8,-11 -7.6,-9.9 -1.8,-0.1 v 13.1 h -4.9 v -31.6 z m 19.8,-1.4 h -39.4 v 42.1 h 68.4 V 86.6 h -7.6 V 71.3 H 121.5 V 86.5 H 110.3 V 71.3 h -5.1 v 15.3 z m -14.9,14.7 h 7.4 c 1.2,0 3.6,-1.6 3.6,-2.9 v -2.5 c 0,-1 -2.2,-2.7 -3.4,-2.7 h -7.6 v 8.2 z"}],i["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]=[{type:"path",stroke:!1,d:"m 133.7,71.5 c -0.3,0 -0.7,0.1 -0.9,0.2 l -49.5,0 -0.7,0 0,0.1 c -0.7,0.3 -1.3,0.9 -1.8,1.7 -0.6,1 -1.2,2.5 -1.6,4.2 -0.9,3.5 -1.4,8.2 -1.4,13.4 0,4.8 0.5,9.2 1.2,12.6 -1,0.1 -2.1,0.5 -3,0.3 -1.2,-0.1 -2.5,-0.1 -3.8,-0.1 -1.3,0 -6.5,-0.9 -6.5,0.7 0,1.8 6,3.4 7.5,6.1 -0.8,1.5 -5.9,1.4 -8.1,1.8 -1.5,0.2 -3,0.2 -3.8,1.1 -1,1 0.2,2.3 1.1,2.7 1.7,0.9 6,1 8.2,1.5 1.3,0.3 2.6,0.7 3.1,1.9 0.4,1.1 0.6,2.6 2.2,2.6 l 0.1,0 c 2.1,0 5.1,-1.7 7.9,-1.7 l 1.1,0 c 6.2,0 6.8,7.4 12.3,7.7 3.5,0.2 5.3,-0.8 7.8,-1.9 1.6,-0.7 5.5,-2.8 7.3,-2.8 l 0.3,0 c 1.8,0 3.3,1.1 4.8,1.5 1.6,0.5 3.3,1 5.4,1 l 0.5,0 c 1.2,0 2.3,-0.2 3.2,-0.5 1.2,-0.4 1.1,-1 1.1,-2.4 -0.1,-1.9 -2.2,-3.3 -3.5,-4 -1.4,-0.9 -3.4,-1.8 -4.9,-2.6 -0.8,-0.4 -1.5,-0.9 -2.3,-1.4 -1.3,-1 -1,-0.6 -1.7,-2.1 1.2,-1.8 6.9,0.2 6.9,-1.9 0,-0.2 -0.3,-0.5 -0.7,-0.7 l 12.2,0 0.7,0 0,-0.4 c 0.7,-0.3 1.3,-0.9 1.8,-1.7 0.6,-1 1.2,-2.5 1.6,-4.2 0.9,-3.5 1.4,-8.2 1.4,-13.4 0,-5.2 -0.5,-9.9 -1.4,-13.4 -0.4,-1.7 -1,-3.2 -1.6,-4.2 -0.6,-1 -1.4,-1.8 -2.5,-1.8 z m 0.3,1.4 c 0.3,0 0.7,0.3 1.3,1.1 0.5,0.8 1,2.2 1.4,3.8 0.8,3.3 1.4,7.9 1.4,13.1 0,5.1 -0.5,9.8 -1.4,13.1 -0.4,1.7 -0.9,3 -1.4,3.8 -0.5,0.8 -1,1.1 -1.3,1.1 -0.2,0 -0.4,-0.1 -0.7,-0.4 l 0,0.7 -47.9,0 c 0.2,-0.2 0.4,-0.4 0.6,-0.8 0.6,-1 1.1,-2.3 1.5,-4 0.9,-3.4 1.4,-8.1 1.4,-13.2 0,-5.2 -0.5,-9.8 -1.4,-13.2 -0.4,-1.7 -0.9,-3.1 -1.5,-4 -0.2,-0.3 -0.4,-0.5 -0.6,-0.7 l 47.9,0 0,0.2 c 0.3,-0.3 0.5,-0.4 0.7,-0.4 z m -50.7,0.2 c 0.3,0 0.7,0.3 1.3,1.1 0.5,0.8 1,2.2 1.4,3.8 0.8,3.3 1.4,7.9 1.4,13.1 0,5.1 -0.5,9.8 -1.4,13.1 -0.4,1.7 -0.9,3 -1.4,3.8 -0.5,0.8 -1,1.1 -1.3,1.1 -0.3,0 -0.7,-0.3 -1.3,-1.1 -0.3,-0.5 -0.6,-1.1 -0.8,-1.8 0.4,1.7 1,3 1.7,3.5 l 8.3,-0.2 7.1,0.1 20.3,-0.1 c 0.5,0 1.5,0.5 2.3,1 l 0,0 c 0.5,0.3 0.8,0.6 1,0.7 -0.1,0.2 -0.4,0.3 -0.6,0.4 -0.2,0.1 -0.5,0.2 -0.8,0.2 -0.4,0.1 -0.9,0.1 -1.3,0.1 -0.2,-0 -0.5,-0 -0.7,-0 -0.4,-0 -0.9,-0 -1.2,-0 l -0.3,0 c -0.9,0 -1.7,0.5 -1.7,1.4 l 0,0.1 0,0.1 c 0,0.1 0,0.2 0,0.3 0.7,3 11.3,5.8 11.9,9.2 0,0.1 0,0.2 0,0.3 -0,0.1 -0,0.1 -0,0.1 -0.2,1.6 -2.9,2.2 -5.2,2.2 -0.7,0 -1.3,0 -1.8,-0.1 -2.6,-0.4 -5.4,-2.3 -7.3,-2.3 -5.3,0 -9.5,5.5 -15.2,4.8 -4.4,-0.6 -5.5,-7.9 -12.3,-7.9 l -1.3,0 c -3,0 -5.6,1.7 -8.4,1.7 -0.5,0 -0.7,-0.3 -0.9,-0.6 -0,-0 -0,-0.1 -0.1,-0.1 -0.2,-0.5 -0.3,-1.1 -0.6,-1.6 -0,-0 0,-0 0,-0 -0,-0.1 -0.1,-0.1 -0.1,-0.2 -0,-0 -0,-0.1 -0.1,-0.1 -0,-0.1 -0.1,-0.1 -0.1,-0.1 -0.1,-0.2 -0.3,-0.3 -0.4,-0.4 -1.2,-0.9 -2.3,-1.1 -4,-1.4 -1.9,-0.3 -5.8,-0.3 -7.3,-1.5 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0.1,-0.1 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0,-0.1 -0,-0 -0,-0 -0,-0 -0.2,-0.3 -0.4,-0.6 -0.4,-0.9 l 0,-0.3 c 0,-2.1 13.2,-0.9 13.2,-3.2 0,-0.3 -0.1,-0.6 -0.3,-0.8 -0,-0.1 -0.1,-0.1 -0.1,-0.2 -0,-0 -0,-0 -0.1,-0.1 -0.1,-0.1 -0.1,-0.1 -0.2,-0.2 -0,-0 -0,-0 -0.1,-0.1 -0.1,-0.1 -0.3,-0.3 -0.5,-0.4 -1.7,-1.3 -4.8,-2.7 -6.3,-3.9 -0.1,-0.1 -0.3,-0.2 -0.4,-0.3 -0,-0 -0,-0 -0.1,-0.1 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0.1,-0.1 -0,-0 -0.1,-0.1 -0.1,-0.1 -0.1,-0.1 -0.2,-0.2 -0.2,-0.4 0.3,-0.1 0.6,-0.3 1.1,-0.3 l 2.9,0 6.3,0.3 2.6,-0.3 c 9.4e-4,0 -9.4e-4,0 0,0 l 0.7,-0.1 0.8,0.1 c -0,-0 -0,-0 -0,-0 -0.8,-3.3 -1.4,-7.9 -1.4,-13.1 0,-5.1 0.5,-9.7 1.4,-13.1 0.4,-1.7 0.9,-3 1.4,-3.8 0.5,-0.8 1,-1.1 1.3,-1.1 z m 27.7,1.1 -17.4,17 17.4,16.9 17.4,-16.9 -17.4,-17 z m -2.2,2.9 0,13.8 -3.6,0 0.1,-10.4 3.5,-3.5 z m 4.3,0 c 0.4,0.3 3.6,3.3 3.6,3.7 l 0,10.2 -3.6,0 0,-13.8 z m 7.3,7.2 3.2,2.9 c -0.1,0.1 -0.1,0.1 -0.1,0.1 -0,-0 0,0 0,0.3 l 0,3.3 -3.1,0 0,-6.7 z m -18.8,0 0,6.7 -3,0 0,-3.7 c 0,-0.4 2.7,-2.8 3,-3 z m -7,7.1 32.8,0 -16.4,15.8 -16.4,-15.8 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 134,72.9 c -0.2,0 -0.4,0.1 -0.7,0.4 l 0,-0.2 -47.9,0 c 0.2,0.2 0.4,0.4 0.6,0.7 0.6,1 1.1,2.3 1.5,4 0.9,3.4 1.4,8.1 1.4,13.2 0,5.2 -0.5,9.8 -1.4,13.2 -0.4,1.7 -0.9,3.1 -1.5,4 -0.2,0.3 -0.4,0.5 -0.6,0.8 l 47.9,0 0,-0.7 c 0.3,0.3 0.5,0.4 0.7,0.4 0.3,0 0.7,-0.3 1.3,-1.1 0.5,-0.8 1,-2.2 1.4,-3.8 0.8,-3.3 1.4,-7.9 1.4,-13.1 0,-5.1 -0.5,-9.8 -1.4,-13.1 -0.4,-1.7 -0.9,-3 -1.4,-3.8 -0.5,-0.8 -1,-1.1 -1.3,-1.1 z m -50.7,0.2 c -0.3,0 -0.7,0.3 -1.3,1.1 -0.5,0.8 -1,2.2 -1.4,3.8 -0.8,3.3 -1.4,7.9 -1.4,13.1 0,5.1 0.5,9.8 1.4,13.1 0,0 0,0 0,0 l -0.8,-0.1 -3.3,0.4 -6.2,-0.3 -2.9,0 c -0.5,0 -0.8,0.1 -1.1,0.3 0.4,1.6 8.4,4.3 8.4,6.5 0,2.3 -13.2,1.1 -13.2,3.2 l 0,0.3 c 0,2.4 5.6,2.3 8,2.7 1.7,0.3 2.8,0.5 4,1.4 1.3,1 0.8,3.3 2.2,3.3 2.8,0 5.4,-1.7 8.4,-1.7 l 1.3,0 c 6.8,0 7.9,7.3 12.3,7.9 5.7,0.7 9.9,-4.8 15.2,-4.8 1.8,0 4.7,1.9 7.3,2.3 2.3,0.2 7,-0.2 7,-2.4 0,-3.6 -12,-6.5 -12,-9.8 l 0,-0.1 c 0,-0.9 0.9,-1.4 1.7,-1.4 l 0.3,0 c 1.4,0 3.9,0.3 4.7,-0.7 -0.3,-0.4 -2.5,-1.7 -3.2,-1.7 l -20.3,0.1 -7.1,-0.1 -8.3,0.2 c -0.7,-0.5 -1.3,-1.8 -1.7,-3.5 0.3,0.7 0.5,1.3 0.8,1.8 0.5,0.8 1,1.1 1.3,1.1 0.3,0 0.7,-0.3 1.3,-1.1 0.5,-0.8 1,-2.2 1.4,-3.8 0.8,-3.3 1.4,-7.9 1.4,-13.1 0,-5.1 -0.5,-9.7 -1.4,-13.1 -0.4,-1.7 -0.9,-3 -1.4,-3.8 -0.5,-0.8 -1,-1.1 -1.3,-1.1 z m 27.7,1.1 17.4,17 -17.4,16.9 -17.4,-16.9 17.4,-17 z m -2.2,2.9 -3.5,3.5 -0.1,10.4 3.6,0 -0,-13.8 z m 4.3,0 0,13.8 3.6,0 0,-10.2 c 0,-0.4 -3.2,-3.4 -3.6,-3.7 z m 7.3,7.2 0,6.7 3.1,0 0,-3.3 c 0,-0.3 -0,-0.3 -0,-0.3 0,0 0,0 0.1,-0.1 l -3.2,-2.9 z m -18.8,0 c -0.4,0.3 -3,2.7 -3,3 l 0,3.7 3,0 0,-6.7 z m -7,7.1 16.4,15.8 16.4,-15.8 -32.8,0 z"}],i["GR.IN.IC.TOXIC RELEASE INVENTORY"]=[{type:"path",stroke:!1,d:"m 81.8,61 0,15.2 2,0 0,-6.4 2.2,0 c 0.8,6e-6 1.5,0.2 1.9,0.5 0.5,0.3 1,1 1.5,2 l 1.9,3.9 2.2,0 -2.1,-4.2 c -0.4,-0.9 -0.8,-1.5 -1.3,-2 -0.4,-0.5 -0.8,-0.8 -1.3,-0.9 0.8,-0.2 1.5,-0.7 1.9,-1.3 0.4,-0.6 0.7,-1.4 0.7,-2.4 -2e-5,-1.5 -0.4,-2.6 -1.3,-3.3 -0.9,-0.7 -2.1,-1.1 -3.9,-1.1 l -4.6,0 z m 14.5,0 0,15.2 9.8,0 0,-1.7 -7.7,0 0,-5.5 7.2,0 0,-1.7 -7.2,0 0,-4.5 7.5,0 0,-1.7 -9.6,0 z m 13.2,0 0,15.2 9.4,0 0,-1.7 -7.4,0 0,-13.4 -2,0 z m -25.6,1.7 2.6,0 c 1,1.4e-5 1.7,0.2 2.2,0.7 0.5,0.4 0.8,1.1 0.8,2 -10e-6,0.9 -0.3,1.6 -0.8,2 -0.5,0.5 -1.2,0.7 -2.2,0.7 l -2.6,0 0,-5.4 z m 16,14.7 c -4.3,1.1e-5 -8.3,0.4 -11.2,1.2 -1.4,0.4 -2.6,0.8 -3.5,1.3 -0.7,0.4 -1.2,0.9 -1.4,1.5 l -0.1,0 0,0.6 c -3.1e-5,0 0,0 0,0 l 0,31.1 -0.2,-0.7 c -0.1,0 -1.1,0.1 -2.4,0 -1.2,-0.1 -2.7,-0.2 -4.2,-0.3 -1.5,-0.1 -2.9,-0.2 -4,-0.1 -0.6,0 -1.1,0 -1.5,0.1 -0.2,0 -0.4,0.1 -0.6,0.2 -0.2,0.1 -0.4,0.2 -0.6,0.5 -0.3,0.4 -0.4,0.9 -0.3,1.4 0.1,0.5 0.3,0.8 0.5,1.2 0.5,0.7 1.2,1.2 1.9,1.7 0.7,0.5 1.4,1 1.9,1.5 0.5,0.5 0.7,0.9 0.6,1.2 -0,0.1 -0,0.2 -0.2,0.3 -0.2,0.2 -0.6,0.3 -1,0.5 -0.9,0.3 -2.2,0.5 -3.5,0.7 -1.3,0.2 -2.7,0.3 -3.7,0.5 -0.5,0.1 -1,0.2 -1.4,0.4 -0.2,0.1 -0.4,0.2 -0.6,0.3 -0.2,0.2 -0.4,0.4 -0.4,0.7 -0.1,0.9 0.3,1.7 1,2.3 0.7,0.6 1.5,1.1 2.6,1.6 2.1,0.9 4.9,1.7 7.9,2.4 2.9,0.7 5.9,1.2 8.3,1.7 2.4,0.4 4.4,0.8 4.8,0.9 2,0.6 3.3,1.8 4.9,3.2 1.5,1.3 3.2,2.8 5.8,3.5 3,0.8 6.2,-0.6 9.4,-2 3.2,-1.4 6.4,-2.8 9.1,-2.5 0.1,0 1,0.2 1.9,0.5 1,0.3 2.2,0.6 3.4,0.8 1.2,0.3 2.4,0.5 3.5,0.6 1.1,0.1 2,0.2 2.7,-0.5 0.8,-0.7 1.3,-1.4 1.4,-2.1 0.2,-0.8 -0,-1.5 -0.4,-2.2 -0.8,-1.3 -2.2,-2.3 -3.9,-3.2 -1.6,-0.9 -3.5,-1.8 -5,-2.6 -1.5,-0.8 -2.7,-1.6 -3,-1.9 -0.2,-0.3 -0.2,-0.2 -0.1,-0.4 0.1,-0.1 0.3,-0.4 0.7,-0.7 0.8,-0.5 2.2,-1 3.2,-1.5 0.5,-0.3 1,-0.5 1.3,-1 0.2,-0.3 0.3,-0.7 0.2,-1 -0.1,-0.4 -0.3,-0.6 -0.6,-0.8 -0.5,-0.4 -1.2,-0.7 -2.3,-1.1 -1.1,-0.3 -2.6,-0.7 -4.6,-1.1 l -0.3,1.3 0,-35.4 0,-0.6 -0.1,0 c -0.2,-0.6 -0.7,-1.1 -1.4,-1.5 -0.9,-0.5 -2.1,-1 -3.5,-1.3 -2.9,-0.7 -6.8,-1.2 -11.2,-1.2 z m 0,1.2 c 4.3,-1.1e-5 8.1,0.4 10.9,1.1 1.4,0.4 2.5,0.8 3.2,1.2 0.3,0.2 0.4,0.3 0.6,0.5 0.1,0.1 0.2,0.2 0.3,0.3 0,0 0,0 0,0.1 0,0 0,0.1 0,0.1 0,0 0,0.1 0,0.1 0,0 -0,0.1 -0,0.1 -0,0 -0,0 -0,0 -0,0 -0,0 -0,0.1 -0,0 -0,0 -0,0.1 -0,0 -0,0 -0,0.1 -0,0 -0,0.1 -0.1,0.1 -0,0.1 -0.1,0.1 -0.1,0.2 -0,0 -0,0 -0,0 -0.1,0.1 -0.3,0.3 -0.6,0.5 -0.7,0.4 -1.8,0.8 -3.2,1.2 -2.8,0.7 -6.6,1.2 -10.9,1.2 -4.3,1.1e-5 -8.1,-0.4 -10.9,-1.1 -1.4,-0.4 -2.5,-0.8 -3.2,-1.2 -0.3,-0.2 -0.5,-0.3 -0.6,-0.5 -0,-0 -0.1,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0,-0 -0,-0 -0,-0.1 -0.1,-0.1 -0,-0 -0,-0 -0,-0 -0,-0 -0,-0.1 -0.1,-0.1 -0,-0.1 -0.1,-0.1 -0.1,-0.2 0,-0 0,-0.1 0,-0.1 0.1,-0.2 0.3,-0.6 0.9,-0.9 0.7,-0.4 1.8,-0.8 3.2,-1.2 2.8,-0.7 6.6,-1.1 10.9,-1.1 z m 15,5.3 0,34.1 0,0 0,5.6 c 0.1,0.2 0.2,0.3 0.2,0.4 0,0.2 -0.2,0.6 -0.9,1.1 -0.7,0.4 -1.8,0.8 -3.2,1.2 -2.8,0.7 -6.6,1.1 -10.9,1.1 -4.3,1e-5 -8.1,-0.4 -10.9,-1.1 -1.4,-0.4 -2.5,-0.8 -3.2,-1.2 -0.6,-0.4 -0.9,-0.7 -0.9,-1 l -0,0 0,-0.1 0,-1.9 c -0.1,0.1 -0.1,0.1 -0.2,0.1 l 0,-38.4 c 0.1,0.1 0.2,0.1 0.3,0.2 0.9,0.5 2.1,1 3.5,1.3 2.9,0.7 6.8,1.2 11.2,1.2 4.3,-1.2e-5 8.3,-0.5 11.2,-1.2 1.4,-0.4 2.6,-0.8 3.5,-1.3 0.1,-0.1 0.2,-0.1 0.3,-0.2 z m -15.2,6.1 -14.6,14.2 14.2,13.8 0.8,0 14.2,-13.8 -14.6,-14.3 z m -1.8,2.4 0,11.6 -3.1,0 0.1,-8.7 3,-2.9 z m 3.6,0 c 0.4,0.3 3,2.7 3,3 l 0,8.5 -3,0 0,-11.6 z m -9.7,6 0,5.6 -2.5,0 0,-3.1 c 0,-0.3 2.2,-2.3 2.5,-2.5 z m 15.8,0 2.6,2.5 c -0.1,0.3 -0.1,-0.1 -0.1,0.3 l 0,2.8 -2.5,0 0,-5.6 z m -21.7,6 27.5,0 -13.8,13.3 -13.7,-13.3 z m -12.8,9.3 c 1.1,-0 2.5,0 3.9,0.1 1.4,0.1 2.9,0.2 4.2,0.3 1.1,0.1 1.9,0.1 2.6,-0 l 0,10 0,0.6 0.3,0 c 0.2,0.6 0.7,1.1 1.4,1.5 0.9,0.5 2.1,1 3.5,1.3 2.9,0.7 6.8,1.2 11.2,1.2 4.3,-1e-5 8.3,-0.4 11.2,-1.2 1.4,-0.4 2.6,-0.8 3.5,-1.3 0.9,-0.5 1.5,-1.2 1.5,-2.1 0,-0.3 -0.1,-0.5 -0.2,-0.8 l 0,-5.6 c 1.9,0.4 3.4,0.8 4.4,1.1 0.9,0.3 1.3,0.5 1.6,0.7 -0.1,0.1 -0.1,0.1 -0.4,0.3 -0.8,0.4 -2.2,0.9 -3.3,1.6 -0.5,0.3 -1,0.7 -1.3,1.3 -0.3,0.6 -0.2,1.4 0.2,2 0.7,1 2,1.6 3.5,2.4 1.6,0.8 3.4,1.6 4.9,2.5 1.5,0.9 2.8,1.9 3.3,2.7 0.2,0.4 0.3,0.7 0.2,1 -0.1,0.3 -0.3,0.8 -0.9,1.3 0,-0 -0.6,0.2 -1.5,0.1 -0.9,-0.1 -2.1,-0.3 -3.3,-0.6 -1.2,-0.3 -2.4,-0.6 -3.3,-0.8 -1,-0.3 -1.7,-0.5 -2.2,-0.5 -3.3,-0.3 -6.7,1.3 -9.9,2.7 -3.2,1.4 -6.1,2.5 -8.4,1.9 -2.3,-0.6 -3.7,-1.8 -5.2,-3.2 -1.5,-1.3 -3.1,-2.8 -5.5,-3.5 -0.8,-0.2 -2.5,-0.5 -5,-0.9 -2.4,-0.4 -5.4,-1 -8.3,-1.6 -2.9,-0.7 -5.6,-1.5 -7.6,-2.3 -1,-0.4 -1.7,-0.9 -2.2,-1.3 -0.3,-0.3 -0.4,-0.5 -0.5,-0.7 0.2,-0.1 0.6,-0.2 1.1,-0.3 1,-0.2 2.3,-0.3 3.6,-0.5 1.4,-0.2 2.7,-0.4 3.9,-0.8 0.6,-0.2 1.1,-0.4 1.5,-0.8 0.4,-0.3 0.8,-0.8 0.8,-1.4 0.1,-1 -0.4,-1.8 -1.1,-2.5 -0.6,-0.7 -1.4,-1.2 -2.1,-1.7 -0.7,-0.5 -1.3,-1 -1.6,-1.4 -0.1,-0.2 -0.2,-0.3 -0.2,-0.4 -0,-0.1 0,-0.1 0.1,-0.2 0,-0 0.1,-0 0.1,-0 0.3,-0 0.7,-0.1 1.2,-0.1 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 85.8,104.4 13.7,13.3 13.8,-13.3 z m 21.7,-0.4 h 2.5 v -2.8 c 0,-0.5 -0,-0.1 0.1,-0.4 l -2.7,-2.4 v 5.6 z m -6.1,0 h 3.1 v -8.5 c 0,-0.3 -2.7,-2.8 -3.1,-3.1 v 11.6 z m -6.6,-8.7 -0.1,8.7 3.1,0 -0,-11.6 z m -5.7,5.6 v 3.1 h 2.5 v -5.6 c -0.3,0.2 -2.5,2.2 -2.5,2.5 z M 99.8,85.4 c -4.3,1.2e-5 -8.1,-0.4 -10.9,-1.1 -1.4,-0.4 -2.5,-0.8 -3.2,-1.2 -0.7,-0.4 -0.9,-0.8 -0.9,-1 0,-0.2 0.2,-0.6 0.9,-1 0.7,-0.4 1.8,-0.8 3.2,-1.2 2.8,-0.7 6.6,-1.2 10.9,-1.2 4.3,-1.1e-5 8.1,0.4 10.9,1.1 1.4,0.4 2.5,0.8 3.2,1.2 0.7,0.4 0.9,0.8 0.9,1 0,0.2 -0.2,0.6 -0.9,1 -0.7,0.4 -1.8,0.8 -3.2,1.2 -2.8,0.7 -6.6,1.2 -10.9,1.2 z m -15,-1.5 0,38.4 c 0.1,-0.1 0.1,-0.1 0.2,-0.1 l 0,1.8 0,0.1 0,0 c 0,0.2 0.3,0.6 0.9,0.9 0.7,0.4 1.8,0.9 3.2,1.2 2.8,0.7 6.6,1.2 10.9,1.2 4.3,-1e-5 8.2,-0.5 10.9,-1.2 1.4,-0.4 2.4,-0.8 3.2,-1.2 0.7,-0.4 0.9,-0.8 0.9,-1 0,-0.1 -0,-0.2 -0.2,-0.4 l 0,-5.6 -0,0 0,-34.1 c -0.1,0.1 -0.2,0.1 -0.3,0.2 -0.9,0.5 -2.1,1 -3.5,1.3 -2.9,0.7 -6.8,1.2 -11.2,1.2 -4.3,1.1e-5 -8.3,-0.4 -11.2,-1.2 -1.4,-0.4 -2.6,-0.8 -3.5,-1.3 -0.1,-0.1 -0.2,-0.1 -0.3,-0.2 z m 14.8,6.1 14.6,14.3 -14.2,13.8 -0.8,0 L 85,104.2 99.6,90 z m -26.7,23.7 c 1.1,-0 2.5,0 3.9,0.1 1.4,0.1 2.9,0.2 4.2,0.3 1.1,0.1 1.9,0.1 2.6,-0 l 0,10 0,0.6 0.3,0 c 0.2,0.6 0.7,1.1 1.4,1.5 0.9,0.5 2.1,1 3.5,1.3 2.9,0.7 6.8,1.2 11.2,1.2 4.3,-1e-5 8.3,-0.4 11.2,-1.2 1.4,-0.4 2.6,-0.8 3.5,-1.3 0.9,-0.5 1.5,-1.2 1.5,-2.1 0,-0.3 -0.1,-0.5 -0.2,-0.8 l 0,-5.6 c 1.9,0.4 3.4,0.8 4.4,1.1 0.9,0.3 1.3,0.5 1.6,0.7 -0.1,0.1 -0.1,0.1 -0.4,0.3 -0.8,0.4 -2.2,0.9 -3.3,1.6 -0.5,0.3 -1,0.7 -1.3,1.3 -0.3,0.6 -0.2,1.4 0.2,2 0.7,1 2,1.6 3.5,2.4 1.6,0.8 3.4,1.6 4.9,2.5 1.5,0.9 2.8,1.9 3.3,2.7 0.2,0.4 0.3,0.7 0.2,1 -0.1,0.3 -0.3,0.8 -0.9,1.3 0,-0 -0.6,0.2 -1.5,0.1 -0.9,-0.1 -2.1,-0.3 -3.3,-0.6 -1.2,-0.3 -2.4,-0.6 -3.3,-0.8 -1,-0.3 -1.7,-0.5 -2.2,-0.5 -3.3,-0.3 -6.7,1.3 -9.9,2.7 -3.2,1.4 -6.1,2.5 -8.4,1.9 -2.3,-0.6 -3.7,-1.8 -5.2,-3.2 -1.5,-1.3 -3.1,-2.8 -5.5,-3.5 -0.8,-0.2 -2.5,-0.5 -5,-0.9 -2.4,-0.4 -5.4,-1 -8.3,-1.6 -2.9,-0.7 -5.6,-1.5 -7.6,-2.3 -1,-0.4 -1.7,-0.9 -2.2,-1.3 -0.3,-0.3 -0.4,-0.5 -0.5,-0.7 0.2,-0.1 0.6,-0.2 1.1,-0.3 1,-0.2 2.3,-0.3 3.6,-0.5 1.4,-0.2 2.7,-0.4 3.9,-0.8 0.6,-0.2 1.1,-0.4 1.5,-0.8 0.4,-0.3 0.8,-0.8 0.8,-1.4 0.1,-1 -0.4,-1.8 -1.1,-2.5 -0.6,-0.7 -1.4,-1.2 -2.1,-1.7 -0.7,-0.5 -1.3,-1 -1.6,-1.4 -0.1,-0.2 -0.2,-0.3 -0.2,-0.4 -0,-0.1 0,-0.1 0.1,-0.2 0,-0 0.1,-0 0.1,-0 0.3,-0 0.7,-0.1 1.2,-0.1 z"}],i["GR.IN.IC.COLLEGE/UNIVERSITY"]=[{type:"path",stroke:!1,d:"m 97.4,106.9 h -14.8 v 31.7 h 32 v -31.7 H 99.8 V 95.1 c 0,-0.6 6.5,-3 7.5,-3.4 1.3,-0.5 6.9,-3 7.9,-3 -0.3,-0.4 -14.7,-6.3 -15.7,-6.3 h -2.3 v 24.5 z m 23.3,-30.1 -9.6,0 0,-15.1 2,0 0,13.3 7.6,0 0,1.8 M 106,63.5 c 0.6,0.7 1.1,1.5 1.4,2.5 0.3,1 0.5,2.1 0.5,3.3 -1e-5,1.2 -0.2,2.4 -0.5,3.4 -0.3,1 -0.8,1.8 -1.4,2.5 -0.6,0.7 -1.4,1.2 -2.2,1.5 -0.8,0.3 -1.8,0.5 -2.9,0.5 -1.1,0 -2,-0.2 -2.9,-0.5 -0.9,-0.4 -1.6,-0.9 -2.2,-1.5 -0.6,-0.7 -1.1,-1.5 -1.4,-2.5 -0.3,-1 -0.5,-2.1 -0.5,-3.3 -10e-7,-1.2 0.2,-2.3 0.5,-3.3 0.3,-1 0.8,-1.8 1.4,-2.5 0.6,-0.7 1.3,-1.2 2.2,-1.5 0.9,-0.4 1.9,-0.5 2.9,-0.5 1.1,1.5e-5 2.1,0.2 2.9,0.5 0.9,0.4 1.6,0.9 2.2,1.5 m -0.2,5.8 c -2e-5,-2 -0.4,-3.5 -1.3,-4.5 -0.9,-1.1 -2.1,-1.6 -3.6,-1.6 -1.5,1.4e-5 -2.7,0.5 -3.6,1.6 -0.9,1.1 -1.3,2.6 -1.3,4.5 -3e-6,2 0.4,3.5 1.3,4.6 0.9,1 2.1,1.6 3.6,1.6 1.5,2e-6 2.7,-0.5 3.6,-1.6 0.9,-1.1 1.3,-2.6 1.3,-4.6 m -14,6.5 c -0.4,0.2 -0.7,0.3 -1,0.5 -0.3,0.1 -0.7,0.3 -1.2,0.4 -0.4,0.1 -0.9,0.2 -1.4,0.3 -0.5,0.1 -1,0.1 -1.6,0.1 -1.1,0 -2.1,-0.2 -3,-0.5 -0.9,-0.3 -1.7,-0.8 -2.3,-1.5 -0.7,-0.6 -1.2,-1.5 -1.5,-2.4 -0.4,-1 -0.5,-2.1 -0.5,-3.5 -10e-7,-1.2 0.2,-2.4 0.5,-3.3 0.4,-1 0.9,-1.8 1.5,-2.5 0.6,-0.7 1.4,-1.2 2.3,-1.5 0.9,-0.3 1.9,-0.5 3,-0.5 0.8,1.5e-5 1.6,0.1 2.4,0.3 0.8,0.2 1.7,0.5 2.7,1 l 0,2.4 -0.2,0 c -0.8,-0.7 -1.7,-1.2 -2.5,-1.5 -0.8,-0.3 -1.7,-0.5 -2.6,-0.5 -0.8,1.4e-5 -1.5,0.1 -2.1,0.4 -0.6,0.2 -1.2,0.6 -1.6,1.1 -0.5,0.5 -0.8,1.2 -1.1,1.9 -0.3,0.8 -0.4,1.7 -0.4,2.7 -3e-6,1.1 0.1,2 0.4,2.7 0.3,0.8 0.7,1.4 1.1,1.9 0.5,0.5 1,0.9 1.7,1.1 0.6,0.2 1.3,0.4 2,0.4 1,2e-6 1.9,-0.2 2.7,-0.5 0.8,-0.3 1.6,-0.8 2.4,-1.5 l 0.1,0 0,2.4"}],i["GR.IN.IC.SCHOOL"]=[{type:"path",stroke:!1,d:"M 98.4,96.4 H 83.7 v 31.7 h 32 V 96.4 H 100.9 V 84.6 c 0,-0.6 6.5,-3 7.5,-3.4 1.3,-0.5 6.9,-3 7.9,-3 -0.3,-0.4 -14.7,-6.3 -15.7,-6.3 H 98.4 V 96.4 z"}],i["GR.IN.IC.REST STOP"]=[{type:"path",stroke:!1,d:"m 108.4,89.6 v -0.4 l 0.6,-0.6 -0.4,1.4 -3.8,13.4 -0.2,0.8 -0.4,0.6 0,0.9 -2,6.7 7.2,0 v 19.7 h 5.2 v -19.7 h 2.7 v 19.7 h 5.2 v -19.7 h 7.1 l -1.3,-5.3 -0.2,-0.8 -4.8,-16.4 -0.5,-1.4 0.6,0.7 0.1,0.4 c 2.1,2.4 5.4,14.2 8.6,14.2 h 0.4 c 1.2,0 2.1,-1.1 2.1,-2.3 v -0.6 c 0,-0.5 -4.8,-10 -5.3,-11.6 -0.7,-2 -1.7,-4.2 -2.6,-6 -1,-2.1 -1.2,-3.8 -4.6,-3.8 h -12.4 c -3.4,0 -3.6,1.8 -4.7,3.9 -0.9,1.7 -1.9,4 -2.5,5.9 -0.6,1.6 -5.2,11.1 -5.2,11.6 v 0.6 c 0,1.3 0.6,2.3 1.9,2.3 h 0.8 c 2.4,0 6.4,-12.2 8.2,-14.2 z m 0.2,0.4 0.4,-1.5 -0.6,0.6 0,0.4 z m 15.1,-0.4 -0.1,-0.4 -0.6,-0.6 0.5,1.4 z M 69.6,88.8 h 2.3 v 43.6 h 6.1 v -25.6 h 2.7 v 25.6 h 5.9 v -43.6 h 2.3 v 16.4 h 4.6 V 86.3 l -0.3,-2.3 h -0.4 c 0,-2.3 -1.7,-4.4 -4,-4.4 H 69.6 c -3,0 -4.4,3.4 -4.4,6.5 v 19.1 h 4.4 V 88.8 z M 110.7,72.8 c 0,2.7 2.4,5.4 5,5.4 h 0.2 c 1.6,0 2.8,-0.6 3.6,-1.4 0.5,-0.4 1.8,-2.4 1.8,-3 v -1.6 c 0,-2.4 -2.8,-4.6 -5.4,-4.6 -3,-0 -5.2,2.4 -5.2,5.2 z m -36.7,1.1 c 0,2 2.8,4.4 5,4.4 h 0.2 c 4.2,0 4.3,-3.4 5.2,-3.8 V 71.6 c 0,-1.8 -2.8,-4 -5.2,-4 -2.3,0 -5.2,2.2 -5.2,4 v 2.3 z"}],i["GR.IN.IC.CONTROL VALVE"]=[{type:"path",stroke:!1,d:"m 114,114.5 h 15.7 v 4 h 9.1 v -23.6 h -9.1 V 98.8 H 114.4 c -0.4,0 -2.6,-2.6 -2.6,-3.4 v -5.6 h -9.9 v -8.2 h 12.3 v -3.6 h -28.2 v 3.6 h 12.1 v 8.3 H 89.2 v 6.6 l -0.2,-0.2 -1.8,2.4 -17.2,0.1 V 95 H 61.2 v 23.6 h 8.9 v -4 H 87 c 0.4,0 2,2.4 2.4,2.8 0.5,0.6 2.2,1.9 2.9,2.4 1.9,1.2 4.7,2.4 7.8,2.4 h 0.6 c 3.5,0 5.8,-1 8.1,-2.4 1.4,-0.8 4.8,-3.8 5.2,-5.3 z"}],i["GR.IN.IC.DAM"]=[{type:"path",stroke:!1,d:"m 68.3,89.1 c 2.3,0 3.2,-1.7 4.6,-2.6 1.1,0.8 2.2,2.6 4.4,2.6 h 0.2 c 2.6,0 3.3,-1.7 4.7,-2.6 1.4,0.9 2.2,2.6 4.7,2.6 2.4,0 3.3,-1.8 4.6,-2.6 0.6,0.4 1.1,1.1 1.9,1.6 0.4,0.2 2.2,0.9 2.2,1.3 v 6.8 C 94.1,95.8 91.8,93.8 91.5,92.6 h -0.3 c -0.3,1.1 -3,3.6 -4.5,3.6 -1.5,0 -4.1,-2.6 -4.4,-3.8 -1,0.6 -2.6,3.8 -4.6,3.8 h -0.4 c -1.2,0 -4,-2.7 -4.2,-3.7 -0.8,0.2 -2.6,3.7 -4.7,3.7 h -0.3 c -1.1,0 -1.7,-0.7 -2.4,-1.2 l -1,1.2 c 1,0.7 1.6,1.8 3.2,1.8 h 0.4 c 2.3,0 3.1,-1.8 4.6,-2.8 0.7,1.1 2.8,2.8 4.7,2.8 2.3,0 3.3,-2 4.6,-2.8 1.2,0.8 2.6,2.8 4.7,2.8 2.1,0 3.4,-2.1 4.7,-2.8 0.7,1 2.6,2.4 4,2.7 v 7 c -1.4,-0.1 -3.4,-2.4 -4,-3.5 -1.1,0.7 -2.5,3.6 -4.7,3.6 h -0.1 c -2.3,0 -4.1,-3.5 -4.7,-3.7 -0.3,1 -3,3.7 -4.1,3.7 h -0.4 c -2.2,0 -3.6,-2.9 -4.7,-3.7 -0.6,1 -2.8,3.7 -4.1,3.7 H 67.7 c -0.7,0 -1.7,-1 -2.2,-1.3 l -0.9,1.5 c 1.1,0.7 1.7,1.6 3.6,1.6 2.7,0 3.1,-1.8 4.7,-2.6 1.4,0.9 2,2.6 4.7,2.6 2.2,0 3.4,-1.8 4.6,-2.6 1.4,1 2.5,2.6 4.8,2.6 1.8,0 3.4,-2 4.4,-2.6 0.9,0.5 1,1 2,1.6 0.4,0.3 2.2,0.7 2.2,1.2 v 6.8 c -1.4,-0.3 -3.6,-2.2 -4,-3.5 -1.1,0.7 -2.5,3.8 -4.8,3.8 -1.4,0 -4.1,-2.6 -4.4,-3.8 -1.2,0.8 -2.6,3.8 -4.8,3.8 -2,0 -3.7,-3.2 -4.7,-3.8 -0.3,1 -3,3.8 -4.3,3.8 h -0.6 c -0.8,0 -1.8,-1 -2.4,-1.3 l -0.9,1.3 c 1.1,0.7 1.8,1.8 3.6,1.8 2.2,0 3.3,-1.8 4.7,-2.8 1.2,0.8 2.6,2.9 4.7,2.8 2.3,-0.1 3.3,-1.9 4.6,-2.8 1.2,0.8 2.7,2.8 4.7,2.8 1.9,0 3.4,-2 4.6,-2.8 1.6,1 1.8,2 4.1,2.5 v 5 h 17 l -1.4,-5.2 c 0.8,0.2 1,0.6 2.2,0.6 2,0 3.3,-1.9 4.6,-2.8 1.3,0.9 2.4,2.8 4.7,2.8 1.6,0 3.8,-1.8 4.4,-2.8 1.3,0.3 2.5,2.8 5.1,2.8 1.2,0 2.6,-1.4 3.4,-1.8 l -1,-1.3 c -0.7,0.4 -1.5,1.3 -2.6,1.3 -2.1,0 -3.7,-3.1 -4.7,-3.8 -0.7,1.4 -2.7,3.8 -4.7,3.8 -1.3,0 -4.3,-2.6 -4.4,-3.8 -1,0.7 -2.6,3.8 -4.7,3.8 h -0.2 c -1.1,0 -2.2,-0.9 -2.7,-1.5 -0.4,-0.4 -0.8,-2.5 -1.1,-3.2 -0.4,-1 -1.8,-5.6 -1.8,-6.6 l -0.3,-0.4 0,-0.6 -0.3,-0.4 v -0.6 l -0.3,-0.4 -5.3,-18.6 0.2,-0 -0.3,-0.4 0,-0.6 c -0.2,-0.3 -0.3,-0.3 -0.3,-0.6 v -0.4 h -5.6 v 7.8 c -1.4,-0.7 -1.2,-0.5 -2.4,-1.6 -0.1,-0.1 -1,-0.9 -1,-1 -0.4,-0.5 -0.1,-0.9 -0.8,-1.1 -0.1,1.2 -3.1,3.8 -4.3,3.8 h -0.2 c -2.5,0 -4.2,-3.6 -4.8,-3.8 -0.3,1.1 -3,3.8 -4.2,3.8 h -0.4 c -1.2,0 -4.2,-2.7 -4.2,-3.8 -0.5,0.1 -2.8,3.8 -4.4,3.8 H 67.7 c -0.7,0 -1.7,-1 -2.2,-1.3 l -0.9,1.3 c 1,0.7 1.6,1.6 3.4,1.6 h 0.3 v 0 z"}],i["GR.IN.IC.DISCHARGE OUTFALL"]=[{type:"path",stroke:!1,d:"m 63.2,111.4 v 13.4 h 73.6 V 111.7 l -3.1,0.5 -1.1,-0.1 c -2.2,0 -3.6,-0.7 -4.9,-1.6 -0.6,-0.4 -1.1,-1.1 -1.5,-1.8 -0.4,-0.6 -0.2,-2.1 -1,-2.1 h -0.4 c -0.8,0 -0.7,1.6 -1.2,2.2 -0.4,0.6 -0.9,1.2 -1.6,1.7 -1.3,1 -3,1.6 -5.1,1.6 h -0.9 c -3.2,0 -6.8,-2.1 -6.8,-5.1 -0.3,-0.2 -0.4,-0.4 -0.8,-0.4 h -0.3 c -0.7,0 -0.8,1.5 -1.1,2.1 -0.4,0.6 -1,1.4 -1.5,1.8 -1.2,1 -2.7,1.6 -4.8,1.6 h -0.9 c -3.5,0 -7.3,-2.1 -7.3,-5.4 -0.4,-0.1 -0.4,-0.2 -0.8,-0.2 h -0.3 c -0.6,0 -0.6,1.5 -1.1,2.2 -0.5,0.8 -0.7,1.1 -1.5,1.7 -1.3,1 -2.7,1.6 -4.8,1.6 H 82.9 c -3.5,0 -6.7,-2.2 -7,-5.4 -0.3,-0.1 -0.4,-0.2 -0.8,-0.2 h -0.1 c -0.7,0 -0.8,1.5 -1.2,2.2 -0.4,0.6 -0.9,1.2 -1.6,1.7 -1.4,1 -2.7,1.6 -5,1.6 h -1 c -1.2,0 -2.2,-0.4 -3,-0.8 l 0,0 z m 0,-21.6 19.5,0 0,1.2 2.7,0 0,-15.8 -2.7,0 0,1.2 -19.5,0 z M 89.7,80.9 v 0.1 c 8.1,0 16.2,1.2 20.6,4.9 2.8,2.4 3.1,4.5 3.1,9.6 0,4.1 0.5,8.3 4.5,8.3 h 0.8 c 1.7,0 2.8,-2.6 2.8,-4.3 v -0.9 c 0,-5.1 -3.3,-10.7 -5.9,-13.3 -1.6,-1.6 -3.6,-3 -6.1,-3.6 -2.2,-0.5 -6,-1.1 -8.6,-1.1 l -1.8,-0.1 -9.4,0.4 z"}],i["GR.IN.IC.GROUND WATER WELL"]=[{type:"path",stroke:!1,d:"M86,64L86,70L75,110L81,110L92,70L99,70L99,130L86,130L86,140L120,140L120,130L110,130L110,89L120,89L120,93L130,93L130,87C130,82.631 125.551,83 125.551,83L110,83L110,70L113.774,70L113.774,64L86,64Z"}],i["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 109.7,116.6 4.1,13.4 -0.2,0.1 -12.2,-8.4 8.3,-5.2 z m -19.7,0 8,5.1 -12.1,8.4 4.1,-13.6 z m 9.8,-9.8 8.8,8.2 c -1.7,0.5 -8.1,5.6 -8.8,5.6 -0.2,0 -8.2,-5.4 -8.6,-5.8 l 8.5,-8.1 z m 5.3,-4.8 3.1,9.8 -6.9,-6.4 3.7,-3.4 z m -10.5,0.1 3.8,3.3 -6.9,6.4 3.1,-9.7 z m 2.1,-1 6.4,-0 -3.2,3.2 -3.2,-3.2 z M 99.2,84.8 C 99.1,85.4 99,85.5 99,86.1 v 2 h -3 c -0.5,0 -0.8,0.3 -0.8,0.8 0,0.5 0.1,0.5 0.2,1 0.4,0.1 0.4,0.2 1,0.2 h 2.6 v 2.8 h -4.5 c -0.6,0 -1.2,0.2 -1.2,0.8 0,0.5 0.3,0.8 0.8,0.8 h 4.9 v 4.9 h -4.5 c -0.5,0 -0.5,0.1 -0.9,0.2 l -2.5,7.9 -1,3.2 -4.1,13.3 -1.1,3.1 c 0,2 -1.4,3.5 -1.4,5.5 0,0.4 0.1,0.2 0.2,0.8 h 0.5 c 0.6,0 15.1,-10.3 15.4,-10.3 0.6,0 14.2,9.4 15.8,10.5 0.4,-0.2 1,-0.4 1,-1 v -0.6 c 0,-0 -1.5,-4.4 -1.7,-5 -0.4,-1.1 -1.4,-4.3 -1.5,-5.2 l -1,-3.2 -4.1,-13.2 -0.9,-3.4 c -1,-0.4 -0.3,-2.6 -1.6,-2.6 h -4.8 v -5 h 4.8 c 0.5,0 0.8,-0.3 0.8,-0.8 0,-0.5 -0.3,-0.8 -0.8,-0.8 H 100.8 V 90.1 h 2.4 c 0.7,0 1.4,-0.4 1.4,-1 v -0.2 c 0,-0.5 -0.3,-0.8 -0.8,-0.8 h -2.9 v -2.6 c 0,-0.4 -0.6,-1 -0.8,-1 -0,-0 -0.7,0.1 -0.8,0.2 z m 6.7,-15.7 c 7,1.6 10.9,4.6 15.1,8.9 3,3 7.3,11 7.3,16.9 v 4 c 0,2.1 -1.5,7.7 -2.2,9 -0.7,1.1 -1.2,2.4 -1.9,3.6 -0.3,0.4 -2.4,3.3 -2.4,3.4 0,0.7 1,1.6 1.2,2.6 1.7,-0.4 4.8,-6.3 5.7,-8.2 1.2,-2.5 2.7,-7.8 2.7,-11.4 V 94.3 c 0,-0.1 -0.9,-4.9 -1,-5.5 -0.3,-0.9 -1.4,-3.7 -1.8,-4.8 -0.9,-2.2 -3.7,-6.4 -5.2,-8 -3.6,-3.6 -10.6,-9.2 -16.9,-9.7 l -0.4,2.8 z m -1.6,10.7 c 6,0.5 13.3,9.2 13.3,16.1 v 2.2 c 0,1.5 -1.4,5.5 -1.4,5.5 0,0.2 1.2,2.9 1.4,3.2 l 0.2,0.1 1.6,-3.4 0.1,-0.6 0.7,-5.9 0.2,-0.4 -1,-5.9 c -0.7,-0.3 -0.6,-1.4 -1.1,-2.2 -0.4,-0.8 -0.8,-1.6 -1.3,-2.3 -1.1,-1.6 -1.8,-2.6 -3.2,-3.9 -2.2,-2.2 -5.8,-4.2 -9.2,-5 l -0.3,2.8 z M 68.7,95.2 v 5.1 c 0,4.2 5.4,16.3 7.9,17 0.1,-0.5 1,-2.2 1,-2.6 0,0 -2.1,-2.9 -2.3,-3.4 -0.7,-1.3 -1.3,-2.4 -1.9,-3.8 -1,-2.6 -1.8,-6 -1.8,-9.6 v -2.4 c 0,-8 3.3,-12.9 6.9,-17.5 1.4,-1.8 4.7,-4.4 6.7,-5.6 1.4,-0.8 2.5,-1.4 4.1,-2.1 0.5,-0.2 4.5,-1.3 4.5,-1.6 l -0.2,-2.6 c -2.4,0.1 -8,2.6 -9.6,3.7 -3.2,1.9 -4.8,3.6 -7.3,6.1 -3.6,3.6 -7.8,12 -7.8,19.1 l 0,0 z m 10.7,0 v 2.9 c 0,1.9 0.2,3.1 0.8,4.5 0.2,0.4 1.5,4 1.5,4 l 0.4,-0 1.5,-2.9 c -0.9,-1.2 -1.4,-4 -1.4,-6.2 v -1.8 c 0,-3.7 2.3,-8.3 4.2,-10.3 1.8,-1.8 5.9,-5.5 9.1,-5.6 L 95,77.1 C 88,77.6 79.4,87.3 79.4,95.2 z"}],i["GR.IN.IC.TELECOMMUNICATIONS TOWER"]=[{type:"path",stroke:!1,d:"m 102.5,119.2 12,-8 2.8,9.2 1.3,4 2.1,6.9 -18.2,-12 z m -23,12 3.4,-11.7 2,-5.9 0.8,-2.6 11.9,8.2 -18,12 z m 20.4,-34.6 13,12.2 c -1.5,1 -12.3,8.5 -13.1,8.5 -0.1,0 -11.6,-7.7 -12.7,-8.5 L 99.9,96.6 z m 7.7,-7.1 0.2,0.2 1.8,5.7 2.5,8.7 -10.1,-9.3 5.6,-5.2 0,0 z m -15.5,0.6 v -0.6 l 0.4,0.2 5.4,5 -10,9.4 2.6,-9 1.6,-5 z m 2.9,-1.7 9.8,-0 -5,4.4 -4.8,-4.4 z m 3.6,-23.1 v 3.6 h -4.4 c -0.5,0 -1,0.6 -1,1 v 0.6 c 0,0.7 0.8,1 1.5,1 h 4 v 4.2 h -7.2 c -0.5,0 -1,0.6 -1,1 v 0.2 c 0,1 0.5,1.5 1.5,1.5 h 6.8 v 7 h -6.8 c -0.8,0 -1,0.3 -1.3,0.7 l -0.6,2 -4.9,15.6 -3,9.6 -3.1,9.4 -0.1,0.8 -2.9,8.7 -0.1,0.8 -0.5,2.2 c 1,0.2 0.5,0.6 1.3,0.6 h 0.2 c 0.8,0 20.1,-13.7 23.1,-15.2 2.5,1.7 22.4,15.2 23.5,15.2 0.6,0 1,-0.7 1,-1.3 0,-0.1 -1.4,-4 -1.5,-4.2 l -0.1,-0.8 -3.1,-9.7 -2.9,-9.3 -4.7,-15.7 c -0.6,-0.8 -1.4,-3.8 -1.8,-5 -0.6,-1.8 -0.5,-4.3 -2.5,-4.3 h -6.8 v -7 h 7.2 c 0.5,0 1,-0.6 1,-1 v -0.4 c 0,-0.6 -0.2,-1.3 -0.8,-1.3 h -7.4 v -4.2 h 4 c 0.7,0 1.5,-0.4 1.5,-1 v -0.6 c 0,-0.7 -0.8,-1 -1.5,-1 h -4 v -4 c 0,-0.6 -0.7,-1 -1.3,-1 -0.8,-0 -1.3,0.6 -1.3,1.4 l 0,0 z m -6.6,24.8 0.4,-0.4 -0.4,-0.2 z"}],i["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]=a("ATC"),i["GR.IN.IC.PROPANE FACILITY"]=[{type:"path",stroke:!1,d:"m 98.7,73.1 v 0.2 c 0,1 0.5,1.5 1.5,1.5 0.5,0 1.1,-0.6 1.1,-1.1 0,-0.8 -0.2,-0.8 -0.2,-1.5 -0.5,-0.1 -0.5,-0.2 -1.1,-0.2 h -0.2 c -0.5,0 -1.1,0.6 -1.1,1.1 z m -12.6,58.5 h 28.4 v 3.3 h -28.4 v -3.3 z M 75.8,119 h 48.5 v 3.3 c 0,2 -8.8,7.8 -9.8,7.8 H 85.8 c -1,0 -10,-5.8 -10,-7.6 v -3.5 l 0,0 z m 0,-27.5 c 0,-1.1 7.2,-5.8 8.5,-6.6 2.6,-1.5 7.4,-3.7 11.4,-3.7 h 8.5 c 4.1,0 9.1,2 11.6,3.7 1.3,0.9 8.5,5.4 8.5,6.6 v 4.2 H 75.8 V 91.5 l 0,0 z M 98.2,77.1 c 0.7,0 0.8,0.2 1.5,0.2 h 0.4 c 0.8,0 0.8,-0.2 1.5,-0.2 v 1.8 l 1.2,0.8 -5.5,0 c 0.3,-0.5 0.9,-0.8 0.9,-1.3 l -0,-1.3 0,0 z m -1.1,-4 c 0,-1.4 1.4,-2.4 2.8,-2.4 1.3,0 2.8,0.9 2.8,2 v 1.1 c 0,1.4 -1.6,2.4 -3,2.4 -1,0 -2.6,-1.2 -2.6,-2.4 v -0.7 h -0 z m 12.2,-8.1 h 3.5 v 3.5 h -1.8 v 6.8 c 0.7,0 2.4,0.6 2.4,1.3 v 3.7 H 109.4 V 65.1 z m -22.7,0 h 4.2 V 80.3 H 85.8 v -4.1 c 0.8,-0.2 3.1,-0.8 3.1,-1.5 v -6.1 h -2.2 v -3.5 z m 5.7,0 h 15.5 v 15.3 c -1.6,-0.4 -4.8,-0.9 -4.8,-2.6 v -0.9 c 0,-1.5 0.9,-2.1 0.9,-2.6 v -1.1 c 0,-3.2 -3,-3.2 -3.3,-4.4 h 4.2 v -1.5 h -9.6 v 1.5 h 4.2 v 0.6 c -1.9,0.1 -3.1,1.9 -3.1,4 v 0.6 c 0,1 0.9,2 0.9,2.4 v 1.3 c 0,1.4 -3.4,2.3 -4.8,2.6 V 65.1 l 0,0 z m -7.2,4.8 h 2.2 v 4 c 0,0.8 -2.1,1.2 -2.8,1.3 v 6.8 h 3 c -0.6,0.4 -2.7,1.2 -3.6,1.8 -1.2,0.7 -2.2,1.4 -3.4,2.1 -0.9,0.6 -6.1,4.7 -6.3,4.8 v 31.6 c 0,1.9 3.2,4.4 4.5,5.3 1,0.6 5.8,3.3 5.8,4.1 v 4.8 h 31.2 v -4.8 c 0,-1.6 10,-4.6 10,-10 V 91.1 c 0,-0.9 -5,-4.4 -6,-5.1 -1.2,-0.8 -2.1,-1.4 -3.3,-2.1 -0.9,-0.6 -3.2,-1.4 -3.7,-1.9 h 2.4 v -6.8 c -0.7,-0.2 -2.6,-0.5 -2.6,-1.3 v -4 h 2 V 63.5 H 85.2 v 6.3 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 114.4,134.9 0,-3.3 -28.4,0 0,3.3 z M 75.8,122.5 c 0,1.9 9,7.6 10,7.6 h 28.6 c 1,0 9.8,-5.9 9.8,-7.8 v -3.3 H 75.8 v 3.5 l 0,0 z m 0,-31 v 4.2 h 48.5 V 91.5 c 0,-1.2 -7.2,-5.7 -8.5,-6.6 -2.5,-1.7 -7.5,-3.7 -11.6,-3.7 h -8.5 c -3.9,0 -8.8,2.2 -11.4,3.7 -1.3,0.8 -8.5,5.4 -8.5,6.6 l 0,0 z M 109.4,80.3 h 4.2 v -3.7 c 0,-0.8 -1.7,-1.2 -2.4,-1.3 v -6.8 h 1.8 V 65.1 H 109.4 V 80.3 z M 86.7,68.6 h 2.2 v 6.1 c 0,0.8 -2.3,1.4 -3,1.5 v 4.2 h 5 V 65.1 h -4.2 v 3.5 z m 11.6,9.8 c 0,0.6 -0.6,0.8 -0.9,1.3 l 5.5,-0.1 -1.1,-0.8 V 77.1 c -0.7,0 -0.8,0.2 -1.5,0.2 H 99.8 c -0.8,0 -0.8,-0.2 -1.5,-0.2 l -0,1.3 0,0 z m 2.8,-6.1 c 0.1,0.7 0.2,0.8 0.2,1.6 0,0.5 -0.6,1.1 -1.1,1.1 -1,0 -1.5,-0.5 -1.5,-1.5 v -0.2 c 0,-0.5 0.6,-1.1 1.1,-1.1 h 0.2 c 0.6,0 0.6,0.1 1.1,0.2 z m -3.9,0.9 v 0.7 c 0,1.2 1.6,2.4 2.6,2.4 1.4,0 3,-1 3,-2.4 V 72.7 c 0,-1 -1.6,-2 -2.8,-2 -1.4,0 -2.8,1 -2.8,2.4 z"}],i["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"M 100,67.3 C 90.1122,72.1037 79.3336,77.3992 70,82 c -1.2,0.6 -3.8,1.3 -3.8,2.8 l -0.1,0 0,0.4 c 0,0.6 0.1,0.6 0.2,1.1 0.5,0.1 0.5,0.2 1.1,0.2 l 65,0 c 0.7,0 1.7,-0.6 1.7,-1.1 0,-2.2 -1.7,-2.4 -3.2,-3 C 119.391,76.7575 109.17,71.7941 100,67.3 Z m -0.1,3.4 c 0.2,0 24.5,12 25.9,13 l -51.6,0 0,-0.1 C 75,83 99.7,70.7 99.9,70.7 Z m 31.6,55.6 0,-3 -63.3,0 0,3 z m 2.3,6.4 0,-3 -67.7,0 0,3 z m -6.2,-40.7 2.4,0 0,-3.2 -7.9,0 0,3.2 2.1,0 -0.6,25.5 -1.5,0 0,3.8 7.9,0 0,-3.8 -1.5,0 z m -14.6,-3.2 -7.6,0 0,3.2 2.2,0 -0.9,25.4 -1.3,0 0,3.8 7.6,0 0,-3.8 -1.4,0 -0.7,-25.5 2.1,0 z m -20.8,3.1 2.3,0 0,-3.2 -7.8,0 0,3.2 2.3,0 -0.8,25.4 -1.5,0 0,3.8 7.8,0 0,-3.8 -1.7,0 z m -22.5,25.5 0,3.8 8,0 0,-3.8 -1.5,0 -0.8,-25.5 2.3,0 0,-3.2 -8,0 0,3.2 2.4,0 -0.9,25.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 74.1,83.6 h 51.6 C 124.3,82.7 100,70.7 99.8,70.7 99.6,70.7 74.9,83 74.1,83.6 l 0,0 z"}],i["GR.IN.IC.MILITARY INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"m 65.2,93.1 c 0,-0.5 15.6,-11.5 17.3,-12.8 1.5,-1.2 17.3,-12.6 17.4,-12.6 0.6,0 15.9,11.2 17.6,12.5 1.7,1.3 17.3,12.4 17.3,12.9 0,0 -6.1,18.6 -6.7,20.3 -1.2,3.4 -2.2,6.8 -3.4,10.3 -1,3 -2.7,7.2 -3.3,10 H 78.4 c -0.1,-1.7 -5.6,-18 -6.5,-20.4 -0.6,-1.4 -6.6,-20.1 -6.6,-20.1 z m 8.4,38.5 2,6.1 49,0 8.4,-26.4 6.6,-20.5 -39.7,-28.7 -39.6,28.8 13.3,40.6 0,0 z M 100,76.2 c 2.7,2.4 26.6,18.7 26.6,19.6 0,0.8 -4.1,12.7 -4.5,13.4 l -5.6,17.4 -32.5,0 c -0.9,0 -3,-7.4 -3.5,-8.7 -0.6,-1.8 -2.9,-7.8 -2.9,-9.4 L 74.3,98.9 73.5,95.5 100,76.2 z m 30.5,18 c -3.1,-2.1 -30,-22.2 -30.7,-22.2 -0.1,0 -13.8,10.1 -15.2,11.1 -2,1.4 -14.3,10.7 -15.2,10.9 v 0.7 c 0,1 2.9,7 2.9,9.3 l 8.7,26.3 37.7,0 5,-15.7 6.6,-20.4 z m -50.4,3.2 c 0.8,-0.2 8.6,-6.1 10,-7 1.2,-0.8 9.5,-7.1 10,-7.1 0,0 9,6.5 10,7.2 1.2,0.8 9.7,6.5 9.7,7.3 0,1.2 -0.4,2 -0.9,2.7 0,1.6 -2.6,8.7 -3.3,10.6 -0.5,1.4 -2.8,10.1 -3.7,10.1 H 88.1 c -0.7,0 -1.8,-4 -2,-4.8 -0.6,-1.7 -1.2,-3.3 -1.7,-5.1 -0.6,-2.1 -3.1,-8.7 -3.1,-10.3 l -0.3,0.1 -0.9,-3.7 z m -3.2,-0.7 8.8,27 28.2,-0 8.7,-27.2 c -3.2,-1.7 -21.7,-16.3 -22.9,-16.3 -0.3,0 -20.6,15 -22.9,16.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 77,96.8 c 2.3,-1.5 22.6,-16.6 22.9,-16.6 1.2,0 19.7,14.6 22.9,16.3 l -8.7,27.2 -28.3,0 -8.8,-27 z m -3.6,-1.3 0.9,3.4 3.4,9.7 c 0,1.5 2.3,7.6 2.9,9.4 0.4,1.3 2.5,8.7 3.5,8.7 l 32.5,-0 5.5,-17.4 c 0.4,-0.6 4.5,-12.6 4.5,-13.4 0,-1 -23.9,-17.2 -26.6,-19.6 L 73.5,95.5 z m 6.7,2 0.9,3.7 0.3,-0.1 c 0,1.6 2.4,8.2 3.1,10.3 0.5,1.8 1.1,3.4 1.7,5.1 0.2,0.8 1.3,4.8 2,4.8 h 23.8 c 1,0 3.3,-8.6 3.7,-10.1 0.6,-1.9 3.3,-9 3.3,-10.6 0.5,-0.7 1,-1.5 1,-2.7 0,-0.8 -8.5,-6.5 -9.7,-7.3 -1,-0.7 -9.9,-7.2 -10,-7.2 -0.5,0 -8.8,6.2 -10,7 -1.3,1 -9.2,6.8 -10,7.1 z m 43.8,17.1 -5,15.7 -37.7,-0 -8.7,-26.3 c 0,-2.3 -2.9,-8.3 -2.9,-9.3 v -0.7 c 1,-0.2 13.2,-9.5 15.2,-10.9 1.4,-1 15.1,-11.1 15.2,-11.1 0.7,0 27.6,20 30.7,22.2 l -6.6,20.4 z M 65.2,93.1 c 0,0 6,18.7 6.6,20.1 1,2.4 6.4,18.7 6.5,20.4 h 43.1 c 0.6,-2.8 2.3,-7 3.3,-10 1.2,-3.5 2.1,-6.8 3.4,-10.3 0.6,-1.7 6.7,-20.2 6.7,-20.3 0,-0.5 -15.6,-11.5 -17.3,-12.9 C 115.8,79 100.5,67.7 99.9,67.7 99.8,67.7 84.1,79.2 82.5,80.3 80.8,81.6 65.2,92.7 65.2,93.1 z"}],i["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]=[{type:"path",stroke:!1,d:"M 64.3,86.6 99.9,102.1 135.7,86.6 v 31.8 H 64.3 v -31.8 l 0,0 z m 62.5,1.9 c -3.1,1.2 -5.9,2.6 -9,3.9 -2.2,0.9 -17.1,7.7 -18,7.7 -0.5,0 -15.8,-7 -17.8,-7.8 -3,-1.2 -5.9,-2.8 -8.8,-3.9 -2.3,-0.9 -6.8,-3.4 -8.8,-3.8 v -3.2 h 71.5 v 3.2 c -2.1,0.4 -6.6,2.9 -9,3.9 z m -64.1,31.7 h 74.7 V 79.8 H 62.7 v 40.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 64.3,86.6 0,31.8 71.5,0 0,-31.8 -35.8,15.5 z m 0,-2 c 2,0.5 6.5,3 8.8,3.8 2.9,1.1 5.8,2.7 8.8,3.9 2,0.8 17.3,7.8 17.8,7.8 0.9,0 15.9,-6.8 18,-7.7 3.1,-1.3 5.9,-2.6 9,-3.9 2.4,-1 6.9,-3.4 9,-3.9 V 81.4 H 64.3 v 3.2 l 0,0 z"}],i["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]=[{type:"path",stroke:!1,d:"M 64.3,94.6 99.9,110.1 135.7,94.6 V 126.4 H 64.3 l 4e-4,-31.8 0,0 z m 62.5,1.9 c -3.1,1.2 -5.9,2.6 -9,3.9 -2.2,0.9 -17.1,7.7 -18.1,7.7 -0.5,0 -15.7,-6.9 -17.8,-7.8 -3,-1.2 -5.9,-2.8 -8.8,-3.9 -2.3,-0.9 -6.8,-3.4 -8.8,-3.9 v -3.2 h 71.5 v 3.2 c -2.1,0.5 -6.6,2.9 -9,3.9 z M 62.7,128.2 h 74.7 V 87.8 H 62.7 v 40.5 z m 66.1,-54.4 -5.4,0 0,13.3 -2,0 0,-13.3 -5.4,0 0,-1.8 12.8,0 0,1.8 m -14,9 c -1e-5,0.6 -0.1,1.2 -0.4,1.7 -0.3,0.6 -0.7,1.1 -1.1,1.5 -0.5,0.4 -1.2,0.8 -1.9,1 -0.7,0.2 -1.6,0.4 -2.6,0.4 -1.1,0 -2.1,-0.1 -2.9,-0.3 -0.9,-0.2 -1.8,-0.5 -2.7,-0.9 l 0,-2.5 0.1,0 c 0.8,0.6 1.6,1.1 2.7,1.5 1,0.3 1.9,0.5 2.8,0.5 1.2,10e-7 2.2,-0.2 2.9,-0.7 0.7,-0.5 1,-1.1 1,-1.9 -1e-5,-0.7 -0.2,-1.2 -0.5,-1.5 -0.3,-0.3 -0.8,-0.6 -1.5,-0.7 -0.5,-0.1 -1.1,-0.2 -1.7,-0.3 -0.6,-0.1 -1.2,-0.2 -1.9,-0.3 -1.3,-0.3 -2.3,-0.8 -3,-1.5 -0.6,-0.7 -1,-1.6 -1,-2.7 0,-1.3 0.5,-2.3 1.6,-3.1 1.1,-0.8 2.4,-1.2 4.1,-1.2 1.1,1.6e-5 2,0.1 2.9,0.3 0.9,0.2 1.7,0.5 2.4,0.8 l 0,2.4 -0.1,0 c -0.6,-0.5 -1.3,-0.9 -2.3,-1.2 -0.9,-0.3 -1.9,-0.5 -2.9,-0.5 -1.1,1.3e-5 -1.9,0.2 -2.6,0.7 -0.7,0.4 -1,1 -1,1.7 -1e-5,0.6 0.2,1.1 0.5,1.5 0.3,0.4 0.9,0.6 1.7,0.8 0.4,0.1 1,0.2 1.8,0.3 0.8,0.1 1.5,0.3 2,0.4 1.1,0.3 2,0.7 2.5,1.4 0.6,0.6 0.9,1.4 0.9,2.5 m -14.4,4.3 -6,0 0,-1.5 2,0 0,-12 -2,0 0,-1.5 6,0 0,1.5 -2,0 0,12 2,0 0,1.5 m -8.6,-7.5 c -1.5e-5,1.4 -0.3,2.6 -0.9,3.7 -0.6,1.1 -1.4,2 -2.4,2.6 -0.7,0.4 -1.5,0.7 -2.3,0.9 -0.8,0.2 -2,0.3 -3.4,0.3 l -3.8,0 0,-15.1 3.8,0 c 1.5,1.5e-5 2.6,0.1 3.5,0.3 0.9,0.2 1.6,0.5 2.2,0.9 1,0.6 1.8,1.5 2.4,2.6 0.6,1.1 0.9,2.3 0.9,3.8 m -2.1,-0 c -1.2e-5,-1.2 -0.2,-2.2 -0.6,-3 -0.4,-0.8 -1,-1.5 -1.8,-1.9 -0.6,-0.3 -1.2,-0.6 -1.9,-0.7 -0.7,-0.1 -1.5,-0.2 -2.4,-0.2 l -1.9,0 0,11.7 1.9,0 c 1,2e-6 1.8,-0.1 2.5,-0.2 0.7,-0.1 1.4,-0.4 2,-0.8 0.8,-0.5 1.3,-1.1 1.7,-1.9 0.4,-0.8 0.6,-1.8 0.6,-2.9"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 126.8,96.5 c -3.1,1.2 -5.9,2.6 -9,3.9 -2.2,0.9 -17.1,7.7 -18.1,7.7 -0.5,0 -15.7,-6.9 -17.8,-7.8 -3,-1.2 -5.9,-2.8 -8.8,-3.9 -2.3,-0.9 -6.8,-3.4 -8.8,-3.9 v -3.2 h 71.5 v 3.2 c -2.1,0.5 -6.6,2.9 -9,3.9 z m -62.5,-1.9 35.6,15.5 35.8,-15.5 V 126.4 H 64.3 l 4e-4,-31.8 0,0 z"}],i["GR.IN.IC.POST OFFICE"]=[{type:"path",stroke:!1,d:"m 74.7,92.8 24.9,10.8 L 124.7,92.8 V 115.1 H 74.7 V 92.8 l 0,0 z m 43.7,1.3 c -2.2,0.9 -4.1,1.8 -6.3,2.7 -1.5,0.6 -12,5.4 -12.6,5.4 -0.4,0 -11,-4.9 -12.5,-5.4 -2.1,-0.8 -4.1,-1.9 -6.2,-2.7 -1.6,-0.6 -4.8,-2.4 -6.2,-2.7 v -2.2 h 50 v 2.3 c -1.5,0.3 -4.6,2 -6.3,2.7 z M 73.6,116.4 H 125.8 V 88.1 H 73.6 V 116.4 z M 99.8,64.3 c 0.2,0 35.5,19.8 37.1,21.2 h -4.8 v 38.6 h -63.9 v -38.6 h -4.9 c 1.6,-1.4 6.9,-4.1 9.1,-5.3 3.1,-1.8 6,-3.4 9.1,-5.3 1.6,-1 18.3,-10.6 18.4,-10.6 z m -43.3,23.1 9.9,-0.2 v 38.4 h 67.4 v -38.4 l 9.9,0.2 c -0.5,-0.6 -43.6,-25 -43.9,-25 -0,0 -19.5,11.4 -21.7,12.5 -3.5,1.8 -7.4,4.2 -10.9,6.2 -2.7,1.6 -8.8,4.6 -10.8,6.3 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"M 99.8,64.3 C 99.8,64.3 83.1,73.9 81.5,74.9 c -3,1.8 -6,3.5 -9.1,5.3 -2.2,1.2 -7.5,4 -9.1,5.3 l 4.9,0 0,38.6 63.9,0 0,-38.7 4.8,0 c -1.6,-1.4 -36.9,-21.2 -37.1,-21.2 z M 73.6,88.1 l 52.3,0 0,28.3 -52.3,0 0,-28.3 z m 44.9,6.1 c -2.2,0.9 -4.1,1.8 -6.3,2.7 -1.5,0.6 -12,5.4 -12.6,5.4 -0.4,0 -11,-4.9 -12.5,-5.4 -2.1,-0.8 -4.1,-1.9 -6.2,-2.7 -1.6,-0.6 -4.8,-2.4 -6.2,-2.7 v -2.2 h 50 v 2.3 c -1.5,0.3 -4.6,2 -6.3,2.7 z M 74.7,92.8 99.6,103.7 124.7,92.8 V 115.1 H 74.7 V 92.8 l 0,0 z"}],i["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]=[{type:"path",stroke:!1,d:"m 114.9,121.3 0,-1.2 -30.7,0 0,1.2 z m -31.9,-2.5 -10.4,-16.7 -1,0.4 10.6,16.6 z m 13,-13.8 h 7 c 0.6,0 4.4,-6 5,-6.8 H 91 c 0.6,0.9 4.4,6.8 5,6.8 z m 15.3,12 0,-1 -23.5,0 0,1 z m 2.4,-1.6 8.6,-13.6 -0.8,-0.4 -8.5,13.3 z M 76.8,101.9 c 0,0.3 3.7,5.9 4.2,6.7 0.4,0.6 4.2,6.7 4.3,6.7 0.4,0 0.5,-0.2 0.7,-0.5 l -8.5,-13.4 c -0.2,0.1 -0.7,0.2 -0.7,0.5 z m 31,10.8 0,-1 -16.5,0 0,1 z m -19.3,-1.2 0.7,-0.4 -6.7,-10.5 -0.7,0.4 z m 22.3,-0 6.4,-10.5 -0.8,-0.3 -6.6,10.5 z m -6.4,-3 0,-1 -9.7,0 0,1 z m 2.8,-1.8 c 0,0.6 0.3,0.6 0.7,0.6 l 4.2,-6.9 -0.6,-0.4 c -0.2,0.2 -4.3,6.6 -4.3,6.7 z m -20.3,-6.3 4.1,7 c 0.3,-0.1 0.8,-0.2 0.8,-0.5 0,-0.6 -3.7,-5.6 -4,-6.9 l -1,0.4 z m -19.7,18 0.3,-2.8 c 0.1,-3.9 2,-11.4 3,-14.6 1.6,-4.7 3.2,-8.3 5.6,-12 4.4,-6.5 12,-12.4 22.8,-12.4 h 1.1 c 9.6,0 17,4.8 21.3,10.2 1.2,1.5 2.3,2.8 3.2,4.6 0.5,0.9 1,1.6 1.4,2.6 0.4,0.9 0.7,1.9 1.1,2.7 0.8,1.4 3.6,10.3 3.6,12.1 v 0.6 h 0.3 v 1 l 1.2,10.8 -0.1,2.2 H 67 l 0.2,-5 0,0 z m -2.3,-4 -0.3,2.4 -0.4,5.6 v 3.8 h 70.9 v -1 c 0,-2 0.1,-6.4 -0.2,-8.1 -0.4,-2.4 -0.5,-5.2 -1,-7.5 -0.4,-2 -2.9,-12.7 -3.9,-13.1 0,-1.6 -3.5,-7.6 -4.3,-8.8 -1.8,-2.6 -3.8,-5 -6.2,-7 -4.9,-3.9 -10.5,-7 -19.3,-7 h -1 c -11.8,0 -19.6,5.9 -24.6,12.8 -1.4,1.9 -2.4,3.8 -3.5,5.9 -1.2,2.3 -1.7,4.2 -2.6,6.7 -1.2,3 -3.4,11.4 -3.5,15.3 l 0,0 z m 52.2,4.7 c 0.4,-1.3 4.2,-6.6 5.2,-8.3 0.6,-1 5.1,-7.9 5.1,-8.2 0,-0.3 -0.6,-0.4 -0.8,-0.5 l -10.6,16.6 1.1,0.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 84.2,120.1 h 30.7 v 1.2 H 84.2 v -1.2 z m 3.6,-4.2 h 23.5 v 1 H 87.8 v -1 z m 3.5,-4.2 h 16.5 v 1 H 91.4 v -1 z m 3.3,-4.2 h 9.7 v 1 h -9.7 v -1 z m 22.4,11.5 -1.1,-0.4 10.6,-16.6 c 0.3,0.1 0.8,0.2 0.8,0.5 0,0.3 -4.6,7.2 -5.1,8.2 -1,1.8 -4.9,7 -5.2,8.3 z m -45.4,-16.6 1,-0.4 10.4,16.7 -0.8,0.4 -10.6,-16.6 z m 13.7,12.8 c -0.2,0 -4,-6 -4.3,-6.7 -0.5,-0.8 -4.2,-6.3 -4.2,-6.6 0,-0.3 0.4,-0.4 0.7,-0.5 l 8.5,13.3 c -0.2,0.3 -0.2,0.5 -0.7,0.5 z m 36.2,-13.8 0.8,0.4 -8.6,13.6 -0.8,-0.6 8.6,-13.4 z m -5.1,-0.6 0.8,0.3 -6.4,10.5 -1,-0.3 6.6,-10.5 z m -33.9,-0 6.7,10.5 -0.7,0.4 -6.7,-10.5 0.7,-0.4 z m 24.7,6 c 0,-0.1 4.1,-6.5 4.3,-6.7 l 0.6,0.4 -4.2,6.9 c -0.4,0 -0.7,-0.1 -0.7,-0.6 z m -19.4,-6.7 c 0.3,1.3 4,6.3 4,6.9 0,0.3 -0.6,0.4 -0.8,0.5 l -4.1,-7 1,-0.4 z m 8.2,4.9 c -0.6,0 -4.4,-6 -5,-6.8 h 17 c -0.6,0.8 -4.4,6.8 -5,6.8 h -7 z m -28.5,10.7 c 0,0.5 -0,2.8 -0.3,2.8 l -0.2,5 h 65.2 l 0.1,-2.2 -1.2,-10.8 v -1 h -0.3 v -0.6 c 0,-1.8 -2.8,-10.6 -3.6,-12.1 -0.4,-0.8 -0.7,-1.8 -1.1,-2.7 -0.5,-1 -1,-1.6 -1.5,-2.6 -0.9,-1.8 -2,-3.1 -3.2,-4.6 -4.2,-5.4 -11.6,-10.2 -21.3,-10.2 h -1 c -10.8,0 -18.5,5.8 -22.8,12.4 -2.5,3.8 -4.1,7.4 -5.7,12 -1.1,3.2 -3,10.7 -3,14.6 l 0,0 z"}],i["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]=[{type:"path",stroke:!1,d:"m 122.4,117.1 0,-1.5 -45.1,0 0,1.5 z M 74.5,114 75.6,113.4 59.8,88.8 58.8,89.4 z m 49.6,-0.6 c 0.2,0.1 1,0.5 1.3,0.5 0.2,0 14.4,-22.4 15.9,-24.6 l -1.5,-0.5 -15.7,24.6 z m -6.6,-2.6 0,-1.7 -35,0 0,1.7 z m 2.4,-3.2 c 0,0.2 1,0.8 1.1,0.9 l 12.8,-20 h 0.2 l -1.6,-0.8 c -1.3,2.4 -12.6,19.3 -12.6,20 z m -41.1,0.9 1.4,-0.8 -12.7,-20.1 -1.3,0.8 z m 33.3,-3.9 0,-1.6 -24.4,0 0,1.6 z m 3.4,-2.8 c 0,0.6 0.6,0.7 1.1,0.9 l 9.6,-15.4 -1.2,-0.6 c -0.6,2 -9.4,14.5 -9.4,15.2 z m -32.2,1 1.4,-0.6 -9.7,-15.5 -1.3,0.8 z m 23.4,-4.5 0,-1.7 -13.8,0 0,1.7 z m 5.6,-1.7 6.4,-10.3 -1.2,-0.5 -6.6,10.2 z m -24.6,0.1 1.1,-0.8 -6.5,-10.2 -1.3,0.6 z m 6.6,-4 11,0.1 c 0.6,0 6.4,-8.9 7,-10 H 87.3 l 6.9,9.9 z"}],i["GR.IN.IC.RELIGIOUS INSTITUTION"]=[{type:"path",stroke:!1,d:"m 101.2,68.1 c 7.9,0 18,3.8 21.7,8 5,5.7 7,12.3 7,22.8 V 131.9 H 101.2 V 68.1 z M 70.1,96.3 c 0,-8.4 3.4,-16.4 7.7,-20.7 3.9,-3.9 13.2,-7.5 20.9,-7.5 v 63.9 H 70.1 V 96.3 z m -2.6,38.3 h 65 V 99.3 c 0,-10.8 -2.5,-19.7 -8.1,-25.2 -4.8,-4.8 -15,-8.7 -24.6,-8.7 -8.3,0 -19.4,3.7 -23.6,7.9 -3.2,3.3 -4.3,5 -6.2,9.5 -1,2.4 -2.5,10 -2.5,13.2 v 38.5 l 0,0 z M 105.1,97.6 v 12.5 c 0,0.5 0.6,1.1 1.1,1.1 h 0.4 c 0.7,0 1.1,-0.8 1.1,-1.5 V 97.8 c 0,-0.5 -0.6,-1.1 -1.1,-1.1 H 106 c -0.5,0 -0.9,0.4 -0.9,0.9 z m -11.2,13.6 c 0.8,0 0.9,-1 0.9,-1.7 V 97.6 c 0,-0.5 -0.4,-0.9 -0.9,-0.9 h -0.6 c -0.5,0 -0.9,0.4 -0.9,0.9 v 12.5 c 0,0.5 0.6,1.1 1.1,1.1 h 0.4 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 105.1,97.6 c 0,-0.5 0.4,-0.9 0.9,-0.9 h 0.7 c 0.5,0 1.1,0.6 1.1,1.1 v 11.8 c 0,0.7 -0.4,1.5 -1.1,1.5 h -0.5 c -0.5,0 -1.1,-0.6 -1.1,-1.1 V 97.6 h 0 z m -3.9,34.4 h 28.7 V 98.9 c 0,-10.5 -2,-17.1 -7,-22.8 C 119.2,71.9 109.1,68.1 101.2,68.1 v 63.9 z M 94,111.2 H 93.5 c -0.5,0 -1.1,-0.6 -1.1,-1.1 V 97.6 c 0,-0.5 0.4,-0.9 0.9,-0.9 h 0.7 c 0.5,0 0.9,0.4 0.9,0.9 v 11.8 c 0,0.8 -0.1,1.8 -0.9,1.8 z M 70.1,96.3 v 35.7 H 98.8 V 68.1 c -7.7,0 -17,3.6 -20.9,7.5 -4.3,4.3 -7.7,12.3 -7.7,20.7 z"}],i["GR.IN.IC.CHILD DAY CARE"]=[{type:"path",stroke:!1,d:"m 76.6,100.3 c 0,1.8 1.1,3.4 3,3.4 h 0.6 c 1.4,0 2.4,-1.5 2.4,-3 0,-4.3 -6,-4.2 -6,-0.4 z m 26.5,-11.9 v 0.4 c 0,1.5 1.4,3.2 2.8,3.2 h 0.4 c 1.6,0 3,-1.2 3,-2.8 V 87.8 c 0,-1 -1.6,-2 -2.8,-2 h -0.2 c -1.5,-0 -3.2,1.4 -3.2,2.6 z m -3.2,-16.8 35.4,21.7 c -1.3,0.2 -4.6,-0.3 -4.6,0.9 v 34.9 H 69.3 V 94.1 c 0,-1.2 -3.3,-0.8 -4.6,-0.9 l 35.2,-21.7 0,0 z m -39.8,22.4 c 0.2,0.8 0.3,1.3 1.3,1.3 h 6.2 v 34.6 c 0,0.5 0.1,0.5 0.2,0.9 h 64 c 0.4,0 0.8,-0.3 0.8,-0.8 V 95.2 h 6 c 0.8,0 1.3,-0.4 1.3,-1.1 0,-0.6 -17.8,-11.2 -19.8,-12.5 -1.6,-1 -20,-12.3 -20,-12.3 -0.2,0 -36.7,22.5 -40,24.7 l 0,0 z m 20.9,14.2 5.9,4.3 -0.1,0.1 -4.8,2.2 c -0.2,-0.8 -1,-1.9 -1,-2.5 v -4.1 z m 28.4,-8.8 c 0.5,-0.8 0.6,-2.9 1,-3.1 0.4,-0.2 2.4,0.8 2.9,0.9 v 3.6 l -4.4,1.7 v -0.6 c -0,-0.9 0.5,-1 0.5,-2.4 z m -3,2 c 0,0.9 0,1.1 -0.4,1.7 V 104 c -2.4,0.2 -15.4,7.5 -17,7.5 -0.5,0 -6.5,-6.7 -7.3,-6.7 h -4.3 c -0.5,0 -2.8,5.2 -2.8,5.6 v 4.7 c 0,0.9 1.8,1.4 2,2.4 l -4.1,1.7 1.3,2.6 6.2,-2.8 c 1.5,0.8 9.3,5.6 10.5,5.6 h 0.6 c 0.8,0 1.9,-0.8 1.9,-1.5 v -0.4 c 0,-0.9 -7.3,-4.8 -8.4,-5.8 l 14,-6.3 v 8.4 h -3 v 6.7 h 8.4 v -6.7 h -2.8 v -9.9 l 13.2,-5.8 c 0,1.6 0.2,3.7 0.4,5.1 0.2,1.8 -0.6,3.9 1.5,3.9 2.1,0 1.3,-2.5 1.3,-4.3 0,-1.9 -0.2,-3.5 -0.2,-5.6 v -0.6 l 9.1,-4 -1,-2.9 -6.2,2.8 c 0.3,-0.6 0.7,-0.8 1,-1.4 0.2,-0.7 0.4,-1.2 0.7,-1.8 0.5,-1 0.9,-2.6 1.4,-3.4 l -11.4,-1.6 c -0.6,0.5 -3.2,3.3 -3.2,4.2 v 0.6 h -0.4 l -1.1,7.1 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 81,112.2 c 0,0.6 0.8,1.7 1,2.5 l 4.8,-2.2 0.2,-0.1 -6,-4.3 v 4.1 z m 28.4,-12.9 c 0,1.4 -0.6,1.6 -0.6,2.4 v 0.6 l 4.5,-1.7 v -3.6 c -0.5,-0.1 -2.6,-1 -2.9,-0.9 -0.4,0.2 -0.5,2.4 -1,3.1 z m -32.9,0.9 c 0,-3.9 6,-4 6,0.4 0,1.4 -1.1,3 -2.4,3 h -0.5 c -1.8,0 -3,-1.6 -3,-3.4 z m 29.5,2.8 0.4,-1.7 1.1,-7.1 h 0.4 v -0.6 c 0,-0.8 2.6,-3.7 3.2,-4.2 l 11.4,1.6 c -0.5,0.8 -0.9,2.4 -1.4,3.4 -0.3,0.6 -0.4,1.1 -0.7,1.8 -0.3,0.7 -0.7,0.8 -1,1.4 l 6.2,-2.8 1,2.9 -9.1,4 v 0.6 c 0,2.1 0.2,3.7 0.2,5.6 0,1.8 0.8,4.3 -1.3,4.3 -2.1,0 -1.3,-2.2 -1.5,-3.9 -0.2,-1.4 -0.4,-3.5 -0.4,-5.1 l -13.2,5.8 v 9.9 h 2.8 v 6.7 h -8.4 v -6.7 h 3 v -8.4 l -14,6.3 c 1.1,0.9 8.4,4.9 8.4,5.8 v 0.4 c 0,0.7 -1,1.5 -1.9,1.5 H 90.6 c -1.2,0 -8.9,-4.8 -10.5,-5.6 l -6.2,2.8 -1.3,-2.6 4.1,-1.7 c -0.3,-1 -2,-1.5 -2,-2.4 v -4.6 c 0,-0.4 2.3,-5.6 2.8,-5.6 h 4.3 c 0.8,0 6.8,6.7 7.3,6.7 1.5,0 14.6,-7.3 17,-7.5 v -0.9 z m -3,-14.8 c 0,-1.2 1.7,-2.6 3.2,-2.6 h 0.2 c 1.2,0 2.8,1.1 2.8,2 v 1.3 c 0,1.6 -1.4,2.8 -3,2.8 h -0.4 c -1.4,0 -2.8,-1.7 -2.8,-3.2 v -0.4 z m -38.4,4.9 c 1.3,0.1 4.6,-0.3 4.6,0.8 v 34.9 h 61.4 V 94.1 c 0,-1.2 3.3,-0.8 4.6,-0.9 l -35.4,-21.7 -35.2,21.8 0,0 z"}],i["GR.IN.IC.HELICOPTER LANDING SITE"]=[{type:"path",stroke:o,d:"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",fill:!1},{type:"path",stroke:o,fill:!!R&&G,d:"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"},{type:"circle",fill:!1,cx:100,cy:100,r:40}],i["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE LOCK"]=[{type:"path",fill:!1,d:"m 70,70 65,30 -65,30"}],i["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE SHIP ANCHORAGE"]=[{type:"path",fill:!1,stroke:"rgb(255, 0, 255)",d:"m 73.6,112.8 c 0.8,8 26.4,11.2 26.4,11.2 0,0 25.6,-3.2 26.4,-11.2 M 80,88 l 40,0 m -20,-12 0,48"}],i["GR.IN.IC.NATURAL GAS FACILITY"]=[{type:"path",fill:!1,d:"m 100,60.5 c -16.4,0 -29.6,13.2 -29.6,29.6 0,12.8 8.3,23.9 19.7,27.8 l 0,19.7 c 3.2,1.2 6.3,1.8 9.9,1.8 3.6,0 6.7,-0.6 9.9,-1.8 l 0,-19.8 c 11.5,-3.9 19.8,-15 19.7,-27.8 0,-16.4 -13.2,-29.6 -29.6,-29.6 z"},{type:"text",stroke:!1,x:100,y:103,fontsize:35,text:"NG"}],i["GR.IN.IC.TOLL FACILITY"]=[{type:"path",stroke:!1,d:"m 69.1,112.3 c 0,-0.7 0.8,-1.7 1.4,-1.7 h 0.5 c 0.8,0 1.5,0.8 1.5,1.5 v 1.2 c 0,0.5 -0.9,1.2 -1.5,1.2 h -0.2 c -0.8,0 -1.7,-0.8 -1.7,-1.4 v -0.9 l 0,0 z m -1.1,0.5 v 0.3 c 0,1.2 1.5,2.6 2.9,2.6 1.3,0 2.8,-1.5 2.8,-2.5 v -1 c 0,-1.2 -1.4,-2.6 -2.8,-2.6 -1.7,0 -2.9,1.6 -2.9,3.2 z m 27.6,-11.6 -2,-2.8 -2.3,0 4.3,2.8 z m -29.5,17.8 c 0,-0.5 0.8,-0.9 1.4,-0.9 H 99.1 c 0.8,0 1.3,0.6 1.4,1.4 -0.6,0.1 -1,0.3 -1.7,0.3 H 68 c -0.6,0 -1.8,0 -1.8,-0.6 v -0.2 z m 9.4,-10.2 15.1,0 8.2,0.2 c 0.5,0.9 2,3 1.8,4.3 l -0.2,2.6 c -0.5,0.2 -0.5,0.3 -1,0.3 H 67.1 c -0.6,0 -0.5,-0.2 -1.1,-0.3 -0.1,-0.7 -0.3,-1 -0.3,-1.8 v -0.6 c 0,-1.1 1.5,-3.5 2,-4.4 l 7.8,-0.2 z m -5.8,-2 c 0.1,-1.1 3.5,-7.1 4.3,-7.1 h 18.4 c 1,0 4,5.8 4.3,7.1 H 69.7 z m 21.7,-8.4 2.3,-0 2,2.8 -4.3,-2.8 z m 44.3,27.8 V 73.8 c -1,0.2 -10.3,6 -11.9,7 -1.3,0.8 -11.6,6.5 -11.6,7.2 0,0 1.3,2.1 1.4,2.3 l 4.9,-2.8 v 19.2 l -0.4,0.3 c -2.9,-2 -33.4,-22 -33.6,-22 -0.1,0 -3.9,5.6 -4,6.2 l 10.8,7 -18.3,0 c -0.9,1.4 -1.9,2.4 -2.8,3.8 -0.2,0.3 -2,4.4 -2,4.6 v 0.8 h -1.2 c -0.1,0.9 -2.6,4.6 -2.6,5.4 v 0.8 c 0,1.5 0.4,2.9 1.4,3.4 -0.2,0.3 -1,1.1 -1,1.6 v 0.9 c 0,1.1 1.5,1.5 2.6,1.5 v 2.3 l 0.2,2 c 0.5,0.2 0.3,0.5 1.2,0.6 0.6,0.1 1,0.2 1.7,0.2 h 1.1 l 1.7,-0.2 0.3,-0.3 0.2,-2 0,-2.5 h 19.1 v 3.1 c 0,0.8 0.3,1.2 0.6,1.7 l 1.4,0.2 1.2,-0 c 1.7,0 3.1,-0.1 3.1,-1.8 v -3.1 c 0.8,-0.2 2.6,-0.5 2.6,-1.4 v -1.7 c 0,-0.5 -0.5,-0.7 -0.9,-0.8 0.1,-0.5 1.2,-1.1 1.2,-2.5 v -2 c 0,-1.5 -2.1,-4.1 -2.5,-5.4 h -1.2 v -0.4 c 0,-1.1 -2.2,-4.8 -2.5,-5.8 l 19,12.5 c -0.4,1.6 -2,4 -2,5.2 v 7.2 h 22.9 l 0,0 z M 95.9,114.6 H 95.7 c -1.1,0 -1.8,-0.7 -1.8,-1.7 v -0.5 c 0,-1 0.6,-1.8 1.5,-1.8 h 0.5 c 1,0 1.5,1.1 1.5,2 0,1.1 -0.5,2 -1.5,2 z m -3.1,-2.5 v 1.1 c 0,1 1.6,2.5 2.9,2.5 1.4,0 2.6,-1.3 2.6,-2.8 v -0.8 c 0,-1.2 -1.3,-2.6 -2.5,-2.6 H 95.7 c -1.4,0 -2.9,1.4 -2.9,2.6 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 114.5,107.9 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z m -11.2,-7.2 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z m -5.5,-3.7 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z M 108.9,104.5 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z M 92.3,93.5 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z M 86.5,89.8 c 0,0.9 -0.8,1.6 -1.8,1.6 -1,0 -1.8,-0.7 -1.8,-1.6 0,-0.9 0.8,-1.6 1.8,-1.6 1,0 1.8,0.7 1.8,1.6 z m 35.6,2.6 10.8,0 0,16.1 -10.8,0 z m -55.9,26.4 v 0.2 c 0,0.6 1.2,0.6 1.8,0.6 h 30.8 c 0.7,0 1.1,-0.2 1.7,-0.3 -0.1,-0.8 -0.6,-1.4 -1.4,-1.4 H 67.5 c -0.5,0 -1.4,0.4 -1.4,0.9 z m 26.6,-6.8 c 0,-1.2 1.5,-2.6 2.9,-2.6 h 0.2 c 1.2,0 2.5,1.4 2.5,2.6 v 0.8 c 0,1.4 -1.2,2.8 -2.6,2.8 -1.4,0 -2.9,-1.4 -2.9,-2.5 v -1 h -0 z m -24.8,0.6 c 0,-1.6 1.2,-3.2 2.9,-3.2 1.3,0 2.8,1.5 2.8,2.6 v 1.1 c 0,0.9 -1.4,2.5 -2.8,2.5 -1.4,0 -2.9,-1.4 -2.9,-2.6 v -0.3 z m -0.3,-3.8 c -0.5,1 -2,3.4 -2,4.4 v 0.6 c 0,0.9 0.2,1.1 0.3,1.8 0.5,0.1 0.5,0.3 1.1,0.3 h 32.3 c 0.6,0 0.5,-0.2 1,-0.3 l 0.2,-2.6 c 0.1,-1.2 -1.4,-3.4 -1.8,-4.3 l -8.2,-0.2 -15.1,-0 -7.8,0.2 z m 2,-2.2 h 27.1 c -0.4,-1.3 -3.3,-7.1 -4.3,-7.1 H 74 c -0.8,0 -4.2,6 -4.3,7.1 z m 26.2,7.8 c 1.1,0 1.5,-0.9 1.5,-2 0,-0.9 -0.6,-2 -1.5,-2 h -0.5 c -1,0 -1.5,0.8 -1.5,1.8 v 0.5 c 0,1 0.8,1.7 1.8,1.7 h 0.2 l 0,0 z M 69.1,112.3 v 0.9 c 0,0.6 1,1.4 1.7,1.4 h 0.2 c 0.6,0 1.5,-0.8 1.5,-1.2 v -1.2 c 0,-0.8 -0.8,-1.5 -1.5,-1.5 h -0.5 c -0.6,0 -1.4,1 -1.4,1.7 z"}],i["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]=[{type:"path",stroke:!1,d:"m 121.4,81.7 h 1.1 v 0.6 c 0,0.6 0.8,2.1 1.2,2.4 0.5,0.4 1.9,0.9 2.7,0.9 2.6,0 3.9,-1.9 3.9,-4.5 v -0.5 h -7.4 c -0.5,0 -1.2,0.8 -1.4,1.1 z m -22.6,23.5 c 0,-1.7 1.7,-3 3.4,-3 1.7,0 3.1,1.4 3.1,3.1 v 0.6 c 0,1.3 -1.7,2.6 -3.1,2.6 -1.7,0 -3.4,-1.3 -3.4,-3 v -0.5 z m -29.7,0 c 0,-1.8 1.3,-3 3.1,-3 1.7,0 3.3,1.4 3.3,3.1 v 0.3 c 0,1.6 -1.6,3 -3.4,3 -1.5,0 -3,-1.2 -3,-2.6 v -0.8 z m 3.7,-7 c 0,-0.4 1.6,-4.2 1.9,-5 0.6,-1.7 0.9,-3.6 3.3,-3.6 H 96.5 c 2.8,0 2.2,1.8 3.2,3.6 0.2,0.4 1.8,4.5 1.8,4.9 H 72.8 z m -3.7,1 c -2.1,0 -3.7,1.5 -3.7,3.6 v 9.2 c 0,1 1.7,2.3 3.1,2.3 v 5.3 c 0,1.8 1.3,3.3 3.3,3.3 1.4,0 3.1,-1.6 3.1,-2.6 v -5.9 h 24.8 v 6.2 c 0,1 1.7,2.3 3,2.3 h 0.2 c 1.4,0 3.1,-1.3 3.1,-2.6 v -5.9 c 1.9,0 3.3,-1.4 3.3,-3.3 v -8.1 c 0,-2 -1.4,-3.3 -3.2,-3.7 -1.4,-0.2 -1.1,-0.8 -1.6,-1.9 -0.4,-0.8 -0.7,-1.6 -1,-2.4 -1.2,-2.6 -2.2,-8.2 -5.6,-8.2 h -21.2 c -2.9,0 -3.5,3.3 -4.5,5.5 -0.6,1.4 -2.7,5.8 -3,7 z m 56.5,20.2 0.3,-3.3 0.5,-6.2 h 1.7 l 0.8,12.9 h 5.8 V 88.9 c 0,-0.6 -1.2,-1.9 -2,-1.9 l -0.6,0.1 -9.9,14.6 h 8.4 v 3.6 h -11.2 v 17.6 h 6.1 l -0,-0.8 0.2,-2.6 z m -16.8,-30.8 c 0.2,-0.9 1,-1.5 2,-1.6 v 2.2 h -2 c 0,1.4 0.8,2.2 2.2,2.2 v -2 h 2 c -0,1.3 -0.8,1.4 -1.4,2 h 7.8 l 0,10.2 10,-14.3 -10.1,-0.2 h -6.4 v -7.6 c 0,-1.2 -0.8,-2.2 -1.9,-2.2 h -0.4 c -2.2,0 -2,2.4 -2,4.7 0,1.3 -0.4,5.8 0.2,6.6 z m 0,0 v 0.6 h 2 v -2.2 c -1.1,0 -1.8,0.7 -2,1.6 z m 2.2,2.8 h 0.6 c 0.6,-0.6 1.4,-0.7 1.4,-2 h -2 v 2 z m 19.3,-12 0,-2 -8.8,-0 1,2 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 130.3,79.4 -7.9,-0 0.4,1.3 7.5,0 z m -8.1,22.2 9.9,-14.6 0.6,-0.1 -3.1,0.2 -10,14.3 -0.1,3.7 11.2,0 0,-3.6 z m -23.3,3.6 v 0.5 c 0,1.7 1.7,3 3.4,3 1.4,0 3.1,-1.4 3.1,-2.6 v -0.6 c 0,-1.7 -1.4,-3.1 -3.1,-3.1 -1.8,0 -3.4,1.3 -3.4,3 z m -29.7,0 v 0.8 c 0,1.4 1.5,2.6 3,2.6 1.8,0 3.4,-1.3 3.4,-3 v -0.3 c 0,-1.6 -1.6,-3.1 -3.3,-3.1 -1.8,0 -3.1,1.2 -3.1,3 z m 3.7,-7 h 28.6 c 0,-0.5 -1.5,-4.5 -1.8,-4.9 -1,-1.8 -0.4,-3.6 -3.2,-3.6 H 77.9 c -2.4,0 -2.6,1.9 -3.3,3.6 -0.2,0.8 -1.8,4.6 -1.8,5 z"}],i["GR.IN.IC.TUNNEL"]=[{type:"path",stroke:!1,d:"m 94.4,116.8 c 0,-3.5 2.6,-7.2 5.9,-7.2 3.2,0 5.6,4 5.6,7.1 v 0.8 H 94.4 v -0.7 z m 27.2,-4.7 9,-4.2 c 0.2,1.7 0.8,3.2 1,5.2 0.3,1.8 0.6,3.3 0.6,5.6 v 0.5 h -10 l -0.7,-7.1 z m -43.5,4.9 0.1,2.2 H 68 c 0,-1.6 0.3,-3.8 0.6,-5.4 0.1,-0.7 0.2,-1.8 0.5,-2.4 0.1,-0.2 0.7,-2.2 0.7,-2.4 l 9.2,3.1 -0.8,4.9 z m 39,-16.8 6.2,-6.2 c 0.6,1 1.2,1.8 1.9,2.8 0.8,1.1 1.2,2 1.8,3.1 0.6,1 2.8,5.6 2.8,6.9 l -8.7,4.2 c -0.1,-2.5 -3,-9 -4,-10.6 z m -37.9,10.4 -9.1,-3 c 0.1,-1.2 2.4,-5.9 3,-7 1.2,-2.1 3,-4.2 4,-6 l 7.6,4.4 c -0.2,0.5 -2.6,4.3 -3,5.4 -0.8,1.7 -1.6,4.9 -2.4,6.2 z M 111.2,83.2 c 2.8,0.7 9.8,7.1 11.3,9.4 l -6.3,6.2 c -0.5,-1.8 -6,-6.9 -8.2,-7.4 l 3.2,-8.2 z M 78.1,93.4 C 79.7,91 88,83.8 91,83.1 L 94.9,91 c -2.6,0.6 -7.9,5 -9.2,6.9 l -7.6,-4.5 z M 92.6,82.4 c 2.6,-0.6 4.1,-1.8 7.8,-1.8 h 1.4 c 4,0 5.3,1.2 8.1,1.8 -0,1 -1.9,5.2 -2.3,6.3 -0.6,1.4 -0.4,2 -2.2,1.5 -1.1,-0.3 -2.4,-0.6 -3.6,-0.6 h -1 L 96.1,90.3 92.6,82.4 z M 66.5,119.8 H 60.4 c -0.4,0 -0.5,0.1 -0.5,0.5 v 0.2 c 0,0.4 0.1,0.5 0.5,0.5 h 79 c 0.3,0 0.7,-0.3 0.7,-0.5 0,-0.4 -0.3,-0.7 -0.7,-0.7 h -5.7 v -1.5 c 0,-10.1 -4.9,-20.4 -9.5,-25.9 C 119.8,87 111.6,79 102.2,79 h -2 c -9.7,0 -18.8,8.4 -23.6,13.7 -5,5.6 -10.1,16.6 -10.1,27.1 l 0,0 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 79,112 -9.3,-3.1 c -0,0.2 -0.6,2.2 -0.7,2.4 -0.2,0.6 -0.4,1.7 -0.5,2.4 -0.2,1.5 -0.5,3.8 -0.5,5.4 h 10.3 l -0.1,-2.2 0.8,-4.9 z m 15.5,5.4 h 11.4 v -0.8 c 0,-3.1 -2.4,-7.1 -5.6,-7.1 -3.3,0 -5.9,3.8 -5.9,7.2 v 0.7 z m 27.9,1.7 h 10 v -0.5 c 0,-2.3 -0.4,-3.8 -0.6,-5.6 -0.3,-2 -0.9,-3.5 -1,-5.2 l -9,4.2 0.7,7.1 z m -5.2,-19 c 1.1,1.6 4,8.1 4,10.6 l 8.7,-4.2 c 0,-1.2 -2.1,-5.8 -2.8,-6.8 -0.7,-1.1 -1.1,-2 -1.8,-3.1 -0.7,-1 -1.3,-1.8 -1.9,-2.8 l -6.2,6.2 z m -37.9,10.4 c 0.7,-1.4 1.6,-4.5 2.4,-6.2 0.5,-1.1 2.9,-4.9 3,-5.4 l -7.6,-4.4 c -1,1.8 -2.8,4 -4,6 -0.6,1.1 -2.9,5.8 -3,7 l 9.1,3 z m 28.8,-19.1 c 2.1,0.5 7.6,5.6 8.2,7.4 l 6.3,-6.1 c -1.5,-2.3 -8.5,-8.8 -11.3,-9.5 l -3.2,8.2 z m -30,2 7.6,4.6 C 87,96 92.3,91.6 94.9,91 l -3.8,-7.9 c -3.1,0.7 -11.4,7.9 -13,10.3 z M 92.6,82.4 l 3.5,7.9 4.6,-0.6 h 1 c 1.3,0 2.6,0.3 3.6,0.6 1.7,0.4 1.6,-0.1 2.2,-1.5 0.4,-1.1 2.3,-5.3 2.3,-6.3 -2.8,-0.6 -4,-1.9 -8.1,-1.9 h -1.4 c -3.6,0 -5.2,1.3 -7.7,1.9 z"}],i["GR.IN.IC.PUMPING STATION"]=[{type:"path",stroke:!1,d:"m 83.2,83.8 0,1.2 0,5.6 -11.3,0 0,-0 c -0.2,0 -0.3,0 -0.5,0 -0.1,6.6e-4 -0.1,-9.6e-4 -0.2,0 -2.7,0 -4.9,0.3 -6.5,1.7 -1.4,1.2 -2,3.3 -2.1,5.9 l -0.1,0 0,1.2 c 8e-6,0.1 -0,0.2 -0,0.3 l 0,0 0,14.1 -2.8,0 0,2.4 80.8,0 0,-2.4 -2.8,0 0,-14 0,-1.6 -0.1,0 c -0.1,-2.6 -0.5,-4.6 -1.8,-5.9 -1.5,-1.4 -3.8,-1.7 -6.8,-1.7 l 0,-0 -0.3,0 c -0.2,-5.6e-4 -0.3,-0 -0.4,-0 l 0,0 -11.3,0 0,-5.6 0,-1.2 -1.2,0 -31.2,0 -1.2,0 z m 2.4,2.4 28.8,0 0,27.2 -28.8,0 0,-27.2 z M 71.2,93 c 0.1,-0 0.1,0 0.2,0 l 11.8,0 0,8.4 -7.5,0 c -0.8,-0.1 -1.4,-0.1 -2,-0 -0,0 -0,0 -0.1,0 -0,0 -0,-0 -0,0 l 0,0 c -0.5,0.1 -1.2,0.3 -1.5,0.8 -0.4,0.5 -0.4,1.1 -0.4,1.6 -0,0.4 -0,0.8 0,1.2 l -0,0 0,8.8 -6.8,0 0,-14.5 c 0,-3 0.5,-4.5 1.4,-5.3 C 67.1,93.3 68.7,93.1 71.2,93 z m 45.6,0 11.8,0 c 0.1,9.7e-4 0.1,-0 0.2,0 2.8,0.1 4.5,0.4 5.2,1.1 0.8,0.7 1.2,2.3 1.2,5.2 l 0,14.5 -6.8,0 0,-8 0,0 c -0,-0.1 -0,-0.3 -0,-0.4 0,-0.9 0.2,-1.6 -0.1,-2.5 -0.1,-0.5 -0.6,-1.2 -1.2,-1.4 -0.2,-0.1 -0.5,-0 -0.7,-0 l 0,-0.1 -9.6,0 0,-8.4 z M 74,103.8 l 9.2,0 0,10 -9.2,0 0,-8.5 0,0 c 0,-0.6 -0,-1.1 -0,-1.4 0,-0.1 -0,-0 0,-0.1 z m 42.8,0 9.2,0 c 0,0.2 0,0.8 0,1.6 l -0,0 0,8.4 -9.2,0 0,-10 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 116.8,93 11.8,0 c 0.1,9.7e-4 0.1,-0 0.2,0 2.8,0.1 4.5,0.4 5.2,1.1 0.8,0.7 1.2,2.3 1.2,5.2 l 0,14.5 -6.8,0 0,-8 0,0 c -0,-0.1 -0,-0.3 -0,-0.4 0,-0.9 0.2,-1.6 -0.1,-2.5 -0.1,-0.5 -0.6,-1.2 -1.2,-1.4 -0.2,-0.1 -0.5,-0 -0.7,-0 l 0,-0.1 -9.6,0 0,-8.4 z m -45.6,0 c 0.1,-0 0.1,0 0.2,0 l 11.8,0 0,8.4 -7.5,0 c -0.8,-0.1 -1.4,-0.1 -2,-0 -0,0 -0,0 -0.1,0 -0,0 -0,-0 -0,0 l 0,0 c -0.5,0.1 -1.2,0.3 -1.5,0.8 -0.4,0.5 -0.4,1.1 -0.4,1.6 -0,0.4 -0,0.8 0,1.2 l -0,0 0,8.8 -6.8,0 0,-14.5 c 0,-3 0.5,-4.5 1.4,-5.3 C 67.1,93.3 68.7,93.1 71.2,93 z m 14.4,-6.8 28.8,0 0,27.2 -28.8,0 0,-27.2 z"}],i["GR.IN.IC.RESERVOIR"]=[{type:"path",stroke:!1,d:"M 127.3 69.1 C 127 69.1 126.7 69.2 126.4 69.2 C 123.4 69.5 120.8 71.9 118.4 74.5 C 115.9 77 113.5 79.7 111.5 80.9 C 108.9 82.4 105.5 82.5 101.9 82.6 C 98.3 82.7 94.7 82.9 91.8 84.9 C 89.7 86.5 88.6 88.5 87.5 90.3 C 86.4 92 85.2 93.4 82.7 94.2 C 79.4 95.3 72 96.4 66.9 98.8 C 64.3 100.1 62.1 101.7 61.5 104 C 60.8 106.3 61.7 109.1 64.7 112.3 L 65.1 111.9 L 65.1 120.1 L 84.3 120.1 L 84.3 129.7 L 86.7 129.7 L 86.7 120.1 L 97.9 120.1 L 97.9 129.7 L 100.3 129.7 L 100.3 120.1 L 117.1 120.1 L 117.1 112.5 C 117.4 112.2 117.7 111.9 118 111.5 C 119 110.1 119.3 108.5 119.5 106.9 C 119.8 103.7 119.5 100.5 121.7 97.7 C 123.1 95.9 126 95.4 129.1 94.7 C 132.1 94.1 135.4 93.3 137.2 90.4 C 139.4 86.7 139.1 81.3 137.2 76.8 C 136.3 74.5 134.9 72.5 133 71.1 C 131.4 69.9 129.5 69.1 127.3 69.1 z M 127.4 70.7 C 129.2 70.7 130.7 71.3 132.1 72.3 C 133.6 73.5 134.9 75.4 135.8 77.4 C 137.5 81.5 137.6 86.6 135.8 89.6 C 134.5 91.8 131.7 92.5 128.7 93.2 C 125.7 93.8 122.4 94.3 120.5 96.7 C 117.8 100 118.2 103.7 117.9 106.7 C 117.8 108.2 117.5 109.5 116.7 110.6 C 116.5 110.8 116.3 111.1 116.1 111.3 L 65.8 111.3 L 65.9 111.3 C 63.1 108.2 62.6 106.1 63 104.4 C 63.5 102.8 65.2 101.4 67.6 100.3 C 72.3 98 79.5 96.9 83.1 95.8 C 86.1 94.8 87.7 92.9 88.8 91.1 C 90 89.3 90.9 87.5 92.8 86.2 C 95.1 84.5 98.4 84.3 102 84.2 C 105.5 84.1 109.2 84.1 112.3 82.3 C 114.7 80.8 117.1 78.1 119.5 75.6 C 121.9 73.1 124.4 71 126.6 70.8 C 126.9 70.8 127.1 70.7 127.4 70.7 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"m 127.4,70.7 c 1.8,-0 3.3,0.6 4.7,1.6 1.5,1.2 2.8,3 3.7,5.1 1.7,4.1 1.9,9.2 0.1,12.2 -1.3,2.2 -4.1,3 -7.1,3.6 -3,0.6 -6.3,1.1 -8.3,3.5 -2.6,3.3 -2.3,7.1 -2.6,10 -0.1,1.5 -0.4,2.8 -1.2,3.8 -0.2,0.2 -0.4,0.5 -0.6,0.7 l -50.2,0 0,-0 c -2.8,-3 -3.3,-5.2 -2.8,-6.8 0.5,-1.6 2.1,-3 4.5,-4.2 4.8,-2.3 11.9,-3.4 15.6,-4.5 3,-1 4.5,-2.8 5.7,-4.6 1.2,-1.8 2.1,-3.6 3.9,-4.9 2.3,-1.7 5.7,-1.9 9.2,-2 3.5,-0.1 7.3,-0.1 10.3,-1.9 2.5,-1.4 4.8,-4.2 7.2,-6.7 2.4,-2.5 4.9,-4.6 7.1,-4.8 0.3,-0 0.5,-0.1 0.8,-0.1 z m -41.9,49 13.6,0 0,10 -13.6,0 z"}],i["GR.IN.IC.STORAGE TOWER"]=[{type:"path",stroke:!1,d:"m 118.3,121 0.4,5.3 0.7,12.8 h 2.9 c 0,-6.1 -1.1,-12.6 -1.1,-18.6 0,-3.4 -0.4,-6.2 -0.4,-9.6 -0.1,-5.3 0.2,-3 2.6,-6.6 l -0.3,-3.1 0,-1.1 h -4.2 V 84 c -2.5,0.6 -5.2,1.8 -8.3,2.6 -2.6,0.6 -6.4,1.4 -9.4,1.4 h -2.4 c -7.6,0 -12.2,-2.6 -18,-4 v 16.2 h -4.2 v 0.7 l -0.3,3.7 3.2,3.7 -2,30.8 h 3.1 v -3.3 l 1.4,-21.7 c 0.5,0.4 2.1,2.7 3,3.6 0.9,0.9 2.4,2.2 3.5,2.9 2.2,1.5 5.6,3.8 8.7,4.1 v 14.4 h 5.6 v -14.4 c 3.7,-0.9 6.2,-2.2 8.8,-4.3 1.4,-1.1 2.2,-1.8 3.4,-3 0.7,-0.7 2.5,-3.2 3,-3.4 v 3.1 l 0.2,3.8 z M 99.7,85.2 c 7.4,0 23,-4.4 25.7,-8.4 -2.8,-1.5 -25.1,-16 -25.3,-16 -0.4,0 -24.9,15.4 -25.5,16.2 2.6,3.5 16.6,8.2 23.3,8.2 h 1.8 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 97.9,85.2 c -4.3,0 -11.7,-2 -17,-4.3 l -0,3.2 c 5.8,1.4 10.4,4 18,4 h 2.4 c 3,0 6.9,-0.8 9.4,-1.4 3,-0.8 5.8,-2 8.3,-2.6 V 80.8 c -6,2.4 -14.4,4.4 -19.3,4.4 H 97.9 z"}],i["GR.IN.IC.SURFACE WATER INTAKE"]=[{type:"path",stroke:!1,d:"M 63.4 75.5 L 63.4 76.3 L 63.4 90.7 L 63.4 91.5 L 64.2 91.5 L 75.7 91.5 C 76.5 96.6 79.8 99.1 83.3 101 C 87.1 102.9 91.3 104.3 93.8 107.5 C 94.8 108.9 94.9 110.7 95.2 112.6 C 95.4 113.6 95.6 114.5 96.2 115.4 C 96.7 116.2 97.5 117 98.8 117.5 C 101.2 118.6 108.7 120.7 115.9 122.4 C 119.6 123.2 123.1 123.9 126 124.3 C 127.5 124.4 128.7 124.5 129.8 124.5 C 130.8 124.4 131.6 124.3 132.2 123.8 C 134.8 121.7 136.1 119.9 136.5 118.3 C 136.8 116.8 136.1 115.4 135 114.4 C 133.9 113.4 132.4 112.5 131 111.7 C 129.7 110.8 128.4 109.9 127.7 108.8 C 124.2 103.6 121 95.5 113.4 91.5 L 119 91.5 L 119.8 91.5 L 119.8 90.7 L 119.8 76.3 L 119.8 75.5 L 119 75.5 L 64.2 75.5 L 63.4 75.5 z M 65 77.1 L 118.2 77.1 L 118.2 89.9 L 109.4 89.9 L 109.4 81.1 L 73.8 81.1 L 73.8 89.9 L 65 89.9 L 65 77.1 z M 76.9 91.5 L 110.5 91.5 C 119.4 94.8 122.7 103.5 126.7 109.5 C 127.6 110.8 129 111.8 130.4 112.7 C 131.8 113.6 133.2 114.4 134.2 115.3 C 135.1 116.2 135.6 117 135.3 118.1 C 135.1 119.2 134 120.8 131.4 122.9 C 131.3 123 130.6 123.2 129.7 123.3 C 128.8 123.3 127.6 123.3 126.2 123.1 C 123.3 122.8 119.8 122.1 116.2 121.3 C 109 119.6 101.5 117.3 99.3 116.4 C 98.2 116 97.6 115.4 97.2 114.8 C 96.8 114.1 96.6 113.3 96.4 112.4 C 96.1 110.6 96 108.5 94.7 106.8 C 91.9 103.2 87.6 101.8 83.9 99.9 C 80.5 98.1 77.7 96.1 76.9 91.5 z "},{type:"path",stroke:!1,fill:!!R&&G,d:"m 76.9,91.5 33.6,0 c 8.9,3.3 12.2,12 16.2,18 0.9,1.3 2.3,2.3 3.7,3.2 1.4,0.9 2.8,1.7 3.8,2.6 0.9,0.9 1.4,1.7 1.2,2.8 -0.2,1.1 -1.3,2.7 -3.9,4.8 -0.2,0.1 -0.8,0.3 -1.7,0.4 -0.9,0 -2.2,-0 -3.6,-0.2 -2.8,-0.3 -6.4,-1 -10,-1.8 -7.2,-1.7 -14.7,-3.9 -16.9,-4.8 -1.1,-0.4 -1.6,-1 -2.1,-1.7 -0.4,-0.7 -0.6,-1.5 -0.8,-2.3 -0.3,-1.8 -0.4,-3.9 -1.7,-5.6 -2.8,-3.6 -7.1,-5 -10.8,-6.9 C 80.5,98.1 77.7,96.1 76.9,91.5 z m -11.9,-14.4 53.2,0 0,12.8 -8.8,0 0,-8.8 -35.6,0 0,8.8 -8.8,0 0,-12.8 z"}],i["GR.IN.IC.WAREHOUSE/STORAGE FACILITY"]=[{type:"text",stroke:!1,x:100,y:113,fontsize:23,text:"STOR"}],i["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]=[{type:"path",stroke:!1,d:"m 107.2,114.8 c 1.9,0 3.9,-1 4.3,-2.4 1.5,1 1.7,2.4 4.6,2.4 h 0.4 c 1.8,0 3.8,-1.1 4.1,-2.4 h 0.4 c 0.4,1.4 2.5,2.4 4.5,2.4 h 0.4 c 2.7,0 3,-1.5 4.5,-2.4 0.4,1.4 2.6,2.4 4.5,2.4 v -1.5 c -2.2,0 -3.5,-1.6 -3.9,-3.4 h -1.5 c -0,1.8 -1.7,3.4 -3.6,3.4 h -0.4 c -2.2,0 -3.6,-1.4 -3.8,-3.4 h -1.7 l -0.2,1.3 c -1,0.7 -1.1,2 -3.3,2 h -0.4 c -3.3,0 -3.2,-3.4 -4.1,-3.4 h -1.3 c -0.2,2 -1.4,3.4 -3.6,3.4 v 1.5 z m -2.2,-33.3 h 32 v 37 h -32 V 81.5 z M 65.1,114.8 v -1.5 c 2,0 3.7,-1.6 3.8,-3.4 h 1.9 c 0,1.8 1.5,3.4 3.4,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.9 c 0,2 1.7,3.4 3.8,3.4 h 0.2 c 2.2,0 3.2,-1.6 3.6,-3.4 h 1.7 c 0,2 1.7,3.4 3.8,3.4 v 1.5 c -2,0 -4.1,-1 -4.5,-2.4 -1.4,0.9 -1.7,2.5 -4.6,2.5 h -0.6 c -2.9,0 -3.1,-1.5 -4.5,-2.4 -0.4,1.3 -2.4,2.4 -4.1,2.4 H 74.1 c -2.4,0 -3.4,-1.2 -4.5,-2.4 -0.4,1.4 -2.6,2.4 -4.5,2.4 l 0,0 z M 96.5,93.4 h 6.7 v 13.3 H 96.5 V 93.4 z m -31.4,7.9 c 2,0 3.6,-1.5 3.8,-3.4 h 1.9 c 0.2,1.8 1.4,3.4 3.4,3.4 h 0.4 c 1.8,0 3.5,-1.7 3.6,-3.4 h 1.9 c 0,2 1.7,3.4 3.8,3.4 h 0.2 c 1.5,0 3.4,-1.5 3.4,-2.6 v -0.8 h 1.9 c 0,1.9 1.8,3.4 3.8,3.4 v 1.5 c -3.6,0 -3.8,-2 -4.9,-2.2 -0.4,1.3 -2.5,2.2 -4.2,2.2 h -0.6 c -1.7,0 -3.8,-1 -4.1,-2.2 -1,0.3 -1.4,2.2 -4.5,2.2 H 74.1 c -2.7,0 -3,-1.3 -4.5,-2.2 -1,1.4 -2.2,2.2 -4.5,2.2 v -1.5 l 0,0 z m 0,-12 c 2,0 3.6,-1.5 3.8,-3.4 h 1.9 c 0.1,1.8 1.4,3.4 3.4,3.4 h 0.4 c 1.8,0 3.5,-1.7 3.6,-3.4 h 1.9 c 0,2 1.7,3.4 3.8,3.4 h 0.2 c 1.5,0 3.4,-1.5 3.4,-2.6 v -0.8 h 1.9 c 0,1.9 1.8,3.4 3.8,3.4 v 1.5 c -3.1,0 -3,-1 -4.7,-2 -1.4,1 -1.7,2.1 -4.4,2.1 h -0.6 c -2.7,0 -2.9,-1.1 -4.3,-2 -1.6,1 -1.6,2 -4.5,2 H 73.9 c -2.4,0 -2.9,-1.2 -4.1,-2 -1.6,1 -1.7,2 -4.7,2 v -1.5 l 0,0 z m 31.4,21.3 h 6.7 v 10.1 h 35.6 V 79.4 L 103.3,79.2 V 89.5 H 96.5 V 79.4 L 61.2,79.2 v 41.6 h 35.4 v -10.1 z m 14.2,-12.2 c 0,1.4 -1.8,2.8 -3.6,2.8 v 1.5 c 3.4,0 3.5,-1.9 4.7,-2.2 0.4,1.3 2.7,2.2 4.5,2.2 h 0.2 c 2.9,0 3,-1.3 4.3,-2.2 1.2,0.9 1.7,2.2 4.3,2.2 h 0.8 c 2.6,0 3,-1.3 4.3,-2.2 1.4,1 1.5,2.2 4.6,2.2 v -1.5 c -1.7,0 -3.8,-1.6 -3.8,-2.8 v -0.6 h -1.7 c -0.1,1.8 -1.6,3.4 -3.6,3.4 h -0.6 c -1.4,0 -3.4,-1.4 -3.4,-2.4 v -0.9 h -1.9 c 0,1.7 -1.7,3.4 -3.5,3.4 h -0.4 c -1.9,0 -3.5,-1.5 -3.6,-3.4 h -1.8 v 0.6 z m 0,-12 c 0,1.4 -1.8,2.8 -3.6,2.8 v 1.5 c 1.8,0 4,-0.9 4.3,-2.2 1.6,1.1 1.7,2.2 4.9,2.2 h 0.4 c 2.6,0 2.9,-1.3 4.3,-2.2 0.3,1.3 2.4,2.3 4.1,2.3 h 0.8 c 2.7,0 3,-1.3 4.5,-2.2 0.4,1.3 2.7,2.2 4.5,2.2 v -1.5 c -1.7,0 -3.8,-1.6 -3.8,-2.8 v -0.6 h -1.7 c -0.1,1.8 -1.6,3.4 -3.6,3.4 h -0.6 c -1.6,0 -3.4,-1.4 -3.4,-2.8 v -0.6 h -1.9 c 0,1.7 -1.7,3.4 -3.5,3.4 h -0.4 c -1.9,0 -3.5,-1.5 -3.6,-3.4 h -1.8 v 0.5 z"},{type:"path",stroke:!1,fill:!!R&&G,d:"m 65.1,114.8 c 1.9,0 4.1,-1 4.5,-2.4 1.1,1.2 2.2,2.4 4.5,2.4 h 0.6 c 1.8,0 3.8,-1.1 4.1,-2.4 1.4,1 1.6,2.4 4.5,2.4 h 0.6 c 2.8,0 3.2,-1.6 4.5,-2.4 0.4,1.4 2.5,2.4 4.5,2.4 v -1.5 c -2.1,0 -3.7,-1.4 -3.8,-3.4 h -1.6 c -0.4,1.8 -1.4,3.4 -3.6,3.4 h -0.2 c -2.1,0 -3.7,-1.4 -3.8,-3.4 h -1.8 c -0,1.8 -1.7,3.4 -3.6,3.4 H 74.1 c -1.8,0 -3.3,-1.6 -3.4,-3.4 h -1.9 c -0,1.8 -1.8,3.4 -3.8,3.4 v 1.5 l 0,0 z m 0,-13.5 v 1.5 c 2.3,0 3.6,-0.9 4.5,-2.2 1.4,1 1.8,2.2 4.5,2.2 h 0.6 c 3.1,0 3.5,-2 4.5,-2.2 0.4,1.3 2.4,2.2 4.1,2.2 h 0.6 c 1.7,0 3.8,-1 4.1,-2.2 1.1,0.3 1.2,2.2 4.9,2.2 v -1.5 c -2,0 -3.8,-1.4 -3.8,-3.4 h -1.9 v 0.8 c 0,1.2 -1.9,2.6 -3.4,2.6 h -0.2 c -2,0 -3.7,-1.4 -3.8,-3.4 h -1.8 c -0,1.6 -1.7,3.4 -3.6,3.4 H 74.1 c -2,0 -3.2,-1.5 -3.4,-3.4 h -1.9 c -0.2,1.8 -1.7,3.4 -3.8,3.4 l 0,0 z m 0,-12 v 1.5 c 3,0 3.1,-1 4.7,-2 1.2,0.9 1.7,2 4.1,2 h 0.6 c 2.9,0 2.9,-1 4.5,-2 1.4,0.9 1.6,2 4.3,2 h 0.6 c 2.7,0 2.9,-1.1 4.3,-2 1.6,1.1 1.6,2 4.7,2 v -1.5 c -2,0 -3.8,-1.4 -3.8,-3.4 h -1.9 v 0.8 c 0,1.2 -1.9,2.6 -3.4,2.6 h -0.2 c -2,0 -3.7,-1.4 -3.8,-3.4 h -1.8 c -0,1.7 -1.7,3.4 -3.6,3.4 H 74.1 c -2,0 -3.2,-1.5 -3.4,-3.4 h -1.9 c -0.2,1.8 -1.7,3.4 -3.8,3.4 l 0,0 z m 42.1,25.4 v -1.5 c 2.2,0 3.4,-1.4 3.6,-3.4 h 1.3 c 1,0 0.8,3.4 4.1,3.4 h 0.4 c 2.2,0 2.4,-1.4 3.3,-2.1 l 0.2,-1.3 h 1.7 c 0.2,2 1.6,3.4 3.8,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.5 c 0.4,1.8 1.7,3.4 3.9,3.4 v 1.5 c -1.9,0 -4.1,-1 -4.5,-2.4 -1.5,1 -1.8,2.5 -4.5,2.5 h -0.4 c -2,0 -4.1,-1 -4.5,-2.4 h -0.4 c -0.4,1.3 -2.3,2.4 -4.1,2.4 h -0.4 c -2.9,0 -3.1,-1.4 -4.7,-2.4 -0.4,1.4 -2.4,2.4 -4.3,2.4 z m 3.6,-16.8 h 1.9 c 0,1.8 1.6,3.4 3.5,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.9 v 0.9 c 0,1 2,2.4 3.4,2.4 h 0.6 c 1.9,0 3.4,-1.6 3.6,-3.4 h 1.7 v 0.6 c 0,1.2 2,2.8 3.8,2.8 v 1.5 c -3.1,0 -3.2,-1.2 -4.7,-2.2 -1.3,0.9 -1.7,2.2 -4.4,2.2 h -0.7 c -2.6,0 -3,-1.3 -4.3,-2.2 -1.3,1 -1.4,2.2 -4.3,2.2 h -0.2 c -1.8,0 -4.2,-1 -4.5,-2.2 -1.2,0.3 -1.2,2.2 -4.7,2.2 v -1.5 c 1.8,0 3.6,-1.4 3.6,-2.8 v -0.6 l 0,0 z m 0,-12 h 1.9 c 0,1.9 1.6,3.4 3.5,3.4 h 0.4 c 1.8,0 3.5,-1.6 3.6,-3.4 h 1.9 v 0.6 c 0,1.4 1.8,2.8 3.4,2.8 h 0.6 c 1.9,0 3.4,-1.6 3.6,-3.4 h 1.7 v 0.6 c 0,1.2 2,2.8 3.8,2.8 v 1.5 c -1.8,0 -4.2,-1 -4.5,-2.2 -1.5,1 -1.8,2.2 -4.6,2.2 h -0.7 c -1.7,0 -3.8,-1 -4.1,-2.2 -1.4,0.9 -1.7,2.2 -4.3,2.2 h -0.4 c -3.1,0 -3.2,-1.2 -4.9,-2.2 -0.4,1.3 -2.5,2.2 -4.3,2.2 v -1.5 c 1.8,0 3.6,-1.4 3.6,-2.8 v -0.6 z m -5.8,32.6 h 32 V 81.5 h -32 v 37 z m -1.7,-11.8 0,-13.3 -6.8,0 0,13.3 z"}],i["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE.TRAFFIC CONTROL POINT"]=[{type:"path",stroke:!1,d:"m 85.5,81.3 0.5,0.7 13.7,18.2 0.3,0.5 0.3,-0.5 13.7,-18.2 0.5,-0.7 -0.9,0 -27.4,0 -0.9,0 z m 1.7,0.9 25.7,0 L 100,99.3 87.2,82.2 z M 106.7,50.7 c 0,0.2 -0,0.5 -0.1,0.7 -0.1,0.2 -0.2,0.4 -0.4,0.5 -0.2,0.2 -0.4,0.3 -0.7,0.4 -0.3,0.1 -0.6,0.1 -1,0.1 l -0.7,0 0,2.1 -0.7,0 0,-5.6 1.5,0 c 0.3,5e-6 0.6,0 0.9,0.1 0.2,0.1 0.4,0.1 0.6,0.3 0.2,0.1 0.4,0.3 0.5,0.5 0.1,0.2 0.2,0.5 0.2,0.8 m -0.8,0 c -1e-5,-0.2 -0,-0.4 -0.1,-0.5 -0.1,-0.1 -0.2,-0.3 -0.3,-0.3 -0.1,-0.1 -0.3,-0.1 -0.4,-0.2 -0.2,-0 -0.3,-0.1 -0.6,-0.1 l -0.7,0 0,2.2 0.6,0 c 0.3,3e-6 0.5,-0 0.7,-0.1 0.2,-0.1 0.3,-0.1 0.5,-0.3 0.1,-0.1 0.2,-0.2 0.2,-0.4 0.1,-0.1 0.1,-0.3 0.1,-0.4 m -3.9,3.5 c -0.1,0.1 -0.3,0.1 -0.4,0.2 -0.1,0.1 -0.3,0.1 -0.4,0.2 -0.2,0 -0.3,0.1 -0.5,0.1 -0.2,0 -0.4,0.1 -0.6,0.1 -0.4,0 -0.8,-0.1 -1.1,-0.2 -0.3,-0.1 -0.6,-0.3 -0.9,-0.5 -0.2,-0.2 -0.4,-0.5 -0.6,-0.9 -0.1,-0.4 -0.2,-0.8 -0.2,-1.3 0,-0.5 0.1,-0.9 0.2,-1.2 0.1,-0.4 0.3,-0.7 0.6,-0.9 0.2,-0.2 0.5,-0.4 0.9,-0.6 0.3,-0.1 0.7,-0.2 1.1,-0.2 0.3,6e-6 0.6,0 0.9,0.1 0.3,0.1 0.6,0.2 1,0.4 l 0,0.9 -0.1,0 c -0.3,-0.3 -0.6,-0.4 -0.9,-0.6 -0.3,-0.1 -0.6,-0.2 -1,-0.2 -0.3,5e-6 -0.5,0 -0.8,0.1 -0.2,0.1 -0.4,0.2 -0.6,0.4 -0.2,0.2 -0.3,0.4 -0.4,0.7 -0.1,0.3 -0.1,0.6 -0.1,1 -10e-7,0.4 0.1,0.7 0.2,1 0.1,0.3 0.2,0.5 0.4,0.7 0.2,0.2 0.4,0.3 0.6,0.4 0.2,0.1 0.5,0.1 0.7,0.1 0.4,10e-7 0.7,-0.1 1,-0.2 0.3,-0.1 0.6,-0.3 0.9,-0.6 l 0.1,0 0,0.9 m -5.1,-4.5 -2,0 0,4.9 -0.7,0 0,-4.9 -2,0 0,-0.7 4.7,0 0,0.7 M 85.9,44.6 l 0,0.4 0,36.5 0,0.4 0.4,0 27.4,0 0.4,0 0,-0.4 0,-36.5 0,-0.4 -0.4,0 -27.4,0 -0.4,0 z m 0.9,0.9 26.5,0 0,35.6 -26.5,0 0,-35.6 z"}],i["AC.M1.RIOT"]=l("RIOT"),i["AC.M1.THREAT"]=l("?"),i["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]=l("ECEP"),i["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]=l("EICC"),i["AC.M1.EMERGENCY OPERATIONS CENTER"]=l("EOC"),i["AC.M1.EMERGENCY SHELTER"]=l("ES"),i["AC.M1.EMERGENCY STAGING AREA"]=l("SA"),i["AC.M1.EMERGENCY"]=l("EMER"),i["AC.M1.COMMERCIAL"]=l("COM"),i["AC.M1.PRODUCTION"]=l("PROD"),i["AC.M1.RETAIL"]=l("RTL"),i["AC.M1.MILITARY ARMORY"]=l("RES"),i["AC.M1.GENERATION STATION"]=l("GEN"),i["GR.I.FF.CIVILIAN ROTARY WING"]=[{type:"path",stroke:o,d:"M80,70 l10,10 M120,110 l-10,-10 M80,110 l10,-10 M120,70 l-10,10 M100,115 l0,20 M95,135 l10,0",fill:!1},{type:"path",stroke:o,fill:!!R&&G,d:"m 113,90 c -0.3,8.8 -1.9,20.3 -10.8,24.6 -7.7,2 -12.3,-7.1 -13.8,-13.3 -2.6,-11.5 -2.3,-26 6.9,-34.6 6.0,-4.9 13.1,1.9 14.9,7.8 2,4.9 2.8,10.2 2.8,15.5 z"}],i["GR.IC.HOSPITAL SHIP"]=a("AH"),i["GR.IC.LAW ENFORCEMENT VESSEL"]=[{type:"path",fill:R?G:!C&&G,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},{type:"path",d:"m 135,100 -15,35 -10,0 15,-35 z"}],i["CY.IC.COMBAT MISSION TEAM"]=a("CMT"),i["CY.IC.NATIONAL MISSION TEAM"]=a("NMT"),i["CY.IC.CYBER PROTECTION TEAM"]=a("CPT"),i["CY.IC.NATION STATE CYBER THREAT ACTOR"]=a("CTA"),i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"]=a("CTA"),i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"].fill=R||N?G:!C&&G,i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"].stroke=o,i["CY.IC.NON NATION STATE CYBER THREAT ACTOR"].strokewidth=3,i)i.hasOwnProperty(L)&&(I.hasOwnProperty(L)&&console.warn("Override of: "+L),n.call(this,i[L],O),I[L]=i[L])}var h={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["S-G-------"]=[],I["S-G-U-----"]=[],I["S-G-UC----"]=[E["GR.IC.COMBAT"]],I["S-G-UCD---"]=[E["GR.IC.FF.AIR DEFENCE"]],I["S-G-UCDS--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE SHORT RANGE"]],I["S-G-UCDSC-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE CHAPARRAL"]],I["S-G-UCDSS-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE STINGER"]],I["S-G-UCDSV-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.FF.MAIN GUN SYSTEM"],E["GR.IC.AIR DEFENSE VULCAN"]],I["S-G-UCDM--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"]],I["S-G-UCDML-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.MISSILE.LIGHT"]],I["S-G-UCDMLA"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCDMM-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.MISSILE.MEDIUM"]],I["S-G-UCDMH-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.MISSILE.HEAVY"]],I["S-G-UCDH--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE H/MAD"]],I["S-G-UCDHH-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE H/MAD HAWK"]],I["S-G-UCDHP-"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE MISSILE"],E["GR.IC.AIR DEFENSE H/MAD PATRIOT"]],I["S-G-UCDG--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE GUN UNIT"]],I["S-G-UCDC--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE COMPOSITE"]],I["S-G-UCDT--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE TARGETING UNIT"]],I["S-G-UCDO--"]=[E["GR.IC.FF.AIR DEFENCE"],E["GR.IC.AIR DEFENSE THEATER MISSILE DEFENSE UNIT"]],I["S-G-UCA---"]=[E["GR.IC.ARMOUR"]],I["S-G-UCAT--"]=[E["GR.IC.ARMOUR"]],I["S-G-UCATA-"]=[E["GR.IC.ARMOUR"],E["GR.M2.AIRBORNE"]],I["S-G-UCATW-"]=[E["GR.IC.ARMOUR"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCATWR"]=[E["GR.IC.ARMOUR"],E["GR.IC.FF.AMPHIBIOUS"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCATL-"]=[E["GR.IC.ARMOUR"],E["GR.M2.LIGHT"]],I["S-G-UCATM-"]=[E["GR.IC.ARMOUR"],E["GR.M2.MEDIUM"]],I["S-G-UCATH-"]=[E["GR.IC.ARMOUR"],E["GR.M2.HEAVY"]],I["S-G-UCATR-"]=[E["GR.IC.ARMOUR"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCAW--"]=[E["GR.IC.ARMOR, WHEELED"]],I["S-G-UCAWS-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCAWA-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.AIRBORNE"]],I["S-G-UCAWW-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCAWWR"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.IC.FF.AMPHIBIOUS"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCAWL-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.LIGHT"]],I["S-G-UCAWM-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.MEDIUM"]],I["S-G-UCAWH-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.HEAVY"]],I["S-G-UCAWR-"]=[E["GR.IC.ARMOR, WHEELED"],E["GR.M2.RECOVERY (MAINTENANCE)"]],I["S-G-UCAA--"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"]],I["S-G-UCAAD-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"]],I["S-G-UCAAL-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.LIGHT"]],I["S-G-UCAAM-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.AIRBORNE"]],I["S-G-UCAAS-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCAAU-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.MOUNTAIN"]],I["S-G-UCAAC-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.M2.ARCTIC"]],I["S-G-UCAAA-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"]],I["S-G-UCAAAT"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"]],I["S-G-UCAAAW"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UCAAAS"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.ARMOUR"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCAAO-"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCAAOS"]=[E["GR.IC.FF.ANTITANK/ANTIARMOUR"],E["GR.IC.FF.MOTORIZED"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCV---"]=[E["GR.IC.AVIATION ROTARY WING"]],I["S-G-UCVF--"]=[E["GR.IC.AVIATION FIXED WING"]],I["S-G-UCVFU-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.UTILITY"]],I["S-G-UCVFA-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.ATTACK"]],I["S-G-UCVUTP"]=[E["GR.IC.AVIATION TACTICAL AIR CONTROL PARTY"]],I["S-G-UCVUFC"]=[E["GR.IC.AVIATION FORWARD AIR CONTROLLER"]],I["S-G-UCVFR-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.RECON"]],I["S-G-UCVR--"]=R?[E["GR.IC.AVIATION ROTARY WING"],E["GR.IC.AVIATION ROTARY WING 2525C"]]:[E["GR.IC.AVIATION ROTARY WING"]],I["S-G-UCVRA-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.ATTACK"]],I["S-G-UCVRS-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.RECON"]],I["S-G-UCVRW-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.ANTISUBMARINE WARFARE"]],I["S-G-UCVRU-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"]],I["S-G-UCVRUL"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"],E["GR.M2.LIGHT"]],I["S-G-UCVRUM"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"],E["GR.M2.MEDIUM"]],I["S-G-UCVRUH"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UTILITY"],E["GR.M2.HEAVY"]],I["S-G-UCVRUC"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.COMMAND AND CONTROL ROTARY WING"]],I["S-G-UCVRUE"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.MEDEVAC"]],I["S-G-UCVRM-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.MINE COUNTERMEASURE"]],I["S-G-UCVS--"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.PERSONNEL RECOVERY"]],I["S-G-UCVC--"]=[E["GR.IC.AVIATION COMPOSITE"]],I["S-G-UCVV--"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M2.VERTICAL OR SHORT TAKE-OFF AND LANDING "]],I["S-G-UCVU--"]=[E["GR.IC.UNMANNED SYSTEMS"]],I["S-G-UCVUF-"]=[E["GR.IC.AVIATION FIXED WING"],E["GR.M1.UNMANNED AERIAL VEHICLE"]],I["S-G-UCVUR-"]=[E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.UNMANNED AERIAL VEHICLE"]],I["S-G-UCI---"]=[E["GR.IC.FF.INFANTRY"]],I["S-G-UCIL--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.LIGHT"]],I["S-G-UCIM--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCIO--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.MOUNTAIN"]],I["S-G-UCIA--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.AIRBORNE"]],I["S-G-UCIS--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCIZ--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.ARMOUR"]],I["S-G-UCIN--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.FF.NAVAL"]],I["S-G-UCII--"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.ARMOUR"],E["GR.IC.FF.MAIN GUN SYSTEM"]],I["S-G-UCIC--"]=[E["GR.IC.FF.INFANTRY"],E["GR.M2.ARCTIC"]],I["S-G-UCE---"]=[E["GR.IC.ENGINEER"]],I["S-G-UCEC--"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"]],I["S-G-UCECS-"]=[E["GR.IC.ENGINEER"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCECA-"]=[E["GR.IC.ENGINEER"],E["GR.M2.AIRBORNE"]],I["S-G-UCECC-"]=[E["GR.IC.ENGINEER"],E["GR.M2.ARCTIC"]],I["S-G-UCECL-"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"],E["GR.M2.LIGHT"]],I["S-G-UCECM-"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"],E["GR.M2.MEDIUM"]],I["S-G-UCECH-"]=[E["GR.IC.ENGINEER"],E["GR.M1.COMBAT"],E["GR.M2.HEAVY"]],I["S-G-UCECT-"]=[s._scale(.7,E["GR.IC.ENGINEER"]),E["GR.IC.ARMOUR"]],I["S-G-UCECW-"]=[E["GR.IC.ENGINEER"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCECO-"]=[E["GR.IC.ENGINEER"],E["GR.M2.MOUNTAIN"]],I["S-G-UCECR-"]=[E["GR.IC.ENGINEER"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCEN--"]=[E["GR.IC.ENGINEER"],E["GR.M1.CONSTRUCTION"]],I["S-G-UCENN-"]=[E["GR.IC.ENGINEER"],E["GR.M1.NAVAL"]],I["S-G-UCF---"]=[E["GR.IC.FIELD ARTILLERY"]],I["S-G-UCFH--"]=[E["GR.IC.FIELD ARTILLERY"]],I["S-G-UCFHE-"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.IC.ARMOUR"]],I["S-G-UCFHS-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFHA-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.AIRBORNE"]],I["S-G-UCFHC-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.ARCTIC"]],I["S-G-UCFHO-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.MOUNTAIN"]],I["S-G-UCFHL-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.LIGHT"]],I["S-G-UCFHM-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.MEDIUM"]],I["S-G-UCFHH-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.HEAVY"]],I["S-G-UCFHX-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCFR--"]=[E["GR.IC.FF.FIELD ARTILLERY ROCKET"]],I["S-G-UCFRS-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.SINGLE ROCKET LAUNCHER"]],I["S-G-UCFRS-"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.M1.SINGLE ROCKET LAUNCHER"],R?[]:E["GR.IC.ARMOUR"]],I["S-G-UCFRSS"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.M1.SINGLE ROCKET LAUNCHER"],E["GR.IC.ARMOUR"]],I["S-G-UCFRSR"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.SINGLE ROCKET LAUNCHER"],E["GR.M2.TRUCK"]],I["S-G-UCFRST"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.SINGLE ROCKET LAUNCHER"],E["GR.M2.TOWED"]],I["S-G-UCFRM-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],R?"":E["GR.M2.CROSS-COUNTRY TRUCK"]],I["S-G-UCFRMS"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],E["GR.IC.ARMOUR"]],I["S-G-UCFRMR"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],E["GR.M2.TRUCK"]],I["S-G-UCFRMT"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.MULTIPLE ROCKET LAUNCHER"],E["GR.M2.TOWED"]],I["S-G-UCFT--"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M2.TARGET ACQUISITION"]],I["S-G-UCFTR-"]=[s._translate(-30,10,s._scale(.6,E["GR.IC.FIELD ARTILLERY"])),E["GR.IC.RADAR"]],I["S-G-UCFTS-"]=[s._translate(0,30,s._scale(.7,E["GR.IC.FIELD ARTILLERY"])),E["GR.IC.FF.SOUND"]],I["S-G-UCFTF-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.M1.OPTICAL"],E["GR.M2.TARGET ACQUISITION"]],I["S-G-UCFTC-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.MOTORIZED"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCFTCD"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCFTCM"]=[s._scale(.8,E["GR.IC.FIELD ARTILLERY"]),E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"]],I["S-G-UCFTA-"]=[E["GR.IC.FIELD ARTILLERY"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.AVIATION ROTARY WING"],E["GR.M1.NAVAL"]],I["S-G-UCFM--"]=[E["GR.IC.MORTAR"]],I["S-G-UCFMS-"]=[E["GR.IC.MORTAR"],E["GR.M2.TRACKED"]],I["S-G-UCFMW-"]=I["S-G-UCFMSW"]=[E["GR.IC.MORTAR"],E["GR.M2.TRUCK"]],I["S-G-UCFMT-"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"]],I["S-G-UCFMTA"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"],E["GR.M2.AIRBORNE"]],I["S-G-UCFMTS"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFMTC"]=[E["GR.IC.MORTAR"],E["GR.M2.ARCTIC"]],I["S-G-UCFMTO"]=[E["GR.IC.MORTAR"],E["GR.M2.TOWED"],E["GR.M2.MOUNTAIN"]],I["S-G-UCFML-"]=[s._translate(0,-20,E["GR.IC.MORTAR"]),E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCFS--"]=[E["GR.IC.SURVEY"]],I["S-G-UCFSS-"]=[E["GR.IC.SURVEY"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFSA-"]=[E["GR.IC.SURVEY"],E["GR.M2.AIRBORNE"]],I["S-G-UCFSL-"]=[E["GR.IC.SURVEY"],E["GR.M2.LIGHT"]],I["S-G-UCFSO-"]=[E["GR.IC.SURVEY"],E["GR.M2.MOUNTAIN"]],I["S-G-UCFO--"]=[E["GR.IC.METEOROLOGICAL"]],I["S-G-UCFOS-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCFOA-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M2.AIRBORNE"]],I["S-G-UCFOL-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M2.LIGHT"]],I["S-G-UCFOO-"]=[E["GR.IC.METEOROLOGICAL"],E["GR.M2.MOUNTAIN"]],I["S-G-UCR---"]=[E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCRH--"]=[E["GR.IC.FF.HORSE"]],I["S-G-UCRV--"]=[E["GR.IC.FF.RECONNAISSANCE"],R?E["GR.M2.CAVALRY"]:[]],I["S-G-UCRVA-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"]],I["S-G-UCRVM-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCRVG-"]=[E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UCRVO-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.AVIATION ROTARY WING"]],I["S-G-UCRC--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.ARCTIC"]],I["S-G-UCRS--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M1.AIRMOBILE/AIR ASSAULT"]],I["S-G-UCRA--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.AIRBORNE"]],I["S-G-UCRO--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.MOUNTAIN"]],I["S-G-UCRL--"]=I["S-G-UCRLL-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.M2.LIGHT"]],I["S-G-UCRR--"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCRRD-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.AMPHIBIOUS"],R?E["GR.M1.MARINE DIVISION"]:[]],I["S-G-UCRRF-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.FF.AMPHIBIOUS"],E["GR.M1.FORCE"]],I["S-G-UCRRL-"]=[E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UCRX--"]=[E["GR.IC.FF.RECONNAISSANCE"],R?E["GR.M2.LONG RANGE SURVEILLANCE"]:[s._translate(0,-20,E["GR.M2.MOUNTAIN"]),E["GR.M2.LONG RANGE"]]],I["S-G-UCM---"]=[E["GR.IC.MISSILE"]],I["S-G-UCMT--"]=[E["GR.IC.MISSILE"],E["GR.M2.TACTICAL MISSILE"]],I["S-G-UCMS--"]=[E["GR.IC.MISSILE"],E["GR.M2.STRATEGIC MISSILE"]],I["S-G-UCS---"]=[E["GR.IC.SECURITY"]],I["S-G-UCSW--"]=[s._translate(0,-20,E["GR.IC.SECURITY"]),E["GR.IC.FF.AMPHIBIOUS"]],I["S-G-UCSG--"]=[E["GR.IC.SECURITY"]],I["S-G-UCSGD-"]=[E["GR.IC.SECURITY"],E["GR.IC.FF.INFANTRY"]],I["S-G-UCSGM-"]=[E["GR.IC.SECURITY"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UCSGA-"]=[E["GR.IC.SECURITY"],E["GR.IC.ARMOUR"]],I["S-G-UCSM--"]=[E["GR.IC.SECURITY"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UCSR--"]=[E["GR.IC.SECURITY"],E["GR.M2.RAILROAD"]],I["S-G-UCSA--"]=[s._translate(0,-20,E["GR.IC.SECURITY"]),E["GR.IC.AVIATION ROTARY WING"]],I["S-G-F-S---"]=E["GR.IC.SURVEILLANCE"],I["S-G-UU----"]=[E["GR.IC.COMBAT SUPPORT"]],I["S-G-UUA---"]=[E["GR.IC.CBRN"]],I["S-G-UUAC--"]=[E["GR.IC.CBRN"],E["GR.M1.CHEMICAL"]],I["S-G-UUACC-"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE/DECON"]],I["S-G-UUACCK"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE/DECON"],E["GR.IC.ARMOUR"]],I["S-G-UUACCM"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE/DECON"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UUACS-"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE"]],I["S-G-UUACSM"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE"],E["GR.IC.FF.MOTORIZED"]],I["S-G-UUACSA"]=[E["GR.IC.CBRN"],E["GR.M1.SMOKE"],E["GR.IC.ARMOUR"]],I["S-G-UUACR-"]=[E["GR.IC.CBRN"],E["GR.M1.CHEMICAL"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UUACRW"]=[E["GR.IC.CBRN"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UUACRS"]=[E["GR.IC.CBRN"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"],R?E["GR.M1.CHEMICAL SURVEILLANCE"]:[]],I["S-G-UUAN--"]=[E["GR.IC.CBRN"],E["GR.M1.NUCLEAR"]],I["S-G-UUAB--"]=[E["GR.IC.CBRN"],E["GR.M1.BIOLOGICAL"]],I["S-G-UUABR-"]=[E["GR.IC.CBRN"],E["GR.M1.BIOLOGICAL"],E["GR.IC.FF.MOTORIZED"],E["GR.IC.FF.RECONNAISSANCE"]],I["S-G-UUAD--"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"]],I["S-G-UUADT-"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"],E["GR.M2.TROOP"]],I["S-G-UUADE-"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"],E["GR.M2.EQUIPMENT"]],I["S-G-UUADET"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"],E["GR.M2.EQUIMENT/TROOP"]],I["S-G-UUAL--"]=[E["GR.IC.CBRN"],E["GR.M2.LABORATORY"]],I["S-G-UUM---"]=[E["GR.IC.MILITARY INTELLIGENCE"]],I["S-G-UUMA--"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.UNMANNED AERIAL VEHICLE"]],I["S-G-UUMS--"]=[s._translate(-25,0,E["GR.IC.MILITARY INTELLIGENCE"]),E["GR.IC.RADIO"]],I["S-G-UUMSE-"]=[E["GR.IC.ELECTRONIC WARFARE"]],I["S-G-UUMSEA"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.RECONNAISSANCE"],E["GR.IC.ARMOUR"],E["GR.M2.WHEELED"]],I["S-G-UUMSED"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.DIRECTION FINDING"]],I["S-G-UUMSEI"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.INTERCEPT"]],I["S-G-UUMSEJ"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.JAMMING"]],I["S-G-UUMSET"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-UUMSEC"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-UUMC--"]=[E["GR.IC.COUNTER-INTELLIGENCE"]],I["S-G-UUMR--"]=[E["GR.IC.MILITARY INTELLIGENCE"]],I["S-G-UUMRG-"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.RADAR"]],I["S-G-UUMRS-"]=[s._translate(0,30,s._scale(.8,E["GR.IC.MILITARY INTELLIGENCE"])),E["GR.IC.FF.SENSOR"]],I["S-G-UUMRSS"]=[s._translate(0,30,s._scale(.8,E["GR.IC.MILITARY INTELLIGENCE"])),E["GR.IC.FF.SENSOR"],E["GR.M1.SENSOR CONTROL MODULE"]],I["S-G-UUMRX-"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.GROUND STATION MODULE"]],I["S-G-UUMMO-"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.METEOROLOGICAL"]],I["S-G-UUMO--"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.OPERATIONS"]],I["S-G-UUMT--"]=[E["GR.IC.MILITARY INTELLIGENCE"],E["GR.M1.TACTICAL EXPLOITATION"]],I["S-G-UUMQ--"]=[E["GR.IC.INTERROGATION"]],I["S-G-UUMJ--"]=[E["GR.IC.JOINT INTELLIGENCE CENTRE"]],I["S-G-UUL---"]=[E["GR.IC.FF.MILITARY POLICE"],E["GR.IC.MILITARY POLICE"]],I["S-G-UULS--"]=[E["GR.IC.SHORE PATROL"]],I["S-G-UULM--"]=[E["GR.IC.MILITARY POLICE"]],I["S-G-UULC--"]=[E["GR.IC.LAW ENFORCEMENT"]],I["S-G-UULF--"]=[s._translate(0,-25,s._scale(.8,E["GR.IC.SHORE PATROL"])),E["GR.IC.AVIATION FIXED WING"]],I["S-G-UULD--"]=[E["GR.IC.CRIMINAL INVESTIGATION DIVISION"]],I["S-G-UUS---"]=[E["GR.IC.FF.SIGNAL"]],I["S-G-UUSA--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.AREA"]],I["S-G-UUSC--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.COMMUNICATIONS CONTINGENCY PACKAGE"]],I["S-G-UUSCL-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.LARGE COMMUNICATIONS CONTINGENCY PACKAGE"],E["GR.M2.AIRBORNE"]],I["S-G-UUSO--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.OPERATIONS"]],I["S-G-UUSF--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.FORWARD"]],I["S-G-UUSM--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.MOBILE SUBSCRIBER EQUIPMENT"]],I["S-G-UUSMS-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.SMALL EXTENSION NODE"]],I["S-G-UUSML-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.LARGE EXTENSION NODE"]],I["S-G-UUSMN-"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.NODE CENTRE"]],I["S-G-UUSR--"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.RADIO"]],I["S-G-UUSRS-"]=[E["GR.IC.FF.SIGNAL"],E["GR.I.FF.SATELLITE"]],I["S-G-UUSRT-"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.RADIO TELETYPE CENTRE"]],I["S-G-UUSRW-"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.RADIO RELAY"]],I["S-G-UUSS--"]=[E["GR.IC.FF.SIGNAL"],E["GR.M1.SIGNAL SUPPORT"]],I["S-G-UUSW--"]=[E["GR.IC.FF.SIGNAL"],E["GR.IC.TELEPHONE SWITCH"]],I["S-G-UUSX--"]=[E["GR.IC.ELECTRONIC RANGING"]],I["S-G-UUI---"]=[E["GR.IC.INFORMATION OPERATIONS"]],I["S-G-UUP---"]=I["S-G-UUX---"]=[E["GR.IC.FF.AMPHIBIOUS"],E["GR.M1.LANDING SUPPORT"]],I["S-G-UUE---"]=[E["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]],I["S-G-UUT---"]=[E["GR.IC.TOPOGRAPHIC"]],I["S-G-UUD---"]=[E["GR.IC.DRILLING"]],I["S-G-US----"]=[E["GR.IC.COMBAT SERVICE SUPPORT"]],I["S-G-USA---"]=[E["GR.IC.ADMINISTRATIVE"]],I["S-G-USAT--"]=[E["GR.IC.ADMINISTRATIVE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAC--"]=[E["GR.IC.ADMINISTRATIVE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAJ--"]=[E["GR.IC.JUDGE ADVOCATE GENERAL"]],I["S-G-USAJT-"]=[E["GR.IC.JUDGE ADVOCATE GENERAL"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAJC-"]=[E["GR.IC.JUDGE ADVOCATE GENERAL"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAO--"]=[E["GR.IC.POSTAL"]],I["S-G-USAOT-"]=[E["GR.IC.POSTAL"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAOC-"]=[E["GR.IC.POSTAL"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAF--"]=[E["GR.IC.FINANCE"]],I["S-G-USAFT-"]=[E["GR.IC.FINANCE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAFC-"]=[E["GR.IC.FINANCE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAS--"]=[E["GR.IC.PERSONNEL SERVICES"]],I["S-G-USAST-"]=[E["GR.IC.PERSONNEL SERVICES"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USASC-"]=[E["GR.IC.PERSONNEL SERVICES"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAM--"]=[E["GR.IC.MORTUARY AFFAIRS"]],I["S-G-USAMT-"]=[E["GR.IC.MORTUARY AFFAIRS"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAMC-"]=[E["GR.IC.MORTUARY AFFAIRS"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAR--"]=[E["GR.IC.RELIGIOUS SUPPORT"]],I["S-G-USART-"]=[E["GR.IC.RELIGIOUS SUPPORT"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USARC-"]=[E["GR.IC.RELIGIOUS SUPPORT"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAP--"]=[E["GR.IC.PUBLIC AFFAIRS"]],I["S-G-USAPT-"]=[E["GR.IC.PUBLIC AFFAIRS"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAPC-"]=[E["GR.IC.PUBLIC AFFAIRS"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAPB-"]=[E["GR.IC.PUBLIC AFFAIRS BROADCAST"]],I["S-G-USAPBT"]=[E["GR.IC.PUBLIC AFFAIRS BROADCAST"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAPBC"]=[E["GR.IC.PUBLIC AFFAIRS BROADCAST"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAPM-"]=[E["GR.IC.JOINT INFORMATION BUREAU"]],I["S-G-USAPMT"]=[E["GR.IC.JOINT INFORMATION BUREAU"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAPMC"]=[E["GR.IC.JOINT INFORMATION BUREAU"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAX--"]=[E["GR.IC.REPLACEMENT HOLDING UNIT"]],I["S-G-USAXT-"]=[E["GR.IC.REPLACEMENT HOLDING UNIT"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAXC-"]=[E["GR.IC.REPLACEMENT HOLDING UNIT"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAL--"]=[E["GR.IC.LABOUR"]],I["S-G-USALT-"]=[E["GR.IC.LABOUR"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USALC-"]=[E["GR.IC.LABOUR"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAW--"]=[E["GR.IC.MORALE, WELFARE, AND RECREATION"]],I["S-G-USAWT-"]=[E["GR.IC.MORALE, WELFARE, AND RECREATION"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAWC-"]=[E["GR.IC.MORALE, WELFARE, AND RECREATION"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USAQ--"]=[E["GR.IC.QUARTERMASTER"]],I["S-G-USAQT-"]=[E["GR.IC.QUARTERMASTER"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USAQC-"]=[E["GR.IC.QUARTERMASTER"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USM---"]=[E["GR.IC.FF.MEDICAL"]],I["S-G-USMT--"]=[E["GR.IC.FF.MEDICAL THEATER"]],I["S-G-USMC--"]=[E["GR.IC.FF.MEDICAL CORPS"]],I["S-G-USMM--"]=[E["GR.IC.FF.MEDICAL"],E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-USMMT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-USMMC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-USMV--"]=[E["GR.IC.FF.MEDICAL"],E["GR.M2.VETERINARY"]],I["S-G-USMVT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.M2.VETERINARY"]],I["S-G-USMVC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.M2.VETERINARY"]],I["S-G-USMD--"]=[E["GR.IC.FF.MEDICAL"],E["GR.M2.DENTAL"]],I["S-G-USMDT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.M2.DENTAL"]],I["S-G-USMDC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.M2.DENTAL"]],I["S-G-USMP--"]=[E["GR.IC.FF.MEDICAL"],E["GR.M2.PSYCHOLOGICAL"]],I["S-G-USMPT-"]=[E["GR.IC.FF.MEDICAL THEATER"],E["GR.M2.PSYCHOLOGICAL"]],I["S-G-USMPC-"]=[E["GR.IC.FF.MEDICAL CORPS"],E["GR.M2.PSYCHOLOGICAL"]],I["S-G-USS---"]=[E["GR.IC.FF.SUPPLY"]],I["S-G-USST--"]=[E["GR.IC.FF.SUPPLY THEATER"]],I["S-G-USSC--"]=[E["GR.IC.FF.SUPPLY CORPS"]],I["S-G-USS1--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS I"]],I["S-G-USS1T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS I"]],I["S-G-USS1C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS I"]],I["S-G-USS2--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS II"]],I["S-G-USS2T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS II"]],I["S-G-USS2C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS II"]],I["S-G-USS3--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS III"]],I["S-G-USS3T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS III"]],I["S-G-USS3C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS III"]],I["S-G-USS3A-"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS III"],s._translate(25,5,s._scale(.5,E["GR.IC.AVIATION ROTARY WING"]))],I["S-G-USS3AT"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS III"],s._translate(25,5,s._scale(.5,E["GR.IC.AVIATION ROTARY WING"]))],I["S-G-USS3AC"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS III"],s._translate(25,5,s._scale(.5,E["GR.IC.AVIATION ROTARY WING"]))],I["S-G-USS4--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS IV"]],I["S-G-USS4T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS IV"]],I["S-G-USS4C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS IV"]],I["S-G-USS5--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS V"]],I["S-G-USS5T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS V"]],I["S-G-USS5C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS V"]],I["S-G-USS6--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS VI"]],I["S-G-USS6T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS VI"]],I["S-G-USS6C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS VI"]],I["S-G-USS7--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS VII"]],I["S-G-USS7T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS VII"]],I["S-G-USS7C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS VII"]],I["S-G-USS8--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS VIII"]],I["S-G-USS8T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS VIII"]],I["S-G-USS8C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS VIII"]],I["S-G-USS9--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS IX"]],I["S-G-USS9T-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS IX"]],I["S-G-USS9C-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS IX"]],I["S-G-USSX--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.CLASS X"]],I["S-G-USSXT-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.FF.CLASS X"]],I["S-G-USSXC-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.FF.CLASS X"]],I["S-G-USSL--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.LAUNDRY/BATH"]],I["S-G-USSLT-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.LAUNDRY/BATH"]],I["S-G-USSLC-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.LAUNDRY/BATH"]],I["S-G-USSW--"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.WATER"]],I["S-G-USSWT-"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.WATER"]],I["S-G-USSWC-"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.WATER"]],I["S-G-USSWP-"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.WATER PURIFICATION"]],I["S-G-USSWPT"]=[E["GR.IC.FF.SUPPLY THEATER"],E["GR.IC.WATER PURIFICATION"]],I["S-G-USSWPC"]=[E["GR.IC.FF.SUPPLY CORPS"],E["GR.IC.WATER PURIFICATION"]],I["S-G-UST---"]=[E["GR.IC.TRANSPORTATION"]],I["S-G-USTT--"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"]],I["S-G-USTC--"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"]],I["S-G-USTM--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.MOVEMENT CONTROL CENTRE"]],I["S-G-USTMT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MOVEMENT CONTROL CENTRE"]],I["S-G-USTMC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MOVEMENT CONTROL CENTRE"]],I["S-G-USTR--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.RAILROAD"]],I["S-G-USTRT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.RAILROAD"]],I["S-G-USTRC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.RAILROAD"]],I["S-G-USTS--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.NAVAL"]],I["S-G-USTST-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.NAVAL"]],I["S-G-USTSC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.NAVAL"]],I["S-G-USTA--"]=[E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-USTAT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-USTAC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-USTI--"]=[E["GR.IC.TRANSPORTATION"],E["GR.M1.MISSILE"]],I["S-G-USTIT-"]=[E["GR.IC.FF.THEATRE SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MISSILE"]],I["S-G-USTIC-"]=[E["GR.IC.FF.CORPS SUPPORT"],E["GR.IC.TRANSPORTATION"],E["GR.M1.MISSILE"]],I["S-G-USX---"]=[E["GR.IC.MAINTENANCE"]],I["S-G-USXT--"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"]],I["S-G-USXC--"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"]],I["S-G-USXH--"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.HEAVY"]],I["S-G-USXHT-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M2.HEAVY"]],I["S-G-USXHC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M2.HEAVY"]],I["S-G-USXR--"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.RAILROAD"]],I["S-G-USXRT-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M2.RAILROAD"]],I["S-G-USXRC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M2.RAILROAD"]],I["S-G-USXO--"]=[E["GR.IC.MAINTENANCE"],E["GR.M1.AMMUNITION"]],I["S-G-USXOT-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M1.AMMUNITION"]],I["S-G-USXOC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M1.AMMUNITION"]],I["S-G-USXOM-"]=[E["GR.IC.MAINTENANCE"],E["GR.M1.MISSILE"]],I["S-G-USXOMT"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M1.MISSILE"]],I["S-G-USXOMC"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M1.MISSILE"]],I["S-G-USXE--"]=[E["GR.IC.MAINTENANCE"],E["GR.M1.ELECTRO-OPTICAL"]],I["S-G-USXET-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.THEATRE SUPPORT"],E["GR.M1.ELECTRO-OPTICAL"]],I["S-G-USXEC-"]=[E["GR.IC.MAINTENANCE"],E["GR.IC.FF.CORPS SUPPORT"],E["GR.M1.ELECTRO-OPTICAL"]],I["S-G-USXBDR"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.BATTLE DAMAGE REPAIR"]],I["S-G-USXPM-"]=[E["GR.IC.MAINTENANCE"],E["GR.M2.PREVENTIVE MAINTENANCE"]],I["S-G-USXP--"]=[E["GR.IC.PIPELINE"]],I["S-G-USXEP-"]=[E["GR.IC.ENVIRONMENTAL PROTECTION"]],I["S-G-UH----"]=[],I["S-G-UH1---"]=[E["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]],I["S-G-UH2---"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]],I["S-G-UHGL--"]=I["S-G-GL----"]=[E["GR.IC.LIAISON"]]}},x={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["S-G-E-----"]=[],I["S-G-EW----"]=[],I["S-G-EWM---"]=[E["GR.EQ.MISSILE LAUNCHER"]],I["S-G-EWMA--"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]],I["S-G-EWMAS-"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWMASR"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.SHORT RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMASE"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.SHORT RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMAI-"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWMAIR"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.INTERMEDIATE RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMAIE"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.INTERMEDIATE RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMAL-"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.LONG RANGE"]],I["S-G-EWMALR"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.LONG RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMALE"]=[E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],E["GR.EQ.LONG RANGE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMAT-"]=[s._translate(0,-15,s._scale(.7,E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])),E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"]],I["S-G-EWMATR"]=[s._translate(0,-15,s._scale(.7,E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])),E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I["S-G-EWMATE"]=[s._translate(0,-15,s._scale(.7,E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"])),E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR THEATRE"],E["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I["S-G-EWMS--"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]],I["S-G-EWMSS-"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWMSI-"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWMSL-"]=[E["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWMT--"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"]],I["S-G-EWMTL-"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWMTM-"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWMTH-"]=[E["GR.EQ.ANTITANK MISSILE LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWS---"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"]],I["S-G-EWSL--"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWSM--"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWSH--"]=[E["GR.EQ.SINGLE ROCKET LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWX---"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"]],I["S-G-EWXL--"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,E["GR.EQ.SHORT RANGE"])],I["S-G-EWXM--"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,E["GR.EQ.INTERMEDIATE RANGE"])],I["S-G-EWXH--"]=[E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,E["GR.EQ.LONG RANGE"])],I["S-G-EWT---"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"]],I["S-G-EWTL--"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWTM--"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWTH--"]=[E["GR.EQ.ANTITANK ROCKET LAUNCHER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWR---"]=[E["GR.EQ.RIFLE"]],I["S-G-EWRR--"]=[E["GR.EQ.RIFLE"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWRL--"]=[E["GR.EQ.RIFLE"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWRH--"]=[E["GR.EQ.RIFLE"],E["GR.EQ.LONG RANGE"]],I["S-G-EWZ---"]=[E["GR.EQ.GRENADE LAUNCHER"]],I["S-G-EWZL--"]=[E["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,E["GR.EQ.SHORT RANGE"])],I["S-G-EWZM--"]=[E["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,E["GR.EQ.INTERMEDIATE RANGE"])],I["S-G-EWZH--"]=[E["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,E["GR.EQ.LONG RANGE"])],I["S-G-EWO---"]=[E["GR.EQ.MORTAR"]],I["S-G-EWOL--"]=[E["GR.EQ.MORTAR"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWOM--"]=[E["GR.EQ.MORTAR"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWOH--"]=[E["GR.EQ.MORTAR"],E["GR.EQ.LONG RANGE"]],I["S-G-EWH---"]=[E["GR.EQ.HOWITZER"]],I["S-G-EWHL--"]=[E["GR.EQ.HOWITZER"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWHLS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.HOWITZER"],E["GR.EQ.SHORT RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWHM--"]=[E["GR.EQ.HOWITZER"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWHMS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.HOWITZER"],E["GR.EQ.INTERMEDIATE RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWHH--"]=[E["GR.EQ.HOWITZER"],E["GR.EQ.LONG RANGE"]],I["S-G-EWHHS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.HOWITZER"],E["GR.EQ.LONG RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWG---"]=[E["GR.EQ.ANTITANK GUN"]],I["S-G-EWGL--"]=[E["GR.EQ.ANTITANK GUN"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWGM--"]=[E["GR.EQ.ANTITANK GUN"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWGH--"]=[E["GR.EQ.ANTITANK GUN"],E["GR.EQ.LONG RANGE"]],I["S-G-EWGR--"]=[E["GR.EQ.RECOILLESS GUN"]],I["S-G-EWD---"]=[E["GR.EQ.DIRECT FIRE GUN"]],I["S-G-EWDL--"]=[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWDLS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.SHORT RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWDM--"]=[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWDMS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.INTERMEDIATE RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWDH--"]=[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.LONG RANGE"]],I["S-G-EWDHS-"]=[s._translate(0,-15,s._scale(.8,[E["GR.EQ.DIRECT FIRE GUN"],E["GR.EQ.LONG RANGE"]])),E["GR.EQ.HOWITZER TRACKED"]],I["S-G-EWA---"]=[E["GR.EQ.AIR DEFENCE GUN"]],I["S-G-EWAL--"]=[E["GR.EQ.AIR DEFENCE GUN"],E["GR.EQ.SHORT RANGE"]],I["S-G-EWAM--"]=[E["GR.EQ.AIR DEFENCE GUN"],E["GR.EQ.INTERMEDIATE RANGE"]],I["S-G-EWAH--"]=[E["GR.EQ.AIR DEFENCE GUN"],E["GR.EQ.LONG RANGE"]],I["S-G-EV----"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"]],I["S-G-EVA---"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.ARMOURED VEHICLE"]],I["S-G-EVAT--"]=[E["GR.EQ.TANK"]],I["S-G-EVATL-"]=[E["GR.EQ.TANK"],E["GR.EQ.LIGHT TANK"]],I["S-G-EVATLR"]=I["S-G-EVATW-"]=[E["GR.EQ.TANK"],E["GR.EQ.LIGHT TANK"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVATM-"]=[E["GR.EQ.TANK"],E["GR.EQ.MEDIUM TANK"]],I["S-G-EVATMR"]=I["S-G-EVATX-"]=[E["GR.EQ.TANK"],E["GR.EQ.MEDIUM TANK"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVATH-"]=[E["GR.EQ.TANK"],E["GR.EQ.HEAVY TANK"]],I["S-G-EVATHR"]=I["S-G-EVATY-"]=[E["GR.EQ.TANK"],E["GR.EQ.HEAVY TANK"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVAA--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"]],I["S-G-EVAAR-"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.TANK RECOVERY VEHICLE"]],I["S-G-EVAI--"]=[E["GR.EQ.ARMOURED FIGHTING VEHICLE"]],I["S-G-EVAC--"]=[E["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]],I["S-G-EVAS--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER COMBAT SERVICE SUPPORT VEHICLE"]],I["S-G-EVAL--"]=[E["GR.EQ.ARMOURED FIGHTING VEHICLE"],E["GR.EQ.CROSS-COUNTRY"]],I["S-G-EVU---"]=[E["GR.EQ.UTILITY VEHICLE"]],I["S-G-EVUB--"]=[E["GR.EQ.BUS"]],I["S-G-EVUS--"]=[E["GR.EQ.SEMI-TRAILER TRUCK"]],I["S-G-EVUSL-"]=[E["GR.EQ.SEMI-TRAILER TRUCK"],E["GR.EQ.UTILITY VEHICLE LIGHT"]],I["S-G-EVUSM-"]=[E["GR.EQ.SEMI-TRAILER TRUCK"],E["GR.EQ.UTILITY VEHICLE MEDIUM"]],I["S-G-EVUSH-"]=[E["GR.EQ.SEMI-TRAILER TRUCK"],E["GR.EQ.UTILITY VEHICLE HEAVY"]],I["S-G-EVUL--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"]],I["S-G-EVUX--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.CROSS-COUNTRY"]],I["S-G-EVUR--"]=[E["GR.EQ.WATER VEHICLE"]],I["S-G-EVUT--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]],I["S-G-EVUTL-"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]],I["S-G-EVUTH-"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],E["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]],I["S-G-EVUA--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.MEDICAL EVACUATION"]],I["S-G-EVUAA-"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.MEDICAL EVACUATION"]],I["S-G-EVE---"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],s._scale(.7,E["GR.IC.ENGINEER"])],I["S-G-EVEB--"]=[E["GR.EQ.BRIDGE"]],I["S-G-EVEE--"]=[E["GR.EQ.EARTHMOVER"]],I["S-G-EVEC--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"],s._scale(.6,E["GR.IC.ENGINEER"])],I["S-G-EVEM--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.MINE LAYING VEHICLE"]],I["S-G-EVEMA-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],E["GR.EQ.TANK"]],I["S-G-EVEMV-"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I["S-G-EVEMT-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],s._translate(0,-10,E["GR.EQ.LIMITED CROSS-COUNTRY"])],I["S-G-EVEML-"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"],E["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I["S-G-EVEA--"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"]],I["S-G-EVEAA-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],E["GR.EQ.TANK"]],I["S-G-EVEAT-"]=[E["GR.EQ.MINE CLEARING EQUIPMENT"],s._translate(0,-10,E["GR.EQ.LIMITED CROSS-COUNTRY"])],I["S-G-EVEMSM"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],E["GR.EQ.MINE SCATTERABLE"]],I["S-G-EVED--"]=[E["GR.EQ.DOZER"]],I["S-G-EVEDA-"]=[E["GR.EQ.DOZER ARMORED"]],I["S-G-EVES--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,E["GR.IC.ENGINEER"])],I["S-G-EVER--"]=[E["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,E["GR.IC.ENGINEER"]),E["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]],I["S-G-EVEH--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.LIMITED CROSS-COUNTRY"],E["GR.EQ.UTILITY VEHICLE BACKHOE"]],I["S-G-EVEF--"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.CROSS-COUNTRY"],E["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]],I["S-G-EVD---"]=[E["GR.EQ.UTILITY VEHICLE"],E["GR.EQ.CROSS-COUNTRY"],s._scale(.7,E["GR.IC.DRILLING"])],I["S-G-EVT---"]=[E["GR.EQ.TRAIN LOCOMOTIVE"]],I["S-G-EVC---"]=[E["GR.I.CIVILIAN"]],I["S-G-EVCA--"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]],I["S-G-EVCAL-"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCAM-"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCAH-"]=[E["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCO--"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]],I["S-G-EVCOL-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCOM-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCOH-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCM--"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I["S-G-EVCML-"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCMM-"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCMH-"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCU--"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]],I["S-G-EVCUL-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCUM-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCUH-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCJ--"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]],I["S-G-EVCJL-"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I["S-G-EVCJM-"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I["S-G-EVCJH-"]=[E["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I["S-G-EVCT--"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCTL-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCTM-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCTH-"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCF--"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCFL-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.LIGHT"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCFM-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVCFH-"]=[E["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],E["GR.EQ.CIVILIAN VEHICLE.HEAVY"],E["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I["S-G-EVM---"]=[E["GR.EQ.PACK ANIMAL"]],I["S-G-EVS---"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE SUPPORT"]],I["S-G-EVST--"]=R?[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE TRANSLOADER"]]:[E["GR.EQ.TRAIN LOCOMOTIVE"]],I["S-G-EVSR--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE TRANSPORTER"]],I["S-G-EVSC--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE CRANE/LOADING DEVICE"]],I["S-G-EVSP--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]],I["S-G-EVSW--"]=[E["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],E["GR.EQ.MISSILE WARHEAD TRANSPORTER"]],I["S-G-ES----"]=[E["GR.EQ.SENSOR"]],I["S-G-ESR---"]=[E["GR.EQ.RADAR"]],I["S-G-ESE---"]=[E["GR.EQ.SENSOR EMPLACED"]],I["S-G-EXI---"]=[E["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]],I["S-G-EX----"]=[],I["S-G-EXL---"]=[E["GR.EQ.LASER"]],I["S-G-EXN---"]=[E["GR.EQ.CBRN EQUIPMENT"]],I["S-G-EXF---"]=[E["GR.EQ.FLAME THROWER"]],I["S-G-EXM---"]=[E["GR.EQ.LAND MINES"]],I["S-G-EXMC--"]=[E["GR.EQ.ANTIPERSONNEL LAND MINE"]],I["S-G-EXML--"]=[E["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]];var e={"E-----":0,"EWM---":140,"EWMA--":140,"EWMAS-":140,EWMASR:140,EWMASE:140,"EWMAI-":140,EWMAIR:140,EWMAIE:140,"EWMAL-":140,EWMALR:140,EWMALE:140,"EWMAT-":153,EWMATR:153,EWMATE:153,"EWMS--":140,"EWMSS-":140,"EWMSI-":140,"EWMSL-":140,"EWMT--":140,"EWMTL-":140,"EWMTM-":140,"EWMTH-":140,"EWS---":140,"EWSL--":140,"EWSM--":140,"EWSH--":140,"EWX---":140,"EWXL--":140,"EWXM--":140,"EWXH--":140,"EWT---":140,"EWTL--":140,"EWTM--":140,"EWTH--":140,"EWR---":140,"EWRL--":140,"EWRM--":140,"EWRH--":140,"EWZ---":140,"EWZL--":140,"EWZM--":140,"EWZH--":140,"EWO---":140,"EWOL--":140,"EWOM--":140,"EWOH--":140,"EWH---":140,"EWHL--":140,"EWHLS-":130,"EWHM--":140,"EWHMS-":130,"EWHH--":140,"EWHHS-":130,"EWG---":140,"EWGL--":140,"EWGM--":140,"EWGH--":140,"EWGR--":140,"EWD---":140,"EWDL--":140,"EWDLS-":130,"EWDM--":140,"EWDMS-":130,"EWDH--":140,"EWDHS-":130,"EWA---":140,"EWAL--":140,"EWAM--":140,"EWAH--":140,"EV----":129,"EVA---":129,"EVAT--":130,"EVATL-":130,EVATLR:130,"EVATM-":130,EVATMR:130,"EVATH-":130,EVATHR:130,"EVAA--":130,"EVAAR-":130,"EVAI--":130,"EVAC--":130,"EVAS--":130,"EVAL--":140,"EVU---":130,"EVAB--":130,"EVUS--":140,"EVUSL-":140,"EVUSM-":140,"EVUSH-":140,"EVUL--":140,"EVUX--":140,"EVUR--":130,"EVUTL-":130,"EVUTH-":130,"EVUA--":130,"EVUAA-":130,"EVE---":129,"EVEB--":130,"EVEE--":130,"EVEC--":140,"EVEM--":130,"EVEMA-":130,"EVEMV-":130,"EVEMT-":130,"EVEML-":140,"EVEA--":120,"EVEAA-":130,"EVEAT-":130,EVEMSM:130,"EVED--":130,"EVEDA-":130,"EVES--":130,"EVER--":130,"EVEH--":140,"EVEF--":140,"EVD---":140,"EVT--":130,"EVC---":119,"EVCA--":132.5,"EVCAL-":132.5,"EVCAM-":132.5,"EVCAH-":132.5,"EVCO--":132.5,"EVCOL-":132.5,"EVCOM-":132.5,"EVCOH-":132.5,"EVCM--":132.5,"EVCML-":132.5,"EVCMM-":132.5,"EVCMH-":132.5,"EVCU--":132.5,"EVCUL-":132.5,"EVCUM-":132.5,"EVCUH-":132.5,"EVCJ--":132.5,"EVCJL-":132.5,"EVCJM-":132.5,"EVCJH-":132.5,"EVCT--":132.5,"EVCTL-":132.5,"EVCTM-":132.5,"EVCTH-":132.5,"EVCF--":132.5,"EVCFL-":132.5,"EVCFM-":132.5,"EVCFH-":132.5,"EVM---":125,"EVS---":129,"EVST--":129,"EVSR--":129,"EVSC--":129,"EVSP--":129,"EVSW--":129,"ES----":140,"ESR---":120,"ESE---":136,"EXI---":119,"EXL---":145,"EXN---":140,"EXF---":135,"EXM---":130,"EXMC--":122,"EXML--":122};for(var A in e)e.hasOwnProperty(A)&&(t["S-G-"+A]={x1:50,x2:150,y1:50,y2:e[A]})}},U={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["S-G-I-----"]=[],I["S-G-IR----"]=[E["GR.IN.IC.RAW MATERIAL PRODUCTION/STORAGE"]],I["S-G-IRM---"]=[E["GR.IN.IC.MINE"]],I["S-G-IRP---"]=[E["GR.IC.FF.CLASS III"]],I["S-G-IRN---"]=[E["GR.IC.CBRN"]],I["S-G-IRNB--"]=[E["GR.IC.CBRN"],E["GR.M1.BIOLOGICAL"]],I["S-G-IRNC--"]=[E["GR.IC.CBRN"],E["GR.M1.CHEMICAL"]],I["S-G-IRNN--"]=[E["GR.IC.CBRN"],E["GR.M1.NUCLEAR"]],I["S-G-IP----"]=[E["GR.IN.IC.PROCESSING FACILITY"]],I["S-G-IPD---"]=[E["GR.IC.CBRN"],E["GR.M1.DECONTAMINATION"]],I["S-G-IE----"]=[E["GR.IC.EQUIPMENT MANUFACTURE"]],I["S-G-IU----"]=[E["GR.IN.IC.UTILITY FACILITY"]],I["S-G-IUR---"]=[E["GR.IN.IC.RESEARCH"]],I["S-G-IUT---"]=[E["GR.IN.IC.TELECOMMUNICATIONS"]],I["S-G-IUE---"]=[E["GR.IN.IC.ELECTRIC POWER"]],I["S-G-IUEN--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER NUCLEAR"]],I["S-G-IUED--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER DAM"]],I["S-G-IUEF--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER FOSSIL"]],I["S-G-IUP---"]=[E["GR.IC.WATER"]],I["S-G-IM----"]=[],I["S-G-IMF---"]=[E["GR.IN.IC.ATOMIC ENERGY"]],I["S-G-IMFA--"]=[E["GR.IN.IC.ATOMIC ENERGY"],E["GR.IN.M2.ATOMIC ENERGY REACTOR"]],I["S-G-IMFP--"]=[E["GR.IN.IC.ATOMIC ENERGY"],E["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]],I["S-G-IMFPW-"]=[E["GR.IN.IC.ATOMIC ENERGY WEAPONS GRADE"],E["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]],I["S-G-IMFS--"]=[E["GR.IN.IC.ATOMIC ENERGY"],E["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]],I["S-G-IMA---"]=[E["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]],I["S-G-IME---"]=[E["GR.IC.FF.CLASS V"]],I["S-G-IMG---"]=[E["GR.EQ.TANK"]],I["S-G-IMV---"]=[E["GR.IC.MAINTENANCE"]],I["S-G-IMN---"]=[E["GR.EQ.DOZER"]],I["S-G-IMNB--"]=[E["GR.IN.IC.BRIDGE"]],I["S-G-IMC---"]=[E["GR.IC.CBRN"],E["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]],I["S-G-IMS---"]=[E["GR.IC.NAVAL"],E["GR.IN.M2.SHIP CONSTRUCTION"]],I["S-G-IMM---"]=[E["GR.IC.MISSILE"]],I["S-G-IG----"]=[E["GR.I.GOVERNMENT"]],I["S-G-IB----"]=[E["GR.IN.IC.BASE"]],I["S-G-IBA---"]=[E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-IBN---"]=[E["GR.IC.NAVAL"]],I["S-G-IT----"]=[E["GR.IC.TRANSPORTATION"]],I["S-G-IX----"]=[E["GR.IC.FF.MEDICAL"]],I["S-G-IXH---"]=[E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-G-IRR---"]=I["S-G-IRSR--"]=[E["GR.IN.IC.SEA SURFACE INSTALLATION, OIL RIG/PLATFORM"]]}};function d(I,t,E,R,e,A){var C=t.frame,T=t.affiliation||"Friend",S=t.numberSIDC,N=E.iconColor[T],O=E.iconFillColor[T],G=E.black[T],o=E.white[T],M={};for(var i in M["SE.IC.MILITARY"]=a("MIL"),M["SE.IC.MANUAL TRACK"]=a("MAN"),M["SE.IC.COMBATANT"]=[{type:"path",d:"m 86.9,110 c -3.6,2 -7.2,3.9 -10.8,5.9 2.1,2.9 6.7,3.9 10,2.1 2.6,-0.9 4.7,-3.8 3.1,-6.1 -0.8,-0.6 -1.5,-1.3 -2.3,-1.9 z m 26.3,0.1 c 3.6,2 7.2,3.9 10.8,5.9 -2.1,2.9 -6.7,3.9 -10,2.1 -2.6,-0.9 -4.7,-3.8 -3.1,-6.1 0.8,-0.6 1.5,-1.3 2.3,-1.9 z",fill:!1},{type:"path",d:"m 112.9,110 c -5.6,-4 -11.3,-7.9 -16.1,-12.5 -4.2,-4.5 -7,-9.8 -9.2,-15.1 -0.8,4.4 -0.9,9.3 2.4,13.2 3.6,4.5 8.6,8.1 13.5,11.8 2.3,1.7 4.7,3.3 7.1,4.8 0.8,-0.7 1.5,-1.5 2.3,-2.2 m -25.7,0 c 5.6,-4 11.3,-7.9 16.1,-12.5 4.2,-4.5 7,-9.8 9.2,-15.1 0.8,4.4 0.9,9.3 -2.4,13.2 -3.6,4.5 -8.6,8.1 -13.5,11.8 -2.3,1.7 -4.7,3.3 -7.1,4.8 -0.8,-0.7 -1.5,-1.5 -2.3,-2.2",fill:o,strokewidth:2}],M["SE.IC.SURFACE COMBATANT, LINE"]={type:"path",stroke:!1,d:"m 100,120 -25,-17 15,2 0,-10 5,0 0,-5 -15,0 0,-5 15,0 0,-5 10,0 0,5 15,0 0,5 -15,0 0,5 5,0 0,10 15,-2 z"},M["SE.IC.CARRIER"]={type:"path",d:"m 80,100 20,20 20,-20 -20,0 0,-20 -20,0 z"},M["SE.IC.BATTLESHIP"]=a("BB"),M["SE.IC.CIVILIAN"]=a("CIV"),M["SE.IC.CIVILIAN"].fill=R||S?O:!C&&O,M["SE.IC.CIVILIAN"].stroke=G,M["SE.IC.CIVILIAN"].strokewidth=3,M["SE.IC.CRUISER"]=a("CC"),M["SE.IC.CRUISER, GUIDED MISSILE"]=a("CG"),M["SE.IC.DESTROYER"]=a("DD"),M["SE.IC.FRIGATE"]=a("FF"),M["SE.IC.CORVETTE"]=a("FS"),M["SE.IC.LITTORAL COMBATANT SHIP"]=a("LL"),M["SE.IC.AMPHIBIOUS WARFARE SHIP"]={type:"path",d:"m 100,120 20,0 m -20,0 -20,-20 10,0 0,-20 20,0 0,20 10,0 z"},M["SE.IC.AMPHIBIOUS FORCE FLAGSHIP"]=a("LCC"),M["SE.IC.AMPHIBIOUS ASSAULT"]=a("LA"),M["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]=a("LHA"),M["SE.IC.AMPHIBIOUS ASSAULT SHIP, MULTI-PURPOSE"]=a("LHD"),M["SE.IC.AMPHIBIOUS TRANSPORT, DOCK"]=a("LPD"),M["SE.IC.AMPHIBIOUS ASSAULT SHIP, HELICOPTER"]=a("LPH"),M["SE.IC.LANDING SHIP"]=a("LS"),M["SE.IC.LANDING CRAFT"]=a("LC"),M["SE.IC.MINE WARFARE VESSEL"]={type:"path",d:"m 98.3,81 0,4.1 c -2.4,0.3 -4.6,1.4 -6.4,2.9 l -3.5,-3.5 -2.4,2.4 3.6,3.6 c -0.9,1.3 -1.5,4.9 -1.8,6.5 l -10.8,0 0,3 3,0 20,20 20,-20 3,0 0,-3 -10,0 c -1,-1.7 -2,-5.3 -3,-6.7 l 4,-3.7 -2,-2.4 -4,3.6 c -2,-1.4 -4,-2.4 -6,-2.7 l 0,-4.1 z"},M["SE.IC.MINELAYER"]=a("ML"),M["SE.IC.MINESWEEPER"]=a("MS"),M["SE.IC.MINESWEEPER, DRONE"]=a("MSD"),M["SE.IC.MINEHUNTER"]=a("MH"),M["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]=a(R?"MA":"MCS"),M["SE.IC.MINE COUNTERMEASURES"]=a("MCM"),M["SE.IC.SEA SURFACE DECOY"]={type:"path",d:"M 105,110 90,95 105,80 z M 85,110 70,95 85,80 z m 40,-30 -15,15 15,15 z m -55,40 0,-5 55,0 0,5 z"},M["SE.IC.PATROL"]={type:"path",d:"m 80,100 20,20 20,-20 -10,0 0,-20 -20,0 0,20 z"},M["SE.IC.PATROL CRAFT"]=a("PC"),M["SE.IC.PATROL ANTI SUBMARINE WARFARE"]={type:"path",d:"m 100,120 -25,-25 5,-5 10,10 5,0 0,-20 10,0 0,20 5,0 10,-10 5,5 z"},M["SE.IC.PATROL ANTISHIP MISSILE"]=a("PM"),M["SE.IC.PATROL TORPEDO"]=a("PT"),M["SE.IC.PATROL GUN"]=a("PG"),M["SE.IC.PATROL SHIP"]=[],M["SE.IC.MILITARY SPEEDBOAT"]={type:"path",stroke:!1,d:"m 120,120 -40,0 -15,-25 15,0 5,-15 10,0 -5,15 45,0 z"},M["SE.IC.MILITARY SPEEDBOAT, RIGID-HULL INFLATABLE BOAT"]=[{type:"path",stroke:!1,d:"M 85 80 L 80 95 L 65 95 L 80 120 L 120 120 L 135 95 L 90 95 L 95 80 L 85 80 z M 87 100.7 L 93.1 100.7 C 94.6 100.7 95.7 100.8 96.4 101.1 C 97.1 101.3 97.7 101.8 98.1 102.4 C 98.5 103.1 98.7 103.8 98.7 104.7 C 98.7 105.8 98.4 106.7 97.8 107.4 C 97.1 108.1 96.2 108.5 94.9 108.7 C 95.6 109.1 96.1 109.4 96.5 109.9 C 96.9 110.3 97.4 111.1 98.1 112.2 L 99.9 115 L 96.4 115 L 94.3 111.9 C 93.6 110.8 93.1 110.1 92.8 109.8 C 92.5 109.5 92.2 109.3 91.9 109.2 C 91.6 109.1 91.2 109 90.5 109 L 89.9 109 L 89.9 115 L 87 115 L 87 100.7 z M 101.5 100.7 L 107.2 100.7 C 108.3 100.7 109.2 100.7 109.7 100.8 C 110.3 100.9 110.8 101.1 111.2 101.4 C 111.7 101.7 112 102.1 112.3 102.6 C 112.6 103.1 112.7 103.7 112.8 104.3 C 112.7 105 112.6 105.6 112.2 106.1 C 111.9 106.7 111.4 107.1 110.8 107.4 C 111.6 107.7 112.3 108.1 112.8 108.7 C 113.2 109.3 113.5 110 113.5 110.8 C 113.5 111.5 113.3 112.1 113 112.8 C 112.7 113.4 112.3 113.8 111.8 114.2 C 111.2 114.6 110.6 114.8 109.8 114.9 C 109.3 115 108.2 115 106.3 115 L 101.5 115 L 101.5 100.7 z M 104.3 103.1 L 104.3 106.4 L 106.3 106.4 C 107.4 106.4 108.1 106.3 108.3 106.3 C 108.8 106.3 109.2 106.1 109.5 105.8 C 109.8 105.5 109.9 105.1 109.9 104.7 C 109.9 104.2 109.8 103.9 109.6 103.6 C 109.3 103.3 109 103.2 108.5 103.1 C 108.2 103.1 107.4 103.1 106 103.1 L 104.3 103.1 z M 89.9 103.1 L 89.9 106.8 L 92 106.8 C 93.4 106.8 94.3 106.7 94.6 106.6 C 95 106.4 95.2 106.3 95.4 106 C 95.6 105.7 95.7 105.3 95.8 104.9 C 95.7 104.4 95.6 104 95.3 103.7 C 95.1 103.4 94.7 103.2 94.3 103.2 C 94 103.1 93.3 103.1 92.2 103.1 L 89.9 103.1 z M 104.3 108.8 L 104.3 112.6 L 107 112.6 C 108.1 112.6 108.7 112.6 109 112.5 C 109.4 112.4 109.8 112.2 110.1 111.9 C 110.3 111.6 110.5 111.2 110.5 110.7 C 110.5 110.3 110.4 109.9 110.2 109.6 C 109.9 109.3 109.6 109.1 109.3 109 C 108.9 108.8 108 108.8 106.7 108.8 L 104.3 108.8 z"},{type:"text",fill:R?O:!C&&O,stroke:!1,x:100,y:115,fontsize:20,text:"RB"}],M["SE.IC.MILITARY JETSKI"]={type:"path",stroke:!1,d:"m 135,105 0,15 -60,0 -10,-15 20,-25 10,0 0,10 -5,0 -5,15 z"},M["SE.IC.UNMANNED SURFACE WATER VEHICLE"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},M["SE.IC.NAVY TASK ORGANIZATION UNIT"]=[{type:"path",d:"m 110,80 15,15 0,25 M 90,80 75,95 l 0,25",fill:!1}],R&&M["SE.IC.NAVY TASK ORGANIZATION UNIT"].push({type:"path",d:"m 100,80 -15,15 0,25 30,0 0,-25 -15,-15"}),M["SE.IC.NAVY TASK FORCE"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TF"}],M["SE.IC.NAVY TASK GROUP"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TG"}],M["SE.IC.NAVY TASK UNIT"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TU"}],M["SE.IC.NAVY TASK ELEMENT"]=[M["SE.IC.NAVY TASK ORGANIZATION UNIT"],{type:"text",stroke:!1,x:100,y:R?150:120,fontsize:30,text:"TE"}],M["SE.IC.CONVOY"]={type:"path",d:"m 80,115 -20,0 0,-35 80,0 0,35 -20,0 0,-20 -40,0 z"},M["SE.IC.NONCOMBATANT"]={type:"path",d:"m 80,100 0,-20 40,0 0,20 15,0 0,20 -70,0 0,-20 z"},M["SE.IC.AUXILIARY SHIP"]=a(R?"AR":"AA"),M["SE.IC.AMMUNITION SHIP"]=a("AE"),M["SE.IC.STORES SHIP"]=a("AF"),M["SE.IC.AUXILIARY FLAG OR COMMAND SHIP"]=a("AGF"),M["SE.IC.INTELLIGENCE COLLECTOR"]=a(R?"JI":"AI"),M["SE.IC.OCEAN RESEARCH SHIP"]=a("AGO"),M["SE.IC.SURVEY SHIP"]=a("AGS"),M["SE.IC.HOSPITAL SHIP"]=a("AH"),M["SE.IC.CARGO SHIP"]=a("AK"),M["SE.IC.COMBAT SUPPORT SHIP, FAST"]=a("AOE"),M["SE.IC.OILER, REPLENISHMENT"]=a("AO"),M["SE.IC.REPAIR SHIP"]=a("AR"),M["SE.IC.SUBMARINE TENDER"]=a("AS"),M["SE.IC.TUG, OCEAN GOING"]=a(R?"AS":"AT"),M["SE.IC.SERVICE CRAFT, YARD, GENERAL"]=a(R?"YY":"YT"),M["SE.IC.BARGE, NOT SELF-PROPELLED"]=a("YB"),M["SE.IC.BARGE, SELF-PROPELLED"]=a("YS"),M["SE.IC.TUG, HARBOUR"]=a("YT"),M["SE.IC.LAUNCH"]=a("YFT"),M["SE.IC.MERCHANT SHIP, GENERAL"]={type:"path",fill:R?O:!C&&O,d:"m 75,100 0,-35 50,0 0,35 20,0 -15,35 -60,0 -15,-35 z"},M["SE.IC.CARGO, GENERAL"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"CA":"A"}],M["SE.IC.CONTAINER SHIP"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"C"}],M["SE.IC.DREDGE"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"D"}],M["SE.IC.RADAR"]={type:"path",d:"M72,95 l30,-25 0,25 30,-25 M70,70 c0,35 15,50 50,50",fill:!1},M["SE.IC.ROLL ON-ROLL OFF"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:"30",text:R?"RO":"E"}],M["SE.IC.FERRY"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"FE":"F"}],M["SE.IC.HEAVY LIFT"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"H"}],M["SE.IC.HOVERCRAFT"]={type:"path",d:R?"m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z":"m 90,80 0,15.6 C 78.4,96.9 70,100.6 70,105 c 0,5.5 13.4,10 30,10 16.6,0 30,-4.5 30,-10 0,-4.4 -8.4,-8.1 -20,-9.4 L 110,80 90,80 z m -15,40 50,0"},M["SE.IC.HOVERCRAFT 2525D"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"J"}],M["SE.IC.HOVERCRAFT CIVILIAN"]={type:"path",fill:R?O:!C&&O,d:R?"m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z":"m 90,80 0,15.6 C 78.4,96.9 70,100.6 70,105 c 0,5.5 13.4,10 30,10 16.6,0 30,-4.5 30,-10 0,-4.4 -8.4,-8.1 -20,-9.4 L 110,80 90,80 z m -15,40 50,0"},M["SE.IC.HOVERCRAFT NONCOMBATANT"]=[{type:"path",d:"m 65,100 0,-30 5,10 60,0 5,-10 0,30 10,0 -15,35 -60,0 -15,-35 z",strokewidth:!1},R?{type:"text",fill:o,stroke:!1,x:100,y:120,fontsize:30,text:"NC"}:[]],M["SE.IC.MERCHANT SHIP, LASH CARRIER (WITH BARGES)"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"L"}],M["SE.IC.OILER/TANKER"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"OT":"O"}],M["SE.IC.PASSENGER SHIP"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"PA":"P"}],M["SE.IC.TUG, OCEAN GOING CIVILIAN"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:R?"TU":"T"}],M["SE.IC.TOW"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"TW"}],M["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"HZ"}],M["SE.IC.JUNK/DHOW"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"QJ"}],M["SE.IC.BARGE, NOT SELF-PROPELLED"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"text",stroke:!1,x:100,y:115,fontsize:30,text:"YB"}],M["SE.IC.HOSPITAL SHIP2"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"path",stroke:!1,d:"m 95,95 0,-15 10,0 0,15 15,0 0,10 -15,0 0,15 -10,0 0,-15 -15,0 0,-10 z"}],M["SE.IC.FISHING VESSEL"]={type:"path",fill:R?O:!C&&O,d:"m 75,100 0,-15 20,0 0,15 50,0 -15,35 -60,0 -15,-35 z M 105,57.4 105,100 m 30,-35 -30,35"},M["SE.IC.DRIFTER"]=[M["SE.IC.FISHING VESSEL"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"DF"}],M["SE.IC.TRAWLER"]=[M["SE.IC.FISHING VESSEL"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"TR"}],M["SE.IC.FISHING VESSEL DREDGE"]=[M["SE.IC.FISHING VESSEL"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"DR"}],M["SE.IC.LAW ENFORCEMENT VESSEL"]=[M["SE.IC.MERCHANT SHIP, GENERAL"],{type:"path",d:"m 135,100 -15,35 -10,0 15,-35 z"}],M["SE.IC.LEISURE CRAFT, SAILING BOAT"]={type:"path",fill:R?O:!C&&O,d:"m 105,55 0,40 35,0 z m -5,-5 0,50 m 45,0 -15,35 -60,0 -15,-35 z"},M["SE.IC.LEISURE CRAFT, MOTORIZED"]={type:"path",fill:R?O:!C&&O,d:"m 70,97.4 15,-30 10,0 -15,30 65,0 -15,35 -60,0 -15,-35 z"},M["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]=[M["SE.IC.LEISURE CRAFT, MOTORIZED"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"RB"}],M["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]=[M["SE.IC.LEISURE CRAFT, MOTORIZED"],{type:"text",stroke:!1,x:100,y:125,fontsize:30,text:"SP"}],M["SE.IC.LEISURE CRAFT, JETSKI"]={type:"path",fill:R?O:!C&&O,d:"m 85,60 -30,45 10,15 75,0 0,-20 -60,0 10,-30 5,0 0,-10 z"},M["SE.IC.UNMANNED SURFACE WATER VEHICLE (USV)"]={type:"path",fill:!(!R&&!S)&&O,stroke:G,d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"},M["SE.IC.OWN SHIP"]={type:"path",fill:!1,stroke:e?N:O,d:"m 50,100 100,0 m -50,-50 0,100 m 50,-50 c 0,27.6 -22.4,50 -50,50 -27.6,0 -50,-22.4 -50,-50 0,-27.6 22.4,-50 50,-50 27.6,0 50,22.4 50,50 z"},M["SE.IC.DITCHED AIRCRAFT"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 145,120 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 10,10 25,-30 -10,-10 10,-10 20,20 -10,35 -15,-15 -15,15 z"},M["SE.IC.PERSON IN WATER"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 105,110 10,-10 0,-15 5,0 0,20 -10,10 z m -10,0 -10,-10 0,-15 -5,0 0,20 10,10 z m 5,-5 0,-10 -5,0 -5,-5 0,-10 5,-5 10,0 5,5 0,10 -5,5 -5,0 m -15,25 15,-15 m 45,15 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 45,15 -15,-15"},M["SE.IC.DISTRESSED VESSEL"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 120,65 -20,20 20,-20 m -5,55 -35,-35 0,-20 45,45 z m -30,0 -15,-15 m -15,15 15,-15 m 45,15 15,-15 m 15,15 -15,-15 m -45,15 15,-15"},M["SE.IC.SEA MINELIKE"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 117.7,75 c 3.5,-3.5 7.1,-7.1 7.1,-7.1 l 7.1,7.1 -7.1,7.1 m -49.5,0 c -3.5,-3.5 -7.1,-7.1 -7.1,-7.1 l 7.1,-7.1 7.1,7.1 M 95,70 c 0,-5 0,-10 0,-10 l 10,0 0,10 m 25,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 16.6,0 30,13.4 30,30 z"},M["SE.IC.NAVIGATIONAL"]={type:"path",fill:!1,stroke:e?N:"red",d:"m 75,90 -10,10 70,0 -10,10"},M["SE.IC.ICEBERG"]={type:"path",fill:e?N:O,stroke:e?N:O,d:"m 75,100 25,-30 25,30 -5,15 -5,-5 -15,20 -15,-20 -5,5 z m -15,0 80,0"},M["SE.IC.FUSED TRACK"]=[a("?"),{type:"path",fill:!1,d:"m 70,65 10,35 -10,35 60,0 -10,-35 10,-35 z"}],M["SE.M1.OWN SHIP"]=l("OWN"),M["SE.M1.ANTIAIR WARFARE"]=l("AAW"),M["SE.M1.ANTISUBMARINE WARFARE"]=l("ASW"),M["SE.M1.ESCORT"]=l("E"),M["SE.M1.ELECTRONIC WARFARE"]=l("EW"),M["SE.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]=l("ISR"),M["SE.M1.MINE COUNTER MEASURES"]=l("MCM"),M["SE.M1.MISSILE DEFENSE"]=l("MD"),M["SE.M1.MEDICAL"]=l("ME"),M["SE.M1.MINE COUNTERMEASURES"]=l("MCM"),M["SE.M1.MINE WARFARE"]=l("MIW"),M["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]=l("RMV"),M["SE.M1.SPECIAL OPERATIONS FORCE"]=l("SOF"),M["SE.M1.SURFACE WARFARE"]=l("SUW"),M["SE.M1.BALLISTIC MISSILE"]=l("B"),M["SE.M1.GUIDED MISSILE"]=l("G"),M["SE.M1.OTHER GUIDED MISSILE"]=l("M"),M["SE.M1.TORPEDO"]=l("T"),M["SE.M1.CYBERSPACE"]=l("CYB"),M["SE.M1.HIJACKER"]=l("HJ"),M["SE.M2.CYBERSPACE"]=r("CYB"),M["SE.M1.DRONE-EQUIPPED"]={type:"path",stroke:!1,d:"m 80,65 20,13 20,-13 0,-5 -20,10 -20,-10 z"},M["SE.M1.HELICOPTER-EQUIPPED"]=l("H"),M["SE.M1.BALLISTIC MISSILE DEFENSE, SHOOTER"]=l("BM"),M["SE.M1.BALLISTIC MISSILE DEFENSE, LONG- RANGE SURVEILLANCE AND TRACK (LRS&T)"]=l("ST"),M["SE.M1.SEA-BASE X-BAND"]=l("SBX"),M["SE.M1.HIJACKING/HIJACKED"]=l("H"),M["SE.M2.ANTISUBMARINE WARFARE"]=r("ASW"),M["SE.M2.MINE WARFARE"]=r("MIW"),M["SE.M2.SURFACE WARFARE"]=r("SUW"),M["SE.M2.NUCLEAR POWERED"]=r("N"),M["SE.M2.HEAVY"]=r("H"),M["SE.M2.LIGHT"]=r("L"),M["SE.M2.MEDIUM"]=r("M"),M["SE.M2.DOCK"]=r("D"),M["SE.M2.LOGISTICS"]=r("LOG"),M["SE.M2.TANK"]=r("T"),M["SE.M2.VEHICLE"]=r("V"),M["SE.M2.FAST"]=r("F"),M["SE.M2.AIR-CUSHIONED"]=r("J"),M["SE.M2.AIR-CUSHIONED (USA ONLY)"]=r("AC"),M["SE.M2.HYDROFOIL"]=r("K"),M["SE.M2.AUTONOMOUS CONTROL"]=r("AUT"),M["SE.M2.REMOTELY PILOTED"]=r("RP"),M["SE.M2.EXPENDABLE"]=r("EXP"),M)M.hasOwnProperty(i)&&(I.hasOwnProperty(i)&&console.warn("Override of: "+i),n.call(this,M[i],N),I[i]=M[i])}var p={type:"letter",getMetadata:o,getIcons:M,iconParts:[d],icons:function(I,t,E,R){I["S-S-------"]=[],I["S-S-C-----"]=[E["SE.IC.COMBATANT"]],I["S-S-CL----"]=[E["SE.IC.SURFACE COMBATANT, LINE"]],I["S-S-CLCV--"]=[E["SE.IC.CARRIER"]],I["S-S-CLBB--"]=[E["SE.IC.BATTLESHIP"]],I["S-S-CLCC--"]=[E["SE.IC.CRUISER"]],I["S-S-CLDD--"]=[E["SE.IC.DESTROYER"]],I["S-S-CLFF--"]=[E["SE.IC.FRIGATE"]],I["S-S-CLLL--"]=[E["SE.IC.LITTORAL COMBATANT SHIP"]],I["S-S-CLLLAS"]=[E["SE.IC.LITTORAL COMBATANT SHIP"],E["SE.M2.ANTISUBMARINE WARFARE"]],I["S-S-CLLLMI"]=[E["SE.IC.LITTORAL COMBATANT SHIP"],E["SE.M2.MINE WARFARE"]],I["S-S-CLLLSU"]=[E["SE.IC.LITTORAL COMBATANT SHIP"],E["SE.M2.SURFACE WARFARE"]],I["S-S-CA----"]=[E["SE.IC.AMPHIBIOUS WARFARE SHIP"]],I["S-S-CALA--"]=[R?E["SE.IC.AMPHIBIOUS ASSAULT"]:E["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]],I["S-S-CALS--"]=[E["SE.IC.LANDING SHIP"]],I["S-S-CALSM-"]=[E["SE.IC.LANDING SHIP"],E["SE.M2.MEDIUM"]],I["S-S-CALST-"]=[E["SE.IC.LANDING SHIP"],E["SE.M2.TANK"]],I["S-S-CALC--"]=[E["SE.IC.LANDING CRAFT"]],I["S-S-CM----"]=[E["SE.IC.MINE WARFARE VESSEL"]],I["S-S-CMML--"]=[E["SE.IC.MINELAYER"]],I["S-S-CMMS--"]=[E["SE.IC.MINESWEEPER"]],I["S-S-CMMH--"]=[E["SE.IC.MINEHUNTER"]],I["S-S-CMMA--"]=[E["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]],I["S-S-CMMD--"]=[E["SE.IC.MINESWEEPER, DRONE"]],I["S-S-CP----"]=[E["SE.IC.PATROL"]],I["S-S-CPSB--"]=[E["SE.IC.PATROL CRAFT"]],I["S-S-CPSU--"]=[E["SE.IC.PATROL ANTI SUBMARINE WARFARE"]],I["S-S-CPSUM-"]=[E["SE.IC.PATROL ANTISHIP MISSILE"]],I["S-S-CPSUT-"]=[E["SE.IC.PATROL TORPEDO"]],I["S-S-CPSUG-"]=[E["SE.IC.PATROL GUN"]],I["S-S-CH----"]=[E["SE.IC.HOVERCRAFT"]],I["S-S-G-----"]=[E["SE.IC.NAVY TASK ORGANIZATION UNIT"]],I["S-S-GF----"]=I["S-S-GT----"]=[E["SE.IC.NAVY TASK FORCE"]],I["S-S-GG----"]=[E["SE.IC.NAVY TASK GROUP"]],I["S-S-GU----"]=[E["SE.IC.NAVY TASK UNIT"]],I["S-S-GE----"]=[E["SE.IC.NAVY TASK ELEMENT"]],I["S-S-GC----"]=[E["SE.IC.CONVOY"]],I["S-S-CD----"]=[E["SE.IC.SEA SURFACE DECOY"]],I["S-S-CU----"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"]],I["S-S-CUM---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.MINE COUNTERMEASURES"]],I["S-S-CUS---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.ANTISUBMARINE WARFARE"]],I["S-S-CUN---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.SURFACE WARFARE"]],I["S-S-CUR---"]=[E["SE.IC.UNMANNED SURFACE WATER VEHICLE"],E["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]],I["S-S-N-----"]=[E["SE.IC.NONCOMBATANT"]],I["S-S-NR----"]=[E["SE.IC.AUXILIARY SHIP"]],I["S-S-NRA---"]=[E["SE.IC.AMMUNITION SHIP"]],I["S-S-NRO---"]=[E["SE.IC.OILER, REPLENISHMENT"]],I["S-S-NF----"]=I["S-S-NFT---"]=[E["SE.IC.TUG, OCEAN GOING"]],I["S-S-NI----"]=[E["SE.IC.INTELLIGENCE COLLECTOR"]],I["S-S-NM----"]=[E["SE.IC.HOSPITAL SHIP"]],I["S-S-NS----"]=[E["SE.IC.SERVICE CRAFT, YARD, GENERAL"]],I["S-S-NR----"]=[E["SE.IC.REPAIR SHIP"]],I["S-S-NTS---"]=[E["SE.IC.SUBMARINE TENDER"]],I["S-S-NH----"]=[E["SE.IC.HOVERCRAFT NONCOMBATANT"]],I["S-S-X-----"]=[],I["S-S-XM----"]=[E["SE.IC.MERCHANT SHIP, GENERAL"]],I["S-S-XMC---"]=[E["SE.IC.CARGO, GENERAL"]],I["S-S-XME---"]=I["S-S-XMR---"]=[E["SE.IC.ROLL ON-ROLL OFF"]],I["S-S-XMO---"]=[E["SE.IC.OILER/TANKER"]],I["S-S-XMT---"]=I["S-S-XMTU--"]=[E["SE.IC.TUG, OCEAN GOING CIVILIAN"]],I["S-S-XMF---"]=[E["SE.IC.FERRY"]],I["S-S-XMP---"]=[E["SE.IC.PASSENGER SHIP"]],I["S-S-XMH---"]=[E["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]],I["S-S-XMD---"]=[E["SE.IC.DREDGE"]],I["S-S-XMTO--"]=[E["SE.IC.TOW"]],I["S-S-XF----"]=[E["SE.IC.FISHING VESSEL"]],I["S-S-XFDF--"]=[E["SE.IC.DRIFTER"]],I["S-S-XFTR--"]=[E["SE.IC.TRAWLER"]],I["S-S-XFDR--"]=[E["SE.IC.FISHING VESSEL DREDGE"]],I["S-S-XR----"]=[E["SE.IC.LEISURE CRAFT, SAILING BOAT"]],I["S-S-XL----"]=[E["SE.IC.LAW ENFORCEMENT VESSEL"]],I["S-S-XH----"]=[E["SE.IC.HOVERCRAFT CIVILIAN"]],I["S-S-XA----"]=[E["SE.IC.LEISURE CRAFT, MOTORIZED"]],I["S-S-XAR---"]=[E["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]],I["S-S-XAS---"]=[E["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]],I["S-S-XP----"]=[E["SE.IC.LEISURE CRAFT, JETSKI"]],I["S-S-O-----"]=[E["SE.IC.OWN SHIP"]],I["S-S-E-----"]=[],I["S-S-ED----"]=[E["SE.IC.DITCHED AIRCRAFT"]],I["S-S-EP----"]=[E["SE.IC.PERSON IN WATER"]],I["S-S-EV----"]=[E["SE.IC.DISTRESSED VESSEL"]],I["S-S-Z-----"]=[],I["S-S-ZM----"]=[E["SE.IC.SEA MINELIKE"]],I["S-S-ZN----"]=[E["SE.IC.NAVIGATIONAL"]],I["S-S-ZI----"]=[E["SE.IC.ICEBERG"]]}};function D(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=t.frame,S=t.numberSIDC,N=E.iconColor[C],O=E.iconFillColor[C],G=E.white[C],o=E.black[C],M={};for(var i in M["SU.IC.MILITARY"]=a("MIL"),M["SU.IC.CIVILIAN"]=a("CIV"),M["SU.IC.CIVILIAN"].fill=R||S?O:!T&&O,M["SU.IC.CIVILIAN"].stroke=o,M["SU.IC.CIVILIAN"].strokewidth=3,M["SU.IC.MANUAL TRACK"]=a("MAN"),M["SU.IC.SUBMARINE"]={type:"path",d:"m 75,85 50,0 15,15 -15,15 -50,0 -15,-15 z"},M["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"]={type:"path",d:"m 75,110 -10,-10 10,-10 20,0 0,-10 10,0 0,10 20,0 10,10 -10,10 z"},M["SU.IC.SUBMARINE CONVENTIONAL PROPULSION, SURFACED"]=[{type:"path",d:"m 75,110 -10,-10 10,-10 20,0 0,-10 10,0 0,10 20,0 10,10 -10,10 z"},{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.SUBMARINE NUCLEAR PROPULSION"]={type:"path",d:"m 75,110 -10,-10 10,-10 0,-10 50,0 0,10 10,10 -10,10 z"},M["SU.IC.SUBMARINE NUCLEAR PROPULSION, SURFACED"]=[{type:"path",d:"m 75,110 -10,-10 10,-10 0,-10 50,0 0,10 10,10 -10,10 z"},{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.SUBMARINE ATTACK (SSN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"A"},M["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"M"},M["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"G"},M["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]={type:"text",fill:G,stroke:!1,x:100,y:110,fontsize:30,text:"B"},M["SU.IC.SUBMARINE, SURFACED"]=[{type:"path",d:"m 75,80 50,0 15,15 -15,15 -50,0 -15,-15 z"},{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.SUBMARINE, BOTTOMED"]=[{type:"path",d:"m 75,80 50,0 15,15 -15,15 -50,0 -15,-15 z"},{type:"path",d:"m 70,120 0,-5 60,0 0,5 z"}],M["SU.IC.SUBMARINE, SNORKELING"]=[{type:"path",d:"m 75,120 -10,-10 10,-10 20,0 0,-20 10,0 0,20 20,0 10,10 -10,10 z"},{type:"path",fill:!1,d:"m 65,95 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.OTHER SUBMERSIBLE"]={type:"path",d:"m 85,90 0,-10 30,0 0,10 m 20,10 c 0,5.5 -15.7,10 -35,10 -19.3,0 -35,-4.5 -35,-10 0,-5.5 15.7,-10 35,-10 19.3,0 35,4.5 35,10 z"},M["SU.IC.OTHER SUBMERSIBLE, SURFACED"]=[M["SU.IC.OTHER SUBMERSIBLE"],{type:"path",fill:!1,d:"m 65,120 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"}],M["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]={type:"path",d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z",stroke:!1},M["SU.IC.NON-SUBMARINE"]=R&&!S?{type:"text",stroke:!1,x:100,y:110,fontsize:35,text:"NON"}:[{type:"text",stroke:!1,x:100,y:100,fontsize:25,text:"NON"},{type:"text",stroke:!1,x:100,y:120,fontsize:25,text:"SUB"}],M["SU.IC.DIVER, MILITARY"]={type:"path",stroke:!1,d:"M 100 80 C 93.7 80 88.3 82.7 85.8 88.3 L 85.8 88.3 L 77.8 88.3 L 77.8 105 L 85.8 105 L 85.8 104.8 C 87.3 108.2 88.8 110 92 111.7 L 92.1 111.7 L 84.2 120 L 115.8 120 L 107.9 111.7 L 108 111.7 C 111.1 110 112.8 108.3 114.3 105 L 122.2 105 L 122.2 88.3 L 114.3 88.3 L 114.3 88.3 C 111.7 82.8 106.3 80 100 80 z M 100 86.6 C 105.4 86.6 109.8 91.1 109.8 96.6 C 109.8 102.1 105.4 106.6 100 106.6 C 94.6 106.6 90.1 102.1 90.1 96.6 C 90.1 91.1 94.6 86.6 100 86.6 z M 100 89.6 C 96.2 89.6 93.1 92.7 93.1 96.6 C 93.1 100.5 96.2 103.6 100 103.6 C 103.8 103.6 106.8 100.5 106.8 96.6 C 106.8 92.7 103.8 89.6 100 89.6 z"},M["SU.IC.SUBMERSIBLE, CIVILIAN"]={type:"path",fill:R?O:!T&&O,d:"m 85,90 0,-10 30,0 0,10 m 20,10 c 0,5.5 -15.7,10 -35,10 -19.3,0 -35,-4.5 -35,-10 0,-5.5 15.7,-10 35,-10 19.3,0 35,4.5 35,10 z"},M["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV), CIVILIAN"]={type:"path",fill:R?O:!T&&O,d:"m 60,84 40,20 40,-20 0,8 -40,25 -40,-25 z"},M["SU.M1.CYBERSPACE"]=l("CYB"),M["SU.M1.HIJACKER"]=l("HJ"),M["SU.M2.CYBERSPACE"]=r("CYB"),M["SU.IC.DIVER, CIVILIAN"]={type:"path",fill:O,d:"M 114.3,94 C 114.3,102.3 107.9,109 100,109 c -7.9,0 -14.2,-6.7 -14.2,-15 0,-8.3 6.4,-15 14.2,-15 7.9,0 14.3,6.7 14.3,15 z m 0,27 14.3,15 -57,0 14.3,-15 M 125.7,79 l 14.3,0 0,30 -14.3,0 m -51.3,0 -14.3,0 0,-30 14.3,0 m 54.2,15 c 0,16.6 -12.8,30 -28.5,30 -15.7,0 -28.5,-13.4 -28.5,-30 C 71.5,77.4 84.3,64 100,64 115.7,64 128.5,77.4 128.5,94 z"},M["SU.IC.UNDERWATER WEAPON"]=a("WPN"),M["SU.IC.TORPEDO"]={type:"path",d:"m 65,105 -5,-5 5,-5 60,0 c 0,0 5,5 5,5 l 5,-5 0,10 -5,-5 -5,5 z"},M["SU.IC.IMPROVISED EXPLOSIVE DEVICE (IED)"]=a("IED"),M["SU.IC.UNDERWATER DECOY"]={type:"path",stroke:o,d:R?"M 105,110 90,95 105,80 z M 85,110 70,95 85,80 z m 40,-30 -15,15 15,15 z m -55,40 0,-5 55,0 0,5 z":"M 105,120 90,105 105,90 z M 85,120 70,105 85,90 z m 40,-30 -15,15 15,15 z m -55,-5 0,-5 55,0 0,5 z",fill:R?N:O},M["SU.IC.UNDERWATER DECOY DSymbol"]={type:"path",d:"M 85 81 L 65 98 L 85 119 L 85 81 z M 110 81 L 90 98 L 110 119 L 110 81 z M 135 81 L 115 98 L 135 119 L 135 81 z"},M["SU.IC.ECHO TRACKER CLASSIFIER (ETC)/POSSIBLE CONTACT (POSCON)"]={type:"text",stroke:!1,x:100,y:130,fontsize:60,text:"?"},M["SU.IC.FUSED TRACK"]=[a("?"),{type:"path",fill:!1,d:"m 70,65 10,35 -10,35 60,0 -10,-35 10,-35"}],M["SU.IC.SEA MINE"]={type:"path",fill:!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"M 115.9,73 126.5,62.4 137.1,73 126.5,83.6 m -53,0 L 62.9,73 73.5,62.4 84.1,73 m 8.4,-3 0,-15 15,0 0,15 m 22.5,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 C 116.6,70 130,83.4 130,100 z"},M["SU.IC.SEA MINE - BOTTOM"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE - MOORED"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE - FLOATING"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE - RISING"]=[M["SU.IC.SEA MINE"],{type:"path",fill:S&&A?"":!R&&!S||e?O:E.iconColor.Hostile,stroke:!R&&!S||e?N:o,d:"m 100,128 -10,15 20,0 z"}],M["SU.IC.SEA MINE (IN OTHER POSITION)"]=[M["SU.IC.SEA MINE"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 130,100 15,0 M 70,100 l -15,0"}],M["SU.IC.SEA MINE - KINGFISHER"]=[M["SU.IC.SEA MINE"],{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"K"}],M["SU.IC.SEA MINE - SMALL OBJECT"]=[M["SU.IC.SEA MINE"],{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"SO"}],M["SU.IC.SEA MINE EXERCISE MINE"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"M 115.9,73 126.5,62.4 137.1,73 126.5,83.6 m -53,0 L 62.9,73 73.5,62.4 84.1,73 m 8.4,-3 0,-15 15,0 0,15 m 22.5,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 C 116.6,70 130,83.4 130,100 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"EX"},S?[]:{type:"text",stroke:!1,fill:!R&&!S||e?N:o,x:150,y:46,fontsize:40,text:"X"}],M["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE EXERCISE MINE - MOORED"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE EXERCISE MINE - RISING"]=[M["SU.IC.SEA MINE EXERCISE MINE"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 100,128 -10,15 20,0 z"}],M["SU.IC.SEA MINE DECOY"]={type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 106.6,101.6 0,26.3 -13.1,-13.1 z m -19.7,0 0,26.3 -13.1,-13.1 z m 39.4,0 0,26.3 -13.1,-13.1 13.1,-13.1 M 100,75.3 c -14.5,0 -26.3,11.8 -26.3,26.3 l 52.5,0 C 126.3,87.1 114.5,75.3 100,75.3 z m -6.6,0 0,-13.1 13.1,0 0,13.1 m -29.8,12.3 -9.3,-9.3 9.3,-9.3 9.3,9.3 m 27.9,0 9.3,-9.3 9.3,9.3 -9.3,9.3"},M["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]=[M["SU.IC.SEA MINE DECOY"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE DECOY, MOORED"]=[M["SU.IC.SEA MINE DECOY"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75,140 50,0 M 100,100 l 0,40"}],M["SU.IC.SEA MINE NEUTRALIZED"]=[{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"M 115.9,73 126.5,62.4 137.1,73 126.5,83.6 m -53,0 L 62.9,73 73.5,62.4 84.1,73 m 8.4,-3 0,-15 15,0 0,15 m 22.5,30 c 0,16.6 -13.4,30 -30,30 -16.6,0 -30,-13.4 -30,-30 0,-16.6 13.4,-30 30,-30 C 116.6,70 130,83.4 130,100 z"},{type:"path",strokewidth:5,stroke:A?G:o,d:"m 135,65 -70,70 m 0,-70 70,70"}],M["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE NEUTRALIZED - MOORED"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE NEUTRALIZED - RISING"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 100,128 -10,15 20,0 z"}],M["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]=[M["SU.IC.SEA MINE NEUTRALIZED"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 130,100 15,0 M 70,100 l -15,0"}],M["SU.IC.SEA MINE MILEC"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"E"}],M["SU.IC.SEA MINE MILEC - BOTTOM"]=[M["SU.IC.SEA MINE MILEC"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE MILEC - MOORED"]=[M["SU.IC.SEA MINE MILEC"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE MILEC - FLOATING"]=[M["SU.IC.SEA MINE MILEC"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE MINE ANCHOR"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!(!R&&!S||e)&&o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:105,fontsize:18,text:"ANCR"}],M["SU.IC.SEA MINE MILCO"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,141,42)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},S?[]:{type:"text",stroke:!1,fill:!R&&!S||e?N:o,x:100,y:112,fontsize:30,text:"#"}],M["SU.IC.SEA MINE MILCO - BOTTOM"]=[M["SU.IC.SEA MINE MILCO"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,141,42)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE MILCO - MOORED"]=[M["SU.IC.SEA MINE MILCO"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE MILCO - FLOATING"]=[M["SU.IC.SEA MINE MILCO"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"1"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"2"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"3"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"4"},M["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]={type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:110,fontsize:35,text:"5"},M["SU.IC.SEA MINE NEGATIVE REACQUISITION"]=[{type:"path",strokedasharray:"8,4",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"NR"}],M["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]=[M["SU.IC.SEA MINE NEGATIVE REACQUISITION"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]=[M["SU.IC.SEA MINE NEGATIVE REACQUISITION"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]=[M["SU.IC.SEA MINE NEGATIVE REACQUISITION"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.SEA MINE GENERAL OBSTRUCTOR"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(255,255,0)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"OB"}],M["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]=[{type:"path",fill:!R&&!S||e?O:E.iconColor.Neutral,stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:!R&&!S||e||A?G:o,x:100,y:112,fontsize:30,text:"OB"},{type:"path",strokewidth:5,stroke:A?G:o,d:"m 135,65 -70,70 m 0,-70 70,70"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"]=[{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 113.8,127.6 -27.6,0 -13.8,-13.8 0,-27.6 13.8,-13.8 27.6,0 13.8,13.8 0,27.6 z"},{type:"text",stroke:!1,fill:e||(!R&&!S||A?G:o),x:100,y:112,fontsize:30,text:"N"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]=[M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 74.8,125.2 50.4,0 0,12.6 -50.4,0 z"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]=[M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"],{type:"path",fill:!R&&!S||e?O:A?o:"rgb(0, 130, 24)",stroke:!R&&!S||e?N:o,d:"m 75.5,136.8 49,0 M 100,124.5 l 0,12.3"}],M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]=[M["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"],{type:"path",fill:!1,stroke:!R&&!S||e?N:o,d:"m 75,140 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10"}],M["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]=[{type:"path",strokedasharray:"8,4",fill:!1,stroke:!R&&!S||e?N:E.iconColor.Hostile,d:"m 85,65 30,0 20,20 0,30 -20,20 -30,0 -20,-20 0,-30 z"},{type:"text",stroke:!1,fill:!R&&!S||e?N:E.iconColor.Hostile,x:100,y:110,fontsize:30,text:"UXO"}],M["SU.IC.ENVIRONMENTAL REPORT LOCATION"]=[{type:"path",fill:!1,stroke:!R&&!S||e?N:E.iconColor.Neutral,d:"m 70,70 0,60 60,0 0,-60 z"},{type:"text",stroke:!1,fill:!R&&!S||e?N:E.iconColor.Neutral,x:100,y:122,fontsize:60,text:"E"}],M["SU.IC.DIVE REPORT LOCATION"]=[{type:"path",fill:!1,stroke:!R&&!S||e?N:E.iconColor.Neutral,d:"m 70,70 0,60 60,0 0,-60 z"},{type:"text",stroke:!1,fill:!R&&!S||e?N:E.iconColor.Neutral,x:100,y:122,fontsize:60,text:"D"}],M["SU.IC.SEABED INSTALLATION/MANMADE"]={type:"path",fill:O,stroke:o,d:"m 140,125 -80,0 10,-30 10,20 20,-50 20,50 10,-25 z"},M["SU.IC.SEABED INSTALLATION, MAN-MADE, MILITARY"]={type:"path",d:"m 75,80 0,40 50,0 0,-15 -15,0 0,-10 -20,0 0,-15 z"},M["SU.IC.SEABED INSTALLATION, MAN-MADE, NON-MILITARY"]={type:"path",fill:O,d:"m 75,80 0,40 50,0 0,-15 -15,0 0,-10 -20,0 0,-15 z"},M["SU.IC.SEABED ROCK/STONE, OBSTACLE, OTHER"]={type:"path",d:"m 140,125 -80,0 10,-30 10,20 20,-50 20,50 10,-25 z"},M["SU.IC.WRECK"]={type:"path",d:"m 125,85 0,30 m -50,-30 0,30 m 25,-40 0,45 m -40,-20 80,0"},M["SU.IC.MARINE LIFE"]={type:"path",d:"m 60,100 20,-20 45,20 15,-10 0,20 -15,-10 -45,20 z"},M["SU.IC.SEA ANOMALY"]={type:"path",fill:!1,d:"m 65,100 15,-20 20,30 20,-30 15,20 m -70,10 15,-20 20,30 20,-30 15,20"},M["SU.M1.ANTISUBMARINE WARFARE"]=l("ASW"),M["SU.M1.AUXILIARY"]=l("AUX"),M["SU.M1.COMMAND AND CONTROL"]=l("C2"),M["SU.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]=l("ISR"),M["SU.M1.MINE COUNTERMEASURES"]=l("MCM"),M["SU.M1.MINE WARFARE"]=l("MIW"),M["SU.M1.SURFACE WARFARE"]=l("SUW"),M["SU.M1.ATTACK"]=l("A"),M["SU.M1.BALLISTIC MISSILE"]=l("B"),M["SU.M1.GUIDED MISSILE"]=l("G"),M["SU.M1.OTHER GUIDED MISSILES (POINT DEFENCE)"]=l("M"),M["SU.M1.SPECIAL OPERATIONS FORCE"]=l("SOF"),M["SU.M1.POSSIBLE SUBMARINE - LOW 1"]=l("P1"),M["SU.M1.POSSIBLE SUBMARINE - LOW 2"]=l("P2"),M["SU.M1.POSSIBLE SUBMARINE - HIGH 3"]=l("P3"),M["SU.M1.POSSIBLE SUBMARINE - HIGH 4"]=l("P4"),M["SU.M1.PROBABLE SUBMARINE"]=l("PB"),M["SU.M1.CERTAIN SUBMARINE"]=l("CT"),M["SU.M1.ANTI-TORPEDO TORPEDO"]=l("ATT"),M["SU.M1.HIJACKING/HIJACKED"]=l("H"),M["SU.M2.POSSIBLE SUBMARINE - LOW 1"]=r("P1"),M["SU.M2.POSSIBLE SUBMARINE - LOW 2"]=r("P2"),M["SU.M2.POSSIBLE SUBMARINE - HIGH 3"]=r("P3"),M["SU.M2.POSSIBLE SUBMARINE - HIGH 4"]=r("P4"),M["SU.M2.PROBABLE SUBMARINE"]=r("PB"),M["SU.M2.AIR INDEPENDENT PROPULSION"]=r("AI"),M["SU.M2.CERTSUB"]=r("CT"),M["SU.M2.DIESEL PROPULSION"]=r("D"),M["SU.M2.DIESEL - TYPE 1"]=r("D1"),M["SU.M2.DIESEL - TYPE 2"]=r("D2"),M["SU.M2.DIESEL - TYPE 3"]=r("D3"),M["SU.M2.NUCLEAR POWERED"]=r("N"),M["SU.M2.NUCLEAR - TYPE 1"]=r("N1"),M["SU.M2.NUCLEAR - TYPE 2"]=r("N2"),M["SU.M2.NUCLEAR - TYPE 3"]=r("N3"),M["SU.M2.NUCLEAR - TYPE 4"]=r("N4"),M["SU.M2.NUCLEAR - TYPE 5"]=r("N5"),M["SU.M2.NUCLEAR - TYPE 6"]=r("N6"),M["SU.M2.NUCLEAR - TYPE 7"]=r("N7"),M["SU.M2.AUTONOMOUS CONTROL"]=r("AUT"),M["SU.M2.REMOTELY PILOTED"]=r("RP"),M["SU.M2.EXPENDABLE"]=r("EXP"),M)M.hasOwnProperty(i)&&(I.hasOwnProperty(i)&&console.warn("Override of: "+i),n.call(this,M[i],N),I[i]=M[i])}var m={type:"letter",getMetadata:o,getIcons:M,iconParts:[D],icons:function(I,t,E,R){I["S-U-------"]=[],I["S-U-S-----"]=[E["SU.IC.SUBMARINE"]],I["S-U-SF----"]=[E["SU.IC.SUBMARINE, SURFACED"]],I["S-U-SB----"]=[E["SU.IC.SUBMARINE, BOTTOMED"]],I["S-U-SR----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.CERTSUB"]],I["S-U-SX----"]=[E["SU.IC.NON-SUBMARINE"]],I["S-U-SN----"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"]],I["S-U-SNF---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION, SURFACED"]],I["S-U-SNA---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE ATTACK (SSN)"]],I["S-U-SNM---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]],I["S-U-SNG---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]],I["S-U-SNB---"]=[E["SU.IC.SUBMARINE NUCLEAR PROPULSION"],E["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]],I["S-U-SC----"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"]],I["S-U-SCF---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION, SURFACED"]],I["S-U-SCA---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE ATTACK (SSN)"]],I["S-U-SCM---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE MISSILE (TYPE UNKNOWN)"]],I["S-U-SCG---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE GUIDED MISSILE (SSGN)"]],I["S-U-SCB---"]=[E["SU.IC.SUBMARINE CONVENTIONAL PROPULSION"],E["SU.IC.SUBMARINE BALLISTIC MISSILE (SSBN)"]],I["S-U-SO----"]=[E["SU.IC.OTHER SUBMERSIBLE"]],I["S-U-SOF---"]=[E["SU.IC.OTHER SUBMERSIBLE, SURFACED"]],I["S-U-SU----"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I["S-U-SUM---"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],E["SU.M1.MINE COUNTERMEASURES"]],I["S-U-SUS---"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],E["SU.M1.ANTISUBMARINE WARFARE"]],I["S-U-SUN---"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"],E["SU.M1.SURFACE WARFARE"]],I["S-U-S1----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - LOW 1"]],I["S-U-S2----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - LOW 2"]],I["S-U-S3----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - HIGH 3"]],I["S-U-S4----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.POSSIBLE SUBMARINE - HIGH 4"]],I["S-U-SL----"]=[E["SU.IC.SUBMARINE"],E["SU.M2.PROBABLE SUBMARINE"]],I["S-U-SK----"]=[E["SU.IC.SUBMARINE, SNORKELING"]],I["S-U-W-----"]=[E["SU.IC.UNDERWATER WEAPON"]],I["S-U-WT----"]=[E["SU.IC.TORPEDO"]],I["S-U-WM----"]=[E["SU.IC.SEA MINE"]],I["S-U-WMD---"]=[E["SU.IC.SEA MINE NEUTRALIZED"]],I["S-U-WMG---"]=[E["SU.IC.SEA MINE - BOTTOM"]],I["S-U-WMGD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]],I["S-U-WMGX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]],I["S-U-WMGE--"]=[E["SU.IC.SEA MINE MILEC - BOTTOM"]],I["S-U-WMGC--"]=[E["SU.IC.SEA MINE MILCO - BOTTOM"]],I["S-U-WMGR--"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]],I["S-U-WMGO--"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]],I["S-U-WMM---"]=[E["SU.IC.SEA MINE - MOORED"]],I["S-U-WMMD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - MOORED"]],I["S-U-WMMX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - MOORED"]],I["S-U-WMME--"]=[E["SU.IC.SEA MINE MILEC - MOORED"]],I["S-U-WMMC--"]=[E["SU.IC.SEA MINE MILCO - MOORED"]],I["S-U-WMMR--"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]],I["S-U-WMMO--"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]],I["S-U-WMF---"]=[E["SU.IC.SEA MINE - FLOATING"]],I["S-U-WMFD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]],I["S-U-WMFX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]],I["S-U-WMFE--"]=[E["SU.IC.SEA MINE MILEC - FLOATING"]],I["S-U-WMFC--"]=[E["SU.IC.SEA MINE MILCO - FLOATING"]],I["S-U-WMFR--"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]],I["S-U-WMFO--"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]],I["S-U-WMO---"]=[E["SU.IC.SEA MINE (IN OTHER POSITION)"]],I["S-U-WMOD--"]=[E["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]],I["S-U-WMX---"]=[E["SU.IC.SEA MINE EXERCISE MINE"]],I["S-U-WME---"]=[E["SU.IC.SEA MINE MILEC"]],I["S-U-WMA---"]=[E["SU.IC.SEA MINE MINE ANCHOR"]],I["S-U-WMC---"]=[E["SU.IC.SEA MINE MILCO"]],I["S-U-WMR---"]=[E["SU.IC.SEA MINE NEGATIVE REACQUISITION"]],I["S-U-WMB---"]=[E["SU.IC.SEA MINE GENERAL OBSTRUCTOR"]],I["S-U-WMBD--"]=[E["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]],I["S-U-WMN---"]=[E["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"]],I["S-U-WMS---"]=[E["SU.IC.SEA MINE - RISING"]],I["S-U-WMSX--"]=[E["SU.IC.SEA MINE EXERCISE MINE - RISING"]],I["S-U-WMSD--"]=[E["SU.IC.SEA MINE NEUTRALIZED - RISING"]],I["S-U-WV----"]=[E["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I["S-U-WD----"]=[E["SU.IC.UNDERWATER DECOY"]],I["S-U-WDM---"]=[E["SU.IC.SEA MINE DECOY"]],I["S-U-WDMG--"]=[E["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]],I["S-U-WDMM--"]=[E["SU.IC.SEA MINE DECOY, MOORED"]],I["S-U-N-----"]=[E["SU.IC.NON-SUBMARINE"]],I["S-U-ND----"]=[E["SU.IC.DIVER, CIVILIAN"]],I["S-U-NB----"]=[],I["S-U-E-----"]=[E["SU.IC.ENVIRONMENTAL REPORT LOCATION"]],I["S-U-V-----"]=[E["SU.IC.DIVE REPORT LOCATION"]],I["S-U-X-----"]=[E["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]],I["S-U-NBS---"]=[E["SU.IC.SEABED INSTALLATION/MANMADE"]],I["S-U-NBR---"]=[E["SU.IC.SEABED ROCK/STONE, OBSTACLE, OTHER"]],I["S-U-NBW---"]=[E["SU.IC.WRECK"]],I["S-U-NM----"]=[E["SU.IC.MARINE LIFE"]],I["S-U-NA----"]=[E["SU.IC.SEA ANOMALY"]]}},F={type:"letter",getMetadata:o,getIcons:M,iconParts:[c,P],icons:function(I,t,E,R){I["S-F-------"]=[E["GR.IC.SPECIAL OPERATIONS FORCES"]],I["S-F-A-----"]=[E["AR.I.MILITARY ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AF----"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AFA---"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.ATTACK"]],I["S-F-AFK---"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.REFUEL"]],I["S-F-AFU---"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.UTILITY"]],I["S-F-AFUL--"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.LIGHT"]],I["S-F-AFUM--"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.MEDIUM"]],I["S-F-AFUH--"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.HEAVY"]],I["S-F-AV----"]=[E["AR.I.MILITARY FIXED WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.VSTOL"]],I["S-F-AH----"]=R?[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["GR.IC.AVIATION ROTARY WING 2525C"]]:[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-AHH---"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.COMBAT SEARCH AND RESCUE"]],I["S-F-AHA---"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.ATTACK"]],I["S-F-AHU---"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["SOF.M2.UTILITY"]],I["S-F-AHUL--"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.LIGHT"]],I["S-F-AHUM--"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.MEDIUM"]],I["S-F-AHUH--"]=[E["GR.IC.AVIATION ROTARY WING"],E["AIR.M1.SPECIAL OPERATIONS FORCES"],E["AIR.M2.HEAVY"]],I["S-F-SN----"]=I["S-F-N-----"]=[E["GR.IC.NAVAL"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-SNS---"]=I["S-F-NS----"]=[E["GR.IC.SEA-AIR-LAND"]],I["S-F-SNU---"]=I["S-F-NU----"]=[E["SOF.IC.UNDERWATER DEMOLITION TEAM"]],I["S-F-SNB---"]=I["S-F-NB----"]=[E["GR.IC.COMBATANT"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-SNN---"]=I["S-F-NN----"]=[E["GR.IC.SUBMARINE NUCLEAR PROPULSION"],E["AIR.M1.SPECIAL OPERATIONS FORCES"]],I["S-F-G-----"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.SPECIAL OPERATIONS FORCES"]],I["S-F-GS----"]=[E["GR.IC.SPECIAL FORCES"]],I["S-F-GR----"]=I["S-F-GSR---"]=[E["GR.IC.FF.INFANTRY"],E["AIR.M1.RECONNAISSANCE"],E["GR.M2.AIRBORNE"]],I["S-F-GP----"]=I["S-F-GSP---"]=[E["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]],I["S-F-GPA---"]=I["S-F-GSPA--"]=[E["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"],s._translate(0,-30,s._scale(.7,E["AR.I.MILITARY FIXED WING"]))],I["S-F-GC----"]=I["S-F-GCA---"]=[E["GR.IC.CIVIL AFFAIRS"]],I["S-F-GB----"]=I["S-F-B-----"]=[E["GR.IC.SPECIAL OPERATIONS FORCES"],E["GR.M2.SUPPORT"]]}};function f(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=E.iconColor[C],S={"SI.IC.COMMUNICATIONS":{type:"path",d:"m 93,120 14,0 0,0 m -7,-27 0,27 m 2,-25 8,2 -5,5 13,3 m -20,-10 -8,2 5,5 -14,3 m 21,-13 8,-2 -5,-5 13,-3 m -37,0 14,3 -5,5 8,2",fill:!1},"SI.IC.RADAR":{type:"path",d:"m 115,90 -15,15 0,-15 -15,15 M 80,85 c 0,25 15,35 35,35",fill:!1}};for(var N in S["SI.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]=a("J"),S["SI.M1.ANTI-AIRCRAFT FIRE CONTROL"]=l("AA"),S["SI.M1.AIRBORNE SEARCH AND BOMBING"]=l("AB"),S["SI.M1.AIRBORNE INTERCEPT"]=l("AI"),S["SI.M1.ALTIMETER"]=l("AL"),S["SI.M1.AIRBORNE RECONNAISSANCE AND MAPPING"]=l("AM"),S["SI.M1.AIR TRAFFIC CONTROL"]=l("AT"),S["SI.M1.BEACON TRANSPONDER (NOT IFF)"]=l("BN"),S["SI.M1.BATTLEFIELD SURVEILLANCE"]=l("BS"),S["SI.M1.CONTROLLED APPROACH"]=l("CA"),S["SI.M1.CONTROLLED INTERCEPT"]=l("CI"),S["SI.M1.CELLULAR/MOBILE"]=l("CM"),S["SI.M1.COASTAL SURVEILLANCE"]=l("CS"),S["SI.M1.CYBER"]=l("CYB"),S["SI.M1.DECOY/MIMIC"]=l("DC"),S["SI.M1.DATA TRANSMISSION"]=l("DT"),S["SI.M1.EARTH SURVEILLANCE"]=l("ES"),S["SI.M1.EARLY WARNING"]=l("EW"),S["SI.M1.FIRE CONTROL"]=l("FC"),S["SI.M1.GROUND MAPPING"]=l("GM"),S["SI.M1.HEIGHT FINDING"]=l("HF"),S["SI.M1.HARBOR SURVEILLANCE"]=l("HS"),S["SI.M1.IDENTIFICATION, FRIEND OR FOE (INTERROGATOR)"]=l("IF"),S["SI.M1.INSTRUMENT LANDING SYSTEM"]=l("IL"),S["SI.M1.IONOSPHERIC SOUNDING"]=l("IS"),S["SI.M1.IDENTIFICATION, FRIEND OR FOE (TRANSPONDER)"]=l("IT"),S["SI.M1.BARRAGE JAMMER"]=l("JB"),S["SI.M1.CLICK JAMMER"]=l("JC"),S["SI.M1.DECEPTIVE JAMMER"]=l("JD"),S["SI.M1.FREQUENCY SWEPT JAMMER"]=l("JF"),S["SI.M1.JAMMER (GENERAL)"]=l("JG"),S["SI.M1.NOISE JAMMER"]=l("JN"),S["SI.M1.PULSED JAMMER"]=l("JP"),S["SI.M1.REPEATER JAMMER"]=l("JR"),S["SI.M1.SPOT NOISE JAMMER"]=l("JS"),S["SI.M1.TRANSPONDER JAMMER"]=l("JT"),S["SI.M1.MISSILE ACQUISITION"]=l("MA"),S["SI.M1.MISSILE CONTROL"]=l("MC"),S["SI.M1.MISSILE DOWNLINK"]=l("MD"),S["SI.M1.METEOROLOGICAL"]=l("ME"),S["SI.M1.MULTI-FUNCTION"]=l("MF"),S["SI.M1.MISSILE GUIDANCE"]=l("MG"),S["SI.M1.MISSILE HOMING"]=l("MH"),S["SI.M1.MISSILE TRACKING"]=l("MT"),S["SI.M1.NAVIGATIONAL/GENERAL"]=l("NA"),S["SI.M1.NAVIGATIONAL/DISTANCE MEASURING EQUIPMENT"]=l("ND"),S["SI.M1.NAVIGATION/TERRAIN FOLLOWING"]=l("NT"),S["SI.M1.NAVIGATIONAL/WEATHER AVOIDANCE"]=l("NW"),S["SI.M1.OMNI-LINE OF SIGHT (LOS)"]=l("OL"),S["SI.M1.PROXIMITY USE"]=l("PF"),S["SI.M1.POINT-TO-POINT LINE OF SIGHT (LOS)"]=l("PP"),S["SI.M1.INSTRUMENTATION"]=l("RI"),S["SI.M1.RANGE ONLY"]=l("RO"),S["SI.M1.SONOBUOY"]=l("SB"),S["SI.M1.SATELLITE DOWNLINK"]=l("SD"),S["SI.M1.SPACE"]=l("SP"),S["SI.M1.SURFACE SEARCH"]=l("SS"),S["SI.M1.SHELL TRACKING"]=l("ST"),S["SI.M1.SATELLITE UPLINK"]=l("SU"),S["SI.M1.TARGET ACQUISITION"]=l("TA"),S["SI.M1.TARGET ILLUMINATION"]=l("TI"),S["SI.M1.TROPOSPHERIC SCATTER"]=l("TS"),S["SI.M1.TARGET TRACKING"]=l("TT"),S["SI.M1.UNKNOWN"]=l("UN"),S["SI.M1.VIDEO REMOTING"]=l("VR"),S["SI.M1.EXPERIMENTAL"]=l("XP"),S["SI.M1.ALPHA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"A"},S["SI.M1.BRAVO"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"B"},S["SI.M1.CHARLIE"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"C"},S["SI.M1.DELTA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"D"},S["SI.M1.ECHO"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"E"},S["SI.M1.FOXTROT"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"F"},S["SI.M1.HOTEL"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"H"},S["SI.M1.INDY"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"I"},S["SI.M1.MIKE"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"M"},S["SI.M1.OSCAR"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"O"},S["SI.M1.PAPA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"P"},S["SI.M1.SIERRA"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"S"},S["SI.M1.TANGO"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"T"},S["SI.M1.UNIFORM"]={type:"text",stroke:!1,x:68,y:110,fontsize:25,text:"U"},S["SI.M2.ALPHA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"A"},S["SI.M2.BRAVO"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"B"},S["SI.M2.CHARLIE"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"C"},S["SI.M2.CYBER"]=r("CYB"),S["SI.M2.DELTA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"D"},S["SI.M2.ECHO"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"E"},S["SI.M2.FOXTROT"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"F"},S["SI.M2.GOLF"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"G"},S["SI.M2.INDY"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"I"},S["SI.M2.LIMA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"L"},S["SI.M2.MIKE"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"M"},S["SI.M2.NOVEMBER"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"N"},S["SI.M2.PAPA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"P"},S["SI.M2.SIERRA"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"S"},S["SI.M2.TANGO"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"T"},S["SI.M2.UNIFORM"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"U"},S["SI.M2.WHISKEY"]={type:"text",stroke:!1,x:132,y:110,fontsize:25,text:"W"},S["SI.M3.SPACE"]={type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"S"},S["SI.M3.GROUND"]={type:"text",stroke:!1,x:100,y:75,fontsize:25,text:"G"},S)S.hasOwnProperty(N)&&(I.hasOwnProperty(N)&&console.warn("Override of: "+N),n.call(this,S[N],T),I[N]=S[N])}var z={type:"letter",getMetadata:o,getIcons:M,iconParts:[f],icons:function(I,t,E,R){I["I-P-S-----"]=[],I["I-P-SC----"]=[],I["I-P-SCD---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.DELTA"],E["SI.M3.SPACE"]],I["I-P-SR----"]=[],I["I-P-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"],E["SI.M3.SPACE"]],I["I-P-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.SIERRA"],E["SI.M3.SPACE"]],I["I-P-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"],E["SI.M3.SPACE"]],I["I-P-SRM---"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"],E["SI.M3.SPACE"]],I["I-P-SRT---"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"],E["SI.M3.SPACE"]],I["I-P-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.PAPA"],E["SI.M3.SPACE"]],I["I-P-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"],E["SI.M3.SPACE"]],I["I-A-S-----"]=[],I["I-A-SC----"]=[],I["I-A-SCC---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.CHARLIE"],E["SI.M2.MIKE"]],I["I-A-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"]],I["I-A-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"]],I["I-A-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"]],I["I-A-SR----"]=[],I["I-A-SRAI--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.INDY"]],I["I-A-SRAS--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.BRAVO"]],I["I-A-SRC---"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.INDY"]],I["I-A-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"]],I["I-A-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"]],I["I-A-SRF---"]=[E["SI.IC.RADAR"],E["SI.M1.FOXTROT"],E["SI.M2.CHARLIE"]],I["I-A-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"]],I["I-A-SRMA--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ALPHA"]],I["I-A-SRMD--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.DELTA"]],I["I-A-SRMG--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.GOLF"]],I["I-A-SRMT--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.TANGO"]],I["I-A-SRMF--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"]],I["I-A-SRTI--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.INDY"]],I["I-A-SRTA--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"]],I["I-A-SRTT--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.TANGO"]],I["I-A-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"]],I["I-G-S-----"]=[],I["I-G-SC----"]=[],I["I-G-SCC---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.CHARLIE"],E["SI.M2.MIKE"],E["SI.M3.GROUND"]],I["I-G-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"],E["SI.M3.GROUND"]],I["I-G-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"],E["SI.M3.GROUND"]],I["I-G-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"],E["SI.M3.GROUND"]],I["I-G-SCT---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.TANGO"],E["SI.M2.SIERRA"],E["SI.M3.GROUND"]],I["I-G-SR----"]=[],I["I-G-SRAT--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRAA--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRB---"]=[E["SI.IC.RADAR"],E["SI.M1.BRAVO"],E["SI.M2.SIERRA"],E["SI.M3.GROUND"]],I["I-G-SRCS--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.SIERRA"],E["SI.M3.GROUND"]],I["I-G-SRCA--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"],E["SI.M3.GROUND"]],I["I-G-SRF---"]=[E["SI.IC.RADAR"],E["SI.M1.FOXTROT"],E["SI.M2.CHARLIE"],E["SI.M3.GROUND"]],I["I-G-SRH---"]=[E["SI.IC.RADAR"],E["SI.M1.HOTEL"],E["SI.M2.FOXTROT"],E["SI.M3.GROUND"]],I["I-G-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"],E["SI.M3.GROUND"]],I["I-G-SRMM--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ECHO"],E["SI.M3.GROUND"]],I["I-G-SRMA--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRMG--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.GOLF"],E["SI.M3.GROUND"]],I["I-G-SRMT--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRMF--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"],E["SI.M3.GROUND"]],I["I-G-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRTA--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"],E["SI.M3.GROUND"]],I["I-G-SRTI--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.INDY"],E["SI.M3.GROUND"]],I["I-G-SRTT--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.TANGO"],E["SI.M3.GROUND"]],I["I-G-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"],E["SI.M3.GROUND"]],I["I-S-S-----"]=[],I["I-S-SC----"]=[],I["I-S-SCC---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.CHARLIE"],E["SI.M2.MIKE"]],I["I-S-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"]],I["I-S-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"]],I["I-S-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"]],I["I-S-SR----"]=[],I["I-S-SRAT--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.TANGO"]],I["I-S-SRAA--"]=[E["SI.IC.RADAR"],E["SI.M1.ALPHA"],E["SI.M2.ALPHA"]],I["I-S-SRCA--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.ALPHA"]],I["I-S-SRCI--"]=[E["SI.IC.RADAR"],E["SI.M1.CHARLIE"],E["SI.M2.INDY"]],I["I-S-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"]],I["I-S-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"]],I["I-S-SRF---"]=[E["SI.IC.RADAR"],E["SI.M1.FOXTROT"],E["SI.M2.CHARLIE"]],I["I-S-SRH---"]=[E["SI.IC.RADAR"],E["SI.M1.HOTEL"],E["SI.M2.FOXTROT"]],I["I-S-SRI---"]=[E["SI.IC.RADAR"],E["SI.M1.INDY"],E["SI.M2.FOXTROT"]],I["I-S-SRMM--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ECHO"]],I["I-S-SRMA--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.ALPHA"]],I["I-S-SRMG--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.GOLF"]],I["I-S-SRMT--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.TANGO"]],I["I-S-SRMF--"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"]],I["I-S-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.SIERRA"]],I["I-S-SRTA--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"]],I["I-S-SRTI--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.INDY"]],I["I-S-SRTT--"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.TANGO"]],I["I-S-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"]],I["I-U-S-----"]=[],I["I-U-SC----"]=[],I["I-U-SCO---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.OSCAR"],E["SI.M2.LIMA"]],I["I-U-SCP---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.PAPA"],E["SI.M2.PAPA"]],I["I-U-SCS---"]=[E["SI.IC.COMMUNICATIONS"],E["SI.M1.SIERRA"],E["SI.M2.UNIFORM"]],I["I-U-SR----"]=[],I["I-U-SRD---"]=[E["SI.IC.RADAR"],E["SI.M1.DELTA"],E["SI.M2.TANGO"]],I["I-U-SRE---"]=[E["SI.IC.RADAR"],E["SI.M1.ECHO"],E["SI.M2.WHISKEY"]],I["I-U-SRM---"]=[E["SI.IC.RADAR"],E["SI.M1.MIKE"],E["SI.M2.FOXTROT"]],I["I-U-SRS---"]=[E["SI.IC.RADAR"],E["SI.M1.SIERRA"],E["SI.M2.SIERRA"]],I["I-U-SRT---"]=[E["SI.IC.RADAR"],E["SI.M1.TANGO"],E["SI.M2.ALPHA"]],I["I-U-SRU---"]=[E["SI.IC.RADAR"],E["SI.M1.UNIFORM"],E["SI.M2.NOVEMBER"]]}},H={type:"letter",getMetadata:o,getIcons:M,iconParts:[c],icons:function(I,t,E,R){I["O-V-A-----"]=[E["ST.IC.ARSON/FIRE"]],I["O-V-M-----"]=[E["ST.IC.KILLING VICTIM"]],I["O-V-MA----"]=[E["ST.IC.KILLING VICTIM"],E["ST.M1.MURDER"]],I["O-V-MB----"]=[E["ST.IC.KILLING VICTIM"],E["ST.M1.EXECUTION (WRONGFUL KILLING)"]],I["O-V-MC----"]=[E["ST.IC.KILLING VICTIM"],E["ST.M1.ASSASSINATION"]],I["O-V-B-----"]=[E["ST.IC.BOMB"]],I["O-V-Y-----"]=[E["ST.IC.BOOBY TRAP"]],I["O-V-D-----"]=[E["ST.IC.DRIVE-BY SHOOTING"]],I["O-V-S-----"]=[E["ST.IC.SNIPING"]],I["O-V-P-----"]=[E["ST.IC.POISONING"]],I["O-V-E-----"]=[E["ST.IC.EXPLOSION"]],I["O-V-EI----"]=[E["ST.IC.EXPLOSION"],E["ST.IC.IED"]],I["O-L-B-----"]=[E["ST.IC.BLACK LIST LOCATION"]],I["O-L-G-----"]=[E["ST.IC.GRAY LIST LOCATION"]],I["O-L-W-----"]=[E["ST.IC.WHITE LIST LOCATION"]],I["O-L-M-----"]=[E["ST.IC.MASS GRAVE LOCATION"]],I["O-O-P-----"]=[E["ST.IC.PATROLLING"]],I["O-O-R-----"]=[],I["O-O-RW----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.WILLING"]],I["O-O-RC----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.COERCED/IMPRESSED"]],I["O-O-D-----"]=[E["ST.IC.DEMONSTRATION"]],I["O-O-M-----"]=[E["ST.IC.MINE LAYING"]],I["O-O-Y-----"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"]],I["O-O-YT----"]=[E["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]],I["O-O-YW----"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["O-O-YH----"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.HOUSE-TO-HOUSE"]],I["O-O-F-----"]=[E["ST.IC.SEARCHING"]],I["O-O-S-----"]=[E["ST.IC.SPY"]],I["O-O-O-----"]=[E["ST.IC.FOOD DISTRIBUTION"]],I["O-O-E-----"]=[E["ST.IC.EXTORTION"]],I["O-O-H-----"]=[],I["O-O-HT----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HA----"]=[E["ST.IC.HIJACKING (AIRPLANE)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HV----"]=[E["ST.IC.HIJACKING (BOAT)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-K-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.KIDNAPPING"]],I["O-O-KA----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.KIDNAPPING"],E["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I["O-O-A-----"]=[E["ST.IC.ARREST"]],I["O-O-U-----"]=[E["ST.IC.DRUG RELATED ACTIVITIES"]],I["O-O-C-----"]=[E["ST.IC.COMPOSITE LOSS"]],I["O-O-CA----"]=[E["ST.IC.COMPOSITE LOSS"],E["ST.M1.COMBAT"]],I["O-O-CB----"]=[E["ST.IC.COMPOSITE LOSS"],E["ST.M1.ACCIDENT"]],I["O-O-CC----"]=[E["ST.IC.COMPOSITE LOSS"],E["ST.M1.OTHER"]],I["O-I-R-----"]=[E["ST.IC.GROUP"]],I["O-I-S-----"]=[E["ST.IC.SAFE HOUSE"]],I["O-I-G-----"]=[E["ST.IC.GRAFFITI"]],I["O-I-V-----"]=[E["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]],I["O-I-I-----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"]],I["O-I-D-----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.DRUG"]],I["O-I-F-----"]=[E["ST.IC.INTERNAL SECURITY FORCE"]],I["O-P-------"]=[E["ST.IC.INDIVIDUAL"]],I["O-P-A-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.LEADER"]],I["O-P-B-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.TARGETED"]],I["O-P-C-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.TERRORIST"]],I["O-G-------"]=[E["ST.IC.GROUP"]],I["O-G-A-----"]=[E["ST.IC.GROUP"],E["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],I["O-G-B-----"]=[E["ST.IC.GROUP"],E["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],I["O-G-C-----"]=[E["ST.IC.GROUP"],E["ST.M1.TERRORIST"]],I["O-G-D-----"]=[E["ST.IC.GROUP"],E["ST.M1.RELIGIOUS"]],I["O-G-E-----"]=[E["ST.IC.GROUP"],E["ST.M1.FOREIGN FIGHTERS"]],I["O-G-F-----"]=[E["ST.IC.GROUP"],E["ST.M1.GANG"]],I["O-R-------"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.RAPE"]],I["O-R-A-----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.RAPE"],E["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]]}};function V(I,t,E,R,e,A){var C=t.affiliation||"Friend",T="Hostile"!=C||e?E.iconColor[C]:"rgb(255, 0, 0)",S="Hostile"!=C||e?E.fillColor[C]:"rgb(255, 0, 0)",N=t.numberSIDC,O=E.white[C],G={};for(var o in G["TP.DESTROY"]=R||N?[{type:"path",fill:!1,d:"m 0,45 85,46.75 m 30,16.5 85,46.75 M 0,155 85,108.25 M 115,91.75 200,45"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"D"}]:{type:"path",fill:!1,strokedasharray:"12,5",d:"M 0,155 200,45 M 0,45 200,155"},G["TP.INTERDICT"]=R||N?[{type:"path",fill:!1,d:"m 194.203,65.6674 5.49,-20.4904 -20.49,-5.4904 M 115,91.75 200,45 M 0,155 85,108.25 M 185,85 l 15,15 -15,15 m -70,-15 85,0 m -200,0 85,0"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"I"}]:{type:"path",fill:!1,d:"m 0,100 200,0 M 0,155 200,45.2 M 185,85 l 15,15 -15,15 m 9.2,-49.3 5.5,-20.5 -20.5,-5.5"},G["TP.NEUTRALIZE"]=R||N?[{type:"path",fill:!1,d:"M 115,108.25 200,155 M 0,45 85,91.75"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 115,91.75 200,45 M 0,155 85,108.25"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"N"}]:[{type:"path",fill:!1,d:"M 0,45 200,155"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 0,155 200,45"}],G["TP.SUPPRESS"]=R||N?[{type:"path",fill:!1,strokedasharray:"12,5",d:"M 115,108.25 200,155 M 0,45 85,91.75"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 115,91.75 200,45 M 0,155 85,108.25"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"S"}]:[{type:"path",fill:!1,d:"M 0,45 200,155"},{type:"path",fill:!1,strokedasharray:"12,5",d:"M 0,155 200,45"}],G["TP.DATUM"]=[{type:"path",stroke:!1,d:"m 100,50 0,50 50,0 C 150,72.3858 127.614,50 100,50 Z m 0,50 -50,0 c 0,27.614 22.3858,50 50,50 z"},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["TP.BRIEF CONTACT"]=[{type:"path",d:"m 65,0 70,0 m -35,80 0,-80 m 0,100 -45,-20 90,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:75,y:55,fontsize:45,text:"B"},{type:"text",stroke:!1,textanchor:"middle",x:125,y:55,fontsize:45,text:"C"}],G["TP.LOST CONTACT"]=[{type:"path",d:"m 65,0 70,0 m -35,80 0,-80 m 0,100 -45,-20 90,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:75,y:55,fontsize:45,text:"L"},{type:"text",stroke:!1,textanchor:"middle",x:125,y:55,fontsize:45,text:"C"}],G["TP.SINKER"]=[{type:"path",fill:!1,d:"m 100,15 0,65 M 60,15 80,0 100,15 120,0 140,15"},{type:"path",d:"M 100,100 55,80 145,80 Z"}],G["TP.TRIAL TRACK"]=[{type:"path",d:"m 65,0 70,0 m -35,80 0,-80 m 0,100 -45,-20 90,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:75,y:55,fontsize:45,text:"T"},{type:"text",stroke:!1,textanchor:"middle",x:125,y:55,fontsize:45,text:"T"}],G["TP.SONOBUOY"]=[{type:"path",fill:!1,d:"M 100,60 l 0,-35 10,10 0,-45"},{type:"circle",fill:!1,cx:100,cy:100,r:40}],G["TP.SONOBUOY PATTERN CENTER"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"P"}],G["TP.SONOBUOY DIFAR"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"D"}],G["TP.SONOBUOY LOFAR"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"L"}],G["TP.SONOBUOY CASS"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"C"}],G["TP.SONOBUOY DICASS"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"S"}],G["TP.SONOBUOY BT"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"B"}],G["TP.SONOBUOY ANM"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"A"}],G["TP.SONOBUOY VLAD"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"V"}],G["TP.SONOBUOY ATAC"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"T"}],G["TP.SONOBUOY BARRA"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"BR"}],G["TP.SONOBUOY BATHYTHERMOGRAPH TRANSMITTING SONOBUOY (BT)"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"B"}],G["TP.SONOBUOY COMMAND ACTIVE MULTIBEAM SONOBUOY (CAMBS)"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"CM"}],G["TP.SONOBUOY EXPENDABLE RELIABLE ACOUSTIC PATH SONOBUOY (ERAPS)"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"E"}],G["TP.SONOBUOY RO"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"R"}],G["TP.SONOBUOY KINGPIN"]=[G["TP.SONOBUOY"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"K"}],G["TP.SONOBUOY EXPIRED"]=[G["TP.SONOBUOY"],{type:"path",fill:!1,d:"M 40,60 l 120,80 M 40,140 l 120,-80"}],G["TP.SEARCH"]={type:"path",d:"m 80,80 20,20 -20,20 40,0 -20,-20 20,-20 z M 50,150 150,50 M 50,50 150,150"},G["TP.SEARCH AREA"]=[G["TP.SEARCH"],R||N?[{type:"text",stroke:!1,textanchor:"middle",x:60,y:115,fontsize:45,text:"S"},{type:"text",stroke:!1,textanchor:"middle",x:140,y:115,fontsize:45,text:"A"}]:{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"SA"}],G["TP.DIP POSITION"]=[G["TP.SEARCH"],R||N?[{type:"text",stroke:!1,textanchor:"middle",x:60,y:115,fontsize:45,text:"D"},{type:"text",stroke:!1,textanchor:"middle",x:140,y:115,fontsize:45,text:"P"}]:{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"DIP"}],G["TP.SEARCH CENTER"]={type:"path",stroke:!1,d:"m 100,100 -50,10 0,-20 z m 0,0 10,50 -20,0 z m 0,0 50,-10 0,20 z m 0,0 -10,-50 20,0 z"},G["TP.REFERENCE POINT"]=[{type:"path",fill:!1,d:"M 160,160 40,160 40,40 160,40 Z"},{type:"circle",cx:100,cy:100,r:15}],G["TP.NAVIGATIONAL REFERENCE"]=!N&&R?{type:"path",fill:!1,d:"M 160,160 40,160 40,40 160,40 Z M 160,160 40,40 M 40,160 160,40"}:{type:"path",fill:!1,d:"M 160,160 40,40 M 40,160 160,40"},G["TP.SPECIAL POINT"]=[G["TP.NAVIGATIONAL REFERENCE"],{type:"circle",cx:100,cy:100,r:15}],G["TP.AIRFIELD"]=[{type:"path",fill:!1,d:"M 35,125 165,60 m -135,40 140,0"}],G["TP.DLRP"]=[G["TP.SPECIAL POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"D"}],G["TP.POINT OF INTENDED MOVEMENT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"P"}],G["TP.PRE-LANDFALL WAYPOINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"PL"}],G["TP.MARSHALL POINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"M"}],G["TP.REFERENCE POINT WAYPOINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"W"}],G["TP.CORRIDOR TAB"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"C"}],G["TP.ENEMY POINT"]=[G["TP.REFERENCE POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"ENY"}],G["TP.POINT OF INTEREST"]=[{type:"path",d:"M 129.021,41.957 C 121.48,49.9458 110.986,54.4816 100,54.5 89.0432,54.4928 78.569,49.9914 71.0234,42.0469 L 100,100 Z"},{type:"circle",fill:!1,cx:100,cy:15,r:40}],G["POINT OF INTEREST – LAUNCH EVENT"]=[G["TP.POINT OF INTEREST"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:30,fontsize:40,fontweight:"bold",text:"LE"}],G["TP.SHIP AREA OF INTEREST (AEGIS ONLY)"]={type:"circle",fill:!1,cx:100,cy:100,r:50},G["TP.ACTIVE MANOEUVRE AREA (AEGIS ONLY)"]={type:"circle",fill:!1,stroke:"rgb(254,203,47)",cx:100,cy:100,r:60},G["TP.PLAN SHIP"]=[{type:"circle",fill:S,stroke:S,cx:100,cy:100,r:15},{type:"circle",stroke:S,cx:100,cy:100,r:45,fill:!1}],G["TP.AIM POINT"]=[{type:"circle",cx:100,cy:100,r:15},{type:"circle",cx:100,cy:100,r:35,fill:!1},{type:"circle",cx:100,cy:100,r:45,fill:!1}],G["TP.DEFENDED ASSET"]={type:"path",fill:!1,d:"m 90,135 0,-30 20,0 0,30 m -50,0 0,-50 -10,0 0,-20 20,0 0,10 20,0 0,-10 20,0 0,10 20,0 0,-10 20,0 0,20 -10,0 0,50 z"},G["TP.CHEMICAL EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"C"}],G["TP.CHEMICAL – TOXIC INDUSTRIAL MATERIAL"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"C"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:30,text:"T"}],G["TP.BIOLOGICAL EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"B"}],G["TP.BIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"B"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:30,text:"T"}],G["TP.NUCLEAR EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"N"}],G["TP.RADIOLOGICAL EVENT"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"R"}],G["TP.RADIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"]=[{type:"path",fill:!1,d:"M 110,60 C 110,40 115,25 80,20 M 90,60 C 90,40 85,25 120,20 m -20,80 -60,-110 120,0 z"},{type:"path",d:"m 120,20 c 10,0 10,15 0,15 -10,0 -10,-15 0,-15 z M 80,35 c 10,0 10,-15 0,-15 -10,0 -10,15 0,15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30,text:"R"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:30,text:"T"}],G["TP.DROP POINT"]={type:"path",fill:!1,d:"m 130,100 0,-40 m -60,40 0,-40 m 60,40 0,0 c 0,8.284 -6.716,15 -15,15 -8.284,0 -15,-6.716 -15,-15 m 0,0 0,0 c 0,8.284 -6.7157,15 -15,15 -8.2843,0 -15,-6.716 -15,-15 m 30,-40 0,40"},G["TP.ENTRY POINT"]={type:"path",fill:!1,d:"m 100,100 0,-50 m -35,15 35,35 35,-35 m -85,35 100,0"},G["TP.AIR DETONATION"]={type:"path",d:"m 55,150 90,0 m -35,-95 5,20 15,-10 0,15 15,5 -15,10 15,10 -15,5 5,15 -20,-5 -5,20 -10,-15 -10,20 -5,-25 -20,10 5,-15 L 55,105 70,95 60,85 70,80 70,65 85,75 90,55 100,70 Z",fill:!1},G["TP.GROUND ZERO"]={type:"path",stroke:!1,d:"M 100 28 C 100 28 65.4398 29.8261 61.6543 55 C 60.2826 64.1213 75.0115 70.4884 82.2363 71.6543 C 89.4611 72.8201 91.7277 55.3462 98.5098 56.0371 L 93 90 C 93 90 70 90 67 97 C 65.0304 101.596 100 100 100 100 C 100 100 134.97 101.596 133 97 C 130 90 107 90 107 90 L 101.49 56.0371 C 108.272 55.3462 110.539 72.8201 117.764 71.6543 C 124.988 70.4884 139.718 64.1213 138.346 55 C 134.56 29.8261 100 28 100 28 z"},G["TP.LAUNCHED TORPEDO (AEGIS ONLY)"]={type:"path",d:"m 150,90 0,20 m -10,-10 10,0 m -97,-10 84,0 c 1.662,0 3,1.338 3,3 l 0,14 c 0,1.662 -1.338,3 -3,3 l -84,0 c -1.662,0 -3,-1.338 -3,-3 l 0,-14 c 0,-1.662 1.338,-3 3,-3 z"},G["TP.MSL DETECT POINT"]={type:"path",d:"m 95,100 0,-55 -10,0 15,-15 15,15 -10,0 0,55 m -55,0 100,0"},G["TP.ACOUSTIC COUNTER MEASURE (DECOY)"]={type:"path",d:"M 107.5,55 92.5518,70 107.5,85 Z M 50,30 150,30 m -90,70 0,-5 80,0 0,5 z m 70,-45 -15,15 15,15 z M 85,55 70,70 85,85 Z m 15,-25 0,33"},G["TP.ELECTRONIC COUNTER MEASURES (ECM) DECOY"]=[{type:"path",d:"m 80,120 -20,10 20,10 z m 30,0 -20,10 20,10 0,-20 z m 30,0 -20,10 20,10 z m -25,-20 c 0,10 -10,18 -19.4,14 -9.4,-2 -13.8,-14.7 -8,-22.5 5.2,-8.2 18.4,-8.7 24.4,-0.8 2,2.6 3,5.9 3,9.3 z"},{type:"path",fill:!1,d:"m 50,50 0,100 100,0 0,-100 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:80,fontsize:30,text:"ECM"}],G["TP.IMPACT POINT"]={type:"path",d:"m 50,100 40,-10 10,-40 10,40 40,10 -40,10 -10,40 -10,-40 -40,-10"},G["TP.PREDICTED IMPACT POINT"]={type:"path",fill:!1,strokedasharray:"12,5",d:"m 50,100 40,-10 10,-40 10,40 40,10 -40,10 -10,40 -10,-40 -40,-10"},G["TP.FORMATION"]={type:"path",fill:!1,d:"m 100,50 0,100 m -50,-50 100,0"},G["TP.HARBOR"]={type:"path",fill:!1,d:"M 80,140 50,60 150,60 120,140"},G["TP.HARBOR POINT Q"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"Q"}],G["TP.HARBOR POINT A"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"A"}],G["TP.HARBOR POINT Y"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"Y"}],G["TP.HARBOR POINT X"]=[G["TP.HARBOR"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"X"}],G["TP.ROUTE"]={type:"path",fill:!1,d:"m 138.484,76.82 c 0,-7.4823 6.066,-13.5478 13.548,-13.548 7.483,-3e-4 13.549,6.0653 13.549,13.548 m -27.097,0 0,0 c 0,6.9484 -5.634,12.5807 -12.582,12.58 -6.948,-4e-4 -12.58,-5.6324 -12.58,-12.58 m -27.097,0 c 2e-4,-7.4823 6.0657,-13.5478 13.548,-13.548 7.483,-3e-4 13.549,6.0653 13.549,13.548 m -79.3554,0 c 2e-4,-7.4824 6.066,-13.548 13.5484,-13.548 7.4824,0 13.5482,6.0656 13.5484,13.548 m 25.1616,0 0,0 C 86.2246,83.7681 80.5918,89.4003 73.6437,89.4 66.696,89.3998 61.0638,83.7677 61.0634,76.82 m 77.4206,47.328 c 0,-7.482 6.066,-13.548 13.548,-13.548 7.483,0 13.549,6.065 13.549,13.548 m -27.097,0 0,0 c 0,6.948 -5.634,12.581 -12.582,12.58 -6.948,0 -12.58,-5.632 -12.58,-12.58 m -27.097,0 c 2e-4,-7.482 6.0657,-13.548 13.548,-13.548 7.483,0 13.549,6.065 13.549,13.548 m -79.3554,0 c 2e-4,-7.482 6.066,-13.548 13.5484,-13.548 7.4824,0 13.5482,6.066 13.5484,13.548 m 25.1616,0 0,0 c -4e-4,6.948 -5.6332,12.58 -12.5813,12.58 -6.9477,0 -12.5799,-5.632 -12.5803,-12.58 m -27.0968,-23.664 132.5184,0"},G["TP.ROUTE RENDEZVOUS"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"R"}],G["TP.ROUTE DIVERSIONS"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"D"}],G["TP.ROUTE WAYPOINT"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"W"}],G["TP.ROUTE PIM"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"M"}],G["TP.ROUTE POINT R"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"P"}],G["TP.PICKET ROUTE"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"PK"}],G["TP.POINT R ROUTE"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"R"}],G["TP.RENDEZVOUS ROUTE"]=[G["TP.ROUTE"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:170,fontsize:45,text:"RZ"}],G["TP.AIR CONTROL"]={type:"path",fill:!1,d:"m 140,165 0,-130 m -80,0 0,130"},G["TP.AIR CONTROL POINT"]=[G["TP.AIR CONTROL"],{type:"circle",cx:100,cy:100,r:15}],G["TP.COMBAT AIR PATROL (CAP)"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"C"}],G["TP.AIRBORNE EARLY WARNING (AEW)"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"W"}],G["TP.TANKING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"K"},N||R?[]:{type:"circle",cx:100,cy:100,r:15}],G["TP.FIXED WING"]=[G["TP.AIR CONTROL"],N||R?[{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:R?"ASW":"AS"},{type:"path",d:R?"m 100,81.3203 c -1.5135,-0 -2.5365,2.6426 -2.5365,2.6426 l -0.1365,14.1465 -28.3641,29.9996 0.1484,4.604 28.5162,-18.748 -0.2929,24.43 -6.3073,6.017 -0.096,3.766 8.0313,-3.524 1.0312,3.326 0,0.02 0,-0.01 0,0.01 0,-0.02 1.0312,-3.326 8.031,3.524 -0.09,-3.766 -6.309,-6.017 -0.293,-24.43 28.518,18.748 0.146,-4.604 -28.364,-29.9996 -0.136,-14.1465 c 0,0 -1.014,-2.6416 -2.528,-2.6426 z":"M 80,88.3 C 60,80 60,120 80,111.4 L 100.2,99.9 120,111.3 C 140,120 140,80 120,88.6 l -19.8,11.3 z",stroke:!1}]:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"F"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.ROTARY WING"]=[G["TP.AIR CONTROL"],N||R?[{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:"ASW"},{type:"path",d:"m 65,80 0,40 70,-40 0,40 -70,-40",stroke:!1}]:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"H"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.SUCAP - FIXED WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:"SUW"},{type:"path",d:R?"m 100,81.3203 c -1.5135,-0 -2.5365,2.6426 -2.5365,2.6426 l -0.1365,14.1465 -28.3641,29.9996 0.1484,4.604 28.5162,-18.748 -0.2929,24.43 -6.3073,6.017 -0.096,3.766 8.0313,-3.524 1.0312,3.326 0,0.02 0,-0.01 0,0.01 0,-0.02 1.0312,-3.326 8.031,3.524 -0.09,-3.766 -6.309,-6.017 -0.293,-24.43 28.518,18.748 0.146,-4.604 -28.364,-29.9996 -0.136,-14.1465 c 0,0 -1.014,-2.6416 -2.528,-2.6426 z":"M 80,88.3 C 60,80 60,120 80,111.4 L 100.2,99.9 120,111.3 C 140,120 140,80 120,88.6 l -19.8,11.3 z",stroke:!1}],G["TP.SUCAP - ROTARY WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:"ASW"},{type:"path",d:"m 65,80 0,40 70,-40 0,40 -70,-40",stroke:!1}],G["TP.MIW - FIXED WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:R?"MIW":"MW"},{type:"path",d:R?"m 100,81.3203 c -1.5135,-0 -2.5365,2.6426 -2.5365,2.6426 l -0.1365,14.1465 -28.3641,29.9996 0.1484,4.604 28.5162,-18.748 -0.2929,24.43 -6.3073,6.017 -0.096,3.766 8.0313,-3.524 1.0312,3.326 0,0.02 0,-0.01 0,0.01 0,-0.02 1.0312,-3.326 8.031,3.524 -0.09,-3.766 -6.309,-6.017 -0.293,-24.43 28.518,18.748 0.146,-4.604 -28.364,-29.9996 -0.136,-14.1465 c 0,0 -1.014,-2.6416 -2.528,-2.6426 z":"M 80,88.3 C 60,80 60,120 80,111.4 L 100.2,99.9 120,111.3 C 140,120 140,80 120,88.6 l -19.8,11.3 z",stroke:!1}],G["TP.MIW - ROTARY WING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:32,text:R?"MIW":"MW"},{type:"path",d:"m 65,80 0,40 70,-40 0,40 -70,-40",stroke:!1}],G["TP.STRIKE IP"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"S"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"S"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.CORRIDOR TAB POINT"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"C"},{type:"circle",cx:100,cy:100,r:15}],G["TP.AIR CONTROL RENDEZVOUS"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"RZ"}],G["TP.CAP STATION"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"C"}],G["TP.AEW STATION"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"W"}],G["TP.TACAN"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"T"},N||R?[]:{type:"circle",cx:100,cy:100,r:15}],G["TP.REPLENISHMENT STATION"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"RP"}],G["TP.TANKING"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:N||R?115:155,fontsize:45,text:"K"}],G["TP.TOMCAT"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"TC"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"O"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.RESCUE"]=[G["TP.AIR CONTROL"],N?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RS"}:R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RC"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"R"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.REPLENISH"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RP"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"F"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.MARSHALL"]=[G["TP.AIR CONTROL"],N||R?{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"M"}:[{type:"text",stroke:!1,textanchor:"middle",x:100,y:155,fontsize:45,text:"M"},{type:"circle",cx:100,cy:100,r:15}]],G["TP.UNMANNED AERIAL SYSTEM"]=[G["TP.AIR CONTROL"],{type:"path",stroke:!1,d:"m 70,85 30,15 30,-15 0,15 -30,15 -30,-15 z"}],G["TP.VTUA"]=[G["TP.AIR CONTROL"],{type:"path",stroke:!1,d:"m 70,95 30,15 30,-15 0,30 -30,-15 -30,15 z m 0,-25 30,15 30,-15 0,15 -30,15 -30,-15 z"}],G["TP.ORBIT"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"}],G["TP.ORBIT - FIGURE EIGHT"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"F8"}],G["TP.ORBIT - RACE TRACK"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"RT"}],G["TP.ORBIT - RANDOM, CLOSED"]=[G["TP.AIR CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"O"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:150,fontsize:40,text:"RC"}],G["TP.ACTION POINT"]={type:"path",fill:!1,d:"m 60,45 80,0 m -40,55 -40,-55 0,-105 80,0 0,105 z"},G["TP.ACTION CHECK POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CKP"}],G["TP.CONTACT POINT"]=N?{type:"path",fill:!1,d:"M 50,50 150,50 150,150 50,150z"}:{type:"path",fill:!1,d:"m 100,100 0,-35 -45,0 0,-75 90,0 0,75 -45,0"},G["TP.CENTRE OF MAIN EFFORT"]=[{type:"path",fill:!1,d:"m 155,100 0,-35 M 45,100 45,65 m 88,0 0,35 m -22,-35 0,35 m -22,-35 0,35 m -22,0 0,-35 m -37,70 0,-35 140,0 0,40"}],G["TP.COORDINATION POINT"]=[{type:"path",fill:!1,d:"m 65,135 70,-70 m -70,0 70,70"},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["TP.DECISION POINT"]={type:"path",fill:!1,d:"M 99.9998,25.5886 117.061,76.5192 170.77,77.0054 127.604,108.968 143.738,160.2 100,129.024 56.2624,160.2 72.3967,108.968 29.2306,77.0059 82.9403,76.5192 Z"},G["TP.DISTRESS CALL"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"SOS"}],G["TP.ENTRY CONTROL POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"EC"}],G["TP.FLY-TO-POINT (SONOBUOY)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FTP"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:35,text:"SBY"}],G["TP.FLY-TO-POINT (WEAPON)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FTP"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:35,text:"WPN"}],G["TP.FLY-TO-POINT (NORMAL)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FTP"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:20,fontsize:35,text:"NRM"}],G["TP.ACTION LINKUP POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"LU"}],G["TP.ACTION PASSAGE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"PP"}],G["TP.ACTION RALLY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"RLY"}],G["TP.ACTION RELEASE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"RP"}],G["TP.ACTION START POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"SP"}],G["TP.ACTION AMNESTY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"AMN"}],G["TP.WAYPOINT"]={type:"path",fill:!1,strokewidth:8,d:"m 65,135 70,-70 m -70,0 70,70"},G["TP.COMBATANT STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"CBT"}],G["TP.PICKET STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"PKT"}],G["TP.ASW SHIP STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"ASW"}],G["TP.REPLENISHMENT AT SEA (RAS) STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"RAS"}],G["TP.RESCUE STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"RSC"}],G["TP.SUBMARINE STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"SUB"}],G["TP.ASW SUBMARINE STATION"]=[G["TP.WAYPOINT"],{type:"text",stroke:!1,textanchor:"end",x:75,y:115,fontsize:40,text:"ASW/SUB"}],G["TP.SEA SURFACE CONTROL"]={type:"path",fill:!1,d:"m 30,60 140,0 m -140,80 140,0"},G["TP.SEA SURFACE CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"circle",cx:100,cy:100,r:15}],G["TP.(USV) CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 100,115 45,-20 0,-15 -45,20 -45,-20 0,15 z"}],G["TP.(USV)"]=[G["TP.SEA SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 55,100 45,20 45,-20 0,15 -45,20 -45,-20 z"}],G["TP.(RMV) USV CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"RMV"}],G["TP.USV - ASW CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"ASW"}],G["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SURFACE STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MW"}],G["TP.USV - SUW CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"SUW"}],G["TP.USV - MIW CONTROL STATION"]=[G["TP.(USV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MIW"}],G["TP.ASW CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"ASW"}],G["TP.MINE WARFARE SURFACE STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"MW"}],G["TP.NON-COMBATANT SURFACE STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"NC"}],G["TP.SUW CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"SUW"}],G["TP.MIW CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"MIW"}],G["TP.PICKET CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"PK"}],G["TP.RENDEZVOUS CONTROL POINT"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RZ"}],G["TP.REPLENISHMENT AT SEA SURFACE STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RAS"}],G["TP.RESCUE CONTROL POINT"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RS"}],G["TP.REPLENISHMENT CONTROL POINT"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"RP"}],G["TP.NONCOMBATANT CONTROL STATION"]=[G["TP.SEA SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,text:"NC"}],G["TP.SUB SURFACE CONTROL"]=[{type:"path",fill:!1,d:"m 30,140 140,0"},{type:"path",fill:!1,strokedasharray:"12,4",d:"m 30,60 140,0"}],G["TP.SUB SURFACE CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"circle",cx:100,cy:100,r:15}],G["TP.(UUV) CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 100,115 45,-20 0,-15 -45,20 -45,-20 0,15 z"}],G["TP.(UUV)"]=[G["TP.SUB SURFACE CONTROL"],{type:"path",stroke:!1,d:"m 55,100 45,20 45,-20 0,15 -45,20 -45,-20 z"}],G["TP.UUV - ASW CONTROL STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"ASW"}],G["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SUBSURFACE STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MW"}],G["TP.UUV - SUW CONTROL STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"SUW"}],G["TP.UUV - MIW CONTROL STATION"]=[G["TP.(UUV)"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:95,fontsize:40,text:"MIW"}],G["TP.SUBMARINE CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:130,fontsize:35,text:"SS"},{type:"path",d:"m 75,95 0,-20 50,0 0,20 z m 25,-30 0,40"}],G["TP.ASW SUBMARINE CONTROL STATION"]=[G["TP.SUB SURFACE CONTROL"],{type:"path",d:"m 68.75,105 -12.5,12.5 12.5,12.5 62.5,0 12.5,-12.5 -12.5,-12.5 z M 75,95 l 0,-20 50,0 0,20 z m 25,-30 0,40"}],G["TP.AIR CONTROL POINT (ACP)"]=[{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"text",stroke:!1,textanchor:"middle",x:100,y:90,fontsize:30,text:"ACP"}],G["TP.COMMUNICATIONS CHECKPOINT"]=[{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"text",stroke:!1,textanchor:"middle",x:100,y:90,fontsize:30,text:"CCP"}],G["TP.PULL-UP POINT"]=[{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"text",stroke:!1,textanchor:"start",x:160,y:115,fontsize:40,text:"PUP"},{type:"path",fill:!1,d:"m 65,80 0,40 70,-40 0,40 z"}],G["TP.DOWNED AIRCREW PICKUP POINT"]=[G["TP.ACTION POINT"],{type:"circle",cx:100,cy:-35,r:12},{type:"path",fill:!1,d:"m 75,35 50,0 m -25,-45 0,45 m -30,-75 30,30 30,-30"}],G["TP.DUMMY MINEFIELD"]=[{type:"path",fill:!1,d:"m 75,100 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z m 70,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -35,0 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z m -70,-40 0,80 120,0 0,-80 z"},{type:"path",fill:!1,strokedasharray:"15,10",d:"M 160,60 100,-5 M 40,60 100,-5"}],G["TP.TARGET REFERENCE"]={type:"path",fill:!1,d:"m 50,100 100,0 m -50,-50 0,100"},G["TP.OBSERVATION POST/OUTPOST"]={type:"path",fill:!1,d:"m 100,45 47.6,82.5 -95.2,0 z"},G["TP.COMBAT OUTPOST"]={type:"path",fill:!1,d:"m 140,140 0,-12.5 m -16,12.5 0,-12.5 m -16,12.5 0,-12.5 m -48.0001,12.5 3e-4,-12.5 m 15.9993,12.5 4e-4,-12.501 m 16,12.501 3e-4,-12.5 m -46.43,-12.493 10.8256,6.25 m -2.8256,-20.107 10.8256,6.251 m -2.8257,-20.1071 10.8257,6.2506 m 13.1743,-47.8198 10.8257,6.2506 m -18.8253,7.6056 10.8256,6.2506 m -18.826,7.606 10.8257,6.2506 M 114.43,45.725 l -10.826,6.25 m 18.826,7.6064 -10.826,6.25 m 18.826,7.6064 -10.826,6.25 m 34.826,35.3192 -10.826,6.25 m 2.826,-20.106 -10.826,6.25 m 2.826,-20.1068 -10.826,6.25 M 99.9998,45 l 47.6312,82.5 -95.2623,0 z"},G["TP.OBSERVATION POST/RECONNAISSANCE"]={type:"path",fill:!1,d:"M 52.3687,127.5 123.816,86.2499 M 99.9998,45 l 47.6312,82.5 -95.2623,0 z"},G["TP.FORWARD OBSERVER POSITION"]=[G["TP.OBSERVATION POST/RECONNAISSANCE"],{type:"path",d:"m 115,100 c 0,8.284 -6.716,15 -15,15 -8.2843,0 -15,-6.716 -15,-15 0,-8.2843 6.7157,-15 15,-15 8.284,0 15,6.7157 15,15 z"}],G["TP.SENSOR OUTPOST"]=N?[{type:"path",fill:!1,d:"M 99.9998,45 l 47.6312,82.5 -95.2623,0 z"},{type:"path",stroke:!1,d:"m 100,80 c 0,7.5 12.5,20 20,20 -7.5,0 -20,12.5 -20,20 0,-7.5 -12.5,-20 -20,-20 7.5,0 20,-12.5 20,-20 z"}]:{type:"path",fill:!1,d:"m 61.1738,112.25 23.6601,0 m 30.3321,0 23.66,0 M 80,105 l 10,15 20,0 10,-15 z m 19.9998,-60 47.6312,82.5 -95.2623,0 z"},G["TP.CBRN OBSERVATION POST"]=[{type:"path",fill:!1,d:"m 99.9998,45 47.6312,82.5 -95.2623,0 z M 88,119 c 2.1824,-13.288 7.7157,-24.22 22,-29 m 1.829,29 C 109.664,105.712 104.173,94.78 90,90 M 52.3687,127.5 123.816,86.2499"},{type:"path",d:"m 91,92 c 0,2.7614 -2.2386,5 -5,5 -2.7614,0 -5,-2.2386 -5,-5 0,-2.7614 2.2386,-5 5,-5 2.7614,0 5,2.2386 5,5 z m 28.011,0 c 0,2.7678 -2.243,5.0117 -5.011,5.012 -2.768,-3e-4 -5.011,-2.2442 -5.011,-5.012 0,-2.7676 2.243,-5.0112 5.011,-5.0115 2.768,3e-4 5.011,2.2439 5.011,5.0115 z"}],G["TP.POINT OF DEPARTURE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"PD"}],G["TP.FIXED AND PREFABRICATED"]={type:"path",d:"m 60,100 40,-65 40,65 z"},G["TP.TETRAHEDRONS"]={type:"path",fill:!1,d:"m 60,100 40,-65 40,65"},G["TP.TETRAHEDRONS MOVABLE"]={type:"path",fill:!1,d:"m 60,100 40,-65 40,65 z"},G["TP.BOOBY TRAP"]={type:"path",fill:!1,d:"M 77.2413,87.9311 100,50 122.781,87.9687 M 130,100 c 0,10.24 -13.431,18.541 -30,18.541 -16.5685,0 -30,-8.301 -30,-18.541 0,-10.2399 13.4315,-18.541 30,-18.541 16.569,0 30,8.3011 30,18.541 z"},G["TP.UNSPECIFIED MINE"]={type:"path",fill:!1,d:"m 129,100 c 0,16.016 -12.984,29 -29,29 -16.0163,0 -29,-12.984 -29,-29 0,-16.0163 12.9837,-29 29,-29 16.016,0 29,12.9837 29,29 z"},G["TP.ANTITANK MINE (AT)"]={type:"path",d:"m 129,100 c 0,16.016 -12.984,29 -29,29 -16.0163,0 -29,-12.984 -29,-29 0,-16.0163 12.9837,-29 29,-29 16.016,0 29,12.9837 29,29 z"},G["TP.(AT) ANTIHANDLING DEVICE"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 100,130 0,65 15,-15"}],G["TP.(AT) DIRECTIONAL"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,strokedasharray:"5,5",d:"m 100,70 0,-60"},{type:"path",fill:!1,d:"m 90,20 10,-10 10,10"}],G["TP.ANTIPERSONNEL (AP) MINES"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 50,50 29.5,29.5 m 41,0 L 150,50"}],G["TP.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 131,100 10,0 M 50,50 79.5,79.5 m 41,0 L 150,50 m -4,50 10,0 m 5,0 10,0 m -10,-10 10,10 -10,10"}],G["TP.WIDE AREA MINES"]=[G["TP.ANTITANK MINE (AT)"],{type:"path",fill:!1,d:"m 50,110 25,40 12,-24 M 113,126 125,150 150,110"}],G["TP.PLANNED MINEFIELD"]=[{type:"path",fill:!1,strokedasharray:"15,15",d:"m 40,65 0,70 120,0 0,-70 z"},{type:"path",fill:!1,d:"m 75,100 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z m 70,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -35,0 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z"}],G["TP.MINEFIELDS STATIC"]={type:"path",fill:!1,d:"m 40,65 0,70 120,0 0,-70 z m 70,35 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z m 35,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -70,0 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z"},G["TP.MINEFIELD, STATIC"]={type:"path",fill:!1,d:"m 25,65 0,70 150,0 0,-70 z"},t.notpresent&&(G["TP.MINEFIELDS STATIC"]=G["TP.PLANNED MINEFIELD"]),G["TP.ANTITANK (AT) MINEFIELD"]=[{type:"path",fill:!1,d:"m 40,65 0,70 120,0 0,-70 z"},{type:"path",d:"m 75,100 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z m 70,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -35,0 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z"}],G["TP.SCATTERABLE MINES"]=[G["TP.MINEFIELDS STATIC"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"S"}],G["TP.ANTIPERSONNEL (AP) MINEFIELD"]=[{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"+S"},{type:"path",fill:!1,d:"m 40,65 0,70 120,0 0,-70 z"},{type:"path",d:"M 72.0703,92.9297 80,82.3622 m -30,0 7.9297,10.5675 m 49.1403,0 7.93,-10.5675 m -30,0 7.9297,10.5675 m 49.1403,0 7.93,-10.5675 m -30,0 7.93,10.5675 M 110,100 c 0,5.523 -4.477,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z m 35,0 c 0,5.523 -4.477,10 -10,10 -5.523,0 -10,-4.477 -10,-10 0,-5.5228 4.477,-10 10,-10 5.523,0 10,4.4772 10,10 z m -70,0 c 0,5.523 -4.4772,10 -10,10 -5.5228,0 -10,-4.477 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.5228,0 10,4.4772 10,10 z"}],G["TP.SCATTERABLE MINEFIELD WITH SELF-DESTRUCT"]=[G["TP.ANTITANK (AT) MINEFIELD"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"S"}],G["TP.VOLCANO MINEFIELD"]=[G["TP.ANTITANK (AT) MINEFIELD"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:60,fontsize:35,text:"V"}],G["TP.TOWER LOW"]=[{type:"circle",stroke:!1,cx:100,cy:100,r:7},{type:"path",fill:!1,strokewidth:8,d:"m 75,105 25,-65 25,65"}],G["TP.TOWER HIGH"]=[{type:"circle",stroke:!1,cx:100,cy:100,r:7},{type:"path",fill:!1,strokewidth:8,d:"m 100,40 c 2.358,31.6754 7.162,59.2531 25,64.999 M 100,40 c -2.358,31.6754 -7.1624,59.2531 -25,65"}],G["TP.ENGINEER REGULATING POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ERP"}],G["TP.EARTHWORK/FORTIFICATION"]={type:"path",d:"m 65,65 0,70 70,0 0,-70 -70,0z"},G["TP.FORT"]={type:"path",fill:!1,d:"m 135,65 15,-15 m -15,85 15,15 M 65,135 50,150 m 15,-85 0,70 70,0 0,-70 -70,0 -15,-15"},G["TP.SURFACE SHELTER"]={type:"path",d:"m 135,135 15,0 m -100,0 15,0 m 0,-70 0,70 70,0 0,-70 -70,0"},G["TP.UNDERGROUND SHELTER"]={type:"path",d:"m 135,65 15,0 m -100,0 15,0 m 0,70 0,-70 70,0 0,70 -70,0"},G["TP.NUCLEAR DETONATIONS GROUND ZERO"]=[{type:"path",fill:!e&&"rgb(255,255,0)",d:"m 85,25 0,75 30,0 0,-75 m -50,0 c 0,-50 70,-50 70,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:35,text:"N"}],G["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"]=[{type:"path",strokedasharray:"5,5",fill:!e&&"rgb(255,255,0)",d:"m 85,25 0,75 30,0 0,-75 m -50,0 c 0,-50 70,-50 70,0 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:35,text:"N"}],G["TP.NUCLEAR FALLOUT PRODUCING"]=[{type:"path",fill:!1,d:"m 120,85 -15,15 m -25,0 40,-35 M 80,80 120,40 M 80,55 115,25 M 80,40 95,25 m -40,0 c 0,-60 90,-60 90,0 z m 25,0 0,75 40,0 0,-75"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:75,fontsize:35,text:"N"}],G["TP.RELEASE EVENTS BIOLOGICAL"]=[{type:"path",fill:!e&&"rgb(255,255,0)",d:"m 85,-15 0,60 -25,55 80,0 -25,-55 0,-60 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:85,fontsize:35,text:"B"},{type:"text",stroke:!1,textanchor:"end",x:50,y:60,fontsize:35,text:"BIO"}],G["TP.RELEASE EVENTS CHEMICAL"]=[{type:"path",fill:!e&&"rgb(255,255,0)",d:"m 85,-15 0,59.0625 C 75.7313,49.4137 70.0154,59.2975 70,70 c 0,16.5685 13.4315,30 30,30 16.569,0 30,-13.4315 30,-30 -0.01,-10.7067 -5.728,-20.5959 -15,-25.9492 L 115,-15 Z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:80,fontsize:35,text:"C"},{type:"text",stroke:!1,textanchor:"end",x:50,y:60,fontsize:35,text:"CML"}],G["TP.DECON SITE/POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DCN"}],G["TP.ALTERNATE DECON SITE/POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"ALT"}],G["TP.DECON SITE/POINT (TROOPS)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"T"}],G["TP.DECON SITE/POINT (EQUIPMENT)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"E"}],G["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"E/T"}],G["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"O"}],G["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"TH"}],G["TP.MAIN EQUIPMENT DECONTAMINATION POINT/SITE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:30,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:-10,fontsize:25,text:"(M)"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:13,fontsize:25,text:"E"}],G["TP.FORWARD TROOP DECONTAMINATION POINT/SITE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:30,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:-10,fontsize:25,text:"(F)"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:13,fontsize:25,text:"T"}],G["TP.WOUNDED PERSONNEL DECONTAMINATION SITE"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:0,fontsize:35,text:"W"}],G["TP.AMBULANCE CONTROL POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ACP"}],G["TP.AMBULANCE LOAD POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ALP"}],G["TP.AMBULANCE RELAY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ARP"}],G["TP.DECON POINT (MAIN) EQUIPMENT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,text:"(M)E"}],G["TP.DECON POINT (FORWARD) TROOPS"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DCN"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,text:"(F)T"}],G["TP.POINT/SINGLE TARGET"]={type:"path",fill:!1,d:"m 50,100 100,0 m -50,-50 0,100"},G["TP.KNOWN POINT"]=[{type:"path",fill:!1,d:"m 50,100 100,0 m -50,-50 0,100"},{type:"text",stroke:!1,textanchor:"start",x:110,y:80,fontsize:30,text:"KNP"}],G["TP.NUCLEAR TARGET"]={type:"path",fill:!1,d:"m 90,100 -40,0 m 50,10 0,40 m 10,-50 40,0 m -50,-10 0,-40 m 2.5,50 c 0,1.381 -1.119,2.5 -2.5,2.5 -1.3807,0 -2.5,-1.119 -2.5,-2.5 0,-1.3807 1.1193,-2.5 2.5,-2.5 1.381,0 2.5,1.1193 2.5,2.5 z"},G["TP.TARGETRECORDED (AEGIS ONLY)"]=[{type:"path",fill:!1,d:"m 0,50 0,100 200,0 0,-100 z"},{type:"path",stroke:!1,d:"m 100,90 -10,10 10,10 10,-10 z"}],G["TP.FIRE SUPPORT STATION"]=[{type:"path",fill:!1,d:"M 50,50 150,150 M 50,150 150,50"},N?{type:"text",stroke:!1,textanchor:"left",x:120,y:110,fontsize:35,text:"FSS"}:[]],G["TP.SURVEY CONTROL POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"SCP"}],G["TP.FIRING POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"FP"}],G["TP.RELOAD POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"RLP"}],G["TP.HIDE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"HP"}],G["TP.LAUNCH POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"LP"}],G["TP.AMBULANCE EXCHANGE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"AXP"}],G["TP.CANNIBALIZATION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CAN"}],G["TP.CASUALTY COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CCP"}],G["TP.CIVILIAN COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"CIV"}],G["TP.DETAINEE COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"DET"}],G["TP.EPW COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"EPW"}],G["TP.LOGISTICS RELEASE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"LRP"}],G["TP.MAINTENANCE COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"MCP"}],G["TP.MEDICAL EVACUATION (MEDEVAC) PICKUP POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-30,fontsize:30,text:"MEP"},{type:"path",stroke:!1,d:"m 95,-25 0,10 -10,0 0,10 10,0 0,10 10,0 0,-10 10,0 0,-10 -10,0 0,-10 z"}],G["TP.REARM, REFUEL AND RESUPPLY POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"R3P"}],G["TP.REFUEL ON THE MOVE POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ROM"}],G["TP.TRAFFIC CONTROL POST"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"TCP"}],G["TP.TRAILER TRANSFER POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"TTP"}],G["TP.UNIT MAINTENANCE COLLECTION POINT"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:25,text:"UMCP"}],G["TP.SUPPLY POINT"]={type:"path",fill:!1,d:"m 60,30 80,0 m -80,15 80,0 m -40,55 -40,-55 0,-105 80,0 0,105 z"},G["TP.NATO CLASS I"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"I"}],G["TP.NATO CLASS II"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"II"}],G["TP.NATO CLASS III"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"III"}],G["TP.NATO CLASS IV"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:45,text:"IV"}],G["TP.NATO CLASS V"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 80,-10 40,0 m -32,0 0,-26.7 c 0,-17.8 24,-17.8 24,0 L 112,-10"}],G["TP.SP CLASS I"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 115,-50 c -45,5 -45,65 0,70 -20,-25 -20,-50 0,-70 z"}],G["TP.SP CLASS II"]=[G["TP.SUPPLY POINT"],{type:"path",stroke:!1,d:"m 101.143,3.91602 q 3.662,-0.26368 4.746,-1.08399 1.084,-0.84961 1.084,-4.33594 l 0,-26.68949 q 0,-3.3105 -1.084,-4.248 -1.084,-0.9668 -4.746,-1.1426 l 0,-1.1133 17.753,0 0,1.1133 q -3.662,0.1758 -4.746,1.1426 -1.084,0.9375 -1.084,4.248 l 0,26.68949 q 0,3.48633 1.084,4.33594 1.084,0.82031 4.746,1.08399 l 0,1.08398 -17.753,0 0,-1.08398 z m 8.877,-38.61332 0,0 z M 81.1035,3.91602 q 3.6621,-0.26368 4.7461,-1.08399 1.084,-0.84961 1.084,-4.33594 l 0,-26.68949 q 0,-3.3105 -1.084,-4.248 -1.084,-0.9668 -4.7461,-1.1426 l 0,-1.1133 17.7539,0 0,1.1133 q -3.6621,0.1758 -4.7461,1.1426 -1.084,0.9375 -1.084,4.248 l 0,26.68949 q 0,3.48633 1.084,4.33594 1.084,0.82031 4.7461,1.08399 l 0,1.08398 -17.7539,0 0,-1.08398 z m 8.877,-38.61332 0,0 z"}],G["TP.SP CLASS III"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 100,20 0,-30 -20,-40 40,0 -20,40"}],G["TP.SP CLASS IV"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 100,-40 0,20 m -25,10 0,-30 50,0 0,30"}],G["TP.SP CLASS V"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 80,15 0,-50 c 0,-20 40,-20 40,0 l 0,50 m -50,0 60,0"}],G["TP.SP CLASS VI"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 75,-20 50,0 m -25,15 15,25 m -15,-50 0,25 -20,25 m 30,-60 c 0,5.5228 -4.477,10 -10,10 -5.5228,0 -10,-4.4772 -10,-10 0,-5.5228 4.4772,-10 10,-10 5.523,0 10,4.4772 10,10 z"}],G["TP.SP CLASS VII"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 85,-25 c 10,-10 20,-10 30,0"},{type:"path",d:"m 129.6,-20 c 0,5.3019 -4.298,9.5999 -9.6,9.5998 -5.302,10e-5 -9.6,-4.2979 -9.6,-9.5998 0,-5.3019 4.298,-9.5999 9.6,-9.5998 5.302,-1e-4 9.6,4.2979 9.6,9.5998 z m -40.4886,0 c 0,5.0321 -4.0793,9.1114 -9.1114,9.1114 -5.0321,0 -9.1114,-4.0793 -9.1114,-9.1114 0,-5.0321 4.0793,-9.1114 9.1114,-9.1114 5.0321,0 9.1114,4.0793 9.1114,9.1114 z"}],G["TP.SP CLASS VIII"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 60,-15 80,0 m -40,-45 0,90"}],G["TP.SP CLASS IX"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 121.213,-36.2132 -7.08,7.0802 M 85.8669,-0.866982 78.7868,6.2132 m 0,-42.4264 7.0801,7.0802 m 28.2661,28.266018 7.08,7.080182 M 100,-45 l 0,10 m 0,40 0,10 m -30,-30 10,0 m 40,0 10,0 m -10,0 c 0,11.04569 -8.954,20 -20,20 -11.0457,0 -20,-8.95431 -20,-20 0,-11.0457 8.9543,-20 20,-20 11.046,0 20,8.9543 20,20 z"}],G["TP.SP CLASS X"]=[G["TP.SUPPLY POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-10,fontsize:40,text:"CA"}],G["TP.MEDICAL SUPPLY POINT"]=[G["TP.SUPPLY POINT"],{type:"path",fill:!1,d:"m 100,-20 0,-40 m -40,25 80,0"}],G["TP.AMMUNITION SUPPLY POINT (ASP)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ASP"}],G["TP.AMMUNITION TRANSFER POINT (ATP)"]=[G["TP.ACTION POINT"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,text:"ATP"}],G["TP.TARGET HANDOVER"]=[{type:"path",strokedasharray:"10,5",fill:!1,d:"m 100,45 -15,40 -40,15 40,15 15,40 15,-40 40,-15 -40,-15 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:110,fontsize:30,text:"TH"}],G["TP.KEY TERRAIN"]=[{type:"path",d:"m 145,100 a 45,45 0 0 1 -45,45 45,45 0 0 1 -45,-45 45,45 0 0 1 45,-45 45,45 0 0 1 45,45 z"},{type:"text",stroke:!1,textanchor:"middle",x:80,y:110,fontsize:35,text:"K",fill:O}],G["TP.BT BOUY DROP"]=[{type:"path",fill:!1,d:"m 65,45 0,110 70,0 0,-110 m -35,95 0,-95 m -35,0 70,0"},{type:"path",d:"m 104,100 c 0,2 -3,2 -4.8,2 -1.4,0 -4.1,-1 -2.7,-2.9 1.9,-1.4 4.5,-1.4 6.5,-0.4 1,0.3 1,0.7 1,1.3 z m 0,40 c 0,2 -3,2 -4.8,2 -1.4,0 -4.1,-1 -2.7,-3 1.9,-1 4.5,-1 6.5,0 1,0 1,0 1,1 z"},{type:"text",stroke:!1,textanchor:"middle",x:80,y:110,fontsize:35,text:"B"},{type:"text",stroke:!1,textanchor:"middle",x:120,y:110,fontsize:35,text:"T"}],G["TP.REPORTED BOTTOMED SUB"]={type:"path",fill:!1,d:"M 129,122.4 70.9,78.8 m 0,43.6 58.1,-43.6 m -80,-14.5 0,43.6 29,0 0,29 43.6,0 0,-29 29,0 0,-43.6"},G["TP.MOVING HAVEN"]={type:"path",d:"M 108.142,100 A 8.14167,8.14167 0 0 1 100,108.142 8.14167,8.14167 0 0 1 91.8583,100 8.14167,8.14167 0 0 1 100,91.8583 8.14167,8.14167 0 0 1 108.142,100 Z M 45,55 l 0,90 m 110,-90 0,90 m -110,-45 110,0"},G["TP.SCREEN CENTRE"]={type:"path",d:"m 100,55 0,90 m 8.142,-45 A 8.14167,8.14167 0 0 1 100,108.142 8.14167,8.14167 0 0 1 91.8583,100 8.14167,8.14167 0 0 1 100,91.8583 8.14167,8.14167 0 0 1 108.142,100 Z"},G["TP.SHORE CONTROL STATION"]={type:"path",fill:!1,d:"m 30,155 140,0 m -27,-20 2,-10 -10,5 m -78,5 -2,-10 10,5 m 35,-55 0,68 m 7.5,-76 A 7.5,7.5 0 0 1 100,74.5 7.5,7.5 0 0 1 92.5,67 7.5,7.5 0 0 1 100,59.5 7.5,7.5 0 0 1 107.5,67 Z m -52.5,8 90,0 m -90,50 c 15,25 75,25 90,0 M 40,45 50,55 60,45 70,55 80,45 l 10,10 10,-10 10,10 10,-10 10,10 10,-10 10,10 10,-10"},G["TP.DITCHED AIRCRAFT"]={type:"path",d:"m 145,120 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 10,10 25,-30 -10,-10 10,-10 20,20 -10,35 -15,-15 -15,15 z"},G["TP.PERSON IN WATER"]={type:"path",d:"m 105,110 10,-10 0,-15 5,0 0,20 -10,10 z m -10,0 -10,-10 0,-15 -5,0 0,20 10,10 z m 5,-5 0,-10 -5,0 -5,-5 0,-10 5,-5 10,0 5,5 0,10 -5,5 -5,0 m -15,25 15,-15 m 45,15 -15,-15 m -15,15 15,-15 m -75,15 15,-15 m 15,15 -15,-15 m 45,15 -15,-15"},G["TP.CLUTTER, STATIONARY OR CEASE REPORTING"]={type:"path",fill:!1,d:"m 65,135 c 23.3,-23 47,-46.7 70,-70 m -70,0 c 23.3,23.3 47,47 70,70 m -35,-4 c -19.7,0 -47.8,-8 -50,-31 3,-24.9 33.9,-32 55,-30.7 19,0.8 46,10.9 45,33.7 -5,21 -31,28 -50,28 z m 31,-31 c 0,20 -8,48 -31,50 C 75.1,147 68,116 69.3,95 70.1,76.2 80.2,48.6 103,50.2 c 21,4.9 28,31.1 28,49.8 z"},G["TP.TENTATIVE OR PROVISIONAL TRACK"]={type:"path",fill:!1,d:"M 130.902,100 A 30.9017,50 0 0 1 100,150 30.9017,50 0 0 1 69.0983,100 30.9017,50 0 0 1 100,50 30.9017,50 0 0 1 130.902,100 Z M 100,130.902 A 50,30.9017 0 0 1 50,100 50,30.9017 0 0 1 100,69.0983 50,30.9017 0 0 1 150,100 50,30.9017 0 0 1 100,130.902 Z"},G["TP.DISTRESSED VESSEL"]={type:"path",d:"m 120,65 -20,20 20,-20 m -5,55 -35,-35 0,-20 45,45 z m -30,0 -15,-15 m -15,15 15,-15 m 45,15 15,-15 m 15,15 -15,-15 m -45,15 15,-15"},G["TP.SEA MINELIKE"]={type:"path",d:"M 75,75 55,55 m 45,-15 0,25 m 25,10 20,-20 m -80,60 0,-30 20,-20 30,0 20,20 0,30 -20,20 -30,0 z"},G["TP.ICEBERG"]={type:"path",d:"m 75,100 25,-30 25,30 -5,15 -5,-5 -15,20 -15,-20 -5,5 z m -15,0 80,0"},G["TP.OIL RIG/PLATFORM"]=[{type:"path",d:"m 55,100 0,-50 m 75,50 0,40 m 20,-40 0,40 m -115,0 0,-40 130,0",fill:!1},{type:"path",d:"m 55,100 0,-15 25,0 0,15 z"}],G["TP.BOTTOM RETURN"]={type:"path",d:"m 50,100 15,-35 15,30 20,-55 20,55 15,-35 15,40 z"},G["TP.INSTALLATION/MANMADE"]={type:"path",fill:!1,d:"m 50,100 15,-35 15,30 20,-55 20,55 15,-35 15,40 z"},G["TP.WRECK, NON DANGEROUS"]={type:"path",fill:!1,d:"m 135,85 0,30 m -85,-15 100,0 m -85,-15 0,30 m 35,-40 0,50"},G["TP.WRECK, DANGEROUS"]=[G["TP.WRECK, NON DANGEROUS"],{type:"path",strokedasharray:"5,5",fill:!1,d:"m 156.547,100 c 0,16.382 -25.162,29.662 -56.202,29.662 -31.0395,0 -56.2019,-13.28 -56.2017,-29.662 0,-16.3818 25.1624,-29.6618 56.2017,-29.6618 31.039,-1e-4 56.202,13.28 56.202,29.6618 z"}],G["TP.MARINE LIFE"]={type:"path",stroke:!1,d:"m 132,75 0,50 83,-37.5 0,25 L 132,75 m -32,25 25.5,-25 0,50 z"},G["TP.SEA ANOMALY"]={type:"path",fill:!1,d:"M 150,80 130,35 100,100 70,35 50,80 m 0,20 20,-45 30,65 30,-65 20,45"},G["TP.FIX ACOUSTIC"]={type:"path",fill:!1,d:"M 50,150 150,50 M 50,50 150,150 m -50,-100 0,100"},G["TP.FIX ELECTRO-MAGNETIC"]={type:"path",fill:!1,d:"m 50,90 15,20 5,-20 15,20 5,-20 20,20 5,-20 15,20 5,-20 15,20 M 50,150 150,50 M 50,50 150,150 m -50,-100 0,100"},G["TP.ELECTRO MAGNETIC - MAGNETIC ANOMALY DETECTION (MAD)"]=[G["TP.FIX ELECTRO-MAGNETIC"],{type:"text",stroke:!1,textanchor:"middle",x:100,y:180,fontsize:35,text:"MAD"}],G["TP.FIX ELECTRO-OPTICAL"]={type:"path",fill:!1,d:"m 150,100 c 0,6.904 -22.386,12.5 -50,12.5 -27.6142,0 -50,-5.596 -50,-12.5 0,-6.9036 22.3858,-12.5 50,-12.5 27.614,0 50,5.5964 50,12.5 z M 50,150 150,50 M 50,50 150,150 m -50,-100 0,100"},G["TP.FIRE"]={type:"text",stroke:!1,fill:E.iconColor[C],textanchor:"middle",x:100,y:115,fontsize:35,text:"FIRE"},G["TP.INDIRECT FIRE"]={type:"path",stroke:E.iconColor[C],fill:!1,d:"m 100,60 0,80 m -40,-40 80,0"},G["TP.AMBUSH"]={type:"path",stroke:E.iconColor[C],fill:!1,d:"m 77.5,106 20,0 m -20,-12 20,0 M 75,82 95,82 m -20,36 20,0 m -25,12 20,0 M 70,70 90,70 M 80,60 c 25,15 25,65 0,80 m 45,-50 10,10 -10,10 m -25,-10 35,0"},G["TP.ROAD BLOCK"]={type:"path",stroke:E.iconColor[C],fill:!1,d:"m 73,133 60,-60 m -66,54 60,-60 m -54,0 60,60 m -66,-54 60,60"},G["TP.ROAD BLOCK (UNDER CONSTRUCTION)"]=[{type:"path",stroke:E.iconColor[C],fill:!1,strokedasharray:"5,5",d:"m 73,67 60,60 m -66,-54 60,60"},{type:"path",stroke:E.iconColor[C],fill:!1,d:"M 73,133 133,73 M 67,127 127,67"}],G["TP.VITAL AREA CENTRE"]=[{type:"path",fill:!1,d:"m 45,100 110,0 m 0,-40 0,85 M 45,60 l 0,80 m 55,-80 0,80"}],G["TP.ESTIMATED POSITION (EP)"]=[{type:"path",fill:!1,strokedasharray:"12,5",d:"M 160,160 40,160 40,40 160,40 Z"},{type:"path",fill:!1,d:"m 140,100 c 1,26 -27,47 -51.8,38 C 63.1,131 51.5,98.3 67,77.4 c 13.8,-21.9 49,-23.2 64,-2.3 6,7 9,15.9 9,24.9 z"},{type:"text",stroke:!1,textanchor:"middle",x:100,y:115,fontsize:35,text:"EP"}],G["FORWARD OBSERVER / SPOTTER POSITION"]=[{type:"circle",cx:100,cy:100,r:3},{type:"path",fill:!1,d:"m 40,135 60,-75 60,75 z"}],G["MAN MADE SPACE DEBRIS SMALL"]=[{type:"circle",cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"M 60,110 75,100 60,90 m 50,50 -10,-15 -10,15 m 50,-50 -15,10 15,10 M 90,60 100,75 110,60"}],G["MAN MADE SPACE DEBRIS MEDIUM"]=[{type:"circle",cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["MAN MADE SPACE DEBRIS BIG"]=[{type:"circle",cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"m 90,75 10,-15 10,15 M 75,110 60,100 75,90 m 35,35 -10,15 -10,-15 m 35,-35 15,10 -15,10"}],G["NATURAL SPACE DEBRIS SMALL"]=[{type:"circle",fill:!1,cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"M 60,110 75,100 60,90 m 50,50 -10,-15 -10,15 m 50,-50 -15,10 15,10 M 90,60 100,75 110,60"}],G["NATURAL SPACE DEBRIS MEDIUM"]=[{type:"circle",fill:!1,cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50}],G["NATURAL SPACE DEBRIS BIG"]=[{type:"circle",fill:!1,cx:100,cy:100,r:17},{type:"circle",fill:!1,cx:100,cy:100,r:50},{type:"path",fill:!1,d:"m 90,75 10,-15 10,15 M 75,110 60,100 75,90 m 35,35 -10,15 -10,-15 m 35,-35 15,10 -15,10"}],G["TP.M1.UNSPECIFIED"]=[{type:"circle",fill:!1,cx:55,cy:100,r:15},{type:"circle",fill:!1,cx:100,cy:100,r:15},{type:"circle",fill:!1,cx:145,cy:100,r:15}],G["TP.M1.ANTIPERSONNEL MINE 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"m 35,75 10.6,13.3 m 18.8,0 10.6,-13.3"}],G["TP.M1.ANTIPERSONNEL MINE 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"m 80,75 10.6,13.3 m 18.8,0 10.6,-13.3"}],G["TP.M1.ANTIPERSONNEL MINE 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"m 125,75 10.6,13.3 m 18.8,0 10.6,-13.3"}],G["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"M 64.4,88.3 75,75 m -40,0 10.6,13.3 m 32.4,10 2,1.7 -2,2 z m -8,1.7 3.3,0"}],G["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"M 109,88.3 120,75 m -40,0 10.6,13.3 m 32.4,10 2,1.7 -2,2 z m -8,1.7 3,0"}],G["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"M 154,88.3 165,75 m -40,0 11,13.3 m 32,10 2,1.7 -2,2 z m -8,1.7 3,0"}],G["TP.M1.ANTITANK MINE 1"]=[{type:"circle",cx:55,cy:100,r:15}],G["TP.M1.ANTITANK MINE 2"]=[{type:"circle",cx:100,cy:100,r:15}],G["TP.M1.ANTITANK MINE 3"]=[{type:"circle",cx:145,cy:100,r:15}],G["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"m 55,115 0,13 6,-6"}],G["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"m 100,115 0,13 6,-6"}],G["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"m 145,115 0,13 6,-6"}],G["TP.M1.WIDE AREA ANTITANK MINE 1"]=[{type:"circle",cx:55,cy:100,r:15},{type:"path",fill:!1,d:"m 35,115 8,10 5.5,-11 m 13,0 5.5,11 8,-10"}],G["TP.M1.WIDE AREA ANTITANK MINE 2"]=[{type:"circle",cx:100,cy:100,r:15},{type:"path",fill:!1,d:"m 80,115 8,10 5.5,-11 m 13,0 5.5,11 8,-10"}],G["TP.M1.WIDE AREA ANTITANK MINE 3"]=[{type:"circle",cx:145,cy:100,r:15},{type:"path",fill:!1,d:"m 125,115 8,10 5.5,-11 m 13,0 5.5,11 8,-10"}],G["TP.M1.MINE CLUSTER 1"]=[{type:"path",fill:!1,strokedasharray:"7.5,5",d:"m 73,110 -36,0 c 0,-10 3,-20 18,-20 15,0 18,10 18,20 z"}],G["TP.M1.MINE CLUSTER 2"]=[{type:"path",fill:!1,strokedasharray:"7.5,5",d:"m 118,110 -36,0 c 0,-10 3,-20 18,-20 15,0 18,10 18,20 z"}],G["TP.M1.MINE CLUSTER 3"]=[{type:"path",fill:!1,strokedasharray:"7.5,5",d:"m 163,110 -36,0 c 0,-10 3,-20 18,-20 15,0 18,10 18,20 z"}],G)G.hasOwnProperty(o)&&(I.hasOwnProperty(o)&&console.warn("Override of: "+o),n.call(this,G[o],T),I[o]=G[o])}var k={type:"letter",getMetadata:o,getIcons:M,iconParts:[V],labels:function(I){I["G-T-D-----"]={},I["G-T-I-----"]={},I["G-T-N-----"]={},I["G-G-GPUUD-"]={},I["G-G-GPUUB-"]={},I["G-G-GPUUL-"]={},I["G-G-GPUUS-"]={},I["G-G-GPUY--"]={},I["G-G-GPUYP-"]={},I["G-G-GPUYD-"]={},I["G-G-GPUYL-"]={},I["G-G-GPUYC-"]={},I["G-G-GPUYS-"]={},I["G-G-GPUYB-"]={},I["G-G-GPUYA-"]={},I["G-G-GPUYV-"]={},I["G-G-GPUYT-"]={},I["G-G-GPUYR-"]={},I["G-G-GPUYK-"]={},I["G-G-GPUYX-"]={},I["G-G-GPUS--"]={},I["G-G-GPUSA-"]={},I["G-G-GPUSD-"]={},I["G-G-GPUSC-"]={},I["G-G-GPR---"]={},I["G-G-GPRN--"]={},I["G-G-GPRS--"]={},I["G-G-GPRD--"]={},I["G-G-GPRP--"]={},I["G-G-GPRM--"]={},I["G-G-GPRW--"]={},I["G-G-GPRC--"]={},I["G-G-GPRI--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:45,fontweight:"bold"}},I["G-G-GPWA--"]={},I["G-G-GPWD--"]={},I["G-G-GPWE--"]={},I["G-G-GPWG--"]={},I["G-G-GPWM--"]={},I["G-G-GPWI--"]={},I["G-G-GPWP--"]={},I["G-G-GPF---"]={},I["G-G-GPH---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I["G-G-GPHQ--"]={},I["G-G-GPHA--"]={},I["G-G-GPHY--"]={},I["G-G-GPHX--"]={},I["G-G-GPO---"]={},I["G-G-GPOZ--"]={},I["G-G-GPOD--"]={},I["G-G-GPOW--"]={},I["G-G-GPOP--"]={},I["G-G-GPOR--"]={},I["G-G-GPA---"]={},I["G-G-GPAP--"]={},I["G-G-GPAW--"]={},I["G-G-GPAK--"]={},I["G-G-GPAA--"]={},I["G-G-GPAH--"]={},I["G-G-GPAB--"]={},I["G-G-GPAC--"]={},I["G-G-GPAD--"]={},I["G-G-GPAE--"]={},I["G-G-GPAS--"]={},I["G-G-GPAT--"]={},I["G-G-GPAO--"]={},I["G-G-GPAR--"]={},I["G-G-GPAL--"]={},I["G-G-GPAF--"]={},I["G-G-GPAG--"]={},I["G-G-GPAI--"]={},I["G-G-GPAJ--"]={},I["G-G-GPAM--"]={},I["G-G-GPAN--"]={},I["G-G-GPP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},additionalInformation1:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35,fontweight:"bold"},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPK--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPC--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:40,fontsize:45,fontweight:"bold"}},I["G-G-GPPO--"]={},I["G-G-GPPD--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I["G-G-GPPL--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPP--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPR--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPE--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPS--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-G-GPPW--"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:125,fontsize:70}},I["G-G-GPC---"]={},I["G-G-GPCU--"]={},I["G-G-GPCUR-"]={},I["G-G-GPCUA-"]={},I["G-G-GPCUS-"]={},I["G-G-GPCUM-"]={},I["G-G-GPCA--"]={},I["G-G-GPCS--"]={},I["G-G-GPCM--"]={},I["G-G-GPCP--"]={},I["G-G-GPCR--"]={},I["G-G-GPCC--"]={},I["G-G-GPCE--"]={},I["G-G-GPCN--"]={},I["G-G-GPB---"]={},I["G-G-GPBU--"]={},I["G-G-GPBUA-"]={},I["G-G-GPBUS-"]={},I["G-G-GPBUM-"]={},I["G-G-GPBS--"]={},I["G-G-GPBSA-"]={},I["G-G-APP---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-G-APC---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-G-APU---"]={},I["G-G-APD---"]={},I["G-G-PN----"]={},I["G-G-DPT---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:115,y:85,fontsize:45,fontweight:"bold"}},I["G-G-DPO---"]={},I["G-G-DPOC--"]={},I["G-G-DPOR--"]={},I["G-G-DPOF--"]={},I["G-G-DPOS--"]={},I["G-G-DPON--"]={},I["G-G-OPP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-OAOF--"]={},I["G-M-OAOM--"]={},I["G-M-OAOP--"]={},I["G-M-OB----"]={},I["G-M-OMU---"]={},I["G-M-OMT---"]={},I["G-M-OMD---"]={},I["G-M-OME---"]={},I["G-M-OMP---"]={},I["G-M-OMW---"]={},I["G-M-OFS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:55,fontsize:40},hostile:[{stroke:!1,textanchor:"end",x:35,y:110,fontsize:30,fontweight:"bold"},{stroke:!1,textanchor:"start",x:165,y:110,fontsize:30,fontweight:"bold"}],dtg:{stroke:!1,textanchor:"middle",x:100,y:175,fontsize:40}},I["G-M-OHTL--"]={altitudeDepth:{stroke:!1,textanchor:"start",x:120,y:60,fontsize:40,fontweight:"bold"}},I["G-M-OHTH--"]={altitudeDepth:{stroke:!1,textanchor:"start",x:115,y:60,fontsize:40,fontweight:"bold"}},I["G-M-BCP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-SE----"]={},I["G-M-SF----"]={},I["G-M-SS----"]={},I["G-M-SU----"]={},I["G-M-NZ----"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-M-NF----"]={},I["G-M-NEB---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-M-NEC---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-M-NDP---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDA---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDT---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDE---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDB---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDO---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-M-NDD---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PTS---"]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:145,fontsize:40},altitudeDepth:{stroke:!1,textanchor:"end",x:80,y:145,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I["G-F-PTN---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40,fontweight:"bold"}},I["G-F-PCF---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:125,y:115,fontsize:40,fontweight:"bold"}},I["G-F-PCS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCB---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCR---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCH---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-F-PCL---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PX----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PC----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PY----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PT----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PD----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PE----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PL----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PM----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PR----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PU----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PO----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PI----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PN----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PS----"]={},I["G-S-PSZ---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSA---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSB---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSC---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSD---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSE---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSF---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSG---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSH---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSI---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PSJ---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PA----"]={},I["G-S-PAS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-S-PAT---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-O-ED----"]={},I["G-O-EP----"]={},I["G-O-EV----"]={},I["G-O-HM----"]={},I["G-O-HI----"]={},I["G-O-HO----"]={},I["G-O-SB----"]={},I["G-O-SBM---"]={},I["G-O-SBN---"]={},I["G-O-SBW---"]={},I["G-O-SBX---"]={},I["G-O-SM----"]={},I["G-O-SS----"]={},I["G-O-FA----"]={},I["G-O-FE----"]={},I["G-O-FO----"]={}},icons:function(I,t,E,R){I["G-T-D-----"]=E["TP.DESTROY"],t["G-T-D-----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-I-----"]=E["TP.INTERDICT"],t["G-T-I-----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-N-----"]=E["TP.NEUTRALIZE"],t["G-T-N-----"]={x1:0,x2:200,y1:40,y2:160},I["G-G-GPUUD-"]=E["TP.DATUM"],t["G-G-GPUUD-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUUB-"]=E["TP.BRIEF CONTACT"],t["G-G-GPUUB-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUUL-"]=E["TP.LOST CONTACT"],t["G-G-GPUUL-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUUS-"]=E["TP.SINKER"],t["G-G-GPUUS-"]={x1:50,x2:150,y1:0,y2:100},I["G-G-GPUY--"]=E["TP.SONOBUOY"],t["G-G-GPUY--"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYP-"]=E["TP.SONOBUOY PATTERN CENTER"],t["G-G-GPUYP-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYD-"]=E["TP.SONOBUOY DIFAR"],t["G-G-GPUYD-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYL-"]=E["TP.SONOBUOY LOFAR"],t["G-G-GPUYL-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYC-"]=E["TP.SONOBUOY CASS"],t["G-G-GPUYC-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYS-"]=E["TP.SONOBUOY DICASS"],t["G-G-GPUYS-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYB-"]=E["TP.SONOBUOY BT"],t["G-G-GPUYB-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYA-"]=E["TP.SONOBUOY ANM"],t["G-G-GPUYA-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYV-"]=E["TP.SONOBUOY VLAD"],t["G-G-GPUYV-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYT-"]=E["TP.SONOBUOY ATAC"],t["G-G-GPUYT-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYR-"]=E["TP.SONOBUOY RO"],t["G-G-GPUYR-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYK-"]=E["TP.SONOBUOY KINGPIN"],t["G-G-GPUYK-"]={x1:60,x2:140,y1:-10,y2:160},I["G-G-GPUYX-"]=E["TP.SONOBUOY EXPIRED"],t["G-G-GPUYX-"]={x1:40,x2:160,y1:-10,y2:160},I["G-G-GPUS--"]=E["TP.SEARCH"],t["G-G-GPUS--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSA-"]=E["TP.SEARCH AREA"],t["G-G-GPUSA-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSD-"]=E["TP.DIP POSITION"],t["G-G-GPUSD-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPUSC-"]=E["TP.SEARCH CENTER"],t["G-G-GPUSC-"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPR---"]=E["TP.REFERENCE POINT"],t["G-G-GPR---"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRN--"]=E["TP.NAVIGATIONAL REFERENCE"],t["G-G-GPRN--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRS--"]=E["TP.SPECIAL POINT"],t["G-G-GPRS--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRD--"]=E["TP.DLRP"],t["G-G-GPRD--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRP--"]=E["TP.POINT OF INTENDED MOVEMENT"],t["G-G-GPRP--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRM--"]=E["TP.MARSHALL POINT"],t["G-G-GPRM--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRW--"]=E["TP.REFERENCE POINT WAYPOINT"],t["G-G-GPRW--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRC--"]=E["TP.CORRIDOR TAB"],t["G-G-GPRC--"]={x1:40,x2:160,y1:40,y2:160},I["G-G-GPRI--"]=E["TP.POINT OF INTEREST"],t["G-G-GPRI--"]={x1:50,x2:150,y1:-25},I["G-G-GPWA--"]=E["TP.AIM POINT"],t["G-G-GPWA--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPWD--"]=E["TP.DROP POINT"],t["G-G-GPWD--"]={x1:50,x2:150,y1:50,y2:120},I["G-G-GPWE--"]=E["TP.ENTRY POINT"],t["G-G-GPWE--"]={x1:50,x2:150,y1:50},I["G-G-GPWG--"]=E["TP.GROUND ZERO"],t["G-G-GPWG--"]={x1:50,x2:150,y1:30},I["G-G-GPWM--"]=E["TP.MSL DETECT POINT"],t["G-G-GPWM--"]={x1:50,x2:150,y1:30},I["G-G-GPWI--"]=E["TP.IMPACT POINT"],t["G-G-GPWI--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPWP--"]=E["TP.PREDICTED IMPACT POINT"],t["G-G-GPWP--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPF---"]=E["TP.FORMATION"],t["G-G-GPF---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPH---"]=E["TP.HARBOR"],t["G-G-GPH---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHQ--"]=E["TP.HARBOR POINT Q"],t["G-G-GPHQ--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHA--"]=E["TP.HARBOR POINT A"],t["G-G-GPHA--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHY--"]=E["TP.HARBOR POINT Y"],t["G-G-GPHY--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPHX--"]=E["TP.HARBOR POINT X"],t["G-G-GPHX--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPO---"]=E["TP.ROUTE"],t["G-G-GPO---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPOZ--"]=E["TP.ROUTE RENDEZVOUS"],t["G-G-GPOZ--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOD--"]=E["TP.ROUTE DIVERSIONS"],t["G-G-GPOD--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOW--"]=E["TP.ROUTE WAYPOINT"],t["G-G-GPOW--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOP--"]=E["TP.ROUTE PIM"],t["G-G-GPOP--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPOR--"]=E["TP.ROUTE POINT R"],t["G-G-GPOR--"]={x1:30,x2:170,y1:60,y2:170},I["G-G-GPA---"]=E["TP.AIR CONTROL POINT"],t["G-G-GPA---"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAP--"]=E["TP.COMBAT AIR PATROL (CAP)"],t["G-G-GPAP--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAW--"]=E["TP.AIRBORNE EARLY WARNING (AEW)"],t["G-G-GPAW--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAK--"]=E["TP.TANKING"],t["G-G-GPAK--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAA--"]=E["TP.FIXED WING"],t["G-G-GPAA--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAH--"]=E["TP.ROTARY WING"],t["G-G-GPAH--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAB--"]=E["TP.SUCAP - FIXED WING"],t["G-G-GPAB--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAC--"]=E["TP.SUCAP - ROTARY WING"],t["G-G-GPAC--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAD--"]=E["TP.MIW - FIXED WING"],t["G-G-GPAD--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAE--"]=E["TP.MIW - ROTARY WING"],t["G-G-GPAE--"]={x1:60,x2:140,y1:40,y2:160},I["G-G-GPAS--"]=E["TP.STRIKE IP"],t["G-G-GPAS--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAT--"]=E["TP.TACAN"],t["G-G-GPAT--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAO--"]=E["TP.TOMCAT"],t["G-G-GPAO--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAR--"]=E["TP.RESCUE"],t["G-G-GPAR--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAL--"]=E["TP.REPLENISH"],t["G-G-GPAL--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAF--"]=E["TP.UNMANNED AERIAL SYSTEM"],t["G-G-GPAF--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAG--"]=E["TP.VTUA"],t["G-G-GPAG--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAI--"]=E["TP.ORBIT"],t["G-G-GPAI--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAJ--"]=E["TP.ORBIT - FIGURE EIGHT"],t["G-G-GPAJ--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAM--"]=E["TP.ORBIT - RACE TRACK"],t["G-G-GPAM--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPAN--"]=E["TP.ORBIT - RANDOM, CLOSED"],t["G-G-GPAN--"]={x1:60,x2:140,y1:30,y2:170},I["G-G-GPP---"]=E["TP.ACTION POINT"],t["G-G-GPP---"]={x1:60,x2:140,y1:-60},I["G-G-GPPK--"]=E["TP.ACTION CHECK POINT"],t["G-G-GPPK--"]={x1:60,x2:140,y1:-60},I["G-G-GPPC--"]=E["TP.CONTACT POINT"],t["G-G-GPPC--"]={x1:55,x2:145,y1:-10},I["G-G-GPPO--"]=E["TP.COORDINATION POINT"],t["G-G-GPPO--"]={x1:50,x2:150,y1:50,y2:150},I["G-G-GPPD--"]=E["TP.DECISION POINT"],t["G-G-GPPD--"]={x1:30,x2:170,y1:25,y2:160},I["G-G-GPPL--"]=E["TP.ACTION LINKUP POINT"],t["G-G-GPPL--"]={x1:60,x2:140,y1:-60},I["G-G-GPPP--"]=E["TP.ACTION PASSAGE POINT"],t["G-G-GPPP--"]={x1:60,x2:140,y1:-60},I["G-G-GPPR--"]=E["TP.ACTION RALLY POINT"],t["G-G-GPPR--"]={x1:60,x2:140,y1:-60},I["G-G-GPPE--"]=E["TP.ACTION RELEASE POINT"],t["G-G-GPPE--"]={x1:60,x2:140,y1:-60},I["G-G-GPPS--"]=E["TP.ACTION START POINT"],t["G-G-GPPS--"]={x1:60,x2:140,y1:-60},I["G-G-GPPA--"]=E["TP.ACTION AMNESTY POINT"],t["G-G-GPPA--"]={x1:60,x2:140,y1:-60},I["G-G-GPPW--"]=E["TP.WAYPOINT"],t["G-G-GPPW--"]={x1:60,x2:140,y1:60,y2:140},I["G-G-GPC---"]=E["TP.SEA SURFACE CONTROL STATION"],t["G-G-GPC---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCU--"]=E["TP.(USV) CONTROL STATION"],t["G-G-GPCU--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUR-"]=E["TP.(RMV) USV CONTROL STATION"],t["G-G-GPCUR-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUA-"]=E["TP.USV - ASW CONTROL STATION"],t["G-G-GPCUA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUS-"]=E["TP.USV - SUW CONTROL STATION"],t["G-G-GPCUS-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCUM-"]=E["TP.USV - MIW CONTROL STATION"],t["G-G-GPCUM-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCA--"]=E["TP.ASW CONTROL STATION"],t["G-G-GPCA--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCS--"]=E["TP.SUW CONTROL STATION"],t["G-G-GPCS--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCM--"]=E["TP.MIW CONTROL STATION"],t["G-G-GPCM--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCP--"]=E["TP.PICKET CONTROL STATION"],t["G-G-GPCP--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCR--"]=E["TP.RENDEZVOUS CONTROL POINT"],t["G-G-GPCR--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCC--"]=E["TP.RESCUE CONTROL POINT"],t["G-G-GPCC--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCE--"]=E["TP.REPLENISHMENT CONTROL POINT"],t["G-G-GPCE--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPCN--"]=E["TP.NONCOMBATANT CONTROL STATION"],t["G-G-GPCN--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPB---"]=E["TP.SUB SURFACE CONTROL STATION"],t["G-G-GPB---"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBU--"]=E["TP.(UUV) CONTROL STATION"],t["G-G-GPBU--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUA-"]=E["TP.UUV - ASW CONTROL STATION"],t["G-G-GPBUA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUS-"]=E["TP.UUV - SUW CONTROL STATION"],t["G-G-GPBUS-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBUM-"]=E["TP.UUV - MIW CONTROL STATION"],t["G-G-GPBUM-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBS--"]=E["TP.SUBMARINE CONTROL STATION"],t["G-G-GPBS--"]={x1:30,x2:170,y1:60,y2:140},I["G-G-GPBSA-"]=E["TP.ASW SUBMARINE CONTROL STATION"],t["G-G-GPBSA-"]={x1:30,x2:170,y1:60,y2:140},I["G-G-APP---"]=E["TP.AIR CONTROL POINT (ACP)"],t["G-G-APP---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-APC---"]=E["TP.COMMUNICATIONS CHECKPOINT"],t["G-G-APC---"]={x1:50,x2:150,y1:50,y2:150},I["G-G-APU---"]=E["TP.PULL-UP POINT"],t["G-G-APU---"]={x1:50,x2:240,y1:50,y2:150},I["G-G-APD---"]=E["TP.DOWNED AIRCREW PICKUP POINT"],t["G-G-APD---"]={x1:60,x2:140,y1:-60},I["G-G-PN----"]=E["TP.DUMMY MINEFIELD"],t["G-G-PN----"]={x1:40,x2:160,y1:-10,y2:140},I["G-G-DPT---"]=E["TP.TARGET REFERENCE"],I["G-G-DPO---"]=E["TP.OBSERVATION POST/OUTPOST"],t["G-G-DPO---"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOC--"]=E["TP.COMBAT OUTPOST"],t["G-G-DPOC--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOR--"]=E["TP.OBSERVATION POST/RECONNAISSANCE"],t["G-G-DPOR--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOF--"]=E["TP.FORWARD OBSERVER POSITION"],t["G-G-DPOF--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPOS--"]=E["TP.SENSOR OUTPOST"],t["G-G-DPOS--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-DPON--"]=E["TP.CBRN OBSERVATION POST"],t["G-G-DPON--"]={x1:50,x2:150,y1:40,y2:150},I["G-G-OPP---"]=E["TP.POINT OF DEPARTURE"],t["G-G-OPP---"]={x1:60,x2:140,y1:-60},I["G-M-OAOF--"]=E["TP.FIXED AND PREFABRICATED"],t["G-M-OAOF--"]={x1:60,x2:140,y1:30},I["G-M-OAOM--"]=E["TP.TETRAHEDRONS"],t["G-M-OAOM--"]={x1:60,x2:140,y1:30},I["G-M-OAOP--"]=E["TP.TETRAHEDRONS MOVABLE"],t["G-M-OAOP--"]={x1:60,x2:140,y1:30},I["G-M-OB----"]=E["TP.BOOBY TRAP"],I["G-M-OMU---"]=E["TP.UNSPECIFIED MINE"],I["G-M-OMT---"]=E["TP.ANTITANK MINE (AT)"],I["G-M-OMD---"]=E["TP.(AT) ANTIHANDLING DEVICE"],t["G-M-OMD---"]={x1:60,x2:140,y1:40,y2:195},I["G-M-OME---"]=E["TP.(AT) DIRECTIONAL"],t["G-M-OME---"]={x1:60,x2:140,y1:10,y2:140},I["G-M-OMP---"]=E["TP.ANTIPERSONNEL (AP) MINES"],I["G-M-OMW---"]=E["TP.WIDE AREA MINES"],I["G-M-OFS---"]=E["TP.MINEFIELDS STATIC"],t["G-M-OFS---"]={x1:40,x2:160,y1:60,y2:140},I["G-M-OHTL--"]=E["TP.TOWER LOW"],t["G-M-OHTL--"]={x1:50,x2:150,y1:30,y2:120},I["G-M-OHTH--"]=E["TP.TOWER HIGH"],t["G-M-OHTH--"]={x1:50,x2:150,y1:30,y2:120},I["G-M-BCP---"]=E["TP.ENGINEER REGULATING POINT"],t["G-M-BCP---"]={x1:60,x2:140,y1:-60},I["G-M-SE----"]=E["TP.EARTHWORK/FORTIFICATION"],I["G-M-SF----"]=E["TP.FORT"],I["G-M-SS----"]=E["TP.SURFACE SHELTER"],I["G-M-SU----"]=E["TP.UNDERGROUND SHELTER"],I["G-M-NZ----"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO"],t["G-M-NZ----"]={x1:60,x2:140,y1:-20},I["G-M-NF----"]=E["TP.NUCLEAR FALLOUT PRODUCING"],t["G-M-NF----"]={x1:50,x2:150,y1:-20},I["G-M-NEB---"]=E["TP.RELEASE EVENTS BIOLOGICAL"],t["G-M-NEB---"]={x1:-10,x2:140,y1:-20},I["G-M-NEC---"]=E["TP.RELEASE EVENTS CHEMICAL"],t["G-M-NEC---"]={x1:-20,x2:140,y1:-20},I["G-M-NDP---"]=E["TP.DECON SITE/POINT"],t["G-M-NDP---"]={x1:60,x2:140,y1:-60},I["G-M-NDA---"]=E["TP.ALTERNATE DECON SITE/POINT"],t["G-M-NDA---"]={x1:60,x2:140,y1:-60},I["G-M-NDT---"]=E["TP.DECON SITE/POINT (TROOPS)"],t["G-M-NDT---"]={x1:60,x2:140,y1:-60},I["G-M-NDE---"]=E["TP.DECON SITE/POINT (EQUIPMENT)"],t["G-M-NDE---"]={x1:60,x2:140,y1:-60},I["G-M-NDB---"]=E["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],t["G-M-NDB---"]={x1:60,x2:140,y1:-60},I["G-M-NDO---"]=E["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],t["G-M-NDO---"]={x1:60,x2:140,y1:-60},I["G-M-NDD---"]=E["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],t["G-M-NDD---"]={x1:60,x2:140,y1:-60},I["G-F-PTS---"]=E["TP.POINT/SINGLE TARGET"],I["G-F-PTN---"]=E["TP.NUCLEAR TARGET"],I["G-F-PCF---"]=E["TP.FIRE SUPPORT STATION"],I["G-F-PCS---"]=E["TP.SURVEY CONTROL POINT"],t["G-F-PCS---"]={x1:60,x2:140,y1:-60},I["G-F-PCB---"]=E["TP.FIRING POINT"],t["G-F-PCB---"]={x1:60,x2:140,y1:-60},I["G-F-PCR---"]=E["TP.RELOAD POINT"],t["G-F-PCR---"]={x1:60,x2:140,y1:-60},I["G-F-PCH---"]=E["TP.HIDE POINT"],t["G-F-PCH---"]={x1:60,x2:140,y1:-60},I["G-F-PCL---"]=E["TP.LAUNCH POINT"],t["G-F-PCL---"]={x1:60,x2:140,y1:-60},I["G-S-PX----"]=E["TP.AMBULANCE EXCHANGE POINT"],t["G-S-PX----"]={x1:60,x2:140,y1:-60},I["G-S-PC----"]=E["TP.CANNIBALIZATION POINT"],t["G-S-PC----"]={x1:60,x2:140,y1:-60},I["G-S-PY----"]=E["TP.CASUALTY COLLECTION POINT"],t["G-S-PY----"]={x1:60,x2:140,y1:-60},I["G-S-PT----"]=E["TP.CIVILIAN COLLECTION POINT"],t["G-S-PT----"]={x1:60,x2:140,y1:-60},I["G-S-PD----"]=E["TP.DETAINEE COLLECTION POINT"],t["G-S-PD----"]={x1:60,x2:140,y1:-60},I["G-S-PE----"]=E["TP.EPW COLLECTION POINT"],t["G-S-PE----"]={x1:60,x2:140,y1:-60},I["G-S-PL----"]=E["TP.LOGISTICS RELEASE POINT"],t["G-S-PL----"]={x1:60,x2:140,y1:-60},I["G-S-PM----"]=E["TP.MAINTENANCE COLLECTION POINT"],t["G-S-PM----"]={x1:60,x2:140,y1:-60},I["G-S-PR----"]=E["TP.REARM, REFUEL AND RESUPPLY POINT"],t["G-S-PR----"]={x1:60,x2:140,y1:-60},I["G-S-PU----"]=E["TP.REFUEL ON THE MOVE POINT"],t["G-S-PU----"]={x1:60,x2:140,y1:-60},I["G-S-PO----"]=E["TP.TRAFFIC CONTROL POST"],t["G-S-PO----"]={x1:60,x2:140,y1:-60},I["G-S-PI----"]=E["TP.TRAILER TRANSFER POINT"],t["G-S-PI----"]={x1:60,x2:140,y1:-60},I["G-S-PN----"]=E["TP.UNIT MAINTENANCE COLLECTION POINT"],t["G-S-PN----"]={x1:60,x2:140,y1:-60},I["G-S-PSZ---"]=E["TP.SUPPLY POINT"],t["G-S-PSZ---"]={x1:60,x2:140,y1:-60},I["G-S-PSA---"]=E["TP.SP CLASS I"],t["G-S-PSA---"]={x1:60,x2:140,y1:-60},I["G-S-PSB---"]=E["TP.SP CLASS II"],t["G-S-PSB---"]={x1:60,x2:140,y1:-60},I["G-S-PSC---"]=E["TP.SP CLASS III"],t["G-S-PSC---"]={x1:60,x2:140,y1:-60},I["G-S-PSD---"]=E["TP.SP CLASS IV"],t["G-S-PSD---"]={x1:60,x2:140,y1:-60},I["G-S-PSE---"]=E["TP.SP CLASS V"],t["G-S-PSE---"]={x1:60,x2:140,y1:-60},I["G-S-PSF---"]=E["TP.SP CLASS VI"],t["G-S-PSF---"]={x1:60,x2:140,y1:-60},I["G-S-PSG---"]=E["TP.SP CLASS VII"],t["G-S-PSG---"]={x1:60,x2:140,y1:-60},I["G-S-PSH---"]=E["TP.SP CLASS VIII"],t["G-S-PSH---"]={x1:60,x2:140,y1:-60},I["G-S-PSI---"]=E["TP.SP CLASS IX"],t["G-S-PSI---"]={x1:60,x2:140,y1:-60},I["G-S-PSJ---"]=E["TP.SP CLASS X"],t["G-S-PSJ---"]={x1:60,x2:140,y1:-60},I["G-S-PAS---"]=E["TP.AMMUNITION SUPPLY POINT (ASP)"],t["G-S-PAS---"]={x1:60,x2:140,y1:-60},I["G-S-PAT---"]=E["TP.AMMUNITION TRANSFER POINT (ATP)"],t["G-S-PAT---"]={x1:60,x2:140,y1:-60},I["G-O-ED----"]=E["TP.DITCHED AIRCRAFT"],I["G-O-EP----"]=E["TP.PERSON IN WATER"],I["G-O-EV----"]=E["TP.DISTRESSED VESSEL"],I["G-O-HM----"]=E["TP.SEA MINELIKE"],t["G-O-HM----"]={x1:40,x2:160,y1:40,y2:150},I["G-O-HI----"]=E["TP.ICEBERG"],t["G-O-HI----"]={x1:50,x2:150,y1:50,y2:150},I["G-O-HO----"]=E["TP.OIL RIG/PLATFORM"],t["G-O-HO----"]={x1:30,x2:170,y1:60,y2:140},I["G-O-SB----"]=E["TP.BOTTOM RETURN"],t["G-O-SB----"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBM---"]=E["TP.INSTALLATION/MANMADE"],t["G-O-SBM---"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBN---"]=E["TP.BOTTOM RETURN"],t["G-O-SBN---"]={x1:40,x2:160,y1:40,y2:100},I["G-O-SBW---"]=E["TP.WRECK, NON DANGEROUS"],t["G-O-SBW---"]={x1:40,x2:160,y1:70,y2:130},I["G-O-SBX---"]=E["TP.WRECK, DANGEROUS"],t["G-O-SBX---"]={x1:40,x2:160,y1:70,y2:130},I["G-O-SM----"]=E["TP.MARINE LIFE"],t["G-O-SM----"]={x1:100,x2:220,y1:70,y2:130},I["G-O-SS----"]=E["TP.SEA ANOMALY"],t["G-O-SS----"]={x1:50,x2:150,y1:30,y2:120},I["G-O-FA----"]=E["TP.FIX ACOUSTIC"],I["G-O-FE----"]=E["TP.FIX ELECTRO-MAGNETIC"],I["G-O-FO----"]=E["TP.FIX ELECTRO-OPTICAL"]}};var B=[L,y,h,x,U,p,m,F,{type:"letter",getMetadata:o,getIcons:M,iconParts:[V],labels:function(I){I["G-T-GD----"]={},I["G-T-GI----"]={},I["G-T-GN----"]={},I["G-C-MGPFE-"]={},I["G-C-MGPFA-"]={},I["G-C-MGPFO-"]={},I["G-C-MGPI--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:45,fontweight:"bold"}},I["G-C-MAAP--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-C-MAAC--"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:45,fontweight:"bold"}},I["G-C-MAAU--"]={},I["G-C-MAAD--"]={},I["G-C-MDN---"]={},I["G-C-MMPT--"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:115,y:85,fontsize:45,fontweight:"bold"}},I["G-C-MMPO--"]={},I["G-C-MMPOC-"]={},I["G-C-MMPOR-"]={},I["G-C-MMPOF-"]={},I["G-C-MMPOS-"]={},I["G-C-MMPON-"]={},I["G-C-MMPON-"]={},I["G-C-MMPON-"]={},I["G-C-MOPD--"]={},I["G-C-BOATD-"]={},I["G-C-BOAB--"]={},I["G-C-BOAMA-"]={},I["G-C-BOAMT-"]={},I["G-C-BOAMD-"]={},I["G-C-BOAMC-"]={},I["G-C-BOAMU-"]={},I["G-C-BOAMN-"]={},I["G-C-BOAIP-"]={},I["G-C-BOAIC-"]={},I["G-C-BOAIN-"]={},I["G-C-BOAIS-"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BOAIH-"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BOAID-"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BOAV--"]={dtg:{stroke:!1,textanchor:"middle",x:100,y:165,fontsize:30,fontweight:"bold"}},I["G-C-BYCG--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BSE---"]={},I["G-C-BSF---"]={},I["G-C-BSH---"]={},I["G-C-BSU---"]={},I["G-C-BWN---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWE---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWI---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWF---"]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:20,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:50,y:20,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:150,y:100,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:140,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:35},type:{stroke:!1,textanchor:"end",x:50,y:60,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:50,y:100,fontsize:35}},I["G-C-BWP---"]={},I["G-C-BWDP--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDT--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDE--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDS--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDO--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDG--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDEM-"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-BWDTF-"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-FSTP--"]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:145,fontsize:40},altitudeDepth:{stroke:!1,textanchor:"end",x:80,y:145,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I["G-C-FSS---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:125,y:115,fontsize:40,fontweight:"bold"}},I["G-C-FAU---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40,fontweight:"bold"}},I["G-C-SPA---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPC---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPY---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPT---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPD---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPE---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPL---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPM---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPR---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPU---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPO---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPI---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPN---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQT--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQB--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQC--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQD--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQE--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQF--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQG--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQH--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQI--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPQJ--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:-30,fontsize:40},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPMA--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-SPMT--"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OX----"]={},I["G-C-OXRN--"]={},I["G-C-OXRD--"]={},I["G-C-OXUD--"]={},I["G-C-OXUB--"]={},I["G-C-OXUL--"]={},I["G-C-OXUS--"]={},I["G-C-OXWA--"]={},I["G-C-OXWD--"]={},I["G-C-OXWE--"]={},I["G-C-OXWG--"]={},I["G-C-OXWM--"]={},I["G-C-OXWI--"]={},I["G-C-OXWP--"]={},I["G-C-OXY---"]={},I["G-C-OXYP--"]={},I["G-C-OXYD--"]={},I["G-C-OXYL--"]={},I["G-C-OXYC--"]={},I["G-C-OXYS--"]={},I["G-C-OXYB--"]={},I["G-C-OXYA--"]={},I["G-C-OXYV--"]={},I["G-C-OXYT--"]={},I["G-C-OXYR--"]={},I["G-C-OXYK--"]={},I["G-C-OXN---"]={},I["G-C-OXH---"]={},I["G-C-OXHQ--"]={},I["G-C-OXHA--"]={},I["G-C-OXHY--"]={},I["G-C-OXHX--"]={},I["G-C-OXR---"]={},I["G-C-OXRR--"]={},I["G-C-OXRD--"]={},I["G-C-OXRW--"]={},I["G-C-OXRP--"]={},I["G-C-OXRT--"]={},I["G-C-OXSTC-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTCP"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTCA"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTR-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTH-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTS-"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXSTSA"]={dtg:{stroke:!1,textanchor:"start",x:140,y:92,fontsize:30,fontweight:"bold"},dtg1:{stroke:!1,textanchor:"start",x:140,y:128,fontsize:30,fontweight:"bold"}},I["G-C-OXS---"]={},I["G-C-OXSA--"]={},I["G-C-OXSD--"]={},I["G-C-OXSC--"]={},I["G-C-OXAC--"]={},I["G-C-OXAA--"]={},I["G-C-OXAT--"]={},I["G-C-OXAK--"]={},I["G-C-OXAF--"]={},I["G-C-OXAH--"]={},I["G-C-OXAO--"]={},I["G-C-OXAR--"]={},I["G-C-OXAP--"]={},I["G-C-OXAM--"]={},I["G-C-OXAS--"]={},I["G-C-OXAD--"]={},I["G-C-OG----"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGC---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:10,fontsize:35,fontweight:"bold"},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGP---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:40,fontsize:45,fontweight:"bold"}},I["G-C-OGT---"]={},I["G-C-OGD---"]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I["G-C-OGL---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGN---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGR---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGS---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGI---"]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I["G-C-OGW---"]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:125,fontsize:70}},I["G-O-VA----"]={},I["G-O-VR----"]={},I["G-O-VE----"]={},I["G-O-VB----"]={},I["G-O-VY----"]={},I["G-O-VD----"]={},I["G-O-VI----"]={},I["G-O-VM----"]={},I["G-O-VK----"]={},I["G-O-VS----"]={},I["G-O-VP----"]={},I["G-O-VU----"]={},I["G-O-VC----"]={},I["G-O-VH----"]={},I["G-O-VF----"]={},I["G-O-VO----"]={},I["G-O-VL----"]={},I["G-O-VX----"]={},I["G-O-VZ----"]={},I["G-O-LB----"]={},I["G-O-LG----"]={},I["G-O-LW----"]={},I["G-O-PR----"]={},I["G-O-PRB---"]={},I["G-O-PT----"]={},I["G-O-PC----"]={},I["G-O-PCU---"]={},I["G-O-PD----"]={},I["G-O-PM----"]={},I["G-O-PH----"]={},I["G-O-PHY---"]={},I["G-O-PHW---"]={},I["G-O-PHG---"]={},I["G-O-PHT---"]={},I["G-O-PG----"]={},I["G-O-PS----"]={},I["G-O-PF----"]={},I["G-O-PI----"]={},I["G-O-PE----"]={},I["G-O-PX----"]={},I["G-O-PJV---"]={},I["G-O-PJA---"]={},I["G-O-PJB---"]={},I["G-O-PK----"]={},I["G-O-PA----"]={},I["G-O-PO----"]={},I["G-O-IR----"]={},I["G-O-IS----"]={},I["G-O-IG----"]={},I["G-O-IV----"]={},I["G-O-IK----"]={},I["G-O-ID----"]={},I["G-O-IF----"]={}},icons:function(I,t,E,R){I["G-T-GD----"]=E["TP.DESTROY"],t["G-T-GD----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-GI----"]=E["TP.INTERDICT"],t["G-T-GI----"]={x1:0,x2:200,y1:40,y2:160},I["G-T-GN----"]=E["TP.NEUTRALIZE"],t["G-T-GN----"]={x1:0,x2:200,y1:40,y2:160},I["G-C-MGPFE-"]=E["TP.FIX ELECTRO-MAGNETIC"],I["G-C-MGPFA-"]=E["TP.FIX ACOUSTIC"],I["G-C-MGPFO-"]=E["TP.FIX ELECTRO-OPTICAL"],I["G-C-MGPI--"]=E["TP.POINT OF INTEREST"],t["G-C-MGPI--"]={x1:50,x2:150,y1:-25},I["G-C-MAAP--"]=E["TP.AIR CONTROL POINT (ACP)"],t["G-C-MAAP--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-MAAC--"]=E["TP.COMMUNICATIONS CHECKPOINT"],t["G-C-MAAC--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-MAAU--"]=E["TP.PULL-UP POINT"],t["G-C-MAAU--"]={x1:50,x2:240,y1:50,y2:150},I["G-C-MAAD--"]=E["TP.DOWNED AIRCREW PICKUP POINT"],t["G-C-MAAD--"]={x1:60,x2:140,y1:-60},I["G-C-MDN---"]=E["TP.DUMMY MINEFIELD"],t["G-C-MDN---"]={x1:40,x2:160,y1:-10,y2:140},I["G-C-MMPT--"]=E["TP.TARGET REFERENCE"],I["G-C-MMPO--"]=E["TP.OBSERVATION POST/OUTPOST"],t["G-C-MMPO--"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOC-"]=E["TP.COMBAT OUTPOST"],t["G-C-MMPOC-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOR-"]=E["TP.OBSERVATION POST/RECONNAISSANCE"],t["G-C-MMPOR-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOF-"]=E["TP.FORWARD OBSERVER POSITION"],t["G-C-MMPOF-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPOS-"]=E["TP.SENSOR OUTPOST"],t["G-C-MMPOS-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MMPON-"]=E["TP.CBRN OBSERVATION POST"],t["G-C-MMPON-"]={x1:50,x2:150,y1:40,y2:150},I["G-C-MOPD--"]=E["TP.POINT OF DEPARTURE"],t["G-C-MOPD--"]={x1:60,x2:140,y1:-60},I["G-C-BOATD-"]=E["TP.FIXED AND PREFABRICATED"],t["G-C-BOATD-"]={x1:60,x2:140,y1:30},I["G-C-BOAB--"]=E["TP.BOOBY TRAP"],I["G-C-BOAMA-"]=E["TP.ANTIPERSONNEL (AP) MINES"],I["G-C-BOAMT-"]=E["TP.ANTITANK MINE (AT)"],I["G-C-BOAMD-"]=E["TP.(AT) ANTIHANDLING DEVICE"],t["G-C-BOAMD-"]={x1:60,x2:140,y1:40,y2:195},I["G-C-BOAMC-"]=E["TP.(AT) DIRECTIONAL"],t["G-C-BOAMC-"]={x1:60,x2:140,y1:10,y2:140},I["G-C-BOAMU-"]=E["TP.UNSPECIFIED MINE"],I["G-C-BOAMW-"]=E["TP.WIDE AREA MINES"],I["G-C-BOAIP-"]=E["TP.PLANNED MINEFIELD"],t["G-C-BOAIP-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIC-"]=E["TP.MINEFIELDS STATIC"],t["G-C-BOAIC-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIN-"]=E["TP.ANTITANK (AT) MINEFIELD"],t["G-C-BOAIN-"]={x1:40,x2:160,y1:60,y2:140},I["G-C-BOAIS-"]=E["TP.SCATTERABLE MINES"],t["G-C-BOAIS-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAIH-"]=E["TP.ANTIPERSONNEL (AP) MINEFIELD"],t["G-C-BOAIH-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAID-"]=E["TP.SCATTERABLE MINEFIELD WITH SELF-DESTRUCT"],t["G-C-BOAID-"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BOAV--"]=E["TP.VOLCANO MINEFIELD"],t["G-C-BOAV--"]={x1:40,x2:160,y1:20,y2:140},I["G-C-BYCG--"]=E["TP.ENGINEER REGULATING POINT"],t["G-C-BYCG--"]={x1:60,x2:140,y1:-60},I["G-C-BSE---"]=E["TP.EARTHWORK/FORTIFICATION"],I["G-C-BSF---"]=E["TP.FORT"],I["G-C-BSH---"]=E["TP.SURFACE SHELTER"],I["G-C-BSU---"]=E["TP.UNDERGROUND SHELTER"],I["G-C-BWN---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO"],t["G-C-BWN---"]={x1:60,x2:140,y1:-20},I["G-C-BWE---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO"],t["G-C-BWE---"]={x1:60,x2:140,y1:-20},I["G-C-BWI---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"],t["G-C-BWI---"]={x1:60,x2:140,y1:-20},I["G-C-BWF---"]=E["TP.NUCLEAR DETONATIONS GROUND ZERO PLANNED"],t["G-C-BWF---"]={x1:60,x2:140,y1:-20},I["G-C-BWP---"]=E["TP.NUCLEAR FALLOUT PRODUCING"],t["G-C-BWP---"]={x1:50,x2:150,y1:-20},I["G-C-BWDP--"]=E["TP.DECON SITE/POINT"],t["G-C-BWDP--"]={x1:60,x2:140,y1:-60},I["G-C-BWDA--"]=E["TP.ALTERNATE DECON SITE/POINT"],t["G-C-BWDA--"]={x1:60,x2:140,y1:-60},I["G-C-BWDT--"]=E["TP.DECON SITE/POINT (TROOPS)"],t["G-C-BWDT--"]={x1:60,x2:140,y1:-60},I["G-C-BWDE--"]=E["TP.DECON SITE/POINT (EQUIPMENT)"],t["G-C-BWDE--"]={x1:60,x2:140,y1:-60},I["G-C-BWDS--"]=E["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],t["G-C-BWDS--"]={x1:60,x2:140,y1:-60},I["G-C-BWDO--"]=E["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],t["G-C-BWDO--"]={x1:60,x2:140,y1:-60},I["G-C-BWDG--"]=E["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],t["G-C-BWDG--"]={x1:60,x2:140,y1:-60},I["G-C-BWDEM-"]=E["TP.DECON POINT (MAIN) EQUIPMENT"],t["G-C-BWDEM-"]={x1:60,x2:140,y1:-60},I["G-C-BWDTF-"]=E["TP.DECON POINT (FORWARD) TROOPS"],t["G-C-BWDTF-"]={x1:60,x2:140,y1:-60},I["G-C-FSTP--"]=E["TP.POINT/SINGLE TARGET"],I["G-C-FSS---"]=E["TP.FIRE SUPPORT STATION"],I["G-C-FAU---"]=E["TP.NUCLEAR TARGET"],I["G-C-SPA---"]=E["TP.AMBULANCE EXCHANGE POINT"],t["G-C-SPA---"]={x1:60,x2:140,y1:-60},I["G-C-SPC---"]=E["TP.CANNIBALIZATION POINT"],t["G-C-SPC---"]={x1:60,x2:140,y1:-60},I["G-C-SPY---"]=E["TP.CASUALTY COLLECTION POINT"],t["G-C-SPY---"]={x1:60,x2:140,y1:-60},I["G-C-SPT---"]=E["TP.CIVILIAN COLLECTION POINT"],t["G-C-SPT---"]={x1:60,x2:140,y1:-60},I["G-C-SPD---"]=E["TP.DETAINEE COLLECTION POINT"],t["G-C-SPD---"]={x1:60,x2:140,y1:-60},I["G-C-SPE---"]=E["TP.EPW COLLECTION POINT"],t["G-C-SPE---"]={x1:60,x2:140,y1:-60},I["G-C-SPL---"]=E["TP.LOGISTICS RELEASE POINT"],t["G-C-SPL---"]={x1:60,x2:140,y1:-60},I["G-C-SPM---"]=E["TP.MAINTENANCE COLLECTION POINT"],t["G-C-SPM---"]={x1:60,x2:140,y1:-60},I["G-C-SPR---"]=E["TP.REARM, REFUEL AND RESUPPLY POINT"],t["G-C-SPR---"]={x1:60,x2:140,y1:-60},I["G-C-SPU---"]=E["TP.REFUEL ON THE MOVE POINT"],t["G-C-SPU---"]={x1:60,x2:140,y1:-60},I["G-C-SPO---"]=E["TP.TRAFFIC CONTROL POST"],t["G-C-SPO---"]={x1:60,x2:140,y1:-60},I["G-C-SPI---"]=E["TP.TRAILER TRANSFER POINT"],t["G-C-SPI---"]={x1:60,x2:140,y1:-60},I["G-C-SPN---"]=E["TP.UNIT MAINTENANCE COLLECTION POINT"],t["G-C-SPN---"]={x1:60,x2:140,y1:-60},I["G-C-SPQT--"]=E["TP.SUPPLY POINT"],t["G-C-SPQT--"]={x1:60,x2:140,y1:-60},I["G-C-SPQA--"]=E["TP.SP CLASS I"],t["G-C-SPQA--"]={x1:60,x2:140,y1:-60},I["G-C-SPQB--"]=E["TP.SP CLASS II"],t["G-C-SPQB--"]={x1:60,x2:140,y1:-60},I["G-C-SPQC--"]=E["TP.SP CLASS III"],t["G-C-SPQC--"]={x1:60,x2:140,y1:-60},I["G-C-SPQD--"]=E["TP.SP CLASS IV"],t["G-C-SPQD--"]={x1:60,x2:140,y1:-60},I["G-C-SPQE--"]=E["TP.SP CLASS V"],t["G-C-SPQE--"]={x1:60,x2:140,y1:-60},I["G-C-SPQF--"]=E["TP.SP CLASS VI"],t["G-C-SPQF--"]={x1:60,x2:140,y1:-60},I["G-C-SPQG--"]=E["TP.SP CLASS VII"],t["G-C-SPQG--"]={x1:60,x2:140,y1:-60},I["G-C-SPQH--"]=E["TP.SP CLASS VIII"],t["G-C-SPQH--"]={x1:60,x2:140,y1:-60},I["G-C-SPQI--"]=E["TP.SP CLASS IX"],t["G-C-SPQI--"]={x1:60,x2:140,y1:-60},I["G-C-SPQJ--"]=E["TP.SP CLASS X"],t["G-C-SPQJ--"]={x1:60,x2:140,y1:-60},I["G-C-SPMA--"]=E["TP.AMMUNITION SUPPLY POINT (ASP)"],t["G-C-SPMA--"]={x1:60,x2:140,y1:-60},I["G-C-SPMT--"]=E["TP.AMMUNITION TRANSFER POINT (ATP)"],t["G-C-SPMT--"]={x1:60,x2:140,y1:-60},I["G-C-OX----"]=E["TP.SPECIAL POINT"],t["G-C-OX----"]={x1:40,x2:160,y1:40,y2:160},I["G-C-OXRN--"]=E["TP.NAVIGATIONAL REFERENCE"],t["G-C-OXRN--"]={x1:40,x2:160,y1:40,y2:160},I["G-C-OXUD--"]=E["TP.DATUM"],t["G-C-OXUD--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXUB--"]=E["TP.BRIEF CONTACT"],t["G-C-OXUB--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXUL--"]=E["TP.LOST CONTACT"],t["G-C-OXUL--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXUS--"]=E["TP.SINKER"],t["G-C-OXUS--"]={x1:50,x2:150,y1:0,y2:100},I["G-C-OXWA--"]=E["TP.AIM POINT"],t["G-C-OXWA--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXWD--"]=E["TP.DROP POINT"],t["G-C-OXWD--"]={x1:50,x2:150,y1:50,y2:120},I["G-C-OXWE--"]=E["TP.ENTRY POINT"],t["G-C-OXWE--"]={x1:50,x2:150,y1:50},I["G-C-OXWG--"]=E["TP.GROUND ZERO"],t["G-C-OXWG--"]={x1:50,x2:150,y1:30},I["G-C-OXWM--"]=E["TP.MSL DETECT POINT"],t["G-C-OXWM--"]={x1:50,x2:150,y1:30},I["G-C-OXWI--"]=E["TP.IMPACT POINT"],t["G-C-OXWI--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXWP--"]=E["TP.PREDICTED IMPACT POINT"],t["G-C-OXWP--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXY---"]=E["TP.SONOBUOY"],t["G-C-OXY---"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYP--"]=E["TP.SONOBUOY PATTERN CENTER"],t["G-C-OXYP--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYD--"]=E["TP.SONOBUOY DIFAR"],t["G-C-OXYD--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYL--"]=E["TP.SONOBUOY LOFAR"],t["G-C-OXYL--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYC--"]=E["TP.SONOBUOY CASS"],t["G-C-OXYC--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYS--"]=E["TP.SONOBUOY DICASS"],t["G-C-OXYS--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYB--"]=E["TP.SONOBUOY BT"],t["G-C-OXYB--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYA--"]=E["TP.SONOBUOY ANM"],t["G-C-OXYA--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYV--"]=E["TP.SONOBUOY VLAD"],t["G-C-OXYV--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYT--"]=E["TP.SONOBUOY ATAC"],t["G-C-OXYT--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYR--"]=E["TP.SONOBUOY RO"],t["G-C-OXYR--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXYK--"]=E["TP.SONOBUOY KINGPIN"],t["G-C-OXYK--"]={x1:60,x2:140,y1:-10,y2:160},I["G-C-OXN---"]=E["TP.FORMATION"],t["G-C-OXN---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXH---"]=E["TP.HARBOR"],t["G-C-OXH---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHQ--"]=E["TP.HARBOR POINT Q"],t["G-C-OXHQ--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHA--"]=E["TP.HARBOR POINT A"],t["G-C-OXHA--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHY--"]=E["TP.HARBOR POINT Y"],t["G-C-OXHY--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXHX--"]=E["TP.HARBOR POINT X"],t["G-C-OXHX--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXR---"]=E["TP.ROUTE"],t["G-C-OXR---"]={x1:30,x2:170,y1:60,y2:140},I["G-C-OXRR--"]=E["TP.ROUTE RENDEZVOUS"],t["G-C-OXRR--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRD--"]=E["TP.ROUTE DIVERSIONS"],t["G-C-OXRD--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRW--"]=E["TP.ROUTE WAYPOINT"],t["G-C-OXRW--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRP--"]=E["TP.ROUTE PIM"],t["G-C-OXRP--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXRT--"]=E["TP.ROUTE POINT R"],t["G-C-OXRT--"]={x1:30,x2:170,y1:60,y2:170},I["G-C-OXSTC-"]=E["TP.COMBATANT STATION"],t["G-C-OXSTC-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTCP"]=E["TP.PICKET STATION"],t["G-C-OXSTCP"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTCA"]=E["TP.ASW SHIP STATION"],t["G-C-OXSTCA"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTR-"]=E["TP.REPLENISHMENT AT SEA (RAS) STATION"],t["G-C-OXSTR-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTH-"]=E["TP.RESCUE STATION"],t["G-C-OXSTH-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTS-"]=E["TP.SUBMARINE STATION"],t["G-C-OXSTS-"]={x1:-15,x2:140,y1:60,y2:140},I["G-C-OXSTSA"]=E["TP.ASW SUBMARINE STATION"],t["G-C-OXSTSA"]={x1:-115,x2:140,y1:60,y2:140},I["G-C-OXS---"]=E["TP.SEARCH"],t["G-C-OXS---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXSA--"]=E["TP.SEARCH AREA"],t["G-C-OXSA--"]={x1:20,x2:150,y1:50,y2:150},I["G-C-OXSD--"]=E["TP.DIP POSITION"],t["G-C-OXSD--"]={x1:10,x2:150,y1:50,y2:150},I["G-C-OXSC--"]=E["TP.SEARCH CENTER"],t["G-C-OXSC--"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OXAC--"]=E["TP.COMBAT AIR PATROL (CAP)"],t["G-C-OXAC--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAA--"]=E["TP.AIRBORNE EARLY WARNING (AEW)"],t["G-C-OXAA--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAT--"]=E["TP.TACAN"],t["G-C-OXAT--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAK--"]=E["TP.TANKING"],t["G-C-OXAK--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAF--"]=E["TP.FIXED WING"],t["G-C-OXAF--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAH--"]=E["TP.ROTARY WING"],t["G-C-OXAH--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAO--"]=E["TP.TOMCAT"],t["G-C-OXAO--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAR--"]=E["TP.RESCUE"],t["G-C-OXAR--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAP--"]=E["TP.REPLENISH"],t["G-C-OXAP--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAM--"]=E["TP.MARSHALL"],t["G-C-OXAM--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAS--"]=E["TP.STRIKE IP"],t["G-C-OXAS--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OXAD--"]=E["TP.CORRIDOR TAB POINT"],t["G-C-OXAD--"]={x1:60,x2:140,y1:40,y2:160},I["G-C-OG----"]=E["TP.ACTION POINT"],t["G-C-OG----"]={x1:60,x2:140,y1:-60},I["G-C-OGC---"]=E["TP.ACTION POINT"],t["G-C-OGC---"]={x1:60,x2:140,y1:-60},I["G-C-OGP---"]=E["TP.CONTACT POINT"],t["G-C-OGP---"]={x1:55,x2:145,y1:-10},I["G-C-OGT---"]=E["TP.COORDINATION POINT"],t["G-C-OGT---"]={x1:50,x2:150,y1:50,y2:150},I["G-C-OGD---"]=E["TP.DECISION POINT"],t["G-C-OGD---"]={x1:30,x2:170,y1:25,y2:160},I["G-C-OGL---"]=E["TP.ACTION LINKUP POINT"],t["G-C-OGL---"]={x1:60,x2:140,y1:-60},I["G-C-OGN---"]=E["TP.ACTION PASSAGE POINT"],t["G-C-OGN---"]={x1:60,x2:140,y1:-60},I["G-C-OGR---"]=E["TP.ACTION RALLY POINT"],t["G-C-OGR---"]={x1:60,x2:140,y1:-60},I["G-C-OGS---"]=E["TP.ACTION RELEASE POINT"],t["G-C-OGS---"]={x1:60,x2:140,y1:-60},I["G-C-OGI---"]=E["TP.ACTION START POINT"],t["G-C-OGI---"]={x1:60,x2:140,y1:-60},I["G-C-OGW---"]=E["TP.WAYPOINT"],t["G-C-OGW---"]={x1:60,x2:140,y1:60,y2:140},I["G-O-VA----"]=E["TP.FIRE"],I["G-O-VR----"]=E["GR.EQ.HOWITZER"],I["G-O-VE----"]=E["ST.IC.KILLING VICTIM"],I["G-O-VB----"]=E["AIR.MISSILE.IC.BOMB"],I["G-O-VY----"]=E["ST.IC.BOOBY TRAP"],I["G-O-VD----"]=E["ST.IC.DRIVE-BY SHOOTING"],I["G-O-VI----"]=E["TP.INDIRECT FIRE"],I["G-O-VM----"]=E["GR.EQ.MORTAR"],I["G-O-VK----"]=E["GR.EQ.MULTIPLE ROCKET LAUNCHER"],I["G-O-VS----"]=E["ST.IC.SNIPING"],I["G-O-VP----"]=E["ST.IC.POISONING"],I["G-O-VU----"]=E["TP.AMBUSH"],I["G-O-VC----"]=E["GR.IC.FF.CLASS V"],I["G-O-VH----"]=E["AR.I.FF.CIVILIAN ROTARY WING"],I["G-O-VF----"]=[E["GR.IC.FF.INFANTRY"],E["GR.IC.FF.MOTORIZED"]],I["G-O-VO----"]=E["GR.IC.FF.INFANTRY"],I["G-O-VL----"]=E["GR.IC.FF.RECONNAISSANCE"],I["G-O-VX----"]=E["GR.IC.FF.SIGNAL"],I["G-O-VZ----"]=E["GR.IC.FF.SUPPLY"],I["G-O-LB----"]=E["ST.IC.BLACK LIST LOCATION"],I["G-O-LG----"]=E["ST.IC.GRAY LIST LOCATION"],I["G-O-LW----"]=E["ST.IC.WHITE LIST LOCATION"],I["G-O-PR----"]=E["TP.ROAD BLOCK"],I["G-O-PRB---"]=E["TP.ROAD BLOCK (UNDER CONSTRUCTION)"],I["G-O-PT----"]=E["ST.IC.PATROLLING"],I["G-O-PC----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.WILLING"]],I["G-O-PCU---"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.COERCED/IMPRESSED"]],I["G-O-PD----"]=E["ST.IC.DEMONSTRATION"],I["G-O-PM----"]=E["ST.IC.MINE LAYING"],I["G-O-PH----"]=E["ST.IC.PSYCHOLOGICAL OPERATIONS"],I["G-O-PHY---"]=E["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"],I["G-O-PHW---"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["G-O-PHG---"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],I["G-O-PHT---"]=[E["ST.IC.PSYCHOLOGICAL OPERATIONS"],E["ST.M1.HOUSE-TO-HOUSE"]],I["G-O-PG----"]=E["ST.IC.SEARCHING"],I["G-O-PS----"]=E["ST.IC.SPY"],I["G-O-PF----"]=E["ST.IC.FOOD DISTRIBUTION"],I["G-O-PI----"]=E["GR.IC.FF.MEDICAL TREATMENT FACILITY"],I["G-O-PE----"]=[E["GR.IC.ELECTRONIC WARFARE"],E["GR.IC.FF.INTERCEPT"]],I["G-O-PX----"]=E["ST.IC.EXTORTION"],I["G-O-PJV---"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PJA---"]=[E["ST.IC.HIJACKING (AIRPLANE)"],E["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PJB---"]=[E["ST.IC.HIJACKING (BOAT)"],E["ST.M1.HIJACKING/HIJACKED"]],I["G-O-PK----"]=[E["ST.IC.INDIVIDUAL"],E["ST.M1.KIDNAPPING"]],I["G-O-PA----"]=E["ST.IC.ARREST"],I["G-O-PO----"]=E["ST.IC.DRUG RELATED ACTIVITIES"],I["G-O-IR----"]=E["ST.IC.GROUP"],I["G-O-IS----"]=E["ST.IC.SAFE HOUSE"],I["G-O-IG----"]=E["ST.IC.GRAFFITI"],I["G-O-IV----"]=E["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"],I["G-O-IK----"]=E["ST.IC.KNOWN INSURGENT VEHICLE"],I["G-O-ID----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.DRUG"]],I["G-O-IF----"]=E["ST.IC.INTERNAL SECURITY FORCE"]}}],Y=[L,y,h,x,U,p,m,F,z,H,{type:"letter",getMetadata:o,getIcons:M,iconParts:[function(I,t,E,R,e,A){var C=t.affiliation||"Friend",T=E.iconColor[C],S={"2525B.ASWSUB":{type:"path",d:"m 80,85 40,0 0,-20 -40,0 z m 20,-30 0,40 m -40,15 15,15 50,0 15,-15 -15,-15 -50,0 z"},"2525B.NCBTT.STN":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"NC"}],"2525B.STN.ASWSHP":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"AS"}],"2525B.STN.PKT":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"PK"}],"2525B.STN.RSC":[{type:"path",fill:!1,d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"RS"}],"2525B.STN":{type:"path",fill:!1,d:"m 70,85 c 20,0 40,0 60,0 0,10 0,20 0,30 -20,0 -40,0 -60,0 0,-10 0,-20 0,-30 z m 30,-15 c 0,20 0,40 0,60 m 35,-5 C 120,148 82.7,149 66.8,126 49.2,105 59.1,69.2 85.2,60.1 103,53.1 124,59.4 135,74.8"},"2525B.SUB.STN":[{type:"path",d:"m 70,85 60,0 0,30 -60,0 z m 30,-15 0,60"},{type:"text",stroke:!1,x:100,y:145,fontsize:30,text:"SS"}]};for(var N in S)S.hasOwnProperty(N)&&(I.hasOwnProperty(N)&&console.warn("Override of: "+N),n.call(this,S[N],T),I[N]=S[N])}],icons:function(I,t,E,R){I["S-S-S-----"]=E["2525B.STN"],I["S-S-SP----"]=E["2525B.STN.PKT"],I["S-S-SA----"]=E["2525B.STN.ASWSHP"],I["S-S-NN----"]=E["2525B.NCBTT.STN"],I["S-S-NNR---"]=E["2525B.STN.RSC"],I["S-U-SS----"]=E["2525B.SUB.STN"],I["S-U-SSA---"]=E["2525B.ASWSUB"],I["G-O-SBWD--"]=E["TP.WRECK, DANGEROUS"],t["G-O-SBXD--"]={x1:35,x2:165,y1:70,y2:130}}},k],W=[L,y,h,x,U,p,m,F,z,H,{type:"letter",getMetadata:o,getIcons:M,iconParts:[c,V],icons:function(I,t,E,R){I["E-I-A-----"]=[E["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]],I["E-I-AC----"]=[E["ST.IC.GROUP"],E["AC.M1.RIOT"]],I["E-I-B-----"]=[E["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]],I["E-I-BA----"]=[E["ST.IC.BOMB"],E["AC.M1.THREAT"]],I["E-I-BC----"]=[E["ST.IC.EXPLOSION"],s._scale(.6,E["ST.IC.BOMB"])],I["E-I-BD----"]=[E["ST.IC.GROUP"],E["ST.M1.LOOT"]],I["E-I-BF----"]=[E["AC.IC.SHOOTING"]],I["E-I-C-----"]=[E["AC.IC.FIRE EVENT"]],I["E-I-CA----"]=[E["AC.IC.HOT SPOT"]],I["E-I-CB----"]=[E["AC.IC.NON-REsIdENTIAL FIRE"]],I["E-I-CC----"]=[E["AC.IC.FIRE ORIGIN"]],I["E-I-CD----"]=[E["AC.IC.REsIdENTIAL FIRE"]],I["E-I-CE----"]=[E["AC.IC.SCHOOL FIRE"]],I["E-I-CF----"]=[E["AC.IC.SMOKE"]],I["E-I-CG----"]=[E["AC.IC.SPECIAL NEEDS FIRE"]],I["E-I-CH----"]=[E["AC.IC.WILD FIRE"]],I["E-I-D-----"]=[E["AC.IC.HAZARDOUS MATERIALS INCIDENT"]],I["E-I-DA----"]=[E["AC.IC.CHEMICAL AGENT"]],I["E-I-DB----"]=[E["AC.IC.CORROSIVE MATERIAL"]],I["E-I-DC----"]=[E["AC.IC.HAZARDOUS WHEN WET"]],I["E-I-DD----"]=[E["AC.IC.EXPLOSIVE MATERIAL"]],I["E-I-DE----"]=[E["AC.IC.FLAMMABLE GAS"]],I["E-I-DF----"]=[E["AC.IC.FLAMMABLE LIQUID"]],I["E-I-DG----"]=[E["AC.IC.FLAMMABLE SOLID"]],I["E-I-DH----"]=[E["AC.IC.NON-FLAMMABLE GAS"]],I["E-I-DI----"]=[E["AC.IC.ORGANIC PEROXIDE"]],I["E-I-DJ----"]=[E["AC.IC.OXIDIZER"]],I["E-I-DK----"]=[E["AC.IC.RADIOACTIVE MATERIAL"]],I["E-I-DL----"]=[E["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]],I["E-I-DM----"]=[E["AC.IC.TOXIC GAS"]],I["E-I-DN----"]=[E["AC.IC.TOXIC INFECTIOUS MATERIAL"]],I["E-I-DO----"]=[E["AC.IC.UNEXPLODED ORDNANCE"]],I["E-I-E-----"]=[E["ST.M1.INCIDENT"],E["ST.IC.HIJACKING (AIRPLANE)"]],I["E-I-EA----"]=[E["ST.M1.ACCIDENT"],E["ST.IC.HIJACKING (AIRPLANE)"]],I["E-I-F-----"]=[E["ST.M1.INCIDENT"],E["ST.IC.HIJACKING (BOAT)"]],I["E-I-FA----"]=[E["ST.M1.ACCIDENT"],E["ST.IC.HIJACKING (BOAT)"]],I["E-I-G-----"]=[E["ST.M1.INCIDENT"],E["GR.EQ.TRAIN LOCOMOTIVE"]],I["E-I-GA----"]=[E["ST.M1.ACCIDENT"],E["GR.EQ.TRAIN LOCOMOTIVE"]],I["E-I-GB----"]=[E["GR.EQ.TRAIN LOCOMOTIVE"],E["ST.M1.HIJACKING/HIJACKED"]],I["E-I-H-----"]=[E["ST.M1.INCIDENT"],E["ST.IC.KNOWN INSURGENT VEHICLE"]],I["E-I-HA----"]=[E["ST.M1.ACCIDENT"],E["ST.IC.KNOWN INSURGENT VEHICLE"]],I["E-N-A-----"]=[],I["E-N-AA----"]=[E["AC.IC.AFTERSHOCK"]],I["E-N-AB----"]=[E["AC.IC.AVALANCHE"]],I["E-N-AC----"]=[E["AC.IC.EARTHQUAKE EPICENTER"]],I["E-N-AD----"]=[E["AC.IC.LANDSLIDE"]],I["E-N-AE----"]=[E["AC.IC.SUBSIDENCE"]],I["W-S-WSVE--"]=[E["AC.IC.VOLCANIC ERUPTION"]],I["E-N-AG----"]=[E["AC.IC.VOLCANIC THREAT"]],I["W-S-WSD-LI"]=[E["ATMOSPHERIC.IC.DRIZZLE.INTERMITTENT LIGHT"]],I["E-N-B-----"]=[],I["E-N-BB----"]=[E["AC.IC.DROUGHT"]],I["E-N-BC----"]=[E["AC.IC.FLOOD"]],I["W-S-WSFGSO"]=[E["ATMOSPHERIC.IC.FOG.SKY OBSCURED"]],I["W-S-WSGRL-"]=[E["ATMOSPHERIC.IC.HAIL.LIGHT NOT ASSOCIATED WITH THUNDER"]],I["E-N-BF----"]=[E["AC.IC.INVERSION"]],I["W-S-WSR-LI"]=[E["ATMOSPHERIC.IC.RAIN.INTERMITTENT LIGHT"]],I["W-S-WSDSLM"]=[E["ATMOSPHERIC.IC.DUST OR SAND.LIGHT TO MODERATE"]],I["W-S-WSS-LI"]=[E["ATMOSPHERIC.IC.SNOW.INTERMITTENT LIGHT"]],I["W-S-WSTMH-"]=[E["ATMOSPHERIC.IC.STORMS.THUNDERSTORM LIGHT TO MODERATE - WITH HAIL"]],I["W-S-WST-FC"]=[E["ATMOSPHERIC.IC.STORMS.FUNNEL CLOUD (TORNADO/WATERSPOUT)"]],I["W-S-WSTSS-"]=[E["ATMOSPHERIC.IC.TROPICAL STORM SYSTEMS.TROPICAL STORM"]],I["E-N-BM----"]=[E["AC.IC.TSUNAMI"]],I["E-N-C-----"]=[],I["E-N-CA----"]=[E["AC.IC.BIRD"]],I["E-N-CB----"]=[E["AC.IC.INSECT"]],I["E-N-CC----"]=[E["AC.IC.MICROBIAL"]],I["E-N-CD----"]=[E["AC.IC.REPTILE"]],I["E-N-CE----"]=[E["AC.IC.RODENT"]],I["E-O-A-----"]=I["E-O-AA----"]=I["E-O-AB----"]=I["E-O-AC----"]=I["E-O-AD----"]=[E["GR.IC.EMERGENCY MEDICAL OPERATION"]],I["E-O-AE----"]=[E["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],E["GR.M1.MEDEVAC"]],I["E-O-AF----"]=[s._translate(0,10,s._scale(.8,E["GR.I.FF.CIVILIAN ROTARY WING"])),E["GR.M1.MEDEVAC"]],I["E-O-AG----"]=[E["AC.IC.HEALTH DEPARTMENT FACILITY"]],I["E-O-AJ----"]=[E["AC.IC.MEDICAL FACILITIES OUTPATIENT"]],I["E-O-AK----"]=[E["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]],I["E-O-AL----"]=[E["AC.IC.PHARMACY"]],I["E-O-AM----"]=[E["AC.IC.TRIAGE"]],I["E-O-B-----"]=I["E-O-BA----"]=I["E-O-BB----"]=I["E-O-BC----"]=[E["GR.IC.FF.EMERGENCY OPERATION"]],I["E-O-BD----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]],I["E-O-BE----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]],I["E-O-BF----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY OPERATIONS CENTER"]],I["E-O-BG----"]=[E["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]],I["E-O-BH----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY SHELTER"]],I["E-O-BI----"]=[s._scale(.7,E["GR.IC.FF.EMERGENCY OPERATION"]),E["AC.M1.EMERGENCY STAGING AREA"]],I["E-O-BJ----"]=[E["GR.IC.FF.EMERGENCY OPERATION"]],I["E-O-BK----"]=I["S-G-USSW--"],I["E-O-BL----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.EMERGENCY"]],I["E-O-C-----"]=I["E-O-CA----"]=I["E-O-CB----"]=I["E-O-CE----"]=[E["GR.IC.FIRE PROTECTION"]],I["E-O-CC----"]=[E["AC.IC.FIRE HYDRANT"]],I["E-O-CD----"]=[E["AC.IC.OTHER WATER SUPPLY LOCATION"]],I["E-O-D-----"]=I["E-O-DA----"]=I["E-O-DB----"]=I["E-O-DC----"]=[E["GR.IC.FF.LAW ENFORCEMENT"]],I["E-O-DD----"]=I["E-O-DDA---"]=I["E-O-DDB---"]=I["E-O-DDC---"]=[E["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I["E-O-DE----"]=I["E-O-DEA---"]=I["E-O-DEB---"]=I["E-O-DEC---"]=[E["GR.IC.FF.BORDER PATROL"]],I["E-O-DF----"]=I["E-O-DFA---"]=I["E-O-DFB---"]=I["E-O-DFC---"]=[E["GR.IC.FF.CUSTOMS SERVICE"]],I["E-O-DG----"]=I["E-O-DGA---"]=I["E-O-DGB---"]=I["E-O-DGC---"]=[E["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I["E-O-DH----"]=I["E-O-DHA---"]=I["E-O-DHB---"]=I["E-O-DHC---"]=[E["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I["E-O-DI----"]=I["E-O-DIA---"]=I["E-O-DIB---"]=I["E-O-DIC---"]=[E["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I["E-O-DJ----"]=I["E-O-DJB---"]=I["E-O-DJC---"]=[E["GR.IC.LAW ENFORCEMENT"]],I["E-O-DK----"]=[E["GR.IC.FF.PRISON"]],I["E-O-DL----"]=I["E-O-DLA---"]=I["E-O-DLB---"]=I["E-O-DLC---"]=[E["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I["E-O-DM----"]=I["E-O-DMA---"]=I["E-O-DMB---"]=I["E-O-DMC---"]=[E["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I["E-O-DN----"]=I["E-O-DNA---"]=I["E-O-DNC---"]=[E["GR.IC.LAW ENFORCEMENT VESSEL"]],I["E-O-DO----"]=I["E-O-DOA---"]=I["E-O-DOB---"]=I["E-O-DOC---"]=[E["GR.IC.FF.US MARSHALS SERVICE"]],I["E-O-EA----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.BIOLOGICAL"]],I["E-O-EB----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.CHEMICAL"]],I["E-O-EC----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.INTRUSION"]],I["E-O-ED----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.NUCLEAR"]],I["E-O-EE----"]=[s._scale(.6,E["GR.EQ.SENSOR"]),E["GR.M1.RADIOLOGICAL"]],I["E-F-A-----"]=[E["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]],I["E-F-AA----"]=[E["GR.IN.IC.AGRICULTURAL LABORATORY"]],I["E-F-AB----"]=[E["GR.IN.IC.ANIMAL FEEDLOT"]],I["E-F-AC----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.COMMERCIAL"]],I["E-F-AD----"]=[E["GR.IN.IC.FARM/RANCH"]],I["E-F-AE----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.PRODUCTION"]],I["E-F-AF----"]=[E["ST.IC.FOOD DISTRIBUTION"],E["AC.M1.RETAIL"]],I["E-F-AG----"]=[E["GR.IN.IC.GRAIN STORAGE"]],I["E-F-B-----"]=[E["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]],I["E-F-BA----"]=[E["GR.IN.IC.ATM"]],I["E-F-BB----"]=[E["GR.IN.IC.BANK"]],I["E-F-BC----"]=[E["GR.IN.IC.BULLION STORAGE"]],I["E-F-BD----"]=[E["GR.IN.IC.FEDERAL RESERVE BANK"]],I["E-F-BE----"]=[E["GR.IN.IC.FINANCIAL EXCHANGE"]],I["E-F-BF----"]=[E["GR.IN.IC.FINANCIAL SERVICES, OTHER"]],I["E-F-C-----"]=[E["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]],I["E-F-CA----"]=[E["GR.IN.IC.CHEMICAL PLANT"]],I["E-F-CB----"]=[E["GR.IN.IC.FIREARMS MANUFACTURER"]],I["E-F-CC----"]=[E["GR.IN.IC.FIREARMS RETAILER"]],I["E-F-CD----"]=[E["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]],I["E-F-CE----"]=[E["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]],I["E-F-CF----"]=[E["GR.IN.IC.INDUSTRIAL SITE"]],I["E-F-CG----"]=[E["GR.IN.IC.LANDFILL"]],I["E-F-CH----"]=[E["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]],I["E-F-CI----"]=[E["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]],I["E-F-CJ----"]=[E["GR.IN.IC.TOXIC RELEASE INVENTORY"]],I["E-F-D-----"]=[E["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]],I["E-F-DA----"]=[E["GR.IN.IC.COLLEGE/UNIVERSITY"]],I["E-F-DB----"]=[E["GR.IN.IC.SCHOOL"]],I["E-F-EA----"]=[s._translate(0,15,s._scale(.75,E["GR.IN.IC.ELECTRIC POWER"])),E["AC.M1.GENERATION STATION"]],I["E-F-EB----"]=[E["GR.IN.IC.NATURAL GAS FACILITY"]],I["E-F-EE----"]=[E["GR.IN.IC.PROPANE FACILITY"]],I["E-F-F-----"]=[E["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]],I["E-F-G-----"]=[E["GR.IN.IC.MILITARY INFRASTRUCTURE"]],I["E-F-GA----"]=[E["GR.IN.IC.BASE"],E["AC.M1.MILITARY ARMORY"]],I["E-F-H-----"]=[E["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]],I["E-F-HA----"]=[E["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]],I["E-F-HB----"]=[E["GR.IN.IC.POST OFFICE"]],I["E-F-I-----"]=[E["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]],I["E-F-IA----"]=[E["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]],I["E-F-IB----"]=[E["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]],I["E-F-IC----"]=[E["GR.IN.IC.RECREATIONAL AREA"]],I["E-F-ID----"]=[E["GR.IN.IC.RELIGIOUS INSTITUTION"]],I["E-F-J-----"]=[E["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]],I["E-F-JA----"]=[E["GR.IN.IC.ADULT DAY CARE"]],I["E-F-JB----"]=[E["GR.IN.IC.CHILD DAY CARE"]],I["E-F-JC----"]=[E["GR.IN.IC.ELDER CARE"]],I["E-F-K-----"]=[E["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]],I["E-F-KB----"]=[E["GR.IN.IC.TELECOMMUNICATIONS TOWER"]],I["E-F-LA----"]=[E["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]],I["G-M-BCB---"]=[E["GR.IN.IC.BRIDGE"]],t["G-M-BCB---"]={x1:50,x2:150,y1:50,y2:150},I["E-F-LD----"]=[E["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I["E-F-LE----"]=[E["GR.IC.FERRY"]],I["E-F-LF----"]=[E["GR.IN.IC.HELICOPTER LANDING SITE"]],I["W-S-ML----"]=[E["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE LOCK"]],I["E-F-LH----"]=[E["GR.IC.MAINTENANCE"]],I["E-F-LJ----"]=[E["GR.IC.RAILHEAD"]],I["E-F-LK----"]=[E["GR.IN.IC.REST STOP"]],I["W-S-HPBA--"]=[E["GR.IN.IC.TRANSPORTATION INFRASTRUCTURE SHIP ANCHORAGE"]],I["E-F-LM----"]=[E["GR.IN.IC.TOLL FACILITY"]],I["G-S-PO----"]=E["TP.TRAFFIC CONTROL POST"],t["G-S-PO----"]={x1:60,x2:140,y1:-60},I["E-F-LO----"]=[E["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]],I["E-F-LP----"]=[E["GR.IN.IC.TUNNEL"]],I["E-F-MA----"]=[E["GR.IN.IC.CONTROL VALVE"]],I["E-F-MB----"]=[E["GR.IN.IC.DAM"]],I["E-F-MC----"]=[E["GR.IN.IC.DISCHARGE OUTFALL"]],I["E-F-MD----"]=[E["GR.IN.IC.GROUND WATER WELL"]],I["E-F-ME----"]=[E["GR.IN.IC.PUMPING STATION"]],I["E-F-MF----"]=[E["GR.IN.IC.RESERVOIR"]],I["E-F-MG----"]=[E["GR.IN.IC.STORAGE TOWER"]],I["E-F-MH----"]=[E["GR.IN.IC.SURFACE WATER INTAKE"]],I["E-F-MI----"]=[E["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]],I["O-O-D-----"]=[E["ST.IC.DEMONSTRATION"]],I["O-I-R-----"]=[E["ST.IC.GROUP"]],I["O-V-B-----"]=[E["ST.IC.BOMB"]],I["O-V-P-----"]=[E["ST.IC.POISONING"]],I["O-O-HA----"]=[E["ST.IC.HIJACKING (AIRPLANE)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HV----"]=[E["ST.IC.HIJACKING (BOAT)"],E["ST.M1.HIJACKING/HIJACKED"]],I["O-O-HT----"]=[E["ST.IC.KNOWN INSURGENT VEHICLE"],E["ST.M1.HIJACKING/HIJACKED"]],I["S-G-IXH---"]=[E["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I["S-S-NM----"]=[E["GR.IC.HOSPITAL SHIP"]],I["E-O-BK----"]=[E["GR.IC.FF.SUPPLY"],E["GR.IC.WATER"]],I["S-G-UULC--"]=[E["GR.IC.LAW ENFORCEMENT"]],I["S-S-XL----"]=[E["GR.IC.LAW ENFORCEMENT VESSEL"]],I["S-G-ES----"]=[E["GR.EQ.SENSOR"]],I["S-G-IUE---"]=[E["GR.IN.IC.ELECTRIC POWER"]],I["S-G-IUEN--"]=[E["GR.IN.IC.ELECTRIC POWER"],E["GR.IN.IC.ELECTRIC POWER NUCLEAR"]],I["S-G-IRP---"]=[E["GR.IC.FF.CLASS III"]],I["S-G-IB----"]=[E["GR.IN.IC.BASE"]],I["S-G-IUT---"]=[E["GR.IN.IC.TELECOMMUNICATIONS"]],I["S-G-IT----"]=[E["GR.IC.TRANSPORTATION"]],I["S-G-IBA---"]=[E["GR.IC.TRANSPORTATION"],E["GR.IC.AIRPORT OF DEBARKATION"]],I["S-G-IBN---"]=[E["GR.IC.NAVAL"]],I["S-G-IUP---"]=[E["GR.IC.WATER"]]}},k];function u(I,t,E){var R=this.options.sidc.substr(2,1),e=this.options.sidc.substr(3,1),A=this.options.sidc.substr(4,2),C=this.options.sidc.substr(6,1),T=this.options.sidc.substr(7,1),S=this.options.sidc.substr(8,2),N=t.functionid=this.options.sidc.substr(10,10);return t.context=E.context[parseInt(this.options.sidc.substr(2,1))],t.affiliation={0:"Unknown",1:"Unknown",2:"Friend",3:"Friend",4:"Neutral",5:"Hostile",6:"Hostile"}[e],t.dimension={"00":"Sea","01":"Air","02":"Air","05":"Air","06":"Air",10:"Ground",11:"Ground",12:"Ground",15:"Ground",20:"Ground",30:"Sea",35:"Subsurface",36:"Subsurface",39:"Subsurface",40:"Ground",50:"Air",51:"Air",52:"Ground",53:"Sea",54:"Subsurface",60:"Ground"}[A]||"","10"!=A&&"11"!=A&&"25"!=A&&"27"!=A&&"40"!=A||(t.unit=!0),"05"!=A&&"06"!=A&&"50"!=A||(t.space=!0),"40"==A&&(t.activity=!0),"20"==A&&(t.installation=!0),"25"==A&&(t.controlMeasure=!0),"60"==A&&(t.cyberspace=!0),"36"==A&&!1===this.style.alternateMedal&&(t.fill=!1),"30"==A&&15e4==N.substr(0,6)&&(t.frame=!1),"1"==C&&(t.notpresent=I._dashArrays.anticipated),"0"!=e&&"2"!=e&&"5"!=e||(t.notpresent=I._dashArrays.pending),"30"==A&&16e4==N.substr(0,6)&&(t.notpresent=I._dashArrays.pending),"35"==A&&14e4==N.substr(0,6)&&(t.notpresent=I._dashArrays.pending),"35"==A&&15e4==N.substr(0,6)&&(t.notpresent=I._dashArrays.pending),"2"!=C&&"3"!=C&&"4"!=C&&"5"!=C||(t.condition=E.status[parseInt(C)]),t.baseDimension=t.dimension,t.baseAffilation=t.affiliation,"5"==e&&"1"==R&&(t.joker=!0),"6"==e&&"1"==R&&(t.faker=!0),(t.joker||t.faker)&&(t.affiliation=E.affiliation[1]),"00"==A&&(t.dimensionUnknown=!0),"00"==A&&"1"==R&&"Unknown"!=t.affiliation&&(t.affiliation=""),"27"==A&&(t.dimension="LandDismountedIndividual",t.dismounted=!0),"15"!=A&&"52"!=A||(t.dimension=E.dimension[2]),-1<["1","3","5","7"].indexOf(T)&&(t.feintDummy=!0),-1<["2","3","6","7"].indexOf(T)&&(t.headquarters=!0),-1<["4","5","6","7"].indexOf(T)&&(t.taskForce=!0),S<=30&&(t.echelon=E.echelonMobility[S]),30<=S&&S<70&&(t.mobility=E.echelonMobility[S]),70<=S&&S<80&&(t.leadership=E.echelonMobility[S]),("01"==A&&"12"==N.substring(0,2)||"05"==A&&"12"==N.substring(0,2)||"11"==A||"12"==A&&"12"==N.substring(0,2)||"15"==A&&"16"==N.substring(0,2)||"30"==A&&"14"==N.substring(0,2)||"35"==A&&"12"==N.substring(0,2))&&(t.civilian=!0),t}function v(I,t,E,R){var e={},A={},C={},T={};for(var S in I._iconSIDC.number)I._iconSIDC.number.hasOwnProperty(S)&&I._iconSIDC.number[S].call(this,e,A,C,T,t,E,R);return{icons:e,m1:A,m2:C,bbox:T}}var Q={type:"number",getMetadata:u,getIcons:v,iconParts:P,icons:function(I,t,E,R,e,A,C){"01"==e&&(I[11e4]=[A["AR.I.MILITARY"]],I[110100]=[A["AR.I.FIXED-WING DSymbol"]],I[110101]=[A["AR.I.MEDICAL EVACUATION"]],I[110102]=[A["AR.I.ATTACK/STRIKE"]],I[110103]=[A["AR.I.BOMBER"]],I[110104]=[A["AR.I.FIGHTER"]],I[110105]=[A["AR.I.FIGHTER/BOMBER"]],I[110106]=[],I[110107]=[A["AR.I.CARGO"]],I[110108]=[A["AR.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I[110109]=[A["AR.I.TANKER"]],I[110110]=[A["AR.I.PATROL"]],I[110111]=[A["AR.I.RECONNAISSANCE"]],I[110112]=[A["AR.I.TRAINER"]],I[110113]=[A["AR.I.UTILITY"]],I[110114]=[A["AR.I.VSTOL"]],I[110115]=[A["AR.I.AIRBORNE COMMAND POST"]],I[110116]=[A["AR.I.AIRBORNE EARLY WARNING"]],I[110117]=[A["AR.I.ANTISURFACE WARFARE"]],I[110118]=[A["AR.I.ANTISUBMARINE WARFARE"]],I[110119]=[A["AR.I.COMMUNICATIONS"]],I[110120]=[A["AR.I.COMBAT SEARCH AND RESCUE"]],I[110121]=[A["AR.I.ELECTRONIC SUPPORT"]],I[110122]=[A["AR.I.GOVERNMENT"]],I[110123]=[A["AR.I.MINE COUNTERMEASURES"]],I[110124]=[A["AR.I.PERSONNEL RECOVERY DSymbol"]],I[110125]=[A["AR.I.SEARCH AND RESCUE"]],I[110126]=[A["AR.I.SPECIAL OPERATIONS FORCES"]],I[110127]=[A["AR.I.ULTRA LIGHT"]],I[110128]=[A["AR.I.PHOTOGRAPHIC RECONNAISSANCE"]],I[110129]=[A["AR.I.VIP"]],I[110130]=[A["AR.I.SUPRESSION OF ENEMY AIR DEFENCE"]],I[110131]=[A["AR.I.PASSENGER"]],I[110132]=[A["AR.I.ESCORT"]],I[110133]=[A["AR.I.ELECTRONIC ATTACK (EA)"]],I[110200]=[A["AR.I.MILITARY ROTARY WING"]],I[110300]=[A["AR.I.UNMANNED AERIAL VEHICLE"]],I[110400]=[A["AR.I.VERTICAL-TAKEOFF UAV (VT-UAV)"]],I[110500]=[A["AR.I.MILITARY BALLOON"]],I[110600]=[A["AR.I.MILITARY AIRSHIP"]],I[110700]=[A["AR.I.TETHERED LIGHTER THAN AIR"]],I[12e4]=[A["AR.I.CIVILIAN"]],I[120100]=[A["AR.I.CIVILIAN FIXED-WING DSymbol"]],I[120200]=[A["AR.I.CIVILIAN ROTARY WING"]],I[120300]=[A["AR.I.CIVILIAN UNMANNED AERIAL VEHICLE"]],I[120400]=[A["AR.I.CIVILIAN BALLOON"]],I[120500]=[A["AR.I.CIVILIAN AIRSHIP"]],I[120600]=[A["AR.I.CIVILIAN TETHERED LIGHTER THAN AIR"]],I[13e4]=[A["AR.I.WEAPON"]],I[130100]=[A["AR.I.BOMB"]],I[130200]=[A["AR.I.UNDERWATER DECOY DSymbol"]],I[14e4]=[A["AR.I.MANUAL TRACK"]],t["01"]=[A["AIR.M1.ATTACK"]],t["02"]=[A["AIR.M1.BOMBER"]],t["03"]=[A["AIR.M1.CARGO"]],t["04"]=[A["AIR.M1.FIGHTER"]],t["05"]=[A["AIR.M1.INTERCEPTOR"]],t["06"]=[A["AIR.M1.TANKER"]],t["07"]=[A["AIR.M1.UTILITY"]],t["08"]=[A["AIR.M1.VSTOL"]],t["09"]=[A["AIR.M1.PASSENGER"]],t[10]=[A["AIR.M1.ULTRA LIGHT"]],t[11]=[A["AIR.M1.AIRBORNE COMMAND POST"]],t[12]=[A["AIR.M1.AIRBORNE EARLY WARNING"]],t[13]=[A["AIR.M1.GOVERNMENT"]],t[14]=[A["AIR.M1.MEDEVAC"]],t[15]=[A["AIR.M1.ESCORT"]],t[16]=[A["AIR.M1.JAMMER / ELECTRONIC COUNTER-MEASURES"]],t[17]=[A["AIR.M1.PATROL"]],t[18]=[A["AIR.M1.RECONNAISSANCE"]],t[19]=[A["AIR.M1.TRAINER"]],t[20]=[A["AIR.M1.PHOTOGRAPHIC"]],t[21]=[A["AIR.M1.PERSONNEL RECOVERY"]],t[22]=[A["AIR.M1.ANTISUBMARINE WARFARE"]],t[23]=[A["AIR.M1.COMMUNICATIONS"]],t[24]=[A["AIR.M1.ELECTRONIC SUPPORT (ES)"]],t[25]=[A["AIR.M1.MINE COUNTERMEASURES"]],t[26]=[A["AIR.M1.SEARCH AND RESCUE"]],t[27]=[A["AIR.M1.SPECIAL OPERATIONS FORCES"]],t[28]=[A["AIR.M1.SURFACE WARFARE"]],t[29]=[A["AIR.M1.VIP"]],t[30]=[A["AIR.M1.COMBAT SEARCH AND RESCUE"]],t[31]=[A["AIR.M1.SUPRESSION OF ENEMY AIR DEFENCE"]],t[32]=[A["AIR.M1.ANTISURFACE WARFARE"]],t[33]=[A["AIR.M1.FIGHTER/BOMBER"]],t[34]=[A["AIR.M1.INTENSIVE CARE"]],t[35]=[A["AIR.M1.ELECTRONIC ATTACK (EA)"]],t[36]=[A["AIR.M1.MULTIMISSION"]],t[37]=[A["AIR.M1.HIJACKING"]],t[38]=[A["AIR.M1.ASW HELO-LAMPS"]],t[39]=[A["AIR.M1.ASW HELO - SH-60R"]],t[40]=[A["AIR.M1.HIJACKER"]],t[41]=[A["AIR.M1.CYBERSPACE"]],E["01"]=[A["AIR.M2.HEAVY"]],E["02"]=[A["AIR.M2.MEDIUM"]],E["03"]=[A["AIR.M2.LIGHT"]],E["04"]=[A["AIR.M2.BOOM-ONLY"]],E["05"]=[A["AIR.M2.DROUGE-ONLY"]],E["06"]=[A["AIR.M2.BOOM AND DROUGE"]],E["07"]=[A["AIR.M2.CLOSE RANGE"]],E["08"]=[A["AIR.M2.SHORT RANGE"]],E["09"]=[A["AIR.M2.MEDIUM RANGE"]],E[10]=[A["AIR.M2.LONG RANGE"]],E[11]=[A["AIR.M2.DOWNLINKED"]],E[12]=[A["AIR.M2.CYBERSPACE"]])}},g={type:"number",getMetadata:u,getIcons:v,iconParts:P,icons:function(I,t,E,R,e,A,C){"02"==e&&(I[11e4]=[A["AIR.MISSILE.ICON"]],t["01"]=[A["AIR.MISSILE.M1.AIR"]],t["02"]=[A["AIR.MISSILE.M1.SURFACE"]],t["03"]=[A["AIR.MISSILE.M1.SUBSURFACE"]],t["04"]=[A["AIR.MISSILE.M1.SPACE"]],t["05"]=[A["AIR.MISSILE.M1.ANTI-BALLISTIC"]],t["06"]=[A["AIR.MISSILE.M1.BALLISTIC"]],t["07"]=[A["AIR.MISSILE.M1.CRUISE"]],t["08"]=[A["AIR.MISSILE.M1.INTERCEPTOR"]],E["01"]=[A["AIR.MISSILE.M2.AIR"]],E["02"]=[A["AIR.MISSILE.M2.SURFACE"]],E["03"]=[A["AIR.MISSILE.M2.SUBSURFACE"]],E["04"]=[A["AIR.MISSILE.M2.SPACE"]],E["05"]=[A["AIR.MISSILE.M2.LAUNCHED"]],E["06"]=[A["AIR.MISSILE.M2.MISSILE"]],E["07"]=[A["AIR.MISSILE.M2.PATRIOT"]],E["08"]=[A["AIR.MISSILE.M2.STANDARD MISSILE - 2 (SM-2)"]],E["09"]=[A["AIR.MISSILE.M2.STANDARD MISSILE - 6 (SM-6)"]],E[10]=[A["AIR.MISSILE.M2.EVOLVED SEA SPARROW MISSILE (ESSM)"]],E[11]=[A["AIR.MISSILE.M2.ROLLING AIRFRAME MISSILE (RAM)"]],E[12]=[A["AIR.MISSILE.M2.SHORT RANGE"]],E[13]=[A["AIR.MISSILE.M2.MEDIUM RANGE"]],E[14]=[A["AIR.MISSILE.M2.INTERMEDIATE RANGE"]],E[15]=[A["AIR.MISSILE.M2.LONG RANGE"]],E[16]=[A["AIR.MISSILE.M2.INTERCONTINENTAL"]])}},b={type:"number",getMetadata:u,getIcons:v,iconParts:i,icons:function(I,t,E,R,e,A,C){"05"==e&&(I[11e4]=[A["SP.I.MILITARY"]],I[110100]=[A["SP.I.SPACE VEHICLE"]],I[110200]=[A["SP.I.RE-ENTRY VEHICLE"]],I[110300]=[A["SPACE.PLANET LANDER"]],I[110400]=[A["SP.I.ORBITER SHUTTLE"]],I[110500]=[A["SP.I.CAPSULE"]],I[110600]=[A["SP.I.SATELLITE, GENERAL"]],I[110700]=[A["SP.I.SATELLITE"]],I[110800]=[A["SP.I.ANTISATELLITE WEAPON"]],I[110900]=[A["SP.I.ASTRONOMICAL SATELLITE"]],I[111e3]=[A["SP.I.BIOSATELLITE"]],I[111100]=[A["SP.I.COMMUNICATIONS SATELLITE"]],I[111200]=[A["SP.I.EARTH OBSERVATION SATELLITE"]],I[111300]=[A["SP.I.MINIATURIZED SATELLITE"]],I[111400]=[A["SP.I.NAVIGATIONAL SATELLITE"]],I[111500]=[A["SP.I.RECONNAISSANCE SATELLITE"]],I[111600]=[A["SP.I.SPACE STATION"]],I[111700]=[A["SP.I.TETHERED SATELLITE"]],I[111800]=[A["SP.I.WEATHER SATELLITE"]],I[111900]=[A["SP.I.SPACE LAUNCH VEHICLE"]],I[12e4]=[A["SP.I.CIVILIAN"]],I[120100]=[A["SP.I.CIVILIAN ORBITER SHUTTLE"]],I[120200]=[A["SP.I.CIVILIAN CAPSULE"]],I[120300]=[A["SP.I.CIVILIAN SATELLITE"]],I[120400]=[A["SP.I.CIVILIAN ASTRONOMICAL SATELLITE"]],I[120500]=[A["SP.I.CIVILIAN BIOSATELLITE"]],I[120600]=[A["SP.I.CIVILIAN COMMUNICATIONS SATELLITE"]],I[120700]=[A["SP.I.CIVILIAN EARTH OBSERVATION SATELLITE"]],I[120800]=[A["SP.I.CIVILIAN MINIATURIZED SATELLITE"]],I[120900]=[A["SP.I.CIVILIAN NAVIGATIONAL SATELLITE"]],I[121e3]=[A["SP.I.CIVILIAN SPACE STATION"]],I[121100]=[A["SP.I.CIVILIAN TETHERED SATELLITE"]],I[121200]=[A["SP.I.CIVILIAN WEATHER SATELLITE"]],I[13e4]=[A["SP.I.MANUAL TRACK"]],t["01"]=[A["SP.M1.LOW EARTH ORBIT (LEO)"]],t["02"]=[A["SP.M1.MEDIUM EARTH ORBIT (MEO)"]],t["03"]=[A["SP.M1.HIGH EARTH ORBIT (HEO)"]],t["04"]=[A["SP.M1.GEOSYNCHRONOUS ORBIT (GSO)"]],t["05"]=[A["SP.M1.GEOSTATIONARY ORBIT (GO)"]],t["06"]=[A["SP.M1.MOLNIYA ORBIT (MO)"]],t["07"]=[A["SP.M1.CYBERSPACE"]],E["01"]=[A["SP.M2.OPTICAL"]],E["02"]=[A["SP.M2.INFRARED"]],E["03"]=[A["SP.M2.RADAR"]],E["04"]=[A["SP.M2.SIGNALS INTELLIGENCE (SIGINT)"]],E["05"]=[A["SP.M2.CYBERSPACE"]])}},K={type:"number",getMetadata:u,getIcons:v,iconParts:i,icons:function(I,t,E,R,e,A,C){"06"==e&&(I[11e4]=[A["SPACE.MISSILE.ICON"]],t["01"]=[A["SPACE.MISSILE.M1.BALLISTIC"]],t["02"]=[A["SPACE.MISSILE.M1.SPACE"]],t["03"]=[A["SPACE.MISSILE.M1.INTERCEPTOR"]],E["01"]=[A["SPACE.MISSILE.M2.SHORT RANGE"]],E["02"]=[A["SPACE.MISSILE.M2.MEDIUM RANGE"]],E["03"]=[A["SPACE.MISSILE.M2.INTERMEDIATE RANGE"]],E["04"]=[A["SPACE.MISSILE.M2.LONG RANGE"]],E["05"]=[A["SPACE.MISSILE.M2.INTERCONTINENTAL"]],E["06"]=[A["SPACE.MISSILE.M2.ARROW"]],E["07"]=[A["SPACE.MISSILE.M2.GROUND-BASED INTERCEPTOR (GBI)"]],E["08"]=[A["SPACE.MISSILE.M2.PATRIOT"]],E["09"]=[A["SPACE.MISSILE.M2.STANDARD MISSILE - TERMINAL PHASE (SM-T)"]],E[10]=[A["SPACE.MISSILE.M2.STANDARD MISSILE - 3 (SM-3)"]],E[11]=[A["SPACE.MISSILE.M2.TERMINAL HIGH-ALTITUDE AREA DEFENSE (THAAD)"]],E[12]=[A["SPACE.MISSILE.M2.SPACE"]],E[13]=[A["SPACE.MISSILE.M2.CLOSE RANGE"]],E[14]=[A["SPACE.MISSILE.M2.DEBRIS"]],E[15]=[A["SPACE.MISSILE.M2.UNKNOWN"]])}},X={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"10"==e&&(I[11e4]=[A["GR.IC.COMMAND AND CONTROL"]],I[110100]=[A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[110200]=[A["GR.IC.CIVIL AFFAIRS"]],I[110300]=[A["GR.IC.CIVIL-MILITARY-COOPERATION"]],I[110400]=[A["GR.IC.INFORMATION OPERATIONS"]],I[110500]=[A["GR.IC.LIAISON"]],I[110501]=[A["GR.IC.LIAISON"],A["GR.IC.FF.RECONNAISSANCE"]],I[110600]=[A["GR.IC.MILITARY INFORMATION SUPPORT OPERATIONS (MISO)"]],I[110601]=[A["GR.IC.MILITARY INFORMATION SUPPORT OPERATIONS (MISO)"],A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[110700]=[A["GR.IC.RADIO"]],I[110800]=[A["GR.IC.RADIO RELAY"]],I[110900]=[A["GR.IC.RADIO TELETYPE CENTRE"]],I[111e3]=[A["GR.IC.FF.SIGNAL"]],I[111001]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.RADIO"]],I[111002]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.RADIO RELAY"]],I[111003]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.RADIO TELETYPE CENTRE"]],I[111004]=[A["GR.IC.FF.SIGNAL"],A["GR.I.FF.SATELLITE"]],I[111005]=[A["GR.IC.FF.SIGNAL"],A["GR.IC.VIDEO IMAGERY"]],I[111100]=[A["GR.I.FF.SATELLITE"]],I[111200]=[A["GR.IC.VIDEO IMAGERY"]],I[111300]=[A["GR.IC.SPACE"]],I[111400]=[A["GR.IC.SPECIAL TROOPS"]],I[12e4]=[],I[120100]=[A["GR.IC.FF.AIR ASSAULT WITH ORGANIC LIFT"]],I[120200]=[A["GR.IC.AIR TRAFFIC SERVICES"]],I[120300]=[A["GR.IC.FF.AMPHIBIOUS"]],I[120400]=[A["GR.IC.FF.ANTITANK/ANTIARMOUR"]],I[120401]=[A["GR.IC.FF.ANTITANK/ANTIARMOUR"],A["GR.IC.ARMOUR"]],I[120402]=[A["GR.IC.FF.ANTITANK/ANTIARMOUR"],A["GR.IC.FF.MOTORIZED"]],I[120500]=[A["GR.IC.ARMOUR"]],I[120501]=[A["GR.IC.ARMOUR"],A["GR.IC.FF.RECONNAISSANCE"]],I[120502]=[A["GR.IC.ARMOUR"],A["GR.IC.FF.AMPHIBIOUS"]],I[120600]=[A["GR.IC.AVIATION ROTARY WING"]],I[120601]=[A["GR.IC.AVIATION ROTARY WING"],A["GR.IC.FF.RECONNAISSANCE"]],I[120700]=[A["GR.IC.AVIATION COMPOSITE"]],I[120800]=[A["GR.IC.AVIATION FIXED WING"]],I[120801]=[A["GR.IC.AVIATION FIXED WING"],A["GR.IC.FF.RECONNAISSANCE"]],I[120900]=[A["GR.IC.COMBAT"]],I[121e3]=[A["GR.IC.COMBINED ARMS"]],I[121100]=[A["GR.IC.FF.INFANTRY"]],I[121101]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.FF.AMPHIBIOUS"]],I[121102]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.ARMOUR"]],I[121103]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.FF.MAIN GUN SYSTEM"]],I[121104]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.FF.MOTORIZED"]],I[121105]=[A["GR.IC.FF.INFANTRY"],A["GR.IC.ARMOUR"],A["GR.IC.FF.MAIN GUN SYSTEM"]],I[121106]=[A["GR.IC.FF.MAIN GUN SYSTEM"]],I[121200]=[A["GR.IC.OBSERVER/OBSERVATION"]],I[121300]=[A["GR.IC.FF.RECONNAISSANCE"]],I[121301]=[A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.SURVEILLANCE"]],I[121302]=[A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.FF.AMPHIBIOUS"]],I[121303]=[A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.FF.MOTORIZED"]],I[121400]=[A["GR.IC.SEA-AIR-LAND"]],I[121500]=[A["GR.IC.SNIPER"]],I[121600]=[A["GR.IC.SURVEILLANCE"]],I[121700]=[A["GR.IC.SPECIAL FORCES"]],I[121800]=[A["GR.IC.SPECIAL OPERATIONS FORCES"]],I[121801]=[A["GR.IC.FIXED WING MISO"]],I[121802]=[A["GR.IC.SPECIAL OPERATIONS FORCES"],A["GR.IC.FF.INFANTRY"]],I[121803]=[A["GR.IC.COMBATANT"],A["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]],I[121804]=[A["GR.IC.SUBMARINE NUCLEAR PROPULSION"],A["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]],I[121805]=[A["SOF.IC.UNDERWATER DEMOLITION TEAM"]],I[121900]=[A["GR.IC.UNMANNED SYSTEMS"]],I[122e3]=[A["GR.IC.RANGER"]],I[13e4]=[],I[130100]=[A["GR.IC.FF.AIR DEFENCE"]],I[130101]=[A["GR.IC.FF.AIR DEFENCE"],A["GR.IC.FF.MAIN GUN SYSTEM"]],I[130102]=[A["GR.IC.FF.AIR DEFENCE"],A["GR.IC.AIR DEFENSE MISSILE"]],I[130103]=[A["GR.IC.FF.AIR DEFENCE"],A["GR.IC.AIR AND MISSILE DEFENSE"]],I[130200]=[A["GR.IC.FIELD ARTILLERY"],A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.AVIATION ROTARY WING"],A["GR.M1.NAVAL"]],I[130300]=[A["GR.IC.FIELD ARTILLERY"]],I[130301]=[s._scale(.8,A["GR.IC.FIELD ARTILLERY"]),A["GR.IC.ARMOUR"]],I[130302]=[s._scale(.8,A["GR.IC.FIELD ARTILLERY"]),A["GR.IC.ARMOUR"],A["GR.IC.FF.RECONNAISSANCE"]],I[130303]=[s._scale(.8,A["GR.IC.FIELD ARTILLERY"]),A["GR.IC.FF.RECONNAISSANCE"]],I[130400]=[A["GR.IC.FIELD ARTILLERY OBSERVER"]],I[130500]=[A["GR.IC.JOINT FIRE SUPPORT"]],I[130600]=[A["GR.IC.METEOROLOGICAL"]],I[130700]=[A["GR.IC.MISSILE"]],I[130800]=[A["GR.IC.MORTAR"]],I[130801]=[A["GR.IC.MORTAR"],A["GR.M2.TRACKED"]],I[130802]=[A["GR.IC.MORTAR"],A["GR.M2.TRUCK"]],I[130803]=[A["GR.IC.MORTAR"],A["GR.M2.TOWED"]],I[130900]=[A["GR.IC.SURVEY"]],I[14e4]=[],I[140100]=[A["GR.IC.CBRN"]],I[140101]=[A["GR.IC.CBRN"],A["GR.IC.ARMOUR"]],I[140102]=[A["GR.IC.CBRN"],A["GR.IC.FF.MOTORIZED"]],I[140103]=[A["GR.IC.CBRN"],A["GR.IC.FF.RECONNAISSANCE"]],I[140104]=[A["GR.IC.CBRN"],A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.ARMOUR"]],I[140105]=[A["GR.IC.CBRN"],A["GR.IC.FF.RECONNAISSANCE"],A["GR.IC.FF.MOTORIZED"]],I[140106]=[A["GR.IC.CBRN"],A["GR.CHEMICAL, BIOLOGICAL, RADIOLOGICAL, NUCLEAR, AND HIGH-YIELD EXPLOSIVES"]],I[140200]=[A["GR.IC.COMBAT SUPPORT (MANOEUVRE ENHANCEMENT)"]],I[140300]=[A["GR.IC.CRIMINAL INVESTIGATION DIVISION"]],I[140400]=[A["GR.IC.DIVER, CIVILIAN"]],I[140500]=[A["GR.IC.DOG"]],I[140600]=[A["GR.IC.DRILLING"]],I[140700]=[A["GR.IC.ENGINEER"]],I[140701]=[A["GR.IC.ENGINEER MECHANIZED"]],I[140702]=[A["GR.IC.ENGINEER"],A["GR.IC.FF.MOTORIZED"]],I[140703]=[A["GR.IC.ENGINEER"],A["GR.IC.FF.RECONNAISSANCE"]],I[140800]=[A["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]],I[140900]=[A["GR.IC.FIELD CAMP CONSTRUCTION"]],I[141e3]=[A["GR.IC.FIRE PROTECTION"]],I[141100]=[A["GR.IC.GEOSPATIAL SUPPORT"]],I[141200]=[A["GR.IC.MILITARY POLICE"]],I[141300]=[A["GR.IC.MINE"]],I[141400]=[A["GR.IC.MINE CLEARING"]],I[141500]=[A["GR.IC.MINE LAUNCHING"]],I[141600]=[A["GR.IC.MINE LAYING"]],I[141700]=[A["GR.IC.SECURITY"]],I[141701]=[A["GR.IC.SECURITY"],A["GR.IC.ARMOUR"]],I[141702]=[A["GR.IC.SECURITY"],A["GR.IC.FF.MOTORIZED"]],I[141800]=[A["GR.IC.SEARCH AND RESCUE"]],I[141900]=[A["GR.IC.SECURITY POLICE (AIR)"]],I[142e3]=[A["GR.IC.SHORE PATROL"]],I[142100]=[A["GR.IC.TOPOGRAPHIC"]],I[142200]=[A["GR.IC.AIR AND MISSILE DEFENSE"]],I[15e4]=[],I[150100]=[A["GR.IC.FF.ANALYSIS"]],I[150200]=[A["GR.IC.COUNTER-INTELLIGENCE"]],I[150300]=[A["GR.IC.FF.DIRECTION FINDING"]],I[150400]=[A["GR.IC.ELECTRONIC RANGING"]],I[150500]=[A["GR.IC.ELECTRONIC WARFARE"]],I[150501]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.ANALYSIS"]],I[150502]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.DIRECTION FINDING"]],I[150503]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.INTERCEPT"]],I[150504]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.JAMMING"]],I[150505]=[A["GR.IC.ELECTRONIC WARFARE"],A["GR.IC.FF.SEARCH"]],I[150600]=[A["GR.IC.FF.INTERCEPT"]],I[150700]=[A["GR.IC.INTERROGATION"]],I[150800]=[A["GR.IC.FF.JAMMING"]],I[150900]=[A["GR.IC.JOINT INTELLIGENCE CENTRE"]],I[151e3]=[A["GR.IC.MILITARY INTELLIGENCE"]],I[151100]=[A["GR.IC.FF.SEARCH"]],I[151200]=[A["GR.IC.SENSOR"]],I[151300]=[A["GR.IC.MILITARY HISTORY"]],I[16e4]=[A["GR.IC.SUSTAINMENT"]],I[160100]=[A["GR.IC.ADMINISTRATIVE"]],I[160200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS ALL"]],I[160300]=[A["GR.IC.TRANSPORTATION"],A["GR.IC.AIRPORT OF DEBARKATION"]],I[160400]=[A["GR.IC.AMMUNITION"]],I[160500]=[A["GR.IC.BAND"]],I[160501]=[A["GR.IC.ARMY MUSIC"]],I[160600]=[A["GR.IC.COMBAT SERVICE SUPPORT"]],I[160700]=[A["GR.IC.FINANCE"]],I[160800]=[A["GR.IC.JUDGE ADVOCATE GENERAL"]],I[160900]=[A["GR.IC.LABOUR"]],I[161e3]=[A["GR.IC.LAUNDRY/BATH"]],I[161100]=[A["GR.IC.MAINTENANCE"]],I[161200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.MATERIEL"]],I[161300]=[A["GR.IC.FF.MEDICAL"]],I[161400]=[A["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I[161500]=[A["GR.IC.MORALE, WELFARE, AND RECREATION"]],I[161600]=[A["GR.IC.MORTUARY AFFAIRS"]],I[161700]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS MULTIPLE"]],I[161800]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS I"]],I[161900]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS II"]],I[162e3]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS III"]],I[162100]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS IV"]],I[162200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS V"]],I[162300]=[A["GR.IC.ORDNANCE"]],I[162400]=[A["GR.IC.PERSONNEL SERVICES"]],I[162500]=[A["GR.IC.PETROLEUM OIL LUBRICANTS"]],I[162600]=[A["GR.IC.PIPELINE"]],I[162700]=[A["GR.IC.POSTAL"]],I[162800]=[A["GR.IC.PUBLIC AFFAIRS"]],I[162900]=[A["GR.IC.QUARTERMASTER"]],I[163e3]=[A["GR.IC.RAILHEAD"]],I[163100]=[A["GR.IC.RELIGIOUS SUPPORT"]],I[163200]=[A["GR.IC.REPLACEMENT HOLDING UNIT"]],I[163300]=[A["GR.IC.SEAPORT OF DEBARKATION"]],I[163400]=[A["GR.IC.FF.SUPPLY"]],I[163500]=[A["GR.IC.JOINT INFORMATION BUREAU"]],I[163600]=[A["GR.IC.TRANSPORTATION"]],I[163601]=[A["GR.IC.TRANSPORTATION"],A["GR.IC.FLOATING CRAFT"]],I[163700]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS I"]],I[163800]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS II"]],I[163900]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS III"]],I[164e3]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS IV"]],I[164100]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS V"]],I[164200]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS VI"]],I[164300]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS VII"]],I[164400]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS VIII"]],I[164500]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS IX"]],I[164600]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.CLASS X"]],I[164700]=[A["GR.IC.WATER"]],I[164800]=[A["GR.IC.WATER PURIFICATION"]],I[164900]=[A["GR.IC.PUBLIC AFFAIRS BROADCAST"]],I[165e3]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.FF.NATO SUPPLY CLASS ALL"]],I[165100]=[A["GR.IC.INTERPRETER/TRANSLATOR"]],I[165200]=[A["GR.IC.SUPPORT"]],I[165300]=[A["GR.IC.ARMY FIELD SUPPORT"]],I[165400]=[A["GR.IC.CONTRACTING SERVICES"]],I[165500]=[A["GR.IC.PARACHUTE RIGGER"]],I[17e4]=[],I[170100]=[A["GR.IC.NAVAL"]],I[18e4]=[],I[180100]=[A["GR.IC.ALLIED COMMAND EUROPE RAPID REACTION CORPS (ARRC)"]],I[180200]=[A["GR.IC.ALLIED COMMAND OPERATIONS"]],I[180300]=[A["GR.IC.INTERNATIONAL SECURITY ASSISTANCE FORCE (ISAF)"]],I[180400]=[A["GR.IC.MULTINATIONAL (MN)"]],I[19e4]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[2e5]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[200100]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[200200]=[A["GR.IC.FF.BORDER PATROL"]],I[200300]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[200400]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[200500]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[200600]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[200700]=[A["GR.IC.LAW ENFORCEMENT"]],I[200800]=[A["GR.IC.FF.PRISON"]],I[200900]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[201e3]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[201100]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[201200]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[201300]=[A["ST.IC.INTERNAL SECURITY FORCE"]],t["01"]=[C?A["GR.M1.TACTICAL SATELLITE COMMUNICATIONS"]:A["GR.M1.AIRMOBILE/AIR ASSAULT"]],t["02"]=[A["GR.M1.AREA"]],t["03"]=[A["GR.M1.ATTACK"]],t["04"]=[A["GR.M1.BIOLOGICAL"]],t["05"]=[A["GR.M1.BORDER"]],t["06"]=[A["GR.M1.BRIDGING"]],t["07"]=[A["GR.M1.CHEMICAL"]],t["08"]=[A["GR.M1.CLOSE PROTECTION"]],t["09"]=[A["GR.M1.COMBAT"]],t[10]=[A["GR.M1.COMMAND AND CONTROL"]],t[11]=[A["GR.M1.COMMUNICATIONS CONTINGENCY PACKAGE"]],t[12]=[A["GR.M1.CONSTRUCTION"]],t[13]=[A["GR.M1.CROSS CULTURAL COMMUNICATION"]],t[14]=[A["GR.M1.CROWD AND RIOT CONTROL"]],t[15]=[A["GR.M1.DECONTAMINATION"]],t[16]=[A["GR.M1.DETENTION"]],t[17]=[A["GR.M1.DIRECT COMMUNICATIONS"]],t[18]=[A["GR.M1.DIVING"]],t[19]=[A["GR.M1.DIVISION"]],t[20]=[A["GR.M1.DOG"]],t[21]=[A["GR.M1.DRILLING"]],t[22]=[A["GR.M1.ELECTRO-OPTICAL"]],t[23]=[A["GR.M1.ENHANCED"]],t[24]=[A["GR.M1.EXPLOSIVE ORDNANCE DISPOSAL"]],t[25]=[A["GR.M1.FIRE DIRECTION CENTRE"]],t[26]=[A["GR.M1.FORCE"]],t[27]=[A["GR.M1.FORWARD"]],t[28]=[A["GR.M1.GROUND STATION MODULE"]],t[29]=[A["GR.M1.LANDING SUPPORT"]],t[30]=[A["GR.M1.LARGE EXTENSION NODE"]],t[31]=[A["GR.M1.MAINTENANCE"]],t[32]=[A["GR.M1.METEOROLOGICAL"]],t[33]=[A["GR.M1.MINE COUNTERMEASURE"]],t[34]=[A["GR.M1.MISSILE"]],t[35]=[A["GR.M1.(MOBILE) ADVISOR AND SUPPORT"]],t[36]=[A["GR.M1.MOBILE SUBSCRIBER EQUIPMENT"]],t[37]=[A["GR.M1.MOBILITY SUPPORT"]],t[38]=[A["GR.M1.MOVEMENT CONTROL CENTRE"]],t[39]=[A["GR.M1.MULTINATIONAL"]],t[40]=[A["GR.M1.MULTINATIONAL SPECIALIZED UNIT"]],t[41]=[A["GR.M1.MULTIPLE ROCKET LAUNCHER"]],t[42]=[A["GR.M1.NATO MEDICAL ROLE 1"]],t[43]=[A["GR.M1.NATO MEDICAL ROLE 2"]],t[44]=[A["GR.M1.NATO MEDICAL ROLE 3"]],t[45]=[A["GR.M1.NATO MEDICAL ROLE 4"]],t[46]=[A["GR.M1.NAVAL"]],t[47]=[C?A["GR.M1.UNMANNED AERIAL VEHICLE"]:A["GR.M1.NODE CENTRE"]],t[48]=[A["GR.M1.NUCLEAR"]],t[49]=[A["GR.M1.OPERATIONS"]],t[50]=[A["GR.M1.RADAR"]],t[51]=[A["GR.M1.RADIO FREQUENCY IDENTIFICATION (RFID) INTERROGATOR/ SENSOR"]],t[52]=[A["GR.M1.RADIOLOGICAL"]],t[53]=[A["GR.M1.SEARCH AND RESCUE"]],t[54]=[A["GR.M1.SECURITY"]],t[55]=[A["GR.M1.SENSOR"]],t[56]=[C?A["GR.M1.WEAPON"]:A["GR.M1.SENSOR CONTROL MODULE"]],t[57]=[A["GR.M1.SIGNALS INTELLIGENCE"]],t[58]=[C?A["GR.M1.ARMORED"]:A["GR.M1.SINGLE SHELTER SWITCH"]],t[59]=[A["GR.M1.SINGLE ROCKET LAUNCHER"]],t[60]=[A["GR.M1.SMOKE"]],t[61]=[A["GR.M1.SNIPER"]],t[62]=[A["GR.M1.SOUND RANGING"]],t[63]=[A["GR.M1.SPECIAL OPERATIONS FORCES (SOF)"]],t[64]=[A["GR.M1.SPECIAL WEAPONS AND TACTICS"]],t[65]=[A["GR.M1.SURVEY"]],t[66]=[A["GR.M1.TACTICAL EXPLOITATION"]],t[67]=[A["GR.M1.TARGET ACQUISITION"]],t[68]=[A["GR.M1.TOPOGRAPHIC"]],t[69]=[A["GR.M1.UTILITY"]],t[70]=[A["GR.M1.VIDEO IMAGERY"]],t[71]=[C?A["GR.M1.MOBILITY ASSAULT"]:A["GR.M1.ACCIDENT"]],t[72]=[C?A["GR.M1.AMPHIBIOUS WARFARE SHIP "]:A["GR.M1.OTHER"]],t[73]=[C?A["GR.M1.LOAD HANDLING SYSTEM"]:A["GR.M1.CIVILIAN"]],t[74]=[C?A["GR.M1.PALLETIZED LOAD SYSTEM"]:A["GR.M1.ANTISUBMARINE WARFARE"]],t[75]=[A["GR.M1.MEDEVAC"]],t[76]=[A["GR.M1.CYBERSPACE"]],t[77]=[A["GR.M1.SUPPORT"]],t[78]=[A["GR.M1.AVIATION"]],t[79]=[A["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"]],t[80]=[A["GR.M1.TILT-ROTOR"]],t[81]=[A["GR.M1.COMMAND POST NODE"]],t[82]=[A["GR.M1.JOINT NETWORK NODE"]],t[83]=[A["GR.M1.RETRANSMISSION SITE"]],t[84]=[A["GR.M1.ASSAULT"]],t[85]=[A["GR.M1.WEAPONS"]],t[86]=[A["GR.M1.CRIMINAL INVESTIGATION DIVISION"]],t[87]=[A["GR.M1.DIGITAL"]],t[88]=[A["GR.M1.NETWORK OR NETWORK OPERATIONS"]],t[89]=[A["GR.M1.AIRFIELD, AERIAL PORT OF DEBARKATION, OR AERIAL PORT OF EMBARKATION"]],t[90]=[A["GR.M1.PIPELINE"]],t[91]=[A["GR.M1.POSTAL"]],t[92]=[A["GR.M1.WATER"]],t[93]=[A["GR.M1.INDEPENDENT COMMAND"]],t[94]=[A["GR.M1.THEATRE"]],t[95]=[A["GR.M1.ARMY"]],t[96]=[A["GR.M1.CORPS"]],t[97]=[A["GR.M1.BRIGADE"]],t[98]=[A["GR.IC.FF.HEADQUARTERS OR HEADQUARTERS ELEMENT"]],E["01"]=[A["GR.M2.AIRBORNE"]],E["02"]=[A["GR.M2.ARCTIC"]],E["03"]=[A["GR.M2.BATTLE DAMAGE REPAIR"]],E["04"]=[A["GR.M2.BICYCLE EQUIPPED"]],E["05"]=[A["GR.M2.CASUALTY STAGING"]],E["06"]=[A["GR.M2.CLEARING"]],E["07"]=[A["GR.M2.CLOSE RANGE"]],E["08"]=[A["GR.M2.CONTROL"]],E["09"]=[A["GR.M2.DECONTAMINATION"]],E[10]=[A["GR.M2.DEMOLITION"]],E[11]=[A["GR.M2.DENTAL"]],E[12]=[A["GR.M2.DIGITAL"]],E[13]=[A["GR.M2.ENHANCED POSITION LOCATION REPORTING SYSTEM"]],E[14]=[A["GR.M2.EQUIPMENT"]],E[15]=[A["GR.M2.HEAVY"]],E[16]=[A["GR.M2.HIGH ALTITUDE"]],E[17]=[A["GR.M2.INTERMODAL"]],E[18]=[A["GR.M2.INTENSIVE CARE"]],E[19]=[A["GR.M2.LIGHT"]],E[20]=[A["GR.M2.LABORATORY"]],E[21]=[A["GR.M2.LAUNCHER"]],E[22]=[A["GR.M2.LONG RANGE"]],E[23]=[A["GR.M2.LOW ALTITUDE"]],E[24]=[A["GR.M2.MEDIUM"]],E[25]=[A["GR.M2.MEDIUM ALTITUDE"]],E[26]=[A["GR.M2.MEDIUM RANGE"]],E[27]=[A["GR.M2.MOUNTAIN"]],E[28]=[A["GR.M2.HIGH TO MEDIUM ALTITUDE"]],E[29]=[A["GR.M2.MULTI-CHANNEL"]],E[30]=[A["GR.M2.OPTICAL"]],E[31]=[A["GR.M2.PACK ANIMAL"]],E[32]=[A["GR.M2.PATIENT EVACUATION COORDINATION"]],E[33]=[A["GR.M2.PREVENTIVE MAINTENANCE"]],E[34]=[A["GR.M2.PSYCHOLOGICAL"]],E[35]=[A["GR.M2.RADIO RELAY LINE OF SIGHT"]],E[36]=[A["GR.M2.RAILROAD"]],E[37]=[A["GR.M2.RECOVERY (UNMANNED SYSTEMS)"]],E[38]=[A["GR.M2.RECOVERY (MAINTENANCE)"]],E[39]=[A["GR.M2.RESCUE COORDINATION CENTRE"]],E[40]=[A["GR.M2.RIVERINE"]],E[41]=[A["GR.M2.SINGLE CHANNEL"]],E[42]=[A["GR.M2.SKI"]],E[43]=[A["GR.M2.SHORT RANGE"]],E[44]=[A["GR.M2.STRATEGIC"]],E[45]=[A["GR.M2.SUPPORT"]],E[46]=[A["GR.M2.TACTICAL"]],E[47]=[A["GR.M2.TOWED"]],E[48]=[A["GR.M2.TROOP"]],E[49]=[A["GR.M2.VERTICAL OR SHORT TAKE-OFF AND LANDING "]],E[50]=[A["GR.M2.VETERINARY"]],E[51]=[A["GR.M2.WHEELED"]],E[52]=[A["GR.M2.HIGH TO LOW ALTITUDE"]],E[53]=[A["GR.M2.MEDIUM TO LOW ALTITUDE"]],E[54]=[A["GR.M2.ATTACK"]],E[55]=[A["GR.M2.REFUEL"]],E[56]=[A["GR.M2.UTILITY"]],E[57]=[A["GR.M2.COMBAT SEARCH AND RESCUE"]],E[58]=[A["GR.M2.GUERILLA"]],E[59]=[A["GR.M2.AIR ASSAULT"]],E[60]=[A["GR.M2.AMPHIBIOUS"]],E[61]=[A["GR.M2.VERY HEAVY"]],E[62]=[A["GR.IC.FF.SUPPLY"]],E[63]=[A["GR.M2.CYBERSPACE"]],E[64]=[A["GR.M2.NAVY BARGE, SELF-PROPELLED"]],E[65]=[A["GR.M2.NAVY BARGE, NOT SELF-PROPELLED"]],E[66]=[A["GR.M2.LAUNCH"]],E[67]=[A["GR.M2.LANDING CRAFT"]],E[68]=[A["GR.M2.LANDING SHIP"]],E[69]=[A["GR.M2.SERVICE CRAFT/YARD"]],E[70]=[A["GR.M2.TUG HARBOR"]],E[71]=[A["GR.M2.OCEAN GOING TUG BOAT"]],E[72]=[A["GR.M2.SURFACE DEPLOYMENT AND DISTRIBUTION COMMAND"]],E[73]=[A["GR.M2.NONCOMBATANT GENERIC VESSEL"]],E[74]=[A["GR.M2.COMPOSITE"]],E[75]=[A["GR.M2.SHELTER"]],E[76]=[A["GR.M2.LIGHT AND MEDIUM"]],E[77]=[A["GR.M2.SELF-PROPELLED"]],E[78]=[A["GR.M2.SECURITY FORCE ASSISTANCE"]])}},w={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"11"==e&&(I[11e4]=[A["GR.I.CIVILIAN"]],I[110100]=[A["GR.IC.ENVIRONMENTAL PROTECTION"]],I[110200]=[A["GR.IC.GOVERNMENT ORGANIZATION"]],I[110300]=[A["ST.IC.INDIVIDUAL"]],I[110400]=[A["ST.IC.GROUP"]],I[110500]=[A["ST.IC.KILLING VICTIM"]],I[110600]=[A["ST.IC.KILLING VICTIMS"]],I[110700]=[A["ST.IC.INDIVIDUAL"],A["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I[110800]=[A["ST.IC.SPY"]],I[110900]=[A["ST.IC.COMPOSITE LOSS"]],I[111e3]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],t["01"]=[A["ST.M1.ASSASSINATION"]],t["02"]=[A["ST.M1.EXECUTION (WRONGFUL KILLING)"]],t["03"]=[A["ST.M1.MURDER"]],t["04"]=[A["ST.M1.HIJACKING/HIJACKED"]],t["05"]=[A["ST.M1.KIDNAPPING"]],t["06"]=[A["ST.M1.PIRACY"]],t["07"]=[A["ST.M1.RAPE"]],t["08"]=[A["ST.M1.CIVILIAN"]],t["09"]=[A["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],t[10]=[A["ST.M1.FOREIGN FIGHTERS"]],t[11]=[A["ST.M1.GANG"]],t[12]=[A["ST.M1.GOVERNMENT ORGANIZATION"]],t[13]=[A["ST.M1.LEADER"]],t[14]=[A["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],t[15]=[A["ST.M1.COERCED/IMPRESSED"]],t[16]=[A["ST.M1.WILLING RECRUIT"]],t[17]=[A["ST.M1.RELIGIOUS"]],t[18]=[A["ST.M1.TARGETED"]],t[19]=[A["ST.M1.TERRORIST"]],t[20]=[A["ST.M1.SPEAKER"]],t[21]=[A["ST.M1.ACCIDENT"]],t[22]=[A["ST.M1.COMBAT"]],t[23]=[A["ST.M1.OTHER"]],t[24]=[A["ST.M1.LOOT"]],t[25]=[A["GR.M1.HIJACKER"]],t[26]=[A["GR.M1.CYBERSPACE"]],E["01"]=[A["ST.M2.LEADER OR LEADERSHIP"]],E["02"]=[A["GR.M2.CYBERSPACE"]])}},_={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){if("15"==e){I[11e4]=[A["GR.EQ.WEAPON"]],I[110100]=[A["GR.EQ.RIFLE"]],I[110101]=[A["GR.EQ.RIFLE"],A["GR.EQ.SHORT RANGE"]],I[110102]=[A["GR.EQ.RIFLE"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110103]=[A["GR.EQ.RIFLE"],A["GR.EQ.LONG RANGE"]],I[110200]=[A["GR.EQ.MACHINE GUN"]],I[110201]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.SHORT RANGE"]],I[110202]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110203]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.LONG RANGE"]],I[110300]=[A["GR.EQ.GRENADE LAUNCHER"]],I[110301]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.SHORT RANGE"])],I[110302]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.INTERMEDIATE RANGE"])],I[110303]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.LONG RANGE"])],I[110400]=[A["GR.EQ.FLAME THROWER"]],I[110500]=[A["GR.EQ.AIR DEFENCE GUN"]],I[110501]=[A["GR.EQ.AIR DEFENCE GUN"],A["GR.EQ.SHORT RANGE"]],I[110502]=[A["GR.EQ.AIR DEFENCE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110503]=[A["GR.EQ.AIR DEFENCE GUN"],A["GR.EQ.LONG RANGE"]],I[110600]=[A["GR.EQ.ANTITANK GUN"]],I[110601]=[A["GR.EQ.ANTITANK GUN"],A["GR.EQ.SHORT RANGE"]],I[110602]=[A["GR.EQ.ANTITANK GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110603]=[A["GR.EQ.ANTITANK GUN"],A["GR.EQ.LONG RANGE"]],I[110700]=[A["GR.EQ.DIRECT FIRE GUN"]],I[110701]=[A["GR.EQ.DIRECT FIRE GUN"],A["GR.EQ.SHORT RANGE"]],I[110702]=[A["GR.EQ.DIRECT FIRE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110703]=[A["GR.EQ.DIRECT FIRE GUN"],A["GR.EQ.LONG RANGE"]],I[110800]=[A["GR.EQ.RECOILLESS GUN"]],I[110801]=[A["GR.EQ.RECOILLESS GUN"],A["GR.EQ.SHORT RANGE"]],I[110802]=[A["GR.EQ.RECOILLESS GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110803]=[A["GR.EQ.RECOILLESS GUN"],A["GR.EQ.LONG RANGE"]],I[110900]=[A["GR.EQ.HOWITZER"]],I[110901]=[A["GR.EQ.HOWITZER"],A["GR.EQ.SHORT RANGE"]],I[110902]=[A["GR.EQ.HOWITZER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110903]=[A["GR.EQ.HOWITZER"],A["GR.EQ.LONG RANGE"]],I[111e3]=[A["GR.EQ.MISSILE LAUNCHER"]],I[111001]=[A["GR.EQ.MISSILE LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111002]=[A["GR.EQ.MISSILE LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111003]=[A["GR.EQ.MISSILE LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111100]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"]],I[111101]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.SHORT RANGE"]],I[111102]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.SHORT RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I[111103]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.SHORT RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I[111104]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111105]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.INTERMEDIATE RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I[111106]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.INTERMEDIATE RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I[111107]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.LONG RANGE"]],I[111108]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.LONG RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TLAR"]],I[111109]=[A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR"],A["GR.EQ.LONG RANGE"],A["GR.EQ.AIR DEFENCE MISSILE LAUNCHER SURFACE-TO-AIR TELAR"]],I[111200]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"]],I[111201]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111202]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111203]=[A["GR.EQ.ANTITANK MISSILE LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111300]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"]],I[111301]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111302]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111303]=[A["GR.EQ.SURFACE-TO-SURFACE MISSILE LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111400]=[A["GR.EQ.MORTAR"]],I[111401]=[A["GR.EQ.MORTAR"],A["GR.EQ.SHORT RANGE"]],I[111402]=[A["GR.EQ.MORTAR"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111403]=[A["GR.EQ.MORTAR"],A["GR.EQ.LONG RANGE"]],I[111500]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"]],I[111501]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111502]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111503]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111600]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"]],I[111601]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,A["GR.EQ.SHORT RANGE"])],I[111602]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,A["GR.EQ.INTERMEDIATE RANGE"])],I[111603]=[A["GR.EQ.MULTIPLE ROCKET LAUNCHER"],s._translate(0,10,A["GR.EQ.LONG RANGE"])],I[111700]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"]],I[111701]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"],A["GR.EQ.SHORT RANGE"]],I[111702]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"],A["GR.EQ.INTERMEDIATE RANGE"]],I[111703]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"],A["GR.EQ.LONG RANGE"]],I[111800]=[A["GR.EQ.NON-LETHAL WEAPON"]],I[111900]=[A["GR.EQ.TASER"]],I[112e3]=[A["GR.EQ.WATER CANNON"]],I[12e4]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"]],I[120100]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.ARMOURED VEHICLE"]],I[120101]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE"]],I[120102]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE (AFV) COMMAND AND CONTROL"]],I[120103]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"]],I[120104]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.MEDICAL EVACUATION"]],I[120105]=[A["GR.IC.ARMOUR"]],I[120106]=[A["GR.IC.ARMOUR"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120107]=[A["GR.IC.ARMOUR"],A["GR.EQ.MEDICAL EVACUATION"]],I[120108]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120109]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.COMBAT SERVICE SUPPORT VEHICLE"]],I[120110]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE"],A["GR.EQ.CROSS-COUNTRY"]],I[120111]=[A["GR.EQ.ARMOURED FIGHTING VEHICLE"],A["GR.EQ.CROSS-COUNTRY"],A["GR.IC.FF.RECONNAISSANCE EQUPIMENT"]],I[120200]=[A["GR.EQ.TANK"]],I[120201]=[A["GR.EQ.TANK"],A["GR.EQ.LIGHT TANK"]],I[120202]=[A["GR.EQ.TANK"],A["GR.EQ.MEDIUM TANK"]],I[120203]=[A["GR.EQ.TANK"],A["GR.EQ.HEAVY TANK"]],I[120300]=[A["GR.EQ.TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120301]=[A["GR.EQ.TANK"],A["GR.EQ.LIGHT TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120302]=[A["GR.EQ.TANK"],A["GR.EQ.MEDIUM TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[120303]=[A["GR.EQ.TANK"],A["GR.EQ.HEAVY TANK"],A["GR.EQ.TANK RECOVERY VEHICLE"]],I[13e4]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],s._scale(.7,A["GR.IC.ENGINEER"])],I[130100]=[A["GR.IN.IC.BRIDGE"]],I[130200]=[A["GR.EQ.UTILITY VEHICLE"],s._scale(.8,A["GR.IN.IC.BRIDGE"])],I[130300]=[A["GR.IN.IC.BRIDGE"],A["GR.EQ.FIXED BRIDGE"]],I[130400]=[A["GR.IN.IC.BRIDGE"],A["GR.M2.RIVERINE"]],I[130500]=[A["GR.IN.IC.BRIDGE"],A["GR.EQ.FOLDING GIRDER BRIDGE"]],I[130600]=[A["GR.IN.IC.BRIDGE"],A["GR.EQ.HOLLOW DECK BRIDGE"]],I[130700]=[A["GR.IC.DRILLING"]],I[130701]=[s._scale(.7,A["GR.IC.DRILLING"]),A["GR.EQ.UTILITY VEHICLE"]],I[130800]=[A["GR.EQ.EARTHMOVER"]],I[130801]=[A["GR.EQ.MULTIFUNCTIONAL EARTHMOVER/DIGGER"]],I[130900]=[A["GR.EQ.MINE CLEARING EQUIPMENT"]],I[130901]=[A["GR.EQ.MINE CLEARING EQUIPMENT"],s._translate(0,-10,A["GR.EQ.LIMITED CROSS-COUNTRY"])],I[130902]=[A["GR.EQ.MINE CLEARING EQUIPMENT"],A["GR.EQ.TANK"]],I[130903]=[A["GR.EQ.ASSAULT BREACHER VEHICLE (ABV) WITH COMBAT DOZER BLADE"]],I[130904]=[A["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"],A["GR.IC.ENGINEER UTILITY VEHICLE"],A["GR.M2.MEDIUM"]],I[130905]=[A["GR.M1.ROUTE, RECONNAISSANCE, AND CLEARANCE"],A["GR.IC.ENGINEER UTILITY VEHICLE"],A["GR.M2.HEAVY"]],I[131e3]=[A["GR.IC.MINE LAYING"]],I[131001]=[A["GR.EQ.UTILITY VEHICLE"],s._translate(0,10,s._scale(.7,A["GR.IC.MINE LAYING"]))],I[131002]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],A["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I[131003]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"],A["GR.EQ.ARMORED CARRIER WITH VOLCANO"]],I[131100]=[A["GR.EQ.DOZER"]],I[131101]=[A["GR.EQ.DOZER ARMORED"]],I[131200]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,A["GR.IC.ENGINEER"])],I[131300]=[A["GR.EQ.ARMOURED PERSONNEL CARRIER"],s._scale(.6,A["GR.IC.ENGINEER"]),A["GR.EQ.ARMOURED PERSONNEL CARRIER ENGINEER RECON VEHICLE"]],I[131400]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"],A["GR.EQ.UTILITY VEHICLE BACKHOE"]],I[131500]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"],s._scale(.6,A["GR.IC.ENGINEER"])],I[131600]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.CROSS-COUNTRY"],A["GR.EQ.UTILITY VEHICLE FERRY TRANSPORTER"]],I[14e4]=[],I[140100]=[A["GR.EQ.UTILITY VEHICLE"]],I[140200]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.MEDICAL VEHICLE"]],I[140300]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.MEDICAL EVACUATION"]],I[140400]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.MOBILE EMERGENCY PHYSICIAN"]],I[140500]=[A["GR.EQ.BUS"]],I[140600]=[A["GR.EQ.SEMI-TRAILER TRUCK"]],I[140601]=[A["GR.EQ.SEMI-TRAILER TRUCK"],A["GR.EQ.UTILITY VEHICLE LIGHT"]],I[140602]=[A["GR.EQ.SEMI-TRAILER TRUCK"],A["GR.EQ.UTILITY VEHICLE MEDIUM"]],I[140603]=[A["GR.EQ.SEMI-TRAILER TRUCK"],A["GR.EQ.UTILITY VEHICLE HEAVY"]],I[140700]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"]],I[140800]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.CROSS-COUNTRY"]],I[140900]=[A["GR.EQ.UTILITY VEHICLE"],s._scale(.8,A["GR.IC.FF.CLASS III"])],I[141e3]=[A["GR.EQ.UTILITY VEHICLE"],s._scale(.7,A["GR.IC.WATER"])],I[141100]=[A["GR.EQ.WATER VEHICLE"],A["GR.EQ.LIMITED CROSS-COUNTRY"]],I[141200]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK"]],I[141201]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK.LIGHT"]],I[141202]=[A["GR.EQ.UTILITY VEHICLE"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK"],A["GR.EQ.UTILITY VEHICLE.TOW TRUCK.HEAVY"]],I[15e4]=[],I[150100]=[A["GR.EQ.TRAIN LOCOMOTIVE"]],I[150200]=[A["GR.EQ.RAILCAR"]],I[16e4]=[],I[160100]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"]],I[160101]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160102]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160103]=[A["GR.EQ.CIVILIAN VEHICLE.AUTOMOBILE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160200]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"]],I[160201]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160202]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160203]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160300]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I[160301]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160302]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160303]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160400]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"]],I[160401]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160402]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160403]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160500]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"]],I[160501]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"]],I[160502]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"]],I[160503]=[A["GR.EQ.CIVILIAN VEHICLE.JEEP TYPE VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"]],I[160600]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160601]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160602]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160603]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160700]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160701]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.LIGHT"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160702]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.MEDIUM"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160703]=[A["GR.EQ.CIVILIAN VEHICLE.OPEN-BED TRUCK"],A["GR.EQ.CIVILIAN VEHICLE.HEAVY"],A["GR.EQ.CIVILIAN VEHICLE.TRAILER"]],I[160800]=[A["ST.IC.KNOWN INSURGENT VEHICLE"]],I[160900]=[A["ST.IC.KNOWN INSURGENT VEHICLE"],A["ST.M1.DRUG"]],I[17e4]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[170100]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[170200]=[A["GR.IC.FF.BORDER PATROL"]],I[170300]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[170400]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[170500]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[170600]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[170700]=[A["GR.IC.MILITARY POLICE"]],I[170800]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[170900]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[171e3]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[171100]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[18e4]=[A["GR.EQ.PACK ANIMAL"]],I[19e4]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE SUPPORT"]],I[190100]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE TRANSLOADER"]],I[190200]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE TRANSPORTER"]],I[190300]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE CRANE/LOADING DEVICE"]],I[190400]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE PROPELLANT TRANSPORTER"]],I[190500]=[A["GR.EQ.ARMOURED PROTECTED VEHICLE WITH LIMITED CROSS COUNTRY MOBILITY"],A["GR.EQ.MISSILE WARHEAD TRANSPORTER"]],I[2e5]=[],I[200100]=[A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[200200]=[A["ST.IC.BOMB"]],I[200300]=[A["ST.IC.BOOBY TRAP"]],I[200400]=[A["GR.EQ.CBRN EQUIPMENT"]],I[200500]=[A["GR.EQ.COMPUTER SYSTEM"]],I[200600]=[A["GR.EQ.COMMAND LAUNCH EQUIPMENT (CLE)"]],I[200700]=[A["GR.EQ.GENERATOR SET"]],I[200800]=[A["GR.EQ.GROUND-BASED MIDCOURSE DEFENSE (GMD) FIRE CONTROL (GFC) CENTER"]],I[200900]=[A["GR.EQ.IN-FLIGHT INTERCEPTOR COMMUNICATIONS SYSTEM (IFICS) DATA TERMINAL (IDT)"]],I[201e3]=[A["GR.EQ.LASER"]],I[201100]=[A["GR.EQ.PSYCHOLOGICAL OPERATIONS EQUIPMENT"]],I[201200]=[A["GR.IC.SUSTAINMENT"]],I[201300]=[A["GR.EQ.TENT"]],I[201301]=[A["GR.EQ.TENT CIVILIAN"]],I[201302]=[A["GR.EQ.TENT MILITARY"]],I[201400]=[A["GR.EQ.UNIT DEPLOYMENT SHIPMENTS"]],I[201500]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],I[201501]=[A["GR.IC.MEDICAL EVACUATION HELICOPTER"]],I[21e4]=[],I[210100]=[A["GR.EQ.LAND MINE"]],I[210200]=[A["GR.EQ.ANTIPERSONNEL LAND MINE"]],I[210300]=[A["GR.EQ.ANTITANK MINE"]],I[210400]=[A["GR.EQ.IMPROVISED EXPLOSIVE DEVICE"]],I[210500]=[A["GR.EQ.ANTIPERSONNEL LAND MINE LESS THAN LETHAL"]],I[22e4]=[],I[220100]=[A["GR.EQ.SENSOR"]],I[220200]=[A["GR.EQ.SENSOR EMPLACED"]],I[220300]=[A["GR.EQ.RADAR"]],I[23e4]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[230100]=[A["GR.EQ.CIVILIAN VEHICLE.UTILITY VEHICLE"],A["GR.M1.MEDEVAC"]],I[230200]=[A["GR.IC.FIRE PROTECTION"]],I[24e4]=[A["GR.IC.MANUAL TRACK"]],I[25e4]=[A["GR.IC.AVIATION ROTARY WING"]],t["01"]=[A["GR.M1.BIOLOGICAL"]],t["02"]=[A["GR.M1.CHEMICAL"]],t["03"]=[A["GR.M1.EARLY WARNING RADAR"]],t["04"]=[A["GR.M1.INTRUSION"]],t["05"]=[A["GR.M1.NUCLEAR"]],t["06"]=[A["GR.M1.RADIOLOGICAL"]],t["07"]=[A["GR.M1.UPGRADED EARLY WARNING RADAR"]],t["08"]=[A["GR.M1.HIJACKING"]],t["09"]=[A["GR.M1.CIVILIAN"]],t[10]=[A["GR.M1.TILT-ROTOR"]],t[11]=[],t[12]=[A["GR.M1.MULTI-PURPOSE BLADE"]],t[13]=[A["GR.M1.TANK-WIDTH MINE PLOW"]],t[14]=[A["GR.M1.BRIDGING"]],t[15]=[A["GR.M1.CYBERSPACE"]],t[16]=[A["GR.M1.ARMORED"]],t[17]=[A["GR.M1.ATTACK"]],t[18]=[A["GR.M1.CARGO"]],t[19]=[A["GR.M1.MAINTENANCE"]],t[20]=[A["GR.M1.MEDEVAC"]],t[21]=[A["GR.IN.M1.PETROLEUM"]],t[22]=[A["GR.M1.UTILITY"]],t[23]=[A["GR.M1.WATER"]],t[24]=[A["GR.M1.ROBOTIC"]],E["01"]=[A["GR.M2.CYBERSPACE"]],E["02"]=[A["GR.M2.LIGHT"]],E["03"]=[A["GR.M2.MEDIUM"]],E["04"]=[A["GR.M2.RAILROAD"]],E["05"]=[A["GR.M2.TRACKED"]],E["06"]=[A["GR.M2.TRACTOR TRAILER"]],E["07"]=[A["GR.M2.WHEELED LIMITED"]],E["08"]=[A["GR.M2.WHEELED"]],E["09"]=[A["GR.M2.ROBOTIC"]];var T={11e4:140,110100:140,110101:140,110102:140,110103:140,110200:140,110201:140,110202:140,110203:140,110300:140,110301:140,110302:140,110303:140,110400:135,110500:140,110501:140,110502:140,110503:140,110600:140,110601:140,110602:140,110603:140,110700:140,110701:140,110702:140,110703:140,110800:140,110801:140,110802:140,110803:140,110900:140,110901:140,110902:140,110903:140,111e3:140,111001:140,111002:140,111003:140,111100:140,111101:140,111102:140,111103:140,111104:140,111105:140,111106:140,111107:140,111108:140,111109:140,111200:140,111201:140,111202:140,111203:140,111300:140,111301:140,111302:140,111303:140,111400:140,111401:140,111402:140,111403:140,111500:140,111501:140,111502:140,111503:140,111600:140,111601:140,111602:140,111603:140,111701:140,111702:140,111703:140,111800:140,111900:140,112e3:140,12e4:129,120100:129,120101:130,120102:130,120103:130,120104:130,120105:120,120106:120,120107:120,120108:130,120109:130,120110:140,120200:130,120201:130,120202:130,120203:130,120300:130,120301:130,120302:130,120303:130,13e4:129,130100:115,130200:130,130300:130,130400:135,130500:120,130600:120,130700:120,130701:130,130800:130,130801:130,130900:120,130901:130,130902:130,131e3:115,131001:130,131002:130,131003:140,131100:130,131101:130,131200:130,131300:130,131400:140,131500:140,131600:140,140100:130,140200:130,140300:130,140400:130,140500:130,140600:140,140601:140,140602:140,140603:140,140700:140,140800:140,140900:130,141e3:130,141100:140,141200:130,141201:130,141202:130,150100:130,150200:140,160100:132.5,160101:132.5,160102:132.5,160103:132.5,160200:132.5,160201:132.5,160202:132.5,160203:132.5,160300:132.5,160301:132.5,160302:132.5,160303:132.5,160400:132.5,160401:132.5,160402:132.5,160403:132.5,160500:132.5,160501:132.5,160502:132.5,160503:132.5,160600:132.5,160601:132.5,160602:132.5,160603:132.5,160700:132.5,160701:132.5,160702:132.5,160703:132.5,160800:115,160900:115,17e4:149.03125,170100:118.75,170200:133.21875,170300:135.21875,170400:118.75,170500:138.1875,170600:118.75,170700:118.75,170800:118,170900:118,171e3:135,171100:135,18e4:125,19e4:129,190100:129,190200:129,190300:129,190400:129,190500:129,200100:140,200200:118.75,200300:120,200400:140,200500:132,200600:118.75,200700:118.75,200800:118.75,200900:119.36222839355469,201e3:145,201100:120,201200:118,201300:124.36222076416016,201301:120,201302:120,201400:118.75,201500:140,201501:115,210100:122,210200:122,210300:122,210400:118.75,210500:122,220100:140,220200:136,220300:120,23e4:135,230100:132.5,230200:120,24e4:118.75};for(var S in T)T.hasOwnProperty(S)&&(R[S]={x1:50,x2:150,y1:50,y2:T[S]})}}},J={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"20"==e&&(I[11e4]=[A["GR.IC.MILITARY"]],I[110100]=[A["GR.IN.IC.AIRCRAFT PRODUCTION & ASSEMBLY"]],I[110200]=[s._scale(1.4,A["GR.IC.FF.CLASS V"])],I[110300]=[A["GR.IC.FF.CLASS V"],A["GR.IC.FF.SUPPLY"]],I[110400]=[A["GR.EQ.TANK"]],I[110500]=[A["ST.IC.BLACK LIST LOCATION"]],I[110600]=[A["GR.IC.CBRN"]],I[110700]=[A["GR.EQ.DOZER"]],I[110701]=[A["GR.IN.IC.BRIDGE"]],I[110800]=[A["GR.IC.EQUIPMENT MANUFACTURE"]],I[110900]=[A["GR.I.GOVERNMENT"]],I[111e3]=[A["ST.IC.GRAY LIST LOCATION"]],I[111100]=[A["ST.IC.MASS GRAVE LOCATION"]],I[111200]=[A["GR.IN.IC.MILITARY/CIVILIAN.MATERIEL"],A["GR.IC.FF.SUPPLY"]],I[111300]=[A["GR.IN.IC.MINE"]],I[111400]=[A["GR.EQ.MISSILE LAUNCHER"]],I[111500]=[s._scale(.8,A["AC.IC.RADIOACTIVE MATERIAL"])],I[111600]=[A["GR.IN.IC.MILITARY/CIVILIAN.PRINTED MEDIA"]],I[111700]=[A["ST.IC.SAFE HOUSE"]],I[111800]=[A["ST.IC.WHITE LIST LOCATION"]],I[111900]=[A["GR.EQ.TENT"]],I[111901]=[A["GR.EQ.TENT"],A["ST.M1.DISPLACED PERSONS, REFUGEES, AND EVACUEES"]],I[111902]=[A["GR.EQ.TENT"],A["GR.M1.TRAINING CAMP"]],I[112e3]=[A["GR.IN.IC.INDUSTRIAL SITE"],A["GR.IN.IC.WAREHOUSE/STORAGE FACILITY"]],I[112100]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[112101]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[112102]=[A["GR.IC.FF.BORDER PATROL"]],I[112103]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[112104]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[112105]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[112106]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[112107]=[A["GR.IC.LAW ENFORCEMENT"]],I[112108]=[A["GR.IC.FF.PRISON"]],I[112109]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[112110]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[112111]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[112112]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[112200]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[112201]=[A["GR.IC.FIRE PROTECTION"]],I[112202]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],I[12e4]=[],I[120100]=[A["GR.IN.IC.AGRICULTURE AND FOOD INFRASTRUCTURE"]],I[120101]=[A["GR.IN.IC.AGRICULTURAL LABORATORY"]],I[120102]=[A["GR.IN.IC.ANIMAL FEEDLOT"]],I[120103]=[A["ST.IC.FOOD DISTRIBUTION"],A["AC.M1.COMMERCIAL"]],I[120104]=[A["GR.IN.IC.FARM/RANCH"]],I[120105]=[A["ST.IC.FOOD DISTRIBUTION"]],I[120106]=[A["ST.IC.FOOD DISTRIBUTION"],A["AC.M1.PRODUCTION"]],I[120107]=[A["ST.IC.FOOD DISTRIBUTION"],A["AC.M1.RETAIL"]],I[120108]=[A["GR.IN.IC.GRAIN STORAGE"]],I[120200]=[A["AC.IC.BANKING FINANCE AND INSURANCE INFRASTRUCTURE"]],I[120201]=[A["GR.IN.IC.ATM"]],I[120202]=[A["GR.IN.IC.BANK"]],I[120203]=[A["GR.IN.IC.BULLION STORAGE"]],I[120204]=[A["GR.IN.IC.INFRASTRUCTURE.BANKING FINANCE AND INSURANCE INFRASTRUCTURE.ECONOMIC INFRASTRUCTURE ASSET"]],I[120205]=[A["GR.IN.IC.FEDERAL RESERVE BANK"]],I[120206]=[A["GR.IN.IC.FINANCIAL EXCHANGE"]],I[120207]=[A["GR.IN.IC.FINANCIAL SERVICES, OTHER"]],I[120300]=[A["GR.IN.IC.COMMERCIAL INFRASTRUCTURE"]],I[120301]=[A["GR.IN.IC.CHEMICAL PLANT"]],I[120302]=[A["GR.IN.IC.FIREARMS MANUFACTURER"]],I[120303]=[A["GR.IN.IC.FIREARMS RETAILER"]],I[120304]=[A["GR.IN.IC.HAZARDOUS MATERIAL PRODUCTION"]],I[120305]=[A["GR.IN.IC.HAZARDOUS MATERIAL STORAGE"]],I[120306]=[A["GR.IN.IC.INDUSTRIAL SITE"]],I[120307]=[A["GR.IN.IC.LANDFILL"]],I[120308]=[A["GR.IN.IC.PHARMACEUTICAL MANUFACTURER"]],I[120309]=[A["GR.IN.IC.CONTAMINATED HAZARDOUS WASTE SITE"]],I[120310]=[A["GR.IN.IC.TOXIC RELEASE INVENTORY"]],I[120400]=[A["GR.IN.IC.EDUCATIONAL FACILITIES INFRASTRUCTURE"]],I[120401]=[A["GR.IN.IC.COLLEGE/UNIVERSITY"]],I[120402]=[A["GR.IN.IC.SCHOOL"]],I[120500]=[A["GR.IN.IC.ELECTRIC POWER"]],I[120501]=[s._scale(.6,A["GR.IN.IC.ELECTRIC POWER"])],I[120502]=[s._translate(0,15,s._scale(.75,A["GR.IN.IC.ELECTRIC POWER"])),A["AC.M1.GENERATION STATION"]],I[120503]=[A["GR.IN.IC.NATURAL GAS FACILITY"]],I[120504]=[s._scale(1.5,A["GR.IC.FF.CLASS III"])],I[120505]=[A["GR.IC.FF.CLASS III"]],I[120506]=[A["GR.IN.IC.PROPANE FACILITY"]],I[120600]=[A["GR.IN.IC.GOVERNMENT SITE INFRASTRUCTURE"]],I[120700]=[],I[120701]=[A["GR.IC.FF.MEDICAL"]],I[120702]=[A["GR.IC.FF.MEDICAL"],A["GR.IC.FF.MEDICAL TREATMENT FACILITY"]],I[120800]=[A["GR.IN.IC.MILITARY INFRASTRUCTURE"]],I[120801]=[A["GR.IN.IC.BASE"],A["AC.M1.MILITARY ARMORY"]],I[120802]=[A["GR.IN.IC.BASE"]],I[120900]=[A["GR.IN.IC.POSTAL SERVICE INFRASTRUCTURE"]],I[120901]=[A["GR.IN.IC.POSTAL DISTRIBUTION CENTER"]],I[120902]=[A["GR.IN.IC.POST OFFICE"]],I[121e3]=[A["GR.IN.IC.PUBLIC VENUES INFRASTRUCTURE"]],I[121001]=[A["GR.IN.IC.ENCLOSED FACITLITY (PUBLIC VENUE)"]],I[121002]=[A["GR.IN.IC.OPEN FACILITY (OPEN VENUE)"]],I[121003]=[A["GR.IN.IC.RECREATIONAL AREA"]],I[121004]=[A["GR.IN.IC.RELIGIOUS INSTITUTION"]],I[121100]=[A["GR.IN.IC.SPECIAL NEEDS INFRASTRUCTURE"]],I[121101]=[A["GR.IN.IC.ADULT DAY CARE"]],I[121102]=[A["GR.IN.IC.CHILD DAY CARE"]],I[121103]=[A["GR.IN.IC.ELDER CARE"]],I[121200]=[A["GR.IN.IC.TELECOMMUNICATIONS INFRASTRUCTURE"]],I[121201]=[A["GR.IC.FF.BROADCAST TRANSMITTER ANTENNA"]],I[121202]=[A["GR.IN.IC.INFRASTRUCTURE.TELECOMMUNICATIONS INFRASTRUCTURE.TELECOMMUNICATIONS"]],I[121203]=[A["GR.IN.IC.TELECOMMUNICATIONS TOWER"]],I[121300]=[s._scale(1.5,A["GR.IC.TRANSPORTATION"])],I[121301]=[A["GR.IC.TRANSPORTATION"],A["GR.IC.AIRPORT OF DEBARKATION"]],I[121302]=[A["GR.IN.IC.AIR TRAFFIC CONTROL FACILITY"]],I[121303]=[A["GR.EQ.CIVILIAN VEHICLE.MULTIPLE PASSENGER VEHICLE"]],I[121304]=[A["GR.IC.FERRY"]],I[121305]=[A["GR.IN.IC.HELICOPTER LANDING SITE"]],I[121306]=[A["GR.IC.MAINTENANCE"]],I[121307]=[A["GR.IC.RAILHEAD"]],I[121308]=[A["GR.IN.IC.REST STOP"]],I[121309]=[A["GR.IC.TRANSPORTATION"],A["GR.M1.NAVAL"]],I[121310]=[A["GR.IC.NAVAL"],A["GR.M1.YARD"]],I[121311]=[A["GR.IN.IC.TOLL FACILITY"]],I[121312]=[A["GR.IN.IC.TRAFFIC INSPECTION FACILITY"]],I[121313]=[A["GR.IN.IC.TUNNEL"]],I[121400]=[A["GR.IC.WATER"]],I[121401]=[A["GR.IN.IC.CONTROL VALVE"]],I[121402]=[A["GR.IN.IC.DAM"]],I[121403]=[A["GR.IN.IC.DISCHARGE OUTFALL"]],I[121404]=[A["GR.IN.IC.GROUND WATER WELL"]],I[121405]=[A["GR.IN.IC.PUMPING STATION"]],I[121406]=[A["GR.IN.IC.RESERVOIR"]],I[121407]=[A["GR.IN.IC.STORAGE TOWER"]],I[121408]=[A["GR.IN.IC.SURFACE WATER INTAKE"]],I[121409]=[A["GR.IN.IC.WASTEWATER TREATMENT FACILITY"]],I[121410]=[A["GR.IC.WATER"]],I[121411]=[A["GR.IC.WATER PURIFICATION"]],t["01"]=[A["GR.M1.BIOLOGICAL"]],t["02"]=[A["GR.M1.CHEMICAL"]],t["03"]=[A["GR.M1.NUCLEAR"]],t["04"]=[A["GR.IN.M1.RADIOLOGICAL"]],t["05"]=[A["GR.M1.DECONTAMINATION"]],t["06"]=[A["GR.IN.M1.COAL"]],t["07"]=[A["GR.IN.M1.GEOTHERMAL"]],t["08"]=[A["GR.IN.M1.HYDROELECTRIC"]],t["09"]=[A["GR.IN.M1.NATURAL GAS"]],t[10]=[A["GR.IN.M1.PETROLEUM"]],t[11]=[A["GR.IN.M1.CIVILIAN"]],t[12]=[A["GR.IN.M1.CIVILIAN TELEPHONE"]],t[13]=[A["GR.IN.M1.CIVILIAN TELEVISION"]],t[14]=[A["GR.M1.CYBERSPACE"]],t[15]=[A["GR.M1.JOINT NETWORK NODE"]],t[16]=[A["GR.M1.COMMAND POST NODE"]],E["01"]=[A["GR.IN.M2.CHEMICAL & BIOLOGICAL WARFARE"]],E["02"]=[A["GR.IN.M2.CHEMICAL WARFARE PRODUCTION"]],E["03"]=[A["GR.IN.M2.NUCLEAR WARFARE PRODUCTION"]],E["04"]=[A["GR.IN.M2.RADIOLOGICAL WARFARE PRODUCTION"]],E["05"]=[A["GR.IN.M2.ATOMIC ENERGY REACTOR"]],E["06"]=[A["GR.IN.M2.NUCLEAR MATERIAL PRODUCTION"]],E["07"]=[A["GR.IN.M2.NUCLEAR MATERIAL STORAGE"]],E["08"]=[A["GR.IN.M2.WEAPONS GRADE PRODUCTION"]],E["09"]=[A["GR.M2.CYBERSPACE"]])}},Z={type:"number",getMetadata:u,getIcons:v,iconParts:d,icons:function(I,t,E,R,e,A,C){"30"==e&&(I[11e4]=[A["SE.IC.MILITARY"]],I[12e4]=[A["SE.IC.COMBATANT"]],I[120100]=[A["SE.IC.CARRIER"]],I[120200]=[A["SE.IC.SURFACE COMBATANT, LINE"]],I[120201]=[A["SE.IC.BATTLESHIP"]],I[120202]=[A["SE.IC.CRUISER, GUIDED MISSILE"]],I[120203]=[A["SE.IC.DESTROYER"]],I[120204]=[A["SE.IC.FRIGATE"]],I[120205]=[A["SE.IC.CORVETTE"]],I[120206]=[A["SE.IC.LITTORAL COMBATANT SHIP"]],I[120300]=[A["SE.IC.AMPHIBIOUS WARFARE SHIP"]],I[120301]=[A["SE.IC.AMPHIBIOUS FORCE FLAGSHIP"]],I[120302]=[A["SE.IC.AMPHIBIOUS ASSAULT"]],I[120303]=[A["SE.IC.AMPHIBIOUS ASSAULT SHIP, GENERAL"]],I[120304]=[A["SE.IC.AMPHIBIOUS ASSAULT SHIP, MULTI-PURPOSE"]],I[120305]=[A["SE.IC.AMPHIBIOUS ASSAULT SHIP, HELICOPTER"]],I[120306]=[A["SE.IC.AMPHIBIOUS TRANSPORT, DOCK"]],I[120307]=[A["SE.IC.LANDING SHIP"]],I[120308]=[A["SE.IC.LANDING CRAFT"]],I[120400]=[A["SE.IC.MINE WARFARE VESSEL"]],I[120401]=[A["SE.IC.MINELAYER"]],I[120402]=[A["SE.IC.MINESWEEPER"]],I[120403]=[A["SE.IC.MINESWEEPER, DRONE"]],I[120404]=[A["SE.IC.MINEHUNTER"]],I[120405]=[A["SE.IC.MINE COUNTERMEASURES"]],I[120406]=[A["SE.IC.MINE COUNTER MEASURE SUPPORT SHIP"]],I[120500]=[A["SE.IC.PATROL"]],I[120501]=[A["SE.IC.PATROL CRAFT"]],I[120502]=[A["SE.IC.PATROL GUN"]],I[120600]=[A["SE.IC.SEA SURFACE DECOY"]],I[120700]=[A["SE.IC.UNMANNED SURFACE WATER VEHICLE"]],I[120800]=[A["SE.IC.MILITARY SPEEDBOAT"]],I[120801]=[A["SE.IC.MILITARY SPEEDBOAT, RIGID-HULL INFLATABLE BOAT"]],I[120900]=[A["SE.IC.MILITARY JETSKI"]],I[121e3]=[A["SE.IC.NAVY TASK ORGANIZATION UNIT"]],I[121001]=[A["SE.IC.NAVY TASK ELEMENT"]],I[121002]=[A["SE.IC.NAVY TASK FORCE"]],I[121003]=[A["SE.IC.NAVY TASK GROUP"]],I[121004]=[A["SE.IC.NAVY TASK UNIT"]],I[121005]=[A["SE.IC.CONVOY"]],I[121100]=[A["SE.IC.RADAR"]],I[13e4]=[A["SE.IC.NONCOMBATANT"]],I[130100]=[A["SE.IC.AUXILIARY SHIP"]],I[130101]=[A["SE.IC.AMMUNITION SHIP"]],I[130102]=[A["SE.IC.STORES SHIP"]],I[130103]=[A["SE.IC.AUXILIARY FLAG OR COMMAND SHIP"]],I[130104]=[A["SE.IC.INTELLIGENCE COLLECTOR"]],I[130105]=[A["SE.IC.OCEAN RESEARCH SHIP"]],I[130106]=[A["SE.IC.SURVEY SHIP"]],I[130107]=[A["SE.IC.HOSPITAL SHIP2"]],I[130108]=[A["SE.IC.CARGO SHIP"]],I[130109]=[A["SE.IC.COMBAT SUPPORT SHIP, FAST"]],I[130110]=[A["SE.IC.OILER, REPLENISHMENT"]],I[130111]=[A["SE.IC.REPAIR SHIP"]],I[130112]=[A["SE.IC.SUBMARINE TENDER"]],I[130113]=[A["SE.IC.TUG, OCEAN GOING"]],I[130200]=[A["SE.IC.SERVICE CRAFT, YARD, GENERAL"]],I[130201]=[A["SE.IC.BARGE, NOT SELF-PROPELLED"]],I[130202]=[A["SE.IC.BARGE, SELF-PROPELLED"]],I[130203]=[A["SE.IC.TUG, HARBOUR"]],I[130204]=[A["SE.IC.LAUNCH"]],I[14e4]=[A["SE.IC.CIVILIAN"]],I[140100]=[A["SE.IC.MERCHANT SHIP, GENERAL"]],I[140101]=[A["SE.IC.CARGO, GENERAL"]],I[140102]=[A["SE.IC.CONTAINER SHIP"]],I[140103]=[A["SE.IC.DREDGE"]],I[140104]=[A["SE.IC.ROLL ON-ROLL OFF"]],I[140105]=[A["SE.IC.FERRY"]],I[140106]=[A["SE.IC.HEAVY LIFT"]],I[140107]=[A["SE.IC.HOVERCRAFT 2525D"]],I[140108]=[A["SE.IC.MERCHANT SHIP, LASH CARRIER (WITH BARGES)"]],I[140109]=[A["SE.IC.OILER/TANKER"]],I[140110]=[A["SE.IC.PASSENGER SHIP"]],I[140111]=[A["SE.IC.TUG, OCEAN GOING CIVILIAN"]],I[140112]=[A["SE.IC.TOW"]],I[140113]=[A["SE.IC.TRANSPORT SHIP, HAZARDOUS MATERIAL"]],I[140114]=[A["SE.IC.JUNK/DHOW"]],I[140115]=[A["SE.IC.BARGE, NOT SELF-PROPELLED"]],I[140116]=[A["SE.IC.HOSPITAL SHIP"]],I[140200]=[A["SE.IC.FISHING VESSEL"]],I[140201]=[A["SE.IC.DRIFTER"]],I[140202]=[A["SE.IC.TRAWLER"]],I[140203]=[A["SE.IC.FISHING VESSEL DREDGE"]],I[140300]=[A["SE.IC.LAW ENFORCEMENT VESSEL"]],I[140400]=[A["SE.IC.LEISURE CRAFT, SAILING BOAT"]],I[140500]=[A["SE.IC.LEISURE CRAFT, MOTORIZED"]],I[140501]=[A["SE.IC.LEISURE CRAFT, MOTORIZED, RIGID-HULL INFLATABLE BOAT"]],I[140502]=[A["SE.IC.LEISURE CRAFT, MOTORIZED, SPEEDBOAT"]],I[140600]=[A["SE.IC.LEISURE CRAFT, JETSKI"]],I[140700]=[A["SE.IC.UNMANNED SURFACE WATER VEHICLE (USV)"]],I[15e4]=[A["SE.IC.OWN SHIP"]],I[16e4]=[A["SE.IC.FUSED TRACK"]],I[17e4]=[A["SE.IC.MANUAL TRACK"]],t["01"]=[A["SE.M1.OWN SHIP"]],t["02"]=[A["SE.M1.ANTIAIR WARFARE"]],t["03"]=[A["SE.M1.ANTISUBMARINE WARFARE"]],t["04"]=[A["SE.M1.ESCORT"]],t["05"]=[A["SE.M1.ELECTRONIC WARFARE"]],t["06"]=[A["SE.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]],t["07"]=[A["SE.M1.MINE COUNTER MEASURES"]],t["08"]=[A["SE.M1.MISSILE DEFENSE"]],t["09"]=[A["SE.M1.MEDICAL"]],t[10]=[A["SE.M1.MINE WARFARE"]],t[11]=[A["SE.M1.REMOTE MULTI-MISSION VEHIHLE"]],t[12]=[A["SE.M1.SPECIAL OPERATIONS FORCE"]],t[13]=[A["SE.M1.SURFACE WARFARE"]],t[14]=[A["SE.M1.BALLISTIC MISSILE"]],t[15]=[A["SE.M1.GUIDED MISSILE"]],t[16]=[A["SE.M1.OTHER GUIDED MISSILE"]],t[17]=[A["SE.M1.TORPEDO"]],t[18]=[A["SE.M1.DRONE-EQUIPPED"]],t[19]=[A["SE.M1.HELICOPTER-EQUIPPED"]],t[20]=[A["SE.M1.BALLISTIC MISSILE DEFENSE, SHOOTER"]],t[21]=[A["SE.M1.BALLISTIC MISSILE DEFENSE, LONG- RANGE SURVEILLANCE AND TRACK (LRS&T)"]],t[22]=[A["SE.M1.SEA-BASE X-BAND"]],t[23]=[A["SE.M1.HIJACKING/HIJACKED"]],t[24]=[A["SE.M1.HIJACKER"]],t[25]=[A["SE.M1.CYBERSPACE"]],E["01"]=[A["SE.M2.NUCLEAR POWERED"]],E["02"]=[A["SE.M2.HEAVY"]],E["03"]=[A["SE.M2.LIGHT"]],E["04"]=[A["SE.M2.MEDIUM"]],E["05"]=[A["SE.M2.DOCK"]],E["06"]=[A["SE.M2.LOGISTICS"]],E["07"]=[A["SE.M2.TANK"]],E["08"]=[A["SE.M2.VEHICLE"]],E["09"]=[A["SE.M2.FAST"]],E[10]=[A["SE.M2.AIR-CUSHIONED (USA ONLY)"]],E[11]=[A["SE.M2.AIR-CUSHIONED"]],E[12]=[A["SE.M2.HYDROFOIL"]],E[13]=[A["SE.M2.AUTONOMOUS CONTROL"]],E[14]=[A["SE.M2.REMOTELY PILOTED"]],E[15]=[A["SE.M2.EXPENDABLE"]],E[16]=[A["SE.M2.CYBERSPACE"]])}},q={type:"number",getMetadata:u,getIcons:v,iconParts:D,icons:function(I,t,E,R,e,A,C){"35"==e&&(I[11e4]=[A["SU.IC.MILITARY"]],I[110100]=[A["SU.IC.SUBMARINE"]],I[110101]=[A["SU.IC.SUBMARINE, SURFACED"]],I[110102]=[A["SU.IC.SUBMARINE, SNORKELING"]],I[110103]=[A["SU.IC.SUBMARINE, BOTTOMED"]],I[110200]=[A["SU.IC.OTHER SUBMERSIBLE"]],I[110300]=[A["SU.IC.NON-SUBMARINE"]],I[110400]=[A["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV)"]],I[110500]=[A["SU.IC.DIVER, MILITARY"]],I[12e4]=[A["SU.IC.CIVILIAN"]],I[120100]=[A["SU.IC.SUBMERSIBLE, CIVILIAN"]],I[120200]=[A["SU.IC.AUTONOMOUS UNDERWATER VEHICLE/ UNMANNED UNDERWATER VEHICLE (AUV/UUV), CIVILIAN"]],I[120300]=[A["SU.IC.DIVER, CIVILIAN"]],I[13e4]=[A["SU.IC.UNDERWATER WEAPON"]],I[130100]=[A["SU.IC.TORPEDO"]],I[130200]=[A["SU.IC.IMPROVISED EXPLOSIVE DEVICE (IED)"]],I[130300]=[A["SU.IC.UNDERWATER DECOY DSymbol"]],I[14e4]=[A["SU.IC.ECHO TRACKER CLASSIFIER (ETC)/POSSIBLE CONTACT (POSCON)"]],I[15e4]=[A["SU.IC.FUSED TRACK"]],I[16e4]=[A["SU.IC.MANUAL TRACK"]],I[2e5]=[A["SU.IC.SEABED INSTALLATION, MAN-MADE, MILITARY"]],I[21e4]=[A["SU.IC.SEABED INSTALLATION, MAN-MADE, NON-MILITARY"]],t["01"]=[A["SU.M1.ANTISUBMARINE WARFARE"]],t["02"]=[A["SU.M1.AUXILIARY"]],t["03"]=[A["SU.M1.COMMAND AND CONTROL"]],t["04"]=[A["SU.M1.INTELLIGENCE, SURVEILLANCE, RECONNAISSANCE"]],t["05"]=[A["SU.M1.MINE COUNTERMEASURES"]],t["06"]=[A["SU.M1.MINE WARFARE"]],t["07"]=[A["SU.M1.SURFACE WARFARE"]],t["08"]=[A["SU.M1.ATTACK"]],t["09"]=[A["SU.M1.BALLISTIC MISSILE"]],t[10]=[A["SU.M1.GUIDED MISSILE"]],t[11]=[A["SU.M1.OTHER GUIDED MISSILES (POINT DEFENCE)"]],t[12]=[A["SU.M1.SPECIAL OPERATIONS FORCE"]],t[13]=[A["SU.M1.POSSIBLE SUBMARINE - LOW 1"]],t[14]=[A["SU.M1.POSSIBLE SUBMARINE - LOW 2"]],t[15]=[A["SU.M1.POSSIBLE SUBMARINE - HIGH 3"]],t[16]=[A["SU.M1.POSSIBLE SUBMARINE - HIGH 4"]],t[17]=[A["SU.M1.PROBABLE SUBMARINE"]],t[18]=[A["SU.M1.CERTAIN SUBMARINE"]],t[19]=[A["SU.M1.ANTI-TORPEDO TORPEDO"]],t[20]=[A["SU.M1.HIJACKING/HIJACKED"]],t[21]=[A["SU.M1.HIJACKER"]],t[22]=[A["SU.M1.CYBERSPACE"]],E["01"]=[A["SU.M2.AIR INDEPENDENT PROPULSION"]],E["02"]=[A["SU.M2.DIESEL PROPULSION"]],E["03"]=[A["SU.M2.DIESEL - TYPE 1"]],E["04"]=[A["SU.M2.DIESEL - TYPE 2"]],E["05"]=[A["SU.M2.DIESEL - TYPE 3"]],E["06"]=[A["SU.M2.NUCLEAR POWERED"]],E["07"]=[A["SU.M2.NUCLEAR - TYPE 1"]],E["08"]=[A["SU.M2.NUCLEAR - TYPE 2"]],E["09"]=[A["SU.M2.NUCLEAR - TYPE 3"]],E[10]=[A["SU.M2.NUCLEAR - TYPE 4"]],E[11]=[A["SU.M2.NUCLEAR - TYPE 5"]],E[12]=[A["SU.M2.NUCLEAR - TYPE 6"]],E[13]=[A["SU.M2.NUCLEAR - TYPE 7"]],E[14]=[A["SU.M2.AUTONOMOUS CONTROL"]],E[15]=[A["SU.M2.REMOTELY PILOTED"]],E[16]=[A["SU.M2.EXPENDABLE"]],E[17]=[A["SU.M2.CYBERSPACE"]])}},j={type:"number",getMetadata:u,getIcons:v,iconParts:D,icons:function(I,t,E,R,e,A,C){"36"==e&&(I[11e4]=[A["SU.IC.SEA MINE"]],I[110100]=[A["SU.IC.SEA MINE - BOTTOM"]],I[110200]=[A["SU.IC.SEA MINE - MOORED"]],I[110300]=[A["SU.IC.SEA MINE - FLOATING"]],I[110400]=[A["SU.IC.SEA MINE - RISING"]],I[110500]=[A["SU.IC.SEA MINE (IN OTHER POSITION)"]],I[110600]=[A["SU.IC.SEA MINE - KINGFISHER"]],I[110700]=[A["SU.IC.SEA MINE - SMALL OBJECT"]],I[110800]=[A["SU.IC.SEA MINE EXERCISE MINE"]],I[110801]=[A["SU.IC.SEA MINE EXERCISE MINE - BOTTOM"]],I[110802]=[A["SU.IC.SEA MINE EXERCISE MINE - MOORED"]],I[110803]=[A["SU.IC.SEA MINE EXERCISE MINE - FLOATING"]],I[110804]=[A["SU.IC.SEA MINE EXERCISE MINE - RISING"]],I[110900]=[A["SU.IC.SEA MINE NEUTRALIZED"]],I[110901]=[A["SU.IC.SEA MINE NEUTRALIZED - BOTTOM"]],I[110902]=[A["SU.IC.SEA MINE NEUTRALIZED - MOORED"]],I[110903]=[A["SU.IC.SEA MINE NEUTRALIZED - FLOATING"]],I[110904]=[A["SU.IC.SEA MINE NEUTRALIZED - RISING"]],I[110905]=[A["SU.IC.SEA MINE (IN OTHER POSITION) NEUTRALIZED"]],I[12e4]=[A["SU.IC.UNEXPLODED EXPLOSIVE ORDNANCE"]],I[13e4]=[A["SU.IC.SEA MINE DECOY"]],I[130100]=[A["SU.IC.SEA MINE DECOY, BOTTOM/GROUND"]],I[130200]=[A["SU.IC.SEA MINE DECOY, MOORED"]],I[14e4]=[],I[140100]=[s._scale(1.3,A["SU.IC.SEA MINE MILCO"])],I[140101]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]])],I[140102]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]])],I[140103]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]])],I[140104]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]])],I[140105]=[s._scale(1.3,[A["SU.IC.SEA MINE MILCO"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]])],I[140200]=[A["SU.IC.SEA MINE MILCO - BOTTOM"]],I[140201]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]],I[140202]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]],I[140203]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]],I[140204]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]],I[140205]=[A["SU.IC.SEA MINE MILCO - BOTTOM"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]],I[140300]=[A["SU.IC.SEA MINE MILCO - MOORED"]],I[140301]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]],I[140302]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]],I[140303]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]],I[140304]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]],I[140305]=[A["SU.IC.SEA MINE MILCO - MOORED"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]],I[140400]=[A["SU.IC.SEA MINE MILCO - FLOATING"]],I[140401]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 1"]],I[140402]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 2"]],I[140403]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 3"]],I[140404]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 4"]],I[140405]=[A["SU.IC.SEA MINE MILCO - FLOATING"],A["SU.IC.SEA MINE MILCO - GENERAL, CONFIDENCE LEVEL 5"]],I[15e4]=[s._scale(1.3,A["SU.IC.SEA MINE MILEC"])],I[150100]=[A["SU.IC.SEA MINE MILEC - BOTTOM"]],I[150200]=[A["SU.IC.SEA MINE MILEC - MOORED"]],I[150300]=[A["SU.IC.SEA MINE MILEC - FLOATING"]],I[16e4]=[s._scale(1.3,A["SU.IC.SEA MINE NEGATIVE REACQUISITION"])],I[160100]=[A["SU.IC.SEA MINE NEGATIVE REACQUISITION - BOTTOM"]],I[160200]=[A["SU.IC.SEA MINE NEGATIVE REACQUISITION - MOORED"]],I[160300]=[A["SU.IC.SEA MINE NEGATIVE REACQUISITION - FLOATING"]],I[17e4]=[s._scale(1.3,A["SU.IC.SEA MINE GENERAL OBSTRUCTOR"])],I[170100]=[A["SU.IC.SEA MINE GENERAL OBSTRUCTOR NEUTRALIZED"]],I[18e4]=[s._scale(1.3,A["SU.IC.SEA MINE MINE ANCHOR"])],I[19e4]=[s._scale(1.3,A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT"])],I[190100]=[A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - BOTTOM"]],I[190200]=[A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - MOORED"]],I[190300]=[A["SU.IC.SEA MINE NON-MINE MINE-LIKE CONTACT - FLOATING"]],I[2e5]=[A["SU.IC.ENVIRONMENTAL REPORT LOCATION"]],I[21e4]=[A["SU.IC.DIVE REPORT LOCATION"]])}},$={type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"40"==e&&(I[11e4]=[],I[110100]=[A["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"]],I[110101]=[s._scale(1.5,A["ST.IC.ARREST"])],I[110102]=[A["ST.IC.ARSON/FIRE"]],I[110103]=[A["ST.IC.INDIVIDUAL"],A["ST.IC.ATTEMPTED CRIMINAL ACTIVITY"]],I[110104]=[A["ST.IC.DRIVE-BY SHOOTING"]],I[110105]=[A["ST.IC.DRUG RELATED ACTIVITIES"]],I[110106]=[A["ST.IC.EXTORTION"]],I[110107]=[A["ST.IC.GRAFFITI"]],I[110108]=[A["ST.IC.KILLING VICTIM"]],I[110109]=[A["ST.IC.POISONING"]],I[110110]=[A["ST.IC.RIOT"]],I[110111]=[s._scale(1.5,A["ST.IC.BOOBY TRAP"])],I[110112]=[A["ST.IC.HOUSE"],A["ST.M1.EVICTION"]],I[110113]=[A["ST.IC.BLACK MARKETING"]],I[110114]=[A["ST.IC.VANDALISM/LOOT/RANSACK/PLUNDER/SACK"]],I[110115]=[A["GR.IC.FF.JAIL BREAK"]],I[110116]=[A["ST.IC.ROBBERY"]],I[110117]=[A["ST.IC.THEFT"]],I[110118]=[A["ST.IC.BURGLARY"]],I[110119]=[A["ST.IC.SMUGGLING"]],I[110120]=[A["ST.IC.ROCK THROWING"]],I[110121]=[A["ST.IC.COMPOSITE LOSS"],A["ST.M1.DEAD BODY"]],I[110122]=[A["ST.IC.SABOTAGE"]],I[110123]=[s._translate(0,10,s._scale(.8,A["AC.IC.CRIMINAL.ACTIVITY.INCIDENT"])),A["AC.M1.THREAT"]],I[110200]=[A["ST.IC.BOMB"]],I[110201]=[A["ST.IC.BOMB"],A["AC.M1.THREAT"]],I[110300]=[A["ST.IC.IED"]],I[110301]=[A["ST.IC.EXPLOSION"],A["ST.IC.IED"]],I[110302]=[s._translate(0,15,s._scale(.7,[A["ST.IC.EXPLOSION"],A["ST.IC.IED"]])),A["ST.M1.PREMATURE"]],I[110303]=[A["ST.IC.IED"],A["GR.IC.FF.SUPPLY"]],I[110304]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.IED"]],I[110400]=[A["AC.IC.SHOOTING"]],I[110401]=[A["ST.IC.SNIPING"]],I[110500]=[A["ST.IC.ILLEGAL DRUG OPERATION"]],I[110501]=[A["ST.IC.ILLEGAL DRUG OPERATION"],A["ST.M1.TRAFFICKING"]],I[110502]=[A["ST.IC.ILLEGAL DRUG OPERATION"],A["ST.M1.LABRATORY"]],I[110600]=[A["ST.IC.EXPLOSION"]],I[110601]=[A["ST.IC.EXPLOSION"],A["ST.IC.GRENADE"]],I[110602]=[A["ST.IC.EXPLOSION"],A["ST.IC.INCENDIARY"]],I[110603]=[A["ST.IC.EXPLOSION"],A["ST.IC.MINE"]],I[110604]=[A["ST.IC.EXPLOSION"],s._scale(.6,A["GR.EQ.MORTAR"])],I[110605]=[A["ST.IC.EXPLOSION"],s._scale(.6,A["GR.EQ.SINGLE ROCKET LAUNCHER"])],I[110606]=[s._scale(.7,A["ST.IC.BOMB"]),A["ST.IC.EXPLOSION"]],I[12e4]=[A["AC.IC.CRIMINAL.CIVIL DISTURBANCE"]],I[120100]=[A["ST.IC.DEMONSTRATION"]],I[13e4]=[],I[130100]=[A["ST.IC.PATROLLING"]],I[130200]=[A["ST.IC.PSYCHOLOGICAL OPERATIONS"]],I[130201]=[A["ST.IC.RADIO AND TELEVISION PSYCHOLOGICAL OPERATIONS"]],I[130300]=[A["ST.IC.SEARCHING"]],I[130400]=[],I[130401]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.WILLING"]],I[130402]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.COERCED/IMPRESSED"]],I[130500]=[A["ST.IC.MINE LAYING"]],I[130600]=[A["ST.IC.SPY"]],I[130700]=[A["ST.IC.WARRANT SERVED"]],I[130800]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.EXFILTRATION"]],I[130900]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.INFILTRATION"]],I[131e3]=[A["ST.IC.GROUP"],A["ST.M1.MEETING"]],I[131001]=[A["ST.IC.POLLING PLACE/ELECTION"]],I[131100]=[A["ST.IC.HOUSE"],A["ST.M1.RAID"]],I[131200]=[A["GR.IC.FF.EMERGENCY OPERATION"]],I[131201]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY COLLECTION EVACUATION POINT"]],I[131202]=[A["ST.IC.FOOD DISTRIBUTION"]],I[131203]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY INCIDENT COMMAND CENTER"]],I[131204]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY OPERATIONS CENTER"]],I[131205]=[A["AC.IC.EMERGENCY PUBLIC INFORMATION CENTER"]],I[131206]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY SHELTER"]],I[131207]=[s._scale(.7,A["GR.IC.FF.EMERGENCY OPERATION"]),A["AC.M1.EMERGENCY STAGING AREA"]],I[131208]=[A["GR.IC.FF.SUPPLY"],A["GR.IC.WATER"]],I[131300]=[A["GR.IC.EMERGENCY MEDICAL OPERATION"]],I[131301]=[A["AC.IC.EMT STATION LOCATION"]],I[131302]=[A["AC.IC.HEALTH DEPARTMENT FACILITY"]],I[131303]=[A["AC.IC.MEDICAL FACILITIES OUTPATIENT"]],I[131304]=[A["AC.IC.OPERATION/EMERGENCY MEDICAL OPERATION"]],I[131305]=[A["AC.IC.PHARMACY"]],I[131306]=[A["AC.IC.TRIAGE"]],I[131400]=[A["GR.IC.FIRE PROTECTION"]],I[131401]=[A["AC.IC.FIRE HYDRANT"]],I[131402]=[s._scale(1.5,A["GR.IC.FIRE PROTECTION"])],I[131403]=[A["AC.IC.OTHER WATER SUPPLY LOCATION"]],I[131500]=[A["GR.IC.FF.LAW ENFORCEMENT"]],I[131501]=[A["GR.IC.BUREAU OF ALCOHOL, TOBACCO, FIREARMS AND EXPLOSIVES (ATF) (DEPARTMENT OF JUSTICE)"]],I[131502]=[A["GR.IC.FF.BORDER PATROL"]],I[131503]=[A["GR.IC.FF.CUSTOMS SERVICE"]],I[131504]=[A["GR.IC.DRUG ENFORCEMENT AGENCY (DEA)"]],I[131505]=[A["GR.IC.FF.DEPARTMENT OF JUSTICE (DOJ)"]],I[131506]=[A["GR.IC.FEDERAL BUREAU OF INVESTIGATION (FBI)"]],I[131507]=[A["GR.IC.LAW ENFORCEMENT"]],I[131508]=[A["GR.IC.FF.PRISON"]],I[131509]=[A["GR.IC.UNITED STATES SECRET SERVICE(TREAS) (USSS)"]],I[131510]=[A["GR.IC.TRANSPORTATION SECURITY AGENCY (TSA)"]],I[131511]=[A["GR.IC.LAW ENFORCEMENT VESSEL"]],I[131512]=[A["GR.IC.FF.US MARSHALS SERVICE"]],I[131513]=[A["ST.IC.INTERNAL SECURITY FORCE"]],I[14e4]=[A["AC.IC.FIRE EVENT"]],I[140100]=[A["AC.IC.FIRE ORIGIN"]],I[140200]=[A["AC.IC.SMOKE"]],I[140300]=[A["AC.IC.HOT SPOT"]],I[140400]=[A["AC.IC.NON-REsIdENTIAL FIRE"]],I[140500]=[A["AC.IC.REsIdENTIAL FIRE"]],I[140600]=[A["AC.IC.SCHOOL FIRE"]],I[140700]=[A["AC.IC.SPECIAL NEEDS FIRE"]],I[140800]=[A["AC.IC.WILD FIRE"]],I[15e4]=[],I[150100]=[A["AC.IC.HAZARDOUS MATERIALS INCIDENT"]],I[150101]=[A["AC.IC.CHEMICAL AGENT"]],I[150102]=[A["AC.IC.CORROSIVE MATERIAL"]],I[150103]=[A["AC.IC.HAZARDOUS WHEN WET"]],I[150104]=[A["AC.IC.EXPLOSIVE MATERIAL"]],I[150105]=[A["AC.IC.FLAMMABLE GAS"]],I[150106]=[A["AC.IC.FLAMMABLE LIQUID"]],I[150107]=[A["AC.IC.FLAMMABLE SOLID"]],I[150108]=[A["AC.IC.NON-FLAMMABLE GAS"]],I[150109]=[A["AC.IC.ORGANIC PEROXIDE"]],I[150110]=[A["AC.IC.OXIDIZER"]],I[150111]=[A["AC.IC.RADIOACTIVE MATERIAL"]],I[150112]=[A["AC.IC.SPONTANEOUSLY COMBUSTIBLE MATERIAL"]],I[150113]=[A["AC.IC.TOXIC GAS"]],I[150114]=[A["AC.IC.TOXIC INFECTIOUS MATERIAL"]],I[150115]=[A["AC.IC.UNEXPLODED ORDNANCE"]],I[16e4]=[A["GR.IC.TRANSPORTATION"]],I[160100]=[A["ST.IC.HIJACKING (AIRPLANE)"]],I[160200]=[A["ST.IC.HIJACKING (BOAT)"]],I[160300]=[A["GR.EQ.TRAIN LOCOMOTIVE"]],I[160400]=[A["ST.IC.KNOWN INSURGENT VEHICLE"]],I[160500]=[A["ST.IC.EXPLOSION"],s._scale(.7,A["ST.IC.KNOWN INSURGENT VEHICLE"])],I[17e4]=[A["ST.IC.NATURAL EVENT"]],I[170100]=[A["ST.IC.GEOLOGIC"]],I[170101]=[A["AC.IC.AFTERSHOCK"]],I[170102]=[A["AC.IC.AVALANCHE"]],I[170103]=[A["AC.IC.EARTHQUAKE EPICENTER"]],I[170104]=[A["AC.IC.LANDSLIDE"]],I[170105]=[A["AC.IC.SUBSIDENCE"]],I[170106]=[A["AC.IC.VOLCANIC ERUPTION"]],I[170107]=[A["AC.IC.VOLCANIC THREAT"]],I[170108]=[A["AC.IC.CAVE ENTRANCE"]],I[170200]=[A["ST.IC.HYDRO-METEOROLOGICAL"]],I[170201]=[A["AC.IC.DROUGHT"]],I[170202]=[A["AC.IC.FLOOD"]],I[170203]=[A["AC.IC.TSUNAMI"]],I[170300]=[A["ST.IC.INFESTATION"]],I[170301]=[A["AC.IC.BIRD"]],I[170302]=[A["AC.IC.INSECT"]],I[170303]=[A["AC.IC.MICROBIAL"]],I[170304]=[A["AC.IC.REPTILE"]],I[170305]=[A["AC.IC.RODENT"]],I[18e4]=[],I[180100]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.LEADER"],A["ST.M2.RELIGIOUS"]],I[180200]=[A["ST.IC.INDIVIDUAL"],A["ST.M1.SPEAKER"]],t["01"]=[A["ST.M1.ASSASSINATION"]],t["02"]=[A["ST.M1.EXECUTION (WRONGFUL KILLING)"]],t["03"]=[A["ST.M1.HIJACKING/HIJACKED"]],t["04"]=[A["ST.M1.HOUSE-TO-HOUSE"]],t["05"]=[A["ST.M1.KIDNAPPING"]],t["06"]=[A["ST.M1.MURDER"]],t["07"]=[A["ST.M1.PIRACY"]],t["08"]=[A["ST.M1.RAPE"]],t["09"]=[A["ST.M1.WRITTEN PSYCHOLOGICAL OPERATIONS"]],t[10]=[A["ST.M1.PIRATE"]],t[11]=[A["ST.M1.FALSE"]],t[12]=[A["ST.M1.FIND"]],t[13]=[A["ST.M1.FOUND AND CLEARED"]],t[14]=[A["ST.M1.HOAX (DECOY)"]],t[15]=[A["ST.M1.ATTEMPTED"]],t[16]=[A["ST.M1.ACCIDENT"]],t[17]=[A["ST.M1.INCIDENT"]],t[18]=[A["ST.M1.THEFT"]],t[19]=[A["GR.M1.HIJACKER"]],t[20]=[A["GR.M1.CYBERSPACE"]],E["01"]=[A["GR.M2.CYBERSPACE"]],E["02"]=[A["GR.M2.SECURITY FORCE ASSISTANCE"]])}},II={type:"number",getMetadata:u,getIcons:v,iconParts:f,icons:function(I,t,E,R,e,A,C){"50"!=e&&"51"!=e&&"52"!=e&&"53"!=e&&"54"!=e||(I[11e4]=[],I[110100]=[A["SI.IC.COMMUNICATIONS"]],I[110200]=[A["SI.I.JAMMER / ELECTRONIC COUNTER-MEASURES"]],I[110300]=[A["SI.IC.RADAR"]],t["01"]=[A["SI.M1.ANTI-AIRCRAFT FIRE CONTROL"]],t["02"]=[A["SI.M1.AIRBORNE SEARCH AND BOMBING"]],t["03"]=[A["SI.M1.AIRBORNE INTERCEPT"]],t["04"]=[A["SI.M1.ALTIMETER"]],t["05"]=[A["SI.M1.AIRBORNE RECONNAISSANCE AND MAPPING"]],t["06"]=[A["SI.M1.AIR TRAFFIC CONTROL"]],t["07"]=[A["SI.M1.BEACON TRANSPONDER (NOT IFF)"]],t["08"]=[A["SI.M1.BATTLEFIELD SURVEILLANCE"]],t["09"]=[A["SI.M1.CONTROLLED APPROACH"]],t[10]=[A["SI.M1.CONTROLLED INTERCEPT"]],t[11]=[A["SI.M1.CELLULAR/MOBILE"]],t[12]=[A["SI.M1.COASTAL SURVEILLANCE"]],t[13]=[A["SI.M1.DECOY/MIMIC"]],t[14]=[A["SI.M1.DATA TRANSMISSION"]],t[15]=[A["SI.M1.EARTH SURVEILLANCE"]],t[16]=[A["SI.M1.EARLY WARNING"]],t[17]=[A["SI.M1.FIRE CONTROL"]],t[18]=[A["SI.M1.GROUND MAPPING"]],t[19]=[A["SI.M1.HEIGHT FINDING"]],t[20]=[A["SI.M1.HARBOR SURVEILLANCE"]],t[21]=[A["SI.M1.IDENTIFICATION, FRIEND OR FOE (INTERROGATOR)"]],t[22]=[A["SI.M1.INSTRUMENT LANDING SYSTEM"]],t[23]=[A["SI.M1.IONOSPHERIC SOUNDING"]],t[24]=[A["SI.M1.IDENTIFICATION, FRIEND OR FOE (TRANSPONDER)"]],t[25]=[A["SI.M1.BARRAGE JAMMER"]],t[26]=[A["SI.M1.CLICK JAMMER"]],t[27]=[A["SI.M1.DECEPTIVE JAMMER"]],t[28]=[A["SI.M1.FREQUENCY SWEPT JAMMER"]],t[29]=[A["SI.M1.JAMMER (GENERAL)"]],t[30]=[A["SI.M1.NOISE JAMMER"]],t[31]=[A["SI.M1.PULSED JAMMER"]],t[32]=[A["SI.M1.REPEATER JAMMER"]],t[33]=[A["SI.M1.SPOT NOISE JAMMER"]],t[34]=[A["SI.M1.TRANSPONDER JAMMER"]],t[35]=[A["SI.M1.MISSILE ACQUISITION"]],t[36]=[A["SI.M1.MISSILE CONTROL"]],t[37]=[A["SI.M1.MISSILE DOWNLINK"]],t[38]=[A["SI.M1.METEOROLOGICAL"]],t[39]=[A["SI.M1.MULTI-FUNCTION"]],t[40]=[A["SI.M1.MISSILE GUIDANCE"]],t[41]=[A["SI.M1.MISSILE HOMING"]],t[42]=[A["SI.M1.MISSILE TRACKING"]],t[43]=[A["SI.M1.NAVIGATIONAL/GENERAL"]],t[44]=[A["SI.M1.NAVIGATIONAL/DISTANCE MEASURING EQUIPMENT"]],t[45]=[A["SI.M1.NAVIGATION/TERRAIN FOLLOWING"]],t[46]=[A["SI.M1.NAVIGATIONAL/WEATHER AVOIDANCE"]],t[47]=[A["SI.M1.OMNI-LINE OF SIGHT (LOS)"]],t[48]=[A["SI.M1.PROXIMITY USE"]],t[49]=[A["SI.M1.POINT-TO-POINT LINE OF SIGHT (LOS)"]],t[50]=[A["SI.M1.INSTRUMENTATION"]],t[51]=[A["SI.M1.RANGE ONLY"]],t[52]=[A["SI.M1.SONOBUOY"]],t[53]=[A["SI.M1.SATELLITE DOWNLINK"]],t[54]=[A["SI.M1.SPACE"]],t[55]=[A["SI.M1.SURFACE SEARCH"]],t[56]=[A["SI.M1.SHELL TRACKING"]],t[57]=[A["SI.M1.SATELLITE UPLINK"]],t[58]=[A["SI.M1.TARGET ACQUISITION"]],t[59]=[A["SI.M1.TARGET ILLUMINATION"]],t[60]=[A["SI.M1.TROPOSPHERIC SCATTER"]],t[61]=[A["SI.M1.TARGET TRACKING"]],t[62]=[A["SI.M1.UNKNOWN"]],t[63]=[A["SI.M1.VIDEO REMOTING"]],t[64]=[A["SI.M1.EXPERIMENTAL"]],t[65]=[A["SI.M1.CYBER"]],E["01"]=[A["SI.M2.CYBER"]])}};var tI={type:"number",getMetadata:u,getIcons:v,iconParts:V,labels:function(I){var t={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:30},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},E={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},R={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},uniqueDesignation1:{stroke:!1,textanchor:"middle",x:100,y:20,fontsize:30},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}};I[130100]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:-70,fontsize:40},additionalInformation1:{stroke:!1,textanchor:"middle",x:100,y:-25,fontsize:30},hostile:{stroke:!1,textanchor:"start",x:150,y:45,fontsize:40},uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:0,fontsize:80},dtg:{stroke:!1,textanchor:"end",x:50,y:-30,fontsize:40},dtg1:{stroke:!1,textanchor:"end",x:50,y:10,fontsize:40}},I[130200]=t,I[130300]=t,I[130400]={},I[130500]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I[130600]={},I[130700]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45,fontweight:"bold"}},I[130800]=t,I[130900]=t,I[131001]=E,I[131002]=E,I[131003]=E,I[131100]=t,I[131200]=t,I[131300]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:30,fontsize:40,fontweight:"bold"}},I[131301]={},I[131400]=t,I[131500]=t,I[131600]=t,I[131700]={},I[131800]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:125,fontsize:70}},I[131900]={uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:115,fontsize:40}},I[132e3]={uniqueDesignation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I[132100]={uniqueDesignation:{stroke:!1,textanchor:"start",x:100,y:110,fontsize:35,fill:"rgb(255,255,255)",fontweight:"bold"}},I[160100]={},I[160200]={},I[160201]={},I[160202]={},I[160203]={},I[160204]={},I[160205]={},I[160300]={uniqueDesignation:{stroke:!1,textanchor:"start",x:110,y:90,fontsize:40}},I[160400]=E,I[18e4]={},I[180100]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:130,fontsize:35}},I[180200]={uniqueDesignation:{stroke:!1,textanchor:"middle",x:100,y:130,fontsize:35}},I[180300]={},I[180400]={},I[180500]={},I[180600]={uniqueDesignation:{stroke:!1,textanchor:"start",x:150,y:70,fontsize:35}},I[180700]={},I[180800]={},I[180900]={},I[181e3]={},I[181100]={},I[181200]={},I[181300]={},I[181400]={},I[181500]={},I[181600]={},I[181700]={},I[181800]={},I[181900]={},I[182e3]={},I[182100]={},I[182200]={},I[182300]={},I[182400]={},I[182500]={},I[200400]={},I[200500]={},I[200600]={},I[200700]={},I[210100]={},I[210200]={},I[210300]={},I[210400]={},I[210500]={},I[210600]={altitudeDepth:{stroke:!1,textanchor:"start",x:150,y:70,fontsize:35}},I[210700]={},I[210800]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:35}},I[210900]={},I[211e3]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:80,fontsize:35}},I[211100]={},I[211200]={},I[211300]={},I[211400]={},I[211500]={},I[211600]={},I[211700]={},I[211800]={},I[211900]={},I[212e3]={},I[212100]={},I[212200]={},I[212300]={},I[212400]={},I[212500]={},I[212600]={},I[212700]={},I[212800]={additionalInformation:{stroke:!1,textanchor:"middle",x:100,y:115,fontsize:45}},I[212900]={},I[212901]={},I[212902]={},I[212903]={},I[212904]={},I[213e3]={},I[213100]={},I[213200]={},I[213300]={},I[213400]={},I[213500]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213501]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213502]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213503]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213504]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213505]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213506]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213507]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213508]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213509]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213510]={},I[213511]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213512]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213513]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213514]={additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213515]={uniqueDesignation:{stroke:!1,textanchor:"start",x:140,y:70,fontsize:35},additionalInformation:{stroke:!1,textanchor:"start",x:150,y:105,fontsize:35}},I[213600]={},I[213700]={},I[213800]={},I[213900]={},I[214e3]={},I[214100]={},I[214200]={},I[214300]={},I[214400]={},I[214500]={},I[214600]={},I[214700]={},I[214800]={},I[214900]={dtg:{stroke:!1,textanchor:"start",x:180,y:75,fontsize:30},dtg1:{stroke:!1,textanchor:"start",x:180,y:100,fontsize:30},uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:125,fontsize:30}},I[215e3]={},I[215100]={},I[215200]={},I[215300]={},I[215400]={},I[215500]={},I[215600]={dtg:{stroke:!1,textanchor:"start",x:180,y:75,fontsize:30},dtg1:{stroke:!1,textanchor:"start",x:180,y:100,fontsize:30},uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:125,fontsize:30}},I[215700]={},I[215800]={},I[215900]={},I[216e3]={},I[216100]={},I[216200]={},I[216300]={},I[216400]={},I[216500]={},I[216600]={},I[216700]={},I[216800]={},I[216900]={},I[217e3]={},I[217100]={},I[217200]={},I[217300]={},I[217400]={},I[217500]={},I[217600]={},I[217700]={},I[217800]={},I[217900]={},I[218e3]={},I[218100]={},I[218200]={},I[218300]={},I[218500]={},I[218600]={},I[218700]={},I[218800]={},I[218900]={},I[219e3]={},I[219100]={},I[219200]={},I[240601]={additionalInformation:{stroke:!1,textanchor:"start",x:120,y:145,fontsize:40},altitudeDepth:{stroke:!1,textanchor:"end",x:80,y:145,fontsize:40},targetNumber:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I[240602]={targetNumber:{stroke:!1,textanchor:"start",x:120,y:80,fontsize:40}},I[240603]={},I[240900]={uniqueDesignation:{stroke:!1,textanchor:"start",x:195,y:110,fontsize:35,fontweight:"bold"}},I[250100]=E,I[250200]=E,I[250300]=E,I[250400]=E,I[250500]=E,I[250600]={uniqueDesignation:{stroke:!1,textanchor:"start",x:180,y:80,fontsize:35}},I[270601]={},I[270602]={},I[270603]={},I[270701]={},I[280100]={},I[280200]={},I[280201]={},I[280300]={},I[280400]={},I[280500]={},I[280600]={},I[280700]={},I[280800]=t,I[280900]={},I[281e3]={},I[281100]={},I[281200]={},I[281300]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281301]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281400]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281500]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281600]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281700]={additionalInformation:{stroke:!1,textanchor:"start",x:160,y:30,fontsize:35},dtg:{stroke:!1,textanchor:"end",x:40,y:30,fontsize:35},hostile:{stroke:!1,textanchor:"start",x:160,y:90,fontsize:35},location:{stroke:!1,textanchor:"middle",x:100,y:135,fontsize:35},quantity:{stroke:!1,textanchor:"middle",x:100,y:-20,fontsize:35},uniqueDesignation:{stroke:!1,textanchor:"end",x:40,y:90,fontsize:35}},I[281800]=t,I[281801]=t,I[281802]=t,I[281803]=t,I[281804]=t,I[281805]=t,I[281806]=t,I[281807]=t,I[281808]=t,I[281809]=t,I[281901]={},I[281902]={},I[281903]={},I[282001]={altitudeDepth:{stroke:!1,textanchor:"start",x:120,y:60,fontsize:40,fontweight:"bold"}},I[282002]={altitudeDepth:{stroke:!1,textanchor:"start",x:115,y:60,fontsize:40,fontweight:"bold"}},I[320100]={},I[320101]=t,I[320102]=t,I[320103]=t,I[320104]=t,I[320200]=t,I[320300]=t,I[320400]=t,I[320500]=t,I[320600]=t,I[320700]=t,I[320800]=t,I[320900]=t,I[321e3]=t,I[321100]=t,I[321200]=t,I[321300]=t,I[321400]=t,I[321500]=t,I[321600]=t,I[321700]=R,I[321701]=R,I[321702]=R,I[321703]=R,I[321704]=R,I[321705]=R,I[321706]={},I[321707]=E,I[321708]=E,I[321709]=E,I[321710]=E,I[321711]=E,I[321712]=E,I[321713]=E,I[321714]=E,I[321715]=E,I[321716]=E,I[321800]=R,I[340300]={},I[340400]={},I[340900]={},I[341400]={},I[341600]={},I[342800]={},I[350101]={},I[350102]={},I[350103]={},I[350201]={},I[350202]={},I[350203]={}},icons:function(I,t,E,R,e,A,C){"25"==e&&(I[130100]=A["TP.ACTION POINT"],R[130100]={x1:60,x2:140,y1:-60},I[130200]=A["TP.ACTION AMNESTY POINT"],R[130200]={x1:60,x2:140,y1:-60},I[130300]=A["TP.ACTION CHECK POINT"],R[130300]={x1:60,x2:140,y1:-60},I[130400]=A["TP.CENTRE OF MAIN EFFORT"],R[130400]={x1:25,x2:175,y1:65,y2:135},I[130500]=A["TP.CONTACT POINT"],R[130500]={x1:50,x2:150,y1:50,y2:150},I[130600]=A["TP.COORDINATION POINT"],R[130600]={x1:50,x2:150,y1:50,y2:150},I[130700]=A["TP.DECISION POINT"],R[130700]={x1:30,x2:170,y1:25,y2:160},I[130800]=A["TP.DISTRESS CALL"],R[130800]={x1:60,x2:140,y1:-60},I[130900]=A["TP.ENTRY CONTROL POINT"],R[130900]={x1:60,x2:140,y1:-60},I[131001]=A["TP.FLY-TO-POINT (SONOBUOY)"],R[131001]={x1:60,x2:140,y1:-60},I[131002]=A["TP.FLY-TO-POINT (WEAPON)"],R[131002]={x1:60,x2:140,y1:-60},I[131003]=A["TP.FLY-TO-POINT (NORMAL)"],R[131003]={x1:60,x2:140,y1:-60},I[131100]=A["TP.ACTION LINKUP POINT"],R[131100]={x1:60,x2:140,y1:-60},I[131200]=A["TP.ACTION PASSAGE POINT"],R[131200]={x1:60,x2:140,y1:-60},I[131300]=A["TP.POINT OF INTEREST"],R[131300]={x1:50,x2:150,y1:-25},I[131301]=A["POINT OF INTEREST – LAUNCH EVENT"],R[131301]={x1:50,x2:150,y1:-25},I[131400]=A["TP.ACTION RALLY POINT"],R[131400]={x1:60,x2:140,y1:-60},I[131500]=A["TP.ACTION RELEASE POINT"],R[131500]={x1:60,x2:140,y1:-60},I[131600]=A["TP.ACTION START POINT"],R[131600]={x1:60,x2:140,y1:-60},I[131700]=A["TP.SPECIAL POINT"],R[131700]={x1:40,x2:160,y1:40,y2:160},I[131800]=A["TP.WAYPOINT"],R[131800]={x1:60,x2:140,y1:60,y2:140},I[131900]=A["TP.AIRFIELD"],R[131900]={x1:35,x2:165,y1:60,y2:125},I[132e3]=A["TP.TARGET HANDOVER"],R[132e3]={x1:40,x2:160,y1:40,y2:160},I[132100]=A["TP.KEY TERRAIN"],I[160100]=A["TP.OBSERVATION POST/OUTPOST"],R[160100]={x1:50,x2:150,y1:40,y2:150},I[160200]=A["TP.OBSERVATION POST/OUTPOST"],R[160200]={x1:50,x2:150,y1:40,y2:150},I[160201]=A["TP.OBSERVATION POST/RECONNAISSANCE"],R[160201]={x1:50,x2:150,y1:40,y2:150},I[160202]=A["TP.FORWARD OBSERVER POSITION"],R[160202]={x1:50,x2:150,y1:40,y2:150},I[160203]=A["TP.CBRN OBSERVATION POST"],R[160203]={x1:50,x2:150,y1:40,y2:150},I[160204]=A["TP.SENSOR OUTPOST"],R[160204]={x1:50,x2:150,y1:40,y2:150},I[160205]=A["TP.COMBAT OUTPOST"],R[160205]={x1:50,x2:150,y1:40,y2:150},I[160300]=A["TP.TARGET REFERENCE"],I[160400]=A["TP.POINT OF DEPARTURE"],R[160400]={x1:60,x2:140,y1:-60},I[18e4]=A["TP.AIR CONTROL POINT"],R[18e4]={x1:60,x2:140,y1:40,y2:160},I[180100]=A["TP.AIR CONTROL POINT (ACP)"],R[180100]={x1:50,x2:150,y1:50,y2:150},I[180200]=A["TP.COMMUNICATIONS CHECKPOINT"],R[180200]={x1:50,x2:150,y1:50,y2:150},I[180300]=A["TP.DOWNED AIRCREW PICKUP POINT"],R[180300]={x1:60,x2:140,y1:-60},I[180400]=A["TP.PULL-UP POINT"],R[180400]={x1:50,x2:240,y1:50,y2:150},I[180500]=A["TP.AIR CONTROL RENDEZVOUS"],R[180500]={x1:60,x2:140,y1:30,y2:170},I[180600]=A["TP.TACAN"],R[180600]={x1:60,x2:140,y1:30,y2:170},I[180700]=A["TP.CAP STATION"],R[180700]={x1:60,x2:140,y1:30,y2:170},I[180800]=A["TP.AEW STATION"],R[180800]={x1:60,x2:140,y1:30,y2:170},I[180900]=A["TP.FIXED WING"],I[181e3]=A["TP.STRIKE IP"],R[181e3]={x1:60,x2:140,y1:30,y2:170},I[181100]=A["TP.REPLENISHMENT STATION"],R[181100]={x1:60,x2:140,y1:30,y2:170},I[181200]=A["TP.TANKING"],R[181200]={x1:60,x2:140,y1:30,y2:170},I[181300]=A["TP.SUCAP - ROTARY WING"],R[181300]={x1:60,x2:140,y1:40,y2:160},I[181400]=A["TP.SUCAP - FIXED WING"],R[181400]={x1:60,x2:140,y1:40,y2:160},I[181500]=A["TP.SUCAP - ROTARY WING"],R[181500]={x1:60,x2:140,y1:40,y2:160},I[181600]=A["TP.MIW - FIXED WING"],R[181600]={x1:60,x2:140,y1:40,y2:160},I[181700]=A["TP.MIW - ROTARY WING"],R[181700]={x1:60,x2:140,y1:40,y2:160},I[181800]=A["TP.TOMCAT"],R[181800]={x1:60,x2:140,y1:30,y2:170},I[181900]=A["TP.RESCUE"],R[181900]={x1:60,x2:140,y1:30,y2:170},I[182e3]=A["TP.UNMANNED AERIAL SYSTEM"],R[182e3]={x1:60,x2:140,y1:30,y2:170},I[182100]=A["TP.VTUA"],R[182100]={x1:60,x2:140,y1:30,y2:170},I[182200]=A["TP.ORBIT"],R[182200]={x1:60,x2:140,y1:30,y2:170},I[182300]=A["TP.ORBIT - FIGURE EIGHT"],R[182300]={x1:60,x2:140,y1:30,y2:170},I[182400]=A["TP.ORBIT - RACE TRACK"],R[182400]={x1:60,x2:140,y1:30,y2:170},I[182500]=A["TP.ORBIT - RANDOM, CLOSED"],R[182500]={x1:60,x2:140,y1:30,y2:170},I[200400]=A["TP.SHIP AREA OF INTEREST (AEGIS ONLY)"],I[200500]=A["TP.ACTIVE MANOEUVRE AREA (AEGIS ONLY)"],R[200500]={x1:40,x2:160,y1:40,y2:160},I[200600]=A.TODO,I[200700]=A.TODO,I[210100]=A["TP.PLAN SHIP"],R[210100]={x1:50,x2:150,y1:50,y2:150},I[210200]=A["TP.AIM POINT"],R[210200]={x1:50,x2:150,y1:50,y2:150},I[210300]=A["TP.DEFENDED ASSET"],I[210400]=A["TP.DROP POINT"],R[210400]={x1:50,x2:150,y1:50,y2:120},I[210500]=A["TP.ENTRY POINT"],R[210500]={x1:50,x2:150,y1:50},I[210600]=A["TP.AIR DETONATION"],I[210700]=A["TP.GROUND ZERO"],R[210700]={x1:50,x2:150,y1:30},I[210800]=A["TP.IMPACT POINT"],R[210800]={x1:50,x2:150,y1:50,y2:150},I[210900]=A["TP.PREDICTED IMPACT POINT"],R[210900]={x1:50,x2:150,y1:50,y2:150},I[211e3]=A["TP.LAUNCHED TORPEDO (AEGIS ONLY)"],R[211e3]={x1:50,x2:150,y1:90,y2:110},I[211100]=A["TP.MSL DETECT POINT"],R[211100]={x1:50,x2:150,y1:30},I[211200]=A["TP.ACOUSTIC COUNTER MEASURE (DECOY)"],R[211200]={x1:50,x2:150,y1:30},I[211300]=A["TP.ELECTRONIC COUNTER MEASURES (ECM) DECOY"],R[211300]={x1:50,x2:150,y1:50,y2:150},I[211400]=A["TP.BRIEF CONTACT"],R[211400]={x1:50,x2:150,y1:0,y2:100},I[211500]=A["TP.DATUM"],R[211500]={x1:50,x2:150,y1:50,y2:150},I[211600]=A["TP.BT BOUY DROP"],R[211600]={x1:50,x2:150,y1:40,y2:160},I[211700]=A["TP.REPORTED BOTTOMED SUB"],I[211800]=A["TP.MOVING HAVEN"],R[211800]={x1:40,x2:160,y1:50,y2:150},I[211900]=A["TP.SCREEN CENTRE"],I[212e3]=A["TP.LOST CONTACT"],R[212e3]={x1:50,x2:150,y1:0,y2:100},I[212100]=A["TP.SINKER"],R[212100]={x1:50,x2:150,y1:0,y2:100},I[212200]=A["TP.TRIAL TRACK"],R[212200]={x1:50,x2:150,y1:0,y2:100},I[212300]=A["TP.FIX ACOUSTIC"],I[212400]=A["TP.FIX ELECTRO-MAGNETIC"],I[212500]=A["TP.ELECTRO MAGNETIC - MAGNETIC ANOMALY DETECTION (MAD)"],R[212500]={x1:50,x2:150,y1:50,y2:180},I[212600]=A["TP.FIX ELECTRO-OPTICAL"],I[212700]=A["TP.TARGET REFERENCE"],I[212800]=A["TP.HARBOR"],R[212800]={x1:50,x2:150,y1:50,y2:150},I[212900]=A["TP.HARBOR"],R[212900]={x1:50,x2:150,y1:50,y2:150},I[212901]=A["TP.HARBOR POINT A"],R[212901]={x1:50,x2:150,y1:50,y2:150},I[212902]=A["TP.HARBOR POINT Q"],R[212902]={x1:50,x2:150,y1:50,y2:150},I[212903]=A["TP.HARBOR POINT X"],R[212903]={x1:50,x2:150,y1:50,y2:150},I[212904]=A["TP.HARBOR POINT Y"],R[212904]={x1:50,x2:150,y1:50,y2:150},I[213e3]=A["TP.DIP POSITION"],R[213e3]={x1:50,x2:150,y1:50,y2:150},I[213100]=A["TP.SEARCH"],R[213100]={x1:50,x2:150,y1:50,y2:150},I[213200]=A["TP.SEARCH AREA"],R[213200]={x1:50,x2:150,y1:50,y2:150},I[213300]=A["TP.SEARCH CENTER"],R[213300]={x1:50,x2:150,y1:50,y2:150},I[213400]=A["TP.NAVIGATIONAL REFERENCE"],I[213500]=A["TP.SONOBUOY"],R[213500]={x1:60,x2:140,y1:-10,y2:160},I[213501]=A["TP.SONOBUOY ANM"],R[213501]={x1:60,x2:140,y1:-10,y2:160},I[213502]=A["TP.SONOBUOY ATAC"],R[213502]={x1:60,x2:140,y1:-10,y2:160},I[213503]=A["TP.SONOBUOY BARRA"],R[213503]={x1:60,x2:140,y1:-10,y2:160},I[213504]=A["TP.SONOBUOY BATHYTHERMOGRAPH TRANSMITTING SONOBUOY (BT)"],R[213504]={x1:60,x2:140,y1:-10,y2:160},I[213505]=A["TP.SONOBUOY COMMAND ACTIVE MULTIBEAM SONOBUOY (CAMBS)"],R[213505]={x1:60,x2:140,y1:-10,y2:160},I[213506]=A["TP.SONOBUOY CASS"],R[213506]={x1:60,x2:140,y1:-10,y2:160},I[213507]=A["TP.SONOBUOY DIFAR"],R[213507]={x1:60,x2:140,y1:-10,y2:160},I[213508]=A["TP.SONOBUOY DICASS"],R[213508]={x1:60,x2:140,y1:-10,y2:160},I[213509]=A["TP.SONOBUOY EXPENDABLE RELIABLE ACOUSTIC PATH SONOBUOY (ERAPS)"],R[213509]={x1:60,x2:140,y1:-10,y2:160},I[213510]=A["TP.SONOBUOY EXPIRED"],R[213510]={x1:40,x2:160,y1:-10,y2:160},I[213511]=A["TP.SONOBUOY KINGPIN"],R[213511]={x1:40,x2:160,y1:-10,y2:160},I[213512]=A["TP.SONOBUOY LOFAR"],R[213512]={x1:40,x2:160,y1:-10,y2:160},I[213513]=A["TP.SONOBUOY PATTERN CENTER"],R[213513]={x1:40,x2:160,y1:-10,y2:160},I[213514]=A["TP.SONOBUOY RO"],R[213514]={x1:40,x2:160,y1:-10,y2:160},I[213515]=A["TP.SONOBUOY VLAD"],R[213515]={x1:40,x2:160,y1:-10,y2:160},I[213600]=A["TP.REFERENCE POINT"],R[213600]={x1:40,x2:160,y1:40,y2:160},I[213700]=A["TP.SPECIAL POINT"],R[213700]={x1:40,x2:160,y1:40,y2:160},I[213800]=A["TP.NAVIGATIONAL REFERENCE"],R[213800]={x1:40,x2:160,y1:40,y2:160},I[213900]=A["TP.DLRP"],R[213900]={x1:40,x2:160,y1:40,y2:160},I[214e3]=A["FORWARD OBSERVER / SPOTTER POSITION"],R[214e3]={x1:40,x2:160,y1:60,y2:140},I[214100]=A["TP.VITAL AREA CENTRE"],R[214100]={x1:40,x2:160,y1:60,y2:140},I[214200]=A["TP.CORRIDOR TAB"],R[214200]={x1:40,x2:160,y1:40,y2:160},I[214300]=A["TP.ENEMY POINT"],R[214300]={x1:40,x2:160,y1:40,y2:160},I[214400]=A["TP.MARSHALL POINT"],R[214400]={x1:40,x2:160,y1:40,y2:160},I[214500]=A["TP.POINT OF INTENDED MOVEMENT"],R[214500]={x1:40,x2:160,y1:40,y2:160},I[214600]=A["TP.PRE-LANDFALL WAYPOINT"],R[214600]={x1:40,x2:160,y1:40,y2:160},I[214700]=A["TP.ESTIMATED POSITION (EP)"],R[214700]={x1:40,x2:160,y1:40,y2:160},I[214800]=A["TP.REFERENCE POINT WAYPOINT"],R[214800]={x1:40,x2:160,y1:40,y2:160},I[214900]=A["TP.SUB SURFACE CONTROL STATION"],R[214900]={x1:30,x2:170,y1:60,y2:140},I[215e3]=A["TP.SUBMARINE CONTROL STATION"],R[215e3]={x1:30,x2:170,y1:60,y2:140},I[215100]=A["TP.ASW SUBMARINE CONTROL STATION"],R[215100]={x1:30,x2:170,y1:60,y2:140},I[215200]=A["TP.(UUV) CONTROL STATION"],R[215200]={x1:30,x2:170,y1:60,y2:140},I[215300]=A["TP.UUV - ASW CONTROL STATION"],R[215300]={x1:30,x2:170,y1:60,y2:140},I[215400]=A["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SUBSURFACE STATION"],R[215400]={x1:30,x2:170,y1:60,y2:140},I[215500]=A["TP.UUV - SUW CONTROL STATION"],R[215500]={x1:30,x2:170,y1:60,y2:140},I[215600]=A["TP.SEA SURFACE CONTROL STATION"],R[215600]={x1:30,x2:170,y1:60,y2:140},I[215700]=A["TP.ASW CONTROL STATION"],R[215700]={x1:30,x2:170,y1:60,y2:140},I[215800]=A["TP.MINE WARFARE SURFACE STATION"],R[215800]={x1:30,x2:170,y1:60,y2:140},I[215900]=A["TP.NON-COMBATANT SURFACE STATION"],R[215900]={x1:30,x2:170,y1:60,y2:140},I[216e3]=A["TP.PICKET CONTROL STATION"],R[216e3]={x1:30,x2:170,y1:60,y2:140},I[216100]=A["TP.RENDEZVOUS CONTROL POINT"],R[216100]={x1:30,x2:170,y1:60,y2:140},I[216200]=A["TP.REPLENISHMENT AT SEA SURFACE STATION"],R[216200]={x1:30,x2:170,y1:60,y2:140},I[216300]=A["TP.RESCUE CONTROL POINT"],R[216300]={x1:30,x2:170,y1:60,y2:140},I[216400]=A["TP.SUW CONTROL STATION"],R[216400]={x1:30,x2:170,y1:60,y2:140},I[216500]=A["TP.(USV) CONTROL STATION"],R[216500]={x1:30,x2:170,y1:60,y2:140},I[216600]=A["TP.USV - ASW CONTROL STATION"],R[216600]={x1:30,x2:170,y1:60,y2:140},I[216700]=A["TP.MINE WARFARE UNMANNED UNDERWATER VEHICLE SURFACE STATION"],R[216700]={x1:30,x2:170,y1:60,y2:140},I[216800]=A["TP.(RMV) USV CONTROL STATION"],R[216800]={x1:30,x2:170,y1:60,y2:140},I[216900]=A["TP.USV - SUW CONTROL STATION"],R[216900]={x1:30,x2:170,y1:60,y2:140},I[217e3]=A["TP.SHORE CONTROL STATION"],R[217e3]={x1:40,x2:160,y1:40,y2:160},I[217100]=A["TP.ROUTE"],R[217100]={x1:30,x2:170,y1:60,y2:140},I[217200]=A["TP.ROUTE DIVERSIONS"],R[217200]={x1:30,x2:170,y1:60,y2:170},I[217300]=A["TP.ROUTE POINT R"],R[217300]={x1:30,x2:170,y1:60,y2:170},I[217400]=A["TP.PICKET ROUTE"],R[217400]={x1:30,x2:170,y1:60,y2:170},I[217500]=A["TP.POINT R ROUTE"],R[217500]={x1:30,x2:170,y1:60,y2:170},I[217600]=A["TP.RENDEZVOUS ROUTE"],R[217600]={x1:30,x2:170,y1:60,y2:170},I[217700]=A["TP.ROUTE WAYPOINT"],R[217700]={x1:30,x2:170,y1:60,y2:170},I[217800]=A["TP.CLUTTER, STATIONARY OR CEASE REPORTING"],I[217900]=A["TP.TENTATIVE OR PROVISIONAL TRACK"],I[218e3]=A["TP.DISTRESSED VESSEL"],I[218100]=A["TP.DITCHED AIRCRAFT"],I[218200]=A["TP.PERSON IN WATER"],I[218300]=A["TP.ICEBERG"],R[218300]={x1:50,x2:150,y1:50,y2:150},I[218500]=A["TP.OIL RIG/PLATFORM"],R[218500]={x1:30,x2:170,y1:60,y2:140},I[218600]=A["TP.SEA MINELIKE"],R[218600]={x1:40,x2:160,y1:40,y2:150},I[218700]=A["TP.BOTTOM RETURN"],R[218700]={x1:40,x2:160,y1:40,y2:100},I[218800]=A["TP.INSTALLATION/MANMADE"],R[218800]={x1:40,x2:160,y1:40,y2:100},I[218900]=A["TP.MARINE LIFE"],R[218900]={x1:100,x2:220,y1:70,y2:130},I[219e3]=A["TP.SEA ANOMALY"],R[219e3]={x1:50,x2:150,y1:30,y2:120},I[219100]=A["TP.WRECK, DANGEROUS"],R[219100]={x1:40,x2:160,y1:70,y2:130},I[219200]=A["TP.WRECK, NON DANGEROUS"],R[219200]={x1:40,x2:160,y1:70,y2:130},I[240601]=A["TP.POINT/SINGLE TARGET"],I[240602]=A["TP.NUCLEAR TARGET"],I[240603]=A["TP.TARGETRECORDED (AEGIS ONLY)"],R[240603]={x1:0,x2:200,y1:50,y2:150},I[240900]=A["TP.FIRE SUPPORT STATION"],R[240900]={x1:50,x2:200,y1:50,y2:150},I[250100]=A["TP.FIRING POINT"],R[250100]={x1:60,x2:140,y1:-60},I[250200]=A["TP.HIDE POINT"],R[250200]={x1:60,x2:140,y1:-60},I[250300]=A["TP.LAUNCH POINT"],R[250300]={x1:60,x2:140,y1:-60},I[250400]=A["TP.RELOAD POINT"],R[250400]={x1:60,x2:140,y1:-60},I[250500]=A["TP.SURVEY CONTROL POINT"],R[250500]={x1:60,x2:140,y1:-60},I[250600]=A["TP.KNOWN POINT"],I[270701]=A["TP.MINEFIELD, STATIC"],R[270701]={x1:25,x2:175,y1:65,y2:145},I[280100]=A.TODO,I[280200]=A["TP.ANTIPERSONNEL (AP) MINES"],I[280201]=A["TP.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS"],R[280201]={x1:40,x2:180,y1:40,y2:150},I[280300]=A["TP.ANTITANK MINE (AT)"],I[280400]=A["TP.(AT) ANTIHANDLING DEVICE"],R[280400]={x1:60,x2:140,y1:40,y2:195},I[280500]=A["TP.WIDE AREA MINES"],I[280600]=A["TP.UNSPECIFIED MINE"],I[280700]=A["TP.BOOBY TRAP"],I[280800]=A["TP.ENGINEER REGULATING POINT"],R[280800]={x1:60,x2:140,y1:-60},I[280900]=A["TP.EARTHWORK/FORTIFICATION"],I[281e3]=A["TP.SURFACE SHELTER"],I[281100]=A["TP.UNDERGROUND SHELTER"],I[281200]=A["TP.FORT"],I[281300]=A["TP.CHEMICAL EVENT"],R[281300]={x1:25,x2:175,y1:-10},I[281301]=A["TP.CHEMICAL – TOXIC INDUSTRIAL MATERIAL"],R[281301]={x1:25,x2:175,y1:-10},I[281400]=A["TP.BIOLOGICAL EVENT"],R[281400]={x1:25,x2:175,y1:-10},I[281401]=A["TP.BIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"],R[281401]={x1:25,x2:175,y1:-10},I[281500]=A["TP.NUCLEAR EVENT"],R[281500]={x1:25,x2:175,y1:-10},I[281600]=A["TP.NUCLEAR EVENT"],R[281600]={x1:25,x2:175,y1:-10},I[281700]=A["TP.RADIOLOGICAL EVENT"],R[281700]={x1:25,x2:175,y1:-10},I[281701]=A["TP.RADIOLOGICAL – TOXIC INDUSTRIAL MATERIAL"],R[281701]={x1:25,x2:175,y1:-10},I[281800]=A["TP.DECON SITE/POINT"],R[281800]={x1:60,x2:140,y1:-60},I[281801]=A["TP.ALTERNATE DECON SITE/POINT"],R[281801]={x1:60,x2:140,y1:-60},I[281802]=A["TP.DECON SITE/POINT (EQUIPMENT)"],R[281802]={x1:60,x2:140,y1:-60},I[281803]=A["TP.DECON SITE/POINT (TROOPS)"],R[281803]={x1:60,x2:140,y1:-60},I[281804]=A["TP.DECON SITE/POINT (EQUIPMENT AND TROOPS)"],R[281804]={x1:60,x2:140,y1:-60},I[281805]=A["TP.DECON SITE/POINT (OPERATIONAL DECONTAMINATION)"],R[281805]={x1:60,x2:140,y1:-60},I[281806]=A["TP.DECON SITE/POINT (THOROUGH DECONTAMINATION)"],R[281806]={x1:60,x2:140,y1:-60},I[281807]=A["TP.MAIN EQUIPMENT DECONTAMINATION POINT/SITE"],R[281807]={x1:60,x2:140,y1:-60},I[281808]=A["TP.FORWARD TROOP DECONTAMINATION POINT/SITE"],R[281808]={x1:60,x2:140,y1:-60},I[281809]=A["TP.WOUNDED PERSONNEL DECONTAMINATION SITE"],R[281809]={x1:60,x2:140,y1:-60},I[281901]=A["TP.FIXED AND PREFABRICATED"],R[281901]={x1:60,x2:140,y1:30},I[281902]=A["TP.TETRAHEDRONS"],R[281902]={x1:60,x2:140,y1:30},I[281903]=A["TP.TETRAHEDRONS MOVABLE"],R[281903]={x1:60,x2:140,y1:30},I[282001]=A["TP.TOWER LOW"],R[282001]={x1:50,x2:150,y1:30,y2:120},I[282002]=A["TP.TOWER HIGH"],R[282002]={x1:50,x2:150,y1:30,y2:120},I[320100]=A["TP.AMBULANCE EXCHANGE POINT"],R[320100]={x1:60,x2:140,y1:-60},I[320101]=A["TP.AMBULANCE EXCHANGE POINT"],R[320101]={x1:60,x2:140,y1:-60},I[320102]=A["TP.AMBULANCE CONTROL POINT"],R[320102]={x1:60,x2:140,y1:-60},I[320103]=A["TP.AMBULANCE LOAD POINT"],R[320103]={x1:60,x2:140,y1:-60},I[320104]=A["TP.AMBULANCE RELAY POINT"],R[320104]={x1:60,x2:140,y1:-60},I[320200]=A["TP.AMMUNITION SUPPLY POINT (ASP)"],R[320200]={x1:60,x2:140,y1:-60},I[320300]=A["TP.AMMUNITION TRANSFER POINT (ATP)"],R[320300]={x1:60,x2:140,y1:-60},I[320400]=A["TP.CANNIBALIZATION POINT"],R[320400]={x1:60,x2:140,y1:-60},I[320500]=A["TP.CASUALTY COLLECTION POINT"],R[320500]={x1:60,x2:140,y1:-60},I[320600]=A["TP.CIVILIAN COLLECTION POINT"],R[320600]={x1:60,x2:140,y1:-60},I[320700]=A["TP.DETAINEE COLLECTION POINT"],R[320700]={x1:60,x2:140,y1:-60},I[320800]=A["TP.EPW COLLECTION POINT"],R[320800]={x1:60,x2:140,y1:-60},I[320900]=A["TP.LOGISTICS RELEASE POINT"],R[320900]={x1:60,x2:140,y1:-60},I[321e3]=A["TP.MAINTENANCE COLLECTION POINT"],R[321e3]={x1:60,x2:140,y1:-60},I[321100]=A["TP.MEDICAL EVACUATION (MEDEVAC) PICKUP POINT"],R[321100]={x1:60,x2:140,y1:-60},I[321200]=A["TP.REARM, REFUEL AND RESUPPLY POINT"],R[321200]={x1:60,x2:140,y1:-60},I[321300]=A["TP.REFUEL ON THE MOVE POINT"],R[321300]={x1:60,x2:140,y1:-60},I[321400]=A["TP.TRAFFIC CONTROL POST"],R[321400]={x1:60,x2:140,y1:-60},I[321500]=A["TP.TRAILER TRANSFER POINT"],R[321500]={x1:60,x2:140,y1:-60},I[321600]=A["TP.UNIT MAINTENANCE COLLECTION POINT"],R[321600]={x1:60,x2:140,y1:-60},I[321700]=A["TP.SUPPLY POINT"],R[321700]={x1:60,x2:140,y1:-60},I[321701]=A["TP.NATO CLASS I"],R[321701]={x1:60,x2:140,y1:-60},I[321702]=A["TP.NATO CLASS II"],R[321702]={x1:60,x2:140,y1:-60},I[321703]=A["TP.NATO CLASS III"],R[321703]={x1:60,x2:140,y1:-60},I[321704]=A["TP.NATO CLASS IV"],R[321704]={x1:60,x2:140,y1:-60},I[321705]=A["TP.NATO CLASS V"],R[321705]={x1:60,x2:140,y1:-60},I[321706]=A["TP.SUPPLY POINT"],R[321706]={x1:60,x2:140,y1:-60},I[321707]=A["TP.SP CLASS I"],R[321707]={x1:60,x2:140,y1:-60},I[321708]=A["TP.SP CLASS II"],R[321708]={x1:60,x2:140,y1:-60},I[321709]=A["TP.SP CLASS III"],R[321709]={x1:60,x2:140,y1:-60},I[321710]=A["TP.SP CLASS IV"],R[321710]={x1:60,x2:140,y1:-60},I[321711]=A["TP.SP CLASS V"],R[321711]={x1:60,x2:140,y1:-60},I[321712]=A["TP.SP CLASS VI"],R[321712]={x1:60,x2:140,y1:-60},I[321713]=A["TP.SP CLASS VII"],R[321713]={x1:60,x2:140,y1:-60},I[321714]=A["TP.SP CLASS VIII"],R[321714]={x1:60,x2:140,y1:-60},I[321715]=A["TP.SP CLASS IX"],R[321715]={x1:60,x2:140,y1:-60},I[321716]=A["TP.SP CLASS X"],R[321716]={x1:60,x2:140,y1:-60},I[321800]=A["TP.MEDICAL SUPPLY POINT"],R[321800]={x1:60,x2:140,y1:-60},I[340900]=A["TP.DESTROY"],R[340900]={x1:0,x2:200,y1:40,y2:160},I[341400]=A["TP.INTERDICT"],R[341400]={x1:0,x2:200,y1:40,y2:160},I[341600]=A["TP.NEUTRALIZE"],R[341600]={x1:0,x2:200,y1:40,y2:160},I[342800]=A["TP.SUPPRESS"],R[342800]={x1:0,x2:200,y1:40,y2:160},I[350101]=A["MAN MADE SPACE DEBRIS SMALL"],I[350102]=A["MAN MADE SPACE DEBRIS MEDIUM"],I[350103]=A["MAN MADE SPACE DEBRIS BIG"],I[350201]=A["NATURAL SPACE DEBRIS SMALL"],I[350202]=A["NATURAL SPACE DEBRIS MEDIUM"],I[350203]=A["NATURAL SPACE DEBRIS BIG"],t[13]=[A["TP.M1.UNSPECIFIED"]],t[14]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[15]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[16]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE 3"]],t[17]=[A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[18]=[A["TP.M1.WIDE AREA ANTITANK MINE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[19]=[A["TP.M1.MINE CLUSTER 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.MINE CLUSTER 3"]],t[20]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[21]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.ANTIPERSONNEL MINE 2"],A["TP.M1.ANTITANK MINE 3"]],t[22]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[23]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[24]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTIPERSONNEL MINE 3"]],t[25]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[26]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[27]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[28]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 3"]],t[29]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.ANTITANK MINE 3"]],t[30]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE 3"]],t[31]=[A["TP.M1.ANTITANK MINE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTITANK MINE 3"]],t[32]=[A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[33]=[A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[34]=[A["TP.M1.WIDE AREA ANTITANK MINE 1"],A["TP.M1.MINE CLUSTER 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[35]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTITANK MINE 3"]],t[36]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[37]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[38]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 2"],A["TP.M1.MINE CLUSTER 3"]],t[39]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[40]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[41]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]],t[42]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[43]=[A["TP.M1.ANTIPERSONNEL MINE 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.MINE CLUSTER 3"]],t[44]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]],t[45]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 3"]],t[46]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[47]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]],t[48]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.WIDE AREA ANTITANK MINE 3"]],t[49]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.ANTITANK MINE WITH ANTIHANDLING DEVICE 2"],A["TP.M1.MINE CLUSTER 3"]],t[50]=[A["TP.M1.ANTIPERSONNEL MINE WITH DIRECTIONAL EFFECTS 1"],A["TP.M1.WIDE AREA ANTITANK MINE 2"],A["TP.M1.MINE CLUSTER 3"]])}},EI=[Q,g,b,K,X,w,_,J,Z,q,j,$,II,{type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"27"==e&&(I[11e4]=[],I[110100]=[],I[110101]=[A["GR.IC.FF.INFANTRY DISMOUNTED"]],I[110102]=[A["GR.IC.FF.MEDICAL"]],I[110103]=[A["GR.IC.FF.RECONNAISSANCE DISMOUNTED"]],I[110104]=[A["GR.IC.FF.SIGNAL DISMOUNTED"]],I[110200]=[],I[110201]=[A["GR.IC.EXPLOSIVE ORDNANCE DISPOSAL"]],I[110202]=[A["GR.IC.FIELD ARTILLERY OBSERVER"]],I[110203]=[A["GR.IC.JOINT FIRE SUPPORT"]],I[110204]=[A["GR.IC.LIAISON"]],I[110205]=[A["GR.IC.MESSENGER"]],I[110206]=[A["GR.IC.MILITARY POLICE"]],I[110207]=[A["GR.IC.OBSERVER/OBSERVATION"]],I[110208]=[A["GR.IC.SECURITY"]],I[110209]=[A["GR.IC.SNIPER"]],I[110210]=[A["GR.IC.SPECIAL OPERATIONS FORCES"]],I[110300]=[],I[110301]=[A["GR.EQ.RIFLE"]],I[110302]=[A["GR.EQ.RIFLE"],A["GR.EQ.SHORT RANGE"]],I[110303]=[A["GR.EQ.RIFLE"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110304]=[A["GR.EQ.RIFLE"],A["GR.EQ.LONG RANGE"]],I[110305]=[A["GR.EQ.MACHINE GUN"]],I[110306]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.SHORT RANGE"]],I[110307]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.INTERMEDIATE RANGE"]],I[110308]=[A["GR.EQ.MACHINE GUN"],A["GR.EQ.LONG RANGE"]],I[110309]=[A["GR.EQ.GRENADE LAUNCHER"]],I[110310]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.SHORT RANGE"])],I[110311]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.INTERMEDIATE RANGE"])],I[110312]=[A["GR.EQ.GRENADE LAUNCHER"],s._translate(0,20,A["GR.EQ.LONG RANGE"])],I[110313]=[A["GR.EQ.FLAME THROWER"]],I[110314]=[A["GR.EQ.MORTAR"]],I[110315]=[A["GR.EQ.SINGLE ROCKET LAUNCHER"]],I[110316]=[A["GR.EQ.ANTITANK ROCKET LAUNCHER"]],I[110400]=[],I[110401]=[A["GR.EQ.NON-LETHAL WEAPON"]],I[110402]=A["GR.EQ.NON-LETHAL GRENADE LAUNCHER"],I[110403]=[A["GR.EQ.TASER"]],I[12e4]=[],I[120100]=[],I[120101]=[A["GR.IC.LAW ENFORCEMENT"]],t["01"]=[A["GR.M1.CLOSE PROTECTION"]],t["02"]=[A["GR.M1.CROWD AND RIOT CONTROL"]],t["03"]=[A["GR.M1.EXPLOSIVE ORDNANCE DISPOSAL"]],t["04"]=[A["GR.M1.SECURITY"]],t["05"]=[A["GR.M1.SNIPER"]],t["06"]=[A["GR.M1.SPECIAL WEAPONS AND TACTICS"]],t["07"]=[A["ST.M1.NONGOVERNMENTAL ORGANIZATION (NGO)"]],t["08"]=[A["GR.M1.MULTINATIONAL"]],t["09"]=[A["GR.M1.MULTINATIONAL SPECIALIZED UNIT"]],t[10]=[A["ST.M1.GOVERNMENT ORGANIZATION"]],t[11]=[A["GR.M1.VIDEO IMAGERY"]],t[12]=[A["GR.M1.J1"]],t[13]=[A["GR.M1.J2"]],t[14]=[A["GR.M1.J3"]],t[15]=[A["GR.M1.J4"]],t[16]=[A["GR.M1.J5"]],t[17]=[A["GR.M1.J6"]],t[18]=[A["GR.M1.J7"]],t[19]=[A["GR.M1.J8"]],t[20]=[A["GR.M1.J9"]],t[21]=[A["GR.M1.OF-1"]],t[22]=[A["GR.M1.OF-2"]],t[23]=[A["GR.M1.OF-3"]],t[24]=[A["GR.M1.OF-4"]],t[25]=[A["GR.M1.OF-5"]],t[26]=[A["GR.M1.OF-6"]],t[27]=[A["GR.M1.OF-7"]],t[28]=[A["GR.M1.OF-8"]],t[29]=[A["GR.M1.OF-9"]],t[30]=[A["GR.M1.OF-10"]],t[31]=[A["GR.M1.OF-D"]],t[32]=[A["GR.M1.OR-1"]],t[33]=[A["GR.M1.OR-2"]],t[34]=[A["GR.M1.OR-3"]],t[35]=[A["GR.M1.OR-4"]],t[36]=[A["GR.M1.OR-5"]],t[37]=[A["GR.M1.OR-6"]],t[38]=[A["GR.M1.OR-7"]],t[39]=[A["GR.M1.OR-8"]],t[40]=[A["GR.M1.OR-9"]],t[41]=[A["GR.M1.WO-1"]],t[42]=[A["GR.M1.WO-2"]],t[43]=[A["GR.M1.WO-3"]],t[44]=[A["GR.M1.WO-4"]],t[45]=[A["GR.M1.WO-5"]],t[46]=[A["GR.M1.INDIVIDUAL"]],t[47]=[A["GR.M1.TEAM"]],t[48]=[A["GR.M1.SQUAD"]],t[49]=[A["GR.M1.SECTION"]],t[50]=[A["GR.M1.PLATOON"]],t[51]=[A["GR.M1.COMPANY"]],t[52]=[A["GR.M1.BATTALION"]],t[53]=[A["GR.M1.REGIMENT"]],t[54]=[A["GR.M1.BRIGADE"]],t[55]=[A["GR.M1.DIVISION"]],E["01"]=[A["GR.M2.AIRBORNE"]],E["02"]=[A["GR.M2.BICYCLE EQUIPPED"]],E["03"]=[A["GR.M2.DEMOLITION"]],E["04"]=[A["GR.M2.J1"]],E["05"]=[A["GR.M2.J2"]],E["06"]=[A["GR.M2.J3"]],E["07"]=[A["GR.M2.J4"]],E["08"]=[A["GR.M2.J5"]],E["09"]=[A["GR.M2.J6"]],E[10]=[A["GR.M2.J7"]],E[11]=[A["GR.M2.J8"]],E[12]=[A["GR.M2.J9"]],E[13]=[A["GR.M2.MOUNTAIN"]],E[14]=[A["GR.M2.OF-1"]],E[15]=[A["GR.M2.OF-2"]],E[16]=[A["GR.M2.OF-3"]],E[17]=[A["GR.M2.OF-4"]],E[18]=[A["GR.M2.OF-5"]],E[19]=[A["GR.M2.OF-6"]],E[20]=[A["GR.M2.OF-7"]],E[21]=[A["GR.M2.OF-8"]],E[22]=[A["GR.M2.OF-9"]],E[23]=[A["GR.M2.OF-10"]],E[24]=[A["GR.M2.OF-D"]],E[25]=[A["GR.M2.OR-1"]],E[26]=[A["GR.M2.OR-2"]],E[27]=[A["GR.M2.OR-3"]],E[28]=[A["GR.M2.OR-4"]],E[29]=[A["GR.M2.OR-5"]],E[30]=[A["GR.M2.OR-6"]],E[31]=[A["GR.M2.OR-7"]],E[32]=[A["GR.M2.OR-8"]],E[33]=[A["GR.M2.OR-9"]],E[34]=[A["GR.M2.WO-1"]],E[35]=[A["GR.M2.WO-2"]],E[36]=[A["GR.M2.WO-3"]],E[37]=[A["GR.M2.WO-4"]],E[38]=[A["GR.M2.WO-5"]],E[39]=[A["GR.M2.SKI"]])}},tI],RI=[Q,g,b,K,X,w,_,J,Z,q,j,$,II,{type:"number",getMetadata:u,getIcons:v,iconParts:c,icons:function(I,t,E,R,e,A,C){"60"==e&&(I[11e4]=[],I[110100]=[A["CY.IC.COMBAT MISSION TEAM"]],I[110200]=[A["CY.IC.NATIONAL MISSION TEAM"]],I[110300]=[A["CY.IC.CYBER PROTECTION TEAM"]],I[110400]=[A["CY.IC.NATION STATE CYBER THREAT ACTOR"]],I[110500]=[A["CY.IC.NON NATION STATE CYBER THREAT ACTOR"]])}},tI];return s.addIcons(B),s.addIcons(Y),s.addIcons(W),s.addIcons(EI),s.addIcons(RI),s.Path2D=function(I,t){var E,R,e,A,C,T,S,N,O,G,o;I.beginPath();var M=t.match(/([MCLHV][^MCLHV]*)/gi);for(S=0;S<M.length;S++){if("M"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),O=E=parseFloat(o[0]),G=R=parseFloat(o[1]),I.moveTo(E,R),N=2;N<o.length;N+=2)E=parseFloat(o[N]),R=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&(I.closePath(),E=O,R=G)}if("m"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),O=E=E?E+parseFloat(o[0]):parseFloat(o[0]),G=R=R?R+parseFloat(o[1]):parseFloat(o[1]),I.moveTo(E,R),N=2;N<o.length;N+=2)E+=parseFloat(o[N]),R+=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&(I.closePath(),E=O,R=G)}if("L"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=2)E=parseFloat(o[N]),R=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&(I.closePath(),E=O,R=G)}if("l"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=2)E+=parseFloat(o[N]),R+=parseFloat(o[N+1]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("C"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=6)e=parseFloat(o[N]),A=parseFloat(o[N+1]),C=parseFloat(o[N+2]),T=parseFloat(o[N+3]),E=parseFloat(o[N+4]),R=parseFloat(o[N+5]),I.bezierCurveTo(e,A,C,T,E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("c"==M[S].charAt(0)){for(o=M[S].match(/[-\d].*[\d]/)[0].split(/[\s,]/g),N=0;N<o.length;N+=6)e=E+parseFloat(o[N]),A=R+parseFloat(o[N+1]),C=E+parseFloat(o[N+2]),T=R+parseFloat(o[N+3]),E+=parseFloat(o[N+4]),R+=parseFloat(o[N+5]),I.bezierCurveTo(e,A,C,T,E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("H"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)E=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("h"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)E+=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("V"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)R=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}if("v"==M[S].charAt(0)){for(o=M[S].match(/[-\d](.*[\d])?/)[0].split(/[\s,]/g),N=0;N<o.length;N++)R+=parseFloat(o[N]),I.lineTo(E,R);"Z"==M[S].replace(/\s/g,"").substr(-1,1).toUpperCase()&&I.closePath()}}},s});
|
||
}).call(this)}).call(this,require('_process'))
|
||
|
||
},{"_process":3}],3:[function(require,module,exports){
|
||
// shim for using process in browser
|
||
var process = module.exports = {};
|
||
|
||
// cached from whatever global is present so that test runners that stub it
|
||
// don't break things. But we need to wrap it in a try catch in case it is
|
||
// wrapped in strict mode code which doesn't define any globals. It's inside a
|
||
// function because try/catches deoptimize in certain engines.
|
||
|
||
var cachedSetTimeout;
|
||
var cachedClearTimeout;
|
||
|
||
function defaultSetTimout() {
|
||
throw new Error('setTimeout has not been defined');
|
||
}
|
||
function defaultClearTimeout () {
|
||
throw new Error('clearTimeout has not been defined');
|
||
}
|
||
(function () {
|
||
try {
|
||
if (typeof setTimeout === 'function') {
|
||
cachedSetTimeout = setTimeout;
|
||
} else {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
} catch (e) {
|
||
cachedSetTimeout = defaultSetTimout;
|
||
}
|
||
try {
|
||
if (typeof clearTimeout === 'function') {
|
||
cachedClearTimeout = clearTimeout;
|
||
} else {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} catch (e) {
|
||
cachedClearTimeout = defaultClearTimeout;
|
||
}
|
||
} ())
|
||
function runTimeout(fun) {
|
||
if (cachedSetTimeout === setTimeout) {
|
||
//normal enviroments in sane situations
|
||
return setTimeout(fun, 0);
|
||
}
|
||
// if setTimeout wasn't available but was latter defined
|
||
if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
|
||
cachedSetTimeout = setTimeout;
|
||
return setTimeout(fun, 0);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedSetTimeout(fun, 0);
|
||
} catch(e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedSetTimeout.call(null, fun, 0);
|
||
} catch(e){
|
||
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
|
||
return cachedSetTimeout.call(this, fun, 0);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
function runClearTimeout(marker) {
|
||
if (cachedClearTimeout === clearTimeout) {
|
||
//normal enviroments in sane situations
|
||
return clearTimeout(marker);
|
||
}
|
||
// if clearTimeout wasn't available but was latter defined
|
||
if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
|
||
cachedClearTimeout = clearTimeout;
|
||
return clearTimeout(marker);
|
||
}
|
||
try {
|
||
// when when somebody has screwed with setTimeout but no I.E. maddness
|
||
return cachedClearTimeout(marker);
|
||
} catch (e){
|
||
try {
|
||
// When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
|
||
return cachedClearTimeout.call(null, marker);
|
||
} catch (e){
|
||
// same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
|
||
// Some versions of I.E. have different rules for clearTimeout vs setTimeout
|
||
return cachedClearTimeout.call(this, marker);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
var queue = [];
|
||
var draining = false;
|
||
var currentQueue;
|
||
var queueIndex = -1;
|
||
|
||
function cleanUpNextTick() {
|
||
if (!draining || !currentQueue) {
|
||
return;
|
||
}
|
||
draining = false;
|
||
if (currentQueue.length) {
|
||
queue = currentQueue.concat(queue);
|
||
} else {
|
||
queueIndex = -1;
|
||
}
|
||
if (queue.length) {
|
||
drainQueue();
|
||
}
|
||
}
|
||
|
||
function drainQueue() {
|
||
if (draining) {
|
||
return;
|
||
}
|
||
var timeout = runTimeout(cleanUpNextTick);
|
||
draining = true;
|
||
|
||
var len = queue.length;
|
||
while(len) {
|
||
currentQueue = queue;
|
||
queue = [];
|
||
while (++queueIndex < len) {
|
||
if (currentQueue) {
|
||
currentQueue[queueIndex].run();
|
||
}
|
||
}
|
||
queueIndex = -1;
|
||
len = queue.length;
|
||
}
|
||
currentQueue = null;
|
||
draining = false;
|
||
runClearTimeout(timeout);
|
||
}
|
||
|
||
process.nextTick = function (fun) {
|
||
var args = new Array(arguments.length - 1);
|
||
if (arguments.length > 1) {
|
||
for (var i = 1; i < arguments.length; i++) {
|
||
args[i - 1] = arguments[i];
|
||
}
|
||
}
|
||
queue.push(new Item(fun, args));
|
||
if (queue.length === 1 && !draining) {
|
||
runTimeout(drainQueue);
|
||
}
|
||
};
|
||
|
||
// v8 likes predictible objects
|
||
function Item(fun, array) {
|
||
this.fun = fun;
|
||
this.array = array;
|
||
}
|
||
Item.prototype.run = function () {
|
||
this.fun.apply(null, this.array);
|
||
};
|
||
process.title = 'browser';
|
||
process.browser = true;
|
||
process.env = {};
|
||
process.argv = [];
|
||
process.version = ''; // empty string to avoid regexp issues
|
||
process.versions = {};
|
||
|
||
function noop() {}
|
||
|
||
process.on = noop;
|
||
process.addListener = noop;
|
||
process.once = noop;
|
||
process.off = noop;
|
||
process.removeListener = noop;
|
||
process.removeAllListeners = noop;
|
||
process.emit = noop;
|
||
process.prependListener = noop;
|
||
process.prependOnceListener = noop;
|
||
|
||
process.listeners = function (name) { return [] }
|
||
|
||
process.binding = function (name) {
|
||
throw new Error('process.binding is not supported');
|
||
};
|
||
|
||
process.cwd = function () { return '/' };
|
||
process.chdir = function (dir) {
|
||
throw new Error('process.chdir is not supported');
|
||
};
|
||
process.umask = function() { return 0; };
|
||
|
||
},{}],4:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Dropdown_container, _Dropdown_options, _Dropdown_open, _Dropdown_content, _Dropdown_callback;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Dropdown = void 0;
|
||
class Dropdown {
|
||
constructor(ID, options, callback) {
|
||
var _a;
|
||
_Dropdown_container.set(this, void 0);
|
||
_Dropdown_options.set(this, void 0);
|
||
_Dropdown_open.set(this, void 0);
|
||
_Dropdown_content.set(this, void 0);
|
||
_Dropdown_callback.set(this, void 0);
|
||
__classPrivateFieldSet(this, _Dropdown_container, document.getElementById(ID), "f");
|
||
__classPrivateFieldSet(this, _Dropdown_options, options, "f");
|
||
__classPrivateFieldSet(this, _Dropdown_callback, callback, "f");
|
||
this.close();
|
||
(_a = __classPrivateFieldGet(this, _Dropdown_container, "f")) === null || _a === void 0 ? void 0 : _a.addEventListener("click", () => {
|
||
__classPrivateFieldGet(this, _Dropdown_open, "f") ? this.close() : this.open();
|
||
});
|
||
}
|
||
open() {
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null) {
|
||
__classPrivateFieldSet(this, _Dropdown_open, true, "f");
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").classList.add("olympus-dropdown-open");
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").classList.remove("olympus-dropdown-closed");
|
||
__classPrivateFieldSet(this, _Dropdown_content, document.createElement("div"), "f");
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").classList.add("olympus-dropdown-content");
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.width = (__classPrivateFieldGet(this, _Dropdown_container, "f").offsetWidth - __classPrivateFieldGet(this, _Dropdown_container, "f").offsetHeight) + "px";
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.left = __classPrivateFieldGet(this, _Dropdown_container, "f").offsetLeft + "px";
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.top = __classPrivateFieldGet(this, _Dropdown_container, "f").offsetTop + __classPrivateFieldGet(this, _Dropdown_container, "f").offsetHeight + "px";
|
||
console.log(__classPrivateFieldGet(this, _Dropdown_container, "f"));
|
||
document.body.appendChild(__classPrivateFieldGet(this, _Dropdown_content, "f"));
|
||
var height = 2;
|
||
for (let optionID in __classPrivateFieldGet(this, _Dropdown_options, "f")) {
|
||
var node = document.createElement("div");
|
||
node.classList.add("olympus-dropdown-element");
|
||
node.appendChild(document.createTextNode(__classPrivateFieldGet(this, _Dropdown_options, "f")[optionID]));
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").appendChild(node);
|
||
height += node.offsetHeight + 2;
|
||
node.addEventListener('click', () => {
|
||
this.close();
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null)
|
||
__classPrivateFieldGet(this, _Dropdown_container, "f").innerHTML = __classPrivateFieldGet(this, _Dropdown_options, "f")[optionID];
|
||
if (__classPrivateFieldGet(this, _Dropdown_callback, "f") != null)
|
||
__classPrivateFieldGet(this, _Dropdown_callback, "f").call(this, __classPrivateFieldGet(this, _Dropdown_options, "f")[optionID]);
|
||
});
|
||
}
|
||
__classPrivateFieldGet(this, _Dropdown_content, "f").style.height = height + "px";
|
||
}
|
||
}
|
||
close() {
|
||
var _a, _b;
|
||
if (__classPrivateFieldGet(this, _Dropdown_container, "f") != null) {
|
||
__classPrivateFieldSet(this, _Dropdown_open, false, "f");
|
||
(_a = __classPrivateFieldGet(this, _Dropdown_container, "f")) === null || _a === void 0 ? void 0 : _a.classList.remove("olympus-dropdown-open");
|
||
(_b = __classPrivateFieldGet(this, _Dropdown_container, "f")) === null || _b === void 0 ? void 0 : _b.classList.add("olympus-dropdown-closed");
|
||
if (__classPrivateFieldGet(this, _Dropdown_content, "f") != null)
|
||
document.body.removeChild(__classPrivateFieldGet(this, _Dropdown_content, "f"));
|
||
}
|
||
}
|
||
}
|
||
exports.Dropdown = Dropdown;
|
||
_Dropdown_container = new WeakMap(), _Dropdown_options = new WeakMap(), _Dropdown_open = new WeakMap(), _Dropdown_content = new WeakMap(), _Dropdown_callback = new WeakMap();
|
||
},{}],5:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _SelectionScroll_container, _SelectionScroll_display;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectionScroll = void 0;
|
||
class SelectionScroll {
|
||
constructor(id) {
|
||
_SelectionScroll_container.set(this, void 0);
|
||
_SelectionScroll_display.set(this, void 0);
|
||
__classPrivateFieldSet(this, _SelectionScroll_container, document.getElementById(id), "f");
|
||
__classPrivateFieldSet(this, _SelectionScroll_display, '', "f");
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null) {
|
||
__classPrivateFieldSet(this, _SelectionScroll_display, __classPrivateFieldGet(this, _SelectionScroll_container, "f").style.display, "f");
|
||
this.hide();
|
||
}
|
||
}
|
||
show(x, y, options, callback) {
|
||
/* Hide to remove buttons, if present */
|
||
this.hide();
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null && options.length > 1) {
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.display = __classPrivateFieldGet(this, _SelectionScroll_display, "f");
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.left = x - 110 + "px";
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.top = y - 110 + "px";
|
||
for (let optionID in options) {
|
||
var node = document.createElement("div");
|
||
node.classList.add("olympus-selection-scroll-element");
|
||
node.appendChild(document.createTextNode(options[optionID]));
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").appendChild(node);
|
||
node.addEventListener('click', () => callback(options[optionID]));
|
||
}
|
||
}
|
||
}
|
||
hide() {
|
||
if (__classPrivateFieldGet(this, _SelectionScroll_container, "f") != null) {
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").style.display = "none";
|
||
var buttons = __classPrivateFieldGet(this, _SelectionScroll_container, "f").querySelectorAll(".olympus-selection-scroll-element");
|
||
for (let child of buttons) {
|
||
__classPrivateFieldGet(this, _SelectionScroll_container, "f").removeChild(child);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
exports.SelectionScroll = SelectionScroll;
|
||
_SelectionScroll_container = new WeakMap(), _SelectionScroll_display = new WeakMap();
|
||
},{}],6:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _SelectionWheel_instances, _SelectionWheel_container, _SelectionWheel_display, _SelectionWheel_onSwitch;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.SelectionWheel = void 0;
|
||
const __1 = require("..");
|
||
const utils_1 = require("../other/utils");
|
||
class SelectionWheel {
|
||
constructor(id) {
|
||
var _a;
|
||
_SelectionWheel_instances.add(this);
|
||
_SelectionWheel_container.set(this, void 0);
|
||
_SelectionWheel_display.set(this, void 0);
|
||
__classPrivateFieldSet(this, _SelectionWheel_container, document.getElementById(id), "f");
|
||
__classPrivateFieldSet(this, _SelectionWheel_display, '', "f");
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
(_a = __classPrivateFieldGet(this, _SelectionWheel_container, "f").querySelector("#coalition-switch")) === null || _a === void 0 ? void 0 : _a.addEventListener('change', (e) => __classPrivateFieldGet(this, _SelectionWheel_instances, "m", _SelectionWheel_onSwitch).call(this, e));
|
||
__classPrivateFieldSet(this, _SelectionWheel_display, __classPrivateFieldGet(this, _SelectionWheel_container, "f").style.display, "f");
|
||
this.hide();
|
||
}
|
||
}
|
||
show(x, y, options, showCoalition) {
|
||
/* Hide to remove buttons, if present */
|
||
this.hide();
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.display = __classPrivateFieldGet(this, _SelectionWheel_display, "f");
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.left = x - 110 + "px";
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.top = y - 110 + "px";
|
||
var angularSize = 360 / options.length;
|
||
var r = 80;
|
||
/* Create the buttons */
|
||
for (let id in options) {
|
||
var button = document.createElement("div");
|
||
button.classList.add("selection-wheel-button");
|
||
button.style.left = x - 25 + "px";
|
||
button.style.top = y - 25 + "px";
|
||
button.addEventListener('click', (e) => options[id].callback(e));
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").appendChild(button);
|
||
var angle = parseInt(id) * angularSize;
|
||
button.style.opacity = "1";
|
||
button.style.left = x + r * Math.sin((0, utils_1.deg2rad)(angle)) - 25 + "px";
|
||
button.style.top = y - r * Math.cos((0, utils_1.deg2rad)(angle)) - 25 + "px";
|
||
var image = document.createElement("img");
|
||
image.classList.add("selection-wheel-image");
|
||
image.src = `images/buttons/${options[id].src}`;
|
||
image.title = options[id].tooltip;
|
||
if ('tint' in options[id]) {
|
||
button.style.setProperty('background-color', options[id].tint);
|
||
image.style.opacity = "0";
|
||
}
|
||
button.appendChild(image);
|
||
}
|
||
/* Hide the coalition switch if required */
|
||
var switchContainer = __classPrivateFieldGet(this, _SelectionWheel_container, "f").querySelector("#coalition-switch-container");
|
||
if (showCoalition == false) {
|
||
switchContainer.style.display = "none";
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--neutral-coalition-color"));
|
||
}
|
||
else {
|
||
switchContainer.style.display = "block";
|
||
if ((0, __1.getActiveCoalition)() == "blue")
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--blue-coalition-color"));
|
||
else
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--red-coalition-color"));
|
||
}
|
||
}
|
||
}
|
||
hide() {
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").style.display = "none";
|
||
var buttons = __classPrivateFieldGet(this, _SelectionWheel_container, "f").querySelectorAll(".selection-wheel-button");
|
||
for (let child of buttons) {
|
||
__classPrivateFieldGet(this, _SelectionWheel_container, "f").removeChild(child);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
exports.SelectionWheel = SelectionWheel;
|
||
_SelectionWheel_container = new WeakMap(), _SelectionWheel_display = new WeakMap(), _SelectionWheel_instances = new WeakSet(), _SelectionWheel_onSwitch = function _SelectionWheel_onSwitch(e) {
|
||
if (__classPrivateFieldGet(this, _SelectionWheel_container, "f") != null) {
|
||
if (e.currentTarget.checked) {
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--red-coalition-color"));
|
||
(0, __1.setActiveCoalition)("red");
|
||
}
|
||
else {
|
||
document.documentElement.style.setProperty('--active-coalition-color', getComputedStyle(__classPrivateFieldGet(this, _SelectionWheel_container, "f")).getPropertyValue("--blue-coalition-color"));
|
||
(0, __1.setActiveCoalition)("blue");
|
||
}
|
||
}
|
||
};
|
||
},{"..":8,"../other/utils":10}],7:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.cloneUnit = exports.attackUnit = exports.spawnAircraft = exports.spawnGroundUnit = exports.spawnSmoke = exports.addDestination = exports.getDataFromDCS = void 0;
|
||
const __1 = require("..");
|
||
const utils_1 = require("../other/utils");
|
||
/* Edit here to change server address */
|
||
var RESTaddress = "http://localhost:30000/restdemo";
|
||
function getDataFromDCS(callback) {
|
||
/* Request the updated unit data from the server */
|
||
var xmlHttp = new XMLHttpRequest();
|
||
xmlHttp.open("GET", RESTaddress, true);
|
||
xmlHttp.onload = function (e) {
|
||
var data = JSON.parse(xmlHttp.responseText);
|
||
callback(data);
|
||
};
|
||
xmlHttp.onerror = function () {
|
||
console.error("An error occurred during the XMLHttpRequest");
|
||
};
|
||
xmlHttp.send(null);
|
||
}
|
||
exports.getDataFromDCS = getDataFromDCS;
|
||
function addDestination(ID, path) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => { };
|
||
var command = { "ID": ID, "path": path };
|
||
var data = { "setPath": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.addDestination = addDestination;
|
||
function spawnSmoke(color, latlng) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Added " + color + " smoke at " + (0, utils_1.ConvertDDToDMS)(latlng.lat, false) + " " + (0, utils_1.ConvertDDToDMS)(latlng.lng, true));
|
||
}
|
||
};
|
||
var command = { "color": color, "location": latlng };
|
||
var data = { "smoke": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.spawnSmoke = spawnSmoke;
|
||
function spawnGroundUnit(type, latlng, coalition) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Added " + coalition + " " + type + " at " + (0, utils_1.ConvertDDToDMS)(latlng.lat, false) + " " + (0, utils_1.ConvertDDToDMS)(latlng.lng, true));
|
||
}
|
||
};
|
||
var command = { "type": type, "location": latlng, "coalition": coalition };
|
||
var data = { "spawnGround": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.spawnGroundUnit = spawnGroundUnit;
|
||
function spawnAircraft(type, latlng, coalition, payloadName = "", airbaseName = "") {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Added " + coalition + " " + type + " at " + (0, utils_1.ConvertDDToDMS)(latlng.lat, false) + " " + (0, utils_1.ConvertDDToDMS)(latlng.lng, true));
|
||
}
|
||
};
|
||
var command = { "type": type, "location": latlng, "coalition": coalition, "payloadName": payloadName, "airbaseName": airbaseName };
|
||
var data = { "spawnAir": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.spawnAircraft = spawnAircraft;
|
||
function attackUnit(ID, targetID) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Unit " + (0, __1.getUnitsManager)().getUnitByID(ID).unitName + " attack " + (0, __1.getUnitsManager)().getUnitByID(targetID).unitName);
|
||
}
|
||
};
|
||
var command = { "ID": ID, "targetID": targetID };
|
||
var data = { "attackUnit": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.attackUnit = attackUnit;
|
||
function cloneUnit(ID) {
|
||
var xhr = new XMLHttpRequest();
|
||
xhr.open("PUT", RESTaddress);
|
||
xhr.setRequestHeader("Content-Type", "application/json");
|
||
xhr.onreadystatechange = () => {
|
||
if (xhr.readyState === 4) {
|
||
console.log("Unit " + (0, __1.getUnitsManager)().getUnitByID(ID).unitName + " cloned");
|
||
}
|
||
};
|
||
var command = { "ID": ID };
|
||
var data = { "cloneUnit": command };
|
||
xhr.send(JSON.stringify(data));
|
||
}
|
||
exports.cloneUnit = cloneUnit;
|
||
},{"..":8,"../other/utils":10}],8:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.getActiveCoalition = exports.setActiveCoalition = exports.getUnitInfoPanel = exports.getUnitsManager = exports.getSelectionScroll = exports.getSelectionWheel = exports.getMap = void 0;
|
||
const map_1 = require("./map/map");
|
||
const dcs_1 = require("./dcs/dcs");
|
||
const selectionwheel_1 = require("./controls/selectionwheel");
|
||
const unitsmanager_1 = require("./units/unitsmanager");
|
||
const unitinfopanel_1 = require("./panels/unitinfopanel");
|
||
const selectionscroll_1 = require("./controls/selectionscroll");
|
||
const dropdown_1 = require("./controls/dropdown");
|
||
var map;
|
||
var selectionWheel;
|
||
var selectionScroll;
|
||
var unitsManager;
|
||
var unitInfoPanel;
|
||
var activeCoalition;
|
||
var scenarioDropdown;
|
||
var mapSourceDropdown;
|
||
function setup() {
|
||
/* Initialize */
|
||
map = new map_1.Map('map-container');
|
||
selectionWheel = new selectionwheel_1.SelectionWheel("selection-wheel");
|
||
selectionScroll = new selectionscroll_1.SelectionScroll("selection-scroll");
|
||
unitsManager = new unitsmanager_1.UnitsManager();
|
||
unitInfoPanel = new unitinfopanel_1.UnitInfoPanel("unit-info-panel");
|
||
scenarioDropdown = new dropdown_1.Dropdown("scenario-dropdown", ["Caucasus", "Syria", "Nevada", "Marianas", "South Atlantic", "The channel"], () => { });
|
||
mapSourceDropdown = new dropdown_1.Dropdown("map-source-dropdown", map.getLayers(), (option) => map.setLayer(option));
|
||
activeCoalition = "blue";
|
||
/* Main update rate = 250ms is minimum time, equal to server update time. */
|
||
setInterval(() => (0, dcs_1.getDataFromDCS)(update), 250);
|
||
}
|
||
function update(data) {
|
||
unitsManager.update(data);
|
||
}
|
||
function getMap() {
|
||
return map;
|
||
}
|
||
exports.getMap = getMap;
|
||
function getSelectionWheel() {
|
||
return selectionWheel;
|
||
}
|
||
exports.getSelectionWheel = getSelectionWheel;
|
||
function getSelectionScroll() {
|
||
return selectionScroll;
|
||
}
|
||
exports.getSelectionScroll = getSelectionScroll;
|
||
function getUnitsManager() {
|
||
return unitsManager;
|
||
}
|
||
exports.getUnitsManager = getUnitsManager;
|
||
function getUnitInfoPanel() {
|
||
return unitInfoPanel;
|
||
}
|
||
exports.getUnitInfoPanel = getUnitInfoPanel;
|
||
function setActiveCoalition(coalition) {
|
||
activeCoalition = coalition;
|
||
}
|
||
exports.setActiveCoalition = setActiveCoalition;
|
||
function getActiveCoalition() {
|
||
return activeCoalition;
|
||
}
|
||
exports.getActiveCoalition = getActiveCoalition;
|
||
window.onload = setup;
|
||
},{"./controls/dropdown":4,"./controls/selectionscroll":5,"./controls/selectionwheel":6,"./dcs/dcs":7,"./map/map":9,"./panels/unitinfopanel":11,"./units/unitsmanager":16}],9:[function(require,module,exports){
|
||
"use strict";
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
o[k2] = m[k];
|
||
}));
|
||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||
}) : function(o, v) {
|
||
o["default"] = v;
|
||
});
|
||
var __importStar = (this && this.__importStar) || function (mod) {
|
||
if (mod && mod.__esModule) return mod;
|
||
var result = {};
|
||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||
__setModuleDefault(result, mod);
|
||
return result;
|
||
};
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Map_instances, _Map_state, _Map_layer, _Map_onContextMenu, _Map_onClick, _Map_onDoubleClick, _Map_groundUnitSpawnMenu, _Map_smokeSpawnMenu, _Map_explosionSpawnMenu, _Map_aircraftSpawnMenu, _Map_selectAircraft, _Map_unitSelectPayload;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Map = void 0;
|
||
const L = __importStar(require("leaflet"));
|
||
const __1 = require("..");
|
||
const dcs_1 = require("../dcs/dcs");
|
||
const payloadNames_1 = require("../units/payloadNames");
|
||
const unitTypes_1 = require("../units/unitTypes");
|
||
class Map extends L.Map {
|
||
constructor(ID) {
|
||
/* Init the leaflet map */
|
||
super(ID, { doubleClickZoom: false, zoomControl: false });
|
||
_Map_instances.add(this);
|
||
_Map_state.set(this, void 0);
|
||
_Map_layer.set(this, void 0);
|
||
this.setView([37.23, -115.8], 12);
|
||
this.setLayer("ArcGIS Satellite");
|
||
/* Init the state machine */
|
||
__classPrivateFieldSet(this, _Map_state, "IDLE", "f");
|
||
/* Register event handles */
|
||
this.on("contextmenu", (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onContextMenu).call(this, e));
|
||
this.on("click", (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onClick).call(this, e));
|
||
this.on("dblclick", (e) => __classPrivateFieldGet(this, _Map_instances, "m", _Map_onDoubleClick).call(this, e));
|
||
}
|
||
setLayer(layerName) {
|
||
var _a;
|
||
if (__classPrivateFieldGet(this, _Map_layer, "f") != null) {
|
||
this.removeLayer(__classPrivateFieldGet(this, _Map_layer, "f"));
|
||
}
|
||
if (layerName == "ArcGIS Satellite") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer("https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}", {
|
||
attribution: "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"
|
||
}), "f");
|
||
}
|
||
else if (layerName == "USGS Topo") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}', {
|
||
maxZoom: 20,
|
||
attribution: 'Tiles courtesy of the <a href="https://usgs.gov/">U.S. Geological Survey</a>'
|
||
}), "f");
|
||
}
|
||
else if (layerName == "OpenStreetMap Mapnik") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||
maxZoom: 19,
|
||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
}), "f");
|
||
}
|
||
else if (layerName == "OPENVKarte") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png', {
|
||
maxZoom: 18,
|
||
attribution: 'Map <a href="https://memomaps.de/">memomaps.de</a> <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, map data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
}), "f");
|
||
}
|
||
else if (layerName == "Esri.DeLorme") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/Specialty/DeLorme_World_Base_Map/MapServer/tile/{z}/{y}/{x}', {
|
||
attribution: 'Tiles © Esri — Copyright: ©2012 DeLorme',
|
||
minZoom: 1,
|
||
maxZoom: 11
|
||
}), "f");
|
||
}
|
||
else if (layerName == "CyclOSM") {
|
||
__classPrivateFieldSet(this, _Map_layer, L.tileLayer('https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png', {
|
||
maxZoom: 20,
|
||
attribution: '<a href="https://github.com/cyclosm/cyclosm-cartocss-style/releases" title="CyclOSM - Open Bicycle render">CyclOSM</a> | Map data: © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
}), "f");
|
||
}
|
||
(_a = __classPrivateFieldGet(this, _Map_layer, "f")) === null || _a === void 0 ? void 0 : _a.addTo(this);
|
||
}
|
||
getLayers() {
|
||
return ["ArcGIS Satellite", "USGS Topo", "OpenStreetMap Mapnik", "OPENVKarte", "Esri.DeLorme", "CyclOSM"];
|
||
}
|
||
/* State machine */
|
||
setState(state) {
|
||
__classPrivateFieldSet(this, _Map_state, state, "f");
|
||
if (__classPrivateFieldGet(this, _Map_state, "f") === "IDLE") {
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "MOVE_UNIT") {
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "ATTACK") {
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "FORMATION") {
|
||
}
|
||
}
|
||
getState() {
|
||
return __classPrivateFieldGet(this, _Map_state, "f");
|
||
}
|
||
/* Selection wheel */
|
||
showSelectionWheel(e, options, showCoalition) {
|
||
var x = e.x;
|
||
var y = e.y;
|
||
(0, __1.getSelectionWheel)().show(x, y, options, showCoalition);
|
||
}
|
||
hideSelectionWheel() {
|
||
(0, __1.getSelectionWheel)().hide();
|
||
}
|
||
/* Selection scroll */
|
||
showSelectionScroll(e, options, callback) {
|
||
var x = e.x;
|
||
var y = e.y;
|
||
(0, __1.getSelectionScroll)().show(x, y, options, callback);
|
||
}
|
||
hideSelectionScroll() {
|
||
(0, __1.getSelectionScroll)().hide();
|
||
}
|
||
}
|
||
exports.Map = Map;
|
||
_Map_state = new WeakMap(), _Map_layer = new WeakMap(), _Map_instances = new WeakSet(), _Map_onContextMenu = function _Map_onContextMenu(e) {
|
||
this.setState("IDLE");
|
||
(0, __1.getUnitsManager)().deselectAllUnits();
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
}, _Map_onClick = function _Map_onClick(e) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
if (__classPrivateFieldGet(this, _Map_state, "f") === "IDLE") {
|
||
}
|
||
else if (__classPrivateFieldGet(this, _Map_state, "f") === "MOVE_UNIT") {
|
||
if (!e.originalEvent.ctrlKey) {
|
||
(0, __1.getUnitsManager)().clearDestinations();
|
||
}
|
||
(0, __1.getUnitsManager)().addDestination(e.latlng);
|
||
}
|
||
}, _Map_onDoubleClick = function _Map_onDoubleClick(e) {
|
||
if (__classPrivateFieldGet(this, _Map_state, "f") == "IDLE") {
|
||
var options = [
|
||
{ "tooltip": "Air unit", "src": "spawnAir.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_aircraftSpawnMenu).call(this, e) },
|
||
{ "tooltip": "Ground unit", "src": "spawnGround.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_groundUnitSpawnMenu).call(this, e) },
|
||
{ "tooltip": "Smoke", "src": "spawnSmoke.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_smokeSpawnMenu).call(this, e) },
|
||
{ "tooltip": "Explosion", "src": "spawnExplosion.png", "callback": () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_explosionSpawnMenu).call(this, e) }
|
||
];
|
||
this.showSelectionWheel(e.originalEvent, options, true);
|
||
}
|
||
}, _Map_groundUnitSpawnMenu = function _Map_groundUnitSpawnMenu(e) {
|
||
}, _Map_smokeSpawnMenu = function _Map_smokeSpawnMenu(e) {
|
||
}, _Map_explosionSpawnMenu = function _Map_explosionSpawnMenu(e) {
|
||
}, _Map_aircraftSpawnMenu = function _Map_aircraftSpawnMenu(e) {
|
||
var options = [
|
||
{ 'coalition': true, 'tooltip': 'CAP', 'src': 'spawnCAP.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "CAP") },
|
||
{ 'coalition': true, 'tooltip': 'CAS', 'src': 'spawnCAS.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "CAS") },
|
||
{ 'coalition': true, 'tooltip': 'Tanker', 'src': 'spawnTanker.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "tanker") },
|
||
{ 'coalition': true, 'tooltip': 'AWACS', 'src': 'spawnAWACS.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "awacs") },
|
||
{ 'coalition': true, 'tooltip': 'Strike', 'src': 'spawnStrike.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "strike") },
|
||
{ 'coalition': true, 'tooltip': 'Drone', 'src': 'spawnDrone.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "drone") },
|
||
{ 'coalition': true, 'tooltip': 'Transport', 'src': 'spawnTransport.png', 'callback': () => __classPrivateFieldGet(this, _Map_instances, "m", _Map_selectAircraft).call(this, e, "transport") },
|
||
];
|
||
this.showSelectionWheel(e.originalEvent, options, true);
|
||
}, _Map_selectAircraft = function _Map_selectAircraft(e, group) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
var options = unitTypes_1.unitTypes.air[group];
|
||
options.sort();
|
||
this.showSelectionScroll(e.originalEvent, options, (unitType) => {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
__classPrivateFieldGet(this, _Map_instances, "m", _Map_unitSelectPayload).call(this, e, unitType);
|
||
});
|
||
}, _Map_unitSelectPayload = function _Map_unitSelectPayload(e, unitType) {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
var options = [];
|
||
options = payloadNames_1.payloadNames[unitType];
|
||
if (options != undefined && options.length > 0) {
|
||
options.sort();
|
||
this.showSelectionScroll(e.originalEvent, options, (payloadName) => {
|
||
this.hideSelectionWheel();
|
||
this.hideSelectionScroll();
|
||
(0, dcs_1.spawnAircraft)(unitType, e.latlng, (0, __1.getActiveCoalition)(), payloadName, e.airbaseName);
|
||
});
|
||
}
|
||
else {
|
||
(0, dcs_1.spawnAircraft)(unitType, e.latlng, (0, __1.getActiveCoalition)());
|
||
}
|
||
};
|
||
},{"..":8,"../dcs/dcs":7,"../units/payloadNames":12,"../units/unitTypes":14,"leaflet":1}],10:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.rad2deg = exports.deg2rad = exports.ConvertDDToDMS = exports.bearing = exports.distance = void 0;
|
||
function distance(lat1, lon1, lat2, lon2) {
|
||
const R = 6371e3; // metres
|
||
const φ1 = deg2rad(lat1); // φ, λ in radians
|
||
const φ2 = deg2rad(lat2);
|
||
const Δφ = deg2rad(lat2 - lat1);
|
||
const Δλ = deg2rad(lon2 - lon1);
|
||
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
|
||
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
||
const d = R * c; // in metres
|
||
return d;
|
||
}
|
||
exports.distance = distance;
|
||
function bearing(lat1, lon1, lat2, lon2) {
|
||
const φ1 = deg2rad(lat1); // φ, λ in radians
|
||
const φ2 = deg2rad(lat2);
|
||
const λ1 = deg2rad(lon1); // φ, λ in radians
|
||
const λ2 = deg2rad(lon2);
|
||
const y = Math.sin(λ2 - λ1) * Math.cos(φ2);
|
||
const x = Math.cos(φ1) * Math.sin(φ2) - Math.sin(φ1) * Math.cos(φ2) * Math.cos(λ2 - λ1);
|
||
const θ = Math.atan2(y, x);
|
||
const brng = (rad2deg(θ) + 360) % 360; // in degrees
|
||
return brng;
|
||
}
|
||
exports.bearing = bearing;
|
||
const zeroPad = function (num, places) {
|
||
var string = String(num);
|
||
while (string.length < places) {
|
||
string += "0";
|
||
}
|
||
return string;
|
||
};
|
||
function ConvertDDToDMS(D, lng) {
|
||
var dir = D < 0 ? (lng ? "W" : "S") : lng ? "E" : "N";
|
||
var deg = 0 | (D < 0 ? (D = -D) : D);
|
||
var min = 0 | (((D += 1e-9) % 1) * 60);
|
||
var sec = (0 | (((D * 60) % 1) * 6000)) / 100;
|
||
var dec = Math.round((sec - Math.floor(sec)) * 100);
|
||
var sec = Math.floor(sec);
|
||
if (lng)
|
||
return dir + zeroPad(deg, 3) + "°" + zeroPad(min, 2) + "'" + zeroPad(sec, 2) + "." + zeroPad(dec, 2) + "\"";
|
||
else
|
||
return dir + zeroPad(deg, 2) + "°" + zeroPad(min, 2) + "'" + zeroPad(sec, 2) + "." + zeroPad(dec, 2) + "\"";
|
||
}
|
||
exports.ConvertDDToDMS = ConvertDDToDMS;
|
||
function deg2rad(deg) {
|
||
var pi = Math.PI;
|
||
return deg * (pi / 180);
|
||
}
|
||
exports.deg2rad = deg2rad;
|
||
function rad2deg(rad) {
|
||
var pi = Math.PI;
|
||
return rad / (pi / 180);
|
||
}
|
||
exports.rad2deg = rad2deg;
|
||
},{}],11:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _UnitInfoPanel_element, _UnitInfoPanel_display;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.UnitInfoPanel = void 0;
|
||
const utils_1 = require("../other/utils");
|
||
class UnitInfoPanel {
|
||
constructor(ID) {
|
||
_UnitInfoPanel_element.set(this, void 0);
|
||
_UnitInfoPanel_display.set(this, void 0);
|
||
__classPrivateFieldSet(this, _UnitInfoPanel_element, document.getElementById(ID), "f");
|
||
__classPrivateFieldSet(this, _UnitInfoPanel_display, '', "f");
|
||
if (__classPrivateFieldGet(this, _UnitInfoPanel_element, "f") != null) {
|
||
__classPrivateFieldSet(this, _UnitInfoPanel_display, __classPrivateFieldGet(this, _UnitInfoPanel_element, "f").style.display, "f");
|
||
this.hide();
|
||
}
|
||
}
|
||
show() {
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").style.display = __classPrivateFieldGet(this, _UnitInfoPanel_display, "f");
|
||
}
|
||
hide() {
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").style.display = "none";
|
||
}
|
||
update(unit) {
|
||
if (__classPrivateFieldGet(this, _UnitInfoPanel_element, "f") != null) {
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#unit-name").innerHTML = unit.unitName;
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#group-name").innerHTML = unit.groupName;
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#heading").innerHTML = String(Math.floor((0, utils_1.rad2deg)(unit.heading)) + "°");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#altitude").innerHTML = String(Math.floor(unit.altitude / 0.3048) + "ft");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#groundspeed").innerHTML = String(Math.floor(unit.speed * 1.94384) + "kts");
|
||
//this.#element.querySelector("#altitude")!.innerHTML = String(Math.floor(unit.missionData.fuel * 100) + "%");
|
||
__classPrivateFieldGet(this, _UnitInfoPanel_element, "f").querySelector("#position").innerHTML = (0, utils_1.ConvertDDToDMS)(unit.latitude, false) + " " + (0, utils_1.ConvertDDToDMS)(unit.longitude, true);
|
||
}
|
||
}
|
||
}
|
||
exports.UnitInfoPanel = UnitInfoPanel;
|
||
_UnitInfoPanel_element = new WeakMap(), _UnitInfoPanel_display = new WeakMap();
|
||
},{"../other/utils":10}],12:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.payloadNames = void 0;
|
||
exports.payloadNames = { "A-10A": ["MK-84*2 , LAU-68*2 , AGM-65K*2", "LAU-68-MK5*6", "AGM-65K*2,Mk20*6,AIM-9*2,ECM", "Mk-82*6,AIM-9*2,ECM", "Mk20*6,AIM-9*2,ECM", "AGM-65D*4,AIM-9*2,ECM", "AGM-65K, AGM-65D", "ECM", "Mk-82*6, Mk-84*2", "Mk20*8", "AGM-65K*2,Mk-84*2,AIM-9*2,ECM", "AGM-65K*2,Mk-82*6,AIM-9*2,ECM", "Mk-84*2,AIM-9*2,ECM", "AGM-65K*2,Mk84*2,Mk82*4,AIM-9M*2,ECM", "AGM-65H*6,Mk82*10,AIM-9M*2,ECM"], "A-10C": ["LAU-68 42 rkt M156 WP, AIM-9*2, ECM", "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", "SUU-25*9,AIM-9*2,ECM", "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", "Mk-82AIR*8,AIM-9*2,ECM", "MK-84*2,LAU-68*2,AGM-65K*2", "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", "Mk-82*6,Mk-84*2,AIM-9*2,ECM", "Mk-84*4,AIM-9*2,ECM", "Mk-82*8,AIM-9*2,ECM", "BDU-33*12, TGP, CAP-9*1", "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", "BDU-33*6, TGP, CAP-9*1", "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", "TGP", "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", "GBU-12*6,GBU-10*2,TGP, AIM-9*2", "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", "AGM-65D*4,TGP, ECM, AIM-9*2", "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", "CBU-103*4, M151*14, AIM-9*2, ECM", "CBU-87*4, M151*42, AIM-9*2, ECM", "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", "CBU-87*4, M151*28, AIM-9*2,ECM", "M151*98, Mk-82*2,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", "TGP, CAP-9*1, BDU-50LGB*4", "GBU-12*14,TGP, AIM-9*2", "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", "GBU-38*4,GBU-31*2,TGP, AIM-9*2", "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP"], "A-10C_2": ["LAU-68 42 rkt M156 WP, AIM-9*2, ECM", "AGM-65D*4, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "LAU-131 98 rkt M156 WP, AIM-9*2,ECM", "SUU-25*9,AIM-9*2,ECM", "AGM-65D*4, CBU-97*4,TGP, ECM, AIM-9*2", "Mk-82AIR*8,AIM-9*2,ECM", "MK-84*2,LAU-68*2,AGM-65K*2", "BDU-33*6, TGM-65H, TGM-65D, TGP, BDU-50LGB*2, CAP-9*1", "Mk-82*6,Mk-84*2,AIM-9*2,ECM", "Mk-84*4,AIM-9*2,ECM", "Mk-82*8,AIM-9*2,ECM", "BDU-33*12, TGP, CAP-9*1", "AGM-65D*4,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65D*4,GBU-12*2,GBU-38,Mk-82,AIM-9,TGP,ECM", "AGM-65D*2, AGM-65H*2, CBU-97*2, CBU-87*2, TGP, ECM, AIM-9*2", "BDU-50HD*6,Mk1*7,TGP, CAP-9*1", "AGM-65H*4, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-87*2,AIM-9M*2,ECM,TGP", "AGM-65K*2,GBU-38*4,AIM-9*2,TGP,ECM", "BDU-33*6, TGP, CAP-9*1", "AGM-65D*2,AGM-65H*2,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK151*7", "TGP", "BDU-33*6, TGP, CAP-9*1, BDU-50LD*2", "GBU-12*6,GBU-10*2,TGP, AIM-9*2", "TGP, CBU-87*3, M151*28, AIM-9*2, ECM", "AGM-65D*4,Mk-82*6,CBU-87*2,TGP,AIM-9*2,Mk151*7", "PGM- GBU-10*2,GBU-12*4,AIM-9*2,TGP,ECM", "AGM-65D*4,TGP, ECM, AIM-9*2", "TGP, CAP-9*1, CATM-65K*1, TGM-65G*1", "AGM-65G*2,GBU-31*2,AIM-9*2,TGP,ECM", "TGP, M151*14, Mk-82*2, Mk-82AIR*2, AIM-9*2, ECM", "PGM- GBU-10*4, AGM-65K*2,AIM-9*2,TGP,ECM", "AGM-65D*2,AGM-65H*2,Mk-82AIR*6,CBU-87*2,Mk151*7,AIM-9*2,TGP,ECM", "GBU-31*2,GBU-38*2, AGM-65H*2, AIM-9*2,TGP, ECM", "CBU-103*4, M151*14, AIM-9*2, ECM", "CBU-87*4, M151*42, AIM-9*2, ECM", "AGM-65D*6, CBU-97*4,TGP, ECM, AIM-9*2", "CBU-87*2, M151*14, MK-82AIR*6, AIM-9*2,ECM", "AGM-65D*4, CBU-105*4,TGP, ECM, AIM-9*2", "BDU-50HD*2,BDU-50LGB*2,TGP, CAP-9*1", "CBU-87*4, M151*28, AIM-9*2,ECM", "M151*98, Mk-82*2,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,GBU-12,GBU-38,MK82*3,MK82AIR*3,MK5*7,TGP,AM-9*2", "TGP, M151*42, Mk-82*6, Mk-82AIR*6, AIM-9*2, ECM", "TGP, M151*84, Mk-82*2,AIM-9*2, ECM", "BDU-50LD*2, BDU-50HD*2,CATM-65K, TGM-65G, TGP, CAP-9*1", "TGP, M151*49, Mk-82*2, CBU-87*2, AIM-9*2, ECM", "TGP, CAP-9*1, BDU-50LGB*4", "GBU-12*14,TGP, AIM-9*2", "AGM-65D*3, AGM-65H*3, CBU-97*4,TGP, ECM, AIM-9*2", "AGM-65D*2,AGM-65H*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,TGP,ECM", "AGM-65D*4, CBU-105*2,CBU-97*2, TGP, ECM, AIM-9*2", "AGM-65D*2,Mk-82*6,AIM-9*2,ECM", "AGM-65D*2,AGM-65H*2,TGP, ECM, AIM-9*2", "GBU-38*4,GBU-31*2,TGP, AIM-9*2", "AGM-65D*4,GBU-12*2,GBU-38*2,AIM-9*2,TGP,ECM,MK5*7", "AGM-65G,AGM-65K,GBU-10*2,AIM-9*2,TGP,ECM", "AGM-65G,AGM-65D,Mk-82*7,AIM-9*2,ECM", "GBU-31*2,GBU-38*4,AIM-9*2,TGP,ECM, AIM-9*2", "AGM-65K*2,GBU-12*8,AIM-9M*2.ECM,TGP", "AGM-65D*6,GBU-12*4,AIM-9M*2,ECM,TGP", "AGM-65E*2,Mk-82AIR*2,CBU-97*2,AIM-9M*2,ECM,TGP", "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,TGP", "AGM-65E*2,CBU-97*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", "AGM-65E*2,CBU-105*4,AIM-9M*2,ECM,M151 APKWS*7,TGP", "Mk-82*4,Mk-8AIR*4,AIM-9*2,ECM", "Mk-82*20,AIM-9*2,ECM", "Mk-82*6,AIM-9*2,TGP,ECM", "Mk-84*6,AIM-9*2,TGP,ECM", "Mk-82AIR*6,Mk-8AIR*4,M151*1,TGP,AIM-9*2,ECM", "GBU-38*4,M151 APKWS*7,AGM-65D*1,AGM-65H*1,TGP,AIM-9*2,ECM", "GBU-38*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-12*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-12*2,GBU-38*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-10*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-31*2,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-54*4,M151 APKWS*7,AGM-65E*2,TGP,AIM-9*2,ECM", "GBU-54*4,M151 APKWS*7,AGM-65D*4,TGP,AIM-9*2,ECM"], "AH-64D_BLK_II": ["4 * Fuel Tank 230 gal", "2 * M261: M151 (6PD), 2 * Hellfire station: 4*AGM-114K", "4 * Hellfire station: 4*AGM-114K", "4 * M261: M151 (6PD)", "2 * M261: M151 (6PD), 2 * Fuel Tank 230 gal", "2 * Fuel Tank 230 gal, 2 * Hellfire station: 4*AGM-114K", "2 * M261: A/B - M151 (6PD), E - M274 (6SK), 2 * Hellfire station: 4*AGM-114K", "2 * M261: A/B - M151 (6PD), E - M257 (6IL), 2 * Hellfire station: 4*AGM-114K", "2 * M261: C - M257 (6IL), D/E - M151 (6PD), 2 * Hellfire station: 4*AGM-114K", "2 * M261: C - M274 (6SK), D/E - M151 (6PD), 2 * Hellfire station: 4*AGM-114K"], "AJS37": ["Battlefield Air Interdiction: RB-75*4, RB-24J*2, XT", "Anti-ship: RB-04E*2, RB-74*2, XT", "Anti-ship (Heavy Mav): RB-75T*4, XT", "Hard Target (Countermeasures): RB-05, XT, KB, U22", "Hard Target (MAV): RB-75T*2, RB-74*2, XT", "Ferry Flight: XT", "CAS (75 GUN): RB-75*2, AKAN", "CAP: RB-74*4, XT", "Countermeasures Escort: U/22A, KB", "Strike: BK90 (MJ1)*2, RB-74*2, XT", "CAS: AKAN, RB-05A", "CAP (6 AAM): RB-74*4, RB-24J*2, XT", "Rocket Half Load HE: ARAK HE*2, RB-74*2, XT", "CAP / Intecept: RB-05A*2, RB-74*2, XT", "Bombs Low-drag: SB71LD*16, RB-24J*2, XT", "SEAD: RB-75T*2, U22/A, KB, XT", "Anti-Ship (Modern): RB-15F*2, RB-74*2, XT", "New Payload", "CAP (AJ37): RB-24J*2", "ECM Escort Anti-ship: RB-04E, KB, RB-74*2, XT", "Bombs High-drag: SB71HD*16, XT, RB-24J", "Anti-ship (Light Mav): RB-75*4, XT", "Rocket Full Load HE: ARAK HE*4, RB-24J, XT", "Illumination: LYSB*8, XT", "Anti-ship (RB05): RB-05A*2, RB-74*2, XT", "CAP (Gun): AKAN*2, RB-74*2, XT", "Hard Target: RB-05A*2, RB-74*2, XT", "RB-05*2, XT", "CAS: ARAK M70 HE*4, XT", "Runway Strike: SB71HD*16, RB-24J, XT"], "AV8BNA": ["H-L-H 2", "AFAC 1", "AS 1", "H-M-H 3", "Interdiction 1 (H-H-H-H)", "Interdiction 2 (H-H-H-H)", "AFAC 3", "Interdiction 3 (H-L-L-H)", "H-M-H 1", "H-L-H 1", "PGM 2 (H-H-H-H)", "L-L-L 1", "AFAC 2", "H-M-H 2", "Area Suppression", "Rockets 1", "AS 2", "Helo Escort 1", "PGM 1 (H-H-H-H)", "Helo Escort 2", "PGM 3 (H-H-H-H)", "Anti Armor", "RA 1 (H-M-M-H)", "Stand Off 1", "Stand Off 2", "Stand Off 3", "Iron Hand 1", "Iron Hand 2"], "C-101CC": ["2*AIM-9P, DEFA 553 CANNON (I)", "2*AIM-9M, DEFA 553 CANNON (I)", "2*AIM-9P, DEFA 533 CANNON (II)", "2*AIM-9P, AN-M3 CANNON (IV)", "2*R.550 MAGIC, DEFA 553 CANNON", "2*AIM-9M, AN-M3 CANNON (III)", "2*AIM-9P, DEFA 553 CANNON", "2*R.550 MAGIC, DEFA 553 CANNON (III)", "2*AIM-9P, 2*BELOUGA, DEFA 553 CANNON", "2*AIM9-P, 2*SEA EAGLE, DEFA-553 CANNON", "2*AIM-9M 2*SEA EAGLE, AN-M3 CANNON", "2*AIM-9M, AN-M3 CANNON", "2*BELOUGA,2*BDU-33, DEFA-553 CANNON", "2* SEA EAGLE, DEFA-553 CANNON", "2*AIM-9P, 2*BR-250,2*MK-82, DEFA 553 CANNON", "2*R.550 MAGIC, 2*SEA EAGLE , DEFA-553 CANNON", "2*R.550 MAGIC, DEFA 553 CANNON (IV)", "2*BELOUGA, 2*BR-500, DEFA 553 CANNON", "2*AIM-9M, DEFA 553 CANNON (IV)", "2*R.550 MAGIC, AN-M3 CANNON (II)", "2*R550 Magic, DEFA 553 CANNON (I)", "2*AIM-9M ,2*BELOUGA,2*BIN-200, AN-M3 CANNON", "2*AIM-9M, 2*LAU 68, 2*MK-82, DEFA 553 CANNON", "2*AIM-9P, AN-M3 CANNON (III)", "2*AIM-9M, DEFA 533 CANNON (II)", "2*R.550 MAGIC, 2*BR-250, 2*BDU-33, DEFA 553 CANNON"], "C-101EB": ["Smoke System: White Smoke", "Smoke System: White Smoke+Red Colorant", "Smoke System: White Smoke+Yellow Colorant"], "H-6J": ["YJ-12 x 2", "YJ-12 x 4", "YJ-83K x 6", "250-2 HD Bomb x 12 in Bay", "250-2 HD Bomb x 24 in Bay", "250-3 LD Bomb x 36", "KD-63 x 4", "KD-20 x 6", "KD-20 x 4", "KD-63 x 2, KD-20 x 4", "KD-63 x 2, KD-20 x 2"], "J-11A": ["FAB-100x36,R-73x2,ECM", "FAB-250x8,R-73x2,ECM", "FAB-500x8,R-73x2,ECM", "S-8KOMx80,FAB-250x4,R-73x2,ECM", "S-13x20,FAB-250x4,R-73x2,ECM", "S-25x4,FAB-500x4,R-73x2,ECM", "R-27ERx4,R-27ETx2,R-73x2,ECM", "R-77x6,R-73x2,ECM", "R-27ERx6,R-73x2,ECM", "R-77x4,R-27ETx2,R-73x2,ECM", "R-77x4,R-27ERx2,R-73x2,ECM", "BetAB-500ShPx6,R-73x2,ECM", "R-73x4,ECM", "R-77x2,R-27ETx2,R-73x2,ECM", "R-77x6,R-73x4", "R-77x2,R-27ETx2,R-27ERx2,R-73x2,ECM", "R-27ETx2,R-27ERx4,R-73x2,ECM", "S-8TsMx80,FAB-250x4,R-73x2,ECM", "S-8OFP2x80,FAB-250x4,R-73x2,ECM", "FAB-250x18,R-73x2,ECM", "2*S8-KOMx2, R-73x2, ECM", "2*S8-OFP2x2, R-73x2, ECM", "FAB-250x4, 2*FAB-500x2, R-73x2", "FAB-250x4, 2*FAB-250x2, R-73x2", "RBK-250 HEAT/APx2, RBK-250 HE/Fragx2, R-73x2"], "JF-17": ["PL-5Ex2, C802AKx2, 800L Tank", "PL-5Ex2, C-701 IRx2, 1100L Tank, 800L Tank", "PL-5Ex2, SD-10x2, 1100L Tankx2, WMD7", "PL-5Ex2, LD-10x2, 1100L Tankx2, WMD7", "PL-5Ex2, 800L Tank, WMD7", "PL-5Ex2, GBU-10x2, WMD7", "PL-5Ex2, 2*GBU-12x2, 800L Tank, WMD7", "PL-5Ex2, 2*Mk-82x2, Mk-83x2, 800L Tank", "PL-5Ex2, 1100L Tankx2, 800L Tank", "PL-5Ex2, WMD7, CM802AKGx2, 800L Tank, DL", "PL-5Ex2, C-701 CCDx2, 1100L Tank, 800L Tank", "PL-5Ex2, GBU-12x2, 1100L Tank, WMD7", "PL-5Ex2, 2*GBU-12x2, GBU-16x2, WMD7", "PL-5Ex2, 1100L Tankx2, WMD7", "PL-5Ex2, WMD7, 800L Tankx2, SPJ, 2*LD-10", "PL-5Ex2, LS-6x2, 1100L Tankx2, WMD7", "PL-5Ex2, C-701 IRx2, 1100L Tankx2, WMD7", "PL-5Ex2, GBU-12x2, 1100L Tankx2, WMD7", "PL-5Ex2, 2*LD-10x2, 1100L Tankx2, SPJ", "PL-5Ex2, LD-10x2, 1100L Tankx2, SPJ", "PL-5Ex2, 2*LD-10x2, LS-6x2, SPJ", "PL-5Ex2, 2*LD-10x2, GB-6-HEx2, SPJ", "PL-5Ex2, C-701 IRx2, 800L Tankx2, WMD7", "PL-5Ex2, C-701 CCDx2, 1100L Tankx2, WMD7", "PL-5Ex2, C-701 CCDx2, 800L Tankx2, WMD7", "PL-5Ex2, 2*GBU-12x2, 1100L Tank, WMD7", "PL-5Ex2, C-701 IRx2, 1100L Tank, WMD7", "PL-5Ex2, C-701 IRx2, 800L Tank, WMD7", "PL-5Ex2, C-701 CCDx2, 1100L Tank, WMD7", "PL-5Ex2, C-701 CCDx2, 800L Tank, WMD7", "PL-5Ex2, C-701 IRx2, LS-6x2, 800L Tank", "PL-5Ex2, C-701 IR/CCD, GB-6-HEx2, 800L Tank", "PL-5Ex2, C-701 IR/CCD, GB-6-SFWx2, 800L Tank", "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, BRM1", "PL-5Ex2, WMD7, GB-6-SFWx2, 800L Tank, GBU-12", "PL-5Ex2, 2*Mk-82SEx2, Mk-83x3", "PL-5Ex2, Mk-84x3", "PL-5Ex2, 2*Mk5x2, 800L Tank", "PL-5Ex2, Unguided 90mmx2, 800L Tank", "PL-5Ex2, 2*Mk5x2, Mk-83x3", "PL-5Ex2, BRM1x2, 1100L Tank, WMD7", "PL-5Ex2, 2x1100L Tank", "PL-5Ex2, SD-10x2, 2x1100L Tank", "PL-5Ex2, 2*SD-10x2, 2x1100L Tank", "PL-5Ex2, 800L Tank", "PL-5Ex2, SD-10x2, 800L Tank", "PL-5Ex2, 2*SD-10x2, 800L Tank", "PL-5Ex2, SD-10x2, SPJ", "PL-5Ex2, SPJ", "PL-5Ex2, 2*SD-10x2, SPJ", "PL-5Ex2", "PL-5Ex2, SD-10x2", "PL-5Ex2, 2*SD-10", "PL-5Ex2, SD-10x2, SPJ, 1100L Tankx2", "PL-5Ex2, 2*SD-10x2, 1100L Tankx2, 800L Tank", "PL-5Ex2, SD-10x2, 1100L Tankx2, 800L Tank", "PL-5Ex2, GBU-16x2, BRM1x2, WMD7", "PL-5Ex2, WMD7", "PL-5Ex2, 2*LD-10, GB-6x2, 2*SD-10, SPJ", "PL-5Ex2, C-701 CCDx2, SPJ", "PL-5Ex2, 2*LD-10, CM802AKGx2, 2*SD-10, DL", "PL-5Ex2, 2*MK-82x2, MK-83x2, MK-84", "PL-5Ex2, LS-6x2, GB-6x2, 800L Tank", "PL-5Ex2, 2*GBU-12x2, LS-6x2, WMD7", "PL-5Ex2, 2*GBU-12x2, GB-6x2, WMD7", "PL-5Ex2, 2*Type-200Ax2", "PL-5Ex2, Type-200Ax2", "PL-5Ex2, 2*LS6-250x2, 800L Tankx2, WMD7", "PL-5Ex2, 2*LS6-250x2, 800L Tank, 1100L Tankx2", "PL-5Ex2, 2*LS6-100x2, 1100L Tankx2, WMD7", "PL-5Ex2, 2*LS6-100x2, 800L Tankx2, WMD7"], "WingLoong-I": ["AKD-10 x 2"], "Christen Eagle II": ["Smoke - white"], "F-16C_50": ["AIM-120B*2, AIM-9M*4, FUEL*3", "AIM-120B*4, AIM-9M*2, FUEL*3", "AIM-120B*6, FUEL*3", "AIM-120C*2, AIM-9X*4, FUEL*2", "AIM-120C*4, AIM-9X*2, FUEL*3", "AIM-120C*4, AIM-9X*2, FUEL*3, TGP", "AIM-120C*4, AIM-9X*2, FUEL*2", "AIM-120C*6, FUEL*3", "AIM-120C*4, AIM-9X*2, FUEL*2, ECM", "AIM-120C*4, AIM-9X*2, FUEL*2, ECM, TGP", "AIM-120C*6, FUEL*2, ECM", "AIM-120C*6, FUEL*2, ECM, TGP", "AIM-120C*6, FUEL*2", "AIM-120C*6, FUEL*3, TGP", "AIM-120C*2, AIM-9X*2, AGM-65D*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65H*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65H*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65D*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-97*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-87*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82HD*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-103*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, CBU-105*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82*6, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82HD*6, FUEL*2, ECM, TGP", "AIM-120*2, AIM-9X*2, MK-82SE*4, FUEL*2, ECM, TGP", "AIM-120*2, AIM-9X*2, MK-82SE*6, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-84*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, MK-82P*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-12*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-12*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-10*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-24*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-31-1B*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-31-3B*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-38*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, GBU-38*4, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65K*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65G*2, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-65G, AGM-65K, FUEL*2, ECM, TGP", "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*3, TGP, HTS", "AIM-120C*2, AIM-9X*2, AGM-88C*2, FUEL*2, ECM, TGP, HTS", "AIM-120C*2, AIM-9X*2, AGM-88C*4, ECM, TGP, HTS", "AIM-120C*4, AGM-88C*2, FUEL*3, TGP, HTS", "AIM-120C*4, AGM-88C*2, FUEL*2, ECM, TGP, HTS", "AIM-120C*4, AGM-88C*4, ECM, TGP, HTS", "AIM-120C*2, AIM-9X*2, MK-61*2, FUEL*2, ECM, TGP"], "F-5E-3": ["Mk-82LD*4,AIM-9P*2,Fuel 275", "AIM-9P*2, Fuel 275*3", "AIM-9P5*2, Fuel 275*3", "AIM-9P*2, Fuel 150*3", "AIM-9P5*2, Fuel 150*3", "Mk-82SE*4,AIM-9P*2,Fuel 275", "CBU-52B*4,AIM-9P*2,Fuel 275", "LAU-3 HE*4,AIM-9P*2,Fuel 275", "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", "LAU-68 HE*4,AIM-9P*2,Fuel 275", "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", "M-117*4,AIM-9P*2,Fuel 275", "GBU-12*4,AIM-9P*2,Fuel 275", "CBU-52B*5,AIM-9*2", "Mk-82LD*5,AIM-9*2", "Mk-82SE*5,AIM-9*2", "Mk-82LD*7,AIM-9P*2, Fuel 275*2", "Mk-82SE*7,AIM-9P*2, Fuel 275*2", "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "M-117*5,AIM-9*2", "AIM-9P*2, Fuel 275", "AIM-9P*2, Fuel 150", "AIM-9P5*2, Fuel 275", "AIM-9P5*2, Fuel 150", "AIM-9B*2, Fuel 275", "AIM-9B*2, Fuel 150", "AIM-9B*2, Fuel 275*3", "AIM-9B*2, Fuel 150*3", "AN/ASQ-T50, AIM-9P, Fuel 150", "AIM-9B*2", "AIM-9P*2", "AIM-9P5*2", "Antiship Mk82"], "F-5E": ["Mk-82LD*4,AIM-9P*2,Fuel 275", "AIM-9P*2, Fuel 275*3", "AIM-9P5*2, Fuel 275*3", "AIM-9P*2, Fuel 150*3", "AIM-9P5*2, Fuel 150*3", "Mk-82SE*4,AIM-9P*2,Fuel 275", "CBU-52B*4,AIM-9P*2,Fuel 275", "LAU-3 HE*4,AIM-9P*2,Fuel 275", "LAU-3 HEAT*4,AIM-9P*2,Fuel 275", "LAU-68 HE*4,AIM-9P*2,Fuel 275", "LAU-68 HEAT*4,AIM-9P*2,Fuel 275", "M-117*4,AIM-9P*2,Fuel 275", "GBU-12*4,AIM-9P*2,Fuel 275", "CBU-52B*5,AIM-9*2", "Mk-82LD*5,AIM-9*2", "Mk-82SE*5,AIM-9*2", "Mk-82LD*7,AIM-9P*2, Fuel 275*2", "Mk-82SE*7,AIM-9P*2, Fuel 275*2", "LAU-3 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "LAU-68 HE*2,Mk-82LD,AIM-9P*2,Fuel 275*2", "M-117*5,AIM-9*2", "AIM-9P*2, Fuel 275", "AIM-9P*2, Fuel 150", "AIM-9P5*2, Fuel 275", "AIM-9P5*2, Fuel 150", "AIM-9B*2, Fuel 275", "AIM-9B*2, Fuel 150", "AIM-9B*2, Fuel 275*3", "AIM-9B*2, Fuel 150*3", "AN/ASQ-T50, AIM-9P, Fuel 150", "AIM-9B*2", "AIM-9P*2", "AIM-9P5*2"], "F-86F Sabre": ["120gal Fuel*2", "200gal Fuel*2", "120gal Fuel*2, 200gal Fuel*2", "GAR-8*2", "120gal Fuel*2, GAR-8*2", "HVAR*16", "200gal Fuel*2, HVARx2*4", "AN-M64*2", "200gal Fuel*2, AN-M64*2", "M117*2"], "F-14A-135-GR": ["XT*2", "AIM-54A-MK47*6, AIM-9L*2, XT*2", "AIM-7F*6, AIM-9L*2, XT*2", "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2, XT*2", "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4, XT*2", "AIM-54A-MK47*4, AIM-9L*4, XT*2", "AIM-54A-MK47*4, AIM-9M*4, XT*2", "AIM-54A-MK60*4, AIM-9M*4, XT*2", "AIM-7F*4, AIM-9L*4, XT*2", "AIM-7F*4, AIM-9L*4, XT*2", "BDU-33*14", "BDU-33*12", "GBU-10*2", "GBU-12*4", "GBU-16*4", "GBU-24*2", "Mk-84*4", "Mk-83*4", "Mk-82*4", "Mk-82*14", "Mk-81*14", "Mk-20*4", "Mk-82AIR*4", "Zuni*12", "Zuni*28", "LUU-2*24", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*2", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-82*1", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, XT*2, Mk-20*2", "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN"], "F-14A-95-GR": ["AIM-54A-MK47*6, AIM-9L*2", "AIM-54A-MK47*6, AIM-9L*2", "AIM-54A-MK60*6, AIM-9L*2", "AIM-7F*6, AIM-9L*2", "AIM-7F*6, AIM-9L*2", "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2", "AIM-54A-MK47*4, AIM-7F*2, AIM-9L*2", "AIM-54A-MK60*4, AIM-7F*2, AIM-9L*2", "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4", "AIM-54A-MK47*2, AIM-7F*1, AIM-9L*4", "AIM-54A-MK60*2, AIM-7F*1, AIM-9L*4", "AIM-54A-MK47*4, AIM-9L*4", "AIM-54A-MK47*4, AIM-9L*4", "AIM-54A-MK60*4, AIM-9L*4", "AIM-7F*4, AIM-9L*4", "AIM-7F*4, AIM-9L*4", "AIM-54A-MK47*2, AIM-7F*3, AIM-9L*2", "AIM-54A-MK47*2, AIM-7F*3, AIM-9L*2", "AIM-54A-MK60*2, AIM-7F*3, AIM-9L*2", "BDU-33*14", "BDU-33*12", "GBU-10*2", "GBU-12*4", "GBU-16*4", "GBU-24*2", "Mk-84*4", "Mk-83*4", "Mk-82*4", "Mk-82*14", "Mk-81*14", "Mk-20*4", "Mk-82AIR*4", "Zuni*12", "Zuni*28", "LUU-2*24", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, Mk-82*2", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, Mk-82*1", "AIM-54A-MK60*1, AIM-7F*1, AIM-9L*2, Mk-20*2"], "F-14B": ["XT*2", "AIM-54A-MK47*6, AIM-9M*2, XT*2", "AIM-54A-MK47*6, AIM-9L*2, XT*2", "AIM-54A-MK60*6, AIM-9M*2, XT*2", "AIM-54C-MK47*6, AIM-9M*2, XT*2", "AIM-7M*6, AIM-9M*2, XT*2", "AIM-7M*6, AIM-9L*2, XT*2", "AIM-54A-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", "AIM-54A-MK47*4, AIM-7M*2, AIM-9L*2, XT*2", "AIM-54A-MK60*4, AIM-7M*2, AIM-9M*2, XT*2", "AIM-54C-MK47*4, AIM-7M*2, AIM-9M*2, XT*2", "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*2, AIM-9L*2, XT*2", "AIM-54A-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", "AIM-54A-MK60*2, AIM-7M*1, AIM-9M*4, XT*2", "AIM-54C-MK47*2, AIM-7M*1, AIM-9M*4, XT*2", "AIM-54A-MK47*4, AIM-9M*2, AIM-9L*2, XT*2", "AIM-54A-MK47*4, AIM-9M*4, XT*2", "AIM-54A-MK60*4, AIM-9M*4, XT*2", "AIM-54C-MK47*4, AIM-9M*4, XT*2", "AIM-7M*4, AIM-9M*2, AIM-9L*2, XT*2", "AIM-7M*4, AIM-9L*4, XT*2", "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", "AIM-54A-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", "AIM-54A-MK60*2, AIM-7M*3, AIM-9M*2, XT*2", "AIM-54C-MK47*2, AIM-7M*3, AIM-9M*2, XT*2", "BDU-33*14", "BDU-33*12", "GBU-10*2", "GBU-12*4", "GBU-16*4", "GBU-24*2", "Mk-84*4", "Mk-83*4", "Mk-82*4", "Mk-82*14", "Mk-81*14", "Mk-20*4", "Mk-82AIR*4", "Zuni*12", "Zuni*28", "LUU-2*24", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*1", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2", "AIM-7M*1, AIM-9M*2, XT*2, GBU-12*2, LANTIRN", "AIM-7M*1, AIM-9M*2, XT*2, GBU-24*1, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-82*2, LANTIRN", "AIM-54A-MK60*1, AIM-7M*1, AIM-9M*2, XT*2, Mk-20*2, LANTIRN"], "FA-18C_hornet": ["AIM-9M*6, AIM-7M*2, FUEL*3", "AIM-9M*6, AIM-7M*2, FUEL*2", "AIM-9M*2, MK-84*2, FUEL*2", "AIM-9M*2, MK-83*4, FUEL*2", "Carrier Landing", "AIM-9M*2, AIM-7M*4, FUEL*3", "AIM-9M*2, CBU-99*4, FUEL*2", "AIM-9M*2, MK-82SE*4, FUEL*2", "AIM-9M*2, MK-20*4, FUEL*2", "AIM-9M*2, MK-82*4, FUEL*2", "AIM-9M*2, AIM-7M*2, FUEL*2", "AIM-9M*2, MK-83*2, FUEL*2", "AIM-9M*2, ZUNI*4, FUEL*2", "AIM-9M*2, LAU-61*4, FUEL*2", "AIM-9M*2, LAU-68*4, FUEL*2", "AIM-9M*2, AIM-7M*2, FUEL*1", "AIM-9X*2, AIM-120C-5*1, GBU-31*4, ATFLIR, FUEL", "AIM-9X*2, AIM-120C-5*6, FUEL*3", "AIM-9X*2, AIM-120C-5*1, AGM-65D*4, ATFLIR, FUEL", "AIM-9X*2, AIM-120C-5*2, AGM-88C*2, FUEL", "AIM-9X*2, AIM-120C-5*1, GBU-38*4, GBU-12*4, ATFLIR, FUEL", "AIM-9X*2, AIM-120C-5*1, AGM-84E*2, DATALINK, ATFLIR, FUEL*2", "AIM-9M*2, AIM-120C-5*1, AGM-84D*4, ATFLIR, FUEL", "AIM-9M*2, ATFLIR, FUEL", "AIM-9M*2, ATFLIR, FUEL*2"], "I-16": ["6xRS-82", "2xFAB-100", "6xRS-82, 2xFAB-100", "6xRS-82, 2xDropTank-93L", "2xDropTank-93L"], "Ka-50": ["4xFAB-500", "2xFuel tank, 2xKMGU AP", "80xS-8 TsM", "2xFuel tank, 40xS-8", "80xS-8", "4xKMGU AT", "2xKMGU AP", "2xFuel tank, 12x9A4172", "2xFuel tank, 2xUPK-23", "12x9A4172, 40xS-8", "12x9A4172, 2xKMGU AT", "4xKMGU AP", "2xFAB-250, 2xFuel tank", "12x9A4172, 2xFAB-500", "20xS-13", "40xS-8", "12x9A4172, 2xUPK-23", "2xKMGU AT", "6x9A4172", "2xFuel tank, 2xKMGU AT", "4xFuel tank", "2xKMGU AP, 12x9A4172", "12x9A4172", "2xFuel tank", "40xS-8 TsM, 12x9A4172", "2xFAB-500", "40xS-8 TsM, 2xFuel tank", "4xUPK-23", "10xS-13", "40xS-8 TsM", "12x9A4172, 10xS-13", "2xFuel tank, 2xFAB-500", "2xFAB-250", "4xFAB-250", "2xFuel tank, 10xS-13", "2xFAB-250, 12x9A4172", "2xUPK-23"], "Ka-50_3": ["4xIgla", "2xKh-25ML, 10xS-13, 4xIgla", "12x9A4172, 40xS-8KOM, 4xIgla", "12x9A4172, 40xS-8OFP, 4xIgla", "12x9A4172, 40xS-13, 4xIgla", "80xS-8KOM, 4xIgla", "80xS-8OFP, 4xIgla", "20xS-20, 4xIgla", "4xUPK-23, 4xIgla", "10xS-13, 2xFAB-500, 4xIgla", "10xS-13, 2xFAB-250, 4xIgla", "80xS-8OM, 4xIgla", "80xS-8TsM, 4xIgla", "40xS-8OFP, 2xFuel, 4xIgla", "12x9A4172, 2xFuel, 4xIgla"], "L-39C": ["SAB-100x2", "R-3Sx2", "Smokes", "Central Smoke", "FAB-100x2", "S-5KOx32"], "L-39ZA": ["S-5KOx32", "S-5KOx64", "S-5KOx32, PTB-150x2", "S-5KOx32, PTB-350x2", "S-5KOx32, FAB-100x2", "OFAB-100 Jupiter x4, FAB-100x2", "FAB-100x2", "FAB-100x4", "OFAB-100 Jupiter x8", "FAB-100x2, PTB-150x2", "FAB-100x2, PTB-350x2", "PK-3x4", "PK-3x2, PTB-150x2", "R-60Mx2", "SAB-100x4", "R-3Sx2", "R-3Sx2, PK-3x2", "R-60Mx2, PK-3x2"], "M-2000C": ["Fox", "Fox / Magic (QRA)", "Alpha / S530D", "Fox / S530D / Magic", "Fox / S530D / Magic / Eclair", "Bravo", "Bravo / Magic", "Kilo", "Kilo / Magic", "Bravo / 4xMk-82 / Magic", "Bravo / GBU-12 / Magic", "Bravo / 2xGBU-12 / Magic", "Bravo / GBU-16 / Magic", "Bravo / GBU-24 / Magic", "Bravo / BAP-100 / Magic", "Bravo / 4xSnakeEye / Magic", "Fox / 4xMk-82 / Magic", "Kilo / 4xMk-82 / Magic"], "MB-339A": ["A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.83 + 2*Mk.81 ", "A - 2*320L TipTanks [Clean]", "Recon", "Training", "AA - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*LAU-10(Zuni Rockets) [ARMADA]", "AM - 2*320L TipTanks + 2*AN/M3 GunPods + 2*330L Tanks + 2*LAU-3 (Hydra rockets)", "A - 2*500L TipTanks + 2*330L Tanks + Luggage Container [Ferry Long Range]", "A - 2*500L TipTanks + 4*Mk.82HD + 2*LR-25 (API Rockets)", "A - 2*320L TipTanks + 2*330L Tanks [Ferry Medium Range]", "A - 2*500L TipTanks + 2*AN/M3 GunPods + 2*Matra 155 + 2* Belouga", "Runway Interdiction", "A - 2*500L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (API Rockets)", "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD Bombs + 2*LR-25(API Rockets)", "A - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*Mk.82LD + 2*LR-25 (HEI Rockets)", "A - 2*320L TipTanks + 6*Mk.82LD", "Runway Interdiction (36*BAP-100)", "Anti - Light Armoured Vehicle (36*BAT-120 ABL)", "AP - 2*320L TipTanks + 2*DEFA-553 GunPods + 2*330L Tanks + 2*Matra 155 (SNEB rockets)"], "MB-339APAN": ["PAN - Smoke White", "PAN - Smoke White and Color Red", "PAN - Fuel External [RED SMOKE]", "PAN - Full Payload [RED SMOKE] + 2*320L TipTanks", "PAN - Full Payload [GREEN SMOKE] + 2*320L TipTanks", "PAN - Fuel External [GREEN SMOKE]", "PAN - Full Payload [RED SMOKE] + 2*500L TipTanks", "PAN - Smoke White and Color Green", "PAN - Full Payload [GREEN SMOKE] + 2*500L TipTanks"], "Mi-24P": ["2xB8V20 (S-8KOM)+8xATGM 9M114", "2xB8V20 ( S-8KOM)+4xATGM 9M114", "4xB8V20 (S-8KOM)+4xATGM 9M114", "2xB8V20 (S-8KOM)+2xBombs-250+4xATGM 9M114", "2xB8V20 (S-8OFP2)+4xATGM 9M114", "4xUB-32A (S-5KO)+4xATGM 9M114", "4xGUV-1 AP30+4xATGM 9M114", "2xGUV-1 AP30+4xATGM 9M114", "2xGUV-1 (GUN 12.7+2x7.62) +4xATGM 9M114", "2xKMGU (96 AO 2.5RT)+8xATGM 9M114", "2xB-13L+4xATGM 9M114", "2xS-24B+4xATGM 9M114", "4xS-24B+4xATGM 9M114", "2xBombs-500+4xATGM 9M114", "4xBombs-250+4ATGM 9M114", "2xRBK-500 (PTAB-1M)+4xATGM 9M114", "2xRBK-500U (OAB 2.5RT)+4xATGM 9M114", "4xRBK-250 (42 PTAB 2.5M) +4ATGM 9M114", "4xRBK-250-275 (150 AO-1SCh)+4ATGM 9M114", "4xPTB-450 Fuel tank"], "MiG-19P": ["PTB-760 x 2", "K-13A x 2, PTB-760 x 2", "K-13A x 2", "K-13A x 2, ORO-57K x 2, PTB-760 x 2", "ORO-57K x 2, PTB-760 x 2", "ORO-57K x 4", "ORO-57K x 2", "FAB-100M x 2, ORO-57K x 2", "FAB-250 x 2, ORO-57K x 2", "FAB-100M x 2", "FAB-250 x 2"], "MiG-21Bis": ["Patrol, long range", "Patrol, medium range", "Patrol, short range", "Hard targets, BOMBS", "Unknown or mixed targets, BOMBS + ROCKETS", "Soft targets, CLUSTERS + ROCKETS", "Soft targets, CLUSTERS", "Soft targets, scattered", "Few big targets, GROM + BOMBS", "Very hard target, PENETRATION", "Aerial attack, hard targets, CLUSTERS", "Hard targets, ROCKETS, PENETRATION", "Soft targets, ROCKETS, BLAST-FRAGMENTS", "Long range, MIX", "Long range, RADAR GUIDED MISSILES", "Long range, INFRA RED MISSILES", "Escort", "Escort, JAMMER", "Night, ILLUMINATOR", "Long range, JAMMER", "Soft targets, UPK + ROCKETS", "Soft targets, UPK + CLUSTERS", "Patrol, JAMMER", "NUCLEAR A", "NUCLEAR B", "Short range", "AEROBATIC"], "Mirage-F1B": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1BD": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1BE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530EM", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1BQ": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1C-200": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1C": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530EM", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1CG": ["2*AIM-9 JULI, 2*R530IR, 1*Fuel Tank", "4*AIM-9 JULI, 2*R530IR, 1*Fuel Tank", "2*AIM-9 JULI, 2*R530EM, 1*Fuel Tank", "2*AIM-9 JULI, R530IR", "2*AIM-9 JULI, 1*R530IR, 2*Fuel Tank", "2*AIM-9 JULI, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*AIM-9 JULI, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*AIM-9 JULI, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*AIM-9 JULI, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9 JULI, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9 JULI, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CH": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CJ": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CK": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CR": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CT": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1CZ": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1DDA": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1ED": ["2*R550 Magic II, 2*S530, 1*Fuel Tank", "2*R550 Magic II", "2*R550 Magic II, 2*Fuel Tank", "2*R550 Magic II, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic II, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic II, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic II, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic II, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic II, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1EDA": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1EE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, R530EM", "2*R550 Magic I, R530IR", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1EH": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1EQ": ["2*R550 Magic I, 2*S530, 1*Fuel Tank", "2*R550 Magic I", "2*R550 Magic I, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*S530, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1JA": ["2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530EM, 1*Fuel Tank", "2*R550 Magic I, R530IR", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 LD", "2*R550_Magic_1, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550_Magic_1, 8*SAMP 250 HD", "2*R550_Magic_1, 8*SAMP 400 LD", "2*R550_Magic_1, 8*BLU107 Durandal"], "Mirage-F1M-CE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530IR", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "Mirage-F1M-EE": ["2*AIM9-JULI, 2*R530IR, 1*Fuel Tank", "2*R550 Magic I, 2*R530IR, 1*Fuel Tank", "2*AIM9-JULI, R530IR", "2*R550 Magic I, R530IR", "2*AIM9-JULI, 1*R530IR, 2*Fuel Tank", "2*R550 Magic I, 1*R530IR, 2*Fuel Tank", "2*AIM9-J, 2*MATRA F4 SNEB251 (HE), 2*R530IR, 1*Fuel Tank", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 LD", "2*AIM-9J, 2*Fuel Tank, 4*SAMP 400 HD", "2*R550 Magic I, 4*MATRA F1 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB253 (Shaped Charge), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 4*MATRA F4 SNEB256 (AP), 1*Fuel Tank", "2*R550 Magic I, 2*SAMP 250 HD, 2 MATRA F1 SNEB256 (AP), 1*Fuel Tank", "2*AIM-9JULI, 8*SAMP 250 HD", "2*AIM-9JULI, 8*SAMP 400 LD", "2*AIM-9JULI, 8*BLU107 Durandal"], "SA342L": ["M621, 8xSNEB68 EAP", "M621, 8xSNEB68 EAP, IR Deflector", "M621, 8xSNEB68 EAP, IR Deflector, Sand Filter"], "SA342M": ["HOT3x4", "IR Deflector", "Hot3x4, FAS, IR Deflector", "HOT3x2", "Hot3x4, IR Deflector", "Hot3x2, IR Deflector"], "SA342Minigun": ["IR Deflector", "IR Deflector, Sand Filter"], "SA342Mistral": ["Mistral x 4", "Mistral x 4, IR Deflector", "Mistral x 4, IR Deflector, Sand Filter"], "A-20G": ["500 lb GP bomb LD*4"], "Bf-109K-4": ["Fuel Tank", "SC250", "SC500"], "FW-190A8": ["Without pylon", "SC 50 * 4", "AB 250 (w/ SD 10A)", "AB 250 (w/ SD 2)", "AB 500 (w/ SD 10A)", "SC 250 L2", "SC 250 J", "SC 500 J", "SC 500 L2", "SD 250 Stg", "SD 500 A", "Fuel Tank 300 liters", "BR 21"], "FW-190D9": ["SC500", "Fuel Tank", "R4M", "BR 21"], "MosquitoFBMkVI": ["250 lb S.A.P*2; 500 lb S.A.P.*2", "500 lb GP Mk.V*2, 500 lb GP Short tail*2", "100 gal Drop tank*2, 500 lb MC Short tail*2", "RP-3 60lb SAP No2 Mk.I*8, 250 lb A.A.P.*2", "100 gal. Drop tank*2, 250 lb MC Mk.II, RP-3 60lb F No1 Mk.I*4", "500 lb GP Short tail*4"], "P-47D-30": ["AN-M65*2", "Fuel150*2", "AN-M64*2, Fuel110", "AN-M57*3"], "P-47D-30bl1": ["AN-M57*2", "AN-M64*2, Fuel110"], "P-47D-40": ["AN-M65*2", "Fuel150*2", "AN-M57*3", "AN-M64*2, Fuel110", "M8*6, AN-M57*2, Fuel110", "HVAR*10, Fuel110"], "P-51D-30-NA": ["Fuel75*2", "HVAR*6,Fuel75*2", "HVAR*6,M64*2", "HVAR*6", "M64*2", "HVAR*10", "Smokes"], "P-51D": ["Fuel75*2", "HVAR*6,Fuel75*2", "HVAR*6,M64*2", "HVAR*6", "M64*2", "HVAR*10", "Smokes"], "A-50": [], "AH-1W": ["14xHYDRA-70 WP", "38xHYDRA-70 WP", "8xBGM-71, 14xHYDRA-70", "8xBGM-71, 14xHYDRA-70 WP", "8xBGM-71, 38xHYDRA-70 WP", "14xHYDRA-70", "38xHYDRA-70", "8xAGM-114", "28xHYDRA-70", "8xBGM-71, 38xHYDRA-70", "8xAGM-114, 38xHYDRA-70 WP", "8xBGM-71", "8xAGM-114, 14xHYDRA-70 WP", "76xHYDRA-70", "8xAGM-114, 38xHYDRA-70", "8xAGM-114, 14xHYDRA-70"], "AH-64A": ["8xAGM-114", "38xHYDRA-70 WP", "76xHYDRA-70", "8xAGM-114, 38xHYDRA-70 WP", "38xHYDRA-70", "8xAGM-114, 38xHYDRA-70", "AGM-114K*16"], "AH-64D": ["76xHYDRA-70", "38xHYDRA-70", "38xHYDRA-70 WP", "8xAGM-114", "8xAGM-114, 38xHYDRA-70 WP", "8xAGM-114, 38xHYDRA-70", "AGM-114K*16"], "An-26B": [], "An-30M": [], "B-1B": ["Mk-82*84", "AGM-154*12", "GBU-38*48", "CBU-87*30", "CBU-97*30", "GBU-38*16, CBU-97*20", "Mk-84*24", "GBU-31*24", "GBU-31(V)3/B*24", "GBU-31*8, GBU-38*32"], "B-52H": ["Mk-84*18", "Mk 82*51", "Mk20*18", "AGM-86C*20", "AGM-84A*8"], "C-130": [], "C-17A": [], "CH-47D": [], "CH-53E": [], "E-2C": [], "E-3A": [], "F-117A": ["GBU-12*2", "GBU-10*2", "GBU-27*2"], "F-14A": ["AIM-9*2", "AIM-54C*6,AIM-9*2", "AIM-54C*4,AIM-9*2,AIM-7*2"], "F-15C": ["AIM-120B*4, AIM-7M*2, AIM-9M*2, Fuel*3", "AIM-9*2,AIM-120*6,Fuel", "AIM-9*4,AIM-120*4,Fuel*3", "AIM-9*4,AIM-120*4,Fuel", "AIM-9*2,AIM-120*2,AIM-7*4,Fuel*3", "AIM-9*2,AIM-120*6,Fuel*3", "AIM-9*4,AIM-7*4,Fuel", "AIM-120*8,Fuel", "AIM-9*4,AIM-7*4,Fuel*3", "AIM-120*8,Fuel*3", "AIM-9*2,AIM-120*2,AIM-7*4,Fuel"], "F-15E": ["AIM-120B*2,AIM-9M*2,FUEL*3,CBU-87*6,Mk-82AIR*6", "AIM-120B*2,AIM-9M*2,FUEL*3,CBU-97*12", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-82*12", "AIM-120B*4,AIM-120C*4,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,GBU-31*4,AGM-65H,AGM-65D", "AIM-120B*2,AIM-9M*2,FUEL,CBU-103*2,GBU-12,GBU-38,AGM-154C*2", "AIM-120B*4,AIM-9M*4,FUEL*3", "AIM-120B*2,AIM-9M*2,AIM-120C*2,AIM-7M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*4,GBU-38*4,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-31*4,AGM-154C*2", "AIM-120B*2,AIM-9M*2,AIM-7M*4,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-84*8", "AIM-120B*2,AIM-9M*2,FUEL,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*4,GBU-38*4,AGM-65D*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*4,GBU-38*4,AGM-65K*2", "AIM-120C*2,AIM-9M*4,AIM-7M*2,FUEL*3", "AIM-9M*4,AIM-7M*4,FUEL*3", "AIM-120C*2,AIM-9M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,Mk-84*8,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-82AIR*12", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*2,GBU-38*2,AGM-154C*2", "AIM-120B*2,AIM-9M*2,FUEL,GBU-12*2,GBU-38*2,AGM-65H,AGM-65D", "AIM-120B*2,AIM-120C*4,AIM-9M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL*3,Mk-82*6,Mk-82AIR*6", "AIM-120B*2,AIM-9M*2,FUEL,CBU-103*2,GBU-12,GBU-38,AGM-65H*2", "AIM-120B*2,AIM-9M*2,FUEL,AGM-65D*2", "AIM-120B*2,AIM-9M*2,FUEL*2,SUU-25*2,GBU-12,GBU-38", "AIM-120B*6,AIM-9M*2,FUEL*3", "AIM-120B*2,AIM-9M*2,FUEL,Mk-82AIR*12,AGM-154C*2", "AIM-120C*6,AIM-9M*2,FUEL*3", "GBU-31(V)3/B*5, AIM-120C*2, AIM-9M*2"], "F-16A MLU": ["Fuel*3", "AGM-88*2, AGM-65D*2, AIM-120B*2, ECM", "Mk-82*6,AIM-120*2,ECM,Fuel*2", "Mk-82*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "AGM88*2,AGM-65D*6,AIM-120*2,AIM-9*2,ECM", "AIM-120*2,GBU-10*2,ECM,Lantirn ,Fuel*2", "AIM-9*4,ECM", "Mk20*4,AIM-9*2,ECM,Fuel*2", "AIM-120*6,ECM", "AIM-120*4,AIM-9*2,ECM", "AGM88, AGM-65D, AIM-120*2,Fuel*2,ECM", "AGM-65D*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-9*4,ECM,Fuel*2", "AIM-120*4,AIM-9*2,ECM,Fuel*2", "AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "Mk-84*2,AIM-9*2,ECM,Fuel*2", "AIM-120*6,ECM,Fuel*2", "AGM-154*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AGM-88*2,AGM-65D*2,AIM-120B*2,AIM-9M*2,ECM", "Mk20*2,AIM-120*2,ECM,Fuel*2", "AIM-120*2,AIM-9*2,GBU-12*2,ECM,Lantirn ,Fuel*2", "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-120B*2_AIM-9M*2_AGM-119*4_ALQ-131"], "F-16A": ["AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "Mk20*4,AIM-9*2,ECM,Fuel*2", "AIM-9*4,ECM,Fuel*2", "AGM-65D*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-120*4,AIM-9*2,ECM,Fuel*2", "AGM88*2_AGM-65D*6_AIM-120*2_AIM-9*2_ECM", "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "AIM-120*2,AIM-9*2,GBU-12*2,ECM,Lantirn ,Fuel*2", "AIM-120*2,GBU-10*2,ECM,Lantirn ,Fuel*2", "AIM-120*6,ECM,Fuel*2", "AIM-120*6,ECM", "AIM-9*4,ECM", "Fuel*3", "Mk-84*2,AIM-9*2,ECM,Fuel*2", "AIM-120*4,AIM-9*2,ECM", "Mk-82*6,AIM-120*2,ECM,Fuel*2", "Mk-82*2,AIM-120*2,AIM-9*2,ECM,Fuel*2", "AGM-154*2,AIM-120*2,ECM,Lantirn ,Fuel*2", "Mk20*2,AIM-120*2,ECM,Fuel*2", "AGM-119*2,AIM-120B*2,AIM-9M*2,ALQ-184,Fuel*2"], "F-16C bl.50": ["AIM-120B*4, AIM-9M*2, Fuel", "AIM-120C*4, AIM-9M*2, Fuel", "AGM-65G*2, AIM-120C*2, AIM-9M*2, Fuel, ECM", "AGM-65D*6, AIM-120B*2, AIM-9M*2, ECM, Fuel", "Mk86*6, AIM-9M*4, ECM, Fuel", "CBU-97*4, AIM-9M*4, Fuel", "CBU-87*4, AIM-9M*4, Fuel", "AGM-65D*2, CBU-87*2, AIM-9M*4, Fuel", "AGM-65D*2, CBU-97*2, AIM-9M*4, Fuel", "Mk84*2, AIM-9M*4, ECM, Fuel", "GBU-31v1*2, AIM-9M*4, ECM, Fuel", "GBU-31v3*2, AIM-9M*4, ECM, Fuel", "GBU-31v1*2, Mk82*6, AIM-9M*4, Fuel", "Mk84*4, AIM-9M*4, Fuel", "Mk82*12, AIM-9M*4, Fuel", "AGM-154C*2, AIM-9M*4, ECM, Fuel"], "F-16C bl.52d": ["AGM-88*2, AGM-65D*2, AIM-120B*2, ECM,LIGHTNING", "Mk-82*6,AIM-120*2,ECM,Fuel*2,LIGHTNING", "AGM88*2,AGM-65D*6,AIM-120*2,AIM-9*2,ECM,LIGHTNING", "AGM-65D*4,AIM-120*2,ECM,Fuel*2,LIGHTNING", "AIM-120*2,GBU-31*2,ECM,Fuel*2,LIGHTNING", "AIM-120*2,GBU-31(v)*2,ECM,Fuel*2,LIGHTNING", "AGM-88*2,AIM-120*2,AIM-9*2,ECM,Fuel*2,LIGHTNING", "Copy AIM-120*2,GBU-38*2,ECM,Fuel*2,LIGHTNING", "AIM-120*2,GBU-10*2,ECM,Fuel*2,LIGHTNING", "Mk-84*2,AIM-120*2,ECM,Fuel*2,LIGHTNING", "AGM-154*2,AIM-120*2,ECM,Fuel*2,LIGHTNING", "Mk-82AIR*6,AIM-120*2,ECM,Fuel*2,LITENING", "CBU97*4,AIM120*2,ECM,Fuel*2,LITENING", "AGM-88*2,AGM-65D*2,AIM-120B*2,AIM-9M*2,ECM,LITENING", "CBU87*2,AIM-120*2,ECM,Fuel*2,LITENING", "AGM88, AGM-65D, AIM-120*2,Fuel*2,ECM,LITENING", "AIM-120*2,GBU-12*2,ECM,Fuel*2,LITENING", "AGM-65K*2,AIM-120*2,ECM,Lantirn ,Fuel*2,LITENING", "AGM-65G*4,AIM-120C*2,AIM-9M*2,ECM", "AIM-120C*4,AIM-9M*2,ECM,Fuel*2", "AIM-120B*4,AIM-9M*2,ECM,Fuel*2", "AIM-9M*4,Fuel*2", "AIM-120C*2,AIM-120B*2,AIM-9M*2,Fuel*3", "AIM-9P*4", "AIM-9M*2,ECM"], "F-4E": ["AIM-9*4,AIM-7*4", "AGM45*2_AGM-65D*4_AIM7*2_ECM", "AGM-45*2,AIM-7*2,Fuel*2,ECM", "Mk-82*18,AIM-7*2,ECM", "GBU-12*2,AIM-7*2,Fuel*2,ECM", "Mk20*12,AIM-7*2,ECM", "Mk-82*6,AIM-7*2,Fuel*2,ECM", "GBU-10*2,AIM-7*2,Fuel*2,ECM", "Mk20*6,AIM-7*2,Fuel*2,ECM", "AGM-45*4,AIM-7*2,ECM", "AGM-65K*4,AIM-7*2,Fuel*2,ECM", "Fuel*3", "AIM-9*4,AIM-7*4,Fuel*2", "Mk-84*2,AIM-7*2,ECM", "AGM-65K*4,AIM-7M*4,Fuel*3"], "F/A-18A": ["GBU-16*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*6,Fuel", "Mk-84*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-65D*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM88*4_AIM9*2_AIM7_FLIR Pod_Fuel", "AIM-9*4,Fuel*3", "LAU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-88*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel", "MK-82*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*4,AIM-7*2,Fuel*3", "AGM-65K*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "Fuel*3", "AGM88*2_AGM65D*2_AIM9*2_AIM7_FLIR Pod_Fuel", "GBU-12*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*4,AIM-7*4,Fuel", "Mk20*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-84A*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3"], "F/A-18C": ["AGM-62*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-12*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "Fuel*3", "Mk-84*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "GBU-16*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-154*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-120*4,AIM-9*2,Fuel*3", "AGM-65D*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM88*2_AGM65D*2_AIM9*2_AIM7_FLIR Pod_Fuel", "AGM88*4_AIM9*2_AIM7_FLIR Pod_Fuel", "AIM-9*2,AIM-7*6,Fuel", "Mk20*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-120*6,AIM-9*2,Fuel", "LAU-10*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9*2,AIM-7*4,Fuel*3", "MK-82*8,AIM-9*2,AIM-7,FLIR Pod,Fuel", "AIM-120*2,AIM-9*2,AIM-7*2,Fuel*3", "AGM-88*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-84E*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "MK-82*4,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AGM-84A*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3", "AIM-9M*2,AGM-65D*2,Mk-82*4,FLIR Pod,Fuel", "AIM-120*4,AIM-9*2,AIM-7*2,Fuel", "AGM-65K*2,AIM-9*2,AIM-7,FLIR Pod,Fuel*3"], "IL-76MD": [], "IL-78M": [], "Ka-27": [], "Ka-52": ["APU-6 Vikhr-M*2, Kh-25ML*2", "APU-6 Vikhr-M*2", "B-8*4", "KMGU-2 (AO-2.5RT)*4", "B-8*2, APU-6 Vikhr-M*2", "FAB-500*2", "UB-13*2", "FAB-250*4", "Kh-25ML*2, R-73*2"], "KC-10A": [], "KC-135": [], "Mi-24V": ["2xFAB-500", "10xS-13", "2xFAB-250", "4x9M114, 2xFuel tank", "128xS-5", "80xS-8 TsM", "4x9M114, 40xS-8 TsM", "64xS-5", "8x9M114", "4x9M114, 80xS-8", "4x9M114, 128xS-5", "2xKMGU AP", "4xFuel tank", "4xUPK-23", "4x9M114, 10xS-13", "4x9M114, 80xS-8 TsM", "4x9M114", "80xS-8", "40xS-8 TsM", "8x9M114, 40xS-8 TsM", "8x9M114, 10xS-13", "2xFuel tank", "4x9M114, 4xUPK-23", "2xUPK-23", "8x9M114, 64xS-5", "8x9M114, 40xS-8", "20xS-13", "40xS-8", "8x9M114, 2xUPK-23"], "Mi-26": [], "Mi-28N": ["2xFAB-250", "4xFuel tank", "80xS-8", "4xKMGU AP", "4xUPK-23", "16x9M114, 10xS-13", "4xFAB-500", "16x9M114, 2xFAB-500", "40xS-8", "40xS-8 TsM", "2xKMGU AP", "2xUPK-23", "16x9M114, 2xUPK-23", "2xFAB-500", "16x9M114, 40xS-8", "16x9M114", "20xS-13", "16x9M114, 2xKMGU AP", "4xFAB-250", "4xKMGU AT", "16x9M114, 40xS-8 TsM", "80xS-8 TsM", "2xKMGU AT", "9x9M114", "2xFuel tank", "10xS-13", "2xFAB-250, 16x9M114", "16x9M114, 2xKMGU AT"], "Mi-8MT": ["4 x B8", "4 x B8 + 2GUV_AP-30 (GrL 30mm)", "2 x UPK +2 x B8", "2 xB8 + 2GUV_YaKB (MG-12.7+7.62)+ 2GUV_AP-30 (GrL 30mm)", "6 x FAB-100", "2 x B8 + 2 x UPK-23-250", "2 x UPK--23-250"], "MiG-15bis": ["2*FAB-50", "2*FAB-100M", "2*300L", "2*400L", "2*600L", "Fuel tank 300", "Fuel tank 400"], "MiG-23MLD": ["R-60M*4", "B-8*2,R-60M*2,Fuel-800", "UB-32*2,R-60M*2,Fuel-800", "R-24R*2,R-60M*4,Fuel-800", "R-24R,R-24T,R-60M*4,Fuel-800", "R-60M*4,Fuel-800", "FAB-500*2,R-60M*2,Fuel-800", "R-24R*2,R-60M*4", "FAB-250*2,R-60M*2,Fuel-800", "RBK-250*2,R-60M*2,Fuel-800", "RBK-500*2,R-60M*2,Fuel-800", "R-24R,R-24T,R-60M*4"], "MiG-25PD": ["R-40R*2,R-40T*2", "R-40R*4", "R-40R*2,R-60M*2"], "MiG-25RBT": ["FAB-500x2_60x2", "R-60M*2"], "MiG-27K": ["FAB-250*6,R-60M*2,Fuel", "BetAB-500ShP*2,FAB-250*2,R-60*2", "Kh-25MR*2,R-60M*2,Fuel", "Kh-29L*2,R-60M*2,Fuel", "B-8*4", "BetAB-500*2,FAB-500*2,R-60*2", "Kh-25MPU*2,R-60M*2,Fuel", "Kh-29T*2,R-60M*2,Fuel", "FAB-500*2,FAB-250*2,R-60M*2,Fuel", "Kh-25ML*2,R-60M*2,Fuel", "KAB-500*2,R-60M*2,Fuel", "RBK-500AO*2,RBK-250*2,R-60M*2", "UB-32*4", "Kh-29L*2,R-60*2,Fuel"], "MiG-29A": ["Fuel-1150*2,Fuel-1500", "RBK-500AO*4,R-73*2,Fuel", "FAB-250*4,R-73*2,Fuel", "B-8*4,R-73*2,Fuel", "R-60M*4,R-27R*2", "R-73*4,R-27R*2,Fuel-1500", "R-73*6,Fuel-1500", "R-60M*6,Fuel-1500", "S-24*4,R-73*2,Fuel", "FAB-500*4,R-73*2,Fuel", "R-60M*6", "BetAB-500*4,R-73*2,Fuel", "R-73*6", "R-73*2,R-60M*2,R-27R*2,Fuel-1500", "R-60M*4,R-27R*2,Fuel-1500", "RBK-250*4,R-73*2,Fuel", "R-73*4,R-27R*2", "R-73*2,R-60M*2,R-27R*2", "S-24*2,FAB-500*2,R-73*2,Fuel"], "MiG-29G": ["R-73*6,Fuel-1500", "R-73*4,R-27R*2,Fuel-1500", "R-73*2,R-60M*2,R-27R*2", "R-60M*4,R-27R*2,Fuel-1500", "R-73*6", "R-60M*4,R-27R*2", "R-73*4,R-27R*2", "Fuel-1150*2,Fuel-1500", "R-60M*6", "R-60M*6,Fuel-1500", "R-73*2,R-60M*2,R-27R*2,Fuel-1500"], "MiG-29S": ["R-73*2,R-60M*2,R-27R*2", "R-73*4,R-27R*2,Fuel-1500", "R-73*6,Fuel-1500", "R-60M*6,Fuel-1500", "S-24*4,R-73*2,Fuel", "FAB-500*4,R-73*2,Fuel", "BetAB-500*4,R-73*2,Fuel", "RBK-500AO*4,R-73*2,Fuel", "R-73*2,R-60M*2,R-27R*2,Fuel-1500", "R-77*2,R-73*2,Fuel-1500,Fuel-1150*2", "B-8*4,R-73*2,Fuel", "RBK-250*4,R-73*2,Fuel", "R-73*6", "Fuel-1150*2,Fuel-1500", "R-60M*6", "R-60M*4,R-27R*2", "R-73*4,R-27R*2", "R-77*4,R-73*2", "FAB-250*4,R-73*2,Fuel", "R-60M*4,R-27R*2,Fuel-1500", "R-77*4,R-73*2,Fuel-1500", "S-24*2,FAB-500*2,R-73*2,Fuel"], "MiG-31": ["R-40T*2,R-33*4", "R-40T,R-33*4,R-40R", "R-40R*2,R-33*4", "R-60M*4,R-33*4"], "Mirage 2000-5": ["R 550*2,MICA IR*4", "R 550*2,MICA IR*2,MICA AR*2,Fuel*3", "R 550*2,MICA AR*4,Fuel*3", "R 550*2,SUPER 530F*2,Fuel", "Fuel*3", "R 550*2,MICA IR*4,Fuel*3", "R 550*2,MICA AR*4", "R 550*2,SUPER 530F*2"], "MQ-9 Reaper": ["GBU-12*4", "GBU-38*4", "AGM-114K*8,GBU-38*2", "AGM-114K*12"], "OH-58D": ["2xAGM-114, 7xHYDRA-70", "4xAGM-114", "M-3, 7xHYDRA-70", "2xAGM-114, M-3", "14xHYDRA-70", "14xHYDRA-70 WP"], "RQ-1A Predator": ["AGM-114K*2"], "S-3B": ["AGM-84A*2, Mk-82*2", "AGM-84E*2", "AGM-65D, AGM-65K, Mk20*4", "AGM-65D, AGM-65K, Mk82*4", "Mk82*10", "Mk84*2, Mk82*4", "ZUNI Mk71*8, Mk20*4"], "SH-3W": [], "SH-60B": ["AGM-119"], "Su-17M4": ["UB-32*4,R-60M*2,FAB-250*4", "FAB-100*24,R-60M*2", "UB-32*4,R-60M*2,Fuel*2", "B-8*4,R-60M*2,FAB-250*4", "Kh-29L*2,R-60M*2,Fuel*2", "B-8*4,R-60M*2,Fuel*2", "Kh-29T*2,R-60M*2,Fuel*2", "BetAB-500*6,R-60M*2", "Kh-25MR*4,R-60M*2,Fuel*2", "S-24*4,R-60M*2,Fuel*2", "Kh25MPU*2_Kh25ML*2_,R60M*2_Fuel*2", "Kh58*2_Kh25MPU*2_R60M*2_Fuel*2", "FAB-250*16,R-60M*2", "Kh-25ML*4,R-60M*2,Fuel*2", "RBK-500AO*4,SPPU-22*2,R-60M*2", "S-24*4,R-60M*2,FAB-250*4", "Fuel*4", "FAB-500*6,R-60M*2", "Kh-25ML*2,Kh-29L*2,R-60*2"], "Su-24M": ["UB-13*4,FAB-500*2", "Kh-31A*2,R-60M*2,Fuel", "UB-13*4", "KAB-500*4,R-60M*2", "S-25*2,Fuel*3", "Kh31P*2_Kh25ML*2_L-081", "B-8*2,Fuel*3", "FAB-1500*2,R-60M*2", "S-24*4", "BetAB-500*4,R-60M*2", "Kh-25ML*4", "Kh-25MR*4", "FAB-100*24", "Kh-31A*2,R-60M*2", "UB-13*2,Fuel*3", "B-8*2,Fuel*2", "Kh58*2_Kh25ML*2_L-081", "RBK-250*8", "UB-32*4", "Kh-29L*2,R-60M*2", "S-24*2,Fuel*3", "Kh25MPU*2_Kh25ML*2_L-081", "FAB-500*4,R-60M*2", "FAB-250*8", "Fuel*3", "RBK-500AO*4,R-60M*2", "KAB-1500*2,R-60M*2,Fuel", "UB-32*4,FAB-250*4", "Kh-29T*2,R-60M*2", "UB-32*2,Fuel*3", "Kh-59M*2,R-60M*2,Fuel", "S-25*4", "B-8*6"], "Su-24MR": ["SHPIL,ETHER,R-60M*2", "Fuel*2", "TANGAZH,ETHER,R-60M*2,Fuel*2", "TANGAZH,ETHER,R-60M*2", "SHPIL,ETHER,R-60M*2,Fuel*2"], "Su-25": ["RBK-250*2,S-8KOM*80,R-60M*2,Fuel*2", "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", "S-25L*6,UB-13*2,R-60M*2", "S-25*6,SPPU-22*2,R-60M*2", "2-25L*2, KH-25ML*2, RBK-500*2, B-8MI*2, R-60M*2", "S-8KOM*120,R-60M*2,Fuel*2", "FAB-250*4,S-25*2,R-60M*2,Fuel*2", "RBK-500AO*4,S-8KOM*40,R-60M*2,Fuel*2", "FAB-250*2,SPPU-22*2,SAB-100*4,R-60M*2", "RBK-500AO*6,R-60M*2,Fuel*2", "RBK-250*8,R-60M*2", "Kh-29L*2,Kh-25ML*4,R-60M*2", "RBK-250*4,S-8KOM*80,R-60M*2", "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", "S-8TsM*160,R-60*2", "Kh-25ML*4,R-60M*2,Fuel*2", "BetAB-500ShP*8,R-60M*2", "SAB-100*8,R-60*2", "Kh-29L*2,Kh-25ML*4,S-25L*2,R-60M*2", "FAB-500*6,R-60M*2,Fuel*2", "Kh-29L*2,Kh-25ML*2,R-60M*2,Fuel*2", "Kh-29L*2,R-60M*2,Fuel*2", "FAB-100*32,R-60M*2", "FAB-100*16,R-60M*2,Fuel*2", "FAB-250*6,R-60M*2,Fuel*2", "BetAB-500*6,R-60M*2,Fuel*2", "S-25*6,R-60M*2,Fuel*2", "UB-13*6,R-60M*2,Fuel*2", "Kh-25*4,Kh-29T*2,R-60*2", "S-25L*6,R-60*2,Fuel*2"], "Su-25T": ["FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", "Kh-29L*2,Kh-25ML*4,R-73*2,Mercury LLTV Pod,MPS-410", "KAB-500Kr*2,Kh-25ML*2,R-73*2,MPS-410,Fuel*2", "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", "BetAB-500ShP*8,R-60M*2", "UB-13*6,R-60M*2,Fuel*2", "Kh-29T*2,R-73*2,Fuel*2,MPS-410", "Kh58*2_Kh25ML*4_R73*2_L-081_MPS-410", "FAB-250*4,UB-13*2,R-60M*2,Fuel*2", "KH-29T*2, VIKHR*2, ECM", "Kh-29T*2,Kh-25ML*4,R-73*2,MPS-410", "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", "FAB-500*6,R-60M*2,Fuel*2", "Fuel*4", "APU-8 Vikhr-M*2,Kh-25ML,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", "S-8KOM*120,R-60M*2,Fuel*2", "KMGU-2 (PTAB-2.5KO)*8,R-60M*2", "FAB-250*6,R-60M*2,Fuel*2", "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,MPS-410", "FAB-100*32,R-60M*2", "RBK-250*8,R-60M*2", "S-25L*6,UB-13*2,R-60M*2", "FAB-250*4,S-25*2,R-60M*2,Fuel*2", "S-25*2,SPPU-22*4,R-60M*2,R-73*2", "KMGU-2 (AO-2.5RT)*8,R-60M*2", "APU-8 Vikhr-M*2,S-25L*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,MPS-410", "S-25*6,R-60M*2,Fuel*2", "RBK-500AO*6,R-60M*2,Fuel*2", "Kh58*2_Kh25MPU*2_Kh25ML*2_R73*2_L-081_MPS-410", "RBK-250*4,UB-32*4,R-60M*2", "Kh25MPU*4_R73*2_Fuel*2_L-081_MPS-410", "BetAB-500*6,R-60M*2,Fuel*2", "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", "FAB-100*16,R-60M*2,Fuel*2", "Kh-29L*2,Kh-25ML*4,R-73*2,ECM"], "Su-25TM": ["BetAB-500ShP*6,R-73*2,ECM", "APU-8 Vikhr-M*2,R-60M*2,R-73*2,SPPU-22*2,Mercury LLTV Pod", "Kh-29T*2,Kh-25ML*2,R-73*2,Fuel*2,ECM", "Kh-58*2_Kh-25MPU*4_R-73*2_L-081_MPS410", "S-25L*6,UB-13*2,R-60M*2", "Kh-35*2_R-73*2_Fuel*2_MPS410_Kopyo-25", "Kh-31A*2_R-73*2_Fuel*2_MPS410_Kopyo-25", "Fuel*4", "BetAB-500*6,R-60M*2,Fuel*2", "KAB-500Kr*2,Kh-25ML*2,R-73*2,Fuel*2,ECM", "Kh-29L*2,R-73*2,Fuel*2,Mercury LLTV Pod,ECM", "UB-13*6,R-60M*2,Fuel*2", "S-25*2,SPPU-22*4,R-60M*2,R-73*2", "Kh-31P*2_Kh-25ML*4_R-73*2_L-081_MPS410", "UB-32*6,R-60M*2,Fuel*2", "FAB-100*16,R-60M*2,Fuel*2", "FAB-250*6,R-60M*2,Fuel*2", "FAB-500*6,R-60M*2,Fuel*2", "Kh-25MPU*4_R-73*2_Fuel*2_L-081_MPS410", "S-25*6,R-60M*2,Fuel*2", "RBK-500AO*4,UB-32*2,R-60M*2,Fuel*2", "FAB-250*4,UB-13*2,R-60M*2,SPPU-22*2", "Kh-31P*2_Kh-25MPU*4_R-73*2_L-081_MPS410", "RBK-500AO*6,R-60M*2,Fuel*2", "FAB-100*32,R-60M*2", "RBK-250*2,UB-32*4,R-60M*2,Fuel*2", "RBK-250*8,R-60M*2", "APU-8 Vikhr-M*2,R-73*2,SPPU-22*2,Mercury LLTV Pod,ECM", "RBK-250*4,UB-32*4,R-60M*2", "FAB-250*4,SPPU-22*2,SAB-100*2,R-60M*2", "FAB-250*4,S-25*2,R-60M*2,Fuel*2", "FAB-250*4,UB-13*2,R-60M*2,Fuel*2"], "Su-27": ["R-73*4,R-27ER*4,R-27ET*2", "KMGU-2 (AO-2.5RT)*5,R-73*2,ECM", "BetAB-500ShP*6,R-73*2,ECM", "KMGU-2 (PTAB-2.5KO)*5,R-73*2,ECM", "R-73*2,R-27ER*6,ECM", "R-73*6", "S-13*10,RBK-500AO*2,FAB-500*2,R-73*2,ECM", "R-73*4,R-27ER*6", "R-73*2,R-27ER*4,R-27ET*2,ECM", "R-73*4,ECM", "ECM", "FAB-500*6,R-73*2,ECM", "S-25*2,FAB-500*4,R-73*4", "S-25*4, FAB-500*4, R-73*2, ECM", "CAS S-8KOM Rockets + RBK-500 PTAB1", "CAS S-8OFP Rockets + FAB-500 Bombs", "CAS S-8OFP Rockets", "CAS S-8OFP Rockets + FAB-100 Bombs", "CAS S-8KOM Rockets + FAB-100 Bombs", "CAS S-13 Rockets", "CAS S-8KOM Rockets + FAB-250 Bombs", "CAS S-8KOM Rockets + RBK-250 PTAB2.5", "CAS S-8KOM Rockets", "CAS S-8KOM Rockets + FAB-500 Bombs", "CAS S-8KOM Rockets + RBK-500 PTAB10", "CAS S-8KOM Rockets + KMGU PTAB", " CAS S-25 Rockets", "CAS S-25 Rockets + FAB-500 Bombs"], "Su-30": ["R-73*2,R-77*6,ECM", "R-73*2,R-27T*2,R-27R*4", "RBK-500AO*6,R-73*2,ECM", "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", "R-73*4,R-27T*2,R-27R*4", "R-73*2,R-77*2,Kh-35*2,ECM", "Kh-35*2,Kh-31P*2,R-73*2,R-77*2,ECM", "FAB-250*4,B-8*2,R-73*2,ECM", "ECM", "KAB-1500*2,R-73*2,R-77*2,ECM", "RBK-250*6,R-73*2,ECM", "R-73*4,R-77*6", "FAB-250*4,S-25*2,R-73*2,ECM", "R-73*2,R-27R*2,R-27ER*4,ECM", "R-73*2,R-27T*2,R-27ER*2,R-77*2,ECM", "FAB-1500*2,R-73*2,R-77*2,ECM", "R-73*4,R-27T*2,R-27ER*2,R-77*2", "Kh-59M*2,R-73*2,R-77*2,ECM", "FAB-500*6,R-73*2,ECM", "R-73*4,R-27R*2,R-27ER*4", "Kh-29L*4,R-73*2,R-77*2,ECM", "BetAB-500*6,R-73*2,ECM", "R-73*4", "FAB-250*4,UB-13*2,R-73*2,ECM", "R-73*2,R-77*4,R-27ER*2,ECM", "KAB-500*4,R-73*2,R-77*2,ECM", "FAB-250*6,R-73*2,ECM", "R-73*4,R-77*4,R-27ER*2", "Kh-29T*4,R-73*2,R-77*2,ECM", "Kh-31P*2,Kh-31A*2,R-73*2,R-77*2,ECM", "Kh-31P*4,R-73*2,R-77*2,ECM"], "Su-33": ["RBK-250*6,R-73*2,R-27R*2,ECM", "R-73*4", "R-73*4,R-27R*2,R-27ER*6", "R-73*2,R-27ET*2,R-27ER*6,ECM", "R-73*4,R-27ET*2,R-27ER*6", "FAB-250*6,R-73*2,R-27R*2,ECM", "R-73*2,R-27R*2,R-27ER*6,ECM", "ECM", "BetAB-500*6,R-73*2,R-27R*2,ECM", "RBK-500AO*6,R-73*2,R-27R*2,ECM", "UB-13*4,FAB-250*4,R-73*2,ECM", "S-25*4,FAB-250*4,R-73*2,ECM", "FAB-500*6,R-73*2,R-27R*2,ECM", "B-8*4,FAB-250*4,R-73*2,ECM", "S-25*4,FAB-500*4,R-73*4", "CAS S-8KOM rockets + FAB500", "CAS S-8OFP rockets + FAB500", "CAS S-13 Rockets + FAB500", "CAS S-13 Rockets + FAB100", "CAS S-8KOM rockets + FAB250", "CAS S-25 Rockets + FAB500", "CAS S-8KOM rockets + RBK500 PTAB10", "CAS S-8KOM rockets + RBK500 PTAB1"], "Su-34": ["UB-13*4,FAB-250*4,R-73*2,ECM", "FAB-100*28,R-73*2,ECM", "BetAB-500*8,R-73*2,ECM", "Kh-29L*4,R-73*2,R-77*2,ECM", "KAB-500*4,R-73*2,R-77*2,ECM", "RBK-250 PTAB-2.5M*8,R-73*2,ECM", "FAB-250*8,R-73*2,ECM", "ECM", "Kh-29T*4,R-73*2,R-77*2,ECM", "RBK-500 PTAB-10-5*8,R-73*2,ECM", "FAB-1500*3,R-73*2,R-77*2,ECM", "Kh-59M*2,R-73*2,R-77*2,ECM", "B-8*6,R-73*2,R-27R*2,ECM", "FAB-500*8,R-73*2,ECM", "KAB-1500*2,R-73*2,R-77*2,ECM", "Kh-29T*4,R-73*2,R-27R*2,ECM", "Kh-31A*4,Kh-31P*2,R-73*2,R-27R*2,ECM", "Kh-31A*6,R-73*2,R-27R*2,ECM", "Kh-31P*4,R-73*2,R-27R*2,ECM", "Kh-29L*4,R-73*2,R-27R*2,ECM"], "Tornado GR4": ["AIM-9M*2, Fuel*2, ECM", "ALARM*4, Fuel*2, ECM", "GBU-16*2, AIM-9M*2, Fuel*2, ECM", "BL755*4, AIM-9M*2, Fuel*2, ECM", "Sea Eagle*2, AIM-9M*2, Fuel*2, ECM"], "Tornado IDS": ["Kormoran*2,AIM-9*2,Fuel*2", "GBU-16*2,AIM-9*2,Fuel*2", "Fuel*2", "AGM-88*4,AIM-9*2,ECM", "AGM-88*2,AIM-9*2,Fuel*2,ECM", "Kormoran*4,AIM-9*2", "Kormoran*2,AIM-9*2,AGM-88*2", "Mk-82*4,AIM-9*2,Fuel*2"], "Tu-142": ["Kh-35*6"], "Tu-160": ["Kh-65*12"], "Tu-22M3": ["Kh-22N", "Kh-22N*2", "FAB-250*69", "FAB-500*33", "FAB-500*33, FAB-250*36", "FAB-250*33"], "Tu-95MS": ["Kh-65*6"], "UH-1H": ["M134 Minigun*2, XM158*2"], "UH-60A": [] };
|
||
},{}],13:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _Unit_instances, _Unit_selectable, _Unit_selected, _Unit_preventClick, _Unit_pathMarkers, _Unit_pathPolyline, _Unit_targetsPolylines, _Unit_marker, _Unit_timer, _Unit_onClick, _Unit_onDoubleClick, _Unit_updateMarker, _Unit_drawPath, _Unit_clearPath;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.Bomb = exports.Missile = exports.Weapon = exports.NavyUnit = exports.GroundUnit = exports.Helicopter = exports.Aircraft = exports.AirUnit = exports.Unit = void 0;
|
||
const leaflet_1 = require("leaflet");
|
||
const __1 = require("..");
|
||
const unitmarker_1 = require("./unitmarker");
|
||
const dcs_1 = require("../dcs/dcs");
|
||
class Unit {
|
||
static getConstructor(name) {
|
||
if (name === "GroundUnit")
|
||
return GroundUnit;
|
||
if (name === "Aircraft")
|
||
return Aircraft;
|
||
if (name === "Helicopter")
|
||
return Helicopter;
|
||
if (name === "Missile")
|
||
return Missile;
|
||
if (name === "Bomb")
|
||
return Bomb;
|
||
if (name === "NavyUnit")
|
||
return NavyUnit;
|
||
}
|
||
constructor(ID, marker) {
|
||
_Unit_instances.add(this);
|
||
_Unit_selectable.set(this, void 0);
|
||
_Unit_selected.set(this, void 0);
|
||
_Unit_preventClick.set(this, void 0);
|
||
_Unit_pathMarkers.set(this, void 0);
|
||
_Unit_pathPolyline.set(this, void 0);
|
||
_Unit_targetsPolylines.set(this, void 0);
|
||
_Unit_marker.set(this, void 0);
|
||
_Unit_timer.set(this, void 0);
|
||
this.ID = ID;
|
||
/* Names */
|
||
this.name = "";
|
||
this.unitName = "";
|
||
this.groupName = "";
|
||
/* Position and speed */
|
||
this.latitude = 0;
|
||
this.longitude = 0;
|
||
this.altitude = 0;
|
||
this.heading = 0;
|
||
this.speed = 0;
|
||
/* Tasking */
|
||
this.coalitionID = 0;
|
||
this.alive = true;
|
||
this.currentTask = "";
|
||
/* Formation */
|
||
this.leader = false;
|
||
this.wingman = false;
|
||
this.wingmen = [];
|
||
this.formation = "";
|
||
/* Structures */
|
||
this.type = null;
|
||
this.flags = null;
|
||
this.activePath = null;
|
||
this.missionData = null;
|
||
__classPrivateFieldSet(this, _Unit_selectable, true, "f");
|
||
__classPrivateFieldSet(this, _Unit_timer, 0, "f");
|
||
/* The marker is set by the inherited class */
|
||
__classPrivateFieldSet(this, _Unit_marker, marker, "f");
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").on('click', (e) => __classPrivateFieldGet(this, _Unit_instances, "m", _Unit_onClick).call(this, e));
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").on('dblclick', (e) => __classPrivateFieldGet(this, _Unit_instances, "m", _Unit_onDoubleClick).call(this, e));
|
||
__classPrivateFieldSet(this, _Unit_selected, false, "f");
|
||
__classPrivateFieldSet(this, _Unit_preventClick, false, "f");
|
||
__classPrivateFieldSet(this, _Unit_pathMarkers, [], "f");
|
||
__classPrivateFieldSet(this, _Unit_pathPolyline, new leaflet_1.Polyline([], { color: '#2d3e50', weight: 3, opacity: 0.5, smoothFactor: 1 }), "f");
|
||
__classPrivateFieldGet(this, _Unit_pathPolyline, "f").addTo((0, __1.getMap)());
|
||
__classPrivateFieldSet(this, _Unit_targetsPolylines, [], "f");
|
||
}
|
||
update(response) {
|
||
for (let entry in response) {
|
||
// @ts-ignore
|
||
this[entry] = response[entry];
|
||
}
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_updateMarker).call(this);
|
||
if (this.getSelected())
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_drawPath).call(this);
|
||
else
|
||
__classPrivateFieldGet(this, _Unit_instances, "m", _Unit_clearPath).call(this);
|
||
/*
|
||
this.wingmen = [];
|
||
if (response["wingmenIDs"] != undefined)
|
||
{
|
||
for (let ID of response["wingmenIDs"])
|
||
{
|
||
this.wingmen.push(unitsManager.getUnitByID(ID));
|
||
}
|
||
}
|
||
this.formation = response["formation"];
|
||
|
||
this.missionData = missionData.getUnitData(this.ID)
|
||
|
||
this.setSelected(this.getSelected() && this.alive)
|
||
|
||
|
||
|
||
this.clearTargets();
|
||
this.missionData = missionData.getUnitData(this.ID);
|
||
if (this.missionData != undefined)
|
||
{
|
||
if (this.getSelected())
|
||
{
|
||
this.drawTargets();
|
||
}
|
||
}
|
||
*/
|
||
}
|
||
setSelected(selected) {
|
||
/* Only alive units can be selected. Some units are not selectable (weapons) */
|
||
if ((this.alive || !selected) && __classPrivateFieldGet(this, _Unit_selectable, "f") && __classPrivateFieldGet(this, _Unit_selected, "f") != selected) {
|
||
__classPrivateFieldSet(this, _Unit_selected, selected, "f");
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").setSelected(selected);
|
||
(0, __1.getUnitsManager)().onUnitSelection();
|
||
}
|
||
}
|
||
getSelected() {
|
||
return __classPrivateFieldGet(this, _Unit_selected, "f");
|
||
}
|
||
addDestination(latlng) {
|
||
var path = {};
|
||
if (this.activePath != undefined) {
|
||
path = this.activePath;
|
||
path[(Object.keys(path).length + 1).toString()] = latlng;
|
||
}
|
||
else {
|
||
path = { "1": latlng };
|
||
}
|
||
(0, dcs_1.addDestination)(this.ID, path);
|
||
}
|
||
clearDestinations() {
|
||
this.activePath = undefined;
|
||
}
|
||
/*
|
||
drawTargets()
|
||
{
|
||
for (let typeIndex in this.missionData['targets'])
|
||
{
|
||
for (let index in this.missionData['targets'][typeIndex])
|
||
{
|
||
var targetData = this.missionData['targets'][typeIndex][index];
|
||
var target = unitsManager.getUnitByID(targetData.object["id_"])
|
||
if (target != undefined){
|
||
var startLatLng = new LatLng(this.latitude, this.longitude)
|
||
var endLatLng = new LatLng(target.latitude, target.longitude)
|
||
|
||
var color;
|
||
if (typeIndex === "radar")
|
||
{
|
||
color = "#FFFF00";
|
||
}
|
||
else if (typeIndex === "visual")
|
||
{
|
||
color = "#FF00FF";
|
||
}
|
||
else if (typeIndex === "rwr")
|
||
{
|
||
color = "#00FF00";
|
||
}
|
||
else
|
||
{
|
||
color = "#FFFFFF";
|
||
}
|
||
var targetPolyline = new Polyline([startLatLng, endLatLng], {color: color, weight: 3, opacity: 1, smoothFactor: 1});
|
||
targetPolyline.addTo(map.getMap());
|
||
this.#targetsPolylines.push(targetPolyline)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
clearTargets()
|
||
{
|
||
for (let index in this.#targetsPolylines)
|
||
{
|
||
map.getMap().removeLayer(this.#targetsPolylines[index])
|
||
}
|
||
}
|
||
*/
|
||
attackUnit(targetID) {
|
||
// Call DCS attackUnit function
|
||
if (this.ID != targetID) {
|
||
(0, dcs_1.attackUnit)(this.ID, targetID);
|
||
}
|
||
else {
|
||
// TODO: show a message
|
||
}
|
||
}
|
||
}
|
||
exports.Unit = Unit;
|
||
_Unit_selectable = new WeakMap(), _Unit_selected = new WeakMap(), _Unit_preventClick = new WeakMap(), _Unit_pathMarkers = new WeakMap(), _Unit_pathPolyline = new WeakMap(), _Unit_targetsPolylines = new WeakMap(), _Unit_marker = new WeakMap(), _Unit_timer = new WeakMap(), _Unit_instances = new WeakSet(), _Unit_onClick = function _Unit_onClick(e) {
|
||
__classPrivateFieldSet(this, _Unit_timer, setTimeout(() => {
|
||
if (!__classPrivateFieldGet(this, _Unit_preventClick, "f")) {
|
||
if ((0, __1.getMap)().getState() === 'IDLE' || (0, __1.getMap)().getState() === 'MOVE_UNIT' || e.originalEvent.ctrlKey) {
|
||
if (!e.originalEvent.ctrlKey) {
|
||
(0, __1.getUnitsManager)().deselectAllUnits();
|
||
}
|
||
this.setSelected(true);
|
||
}
|
||
}
|
||
__classPrivateFieldSet(this, _Unit_preventClick, false, "f");
|
||
}, 200), "f");
|
||
}, _Unit_onDoubleClick = function _Unit_onDoubleClick(e) {
|
||
clearTimeout(__classPrivateFieldGet(this, _Unit_timer, "f"));
|
||
__classPrivateFieldSet(this, _Unit_preventClick, true, "f");
|
||
var options = [
|
||
{ 'tooltip': 'Attack', 'src': 'attack.png', 'callback': () => { (0, __1.getMap)().hideSelectionWheel(); (0, __1.getUnitsManager)().attackUnit(this.ID); } },
|
||
{ 'tooltip': 'Go to tanker', 'src': 'tanker.png', 'callback': () => { (0, __1.getMap)().hideSelectionWheel(); /*showMessage("Function not implemented yet");*/ } },
|
||
{ 'tooltip': 'RTB', 'src': 'rtb.png', 'callback': () => { (0, __1.getMap)().hideSelectionWheel(); /*showMessage("Function not implemented yet");*/ } }
|
||
];
|
||
if (!this.leader && !this.wingman) {
|
||
options.push({ 'tooltip': 'Create formation', 'src': 'formation.png', 'callback': () => { (0, __1.getMap)().hideSelectionWheel(); /*unitsManager.createFormation(this.ID);*/ } });
|
||
}
|
||
(0, __1.getMap)().showSelectionWheel(e.originalEvent, options, false);
|
||
}, _Unit_updateMarker = function _Unit_updateMarker() {
|
||
/* Add the marker if not present */
|
||
if (!(0, __1.getMap)().hasLayer(__classPrivateFieldGet(this, _Unit_marker, "f"))) {
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").addTo((0, __1.getMap)());
|
||
}
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").setLatLng(new leaflet_1.LatLng(this.latitude, this.longitude));
|
||
__classPrivateFieldGet(this, _Unit_marker, "f").draw({
|
||
heading: this.heading,
|
||
speed: this.speed,
|
||
altitude: this.altitude,
|
||
alive: this.alive
|
||
});
|
||
}, _Unit_drawPath = function _Unit_drawPath() {
|
||
if (this.activePath != null) {
|
||
var _points = [];
|
||
_points.push(new leaflet_1.LatLng(this.latitude, this.longitude));
|
||
/* Add markers if missing */
|
||
while (__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length < Object.keys(this.activePath).length) {
|
||
var marker = new leaflet_1.Marker([0, 0]).addTo((0, __1.getMap)());
|
||
__classPrivateFieldGet(this, _Unit_pathMarkers, "f").push(marker);
|
||
}
|
||
/* Remove markers if too many */
|
||
while (__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length > Object.keys(this.activePath).length) {
|
||
(0, __1.getMap)().removeLayer(__classPrivateFieldGet(this, _Unit_pathMarkers, "f")[__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length - 1]);
|
||
__classPrivateFieldGet(this, _Unit_pathMarkers, "f").splice(__classPrivateFieldGet(this, _Unit_pathMarkers, "f").length - 1, 1);
|
||
}
|
||
/* Update the position of the existing markers (to avoid creating markers uselessly) */
|
||
for (let WP in this.activePath) {
|
||
var destination = this.activePath[WP];
|
||
__classPrivateFieldGet(this, _Unit_pathMarkers, "f")[parseInt(WP) - 1].setLatLng([destination.lat, destination.lng]);
|
||
_points.push(new leaflet_1.LatLng(destination.lat, destination.lng));
|
||
__classPrivateFieldGet(this, _Unit_pathPolyline, "f").setLatLngs(_points);
|
||
}
|
||
}
|
||
}, _Unit_clearPath = function _Unit_clearPath() {
|
||
for (let WP in __classPrivateFieldGet(this, _Unit_pathMarkers, "f")) {
|
||
(0, __1.getMap)().removeLayer(__classPrivateFieldGet(this, _Unit_pathMarkers, "f")[WP]);
|
||
}
|
||
__classPrivateFieldSet(this, _Unit_pathMarkers, [], "f");
|
||
__classPrivateFieldGet(this, _Unit_pathPolyline, "f").setLatLngs([]);
|
||
};
|
||
class AirUnit extends Unit {
|
||
}
|
||
exports.AirUnit = AirUnit;
|
||
class Aircraft extends AirUnit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.UnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Aircraft = Aircraft;
|
||
class Helicopter extends AirUnit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.UnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Helicopter = Helicopter;
|
||
class GroundUnit extends Unit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.UnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.GroundUnit = GroundUnit;
|
||
class NavyUnit extends Unit {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.UnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.NavyUnit = NavyUnit;
|
||
class Weapon extends Unit {
|
||
}
|
||
exports.Weapon = Weapon;
|
||
class Missile extends Weapon {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.UnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Missile = Missile;
|
||
class Bomb extends Weapon {
|
||
constructor(ID, options) {
|
||
var marker = new unitmarker_1.UnitMarker(options);
|
||
super(ID, marker);
|
||
}
|
||
}
|
||
exports.Bomb = Bomb;
|
||
},{"..":8,"../dcs/dcs":7,"./unitmarker":15,"leaflet":1}],14:[function(require,module,exports){
|
||
"use strict";
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.unitTypes = void 0;
|
||
exports.unitTypes = {};
|
||
/* NAVY */
|
||
exports.unitTypes.navy = {};
|
||
exports.unitTypes.navy.blue = [
|
||
"VINSON",
|
||
"PERRY",
|
||
"TICONDEROG"
|
||
];
|
||
exports.unitTypes.navy.red = [
|
||
"ALBATROS",
|
||
"KUZNECOW",
|
||
"MOLNIYA",
|
||
"MOSCOW",
|
||
"NEUSTRASH",
|
||
"PIOTR",
|
||
"REZKY"
|
||
];
|
||
exports.unitTypes.navy.civil = [
|
||
"ELNYA",
|
||
"Dry-cargo ship-2",
|
||
"Dry-cargo ship-1",
|
||
"ZWEZDNY"
|
||
];
|
||
exports.unitTypes.navy.submarine = [
|
||
"KILO",
|
||
"SOM"
|
||
];
|
||
exports.unitTypes.navy.speedboat = [
|
||
"speedboat"
|
||
];
|
||
/* VEHICLES (GROUND) */
|
||
exports.unitTypes.vehicles = [];
|
||
exports.unitTypes.vehicles.Howitzers = [
|
||
"2B11 mortar",
|
||
"SAU Gvozdika",
|
||
"SAU Msta",
|
||
"SAU Akatsia",
|
||
"SAU 2-C9",
|
||
"M-109"
|
||
];
|
||
exports.unitTypes.vehicles.IFV = [
|
||
"AAV7",
|
||
"BMD-1",
|
||
"BMP-1",
|
||
"BMP-2",
|
||
"BMP-3",
|
||
"Boman",
|
||
"BRDM-2",
|
||
"BTR-80",
|
||
"BTR_D",
|
||
"Bunker",
|
||
"Cobra",
|
||
"LAV-25",
|
||
"M1043 HMMWV Armament",
|
||
"M1045 HMMWV TOW",
|
||
"M1126 Stryker ICV",
|
||
"M-113",
|
||
"M1134 Stryker ATGM",
|
||
"M-2 Bradley",
|
||
"Marder",
|
||
"MCV-80",
|
||
"MTLB",
|
||
"Paratrooper RPG-16",
|
||
"Paratrooper AKS-74",
|
||
"Sandbox",
|
||
"Soldier AK",
|
||
"Infantry AK",
|
||
"Soldier M249",
|
||
"Soldier M4",
|
||
"Soldier M4 GRG",
|
||
"Soldier RPG",
|
||
"TPZ"
|
||
];
|
||
exports.unitTypes.vehicles.MLRS = [
|
||
"Grad-URAL",
|
||
"Uragan_BM-27",
|
||
"Smerch",
|
||
"MLRS"
|
||
];
|
||
exports.unitTypes.vehicles.SAM = [
|
||
"2S6 Tunguska",
|
||
"Kub 2P25 ln",
|
||
"5p73 s-125 ln",
|
||
"S-300PS 5P85C ln",
|
||
"S-300PS 5P85D ln",
|
||
"SA-11 Buk LN 9A310M1",
|
||
"Osa 9A33 ln",
|
||
"Tor 9A331",
|
||
"Strela-10M3",
|
||
"Strela-1 9P31",
|
||
"SA-11 Buk CC 9S470M1",
|
||
"SA-8 Osa LD 9T217",
|
||
"Patriot AMG",
|
||
"Patriot ECS",
|
||
"Gepard",
|
||
"Hawk pcp",
|
||
"SA-18 Igla manpad",
|
||
"SA-18 Igla comm",
|
||
"Igla manpad INS",
|
||
"SA-18 Igla-S manpad",
|
||
"SA-18 Igla-S comm",
|
||
"Vulcan",
|
||
"Hawk ln",
|
||
"M48 Chaparral",
|
||
"M6 Linebacker",
|
||
"Patriot ln",
|
||
"M1097 Avenger",
|
||
"Patriot EPP",
|
||
"Patriot cp",
|
||
"Roland ADS",
|
||
"S-300PS 54K6 cp",
|
||
"Stinger manpad GRG",
|
||
"Stinger manpad dsr",
|
||
"Stinger comm dsr",
|
||
"Stinger manpad",
|
||
"Stinger comm",
|
||
"ZSU-23-4 Shilka",
|
||
"ZU-23 Emplacement Closed",
|
||
"ZU-23 Emplacement",
|
||
"ZU-23 Closed Insurgent",
|
||
"Ural-375 ZU-23 Insurgent",
|
||
"ZU-23 Insurgent",
|
||
"Ural-375 ZU-23"
|
||
];
|
||
exports.unitTypes.vehicles.Radar = [
|
||
"1L13 EWR",
|
||
"Kub 1S91 str",
|
||
"S-300PS 40B6M tr",
|
||
"S-300PS 40B6MD sr",
|
||
"55G6 EWR",
|
||
"S-300PS 64H6E sr",
|
||
"SA-11 Buk SR 9S18M1",
|
||
"Dog Ear radar",
|
||
"Hawk tr",
|
||
"Hawk sr",
|
||
"Patriot str",
|
||
"Hawk cwar",
|
||
"p-19 s-125 sr",
|
||
"Roland Radar",
|
||
"snr s-125 tr"
|
||
];
|
||
exports.unitTypes.vehicles.Structures = [
|
||
"house1arm",
|
||
"house2arm",
|
||
"outpost_road",
|
||
"outpost",
|
||
"houseA_arm"
|
||
];
|
||
exports.unitTypes.vehicles.Tanks = [
|
||
"Challenger2",
|
||
"Leclerc",
|
||
"Leopard1A3",
|
||
"Leopard-2",
|
||
"M-60",
|
||
"M1128 Stryker MGS",
|
||
"M-1 Abrams",
|
||
"T-55",
|
||
"T-72B",
|
||
"T-80UD",
|
||
"T-90"
|
||
];
|
||
exports.unitTypes.vehicles.Unarmed = [
|
||
"Ural-4320 APA-5D",
|
||
"ATMZ-5",
|
||
"ATZ-10",
|
||
"GAZ-3307",
|
||
"GAZ-3308",
|
||
"GAZ-66",
|
||
"M978 HEMTT Tanker",
|
||
"HEMTT TFFT",
|
||
"IKARUS Bus",
|
||
"KAMAZ Truck",
|
||
"LAZ Bus",
|
||
"Hummer",
|
||
"M 818",
|
||
"MAZ-6303",
|
||
"Predator GCS",
|
||
"Predator TrojanSpirit",
|
||
"Suidae",
|
||
"Tigr_233036",
|
||
"Trolley bus",
|
||
"UAZ-469",
|
||
"Ural ATsP-6",
|
||
"Ural-375 PBU",
|
||
"Ural-375",
|
||
"Ural-4320-31",
|
||
"Ural-4320T",
|
||
"VAZ Car",
|
||
"ZiL-131 APA-80",
|
||
"SKP-11",
|
||
"ZIL-131 KUNG",
|
||
"ZIL-4331"
|
||
];
|
||
/* AIRPLANES */
|
||
exports.unitTypes.air = {};
|
||
exports.unitTypes.air.CAP = [
|
||
"F-4E",
|
||
"F/A-18C",
|
||
"MiG-29S",
|
||
"F-14A",
|
||
"Su-27",
|
||
"MiG-23MLD",
|
||
"Su-33",
|
||
"MiG-25RBT",
|
||
"Su-30",
|
||
"MiG-31",
|
||
"Mirage 2000-5",
|
||
"F-15C",
|
||
"F-5E",
|
||
"F-16C bl.52d",
|
||
];
|
||
exports.unitTypes.air.CAS = [
|
||
"Tornado IDS",
|
||
"F-4E",
|
||
"F/A-18C",
|
||
"MiG-27K",
|
||
"A-10C",
|
||
"Su-25",
|
||
"Su-34",
|
||
"Su-17M4",
|
||
"F-15E",
|
||
];
|
||
exports.unitTypes.air.strike = [
|
||
"Tu-22M3",
|
||
"B-52H",
|
||
"F-111F",
|
||
"Tu-95MS",
|
||
"Su-24M",
|
||
"Tu-160",
|
||
"F-117A",
|
||
"B-1B",
|
||
"Tu-142",
|
||
];
|
||
exports.unitTypes.air.tank = [
|
||
"S-3B Tanker",
|
||
"KC-135",
|
||
"IL-78M",
|
||
];
|
||
exports.unitTypes.air.awacs = [
|
||
"A-50",
|
||
"E-3A",
|
||
"E-2D",
|
||
];
|
||
exports.unitTypes.air.drone = [
|
||
"MQ-1A Predator",
|
||
"MQ-9 Reaper",
|
||
];
|
||
exports.unitTypes.air.transport = [
|
||
"C-130",
|
||
"An-26B",
|
||
"An-30M",
|
||
"C-17A",
|
||
"IL-76MD",
|
||
];
|
||
},{}],15:[function(require,module,exports){
|
||
"use strict";
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
o[k2] = m[k];
|
||
}));
|
||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||
}) : function(o, v) {
|
||
o["default"] = v;
|
||
});
|
||
var __importStar = (this && this.__importStar) || function (mod) {
|
||
if (mod && mod.__esModule) return mod;
|
||
var result = {};
|
||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||
__setModuleDefault(result, mod);
|
||
return result;
|
||
};
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _UnitMarker_instances, _UnitMarker_unitName, _UnitMarker_name, _UnitMarker_human, _UnitMarker_coalitionID, _UnitMarker_alive, _UnitMarker_computeMarkerCode;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.UnitMarker = void 0;
|
||
const L = __importStar(require("leaflet"));
|
||
const milsymbol_1 = require("milsymbol");
|
||
class UnitMarker extends L.Marker {
|
||
constructor(options) {
|
||
super(new L.LatLng(0, 0), { riseOnHover: true });
|
||
_UnitMarker_instances.add(this);
|
||
_UnitMarker_unitName.set(this, void 0);
|
||
_UnitMarker_name.set(this, void 0);
|
||
_UnitMarker_human.set(this, void 0);
|
||
_UnitMarker_coalitionID.set(this, void 0);
|
||
_UnitMarker_alive.set(this, void 0);
|
||
__classPrivateFieldSet(this, _UnitMarker_unitName, options.unitName, "f");
|
||
__classPrivateFieldSet(this, _UnitMarker_name, options.name, "f");
|
||
__classPrivateFieldSet(this, _UnitMarker_human, options.human, "f");
|
||
__classPrivateFieldSet(this, _UnitMarker_coalitionID, options.coalitionID, "f");
|
||
__classPrivateFieldSet(this, _UnitMarker_alive, true, "f");
|
||
var symbol = new milsymbol_1.Symbol(__classPrivateFieldGet(this, _UnitMarker_instances, "m", _UnitMarker_computeMarkerCode).call(this, options), { size: 100 });
|
||
var img = symbol.asCanvas().toDataURL('image/png');
|
||
var icon = new L.DivIcon({
|
||
html: `<table class="unit-marker-container" id="container">
|
||
<tr>
|
||
<td>
|
||
<div class="unit-marker-icon" id="icon"><img src="${img}"></div>
|
||
<div class="unit-marker-unitName" id="unitName">${__classPrivateFieldGet(this, _UnitMarker_unitName, "f")}</div>
|
||
<div class="unit-marker-altitude" id="altitude"></div>
|
||
<div class="unit-marker-speed" id="speed"></div>
|
||
<div class="unit-marker-name" id="name">${__classPrivateFieldGet(this, _UnitMarker_name, "f")}</div>
|
||
</td>
|
||
</tr>
|
||
</table>`,
|
||
className: 'unit-marker'
|
||
});
|
||
this.setIcon(icon);
|
||
}
|
||
onAdd(map) {
|
||
super.onAdd(map);
|
||
var element = this.getElement();
|
||
this.addEventListener('mouseover', function (e) { var _a; (_a = e.target) === null || _a === void 0 ? void 0 : _a.setHovered(true); });
|
||
this.addEventListener('mouseout', function (e) { var _a; (_a = e.target) === null || _a === void 0 ? void 0 : _a.setHovered(false); });
|
||
return this;
|
||
}
|
||
draw(data) {
|
||
var element = this.getElement();
|
||
if (element != null) {
|
||
var nameDiv = element.querySelector("#name");
|
||
var unitNameDiv = element.querySelector("#unitName");
|
||
var container = element.querySelector("#container");
|
||
var icon = element.querySelector("#icon");
|
||
var altitudeDiv = element.querySelector("#altitude");
|
||
var speedDiv = element.querySelector("#speed");
|
||
nameDiv.style.left = (-(nameDiv.offsetWidth - container.offsetWidth) / 2) + "px";
|
||
unitNameDiv.style.left = (-(unitNameDiv.offsetWidth - container.offsetWidth) / 2) + "px";
|
||
icon.style.transform = "rotate(" + data.heading + "rad)";
|
||
altitudeDiv.innerHTML = String(Math.round(data.altitude / 0.3048 / 100) / 10);
|
||
speedDiv.innerHTML = String(Math.round(data.speed * 1.94384));
|
||
}
|
||
}
|
||
setSelected(selected) {
|
||
var _a, _b, _c, _d;
|
||
(_b = (_a = this.getElement()) === null || _a === void 0 ? void 0 : _a.querySelector("#icon")) === null || _b === void 0 ? void 0 : _b.classList.remove("unit-marker-hovered");
|
||
(_d = (_c = this.getElement()) === null || _c === void 0 ? void 0 : _c.querySelector("#icon")) === null || _d === void 0 ? void 0 : _d.classList.toggle("unit-marker-selected", selected);
|
||
}
|
||
setHovered(hovered) {
|
||
var _a, _b;
|
||
(_b = (_a = this.getElement()) === null || _a === void 0 ? void 0 : _a.querySelector("#icon")) === null || _b === void 0 ? void 0 : _b.classList.toggle("unit-marker-hovered", hovered && __classPrivateFieldGet(this, _UnitMarker_alive, "f"));
|
||
}
|
||
}
|
||
exports.UnitMarker = UnitMarker;
|
||
_UnitMarker_unitName = new WeakMap(), _UnitMarker_name = new WeakMap(), _UnitMarker_human = new WeakMap(), _UnitMarker_coalitionID = new WeakMap(), _UnitMarker_alive = new WeakMap(), _UnitMarker_instances = new WeakSet(), _UnitMarker_computeMarkerCode = function _UnitMarker_computeMarkerCode(options) {
|
||
var identity = "00";
|
||
var set = "00";
|
||
var entity = "00";
|
||
var entityType = "00";
|
||
var entitySubtype = "00";
|
||
/* Identity */
|
||
if (options.coalitionID == 1)
|
||
identity = "06"; /* Hostile */
|
||
else if (options.coalitionID == 2)
|
||
identity = "03"; /* Friendly */
|
||
else
|
||
identity = "04"; /* Neutral */
|
||
if (options.type.level1 == 1) {
|
||
set = "01";
|
||
entity = "11";
|
||
if (options.type.level2 == 1)
|
||
entityType = "01";
|
||
else if (options.type.level2 == 1)
|
||
entityType = "02";
|
||
if (options.type.level3 == 1)
|
||
entitySubtype = "04";
|
||
else if (options.type.level3 == 2)
|
||
entitySubtype = "05";
|
||
else if (options.type.level3 == 3)
|
||
entitySubtype = "04";
|
||
else if (options.type.level3 == 4)
|
||
entitySubtype = "02";
|
||
else if (options.type.level3 == 5)
|
||
entitySubtype = "00";
|
||
else if (options.type.level3 == 6)
|
||
entitySubtype = "00";
|
||
}
|
||
else if (options.type.level1 == 2)
|
||
set = "10";
|
||
else if (options.type.level1 == 3)
|
||
set = "30";
|
||
else if (options.type.level1 == 2)
|
||
set = "02";
|
||
return `10${identity}${set}0000${entity}${entityType}${entitySubtype}0000`;
|
||
};
|
||
},{"leaflet":1,"milsymbol":2}],16:[function(require,module,exports){
|
||
"use strict";
|
||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
||
if (kind === "m") throw new TypeError("Private method is not writable");
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
||
};
|
||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
||
};
|
||
var _UnitsManager_units, _UnitsManager_copiedUnits;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.UnitsManager = void 0;
|
||
const __1 = require("..");
|
||
const unit_1 = require("./unit");
|
||
class UnitsManager {
|
||
constructor() {
|
||
_UnitsManager_units.set(this, void 0);
|
||
_UnitsManager_copiedUnits.set(this, void 0);
|
||
__classPrivateFieldSet(this, _UnitsManager_units, {}, "f");
|
||
__classPrivateFieldSet(this, _UnitsManager_copiedUnits, [], "f");
|
||
}
|
||
addUnit(ID, data) {
|
||
/* The name of the unit category is exactly the same as the constructor name */
|
||
var constructor = unit_1.Unit.getConstructor(data.category);
|
||
if (constructor != undefined) {
|
||
var options = {
|
||
unitName: data.unitName,
|
||
name: data.name,
|
||
human: data.human,
|
||
coalitionID: data.coalitionID,
|
||
type: data.type
|
||
};
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID] = new constructor(ID, options);
|
||
}
|
||
}
|
||
getUnitByID(ID) {
|
||
return __classPrivateFieldGet(this, _UnitsManager_units, "f")[ID];
|
||
}
|
||
removeUnit(ID) {
|
||
}
|
||
deselectAllUnits() {
|
||
for (let ID in __classPrivateFieldGet(this, _UnitsManager_units, "f")) {
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].setSelected(false);
|
||
}
|
||
}
|
||
update(data) {
|
||
for (let ID in data["units"]) {
|
||
/* Create the unit if missing from the local array, then update the data. Drawing is handled by leaflet. */
|
||
if (!(ID in __classPrivateFieldGet(this, _UnitsManager_units, "f"))) {
|
||
this.addUnit(parseInt(ID), data["units"][ID]);
|
||
}
|
||
__classPrivateFieldGet(this, _UnitsManager_units, "f")[parseInt(ID)].update(data["units"][ID]);
|
||
}
|
||
if (this.getSelectedUnits().length == 1) {
|
||
(0, __1.getUnitInfoPanel)().show();
|
||
(0, __1.getUnitInfoPanel)().update(this.getSelectedUnits()[0]);
|
||
}
|
||
else {
|
||
(0, __1.getUnitInfoPanel)().hide();
|
||
}
|
||
}
|
||
onUnitSelection() {
|
||
if (this.getSelectedUnits().length > 0) {
|
||
(0, __1.getMap)().setState("MOVE_UNIT");
|
||
//unitControlPanel.setEnabled(true);
|
||
}
|
||
else {
|
||
(0, __1.getMap)().setState("IDLE");
|
||
//unitControlPanel.setEnabled(false);
|
||
}
|
||
}
|
||
// selectFromBounds(bounds)
|
||
// {
|
||
// this.deselectAllUnits();
|
||
// for (let ID in this.#units)
|
||
// {
|
||
// var latlng = new LatLng(this.#units[ID].latitude, this.#units[ID].longitude);
|
||
// if (bounds.contains(latlng))
|
||
// {
|
||
// this.#units[ID].setSelected(true);
|
||
// }
|
||
// }
|
||
// }
|
||
getSelectedUnits() {
|
||
var selectedUnits = [];
|
||
for (let ID in __classPrivateFieldGet(this, _UnitsManager_units, "f")) {
|
||
if (__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID].getSelected()) {
|
||
selectedUnits.push(__classPrivateFieldGet(this, _UnitsManager_units, "f")[ID]);
|
||
}
|
||
}
|
||
return selectedUnits;
|
||
}
|
||
addDestination(latlng) {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
var commandedUnit = selectedUnits[idx];
|
||
//if (selectedUnits[idx].wingman)
|
||
//{
|
||
// commandedUnit = this.getLeader(selectedUnits[idx].ID);
|
||
//}
|
||
commandedUnit.addDestination(latlng);
|
||
}
|
||
}
|
||
clearDestinations() {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
var commandedUnit = selectedUnits[idx];
|
||
//if (selectedUnits[idx].wingman)
|
||
//{
|
||
// commandedUnit = this.getLeader(selectedUnits[idx].ID);
|
||
//}
|
||
commandedUnit.clearDestinations();
|
||
}
|
||
}
|
||
// selectedUnitsMove()
|
||
// {
|
||
// }
|
||
// selectedUnitsChangeSpeed(speedChange)
|
||
// {
|
||
// var selectedUnits = this.getSelectedUnits();
|
||
// for (let idx in selectedUnits)
|
||
// {
|
||
// selectedUnits[idx].changeSpeed(speedChange);
|
||
// }
|
||
// }
|
||
// selectedUnitsChangeAltitude(altitudeChange)
|
||
// {
|
||
// var selectedUnits = this.getSelectedUnits();
|
||
// for (let idx in selectedUnits)
|
||
// {
|
||
// selectedUnits[idx].changeAltitude(altitudeChange);
|
||
// }
|
||
// }
|
||
// handleKeyEvent(e)
|
||
// {
|
||
// if (e.originalEvent.code === 'KeyC' && e.originalEvent.ctrlKey)
|
||
// {
|
||
// this.copyUnits();
|
||
// }
|
||
// else if (e.originalEvent.code === 'KeyV' && e.originalEvent.ctrlKey)
|
||
// {
|
||
// this.pasteUnits();
|
||
// }
|
||
// }
|
||
// copyUnits()
|
||
// {
|
||
// this.#copiedUnits = this.getSelectedUnits();
|
||
// }
|
||
// pasteUnits()
|
||
// {
|
||
// for (let idx in this.#copiedUnits)
|
||
// {
|
||
// var unit = this.#copiedUnits[idx];
|
||
// cloneUnit(unit.ID);
|
||
// }
|
||
// }
|
||
attackUnit(ID) {
|
||
var selectedUnits = this.getSelectedUnits();
|
||
for (let idx in selectedUnits) {
|
||
/* If a unit is a wingman, send the command to its leader */
|
||
var commandedUnit = selectedUnits[idx];
|
||
//if (selectedUnits[idx].wingman)
|
||
//{
|
||
// commandedUnit = this.getLeader(selectedUnits[idx].ID);
|
||
//}
|
||
commandedUnit.attackUnit(ID);
|
||
}
|
||
}
|
||
}
|
||
exports.UnitsManager = UnitsManager;
|
||
_UnitsManager_units = new WeakMap(), _UnitsManager_copiedUnits = new WeakMap();
|
||
},{"..":8,"./unit":13}]},{},[8])
|
||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQtc3JjLmpzIiwibm9kZV9tb2R1bGVzL21pbHN5bWJvbC9kaXN0L21pbHN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJzcmMvY29udHJvbHMvZHJvcGRvd24udHMiLCJzcmMvY29udHJvbHMvc2VsZWN0aW9uc2Nyb2xsLnRzIiwic3JjL2NvbnRyb2xzL3NlbGVjdGlvbndoZWVsLnRzIiwic3JjL2Rjcy9kY3MudHMiLCJzcmMvaW5kZXgudHMiLCJzcmMvbWFwL21hcC50cyIsInNyYy9vdGhlci91dGlscy50cyIsInNyYy9wYW5lbHMvdW5pdGluZm9wYW5lbC50cyIsInNyYy91bml0cy9wYXlsb2FkTmFtZXMudHMiLCJzcmMvdW5pdHMvdW5pdC50cyIsInNyYy91bml0cy91bml0VHlwZXMudHMiLCJzcmMvdW5pdHMvdW5pdG1hcmtlci50cyIsInNyYy91bml0cy91bml0c21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNqbmNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hMQSxNQUFhLFFBQVE7SUFRakIsWUFBWSxFQUFVLEVBQUUsT0FBaUIsRUFBRSxRQUEwQjs7UUFOckUsc0NBQStCO1FBQy9CLG9DQUFtQjtRQUNuQixpQ0FBZ0I7UUFDaEIsb0NBQXVCO1FBQ3ZCLHFDQUE2QjtRQUl6Qix1QkFBQSxJQUFJLHVCQUFjLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQUEsQ0FBQztRQUM5Qyx1QkFBQSxJQUFJLHFCQUFZLE9BQU8sTUFBQSxDQUFDO1FBQ3hCLHVCQUFBLElBQUksc0JBQWEsUUFBUSxNQUFBLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ1osTUFBQSx1QkFBQSxJQUFJLDJCQUFXLDBDQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDNUMsdUJBQUEsSUFBSSxzQkFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxJQUFJO1FBRUEsSUFBSSx1QkFBQSxJQUFJLDJCQUFXLElBQUksSUFBSSxFQUMzQjtZQUNJLHVCQUFBLElBQUksa0JBQVMsSUFBSSxNQUFBLENBQUM7WUFDbEIsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RCx1QkFBQSxJQUFJLDJCQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQzVELHVCQUFBLElBQUkscUJBQVksUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBQSxDQUFDO1lBQzlDLHVCQUFBLElBQUkseUJBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDeEQsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyx1QkFBQSxJQUFJLDJCQUFXLENBQUMsV0FBVyxHQUFHLHVCQUFBLElBQUksMkJBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFaEcsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDN0QsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsdUJBQUEsSUFBSSwyQkFBVyxDQUFDLFNBQVMsR0FBRyx1QkFBQSxJQUFJLDJCQUFXLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUMxRixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUFBLElBQUksMkJBQVcsQ0FBQyxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUkseUJBQVMsQ0FBQyxDQUFDO1lBRXpDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLEtBQUssSUFBSSxRQUFRLElBQUksdUJBQUEsSUFBSSx5QkFBUyxFQUNsQztnQkFDSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkUsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNiLElBQUksdUJBQUEsSUFBSSwyQkFBVyxJQUFJLElBQUk7d0JBQ3ZCLHVCQUFBLElBQUksMkJBQVcsQ0FBQyxTQUFTLEdBQUcsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLHVCQUFBLElBQUksMEJBQVUsSUFBSSxJQUFJO3dCQUN0Qix1QkFBQSxJQUFJLDBCQUFVLE1BQWQsSUFBSSxFQUFXLHVCQUFBLElBQUkseUJBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO2dCQUMvQyxDQUFDLENBQUMsQ0FBQTthQUNMO1lBQ0QsdUJBQUEsSUFBSSx5QkFBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxLQUFLOztRQUVELElBQUksdUJBQUEsSUFBSSwyQkFBVyxJQUFJLElBQUksRUFDM0I7WUFDSSx1QkFBQSxJQUFJLGtCQUFTLEtBQUssTUFBQSxDQUFDO1lBQ25CLE1BQUEsdUJBQUEsSUFBSSwyQkFBVywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDM0QsTUFBQSx1QkFBQSxJQUFJLDJCQUFXLDBDQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUMxRCxJQUFJLHVCQUFBLElBQUkseUJBQVMsSUFBSSxJQUFJO2dCQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyx1QkFBQSxJQUFJLHlCQUFTLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7Q0FDSjtBQWxFRCw0QkFrRUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xFRCxNQUFhLGVBQWU7SUFLeEIsWUFBWSxFQUFVO1FBSHRCLDZDQUFnQztRQUNoQywyQ0FBaUI7UUFJYix1QkFBQSxJQUFJLDhCQUFjLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLE1BQUEsQ0FBQztRQUM5Qyx1QkFBQSxJQUFJLDRCQUFZLEVBQUUsTUFBQSxDQUFDO1FBQ25CLElBQUksdUJBQUEsSUFBSSxrQ0FBVyxJQUFJLElBQUksRUFDM0I7WUFDSSx1QkFBQSxJQUFJLDRCQUFZLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxNQUFBLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBWSxFQUFFLFFBQTBCO1FBRS9ELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixJQUFJLHVCQUFBLElBQUksa0NBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2pEO1lBQ0ksdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsdUJBQUEsSUFBSSxnQ0FBUyxDQUFDO1lBQzlDLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQzVDLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBRTNDLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxFQUM1QjtnQkFDSSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0QsdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNwRTtTQUNKO0lBQ0wsQ0FBQztJQUVELElBQUk7UUFFQSxJQUFJLHVCQUFBLElBQUksa0NBQVcsSUFBSSxJQUFJLEVBQzNCO1lBQ0ksdUJBQUEsSUFBSSxrQ0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQ3ZDLElBQUksT0FBTyxHQUFHLHVCQUFBLElBQUksa0NBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ3BGLEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxFQUN6QjtnQkFDSSx1QkFBQSxJQUFJLGtDQUFXLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RDO1NBQ0o7SUFDTCxDQUFDO0NBQ0o7QUFsREQsMENBa0RDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsREQsMEJBQTREO0FBQzVELDBDQUF5QztBQUV6QyxNQUFhLGNBQWM7SUFLdkIsWUFBWSxFQUFVOzs7UUFIdEIsNENBQStCO1FBQy9CLDBDQUFpQjtRQUliLHVCQUFBLElBQUksNkJBQWMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBQSxDQUFDO1FBQzlDLHVCQUFBLElBQUksMkJBQVksRUFBRSxNQUFBLENBQUM7UUFDbkIsSUFBSSx1QkFBQSxJQUFJLGlDQUFXLElBQUksSUFBSSxFQUMzQjtZQUNJLE1BQUEsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQywwQ0FBRSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksMkRBQVUsTUFBZCxJQUFJLEVBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN4Ryx1QkFBQSxJQUFJLDJCQUFZLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxNQUFBLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2Y7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBWSxFQUFFLGFBQXNCO1FBRTNELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixJQUFJLHVCQUFBLElBQUksaUNBQVcsSUFBSSxJQUFJLEVBQzNCO1lBQ0ksdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsdUJBQUEsSUFBSSwrQkFBUyxDQUFDO1lBQzlDLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQzVDLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBRTNDLElBQUksV0FBVyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUVYLHdCQUF3QjtZQUN4QixLQUFLLElBQUksRUFBRSxJQUFJLE9BQU8sRUFDdEI7Z0JBQ0ksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDL0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztnQkFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUEsZUFBTyxFQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFDakUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUEsZUFBTyxFQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztnQkFFaEUsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDN0MsS0FBSyxDQUFDLEdBQUcsR0FBRyxrQkFBa0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUMvQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFDekI7b0JBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvRCxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7aUJBQzdCO2dCQUNELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0I7WUFFRCwyQ0FBMkM7WUFDM0MsSUFBSSxlQUFlLEdBQWlCLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxhQUFhLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUNqRyxJQUFJLGFBQWEsSUFBSSxLQUFLLEVBQzFCO2dCQUNJLGVBQWUsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDdkMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQzthQUMzSjtpQkFFRDtnQkFDSSxlQUFlLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQ3hDLElBQUksSUFBQSxzQkFBa0IsR0FBRSxJQUFJLE1BQU07b0JBQzlCLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxnQkFBZ0IsQ0FBQyx1QkFBQSxJQUFJLGlDQUFXLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7O29CQUVySixRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO2FBQzNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsSUFBSTtRQUVBLElBQUksdUJBQUEsSUFBSSxpQ0FBVyxJQUFJLElBQUksRUFDM0I7WUFDSSx1QkFBQSxJQUFJLGlDQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQUcsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDMUUsS0FBSyxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQ3pCO2dCQUNJLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEM7U0FDSjtJQUNMLENBQUM7Q0FrQko7QUF4R0Qsd0NBd0dDOzRMQWhCYSxDQUFNO0lBRVosSUFBSSx1QkFBQSxJQUFJLGlDQUFXLElBQUksSUFBSSxFQUMzQjtRQUNJLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQzNCO1lBQ0ksUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDLHVCQUFBLElBQUksaUNBQVcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUNwSixJQUFBLHNCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO2FBRUQ7WUFDSSxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEVBQUUsZ0JBQWdCLENBQUMsdUJBQUEsSUFBSSxpQ0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1lBQ3JKLElBQUEsc0JBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7U0FDOUI7S0FDSjtBQUNMLENBQUM7Ozs7O0FDekdMLDBCQUFxQztBQUNyQywwQ0FBZ0Q7QUFFaEQsd0NBQXdDO0FBQ3hDLElBQUksV0FBVyxHQUFHLGlDQUFpQyxDQUFDO0FBRXBELFNBQWdCLGNBQWMsQ0FBQyxRQUEwQjtJQUVyRCxtREFBbUQ7SUFDbkQsSUFBSSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFeEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFTLENBQUM7UUFFdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FBQyxPQUFPLEdBQUc7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUUsQ0FBQztBQUN6QixDQUFDO0FBaEJELHdDQWdCQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxFQUFVLEVBQUUsSUFBUztJQUVoRCxJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRWxDLElBQUksT0FBTyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUE7SUFDdEMsSUFBSSxJQUFJLEdBQUcsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFDLENBQUE7SUFFL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQVhELHdDQVdDO0FBRUQsU0FBZ0IsVUFBVSxDQUFDLEtBQWEsRUFBRSxNQUFnQjtJQUV0RCxJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQzFCLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLFlBQVksR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUM3SDtJQUNMLENBQUMsQ0FBQztJQUVGLElBQUksT0FBTyxHQUFHLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDbkQsSUFBSSxJQUFJLEdBQUcsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUE7SUFFN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQWZELGdDQWVDO0FBRUQsU0FBZ0IsZUFBZSxDQUFDLElBQVksRUFBRSxNQUFnQixFQUFFLFNBQWlCO0lBRTdFLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDMUIsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBQSxzQkFBYyxFQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUEsc0JBQWMsRUFBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDeEk7SUFDTCxDQUFDLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLENBQUM7SUFDekUsSUFBSSxJQUFJLEdBQUcsRUFBQyxhQUFhLEVBQUUsT0FBTyxFQUFDLENBQUE7SUFFbkMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQWZELDBDQWVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLElBQVksRUFBRSxNQUFnQixFQUFFLFNBQWlCLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRTtJQUUvRyxJQUFJLEdBQUcsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUN6RCxHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQzFCLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUEsc0JBQWMsRUFBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFBLHNCQUFjLEVBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hJO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsSUFBSSxPQUFPLEdBQUcsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUMsQ0FBQztJQUNqSSxJQUFJLElBQUksR0FBRyxFQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUMsQ0FBQTtJQUVoQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBZkQsc0NBZUM7QUFFRCxTQUFnQixVQUFVLENBQUMsRUFBVSxFQUFFLFFBQWdCO0lBRW5ELElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFBLG1CQUFlLEdBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxJQUFBLG1CQUFlLEdBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFFLENBQUM7U0FDdEk7SUFDSixDQUFDLENBQUM7SUFFRixJQUFJLE9BQU8sR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDO0lBQy9DLElBQUksSUFBSSxHQUFHLEVBQUMsWUFBWSxFQUFFLE9BQU8sRUFBQyxDQUFBO0lBRWxDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFmRCxnQ0FlQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxFQUFVO0lBRWhDLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pELEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDM0IsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFBLG1CQUFlLEdBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1NBQ2pGO0lBQ0osQ0FBQyxDQUFDO0lBRUYsSUFBSSxPQUFPLEdBQUcsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDekIsSUFBSSxJQUFJLEdBQUcsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFDLENBQUE7SUFFakMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQWZELDhCQWVDOzs7OztBQ3pIRCxtQ0FBK0I7QUFDL0IsbUNBQTBDO0FBQzFDLDhEQUEyRDtBQUMzRCx1REFBb0Q7QUFDcEQsMERBQXVEO0FBQ3ZELGdFQUE2RDtBQUM3RCxrREFBK0M7QUFFL0MsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJLGNBQThCLENBQUM7QUFDbkMsSUFBSSxlQUFnQyxDQUFDO0FBQ3JDLElBQUksWUFBMEIsQ0FBQztBQUMvQixJQUFJLGFBQTRCLENBQUM7QUFDakMsSUFBSSxlQUF1QixDQUFDO0FBQzVCLElBQUksZ0JBQTBCLENBQUM7QUFDL0IsSUFBSSxpQkFBMkIsQ0FBQztBQUVoQyxTQUFTLEtBQUs7SUFFVixnQkFBZ0I7SUFDaEIsR0FBRyxHQUFHLElBQUksU0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9CLGNBQWMsR0FBRyxJQUFJLCtCQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2RCxlQUFlLEdBQUcsSUFBSSxpQ0FBZSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDMUQsWUFBWSxHQUFHLElBQUksMkJBQVksRUFBRSxDQUFDO0lBQ2xDLGFBQWEsR0FBRyxJQUFJLDZCQUFhLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNyRCxnQkFBZ0IsR0FBRyxJQUFJLG1CQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0ksaUJBQWlCLEdBQUcsSUFBSSxtQkFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRW5ILGVBQWUsR0FBRyxNQUFNLENBQUM7SUFFekIsNEVBQTRFO0lBQzVFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLG9CQUFjLEVBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLElBQVU7SUFFdEIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBZ0IsTUFBTTtJQUVsQixPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFIRCx3QkFHQztBQUVELFNBQWdCLGlCQUFpQjtJQUU3QixPQUFPLGNBQWMsQ0FBQztBQUMxQixDQUFDO0FBSEQsOENBR0M7QUFFRCxTQUFnQixrQkFBa0I7SUFFOUIsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUhELGdEQUdDO0FBRUQsU0FBZ0IsZUFBZTtJQUUzQixPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDO0FBSEQsMENBR0M7QUFFRCxTQUFnQixnQkFBZ0I7SUFFNUIsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUhELDRDQUdDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsU0FBaUI7SUFFaEQsZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUNoQyxDQUFDO0FBSEQsZ0RBR0M7QUFFRCxTQUFnQixrQkFBa0I7SUFFOUIsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUhELGdEQUdDO0FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxRXRCLDJDQUE0QjtBQUM1QiwwQkFBZ0c7QUFDaEcsb0NBQTJDO0FBQzNDLHdEQUFxRDtBQUNyRCxrREFBK0M7QUFFL0MsTUFBYSxHQUFJLFNBQVEsQ0FBQyxDQUFDLEdBQUc7SUFLMUIsWUFBWSxFQUFVO1FBRWxCLDBCQUEwQjtRQUMxQixLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQzs7UUFONUQsNkJBQWU7UUFDZiw2QkFBcUI7UUFNakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVsQyw0QkFBNEI7UUFDNUIsdUJBQUEsSUFBSSxjQUFVLE1BQU0sTUFBQSxDQUFDO1FBRXJCLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsdUJBQUEsSUFBSSwwQ0FBZSxNQUFuQixJQUFJLEVBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHVCQUFBLElBQUksb0NBQVMsTUFBYixJQUFJLEVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsdUJBQUEsSUFBSSwwQ0FBZSxNQUFuQixJQUFJLEVBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFpQjs7UUFFdEIsSUFBSSx1QkFBQSxJQUFJLGtCQUFPLElBQUksSUFBSSxFQUN2QjtZQUNJLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQUEsSUFBSSxrQkFBTyxDQUFDLENBQUE7U0FDaEM7UUFFRCxJQUFJLFNBQVMsSUFBSSxrQkFBa0IsRUFDbkM7WUFDSSx1QkFBQSxJQUFJLGNBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQywrRkFBK0YsRUFBRTtnQkFDdkgsV0FBVyxFQUFFLCtJQUErSTthQUMvSixDQUFDLE1BQUEsQ0FBQztTQUNOO2FBQ0ksSUFBSSxTQUFTLElBQUksV0FBVyxFQUNqQztZQUNJLHVCQUFBLElBQUksY0FBVSxDQUFDLENBQUMsU0FBUyxDQUFDLDBGQUEwRixFQUFFO2dCQUNsSCxPQUFPLEVBQUUsRUFBRTtnQkFDWCxXQUFXLEVBQUUsOEVBQThFO2FBQzlGLENBQUMsTUFBQSxDQUFDO1NBQ047YUFDSSxJQUFJLFNBQVMsSUFBSSxzQkFBc0IsRUFDNUM7WUFDSSx1QkFBQSxJQUFJLGNBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnREFBZ0QsRUFBRTtnQkFDeEUsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLHlGQUF5RjthQUN6RyxDQUFDLE1BQUEsQ0FBQztTQUNOO2FBQ0ksSUFBSSxTQUFTLElBQUksWUFBWSxFQUNsQztZQUNJLHVCQUFBLElBQUksY0FBVSxDQUFDLENBQUMsU0FBUyxDQUFDLHdEQUF3RCxFQUFFO2dCQUNoRixPQUFPLEVBQUUsRUFBRTtnQkFDWCxXQUFXLEVBQUUsNE5BQTROO2FBQzVPLENBQUMsTUFBQSxDQUFDO1NBQ047YUFDSSxJQUFJLFNBQVMsSUFBSSxjQUFjLEVBQ3BDO1lBQ0ksdUJBQUEsSUFBSSxjQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsa0hBQWtILEVBQUU7Z0JBQzFJLFdBQVcsRUFBRSx5REFBeUQ7Z0JBQ3RFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxFQUFFO2FBQ2QsQ0FBQyxNQUFBLENBQUM7U0FDTjthQUNJLElBQUksU0FBUyxJQUFJLFNBQVMsRUFDL0I7WUFDSSx1QkFBQSxJQUFJLGNBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxtRUFBbUUsRUFBRTtnQkFDM0YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLDROQUE0TjthQUM1TyxDQUFDLE1BQUEsQ0FBQztTQUNOO1FBQ0QsTUFBQSx1QkFBQSxJQUFJLGtCQUFPLDBDQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsU0FBUztRQUVMLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUM3RyxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLFFBQVEsQ0FBQyxLQUFhO1FBRWxCLHVCQUFBLElBQUksY0FBVSxLQUFLLE1BQUEsQ0FBQztRQUVwQixJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxNQUFNLEVBQzFCO1NBRUM7YUFDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxXQUFXLEVBQ3BDO1NBRUM7YUFDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxRQUFRLEVBQ2pDO1NBRUM7YUFDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxXQUFXLEVBQ3BDO1NBRUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUVKLE9BQU8sdUJBQUEsSUFBSSxrQkFBTyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsa0JBQWtCLENBQUMsQ0FBZSxFQUFFLE9BQVksRUFBRSxhQUFzQjtRQUVwRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLElBQUEscUJBQWlCLEdBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELGtCQUFrQjtRQUVkLElBQUEscUJBQWlCLEdBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLG1CQUFtQixDQUFDLENBQWUsRUFBRSxPQUFZLEVBQUUsUUFBMEI7UUFFekUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixJQUFBLHNCQUFrQixHQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxtQkFBbUI7UUFFZixJQUFBLHNCQUFrQixHQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztDQTRHSjtBQS9PRCxrQkErT0M7eUlBekdrQixDQUFNO0lBRWpCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsSUFBQSxtQkFBZSxHQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUMvQixDQUFDLHVDQUVRLENBQU07SUFFWCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQixJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxNQUFNLEVBQzFCO0tBRUM7U0FDSSxJQUFJLHVCQUFBLElBQUksa0JBQU8sS0FBSyxXQUFXLEVBQ3BDO1FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUM1QjtZQUNJLElBQUEsbUJBQWUsR0FBRSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDekM7UUFDRCxJQUFBLG1CQUFlLEdBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0tBQzdDO0FBQ0wsQ0FBQyxtREFFYyxDQUFNO0lBRWpCLElBQUksdUJBQUEsSUFBSSxrQkFBTyxJQUFJLE1BQU0sRUFDekI7UUFDSSxJQUFJLE9BQU8sR0FBRztZQUNWLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBUSxLQUFLLEVBQUUsY0FBYyxFQUFXLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDhDQUFtQixNQUF2QixJQUFJLEVBQW9CLENBQUMsQ0FBQyxFQUFDO1lBQzNHLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBSyxLQUFLLEVBQUUsaUJBQWlCLEVBQVEsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksZ0RBQXFCLE1BQXpCLElBQUksRUFBc0IsQ0FBQyxDQUFDLEVBQUM7WUFDN0csRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFXLEtBQUssRUFBRSxnQkFBZ0IsRUFBUyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSwyQ0FBZ0IsTUFBcEIsSUFBSSxFQUFpQixDQUFDLENBQUMsRUFBQztZQUN4RyxFQUFDLFNBQVMsRUFBRSxXQUFXLEVBQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFLLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLCtDQUFvQixNQUF4QixJQUFJLEVBQXFCLENBQUMsQ0FBQyxFQUFDO1NBQy9HLENBQUE7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDM0Q7QUFDTCxDQUFDLCtEQUdvQixDQUFNO0FBRzNCLENBQUMscURBRWUsQ0FBTTtBQUd0QixDQUFDLDZEQUVtQixDQUFNO0FBRzFCLENBQUMsMkRBRWtCLENBQU07SUFFckIsSUFBSSxPQUFPLEdBQUc7UUFDVixFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBUSxLQUFLLEVBQUUsY0FBYyxFQUFPLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBUSxLQUFLLEVBQUUsY0FBYyxFQUFPLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBQztRQUN6SCxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBSyxLQUFLLEVBQUUsaUJBQWlCLEVBQUksVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksMkNBQWdCLE1BQXBCLElBQUksRUFBaUIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFDO1FBQzVILEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFNLEtBQUssRUFBRSxnQkFBZ0IsRUFBSyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSwyQ0FBZ0IsTUFBcEIsSUFBSSxFQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUM7UUFDM0gsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUssS0FBSyxFQUFFLGlCQUFpQixFQUFJLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDJDQUFnQixNQUFwQixJQUFJLEVBQWlCLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBQztRQUM1SCxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBTSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUssVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUFBLElBQUksMkNBQWdCLE1BQXBCLElBQUksRUFBaUIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFDO1FBQzNILEVBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQUEsSUFBSSwyQ0FBZ0IsTUFBcEIsSUFBSSxFQUFpQixDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUM7S0FDbEksQ0FBQTtJQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RCxDQUFDLHFEQUdlLENBQU0sRUFBRSxLQUFhO0lBRWpDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzFCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNCLElBQUksT0FBTyxHQUFHLHFCQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLFFBQWdCLEVBQUUsRUFBRTtRQUNwRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQix1QkFBQSxJQUFJLDhDQUFtQixNQUF2QixJQUFJLEVBQW9CLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsMkRBR2tCLENBQU0sRUFBRSxRQUFnQjtJQUV2QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLDJCQUFZLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDaEMsSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUM5QztRQUNJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLFdBQW1CLEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFBLG1CQUFhLEVBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBQSxzQkFBa0IsR0FBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsQ0FBQyxDQUFDLENBQUM7S0FDTjtTQUVEO1FBQ0ksSUFBQSxtQkFBYSxFQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUEsc0JBQWtCLEdBQUUsQ0FBQyxDQUFDO0tBQzNEO0FBQ0wsQ0FBQzs7Ozs7QUNwUEwsU0FBZ0IsUUFBUSxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFFM0UsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUztJQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7SUFDNUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBQyxJQUFJLENBQUMsQ0FBQztJQUU5QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZO0lBRTdCLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQWRELDRCQWNDO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFFMUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCO0lBQzVDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7SUFDNUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQixNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxhQUFhO0lBRXBELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFaRCwwQkFZQztBQUVELE1BQU0sT0FBTyxHQUFHLFVBQVMsR0FBVyxFQUFFLE1BQWM7SUFFaEQsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLEVBQzdCO1FBQ0ksTUFBTSxJQUFJLEdBQUcsQ0FBQztLQUNqQjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQTtBQUVELFNBQWdCLGNBQWMsQ0FBQyxDQUFTLEVBQUUsR0FBWTtJQUVsRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN0RCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM5QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNwRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksR0FBRztRQUNILE9BQU8sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDOztRQUU1RyxPQUFPLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwSCxDQUFDO0FBWkQsd0NBWUM7QUFFRCxTQUFnQixPQUFPLENBQUMsR0FBVztJQUUvQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFKRCwwQkFJQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxHQUFXO0lBRS9CLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUpELDBCQUlDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hFRCwwQ0FBeUQ7QUFHekQsTUFBYSxhQUFhO0lBS3RCLFlBQVksRUFBVTtRQUh0Qix5Q0FBcUI7UUFDckIseUNBQWlCO1FBSWIsdUJBQUEsSUFBSSwwQkFBeUIsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBQSxDQUFDO1FBQ3pELHVCQUFBLElBQUksMEJBQVksRUFBRSxNQUFBLENBQUM7UUFDbkIsSUFBSSx1QkFBQSxJQUFJLDhCQUFTLElBQUksSUFBSSxFQUN6QjtZQUNJLHVCQUFBLElBQUksMEJBQVksdUJBQUEsSUFBSSw4QkFBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLE1BQUEsQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDZjtJQUNMLENBQUM7SUFFRCxJQUFJO1FBRUEsdUJBQUEsSUFBSSw4QkFBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsdUJBQUEsSUFBSSw4QkFBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJO1FBRUEsdUJBQUEsSUFBSSw4QkFBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBVTtRQUViLElBQUksdUJBQUEsSUFBSSw4QkFBUyxJQUFJLElBQUksRUFDekI7WUFDSSx1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3JFLHVCQUFBLElBQUksOEJBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDdkUsdUJBQUEsSUFBSSw4QkFBUyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBQSxlQUFPLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDckcsdUJBQUEsSUFBSSw4QkFBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUN4Ryx1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBRSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQzFHLDhHQUE4RztZQUM5Ryx1QkFBQSxJQUFJLDhCQUFTLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBRSxDQUFDLFNBQVMsR0FBRyxJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBQSxzQkFBYyxFQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDM0k7SUFDTCxDQUFDO0NBQ0o7QUF2Q0Qsc0NBdUNDOzs7Ozs7QUMxQ1UsUUFBQSxZQUFZLEdBQVEsRUFBQyxPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsOEJBQThCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxxQkFBcUIsRUFBRSxzQ0FBc0MsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGtEQUFrRCxFQUFFLHFDQUFxQyxFQUFFLHNCQUFzQixFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLHVEQUF1RCxFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLGdEQUFnRCxFQUFFLCtDQUErQyxFQUFFLDZEQUE2RCxFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLG9DQUFvQyxFQUFFLHdCQUF3QixFQUFFLCtEQUErRCxFQUFFLEtBQUssRUFBRSxvQ0FBb0MsRUFBRSxnQ0FBZ0MsRUFBRSxzQ0FBc0MsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSxvQ0FBb0MsRUFBRSxpREFBaUQsRUFBRSwwQ0FBMEMsRUFBRSxpRUFBaUUsRUFBRSxnREFBZ0QsRUFBRSxrQ0FBa0MsRUFBRSxpQ0FBaUMsRUFBRSx1Q0FBdUMsRUFBRSw0Q0FBNEMsRUFBRSx3Q0FBd0MsRUFBRSxxQ0FBcUMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxxRUFBcUUsRUFBRSxpREFBaUQsRUFBRSxvQ0FBb0MsRUFBRSx3REFBd0QsRUFBRSwrQ0FBK0MsRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxrREFBa0QsRUFBRSwwREFBMEQsRUFBRSxrREFBa0QsRUFBRSwrQkFBK0IsRUFBRSx1Q0FBdUMsRUFBRSxnQ0FBZ0MsRUFBRSxtREFBbUQsRUFBRSwwQ0FBMEMsRUFBRSxxQ0FBcUMsRUFBRSw0Q0FBNEMsRUFBRSxxQ0FBcUMsRUFBRSxxQ0FBcUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGtEQUFrRCxFQUFFLHFDQUFxQyxFQUFFLHNCQUFzQixFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLDRCQUE0QixFQUFFLHVEQUF1RCxFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLGdEQUFnRCxFQUFFLCtDQUErQyxFQUFFLDZEQUE2RCxFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLG9DQUFvQyxFQUFFLHdCQUF3QixFQUFFLCtEQUErRCxFQUFFLEtBQUssRUFBRSxvQ0FBb0MsRUFBRSxnQ0FBZ0MsRUFBRSxzQ0FBc0MsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSw2QkFBNkIsRUFBRSxxQ0FBcUMsRUFBRSxvQ0FBb0MsRUFBRSxpREFBaUQsRUFBRSwwQ0FBMEMsRUFBRSxpRUFBaUUsRUFBRSxnREFBZ0QsRUFBRSxrQ0FBa0MsRUFBRSxpQ0FBaUMsRUFBRSx1Q0FBdUMsRUFBRSw0Q0FBNEMsRUFBRSx3Q0FBd0MsRUFBRSxxQ0FBcUMsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSxxRUFBcUUsRUFBRSxpREFBaUQsRUFBRSxvQ0FBb0MsRUFBRSx3REFBd0QsRUFBRSwrQ0FBK0MsRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxrREFBa0QsRUFBRSwwREFBMEQsRUFBRSxrREFBa0QsRUFBRSwrQkFBK0IsRUFBRSx1Q0FBdUMsRUFBRSxnQ0FBZ0MsRUFBRSxtREFBbUQsRUFBRSwwQ0FBMEMsRUFBRSxxQ0FBcUMsRUFBRSw0Q0FBNEMsRUFBRSxxQ0FBcUMsRUFBRSxxQ0FBcUMsRUFBRSxnREFBZ0QsRUFBRSxxQ0FBcUMsRUFBRSxrREFBa0QsRUFBRSxtREFBbUQsRUFBRSwrQkFBK0IsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSw2Q0FBNkMsRUFBRSwyREFBMkQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsRUFBRSwwREFBMEQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsRUFBRSxpREFBaUQsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLHVCQUF1QixFQUFFLHdEQUF3RCxFQUFFLGtDQUFrQyxFQUFFLHNCQUFzQixFQUFFLDZDQUE2QyxFQUFFLHlEQUF5RCxFQUFFLDhFQUE4RSxFQUFFLDhFQUE4RSxFQUFFLDhFQUE4RSxFQUFFLDhFQUE4RSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMscURBQXFELEVBQUUsa0NBQWtDLEVBQUUscUNBQXFDLEVBQUUsbURBQW1ELEVBQUUsMENBQTBDLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLEVBQUUsa0JBQWtCLEVBQUUsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUsbUJBQW1CLEVBQUUsb0NBQW9DLEVBQUUsNkNBQTZDLEVBQUUsdUNBQXVDLEVBQUUseUNBQXlDLEVBQUUsK0JBQStCLEVBQUUsMkNBQTJDLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLCtDQUErQyxFQUFFLHdDQUF3QyxFQUFFLG9DQUFvQyxFQUFFLDZDQUE2QyxFQUFFLDBCQUEwQixFQUFFLHlDQUF5QyxFQUFFLGdDQUFnQyxFQUFFLG9DQUFvQyxFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSxzQ0FBc0MsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxnQ0FBZ0MsRUFBRSw2QkFBNkIsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSwyQkFBMkIsRUFBRSxzQ0FBc0MsRUFBRSxzQ0FBc0MsRUFBRSx3Q0FBd0MsRUFBRSxvQ0FBb0MsRUFBRSx3QkFBd0IsRUFBRSxxQ0FBcUMsRUFBRSwrQkFBK0IsRUFBRSw2Q0FBNkMsRUFBRSw4Q0FBOEMsRUFBRSxxQ0FBcUMsRUFBRSxzQ0FBc0MsRUFBRSxnQ0FBZ0MsRUFBRSxrQ0FBa0MsRUFBRSxtQ0FBbUMsRUFBRSw2Q0FBNkMsRUFBRSw4Q0FBOEMsRUFBRSw4QkFBOEIsRUFBRSxnQ0FBZ0MsRUFBRSxvREFBb0QsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLDJCQUEyQixFQUFFLHdDQUF3QyxFQUFFLDJDQUEyQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxnQ0FBZ0MsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSwyQkFBMkIsRUFBRSxZQUFZLEVBQUUsNEJBQTRCLEVBQUUsZUFBZSxFQUFFLHFDQUFxQyxFQUFFLDhCQUE4QixFQUFFLGdDQUFnQyxFQUFFLGlDQUFpQyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLGdDQUFnQyxFQUFFLGdDQUFnQyxFQUFFLDhDQUE4QyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsOEJBQThCLEVBQUUsNENBQTRDLEVBQUUsc0NBQXNDLEVBQUUsc0NBQXNDLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUsa0NBQWtDLEVBQUUsMENBQTBDLEVBQUUsNkNBQTZDLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUsNkJBQTZCLEVBQUUsMENBQTBDLEVBQUUscUNBQXFDLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUscUNBQXFDLEVBQUUsaUNBQWlDLEVBQUUsb0NBQW9DLEVBQUUsd0NBQXdDLEVBQUUsMENBQTBDLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUsdUNBQXVDLEVBQUUsd0NBQXdDLEVBQUUsNkNBQTZDLEVBQUUsOENBQThDLEVBQUUsNENBQTRDLEVBQUUsOENBQThDLEVBQUUsK0JBQStCLEVBQUUsa0JBQWtCLEVBQUUsNkJBQTZCLEVBQUUscUNBQXFDLEVBQUUsMkJBQTJCLEVBQUUsbUNBQW1DLEVBQUUsdUJBQXVCLEVBQUUsZ0NBQWdDLEVBQUUsa0NBQWtDLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQUUsK0JBQStCLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxxQ0FBcUMsRUFBRSw2Q0FBNkMsRUFBRSwyQ0FBMkMsRUFBRSxpQ0FBaUMsRUFBRSxlQUFlLEVBQUUsd0NBQXdDLEVBQUUsMkJBQTJCLEVBQUUsMkNBQTJDLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUsbUNBQW1DLEVBQUUsbUNBQW1DLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUseUNBQXlDLEVBQUUsK0NBQStDLEVBQUUsMENBQTBDLEVBQUUseUNBQXlDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLDhCQUE4QixFQUFFLDhCQUE4QixFQUFFLG1DQUFtQyxFQUFFLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLG1DQUFtQyxFQUFFLHdDQUF3QyxFQUFFLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLGtEQUFrRCxFQUFFLGlEQUFpRCxFQUFFLGtEQUFrRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLGlEQUFpRCxFQUFFLG1EQUFtRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGlEQUFpRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLHFEQUFxRCxFQUFFLHFEQUFxRCxFQUFFLGtEQUFrRCxFQUFFLGtEQUFrRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLDBEQUEwRCxFQUFFLG1EQUFtRCxFQUFFLHdEQUF3RCxFQUFFLGdEQUFnRCxFQUFFLHlDQUF5QyxFQUFFLDhDQUE4QyxFQUFFLHNDQUFzQyxFQUFFLGlEQUFpRCxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsNkJBQTZCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsaUNBQWlDLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLDhCQUE4QixFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSwwQ0FBMEMsRUFBRSwwQ0FBMEMsRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsbURBQW1ELEVBQUUsbURBQW1ELEVBQUUsbURBQW1ELEVBQUUsNkNBQTZDLEVBQUUsNkNBQTZDLEVBQUUsNERBQTRELEVBQUUsNERBQTRELENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsNkNBQTZDLEVBQUUsNkNBQTZDLEVBQUUsNkNBQTZDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsb0RBQW9ELEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsb0NBQW9DLEVBQUUsMEJBQTBCLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLG1EQUFtRCxFQUFFLDZDQUE2QyxFQUFFLDZDQUE2QyxFQUFFLDREQUE0RCxFQUFFLDREQUE0RCxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsaUJBQWlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0RBQWdELEVBQUUsZ0NBQWdDLEVBQUUsaURBQWlELEVBQUUseUNBQXlDLEVBQUUsMERBQTBELEVBQUUsNkRBQTZELEVBQUUsaURBQWlELEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSw4QkFBOEIsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxnQ0FBZ0MsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsOEJBQThCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsK0RBQStELEVBQUUsNkJBQTZCLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSw2RUFBNkUsRUFBRSxpRkFBaUYsRUFBRSw0RUFBNEUsRUFBRSx5REFBeUQsRUFBRSx5REFBeUQsRUFBRSxrRUFBa0UsRUFBRSxxQkFBcUIsRUFBRSw4RUFBOEUsRUFBRSxtRkFBbUYsRUFBRSw4RUFBOEUsRUFBRSxpQ0FBaUMsRUFBRSxrQ0FBa0MsRUFBRSxnREFBZ0QsRUFBRSx1RkFBdUYsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLG1CQUFtQixFQUFFLGlDQUFpQyxFQUFFLGlDQUFpQyxFQUFFLGtEQUFrRCxFQUFFLG9EQUFvRCxFQUFFLG1DQUFtQyxFQUFFLGtEQUFrRCxFQUFFLG1DQUFtQyxFQUFFLG9EQUFvRCxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsK0JBQStCLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsMkNBQTJDLEVBQUUsZ0NBQWdDLEVBQUUsK0JBQStCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUseUNBQXlDLEVBQUUsbUNBQW1DLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsa0NBQWtDLEVBQUUscUNBQXFDLEVBQUUsdUNBQXVDLEVBQUUseUNBQXlDLEVBQUUscUJBQXFCLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLHFDQUFxQyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLHFCQUFxQixFQUFFLDJDQUEyQyxFQUFFLGtDQUFrQyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLG9DQUFvQyxFQUFFLHdDQUF3QyxFQUFFLGlCQUFpQixFQUFFLG1DQUFtQyxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSw4QkFBOEIsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGdCQUFnQixFQUFFLDZCQUE2QixFQUFFLDhEQUE4RCxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUsMERBQTBELEVBQUUsc0NBQXNDLEVBQUUsc0NBQXNDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSw4REFBOEQsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsd0JBQXdCLEVBQUUsdUNBQXVDLEVBQUUsZ0VBQWdFLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLHVDQUF1QyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLHNDQUFzQyxFQUFFLHNDQUFzQyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLGdDQUFnQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUscUNBQXFDLEVBQUUsc0JBQXNCLEVBQUUscUNBQXFDLEVBQUUsOERBQThELEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsK0RBQStELEVBQUUsK0RBQStELEVBQUUsb0RBQW9ELEVBQUUsb0RBQW9ELEVBQUUsbUVBQW1FLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLHVDQUF1QyxFQUFFLGdFQUFnRSxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsd0JBQXdCLEVBQUUsdUNBQXVDLEVBQUUsZ0VBQWdFLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSw4REFBOEQsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLGdCQUFnQixFQUFFLDZCQUE2QixFQUFFLDhEQUE4RCxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsdUNBQXVDLEVBQUUsdUNBQXVDLEVBQUUsd0JBQXdCLEVBQUUsdUNBQXVDLEVBQUUsZ0VBQWdFLEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRSxnQkFBZ0IsRUFBRSw2QkFBNkIsRUFBRSw4REFBOEQsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLGlCQUFpQixFQUFFLDhCQUE4QixFQUFFLCtEQUErRCxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGtFQUFrRSxFQUFFLGtFQUFrRSxFQUFFLHVEQUF1RCxFQUFFLHVEQUF1RCxFQUFFLHNFQUFzRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUUsOERBQThELEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxvQ0FBb0MsRUFBRSx1Q0FBdUMsRUFBRSxxQkFBcUIsRUFBRSx3QkFBd0IsRUFBRSxvQ0FBb0MsRUFBRSx1Q0FBdUMsRUFBRSwwREFBMEQsRUFBRSxzQ0FBc0MsRUFBRSxzQ0FBc0MsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLHVDQUF1QyxFQUFFLHdCQUF3QixFQUFFLHVDQUF1QyxFQUFFLGdFQUFnRSxFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLCtCQUErQixFQUFFLCtCQUErQixFQUFFLG1DQUFtQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMscUNBQXFDLEVBQUUsZ0JBQWdCLEVBQUUsNkJBQTZCLEVBQUUsOERBQThELEVBQUUsNENBQTRDLEVBQUUsNENBQTRDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsK0JBQStCLEVBQUUsK0JBQStCLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx1Q0FBdUMsRUFBRSxnRUFBZ0UsRUFBRSw0Q0FBNEMsRUFBRSw0Q0FBNEMsRUFBRSxpRUFBaUUsRUFBRSxpRUFBaUUsRUFBRSxzREFBc0QsRUFBRSxzREFBc0QsRUFBRSxxRUFBcUUsRUFBRSwrQkFBK0IsRUFBRSwrQkFBK0IsRUFBRSxtQ0FBbUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLG9DQUFvQyxFQUFFLHVDQUF1QyxFQUFFLDBEQUEwRCxFQUFFLHNDQUFzQyxFQUFFLHNDQUFzQyxFQUFFLGlFQUFpRSxFQUFFLGlFQUFpRSxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFFQUFxRSxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLGdDQUFnQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsb0NBQW9DLEVBQUUsdUNBQXVDLEVBQUUsMERBQTBELEVBQUUsc0NBQXNDLEVBQUUsc0NBQXNDLEVBQUUsaUVBQWlFLEVBQUUsaUVBQWlFLEVBQUUsc0RBQXNELEVBQUUsc0RBQXNELEVBQUUscUVBQXFFLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxrQ0FBa0MsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsY0FBYyxFQUFFLDJCQUEyQixDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsYUFBYSxFQUFFLDJCQUEyQixFQUFFLHdDQUF3QyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSwwQ0FBMEMsRUFBRSw2Q0FBNkMsRUFBRSwyQ0FBMkMsRUFBRSwrREFBK0QsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLDJCQUEyQixFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFFLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSxrQ0FBa0MsRUFBRSwwQkFBMEIsRUFBRSxzQkFBc0IsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsRUFBRSxnQ0FBZ0MsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGdEQUFnRCxFQUFFLHNDQUFzQyxFQUFFLHFDQUFxQyxFQUFFLDhCQUE4QixFQUFFLG1EQUFtRCxFQUFFLDZEQUE2RCxFQUFFLDRCQUE0QixFQUFFLGdEQUFnRCxFQUFFLHVEQUF1RCxFQUFFLDhDQUE4QyxFQUFFLHFDQUFxQyxFQUFFLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHNEQUFzRCxFQUFFLHNEQUFzRCxFQUFFLHFDQUFxQyxFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLDZDQUE2QyxFQUFFLHdDQUF3QyxFQUFFLHVEQUF1RCxFQUFFLDREQUE0RCxFQUFFLHVDQUF1QyxFQUFFLCtDQUErQyxFQUFFLDREQUE0RCxFQUFFLG9DQUFvQyxFQUFFLG1EQUFtRCxFQUFFLDRCQUE0QixFQUFFLGlEQUFpRCxFQUFFLDRCQUE0QixFQUFFLHNDQUFzQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLHNDQUFzQyxFQUFFLDhCQUE4QixFQUFFLHNDQUFzQyxFQUFFLHlDQUF5QyxFQUFFLHdDQUF3QyxFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsc0NBQXNDLEVBQUUseUNBQXlDLEVBQUUsb0JBQW9CLEVBQUUsOEJBQThCLEVBQUUsdUNBQXVDLEVBQUUsNEJBQTRCLEVBQUUsc0JBQXNCLEVBQUUseUNBQXlDLEVBQUUsNENBQTRDLEVBQUUsNkJBQTZCLEVBQUUsZ0RBQWdELEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSwyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSx5Q0FBeUMsRUFBRSw4QkFBOEIsRUFBRSx5Q0FBeUMsRUFBRSx5Q0FBeUMsRUFBRSxnREFBZ0QsRUFBRSx3Q0FBd0MsRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRSx5Q0FBeUMsRUFBRSw2QkFBNkIsRUFBRSw4Q0FBOEMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLDRDQUE0QyxFQUFFLDRDQUE0QyxFQUFFLDZCQUE2QixFQUFFLDJCQUEyQixFQUFFLDJCQUEyQixFQUFFLHNDQUFzQyxFQUFFLHNDQUFzQyxFQUFFLDZCQUE2QixFQUFFLGlDQUFpQyxFQUFFLGlDQUFpQyxFQUFFLG9DQUFvQyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlDQUFpQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsZ0RBQWdELEVBQUUsd0NBQXdDLEVBQUUsbURBQW1ELEVBQUUsMENBQTBDLEVBQUUseUNBQXlDLEVBQUUsNENBQTRDLEVBQUUsaURBQWlELEVBQUUsOENBQThDLEVBQUUseUNBQXlDLEVBQUUsd0NBQXdDLEVBQUUsMENBQTBDLEVBQUUsMENBQTBDLEVBQUUsc0NBQXNDLEVBQUUscURBQXFELEVBQUUsdUNBQXVDLEVBQUUsK0NBQStDLEVBQUUsd0NBQXdDLEVBQUUsa0RBQWtELEVBQUUsbUNBQW1DLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsaUJBQWlCLEVBQUUsdUNBQXVDLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixFQUFFLDhCQUE4QixFQUFFLDZCQUE2QixFQUFFLHNCQUFzQixFQUFFLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLDhCQUE4QixFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLGNBQWMsRUFBRSx1Q0FBdUMsRUFBRSx5Q0FBeUMsRUFBRSxtQ0FBbUMsRUFBRSxnQkFBZ0IsRUFBRSx3Q0FBd0MsRUFBRSx3Q0FBd0MsRUFBRSxxQ0FBcUMsRUFBRSx1Q0FBdUMsRUFBRSx3QkFBd0IsRUFBRSx5Q0FBeUMsRUFBRSxRQUFRLEVBQUUsNENBQTRDLEVBQUUsd0NBQXdDLEVBQUUsc0JBQXNCLEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSx3Q0FBd0MsRUFBRSx3Q0FBd0MsRUFBRSxRQUFRLEVBQUUsdUNBQXVDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsMEJBQTBCLEVBQUUseUNBQXlDLEVBQUUsNENBQTRDLEVBQUUsbUNBQW1DLEVBQUUsc0JBQXNCLEVBQUUsc0NBQXNDLEVBQUUsd0JBQXdCLEVBQUUsd0NBQXdDLEVBQUUsd0JBQXdCLEVBQUUscUNBQXFDLEVBQUUsa0NBQWtDLEVBQUUsd0NBQXdDLEVBQUUseUNBQXlDLEVBQUUsdUNBQXVDLEVBQUUseUNBQXlDLEVBQUUsMENBQTBDLEVBQUUsZ0NBQWdDLEVBQUUseUNBQXlDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQ0FBZ0MsRUFBRSxpQkFBaUIsRUFBRSx5REFBeUQsRUFBRSxhQUFhLEVBQUUseUJBQXlCLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsaUJBQWlCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxpQ0FBaUMsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsa0NBQWtDLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsK0JBQStCLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxrQ0FBa0MsRUFBRSwyQkFBMkIsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsa0NBQWtDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSxxQ0FBcUMsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsb0NBQW9DLEVBQUUsMEJBQTBCLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxtQ0FBbUMsRUFBRSxnQ0FBZ0MsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsRUFBRSwrQkFBK0IsRUFBRSwwQkFBMEIsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLDBCQUEwQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSx1QkFBdUIsRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHlCQUF5QixFQUFFLDBCQUEwQixFQUFFLGlEQUFpRCxFQUFFLDJCQUEyQixFQUFFLGlDQUFpQyxFQUFFLHNDQUFzQyxFQUFFLHVDQUF1QyxFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLDRCQUE0QixFQUFFLDZCQUE2QixFQUFFLGtDQUFrQyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLG9DQUFvQyxFQUFFLDBCQUEwQixFQUFFLG1DQUFtQyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLHVCQUF1QixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsdUNBQXVDLEVBQUUsb0RBQW9ELEVBQUUsNkNBQTZDLEVBQUUsb0NBQW9DLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsZ0NBQWdDLEVBQUUscUNBQXFDLEVBQUUsa0NBQWtDLEVBQUUsd0JBQXdCLEVBQUUsbUNBQW1DLEVBQUUscUNBQXFDLEVBQUUsMEJBQTBCLEVBQUUsUUFBUSxFQUFFLG1FQUFtRSxFQUFFLDJCQUEyQixFQUFFLCtCQUErQixFQUFFLDBCQUEwQixFQUFFLGlEQUFpRCxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLGlDQUFpQyxFQUFFLGlDQUFpQyxFQUFFLDZCQUE2QixFQUFFLG1FQUFtRSxFQUFFLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFLCtDQUErQyxFQUFFLDJCQUEyQixFQUFFLHNDQUFzQyxFQUFFLDRCQUE0QixFQUFFLGtDQUFrQyxFQUFFLDJCQUEyQixFQUFFLCtCQUErQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsMkRBQTJELEVBQUUsc0NBQXNDLEVBQUUsd0NBQXdDLEVBQUUseUJBQXlCLEVBQUUsdUNBQXVDLEVBQUUsd0NBQXdDLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFLHlDQUF5QyxFQUFFLDZDQUE2QyxFQUFFLHdCQUF3QixFQUFFLGlDQUFpQyxFQUFFLHdDQUF3QyxFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLHVDQUF1QyxFQUFFLHVCQUF1QixFQUFFLG9DQUFvQyxFQUFFLHFDQUFxQyxFQUFFLHlDQUF5QyxFQUFFLDRCQUE0QixFQUFFLG9CQUFvQixFQUFFLGtDQUFrQyxFQUFFLG1CQUFtQixFQUFFLHVEQUF1RCxFQUFFLDJCQUEyQixFQUFFLHVDQUF1QyxFQUFFLGlDQUFpQyxFQUFFLGtDQUFrQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsZ0NBQWdDLEVBQUUsMkJBQTJCLEVBQUUsa0NBQWtDLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLDBDQUEwQyxFQUFFLGlCQUFpQixFQUFFLDhCQUE4QixFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsZ0NBQWdDLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUsb0JBQW9CLEVBQUUsb0NBQW9DLEVBQUUsb0NBQW9DLEVBQUUsa0JBQWtCLEVBQUUsb0NBQW9DLEVBQUUsc0NBQXNDLEVBQUUsb0JBQW9CLEVBQUUsb0NBQW9DLEVBQUUscUNBQXFDLEVBQUUsZ0NBQWdDLEVBQUUsbUJBQW1CLEVBQUUsa0NBQWtDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsRUFBRSxxQ0FBcUMsRUFBRSx3QkFBd0IsRUFBRSwyQkFBMkIsRUFBRSxvQ0FBb0MsRUFBRSw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsOEJBQThCLEVBQUUsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLG9DQUFvQyxFQUFFLDhCQUE4QixFQUFFLGdDQUFnQyxFQUFFLDRCQUE0QixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUFFLDRCQUE0QixFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSxxQ0FBcUMsRUFBRSw0QkFBNEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLDhCQUE4QixFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUsOEJBQThCLEVBQUUsNEJBQTRCLEVBQUUseUJBQXlCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCLEVBQUUsb0NBQW9DLEVBQUUsbUNBQW1DLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBRSxnQ0FBZ0MsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsZ0NBQWdDLEVBQUUsOEJBQThCLEVBQUUsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUsc0NBQXNDLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxzQkFBc0IsRUFBRSxpQ0FBaUMsRUFBRSxnQ0FBZ0MsRUFBRSxvQ0FBb0MsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSw2QkFBNkIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBaDYvRCxxQ0FBbUQ7QUFFbkQsMEJBQTZDO0FBQzdDLDZDQUF5RDtBQUN6RCxvQ0FBd0Q7QUFFeEQsTUFBYSxJQUFJO0lBZ0NiLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBWTtRQUU5QixJQUFJLElBQUksS0FBSyxZQUFZO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDN0MsSUFBSSxJQUFJLEtBQUssVUFBVTtZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ3pDLElBQUksSUFBSSxLQUFLLFlBQVk7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDdkMsSUFBSSxJQUFJLEtBQUssTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLElBQUksSUFBSSxLQUFLLFVBQVU7WUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxFQUFVLEVBQUUsTUFBa0I7O1FBbkIxQyxtQ0FBOEI7UUFDOUIsaUNBQThCO1FBQzlCLHFDQUE4QjtRQUM5QixvQ0FBK0I7UUFDL0IscUNBQStCO1FBQy9CLHlDQUFpQztRQUNqQywrQkFBaUM7UUFDakMsOEJBQTZCO1FBY3pCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRWIsV0FBVztRQUNYLElBQUksQ0FBQyxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQVMsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXpCLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFTLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFRLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFTLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFVLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFZLENBQUMsQ0FBQztRQUV4QixhQUFhO1FBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBTSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBWSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBTSxFQUFFLENBQUM7UUFFekIsZUFBZTtRQUNmLElBQUksQ0FBQyxNQUFNLEdBQVcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQVUsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXpCLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsSUFBSSxHQUFhLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFZLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFPLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFNLElBQUksQ0FBQztRQUUzQix1QkFBQSxJQUFJLG9CQUFlLElBQUksTUFBQSxDQUFDO1FBQ3hCLHVCQUFBLElBQUksZUFBVSxDQUFDLE1BQUEsQ0FBQztRQUVoQiw4Q0FBOEM7UUFDOUMsdUJBQUEsSUFBSSxnQkFBVyxNQUFNLE1BQUEsQ0FBQztRQUN0Qix1QkFBQSxJQUFJLG9CQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsdUJBQUEsSUFBSSxzQ0FBUyxNQUFiLElBQUksRUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELHVCQUFBLElBQUksb0JBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx1QkFBQSxJQUFJLDRDQUFlLE1BQW5CLElBQUksRUFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRCx1QkFBQSxJQUFJLGtCQUFhLEtBQUssTUFBQSxDQUFDO1FBQ3ZCLHVCQUFBLElBQUksc0JBQWlCLEtBQUssTUFBQSxDQUFDO1FBQzNCLHVCQUFBLElBQUkscUJBQWdCLEVBQUUsTUFBQSxDQUFDO1FBQ3ZCLHVCQUFBLElBQUksc0JBQWlCLElBQUksa0JBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFDLENBQUMsTUFBQSxDQUFDO1FBQ3BHLHVCQUFBLElBQUksMEJBQWMsQ0FBQyxLQUFLLENBQUMsSUFBQSxVQUFNLEdBQUUsQ0FBQyxDQUFDO1FBQ25DLHVCQUFBLElBQUksMEJBQXFCLEVBQUUsTUFBQSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBYztRQUVqQixLQUFLLElBQUksS0FBSyxJQUFJLFFBQVEsRUFDMUI7WUFDSSxhQUFhO1lBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQztRQUVELHVCQUFBLElBQUksMkNBQWMsTUFBbEIsSUFBSSxDQUFnQixDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQix1QkFBQSxJQUFJLHVDQUFVLE1BQWQsSUFBSSxDQUFZLENBQUM7O1lBRWpCLHVCQUFBLElBQUksd0NBQVcsTUFBZixJQUFJLENBQWEsQ0FBQztRQUV0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VUEwQkU7SUFDTixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWlCO1FBRXpCLCtFQUErRTtRQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLHVCQUFBLElBQUksd0JBQVksSUFBSSx1QkFBQSxJQUFJLHNCQUFVLElBQUksUUFBUSxFQUMvRTtZQUNJLHVCQUFBLElBQUksa0JBQWEsUUFBUSxNQUFBLENBQUM7WUFDMUIsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNuQyxJQUFBLG1CQUFlLEdBQUUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFRCxXQUFXO1FBRVAsT0FBTyx1QkFBQSxJQUFJLHNCQUFVLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFnQjtRQUUzQixJQUFJLElBQUksR0FBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVMsRUFDaEM7WUFDSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN2QixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUM1RDthQUVEO1lBQ0ksSUFBSSxHQUFHLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBQyxDQUFDO1NBQ3hCO1FBQ0QsSUFBQSxvQkFBYyxFQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQjtRQUViLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFpR0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTZDRTtJQUVGLFVBQVUsQ0FBQyxRQUFnQjtRQUV2QiwrQkFBK0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsRUFDdkI7WUFDSSxJQUFBLGdCQUFVLEVBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNqQzthQUVEO1lBQ0ksdUJBQXVCO1NBQzFCO0lBQ0wsQ0FBQztDQTJFSjtBQS9ZRCxvQkErWUM7d1ZBcE9ZLENBQU07SUFFWCx1QkFBQSxJQUFJLGVBQVUsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUMxQixJQUFJLENBQUMsdUJBQUEsSUFBSSwwQkFBYyxFQUFFO1lBQ3JCLElBQUksSUFBQSxVQUFNLEdBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxNQUFNLElBQUksSUFBQSxVQUFNLEdBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQ3BHO2dCQUNJLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFDNUI7b0JBQ0ksSUFBQSxtQkFBZSxHQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDeEM7Z0JBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtTQUNKO1FBQ0QsdUJBQUEsSUFBSSxzQkFBaUIsS0FBSyxNQUFBLENBQUM7SUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFBLENBQUM7QUFDZCxDQUFDLHFEQUVjLENBQU07SUFFakIsWUFBWSxDQUFDLHVCQUFBLElBQUksbUJBQU8sQ0FBQyxDQUFDO0lBQzFCLHVCQUFBLElBQUksc0JBQWlCLElBQUksTUFBQSxDQUFDO0lBRTFCLElBQUksT0FBTyxHQUFHO1FBQ1YsRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFZLEtBQUssRUFBRSxZQUFZLEVBQUssVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFFLElBQUEsVUFBTSxHQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLElBQUEsbUJBQWUsR0FBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQSxDQUFDLEVBQUM7UUFDbEosRUFBQyxTQUFTLEVBQUUsY0FBYyxFQUFNLEtBQUssRUFBRSxZQUFZLEVBQUssVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFFLElBQUEsVUFBTSxHQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLGdEQUFnRCxDQUFBLENBQUMsRUFBQztRQUM1SixFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQWUsS0FBSyxFQUFFLFNBQVMsRUFBUSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUUsSUFBQSxVQUFNLEdBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsZ0RBQWdELENBQUEsQ0FBQyxFQUFDO0tBQy9KLENBQUE7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQ2pDO1FBQ0ksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRSxJQUFBLFVBQU0sR0FBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0tBQ3hLO0lBRUQsSUFBQSxVQUFNLEdBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqRSxDQUFDO0lBSUcsbUNBQW1DO0lBQ25DLElBQUksQ0FBQyxJQUFBLFVBQU0sR0FBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBQSxJQUFJLG9CQUFRLENBQUMsRUFDcEM7UUFDSSx1QkFBQSxJQUFJLG9CQUFRLENBQUMsS0FBSyxDQUFDLElBQUEsVUFBTSxHQUFFLENBQUMsQ0FBQztLQUNoQztJQUVELHVCQUFBLElBQUksb0JBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxnQkFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsdUJBQUEsSUFBSSxvQkFBUSxDQUFDLElBQUksQ0FBQztRQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztRQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztLQUNwQixDQUFDLENBQUM7QUFDUCxDQUFDO0lBSUcsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksRUFDM0I7UUFDSSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV4RCw0QkFBNEI7UUFDNUIsT0FBTyx1QkFBQSxJQUFJLHlCQUFhLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFDckU7WUFDSSxJQUFJLE1BQU0sR0FBRyxJQUFJLGdCQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBQSxVQUFNLEdBQUUsQ0FBQyxDQUFDO1lBQ2hELHVCQUFBLElBQUkseUJBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7UUFFRCxnQ0FBZ0M7UUFDaEMsT0FBTyx1QkFBQSxJQUFJLHlCQUFhLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFDckU7WUFDSSxJQUFBLFVBQU0sR0FBRSxDQUFDLFdBQVcsQ0FBQyx1QkFBQSxJQUFJLHlCQUFhLENBQUMsdUJBQUEsSUFBSSx5QkFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLHVCQUFBLElBQUkseUJBQWEsQ0FBQyxNQUFNLENBQUMsdUJBQUEsSUFBSSx5QkFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7U0FDNUQ7UUFFRCx1RkFBdUY7UUFDdkYsS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUM5QjtZQUNJLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEMsdUJBQUEsSUFBSSx5QkFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsdUJBQUEsSUFBSSwwQkFBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQztLQUNKO0FBQ0wsQ0FBQztJQUlHLEtBQUssSUFBSSxFQUFFLElBQUksdUJBQUEsSUFBSSx5QkFBYSxFQUNoQztRQUNJLElBQUEsVUFBTSxHQUFFLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUkseUJBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsdUJBQUEsSUFBSSxxQkFBZ0IsRUFBRSxNQUFBLENBQUM7SUFDdkIsdUJBQUEsSUFBSSwwQkFBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBeUlMLE1BQWEsT0FBUSxTQUFRLElBQUk7Q0FHaEM7QUFIRCwwQkFHQztBQUVELE1BQWEsUUFBUyxTQUFRLE9BQU87SUFFakMsWUFBWSxFQUFVLEVBQUUsT0FBc0I7UUFFMUMsSUFBSSxNQUFNLEdBQUcsSUFBSSx1QkFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBUEQsNEJBT0M7QUFFRCxNQUFhLFVBQVcsU0FBUSxPQUFPO0lBRW5DLFlBQVksRUFBVSxFQUFFLE9BQXNCO1FBRTFDLElBQUksTUFBTSxHQUFHLElBQUksdUJBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQVBELGdDQU9DO0FBRUQsTUFBYSxVQUFXLFNBQVEsSUFBSTtJQUVoQyxZQUFZLEVBQVUsRUFBRSxPQUFzQjtRQUUxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLHVCQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFQRCxnQ0FPQztBQUVELE1BQWEsUUFBUyxTQUFRLElBQUk7SUFFOUIsWUFBWSxFQUFVLEVBQUUsT0FBc0I7UUFFMUMsSUFBSSxNQUFNLEdBQUcsSUFBSSx1QkFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBUEQsNEJBT0M7QUFFRCxNQUFhLE1BQU8sU0FBUSxJQUFJO0NBRy9CO0FBSEQsd0JBR0M7QUFFRCxNQUFhLE9BQVEsU0FBUSxNQUFNO0lBRS9CLFlBQVksRUFBVSxFQUFFLE9BQXNCO1FBRTFDLElBQUksTUFBTSxHQUFHLElBQUksdUJBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQVBELDBCQU9DO0FBRUQsTUFBYSxJQUFLLFNBQVEsTUFBTTtJQUU1QixZQUFZLEVBQVUsRUFBRSxPQUFzQjtRQUUxQyxJQUFJLE1BQU0sR0FBRyxJQUFJLHVCQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0o7QUFQRCxvQkFPQzs7Ozs7QUNuZFUsUUFBQSxTQUFTLEdBQVEsRUFBRSxDQUFDO0FBQy9CLFVBQVU7QUFDVixpQkFBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDcEIsaUJBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHO0lBQ2xCLFFBQVE7SUFDUixPQUFPO0lBQ1AsWUFBWTtDQUNmLENBQUE7QUFFRCxpQkFBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUc7SUFDakIsVUFBVTtJQUNWLFVBQVU7SUFDVixTQUFTO0lBQ1QsUUFBUTtJQUNSLFdBQVc7SUFDWCxPQUFPO0lBQ1AsT0FBTztDQUNWLENBQUE7QUFFRCxpQkFBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUc7SUFDbkIsT0FBTztJQUNQLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsU0FBUztDQUNaLENBQUE7QUFFRCxpQkFBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUc7SUFDdkIsTUFBTTtJQUNOLEtBQUs7Q0FDUixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHO0lBQ3ZCLFdBQVc7Q0FDZCxDQUFBO0FBRUQsdUJBQXVCO0FBQ3ZCLGlCQUFTLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQTtBQUN2QixpQkFBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUc7SUFDM0IsYUFBYTtJQUNiLGNBQWM7SUFDZCxVQUFVO0lBQ1YsYUFBYTtJQUNiLFVBQVU7SUFDVixPQUFPO0NBQ1YsQ0FBQTtBQUVELGlCQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRztJQUNyQixNQUFNO0lBQ04sT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixPQUFPO0lBQ1Asb0JBQW9CO0lBQ3BCLGFBQWE7SUFDYixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLFNBQVM7SUFDVCxZQUFZO0lBQ1osYUFBYTtJQUNiLGNBQWM7SUFDZCxZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixLQUFLO0NBQ1IsQ0FBQTtBQUVELGlCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRztJQUN0QixXQUFXO0lBQ1gsY0FBYztJQUNkLFFBQVE7SUFDUixNQUFNO0NBQ1QsQ0FBQTtBQUVELGlCQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRztJQUNyQixjQUFjO0lBQ2QsYUFBYTtJQUNiLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLHNCQUFzQjtJQUN0QixhQUFhO0lBQ2IsV0FBVztJQUNYLGFBQWE7SUFDYixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixhQUFhO0lBQ2IsYUFBYTtJQUNiLFFBQVE7SUFDUixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixRQUFRO0lBQ1IsU0FBUztJQUNULGVBQWU7SUFDZixlQUFlO0lBQ2YsWUFBWTtJQUNaLGVBQWU7SUFDZixhQUFhO0lBQ2IsWUFBWTtJQUNaLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQix3QkFBd0I7SUFDeEIsMEJBQTBCO0lBQzFCLGlCQUFpQjtJQUNqQixnQkFBZ0I7Q0FDbkIsQ0FBQTtBQUVELGlCQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRztJQUN2QixVQUFVO0lBQ1YsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsZUFBZTtJQUNmLFNBQVM7SUFDVCxTQUFTO0lBQ1QsYUFBYTtJQUNiLFdBQVc7SUFDWCxlQUFlO0lBQ2YsY0FBYztJQUNkLGNBQWM7Q0FDakIsQ0FBQTtBQUVELGlCQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRztJQUM1QixXQUFXO0lBQ1gsV0FBVztJQUNYLGNBQWM7SUFDZCxTQUFTO0lBQ1QsWUFBWTtDQUNmLENBQUE7QUFFRCxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUc7SUFDdkIsYUFBYTtJQUNiLFNBQVM7SUFDVCxZQUFZO0lBQ1osV0FBVztJQUNYLE1BQU07SUFDTixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLE1BQU07SUFDTixPQUFPO0lBQ1AsUUFBUTtJQUNSLE1BQU07Q0FDVCxDQUFBO0FBRUQsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHO0lBQ3pCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsUUFBUTtJQUNSLFVBQVU7SUFDVixVQUFVO0lBQ1YsUUFBUTtJQUNSLG1CQUFtQjtJQUNuQixZQUFZO0lBQ1osWUFBWTtJQUNaLGFBQWE7SUFDYixTQUFTO0lBQ1QsUUFBUTtJQUNSLE9BQU87SUFDUCxVQUFVO0lBQ1YsY0FBYztJQUNkLHVCQUF1QjtJQUN2QixRQUFRO0lBQ1IsYUFBYTtJQUNiLGFBQWE7SUFDYixTQUFTO0lBQ1QsYUFBYTtJQUNiLGNBQWM7SUFDZCxVQUFVO0lBQ1YsY0FBYztJQUNkLFlBQVk7SUFDWixTQUFTO0lBQ1QsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixjQUFjO0lBQ2QsVUFBVTtDQUNiLENBQUE7QUFFRCxlQUFlO0FBQ2YsaUJBQVMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFBO0FBRWxCLGlCQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRztJQUNoQixNQUFNO0lBQ04sU0FBUztJQUNULFNBQVM7SUFDVCxPQUFPO0lBQ1AsT0FBTztJQUNQLFdBQVc7SUFDWCxPQUFPO0lBQ1AsV0FBVztJQUNYLE9BQU87SUFDUCxRQUFRO0lBQ1IsZUFBZTtJQUNmLE9BQU87SUFDUCxNQUFNO0lBQ04sY0FBYztDQUNqQixDQUFBO0FBRUQsaUJBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHO0lBQ2hCLGFBQWE7SUFDYixNQUFNO0lBQ04sU0FBUztJQUNULFNBQVM7SUFDVCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxTQUFTO0lBQ1QsT0FBTztDQUNWLENBQUE7QUFFRCxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUc7SUFDbkIsU0FBUztJQUNULE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0lBQ1IsUUFBUTtJQUNSLE1BQU07SUFDTixRQUFRO0NBQ1gsQ0FBQTtBQUVELGlCQUFTLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRztJQUNqQixhQUFhO0lBQ2IsUUFBUTtJQUNSLFFBQVE7Q0FDWCxDQUFBO0FBRUQsaUJBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHO0lBQ2xCLE1BQU07SUFDTixNQUFNO0lBQ04sTUFBTTtDQUNULENBQUE7QUFFRCxpQkFBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUc7SUFDbEIsZ0JBQWdCO0lBQ2hCLGFBQWE7Q0FDaEIsQ0FBQTtBQUVELGlCQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRztJQUN0QixPQUFPO0lBQ1AsUUFBUTtJQUNSLFFBQVE7SUFDUixPQUFPO0lBQ1AsU0FBUztDQUNaLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuUkQsMkNBQTRCO0FBQzVCLHlDQUFrQztBQW1CbEMsTUFBYSxVQUFXLFNBQVEsQ0FBQyxDQUFDLE1BQU07SUFRcEMsWUFBWSxPQUFzQjtRQUU5QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDOztRQVJuRCx1Q0FBc0I7UUFDdEIsbUNBQXNCO1FBQ3RCLG9DQUF1QjtRQUN2QiwwQ0FBc0I7UUFDdEIsb0NBQXVCO1FBS25CLHVCQUFBLElBQUksd0JBQWEsT0FBTyxDQUFDLFFBQVEsTUFBQSxDQUFBO1FBQ2pDLHVCQUFBLElBQUksb0JBQVMsT0FBTyxDQUFDLElBQUksTUFBQSxDQUFBO1FBQ3pCLHVCQUFBLElBQUkscUJBQVUsT0FBTyxDQUFDLEtBQUssTUFBQSxDQUFBO1FBQzNCLHVCQUFBLElBQUksMkJBQWdCLE9BQU8sQ0FBQyxXQUFXLE1BQUEsQ0FBQTtRQUV2Qyx1QkFBQSxJQUFJLHFCQUFVLElBQUksTUFBQSxDQUFDO1FBRW5CLElBQUksTUFBTSxHQUFHLElBQUksa0JBQU0sQ0FBQyx1QkFBQSxJQUFJLDREQUFtQixNQUF2QixJQUFJLEVBQW9CLE9BQU8sQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxHQUFHLEdBQU0sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV0RCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDckIsSUFBSSxFQUFFOzs7Z0ZBRzhELEdBQUc7OEVBQ0wsdUJBQUEsSUFBSSw0QkFBVTs7O3NFQUd0Qix1QkFBQSxJQUFJLHdCQUFNOzs7eUJBR3ZEO1lBQ2IsU0FBUyxFQUFFLGFBQWE7U0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQVU7UUFFWixLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksT0FBTyxHQUFnQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxVQUFTLENBQU0sWUFBSSxNQUFBLENBQUMsQ0FBQyxNQUFNLDBDQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBUyxDQUFNLFlBQUksTUFBQSxDQUFDLENBQUMsTUFBTSwwQ0FBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUNwRixPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBZ0I7UUFFakIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxJQUFJLElBQUksRUFDbkI7WUFDSSxJQUFJLE9BQU8sR0FBZ0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxRCxJQUFJLFdBQVcsR0FBZ0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxJQUFJLFNBQVMsR0FBZ0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRSxJQUFJLElBQUksR0FBZ0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxJQUFJLFdBQVcsR0FBZ0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxJQUFJLFFBQVEsR0FBZ0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1RCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDakYsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBRXpGLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN6RCxXQUFXLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFpQjs7UUFFekIsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLEVBQUUsMENBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDbkYsTUFBQSxNQUFBLElBQUksQ0FBQyxVQUFVLEVBQUUsMENBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBZ0I7O1FBRXZCLE1BQUEsTUFBQSxJQUFJLENBQUMsVUFBVSxFQUFFLDBDQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsMENBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLElBQUksdUJBQUEsSUFBSSx5QkFBTyxDQUFDLENBQUM7SUFDL0csQ0FBQztDQWtESjtBQTlIRCxnQ0E4SEM7cVNBaERzQixPQUFzQjtJQUVyQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO0lBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztJQUN0QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFFekIsY0FBYztJQUNkLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDO1FBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUEsQ0FBQyxhQUFhO1NBQzVCLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDO1FBQzdCLFFBQVEsR0FBRyxJQUFJLENBQUEsQ0FBQyxjQUFjOztRQUU5QixRQUFRLEdBQUcsSUFBSSxDQUFBLENBQUMsYUFBYTtJQUVqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDNUI7UUFDSSxHQUFHLEdBQUcsSUFBSSxDQUFBO1FBQ1YsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUNiLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN4QixVQUFVLEdBQUcsSUFBSSxDQUFBO2FBQ2hCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixVQUFVLEdBQUcsSUFBSSxDQUFBO1FBRXJCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUN4QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQ3BCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDO0tBQzVCO1NBQ0ksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQzdCLEdBQUcsR0FBRyxJQUFJLENBQUE7U0FDVCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDN0IsR0FBRyxHQUFHLElBQUksQ0FBQTtTQUNULElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztRQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFBO0lBR2QsT0FBTyxLQUFLLFFBQVEsR0FBRyxHQUFHLE9BQU8sTUFBTSxHQUFHLFVBQVUsR0FBRyxhQUFhLE1BQU0sQ0FBQTtBQUM5RSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2pKTCwwQkFBOEM7QUFDOUMsaUNBQTBDO0FBRTFDLE1BQWEsWUFBWTtJQUtyQjtRQUhBLHNDQUE4QjtRQUM5Qiw0Q0FBcUI7UUFJakIsdUJBQUEsSUFBSSx1QkFBVSxFQUFFLE1BQUEsQ0FBQztRQUNqQix1QkFBQSxJQUFJLDZCQUFnQixFQUFFLE1BQUEsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQVUsRUFBRSxJQUFTO1FBRXpCLCtFQUErRTtRQUMvRSxJQUFJLFdBQVcsR0FBRyxXQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLFdBQVcsSUFBSSxTQUFTLEVBQzVCO1lBQ0ksSUFBSSxPQUFPLEdBQUc7Z0JBQ1YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNsQixDQUFBO1lBQ0QsdUJBQUEsSUFBSSwyQkFBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUVsQixPQUFPLHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQVU7SUFHckIsQ0FBQztJQUVELGdCQUFnQjtRQUVaLEtBQUssSUFBSSxFQUFFLElBQUksdUJBQUEsSUFBSSwyQkFBTyxFQUMxQjtZQUNJLHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVM7UUFFWixLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFDNUI7WUFDSSwyR0FBMkc7WUFDM0csSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUN4QjtnQkFDSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqRDtZQUNELHVCQUFBLElBQUksMkJBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdkQ7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQ3ZDO1lBQ0ksSUFBQSxvQkFBZ0IsR0FBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUEsb0JBQWdCLEdBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RDthQUVEO1lBQ0ksSUFBQSxvQkFBZ0IsR0FBRSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFFWCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3RDO1lBQ0ksSUFBQSxVQUFNLEdBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0Isb0NBQW9DO1NBQ3ZDO2FBRUQ7WUFDSSxJQUFBLFVBQU0sR0FBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixxQ0FBcUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLElBQUk7SUFDSiwrQkFBK0I7SUFDL0Isa0NBQWtDO0lBQ2xDLFFBQVE7SUFDUix3RkFBd0Y7SUFDeEYsdUNBQXVDO0lBQ3ZDLFlBQVk7SUFDWixpREFBaUQ7SUFDakQsWUFBWTtJQUNaLFFBQVE7SUFDUixJQUFJO0lBRUosZ0JBQWdCO1FBRVosSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxFQUFFLElBQUksdUJBQUEsSUFBSSwyQkFBTyxFQUMxQjtZQUNJLElBQUksdUJBQUEsSUFBSSwyQkFBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUNqQztnQkFDSSxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUFBLElBQUksMkJBQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0o7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWdCO1FBRTNCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLEtBQUssSUFBSSxHQUFHLElBQUksYUFBYSxFQUM3QjtZQUNJLElBQUksYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxpQ0FBaUM7WUFDakMsR0FBRztZQUNILDREQUE0RDtZQUM1RCxHQUFHO1lBQ0gsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN4QztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFFYixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QyxLQUFLLElBQUksR0FBRyxJQUFJLGFBQWEsRUFDN0I7WUFDSSxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsaUNBQWlDO1lBQ2pDLEdBQUc7WUFDSCw0REFBNEQ7WUFDNUQsR0FBRztZQUNILGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixJQUFJO0lBRUosSUFBSTtJQUVKLHdDQUF3QztJQUN4QyxJQUFJO0lBQ0osbURBQW1EO0lBQ25ELHFDQUFxQztJQUNyQyxRQUFRO0lBQ1IsdURBQXVEO0lBQ3ZELFFBQVE7SUFDUixJQUFJO0lBRUosOENBQThDO0lBQzlDLElBQUk7SUFDSixtREFBbUQ7SUFDbkQscUNBQXFDO0lBQ3JDLFFBQVE7SUFDUiw2REFBNkQ7SUFDN0QsUUFBUTtJQUNSLElBQUk7SUFFSixvQkFBb0I7SUFDcEIsSUFBSTtJQUNKLHNFQUFzRTtJQUN0RSxRQUFRO0lBQ1IsNEJBQTRCO0lBQzVCLFFBQVE7SUFDUiwyRUFBMkU7SUFDM0UsUUFBUTtJQUNSLDZCQUE2QjtJQUM3QixRQUFRO0lBQ1IsSUFBSTtJQUVKLGNBQWM7SUFDZCxJQUFJO0lBQ0osbURBQW1EO0lBQ25ELElBQUk7SUFFSixlQUFlO0lBQ2YsSUFBSTtJQUNKLHlDQUF5QztJQUN6QyxRQUFRO0lBQ1IsNkNBQTZDO0lBQzdDLDhCQUE4QjtJQUM5QixRQUFRO0lBQ1IsSUFBSTtJQUVKLFVBQVUsQ0FBQyxFQUFVO1FBRWpCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLEtBQUssSUFBSSxHQUFHLElBQUksYUFBYSxFQUM3QjtZQUNJLDREQUE0RDtZQUM1RCxJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkMsaUNBQWlDO1lBQ2pDLEdBQUc7WUFDSCw0REFBNEQ7WUFDNUQsR0FBRztZQUNILGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDaEM7SUFDTCxDQUFDO0NBeURKO0FBaFFELG9DQWdRQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qIEBwcmVzZXJ2ZVxuICogTGVhZmxldCAxLjkuMywgYSBKUyBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzLiBodHRwczovL2xlYWZsZXRqcy5jb21cbiAqIChjKSAyMDEwLTIwMjIgVmxhZGltaXIgQWdhZm9ua2luLCAoYykgMjAxMC0yMDExIENsb3VkTWFkZVxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZmFjdG9yeShnbG9iYWwubGVhZmxldCA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB2ZXJzaW9uID0gXCIxLjkuM1wiO1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBVdGlsXHJcbiAgICpcclxuICAgKiBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseS5cclxuICAgKi9cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGV4dGVuZChkZXN0OiBPYmplY3QsIHNyYz86IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIE1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgYHNyY2Agb2JqZWN0IChvciBtdWx0aXBsZSBvYmplY3RzKSBpbnRvIGBkZXN0YCBvYmplY3QgYW5kIHJldHVybnMgdGhlIGxhdHRlci4gSGFzIGFuIGBMLmV4dGVuZGAgc2hvcnRjdXQuXHJcbiAgZnVuY3Rpb24gZXh0ZW5kKGRlc3QpIHtcclxuICBcdHZhciBpLCBqLCBsZW4sIHNyYztcclxuXHJcbiAgXHRmb3IgKGogPSAxLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcclxuICBcdFx0c3JjID0gYXJndW1lbnRzW2pdO1xyXG4gIFx0XHRmb3IgKGkgaW4gc3JjKSB7XHJcbiAgXHRcdFx0ZGVzdFtpXSA9IHNyY1tpXTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGRlc3Q7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY3JlYXRlKHByb3RvOiBPYmplY3QsIHByb3BlcnRpZXM/OiBPYmplY3QpOiBPYmplY3RcclxuICAvLyBDb21wYXRpYmlsaXR5IHBvbHlmaWxsIGZvciBbT2JqZWN0LmNyZWF0ZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2NyZWF0ZSlcclxuICB2YXIgY3JlYXRlJDIgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgXHRmdW5jdGlvbiBGKCkge31cclxuICBcdHJldHVybiBmdW5jdGlvbiAocHJvdG8pIHtcclxuICBcdFx0Ri5wcm90b3R5cGUgPSBwcm90bztcclxuICBcdFx0cmV0dXJuIG5ldyBGKCk7XHJcbiAgXHR9O1xyXG4gIH0pKCk7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBiaW5kKGZuOiBGdW5jdGlvbiwg4oCmKTogRnVuY3Rpb25cclxuICAvLyBSZXR1cm5zIGEgbmV3IGZ1bmN0aW9uIGJvdW5kIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkLCBsaWtlIFtGdW5jdGlvbi5wcm90b3R5cGUuYmluZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZCkuXHJcbiAgLy8gSGFzIGEgYEwuYmluZCgpYCBzaG9ydGN1dC5cclxuICBmdW5jdGlvbiBiaW5kKGZuLCBvYmopIHtcclxuICBcdHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcclxuXHJcbiAgXHRpZiAoZm4uYmluZCkge1xyXG4gIFx0XHRyZXR1cm4gZm4uYmluZC5hcHBseShmbiwgc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTtcclxuXHJcbiAgXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gZm4uYXBwbHkob2JqLCBhcmdzLmxlbmd0aCA/IGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkgOiBhcmd1bWVudHMpO1xyXG4gIFx0fTtcclxuICB9XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBsYXN0SWQ6IE51bWJlclxyXG4gIC8vIExhc3QgdW5pcXVlIElEIHVzZWQgYnkgW2BzdGFtcCgpYF0oI3V0aWwtc3RhbXApXHJcbiAgdmFyIGxhc3RJZCA9IDA7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzdGFtcChvYmo6IE9iamVjdCk6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIHVuaXF1ZSBJRCBvZiBhbiBvYmplY3QsIGFzc2lnbmluZyBpdCBvbmUgaWYgaXQgZG9lc24ndCBoYXZlIGl0LlxyXG4gIGZ1bmN0aW9uIHN0YW1wKG9iaikge1xyXG4gIFx0aWYgKCEoJ19sZWFmbGV0X2lkJyBpbiBvYmopKSB7XHJcbiAgXHRcdG9ialsnX2xlYWZsZXRfaWQnXSA9ICsrbGFzdElkO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG9iai5fbGVhZmxldF9pZDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0aHJvdHRsZShmbjogRnVuY3Rpb24sIHRpbWU6IE51bWJlciwgY29udGV4dDogT2JqZWN0KTogRnVuY3Rpb25cclxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggZXhlY3V0ZXMgZnVuY3Rpb24gYGZuYCB3aXRoIHRoZSBnaXZlbiBzY29wZSBgY29udGV4dGBcclxuICAvLyAoc28gdGhhdCB0aGUgYHRoaXNgIGtleXdvcmQgcmVmZXJzIHRvIGBjb250ZXh0YCBpbnNpZGUgYGZuYCdzIGNvZGUpLiBUaGUgZnVuY3Rpb25cclxuICAvLyBgZm5gIHdpbGwgYmUgY2FsbGVkIG5vIG1vcmUgdGhhbiBvbmUgdGltZSBwZXIgZ2l2ZW4gYW1vdW50IG9mIGB0aW1lYC4gVGhlIGFyZ3VtZW50c1xyXG4gIC8vIHJlY2VpdmVkIGJ5IHRoZSBib3VuZCBmdW5jdGlvbiB3aWxsIGJlIGFueSBhcmd1bWVudHMgcGFzc2VkIHdoZW4gYmluZGluZyB0aGVcclxuICAvLyBmdW5jdGlvbiwgZm9sbG93ZWQgYnkgYW55IGFyZ3VtZW50cyBwYXNzZWQgd2hlbiBpbnZva2luZyB0aGUgYm91bmQgZnVuY3Rpb24uXHJcbiAgLy8gSGFzIGFuIGBMLnRocm90dGxlYCBzaG9ydGN1dC5cclxuICBmdW5jdGlvbiB0aHJvdHRsZShmbiwgdGltZSwgY29udGV4dCkge1xyXG4gIFx0dmFyIGxvY2ssIGFyZ3MsIHdyYXBwZXJGbiwgbGF0ZXI7XHJcblxyXG4gIFx0bGF0ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIHJlc2V0IGxvY2sgYW5kIGNhbGwgaWYgcXVldWVkXHJcbiAgXHRcdGxvY2sgPSBmYWxzZTtcclxuICBcdFx0aWYgKGFyZ3MpIHtcclxuICBcdFx0XHR3cmFwcGVyRm4uYXBwbHkoY29udGV4dCwgYXJncyk7XHJcbiAgXHRcdFx0YXJncyA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG5cclxuICBcdHdyYXBwZXJGbiA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKGxvY2spIHtcclxuICBcdFx0XHQvLyBjYWxsZWQgdG9vIHNvb24sIHF1ZXVlIHRvIGNhbGwgbGF0ZXJcclxuICBcdFx0XHRhcmdzID0gYXJndW1lbnRzO1xyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHQvLyBjYWxsIGFuZCBsb2NrIHVudGlsIGxhdGVyXHJcbiAgXHRcdFx0Zm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcclxuICBcdFx0XHRzZXRUaW1lb3V0KGxhdGVyLCB0aW1lKTtcclxuICBcdFx0XHRsb2NrID0gdHJ1ZTtcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuXHJcbiAgXHRyZXR1cm4gd3JhcHBlckZuO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHdyYXBOdW0obnVtOiBOdW1iZXIsIHJhbmdlOiBOdW1iZXJbXSwgaW5jbHVkZU1heD86IEJvb2xlYW4pOiBOdW1iZXJcclxuICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgYG51bWAgbW9kdWxvIGByYW5nZWAgaW4gc3VjaCBhIHdheSBzbyBpdCBsaWVzIHdpdGhpblxyXG4gIC8vIGByYW5nZVswXWAgYW5kIGByYW5nZVsxXWAuIFRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIGFsd2F5cyBzbWFsbGVyIHRoYW5cclxuICAvLyBgcmFuZ2VbMV1gIHVubGVzcyBgaW5jbHVkZU1heGAgaXMgc2V0IHRvIGB0cnVlYC5cclxuICBmdW5jdGlvbiB3cmFwTnVtKHgsIHJhbmdlLCBpbmNsdWRlTWF4KSB7XHJcbiAgXHR2YXIgbWF4ID0gcmFuZ2VbMV0sXHJcbiAgXHQgICAgbWluID0gcmFuZ2VbMF0sXHJcbiAgXHQgICAgZCA9IG1heCAtIG1pbjtcclxuICBcdHJldHVybiB4ID09PSBtYXggJiYgaW5jbHVkZU1heCA/IHggOiAoKHggLSBtaW4pICUgZCArIGQpICUgZCArIG1pbjtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBmYWxzZUZuKCk6IEZ1bmN0aW9uXHJcbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGFsd2F5cyByZXR1cm5zIGBmYWxzZWAuXHJcbiAgZnVuY3Rpb24gZmFsc2VGbigpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBmb3JtYXROdW0obnVtOiBOdW1iZXIsIHByZWNpc2lvbj86IE51bWJlcnxmYWxzZSk6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIG51bWJlciBgbnVtYCByb3VuZGVkIHdpdGggc3BlY2lmaWVkIGBwcmVjaXNpb25gLlxyXG4gIC8vIFRoZSBkZWZhdWx0IGBwcmVjaXNpb25gIHZhbHVlIGlzIDYgZGVjaW1hbCBwbGFjZXMuXHJcbiAgLy8gYGZhbHNlYCBjYW4gYmUgcGFzc2VkIHRvIHNraXAgYW55IHByb2Nlc3NpbmcgKGNhbiBiZSB1c2VmdWwgdG8gYXZvaWQgcm91bmQtb2ZmIGVycm9ycykuXHJcbiAgZnVuY3Rpb24gZm9ybWF0TnVtKG51bSwgcHJlY2lzaW9uKSB7XHJcbiAgXHRpZiAocHJlY2lzaW9uID09PSBmYWxzZSkgeyByZXR1cm4gbnVtOyB9XHJcbiAgXHR2YXIgcG93ID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gNiA6IHByZWNpc2lvbik7XHJcbiAgXHRyZXR1cm4gTWF0aC5yb3VuZChudW0gKiBwb3cpIC8gcG93O1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRyaW0oc3RyOiBTdHJpbmcpOiBTdHJpbmdcclxuICAvLyBDb21wYXRpYmlsaXR5IHBvbHlmaWxsIGZvciBbU3RyaW5nLnByb3RvdHlwZS50cmltXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvVHJpbSlcclxuICBmdW5jdGlvbiB0cmltKHN0cikge1xyXG4gIFx0cmV0dXJuIHN0ci50cmltID8gc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc3BsaXRXb3JkcyhzdHI6IFN0cmluZyk6IFN0cmluZ1tdXHJcbiAgLy8gVHJpbXMgYW5kIHNwbGl0cyB0aGUgc3RyaW5nIG9uIHdoaXRlc3BhY2UgYW5kIHJldHVybnMgdGhlIGFycmF5IG9mIHBhcnRzLlxyXG4gIGZ1bmN0aW9uIHNwbGl0V29yZHMoc3RyKSB7XHJcbiAgXHRyZXR1cm4gdHJpbShzdHIpLnNwbGl0KC9cXHMrLyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0T3B0aW9ucyhvYmo6IE9iamVjdCwgb3B0aW9uczogT2JqZWN0KTogT2JqZWN0XHJcbiAgLy8gTWVyZ2VzIHRoZSBnaXZlbiBwcm9wZXJ0aWVzIHRvIHRoZSBgb3B0aW9uc2Agb2YgdGhlIGBvYmpgIG9iamVjdCwgcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgb3B0aW9ucy4gU2VlIGBDbGFzcyBvcHRpb25zYC4gSGFzIGFuIGBMLnNldE9wdGlvbnNgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIHNldE9wdGlvbnMob2JqLCBvcHRpb25zKSB7XHJcbiAgXHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosICdvcHRpb25zJykpIHtcclxuICBcdFx0b2JqLm9wdGlvbnMgPSBvYmoub3B0aW9ucyA/IGNyZWF0ZSQyKG9iai5vcHRpb25zKSA6IHt9O1xyXG4gIFx0fVxyXG4gIFx0Zm9yICh2YXIgaSBpbiBvcHRpb25zKSB7XHJcbiAgXHRcdG9iai5vcHRpb25zW2ldID0gb3B0aW9uc1tpXTtcclxuICBcdH1cclxuICBcdHJldHVybiBvYmoub3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRQYXJhbVN0cmluZyhvYmo6IE9iamVjdCwgZXhpc3RpbmdVcmw/OiBTdHJpbmcsIHVwcGVyY2FzZT86IEJvb2xlYW4pOiBTdHJpbmdcclxuICAvLyBDb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIHBhcmFtZXRlciBVUkwgc3RyaW5nLCBlLmcuIGB7YTogXCJmb29cIiwgYjogXCJiYXJcIn1gXHJcbiAgLy8gdHJhbnNsYXRlcyB0byBgJz9hPWZvbyZiPWJhcidgLiBJZiBgZXhpc3RpbmdVcmxgIGlzIHNldCwgdGhlIHBhcmFtZXRlcnMgd2lsbFxyXG4gIC8vIGJlIGFwcGVuZGVkIGF0IHRoZSBlbmQuIElmIGB1cHBlcmNhc2VgIGlzIGB0cnVlYCwgdGhlIHBhcmFtZXRlciBuYW1lcyB3aWxsXHJcbiAgLy8gYmUgdXBwZXJjYXNlZCAoZS5nLiBgJz9BPWZvbyZCPWJhcidgKVxyXG4gIGZ1bmN0aW9uIGdldFBhcmFtU3RyaW5nKG9iaiwgZXhpc3RpbmdVcmwsIHVwcGVyY2FzZSkge1xyXG4gIFx0dmFyIHBhcmFtcyA9IFtdO1xyXG4gIFx0Zm9yICh2YXIgaSBpbiBvYmopIHtcclxuICBcdFx0cGFyYW1zLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHVwcGVyY2FzZSA/IGkudG9VcHBlckNhc2UoKSA6IGkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG9ialtpXSkpO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuICgoIWV4aXN0aW5nVXJsIHx8IGV4aXN0aW5nVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEpID8gJz8nIDogJyYnKSArIHBhcmFtcy5qb2luKCcmJyk7XHJcbiAgfVxyXG5cclxuICB2YXIgdGVtcGxhdGVSZSA9IC9cXHsgKihbXFx3XyAtXSspICpcXH0vZztcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRlbXBsYXRlKHN0cjogU3RyaW5nLCBkYXRhOiBPYmplY3QpOiBTdHJpbmdcclxuICAvLyBTaW1wbGUgdGVtcGxhdGluZyBmYWNpbGl0eSwgYWNjZXB0cyBhIHRlbXBsYXRlIHN0cmluZyBvZiB0aGUgZm9ybSBgJ0hlbGxvIHthfSwge2J9J2BcclxuICAvLyBhbmQgYSBkYXRhIG9iamVjdCBsaWtlIGB7YTogJ2ZvbycsIGI6ICdiYXInfWAsIHJldHVybnMgZXZhbHVhdGVkIHN0cmluZ1xyXG4gIC8vIGAoJ0hlbGxvIGZvbywgYmFyJylgLiBZb3UgY2FuIGFsc28gc3BlY2lmeSBmdW5jdGlvbnMgaW5zdGVhZCBvZiBzdHJpbmdzIGZvclxyXG4gIC8vIGRhdGEgdmFsdWVzIOKAlCB0aGV5IHdpbGwgYmUgZXZhbHVhdGVkIHBhc3NpbmcgYGRhdGFgIGFzIGFuIGFyZ3VtZW50LlxyXG4gIGZ1bmN0aW9uIHRlbXBsYXRlKHN0ciwgZGF0YSkge1xyXG4gIFx0cmV0dXJuIHN0ci5yZXBsYWNlKHRlbXBsYXRlUmUsIGZ1bmN0aW9uIChzdHIsIGtleSkge1xyXG4gIFx0XHR2YXIgdmFsdWUgPSBkYXRhW2tleV07XHJcblxyXG4gIFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTm8gdmFsdWUgcHJvdmlkZWQgZm9yIHZhcmlhYmxlICcgKyBzdHIpO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICBcdFx0XHR2YWx1ZSA9IHZhbHVlKGRhdGEpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB2YWx1ZTtcclxuICBcdH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGlzQXJyYXkob2JqKTogQm9vbGVhblxyXG4gIC8vIENvbXBhdGliaWxpdHkgcG9seWZpbGwgZm9yIFtBcnJheS5pc0FycmF5XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pc0FycmF5KVxyXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRyZXR1cm4gKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nKTtcclxuICB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gaW5kZXhPZihhcnJheTogQXJyYXksIGVsOiBPYmplY3QpOiBOdW1iZXJcclxuICAvLyBDb21wYXRpYmlsaXR5IHBvbHlmaWxsIGZvciBbQXJyYXkucHJvdG90eXBlLmluZGV4T2ZdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2luZGV4T2YpXHJcbiAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgZWwpIHtcclxuICBcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0aWYgKGFycmF5W2ldID09PSBlbCkgeyByZXR1cm4gaTsgfVxyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLy8gQHByb3BlcnR5IGVtcHR5SW1hZ2VVcmw6IFN0cmluZ1xyXG4gIC8vIERhdGEgVVJJIHN0cmluZyBjb250YWluaW5nIGEgYmFzZTY0LWVuY29kZWQgZW1wdHkgR0lGIGltYWdlLlxyXG4gIC8vIFVzZWQgYXMgYSBoYWNrIHRvIGZyZWUgbWVtb3J5IGZyb20gdW51c2VkIGltYWdlcyBvbiBXZWJLaXQtcG93ZXJlZFxyXG4gIC8vIG1vYmlsZSBkZXZpY2VzIChieSBzZXR0aW5nIGltYWdlIGBzcmNgIHRvIHRoaXMgc3RyaW5nKS5cclxuICB2YXIgZW1wdHlJbWFnZVVybCA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFEL0FDd0FBQUFBQVFBQkFBQUNBRHM9JztcclxuXHJcbiAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWZpeGVkKG5hbWUpIHtcclxuICBcdHJldHVybiB3aW5kb3dbJ3dlYmtpdCcgKyBuYW1lXSB8fCB3aW5kb3dbJ21veicgKyBuYW1lXSB8fCB3aW5kb3dbJ21zJyArIG5hbWVdO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxhc3RUaW1lID0gMDtcclxuXHJcbiAgLy8gZmFsbGJhY2sgZm9yIElFIDctOFxyXG4gIGZ1bmN0aW9uIHRpbWVvdXREZWZlcihmbikge1xyXG4gIFx0dmFyIHRpbWUgPSArbmV3IERhdGUoKSxcclxuICBcdCAgICB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAodGltZSAtIGxhc3RUaW1lKSk7XHJcblxyXG4gIFx0bGFzdFRpbWUgPSB0aW1lICsgdGltZVRvQ2FsbDtcclxuICBcdHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmbiwgdGltZVRvQ2FsbCk7XHJcbiAgfVxyXG5cclxuICB2YXIgcmVxdWVzdEZuID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBnZXRQcmVmaXhlZCgnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJykgfHwgdGltZW91dERlZmVyO1xyXG4gIHZhciBjYW5jZWxGbiA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSB8fCBnZXRQcmVmaXhlZCgnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnKSB8fFxyXG4gIFx0XHRnZXRQcmVmaXhlZCgnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJykgfHwgZnVuY3Rpb24gKGlkKSB7IHdpbmRvdy5jbGVhclRpbWVvdXQoaWQpOyB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gcmVxdWVzdEFuaW1GcmFtZShmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QsIGltbWVkaWF0ZT86IEJvb2xlYW4pOiBOdW1iZXJcclxuICAvLyBTY2hlZHVsZXMgYGZuYCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBicm93c2VyIHJlcGFpbnRzLiBgZm5gIGlzIGJvdW5kIHRvXHJcbiAgLy8gYGNvbnRleHRgIGlmIGdpdmVuLiBXaGVuIGBpbW1lZGlhdGVgIGlzIHNldCwgYGZuYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgaWZcclxuICAvLyB0aGUgYnJvd3NlciBkb2Vzbid0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yXHJcbiAgLy8gW2B3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL3dpbmRvdy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLFxyXG4gIC8vIG90aGVyd2lzZSBpdCdzIGRlbGF5ZWQuIFJldHVybnMgYSByZXF1ZXN0IElEIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LlxyXG4gIGZ1bmN0aW9uIHJlcXVlc3RBbmltRnJhbWUoZm4sIGNvbnRleHQsIGltbWVkaWF0ZSkge1xyXG4gIFx0aWYgKGltbWVkaWF0ZSAmJiByZXF1ZXN0Rm4gPT09IHRpbWVvdXREZWZlcikge1xyXG4gIFx0XHRmbi5jYWxsKGNvbnRleHQpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0cmV0dXJuIHJlcXVlc3RGbi5jYWxsKHdpbmRvdywgYmluZChmbiwgY29udGV4dCkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNhbmNlbEFuaW1GcmFtZShpZDogTnVtYmVyKTogdW5kZWZpbmVkXHJcbiAgLy8gQ2FuY2VscyBhIHByZXZpb3VzIGByZXF1ZXN0QW5pbUZyYW1lYC4gU2VlIGFsc28gW3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL3dpbmRvdy9jYW5jZWxBbmltYXRpb25GcmFtZSkuXHJcbiAgZnVuY3Rpb24gY2FuY2VsQW5pbUZyYW1lKGlkKSB7XHJcbiAgXHRpZiAoaWQpIHtcclxuICBcdFx0Y2FuY2VsRm4uY2FsbCh3aW5kb3csIGlkKTtcclxuICBcdH1cclxuICB9XG5cbiAgdmFyIFV0aWwgPSB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIGNyZWF0ZTogY3JlYXRlJDIsXG4gICAgYmluZDogYmluZCxcbiAgICBnZXQgbGFzdElkICgpIHsgcmV0dXJuIGxhc3RJZDsgfSxcbiAgICBzdGFtcDogc3RhbXAsXG4gICAgdGhyb3R0bGU6IHRocm90dGxlLFxuICAgIHdyYXBOdW06IHdyYXBOdW0sXG4gICAgZmFsc2VGbjogZmFsc2VGbixcbiAgICBmb3JtYXROdW06IGZvcm1hdE51bSxcbiAgICB0cmltOiB0cmltLFxuICAgIHNwbGl0V29yZHM6IHNwbGl0V29yZHMsXG4gICAgc2V0T3B0aW9uczogc2V0T3B0aW9ucyxcbiAgICBnZXRQYXJhbVN0cmluZzogZ2V0UGFyYW1TdHJpbmcsXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgIGlzQXJyYXk6IGlzQXJyYXksXG4gICAgaW5kZXhPZjogaW5kZXhPZixcbiAgICBlbXB0eUltYWdlVXJsOiBlbXB0eUltYWdlVXJsLFxuICAgIHJlcXVlc3RGbjogcmVxdWVzdEZuLFxuICAgIGNhbmNlbEZuOiBjYW5jZWxGbixcbiAgICByZXF1ZXN0QW5pbUZyYW1lOiByZXF1ZXN0QW5pbUZyYW1lLFxuICAgIGNhbmNlbEFuaW1GcmFtZTogY2FuY2VsQW5pbUZyYW1lXG4gIH07XG5cbiAgLy8gQGNsYXNzIENsYXNzXHJcbiAgLy8gQGFrYSBMLkNsYXNzXHJcblxyXG4gIC8vIEBzZWN0aW9uXHJcbiAgLy8gQHVuaW5oZXJpdGFibGVcclxuXHJcbiAgLy8gVGhhbmtzIHRvIEpvaG4gUmVzaWcgYW5kIERlYW4gRWR3YXJkcyBmb3IgaW5zcGlyYXRpb24hXHJcblxyXG4gIGZ1bmN0aW9uIENsYXNzKCkge31cclxuXHJcbiAgQ2xhc3MuZXh0ZW5kID0gZnVuY3Rpb24gKHByb3BzKSB7XHJcblxyXG4gIFx0Ly8gQGZ1bmN0aW9uIGV4dGVuZChwcm9wczogT2JqZWN0KTogRnVuY3Rpb25cclxuICBcdC8vIFtFeHRlbmRzIHRoZSBjdXJyZW50IGNsYXNzXSgjY2xhc3MtaW5oZXJpdGFuY2UpIGdpdmVuIHRoZSBwcm9wZXJ0aWVzIHRvIGJlIGluY2x1ZGVkLlxyXG4gIFx0Ly8gUmV0dXJucyBhIEphdmFzY3JpcHQgZnVuY3Rpb24gdGhhdCBpcyBhIGNsYXNzIGNvbnN0cnVjdG9yICh0byBiZSBjYWxsZWQgd2l0aCBgbmV3YCkuXHJcbiAgXHR2YXIgTmV3Q2xhc3MgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMpO1xyXG5cclxuICBcdFx0Ly8gY2FsbCB0aGUgY29uc3RydWN0b3JcclxuICBcdFx0aWYgKHRoaXMuaW5pdGlhbGl6ZSkge1xyXG4gIFx0XHRcdHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBjYWxsIGFsbCBjb25zdHJ1Y3RvciBob29rc1xyXG4gIFx0XHR0aGlzLmNhbGxJbml0SG9va3MoKTtcclxuICBcdH07XHJcblxyXG4gIFx0dmFyIHBhcmVudFByb3RvID0gTmV3Q2xhc3MuX19zdXBlcl9fID0gdGhpcy5wcm90b3R5cGU7XHJcblxyXG4gIFx0dmFyIHByb3RvID0gY3JlYXRlJDIocGFyZW50UHJvdG8pO1xyXG4gIFx0cHJvdG8uY29uc3RydWN0b3IgPSBOZXdDbGFzcztcclxuXHJcbiAgXHROZXdDbGFzcy5wcm90b3R5cGUgPSBwcm90bztcclxuXHJcbiAgXHQvLyBpbmhlcml0IHBhcmVudCdzIHN0YXRpY3NcclxuICBcdGZvciAodmFyIGkgaW4gdGhpcykge1xyXG4gIFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsIGkpICYmIGkgIT09ICdwcm90b3R5cGUnICYmIGkgIT09ICdfX3N1cGVyX18nKSB7XHJcbiAgXHRcdFx0TmV3Q2xhc3NbaV0gPSB0aGlzW2ldO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gbWl4IHN0YXRpYyBwcm9wZXJ0aWVzIGludG8gdGhlIGNsYXNzXHJcbiAgXHRpZiAocHJvcHMuc3RhdGljcykge1xyXG4gIFx0XHRleHRlbmQoTmV3Q2xhc3MsIHByb3BzLnN0YXRpY3MpO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIG1peCBpbmNsdWRlcyBpbnRvIHRoZSBwcm90b3R5cGVcclxuICBcdGlmIChwcm9wcy5pbmNsdWRlcykge1xyXG4gIFx0XHRjaGVja0RlcHJlY2F0ZWRNaXhpbkV2ZW50cyhwcm9wcy5pbmNsdWRlcyk7XHJcbiAgXHRcdGV4dGVuZC5hcHBseShudWxsLCBbcHJvdG9dLmNvbmNhdChwcm9wcy5pbmNsdWRlcykpO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIG1peCBnaXZlbiBwcm9wZXJ0aWVzIGludG8gdGhlIHByb3RvdHlwZVxyXG4gIFx0ZXh0ZW5kKHByb3RvLCBwcm9wcyk7XHJcbiAgXHRkZWxldGUgcHJvdG8uc3RhdGljcztcclxuICBcdGRlbGV0ZSBwcm90by5pbmNsdWRlcztcclxuXHJcbiAgXHQvLyBtZXJnZSBvcHRpb25zXHJcbiAgXHRpZiAocHJvdG8ub3B0aW9ucykge1xyXG4gIFx0XHRwcm90by5vcHRpb25zID0gcGFyZW50UHJvdG8ub3B0aW9ucyA/IGNyZWF0ZSQyKHBhcmVudFByb3RvLm9wdGlvbnMpIDoge307XHJcbiAgXHRcdGV4dGVuZChwcm90by5vcHRpb25zLCBwcm9wcy5vcHRpb25zKTtcclxuICBcdH1cclxuXHJcbiAgXHRwcm90by5faW5pdEhvb2tzID0gW107XHJcblxyXG4gIFx0Ly8gYWRkIG1ldGhvZCBmb3IgY2FsbGluZyBhbGwgaG9va3NcclxuICBcdHByb3RvLmNhbGxJbml0SG9va3MgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faW5pdEhvb2tzQ2FsbGVkKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKHBhcmVudFByb3RvLmNhbGxJbml0SG9va3MpIHtcclxuICBcdFx0XHRwYXJlbnRQcm90by5jYWxsSW5pdEhvb2tzLmNhbGwodGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2luaXRIb29rc0NhbGxlZCA9IHRydWU7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gcHJvdG8uX2luaXRIb29rcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdHByb3RvLl9pbml0SG9va3NbaV0uY2FsbCh0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuXHJcbiAgXHRyZXR1cm4gTmV3Q2xhc3M7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBpbmNsdWRlKHByb3BlcnRpZXM6IE9iamVjdCk6IHRoaXNcclxuICAvLyBbSW5jbHVkZXMgYSBtaXhpbl0oI2NsYXNzLWluY2x1ZGVzKSBpbnRvIHRoZSBjdXJyZW50IGNsYXNzLlxyXG4gIENsYXNzLmluY2x1ZGUgPSBmdW5jdGlvbiAocHJvcHMpIHtcclxuICBcdHZhciBwYXJlbnRPcHRpb25zID0gdGhpcy5wcm90b3R5cGUub3B0aW9ucztcclxuICBcdGV4dGVuZCh0aGlzLnByb3RvdHlwZSwgcHJvcHMpO1xyXG4gIFx0aWYgKHByb3BzLm9wdGlvbnMpIHtcclxuICBcdFx0dGhpcy5wcm90b3R5cGUub3B0aW9ucyA9IHBhcmVudE9wdGlvbnM7XHJcbiAgXHRcdHRoaXMubWVyZ2VPcHRpb25zKHByb3BzLm9wdGlvbnMpO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhvcHRpb25zOiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gW01lcmdlcyBgb3B0aW9uc2BdKCNjbGFzcy1vcHRpb25zKSBpbnRvIHRoZSBkZWZhdWx0cyBvZiB0aGUgY2xhc3MuXHJcbiAgQ2xhc3MubWVyZ2VPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdGV4dGVuZCh0aGlzLnByb3RvdHlwZS5vcHRpb25zLCBvcHRpb25zKTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBhZGRJbml0SG9vayhmbjogRnVuY3Rpb24pOiB0aGlzXHJcbiAgLy8gQWRkcyBhIFtjb25zdHJ1Y3RvciBob29rXSgjY2xhc3MtY29uc3RydWN0b3ItaG9va3MpIHRvIHRoZSBjbGFzcy5cclxuICBDbGFzcy5hZGRJbml0SG9vayA9IGZ1bmN0aW9uIChmbikgeyAvLyAoRnVuY3Rpb24pIHx8IChTdHJpbmcsIGFyZ3MuLi4pXHJcbiAgXHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XHJcblxyXG4gIFx0dmFyIGluaXQgPSB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgPyBmbiA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpc1tmbl0uYXBwbHkodGhpcywgYXJncyk7XHJcbiAgXHR9O1xyXG5cclxuICBcdHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MgPSB0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzIHx8IFtdO1xyXG4gIFx0dGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGluaXQpO1xyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgZnVuY3Rpb24gY2hlY2tEZXByZWNhdGVkTWl4aW5FdmVudHMoaW5jbHVkZXMpIHtcclxuICBcdC8qIGdsb2JhbCBMOiB0cnVlICovXHJcbiAgXHRpZiAodHlwZW9mIEwgPT09ICd1bmRlZmluZWQnIHx8ICFMIHx8ICFMLk1peGluKSB7IHJldHVybjsgfVxyXG5cclxuICBcdGluY2x1ZGVzID0gaXNBcnJheShpbmNsdWRlcykgPyBpbmNsdWRlcyA6IFtpbmNsdWRlc107XHJcblxyXG4gIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbmNsdWRlcy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRpZiAoaW5jbHVkZXNbaV0gPT09IEwuTWl4aW4uRXZlbnRzKSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCdEZXByZWNhdGVkIGluY2x1ZGUgb2YgTC5NaXhpbi5FdmVudHM6ICcgK1xyXG4gIFx0XHRcdFx0J3RoaXMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcywgJyArXHJcbiAgXHRcdFx0XHQncGxlYXNlIGluaGVyaXQgZnJvbSBMLkV2ZW50ZWQgaW5zdGVhZC4nLCBuZXcgRXJyb3IoKS5zdGFjayk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgRXZlbnRlZFxyXG4gICAqIEBha2EgTC5FdmVudGVkXHJcbiAgICogQGluaGVyaXRzIENsYXNzXHJcbiAgICpcclxuICAgKiBBIHNldCBvZiBtZXRob2RzIHNoYXJlZCBiZXR3ZWVuIGV2ZW50LXBvd2VyZWQgY2xhc3NlcyAobGlrZSBgTWFwYCBhbmQgYE1hcmtlcmApLiBHZW5lcmFsbHksIGV2ZW50cyBhbGxvdyB5b3UgdG8gZXhlY3V0ZSBzb21lIGZ1bmN0aW9uIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgd2l0aCBhbiBvYmplY3QgKGUuZy4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBtYXAsIGNhdXNpbmcgdGhlIG1hcCB0byBmaXJlIGAnY2xpY2snYCBldmVudCkuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAqIFx0YWxlcnQoZS5sYXRsbmcpO1xyXG4gICAqIH0gKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIExlYWZsZXQgZGVhbHMgd2l0aCBldmVudCBsaXN0ZW5lcnMgYnkgcmVmZXJlbmNlLCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgYSBsaXN0ZW5lciBhbmQgdGhlbiByZW1vdmUgaXQsIGRlZmluZSBpdCBhcyBhIGZ1bmN0aW9uOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBmdW5jdGlvbiBvbkNsaWNrKGUpIHsgLi4uIH1cclxuICAgKlxyXG4gICAqIG1hcC5vbignY2xpY2snLCBvbkNsaWNrKTtcclxuICAgKiBtYXAub2ZmKCdjbGljaycsIG9uQ2xpY2spO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgRXZlbnRzID0ge1xyXG4gIFx0LyogQG1ldGhvZCBvbih0eXBlOiBTdHJpbmcsIGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIEFkZHMgYSBsaXN0ZW5lciBmdW5jdGlvbiAoYGZuYCkgdG8gYSBwYXJ0aWN1bGFyIGV2ZW50IHR5cGUgb2YgdGhlIG9iamVjdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGNvbnRleHQgb2YgdGhlIGxpc3RlbmVyIChvYmplY3QgdGhlIHRoaXMga2V5d29yZCB3aWxsIHBvaW50IHRvKS4gWW91IGNhbiBhbHNvIHBhc3Mgc2V2ZXJhbCBzcGFjZS1zZXBhcmF0ZWQgdHlwZXMgKGUuZy4gYCdjbGljayBkYmxjbGljaydgKS5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb24oZXZlbnRNYXA6IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIEFkZHMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBcdCAqL1xyXG4gIFx0b246IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdC8vIHR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xyXG4gIFx0XHRpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRcdC8vIHdlIGRvbid0IHByb2Nlc3Mgc3BhY2Utc2VwYXJhdGVkIGV2ZW50cyBoZXJlIGZvciBwZXJmb3JtYW5jZTtcclxuICBcdFx0XHRcdC8vIGl0J3MgYSBob3QgcGF0aCBzaW5jZSBMYXllciB1c2VzIHRoZSBvbihvYmopIHN5bnRheFxyXG4gIFx0XHRcdFx0dGhpcy5fb24odHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIHR5cGVzIGNhbiBiZSBhIHN0cmluZyBvZiBzcGFjZS1zZXBhcmF0ZWQgd29yZHNcclxuICBcdFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuX29uKHR5cGVzW2ldLCBmbiwgY29udGV4dCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQG1ldGhvZCBvZmYodHlwZTogU3RyaW5nLCBmbj86IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0ICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgbGlzdGVuZXIgZnVuY3Rpb24uIElmIG5vIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCwgaXQgd2lsbCByZW1vdmUgYWxsIHRoZSBsaXN0ZW5lcnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGV2ZW50IGZyb20gdGhlIG9iamVjdC4gTm90ZSB0aGF0IGlmIHlvdSBwYXNzZWQgYSBjdXN0b20gY29udGV4dCB0byBgb25gLCB5b3UgbXVzdCBwYXNzIHRoZSBzYW1lIGNvbnRleHQgdG8gYG9mZmAgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lci5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb2ZmKGV2ZW50TWFwOiBPYmplY3QpOiB0aGlzXHJcbiAgXHQgKiBSZW1vdmVzIGEgc2V0IG9mIHR5cGUvbGlzdGVuZXIgcGFpcnMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQGFsdGVybmF0aXZlXHJcbiAgXHQgKiBAbWV0aG9kIG9mZjogdGhpc1xyXG4gIFx0ICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIHRvIGFsbCBldmVudHMgb24gdGhlIG9iamVjdC4gVGhpcyBpbmNsdWRlcyBpbXBsaWNpdGx5IGF0dGFjaGVkIGV2ZW50cy5cclxuICBcdCAqL1xyXG4gIFx0b2ZmOiBmdW5jdGlvbiAodHlwZXMsIGZuLCBjb250ZXh0KSB7XHJcblxyXG4gIFx0XHRpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICBcdFx0XHQvLyBjbGVhciBhbGwgbGlzdGVuZXJzIGlmIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c1xyXG4gIFx0XHRcdGRlbGV0ZSB0aGlzLl9ldmVudHM7XHJcblxyXG4gIFx0XHR9IGVsc2UgaWYgKHR5cGVvZiB0eXBlcyA9PT0gJ29iamVjdCcpIHtcclxuICBcdFx0XHRmb3IgKHZhciB0eXBlIGluIHR5cGVzKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9vZmYodHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHR5cGVzID0gc3BsaXRXb3Jkcyh0eXBlcyk7XHJcblxyXG4gIFx0XHRcdHZhciByZW1vdmVBbGwgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxO1xyXG4gIFx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0eXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0aWYgKHJlbW92ZUFsbCkge1xyXG4gIFx0XHRcdFx0XHR0aGlzLl9vZmYodHlwZXNbaV0pO1xyXG4gIFx0XHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdFx0dGhpcy5fb2ZmKHR5cGVzW2ldLCBmbiwgY29udGV4dCk7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gYXR0YWNoIGxpc3RlbmVyICh3aXRob3V0IHN5bnRhY3RpYyBzdWdhciBub3cpXHJcbiAgXHRfb246IGZ1bmN0aW9uICh0eXBlLCBmbiwgY29udGV4dCwgX29uY2UpIHtcclxuICBcdFx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gIFx0XHRcdGNvbnNvbGUud2Fybignd3JvbmcgbGlzdGVuZXIgdHlwZTogJyArIHR5cGVvZiBmbik7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBjaGVjayBpZiBmbiBhbHJlYWR5IHRoZXJlXHJcbiAgXHRcdGlmICh0aGlzLl9saXN0ZW5zKHR5cGUsIGZuLCBjb250ZXh0KSAhPT0gZmFsc2UpIHtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChjb250ZXh0ID09PSB0aGlzKSB7XHJcbiAgXHRcdFx0Ly8gTGVzcyBtZW1vcnkgZm9vdHByaW50LlxyXG4gIFx0XHRcdGNvbnRleHQgPSB1bmRlZmluZWQ7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBuZXdMaXN0ZW5lciA9IHtmbjogZm4sIGN0eDogY29udGV4dH07XHJcbiAgXHRcdGlmIChfb25jZSkge1xyXG4gIFx0XHRcdG5ld0xpc3RlbmVyLm9uY2UgPSB0cnVlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XHJcbiAgXHRcdHRoaXMuX2V2ZW50c1t0eXBlXSA9IHRoaXMuX2V2ZW50c1t0eXBlXSB8fCBbXTtcclxuICBcdFx0dGhpcy5fZXZlbnRzW3R5cGVdLnB1c2gobmV3TGlzdGVuZXIpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb2ZmOiBmdW5jdGlvbiAodHlwZSwgZm4sIGNvbnRleHQpIHtcclxuICBcdFx0dmFyIGxpc3RlbmVycyxcclxuICBcdFx0ICAgIGksXHJcbiAgXHRcdCAgICBsZW47XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX2V2ZW50cykge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0bGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIFx0XHRpZiAoIWxpc3RlbmVycykge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsgLy8gcmVtb3ZlIGFsbFxyXG4gIFx0XHRcdGlmICh0aGlzLl9maXJpbmdDb3VudCkge1xyXG4gIFx0XHRcdFx0Ly8gU2V0IGFsbCByZW1vdmVkIGxpc3RlbmVycyB0byBub29wXHJcbiAgXHRcdFx0XHQvLyBzbyB0aGV5IGFyZSBub3QgY2FsbGVkIGlmIHJlbW92ZSBoYXBwZW5zIGluIGZpcmVcclxuICBcdFx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0XHRsaXN0ZW5lcnNbaV0uZm4gPSBmYWxzZUZuO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHQvLyBjbGVhciBhbGwgbGlzdGVuZXJzIGZvciBhIHR5cGUgaWYgZnVuY3Rpb24gaXNuJ3Qgc3BlY2lmaWVkXHJcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcclxuICBcdFx0XHRjb25zb2xlLndhcm4oJ3dyb25nIGxpc3RlbmVyIHR5cGU6ICcgKyB0eXBlb2YgZm4pO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gZmluZCBmbiBhbmQgcmVtb3ZlIGl0XHJcbiAgXHRcdHZhciBpbmRleCA9IHRoaXMuX2xpc3RlbnModHlwZSwgZm4sIGNvbnRleHQpO1xyXG4gIFx0XHRpZiAoaW5kZXggIT09IGZhbHNlKSB7XHJcbiAgXHRcdFx0dmFyIGxpc3RlbmVyID0gbGlzdGVuZXJzW2luZGV4XTtcclxuICBcdFx0XHRpZiAodGhpcy5fZmlyaW5nQ291bnQpIHtcclxuICBcdFx0XHRcdC8vIHNldCB0aGUgcmVtb3ZlZCBsaXN0ZW5lciB0byBub29wIHNvIHRoYXQncyBub3QgY2FsbGVkIGlmIHJlbW92ZSBoYXBwZW5zIGluIGZpcmVcclxuICBcdFx0XHRcdGxpc3RlbmVyLmZuID0gZmFsc2VGbjtcclxuXHJcbiAgXHRcdFx0XHQvKiBjb3B5IGFycmF5IGluIGNhc2UgZXZlbnRzIGFyZSBiZWluZyBmaXJlZCAqL1xyXG4gIFx0XHRcdFx0dGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZmlyZSh0eXBlOiBTdHJpbmcsIGRhdGE/OiBPYmplY3QsIHByb3BhZ2F0ZT86IEJvb2xlYW4pOiB0aGlzXHJcbiAgXHQvLyBGaXJlcyBhbiBldmVudCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuIFlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgZGF0YVxyXG4gIFx0Ly8gb2JqZWN0IOKAlCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHdpbGwgY29udGFpbiBpdHNcclxuICBcdC8vIHByb3BlcnRpZXMuIFRoZSBldmVudCBjYW4gb3B0aW9uYWxseSBiZSBwcm9wYWdhdGVkIHRvIGV2ZW50IHBhcmVudHMuXHJcbiAgXHRmaXJlOiBmdW5jdGlvbiAodHlwZSwgZGF0YSwgcHJvcGFnYXRlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5saXN0ZW5zKHR5cGUsIHByb3BhZ2F0ZSkpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdHZhciBldmVudCA9IGV4dGVuZCh7fSwgZGF0YSwge1xyXG4gIFx0XHRcdHR5cGU6IHR5cGUsXHJcbiAgXHRcdFx0dGFyZ2V0OiB0aGlzLFxyXG4gIFx0XHRcdHNvdXJjZVRhcmdldDogZGF0YSAmJiBkYXRhLnNvdXJjZVRhcmdldCB8fCB0aGlzXHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2V2ZW50cykge1xyXG4gIFx0XHRcdHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcbiAgXHRcdFx0aWYgKGxpc3RlbmVycykge1xyXG4gIFx0XHRcdFx0dGhpcy5fZmlyaW5nQ291bnQgPSAodGhpcy5fZmlyaW5nQ291bnQgKyAxKSB8fCAxO1xyXG4gIFx0XHRcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0XHR2YXIgbCA9IGxpc3RlbmVyc1tpXTtcclxuICBcdFx0XHRcdFx0Ly8gb2ZmIG92ZXJ3cml0ZXMgbC5mbiwgc28gd2UgbmVlZCB0byBjb3B5IGZuIHRvIGEgdmFyXHJcbiAgXHRcdFx0XHRcdHZhciBmbiA9IGwuZm47XHJcbiAgXHRcdFx0XHRcdGlmIChsLm9uY2UpIHtcclxuICBcdFx0XHRcdFx0XHR0aGlzLm9mZih0eXBlLCBmbiwgbC5jdHgpO1xyXG4gIFx0XHRcdFx0XHR9XHJcbiAgXHRcdFx0XHRcdGZuLmNhbGwobC5jdHggfHwgdGhpcywgZXZlbnQpO1xyXG4gIFx0XHRcdFx0fVxyXG5cclxuICBcdFx0XHRcdHRoaXMuX2ZpcmluZ0NvdW50LS07XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAocHJvcGFnYXRlKSB7XHJcbiAgXHRcdFx0Ly8gcHJvcGFnYXRlIHRoZSBldmVudCB0byBwYXJlbnRzIChzZXQgd2l0aCBhZGRFdmVudFBhcmVudClcclxuICBcdFx0XHR0aGlzLl9wcm9wYWdhdGVFdmVudChldmVudCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGxpc3RlbnModHlwZTogU3RyaW5nLCBwcm9wYWdhdGU/OiBCb29sZWFuKTogQm9vbGVhblxyXG4gIFx0Ly8gQG1ldGhvZCBsaXN0ZW5zKHR5cGU6IFN0cmluZywgZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0LCBwcm9wYWdhdGU/OiBCb29sZWFuKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgYSBwYXJ0aWN1bGFyIGV2ZW50IHR5cGUgaGFzIGFueSBsaXN0ZW5lcnMgYXR0YWNoZWQgdG8gaXQuXHJcbiAgXHQvLyBUaGUgdmVyaWZpY2F0aW9uIGNhbiBvcHRpb25hbGx5IGJlIHByb3BhZ2F0ZWQsIGl0IHdpbGwgcmV0dXJuIGB0cnVlYCBpZiBwYXJlbnRzIGhhdmUgdGhlIGxpc3RlbmVyIGF0dGFjaGVkIHRvIGl0LlxyXG4gIFx0bGlzdGVuczogZnVuY3Rpb24gKHR5cGUsIGZuLCBjb250ZXh0LCBwcm9wYWdhdGUpIHtcclxuICBcdFx0aWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xyXG4gIFx0XHRcdGNvbnNvbGUud2FybignXCJzdHJpbmdcIiB0eXBlIGFyZ3VtZW50IGV4cGVjdGVkJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGUgaW5wdXQgYGZuYCB2YWx1ZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIHVzZSBpdCBmb3IgcHJvcGFnYXRpb25cclxuICBcdFx0dmFyIF9mbiA9IGZuO1xyXG4gIFx0XHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgXHRcdFx0cHJvcGFnYXRlID0gISFmbjtcclxuICBcdFx0XHRfZm4gPSB1bmRlZmluZWQ7XHJcbiAgXHRcdFx0Y29udGV4dCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbdHlwZV07XHJcbiAgXHRcdGlmIChsaXN0ZW5lcnMgJiYgbGlzdGVuZXJzLmxlbmd0aCkge1xyXG4gIFx0XHRcdGlmICh0aGlzLl9saXN0ZW5zKHR5cGUsIF9mbiwgY29udGV4dCkgIT09IGZhbHNlKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChwcm9wYWdhdGUpIHtcclxuICBcdFx0XHQvLyBhbHNvIGNoZWNrIHBhcmVudHMgZm9yIGxpc3RlbmVycyBpZiBldmVudCBwcm9wYWdhdGVzXHJcbiAgXHRcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKSB7XHJcbiAgXHRcdFx0XHRpZiAodGhpcy5fZXZlbnRQYXJlbnRzW2lkXS5saXN0ZW5zKHR5cGUsIGZuLCBjb250ZXh0LCBwcm9wYWdhdGUpKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBmYWxzZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgaW5kZXggKG51bWJlcikgb3IgZmFsc2VcclxuICBcdF9saXN0ZW5zOiBmdW5jdGlvbiAodHlwZSwgZm4sIGNvbnRleHQpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9ldmVudHMpIHtcclxuICBcdFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV0gfHwgW107XHJcbiAgXHRcdGlmICghZm4pIHtcclxuICBcdFx0XHRyZXR1cm4gISFsaXN0ZW5lcnMubGVuZ3RoO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoY29udGV4dCA9PT0gdGhpcykge1xyXG4gIFx0XHRcdC8vIExlc3MgbWVtb3J5IGZvb3RwcmludC5cclxuICBcdFx0XHRjb250ZXh0ID0gdW5kZWZpbmVkO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0aWYgKGxpc3RlbmVyc1tpXS5mbiA9PT0gZm4gJiYgbGlzdGVuZXJzW2ldLmN0eCA9PT0gY29udGV4dCkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIGk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBmYWxzZTtcclxuXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgb25jZSjigKYpOiB0aGlzXHJcbiAgXHQvLyBCZWhhdmVzIGFzIFtgb24o4oCmKWBdKCNldmVudGVkLW9uKSwgZXhjZXB0IHRoZSBsaXN0ZW5lciB3aWxsIG9ubHkgZ2V0IGZpcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZC5cclxuICBcdG9uY2U6IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdC8vIHR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xyXG4gIFx0XHRpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRcdC8vIHdlIGRvbid0IHByb2Nlc3Mgc3BhY2Utc2VwYXJhdGVkIGV2ZW50cyBoZXJlIGZvciBwZXJmb3JtYW5jZTtcclxuICBcdFx0XHRcdC8vIGl0J3MgYSBob3QgcGF0aCBzaW5jZSBMYXllciB1c2VzIHRoZSBvbihvYmopIHN5bnRheFxyXG4gIFx0XHRcdFx0dGhpcy5fb24odHlwZSwgdHlwZXNbdHlwZV0sIGZuLCB0cnVlKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIHR5cGVzIGNhbiBiZSBhIHN0cmluZyBvZiBzcGFjZS1zZXBhcmF0ZWQgd29yZHNcclxuICBcdFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuX29uKHR5cGVzW2ldLCBmbiwgY29udGV4dCwgdHJ1ZSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGRFdmVudFBhcmVudChvYmo6IEV2ZW50ZWQpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIGFuIGV2ZW50IHBhcmVudCAtIGFuIGBFdmVudGVkYCB0aGF0IHdpbGwgcmVjZWl2ZSBwcm9wYWdhdGVkIGV2ZW50c1xyXG4gIFx0YWRkRXZlbnRQYXJlbnQ6IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0dGhpcy5fZXZlbnRQYXJlbnRzID0gdGhpcy5fZXZlbnRQYXJlbnRzIHx8IHt9O1xyXG4gIFx0XHR0aGlzLl9ldmVudFBhcmVudHNbc3RhbXAob2JqKV0gPSBvYmo7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUV2ZW50UGFyZW50KG9iajogRXZlbnRlZCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgYW4gZXZlbnQgcGFyZW50LCBzbyBpdCB3aWxsIHN0b3AgcmVjZWl2aW5nIHByb3BhZ2F0ZWQgZXZlbnRzXHJcbiAgXHRyZW1vdmVFdmVudFBhcmVudDogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHRpZiAodGhpcy5fZXZlbnRQYXJlbnRzKSB7XHJcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2V2ZW50UGFyZW50c1tzdGFtcChvYmopXTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3Byb3BhZ2F0ZUV2ZW50OiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHR0aGlzLl9ldmVudFBhcmVudHNbaWRdLmZpcmUoZS50eXBlLCBleHRlbmQoe1xyXG4gIFx0XHRcdFx0bGF5ZXI6IGUudGFyZ2V0LFxyXG4gIFx0XHRcdFx0cHJvcGFnYXRlZEZyb206IGUudGFyZ2V0XHJcbiAgXHRcdFx0fSwgZSksIHRydWUpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gYWxpYXNlczsgd2Ugc2hvdWxkIGRpdGNoIHRob3NlIGV2ZW50dWFsbHlcclxuXHJcbiAgLy8gQG1ldGhvZCBhZGRFdmVudExpc3RlbmVyKOKApik6IHRoaXNcclxuICAvLyBBbGlhcyB0byBbYG9uKOKApilgXSgjZXZlbnRlZC1vbilcclxuICBFdmVudHMuYWRkRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5vbjtcclxuXHJcbiAgLy8gQG1ldGhvZCByZW1vdmVFdmVudExpc3RlbmVyKOKApik6IHRoaXNcclxuICAvLyBBbGlhcyB0byBbYG9mZijigKYpYF0oI2V2ZW50ZWQtb2ZmKVxyXG5cclxuICAvLyBAbWV0aG9kIGNsZWFyQWxsRXZlbnRMaXN0ZW5lcnMo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb2ZmKClgXSgjZXZlbnRlZC1vZmYpXHJcbiAgRXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBFdmVudHMuY2xlYXJBbGxFdmVudExpc3RlbmVycyA9IEV2ZW50cy5vZmY7XHJcblxyXG4gIC8vIEBtZXRob2QgYWRkT25lVGltZUV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb25jZSjigKYpYF0oI2V2ZW50ZWQtb25jZSlcclxuICBFdmVudHMuYWRkT25lVGltZUV2ZW50TGlzdGVuZXIgPSBFdmVudHMub25jZTtcclxuXHJcbiAgLy8gQG1ldGhvZCBmaXJlRXZlbnQo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgZmlyZSjigKYpYF0oI2V2ZW50ZWQtZmlyZSlcclxuICBFdmVudHMuZmlyZUV2ZW50ID0gRXZlbnRzLmZpcmU7XHJcblxyXG4gIC8vIEBtZXRob2QgaGFzRXZlbnRMaXN0ZW5lcnMo4oCmKTogQm9vbGVhblxyXG4gIC8vIEFsaWFzIHRvIFtgbGlzdGVucyjigKYpYF0oI2V2ZW50ZWQtbGlzdGVucylcclxuICBFdmVudHMuaGFzRXZlbnRMaXN0ZW5lcnMgPSBFdmVudHMubGlzdGVucztcclxuXHJcbiAgdmFyIEV2ZW50ZWQgPSBDbGFzcy5leHRlbmQoRXZlbnRzKTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBQb2ludFxyXG4gICAqIEBha2EgTC5Qb2ludFxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhIHBvaW50IHdpdGggYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgaW4gcGl4ZWxzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIHBvaW50ID0gTC5wb2ludCgyMDAsIDMwMCk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBBbGwgTGVhZmxldCBtZXRob2RzIGFuZCBvcHRpb25zIHRoYXQgYWNjZXB0IGBQb2ludGAgb2JqZWN0cyBhbHNvIGFjY2VwdCB0aGVtIGluIGEgc2ltcGxlIEFycmF5IGZvcm0gKHVubGVzcyBub3RlZCBvdGhlcndpc2UpLCBzbyB0aGVzZSBsaW5lcyBhcmUgZXF1aXZhbGVudDpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogbWFwLnBhbkJ5KFsyMDAsIDMwMF0pO1xyXG4gICAqIG1hcC5wYW5CeShMLnBvaW50KDIwMCwgMzAwKSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgYFBvaW50YCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBQb2ludCh4LCB5LCByb3VuZCkge1xyXG4gIFx0Ly8gQHByb3BlcnR5IHg6IE51bWJlcjsgVGhlIGB4YCBjb29yZGluYXRlIG9mIHRoZSBwb2ludFxyXG4gIFx0dGhpcy54ID0gKHJvdW5kID8gTWF0aC5yb3VuZCh4KSA6IHgpO1xyXG4gIFx0Ly8gQHByb3BlcnR5IHk6IE51bWJlcjsgVGhlIGB5YCBjb29yZGluYXRlIG9mIHRoZSBwb2ludFxyXG4gIFx0dGhpcy55ID0gKHJvdW5kID8gTWF0aC5yb3VuZCh5KSA6IHkpO1xyXG4gIH1cclxuXHJcbiAgdmFyIHRydW5jID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiAodikge1xyXG4gIFx0cmV0dXJuIHYgPiAwID8gTWF0aC5mbG9vcih2KSA6IE1hdGguY2VpbCh2KTtcclxuICB9O1xyXG5cclxuICBQb2ludC5wcm90b3R5cGUgPSB7XHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjbG9uZSgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcG9pbnQuXHJcbiAgXHRjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGQob3RoZXJQb2ludDogUG9pbnQpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGFkZGl0aW9uIG9mIHRoZSBjdXJyZW50IGFuZCB0aGUgZ2l2ZW4gcG9pbnRzLlxyXG4gIFx0YWRkOiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0Ly8gbm9uLWRlc3RydWN0aXZlLCByZXR1cm5zIGEgbmV3IHBvaW50XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX2FkZCh0b1BvaW50KHBvaW50KSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGQ6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHQvLyBkZXN0cnVjdGl2ZSwgdXNlZCBkaXJlY3RseSBmb3IgcGVyZm9ybWFuY2UgaW4gc2l0dWF0aW9ucyB3aGVyZSBpdCdzIHNhZmUgdG8gbW9kaWZ5IGV4aXN0aW5nIHBvaW50XHJcbiAgXHRcdHRoaXMueCArPSBwb2ludC54O1xyXG4gIFx0XHR0aGlzLnkgKz0gcG9pbnQueTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc3VidHJhY3Qob3RoZXJQb2ludDogUG9pbnQpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW9uIG9mIHRoZSBnaXZlbiBwb2ludCBmcm9tIHRoZSBjdXJyZW50LlxyXG4gIFx0c3VidHJhY3Q6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWJ0cmFjdCh0b1BvaW50KHBvaW50KSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zdWJ0cmFjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHRoaXMueCAtPSBwb2ludC54O1xyXG4gIFx0XHR0aGlzLnkgLT0gcG9pbnQueTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGl2aWRlQnkobnVtOiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGRpdmlzaW9uIG9mIHRoZSBjdXJyZW50IHBvaW50IGJ5IHRoZSBnaXZlbiBudW1iZXIuXHJcbiAgXHRkaXZpZGVCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9kaXZpZGVCeShudW0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZGl2aWRlQnk6IGZ1bmN0aW9uIChudW0pIHtcclxuICBcdFx0dGhpcy54IC89IG51bTtcclxuICBcdFx0dGhpcy55IC89IG51bTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbXVsdGlwbHlCeShudW06IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgbXVsdGlwbGljYXRpb24gb2YgdGhlIGN1cnJlbnQgcG9pbnQgYnkgdGhlIGdpdmVuIG51bWJlci5cclxuICBcdG11bHRpcGx5Qnk6IGZ1bmN0aW9uIChudW0pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdGlwbHlCeShudW0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbXVsdGlwbHlCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHR0aGlzLnggKj0gbnVtO1xyXG4gIFx0XHR0aGlzLnkgKj0gbnVtO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzY2FsZUJ5KHNjYWxlOiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBNdWx0aXBseSBlYWNoIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnQgcG9pbnQgYnkgZWFjaCBjb29yZGluYXRlIG9mXHJcbiAgXHQvLyBgc2NhbGVgLiBJbiBsaW5lYXIgYWxnZWJyYSB0ZXJtcywgbXVsdGlwbHkgdGhlIHBvaW50IGJ5IHRoZVxyXG4gIFx0Ly8gW3NjYWxpbmcgbWF0cml4XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY2FsaW5nXyUyOGdlb21ldHJ5JTI5I01hdHJpeF9yZXByZXNlbnRhdGlvbilcclxuICBcdC8vIGRlZmluZWQgYnkgYHNjYWxlYC5cclxuICBcdHNjYWxlQnk6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMueCAqIHBvaW50LngsIHRoaXMueSAqIHBvaW50LnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVuc2NhbGVCeShzY2FsZTogUG9pbnQpOiBQb2ludFxyXG4gIFx0Ly8gSW52ZXJzZSBvZiBgc2NhbGVCeWAuIERpdmlkZSBlYWNoIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnQgcG9pbnQgYnlcclxuICBcdC8vIGVhY2ggY29vcmRpbmF0ZSBvZiBgc2NhbGVgLlxyXG4gIFx0dW5zY2FsZUJ5OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludCh0aGlzLnggLyBwb2ludC54LCB0aGlzLnkgLyBwb2ludC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCByb3VuZCgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcG9pbnQgd2l0aCByb3VuZGVkIGNvb3JkaW5hdGVzLlxyXG4gIFx0cm91bmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JvdW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMueCA9IE1hdGgucm91bmQodGhpcy54KTtcclxuICBcdFx0dGhpcy55ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmbG9vcigpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcG9pbnQgd2l0aCBmbG9vcmVkIGNvb3JkaW5hdGVzIChyb3VuZGVkIGRvd24pLlxyXG4gIFx0Zmxvb3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2Zsb29yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMueCA9IE1hdGguZmxvb3IodGhpcy54KTtcclxuICBcdFx0dGhpcy55ID0gTWF0aC5mbG9vcih0aGlzLnkpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjZWlsKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIGNlaWxlZCBjb29yZGluYXRlcyAocm91bmRlZCB1cCkuXHJcbiAgXHRjZWlsOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX2NlaWwoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NlaWw6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5jZWlsKHRoaXMueCk7XHJcbiAgXHRcdHRoaXMueSA9IE1hdGguY2VpbCh0aGlzLnkpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0cnVuYygpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcG9pbnQgd2l0aCB0cnVuY2F0ZWQgY29vcmRpbmF0ZXMgKHJvdW5kZWQgdG93YXJkcyB6ZXJvKS5cclxuICBcdHRydW5jOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX3RydW5jKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF90cnVuYzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLnggPSB0cnVuYyh0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSB0cnVuYyh0aGlzLnkpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZVRvKG90aGVyUG9pbnQ6IFBvaW50KTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjYXJ0ZXNpYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBhbmQgdGhlIGdpdmVuIHBvaW50cy5cclxuICBcdGRpc3RhbmNlVG86IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRwb2ludCA9IHRvUG9pbnQocG9pbnQpO1xyXG5cclxuICBcdFx0dmFyIHggPSBwb2ludC54IC0gdGhpcy54LFxyXG4gIFx0XHQgICAgeSA9IHBvaW50LnkgLSB0aGlzLnk7XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGVxdWFscyhvdGhlclBvaW50OiBQb2ludCk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBwb2ludCBoYXMgdGhlIHNhbWUgY29vcmRpbmF0ZXMuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRwb2ludCA9IHRvUG9pbnQocG9pbnQpO1xyXG5cclxuICBcdFx0cmV0dXJuIHBvaW50LnggPT09IHRoaXMueCAmJlxyXG4gIFx0XHQgICAgICAgcG9pbnQueSA9PT0gdGhpcy55O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5zKG90aGVyUG9pbnQ6IFBvaW50KTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgYm90aCBjb29yZGluYXRlcyBvZiB0aGUgZ2l2ZW4gcG9pbnQgYXJlIGxlc3MgdGhhbiB0aGUgY29ycmVzcG9uZGluZyBjdXJyZW50IHBvaW50IGNvb3JkaW5hdGVzIChpbiBhYnNvbHV0ZSB2YWx1ZXMpLlxyXG4gIFx0Y29udGFpbnM6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRwb2ludCA9IHRvUG9pbnQocG9pbnQpO1xyXG5cclxuICBcdFx0cmV0dXJuIE1hdGguYWJzKHBvaW50LngpIDw9IE1hdGguYWJzKHRoaXMueCkgJiZcclxuICBcdFx0ICAgICAgIE1hdGguYWJzKHBvaW50LnkpIDw9IE1hdGguYWJzKHRoaXMueSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9TdHJpbmcoKTogU3RyaW5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwb2ludCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxyXG4gIFx0dG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICdQb2ludCgnICtcclxuICBcdFx0ICAgICAgICBmb3JtYXROdW0odGhpcy54KSArICcsICcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLnkpICsgJyknO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIEBmYWN0b3J5IEwucG9pbnQoeDogTnVtYmVyLCB5OiBOdW1iZXIsIHJvdW5kPzogQm9vbGVhbilcclxuICAvLyBDcmVhdGVzIGEgUG9pbnQgb2JqZWN0IHdpdGggdGhlIGdpdmVuIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzLiBJZiBvcHRpb25hbCBgcm91bmRgIGlzIHNldCB0byB0cnVlLCByb3VuZHMgdGhlIGB4YCBhbmQgYHlgIHZhbHVlcy5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5wb2ludChjb29yZHM6IE51bWJlcltdKVxyXG4gIC8vIEV4cGVjdHMgYW4gYXJyYXkgb2YgdGhlIGZvcm0gYFt4LCB5XWAgaW5zdGVhZC5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5wb2ludChjb29yZHM6IE9iamVjdClcclxuICAvLyBFeHBlY3RzIGEgcGxhaW4gb2JqZWN0IG9mIHRoZSBmb3JtIGB7eDogTnVtYmVyLCB5OiBOdW1iZXJ9YCBpbnN0ZWFkLlxyXG4gIGZ1bmN0aW9uIHRvUG9pbnQoeCwgeSwgcm91bmQpIHtcclxuICBcdGlmICh4IGluc3RhbmNlb2YgUG9pbnQpIHtcclxuICBcdFx0cmV0dXJuIHg7XHJcbiAgXHR9XHJcbiAgXHRpZiAoaXNBcnJheSh4KSkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHhbMF0sIHhbMV0pO1xyXG4gIFx0fVxyXG4gIFx0aWYgKHggPT09IHVuZGVmaW5lZCB8fCB4ID09PSBudWxsKSB7XHJcbiAgXHRcdHJldHVybiB4O1xyXG4gIFx0fVxyXG4gIFx0aWYgKHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAneCcgaW4geCAmJiAneScgaW4geCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHgueCwgeC55KTtcclxuICBcdH1cclxuICBcdHJldHVybiBuZXcgUG9pbnQoeCwgeSwgcm91bmQpO1xyXG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBCb3VuZHNcclxuICAgKiBAYWthIEwuQm91bmRzXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgcmVjdGFuZ3VsYXIgYXJlYSBpbiBwaXhlbCBjb29yZGluYXRlcy5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBwMSA9IEwucG9pbnQoMTAsIDEwKSxcclxuICAgKiBwMiA9IEwucG9pbnQoNDAsIDYwKSxcclxuICAgKiBib3VuZHMgPSBMLmJvdW5kcyhwMSwgcDIpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQWxsIExlYWZsZXQgbWV0aG9kcyB0aGF0IGFjY2VwdCBgQm91bmRzYCBvYmplY3RzIGFsc28gYWNjZXB0IHRoZW0gaW4gYSBzaW1wbGUgQXJyYXkgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZSBib3VuZHMgZXhhbXBsZSBhYm92ZSBjYW4gYmUgcGFzc2VkIGxpa2UgdGhpczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogb3RoZXJCb3VuZHMuaW50ZXJzZWN0cyhbWzEwLCAxMF0sIFs0MCwgNjBdXSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgYEJvdW5kc2AgZG9lcyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiB3aGljaCBtZWFucyBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gaXQsIGFuZCBuZXcgbWV0aG9kc1xyXG4gICAqIGNhbid0IGJlIGFkZGVkIHRvIGl0IHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgZnVuY3Rpb24gQm91bmRzKGEsIGIpIHtcclxuICBcdGlmICghYSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHR2YXIgcG9pbnRzID0gYiA/IFthLCBiXSA6IGE7XHJcblxyXG4gIFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHR0aGlzLmV4dGVuZChwb2ludHNbaV0pO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgQm91bmRzLnByb3RvdHlwZSA9IHtcclxuICBcdC8vIEBtZXRob2QgZXh0ZW5kKHBvaW50OiBQb2ludCk6IHRoaXNcclxuICBcdC8vIEV4dGVuZHMgdGhlIGJvdW5kcyB0byBjb250YWluIHRoZSBnaXZlbiBwb2ludC5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgZXh0ZW5kKG90aGVyQm91bmRzOiBCb3VuZHMpOiB0aGlzXHJcbiAgXHQvLyBFeHRlbmQgdGhlIGJvdW5kcyB0byBjb250YWluIHRoZSBnaXZlbiBib3VuZHNcclxuICBcdGV4dGVuZDogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHR2YXIgbWluMiwgbWF4MjtcclxuICBcdFx0aWYgKCFvYmopIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmIChvYmogaW5zdGFuY2VvZiBQb2ludCB8fCB0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCAneCcgaW4gb2JqKSB7XHJcbiAgXHRcdFx0bWluMiA9IG1heDIgPSB0b1BvaW50KG9iaik7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0b2JqID0gdG9Cb3VuZHMob2JqKTtcclxuICBcdFx0XHRtaW4yID0gb2JqLm1pbjtcclxuICBcdFx0XHRtYXgyID0gb2JqLm1heDtcclxuXHJcbiAgXHRcdFx0aWYgKCFtaW4yIHx8ICFtYXgyKSB7IHJldHVybiB0aGlzOyB9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBwcm9wZXJ0eSBtaW46IFBvaW50XHJcbiAgXHRcdC8vIFRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZS5cclxuICBcdFx0Ly8gQHByb3BlcnR5IG1heDogUG9pbnRcclxuICBcdFx0Ly8gVGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZS5cclxuICBcdFx0aWYgKCF0aGlzLm1pbiAmJiAhdGhpcy5tYXgpIHtcclxuICBcdFx0XHR0aGlzLm1pbiA9IG1pbjIuY2xvbmUoKTtcclxuICBcdFx0XHR0aGlzLm1heCA9IG1heDIuY2xvbmUoKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLm1pbi54ID0gTWF0aC5taW4obWluMi54LCB0aGlzLm1pbi54KTtcclxuICBcdFx0XHR0aGlzLm1heC54ID0gTWF0aC5tYXgobWF4Mi54LCB0aGlzLm1heC54KTtcclxuICBcdFx0XHR0aGlzLm1pbi55ID0gTWF0aC5taW4obWluMi55LCB0aGlzLm1pbi55KTtcclxuICBcdFx0XHR0aGlzLm1heC55ID0gTWF0aC5tYXgobWF4Mi55LCB0aGlzLm1heC55KTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIocm91bmQ/OiBCb29sZWFuKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGNlbnRlciBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Q2VudGVyOiBmdW5jdGlvbiAocm91bmQpIHtcclxuICBcdFx0cmV0dXJuIHRvUG9pbnQoXHJcbiAgXHRcdCAgICAgICAgKHRoaXMubWluLnggKyB0aGlzLm1heC54KSAvIDIsXHJcbiAgXHRcdCAgICAgICAgKHRoaXMubWluLnkgKyB0aGlzLm1heC55KSAvIDIsIHJvdW5kKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3R0b21MZWZ0KCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBib3R0b20tbGVmdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Qm90dG9tTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdG9Qb2ludCh0aGlzLm1pbi54LCB0aGlzLm1heC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRUb3BSaWdodCgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgdG9wLXJpZ2h0IHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRUb3BSaWdodDogZnVuY3Rpb24gKCkgeyAvLyAtPiBQb2ludFxyXG4gIFx0XHRyZXR1cm4gdG9Qb2ludCh0aGlzLm1heC54LCB0aGlzLm1pbi55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRUb3BMZWZ0KCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB0b3AtbGVmdCBwb2ludCBvZiB0aGUgYm91bmRzIChpLmUuIFtgdGhpcy5taW5gXSgjYm91bmRzLW1pbikpLlxyXG4gIFx0Z2V0VG9wTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5taW47IC8vIGxlZnQsIHRvcFxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdHRvbVJpZ2h0KCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBib3R0b20tcmlnaHQgcG9pbnQgb2YgdGhlIGJvdW5kcyAoaS5lLiBbYHRoaXMubWF4YF0oI2JvdW5kcy1tYXgpKS5cclxuICBcdGdldEJvdHRvbVJpZ2h0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1heDsgLy8gcmlnaHQsIGJvdHRvbVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNpemUoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGdpdmVuIGJvdW5kc1xyXG4gIFx0Z2V0U2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5tYXguc3VidHJhY3QodGhpcy5taW4pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5zKG90aGVyQm91bmRzOiBCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBnaXZlbiBvbmUuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMocG9pbnQ6IFBvaW50KTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHR2YXIgbWluLCBtYXg7XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIG9ialswXSA9PT0gJ251bWJlcicgfHwgb2JqIGluc3RhbmNlb2YgUG9pbnQpIHtcclxuICBcdFx0XHRvYmogPSB0b1BvaW50KG9iaik7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0b2JqID0gdG9Cb3VuZHMob2JqKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIEJvdW5kcykge1xyXG4gIFx0XHRcdG1pbiA9IG9iai5taW47XHJcbiAgXHRcdFx0bWF4ID0gb2JqLm1heDtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRtaW4gPSBtYXggPSBvYmo7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiAobWluLnggPj0gdGhpcy5taW4ueCkgJiZcclxuICBcdFx0ICAgICAgIChtYXgueCA8PSB0aGlzLm1heC54KSAmJlxyXG4gIFx0XHQgICAgICAgKG1pbi55ID49IHRoaXMubWluLnkpICYmXHJcbiAgXHRcdCAgICAgICAobWF4LnkgPD0gdGhpcy5tYXgueSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaW50ZXJzZWN0cyhvdGhlckJvdW5kczogQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBpbnRlcnNlY3RzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHNcclxuICBcdC8vIGludGVyc2VjdCBpZiB0aGV5IGhhdmUgYXQgbGVhc3Qgb25lIHBvaW50IGluIGNvbW1vbi5cclxuICBcdGludGVyc2VjdHM6IGZ1bmN0aW9uIChib3VuZHMpIHsgLy8gKEJvdW5kcykgLT4gQm9vbGVhblxyXG4gIFx0XHRib3VuZHMgPSB0b0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIG1pbiA9IHRoaXMubWluLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5tYXgsXHJcbiAgXHRcdCAgICBtaW4yID0gYm91bmRzLm1pbixcclxuICBcdFx0ICAgIG1heDIgPSBib3VuZHMubWF4LFxyXG4gIFx0XHQgICAgeEludGVyc2VjdHMgPSAobWF4Mi54ID49IG1pbi54KSAmJiAobWluMi54IDw9IG1heC54KSxcclxuICBcdFx0ICAgIHlJbnRlcnNlY3RzID0gKG1heDIueSA+PSBtaW4ueSkgJiYgKG1pbjIueSA8PSBtYXgueSk7XHJcblxyXG4gIFx0XHRyZXR1cm4geEludGVyc2VjdHMgJiYgeUludGVyc2VjdHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgb3ZlcmxhcHMob3RoZXJCb3VuZHM6IEJvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgb3ZlcmxhcHMgdGhlIGdpdmVuIGJvdW5kcy4gVHdvIGJvdW5kc1xyXG4gIFx0Ly8gb3ZlcmxhcCBpZiB0aGVpciBpbnRlcnNlY3Rpb24gaXMgYW4gYXJlYS5cclxuICBcdG92ZXJsYXBzOiBmdW5jdGlvbiAoYm91bmRzKSB7IC8vIChCb3VuZHMpIC0+IEJvb2xlYW5cclxuICBcdFx0Ym91bmRzID0gdG9Cb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHZhciBtaW4gPSB0aGlzLm1pbixcclxuICBcdFx0ICAgIG1heCA9IHRoaXMubWF4LFxyXG4gIFx0XHQgICAgbWluMiA9IGJvdW5kcy5taW4sXHJcbiAgXHRcdCAgICBtYXgyID0gYm91bmRzLm1heCxcclxuICBcdFx0ICAgIHhPdmVybGFwcyA9IChtYXgyLnggPiBtaW4ueCkgJiYgKG1pbjIueCA8IG1heC54KSxcclxuICBcdFx0ICAgIHlPdmVybGFwcyA9IChtYXgyLnkgPiBtaW4ueSkgJiYgKG1pbjIueSA8IG1heC55KTtcclxuXHJcbiAgXHRcdHJldHVybiB4T3ZlcmxhcHMgJiYgeU92ZXJsYXBzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGlzVmFsaWQoKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJvdW5kcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXHJcbiAgXHRpc1ZhbGlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAhISh0aGlzLm1pbiAmJiB0aGlzLm1heCk7XHJcbiAgXHR9LFxyXG5cclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhZChidWZmZXJSYXRpbzogTnVtYmVyKTogQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGJvdW5kcyBjcmVhdGVkIGJ5IGV4dGVuZGluZyBvciByZXRyYWN0aW5nIHRoZSBjdXJyZW50IGJvdW5kcyBieSBhIGdpdmVuIHJhdGlvIGluIGVhY2ggZGlyZWN0aW9uLlxyXG4gIFx0Ly8gRm9yIGV4YW1wbGUsIGEgcmF0aW8gb2YgMC41IGV4dGVuZHMgdGhlIGJvdW5kcyBieSA1MCUgaW4gZWFjaCBkaXJlY3Rpb24uXHJcbiAgXHQvLyBOZWdhdGl2ZSB2YWx1ZXMgd2lsbCByZXRyYWN0IHRoZSBib3VuZHMuXHJcbiAgXHRwYWQ6IGZ1bmN0aW9uIChidWZmZXJSYXRpbykge1xyXG4gIFx0XHR2YXIgbWluID0gdGhpcy5taW4sXHJcbiAgXHRcdG1heCA9IHRoaXMubWF4LFxyXG4gIFx0XHRoZWlnaHRCdWZmZXIgPSBNYXRoLmFicyhtaW4ueCAtIG1heC54KSAqIGJ1ZmZlclJhdGlvLFxyXG4gIFx0XHR3aWR0aEJ1ZmZlciA9IE1hdGguYWJzKG1pbi55IC0gbWF4LnkpICogYnVmZmVyUmF0aW87XHJcblxyXG5cclxuICBcdFx0cmV0dXJuIHRvQm91bmRzKFxyXG4gIFx0XHRcdHRvUG9pbnQobWluLnggLSBoZWlnaHRCdWZmZXIsIG1pbi55IC0gd2lkdGhCdWZmZXIpLFxyXG4gIFx0XHRcdHRvUG9pbnQobWF4LnggKyBoZWlnaHRCdWZmZXIsIG1heC55ICsgd2lkdGhCdWZmZXIpKTtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyQm91bmRzOiBCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cclxuICBcdGVxdWFsczogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHRpZiAoIWJvdW5kcykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdGJvdW5kcyA9IHRvQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5taW4uZXF1YWxzKGJvdW5kcy5nZXRUb3BMZWZ0KCkpICYmXHJcbiAgXHRcdFx0dGhpcy5tYXguZXF1YWxzKGJvdW5kcy5nZXRCb3R0b21SaWdodCgpKTtcclxuICBcdH0sXHJcbiAgfTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwuYm91bmRzKGNvcm5lcjE6IFBvaW50LCBjb3JuZXIyOiBQb2ludClcclxuICAvLyBDcmVhdGVzIGEgQm91bmRzIG9iamVjdCBmcm9tIHR3byBjb3JuZXJzIGNvb3JkaW5hdGUgcGFpcnMuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5ib3VuZHMocG9pbnRzOiBQb2ludFtdKVxyXG4gIC8vIENyZWF0ZXMgYSBCb3VuZHMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIGFycmF5IG9mIHBvaW50cy5cclxuICBmdW5jdGlvbiB0b0JvdW5kcyhhLCBiKSB7XHJcbiAgXHRpZiAoIWEgfHwgYSBpbnN0YW5jZW9mIEJvdW5kcykge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdHJldHVybiBuZXcgQm91bmRzKGEsIGIpO1xyXG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBMYXRMbmdCb3VuZHNcclxuICAgKiBAYWthIEwuTGF0TG5nQm91bmRzXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgcmVjdGFuZ3VsYXIgZ2VvZ3JhcGhpY2FsIGFyZWEgb24gYSBtYXAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgY29ybmVyMSA9IEwubGF0TG5nKDQwLjcxMiwgLTc0LjIyNyksXHJcbiAgICogY29ybmVyMiA9IEwubGF0TG5nKDQwLjc3NCwgLTc0LjEyNSksXHJcbiAgICogYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoY29ybmVyMSwgY29ybmVyMik7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBBbGwgTGVhZmxldCBtZXRob2RzIHRoYXQgYWNjZXB0IExhdExuZ0JvdW5kcyBvYmplY3RzIGFsc28gYWNjZXB0IHRoZW0gaW4gYSBzaW1wbGUgQXJyYXkgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZSBib3VuZHMgZXhhbXBsZSBhYm92ZSBjYW4gYmUgcGFzc2VkIGxpa2UgdGhpczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogbWFwLmZpdEJvdW5kcyhbXHJcbiAgICogXHRbNDAuNzEyLCAtNzQuMjI3XSxcclxuICAgKiBcdFs0MC43NzQsIC03NC4xMjVdXHJcbiAgICogXSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBDYXV0aW9uOiBpZiB0aGUgYXJlYSBjcm9zc2VzIHRoZSBhbnRpbWVyaWRpYW4gKG9mdGVuIGNvbmZ1c2VkIHdpdGggdGhlIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lKSwgeW91IG11c3Qgc3BlY2lmeSBjb3JuZXJzIF9vdXRzaWRlXyB0aGUgWy0xODAsIDE4MF0gZGVncmVlcyBsb25naXR1ZGUgcmFuZ2UuXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgYExhdExuZ0JvdW5kc2AgZG9lcyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiB3aGljaCBtZWFucyBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gaXQsIGFuZCBuZXcgbWV0aG9kc1xyXG4gICAqIGNhbid0IGJlIGFkZGVkIHRvIGl0IHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgZnVuY3Rpb24gTGF0TG5nQm91bmRzKGNvcm5lcjEsIGNvcm5lcjIpIHsgLy8gKExhdExuZywgTGF0TG5nKSBvciAoTGF0TG5nW10pXHJcbiAgXHRpZiAoIWNvcm5lcjEpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0dmFyIGxhdGxuZ3MgPSBjb3JuZXIyID8gW2Nvcm5lcjEsIGNvcm5lcjJdIDogY29ybmVyMTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF0bG5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHR0aGlzLmV4dGVuZChsYXRsbmdzW2ldKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIExhdExuZ0JvdW5kcy5wcm90b3R5cGUgPSB7XHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBleHRlbmQobGF0bG5nOiBMYXRMbmcpOiB0aGlzXHJcbiAgXHQvLyBFeHRlbmQgdGhlIGJvdW5kcyB0byBjb250YWluIHRoZSBnaXZlbiBwb2ludFxyXG5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBleHRlbmQob3RoZXJCb3VuZHM6IExhdExuZ0JvdW5kcyk6IHRoaXNcclxuICBcdC8vIEV4dGVuZCB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIGJvdW5kc1xyXG4gIFx0ZXh0ZW5kOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBzdyA9IHRoaXMuX3NvdXRoV2VzdCxcclxuICBcdFx0ICAgIG5lID0gdGhpcy5fbm9ydGhFYXN0LFxyXG4gIFx0XHQgICAgc3cyLCBuZTI7XHJcblxyXG4gIFx0XHRpZiAob2JqIGluc3RhbmNlb2YgTGF0TG5nKSB7XHJcbiAgXHRcdFx0c3cyID0gb2JqO1xyXG4gIFx0XHRcdG5lMiA9IG9iajtcclxuXHJcbiAgXHRcdH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTGF0TG5nQm91bmRzKSB7XHJcbiAgXHRcdFx0c3cyID0gb2JqLl9zb3V0aFdlc3Q7XHJcbiAgXHRcdFx0bmUyID0gb2JqLl9ub3J0aEVhc3Q7XHJcblxyXG4gIFx0XHRcdGlmICghc3cyIHx8ICFuZTIpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0cmV0dXJuIG9iaiA/IHRoaXMuZXh0ZW5kKHRvTGF0TG5nKG9iaikgfHwgdG9MYXRMbmdCb3VuZHMob2JqKSkgOiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIXN3ICYmICFuZSkge1xyXG4gIFx0XHRcdHRoaXMuX3NvdXRoV2VzdCA9IG5ldyBMYXRMbmcoc3cyLmxhdCwgc3cyLmxuZyk7XHJcbiAgXHRcdFx0dGhpcy5fbm9ydGhFYXN0ID0gbmV3IExhdExuZyhuZTIubGF0LCBuZTIubG5nKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRzdy5sYXQgPSBNYXRoLm1pbihzdzIubGF0LCBzdy5sYXQpO1xyXG4gIFx0XHRcdHN3LmxuZyA9IE1hdGgubWluKHN3Mi5sbmcsIHN3LmxuZyk7XHJcbiAgXHRcdFx0bmUubGF0ID0gTWF0aC5tYXgobmUyLmxhdCwgbmUubGF0KTtcclxuICBcdFx0XHRuZS5sbmcgPSBNYXRoLm1heChuZTIubG5nLCBuZS5sbmcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwYWQoYnVmZmVyUmF0aW86IE51bWJlcik6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyBib3VuZHMgY3JlYXRlZCBieSBleHRlbmRpbmcgb3IgcmV0cmFjdGluZyB0aGUgY3VycmVudCBib3VuZHMgYnkgYSBnaXZlbiByYXRpbyBpbiBlYWNoIGRpcmVjdGlvbi5cclxuICBcdC8vIEZvciBleGFtcGxlLCBhIHJhdGlvIG9mIDAuNSBleHRlbmRzIHRoZSBib3VuZHMgYnkgNTAlIGluIGVhY2ggZGlyZWN0aW9uLlxyXG4gIFx0Ly8gTmVnYXRpdmUgdmFsdWVzIHdpbGwgcmV0cmFjdCB0aGUgYm91bmRzLlxyXG4gIFx0cGFkOiBmdW5jdGlvbiAoYnVmZmVyUmF0aW8pIHtcclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBoZWlnaHRCdWZmZXIgPSBNYXRoLmFicyhzdy5sYXQgLSBuZS5sYXQpICogYnVmZmVyUmF0aW8sXHJcbiAgXHRcdCAgICB3aWR0aEJ1ZmZlciA9IE1hdGguYWJzKHN3LmxuZyAtIG5lLmxuZykgKiBidWZmZXJSYXRpbztcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIG5ldyBMYXRMbmcoc3cubGF0IC0gaGVpZ2h0QnVmZmVyLCBzdy5sbmcgLSB3aWR0aEJ1ZmZlciksXHJcbiAgXHRcdCAgICAgICAgbmV3IExhdExuZyhuZS5sYXQgKyBoZWlnaHRCdWZmZXIsIG5lLmxuZyArIHdpZHRoQnVmZmVyKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q2VudGVyKCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcoXHJcbiAgXHRcdCAgICAgICAgKHRoaXMuX3NvdXRoV2VzdC5sYXQgKyB0aGlzLl9ub3J0aEVhc3QubGF0KSAvIDIsXHJcbiAgXHRcdCAgICAgICAgKHRoaXMuX3NvdXRoV2VzdC5sbmcgKyB0aGlzLl9ub3J0aEVhc3QubG5nKSAvIDIpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNvdXRoV2VzdCgpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoLXdlc3QgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldFNvdXRoV2VzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE5vcnRoRWFzdCgpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIG5vcnRoLWVhc3QgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldE5vcnRoRWFzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fbm9ydGhFYXN0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE5vcnRoV2VzdCgpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIG5vcnRoLXdlc3QgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldE5vcnRoV2VzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyh0aGlzLmdldE5vcnRoKCksIHRoaXMuZ2V0V2VzdCgpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTb3V0aEVhc3QoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBzb3V0aC1lYXN0IHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRTb3V0aEVhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcodGhpcy5nZXRTb3V0aCgpLCB0aGlzLmdldEVhc3QoKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0V2VzdCgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIHdlc3QgbG9uZ2l0dWRlIG9mIHRoZSBib3VuZHNcclxuICBcdGdldFdlc3Q6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5sbmc7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U291dGgoKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBzb3V0aCBsYXRpdHVkZSBvZiB0aGUgYm91bmRzXHJcbiAgXHRnZXRTb3V0aDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmxhdDtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRFYXN0KCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZWFzdCBsb25naXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0RWFzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fbm9ydGhFYXN0LmxuZztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXROb3J0aCgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIG5vcnRoIGxhdGl0dWRlIG9mIHRoZSBib3VuZHNcclxuICBcdGdldE5vcnRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3QubGF0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5zKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBnaXZlbiBvbmUuXHJcblxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5zIChsYXRsbmc6IExhdExuZyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIHBvaW50LlxyXG4gIFx0Y29udGFpbnM6IGZ1bmN0aW9uIChvYmopIHsgLy8gKExhdExuZ0JvdW5kcykgb3IgKExhdExuZykgLT4gQm9vbGVhblxyXG4gIFx0XHRpZiAodHlwZW9mIG9ialswXSA9PT0gJ251bWJlcicgfHwgb2JqIGluc3RhbmNlb2YgTGF0TG5nIHx8ICdsYXQnIGluIG9iaikge1xyXG4gIFx0XHRcdG9iaiA9IHRvTGF0TG5nKG9iaik7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0b2JqID0gdG9MYXRMbmdCb3VuZHMob2JqKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIsIG5lMjtcclxuXHJcbiAgXHRcdGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmdCb3VuZHMpIHtcclxuICBcdFx0XHRzdzIgPSBvYmouZ2V0U291dGhXZXN0KCk7XHJcbiAgXHRcdFx0bmUyID0gb2JqLmdldE5vcnRoRWFzdCgpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHN3MiA9IG5lMiA9IG9iajtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIChzdzIubGF0ID49IHN3LmxhdCkgJiYgKG5lMi5sYXQgPD0gbmUubGF0KSAmJlxyXG4gIFx0XHQgICAgICAgKHN3Mi5sbmcgPj0gc3cubG5nKSAmJiAobmUyLmxuZyA8PSBuZS5sbmcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGludGVyc2VjdHMob3RoZXJCb3VuZHM6IExhdExuZ0JvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgaW50ZXJzZWN0cyB0aGUgZ2l2ZW4gYm91bmRzLiBUd28gYm91bmRzIGludGVyc2VjdCBpZiB0aGV5IGhhdmUgYXQgbGVhc3Qgb25lIHBvaW50IGluIGNvbW1vbi5cclxuICBcdGludGVyc2VjdHM6IGZ1bmN0aW9uIChib3VuZHMpIHtcclxuICBcdFx0Ym91bmRzID0gdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHZhciBzdyA9IHRoaXMuX3NvdXRoV2VzdCxcclxuICBcdFx0ICAgIG5lID0gdGhpcy5fbm9ydGhFYXN0LFxyXG4gIFx0XHQgICAgc3cyID0gYm91bmRzLmdldFNvdXRoV2VzdCgpLFxyXG4gIFx0XHQgICAgbmUyID0gYm91bmRzLmdldE5vcnRoRWFzdCgpLFxyXG5cclxuICBcdFx0ICAgIGxhdEludGVyc2VjdHMgPSAobmUyLmxhdCA+PSBzdy5sYXQpICYmIChzdzIubGF0IDw9IG5lLmxhdCksXHJcbiAgXHRcdCAgICBsbmdJbnRlcnNlY3RzID0gKG5lMi5sbmcgPj0gc3cubG5nKSAmJiAoc3cyLmxuZyA8PSBuZS5sbmcpO1xyXG5cclxuICBcdFx0cmV0dXJuIGxhdEludGVyc2VjdHMgJiYgbG5nSW50ZXJzZWN0cztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvdmVybGFwcyhvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBvdmVybGFwcyB0aGUgZ2l2ZW4gYm91bmRzLiBUd28gYm91bmRzIG92ZXJsYXAgaWYgdGhlaXIgaW50ZXJzZWN0aW9uIGlzIGFuIGFyZWEuXHJcbiAgXHRvdmVybGFwczogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIgPSBib3VuZHMuZ2V0U291dGhXZXN0KCksXHJcbiAgXHRcdCAgICBuZTIgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCksXHJcblxyXG4gIFx0XHQgICAgbGF0T3ZlcmxhcHMgPSAobmUyLmxhdCA+IHN3LmxhdCkgJiYgKHN3Mi5sYXQgPCBuZS5sYXQpLFxyXG4gIFx0XHQgICAgbG5nT3ZlcmxhcHMgPSAobmUyLmxuZyA+IHN3LmxuZykgJiYgKHN3Mi5sbmcgPCBuZS5sbmcpO1xyXG5cclxuICBcdFx0cmV0dXJuIGxhdE92ZXJsYXBzICYmIGxuZ092ZXJsYXBzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRvQkJveFN0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgd2l0aCBib3VuZGluZyBib3ggY29vcmRpbmF0ZXMgaW4gYSAnc291dGh3ZXN0X2xuZyxzb3V0aHdlc3RfbGF0LG5vcnRoZWFzdF9sbmcsbm9ydGhlYXN0X2xhdCcgZm9ybWF0LiBVc2VmdWwgZm9yIHNlbmRpbmcgcmVxdWVzdHMgdG8gd2ViIHNlcnZpY2VzIHRoYXQgcmV0dXJuIGdlbyBkYXRhLlxyXG4gIFx0dG9CQm94U3RyaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBbdGhpcy5nZXRXZXN0KCksIHRoaXMuZ2V0U291dGgoKSwgdGhpcy5nZXRFYXN0KCksIHRoaXMuZ2V0Tm9ydGgoKV0uam9pbignLCcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGVxdWFscyhvdGhlckJvdW5kczogTGF0TG5nQm91bmRzLCBtYXhNYXJnaW4/OiBOdW1iZXIpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGlzIGVxdWl2YWxlbnQgKHdpdGhpbiBhIHNtYWxsIG1hcmdpbiBvZiBlcnJvcikgdG8gdGhlIGdpdmVuIGJvdW5kcy4gVGhlIG1hcmdpbiBvZiBlcnJvciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIGBtYXhNYXJnaW5gIHRvIGEgc21hbGwgbnVtYmVyLlxyXG4gIFx0ZXF1YWxzOiBmdW5jdGlvbiAoYm91bmRzLCBtYXhNYXJnaW4pIHtcclxuICBcdFx0aWYgKCFib3VuZHMpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXMuX3NvdXRoV2VzdC5lcXVhbHMoYm91bmRzLmdldFNvdXRoV2VzdCgpLCBtYXhNYXJnaW4pICYmXHJcbiAgXHRcdCAgICAgICB0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKGJvdW5kcy5nZXROb3J0aEVhc3QoKSwgbWF4TWFyZ2luKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBpc1ZhbGlkKCk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBib3VuZHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxyXG4gIFx0aXNWYWxpZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gISEodGhpcy5fc291dGhXZXN0ICYmIHRoaXMuX25vcnRoRWFzdCk7XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gVE9ETyBJbnRlcm5hdGlvbmFsIGRhdGUgbGluZT9cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmdCb3VuZHMoY29ybmVyMTogTGF0TG5nLCBjb3JuZXIyOiBMYXRMbmcpXHJcbiAgLy8gQ3JlYXRlcyBhIGBMYXRMbmdCb3VuZHNgIG9iamVjdCBieSBkZWZpbmluZyB0d28gZGlhZ29uYWxseSBvcHBvc2l0ZSBjb3JuZXJzIG9mIHRoZSByZWN0YW5nbGUuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwubGF0TG5nQm91bmRzKGxhdGxuZ3M6IExhdExuZ1tdKVxyXG4gIC8vIENyZWF0ZXMgYSBgTGF0TG5nQm91bmRzYCBvYmplY3QgZGVmaW5lZCBieSB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50cyBpdCBjb250YWlucy4gVmVyeSB1c2VmdWwgZm9yIHpvb21pbmcgdGhlIG1hcCB0byBmaXQgYSBwYXJ0aWN1bGFyIHNldCBvZiBsb2NhdGlvbnMgd2l0aCBbYGZpdEJvdW5kc2BdKCNtYXAtZml0Ym91bmRzKS5cclxuICBmdW5jdGlvbiB0b0xhdExuZ0JvdW5kcyhhLCBiKSB7XHJcbiAgXHRpZiAoYSBpbnN0YW5jZW9mIExhdExuZ0JvdW5kcykge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdHJldHVybiBuZXcgTGF0TG5nQm91bmRzKGEsIGIpO1xyXG4gIH1cblxuICAvKiBAY2xhc3MgTGF0TG5nXHJcbiAgICogQGFrYSBMLkxhdExuZ1xyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhIGdlb2dyYXBoaWNhbCBwb2ludCB3aXRoIGEgY2VydGFpbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIHZhciBsYXRsbmcgPSBMLmxhdExuZyg1MC41LCAzMC41KTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgdGhhdCBhY2NlcHQgTGF0TG5nIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtIGFuZCBzaW1wbGUgb2JqZWN0IGZvcm0gKHVubGVzcyBub3RlZCBvdGhlcndpc2UpLCBzbyB0aGVzZSBsaW5lcyBhcmUgZXF1aXZhbGVudDpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIG1hcC5wYW5UbyhbNTAsIDMwXSk7XHJcbiAgICogbWFwLnBhblRvKHtsb246IDMwLCBsYXQ6IDUwfSk7XHJcbiAgICogbWFwLnBhblRvKHtsYXQ6IDUwLCBsbmc6IDMwfSk7XHJcbiAgICogbWFwLnBhblRvKEwubGF0TG5nKDUwLCAzMCkpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogTm90ZSB0aGF0IGBMYXRMbmdgIGRvZXMgbm90IGluaGVyaXQgZnJvbSBMZWFmbGV0J3MgYENsYXNzYCBvYmplY3QsXHJcbiAgICogd2hpY2ggbWVhbnMgbmV3IGNsYXNzZXMgY2FuJ3QgaW5oZXJpdCBmcm9tIGl0LCBhbmQgbmV3IG1ldGhvZHNcclxuICAgKiBjYW4ndCBiZSBhZGRlZCB0byBpdCB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIExhdExuZyhsYXQsIGxuZywgYWx0KSB7XHJcbiAgXHRpZiAoaXNOYU4obGF0KSB8fCBpc05hTihsbmcpKSB7XHJcbiAgXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBMYXRMbmcgb2JqZWN0OiAoJyArIGxhdCArICcsICcgKyBsbmcgKyAnKScpO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBsYXQ6IE51bWJlclxyXG4gIFx0Ly8gTGF0aXR1ZGUgaW4gZGVncmVlc1xyXG4gIFx0dGhpcy5sYXQgPSArbGF0O1xyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBsbmc6IE51bWJlclxyXG4gIFx0Ly8gTG9uZ2l0dWRlIGluIGRlZ3JlZXNcclxuICBcdHRoaXMubG5nID0gK2xuZztcclxuXHJcbiAgXHQvLyBAcHJvcGVydHkgYWx0OiBOdW1iZXJcclxuICBcdC8vIEFsdGl0dWRlIGluIG1ldGVycyAob3B0aW9uYWwpXHJcbiAgXHRpZiAoYWx0ICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0dGhpcy5hbHQgPSArYWx0O1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgTGF0TG5nLnByb3RvdHlwZSA9IHtcclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyTGF0TG5nOiBMYXRMbmcsIG1heE1hcmdpbj86IE51bWJlcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBgTGF0TG5nYCBwb2ludCBpcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiAod2l0aGluIGEgc21hbGwgbWFyZ2luIG9mIGVycm9yKS4gVGhlIG1hcmdpbiBvZiBlcnJvciBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzZXR0aW5nIGBtYXhNYXJnaW5gIHRvIGEgc21hbGwgbnVtYmVyLlxyXG4gIFx0ZXF1YWxzOiBmdW5jdGlvbiAob2JqLCBtYXhNYXJnaW4pIHtcclxuICBcdFx0aWYgKCFvYmopIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHRvYmogPSB0b0xhdExuZyhvYmopO1xyXG5cclxuICBcdFx0dmFyIG1hcmdpbiA9IE1hdGgubWF4KFxyXG4gIFx0XHQgICAgICAgIE1hdGguYWJzKHRoaXMubGF0IC0gb2JqLmxhdCksXHJcbiAgXHRcdCAgICAgICAgTWF0aC5hYnModGhpcy5sbmcgLSBvYmoubG5nKSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbWFyZ2luIDw9IChtYXhNYXJnaW4gPT09IHVuZGVmaW5lZCA/IDEuMEUtOSA6IG1heE1hcmdpbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9TdHJpbmcoKTogU3RyaW5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwb2ludCAoZm9yIGRlYnVnZ2luZyBwdXJwb3NlcykuXHJcbiAgXHR0b1N0cmluZzogZnVuY3Rpb24gKHByZWNpc2lvbikge1xyXG4gIFx0XHRyZXR1cm4gJ0xhdExuZygnICtcclxuICBcdFx0ICAgICAgICBmb3JtYXROdW0odGhpcy5sYXQsIHByZWNpc2lvbikgKyAnLCAnICtcclxuICBcdFx0ICAgICAgICBmb3JtYXROdW0odGhpcy5sbmcsIHByZWNpc2lvbikgKyAnKSc7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzdGFuY2VUbyhvdGhlckxhdExuZzogTGF0TG5nKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSAoaW4gbWV0ZXJzKSB0byB0aGUgZ2l2ZW4gYExhdExuZ2AgY2FsY3VsYXRlZCB1c2luZyB0aGUgW1NwaGVyaWNhbCBMYXcgb2YgQ29zaW5lc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BoZXJpY2FsX2xhd19vZl9jb3NpbmVzKS5cclxuICBcdGRpc3RhbmNlVG86IGZ1bmN0aW9uIChvdGhlcikge1xyXG4gIFx0XHRyZXR1cm4gRWFydGguZGlzdGFuY2UodGhpcywgdG9MYXRMbmcob3RoZXIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwKCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyBhIG5ldyBgTGF0TG5nYCBvYmplY3Qgd2l0aCB0aGUgbG9uZ2l0dWRlIHdyYXBwZWQgc28gaXQncyBhbHdheXMgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXMuXHJcbiAgXHR3cmFwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBFYXJ0aC53cmFwTGF0TG5nKHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRvQm91bmRzKHNpemVJbk1ldGVyczogTnVtYmVyKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGEgbmV3IGBMYXRMbmdCb3VuZHNgIG9iamVjdCBpbiB3aGljaCBlYWNoIGJvdW5kYXJ5IGlzIGBzaXplSW5NZXRlcnMvMmAgbWV0ZXJzIGFwYXJ0IGZyb20gdGhlIGBMYXRMbmdgLlxyXG4gIFx0dG9Cb3VuZHM6IGZ1bmN0aW9uIChzaXplSW5NZXRlcnMpIHtcclxuICBcdFx0dmFyIGxhdEFjY3VyYWN5ID0gMTgwICogc2l6ZUluTWV0ZXJzIC8gNDAwNzUwMTcsXHJcbiAgXHRcdCAgICBsbmdBY2N1cmFjeSA9IGxhdEFjY3VyYWN5IC8gTWF0aC5jb3MoKE1hdGguUEkgLyAxODApICogdGhpcy5sYXQpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRvTGF0TG5nQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIFt0aGlzLmxhdCAtIGxhdEFjY3VyYWN5LCB0aGlzLmxuZyAtIGxuZ0FjY3VyYWN5XSxcclxuICBcdFx0ICAgICAgICBbdGhpcy5sYXQgKyBsYXRBY2N1cmFjeSwgdGhpcy5sbmcgKyBsbmdBY2N1cmFjeV0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRjbG9uZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyh0aGlzLmxhdCwgdGhpcy5sbmcsIHRoaXMuYWx0KTtcclxuICBcdH1cclxuICB9O1xyXG5cclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubGF0TG5nKGxhdGl0dWRlOiBOdW1iZXIsIGxvbmdpdHVkZTogTnVtYmVyLCBhbHRpdHVkZT86IE51bWJlcik6IExhdExuZ1xyXG4gIC8vIENyZWF0ZXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGdlb2dyYXBoaWNhbCBwb2ludCB3aXRoIHRoZSBnaXZlbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIChhbmQgb3B0aW9uYWxseSBhbHRpdHVkZSkuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwubGF0TG5nKGNvb3JkczogQXJyYXkpOiBMYXRMbmdcclxuICAvLyBFeHBlY3RzIGFuIGFycmF5IG9mIHRoZSBmb3JtIGBbTnVtYmVyLCBOdW1iZXJdYCBvciBgW051bWJlciwgTnVtYmVyLCBOdW1iZXJdYCBpbnN0ZWFkLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLmxhdExuZyhjb29yZHM6IE9iamVjdCk6IExhdExuZ1xyXG4gIC8vIEV4cGVjdHMgYW4gcGxhaW4gb2JqZWN0IG9mIHRoZSBmb3JtIGB7bGF0OiBOdW1iZXIsIGxuZzogTnVtYmVyfWAgb3IgYHtsYXQ6IE51bWJlciwgbG5nOiBOdW1iZXIsIGFsdDogTnVtYmVyfWAgaW5zdGVhZC5cclxuXHJcbiAgZnVuY3Rpb24gdG9MYXRMbmcoYSwgYiwgYykge1xyXG4gIFx0aWYgKGEgaW5zdGFuY2VvZiBMYXRMbmcpIHtcclxuICBcdFx0cmV0dXJuIGE7XHJcbiAgXHR9XHJcbiAgXHRpZiAoaXNBcnJheShhKSAmJiB0eXBlb2YgYVswXSAhPT0gJ29iamVjdCcpIHtcclxuICBcdFx0aWYgKGEubGVuZ3RoID09PSAzKSB7XHJcbiAgXHRcdFx0cmV0dXJuIG5ldyBMYXRMbmcoYVswXSwgYVsxXSwgYVsyXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGEubGVuZ3RoID09PSAyKSB7XHJcbiAgXHRcdFx0cmV0dXJuIG5ldyBMYXRMbmcoYVswXSwgYVsxXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHR9XHJcbiAgXHRpZiAoYSA9PT0gdW5kZWZpbmVkIHx8IGEgPT09IG51bGwpIHtcclxuICBcdFx0cmV0dXJuIGE7XHJcbiAgXHR9XHJcbiAgXHRpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnICYmICdsYXQnIGluIGEpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcoYS5sYXQsICdsbmcnIGluIGEgPyBhLmxuZyA6IGEubG9uLCBhLmFsdCk7XHJcbiAgXHR9XHJcbiAgXHRpZiAoYiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdHJldHVybiBudWxsO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBMYXRMbmcoYSwgYiwgYyk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkJhc2VcclxuICAgKiBPYmplY3QgdGhhdCBkZWZpbmVzIGNvb3JkaW5hdGUgcmVmZXJlbmNlIHN5c3RlbXMgZm9yIHByb2plY3RpbmdcclxuICAgKiBnZW9ncmFwaGljYWwgcG9pbnRzIGludG8gcGl4ZWwgKHNjcmVlbikgY29vcmRpbmF0ZXMgYW5kIGJhY2sgKGFuZCB0b1xyXG4gICAqIGNvb3JkaW5hdGVzIGluIG90aGVyIHVuaXRzIGZvciBbV01TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJfTWFwX1NlcnZpY2UpIHNlcnZpY2VzKS4gU2VlXHJcbiAgICogW3NwYXRpYWwgcmVmZXJlbmNlIHN5c3RlbV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3BhdGlhbF9yZWZlcmVuY2Vfc3lzdGVtKS5cclxuICAgKlxyXG4gICAqIExlYWZsZXQgZGVmaW5lcyB0aGUgbW9zdCB1c3VhbCBDUlNzIGJ5IGRlZmF1bHQuIElmIHlvdSB3YW50IHRvIHVzZSBhXHJcbiAgICogQ1JTIG5vdCBkZWZpbmVkIGJ5IGRlZmF1bHQsIHRha2UgYSBsb29rIGF0IHRoZVxyXG4gICAqIFtQcm9qNExlYWZsZXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9rYXJ0ZW5hL1Byb2o0TGVhZmxldCkgcGx1Z2luLlxyXG4gICAqXHJcbiAgICogTm90ZSB0aGF0IHRoZSBDUlMgaW5zdGFuY2VzIGRvIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuIEFsc28sIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSB0aGVtLFxyXG4gICAqIGFuZCBtZXRob2RzIGNhbid0IGJlIGFkZGVkIHRvIHRoZW0gd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICB2YXIgQ1JTID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBsYXRMbmdUb1BvaW50KGxhdGxuZzogTGF0TG5nLCB6b29tOiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUHJvamVjdHMgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGludG8gcGl4ZWwgY29vcmRpbmF0ZXMgZm9yIGEgZ2l2ZW4gem9vbS5cclxuICBcdGxhdExuZ1RvUG9pbnQ6IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20pIHtcclxuICBcdFx0dmFyIHByb2plY3RlZFBvaW50ID0gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QobGF0bG5nKSxcclxuICBcdFx0ICAgIHNjYWxlID0gdGhpcy5zY2FsZSh6b29tKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLnRyYW5zZm9ybWF0aW9uLl90cmFuc2Zvcm0ocHJvamVjdGVkUG9pbnQsIHNjYWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwb2ludFRvTGF0TG5nKHBvaW50OiBQb2ludCwgem9vbTogTnVtYmVyKTogTGF0TG5nXHJcbiAgXHQvLyBUaGUgaW52ZXJzZSBvZiBgbGF0TG5nVG9Qb2ludGAuIFByb2plY3RzIHBpeGVsIGNvb3JkaW5hdGVzIG9uIGEgZ2l2ZW5cclxuICBcdC8vIHpvb20gaW50byBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMuXHJcbiAgXHRwb2ludFRvTGF0TG5nOiBmdW5jdGlvbiAocG9pbnQsIHpvb20pIHtcclxuICBcdFx0dmFyIHNjYWxlID0gdGhpcy5zY2FsZSh6b29tKSxcclxuICBcdFx0ICAgIHVudHJhbnNmb3JtZWRQb2ludCA9IHRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0ocG9pbnQsIHNjYWxlKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLnByb2plY3Rpb24udW5wcm9qZWN0KHVudHJhbnNmb3JtZWRQb2ludCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcHJvamVjdChsYXRsbmc6IExhdExuZyk6IFBvaW50XHJcbiAgXHQvLyBQcm9qZWN0cyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgaW50byBjb29yZGluYXRlcyBpbiB1bml0cyBhY2NlcHRlZCBmb3JcclxuICBcdC8vIHRoaXMgQ1JTIChlLmcuIG1ldGVycyBmb3IgRVBTRzozODU3LCBmb3IgcGFzc2luZyBpdCB0byBXTVMgc2VydmljZXMpLlxyXG4gIFx0cHJvamVjdDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QobGF0bG5nKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1bnByb2plY3QocG9pbnQ6IFBvaW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIHByb2plY3RlZCBjb29yZGluYXRlIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgTGF0TG5nLlxyXG4gIFx0Ly8gVGhlIGludmVyc2Ugb2YgYHByb2plY3RgLlxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdGlvbi51bnByb2plY3QocG9pbnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNjYWxlKHpvb206IE51bWJlcik6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc2NhbGUgdXNlZCB3aGVuIHRyYW5zZm9ybWluZyBwcm9qZWN0ZWQgY29vcmRpbmF0ZXMgaW50b1xyXG4gIFx0Ly8gcGl4ZWwgY29vcmRpbmF0ZXMgZm9yIGEgcGFydGljdWxhciB6b29tLiBGb3IgZXhhbXBsZSwgaXQgcmV0dXJuc1xyXG4gIFx0Ly8gYDI1NiAqIDJeem9vbWAgZm9yIE1lcmNhdG9yLWJhc2VkIENSUy5cclxuICBcdHNjYWxlOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHRyZXR1cm4gMjU2ICogTWF0aC5wb3coMiwgem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgem9vbShzY2FsZTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBJbnZlcnNlIG9mIGBzY2FsZSgpYCwgcmV0dXJucyB0aGUgem9vbSBsZXZlbCBjb3JyZXNwb25kaW5nIHRvIGEgc2NhbGVcclxuICBcdC8vIGZhY3RvciBvZiBgc2NhbGVgLlxyXG4gIFx0em9vbTogZnVuY3Rpb24gKHNjYWxlKSB7XHJcbiAgXHRcdHJldHVybiBNYXRoLmxvZyhzY2FsZSAvIDI1NikgLyBNYXRoLkxOMjtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQcm9qZWN0ZWRCb3VuZHMoem9vbTogTnVtYmVyKTogQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBwcm9qZWN0aW9uJ3MgYm91bmRzIHNjYWxlZCBhbmQgdHJhbnNmb3JtZWQgZm9yIHRoZSBwcm92aWRlZCBgem9vbWAuXHJcbiAgXHRnZXRQcm9qZWN0ZWRCb3VuZHM6IGZ1bmN0aW9uICh6b29tKSB7XHJcbiAgXHRcdGlmICh0aGlzLmluZmluaXRlKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gIFx0XHR2YXIgYiA9IHRoaXMucHJvamVjdGlvbi5ib3VuZHMsXHJcbiAgXHRcdCAgICBzID0gdGhpcy5zY2FsZSh6b29tKSxcclxuICBcdFx0ICAgIG1pbiA9IHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGIubWluLCBzKSxcclxuICBcdFx0ICAgIG1heCA9IHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGIubWF4LCBzKTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKG1pbiwgbWF4KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZShsYXRsbmcxOiBMYXRMbmcsIGxhdGxuZzI6IExhdExuZyk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzLlxyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBjb2RlOiBTdHJpbmdcclxuICBcdC8vIFN0YW5kYXJkIGNvZGUgbmFtZSBvZiB0aGUgQ1JTIHBhc3NlZCBpbnRvIFdNUyBzZXJ2aWNlcyAoZS5nLiBgJ0VQU0c6Mzg1NydgKVxyXG4gIFx0Ly9cclxuICBcdC8vIEBwcm9wZXJ0eSB3cmFwTG5nOiBOdW1iZXJbXVxyXG4gIFx0Ly8gQW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgZGVmaW5pbmcgd2hldGhlciB0aGUgbG9uZ2l0dWRlIChob3Jpem9udGFsKSBjb29yZGluYXRlXHJcbiAgXHQvLyBheGlzIHdyYXBzIGFyb3VuZCBhIGdpdmVuIHJhbmdlIGFuZCBob3cuIERlZmF1bHRzIHRvIGBbLTE4MCwgMTgwXWAgaW4gbW9zdFxyXG4gIFx0Ly8gZ2VvZ3JhcGhpY2FsIENSU3MuIElmIGB1bmRlZmluZWRgLCB0aGUgbG9uZ2l0dWRlIGF4aXMgZG9lcyBub3Qgd3JhcCBhcm91bmQuXHJcbiAgXHQvL1xyXG4gIFx0Ly8gQHByb3BlcnR5IHdyYXBMYXQ6IE51bWJlcltdXHJcbiAgXHQvLyBMaWtlIGB3cmFwTG5nYCwgYnV0IGZvciB0aGUgbGF0aXR1ZGUgKHZlcnRpY2FsKSBheGlzLlxyXG5cclxuICBcdC8vIHdyYXBMbmc6IFttaW4sIG1heF0sXHJcbiAgXHQvLyB3cmFwTGF0OiBbbWluLCBtYXhdLFxyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBpbmZpbml0ZTogQm9vbGVhblxyXG4gIFx0Ly8gSWYgdHJ1ZSwgdGhlIGNvb3JkaW5hdGUgc3BhY2Ugd2lsbCBiZSB1bmJvdW5kZWQgKGluZmluaXRlIGluIGJvdGggYXhlcylcclxuICBcdGluZmluaXRlOiBmYWxzZSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXBMYXRMbmcobGF0bG5nOiBMYXRMbmcpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgYSBgTGF0TG5nYCB3aGVyZSBsYXQgYW5kIGxuZyBoYXMgYmVlbiB3cmFwcGVkIGFjY29yZGluZyB0byB0aGVcclxuICBcdC8vIENSUydzIGB3cmFwTGF0YCBhbmQgYHdyYXBMbmdgIHByb3BlcnRpZXMsIGlmIHRoZXkgYXJlIG91dHNpZGUgdGhlIENSUydzIGJvdW5kcy5cclxuICBcdHdyYXBMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIGxuZyA9IHRoaXMud3JhcExuZyA/IHdyYXBOdW0obGF0bG5nLmxuZywgdGhpcy53cmFwTG5nLCB0cnVlKSA6IGxhdGxuZy5sbmcsXHJcbiAgXHRcdCAgICBsYXQgPSB0aGlzLndyYXBMYXQgPyB3cmFwTnVtKGxhdGxuZy5sYXQsIHRoaXMud3JhcExhdCwgdHJ1ZSkgOiBsYXRsbmcubGF0LFxyXG4gIFx0XHQgICAgYWx0ID0gbGF0bG5nLmFsdDtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKGxhdCwgbG5nLCBhbHQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXBMYXRMbmdCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIFJldHVybnMgYSBgTGF0TG5nQm91bmRzYCB3aXRoIHRoZSBzYW1lIHNpemUgYXMgdGhlIGdpdmVuIG9uZSwgZW5zdXJpbmdcclxuICBcdC8vIHRoYXQgaXRzIGNlbnRlciBpcyB3aXRoaW4gdGhlIENSUydzIGJvdW5kcy5cclxuICBcdC8vIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuTGF0TG5nQm91bmRzYCBpbnN0YW5jZXMsIG5vdCBhcnJheXMuXHJcbiAgXHR3cmFwTGF0TG5nQm91bmRzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdHZhciBjZW50ZXIgPSBib3VuZHMuZ2V0Q2VudGVyKCksXHJcbiAgXHRcdCAgICBuZXdDZW50ZXIgPSB0aGlzLndyYXBMYXRMbmcoY2VudGVyKSxcclxuICBcdFx0ICAgIGxhdFNoaWZ0ID0gY2VudGVyLmxhdCAtIG5ld0NlbnRlci5sYXQsXHJcbiAgXHRcdCAgICBsbmdTaGlmdCA9IGNlbnRlci5sbmcgLSBuZXdDZW50ZXIubG5nO1xyXG5cclxuICBcdFx0aWYgKGxhdFNoaWZ0ID09PSAwICYmIGxuZ1NoaWZ0ID09PSAwKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGJvdW5kcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHN3ID0gYm91bmRzLmdldFNvdXRoV2VzdCgpLFxyXG4gIFx0XHQgICAgbmUgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCksXHJcbiAgXHRcdCAgICBuZXdTdyA9IG5ldyBMYXRMbmcoc3cubGF0IC0gbGF0U2hpZnQsIHN3LmxuZyAtIGxuZ1NoaWZ0KSxcclxuICBcdFx0ICAgIG5ld05lID0gbmV3IExhdExuZyhuZS5sYXQgLSBsYXRTaGlmdCwgbmUubG5nIC0gbG5nU2hpZnQpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMobmV3U3csIG5ld05lKTtcclxuICBcdH1cclxuICB9O1xuXG4gIC8qXG4gICAqIEBuYW1lc3BhY2UgQ1JTXG4gICAqIEBjcnMgTC5DUlMuRWFydGhcbiAgICpcbiAgICogU2VydmVzIGFzIHRoZSBiYXNlIGZvciBDUlMgdGhhdCBhcmUgZ2xvYmFsIHN1Y2ggdGhhdCB0aGV5IGNvdmVyIHRoZSBlYXJ0aC5cbiAgICogQ2FuIG9ubHkgYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3Igb3RoZXIgQ1JTIGFuZCBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSxcbiAgICogc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBhIGBjb2RlYCwgYHByb2plY3Rpb25gIG9yIGB0cmFuc2Zvcm1hdGlvbmAuIGBkaXN0YW5jZSgpYCByZXR1cm5zXG4gICAqIG1ldGVycy5cbiAgICovXG5cbiAgdmFyIEVhcnRoID0gZXh0ZW5kKHt9LCBDUlMsIHtcbiAgXHR3cmFwTG5nOiBbLTE4MCwgMTgwXSxcblxuICBcdC8vIE1lYW4gRWFydGggUmFkaXVzLCBhcyByZWNvbW1lbmRlZCBmb3IgdXNlIGJ5XG4gIFx0Ly8gdGhlIEludGVybmF0aW9uYWwgVW5pb24gb2YgR2VvZGVzeSBhbmQgR2VvcGh5c2ljcyxcbiAgXHQvLyBzZWUgaHR0cHM6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9IYXZlcnNpbmVfZm9ybXVsYVxuICBcdFI6IDYzNzEwMDAsXG5cbiAgXHQvLyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBnZW9ncmFwaGljYWwgcG9pbnRzIHVzaW5nIHNwaGVyaWNhbCBsYXcgb2YgY29zaW5lcyBhcHByb3hpbWF0aW9uXG4gIFx0ZGlzdGFuY2U6IGZ1bmN0aW9uIChsYXRsbmcxLCBsYXRsbmcyKSB7XG4gIFx0XHR2YXIgcmFkID0gTWF0aC5QSSAvIDE4MCxcbiAgXHRcdCAgICBsYXQxID0gbGF0bG5nMS5sYXQgKiByYWQsXG4gIFx0XHQgICAgbGF0MiA9IGxhdGxuZzIubGF0ICogcmFkLFxuICBcdFx0ICAgIHNpbkRMYXQgPSBNYXRoLnNpbigobGF0bG5nMi5sYXQgLSBsYXRsbmcxLmxhdCkgKiByYWQgLyAyKSxcbiAgXHRcdCAgICBzaW5ETG9uID0gTWF0aC5zaW4oKGxhdGxuZzIubG5nIC0gbGF0bG5nMS5sbmcpICogcmFkIC8gMiksXG4gIFx0XHQgICAgYSA9IHNpbkRMYXQgKiBzaW5ETGF0ICsgTWF0aC5jb3MobGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIHNpbkRMb24gKiBzaW5ETG9uLFxuICBcdFx0ICAgIGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpO1xuICBcdFx0cmV0dXJuIHRoaXMuUiAqIGM7XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvclxyXG4gICAqXHJcbiAgICogU3BoZXJpY2FsIE1lcmNhdG9yIHByb2plY3Rpb24g4oCUIHRoZSBtb3N0IGNvbW1vbiBwcm9qZWN0aW9uIGZvciBvbmxpbmUgbWFwcyxcclxuICAgKiB1c2VkIGJ5IGFsbW9zdCBhbGwgZnJlZSBhbmQgY29tbWVyY2lhbCB0aWxlIHByb3ZpZGVycy4gQXNzdW1lcyB0aGF0IEVhcnRoIGlzXHJcbiAgICogYSBzcGhlcmUuIFVzZWQgYnkgdGhlIGBFUFNHOjM4NTdgIENSUy5cclxuICAgKi9cclxuXHJcbiAgdmFyIGVhcnRoUmFkaXVzID0gNjM3ODEzNztcclxuXHJcbiAgdmFyIFNwaGVyaWNhbE1lcmNhdG9yID0ge1xyXG5cclxuICBcdFI6IGVhcnRoUmFkaXVzLFxyXG4gIFx0TUFYX0xBVElUVURFOiA4NS4wNTExMjg3Nzk4LFxyXG5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5NQVhfTEFUSVRVREUsXHJcbiAgXHRcdCAgICBsYXQgPSBNYXRoLm1heChNYXRoLm1pbihtYXgsIGxhdGxuZy5sYXQpLCAtbWF4KSxcclxuICBcdFx0ICAgIHNpbiA9IE1hdGguc2luKGxhdCAqIGQpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChcclxuICBcdFx0XHR0aGlzLlIgKiBsYXRsbmcubG5nICogZCxcclxuICBcdFx0XHR0aGlzLlIgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gMik7XHJcbiAgXHR9LFxyXG5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBkID0gMTgwIC8gTWF0aC5QSTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKFxyXG4gIFx0XHRcdCgyICogTWF0aC5hdGFuKE1hdGguZXhwKHBvaW50LnkgLyB0aGlzLlIpKSAtIChNYXRoLlBJIC8gMikpICogZCxcclxuICBcdFx0XHRwb2ludC54ICogZCAvIHRoaXMuUik7XHJcbiAgXHR9LFxyXG5cclxuICBcdGJvdW5kczogKGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGQgPSBlYXJ0aFJhZGl1cyAqIE1hdGguUEk7XHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKFstZCwgLWRdLCBbZCwgZF0pO1xyXG4gIFx0fSkoKVxyXG4gIH07XG5cbiAgLypcclxuICAgKiBAY2xhc3MgVHJhbnNmb3JtYXRpb25cclxuICAgKiBAYWthIEwuVHJhbnNmb3JtYXRpb25cclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYW4gYWZmaW5lIHRyYW5zZm9ybWF0aW9uOiBhIHNldCBvZiBjb2VmZmljaWVudHMgYGFgLCBgYmAsIGBjYCwgYGRgXHJcbiAgICogZm9yIHRyYW5zZm9ybWluZyBhIHBvaW50IG9mIGEgZm9ybSBgKHgsIHkpYCBpbnRvIGAoYSp4ICsgYiwgYyp5ICsgZClgIGFuZCBkb2luZ1xyXG4gICAqIHRoZSByZXZlcnNlLiBVc2VkIGJ5IExlYWZsZXQgaW4gaXRzIHByb2plY3Rpb25zIGNvZGUuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgdHJhbnNmb3JtYXRpb24gPSBMLnRyYW5zZm9ybWF0aW9uKDIsIDUsIC0xLCAxMCksXHJcbiAgICogXHRwID0gTC5wb2ludCgxLCAyKSxcclxuICAgKiBcdHAyID0gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHApLCAvLyAgTC5wb2ludCg3LCA4KVxyXG4gICAqIFx0cDMgPSB0cmFuc2Zvcm1hdGlvbi51bnRyYW5zZm9ybShwMik7IC8vICBMLnBvaW50KDEsIDIpXHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICAvLyBmYWN0b3J5IG5ldyBMLlRyYW5zZm9ybWF0aW9uKGE6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcilcclxuICAvLyBDcmVhdGVzIGEgYFRyYW5zZm9ybWF0aW9uYCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29lZmZpY2llbnRzLlxyXG4gIGZ1bmN0aW9uIFRyYW5zZm9ybWF0aW9uKGEsIGIsIGMsIGQpIHtcclxuICBcdGlmIChpc0FycmF5KGEpKSB7XHJcbiAgXHRcdC8vIHVzZSBhcnJheSBwcm9wZXJ0aWVzXHJcbiAgXHRcdHRoaXMuX2EgPSBhWzBdO1xyXG4gIFx0XHR0aGlzLl9iID0gYVsxXTtcclxuICBcdFx0dGhpcy5fYyA9IGFbMl07XHJcbiAgXHRcdHRoaXMuX2QgPSBhWzNdO1xyXG4gIFx0XHRyZXR1cm47XHJcbiAgXHR9XHJcbiAgXHR0aGlzLl9hID0gYTtcclxuICBcdHRoaXMuX2IgPSBiO1xyXG4gIFx0dGhpcy5fYyA9IGM7XHJcbiAgXHR0aGlzLl9kID0gZDtcclxuICB9XHJcblxyXG4gIFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZSA9IHtcclxuICBcdC8vIEBtZXRob2QgdHJhbnNmb3JtKHBvaW50OiBQb2ludCwgc2NhbGU/OiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIHRyYW5zZm9ybWVkIHBvaW50LCBvcHRpb25hbGx5IG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIHNjYWxlLlxyXG4gIFx0Ly8gT25seSBhY2NlcHRzIGFjdHVhbCBgTC5Qb2ludGAgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxyXG4gIFx0dHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7IC8vIChQb2ludCwgTnVtYmVyKSAtPiBQb2ludFxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHBvaW50LmNsb25lKCksIHNjYWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gZGVzdHJ1Y3RpdmUgdHJhbnNmb3JtIChmYXN0ZXIpXHJcbiAgXHRfdHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7XHJcbiAgXHRcdHNjYWxlID0gc2NhbGUgfHwgMTtcclxuICBcdFx0cG9pbnQueCA9IHNjYWxlICogKHRoaXMuX2EgKiBwb2ludC54ICsgdGhpcy5fYik7XHJcbiAgXHRcdHBvaW50LnkgPSBzY2FsZSAqICh0aGlzLl9jICogcG9pbnQueSArIHRoaXMuX2QpO1xyXG4gIFx0XHRyZXR1cm4gcG9pbnQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW50cmFuc2Zvcm0ocG9pbnQ6IFBvaW50LCBzY2FsZT86IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXZlcnNlIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBnaXZlbiBwb2ludCwgb3B0aW9uYWxseSBkaXZpZGVkXHJcbiAgXHQvLyBieSB0aGUgZ2l2ZW4gc2NhbGUuIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuUG9pbnRgIGluc3RhbmNlcywgbm90IGFycmF5cy5cclxuICBcdHVudHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7XHJcbiAgXHRcdHNjYWxlID0gc2NhbGUgfHwgMTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChcclxuICBcdFx0ICAgICAgICAocG9pbnQueCAvIHNjYWxlIC0gdGhpcy5fYikgLyB0aGlzLl9hLFxyXG4gIFx0XHQgICAgICAgIChwb2ludC55IC8gc2NhbGUgLSB0aGlzLl9kKSAvIHRoaXMuX2MpO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIGZhY3RvcnkgTC50cmFuc2Zvcm1hdGlvbihhOiBOdW1iZXIsIGI6IE51bWJlciwgYzogTnVtYmVyLCBkOiBOdW1iZXIpXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudHJhbnNmb3JtYXRpb24oYTogTnVtYmVyLCBiOiBOdW1iZXIsIGM6IE51bWJlciwgZDogTnVtYmVyKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIFRyYW5zZm9ybWF0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb2VmZmljaWVudHMuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwudHJhbnNmb3JtYXRpb24oY29lZmZpY2llbnRzOiBBcnJheSk6IFRyYW5zZm9ybWF0aW9uXHJcbiAgLy8gRXhwZWN0cyBhbiBjb2VmZmljaWVudHMgYXJyYXkgb2YgdGhlIGZvcm1cclxuICAvLyBgW2E6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcl1gLlxyXG5cclxuICBmdW5jdGlvbiB0b1RyYW5zZm9ybWF0aW9uKGEsIGIsIGMsIGQpIHtcclxuICBcdHJldHVybiBuZXcgVHJhbnNmb3JtYXRpb24oYSwgYiwgYywgZCk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkVQU0czODU3XHJcbiAgICpcclxuICAgKiBUaGUgbW9zdCBjb21tb24gQ1JTIGZvciBvbmxpbmUgbWFwcywgdXNlZCBieSBhbG1vc3QgYWxsIGZyZWUgYW5kIGNvbW1lcmNpYWxcclxuICAgKiB0aWxlIHByb3ZpZGVycy4gVXNlcyBTcGhlcmljYWwgTWVyY2F0b3IgcHJvamVjdGlvbi4gU2V0IGluIGJ5IGRlZmF1bHQgaW5cclxuICAgKiBNYXAncyBgY3JzYCBvcHRpb24uXHJcbiAgICovXHJcblxyXG4gIHZhciBFUFNHMzg1NyA9IGV4dGVuZCh7fSwgRWFydGgsIHtcclxuICBcdGNvZGU6ICdFUFNHOjM4NTcnLFxyXG4gIFx0cHJvamVjdGlvbjogU3BoZXJpY2FsTWVyY2F0b3IsXHJcblxyXG4gIFx0dHJhbnNmb3JtYXRpb246IChmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IDAuNSAvIChNYXRoLlBJICogU3BoZXJpY2FsTWVyY2F0b3IuUik7XHJcbiAgXHRcdHJldHVybiB0b1RyYW5zZm9ybWF0aW9uKHNjYWxlLCAwLjUsIC1zY2FsZSwgMC41KTtcclxuICBcdH0oKSlcclxuICB9KTtcclxuXHJcbiAgdmFyIEVQU0c5MDA5MTMgPSBleHRlbmQoe30sIEVQU0czODU3LCB7XHJcbiAgXHRjb2RlOiAnRVBTRzo5MDA5MTMnXHJcbiAgfSk7XG5cbiAgLy8gQG5hbWVzcGFjZSBTVkc7IEBzZWN0aW9uXG4gIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5TVkc6XG5cbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZShuYW1lOiBTdHJpbmcpOiBTVkdFbGVtZW50XG4gIC8vIFJldHVybnMgYSBpbnN0YW5jZSBvZiBbU1ZHRWxlbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1NWR0VsZW1lbnQpLFxuICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbGFzcyBuYW1lIHBhc3NlZC4gRm9yIGV4YW1wbGUsIHVzaW5nICdsaW5lJyB3aWxsIHJldHVyblxuICAvLyBhbiBpbnN0YW5jZSBvZiBbU1ZHTGluZUVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9TVkdMaW5lRWxlbWVudCkuXG4gIGZ1bmN0aW9uIHN2Z0NyZWF0ZShuYW1lKSB7XG4gIFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBuYW1lKTtcbiAgfVxuXG4gIC8vIEBmdW5jdGlvbiBwb2ludHNUb1BhdGgocmluZ3M6IFBvaW50W10sIGNsb3NlZDogQm9vbGVhbik6IFN0cmluZ1xuICAvLyBHZW5lcmF0ZXMgYSBTVkcgcGF0aCBzdHJpbmcgZm9yIG11bHRpcGxlIHJpbmdzLCB3aXRoIGVhY2ggcmluZyB0dXJuaW5nXG4gIC8vIGludG8gXCJNLi5MLi5MLi5cIiBpbnN0cnVjdGlvbnNcbiAgZnVuY3Rpb24gcG9pbnRzVG9QYXRoKHJpbmdzLCBjbG9zZWQpIHtcbiAgXHR2YXIgc3RyID0gJycsXG4gIFx0aSwgaiwgbGVuLCBsZW4yLCBwb2ludHMsIHA7XG5cbiAgXHRmb3IgKGkgPSAwLCBsZW4gPSByaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0cG9pbnRzID0gcmluZ3NbaV07XG5cbiAgXHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwb2ludHMubGVuZ3RoOyBqIDwgbGVuMjsgaisrKSB7XG4gIFx0XHRcdHAgPSBwb2ludHNbal07XG4gIFx0XHRcdHN0ciArPSAoaiA/ICdMJyA6ICdNJykgKyBwLnggKyAnICcgKyBwLnk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIGNsb3NlcyB0aGUgcmluZyBmb3IgcG9seWdvbnM7IFwieFwiIGlzIFZNTCBzeW50YXhcbiAgXHRcdHN0ciArPSBjbG9zZWQgPyAoQnJvd3Nlci5zdmcgPyAneicgOiAneCcpIDogJyc7XG4gIFx0fVxuXG4gIFx0Ly8gU1ZHIGNvbXBsYWlucyBhYm91dCBlbXB0eSBwYXRoIHN0cmluZ3NcbiAgXHRyZXR1cm4gc3RyIHx8ICdNMCAwJztcbiAgfVxuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBCcm93c2VyXHJcbiAgICogQGFrYSBMLkJyb3dzZXJcclxuICAgKlxyXG4gICAqIEEgbmFtZXNwYWNlIHdpdGggc3RhdGljIHByb3BlcnRpZXMgZm9yIGJyb3dzZXIvZmVhdHVyZSBkZXRlY3Rpb24gdXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBpZiAoTC5Ccm93c2VyLmllbHQ5KSB7XHJcbiAgICogICBhbGVydCgnVXBncmFkZSB5b3VyIGJyb3dzZXIsIGR1ZGUhJyk7XHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBpZTogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbnMgKG5vdCBFZGdlKS5cclxuICB2YXIgaWUgPSAnQWN0aXZlWE9iamVjdCcgaW4gd2luZG93O1xyXG5cclxuICAvLyBAcHJvcGVydHkgaWVsdDk6IEJvb2xlYW47IGB0cnVlYCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbnMgbGVzcyB0aGFuIDkuXHJcbiAgdmFyIGllbHQ5ID0gaWUgJiYgIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBlZGdlOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIHRoZSBFZGdlIHdlYiBicm93c2VyLlxyXG4gIHZhciBlZGdlID0gJ21zTGF1bmNoVXJpJyBpbiBuYXZpZ2F0b3IgJiYgISgnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3ZWJraXQ6IEJvb2xlYW47XHJcbiAgLy8gYHRydWVgIGZvciB3ZWJraXQtYmFzZWQgYnJvd3NlcnMgbGlrZSBDaHJvbWUgYW5kIFNhZmFyaSAoaW5jbHVkaW5nIG1vYmlsZSB2ZXJzaW9ucykuXHJcbiAgdmFyIHdlYmtpdCA9IHVzZXJBZ2VudENvbnRhaW5zKCd3ZWJraXQnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGFuZHJvaWQ6IEJvb2xlYW5cclxuICAvLyAqKkRlcHJlY2F0ZWQuKiogYHRydWVgIGZvciBhbnkgYnJvd3NlciBydW5uaW5nIG9uIGFuIEFuZHJvaWQgcGxhdGZvcm0uXHJcbiAgdmFyIGFuZHJvaWQgPSB1c2VyQWdlbnRDb250YWlucygnYW5kcm9pZCcpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgYW5kcm9pZDIzOiBCb29sZWFuOyAqKkRlcHJlY2F0ZWQuKiogYHRydWVgIGZvciBicm93c2VycyBydW5uaW5nIG9uIEFuZHJvaWQgMiBvciBBbmRyb2lkIDMuXHJcbiAgdmFyIGFuZHJvaWQyMyA9IHVzZXJBZ2VudENvbnRhaW5zKCdhbmRyb2lkIDInKSB8fCB1c2VyQWdlbnRDb250YWlucygnYW5kcm9pZCAzJyk7XHJcblxyXG4gIC8qIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTc5NjEyNjYgZm9yIGRldGFpbHMgb24gZGV0ZWN0aW5nIHN0b2NrIEFuZHJvaWQgKi9cclxuICB2YXIgd2Via2l0VmVyID0gcGFyc2VJbnQoL1dlYktpdFxcLyhbMC05XSspfCQvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudClbMV0sIDEwKTsgLy8gYWxzbyBtYXRjaGVzIEFwcGxlV2ViS2l0XHJcbiAgLy8gQHByb3BlcnR5IGFuZHJvaWRTdG9jazogQm9vbGVhbjsgKipEZXByZWNhdGVkLioqIGB0cnVlYCBmb3IgdGhlIEFuZHJvaWQgc3RvY2sgYnJvd3NlciAoaS5lLiBub3QgQ2hyb21lKVxyXG4gIHZhciBhbmRyb2lkU3RvY2sgPSBhbmRyb2lkICYmIHVzZXJBZ2VudENvbnRhaW5zKCdHb29nbGUnKSAmJiB3ZWJraXRWZXIgPCA1MzcgJiYgISgnQXVkaW9Ob2RlJyBpbiB3aW5kb3cpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgb3BlcmE6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXJcclxuICB2YXIgb3BlcmEgPSAhIXdpbmRvdy5vcGVyYTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGNocm9tZTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgQ2hyb21lIGJyb3dzZXIuXHJcbiAgdmFyIGNocm9tZSA9ICFlZGdlICYmIHVzZXJBZ2VudENvbnRhaW5zKCdjaHJvbWUnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGdlY2tvOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIGxpa2UgRmlyZWZveC5cclxuICB2YXIgZ2Vja28gPSB1c2VyQWdlbnRDb250YWlucygnZ2Vja28nKSAmJiAhd2Via2l0ICYmICFvcGVyYSAmJiAhaWU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBzYWZhcmk6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIFNhZmFyaSBicm93c2VyLlxyXG4gIHZhciBzYWZhcmkgPSAhY2hyb21lICYmIHVzZXJBZ2VudENvbnRhaW5zKCdzYWZhcmknKTtcclxuXHJcbiAgdmFyIHBoYW50b20gPSB1c2VyQWdlbnRDb250YWlucygncGhhbnRvbScpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgb3BlcmExMjogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXIgc3VwcG9ydGluZyBDU1MgdHJhbnNmb3JtcyAodmVyc2lvbiAxMiBvciBsYXRlcikuXHJcbiAgdmFyIG9wZXJhMTIgPSAnT1RyYW5zaXRpb24nIGluIHN0eWxlO1xyXG5cclxuICAvLyBAcHJvcGVydHkgd2luOiBCb29sZWFuOyBgdHJ1ZWAgd2hlbiB0aGUgYnJvd3NlciBpcyBydW5uaW5nIGluIGEgV2luZG93cyBwbGF0Zm9ybVxyXG4gIHZhciB3aW4gPSBuYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZignV2luJykgPT09IDA7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBpZTNkOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGFsbCBJbnRlcm5ldCBFeHBsb3JlciB2ZXJzaW9ucyBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zLlxyXG4gIHZhciBpZTNkID0gaWUgJiYgKCd0cmFuc2l0aW9uJyBpbiBzdHlsZSk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3ZWJraXQzZDogQm9vbGVhbjsgYHRydWVgIGZvciB3ZWJraXQtYmFzZWQgYnJvd3NlcnMgc3VwcG9ydGluZyBDU1MgdHJhbnNmb3Jtcy5cclxuICB2YXIgd2Via2l0M2QgPSAoJ1dlYktpdENTU01hdHJpeCcgaW4gd2luZG93KSAmJiAoJ20xMScgaW4gbmV3IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgoKSkgJiYgIWFuZHJvaWQyMztcclxuXHJcbiAgLy8gQHByb3BlcnR5IGdlY2tvM2Q6IEJvb2xlYW47IGB0cnVlYCBmb3IgZ2Vja28tYmFzZWQgYnJvd3NlcnMgc3VwcG9ydGluZyBDU1MgdHJhbnNmb3Jtcy5cclxuICB2YXIgZ2Vja28zZCA9ICdNb3pQZXJzcGVjdGl2ZScgaW4gc3R5bGU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBhbnkzZDogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGFueTNkID0gIXdpbmRvdy5MX0RJU0FCTEVfM0QgJiYgKGllM2QgfHwgd2Via2l0M2QgfHwgZ2Vja28zZCkgJiYgIW9wZXJhMTIgJiYgIXBoYW50b207XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtb2JpbGU6IEJvb2xlYW47IGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGUgPSB0eXBlb2Ygb3JpZW50YXRpb24gIT09ICd1bmRlZmluZWQnIHx8IHVzZXJBZ2VudENvbnRhaW5zKCdtb2JpbGUnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZVdlYmtpdDogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgd2Via2l0LWJhc2VkIGJyb3dzZXJzIGluIGEgbW9iaWxlIGRldmljZS5cclxuICB2YXIgbW9iaWxlV2Via2l0ID0gbW9iaWxlICYmIHdlYmtpdDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZVdlYmtpdDNkOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgd2Via2l0LWJhc2VkIGJyb3dzZXJzIGluIGEgbW9iaWxlIGRldmljZSBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zLlxyXG4gIHZhciBtb2JpbGVXZWJraXQzZCA9IG1vYmlsZSAmJiB3ZWJraXQzZDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1zUG9pbnRlcjogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYnJvd3NlcnMgaW1wbGVtZW50aW5nIHRoZSBNaWNyb3NvZnQgdG91Y2ggZXZlbnRzIG1vZGVsIChub3RhYmx5IElFMTApLlxyXG4gIHZhciBtc1BvaW50ZXIgPSAhd2luZG93LlBvaW50ZXJFdmVudCAmJiB3aW5kb3cuTVNQb2ludGVyRXZlbnQ7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBwb2ludGVyOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgYnJvd3NlcnMgc3VwcG9ydGluZyBbcG9pbnRlciBldmVudHNdKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZG40MzMyNDQlMjh2PXZzLjg1JTI5LmFzcHgpLlxyXG4gIHZhciBwb2ludGVyID0gISEod2luZG93LlBvaW50ZXJFdmVudCB8fCBtc1BvaW50ZXIpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgdG91Y2hOYXRpdmU6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFsbCBicm93c2VycyBzdXBwb3J0aW5nIFt0b3VjaCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Ub3VjaF9ldmVudHMpLlxyXG4gIC8vICoqVGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuKiogdGhhdCB0aGUgYnJvd3NlciBpcyBydW5uaW5nIGluIGEgY29tcHV0ZXIgd2l0aFxyXG4gIC8vIGEgdG91Y2hzY3JlZW4sIGl0IG9ubHkgbWVhbnMgdGhhdCB0aGUgYnJvd3NlciBpcyBjYXBhYmxlIG9mIHVuZGVyc3RhbmRpbmdcclxuICAvLyB0b3VjaCBldmVudHMuXHJcbiAgdmFyIHRvdWNoTmF0aXZlID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8ICEhd2luZG93LlRvdWNoRXZlbnQ7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB0b3VjaDogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHN1cHBvcnRpbmcgZWl0aGVyIFt0b3VjaF0oI2Jyb3dzZXItdG91Y2gpIG9yIFtwb2ludGVyXSgjYnJvd3Nlci1wb2ludGVyKSBldmVudHMuXHJcbiAgLy8gTm90ZTogcG9pbnRlciBldmVudHMgd2lsbCBiZSBwcmVmZXJyZWQgKGlmIGF2YWlsYWJsZSksIGFuZCBwcm9jZXNzZWQgZm9yIGFsbCBgdG91Y2gqYCBsaXN0ZW5lcnMuXHJcbiAgdmFyIHRvdWNoID0gIXdpbmRvdy5MX05PX1RPVUNIICYmICh0b3VjaE5hdGl2ZSB8fCBwb2ludGVyKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZU9wZXJhOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIHRoZSBPcGVyYSBicm93c2VyIGluIGEgbW9iaWxlIGRldmljZS5cclxuICB2YXIgbW9iaWxlT3BlcmEgPSBtb2JpbGUgJiYgb3BlcmE7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtb2JpbGVHZWNrbzogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgZ2Vja28tYmFzZWQgYnJvd3NlcnMgcnVubmluZyBpbiBhIG1vYmlsZSBkZXZpY2UuXHJcbiAgdmFyIG1vYmlsZUdlY2tvID0gbW9iaWxlICYmIGdlY2tvO1xyXG5cclxuICAvLyBAcHJvcGVydHkgcmV0aW5hOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBicm93c2VycyBvbiBhIGhpZ2gtcmVzb2x1dGlvbiBcInJldGluYVwiIHNjcmVlbiBvciBvbiBhbnkgc2NyZWVuIHdoZW4gYnJvd3NlcidzIGRpc3BsYXkgem9vbSBpcyBtb3JlIHRoYW4gMTAwJS5cclxuICB2YXIgcmV0aW5hID0gKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8ICh3aW5kb3cuc2NyZWVuLmRldmljZVhEUEkgLyB3aW5kb3cuc2NyZWVuLmxvZ2ljYWxYRFBJKSkgPiAxO1xyXG5cclxuICAvLyBAcHJvcGVydHkgcGFzc2l2ZUV2ZW50czogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IHBhc3NpdmUgZXZlbnRzLlxyXG4gIHZhciBwYXNzaXZlRXZlbnRzID0gKGZ1bmN0aW9uICgpIHtcclxuICBcdHZhciBzdXBwb3J0c1Bhc3NpdmVPcHRpb24gPSBmYWxzZTtcclxuICBcdHRyeSB7XHJcbiAgXHRcdHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcclxuICBcdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnZXR0ZXItcmV0dXJuXHJcbiAgXHRcdFx0XHRzdXBwb3J0c1Bhc3NpdmVPcHRpb24gPSB0cnVlO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSk7XHJcbiAgXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIGZhbHNlRm4sIG9wdHMpO1xyXG4gIFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVFdmVudFN1cHBvcnQnLCBmYWxzZUZuLCBvcHRzKTtcclxuICBcdH0gY2F0Y2ggKGUpIHtcclxuICBcdFx0Ly8gRXJyb3JzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBzaW5jZSB0aGlzIGlzIG9ubHkgYSBicm93c2VyIHN1cHBvcnQgdGVzdC5cclxuICBcdH1cclxuICBcdHJldHVybiBzdXBwb3J0c1Bhc3NpdmVPcHRpb247XHJcbiAgfSgpKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGNhbnZhczogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIFtgPGNhbnZhcz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvQ2FudmFzX0FQSSkuXHJcbiAgdmFyIGNhbnZhcyQxID0gKGZ1bmN0aW9uICgpIHtcclxuICBcdHJldHVybiAhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQ7XHJcbiAgfSgpKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHN2ZzogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIFtTVkddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRykuXHJcbiAgdmFyIHN2ZyQxID0gISEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmIHN2Z0NyZWF0ZSgnc3ZnJykuY3JlYXRlU1ZHUmVjdCk7XHJcblxyXG4gIHZhciBpbmxpbmVTdmcgPSAhIXN2ZyQxICYmIChmdW5jdGlvbiAoKSB7XHJcbiAgXHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgXHRkaXYuaW5uZXJIVE1MID0gJzxzdmcvPic7XHJcbiAgXHRyZXR1cm4gKGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJzdENoaWxkLm5hbWVzcGFjZVVSSSkgPT09ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XHJcbiAgfSkoKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHZtbDogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBpZiB0aGUgYnJvd3NlciBzdXBwb3J0cyBbVk1MXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WZWN0b3JfTWFya3VwX0xhbmd1YWdlKS5cclxuICB2YXIgdm1sID0gIXN2ZyQxICYmIChmdW5jdGlvbiAoKSB7XHJcbiAgXHR0cnkge1xyXG4gIFx0XHR2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgXHRcdGRpdi5pbm5lckhUTUwgPSAnPHY6c2hhcGUgYWRqPVwiMVwiLz4nO1xyXG5cclxuICBcdFx0dmFyIHNoYXBlID0gZGl2LmZpcnN0Q2hpbGQ7XHJcbiAgXHRcdHNoYXBlLnN0eWxlLmJlaGF2aW9yID0gJ3VybCgjZGVmYXVsdCNWTUwpJztcclxuXHJcbiAgXHRcdHJldHVybiBzaGFwZSAmJiAodHlwZW9mIHNoYXBlLmFkaiA9PT0gJ29iamVjdCcpO1xyXG5cclxuICBcdH0gY2F0Y2ggKGUpIHtcclxuICBcdFx0cmV0dXJuIGZhbHNlO1xyXG4gIFx0fVxyXG4gIH0oKSk7XHJcblxyXG5cclxuICAvLyBAcHJvcGVydHkgbWFjOiBCb29sZWFuOyBgdHJ1ZWAgd2hlbiB0aGUgYnJvd3NlciBpcyBydW5uaW5nIGluIGEgTWFjIHBsYXRmb3JtXHJcbiAgdmFyIG1hYyA9IG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdNYWMnKSA9PT0gMDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1hYzogQm9vbGVhbjsgYHRydWVgIHdoZW4gdGhlIGJyb3dzZXIgaXMgcnVubmluZyBpbiBhIExpbnV4IHBsYXRmb3JtXHJcbiAgdmFyIGxpbnV4ID0gbmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ0xpbnV4JykgPT09IDA7XHJcblxyXG4gIGZ1bmN0aW9uIHVzZXJBZ2VudENvbnRhaW5zKHN0cikge1xyXG4gIFx0cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHN0cikgPj0gMDtcclxuICB9XHJcblxyXG5cclxuICB2YXIgQnJvd3NlciA9IHtcclxuICBcdGllOiBpZSxcclxuICBcdGllbHQ5OiBpZWx0OSxcclxuICBcdGVkZ2U6IGVkZ2UsXHJcbiAgXHR3ZWJraXQ6IHdlYmtpdCxcclxuICBcdGFuZHJvaWQ6IGFuZHJvaWQsXHJcbiAgXHRhbmRyb2lkMjM6IGFuZHJvaWQyMyxcclxuICBcdGFuZHJvaWRTdG9jazogYW5kcm9pZFN0b2NrLFxyXG4gIFx0b3BlcmE6IG9wZXJhLFxyXG4gIFx0Y2hyb21lOiBjaHJvbWUsXHJcbiAgXHRnZWNrbzogZ2Vja28sXHJcbiAgXHRzYWZhcmk6IHNhZmFyaSxcclxuICBcdHBoYW50b206IHBoYW50b20sXHJcbiAgXHRvcGVyYTEyOiBvcGVyYTEyLFxyXG4gIFx0d2luOiB3aW4sXHJcbiAgXHRpZTNkOiBpZTNkLFxyXG4gIFx0d2Via2l0M2Q6IHdlYmtpdDNkLFxyXG4gIFx0Z2Vja28zZDogZ2Vja28zZCxcclxuICBcdGFueTNkOiBhbnkzZCxcclxuICBcdG1vYmlsZTogbW9iaWxlLFxyXG4gIFx0bW9iaWxlV2Via2l0OiBtb2JpbGVXZWJraXQsXHJcbiAgXHRtb2JpbGVXZWJraXQzZDogbW9iaWxlV2Via2l0M2QsXHJcbiAgXHRtc1BvaW50ZXI6IG1zUG9pbnRlcixcclxuICBcdHBvaW50ZXI6IHBvaW50ZXIsXHJcbiAgXHR0b3VjaDogdG91Y2gsXHJcbiAgXHR0b3VjaE5hdGl2ZTogdG91Y2hOYXRpdmUsXHJcbiAgXHRtb2JpbGVPcGVyYTogbW9iaWxlT3BlcmEsXHJcbiAgXHRtb2JpbGVHZWNrbzogbW9iaWxlR2Vja28sXHJcbiAgXHRyZXRpbmE6IHJldGluYSxcclxuICBcdHBhc3NpdmVFdmVudHM6IHBhc3NpdmVFdmVudHMsXHJcbiAgXHRjYW52YXM6IGNhbnZhcyQxLFxyXG4gIFx0c3ZnOiBzdmckMSxcclxuICBcdHZtbDogdm1sLFxyXG4gIFx0aW5saW5lU3ZnOiBpbmxpbmVTdmcsXHJcbiAgXHRtYWM6IG1hYyxcclxuICBcdGxpbnV4OiBsaW51eFxyXG4gIH07XG5cbiAgLypcbiAgICogRXh0ZW5kcyBMLkRvbUV2ZW50IHRvIHByb3ZpZGUgdG91Y2ggc3VwcG9ydCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgYW5kIFdpbmRvd3MtYmFzZWQgZGV2aWNlcy5cbiAgICovXG5cbiAgdmFyIFBPSU5URVJfRE9XTiA9ICAgQnJvd3Nlci5tc1BvaW50ZXIgPyAnTVNQb2ludGVyRG93bicgICA6ICdwb2ludGVyZG93bic7XG4gIHZhciBQT0lOVEVSX01PVkUgPSAgIEJyb3dzZXIubXNQb2ludGVyID8gJ01TUG9pbnRlck1vdmUnICAgOiAncG9pbnRlcm1vdmUnO1xuICB2YXIgUE9JTlRFUl9VUCA9ICAgICBCcm93c2VyLm1zUG9pbnRlciA/ICdNU1BvaW50ZXJVcCcgICAgIDogJ3BvaW50ZXJ1cCc7XG4gIHZhciBQT0lOVEVSX0NBTkNFTCA9IEJyb3dzZXIubXNQb2ludGVyID8gJ01TUG9pbnRlckNhbmNlbCcgOiAncG9pbnRlcmNhbmNlbCc7XG4gIHZhciBwRXZlbnQgPSB7XG4gIFx0dG91Y2hzdGFydCAgOiBQT0lOVEVSX0RPV04sXG4gIFx0dG91Y2htb3ZlICAgOiBQT0lOVEVSX01PVkUsXG4gIFx0dG91Y2hlbmQgICAgOiBQT0lOVEVSX1VQLFxuICBcdHRvdWNoY2FuY2VsIDogUE9JTlRFUl9DQU5DRUxcbiAgfTtcbiAgdmFyIGhhbmRsZSA9IHtcbiAgXHR0b3VjaHN0YXJ0ICA6IF9vblBvaW50ZXJTdGFydCxcbiAgXHR0b3VjaG1vdmUgICA6IF9oYW5kbGVQb2ludGVyLFxuICBcdHRvdWNoZW5kICAgIDogX2hhbmRsZVBvaW50ZXIsXG4gIFx0dG91Y2hjYW5jZWwgOiBfaGFuZGxlUG9pbnRlclxuICB9O1xuICB2YXIgX3BvaW50ZXJzID0ge307XG4gIHZhciBfcG9pbnRlckRvY0xpc3RlbmVyID0gZmFsc2U7XG5cbiAgLy8gUHJvdmlkZXMgYSB0b3VjaCBldmVudHMgd3JhcHBlciBmb3IgKG1zKXBvaW50ZXIgZXZlbnRzLlxuICAvLyByZWYgaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvIGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjI4OTBcblxuICBmdW5jdGlvbiBhZGRQb2ludGVyTGlzdGVuZXIob2JqLCB0eXBlLCBoYW5kbGVyKSB7XG4gIFx0aWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICBcdFx0X2FkZFBvaW50ZXJEb2NMaXN0ZW5lcigpO1xuICBcdH1cbiAgXHRpZiAoIWhhbmRsZVt0eXBlXSkge1xuICBcdFx0Y29uc29sZS53YXJuKCd3cm9uZyBldmVudCBzcGVjaWZpZWQ6JywgdHlwZSk7XG4gIFx0XHRyZXR1cm4gZmFsc2VGbjtcbiAgXHR9XG4gIFx0aGFuZGxlciA9IGhhbmRsZVt0eXBlXS5iaW5kKHRoaXMsIGhhbmRsZXIpO1xuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKHBFdmVudFt0eXBlXSwgaGFuZGxlciwgZmFsc2UpO1xuICBcdHJldHVybiBoYW5kbGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUG9pbnRlckxpc3RlbmVyKG9iaiwgdHlwZSwgaGFuZGxlcikge1xuICBcdGlmICghcEV2ZW50W3R5cGVdKSB7XG4gIFx0XHRjb25zb2xlLndhcm4oJ3dyb25nIGV2ZW50IHNwZWNpZmllZDonLCB0eXBlKTtcbiAgXHRcdHJldHVybjtcbiAgXHR9XG4gIFx0b2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIocEV2ZW50W3R5cGVdLCBoYW5kbGVyLCBmYWxzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlckRvd24oZSkge1xuICBcdF9wb2ludGVyc1tlLnBvaW50ZXJJZF0gPSBlO1xuICB9XG5cbiAgZnVuY3Rpb24gX2dsb2JhbFBvaW50ZXJNb3ZlKGUpIHtcbiAgXHRpZiAoX3BvaW50ZXJzW2UucG9pbnRlcklkXSkge1xuICBcdFx0X3BvaW50ZXJzW2UucG9pbnRlcklkXSA9IGU7XG4gIFx0fVxuICB9XG5cbiAgZnVuY3Rpb24gX2dsb2JhbFBvaW50ZXJVcChlKSB7XG4gIFx0ZGVsZXRlIF9wb2ludGVyc1tlLnBvaW50ZXJJZF07XG4gIH1cblxuICBmdW5jdGlvbiBfYWRkUG9pbnRlckRvY0xpc3RlbmVyKCkge1xuICBcdC8vIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB3aGF0IHBvaW50ZXJzIGFuZCBob3cgbWFueSBhcmUgYWN0aXZlIHRvIHByb3ZpZGUgZS50b3VjaGVzIGVtdWxhdGlvblxuICBcdGlmICghX3BvaW50ZXJEb2NMaXN0ZW5lcikge1xuICBcdFx0Ly8gd2UgbGlzdGVuIGRvY3VtZW50IGFzIGFueSBkcmFncyB0aGF0IGVuZCBieSBtb3ZpbmcgdGhlIHRvdWNoIG9mZiB0aGUgc2NyZWVuIGdldCBmaXJlZCB0aGVyZVxuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0RPV04sIF9nbG9iYWxQb2ludGVyRG93biwgdHJ1ZSk7XG4gIFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfTU9WRSwgX2dsb2JhbFBvaW50ZXJNb3ZlLCB0cnVlKTtcbiAgXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9VUCwgX2dsb2JhbFBvaW50ZXJVcCwgdHJ1ZSk7XG4gIFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfQ0FOQ0VMLCBfZ2xvYmFsUG9pbnRlclVwLCB0cnVlKTtcblxuICBcdFx0X3BvaW50ZXJEb2NMaXN0ZW5lciA9IHRydWU7XG4gIFx0fVxuICB9XG5cbiAgZnVuY3Rpb24gX2hhbmRsZVBvaW50ZXIoaGFuZGxlciwgZSkge1xuICBcdGlmIChlLnBvaW50ZXJUeXBlID09PSAoZS5NU1BPSU5URVJfVFlQRV9NT1VTRSB8fCAnbW91c2UnKSkgeyByZXR1cm47IH1cblxuICBcdGUudG91Y2hlcyA9IFtdO1xuICBcdGZvciAodmFyIGkgaW4gX3BvaW50ZXJzKSB7XG4gIFx0XHRlLnRvdWNoZXMucHVzaChfcG9pbnRlcnNbaV0pO1xuICBcdH1cbiAgXHRlLmNoYW5nZWRUb3VjaGVzID0gW2VdO1xuXG4gIFx0aGFuZGxlcihlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vblBvaW50ZXJTdGFydChoYW5kbGVyLCBlKSB7XG4gIFx0Ly8gSUUxMCBzcGVjaWZpYzogTXNUb3VjaCBuZWVkcyBwcmV2ZW50RGVmYXVsdC4gU2VlICMyMDAwXG4gIFx0aWYgKGUuTVNQT0lOVEVSX1RZUEVfVE9VQ0ggJiYgZS5wb2ludGVyVHlwZSA9PT0gZS5NU1BPSU5URVJfVFlQRV9UT1VDSCkge1xuICBcdFx0cHJldmVudERlZmF1bHQoZSk7XG4gIFx0fVxuICBcdF9oYW5kbGVQb2ludGVyKGhhbmRsZXIsIGUpO1xuICB9XG5cbiAgLypcclxuICAgKiBFeHRlbmRzIHRoZSBldmVudCBoYW5kbGluZyBjb2RlIHdpdGggZG91YmxlIHRhcCBzdXBwb3J0IGZvciBtb2JpbGUgYnJvd3NlcnMuXHJcbiAgICpcclxuICAgKiBOb3RlOiBjdXJyZW50bHkgbW9zdCBicm93c2VycyBmaXJlIG5hdGl2ZSBkYmxjbGljaywgd2l0aCBvbmx5IGEgZmV3IGV4Y2VwdGlvbnNcclxuICAgKiAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzcwMTIjaXNzdWVjb21tZW50LTU5NTA4NzM4NilcclxuICAgKi9cclxuXHJcbiAgZnVuY3Rpb24gbWFrZURibGNsaWNrKGV2ZW50KSB7XHJcbiAgXHQvLyBpbiBtb2Rlcm4gYnJvd3NlcnMgYHR5cGVgIGNhbm5vdCBiZSBqdXN0IG92ZXJyaWRkZW46XHJcbiAgXHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvR2V0dGVyX29ubHlcclxuICBcdHZhciBuZXdFdmVudCA9IHt9LFxyXG4gIFx0ICAgIHByb3AsIGk7XHJcbiAgXHRmb3IgKGkgaW4gZXZlbnQpIHtcclxuICBcdFx0cHJvcCA9IGV2ZW50W2ldO1xyXG4gIFx0XHRuZXdFdmVudFtpXSA9IHByb3AgJiYgcHJvcC5iaW5kID8gcHJvcC5iaW5kKGV2ZW50KSA6IHByb3A7XHJcbiAgXHR9XHJcbiAgXHRldmVudCA9IG5ld0V2ZW50O1xyXG4gIFx0bmV3RXZlbnQudHlwZSA9ICdkYmxjbGljayc7XHJcbiAgXHRuZXdFdmVudC5kZXRhaWwgPSAyO1xyXG4gIFx0bmV3RXZlbnQuaXNUcnVzdGVkID0gZmFsc2U7XHJcbiAgXHRuZXdFdmVudC5fc2ltdWxhdGVkID0gdHJ1ZTsgLy8gZm9yIGRlYnVnIHB1cnBvc2VzXHJcbiAgXHRyZXR1cm4gbmV3RXZlbnQ7XHJcbiAgfVxyXG5cclxuICB2YXIgZGVsYXkgPSAyMDA7XHJcbiAgZnVuY3Rpb24gYWRkRG91YmxlVGFwTGlzdGVuZXIob2JqLCBoYW5kbGVyKSB7XHJcbiAgXHQvLyBNb3N0IGJyb3dzZXJzIGhhbmRsZSBkb3VibGUgdGFwIG5hdGl2ZWx5XHJcbiAgXHRvYmouYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBoYW5kbGVyKTtcclxuXHJcbiAgXHQvLyBPbiBzb21lIHBsYXRmb3JtcyB0aGUgYnJvd3NlciBkb2Vzbid0IGZpcmUgbmF0aXZlIGRibGNsaWNrcyBmb3IgdG91Y2ggZXZlbnRzLlxyXG4gIFx0Ly8gSXQgc2VlbXMgdGhhdCBpbiBhbGwgc3VjaCBjYXNlcyBgZGV0YWlsYCBwcm9wZXJ0eSBvZiBgY2xpY2tgIGV2ZW50IGlzIGFsd2F5cyBgMWAuXHJcbiAgXHQvLyBTbyBoZXJlIHdlIHJlbHkgb24gdGhhdCBmYWN0IHRvIGF2b2lkIGV4Y2Vzc2l2ZSAnZGJsY2xpY2snIHNpbXVsYXRpb24gd2hlbiBub3QgbmVlZGVkLlxyXG4gIFx0dmFyIGxhc3QgPSAwLFxyXG4gIFx0ICAgIGRldGFpbDtcclxuICBcdGZ1bmN0aW9uIHNpbURibGNsaWNrKGUpIHtcclxuICBcdFx0aWYgKGUuZGV0YWlsICE9PSAxKSB7XHJcbiAgXHRcdFx0ZGV0YWlsID0gZS5kZXRhaWw7IC8vIGtlZXAgaW4gc3luYyB0byBhdm9pZCBmYWxzZSBkYmxjbGljayBpbiBzb21lIGNhc2VzXHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoZS5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyB8fFxyXG4gIFx0XHRcdChlLnNvdXJjZUNhcGFiaWxpdGllcyAmJiAhZS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykpIHtcclxuXHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBXaGVuIGNsaWNraW5nIG9uIGFuIDxpbnB1dD4sIHRoZSBicm93c2VyIGdlbmVyYXRlcyBhIGNsaWNrIG9uIGl0c1xyXG4gIFx0XHQvLyA8bGFiZWw+IChhbmQgdmljZSB2ZXJzYSkgdHJpZ2dlcmluZyB0d28gY2xpY2tzIGluIHF1aWNrIHN1Y2Nlc3Npb24uXHJcbiAgXHRcdC8vIFRoaXMgaWdub3JlcyBjbGlja3Mgb24gZWxlbWVudHMgd2hpY2ggYXJlIGEgbGFiZWwgd2l0aCBhICdmb3InXHJcbiAgXHRcdC8vIGF0dHJpYnV0ZSAob3IgY2hpbGRyZW4gb2Ygc3VjaCBhIGxhYmVsKSwgYnV0IG5vdCBjaGlsZHJlbiBvZlxyXG4gIFx0XHQvLyBhIDxpbnB1dD4uXHJcbiAgXHRcdHZhciBwYXRoID0gZ2V0UHJvcGFnYXRpb25QYXRoKGUpO1xyXG4gIFx0XHRpZiAocGF0aC5zb21lKGZ1bmN0aW9uIChlbCkge1xyXG4gIFx0XHRcdHJldHVybiBlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQgJiYgZWwuYXR0cmlidXRlcy5mb3I7XHJcbiAgXHRcdH0pICYmXHJcbiAgXHRcdFx0IXBhdGguc29tZShmdW5jdGlvbiAoZWwpIHtcclxuICBcdFx0XHRcdHJldHVybiAoXHJcbiAgXHRcdFx0XHRcdGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fFxyXG4gIFx0XHRcdFx0XHRlbCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50XHJcbiAgXHRcdFx0XHQpO1xyXG4gIFx0XHRcdH0pXHJcbiAgXHRcdCkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgXHRcdGlmIChub3cgLSBsYXN0IDw9IGRlbGF5KSB7XHJcbiAgXHRcdFx0ZGV0YWlsKys7XHJcbiAgXHRcdFx0aWYgKGRldGFpbCA9PT0gMikge1xyXG4gIFx0XHRcdFx0aGFuZGxlcihtYWtlRGJsY2xpY2soZSkpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRkZXRhaWwgPSAxO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGxhc3QgPSBub3c7XHJcbiAgXHR9XHJcblxyXG4gIFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2ltRGJsY2xpY2spO1xyXG5cclxuICBcdHJldHVybiB7XHJcbiAgXHRcdGRibGNsaWNrOiBoYW5kbGVyLFxyXG4gIFx0XHRzaW1EYmxjbGljazogc2ltRGJsY2xpY2tcclxuICBcdH07XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVEb3VibGVUYXBMaXN0ZW5lcihvYmosIGhhbmRsZXJzKSB7XHJcbiAgXHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBoYW5kbGVycy5kYmxjbGljayk7XHJcbiAgXHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVycy5zaW1EYmxjbGljayk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBEb21VdGlsXHJcbiAgICpcclxuICAgKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGggdGhlIFtET01dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Eb2N1bWVudF9PYmplY3RfTW9kZWwpXHJcbiAgICogdHJlZSwgdXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkuXHJcbiAgICpcclxuICAgKiBNb3N0IGZ1bmN0aW9ucyBleHBlY3Rpbmcgb3IgcmV0dXJuaW5nIGEgYEhUTUxFbGVtZW50YCBhbHNvIHdvcmsgZm9yXHJcbiAgICogU1ZHIGVsZW1lbnRzLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgY2xhc3NlcyByZWZlciB0byBDU1MgY2xhc3Nlc1xyXG4gICAqIGluIEhUTUwgYW5kIFNWRyBjbGFzc2VzIGluIFNWRy5cclxuICAgKi9cclxuXHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBUUkFOU0ZPUk06IFN0cmluZ1xyXG4gIC8vIFZlbmRvci1wcmVmaXhlZCB0cmFuc2Zvcm0gc3R5bGUgbmFtZSAoZS5nLiBgJ3dlYmtpdFRyYW5zZm9ybSdgIGZvciBXZWJLaXQpLlxyXG4gIHZhciBUUkFOU0ZPUk0gPSB0ZXN0UHJvcChcclxuICBcdFsndHJhbnNmb3JtJywgJ3dlYmtpdFRyYW5zZm9ybScsICdPVHJhbnNmb3JtJywgJ01velRyYW5zZm9ybScsICdtc1RyYW5zZm9ybSddKTtcclxuXHJcbiAgLy8gd2Via2l0VHJhbnNpdGlvbiBjb21lcyBmaXJzdCBiZWNhdXNlIHNvbWUgYnJvd3NlciB2ZXJzaW9ucyB0aGF0IGRyb3AgdmVuZG9yIHByZWZpeCBkb24ndCBkb1xyXG4gIC8vIHRoZSBzYW1lIGZvciB0aGUgdHJhbnNpdGlvbmVuZCBldmVudCwgaW4gcGFydGljdWxhciB0aGUgQW5kcm9pZCA0LjEgc3RvY2sgYnJvd3NlclxyXG5cclxuICAvLyBAcHJvcGVydHkgVFJBTlNJVElPTjogU3RyaW5nXHJcbiAgLy8gVmVuZG9yLXByZWZpeGVkIHRyYW5zaXRpb24gc3R5bGUgbmFtZS5cclxuICB2YXIgVFJBTlNJVElPTiA9IHRlc3RQcm9wKFxyXG4gIFx0Wyd3ZWJraXRUcmFuc2l0aW9uJywgJ3RyYW5zaXRpb24nLCAnT1RyYW5zaXRpb24nLCAnTW96VHJhbnNpdGlvbicsICdtc1RyYW5zaXRpb24nXSk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBUUkFOU0lUSU9OX0VORDogU3RyaW5nXHJcbiAgLy8gVmVuZG9yLXByZWZpeGVkIHRyYW5zaXRpb25lbmQgZXZlbnQgbmFtZS5cclxuICB2YXIgVFJBTlNJVElPTl9FTkQgPVxyXG4gIFx0VFJBTlNJVElPTiA9PT0gJ3dlYmtpdFRyYW5zaXRpb24nIHx8IFRSQU5TSVRJT04gPT09ICdPVHJhbnNpdGlvbicgPyBUUkFOU0lUSU9OICsgJ0VuZCcgOiAndHJhbnNpdGlvbmVuZCc7XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0KGlkOiBTdHJpbmd8SFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxyXG4gIC8vIFJldHVybnMgYW4gZWxlbWVudCBnaXZlbiBpdHMgRE9NIGlkLCBvciByZXR1cm5zIHRoZSBlbGVtZW50IGl0c2VsZlxyXG4gIC8vIGlmIGl0IHdhcyBwYXNzZWQgZGlyZWN0bHkuXHJcbiAgZnVuY3Rpb24gZ2V0KGlkKSB7XHJcbiAgXHRyZXR1cm4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA6IGlkO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFN0eWxlKGVsOiBIVE1MRWxlbWVudCwgc3R5bGVBdHRyaWI6IFN0cmluZyk6IFN0cmluZ1xyXG4gIC8vIFJldHVybnMgdGhlIHZhbHVlIGZvciBhIGNlcnRhaW4gc3R5bGUgYXR0cmlidXRlIG9uIGFuIGVsZW1lbnQsXHJcbiAgLy8gaW5jbHVkaW5nIGNvbXB1dGVkIHZhbHVlcyBvciB2YWx1ZXMgc2V0IHRocm91Z2ggQ1NTLlxyXG4gIGZ1bmN0aW9uIGdldFN0eWxlKGVsLCBzdHlsZSkge1xyXG4gIFx0dmFyIHZhbHVlID0gZWwuc3R5bGVbc3R5bGVdIHx8IChlbC5jdXJyZW50U3R5bGUgJiYgZWwuY3VycmVudFN0eWxlW3N0eWxlXSk7XHJcblxyXG4gIFx0aWYgKCghdmFsdWUgfHwgdmFsdWUgPT09ICdhdXRvJykgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcpIHtcclxuICBcdFx0dmFyIGNzcyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xyXG4gIFx0XHR2YWx1ZSA9IGNzcyA/IGNzc1tzdHlsZV0gOiBudWxsO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHZhbHVlID09PSAnYXV0bycgPyBudWxsIDogdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY3JlYXRlKHRhZ05hbWU6IFN0cmluZywgY2xhc3NOYW1lPzogU3RyaW5nLCBjb250YWluZXI/OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgLy8gQ3JlYXRlcyBhbiBIVE1MIGVsZW1lbnQgd2l0aCBgdGFnTmFtZWAsIHNldHMgaXRzIGNsYXNzIHRvIGBjbGFzc05hbWVgLCBhbmQgb3B0aW9uYWxseSBhcHBlbmRzIGl0IHRvIGBjb250YWluZXJgIGVsZW1lbnQuXHJcbiAgZnVuY3Rpb24gY3JlYXRlJDEodGFnTmFtZSwgY2xhc3NOYW1lLCBjb250YWluZXIpIHtcclxuICBcdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XHJcbiAgXHRlbC5jbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgJyc7XHJcblxyXG4gIFx0aWYgKGNvbnRhaW5lcikge1xyXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGVsO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHJlbW92ZShlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gUmVtb3ZlcyBgZWxgIGZyb20gaXRzIHBhcmVudCBlbGVtZW50XHJcbiAgZnVuY3Rpb24gcmVtb3ZlKGVsKSB7XHJcbiAgXHR2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcclxuICBcdGlmIChwYXJlbnQpIHtcclxuICBcdFx0cGFyZW50LnJlbW92ZUNoaWxkKGVsKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBlbXB0eShlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gUmVtb3ZlcyBhbGwgb2YgYGVsYCdzIGNoaWxkcmVuIGVsZW1lbnRzIGZyb20gYGVsYFxyXG4gIGZ1bmN0aW9uIGVtcHR5KGVsKSB7XHJcbiAgXHR3aGlsZSAoZWwuZmlyc3RDaGlsZCkge1xyXG4gIFx0XHRlbC5yZW1vdmVDaGlsZChlbC5maXJzdENoaWxkKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0b0Zyb250KGVsOiBIVE1MRWxlbWVudClcclxuICAvLyBNYWtlcyBgZWxgIHRoZSBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQsIHNvIGl0IHJlbmRlcnMgaW4gZnJvbnQgb2YgdGhlIG90aGVyIGNoaWxkcmVuLlxyXG4gIGZ1bmN0aW9uIHRvRnJvbnQoZWwpIHtcclxuICBcdHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xyXG4gIFx0aWYgKHBhcmVudCAmJiBwYXJlbnQubGFzdENoaWxkICE9PSBlbCkge1xyXG4gIFx0XHRwYXJlbnQuYXBwZW5kQ2hpbGQoZWwpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRvQmFjayhlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gTWFrZXMgYGVsYCB0aGUgZmlyc3QgY2hpbGQgb2YgaXRzIHBhcmVudCwgc28gaXQgcmVuZGVycyBiZWhpbmQgdGhlIG90aGVyIGNoaWxkcmVuLlxyXG4gIGZ1bmN0aW9uIHRvQmFjayhlbCkge1xyXG4gIFx0dmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XHJcbiAgXHRpZiAocGFyZW50ICYmIHBhcmVudC5maXJzdENoaWxkICE9PSBlbCkge1xyXG4gIFx0XHRwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsLCBwYXJlbnQuZmlyc3RDaGlsZCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gaGFzQ2xhc3MoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBTdHJpbmcpOiBCb29sZWFuXHJcbiAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVsZW1lbnQncyBjbGFzcyBhdHRyaWJ1dGUgY29udGFpbnMgYG5hbWVgLlxyXG4gIGZ1bmN0aW9uIGhhc0NsYXNzKGVsLCBuYW1lKSB7XHJcbiAgXHRpZiAoZWwuY2xhc3NMaXN0ICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0cmV0dXJuIGVsLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKTtcclxuICBcdH1cclxuICBcdHZhciBjbGFzc05hbWUgPSBnZXRDbGFzcyhlbCk7XHJcbiAgXHRyZXR1cm4gY2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgbmV3IFJlZ0V4cCgnKF58XFxcXHMpJyArIG5hbWUgKyAnKFxcXFxzfCQpJykudGVzdChjbGFzc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGFkZENsYXNzKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogU3RyaW5nKVxyXG4gIC8vIEFkZHMgYG5hbWVgIHRvIHRoZSBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlLlxyXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGVsLCBuYW1lKSB7XHJcbiAgXHRpZiAoZWwuY2xhc3NMaXN0ICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0dmFyIGNsYXNzZXMgPSBzcGxpdFdvcmRzKG5hbWUpO1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdGVsLmNsYXNzTGlzdC5hZGQoY2xhc3Nlc1tpXSk7XHJcbiAgXHRcdH1cclxuICBcdH0gZWxzZSBpZiAoIWhhc0NsYXNzKGVsLCBuYW1lKSkge1xyXG4gIFx0XHR2YXIgY2xhc3NOYW1lID0gZ2V0Q2xhc3MoZWwpO1xyXG4gIFx0XHRzZXRDbGFzcyhlbCwgKGNsYXNzTmFtZSA/IGNsYXNzTmFtZSArICcgJyA6ICcnKSArIG5hbWUpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogU3RyaW5nKVxyXG4gIC8vIFJlbW92ZXMgYG5hbWVgIGZyb20gdGhlIGVsZW1lbnQncyBjbGFzcyBhdHRyaWJ1dGUuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWwsIG5hbWUpIHtcclxuICBcdGlmIChlbC5jbGFzc0xpc3QgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRlbC5jbGFzc0xpc3QucmVtb3ZlKG5hbWUpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0c2V0Q2xhc3MoZWwsIHRyaW0oKCcgJyArIGdldENsYXNzKGVsKSArICcgJykucmVwbGFjZSgnICcgKyBuYW1lICsgJyAnLCAnICcpKSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0Q2xhc3MoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBTdHJpbmcpXHJcbiAgLy8gU2V0cyB0aGUgZWxlbWVudCdzIGNsYXNzLlxyXG4gIGZ1bmN0aW9uIHNldENsYXNzKGVsLCBuYW1lKSB7XHJcbiAgXHRpZiAoZWwuY2xhc3NOYW1lLmJhc2VWYWwgPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRlbC5jbGFzc05hbWUgPSBuYW1lO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0Ly8gaW4gY2FzZSBvZiBTVkcgZWxlbWVudFxyXG4gIFx0XHRlbC5jbGFzc05hbWUuYmFzZVZhbCA9IG5hbWU7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0Q2xhc3MoZWw6IEhUTUxFbGVtZW50KTogU3RyaW5nXHJcbiAgLy8gUmV0dXJucyB0aGUgZWxlbWVudCdzIGNsYXNzLlxyXG4gIGZ1bmN0aW9uIGdldENsYXNzKGVsKSB7XHJcbiAgXHQvLyBDaGVjayBpZiB0aGUgZWxlbWVudCBpcyBhbiBTVkdFbGVtZW50SW5zdGFuY2UgYW5kIHVzZSB0aGUgY29ycmVzcG9uZGluZ0VsZW1lbnQgaW5zdGVhZFxyXG4gIFx0Ly8gKFJlcXVpcmVkIGZvciBsaW5rZWQgU1ZHIGVsZW1lbnRzIGluIElFMTEuKVxyXG4gIFx0aWYgKGVsLmNvcnJlc3BvbmRpbmdFbGVtZW50KSB7XHJcbiAgXHRcdGVsID0gZWwuY29ycmVzcG9uZGluZ0VsZW1lbnQ7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gZWwuY2xhc3NOYW1lLmJhc2VWYWwgPT09IHVuZGVmaW5lZCA/IGVsLmNsYXNzTmFtZSA6IGVsLmNsYXNzTmFtZS5iYXNlVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldE9wYWNpdHkoZWw6IEhUTUxFbGVtZW50LCBvcGFjaXR5OiBOdW1iZXIpXHJcbiAgLy8gU2V0IHRoZSBvcGFjaXR5IG9mIGFuIGVsZW1lbnQgKGluY2x1ZGluZyBvbGQgSUUgc3VwcG9ydCkuXHJcbiAgLy8gYG9wYWNpdHlgIG11c3QgYmUgYSBudW1iZXIgZnJvbSBgMGAgdG8gYDFgLlxyXG4gIGZ1bmN0aW9uIHNldE9wYWNpdHkoZWwsIHZhbHVlKSB7XHJcbiAgXHRpZiAoJ29wYWNpdHknIGluIGVsLnN0eWxlKSB7XHJcbiAgXHRcdGVsLnN0eWxlLm9wYWNpdHkgPSB2YWx1ZTtcclxuICBcdH0gZWxzZSBpZiAoJ2ZpbHRlcicgaW4gZWwuc3R5bGUpIHtcclxuICBcdFx0X3NldE9wYWNpdHlJRShlbCwgdmFsdWUpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX3NldE9wYWNpdHlJRShlbCwgdmFsdWUpIHtcclxuICBcdHZhciBmaWx0ZXIgPSBmYWxzZSxcclxuICBcdCAgICBmaWx0ZXJOYW1lID0gJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhJztcclxuXHJcbiAgXHQvLyBmaWx0ZXJzIGNvbGxlY3Rpb24gdGhyb3dzIGFuIGVycm9yIGlmIHdlIHRyeSB0byByZXRyaWV2ZSBhIGZpbHRlciB0aGF0IGRvZXNuJ3QgZXhpc3RcclxuICBcdHRyeSB7XHJcbiAgXHRcdGZpbHRlciA9IGVsLmZpbHRlcnMuaXRlbShmaWx0ZXJOYW1lKTtcclxuICBcdH0gY2F0Y2ggKGUpIHtcclxuICBcdFx0Ly8gZG9uJ3Qgc2V0IG9wYWNpdHkgdG8gMSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgc2V0IGFuIG9wYWNpdHksXHJcbiAgXHRcdC8vIGl0IGlzbid0IG5lZWRlZCBhbmQgYnJlYWtzIHRyYW5zcGFyZW50IHBuZ3MuXHJcbiAgXHRcdGlmICh2YWx1ZSA9PT0gMSkgeyByZXR1cm47IH1cclxuICBcdH1cclxuXHJcbiAgXHR2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgKiAxMDApO1xyXG5cclxuICBcdGlmIChmaWx0ZXIpIHtcclxuICBcdFx0ZmlsdGVyLkVuYWJsZWQgPSAodmFsdWUgIT09IDEwMCk7XHJcbiAgXHRcdGZpbHRlci5PcGFjaXR5ID0gdmFsdWU7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlbC5zdHlsZS5maWx0ZXIgKz0gJyBwcm9naWQ6JyArIGZpbHRlck5hbWUgKyAnKG9wYWNpdHk9JyArIHZhbHVlICsgJyknO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRlc3RQcm9wKHByb3BzOiBTdHJpbmdbXSk6IFN0cmluZ3xmYWxzZVxyXG4gIC8vIEdvZXMgdGhyb3VnaCB0aGUgYXJyYXkgb2Ygc3R5bGUgbmFtZXMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG5hbWVcclxuICAvLyB0aGF0IGlzIGEgdmFsaWQgc3R5bGUgbmFtZSBmb3IgYW4gZWxlbWVudC4gSWYgbm8gc3VjaCBuYW1lIGlzIGZvdW5kLFxyXG4gIC8vIGl0IHJldHVybnMgZmFsc2UuIFVzZWZ1bCBmb3IgdmVuZG9yLXByZWZpeGVkIHN0eWxlcyBsaWtlIGB0cmFuc2Zvcm1gLlxyXG4gIGZ1bmN0aW9uIHRlc3RQcm9wKHByb3BzKSB7XHJcbiAgXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcblxyXG4gIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRpZiAocHJvcHNbaV0gaW4gc3R5bGUpIHtcclxuICBcdFx0XHRyZXR1cm4gcHJvcHNbaV07XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICBcdHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWw6IEhUTUxFbGVtZW50LCBvZmZzZXQ6IFBvaW50LCBzY2FsZT86IE51bWJlcilcclxuICAvLyBSZXNldHMgdGhlIDNEIENTUyB0cmFuc2Zvcm0gb2YgYGVsYCBzbyBpdCBpcyB0cmFuc2xhdGVkIGJ5IGBvZmZzZXRgIHBpeGVsc1xyXG4gIC8vIGFuZCBvcHRpb25hbGx5IHNjYWxlZCBieSBgc2NhbGVgLiBEb2VzIG5vdCBoYXZlIGFuIGVmZmVjdCBpZiB0aGVcclxuICAvLyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCAzRCBDU1MgdHJhbnNmb3Jtcy5cclxuICBmdW5jdGlvbiBzZXRUcmFuc2Zvcm0oZWwsIG9mZnNldCwgc2NhbGUpIHtcclxuICBcdHZhciBwb3MgPSBvZmZzZXQgfHwgbmV3IFBvaW50KDAsIDApO1xyXG5cclxuICBcdGVsLnN0eWxlW1RSQU5TRk9STV0gPVxyXG4gIFx0XHQoQnJvd3Nlci5pZTNkID9cclxuICBcdFx0XHQndHJhbnNsYXRlKCcgKyBwb3MueCArICdweCwnICsgcG9zLnkgKyAncHgpJyA6XHJcbiAgXHRcdFx0J3RyYW5zbGF0ZTNkKCcgKyBwb3MueCArICdweCwnICsgcG9zLnkgKyAncHgsMCknKSArXHJcbiAgXHRcdChzY2FsZSA/ICcgc2NhbGUoJyArIHNjYWxlICsgJyknIDogJycpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldFBvc2l0aW9uKGVsOiBIVE1MRWxlbWVudCwgcG9zaXRpb246IFBvaW50KVxyXG4gIC8vIFNldHMgdGhlIHBvc2l0aW9uIG9mIGBlbGAgdG8gY29vcmRpbmF0ZXMgc3BlY2lmaWVkIGJ5IGBwb3NpdGlvbmAsXHJcbiAgLy8gdXNpbmcgQ1NTIHRyYW5zbGF0ZSBvciB0b3AvbGVmdCBwb3NpdGlvbmluZyBkZXBlbmRpbmcgb24gdGhlIGJyb3dzZXJcclxuICAvLyAodXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkgdG8gcG9zaXRpb24gaXRzIGxheWVycykuXHJcbiAgZnVuY3Rpb24gc2V0UG9zaXRpb24oZWwsIHBvaW50KSB7XHJcblxyXG4gIFx0Lyplc2xpbnQtZGlzYWJsZSAqL1xyXG4gIFx0ZWwuX2xlYWZsZXRfcG9zID0gcG9pbnQ7XHJcbiAgXHQvKiBlc2xpbnQtZW5hYmxlICovXHJcblxyXG4gIFx0aWYgKEJyb3dzZXIuYW55M2QpIHtcclxuICBcdFx0c2V0VHJhbnNmb3JtKGVsLCBwb2ludCk7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlbC5zdHlsZS5sZWZ0ID0gcG9pbnQueCArICdweCc7XHJcbiAgXHRcdGVsLnN0eWxlLnRvcCA9IHBvaW50LnkgKyAncHgnO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFBvc2l0aW9uKGVsOiBIVE1MRWxlbWVudCk6IFBvaW50XHJcbiAgLy8gUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gZWxlbWVudCBwcmV2aW91c2x5IHBvc2l0aW9uZWQgd2l0aCBzZXRQb3NpdGlvbi5cclxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbihlbCkge1xyXG4gIFx0Ly8gdGhpcyBtZXRob2QgaXMgb25seSB1c2VkIGZvciBlbGVtZW50cyBwcmV2aW91c2x5IHBvc2l0aW9uZWQgdXNpbmcgc2V0UG9zaXRpb24sXHJcbiAgXHQvLyBzbyBpdCdzIHNhZmUgdG8gY2FjaGUgdGhlIHBvc2l0aW9uIGZvciBwZXJmb3JtYW5jZVxyXG5cclxuICBcdHJldHVybiBlbC5fbGVhZmxldF9wb3MgfHwgbmV3IFBvaW50KDAsIDApO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVUZXh0U2VsZWN0aW9uKClcclxuICAvLyBQcmV2ZW50cyB0aGUgdXNlciBmcm9tIGdlbmVyYXRpbmcgYHNlbGVjdHN0YXJ0YCBET00gZXZlbnRzLCB1c3VhbGx5IGdlbmVyYXRlZFxyXG4gIC8vIHdoZW4gdGhlIHVzZXIgZHJhZ3MgdGhlIG1vdXNlIHRocm91Z2ggYSBwYWdlIHdpdGggdGV4dC4gVXNlZCBpbnRlcm5hbGx5XHJcbiAgLy8gYnkgTGVhZmxldCB0byBvdmVycmlkZSB0aGUgYmVoYXZpb3VyIG9mIGFueSBjbGljay1hbmQtZHJhZyBpbnRlcmFjdGlvbiBvblxyXG4gIC8vIHRoZSBtYXAuIEFmZmVjdHMgZHJhZyBpbnRlcmFjdGlvbnMgb24gdGhlIHdob2xlIGRvY3VtZW50LlxyXG5cclxuICAvLyBAZnVuY3Rpb24gZW5hYmxlVGV4dFNlbGVjdGlvbigpXHJcbiAgLy8gQ2FuY2VscyB0aGUgZWZmZWN0cyBvZiBhIHByZXZpb3VzIFtgTC5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLlxyXG4gIHZhciBkaXNhYmxlVGV4dFNlbGVjdGlvbjtcclxuICB2YXIgZW5hYmxlVGV4dFNlbGVjdGlvbjtcclxuICB2YXIgX3VzZXJTZWxlY3Q7XHJcbiAgaWYgKCdvbnNlbGVjdHN0YXJ0JyBpbiBkb2N1bWVudCkge1xyXG4gIFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdG9uKHdpbmRvdywgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xyXG4gIFx0fTtcclxuICBcdGVuYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdG9mZih3aW5kb3csICdzZWxlY3RzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICBcdH07XHJcbiAgfSBlbHNlIHtcclxuICBcdHZhciB1c2VyU2VsZWN0UHJvcGVydHkgPSB0ZXN0UHJvcChcclxuICBcdFx0Wyd1c2VyU2VsZWN0JywgJ1dlYmtpdFVzZXJTZWxlY3QnLCAnT1VzZXJTZWxlY3QnLCAnTW96VXNlclNlbGVjdCcsICdtc1VzZXJTZWxlY3QnXSk7XHJcblxyXG4gIFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh1c2VyU2VsZWN0UHJvcGVydHkpIHtcclxuICBcdFx0XHR2YXIgc3R5bGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcbiAgXHRcdFx0X3VzZXJTZWxlY3QgPSBzdHlsZVt1c2VyU2VsZWN0UHJvcGVydHldO1xyXG4gIFx0XHRcdHN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV0gPSAnbm9uZSc7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcbiAgXHRlbmFibGVUZXh0U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodXNlclNlbGVjdFByb3BlcnR5KSB7XHJcbiAgXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV0gPSBfdXNlclNlbGVjdDtcclxuICBcdFx0XHRfdXNlclNlbGVjdCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlSW1hZ2VEcmFnKClcclxuICAvLyBBcyBbYEwuRG9tVXRpbC5kaXNhYmxlVGV4dFNlbGVjdGlvbmBdKCNkb211dGlsLWRpc2FibGV0ZXh0c2VsZWN0aW9uKSwgYnV0XHJcbiAgLy8gZm9yIGBkcmFnc3RhcnRgIERPTSBldmVudHMsIHVzdWFsbHkgZ2VuZXJhdGVkIHdoZW4gdGhlIHVzZXIgZHJhZ3MgYW4gaW1hZ2UuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZUltYWdlRHJhZygpIHtcclxuICBcdG9uKHdpbmRvdywgJ2RyYWdzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBlbmFibGVJbWFnZURyYWcoKVxyXG4gIC8vIENhbmNlbHMgdGhlIGVmZmVjdHMgb2YgYSBwcmV2aW91cyBbYEwuRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLlxyXG4gIGZ1bmN0aW9uIGVuYWJsZUltYWdlRHJhZygpIHtcclxuICBcdG9mZih3aW5kb3csICdkcmFnc3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XHJcbiAgfVxyXG5cclxuICB2YXIgX291dGxpbmVFbGVtZW50LCBfb3V0bGluZVN0eWxlO1xyXG4gIC8vIEBmdW5jdGlvbiBwcmV2ZW50T3V0bGluZShlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gTWFrZXMgdGhlIFtvdXRsaW5lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1Mvb3V0bGluZSlcclxuICAvLyBvZiB0aGUgZWxlbWVudCBgZWxgIGludmlzaWJsZS4gVXNlZCBpbnRlcm5hbGx5IGJ5IExlYWZsZXQgdG8gcHJldmVudFxyXG4gIC8vIGZvY3VzYWJsZSBlbGVtZW50cyBmcm9tIGRpc3BsYXlpbmcgYW4gb3V0bGluZSB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGFcclxuICAvLyBkcmFnIGludGVyYWN0aW9uIG9uIHRoZW0uXHJcbiAgZnVuY3Rpb24gcHJldmVudE91dGxpbmUoZWxlbWVudCkge1xyXG4gIFx0d2hpbGUgKGVsZW1lbnQudGFiSW5kZXggPT09IC0xKSB7XHJcbiAgXHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgXHR9XHJcbiAgXHRpZiAoIWVsZW1lbnQuc3R5bGUpIHsgcmV0dXJuOyB9XHJcbiAgXHRyZXN0b3JlT3V0bGluZSgpO1xyXG4gIFx0X291dGxpbmVFbGVtZW50ID0gZWxlbWVudDtcclxuICBcdF9vdXRsaW5lU3R5bGUgPSBlbGVtZW50LnN0eWxlLm91dGxpbmU7XHJcbiAgXHRlbGVtZW50LnN0eWxlLm91dGxpbmUgPSAnbm9uZSc7XHJcbiAgXHRvbih3aW5kb3csICdrZXlkb3duJywgcmVzdG9yZU91dGxpbmUpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHJlc3RvcmVPdXRsaW5lKClcclxuICAvLyBDYW5jZWxzIHRoZSBlZmZlY3RzIG9mIGEgcHJldmlvdXMgW2BMLkRvbVV0aWwucHJldmVudE91dGxpbmVgXSgpLlxyXG4gIGZ1bmN0aW9uIHJlc3RvcmVPdXRsaW5lKCkge1xyXG4gIFx0aWYgKCFfb3V0bGluZUVsZW1lbnQpIHsgcmV0dXJuOyB9XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQuc3R5bGUub3V0bGluZSA9IF9vdXRsaW5lU3R5bGU7XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgXHRfb3V0bGluZVN0eWxlID0gdW5kZWZpbmVkO1xyXG4gIFx0b2ZmKHdpbmRvdywgJ2tleWRvd24nLCByZXN0b3JlT3V0bGluZSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U2l6ZWRQYXJlbnROb2RlKGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgLy8gRmluZHMgdGhlIGNsb3Nlc3QgcGFyZW50IG5vZGUgd2hpY2ggc2l6ZSAod2lkdGggYW5kIGhlaWdodCkgaXMgbm90IG51bGwuXHJcbiAgZnVuY3Rpb24gZ2V0U2l6ZWRQYXJlbnROb2RlKGVsZW1lbnQpIHtcclxuICBcdGRvIHtcclxuICBcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICBcdH0gd2hpbGUgKCghZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAhZWxlbWVudC5vZmZzZXRIZWlnaHQpICYmIGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpO1xyXG4gIFx0cmV0dXJuIGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U2NhbGUoZWw6IEhUTUxFbGVtZW50KTogT2JqZWN0XHJcbiAgLy8gQ29tcHV0ZXMgdGhlIENTUyBzY2FsZSBjdXJyZW50bHkgYXBwbGllZCBvbiB0aGUgZWxlbWVudC5cclxuICAvLyBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGB4YCBhbmQgYHlgIG1lbWJlcnMgYXMgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2NhbGVzIHJlc3BlY3RpdmVseSxcclxuICAvLyBhbmQgYGJvdW5kaW5nQ2xpZW50UmVjdGAgYXMgdGhlIHJlc3VsdCBvZiBbYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0Qm91bmRpbmdDbGllbnRSZWN0KS5cclxuICBmdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XHJcbiAgXHR2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IC8vIFJlYWQtb25seSBpbiBvbGQgYnJvd3NlcnMuXHJcblxyXG4gIFx0cmV0dXJuIHtcclxuICBcdFx0eDogcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSxcclxuICBcdFx0eTogcmVjdC5oZWlnaHQgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxLFxyXG4gIFx0XHRib3VuZGluZ0NsaWVudFJlY3Q6IHJlY3RcclxuICBcdH07XHJcbiAgfVxuXG4gIHZhciBEb21VdGlsID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBUUkFOU0ZPUk06IFRSQU5TRk9STSxcbiAgICBUUkFOU0lUSU9OOiBUUkFOU0lUSU9OLFxuICAgIFRSQU5TSVRJT05fRU5EOiBUUkFOU0lUSU9OX0VORCxcbiAgICBnZXQ6IGdldCxcbiAgICBnZXRTdHlsZTogZ2V0U3R5bGUsXG4gICAgY3JlYXRlOiBjcmVhdGUkMSxcbiAgICByZW1vdmU6IHJlbW92ZSxcbiAgICBlbXB0eTogZW1wdHksXG4gICAgdG9Gcm9udDogdG9Gcm9udCxcbiAgICB0b0JhY2s6IHRvQmFjayxcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgYWRkQ2xhc3M6IGFkZENsYXNzLFxuICAgIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcyxcbiAgICBzZXRDbGFzczogc2V0Q2xhc3MsXG4gICAgZ2V0Q2xhc3M6IGdldENsYXNzLFxuICAgIHNldE9wYWNpdHk6IHNldE9wYWNpdHksXG4gICAgdGVzdFByb3A6IHRlc3RQcm9wLFxuICAgIHNldFRyYW5zZm9ybTogc2V0VHJhbnNmb3JtLFxuICAgIHNldFBvc2l0aW9uOiBzZXRQb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24sXG4gICAgZ2V0IGRpc2FibGVUZXh0U2VsZWN0aW9uICgpIHsgcmV0dXJuIGRpc2FibGVUZXh0U2VsZWN0aW9uOyB9LFxuICAgIGdldCBlbmFibGVUZXh0U2VsZWN0aW9uICgpIHsgcmV0dXJuIGVuYWJsZVRleHRTZWxlY3Rpb247IH0sXG4gICAgZGlzYWJsZUltYWdlRHJhZzogZGlzYWJsZUltYWdlRHJhZyxcbiAgICBlbmFibGVJbWFnZURyYWc6IGVuYWJsZUltYWdlRHJhZyxcbiAgICBwcmV2ZW50T3V0bGluZTogcHJldmVudE91dGxpbmUsXG4gICAgcmVzdG9yZU91dGxpbmU6IHJlc3RvcmVPdXRsaW5lLFxuICAgIGdldFNpemVkUGFyZW50Tm9kZTogZ2V0U2l6ZWRQYXJlbnROb2RlLFxuICAgIGdldFNjYWxlOiBnZXRTY2FsZVxuICB9O1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBEb21FdmVudFxyXG4gICAqIFV0aWxpdHkgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aCB0aGUgW0RPTSBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9FdmVudCksIHVzZWQgYnkgTGVhZmxldCBpbnRlcm5hbGx5LlxyXG4gICAqL1xyXG5cclxuICAvLyBJbnNwaXJlZCBieSBKb2huIFJlc2lnLCBEZWFuIEVkd2FyZHMgYW5kIFlVSSBhZGRFdmVudCBpbXBsZW1lbnRhdGlvbnMuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBvbihlbDogSFRNTEVsZW1lbnQsIHR5cGVzOiBTdHJpbmcsIGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICAvLyBBZGRzIGEgbGlzdGVuZXIgZnVuY3Rpb24gKGBmbmApIHRvIGEgcGFydGljdWxhciBET00gZXZlbnQgdHlwZSBvZiB0aGVcclxuICAvLyBlbGVtZW50IGBlbGAuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBjb250ZXh0IG9mIHRoZSBsaXN0ZW5lclxyXG4gIC8vIChvYmplY3QgdGhlIGB0aGlzYCBrZXl3b3JkIHdpbGwgcG9pbnQgdG8pLiBZb3UgY2FuIGFsc28gcGFzcyBzZXZlcmFsXHJcbiAgLy8gc3BhY2Utc2VwYXJhdGVkIHR5cGVzIChlLmcuIGAnY2xpY2sgZGJsY2xpY2snYCkuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmdW5jdGlvbiBvbihlbDogSFRNTEVsZW1lbnQsIGV2ZW50TWFwOiBPYmplY3QsIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gQWRkcyBhIHNldCBvZiB0eXBlL2xpc3RlbmVyIHBhaXJzLCBlLmcuIGB7Y2xpY2s6IG9uQ2xpY2ssIG1vdXNlbW92ZTogb25Nb3VzZU1vdmV9YFxyXG4gIGZ1bmN0aW9uIG9uKG9iaiwgdHlwZXMsIGZuLCBjb250ZXh0KSB7XHJcblxyXG4gIFx0aWYgKHR5cGVzICYmIHR5cGVvZiB0eXBlcyA9PT0gJ29iamVjdCcpIHtcclxuICBcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdGFkZE9uZShvYmosIHR5cGUsIHR5cGVzW3R5cGVdLCBmbik7XHJcbiAgXHRcdH1cclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdHR5cGVzID0gc3BsaXRXb3Jkcyh0eXBlcyk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRhZGRPbmUob2JqLCB0eXBlc1tpXSwgZm4sIGNvbnRleHQpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB2YXIgZXZlbnRzS2V5ID0gJ19sZWFmbGV0X2V2ZW50cyc7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBvZmYoZWw6IEhUTUxFbGVtZW50LCB0eXBlczogU3RyaW5nLCBmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgbGlzdGVuZXIgZnVuY3Rpb24uXHJcbiAgLy8gTm90ZSB0aGF0IGlmIHlvdSBwYXNzZWQgYSBjdXN0b20gY29udGV4dCB0byBvbiwgeW91IG11c3QgcGFzcyB0aGUgc2FtZVxyXG4gIC8vIGNvbnRleHQgdG8gYG9mZmAgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lci5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZ1bmN0aW9uIG9mZihlbDogSFRNTEVsZW1lbnQsIGV2ZW50TWFwOiBPYmplY3QsIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gUmVtb3ZlcyBhIHNldCBvZiB0eXBlL2xpc3RlbmVyIHBhaXJzLCBlLmcuIGB7Y2xpY2s6IG9uQ2xpY2ssIG1vdXNlbW92ZTogb25Nb3VzZU1vdmV9YFxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZnVuY3Rpb24gb2ZmKGVsOiBIVE1MRWxlbWVudCwgdHlwZXM6IFN0cmluZyk6IHRoaXNcclxuICAvLyBSZW1vdmVzIGFsbCBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVycyBvZiBnaXZlbiB0eXBlcy5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZ1bmN0aW9uIG9mZihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gUmVtb3ZlcyBhbGwgcHJldmlvdXNseSBhZGRlZCBsaXN0ZW5lcnMgZnJvbSBnaXZlbiBIVE1MRWxlbWVudFxyXG4gIGZ1bmN0aW9uIG9mZihvYmosIHR5cGVzLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XHJcbiAgXHRcdGJhdGNoUmVtb3ZlKG9iaik7XHJcbiAgXHRcdGRlbGV0ZSBvYmpbZXZlbnRzS2V5XTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKHR5cGVzICYmIHR5cGVvZiB0eXBlcyA9PT0gJ29iamVjdCcpIHtcclxuICBcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdHJlbW92ZU9uZShvYmosIHR5cGUsIHR5cGVzW3R5cGVdLCBmbik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcclxuICBcdFx0XHRiYXRjaFJlbW92ZShvYmosIGZ1bmN0aW9uICh0eXBlKSB7XHJcbiAgXHRcdFx0XHRyZXR1cm4gaW5kZXhPZih0eXBlcywgdHlwZSkgIT09IC0xO1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0eXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGJhdGNoUmVtb3ZlKG9iaiwgZmlsdGVyRm4pIHtcclxuICBcdGZvciAodmFyIGlkIGluIG9ialtldmVudHNLZXldKSB7XHJcbiAgXHRcdHZhciB0eXBlID0gaWQuc3BsaXQoL1xcZC8pWzBdO1xyXG4gIFx0XHRpZiAoIWZpbHRlckZuIHx8IGZpbHRlckZuKHR5cGUpKSB7XHJcbiAgXHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZSwgbnVsbCwgbnVsbCwgaWQpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICB2YXIgbW91c2VTdWJzdCA9IHtcclxuICBcdG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxyXG4gIFx0bW91c2VsZWF2ZTogJ21vdXNlb3V0JyxcclxuICBcdHdoZWVsOiAhKCdvbndoZWVsJyBpbiB3aW5kb3cpICYmICdtb3VzZXdoZWVsJ1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGFkZE9uZShvYmosIHR5cGUsIGZuLCBjb250ZXh0KSB7XHJcbiAgXHR2YXIgaWQgPSB0eXBlICsgc3RhbXAoZm4pICsgKGNvbnRleHQgPyAnXycgKyBzdGFtcChjb250ZXh0KSA6ICcnKTtcclxuXHJcbiAgXHRpZiAob2JqW2V2ZW50c0tleV0gJiYgb2JqW2V2ZW50c0tleV1baWRdKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZm4uY2FsbChjb250ZXh0IHx8IG9iaiwgZSB8fCB3aW5kb3cuZXZlbnQpO1xyXG4gIFx0fTtcclxuXHJcbiAgXHR2YXIgb3JpZ2luYWxIYW5kbGVyID0gaGFuZGxlcjtcclxuXHJcbiAgXHRpZiAoIUJyb3dzZXIudG91Y2hOYXRpdmUgJiYgQnJvd3Nlci5wb2ludGVyICYmIHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PT0gMCkge1xyXG4gIFx0XHQvLyBOZWVkcyBEb21FdmVudC5Qb2ludGVyLmpzXHJcbiAgXHRcdGhhbmRsZXIgPSBhZGRQb2ludGVyTGlzdGVuZXIob2JqLCB0eXBlLCBoYW5kbGVyKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKEJyb3dzZXIudG91Y2ggJiYgKHR5cGUgPT09ICdkYmxjbGljaycpKSB7XHJcbiAgXHRcdGhhbmRsZXIgPSBhZGREb3VibGVUYXBMaXN0ZW5lcihvYmosIGhhbmRsZXIpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIG9iaikge1xyXG5cclxuICBcdFx0aWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JyB8fCB0eXBlID09PSAndG91Y2htb3ZlJyB8fCB0eXBlID09PSAnd2hlZWwnIHx8ICB0eXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICBcdFx0XHRvYmouYWRkRXZlbnRMaXN0ZW5lcihtb3VzZVN1YnN0W3R5cGVdIHx8IHR5cGUsIGhhbmRsZXIsIEJyb3dzZXIucGFzc2l2ZUV2ZW50cyA/IHtwYXNzaXZlOiBmYWxzZX0gOiBmYWxzZSk7XHJcblxyXG4gIFx0XHR9IGVsc2UgaWYgKHR5cGUgPT09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09PSAnbW91c2VsZWF2ZScpIHtcclxuICBcdFx0XHRoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0XHRcdGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICBcdFx0XHRcdGlmIChpc0V4dGVybmFsVGFyZ2V0KG9iaiwgZSkpIHtcclxuICBcdFx0XHRcdFx0b3JpZ2luYWxIYW5kbGVyKGUpO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH07XHJcbiAgXHRcdFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIobW91c2VTdWJzdFt0eXBlXSwgaGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBvcmlnaW5hbEhhbmRsZXIsIGZhbHNlKTtcclxuICBcdFx0fVxyXG5cclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdG9iai5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgaGFuZGxlcik7XHJcbiAgXHR9XHJcblxyXG4gIFx0b2JqW2V2ZW50c0tleV0gPSBvYmpbZXZlbnRzS2V5XSB8fCB7fTtcclxuICBcdG9ialtldmVudHNLZXldW2lkXSA9IGhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVPbmUob2JqLCB0eXBlLCBmbiwgY29udGV4dCwgaWQpIHtcclxuICBcdGlkID0gaWQgfHwgdHlwZSArIHN0YW1wKGZuKSArIChjb250ZXh0ID8gJ18nICsgc3RhbXAoY29udGV4dCkgOiAnJyk7XHJcbiAgXHR2YXIgaGFuZGxlciA9IG9ialtldmVudHNLZXldICYmIG9ialtldmVudHNLZXldW2lkXTtcclxuXHJcbiAgXHRpZiAoIWhhbmRsZXIpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRpZiAoIUJyb3dzZXIudG91Y2hOYXRpdmUgJiYgQnJvd3Nlci5wb2ludGVyICYmIHR5cGUuaW5kZXhPZigndG91Y2gnKSA9PT0gMCkge1xyXG4gIFx0XHRyZW1vdmVQb2ludGVyTGlzdGVuZXIob2JqLCB0eXBlLCBoYW5kbGVyKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKEJyb3dzZXIudG91Y2ggJiYgKHR5cGUgPT09ICdkYmxjbGljaycpKSB7XHJcbiAgXHRcdHJlbW92ZURvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlcik7XHJcblxyXG4gIFx0fSBlbHNlIGlmICgncmVtb3ZlRXZlbnRMaXN0ZW5lcicgaW4gb2JqKSB7XHJcblxyXG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihtb3VzZVN1YnN0W3R5cGVdIHx8IHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRvYmouZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGhhbmRsZXIpO1xyXG4gIFx0fVxyXG5cclxuICBcdG9ialtldmVudHNLZXldW2lkXSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGV2OiBET01FdmVudCk6IHRoaXNcclxuICAvLyBTdG9wIHRoZSBnaXZlbiBldmVudCBmcm9tIHByb3BhZ2F0aW9uIHRvIHBhcmVudCBlbGVtZW50cy4gVXNlZCBpbnNpZGUgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uczpcclxuICAvLyBgYGBqc1xyXG4gIC8vIEwuRG9tRXZlbnQub24oZGl2LCAnY2xpY2snLCBmdW5jdGlvbiAoZXYpIHtcclxuICAvLyBcdEwuRG9tRXZlbnQuc3RvcFByb3BhZ2F0aW9uKGV2KTtcclxuICAvLyB9KTtcclxuICAvLyBgYGBcclxuICBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZSkge1xyXG5cclxuICBcdGlmIChlLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gIFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIFx0fSBlbHNlIGlmIChlLm9yaWdpbmFsRXZlbnQpIHsgIC8vIEluIGNhc2Ugb2YgTGVhZmxldCBldmVudC5cclxuICBcdFx0ZS5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkID0gdHJ1ZTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGUuY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24oZWw6IEhUTUxFbGVtZW50KTogdGhpc1xyXG4gIC8vIEFkZHMgYHN0b3BQcm9wYWdhdGlvbmAgdG8gdGhlIGVsZW1lbnQncyBgJ3doZWVsJ2AgZXZlbnRzIChwbHVzIGJyb3dzZXIgdmFyaWFudHMpLlxyXG4gIGZ1bmN0aW9uIGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlbCkge1xyXG4gIFx0YWRkT25lKGVsLCAnd2hlZWwnLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24oZWw6IEhUTUxFbGVtZW50KTogdGhpc1xyXG4gIC8vIEFkZHMgYHN0b3BQcm9wYWdhdGlvbmAgdG8gdGhlIGVsZW1lbnQncyBgJ2NsaWNrJ2AsIGAnZGJsY2xpY2snYCwgYCdjb250ZXh0bWVudSdgLFxyXG4gIC8vIGAnbW91c2Vkb3duJ2AgYW5kIGAndG91Y2hzdGFydCdgIGV2ZW50cyAocGx1cyBicm93c2VyIHZhcmlhbnRzKS5cclxuICBmdW5jdGlvbiBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlbCkge1xyXG4gIFx0b24oZWwsICdtb3VzZWRvd24gdG91Y2hzdGFydCBkYmxjbGljayBjb250ZXh0bWVudScsIHN0b3BQcm9wYWdhdGlvbik7XHJcbiAgXHRlbFsnX2xlYWZsZXRfZGlzYWJsZV9jbGljayddID0gdHJ1ZTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2OiBET01FdmVudCk6IHRoaXNcclxuICAvLyBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIERPTSBFdmVudCBgZXZgIGZyb20gaGFwcGVuaW5nIChzdWNoIGFzXHJcbiAgLy8gZm9sbG93aW5nIGEgbGluayBpbiB0aGUgaHJlZiBvZiB0aGUgYSBlbGVtZW50LCBvciBkb2luZyBhIFBPU1QgcmVxdWVzdFxyXG4gIC8vIHdpdGggcGFnZSByZWxvYWQgd2hlbiBhIGA8Zm9ybT5gIGlzIHN1Ym1pdHRlZCkuXHJcbiAgLy8gVXNlIGl0IGluc2lkZSBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAgZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZSkge1xyXG4gIFx0aWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICBcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0ZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc3RvcChldjogRE9NRXZlbnQpOiB0aGlzXHJcbiAgLy8gRG9lcyBgc3RvcFByb3BhZ2F0aW9uYCBhbmQgYHByZXZlbnREZWZhdWx0YCBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gIGZ1bmN0aW9uIHN0b3AoZSkge1xyXG4gIFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRzdG9wUHJvcGFnYXRpb24oZSk7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRQcm9wYWdhdGlvblBhdGgoZXY6IERPTUV2ZW50KTogQXJyYXlcclxuICAvLyBDb21wYXRpYmlsaXR5IHBvbHlmaWxsIGZvciBbYEV2ZW50LmNvbXBvc2VkUGF0aCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50L2NvbXBvc2VkUGF0aCkuXHJcbiAgLy8gUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBgSFRNTEVsZW1lbnRgcyB0aGF0IHRoZSBnaXZlbiBET00gZXZlbnRcclxuICAvLyBzaG91bGQgcHJvcGFnYXRlIHRvIChpZiBub3Qgc3RvcHBlZCkuXHJcbiAgZnVuY3Rpb24gZ2V0UHJvcGFnYXRpb25QYXRoKGV2KSB7XHJcbiAgXHRpZiAoZXYuY29tcG9zZWRQYXRoKSB7XHJcbiAgXHRcdHJldHVybiBldi5jb21wb3NlZFBhdGgoKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgcGF0aCA9IFtdO1xyXG4gIFx0dmFyIGVsID0gZXYudGFyZ2V0O1xyXG5cclxuICBcdHdoaWxlIChlbCkge1xyXG4gIFx0XHRwYXRoLnB1c2goZWwpO1xyXG4gIFx0XHRlbCA9IGVsLnBhcmVudE5vZGU7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gcGF0aDtcclxuICB9XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0TW91c2VQb3NpdGlvbihldjogRE9NRXZlbnQsIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50KTogUG9pbnRcclxuICAvLyBHZXRzIG5vcm1hbGl6ZWQgbW91c2UgcG9zaXRpb24gZnJvbSBhIERPTSBldmVudCByZWxhdGl2ZSB0byB0aGVcclxuICAvLyBgY29udGFpbmVyYCAoYm9yZGVyIGV4Y2x1ZGVkKSBvciB0byB0aGUgd2hvbGUgcGFnZSBpZiBub3Qgc3BlY2lmaWVkLlxyXG4gIGZ1bmN0aW9uIGdldE1vdXNlUG9zaXRpb24oZSwgY29udGFpbmVyKSB7XHJcbiAgXHRpZiAoIWNvbnRhaW5lcikge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgc2NhbGUgPSBnZXRTY2FsZShjb250YWluZXIpLFxyXG4gIFx0ICAgIG9mZnNldCA9IHNjYWxlLmJvdW5kaW5nQ2xpZW50UmVjdDsgLy8gbGVmdCBhbmQgdG9wICB2YWx1ZXMgYXJlIGluIHBhZ2Ugc2NhbGUgKGxpa2UgdGhlIGV2ZW50IGNsaWVudFgvWSlcclxuXHJcbiAgXHRyZXR1cm4gbmV3IFBvaW50KFxyXG4gIFx0XHQvLyBvZmZzZXQubGVmdC90b3AgdmFsdWVzIGFyZSBpbiBwYWdlIHNjYWxlIChsaWtlIGNsaWVudFgvWSksXHJcbiAgXHRcdC8vIHdoZXJlYXMgY2xpZW50TGVmdC9Ub3AgKGJvcmRlciB3aWR0aCkgdmFsdWVzIGFyZSB0aGUgb3JpZ2luYWwgdmFsdWVzIChiZWZvcmUgQ1NTIHNjYWxlIGFwcGxpZXMpLlxyXG4gIFx0XHQoZS5jbGllbnRYIC0gb2Zmc2V0LmxlZnQpIC8gc2NhbGUueCAtIGNvbnRhaW5lci5jbGllbnRMZWZ0LFxyXG4gIFx0XHQoZS5jbGllbnRZIC0gb2Zmc2V0LnRvcCkgLyBzY2FsZS55IC0gY29udGFpbmVyLmNsaWVudFRvcFxyXG4gIFx0KTtcclxuICB9XHJcblxyXG5cclxuICAvLyAgZXhjZXB0ICwgU2FmYXJpIGFuZFxyXG4gIC8vIFdlIG5lZWQgZG91YmxlIHRoZSBzY3JvbGwgcGl4ZWxzIChzZWUgIzc0MDMgYW5kICM0NTM4KSBmb3IgYWxsIEJyb3dzZXJzXHJcbiAgLy8gZXhjZXB0IE9TWCAoTWFjKSAtPiAzeCwgQ2hyb21lIHJ1bm5pbmcgb24gTGludXggMXhcclxuXHJcbiAgdmFyIHdoZWVsUHhGYWN0b3IgPVxyXG4gIFx0KEJyb3dzZXIubGludXggJiYgQnJvd3Nlci5jaHJvbWUpID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOlxyXG4gIFx0QnJvd3Nlci5tYWMgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyAqIDMgOlxyXG4gIFx0d2luZG93LmRldmljZVBpeGVsUmF0aW8gPiAwID8gMiAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTtcclxuICAvLyBAZnVuY3Rpb24gZ2V0V2hlZWxEZWx0YShldjogRE9NRXZlbnQpOiBOdW1iZXJcclxuICAvLyBHZXRzIG5vcm1hbGl6ZWQgd2hlZWwgZGVsdGEgZnJvbSBhIHdoZWVsIERPTSBldmVudCwgaW4gdmVydGljYWxcclxuICAvLyBwaXhlbHMgc2Nyb2xsZWQgKG5lZ2F0aXZlIGlmIHNjcm9sbGluZyBkb3duKS5cclxuICAvLyBFdmVudHMgZnJvbSBwb2ludGluZyBkZXZpY2VzIHdpdGhvdXQgcHJlY2lzZSBzY3JvbGxpbmcgYXJlIG1hcHBlZCB0b1xyXG4gIC8vIGEgYmVzdCBndWVzcyBvZiA2MCBwaXhlbHMuXHJcbiAgZnVuY3Rpb24gZ2V0V2hlZWxEZWx0YShlKSB7XHJcbiAgXHRyZXR1cm4gKEJyb3dzZXIuZWRnZSkgPyBlLndoZWVsRGVsdGFZIC8gMiA6IC8vIERvbid0IHRydXN0IHdpbmRvdy1nZW9tZXRyeS1iYXNlZCBkZWx0YVxyXG4gIFx0ICAgICAgIChlLmRlbHRhWSAmJiBlLmRlbHRhTW9kZSA9PT0gMCkgPyAtZS5kZWx0YVkgLyB3aGVlbFB4RmFjdG9yIDogLy8gUGl4ZWxzXHJcbiAgXHQgICAgICAgKGUuZGVsdGFZICYmIGUuZGVsdGFNb2RlID09PSAxKSA/IC1lLmRlbHRhWSAqIDIwIDogLy8gTGluZXNcclxuICBcdCAgICAgICAoZS5kZWx0YVkgJiYgZS5kZWx0YU1vZGUgPT09IDIpID8gLWUuZGVsdGFZICogNjAgOiAvLyBQYWdlc1xyXG4gIFx0ICAgICAgIChlLmRlbHRhWCB8fCBlLmRlbHRhWikgPyAwIDpcdC8vIFNraXAgaG9yaXpvbnRhbC9kZXB0aCB3aGVlbCBldmVudHNcclxuICBcdCAgICAgICBlLndoZWVsRGVsdGEgPyAoZS53aGVlbERlbHRhWSB8fCBlLndoZWVsRGVsdGEpIC8gMiA6IC8vIExlZ2FjeSBJRSBwaXhlbHNcclxuICBcdCAgICAgICAoZS5kZXRhaWwgJiYgTWF0aC5hYnMoZS5kZXRhaWwpIDwgMzI3NjUpID8gLWUuZGV0YWlsICogMjAgOiAvLyBMZWdhY3kgTW96IGxpbmVzXHJcbiAgXHQgICAgICAgZS5kZXRhaWwgPyBlLmRldGFpbCAvIC0zMjc2NSAqIDYwIDogLy8gTGVnYWN5IE1veiBwYWdlc1xyXG4gIFx0ICAgICAgIDA7XHJcbiAgfVxyXG5cclxuICAvLyBjaGVjayBpZiBlbGVtZW50IHJlYWxseSBsZWZ0L2VudGVyZWQgdGhlIGV2ZW50IHRhcmdldCAoZm9yIG1vdXNlZW50ZXIvbW91c2VsZWF2ZSlcclxuICBmdW5jdGlvbiBpc0V4dGVybmFsVGFyZ2V0KGVsLCBlKSB7XHJcblxyXG4gIFx0dmFyIHJlbGF0ZWQgPSBlLnJlbGF0ZWRUYXJnZXQ7XHJcblxyXG4gIFx0aWYgKCFyZWxhdGVkKSB7IHJldHVybiB0cnVlOyB9XHJcblxyXG4gIFx0dHJ5IHtcclxuICBcdFx0d2hpbGUgKHJlbGF0ZWQgJiYgKHJlbGF0ZWQgIT09IGVsKSkge1xyXG4gIFx0XHRcdHJlbGF0ZWQgPSByZWxhdGVkLnBhcmVudE5vZGU7XHJcbiAgXHRcdH1cclxuICBcdH0gY2F0Y2ggKGVycikge1xyXG4gIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gKHJlbGF0ZWQgIT09IGVsKTtcclxuICB9XG5cbiAgdmFyIERvbUV2ZW50ID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBvbjogb24sXG4gICAgb2ZmOiBvZmYsXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBzdG9wUHJvcGFnYXRpb24sXG4gICAgZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uOiBkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24sXG4gICAgZGlzYWJsZUNsaWNrUHJvcGFnYXRpb246IGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uLFxuICAgIHByZXZlbnREZWZhdWx0OiBwcmV2ZW50RGVmYXVsdCxcbiAgICBzdG9wOiBzdG9wLFxuICAgIGdldFByb3BhZ2F0aW9uUGF0aDogZ2V0UHJvcGFnYXRpb25QYXRoLFxuICAgIGdldE1vdXNlUG9zaXRpb246IGdldE1vdXNlUG9zaXRpb24sXG4gICAgZ2V0V2hlZWxEZWx0YTogZ2V0V2hlZWxEZWx0YSxcbiAgICBpc0V4dGVybmFsVGFyZ2V0OiBpc0V4dGVybmFsVGFyZ2V0LFxuICAgIGFkZExpc3RlbmVyOiBvbixcbiAgICByZW1vdmVMaXN0ZW5lcjogb2ZmXG4gIH07XG5cbiAgLypcbiAgICogQGNsYXNzIFBvc0FuaW1hdGlvblxuICAgKiBAYWthIEwuUG9zQW5pbWF0aW9uXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXG4gICAqIFVzZWQgaW50ZXJuYWxseSBmb3IgcGFubmluZyBhbmltYXRpb25zLCB1dGlsaXppbmcgQ1NTMyBUcmFuc2l0aW9ucyBmb3IgbW9kZXJuIGJyb3dzZXJzIGFuZCBhIHRpbWVyIGZhbGxiYWNrIGZvciBJRTYtOS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIG15UG9zaXRpb25NYXJrZXIgPSBMLm1hcmtlcihbNDguODY0NzE2LCAyLjI5NDY5NF0pLmFkZFRvKG1hcCk7XG4gICAqXG4gICAqIG15UG9zaXRpb25NYXJrZXIub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICogXHR2YXIgcG9zID0gbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChteVBvc2l0aW9uTWFya2VyLmdldExhdExuZygpKTtcbiAgICogXHRwb3MueSAtPSAyNTtcbiAgICogXHR2YXIgZnggPSBuZXcgTC5Qb3NBbmltYXRpb24oKTtcbiAgICpcbiAgICogXHRmeC5vbmNlKCdlbmQnLGZ1bmN0aW9uKCkge1xuICAgKiBcdFx0cG9zLnkgKz0gMjU7XG4gICAqIFx0XHRmeC5ydW4obXlQb3NpdGlvbk1hcmtlci5faWNvbiwgcG9zLCAwLjgpO1xuICAgKiBcdH0pO1xuICAgKlxuICAgKiBcdGZ4LnJ1bihteVBvc2l0aW9uTWFya2VyLl9pY29uLCBwb3MsIDAuMyk7XG4gICAqIH0pO1xuICAgKlxuICAgKiBgYGBcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yIEwuUG9zQW5pbWF0aW9uKClcbiAgICogQ3JlYXRlcyBhIGBQb3NBbmltYXRpb25gIG9iamVjdC5cbiAgICpcbiAgICovXG5cbiAgdmFyIFBvc0FuaW1hdGlvbiA9IEV2ZW50ZWQuZXh0ZW5kKHtcblxuICBcdC8vIEBtZXRob2QgcnVuKGVsOiBIVE1MRWxlbWVudCwgbmV3UG9zOiBQb2ludCwgZHVyYXRpb24/OiBOdW1iZXIsIGVhc2VMaW5lYXJpdHk/OiBOdW1iZXIpXG4gIFx0Ly8gUnVuIGFuIGFuaW1hdGlvbiBvZiBhIGdpdmVuIGVsZW1lbnQgdG8gYSBuZXcgcG9zaXRpb24sIG9wdGlvbmFsbHkgc2V0dGluZ1xuICBcdC8vIGR1cmF0aW9uIGluIHNlY29uZHMgKGAwLjI1YCBieSBkZWZhdWx0KSBhbmQgZWFzaW5nIGxpbmVhcml0eSBmYWN0b3IgKDNyZFxuICBcdC8vIGFyZ3VtZW50IG9mIHRoZSBbY3ViaWMgYmV6aWVyIGN1cnZlXShodHRwczovL2N1YmljLWJlemllci5jb20vIzAsMCwuNSwxKSxcbiAgXHQvLyBgMC41YCBieSBkZWZhdWx0KS5cbiAgXHRydW46IGZ1bmN0aW9uIChlbCwgbmV3UG9zLCBkdXJhdGlvbiwgZWFzZUxpbmVhcml0eSkge1xuICBcdFx0dGhpcy5zdG9wKCk7XG5cbiAgXHRcdHRoaXMuX2VsID0gZWw7XG4gIFx0XHR0aGlzLl9pblByb2dyZXNzID0gdHJ1ZTtcbiAgXHRcdHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb24gfHwgMC4yNTtcbiAgXHRcdHRoaXMuX2Vhc2VPdXRQb3dlciA9IDEgLyBNYXRoLm1heChlYXNlTGluZWFyaXR5IHx8IDAuNSwgMC4yKTtcblxuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSBnZXRQb3NpdGlvbihlbCk7XG4gIFx0XHR0aGlzLl9vZmZzZXQgPSBuZXdQb3Muc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpO1xuICBcdFx0dGhpcy5fc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XG5cbiAgXHRcdC8vIEBldmVudCBzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHNcbiAgXHRcdHRoaXMuZmlyZSgnc3RhcnQnKTtcblxuICBcdFx0dGhpcy5fYW5pbWF0ZSgpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHN0b3AoKVxuICBcdC8vIFN0b3BzIHRoZSBhbmltYXRpb24gKGlmIGN1cnJlbnRseSBydW5uaW5nKS5cbiAgXHRzdG9wOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2luUHJvZ3Jlc3MpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX3N0ZXAodHJ1ZSk7XG4gIFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gYW5pbWF0aW9uIGxvb3BcbiAgXHRcdHRoaXMuX2FuaW1JZCA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fYW5pbWF0ZSwgdGhpcyk7XG4gIFx0XHR0aGlzLl9zdGVwKCk7XG4gIFx0fSxcblxuICBcdF9zdGVwOiBmdW5jdGlvbiAocm91bmQpIHtcbiAgXHRcdHZhciBlbGFwc2VkID0gKCtuZXcgRGF0ZSgpKSAtIHRoaXMuX3N0YXJ0VGltZSxcbiAgXHRcdCAgICBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uICogMTAwMDtcblxuICBcdFx0aWYgKGVsYXBzZWQgPCBkdXJhdGlvbikge1xuICBcdFx0XHR0aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGVsYXBzZWQgLyBkdXJhdGlvbiksIHJvdW5kKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX3J1bkZyYW1lKDEpO1xuICBcdFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcnVuRnJhbWU6IGZ1bmN0aW9uIChwcm9ncmVzcywgcm91bmQpIHtcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9zdGFydFBvcy5hZGQodGhpcy5fb2Zmc2V0Lm11bHRpcGx5QnkocHJvZ3Jlc3MpKTtcbiAgXHRcdGlmIChyb3VuZCkge1xuICBcdFx0XHRwb3MuX3JvdW5kKCk7XG4gIFx0XHR9XG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9lbCwgcG9zKTtcblxuICBcdFx0Ly8gQGV2ZW50IHN0ZXA6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCBjb250aW51b3VzbHkgZHVyaW5nIHRoZSBhbmltYXRpb24uXG4gIFx0XHR0aGlzLmZpcmUoJ3N0ZXAnKTtcbiAgXHR9LFxuXG4gIFx0X2NvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbUlkKTtcblxuICBcdFx0dGhpcy5faW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBcdFx0Ly8gQGV2ZW50IGVuZDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLlxuICBcdFx0dGhpcy5maXJlKCdlbmQnKTtcbiAgXHR9LFxuXG4gIFx0X2Vhc2VPdXQ6IGZ1bmN0aW9uICh0KSB7XG4gIFx0XHRyZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCB0aGlzLl9lYXNlT3V0UG93ZXIpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcclxuICAgKiBAY2xhc3MgTWFwXHJcbiAgICogQGFrYSBMLk1hcFxyXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXHJcbiAgICpcclxuICAgKiBUaGUgY2VudHJhbCBjbGFzcyBvZiB0aGUgQVBJIOKAlCBpdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG1hcCBvbiBhIHBhZ2UgYW5kIG1hbmlwdWxhdGUgaXQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiAvLyBpbml0aWFsaXplIHRoZSBtYXAgb24gdGhlIFwibWFwXCIgZGl2IHdpdGggYSBnaXZlbiBjZW50ZXIgYW5kIHpvb21cclxuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcsIHtcclxuICAgKiBcdGNlbnRlcjogWzUxLjUwNSwgLTAuMDldLFxyXG4gICAqIFx0em9vbTogMTNcclxuICAgKiB9KTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqL1xyXG5cclxuICB2YXIgTWFwID0gRXZlbnRlZC5leHRlbmQoe1xyXG5cclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQHNlY3Rpb24gTWFwIFN0YXRlIE9wdGlvbnNcclxuICBcdFx0Ly8gQG9wdGlvbiBjcnM6IENSUyA9IEwuQ1JTLkVQU0czODU3XHJcbiAgXHRcdC8vIFRoZSBbQ29vcmRpbmF0ZSBSZWZlcmVuY2UgU3lzdGVtXSgjY3JzKSB0byB1c2UuIERvbid0IGNoYW5nZSB0aGlzIGlmIHlvdSdyZSBub3RcclxuICBcdFx0Ly8gc3VyZSB3aGF0IGl0IG1lYW5zLlxyXG4gIFx0XHRjcnM6IEVQU0czODU3LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjZW50ZXI6IExhdExuZyA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBJbml0aWFsIGdlb2dyYXBoaWMgY2VudGVyIG9mIHRoZSBtYXBcclxuICBcdFx0Y2VudGVyOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb206IE51bWJlciA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBJbml0aWFsIG1hcCB6b29tIGxldmVsXHJcbiAgXHRcdHpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWluWm9vbTogTnVtYmVyID0gKlxyXG4gIFx0XHQvLyBNaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC5cclxuICBcdFx0Ly8gSWYgbm90IHNwZWNpZmllZCBhbmQgYXQgbGVhc3Qgb25lIGBHcmlkTGF5ZXJgIG9yIGBUaWxlTGF5ZXJgIGlzIGluIHRoZSBtYXAsXHJcbiAgXHRcdC8vIHRoZSBsb3dlc3Qgb2YgdGhlaXIgYG1pblpvb21gIG9wdGlvbnMgd2lsbCBiZSB1c2VkIGluc3RlYWQuXHJcbiAgXHRcdG1pblpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4Wm9vbTogTnVtYmVyID0gKlxyXG4gIFx0XHQvLyBNYXhpbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC5cclxuICBcdFx0Ly8gSWYgbm90IHNwZWNpZmllZCBhbmQgYXQgbGVhc3Qgb25lIGBHcmlkTGF5ZXJgIG9yIGBUaWxlTGF5ZXJgIGlzIGluIHRoZSBtYXAsXHJcbiAgXHRcdC8vIHRoZSBoaWdoZXN0IG9mIHRoZWlyIGBtYXhab29tYCBvcHRpb25zIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlxyXG4gIFx0XHRtYXhab29tOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxheWVyczogTGF5ZXJbXSA9IFtdXHJcbiAgXHRcdC8vIEFycmF5IG9mIGxheWVycyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcCBpbml0aWFsbHlcclxuICBcdFx0bGF5ZXJzOiBbXSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4Qm91bmRzOiBMYXRMbmdCb3VuZHMgPSBudWxsXHJcbiAgXHRcdC8vIFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgbWFwIHJlc3RyaWN0cyB0aGUgdmlldyB0byB0aGUgZ2l2ZW5cclxuICBcdFx0Ly8gZ2VvZ3JhcGhpY2FsIGJvdW5kcywgYm91bmNpbmcgdGhlIHVzZXIgYmFjayBpZiB0aGUgdXNlciB0cmllcyB0byBwYW5cclxuICBcdFx0Ly8gb3V0c2lkZSB0aGUgdmlldy4gVG8gc2V0IHRoZSByZXN0cmljdGlvbiBkeW5hbWljYWxseSwgdXNlXHJcbiAgXHRcdC8vIFtgc2V0TWF4Qm91bmRzYF0oI21hcC1zZXRtYXhib3VuZHMpIG1ldGhvZC5cclxuICBcdFx0bWF4Qm91bmRzOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJlbmRlcmVyOiBSZW5kZXJlciA9ICpcclxuICBcdFx0Ly8gVGhlIGRlZmF1bHQgbWV0aG9kIGZvciBkcmF3aW5nIHZlY3RvciBsYXllcnMgb24gdGhlIG1hcC4gYEwuU1ZHYFxyXG4gIFx0XHQvLyBvciBgTC5DYW52YXNgIGJ5IGRlZmF1bHQgZGVwZW5kaW5nIG9uIGJyb3dzZXIgc3VwcG9ydC5cclxuICBcdFx0cmVuZGVyZXI6IHVuZGVmaW5lZCxcclxuXHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBBbmltYXRpb24gT3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21BbmltYXRpb246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIG1hcCB6b29tIGFuaW1hdGlvbiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0IGl0J3MgZW5hYmxlZFxyXG4gIFx0XHQvLyBpbiBhbGwgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENTUzMgVHJhbnNpdGlvbnMgZXhjZXB0IEFuZHJvaWQuXHJcbiAgXHRcdHpvb21BbmltYXRpb246IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21BbmltYXRpb25UaHJlc2hvbGQ6IE51bWJlciA9IDRcclxuICBcdFx0Ly8gV29uJ3QgYW5pbWF0ZSB6b29tIGlmIHRoZSB6b29tIGRpZmZlcmVuY2UgZXhjZWVkcyB0aGlzIHZhbHVlLlxyXG4gIFx0XHR6b29tQW5pbWF0aW9uVGhyZXNob2xkOiA0LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBmYWRlQW5pbWF0aW9uOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB0aWxlIGZhZGUgYW5pbWF0aW9uIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQgaXQncyBlbmFibGVkXHJcbiAgXHRcdC8vIGluIGFsbCBicm93c2VycyB0aGF0IHN1cHBvcnQgQ1NTMyBUcmFuc2l0aW9ucyBleGNlcHQgQW5kcm9pZC5cclxuICBcdFx0ZmFkZUFuaW1hdGlvbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWFya2VyWm9vbUFuaW1hdGlvbjogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciBtYXJrZXJzIGFuaW1hdGUgdGhlaXIgem9vbSB3aXRoIHRoZSB6b29tIGFuaW1hdGlvbiwgaWYgZGlzYWJsZWRcclxuICBcdFx0Ly8gdGhleSB3aWxsIGRpc2FwcGVhciBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgYW5pbWF0aW9uLiBCeSBkZWZhdWx0IGl0J3NcclxuICBcdFx0Ly8gZW5hYmxlZCBpbiBhbGwgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENTUzMgVHJhbnNpdGlvbnMgZXhjZXB0IEFuZHJvaWQuXHJcbiAgXHRcdG1hcmtlclpvb21BbmltYXRpb246IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHRyYW5zZm9ybTNETGltaXQ6IE51bWJlciA9IDJeMjNcclxuICBcdFx0Ly8gRGVmaW5lcyB0aGUgbWF4aW11bSBzaXplIG9mIGEgQ1NTIHRyYW5zbGF0aW9uIHRyYW5zZm9ybS4gVGhlIGRlZmF1bHRcclxuICBcdFx0Ly8gdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHVubGVzcyBhIHdlYiBicm93c2VyIHBvc2l0aW9ucyBsYXllcnMgaW5cclxuICBcdFx0Ly8gdGhlIHdyb25nIHBsYWNlIGFmdGVyIGRvaW5nIGEgbGFyZ2UgYHBhbkJ5YC5cclxuICBcdFx0dHJhbnNmb3JtM0RMaW1pdDogODM4ODYwOCwgLy8gUHJlY2lzaW9uIGxpbWl0IG9mIGEgMzItYml0IGZsb2F0XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbVNuYXA6IE51bWJlciA9IDFcclxuICBcdFx0Ly8gRm9yY2VzIHRoZSBtYXAncyB6b29tIGxldmVsIHRvIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIHRoaXMsIHBhcnRpY3VsYXJseVxyXG4gIFx0XHQvLyByaWdodCBhZnRlciBhIFtgZml0Qm91bmRzKClgXSgjbWFwLWZpdGJvdW5kcykgb3IgYSBwaW5jaC16b29tLlxyXG4gIFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgem9vbSBsZXZlbCBzbmFwcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyOyBsb3dlciB2YWx1ZXNcclxuICBcdFx0Ly8gKGUuZy4gYDAuNWAgb3IgYDAuMWApIGFsbG93IGZvciBncmVhdGVyIGdyYW51bGFyaXR5LiBBIHZhbHVlIG9mIGAwYFxyXG4gIFx0XHQvLyBtZWFucyB0aGUgem9vbSBsZXZlbCB3aWxsIG5vdCBiZSBzbmFwcGVkIGFmdGVyIGBmaXRCb3VuZHNgIG9yIGEgcGluY2gtem9vbS5cclxuICBcdFx0em9vbVNuYXA6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21EZWx0YTogTnVtYmVyID0gMVxyXG4gIFx0XHQvLyBDb250cm9scyBob3cgbXVjaCB0aGUgbWFwJ3Mgem9vbSBsZXZlbCB3aWxsIGNoYW5nZSBhZnRlciBhXHJcbiAgXHRcdC8vIFtgem9vbUluKClgXSgjbWFwLXpvb21pbiksIFtgem9vbU91dCgpYF0oI21hcC16b29tb3V0KSwgcHJlc3NpbmcgYCtgXHJcbiAgXHRcdC8vIG9yIGAtYCBvbiB0aGUga2V5Ym9hcmQsIG9yIHVzaW5nIHRoZSBbem9vbSBjb250cm9sc10oI2NvbnRyb2wtem9vbSkuXHJcbiAgXHRcdC8vIFZhbHVlcyBzbWFsbGVyIHRoYW4gYDFgIChlLmcuIGAwLjVgKSBhbGxvdyBmb3IgZ3JlYXRlciBncmFudWxhcml0eS5cclxuICBcdFx0em9vbURlbHRhOiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0cmFja1Jlc2l6ZTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFwIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBicm93c2VyIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIGl0c2VsZi5cclxuICBcdFx0dHJhY2tSZXNpemU6IHRydWVcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGlkLCBvcHRpb25zKSB7IC8vIChIVE1MRWxlbWVudCBvciBTdHJpbmcsIE9iamVjdClcclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHQvLyBNYWtlIHN1cmUgdG8gYXNzaWduIGludGVybmFsIGZsYWdzIGF0IHRoZSBiZWdpbm5pbmcsXHJcbiAgXHRcdC8vIHRvIGF2b2lkIGluY29uc2lzdGVudCBzdGF0ZSBpbiBzb21lIGVkZ2UgY2FzZXMuXHJcbiAgXHRcdHRoaXMuX2hhbmRsZXJzID0gW107XHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IHt9O1xyXG4gIFx0XHR0aGlzLl96b29tQm91bmRMYXllcnMgPSB7fTtcclxuICBcdFx0dGhpcy5fc2l6ZUNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICBcdFx0dGhpcy5faW5pdENvbnRhaW5lcihpZCk7XHJcbiAgXHRcdHRoaXMuX2luaXRMYXlvdXQoKTtcclxuXHJcbiAgXHRcdC8vIGhhY2sgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzE5ODBcclxuICBcdFx0dGhpcy5fb25SZXNpemUgPSBiaW5kKHRoaXMuX29uUmVzaXplLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2luaXRFdmVudHMoKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm1heEJvdW5kcykge1xyXG4gIFx0XHRcdHRoaXMuc2V0TWF4Qm91bmRzKG9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuem9vbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fem9vbSA9IHRoaXMuX2xpbWl0Wm9vbShvcHRpb25zLnpvb20pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5jZW50ZXIgJiYgb3B0aW9ucy56b29tICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aGlzLnNldFZpZXcodG9MYXRMbmcob3B0aW9ucy5jZW50ZXIpLCBvcHRpb25zLnpvb20sIHtyZXNldDogdHJ1ZX0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLmNhbGxJbml0SG9va3MoKTtcclxuXHJcbiAgXHRcdC8vIGRvbid0IGFuaW1hdGUgb24gYnJvd3NlcnMgd2l0aG91dCBoYXJkd2FyZS1hY2NlbGVyYXRlZCB0cmFuc2l0aW9ucyBvciBvbGQgQW5kcm9pZC9PcGVyYVxyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBUUkFOU0lUSU9OICYmIEJyb3dzZXIuYW55M2QgJiYgIUJyb3dzZXIubW9iaWxlT3BlcmEgJiZcclxuICBcdFx0XHRcdHRoaXMub3B0aW9ucy56b29tQW5pbWF0aW9uO1xyXG5cclxuICBcdFx0Ly8gem9vbSB0cmFuc2l0aW9ucyBydW4gd2l0aCB0aGUgc2FtZSBkdXJhdGlvbiBmb3IgYWxsIGxheWVycywgc28gaWYgb25lIG9mIHRyYW5zaXRpb25lbmQgZXZlbnRzXHJcbiAgXHRcdC8vIGhhcHBlbnMgYWZ0ZXIgc3RhcnRpbmcgem9vbSBhbmltYXRpb24gKHByb3BhZ2F0aW5nIHRvIHRoZSBtYXAgcGFuZSksIHdlIGtub3cgdGhhdCBpdCBlbmRlZCBnbG9iYWxseVxyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fY3JlYXRlQW5pbVByb3h5KCk7XHJcbiAgXHRcdFx0b24odGhpcy5fcHJveHksIFRSQU5TSVRJT05fRU5ELCB0aGlzLl9jYXRjaFRyYW5zaXRpb25FbmQsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9hZGRMYXllcnModGhpcy5vcHRpb25zLmxheWVycyk7XHJcbiAgXHR9LFxyXG5cclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBNZXRob2RzIGZvciBtb2RpZnlpbmcgbWFwIHN0YXRlXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRWaWV3KGNlbnRlcjogTGF0TG5nLCB6b29tOiBOdW1iZXIsIG9wdGlvbnM/OiBab29tL3BhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgdmlldyBvZiB0aGUgbWFwIChnZW9ncmFwaGljYWwgY2VudGVyIGFuZCB6b29tKSB3aXRoIHRoZSBnaXZlblxyXG4gIFx0Ly8gYW5pbWF0aW9uIG9wdGlvbnMuXHJcbiAgXHRzZXRWaWV3OiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHR6b29tID0gem9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IHRoaXMuX2xpbWl0Wm9vbSh6b29tKTtcclxuICBcdFx0Y2VudGVyID0gdGhpcy5fbGltaXRDZW50ZXIodG9MYXRMbmcoY2VudGVyKSwgem9vbSwgdGhpcy5vcHRpb25zLm1heEJvdW5kcyk7XHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICBcdFx0dGhpcy5fc3RvcCgpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCAmJiAhb3B0aW9ucy5yZXNldCAmJiBvcHRpb25zICE9PSB0cnVlKSB7XHJcblxyXG4gIFx0XHRcdGlmIChvcHRpb25zLmFuaW1hdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdFx0b3B0aW9ucy56b29tID0gZXh0ZW5kKHthbmltYXRlOiBvcHRpb25zLmFuaW1hdGV9LCBvcHRpb25zLnpvb20pO1xyXG4gIFx0XHRcdFx0b3B0aW9ucy5wYW4gPSBleHRlbmQoe2FuaW1hdGU6IG9wdGlvbnMuYW5pbWF0ZSwgZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb259LCBvcHRpb25zLnBhbik7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHQvLyB0cnkgYW5pbWF0aW5nIHBhbiBvciB6b29tXHJcbiAgXHRcdFx0dmFyIG1vdmVkID0gKHRoaXMuX3pvb20gIT09IHpvb20pID9cclxuICBcdFx0XHRcdHRoaXMuX3RyeUFuaW1hdGVkWm9vbSAmJiB0aGlzLl90cnlBbmltYXRlZFpvb20oY2VudGVyLCB6b29tLCBvcHRpb25zLnpvb20pIDpcclxuICBcdFx0XHRcdHRoaXMuX3RyeUFuaW1hdGVkUGFuKGNlbnRlciwgb3B0aW9ucy5wYW4pO1xyXG5cclxuICBcdFx0XHRpZiAobW92ZWQpIHtcclxuICBcdFx0XHRcdC8vIHByZXZlbnQgcmVzaXplIGhhbmRsZXIgY2FsbCwgdGhlIHZpZXcgd2lsbCByZWZyZXNoIGFmdGVyIGFuaW1hdGlvbiBhbnl3YXlcclxuICBcdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpO1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBhbmltYXRpb24gZGlkbid0IHN0YXJ0LCBqdXN0IHJlc2V0IHRoZSBtYXAgdmlld1xyXG4gIFx0XHR0aGlzLl9yZXNldFZpZXcoY2VudGVyLCB6b29tLCBvcHRpb25zLnBhbiAmJiBvcHRpb25zLnBhbi5ub01vdmVTdGFydCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRab29tKHpvb206IE51bWJlciwgb3B0aW9ucz86IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB6b29tIG9mIHRoZSBtYXAuXHJcbiAgXHRzZXRab29tOiBmdW5jdGlvbiAoem9vbSwgb3B0aW9ucykge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdHRoaXMuX3pvb20gPSB6b29tO1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSwgem9vbSwge3pvb206IG9wdGlvbnN9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB6b29tSW4oZGVsdGE/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBJbmNyZWFzZXMgdGhlIHpvb20gb2YgdGhlIG1hcCBieSBgZGVsdGFgIChbYHpvb21EZWx0YWBdKCNtYXAtem9vbWRlbHRhKSBieSBkZWZhdWx0KS5cclxuICBcdHpvb21JbjogZnVuY3Rpb24gKGRlbHRhLCBvcHRpb25zKSB7XHJcbiAgXHRcdGRlbHRhID0gZGVsdGEgfHwgKEJyb3dzZXIuYW55M2QgPyB0aGlzLm9wdGlvbnMuem9vbURlbHRhIDogMSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLnNldFpvb20odGhpcy5fem9vbSArIGRlbHRhLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB6b29tT3V0KGRlbHRhPzogTnVtYmVyLCBvcHRpb25zPzogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gRGVjcmVhc2VzIHRoZSB6b29tIG9mIHRoZSBtYXAgYnkgYGRlbHRhYCAoW2B6b29tRGVsdGFgXSgjbWFwLXpvb21kZWx0YSkgYnkgZGVmYXVsdCkuXHJcbiAgXHR6b29tT3V0OiBmdW5jdGlvbiAoZGVsdGEsIG9wdGlvbnMpIHtcclxuICBcdFx0ZGVsdGEgPSBkZWx0YSB8fCAoQnJvd3Nlci5hbnkzZCA/IHRoaXMub3B0aW9ucy56b29tRGVsdGEgOiAxKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tIC0gZGVsdGEsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpvb21Bcm91bmQobGF0bG5nOiBMYXRMbmcsIHpvb206IE51bWJlciwgb3B0aW9uczogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gWm9vbXMgdGhlIG1hcCB3aGlsZSBrZWVwaW5nIGEgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBwb2ludCBvbiB0aGUgbWFwXHJcbiAgXHQvLyBzdGF0aW9uYXJ5IChlLmcuIHVzZWQgaW50ZXJuYWxseSBmb3Igc2Nyb2xsIHpvb20gYW5kIGRvdWJsZS1jbGljayB6b29tKS5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRab29tQXJvdW5kKG9mZnNldDogUG9pbnQsIHpvb206IE51bWJlciwgb3B0aW9uczogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gWm9vbXMgdGhlIG1hcCB3aGlsZSBrZWVwaW5nIGEgc3BlY2lmaWVkIHBpeGVsIG9uIHRoZSBtYXAgKHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIpIHN0YXRpb25hcnkuXHJcbiAgXHRzZXRab29tQXJvdW5kOiBmdW5jdGlvbiAobGF0bG5nLCB6b29tLCBvcHRpb25zKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuZ2V0Wm9vbVNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgdmlld0hhbGYgPSB0aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxcclxuICBcdFx0ICAgIGNvbnRhaW5lclBvaW50ID0gbGF0bG5nIGluc3RhbmNlb2YgUG9pbnQgPyBsYXRsbmcgOiB0aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQobGF0bG5nKSxcclxuXHJcbiAgXHRcdCAgICBjZW50ZXJPZmZzZXQgPSBjb250YWluZXJQb2ludC5zdWJ0cmFjdCh2aWV3SGFsZikubXVsdGlwbHlCeSgxIC0gMSAvIHNjYWxlKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xhdExuZyh2aWV3SGFsZi5hZGQoY2VudGVyT2Zmc2V0KSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KG5ld0NlbnRlciwgem9vbSwge3pvb206IG9wdGlvbnN9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldEJvdW5kc0NlbnRlclpvb206IGZ1bmN0aW9uIChib3VuZHMsIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gIFx0XHRib3VuZHMgPSBib3VuZHMuZ2V0Qm91bmRzID8gYm91bmRzLmdldEJvdW5kcygpIDogdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHZhciBwYWRkaW5nVEwgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ1RvcExlZnQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ0JvdHRvbVJpZ2h0IHx8IG9wdGlvbnMucGFkZGluZyB8fCBbMCwgMF0pLFxyXG5cclxuICBcdFx0ICAgIHpvb20gPSB0aGlzLmdldEJvdW5kc1pvb20oYm91bmRzLCBmYWxzZSwgcGFkZGluZ1RMLmFkZChwYWRkaW5nQlIpKTtcclxuXHJcbiAgXHRcdHpvb20gPSAodHlwZW9mIG9wdGlvbnMubWF4Wm9vbSA9PT0gJ251bWJlcicpID8gTWF0aC5taW4ob3B0aW9ucy5tYXhab29tLCB6b29tKSA6IHpvb207XHJcblxyXG4gIFx0XHRpZiAoem9vbSA9PT0gSW5maW5pdHkpIHtcclxuICBcdFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdFx0Y2VudGVyOiBib3VuZHMuZ2V0Q2VudGVyKCksXHJcbiAgXHRcdFx0XHR6b29tOiB6b29tXHJcbiAgXHRcdFx0fTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHBhZGRpbmdPZmZzZXQgPSBwYWRkaW5nQlIuc3VidHJhY3QocGFkZGluZ1RMKS5kaXZpZGVCeSgyKSxcclxuXHJcbiAgXHRcdCAgICBzd1BvaW50ID0gdGhpcy5wcm9qZWN0KGJvdW5kcy5nZXRTb3V0aFdlc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICBuZVBvaW50ID0gdGhpcy5wcm9qZWN0KGJvdW5kcy5nZXROb3J0aEVhc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICBjZW50ZXIgPSB0aGlzLnVucHJvamVjdChzd1BvaW50LmFkZChuZVBvaW50KS5kaXZpZGVCeSgyKS5hZGQocGFkZGluZ09mZnNldCksIHpvb20pO1xyXG5cclxuICBcdFx0cmV0dXJuIHtcclxuICBcdFx0XHRjZW50ZXI6IGNlbnRlcixcclxuICBcdFx0XHR6b29tOiB6b29tXHJcbiAgXHRcdH07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZml0Qm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogZml0Qm91bmRzIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIGEgbWFwIHZpZXcgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB3aXRoIHRoZVxyXG4gIFx0Ly8gbWF4aW11bSB6b29tIGxldmVsIHBvc3NpYmxlLlxyXG4gIFx0Zml0Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKCFib3VuZHMuaXNWYWxpZCgpKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdCb3VuZHMgYXJlIG5vdCB2YWxpZC4nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IHRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20oYm91bmRzLCBvcHRpb25zKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Vmlldyh0YXJnZXQuY2VudGVyLCB0YXJnZXQuem9vbSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZml0V29ybGQob3B0aW9ucz86IGZpdEJvdW5kcyBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyBhIG1hcCB2aWV3IHRoYXQgbW9zdGx5IGNvbnRhaW5zIHRoZSB3aG9sZSB3b3JsZCB3aXRoIHRoZSBtYXhpbXVtXHJcbiAgXHQvLyB6b29tIGxldmVsIHBvc3NpYmxlLlxyXG4gIFx0Zml0V29ybGQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwgLTE4MF0sIFs5MCwgMTgwXV0sIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhblRvKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogUGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBQYW5zIHRoZSBtYXAgdG8gYSBnaXZlbiBjZW50ZXIuXHJcbiAgXHRwYW5UbzogZnVuY3Rpb24gKGNlbnRlciwgb3B0aW9ucykgeyAvLyAoTGF0TG5nKVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KGNlbnRlciwgdGhpcy5fem9vbSwge3Bhbjogb3B0aW9uc30pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhbkJ5KG9mZnNldDogUG9pbnQsIG9wdGlvbnM/OiBQYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCBieSBhIGdpdmVuIG51bWJlciBvZiBwaXhlbHMgKGFuaW1hdGVkKS5cclxuICBcdHBhbkJ5OiBmdW5jdGlvbiAob2Zmc2V0LCBvcHRpb25zKSB7XHJcbiAgXHRcdG9mZnNldCA9IHRvUG9pbnQob2Zmc2V0KS5yb3VuZCgpO1xyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdGlmICghb2Zmc2V0LnggJiYgIW9mZnNldC55KSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbW92ZWVuZCcpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdC8vIElmIHdlIHBhbiB0b28gZmFyLCBDaHJvbWUgZ2V0cyBpc3N1ZXMgd2l0aCB0aWxlc1xyXG4gIFx0XHQvLyBhbmQgbWFrZXMgdGhlbSBkaXNhcHBlYXIgb3IgYXBwZWFyIGluIHRoZSB3cm9uZyBwbGFjZSAoc2xpZ2h0bHkgb2Zmc2V0KSAjMjYwMlxyXG4gIFx0XHRpZiAob3B0aW9ucy5hbmltYXRlICE9PSB0cnVlICYmICF0aGlzLmdldFNpemUoKS5jb250YWlucyhvZmZzZXQpKSB7XHJcbiAgXHRcdFx0dGhpcy5fcmVzZXRWaWV3KHRoaXMudW5wcm9qZWN0KHRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKS5hZGQob2Zmc2V0KSksIHRoaXMuZ2V0Wm9vbSgpKTtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9wYW5BbmltKSB7XHJcbiAgXHRcdFx0dGhpcy5fcGFuQW5pbSA9IG5ldyBQb3NBbmltYXRpb24oKTtcclxuXHJcbiAgXHRcdFx0dGhpcy5fcGFuQW5pbS5vbih7XHJcbiAgXHRcdFx0XHQnc3RlcCc6IHRoaXMuX29uUGFuVHJhbnNpdGlvblN0ZXAsXHJcbiAgXHRcdFx0XHQnZW5kJzogdGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kXHJcbiAgXHRcdFx0fSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGRvbid0IGZpcmUgbW92ZXN0YXJ0IGlmIGFuaW1hdGluZyBpbmVydGlhXHJcbiAgXHRcdGlmICghb3B0aW9ucy5ub01vdmVTdGFydCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGFuaW1hdGUgcGFuIHVubGVzcyBhbmltYXRlOiBmYWxzZSBzcGVjaWZpZWRcclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gZmFsc2UpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC1wYW4tYW5pbScpO1xyXG5cclxuICBcdFx0XHR2YXIgbmV3UG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KG9mZnNldCkucm91bmQoKTtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLCBuZXdQb3MsIG9wdGlvbnMuZHVyYXRpb24gfHwgMC4yNSwgb3B0aW9ucy5lYXNlTGluZWFyaXR5KTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLl9yYXdQYW5CeShvZmZzZXQpO1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScpLmZpcmUoJ21vdmVlbmQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZmx5VG8obGF0bG5nOiBMYXRMbmcsIHpvb20/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tL3BhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgdmlldyBvZiB0aGUgbWFwIChnZW9ncmFwaGljYWwgY2VudGVyIGFuZCB6b29tKSBwZXJmb3JtaW5nIGEgc21vb3RoXHJcbiAgXHQvLyBwYW4tem9vbSBhbmltYXRpb24uXHJcbiAgXHRmbHlUbzogZnVuY3Rpb24gKHRhcmdldENlbnRlciwgdGFyZ2V0Wm9vbSwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8ICFCcm93c2VyLmFueTNkKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMuc2V0Vmlldyh0YXJnZXRDZW50ZXIsIHRhcmdldFpvb20sIG9wdGlvbnMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9zdG9wKCk7XHJcblxyXG4gIFx0XHR2YXIgZnJvbSA9IHRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKSxcclxuICBcdFx0ICAgIHRvID0gdGhpcy5wcm9qZWN0KHRhcmdldENlbnRlciksXHJcbiAgXHRcdCAgICBzaXplID0gdGhpcy5nZXRTaXplKCksXHJcbiAgXHRcdCAgICBzdGFydFpvb20gPSB0aGlzLl96b29tO1xyXG5cclxuICBcdFx0dGFyZ2V0Q2VudGVyID0gdG9MYXRMbmcodGFyZ2V0Q2VudGVyKTtcclxuICBcdFx0dGFyZ2V0Wm9vbSA9IHRhcmdldFpvb20gPT09IHVuZGVmaW5lZCA/IHN0YXJ0Wm9vbSA6IHRhcmdldFpvb207XHJcblxyXG4gIFx0XHR2YXIgdzAgPSBNYXRoLm1heChzaXplLngsIHNpemUueSksXHJcbiAgXHRcdCAgICB3MSA9IHcwICogdGhpcy5nZXRab29tU2NhbGUoc3RhcnRab29tLCB0YXJnZXRab29tKSxcclxuICBcdFx0ICAgIHUxID0gKHRvLmRpc3RhbmNlVG8oZnJvbSkpIHx8IDEsXHJcbiAgXHRcdCAgICByaG8gPSAxLjQyLFxyXG4gIFx0XHQgICAgcmhvMiA9IHJobyAqIHJobztcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIHIoaSkge1xyXG4gIFx0XHRcdHZhciBzMSA9IGkgPyAtMSA6IDEsXHJcbiAgXHRcdFx0ICAgIHMyID0gaSA/IHcxIDogdzAsXHJcbiAgXHRcdFx0ICAgIHQxID0gdzEgKiB3MSAtIHcwICogdzAgKyBzMSAqIHJobzIgKiByaG8yICogdTEgKiB1MSxcclxuICBcdFx0XHQgICAgYjEgPSAyICogczIgKiByaG8yICogdTEsXHJcbiAgXHRcdFx0ICAgIGIgPSB0MSAvIGIxLFxyXG4gIFx0XHRcdCAgICBzcSA9IE1hdGguc3FydChiICogYiArIDEpIC0gYjtcclxuXHJcbiAgXHRcdFx0ICAgIC8vIHdvcmthcm91bmQgZm9yIGZsb2F0aW5nIHBvaW50IHByZWNpc2lvbiBidWcgd2hlbiBzcSA9IDAsIGxvZyA9IC1JbmZpbml0ZSxcclxuICBcdFx0XHQgICAgLy8gdGh1cyB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3AgaW4gZmx5VG9cclxuICBcdFx0XHQgICAgdmFyIGxvZyA9IHNxIDwgMC4wMDAwMDAwMDEgPyAtMTggOiBNYXRoLmxvZyhzcSk7XHJcblxyXG4gIFx0XHRcdHJldHVybiBsb2c7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZ1bmN0aW9uIHNpbmgobikgeyByZXR1cm4gKE1hdGguZXhwKG4pIC0gTWF0aC5leHAoLW4pKSAvIDI7IH1cclxuICBcdFx0ZnVuY3Rpb24gY29zaChuKSB7IHJldHVybiAoTWF0aC5leHAobikgKyBNYXRoLmV4cCgtbikpIC8gMjsgfVxyXG4gIFx0XHRmdW5jdGlvbiB0YW5oKG4pIHsgcmV0dXJuIHNpbmgobikgLyBjb3NoKG4pOyB9XHJcblxyXG4gIFx0XHR2YXIgcjAgPSByKDApO1xyXG5cclxuICBcdFx0ZnVuY3Rpb24gdyhzKSB7IHJldHVybiB3MCAqIChjb3NoKHIwKSAvIGNvc2gocjAgKyByaG8gKiBzKSk7IH1cclxuICBcdFx0ZnVuY3Rpb24gdShzKSB7IHJldHVybiB3MCAqIChjb3NoKHIwKSAqIHRhbmgocjAgKyByaG8gKiBzKSAtIHNpbmgocjApKSAvIHJobzI7IH1cclxuXHJcbiAgXHRcdGZ1bmN0aW9uIGVhc2VPdXQodCkgeyByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCAxLjUpOyB9XHJcblxyXG4gIFx0XHR2YXIgc3RhcnQgPSBEYXRlLm5vdygpLFxyXG4gIFx0XHQgICAgUyA9IChyKDEpIC0gcjApIC8gcmhvLFxyXG4gIFx0XHQgICAgZHVyYXRpb24gPSBvcHRpb25zLmR1cmF0aW9uID8gMTAwMCAqIG9wdGlvbnMuZHVyYXRpb24gOiAxMDAwICogUyAqIDAuODtcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIGZyYW1lKCkge1xyXG4gIFx0XHRcdHZhciB0ID0gKERhdGUubm93KCkgLSBzdGFydCkgLyBkdXJhdGlvbixcclxuICBcdFx0XHQgICAgcyA9IGVhc2VPdXQodCkgKiBTO1xyXG5cclxuICBcdFx0XHRpZiAodCA8PSAxKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9mbHlUb0ZyYW1lID0gcmVxdWVzdEFuaW1GcmFtZShmcmFtZSwgdGhpcyk7XHJcblxyXG4gIFx0XHRcdFx0dGhpcy5fbW92ZShcclxuICBcdFx0XHRcdFx0dGhpcy51bnByb2plY3QoZnJvbS5hZGQodG8uc3VidHJhY3QoZnJvbSkubXVsdGlwbHlCeSh1KHMpIC8gdTEpKSwgc3RhcnRab29tKSxcclxuICBcdFx0XHRcdFx0dGhpcy5nZXRTY2FsZVpvb20odzAgLyB3KHMpLCBzdGFydFpvb20pLFxyXG4gIFx0XHRcdFx0XHR7Zmx5VG86IHRydWV9KTtcclxuXHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdHRoaXNcclxuICBcdFx0XHRcdFx0Ll9tb3ZlKHRhcmdldENlbnRlciwgdGFyZ2V0Wm9vbSlcclxuICBcdFx0XHRcdFx0Ll9tb3ZlRW5kKHRydWUpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbW92ZVN0YXJ0KHRydWUsIG9wdGlvbnMubm9Nb3ZlU3RhcnQpO1xyXG5cclxuICBcdFx0ZnJhbWUuY2FsbCh0aGlzKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZmx5VG9Cb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBmaXRCb3VuZHMgb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHZpZXcgb2YgdGhlIG1hcCB3aXRoIGEgc21vb3RoIGFuaW1hdGlvbiBsaWtlIFtgZmx5VG9gXSgjbWFwLWZseXRvKSxcclxuICBcdC8vIGJ1dCB0YWtlcyBhIGJvdW5kcyBwYXJhbWV0ZXIgbGlrZSBbYGZpdEJvdW5kc2BdKCNtYXAtZml0Ym91bmRzKS5cclxuICBcdGZseVRvQm91bmRzOiBmdW5jdGlvbiAoYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRcdHZhciB0YXJnZXQgPSB0aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKGJvdW5kcywgb3B0aW9ucyk7XHJcbiAgXHRcdHJldHVybiB0aGlzLmZseVRvKHRhcmdldC5jZW50ZXIsIHRhcmdldC56b29tLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRNYXhCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMpOiB0aGlzXHJcbiAgXHQvLyBSZXN0cmljdHMgdGhlIG1hcCB2aWV3IHRvIHRoZSBnaXZlbiBib3VuZHMgKHNlZSB0aGUgW21heEJvdW5kc10oI21hcC1tYXhib3VuZHMpIG9wdGlvbikuXHJcbiAgXHRzZXRNYXhCb3VuZHM6IGZ1bmN0aW9uIChib3VuZHMpIHtcclxuICBcdFx0Ym91bmRzID0gdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLmxpc3RlbnMoJ21vdmVlbmQnLCB0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpKSB7XHJcbiAgXHRcdFx0dGhpcy5vZmYoJ21vdmVlbmQnLCB0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIWJvdW5kcy5pc1ZhbGlkKCkpIHtcclxuICBcdFx0XHR0aGlzLm9wdGlvbnMubWF4Qm91bmRzID0gbnVsbDtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5vcHRpb25zLm1heEJvdW5kcyA9IGJvdW5kcztcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXMub24oJ21vdmVlbmQnLCB0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE1pblpvb20oem9vbTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgbG93ZXIgbGltaXQgZm9yIHRoZSBhdmFpbGFibGUgem9vbSBsZXZlbHMgKHNlZSB0aGUgW21pblpvb21dKCNtYXAtbWluem9vbSkgb3B0aW9uKS5cclxuICBcdHNldE1pblpvb206IGZ1bmN0aW9uICh6b29tKSB7XHJcbiAgXHRcdHZhciBvbGRab29tID0gdGhpcy5vcHRpb25zLm1pblpvb207XHJcbiAgXHRcdHRoaXMub3B0aW9ucy5taW5ab29tID0gem9vbTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9sb2FkZWQgJiYgb2xkWm9vbSAhPT0gem9vbSkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWxldmVsc2NoYW5nZScpO1xyXG5cclxuICBcdFx0XHRpZiAodGhpcy5nZXRab29tKCkgPCB0aGlzLm9wdGlvbnMubWluWm9vbSkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh6b29tKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE1heFpvb20oem9vbTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgdXBwZXIgbGltaXQgZm9yIHRoZSBhdmFpbGFibGUgem9vbSBsZXZlbHMgKHNlZSB0aGUgW21heFpvb21dKCNtYXAtbWF4em9vbSkgb3B0aW9uKS5cclxuICBcdHNldE1heFpvb206IGZ1bmN0aW9uICh6b29tKSB7XHJcbiAgXHRcdHZhciBvbGRab29tID0gdGhpcy5vcHRpb25zLm1heFpvb207XHJcbiAgXHRcdHRoaXMub3B0aW9ucy5tYXhab29tID0gem9vbTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9sb2FkZWQgJiYgb2xkWm9vbSAhPT0gem9vbSkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWxldmVsc2NoYW5nZScpO1xyXG5cclxuICBcdFx0XHRpZiAodGhpcy5nZXRab29tKCkgPiB0aGlzLm9wdGlvbnMubWF4Wm9vbSkge1xyXG4gIFx0XHRcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh6b29tKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhbkluc2lkZUJvdW5kcyhib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IFBhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gUGFucyB0aGUgbWFwIHRvIHRoZSBjbG9zZXN0IHZpZXcgdGhhdCB3b3VsZCBsaWUgaW5zaWRlIHRoZSBnaXZlbiBib3VuZHMgKGlmIGl0J3Mgbm90IGFscmVhZHkpLCBjb250cm9sbGluZyB0aGUgYW5pbWF0aW9uIHVzaW5nIHRoZSBvcHRpb25zIHNwZWNpZmljLCBpZiBhbnkuXHJcbiAgXHRwYW5JbnNpZGVCb3VuZHM6IGZ1bmN0aW9uIChib3VuZHMsIG9wdGlvbnMpIHtcclxuICBcdFx0dGhpcy5fZW5mb3JjaW5nQm91bmRzID0gdHJ1ZTtcclxuICBcdFx0dmFyIGNlbnRlciA9IHRoaXMuZ2V0Q2VudGVyKCksXHJcbiAgXHRcdCAgICBuZXdDZW50ZXIgPSB0aGlzLl9saW1pdENlbnRlcihjZW50ZXIsIHRoaXMuX3pvb20sIHRvTGF0TG5nQm91bmRzKGJvdW5kcykpO1xyXG5cclxuICBcdFx0aWYgKCFjZW50ZXIuZXF1YWxzKG5ld0NlbnRlcikpIHtcclxuICBcdFx0XHR0aGlzLnBhblRvKG5ld0NlbnRlciwgb3B0aW9ucyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IGZhbHNlO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwYW5JbnNpZGUobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBwYWRkaW5nIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBQYW5zIHRoZSBtYXAgdGhlIG1pbmltdW0gYW1vdW50IHRvIG1ha2UgdGhlIGBsYXRsbmdgIHZpc2libGUuIFVzZVxyXG4gIFx0Ly8gcGFkZGluZyBvcHRpb25zIHRvIGZpdCB0aGUgZGlzcGxheSB0byBtb3JlIHJlc3RyaWN0ZWQgYm91bmRzLlxyXG4gIFx0Ly8gSWYgYGxhdGxuZ2AgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIChvcHRpb25hbGx5IHBhZGRlZCkgZGlzcGxheSBib3VuZHMsXHJcbiAgXHQvLyB0aGUgbWFwIHdpbGwgbm90IGJlIHBhbm5lZC5cclxuICBcdHBhbkluc2lkZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdHZhciBwYWRkaW5nVEwgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ1RvcExlZnQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ0JvdHRvbVJpZ2h0IHx8IG9wdGlvbnMucGFkZGluZyB8fCBbMCwgMF0pLFxyXG4gIFx0XHQgICAgcGl4ZWxDZW50ZXIgPSB0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSksXHJcbiAgXHRcdCAgICBwaXhlbFBvaW50ID0gdGhpcy5wcm9qZWN0KGxhdGxuZyksXHJcbiAgXHRcdCAgICBwaXhlbEJvdW5kcyA9IHRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxcclxuICBcdFx0ICAgIHBhZGRlZEJvdW5kcyA9IHRvQm91bmRzKFtwaXhlbEJvdW5kcy5taW4uYWRkKHBhZGRpbmdUTCksIHBpeGVsQm91bmRzLm1heC5zdWJ0cmFjdChwYWRkaW5nQlIpXSksXHJcbiAgXHRcdCAgICBwYWRkZWRTaXplID0gcGFkZGVkQm91bmRzLmdldFNpemUoKTtcclxuXHJcbiAgXHRcdGlmICghcGFkZGVkQm91bmRzLmNvbnRhaW5zKHBpeGVsUG9pbnQpKSB7XHJcbiAgXHRcdFx0dGhpcy5fZW5mb3JjaW5nQm91bmRzID0gdHJ1ZTtcclxuICBcdFx0XHR2YXIgY2VudGVyT2Zmc2V0ID0gcGl4ZWxQb2ludC5zdWJ0cmFjdChwYWRkZWRCb3VuZHMuZ2V0Q2VudGVyKCkpO1xyXG4gIFx0XHRcdHZhciBvZmZzZXQgPSBwYWRkZWRCb3VuZHMuZXh0ZW5kKHBpeGVsUG9pbnQpLmdldFNpemUoKS5zdWJ0cmFjdChwYWRkZWRTaXplKTtcclxuICBcdFx0XHRwaXhlbENlbnRlci54ICs9IGNlbnRlck9mZnNldC54IDwgMCA/IC1vZmZzZXQueCA6IG9mZnNldC54O1xyXG4gIFx0XHRcdHBpeGVsQ2VudGVyLnkgKz0gY2VudGVyT2Zmc2V0LnkgPCAwID8gLW9mZnNldC55IDogb2Zmc2V0Lnk7XHJcbiAgXHRcdFx0dGhpcy5wYW5Ubyh0aGlzLnVucHJvamVjdChwaXhlbENlbnRlciksIG9wdGlvbnMpO1xyXG4gIFx0XHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGludmFsaWRhdGVTaXplKG9wdGlvbnM6IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBDaGVja3MgaWYgdGhlIG1hcCBjb250YWluZXIgc2l6ZSBjaGFuZ2VkIGFuZCB1cGRhdGVzIHRoZSBtYXAgaWYgc28g4oCUXHJcbiAgXHQvLyBjYWxsIGl0IGFmdGVyIHlvdSd2ZSBjaGFuZ2VkIHRoZSBtYXAgc2l6ZSBkeW5hbWljYWxseSwgYWxzbyBhbmltYXRpbmdcclxuICBcdC8vIHBhbiBieSBkZWZhdWx0LiBJZiBgb3B0aW9ucy5wYW5gIGlzIGBmYWxzZWAsIHBhbm5pbmcgd2lsbCBub3Qgb2NjdXIuXHJcbiAgXHQvLyBJZiBgb3B0aW9ucy5kZWJvdW5jZU1vdmVlbmRgIGlzIGB0cnVlYCwgaXQgd2lsbCBkZWxheSBgbW92ZWVuZGAgZXZlbnQgc29cclxuICBcdC8vIHRoYXQgaXQgZG9lc24ndCBoYXBwZW4gb2Z0ZW4gZXZlbiBpZiB0aGUgbWV0aG9kIGlzIGNhbGxlZCBtYW55XHJcbiAgXHQvLyB0aW1lcyBpbiBhIHJvdy5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgaW52YWxpZGF0ZVNpemUoYW5pbWF0ZTogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBzbyDigJRcclxuICBcdC8vIGNhbGwgaXQgYWZ0ZXIgeW91J3ZlIGNoYW5nZWQgdGhlIG1hcCBzaXplIGR5bmFtaWNhbGx5LCBhbHNvIGFuaW1hdGluZ1xyXG4gIFx0Ly8gcGFuIGJ5IGRlZmF1bHQuXHJcbiAgXHRpbnZhbGlkYXRlU2l6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBleHRlbmQoe1xyXG4gIFx0XHRcdGFuaW1hdGU6IGZhbHNlLFxyXG4gIFx0XHRcdHBhbjogdHJ1ZVxyXG4gIFx0XHR9LCBvcHRpb25zID09PSB0cnVlID8ge2FuaW1hdGU6IHRydWV9IDogb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR2YXIgb2xkU2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xyXG4gIFx0XHR0aGlzLl9zaXplQ2hhbmdlZCA9IHRydWU7XHJcbiAgXHRcdHRoaXMuX2xhc3RDZW50ZXIgPSBudWxsO1xyXG5cclxuICBcdFx0dmFyIG5ld1NpemUgPSB0aGlzLmdldFNpemUoKSxcclxuICBcdFx0ICAgIG9sZENlbnRlciA9IG9sZFNpemUuZGl2aWRlQnkoMikucm91bmQoKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IG5ld1NpemUuZGl2aWRlQnkoMikucm91bmQoKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IG9sZENlbnRlci5zdWJ0cmFjdChuZXdDZW50ZXIpO1xyXG5cclxuICBcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgJiYgb3B0aW9ucy5wYW4pIHtcclxuICBcdFx0XHR0aGlzLnBhbkJ5KG9mZnNldCk7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlmIChvcHRpb25zLnBhbikge1xyXG4gIFx0XHRcdFx0dGhpcy5fcmF3UGFuQnkob2Zmc2V0KTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScpO1xyXG5cclxuICBcdFx0XHRpZiAob3B0aW9ucy5kZWJvdW5jZU1vdmVlbmQpIHtcclxuICBcdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpO1xyXG4gIFx0XHRcdFx0dGhpcy5fc2l6ZVRpbWVyID0gc2V0VGltZW91dChiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ21vdmVlbmQnKSwgMjAwKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgcmVzaXplOiBSZXNpemVFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgaXMgcmVzaXplZC5cclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgncmVzaXplJywge1xyXG4gIFx0XHRcdG9sZFNpemU6IG9sZFNpemUsXHJcbiAgXHRcdFx0bmV3U2l6ZTogbmV3U2l6ZVxyXG4gIFx0XHR9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgbW9kaWZ5aW5nIG1hcCBzdGF0ZVxyXG4gIFx0Ly8gQG1ldGhvZCBzdG9wKCk6IHRoaXNcclxuICBcdC8vIFN0b3BzIHRoZSBjdXJyZW50bHkgcnVubmluZyBgcGFuVG9gIG9yIGBmbHlUb2AgYW5pbWF0aW9uLCBpZiBhbnkuXHJcbiAgXHRzdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuc2V0Wm9vbSh0aGlzLl9saW1pdFpvb20odGhpcy5fem9vbSkpO1xyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy56b29tU25hcCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgndmlld3Jlc2V0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuX3N0b3AoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gR2VvbG9jYXRpb24gbWV0aG9kc1xyXG4gIFx0Ly8gQG1ldGhvZCBsb2NhdGUob3B0aW9ucz86IExvY2F0ZSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gVHJpZXMgdG8gbG9jYXRlIHRoZSB1c2VyIHVzaW5nIHRoZSBHZW9sb2NhdGlvbiBBUEksIGZpcmluZyBhIFtgbG9jYXRpb25mb3VuZGBdKCNtYXAtbG9jYXRpb25mb3VuZClcclxuICBcdC8vIGV2ZW50IHdpdGggbG9jYXRpb24gZGF0YSBvbiBzdWNjZXNzIG9yIGEgW2Bsb2NhdGlvbmVycm9yYF0oI21hcC1sb2NhdGlvbmVycm9yKSBldmVudCBvbiBmYWlsdXJlLFxyXG4gIFx0Ly8gYW5kIG9wdGlvbmFsbHkgc2V0cyB0aGUgbWFwIHZpZXcgdG8gdGhlIHVzZXIncyBsb2NhdGlvbiB3aXRoIHJlc3BlY3QgdG9cclxuICBcdC8vIGRldGVjdGlvbiBhY2N1cmFjeSAob3IgdG8gdGhlIHdvcmxkIHZpZXcgaWYgZ2VvbG9jYXRpb24gZmFpbGVkKS5cclxuICBcdC8vIE5vdGUgdGhhdCwgaWYgeW91ciBwYWdlIGRvZXNuJ3QgdXNlIEhUVFBTLCB0aGlzIG1ldGhvZCB3aWxsIGZhaWwgaW5cclxuICBcdC8vIG1vZGVybiBicm93c2VycyAoW0Nocm9tZSA1MCBhbmQgbmV3ZXJdKGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9kZXYvSG9tZS9jaHJvbWl1bS1zZWN1cml0eS9kZXByZWNhdGluZy1wb3dlcmZ1bC1mZWF0dXJlcy1vbi1pbnNlY3VyZS1vcmlnaW5zKSlcclxuICBcdC8vIFNlZSBgTG9jYXRlIG9wdGlvbnNgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgXHRsb2NhdGU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRvcHRpb25zID0gdGhpcy5fbG9jYXRlT3B0aW9ucyA9IGV4dGVuZCh7XHJcbiAgXHRcdFx0dGltZW91dDogMTAwMDAsXHJcbiAgXHRcdFx0d2F0Y2g6IGZhbHNlXHJcbiAgXHRcdFx0Ly8gc2V0VmlldzogZmFsc2VcclxuICBcdFx0XHQvLyBtYXhab29tOiA8TnVtYmVyPlxyXG4gIFx0XHRcdC8vIG1heGltdW1BZ2U6IDBcclxuICBcdFx0XHQvLyBlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlXHJcbiAgXHRcdH0sIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0aWYgKCEoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpKSB7XHJcbiAgXHRcdFx0dGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7XHJcbiAgXHRcdFx0XHRjb2RlOiAwLFxyXG4gIFx0XHRcdFx0bWVzc2FnZTogJ0dlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuJ1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgb25SZXNwb25zZSA9IGJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZSwgdGhpcyksXHJcbiAgXHRcdCAgICBvbkVycm9yID0gYmluZCh0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yLCB0aGlzKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLndhdGNoKSB7XHJcbiAgXHRcdFx0dGhpcy5fbG9jYXRpb25XYXRjaElkID1cclxuICBcdFx0XHQgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKG9uUmVzcG9uc2UsIG9uRXJyb3IsIG9wdGlvbnMpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob25SZXNwb25zZSwgb25FcnJvciwgb3B0aW9ucyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc3RvcExvY2F0ZSgpOiB0aGlzXHJcbiAgXHQvLyBTdG9wcyB3YXRjaGluZyBsb2NhdGlvbiBwcmV2aW91c2x5IGluaXRpYXRlZCBieSBgbWFwLmxvY2F0ZSh7d2F0Y2g6IHRydWV9KWBcclxuICBcdC8vIGFuZCBhYm9ydHMgcmVzZXR0aW5nIHRoZSBtYXAgdmlldyBpZiBtYXAubG9jYXRlIHdhcyBjYWxsZWQgd2l0aFxyXG4gIFx0Ly8gYHtzZXRWaWV3OiB0cnVlfWAuXHJcbiAgXHRzdG9wTG9jYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24gJiYgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gpIHtcclxuICBcdFx0XHRuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICh0aGlzLl9sb2NhdGVPcHRpb25zKSB7XHJcbiAgXHRcdFx0dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3ID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgYyA9IGVycm9yLmNvZGUsXHJcbiAgXHRcdCAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZSB8fFxyXG4gIFx0XHQgICAgICAgICAgICAoYyA9PT0gMSA/ICdwZXJtaXNzaW9uIGRlbmllZCcgOlxyXG4gIFx0XHQgICAgICAgICAgICAoYyA9PT0gMiA/ICdwb3NpdGlvbiB1bmF2YWlsYWJsZScgOiAndGltZW91dCcpKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXcgJiYgIXRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdHRoaXMuZml0V29ybGQoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQHNlY3Rpb24gTG9jYXRpb24gZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBsb2NhdGlvbmVycm9yOiBFcnJvckV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gZ2VvbG9jYXRpb24gKHVzaW5nIHRoZSBbYGxvY2F0ZWBdKCNtYXAtbG9jYXRlKSBtZXRob2QpIGZhaWxlZC5cclxuICBcdFx0dGhpcy5maXJlKCdsb2NhdGlvbmVycm9yJywge1xyXG4gIFx0XHRcdGNvZGU6IGMsXHJcbiAgXHRcdFx0bWVzc2FnZTogJ0dlb2xvY2F0aW9uIGVycm9yOiAnICsgbWVzc2FnZSArICcuJ1xyXG4gIFx0XHR9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2U6IGZ1bmN0aW9uIChwb3MpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgbGF0ID0gcG9zLmNvb3Jkcy5sYXRpdHVkZSxcclxuICBcdFx0ICAgIGxuZyA9IHBvcy5jb29yZHMubG9uZ2l0dWRlLFxyXG4gIFx0XHQgICAgbGF0bG5nID0gbmV3IExhdExuZyhsYXQsIGxuZyksXHJcbiAgXHRcdCAgICBib3VuZHMgPSBsYXRsbmcudG9Cb3VuZHMocG9zLmNvb3Jkcy5hY2N1cmFjeSAqIDIpLFxyXG4gIFx0XHQgICAgb3B0aW9ucyA9IHRoaXMuX2xvY2F0ZU9wdGlvbnM7XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5zZXRWaWV3KSB7XHJcbiAgXHRcdFx0dmFyIHpvb20gPSB0aGlzLmdldEJvdW5kc1pvb20oYm91bmRzKTtcclxuICBcdFx0XHR0aGlzLnNldFZpZXcobGF0bG5nLCBvcHRpb25zLm1heFpvb20gPyBNYXRoLm1pbih6b29tLCBvcHRpb25zLm1heFpvb20pIDogem9vbSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdGxhdGxuZzogbGF0bG5nLFxyXG4gIFx0XHRcdGJvdW5kczogYm91bmRzLFxyXG4gIFx0XHRcdHRpbWVzdGFtcDogcG9zLnRpbWVzdGFtcFxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiBwb3MuY29vcmRzKSB7XHJcbiAgXHRcdFx0aWYgKHR5cGVvZiBwb3MuY29vcmRzW2ldID09PSAnbnVtYmVyJykge1xyXG4gIFx0XHRcdFx0ZGF0YVtpXSA9IHBvcy5jb29yZHNbaV07XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9jYXRpb25mb3VuZDogTG9jYXRpb25FdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGdlb2xvY2F0aW9uICh1c2luZyB0aGUgW2Bsb2NhdGVgXSgjbWFwLWxvY2F0ZSkgbWV0aG9kKVxyXG4gIFx0XHQvLyB3ZW50IHN1Y2Nlc3NmdWxseS5cclxuICBcdFx0dGhpcy5maXJlKCdsb2NhdGlvbmZvdW5kJywgZGF0YSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIFRPRE8gQXBwcm9wcmlhdGUgZG9jcyBzZWN0aW9uP1xyXG4gIFx0Ly8gQHNlY3Rpb24gT3RoZXIgTWV0aG9kc1xyXG4gIFx0Ly8gQG1ldGhvZCBhZGRIYW5kbGVyKG5hbWU6IFN0cmluZywgSGFuZGxlckNsYXNzOiBGdW5jdGlvbik6IHRoaXNcclxuICBcdC8vIEFkZHMgYSBuZXcgYEhhbmRsZXJgIHRvIHRoZSBtYXAsIGdpdmVuIGl0cyBuYW1lIGFuZCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cclxuICBcdGFkZEhhbmRsZXI6IGZ1bmN0aW9uIChuYW1lLCBIYW5kbGVyQ2xhc3MpIHtcclxuICBcdFx0aWYgKCFIYW5kbGVyQ2xhc3MpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdHZhciBoYW5kbGVyID0gdGhpc1tuYW1lXSA9IG5ldyBIYW5kbGVyQ2xhc3ModGhpcyk7XHJcblxyXG4gIFx0XHR0aGlzLl9oYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9uc1tuYW1lXSkge1xyXG4gIFx0XHRcdGhhbmRsZXIuZW5hYmxlKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZSgpOiB0aGlzXHJcbiAgXHQvLyBEZXN0cm95cyB0aGUgbWFwIGFuZCBjbGVhcnMgYWxsIHJlbGF0ZWQgZXZlbnQgbGlzdGVuZXJzLlxyXG4gIFx0cmVtb3ZlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0RXZlbnRzKHRydWUpO1xyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm1heEJvdW5kcykgeyB0aGlzLm9mZignbW92ZWVuZCcsIHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcyk7IH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXJJZCAhPT0gdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNYXAgY29udGFpbmVyIGlzIGJlaW5nIHJldXNlZCBieSBhbm90aGVyIGluc3RhbmNlJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRyeSB7XHJcbiAgXHRcdFx0Ly8gdGhyb3dzIGVycm9yIGluIElFNi04XHJcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZDtcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVySWQ7XHJcbiAgXHRcdH0gY2F0Y2ggKGUpIHtcclxuICBcdFx0XHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRcdFx0dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkID0gdW5kZWZpbmVkO1xyXG4gIFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuICBcdFx0XHR0aGlzLl9jb250YWluZXJJZCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhpcy5zdG9wTG9jYXRlKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3N0b3AoKTtcclxuXHJcbiAgXHRcdHJlbW92ZSh0aGlzLl9tYXBQYW5lKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9jbGVhckNvbnRyb2xQb3MpIHtcclxuICBcdFx0XHR0aGlzLl9jbGVhckNvbnRyb2xQb3MoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAodGhpcy5fcmVzaXplUmVxdWVzdCkge1xyXG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KTtcclxuICBcdFx0XHR0aGlzLl9yZXNpemVSZXF1ZXN0ID0gbnVsbDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fY2xlYXJIYW5kbGVycygpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHVubG9hZDogRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgaXMgZGVzdHJveWVkIHdpdGggW3JlbW92ZV0oI21hcC1yZW1vdmUpIG1ldGhvZC5cclxuICBcdFx0XHR0aGlzLmZpcmUoJ3VubG9hZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgaTtcclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpXS5yZW1vdmUoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRmb3IgKGkgaW4gdGhpcy5fcGFuZXMpIHtcclxuICBcdFx0XHRyZW1vdmUodGhpcy5fcGFuZXNbaV0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMgPSBbXTtcclxuICBcdFx0dGhpcy5fcGFuZXMgPSBbXTtcclxuICBcdFx0ZGVsZXRlIHRoaXMuX21hcFBhbmU7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9yZW5kZXJlcjtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVBhbmUobmFtZTogU3RyaW5nLCBjb250YWluZXI/OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBDcmVhdGVzIGEgbmV3IFttYXAgcGFuZV0oI21hcC1wYW5lKSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeSxcclxuICBcdC8vIHRoZW4gcmV0dXJucyBpdC4gVGhlIHBhbmUgaXMgY3JlYXRlZCBhcyBhIGNoaWxkIG9mIGBjb250YWluZXJgLCBvclxyXG4gIFx0Ly8gYXMgYSBjaGlsZCBvZiB0aGUgbWFpbiBtYXAgcGFuZSBpZiBub3Qgc2V0LlxyXG4gIFx0Y3JlYXRlUGFuZTogZnVuY3Rpb24gKG5hbWUsIGNvbnRhaW5lcikge1xyXG4gIFx0XHR2YXIgY2xhc3NOYW1lID0gJ2xlYWZsZXQtcGFuZScgKyAobmFtZSA/ICcgbGVhZmxldC0nICsgbmFtZS5yZXBsYWNlKCdQYW5lJywgJycpICsgJy1wYW5lJyA6ICcnKSxcclxuICBcdFx0ICAgIHBhbmUgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIgfHwgdGhpcy5fbWFwUGFuZSk7XHJcblxyXG4gIFx0XHRpZiAobmFtZSkge1xyXG4gIFx0XHRcdHRoaXMuX3BhbmVzW25hbWVdID0gcGFuZTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gcGFuZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgR2V0dGluZyBNYXAgU3RhdGVcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcigpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBjZW50ZXIgb2YgdGhlIG1hcCB2aWV3XHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY2hlY2tJZkxvYWRlZCgpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xhc3RDZW50ZXIgJiYgIXRoaXMuX21vdmVkKCkpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5fbGFzdENlbnRlci5jbG9uZSgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFpvb20oKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwgb2YgdGhlIG1hcCB2aWV3XHJcbiAgXHRnZXRab29tOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl96b29tO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBib3VuZHMgdmlzaWJsZSBpbiB0aGUgY3VycmVudCBtYXAgdmlld1xyXG4gIFx0Z2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLmdldFBpeGVsQm91bmRzKCksXHJcbiAgXHRcdCAgICBzdyA9IHRoaXMudW5wcm9qZWN0KGJvdW5kcy5nZXRCb3R0b21MZWZ0KCkpLFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLnVucHJvamVjdChib3VuZHMuZ2V0VG9wUmlnaHQoKSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZ0JvdW5kcyhzdywgbmUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE1pblpvb20oKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcCAoaWYgc2V0IGluIHRoZSBgbWluWm9vbWAgb3B0aW9uIG9mIHRoZSBtYXAgb3Igb2YgYW55IGxheWVycyksIG9yIGAwYCBieSBkZWZhdWx0LlxyXG4gIFx0Z2V0TWluWm9vbTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLm1pblpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX2xheWVyc01pblpvb20gfHwgMCA6IHRoaXMub3B0aW9ucy5taW5ab29tO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE1heFpvb20oKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcCAoaWYgc2V0IGluIHRoZSBgbWF4Wm9vbWAgb3B0aW9uIG9mIHRoZSBtYXAgb3Igb2YgYW55IGxheWVycykuXHJcbiAgXHRnZXRNYXhab29tOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMubWF4Wm9vbSA9PT0gdW5kZWZpbmVkID9cclxuICBcdFx0XHQodGhpcy5fbGF5ZXJzTWF4Wm9vbSA9PT0gdW5kZWZpbmVkID8gSW5maW5pdHkgOiB0aGlzLl9sYXllcnNNYXhab29tKSA6XHJcbiAgXHRcdFx0dGhpcy5vcHRpb25zLm1heFpvb207XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzWm9vbShib3VuZHM6IExhdExuZ0JvdW5kcywgaW5zaWRlPzogQm9vbGVhbiwgcGFkZGluZz86IFBvaW50KTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgb24gd2hpY2ggdGhlIGdpdmVuIGJvdW5kcyBmaXQgdG8gdGhlIG1hcFxyXG4gIFx0Ly8gdmlldyBpbiBpdHMgZW50aXJldHkuIElmIGBpbnNpZGVgIChvcHRpb25hbCkgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIG1ldGhvZFxyXG4gIFx0Ly8gaW5zdGVhZCByZXR1cm5zIHRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgb24gd2hpY2ggdGhlIG1hcCB2aWV3IGZpdHMgaW50b1xyXG4gIFx0Ly8gdGhlIGdpdmVuIGJvdW5kcyBpbiBpdHMgZW50aXJldHkuXHJcbiAgXHRnZXRCb3VuZHNab29tOiBmdW5jdGlvbiAoYm91bmRzLCBpbnNpZGUsIHBhZGRpbmcpIHsgLy8gKExhdExuZ0JvdW5kc1ssIEJvb2xlYW4sIFBvaW50XSkgLT4gTnVtYmVyXHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcbiAgXHRcdHBhZGRpbmcgPSB0b1BvaW50KHBhZGRpbmcgfHwgWzAsIDBdKTtcclxuXHJcbiAgXHRcdHZhciB6b29tID0gdGhpcy5nZXRab29tKCkgfHwgMCxcclxuICBcdFx0ICAgIG1pbiA9IHRoaXMuZ2V0TWluWm9vbSgpLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5nZXRNYXhab29tKCksXHJcbiAgXHRcdCAgICBudyA9IGJvdW5kcy5nZXROb3J0aFdlc3QoKSxcclxuICBcdFx0ICAgIHNlID0gYm91bmRzLmdldFNvdXRoRWFzdCgpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpLnN1YnRyYWN0KHBhZGRpbmcpLFxyXG4gIFx0XHQgICAgYm91bmRzU2l6ZSA9IHRvQm91bmRzKHRoaXMucHJvamVjdChzZSwgem9vbSksIHRoaXMucHJvamVjdChudywgem9vbSkpLmdldFNpemUoKSxcclxuICBcdFx0ICAgIHNuYXAgPSBCcm93c2VyLmFueTNkID8gdGhpcy5vcHRpb25zLnpvb21TbmFwIDogMSxcclxuICBcdFx0ICAgIHNjYWxleCA9IHNpemUueCAvIGJvdW5kc1NpemUueCxcclxuICBcdFx0ICAgIHNjYWxleSA9IHNpemUueSAvIGJvdW5kc1NpemUueSxcclxuICBcdFx0ICAgIHNjYWxlID0gaW5zaWRlID8gTWF0aC5tYXgoc2NhbGV4LCBzY2FsZXkpIDogTWF0aC5taW4oc2NhbGV4LCBzY2FsZXkpO1xyXG5cclxuICBcdFx0em9vbSA9IHRoaXMuZ2V0U2NhbGVab29tKHNjYWxlLCB6b29tKTtcclxuXHJcbiAgXHRcdGlmIChzbmFwKSB7XHJcbiAgXHRcdFx0em9vbSA9IE1hdGgucm91bmQoem9vbSAvIChzbmFwIC8gMTAwKSkgKiAoc25hcCAvIDEwMCk7IC8vIGRvbid0IGp1bXAgaWYgd2l0aGluIDElIG9mIGEgc25hcCBsZXZlbFxyXG4gIFx0XHRcdHpvb20gPSBpbnNpZGUgPyBNYXRoLmNlaWwoem9vbSAvIHNuYXApICogc25hcCA6IE1hdGguZmxvb3Ioem9vbSAvIHNuYXApICogc25hcDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB6b29tKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U2l6ZSgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBtYXAgY29udGFpbmVyIChpbiBwaXhlbHMpLlxyXG4gIFx0Z2V0U2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX3NpemUgfHwgdGhpcy5fc2l6ZUNoYW5nZWQpIHtcclxuICBcdFx0XHR0aGlzLl9zaXplID0gbmV3IFBvaW50KFxyXG4gIFx0XHRcdFx0dGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IDAsXHJcbiAgXHRcdFx0XHR0aGlzLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IHx8IDApO1xyXG5cclxuICBcdFx0XHR0aGlzLl9zaXplQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zaXplLmNsb25lKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UGl4ZWxCb3VuZHMoKTogQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBib3VuZHMgb2YgdGhlIGN1cnJlbnQgbWFwIHZpZXcgaW4gcHJvamVjdGVkIHBpeGVsXHJcbiAgXHQvLyBjb29yZGluYXRlcyAoc29tZXRpbWVzIHVzZWZ1bCBpbiBsYXllciBhbmQgb3ZlcmxheSBpbXBsZW1lbnRhdGlvbnMpLlxyXG4gIFx0Z2V0UGl4ZWxCb3VuZHM6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcclxuICBcdFx0dmFyIHRvcExlZnRQb2ludCA9IHRoaXMuX2dldFRvcExlZnRQb2ludChjZW50ZXIsIHpvb20pO1xyXG4gIFx0XHRyZXR1cm4gbmV3IEJvdW5kcyh0b3BMZWZ0UG9pbnQsIHRvcExlZnRQb2ludC5hZGQodGhpcy5nZXRTaXplKCkpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gVE9ETzogQ2hlY2sgc2VtYW50aWNzIC0gaXNuJ3QgdGhlIHBpeGVsIG9yaWdpbiB0aGUgMCwwIGNvb3JkIHJlbGF0aXZlIHRvXHJcbiAgXHQvLyB0aGUgbWFwIHBhbmU/IFwibGVmdCBwb2ludCBvZiB0aGUgbWFwIGxheWVyXCIgY2FuIGJlIGNvbmZ1c2luZywgc3BlY2lhbGx5XHJcbiAgXHQvLyBzaW5jZSB0aGVyZSBjYW4gYmUgbmVnYXRpdmUgb2Zmc2V0cy5cclxuICBcdC8vIEBtZXRob2QgZ2V0UGl4ZWxPcmlnaW4oKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHByb2plY3RlZCBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgdG9wIGxlZnQgcG9pbnQgb2ZcclxuICBcdC8vIHRoZSBtYXAgbGF5ZXIgKHVzZWZ1bCBpbiBjdXN0b20gbGF5ZXIgYW5kIG92ZXJsYXkgaW1wbGVtZW50YXRpb25zKS5cclxuICBcdGdldFBpeGVsT3JpZ2luOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX2NoZWNrSWZMb2FkZWQoKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuX3BpeGVsT3JpZ2luO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBpeGVsV29ybGRCb3VuZHMoem9vbT86IE51bWJlcik6IEJvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgd29ybGQncyBib3VuZHMgaW4gcGl4ZWwgY29vcmRpbmF0ZXMgZm9yIHpvb20gbGV2ZWwgYHpvb21gLlxyXG4gIFx0Ly8gSWYgYHpvb21gIGlzIG9taXR0ZWQsIHRoZSBtYXAncyBjdXJyZW50IHpvb20gbGV2ZWwgaXMgdXNlZC5cclxuICBcdGdldFBpeGVsV29ybGRCb3VuZHM6IGZ1bmN0aW9uICh6b29tKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuY3JzLmdldFByb2plY3RlZEJvdW5kcyh6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLmdldFpvb20oKSA6IHpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQYW5lKHBhbmU6IFN0cmluZ3xIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgW21hcCBwYW5lXSgjbWFwLXBhbmUpLCBnaXZlbiBpdHMgbmFtZSBvciBpdHMgSFRNTCBlbGVtZW50IChpdHMgaWRlbnRpdHkpLlxyXG4gIFx0Z2V0UGFuZTogZnVuY3Rpb24gKHBhbmUpIHtcclxuICBcdFx0cmV0dXJuIHR5cGVvZiBwYW5lID09PSAnc3RyaW5nJyA/IHRoaXMuX3BhbmVzW3BhbmVdIDogcGFuZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQYW5lcygpOiBPYmplY3RcclxuICBcdC8vIFJldHVybnMgYSBwbGFpbiBvYmplY3QgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIFtwYW5lc10oI21hcC1wYW5lKSBhcyBrZXlzIGFuZFxyXG4gIFx0Ly8gdGhlIHBhbmVzIGFzIHZhbHVlcy5cclxuICBcdGdldFBhbmVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9wYW5lcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDb250YWluZXI6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBIVE1MIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgbWFwLlxyXG4gIFx0Z2V0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgXHR9LFxyXG5cclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBDb252ZXJzaW9uIE1ldGhvZHNcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFpvb21TY2FsZSh0b1pvb206IE51bWJlciwgZnJvbVpvb206IE51bWJlcik6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc2NhbGUgZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gYSBtYXAgdHJhbnNpdGlvbiBmcm9tIHpvb20gbGV2ZWxcclxuICBcdC8vIGBmcm9tWm9vbWAgdG8gYHRvWm9vbWAuIFVzZWQgaW50ZXJuYWxseSB0byBoZWxwIHdpdGggem9vbSBhbmltYXRpb25zLlxyXG4gIFx0Z2V0Wm9vbVNjYWxlOiBmdW5jdGlvbiAodG9ab29tLCBmcm9tWm9vbSkge1xyXG4gIFx0XHQvLyBUT0RPIHJlcGxhY2Ugd2l0aCB1bml2ZXJzYWwgaW1wbGVtZW50YXRpb24gYWZ0ZXIgcmVmYWN0b3JpbmcgcHJvamVjdGlvbnNcclxuICBcdFx0dmFyIGNycyA9IHRoaXMub3B0aW9ucy5jcnM7XHJcbiAgXHRcdGZyb21ab29tID0gZnJvbVpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiBmcm9tWm9vbTtcclxuICBcdFx0cmV0dXJuIGNycy5zY2FsZSh0b1pvb20pIC8gY3JzLnNjYWxlKGZyb21ab29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTY2FsZVpvb20oc2NhbGU6IE51bWJlciwgZnJvbVpvb206IE51bWJlcik6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgem9vbSBsZXZlbCB0aGF0IHRoZSBtYXAgd291bGQgZW5kIHVwIGF0LCBpZiBpdCBpcyBhdCBgZnJvbVpvb21gXHJcbiAgXHQvLyBsZXZlbCBhbmQgZXZlcnl0aGluZyBpcyBzY2FsZWQgYnkgYSBmYWN0b3Igb2YgYHNjYWxlYC4gSW52ZXJzZSBvZlxyXG4gIFx0Ly8gW2BnZXRab29tU2NhbGVgXSgjbWFwLWdldFpvb21TY2FsZSkuXHJcbiAgXHRnZXRTY2FsZVpvb206IGZ1bmN0aW9uIChzY2FsZSwgZnJvbVpvb20pIHtcclxuICBcdFx0dmFyIGNycyA9IHRoaXMub3B0aW9ucy5jcnM7XHJcbiAgXHRcdGZyb21ab29tID0gZnJvbVpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiBmcm9tWm9vbTtcclxuICBcdFx0dmFyIHpvb20gPSBjcnMuem9vbShzY2FsZSAqIGNycy5zY2FsZShmcm9tWm9vbSkpO1xyXG4gIFx0XHRyZXR1cm4gaXNOYU4oem9vbSkgPyBJbmZpbml0eSA6IHpvb207XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcHJvamVjdChsYXRsbmc6IExhdExuZywgem9vbTogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFByb2plY3RzIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUgYExhdExuZ2AgYWNjb3JkaW5nIHRvIHRoZSBwcm9qZWN0aW9uXHJcbiAgXHQvLyBvZiB0aGUgbWFwJ3MgQ1JTLCB0aGVuIHNjYWxlcyBpdCBhY2NvcmRpbmcgdG8gYHpvb21gIGFuZCB0aGUgQ1JTJ3NcclxuICBcdC8vIGBUcmFuc2Zvcm1hdGlvbmAuIFRoZSByZXN1bHQgaXMgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0b1xyXG4gIFx0Ly8gdGhlIENSUyBvcmlnaW4uXHJcbiAgXHRwcm9qZWN0OiBmdW5jdGlvbiAobGF0bG5nLCB6b29tKSB7XHJcbiAgXHRcdHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl96b29tIDogem9vbTtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMubGF0TG5nVG9Qb2ludCh0b0xhdExuZyhsYXRsbmcpLCB6b29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1bnByb2plY3QocG9pbnQ6IFBvaW50LCB6b29tOiBOdW1iZXIpOiBMYXRMbmdcclxuICBcdC8vIEludmVyc2Ugb2YgW2Bwcm9qZWN0YF0oI21hcC1wcm9qZWN0KS5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50LCB6b29tKSB7XHJcbiAgXHRcdHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl96b29tIDogem9vbTtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyh0b1BvaW50KHBvaW50KSwgem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGF5ZXJQb2ludFRvTGF0TG5nKHBvaW50OiBQb2ludCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBbb3JpZ2luIHBpeGVsXSgjbWFwLWdldHBpeGVsb3JpZ2luKSxcclxuICBcdC8vIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUgKGZvciB0aGUgY3VycmVudCB6b29tIGxldmVsKS5cclxuICBcdGxheWVyUG9pbnRUb0xhdExuZzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBwcm9qZWN0ZWRQb2ludCA9IHRvUG9pbnQocG9pbnQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy51bnByb2plY3QocHJvamVjdGVkUG9pbnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGxhdExuZ1RvTGF5ZXJQb2ludChsYXRsbmc6IExhdExuZyk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBpeGVsIGNvb3JkaW5hdGVcclxuICBcdC8vIHJlbGF0aXZlIHRvIHRoZSBbb3JpZ2luIHBpeGVsXSgjbWFwLWdldHBpeGVsb3JpZ2luKS5cclxuICBcdGxhdExuZ1RvTGF5ZXJQb2ludDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHR2YXIgcHJvamVjdGVkUG9pbnQgPSB0aGlzLnByb2plY3QodG9MYXRMbmcobGF0bG5nKSkuX3JvdW5kKCk7XHJcbiAgXHRcdHJldHVybiBwcm9qZWN0ZWRQb2ludC5fc3VidHJhY3QodGhpcy5nZXRQaXhlbE9yaWdpbigpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nKGxhdGxuZzogTGF0TG5nKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ2Agd2hlcmUgYGxhdGAgYW5kIGBsbmdgIGhhcyBiZWVuIHdyYXBwZWQgYWNjb3JkaW5nIHRvIHRoZVxyXG4gIFx0Ly8gbWFwJ3MgQ1JTJ3MgYHdyYXBMYXRgIGFuZCBgd3JhcExuZ2AgcHJvcGVydGllcywgaWYgdGhleSBhcmUgb3V0c2lkZSB0aGVcclxuICBcdC8vIENSUydzIGJvdW5kcy5cclxuICBcdC8vIEJ5IGRlZmF1bHQgdGhpcyBtZWFucyBsb25naXR1ZGUgaXMgd3JhcHBlZCBhcm91bmQgdGhlIGRhdGVsaW5lIHNvIGl0c1xyXG4gIFx0Ly8gdmFsdWUgaXMgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXMuXHJcbiAgXHR3cmFwTGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmcodG9MYXRMbmcobGF0bG5nKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgd3JhcExhdExuZ0JvdW5kcyhib3VuZHM6IExhdExuZ0JvdW5kcyk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyBhIGBMYXRMbmdCb3VuZHNgIHdpdGggdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZ2l2ZW4gb25lLCBlbnN1cmluZyB0aGF0XHJcbiAgXHQvLyBpdHMgY2VudGVyIGlzIHdpdGhpbiB0aGUgQ1JTJ3MgYm91bmRzLlxyXG4gIFx0Ly8gQnkgZGVmYXVsdCB0aGlzIG1lYW5zIHRoZSBjZW50ZXIgbG9uZ2l0dWRlIGlzIHdyYXBwZWQgYXJvdW5kIHRoZSBkYXRlbGluZSBzbyBpdHNcclxuICBcdC8vIHZhbHVlIGlzIGJldHdlZW4gLTE4MCBhbmQgKzE4MCBkZWdyZWVzLCBhbmQgdGhlIG1ham9yaXR5IG9mIHRoZSBib3VuZHNcclxuICBcdC8vIG92ZXJsYXBzIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHR3cmFwTGF0TG5nQm91bmRzOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuY3JzLndyYXBMYXRMbmdCb3VuZHModG9MYXRMbmdCb3VuZHMobGF0bG5nKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzdGFuY2UobGF0bG5nMTogTGF0TG5nLCBsYXRsbmcyOiBMYXRMbmcpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyBhY2NvcmRpbmcgdG9cclxuICBcdC8vIHRoZSBtYXAncyBDUlMuIEJ5IGRlZmF1bHQgdGhpcyBtZWFzdXJlcyBkaXN0YW5jZSBpbiBtZXRlcnMuXHJcbiAgXHRkaXN0YW5jZTogZnVuY3Rpb24gKGxhdGxuZzEsIGxhdGxuZzIpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMuZGlzdGFuY2UodG9MYXRMbmcobGF0bG5nMSksIHRvTGF0TG5nKGxhdGxuZzIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChwb2ludDogUG9pbnQpOiBQb2ludFxyXG4gIFx0Ly8gR2l2ZW4gYSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nXHJcbiAgXHQvLyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBbb3JpZ2luIHBpeGVsXSgjbWFwLWdldHBpeGVsb3JpZ2luKS5cclxuICBcdGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OiBmdW5jdGlvbiAocG9pbnQpIHsgLy8gKFBvaW50KVxyXG4gIFx0XHRyZXR1cm4gdG9Qb2ludChwb2ludCkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXllclBvaW50VG9Db250YWluZXJQb2ludChwb2ludDogUG9pbnQpOiBQb2ludFxyXG4gIFx0Ly8gR2l2ZW4gYSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBbb3JpZ2luIHBpeGVsXSgjbWFwLWdldHBpeGVsb3JpZ2luKSxcclxuICBcdC8vIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgbWFwIGNvbnRhaW5lci5cclxuICBcdGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAocG9pbnQpIHsgLy8gKFBvaW50KVxyXG4gIFx0XHRyZXR1cm4gdG9Qb2ludChwb2ludCkuYWRkKHRoaXMuX2dldE1hcFBhbmVQb3MoKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbmVyUG9pbnRUb0xhdExuZyhwb2ludDogUG9pbnQpOiBMYXRMbmdcclxuICBcdC8vIEdpdmVuIGEgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgbWFwIGNvbnRhaW5lciwgcmV0dXJuc1xyXG4gIFx0Ly8gdGhlIGNvcnJlc3BvbmRpbmcgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUgKGZvciB0aGUgY3VycmVudCB6b29tIGxldmVsKS5cclxuICBcdGNvbnRhaW5lclBvaW50VG9MYXRMbmc6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHR2YXIgbGF5ZXJQb2ludCA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodG9Qb2ludChwb2ludCkpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcobGF5ZXJQb2ludCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGF0TG5nVG9Db250YWluZXJQb2ludChsYXRsbmc6IExhdExuZyk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBpeGVsIGNvb3JkaW5hdGVcclxuICBcdC8vIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLlxyXG4gIFx0bGF0TG5nVG9Db250YWluZXJQb2ludDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0aGlzLmxhdExuZ1RvTGF5ZXJQb2ludCh0b0xhdExuZyhsYXRsbmcpKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZXY6IE1vdXNlRXZlbnQpOiBQb2ludFxyXG4gIFx0Ly8gR2l2ZW4gYSBNb3VzZUV2ZW50IG9iamVjdCwgcmV0dXJucyB0aGUgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGVcclxuICBcdC8vIG1hcCBjb250YWluZXIgd2hlcmUgdGhlIGV2ZW50IHRvb2sgcGxhY2UuXHJcbiAgXHRtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0cmV0dXJuIGdldE1vdXNlUG9zaXRpb24oZSwgdGhpcy5fY29udGFpbmVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtb3VzZUV2ZW50VG9MYXllclBvaW50KGV2OiBNb3VzZUV2ZW50KTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgTW91c2VFdmVudCBvYmplY3QsIHJldHVybnMgdGhlIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG9cclxuICBcdC8vIHRoZSBbb3JpZ2luIHBpeGVsXSgjbWFwLWdldHBpeGVsb3JpZ2luKSB3aGVyZSB0aGUgZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0xheWVyUG9pbnQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG1vdXNlRXZlbnRUb0xhdExuZyhldjogTW91c2VFdmVudCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBNb3VzZUV2ZW50IG9iamVjdCwgcmV0dXJucyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSB3aGVyZSB0aGVcclxuICBcdC8vIGV2ZW50IHRvb2sgcGxhY2UuXHJcbiAgXHRtb3VzZUV2ZW50VG9MYXRMbmc6IGZ1bmN0aW9uIChlKSB7IC8vIChNb3VzZUV2ZW50KVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpKTtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIG1hcCBpbml0aWFsaXphdGlvbiBtZXRob2RzXHJcblxyXG4gIFx0X2luaXRDb250YWluZXI6IGZ1bmN0aW9uIChpZCkge1xyXG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZ2V0KGlkKTtcclxuXHJcbiAgXHRcdGlmICghY29udGFpbmVyKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNYXAgY29udGFpbmVyIG5vdCBmb3VuZC4nKTtcclxuICBcdFx0fSBlbHNlIGlmIChjb250YWluZXIuX2xlYWZsZXRfaWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ01hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0b24oY29udGFpbmVyLCAnc2Nyb2xsJywgdGhpcy5fb25TY3JvbGwsIHRoaXMpO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXJJZCA9IHN0YW1wKGNvbnRhaW5lcik7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0TGF5b3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XHJcblxyXG4gIFx0XHR0aGlzLl9mYWRlQW5pbWF0ZWQgPSB0aGlzLm9wdGlvbnMuZmFkZUFuaW1hdGlvbiAmJiBCcm93c2VyLmFueTNkO1xyXG5cclxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC1jb250YWluZXInICtcclxuICBcdFx0XHQoQnJvd3Nlci50b3VjaCA/ICcgbGVhZmxldC10b3VjaCcgOiAnJykgK1xyXG4gIFx0XHRcdChCcm93c2VyLnJldGluYSA/ICcgbGVhZmxldC1yZXRpbmEnIDogJycpICtcclxuICBcdFx0XHQoQnJvd3Nlci5pZWx0OSA/ICcgbGVhZmxldC1vbGRpZScgOiAnJykgK1xyXG4gIFx0XHRcdChCcm93c2VyLnNhZmFyaSA/ICcgbGVhZmxldC1zYWZhcmknIDogJycpICtcclxuICBcdFx0XHQodGhpcy5fZmFkZUFuaW1hdGVkID8gJyBsZWFmbGV0LWZhZGUtYW5pbScgOiAnJykpO1xyXG5cclxuICBcdFx0dmFyIHBvc2l0aW9uID0gZ2V0U3R5bGUoY29udGFpbmVyLCAncG9zaXRpb24nKTtcclxuXHJcbiAgXHRcdGlmIChwb3NpdGlvbiAhPT0gJ2Fic29sdXRlJyAmJiBwb3NpdGlvbiAhPT0gJ3JlbGF0aXZlJyAmJiBwb3NpdGlvbiAhPT0gJ2ZpeGVkJyAmJiBwb3NpdGlvbiAhPT0gJ3N0aWNreScpIHtcclxuICBcdFx0XHRjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0UGFuZXMoKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbml0Q29udHJvbFBvcykge1xyXG4gIFx0XHRcdHRoaXMuX2luaXRDb250cm9sUG9zKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRQYW5lczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcGFuZXMgPSB0aGlzLl9wYW5lcyA9IHt9O1xyXG4gIFx0XHR0aGlzLl9wYW5lUmVuZGVyZXJzID0ge307XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvblxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBQYW5lcyBhcmUgRE9NIGVsZW1lbnRzIHVzZWQgdG8gY29udHJvbCB0aGUgb3JkZXJpbmcgb2YgbGF5ZXJzIG9uIHRoZSBtYXAuIFlvdVxyXG4gIFx0XHQvLyBjYW4gYWNjZXNzIHBhbmVzIHdpdGggW2BtYXAuZ2V0UGFuZWBdKCNtYXAtZ2V0cGFuZSkgb3JcclxuICBcdFx0Ly8gW2BtYXAuZ2V0UGFuZXNgXSgjbWFwLWdldHBhbmVzKSBtZXRob2RzLiBOZXcgcGFuZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGVcclxuICBcdFx0Ly8gW2BtYXAuY3JlYXRlUGFuZWBdKCNtYXAtY3JlYXRlcGFuZSkgbWV0aG9kLlxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBFdmVyeSBtYXAgaGFzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBwYW5lcyB0aGF0IGRpZmZlciBvbmx5IGluIHpJbmRleC5cclxuICBcdFx0Ly9cclxuICBcdFx0Ly8gQHBhbmUgbWFwUGFuZTogSFRNTEVsZW1lbnQgPSAnYXV0bydcclxuICBcdFx0Ly8gUGFuZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBtYXAgcGFuZXNcclxuXHJcbiAgXHRcdHRoaXMuX21hcFBhbmUgPSB0aGlzLmNyZWF0ZVBhbmUoJ21hcFBhbmUnLCB0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLCBuZXcgUG9pbnQoMCwgMCkpO1xyXG5cclxuICBcdFx0Ly8gQHBhbmUgdGlsZVBhbmU6IEhUTUxFbGVtZW50ID0gMjAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIGBHcmlkTGF5ZXJgcyBhbmQgYFRpbGVMYXllcmBzXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgndGlsZVBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgb3ZlcmxheVBhbmU6IEhUTUxFbGVtZW50ID0gNDAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIHZlY3RvcnMgKGBQYXRoYHMsIGxpa2UgYFBvbHlsaW5lYHMgYW5kIGBQb2x5Z29uYHMpLCBgSW1hZ2VPdmVybGF5YHMgYW5kIGBWaWRlb092ZXJsYXlgc1xyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ292ZXJsYXlQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHNoYWRvd1BhbmU6IEhUTUxFbGVtZW50ID0gNTAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIG92ZXJsYXkgc2hhZG93cyAoZS5nLiBgTWFya2VyYCBzaGFkb3dzKVxyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ3NoYWRvd1BhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgbWFya2VyUGFuZTogSFRNTEVsZW1lbnQgPSA2MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYEljb25gcyBvZiBgTWFya2VyYHNcclxuICBcdFx0dGhpcy5jcmVhdGVQYW5lKCdtYXJrZXJQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHRvb2x0aXBQYW5lOiBIVE1MRWxlbWVudCA9IDY1MFxyXG4gIFx0XHQvLyBQYW5lIGZvciBgVG9vbHRpcGBzLlxyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ3Rvb2x0aXBQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHBvcHVwUGFuZTogSFRNTEVsZW1lbnQgPSA3MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYFBvcHVwYHMuXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgncG9wdXBQYW5lJyk7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uKSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3MocGFuZXMubWFya2VyUGFuZSwgJ2xlYWZsZXQtem9vbS1oaWRlJyk7XHJcbiAgXHRcdFx0YWRkQ2xhc3MocGFuZXMuc2hhZG93UGFuZSwgJ2xlYWZsZXQtem9vbS1oaWRlJyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIHByaXZhdGUgbWV0aG9kcyB0aGF0IG1vZGlmeSBtYXAgc3RhdGVcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xyXG4gIFx0X3Jlc2V0VmlldzogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgbm9Nb3ZlU3RhcnQpIHtcclxuICBcdFx0c2V0UG9zaXRpb24odGhpcy5fbWFwUGFuZSwgbmV3IFBvaW50KDAsIDApKTtcclxuXHJcbiAgXHRcdHZhciBsb2FkaW5nID0gIXRoaXMuX2xvYWRlZDtcclxuICBcdFx0dGhpcy5fbG9hZGVkID0gdHJ1ZTtcclxuICBcdFx0em9vbSA9IHRoaXMuX2xpbWl0Wm9vbSh6b29tKTtcclxuXHJcbiAgXHRcdHRoaXMuZmlyZSgndmlld3ByZXJlc2V0Jyk7XHJcblxyXG4gIFx0XHR2YXIgem9vbUNoYW5nZWQgPSB0aGlzLl96b29tICE9PSB6b29tO1xyXG4gIFx0XHR0aGlzXHJcbiAgXHRcdFx0Ll9tb3ZlU3RhcnQoem9vbUNoYW5nZWQsIG5vTW92ZVN0YXJ0KVxyXG4gIFx0XHRcdC5fbW92ZShjZW50ZXIsIHpvb20pXHJcbiAgXHRcdFx0Ll9tb3ZlRW5kKHpvb21DaGFuZ2VkKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCB2aWV3cmVzZXQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBuZWVkcyB0byByZWRyYXcgaXRzIGNvbnRlbnQgKHRoaXMgdXN1YWxseSBoYXBwZW5zXHJcbiAgXHRcdC8vIG9uIG1hcCB6b29tIG9yIGxvYWQpLiBWZXJ5IHVzZWZ1bCBmb3IgY3JlYXRpbmcgY3VzdG9tIG92ZXJsYXlzLlxyXG4gIFx0XHR0aGlzLmZpcmUoJ3ZpZXdyZXNldCcpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGxvYWQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBpcyBpbml0aWFsaXplZCAod2hlbiBpdHMgY2VudGVyIGFuZCB6b29tIGFyZSBzZXRcclxuICBcdFx0Ly8gZm9yIHRoZSBmaXJzdCB0aW1lKS5cclxuICBcdFx0aWYgKGxvYWRpbmcpIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ2xvYWQnKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfbW92ZVN0YXJ0OiBmdW5jdGlvbiAoem9vbUNoYW5nZWQsIG5vTW92ZVN0YXJ0KSB7XHJcbiAgXHRcdC8vIEBldmVudCB6b29tc3RhcnQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCB6b29tIGlzIGFib3V0IHRvIGNoYW5nZSAoZS5nLiBiZWZvcmUgem9vbSBhbmltYXRpb24pLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZXN0YXJ0OiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB2aWV3IG9mIHRoZSBtYXAgc3RhcnRzIGNoYW5naW5nIChlLmcuIHVzZXIgc3RhcnRzIGRyYWdnaW5nIHRoZSBtYXApLlxyXG4gIFx0XHRpZiAoem9vbUNoYW5nZWQpIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb21zdGFydCcpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICghbm9Nb3ZlU3RhcnQpIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ21vdmVzdGFydCcpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbW92ZTogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgZGF0YSwgc3VwcmVzc0V2ZW50KSB7XHJcbiAgXHRcdGlmICh6b29tID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR6b29tID0gdGhpcy5fem9vbTtcclxuICBcdFx0fVxyXG4gIFx0XHR2YXIgem9vbUNoYW5nZWQgPSB0aGlzLl96b29tICE9PSB6b29tO1xyXG5cclxuICBcdFx0dGhpcy5fem9vbSA9IHpvb207XHJcbiAgXHRcdHRoaXMuX2xhc3RDZW50ZXIgPSBjZW50ZXI7XHJcbiAgXHRcdHRoaXMuX3BpeGVsT3JpZ2luID0gdGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyKTtcclxuXHJcbiAgXHRcdGlmICghc3VwcmVzc0V2ZW50KSB7XHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHpvb206IEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYW55IGNoYW5nZSBpbiB6b29tIGxldmVsLFxyXG4gIFx0XHRcdC8vIGluY2x1ZGluZyB6b29tIGFuZCBmbHkgYW5pbWF0aW9ucy5cclxuICBcdFx0XHRpZiAoem9vbUNoYW5nZWQgfHwgKGRhdGEgJiYgZGF0YS5waW5jaCkpIHtcdC8vIEFsd2F5cyBmaXJlICd6b29tJyBpZiBwaW5jaGluZyBiZWNhdXNlICMzNTMwXHJcbiAgXHRcdFx0XHR0aGlzLmZpcmUoJ3pvb20nLCBkYXRhKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdC8vIEBldmVudCBtb3ZlOiBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFueSBtb3ZlbWVudCBvZiB0aGUgbWFwLFxyXG4gIFx0XHRcdC8vIGluY2x1ZGluZyBwYW4gYW5kIGZseSBhbmltYXRpb25zLlxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScsIGRhdGEpO1xyXG4gIFx0XHR9IGVsc2UgaWYgKGRhdGEgJiYgZGF0YS5waW5jaCkge1x0Ly8gQWx3YXlzIGZpcmUgJ3pvb20nIGlmIHBpbmNoaW5nIGJlY2F1c2UgIzM1MzBcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb20nLCBkYXRhKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X21vdmVFbmQ6IGZ1bmN0aW9uICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHQvLyBAZXZlbnQgem9vbWVuZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIHpvb20gY2hhbmdlZCwgYWZ0ZXIgYW55IGFuaW1hdGlvbnMuXHJcbiAgXHRcdGlmICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWVuZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZWVuZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgY2VudGVyIG9mIHRoZSBtYXAgc3RvcHMgY2hhbmdpbmdcclxuICBcdFx0Ly8gKGUuZy4gdXNlciBzdG9wcGVkIGRyYWdnaW5nIHRoZSBtYXAgb3IgYWZ0ZXIgbm9uLWNlbnRlcmVkIHpvb20pLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9mbHlUb0ZyYW1lKTtcclxuICBcdFx0aWYgKHRoaXMuX3BhbkFuaW0pIHtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLnN0b3AoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3Jhd1BhbkJ5OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX21hcFBhbmUsIHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdChvZmZzZXQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFpvb21TcGFuOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmdldE1heFpvb20oKSAtIHRoaXMuZ2V0TWluWm9vbSgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcGFuSW5zaWRlTWF4Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZW5mb3JjaW5nQm91bmRzKSB7XHJcbiAgXHRcdFx0dGhpcy5wYW5JbnNpZGVCb3VuZHModGhpcy5vcHRpb25zLm1heEJvdW5kcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2NoZWNrSWZMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NldCBtYXAgY2VudGVyIGFuZCB6b29tIGZpcnN0LicpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIERPTSBldmVudCBoYW5kbGluZ1xyXG5cclxuICBcdC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIGV2ZW50c1xyXG4gIFx0X2luaXRFdmVudHM6IGZ1bmN0aW9uIChyZW1vdmUpIHtcclxuICBcdFx0dGhpcy5fdGFyZ2V0cyA9IHt9O1xyXG4gIFx0XHR0aGlzLl90YXJnZXRzW3N0YW1wKHRoaXMuX2NvbnRhaW5lcildID0gdGhpcztcclxuXHJcbiAgXHRcdHZhciBvbk9mZiA9IHJlbW92ZSA/IG9mZiA6IG9uO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGNsaWNrOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIChvciB0YXBzKSB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgZGJsY2xpY2s6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIChvciBkb3VibGUtdGFwcykgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IG1vdXNlZG93bjogTW91c2VFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHB1c2hlcyB0aGUgbW91c2UgYnV0dG9uIG9uIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZXVwOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXMgdGhlIG1vdXNlIGJ1dHRvbiBvbiB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2VvdmVyOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2VvdXQ6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZW1vdmU6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hpbGUgdGhlIG1vdXNlIG1vdmVzIG92ZXIgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IGNvbnRleHRtZW51OiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHVzaGVzIHRoZSByaWdodCBtb3VzZSBidXR0b24gb24gdGhlIG1hcCwgcHJldmVudHNcclxuICBcdFx0Ly8gZGVmYXVsdCBicm93c2VyIGNvbnRleHQgbWVudSBmcm9tIHNob3dpbmcgaWYgdGhlcmUgYXJlIGxpc3RlbmVycyBvblxyXG4gIFx0XHQvLyB0aGlzIGV2ZW50LiBBbHNvIGZpcmVkIG9uIG1vYmlsZSB3aGVuIHRoZSB1c2VyIGhvbGRzIGEgc2luZ2xlIHRvdWNoXHJcbiAgXHRcdC8vIGZvciBhIHNlY29uZCAoYWxzbyBjYWxsZWQgbG9uZyBwcmVzcykuXHJcbiAgXHRcdC8vIEBldmVudCBrZXlwcmVzczogS2V5Ym9hcmRFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgYSBrZXkgZnJvbSB0aGUga2V5Ym9hcmQgdGhhdCBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSB3aGlsZSB0aGUgbWFwIGlzIGZvY3VzZWQuXHJcbiAgXHRcdC8vIEBldmVudCBrZXlkb3duOiBLZXlib2FyZEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGtleSBmcm9tIHRoZSBrZXlib2FyZCB3aGlsZSB0aGUgbWFwIGlzIGZvY3VzZWQuIFVubGlrZSB0aGUgYGtleXByZXNzYCBldmVudCxcclxuICBcdFx0Ly8gdGhlIGBrZXlkb3duYCBldmVudCBpcyBmaXJlZCBmb3Iga2V5cyB0aGF0IHByb2R1Y2UgYSBjaGFyYWN0ZXIgdmFsdWUgYW5kIGZvciBrZXlzXHJcbiAgXHRcdC8vIHRoYXQgZG8gbm90IHByb2R1Y2UgYSBjaGFyYWN0ZXIgdmFsdWUuXHJcbiAgXHRcdC8vIEBldmVudCBrZXl1cDogS2V5Ym9hcmRFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIGEga2V5IGZyb20gdGhlIGtleWJvYXJkIHdoaWxlIHRoZSBtYXAgaXMgZm9jdXNlZC5cclxuICBcdFx0b25PZmYodGhpcy5fY29udGFpbmVyLCAnY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgJyArXHJcbiAgXHRcdFx0J21vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUga2V5cHJlc3Mga2V5ZG93biBrZXl1cCcsIHRoaXMuX2hhbmRsZURPTUV2ZW50LCB0aGlzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUpIHtcclxuICBcdFx0XHRvbk9mZih3aW5kb3csICdyZXNpemUnLCB0aGlzLl9vblJlc2l6ZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChCcm93c2VyLmFueTNkICYmIHRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0KSB7XHJcbiAgXHRcdFx0KHJlbW92ZSA/IHRoaXMub2ZmIDogdGhpcy5vbikuY2FsbCh0aGlzLCAnbW92ZWVuZCcsIHRoaXMuX29uTW92ZUVuZCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X29uUmVzaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KTtcclxuICBcdFx0dGhpcy5fcmVzaXplUmVxdWVzdCA9IHJlcXVlc3RBbmltRnJhbWUoXHJcbiAgXHRcdCAgICAgICAgZnVuY3Rpb24gKCkgeyB0aGlzLmludmFsaWRhdGVTaXplKHtkZWJvdW5jZU1vdmVlbmQ6IHRydWV9KTsgfSwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblNjcm9sbDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2Nyb2xsVG9wICA9IDA7XHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zY3JvbGxMZWZ0ID0gMDtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uTW92ZUVuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpO1xyXG4gIFx0XHRpZiAoTWF0aC5tYXgoTWF0aC5hYnMocG9zLngpLCBNYXRoLmFicyhwb3MueSkpID49IHRoaXMub3B0aW9ucy50cmFuc2Zvcm0zRExpbWl0KSB7XHJcbiAgXHRcdFx0Ly8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMzg3MyBidXQgV2Via2l0IGFsc28gaGF2ZVxyXG4gIFx0XHRcdC8vIGEgcGl4ZWwgb2Zmc2V0IG9uIHZlcnkgaGlnaCB2YWx1ZXMsIHNlZTogaHR0cHM6Ly9qc2ZpZGRsZS5uZXQvZGc2cjVoaGIvXHJcbiAgXHRcdFx0dGhpcy5fcmVzZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksIHRoaXMuZ2V0Wm9vbSgpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfZmluZEV2ZW50VGFyZ2V0czogZnVuY3Rpb24gKGUsIHR5cGUpIHtcclxuICBcdFx0dmFyIHRhcmdldHMgPSBbXSxcclxuICBcdFx0ICAgIHRhcmdldCxcclxuICBcdFx0ICAgIGlzSG92ZXIgPSB0eXBlID09PSAnbW91c2VvdXQnIHx8IHR5cGUgPT09ICdtb3VzZW92ZXInLFxyXG4gIFx0XHQgICAgc3JjID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50LFxyXG4gIFx0XHQgICAgZHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgXHRcdHdoaWxlIChzcmMpIHtcclxuICBcdFx0XHR0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3N0YW1wKHNyYyldO1xyXG4gIFx0XHRcdGlmICh0YXJnZXQgJiYgKHR5cGUgPT09ICdjbGljaycgfHwgdHlwZSA9PT0gJ3ByZWNsaWNrJykgJiYgdGhpcy5fZHJhZ2dhYmxlTW92ZWQodGFyZ2V0KSkge1xyXG4gIFx0XHRcdFx0Ly8gUHJldmVudCBmaXJpbmcgY2xpY2sgYWZ0ZXIgeW91IGp1c3QgZHJhZ2dlZCBhbiBvYmplY3QuXHJcbiAgXHRcdFx0XHRkcmFnZ2luZyA9IHRydWU7XHJcbiAgXHRcdFx0XHRicmVhaztcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0aWYgKHRhcmdldCAmJiB0YXJnZXQubGlzdGVucyh0eXBlLCB0cnVlKSkge1xyXG4gIFx0XHRcdFx0aWYgKGlzSG92ZXIgJiYgIWlzRXh0ZXJuYWxUYXJnZXQoc3JjLCBlKSkgeyBicmVhazsgfVxyXG4gIFx0XHRcdFx0dGFyZ2V0cy5wdXNoKHRhcmdldCk7XHJcbiAgXHRcdFx0XHRpZiAoaXNIb3ZlcikgeyBicmVhazsgfVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRpZiAoc3JjID09PSB0aGlzLl9jb250YWluZXIpIHsgYnJlYWs7IH1cclxuICBcdFx0XHRzcmMgPSBzcmMucGFyZW50Tm9kZTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoIXRhcmdldHMubGVuZ3RoICYmICFkcmFnZ2luZyAmJiAhaXNIb3ZlciAmJiB0aGlzLmxpc3RlbnModHlwZSwgdHJ1ZSkpIHtcclxuICBcdFx0XHR0YXJnZXRzID0gW3RoaXNdO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0YXJnZXRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaXNDbGlja0Rpc2FibGVkOiBmdW5jdGlvbiAoZWwpIHtcclxuICBcdFx0d2hpbGUgKGVsICYmIGVsICE9PSB0aGlzLl9jb250YWluZXIpIHtcclxuICBcdFx0XHRpZiAoZWxbJ19sZWFmbGV0X2Rpc2FibGVfY2xpY2snXSkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gIFx0XHRcdGVsID0gZWwucGFyZW50Tm9kZTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfaGFuZGxlRE9NRXZlbnQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHZhciBlbCA9IChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpO1xyXG4gIFx0XHRpZiAoIXRoaXMuX2xvYWRlZCB8fCBlbFsnX2xlYWZsZXRfZGlzYWJsZV9ldmVudHMnXSB8fCBlLnR5cGUgPT09ICdjbGljaycgJiYgdGhpcy5faXNDbGlja0Rpc2FibGVkKGVsKSkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHR5cGUgPSBlLnR5cGU7XHJcblxyXG4gIFx0XHRpZiAodHlwZSA9PT0gJ21vdXNlZG93bicpIHtcclxuICBcdFx0XHQvLyBwcmV2ZW50cyBvdXRsaW5lIHdoZW4gY2xpY2tpbmcgb24ga2V5Ym9hcmQtZm9jdXNhYmxlIGVsZW1lbnRcclxuICBcdFx0XHRwcmV2ZW50T3V0bGluZShlbCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2ZpcmVET01FdmVudChlLCB0eXBlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X21vdXNlRXZlbnRzOiBbJ2NsaWNrJywgJ2RibGNsaWNrJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdjb250ZXh0bWVudSddLFxyXG5cclxuICBcdF9maXJlRE9NRXZlbnQ6IGZ1bmN0aW9uIChlLCB0eXBlLCBjYW52YXNUYXJnZXRzKSB7XHJcblxyXG4gIFx0XHRpZiAoZS50eXBlID09PSAnY2xpY2snKSB7XHJcbiAgXHRcdFx0Ly8gRmlyZSBhIHN5bnRoZXRpYyAncHJlY2xpY2snIGV2ZW50IHdoaWNoIHByb3BhZ2F0ZXMgdXAgKG1haW5seSBmb3IgY2xvc2luZyBwb3B1cHMpLlxyXG4gIFx0XHRcdC8vIEBldmVudCBwcmVjbGljazogTW91c2VFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIGJlZm9yZSBtb3VzZSBjbGljayBvbiB0aGUgbWFwIChzb21ldGltZXMgdXNlZnVsIHdoZW4geW91XHJcbiAgXHRcdFx0Ly8gd2FudCBzb21ldGhpbmcgdG8gaGFwcGVuIG9uIGNsaWNrIGJlZm9yZSBhbnkgZXhpc3RpbmcgY2xpY2tcclxuICBcdFx0XHQvLyBoYW5kbGVycyBzdGFydCBydW5uaW5nKS5cclxuICBcdFx0XHR2YXIgc3ludGggPSBleHRlbmQoe30sIGUpO1xyXG4gIFx0XHRcdHN5bnRoLnR5cGUgPSAncHJlY2xpY2snO1xyXG4gIFx0XHRcdHRoaXMuX2ZpcmVET01FdmVudChzeW50aCwgc3ludGgudHlwZSwgY2FudmFzVGFyZ2V0cyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEZpbmQgdGhlIGxheWVyIHRoZSBldmVudCBpcyBwcm9wYWdhdGluZyBmcm9tIGFuZCBpdHMgcGFyZW50cy5cclxuICBcdFx0dmFyIHRhcmdldHMgPSB0aGlzLl9maW5kRXZlbnRUYXJnZXRzKGUsIHR5cGUpO1xyXG5cclxuICBcdFx0aWYgKGNhbnZhc1RhcmdldHMpIHtcclxuICBcdFx0XHR2YXIgZmlsdGVyZWQgPSBbXTsgLy8gcGljayBvbmx5IHRhcmdldHMgd2l0aCBsaXN0ZW5lcnNcclxuICBcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNhbnZhc1RhcmdldHMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRcdGlmIChjYW52YXNUYXJnZXRzW2ldLmxpc3RlbnModHlwZSwgdHJ1ZSkpIHtcclxuICBcdFx0XHRcdFx0ZmlsdGVyZWQucHVzaChjYW52YXNUYXJnZXRzW2ldKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0dGFyZ2V0cyA9IGZpbHRlcmVkLmNvbmNhdCh0YXJnZXRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCF0YXJnZXRzLmxlbmd0aCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmICh0eXBlID09PSAnY29udGV4dG1lbnUnKSB7XHJcbiAgXHRcdFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciB0YXJnZXQgPSB0YXJnZXRzWzBdO1xyXG4gIFx0XHR2YXIgZGF0YSA9IHtcclxuICBcdFx0XHRvcmlnaW5hbEV2ZW50OiBlXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRpZiAoZS50eXBlICE9PSAna2V5cHJlc3MnICYmIGUudHlwZSAhPT0gJ2tleWRvd24nICYmIGUudHlwZSAhPT0gJ2tleXVwJykge1xyXG4gIFx0XHRcdHZhciBpc01hcmtlciA9IHRhcmdldC5nZXRMYXRMbmcgJiYgKCF0YXJnZXQuX3JhZGl1cyB8fCB0YXJnZXQuX3JhZGl1cyA8PSAxMCk7XHJcbiAgXHRcdFx0ZGF0YS5jb250YWluZXJQb2ludCA9IGlzTWFya2VyID9cclxuICBcdFx0XHRcdHRoaXMubGF0TG5nVG9Db250YWluZXJQb2ludCh0YXJnZXQuZ2V0TGF0TG5nKCkpIDogdGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKTtcclxuICBcdFx0XHRkYXRhLmxheWVyUG9pbnQgPSB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGRhdGEuY29udGFpbmVyUG9pbnQpO1xyXG4gIFx0XHRcdGRhdGEubGF0bG5nID0gaXNNYXJrZXIgPyB0YXJnZXQuZ2V0TGF0TG5nKCkgOiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhkYXRhLmxheWVyUG9pbnQpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHRhcmdldHNbaV0uZmlyZSh0eXBlLCBkYXRhLCB0cnVlKTtcclxuICBcdFx0XHRpZiAoZGF0YS5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkIHx8XHJcbiAgXHRcdFx0XHQodGFyZ2V0c1tpXS5vcHRpb25zLmJ1YmJsaW5nTW91c2VFdmVudHMgPT09IGZhbHNlICYmIGluZGV4T2YodGhpcy5fbW91c2VFdmVudHMsIHR5cGUpICE9PSAtMSkpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2RyYWdnYWJsZU1vdmVkOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdG9iaiA9IG9iai5kcmFnZ2luZyAmJiBvYmouZHJhZ2dpbmcuZW5hYmxlZCgpID8gb2JqIDogdGhpcztcclxuICBcdFx0cmV0dXJuIChvYmouZHJhZ2dpbmcgJiYgb2JqLmRyYWdnaW5nLm1vdmVkKCkpIHx8ICh0aGlzLmJveFpvb20gJiYgdGhpcy5ib3hab29tLm1vdmVkKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2xlYXJIYW5kbGVyczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5faGFuZGxlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHR0aGlzLl9oYW5kbGVyc1tpXS5kaXNhYmxlKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gT3RoZXIgTWV0aG9kc1xyXG5cclxuICBcdC8vIEBtZXRob2Qgd2hlblJlYWR5KGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdC8vIFJ1bnMgdGhlIGdpdmVuIGZ1bmN0aW9uIGBmbmAgd2hlbiB0aGUgbWFwIGdldHMgaW5pdGlhbGl6ZWQgd2l0aFxyXG4gIFx0Ly8gYSB2aWV3IChjZW50ZXIgYW5kIHpvb20pIGFuZCBhdCBsZWFzdCBvbmUgbGF5ZXIsIG9yIGltbWVkaWF0ZWx5XHJcbiAgXHQvLyBpZiBpdCdzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG9wdGlvbmFsbHkgcGFzc2luZyBhIGZ1bmN0aW9uIGNvbnRleHQuXHJcbiAgXHR3aGVuUmVhZHk6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0Y2FsbGJhY2suY2FsbChjb250ZXh0IHx8IHRoaXMsIHt0YXJnZXQ6IHRoaXN9KTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLm9uKCdsb2FkJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gcHJpdmF0ZSBtZXRob2RzIGZvciBnZXR0aW5nIG1hcCBzdGF0ZVxyXG5cclxuICBcdF9nZXRNYXBQYW5lUG9zOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBnZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSB8fCBuZXcgUG9pbnQoMCwgMCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpO1xyXG4gIFx0XHRyZXR1cm4gcG9zICYmICFwb3MuZXF1YWxzKFswLCAwXSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRUb3BMZWZ0UG9pbnQ6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcclxuICBcdFx0dmFyIHBpeGVsT3JpZ2luID0gY2VudGVyICYmIHpvb20gIT09IHVuZGVmaW5lZCA/XHJcbiAgXHRcdFx0dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKSA6XHJcbiAgXHRcdFx0dGhpcy5nZXRQaXhlbE9yaWdpbigpO1xyXG4gIFx0XHRyZXR1cm4gcGl4ZWxPcmlnaW4uc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldE5ld1BpeGVsT3JpZ2luOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XHJcbiAgXHRcdHZhciB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtcclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdChjZW50ZXIsIHpvb20pLl9zdWJ0cmFjdCh2aWV3SGFsZikuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGF0TG5nVG9OZXdMYXllclBvaW50OiBmdW5jdGlvbiAobGF0bG5nLCB6b29tLCBjZW50ZXIpIHtcclxuICBcdFx0dmFyIHRvcExlZnQgPSB0aGlzLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0KGxhdGxuZywgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcywgem9vbSwgY2VudGVyKSB7XHJcbiAgXHRcdHZhciB0b3BMZWZ0ID0gdGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKTtcclxuICBcdFx0cmV0dXJuIHRvQm91bmRzKFtcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldFNvdXRoV2VzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCksXHJcbiAgXHRcdFx0dGhpcy5wcm9qZWN0KGxhdExuZ0JvdW5kcy5nZXROb3J0aFdlc3QoKSwgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpLFxyXG4gIFx0XHRcdHRoaXMucHJvamVjdChsYXRMbmdCb3VuZHMuZ2V0U291dGhFYXN0KCksIHpvb20pLl9zdWJ0cmFjdCh0b3BMZWZ0KSxcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldE5vcnRoRWFzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdClcclxuICBcdFx0XSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGxheWVyIHBvaW50IG9mIHRoZSBjdXJyZW50IGNlbnRlclxyXG4gIFx0X2dldENlbnRlckxheWVyUG9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gb2Zmc2V0IG9mIHRoZSBzcGVjaWZpZWQgcGxhY2UgdG8gdGhlIGN1cnJlbnQgY2VudGVyIGluIHBpeGVsc1xyXG4gIFx0X2dldENlbnRlck9mZnNldDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQobGF0bG5nKS5zdWJ0cmFjdCh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBhZGp1c3QgY2VudGVyIGZvciB2aWV3IHRvIGdldCBpbnNpZGUgYm91bmRzXHJcbiAgXHRfbGltaXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIGJvdW5kcykge1xyXG5cclxuICBcdFx0aWYgKCFib3VuZHMpIHsgcmV0dXJuIGNlbnRlcjsgfVxyXG5cclxuICBcdFx0dmFyIGNlbnRlclBvaW50ID0gdGhpcy5wcm9qZWN0KGNlbnRlciwgem9vbSksXHJcbiAgXHRcdCAgICB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLFxyXG4gIFx0XHQgICAgdmlld0JvdW5kcyA9IG5ldyBCb3VuZHMoY2VudGVyUG9pbnQuc3VidHJhY3Qodmlld0hhbGYpLCBjZW50ZXJQb2ludC5hZGQodmlld0hhbGYpKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IHRoaXMuX2dldEJvdW5kc09mZnNldCh2aWV3Qm91bmRzLCBib3VuZHMsIHpvb20pO1xyXG5cclxuICBcdFx0Ly8gSWYgb2Zmc2V0IGlzIGxlc3MgdGhhbiBhIHBpeGVsLCBpZ25vcmUuXHJcbiAgXHRcdC8vIFRoaXMgcHJldmVudHMgdW5zdGFibGUgcHJvamVjdGlvbnMgZnJvbSBnZXR0aW5nIGludG9cclxuICBcdFx0Ly8gYW4gaW5maW5pdGUgbG9vcCBvZiB0aW55IG9mZnNldHMuXHJcbiAgXHRcdGlmIChNYXRoLmFicyhvZmZzZXQueCkgPD0gMSAmJiBNYXRoLmFicyhvZmZzZXQueSkgPD0gMSkge1xyXG4gIFx0XHRcdHJldHVybiBjZW50ZXI7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLnVucHJvamVjdChjZW50ZXJQb2ludC5hZGQob2Zmc2V0KSwgem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGFkanVzdCBvZmZzZXQgZm9yIHZpZXcgdG8gZ2V0IGluc2lkZSBib3VuZHNcclxuICBcdF9saW1pdE9mZnNldDogZnVuY3Rpb24gKG9mZnNldCwgYm91bmRzKSB7XHJcbiAgXHRcdGlmICghYm91bmRzKSB7IHJldHVybiBvZmZzZXQ7IH1cclxuXHJcbiAgXHRcdHZhciB2aWV3Qm91bmRzID0gdGhpcy5nZXRQaXhlbEJvdW5kcygpLFxyXG4gIFx0XHQgICAgbmV3Qm91bmRzID0gbmV3IEJvdW5kcyh2aWV3Qm91bmRzLm1pbi5hZGQob2Zmc2V0KSwgdmlld0JvdW5kcy5tYXguYWRkKG9mZnNldCkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG9mZnNldC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG5ld0JvdW5kcywgYm91bmRzKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIHJldHVybnMgb2Zmc2V0IG5lZWRlZCBmb3IgcHhCb3VuZHMgdG8gZ2V0IGluc2lkZSBtYXhCb3VuZHMgYXQgYSBzcGVjaWZpZWQgem9vbVxyXG4gIFx0X2dldEJvdW5kc09mZnNldDogZnVuY3Rpb24gKHB4Qm91bmRzLCBtYXhCb3VuZHMsIHpvb20pIHtcclxuICBcdFx0dmFyIHByb2plY3RlZE1heEJvdW5kcyA9IHRvQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIHRoaXMucHJvamVjdChtYXhCb3VuZHMuZ2V0Tm9ydGhFYXN0KCksIHpvb20pLFxyXG4gIFx0XHQgICAgICAgIHRoaXMucHJvamVjdChtYXhCb3VuZHMuZ2V0U291dGhXZXN0KCksIHpvb20pXHJcbiAgXHRcdCAgICApLFxyXG4gIFx0XHQgICAgbWluT2Zmc2V0ID0gcHJvamVjdGVkTWF4Qm91bmRzLm1pbi5zdWJ0cmFjdChweEJvdW5kcy5taW4pLFxyXG4gIFx0XHQgICAgbWF4T2Zmc2V0ID0gcHJvamVjdGVkTWF4Qm91bmRzLm1heC5zdWJ0cmFjdChweEJvdW5kcy5tYXgpLFxyXG5cclxuICBcdFx0ICAgIGR4ID0gdGhpcy5fcmVib3VuZChtaW5PZmZzZXQueCwgLW1heE9mZnNldC54KSxcclxuICBcdFx0ICAgIGR5ID0gdGhpcy5fcmVib3VuZChtaW5PZmZzZXQueSwgLW1heE9mZnNldC55KTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoZHgsIGR5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlYm91bmQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xyXG4gIFx0XHRyZXR1cm4gbGVmdCArIHJpZ2h0ID4gMCA/XHJcbiAgXHRcdFx0TWF0aC5yb3VuZChsZWZ0IC0gcmlnaHQpIC8gMiA6XHJcbiAgXHRcdFx0TWF0aC5tYXgoMCwgTWF0aC5jZWlsKGxlZnQpKSAtIE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmlnaHQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2xpbWl0Wm9vbTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0dmFyIG1pbiA9IHRoaXMuZ2V0TWluWm9vbSgpLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5nZXRNYXhab29tKCksXHJcbiAgXHRcdCAgICBzbmFwID0gQnJvd3Nlci5hbnkzZCA/IHRoaXMub3B0aW9ucy56b29tU25hcCA6IDE7XHJcbiAgXHRcdGlmIChzbmFwKSB7XHJcbiAgXHRcdFx0em9vbSA9IE1hdGgucm91bmQoem9vbSAvIHNuYXApICogc25hcDtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHpvb20pKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uUGFuVHJhbnNpdGlvblN0ZXA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5maXJlKCdtb3ZlJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblBhblRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbWFwUGFuZSwgJ2xlYWZsZXQtcGFuLWFuaW0nKTtcclxuICBcdFx0dGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF90cnlBbmltYXRlZFBhbjogZnVuY3Rpb24gKGNlbnRlciwgb3B0aW9ucykge1xyXG4gIFx0XHQvLyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG5ldyBhbmQgY3VycmVudCBjZW50ZXJzIGluIHBpeGVsc1xyXG4gIFx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KGNlbnRlcikuX3RydW5jKCk7XHJcblxyXG4gIFx0XHQvLyBkb24ndCBhbmltYXRlIHRvbyBmYXIgdW5sZXNzIGFuaW1hdGU6IHRydWUgc3BlY2lmaWVkIGluIG9wdGlvbnNcclxuICBcdFx0aWYgKChvcHRpb25zICYmIG9wdGlvbnMuYW5pbWF0ZSkgIT09IHRydWUgJiYgIXRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG9mZnNldCkpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHR0aGlzLnBhbkJ5KG9mZnNldCwgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdHJ1ZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NyZWF0ZUFuaW1Qcm94eTogZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0dmFyIHByb3h5ID0gdGhpcy5fcHJveHkgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkJyk7XHJcbiAgXHRcdHRoaXMuX3BhbmVzLm1hcFBhbmUuYXBwZW5kQ2hpbGQocHJveHkpO1xyXG5cclxuICBcdFx0dGhpcy5vbignem9vbWFuaW0nLCBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRcdHZhciBwcm9wID0gVFJBTlNGT1JNLFxyXG4gIFx0XHRcdCAgICB0cmFuc2Zvcm0gPSB0aGlzLl9wcm94eS5zdHlsZVtwcm9wXTtcclxuXHJcbiAgXHRcdFx0c2V0VHJhbnNmb3JtKHRoaXMuX3Byb3h5LCB0aGlzLnByb2plY3QoZS5jZW50ZXIsIGUuem9vbSksIHRoaXMuZ2V0Wm9vbVNjYWxlKGUuem9vbSwgMSkpO1xyXG5cclxuICBcdFx0XHQvLyB3b3JrYXJvdW5kIGZvciBjYXNlIHdoZW4gdHJhbnNmb3JtIGlzIHRoZSBzYW1lIGFuZCBzbyB0cmFuc2l0aW9uZW5kIGV2ZW50IGlzIG5vdCBmaXJlZFxyXG4gIFx0XHRcdGlmICh0cmFuc2Zvcm0gPT09IHRoaXMuX3Byb3h5LnN0eWxlW3Byb3BdICYmIHRoaXMuX2FuaW1hdGluZ1pvb20pIHtcclxuICBcdFx0XHRcdHRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5vbignbG9hZCBtb3ZlZW5kJywgdGhpcy5fYW5pbU1vdmVFbmQsIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5fb24oJ3VubG9hZCcsIHRoaXMuX2Rlc3Ryb3lBbmltUHJveHksIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZGVzdHJveUFuaW1Qcm94eTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZW1vdmUodGhpcy5fcHJveHkpO1xyXG4gIFx0XHR0aGlzLm9mZignbG9hZCBtb3ZlZW5kJywgdGhpcy5fYW5pbU1vdmVFbmQsIHRoaXMpO1xyXG4gIFx0XHRkZWxldGUgdGhpcy5fcHJveHk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hbmltTW92ZUVuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgYyA9IHRoaXMuZ2V0Q2VudGVyKCksXHJcbiAgXHRcdCAgICB6ID0gdGhpcy5nZXRab29tKCk7XHJcbiAgXHRcdHNldFRyYW5zZm9ybSh0aGlzLl9wcm94eSwgdGhpcy5wcm9qZWN0KGMsIHopLCB0aGlzLmdldFpvb21TY2FsZSh6LCAxKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jYXRjaFRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9hbmltYXRpbmdab29tICYmIGUucHJvcGVydHlOYW1lLmluZGV4T2YoJ3RyYW5zZm9ybScpID49IDApIHtcclxuICBcdFx0XHR0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X25vdGhpbmdUb0FuaW1hdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbGVhZmxldC16b29tLWFuaW1hdGVkJykubGVuZ3RoO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdHJ5QW5pbWF0ZWRab29tOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fYW5pbWF0aW5nWm9vbSkgeyByZXR1cm4gdHJ1ZTsgfVxyXG5cclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIFx0XHQvLyBkb24ndCBhbmltYXRlIGlmIGRpc2FibGVkLCBub3Qgc3VwcG9ydGVkIG9yIHpvb20gZGlmZmVyZW5jZSBpcyB0b28gbGFyZ2VcclxuICBcdFx0aWYgKCF0aGlzLl96b29tQW5pbWF0ZWQgfHwgb3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCB0aGlzLl9ub3RoaW5nVG9BbmltYXRlKCkgfHxcclxuICBcdFx0ICAgICAgICBNYXRoLmFicyh6b29tIC0gdGhpcy5fem9vbSkgPiB0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvblRocmVzaG9sZCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdC8vIG9mZnNldCBpcyB0aGUgcGl4ZWwgY29vcmRzIG9mIHRoZSB6b29tIG9yaWdpbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBjZW50ZXJcclxuICBcdFx0dmFyIHNjYWxlID0gdGhpcy5nZXRab29tU2NhbGUoem9vbSksXHJcbiAgXHRcdCAgICBvZmZzZXQgPSB0aGlzLl9nZXRDZW50ZXJPZmZzZXQoY2VudGVyKS5fZGl2aWRlQnkoMSAtIDEgLyBzY2FsZSk7XHJcblxyXG4gIFx0XHQvLyBkb24ndCBhbmltYXRlIGlmIHRoZSB6b29tIG9yaWdpbiBpc24ndCB3aXRoaW4gb25lIHNjcmVlbiBmcm9tIHRoZSBjdXJyZW50IGNlbnRlciwgdW5sZXNzIGZvcmNlZFxyXG4gIFx0XHRpZiAob3B0aW9ucy5hbmltYXRlICE9PSB0cnVlICYmICF0aGlzLmdldFNpemUoKS5jb250YWlucyhvZmZzZXQpKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICBcdFx0cmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0dGhpc1xyXG4gIFx0XHRcdCAgICAuX21vdmVTdGFydCh0cnVlLCBmYWxzZSlcclxuICBcdFx0XHQgICAgLl9hbmltYXRlWm9vbShjZW50ZXIsIHpvb20sIHRydWUpO1xyXG4gIFx0XHR9LCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiB0cnVlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIHN0YXJ0QW5pbSwgbm9VcGRhdGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXBQYW5lKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKHN0YXJ0QW5pbSkge1xyXG4gIFx0XHRcdHRoaXMuX2FuaW1hdGluZ1pvb20gPSB0cnVlO1xyXG5cclxuICBcdFx0XHQvLyByZW1lbWJlciB3aGF0IGNlbnRlci96b29tIHRvIHNldCBhZnRlciBhbmltYXRpb25cclxuICBcdFx0XHR0aGlzLl9hbmltYXRlVG9DZW50ZXIgPSBjZW50ZXI7XHJcbiAgXHRcdFx0dGhpcy5fYW5pbWF0ZVRvWm9vbSA9IHpvb207XHJcblxyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXpvb20tYW5pbScpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBPdGhlciBFdmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IHpvb21hbmltOiBab29tQW5pbUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIGF0IGxlYXN0IG9uY2UgcGVyIHpvb20gYW5pbWF0aW9uLiBGb3IgY29udGludW91cyB6b29tLCBsaWtlIHBpbmNoIHpvb21pbmcsIGZpcmVkIG9uY2UgcGVyIGZyYW1lIGR1cmluZyB6b29tLlxyXG4gIFx0XHR0aGlzLmZpcmUoJ3pvb21hbmltJywge1xyXG4gIFx0XHRcdGNlbnRlcjogY2VudGVyLFxyXG4gIFx0XHRcdHpvb206IHpvb20sXHJcbiAgXHRcdFx0bm9VcGRhdGU6IG5vVXBkYXRlXHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKCF0aGlzLl90ZW1wRmlyZVpvb21FdmVudCkge1xyXG4gIFx0XHRcdHRoaXMuX3RlbXBGaXJlWm9vbUV2ZW50ID0gdGhpcy5fem9vbSAhPT0gdGhpcy5fYW5pbWF0ZVRvWm9vbTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsIHRoaXMuX2FuaW1hdGVUb1pvb20sIHVuZGVmaW5lZCwgdHJ1ZSk7XHJcblxyXG4gIFx0XHQvLyBXb3JrIGFyb3VuZCB3ZWJraXQgbm90IGZpcmluZyAndHJhbnNpdGlvbmVuZCcsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8zNjg5LCAyNjkzXHJcbiAgXHRcdHNldFRpbWVvdXQoYmluZCh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLCB0aGlzKSwgMjUwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uWm9vbVRyYW5zaXRpb25FbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9hbmltYXRpbmdab29tKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcFBhbmUpIHtcclxuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC16b29tLWFuaW0nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fYW5pbWF0aW5nWm9vbSA9IGZhbHNlO1xyXG5cclxuICBcdFx0dGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsIHRoaXMuX2FuaW1hdGVUb1pvb20sIHVuZGVmaW5lZCwgdHJ1ZSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fdGVtcEZpcmVab29tRXZlbnQpIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb20nKTtcclxuICBcdFx0fVxyXG4gIFx0XHRkZWxldGUgdGhpcy5fdGVtcEZpcmVab29tRXZlbnQ7XHJcblxyXG4gIFx0XHR0aGlzLmZpcmUoJ21vdmUnKTtcclxuXHJcbiAgXHRcdHRoaXMuX21vdmVFbmQodHJ1ZSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBzZWN0aW9uXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubWFwKGlkOiBTdHJpbmcsIG9wdGlvbnM/OiBNYXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBtYXAgb2JqZWN0IGdpdmVuIHRoZSBET00gSUQgb2YgYSBgPGRpdj5gIGVsZW1lbnRcclxuICAvLyBhbmQgb3B0aW9uYWxseSBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGBNYXAgb3B0aW9uc2AuXHJcbiAgLy9cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLm1hcChlbDogSFRNTEVsZW1lbnQsIG9wdGlvbnM/OiBNYXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBtYXAgb2JqZWN0IGdpdmVuIGFuIGluc3RhbmNlIG9mIGEgYDxkaXY+YCBIVE1MIGVsZW1lbnRcclxuICAvLyBhbmQgb3B0aW9uYWxseSBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGBNYXAgb3B0aW9uc2AuXHJcbiAgZnVuY3Rpb24gY3JlYXRlTWFwKGlkLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IE1hcChpZCwgb3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2xcclxuICAgKiBAYWthIEwuQ29udHJvbFxyXG4gICAqIEBpbmhlcml0cyBDbGFzc1xyXG4gICAqXHJcbiAgICogTC5Db250cm9sIGlzIGEgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIG1hcCBjb250cm9scy4gSGFuZGxlcyBwb3NpdGlvbmluZy5cclxuICAgKiBBbGwgb3RoZXIgY29udHJvbHMgZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cclxuICAgKi9cclxuXHJcbiAgdmFyIENvbnRyb2wgPSBDbGFzcy5leHRlbmQoe1xyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgQ29udHJvbCBPcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gcG9zaXRpb246IFN0cmluZyA9ICd0b3ByaWdodCdcclxuICBcdFx0Ly8gVGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sIChvbmUgb2YgdGhlIG1hcCBjb3JuZXJzKS4gUG9zc2libGUgdmFsdWVzIGFyZSBgJ3RvcGxlZnQnYCxcclxuICBcdFx0Ly8gYCd0b3ByaWdodCdgLCBgJ2JvdHRvbWxlZnQnYCBvciBgJ2JvdHRvbXJpZ2h0J2BcclxuICBcdFx0cG9zaXRpb246ICd0b3ByaWdodCdcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqIENsYXNzZXMgZXh0ZW5kaW5nIEwuQ29udHJvbCB3aWxsIGluaGVyaXQgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxyXG4gIFx0ICpcclxuICBcdCAqIEBtZXRob2QgZ2V0UG9zaXRpb246IHN0cmluZ1xyXG4gIFx0ICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2wuXHJcbiAgXHQgKi9cclxuICBcdGdldFBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb247XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UG9zaXRpb24ocG9zaXRpb246IHN0cmluZyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sLlxyXG4gIFx0c2V0UG9zaXRpb246IGZ1bmN0aW9uIChwb3NpdGlvbikge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xyXG5cclxuICBcdFx0aWYgKG1hcCkge1xyXG4gIFx0XHRcdG1hcC5yZW1vdmVDb250cm9sKHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBwb3NpdGlvbjtcclxuXHJcbiAgXHRcdGlmIChtYXApIHtcclxuICBcdFx0XHRtYXAuYWRkQ29udHJvbCh0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgSFRNTEVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgY29udHJvbC5cclxuICBcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZFRvKG1hcDogTWFwKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyB0aGUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFwLlxyXG4gIFx0YWRkVG86IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5yZW1vdmUoKTtcclxuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IHRoaXMub25BZGQobWFwKSxcclxuICBcdFx0ICAgIHBvcyA9IHRoaXMuZ2V0UG9zaXRpb24oKSxcclxuICBcdFx0ICAgIGNvcm5lciA9IG1hcC5fY29udHJvbENvcm5lcnNbcG9zXTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtY29udHJvbCcpO1xyXG5cclxuICBcdFx0aWYgKHBvcy5pbmRleE9mKCdib3R0b20nKSAhPT0gLTEpIHtcclxuICBcdFx0XHRjb3JuZXIuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgY29ybmVyLmZpcnN0Q2hpbGQpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGNvcm5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAub24oJ3VubG9hZCcsIHRoaXMucmVtb3ZlLCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgY29udHJvbCBmcm9tIHRoZSBtYXAgaXQgaXMgY3VycmVudGx5IGFjdGl2ZSBvbi5cclxuICBcdHJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZW1vdmUodGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9uUmVtb3ZlKSB7XHJcbiAgXHRcdFx0dGhpcy5vblJlbW92ZSh0aGlzLl9tYXApO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAub2ZmKCd1bmxvYWQnLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcbiAgXHRcdHRoaXMuX21hcCA9IG51bGw7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlZm9jdXNPbk1hcDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0Ly8gaWYgbWFwIGV4aXN0cyBhbmQgZXZlbnQgaXMgbm90IGEga2V5Ym9hcmQgZXZlbnRcclxuICBcdFx0aWYgKHRoaXMuX21hcCAmJiBlICYmIGUuc2NyZWVuWCA+IDAgJiYgZS5zY3JlZW5ZID4gMCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjb250cm9sID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgQ29udHJvbChvcHRpb25zKTtcclxuICB9O1xyXG5cclxuICAvKiBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xyXG4gICAqIEB1bmluaGVyaXRhYmxlXHJcbiAgICpcclxuICAgKiBFdmVyeSBjb250cm9sIHNob3VsZCBleHRlbmQgZnJvbSBgTC5Db250cm9sYCBhbmQgKHJlLSlpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLlxyXG4gICAqXHJcbiAgICogQG1ldGhvZCBvbkFkZChtYXA6IE1hcCk6IEhUTUxFbGVtZW50XHJcbiAgICogU2hvdWxkIHJldHVybiB0aGUgY29udGFpbmVyIERPTSBlbGVtZW50IGZvciB0aGUgY29udHJvbCBhbmQgYWRkIGxpc3RlbmVycyBvbiByZWxldmFudCBtYXAgZXZlbnRzLiBDYWxsZWQgb24gW2Bjb250cm9sLmFkZFRvKG1hcClgXSgjY29udHJvbC1hZGRUbykuXHJcbiAgICpcclxuICAgKiBAbWV0aG9kIG9uUmVtb3ZlKG1hcDogTWFwKVxyXG4gICAqIE9wdGlvbmFsIG1ldGhvZC4gU2hvdWxkIGNvbnRhaW4gYWxsIGNsZWFuIHVwIGNvZGUgdGhhdCByZW1vdmVzIHRoZSBsaXN0ZW5lcnMgcHJldmlvdXNseSBhZGRlZCBpbiBbYG9uQWRkYF0oI2NvbnRyb2wtb25hZGQpLiBDYWxsZWQgb24gW2Bjb250cm9sLnJlbW92ZSgpYF0oI2NvbnRyb2wtcmVtb3ZlKS5cclxuICAgKi9cclxuXHJcbiAgLyogQG5hbWVzcGFjZSBNYXBcclxuICAgKiBAc2VjdGlvbiBNZXRob2RzIGZvciBMYXllcnMgYW5kIENvbnRyb2xzXHJcbiAgICovXHJcbiAgTWFwLmluY2x1ZGUoe1xyXG4gIFx0Ly8gQG1ldGhvZCBhZGRDb250cm9sKGNvbnRyb2w6IENvbnRyb2wpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBjb250cm9sIHRvIHRoZSBtYXBcclxuICBcdGFkZENvbnRyb2w6IGZ1bmN0aW9uIChjb250cm9sKSB7XHJcbiAgXHRcdGNvbnRyb2wuYWRkVG8odGhpcyk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIGdpdmVuIGNvbnRyb2wgZnJvbSB0aGUgbWFwXHJcbiAgXHRyZW1vdmVDb250cm9sOiBmdW5jdGlvbiAoY29udHJvbCkge1xyXG4gIFx0XHRjb250cm9sLnJlbW92ZSgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRDb250cm9sUG9zOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjb3JuZXJzID0gdGhpcy5fY29udHJvbENvcm5lcnMgPSB7fSxcclxuICBcdFx0ICAgIGwgPSAnbGVhZmxldC0nLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udHJvbENvbnRhaW5lciA9XHJcbiAgXHRcdCAgICAgICAgICAgIGNyZWF0ZSQxKCdkaXYnLCBsICsgJ2NvbnRyb2wtY29udGFpbmVyJywgdGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIGNyZWF0ZUNvcm5lcih2U2lkZSwgaFNpZGUpIHtcclxuICBcdFx0XHR2YXIgY2xhc3NOYW1lID0gbCArIHZTaWRlICsgJyAnICsgbCArIGhTaWRlO1xyXG5cclxuICBcdFx0XHRjb3JuZXJzW3ZTaWRlICsgaFNpZGVdID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Y3JlYXRlQ29ybmVyKCd0b3AnLCAnbGVmdCcpO1xyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ3RvcCcsICdyaWdodCcpO1xyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ2JvdHRvbScsICdsZWZ0Jyk7XHJcbiAgXHRcdGNyZWF0ZUNvcm5lcignYm90dG9tJywgJ3JpZ2h0Jyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jbGVhckNvbnRyb2xQb3M6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9jb250cm9sQ29ybmVycykge1xyXG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9jb250cm9sQ29ybmVyc1tpXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xyXG4gIFx0XHRkZWxldGUgdGhpcy5fY29udHJvbENvcm5lcnM7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250cm9sQ29udGFpbmVyO1xyXG4gIFx0fVxyXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2wuTGF5ZXJzXHJcbiAgICogQGFrYSBMLkNvbnRyb2wuTGF5ZXJzXHJcbiAgICogQGluaGVyaXRzIENvbnRyb2xcclxuICAgKlxyXG4gICAqIFRoZSBsYXllcnMgY29udHJvbCBnaXZlcyB1c2VycyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgYmFzZSBsYXllcnMgYW5kIHN3aXRjaCBvdmVybGF5cyBvbi9vZmYgKGNoZWNrIG91dCB0aGUgW2RldGFpbGVkIGV4YW1wbGVdKGh0dHBzOi8vbGVhZmxldGpzLmNvbS9leGFtcGxlcy9sYXllcnMtY29udHJvbC8pKS4gRXh0ZW5kcyBgQ29udHJvbGAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgYmFzZUxheWVycyA9IHtcclxuICAgKiBcdFwiTWFwYm94XCI6IG1hcGJveCxcclxuICAgKiBcdFwiT3BlblN0cmVldE1hcFwiOiBvc21cclxuICAgKiB9O1xyXG4gICAqXHJcbiAgICogdmFyIG92ZXJsYXlzID0ge1xyXG4gICAqIFx0XCJNYXJrZXJcIjogbWFya2VyLFxyXG4gICAqIFx0XCJSb2Fkc1wiOiByb2Fkc0xheWVyXHJcbiAgICogfTtcclxuICAgKlxyXG4gICAqIEwuY29udHJvbC5sYXllcnMoYmFzZUxheWVycywgb3ZlcmxheXMpLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBUaGUgYGJhc2VMYXllcnNgIGFuZCBgb3ZlcmxheXNgIHBhcmFtZXRlcnMgYXJlIG9iamVjdCBsaXRlcmFscyB3aXRoIGxheWVyIG5hbWVzIGFzIGtleXMgYW5kIGBMYXllcmAgb2JqZWN0cyBhcyB2YWx1ZXM6XHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHtcclxuICAgKiAgICAgXCI8c29tZU5hbWUxPlwiOiBsYXllcjEsXHJcbiAgICogICAgIFwiPHNvbWVOYW1lMj5cIjogbGF5ZXIyXHJcbiAgICogfVxyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogVGhlIGxheWVyIG5hbWVzIGNhbiBjb250YWluIEhUTUwsIHdoaWNoIGFsbG93cyB5b3UgdG8gYWRkIGFkZGl0aW9uYWwgc3R5bGluZyB0byB0aGUgaXRlbXM6XHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHtcIjxpbWcgc3JjPSdteS1sYXllci1pY29uJyAvPiA8c3BhbiBjbGFzcz0nbXktbGF5ZXItaXRlbSc+TXkgTGF5ZXI8L3NwYW4+XCI6IG15TGF5ZXJ9XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBMYXllcnMgPSBDb250cm9sLmV4dGVuZCh7XHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBDb250cm9sLkxheWVycyBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gY29sbGFwc2VkOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBjb250cm9sIHdpbGwgYmUgY29sbGFwc2VkIGludG8gYW4gaWNvbiBhbmQgZXhwYW5kZWQgb24gbW91c2UgaG92ZXIsIHRvdWNoLCBvciBrZXlib2FyZCBhY3RpdmF0aW9uLlxyXG4gIFx0XHRjb2xsYXBzZWQ6IHRydWUsXHJcbiAgXHRcdHBvc2l0aW9uOiAndG9wcmlnaHQnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvWkluZGV4OiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBjb250cm9sIHdpbGwgYXNzaWduIHpJbmRleGVzIGluIGluY3JlYXNpbmcgb3JkZXIgdG8gYWxsIG9mIGl0cyBsYXllcnMgc28gdGhhdCB0aGUgb3JkZXIgaXMgcHJlc2VydmVkIHdoZW4gc3dpdGNoaW5nIHRoZW0gb24vb2ZmLlxyXG4gIFx0XHRhdXRvWkluZGV4OiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBoaWRlU2luZ2xlQmFzZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGJhc2UgbGF5ZXJzIGluIHRoZSBjb250cm9sIHdpbGwgYmUgaGlkZGVuIHdoZW4gdGhlcmUgaXMgb25seSBvbmUuXHJcbiAgXHRcdGhpZGVTaW5nbGVCYXNlOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gc29ydExheWVyczogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdG8gc29ydCB0aGUgbGF5ZXJzLiBXaGVuIGBmYWxzZWAsIGxheWVycyB3aWxsIGtlZXAgdGhlIG9yZGVyXHJcbiAgXHRcdC8vIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZCB0byB0aGUgY29udHJvbC5cclxuICBcdFx0c29ydExheWVyczogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHNvcnRGdW5jdGlvbjogRnVuY3Rpb24gPSAqXHJcbiAgXHRcdC8vIEEgW2NvbXBhcmUgZnVuY3Rpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3NvcnQpXHJcbiAgXHRcdC8vIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBzb3J0aW5nIHRoZSBsYXllcnMsIHdoZW4gYHNvcnRMYXllcnNgIGlzIGB0cnVlYC5cclxuICBcdFx0Ly8gVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGJvdGggdGhlIGBMLkxheWVyYCBpbnN0YW5jZXMgYW5kIHRoZWlyIG5hbWVzLCBhcyBpblxyXG4gIFx0XHQvLyBgc29ydEZ1bmN0aW9uKGxheWVyQSwgbGF5ZXJCLCBuYW1lQSwgbmFtZUIpYC5cclxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgaXQgc29ydHMgbGF5ZXJzIGFscGhhYmV0aWNhbGx5IGJ5IHRoZWlyIG5hbWUuXHJcbiAgXHRcdHNvcnRGdW5jdGlvbjogZnVuY3Rpb24gKGxheWVyQSwgbGF5ZXJCLCBuYW1lQSwgbmFtZUIpIHtcclxuICBcdFx0XHRyZXR1cm4gbmFtZUEgPCBuYW1lQiA/IC0xIDogKG5hbWVCIDwgbmFtZUEgPyAxIDogMCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGJhc2VMYXllcnMsIG92ZXJsYXlzLCBvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMgPSBbXTtcclxuICBcdFx0dGhpcy5fbGF5ZXJzID0gW107XHJcbiAgXHRcdHRoaXMuX2xhc3RaSW5kZXggPSAwO1xyXG4gIFx0XHR0aGlzLl9oYW5kbGluZ0NsaWNrID0gZmFsc2U7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpIGluIGJhc2VMYXllcnMpIHtcclxuICBcdFx0XHR0aGlzLl9hZGRMYXllcihiYXNlTGF5ZXJzW2ldLCBpKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Zm9yIChpIGluIG92ZXJsYXlzKSB7XHJcbiAgXHRcdFx0dGhpcy5fYWRkTGF5ZXIob3ZlcmxheXNbaV0sIGksIHRydWUpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuX2luaXRMYXlvdXQoKTtcclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAgPSBtYXA7XHJcbiAgXHRcdG1hcC5vbignem9vbWVuZCcsIHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMsIHRoaXMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHR0aGlzLl9sYXllcnNbaV0ubGF5ZXIub24oJ2FkZCByZW1vdmUnLCB0aGlzLl9vbkxheWVyQ2hhbmdlLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0YWRkVG86IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0Q29udHJvbC5wcm90b3R5cGUuYWRkVG8uY2FsbCh0aGlzLCBtYXApO1xyXG4gIFx0XHQvLyBUcmlnZ2VyIGV4cGFuZCBhZnRlciBMYXllcnMgQ29udHJvbCBoYXMgYmVlbiBpbnNlcnRlZCBpbnRvIERPTSBzbyB0aGF0IGlzIG5vdyBoYXMgYW4gYWN0dWFsIGhlaWdodC5cclxuICBcdFx0cmV0dXJuIHRoaXMuX2V4cGFuZElmTm90Q29sbGFwc2VkKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX21hcC5vZmYoJ3pvb21lbmQnLCB0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLCB0aGlzKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzW2ldLmxheWVyLm9mZignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYWRkQmFzZUxheWVyKGxheWVyOiBMYXllciwgbmFtZTogU3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhIGJhc2UgbGF5ZXIgKHJhZGlvIGJ1dHRvbiBlbnRyeSkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB0byB0aGUgY29udHJvbC5cclxuICBcdGFkZEJhc2VMYXllcjogZnVuY3Rpb24gKGxheWVyLCBuYW1lKSB7XHJcbiAgXHRcdHRoaXMuX2FkZExheWVyKGxheWVyLCBuYW1lKTtcclxuICBcdFx0cmV0dXJuICh0aGlzLl9tYXApID8gdGhpcy5fdXBkYXRlKCkgOiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZE92ZXJsYXkobGF5ZXI6IExheWVyLCBuYW1lOiBTdHJpbmcpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIGFuIG92ZXJsYXkgKGNoZWNrYm94IGVudHJ5KSB3aXRoIHRoZSBnaXZlbiBuYW1lIHRvIHRoZSBjb250cm9sLlxyXG4gIFx0YWRkT3ZlcmxheTogZnVuY3Rpb24gKGxheWVyLCBuYW1lKSB7XHJcbiAgXHRcdHRoaXMuX2FkZExheWVyKGxheWVyLCBuYW1lLCB0cnVlKTtcclxuICBcdFx0cmV0dXJuICh0aGlzLl9tYXApID8gdGhpcy5fdXBkYXRlKCkgOiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUxheWVyKGxheWVyOiBMYXllcik6IHRoaXNcclxuICBcdC8vIFJlbW92ZSB0aGUgZ2l2ZW4gbGF5ZXIgZnJvbSB0aGUgY29udHJvbC5cclxuICBcdHJlbW92ZUxheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0bGF5ZXIub2ZmKCdhZGQgcmVtb3ZlJywgdGhpcy5fb25MYXllckNoYW5nZSwgdGhpcyk7XHJcblxyXG4gIFx0XHR2YXIgb2JqID0gdGhpcy5fZ2V0TGF5ZXIoc3RhbXAobGF5ZXIpKTtcclxuICBcdFx0aWYgKG9iaikge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVycy5zcGxpY2UodGhpcy5fbGF5ZXJzLmluZGV4T2Yob2JqKSwgMSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuICh0aGlzLl9tYXApID8gdGhpcy5fdXBkYXRlKCkgOiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGV4cGFuZCgpOiB0aGlzXHJcbiAgXHQvLyBFeHBhbmQgdGhlIGNvbnRyb2wgY29udGFpbmVyIGlmIGNvbGxhcHNlZC5cclxuICBcdGV4cGFuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRhZGRDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkJyk7XHJcbiAgXHRcdHRoaXMuX3NlY3Rpb24uc3R5bGUuaGVpZ2h0ID0gbnVsbDtcclxuICBcdFx0dmFyIGFjY2VwdGFibGVIZWlnaHQgPSB0aGlzLl9tYXAuZ2V0U2l6ZSgpLnkgLSAodGhpcy5fY29udGFpbmVyLm9mZnNldFRvcCArIDUwKTtcclxuICBcdFx0aWYgKGFjY2VwdGFibGVIZWlnaHQgPCB0aGlzLl9zZWN0aW9uLmNsaWVudEhlaWdodCkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3NlY3Rpb24sICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhcicpO1xyXG4gIFx0XHRcdHRoaXMuX3NlY3Rpb24uc3R5bGUuaGVpZ2h0ID0gYWNjZXB0YWJsZUhlaWdodCArICdweCc7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fc2VjdGlvbiwgJ2xlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyJyk7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fY2hlY2tEaXNhYmxlZExheWVycygpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjb2xsYXBzZSgpOiB0aGlzXHJcbiAgXHQvLyBDb2xsYXBzZSB0aGUgY29udHJvbCBjb250YWluZXIgaWYgZXhwYW5kZWQuXHJcbiAgXHRjb2xsYXBzZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkJyk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdExheW91dDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgY2xhc3NOYW1lID0gJ2xlYWZsZXQtY29udHJvbC1sYXllcnMnLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSksXHJcbiAgXHRcdCAgICBjb2xsYXBzZWQgPSB0aGlzLm9wdGlvbnMuY29sbGFwc2VkO1xyXG5cclxuICBcdFx0Ly8gbWFrZXMgdGhpcyB3b3JrIG9uIElFIHRvdWNoIGRldmljZXMgYnkgc3RvcHBpbmcgaXQgZnJvbSBmaXJpbmcgYSBtb3VzZW91dCBldmVudCB3aGVuIHRoZSB0b3VjaCBpcyByZWxlYXNlZFxyXG4gIFx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWhhc3BvcHVwJywgdHJ1ZSk7XHJcblxyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihjb250YWluZXIpO1xyXG4gIFx0XHRkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24oY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbiA9IGNyZWF0ZSQxKCdzZWN0aW9uJywgY2xhc3NOYW1lICsgJy1saXN0Jyk7XHJcblxyXG4gIFx0XHRpZiAoY29sbGFwc2VkKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLm9uKCdjbGljaycsIHRoaXMuY29sbGFwc2UsIHRoaXMpO1xyXG5cclxuICBcdFx0XHRvbihjb250YWluZXIsIHtcclxuICBcdFx0XHRcdG1vdXNlZW50ZXI6IHRoaXMuX2V4cGFuZFNhZmVseSxcclxuICBcdFx0XHRcdG1vdXNlbGVhdmU6IHRoaXMuY29sbGFwc2VcclxuICBcdFx0XHR9LCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGxpbmsgPSB0aGlzLl9sYXllcnNMaW5rID0gY3JlYXRlJDEoJ2EnLCBjbGFzc05hbWUgKyAnLXRvZ2dsZScsIGNvbnRhaW5lcik7XHJcbiAgXHRcdGxpbmsuaHJlZiA9ICcjJztcclxuICBcdFx0bGluay50aXRsZSA9ICdMYXllcnMnO1xyXG4gIFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTtcclxuXHJcbiAgXHRcdG9uKGxpbmssIHtcclxuICBcdFx0XHRrZXlkb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRcdFx0aWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcclxuICBcdFx0XHRcdFx0dGhpcy5fZXhwYW5kU2FmZWx5KCk7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fSxcclxuICBcdFx0XHQvLyBDZXJ0YWluIHNjcmVlbiByZWFkZXJzIGludGVyY2VwdCB0aGUga2V5IGV2ZW50IGFuZCBpbnN0ZWFkIHNlbmQgYSBjbGljayBldmVudFxyXG4gIFx0XHRcdGNsaWNrOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRcdFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRcdFx0XHR0aGlzLl9leHBhbmRTYWZlbHkoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0sIHRoaXMpO1xyXG5cclxuICBcdFx0aWYgKCFjb2xsYXBzZWQpIHtcclxuICBcdFx0XHR0aGlzLmV4cGFuZCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9iYXNlTGF5ZXJzTGlzdCA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUgKyAnLWJhc2UnLCBzZWN0aW9uKTtcclxuICBcdFx0dGhpcy5fc2VwYXJhdG9yID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSArICctc2VwYXJhdG9yJywgc2VjdGlvbik7XHJcbiAgXHRcdHRoaXMuX292ZXJsYXlzTGlzdCA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUgKyAnLW92ZXJsYXlzJywgc2VjdGlvbik7XHJcblxyXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VjdGlvbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRMYXllcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLl9sYXllcnNbaV0gJiYgc3RhbXAodGhpcy5fbGF5ZXJzW2ldLmxheWVyKSA9PT0gaWQpIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLl9sYXllcnNbaV07XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGRMYXllcjogZnVuY3Rpb24gKGxheWVyLCBuYW1lLCBvdmVybGF5KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHRsYXllci5vbignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMucHVzaCh7XHJcbiAgXHRcdFx0bGF5ZXI6IGxheWVyLFxyXG4gIFx0XHRcdG5hbWU6IG5hbWUsXHJcbiAgXHRcdFx0b3ZlcmxheTogb3ZlcmxheVxyXG4gIFx0XHR9KTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuc29ydExheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVycy5zb3J0KGJpbmQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuc29ydEZ1bmN0aW9uKGEubGF5ZXIsIGIubGF5ZXIsIGEubmFtZSwgYi5uYW1lKTtcclxuICBcdFx0XHR9LCB0aGlzKSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCAmJiBsYXllci5zZXRaSW5kZXgpIHtcclxuICBcdFx0XHR0aGlzLl9sYXN0WkluZGV4Kys7XHJcbiAgXHRcdFx0bGF5ZXIuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHRlbXB0eSh0aGlzLl9iYXNlTGF5ZXJzTGlzdCk7XHJcbiAgXHRcdGVtcHR5KHRoaXMuX292ZXJsYXlzTGlzdCk7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMgPSBbXTtcclxuICBcdFx0dmFyIGJhc2VMYXllcnNQcmVzZW50LCBvdmVybGF5c1ByZXNlbnQsIGksIG9iaiwgYmFzZUxheWVyc0NvdW50ID0gMDtcclxuXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRvYmogPSB0aGlzLl9sYXllcnNbaV07XHJcbiAgXHRcdFx0dGhpcy5fYWRkSXRlbShvYmopO1xyXG4gIFx0XHRcdG92ZXJsYXlzUHJlc2VudCA9IG92ZXJsYXlzUHJlc2VudCB8fCBvYmoub3ZlcmxheTtcclxuICBcdFx0XHRiYXNlTGF5ZXJzUHJlc2VudCA9IGJhc2VMYXllcnNQcmVzZW50IHx8ICFvYmoub3ZlcmxheTtcclxuICBcdFx0XHRiYXNlTGF5ZXJzQ291bnQgKz0gIW9iai5vdmVybGF5ID8gMSA6IDA7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEhpZGUgYmFzZSBsYXllcnMgc2VjdGlvbiBpZiB0aGVyZSdzIG9ubHkgb25lIGxheWVyLlxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlKSB7XHJcbiAgXHRcdFx0YmFzZUxheWVyc1ByZXNlbnQgPSBiYXNlTGF5ZXJzUHJlc2VudCAmJiBiYXNlTGF5ZXJzQ291bnQgPiAxO1xyXG4gIFx0XHRcdHRoaXMuX2Jhc2VMYXllcnNMaXN0LnN0eWxlLmRpc3BsYXkgPSBiYXNlTGF5ZXJzUHJlc2VudCA/ICcnIDogJ25vbmUnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9zZXBhcmF0b3Iuc3R5bGUuZGlzcGxheSA9IG92ZXJsYXlzUHJlc2VudCAmJiBiYXNlTGF5ZXJzUHJlc2VudCA/ICcnIDogJ25vbmUnO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbkxheWVyQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2hhbmRsaW5nQ2xpY2spIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG9iaiA9IHRoaXMuX2dldExheWVyKHN0YW1wKGUudGFyZ2V0KSk7XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBMYXllciBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IGJhc2VsYXllcmNoYW5nZTogTGF5ZXJzQ29udHJvbEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGJhc2UgbGF5ZXIgaXMgY2hhbmdlZCB0aHJvdWdoIHRoZSBbbGF5ZXJzIGNvbnRyb2xdKCNjb250cm9sLWxheWVycykuXHJcbiAgXHRcdC8vIEBldmVudCBvdmVybGF5YWRkOiBMYXllcnNDb250cm9sRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhbiBvdmVybGF5IGlzIHNlbGVjdGVkIHRocm91Z2ggdGhlIFtsYXllcnMgY29udHJvbF0oI2NvbnRyb2wtbGF5ZXJzKS5cclxuICBcdFx0Ly8gQGV2ZW50IG92ZXJsYXlyZW1vdmU6IExheWVyc0NvbnRyb2xFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGFuIG92ZXJsYXkgaXMgZGVzZWxlY3RlZCB0aHJvdWdoIHRoZSBbbGF5ZXJzIGNvbnRyb2xdKCNjb250cm9sLWxheWVycykuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgQ29udHJvbC5MYXllcnNcclxuICBcdFx0dmFyIHR5cGUgPSBvYmoub3ZlcmxheSA/XHJcbiAgXHRcdFx0KGUudHlwZSA9PT0gJ2FkZCcgPyAnb3ZlcmxheWFkZCcgOiAnb3ZlcmxheXJlbW92ZScpIDpcclxuICBcdFx0XHQoZS50eXBlID09PSAnYWRkJyA/ICdiYXNlbGF5ZXJjaGFuZ2UnIDogbnVsbCk7XHJcblxyXG4gIFx0XHRpZiAodHlwZSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5maXJlKHR5cGUsIG9iaik7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gSUU3IGJ1Z3Mgb3V0IGlmIHlvdSBjcmVhdGUgYSByYWRpbyBkeW5hbWljYWxseSwgc28geW91IGhhdmUgdG8gZG8gaXQgdGhpcyBoYWNreSB3YXkgKHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTE5MDc5KVxyXG4gIFx0X2NyZWF0ZVJhZGlvRWxlbWVudDogZnVuY3Rpb24gKG5hbWUsIGNoZWNrZWQpIHtcclxuXHJcbiAgXHRcdHZhciByYWRpb0h0bWwgPSAnPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvclwiIG5hbWU9XCInICtcclxuICBcdFx0XHRcdG5hbWUgKyAnXCInICsgKGNoZWNrZWQgPyAnIGNoZWNrZWQ9XCJjaGVja2VkXCInIDogJycpICsgJy8+JztcclxuXHJcbiAgXHRcdHZhciByYWRpb0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgXHRcdHJhZGlvRnJhZ21lbnQuaW5uZXJIVE1MID0gcmFkaW9IdG1sO1xyXG5cclxuICBcdFx0cmV0dXJuIHJhZGlvRnJhZ21lbnQuZmlyc3RDaGlsZDtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FkZEl0ZW06IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0dmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKSxcclxuICBcdFx0ICAgIGNoZWNrZWQgPSB0aGlzLl9tYXAuaGFzTGF5ZXIob2JqLmxheWVyKSxcclxuICBcdFx0ICAgIGlucHV0O1xyXG5cclxuICBcdFx0aWYgKG9iai5vdmVybGF5KSB7XHJcbiAgXHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gIFx0XHRcdGlucHV0LnR5cGUgPSAnY2hlY2tib3gnO1xyXG4gIFx0XHRcdGlucHV0LmNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNlbGVjdG9yJztcclxuICBcdFx0XHRpbnB1dC5kZWZhdWx0Q2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0aW5wdXQgPSB0aGlzLl9jcmVhdGVSYWRpb0VsZW1lbnQoJ2xlYWZsZXQtYmFzZS1sYXllcnNfJyArIHN0YW1wKHRoaXMpLCBjaGVja2VkKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLnB1c2goaW5wdXQpO1xyXG4gIFx0XHRpbnB1dC5sYXllcklkID0gc3RhbXAob2JqLmxheWVyKTtcclxuXHJcbiAgXHRcdG9uKGlucHV0LCAnY2xpY2snLCB0aGlzLl9vbklucHV0Q2xpY2ssIHRoaXMpO1xyXG5cclxuICBcdFx0dmFyIG5hbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgXHRcdG5hbWUuaW5uZXJIVE1MID0gJyAnICsgb2JqLm5hbWU7XHJcblxyXG4gIFx0XHQvLyBIZWxwcyBmcm9tIHByZXZlbnRpbmcgbGF5ZXIgY29udHJvbCBmbGlja2VyIHdoZW4gY2hlY2tib3hlcyBhcmUgZGlzYWJsZWRcclxuICBcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL0xlYWZsZXQvTGVhZmxldC9pc3N1ZXMvMjc3MVxyXG4gIFx0XHR2YXIgaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG5cclxuICBcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoaG9sZGVyKTtcclxuICBcdFx0aG9sZGVyLmFwcGVuZENoaWxkKGlucHV0KTtcclxuICBcdFx0aG9sZGVyLmFwcGVuZENoaWxkKG5hbWUpO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IG9iai5vdmVybGF5ID8gdGhpcy5fb3ZlcmxheXNMaXN0IDogdGhpcy5fYmFzZUxheWVyc0xpc3Q7XHJcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7XHJcblxyXG4gIFx0XHR0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCk7XHJcbiAgXHRcdHJldHVybiBsYWJlbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uSW5wdXRDbGljazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaW5wdXRzID0gdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLFxyXG4gIFx0XHQgICAgaW5wdXQsIGxheWVyO1xyXG4gIFx0XHR2YXIgYWRkZWRMYXllcnMgPSBbXSxcclxuICBcdFx0ICAgIHJlbW92ZWRMYXllcnMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsaW5nQ2xpY2sgPSB0cnVlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gIFx0XHRcdGlucHV0ID0gaW5wdXRzW2ldO1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fZ2V0TGF5ZXIoaW5wdXQubGF5ZXJJZCkubGF5ZXI7XHJcblxyXG4gIFx0XHRcdGlmIChpbnB1dC5jaGVja2VkKSB7XHJcbiAgXHRcdFx0XHRhZGRlZExheWVycy5wdXNoKGxheWVyKTtcclxuICBcdFx0XHR9IGVsc2UgaWYgKCFpbnB1dC5jaGVja2VkKSB7XHJcbiAgXHRcdFx0XHRyZW1vdmVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQnVnZml4IGlzc3VlIDIzMTg6IFNob3VsZCByZW1vdmUgYWxsIG9sZCBsYXllcnMgYmVmb3JlIHJlYWRkaW5nIG5ldyBvbmVzXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCByZW1vdmVkTGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX21hcC5oYXNMYXllcihyZW1vdmVkTGF5ZXJzW2ldKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fbWFwLnJlbW92ZUxheWVyKHJlbW92ZWRMYXllcnNbaV0pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRmb3IgKGkgPSAwOyBpIDwgYWRkZWRMYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRpZiAoIXRoaXMuX21hcC5oYXNMYXllcihhZGRlZExheWVyc1tpXSkpIHtcclxuICBcdFx0XHRcdHRoaXMuX21hcC5hZGRMYXllcihhZGRlZExheWVyc1tpXSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9oYW5kbGluZ0NsaWNrID0gZmFsc2U7XHJcblxyXG4gIFx0XHR0aGlzLl9yZWZvY3VzT25NYXAoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NoZWNrRGlzYWJsZWRMYXllcnM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGlucHV0cyA9IHRoaXMuX2xheWVyQ29udHJvbElucHV0cyxcclxuICBcdFx0ICAgIGlucHV0LFxyXG4gIFx0XHQgICAgbGF5ZXIsXHJcbiAgXHRcdCAgICB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSBpbnB1dHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICBcdFx0XHRpbnB1dCA9IGlucHV0c1tpXTtcclxuICBcdFx0XHRsYXllciA9IHRoaXMuX2dldExheWVyKGlucHV0LmxheWVySWQpLmxheWVyO1xyXG4gIFx0XHRcdGlucHV0LmRpc2FibGVkID0gKGxheWVyLm9wdGlvbnMubWluWm9vbSAhPT0gdW5kZWZpbmVkICYmIHpvb20gPCBsYXllci5vcHRpb25zLm1pblpvb20pIHx8XHJcbiAgXHRcdFx0ICAgICAgICAgICAgICAgICAobGF5ZXIub3B0aW9ucy5tYXhab29tICE9PSB1bmRlZmluZWQgJiYgem9vbSA+IGxheWVyLm9wdGlvbnMubWF4Wm9vbSk7XHJcblxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9leHBhbmRJZk5vdENvbGxhcHNlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmICF0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSB7XHJcbiAgXHRcdFx0dGhpcy5leHBhbmQoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2V4cGFuZFNhZmVseTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb247XHJcbiAgXHRcdG9uKHNlY3Rpb24sICdjbGljaycsIHByZXZlbnREZWZhdWx0KTtcclxuICBcdFx0dGhpcy5leHBhbmQoKTtcclxuICBcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0b2ZmKHNlY3Rpb24sICdjbGljaycsIHByZXZlbnREZWZhdWx0KTtcclxuICBcdFx0fSk7XHJcbiAgXHR9XHJcblxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5jb250cm9sLmxheWVycyhiYXNlbGF5ZXJzPzogT2JqZWN0LCBvdmVybGF5cz86IE9iamVjdCwgb3B0aW9ucz86IENvbnRyb2wuTGF5ZXJzIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhIGxheWVycyBjb250cm9sIHdpdGggdGhlIGdpdmVuIGxheWVycy4gQmFzZSBsYXllcnMgd2lsbCBiZSBzd2l0Y2hlZCB3aXRoIHJhZGlvIGJ1dHRvbnMsIHdoaWxlIG92ZXJsYXlzIHdpbGwgYmUgc3dpdGNoZWQgd2l0aCBjaGVja2JveGVzLiBOb3RlIHRoYXQgYWxsIGJhc2UgbGF5ZXJzIHNob3VsZCBiZSBwYXNzZWQgaW4gdGhlIGJhc2UgbGF5ZXJzIG9iamVjdCwgYnV0IG9ubHkgb25lIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbWFwIGR1cmluZyBtYXAgaW5zdGFudGlhdGlvbi5cclxuICB2YXIgbGF5ZXJzID0gZnVuY3Rpb24gKGJhc2VMYXllcnMsIG92ZXJsYXlzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cywgb3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBDb250cm9sLlpvb21cclxuICAgKiBAYWthIEwuQ29udHJvbC5ab29tXHJcbiAgICogQGluaGVyaXRzIENvbnRyb2xcclxuICAgKlxyXG4gICAqIEEgYmFzaWMgem9vbSBjb250cm9sIHdpdGggdHdvIGJ1dHRvbnMgKHpvb20gaW4gYW5kIHpvb20gb3V0KS4gSXQgaXMgcHV0IG9uIHRoZSBtYXAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IHNldCBpdHMgW2B6b29tQ29udHJvbGAgb3B0aW9uXSgjbWFwLXpvb21jb250cm9sKSB0byBgZmFsc2VgLiBFeHRlbmRzIGBDb250cm9sYC5cclxuICAgKi9cclxuXHJcbiAgdmFyIFpvb20gPSBDb250cm9sLmV4dGVuZCh7XHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBDb250cm9sLlpvb20gb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3NpdGlvbjogJ3RvcGxlZnQnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tSW5UZXh0OiBTdHJpbmcgPSAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+Kzwvc3Bhbj4nXHJcbiAgXHRcdC8vIFRoZSB0ZXh0IHNldCBvbiB0aGUgJ3pvb20gaW4nIGJ1dHRvbi5cclxuICBcdFx0em9vbUluVGV4dDogJzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPis8L3NwYW4+JyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbUluVGl0bGU6IFN0cmluZyA9ICdab29tIGluJ1xyXG4gIFx0XHQvLyBUaGUgdGl0bGUgc2V0IG9uIHRoZSAnem9vbSBpbicgYnV0dG9uLlxyXG4gIFx0XHR6b29tSW5UaXRsZTogJ1pvb20gaW4nLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tT3V0VGV4dDogU3RyaW5nID0gJzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiYjeDIyMTI7PC9zcGFuPidcclxuICBcdFx0Ly8gVGhlIHRleHQgc2V0IG9uIHRoZSAnem9vbSBvdXQnIGJ1dHRvbi5cclxuICBcdFx0em9vbU91dFRleHQ6ICc8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mI3gyMjEyOzwvc3Bhbj4nLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tT3V0VGl0bGU6IFN0cmluZyA9ICdab29tIG91dCdcclxuICBcdFx0Ly8gVGhlIHRpdGxlIHNldCBvbiB0aGUgJ3pvb20gb3V0JyBidXR0b24uXHJcbiAgXHRcdHpvb21PdXRUaXRsZTogJ1pvb20gb3V0J1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR2YXIgem9vbU5hbWUgPSAnbGVhZmxldC1jb250cm9sLXpvb20nLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsIHpvb21OYW1lICsgJyBsZWFmbGV0LWJhcicpLFxyXG4gIFx0XHQgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcclxuXHJcbiAgXHRcdHRoaXMuX3pvb21JbkJ1dHRvbiAgPSB0aGlzLl9jcmVhdGVCdXR0b24ob3B0aW9ucy56b29tSW5UZXh0LCBvcHRpb25zLnpvb21JblRpdGxlLFxyXG4gIFx0XHQgICAgICAgIHpvb21OYW1lICsgJy1pbicsICBjb250YWluZXIsIHRoaXMuX3pvb21Jbik7XHJcbiAgXHRcdHRoaXMuX3pvb21PdXRCdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24ob3B0aW9ucy56b29tT3V0VGV4dCwgb3B0aW9ucy56b29tT3V0VGl0bGUsXHJcbiAgXHRcdCAgICAgICAgem9vbU5hbWUgKyAnLW91dCcsIGNvbnRhaW5lciwgdGhpcy5fem9vbU91dCk7XHJcblxyXG4gIFx0XHR0aGlzLl91cGRhdGVEaXNhYmxlZCgpO1xyXG4gIFx0XHRtYXAub24oJ3pvb21lbmQgem9vbWxldmVsc2NoYW5nZScsIHRoaXMuX3VwZGF0ZURpc2FibGVkLCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiBjb250YWluZXI7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdG1hcC5vZmYoJ3pvb21lbmQgem9vbWxldmVsc2NoYW5nZScsIHRoaXMuX3VwZGF0ZURpc2FibGVkLCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9kaXNhYmxlZCA9IHRydWU7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZURpc2FibGVkKCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRlbmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcclxuICBcdFx0dGhpcy5fdXBkYXRlRGlzYWJsZWQoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF96b29tSW46IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5fbWFwLl96b29tIDwgdGhpcy5fbWFwLmdldE1heFpvb20oKSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC56b29tSW4odGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhICogKGUuc2hpZnRLZXkgPyAzIDogMSkpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF96b29tT3V0OiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMuX21hcC5fem9vbSA+IHRoaXMuX21hcC5nZXRNaW5ab29tKCkpIHtcclxuICBcdFx0XHR0aGlzLl9tYXAuem9vbU91dCh0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEgKiAoZS5zaGlmdEtleSA/IDMgOiAxKSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2NyZWF0ZUJ1dHRvbjogZnVuY3Rpb24gKGh0bWwsIHRpdGxlLCBjbGFzc05hbWUsIGNvbnRhaW5lciwgZm4pIHtcclxuICBcdFx0dmFyIGxpbmsgPSBjcmVhdGUkMSgnYScsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcclxuICBcdFx0bGluay5pbm5lckhUTUwgPSBodG1sO1xyXG4gIFx0XHRsaW5rLmhyZWYgPSAnIyc7XHJcbiAgXHRcdGxpbmsudGl0bGUgPSB0aXRsZTtcclxuXHJcbiAgXHRcdC8qXHJcbiAgXHRcdCAqIFdpbGwgZm9yY2Ugc2NyZWVuIHJlYWRlcnMgbGlrZSBWb2ljZU92ZXIgdG8gcmVhZCB0aGlzIGFzIFwiWm9vbSBpbiAtIGJ1dHRvblwiXHJcbiAgXHRcdCAqL1xyXG4gIFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTtcclxuICBcdFx0bGluay5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XHJcblxyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihsaW5rKTtcclxuICBcdFx0b24obGluaywgJ2NsaWNrJywgc3RvcCk7XHJcbiAgXHRcdG9uKGxpbmssICdjbGljaycsIGZuLCB0aGlzKTtcclxuICBcdFx0b24obGluaywgJ2NsaWNrJywgdGhpcy5fcmVmb2N1c09uTWFwLCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiBsaW5rO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlRGlzYWJsZWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcclxuICBcdFx0ICAgIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWRpc2FibGVkJztcclxuXHJcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbiwgY2xhc3NOYW1lKTtcclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fem9vbU91dEJ1dHRvbiwgY2xhc3NOYW1lKTtcclxuICBcdFx0dGhpcy5fem9vbUluQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG4gIFx0XHR0aGlzLl96b29tT3V0QnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2Rpc2FibGVkIHx8IG1hcC5fem9vbSA9PT0gbWFwLmdldE1pblpvb20oKSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3pvb21PdXRCdXR0b24sIGNsYXNzTmFtZSk7XHJcbiAgXHRcdFx0dGhpcy5fem9vbU91dEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICh0aGlzLl9kaXNhYmxlZCB8fCBtYXAuX3pvb20gPT09IG1hcC5nZXRNYXhab29tKCkpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl96b29tSW5CdXR0b24sIGNsYXNzTmFtZSk7XHJcbiAgXHRcdFx0dGhpcy5fem9vbUluQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBNYXBcclxuICAvLyBAc2VjdGlvbiBDb250cm9sIG9wdGlvbnNcclxuICAvLyBAb3B0aW9uIHpvb21Db250cm9sOiBCb29sZWFuID0gdHJ1ZVxyXG4gIC8vIFdoZXRoZXIgYSBbem9vbSBjb250cm9sXSgjY29udHJvbC16b29tKSBpcyBhZGRlZCB0byB0aGUgbWFwIGJ5IGRlZmF1bHQuXHJcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XHJcbiAgXHR6b29tQ29udHJvbDogdHJ1ZVxyXG4gIH0pO1xyXG5cclxuICBNYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24gKCkge1xyXG4gIFx0aWYgKHRoaXMub3B0aW9ucy56b29tQ29udHJvbCkge1xyXG4gIFx0XHQvLyBAc2VjdGlvbiBDb250cm9sc1xyXG4gIFx0XHQvLyBAcHJvcGVydHkgem9vbUNvbnRyb2w6IENvbnRyb2wuWm9vbVxyXG4gIFx0XHQvLyBUaGUgZGVmYXVsdCB6b29tIGNvbnRyb2wgKG9ubHkgYXZhaWxhYmxlIGlmIHRoZVxyXG4gIFx0XHQvLyBbYHpvb21Db250cm9sYCBvcHRpb25dKCNtYXAtem9vbWNvbnRyb2wpIHdhcyBgdHJ1ZWAgd2hlbiBjcmVhdGluZyB0aGUgbWFwKS5cclxuICBcdFx0dGhpcy56b29tQ29udHJvbCA9IG5ldyBab29tKCk7XHJcbiAgXHRcdHRoaXMuYWRkQ29udHJvbCh0aGlzLnpvb21Db250cm9sKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBDb250cm9sLlpvb21cclxuICAvLyBAZmFjdG9yeSBMLmNvbnRyb2wuem9vbShvcHRpb25zOiBDb250cm9sLlpvb20gb3B0aW9ucylcclxuICAvLyBDcmVhdGVzIGEgem9vbSBjb250cm9sXHJcbiAgdmFyIHpvb20gPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBab29tKG9wdGlvbnMpO1xyXG4gIH07XG5cbiAgLypcbiAgICogQGNsYXNzIENvbnRyb2wuU2NhbGVcbiAgICogQGFrYSBMLkNvbnRyb2wuU2NhbGVcbiAgICogQGluaGVyaXRzIENvbnRyb2xcbiAgICpcbiAgICogQSBzaW1wbGUgc2NhbGUgY29udHJvbCB0aGF0IHNob3dzIHRoZSBzY2FsZSBvZiB0aGUgY3VycmVudCBjZW50ZXIgb2Ygc2NyZWVuIGluIG1ldHJpYyAobS9rbSkgYW5kIGltcGVyaWFsIChtaS9mdCkgc3lzdGVtcy4gRXh0ZW5kcyBgQ29udHJvbGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIEwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgU2NhbGUgPSBDb250cm9sLmV4dGVuZCh7XG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIENvbnRyb2wuU2NhbGUgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdHBvc2l0aW9uOiAnYm90dG9tbGVmdCcsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4V2lkdGg6IE51bWJlciA9IDEwMFxuICBcdFx0Ly8gTWF4aW11bSB3aWR0aCBvZiB0aGUgY29udHJvbCBpbiBwaXhlbHMuIFRoZSB3aWR0aCBpcyBzZXQgZHluYW1pY2FsbHkgdG8gc2hvdyByb3VuZCB2YWx1ZXMgKGUuZy4gMTAwLCAyMDAsIDUwMCkuXG4gIFx0XHRtYXhXaWR0aDogMTAwLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG1ldHJpYzogQm9vbGVhbiA9IFRydWVcbiAgXHRcdC8vIFdoZXRoZXIgdG8gc2hvdyB0aGUgbWV0cmljIHNjYWxlIGxpbmUgKG0va20pLlxuICBcdFx0bWV0cmljOiB0cnVlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGltcGVyaWFsOiBCb29sZWFuID0gVHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBzaG93IHRoZSBpbXBlcmlhbCBzY2FsZSBsaW5lIChtaS9mdCkuXG4gIFx0XHRpbXBlcmlhbDogdHJ1ZVxuXG4gIFx0XHQvLyBAb3B0aW9uIHVwZGF0ZVdoZW5JZGxlOiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgaXMgdXBkYXRlZCBvbiBbYG1vdmVlbmRgXSgjbWFwLW1vdmVlbmQpLCBvdGhlcndpc2UgaXQncyBhbHdheXMgdXAtdG8tZGF0ZSAodXBkYXRlZCBvbiBbYG1vdmVgXSgjbWFwLW1vdmUpKS5cbiAgXHR9LFxuXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHZhciBjbGFzc05hbWUgPSAnbGVhZmxldC1jb250cm9sLXNjYWxlJyxcbiAgXHRcdCAgICBjb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lKSxcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIFx0XHR0aGlzLl9hZGRTY2FsZXMob3B0aW9ucywgY2xhc3NOYW1lICsgJy1saW5lJywgY29udGFpbmVyKTtcblxuICBcdFx0bWFwLm9uKG9wdGlvbnMudXBkYXRlV2hlbklkbGUgPyAnbW92ZWVuZCcgOiAnbW92ZScsIHRoaXMuX3VwZGF0ZSwgdGhpcyk7XG4gIFx0XHRtYXAud2hlblJlYWR5KHRoaXMuX3VwZGF0ZSwgdGhpcyk7XG5cbiAgXHRcdHJldHVybiBjb250YWluZXI7XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHRtYXAub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZSA/ICdtb3ZlZW5kJyA6ICdtb3ZlJywgdGhpcy5fdXBkYXRlLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X2FkZFNjYWxlczogZnVuY3Rpb24gKG9wdGlvbnMsIGNsYXNzTmFtZSwgY29udGFpbmVyKSB7XG4gIFx0XHRpZiAob3B0aW9ucy5tZXRyaWMpIHtcbiAgXHRcdFx0dGhpcy5fbVNjYWxlID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcbiAgXHRcdH1cbiAgXHRcdGlmIChvcHRpb25zLmltcGVyaWFsKSB7XG4gIFx0XHRcdHRoaXMuX2lTY2FsZSA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUsIGNvbnRhaW5lcik7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgeSA9IG1hcC5nZXRTaXplKCkueSAvIDI7XG5cbiAgXHRcdHZhciBtYXhNZXRlcnMgPSBtYXAuZGlzdGFuY2UoXG4gIFx0XHRcdG1hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLCB5XSksXG4gIFx0XHRcdG1hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKFt0aGlzLm9wdGlvbnMubWF4V2lkdGgsIHldKSk7XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZVNjYWxlcyhtYXhNZXRlcnMpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU2NhbGVzOiBmdW5jdGlvbiAobWF4TWV0ZXJzKSB7XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm1ldHJpYyAmJiBtYXhNZXRlcnMpIHtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlTWV0cmljKG1heE1ldGVycyk7XG4gIFx0XHR9XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmltcGVyaWFsICYmIG1heE1ldGVycykge1xuICBcdFx0XHR0aGlzLl91cGRhdGVJbXBlcmlhbChtYXhNZXRlcnMpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlTWV0cmljOiBmdW5jdGlvbiAobWF4TWV0ZXJzKSB7XG4gIFx0XHR2YXIgbWV0ZXJzID0gdGhpcy5fZ2V0Um91bmROdW0obWF4TWV0ZXJzKSxcbiAgXHRcdCAgICBsYWJlbCA9IG1ldGVycyA8IDEwMDAgPyBtZXRlcnMgKyAnIG0nIDogKG1ldGVycyAvIDEwMDApICsgJyBrbSc7XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX21TY2FsZSwgbGFiZWwsIG1ldGVycyAvIG1heE1ldGVycyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVJbXBlcmlhbDogZnVuY3Rpb24gKG1heE1ldGVycykge1xuICBcdFx0dmFyIG1heEZlZXQgPSBtYXhNZXRlcnMgKiAzLjI4MDgzOTksXG4gIFx0XHQgICAgbWF4TWlsZXMsIG1pbGVzLCBmZWV0O1xuXG4gIFx0XHRpZiAobWF4RmVldCA+IDUyODApIHtcbiAgXHRcdFx0bWF4TWlsZXMgPSBtYXhGZWV0IC8gNTI4MDtcbiAgXHRcdFx0bWlsZXMgPSB0aGlzLl9nZXRSb3VuZE51bShtYXhNaWxlcyk7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVNjYWxlKHRoaXMuX2lTY2FsZSwgbWlsZXMgKyAnIG1pJywgbWlsZXMgLyBtYXhNaWxlcyk7XG5cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGZlZXQgPSB0aGlzLl9nZXRSb3VuZE51bShtYXhGZWV0KTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLCBmZWV0ICsgJyBmdCcsIGZlZXQgLyBtYXhGZWV0KTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVNjYWxlOiBmdW5jdGlvbiAoc2NhbGUsIHRleHQsIHJhdGlvKSB7XG4gIFx0XHRzY2FsZS5zdHlsZS53aWR0aCA9IE1hdGgucm91bmQodGhpcy5vcHRpb25zLm1heFdpZHRoICogcmF0aW8pICsgJ3B4JztcbiAgXHRcdHNjYWxlLmlubmVySFRNTCA9IHRleHQ7XG4gIFx0fSxcblxuICBcdF9nZXRSb3VuZE51bTogZnVuY3Rpb24gKG51bSkge1xuICBcdFx0dmFyIHBvdzEwID0gTWF0aC5wb3coMTAsIChNYXRoLmZsb29yKG51bSkgKyAnJykubGVuZ3RoIC0gMSksXG4gIFx0XHQgICAgZCA9IG51bSAvIHBvdzEwO1xuXG4gIFx0XHRkID0gZCA+PSAxMCA/IDEwIDpcbiAgXHRcdCAgICBkID49IDUgPyA1IDpcbiAgXHRcdCAgICBkID49IDMgPyAzIDpcbiAgXHRcdCAgICBkID49IDIgPyAyIDogMTtcblxuICBcdFx0cmV0dXJuIHBvdzEwICogZDtcbiAgXHR9XG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5jb250cm9sLnNjYWxlKG9wdGlvbnM/OiBDb250cm9sLlNjYWxlIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYW4gc2NhbGUgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICB2YXIgc2NhbGUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgU2NhbGUob3B0aW9ucyk7XG4gIH07XG5cbiAgdmFyIHVrcmFpbmlhbkZsYWcgPSAnPHN2ZyBhcmlhLWhpZGRlbj1cInRydWVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjhcIiB2aWV3Qm94PVwiMCAwIDEyIDhcIiBjbGFzcz1cImxlYWZsZXQtYXR0cmlidXRpb24tZmxhZ1wiPjxwYXRoIGZpbGw9XCIjNEM3QkUxXCIgZD1cIk0wIDBoMTJ2NEgwelwiLz48cGF0aCBmaWxsPVwiI0ZGRDUwMFwiIGQ9XCJNMCA0aDEydjNIMHpcIi8+PHBhdGggZmlsbD1cIiNFMEJDMDBcIiBkPVwiTTAgN2gxMnYxSDB6XCIvPjwvc3ZnPic7XHJcblxyXG5cclxuICAvKlxyXG4gICAqIEBjbGFzcyBDb250cm9sLkF0dHJpYnV0aW9uXHJcbiAgICogQGFrYSBMLkNvbnRyb2wuQXR0cmlidXRpb25cclxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxyXG4gICAqXHJcbiAgICogVGhlIGF0dHJpYnV0aW9uIGNvbnRyb2wgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGF0dHJpYnV0aW9uIGRhdGEgaW4gYSBzbWFsbCB0ZXh0IGJveCBvbiBhIG1hcC4gSXQgaXMgcHV0IG9uIHRoZSBtYXAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IHNldCBpdHMgW2BhdHRyaWJ1dGlvbkNvbnRyb2xgIG9wdGlvbl0oI21hcC1hdHRyaWJ1dGlvbmNvbnRyb2wpIHRvIGBmYWxzZWAsIGFuZCBpdCBmZXRjaGVzIGF0dHJpYnV0aW9uIHRleHRzIGZyb20gbGF5ZXJzIHdpdGggdGhlIFtgZ2V0QXR0cmlidXRpb25gIG1ldGhvZF0oI2xheWVyLWdldGF0dHJpYnV0aW9uKSBhdXRvbWF0aWNhbGx5LiBFeHRlbmRzIENvbnRyb2wuXHJcbiAgICovXHJcblxyXG4gIHZhciBBdHRyaWJ1dGlvbiA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuQXR0cmlidXRpb24gb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3NpdGlvbjogJ2JvdHRvbXJpZ2h0JyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcHJlZml4OiBTdHJpbmd8ZmFsc2UgPSAnTGVhZmxldCdcclxuICBcdFx0Ly8gVGhlIEhUTUwgdGV4dCBzaG93biBiZWZvcmUgdGhlIGF0dHJpYnV0aW9ucy4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUuXHJcbiAgXHRcdHByZWZpeDogJzxhIGhyZWY9XCJodHRwczovL2xlYWZsZXRqcy5jb21cIiB0aXRsZT1cIkEgSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzXCI+JyArIChCcm93c2VyLmlubGluZVN2ZyA/IHVrcmFpbmlhbkZsYWcgKyAnICcgOiAnJykgKyAnTGVhZmxldDwvYT4nXHJcbiAgXHR9LFxyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR0aGlzLl9hdHRyaWJ1dGlvbnMgPSB7fTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0bWFwLmF0dHJpYnV0aW9uQ29udHJvbCA9IHRoaXM7XHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCAnbGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uJyk7XHJcbiAgXHRcdGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKHRoaXMuX2NvbnRhaW5lcik7XHJcblxyXG4gIFx0XHQvLyBUT0RPIHVnbHksIHJlZmFjdG9yXHJcbiAgXHRcdGZvciAodmFyIGkgaW4gbWFwLl9sYXllcnMpIHtcclxuICBcdFx0XHRpZiAobWFwLl9sYXllcnNbaV0uZ2V0QXR0cmlidXRpb24pIHtcclxuICBcdFx0XHRcdHRoaXMuYWRkQXR0cmlidXRpb24obWFwLl9sYXllcnNbaV0uZ2V0QXR0cmlidXRpb24oKSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcclxuXHJcbiAgXHRcdG1hcC5vbignbGF5ZXJhZGQnLCB0aGlzLl9hZGRBdHRyaWJ1dGlvbiwgdGhpcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHRtYXAub2ZmKCdsYXllcmFkZCcsIHRoaXMuX2FkZEF0dHJpYnV0aW9uLCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FkZEF0dHJpYnV0aW9uOiBmdW5jdGlvbiAoZXYpIHtcclxuICBcdFx0aWYgKGV2LmxheWVyLmdldEF0dHJpYnV0aW9uKSB7XHJcbiAgXHRcdFx0dGhpcy5hZGRBdHRyaWJ1dGlvbihldi5sYXllci5nZXRBdHRyaWJ1dGlvbigpKTtcclxuICBcdFx0XHRldi5sYXllci5vbmNlKCdyZW1vdmUnLCBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0aW9uKGV2LmxheWVyLmdldEF0dHJpYnV0aW9uKCkpO1xyXG4gIFx0XHRcdH0sIHRoaXMpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UHJlZml4KHByZWZpeDogU3RyaW5nfGZhbHNlKTogdGhpc1xyXG4gIFx0Ly8gVGhlIEhUTUwgdGV4dCBzaG93biBiZWZvcmUgdGhlIGF0dHJpYnV0aW9ucy4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUuXHJcbiAgXHRzZXRQcmVmaXg6IGZ1bmN0aW9uIChwcmVmaXgpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnByZWZpeCA9IHByZWZpeDtcclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEF0dHJpYnV0aW9uKHRleHQ6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gYXR0cmlidXRpb24gdGV4dCAoZS5nLiBgJyZjb3B5OyBPcGVuU3RyZWV0TWFwIGNvbnRyaWJ1dG9ycydgKS5cclxuICBcdGFkZEF0dHJpYnV0aW9uOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gIFx0XHRpZiAoIXRleHQpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmICghdGhpcy5fYXR0cmlidXRpb25zW3RleHRdKSB7XHJcbiAgXHRcdFx0dGhpcy5fYXR0cmlidXRpb25zW3RleHRdID0gMDtcclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0rKztcclxuXHJcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlQXR0cmlidXRpb24odGV4dDogU3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyBhbiBhdHRyaWJ1dGlvbiB0ZXh0LlxyXG4gIFx0cmVtb3ZlQXR0cmlidXRpb246IGZ1bmN0aW9uICh0ZXh0KSB7XHJcbiAgXHRcdGlmICghdGV4dCkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XSkge1xyXG4gIFx0XHRcdHRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XS0tO1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciBhdHRyaWJzID0gW107XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2F0dHJpYnV0aW9ucykge1xyXG4gIFx0XHRcdGlmICh0aGlzLl9hdHRyaWJ1dGlvbnNbaV0pIHtcclxuICBcdFx0XHRcdGF0dHJpYnMucHVzaChpKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBwcmVmaXhBbmRBdHRyaWJzID0gW107XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLnByZWZpeCkge1xyXG4gIFx0XHRcdHByZWZpeEFuZEF0dHJpYnMucHVzaCh0aGlzLm9wdGlvbnMucHJlZml4KTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoYXR0cmlicy5sZW5ndGgpIHtcclxuICBcdFx0XHRwcmVmaXhBbmRBdHRyaWJzLnB1c2goYXR0cmlicy5qb2luKCcsICcpKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fY29udGFpbmVyLmlubmVySFRNTCA9IHByZWZpeEFuZEF0dHJpYnMuam9pbignIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnw8L3NwYW4+ICcpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIENvbnRyb2wgb3B0aW9uc1xyXG4gIC8vIEBvcHRpb24gYXR0cmlidXRpb25Db250cm9sOiBCb29sZWFuID0gdHJ1ZVxyXG4gIC8vIFdoZXRoZXIgYSBbYXR0cmlidXRpb24gY29udHJvbF0oI2NvbnRyb2wtYXR0cmlidXRpb24pIGlzIGFkZGVkIHRvIHRoZSBtYXAgYnkgZGVmYXVsdC5cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdGF0dHJpYnV0aW9uQ29udHJvbDogdHJ1ZVxyXG4gIH0pO1xyXG5cclxuICBNYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24gKCkge1xyXG4gIFx0aWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wpIHtcclxuICBcdFx0bmV3IEF0dHJpYnV0aW9uKCkuYWRkVG8odGhpcyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgQ29udHJvbC5BdHRyaWJ1dGlvblxyXG4gIC8vIEBmYWN0b3J5IEwuY29udHJvbC5hdHRyaWJ1dGlvbihvcHRpb25zOiBDb250cm9sLkF0dHJpYnV0aW9uIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhbiBhdHRyaWJ1dGlvbiBjb250cm9sLlxyXG4gIHZhciBhdHRyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEF0dHJpYnV0aW9uKG9wdGlvbnMpO1xyXG4gIH07XG5cbiAgQ29udHJvbC5MYXllcnMgPSBMYXllcnM7XG4gIENvbnRyb2wuWm9vbSA9IFpvb207XG4gIENvbnRyb2wuU2NhbGUgPSBTY2FsZTtcbiAgQ29udHJvbC5BdHRyaWJ1dGlvbiA9IEF0dHJpYnV0aW9uO1xuXG4gIGNvbnRyb2wubGF5ZXJzID0gbGF5ZXJzO1xuICBjb250cm9sLnpvb20gPSB6b29tO1xuICBjb250cm9sLnNjYWxlID0gc2NhbGU7XG4gIGNvbnRyb2wuYXR0cmlidXRpb24gPSBhdHRyaWJ1dGlvbjtcblxuICAvKlxuICBcdEwuSGFuZGxlciBpcyBhIGJhc2UgY2xhc3MgZm9yIGhhbmRsZXIgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHkgdG8gaW5qZWN0XG4gIFx0aW50ZXJhY3Rpb24gZmVhdHVyZXMgbGlrZSBkcmFnZ2luZyB0byBjbGFzc2VzIGxpa2UgTWFwIGFuZCBNYXJrZXIuXG4gICovXG5cbiAgLy8gQGNsYXNzIEhhbmRsZXJcbiAgLy8gQGFrYSBMLkhhbmRsZXJcbiAgLy8gQWJzdHJhY3QgY2xhc3MgZm9yIG1hcCBpbnRlcmFjdGlvbiBoYW5kbGVyc1xuXG4gIHZhciBIYW5kbGVyID0gQ2xhc3MuZXh0ZW5kKHtcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHR0aGlzLl9tYXAgPSBtYXA7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZW5hYmxlKCk6IHRoaXNcbiAgXHQvLyBFbmFibGVzIHRoZSBoYW5kbGVyXG4gIFx0ZW5hYmxlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fZW5hYmxlZCkgeyByZXR1cm4gdGhpczsgfVxuXG4gIFx0XHR0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgXHRcdHRoaXMuYWRkSG9va3MoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGRpc2FibGUoKTogdGhpc1xuICBcdC8vIERpc2FibGVzIHRoZSBoYW5kbGVyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9lbmFibGVkKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMucmVtb3ZlSG9va3MoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGVuYWJsZWQoKTogQm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBoYW5kbGVyIGlzIGVuYWJsZWRcbiAgXHRlbmFibGVkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICBcdH1cblxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXG4gIFx0Ly8gQ2xhc3NlcyBpbmhlcml0aW5nIGZyb20gYEhhbmRsZXJgIG11c3QgaW1wbGVtZW50IHRoZSB0d28gZm9sbG93aW5nIG1ldGhvZHM6XG4gIFx0Ly8gQG1ldGhvZCBhZGRIb29rcygpXG4gIFx0Ly8gQ2FsbGVkIHdoZW4gdGhlIGhhbmRsZXIgaXMgZW5hYmxlZCwgc2hvdWxkIGFkZCBldmVudCBob29rcy5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUhvb2tzKClcbiAgXHQvLyBDYWxsZWQgd2hlbiB0aGUgaGFuZGxlciBpcyBkaXNhYmxlZCwgc2hvdWxkIHJlbW92ZSB0aGUgZXZlbnQgaG9va3MgYWRkZWQgcHJldmlvdXNseS5cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gVGhlcmUgaXMgc3RhdGljIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBpbnN0YW50aWF0aW5nIEwuSGFuZGxlcjpcbiAgLy8gQGZ1bmN0aW9uIGFkZFRvKG1hcDogTWFwLCBuYW1lOiBTdHJpbmcpOiB0aGlzXG4gIC8vIEFkZHMgYSBuZXcgSGFuZGxlciB0byB0aGUgZ2l2ZW4gbWFwIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gIEhhbmRsZXIuYWRkVG8gPSBmdW5jdGlvbiAobWFwLCBuYW1lKSB7XG4gIFx0bWFwLmFkZEhhbmRsZXIobmFtZSwgdGhpcyk7XG4gIFx0cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIE1peGluID0ge0V2ZW50czogRXZlbnRzfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBEcmFnZ2FibGVcclxuICAgKiBAYWthIEwuRHJhZ2dhYmxlXHJcbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcclxuICAgKlxyXG4gICAqIEEgY2xhc3MgZm9yIG1ha2luZyBET00gZWxlbWVudHMgZHJhZ2dhYmxlIChpbmNsdWRpbmcgdG91Y2ggc3VwcG9ydCkuXHJcbiAgICogVXNlZCBpbnRlcm5hbGx5IGZvciBtYXAgYW5kIG1hcmtlciBkcmFnZ2luZy4gT25seSB3b3JrcyBmb3IgZWxlbWVudHNcclxuICAgKiB0aGF0IHdlcmUgcG9zaXRpb25lZCB3aXRoIFtgTC5Eb21VdGlsLnNldFBvc2l0aW9uYF0oI2RvbXV0aWwtc2V0cG9zaXRpb24pLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBkcmFnZ2FibGUgPSBuZXcgTC5EcmFnZ2FibGUoZWxlbWVudFRvRHJhZyk7XHJcbiAgICogZHJhZ2dhYmxlLmVuYWJsZSgpO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgU1RBUlQgPSBCcm93c2VyLnRvdWNoID8gJ3RvdWNoc3RhcnQgbW91c2Vkb3duJyA6ICdtb3VzZWRvd24nO1xyXG5cclxuICB2YXIgRHJhZ2dhYmxlID0gRXZlbnRlZC5leHRlbmQoe1xyXG5cclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQHNlY3Rpb25cclxuICBcdFx0Ly8gQGFrYSBEcmFnZ2FibGUgb3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIGNsaWNrVG9sZXJhbmNlOiBOdW1iZXIgPSAzXHJcbiAgXHRcdC8vIFRoZSBtYXggbnVtYmVyIG9mIHBpeGVscyBhIHVzZXIgY2FuIHNoaWZ0IHRoZSBtb3VzZSBwb2ludGVyIGR1cmluZyBhIGNsaWNrXHJcbiAgXHRcdC8vIGZvciBpdCB0byBiZSBjb25zaWRlcmVkIGEgdmFsaWQgY2xpY2sgKGFzIG9wcG9zZWQgdG8gYSBtb3VzZSBkcmFnKS5cclxuICBcdFx0Y2xpY2tUb2xlcmFuY2U6IDNcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQGNvbnN0cnVjdG9yIEwuRHJhZ2dhYmxlKGVsOiBIVE1MRWxlbWVudCwgZHJhZ0hhbmRsZT86IEhUTUxFbGVtZW50LCBwcmV2ZW50T3V0bGluZT86IEJvb2xlYW4sIG9wdGlvbnM/OiBEcmFnZ2FibGUgb3B0aW9ucylcclxuICBcdC8vIENyZWF0ZXMgYSBgRHJhZ2dhYmxlYCBvYmplY3QgZm9yIG1vdmluZyBgZWxgIHdoZW4geW91IHN0YXJ0IGRyYWdnaW5nIHRoZSBgZHJhZ0hhbmRsZWAgZWxlbWVudCAoZXF1YWxzIGBlbGAgaXRzZWxmIGJ5IGRlZmF1bHQpLlxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGVsZW1lbnQsIGRyYWdTdGFydFRhcmdldCwgcHJldmVudE91dGxpbmUsIG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xyXG4gIFx0XHR0aGlzLl9kcmFnU3RhcnRUYXJnZXQgPSBkcmFnU3RhcnRUYXJnZXQgfHwgZWxlbWVudDtcclxuICBcdFx0dGhpcy5fcHJldmVudE91dGxpbmUgPSBwcmV2ZW50T3V0bGluZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBlbmFibGUoKVxyXG4gIFx0Ly8gRW5hYmxlcyB0aGUgZHJhZ2dpbmcgYWJpbGl0eVxyXG4gIFx0ZW5hYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9lbmFibGVkKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0b24odGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LCBTVEFSVCwgdGhpcy5fb25Eb3duLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGRpc2FibGUoKVxyXG4gIFx0Ly8gRGlzYWJsZXMgdGhlIGRyYWdnaW5nIGFiaWxpdHlcclxuICBcdGRpc2FibGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9lbmFibGVkKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gSWYgd2UncmUgY3VycmVudGx5IGRyYWdnaW5nIHRoaXMgZHJhZ2dhYmxlLFxyXG4gIFx0XHQvLyBkaXNhYmxpbmcgaXQgY291bnRzIGFzIGZpcnN0IGVuZGluZyB0aGUgZHJhZy5cclxuICBcdFx0aWYgKERyYWdnYWJsZS5fZHJhZ2dpbmcgPT09IHRoaXMpIHtcclxuICBcdFx0XHR0aGlzLmZpbmlzaERyYWcodHJ1ZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdG9mZih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsIFNUQVJULCB0aGlzLl9vbkRvd24sIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xyXG4gIFx0XHR0aGlzLl9tb3ZlZCA9IGZhbHNlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25Eb3duOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHQvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGRpc2FibGVkOyB0aGlzIGhhcHBlbnMgaW4gSUUxMVxyXG4gIFx0XHQvLyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHNlZSAjMzY2Ni5cclxuICBcdFx0aWYgKCF0aGlzLl9lbmFibGVkKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcclxuXHJcbiAgXHRcdGlmIChoYXNDbGFzcyh0aGlzLl9lbGVtZW50LCAnbGVhZmxldC16b29tLWFuaW0nKSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmIChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCAhPT0gMSkge1xyXG4gIFx0XHRcdC8vIEZpbmlzaCBkcmFnZ2luZyB0byBhdm9pZCBjb25mbGljdCB3aXRoIHRvdWNoWm9vbVxyXG4gIFx0XHRcdGlmIChEcmFnZ2FibGUuX2RyYWdnaW5nID09PSB0aGlzKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmZpbmlzaERyYWcoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoRHJhZ2dhYmxlLl9kcmFnZ2luZyB8fCBlLnNoaWZ0S2V5IHx8ICgoZS53aGljaCAhPT0gMSkgJiYgKGUuYnV0dG9uICE9PSAxKSAmJiAhZS50b3VjaGVzKSkgeyByZXR1cm47IH1cclxuICBcdFx0RHJhZ2dhYmxlLl9kcmFnZ2luZyA9IHRoaXM7ICAvLyBQcmV2ZW50IGRyYWdnaW5nIG11bHRpcGxlIG9iamVjdHMgYXQgb25jZS5cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9wcmV2ZW50T3V0bGluZSkge1xyXG4gIFx0XHRcdHByZXZlbnRPdXRsaW5lKHRoaXMuX2VsZW1lbnQpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRkaXNhYmxlSW1hZ2VEcmFnKCk7XHJcbiAgXHRcdGRpc2FibGVUZXh0U2VsZWN0aW9uKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbW92aW5nKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGRvd246IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSBkcmFnIGlzIGFib3V0IHRvIHN0YXJ0LlxyXG4gIFx0XHR0aGlzLmZpcmUoJ2Rvd24nKTtcclxuXHJcbiAgXHRcdHZhciBmaXJzdCA9IGUudG91Y2hlcyA/IGUudG91Y2hlc1swXSA6IGUsXHJcbiAgXHRcdCAgICBzaXplZFBhcmVudCA9IGdldFNpemVkUGFyZW50Tm9kZSh0aGlzLl9lbGVtZW50KTtcclxuXHJcbiAgXHRcdHRoaXMuX3N0YXJ0UG9pbnQgPSBuZXcgUG9pbnQoZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSk7XHJcbiAgXHRcdHRoaXMuX3N0YXJ0UG9zID0gZ2V0UG9zaXRpb24odGhpcy5fZWxlbWVudCk7XHJcblxyXG4gIFx0XHQvLyBDYWNoZSB0aGUgc2NhbGUsIHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVvdXNseSBjb21wZW5zYXRlIGZvciBpdCBkdXJpbmcgZHJhZyAoX29uTW92ZSkuXHJcbiAgXHRcdHRoaXMuX3BhcmVudFNjYWxlID0gZ2V0U2NhbGUoc2l6ZWRQYXJlbnQpO1xyXG5cclxuICBcdFx0dmFyIG1vdXNlZXZlbnQgPSBlLnR5cGUgPT09ICdtb3VzZWRvd24nO1xyXG4gIFx0XHRvbihkb2N1bWVudCwgbW91c2VldmVudCA/ICdtb3VzZW1vdmUnIDogJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwgdGhpcyk7XHJcbiAgXHRcdG9uKGRvY3VtZW50LCBtb3VzZWV2ZW50ID8gJ21vdXNldXAnIDogJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgdGhpcy5fb25VcCwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbk1vdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdC8vIElnbm9yZSB0aGUgZXZlbnQgaWYgZGlzYWJsZWQ7IHRoaXMgaGFwcGVucyBpbiBJRTExXHJcbiAgXHRcdC8vIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgc2VlICMzNjY2LlxyXG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRpZiAoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPiAxKSB7XHJcbiAgXHRcdFx0dGhpcy5fbW92ZWQgPSB0cnVlO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGZpcnN0ID0gKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID09PSAxID8gZS50b3VjaGVzWzBdIDogZSksXHJcbiAgXHRcdCAgICBvZmZzZXQgPSBuZXcgUG9pbnQoZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSkuX3N1YnRyYWN0KHRoaXMuX3N0YXJ0UG9pbnQpO1xyXG5cclxuICBcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdGlmIChNYXRoLmFicyhvZmZzZXQueCkgKyBNYXRoLmFicyhvZmZzZXQueSkgPCB0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHQvLyBXZSBhc3N1bWUgdGhhdCB0aGUgcGFyZW50IGNvbnRhaW5lcidzIHBvc2l0aW9uLCBib3JkZXIgYW5kIHNjYWxlIGRvIG5vdCBjaGFuZ2UgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZHJhZy5cclxuICBcdFx0Ly8gVGhlcmVmb3JlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIHBvc2l0aW9uIGFuZCBib3JkZXIgKHRoZXkgYXJlIGVsaW1pbmF0ZWQgYnkgdGhlIHN1YnRyYWN0aW9uKVxyXG4gIFx0XHQvLyBhbmQgd2UgY2FuIHVzZSB0aGUgY2FjaGVkIHZhbHVlIGZvciB0aGUgc2NhbGUuXHJcbiAgXHRcdG9mZnNldC54IC89IHRoaXMuX3BhcmVudFNjYWxlLng7XHJcbiAgXHRcdG9mZnNldC55IC89IHRoaXMuX3BhcmVudFNjYWxlLnk7XHJcblxyXG4gIFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5fbW92ZWQpIHtcclxuICBcdFx0XHQvLyBAZXZlbnQgZHJhZ3N0YXJ0OiBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSBkcmFnIHN0YXJ0c1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnZHJhZ3N0YXJ0Jyk7XHJcblxyXG4gIFx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcclxuXHJcbiAgXHRcdFx0YWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2xlYWZsZXQtZHJhZ2dpbmcnKTtcclxuXHJcbiAgXHRcdFx0dGhpcy5fbGFzdFRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcclxuICBcdFx0XHQvLyBJRSBhbmQgRWRnZSBkbyBub3QgZ2l2ZSB0aGUgPHVzZT4gZWxlbWVudCwgc28gZmV0Y2ggaXRcclxuICBcdFx0XHQvLyBpZiBuZWNlc3NhcnlcclxuICBcdFx0XHRpZiAod2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSAmJiB0aGlzLl9sYXN0VGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fbGFzdFRhcmdldCA9IHRoaXMuX2xhc3RUYXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQ7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX2xhc3RUYXJnZXQsICdsZWFmbGV0LWRyYWctdGFyZ2V0Jyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX25ld1BvcyA9IHRoaXMuX3N0YXJ0UG9zLmFkZChvZmZzZXQpO1xyXG4gIFx0XHR0aGlzLl9tb3ZpbmcgPSB0cnVlO1xyXG5cclxuICBcdFx0dGhpcy5fbGFzdEV2ZW50ID0gZTtcclxuICBcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZVBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBlID0ge29yaWdpbmFsRXZlbnQ6IHRoaXMuX2xhc3RFdmVudH07XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgcHJlZHJhZzogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgY29udGludW91c2x5IGR1cmluZyBkcmFnZ2luZyAqYmVmb3JlKiBlYWNoIGNvcnJlc3BvbmRpbmdcclxuICBcdFx0Ly8gdXBkYXRlIG9mIHRoZSBlbGVtZW50J3MgcG9zaXRpb24uXHJcbiAgXHRcdHRoaXMuZmlyZSgncHJlZHJhZycsIGUpO1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9lbGVtZW50LCB0aGlzLl9uZXdQb3MpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGRyYWc6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIGNvbnRpbnVvdXNseSBkdXJpbmcgZHJhZ2dpbmcuXHJcbiAgXHRcdHRoaXMuZmlyZSgnZHJhZycsIGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25VcDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHQvLyBJZ25vcmUgdGhlIGV2ZW50IGlmIGRpc2FibGVkOyB0aGlzIGhhcHBlbnMgaW4gSUUxMVxyXG4gIFx0XHQvLyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHNlZSAjMzY2Ni5cclxuICBcdFx0aWYgKCF0aGlzLl9lbmFibGVkKSB7IHJldHVybjsgfVxyXG4gIFx0XHR0aGlzLmZpbmlzaERyYWcoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0ZmluaXNoRHJhZzogZnVuY3Rpb24gKG5vSW5lcnRpYSkge1xyXG4gIFx0XHRyZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCAnbGVhZmxldC1kcmFnZ2luZycpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xhc3RUYXJnZXQpIHtcclxuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9sYXN0VGFyZ2V0LCAnbGVhZmxldC1kcmFnLXRhcmdldCcpO1xyXG4gIFx0XHRcdHRoaXMuX2xhc3RUYXJnZXQgPSBudWxsO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRvZmYoZG9jdW1lbnQsICdtb3VzZW1vdmUgdG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlLCB0aGlzKTtcclxuICBcdFx0b2ZmKGRvY3VtZW50LCAnbW91c2V1cCB0b3VjaGVuZCB0b3VjaGNhbmNlbCcsIHRoaXMuX29uVXAsIHRoaXMpO1xyXG5cclxuICBcdFx0ZW5hYmxlSW1hZ2VEcmFnKCk7XHJcbiAgXHRcdGVuYWJsZVRleHRTZWxlY3Rpb24oKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tb3ZlZCAmJiB0aGlzLl9tb3ZpbmcpIHtcclxuXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IGRyYWdlbmQ6IERyYWdFbmRFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gdGhlIGRyYWcgZW5kcy5cclxuICBcdFx0XHR0aGlzLmZpcmUoJ2RyYWdlbmQnLCB7XHJcbiAgXHRcdFx0XHRub0luZXJ0aWE6IG5vSW5lcnRpYSxcclxuICBcdFx0XHRcdGRpc3RhbmNlOiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcylcclxuICBcdFx0XHR9KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbW92aW5nID0gZmFsc2U7XHJcbiAgXHRcdERyYWdnYWJsZS5fZHJhZ2dpbmcgPSBmYWxzZTtcclxuICBcdH1cclxuXHJcbiAgfSk7XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIExpbmVVdGlsXHJcbiAgICpcclxuICAgKiBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwb2x5bGluZSBwb2ludHMgcHJvY2Vzc2luZywgdXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkgdG8gbWFrZSBwb2x5bGluZXMgbGlnaHRuaW5nLWZhc3QuXHJcbiAgICovXHJcblxyXG4gIC8vIFNpbXBsaWZ5IHBvbHlsaW5lIHdpdGggdmVydGV4IHJlZHVjdGlvbiBhbmQgRG91Z2xhcy1QZXVja2VyIHNpbXBsaWZpY2F0aW9uLlxyXG4gIC8vIEltcHJvdmVzIHJlbmRlcmluZyBwZXJmb3JtYW5jZSBkcmFtYXRpY2FsbHkgYnkgbGVzc2VuaW5nIHRoZSBudW1iZXIgb2YgcG9pbnRzIHRvIGRyYXcuXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzaW1wbGlmeShwb2ludHM6IFBvaW50W10sIHRvbGVyYW5jZTogTnVtYmVyKTogUG9pbnRbXVxyXG4gIC8vIERyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBudW1iZXIgb2YgcG9pbnRzIGluIGEgcG9seWxpbmUgd2hpbGUgcmV0YWluaW5nXHJcbiAgLy8gaXRzIHNoYXBlIGFuZCByZXR1cm5zIGEgbmV3IGFycmF5IG9mIHNpbXBsaWZpZWQgcG9pbnRzLCB1c2luZyB0aGVcclxuICAvLyBbUmFtZXItRG91Z2xhcy1QZXVja2VyIGFsZ29yaXRobV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmFtZXItRG91Z2xhcy1QZXVja2VyX2FsZ29yaXRobSkuXHJcbiAgLy8gVXNlZCBmb3IgYSBodWdlIHBlcmZvcm1hbmNlIGJvb3N0IHdoZW4gcHJvY2Vzc2luZy9kaXNwbGF5aW5nIExlYWZsZXQgcG9seWxpbmVzIGZvclxyXG4gIC8vIGVhY2ggem9vbSBsZXZlbCBhbmQgYWxzbyByZWR1Y2luZyB2aXN1YWwgbm9pc2UuIHRvbGVyYW5jZSBhZmZlY3RzIHRoZSBhbW91bnQgb2ZcclxuICAvLyBzaW1wbGlmaWNhdGlvbiAobGVzc2VyIHZhbHVlIG1lYW5zIGhpZ2hlciBxdWFsaXR5IGJ1dCBzbG93ZXIgYW5kIHdpdGggbW9yZSBwb2ludHMpLlxyXG4gIC8vIEFsc28gcmVsZWFzZWQgYXMgYSBzZXBhcmF0ZWQgbWljcm8tbGlicmFyeSBbU2ltcGxpZnkuanNdKGh0dHBzOi8vbW91cm5lci5naXRodWIuaW8vc2ltcGxpZnktanMvKS5cclxuICBmdW5jdGlvbiBzaW1wbGlmeShwb2ludHMsIHRvbGVyYW5jZSkge1xyXG4gIFx0aWYgKCF0b2xlcmFuY2UgfHwgIXBvaW50cy5sZW5ndGgpIHtcclxuICBcdFx0cmV0dXJuIHBvaW50cy5zbGljZSgpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBzcVRvbGVyYW5jZSA9IHRvbGVyYW5jZSAqIHRvbGVyYW5jZTtcclxuXHJcbiAgXHQgICAgLy8gc3RhZ2UgMTogdmVydGV4IHJlZHVjdGlvblxyXG4gIFx0ICAgIHBvaW50cyA9IF9yZWR1Y2VQb2ludHMocG9pbnRzLCBzcVRvbGVyYW5jZSk7XHJcblxyXG4gIFx0ICAgIC8vIHN0YWdlIDI6IERvdWdsYXMtUGV1Y2tlciBzaW1wbGlmaWNhdGlvblxyXG4gIFx0ICAgIHBvaW50cyA9IF9zaW1wbGlmeURQKHBvaW50cywgc3FUb2xlcmFuY2UpO1xyXG5cclxuICBcdHJldHVybiBwb2ludHM7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gcG9pbnRUb1NlZ21lbnREaXN0YW5jZShwOiBQb2ludCwgcDE6IFBvaW50LCBwMjogUG9pbnQpOiBOdW1iZXJcclxuICAvLyBSZXR1cm5zIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHBvaW50IGBwYCBhbmQgc2VnbWVudCBgcDFgIHRvIGBwMmAuXHJcbiAgZnVuY3Rpb24gcG9pbnRUb1NlZ21lbnREaXN0YW5jZShwLCBwMSwgcDIpIHtcclxuICBcdHJldHVybiBNYXRoLnNxcnQoX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHAsIHAxLCBwMiwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNsb3Nlc3RQb2ludE9uU2VnbWVudChwOiBQb2ludCwgcDE6IFBvaW50LCBwMjogUG9pbnQpOiBOdW1iZXJcclxuICAvLyBSZXR1cm5zIHRoZSBjbG9zZXN0IHBvaW50IGZyb20gYSBwb2ludCBgcGAgb24gYSBzZWdtZW50IGBwMWAgdG8gYHAyYC5cclxuICBmdW5jdGlvbiBjbG9zZXN0UG9pbnRPblNlZ21lbnQocCwgcDEsIHAyKSB7XHJcbiAgXHRyZXR1cm4gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHAsIHAxLCBwMik7XHJcbiAgfVxyXG5cclxuICAvLyBSYW1lci1Eb3VnbGFzLVBldWNrZXIgc2ltcGxpZmljYXRpb24sIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYW1lci1Eb3VnbGFzLVBldWNrZXJfYWxnb3JpdGhtXHJcbiAgZnVuY3Rpb24gX3NpbXBsaWZ5RFAocG9pbnRzLCBzcVRvbGVyYW5jZSkge1xyXG5cclxuICBcdHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxyXG4gIFx0ICAgIEFycmF5Q29uc3RydWN0b3IgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gdW5kZWZpbmVkICsgJycgPyBVaW50OEFycmF5IDogQXJyYXksXHJcbiAgXHQgICAgbWFya2VycyA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGxlbik7XHJcblxyXG4gIFx0ICAgIG1hcmtlcnNbMF0gPSBtYXJrZXJzW2xlbiAtIDFdID0gMTtcclxuXHJcbiAgXHRfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgMCwgbGVuIC0gMSk7XHJcblxyXG4gIFx0dmFyIGksXHJcbiAgXHQgICAgbmV3UG9pbnRzID0gW107XHJcblxyXG4gIFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdGlmIChtYXJrZXJzW2ldKSB7XHJcbiAgXHRcdFx0bmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBuZXdQb2ludHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgZmlyc3QsIGxhc3QpIHtcclxuXHJcbiAgXHR2YXIgbWF4U3FEaXN0ID0gMCxcclxuICBcdGluZGV4LCBpLCBzcURpc3Q7XHJcblxyXG4gIFx0Zm9yIChpID0gZmlyc3QgKyAxOyBpIDw9IGxhc3QgLSAxOyBpKyspIHtcclxuICBcdFx0c3FEaXN0ID0gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHBvaW50c1tpXSwgcG9pbnRzW2ZpcnN0XSwgcG9pbnRzW2xhc3RdLCB0cnVlKTtcclxuXHJcbiAgXHRcdGlmIChzcURpc3QgPiBtYXhTcURpc3QpIHtcclxuICBcdFx0XHRpbmRleCA9IGk7XHJcbiAgXHRcdFx0bWF4U3FEaXN0ID0gc3FEaXN0O1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKG1heFNxRGlzdCA+IHNxVG9sZXJhbmNlKSB7XHJcbiAgXHRcdG1hcmtlcnNbaW5kZXhdID0gMTtcclxuXHJcbiAgXHRcdF9zaW1wbGlmeURQU3RlcChwb2ludHMsIG1hcmtlcnMsIHNxVG9sZXJhbmNlLCBmaXJzdCwgaW5kZXgpO1xyXG4gIFx0XHRfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgaW5kZXgsIGxhc3QpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gcmVkdWNlIHBvaW50cyB0aGF0IGFyZSB0b28gY2xvc2UgdG8gZWFjaCBvdGhlciB0byBhIHNpbmdsZSBwb2ludFxyXG4gIGZ1bmN0aW9uIF9yZWR1Y2VQb2ludHMocG9pbnRzLCBzcVRvbGVyYW5jZSkge1xyXG4gIFx0dmFyIHJlZHVjZWRQb2ludHMgPSBbcG9pbnRzWzBdXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMSwgcHJldiA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRpZiAoX3NxRGlzdChwb2ludHNbaV0sIHBvaW50c1twcmV2XSkgPiBzcVRvbGVyYW5jZSkge1xyXG4gIFx0XHRcdHJlZHVjZWRQb2ludHMucHVzaChwb2ludHNbaV0pO1xyXG4gIFx0XHRcdHByZXYgPSBpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRpZiAocHJldiA8IGxlbiAtIDEpIHtcclxuICBcdFx0cmVkdWNlZFBvaW50cy5wdXNoKHBvaW50c1tsZW4gLSAxXSk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gcmVkdWNlZFBvaW50cztcclxuICB9XHJcblxyXG4gIHZhciBfbGFzdENvZGU7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjbGlwU2VnbWVudChhOiBQb2ludCwgYjogUG9pbnQsIGJvdW5kczogQm91bmRzLCB1c2VMYXN0Q29kZT86IEJvb2xlYW4sIHJvdW5kPzogQm9vbGVhbik6IFBvaW50W118Qm9vbGVhblxyXG4gIC8vIENsaXBzIHRoZSBzZWdtZW50IGEgdG8gYiBieSByZWN0YW5ndWxhciBib3VuZHMgd2l0aCB0aGVcclxuICAvLyBbQ29oZW4tU3V0aGVybGFuZCBhbGdvcml0aG1dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvaGVuJUUyJTgwJTkzU3V0aGVybGFuZF9hbGdvcml0aG0pXHJcbiAgLy8gKG1vZGlmeWluZyB0aGUgc2VnbWVudCBwb2ludHMgZGlyZWN0bHkhKS4gVXNlZCBieSBMZWFmbGV0IHRvIG9ubHkgc2hvdyBwb2x5bGluZVxyXG4gIC8vIHBvaW50cyB0aGF0IGFyZSBvbiB0aGUgc2NyZWVuIG9yIG5lYXIsIGluY3JlYXNpbmcgcGVyZm9ybWFuY2UuXHJcbiAgZnVuY3Rpb24gY2xpcFNlZ21lbnQoYSwgYiwgYm91bmRzLCB1c2VMYXN0Q29kZSwgcm91bmQpIHtcclxuICBcdHZhciBjb2RlQSA9IHVzZUxhc3RDb2RlID8gX2xhc3RDb2RlIDogX2dldEJpdENvZGUoYSwgYm91bmRzKSxcclxuICBcdCAgICBjb2RlQiA9IF9nZXRCaXRDb2RlKGIsIGJvdW5kcyksXHJcblxyXG4gIFx0ICAgIGNvZGVPdXQsIHAsIG5ld0NvZGU7XHJcblxyXG4gIFx0ICAgIC8vIHNhdmUgMm5kIGNvZGUgdG8gYXZvaWQgY2FsY3VsYXRpbmcgaXQgb24gdGhlIG5leHQgc2VnbWVudFxyXG4gIFx0ICAgIF9sYXN0Q29kZSA9IGNvZGVCO1xyXG5cclxuICBcdHdoaWxlICh0cnVlKSB7XHJcbiAgXHRcdC8vIGlmIGEsYiBpcyBpbnNpZGUgdGhlIGNsaXAgd2luZG93ICh0cml2aWFsIGFjY2VwdClcclxuICBcdFx0aWYgKCEoY29kZUEgfCBjb2RlQikpIHtcclxuICBcdFx0XHRyZXR1cm4gW2EsIGJdO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBpZiBhLGIgaXMgb3V0c2lkZSB0aGUgY2xpcCB3aW5kb3cgKHRyaXZpYWwgcmVqZWN0KVxyXG4gIFx0XHRpZiAoY29kZUEgJiBjb2RlQikge1xyXG4gIFx0XHRcdHJldHVybiBmYWxzZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gb3RoZXIgY2FzZXNcclxuICBcdFx0Y29kZU91dCA9IGNvZGVBIHx8IGNvZGVCO1xyXG4gIFx0XHRwID0gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYSwgYiwgY29kZU91dCwgYm91bmRzLCByb3VuZCk7XHJcbiAgXHRcdG5ld0NvZGUgPSBfZ2V0Qml0Q29kZShwLCBib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKGNvZGVPdXQgPT09IGNvZGVBKSB7XHJcbiAgXHRcdFx0YSA9IHA7XHJcbiAgXHRcdFx0Y29kZUEgPSBuZXdDb2RlO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGIgPSBwO1xyXG4gIFx0XHRcdGNvZGVCID0gbmV3Q29kZTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYSwgYiwgY29kZSwgYm91bmRzLCByb3VuZCkge1xyXG4gIFx0dmFyIGR4ID0gYi54IC0gYS54LFxyXG4gIFx0ICAgIGR5ID0gYi55IC0gYS55LFxyXG4gIFx0ICAgIG1pbiA9IGJvdW5kcy5taW4sXHJcbiAgXHQgICAgbWF4ID0gYm91bmRzLm1heCxcclxuICBcdCAgICB4LCB5O1xyXG5cclxuICBcdGlmIChjb2RlICYgOCkgeyAvLyB0b3BcclxuICBcdFx0eCA9IGEueCArIGR4ICogKG1heC55IC0gYS55KSAvIGR5O1xyXG4gIFx0XHR5ID0gbWF4Lnk7XHJcblxyXG4gIFx0fSBlbHNlIGlmIChjb2RlICYgNCkgeyAvLyBib3R0b21cclxuICBcdFx0eCA9IGEueCArIGR4ICogKG1pbi55IC0gYS55KSAvIGR5O1xyXG4gIFx0XHR5ID0gbWluLnk7XHJcblxyXG4gIFx0fSBlbHNlIGlmIChjb2RlICYgMikgeyAvLyByaWdodFxyXG4gIFx0XHR4ID0gbWF4Lng7XHJcbiAgXHRcdHkgPSBhLnkgKyBkeSAqIChtYXgueCAtIGEueCkgLyBkeDtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKGNvZGUgJiAxKSB7IC8vIGxlZnRcclxuICBcdFx0eCA9IG1pbi54O1xyXG4gIFx0XHR5ID0gYS55ICsgZHkgKiAobWluLnggLSBhLngpIC8gZHg7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIG5ldyBQb2ludCh4LCB5LCByb3VuZCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZ2V0Qml0Q29kZShwLCBib3VuZHMpIHtcclxuICBcdHZhciBjb2RlID0gMDtcclxuXHJcbiAgXHRpZiAocC54IDwgYm91bmRzLm1pbi54KSB7IC8vIGxlZnRcclxuICBcdFx0Y29kZSB8PSAxO1xyXG4gIFx0fSBlbHNlIGlmIChwLnggPiBib3VuZHMubWF4LngpIHsgLy8gcmlnaHRcclxuICBcdFx0Y29kZSB8PSAyO1xyXG4gIFx0fVxyXG5cclxuICBcdGlmIChwLnkgPCBib3VuZHMubWluLnkpIHsgLy8gYm90dG9tXHJcbiAgXHRcdGNvZGUgfD0gNDtcclxuICBcdH0gZWxzZSBpZiAocC55ID4gYm91bmRzLm1heC55KSB7IC8vIHRvcFxyXG4gIFx0XHRjb2RlIHw9IDg7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIGNvZGU7XHJcbiAgfVxyXG5cclxuICAvLyBzcXVhcmUgZGlzdGFuY2UgKHRvIGF2b2lkIHVubmVjZXNzYXJ5IE1hdGguc3FydCBjYWxscylcclxuICBmdW5jdGlvbiBfc3FEaXN0KHAxLCBwMikge1xyXG4gIFx0dmFyIGR4ID0gcDIueCAtIHAxLngsXHJcbiAgXHQgICAgZHkgPSBwMi55IC0gcDEueTtcclxuICBcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcclxuICB9XHJcblxyXG4gIC8vIHJldHVybiBjbG9zZXN0IHBvaW50IG9uIHNlZ21lbnQgb3IgZGlzdGFuY2UgdG8gdGhhdCBwb2ludFxyXG4gIGZ1bmN0aW9uIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIsIHNxRGlzdCkge1xyXG4gIFx0dmFyIHggPSBwMS54LFxyXG4gIFx0ICAgIHkgPSBwMS55LFxyXG4gIFx0ICAgIGR4ID0gcDIueCAtIHgsXHJcbiAgXHQgICAgZHkgPSBwMi55IC0geSxcclxuICBcdCAgICBkb3QgPSBkeCAqIGR4ICsgZHkgKiBkeSxcclxuICBcdCAgICB0O1xyXG5cclxuICBcdGlmIChkb3QgPiAwKSB7XHJcbiAgXHRcdHQgPSAoKHAueCAtIHgpICogZHggKyAocC55IC0geSkgKiBkeSkgLyBkb3Q7XHJcblxyXG4gIFx0XHRpZiAodCA+IDEpIHtcclxuICBcdFx0XHR4ID0gcDIueDtcclxuICBcdFx0XHR5ID0gcDIueTtcclxuICBcdFx0fSBlbHNlIGlmICh0ID4gMCkge1xyXG4gIFx0XHRcdHggKz0gZHggKiB0O1xyXG4gIFx0XHRcdHkgKz0gZHkgKiB0O1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0ZHggPSBwLnggLSB4O1xyXG4gIFx0ZHkgPSBwLnkgLSB5O1xyXG5cclxuICBcdHJldHVybiBzcURpc3QgPyBkeCAqIGR4ICsgZHkgKiBkeSA6IG5ldyBQb2ludCh4LCB5KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gaXNGbGF0KGxhdGxuZ3M6IExhdExuZ1tdKTogQm9vbGVhblxyXG4gIC8vIFJldHVybnMgdHJ1ZSBpZiBgbGF0bG5nc2AgaXMgYSBmbGF0IGFycmF5LCBmYWxzZSBpcyBuZXN0ZWQuXHJcbiAgZnVuY3Rpb24gaXNGbGF0KGxhdGxuZ3MpIHtcclxuICBcdHJldHVybiAhaXNBcnJheShsYXRsbmdzWzBdKSB8fCAodHlwZW9mIGxhdGxuZ3NbMF1bMF0gIT09ICdvYmplY3QnICYmIHR5cGVvZiBsYXRsbmdzWzBdWzBdICE9PSAndW5kZWZpbmVkJyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZmxhdChsYXRsbmdzKSB7XHJcbiAgXHRjb25zb2xlLndhcm4oJ0RlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuJyk7XHJcbiAgXHRyZXR1cm4gaXNGbGF0KGxhdGxuZ3MpO1xyXG4gIH1cclxuXHJcbiAgLyogQGZ1bmN0aW9uIHBvbHlsaW5lQ2VudGVyKGxhdGxuZ3M6IExhdExuZ1tdLCBjcnM6IENSUyk6IExhdExuZ1xyXG4gICAqIFJldHVybnMgdGhlIGNlbnRlciAoW2NlbnRyb2lkXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NlbnRyb2lkKSkgb2YgdGhlIHBhc3NlZCBMYXRMbmdzIChmaXJzdCByaW5nKSBmcm9tIGEgcG9seWxpbmUuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcG9seWxpbmVDZW50ZXIobGF0bG5ncywgY3JzKSB7XHJcbiAgXHR2YXIgaSwgaGFsZkRpc3QsIHNlZ0Rpc3QsIGRpc3QsIHAxLCBwMiwgcmF0aW8sIGNlbnRlcjtcclxuXHJcbiAgXHRpZiAoIWxhdGxuZ3MgfHwgbGF0bG5ncy5sZW5ndGggPT09IDApIHtcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdsYXRsbmdzIG5vdCBwYXNzZWQnKTtcclxuICBcdH1cclxuXHJcbiAgXHRpZiAoIWlzRmxhdChsYXRsbmdzKSkge1xyXG4gIFx0XHRjb25zb2xlLndhcm4oJ2xhdGxuZ3MgYXJlIG5vdCBmbGF0ISBPbmx5IHRoZSBmaXJzdCByaW5nIHdpbGwgYmUgdXNlZCcpO1xyXG4gIFx0XHRsYXRsbmdzID0gbGF0bG5nc1swXTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgcG9pbnRzID0gW107XHJcbiAgXHRmb3IgKHZhciBqIGluIGxhdGxuZ3MpIHtcclxuICBcdFx0cG9pbnRzLnB1c2goY3JzLnByb2plY3QodG9MYXRMbmcobGF0bG5nc1tqXSkpKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgbGVuID0gcG9pbnRzLmxlbmd0aDtcclxuXHJcbiAgXHRmb3IgKGkgPSAwLCBoYWxmRGlzdCA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHtcclxuICBcdFx0aGFsZkRpc3QgKz0gcG9pbnRzW2ldLmRpc3RhbmNlVG8ocG9pbnRzW2kgKyAxXSkgLyAyO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIFRoZSBsaW5lIGlzIHNvIHNtYWxsIGluIHRoZSBjdXJyZW50IHZpZXcgdGhhdCBhbGwgcG9pbnRzIGFyZSBvbiB0aGUgc2FtZSBwaXhlbC5cclxuICBcdGlmIChoYWxmRGlzdCA9PT0gMCkge1xyXG4gIFx0XHRjZW50ZXIgPSBwb2ludHNbMF07XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRmb3IgKGkgPSAwLCBkaXN0ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xyXG4gIFx0XHRcdHAxID0gcG9pbnRzW2ldO1xyXG4gIFx0XHRcdHAyID0gcG9pbnRzW2kgKyAxXTtcclxuICBcdFx0XHRzZWdEaXN0ID0gcDEuZGlzdGFuY2VUbyhwMik7XHJcbiAgXHRcdFx0ZGlzdCArPSBzZWdEaXN0O1xyXG5cclxuICBcdFx0XHRpZiAoZGlzdCA+IGhhbGZEaXN0KSB7XHJcbiAgXHRcdFx0XHRyYXRpbyA9IChkaXN0IC0gaGFsZkRpc3QpIC8gc2VnRGlzdDtcclxuICBcdFx0XHRcdGNlbnRlciA9IFtcclxuICBcdFx0XHRcdFx0cDIueCAtIHJhdGlvICogKHAyLnggLSBwMS54KSxcclxuICBcdFx0XHRcdFx0cDIueSAtIHJhdGlvICogKHAyLnkgLSBwMS55KVxyXG4gIFx0XHRcdFx0XTtcclxuICBcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGNycy51bnByb2plY3QodG9Qb2ludChjZW50ZXIpKTtcclxuICB9XG5cbiAgdmFyIExpbmVVdGlsID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBzaW1wbGlmeTogc2ltcGxpZnksXG4gICAgcG9pbnRUb1NlZ21lbnREaXN0YW5jZTogcG9pbnRUb1NlZ21lbnREaXN0YW5jZSxcbiAgICBjbG9zZXN0UG9pbnRPblNlZ21lbnQ6IGNsb3Nlc3RQb2ludE9uU2VnbWVudCxcbiAgICBjbGlwU2VnbWVudDogY2xpcFNlZ21lbnQsXG4gICAgX2dldEVkZ2VJbnRlcnNlY3Rpb246IF9nZXRFZGdlSW50ZXJzZWN0aW9uLFxuICAgIF9nZXRCaXRDb2RlOiBfZ2V0Qml0Q29kZSxcbiAgICBfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQ6IF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCxcbiAgICBpc0ZsYXQ6IGlzRmxhdCxcbiAgICBfZmxhdDogX2ZsYXQsXG4gICAgcG9seWxpbmVDZW50ZXI6IHBvbHlsaW5lQ2VudGVyXG4gIH07XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIFBvbHlVdGlsXHJcbiAgICogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgcG9seWdvbiBnZW9tZXRyaWVzLlxyXG4gICAqL1xyXG5cclxuICAvKiBAZnVuY3Rpb24gY2xpcFBvbHlnb24ocG9pbnRzOiBQb2ludFtdLCBib3VuZHM6IEJvdW5kcywgcm91bmQ/OiBCb29sZWFuKTogUG9pbnRbXVxyXG4gICAqIENsaXBzIHRoZSBwb2x5Z29uIGdlb21ldHJ5IGRlZmluZWQgYnkgdGhlIGdpdmVuIGBwb2ludHNgIGJ5IHRoZSBnaXZlbiBib3VuZHMgKHVzaW5nIHRoZSBbU3V0aGVybGFuZC1Ib2RnbWFuIGFsZ29yaXRobV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3V0aGVybGFuZCVFMiU4MCU5M0hvZGdtYW5fYWxnb3JpdGhtKSkuXHJcbiAgICogVXNlZCBieSBMZWFmbGV0IHRvIG9ubHkgc2hvdyBwb2x5Z29uIHBvaW50cyB0aGF0IGFyZSBvbiB0aGUgc2NyZWVuIG9yIG5lYXIsIGluY3JlYXNpbmdcclxuICAgKiBwZXJmb3JtYW5jZS4gTm90ZSB0aGF0IHBvbHlnb24gcG9pbnRzIG5lZWRzIGRpZmZlcmVudCBhbGdvcml0aG0gZm9yIGNsaXBwaW5nXHJcbiAgICogdGhhbiBwb2x5bGluZSwgc28gdGhlcmUncyBhIHNlcGFyYXRlIG1ldGhvZCBmb3IgaXQuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2xpcFBvbHlnb24ocG9pbnRzLCBib3VuZHMsIHJvdW5kKSB7XHJcbiAgXHR2YXIgY2xpcHBlZFBvaW50cyxcclxuICBcdCAgICBlZGdlcyA9IFsxLCA0LCAyLCA4XSxcclxuICBcdCAgICBpLCBqLCBrLFxyXG4gIFx0ICAgIGEsIGIsXHJcbiAgXHQgICAgbGVuLCBlZGdlLCBwO1xyXG5cclxuICBcdGZvciAoaSA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRwb2ludHNbaV0uX2NvZGUgPSBfZ2V0Qml0Q29kZShwb2ludHNbaV0sIGJvdW5kcyk7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gZm9yIGVhY2ggZWRnZSAobGVmdCwgYm90dG9tLCByaWdodCwgdG9wKVxyXG4gIFx0Zm9yIChrID0gMDsgayA8IDQ7IGsrKykge1xyXG4gIFx0XHRlZGdlID0gZWRnZXNba107XHJcbiAgXHRcdGNsaXBwZWRQb2ludHMgPSBbXTtcclxuXHJcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGgsIGogPSBsZW4gLSAxOyBpIDwgbGVuOyBqID0gaSsrKSB7XHJcbiAgXHRcdFx0YSA9IHBvaW50c1tpXTtcclxuICBcdFx0XHRiID0gcG9pbnRzW2pdO1xyXG5cclxuICBcdFx0XHQvLyBpZiBhIGlzIGluc2lkZSB0aGUgY2xpcCB3aW5kb3dcclxuICBcdFx0XHRpZiAoIShhLl9jb2RlICYgZWRnZSkpIHtcclxuICBcdFx0XHRcdC8vIGlmIGIgaXMgb3V0c2lkZSB0aGUgY2xpcCB3aW5kb3cgKGEtPmIgZ29lcyBvdXQgb2Ygc2NyZWVuKVxyXG4gIFx0XHRcdFx0aWYgKGIuX2NvZGUgJiBlZGdlKSB7XHJcbiAgXHRcdFx0XHRcdHAgPSBfZ2V0RWRnZUludGVyc2VjdGlvbihiLCBhLCBlZGdlLCBib3VuZHMsIHJvdW5kKTtcclxuICBcdFx0XHRcdFx0cC5fY29kZSA9IF9nZXRCaXRDb2RlKHAsIGJvdW5kcyk7XHJcbiAgXHRcdFx0XHRcdGNsaXBwZWRQb2ludHMucHVzaChwKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHRcdGNsaXBwZWRQb2ludHMucHVzaChhKTtcclxuXHJcbiAgXHRcdFx0Ly8gZWxzZSBpZiBiIGlzIGluc2lkZSB0aGUgY2xpcCB3aW5kb3cgKGEtPmIgZW50ZXJzIHRoZSBzY3JlZW4pXHJcbiAgXHRcdFx0fSBlbHNlIGlmICghKGIuX2NvZGUgJiBlZGdlKSkge1xyXG4gIFx0XHRcdFx0cCA9IF9nZXRFZGdlSW50ZXJzZWN0aW9uKGIsIGEsIGVkZ2UsIGJvdW5kcywgcm91bmQpO1xyXG4gIFx0XHRcdFx0cC5fY29kZSA9IF9nZXRCaXRDb2RlKHAsIGJvdW5kcyk7XHJcbiAgXHRcdFx0XHRjbGlwcGVkUG9pbnRzLnB1c2gocCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHBvaW50cyA9IGNsaXBwZWRQb2ludHM7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIHBvaW50cztcclxuICB9XHJcblxyXG4gIC8qIEBmdW5jdGlvbiBwb2x5Z29uQ2VudGVyKGxhdGxuZ3M6IExhdExuZ1tdIGNyczogQ1JTKTogTGF0TG5nXHJcbiAgICogUmV0dXJucyB0aGUgY2VudGVyIChbY2VudHJvaWRdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2VudHJvaWQpKSBvZiB0aGUgcGFzc2VkIExhdExuZ3MgKGZpcnN0IHJpbmcpIGZyb20gYSBwb2x5Z29uLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBvbHlnb25DZW50ZXIobGF0bG5ncywgY3JzKSB7XHJcbiAgXHR2YXIgaSwgaiwgcDEsIHAyLCBmLCBhcmVhLCB4LCB5LCBjZW50ZXI7XHJcblxyXG4gIFx0aWYgKCFsYXRsbmdzIHx8IGxhdGxuZ3MubGVuZ3RoID09PSAwKSB7XHJcbiAgXHRcdHRocm93IG5ldyBFcnJvcignbGF0bG5ncyBub3QgcGFzc2VkJyk7XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKCFpc0ZsYXQobGF0bG5ncykpIHtcclxuICBcdFx0Y29uc29sZS53YXJuKCdsYXRsbmdzIGFyZSBub3QgZmxhdCEgT25seSB0aGUgZmlyc3QgcmluZyB3aWxsIGJlIHVzZWQnKTtcclxuICBcdFx0bGF0bG5ncyA9IGxhdGxuZ3NbMF07XHJcbiAgXHR9XHJcblxyXG4gIFx0dmFyIHBvaW50cyA9IFtdO1xyXG4gIFx0Zm9yICh2YXIgayBpbiBsYXRsbmdzKSB7XHJcbiAgXHRcdHBvaW50cy5wdXNoKGNycy5wcm9qZWN0KHRvTGF0TG5nKGxhdGxuZ3Nba10pKSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0dmFyIGxlbiA9IHBvaW50cy5sZW5ndGg7XHJcbiAgXHRhcmVhID0geCA9IHkgPSAwO1xyXG5cclxuICBcdC8vIHBvbHlnb24gY2VudHJvaWQgYWxnb3JpdGhtO1xyXG4gIFx0Zm9yIChpID0gMCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcclxuICBcdFx0cDEgPSBwb2ludHNbaV07XHJcbiAgXHRcdHAyID0gcG9pbnRzW2pdO1xyXG5cclxuICBcdFx0ZiA9IHAxLnkgKiBwMi54IC0gcDIueSAqIHAxLng7XHJcbiAgXHRcdHggKz0gKHAxLnggKyBwMi54KSAqIGY7XHJcbiAgXHRcdHkgKz0gKHAxLnkgKyBwMi55KSAqIGY7XHJcbiAgXHRcdGFyZWEgKz0gZiAqIDM7XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKGFyZWEgPT09IDApIHtcclxuICBcdFx0Ly8gUG9seWdvbiBpcyBzbyBzbWFsbCB0aGF0IGFsbCBwb2ludHMgYXJlIG9uIHNhbWUgcGl4ZWwuXHJcbiAgXHRcdGNlbnRlciA9IHBvaW50c1swXTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGNlbnRlciA9IFt4IC8gYXJlYSwgeSAvIGFyZWFdO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGNycy51bnByb2plY3QodG9Qb2ludChjZW50ZXIpKTtcclxuICB9XG5cbiAgdmFyIFBvbHlVdGlsID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBjbGlwUG9seWdvbjogY2xpcFBvbHlnb24sXG4gICAgcG9seWdvbkNlbnRlcjogcG9seWdvbkNlbnRlclxuICB9O1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBQcm9qZWN0aW9uXHJcbiAgICogQHNlY3Rpb25cclxuICAgKiBMZWFmbGV0IGNvbWVzIHdpdGggYSBzZXQgb2YgYWxyZWFkeSBkZWZpbmVkIFByb2plY3Rpb25zIG91dCBvZiB0aGUgYm94OlxyXG4gICAqXHJcbiAgICogQHByb2plY3Rpb24gTC5Qcm9qZWN0aW9uLkxvbkxhdFxyXG4gICAqXHJcbiAgICogRXF1aXJlY3Rhbmd1bGFyLCBvciBQbGF0ZSBDYXJyZWUgcHJvamVjdGlvbiDigJQgdGhlIG1vc3Qgc2ltcGxlIHByb2plY3Rpb24sXHJcbiAgICogbW9zdGx5IHVzZWQgYnkgR0lTIGVudGh1c2lhc3RzLiBEaXJlY3RseSBtYXBzIGB4YCBhcyBsb25naXR1ZGUsIGFuZCBgeWAgYXNcclxuICAgKiBsYXRpdHVkZS4gQWxzbyBzdWl0YWJsZSBmb3IgZmxhdCB3b3JsZHMsIGUuZy4gZ2FtZSBtYXBzLiBVc2VkIGJ5IHRoZVxyXG4gICAqIGBFUFNHOjQzMjZgIGFuZCBgU2ltcGxlYCBDUlMuXHJcbiAgICovXHJcblxyXG4gIHZhciBMb25MYXQgPSB7XHJcbiAgXHRwcm9qZWN0OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQobGF0bG5nLmxuZywgbGF0bG5nLmxhdCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHBvaW50LnksIHBvaW50LngpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRib3VuZHM6IG5ldyBCb3VuZHMoWy0xODAsIC05MF0sIFsxODAsIDkwXSlcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBQcm9qZWN0aW9uXHJcbiAgICogQHByb2plY3Rpb24gTC5Qcm9qZWN0aW9uLk1lcmNhdG9yXHJcbiAgICpcclxuICAgKiBFbGxpcHRpY2FsIE1lcmNhdG9yIHByb2plY3Rpb24g4oCUIG1vcmUgY29tcGxleCB0aGFuIFNwaGVyaWNhbCBNZXJjYXRvci4gQXNzdW1lcyB0aGF0IEVhcnRoIGlzIGFuIGVsbGlwc29pZC4gVXNlZCBieSB0aGUgRVBTRzozMzk1IENSUy5cclxuICAgKi9cclxuXHJcbiAgdmFyIE1lcmNhdG9yID0ge1xyXG4gIFx0UjogNjM3ODEzNyxcclxuICBcdFJfTUlOT1I6IDYzNTY3NTIuMzE0MjQ1MTc5LFxyXG5cclxuICBcdGJvdW5kczogbmV3IEJvdW5kcyhbLTIwMDM3NTA4LjM0Mjc5LCAtMTU0OTY1NzAuNzM5NzJdLCBbMjAwMzc1MDguMzQyNzksIDE4NzY0NjU2LjIzMTM4XSksXHJcblxyXG4gIFx0cHJvamVjdDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHR2YXIgZCA9IE1hdGguUEkgLyAxODAsXHJcbiAgXHRcdCAgICByID0gdGhpcy5SLFxyXG4gIFx0XHQgICAgeSA9IGxhdGxuZy5sYXQgKiBkLFxyXG4gIFx0XHQgICAgdG1wID0gdGhpcy5SX01JTk9SIC8gcixcclxuICBcdFx0ICAgIGUgPSBNYXRoLnNxcnQoMSAtIHRtcCAqIHRtcCksXHJcbiAgXHRcdCAgICBjb24gPSBlICogTWF0aC5zaW4oeSk7XHJcblxyXG4gIFx0XHR2YXIgdHMgPSBNYXRoLnRhbihNYXRoLlBJIC8gNCAtIHkgLyAyKSAvIE1hdGgucG93KCgxIC0gY29uKSAvICgxICsgY29uKSwgZSAvIDIpO1xyXG4gIFx0XHR5ID0gLXIgKiBNYXRoLmxvZyhNYXRoLm1heCh0cywgMUUtMTApKTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQobGF0bG5nLmxuZyAqIGQgKiByLCB5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dmFyIGQgPSAxODAgLyBNYXRoLlBJLFxyXG4gIFx0XHQgICAgciA9IHRoaXMuUixcclxuICBcdFx0ICAgIHRtcCA9IHRoaXMuUl9NSU5PUiAvIHIsXHJcbiAgXHRcdCAgICBlID0gTWF0aC5zcXJ0KDEgLSB0bXAgKiB0bXApLFxyXG4gIFx0XHQgICAgdHMgPSBNYXRoLmV4cCgtcG9pbnQueSAvIHIpLFxyXG4gIFx0XHQgICAgcGhpID0gTWF0aC5QSSAvIDIgLSAyICogTWF0aC5hdGFuKHRzKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwLCBkcGhpID0gMC4xLCBjb247IGkgPCAxNSAmJiBNYXRoLmFicyhkcGhpKSA+IDFlLTc7IGkrKykge1xyXG4gIFx0XHRcdGNvbiA9IGUgKiBNYXRoLnNpbihwaGkpO1xyXG4gIFx0XHRcdGNvbiA9IE1hdGgucG93KCgxIC0gY29uKSAvICgxICsgY29uKSwgZSAvIDIpO1xyXG4gIFx0XHRcdGRwaGkgPSBNYXRoLlBJIC8gMiAtIDIgKiBNYXRoLmF0YW4odHMgKiBjb24pIC0gcGhpO1xyXG4gIFx0XHRcdHBoaSArPSBkcGhpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhwaGkgKiBkLCBwb2ludC54ICogZCAvIHIpO1xyXG4gIFx0fVxyXG4gIH07XG5cbiAgLypcbiAgICogQGNsYXNzIFByb2plY3Rpb25cblxuICAgKiBBbiBvYmplY3Qgd2l0aCBtZXRob2RzIGZvciBwcm9qZWN0aW5nIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyBvZiB0aGUgd29ybGQgb250b1xuICAgKiBhIGZsYXQgc3VyZmFjZSAoYW5kIGJhY2spLiBTZWUgW01hcCBwcm9qZWN0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXBfcHJvamVjdGlvbikuXG5cbiAgICogQHByb3BlcnR5IGJvdW5kczogQm91bmRzXG4gICAqIFRoZSBib3VuZHMgKHNwZWNpZmllZCBpbiBDUlMgdW5pdHMpIHdoZXJlIHRoZSBwcm9qZWN0aW9uIGlzIHZhbGlkXG5cbiAgICogQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcbiAgICogUHJvamVjdHMgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGludG8gYSAyRCBwb2ludC5cbiAgICogT25seSBhY2NlcHRzIGFjdHVhbCBgTC5MYXRMbmdgIGluc3RhbmNlcywgbm90IGFycmF5cy5cblxuICAgKiBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMYXRMbmdcbiAgICogVGhlIGludmVyc2Ugb2YgYHByb2plY3RgLiBQcm9qZWN0cyBhIDJEIHBvaW50IGludG8gYSBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAqIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuUG9pbnRgIGluc3RhbmNlcywgbm90IGFycmF5cy5cblxuICAgKiBOb3RlIHRoYXQgdGhlIHByb2plY3Rpb24gaW5zdGFuY2VzIGRvIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxuICAgKiBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiBBbHNvLCBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gdGhlbSxcbiAgICogYW5kIG1ldGhvZHMgY2FuJ3QgYmUgYWRkZWQgdG8gdGhlbSB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXG5cbiAgICovXG5cbiAgdmFyIGluZGV4ID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBMb25MYXQ6IExvbkxhdCxcbiAgICBNZXJjYXRvcjogTWVyY2F0b3IsXG4gICAgU3BoZXJpY2FsTWVyY2F0b3I6IFNwaGVyaWNhbE1lcmNhdG9yXG4gIH07XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIENSU1xyXG4gICAqIEBjcnMgTC5DUlMuRVBTRzMzOTVcclxuICAgKlxyXG4gICAqIFJhcmVseSB1c2VkIGJ5IHNvbWUgY29tbWVyY2lhbCB0aWxlIHByb3ZpZGVycy4gVXNlcyBFbGxpcHRpY2FsIE1lcmNhdG9yIHByb2plY3Rpb24uXHJcbiAgICovXHJcbiAgdmFyIEVQU0czMzk1ID0gZXh0ZW5kKHt9LCBFYXJ0aCwge1xyXG4gIFx0Y29kZTogJ0VQU0c6MzM5NScsXHJcbiAgXHRwcm9qZWN0aW9uOiBNZXJjYXRvcixcclxuXHJcbiAgXHR0cmFuc2Zvcm1hdGlvbjogKGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHNjYWxlID0gMC41IC8gKE1hdGguUEkgKiBNZXJjYXRvci5SKTtcclxuICBcdFx0cmV0dXJuIHRvVHJhbnNmb3JtYXRpb24oc2NhbGUsIDAuNSwgLXNjYWxlLCAwLjUpO1xyXG4gIFx0fSgpKVxyXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkVQU0c0MzI2XHJcbiAgICpcclxuICAgKiBBIGNvbW1vbiBDUlMgYW1vbmcgR0lTIGVudGh1c2lhc3RzLiBVc2VzIHNpbXBsZSBFcXVpcmVjdGFuZ3VsYXIgcHJvamVjdGlvbi5cclxuICAgKlxyXG4gICAqIExlYWZsZXQgMS4wLnggY29tcGxpZXMgd2l0aCB0aGUgW1RNUyBjb29yZGluYXRlIHNjaGVtZSBmb3IgRVBTRzo0MzI2XShodHRwczovL3dpa2kub3NnZW8ub3JnL3dpa2kvVGlsZV9NYXBfU2VydmljZV9TcGVjaWZpY2F0aW9uI2dsb2JhbC1nZW9kZXRpYyksXHJcbiAgICogd2hpY2ggaXMgYSBicmVha2luZyBjaGFuZ2UgZnJvbSAwLjcueCBiZWhhdmlvdXIuICBJZiB5b3UgYXJlIHVzaW5nIGEgYFRpbGVMYXllcmBcclxuICAgKiB3aXRoIHRoaXMgQ1JTLCBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgdHdvIDI1NngyNTYgcGl4ZWwgdGlsZXMgY292ZXJpbmcgdGhlXHJcbiAgICogd2hvbGUgZWFydGggYXQgem9vbSBsZXZlbCB6ZXJvLCBhbmQgdGhhdCB0aGUgdGlsZSBjb29yZGluYXRlIG9yaWdpbiBpcyAoLTE4MCwrOTApLFxyXG4gICAqIG9yICgtMTgwLC05MCkgZm9yIGBUaWxlTGF5ZXJgcyB3aXRoIFt0aGUgYHRtc2Agb3B0aW9uXSgjdGlsZWxheWVyLXRtcykgc2V0LlxyXG4gICAqL1xyXG5cclxuICB2YXIgRVBTRzQzMjYgPSBleHRlbmQoe30sIEVhcnRoLCB7XHJcbiAgXHRjb2RlOiAnRVBTRzo0MzI2JyxcclxuICBcdHByb2plY3Rpb246IExvbkxhdCxcclxuICBcdHRyYW5zZm9ybWF0aW9uOiB0b1RyYW5zZm9ybWF0aW9uKDEgLyAxODAsIDEsIC0xIC8gMTgwLCAwLjUpXHJcbiAgfSk7XG5cbiAgLypcbiAgICogQG5hbWVzcGFjZSBDUlNcbiAgICogQGNycyBMLkNSUy5TaW1wbGVcbiAgICpcbiAgICogQSBzaW1wbGUgQ1JTIHRoYXQgbWFwcyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGludG8gYHhgIGFuZCBgeWAgZGlyZWN0bHkuXG4gICAqIE1heSBiZSB1c2VkIGZvciBtYXBzIG9mIGZsYXQgc3VyZmFjZXMgKGUuZy4gZ2FtZSBtYXBzKS4gTm90ZSB0aGF0IHRoZSBgeWBcbiAgICogYXhpcyBzaG91bGQgc3RpbGwgYmUgaW52ZXJ0ZWQgKGdvaW5nIGZyb20gYm90dG9tIHRvIHRvcCkuIGBkaXN0YW5jZSgpYCByZXR1cm5zXG4gICAqIHNpbXBsZSBldWNsaWRlYW4gZGlzdGFuY2UuXG4gICAqL1xuXG4gIHZhciBTaW1wbGUgPSBleHRlbmQoe30sIENSUywge1xuICBcdHByb2plY3Rpb246IExvbkxhdCxcbiAgXHR0cmFuc2Zvcm1hdGlvbjogdG9UcmFuc2Zvcm1hdGlvbigxLCAwLCAtMSwgMCksXG5cbiAgXHRzY2FsZTogZnVuY3Rpb24gKHpvb20pIHtcbiAgXHRcdHJldHVybiBNYXRoLnBvdygyLCB6b29tKTtcbiAgXHR9LFxuXG4gIFx0em9vbTogZnVuY3Rpb24gKHNjYWxlKSB7XG4gIFx0XHRyZXR1cm4gTWF0aC5sb2coc2NhbGUpIC8gTWF0aC5MTjI7XG4gIFx0fSxcblxuICBcdGRpc3RhbmNlOiBmdW5jdGlvbiAobGF0bG5nMSwgbGF0bG5nMikge1xuICBcdFx0dmFyIGR4ID0gbGF0bG5nMi5sbmcgLSBsYXRsbmcxLmxuZyxcbiAgXHRcdCAgICBkeSA9IGxhdGxuZzIubGF0IC0gbGF0bG5nMS5sYXQ7XG5cbiAgXHRcdHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICBcdH0sXG5cbiAgXHRpbmZpbml0ZTogdHJ1ZVxuICB9KTtcblxuICBDUlMuRWFydGggPSBFYXJ0aDtcbiAgQ1JTLkVQU0czMzk1ID0gRVBTRzMzOTU7XG4gIENSUy5FUFNHMzg1NyA9IEVQU0czODU3O1xuICBDUlMuRVBTRzkwMDkxMyA9IEVQU0c5MDA5MTM7XG4gIENSUy5FUFNHNDMyNiA9IEVQU0c0MzI2O1xuICBDUlMuU2ltcGxlID0gU2ltcGxlO1xuXG4gIC8qXG4gICAqIEBjbGFzcyBMYXllclxuICAgKiBAaW5oZXJpdHMgRXZlbnRlZFxuICAgKiBAYWthIEwuTGF5ZXJcbiAgICogQGFrYSBJTGF5ZXJcbiAgICpcbiAgICogQSBzZXQgb2YgbWV0aG9kcyBmcm9tIHRoZSBMYXllciBiYXNlIGNsYXNzIHRoYXQgYWxsIExlYWZsZXQgbGF5ZXJzIHVzZS5cbiAgICogSW5oZXJpdHMgYWxsIG1ldGhvZHMsIG9wdGlvbnMgYW5kIGV2ZW50cyBmcm9tIGBMLkV2ZW50ZWRgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbGF5ZXIgPSBMLm1hcmtlcihsYXRsbmcpLmFkZFRvKG1hcCk7XG4gICAqIGxheWVyLmFkZFRvKG1hcCk7XG4gICAqIGxheWVyLnJlbW92ZSgpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGV2ZW50IGFkZDogRXZlbnRcbiAgICogRmlyZWQgYWZ0ZXIgdGhlIGxheWVyIGlzIGFkZGVkIHRvIGEgbWFwXG4gICAqXG4gICAqIEBldmVudCByZW1vdmU6IEV2ZW50XG4gICAqIEZpcmVkIGFmdGVyIHRoZSBsYXllciBpcyByZW1vdmVkIGZyb20gYSBtYXBcbiAgICovXG5cblxuICB2YXIgTGF5ZXIgPSBFdmVudGVkLmV4dGVuZCh7XG5cbiAgXHQvLyBDbGFzc2VzIGV4dGVuZGluZyBgTC5MYXllcmAgd2lsbCBpbmhlcml0IHRoZSBmb2xsb3dpbmcgb3B0aW9uczpcbiAgXHRvcHRpb25zOiB7XG4gIFx0XHQvLyBAb3B0aW9uIHBhbmU6IFN0cmluZyA9ICdvdmVybGF5UGFuZSdcbiAgXHRcdC8vIEJ5IGRlZmF1bHQgdGhlIGxheWVyIHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcCdzIFtvdmVybGF5IHBhbmVdKCNtYXAtb3ZlcmxheXBhbmUpLiBPdmVycmlkaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGxheWVyIHRvIGJlIHBsYWNlZCBvbiBhbm90aGVyIHBhbmUgYnkgZGVmYXVsdC5cbiAgXHRcdHBhbmU6ICdvdmVybGF5UGFuZScsXG5cbiAgXHRcdC8vIEBvcHRpb24gYXR0cmlidXRpb246IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIFN0cmluZyB0byBiZSBzaG93biBpbiB0aGUgYXR0cmlidXRpb24gY29udHJvbCwgZS5nLiBcIsKpIE9wZW5TdHJlZXRNYXAgY29udHJpYnV0b3JzXCIuIEl0IGRlc2NyaWJlcyB0aGUgbGF5ZXIgZGF0YSBhbmQgaXMgb2Z0ZW4gYSBsZWdhbCBvYmxpZ2F0aW9uIHRvd2FyZHMgY29weXJpZ2h0IGhvbGRlcnMgYW5kIHRpbGUgcHJvdmlkZXJzLlxuICBcdFx0YXR0cmlidXRpb246IG51bGwsXG5cbiAgXHRcdGJ1YmJsaW5nTW91c2VFdmVudHM6IHRydWVcbiAgXHR9LFxuXG4gIFx0LyogQHNlY3Rpb25cbiAgXHQgKiBDbGFzc2VzIGV4dGVuZGluZyBgTC5MYXllcmAgd2lsbCBpbmhlcml0IHRoZSBmb2xsb3dpbmcgbWV0aG9kczpcbiAgXHQgKlxuICBcdCAqIEBtZXRob2QgYWRkVG8obWFwOiBNYXB8TGF5ZXJHcm91cCk6IHRoaXNcbiAgXHQgKiBBZGRzIHRoZSBsYXllciB0byB0aGUgZ2l2ZW4gbWFwIG9yIGxheWVyIGdyb3VwLlxuICBcdCAqL1xuICBcdGFkZFRvOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHRtYXAuYWRkTGF5ZXIodGhpcyk7XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmU6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBsYXllciBmcm9tIHRoZSBtYXAgaXQgaXMgY3VycmVudGx5IGFjdGl2ZSBvbi5cbiAgXHRyZW1vdmU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLnJlbW92ZUZyb20odGhpcy5fbWFwIHx8IHRoaXMuX21hcFRvQWRkKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVGcm9tKG1hcDogTWFwKTogdGhpc1xuICBcdC8vIFJlbW92ZXMgdGhlIGxheWVyIGZyb20gdGhlIGdpdmVuIG1hcFxuICBcdC8vXG4gIFx0Ly8gQGFsdGVybmF0aXZlXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVGcm9tKGdyb3VwOiBMYXllckdyb3VwKTogdGhpc1xuICBcdC8vIFJlbW92ZXMgdGhlIGxheWVyIGZyb20gdGhlIGdpdmVuIGBMYXllckdyb3VwYFxuICBcdHJlbW92ZUZyb206IGZ1bmN0aW9uIChvYmopIHtcbiAgXHRcdGlmIChvYmopIHtcbiAgXHRcdFx0b2JqLnJlbW92ZUxheWVyKHRoaXMpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0UGFuZShuYW1lPyA6IFN0cmluZyk6IEhUTUxFbGVtZW50XG4gIFx0Ly8gUmV0dXJucyB0aGUgYEhUTUxFbGVtZW50YCByZXByZXNlbnRpbmcgdGhlIG5hbWVkIHBhbmUgb24gdGhlIG1hcC4gSWYgYG5hbWVgIGlzIG9taXR0ZWQsIHJldHVybnMgdGhlIHBhbmUgZm9yIHRoaXMgbGF5ZXIuXG4gIFx0Z2V0UGFuZTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tYXAuZ2V0UGFuZShuYW1lID8gKHRoaXMub3B0aW9uc1tuYW1lXSB8fCBuYW1lKSA6IHRoaXMub3B0aW9ucy5wYW5lKTtcbiAgXHR9LFxuXG4gIFx0YWRkSW50ZXJhY3RpdmVUYXJnZXQ6IGZ1bmN0aW9uICh0YXJnZXRFbCkge1xuICBcdFx0dGhpcy5fbWFwLl90YXJnZXRzW3N0YW1wKHRhcmdldEVsKV0gPSB0aGlzO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdHJlbW92ZUludGVyYWN0aXZlVGFyZ2V0OiBmdW5jdGlvbiAodGFyZ2V0RWwpIHtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9tYXAuX3RhcmdldHNbc3RhbXAodGFyZ2V0RWwpXTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldEF0dHJpYnV0aW9uOiBTdHJpbmdcbiAgXHQvLyBVc2VkIGJ5IHRoZSBgYXR0cmlidXRpb24gY29udHJvbGAsIHJldHVybnMgdGhlIFthdHRyaWJ1dGlvbiBvcHRpb25dKCNncmlkbGF5ZXItYXR0cmlidXRpb24pLlxuICBcdGdldEF0dHJpYnV0aW9uOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uO1xuICBcdH0sXG5cbiAgXHRfbGF5ZXJBZGQ6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgbWFwID0gZS50YXJnZXQ7XG5cbiAgXHRcdC8vIGNoZWNrIGluIGNhc2UgbGF5ZXIgZ2V0cyBhZGRlZCBhbmQgdGhlbiByZW1vdmVkIGJlZm9yZSB0aGUgbWFwIGlzIHJlYWR5XG4gIFx0XHRpZiAoIW1hcC5oYXNMYXllcih0aGlzKSkgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xuICBcdFx0dGhpcy5fem9vbUFuaW1hdGVkID0gbWFwLl96b29tQW5pbWF0ZWQ7XG5cbiAgXHRcdGlmICh0aGlzLmdldEV2ZW50cykge1xuICBcdFx0XHR2YXIgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKTtcbiAgXHRcdFx0bWFwLm9uKGV2ZW50cywgdGhpcyk7XG4gIFx0XHRcdHRoaXMub25jZSgncmVtb3ZlJywgZnVuY3Rpb24gKCkge1xuICBcdFx0XHRcdG1hcC5vZmYoZXZlbnRzLCB0aGlzKTtcbiAgXHRcdFx0fSwgdGhpcyk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMub25BZGQobWFwKTtcblxuICBcdFx0dGhpcy5maXJlKCdhZGQnKTtcbiAgXHRcdG1hcC5maXJlKCdsYXllcmFkZCcsIHtsYXllcjogdGhpc30pO1xuICBcdH1cbiAgfSk7XG5cbiAgLyogQHNlY3Rpb24gRXh0ZW5zaW9uIG1ldGhvZHNcbiAgICogQHVuaW5oZXJpdGFibGVcbiAgICpcbiAgICogRXZlcnkgbGF5ZXIgc2hvdWxkIGV4dGVuZCBmcm9tIGBMLkxheWVyYCBhbmQgKHJlLSlpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLlxuICAgKlxuICAgKiBAbWV0aG9kIG9uQWRkKG1hcDogTWFwKTogdGhpc1xuICAgKiBTaG91bGQgY29udGFpbiBjb2RlIHRoYXQgY3JlYXRlcyBET00gZWxlbWVudHMgZm9yIHRoZSBsYXllciwgYWRkcyB0aGVtIHRvIGBtYXAgcGFuZXNgIHdoZXJlIHRoZXkgc2hvdWxkIGJlbG9uZyBhbmQgcHV0cyBsaXN0ZW5lcnMgb24gcmVsZXZhbnQgbWFwIGV2ZW50cy4gQ2FsbGVkIG9uIFtgbWFwLmFkZExheWVyKGxheWVyKWBdKCNtYXAtYWRkbGF5ZXIpLlxuICAgKlxuICAgKiBAbWV0aG9kIG9uUmVtb3ZlKG1hcDogTWFwKTogdGhpc1xuICAgKiBTaG91bGQgY29udGFpbiBhbGwgY2xlYW4gdXAgY29kZSB0aGF0IHJlbW92ZXMgdGhlIGxheWVyJ3MgZWxlbWVudHMgZnJvbSB0aGUgRE9NIGFuZCByZW1vdmVzIGxpc3RlbmVycyBwcmV2aW91c2x5IGFkZGVkIGluIFtgb25BZGRgXSgjbGF5ZXItb25hZGQpLiBDYWxsZWQgb24gW2BtYXAucmVtb3ZlTGF5ZXIobGF5ZXIpYF0oI21hcC1yZW1vdmVsYXllcikuXG4gICAqXG4gICAqIEBtZXRob2QgZ2V0RXZlbnRzKCk6IE9iamVjdFxuICAgKiBUaGlzIG9wdGlvbmFsIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIG9iamVjdCBsaWtlIGB7IHZpZXdyZXNldDogdGhpcy5fcmVzZXQgfWAgZm9yIFtgYWRkRXZlbnRMaXN0ZW5lcmBdKCNldmVudGVkLWFkZGV2ZW50bGlzdGVuZXIpLiBUaGUgZXZlbnQgaGFuZGxlcnMgaW4gdGhpcyBvYmplY3Qgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIG1hcCB3aXRoIHlvdXIgbGF5ZXIuXG4gICAqXG4gICAqIEBtZXRob2QgZ2V0QXR0cmlidXRpb24oKTogU3RyaW5nXG4gICAqIFRoaXMgb3B0aW9uYWwgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyBIVE1MIHRvIGJlIHNob3duIG9uIHRoZSBgQXR0cmlidXRpb24gY29udHJvbGAgd2hlbmV2ZXIgdGhlIGxheWVyIGlzIHZpc2libGUuXG4gICAqXG4gICAqIEBtZXRob2QgYmVmb3JlQWRkKG1hcDogTWFwKTogdGhpc1xuICAgKiBPcHRpb25hbCBtZXRob2QuIENhbGxlZCBvbiBbYG1hcC5hZGRMYXllcihsYXllcilgXSgjbWFwLWFkZGxheWVyKSwgYmVmb3JlIHRoZSBsYXllciBpcyBhZGRlZCB0byB0aGUgbWFwLCBiZWZvcmUgZXZlbnRzIGFyZSBpbml0aWFsaXplZCwgd2l0aG91dCB3YWl0aW5nIHVudGlsIHRoZSBtYXAgaXMgaW4gYSB1c2FibGUgc3RhdGUuIFVzZSBmb3IgZWFybHkgaW5pdGlhbGl6YXRpb24gb25seS5cbiAgICovXG5cblxuICAvKiBAbmFtZXNwYWNlIE1hcFxuICAgKiBAc2VjdGlvbiBMYXllciBldmVudHNcbiAgICpcbiAgICogQGV2ZW50IGxheWVyYWRkOiBMYXllckV2ZW50XG4gICAqIEZpcmVkIHdoZW4gYSBuZXcgbGF5ZXIgaXMgYWRkZWQgdG8gdGhlIG1hcC5cbiAgICpcbiAgICogQGV2ZW50IGxheWVycmVtb3ZlOiBMYXllckV2ZW50XG4gICAqIEZpcmVkIHdoZW4gc29tZSBsYXllciBpcyByZW1vdmVkIGZyb20gdGhlIG1hcFxuICAgKlxuICAgKiBAc2VjdGlvbiBNZXRob2RzIGZvciBMYXllcnMgYW5kIENvbnRyb2xzXG4gICAqL1xuICBNYXAuaW5jbHVkZSh7XG4gIFx0Ly8gQG1ldGhvZCBhZGRMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXG4gIFx0Ly8gQWRkcyB0aGUgZ2l2ZW4gbGF5ZXIgdG8gdGhlIG1hcFxuICBcdGFkZExheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGlmICghbGF5ZXIuX2xheWVyQWRkKSB7XG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci4nKTtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGlkID0gc3RhbXAobGF5ZXIpO1xuICBcdFx0aWYgKHRoaXMuX2xheWVyc1tpZF0pIHsgcmV0dXJuIHRoaXM7IH1cbiAgXHRcdHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjtcblxuICBcdFx0bGF5ZXIuX21hcFRvQWRkID0gdGhpcztcblxuICBcdFx0aWYgKGxheWVyLmJlZm9yZUFkZCkge1xuICBcdFx0XHRsYXllci5iZWZvcmVBZGQodGhpcyk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMud2hlblJlYWR5KGxheWVyLl9sYXllckFkZCwgbGF5ZXIpO1xuXG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgZ2l2ZW4gbGF5ZXIgZnJvbSB0aGUgbWFwLlxuICBcdHJlbW92ZUxheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBpZCA9IHN0YW1wKGxheWVyKTtcblxuICBcdFx0aWYgKCF0aGlzLl9sYXllcnNbaWRdKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgXHRcdGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgXHRcdFx0bGF5ZXIub25SZW1vdmUodGhpcyk7XG4gIFx0XHR9XG5cbiAgXHRcdGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRdO1xuXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XG4gIFx0XHRcdHRoaXMuZmlyZSgnbGF5ZXJyZW1vdmUnLCB7bGF5ZXI6IGxheWVyfSk7XG4gIFx0XHRcdGxheWVyLmZpcmUoJ3JlbW92ZScpO1xuICBcdFx0fVxuXG4gIFx0XHRsYXllci5fbWFwID0gbGF5ZXIuX21hcFRvQWRkID0gbnVsbDtcblxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaGFzTGF5ZXIobGF5ZXI6IExheWVyKTogQm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBsYXllciBpcyBjdXJyZW50bHkgYWRkZWQgdG8gdGhlIG1hcFxuICBcdGhhc0xheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHJldHVybiBzdGFtcChsYXllcikgaW4gdGhpcy5fbGF5ZXJzO1xuICBcdH0sXG5cbiAgXHQvKiBAbWV0aG9kIGVhY2hMYXllcihmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXG4gIFx0ICogSXRlcmF0ZXMgb3ZlciB0aGUgbGF5ZXJzIG9mIHRoZSBtYXAsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyBjb250ZXh0IG9mIHRoZSBpdGVyYXRvciBmdW5jdGlvbi5cbiAgXHQgKiBgYGBcbiAgXHQgKiBtYXAuZWFjaExheWVyKGZ1bmN0aW9uKGxheWVyKXtcbiAgXHQgKiAgICAgbGF5ZXIuYmluZFBvcHVwKCdIZWxsbycpO1xuICBcdCAqIH0pO1xuICBcdCAqIGBgYFxuICBcdCAqL1xuICBcdGVhY2hMYXllcjogZnVuY3Rpb24gKG1ldGhvZCwgY29udGV4dCkge1xuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9sYXllcnMpIHtcbiAgXHRcdFx0bWV0aG9kLmNhbGwoY29udGV4dCwgdGhpcy5fbGF5ZXJzW2ldKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHRfYWRkTGF5ZXJzOiBmdW5jdGlvbiAobGF5ZXJzKSB7XG4gIFx0XHRsYXllcnMgPSBsYXllcnMgPyAoaXNBcnJheShsYXllcnMpID8gbGF5ZXJzIDogW2xheWVyc10pIDogW107XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXllcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0dGhpcy5hZGRMYXllcihsYXllcnNbaV0pO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfYWRkWm9vbUxpbWl0OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGlmICghaXNOYU4obGF5ZXIub3B0aW9ucy5tYXhab29tKSB8fCAhaXNOYU4obGF5ZXIub3B0aW9ucy5taW5ab29tKSkge1xuICBcdFx0XHR0aGlzLl96b29tQm91bmRMYXllcnNbc3RhbXAobGF5ZXIpXSA9IGxheWVyO1xuICBcdFx0XHR0aGlzLl91cGRhdGVab29tTGV2ZWxzKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVab29tTGltaXQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIGlkID0gc3RhbXAobGF5ZXIpO1xuXG4gIFx0XHRpZiAodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2lkXSkge1xuICBcdFx0XHRkZWxldGUgdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2lkXTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWm9vbUxldmVscygpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlWm9vbUxldmVsczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1pblpvb20gPSBJbmZpbml0eSxcbiAgXHRcdCAgICBtYXhab29tID0gLUluZmluaXR5LFxuICBcdFx0ICAgIG9sZFpvb21TcGFuID0gdGhpcy5fZ2V0Wm9vbVNwYW4oKTtcblxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl96b29tQm91bmRMYXllcnMpIHtcbiAgXHRcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLl96b29tQm91bmRMYXllcnNbaV0ub3B0aW9ucztcblxuICBcdFx0XHRtaW5ab29tID0gb3B0aW9ucy5taW5ab29tID09PSB1bmRlZmluZWQgPyBtaW5ab29tIDogTWF0aC5taW4obWluWm9vbSwgb3B0aW9ucy5taW5ab29tKTtcbiAgXHRcdFx0bWF4Wm9vbSA9IG9wdGlvbnMubWF4Wm9vbSA9PT0gdW5kZWZpbmVkID8gbWF4Wm9vbSA6IE1hdGgubWF4KG1heFpvb20sIG9wdGlvbnMubWF4Wm9vbSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2xheWVyc01heFpvb20gPSBtYXhab29tID09PSAtSW5maW5pdHkgPyB1bmRlZmluZWQgOiBtYXhab29tO1xuICBcdFx0dGhpcy5fbGF5ZXJzTWluWm9vbSA9IG1pblpvb20gPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogbWluWm9vbTtcblxuICBcdFx0Ly8gQHNlY3Rpb24gTWFwIHN0YXRlIGNoYW5nZSBldmVudHNcbiAgXHRcdC8vIEBldmVudCB6b29tbGV2ZWxzY2hhbmdlOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHpvb21sZXZlbHMgb24gdGhlIG1hcCBpcyBjaGFuZ2VkIGR1ZVxuICBcdFx0Ly8gdG8gYWRkaW5nIG9yIHJlbW92aW5nIGEgbGF5ZXIuXG4gIFx0XHRpZiAob2xkWm9vbVNwYW4gIT09IHRoaXMuX2dldFpvb21TcGFuKCkpIHtcbiAgXHRcdFx0dGhpcy5maXJlKCd6b29tbGV2ZWxzY2hhbmdlJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubWF4Wm9vbSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2xheWVyc01heFpvb20gJiYgdGhpcy5nZXRab29tKCkgPiB0aGlzLl9sYXllcnNNYXhab29tKSB7XG4gIFx0XHRcdHRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNYXhab29tKTtcbiAgXHRcdH1cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubWluWm9vbSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2xheWVyc01pblpvb20gJiYgdGhpcy5nZXRab29tKCkgPCB0aGlzLl9sYXllcnNNaW5ab29tKSB7XG4gIFx0XHRcdHRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNaW5ab29tKTtcbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIExheWVyR3JvdXBcclxuICAgKiBAYWthIEwuTGF5ZXJHcm91cFxyXG4gICAqIEBpbmhlcml0cyBJbnRlcmFjdGl2ZSBsYXllclxyXG4gICAqXHJcbiAgICogVXNlZCB0byBncm91cCBzZXZlcmFsIGxheWVycyBhbmQgaGFuZGxlIHRoZW0gYXMgb25lLiBJZiB5b3UgYWRkIGl0IHRvIHRoZSBtYXAsXHJcbiAgICogYW55IGxheWVycyBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIGdyb3VwIHdpbGwgYmUgYWRkZWQvcmVtb3ZlZCBvbiB0aGUgbWFwIGFzXHJcbiAgICogd2VsbC4gRXh0ZW5kcyBgTGF5ZXJgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC5sYXllckdyb3VwKFttYXJrZXIxLCBtYXJrZXIyXSlcclxuICAgKiBcdC5hZGRMYXllcihwb2x5bGluZSlcclxuICAgKiBcdC5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgTGF5ZXJHcm91cCA9IExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxheWVycywgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJzID0ge307XHJcblxyXG4gIFx0XHR2YXIgaSwgbGVuO1xyXG5cclxuICBcdFx0aWYgKGxheWVycykge1xyXG4gIFx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IGxheWVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0dGhpcy5hZGRMYXllcihsYXllcnNbaV0pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZExheWVyKGxheWVyOiBMYXllcik6IHRoaXNcclxuICBcdC8vIEFkZHMgdGhlIGdpdmVuIGxheWVyIHRvIHRoZSBncm91cC5cclxuICBcdGFkZExheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0dmFyIGlkID0gdGhpcy5nZXRMYXllcklkKGxheWVyKTtcclxuXHJcbiAgXHRcdHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLl9tYXAuYWRkTGF5ZXIobGF5ZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIHRoZSBnaXZlbiBsYXllciBmcm9tIHRoZSBncm91cC5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVMYXllcihpZDogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgbGF5ZXIgd2l0aCB0aGUgZ2l2ZW4gaW50ZXJuYWwgSUQgZnJvbSB0aGUgZ3JvdXAuXHJcbiAgXHRyZW1vdmVMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdHZhciBpZCA9IGxheWVyIGluIHRoaXMuX2xheWVycyA/IGxheWVyIDogdGhpcy5nZXRMYXllcklkKGxheWVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tYXAgJiYgdGhpcy5fbGF5ZXJzW2lkXSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbaWRdKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBoYXNMYXllcihsYXllcjogTGF5ZXIpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgY3VycmVudGx5IGFkZGVkIHRvIHRoZSBncm91cC5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBoYXNMYXllcihpZDogTnVtYmVyKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGludGVybmFsIElEIGlzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgZ3JvdXAuXHJcbiAgXHRoYXNMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdHZhciBsYXllcklkID0gdHlwZW9mIGxheWVyID09PSAnbnVtYmVyJyA/IGxheWVyIDogdGhpcy5nZXRMYXllcklkKGxheWVyKTtcclxuICBcdFx0cmV0dXJuIGxheWVySWQgaW4gdGhpcy5fbGF5ZXJzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNsZWFyTGF5ZXJzKCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgYWxsIHRoZSBsYXllcnMgZnJvbSB0aGUgZ3JvdXAuXHJcbiAgXHRjbGVhckxheWVyczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllciwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaW52b2tlKG1ldGhvZE5hbWU6IFN0cmluZywg4oCmKTogdGhpc1xyXG4gIFx0Ly8gQ2FsbHMgYG1ldGhvZE5hbWVgIG9uIGV2ZXJ5IGxheWVyIGNvbnRhaW5lZCBpbiB0aGlzIGdyb3VwLCBwYXNzaW5nIGFueVxyXG4gIFx0Ly8gYWRkaXRpb25hbCBwYXJhbWV0ZXJzLiBIYXMgbm8gZWZmZWN0IGlmIHRoZSBsYXllcnMgY29udGFpbmVkIGRvIG5vdFxyXG4gIFx0Ly8gaW1wbGVtZW50IGBtZXRob2ROYW1lYC5cclxuICBcdGludm9rZTogZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHtcclxuICBcdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxyXG4gIFx0XHQgICAgaSwgbGF5ZXI7XHJcblxyXG4gIFx0XHRmb3IgKGkgaW4gdGhpcy5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0bGF5ZXIgPSB0aGlzLl9sYXllcnNbaV07XHJcblxyXG4gIFx0XHRcdGlmIChsYXllclttZXRob2ROYW1lXSkge1xyXG4gIFx0XHRcdFx0bGF5ZXJbbWV0aG9kTmFtZV0uYXBwbHkobGF5ZXIsIGFyZ3MpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKG1hcC5hZGRMYXllciwgbWFwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5lYWNoTGF5ZXIobWFwLnJlbW92ZUxheWVyLCBtYXApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGVhY2hMYXllcihmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgXHQvLyBJdGVyYXRlcyBvdmVyIHRoZSBsYXllcnMgb2YgdGhlIGdyb3VwLCBvcHRpb25hbGx5IHNwZWNpZnlpbmcgY29udGV4dCBvZiB0aGUgaXRlcmF0b3IgZnVuY3Rpb24uXHJcbiAgXHQvLyBgYGBqc1xyXG4gIFx0Ly8gZ3JvdXAuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0Ly8gXHRsYXllci5iaW5kUG9wdXAoJ0hlbGxvJyk7XHJcbiAgXHQvLyB9KTtcclxuICBcdC8vIGBgYFxyXG4gIFx0ZWFjaExheWVyOiBmdW5jdGlvbiAobWV0aG9kLCBjb250ZXh0KSB7XHJcbiAgXHRcdGZvciAodmFyIGkgaW4gdGhpcy5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0bWV0aG9kLmNhbGwoY29udGV4dCwgdGhpcy5fbGF5ZXJzW2ldKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXllcihpZDogTnVtYmVyKTogTGF5ZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIGludGVybmFsIElELlxyXG4gIFx0Z2V0TGF5ZXI6IGZ1bmN0aW9uIChpZCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fbGF5ZXJzW2lkXTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXllcnMoKTogTGF5ZXJbXVxyXG4gIFx0Ly8gUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIGxheWVycyBhZGRlZCB0byB0aGUgZ3JvdXAuXHJcbiAgXHRnZXRMYXllcnM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGxheWVycyA9IFtdO1xyXG4gIFx0XHR0aGlzLmVhY2hMYXllcihsYXllcnMucHVzaCwgbGF5ZXJzKTtcclxuICBcdFx0cmV0dXJuIGxheWVycztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRaSW5kZXgoekluZGV4OiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBDYWxscyBgc2V0WkluZGV4YCBvbiBldmVyeSBsYXllciBjb250YWluZWQgaW4gdGhpcyBncm91cCwgcGFzc2luZyB0aGUgei1pbmRleC5cclxuICBcdHNldFpJbmRleDogZnVuY3Rpb24gKHpJbmRleCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5pbnZva2UoJ3NldFpJbmRleCcsIHpJbmRleCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF5ZXJJZChsYXllcjogTGF5ZXIpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGludGVybmFsIElEIGZvciBhIGxheWVyXHJcbiAgXHRnZXRMYXllcklkOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0cmV0dXJuIHN0YW1wKGxheWVyKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubGF5ZXJHcm91cChsYXllcnM/OiBMYXllcltdLCBvcHRpb25zPzogT2JqZWN0KVxyXG4gIC8vIENyZWF0ZSBhIGxheWVyIGdyb3VwLCBvcHRpb25hbGx5IGdpdmVuIGFuIGluaXRpYWwgc2V0IG9mIGxheWVycyBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdC5cclxuICB2YXIgbGF5ZXJHcm91cCA9IGZ1bmN0aW9uIChsYXllcnMsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgTGF5ZXJHcm91cChsYXllcnMsIG9wdGlvbnMpO1xyXG4gIH07XG5cbiAgLypcclxuICAgKiBAY2xhc3MgRmVhdHVyZUdyb3VwXHJcbiAgICogQGFrYSBMLkZlYXR1cmVHcm91cFxyXG4gICAqIEBpbmhlcml0cyBMYXllckdyb3VwXHJcbiAgICpcclxuICAgKiBFeHRlbmRlZCBgTGF5ZXJHcm91cGAgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gZG8gdGhlIHNhbWUgdGhpbmcgdG8gYWxsIGl0cyBtZW1iZXIgbGF5ZXJzOlxyXG4gICAqICAqIFtgYmluZFBvcHVwYF0oI2xheWVyLWJpbmRwb3B1cCkgYmluZHMgYSBwb3B1cCB0byBhbGwgb2YgdGhlIGxheWVycyBhdCBvbmNlIChsaWtld2lzZSB3aXRoIFtgYmluZFRvb2x0aXBgXSgjbGF5ZXItYmluZHRvb2x0aXApKVxyXG4gICAqICAqIEV2ZW50cyBhcmUgcHJvcGFnYXRlZCB0byB0aGUgYEZlYXR1cmVHcm91cGAsIHNvIGlmIHRoZSBncm91cCBoYXMgYW4gZXZlbnRcclxuICAgKiBoYW5kbGVyLCBpdCB3aWxsIGhhbmRsZSBldmVudHMgZnJvbSBhbnkgb2YgdGhlIGxheWVycy4gVGhpcyBpbmNsdWRlcyBtb3VzZSBldmVudHNcclxuICAgKiBhbmQgY3VzdG9tIGV2ZW50cy5cclxuICAgKiAgKiBIYXMgYGxheWVyYWRkYCBhbmQgYGxheWVycmVtb3ZlYCBldmVudHNcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIEwuZmVhdHVyZUdyb3VwKFttYXJrZXIxLCBtYXJrZXIyLCBwb2x5bGluZV0pXHJcbiAgICogXHQuYmluZFBvcHVwKCdIZWxsbyB3b3JsZCEnKVxyXG4gICAqIFx0Lm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgeyBhbGVydCgnQ2xpY2tlZCBvbiBhIG1lbWJlciBvZiB0aGUgZ3JvdXAhJyk7IH0pXHJcbiAgICogXHQuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIEZlYXR1cmVHcm91cCA9IExheWVyR3JvdXAuZXh0ZW5kKHtcclxuXHJcbiAgXHRhZGRMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdGlmICh0aGlzLmhhc0xheWVyKGxheWVyKSkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRsYXllci5hZGRFdmVudFBhcmVudCh0aGlzKTtcclxuXHJcbiAgXHRcdExheWVyR3JvdXAucHJvdG90eXBlLmFkZExheWVyLmNhbGwodGhpcywgbGF5ZXIpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGxheWVyYWRkOiBMYXllckV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSBsYXllciBpcyBhZGRlZCB0byB0aGlzIGBGZWF0dXJlR3JvdXBgXHJcbiAgXHRcdHJldHVybiB0aGlzLmZpcmUoJ2xheWVyYWRkJywge2xheWVyOiBsYXllcn0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRyZW1vdmVMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdGlmICghdGhpcy5oYXNMYXllcihsYXllcikpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAobGF5ZXIgaW4gdGhpcy5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0bGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJdO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRsYXllci5yZW1vdmVFdmVudFBhcmVudCh0aGlzKTtcclxuXHJcbiAgXHRcdExheWVyR3JvdXAucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcywgbGF5ZXIpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGxheWVycmVtb3ZlOiBMYXllckV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSBsYXllciBpcyByZW1vdmVkIGZyb20gdGhpcyBgRmVhdHVyZUdyb3VwYFxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdsYXllcnJlbW92ZScsIHtsYXllcjogbGF5ZXJ9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRTdHlsZShzdHlsZTogUGF0aCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgZ2l2ZW4gcGF0aCBvcHRpb25zIHRvIGVhY2ggbGF5ZXIgb2YgdGhlIGdyb3VwIHRoYXQgaGFzIGEgYHNldFN0eWxlYCBtZXRob2QuXHJcbiAgXHRzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmludm9rZSgnc2V0U3R5bGUnLCBzdHlsZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0Zyb250KCk6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgZ3JvdXAgdG8gdGhlIHRvcCBvZiBhbGwgb3RoZXIgbGF5ZXJzXHJcbiAgXHRicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuaW52b2tlKCdicmluZ1RvRnJvbnQnKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvQmFjaygpOiB0aGlzXHJcbiAgXHQvLyBCcmluZ3MgdGhlIGxheWVyIGdyb3VwIHRvIHRoZSBiYWNrIG9mIGFsbCBvdGhlciBsYXllcnNcclxuICBcdGJyaW5nVG9CYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmludm9rZSgnYnJpbmdUb0JhY2snKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHMoKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBMYXRMbmdCb3VuZHMgb2YgdGhlIEZlYXR1cmUgR3JvdXAgKGNyZWF0ZWQgZnJvbSBib3VuZHMgYW5kIGNvb3JkaW5hdGVzIG9mIGl0cyBjaGlsZHJlbikuXHJcbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdHZhciBsYXllciA9IHRoaXMuX2xheWVyc1tpZF07XHJcbiAgXHRcdFx0Ym91bmRzLmV4dGVuZChsYXllci5nZXRCb3VuZHMgPyBsYXllci5nZXRCb3VuZHMoKSA6IGxheWVyLmdldExhdExuZygpKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gYm91bmRzO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmZlYXR1cmVHcm91cChsYXllcnM/OiBMYXllcltdLCBvcHRpb25zPzogT2JqZWN0KVxyXG4gIC8vIENyZWF0ZSBhIGZlYXR1cmUgZ3JvdXAsIG9wdGlvbmFsbHkgZ2l2ZW4gYW4gaW5pdGlhbCBzZXQgb2YgbGF5ZXJzIGFuZCBhbiBgb3B0aW9uc2Agb2JqZWN0LlxyXG4gIHZhciBmZWF0dXJlR3JvdXAgPSBmdW5jdGlvbiAobGF5ZXJzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEZlYXR1cmVHcm91cChsYXllcnMsIG9wdGlvbnMpO1xyXG4gIH07XG5cbiAgLypcclxuICAgKiBAY2xhc3MgSWNvblxyXG4gICAqIEBha2EgTC5JY29uXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGFuIGljb24gdG8gcHJvdmlkZSB3aGVuIGNyZWF0aW5nIGEgbWFya2VyLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIG15SWNvbiA9IEwuaWNvbih7XHJcbiAgICogICAgIGljb25Vcmw6ICdteS1pY29uLnBuZycsXHJcbiAgICogICAgIGljb25SZXRpbmFVcmw6ICdteS1pY29uQDJ4LnBuZycsXHJcbiAgICogICAgIGljb25TaXplOiBbMzgsIDk1XSxcclxuICAgKiAgICAgaWNvbkFuY2hvcjogWzIyLCA5NF0sXHJcbiAgICogICAgIHBvcHVwQW5jaG9yOiBbLTMsIC03Nl0sXHJcbiAgICogICAgIHNoYWRvd1VybDogJ215LWljb24tc2hhZG93LnBuZycsXHJcbiAgICogICAgIHNoYWRvd1JldGluYVVybDogJ215LWljb24tc2hhZG93QDJ4LnBuZycsXHJcbiAgICogICAgIHNoYWRvd1NpemU6IFs2OCwgOTVdLFxyXG4gICAqICAgICBzaGFkb3dBbmNob3I6IFsyMiwgOTRdXHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiBMLm1hcmtlcihbNTAuNTA1LCAzMC41N10sIHtpY29uOiBteUljb259KS5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogYEwuSWNvbi5EZWZhdWx0YCBleHRlbmRzIGBMLkljb25gIGFuZCBpcyB0aGUgYmx1ZSBpY29uIExlYWZsZXQgdXNlcyBmb3IgbWFya2VycyBieSBkZWZhdWx0LlxyXG4gICAqXHJcbiAgICovXHJcblxyXG4gIHZhciBJY29uID0gQ2xhc3MuZXh0ZW5kKHtcclxuXHJcbiAgXHQvKiBAc2VjdGlvblxyXG4gIFx0ICogQGFrYSBJY29uIG9wdGlvbnNcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGljb25Vcmw6IFN0cmluZyA9IG51bGxcclxuICBcdCAqICoqKHJlcXVpcmVkKSoqIFRoZSBVUkwgdG8gdGhlIGljb24gaW1hZ2UgKGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHlvdXIgc2NyaXB0IHBhdGgpLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gaWNvblJldGluYVVybDogU3RyaW5nID0gbnVsbFxyXG4gIFx0ICogVGhlIFVSTCB0byBhIHJldGluYSBzaXplZCB2ZXJzaW9uIG9mIHRoZSBpY29uIGltYWdlIChhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB5b3VyXHJcbiAgXHQgKiBzY3JpcHQgcGF0aCkuIFVzZWQgZm9yIFJldGluYSBzY3JlZW4gZGV2aWNlcy5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGljb25TaXplOiBQb2ludCA9IG51bGxcclxuICBcdCAqIFNpemUgb2YgdGhlIGljb24gaW1hZ2UgaW4gcGl4ZWxzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gaWNvbkFuY2hvcjogUG9pbnQgPSBudWxsXHJcbiAgXHQgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIFwidGlwXCIgb2YgdGhlIGljb24gKHJlbGF0aXZlIHRvIGl0cyB0b3AgbGVmdCBjb3JuZXIpLiBUaGUgaWNvblxyXG4gIFx0ICogd2lsbCBiZSBhbGlnbmVkIHNvIHRoYXQgdGhpcyBwb2ludCBpcyBhdCB0aGUgbWFya2VyJ3MgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uLiBDZW50ZXJlZFxyXG4gIFx0ICogYnkgZGVmYXVsdCBpZiBzaXplIGlzIHNwZWNpZmllZCwgYWxzbyBjYW4gYmUgc2V0IGluIENTUyB3aXRoIG5lZ2F0aXZlIG1hcmdpbnMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBwb3B1cEFuY2hvcjogUG9pbnQgPSBbMCwgMF1cclxuICBcdCAqIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgZnJvbSB3aGljaCBwb3B1cHMgd2lsbCBcIm9wZW5cIiwgcmVsYXRpdmUgdG8gdGhlIGljb24gYW5jaG9yLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gdG9vbHRpcEFuY2hvcjogUG9pbnQgPSBbMCwgMF1cclxuICBcdCAqIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgcG9pbnQgZnJvbSB3aGljaCB0b29sdGlwcyB3aWxsIFwib3BlblwiLCByZWxhdGl2ZSB0byB0aGUgaWNvbiBhbmNob3IuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBzaGFkb3dVcmw6IFN0cmluZyA9IG51bGxcclxuICBcdCAqIFRoZSBVUkwgdG8gdGhlIGljb24gc2hhZG93IGltYWdlLiBJZiBub3Qgc3BlY2lmaWVkLCBubyBzaGFkb3cgaW1hZ2Ugd2lsbCBiZSBjcmVhdGVkLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93UmV0aW5hVXJsOiBTdHJpbmcgPSBudWxsXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBzaGFkb3dTaXplOiBQb2ludCA9IG51bGxcclxuICBcdCAqIFNpemUgb2YgdGhlIHNoYWRvdyBpbWFnZSBpbiBwaXhlbHMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBzaGFkb3dBbmNob3I6IFBvaW50ID0gbnVsbFxyXG4gIFx0ICogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBcInRpcFwiIG9mIHRoZSBzaGFkb3cgKHJlbGF0aXZlIHRvIGl0cyB0b3AgbGVmdCBjb3JuZXIpICh0aGUgc2FtZVxyXG4gIFx0ICogYXMgaWNvbkFuY2hvciBpZiBub3Qgc3BlY2lmaWVkKS5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcclxuICBcdCAqIEEgY3VzdG9tIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIGJvdGggaWNvbiBhbmQgc2hhZG93IGltYWdlcy4gRW1wdHkgYnkgZGVmYXVsdC5cclxuICBcdCAqL1xyXG5cclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0cG9wdXBBbmNob3I6IFswLCAwXSxcclxuICBcdFx0dG9vbHRpcEFuY2hvcjogWzAsIDBdLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjcm9zc09yaWdpbjogQm9vbGVhbnxTdHJpbmcgPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBjcm9zc09yaWdpbiBhdHRyaWJ1dGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgdGlsZXMuXHJcbiAgXHRcdC8vIElmIGEgU3RyaW5nIGlzIHByb3ZpZGVkLCBhbGwgdGlsZXMgd2lsbCBoYXZlIHRoZWlyIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSBzZXQgdG8gdGhlIFN0cmluZyBwcm92aWRlZC4gVGhpcyBpcyBuZWVkZWQgaWYgeW91IHdhbnQgdG8gYWNjZXNzIHRpbGUgcGl4ZWwgZGF0YS5cclxuICBcdFx0Ly8gUmVmZXIgdG8gW0NPUlMgU2V0dGluZ3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvQ09SU19zZXR0aW5nc19hdHRyaWJ1dGVzKSBmb3IgdmFsaWQgU3RyaW5nIHZhbHVlcy5cclxuICBcdFx0Y3Jvc3NPcmlnaW46IGZhbHNlXHJcbiAgXHR9LFxyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY3JlYXRlSWNvbihvbGRJY29uPzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gQ2FsbGVkIGludGVybmFsbHkgd2hlbiB0aGUgaWNvbiBoYXMgdG8gYmUgc2hvd24sIHJldHVybnMgYSBgPGltZz5gIEhUTUwgZWxlbWVudFxyXG4gIFx0Ly8gc3R5bGVkIGFjY29yZGluZyB0byB0aGUgb3B0aW9ucy5cclxuICBcdGNyZWF0ZUljb246IGZ1bmN0aW9uIChvbGRJY29uKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9jcmVhdGVJY29uKCdpY29uJywgb2xkSWNvbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY3JlYXRlU2hhZG93KG9sZEljb24/OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBBcyBgY3JlYXRlSWNvbmAsIGJ1dCBmb3IgdGhlIHNoYWRvdyBiZW5lYXRoIGl0LlxyXG4gIFx0Y3JlYXRlU2hhZG93OiBmdW5jdGlvbiAob2xkSWNvbikge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbignc2hhZG93Jywgb2xkSWNvbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jcmVhdGVJY29uOiBmdW5jdGlvbiAobmFtZSwgb2xkSWNvbikge1xyXG4gIFx0XHR2YXIgc3JjID0gdGhpcy5fZ2V0SWNvblVybChuYW1lKTtcclxuXHJcbiAgXHRcdGlmICghc3JjKSB7XHJcbiAgXHRcdFx0aWYgKG5hbWUgPT09ICdpY29uJykge1xyXG4gIFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpY29uVXJsIG5vdCBzZXQgaW4gSWNvbiBvcHRpb25zIChzZWUgdGhlIGRvY3MpLicpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRyZXR1cm4gbnVsbDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGltZyA9IHRoaXMuX2NyZWF0ZUltZyhzcmMsIG9sZEljb24gJiYgb2xkSWNvbi50YWdOYW1lID09PSAnSU1HJyA/IG9sZEljb24gOiBudWxsKTtcclxuICBcdFx0dGhpcy5fc2V0SWNvblN0eWxlcyhpbWcsIG5hbWUpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiB8fCB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09ICcnKSB7XHJcbiAgXHRcdFx0aW1nLmNyb3NzT3JpZ2luID0gdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJycgOiB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBpbWc7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRJY29uU3R5bGVzOiBmdW5jdGlvbiAoaW1nLCBuYW1lKSB7XHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gIFx0XHR2YXIgc2l6ZU9wdGlvbiA9IG9wdGlvbnNbbmFtZSArICdTaXplJ107XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIHNpemVPcHRpb24gPT09ICdudW1iZXInKSB7XHJcbiAgXHRcdFx0c2l6ZU9wdGlvbiA9IFtzaXplT3B0aW9uLCBzaXplT3B0aW9uXTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHNpemUgPSB0b1BvaW50KHNpemVPcHRpb24pLFxyXG4gIFx0XHQgICAgYW5jaG9yID0gdG9Qb2ludChuYW1lID09PSAnc2hhZG93JyAmJiBvcHRpb25zLnNoYWRvd0FuY2hvciB8fCBvcHRpb25zLmljb25BbmNob3IgfHxcclxuICBcdFx0ICAgICAgICAgICAgc2l6ZSAmJiBzaXplLmRpdmlkZUJ5KDIsIHRydWUpKTtcclxuXHJcbiAgXHRcdGltZy5jbGFzc05hbWUgPSAnbGVhZmxldC1tYXJrZXItJyArIG5hbWUgKyAnICcgKyAob3B0aW9ucy5jbGFzc05hbWUgfHwgJycpO1xyXG5cclxuICBcdFx0aWYgKGFuY2hvcikge1xyXG4gIFx0XHRcdGltZy5zdHlsZS5tYXJnaW5MZWZ0ID0gKC1hbmNob3IueCkgKyAncHgnO1xyXG4gIFx0XHRcdGltZy5zdHlsZS5tYXJnaW5Ub3AgID0gKC1hbmNob3IueSkgKyAncHgnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoc2l6ZSkge1xyXG4gIFx0XHRcdGltZy5zdHlsZS53aWR0aCAgPSBzaXplLnggKyAncHgnO1xyXG4gIFx0XHRcdGltZy5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jcmVhdGVJbWc6IGZ1bmN0aW9uIChzcmMsIGVsKSB7XHJcbiAgXHRcdGVsID0gZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgXHRcdGVsLnNyYyA9IHNyYztcclxuICBcdFx0cmV0dXJuIGVsO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0SWNvblVybDogZnVuY3Rpb24gKG5hbWUpIHtcclxuICBcdFx0cmV0dXJuIEJyb3dzZXIucmV0aW5hICYmIHRoaXMub3B0aW9uc1tuYW1lICsgJ1JldGluYVVybCddIHx8IHRoaXMub3B0aW9uc1tuYW1lICsgJ1VybCddO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5pY29uKG9wdGlvbnM6IEljb24gb3B0aW9ucylcclxuICAvLyBDcmVhdGVzIGFuIGljb24gaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cclxuICBmdW5jdGlvbiBpY29uKG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgSWNvbihvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQG1pbmljbGFzcyBJY29uLkRlZmF1bHQgKEljb24pXG4gICAqIEBha2EgTC5JY29uLkRlZmF1bHRcbiAgICogQHNlY3Rpb25cbiAgICpcbiAgICogQSB0cml2aWFsIHN1YmNsYXNzIG9mIGBJY29uYCwgcmVwcmVzZW50cyB0aGUgaWNvbiB0byB1c2UgaW4gYE1hcmtlcmBzIHdoZW5cbiAgICogbm8gaWNvbiBpcyBzcGVjaWZpZWQuIFBvaW50cyB0byB0aGUgYmx1ZSBtYXJrZXIgaW1hZ2UgZGlzdHJpYnV0ZWQgd2l0aCBMZWFmbGV0XG4gICAqIHJlbGVhc2VzLlxuICAgKlxuICAgKiBJbiBvcmRlciB0byBjdXN0b21pemUgdGhlIGRlZmF1bHQgaWNvbiwganVzdCBjaGFuZ2UgdGhlIHByb3BlcnRpZXMgb2YgYEwuSWNvbi5EZWZhdWx0LnByb3RvdHlwZS5vcHRpb25zYFxuICAgKiAod2hpY2ggaXMgYSBzZXQgb2YgYEljb24gb3B0aW9uc2ApLlxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBfY29tcGxldGVseV8gcmVwbGFjZSB0aGUgZGVmYXVsdCBpY29uLCBvdmVycmlkZSB0aGVcbiAgICogYEwuTWFya2VyLnByb3RvdHlwZS5vcHRpb25zLmljb25gIHdpdGggeW91ciBvd24gaWNvbiBpbnN0ZWFkLlxuICAgKi9cblxuICB2YXIgSWNvbkRlZmF1bHQgPSBJY29uLmV4dGVuZCh7XG5cbiAgXHRvcHRpb25zOiB7XG4gIFx0XHRpY29uVXJsOiAgICAgICAnbWFya2VyLWljb24ucG5nJyxcbiAgXHRcdGljb25SZXRpbmFVcmw6ICdtYXJrZXItaWNvbi0yeC5wbmcnLFxuICBcdFx0c2hhZG93VXJsOiAgICAgJ21hcmtlci1zaGFkb3cucG5nJyxcbiAgXHRcdGljb25TaXplOiAgICBbMjUsIDQxXSxcbiAgXHRcdGljb25BbmNob3I6ICBbMTIsIDQxXSxcbiAgXHRcdHBvcHVwQW5jaG9yOiBbMSwgLTM0XSxcbiAgXHRcdHRvb2x0aXBBbmNob3I6IFsxNiwgLTI4XSxcbiAgXHRcdHNoYWRvd1NpemU6ICBbNDEsIDQxXVxuICBcdH0sXG5cbiAgXHRfZ2V0SWNvblVybDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgXHRcdGlmICh0eXBlb2YgSWNvbkRlZmF1bHQuaW1hZ2VQYXRoICE9PSAnc3RyaW5nJykge1x0Ly8gRGVwcmVjYXRlZCwgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgb25seVxuICBcdFx0XHRJY29uRGVmYXVsdC5pbWFnZVBhdGggPSB0aGlzLl9kZXRlY3RJY29uUGF0aCgpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBAb3B0aW9uIGltYWdlUGF0aDogU3RyaW5nXG4gIFx0XHQvLyBgSWNvbi5EZWZhdWx0YCB3aWxsIHRyeSB0byBhdXRvLWRldGVjdCB0aGUgbG9jYXRpb24gb2YgdGhlXG4gIFx0XHQvLyBibHVlIGljb24gaW1hZ2VzLiBJZiB5b3UgYXJlIHBsYWNpbmcgdGhlc2UgaW1hZ2VzIGluIGEgbm9uLXN0YW5kYXJkXG4gIFx0XHQvLyB3YXksIHNldCB0aGlzIG9wdGlvbiB0byBwb2ludCB0byB0aGUgcmlnaHQgcGF0aC5cbiAgXHRcdHJldHVybiAodGhpcy5vcHRpb25zLmltYWdlUGF0aCB8fCBJY29uRGVmYXVsdC5pbWFnZVBhdGgpICsgSWNvbi5wcm90b3R5cGUuX2dldEljb25VcmwuY2FsbCh0aGlzLCBuYW1lKTtcbiAgXHR9LFxuXG4gIFx0X3N0cmlwVXJsOiBmdW5jdGlvbiAocGF0aCkge1x0Ly8gc2VwYXJhdGUgZnVuY3Rpb24gdG8gdXNlIGluIHRlc3RzXG4gIFx0XHR2YXIgc3RyaXAgPSBmdW5jdGlvbiAoc3RyLCByZSwgaWR4KSB7XG4gIFx0XHRcdHZhciBtYXRjaCA9IHJlLmV4ZWMoc3RyKTtcbiAgXHRcdFx0cmV0dXJuIG1hdGNoICYmIG1hdGNoW2lkeF07XG4gIFx0XHR9O1xuICBcdFx0cGF0aCA9IHN0cmlwKHBhdGgsIC9edXJsXFwoKFsnXCJdKT8oLispXFwxXFwpJC8sIDIpO1xuICBcdFx0cmV0dXJuIHBhdGggJiYgc3RyaXAocGF0aCwgL14oLiopbWFya2VyLWljb25cXC5wbmckLywgMSk7XG4gIFx0fSxcblxuICBcdF9kZXRlY3RJY29uUGF0aDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGVsID0gY3JlYXRlJDEoJ2RpdicsICAnbGVhZmxldC1kZWZhdWx0LWljb24tcGF0aCcsIGRvY3VtZW50LmJvZHkpO1xuICBcdFx0dmFyIHBhdGggPSBnZXRTdHlsZShlbCwgJ2JhY2tncm91bmQtaW1hZ2UnKSB8fFxuICBcdFx0ICAgICAgICAgICBnZXRTdHlsZShlbCwgJ2JhY2tncm91bmRJbWFnZScpO1x0Ly8gSUU4XG5cbiAgXHRcdGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWwpO1xuICBcdFx0cGF0aCA9IHRoaXMuX3N0cmlwVXJsKHBhdGgpO1xuICBcdFx0aWYgKHBhdGgpIHsgcmV0dXJuIHBhdGg7IH1cbiAgXHRcdHZhciBsaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbGlua1tocmVmJD1cImxlYWZsZXQuY3NzXCJdJyk7XG4gIFx0XHRpZiAoIWxpbmspIHsgcmV0dXJuICcnOyB9XG4gIFx0XHRyZXR1cm4gbGluay5ocmVmLnN1YnN0cmluZygwLCBsaW5rLmhyZWYubGVuZ3RoIC0gJ2xlYWZsZXQuY3NzJy5sZW5ndGggLSAxKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5NYXJrZXJEcmFnIGlzIHVzZWQgaW50ZXJuYWxseSBieSBMLk1hcmtlciB0byBtYWtlIHRoZSBtYXJrZXJzIGRyYWdnYWJsZS5cbiAgICovXG5cblxuICAvKiBAbmFtZXNwYWNlIE1hcmtlclxuICAgKiBAc2VjdGlvbiBJbnRlcmFjdGlvbiBoYW5kbGVyc1xuICAgKlxuICAgKiBJbnRlcmFjdGlvbiBoYW5kbGVycyBhcmUgcHJvcGVydGllcyBvZiBhIG1hcmtlciBpbnN0YW5jZSB0aGF0IGFsbG93IHlvdSB0byBjb250cm9sIGludGVyYWN0aW9uIGJlaGF2aW9yIGluIHJ1bnRpbWUsIGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZXJ0YWluIGZlYXR1cmVzIHN1Y2ggYXMgZHJhZ2dpbmcgKHNlZSBgSGFuZGxlcmAgbWV0aG9kcykuIEV4YW1wbGU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIG1hcmtlci5kcmFnZ2luZy5kaXNhYmxlKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcHJvcGVydHkgZHJhZ2dpbmc6IEhhbmRsZXJcbiAgICogTWFya2VyIGRyYWdnaW5nIGhhbmRsZXIgKGJ5IGJvdGggbW91c2UgYW5kIHRvdWNoKS4gT25seSB2YWxpZCB3aGVuIHRoZSBtYXJrZXIgaXMgb24gdGhlIG1hcCAoT3RoZXJ3aXNlIHNldCBbYG1hcmtlci5vcHRpb25zLmRyYWdnYWJsZWBdKCNtYXJrZXItZHJhZ2dhYmxlKSkuXG4gICAqL1xuXG4gIHZhciBNYXJrZXJEcmFnID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXJrZXIpIHtcbiAgXHRcdHRoaXMuX21hcmtlciA9IG1hcmtlcjtcbiAgXHR9LFxuXG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBpY29uID0gdGhpcy5fbWFya2VyLl9pY29uO1xuXG4gIFx0XHRpZiAoIXRoaXMuX2RyYWdnYWJsZSkge1xuICBcdFx0XHR0aGlzLl9kcmFnZ2FibGUgPSBuZXcgRHJhZ2dhYmxlKGljb24sIGljb24sIHRydWUpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUub24oe1xuICBcdFx0XHRkcmFnc3RhcnQ6IHRoaXMuX29uRHJhZ1N0YXJ0LFxuICBcdFx0XHRwcmVkcmFnOiB0aGlzLl9vblByZURyYWcsXG4gIFx0XHRcdGRyYWc6IHRoaXMuX29uRHJhZyxcbiAgXHRcdFx0ZHJhZ2VuZDogdGhpcy5fb25EcmFnRW5kXG4gIFx0XHR9LCB0aGlzKS5lbmFibGUoKTtcblxuICBcdFx0YWRkQ2xhc3MoaWNvbiwgJ2xlYWZsZXQtbWFya2VyLWRyYWdnYWJsZScpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLm9mZih7XG4gIFx0XHRcdGRyYWdzdGFydDogdGhpcy5fb25EcmFnU3RhcnQsXG4gIFx0XHRcdHByZWRyYWc6IHRoaXMuX29uUHJlRHJhZyxcbiAgXHRcdFx0ZHJhZzogdGhpcy5fb25EcmFnLFxuICBcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdH0sIHRoaXMpLmRpc2FibGUoKTtcblxuICBcdFx0aWYgKHRoaXMuX21hcmtlci5faWNvbikge1xuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9tYXJrZXIuX2ljb24sICdsZWFmbGV0LW1hcmtlci1kcmFnZ2FibGUnKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0bW92ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9kcmFnZ2FibGUgJiYgdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZDtcbiAgXHR9LFxuXG4gIFx0X2FkanVzdFBhbjogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXJrZXIgPSB0aGlzLl9tYXJrZXIsXG4gIFx0XHQgICAgbWFwID0gbWFya2VyLl9tYXAsXG4gIFx0XHQgICAgc3BlZWQgPSB0aGlzLl9tYXJrZXIub3B0aW9ucy5hdXRvUGFuU3BlZWQsXG4gIFx0XHQgICAgcGFkZGluZyA9IHRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW5QYWRkaW5nLFxuICBcdFx0ICAgIGljb25Qb3MgPSBnZXRQb3NpdGlvbihtYXJrZXIuX2ljb24pLFxuICBcdFx0ICAgIGJvdW5kcyA9IG1hcC5nZXRQaXhlbEJvdW5kcygpLFxuICBcdFx0ICAgIG9yaWdpbiA9IG1hcC5nZXRQaXhlbE9yaWdpbigpO1xuXG4gIFx0XHR2YXIgcGFuQm91bmRzID0gdG9Cb3VuZHMoXG4gIFx0XHRcdGJvdW5kcy5taW4uX3N1YnRyYWN0KG9yaWdpbikuYWRkKHBhZGRpbmcpLFxuICBcdFx0XHRib3VuZHMubWF4Ll9zdWJ0cmFjdChvcmlnaW4pLnN1YnRyYWN0KHBhZGRpbmcpXG4gIFx0XHQpO1xuXG4gIFx0XHRpZiAoIXBhbkJvdW5kcy5jb250YWlucyhpY29uUG9zKSkge1xuICBcdFx0XHQvLyBDb21wdXRlIGluY3JlbWVudGFsIG1vdmVtZW50XG4gIFx0XHRcdHZhciBtb3ZlbWVudCA9IHRvUG9pbnQoXG4gIFx0XHRcdFx0KE1hdGgubWF4KHBhbkJvdW5kcy5tYXgueCwgaWNvblBvcy54KSAtIHBhbkJvdW5kcy5tYXgueCkgLyAoYm91bmRzLm1heC54IC0gcGFuQm91bmRzLm1heC54KSAtXG4gIFx0XHRcdFx0KE1hdGgubWluKHBhbkJvdW5kcy5taW4ueCwgaWNvblBvcy54KSAtIHBhbkJvdW5kcy5taW4ueCkgLyAoYm91bmRzLm1pbi54IC0gcGFuQm91bmRzLm1pbi54KSxcblxuICBcdFx0XHRcdChNYXRoLm1heChwYW5Cb3VuZHMubWF4LnksIGljb25Qb3MueSkgLSBwYW5Cb3VuZHMubWF4LnkpIC8gKGJvdW5kcy5tYXgueSAtIHBhbkJvdW5kcy5tYXgueSkgLVxuICBcdFx0XHRcdChNYXRoLm1pbihwYW5Cb3VuZHMubWluLnksIGljb25Qb3MueSkgLSBwYW5Cb3VuZHMubWluLnkpIC8gKGJvdW5kcy5taW4ueSAtIHBhbkJvdW5kcy5taW4ueSlcbiAgXHRcdFx0KS5tdWx0aXBseUJ5KHNwZWVkKTtcblxuICBcdFx0XHRtYXAucGFuQnkobW92ZW1lbnQsIHthbmltYXRlOiBmYWxzZX0pO1xuXG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLl9hZGQobW92ZW1lbnQpO1xuICBcdFx0XHR0aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zLl9hZGQobW92ZW1lbnQpO1xuXG4gIFx0XHRcdHNldFBvc2l0aW9uKG1hcmtlci5faWNvbiwgdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MpO1xuICBcdFx0XHR0aGlzLl9vbkRyYWcoZSk7XG5cbiAgXHRcdFx0dGhpcy5fcGFuUmVxdWVzdCA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fYWRqdXN0UGFuLmJpbmQodGhpcywgZSkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25EcmFnU3RhcnQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIEBzZWN0aW9uIERyYWdnaW5nIGV2ZW50c1xuICBcdFx0Ly8gQGV2ZW50IGRyYWdzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgc3RhcnRzIGRyYWdnaW5nIHRoZSBtYXJrZXIuXG5cbiAgXHRcdC8vIEBldmVudCBtb3Zlc3RhcnQ6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgc3RhcnRzIG1vdmluZyAoYmVjYXVzZSBvZiBkcmFnZ2luZykuXG5cbiAgXHRcdHRoaXMuX29sZExhdExuZyA9IHRoaXMuX21hcmtlci5nZXRMYXRMbmcoKTtcblxuICBcdFx0Ly8gV2hlbiB1c2luZyBFUzYgaW1wb3J0cyBpdCBjb3VsZCBub3QgYmUgc2V0IHdoZW4gYFBvcHVwYCB3YXMgbm90IGltcG9ydGVkIGFzIHdlbGxcbiAgXHRcdHRoaXMuX21hcmtlci5jbG9zZVBvcHVwICYmIHRoaXMuX21hcmtlci5jbG9zZVBvcHVwKCk7XG5cbiAgXHRcdHRoaXMuX21hcmtlclxuICBcdFx0XHQuZmlyZSgnbW92ZXN0YXJ0JylcbiAgXHRcdFx0LmZpcmUoJ2RyYWdzdGFydCcpO1xuICBcdH0sXG5cbiAgXHRfb25QcmVEcmFnOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKHRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW4pIHtcbiAgXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX3BhblJlcXVlc3QpO1xuICBcdFx0XHR0aGlzLl9wYW5SZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLCBlKSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbkRyYWc6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgbWFya2VyID0gdGhpcy5fbWFya2VyLFxuICBcdFx0ICAgIHNoYWRvdyA9IG1hcmtlci5fc2hhZG93LFxuICBcdFx0ICAgIGljb25Qb3MgPSBnZXRQb3NpdGlvbihtYXJrZXIuX2ljb24pLFxuICBcdFx0ICAgIGxhdGxuZyA9IG1hcmtlci5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhpY29uUG9zKTtcblxuICBcdFx0Ly8gdXBkYXRlIHNoYWRvdyBwb3NpdGlvblxuICBcdFx0aWYgKHNoYWRvdykge1xuICBcdFx0XHRzZXRQb3NpdGlvbihzaGFkb3csIGljb25Qb3MpO1xuICBcdFx0fVxuXG4gIFx0XHRtYXJrZXIuX2xhdGxuZyA9IGxhdGxuZztcbiAgXHRcdGUubGF0bG5nID0gbGF0bG5nO1xuICBcdFx0ZS5vbGRMYXRMbmcgPSB0aGlzLl9vbGRMYXRMbmc7XG5cbiAgXHRcdC8vIEBldmVudCBkcmFnOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgcmVwZWF0ZWRseSB3aGlsZSB0aGUgdXNlciBkcmFncyB0aGUgbWFya2VyLlxuICBcdFx0bWFya2VyXG4gIFx0XHQgICAgLmZpcmUoJ21vdmUnLCBlKVxuICBcdFx0ICAgIC5maXJlKCdkcmFnJywgZSk7XG4gIFx0fSxcblxuICBcdF9vbkRyYWdFbmQ6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHQvLyBAZXZlbnQgZHJhZ2VuZDogRHJhZ0VuZEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHN0b3BzIGRyYWdnaW5nIHRoZSBtYXJrZXIuXG5cbiAgXHRcdCBjYW5jZWxBbmltRnJhbWUodGhpcy5fcGFuUmVxdWVzdCk7XG5cbiAgXHRcdC8vIEBldmVudCBtb3ZlZW5kOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFya2VyIHN0b3BzIG1vdmluZyAoYmVjYXVzZSBvZiBkcmFnZ2luZykuXG4gIFx0XHRkZWxldGUgdGhpcy5fb2xkTGF0TG5nO1xuICBcdFx0dGhpcy5fbWFya2VyXG4gIFx0XHQgICAgLmZpcmUoJ21vdmVlbmQnKVxuICBcdFx0ICAgIC5maXJlKCdkcmFnZW5kJywgZSk7XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBNYXJrZXJcclxuICAgKiBAaW5oZXJpdHMgSW50ZXJhY3RpdmUgbGF5ZXJcclxuICAgKiBAYWthIEwuTWFya2VyXHJcbiAgICogTC5NYXJrZXIgaXMgdXNlZCB0byBkaXNwbGF5IGNsaWNrYWJsZS9kcmFnZ2FibGUgaWNvbnMgb24gdGhlIG1hcC4gRXh0ZW5kcyBgTGF5ZXJgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC5tYXJrZXIoWzUwLjUsIDMwLjVdKS5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgTWFya2VyID0gTGF5ZXIuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBNYXJrZXIgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIGljb246IEljb24gPSAqXHJcbiAgXHRcdC8vIEljb24gaW5zdGFuY2UgdG8gdXNlIGZvciByZW5kZXJpbmcgdGhlIG1hcmtlci5cclxuICBcdFx0Ly8gU2VlIFtJY29uIGRvY3VtZW50YXRpb25dKCNMLkljb24pIGZvciBkZXRhaWxzIG9uIGhvdyB0byBjdXN0b21pemUgdGhlIG1hcmtlciBpY29uLlxyXG4gIFx0XHQvLyBJZiBub3Qgc3BlY2lmaWVkLCBhIGNvbW1vbiBpbnN0YW5jZSBvZiBgTC5JY29uLkRlZmF1bHRgIGlzIHVzZWQuXHJcbiAgXHRcdGljb246IG5ldyBJY29uRGVmYXVsdCgpLFxyXG5cclxuICBcdFx0Ly8gT3B0aW9uIGluaGVyaXRlZCBmcm9tIFwiSW50ZXJhY3RpdmUgbGF5ZXJcIiBhYnN0cmFjdCBjbGFzc1xyXG4gIFx0XHRpbnRlcmFjdGl2ZTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24ga2V5Ym9hcmQ6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIG1hcmtlciBjYW4gYmUgdGFiYmVkIHRvIHdpdGggYSBrZXlib2FyZCBhbmQgY2xpY2tlZCBieSBwcmVzc2luZyBlbnRlci5cclxuICBcdFx0a2V5Ym9hcmQ6IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHRpdGxlOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBUZXh0IGZvciB0aGUgYnJvd3NlciB0b29sdGlwIHRoYXQgYXBwZWFyIG9uIG1hcmtlciBob3ZlciAobm8gdG9vbHRpcCBieSBkZWZhdWx0KS5cclxuICBcdFx0Ly8gW1VzZWZ1bCBmb3IgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9sZWFmbGV0anMuY29tL2V4YW1wbGVzL2FjY2Vzc2liaWxpdHkvI21hcmtlcnMtbXVzdC1iZS1sYWJlbGxlZCkuXHJcbiAgXHRcdHRpdGxlOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYWx0OiBTdHJpbmcgPSAnTWFya2VyJ1xyXG4gIFx0XHQvLyBUZXh0IGZvciB0aGUgYGFsdGAgYXR0cmlidXRlIG9mIHRoZSBpY29uIGltYWdlLlxyXG4gIFx0XHQvLyBbVXNlZnVsIGZvciBhY2Nlc3NpYmlsaXR5XShodHRwczovL2xlYWZsZXRqcy5jb20vZXhhbXBsZXMvYWNjZXNzaWJpbGl0eS8jbWFya2Vycy1tdXN0LWJlLWxhYmVsbGVkKS5cclxuICBcdFx0YWx0OiAnTWFya2VyJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gekluZGV4T2Zmc2V0OiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIEJ5IGRlZmF1bHQsIG1hcmtlciBpbWFnZXMgekluZGV4IGlzIHNldCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGl0cyBsYXRpdHVkZS4gVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHB1dCB0aGUgbWFya2VyIG9uIHRvcCBvZiBhbGwgb3RoZXJzIChvciBiZWxvdyksIHNwZWNpZnlpbmcgYSBoaWdoIHZhbHVlIGxpa2UgYDEwMDBgIChvciBoaWdoIG5lZ2F0aXZlIHZhbHVlLCByZXNwZWN0aXZlbHkpLlxyXG4gIFx0XHR6SW5kZXhPZmZzZXQ6IDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxyXG4gIFx0XHQvLyBUaGUgb3BhY2l0eSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0XHRvcGFjaXR5OiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiByaXNlT25Ib3ZlcjogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIG1hcmtlciB3aWxsIGdldCBvbiB0b3Agb2Ygb3RoZXJzIHdoZW4geW91IGhvdmVyIHRoZSBtb3VzZSBvdmVyIGl0LlxyXG4gIFx0XHRyaXNlT25Ib3ZlcjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJpc2VPZmZzZXQ6IE51bWJlciA9IDI1MFxyXG4gIFx0XHQvLyBUaGUgei1pbmRleCBvZmZzZXQgdXNlZCBmb3IgdGhlIGByaXNlT25Ib3ZlcmAgZmVhdHVyZS5cclxuICBcdFx0cmlzZU9mZnNldDogMjUwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAnbWFya2VyUGFuZSdcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgbWFya2VycyBpY29uIHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHBhbmU6ICdtYXJrZXJQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gc2hhZG93UGFuZTogU3RyaW5nID0gJ3NoYWRvd1BhbmUnXHJcbiAgXHRcdC8vIGBNYXAgcGFuZWAgd2hlcmUgdGhlIG1hcmtlcnMgc2hhZG93IHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHNoYWRvd1BhbmU6ICdzaGFkb3dQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYnViYmxpbmdNb3VzZUV2ZW50czogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZW4gYHRydWVgLCBhIG1vdXNlIGV2ZW50IG9uIHRoaXMgbWFya2VyIHdpbGwgdHJpZ2dlciB0aGUgc2FtZSBldmVudCBvbiB0aGUgbWFwXHJcbiAgXHRcdC8vICh1bmxlc3MgW2BMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbmBdKCNkb21ldmVudC1zdG9wcHJvcGFnYXRpb24pIGlzIHVzZWQpLlxyXG4gIFx0XHRidWJibGluZ01vdXNlRXZlbnRzOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1Bhbk9uRm9jdXM6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZW4gYHRydWVgLCB0aGUgbWFwIHdpbGwgcGFuIHdoZW5ldmVyIHRoZSBtYXJrZXIgaXMgZm9jdXNlZCAodmlhXHJcbiAgXHRcdC8vIGUuZy4gcHJlc3NpbmcgYHRhYmAgb24gdGhlIGtleWJvYXJkKSB0byBlbnN1cmUgdGhlIG1hcmtlciBpc1xyXG4gIFx0XHQvLyB2aXNpYmxlIHdpdGhpbiB0aGUgbWFwJ3MgYm91bmRzXHJcbiAgXHRcdGF1dG9QYW5PbkZvY3VzOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQHNlY3Rpb24gRHJhZ2dhYmxlIG1hcmtlciBvcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gZHJhZ2dhYmxlOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFya2VyIGlzIGRyYWdnYWJsZSB3aXRoIG1vdXNlL3RvdWNoIG9yIG5vdC5cclxuICBcdFx0ZHJhZ2dhYmxlOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhbjogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdG8gcGFuIHRoZSBtYXAgd2hlbiBkcmFnZ2luZyB0aGlzIG1hcmtlciBuZWFyIGl0cyBlZGdlIG9yIG5vdC5cclxuICBcdFx0YXV0b1BhbjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5QYWRkaW5nOiBQb2ludCA9IFBvaW50KDUwLCA1MClcclxuICBcdFx0Ly8gRGlzdGFuY2UgKGluIHBpeGVscyB0byB0aGUgbGVmdC9yaWdodCBhbmQgdG8gdGhlIHRvcC9ib3R0b20pIG9mIHRoZVxyXG4gIFx0XHQvLyBtYXAgZWRnZSB0byBzdGFydCBwYW5uaW5nIHRoZSBtYXAuXHJcbiAgXHRcdGF1dG9QYW5QYWRkaW5nOiBbNTAsIDUwXSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhblNwZWVkOiBOdW1iZXIgPSAxMFxyXG4gIFx0XHQvLyBOdW1iZXIgb2YgcGl4ZWxzIHRoZSBtYXAgc2hvdWxkIHBhbiBieS5cclxuICBcdFx0YXV0b1BhblNwZWVkOiAxMFxyXG4gIFx0fSxcclxuXHJcbiAgXHQvKiBAc2VjdGlvblxyXG4gIFx0ICpcclxuICBcdCAqIEluIGFkZGl0aW9uIHRvIFtzaGFyZWQgbGF5ZXIgbWV0aG9kc10oI0xheWVyKSBsaWtlIGBhZGRUbygpYCBhbmQgYHJlbW92ZSgpYCBhbmQgW3BvcHVwIG1ldGhvZHNdKCNQb3B1cCkgbGlrZSBiaW5kUG9wdXAoKSB5b3UgY2FuIGFsc28gdXNlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczpcclxuICBcdCAqL1xyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChsYXRsbmcsIG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5fem9vbUFuaW1hdGVkID0gdGhpcy5fem9vbUFuaW1hdGVkICYmIG1hcC5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb247XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0bWFwLm9uKCd6b29tYW5pbScsIHRoaXMuX2FuaW1hdGVab29tLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5faW5pdEljb24oKTtcclxuICBcdFx0dGhpcy51cGRhdGUoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0aWYgKHRoaXMuZHJhZ2dpbmcgJiYgdGhpcy5kcmFnZ2luZy5lbmFibGVkKCkpIHtcclxuICBcdFx0XHR0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlID0gdHJ1ZTtcclxuICBcdFx0XHR0aGlzLmRyYWdnaW5nLnJlbW92ZUhvb2tzKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0ZGVsZXRlIHRoaXMuZHJhZ2dpbmc7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0bWFwLm9mZignem9vbWFuaW0nLCB0aGlzLl9hbmltYXRlWm9vbSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3JlbW92ZUljb24oKTtcclxuICBcdFx0dGhpcy5fcmVtb3ZlU2hhZG93KCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdHpvb206IHRoaXMudXBkYXRlLFxyXG4gIFx0XHRcdHZpZXdyZXNldDogdGhpcy51cGRhdGVcclxuICBcdFx0fTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXRMbmc6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCBnZW9ncmFwaGljYWwgcG9zaXRpb24gb2YgdGhlIG1hcmtlci5cclxuICBcdGdldExhdExuZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fbGF0bG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldExhdExuZyhsYXRsbmc6IExhdExuZyk6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgdGhlIG1hcmtlciBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgXHRzZXRMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIG9sZExhdExuZyA9IHRoaXMuX2xhdGxuZztcclxuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcclxuICBcdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBtb3ZlOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgaXMgbW92ZWQgdmlhIFtgc2V0TGF0TG5nYF0oI21hcmtlci1zZXRsYXRsbmcpIG9yIGJ5IFtkcmFnZ2luZ10oI21hcmtlci1kcmFnZ2luZykuIE9sZCBhbmQgbmV3IGNvb3JkaW5hdGVzIGFyZSBpbmNsdWRlZCBpbiBldmVudCBhcmd1bWVudHMgYXMgYG9sZExhdExuZ2AsIGBsYXRsbmdgLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlJywge29sZExhdExuZzogb2xkTGF0TG5nLCBsYXRsbmc6IHRoaXMuX2xhdGxuZ30pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpJbmRleE9mZnNldChvZmZzZXQ6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgdGhlIFt6SW5kZXggb2Zmc2V0XSgjbWFya2VyLXppbmRleG9mZnNldCkgb2YgdGhlIG1hcmtlci5cclxuICBcdHNldFpJbmRleE9mZnNldDogZnVuY3Rpb24gKG9mZnNldCkge1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0ID0gb2Zmc2V0O1xyXG4gIFx0XHRyZXR1cm4gdGhpcy51cGRhdGUoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRJY29uOiBJY29uXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGljb24gdXNlZCBieSB0aGUgbWFya2VyXHJcbiAgXHRnZXRJY29uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMuaWNvbjtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRJY29uKGljb246IEljb24pOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBtYXJrZXIgaWNvbi5cclxuICBcdHNldEljb246IGZ1bmN0aW9uIChpY29uKSB7XHJcblxyXG4gIFx0XHR0aGlzLm9wdGlvbnMuaWNvbiA9IGljb247XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdEljb24oKTtcclxuICBcdFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHR0aGlzLmJpbmRQb3B1cCh0aGlzLl9wb3B1cCwgdGhpcy5fcG9wdXAub3B0aW9ucyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFbGVtZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9pY29uO1xyXG4gIFx0fSxcclxuXHJcbiAgXHR1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pY29uICYmIHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHZhciBwb3MgPSB0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZykucm91bmQoKTtcclxuICBcdFx0XHR0aGlzLl9zZXRQb3MocG9zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SWNvbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcclxuICBcdFx0ICAgIGNsYXNzVG9BZGQgPSAnbGVhZmxldC16b29tLScgKyAodGhpcy5fem9vbUFuaW1hdGVkID8gJ2FuaW1hdGVkJyA6ICdoaWRlJyk7XHJcblxyXG4gIFx0XHR2YXIgaWNvbiA9IG9wdGlvbnMuaWNvbi5jcmVhdGVJY29uKHRoaXMuX2ljb24pLFxyXG4gIFx0XHQgICAgYWRkSWNvbiA9IGZhbHNlO1xyXG5cclxuICBcdFx0Ly8gaWYgd2UncmUgbm90IHJldXNpbmcgdGhlIGljb24sIHJlbW92ZSB0aGUgb2xkIG9uZSBhbmQgaW5pdCBuZXcgb25lXHJcbiAgXHRcdGlmIChpY29uICE9PSB0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX2ljb24pIHtcclxuICBcdFx0XHRcdHRoaXMuX3JlbW92ZUljb24oKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0YWRkSWNvbiA9IHRydWU7XHJcblxyXG4gIFx0XHRcdGlmIChvcHRpb25zLnRpdGxlKSB7XHJcbiAgXHRcdFx0XHRpY29uLnRpdGxlID0gb3B0aW9ucy50aXRsZTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdGlmIChpY29uLnRhZ05hbWUgPT09ICdJTUcnKSB7XHJcbiAgXHRcdFx0XHRpY29uLmFsdCA9IG9wdGlvbnMuYWx0IHx8ICcnO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0YWRkQ2xhc3MoaWNvbiwgY2xhc3NUb0FkZCk7XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5rZXlib2FyZCkge1xyXG4gIFx0XHRcdGljb24udGFiSW5kZXggPSAnMCc7XHJcbiAgXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2ljb24gPSBpY29uO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMucmlzZU9uSG92ZXIpIHtcclxuICBcdFx0XHR0aGlzLm9uKHtcclxuICBcdFx0XHRcdG1vdXNlb3ZlcjogdGhpcy5fYnJpbmdUb0Zyb250LFxyXG4gIFx0XHRcdFx0bW91c2VvdXQ6IHRoaXMuX3Jlc2V0WkluZGV4XHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuYXV0b1Bhbk9uRm9jdXMpIHtcclxuICBcdFx0XHRvbihpY29uLCAnZm9jdXMnLCB0aGlzLl9wYW5PbkZvY3VzLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG5ld1NoYWRvdyA9IG9wdGlvbnMuaWNvbi5jcmVhdGVTaGFkb3codGhpcy5fc2hhZG93KSxcclxuICBcdFx0ICAgIGFkZFNoYWRvdyA9IGZhbHNlO1xyXG5cclxuICBcdFx0aWYgKG5ld1NoYWRvdyAhPT0gdGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0dGhpcy5fcmVtb3ZlU2hhZG93KCk7XHJcbiAgXHRcdFx0YWRkU2hhZG93ID0gdHJ1ZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKG5ld1NoYWRvdykge1xyXG4gIFx0XHRcdGFkZENsYXNzKG5ld1NoYWRvdywgY2xhc3NUb0FkZCk7XHJcbiAgXHRcdFx0bmV3U2hhZG93LmFsdCA9ICcnO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuX3NoYWRvdyA9IG5ld1NoYWRvdztcclxuXHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5vcGFjaXR5IDwgMSkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcclxuICBcdFx0fVxyXG5cclxuXHJcbiAgXHRcdGlmIChhZGRJY29uKSB7XHJcbiAgXHRcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faWNvbik7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5faW5pdEludGVyYWN0aW9uKCk7XHJcbiAgXHRcdGlmIChuZXdTaGFkb3cgJiYgYWRkU2hhZG93KSB7XHJcbiAgXHRcdFx0dGhpcy5nZXRQYW5lKG9wdGlvbnMuc2hhZG93UGFuZSkuYXBwZW5kQ2hpbGQodGhpcy5fc2hhZG93KTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVtb3ZlSWNvbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLnJpc2VPbkhvdmVyKSB7XHJcbiAgXHRcdFx0dGhpcy5vZmYoe1xyXG4gIFx0XHRcdFx0bW91c2VvdmVyOiB0aGlzLl9icmluZ1RvRnJvbnQsXHJcbiAgXHRcdFx0XHRtb3VzZW91dDogdGhpcy5fcmVzZXRaSW5kZXhcclxuICBcdFx0XHR9KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5hdXRvUGFuT25Gb2N1cykge1xyXG4gIFx0XHRcdG9mZih0aGlzLl9pY29uLCAnZm9jdXMnLCB0aGlzLl9wYW5PbkZvY3VzLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmVtb3ZlKHRoaXMuX2ljb24pO1xyXG4gIFx0XHR0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pO1xyXG5cclxuICBcdFx0dGhpcy5faWNvbiA9IG51bGw7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVTaGFkb3c6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX3NoYWRvdykge1xyXG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9zaGFkb3cpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuX3NoYWRvdyA9IG51bGw7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRQb3M6IGZ1bmN0aW9uIChwb3MpIHtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0c2V0UG9zaXRpb24odGhpcy5faWNvbiwgcG9zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3NoYWRvdykge1xyXG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX3NoYWRvdywgcG9zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fekluZGV4ID0gcG9zLnkgKyB0aGlzLm9wdGlvbnMuekluZGV4T2Zmc2V0O1xyXG5cclxuICBcdFx0dGhpcy5fcmVzZXRaSW5kZXgoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZVpJbmRleDogZnVuY3Rpb24gKG9mZnNldCkge1xyXG4gIFx0XHRpZiAodGhpcy5faWNvbikge1xyXG4gIFx0XHRcdHRoaXMuX2ljb24uc3R5bGUuekluZGV4ID0gdGhpcy5fekluZGV4ICsgb2Zmc2V0O1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hbmltYXRlWm9vbTogZnVuY3Rpb24gKG9wdCkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLCBvcHQuem9vbSwgb3B0LmNlbnRlcikucm91bmQoKTtcclxuXHJcbiAgXHRcdHRoaXMuX3NldFBvcyhwb3MpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdEludGVyYWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGFkZENsYXNzKHRoaXMuX2ljb24sICdsZWFmbGV0LWludGVyYWN0aXZlJyk7XHJcblxyXG4gIFx0XHR0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pO1xyXG5cclxuICBcdFx0aWYgKE1hcmtlckRyYWcpIHtcclxuICBcdFx0XHR2YXIgZHJhZ2dhYmxlID0gdGhpcy5vcHRpb25zLmRyYWdnYWJsZTtcclxuICBcdFx0XHRpZiAodGhpcy5kcmFnZ2luZykge1xyXG4gIFx0XHRcdFx0ZHJhZ2dhYmxlID0gdGhpcy5kcmFnZ2luZy5lbmFibGVkKCk7XHJcbiAgXHRcdFx0XHR0aGlzLmRyYWdnaW5nLmRpc2FibGUoKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHRoaXMuZHJhZ2dpbmcgPSBuZXcgTWFya2VyRHJhZyh0aGlzKTtcclxuXHJcbiAgXHRcdFx0aWYgKGRyYWdnYWJsZSkge1xyXG4gIFx0XHRcdFx0dGhpcy5kcmFnZ2luZy5lbmFibGUoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRPcGFjaXR5KG9wYWNpdHk6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgdGhlIG9wYWNpdHkgb2YgdGhlIG1hcmtlci5cclxuICBcdHNldE9wYWNpdHk6IGZ1bmN0aW9uIChvcGFjaXR5KSB7XHJcbiAgXHRcdHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3BhY2l0eTtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVPcGFjaXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBvcGFjaXR5ID0gdGhpcy5vcHRpb25zLm9wYWNpdHk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faWNvbikge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5faWNvbiwgb3BhY2l0eSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9zaGFkb3cpIHtcclxuICBcdFx0XHRzZXRPcGFjaXR5KHRoaXMuX3NoYWRvdywgb3BhY2l0eSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgodGhpcy5vcHRpb25zLnJpc2VPZmZzZXQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVzZXRaSW5kZXg6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fdXBkYXRlWkluZGV4KDApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcGFuT25Gb2N1czogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xyXG4gIFx0XHRpZiAoIW1hcCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciBpY29uT3B0cyA9IHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnM7XHJcbiAgXHRcdHZhciBzaXplID0gaWNvbk9wdHMuaWNvblNpemUgPyB0b1BvaW50KGljb25PcHRzLmljb25TaXplKSA6IHRvUG9pbnQoMCwgMCk7XHJcbiAgXHRcdHZhciBhbmNob3IgPSBpY29uT3B0cy5pY29uQW5jaG9yID8gdG9Qb2ludChpY29uT3B0cy5pY29uQW5jaG9yKSA6IHRvUG9pbnQoMCwgMCk7XHJcblxyXG4gIFx0XHRtYXAucGFuSW5zaWRlKHRoaXMuX2xhdGxuZywge1xyXG4gIFx0XHRcdHBhZGRpbmdUb3BMZWZ0OiBhbmNob3IsXHJcbiAgXHRcdFx0cGFkZGluZ0JvdHRvbVJpZ2h0OiBzaXplLnN1YnRyYWN0KGFuY2hvcilcclxuICBcdFx0fSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRQb3B1cEFuY2hvcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcjtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFRvb2x0aXBBbmNob3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMudG9vbHRpcEFuY2hvcjtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGZhY3RvcnkgTC5tYXJrZXIobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/IDogTWFya2VyIG9wdGlvbnMpXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubWFya2VyKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPyA6IE1hcmtlciBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIE1hcmtlciBvYmplY3QgZ2l2ZW4gYSBnZW9ncmFwaGljYWwgcG9pbnQgYW5kIG9wdGlvbmFsbHkgYW4gb3B0aW9ucyBvYmplY3QuXHJcbiAgZnVuY3Rpb24gbWFya2VyKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBNYXJrZXIobGF0bG5nLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQGNsYXNzIFBhdGhcbiAgICogQGFrYSBMLlBhdGhcbiAgICogQGluaGVyaXRzIEludGVyYWN0aXZlIGxheWVyXG4gICAqXG4gICAqIEFuIGFic3RyYWN0IGNsYXNzIHRoYXQgY29udGFpbnMgb3B0aW9ucyBhbmQgY29uc3RhbnRzIHNoYXJlZCBiZXR3ZWVuIHZlY3RvclxuICAgKiBvdmVybGF5cyAoUG9seWdvbiwgUG9seWxpbmUsIENpcmNsZSkuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHkuIEV4dGVuZHMgYExheWVyYC5cbiAgICovXG5cbiAgdmFyIFBhdGggPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIFBhdGggb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gc3Ryb2tlOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBkcmF3IHN0cm9rZSBhbG9uZyB0aGUgcGF0aC4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBib3JkZXJzIG9uIHBvbHlnb25zIG9yIGNpcmNsZXMuXG4gIFx0XHRzdHJva2U6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gY29sb3I6IFN0cmluZyA9ICcjMzM4OGZmJ1xuICBcdFx0Ly8gU3Ryb2tlIGNvbG9yXG4gIFx0XHRjb2xvcjogJyMzMzg4ZmYnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHdlaWdodDogTnVtYmVyID0gM1xuICBcdFx0Ly8gU3Ryb2tlIHdpZHRoIGluIHBpeGVsc1xuICBcdFx0d2VpZ2h0OiAzLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxuICBcdFx0Ly8gU3Ryb2tlIG9wYWNpdHlcbiAgXHRcdG9wYWNpdHk6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gbGluZUNhcDogU3RyaW5nPSAncm91bmQnXG4gIFx0XHQvLyBBIHN0cmluZyB0aGF0IGRlZmluZXMgW3NoYXBlIHRvIGJlIHVzZWQgYXQgdGhlIGVuZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWNhcCkgb2YgdGhlIHN0cm9rZS5cbiAgXHRcdGxpbmVDYXA6ICdyb3VuZCcsXG5cbiAgXHRcdC8vIEBvcHRpb24gbGluZUpvaW46IFN0cmluZyA9ICdyb3VuZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbc2hhcGUgdG8gYmUgdXNlZCBhdCB0aGUgY29ybmVyc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWpvaW4pIG9mIHRoZSBzdHJva2UuXG4gIFx0XHRsaW5lSm9pbjogJ3JvdW5kJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBkYXNoQXJyYXk6IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgc3Ryb2tlIFtkYXNoIHBhdHRlcm5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLWRhc2hhcnJheSkuIERvZXNuJ3Qgd29yayBvbiBgQ2FudmFzYC1wb3dlcmVkIGxheWVycyBpbiBbc29tZSBvbGQgYnJvd3NlcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQvc2V0TGluZURhc2gjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KS5cbiAgXHRcdGRhc2hBcnJheTogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBkYXNoT2Zmc2V0OiBTdHJpbmcgPSBudWxsXG4gIFx0XHQvLyBBIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIFtkaXN0YW5jZSBpbnRvIHRoZSBkYXNoIHBhdHRlcm4gdG8gc3RhcnQgdGhlIGRhc2hdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLWRhc2hvZmZzZXQpLiBEb2Vzbid0IHdvcmsgb24gYENhbnZhc2AtcG93ZXJlZCBsYXllcnMgaW4gW3NvbWUgb2xkIGJyb3dzZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEL3NldExpbmVEYXNoI0Jyb3dzZXJfY29tcGF0aWJpbGl0eSkuXG4gIFx0XHRkYXNoT2Zmc2V0OiBudWxsLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGw6IEJvb2xlYW4gPSBkZXBlbmRzXG4gIFx0XHQvLyBXaGV0aGVyIHRvIGZpbGwgdGhlIHBhdGggd2l0aCBjb2xvci4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBmaWxsaW5nIG9uIHBvbHlnb25zIG9yIGNpcmNsZXMuXG4gIFx0XHRmaWxsOiBmYWxzZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBmaWxsQ29sb3I6IFN0cmluZyA9ICpcbiAgXHRcdC8vIEZpbGwgY29sb3IuIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgW2Bjb2xvcmBdKCNwYXRoLWNvbG9yKSBvcHRpb25cbiAgXHRcdGZpbGxDb2xvcjogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBmaWxsT3BhY2l0eTogTnVtYmVyID0gMC4yXG4gIFx0XHQvLyBGaWxsIG9wYWNpdHkuXG4gIFx0XHRmaWxsT3BhY2l0eTogMC4yLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGxSdWxlOiBTdHJpbmcgPSAnZXZlbm9kZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbaG93IHRoZSBpbnNpZGUgb2YgYSBzaGFwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9maWxsLXJ1bGUpIGlzIGRldGVybWluZWQuXG4gIFx0XHRmaWxsUnVsZTogJ2V2ZW5vZGQnLFxuXG4gIFx0XHQvLyBjbGFzc05hbWU6ICcnLFxuXG4gIFx0XHQvLyBPcHRpb24gaW5oZXJpdGVkIGZyb20gXCJJbnRlcmFjdGl2ZSBsYXllclwiIGFic3RyYWN0IGNsYXNzXG4gIFx0XHRpbnRlcmFjdGl2ZTogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBidWJibGluZ01vdXNlRXZlbnRzOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gV2hlbiBgdHJ1ZWAsIGEgbW91c2UgZXZlbnQgb24gdGhpcyBwYXRoIHdpbGwgdHJpZ2dlciB0aGUgc2FtZSBldmVudCBvbiB0aGUgbWFwXG4gIFx0XHQvLyAodW5sZXNzIFtgTC5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb25gXSgjZG9tZXZlbnQtc3RvcHByb3BhZ2F0aW9uKSBpcyB1c2VkKS5cbiAgXHRcdGJ1YmJsaW5nTW91c2VFdmVudHM6IHRydWVcbiAgXHR9LFxuXG4gIFx0YmVmb3JlQWRkOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHQvLyBSZW5kZXJlciBpcyBzZXQgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gY2FsbCByZW5kZXJlci5nZXRFdmVudHNcbiAgXHRcdC8vIGJlZm9yZSB0aGlzLmdldEV2ZW50cy5cbiAgXHRcdHRoaXMuX3JlbmRlcmVyID0gbWFwLmdldFJlbmRlcmVyKHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX2luaXRQYXRoKHRoaXMpO1xuICBcdFx0dGhpcy5fcmVzZXQoKTtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3JlbW92ZVBhdGgodGhpcyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVkcmF3KCk6IHRoaXNcbiAgXHQvLyBSZWRyYXdzIHRoZSBsYXllci4gU29tZXRpbWVzIHVzZWZ1bCBhZnRlciB5b3UgY2hhbmdlZCB0aGUgY29vcmRpbmF0ZXMgdGhhdCB0aGUgcGF0aCB1c2VzLlxuICBcdHJlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKHN0eWxlOiBQYXRoIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgYXBwZWFyYW5jZSBvZiBhIFBhdGggYmFzZWQgb24gdGhlIG9wdGlvbnMgaW4gdGhlIGBQYXRoIG9wdGlvbnNgIG9iamVjdC5cbiAgXHRzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKSB7XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIHN0eWxlKTtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyk7XG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc3Ryb2tlICYmIHN0eWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdHlsZSwgJ3dlaWdodCcpKSB7XG4gIFx0XHRcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udCgpOiB0aGlzXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciB0byB0aGUgdG9wIG9mIGFsbCBwYXRoIGxheWVycy5cbiAgXHRicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2soKTogdGhpc1xuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIGJvdHRvbSBvZiBhbGwgcGF0aCBsYXllcnMuXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3BhdGg7XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzXG4gIFx0XHR0aGlzLl9wcm9qZWN0KCk7XG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X2NsaWNrVG9sZXJhbmNlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB1c2VkIHdoZW4gZG9pbmcgaGl0IGRldGVjdGlvbiBmb3IgQ2FudmFzIGxheWVyc1xuICBcdFx0cmV0dXJuICh0aGlzLm9wdGlvbnMuc3Ryb2tlID8gdGhpcy5vcHRpb25zLndlaWdodCAvIDIgOiAwKSArXG4gIFx0XHQgICh0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZSB8fCAwKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXG4gICAqIEBjbGFzcyBDaXJjbGVNYXJrZXJcbiAgICogQGFrYSBMLkNpcmNsZU1hcmtlclxuICAgKiBAaW5oZXJpdHMgUGF0aFxuICAgKlxuICAgKiBBIGNpcmNsZSBvZiBhIGZpeGVkIHNpemUgd2l0aCByYWRpdXMgc3BlY2lmaWVkIGluIHBpeGVscy4gRXh0ZW5kcyBgUGF0aGAuXG4gICAqL1xuXG4gIHZhciBDaXJjbGVNYXJrZXIgPSBQYXRoLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgQ2lyY2xlTWFya2VyIG9wdGlvbnNcbiAgXHRvcHRpb25zOiB7XG4gIFx0XHRmaWxsOiB0cnVlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHJhZGl1czogTnVtYmVyID0gMTBcbiAgXHRcdC8vIFJhZGl1cyBvZiB0aGUgY2lyY2xlIG1hcmtlciwgaW4gcGl4ZWxzXG4gIFx0XHRyYWRpdXM6IDEwXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChsYXRsbmcsIG9wdGlvbnMpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIFx0XHR0aGlzLl9sYXRsbmcgPSB0b0xhdExuZyhsYXRsbmcpO1xuICBcdFx0dGhpcy5fcmFkaXVzID0gdGhpcy5vcHRpb25zLnJhZGl1cztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRMYXRMbmcobGF0TG5nOiBMYXRMbmcpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcG9zaXRpb24gb2YgYSBjaXJjbGUgbWFya2VyIHRvIGEgbmV3IGxvY2F0aW9uLlxuICBcdHNldExhdExuZzogZnVuY3Rpb24gKGxhdGxuZykge1xuICBcdFx0dmFyIG9sZExhdExuZyA9IHRoaXMuX2xhdGxuZztcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XG4gIFx0XHR0aGlzLnJlZHJhdygpO1xuXG4gIFx0XHQvLyBAZXZlbnQgbW92ZTogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcmtlciBpcyBtb3ZlZCB2aWEgW2BzZXRMYXRMbmdgXSgjY2lyY2xlbWFya2VyLXNldGxhdGxuZykuIE9sZCBhbmQgbmV3IGNvb3JkaW5hdGVzIGFyZSBpbmNsdWRlZCBpbiBldmVudCBhcmd1bWVudHMgYXMgYG9sZExhdExuZ2AsIGBsYXRsbmdgLlxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbW92ZScsIHtvbGRMYXRMbmc6IG9sZExhdExuZywgbGF0bG5nOiB0aGlzLl9sYXRsbmd9KTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXRMbmcoKTogTGF0TG5nXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCBnZW9ncmFwaGljYWwgcG9zaXRpb24gb2YgdGhlIGNpcmNsZSBtYXJrZXJcbiAgXHRnZXRMYXRMbmc6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9sYXRsbmc7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0UmFkaXVzKHJhZGl1czogTnVtYmVyKTogdGhpc1xuICBcdC8vIFNldHMgdGhlIHJhZGl1cyBvZiBhIGNpcmNsZSBtYXJrZXIuIFVuaXRzIGFyZSBpbiBwaXhlbHMuXG4gIFx0c2V0UmFkaXVzOiBmdW5jdGlvbiAocmFkaXVzKSB7XG4gIFx0XHR0aGlzLm9wdGlvbnMucmFkaXVzID0gdGhpcy5fcmFkaXVzID0gcmFkaXVzO1xuICBcdFx0cmV0dXJuIHRoaXMucmVkcmF3KCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0UmFkaXVzKCk6IE51bWJlclxuICBcdC8vIFJldHVybnMgdGhlIGN1cnJlbnQgcmFkaXVzIG9mIHRoZSBjaXJjbGVcbiAgXHRnZXRSYWRpdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9yYWRpdXM7XG4gIFx0fSxcblxuICBcdHNldFN0eWxlIDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgXHRcdHZhciByYWRpdXMgPSBvcHRpb25zICYmIG9wdGlvbnMucmFkaXVzIHx8IHRoaXMuX3JhZGl1cztcbiAgXHRcdFBhdGgucHJvdG90eXBlLnNldFN0eWxlLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIFx0XHR0aGlzLnNldFJhZGl1cyhyYWRpdXMpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdF9wcm9qZWN0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9wb2ludCA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlQm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgciA9IHRoaXMuX3JhZGl1cyxcbiAgXHRcdCAgICByMiA9IHRoaXMuX3JhZGl1c1kgfHwgcixcbiAgXHRcdCAgICB3ID0gdGhpcy5fY2xpY2tUb2xlcmFuY2UoKSxcbiAgXHRcdCAgICBwID0gW3IgKyB3LCByMiArIHddO1xuICBcdFx0dGhpcy5fcHhCb3VuZHMgPSBuZXcgQm91bmRzKHRoaXMuX3BvaW50LnN1YnRyYWN0KHApLCB0aGlzLl9wb2ludC5hZGQocCkpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBhdGgoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVDaXJjbGUodGhpcyk7XG4gIFx0fSxcblxuICBcdF9lbXB0eTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3JhZGl1cyAmJiAhdGhpcy5fcmVuZGVyZXIuX2JvdW5kcy5pbnRlcnNlY3RzKHRoaXMuX3B4Qm91bmRzKTtcbiAgXHR9LFxuXG4gIFx0Ly8gTmVlZGVkIGJ5IHRoZSBgQ2FudmFzYCByZW5kZXJlciBmb3IgaW50ZXJhY3Rpdml0eVxuICBcdF9jb250YWluc1BvaW50OiBmdW5jdGlvbiAocCkge1xuICBcdFx0cmV0dXJuIHAuZGlzdGFuY2VUbyh0aGlzLl9wb2ludCkgPD0gdGhpcy5fcmFkaXVzICsgdGhpcy5fY2xpY2tUb2xlcmFuY2UoKTtcbiAgXHR9XG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGVNYXJrZXIobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBDaXJjbGVNYXJrZXIgb3B0aW9ucylcbiAgLy8gSW5zdGFudGlhdGVzIGEgY2lyY2xlIG1hcmtlciBvYmplY3QgZ2l2ZW4gYSBnZW9ncmFwaGljYWwgcG9pbnQsIGFuZCBhbiBvcHRpb25hbCBvcHRpb25zIG9iamVjdC5cbiAgZnVuY3Rpb24gY2lyY2xlTWFya2VyKGxhdGxuZywgb3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgQ2lyY2xlTWFya2VyKGxhdGxuZywgb3B0aW9ucyk7XG4gIH1cblxuICAvKlxuICAgKiBAY2xhc3MgQ2lyY2xlXG4gICAqIEBha2EgTC5DaXJjbGVcbiAgICogQGluaGVyaXRzIENpcmNsZU1hcmtlclxuICAgKlxuICAgKiBBIGNsYXNzIGZvciBkcmF3aW5nIGNpcmNsZSBvdmVybGF5cyBvbiBhIG1hcC4gRXh0ZW5kcyBgQ2lyY2xlTWFya2VyYC5cbiAgICpcbiAgICogSXQncyBhbiBhcHByb3hpbWF0aW9uIGFuZCBzdGFydHMgdG8gZGl2ZXJnZSBmcm9tIGEgcmVhbCBjaXJjbGUgY2xvc2VyIHRvIHBvbGVzIChkdWUgdG8gcHJvamVjdGlvbiBkaXN0b3J0aW9uKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogTC5jaXJjbGUoWzUwLjUsIDMwLjVdLCB7cmFkaXVzOiAyMDB9KS5hZGRUbyhtYXApO1xuICAgKiBgYGBcbiAgICovXG5cbiAgdmFyIENpcmNsZSA9IENpcmNsZU1hcmtlci5leHRlbmQoe1xuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucywgbGVnYWN5T3B0aW9ucykge1xuICBcdFx0aWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICBcdFx0XHQvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIDAuNy54IGZhY3RvcnkgKGxhdGxuZywgcmFkaXVzLCBvcHRpb25zPylcbiAgXHRcdFx0b3B0aW9ucyA9IGV4dGVuZCh7fSwgbGVnYWN5T3B0aW9ucywge3JhZGl1czogb3B0aW9uc30pO1xuICBcdFx0fVxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XG5cbiAgXHRcdGlmIChpc05hTih0aGlzLm9wdGlvbnMucmFkaXVzKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0NpcmNsZSByYWRpdXMgY2Fubm90IGJlIE5hTicpOyB9XG5cbiAgXHRcdC8vIEBzZWN0aW9uXG4gIFx0XHQvLyBAYWthIENpcmNsZSBvcHRpb25zXG4gIFx0XHQvLyBAb3B0aW9uIHJhZGl1czogTnVtYmVyOyBSYWRpdXMgb2YgdGhlIGNpcmNsZSwgaW4gbWV0ZXJzLlxuICBcdFx0dGhpcy5fbVJhZGl1cyA9IHRoaXMub3B0aW9ucy5yYWRpdXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0UmFkaXVzKHJhZGl1czogTnVtYmVyKTogdGhpc1xuICBcdC8vIFNldHMgdGhlIHJhZGl1cyBvZiBhIGNpcmNsZS4gVW5pdHMgYXJlIGluIG1ldGVycy5cbiAgXHRzZXRSYWRpdXM6IGZ1bmN0aW9uIChyYWRpdXMpIHtcbiAgXHRcdHRoaXMuX21SYWRpdXMgPSByYWRpdXM7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRSYWRpdXMoKTogTnVtYmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCByYWRpdXMgb2YgYSBjaXJjbGUuIFVuaXRzIGFyZSBpbiBtZXRlcnMuXG4gIFx0Z2V0UmFkaXVzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbVJhZGl1cztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHMoKTogTGF0TG5nQm91bmRzXG4gIFx0Ly8gUmV0dXJucyB0aGUgYExhdExuZ0JvdW5kc2Agb2YgdGhlIHBhdGguXG4gIFx0Z2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgaGFsZiA9IFt0aGlzLl9yYWRpdXMsIHRoaXMuX3JhZGl1c1kgfHwgdGhpcy5fcmFkaXVzXTtcblxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoXG4gIFx0XHRcdHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQuc3VidHJhY3QoaGFsZikpLFxuICBcdFx0XHR0aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50LmFkZChoYWxmKSkpO1xuICBcdH0sXG5cbiAgXHRzZXRTdHlsZTogUGF0aC5wcm90b3R5cGUuc2V0U3R5bGUsXG5cbiAgXHRfcHJvamVjdDogZnVuY3Rpb24gKCkge1xuXG4gIFx0XHR2YXIgbG5nID0gdGhpcy5fbGF0bG5nLmxuZyxcbiAgXHRcdCAgICBsYXQgPSB0aGlzLl9sYXRsbmcubGF0LFxuICBcdFx0ICAgIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBjcnMgPSBtYXAub3B0aW9ucy5jcnM7XG5cbiAgXHRcdGlmIChjcnMuZGlzdGFuY2UgPT09IEVhcnRoLmRpc3RhbmNlKSB7XG4gIFx0XHRcdHZhciBkID0gTWF0aC5QSSAvIDE4MCxcbiAgXHRcdFx0ICAgIGxhdFIgPSAodGhpcy5fbVJhZGl1cyAvIEVhcnRoLlIpIC8gZCxcbiAgXHRcdFx0ICAgIHRvcCA9IG1hcC5wcm9qZWN0KFtsYXQgKyBsYXRSLCBsbmddKSxcbiAgXHRcdFx0ICAgIGJvdHRvbSA9IG1hcC5wcm9qZWN0KFtsYXQgLSBsYXRSLCBsbmddKSxcbiAgXHRcdFx0ICAgIHAgPSB0b3AuYWRkKGJvdHRvbSkuZGl2aWRlQnkoMiksXG4gIFx0XHRcdCAgICBsYXQyID0gbWFwLnVucHJvamVjdChwKS5sYXQsXG4gIFx0XHRcdCAgICBsbmdSID0gTWF0aC5hY29zKChNYXRoLmNvcyhsYXRSICogZCkgLSBNYXRoLnNpbihsYXQgKiBkKSAqIE1hdGguc2luKGxhdDIgKiBkKSkgL1xuICBcdFx0XHQgICAgICAgICAgICAoTWF0aC5jb3MobGF0ICogZCkgKiBNYXRoLmNvcyhsYXQyICogZCkpKSAvIGQ7XG5cbiAgXHRcdFx0aWYgKGlzTmFOKGxuZ1IpIHx8IGxuZ1IgPT09IDApIHtcbiAgXHRcdFx0XHRsbmdSID0gbGF0UiAvIE1hdGguY29zKE1hdGguUEkgLyAxODAgKiBsYXQpOyAvLyBGYWxsYmFjayBmb3IgZWRnZSBjYXNlLCAjMjQyNVxuICBcdFx0XHR9XG5cbiAgXHRcdFx0dGhpcy5fcG9pbnQgPSBwLnN1YnRyYWN0KG1hcC5nZXRQaXhlbE9yaWdpbigpKTtcbiAgXHRcdFx0dGhpcy5fcmFkaXVzID0gaXNOYU4obG5nUikgPyAwIDogcC54IC0gbWFwLnByb2plY3QoW2xhdDIsIGxuZyAtIGxuZ1JdKS54O1xuICBcdFx0XHR0aGlzLl9yYWRpdXNZID0gcC55IC0gdG9wLnk7XG5cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHZhciBsYXRsbmcyID0gY3JzLnVucHJvamVjdChjcnMucHJvamVjdCh0aGlzLl9sYXRsbmcpLnN1YnRyYWN0KFt0aGlzLl9tUmFkaXVzLCAwXSkpO1xuXG4gIFx0XHRcdHRoaXMuX3BvaW50ID0gbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO1xuICBcdFx0XHR0aGlzLl9yYWRpdXMgPSB0aGlzLl9wb2ludC54IC0gbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChsYXRsbmcyKS54O1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl91cGRhdGVCb3VuZHMoKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBmYWN0b3J5IEwuY2lyY2xlKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogQ2lyY2xlIG9wdGlvbnMpXG4gIC8vIEluc3RhbnRpYXRlcyBhIGNpcmNsZSBvYmplY3QgZ2l2ZW4gYSBnZW9ncmFwaGljYWwgcG9pbnQsIGFuZCBhbiBvcHRpb25zIG9iamVjdFxuICAvLyB3aGljaCBjb250YWlucyB0aGUgY2lyY2xlIHJhZGl1cy5cbiAgLy8gQGFsdGVybmF0aXZlXG4gIC8vIEBmYWN0b3J5IEwuY2lyY2xlKGxhdGxuZzogTGF0TG5nLCByYWRpdXM6IE51bWJlciwgb3B0aW9ucz86IENpcmNsZSBvcHRpb25zKVxuICAvLyBPYnNvbGV0ZSB3YXkgb2YgaW5zdGFudGlhdGluZyBhIGNpcmNsZSwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCAwLjcueCBjb2RlLlxuICAvLyBEbyBub3QgdXNlIGluIG5ldyBhcHBsaWNhdGlvbnMgb3IgcGx1Z2lucy5cbiAgZnVuY3Rpb24gY2lyY2xlKGxhdGxuZywgb3B0aW9ucywgbGVnYWN5T3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgQ2lyY2xlKGxhdGxuZywgb3B0aW9ucywgbGVnYWN5T3B0aW9ucyk7XG4gIH1cblxuICAvKlxuICAgKiBAY2xhc3MgUG9seWxpbmVcbiAgICogQGFrYSBMLlBvbHlsaW5lXG4gICAqIEBpbmhlcml0cyBQYXRoXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgcG9seWxpbmUgb3ZlcmxheXMgb24gYSBtYXAuIEV4dGVuZHMgYFBhdGhgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBjcmVhdGUgYSByZWQgcG9seWxpbmUgZnJvbSBhbiBhcnJheSBvZiBMYXRMbmcgcG9pbnRzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiBcdFs0NS41MSwgLTEyMi42OF0sXG4gICAqIFx0WzM3Ljc3LCAtMTIyLjQzXSxcbiAgICogXHRbMzQuMDQsIC0xMTguMl1cbiAgICogXTtcbiAgICpcbiAgICogdmFyIHBvbHlsaW5lID0gTC5wb2x5bGluZShsYXRsbmdzLCB7Y29sb3I6ICdyZWQnfSkuYWRkVG8obWFwKTtcbiAgICpcbiAgICogLy8gem9vbSB0aGUgbWFwIHRvIHRoZSBwb2x5bGluZVxuICAgKiBtYXAuZml0Qm91bmRzKHBvbHlsaW5lLmdldEJvdW5kcygpKTtcbiAgICogYGBgXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwYXNzIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgdG8gcmVwcmVzZW50IGEgYE11bHRpUG9seWxpbmVgIHNoYXBlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBjcmVhdGUgYSByZWQgcG9seWxpbmUgZnJvbSBhbiBhcnJheSBvZiBhcnJheXMgb2YgTGF0TG5nIHBvaW50c1xuICAgKiB2YXIgbGF0bG5ncyA9IFtcbiAgICogXHRbWzQ1LjUxLCAtMTIyLjY4XSxcbiAgICogXHQgWzM3Ljc3LCAtMTIyLjQzXSxcbiAgICogXHQgWzM0LjA0LCAtMTE4LjJdXSxcbiAgICogXHRbWzQwLjc4LCAtNzMuOTFdLFxuICAgKiBcdCBbNDEuODMsIC04Ny42Ml0sXG4gICAqIFx0IFszMi43NiwgLTk2LjcyXV1cbiAgICogXTtcbiAgICogYGBgXG4gICAqL1xuXG5cbiAgdmFyIFBvbHlsaW5lID0gUGF0aC5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIFBvbHlsaW5lIG9wdGlvbnNcbiAgXHRvcHRpb25zOiB7XG4gIFx0XHQvLyBAb3B0aW9uIHNtb290aEZhY3RvcjogTnVtYmVyID0gMS4wXG4gIFx0XHQvLyBIb3cgbXVjaCB0byBzaW1wbGlmeSB0aGUgcG9seWxpbmUgb24gZWFjaCB6b29tIGxldmVsLiBNb3JlIG1lYW5zXG4gIFx0XHQvLyBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIHNtb290aGVyIGxvb2ssIGFuZCBsZXNzIG1lYW5zIG1vcmUgYWNjdXJhdGUgcmVwcmVzZW50YXRpb24uXG4gIFx0XHRzbW9vdGhGYWN0b3I6IDEuMCxcblxuICBcdFx0Ly8gQG9wdGlvbiBub0NsaXA6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gRGlzYWJsZSBwb2x5bGluZSBjbGlwcGluZy5cbiAgXHRcdG5vQ2xpcDogZmFsc2VcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdGxuZ3MsIG9wdGlvbnMpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIFx0XHR0aGlzLl9zZXRMYXRMbmdzKGxhdGxuZ3MpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldExhdExuZ3MoKTogTGF0TG5nW11cbiAgXHQvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBwb2ludHMgaW4gdGhlIHBhdGgsIG9yIG5lc3RlZCBhcnJheXMgb2YgcG9pbnRzIGluIGNhc2Ugb2YgbXVsdGktcG9seWxpbmUuXG4gIFx0Z2V0TGF0TG5nczogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xhdGxuZ3M7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0TGF0TG5ncyhsYXRsbmdzOiBMYXRMbmdbXSk6IHRoaXNcbiAgXHQvLyBSZXBsYWNlcyBhbGwgdGhlIHBvaW50cyBpbiB0aGUgcG9seWxpbmUgd2l0aCB0aGUgZ2l2ZW4gYXJyYXkgb2YgZ2VvZ3JhcGhpY2FsIHBvaW50cy5cbiAgXHRzZXRMYXRMbmdzOiBmdW5jdGlvbiAobGF0bG5ncykge1xuICBcdFx0dGhpcy5fc2V0TGF0TG5ncyhsYXRsbmdzKTtcbiAgXHRcdHJldHVybiB0aGlzLnJlZHJhdygpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGlzRW1wdHkoKTogQm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBQb2x5bGluZSBoYXMgbm8gTGF0TG5ncy5cbiAgXHRpc0VtcHR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gIXRoaXMuX2xhdGxuZ3MubGVuZ3RoO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGNsb3Nlc3RMYXllclBvaW50KHA6IFBvaW50KTogUG9pbnRcbiAgXHQvLyBSZXR1cm5zIHRoZSBwb2ludCBjbG9zZXN0IHRvIGBwYCBvbiB0aGUgUG9seWxpbmUuXG4gIFx0Y2xvc2VzdExheWVyUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHR2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eSxcbiAgXHRcdCAgICBtaW5Qb2ludCA9IG51bGwsXG4gIFx0XHQgICAgY2xvc2VzdCA9IF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCxcbiAgXHRcdCAgICBwMSwgcDI7XG5cbiAgXHRcdGZvciAodmFyIGogPSAwLCBqTGVuID0gdGhpcy5fcGFydHMubGVuZ3RoOyBqIDwgakxlbjsgaisrKSB7XG4gIFx0XHRcdHZhciBwb2ludHMgPSB0aGlzLl9wYXJ0c1tqXTtcblxuICBcdFx0XHRmb3IgKHZhciBpID0gMSwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdFx0cDEgPSBwb2ludHNbaSAtIDFdO1xuICBcdFx0XHRcdHAyID0gcG9pbnRzW2ldO1xuXG4gIFx0XHRcdFx0dmFyIHNxRGlzdCA9IGNsb3Nlc3QocCwgcDEsIHAyLCB0cnVlKTtcblxuICBcdFx0XHRcdGlmIChzcURpc3QgPCBtaW5EaXN0YW5jZSkge1xuICBcdFx0XHRcdFx0bWluRGlzdGFuY2UgPSBzcURpc3Q7XG4gIFx0XHRcdFx0XHRtaW5Qb2ludCA9IGNsb3Nlc3QocCwgcDEsIHAyKTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdGlmIChtaW5Qb2ludCkge1xuICBcdFx0XHRtaW5Qb2ludC5kaXN0YW5jZSA9IE1hdGguc3FydChtaW5EaXN0YW5jZSk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gbWluUG9pbnQ7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0Q2VudGVyKCk6IExhdExuZ1xuICBcdC8vIFJldHVybnMgdGhlIGNlbnRlciAoW2NlbnRyb2lkXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50cm9pZCkpIG9mIHRoZSBwb2x5bGluZS5cbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIHRocm93cyBlcnJvciB3aGVuIG5vdCB5ZXQgYWRkZWQgdG8gbWFwIGFzIHRoaXMgY2VudGVyIGNhbGN1bGF0aW9uIHJlcXVpcmVzIHByb2plY3RlZCBjb29yZGluYXRlc1xuICBcdFx0aWYgKCF0aGlzLl9tYXApIHtcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpJyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gcG9seWxpbmVDZW50ZXIodGhpcy5fZGVmYXVsdFNoYXBlKCksIHRoaXMuX21hcC5vcHRpb25zLmNycyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzKCk6IExhdExuZ0JvdW5kc1xuICBcdC8vIFJldHVybnMgdGhlIGBMYXRMbmdCb3VuZHNgIG9mIHRoZSBwYXRoLlxuICBcdGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2JvdW5kcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBhZGRMYXRMbmcobGF0bG5nOiBMYXRMbmcsIGxhdGxuZ3M/OiBMYXRMbmdbXSk6IHRoaXNcbiAgXHQvLyBBZGRzIGEgZ2l2ZW4gcG9pbnQgdG8gdGhlIHBvbHlsaW5lLiBCeSBkZWZhdWx0LCBhZGRzIHRvIHRoZSBmaXJzdCByaW5nIG9mXG4gIFx0Ly8gdGhlIHBvbHlsaW5lIGluIGNhc2Ugb2YgYSBtdWx0aS1wb2x5bGluZSwgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmdcbiAgXHQvLyBhIHNwZWNpZmljIHJpbmcgYXMgYSBMYXRMbmcgYXJyYXkgKHRoYXQgeW91IGNhbiBlYXJsaWVyIGFjY2VzcyB3aXRoIFtgZ2V0TGF0TG5nc2BdKCNwb2x5bGluZS1nZXRsYXRsbmdzKSkuXG4gIFx0YWRkTGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nLCBsYXRsbmdzKSB7XG4gIFx0XHRsYXRsbmdzID0gbGF0bG5ncyB8fCB0aGlzLl9kZWZhdWx0U2hhcGUoKTtcbiAgXHRcdGxhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XG4gIFx0XHRsYXRsbmdzLnB1c2gobGF0bG5nKTtcbiAgXHRcdHRoaXMuX2JvdW5kcy5leHRlbmQobGF0bG5nKTtcbiAgXHRcdHJldHVybiB0aGlzLnJlZHJhdygpO1xuICBcdH0sXG5cbiAgXHRfc2V0TGF0TG5nczogZnVuY3Rpb24gKGxhdGxuZ3MpIHtcbiAgXHRcdHRoaXMuX2JvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoKTtcbiAgXHRcdHRoaXMuX2xhdGxuZ3MgPSB0aGlzLl9jb252ZXJ0TGF0TG5ncyhsYXRsbmdzKTtcbiAgXHR9LFxuXG4gIFx0X2RlZmF1bHRTaGFwZTogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIGlzRmxhdCh0aGlzLl9sYXRsbmdzKSA/IHRoaXMuX2xhdGxuZ3MgOiB0aGlzLl9sYXRsbmdzWzBdO1xuICBcdH0sXG5cbiAgXHQvLyByZWN1cnNpdmVseSBjb252ZXJ0IGxhdGxuZ3MgaW5wdXQgaW50byBhY3R1YWwgTGF0TG5nIGluc3RhbmNlczsgY2FsY3VsYXRlIGJvdW5kcyBhbG9uZyB0aGUgd2F5XG4gIFx0X2NvbnZlcnRMYXRMbmdzOiBmdW5jdGlvbiAobGF0bG5ncykge1xuICBcdFx0dmFyIHJlc3VsdCA9IFtdLFxuICBcdFx0ICAgIGZsYXQgPSBpc0ZsYXQobGF0bG5ncyk7XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXRsbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGlmIChmbGF0KSB7XG4gIFx0XHRcdFx0cmVzdWx0W2ldID0gdG9MYXRMbmcobGF0bG5nc1tpXSk7XG4gIFx0XHRcdFx0dGhpcy5fYm91bmRzLmV4dGVuZChyZXN1bHRbaV0pO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdHJlc3VsdFtpXSA9IHRoaXMuX2NvbnZlcnRMYXRMbmdzKGxhdGxuZ3NbaV0pO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiByZXN1bHQ7XG4gIFx0fSxcblxuICBcdF9wcm9qZWN0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcHhCb3VuZHMgPSBuZXcgQm91bmRzKCk7XG4gIFx0XHR0aGlzLl9yaW5ncyA9IFtdO1xuICBcdFx0dGhpcy5fcHJvamVjdExhdGxuZ3ModGhpcy5fbGF0bG5ncywgdGhpcy5fcmluZ3MsIHB4Qm91bmRzKTtcblxuICBcdFx0aWYgKHRoaXMuX2JvdW5kcy5pc1ZhbGlkKCkgJiYgcHhCb3VuZHMuaXNWYWxpZCgpKSB7XG4gIFx0XHRcdHRoaXMuX3Jhd1B4Qm91bmRzID0gcHhCb3VuZHM7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlQm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgdyA9IHRoaXMuX2NsaWNrVG9sZXJhbmNlKCksXG4gIFx0XHQgICAgcCA9IG5ldyBQb2ludCh3LCB3KTtcblxuICBcdFx0aWYgKCF0aGlzLl9yYXdQeEJvdW5kcykge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3B4Qm91bmRzID0gbmV3IEJvdW5kcyhbXG4gIFx0XHRcdHRoaXMuX3Jhd1B4Qm91bmRzLm1pbi5zdWJ0cmFjdChwKSxcbiAgXHRcdFx0dGhpcy5fcmF3UHhCb3VuZHMubWF4LmFkZChwKVxuICBcdFx0XSk7XG4gIFx0fSxcblxuICBcdC8vIHJlY3Vyc2l2ZWx5IHR1cm5zIGxhdGxuZ3MgaW50byBhIHNldCBvZiByaW5ncyB3aXRoIHByb2plY3RlZCBjb29yZGluYXRlc1xuICBcdF9wcm9qZWN0TGF0bG5nczogZnVuY3Rpb24gKGxhdGxuZ3MsIHJlc3VsdCwgcHJvamVjdGVkQm91bmRzKSB7XG4gIFx0XHR2YXIgZmxhdCA9IGxhdGxuZ3NbMF0gaW5zdGFuY2VvZiBMYXRMbmcsXG4gIFx0XHQgICAgbGVuID0gbGF0bG5ncy5sZW5ndGgsXG4gIFx0XHQgICAgaSwgcmluZztcblxuICBcdFx0aWYgKGZsYXQpIHtcbiAgXHRcdFx0cmluZyA9IFtdO1xuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0XHRyaW5nW2ldID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludChsYXRsbmdzW2ldKTtcbiAgXHRcdFx0XHRwcm9qZWN0ZWRCb3VuZHMuZXh0ZW5kKHJpbmdbaV0pO1xuICBcdFx0XHR9XG4gIFx0XHRcdHJlc3VsdC5wdXNoKHJpbmcpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdFx0dGhpcy5fcHJvamVjdExhdGxuZ3MobGF0bG5nc1tpXSwgcmVzdWx0LCBwcm9qZWN0ZWRCb3VuZHMpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdC8vIGNsaXAgcG9seWxpbmUgYnkgcmVuZGVyZXIgYm91bmRzIHNvIHRoYXQgd2UgaGF2ZSBsZXNzIHRvIHJlbmRlciBmb3IgcGVyZm9ybWFuY2VcbiAgXHRfY2xpcFBvaW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX3JlbmRlcmVyLl9ib3VuZHM7XG5cbiAgXHRcdHRoaXMuX3BhcnRzID0gW107XG4gIFx0XHRpZiAoIXRoaXMuX3B4Qm91bmRzIHx8ICF0aGlzLl9weEJvdW5kcy5pbnRlcnNlY3RzKGJvdW5kcykpIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2xpcCkge1xuICBcdFx0XHR0aGlzLl9wYXJ0cyA9IHRoaXMuX3JpbmdzO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBwYXJ0cyA9IHRoaXMuX3BhcnRzLFxuICBcdFx0ICAgIGksIGosIGssIGxlbiwgbGVuMiwgc2VnbWVudCwgcG9pbnRzO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBrID0gMCwgbGVuID0gdGhpcy5fcmluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0cG9pbnRzID0gdGhpcy5fcmluZ3NbaV07XG5cbiAgXHRcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBvaW50cy5sZW5ndGg7IGogPCBsZW4yIC0gMTsgaisrKSB7XG4gIFx0XHRcdFx0c2VnbWVudCA9IGNsaXBTZWdtZW50KHBvaW50c1tqXSwgcG9pbnRzW2ogKyAxXSwgYm91bmRzLCBqLCB0cnVlKTtcblxuICBcdFx0XHRcdGlmICghc2VnbWVudCkgeyBjb250aW51ZTsgfVxuXG4gIFx0XHRcdFx0cGFydHNba10gPSBwYXJ0c1trXSB8fCBbXTtcbiAgXHRcdFx0XHRwYXJ0c1trXS5wdXNoKHNlZ21lbnRbMF0pO1xuXG4gIFx0XHRcdFx0Ly8gaWYgc2VnbWVudCBnb2VzIG91dCBvZiBzY3JlZW4sIG9yIGl0J3MgdGhlIGxhc3Qgb25lLCBpdCdzIHRoZSBlbmQgb2YgdGhlIGxpbmUgcGFydFxuICBcdFx0XHRcdGlmICgoc2VnbWVudFsxXSAhPT0gcG9pbnRzW2ogKyAxXSkgfHwgKGogPT09IGxlbjIgLSAyKSkge1xuICBcdFx0XHRcdFx0cGFydHNba10ucHVzaChzZWdtZW50WzFdKTtcbiAgXHRcdFx0XHRcdGsrKztcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Ly8gc2ltcGxpZnkgZWFjaCBjbGlwcGVkIHBhcnQgb2YgdGhlIHBvbHlsaW5lIGZvciBwZXJmb3JtYW5jZVxuICBcdF9zaW1wbGlmeVBvaW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHBhcnRzID0gdGhpcy5fcGFydHMsXG4gIFx0XHQgICAgdG9sZXJhbmNlID0gdGhpcy5vcHRpb25zLnNtb290aEZhY3RvcjtcblxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdHBhcnRzW2ldID0gc2ltcGxpZnkocGFydHNbaV0sIHRvbGVyYW5jZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7IHJldHVybjsgfVxuXG4gIFx0XHR0aGlzLl9jbGlwUG9pbnRzKCk7XG4gIFx0XHR0aGlzLl9zaW1wbGlmeVBvaW50cygpO1xuICBcdFx0dGhpcy5fdXBkYXRlUGF0aCgpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZVBvbHkodGhpcyk7XG4gIFx0fSxcblxuICBcdC8vIE5lZWRlZCBieSB0aGUgYENhbnZhc2AgcmVuZGVyZXIgZm9yIGludGVyYWN0aXZpdHlcbiAgXHRfY29udGFpbnNQb2ludDogZnVuY3Rpb24gKHAsIGNsb3NlZCkge1xuICBcdFx0dmFyIGksIGosIGssIGxlbiwgbGVuMiwgcGFydCxcbiAgXHRcdCAgICB3ID0gdGhpcy5fY2xpY2tUb2xlcmFuY2UoKTtcblxuICBcdFx0aWYgKCF0aGlzLl9weEJvdW5kcyB8fCAhdGhpcy5fcHhCb3VuZHMuY29udGFpbnMocCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cbiAgXHRcdC8vIGhpdCBkZXRlY3Rpb24gZm9yIHBvbHlsaW5lc1xuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gdGhpcy5fcGFydHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0cGFydCA9IHRoaXMuX3BhcnRzW2ldO1xuXG4gIFx0XHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwYXJ0Lmxlbmd0aCwgayA9IGxlbjIgLSAxOyBqIDwgbGVuMjsgayA9IGorKykge1xuICBcdFx0XHRcdGlmICghY2xvc2VkICYmIChqID09PSAwKSkgeyBjb250aW51ZTsgfVxuXG4gIFx0XHRcdFx0aWYgKHBvaW50VG9TZWdtZW50RGlzdGFuY2UocCwgcGFydFtrXSwgcGFydFtqXSkgPD0gdykge1xuICBcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gZmFsc2U7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLnBvbHlsaW5lKGxhdGxuZ3M6IExhdExuZ1tdLCBvcHRpb25zPzogUG9seWxpbmUgb3B0aW9ucylcbiAgLy8gSW5zdGFudGlhdGVzIGEgcG9seWxpbmUgb2JqZWN0IGdpdmVuIGFuIGFycmF5IG9mIGdlb2dyYXBoaWNhbCBwb2ludHMgYW5kXG4gIC8vIG9wdGlvbmFsbHkgYW4gb3B0aW9ucyBvYmplY3QuIFlvdSBjYW4gY3JlYXRlIGEgYFBvbHlsaW5lYCBvYmplY3Qgd2l0aFxuICAvLyBtdWx0aXBsZSBzZXBhcmF0ZSBsaW5lcyAoYE11bHRpUG9seWxpbmVgKSBieSBwYXNzaW5nIGFuIGFycmF5IG9mIGFycmF5c1xuICAvLyBvZiBnZW9ncmFwaGljIHBvaW50cy5cbiAgZnVuY3Rpb24gcG9seWxpbmUobGF0bG5ncywgb3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgUG9seWxpbmUobGF0bG5ncywgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBSZXRyb2NvbXBhdC4gQWxsb3cgcGx1Z2lucyB0byBzdXBwb3J0IExlYWZsZXQgdmVyc2lvbnMgYmVmb3JlIGFuZCBhZnRlciAxLjEuXG4gIFBvbHlsaW5lLl9mbGF0ID0gX2ZsYXQ7XG5cbiAgLypcbiAgICogQGNsYXNzIFBvbHlnb25cbiAgICogQGFrYSBMLlBvbHlnb25cbiAgICogQGluaGVyaXRzIFBvbHlsaW5lXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgcG9seWdvbiBvdmVybGF5cyBvbiBhIG1hcC4gRXh0ZW5kcyBgUG9seWxpbmVgLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgcG9pbnRzIHlvdSBwYXNzIHdoZW4gY3JlYXRpbmcgYSBwb2x5Z29uIHNob3VsZG4ndCBoYXZlIGFuIGFkZGl0aW9uYWwgbGFzdCBwb2ludCBlcXVhbCB0byB0aGUgZmlyc3Qgb25lIOKAlCBpdCdzIGJldHRlciB0byBmaWx0ZXIgb3V0IHN1Y2ggcG9pbnRzLlxuICAgKlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBjcmVhdGUgYSByZWQgcG9seWdvbiBmcm9tIGFuIGFycmF5IG9mIExhdExuZyBwb2ludHNcbiAgICogdmFyIGxhdGxuZ3MgPSBbWzM3LCAtMTA5LjA1XSxbNDEsIC0xMDkuMDNdLFs0MSwgLTEwMi4wNV0sWzM3LCAtMTAyLjA0XV07XG4gICAqXG4gICAqIHZhciBwb2x5Z29uID0gTC5wb2x5Z29uKGxhdGxuZ3MsIHtjb2xvcjogJ3JlZCd9KS5hZGRUbyhtYXApO1xuICAgKlxuICAgKiAvLyB6b29tIHRoZSBtYXAgdG8gdGhlIHBvbHlnb25cbiAgICogbWFwLmZpdEJvdW5kcyhwb2x5Z29uLmdldEJvdW5kcygpKTtcbiAgICogYGBgXG4gICAqXG4gICAqIFlvdSBjYW4gYWxzbyBwYXNzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBsYXRsbmdzLCB3aXRoIHRoZSBmaXJzdCBhcnJheSByZXByZXNlbnRpbmcgdGhlIG91dGVyIHNoYXBlIGFuZCB0aGUgb3RoZXIgYXJyYXlzIHJlcHJlc2VudGluZyBob2xlcyBpbiB0aGUgb3V0ZXIgc2hhcGU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiAgIFtbMzcsIC0xMDkuMDVdLFs0MSwgLTEwOS4wM10sWzQxLCAtMTAyLjA1XSxbMzcsIC0xMDIuMDRdXSwgLy8gb3V0ZXIgcmluZ1xuICAgKiAgIFtbMzcuMjksIC0xMDguNThdLFs0MC43MSwgLTEwOC41OF0sWzQwLjcxLCAtMTAyLjUwXSxbMzcuMjksIC0xMDIuNTBdXSAvLyBob2xlXG4gICAqIF07XG4gICAqIGBgYFxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIHlvdSBjYW4gcGFzcyBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IHRvIHJlcHJlc2VudCBhIE11bHRpUG9seWdvbiBzaGFwZS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIGxhdGxuZ3MgPSBbXG4gICAqICAgWyAvLyBmaXJzdCBwb2x5Z29uXG4gICAqICAgICBbWzM3LCAtMTA5LjA1XSxbNDEsIC0xMDkuMDNdLFs0MSwgLTEwMi4wNV0sWzM3LCAtMTAyLjA0XV0sIC8vIG91dGVyIHJpbmdcbiAgICogICAgIFtbMzcuMjksIC0xMDguNThdLFs0MC43MSwgLTEwOC41OF0sWzQwLjcxLCAtMTAyLjUwXSxbMzcuMjksIC0xMDIuNTBdXSAvLyBob2xlXG4gICAqICAgXSxcbiAgICogICBbIC8vIHNlY29uZCBwb2x5Z29uXG4gICAqICAgICBbWzQxLCAtMTExLjAzXSxbNDUsIC0xMTEuMDRdLFs0NSwgLTEwNC4wNV0sWzQxLCAtMTA0LjA1XV1cbiAgICogICBdXG4gICAqIF07XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgUG9seWdvbiA9IFBvbHlsaW5lLmV4dGVuZCh7XG5cbiAgXHRvcHRpb25zOiB7XG4gIFx0XHRmaWxsOiB0cnVlXG4gIFx0fSxcblxuICBcdGlzRW1wdHk6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiAhdGhpcy5fbGF0bG5ncy5sZW5ndGggfHwgIXRoaXMuX2xhdGxuZ3NbMF0ubGVuZ3RoO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcigpOiBMYXRMbmdcbiAgXHQvLyBSZXR1cm5zIHRoZSBjZW50ZXIgKFtjZW50cm9pZF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DZW50cm9pZCkpIG9mIHRoZSBQb2x5Z29uLlxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gdGhyb3dzIGVycm9yIHdoZW4gbm90IHlldCBhZGRlZCB0byBtYXAgYXMgdGhpcyBjZW50ZXIgY2FsY3VsYXRpb24gcmVxdWlyZXMgcHJvamVjdGVkIGNvb3JkaW5hdGVzXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ011c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKCknKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiBwb2x5Z29uQ2VudGVyKHRoaXMuX2RlZmF1bHRTaGFwZSgpLCB0aGlzLl9tYXAub3B0aW9ucy5jcnMpO1xuICBcdH0sXG5cbiAgXHRfY29udmVydExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR2YXIgcmVzdWx0ID0gUG9seWxpbmUucHJvdG90eXBlLl9jb252ZXJ0TGF0TG5ncy5jYWxsKHRoaXMsIGxhdGxuZ3MpLFxuICBcdFx0ICAgIGxlbiA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgXHRcdC8vIHJlbW92ZSBsYXN0IHBvaW50IGlmIGl0IGVxdWFscyBmaXJzdCBvbmVcbiAgXHRcdGlmIChsZW4gPj0gMiAmJiByZXN1bHRbMF0gaW5zdGFuY2VvZiBMYXRMbmcgJiYgcmVzdWx0WzBdLmVxdWFscyhyZXN1bHRbbGVuIC0gMV0pKSB7XG4gIFx0XHRcdHJlc3VsdC5wb3AoKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiByZXN1bHQ7XG4gIFx0fSxcblxuICBcdF9zZXRMYXRMbmdzOiBmdW5jdGlvbiAobGF0bG5ncykge1xuICBcdFx0UG9seWxpbmUucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcywgbGF0bG5ncyk7XG4gIFx0XHRpZiAoaXNGbGF0KHRoaXMuX2xhdGxuZ3MpKSB7XG4gIFx0XHRcdHRoaXMuX2xhdGxuZ3MgPSBbdGhpcy5fbGF0bG5nc107XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9kZWZhdWx0U2hhcGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBpc0ZsYXQodGhpcy5fbGF0bG5nc1swXSkgPyB0aGlzLl9sYXRsbmdzWzBdIDogdGhpcy5fbGF0bG5nc1swXVswXTtcbiAgXHR9LFxuXG4gIFx0X2NsaXBQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIHBvbHlnb25zIG5lZWQgYSBkaWZmZXJlbnQgY2xpcHBpbmcgYWxnb3JpdGhtIHNvIHdlIHJlZGVmaW5lIHRoYXRcblxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX3JlbmRlcmVyLl9ib3VuZHMsXG4gIFx0XHQgICAgdyA9IHRoaXMub3B0aW9ucy53ZWlnaHQsXG4gIFx0XHQgICAgcCA9IG5ldyBQb2ludCh3LCB3KTtcblxuICBcdFx0Ly8gaW5jcmVhc2UgY2xpcCBwYWRkaW5nIGJ5IHN0cm9rZSB3aWR0aCB0byBhdm9pZCBzdHJva2Ugb24gY2xpcCBlZGdlc1xuICBcdFx0Ym91bmRzID0gbmV3IEJvdW5kcyhib3VuZHMubWluLnN1YnRyYWN0KHApLCBib3VuZHMubWF4LmFkZChwKSk7XG5cbiAgXHRcdHRoaXMuX3BhcnRzID0gW107XG4gIFx0XHRpZiAoIXRoaXMuX3B4Qm91bmRzIHx8ICF0aGlzLl9weEJvdW5kcy5pbnRlcnNlY3RzKGJvdW5kcykpIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2xpcCkge1xuICBcdFx0XHR0aGlzLl9wYXJ0cyA9IHRoaXMuX3JpbmdzO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9yaW5ncy5sZW5ndGgsIGNsaXBwZWQ7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRjbGlwcGVkID0gY2xpcFBvbHlnb24odGhpcy5fcmluZ3NbaV0sIGJvdW5kcywgdHJ1ZSk7XG4gIFx0XHRcdGlmIChjbGlwcGVkLmxlbmd0aCkge1xuICBcdFx0XHRcdHRoaXMuX3BhcnRzLnB1c2goY2xpcHBlZCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMsIHRydWUpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHR2YXIgaW5zaWRlID0gZmFsc2UsXG4gIFx0XHQgICAgcGFydCwgcDEsIHAyLCBpLCBqLCBrLCBsZW4sIGxlbjI7XG5cbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHApKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIFx0XHQvLyByYXkgY2FzdGluZyBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBpZiBwb2ludCBpcyBpbiBwb2x5Z29uXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwYXJ0ID0gdGhpcy5fcGFydHNbaV07XG5cbiAgXHRcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBhcnQubGVuZ3RoLCBrID0gbGVuMiAtIDE7IGogPCBsZW4yOyBrID0gaisrKSB7XG4gIFx0XHRcdFx0cDEgPSBwYXJ0W2pdO1xuICBcdFx0XHRcdHAyID0gcGFydFtrXTtcblxuICBcdFx0XHRcdGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gIFx0XHRcdFx0XHRpbnNpZGUgPSAhaW5zaWRlO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHQvLyBhbHNvIGNoZWNrIGlmIGl0J3Mgb24gcG9seWdvbiBzdHJva2VcbiAgXHRcdHJldHVybiBpbnNpZGUgfHwgUG9seWxpbmUucHJvdG90eXBlLl9jb250YWluc1BvaW50LmNhbGwodGhpcywgcCwgdHJ1ZSk7XG4gIFx0fVxuXG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5wb2x5Z29uKGxhdGxuZ3M6IExhdExuZ1tdLCBvcHRpb25zPzogUG9seWxpbmUgb3B0aW9ucylcbiAgZnVuY3Rpb24gcG9seWdvbihsYXRsbmdzLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBQb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgR2VvSlNPTlxyXG4gICAqIEBha2EgTC5HZW9KU09OXHJcbiAgICogQGluaGVyaXRzIEZlYXR1cmVHcm91cFxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhIEdlb0pTT04gb2JqZWN0IG9yIGFuIGFycmF5IG9mIEdlb0pTT04gb2JqZWN0cy4gQWxsb3dzIHlvdSB0byBwYXJzZVxyXG4gICAqIEdlb0pTT04gZGF0YSBhbmQgZGlzcGxheSBpdCBvbiB0aGUgbWFwLiBFeHRlbmRzIGBGZWF0dXJlR3JvdXBgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC5nZW9KU09OKGRhdGEsIHtcclxuICAgKiBcdHN0eWxlOiBmdW5jdGlvbiAoZmVhdHVyZSkge1xyXG4gICAqIFx0XHRyZXR1cm4ge2NvbG9yOiBmZWF0dXJlLnByb3BlcnRpZXMuY29sb3J9O1xyXG4gICAqIFx0fVxyXG4gICAqIH0pLmJpbmRQb3B1cChmdW5jdGlvbiAobGF5ZXIpIHtcclxuICAgKiBcdHJldHVybiBsYXllci5mZWF0dXJlLnByb3BlcnRpZXMuZGVzY3JpcHRpb247XHJcbiAgICogfSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIEdlb0pTT04gPSBGZWF0dXJlR3JvdXAuZXh0ZW5kKHtcclxuXHJcbiAgXHQvKiBAc2VjdGlvblxyXG4gIFx0ICogQGFrYSBHZW9KU09OIG9wdGlvbnNcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHBvaW50VG9MYXllcjogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgZGVmaW5pbmcgaG93IEdlb0pTT04gcG9pbnRzIHNwYXduIExlYWZsZXQgbGF5ZXJzLiBJdCBpcyBpbnRlcm5hbGx5XHJcbiAgXHQgKiBjYWxsZWQgd2hlbiBkYXRhIGlzIGFkZGVkLCBwYXNzaW5nIHRoZSBHZW9KU09OIHBvaW50IGZlYXR1cmUgYW5kIGl0cyBgTGF0TG5nYC5cclxuICBcdCAqIFRoZSBkZWZhdWx0IGlzIHRvIHNwYXduIGEgZGVmYXVsdCBgTWFya2VyYDpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbihnZW9Kc29uUG9pbnQsIGxhdGxuZykge1xyXG4gIFx0ICogXHRyZXR1cm4gTC5tYXJrZXIobGF0bG5nKTtcclxuICBcdCAqIH1cclxuICBcdCAqIGBgYFxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc3R5bGU6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIGRlZmluaW5nIHRoZSBgUGF0aCBvcHRpb25zYCBmb3Igc3R5bGluZyBHZW9KU09OIGxpbmVzIGFuZCBwb2x5Z29ucyxcclxuICBcdCAqIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gZGF0YSBpcyBhZGRlZC5cclxuICBcdCAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRvIG5vdCBvdmVycmlkZSBhbnkgZGVmYXVsdHM6XHJcbiAgXHQgKiBgYGBqc1xyXG4gIFx0ICogZnVuY3Rpb24gKGdlb0pzb25GZWF0dXJlKSB7XHJcbiAgXHQgKiBcdHJldHVybiB7fVxyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBvbkVhY2hGZWF0dXJlOiBGdW5jdGlvbiA9ICpcclxuICBcdCAqIEEgYEZ1bmN0aW9uYCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggY3JlYXRlZCBgRmVhdHVyZWAsIGFmdGVyIGl0IGhhc1xyXG4gIFx0ICogYmVlbiBjcmVhdGVkIGFuZCBzdHlsZWQuIFVzZWZ1bCBmb3IgYXR0YWNoaW5nIGV2ZW50cyBhbmQgcG9wdXBzIHRvIGZlYXR1cmVzLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gZG8gbm90aGluZyB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGxheWVyczpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF5ZXIpIHt9XHJcbiAgXHQgKiBgYGBcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGZpbHRlcjogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBhIGZlYXR1cmUgb3Igbm90LlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gaW5jbHVkZSBhbGwgZmVhdHVyZXM6XHJcbiAgXHQgKiBgYGBqc1xyXG4gIFx0ICogZnVuY3Rpb24gKGdlb0pzb25GZWF0dXJlKSB7XHJcbiAgXHQgKiBcdHJldHVybiB0cnVlO1xyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKiBOb3RlOiBkeW5hbWljYWxseSBjaGFuZ2luZyB0aGUgYGZpbHRlcmAgb3B0aW9uIHdpbGwgaGF2ZSBlZmZlY3Qgb25seSBvbiBuZXdseVxyXG4gIFx0ICogYWRkZWQgZGF0YS4gSXQgd2lsbCBfbm90XyByZS1ldmFsdWF0ZSBhbHJlYWR5IGluY2x1ZGVkIGZlYXR1cmVzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gY29vcmRzVG9MYXRMbmc6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjb252ZXJ0aW5nIEdlb0pTT04gY29vcmRpbmF0ZXMgdG8gYExhdExuZ2BzLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdGhlIGBjb29yZHNUb0xhdExuZ2Agc3RhdGljIG1ldGhvZC5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIG1hcmtlcnNJbmhlcml0T3B0aW9uczogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHQgKiBXaGV0aGVyIGRlZmF1bHQgTWFya2VycyBmb3IgXCJQb2ludFwiIHR5cGUgRmVhdHVyZXMgaW5oZXJpdCBmcm9tIGdyb3VwIG9wdGlvbnMuXHJcbiAgXHQgKi9cclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoZ2VvanNvbiwgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJzID0ge307XHJcblxyXG4gIFx0XHRpZiAoZ2VvanNvbikge1xyXG4gIFx0XHRcdHRoaXMuYWRkRGF0YShnZW9qc29uKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZERhdGEoIDxHZW9KU09OPiBkYXRhICk6IHRoaXNcclxuICBcdC8vIEFkZHMgYSBHZW9KU09OIG9iamVjdCB0byB0aGUgbGF5ZXIuXHJcbiAgXHRhZGREYXRhOiBmdW5jdGlvbiAoZ2VvanNvbikge1xyXG4gIFx0XHR2YXIgZmVhdHVyZXMgPSBpc0FycmF5KGdlb2pzb24pID8gZ2VvanNvbiA6IGdlb2pzb24uZmVhdHVyZXMsXHJcbiAgXHRcdCAgICBpLCBsZW4sIGZlYXR1cmU7XHJcblxyXG4gIFx0XHRpZiAoZmVhdHVyZXMpIHtcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBmZWF0dXJlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0Ly8gb25seSBhZGQgdGhpcyBpZiBnZW9tZXRyeSBvciBnZW9tZXRyaWVzIGFyZSBzZXQgYW5kIG5vdCBudWxsXHJcbiAgXHRcdFx0XHRmZWF0dXJlID0gZmVhdHVyZXNbaV07XHJcbiAgXHRcdFx0XHRpZiAoZmVhdHVyZS5nZW9tZXRyaWVzIHx8IGZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5mZWF0dXJlcyB8fCBmZWF0dXJlLmNvb3JkaW5hdGVzKSB7XHJcbiAgXHRcdFx0XHRcdHRoaXMuYWRkRGF0YShmZWF0dXJlKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuZmlsdGVyICYmICFvcHRpb25zLmZpbHRlcihnZW9qc29uKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGxheWVyID0gZ2VvbWV0cnlUb0xheWVyKGdlb2pzb24sIG9wdGlvbnMpO1xyXG4gIFx0XHRpZiAoIWxheWVyKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuICBcdFx0bGF5ZXIuZmVhdHVyZSA9IGFzRmVhdHVyZShnZW9qc29uKTtcclxuXHJcbiAgXHRcdGxheWVyLmRlZmF1bHRPcHRpb25zID0gbGF5ZXIub3B0aW9ucztcclxuICBcdFx0dGhpcy5yZXNldFN0eWxlKGxheWVyKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm9uRWFjaEZlYXR1cmUpIHtcclxuICBcdFx0XHRvcHRpb25zLm9uRWFjaEZlYXR1cmUoZ2VvanNvbiwgbGF5ZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihsYXllcik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVzZXRTdHlsZSggPFBhdGg+IGxheWVyPyApOiB0aGlzXHJcbiAgXHQvLyBSZXNldHMgdGhlIGdpdmVuIHZlY3RvciBsYXllcidzIHN0eWxlIHRvIHRoZSBvcmlnaW5hbCBHZW9KU09OIHN0eWxlLCB1c2VmdWwgZm9yIHJlc2V0dGluZyBzdHlsZSBhZnRlciBob3ZlciBldmVudHMuXHJcbiAgXHQvLyBJZiBgbGF5ZXJgIGlzIG9taXR0ZWQsIHRoZSBzdHlsZSBvZiBhbGwgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgcmVzZXQuXHJcbiAgXHRyZXNldFN0eWxlOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0aWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZXNldFN0eWxlLCB0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0XHQvLyByZXNldCBhbnkgY3VzdG9tIHN0eWxlc1xyXG4gIFx0XHRsYXllci5vcHRpb25zID0gZXh0ZW5kKHt9LCBsYXllci5kZWZhdWx0T3B0aW9ucyk7XHJcbiAgXHRcdHRoaXMuX3NldExheWVyU3R5bGUobGF5ZXIsIHRoaXMub3B0aW9ucy5zdHlsZSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKCA8RnVuY3Rpb24+IHN0eWxlICk6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgc3R5bGVzIG9mIEdlb0pTT04gdmVjdG9yIGxheWVycyB3aXRoIHRoZSBnaXZlbiBzdHlsZSBmdW5jdGlvbi5cclxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdHRoaXMuX3NldExheWVyU3R5bGUobGF5ZXIsIHN0eWxlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRMYXllclN0eWxlOiBmdW5jdGlvbiAobGF5ZXIsIHN0eWxlKSB7XHJcbiAgXHRcdGlmIChsYXllci5zZXRTdHlsZSkge1xyXG4gIFx0XHRcdGlmICh0eXBlb2Ygc3R5bGUgPT09ICdmdW5jdGlvbicpIHtcclxuICBcdFx0XHRcdHN0eWxlID0gc3R5bGUobGF5ZXIuZmVhdHVyZSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGxheWVyLnNldFN0eWxlKHN0eWxlKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAc2VjdGlvblxyXG4gIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5HZW9KU09OOlxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2VvbWV0cnlUb0xheWVyKGZlYXR1cmVEYXRhOiBPYmplY3QsIG9wdGlvbnM/OiBHZW9KU09OIG9wdGlvbnMpOiBMYXllclxyXG4gIC8vIENyZWF0ZXMgYSBgTGF5ZXJgIGZyb20gYSBnaXZlbiBHZW9KU09OIGZlYXR1cmUuIENhbiB1c2UgYSBjdXN0b21cclxuICAvLyBbYHBvaW50VG9MYXllcmBdKCNnZW9qc29uLXBvaW50dG9sYXllcikgYW5kL29yIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZylcclxuICAvLyBmdW5jdGlvbnMgaWYgcHJvdmlkZWQgYXMgb3B0aW9ucy5cclxuICBmdW5jdGlvbiBnZW9tZXRyeVRvTGF5ZXIoZ2VvanNvbiwgb3B0aW9ucykge1xyXG5cclxuICBcdHZhciBnZW9tZXRyeSA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24sXHJcbiAgXHQgICAgY29vcmRzID0gZ2VvbWV0cnkgPyBnZW9tZXRyeS5jb29yZGluYXRlcyA6IG51bGwsXHJcbiAgXHQgICAgbGF5ZXJzID0gW10sXHJcbiAgXHQgICAgcG9pbnRUb0xheWVyID0gb3B0aW9ucyAmJiBvcHRpb25zLnBvaW50VG9MYXllcixcclxuICBcdCAgICBfY29vcmRzVG9MYXRMbmcgPSBvcHRpb25zICYmIG9wdGlvbnMuY29vcmRzVG9MYXRMbmcgfHwgY29vcmRzVG9MYXRMbmcsXHJcbiAgXHQgICAgbGF0bG5nLCBsYXRsbmdzLCBpLCBsZW47XHJcblxyXG4gIFx0aWYgKCFjb29yZHMgJiYgIWdlb21ldHJ5KSB7XHJcbiAgXHRcdHJldHVybiBudWxsO1xyXG4gIFx0fVxyXG5cclxuICBcdHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xyXG4gIFx0Y2FzZSAnUG9pbnQnOlxyXG4gIFx0XHRsYXRsbmcgPSBfY29vcmRzVG9MYXRMbmcoY29vcmRzKTtcclxuICBcdFx0cmV0dXJuIF9wb2ludFRvTGF5ZXIocG9pbnRUb0xheWVyLCBnZW9qc29uLCBsYXRsbmcsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ011bHRpUG9pbnQnOlxyXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb29yZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRsYXRsbmcgPSBfY29vcmRzVG9MYXRMbmcoY29vcmRzW2ldKTtcclxuICBcdFx0XHRsYXllcnMucHVzaChfcG9pbnRUb0xheWVyKHBvaW50VG9MYXllciwgZ2VvanNvbiwgbGF0bG5nLCBvcHRpb25zKSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG5ldyBGZWF0dXJlR3JvdXAobGF5ZXJzKTtcclxuXHJcbiAgXHRjYXNlICdMaW5lU3RyaW5nJzpcclxuICBcdGNhc2UgJ011bHRpTGluZVN0cmluZyc6XHJcbiAgXHRcdGxhdGxuZ3MgPSBjb29yZHNUb0xhdExuZ3MoY29vcmRzLCBnZW9tZXRyeS50eXBlID09PSAnTGluZVN0cmluZycgPyAwIDogMSwgX2Nvb3Jkc1RvTGF0TG5nKTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2x5bGluZShsYXRsbmdzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRjYXNlICdQb2x5Z29uJzpcclxuICBcdGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgXHRcdGxhdGxuZ3MgPSBjb29yZHNUb0xhdExuZ3MoY29vcmRzLCBnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicgPyAxIDogMiwgX2Nvb3Jkc1RvTGF0TG5nKTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XHJcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHR2YXIgZ2VvTGF5ZXIgPSBnZW9tZXRyeVRvTGF5ZXIoe1xyXG4gIFx0XHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5Lmdlb21ldHJpZXNbaV0sXHJcbiAgXHRcdFx0XHR0eXBlOiAnRmVhdHVyZScsXHJcbiAgXHRcdFx0XHRwcm9wZXJ0aWVzOiBnZW9qc29uLnByb3BlcnRpZXNcclxuICBcdFx0XHR9LCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdFx0aWYgKGdlb0xheWVyKSB7XHJcbiAgXHRcdFx0XHRsYXllcnMucHVzaChnZW9MYXllcik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBuZXcgRmVhdHVyZUdyb3VwKGxheWVycyk7XHJcblxyXG4gIFx0Y2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxyXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBnZW9tZXRyeS5mZWF0dXJlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdHZhciBmZWF0dXJlTGF5ZXIgPSBnZW9tZXRyeVRvTGF5ZXIoZ2VvbWV0cnkuZmVhdHVyZXNbaV0sIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0XHRpZiAoZmVhdHVyZUxheWVyKSB7XHJcbiAgXHRcdFx0XHRsYXllcnMucHVzaChmZWF0dXJlTGF5ZXIpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gbmV3IEZlYXR1cmVHcm91cChsYXllcnMpO1xyXG5cclxuICBcdGRlZmF1bHQ6XHJcbiAgXHRcdHRocm93IG5ldyBFcnJvcignSW52YWxpZCBHZW9KU09OIG9iamVjdC4nKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9wb2ludFRvTGF5ZXIocG9pbnRUb0xheWVyRm4sIGdlb2pzb24sIGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIHBvaW50VG9MYXllckZuID9cclxuICBcdFx0cG9pbnRUb0xheWVyRm4oZ2VvanNvbiwgbGF0bG5nKSA6XHJcbiAgXHRcdG5ldyBNYXJrZXIobGF0bG5nLCBvcHRpb25zICYmIG9wdGlvbnMubWFya2Vyc0luaGVyaXRPcHRpb25zICYmIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNvb3Jkc1RvTGF0TG5nKGNvb3JkczogQXJyYXkpOiBMYXRMbmdcclxuICAvLyBDcmVhdGVzIGEgYExhdExuZ2Agb2JqZWN0IGZyb20gYW4gYXJyYXkgb2YgMiBudW1iZXJzIChsb25naXR1ZGUsIGxhdGl0dWRlKVxyXG4gIC8vIG9yIDMgbnVtYmVycyAobG9uZ2l0dWRlLCBsYXRpdHVkZSwgYWx0aXR1ZGUpIHVzZWQgaW4gR2VvSlNPTiBmb3IgcG9pbnRzLlxyXG4gIGZ1bmN0aW9uIGNvb3Jkc1RvTGF0TG5nKGNvb3Jkcykge1xyXG4gIFx0cmV0dXJuIG5ldyBMYXRMbmcoY29vcmRzWzFdLCBjb29yZHNbMF0sIGNvb3Jkc1syXSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY29vcmRzVG9MYXRMbmdzKGNvb3JkczogQXJyYXksIGxldmVsc0RlZXA/OiBOdW1iZXIsIGNvb3Jkc1RvTGF0TG5nPzogRnVuY3Rpb24pOiBBcnJheVxyXG4gIC8vIENyZWF0ZXMgYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5IG9mIGBMYXRMbmdgcyBmcm9tIGEgR2VvSlNPTiBjb29yZGluYXRlcyBhcnJheS5cclxuICAvLyBgbGV2ZWxzRGVlcGAgc3BlY2lmaWVzIHRoZSBuZXN0aW5nIGxldmVsICgwIGlzIGZvciBhbiBhcnJheSBvZiBwb2ludHMsIDEgZm9yIGFuIGFycmF5IG9mIGFycmF5cyBvZiBwb2ludHMsIGV0Yy4sIDAgYnkgZGVmYXVsdCkuXHJcbiAgLy8gQ2FuIHVzZSBhIGN1c3RvbSBbYGNvb3Jkc1RvTGF0TG5nYF0oI2dlb2pzb24tY29vcmRzdG9sYXRsbmcpIGZ1bmN0aW9uLlxyXG4gIGZ1bmN0aW9uIGNvb3Jkc1RvTGF0TG5ncyhjb29yZHMsIGxldmVsc0RlZXAsIF9jb29yZHNUb0xhdExuZykge1xyXG4gIFx0dmFyIGxhdGxuZ3MgPSBbXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gY29vcmRzLmxlbmd0aCwgbGF0bG5nOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0bGF0bG5nID0gbGV2ZWxzRGVlcCA/XHJcbiAgXHRcdFx0Y29vcmRzVG9MYXRMbmdzKGNvb3Jkc1tpXSwgbGV2ZWxzRGVlcCAtIDEsIF9jb29yZHNUb0xhdExuZykgOlxyXG4gIFx0XHRcdChfY29vcmRzVG9MYXRMbmcgfHwgY29vcmRzVG9MYXRMbmcpKGNvb3Jkc1tpXSk7XHJcblxyXG4gIFx0XHRsYXRsbmdzLnB1c2gobGF0bG5nKTtcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gbGF0bG5ncztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBsYXRMbmdUb0Nvb3JkcyhsYXRsbmc6IExhdExuZywgcHJlY2lzaW9uPzogTnVtYmVyfGZhbHNlKTogQXJyYXlcclxuICAvLyBSZXZlcnNlIG9mIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZylcclxuICAvLyBDb29yZGluYXRlcyB2YWx1ZXMgYXJlIHJvdW5kZWQgd2l0aCBbYGZvcm1hdE51bWBdKCN1dGlsLWZvcm1hdG51bSkgZnVuY3Rpb24uXHJcbiAgZnVuY3Rpb24gbGF0TG5nVG9Db29yZHMobGF0bG5nLCBwcmVjaXNpb24pIHtcclxuICBcdGxhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XHJcbiAgXHRyZXR1cm4gbGF0bG5nLmFsdCAhPT0gdW5kZWZpbmVkID9cclxuICBcdFx0W2Zvcm1hdE51bShsYXRsbmcubG5nLCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmxhdCwgcHJlY2lzaW9uKSwgZm9ybWF0TnVtKGxhdGxuZy5hbHQsIHByZWNpc2lvbildIDpcclxuICBcdFx0W2Zvcm1hdE51bShsYXRsbmcubG5nLCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmxhdCwgcHJlY2lzaW9uKV07XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gbGF0TG5nc1RvQ29vcmRzKGxhdGxuZ3M6IEFycmF5LCBsZXZlbHNEZWVwPzogTnVtYmVyLCBjbG9zZWQ/OiBCb29sZWFuLCBwcmVjaXNpb24/OiBOdW1iZXJ8ZmFsc2UpOiBBcnJheVxyXG4gIC8vIFJldmVyc2Ugb2YgW2Bjb29yZHNUb0xhdExuZ3NgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZ3MpXHJcbiAgLy8gYGNsb3NlZGAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmaXJzdCBwb2ludCBzaG91bGQgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkgdG8gY2xvc2UgdGhlIGZlYXR1cmUsIG9ubHkgdXNlZCB3aGVuIGBsZXZlbHNEZWVwYCBpcyAwLiBGYWxzZSBieSBkZWZhdWx0LlxyXG4gIC8vIENvb3JkaW5hdGVzIHZhbHVlcyBhcmUgcm91bmRlZCB3aXRoIFtgZm9ybWF0TnVtYF0oI3V0aWwtZm9ybWF0bnVtKSBmdW5jdGlvbi5cclxuICBmdW5jdGlvbiBsYXRMbmdzVG9Db29yZHMobGF0bG5ncywgbGV2ZWxzRGVlcCwgY2xvc2VkLCBwcmVjaXNpb24pIHtcclxuICBcdHZhciBjb29yZHMgPSBbXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF0bG5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHQvLyBDaGVjayBmb3IgZmxhdCBhcnJheXMgcmVxdWlyZWQgdG8gZW5zdXJlIHVuYmFsYW5jZWQgYXJyYXlzIGFyZSBjb3JyZWN0bHkgY29udmVydGVkIGluIHJlY3Vyc2lvblxyXG4gIFx0XHRjb29yZHMucHVzaChsZXZlbHNEZWVwID9cclxuICBcdFx0XHRsYXRMbmdzVG9Db29yZHMobGF0bG5nc1tpXSwgaXNGbGF0KGxhdGxuZ3NbaV0pID8gMCA6IGxldmVsc0RlZXAgLSAxLCBjbG9zZWQsIHByZWNpc2lvbikgOlxyXG4gIFx0XHRcdGxhdExuZ1RvQ29vcmRzKGxhdGxuZ3NbaV0sIHByZWNpc2lvbikpO1xyXG4gIFx0fVxyXG5cclxuICBcdGlmICghbGV2ZWxzRGVlcCAmJiBjbG9zZWQpIHtcclxuICBcdFx0Y29vcmRzLnB1c2goY29vcmRzWzBdLnNsaWNlKCkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBjb29yZHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRGZWF0dXJlKGxheWVyLCBuZXdHZW9tZXRyeSkge1xyXG4gIFx0cmV0dXJuIGxheWVyLmZlYXR1cmUgP1xyXG4gIFx0XHRleHRlbmQoe30sIGxheWVyLmZlYXR1cmUsIHtnZW9tZXRyeTogbmV3R2VvbWV0cnl9KSA6XHJcbiAgXHRcdGFzRmVhdHVyZShuZXdHZW9tZXRyeSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gYXNGZWF0dXJlKGdlb2pzb246IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIE5vcm1hbGl6ZSBHZW9KU09OIGdlb21ldHJpZXMvZmVhdHVyZXMgaW50byBHZW9KU09OIGZlYXR1cmVzLlxyXG4gIGZ1bmN0aW9uIGFzRmVhdHVyZShnZW9qc29uKSB7XHJcbiAgXHRpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScgfHwgZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XHJcbiAgXHRcdHJldHVybiBnZW9qc29uO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB7XHJcbiAgXHRcdHR5cGU6ICdGZWF0dXJlJyxcclxuICBcdFx0cHJvcGVydGllczoge30sXHJcbiAgXHRcdGdlb21ldHJ5OiBnZW9qc29uXHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgdmFyIFBvaW50VG9HZW9KU09OID0ge1xyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAnUG9pbnQnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBsYXRMbmdUb0Nvb3Jkcyh0aGlzLmdldExhdExuZygpLCBwcmVjaXNpb24pXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFya2VyXHJcbiAgLy8gQHNlY3Rpb24gT3RoZXIgbWV0aG9kc1xyXG4gIC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcnxmYWxzZSk6IE9iamVjdFxyXG4gIC8vIENvb3JkaW5hdGVzIHZhbHVlcyBhcmUgcm91bmRlZCB3aXRoIFtgZm9ybWF0TnVtYF0oI3V0aWwtZm9ybWF0bnVtKSBmdW5jdGlvbiB3aXRoIGdpdmVuIGBwcmVjaXNpb25gLlxyXG4gIC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWFya2VyIChhcyBhIEdlb0pTT04gYFBvaW50YCBGZWF0dXJlKS5cclxuICBNYXJrZXIuaW5jbHVkZShQb2ludFRvR2VvSlNPTik7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgQ2lyY2xlTWFya2VyXHJcbiAgLy8gQG1ldGhvZCB0b0dlb0pTT04ocHJlY2lzaW9uPzogTnVtYmVyfGZhbHNlKTogT2JqZWN0XHJcbiAgLy8gQ29vcmRpbmF0ZXMgdmFsdWVzIGFyZSByb3VuZGVkIHdpdGggW2Bmb3JtYXROdW1gXSgjdXRpbC1mb3JtYXRudW0pIGZ1bmN0aW9uIHdpdGggZ2l2ZW4gYHByZWNpc2lvbmAuXHJcbiAgLy8gUmV0dXJucyBhIFtgR2VvSlNPTmBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaXJjbGUgbWFya2VyIChhcyBhIEdlb0pTT04gYFBvaW50YCBGZWF0dXJlKS5cclxuICBDaXJjbGUuaW5jbHVkZShQb2ludFRvR2VvSlNPTik7XHJcbiAgQ2lyY2xlTWFya2VyLmluY2x1ZGUoUG9pbnRUb0dlb0pTT04pO1xyXG5cclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBQb2x5bGluZVxyXG4gIC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcnxmYWxzZSk6IE9iamVjdFxyXG4gIC8vIENvb3JkaW5hdGVzIHZhbHVlcyBhcmUgcm91bmRlZCB3aXRoIFtgZm9ybWF0TnVtYF0oI3V0aWwtZm9ybWF0bnVtKSBmdW5jdGlvbiB3aXRoIGdpdmVuIGBwcmVjaXNpb25gLlxyXG4gIC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9seWxpbmUgKGFzIGEgR2VvSlNPTiBgTGluZVN0cmluZ2Agb3IgYE11bHRpTGluZVN0cmluZ2AgRmVhdHVyZSkuXHJcbiAgUG9seWxpbmUuaW5jbHVkZSh7XHJcbiAgXHR0b0dlb0pTT046IGZ1bmN0aW9uIChwcmVjaXNpb24pIHtcclxuICBcdFx0dmFyIG11bHRpID0gIWlzRmxhdCh0aGlzLl9sYXRsbmdzKTtcclxuXHJcbiAgXHRcdHZhciBjb29yZHMgPSBsYXRMbmdzVG9Db29yZHModGhpcy5fbGF0bG5ncywgbXVsdGkgPyAxIDogMCwgZmFsc2UsIHByZWNpc2lvbik7XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogKG11bHRpID8gJ011bHRpJyA6ICcnKSArICdMaW5lU3RyaW5nJyxcclxuICBcdFx0XHRjb29yZGluYXRlczogY29vcmRzXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIFBvbHlnb25cclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXJ8ZmFsc2UpOiBPYmplY3RcclxuICAvLyBDb29yZGluYXRlcyB2YWx1ZXMgYXJlIHJvdW5kZWQgd2l0aCBbYGZvcm1hdE51bWBdKCN1dGlsLWZvcm1hdG51bSkgZnVuY3Rpb24gd2l0aCBnaXZlbiBgcHJlY2lzaW9uYC5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2VvSlNPTikgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvbHlnb24gKGFzIGEgR2VvSlNPTiBgUG9seWdvbmAgb3IgYE11bHRpUG9seWdvbmAgRmVhdHVyZSkuXHJcbiAgUG9seWdvbi5pbmNsdWRlKHtcclxuICBcdHRvR2VvSlNPTjogZnVuY3Rpb24gKHByZWNpc2lvbikge1xyXG4gIFx0XHR2YXIgaG9sZXMgPSAhaXNGbGF0KHRoaXMuX2xhdGxuZ3MpLFxyXG4gIFx0XHQgICAgbXVsdGkgPSBob2xlcyAmJiAhaXNGbGF0KHRoaXMuX2xhdGxuZ3NbMF0pO1xyXG5cclxuICBcdFx0dmFyIGNvb3JkcyA9IGxhdExuZ3NUb0Nvb3Jkcyh0aGlzLl9sYXRsbmdzLCBtdWx0aSA/IDIgOiBob2xlcyA/IDEgOiAwLCB0cnVlLCBwcmVjaXNpb24pO1xyXG5cclxuICBcdFx0aWYgKCFob2xlcykge1xyXG4gIFx0XHRcdGNvb3JkcyA9IFtjb29yZHNdO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogKG11bHRpID8gJ011bHRpJyA6ICcnKSArICdQb2x5Z29uJyxcclxuICBcdFx0XHRjb29yZGluYXRlczogY29vcmRzXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBMYXllckdyb3VwXHJcbiAgTGF5ZXJHcm91cC5pbmNsdWRlKHtcclxuICBcdHRvTXVsdGlQb2ludDogZnVuY3Rpb24gKHByZWNpc2lvbikge1xyXG4gIFx0XHR2YXIgY29vcmRzID0gW107XHJcblxyXG4gIFx0XHR0aGlzLmVhY2hMYXllcihmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0XHRjb29yZHMucHVzaChsYXllci50b0dlb0pTT04ocHJlY2lzaW9uKS5nZW9tZXRyeS5jb29yZGluYXRlcyk7XHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0cmV0dXJuIGdldEZlYXR1cmUodGhpcywge1xyXG4gIFx0XHRcdHR5cGU6ICdNdWx0aVBvaW50JyxcclxuICBcdFx0XHRjb29yZGluYXRlczogY29vcmRzXHJcbiAgXHRcdH0pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXJ8ZmFsc2UpOiBPYmplY3RcclxuICBcdC8vIENvb3JkaW5hdGVzIHZhbHVlcyBhcmUgcm91bmRlZCB3aXRoIFtgZm9ybWF0TnVtYF0oI3V0aWwtZm9ybWF0bnVtKSBmdW5jdGlvbiB3aXRoIGdpdmVuIGBwcmVjaXNpb25gLlxyXG4gIFx0Ly8gUmV0dXJucyBhIFtgR2VvSlNPTmBdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsYXllciBncm91cCAoYXMgYSBHZW9KU09OIGBGZWF0dXJlQ29sbGVjdGlvbmAsIGBHZW9tZXRyeUNvbGxlY3Rpb25gLCBvciBgTXVsdGlQb2ludGApLlxyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcblxyXG4gIFx0XHR2YXIgdHlwZSA9IHRoaXMuZmVhdHVyZSAmJiB0aGlzLmZlYXR1cmUuZ2VvbWV0cnkgJiYgdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7XHJcblxyXG4gIFx0XHRpZiAodHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMudG9NdWx0aVBvaW50KHByZWNpc2lvbik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IHR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nLFxyXG4gIFx0XHQgICAganNvbnMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdGlmIChsYXllci50b0dlb0pTT04pIHtcclxuICBcdFx0XHRcdHZhciBqc29uID0gbGF5ZXIudG9HZW9KU09OKHByZWNpc2lvbik7XHJcbiAgXHRcdFx0XHRpZiAoaXNHZW9tZXRyeUNvbGxlY3Rpb24pIHtcclxuICBcdFx0XHRcdFx0anNvbnMucHVzaChqc29uLmdlb21ldHJ5KTtcclxuICBcdFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRcdHZhciBmZWF0dXJlID0gYXNGZWF0dXJlKGpzb24pO1xyXG4gIFx0XHRcdFx0XHQvLyBTcXVhc2ggbmVzdGVkIGZlYXR1cmUgY29sbGVjdGlvbnNcclxuICBcdFx0XHRcdFx0aWYgKGZlYXR1cmUudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xyXG4gIFx0XHRcdFx0XHRcdGpzb25zLnB1c2guYXBwbHkoanNvbnMsIGZlYXR1cmUuZmVhdHVyZXMpO1xyXG4gIFx0XHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHRcdGpzb25zLnB1c2goZmVhdHVyZSk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKGlzR2VvbWV0cnlDb2xsZWN0aW9uKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGdldEZlYXR1cmUodGhpcywge1xyXG4gIFx0XHRcdFx0Z2VvbWV0cmllczoganNvbnMsXHJcbiAgXHRcdFx0XHR0eXBlOiAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgXHRcdFx0ZmVhdHVyZXM6IGpzb25zXHJcbiAgXHRcdH07XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgR2VvSlNPTlxyXG4gIC8vIEBmYWN0b3J5IEwuZ2VvSlNPTihnZW9qc29uPzogT2JqZWN0LCBvcHRpb25zPzogR2VvSlNPTiBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYSBHZW9KU09OIGxheWVyLiBPcHRpb25hbGx5IGFjY2VwdHMgYW4gb2JqZWN0IGluXHJcbiAgLy8gW0dlb0pTT04gZm9ybWF0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NikgdG8gZGlzcGxheSBvbiB0aGUgbWFwXHJcbiAgLy8gKHlvdSBjYW4gYWx0ZXJuYXRpdmVseSBhZGQgaXQgbGF0ZXIgd2l0aCBgYWRkRGF0YWAgbWV0aG9kKSBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdC5cclxuICBmdW5jdGlvbiBnZW9KU09OKGdlb2pzb24sIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgR2VvSlNPTihnZW9qc29uLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXHJcbiAgdmFyIGdlb0pzb24gPSBnZW9KU09OO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEltYWdlT3ZlcmxheVxyXG4gICAqIEBha2EgTC5JbWFnZU92ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW50ZXJhY3RpdmUgbGF5ZXJcclxuICAgKlxyXG4gICAqIFVzZWQgdG8gbG9hZCBhbmQgZGlzcGxheSBhIHNpbmdsZSBpbWFnZSBvdmVyIHNwZWNpZmljIGJvdW5kcyBvZiB0aGUgbWFwLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgaW1hZ2VVcmwgPSAnaHR0cHM6Ly9tYXBzLmxpYi51dGV4YXMuZWR1L21hcHMvaGlzdG9yaWNhbC9uZXdhcmtfbmpfMTkyMi5qcGcnLFxyXG4gICAqIFx0aW1hZ2VCb3VuZHMgPSBbWzQwLjcxMjIxNiwgLTc0LjIyNjU1XSwgWzQwLjc3Mzk0MSwgLTc0LjEyNTQ0XV07XHJcbiAgICogTC5pbWFnZU92ZXJsYXkoaW1hZ2VVcmwsIGltYWdlQm91bmRzKS5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgSW1hZ2VPdmVybGF5ID0gTGF5ZXIuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBJbWFnZU92ZXJsYXkgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxyXG4gIFx0XHQvLyBUaGUgb3BhY2l0eSBvZiB0aGUgaW1hZ2Ugb3ZlcmxheS5cclxuICBcdFx0b3BhY2l0eTogMSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYWx0OiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBUZXh0IGZvciB0aGUgYGFsdGAgYXR0cmlidXRlIG9mIHRoZSBpbWFnZSAodXNlZnVsIGZvciBhY2Nlc3NpYmlsaXR5KS5cclxuICBcdFx0YWx0OiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gaW50ZXJhY3RpdmU6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBpbWFnZSBvdmVybGF5IHdpbGwgZW1pdCBbbW91c2UgZXZlbnRzXSgjaW50ZXJhY3RpdmUtbGF5ZXIpIHdoZW4gY2xpY2tlZCBvciBob3ZlcmVkLlxyXG4gIFx0XHRpbnRlcmFjdGl2ZTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNyb3NzT3JpZ2luOiBCb29sZWFufFN0cmluZyA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBpbWFnZS5cclxuICBcdFx0Ly8gSWYgYSBTdHJpbmcgaXMgcHJvdmlkZWQsIHRoZSBpbWFnZSB3aWxsIGhhdmUgaXRzIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSBzZXQgdG8gdGhlIFN0cmluZyBwcm92aWRlZC4gVGhpcyBpcyBuZWVkZWQgaWYgeW91IHdhbnQgdG8gYWNjZXNzIGltYWdlIHBpeGVsIGRhdGEuXHJcbiAgXHRcdC8vIFJlZmVyIHRvIFtDT1JTIFNldHRpbmdzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0NPUlNfc2V0dGluZ3NfYXR0cmlidXRlcykgZm9yIHZhbGlkIFN0cmluZyB2YWx1ZXMuXHJcbiAgXHRcdGNyb3NzT3JpZ2luOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gZXJyb3JPdmVybGF5VXJsOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBVUkwgdG8gdGhlIG92ZXJsYXkgaW1hZ2UgdG8gc2hvdyBpbiBwbGFjZSBvZiB0aGUgb3ZlcmxheSB0aGF0IGZhaWxlZCB0byBsb2FkLlxyXG4gIFx0XHRlcnJvck92ZXJsYXlVcmw6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6SW5kZXg6IE51bWJlciA9IDFcclxuICBcdFx0Ly8gVGhlIGV4cGxpY2l0IFt6SW5kZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0NTUy9DU1NfUG9zaXRpb25pbmcvVW5kZXJzdGFuZGluZ196X2luZGV4KSBvZiB0aGUgb3ZlcmxheSBsYXllci5cclxuICBcdFx0ekluZGV4OiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIEEgY3VzdG9tIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSBpbWFnZS4gRW1wdHkgYnkgZGVmYXVsdC5cclxuICBcdFx0Y2xhc3NOYW1lOiAnJ1xyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAodXJsLCBib3VuZHMsIG9wdGlvbnMpIHsgLy8gKFN0cmluZywgTGF0TG5nQm91bmRzLCBPYmplY3QpXHJcbiAgXHRcdHRoaXMuX3VybCA9IHVybDtcclxuICBcdFx0dGhpcy5fYm91bmRzID0gdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5faW1hZ2UpIHtcclxuICBcdFx0XHR0aGlzLl9pbml0SW1hZ2UoKTtcclxuXHJcbiAgXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5vcGFjaXR5IDwgMSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX2ltYWdlLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpO1xyXG4gIFx0XHRcdHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdHRoaXMuX3Jlc2V0KCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJlbW92ZSh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcclxuICBcdFx0XHR0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE9wYWNpdHkob3BhY2l0eTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgb3BhY2l0eSBvZiB0aGUgb3ZlcmxheS5cclxuICBcdHNldE9wYWNpdHk6IGZ1bmN0aW9uIChvcGFjaXR5KSB7XHJcbiAgXHRcdHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3BhY2l0eTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbWFnZSkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0c2V0U3R5bGU6IGZ1bmN0aW9uIChzdHlsZU9wdHMpIHtcclxuICBcdFx0aWYgKHN0eWxlT3B0cy5vcGFjaXR5KSB7XHJcbiAgXHRcdFx0dGhpcy5zZXRPcGFjaXR5KHN0eWxlT3B0cy5vcGFjaXR5KTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQoKTogdGhpc1xyXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciB0byB0aGUgdG9wIG9mIGFsbCBvdmVybGF5cy5cclxuICBcdGJyaW5nVG9Gcm9udDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dG9Gcm9udCh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2soKTogdGhpc1xyXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciB0byB0aGUgYm90dG9tIG9mIGFsbCBvdmVybGF5cy5cclxuICBcdGJyaW5nVG9CYWNrOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0b0JhY2sodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFVybCh1cmw6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgdGhlIFVSTCBvZiB0aGUgaW1hZ2UuXHJcbiAgXHRzZXRVcmw6IGZ1bmN0aW9uICh1cmwpIHtcclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2ltYWdlKSB7XHJcbiAgXHRcdFx0dGhpcy5faW1hZ2Uuc3JjID0gdXJsO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldEJvdW5kcyhib3VuZHM6IExhdExuZ0JvdW5kcyk6IHRoaXNcclxuICBcdC8vIFVwZGF0ZSB0aGUgYm91bmRzIHRoYXQgdGhpcyBJbWFnZU92ZXJsYXkgY292ZXJzXHJcbiAgXHRzZXRCb3VuZHM6IGZ1bmN0aW9uIChib3VuZHMpIHtcclxuICBcdFx0dGhpcy5fYm91bmRzID0gdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLl9yZXNldCgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGV2ZW50cyA9IHtcclxuICBcdFx0XHR6b29tOiB0aGlzLl9yZXNldCxcclxuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0XHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0ZXZlbnRzLnpvb21hbmltID0gdGhpcy5fYW5pbWF0ZVpvb207XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBldmVudHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4KHZhbHVlOiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbekluZGV4XSgjaW1hZ2VvdmVybGF5LXppbmRleCkgb2YgdGhlIGltYWdlIG92ZXJsYXkuXHJcbiAgXHRzZXRaSW5kZXg6IGZ1bmN0aW9uICh2YWx1ZSkge1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMuekluZGV4ID0gdmFsdWU7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZVpJbmRleCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHMoKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBHZXQgdGhlIGJvdW5kcyB0aGF0IHRoaXMgSW1hZ2VPdmVybGF5IGNvdmVyc1xyXG4gIFx0Z2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ib3VuZHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0RWxlbWVudCgpOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgW2BIVE1MSW1hZ2VFbGVtZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxJbWFnZUVsZW1lbnQpXHJcbiAgXHQvLyB1c2VkIGJ5IHRoaXMgb3ZlcmxheS5cclxuICBcdGdldEVsZW1lbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2ltYWdlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdEltYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciB3YXNFbGVtZW50U3VwcGxpZWQgPSB0aGlzLl91cmwudGFnTmFtZSA9PT0gJ0lNRyc7XHJcbiAgXHRcdHZhciBpbWcgPSB0aGlzLl9pbWFnZSA9IHdhc0VsZW1lbnRTdXBwbGllZCA/IHRoaXMuX3VybCA6IGNyZWF0ZSQxKCdpbWcnKTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKGltZywgJ2xlYWZsZXQtaW1hZ2UtbGF5ZXInKTtcclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyhpbWcsICdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTsgfVxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyhpbWcsIHRoaXMub3B0aW9ucy5jbGFzc05hbWUpOyB9XHJcblxyXG4gIFx0XHRpbWcub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XHJcbiAgXHRcdGltZy5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgSW1hZ2VPdmVybGF5IGxheWVyIGhhcyBsb2FkZWQgaXRzIGltYWdlXHJcbiAgXHRcdGltZy5vbmxvYWQgPSBiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ2xvYWQnKTtcclxuICBcdFx0aW1nLm9uZXJyb3IgPSBiaW5kKHRoaXMuX292ZXJsYXlPbkVycm9yLCB0aGlzLCAnZXJyb3InKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gfHwgdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSAnJykge1xyXG4gIFx0XHRcdGltZy5jcm9zc09yaWdpbiA9IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiA9PT0gdHJ1ZSA/ICcnIDogdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLnpJbmRleCkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVpJbmRleCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAod2FzRWxlbWVudFN1cHBsaWVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXJsID0gaW1nLnNyYztcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGltZy5zcmMgPSB0aGlzLl91cmw7XHJcbiAgXHRcdGltZy5hbHQgPSB0aGlzLm9wdGlvbnMuYWx0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuX21hcC5nZXRab29tU2NhbGUoZS56b29tKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IHRoaXMuX21hcC5fbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kcyh0aGlzLl9ib3VuZHMsIGUuem9vbSwgZS5jZW50ZXIpLm1pbjtcclxuXHJcbiAgXHRcdHNldFRyYW5zZm9ybSh0aGlzLl9pbWFnZSwgb2Zmc2V0LCBzY2FsZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaW1hZ2UgPSB0aGlzLl9pbWFnZSxcclxuICBcdFx0ICAgIGJvdW5kcyA9IG5ldyBCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0Tm9ydGhXZXN0KCkpLFxyXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKSksXHJcbiAgXHRcdCAgICBzaXplID0gYm91bmRzLmdldFNpemUoKTtcclxuXHJcbiAgXHRcdHNldFBvc2l0aW9uKGltYWdlLCBib3VuZHMubWluKTtcclxuXHJcbiAgXHRcdGltYWdlLnN0eWxlLndpZHRoICA9IHNpemUueCArICdweCc7XHJcbiAgXHRcdGltYWdlLnN0eWxlLmhlaWdodCA9IHNpemUueSArICdweCc7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVPcGFjaXR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHNldE9wYWNpdHkodGhpcy5faW1hZ2UsIHRoaXMub3B0aW9ucy5vcGFjaXR5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZVpJbmRleDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5faW1hZ2UgJiYgdGhpcy5vcHRpb25zLnpJbmRleCAhPT0gdW5kZWZpbmVkICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IG51bGwpIHtcclxuICBcdFx0XHR0aGlzLl9pbWFnZS5zdHlsZS56SW5kZXggPSB0aGlzLm9wdGlvbnMuekluZGV4O1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vdmVybGF5T25FcnJvcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHQvLyBAZXZlbnQgZXJyb3I6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIEltYWdlT3ZlcmxheSBsYXllciBmYWlscyB0byBsb2FkIGl0cyBpbWFnZVxyXG4gIFx0XHR0aGlzLmZpcmUoJ2Vycm9yJyk7XHJcblxyXG4gIFx0XHR2YXIgZXJyb3JVcmwgPSB0aGlzLm9wdGlvbnMuZXJyb3JPdmVybGF5VXJsO1xyXG4gIFx0XHRpZiAoZXJyb3JVcmwgJiYgdGhpcy5fdXJsICE9PSBlcnJvclVybCkge1xyXG4gIFx0XHRcdHRoaXMuX3VybCA9IGVycm9yVXJsO1xyXG4gIFx0XHRcdHRoaXMuX2ltYWdlLnNyYyA9IGVycm9yVXJsO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q2VudGVyKCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIG9mIHRoZSBJbWFnZU92ZXJsYXkuXHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2JvdW5kcy5nZXRDZW50ZXIoKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5pbWFnZU92ZXJsYXkoaW1hZ2VVcmw6IFN0cmluZywgYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBJbWFnZU92ZXJsYXkgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYW4gaW1hZ2Ugb3ZlcmxheSBvYmplY3QgZ2l2ZW4gdGhlIFVSTCBvZiB0aGUgaW1hZ2UgYW5kIHRoZVxyXG4gIC8vIGdlb2dyYXBoaWNhbCBib3VuZHMgaXQgaXMgdGllZCB0by5cclxuICB2YXIgaW1hZ2VPdmVybGF5ID0gZnVuY3Rpb24gKHVybCwgYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEltYWdlT3ZlcmxheSh1cmwsIGJvdW5kcywgb3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBWaWRlb092ZXJsYXlcclxuICAgKiBAYWthIEwuVmlkZW9PdmVybGF5XHJcbiAgICogQGluaGVyaXRzIEltYWdlT3ZlcmxheVxyXG4gICAqXHJcbiAgICogVXNlZCB0byBsb2FkIGFuZCBkaXNwbGF5IGEgdmlkZW8gcGxheWVyIG92ZXIgc3BlY2lmaWMgYm91bmRzIG9mIHRoZSBtYXAuIEV4dGVuZHMgYEltYWdlT3ZlcmxheWAuXHJcbiAgICpcclxuICAgKiBBIHZpZGVvIG92ZXJsYXkgdXNlcyB0aGUgW2A8dmlkZW8+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3ZpZGVvKVxyXG4gICAqIEhUTUw1IGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgdmlkZW9VcmwgPSAnaHR0cHM6Ly93d3cubWFwYm94LmNvbS9iaXRlcy8wMDE4OC9wYXRyaWNpYV9uYXNhLndlYm0nLFxyXG4gICAqIFx0dmlkZW9Cb3VuZHMgPSBbWyAzMiwgLTEzMF0sIFsgMTMsIC0xMDBdXTtcclxuICAgKiBMLnZpZGVvT3ZlcmxheSh2aWRlb1VybCwgdmlkZW9Cb3VuZHMgKS5hZGRUbyhtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgVmlkZW9PdmVybGF5ID0gSW1hZ2VPdmVybGF5LmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgVmlkZW9PdmVybGF5IG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvcGxheTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgdmlkZW8gc3RhcnRzIHBsYXlpbmcgYXV0b21hdGljYWxseSB3aGVuIGxvYWRlZC5cclxuICBcdFx0Ly8gT24gc29tZSBicm93c2VycyBhdXRvcGxheSB3aWxsIG9ubHkgd29yayB3aXRoIGBtdXRlZDogdHJ1ZWBcclxuICBcdFx0YXV0b3BsYXk6IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxvb3A6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIHZpZGVvIHdpbGwgbG9vcCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgd2hlbiBwbGF5ZWQuXHJcbiAgXHRcdGxvb3A6IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGtlZXBBc3BlY3RSYXRpbzogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgdmlkZW8gd2lsbCBzYXZlIGFzcGVjdCByYXRpbyBhZnRlciB0aGUgcHJvamVjdGlvbi5cclxuICBcdFx0Ly8gUmVsZXZhbnQgZm9yIHN1cHBvcnRlZCBicm93c2Vycy4gU2VlIFticm93c2VyIGNvbXBhdGliaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9vYmplY3QtZml0KVxyXG4gIFx0XHRrZWVwQXNwZWN0UmF0aW86IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG11dGVkOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgdmlkZW8gc3RhcnRzIG9uIG11dGUgd2hlbiBsb2FkZWQuXHJcbiAgXHRcdG11dGVkOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcGxheXNJbmxpbmU6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIE1vYmlsZSBicm93c2VycyB3aWxsIHBsYXkgdGhlIHZpZGVvIHJpZ2h0IHdoZXJlIGl0IGlzIGluc3RlYWQgb2Ygb3BlbiBpdCB1cCBpbiBmdWxsc2NyZWVuIG1vZGUuXHJcbiAgXHRcdHBsYXlzSW5saW5lOiB0cnVlXHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW1hZ2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHdhc0VsZW1lbnRTdXBwbGllZCA9IHRoaXMuX3VybC50YWdOYW1lID09PSAnVklERU8nO1xyXG4gIFx0XHR2YXIgdmlkID0gdGhpcy5faW1hZ2UgPSB3YXNFbGVtZW50U3VwcGxpZWQgPyB0aGlzLl91cmwgOiBjcmVhdGUkMSgndmlkZW8nKTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKHZpZCwgJ2xlYWZsZXQtaW1hZ2UtbGF5ZXInKTtcclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyh2aWQsICdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTsgfVxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyh2aWQsIHRoaXMub3B0aW9ucy5jbGFzc05hbWUpOyB9XHJcblxyXG4gIFx0XHR2aWQub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XHJcbiAgXHRcdHZpZC5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdmlkZW8gaGFzIGZpbmlzaGVkIGxvYWRpbmcgdGhlIGZpcnN0IGZyYW1lXHJcbiAgXHRcdHZpZC5vbmxvYWRlZGRhdGEgPSBiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ2xvYWQnKTtcclxuXHJcbiAgXHRcdGlmICh3YXNFbGVtZW50U3VwcGxpZWQpIHtcclxuICBcdFx0XHR2YXIgc291cmNlRWxlbWVudHMgPSB2aWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NvdXJjZScpO1xyXG4gIFx0XHRcdHZhciBzb3VyY2VzID0gW107XHJcbiAgXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBzb3VyY2VFbGVtZW50cy5sZW5ndGg7IGorKykge1xyXG4gIFx0XHRcdFx0c291cmNlcy5wdXNoKHNvdXJjZUVsZW1lbnRzW2pdLnNyYyk7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHR0aGlzLl91cmwgPSAoc291cmNlRWxlbWVudHMubGVuZ3RoID4gMCkgPyBzb3VyY2VzIDogW3ZpZC5zcmNdO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFpc0FycmF5KHRoaXMuX3VybCkpIHsgdGhpcy5fdXJsID0gW3RoaXMuX3VybF07IH1cclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmtlZXBBc3BlY3RSYXRpbyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmlkLnN0eWxlLCAnb2JqZWN0Rml0JykpIHtcclxuICBcdFx0XHR2aWQuc3R5bGVbJ29iamVjdEZpdCddID0gJ2ZpbGwnO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHZpZC5hdXRvcGxheSA9ICEhdGhpcy5vcHRpb25zLmF1dG9wbGF5O1xyXG4gIFx0XHR2aWQubG9vcCA9ICEhdGhpcy5vcHRpb25zLmxvb3A7XHJcbiAgXHRcdHZpZC5tdXRlZCA9ICEhdGhpcy5vcHRpb25zLm11dGVkO1xyXG4gIFx0XHR2aWQucGxheXNJbmxpbmUgPSAhIXRoaXMub3B0aW9ucy5wbGF5c0lubGluZTtcclxuICBcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl91cmwubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHR2YXIgc291cmNlID0gY3JlYXRlJDEoJ3NvdXJjZScpO1xyXG4gIFx0XHRcdHNvdXJjZS5zcmMgPSB0aGlzLl91cmxbaV07XHJcbiAgXHRcdFx0dmlkLmFwcGVuZENoaWxkKHNvdXJjZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEVsZW1lbnQoKTogSFRNTFZpZGVvRWxlbWVudFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgW2BIVE1MVmlkZW9FbGVtZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0hUTUxWaWRlb0VsZW1lbnQpXHJcbiAgXHQvLyB1c2VkIGJ5IHRoaXMgb3ZlcmxheS5cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudmlkZW9PdmVybGF5KHZpZGVvOiBTdHJpbmd8QXJyYXl8SFRNTFZpZGVvRWxlbWVudCwgYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBWaWRlb092ZXJsYXkgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYW4gaW1hZ2Ugb3ZlcmxheSBvYmplY3QgZ2l2ZW4gdGhlIFVSTCBvZiB0aGUgdmlkZW8gKG9yIGFycmF5IG9mIFVSTHMsIG9yIGV2ZW4gYSB2aWRlbyBlbGVtZW50KSBhbmQgdGhlXHJcbiAgLy8gZ2VvZ3JhcGhpY2FsIGJvdW5kcyBpdCBpcyB0aWVkIHRvLlxyXG5cclxuICBmdW5jdGlvbiB2aWRlb092ZXJsYXkodmlkZW8sIGJvdW5kcywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBWaWRlb092ZXJsYXkodmlkZW8sIGJvdW5kcywgb3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBTVkdPdmVybGF5XG4gICAqIEBha2EgTC5TVkdPdmVybGF5XG4gICAqIEBpbmhlcml0cyBJbWFnZU92ZXJsYXlcbiAgICpcbiAgICogVXNlZCB0byBsb2FkLCBkaXNwbGF5IGFuZCBwcm92aWRlIERPTSBhY2Nlc3MgdG8gYW4gU1ZHIGZpbGUgb3ZlciBzcGVjaWZpYyBib3VuZHMgb2YgdGhlIG1hcC4gRXh0ZW5kcyBgSW1hZ2VPdmVybGF5YC5cbiAgICpcbiAgICogQW4gU1ZHIG92ZXJsYXkgdXNlcyB0aGUgW2A8c3ZnPmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9FbGVtZW50L3N2ZykgZWxlbWVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIHN2Z0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcbiAgICogc3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiKTtcbiAgICogc3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCBcIjAgMCAyMDAgMjAwXCIpO1xuICAgKiBzdmdFbGVtZW50LmlubmVySFRNTCA9ICc8cmVjdCB3aWR0aD1cIjIwMFwiIGhlaWdodD1cIjIwMFwiLz48cmVjdCB4PVwiNzVcIiB5PVwiMjNcIiB3aWR0aD1cIjUwXCIgaGVpZ2h0PVwiNTBcIiBzdHlsZT1cImZpbGw6cmVkXCIvPjxyZWN0IHg9XCI3NVwiIHk9XCIxMjNcIiB3aWR0aD1cIjUwXCIgaGVpZ2h0PVwiNTBcIiBzdHlsZT1cImZpbGw6IzAwMTNmZlwiLz4nO1xuICAgKiB2YXIgc3ZnRWxlbWVudEJvdW5kcyA9IFsgWyAzMiwgLTEzMCBdLCBbIDEzLCAtMTAwIF0gXTtcbiAgICogTC5zdmdPdmVybGF5KHN2Z0VsZW1lbnQsIHN2Z0VsZW1lbnRCb3VuZHMpLmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgU1ZHT3ZlcmxheSA9IEltYWdlT3ZlcmxheS5leHRlbmQoe1xuICBcdF9pbml0SW1hZ2U6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBlbCA9IHRoaXMuX2ltYWdlID0gdGhpcy5fdXJsO1xuXG4gIFx0XHRhZGRDbGFzcyhlbCwgJ2xlYWZsZXQtaW1hZ2UtbGF5ZXInKTtcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHsgYWRkQ2xhc3MoZWwsICdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTsgfVxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUpIHsgYWRkQ2xhc3MoZWwsIHRoaXMub3B0aW9ucy5jbGFzc05hbWUpOyB9XG5cbiAgXHRcdGVsLm9uc2VsZWN0c3RhcnQgPSBmYWxzZUZuO1xuICBcdFx0ZWwub25tb3VzZW1vdmUgPSBmYWxzZUZuO1xuICBcdH1cblxuICBcdC8vIEBtZXRob2QgZ2V0RWxlbWVudCgpOiBTVkdFbGVtZW50XG4gIFx0Ly8gUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgW2BTVkdFbGVtZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1NWR0VsZW1lbnQpXG4gIFx0Ly8gdXNlZCBieSB0aGlzIG92ZXJsYXkuXG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5zdmdPdmVybGF5KHN2ZzogU3RyaW5nfFNWR0VsZW1lbnQsIGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogU1ZHT3ZlcmxheSBvcHRpb25zKVxuICAvLyBJbnN0YW50aWF0ZXMgYW4gaW1hZ2Ugb3ZlcmxheSBvYmplY3QgZ2l2ZW4gYW4gU1ZHIGVsZW1lbnQgYW5kIHRoZSBnZW9ncmFwaGljYWwgYm91bmRzIGl0IGlzIHRpZWQgdG8uXG4gIC8vIEEgdmlld0JveCBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgb24gdGhlIFNWRyBlbGVtZW50IHRvIHpvb20gaW4gYW5kIG91dCBwcm9wZXJseS5cblxuICBmdW5jdGlvbiBzdmdPdmVybGF5KGVsLCBib3VuZHMsIG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IFNWR092ZXJsYXkoZWwsIGJvdW5kcywgb3B0aW9ucyk7XG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBEaXZPdmVybGF5XHJcbiAgICogQGluaGVyaXRzIEludGVyYWN0aXZlIGxheWVyXHJcbiAgICogQGFrYSBMLkRpdk92ZXJsYXlcclxuICAgKiBCYXNlIG1vZGVsIGZvciBMLlBvcHVwIGFuZCBMLlRvb2x0aXAuIEluaGVyaXQgZnJvbSBpdCBmb3IgY3VzdG9tIG92ZXJsYXlzIGxpa2UgcGx1Z2lucy5cclxuICAgKi9cclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBEaXZPdmVybGF5XHJcbiAgdmFyIERpdk92ZXJsYXkgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIERpdk92ZXJsYXkgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIGludGVyYWN0aXZlOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgdHJ1ZSwgdGhlIHBvcHVwL3Rvb2x0aXAgd2lsbCBsaXN0ZW4gdG8gdGhlIG1vdXNlIGV2ZW50cy5cclxuICBcdFx0aW50ZXJhY3RpdmU6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBvZmZzZXQ6IFBvaW50ID0gUG9pbnQoMCwgMClcclxuICBcdFx0Ly8gVGhlIG9mZnNldCBvZiB0aGUgb3ZlcmxheSBwb3NpdGlvbi5cclxuICBcdFx0b2Zmc2V0OiBbMCwgMF0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gQSBjdXN0b20gQ1NTIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSBvdmVybGF5LlxyXG4gIFx0XHRjbGFzc05hbWU6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSB1bmRlZmluZWRcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgb3ZlcmxheSB3aWxsIGJlIGFkZGVkLlxyXG4gIFx0XHRwYW5lOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxGdW5jdGlvbiA9ICcnXHJcbiAgXHRcdC8vIFNldHMgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgb3ZlcmxheSB3aGlsZSBpbml0aWFsaXppbmcuIElmIGEgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBzb3VyY2UgbGF5ZXIgd2lsbCBiZVxyXG4gIFx0XHQvLyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIGBTdHJpbmdgIG9yIGBIVE1MRWxlbWVudGAgdG8gYmUgdXNlZCBpbiB0aGUgb3ZlcmxheS5cclxuICBcdFx0Y29udGVudDogJydcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xyXG4gIFx0XHRpZiAob3B0aW9ucyAmJiAob3B0aW9ucyBpbnN0YW5jZW9mIExhdExuZyB8fCBpc0FycmF5KG9wdGlvbnMpKSkge1xyXG4gIFx0XHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKG9wdGlvbnMpO1xyXG4gIFx0XHRcdHNldE9wdGlvbnModGhpcywgc291cmNlKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0XHRcdHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNvbnRlbnQpIHtcclxuICBcdFx0XHR0aGlzLl9jb250ZW50ID0gdGhpcy5vcHRpb25zLmNvbnRlbnQ7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvcGVuT24obWFwOiBNYXApOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBvdmVybGF5IHRvIHRoZSBtYXAuXHJcbiAgXHQvLyBBbHRlcm5hdGl2ZSB0byBgbWFwLm9wZW5Qb3B1cChwb3B1cClgL2Aub3BlblRvb2x0aXAodG9vbHRpcClgLlxyXG4gIFx0b3Blbk9uOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdG1hcCA9IGFyZ3VtZW50cy5sZW5ndGggPyBtYXAgOiB0aGlzLl9zb3VyY2UuX21hcDsgLy8gZXhwZXJpbWVudGFsLCBub3QgdGhlIHBhcnQgb2YgcHVibGljIGFwaVxyXG4gIFx0XHRpZiAoIW1hcC5oYXNMYXllcih0aGlzKSkge1xyXG4gIFx0XHRcdG1hcC5hZGRMYXllcih0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjbG9zZSgpOiB0aGlzXHJcbiAgXHQvLyBDbG9zZXMgdGhlIG92ZXJsYXkuXHJcbiAgXHQvLyBBbHRlcm5hdGl2ZSB0byBgbWFwLmNsb3NlUG9wdXAocG9wdXApYC9gLmNsb3NlVG9vbHRpcCh0b29sdGlwKWBcclxuICBcdC8vIGFuZCBgbGF5ZXIuY2xvc2VQb3B1cCgpYC9gLmNsb3NlVG9vbHRpcCgpYC5cclxuICBcdGNsb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLl9tYXAucmVtb3ZlTGF5ZXIodGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9nZ2xlKGxheWVyPzogTGF5ZXIpOiB0aGlzXHJcbiAgXHQvLyBPcGVucyBvciBjbG9zZXMgdGhlIG92ZXJsYXkgYm91bmQgdG8gbGF5ZXIgZGVwZW5kaW5nIG9uIGl0cyBjdXJyZW50IHN0YXRlLlxyXG4gIFx0Ly8gQXJndW1lbnQgbWF5IGJlIG9taXR0ZWQgb25seSBmb3Igb3ZlcmxheSBib3VuZCB0byBsYXllci5cclxuICBcdC8vIEFsdGVybmF0aXZlIHRvIGBsYXllci50b2dnbGVQb3B1cCgpYC9gLnRvZ2dsZVRvb2x0aXAoKWAuXHJcbiAgXHR0b2dnbGU6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5jbG9zZSgpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9zb3VyY2UgPSBsYXllcjtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0bGF5ZXIgPSB0aGlzLl9zb3VyY2U7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHRoaXMuX3ByZXBhcmVPcGVuKCk7XHJcblxyXG4gIFx0XHRcdC8vIG9wZW4gdGhlIG92ZXJsYXkgb24gdGhlIG1hcFxyXG4gIFx0XHRcdHRoaXMub3Blbk9uKGxheWVyLl9tYXApO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBtYXAuX3pvb21BbmltYXRlZDtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdExheW91dCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobWFwLl9mYWRlQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRzZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwgMCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KTtcclxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcbiAgXHRcdGlmIChtYXAuX2ZhZGVBbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCAxKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5icmluZ1RvRnJvbnQoKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWludGVyYWN0aXZlJyk7XHJcbiAgXHRcdFx0dGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdGlmIChtYXAuX2ZhZGVBbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCAwKTtcclxuICBcdFx0XHR0aGlzLl9yZW1vdmVUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKHJlbW92ZSwgdW5kZWZpbmVkLCB0aGlzLl9jb250YWluZXIpLCAyMDApO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7XHJcbiAgXHRcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpO1xyXG4gIFx0XHRcdHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fY29udGFpbmVyKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbmFtZXNwYWNlIERpdk92ZXJsYXlcclxuICBcdC8vIEBtZXRob2QgZ2V0TGF0TG5nOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBwb2ludCBvZiB0aGUgb3ZlcmxheS5cclxuICBcdGdldExhdExuZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fbGF0bG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldExhdExuZyhsYXRsbmc6IExhdExuZyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGdlb2dyYXBoaWNhbCBwb2ludCB3aGVyZSB0aGUgb3ZlcmxheSB3aWxsIG9wZW4uXHJcbiAgXHRzZXRMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgXHRcdFx0dGhpcy5fYWRqdXN0UGFuKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBvdmVybGF5LlxyXG4gIFx0Z2V0Q29udGVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGVudDtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRDb250ZW50KGh0bWxDb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnR8RnVuY3Rpb24pOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIG92ZXJsYXkuIElmIGEgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBzb3VyY2UgbGF5ZXIgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLlxyXG4gIFx0Ly8gVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBgU3RyaW5nYCBvciBgSFRNTEVsZW1lbnRgIHRvIGJlIHVzZWQgaW4gdGhlIG92ZXJsYXkuXHJcbiAgXHRzZXRDb250ZW50OiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gIFx0XHR0aGlzLl9jb250ZW50ID0gY29udGVudDtcclxuICBcdFx0dGhpcy51cGRhdGUoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0RWxlbWVudDogU3RyaW5nfEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBIVE1MIGNvbnRhaW5lciBvZiB0aGUgb3ZlcmxheS5cclxuICBcdGdldEVsZW1lbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1cGRhdGU6IG51bGxcclxuICBcdC8vIFVwZGF0ZXMgdGhlIG92ZXJsYXkgY29udGVudCwgbGF5b3V0IGFuZCBwb3NpdGlvbi4gVXNlZnVsIGZvciB1cGRhdGluZyB0aGUgb3ZlcmxheSBhZnRlciBzb21ldGhpbmcgaW5zaWRlIGNoYW5nZWQsIGUuZy4gaW1hZ2UgbG9hZGVkLlxyXG4gIFx0dXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dGhpcy5fY29udGFpbmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcclxuXHJcbiAgXHRcdHRoaXMuX3VwZGF0ZUNvbnRlbnQoKTtcclxuICBcdFx0dGhpcy5fdXBkYXRlTGF5b3V0KCk7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICcnO1xyXG5cclxuICBcdFx0dGhpcy5fYWRqdXN0UGFuKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgZXZlbnRzID0ge1xyXG4gIFx0XHRcdHpvb206IHRoaXMuX3VwZGF0ZVBvc2l0aW9uLFxyXG4gIFx0XHRcdHZpZXdyZXNldDogdGhpcy5fdXBkYXRlUG9zaXRpb25cclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRldmVudHMuem9vbWFuaW0gPSB0aGlzLl9hbmltYXRlWm9vbTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGlzT3BlbjogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgb3ZlcmxheSBpcyB2aXNpYmxlIG9uIHRoZSBtYXAuXHJcbiAgXHRpc09wZW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICEhdGhpcy5fbWFwICYmIHRoaXMuX21hcC5oYXNMYXllcih0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQ6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGlzIG92ZXJsYXkgaW4gZnJvbnQgb2Ygb3RoZXIgb3ZlcmxheXMgKGluIHRoZSBzYW1lIG1hcCBwYW5lKS5cclxuICBcdGJyaW5nVG9Gcm9udDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dG9Gcm9udCh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9CYWNrOiB0aGlzXHJcbiAgXHQvLyBCcmluZ3MgdGhpcyBvdmVybGF5IHRvIHRoZSBiYWNrIG9mIG90aGVyIG92ZXJsYXlzIChpbiB0aGUgc2FtZSBtYXAgcGFuZSkuXHJcbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dG9CYWNrKHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIHByZXBhcmUgYm91bmQgb3ZlcmxheSB0byBvcGVuOiB1cGRhdGUgbGF0bG5nIHBvcyAvIGNvbnRlbnQgc291cmNlIChmb3IgRmVhdHVyZUdyb3VwKVxyXG4gIFx0X3ByZXBhcmVPcGVuOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBzb3VyY2UgPSB0aGlzLl9zb3VyY2U7XHJcbiAgXHRcdGlmICghc291cmNlLl9tYXApIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHRpZiAoc291cmNlIGluc3RhbmNlb2YgRmVhdHVyZUdyb3VwKSB7XHJcbiAgXHRcdFx0c291cmNlID0gbnVsbDtcclxuICBcdFx0XHR2YXIgbGF5ZXJzID0gdGhpcy5fc291cmNlLl9sYXllcnM7XHJcbiAgXHRcdFx0Zm9yICh2YXIgaWQgaW4gbGF5ZXJzKSB7XHJcbiAgXHRcdFx0XHRpZiAobGF5ZXJzW2lkXS5fbWFwKSB7XHJcbiAgXHRcdFx0XHRcdHNvdXJjZSA9IGxheWVyc1tpZF07XHJcbiAgXHRcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRpZiAoIXNvdXJjZSkgeyByZXR1cm4gZmFsc2U7IH0gLy8gVW5hYmxlIHRvIGdldCBzb3VyY2UgbGF5ZXIuXHJcblxyXG4gIFx0XHRcdC8vIHNldCBvdmVybGF5IHNvdXJjZSB0byB0aGlzIGxheWVyXHJcbiAgXHRcdFx0dGhpcy5fc291cmNlID0gc291cmNlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIWxhdGxuZykge1xyXG4gIFx0XHRcdGlmIChzb3VyY2UuZ2V0Q2VudGVyKSB7XHJcbiAgXHRcdFx0XHRsYXRsbmcgPSBzb3VyY2UuZ2V0Q2VudGVyKCk7XHJcbiAgXHRcdFx0fSBlbHNlIGlmIChzb3VyY2UuZ2V0TGF0TG5nKSB7XHJcbiAgXHRcdFx0XHRsYXRsbmcgPSBzb3VyY2UuZ2V0TGF0TG5nKCk7XHJcbiAgXHRcdFx0fSBlbHNlIGlmIChzb3VyY2UuZ2V0Qm91bmRzKSB7XHJcbiAgXHRcdFx0XHRsYXRsbmcgPSBzb3VyY2UuZ2V0Qm91bmRzKCkuZ2V0Q2VudGVyKCk7XHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGdldCBzb3VyY2UgbGF5ZXIgTGF0TG5nLicpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLnNldExhdExuZyhsYXRsbmcpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdC8vIHVwZGF0ZSB0aGUgb3ZlcmxheSAoY29udGVudCwgbGF5b3V0LCBldGMuLi4pXHJcbiAgXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVDb250ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fY29udGVudCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciBub2RlID0gdGhpcy5fY29udGVudE5vZGU7XHJcbiAgXHRcdHZhciBjb250ZW50ID0gKHR5cGVvZiB0aGlzLl9jb250ZW50ID09PSAnZnVuY3Rpb24nKSA/IHRoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlIHx8IHRoaXMpIDogdGhpcy5fY29udGVudDtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcclxuICBcdFx0XHRub2RlLmlubmVySFRNTCA9IGNvbnRlbnQ7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0d2hpbGUgKG5vZGUuaGFzQ2hpbGROb2RlcygpKSB7XHJcbiAgXHRcdFx0XHRub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdG5vZGUuYXBwZW5kQ2hpbGQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgRGl2T3ZlcmxheVxyXG4gIFx0XHQvLyBAc2VjdGlvbiBEaXZPdmVybGF5IGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgY29udGVudHVwZGF0ZTogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgY29udGVudCBvZiB0aGUgb3ZlcmxheSBpcyB1cGRhdGVkXHJcbiAgXHRcdHRoaXMuZmlyZSgnY29udGVudHVwZGF0ZScpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KSxcclxuICBcdFx0ICAgIGFuY2hvciA9IHRoaXMuX2dldEFuY2hvcigpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgcG9zLmFkZChhbmNob3IpKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvZmZzZXQgPSBvZmZzZXQuYWRkKHBvcykuYWRkKGFuY2hvcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBib3R0b20gPSB0aGlzLl9jb250YWluZXJCb3R0b20gPSAtb2Zmc2V0LnksXHJcbiAgXHRcdCAgICBsZWZ0ID0gdGhpcy5fY29udGFpbmVyTGVmdCA9IC1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoIC8gMikgKyBvZmZzZXQueDtcclxuXHJcbiAgXHRcdC8vIGJvdHRvbSBwb3NpdGlvbiB0aGUgb3ZlcmxheSBpbiBjYXNlIHRoZSBoZWlnaHQgb2YgdGhlIG92ZXJsYXkgY2hhbmdlcyAoaW1hZ2VzIGxvYWRpbmcgZXRjKVxyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUuYm90dG9tID0gYm90dG9tICsgJ3B4JztcclxuICBcdFx0dGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldEFuY2hvcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gWzAsIDBdO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcclxuXHJcbiAgTWFwLmluY2x1ZGUoe1xyXG4gIFx0X2luaXRPdmVybGF5OiBmdW5jdGlvbiAoT3ZlcmxheUNsYXNzLCBjb250ZW50LCBsYXRsbmcsIG9wdGlvbnMpIHtcclxuICBcdFx0dmFyIG92ZXJsYXkgPSBjb250ZW50O1xyXG4gIFx0XHRpZiAoIShvdmVybGF5IGluc3RhbmNlb2YgT3ZlcmxheUNsYXNzKSkge1xyXG4gIFx0XHRcdG92ZXJsYXkgPSBuZXcgT3ZlcmxheUNsYXNzKG9wdGlvbnMpLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGxhdGxuZykge1xyXG4gIFx0XHRcdG92ZXJsYXkuc2V0TGF0TG5nKGxhdGxuZyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG92ZXJsYXk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICBMYXllci5pbmNsdWRlKHtcclxuICBcdF9pbml0T3ZlcmxheTogZnVuY3Rpb24gKE92ZXJsYXlDbGFzcywgb2xkLCBjb250ZW50LCBvcHRpb25zKSB7XHJcbiAgXHRcdHZhciBvdmVybGF5ID0gY29udGVudDtcclxuICBcdFx0aWYgKG92ZXJsYXkgaW5zdGFuY2VvZiBPdmVybGF5Q2xhc3MpIHtcclxuICBcdFx0XHRzZXRPcHRpb25zKG92ZXJsYXksIG9wdGlvbnMpO1xyXG4gIFx0XHRcdG92ZXJsYXkuX3NvdXJjZSA9IHRoaXM7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0b3ZlcmxheSA9IChvbGQgJiYgIW9wdGlvbnMpID8gb2xkIDogbmV3IE92ZXJsYXlDbGFzcyhvcHRpb25zLCB0aGlzKTtcclxuICBcdFx0XHRvdmVybGF5LnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG92ZXJsYXk7XHJcbiAgXHR9XHJcbiAgfSk7XG5cbiAgLypcclxuICAgKiBAY2xhc3MgUG9wdXBcclxuICAgKiBAaW5oZXJpdHMgRGl2T3ZlcmxheVxyXG4gICAqIEBha2EgTC5Qb3B1cFxyXG4gICAqIFVzZWQgdG8gb3BlbiBwb3B1cHMgaW4gY2VydGFpbiBwbGFjZXMgb2YgdGhlIG1hcC4gVXNlIFtNYXAub3BlblBvcHVwXSgjbWFwLW9wZW5wb3B1cCkgdG9cclxuICAgKiBvcGVuIHBvcHVwcyB3aGlsZSBtYWtpbmcgc3VyZSB0aGF0IG9ubHkgb25lIHBvcHVwIGlzIG9wZW4gYXQgb25lIHRpbWVcclxuICAgKiAocmVjb21tZW5kZWQgZm9yIHVzYWJpbGl0eSksIG9yIHVzZSBbTWFwLmFkZExheWVyXSgjbWFwLWFkZGxheWVyKSB0byBvcGVuIGFzIG1hbnkgYXMgeW91IHdhbnQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogSWYgeW91IHdhbnQgdG8ganVzdCBiaW5kIGEgcG9wdXAgdG8gbWFya2VyIGNsaWNrIGFuZCB0aGVuIG9wZW4gaXQsIGl0J3MgcmVhbGx5IGVhc3k6XHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIG1hcmtlci5iaW5kUG9wdXAocG9wdXBDb250ZW50KS5vcGVuUG9wdXAoKTtcclxuICAgKiBgYGBcclxuICAgKiBQYXRoIG92ZXJsYXlzIGxpa2UgcG9seWxpbmVzIGFsc28gaGF2ZSBhIGBiaW5kUG9wdXBgIG1ldGhvZC5cclxuICAgKlxyXG4gICAqIEEgcG9wdXAgY2FuIGJlIGFsc28gc3RhbmRhbG9uZTpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIHBvcHVwID0gTC5wb3B1cCgpXHJcbiAgICogXHQuc2V0TGF0TG5nKGxhdGxuZylcclxuICAgKiBcdC5zZXRDb250ZW50KCc8cD5IZWxsbyB3b3JsZCE8YnIgLz5UaGlzIGlzIGEgbmljZSBwb3B1cC48L3A+JylcclxuICAgKiBcdC5vcGVuT24obWFwKTtcclxuICAgKiBgYGBcclxuICAgKiBvclxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIHBvcHVwID0gTC5wb3B1cChsYXRsbmcsIHtjb250ZW50OiAnPHA+SGVsbG8gd29ybGQhPGJyIC8+VGhpcyBpcyBhIG5pY2UgcG9wdXAuPC9wPicpXHJcbiAgICogXHQub3Blbk9uKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICAvLyBAbmFtZXNwYWNlIFBvcHVwXHJcbiAgdmFyIFBvcHVwID0gRGl2T3ZlcmxheS5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIFBvcHVwIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAncG9wdXBQYW5lJ1xyXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSBwb3B1cCB3aWxsIGJlIGFkZGVkLlxyXG4gIFx0XHRwYW5lOiAncG9wdXBQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gb2Zmc2V0OiBQb2ludCA9IFBvaW50KDAsIDcpXHJcbiAgXHRcdC8vIFRoZSBvZmZzZXQgb2YgdGhlIHBvcHVwIHBvc2l0aW9uLlxyXG4gIFx0XHRvZmZzZXQ6IFswLCA3XSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4V2lkdGg6IE51bWJlciA9IDMwMFxyXG4gIFx0XHQvLyBNYXggd2lkdGggb2YgdGhlIHBvcHVwLCBpbiBwaXhlbHMuXHJcbiAgXHRcdG1heFdpZHRoOiAzMDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG1pbldpZHRoOiBOdW1iZXIgPSA1MFxyXG4gIFx0XHQvLyBNaW4gd2lkdGggb2YgdGhlIHBvcHVwLCBpbiBwaXhlbHMuXHJcbiAgXHRcdG1pbldpZHRoOiA1MCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4SGVpZ2h0OiBOdW1iZXIgPSBudWxsXHJcbiAgXHRcdC8vIElmIHNldCwgY3JlYXRlcyBhIHNjcm9sbGFibGUgY29udGFpbmVyIG9mIHRoZSBnaXZlbiBoZWlnaHRcclxuICBcdFx0Ly8gaW5zaWRlIGEgcG9wdXAgaWYgaXRzIGNvbnRlbnQgZXhjZWVkcyBpdC5cclxuICBcdFx0Ly8gVGhlIHNjcm9sbGFibGUgY29udGFpbmVyIGNhbiBiZSBzdHlsZWQgdXNpbmcgdGhlXHJcbiAgXHRcdC8vIGBsZWFmbGV0LXBvcHVwLXNjcm9sbGVkYCBDU1MgY2xhc3Mgc2VsZWN0b3IuXHJcbiAgXHRcdG1heEhlaWdodDogbnVsbCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhbjogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gU2V0IGl0IHRvIGBmYWxzZWAgaWYgeW91IGRvbid0IHdhbnQgdGhlIG1hcCB0byBkbyBwYW5uaW5nIGFuaW1hdGlvblxyXG4gIFx0XHQvLyB0byBmaXQgdGhlIG9wZW5lZCBwb3B1cC5cclxuICBcdFx0YXV0b1BhbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhblBhZGRpbmdUb3BMZWZ0OiBQb2ludCA9IG51bGxcclxuICBcdFx0Ly8gVGhlIG1hcmdpbiBiZXR3ZWVuIHRoZSBwb3B1cCBhbmQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbWFwXHJcbiAgXHRcdC8vIHZpZXcgYWZ0ZXIgYXV0b3Bhbm5pbmcgd2FzIHBlcmZvcm1lZC5cclxuICBcdFx0YXV0b1BhblBhZGRpbmdUb3BMZWZ0OiBudWxsLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0OiBQb2ludCA9IG51bGxcclxuICBcdFx0Ly8gVGhlIG1hcmdpbiBiZXR3ZWVuIHRoZSBwb3B1cCBhbmQgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgb2YgdGhlIG1hcFxyXG4gIFx0XHQvLyB2aWV3IGFmdGVyIGF1dG9wYW5uaW5nIHdhcyBwZXJmb3JtZWQuXHJcbiAgXHRcdGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5QYWRkaW5nOiBQb2ludCA9IFBvaW50KDUsIDUpXHJcbiAgXHRcdC8vIEVxdWl2YWxlbnQgb2Ygc2V0dGluZyBib3RoIHRvcCBsZWZ0IGFuZCBib3R0b20gcmlnaHQgYXV0b3BhbiBwYWRkaW5nIHRvIHRoZSBzYW1lIHZhbHVlLlxyXG4gIFx0XHRhdXRvUGFuUGFkZGluZzogWzUsIDVdLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBrZWVwSW5WaWV3OiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gU2V0IGl0IHRvIGB0cnVlYCBpZiB5b3Ugd2FudCB0byBwcmV2ZW50IHVzZXJzIGZyb20gcGFubmluZyB0aGUgcG9wdXBcclxuICBcdFx0Ly8gb2ZmIG9mIHRoZSBzY3JlZW4gd2hpbGUgaXQgaXMgb3Blbi5cclxuICBcdFx0a2VlcEluVmlldzogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNsb3NlQnV0dG9uOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBDb250cm9scyB0aGUgcHJlc2VuY2Ugb2YgYSBjbG9zZSBidXR0b24gaW4gdGhlIHBvcHVwLlxyXG4gIFx0XHRjbG9zZUJ1dHRvbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b0Nsb3NlOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZlxyXG4gIFx0XHQvLyB0aGUgcG9wdXAgY2xvc2luZyB3aGVuIGFub3RoZXIgcG9wdXAgaXMgb3BlbmVkLlxyXG4gIFx0XHRhdXRvQ2xvc2U6IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNsb3NlT25Fc2NhcGVLZXk6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mXHJcbiAgXHRcdC8vIHRoZSBFU0Mga2V5IGZvciBjbG9zaW5nIG9mIHRoZSBwb3B1cC5cclxuICBcdFx0Y2xvc2VPbkVzY2FwZUtleTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VPbkNsaWNrOiBCb29sZWFuID0gKlxyXG4gIFx0XHQvLyBTZXQgaXQgaWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIHBvcHVwIGNsb3Npbmcgd2hlbiB1c2VyIGNsaWNrc1xyXG4gIFx0XHQvLyBvbiB0aGUgbWFwLiBEZWZhdWx0cyB0byB0aGUgbWFwJ3MgW2BjbG9zZVBvcHVwT25DbGlja2BdKCNtYXAtY2xvc2Vwb3B1cG9uY2xpY2spIG9wdGlvbi5cclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBBIGN1c3RvbSBDU1MgY2xhc3MgbmFtZSB0byBhc3NpZ24gdG8gdGhlIHBvcHVwLlxyXG4gIFx0XHRjbGFzc05hbWU6ICcnXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBuYW1lc3BhY2UgUG9wdXBcclxuICBcdC8vIEBtZXRob2Qgb3Blbk9uKG1hcDogTWFwKTogdGhpc1xyXG4gIFx0Ly8gQWx0ZXJuYXRpdmUgdG8gYG1hcC5vcGVuUG9wdXAocG9wdXApYC5cclxuICBcdC8vIEFkZHMgdGhlIHBvcHVwIHRvIHRoZSBtYXAgYW5kIGNsb3NlcyB0aGUgcHJldmlvdXMgb25lLlxyXG4gIFx0b3Blbk9uOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdG1hcCA9IGFyZ3VtZW50cy5sZW5ndGggPyBtYXAgOiB0aGlzLl9zb3VyY2UuX21hcDsgLy8gZXhwZXJpbWVudGFsLCBub3QgdGhlIHBhcnQgb2YgcHVibGljIGFwaVxyXG5cclxuICBcdFx0aWYgKCFtYXAuaGFzTGF5ZXIodGhpcykgJiYgbWFwLl9wb3B1cCAmJiBtYXAuX3BvcHVwLm9wdGlvbnMuYXV0b0Nsb3NlKSB7XHJcbiAgXHRcdFx0bWFwLnJlbW92ZUxheWVyKG1hcC5fcG9wdXApO1xyXG4gIFx0XHR9XHJcbiAgXHRcdG1hcC5fcG9wdXAgPSB0aGlzO1xyXG5cclxuICBcdFx0cmV0dXJuIERpdk92ZXJsYXkucHJvdG90eXBlLm9wZW5Pbi5jYWxsKHRoaXMsIG1hcCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdERpdk92ZXJsYXkucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcywgbWFwKTtcclxuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgXHRcdC8vIEBzZWN0aW9uIFBvcHVwIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgcG9wdXBvcGVuOiBQb3B1cEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSBwb3B1cCBpcyBvcGVuZWQgaW4gdGhlIG1hcFxyXG4gIFx0XHRtYXAuZmlyZSgncG9wdXBvcGVuJywge3BvcHVwOiB0aGlzfSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgXHRcdFx0Ly8gQG5hbWVzcGFjZSBMYXllclxyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIFBvcHVwIGV2ZW50c1xyXG4gIFx0XHRcdC8vIEBldmVudCBwb3B1cG9wZW46IFBvcHVwRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgcG9wdXAgYm91bmQgdG8gdGhpcyBsYXllciBpcyBvcGVuZWRcclxuICBcdFx0XHR0aGlzLl9zb3VyY2UuZmlyZSgncG9wdXBvcGVuJywge3BvcHVwOiB0aGlzfSwgdHJ1ZSk7XHJcbiAgXHRcdFx0Ly8gRm9yIG5vbi1wYXRoIGxheWVycywgd2UgdG9nZ2xlIHRoZSBwb3B1cCB3aGVuIGNsaWNraW5nXHJcbiAgXHRcdFx0Ly8gYWdhaW4gdGhlIGxheWVyLCBzbyBwcmV2ZW50IHRoZSBtYXAgdG8gcmVvcGVuIGl0LlxyXG4gIFx0XHRcdGlmICghKHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIFBhdGgpKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9zb3VyY2Uub24oJ3ByZWNsaWNrJywgc3RvcFByb3BhZ2F0aW9uKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLCBtYXApO1xyXG5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcclxuICBcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBwb3B1cGNsb3NlOiBQb3B1cEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSBwb3B1cCBpbiB0aGUgbWFwIGlzIGNsb3NlZFxyXG4gIFx0XHRtYXAuZmlyZSgncG9wdXBjbG9zZScsIHtwb3B1cDogdGhpc30pO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3NvdXJjZSkge1xyXG4gIFx0XHRcdC8vIEBuYW1lc3BhY2UgTGF5ZXJcclxuICBcdFx0XHQvLyBAc2VjdGlvbiBQb3B1cCBldmVudHNcclxuICBcdFx0XHQvLyBAZXZlbnQgcG9wdXBjbG9zZTogUG9wdXBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGlzIGNsb3NlZFxyXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCdwb3B1cGNsb3NlJywge3BvcHVwOiB0aGlzfSwgdHJ1ZSk7XHJcbiAgXHRcdFx0aWYgKCEodGhpcy5fc291cmNlIGluc3RhbmNlb2YgUGF0aCkpIHtcclxuICBcdFx0XHRcdHRoaXMuX3NvdXJjZS5vZmYoJ3ByZWNsaWNrJywgc3RvcFByb3BhZ2F0aW9uKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBldmVudHMgPSBEaXZPdmVybGF5LnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrICE9PSB1bmRlZmluZWQgPyB0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrIDogdGhpcy5fbWFwLm9wdGlvbnMuY2xvc2VQb3B1cE9uQ2xpY2spIHtcclxuICBcdFx0XHRldmVudHMucHJlY2xpY2sgPSB0aGlzLmNsb3NlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmtlZXBJblZpZXcpIHtcclxuICBcdFx0XHRldmVudHMubW92ZWVuZCA9IHRoaXMuX2FkanVzdFBhbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIGV2ZW50cztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHByZWZpeCA9ICdsZWFmbGV0LXBvcHVwJyxcclxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLFxyXG4gIFx0XHRcdHByZWZpeCArICcgJyArICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnKSArXHJcbiAgXHRcdFx0JyBsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTtcclxuXHJcbiAgXHRcdHZhciB3cmFwcGVyID0gdGhpcy5fd3JhcHBlciA9IGNyZWF0ZSQxKCdkaXYnLCBwcmVmaXggKyAnLWNvbnRlbnQtd3JhcHBlcicsIGNvbnRhaW5lcik7XHJcbiAgXHRcdHRoaXMuX2NvbnRlbnROb2RlID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctY29udGVudCcsIHdyYXBwZXIpO1xyXG5cclxuICBcdFx0ZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24oY29udGFpbmVyKTtcclxuICBcdFx0ZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKHRoaXMuX2NvbnRlbnROb2RlKTtcclxuICBcdFx0b24oY29udGFpbmVyLCAnY29udGV4dG1lbnUnLCBzdG9wUHJvcGFnYXRpb24pO1xyXG5cclxuICBcdFx0dGhpcy5fdGlwQ29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctdGlwLWNvbnRhaW5lcicsIGNvbnRhaW5lcik7XHJcbiAgXHRcdHRoaXMuX3RpcCA9IGNyZWF0ZSQxKCdkaXYnLCBwcmVmaXggKyAnLXRpcCcsIHRoaXMuX3RpcENvbnRhaW5lcik7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uKSB7XHJcbiAgXHRcdFx0dmFyIGNsb3NlQnV0dG9uID0gdGhpcy5fY2xvc2VCdXR0b24gPSBjcmVhdGUkMSgnYScsIHByZWZpeCArICctY2xvc2UtYnV0dG9uJywgY29udGFpbmVyKTtcclxuICBcdFx0XHRjbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7IC8vIG92ZXJyaWRlcyB0aGUgaW1wbGljaXQgcm9sZT1saW5rIG9mIDxhPiBlbGVtZW50cyAjNzM5OVxyXG4gIFx0XHRcdGNsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdDbG9zZSBwb3B1cCcpO1xyXG4gIFx0XHRcdGNsb3NlQnV0dG9uLmhyZWYgPSAnI2Nsb3NlJztcclxuICBcdFx0XHRjbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSAnPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JiMyMTU7PC9zcGFuPic7XHJcblxyXG4gIFx0XHRcdG9uKGNsb3NlQnV0dG9uLCAnY2xpY2snLCBmdW5jdGlvbiAoZXYpIHtcclxuICBcdFx0XHRcdHByZXZlbnREZWZhdWx0KGV2KTtcclxuICBcdFx0XHRcdHRoaXMuY2xvc2UoKTtcclxuICBcdFx0XHR9LCB0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlTGF5b3V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9jb250ZW50Tm9kZSxcclxuICBcdFx0ICAgIHN0eWxlID0gY29udGFpbmVyLnN0eWxlO1xyXG5cclxuICBcdFx0c3R5bGUud2lkdGggPSAnJztcclxuICBcdFx0c3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xyXG5cclxuICBcdFx0dmFyIHdpZHRoID0gY29udGFpbmVyLm9mZnNldFdpZHRoO1xyXG4gIFx0XHR3aWR0aCA9IE1hdGgubWluKHdpZHRoLCB0aGlzLm9wdGlvbnMubWF4V2lkdGgpO1xyXG4gIFx0XHR3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCB0aGlzLm9wdGlvbnMubWluV2lkdGgpO1xyXG5cclxuICBcdFx0c3R5bGUud2lkdGggPSAod2lkdGggKyAxKSArICdweCc7XHJcbiAgXHRcdHN0eWxlLndoaXRlU3BhY2UgPSAnJztcclxuXHJcbiAgXHRcdHN0eWxlLmhlaWdodCA9ICcnO1xyXG5cclxuICBcdFx0dmFyIGhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXHJcbiAgXHRcdCAgICBtYXhIZWlnaHQgPSB0aGlzLm9wdGlvbnMubWF4SGVpZ2h0LFxyXG4gIFx0XHQgICAgc2Nyb2xsZWRDbGFzcyA9ICdsZWFmbGV0LXBvcHVwLXNjcm9sbGVkJztcclxuXHJcbiAgXHRcdGlmIChtYXhIZWlnaHQgJiYgaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XHJcbiAgXHRcdFx0c3R5bGUuaGVpZ2h0ID0gbWF4SGVpZ2h0ICsgJ3B4JztcclxuICBcdFx0XHRhZGRDbGFzcyhjb250YWluZXIsIHNjcm9sbGVkQ2xhc3MpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgc2Nyb2xsZWRDbGFzcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lcldpZHRoID0gdGhpcy5fY29udGFpbmVyLm9mZnNldFdpZHRoO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsIGUuem9vbSwgZS5jZW50ZXIpLFxyXG4gIFx0XHQgICAgYW5jaG9yID0gdGhpcy5fZ2V0QW5jaG9yKCk7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgcG9zLmFkZChhbmNob3IpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FkanVzdFBhbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5hdXRvUGFuKSB7IHJldHVybjsgfVxyXG4gIFx0XHRpZiAodGhpcy5fbWFwLl9wYW5BbmltKSB7IHRoaXMuX21hcC5fcGFuQW5pbS5zdG9wKCk7IH1cclxuXHJcbiAgXHRcdC8vIFdlIGNhbiBlbmRsZXNzbHkgcmVjdXJzZSBpZiBrZWVwSW5WaWV3IGlzIHNldCBhbmQgdGhlIHZpZXcgcmVzZXRzLlxyXG4gIFx0XHQvLyBMZXQncyBndWFyZCBhZ2FpbnN0IHRoYXQgYnkgZXhpdGluZyBlYXJseSBpZiB3ZSdyZSByZXNwb25kaW5nIHRvIG91ciBvd24gYXV0b3Bhbi5cclxuICBcdFx0aWYgKHRoaXMuX2F1dG9wYW5uaW5nKSB7XHJcbiAgXHRcdFx0dGhpcy5fYXV0b3Bhbm5pbmcgPSBmYWxzZTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXHJcbiAgXHRcdCAgICBtYXJnaW5Cb3R0b20gPSBwYXJzZUludChnZXRTdHlsZSh0aGlzLl9jb250YWluZXIsICdtYXJnaW5Cb3R0b20nKSwgMTApIHx8IDAsXHJcbiAgXHRcdCAgICBjb250YWluZXJIZWlnaHQgPSB0aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgbWFyZ2luQm90dG9tLFxyXG4gIFx0XHQgICAgY29udGFpbmVyV2lkdGggPSB0aGlzLl9jb250YWluZXJXaWR0aCxcclxuICBcdFx0ICAgIGxheWVyUG9zID0gbmV3IFBvaW50KHRoaXMuX2NvbnRhaW5lckxlZnQsIC1jb250YWluZXJIZWlnaHQgLSB0aGlzLl9jb250YWluZXJCb3R0b20pO1xyXG5cclxuICBcdFx0bGF5ZXJQb3MuX2FkZChnZXRQb3NpdGlvbih0aGlzLl9jb250YWluZXIpKTtcclxuXHJcbiAgXHRcdHZhciBjb250YWluZXJQb3MgPSBtYXAubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQobGF5ZXJQb3MpLFxyXG4gIFx0XHQgICAgcGFkZGluZyA9IHRvUG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nKSxcclxuICBcdFx0ICAgIHBhZGRpbmdUTCA9IHRvUG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nVG9wTGVmdCB8fCBwYWRkaW5nKSxcclxuICBcdFx0ICAgIHBhZGRpbmdCUiA9IHRvUG9pbnQodGhpcy5vcHRpb25zLmF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQgfHwgcGFkZGluZyksXHJcbiAgXHRcdCAgICBzaXplID0gbWFwLmdldFNpemUoKSxcclxuICBcdFx0ICAgIGR4ID0gMCxcclxuICBcdFx0ICAgIGR5ID0gMDtcclxuXHJcbiAgXHRcdGlmIChjb250YWluZXJQb3MueCArIGNvbnRhaW5lcldpZHRoICsgcGFkZGluZ0JSLnggPiBzaXplLngpIHsgLy8gcmlnaHRcclxuICBcdFx0XHRkeCA9IGNvbnRhaW5lclBvcy54ICsgY29udGFpbmVyV2lkdGggLSBzaXplLnggKyBwYWRkaW5nQlIueDtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoY29udGFpbmVyUG9zLnggLSBkeCAtIHBhZGRpbmdUTC54IDwgMCkgeyAvLyBsZWZ0XHJcbiAgXHRcdFx0ZHggPSBjb250YWluZXJQb3MueCAtIHBhZGRpbmdUTC54O1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmIChjb250YWluZXJQb3MueSArIGNvbnRhaW5lckhlaWdodCArIHBhZGRpbmdCUi55ID4gc2l6ZS55KSB7IC8vIGJvdHRvbVxyXG4gIFx0XHRcdGR5ID0gY29udGFpbmVyUG9zLnkgKyBjb250YWluZXJIZWlnaHQgLSBzaXplLnkgKyBwYWRkaW5nQlIueTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoY29udGFpbmVyUG9zLnkgLSBkeSAtIHBhZGRpbmdUTC55IDwgMCkgeyAvLyB0b3BcclxuICBcdFx0XHRkeSA9IGNvbnRhaW5lclBvcy55IC0gcGFkZGluZ1RMLnk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgXHRcdC8vIEBzZWN0aW9uIFBvcHVwIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgYXV0b3BhbnN0YXJ0OiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgc3RhcnRzIGF1dG9wYW5uaW5nIHdoZW4gb3BlbmluZyBhIHBvcHVwLlxyXG4gIFx0XHRpZiAoZHggfHwgZHkpIHtcclxuICBcdFx0XHQvLyBUcmFjayB0aGF0IHdlJ3JlIGF1dG9wYW5uaW5nLCBhcyB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmUtcmFuIG9uIG1vdmVlbmRcclxuICBcdFx0XHRpZiAodGhpcy5vcHRpb25zLmtlZXBJblZpZXcpIHtcclxuICBcdFx0XHRcdHRoaXMuX2F1dG9wYW5uaW5nID0gdHJ1ZTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdG1hcFxyXG4gIFx0XHRcdCAgICAuZmlyZSgnYXV0b3BhbnN0YXJ0JylcclxuICBcdFx0XHQgICAgLnBhbkJ5KFtkeCwgZHldKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0QW5jaG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIFdoZXJlIHNob3VsZCB3ZSBhbmNob3IgdGhlIHBvcHVwIG9uIHRoZSBzb3VyY2UgbGF5ZXI/XHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yID8gdGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcigpIDogWzAsIDBdKTtcclxuICBcdH1cclxuXHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgUG9wdXBcclxuICAvLyBAZmFjdG9yeSBMLnBvcHVwKG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zLCBzb3VyY2U/OiBMYXllcilcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBgUG9wdXBgIG9iamVjdCBnaXZlbiBhbiBvcHRpb25hbCBgb3B0aW9uc2Agb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGl0cyBhcHBlYXJhbmNlIGFuZCBsb2NhdGlvbiBhbmQgYW4gb3B0aW9uYWwgYHNvdXJjZWAgb2JqZWN0IHRoYXQgaXMgdXNlZCB0byB0YWcgdGhlIHBvcHVwIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIExheWVyIHRvIHdoaWNoIGl0IHJlZmVycy5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvcHVwKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogUG9wdXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBgUG9wdXBgIG9iamVjdCBnaXZlbiBgbGF0bG5nYCB3aGVyZSB0aGUgcG9wdXAgd2lsbCBvcGVuIGFuZCBhbiBvcHRpb25hbCBgb3B0aW9uc2Agb2JqZWN0IHRoYXQgZGVzY3JpYmVzIGl0cyBhcHBlYXJhbmNlIGFuZCBsb2NhdGlvbi5cclxuICB2YXIgcG9wdXAgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFBvcHVwKG9wdGlvbnMsIHNvdXJjZSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qIEBuYW1lc3BhY2UgTWFwXHJcbiAgICogQHNlY3Rpb24gSW50ZXJhY3Rpb24gT3B0aW9uc1xyXG4gICAqIEBvcHRpb24gY2xvc2VQb3B1cE9uQ2xpY2s6IEJvb2xlYW4gPSB0cnVlXHJcbiAgICogU2V0IGl0IHRvIGBmYWxzZWAgaWYgeW91IGRvbid0IHdhbnQgcG9wdXBzIHRvIGNsb3NlIHdoZW4gdXNlciBjbGlja3MgdGhlIG1hcC5cclxuICAgKi9cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdGNsb3NlUG9wdXBPbkNsaWNrOiB0cnVlXHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcclxuICBNYXAuaW5jbHVkZSh7XHJcbiAgXHQvLyBAbWV0aG9kIG9wZW5Qb3B1cChwb3B1cDogUG9wdXApOiB0aGlzXHJcbiAgXHQvLyBPcGVucyB0aGUgc3BlY2lmaWVkIHBvcHVwIHdoaWxlIGNsb3NpbmcgdGhlIHByZXZpb3VzbHkgb3BlbmVkICh0byBtYWtlIHN1cmUgb25seSBvbmUgaXMgb3BlbmVkIGF0IG9uZSB0aW1lIGZvciB1c2FiaWxpdHkpLlxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIG9wZW5Qb3B1cChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnQsIGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogUG9wdXAgb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIENyZWF0ZXMgYSBwb3B1cCB3aXRoIHRoZSBzcGVjaWZpZWQgY29udGVudCBhbmQgb3B0aW9ucyBhbmQgb3BlbnMgaXQgaW4gdGhlIGdpdmVuIHBvaW50IG9uIGEgbWFwLlxyXG4gIFx0b3BlblBvcHVwOiBmdW5jdGlvbiAocG9wdXAsIGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0XHR0aGlzLl9pbml0T3ZlcmxheShQb3B1cCwgcG9wdXAsIGxhdGxuZywgb3B0aW9ucylcclxuICBcdFx0ICAub3Blbk9uKHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY2xvc2VQb3B1cChwb3B1cD86IFBvcHVwKTogdGhpc1xyXG4gIFx0Ly8gQ2xvc2VzIHRoZSBwb3B1cCBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIFtvcGVuUG9wdXBdKCNtYXAtb3BlbnBvcHVwKSAob3IgdGhlIGdpdmVuIG9uZSkuXHJcbiAgXHRjbG9zZVBvcHVwOiBmdW5jdGlvbiAocG9wdXApIHtcclxuICBcdFx0cG9wdXAgPSBhcmd1bWVudHMubGVuZ3RoID8gcG9wdXAgOiB0aGlzLl9wb3B1cDtcclxuICBcdFx0aWYgKHBvcHVwKSB7XHJcbiAgXHRcdFx0cG9wdXAuY2xvc2UoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIExheWVyXHJcbiAgICogQHNlY3Rpb24gUG9wdXAgbWV0aG9kcyBleGFtcGxlXHJcbiAgICpcclxuICAgKiBBbGwgbGF5ZXJzIHNoYXJlIGEgc2V0IG9mIG1ldGhvZHMgY29udmVuaWVudCBmb3IgYmluZGluZyBwb3B1cHMgdG8gaXQuXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBsYXllciA9IEwuUG9seWdvbihsYXRsbmdzKS5iaW5kUG9wdXAoJ0hpIFRoZXJlIScpLmFkZFRvKG1hcCk7XHJcbiAgICogbGF5ZXIub3BlblBvcHVwKCk7XHJcbiAgICogbGF5ZXIuY2xvc2VQb3B1cCgpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogUG9wdXBzIHdpbGwgYWxzbyBiZSBhdXRvbWF0aWNhbGx5IG9wZW5lZCB3aGVuIHRoZSBsYXllciBpcyBjbGlja2VkIG9uIGFuZCBjbG9zZWQgd2hlbiB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgb3IgYW5vdGhlciBwb3B1cCBpcyBvcGVuZWQuXHJcbiAgICovXHJcblxyXG4gIC8vIEBzZWN0aW9uIFBvcHVwIG1ldGhvZHNcclxuICBMYXllci5pbmNsdWRlKHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJpbmRQb3B1cChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnR8RnVuY3Rpb258UG9wdXAsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gQmluZHMgYSBwb3B1cCB0byB0aGUgbGF5ZXIgd2l0aCB0aGUgcGFzc2VkIGBjb250ZW50YCBhbmQgc2V0cyB1cCB0aGVcclxuICBcdC8vIG5lY2Vzc2FyeSBldmVudCBsaXN0ZW5lcnMuIElmIGEgYEZ1bmN0aW9uYCBpcyBwYXNzZWQgaXQgd2lsbCByZWNlaXZlXHJcbiAgXHQvLyB0aGUgbGF5ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YC5cclxuICBcdGJpbmRQb3B1cDogZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHtcclxuICBcdFx0dGhpcy5fcG9wdXAgPSB0aGlzLl9pbml0T3ZlcmxheShQb3B1cCwgdGhpcy5fcG9wdXAsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG4gIFx0XHRpZiAoIXRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZCkge1xyXG4gIFx0XHRcdHRoaXMub24oe1xyXG4gIFx0XHRcdFx0Y2xpY2s6IHRoaXMuX29wZW5Qb3B1cCxcclxuICBcdFx0XHRcdGtleXByZXNzOiB0aGlzLl9vbktleVByZXNzLFxyXG4gIFx0XHRcdFx0cmVtb3ZlOiB0aGlzLmNsb3NlUG9wdXAsXHJcbiAgXHRcdFx0XHRtb3ZlOiB0aGlzLl9tb3ZlUG9wdXBcclxuICBcdFx0XHR9KTtcclxuICBcdFx0XHR0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWQgPSB0cnVlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1bmJpbmRQb3B1cCgpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIHRoZSBwb3B1cCBwcmV2aW91c2x5IGJvdW5kIHdpdGggYGJpbmRQb3B1cGAuXHJcbiAgXHR1bmJpbmRQb3B1cDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHR0aGlzLm9mZih7XHJcbiAgXHRcdFx0XHRjbGljazogdGhpcy5fb3BlblBvcHVwLFxyXG4gIFx0XHRcdFx0a2V5cHJlc3M6IHRoaXMuX29uS2V5UHJlc3MsXHJcbiAgXHRcdFx0XHRyZW1vdmU6IHRoaXMuY2xvc2VQb3B1cCxcclxuICBcdFx0XHRcdG1vdmU6IHRoaXMuX21vdmVQb3B1cFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZCA9IGZhbHNlO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvcGVuUG9wdXAobGF0bG5nPzogTGF0TG5nKTogdGhpc1xyXG4gIFx0Ly8gT3BlbnMgdGhlIGJvdW5kIHBvcHVwIGF0IHRoZSBzcGVjaWZpZWQgYGxhdGxuZ2Agb3IgYXQgdGhlIGRlZmF1bHQgcG9wdXAgYW5jaG9yIGlmIG5vIGBsYXRsbmdgIGlzIHBhc3NlZC5cclxuICBcdG9wZW5Qb3B1cDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgRmVhdHVyZUdyb3VwKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fcG9wdXAuX3NvdXJjZSA9IHRoaXM7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGlmICh0aGlzLl9wb3B1cC5fcHJlcGFyZU9wZW4obGF0bG5nIHx8IHRoaXMuX2xhdGxuZykpIHtcclxuICBcdFx0XHRcdC8vIG9wZW4gdGhlIHBvcHVwIG9uIHRoZSBtYXBcclxuICBcdFx0XHRcdHRoaXMuX3BvcHVwLm9wZW5Pbih0aGlzLl9tYXApO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjbG9zZVBvcHVwKCk6IHRoaXNcclxuICBcdC8vIENsb3NlcyB0aGUgcG9wdXAgYm91bmQgdG8gdGhpcyBsYXllciBpZiBpdCBpcyBvcGVuLlxyXG4gIFx0Y2xvc2VQb3B1cDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHR0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRvZ2dsZVBvcHVwKCk6IHRoaXNcclxuICBcdC8vIE9wZW5zIG9yIGNsb3NlcyB0aGUgcG9wdXAgYm91bmQgdG8gdGhpcyBsYXllciBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXHJcbiAgXHR0b2dnbGVQb3B1cDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHR0aGlzLl9wb3B1cC50b2dnbGUodGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNQb3B1cE9wZW4oKTogYm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY3VycmVudGx5IG9wZW4uXHJcbiAgXHRpc1BvcHVwT3BlbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gKHRoaXMuX3BvcHVwID8gdGhpcy5fcG9wdXAuaXNPcGVuKCkgOiBmYWxzZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UG9wdXBDb250ZW50KGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxQb3B1cCk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIuXHJcbiAgXHRzZXRQb3B1cENvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UG9wdXAoKTogUG9wdXBcclxuICBcdC8vIFJldHVybnMgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIuXHJcbiAgXHRnZXRQb3B1cDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fcG9wdXA7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vcGVuUG9wdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fcG9wdXAgfHwgIXRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG4gIFx0XHQvLyBwcmV2ZW50IG1hcCBjbGlja1xyXG4gIFx0XHRzdG9wKGUpO1xyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IGUubGF5ZXIgfHwgZS50YXJnZXQ7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cC5fc291cmNlID09PSB0YXJnZXQgJiYgISh0YXJnZXQgaW5zdGFuY2VvZiBQYXRoKSkge1xyXG4gIFx0XHRcdC8vIHRyZWF0IGl0IGxpa2UgYSBtYXJrZXIgYW5kIGZpZ3VyZSBvdXRcclxuICBcdFx0XHQvLyBpZiB3ZSBzaG91bGQgdG9nZ2xlIGl0IG9wZW4vY2xvc2VkXHJcbiAgXHRcdFx0aWYgKHRoaXMuX21hcC5oYXNMYXllcih0aGlzLl9wb3B1cCkpIHtcclxuICBcdFx0XHRcdHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHR0aGlzLm9wZW5Qb3B1cChlLmxhdGxuZyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLl9wb3B1cC5fc291cmNlID0gdGFyZ2V0O1xyXG4gIFx0XHR0aGlzLm9wZW5Qb3B1cChlLmxhdGxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlUG9wdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHRoaXMuX3BvcHVwLnNldExhdExuZyhlLmxhdGxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbktleVByZXNzOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAoZS5vcmlnaW5hbEV2ZW50LmtleUNvZGUgPT09IDEzKSB7XHJcbiAgXHRcdFx0dGhpcy5fb3BlblBvcHVwKGUpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIFRvb2x0aXBcbiAgICogQGluaGVyaXRzIERpdk92ZXJsYXlcbiAgICogQGFrYSBMLlRvb2x0aXBcbiAgICogVXNlZCB0byBkaXNwbGF5IHNtYWxsIHRleHRzIG9uIHRvcCBvZiBtYXAgbGF5ZXJzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBJZiB5b3Ugd2FudCB0byBqdXN0IGJpbmQgYSB0b29sdGlwIHRvIG1hcmtlcjpcbiAgICpcbiAgICogYGBganNcbiAgICogbWFya2VyLmJpbmRUb29sdGlwKFwibXkgdG9vbHRpcCB0ZXh0XCIpLm9wZW5Ub29sdGlwKCk7XG4gICAqIGBgYFxuICAgKiBQYXRoIG92ZXJsYXlzIGxpa2UgcG9seWxpbmVzIGFsc28gaGF2ZSBhIGBiaW5kVG9vbHRpcGAgbWV0aG9kLlxuICAgKlxuICAgKiBBIHRvb2x0aXAgY2FuIGJlIGFsc28gc3RhbmRhbG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIHRvb2x0aXAgPSBMLnRvb2x0aXAoKVxuICAgKiBcdC5zZXRMYXRMbmcobGF0bG5nKVxuICAgKiBcdC5zZXRDb250ZW50KCdIZWxsbyB3b3JsZCE8YnIgLz5UaGlzIGlzIGEgbmljZSB0b29sdGlwLicpXG4gICAqIFx0LmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKiBvclxuICAgKiBgYGBqc1xuICAgKiB2YXIgdG9vbHRpcCA9IEwudG9vbHRpcChsYXRsbmcsIHtjb250ZW50OiAnSGVsbG8gd29ybGQhPGJyIC8+VGhpcyBpcyBhIG5pY2UgdG9vbHRpcC4nfSlcbiAgICogXHQuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqXG4gICAqXG4gICAqIE5vdGUgYWJvdXQgdG9vbHRpcCBvZmZzZXQuIExlYWZsZXQgdGFrZXMgdHdvIG9wdGlvbnMgaW4gY29uc2lkZXJhdGlvblxuICAgKiBmb3IgY29tcHV0aW5nIHRvb2x0aXAgb2Zmc2V0dGluZzpcbiAgICogLSB0aGUgYG9mZnNldGAgVG9vbHRpcCBvcHRpb246IGl0IGRlZmF1bHRzIHRvIFswLCAwXSwgYW5kIGl0J3Mgc3BlY2lmaWMgdG8gb25lIHRvb2x0aXAuXG4gICAqICAgQWRkIGEgcG9zaXRpdmUgeCBvZmZzZXQgdG8gbW92ZSB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQsIGFuZCBhIHBvc2l0aXZlIHkgb2Zmc2V0IHRvXG4gICAqICAgbW92ZSBpdCB0byB0aGUgYm90dG9tLiBOZWdhdGl2ZXMgd2lsbCBtb3ZlIHRvIHRoZSBsZWZ0IGFuZCB0b3AuXG4gICAqIC0gdGhlIGB0b29sdGlwQW5jaG9yYCBJY29uIG9wdGlvbjogdGhpcyB3aWxsIG9ubHkgYmUgY29uc2lkZXJlZCBmb3IgTWFya2VyLiBZb3VcbiAgICogICBzaG91bGQgYWRhcHQgdGhpcyB2YWx1ZSBpZiB5b3UgdXNlIGEgY3VzdG9tIGljb24uXG4gICAqL1xuXG5cbiAgLy8gQG5hbWVzcGFjZSBUb29sdGlwXG4gIHZhciBUb29sdGlwID0gRGl2T3ZlcmxheS5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIFRvb2x0aXAgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gcGFuZTogU3RyaW5nID0gJ3Rvb2x0aXBQYW5lJ1xuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIGJlIGFkZGVkLlxuICBcdFx0cGFuZTogJ3Rvb2x0aXBQYW5lJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBvZmZzZXQ6IFBvaW50ID0gUG9pbnQoMCwgMClcbiAgXHRcdC8vIE9wdGlvbmFsIG9mZnNldCBvZiB0aGUgdG9vbHRpcCBwb3NpdGlvbi5cbiAgXHRcdG9mZnNldDogWzAsIDBdLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGRpcmVjdGlvbjogU3RyaW5nID0gJ2F1dG8nXG4gIFx0XHQvLyBEaXJlY3Rpb24gd2hlcmUgdG8gb3BlbiB0aGUgdG9vbHRpcC4gUG9zc2libGUgdmFsdWVzIGFyZTogYHJpZ2h0YCwgYGxlZnRgLFxuICBcdFx0Ly8gYHRvcGAsIGBib3R0b21gLCBgY2VudGVyYCwgYGF1dG9gLlxuICBcdFx0Ly8gYGF1dG9gIHdpbGwgZHluYW1pY2FsbHkgc3dpdGNoIGJldHdlZW4gYHJpZ2h0YCBhbmQgYGxlZnRgIGFjY29yZGluZyB0byB0aGUgdG9vbHRpcFxuICBcdFx0Ly8gcG9zaXRpb24gb24gdGhlIG1hcC5cbiAgXHRcdGRpcmVjdGlvbjogJ2F1dG8nLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHBlcm1hbmVudDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBXaGV0aGVyIHRvIG9wZW4gdGhlIHRvb2x0aXAgcGVybWFuZW50bHkgb3Igb25seSBvbiBtb3VzZW92ZXIuXG4gIFx0XHRwZXJtYW5lbnQ6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHN0aWNreTogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBJZiB0cnVlLCB0aGUgdG9vbHRpcCB3aWxsIGZvbGxvdyB0aGUgbW91c2UgaW5zdGVhZCBvZiBiZWluZyBmaXhlZCBhdCB0aGUgZmVhdHVyZSBjZW50ZXIuXG4gIFx0XHRzdGlja3k6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDAuOVxuICBcdFx0Ly8gVG9vbHRpcCBjb250YWluZXIgb3BhY2l0eS5cbiAgXHRcdG9wYWNpdHk6IDAuOVxuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xuICBcdFx0dGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KTtcblxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcbiAgXHRcdC8vIEBzZWN0aW9uIFRvb2x0aXAgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgdG9vbHRpcG9wZW46IFRvb2x0aXBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgaXMgb3BlbmVkIGluIHRoZSBtYXAuXG4gIFx0XHRtYXAuZmlyZSgndG9vbHRpcG9wZW4nLCB7dG9vbHRpcDogdGhpc30pO1xuXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XG4gIFx0XHRcdHRoaXMuYWRkRXZlbnRQYXJlbnQodGhpcy5fc291cmNlKTtcblxuICBcdFx0XHQvLyBAbmFtZXNwYWNlIExheWVyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIFRvb2x0aXAgZXZlbnRzXG4gIFx0XHRcdC8vIEBldmVudCB0b29sdGlwb3BlbjogVG9vbHRpcEV2ZW50XG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSB0b29sdGlwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgb3BlbmVkLlxuICBcdFx0XHR0aGlzLl9zb3VyY2UuZmlyZSgndG9vbHRpcG9wZW4nLCB7dG9vbHRpcDogdGhpc30sIHRydWUpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLCBtYXApO1xuXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxuICBcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdC8vIEBldmVudCB0b29sdGlwY2xvc2U6IFRvb2x0aXBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgaW4gdGhlIG1hcCBpcyBjbG9zZWQuXG4gIFx0XHRtYXAuZmlyZSgndG9vbHRpcGNsb3NlJywge3Rvb2x0aXA6IHRoaXN9KTtcblxuICBcdFx0aWYgKHRoaXMuX3NvdXJjZSkge1xuICBcdFx0XHR0aGlzLnJlbW92ZUV2ZW50UGFyZW50KHRoaXMuX3NvdXJjZSk7XG5cbiAgXHRcdFx0Ly8gQG5hbWVzcGFjZSBMYXllclxuICBcdFx0XHQvLyBAc2VjdGlvbiBUb29sdGlwIGV2ZW50c1xuICBcdFx0XHQvLyBAZXZlbnQgdG9vbHRpcGNsb3NlOiBUb29sdGlwRXZlbnRcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBpcyBjbG9zZWQuXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCd0b29sdGlwY2xvc2UnLCB7dG9vbHRpcDogdGhpc30sIHRydWUpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBldmVudHMgPSBEaXZPdmVybGF5LnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtcblxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMucGVybWFuZW50KSB7XG4gIFx0XHRcdGV2ZW50cy5wcmVjbGljayA9IHRoaXMuY2xvc2U7XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiBldmVudHM7XG4gIFx0fSxcblxuICBcdF9pbml0TGF5b3V0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcHJlZml4ID0gJ2xlYWZsZXQtdG9vbHRpcCcsXG4gIFx0XHQgICAgY2xhc3NOYW1lID0gcHJlZml4ICsgJyAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpICsgJyBsZWFmbGV0LXpvb20tJyArICh0aGlzLl96b29tQW5pbWF0ZWQgPyAnYW5pbWF0ZWQnIDogJ2hpZGUnKTtcblxuICBcdFx0dGhpcy5fY29udGVudE5vZGUgPSB0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lKTtcblxuICBcdFx0dGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgncm9sZScsICd0b29sdGlwJyk7XG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsICdsZWFmbGV0LXRvb2x0aXAtJyArIHN0YW1wKHRoaXMpKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUxheW91dDogZnVuY3Rpb24gKCkge30sXG5cbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoKSB7fSxcblxuICBcdF9zZXRQb3NpdGlvbjogZnVuY3Rpb24gKHBvcykge1xuICBcdFx0dmFyIHN1YlgsIHN1YlksXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcixcbiAgXHRcdCAgICBjZW50ZXJQb2ludCA9IG1hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KG1hcC5nZXRDZW50ZXIoKSksXG4gIFx0XHQgICAgdG9vbHRpcFBvaW50ID0gbWFwLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHBvcyksXG4gIFx0XHQgICAgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbixcbiAgXHRcdCAgICB0b29sdGlwV2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGgsXG4gIFx0XHQgICAgdG9vbHRpcEhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gIFx0XHQgICAgb2Zmc2V0ID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KSxcbiAgXHRcdCAgICBhbmNob3IgPSB0aGlzLl9nZXRBbmNob3IoKTtcblxuICBcdFx0aWYgKGRpcmVjdGlvbiA9PT0gJ3RvcCcpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCAvIDI7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0O1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdib3R0b20nKSB7XG4gIFx0XHRcdHN1YlggPSB0b29sdGlwV2lkdGggLyAyO1xuICBcdFx0XHRzdWJZID0gMDtcbiAgXHRcdH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnY2VudGVyJykge1xuICBcdFx0XHRzdWJYID0gdG9vbHRpcFdpZHRoIC8gMjtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgXHRcdFx0c3ViWCA9IDA7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aDtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmICh0b29sdGlwUG9pbnQueCA8IGNlbnRlclBvaW50LngpIHtcbiAgXHRcdFx0ZGlyZWN0aW9uID0gJ3JpZ2h0JztcbiAgXHRcdFx0c3ViWCA9IDA7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGRpcmVjdGlvbiA9ICdsZWZ0JztcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCArIChvZmZzZXQueCArIGFuY2hvci54KSAqIDI7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH1cblxuICBcdFx0cG9zID0gcG9zLnN1YnRyYWN0KHRvUG9pbnQoc3ViWCwgc3ViWSwgdHJ1ZSkpLmFkZChvZmZzZXQpLmFkZChhbmNob3IpO1xuXG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtcmlnaHQnKTtcbiAgXHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC1sZWZ0Jyk7XG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtdG9wJyk7XG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtYm90dG9tJyk7XG4gIFx0XHRhZGRDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtJyArIGRpcmVjdGlvbik7XG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIHBvcyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQb3NpdGlvbjogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHBvcyA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTtcbiAgXHRcdHRoaXMuX3NldFBvc2l0aW9uKHBvcyk7XG4gIFx0fSxcblxuICBcdHNldE9wYWNpdHk6IGZ1bmN0aW9uIChvcGFjaXR5KSB7XG4gIFx0XHR0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIG9wYWNpdHkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLCBlLnpvb20sIGUuY2VudGVyKTtcbiAgXHRcdHRoaXMuX3NldFBvc2l0aW9uKHBvcyk7XG4gIFx0fSxcblxuICBcdF9nZXRBbmNob3I6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFdoZXJlIHNob3VsZCB3ZSBhbmNob3IgdGhlIHRvb2x0aXAgb24gdGhlIHNvdXJjZSBsYXllcj9cbiAgXHRcdHJldHVybiB0b1BvaW50KHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IgJiYgIXRoaXMub3B0aW9ucy5zdGlja3kgPyB0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IoKSA6IFswLCAwXSk7XG4gIFx0fVxuXG4gIH0pO1xuXG4gIC8vIEBuYW1lc3BhY2UgVG9vbHRpcFxuICAvLyBAZmFjdG9yeSBMLnRvb2x0aXAob3B0aW9ucz86IFRvb2x0aXAgb3B0aW9ucywgc291cmNlPzogTGF5ZXIpXG4gIC8vIEluc3RhbnRpYXRlcyBhIGBUb29sdGlwYCBvYmplY3QgZ2l2ZW4gYW4gb3B0aW9uYWwgYG9wdGlvbnNgIG9iamVjdCB0aGF0IGRlc2NyaWJlcyBpdHMgYXBwZWFyYW5jZSBhbmQgbG9jYXRpb24gYW5kIGFuIG9wdGlvbmFsIGBzb3VyY2VgIG9iamVjdCB0aGF0IGlzIHVzZWQgdG8gdGFnIHRoZSB0b29sdGlwIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIExheWVyIHRvIHdoaWNoIGl0IHJlZmVycy5cbiAgLy8gQGFsdGVybmF0aXZlXG4gIC8vIEBmYWN0b3J5IEwudG9vbHRpcChsYXRsbmc6IExhdExuZywgb3B0aW9ucz86IFRvb2x0aXAgb3B0aW9ucylcbiAgLy8gSW5zdGFudGlhdGVzIGEgYFRvb2x0aXBgIG9iamVjdCBnaXZlbiBgbGF0bG5nYCB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIG9wZW4gYW5kIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uLlxuICB2YXIgdG9vbHRpcCA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgXHRyZXR1cm4gbmV3IFRvb2x0aXAob3B0aW9ucywgc291cmNlKTtcbiAgfTtcblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBNZXRob2RzIGZvciBMYXllcnMgYW5kIENvbnRyb2xzXG4gIE1hcC5pbmNsdWRlKHtcblxuICBcdC8vIEBtZXRob2Qgb3BlblRvb2x0aXAodG9vbHRpcDogVG9vbHRpcCk6IHRoaXNcbiAgXHQvLyBPcGVucyB0aGUgc3BlY2lmaWVkIHRvb2x0aXAuXG4gIFx0Ly8gQGFsdGVybmF0aXZlXG4gIFx0Ly8gQG1ldGhvZCBvcGVuVG9vbHRpcChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnQsIGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogVG9vbHRpcCBvcHRpb25zKTogdGhpc1xuICBcdC8vIENyZWF0ZXMgYSB0b29sdGlwIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25zIGFuZCBvcGVuIGl0LlxuICBcdG9wZW5Ub29sdGlwOiBmdW5jdGlvbiAodG9vbHRpcCwgbGF0bG5nLCBvcHRpb25zKSB7XG4gIFx0XHR0aGlzLl9pbml0T3ZlcmxheShUb29sdGlwLCB0b29sdGlwLCBsYXRsbmcsIG9wdGlvbnMpXG4gIFx0XHQgIC5vcGVuT24odGhpcyk7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGNsb3NlVG9vbHRpcCh0b29sdGlwOiBUb29sdGlwKTogdGhpc1xuICBcdC8vIENsb3NlcyB0aGUgdG9vbHRpcCBnaXZlbiBhcyBwYXJhbWV0ZXIuXG4gIFx0Y2xvc2VUb29sdGlwOiBmdW5jdGlvbiAodG9vbHRpcCkge1xuICBcdFx0dG9vbHRpcC5jbG9zZSgpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fVxuXG4gIH0pO1xuXG4gIC8qXG4gICAqIEBuYW1lc3BhY2UgTGF5ZXJcbiAgICogQHNlY3Rpb24gVG9vbHRpcCBtZXRob2RzIGV4YW1wbGVcbiAgICpcbiAgICogQWxsIGxheWVycyBzaGFyZSBhIHNldCBvZiBtZXRob2RzIGNvbnZlbmllbnQgZm9yIGJpbmRpbmcgdG9vbHRpcHMgdG8gaXQuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBsYXllciA9IEwuUG9seWdvbihsYXRsbmdzKS5iaW5kVG9vbHRpcCgnSGkgVGhlcmUhJykuYWRkVG8obWFwKTtcbiAgICogbGF5ZXIub3BlblRvb2x0aXAoKTtcbiAgICogbGF5ZXIuY2xvc2VUb29sdGlwKCk7XG4gICAqIGBgYFxuICAgKi9cblxuICAvLyBAc2VjdGlvbiBUb29sdGlwIG1ldGhvZHNcbiAgTGF5ZXIuaW5jbHVkZSh7XG5cbiAgXHQvLyBAbWV0aG9kIGJpbmRUb29sdGlwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxGdW5jdGlvbnxUb29sdGlwLCBvcHRpb25zPzogVG9vbHRpcCBvcHRpb25zKTogdGhpc1xuICBcdC8vIEJpbmRzIGEgdG9vbHRpcCB0byB0aGUgbGF5ZXIgd2l0aCB0aGUgcGFzc2VkIGBjb250ZW50YCBhbmQgc2V0cyB1cCB0aGVcbiAgXHQvLyBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzLiBJZiBhIGBGdW5jdGlvbmAgaXMgcGFzc2VkIGl0IHdpbGwgcmVjZWl2ZVxuICBcdC8vIHRoZSBsYXllciBhcyB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIHNob3VsZCByZXR1cm4gYSBgU3RyaW5nYCBvciBgSFRNTEVsZW1lbnRgLlxuICBcdGJpbmRUb29sdGlwOiBmdW5jdGlvbiAoY29udGVudCwgb3B0aW9ucykge1xuXG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcCAmJiB0aGlzLmlzVG9vbHRpcE9wZW4oKSkge1xuICBcdFx0XHR0aGlzLnVuYmluZFRvb2x0aXAoKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fdG9vbHRpcCA9IHRoaXMuX2luaXRPdmVybGF5KFRvb2x0aXAsIHRoaXMuX3Rvb2x0aXAsIGNvbnRlbnQsIG9wdGlvbnMpO1xuICBcdFx0dGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoKTtcblxuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQgJiYgdGhpcy5fbWFwICYmIHRoaXMuX21hcC5oYXNMYXllcih0aGlzKSkge1xuICBcdFx0XHR0aGlzLm9wZW5Ub29sdGlwKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHVuYmluZFRvb2x0aXAoKTogdGhpc1xuICBcdC8vIFJlbW92ZXMgdGhlIHRvb2x0aXAgcHJldmlvdXNseSBib3VuZCB3aXRoIGBiaW5kVG9vbHRpcGAuXG4gIFx0dW5iaW5kVG9vbHRpcDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0dGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnModHJ1ZSk7XG4gIFx0XHRcdHRoaXMuY2xvc2VUb29sdGlwKCk7XG4gIFx0XHRcdHRoaXMuX3Rvb2x0aXAgPSBudWxsO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdF9pbml0VG9vbHRpcEludGVyYWN0aW9uczogZnVuY3Rpb24gKHJlbW92ZSkge1xuICBcdFx0aWYgKCFyZW1vdmUgJiYgdGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQpIHsgcmV0dXJuOyB9XG4gIFx0XHR2YXIgb25PZmYgPSByZW1vdmUgPyAnb2ZmJyA6ICdvbicsXG4gIFx0XHQgICAgZXZlbnRzID0ge1xuICBcdFx0XHRyZW1vdmU6IHRoaXMuY2xvc2VUb29sdGlwLFxuICBcdFx0XHRtb3ZlOiB0aGlzLl9tb3ZlVG9vbHRpcFxuICBcdFx0ICAgIH07XG4gIFx0XHRpZiAoIXRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQpIHtcbiAgXHRcdFx0ZXZlbnRzLm1vdXNlb3ZlciA9IHRoaXMuX29wZW5Ub29sdGlwO1xuICBcdFx0XHRldmVudHMubW91c2VvdXQgPSB0aGlzLmNsb3NlVG9vbHRpcDtcbiAgXHRcdFx0ZXZlbnRzLmNsaWNrID0gdGhpcy5fb3BlblRvb2x0aXA7XG4gIFx0XHRcdGlmICh0aGlzLl9tYXApIHtcbiAgXHRcdFx0XHR0aGlzLl9hZGRGb2N1c0xpc3RlbmVycygpO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdGV2ZW50cy5hZGQgPSB0aGlzLl9hZGRGb2N1c0xpc3RlbmVycztcbiAgXHRcdFx0fVxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0ZXZlbnRzLmFkZCA9IHRoaXMuX29wZW5Ub29sdGlwO1xuICBcdFx0fVxuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3kpIHtcbiAgXHRcdFx0ZXZlbnRzLm1vdXNlbW92ZSA9IHRoaXMuX21vdmVUb29sdGlwO1xuICBcdFx0fVxuICBcdFx0dGhpc1tvbk9mZl0oZXZlbnRzKTtcbiAgXHRcdHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkID0gIXJlbW92ZTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBvcGVuVG9vbHRpcChsYXRsbmc/OiBMYXRMbmcpOiB0aGlzXG4gIFx0Ly8gT3BlbnMgdGhlIGJvdW5kIHRvb2x0aXAgYXQgdGhlIHNwZWNpZmllZCBgbGF0bG5nYCBvciBhdCB0aGUgZGVmYXVsdCB0b29sdGlwIGFuY2hvciBpZiBubyBgbGF0bG5nYCBpcyBwYXNzZWQuXG4gIFx0b3BlblRvb2x0aXA6IGZ1bmN0aW9uIChsYXRsbmcpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwKSB7XG4gIFx0XHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBGZWF0dXJlR3JvdXApKSB7XG4gIFx0XHRcdFx0dGhpcy5fdG9vbHRpcC5fc291cmNlID0gdGhpcztcbiAgXHRcdFx0fVxuICBcdFx0XHRpZiAodGhpcy5fdG9vbHRpcC5fcHJlcGFyZU9wZW4obGF0bG5nKSkge1xuICBcdFx0XHRcdC8vIG9wZW4gdGhlIHRvb2x0aXAgb24gdGhlIG1hcFxuICBcdFx0XHRcdHRoaXMuX3Rvb2x0aXAub3Blbk9uKHRoaXMuX21hcCk7XG5cbiAgXHRcdFx0XHRpZiAodGhpcy5nZXRFbGVtZW50KSB7XG4gIFx0XHRcdFx0XHR0aGlzLl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyKHRoaXMpO1xuICBcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5lYWNoTGF5ZXIpIHtcbiAgXHRcdFx0XHRcdHRoaXMuZWFjaExheWVyKHRoaXMuX3NldEFyaWFEZXNjcmliZWRCeU9uTGF5ZXIsIHRoaXMpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VUb29sdGlwKCk6IHRoaXNcbiAgXHQvLyBDbG9zZXMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBpZiBpdCBpcyBvcGVuLlxuICBcdGNsb3NlVG9vbHRpcDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0cmV0dXJuIHRoaXMuX3Rvb2x0aXAuY2xvc2UoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCB0b2dnbGVUb29sdGlwKCk6IHRoaXNcbiAgXHQvLyBPcGVucyBvciBjbG9zZXMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXG4gIFx0dG9nZ2xlVG9vbHRpcDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0dGhpcy5fdG9vbHRpcC50b2dnbGUodGhpcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBpc1Rvb2x0aXBPcGVuKCk6IGJvb2xlYW5cbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlzIGN1cnJlbnRseSBvcGVuLlxuICBcdGlzVG9vbHRpcE9wZW46IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90b29sdGlwLmlzT3BlbigpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFRvb2x0aXBDb250ZW50KGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxUb29sdGlwKTogdGhpc1xuICBcdC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllci5cbiAgXHRzZXRUb29sdGlwQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwKSB7XG4gIFx0XHRcdHRoaXMuX3Rvb2x0aXAuc2V0Q29udGVudChjb250ZW50KTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFRvb2x0aXAoKTogVG9vbHRpcFxuICBcdC8vIFJldHVybnMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllci5cbiAgXHRnZXRUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fdG9vbHRpcDtcbiAgXHR9LFxuXG4gIFx0X2FkZEZvY3VzTGlzdGVuZXJzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5nZXRFbGVtZW50KSB7XG4gIFx0XHRcdHRoaXMuX2FkZEZvY3VzTGlzdGVuZXJzT25MYXllcih0aGlzKTtcbiAgXHRcdH0gZWxzZSBpZiAodGhpcy5lYWNoTGF5ZXIpIHtcbiAgXHRcdFx0dGhpcy5lYWNoTGF5ZXIodGhpcy5fYWRkRm9jdXNMaXN0ZW5lcnNPbkxheWVyLCB0aGlzKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZEZvY3VzTGlzdGVuZXJzT25MYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgZWwgPSBsYXllci5nZXRFbGVtZW50KCk7XG4gIFx0XHRpZiAoZWwpIHtcbiAgXHRcdFx0b24oZWwsICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHR0aGlzLl90b29sdGlwLl9zb3VyY2UgPSBsYXllcjtcbiAgXHRcdFx0XHR0aGlzLm9wZW5Ub29sdGlwKCk7XG4gIFx0XHRcdH0sIHRoaXMpO1xuICBcdFx0XHRvbihlbCwgJ2JsdXInLCB0aGlzLmNsb3NlVG9vbHRpcCwgdGhpcyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBlbCA9IGxheWVyLmdldEVsZW1lbnQoKTtcbiAgXHRcdGlmIChlbCkge1xuICBcdFx0XHRlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aGlzLl90b29sdGlwLl9jb250YWluZXIuaWQpO1xuICBcdFx0fVxuICBcdH0sXG5cblxuICBcdF9vcGVuVG9vbHRpcDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICghdGhpcy5fdG9vbHRpcCB8fCAhdGhpcy5fbWFwIHx8ICh0aGlzLl9tYXAuZHJhZ2dpbmcgJiYgdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmluZygpKSkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl90b29sdGlwLl9zb3VyY2UgPSBlLmxheWVyIHx8IGUudGFyZ2V0O1xuXG4gIFx0XHR0aGlzLm9wZW5Ub29sdGlwKHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3kgPyBlLmxhdGxuZyA6IHVuZGVmaW5lZCk7XG4gIFx0fSxcblxuICBcdF9tb3ZlVG9vbHRpcDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBsYXRsbmcgPSBlLmxhdGxuZywgY29udGFpbmVyUG9pbnQsIGxheWVyUG9pbnQ7XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSAmJiBlLm9yaWdpbmFsRXZlbnQpIHtcbiAgXHRcdFx0Y29udGFpbmVyUG9pbnQgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZS5vcmlnaW5hbEV2ZW50KTtcbiAgXHRcdFx0bGF5ZXJQb2ludCA9IHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChjb250YWluZXJQb2ludCk7XG4gIFx0XHRcdGxhdGxuZyA9IHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcobGF5ZXJQb2ludCk7XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl90b29sdGlwLnNldExhdExuZyhsYXRsbmcpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIERpdkljb25cbiAgICogQGFrYSBMLkRpdkljb25cbiAgICogQGluaGVyaXRzIEljb25cbiAgICpcbiAgICogUmVwcmVzZW50cyBhIGxpZ2h0d2VpZ2h0IGljb24gZm9yIG1hcmtlcnMgdGhhdCB1c2VzIGEgc2ltcGxlIGA8ZGl2PmBcbiAgICogZWxlbWVudCBpbnN0ZWFkIG9mIGFuIGltYWdlLiBJbmhlcml0cyBmcm9tIGBJY29uYCBidXQgaWdub3JlcyB0aGUgYGljb25VcmxgIGFuZCBzaGFkb3cgb3B0aW9ucy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIG15SWNvbiA9IEwuZGl2SWNvbih7Y2xhc3NOYW1lOiAnbXktZGl2LWljb24nfSk7XG4gICAqIC8vIHlvdSBjYW4gc2V0IC5teS1kaXYtaWNvbiBzdHlsZXMgaW4gQ1NTXG4gICAqXG4gICAqIEwubWFya2VyKFs1MC41MDUsIDMwLjU3XSwge2ljb246IG15SWNvbn0pLmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCBoYXMgYSAnbGVhZmxldC1kaXYtaWNvbicgQ1NTIGNsYXNzIGFuZCBpcyBzdHlsZWQgYXMgYSBsaXR0bGUgd2hpdGUgc3F1YXJlIHdpdGggYSBzaGFkb3cuXG4gICAqL1xuXG4gIHZhciBEaXZJY29uID0gSWNvbi5leHRlbmQoe1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBzZWN0aW9uXG4gIFx0XHQvLyBAYWthIERpdkljb24gb3B0aW9uc1xuICBcdFx0aWNvblNpemU6IFsxMiwgMTJdLCAvLyBhbHNvIGNhbiBiZSBzZXQgdGhyb3VnaCBDU1NcblxuICBcdFx0Ly8gaWNvbkFuY2hvcjogKFBvaW50KSxcbiAgXHRcdC8vIHBvcHVwQW5jaG9yOiAoUG9pbnQpLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGh0bWw6IFN0cmluZ3xIVE1MRWxlbWVudCA9ICcnXG4gIFx0XHQvLyBDdXN0b20gSFRNTCBjb2RlIHRvIHB1dCBpbnNpZGUgdGhlIGRpdiBlbGVtZW50LCBlbXB0eSBieSBkZWZhdWx0LiBBbHRlcm5hdGl2ZWx5LFxuICBcdFx0Ly8gYW4gaW5zdGFuY2Ugb2YgYEhUTUxFbGVtZW50YC5cbiAgXHRcdGh0bWw6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGJnUG9zOiBQb2ludCA9IFswLCAwXVxuICBcdFx0Ly8gT3B0aW9uYWwgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGJhY2tncm91bmQsIGluIHBpeGVsc1xuICBcdFx0YmdQb3M6IG51bGwsXG5cbiAgXHRcdGNsYXNzTmFtZTogJ2xlYWZsZXQtZGl2LWljb24nXG4gIFx0fSxcblxuICBcdGNyZWF0ZUljb246IGZ1bmN0aW9uIChvbGRJY29uKSB7XG4gIFx0XHR2YXIgZGl2ID0gKG9sZEljb24gJiYgb2xkSWNvbi50YWdOYW1lID09PSAnRElWJykgPyBvbGRJY29uIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksXG4gIFx0XHQgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICBcdFx0aWYgKG9wdGlvbnMuaHRtbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgXHRcdFx0ZW1wdHkoZGl2KTtcbiAgXHRcdFx0ZGl2LmFwcGVuZENoaWxkKG9wdGlvbnMuaHRtbCk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRkaXYuaW5uZXJIVE1MID0gb3B0aW9ucy5odG1sICE9PSBmYWxzZSA/IG9wdGlvbnMuaHRtbCA6ICcnO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAob3B0aW9ucy5iZ1Bvcykge1xuICBcdFx0XHR2YXIgYmdQb3MgPSB0b1BvaW50KG9wdGlvbnMuYmdQb3MpO1xuICBcdFx0XHRkaXYuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uID0gKC1iZ1Bvcy54KSArICdweCAnICsgKC1iZ1Bvcy55KSArICdweCc7XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl9zZXRJY29uU3R5bGVzKGRpdiwgJ2ljb24nKTtcblxuICBcdFx0cmV0dXJuIGRpdjtcbiAgXHR9LFxuXG4gIFx0Y3JlYXRlU2hhZG93OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gbnVsbDtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBmYWN0b3J5IEwuZGl2SWNvbihvcHRpb25zOiBEaXZJY29uIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYSBgRGl2SWNvbmAgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgZnVuY3Rpb24gZGl2SWNvbihvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBEaXZJY29uKG9wdGlvbnMpO1xuICB9XG5cbiAgSWNvbi5EZWZhdWx0ID0gSWNvbkRlZmF1bHQ7XG5cbiAgLypcbiAgICogQGNsYXNzIEdyaWRMYXllclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJcbiAgICogQGFrYSBMLkdyaWRMYXllclxuICAgKlxuICAgKiBHZW5lcmljIGNsYXNzIGZvciBoYW5kbGluZyBhIHRpbGVkIGdyaWQgb2YgSFRNTCBlbGVtZW50cy4gVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRpbGUgbGF5ZXJzIGFuZCByZXBsYWNlcyBgVGlsZUxheWVyLkNhbnZhc2AuXG4gICAqIEdyaWRMYXllciBjYW4gYmUgZXh0ZW5kZWQgdG8gY3JlYXRlIGEgdGlsZWQgZ3JpZCBvZiBIVE1MIGVsZW1lbnRzIGxpa2UgYDxjYW52YXM+YCwgYDxpbWc+YCBvciBgPGRpdj5gLiBHcmlkTGF5ZXIgd2lsbCBoYW5kbGUgY3JlYXRpbmcgYW5kIGFuaW1hdGluZyB0aGVzZSBET00gZWxlbWVudHMgZm9yIHlvdS5cbiAgICpcbiAgICpcbiAgICogQHNlY3Rpb24gU3luY2hyb25vdXMgdXNhZ2VcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVG8gY3JlYXRlIGEgY3VzdG9tIGxheWVyLCBleHRlbmQgR3JpZExheWVyIGFuZCBpbXBsZW1lbnQgdGhlIGBjcmVhdGVUaWxlKClgIG1ldGhvZCwgd2hpY2ggd2lsbCBiZSBwYXNzZWQgYSBgUG9pbnRgIG9iamVjdCB3aXRoIHRoZSBgeGAsIGB5YCwgYW5kIGB6YCAoem9vbSBsZXZlbCkgY29vcmRpbmF0ZXMgdG8gZHJhdyB5b3VyIHRpbGUuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBDYW52YXNMYXllciA9IEwuR3JpZExheWVyLmV4dGVuZCh7XG4gICAqICAgICBjcmVhdGVUaWxlOiBmdW5jdGlvbihjb29yZHMpe1xuICAgKiAgICAgICAgIC8vIGNyZWF0ZSBhIDxjYW52YXM+IGVsZW1lbnQgZm9yIGRyYXdpbmdcbiAgICogICAgICAgICB2YXIgdGlsZSA9IEwuRG9tVXRpbC5jcmVhdGUoJ2NhbnZhcycsICdsZWFmbGV0LXRpbGUnKTtcbiAgICpcbiAgICogICAgICAgICAvLyBzZXR1cCB0aWxlIHdpZHRoIGFuZCBoZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zXG4gICAqICAgICAgICAgdmFyIHNpemUgPSB0aGlzLmdldFRpbGVTaXplKCk7XG4gICAqICAgICAgICAgdGlsZS53aWR0aCA9IHNpemUueDtcbiAgICogICAgICAgICB0aWxlLmhlaWdodCA9IHNpemUueTtcbiAgICpcbiAgICogICAgICAgICAvLyBnZXQgYSBjYW52YXMgY29udGV4dCBhbmQgZHJhdyBzb21ldGhpbmcgb24gaXQgdXNpbmcgY29vcmRzLngsIGNvb3Jkcy55IGFuZCBjb29yZHMuelxuICAgKiAgICAgICAgIHZhciBjdHggPSB0aWxlLmdldENvbnRleHQoJzJkJyk7XG4gICAqXG4gICAqICAgICAgICAgLy8gcmV0dXJuIHRoZSB0aWxlIHNvIGl0IGNhbiBiZSByZW5kZXJlZCBvbiBzY3JlZW5cbiAgICogICAgICAgICByZXR1cm4gdGlsZTtcbiAgICogICAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2VjdGlvbiBBc3luY2hyb25vdXMgdXNhZ2VcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVGlsZSBjcmVhdGlvbiBjYW4gYWxzbyBiZSBhc3luY2hyb25vdXMsIHRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgYSB0aGlyZC1wYXJ0eSBkcmF3aW5nIGxpYnJhcnkuIE9uY2UgdGhlIHRpbGUgaXMgZmluaXNoZWQgZHJhd2luZyBpdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgZG9uZSgpYCBjYWxsYmFjay5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIENhbnZhc0xheWVyID0gTC5HcmlkTGF5ZXIuZXh0ZW5kKHtcbiAgICogICAgIGNyZWF0ZVRpbGU6IGZ1bmN0aW9uKGNvb3JkcywgZG9uZSl7XG4gICAqICAgICAgICAgdmFyIGVycm9yO1xuICAgKlxuICAgKiAgICAgICAgIC8vIGNyZWF0ZSBhIDxjYW52YXM+IGVsZW1lbnQgZm9yIGRyYXdpbmdcbiAgICogICAgICAgICB2YXIgdGlsZSA9IEwuRG9tVXRpbC5jcmVhdGUoJ2NhbnZhcycsICdsZWFmbGV0LXRpbGUnKTtcbiAgICpcbiAgICogICAgICAgICAvLyBzZXR1cCB0aWxlIHdpZHRoIGFuZCBoZWlnaHQgYWNjb3JkaW5nIHRvIHRoZSBvcHRpb25zXG4gICAqICAgICAgICAgdmFyIHNpemUgPSB0aGlzLmdldFRpbGVTaXplKCk7XG4gICAqICAgICAgICAgdGlsZS53aWR0aCA9IHNpemUueDtcbiAgICogICAgICAgICB0aWxlLmhlaWdodCA9IHNpemUueTtcbiAgICpcbiAgICogICAgICAgICAvLyBkcmF3IHNvbWV0aGluZyBhc3luY2hyb25vdXNseSBhbmQgcGFzcyB0aGUgdGlsZSB0byB0aGUgZG9uZSgpIGNhbGxiYWNrXG4gICAqICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICogICAgICAgICAgICAgZG9uZShlcnJvciwgdGlsZSk7XG4gICAqICAgICAgICAgfSwgMTAwMCk7XG4gICAqXG4gICAqICAgICAgICAgcmV0dXJuIHRpbGU7XG4gICAqICAgICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHNlY3Rpb25cbiAgICovXG5cblxuICB2YXIgR3JpZExheWVyID0gTGF5ZXIuZXh0ZW5kKHtcblxuICBcdC8vIEBzZWN0aW9uXG4gIFx0Ly8gQGFrYSBHcmlkTGF5ZXIgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gdGlsZVNpemU6IE51bWJlcnxQb2ludCA9IDI1NlxuICBcdFx0Ly8gV2lkdGggYW5kIGhlaWdodCBvZiB0aWxlcyBpbiB0aGUgZ3JpZC4gVXNlIGEgbnVtYmVyIGlmIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGVxdWFsLCBvciBgTC5wb2ludCh3aWR0aCwgaGVpZ2h0KWAgb3RoZXJ3aXNlLlxuICBcdFx0dGlsZVNpemU6IDI1NixcblxuICBcdFx0Ly8gQG9wdGlvbiBvcGFjaXR5OiBOdW1iZXIgPSAxLjBcbiAgXHRcdC8vIE9wYWNpdHkgb2YgdGhlIHRpbGVzLiBDYW4gYmUgdXNlZCBpbiB0aGUgYGNyZWF0ZVRpbGUoKWAgZnVuY3Rpb24uXG4gIFx0XHRvcGFjaXR5OiAxLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHVwZGF0ZVdoZW5JZGxlOiBCb29sZWFuID0gKGRlcGVuZHMpXG4gIFx0XHQvLyBMb2FkIG5ldyB0aWxlcyBvbmx5IHdoZW4gcGFubmluZyBlbmRzLlxuICBcdFx0Ly8gYHRydWVgIGJ5IGRlZmF1bHQgb24gbW9iaWxlIGJyb3dzZXJzLCBpbiBvcmRlciB0byBhdm9pZCB0b28gbWFueSByZXF1ZXN0cyBhbmQga2VlcCBzbW9vdGggbmF2aWdhdGlvbi5cbiAgXHRcdC8vIGBmYWxzZWAgb3RoZXJ3aXNlIGluIG9yZGVyIHRvIGRpc3BsYXkgbmV3IHRpbGVzIF9kdXJpbmdfIHBhbm5pbmcsIHNpbmNlIGl0IGlzIGVhc3kgdG8gcGFuIG91dHNpZGUgdGhlXG4gIFx0XHQvLyBbYGtlZXBCdWZmZXJgXSgjZ3JpZGxheWVyLWtlZXBidWZmZXIpIG9wdGlvbiBpbiBkZXNrdG9wIGJyb3dzZXJzLlxuICBcdFx0dXBkYXRlV2hlbklkbGU6IEJyb3dzZXIubW9iaWxlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHVwZGF0ZVdoZW5ab29taW5nOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgYSBzbW9vdGggem9vbSBhbmltYXRpb24gKGR1cmluZyBhIFt0b3VjaCB6b29tXSgjbWFwLXRvdWNoem9vbSkgb3IgYSBbYGZseVRvKClgXSgjbWFwLWZseXRvKSkgd2lsbCB1cGRhdGUgZ3JpZCBsYXllcnMgZXZlcnkgaW50ZWdlciB6b29tIGxldmVsLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgd2lsbCB1cGRhdGUgdGhlIGdyaWQgbGF5ZXIgb25seSB3aGVuIHRoZSBzbW9vdGggYW5pbWF0aW9uIGVuZHMuXG4gIFx0XHR1cGRhdGVXaGVuWm9vbWluZzogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiB1cGRhdGVJbnRlcnZhbDogTnVtYmVyID0gMjAwXG4gIFx0XHQvLyBUaWxlcyB3aWxsIG5vdCB1cGRhdGUgbW9yZSB0aGFuIG9uY2UgZXZlcnkgYHVwZGF0ZUludGVydmFsYCBtaWxsaXNlY29uZHMgd2hlbiBwYW5uaW5nLlxuICBcdFx0dXBkYXRlSW50ZXJ2YWw6IDIwMCxcblxuICBcdFx0Ly8gQG9wdGlvbiB6SW5kZXg6IE51bWJlciA9IDFcbiAgXHRcdC8vIFRoZSBleHBsaWNpdCB6SW5kZXggb2YgdGhlIHRpbGUgbGF5ZXIuXG4gIFx0XHR6SW5kZXg6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gYm91bmRzOiBMYXRMbmdCb3VuZHMgPSB1bmRlZmluZWRcbiAgXHRcdC8vIElmIHNldCwgdGlsZXMgd2lsbCBvbmx5IGJlIGxvYWRlZCBpbnNpZGUgdGhlIHNldCBgTGF0TG5nQm91bmRzYC5cbiAgXHRcdGJvdW5kczogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAwXG4gIFx0XHQvLyBUaGUgbWluaW11bSB6b29tIGxldmVsIGRvd24gdG8gd2hpY2ggdGhpcyBsYXllciB3aWxsIGJlIGRpc3BsYXllZCAoaW5jbHVzaXZlKS5cbiAgXHRcdG1pblpvb206IDAsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4Wm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBUaGUgbWF4aW11bSB6b29tIGxldmVsIHVwIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXG4gIFx0XHRtYXhab29tOiB1bmRlZmluZWQsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4TmF0aXZlWm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBNYXhpbXVtIHpvb20gbnVtYmVyIHRoZSB0aWxlIHNvdXJjZSBoYXMgYXZhaWxhYmxlLiBJZiBpdCBpcyBzcGVjaWZpZWQsXG4gIFx0XHQvLyB0aGUgdGlsZXMgb24gYWxsIHpvb20gbGV2ZWxzIGhpZ2hlciB0aGFuIGBtYXhOYXRpdmVab29tYCB3aWxsIGJlIGxvYWRlZFxuICBcdFx0Ly8gZnJvbSBgbWF4TmF0aXZlWm9vbWAgbGV2ZWwgYW5kIGF1dG8tc2NhbGVkLlxuICBcdFx0bWF4TmF0aXZlWm9vbTogdW5kZWZpbmVkLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG1pbk5hdGl2ZVpvb206IE51bWJlciA9IHVuZGVmaW5lZFxuICBcdFx0Ly8gTWluaW11bSB6b29tIG51bWJlciB0aGUgdGlsZSBzb3VyY2UgaGFzIGF2YWlsYWJsZS4gSWYgaXQgaXMgc3BlY2lmaWVkLFxuICBcdFx0Ly8gdGhlIHRpbGVzIG9uIGFsbCB6b29tIGxldmVscyBsb3dlciB0aGFuIGBtaW5OYXRpdmVab29tYCB3aWxsIGJlIGxvYWRlZFxuICBcdFx0Ly8gZnJvbSBgbWluTmF0aXZlWm9vbWAgbGV2ZWwgYW5kIGF1dG8tc2NhbGVkLlxuICBcdFx0bWluTmF0aXZlWm9vbTogdW5kZWZpbmVkLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG5vV3JhcDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBsYXllciBpcyB3cmFwcGVkIGFyb3VuZCB0aGUgYW50aW1lcmlkaWFuLiBJZiBgdHJ1ZWAsIHRoZVxuICBcdFx0Ly8gR3JpZExheWVyIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgb25jZSBhdCBsb3cgem9vbSBsZXZlbHMuIEhhcyBub1xuICBcdFx0Ly8gZWZmZWN0IHdoZW4gdGhlIFttYXAgQ1JTXSgjbWFwLWNycykgZG9lc24ndCB3cmFwIGFyb3VuZC4gQ2FuIGJlIHVzZWRcbiAgXHRcdC8vIGluIGNvbWJpbmF0aW9uIHdpdGggW2Bib3VuZHNgXSgjZ3JpZGxheWVyLWJvdW5kcykgdG8gcHJldmVudCByZXF1ZXN0aW5nXG4gIFx0XHQvLyB0aWxlcyBvdXRzaWRlIHRoZSBDUlMgbGltaXRzLlxuICBcdFx0bm9XcmFwOiBmYWxzZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAndGlsZVBhbmUnXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSBncmlkIGxheWVyIHdpbGwgYmUgYWRkZWQuXG4gIFx0XHRwYW5lOiAndGlsZVBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcbiAgXHRcdC8vIEEgY3VzdG9tIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSB0aWxlIGxheWVyLiBFbXB0eSBieSBkZWZhdWx0LlxuICBcdFx0Y2xhc3NOYW1lOiAnJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBrZWVwQnVmZmVyOiBOdW1iZXIgPSAyXG4gIFx0XHQvLyBXaGVuIHBhbm5pbmcgdGhlIG1hcCwga2VlcCB0aGlzIG1hbnkgcm93cyBhbmQgY29sdW1ucyBvZiB0aWxlcyBiZWZvcmUgdW5sb2FkaW5nIHRoZW0uXG4gIFx0XHRrZWVwQnVmZmVyOiAyXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5faW5pdENvbnRhaW5lcigpO1xuXG4gIFx0XHR0aGlzLl9sZXZlbHMgPSB7fTtcbiAgXHRcdHRoaXMuX3RpbGVzID0ge307XG5cbiAgXHRcdHRoaXMuX3Jlc2V0VmlldygpOyAvLyBpbXBsaWNpdCBfdXBkYXRlKCkgY2FsbFxuICBcdH0sXG5cbiAgXHRiZWZvcmVBZGQ6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdG1hcC5fYWRkWm9vbUxpbWl0KHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKTtcbiAgXHRcdHJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICBcdFx0bWFwLl9yZW1vdmVab29tTGltaXQodGhpcyk7XG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBudWxsO1xuICBcdFx0dGhpcy5fdGlsZVpvb20gPSB1bmRlZmluZWQ7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0Zyb250OiB0aGlzXG4gIFx0Ly8gQnJpbmdzIHRoZSB0aWxlIGxheWVyIHRvIHRoZSB0b3Agb2YgYWxsIHRpbGUgbGF5ZXJzLlxuICBcdGJyaW5nVG9Gcm9udDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0b0Zyb250KHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRcdHRoaXMuX3NldEF1dG9aSW5kZXgoTWF0aC5tYXgpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2s6IHRoaXNcbiAgXHQvLyBCcmluZ3MgdGhlIHRpbGUgbGF5ZXIgdG8gdGhlIGJvdHRvbSBvZiBhbGwgdGlsZSBsYXllcnMuXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcbiAgXHRcdFx0dG9CYWNrKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRcdHRoaXMuX3NldEF1dG9aSW5kZXgoTWF0aC5taW4pO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudFxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSB0aWxlcyBmb3IgdGhpcyBsYXllci5cbiAgXHRnZXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0T3BhY2l0eShvcGFjaXR5OiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgW29wYWNpdHldKCNncmlkbGF5ZXItb3BhY2l0eSkgb2YgdGhlIGdyaWQgbGF5ZXIuXG4gIFx0c2V0T3BhY2l0eTogZnVuY3Rpb24gKG9wYWNpdHkpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgXHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFpJbmRleCh6SW5kZXg6IE51bWJlcik6IHRoaXNcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbekluZGV4XSgjZ3JpZGxheWVyLXppbmRleCkgb2YgdGhlIGdyaWQgbGF5ZXIuXG4gIFx0c2V0WkluZGV4OiBmdW5jdGlvbiAoekluZGV4KSB7XG4gIFx0XHR0aGlzLm9wdGlvbnMuekluZGV4ID0gekluZGV4O1xuICBcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGlzTG9hZGluZzogQm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIGFueSB0aWxlIGluIHRoZSBncmlkIGxheWVyIGhhcyBub3QgZmluaXNoZWQgbG9hZGluZy5cbiAgXHRpc0xvYWRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHJlZHJhdzogdGhpc1xuICBcdC8vIENhdXNlcyB0aGUgbGF5ZXIgdG8gY2xlYXIgYWxsIHRoZSB0aWxlcyBhbmQgcmVxdWVzdCB0aGVtIGFnYWluLlxuICBcdHJlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0aGlzLl9yZW1vdmVBbGxUaWxlcygpO1xuICBcdFx0XHR2YXIgdGlsZVpvb20gPSB0aGlzLl9jbGFtcFpvb20odGhpcy5fbWFwLmdldFpvb20oKSk7XG4gIFx0XHRcdGlmICh0aWxlWm9vbSAhPT0gdGhpcy5fdGlsZVpvb20pIHtcbiAgXHRcdFx0XHR0aGlzLl90aWxlWm9vbSA9IHRpbGVab29tO1xuICBcdFx0XHRcdHRoaXMuX3VwZGF0ZUxldmVscygpO1xuICBcdFx0XHR9XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IHtcbiAgXHRcdFx0dmlld3ByZXJlc2V0OiB0aGlzLl9pbnZhbGlkYXRlQWxsLFxuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0VmlldyxcbiAgXHRcdFx0em9vbTogdGhpcy5fcmVzZXRWaWV3LFxuICBcdFx0XHRtb3ZlZW5kOiB0aGlzLl9vbk1vdmVFbmRcbiAgXHRcdH07XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlKSB7XG4gIFx0XHRcdC8vIHVwZGF0ZSB0aWxlcyBvbiBtb3ZlLCBidXQgbm90IG1vcmUgb2Z0ZW4gdGhhbiBvbmNlIHBlciBnaXZlbiBpbnRlcnZhbFxuICBcdFx0XHRpZiAoIXRoaXMuX29uTW92ZSkge1xuICBcdFx0XHRcdHRoaXMuX29uTW92ZSA9IHRocm90dGxlKHRoaXMuX29uTW92ZUVuZCwgdGhpcy5vcHRpb25zLnVwZGF0ZUludGVydmFsLCB0aGlzKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGV2ZW50cy5tb3ZlID0gdGhpcy5fb25Nb3ZlO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xuICBcdH0sXG5cbiAgXHQvLyBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xuICBcdC8vIExheWVycyBleHRlbmRpbmcgYEdyaWRMYXllcmAgc2hhbGwgcmVpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gIFx0Ly8gQG1ldGhvZCBjcmVhdGVUaWxlKGNvb3JkczogT2JqZWN0LCBkb25lPzogRnVuY3Rpb24pOiBIVE1MRWxlbWVudFxuICBcdC8vIENhbGxlZCBvbmx5IGludGVybmFsbHksIG11c3QgYmUgb3ZlcnJpZGRlbiBieSBjbGFzc2VzIGV4dGVuZGluZyBgR3JpZExheWVyYC5cbiAgXHQvLyBSZXR1cm5zIHRoZSBgSFRNTEVsZW1lbnRgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGBjb29yZHNgLiBJZiB0aGUgYGRvbmVgIGNhbGxiYWNrXG4gIFx0Ly8gaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGFuZCBkcmF3aW5nLlxuICBcdGNyZWF0ZVRpbGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAbWV0aG9kIGdldFRpbGVTaXplOiBQb2ludFxuICBcdC8vIE5vcm1hbGl6ZXMgdGhlIFt0aWxlU2l6ZSBvcHRpb25dKCNncmlkbGF5ZXItdGlsZXNpemUpIGludG8gYSBwb2ludC4gVXNlZCBieSB0aGUgYGNyZWF0ZVRpbGUoKWAgbWV0aG9kLlxuICBcdGdldFRpbGVTaXplOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcyA9IHRoaXMub3B0aW9ucy50aWxlU2l6ZTtcbiAgXHRcdHJldHVybiBzIGluc3RhbmNlb2YgUG9pbnQgPyBzIDogbmV3IFBvaW50KHMsIHMpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fY29udGFpbmVyICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuekluZGV4ICE9PSBudWxsKSB7XG4gIFx0XHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXggPSB0aGlzLm9wdGlvbnMuekluZGV4O1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfc2V0QXV0b1pJbmRleDogZnVuY3Rpb24gKGNvbXBhcmUpIHtcbiAgXHRcdC8vIGdvIHRocm91Z2ggYWxsIG90aGVyIGxheWVycyBvZiB0aGUgc2FtZSBwYW5lLCBzZXQgekluZGV4IHRvIG1heCArIDEgKGZyb250KSBvciBtaW4gLSAxIChiYWNrKVxuXG4gIFx0XHR2YXIgbGF5ZXJzID0gdGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sXG4gIFx0XHQgICAgZWRnZVpJbmRleCA9IC1jb21wYXJlKC1JbmZpbml0eSwgSW5maW5pdHkpOyAvLyAtSW5maW5pdHkgZm9yIG1heCwgSW5maW5pdHkgZm9yIG1pblxuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF5ZXJzLmxlbmd0aCwgekluZGV4OyBpIDwgbGVuOyBpKyspIHtcblxuICBcdFx0XHR6SW5kZXggPSBsYXllcnNbaV0uc3R5bGUuekluZGV4O1xuXG4gIFx0XHRcdGlmIChsYXllcnNbaV0gIT09IHRoaXMuX2NvbnRhaW5lciAmJiB6SW5kZXgpIHtcbiAgXHRcdFx0XHRlZGdlWkluZGV4ID0gY29tcGFyZShlZGdlWkluZGV4LCArekluZGV4KTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRpZiAoaXNGaW5pdGUoZWRnZVpJbmRleCkpIHtcbiAgXHRcdFx0dGhpcy5vcHRpb25zLnpJbmRleCA9IGVkZ2VaSW5kZXggKyBjb21wYXJlKC0xLCAxKTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVPcGFjaXR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cblxuICBcdFx0Ly8gSUUgZG9lc24ndCBpbmhlcml0IGZpbHRlciBvcGFjaXR5IHByb3Blcmx5LCBzbyB3ZSdyZSBmb3JjZWQgdG8gc2V0IGl0IG9uIHRpbGVzXG4gIFx0XHRpZiAoQnJvd3Nlci5pZWx0OSkgeyByZXR1cm47IH1cblxuICBcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIHRoaXMub3B0aW9ucy5vcGFjaXR5KTtcblxuICBcdFx0dmFyIG5vdyA9ICtuZXcgRGF0ZSgpLFxuICBcdFx0ICAgIG5leHRGcmFtZSA9IGZhbHNlLFxuICBcdFx0ICAgIHdpbGxQcnVuZSA9IGZhbHNlO1xuXG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dmFyIHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICBcdFx0XHRpZiAoIXRpbGUuY3VycmVudCB8fCAhdGlsZS5sb2FkZWQpIHsgY29udGludWU7IH1cblxuICBcdFx0XHR2YXIgZmFkZSA9IE1hdGgubWluKDEsIChub3cgLSB0aWxlLmxvYWRlZCkgLyAyMDApO1xuXG4gIFx0XHRcdHNldE9wYWNpdHkodGlsZS5lbCwgZmFkZSk7XG4gIFx0XHRcdGlmIChmYWRlIDwgMSkge1xuICBcdFx0XHRcdG5leHRGcmFtZSA9IHRydWU7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0aWYgKHRpbGUuYWN0aXZlKSB7XG4gIFx0XHRcdFx0XHR3aWxsUHJ1bmUgPSB0cnVlO1xuICBcdFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0XHR0aGlzLl9vbk9wYXF1ZVRpbGUodGlsZSk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHRcdHRpbGUuYWN0aXZlID0gdHJ1ZTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRpZiAod2lsbFBydW5lICYmICF0aGlzLl9ub1BydW5lKSB7IHRoaXMuX3BydW5lVGlsZXMoKTsgfVxuXG4gIFx0XHRpZiAobmV4dEZyYW1lKSB7XG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9mYWRlRnJhbWUpO1xuICBcdFx0XHR0aGlzLl9mYWRlRnJhbWUgPSByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZU9wYWNpdHksIHRoaXMpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25PcGFxdWVUaWxlOiBmYWxzZUZuLFxuXG4gIFx0X2luaXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXIpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCAnbGVhZmxldC1sYXllciAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZVpJbmRleCgpO1xuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm9wYWNpdHkgPCAxKSB7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUxldmVsczogZnVuY3Rpb24gKCkge1xuXG4gIFx0XHR2YXIgem9vbSA9IHRoaXMuX3RpbGVab29tLFxuICBcdFx0ICAgIG1heFpvb20gPSB0aGlzLm9wdGlvbnMubWF4Wm9vbTtcblxuICBcdFx0aWYgKHpvb20gPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG5cbiAgXHRcdGZvciAodmFyIHogaW4gdGhpcy5fbGV2ZWxzKSB7XG4gIFx0XHRcdHogPSBOdW1iZXIoeik7XG4gIFx0XHRcdGlmICh0aGlzLl9sZXZlbHNbel0uZWwuY2hpbGRyZW4ubGVuZ3RoIHx8IHogPT09IHpvb20pIHtcbiAgXHRcdFx0XHR0aGlzLl9sZXZlbHNbel0uZWwuc3R5bGUuekluZGV4ID0gbWF4Wm9vbSAtIE1hdGguYWJzKHpvb20gLSB6KTtcbiAgXHRcdFx0XHR0aGlzLl9vblVwZGF0ZUxldmVsKHopO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdHJlbW92ZSh0aGlzLl9sZXZlbHNbel0uZWwpO1xuICBcdFx0XHRcdHRoaXMuX3JlbW92ZVRpbGVzQXRab29tKHopO1xuICBcdFx0XHRcdHRoaXMuX29uUmVtb3ZlTGV2ZWwoeik7XG4gIFx0XHRcdFx0ZGVsZXRlIHRoaXMuX2xldmVsc1t6XTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR2YXIgbGV2ZWwgPSB0aGlzLl9sZXZlbHNbem9vbV0sXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwO1xuXG4gIFx0XHRpZiAoIWxldmVsKSB7XG4gIFx0XHRcdGxldmVsID0gdGhpcy5fbGV2ZWxzW3pvb21dID0ge307XG5cbiAgXHRcdFx0bGV2ZWwuZWwgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtdGlsZS1jb250YWluZXIgbGVhZmxldC16b29tLWFuaW1hdGVkJywgdGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0bGV2ZWwuZWwuc3R5bGUuekluZGV4ID0gbWF4Wm9vbTtcblxuICBcdFx0XHRsZXZlbC5vcmlnaW4gPSBtYXAucHJvamVjdChtYXAudW5wcm9qZWN0KG1hcC5nZXRQaXhlbE9yaWdpbigpKSwgem9vbSkucm91bmQoKTtcbiAgXHRcdFx0bGV2ZWwuem9vbSA9IHpvb207XG5cbiAgXHRcdFx0dGhpcy5fc2V0Wm9vbVRyYW5zZm9ybShsZXZlbCwgbWFwLmdldENlbnRlcigpLCBtYXAuZ2V0Wm9vbSgpKTtcblxuICBcdFx0XHQvLyBmb3JjZSB0aGUgYnJvd3NlciB0byBjb25zaWRlciB0aGUgbmV3bHkgYWRkZWQgZWxlbWVudCBmb3IgdHJhbnNpdGlvblxuICBcdFx0XHRmYWxzZUZuKGxldmVsLmVsLm9mZnNldFdpZHRoKTtcblxuICBcdFx0XHR0aGlzLl9vbkNyZWF0ZUxldmVsKGxldmVsKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fbGV2ZWwgPSBsZXZlbDtcblxuICBcdFx0cmV0dXJuIGxldmVsO1xuICBcdH0sXG5cbiAgXHRfb25VcGRhdGVMZXZlbDogZmFsc2VGbixcblxuICBcdF9vblJlbW92ZUxldmVsOiBmYWxzZUZuLFxuXG4gIFx0X29uQ3JlYXRlTGV2ZWw6IGZhbHNlRm4sXG5cbiAgXHRfcHJ1bmVUaWxlczogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9tYXApIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIga2V5LCB0aWxlO1xuXG4gIFx0XHR2YXIgem9vbSA9IHRoaXMuX21hcC5nZXRab29tKCk7XG4gIFx0XHRpZiAoem9vbSA+IHRoaXMub3B0aW9ucy5tYXhab29tIHx8XG4gIFx0XHRcdHpvb20gPCB0aGlzLm9wdGlvbnMubWluWm9vbSkge1xuICBcdFx0XHR0aGlzLl9yZW1vdmVBbGxUaWxlcygpO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAoa2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICBcdFx0XHR0aWxlLnJldGFpbiA9IHRpbGUuY3VycmVudDtcbiAgXHRcdH1cblxuICBcdFx0Zm9yIChrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRcdGlmICh0aWxlLmN1cnJlbnQgJiYgIXRpbGUuYWN0aXZlKSB7XG4gIFx0XHRcdFx0dmFyIGNvb3JkcyA9IHRpbGUuY29vcmRzO1xuICBcdFx0XHRcdGlmICghdGhpcy5fcmV0YWluUGFyZW50KGNvb3Jkcy54LCBjb29yZHMueSwgY29vcmRzLnosIGNvb3Jkcy56IC0gNSkpIHtcbiAgXHRcdFx0XHRcdHRoaXMuX3JldGFpbkNoaWxkcmVuKGNvb3Jkcy54LCBjb29yZHMueSwgY29vcmRzLnosIGNvb3Jkcy56ICsgMik7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAoa2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdGlmICghdGhpcy5fdGlsZXNba2V5XS5yZXRhaW4pIHtcbiAgXHRcdFx0XHR0aGlzLl9yZW1vdmVUaWxlKGtleSk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlbW92ZVRpbGVzQXRab29tOiBmdW5jdGlvbiAoem9vbSkge1xuICBcdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdGlmICh0aGlzLl90aWxlc1trZXldLmNvb3Jkcy56ICE9PSB6b29tKSB7XG4gIFx0XHRcdFx0Y29udGludWU7XG4gIFx0XHRcdH1cbiAgXHRcdFx0dGhpcy5fcmVtb3ZlVGlsZShrZXkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVtb3ZlQWxsVGlsZXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHR0aGlzLl9yZW1vdmVUaWxlKGtleSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pbnZhbGlkYXRlQWxsOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRmb3IgKHZhciB6IGluIHRoaXMuX2xldmVscykge1xuICBcdFx0XHRyZW1vdmUodGhpcy5fbGV2ZWxzW3pdLmVsKTtcbiAgXHRcdFx0dGhpcy5fb25SZW1vdmVMZXZlbChOdW1iZXIoeikpO1xuICBcdFx0XHRkZWxldGUgdGhpcy5fbGV2ZWxzW3pdO1xuICBcdFx0fVxuICBcdFx0dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKTtcblxuICBcdFx0dGhpcy5fdGlsZVpvb20gPSB1bmRlZmluZWQ7XG4gIFx0fSxcblxuICBcdF9yZXRhaW5QYXJlbnQ6IGZ1bmN0aW9uICh4LCB5LCB6LCBtaW5ab29tKSB7XG4gIFx0XHR2YXIgeDIgPSBNYXRoLmZsb29yKHggLyAyKSxcbiAgXHRcdCAgICB5MiA9IE1hdGguZmxvb3IoeSAvIDIpLFxuICBcdFx0ICAgIHoyID0geiAtIDEsXG4gIFx0XHQgICAgY29vcmRzMiA9IG5ldyBQb2ludCgreDIsICt5Mik7XG4gIFx0XHRjb29yZHMyLnogPSArejI7XG5cbiAgXHRcdHZhciBrZXkgPSB0aGlzLl90aWxlQ29vcmRzVG9LZXkoY29vcmRzMiksXG4gIFx0XHQgICAgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG5cbiAgXHRcdGlmICh0aWxlICYmIHRpbGUuYWN0aXZlKSB7XG4gIFx0XHRcdHRpbGUucmV0YWluID0gdHJ1ZTtcbiAgXHRcdFx0cmV0dXJuIHRydWU7XG5cbiAgXHRcdH0gZWxzZSBpZiAodGlsZSAmJiB0aWxlLmxvYWRlZCkge1xuICBcdFx0XHR0aWxlLnJldGFpbiA9IHRydWU7XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh6MiA+IG1pblpvb20pIHtcbiAgXHRcdFx0cmV0dXJuIHRoaXMuX3JldGFpblBhcmVudCh4MiwgeTIsIHoyLCBtaW5ab29tKTtcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIGZhbHNlO1xuICBcdH0sXG5cbiAgXHRfcmV0YWluQ2hpbGRyZW46IGZ1bmN0aW9uICh4LCB5LCB6LCBtYXhab29tKSB7XG5cbiAgXHRcdGZvciAodmFyIGkgPSAyICogeDsgaSA8IDIgKiB4ICsgMjsgaSsrKSB7XG4gIFx0XHRcdGZvciAodmFyIGogPSAyICogeTsgaiA8IDIgKiB5ICsgMjsgaisrKSB7XG5cbiAgXHRcdFx0XHR2YXIgY29vcmRzID0gbmV3IFBvaW50KGksIGopO1xuICBcdFx0XHRcdGNvb3Jkcy56ID0geiArIDE7XG5cbiAgXHRcdFx0XHR2YXIga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3JkcyksXG4gIFx0XHRcdFx0ICAgIHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuXG4gIFx0XHRcdFx0aWYgKHRpbGUgJiYgdGlsZS5hY3RpdmUpIHtcbiAgXHRcdFx0XHRcdHRpbGUucmV0YWluID0gdHJ1ZTtcbiAgXHRcdFx0XHRcdGNvbnRpbnVlO1xuXG4gIFx0XHRcdFx0fSBlbHNlIGlmICh0aWxlICYmIHRpbGUubG9hZGVkKSB7XG4gIFx0XHRcdFx0XHR0aWxlLnJldGFpbiA9IHRydWU7XG4gIFx0XHRcdFx0fVxuXG4gIFx0XHRcdFx0aWYgKHogKyAxIDwgbWF4Wm9vbSkge1xuICBcdFx0XHRcdFx0dGhpcy5fcmV0YWluQ2hpbGRyZW4oaSwgaiwgeiArIDEsIG1heFpvb20pO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVzZXRWaWV3OiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGFuaW1hdGluZyA9IGUgJiYgKGUucGluY2ggfHwgZS5mbHlUbyk7XG4gIFx0XHR0aGlzLl9zZXRWaWV3KHRoaXMuX21hcC5nZXRDZW50ZXIoKSwgdGhpcy5fbWFwLmdldFpvb20oKSwgYW5pbWF0aW5nLCBhbmltYXRpbmcpO1xuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR0aGlzLl9zZXRWaWV3KGUuY2VudGVyLCBlLnpvb20sIHRydWUsIGUubm9VcGRhdGUpO1xuICBcdH0sXG5cbiAgXHRfY2xhbXBab29tOiBmdW5jdGlvbiAoem9vbSkge1xuICBcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgXHRcdGlmICh1bmRlZmluZWQgIT09IG9wdGlvbnMubWluTmF0aXZlWm9vbSAmJiB6b29tIDwgb3B0aW9ucy5taW5OYXRpdmVab29tKSB7XG4gIFx0XHRcdHJldHVybiBvcHRpb25zLm1pbk5hdGl2ZVpvb207XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh1bmRlZmluZWQgIT09IG9wdGlvbnMubWF4TmF0aXZlWm9vbSAmJiBvcHRpb25zLm1heE5hdGl2ZVpvb20gPCB6b29tKSB7XG4gIFx0XHRcdHJldHVybiBvcHRpb25zLm1heE5hdGl2ZVpvb207XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiB6b29tO1xuICBcdH0sXG5cbiAgXHRfc2V0VmlldzogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgbm9QcnVuZSwgbm9VcGRhdGUpIHtcbiAgXHRcdHZhciB0aWxlWm9vbSA9IE1hdGgucm91bmQoem9vbSk7XG4gIFx0XHRpZiAoKHRoaXMub3B0aW9ucy5tYXhab29tICE9PSB1bmRlZmluZWQgJiYgdGlsZVpvb20gPiB0aGlzLm9wdGlvbnMubWF4Wm9vbSkgfHxcbiAgXHRcdCAgICAodGhpcy5vcHRpb25zLm1pblpvb20gIT09IHVuZGVmaW5lZCAmJiB0aWxlWm9vbSA8IHRoaXMub3B0aW9ucy5taW5ab29tKSkge1xuICBcdFx0XHR0aWxlWm9vbSA9IHVuZGVmaW5lZDtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRpbGVab29tID0gdGhpcy5fY2xhbXBab29tKHRpbGVab29tKTtcbiAgXHRcdH1cblxuICBcdFx0dmFyIHRpbGVab29tQ2hhbmdlZCA9IHRoaXMub3B0aW9ucy51cGRhdGVXaGVuWm9vbWluZyAmJiAodGlsZVpvb20gIT09IHRoaXMuX3RpbGVab29tKTtcblxuICBcdFx0aWYgKCFub1VwZGF0ZSB8fCB0aWxlWm9vbUNoYW5nZWQpIHtcblxuICBcdFx0XHR0aGlzLl90aWxlWm9vbSA9IHRpbGVab29tO1xuXG4gIFx0XHRcdGlmICh0aGlzLl9hYm9ydExvYWRpbmcpIHtcbiAgXHRcdFx0XHR0aGlzLl9hYm9ydExvYWRpbmcoKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZUxldmVscygpO1xuICBcdFx0XHR0aGlzLl9yZXNldEdyaWQoKTtcblxuICBcdFx0XHRpZiAodGlsZVpvb20gIT09IHVuZGVmaW5lZCkge1xuICBcdFx0XHRcdHRoaXMuX3VwZGF0ZShjZW50ZXIpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0aWYgKCFub1BydW5lKSB7XG4gIFx0XHRcdFx0dGhpcy5fcHJ1bmVUaWxlcygpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0Ly8gRmxhZyB0byBwcmV2ZW50IF91cGRhdGVPcGFjaXR5IGZyb20gcHJ1bmluZyB0aWxlcyBkdXJpbmdcbiAgXHRcdFx0Ly8gYSB6b29tIGFuaW0gb3IgYSBwaW5jaCBnZXN0dXJlXG4gIFx0XHRcdHRoaXMuX25vUHJ1bmUgPSAhIW5vUHJ1bmU7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3NldFpvb21UcmFuc2Zvcm1zKGNlbnRlciwgem9vbSk7XG4gIFx0fSxcblxuICBcdF9zZXRab29tVHJhbnNmb3JtczogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9sZXZlbHMpIHtcbiAgXHRcdFx0dGhpcy5fc2V0Wm9vbVRyYW5zZm9ybSh0aGlzLl9sZXZlbHNbaV0sIGNlbnRlciwgem9vbSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9zZXRab29tVHJhbnNmb3JtOiBmdW5jdGlvbiAobGV2ZWwsIGNlbnRlciwgem9vbSkge1xuICBcdFx0dmFyIHNjYWxlID0gdGhpcy5fbWFwLmdldFpvb21TY2FsZSh6b29tLCBsZXZlbC56b29tKSxcbiAgXHRcdCAgICB0cmFuc2xhdGUgPSBsZXZlbC5vcmlnaW4ubXVsdGlwbHlCeShzY2FsZSlcbiAgXHRcdCAgICAgICAgLnN1YnRyYWN0KHRoaXMuX21hcC5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKSkucm91bmQoKTtcblxuICBcdFx0aWYgKEJyb3dzZXIuYW55M2QpIHtcbiAgXHRcdFx0c2V0VHJhbnNmb3JtKGxldmVsLmVsLCB0cmFuc2xhdGUsIHNjYWxlKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKGxldmVsLmVsLCB0cmFuc2xhdGUpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVzZXRHcmlkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNycyA9IG1hcC5vcHRpb25zLmNycyxcbiAgXHRcdCAgICB0aWxlU2l6ZSA9IHRoaXMuX3RpbGVTaXplID0gdGhpcy5nZXRUaWxlU2l6ZSgpLFxuICBcdFx0ICAgIHRpbGVab29tID0gdGhpcy5fdGlsZVpvb207XG5cbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcyh0aGlzLl90aWxlWm9vbSk7XG4gIFx0XHRpZiAoYm91bmRzKSB7XG4gIFx0XHRcdHRoaXMuX2dsb2JhbFRpbGVSYW5nZSA9IHRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UoYm91bmRzKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fd3JhcFggPSBjcnMud3JhcExuZyAmJiAhdGhpcy5vcHRpb25zLm5vV3JhcCAmJiBbXG4gIFx0XHRcdE1hdGguZmxvb3IobWFwLnByb2plY3QoWzAsIGNycy53cmFwTG5nWzBdXSwgdGlsZVpvb20pLnggLyB0aWxlU2l6ZS54KSxcbiAgXHRcdFx0TWF0aC5jZWlsKG1hcC5wcm9qZWN0KFswLCBjcnMud3JhcExuZ1sxXV0sIHRpbGVab29tKS54IC8gdGlsZVNpemUueSlcbiAgXHRcdF07XG4gIFx0XHR0aGlzLl93cmFwWSA9IGNycy53cmFwTGF0ICYmICF0aGlzLm9wdGlvbnMubm9XcmFwICYmIFtcbiAgXHRcdFx0TWF0aC5mbG9vcihtYXAucHJvamVjdChbY3JzLndyYXBMYXRbMF0sIDBdLCB0aWxlWm9vbSkueSAvIHRpbGVTaXplLngpLFxuICBcdFx0XHRNYXRoLmNlaWwobWFwLnByb2plY3QoW2Nycy53cmFwTGF0WzFdLCAwXSwgdGlsZVpvb20pLnkgLyB0aWxlU2l6ZS55KVxuICBcdFx0XTtcbiAgXHR9LFxuXG4gIFx0X29uTW92ZUVuZDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9tYXAgfHwgdGhpcy5fbWFwLl9hbmltYXRpbmdab29tKSB7IHJldHVybjsgfVxuXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X2dldFRpbGVkUGl4ZWxCb3VuZHM6IGZ1bmN0aW9uIChjZW50ZXIpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgbWFwWm9vbSA9IG1hcC5fYW5pbWF0aW5nWm9vbSA/IE1hdGgubWF4KG1hcC5fYW5pbWF0ZVRvWm9vbSwgbWFwLmdldFpvb20oKSkgOiBtYXAuZ2V0Wm9vbSgpLFxuICBcdFx0ICAgIHNjYWxlID0gbWFwLmdldFpvb21TY2FsZShtYXBab29tLCB0aGlzLl90aWxlWm9vbSksXG4gIFx0XHQgICAgcGl4ZWxDZW50ZXIgPSBtYXAucHJvamVjdChjZW50ZXIsIHRoaXMuX3RpbGVab29tKS5mbG9vcigpLFxuICBcdFx0ICAgIGhhbGZTaXplID0gbWFwLmdldFNpemUoKS5kaXZpZGVCeShzY2FsZSAqIDIpO1xuXG4gIFx0XHRyZXR1cm4gbmV3IEJvdW5kcyhwaXhlbENlbnRlci5zdWJ0cmFjdChoYWxmU2l6ZSksIHBpeGVsQ2VudGVyLmFkZChoYWxmU2l6ZSkpO1xuICBcdH0sXG5cbiAgXHQvLyBQcml2YXRlIG1ldGhvZCB0byBsb2FkIHRpbGVzIGluIHRoZSBncmlkJ3MgYWN0aXZlIHpvb20gbGV2ZWwgYWNjb3JkaW5nIHRvIG1hcCBib3VuZHNcbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoY2VudGVyKSB7XG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xuICBcdFx0aWYgKCFtYXApIHsgcmV0dXJuOyB9XG4gIFx0XHR2YXIgem9vbSA9IHRoaXMuX2NsYW1wWm9vbShtYXAuZ2V0Wm9vbSgpKTtcblxuICBcdFx0aWYgKGNlbnRlciA9PT0gdW5kZWZpbmVkKSB7IGNlbnRlciA9IG1hcC5nZXRDZW50ZXIoKTsgfVxuICBcdFx0aWYgKHRoaXMuX3RpbGVab29tID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9XHQvLyBpZiBvdXQgb2YgbWluem9vbS9tYXh6b29tXG5cbiAgXHRcdHZhciBwaXhlbEJvdW5kcyA9IHRoaXMuX2dldFRpbGVkUGl4ZWxCb3VuZHMoY2VudGVyKSxcbiAgXHRcdCAgICB0aWxlUmFuZ2UgPSB0aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKHBpeGVsQm91bmRzKSxcbiAgXHRcdCAgICB0aWxlQ2VudGVyID0gdGlsZVJhbmdlLmdldENlbnRlcigpLFxuICBcdFx0ICAgIHF1ZXVlID0gW10sXG4gIFx0XHQgICAgbWFyZ2luID0gdGhpcy5vcHRpb25zLmtlZXBCdWZmZXIsXG4gIFx0XHQgICAgbm9QcnVuZVJhbmdlID0gbmV3IEJvdW5kcyh0aWxlUmFuZ2UuZ2V0Qm90dG9tTGVmdCgpLnN1YnRyYWN0KFttYXJnaW4sIC1tYXJnaW5dKSxcbiAgXHRcdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVSYW5nZS5nZXRUb3BSaWdodCgpLmFkZChbbWFyZ2luLCAtbWFyZ2luXSkpO1xuXG4gIFx0XHQvLyBTYW5pdHkgY2hlY2s6IHBhbmljIGlmIHRoZSB0aWxlIHJhbmdlIGNvbnRhaW5zIEluZmluaXR5IHNvbWV3aGVyZS5cbiAgXHRcdGlmICghKGlzRmluaXRlKHRpbGVSYW5nZS5taW4ueCkgJiZcbiAgXHRcdCAgICAgIGlzRmluaXRlKHRpbGVSYW5nZS5taW4ueSkgJiZcbiAgXHRcdCAgICAgIGlzRmluaXRlKHRpbGVSYW5nZS5tYXgueCkgJiZcbiAgXHRcdCAgICAgIGlzRmluaXRlKHRpbGVSYW5nZS5tYXgueSkpKSB7IHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIGxvYWQgYW4gaW5maW5pdGUgbnVtYmVyIG9mIHRpbGVzJyk7IH1cblxuICBcdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHZhciBjID0gdGhpcy5fdGlsZXNba2V5XS5jb29yZHM7XG4gIFx0XHRcdGlmIChjLnogIT09IHRoaXMuX3RpbGVab29tIHx8ICFub1BydW5lUmFuZ2UuY29udGFpbnMobmV3IFBvaW50KGMueCwgYy55KSkpIHtcbiAgXHRcdFx0XHR0aGlzLl90aWxlc1trZXldLmN1cnJlbnQgPSBmYWxzZTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHQvLyBfdXBkYXRlIGp1c3QgbG9hZHMgbW9yZSB0aWxlcy4gSWYgdGhlIHRpbGUgem9vbSBsZXZlbCBkaWZmZXJzIHRvbyBtdWNoXG4gIFx0XHQvLyBmcm9tIHRoZSBtYXAncywgbGV0IF9zZXRWaWV3IHJlc2V0IGxldmVscyBhbmQgcHJ1bmUgb2xkIHRpbGVzLlxuICBcdFx0aWYgKE1hdGguYWJzKHpvb20gLSB0aGlzLl90aWxlWm9vbSkgPiAxKSB7IHRoaXMuX3NldFZpZXcoY2VudGVyLCB6b29tKTsgcmV0dXJuOyB9XG5cbiAgXHRcdC8vIGNyZWF0ZSBhIHF1ZXVlIG9mIGNvb3JkaW5hdGVzIHRvIGxvYWQgdGlsZXMgZnJvbVxuICBcdFx0Zm9yICh2YXIgaiA9IHRpbGVSYW5nZS5taW4ueTsgaiA8PSB0aWxlUmFuZ2UubWF4Lnk7IGorKykge1xuICBcdFx0XHRmb3IgKHZhciBpID0gdGlsZVJhbmdlLm1pbi54OyBpIDw9IHRpbGVSYW5nZS5tYXgueDsgaSsrKSB7XG4gIFx0XHRcdFx0dmFyIGNvb3JkcyA9IG5ldyBQb2ludChpLCBqKTtcbiAgXHRcdFx0XHRjb29yZHMueiA9IHRoaXMuX3RpbGVab29tO1xuXG4gIFx0XHRcdFx0aWYgKCF0aGlzLl9pc1ZhbGlkVGlsZShjb29yZHMpKSB7IGNvbnRpbnVlOyB9XG5cbiAgXHRcdFx0XHR2YXIgdGlsZSA9IHRoaXMuX3RpbGVzW3RoaXMuX3RpbGVDb29yZHNUb0tleShjb29yZHMpXTtcbiAgXHRcdFx0XHRpZiAodGlsZSkge1xuICBcdFx0XHRcdFx0dGlsZS5jdXJyZW50ID0gdHJ1ZTtcbiAgXHRcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdFx0cXVldWUucHVzaChjb29yZHMpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHQvLyBzb3J0IHRpbGUgcXVldWUgdG8gbG9hZCB0aWxlcyBpbiBvcmRlciBvZiB0aGVpciBkaXN0YW5jZSB0byBjZW50ZXJcbiAgXHRcdHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgXHRcdFx0cmV0dXJuIGEuZGlzdGFuY2VUbyh0aWxlQ2VudGVyKSAtIGIuZGlzdGFuY2VUbyh0aWxlQ2VudGVyKTtcbiAgXHRcdH0pO1xuXG4gIFx0XHRpZiAocXVldWUubGVuZ3RoICE9PSAwKSB7XG4gIFx0XHRcdC8vIGlmIGl0J3MgdGhlIGZpcnN0IGJhdGNoIG9mIHRpbGVzIHRvIGxvYWRcbiAgXHRcdFx0aWYgKCF0aGlzLl9sb2FkaW5nKSB7XG4gIFx0XHRcdFx0dGhpcy5fbG9hZGluZyA9IHRydWU7XG4gIFx0XHRcdFx0Ly8gQGV2ZW50IGxvYWRpbmc6IEV2ZW50XG4gIFx0XHRcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgZ3JpZCBsYXllciBzdGFydHMgbG9hZGluZyB0aWxlcy5cbiAgXHRcdFx0XHR0aGlzLmZpcmUoJ2xvYWRpbmcnKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdC8vIGNyZWF0ZSBET00gZnJhZ21lbnQgdG8gYXBwZW5kIHRpbGVzIGluIG9uZSBiYXRjaFxuICBcdFx0XHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgXHRcdFx0Zm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gIFx0XHRcdFx0dGhpcy5fYWRkVGlsZShxdWV1ZVtpXSwgZnJhZ21lbnQpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0dGhpcy5fbGV2ZWwuZWwuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfaXNWYWxpZFRpbGU6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgXHRcdHZhciBjcnMgPSB0aGlzLl9tYXAub3B0aW9ucy5jcnM7XG5cbiAgXHRcdGlmICghY3JzLmluZmluaXRlKSB7XG4gIFx0XHRcdC8vIGRvbid0IGxvYWQgdGlsZSBpZiBpdCdzIG91dCBvZiBib3VuZHMgYW5kIG5vdCB3cmFwcGVkXG4gIFx0XHRcdHZhciBib3VuZHMgPSB0aGlzLl9nbG9iYWxUaWxlUmFuZ2U7XG4gIFx0XHRcdGlmICgoIWNycy53cmFwTG5nICYmIChjb29yZHMueCA8IGJvdW5kcy5taW4ueCB8fCBjb29yZHMueCA+IGJvdW5kcy5tYXgueCkpIHx8XG4gIFx0XHRcdCAgICAoIWNycy53cmFwTGF0ICYmIChjb29yZHMueSA8IGJvdW5kcy5taW4ueSB8fCBjb29yZHMueSA+IGJvdW5kcy5tYXgueSkpKSB7IHJldHVybiBmYWxzZTsgfVxuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5ib3VuZHMpIHsgcmV0dXJuIHRydWU7IH1cblxuICBcdFx0Ly8gZG9uJ3QgbG9hZCB0aWxlIGlmIGl0IGRvZXNuJ3QgaW50ZXJzZWN0IHRoZSBib3VuZHMgaW4gb3B0aW9uc1xuICBcdFx0dmFyIHRpbGVCb3VuZHMgPSB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHMoY29vcmRzKTtcbiAgXHRcdHJldHVybiB0b0xhdExuZ0JvdW5kcyh0aGlzLm9wdGlvbnMuYm91bmRzKS5vdmVybGFwcyh0aWxlQm91bmRzKTtcbiAgXHR9LFxuXG4gIFx0X2tleVRvQm91bmRzOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGlsZUNvb3JkcyhrZXkpKTtcbiAgXHR9LFxuXG4gIFx0X3RpbGVDb29yZHNUb053U2U6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgdGlsZVNpemUgPSB0aGlzLmdldFRpbGVTaXplKCksXG4gIFx0XHQgICAgbndQb2ludCA9IGNvb3Jkcy5zY2FsZUJ5KHRpbGVTaXplKSxcbiAgXHRcdCAgICBzZVBvaW50ID0gbndQb2ludC5hZGQodGlsZVNpemUpLFxuICBcdFx0ICAgIG53ID0gbWFwLnVucHJvamVjdChud1BvaW50LCBjb29yZHMueiksXG4gIFx0XHQgICAgc2UgPSBtYXAudW5wcm9qZWN0KHNlUG9pbnQsIGNvb3Jkcy56KTtcbiAgXHRcdHJldHVybiBbbncsIHNlXTtcbiAgXHR9LFxuXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjb29yZGluYXRlcyB0byBpdHMgZ2VvZ3JhcGhpY2FsIGJvdW5kc1xuICBcdF90aWxlQ29vcmRzVG9Cb3VuZHM6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgXHRcdHZhciBicCA9IHRoaXMuX3RpbGVDb29yZHNUb053U2UoY29vcmRzKSxcbiAgXHRcdCAgICBib3VuZHMgPSBuZXcgTGF0TG5nQm91bmRzKGJwWzBdLCBicFsxXSk7XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLm5vV3JhcCkge1xuICBcdFx0XHRib3VuZHMgPSB0aGlzLl9tYXAud3JhcExhdExuZ0JvdW5kcyhib3VuZHMpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIGJvdW5kcztcbiAgXHR9LFxuICBcdC8vIGNvbnZlcnRzIHRpbGUgY29vcmRpbmF0ZXMgdG8ga2V5IGZvciB0aGUgdGlsZSBjYWNoZVxuICBcdF90aWxlQ29vcmRzVG9LZXk6IGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgXHRcdHJldHVybiBjb29yZHMueCArICc6JyArIGNvb3Jkcy55ICsgJzonICsgY29vcmRzLno7XG4gIFx0fSxcblxuICBcdC8vIGNvbnZlcnRzIHRpbGUgY2FjaGUga2V5IHRvIGNvb3JkaW5hdGVzXG4gIFx0X2tleVRvVGlsZUNvb3JkczogZnVuY3Rpb24gKGtleSkge1xuICBcdFx0dmFyIGsgPSBrZXkuc3BsaXQoJzonKSxcbiAgXHRcdCAgICBjb29yZHMgPSBuZXcgUG9pbnQoK2tbMF0sICtrWzFdKTtcbiAgXHRcdGNvb3Jkcy56ID0gK2tbMl07XG4gIFx0XHRyZXR1cm4gY29vcmRzO1xuICBcdH0sXG5cbiAgXHRfcmVtb3ZlVGlsZTogZnVuY3Rpb24gKGtleSkge1xuICBcdFx0dmFyIHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICBcdFx0aWYgKCF0aWxlKSB7IHJldHVybjsgfVxuXG4gIFx0XHRyZW1vdmUodGlsZS5lbCk7XG5cbiAgXHRcdGRlbGV0ZSB0aGlzLl90aWxlc1trZXldO1xuXG4gIFx0XHQvLyBAZXZlbnQgdGlsZXVubG9hZDogVGlsZUV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBpcyByZW1vdmVkIChlLmcuIHdoZW4gYSB0aWxlIGdvZXMgb2ZmIHRoZSBzY3JlZW4pLlxuICBcdFx0dGhpcy5maXJlKCd0aWxldW5sb2FkJywge1xuICBcdFx0XHR0aWxlOiB0aWxlLmVsLFxuICBcdFx0XHRjb29yZHM6IHRoaXMuX2tleVRvVGlsZUNvb3JkcyhrZXkpXG4gIFx0XHR9KTtcbiAgXHR9LFxuXG4gIFx0X2luaXRUaWxlOiBmdW5jdGlvbiAodGlsZSkge1xuICBcdFx0YWRkQ2xhc3ModGlsZSwgJ2xlYWZsZXQtdGlsZScpO1xuXG4gIFx0XHR2YXIgdGlsZVNpemUgPSB0aGlzLmdldFRpbGVTaXplKCk7XG4gIFx0XHR0aWxlLnN0eWxlLndpZHRoID0gdGlsZVNpemUueCArICdweCc7XG4gIFx0XHR0aWxlLnN0eWxlLmhlaWdodCA9IHRpbGVTaXplLnkgKyAncHgnO1xuXG4gIFx0XHR0aWxlLm9uc2VsZWN0c3RhcnQgPSBmYWxzZUZuO1xuICBcdFx0dGlsZS5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XG5cbiAgXHRcdC8vIHVwZGF0ZSBvcGFjaXR5IG9uIHRpbGVzIGluIElFNy04IGJlY2F1c2Ugb2YgZmlsdGVyIGluaGVyaXRhbmNlIHByb2JsZW1zXG4gIFx0XHRpZiAoQnJvd3Nlci5pZWx0OSAmJiB0aGlzLm9wdGlvbnMub3BhY2l0eSA8IDEpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9hZGRUaWxlOiBmdW5jdGlvbiAoY29vcmRzLCBjb250YWluZXIpIHtcbiAgXHRcdHZhciB0aWxlUG9zID0gdGhpcy5fZ2V0VGlsZVBvcyhjb29yZHMpLFxuICBcdFx0ICAgIGtleSA9IHRoaXMuX3RpbGVDb29yZHNUb0tleShjb29yZHMpO1xuXG4gIFx0XHR2YXIgdGlsZSA9IHRoaXMuY3JlYXRlVGlsZSh0aGlzLl93cmFwQ29vcmRzKGNvb3JkcyksIGJpbmQodGhpcy5fdGlsZVJlYWR5LCB0aGlzLCBjb29yZHMpKTtcblxuICBcdFx0dGhpcy5faW5pdFRpbGUodGlsZSk7XG5cbiAgXHRcdC8vIGlmIGNyZWF0ZVRpbGUgaXMgZGVmaW5lZCB3aXRoIGEgc2Vjb25kIGFyZ3VtZW50IChcImRvbmVcIiBjYWxsYmFjayksXG4gIFx0XHQvLyB3ZSBrbm93IHRoYXQgdGlsZSBpcyBhc3luYyBhbmQgd2lsbCBiZSByZWFkeSBsYXRlcjsgb3RoZXJ3aXNlXG4gIFx0XHRpZiAodGhpcy5jcmVhdGVUaWxlLmxlbmd0aCA8IDIpIHtcbiAgXHRcdFx0Ly8gbWFyayB0aWxlIGFzIHJlYWR5LCBidXQgZGVsYXkgb25lIGZyYW1lIGZvciBvcGFjaXR5IGFuaW1hdGlvbiB0byBoYXBwZW5cbiAgXHRcdFx0cmVxdWVzdEFuaW1GcmFtZShiaW5kKHRoaXMuX3RpbGVSZWFkeSwgdGhpcywgY29vcmRzLCBudWxsLCB0aWxlKSk7XG4gIFx0XHR9XG5cbiAgXHRcdHNldFBvc2l0aW9uKHRpbGUsIHRpbGVQb3MpO1xuXG4gIFx0XHQvLyBzYXZlIHRpbGUgaW4gY2FjaGVcbiAgXHRcdHRoaXMuX3RpbGVzW2tleV0gPSB7XG4gIFx0XHRcdGVsOiB0aWxlLFxuICBcdFx0XHRjb29yZHM6IGNvb3JkcyxcbiAgXHRcdFx0Y3VycmVudDogdHJ1ZVxuICBcdFx0fTtcblxuICBcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHRpbGUpO1xuICBcdFx0Ly8gQGV2ZW50IHRpbGVsb2Fkc3RhcnQ6IFRpbGVFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHRpbGUgaXMgcmVxdWVzdGVkIGFuZCBzdGFydHMgbG9hZGluZy5cbiAgXHRcdHRoaXMuZmlyZSgndGlsZWxvYWRzdGFydCcsIHtcbiAgXHRcdFx0dGlsZTogdGlsZSxcbiAgXHRcdFx0Y29vcmRzOiBjb29yZHNcbiAgXHRcdH0pO1xuICBcdH0sXG5cbiAgXHRfdGlsZVJlYWR5OiBmdW5jdGlvbiAoY29vcmRzLCBlcnIsIHRpbGUpIHtcbiAgXHRcdGlmIChlcnIpIHtcbiAgXHRcdFx0Ly8gQGV2ZW50IHRpbGVlcnJvcjogVGlsZUVycm9yRXZlbnRcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiB0aGVyZSBpcyBhbiBlcnJvciBsb2FkaW5nIGEgdGlsZS5cbiAgXHRcdFx0dGhpcy5maXJlKCd0aWxlZXJyb3InLCB7XG4gIFx0XHRcdFx0ZXJyb3I6IGVycixcbiAgXHRcdFx0XHR0aWxlOiB0aWxlLFxuICBcdFx0XHRcdGNvb3JkczogY29vcmRzXG4gIFx0XHRcdH0pO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3Jkcyk7XG5cbiAgXHRcdHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICBcdFx0aWYgKCF0aWxlKSB7IHJldHVybjsgfVxuXG4gIFx0XHR0aWxlLmxvYWRlZCA9ICtuZXcgRGF0ZSgpO1xuICBcdFx0aWYgKHRoaXMuX21hcC5fZmFkZUFuaW1hdGVkKSB7XG4gIFx0XHRcdHNldE9wYWNpdHkodGlsZS5lbCwgMCk7XG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9mYWRlRnJhbWUpO1xuICBcdFx0XHR0aGlzLl9mYWRlRnJhbWUgPSByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3VwZGF0ZU9wYWNpdHksIHRoaXMpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGlsZS5hY3RpdmUgPSB0cnVlO1xuICBcdFx0XHR0aGlzLl9wcnVuZVRpbGVzKCk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmICghZXJyKSB7XG4gIFx0XHRcdGFkZENsYXNzKHRpbGUuZWwsICdsZWFmbGV0LXRpbGUtbG9hZGVkJyk7XG5cbiAgXHRcdFx0Ly8gQGV2ZW50IHRpbGVsb2FkOiBUaWxlRXZlbnRcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHRpbGUgbG9hZHMuXG4gIFx0XHRcdHRoaXMuZmlyZSgndGlsZWxvYWQnLCB7XG4gIFx0XHRcdFx0dGlsZTogdGlsZS5lbCxcbiAgXHRcdFx0XHRjb29yZHM6IGNvb3Jkc1xuICBcdFx0XHR9KTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKHRoaXMuX25vVGlsZXNUb0xvYWQoKSkge1xuICBcdFx0XHR0aGlzLl9sb2FkaW5nID0gZmFsc2U7XG4gIFx0XHRcdC8vIEBldmVudCBsb2FkOiBFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBncmlkIGxheWVyIGxvYWRlZCBhbGwgdmlzaWJsZSB0aWxlcy5cbiAgXHRcdFx0dGhpcy5maXJlKCdsb2FkJyk7XG5cbiAgXHRcdFx0aWYgKEJyb3dzZXIuaWVsdDkgfHwgIXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkKSB7XG4gIFx0XHRcdFx0cmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9wcnVuZVRpbGVzLCB0aGlzKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHQvLyBXYWl0IGEgYml0IG1vcmUgdGhhbiAwLjIgc2VjcyAodGhlIGR1cmF0aW9uIG9mIHRoZSB0aWxlIGZhZGUtaW4pXG4gIFx0XHRcdFx0Ly8gdG8gdHJpZ2dlciBhIHBydW5pbmcuXG4gIFx0XHRcdFx0c2V0VGltZW91dChiaW5kKHRoaXMuX3BydW5lVGlsZXMsIHRoaXMpLCAyNTApO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9nZXRUaWxlUG9zOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gIFx0XHRyZXR1cm4gY29vcmRzLnNjYWxlQnkodGhpcy5nZXRUaWxlU2l6ZSgpKS5zdWJ0cmFjdCh0aGlzLl9sZXZlbC5vcmlnaW4pO1xuICBcdH0sXG5cbiAgXHRfd3JhcENvb3JkczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIG5ld0Nvb3JkcyA9IG5ldyBQb2ludChcbiAgXHRcdFx0dGhpcy5fd3JhcFggPyB3cmFwTnVtKGNvb3Jkcy54LCB0aGlzLl93cmFwWCkgOiBjb29yZHMueCxcbiAgXHRcdFx0dGhpcy5fd3JhcFkgPyB3cmFwTnVtKGNvb3Jkcy55LCB0aGlzLl93cmFwWSkgOiBjb29yZHMueSk7XG4gIFx0XHRuZXdDb29yZHMueiA9IGNvb3Jkcy56O1xuICBcdFx0cmV0dXJuIG5ld0Nvb3JkcztcbiAgXHR9LFxuXG4gIFx0X3B4Qm91bmRzVG9UaWxlUmFuZ2U6IGZ1bmN0aW9uIChib3VuZHMpIHtcbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKFxuICBcdFx0XHRib3VuZHMubWluLnVuc2NhbGVCeSh0aWxlU2l6ZSkuZmxvb3IoKSxcbiAgXHRcdFx0Ym91bmRzLm1heC51bnNjYWxlQnkodGlsZVNpemUpLmNlaWwoKS5zdWJ0cmFjdChbMSwgMV0pKTtcbiAgXHR9LFxuXG4gIFx0X25vVGlsZXNUb0xvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAoIXRoaXMuX3RpbGVzW2tleV0ubG9hZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRydWU7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLmdyaWRMYXllcihvcHRpb25zPzogR3JpZExheWVyIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgR3JpZExheWVyIHdpdGggdGhlIHN1cHBsaWVkIG9wdGlvbnMuXG4gIGZ1bmN0aW9uIGdyaWRMYXllcihvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBHcmlkTGF5ZXIob3B0aW9ucyk7XG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBUaWxlTGF5ZXJcclxuICAgKiBAaW5oZXJpdHMgR3JpZExheWVyXHJcbiAgICogQGFrYSBMLlRpbGVMYXllclxyXG4gICAqIFVzZWQgdG8gbG9hZCBhbmQgZGlzcGxheSB0aWxlIGxheWVycyBvbiB0aGUgbWFwLiBOb3RlIHRoYXQgbW9zdCB0aWxlIHNlcnZlcnMgcmVxdWlyZSBhdHRyaWJ1dGlvbiwgd2hpY2ggeW91IGNhbiBzZXQgdW5kZXIgYExheWVyYC4gRXh0ZW5kcyBgR3JpZExheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIEwudGlsZUxheWVyKCdodHRwczovL3RpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nP3tmb299Jywge2ZvbzogJ2JhcicsIGF0dHJpYnV0aW9uOiAnJmNvcHk7IDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9jb3B5cmlnaHRcIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnfSkuYWRkVG8obWFwKTtcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBAc2VjdGlvbiBVUkwgdGVtcGxhdGVcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogQSBzdHJpbmcgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogJ2h0dHBzOi8ve3N9LnNvbWVkb21haW4uY29tL2JsYWJsYS97en0ve3h9L3t5fXtyfS5wbmcnXHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBge3N9YCBtZWFucyBvbmUgb2YgdGhlIGF2YWlsYWJsZSBzdWJkb21haW5zICh1c2VkIHNlcXVlbnRpYWxseSB0byBoZWxwIHdpdGggYnJvd3NlciBwYXJhbGxlbCByZXF1ZXN0cyBwZXIgZG9tYWluIGxpbWl0YXRpb247IHN1YmRvbWFpbiB2YWx1ZXMgYXJlIHNwZWNpZmllZCBpbiBvcHRpb25zOyBgYWAsIGBiYCBvciBgY2AgYnkgZGVmYXVsdCwgY2FuIGJlIG9taXR0ZWQpLCBge3p9YCDigJQgem9vbSBsZXZlbCwgYHt4fWAgYW5kIGB7eX1gIOKAlCB0aWxlIGNvb3JkaW5hdGVzLiBge3J9YCBjYW4gYmUgdXNlZCB0byBhZGQgXCImY29tbWF0OzJ4XCIgdG8gdGhlIFVSTCB0byBsb2FkIHJldGluYSB0aWxlcy5cclxuICAgKlxyXG4gICAqIFlvdSBjYW4gdXNlIGN1c3RvbSBrZXlzIGluIHRoZSB0ZW1wbGF0ZSwgd2hpY2ggd2lsbCBiZSBbZXZhbHVhdGVkXSgjdXRpbC10ZW1wbGF0ZSkgZnJvbSBUaWxlTGF5ZXIgb3B0aW9ucywgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnNvbWVkb21haW4uY29tL3tmb299L3t6fS97eH0ve3l9LnBuZycsIHtmb286ICdiYXInfSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICB2YXIgVGlsZUxheWVyID0gR3JpZExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgVGlsZUxheWVyIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZG93biB0byB3aGljaCB0aGlzIGxheWVyIHdpbGwgYmUgZGlzcGxheWVkIChpbmNsdXNpdmUpLlxyXG4gIFx0XHRtaW5ab29tOiAwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhab29tOiBOdW1iZXIgPSAxOFxyXG4gIFx0XHQvLyBUaGUgbWF4aW11bSB6b29tIGxldmVsIHVwIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXHJcbiAgXHRcdG1heFpvb206IDE4LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzdWJkb21haW5zOiBTdHJpbmd8U3RyaW5nW10gPSAnYWJjJ1xyXG4gIFx0XHQvLyBTdWJkb21haW5zIG9mIHRoZSB0aWxlIHNlcnZpY2UuIENhbiBiZSBwYXNzZWQgaW4gdGhlIGZvcm0gb2Ygb25lIHN0cmluZyAod2hlcmUgZWFjaCBsZXR0ZXIgaXMgYSBzdWJkb21haW4gbmFtZSkgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cclxuICBcdFx0c3ViZG9tYWluczogJ2FiYycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGVycm9yVGlsZVVybDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVVJMIHRvIHRoZSB0aWxlIGltYWdlIHRvIHNob3cgaW4gcGxhY2Ugb2YgdGhlIHRpbGUgdGhhdCBmYWlsZWQgdG8gbG9hZC5cclxuICBcdFx0ZXJyb3JUaWxlVXJsOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbU9mZnNldDogTnVtYmVyID0gMFxyXG4gIFx0XHQvLyBUaGUgem9vbSBudW1iZXIgdXNlZCBpbiB0aWxlIFVSTHMgd2lsbCBiZSBvZmZzZXQgd2l0aCB0aGlzIHZhbHVlLlxyXG4gIFx0XHR6b29tT2Zmc2V0OiAwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0bXM6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIGludmVyc2VzIFkgYXhpcyBudW1iZXJpbmcgZm9yIHRpbGVzICh0dXJuIHRoaXMgb24gZm9yIFtUTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2UpIHNlcnZpY2VzKS5cclxuICBcdFx0dG1zOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbVJldmVyc2U6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHpvb20gbnVtYmVyIHVzZWQgaW4gdGlsZSBVUkxzIHdpbGwgYmUgcmV2ZXJzZWQgKGBtYXhab29tIC0gem9vbWAgaW5zdGVhZCBvZiBgem9vbWApXHJcbiAgXHRcdHpvb21SZXZlcnNlOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gZGV0ZWN0UmV0aW5hOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgIGFuZCB1c2VyIGlzIG9uIGEgcmV0aW5hIGRpc3BsYXksIGl0IHdpbGwgcmVxdWVzdCBmb3VyIHRpbGVzIG9mIGhhbGYgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBhIGJpZ2dlciB6b29tIGxldmVsIGluIHBsYWNlIG9mIG9uZSB0byB1dGlsaXplIHRoZSBoaWdoIHJlc29sdXRpb24uXHJcbiAgXHRcdGRldGVjdFJldGluYTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNyb3NzT3JpZ2luOiBCb29sZWFufFN0cmluZyA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0aWxlcy5cclxuICBcdFx0Ly8gSWYgYSBTdHJpbmcgaXMgcHJvdmlkZWQsIGFsbCB0aWxlcyB3aWxsIGhhdmUgdGhlaXIgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHNldCB0byB0aGUgU3RyaW5nIHByb3ZpZGVkLiBUaGlzIGlzIG5lZWRlZCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGlsZSBwaXhlbCBkYXRhLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbQ09SUyBTZXR0aW5nc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRjcm9zc09yaWdpbjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJlZmVycmVyUG9saWN5OiBCb29sZWFufFN0cmluZyA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIHJlZmVycmVyUG9saWN5IGF0dHJpYnV0ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0aWxlcy5cclxuICBcdFx0Ly8gSWYgYSBTdHJpbmcgaXMgcHJvdmlkZWQsIGFsbCB0aWxlcyB3aWxsIGhhdmUgdGhlaXIgcmVmZXJyZXJQb2xpY3kgYXR0cmlidXRlIHNldCB0byB0aGUgU3RyaW5nIHByb3ZpZGVkLlxyXG4gIFx0XHQvLyBUaGlzIG1heSBiZSBuZWVkZWQgaWYgeW91ciBtYXAncyByZW5kZXJpbmcgY29udGV4dCBoYXMgYSBzdHJpY3QgZGVmYXVsdCBidXQgeW91ciB0aWxlIHByb3ZpZGVyIGV4cGVjdHMgYSB2YWxpZCByZWZlcnJlclxyXG4gIFx0XHQvLyAoZS5nLiB0byB2YWxpZGF0ZSBhbiBBUEkgdG9rZW4pLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbSFRNTEltYWdlRWxlbWVudC5yZWZlcnJlclBvbGljeV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbWFnZUVsZW1lbnQvcmVmZXJyZXJQb2xpY3kpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRyZWZlcnJlclBvbGljeTogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHQvLyBkZXRlY3RpbmcgcmV0aW5hIGRpc3BsYXlzLCBhZGp1c3RpbmcgdGlsZVNpemUgYW5kIHpvb20gbGV2ZWxzXHJcbiAgXHRcdGlmIChvcHRpb25zLmRldGVjdFJldGluYSAmJiBCcm93c2VyLnJldGluYSAmJiBvcHRpb25zLm1heFpvb20gPiAwKSB7XHJcblxyXG4gIFx0XHRcdG9wdGlvbnMudGlsZVNpemUgPSBNYXRoLmZsb29yKG9wdGlvbnMudGlsZVNpemUgLyAyKTtcclxuXHJcbiAgXHRcdFx0aWYgKCFvcHRpb25zLnpvb21SZXZlcnNlKSB7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnpvb21PZmZzZXQrKztcclxuICBcdFx0XHRcdG9wdGlvbnMubWF4Wm9vbSA9IE1hdGgubWF4KG9wdGlvbnMubWluWm9vbSwgb3B0aW9ucy5tYXhab29tIC0gMSk7XHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdG9wdGlvbnMuem9vbU9mZnNldC0tO1xyXG4gIFx0XHRcdFx0b3B0aW9ucy5taW5ab29tID0gTWF0aC5taW4ob3B0aW9ucy5tYXhab29tLCBvcHRpb25zLm1pblpvb20gKyAxKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdG9wdGlvbnMubWluWm9vbSA9IE1hdGgubWF4KDAsIG9wdGlvbnMubWluWm9vbSk7XHJcbiAgXHRcdH0gZWxzZSBpZiAoIW9wdGlvbnMuem9vbVJldmVyc2UpIHtcclxuICBcdFx0XHQvLyBtYWtlIHN1cmUgbWF4Wm9vbSBpcyBndGUgbWluWm9vbVxyXG4gIFx0XHRcdG9wdGlvbnMubWF4Wm9vbSA9IE1hdGgubWF4KG9wdGlvbnMubWluWm9vbSwgb3B0aW9ucy5tYXhab29tKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHQvLyBtYWtlIHN1cmUgbWluWm9vbSBpcyBsdGUgbWF4Wm9vbVxyXG4gIFx0XHRcdG9wdGlvbnMubWluWm9vbSA9IE1hdGgubWluKG9wdGlvbnMubWF4Wm9vbSwgb3B0aW9ucy5taW5ab29tKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHR5cGVvZiBvcHRpb25zLnN1YmRvbWFpbnMgPT09ICdzdHJpbmcnKSB7XHJcbiAgXHRcdFx0b3B0aW9ucy5zdWJkb21haW5zID0gb3B0aW9ucy5zdWJkb21haW5zLnNwbGl0KCcnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5vbigndGlsZXVubG9hZCcsIHRoaXMuX29uVGlsZVJlbW92ZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0VXJsKHVybDogU3RyaW5nLCBub1JlZHJhdz86IEJvb2xlYW4pOiB0aGlzXHJcbiAgXHQvLyBVcGRhdGVzIHRoZSBsYXllcidzIFVSTCB0ZW1wbGF0ZSBhbmQgcmVkcmF3cyBpdCAodW5sZXNzIGBub1JlZHJhd2AgaXMgc2V0IHRvIGB0cnVlYCkuXHJcbiAgXHQvLyBJZiB0aGUgVVJMIGRvZXMgbm90IGNoYW5nZSwgdGhlIGxheWVyIHdpbGwgbm90IGJlIHJlZHJhd24gdW5sZXNzXHJcbiAgXHQvLyB0aGUgbm9SZWRyYXcgcGFyYW1ldGVyIGlzIHNldCB0byBmYWxzZS5cclxuICBcdHNldFVybDogZnVuY3Rpb24gKHVybCwgbm9SZWRyYXcpIHtcclxuICBcdFx0aWYgKHRoaXMuX3VybCA9PT0gdXJsICYmIG5vUmVkcmF3ID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHRub1JlZHJhdyA9IHRydWU7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3VybCA9IHVybDtcclxuXHJcbiAgXHRcdGlmICghbm9SZWRyYXcpIHtcclxuICBcdFx0XHR0aGlzLnJlZHJhdygpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVRpbGUoY29vcmRzOiBPYmplY3QsIGRvbmU/OiBGdW5jdGlvbik6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBDYWxsZWQgb25seSBpbnRlcm5hbGx5LCBvdmVycmlkZXMgR3JpZExheWVyJ3MgW2BjcmVhdGVUaWxlKClgXSgjZ3JpZGxheWVyLWNyZWF0ZXRpbGUpXHJcbiAgXHQvLyB0byByZXR1cm4gYW4gYDxpbWc+YCBIVE1MIGVsZW1lbnQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgaW1hZ2UgVVJMIGdpdmVuIGBjb29yZHNgLiBUaGUgYGRvbmVgXHJcbiAgXHQvLyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgdGlsZSBoYXMgYmVlbiBsb2FkZWQuXHJcbiAgXHRjcmVhdGVUaWxlOiBmdW5jdGlvbiAoY29vcmRzLCBkb25lKSB7XHJcbiAgXHRcdHZhciB0aWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcblxyXG4gIFx0XHRvbih0aWxlLCAnbG9hZCcsIGJpbmQodGhpcy5fdGlsZU9uTG9hZCwgdGhpcywgZG9uZSwgdGlsZSkpO1xyXG4gIFx0XHRvbih0aWxlLCAnZXJyb3InLCBiaW5kKHRoaXMuX3RpbGVPbkVycm9yLCB0aGlzLCBkb25lLCB0aWxlKSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luIHx8IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiA9PT0gJycpIHtcclxuICBcdFx0XHR0aWxlLmNyb3NzT3JpZ2luID0gdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSB0cnVlID8gJycgOiB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGZvciB0aGlzIG5ldyBvcHRpb24gd2UgZm9sbG93IHRoZSBkb2N1bWVudGVkIGJlaGF2aW9yXHJcbiAgXHRcdC8vIG1vcmUgY2xvc2VseSBieSBvbmx5IHNldHRpbmcgdGhlIHByb3BlcnR5IHdoZW4gc3RyaW5nXHJcbiAgXHRcdGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnJlZmVycmVyUG9saWN5ID09PSAnc3RyaW5nJykge1xyXG4gIFx0XHRcdHRpbGUucmVmZXJyZXJQb2xpY3kgPSB0aGlzLm9wdGlvbnMucmVmZXJyZXJQb2xpY3k7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIFRoZSBhbHQgYXR0cmlidXRlIGlzIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLFxyXG4gIFx0XHQvLyBhbGxvd2luZyBzY3JlZW4gcmVhZGVycyB0byBpZ25vcmUgdGhlIGRlY29yYXRpdmUgaW1hZ2UgdGlsZXMuXHJcbiAgXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvdHV0b3JpYWxzL2ltYWdlcy9kZWNvcmF0aXZlL1xyXG4gIFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbC1hcmlhLyNlbC1pbWctZW1wdHktYWx0XHJcbiAgXHRcdHRpbGUuYWx0ID0gJyc7XHJcblxyXG4gIFx0XHR0aWxlLnNyYyA9IHRoaXMuZ2V0VGlsZVVybChjb29yZHMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRpbGU7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXHJcbiAgXHQvLyBAdW5pbmhlcml0YWJsZVxyXG4gIFx0Ly8gTGF5ZXJzIGV4dGVuZGluZyBgVGlsZUxheWVyYCBtaWdodCByZWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZC5cclxuICBcdC8vIEBtZXRob2QgZ2V0VGlsZVVybChjb29yZHM6IE9iamVjdCk6IFN0cmluZ1xyXG4gIFx0Ly8gQ2FsbGVkIG9ubHkgaW50ZXJuYWxseSwgcmV0dXJucyB0aGUgVVJMIGZvciBhIHRpbGUgZ2l2ZW4gaXRzIGNvb3JkaW5hdGVzLlxyXG4gIFx0Ly8gQ2xhc3NlcyBleHRlbmRpbmcgYFRpbGVMYXllcmAgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gcHJvdmlkZSBjdXN0b20gdGlsZSBVUkwgbmFtaW5nIHNjaGVtZXMuXHJcbiAgXHRnZXRUaWxlVXJsOiBmdW5jdGlvbiAoY29vcmRzKSB7XHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdHI6IEJyb3dzZXIucmV0aW5hID8gJ0AyeCcgOiAnJyxcclxuICBcdFx0XHRzOiB0aGlzLl9nZXRTdWJkb21haW4oY29vcmRzKSxcclxuICBcdFx0XHR4OiBjb29yZHMueCxcclxuICBcdFx0XHR5OiBjb29yZHMueSxcclxuICBcdFx0XHR6OiB0aGlzLl9nZXRab29tRm9yVXJsKClcclxuICBcdFx0fTtcclxuICBcdFx0aWYgKHRoaXMuX21hcCAmJiAhdGhpcy5fbWFwLm9wdGlvbnMuY3JzLmluZmluaXRlKSB7XHJcbiAgXHRcdFx0dmFyIGludmVydGVkWSA9IHRoaXMuX2dsb2JhbFRpbGVSYW5nZS5tYXgueSAtIGNvb3Jkcy55O1xyXG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMudG1zKSB7XHJcbiAgXHRcdFx0XHRkYXRhWyd5J10gPSBpbnZlcnRlZFk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGRhdGFbJy15J10gPSBpbnZlcnRlZFk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0ZW1wbGF0ZSh0aGlzLl91cmwsIGV4dGVuZChkYXRhLCB0aGlzLm9wdGlvbnMpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RpbGVPbkxvYWQ6IGZ1bmN0aW9uIChkb25lLCB0aWxlKSB7XHJcbiAgXHRcdC8vIEZvciBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8zMzMyXHJcbiAgXHRcdGlmIChCcm93c2VyLmllbHQ5KSB7XHJcbiAgXHRcdFx0c2V0VGltZW91dChiaW5kKGRvbmUsIHRoaXMsIG51bGwsIHRpbGUpLCAwKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRkb25lKG51bGwsIHRpbGUpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF90aWxlT25FcnJvcjogZnVuY3Rpb24gKGRvbmUsIHRpbGUsIGUpIHtcclxuICBcdFx0dmFyIGVycm9yVXJsID0gdGhpcy5vcHRpb25zLmVycm9yVGlsZVVybDtcclxuICBcdFx0aWYgKGVycm9yVXJsICYmIHRpbGUuZ2V0QXR0cmlidXRlKCdzcmMnKSAhPT0gZXJyb3JVcmwpIHtcclxuICBcdFx0XHR0aWxlLnNyYyA9IGVycm9yVXJsO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGRvbmUoZSwgdGlsZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblRpbGVSZW1vdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGUudGlsZS5vbmxvYWQgPSBudWxsO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0Wm9vbUZvclVybDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgem9vbSA9IHRoaXMuX3RpbGVab29tLFxyXG4gIFx0XHRtYXhab29tID0gdGhpcy5vcHRpb25zLm1heFpvb20sXHJcbiAgXHRcdHpvb21SZXZlcnNlID0gdGhpcy5vcHRpb25zLnpvb21SZXZlcnNlLFxyXG4gIFx0XHR6b29tT2Zmc2V0ID0gdGhpcy5vcHRpb25zLnpvb21PZmZzZXQ7XHJcblxyXG4gIFx0XHRpZiAoem9vbVJldmVyc2UpIHtcclxuICBcdFx0XHR6b29tID0gbWF4Wm9vbSAtIHpvb207XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB6b29tICsgem9vbU9mZnNldDtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFN1YmRvbWFpbjogZnVuY3Rpb24gKHRpbGVQb2ludCkge1xyXG4gIFx0XHR2YXIgaW5kZXggPSBNYXRoLmFicyh0aWxlUG9pbnQueCArIHRpbGVQb2ludC55KSAlIHRoaXMub3B0aW9ucy5zdWJkb21haW5zLmxlbmd0aDtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5zdWJkb21haW5zW2luZGV4XTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gc3RvcHMgbG9hZGluZyBhbGwgdGlsZXMgaW4gdGhlIGJhY2tncm91bmQgbGF5ZXJcclxuICBcdF9hYm9ydExvYWRpbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGksIHRpbGU7XHJcbiAgXHRcdGZvciAoaSBpbiB0aGlzLl90aWxlcykge1xyXG4gIFx0XHRcdGlmICh0aGlzLl90aWxlc1tpXS5jb29yZHMueiAhPT0gdGhpcy5fdGlsZVpvb20pIHtcclxuICBcdFx0XHRcdHRpbGUgPSB0aGlzLl90aWxlc1tpXS5lbDtcclxuXHJcbiAgXHRcdFx0XHR0aWxlLm9ubG9hZCA9IGZhbHNlRm47XHJcbiAgXHRcdFx0XHR0aWxlLm9uZXJyb3IgPSBmYWxzZUZuO1xyXG5cclxuICBcdFx0XHRcdGlmICghdGlsZS5jb21wbGV0ZSkge1xyXG4gIFx0XHRcdFx0XHR0aWxlLnNyYyA9IGVtcHR5SW1hZ2VVcmw7XHJcbiAgXHRcdFx0XHRcdHZhciBjb29yZHMgPSB0aGlzLl90aWxlc1tpXS5jb29yZHM7XHJcbiAgXHRcdFx0XHRcdHJlbW92ZSh0aWxlKTtcclxuICBcdFx0XHRcdFx0ZGVsZXRlIHRoaXMuX3RpbGVzW2ldO1xyXG4gIFx0XHRcdFx0XHQvLyBAZXZlbnQgdGlsZWFib3J0OiBUaWxlRXZlbnRcclxuICBcdFx0XHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHRpbGUgd2FzIGxvYWRpbmcgYnV0IGlzIG5vdyBub3Qgd2FudGVkLlxyXG4gIFx0XHRcdFx0XHR0aGlzLmZpcmUoJ3RpbGVhYm9ydCcsIHtcclxuICBcdFx0XHRcdFx0XHR0aWxlOiB0aWxlLFxyXG4gIFx0XHRcdFx0XHRcdGNvb3JkczogY29vcmRzXHJcbiAgXHRcdFx0XHRcdH0pO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVtb3ZlVGlsZTogZnVuY3Rpb24gKGtleSkge1xyXG4gIFx0XHR2YXIgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XHJcbiAgXHRcdGlmICghdGlsZSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdC8vIENhbmNlbHMgYW55IHBlbmRpbmcgaHR0cCByZXF1ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbGVcclxuICBcdFx0dGlsZS5lbC5zZXRBdHRyaWJ1dGUoJ3NyYycsIGVtcHR5SW1hZ2VVcmwpO1xyXG5cclxuICBcdFx0cmV0dXJuIEdyaWRMYXllci5wcm90b3R5cGUuX3JlbW92ZVRpbGUuY2FsbCh0aGlzLCBrZXkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdGlsZVJlYWR5OiBmdW5jdGlvbiAoY29vcmRzLCBlcnIsIHRpbGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXAgfHwgKHRpbGUgJiYgdGlsZS5nZXRBdHRyaWJ1dGUoJ3NyYycpID09PSBlbXB0eUltYWdlVXJsKSkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIEdyaWRMYXllci5wcm90b3R5cGUuX3RpbGVSZWFkeS5jYWxsKHRoaXMsIGNvb3JkcywgZXJyLCB0aWxlKTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudGlsZWxheWVyKHVybFRlbXBsYXRlOiBTdHJpbmcsIG9wdGlvbnM/OiBUaWxlTGF5ZXIgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSB0aWxlIGxheWVyIG9iamVjdCBnaXZlbiBhIGBVUkwgdGVtcGxhdGVgIGFuZCBvcHRpb25hbGx5IGFuIG9wdGlvbnMgb2JqZWN0LlxyXG5cclxuICBmdW5jdGlvbiB0aWxlTGF5ZXIodXJsLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFRpbGVMYXllcih1cmwsIG9wdGlvbnMpO1xyXG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBUaWxlTGF5ZXIuV01TXHJcbiAgICogQGluaGVyaXRzIFRpbGVMYXllclxyXG4gICAqIEBha2EgTC5UaWxlTGF5ZXIuV01TXHJcbiAgICogVXNlZCB0byBkaXNwbGF5IFtXTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9NYXBfU2VydmljZSkgc2VydmljZXMgYXMgdGlsZSBsYXllcnMgb24gdGhlIG1hcC4gRXh0ZW5kcyBgVGlsZUxheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBuZXhyYWQgPSBMLnRpbGVMYXllci53bXMoXCJodHRwOi8vbWVzb25ldC5hZ3Jvbi5pYXN0YXRlLmVkdS9jZ2ktYmluL3dtcy9uZXhyYWQvbjByLmNnaVwiLCB7XHJcbiAgICogXHRsYXllcnM6ICduZXhyYWQtbjByLTkwMDkxMycsXHJcbiAgICogXHRmb3JtYXQ6ICdpbWFnZS9wbmcnLFxyXG4gICAqIFx0dHJhbnNwYXJlbnQ6IHRydWUsXHJcbiAgICogXHRhdHRyaWJ1dGlvbjogXCJXZWF0aGVyIGRhdGEgwqkgMjAxMiBJRU0gTmV4cmFkXCJcclxuICAgKiB9KTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIFRpbGVMYXllcldNUyA9IFRpbGVMYXllci5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIFRpbGVMYXllci5XTVMgb3B0aW9uc1xyXG4gIFx0Ly8gSWYgYW55IGN1c3RvbSBvcHRpb25zIG5vdCBkb2N1bWVudGVkIGhlcmUgYXJlIHVzZWQsIHRoZXkgd2lsbCBiZSBzZW50IHRvIHRoZVxyXG4gIFx0Ly8gV01TIHNlcnZlciBhcyBleHRyYSBwYXJhbWV0ZXJzIGluIGVhY2ggcmVxdWVzdCBVUkwuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3JcclxuICBcdC8vIFtub24tc3RhbmRhcmQgdmVuZG9yIFdNUyBwYXJhbWV0ZXJzXShodHRwczovL2RvY3MuZ2Vvc2VydmVyLm9yZy9zdGFibGUvZW4vdXNlci9zZXJ2aWNlcy93bXMvdmVuZG9yLmh0bWwpLlxyXG4gIFx0ZGVmYXVsdFdtc1BhcmFtczoge1xyXG4gIFx0XHRzZXJ2aWNlOiAnV01TJyxcclxuICBcdFx0cmVxdWVzdDogJ0dldE1hcCcsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxheWVyczogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gKioocmVxdWlyZWQpKiogQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgV01TIGxheWVycyB0byBzaG93LlxyXG4gIFx0XHRsYXllcnM6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzdHlsZXM6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFdNUyBzdHlsZXMuXHJcbiAgXHRcdHN0eWxlczogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGZvcm1hdDogU3RyaW5nID0gJ2ltYWdlL2pwZWcnXHJcbiAgXHRcdC8vIFdNUyBpbWFnZSBmb3JtYXQgKHVzZSBgJ2ltYWdlL3BuZydgIGZvciBsYXllcnMgd2l0aCB0cmFuc3BhcmVuY3kpLlxyXG4gIFx0XHRmb3JtYXQ6ICdpbWFnZS9qcGVnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdHJhbnNwYXJlbnQ6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBXTVMgc2VydmljZSB3aWxsIHJldHVybiBpbWFnZXMgd2l0aCB0cmFuc3BhcmVuY3kuXHJcbiAgXHRcdHRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdmVyc2lvbjogU3RyaW5nID0gJzEuMS4xJ1xyXG4gIFx0XHQvLyBWZXJzaW9uIG9mIHRoZSBXTVMgc2VydmljZSB0byB1c2VcclxuICBcdFx0dmVyc2lvbjogJzEuMS4xJ1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gY3JzOiBDUlMgPSBudWxsXHJcbiAgXHRcdC8vIENvb3JkaW5hdGUgUmVmZXJlbmNlIFN5c3RlbSB0byB1c2UgZm9yIHRoZSBXTVMgcmVxdWVzdHMsIGRlZmF1bHRzIHRvXHJcbiAgXHRcdC8vIG1hcCBDUlMuIERvbid0IGNoYW5nZSB0aGlzIGlmIHlvdSdyZSBub3Qgc3VyZSB3aGF0IGl0IG1lYW5zLlxyXG4gIFx0XHRjcnM6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHVwcGVyY2FzZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgV01TIHJlcXVlc3QgcGFyYW1ldGVyIGtleXMgd2lsbCBiZSB1cHBlcmNhc2UuXHJcbiAgXHRcdHVwcGVyY2FzZTogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0dmFyIHdtc1BhcmFtcyA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0V21zUGFyYW1zKTtcclxuXHJcbiAgXHRcdC8vIGFsbCBrZXlzIHRoYXQgYXJlIG5vdCBUaWxlTGF5ZXIgb3B0aW9ucyBnbyB0byBXTVMgcGFyYW1zXHJcbiAgXHRcdGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xyXG4gIFx0XHRcdGlmICghKGkgaW4gdGhpcy5vcHRpb25zKSkge1xyXG4gIFx0XHRcdFx0d21zUGFyYW1zW2ldID0gb3B0aW9uc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dmFyIHJlYWxSZXRpbmEgPSBvcHRpb25zLmRldGVjdFJldGluYSAmJiBCcm93c2VyLnJldGluYSA/IDIgOiAxO1xyXG4gIFx0XHR2YXIgdGlsZVNpemUgPSB0aGlzLmdldFRpbGVTaXplKCk7XHJcbiAgXHRcdHdtc1BhcmFtcy53aWR0aCA9IHRpbGVTaXplLnggKiByZWFsUmV0aW5hO1xyXG4gIFx0XHR3bXNQYXJhbXMuaGVpZ2h0ID0gdGlsZVNpemUueSAqIHJlYWxSZXRpbmE7XHJcblxyXG4gIFx0XHR0aGlzLndtc1BhcmFtcyA9IHdtc1BhcmFtcztcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuXHJcbiAgXHRcdHRoaXMuX2NycyA9IHRoaXMub3B0aW9ucy5jcnMgfHwgbWFwLm9wdGlvbnMuY3JzO1xyXG4gIFx0XHR0aGlzLl93bXNWZXJzaW9uID0gcGFyc2VGbG9hdCh0aGlzLndtc1BhcmFtcy52ZXJzaW9uKTtcclxuXHJcbiAgXHRcdHZhciBwcm9qZWN0aW9uS2V5ID0gdGhpcy5fd21zVmVyc2lvbiA+PSAxLjMgPyAnY3JzJyA6ICdzcnMnO1xyXG4gIFx0XHR0aGlzLndtc1BhcmFtc1twcm9qZWN0aW9uS2V5XSA9IHRoaXMuX2Nycy5jb2RlO1xyXG5cclxuICBcdFx0VGlsZUxheWVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsIG1hcCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGdldFRpbGVVcmw6IGZ1bmN0aW9uIChjb29yZHMpIHtcclxuXHJcbiAgXHRcdHZhciB0aWxlQm91bmRzID0gdGhpcy5fdGlsZUNvb3Jkc1RvTndTZShjb29yZHMpLFxyXG4gIFx0XHQgICAgY3JzID0gdGhpcy5fY3JzLFxyXG4gIFx0XHQgICAgYm91bmRzID0gdG9Cb3VuZHMoY3JzLnByb2plY3QodGlsZUJvdW5kc1swXSksIGNycy5wcm9qZWN0KHRpbGVCb3VuZHNbMV0pKSxcclxuICBcdFx0ICAgIG1pbiA9IGJvdW5kcy5taW4sXHJcbiAgXHRcdCAgICBtYXggPSBib3VuZHMubWF4LFxyXG4gIFx0XHQgICAgYmJveCA9ICh0aGlzLl93bXNWZXJzaW9uID49IDEuMyAmJiB0aGlzLl9jcnMgPT09IEVQU0c0MzI2ID9cclxuICBcdFx0ICAgIFttaW4ueSwgbWluLngsIG1heC55LCBtYXgueF0gOlxyXG4gIFx0XHQgICAgW21pbi54LCBtaW4ueSwgbWF4LngsIG1heC55XSkuam9pbignLCcpLFxyXG4gIFx0XHQgICAgdXJsID0gVGlsZUxheWVyLnByb3RvdHlwZS5nZXRUaWxlVXJsLmNhbGwodGhpcywgY29vcmRzKTtcclxuICBcdFx0cmV0dXJuIHVybCArXHJcbiAgXHRcdFx0Z2V0UGFyYW1TdHJpbmcodGhpcy53bXNQYXJhbXMsIHVybCwgdGhpcy5vcHRpb25zLnVwcGVyY2FzZSkgK1xyXG4gIFx0XHRcdCh0aGlzLm9wdGlvbnMudXBwZXJjYXNlID8gJyZCQk9YPScgOiAnJmJib3g9JykgKyBiYm94O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFBhcmFtcyhwYXJhbXM6IE9iamVjdCwgbm9SZWRyYXc/OiBCb29sZWFuKTogdGhpc1xyXG4gIFx0Ly8gTWVyZ2VzIGFuIG9iamVjdCB3aXRoIHRoZSBuZXcgcGFyYW1ldGVycyBhbmQgcmUtcmVxdWVzdHMgdGlsZXMgb24gdGhlIGN1cnJlbnQgc2NyZWVuICh1bmxlc3MgYG5vUmVkcmF3YCB3YXMgc2V0IHRvIHRydWUpLlxyXG4gIFx0c2V0UGFyYW1zOiBmdW5jdGlvbiAocGFyYW1zLCBub1JlZHJhdykge1xyXG5cclxuICBcdFx0ZXh0ZW5kKHRoaXMud21zUGFyYW1zLCBwYXJhbXMpO1xyXG5cclxuICBcdFx0aWYgKCFub1JlZHJhdykge1xyXG4gIFx0XHRcdHRoaXMucmVkcmF3KCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC50aWxlTGF5ZXIud21zKGJhc2VVcmw6IFN0cmluZywgb3B0aW9uczogVGlsZUxheWVyLldNUyBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIFdNUyB0aWxlIGxheWVyIG9iamVjdCBnaXZlbiBhIGJhc2UgVVJMIG9mIHRoZSBXTVMgc2VydmljZSBhbmQgYSBXTVMgcGFyYW1ldGVycy9vcHRpb25zIG9iamVjdC5cclxuICBmdW5jdGlvbiB0aWxlTGF5ZXJXTVModXJsLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFRpbGVMYXllcldNUyh1cmwsIG9wdGlvbnMpO1xyXG4gIH1cblxuICBUaWxlTGF5ZXIuV01TID0gVGlsZUxheWVyV01TO1xuICB0aWxlTGF5ZXIud21zID0gdGlsZUxheWVyV01TO1xuXG4gIC8qXG4gICAqIEBjbGFzcyBSZW5kZXJlclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJcbiAgICogQGFrYSBMLlJlbmRlcmVyXG4gICAqXG4gICAqIEJhc2UgY2xhc3MgZm9yIHZlY3RvciByZW5kZXJlciBpbXBsZW1lbnRhdGlvbnMgKGBTVkdgLCBgQ2FudmFzYCkuIEhhbmRsZXMgdGhlXG4gICAqIERPTSBjb250YWluZXIgb2YgdGhlIHJlbmRlcmVyLCBpdHMgYm91bmRzLCBhbmQgaXRzIHpvb20gYW5pbWF0aW9uLlxuICAgKlxuICAgKiBBIGBSZW5kZXJlcmAgd29ya3MgYXMgYW4gaW1wbGljaXQgbGF5ZXIgZ3JvdXAgZm9yIGFsbCBgUGF0aGBzIC0gdGhlIHJlbmRlcmVyXG4gICAqIGl0c2VsZiBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCB0byB0aGUgbWFwLiBBbGwgcGF0aHMgdXNlIGEgcmVuZGVyZXIsIHdoaWNoIGNhblxuICAgKiBiZSBpbXBsaWNpdCAodGhlIG1hcCB3aWxsIGRlY2lkZSB0aGUgdHlwZSBvZiByZW5kZXJlciBhbmQgdXNlIGl0IGF1dG9tYXRpY2FsbHkpXG4gICAqIG9yIGV4cGxpY2l0ICh1c2luZyB0aGUgW2ByZW5kZXJlcmBdKCNwYXRoLXJlbmRlcmVyKSBvcHRpb24gb2YgdGhlIHBhdGgpLlxuICAgKlxuICAgKiBEbyBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHksIHVzZSBgU1ZHYCBhbmQgYENhbnZhc2AgaW5zdGVhZC5cbiAgICpcbiAgICogQGV2ZW50IHVwZGF0ZTogRXZlbnRcbiAgICogRmlyZWQgd2hlbiB0aGUgcmVuZGVyZXIgdXBkYXRlcyBpdHMgYm91bmRzLCBjZW50ZXIgYW5kIHpvb20sIGZvciBleGFtcGxlIHdoZW5cbiAgICogaXRzIG1hcCBoYXMgbW92ZWRcbiAgICovXG5cbiAgdmFyIFJlbmRlcmVyID0gTGF5ZXIuZXh0ZW5kKHtcblxuICBcdC8vIEBzZWN0aW9uXG4gIFx0Ly8gQGFrYSBSZW5kZXJlciBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBwYWRkaW5nOiBOdW1iZXIgPSAwLjFcbiAgXHRcdC8vIEhvdyBtdWNoIHRvIGV4dGVuZCB0aGUgY2xpcCBhcmVhIGFyb3VuZCB0aGUgbWFwIHZpZXcgKHJlbGF0aXZlIHRvIGl0cyBzaXplKVxuICBcdFx0Ly8gZS5nLiAwLjEgd291bGQgYmUgMTAlIG9mIG1hcCB2aWV3IGluIGVhY2ggZGlyZWN0aW9uXG4gIFx0XHRwYWRkaW5nOiAwLjFcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIFx0XHRzdGFtcCh0aGlzKTtcbiAgXHRcdHRoaXMuX2xheWVycyA9IHRoaXMuX2xheWVycyB8fCB7fTtcbiAgXHR9LFxuXG4gIFx0b25BZGQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gIFx0XHRcdHRoaXMuX2luaXRDb250YWluZXIoKTsgLy8gZGVmaW5lZCBieSByZW5kZXJlciBpbXBsZW1lbnRhdGlvbnNcblxuICBcdFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC16b29tLWFuaW1hdGVkJyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdFx0dGhpcy5vbigndXBkYXRlJywgdGhpcy5fdXBkYXRlUGF0aHMsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMuX3VwZGF0ZVBhdGhzLCB0aGlzKTtcbiAgXHRcdHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKTtcbiAgXHR9LFxuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0ge1xuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0LFxuICBcdFx0XHR6b29tOiB0aGlzLl9vblpvb20sXG4gIFx0XHRcdG1vdmVlbmQ6IHRoaXMuX3VwZGF0ZSxcbiAgXHRcdFx0em9vbWVuZDogdGhpcy5fb25ab29tRW5kXG4gIFx0XHR9O1xuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xuICBcdFx0XHRldmVudHMuem9vbWFuaW0gPSB0aGlzLl9vbkFuaW1ab29tO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X29uQW5pbVpvb206IGZ1bmN0aW9uIChldikge1xuICBcdFx0dGhpcy5fdXBkYXRlVHJhbnNmb3JtKGV2LmNlbnRlciwgZXYuem9vbSk7XG4gIFx0fSxcblxuICBcdF9vblpvb206IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksIHRoaXMuX21hcC5nZXRab29tKCkpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHpvb20sIHRoaXMuX3pvb20pLFxuICBcdFx0ICAgIHZpZXdIYWxmID0gdGhpcy5fbWFwLmdldFNpemUoKS5tdWx0aXBseUJ5KDAuNSArIHRoaXMub3B0aW9ucy5wYWRkaW5nKSxcbiAgXHRcdCAgICBjdXJyZW50Q2VudGVyUG9pbnQgPSB0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9jZW50ZXIsIHpvb20pLFxuXG4gIFx0XHQgICAgdG9wTGVmdE9mZnNldCA9IHZpZXdIYWxmLm11bHRpcGx5QnkoLXNjYWxlKS5hZGQoY3VycmVudENlbnRlclBvaW50KVxuICBcdFx0XHRcdCAgLnN1YnRyYWN0KHRoaXMuX21hcC5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKSk7XG5cbiAgXHRcdGlmIChCcm93c2VyLmFueTNkKSB7XG4gIFx0XHRcdHNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsIHRvcExlZnRPZmZzZXQsIHNjYWxlKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgdG9wTGVmdE9mZnNldCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0XHR0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fY2VudGVyLCB0aGlzLl96b29tKTtcblxuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3Jlc2V0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vblpvb21FbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHR0aGlzLl9sYXllcnNbaWRdLl9wcm9qZWN0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoczogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyBVcGRhdGUgcGl4ZWwgYm91bmRzIG9mIHJlbmRlcmVyIGNvbnRhaW5lciAoZm9yIHBvc2l0aW9uaW5nL3NpemluZy9jbGlwcGluZyBsYXRlcilcbiAgXHRcdC8vIFN1YmNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIG9mIGZpcmluZyB0aGUgJ3VwZGF0ZScgZXZlbnQuXG4gIFx0XHR2YXIgcCA9IHRoaXMub3B0aW9ucy5wYWRkaW5nLFxuICBcdFx0ICAgIHNpemUgPSB0aGlzLl9tYXAuZ2V0U2l6ZSgpLFxuICBcdFx0ICAgIG1pbiA9IHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChzaXplLm11bHRpcGx5QnkoLXApKS5yb3VuZCgpO1xuXG4gIFx0XHR0aGlzLl9ib3VuZHMgPSBuZXcgQm91bmRzKG1pbiwgbWluLmFkZChzaXplLm11bHRpcGx5QnkoMSArIHAgKiAyKSkucm91bmQoKSk7XG5cbiAgXHRcdHRoaXMuX2NlbnRlciA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKTtcbiAgXHRcdHRoaXMuX3pvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIENhbnZhc1xuICAgKiBAaW5oZXJpdHMgUmVuZGVyZXJcbiAgICogQGFrYSBMLkNhbnZhc1xuICAgKlxuICAgKiBBbGxvd3MgdmVjdG9yIGxheWVycyB0byBiZSBkaXNwbGF5ZWQgd2l0aCBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0NhbnZhc19BUEkpLlxuICAgKiBJbmhlcml0cyBgUmVuZGVyZXJgLlxuICAgKlxuICAgKiBEdWUgdG8gW3RlY2huaWNhbCBsaW1pdGF0aW9uc10oaHR0cHM6Ly9jYW5pdXNlLmNvbS9jYW52YXMpLCBDYW52YXMgaXMgbm90XG4gICAqIGF2YWlsYWJsZSBpbiBhbGwgd2ViIGJyb3dzZXJzLCBub3RhYmx5IElFOCwgYW5kIG92ZXJsYXBwaW5nIGdlb21ldHJpZXMgbWlnaHRcbiAgICogbm90IGRpc3BsYXkgcHJvcGVybHkgaW4gc29tZSBlZGdlIGNhc2VzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBVc2UgQ2FudmFzIGJ5IGRlZmF1bHQgZm9yIGFsbCBwYXRocyBpbiB0aGUgbWFwOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcsIHtcbiAgICogXHRyZW5kZXJlcjogTC5jYW52YXMoKVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIFVzZSBhIENhbnZhcyByZW5kZXJlciB3aXRoIGV4dHJhIHBhZGRpbmcgZm9yIHNwZWNpZmljIHZlY3RvciBnZW9tZXRyaWVzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcpO1xuICAgKiB2YXIgbXlSZW5kZXJlciA9IEwuY2FudmFzKHsgcGFkZGluZzogMC41IH0pO1xuICAgKiB2YXIgbGluZSA9IEwucG9seWxpbmUoIGNvb3JkaW5hdGVzLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogdmFyIGNpcmNsZSA9IEwuY2lyY2xlKCBjZW50ZXIsIHsgcmVuZGVyZXI6IG15UmVuZGVyZXIgfSApO1xuICAgKiBgYGBcbiAgICovXG5cbiAgdmFyIENhbnZhcyA9IFJlbmRlcmVyLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgQ2FudmFzIG9wdGlvbnNcbiAgXHRvcHRpb25zOiB7XG4gIFx0XHQvLyBAb3B0aW9uIHRvbGVyYW5jZTogTnVtYmVyID0gMFxuICBcdFx0Ly8gSG93IG11Y2ggdG8gZXh0ZW5kIHRoZSBjbGljayB0b2xlcmFuY2UgYXJvdW5kIGEgcGF0aC9vYmplY3Qgb24gdGhlIG1hcC5cbiAgXHRcdHRvbGVyYW5jZTogMFxuICBcdH0sXG5cbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBldmVudHMgPSBSZW5kZXJlci5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7XG4gIFx0XHRldmVudHMudmlld3ByZXJlc2V0ID0gdGhpcy5fb25WaWV3UHJlUmVzZXQ7XG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xuICBcdH0sXG5cbiAgXHRfb25WaWV3UHJlUmVzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFNldCBhIGZsYWcgc28gdGhhdCBhIHZpZXdwcmVyZXNldCttb3ZlZW5kK3ZpZXdyZXNldCBvbmx5IHVwZGF0ZXMmcmVkcmF3cyBvbmNlXG4gIFx0XHR0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzID0gdHJ1ZTtcbiAgXHR9LFxuXG4gIFx0b25BZGQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpO1xuXG4gIFx0XHQvLyBSZWRyYXcgdmVjdG9ycyBzaW5jZSBjYW52YXMgaXMgY2xlYXJlZCB1cG9uIHJlbW92YWwsXG4gIFx0XHQvLyBpbiBjYXNlIG9mIHJlbW92aW5nIHRoZSByZW5kZXJlciBpdHNlbGYgZnJvbSB0aGUgbWFwLlxuICBcdFx0dGhpcy5fZHJhdygpO1xuICBcdH0sXG5cbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gIFx0XHRvbihjb250YWluZXIsICdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSwgdGhpcyk7XG4gIFx0XHRvbihjb250YWluZXIsICdjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjb250ZXh0bWVudScsIHRoaXMuX29uQ2xpY2ssIHRoaXMpO1xuICBcdFx0b24oY29udGFpbmVyLCAnbW91c2VvdXQnLCB0aGlzLl9oYW5kbGVNb3VzZU91dCwgdGhpcyk7XG4gIFx0XHRjb250YWluZXJbJ19sZWFmbGV0X2Rpc2FibGVfZXZlbnRzJ10gPSB0cnVlO1xuXG4gIFx0XHR0aGlzLl9jdHggPSBjb250YWluZXIuZ2V0Q29udGV4dCgnMmQnKTtcbiAgXHR9LFxuXG4gIFx0X2Rlc3Ryb3lDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZWRyYXdSZXF1ZXN0KTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jdHg7XG4gIFx0XHRyZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdG9mZih0aGlzLl9jb250YWluZXIpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2NvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGhzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGxheWVyO1xuICBcdFx0dGhpcy5fcmVkcmF3Qm91bmRzID0gbnVsbDtcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHRsYXllciA9IHRoaXMuX2xheWVyc1tpZF07XG4gIFx0XHRcdGxheWVyLl91cGRhdGUoKTtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3JlZHJhdygpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9hbmltYXRpbmdab29tICYmIHRoaXMuX2JvdW5kcykgeyByZXR1cm47IH1cblxuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKTtcblxuICBcdFx0dmFyIGIgPSB0aGlzLl9ib3VuZHMsXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLFxuICBcdFx0ICAgIHNpemUgPSBiLmdldFNpemUoKSxcbiAgXHRcdCAgICBtID0gQnJvd3Nlci5yZXRpbmEgPyAyIDogMTtcblxuICBcdFx0c2V0UG9zaXRpb24oY29udGFpbmVyLCBiLm1pbik7XG5cbiAgXHRcdC8vIHNldCBjYW52YXMgc2l6ZSAoYWxzbyBjbGVhcmluZyBpdCk7IHVzZSBkb3VibGUgc2l6ZSBvbiByZXRpbmFcbiAgXHRcdGNvbnRhaW5lci53aWR0aCA9IG0gKiBzaXplLng7XG4gIFx0XHRjb250YWluZXIuaGVpZ2h0ID0gbSAqIHNpemUueTtcbiAgXHRcdGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IHNpemUueCArICdweCc7XG4gIFx0XHRjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JztcblxuICBcdFx0aWYgKEJyb3dzZXIucmV0aW5hKSB7XG4gIFx0XHRcdHRoaXMuX2N0eC5zY2FsZSgyLCAyKTtcbiAgXHRcdH1cblxuICBcdFx0Ly8gdHJhbnNsYXRlIHNvIHdlIHVzZSB0aGUgc2FtZSBwYXRoIGNvb3JkaW5hdGVzIGFmdGVyIGNhbnZhcyBlbGVtZW50IG1vdmVzXG4gIFx0XHR0aGlzLl9jdHgudHJhbnNsYXRlKC1iLm1pbi54LCAtYi5taW4ueSk7XG5cbiAgXHRcdC8vIFRlbGwgcGF0aHMgdG8gcmVkcmF3IHRoZW1zZWx2ZXNcbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpO1xuXG4gIFx0XHRpZiAodGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocykge1xuICBcdFx0XHR0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzID0gZmFsc2U7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBhdGhzKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pbml0UGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0aGlzLl91cGRhdGVEYXNoQXJyYXkobGF5ZXIpO1xuICBcdFx0dGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV0gPSBsYXllcjtcblxuICBcdFx0dmFyIG9yZGVyID0gbGF5ZXIuX29yZGVyID0ge1xuICBcdFx0XHRsYXllcjogbGF5ZXIsXG4gIFx0XHRcdHByZXY6IHRoaXMuX2RyYXdMYXN0LFxuICBcdFx0XHRuZXh0OiBudWxsXG4gIFx0XHR9O1xuICBcdFx0aWYgKHRoaXMuX2RyYXdMYXN0KSB7IHRoaXMuX2RyYXdMYXN0Lm5leHQgPSBvcmRlcjsgfVxuICBcdFx0dGhpcy5fZHJhd0xhc3QgPSBvcmRlcjtcbiAgXHRcdHRoaXMuX2RyYXdGaXJzdCA9IHRoaXMuX2RyYXdGaXJzdCB8fCB0aGlzLl9kcmF3TGFzdDtcbiAgXHR9LFxuXG4gIFx0X2FkZFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBvcmRlciA9IGxheWVyLl9vcmRlcjtcbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX2RyYXdMYXN0ID0gcHJldjtcbiAgXHRcdH1cbiAgXHRcdGlmIChwcmV2KSB7XG4gIFx0XHRcdHByZXYubmV4dCA9IG5leHQ7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBuZXh0O1xuICBcdFx0fVxuXG4gIFx0XHRkZWxldGUgbGF5ZXIuX29yZGVyO1xuXG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV07XG5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHQvLyBSZWRyYXcgdGhlIHVuaW9uIG9mIHRoZSBsYXllcidzIG9sZCBwaXhlbFxuICBcdFx0Ly8gYm91bmRzIGFuZCB0aGUgbmV3IHBpeGVsIGJvdW5kcy5cbiAgXHRcdHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyhsYXllcik7XG4gIFx0XHRsYXllci5fcHJvamVjdCgpO1xuICBcdFx0bGF5ZXIuX3VwZGF0ZSgpO1xuICBcdFx0Ly8gVGhlIHJlZHJhdyB3aWxsIGV4dGVuZCB0aGUgcmVkcmF3IGJvdW5kc1xuICBcdFx0Ly8gd2l0aCB0aGUgbmV3IHBpeGVsIGJvdW5kcy5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dGhpcy5fdXBkYXRlRGFzaEFycmF5KGxheWVyKTtcbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlRGFzaEFycmF5OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGlmICh0eXBlb2YgbGF5ZXIub3B0aW9ucy5kYXNoQXJyYXkgPT09ICdzdHJpbmcnKSB7XG4gIFx0XHRcdHZhciBwYXJ0cyA9IGxheWVyLm9wdGlvbnMuZGFzaEFycmF5LnNwbGl0KC9bLCBdKy8pLFxuICBcdFx0XHQgICAgZGFzaEFycmF5ID0gW10sXG4gIFx0XHRcdCAgICBkYXNoVmFsdWUsXG4gIFx0XHRcdCAgICBpO1xuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgXHRcdFx0XHRkYXNoVmFsdWUgPSBOdW1iZXIocGFydHNbaV0pO1xuICBcdFx0XHRcdC8vIElnbm9yZSBkYXNoIGFycmF5IGNvbnRhaW5pbmcgaW52YWxpZCBsZW5ndGhzXG4gIFx0XHRcdFx0aWYgKGlzTmFOKGRhc2hWYWx1ZSkpIHsgcmV0dXJuOyB9XG4gIFx0XHRcdFx0ZGFzaEFycmF5LnB1c2goZGFzaFZhbHVlKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgPSBsYXllci5vcHRpb25zLmRhc2hBcnJheTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlcXVlc3RSZWRyYXc6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyhsYXllcik7XG4gIFx0XHR0aGlzLl9yZWRyYXdSZXF1ZXN0ID0gdGhpcy5fcmVkcmF3UmVxdWVzdCB8fCByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3JlZHJhdywgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9leHRlbmRSZWRyYXdCb3VuZHM6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKGxheWVyLl9weEJvdW5kcykge1xuICBcdFx0XHR2YXIgcGFkZGluZyA9IChsYXllci5vcHRpb25zLndlaWdodCB8fCAwKSArIDE7XG4gIFx0XHRcdHRoaXMuX3JlZHJhd0JvdW5kcyA9IHRoaXMuX3JlZHJhd0JvdW5kcyB8fCBuZXcgQm91bmRzKCk7XG4gIFx0XHRcdHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQobGF5ZXIuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbcGFkZGluZywgcGFkZGluZ10pKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZChsYXllci5fcHhCb3VuZHMubWF4LmFkZChbcGFkZGluZywgcGFkZGluZ10pKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVkcmF3UmVxdWVzdCA9IG51bGw7XG5cbiAgXHRcdGlmICh0aGlzLl9yZWRyYXdCb3VuZHMpIHtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLm1heC5fY2VpbCgpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9jbGVhcigpOyAvLyBjbGVhciBsYXllcnMgaW4gcmVkcmF3IGJvdW5kc1xuICBcdFx0dGhpcy5fZHJhdygpOyAvLyBkcmF3IGxheWVyc1xuXG4gIFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMgPSBudWxsO1xuICBcdH0sXG5cbiAgXHRfY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLl9yZWRyYXdCb3VuZHM7XG4gIFx0XHRpZiAoYm91bmRzKSB7XG4gIFx0XHRcdHZhciBzaXplID0gYm91bmRzLmdldFNpemUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsZWFyUmVjdChib3VuZHMubWluLngsIGJvdW5kcy5taW4ueSwgc2l6ZS54LCBzaXplLnkpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fY3R4LnNhdmUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl9jb250YWluZXIud2lkdGgsIHRoaXMuX2NvbnRhaW5lci5oZWlnaHQpO1xuICBcdFx0XHR0aGlzLl9jdHgucmVzdG9yZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGxheWVyLCBib3VuZHMgPSB0aGlzLl9yZWRyYXdCb3VuZHM7XG4gIFx0XHR0aGlzLl9jdHguc2F2ZSgpO1xuICBcdFx0aWYgKGJvdW5kcykge1xuICBcdFx0XHR2YXIgc2l6ZSA9IGJvdW5kcy5nZXRTaXplKCk7XG4gIFx0XHRcdHRoaXMuX2N0eC5iZWdpblBhdGgoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LnJlY3QoYm91bmRzLm1pbi54LCBib3VuZHMubWluLnksIHNpemUueCwgc2l6ZS55KTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsaXAoKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fZHJhd2luZyA9IHRydWU7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmICghYm91bmRzIHx8IChsYXllci5fcHhCb3VuZHMgJiYgbGF5ZXIuX3B4Qm91bmRzLmludGVyc2VjdHMoYm91bmRzKSkpIHtcbiAgXHRcdFx0XHRsYXllci5fdXBkYXRlUGF0aCgpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2RyYXdpbmcgPSBmYWxzZTtcblxuICBcdFx0dGhpcy5fY3R4LnJlc3RvcmUoKTsgIC8vIFJlc3RvcmUgc3RhdGUgYmVmb3JlIGNsaXBwaW5nLlxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUG9seTogZnVuY3Rpb24gKGxheWVyLCBjbG9zZWQpIHtcbiAgXHRcdGlmICghdGhpcy5fZHJhd2luZykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGksIGosIGxlbjIsIHAsXG4gIFx0XHQgICAgcGFydHMgPSBsYXllci5fcGFydHMsXG4gIFx0XHQgICAgbGVuID0gcGFydHMubGVuZ3RoLFxuICBcdFx0ICAgIGN0eCA9IHRoaXMuX2N0eDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGN0eC5iZWdpblBhdGgoKTtcblxuICBcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwYXJ0c1tpXS5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHtcbiAgXHRcdFx0XHRwID0gcGFydHNbaV1bal07XG4gIFx0XHRcdFx0Y3R4W2ogPyAnbGluZVRvJyA6ICdtb3ZlVG8nXShwLngsIHAueSk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0aWYgKGNsb3NlZCkge1xuICBcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9maWxsU3Ryb2tlKGN0eCwgbGF5ZXIpO1xuXG4gIFx0XHQvLyBUT0RPIG9wdGltaXphdGlvbjogMSBmaWxsL3N0cm9rZSBmb3IgYWxsIGZlYXR1cmVzIHdpdGggZXF1YWwgc3R5bGUgaW5zdGVhZCBvZiAxIGZvciBlYWNoIGZlYXR1cmVcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUNpcmNsZTogZnVuY3Rpb24gKGxheWVyKSB7XG5cbiAgXHRcdGlmICghdGhpcy5fZHJhd2luZyB8fCBsYXllci5fZW1wdHkoKSkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQsXG4gIFx0XHQgICAgY3R4ID0gdGhpcy5fY3R4LFxuICBcdFx0ICAgIHIgPSBNYXRoLm1heChNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXMpLCAxKSxcbiAgXHRcdCAgICBzID0gKE1hdGgubWF4KE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kpLCAxKSB8fCByKSAvIHI7XG5cbiAgXHRcdGlmIChzICE9PSAxKSB7XG4gIFx0XHRcdGN0eC5zYXZlKCk7XG4gIFx0XHRcdGN0eC5zY2FsZSgxLCBzKTtcbiAgXHRcdH1cblxuICBcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuICBcdFx0Y3R4LmFyYyhwLngsIHAueSAvIHMsIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG5cbiAgXHRcdGlmIChzICE9PSAxKSB7XG4gIFx0XHRcdGN0eC5yZXN0b3JlKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2ZpbGxTdHJva2UoY3R4LCBsYXllcik7XG4gIFx0fSxcblxuICBcdF9maWxsU3Ryb2tlOiBmdW5jdGlvbiAoY3R4LCBsYXllcikge1xuICBcdFx0dmFyIG9wdGlvbnMgPSBsYXllci5vcHRpb25zO1xuXG4gIFx0XHRpZiAob3B0aW9ucy5maWxsKSB7XG4gIFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IG9wdGlvbnMuZmlsbE9wYWNpdHk7XG4gIFx0XHRcdGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRjdHguZmlsbChvcHRpb25zLmZpbGxSdWxlIHx8ICdldmVub2RkJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLnN0cm9rZSAmJiBvcHRpb25zLndlaWdodCAhPT0gMCkge1xuICBcdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG4gIFx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGxheWVyLm9wdGlvbnMgJiYgbGF5ZXIub3B0aW9ucy5fZGFzaEFycmF5IHx8IFtdKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm9wYWNpdHk7XG4gIFx0XHRcdGN0eC5saW5lV2lkdGggPSBvcHRpb25zLndlaWdodDtcbiAgXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5jb2xvcjtcbiAgXHRcdFx0Y3R4LmxpbmVDYXAgPSBvcHRpb25zLmxpbmVDYXA7XG4gIFx0XHRcdGN0eC5saW5lSm9pbiA9IG9wdGlvbnMubGluZUpvaW47XG4gIFx0XHRcdGN0eC5zdHJva2UoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Ly8gQ2FudmFzIG9idmlvdXNseSBkb2Vzbid0IGhhdmUgbW91c2UgZXZlbnRzIGZvciBpbmRpdmlkdWFsIGRyYXduIG9iamVjdHMsXG4gIFx0Ly8gc28gd2UgZW11bGF0ZSB0aGF0IGJ5IGNhbGN1bGF0aW5nIHdoYXQncyB1bmRlciB0aGUgbW91c2Ugb24gbW91c2Vtb3ZlL2NsaWNrIG1hbnVhbGx5XG5cbiAgXHRfb25DbGljazogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBwb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpLCBsYXllciwgY2xpY2tlZExheWVyO1xuXG4gIFx0XHRmb3IgKHZhciBvcmRlciA9IHRoaXMuX2RyYXdGaXJzdDsgb3JkZXI7IG9yZGVyID0gb3JkZXIubmV4dCkge1xuICBcdFx0XHRsYXllciA9IG9yZGVyLmxheWVyO1xuICBcdFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiBsYXllci5fY29udGFpbnNQb2ludChwb2ludCkpIHtcbiAgXHRcdFx0XHRpZiAoIShlLnR5cGUgPT09ICdjbGljaycgfHwgZS50eXBlID09PSAncHJlY2xpY2snKSB8fCAhdGhpcy5fbWFwLl9kcmFnZ2FibGVNb3ZlZChsYXllcikpIHtcbiAgXHRcdFx0XHRcdGNsaWNrZWRMYXllciA9IGxheWVyO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0dGhpcy5fZmlyZUV2ZW50KGNsaWNrZWRMYXllciA/IFtjbGlja2VkTGF5ZXJdIDogZmFsc2UsIGUpO1xuICBcdH0sXG5cbiAgXHRfb25Nb3VzZU1vdmU6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCB8fCB0aGlzLl9tYXAuZHJhZ2dpbmcubW92aW5nKCkgfHwgdGhpcy5fbWFwLl9hbmltYXRpbmdab29tKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgcG9pbnQgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludChlKTtcbiAgXHRcdHRoaXMuX2hhbmRsZU1vdXNlSG92ZXIoZSwgcG9pbnQpO1xuICBcdH0sXG5cblxuICBcdF9oYW5kbGVNb3VzZU91dDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBsYXllciA9IHRoaXMuX2hvdmVyZWRMYXllcjtcbiAgXHRcdGlmIChsYXllcikge1xuICBcdFx0XHQvLyBpZiB3ZSdyZSBsZWF2aW5nIHRoZSBsYXllciwgZmlyZSBtb3VzZW91dFxuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWludGVyYWN0aXZlJyk7XG4gIFx0XHRcdHRoaXMuX2ZpcmVFdmVudChbbGF5ZXJdLCBlLCAnbW91c2VvdXQnKTtcbiAgXHRcdFx0dGhpcy5faG92ZXJlZExheWVyID0gbnVsbDtcbiAgXHRcdFx0dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCA9IGZhbHNlO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfaGFuZGxlTW91c2VIb3ZlcjogZnVuY3Rpb24gKGUsIHBvaW50KSB7XG4gIFx0XHRpZiAodGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBsYXllciwgY2FuZGlkYXRlSG92ZXJlZExheWVyO1xuXG4gIFx0XHRmb3IgKHZhciBvcmRlciA9IHRoaXMuX2RyYXdGaXJzdDsgb3JkZXI7IG9yZGVyID0gb3JkZXIubmV4dCkge1xuICBcdFx0XHRsYXllciA9IG9yZGVyLmxheWVyO1xuICBcdFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiBsYXllci5fY29udGFpbnNQb2ludChwb2ludCkpIHtcbiAgXHRcdFx0XHRjYW5kaWRhdGVIb3ZlcmVkTGF5ZXIgPSBsYXllcjtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRpZiAoY2FuZGlkYXRlSG92ZXJlZExheWVyICE9PSB0aGlzLl9ob3ZlcmVkTGF5ZXIpIHtcbiAgXHRcdFx0dGhpcy5faGFuZGxlTW91c2VPdXQoZSk7XG5cbiAgXHRcdFx0aWYgKGNhbmRpZGF0ZUhvdmVyZWRMYXllcikge1xuICBcdFx0XHRcdGFkZENsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTsgLy8gY2hhbmdlIGN1cnNvclxuICBcdFx0XHRcdHRoaXMuX2ZpcmVFdmVudChbY2FuZGlkYXRlSG92ZXJlZExheWVyXSwgZSwgJ21vdXNlb3ZlcicpO1xuICBcdFx0XHRcdHRoaXMuX2hvdmVyZWRMYXllciA9IGNhbmRpZGF0ZUhvdmVyZWRMYXllcjtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9maXJlRXZlbnQodGhpcy5faG92ZXJlZExheWVyID8gW3RoaXMuX2hvdmVyZWRMYXllcl0gOiBmYWxzZSwgZSk7XG5cbiAgXHRcdHRoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQgPSB0cnVlO1xuICBcdFx0c2V0VGltZW91dChiaW5kKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCA9IGZhbHNlO1xuICBcdFx0fSwgdGhpcyksIDMyKTtcbiAgXHR9LFxuXG4gIFx0X2ZpcmVFdmVudDogZnVuY3Rpb24gKGxheWVycywgZSwgdHlwZSkge1xuICBcdFx0dGhpcy5fbWFwLl9maXJlRE9NRXZlbnQoZSwgdHlwZSB8fCBlLnR5cGUsIGxheWVycyk7XG4gIFx0fSxcblxuICBcdF9icmluZ1RvRnJvbnQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIG9yZGVyID0gbGF5ZXIuX29yZGVyO1xuXG4gIFx0XHRpZiAoIW9yZGVyKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgbmV4dCA9IG9yZGVyLm5leHQ7XG4gIFx0XHR2YXIgcHJldiA9IG9yZGVyLnByZXY7XG5cbiAgXHRcdGlmIChuZXh0KSB7XG4gIFx0XHRcdG5leHQucHJldiA9IHByZXY7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHQvLyBBbHJlYWR5IGxhc3RcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuICBcdFx0aWYgKHByZXYpIHtcbiAgXHRcdFx0cHJldi5uZXh0ID0gbmV4dDtcbiAgXHRcdH0gZWxzZSBpZiAobmV4dCkge1xuICBcdFx0XHQvLyBVcGRhdGUgZmlyc3QgZW50cnkgdW5sZXNzIHRoaXMgaXMgdGhlXG4gIFx0XHRcdC8vIHNpbmdsZSBlbnRyeVxuICBcdFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBuZXh0O1xuICBcdFx0fVxuXG4gIFx0XHRvcmRlci5wcmV2ID0gdGhpcy5fZHJhd0xhc3Q7XG4gIFx0XHR0aGlzLl9kcmF3TGFzdC5uZXh0ID0gb3JkZXI7XG5cbiAgXHRcdG9yZGVyLm5leHQgPSBudWxsO1xuICBcdFx0dGhpcy5fZHJhd0xhc3QgPSBvcmRlcjtcblxuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF9icmluZ1RvQmFjazogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgb3JkZXIgPSBsYXllci5fb3JkZXI7XG5cbiAgXHRcdGlmICghb3JkZXIpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKHByZXYpIHtcbiAgXHRcdFx0cHJldi5uZXh0ID0gbmV4dDtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEFscmVhZHkgZmlyc3RcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSBpZiAocHJldikge1xuICBcdFx0XHQvLyBVcGRhdGUgbGFzdCBlbnRyeSB1bmxlc3MgdGhpcyBpcyB0aGVcbiAgXHRcdFx0Ly8gc2luZ2xlIGVudHJ5XG4gIFx0XHRcdHRoaXMuX2RyYXdMYXN0ID0gcHJldjtcbiAgXHRcdH1cblxuICBcdFx0b3JkZXIucHJldiA9IG51bGw7XG5cbiAgXHRcdG9yZGVyLm5leHQgPSB0aGlzLl9kcmF3Rmlyc3Q7XG4gIFx0XHR0aGlzLl9kcmF3Rmlyc3QucHJldiA9IG9yZGVyO1xuICBcdFx0dGhpcy5fZHJhd0ZpcnN0ID0gb3JkZXI7XG5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5jYW52YXMob3B0aW9ucz86IFJlbmRlcmVyIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYSBDYW52YXMgcmVuZGVyZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgZnVuY3Rpb24gY2FudmFzKG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gQnJvd3Nlci5jYW52YXMgPyBuZXcgQ2FudmFzKG9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIC8qXG4gICAqIFRoYW5rcyB0byBEbWl0cnkgQmFyYW5vdnNreSBhbmQgaGlzIFJhcGhhZWwgbGlicmFyeSBmb3IgaW5zcGlyYXRpb24hXG4gICAqL1xuXG5cbiAgdmFyIHZtbENyZWF0ZSA9IChmdW5jdGlvbiAoKSB7XG4gIFx0dHJ5IHtcbiAgXHRcdGRvY3VtZW50Lm5hbWVzcGFjZXMuYWRkKCdsdm1sJywgJ3VybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sJyk7XG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzxsdm1sOicgKyBuYW1lICsgJyBjbGFzcz1cImx2bWxcIj4nKTtcbiAgXHRcdH07XG4gIFx0fSBjYXRjaCAoZSkge1xuICBcdFx0Ly8gRG8gbm90IHJldHVybiBmbiBmcm9tIGNhdGNoIGJsb2NrIHNvIGBlYCBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L3B1bGwvNzI3OVxuICBcdH1cbiAgXHRyZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCc8JyArIG5hbWUgKyAnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cImx2bWxcIj4nKTtcbiAgXHR9O1xuICB9KSgpO1xuXG5cbiAgLypcbiAgICogQGNsYXNzIFNWR1xuICAgKlxuICAgKlxuICAgKiBWTUwgd2FzIGRlcHJlY2F0ZWQgaW4gMjAxMiwgd2hpY2ggbWVhbnMgVk1MIGZ1bmN0aW9uYWxpdHkgZXhpc3RzIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAqIHdpdGggb2xkIHZlcnNpb25zIG9mIEludGVybmV0IEV4cGxvcmVyLlxuICAgKi9cblxuICAvLyBtaXhpbiB0byByZWRlZmluZSBzb21lIFNWRyBtZXRob2RzIHRvIGhhbmRsZSBWTUwgc3ludGF4IHdoaWNoIGlzIHNpbWlsYXIgYnV0IHdpdGggc29tZSBkaWZmZXJlbmNlc1xuICB2YXIgdm1sTWl4aW4gPSB7XG5cbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LXZtbC1jb250YWluZXInKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSkgeyByZXR1cm47IH1cbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7XG4gIFx0XHR0aGlzLmZpcmUoJ3VwZGF0ZScpO1xuICBcdH0sXG5cbiAgXHRfaW5pdFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIGNvbnRhaW5lciA9IGxheWVyLl9jb250YWluZXIgPSB2bWxDcmVhdGUoJ3NoYXBlJyk7XG5cbiAgXHRcdGFkZENsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdm1sLXNoYXBlICcgKyAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSB8fCAnJykpO1xuXG4gIFx0XHRjb250YWluZXIuY29vcmRzaXplID0gJzEgMSc7XG5cbiAgXHRcdGxheWVyLl9wYXRoID0gdm1sQ3JlYXRlKCdwYXRoJyk7XG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQobGF5ZXIuX3BhdGgpO1xuXG4gIFx0XHR0aGlzLl91cGRhdGVTdHlsZShsYXllcik7XG4gIFx0XHR0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXSA9IGxheWVyO1xuICBcdH0sXG5cbiAgXHRfYWRkUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gbGF5ZXIuX2NvbnRhaW5lcjtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXG4gIFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xuICBcdFx0XHRsYXllci5hZGRJbnRlcmFjdGl2ZVRhcmdldChjb250YWluZXIpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVtb3ZlUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gbGF5ZXIuX2NvbnRhaW5lcjtcbiAgXHRcdHJlbW92ZShjb250YWluZXIpO1xuICBcdFx0bGF5ZXIucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQoY29udGFpbmVyKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVN0eWxlOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBzdHJva2UgPSBsYXllci5fc3Ryb2tlLFxuICBcdFx0ICAgIGZpbGwgPSBsYXllci5fZmlsbCxcbiAgXHRcdCAgICBvcHRpb25zID0gbGF5ZXIub3B0aW9ucyxcbiAgXHRcdCAgICBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuXG4gIFx0XHRjb250YWluZXIuc3Ryb2tlZCA9ICEhb3B0aW9ucy5zdHJva2U7XG4gIFx0XHRjb250YWluZXIuZmlsbGVkID0gISFvcHRpb25zLmZpbGw7XG5cbiAgXHRcdGlmIChvcHRpb25zLnN0cm9rZSkge1xuICBcdFx0XHRpZiAoIXN0cm9rZSkge1xuICBcdFx0XHRcdHN0cm9rZSA9IGxheWVyLl9zdHJva2UgPSB2bWxDcmVhdGUoJ3N0cm9rZScpO1xuICBcdFx0XHR9XG4gIFx0XHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChzdHJva2UpO1xuICBcdFx0XHRzdHJva2Uud2VpZ2h0ID0gb3B0aW9ucy53ZWlnaHQgKyAncHgnO1xuICBcdFx0XHRzdHJva2UuY29sb3IgPSBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRzdHJva2Uub3BhY2l0eSA9IG9wdGlvbnMub3BhY2l0eTtcblxuICBcdFx0XHRpZiAob3B0aW9ucy5kYXNoQXJyYXkpIHtcbiAgXHRcdFx0XHRzdHJva2UuZGFzaFN0eWxlID0gaXNBcnJheShvcHRpb25zLmRhc2hBcnJheSkgP1xuICBcdFx0XHRcdCAgICBvcHRpb25zLmRhc2hBcnJheS5qb2luKCcgJykgOlxuICBcdFx0XHRcdCAgICBvcHRpb25zLmRhc2hBcnJheS5yZXBsYWNlKC8oICosICopL2csICcgJyk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0c3Ryb2tlLmRhc2hTdHlsZSA9ICcnO1xuICBcdFx0XHR9XG4gIFx0XHRcdHN0cm9rZS5lbmRjYXAgPSBvcHRpb25zLmxpbmVDYXAucmVwbGFjZSgnYnV0dCcsICdmbGF0Jyk7XG4gIFx0XHRcdHN0cm9rZS5qb2luc3R5bGUgPSBvcHRpb25zLmxpbmVKb2luO1xuXG4gIFx0XHR9IGVsc2UgaWYgKHN0cm9rZSkge1xuICBcdFx0XHRjb250YWluZXIucmVtb3ZlQ2hpbGQoc3Ryb2tlKTtcbiAgXHRcdFx0bGF5ZXIuX3N0cm9rZSA9IG51bGw7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLmZpbGwpIHtcbiAgXHRcdFx0aWYgKCFmaWxsKSB7XG4gIFx0XHRcdFx0ZmlsbCA9IGxheWVyLl9maWxsID0gdm1sQ3JlYXRlKCdmaWxsJyk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKGZpbGwpO1xuICBcdFx0XHRmaWxsLmNvbG9yID0gb3B0aW9ucy5maWxsQ29sb3IgfHwgb3B0aW9ucy5jb2xvcjtcbiAgXHRcdFx0ZmlsbC5vcGFjaXR5ID0gb3B0aW9ucy5maWxsT3BhY2l0eTtcblxuICBcdFx0fSBlbHNlIGlmIChmaWxsKSB7XG4gIFx0XHRcdGNvbnRhaW5lci5yZW1vdmVDaGlsZChmaWxsKTtcbiAgXHRcdFx0bGF5ZXIuX2ZpbGwgPSBudWxsO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlQ2lyY2xlOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBwID0gbGF5ZXIuX3BvaW50LnJvdW5kKCksXG4gIFx0XHQgICAgciA9IE1hdGgucm91bmQobGF5ZXIuX3JhZGl1cyksXG4gIFx0XHQgICAgcjIgPSBNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXNZIHx8IHIpO1xuXG4gIFx0XHR0aGlzLl9zZXRQYXRoKGxheWVyLCBsYXllci5fZW1wdHkoKSA/ICdNMCAwJyA6XG4gIFx0XHRcdCdBTCAnICsgcC54ICsgJywnICsgcC55ICsgJyAnICsgciArICcsJyArIHIyICsgJyAwLCcgKyAoNjU1MzUgKiAzNjApKTtcbiAgXHR9LFxuXG4gIFx0X3NldFBhdGg6IGZ1bmN0aW9uIChsYXllciwgcGF0aCkge1xuICBcdFx0bGF5ZXIuX3BhdGgudiA9IHBhdGg7XG4gIFx0fSxcblxuICBcdF9icmluZ1RvRnJvbnQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9Gcm9udChsYXllci5fY29udGFpbmVyKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9CYWNrOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHRvQmFjayhsYXllci5fY29udGFpbmVyKTtcbiAgXHR9XG4gIH07XG5cbiAgdmFyIGNyZWF0ZSA9IEJyb3dzZXIudm1sID8gdm1sQ3JlYXRlIDogc3ZnQ3JlYXRlO1xuXG4gIC8qXG4gICAqIEBjbGFzcyBTVkdcbiAgICogQGluaGVyaXRzIFJlbmRlcmVyXG4gICAqIEBha2EgTC5TVkdcbiAgICpcbiAgICogQWxsb3dzIHZlY3RvciBsYXllcnMgdG8gYmUgZGlzcGxheWVkIHdpdGggW1NWR10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHKS5cbiAgICogSW5oZXJpdHMgYFJlbmRlcmVyYC5cbiAgICpcbiAgICogRHVlIHRvIFt0ZWNobmljYWwgbGltaXRhdGlvbnNdKGh0dHBzOi8vY2FuaXVzZS5jb20vc3ZnKSwgU1ZHIGlzIG5vdFxuICAgKiBhdmFpbGFibGUgaW4gYWxsIHdlYiBicm93c2Vycywgbm90YWJseSBBbmRyb2lkIDIueCBhbmQgMy54LlxuICAgKlxuICAgKiBBbHRob3VnaCBTVkcgaXMgbm90IGF2YWlsYWJsZSBvbiBJRTcgYW5kIElFOCwgdGhlc2UgYnJvd3NlcnMgc3VwcG9ydFxuICAgKiBbVk1MXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WZWN0b3JfTWFya3VwX0xhbmd1YWdlKVxuICAgKiAoYSBub3cgZGVwcmVjYXRlZCB0ZWNobm9sb2d5KSwgYW5kIHRoZSBTVkcgcmVuZGVyZXIgd2lsbCBmYWxsIGJhY2sgdG8gVk1MIGluXG4gICAqIHRoaXMgY2FzZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVXNlIFNWRyBieSBkZWZhdWx0IGZvciBhbGwgcGF0aHMgaW4gdGhlIG1hcDpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnLCB7XG4gICAqIFx0cmVuZGVyZXI6IEwuc3ZnKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBVc2UgYSBTVkcgcmVuZGVyZXIgd2l0aCBleHRyYSBwYWRkaW5nIGZvciBzcGVjaWZpYyB2ZWN0b3IgZ2VvbWV0cmllczpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnKTtcbiAgICogdmFyIG15UmVuZGVyZXIgPSBMLnN2Zyh7IHBhZGRpbmc6IDAuNSB9KTtcbiAgICogdmFyIGxpbmUgPSBMLnBvbHlsaW5lKCBjb29yZGluYXRlcywgeyByZW5kZXJlcjogbXlSZW5kZXJlciB9ICk7XG4gICAqIHZhciBjaXJjbGUgPSBMLmNpcmNsZSggY2VudGVyLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTVkcgPSBSZW5kZXJlci5leHRlbmQoe1xuXG4gIFx0X2luaXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSgnc3ZnJyk7XG5cbiAgXHRcdC8vIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNsaWNrIHRocm91Z2ggc3ZnIHJvb3Q7IHdlJ2xsIHJlc2V0IGl0IGJhY2sgaW4gaW5kaXZpZHVhbCBwYXRoc1xuICBcdFx0dGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuXG4gIFx0XHR0aGlzLl9yb290R3JvdXAgPSBjcmVhdGUoJ2cnKTtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yb290R3JvdXApO1xuICBcdH0sXG5cbiAgXHRfZGVzdHJveUNvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRvZmYodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250YWluZXI7XG4gIFx0XHRkZWxldGUgdGhpcy5fcm9vdEdyb3VwO1xuICBcdFx0ZGVsZXRlIHRoaXMuX3N2Z1NpemU7XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20gJiYgdGhpcy5fYm91bmRzKSB7IHJldHVybjsgfVxuXG4gIFx0XHRSZW5kZXJlci5wcm90b3R5cGUuX3VwZGF0ZS5jYWxsKHRoaXMpO1xuXG4gIFx0XHR2YXIgYiA9IHRoaXMuX2JvdW5kcyxcbiAgXHRcdCAgICBzaXplID0gYi5nZXRTaXplKCksXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xuXG4gIFx0XHQvLyBzZXQgc2l6ZSBvZiBzdmctY29udGFpbmVyIGlmIGNoYW5nZWRcbiAgXHRcdGlmICghdGhpcy5fc3ZnU2l6ZSB8fCAhdGhpcy5fc3ZnU2l6ZS5lcXVhbHMoc2l6ZSkpIHtcbiAgXHRcdFx0dGhpcy5fc3ZnU2l6ZSA9IHNpemU7XG4gIFx0XHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgc2l6ZS54KTtcbiAgXHRcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgc2l6ZS55KTtcbiAgXHRcdH1cblxuICBcdFx0Ly8gbW92ZW1lbnQ6IHVwZGF0ZSBjb250YWluZXIgdmlld0JveCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY2hhbmdlIGNvb3JkaW5hdGVzIG9mIGluZGl2aWR1YWwgbGF5ZXJzXG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIGIubWluKTtcbiAgXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCBbYi5taW4ueCwgYi5taW4ueSwgc2l6ZS54LCBzaXplLnldLmpvaW4oJyAnKSk7XG5cbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdC8vIG1ldGhvZHMgYmVsb3cgYXJlIGNhbGxlZCBieSB2ZWN0b3IgbGF5ZXJzIGltcGxlbWVudGF0aW9uc1xuXG4gIFx0X2luaXRQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBwYXRoID0gbGF5ZXIuX3BhdGggPSBjcmVhdGUoJ3BhdGgnKTtcblxuICBcdFx0Ly8gQG5hbWVzcGFjZSBQYXRoXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gbnVsbFxuICBcdFx0Ly8gQ3VzdG9tIGNsYXNzIG5hbWUgc2V0IG9uIGFuIGVsZW1lbnQuIE9ubHkgZm9yIFNWRyByZW5kZXJlci5cbiAgXHRcdGlmIChsYXllci5vcHRpb25zLmNsYXNzTmFtZSkge1xuICBcdFx0XHRhZGRDbGFzcyhwYXRoLCBsYXllci5vcHRpb25zLmNsYXNzTmFtZSk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlKSB7XG4gIFx0XHRcdGFkZENsYXNzKHBhdGgsICdsZWFmbGV0LWludGVyYWN0aXZlJyk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZVN0eWxlKGxheWVyKTtcbiAgXHRcdHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildID0gbGF5ZXI7XG4gIFx0fSxcblxuICBcdF9hZGRQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGlmICghdGhpcy5fcm9vdEdyb3VwKSB7IHRoaXMuX2luaXRDb250YWluZXIoKTsgfVxuICBcdFx0dGhpcy5fcm9vdEdyb3VwLmFwcGVuZENoaWxkKGxheWVyLl9wYXRoKTtcbiAgXHRcdGxheWVyLmFkZEludGVyYWN0aXZlVGFyZ2V0KGxheWVyLl9wYXRoKTtcbiAgXHR9LFxuXG4gIFx0X3JlbW92ZVBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0cmVtb3ZlKGxheWVyLl9wYXRoKTtcbiAgXHRcdGxheWVyLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KGxheWVyLl9wYXRoKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0bGF5ZXIuX3Byb2plY3QoKTtcbiAgXHRcdGxheWVyLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVN0eWxlOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBwYXRoID0gbGF5ZXIuX3BhdGgsXG4gIFx0XHQgICAgb3B0aW9ucyA9IGxheWVyLm9wdGlvbnM7XG5cbiAgXHRcdGlmICghcGF0aCkgeyByZXR1cm47IH1cblxuICBcdFx0aWYgKG9wdGlvbnMuc3Ryb2tlKSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCBvcHRpb25zLmNvbG9yKTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1vcGFjaXR5Jywgb3B0aW9ucy5vcGFjaXR5KTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIG9wdGlvbnMud2VpZ2h0KTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgb3B0aW9ucy5saW5lQ2FwKTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lam9pbicsIG9wdGlvbnMubGluZUpvaW4pO1xuXG4gIFx0XHRcdGlmIChvcHRpb25zLmRhc2hBcnJheSkge1xuICBcdFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtZGFzaGFycmF5Jywgb3B0aW9ucy5kYXNoQXJyYXkpO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdHBhdGgucmVtb3ZlQXR0cmlidXRlKCdzdHJva2UtZGFzaGFycmF5Jyk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHRpZiAob3B0aW9ucy5kYXNoT2Zmc2V0KSB7XG4gIFx0XHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jywgb3B0aW9ucy5kYXNoT2Zmc2V0KTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRwYXRoLnJlbW92ZUF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hvZmZzZXQnKTtcbiAgXHRcdFx0fVxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICdub25lJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLmZpbGwpIHtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yKTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsIG9wdGlvbnMuZmlsbE9wYWNpdHkpO1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbC1ydWxlJywgb3B0aW9ucy5maWxsUnVsZSB8fCAnZXZlbm9kZCcpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUG9seTogZnVuY3Rpb24gKGxheWVyLCBjbG9zZWQpIHtcbiAgXHRcdHRoaXMuX3NldFBhdGgobGF5ZXIsIHBvaW50c1RvUGF0aChsYXllci5fcGFydHMsIGNsb3NlZCkpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlQ2lyY2xlOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBwID0gbGF5ZXIuX3BvaW50LFxuICBcdFx0ICAgIHIgPSBNYXRoLm1heChNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXMpLCAxKSxcbiAgXHRcdCAgICByMiA9IE1hdGgubWF4KE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kpLCAxKSB8fCByLFxuICBcdFx0ICAgIGFyYyA9ICdhJyArIHIgKyAnLCcgKyByMiArICcgMCAxLDAgJztcblxuICBcdFx0Ly8gZHJhd2luZyBhIGNpcmNsZSB3aXRoIHR3byBoYWxmLWFyY3NcbiAgXHRcdHZhciBkID0gbGF5ZXIuX2VtcHR5KCkgPyAnTTAgMCcgOlxuICBcdFx0XHQnTScgKyAocC54IC0gcikgKyAnLCcgKyBwLnkgK1xuICBcdFx0XHRhcmMgKyAociAqIDIpICsgJywwICcgK1xuICBcdFx0XHRhcmMgKyAoLXIgKiAyKSArICcsMCAnO1xuXG4gIFx0XHR0aGlzLl9zZXRQYXRoKGxheWVyLCBkKTtcbiAgXHR9LFxuXG4gIFx0X3NldFBhdGg6IGZ1bmN0aW9uIChsYXllciwgcGF0aCkge1xuICBcdFx0bGF5ZXIuX3BhdGguc2V0QXR0cmlidXRlKCdkJywgcGF0aCk7XG4gIFx0fSxcblxuICBcdC8vIFNWRyBkb2VzIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIHpJbmRleCBzbyB3ZSByZXNvcnQgdG8gY2hhbmdpbmcgdGhlIERPTSBvcmRlciBvZiBlbGVtZW50c1xuICBcdF9icmluZ1RvRnJvbnQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9Gcm9udChsYXllci5fcGF0aCk7XG4gIFx0fSxcblxuICBcdF9icmluZ1RvQmFjazogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0b0JhY2sobGF5ZXIuX3BhdGgpO1xuICBcdH1cbiAgfSk7XG5cbiAgaWYgKEJyb3dzZXIudm1sKSB7XG4gIFx0U1ZHLmluY2x1ZGUodm1sTWl4aW4pO1xuICB9XG5cbiAgLy8gQG5hbWVzcGFjZSBTVkdcbiAgLy8gQGZhY3RvcnkgTC5zdmcob3B0aW9ucz86IFJlbmRlcmVyIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYSBTVkcgcmVuZGVyZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgZnVuY3Rpb24gc3ZnKG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gQnJvd3Nlci5zdmcgfHwgQnJvd3Nlci52bWwgPyBuZXcgU1ZHKG9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIE1hcC5pbmNsdWRlKHtcbiAgXHQvLyBAbmFtZXNwYWNlIE1hcDsgQG1ldGhvZCBnZXRSZW5kZXJlcihsYXllcjogUGF0aCk6IFJlbmRlcmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgYFJlbmRlcmVyYCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2l2ZW5cbiAgXHQvLyBgUGF0aGAuIEl0IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGByZW5kZXJlcmAgb3B0aW9ucyBvZiB0aGUgbWFwIGFuZCBwYXRoc1xuICBcdC8vIGFyZSByZXNwZWN0ZWQsIGFuZCB0aGF0IHRoZSByZW5kZXJlcnMgZG8gZXhpc3Qgb24gdGhlIG1hcC5cbiAgXHRnZXRSZW5kZXJlcjogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHQvLyBAbmFtZXNwYWNlIFBhdGg7IEBvcHRpb24gcmVuZGVyZXI6IFJlbmRlcmVyXG4gIFx0XHQvLyBVc2UgdGhpcyBzcGVjaWZpYyBpbnN0YW5jZSBvZiBgUmVuZGVyZXJgIGZvciB0aGlzIHBhdGguIFRha2VzXG4gIFx0XHQvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIG1hcCdzIFtkZWZhdWx0IHJlbmRlcmVyXSgjbWFwLXJlbmRlcmVyKS5cbiAgXHRcdHZhciByZW5kZXJlciA9IGxheWVyLm9wdGlvbnMucmVuZGVyZXIgfHwgdGhpcy5fZ2V0UGFuZVJlbmRlcmVyKGxheWVyLm9wdGlvbnMucGFuZSkgfHwgdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IHRoaXMuX3JlbmRlcmVyO1xuXG4gIFx0XHRpZiAoIXJlbmRlcmVyKSB7XG4gIFx0XHRcdHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXIgPSB0aGlzLl9jcmVhdGVSZW5kZXJlcigpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMuaGFzTGF5ZXIocmVuZGVyZXIpKSB7XG4gIFx0XHRcdHRoaXMuYWRkTGF5ZXIocmVuZGVyZXIpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlbmRlcmVyO1xuICBcdH0sXG5cbiAgXHRfZ2V0UGFuZVJlbmRlcmVyOiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0aWYgKG5hbWUgPT09ICdvdmVybGF5UGFuZScgfHwgbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdHJldHVybiBmYWxzZTtcbiAgXHRcdH1cblxuICBcdFx0dmFyIHJlbmRlcmVyID0gdGhpcy5fcGFuZVJlbmRlcmVyc1tuYW1lXTtcbiAgXHRcdGlmIChyZW5kZXJlciA9PT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdHJlbmRlcmVyID0gdGhpcy5fY3JlYXRlUmVuZGVyZXIoe3BhbmU6IG5hbWV9KTtcbiAgXHRcdFx0dGhpcy5fcGFuZVJlbmRlcmVyc1tuYW1lXSA9IHJlbmRlcmVyO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlbmRlcmVyO1xuICBcdH0sXG5cbiAgXHRfY3JlYXRlUmVuZGVyZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcDsgQG9wdGlvbiBwcmVmZXJDYW52YXM6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gV2hldGhlciBgUGF0aGBzIHNob3VsZCBiZSByZW5kZXJlZCBvbiBhIGBDYW52YXNgIHJlbmRlcmVyLlxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgYWxsIGBQYXRoYHMgYXJlIHJlbmRlcmVkIGluIGEgYFNWR2AgcmVuZGVyZXIuXG4gIFx0XHRyZXR1cm4gKHRoaXMub3B0aW9ucy5wcmVmZXJDYW52YXMgJiYgY2FudmFzKG9wdGlvbnMpKSB8fCBzdmcob3B0aW9ucyk7XG4gIFx0fVxuICB9KTtcblxuICAvKlxuICAgKiBMLlJlY3RhbmdsZSBleHRlbmRzIFBvbHlnb24gYW5kIGNyZWF0ZXMgYSByZWN0YW5nbGUgd2hlbiBwYXNzZWQgYSBMYXRMbmdCb3VuZHMgb2JqZWN0LlxuICAgKi9cblxuICAvKlxuICAgKiBAY2xhc3MgUmVjdGFuZ2xlXG4gICAqIEBha2EgTC5SZWN0YW5nbGVcbiAgICogQGluaGVyaXRzIFBvbHlnb25cbiAgICpcbiAgICogQSBjbGFzcyBmb3IgZHJhd2luZyByZWN0YW5nbGUgb3ZlcmxheXMgb24gYSBtYXAuIEV4dGVuZHMgYFBvbHlnb25gLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyBkZWZpbmUgcmVjdGFuZ2xlIGdlb2dyYXBoaWNhbCBib3VuZHNcbiAgICogdmFyIGJvdW5kcyA9IFtbNTQuNTU5MzIyLCAtNS43Njc4MjJdLCBbNTYuMTIxMDYwNCwgLTMuMDIxMjQwXV07XG4gICAqXG4gICAqIC8vIGNyZWF0ZSBhbiBvcmFuZ2UgcmVjdGFuZ2xlXG4gICAqIEwucmVjdGFuZ2xlKGJvdW5kcywge2NvbG9yOiBcIiNmZjc4MDBcIiwgd2VpZ2h0OiAxfSkuYWRkVG8obWFwKTtcbiAgICpcbiAgICogLy8gem9vbSB0aGUgbWFwIHRvIHRoZSByZWN0YW5nbGUgYm91bmRzXG4gICAqIG1hcC5maXRCb3VuZHMoYm91bmRzKTtcbiAgICogYGBgXG4gICAqXG4gICAqL1xuXG5cbiAgdmFyIFJlY3RhbmdsZSA9IFBvbHlnb24uZXh0ZW5kKHtcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0TG5nQm91bmRzLCBvcHRpb25zKSB7XG4gIFx0XHRQb2x5Z29uLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcywgdGhpcy5fYm91bmRzVG9MYXRMbmdzKGxhdExuZ0JvdW5kcyksIG9wdGlvbnMpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldEJvdW5kcyhsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcyk6IHRoaXNcbiAgXHQvLyBSZWRyYXdzIHRoZSByZWN0YW5nbGUgd2l0aCB0aGUgcGFzc2VkIGJvdW5kcy5cbiAgXHRzZXRCb3VuZHM6IGZ1bmN0aW9uIChsYXRMbmdCb3VuZHMpIHtcbiAgXHRcdHJldHVybiB0aGlzLnNldExhdExuZ3ModGhpcy5fYm91bmRzVG9MYXRMbmdzKGxhdExuZ0JvdW5kcykpO1xuICBcdH0sXG5cbiAgXHRfYm91bmRzVG9MYXRMbmdzOiBmdW5jdGlvbiAobGF0TG5nQm91bmRzKSB7XG4gIFx0XHRsYXRMbmdCb3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhsYXRMbmdCb3VuZHMpO1xuICBcdFx0cmV0dXJuIFtcbiAgXHRcdFx0bGF0TG5nQm91bmRzLmdldFNvdXRoV2VzdCgpLFxuICBcdFx0XHRsYXRMbmdCb3VuZHMuZ2V0Tm9ydGhXZXN0KCksXG4gIFx0XHRcdGxhdExuZ0JvdW5kcy5nZXROb3J0aEVhc3QoKSxcbiAgXHRcdFx0bGF0TG5nQm91bmRzLmdldFNvdXRoRWFzdCgpXG4gIFx0XHRdO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLnJlY3RhbmdsZShsYXRMbmdCb3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IFBvbHlsaW5lIG9wdGlvbnMpXG4gIGZ1bmN0aW9uIHJlY3RhbmdsZShsYXRMbmdCb3VuZHMsIG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IFJlY3RhbmdsZShsYXRMbmdCb3VuZHMsIG9wdGlvbnMpO1xuICB9XG5cbiAgU1ZHLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgU1ZHLnBvaW50c1RvUGF0aCA9IHBvaW50c1RvUGF0aDtcblxuICBHZW9KU09OLmdlb21ldHJ5VG9MYXllciA9IGdlb21ldHJ5VG9MYXllcjtcbiAgR2VvSlNPTi5jb29yZHNUb0xhdExuZyA9IGNvb3Jkc1RvTGF0TG5nO1xuICBHZW9KU09OLmNvb3Jkc1RvTGF0TG5ncyA9IGNvb3Jkc1RvTGF0TG5ncztcbiAgR2VvSlNPTi5sYXRMbmdUb0Nvb3JkcyA9IGxhdExuZ1RvQ29vcmRzO1xuICBHZW9KU09OLmxhdExuZ3NUb0Nvb3JkcyA9IGxhdExuZ3NUb0Nvb3JkcztcbiAgR2VvSlNPTi5nZXRGZWF0dXJlID0gZ2V0RmVhdHVyZTtcbiAgR2VvSlNPTi5hc0ZlYXR1cmUgPSBhc0ZlYXR1cmU7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLkJveFpvb20gaXMgdXNlZCB0byBhZGQgc2hpZnQtZHJhZyB6b29tIGludGVyYWN0aW9uIHRvIHRoZSBtYXBcbiAgICogKHpvb20gdG8gYSBzZWxlY3RlZCBib3VuZGluZyBib3gpLCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBib3hab29tOiBCb29sZWFuID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBjYW4gYmUgem9vbWVkIHRvIGEgcmVjdGFuZ3VsYXIgYXJlYSBzcGVjaWZpZWQgYnlcbiAgXHQvLyBkcmFnZ2luZyB0aGUgbW91c2Ugd2hpbGUgcHJlc3NpbmcgdGhlIHNoaWZ0IGtleS5cbiAgXHRib3hab29tOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBCb3hab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IG1hcC5fY29udGFpbmVyO1xuICBcdFx0dGhpcy5fcGFuZSA9IG1hcC5fcGFuZXMub3ZlcmxheVBhbmU7XG4gIFx0XHR0aGlzLl9yZXNldFN0YXRlVGltZW91dCA9IDA7XG4gIFx0XHRtYXAub24oJ3VubG9hZCcsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b24odGhpcy5fY29udGFpbmVyLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKHRoaXMuX2NvbnRhaW5lciwgJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0bW92ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tb3ZlZDtcbiAgXHR9LFxuXG4gIFx0X2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZSh0aGlzLl9wYW5lKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9wYW5lO1xuICBcdH0sXG5cbiAgXHRfcmVzZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSAwO1xuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcbiAgXHR9LFxuXG4gIFx0X2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgIT09IDApIHtcbiAgXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0KTtcbiAgXHRcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSAwO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIWUuc2hpZnRLZXkgfHwgKChlLndoaWNoICE9PSAxKSAmJiAoZS5idXR0b24gIT09IDEpKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBcdFx0Ly8gQ2xlYXIgdGhlIGRlZmVycmVkIHJlc2V0U3RhdGUgaWYgaXQgaGFzbid0IGV4ZWN1dGVkIHlldCwgb3RoZXJ3aXNlIGl0XG4gIFx0XHQvLyB3aWxsIGludGVycnVwdCB0aGUgaW50ZXJhY3Rpb24gYW5kIG9ycGhhbiBhIGJveCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuXG4gIFx0XHR0aGlzLl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSgpO1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZSgpO1xuXG4gIFx0XHRkaXNhYmxlVGV4dFNlbGVjdGlvbigpO1xuICBcdFx0ZGlzYWJsZUltYWdlRHJhZygpO1xuXG4gIFx0XHR0aGlzLl9zdGFydFBvaW50ID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuXG4gIFx0XHRvbihkb2N1bWVudCwge1xuICBcdFx0XHRjb250ZXh0bWVudTogc3RvcCxcbiAgXHRcdFx0bW91c2Vtb3ZlOiB0aGlzLl9vbk1vdXNlTW92ZSxcbiAgXHRcdFx0bW91c2V1cDogdGhpcy5fb25Nb3VzZVVwLFxuICBcdFx0XHRrZXlkb3duOiB0aGlzLl9vbktleURvd25cbiAgXHRcdH0sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25Nb3VzZU1vdmU6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcblxuICBcdFx0XHR0aGlzLl9ib3ggPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtem9vbS1ib3gnLCB0aGlzLl9jb250YWluZXIpO1xuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNyb3NzaGFpcicpO1xuXG4gIFx0XHRcdHRoaXMuX21hcC5maXJlKCdib3h6b29tc3RhcnQnKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fcG9pbnQgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSk7XG5cbiAgXHRcdHZhciBib3VuZHMgPSBuZXcgQm91bmRzKHRoaXMuX3BvaW50LCB0aGlzLl9zdGFydFBvaW50KSxcbiAgXHRcdCAgICBzaXplID0gYm91bmRzLmdldFNpemUoKTtcblxuICBcdFx0c2V0UG9zaXRpb24odGhpcy5fYm94LCBib3VuZHMubWluKTtcblxuICBcdFx0dGhpcy5fYm94LnN0eWxlLndpZHRoICA9IHNpemUueCArICdweCc7XG4gIFx0XHR0aGlzLl9ib3guc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JztcbiAgXHR9LFxuXG4gIFx0X2ZpbmlzaDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9ib3gpO1xuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNyb3NzaGFpcicpO1xuICBcdFx0fVxuXG4gIFx0XHRlbmFibGVUZXh0U2VsZWN0aW9uKCk7XG4gIFx0XHRlbmFibGVJbWFnZURyYWcoKTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCB7XG4gIFx0XHRcdGNvbnRleHRtZW51OiBzdG9wLFxuICBcdFx0XHRtb3VzZW1vdmU6IHRoaXMuX29uTW91c2VNb3ZlLFxuICBcdFx0XHRtb3VzZXVwOiB0aGlzLl9vbk1vdXNlVXAsXG4gIFx0XHRcdGtleWRvd246IHRoaXMuX29uS2V5RG93blxuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlVXA6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoKGUud2hpY2ggIT09IDEpICYmIChlLmJ1dHRvbiAhPT0gMSkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2ZpbmlzaCgpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7IHJldHVybjsgfVxuICBcdFx0Ly8gUG9zdHBvbmUgdG8gbmV4dCBKUyB0aWNrIHNvIGludGVybmFsIGNsaWNrIGV2ZW50IGhhbmRsaW5nXG4gIFx0XHQvLyBzdGlsbCBzZWUgaXQgYXMgXCJtb3ZlZFwiLlxuICBcdFx0dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKTtcbiAgXHRcdHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKHRoaXMuX3Jlc2V0U3RhdGUsIHRoaXMpLCAwKTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3N0YXJ0UG9pbnQpLFxuICBcdFx0ICAgICAgICB0aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludCkpO1xuXG4gIFx0XHR0aGlzLl9tYXBcbiAgXHRcdFx0LmZpdEJvdW5kcyhib3VuZHMpXG4gIFx0XHRcdC5maXJlKCdib3h6b29tZW5kJywge2JveFpvb21Cb3VuZHM6IGJvdW5kc30pO1xuICBcdH0sXG5cbiAgXHRfb25LZXlEb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgXHRcdFx0dGhpcy5fZmluaXNoKCk7XG4gIFx0XHRcdHRoaXMuX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlKCk7XG4gIFx0XHRcdHRoaXMuX3Jlc2V0U3RhdGUoKTtcbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBib3hab29tOiBIYW5kbGVyXG4gIC8vIEJveCAoc2hpZnQtZHJhZyB3aXRoIG1vdXNlKSB6b29tIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdib3hab29tJywgQm94Wm9vbSk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLkRvdWJsZUNsaWNrWm9vbSBpcyB1c2VkIHRvIGhhbmRsZSBkb3VibGUtY2xpY2sgem9vbSBvbiB0aGUgbWFwLCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcblxuICBNYXAubWVyZ2VPcHRpb25zKHtcbiAgXHQvLyBAb3B0aW9uIGRvdWJsZUNsaWNrWm9vbTogQm9vbGVhbnxTdHJpbmcgPSB0cnVlXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGNhbiBiZSB6b29tZWQgaW4gYnkgZG91YmxlIGNsaWNraW5nIG9uIGl0IGFuZFxuICBcdC8vIHpvb21lZCBvdXQgYnkgZG91YmxlIGNsaWNraW5nIHdoaWxlIGhvbGRpbmcgc2hpZnQuIElmIHBhc3NlZFxuICBcdC8vIGAnY2VudGVyJ2AsIGRvdWJsZS1jbGljayB6b29tIHdpbGwgem9vbSB0byB0aGUgY2VudGVyIG9mIHRoZVxuICBcdC8vICB2aWV3IHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIG1vdXNlIHdhcy5cbiAgXHRkb3VibGVDbGlja1pvb206IHRydWVcbiAgfSk7XG5cbiAgdmFyIERvdWJsZUNsaWNrWm9vbSA9IEhhbmRsZXIuZXh0ZW5kKHtcbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fbWFwLm9uKCdkYmxjbGljaycsIHRoaXMuX29uRG91YmxlQ2xpY2ssIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fbWFwLm9mZignZGJsY2xpY2snLCB0aGlzLl9vbkRvdWJsZUNsaWNrLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uRG91YmxlQ2xpY2s6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIG9sZFpvb20gPSBtYXAuZ2V0Wm9vbSgpLFxuICBcdFx0ICAgIGRlbHRhID0gbWFwLm9wdGlvbnMuem9vbURlbHRhLFxuICBcdFx0ICAgIHpvb20gPSBlLm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkgPyBvbGRab29tIC0gZGVsdGEgOiBvbGRab29tICsgZGVsdGE7XG5cbiAgXHRcdGlmIChtYXAub3B0aW9ucy5kb3VibGVDbGlja1pvb20gPT09ICdjZW50ZXInKSB7XG4gIFx0XHRcdG1hcC5zZXRab29tKHpvb20pO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0bWFwLnNldFpvb21Bcm91bmQoZS5jb250YWluZXJQb2ludCwgem9vbSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvL1xuICAvLyBNYXAgcHJvcGVydGllcyBpbmNsdWRlIGludGVyYWN0aW9uIGhhbmRsZXJzIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2xcbiAgLy8gaW50ZXJhY3Rpb24gYmVoYXZpb3IgaW4gcnVudGltZSwgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNlcnRhaW4gZmVhdHVyZXMgc3VjaFxuICAvLyBhcyBkcmFnZ2luZyBvciB0b3VjaCB6b29tIChzZWUgYEhhbmRsZXJgIG1ldGhvZHMpLiBGb3IgZXhhbXBsZTpcbiAgLy9cbiAgLy8gYGBganNcbiAgLy8gbWFwLmRvdWJsZUNsaWNrWm9vbS5kaXNhYmxlKCk7XG4gIC8vIGBgYFxuICAvL1xuICAvLyBAcHJvcGVydHkgZG91YmxlQ2xpY2tab29tOiBIYW5kbGVyXG4gIC8vIERvdWJsZSBjbGljayB6b29tIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdkb3VibGVDbGlja1pvb20nLCBEb3VibGVDbGlja1pvb20pO1xuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5NYXBEcmFnIGlzIHVzZWQgdG8gbWFrZSB0aGUgbWFwIGRyYWdnYWJsZSAod2l0aCBwYW5uaW5nIGluZXJ0aWEpLCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBkcmFnZ2luZzogQm9vbGVhbiA9IHRydWVcbiAgXHQvLyBXaGV0aGVyIHRoZSBtYXAgaXMgZHJhZ2dhYmxlIHdpdGggbW91c2UvdG91Y2ggb3Igbm90LlxuICBcdGRyYWdnaW5nOiB0cnVlLFxuXG4gIFx0Ly8gQHNlY3Rpb24gUGFubmluZyBJbmVydGlhIE9wdGlvbnNcbiAgXHQvLyBAb3B0aW9uIGluZXJ0aWE6IEJvb2xlYW4gPSAqXG4gIFx0Ly8gSWYgZW5hYmxlZCwgcGFubmluZyBvZiB0aGUgbWFwIHdpbGwgaGF2ZSBhbiBpbmVydGlhIGVmZmVjdCB3aGVyZVxuICBcdC8vIHRoZSBtYXAgYnVpbGRzIG1vbWVudHVtIHdoaWxlIGRyYWdnaW5nIGFuZCBjb250aW51ZXMgbW92aW5nIGluXG4gIFx0Ly8gdGhlIHNhbWUgZGlyZWN0aW9uIGZvciBzb21lIHRpbWUuIEZlZWxzIGVzcGVjaWFsbHkgbmljZSBvbiB0b3VjaFxuICBcdC8vIGRldmljZXMuIEVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgXHRpbmVydGlhOiB0cnVlLFxuXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhRGVjZWxlcmF0aW9uOiBOdW1iZXIgPSAzMDAwXG4gIFx0Ly8gVGhlIHJhdGUgd2l0aCB3aGljaCB0aGUgaW5lcnRpYWwgbW92ZW1lbnQgc2xvd3MgZG93biwgaW4gcGl4ZWxzL3NlY29uZMKyLlxuICBcdGluZXJ0aWFEZWNlbGVyYXRpb246IDM0MDAsIC8vIHB4L3NeMlxuXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhTWF4U3BlZWQ6IE51bWJlciA9IEluZmluaXR5XG4gIFx0Ly8gTWF4IHNwZWVkIG9mIHRoZSBpbmVydGlhbCBtb3ZlbWVudCwgaW4gcGl4ZWxzL3NlY29uZC5cbiAgXHRpbmVydGlhTWF4U3BlZWQ6IEluZmluaXR5LCAvLyBweC9zXG5cbiAgXHQvLyBAb3B0aW9uIGVhc2VMaW5lYXJpdHk6IE51bWJlciA9IDAuMlxuICBcdGVhc2VMaW5lYXJpdHk6IDAuMixcblxuICBcdC8vIFRPRE8gcmVmYWN0b3IsIG1vdmUgdG8gQ1JTXG4gIFx0Ly8gQG9wdGlvbiB3b3JsZENvcHlKdW1wOiBCb29sZWFuID0gZmFsc2VcbiAgXHQvLyBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBtYXAgdHJhY2tzIHdoZW4geW91IHBhbiB0byBhbm90aGVyIFwiY29weVwiXG4gIFx0Ly8gb2YgdGhlIHdvcmxkIGFuZCBzZWFtbGVzc2x5IGp1bXBzIHRvIHRoZSBvcmlnaW5hbCBvbmUgc28gdGhhdCBhbGwgb3ZlcmxheXNcbiAgXHQvLyBsaWtlIG1hcmtlcnMgYW5kIHZlY3RvciBsYXllcnMgYXJlIHN0aWxsIHZpc2libGUuXG4gIFx0d29ybGRDb3B5SnVtcDogZmFsc2UsXG5cbiAgXHQvLyBAb3B0aW9uIG1heEJvdW5kc1Zpc2Nvc2l0eTogTnVtYmVyID0gMC4wXG4gIFx0Ly8gSWYgYG1heEJvdW5kc2AgaXMgc2V0LCB0aGlzIG9wdGlvbiB3aWxsIGNvbnRyb2wgaG93IHNvbGlkIHRoZSBib3VuZHNcbiAgXHQvLyBhcmUgd2hlbiBkcmFnZ2luZyB0aGUgbWFwIGFyb3VuZC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYDAuMGAgYWxsb3dzIHRoZVxuICBcdC8vIHVzZXIgdG8gZHJhZyBvdXRzaWRlIHRoZSBib3VuZHMgYXQgbm9ybWFsIHNwZWVkLCBoaWdoZXIgdmFsdWVzIHdpbGxcbiAgXHQvLyBzbG93IGRvd24gbWFwIGRyYWdnaW5nIG91dHNpZGUgYm91bmRzLCBhbmQgYDEuMGAgbWFrZXMgdGhlIGJvdW5kcyBmdWxseVxuICBcdC8vIHNvbGlkLCBwcmV2ZW50aW5nIHRoZSB1c2VyIGZyb20gZHJhZ2dpbmcgb3V0c2lkZSB0aGUgYm91bmRzLlxuICBcdG1heEJvdW5kc1Zpc2Nvc2l0eTogMC4wXG4gIH0pO1xuXG4gIHZhciBEcmFnID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2RyYWdnYWJsZSkge1xuICBcdFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZSA9IG5ldyBEcmFnZ2FibGUobWFwLl9tYXBQYW5lLCBtYXAuX2NvbnRhaW5lcik7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKHtcbiAgXHRcdFx0XHRkcmFnc3RhcnQ6IHRoaXMuX29uRHJhZ1N0YXJ0LFxuICBcdFx0XHRcdGRyYWc6IHRoaXMuX29uRHJhZyxcbiAgXHRcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKCdwcmVkcmFnJywgdGhpcy5fb25QcmVEcmFnTGltaXQsIHRoaXMpO1xuICBcdFx0XHRpZiAobWFwLm9wdGlvbnMud29ybGRDb3B5SnVtcCkge1xuICBcdFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5vbigncHJlZHJhZycsIHRoaXMuX29uUHJlRHJhZ1dyYXAsIHRoaXMpO1xuICBcdFx0XHRcdG1hcC5vbignem9vbWVuZCcsIHRoaXMuX29uWm9vbUVuZCwgdGhpcyk7XG5cbiAgXHRcdFx0XHRtYXAud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCwgdGhpcyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdGFkZENsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC1ncmFiIGxlYWZsZXQtdG91Y2gtZHJhZycpO1xuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpO1xuICBcdFx0dGhpcy5fcG9zaXRpb25zID0gW107XG4gIFx0XHR0aGlzLl90aW1lcyA9IFtdO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsICdsZWFmbGV0LWdyYWInKTtcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC1kcmFnJyk7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpO1xuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRtb3Zpbmc6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9kcmFnZ2FibGUgJiYgdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmc7XG4gIFx0fSxcblxuICBcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcDtcblxuICBcdFx0bWFwLl9zdG9wKCk7XG4gIFx0XHRpZiAodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzICYmIHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSkge1xuICBcdFx0XHR2YXIgYm91bmRzID0gdG9MYXRMbmdCb3VuZHModGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTtcblxuICBcdFx0XHR0aGlzLl9vZmZzZXRMaW1pdCA9IHRvQm91bmRzKFxuICBcdFx0XHRcdHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGJvdW5kcy5nZXROb3J0aFdlc3QoKSkubXVsdGlwbHlCeSgtMSksXG4gIFx0XHRcdFx0dGhpcy5fbWFwLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoYm91bmRzLmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKVxuICBcdFx0XHRcdFx0LmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSk7XG5cbiAgXHRcdFx0dGhpcy5fdmlzY29zaXR5ID0gTWF0aC5taW4oMS4wLCBNYXRoLm1heCgwLjAsIHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSkpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fb2Zmc2V0TGltaXQgPSBudWxsO1xuICBcdFx0fVxuXG4gIFx0XHRtYXBcbiAgXHRcdCAgICAuZmlyZSgnbW92ZXN0YXJ0JylcbiAgXHRcdCAgICAuZmlyZSgnZHJhZ3N0YXJ0Jyk7XG5cbiAgXHRcdGlmIChtYXAub3B0aW9ucy5pbmVydGlhKSB7XG4gIFx0XHRcdHRoaXMuX3Bvc2l0aW9ucyA9IFtdO1xuICBcdFx0XHR0aGlzLl90aW1lcyA9IFtdO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25EcmFnOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5vcHRpb25zLmluZXJ0aWEpIHtcbiAgXHRcdFx0dmFyIHRpbWUgPSB0aGlzLl9sYXN0VGltZSA9ICtuZXcgRGF0ZSgpLFxuICBcdFx0XHQgICAgcG9zID0gdGhpcy5fbGFzdFBvcyA9IHRoaXMuX2RyYWdnYWJsZS5fYWJzUG9zIHx8IHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zO1xuXG4gIFx0XHRcdHRoaXMuX3Bvc2l0aW9ucy5wdXNoKHBvcyk7XG4gIFx0XHRcdHRoaXMuX3RpbWVzLnB1c2godGltZSk7XG5cbiAgXHRcdFx0dGhpcy5fcHJ1bmVQb3NpdGlvbnModGltZSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX21hcFxuICBcdFx0ICAgIC5maXJlKCdtb3ZlJywgZSlcbiAgXHRcdCAgICAuZmlyZSgnZHJhZycsIGUpO1xuICBcdH0sXG5cbiAgXHRfcHJ1bmVQb3NpdGlvbnM6IGZ1bmN0aW9uICh0aW1lKSB7XG4gIFx0XHR3aGlsZSAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA+IDEgJiYgdGltZSAtIHRoaXMuX3RpbWVzWzBdID4gNTApIHtcbiAgXHRcdFx0dGhpcy5fcG9zaXRpb25zLnNoaWZ0KCk7XG4gIFx0XHRcdHRoaXMuX3RpbWVzLnNoaWZ0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vblpvb21FbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBweENlbnRlciA9IHRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksXG4gIFx0XHQgICAgcHhXb3JsZENlbnRlciA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsIDBdKTtcblxuICBcdFx0dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0ID0gcHhXb3JsZENlbnRlci5zdWJ0cmFjdChweENlbnRlcikueDtcbiAgXHRcdHRoaXMuX3dvcmxkV2lkdGggPSB0aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54O1xuICBcdH0sXG5cbiAgXHRfdmlzY291c0xpbWl0OiBmdW5jdGlvbiAodmFsdWUsIHRocmVzaG9sZCkge1xuICBcdFx0cmV0dXJuIHZhbHVlIC0gKHZhbHVlIC0gdGhyZXNob2xkKSAqIHRoaXMuX3Zpc2Nvc2l0eTtcbiAgXHR9LFxuXG4gIFx0X29uUHJlRHJhZ0xpbWl0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX3Zpc2Nvc2l0eSB8fCAhdGhpcy5fb2Zmc2V0TGltaXQpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBvZmZzZXQgPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5zdWJ0cmFjdCh0aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zKTtcblxuICBcdFx0dmFyIGxpbWl0ID0gdGhpcy5fb2Zmc2V0TGltaXQ7XG4gIFx0XHRpZiAob2Zmc2V0LnggPCBsaW1pdC5taW4ueCkgeyBvZmZzZXQueCA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueCwgbGltaXQubWluLngpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnkgPCBsaW1pdC5taW4ueSkgeyBvZmZzZXQueSA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueSwgbGltaXQubWluLnkpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnggPiBsaW1pdC5tYXgueCkgeyBvZmZzZXQueCA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueCwgbGltaXQubWF4LngpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnkgPiBsaW1pdC5tYXgueSkgeyBvZmZzZXQueSA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueSwgbGltaXQubWF4LnkpOyB9XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQob2Zmc2V0KTtcbiAgXHR9LFxuXG4gIFx0X29uUHJlRHJhZ1dyYXA6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFRPRE8gcmVmYWN0b3IgdG8gYmUgYWJsZSB0byBhZGp1c3QgbWFwIHBhbmUgcG9zaXRpb24gYWZ0ZXIgem9vbVxuICBcdFx0dmFyIHdvcmxkV2lkdGggPSB0aGlzLl93b3JsZFdpZHRoLFxuICBcdFx0ICAgIGhhbGZXaWR0aCA9IE1hdGgucm91bmQod29ybGRXaWR0aCAvIDIpLFxuICBcdFx0ICAgIGR4ID0gdGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LFxuICBcdFx0ICAgIHggPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LFxuICBcdFx0ICAgIG5ld1gxID0gKHggLSBoYWxmV2lkdGggKyBkeCkgJSB3b3JsZFdpZHRoICsgaGFsZldpZHRoIC0gZHgsXG4gIFx0XHQgICAgbmV3WDIgPSAoeCArIGhhbGZXaWR0aCArIGR4KSAlIHdvcmxkV2lkdGggLSBoYWxmV2lkdGggLSBkeCxcbiAgXHRcdCAgICBuZXdYID0gTWF0aC5hYnMobmV3WDEgKyBkeCkgPCBNYXRoLmFicyhuZXdYMiArIGR4KSA/IG5ld1gxIDogbmV3WDI7XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fYWJzUG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKTtcbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnggPSBuZXdYO1xuICBcdH0sXG5cbiAgXHRfb25EcmFnRW5kOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBvcHRpb25zID0gbWFwLm9wdGlvbnMsXG5cbiAgXHRcdCAgICBub0luZXJ0aWEgPSAhb3B0aW9ucy5pbmVydGlhIHx8IGUubm9JbmVydGlhIHx8IHRoaXMuX3RpbWVzLmxlbmd0aCA8IDI7XG5cbiAgXHRcdG1hcC5maXJlKCdkcmFnZW5kJywgZSk7XG5cbiAgXHRcdGlmIChub0luZXJ0aWEpIHtcbiAgXHRcdFx0bWFwLmZpcmUoJ21vdmVlbmQnKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKCkpO1xuXG4gIFx0XHRcdHZhciBkaXJlY3Rpb24gPSB0aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksXG4gIFx0XHRcdCAgICBkdXJhdGlvbiA9ICh0aGlzLl9sYXN0VGltZSAtIHRoaXMuX3RpbWVzWzBdKSAvIDEwMDAsXG4gIFx0XHRcdCAgICBlYXNlID0gb3B0aW9ucy5lYXNlTGluZWFyaXR5LFxuXG4gIFx0XHRcdCAgICBzcGVlZFZlY3RvciA9IGRpcmVjdGlvbi5tdWx0aXBseUJ5KGVhc2UgLyBkdXJhdGlvbiksXG4gIFx0XHRcdCAgICBzcGVlZCA9IHNwZWVkVmVjdG9yLmRpc3RhbmNlVG8oWzAsIDBdKSxcblxuICBcdFx0XHQgICAgbGltaXRlZFNwZWVkID0gTWF0aC5taW4ob3B0aW9ucy5pbmVydGlhTWF4U3BlZWQsIHNwZWVkKSxcbiAgXHRcdFx0ICAgIGxpbWl0ZWRTcGVlZFZlY3RvciA9IHNwZWVkVmVjdG9yLm11bHRpcGx5QnkobGltaXRlZFNwZWVkIC8gc3BlZWQpLFxuXG4gIFx0XHRcdCAgICBkZWNlbGVyYXRpb25EdXJhdGlvbiA9IGxpbWl0ZWRTcGVlZCAvIChvcHRpb25zLmluZXJ0aWFEZWNlbGVyYXRpb24gKiBlYXNlKSxcbiAgXHRcdFx0ICAgIG9mZnNldCA9IGxpbWl0ZWRTcGVlZFZlY3Rvci5tdWx0aXBseUJ5KC1kZWNlbGVyYXRpb25EdXJhdGlvbiAvIDIpLnJvdW5kKCk7XG5cbiAgXHRcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHtcbiAgXHRcdFx0XHRtYXAuZmlyZSgnbW92ZWVuZCcpO1xuXG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0b2Zmc2V0ID0gbWFwLl9saW1pdE9mZnNldChvZmZzZXQsIG1hcC5vcHRpb25zLm1heEJvdW5kcyk7XG5cbiAgXHRcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHRcdG1hcC5wYW5CeShvZmZzZXQsIHtcbiAgXHRcdFx0XHRcdFx0ZHVyYXRpb246IGRlY2VsZXJhdGlvbkR1cmF0aW9uLFxuICBcdFx0XHRcdFx0XHRlYXNlTGluZWFyaXR5OiBlYXNlLFxuICBcdFx0XHRcdFx0XHRub01vdmVTdGFydDogdHJ1ZSxcbiAgXHRcdFx0XHRcdFx0YW5pbWF0ZTogdHJ1ZVxuICBcdFx0XHRcdFx0fSk7XG4gIFx0XHRcdFx0fSk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBkcmFnZ2luZzogSGFuZGxlclxuICAvLyBNYXAgZHJhZ2dpbmcgaGFuZGxlciAoYnkgYm90aCBtb3VzZSBhbmQgdG91Y2gpLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnZHJhZ2dpbmcnLCBEcmFnKTtcblxuICAvKlxuICAgKiBMLk1hcC5LZXlib2FyZCBpcyBoYW5kbGluZyBrZXlib2FyZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBtYXAsIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gS2V5Ym9hcmQgTmF2aWdhdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBvcHRpb24ga2V5Ym9hcmQ6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gTWFrZXMgdGhlIG1hcCBmb2N1c2FibGUgYW5kIGFsbG93cyB1c2VycyB0byBuYXZpZ2F0ZSB0aGUgbWFwIHdpdGgga2V5Ym9hcmRcbiAgXHQvLyBhcnJvd3MgYW5kIGArYC9gLWAga2V5cy5cbiAgXHRrZXlib2FyZDogdHJ1ZSxcblxuICBcdC8vIEBvcHRpb24ga2V5Ym9hcmRQYW5EZWx0YTogTnVtYmVyID0gODBcbiAgXHQvLyBBbW91bnQgb2YgcGl4ZWxzIHRvIHBhbiB3aGVuIHByZXNzaW5nIGFuIGFycm93IGtleS5cbiAgXHRrZXlib2FyZFBhbkRlbHRhOiA4MFxuICB9KTtcblxuICB2YXIgS2V5Ym9hcmQgPSBIYW5kbGVyLmV4dGVuZCh7XG5cbiAgXHRrZXlDb2Rlczoge1xuICBcdFx0bGVmdDogICAgWzM3XSxcbiAgXHRcdHJpZ2h0OiAgIFszOV0sXG4gIFx0XHRkb3duOiAgICBbNDBdLFxuICBcdFx0dXA6ICAgICAgWzM4XSxcbiAgXHRcdHpvb21JbjogIFsxODcsIDEwNywgNjEsIDE3MV0sXG4gIFx0XHR6b29tT3V0OiBbMTg5LCAxMDksIDU0LCAxNzNdXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcblxuICBcdFx0dGhpcy5fc2V0UGFuRGVsdGEobWFwLm9wdGlvbnMua2V5Ym9hcmRQYW5EZWx0YSk7XG4gIFx0XHR0aGlzLl9zZXRab29tRGVsdGEobWFwLm9wdGlvbnMuem9vbURlbHRhKTtcbiAgXHR9LFxuXG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9tYXAuX2NvbnRhaW5lcjtcblxuICBcdFx0Ly8gbWFrZSB0aGUgY29udGFpbmVyIGZvY3VzYWJsZSBieSB0YWJiaW5nXG4gIFx0XHRpZiAoY29udGFpbmVyLnRhYkluZGV4IDw9IDApIHtcbiAgXHRcdFx0Y29udGFpbmVyLnRhYkluZGV4ID0gJzAnO1xuICBcdFx0fVxuXG4gIFx0XHRvbihjb250YWluZXIsIHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX29uRm9jdXMsXG4gIFx0XHRcdGJsdXI6IHRoaXMuX29uQmx1cixcbiAgXHRcdFx0bW91c2Vkb3duOiB0aGlzLl9vbk1vdXNlRG93blxuICBcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdHRoaXMuX21hcC5vbih7XG4gIFx0XHRcdGZvY3VzOiB0aGlzLl9hZGRIb29rcyxcbiAgXHRcdFx0Ymx1cjogdGhpcy5fcmVtb3ZlSG9va3NcbiAgXHRcdH0sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVtb3ZlSG9va3MoKTtcblxuICBcdFx0b2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCB7XG4gIFx0XHRcdGZvY3VzOiB0aGlzLl9vbkZvY3VzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9vbkJsdXIsXG4gIFx0XHRcdG1vdXNlZG93bjogdGhpcy5fb25Nb3VzZURvd25cbiAgXHRcdH0sIHRoaXMpO1xuXG4gIFx0XHR0aGlzLl9tYXAub2ZmKHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX2FkZEhvb2tzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9yZW1vdmVIb29rc1xuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlRG93bjogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX2ZvY3VzZWQpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBib2R5ID0gZG9jdW1lbnQuYm9keSxcbiAgXHRcdCAgICBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgXHRcdCAgICB0b3AgPSBib2R5LnNjcm9sbFRvcCB8fCBkb2NFbC5zY3JvbGxUb3AsXG4gIFx0XHQgICAgbGVmdCA9IGJvZHkuc2Nyb2xsTGVmdCB8fCBkb2NFbC5zY3JvbGxMZWZ0O1xuXG4gIFx0XHR0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpO1xuXG4gIFx0XHR3aW5kb3cuc2Nyb2xsVG8obGVmdCwgdG9wKTtcbiAgXHR9LFxuXG4gIFx0X29uRm9jdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICBcdFx0dGhpcy5fbWFwLmZpcmUoJ2ZvY3VzJyk7XG4gIFx0fSxcblxuICBcdF9vbkJsdXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMuX21hcC5maXJlKCdibHVyJyk7XG4gIFx0fSxcblxuICBcdF9zZXRQYW5EZWx0YTogZnVuY3Rpb24gKHBhbkRlbHRhKSB7XG4gIFx0XHR2YXIga2V5cyA9IHRoaXMuX3BhbktleXMgPSB7fSxcbiAgXHRcdCAgICBjb2RlcyA9IHRoaXMua2V5Q29kZXMsXG4gIFx0XHQgICAgaSwgbGVuO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5sZWZ0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMubGVmdFtpXV0gPSBbLTEgKiBwYW5EZWx0YSwgMF07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5yaWdodC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnJpZ2h0W2ldXSA9IFtwYW5EZWx0YSwgMF07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5kb3duLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMuZG93bltpXV0gPSBbMCwgcGFuRGVsdGFdO1xuICBcdFx0fVxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gY29kZXMudXAubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy51cFtpXV0gPSBbMCwgLTEgKiBwYW5EZWx0YV07XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9zZXRab29tRGVsdGE6IGZ1bmN0aW9uICh6b29tRGVsdGEpIHtcbiAgXHRcdHZhciBrZXlzID0gdGhpcy5fem9vbUtleXMgPSB7fSxcbiAgXHRcdCAgICBjb2RlcyA9IHRoaXMua2V5Q29kZXMsXG4gIFx0XHQgICAgaSwgbGVuO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy56b29tSW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy56b29tSW5baV1dID0gem9vbURlbHRhO1xuICBcdFx0fVxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gY29kZXMuem9vbU91dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnpvb21PdXRbaV1dID0gLXpvb21EZWx0YTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfcmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25LZXlEb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBrZXkgPSBlLmtleUNvZGUsXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIG9mZnNldDtcblxuICBcdFx0aWYgKGtleSBpbiB0aGlzLl9wYW5LZXlzKSB7XG4gIFx0XHRcdGlmICghbWFwLl9wYW5BbmltIHx8ICFtYXAuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpIHtcbiAgXHRcdFx0XHRvZmZzZXQgPSB0aGlzLl9wYW5LZXlzW2tleV07XG4gIFx0XHRcdFx0aWYgKGUuc2hpZnRLZXkpIHtcbiAgXHRcdFx0XHRcdG9mZnNldCA9IHRvUG9pbnQob2Zmc2V0KS5tdWx0aXBseUJ5KDMpO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdGlmIChtYXAub3B0aW9ucy5tYXhCb3VuZHMpIHtcbiAgXHRcdFx0XHRcdG9mZnNldCA9IG1hcC5fbGltaXRPZmZzZXQodG9Qb2ludChvZmZzZXQpLCBtYXAub3B0aW9ucy5tYXhCb3VuZHMpO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdGlmIChtYXAub3B0aW9ucy53b3JsZENvcHlKdW1wKSB7XG4gIFx0XHRcdFx0XHR2YXIgbmV3TGF0TG5nID0gbWFwLndyYXBMYXRMbmcobWFwLnVucHJvamVjdChtYXAucHJvamVjdChtYXAuZ2V0Q2VudGVyKCkpLmFkZChvZmZzZXQpKSk7XG4gIFx0XHRcdFx0XHRtYXAucGFuVG8obmV3TGF0TG5nKTtcbiAgXHRcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdFx0bWFwLnBhbkJ5KG9mZnNldCk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9IGVsc2UgaWYgKGtleSBpbiB0aGlzLl96b29tS2V5cykge1xuICBcdFx0XHRtYXAuc2V0Wm9vbShtYXAuZ2V0Wm9vbSgpICsgKGUuc2hpZnRLZXkgPyAzIDogMSkgKiB0aGlzLl96b29tS2V5c1trZXldKTtcblxuICBcdFx0fSBlbHNlIGlmIChrZXkgPT09IDI3ICYmIG1hcC5fcG9wdXAgJiYgbWFwLl9wb3B1cC5vcHRpb25zLmNsb3NlT25Fc2NhcGVLZXkpIHtcbiAgXHRcdFx0bWFwLmNsb3NlUG9wdXAoKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRzdG9wKGUpO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy8gQHByb3BlcnR5IGtleWJvYXJkOiBIYW5kbGVyXG4gIC8vIEtleWJvYXJkIG5hdmlnYXRpb24gaGFuZGxlci5cbiAgTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ2tleWJvYXJkJywgS2V5Ym9hcmQpO1xuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5TY3JvbGxXaGVlbFpvb20gaXMgdXNlZCBieSBMLk1hcCB0byBlbmFibGUgbW91c2Ugc2Nyb2xsIHdoZWVsIHpvb20gb24gdGhlIG1hcC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gSW50ZXJhY3Rpb24gT3B0aW9uc1xuICBNYXAubWVyZ2VPcHRpb25zKHtcbiAgXHQvLyBAc2VjdGlvbiBNb3VzZSB3aGVlbCBvcHRpb25zXG4gIFx0Ly8gQG9wdGlvbiBzY3JvbGxXaGVlbFpvb206IEJvb2xlYW58U3RyaW5nID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBjYW4gYmUgem9vbWVkIGJ5IHVzaW5nIHRoZSBtb3VzZSB3aGVlbC4gSWYgcGFzc2VkIGAnY2VudGVyJ2AsXG4gIFx0Ly8gaXQgd2lsbCB6b29tIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXcgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUgbW91c2Ugd2FzLlxuICBcdHNjcm9sbFdoZWVsWm9vbTogdHJ1ZSxcblxuICBcdC8vIEBvcHRpb24gd2hlZWxEZWJvdW5jZVRpbWU6IE51bWJlciA9IDQwXG4gIFx0Ly8gTGltaXRzIHRoZSByYXRlIGF0IHdoaWNoIGEgd2hlZWwgY2FuIGZpcmUgKGluIG1pbGxpc2Vjb25kcykuIEJ5IGRlZmF1bHRcbiAgXHQvLyB1c2VyIGNhbid0IHpvb20gdmlhIHdoZWVsIG1vcmUgb2Z0ZW4gdGhhbiBvbmNlIHBlciA0MCBtcy5cbiAgXHR3aGVlbERlYm91bmNlVGltZTogNDAsXG5cbiAgXHQvLyBAb3B0aW9uIHdoZWVsUHhQZXJab29tTGV2ZWw6IE51bWJlciA9IDYwXG4gIFx0Ly8gSG93IG1hbnkgc2Nyb2xsIHBpeGVscyAoYXMgcmVwb3J0ZWQgYnkgW0wuRG9tRXZlbnQuZ2V0V2hlZWxEZWx0YV0oI2RvbWV2ZW50LWdldHdoZWVsZGVsdGEpKVxuICBcdC8vIG1lYW4gYSBjaGFuZ2Ugb2Ygb25lIGZ1bGwgem9vbSBsZXZlbC4gU21hbGxlciB2YWx1ZXMgd2lsbCBtYWtlIHdoZWVsLXpvb21pbmdcbiAgXHQvLyBmYXN0ZXIgKGFuZCB2aWNlIHZlcnNhKS5cbiAgXHR3aGVlbFB4UGVyWm9vbUxldmVsOiA2MFxuICB9KTtcblxuICB2YXIgU2Nyb2xsV2hlZWxab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3doZWVsJywgdGhpcy5fb25XaGVlbFNjcm9sbCwgdGhpcyk7XG5cbiAgXHRcdHRoaXMuX2RlbHRhID0gMDtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9mZih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3doZWVsJywgdGhpcy5fb25XaGVlbFNjcm9sbCwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbldoZWVsU2Nyb2xsOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGRlbHRhID0gZ2V0V2hlZWxEZWx0YShlKTtcblxuICBcdFx0dmFyIGRlYm91bmNlID0gdGhpcy5fbWFwLm9wdGlvbnMud2hlZWxEZWJvdW5jZVRpbWU7XG5cbiAgXHRcdHRoaXMuX2RlbHRhICs9IGRlbHRhO1xuICBcdFx0dGhpcy5fbGFzdE1vdXNlUG9zID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX3N0YXJ0VGltZSkge1xuICBcdFx0XHR0aGlzLl9zdGFydFRpbWUgPSArbmV3IERhdGUoKTtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGxlZnQgPSBNYXRoLm1heChkZWJvdW5jZSAtICgrbmV3IERhdGUoKSAtIHRoaXMuX3N0YXJ0VGltZSksIDApO1xuXG4gIFx0XHRjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICBcdFx0dGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGJpbmQodGhpcy5fcGVyZm9ybVpvb20sIHRoaXMpLCBsZWZ0KTtcblxuICBcdFx0c3RvcChlKTtcbiAgXHR9LFxuXG4gIFx0X3BlcmZvcm1ab29tOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIHpvb20gPSBtYXAuZ2V0Wm9vbSgpLFxuICBcdFx0ICAgIHNuYXAgPSB0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCB8fCAwO1xuXG4gIFx0XHRtYXAuX3N0b3AoKTsgLy8gc3RvcCBwYW5uaW5nIGFuZCBmbHkgYW5pbWF0aW9ucyBpZiBhbnlcblxuICBcdFx0Ly8gbWFwIHRoZSBkZWx0YSB3aXRoIGEgc2lnbW9pZCBmdW5jdGlvbiB0byAtNC4uNCByYW5nZSBsZWFuaW5nIG9uIC0xLi4xXG4gIFx0XHR2YXIgZDIgPSB0aGlzLl9kZWx0YSAvICh0aGlzLl9tYXAub3B0aW9ucy53aGVlbFB4UGVyWm9vbUxldmVsICogNCksXG4gIFx0XHQgICAgZDMgPSA0ICogTWF0aC5sb2coMiAvICgxICsgTWF0aC5leHAoLU1hdGguYWJzKGQyKSkpKSAvIE1hdGguTE4yLFxuICBcdFx0ICAgIGQ0ID0gc25hcCA/IE1hdGguY2VpbChkMyAvIHNuYXApICogc25hcCA6IGQzLFxuICBcdFx0ICAgIGRlbHRhID0gbWFwLl9saW1pdFpvb20oem9vbSArICh0aGlzLl9kZWx0YSA+IDAgPyBkNCA6IC1kNCkpIC0gem9vbTtcblxuICBcdFx0dGhpcy5fZGVsdGEgPSAwO1xuICBcdFx0dGhpcy5fc3RhcnRUaW1lID0gbnVsbDtcblxuICBcdFx0aWYgKCFkZWx0YSkgeyByZXR1cm47IH1cblxuICBcdFx0aWYgKG1hcC5vcHRpb25zLnNjcm9sbFdoZWVsWm9vbSA9PT0gJ2NlbnRlcicpIHtcbiAgXHRcdFx0bWFwLnNldFpvb20oem9vbSArIGRlbHRhKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdG1hcC5zZXRab29tQXJvdW5kKHRoaXMuX2xhc3RNb3VzZVBvcywgem9vbSArIGRlbHRhKTtcbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBzY3JvbGxXaGVlbFpvb206IEhhbmRsZXJcbiAgLy8gU2Nyb2xsIHdoZWVsIHpvb20gaGFuZGxlci5cbiAgTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ3Njcm9sbFdoZWVsWm9vbScsIFNjcm9sbFdoZWVsWm9vbSk7XG5cbiAgLypcbiAgICogTC5NYXAuVGFwSG9sZCBpcyB1c2VkIHRvIHNpbXVsYXRlIGBjb250ZXh0bWVudWAgZXZlbnQgb24gbG9uZyBob2xkLFxuICAgKiB3aGljaCBvdGhlcndpc2UgaXMgbm90IGZpcmVkIGJ5IG1vYmlsZSBTYWZhcmkuXG4gICAqL1xuXG4gIHZhciB0YXBIb2xkRGVsYXkgPSA2MDA7XG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gSW50ZXJhY3Rpb24gT3B0aW9uc1xuICBNYXAubWVyZ2VPcHRpb25zKHtcbiAgXHQvLyBAc2VjdGlvbiBUb3VjaCBpbnRlcmFjdGlvbiBvcHRpb25zXG4gIFx0Ly8gQG9wdGlvbiB0YXBIb2xkOiBCb29sZWFuXG4gIFx0Ly8gRW5hYmxlcyBzaW11bGF0aW9uIG9mIGBjb250ZXh0bWVudWAgZXZlbnQsIGRlZmF1bHQgaXMgYHRydWVgIGZvciBtb2JpbGUgU2FmYXJpLlxuICBcdHRhcEhvbGQ6IEJyb3dzZXIudG91Y2hOYXRpdmUgJiYgQnJvd3Nlci5zYWZhcmkgJiYgQnJvd3Nlci5tb2JpbGUsXG5cbiAgXHQvLyBAb3B0aW9uIHRhcFRvbGVyYW5jZTogTnVtYmVyID0gMTVcbiAgXHQvLyBUaGUgbWF4IG51bWJlciBvZiBwaXhlbHMgYSB1c2VyIGNhbiBzaGlmdCBoaXMgZmluZ2VyIGR1cmluZyB0b3VjaFxuICBcdC8vIGZvciBpdCB0byBiZSBjb25zaWRlcmVkIGEgdmFsaWQgdGFwLlxuICBcdHRhcFRvbGVyYW5jZTogMTVcbiAgfSk7XG5cbiAgdmFyIFRhcEhvbGQgPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9uKHRoaXMuX21hcC5fY29udGFpbmVyLCAndG91Y2hzdGFydCcsIHRoaXMuX29uRG93biwgdGhpcyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Eb3duLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uRG93bjogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGNsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCk7XG4gIFx0XHRpZiAoZS50b3VjaGVzLmxlbmd0aCAhPT0gMSkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGZpcnN0ID0gZS50b3VjaGVzWzBdO1xuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9uZXdQb3MgPSBuZXcgUG9pbnQoZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSk7XG5cbiAgXHRcdHRoaXMuX2hvbGRUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0dGhpcy5fY2FuY2VsKCk7XG4gIFx0XHRcdGlmICghdGhpcy5faXNUYXBWYWxpZCgpKSB7IHJldHVybjsgfVxuXG4gIFx0XHRcdC8vIHByZXZlbnQgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cyBodHRwczovL3czYy5naXRodWIuaW8vdG91Y2gtZXZlbnRzLyNtb3VzZS1ldmVudHNcbiAgXHRcdFx0b24oZG9jdW1lbnQsICd0b3VjaGVuZCcsIHByZXZlbnREZWZhdWx0KTtcbiAgXHRcdFx0b24oZG9jdW1lbnQsICd0b3VjaGVuZCB0b3VjaGNhbmNlbCcsIHRoaXMuX2NhbmNlbENsaWNrUHJldmVudCk7XG4gIFx0XHRcdHRoaXMuX3NpbXVsYXRlRXZlbnQoJ2NvbnRleHRtZW51JywgZmlyc3QpO1xuICBcdFx0fSwgdGhpcyksIHRhcEhvbGREZWxheSk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCAndG91Y2hlbmQgdG91Y2hjYW5jZWwgY29udGV4dG1lbnUnLCB0aGlzLl9jYW5jZWwsIHRoaXMpO1xuICBcdFx0b24oZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfY2FuY2VsQ2xpY2tQcmV2ZW50OiBmdW5jdGlvbiBjYW5jZWxDbGlja1ByZXZlbnQoKSB7XG4gIFx0XHRvZmYoZG9jdW1lbnQsICd0b3VjaGVuZCcsIHByZXZlbnREZWZhdWx0KTtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ3RvdWNoZW5kIHRvdWNoY2FuY2VsJywgY2FuY2VsQ2xpY2tQcmV2ZW50KTtcbiAgXHR9LFxuXG4gIFx0X2NhbmNlbDogZnVuY3Rpb24gKCkge1xuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ3RvdWNoZW5kIHRvdWNoY2FuY2VsIGNvbnRleHRtZW51JywgdGhpcy5fY2FuY2VsLCB0aGlzKTtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdmU6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgZmlyc3QgPSBlLnRvdWNoZXNbMF07XG4gIFx0XHR0aGlzLl9uZXdQb3MgPSBuZXcgUG9pbnQoZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSk7XG4gIFx0fSxcblxuICBcdF9pc1RhcFZhbGlkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbmV3UG9zLmRpc3RhbmNlVG8odGhpcy5fc3RhcnRQb3MpIDw9IHRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZTtcbiAgXHR9LFxuXG4gIFx0X3NpbXVsYXRlRXZlbnQ6IGZ1bmN0aW9uICh0eXBlLCBlKSB7XG4gIFx0XHR2YXIgc2ltdWxhdGVkRXZlbnQgPSBuZXcgTW91c2VFdmVudCh0eXBlLCB7XG4gIFx0XHRcdGJ1YmJsZXM6IHRydWUsXG4gIFx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG4gIFx0XHRcdHZpZXc6IHdpbmRvdyxcbiAgXHRcdFx0Ly8gZGV0YWlsOiAxLFxuICBcdFx0XHRzY3JlZW5YOiBlLnNjcmVlblgsXG4gIFx0XHRcdHNjcmVlblk6IGUuc2NyZWVuWSxcbiAgXHRcdFx0Y2xpZW50WDogZS5jbGllbnRYLFxuICBcdFx0XHRjbGllbnRZOiBlLmNsaWVudFksXG4gIFx0XHRcdC8vIGJ1dHRvbjogMixcbiAgXHRcdFx0Ly8gYnV0dG9uczogMlxuICBcdFx0fSk7XG5cbiAgXHRcdHNpbXVsYXRlZEV2ZW50Ll9zaW11bGF0ZWQgPSB0cnVlO1xuXG4gIFx0XHRlLnRhcmdldC5kaXNwYXRjaEV2ZW50KHNpbXVsYXRlZEV2ZW50KTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSB0YXBIb2xkOiBIYW5kbGVyXG4gIC8vIExvbmcgdGFwIGhhbmRsZXIgdG8gc2ltdWxhdGUgYGNvbnRleHRtZW51YCBldmVudCAodXNlZnVsIGluIG1vYmlsZSBTYWZhcmkpLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAndGFwSG9sZCcsIFRhcEhvbGQpO1xuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5Ub3VjaFpvb20gaXMgdXNlZCBieSBMLk1hcCB0byBhZGQgcGluY2ggem9vbSBvbiBzdXBwb3J0ZWQgbW9iaWxlIGJyb3dzZXJzLlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBzZWN0aW9uIFRvdWNoIGludGVyYWN0aW9uIG9wdGlvbnNcbiAgXHQvLyBAb3B0aW9uIHRvdWNoWm9vbTogQm9vbGVhbnxTdHJpbmcgPSAqXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGNhbiBiZSB6b29tZWQgYnkgdG91Y2gtZHJhZ2dpbmcgd2l0aCB0d28gZmluZ2Vycy4gSWZcbiAgXHQvLyBwYXNzZWQgYCdjZW50ZXInYCwgaXQgd2lsbCB6b29tIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXcgcmVnYXJkbGVzcyBvZlxuICBcdC8vIHdoZXJlIHRoZSB0b3VjaCBldmVudHMgKGZpbmdlcnMpIHdlcmUuIEVuYWJsZWQgZm9yIHRvdWNoLWNhcGFibGUgd2ViXG4gIFx0Ly8gYnJvd3NlcnMuXG4gIFx0dG91Y2hab29tOiBCcm93c2VyLnRvdWNoLFxuXG4gIFx0Ly8gQG9wdGlvbiBib3VuY2VBdFpvb21MaW1pdHM6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50IHRoZSBtYXAgdG8gem9vbSBiZXlvbmQgbWluL21heCB6b29tXG4gIFx0Ly8gYW5kIHRoZW4gYm91bmNlIGJhY2sgd2hlbiBwaW5jaC16b29taW5nLlxuICBcdGJvdW5jZUF0Wm9vbUxpbWl0czogdHJ1ZVxuICB9KTtcblxuICB2YXIgVG91Y2hab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRhZGRDbGFzcyh0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtdG91Y2gtem9vbScpO1xuICBcdFx0b24odGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Ub3VjaFN0YXJ0LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC16b29tJyk7XG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Ub3VjaFN0YXJ0LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hTdGFydDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gIFx0XHRpZiAoIWUudG91Y2hlcyB8fCBlLnRvdWNoZXMubGVuZ3RoICE9PSAyIHx8IG1hcC5fYW5pbWF0aW5nWm9vbSB8fCB0aGlzLl96b29taW5nKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgcDEgPSBtYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZS50b3VjaGVzWzBdKSxcbiAgXHRcdCAgICBwMiA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMV0pO1xuXG4gIFx0XHR0aGlzLl9jZW50ZXJQb2ludCA9IG1hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO1xuICBcdFx0dGhpcy5fc3RhcnRMYXRMbmcgPSBtYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCk7XG4gIFx0XHRpZiAobWFwLm9wdGlvbnMudG91Y2hab29tICE9PSAnY2VudGVyJykge1xuICBcdFx0XHR0aGlzLl9waW5jaFN0YXJ0TGF0TG5nID0gbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocDEuYWRkKHAyKS5fZGl2aWRlQnkoMikpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9zdGFydERpc3QgPSBwMS5kaXN0YW5jZVRvKHAyKTtcbiAgXHRcdHRoaXMuX3N0YXJ0Wm9vbSA9IG1hcC5nZXRab29tKCk7XG5cbiAgXHRcdHRoaXMuX21vdmVkID0gZmFsc2U7XG4gIFx0XHR0aGlzLl96b29taW5nID0gdHJ1ZTtcblxuICBcdFx0bWFwLl9zdG9wKCk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUsIHRoaXMpO1xuICBcdFx0b24oZG9jdW1lbnQsICd0b3VjaGVuZCB0b3VjaGNhbmNlbCcsIHRoaXMuX29uVG91Y2hFbmQsIHRoaXMpO1xuXG4gIFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKCFlLnRvdWNoZXMgfHwgZS50b3VjaGVzLmxlbmd0aCAhPT0gMiB8fCAhdGhpcy5fem9vbWluZykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBwMSA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMF0pLFxuICBcdFx0ICAgIHAyID0gbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUudG91Y2hlc1sxXSksXG4gIFx0XHQgICAgc2NhbGUgPSBwMS5kaXN0YW5jZVRvKHAyKSAvIHRoaXMuX3N0YXJ0RGlzdDtcblxuICBcdFx0dGhpcy5fem9vbSA9IG1hcC5nZXRTY2FsZVpvb20oc2NhbGUsIHRoaXMuX3N0YXJ0Wm9vbSk7XG5cbiAgXHRcdGlmICghbWFwLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzICYmIChcbiAgXHRcdFx0KHRoaXMuX3pvb20gPCBtYXAuZ2V0TWluWm9vbSgpICYmIHNjYWxlIDwgMSkgfHxcbiAgXHRcdFx0KHRoaXMuX3pvb20gPiBtYXAuZ2V0TWF4Wm9vbSgpICYmIHNjYWxlID4gMSkpKSB7XG4gIFx0XHRcdHRoaXMuX3pvb20gPSBtYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG1hcC5vcHRpb25zLnRvdWNoWm9vbSA9PT0gJ2NlbnRlcicpIHtcbiAgXHRcdFx0dGhpcy5fY2VudGVyID0gdGhpcy5fc3RhcnRMYXRMbmc7XG4gIFx0XHRcdGlmIChzY2FsZSA9PT0gMSkgeyByZXR1cm47IH1cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEdldCBkZWx0YSBmcm9tIHBpbmNoIHRvIGNlbnRlciwgc28gY2VudGVyTGF0TG5nIGlzIGRlbHRhIGFwcGxpZWQgdG8gaW5pdGlhbCBwaW5jaExhdExuZ1xuICBcdFx0XHR2YXIgZGVsdGEgPSBwMS5fYWRkKHAyKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX2NlbnRlclBvaW50KTtcbiAgXHRcdFx0aWYgKHNjYWxlID09PSAxICYmIGRlbHRhLnggPT09IDAgJiYgZGVsdGEueSA9PT0gMCkgeyByZXR1cm47IH1cbiAgXHRcdFx0dGhpcy5fY2VudGVyID0gbWFwLnVucHJvamVjdChtYXAucHJvamVjdCh0aGlzLl9waW5jaFN0YXJ0TGF0TG5nLCB0aGlzLl96b29tKS5zdWJ0cmFjdChkZWx0YSksIHRoaXMuX3pvb20pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdG1hcC5fbW92ZVN0YXJ0KHRydWUsIGZhbHNlKTtcbiAgXHRcdFx0dGhpcy5fbW92ZWQgPSB0cnVlO1xuICBcdFx0fVxuXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpO1xuXG4gIFx0XHR2YXIgbW92ZUZuID0gYmluZChtYXAuX21vdmUsIG1hcCwgdGhpcy5fY2VudGVyLCB0aGlzLl96b29tLCB7cGluY2g6IHRydWUsIHJvdW5kOiBmYWxzZX0sIHVuZGVmaW5lZCk7XG4gIFx0XHR0aGlzLl9hbmltUmVxdWVzdCA9IHJlcXVlc3RBbmltRnJhbWUobW92ZUZuLCB0aGlzLCB0cnVlKTtcblxuICBcdFx0cHJldmVudERlZmF1bHQoZSk7XG4gIFx0fSxcblxuICBcdF9vblRvdWNoRW5kOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkIHx8ICF0aGlzLl96b29taW5nKSB7XG4gIFx0XHRcdHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl96b29taW5nID0gZmFsc2U7XG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpO1xuXG4gIFx0XHRvZmYoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSwgdGhpcyk7XG4gIFx0XHRvZmYoZG9jdW1lbnQsICd0b3VjaGVuZCB0b3VjaGNhbmNlbCcsIHRoaXMuX29uVG91Y2hFbmQsIHRoaXMpO1xuXG4gIFx0XHQvLyBQaW5jaCB1cGRhdGVzIEdyaWRMYXllcnMnIGxldmVscyBvbmx5IHdoZW4gem9vbVNuYXAgaXMgb2ZmLCBzbyB6b29tU25hcCBiZWNvbWVzIG5vVXBkYXRlLlxuICBcdFx0aWYgKHRoaXMuX21hcC5vcHRpb25zLnpvb21BbmltYXRpb24pIHtcbiAgXHRcdFx0dGhpcy5fbWFwLl9hbmltYXRlWm9vbSh0aGlzLl9jZW50ZXIsIHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pLCB0cnVlLCB0aGlzLl9tYXAub3B0aW9ucy56b29tU25hcCk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9tYXAuX3Jlc2V0Vmlldyh0aGlzLl9jZW50ZXIsIHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pKTtcbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSB0b3VjaFpvb206IEhhbmRsZXJcbiAgLy8gVG91Y2ggem9vbSBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAndG91Y2hab29tJywgVG91Y2hab29tKTtcblxuICBNYXAuQm94Wm9vbSA9IEJveFpvb207XG4gIE1hcC5Eb3VibGVDbGlja1pvb20gPSBEb3VibGVDbGlja1pvb207XG4gIE1hcC5EcmFnID0gRHJhZztcbiAgTWFwLktleWJvYXJkID0gS2V5Ym9hcmQ7XG4gIE1hcC5TY3JvbGxXaGVlbFpvb20gPSBTY3JvbGxXaGVlbFpvb207XG4gIE1hcC5UYXBIb2xkID0gVGFwSG9sZDtcbiAgTWFwLlRvdWNoWm9vbSA9IFRvdWNoWm9vbTtcblxuICBleHBvcnRzLkJvdW5kcyA9IEJvdW5kcztcbiAgZXhwb3J0cy5Ccm93c2VyID0gQnJvd3NlcjtcbiAgZXhwb3J0cy5DUlMgPSBDUlM7XG4gIGV4cG9ydHMuQ2FudmFzID0gQ2FudmFzO1xuICBleHBvcnRzLkNpcmNsZSA9IENpcmNsZTtcbiAgZXhwb3J0cy5DaXJjbGVNYXJrZXIgPSBDaXJjbGVNYXJrZXI7XG4gIGV4cG9ydHMuQ2xhc3MgPSBDbGFzcztcbiAgZXhwb3J0cy5Db250cm9sID0gQ29udHJvbDtcbiAgZXhwb3J0cy5EaXZJY29uID0gRGl2SWNvbjtcbiAgZXhwb3J0cy5EaXZPdmVybGF5ID0gRGl2T3ZlcmxheTtcbiAgZXhwb3J0cy5Eb21FdmVudCA9IERvbUV2ZW50O1xuICBleHBvcnRzLkRvbVV0aWwgPSBEb21VdGlsO1xuICBleHBvcnRzLkRyYWdnYWJsZSA9IERyYWdnYWJsZTtcbiAgZXhwb3J0cy5FdmVudGVkID0gRXZlbnRlZDtcbiAgZXhwb3J0cy5GZWF0dXJlR3JvdXAgPSBGZWF0dXJlR3JvdXA7XG4gIGV4cG9ydHMuR2VvSlNPTiA9IEdlb0pTT047XG4gIGV4cG9ydHMuR3JpZExheWVyID0gR3JpZExheWVyO1xuICBleHBvcnRzLkhhbmRsZXIgPSBIYW5kbGVyO1xuICBleHBvcnRzLkljb24gPSBJY29uO1xuICBleHBvcnRzLkltYWdlT3ZlcmxheSA9IEltYWdlT3ZlcmxheTtcbiAgZXhwb3J0cy5MYXRMbmcgPSBMYXRMbmc7XG4gIGV4cG9ydHMuTGF0TG5nQm91bmRzID0gTGF0TG5nQm91bmRzO1xuICBleHBvcnRzLkxheWVyID0gTGF5ZXI7XG4gIGV4cG9ydHMuTGF5ZXJHcm91cCA9IExheWVyR3JvdXA7XG4gIGV4cG9ydHMuTGluZVV0aWwgPSBMaW5lVXRpbDtcbiAgZXhwb3J0cy5NYXAgPSBNYXA7XG4gIGV4cG9ydHMuTWFya2VyID0gTWFya2VyO1xuICBleHBvcnRzLk1peGluID0gTWl4aW47XG4gIGV4cG9ydHMuUGF0aCA9IFBhdGg7XG4gIGV4cG9ydHMuUG9pbnQgPSBQb2ludDtcbiAgZXhwb3J0cy5Qb2x5VXRpbCA9IFBvbHlVdGlsO1xuICBleHBvcnRzLlBvbHlnb24gPSBQb2x5Z29uO1xuICBleHBvcnRzLlBvbHlsaW5lID0gUG9seWxpbmU7XG4gIGV4cG9ydHMuUG9wdXAgPSBQb3B1cDtcbiAgZXhwb3J0cy5Qb3NBbmltYXRpb24gPSBQb3NBbmltYXRpb247XG4gIGV4cG9ydHMuUHJvamVjdGlvbiA9IGluZGV4O1xuICBleHBvcnRzLlJlY3RhbmdsZSA9IFJlY3RhbmdsZTtcbiAgZXhwb3J0cy5SZW5kZXJlciA9IFJlbmRlcmVyO1xuICBleHBvcnRzLlNWRyA9IFNWRztcbiAgZXhwb3J0cy5TVkdPdmVybGF5ID0gU1ZHT3ZlcmxheTtcbiAgZXhwb3J0cy5UaWxlTGF5ZXIgPSBUaWxlTGF5ZXI7XG4gIGV4cG9ydHMuVG9vbHRpcCA9IFRvb2x0aXA7XG4gIGV4cG9ydHMuVHJhbnNmb3JtYXRpb24gPSBUcmFuc2Zvcm1hdGlvbjtcbiAgZXhwb3J0cy5VdGlsID0gVXRpbDtcbiAgZXhwb3J0cy5WaWRlb092ZXJsYXkgPSBWaWRlb092ZXJsYXk7XG4gIGV4cG9ydHMuYmluZCA9IGJpbmQ7XG4gIGV4cG9ydHMuYm91bmRzID0gdG9Cb3VuZHM7XG4gIGV4cG9ydHMuY2FudmFzID0gY2FudmFzO1xuICBleHBvcnRzLmNpcmNsZSA9IGNpcmNsZTtcbiAgZXhwb3J0cy5jaXJjbGVNYXJrZXIgPSBjaXJjbGVNYXJrZXI7XG4gIGV4cG9ydHMuY29udHJvbCA9IGNvbnRyb2w7XG4gIGV4cG9ydHMuZGl2SWNvbiA9IGRpdkljb247XG4gIGV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO1xuICBleHBvcnRzLmZlYXR1cmVHcm91cCA9IGZlYXR1cmVHcm91cDtcbiAgZXhwb3J0cy5nZW9KU09OID0gZ2VvSlNPTjtcbiAgZXhwb3J0cy5nZW9Kc29uID0gZ2VvSnNvbjtcbiAgZXhwb3J0cy5ncmlkTGF5ZXIgPSBncmlkTGF5ZXI7XG4gIGV4cG9ydHMuaWNvbiA9IGljb247XG4gIGV4cG9ydHMuaW1hZ2VPdmVybGF5ID0gaW1hZ2VPdmVybGF5O1xuICBleHBvcnRzLmxhdExuZyA9IHRvTGF0TG5nO1xuICBleHBvcnRzLmxhdExuZ0JvdW5kcyA9IHRvTGF0TG5nQm91bmRzO1xuICBleHBvcnRzLmxheWVyR3JvdXAgPSBsYXllckdyb3VwO1xuICBleHBvcnRzLm1hcCA9IGNyZWF0ZU1hcDtcbiAgZXhwb3J0cy5tYXJrZXIgPSBtYXJrZXI7XG4gIGV4cG9ydHMucG9pbnQgPSB0b1BvaW50O1xuICBleHBvcnRzLnBvbHlnb24gPSBwb2x5Z29uO1xuICBleHBvcnRzLnBvbHlsaW5lID0gcG9seWxpbmU7XG4gIGV4cG9ydHMucG9wdXAgPSBwb3B1cDtcbiAgZXhwb3J0cy5yZWN0YW5nbGUgPSByZWN0YW5nbGU7XG4gIGV4cG9ydHMuc2V0T3B0aW9ucyA9IHNldE9wdGlvbnM7XG4gIGV4cG9ydHMuc3RhbXAgPSBzdGFtcDtcbiAgZXhwb3J0cy5zdmcgPSBzdmc7XG4gIGV4cG9ydHMuc3ZnT3ZlcmxheSA9IHN2Z092ZXJsYXk7XG4gIGV4cG9ydHMudGlsZUxheWVyID0gdGlsZUxheWVyO1xuICBleHBvcnRzLnRvb2x0aXAgPSB0b29sdGlwO1xuICBleHBvcnRzLnRyYW5zZm9ybWF0aW9uID0gdG9UcmFuc2Zvcm1hdGlvbjtcbiAgZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgZXhwb3J0cy52aWRlb092ZXJsYXkgPSB2aWRlb092ZXJsYXk7XG5cbiAgdmFyIG9sZEwgPSB3aW5kb3cuTDtcbiAgZXhwb3J0cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gIFx0d2luZG93LkwgPSBvbGRMO1xuICBcdHJldHVybiB0aGlzO1xuICB9XG4gIC8vIEFsd2F5cyBleHBvcnQgdXMgdG8gd2luZG93IGdsb2JhbCAoc2VlICMyMzY0KVxuICB3aW5kb3cuTCA9IGV4cG9ydHM7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQtc3JjLmpzLm1hcFxuIiwiLyoqIVxuKiBAbGljZW5zZVxuKiBUaGUgTUlUIExpY2Vuc2UgKE1JVClcbiogXG4qIENvcHlyaWdodCAoYykgMjAxNyBNw6VucyBCZWNrbWFuIC0gd3d3LnNwYXRpYWxpbGx1c2lvbnMuY29tXG4qIFxuKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4qIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4qIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuKiBcbiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4qIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4qIFxuKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4qIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuKiBTT0ZUV0FSRS5cbiogXG4qIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGF0IHd3dy5zcGF0aWFsaWxsdXNpb25zLmNvbSBcbiovXG4hZnVuY3Rpb24oSSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShcIm1pbHN5bWJvbFwiLHQpOkkubXM9dCgpfSh0aGlzLGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e0JsYWNrOntDaXZpbGlhbjpcImJsYWNrXCIsRnJpZW5kOlwiYmxhY2tcIixIb3N0aWxlOlwiYmxhY2tcIixOZXV0cmFsOlwiYmxhY2tcIixVbmtub3duOlwiYmxhY2tcIn0sRGFyazp7Q2l2aWxpYW46XCJyZ2IoODAsMCw4MClcIixGcmllbmQ6XCJyZ2IoMCwxMDcsMTQwKVwiLEhvc3RpbGU6XCJyZ2IoMjAwLDAsMClcIixOZXV0cmFsOlwicmdiKDAsMTYwLDApXCIsVW5rbm93bjpcInJnYigyMjUsMjIwLDApXCJ9LEZyYW1lQ29sb3I6e0NpdmlsaWFuOlwicmdiKDI1NSwwLDI1NSlcIixGcmllbmQ6XCJyZ2IoMCwgMjU1LCAyNTUpXCIsSG9zdGlsZTpcInJnYigyNTUsIDAsIDApXCIsTmV1dHJhbDpcInJnYigwLCAyNTUsIDApXCIsVW5rbm93bjpcInJnYigyNTUsIDI1NSwgMClcIn0sSWNvbkNvbG9yOntDaXZpbGlhbjpcInJnYigyNTUsMCwyNTUpXCIsRnJpZW5kOlwicmdiKDAsIDI1NSwgMjU1KVwiLEhvc3RpbGU6XCJyZ2IoMjU1LCAwLCAwKVwiLE5ldXRyYWw6XCJyZ2IoMCwgMjU1LCAwKVwiLFVua25vd246XCJyZ2IoMjU1LCAyNTUsIDApXCJ9LExpZ2h0OntDaXZpbGlhbjpcInJnYigyNTUsMTYxLDI1NSlcIixGcmllbmQ6XCJyZ2IoMTI4LDIyNCwyNTUpXCIsSG9zdGlsZTpcInJnYigyNTUsMTI4LDEyOClcIixOZXV0cmFsOlwicmdiKDE3MCwyNTUsMTcwKVwiLFVua25vd246XCJyZ2IoMjU1LDI1NSwxMjgpXCJ9LE1lZGl1bTp7Q2l2aWxpYW46XCJyZ2IoMTI4LDAsMTI4KVwiLEZyaWVuZDpcInJnYigwLDE2OCwyMjApXCIsSG9zdGlsZTpcInJnYigyNTUsNDgsNDkpXCIsTmV1dHJhbDpcInJnYigwLDIyNiwxMTApXCIsVW5rbm93bjpcInJnYigyNTUsMjU1LDApXCJ9LE5vbmU6e0NpdmlsaWFuOiExLEZyaWVuZDohMSxIb3N0aWxlOiExLE5ldXRyYWw6ITEsVW5rbm93bjohMX0sT2ZmV2hpdGU6e0NpdmlsaWFuOlwicmdiKDIzOSwgMjM5LCAyMzkpXCIsRnJpZW5kOlwicmdiKDIzOSwgMjM5LCAyMzkpXCIsSG9zdGlsZTpcInJnYigyMzksIDIzOSwgMjM5KVwiLE5ldXRyYWw6XCJyZ2IoMjM5LCAyMzksIDIzOSlcIixVbmtub3duOlwicmdiKDIzOSwgMjM5LCAyMzkpXCJ9LFdoaXRlOntDaXZpbGlhbjpcIndoaXRlXCIsRnJpZW5kOlwid2hpdGVcIixIb3N0aWxlOlwid2hpdGVcIixOZXV0cmFsOlwid2hpdGVcIixVbmtub3duOlwid2hpdGVcIn19O2Z1bmN0aW9uIEUoSSl7dmFyIHQsRT1bXSxSPVtdLGU9dGhpcy5jb2xvcnMuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTtpZighdGhpcy5tZXRhZGF0YS5mcmFtZSYmdGhpcy5zdHlsZS5pY29ufHx2b2lkIDA9PT10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLnR5cGUpcmV0dXJue3ByZTpFLHBvc3Q6UixiYm94OnRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3h9O3ZhciBBLEM9e3R5cGU6dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy50eXBlfTtzd2l0Y2goQy50eXBlKXtjYXNlXCJwYXRoXCI6Qy5kPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcuZDticmVhaztjYXNlXCJjaXJjbGVcIjpDLmN4PXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcuY3gsQy5jeT10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLmN5LEMucj10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLnJ9KEMuZmlsbD10aGlzLmNvbG9ycy5maWxsQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sQy5maWxsb3BhY2l0eT10aGlzLnN0eWxlLmZpbGxPcGFjaXR5LEMuc3Ryb2tlPWUsQy5zdHJva2V3aWR0aD0xMDw9dGhpcy5zdHlsZS5zaXplP3RoaXMuc3R5bGUuc3Ryb2tlV2lkdGg6MTAsdGhpcy5zdHlsZS5mcmFtZSYmMDx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCkmJihcInBhdGhcIj09Qy50eXBlJiZ0aGlzLm1ldGFkYXRhLmZpbGwmJiF0aGlzLnN0eWxlLm1vbm9Db2xvcj8oKEE9e3R5cGU6dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy50eXBlfSkuZD10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLmQrXCIgWlwiLEEuc3Ryb2tld2lkdGg9MTA8PXRoaXMuc3R5bGUuc2l6ZT90aGlzLnN0eWxlLnN0cm9rZVdpZHRoOjEwKTpBPUMsRS5wdXNoKEkub3V0bGluZShBLHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSkpO2lmKFwiXCI9PXRoaXMuc3R5bGUubW9ub0NvbG9yJiZ0aGlzLnN0eWxlLmZpbGx8fCF0aGlzLm1ldGFkYXRhLm5vdHByZXNlbnR8fChDLnN0cm9rZWRhc2hhcnJheT10aGlzLm1ldGFkYXRhLm5vdHByZXNlbnQpLFIucHVzaChDKSx0aGlzLm1ldGFkYXRhLnNwYWNlJiYodD17RnJpZW5kOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIk0gMTAwLDMwIEMgOTAsMzAgODAsMzUgNjguNjU2MjUsNTAgbCA2Mi42ODc1LDAgQyAxMjAsMzUgMTEwLDMwIDEwMCwzMFwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIk02Nyw1MCBMMTAwLDIwIDEzMyw1MCB6XCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwiTTQ1LDUwIGwwLC0yMCAxMTAsMCAwLDIwIHpcIn0sVW5rbm93bjp7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDplLGQ6XCJNIDEwMCAyMi41IEMgODUgMjIuNSA3MCAzMS42NjkyMTEgNjYgNTAgTCAxMzQgNTAgQyAxMzAgMzEuNjY5MjA0IDExNSAyMi41IDEwMCAyMi41IHpcIn19LFIucHVzaCh0W3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dKSksdGhpcy5tZXRhZGF0YS5hY3Rpdml0eSYmKHQ9e0ZyaWVuZDp7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDplLGQ6XCJtIDE2MCwxMzUgMCwxNSAxNSwwIDAsLTE1IHogbSAtMTM1LDAgMTUsMCAwLDE1IC0xNSwwIHogbSAxMzUsLTg1IDAsMTUgMTUsMCAwLC0xNSB6IG0gLTEzNSwwIDE1LDAgMCwxNSAtMTUsMCB6XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwiTSAxMDAgMjggTCA4OS40MDYyNSAzOC41OTM3NSBMIDEwMCA0OS4yMTg3NSBMIDExMC41OTM3NSAzOC41OTM3NSBMIDEwMCAyOCB6IE0gMzguNjg3NSA4OS4zMTI1IEwgMjguMDYyNSA5OS45Mzc1IEwgMzguNjg3NSAxMTAuNTMxMjUgTCA0OS4yODEyNSA5OS45Mzc1IEwgMzguNjg3NSA4OS4zMTI1IHogTSAxNjEuNDA2MjUgODkuNDA2MjUgTCAxNTAuNzgxMjUgMTAwIEwgMTYxLjQwNjI1IDExMC41OTM3NSBMIDE3MiAxMDAgTCAxNjEuNDA2MjUgODkuNDA2MjUgeiBNIDk5LjkzNzUgMTUwLjcxODc1IEwgODkuMzEyNSAxNjEuMzEyNSBMIDk5LjkzNzUgMTcxLjkzNzUgTCAxMTAuNTMxMjUgMTYxLjMxMjUgTCA5OS45Mzc1IDE1MC43MTg3NVwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIm0gMTQwLDE0MCAxNSwwIDAsMTUgLTE1LDAgeiBtIC04MCwwIDAsMTUgLTE1LDAgMCwtMTUgeiBtIDgwLC04MCAwLC0xNSAxNSwwIDAsMTUgeiBtIC04MCwwIC0xNSwwIDAsLTE1IDE1LDAgelwifSxVbmtub3duOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIk0gMTA3Ljk2ODc1IDMxLjQ2ODc1IEwgOTIuMDMxMjUgMzEuNzE4NzUgTCA5Mi4wMzEyNSA0Ni40Mzc1IEwgMTA3LjcxODc1IDQ2LjQzNzUgTCAxMDcuOTY4NzUgMzEuNDY4NzUgeiBNIDQ3LjAzMTI1IDkyLjUgTCAzMS4wOTM3NSA5Mi43NSBMIDMxLjA5Mzc1IDEwNy41IEwgNDYuNzgxMjUgMTA3LjUgTCA0Ny4wMzEyNSA5Mi41IHogTSAxNjguNDM3NSA5Mi41IEwgMTUyLjUgOTIuNzUgTCAxNTIuNSAxMDcuNSBMIDE2OC4xODc1IDEwNy41IEwgMTY4LjQzNzUgOTIuNSB6IE0gMTA3Ljk2ODc1IDE1My41NjI1IEwgOTIuMDMxMjUgMTUzLjgxMjUgTCA5Mi4wMzEyNSAxNjguNTMxMjUgTCAxMDcuNzE4NzUgMTY4LjUzMTI1IEwgMTA3Ljk2ODc1IDE1My41NjI1IHpcIn19LFIucHVzaCh0W3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dKSksdGhpcy5tZXRhZGF0YS5jeWJlcnNwYWNlJiYodD17RnJpZW5kOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIm0gMTM1LDE1MCA0MCwtNDAgMCw0MCB6XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwibSAxNTAsNzggMCw0NCAyMiwtMjIgelwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOmUsZDpcIm0gMTE1LDE1NSA0MCwtNDAgMCw0MCB6XCJ9LFVua25vd246e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ZSxkOlwiTSAxNTAgNjUuNyBMIDE1MCAxMzQgQyAxNzYgMTIzIDE3NiA3Ny4yIDE1MCA2NS43IHpcIn19LFIucHVzaCh0W3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dKSksdGhpcy5zdHlsZS5maWxsJiZ0aGlzLnN0eWxlLmZyYW1lJiZ0aGlzLm1ldGFkYXRhLm5vdHByZXNlbnQmJiF0aGlzLm1ldGFkYXRhLnVuZnJhbWVkKXtzd2l0Y2goKEM9e3R5cGU6dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy50eXBlfSkudHlwZSl7Y2FzZVwicGF0aFwiOkMuZD10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLmQ7YnJlYWs7Y2FzZVwiY2lyY2xlXCI6Qy5jeD10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5nLmN4LEMuY3k9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy5jeSxDLnI9dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZy5yfUMuZmlsbD0hMSxDLnN0cm9rZT10aGlzLmNvbG9ycy53aGl0ZVt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxDLnN0cm9rZXdpZHRoPXBhcnNlRmxvYXQodGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrMSxDLnN0cm9rZWRhc2hhcnJheT10aGlzLm1ldGFkYXRhLm5vdHByZXNlbnQsUi5wdXNoKEMpfXJldHVybntwcmU6RSxwb3N0OlIsYmJveDp0aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5iYm94fX1mdW5jdGlvbiBSKEkpe3ZhciB0LEUsUj1bXSxlPVtdLEE9bmV3IEkuQkJveCh7eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0pLEM9W10sVD1bXSxTPVtdLE49W107aWYodGhpcy5zdHlsZS5pY29uKXt2YXIgTz10aGlzLmNvbG9ycy5maWxsQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sRz10aGlzLmNvbG9ycy5maWxsQ29sb3IuTmV1dHJhbDtFPXRoaXMuY29sb3JzLmljb25Db2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTt2YXIgbz10aGlzLmNvbG9ycy5pY29uRmlsbENvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dLE09dGhpcy5jb2xvcnMubm9uZVt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXSxpPXRoaXMuY29sb3JzLmJsYWNrW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dLEw9dGhpcy5jb2xvcnMud2hpdGVbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0scz0odGhpcy5tZXRhZGF0YS5TVEQyNTI1P1wiMjUyNVwiOlwiQVBQNlwiKStcIixcIit0aGlzLm1ldGFkYXRhLmRpbWVuc2lvbit0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uK3RoaXMubWV0YWRhdGEubm90cHJlc2VudCt0aGlzLm1ldGFkYXRhLm51bWJlclNJREMrXCIsZnJhbWU6XCIrdGhpcy5zdHlsZS5mcmFtZStcIixhbHRlcm5hdGVNZWRhbDpcIit0aGlzLnN0eWxlLmFsdGVybmF0ZU1lZGFsK1wiLGNvbG9yczp7ZmlsbGNvbG9yOlwiK08rXCIsbmV1dHJhbENvbG9yXCIrRytcIixpY29uQ29sb3I6XCIrRStcIixpY29uRmlsbENvbG9yOlwiK28rXCIsbm9uZTpcIitNK1wiLGJsYWNrOlwiK2krXCIsd2hpdGU6XCIrTCtcIn1cIjtpZihDPUkuX2ljb25DYWNoZS5oYXNPd25Qcm9wZXJ0eShzKT9JLl9pY29uQ2FjaGVbc10uaWNvblBhcnRzOihJLl9pY29uQ2FjaGVbc109e30sSS5faWNvbkNhY2hlW3NdLmljb25QYXJ0cz1JLl9nZXRJY29uUGFydHModGhpcy5tZXRhZGF0YSx0aGlzLmNvbG9ycyx0aGlzLm1ldGFkYXRhLlNURDI1MjUsdGhpcy5zdHlsZS5tb25vQ29sb3IsdGhpcy5zdHlsZS5hbHRlcm5hdGVNZWRhbCkpLHRoaXMubWV0YWRhdGEubnVtYmVyU0lEQ3x8KC0xIT1bXCJXTUdYLS1cIixcIldNTVgtLVwiLFwiV01GWC0tXCIsXCJXTVgtLS1cIixcIldNU1gtLVwiXS5pbmRleE9mKHRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZCkmJihBLnkxPTEwLFwiVW5rbm93blwiIT10aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uJiYoQS54Mj10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5iYm94LngyKzIwKSksSS5faWNvbkNhY2hlW3NdLmhhc093blByb3BlcnR5KFwibGV0dGVyU0lEQ1wiKT8odD1JLl9pY29uQ2FjaGVbc10ubGV0dGVyU0lEQy5pY29ucyxOPUkuX2ljb25DYWNoZVtzXS5sZXR0ZXJTSURDLmJib3gpOlwiZnVuY3Rpb25cIj09dHlwZW9mIEkuX2dldEljb25zLmxldHRlcj8oSS5faWNvbkNhY2hlW3NdLmxldHRlclNJREM9SS5fZ2V0SWNvbnMubGV0dGVyKEksQyx0aGlzLm1ldGFkYXRhLlNURDI1MjUpLHQ9SS5faWNvbkNhY2hlW3NdLmxldHRlclNJREMuaWNvbnMsTj1JLl9pY29uQ2FjaGVbc10ubGV0dGVyU0lEQy5iYm94KTpjb25zb2xlLndhcm4oXCJtcy5fZ2V0SWNvbnMubGV0dGVyKCkgaXMgbm90IHByZXNlbnQsIHlvdSB3aWxsIG5lZWQgdG8gbG9hZCBmdW5jdGlvbmFsaXR5IGZvciBsZXR0ZXIgYmFzZWQgU0lEQ3NcIikpLHRoaXMubWV0YWRhdGEubnVtYmVyU0lEQyl7dmFyIG49U3RyaW5nKHRoaXMub3B0aW9ucy5zaWRjKS5zdWJzdHIoNCwyKTtJLl9pY29uQ2FjaGVbc10uaGFzT3duUHJvcGVydHkoXCJudW1iZXJTSURDXCIpP0kuX2ljb25DYWNoZVtzXS5udW1iZXJTSURDLnN5bWJvbFNldC5oYXNPd25Qcm9wZXJ0eShuKT8odD1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0uaWNvbnMsVD1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0ubTEsUz1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0ubTIsTj1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0uYmJveCk6XCJmdW5jdGlvblwiPT10eXBlb2YgSS5fZ2V0SWNvbnMubnVtYmVyPyhJLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl09SS5fZ2V0SWNvbnMubnVtYmVyKEksbixDLHRoaXMubWV0YWRhdGEuU1REMjUyNSksdD1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0uaWNvbnMsVD1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0ubTEsUz1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0ubTIsTj1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0uYmJveCk6Y29uc29sZS53YXJuKFwibXMuX2dldEljb25zLm51bWJlcigpIGlzIG5vdCBwcmVzZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGxvYWQgZnVuY3Rpb25hbGl0eSBmb3IgbnVtYmVyIGJhc2VkIFNJRENzXCIpOihJLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQz17fSxJLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXQ9e30sXCJmdW5jdGlvblwiPT10eXBlb2YgSS5fZ2V0SWNvbnMubnVtYmVyPyhJLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl09SS5fZ2V0SWNvbnMubnVtYmVyKEksbixDLHRoaXMubWV0YWRhdGEuU1REMjUyNSksdD1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0uaWNvbnMsVD1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0ubTEsUz1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0ubTIsTj1JLl9pY29uQ2FjaGVbc10ubnVtYmVyU0lEQy5zeW1ib2xTZXRbbl0uYmJveCk6Y29uc29sZS53YXJuKFwibXMuX2dldEljb25zLm51bWJlcigpIGlzIG5vdCBwcmVzZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGxvYWQgZnVuY3Rpb25hbGl0eSBmb3IgbnVtYmVyIGJhc2VkIFNJRENzXCIpKX12YXIgYT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6RT10aGlzLmNvbG9ycy5pY29uQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sZDpcIm0gOTQuODIwNiw3OC4xMzcyIGMgLTAuNDU0Miw2Ljg5ODMgMC42NTMyLDE0LjMyMyA1LjM0MjQsMTkuNjk4NSA0LjUwOSw1LjY5MzMgMTEuMzA5LDkuMzU3MyAxNC45OCwxNS43MjgzIDMuMTY0LDYuMzUzIC0wLjA5LDE0LjI0NSAtNS45MDMsMTcuODIyIC03LjI2OCw0LjgxNyAtMTguNjIxOSwyLjc4NSAtMjIuNzMyOCwtNS4yNDkgLTEuNTUxMSwtMi43OTYgLTIuMzgyOCwtNS45MzEgLTIuODgxNSwtOS4wNzEgLTMuNTA0OCwwLjQxNiAtNy4wMDkzLDAuODM1IC0xMC41MTQyLDEuMjUyIDAuODIzOSw4LjU1NSA1LjIyNjMsMTcuMjg3IDEzLjI1NDQsMjEuMTExIDcuODIzMiwzLjczNiAxNy4xODkxLDMuNzgzIDI1LjMyOTEsMS4wNTIgOC44NDYsLTMuMTAzIDE1LjczNywtMTEuOTU4IDE1LjE3MSwtMjEuNTM3IDAuMDUsLTYuOTUxIC00LjI3MiwtMTIuODUgLTkuMTM0LC0xNy40MDMgLTQuNTI2LC00LjY5NDkgLTExLjA0OCwtOC4zODYyIC0xMi40MDEsLTE1LjI3NDggLTEuMjE1LC0yLjM2MzkgLTAuODg5LC04LjEyOSAtMC44ODksLTguMTI5IHogbSAtMC42MjUzLC0yMC41MTc3IDAsMTEuNjUwOSAxMS42NTI3LDAgMCwtMTEuNjUwOSB6XCJ9XTtpZih0aGlzLm1ldGFkYXRhLm51bWJlclNJREMpe3ZhciBsPXRbdGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDYpXTtpZih2b2lkIDA9PT1sJiY5NTw9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig0LDIpJiYobD10W3RoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoMCw0KStcIjAwXCJdKSx2b2lkIDA9PT1sKVwiMDAwMDAwXCIhPXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoMCw2KSYmXCJcIiE9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDYpJiYoZS5wdXNoKGEpLHRoaXMudmFsaWRJY29uPSExKTtlbHNle3ZhciByPU51bWJlcih0aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDAsNikpO3RoaXMubWV0YWRhdGEuZGlzbW91bnRlZCYmMTEwMzAxPD1yJiZyPD0xMTA0MDMmJihcIjAwXCIhPXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoNiwyKSYmXCIwMFwiIT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDgsMikmJihsPVtJLl9zY2FsZSguNSxsKV0pLFwiMDBcIj09dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig2LDIpJiZcIjAwXCIhPXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoOCwyKSYmKGw9W0kuX3RyYW5zbGF0ZSgwLC0xMCxJLl9zY2FsZSguNyxsKSldKSxcIjAwXCIhPXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoNiwyKSYmXCIwMFwiPT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDgsMikmJihsPVtJLl90cmFuc2xhdGUoMCwxMCxJLl9zY2FsZSguNyxsKSldKSksZS5wdXNoKGwpfWlmKE4uaGFzT3duUHJvcGVydHkodGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDYpKSYmKEE9bmV3IEkuQkJveChOW3RoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoMCw2KV0pKSxcIjk1XCI9PXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoNCwyKSYmZS5wdXNoKENbXCJHUi5JQy5GRi5IRUFEUVVBUlRFUlMgT1IgSEVBRFFVQVJURVJTIEVMRU1FTlRcIl0pLFwiOTZcIj09dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig0LDIpJiZlLnB1c2goQ1tcIkdSLklDLkZGLkRJVklTSU9OIEFORCBCRUxPVyBTVVBQT1JUXCJdKSxcIjk3XCI9PXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoNCwyKSYmZS5wdXNoKENbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdKSxcIjk4XCI9PXRoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoNCwyKSYmZS5wdXNoKENbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0pLFwiMDBcIiE9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig2LDIpKXt2YXIgUD1UW3RoaXMubWV0YWRhdGEuZnVuY3Rpb25pZC5zdWJzdHIoNiwyKV07dm9pZCAwPT09UD90aGlzLnZhbGlkSWNvbj0hMTplLnB1c2goUCl9aWYoXCIwMFwiIT10aGlzLm1ldGFkYXRhLmZ1bmN0aW9uaWQuc3Vic3RyKDgsMikpe3ZhciB5PVNbdGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cig4LDIpXTt2b2lkIDA9PT15P3RoaXMudmFsaWRJY29uPSExOmUucHVzaCh5KX19ZWxzZXt2YXIgYz10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoMCwxKStcIi1cIit0aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoMiwxKStcIi1cIit0aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNCw2KTt0Lmhhc093blByb3BlcnR5KGMpP2UucHVzaCh0W2NdKTpcIi0tLS0tLVwiIT10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNCw2KSYmXCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDQsNikmJihlLnB1c2goYSksdGhpcy52YWxpZEljb249ITEpLE5bY10mJihBPW5ldyBJLkJCb3goTltjXSkpfX1yZXR1cm4gdGhpcy5zdHlsZS5mcmFtZSYmdGhpcy5tZXRhZGF0YS5maWxsJiYhdGhpcy5zdHlsZS5tb25vQ29sb3ImJiF0aGlzLm1ldGFkYXRhLmNvbnRyb2xNZWFzdXJlfHwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZSLnB1c2goSS5vdXRsaW5lKGUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSx7cHJlOlIscG9zdDplLGJib3g6QX19ZnVuY3Rpb24gZShJKXt2YXIgdCxFPVtdLFI9W10sZT1uZXcgSS5CQm94KHRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gpLEE9dGhpcy5zdHlsZS5mcmFtZUNvbG9yP3RoaXMuc3R5bGUuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLmNvbG9ycy5pY29uQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sQz1uZXcgSS5CQm94LFQ9TnVtYmVyKHRoaXMuc3R5bGUuaHFTdGFmZkxlbmd0aHx8SS5faHFTdGFmZkxlbmd0aCk7aWYodGhpcy5tZXRhZGF0YS5oZWFkcXVhcnRlcnMmJjA8VCl7dmFyIFM9MTAwOy0xPFtcIkFpckZyaWVuZFwiLFwiQWlyTmV1dHJhbFwiLFwiR3JvdW5kRnJpZW5kXCIsXCJHcm91bmROZXV0cmFsXCIsXCJTZWFOZXV0cmFsXCIsXCJTdWJzdXJmYWNlTmV1dHJhbFwiXS5pbmRleE9mKHRoaXMubWV0YWRhdGEuZGltZW5zaW9uK3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24pJiYoUz1lLnkyKSx0aGlzLm1ldGFkYXRhLmRpbWVuc2lvblR5cGUrdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvblR5cGU9PVwiU3Vic3VyZmFjZUZyaWVuZFwiJiYoUz1lLnkxKSx0PXt0eXBlOlwicGF0aFwiLGQ6XCJNXCIrZS54MStcIixcIitTK1wiIExcIitlLngxK1wiLFwiKyhlLnkyK1QpfSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZFLnB1c2goSS5vdXRsaW5lKHQsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSxSLnB1c2godCksQy55Mj1lLnkyK1R9aWYodGhpcy5tZXRhZGF0YS50YXNrRm9yY2Upe3ZhciBOPXtcIkNvcnBzL01FRlwiOjExMCxBcm15OjE0NSxcIkFybXkgR3JvdXAvZnJvbnRcIjoxODAsXCJSZWdpb24vVGhlYXRlclwiOjIxNX07dD17dHlwZTpcInBhdGhcIixkOlwiTVwiKygxMDAtKE49Tlt0aGlzLm1ldGFkYXRhLmVjaGVsb25dfHw5MCkvMikrXCIsXCIrZS55MStcIiBMXCIrKDEwMC1OLzIpK1wiLFwiKyhlLnkxLTQwKStcIiBcIisoMTAwK04vMikrXCIsXCIrKGUueTEtNDApK1wiIFwiKygxMDArTi8yKStcIixcIitlLnkxfSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZFLnB1c2goSS5vdXRsaW5lKHQsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSxSLnB1c2godCksQy54MT1NYXRoLm1pbihlLngxLDEwMC1OLzIpLEMueDI9TWF0aC5tYXgoZS54MiwxMDArTi8yKSxDLnkxPWUueTEtNDB9aWYodGhpcy5tZXRhZGF0YS5pbnN0YWxsYXRpb24pe3ZhciBPPTA7LTE8W1wiQWlySG9zdGlsZVwiLFwiR3JvdW5kSG9zdGlsZVwiLFwiU2VhSG9zdGlsZVwiXS5pbmRleE9mKHRoaXMubWV0YWRhdGEuZGltZW5zaW9uK3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24pJiYoTz0xNCksLTE8W1wiQWlyVW5rbm93blwiLFwiR3JvdW5kVW5rbm93blwiLFwiU2VhVW5rbm93blwiLFwiQWlyRnJpZW5kXCIsXCJTZWFGcmllbmRcIl0uaW5kZXhPZih0aGlzLm1ldGFkYXRhLmRpbWVuc2lvbit0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uKSYmKE89MiksdD17dHlwZTpcInBhdGhcIixmaWxsOkEsZDpcIk04NSxcIisoZS55MStPLXRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgvMikrXCIgODUsXCIrKGUueTEtMTApK1wiIDExNSxcIisoZS55MS0xMCkrXCIgMTE1LFwiKyhlLnkxK08tdGhpcy5zdHlsZS5zdHJva2VXaWR0aC8yKStcIiAxMDAsXCIrKGUueTEtdGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrXCIgWlwifSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZFLnB1c2goSS5vdXRsaW5lKHQsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSxSLnB1c2godCksQy5tZXJnZSh7eTE6ZS55MS0xMH0pfWlmKHRoaXMubWV0YWRhdGEuZmVpbnREdW1teSl7dmFyIEc9ZS55MS0wLWUud2lkdGgoKS8yO3Q9e3R5cGU6XCJwYXRoXCIsc3Ryb2tlZGFzaGFycmF5OkkuX2Rhc2hBcnJheXMuZmVpbnREdW1teSxkOlwiTTEwMCxcIitHK1wiIExcIitlLngxK1wiLFwiKyhlLnkxLTApK1wiIE0xMDAsXCIrRytcIiBMXCIrZS54MitcIixcIisoZS55MS0wKX0sMDx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCYmRS5wdXNoKEkub3V0bGluZSh0LHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSksUi5wdXNoKHQpLEMubWVyZ2Uoe3kxOkd9KX1pZih0aGlzLm1ldGFkYXRhLmVjaGVsb24pe3ZhciBvPXRoaXMubWV0YWRhdGEuaW5zdGFsbGF0aW9uPzE1OjAsTT17XCJUZWFtL0NyZXdcIjp7Zzpbe3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6ZS55MS0yMCxyOjE1fSx7dHlwZTpcInBhdGhcIixkOlwiTTgwLFwiKyhlLnkxLTEwKStcIkwxMjAsXCIrKGUueTEtMzApfV0sYmJveDp7eTE6ZS55MS00MC1vfX0sU3F1YWQ6e2c6W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDpBLGN4OjEwMCxjeTplLnkxLTIwLHI6Ny41fV0sYmJveDp7eTE6ZS55MS0yMC03LjUtb319LFNlY3Rpb246e2c6W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDpBLGN4OjExNSxjeTplLnkxLTIwLHI6Ny41fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6QSxjeDo4NSxjeTplLnkxLTIwLHI6Ny41fV0sYmJveDp7eTE6ZS55MS0yMC03LjUtb319LFwiUGxhdG9vbi9kZXRhY2htZW50XCI6e2c6W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDpBLGN4OjEwMCxjeTplLnkxLTIwLHI6Ny41fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6QSxjeDo3MCxjeTplLnkxLTIwLHI6Ny41fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6QSxjeDoxMzAsY3k6ZS55MS0yMCxyOjcuNX1dLGJib3g6e3kxOmUueTEtMjAtNy41LW99fSxcIkNvbXBhbnkvYmF0dGVyeS90cm9vcFwiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTTEwMCxcIisoZS55MS0xMCkrXCJMMTAwLFwiKyhlLnkxLTM1KX1dLGJib3g6e3kxOmUueTEtNDAtb319LFwiQmF0dGFsaW9uL3NxdWFkcm9uXCI6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNOTAsXCIrKGUueTEtMTApK1wiTDkwLFwiKyhlLnkxLTM1KX0se3R5cGU6XCJwYXRoXCIsZDpcIk0xMTAsXCIrKGUueTEtMTApK1wiTDExMCxcIisoZS55MS0zNSl9XSxiYm94Ont5MTplLnkxLTQwLW99fSxcIlJlZ2ltZW50L2dyb3VwXCI6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLFwiKyhlLnkxLTEwKStcIkwxMDAsXCIrKGUueTEtMzUpfSx7dHlwZTpcInBhdGhcIixkOlwiTTEyMCxcIisoZS55MS0xMCkrXCJMMTIwLFwiKyhlLnkxLTM1KX0se3R5cGU6XCJwYXRoXCIsZDpcIk04MCxcIisoZS55MS0xMCkrXCJMODAsXCIrKGUueTEtMzUpfV0sYmJveDp7eTE6ZS55MS00MC1vfX0sQnJpZ2FkZTp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk04Ny41LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1XCJ9XSxiYm94Ont5MTplLnkxLTE1LTI1LW99fSxEaXZpc2lvbjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk03MCxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgIE0xMDUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtbyx4MTo3MCx4MjoxMzB9fSxcIkNvcnBzL01FRlwiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTTUyLjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTg3LjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgTTEyMi41LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1XCJ9XSxiYm94Ont5MTplLnkxLTE1LTI1LW8seDE6NTIuNSx4MjoxNDcuNX19LEFybXk6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNMzUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICBNNzAsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICBNMTA1LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgIE0xNDAsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtbyx4MTozNSx4MjoxNjV9fSxcIkFybXkgR3JvdXAvZnJvbnRcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0xNy41LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgIE01Mi41LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgIE04Ny41LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgIE0xMjIuNSxcIisoZS55MS0xMCkrXCIgbDI1LC0yNSBtMCwyNSBsLTI1LC0yNSAgICAgICBNMTU3LjUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtbyx4MToxNy41LHgyOjE4Mi41fX0sXCJSZWdpb24vVGhlYXRlclwiOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTTAsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICBNMzUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICBNNzAsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICBNMTA1LFwiKyhlLnkxLTEwKStcIiBsMjUsLTI1IG0wLDI1IGwtMjUsLTI1ICAgIE0xNDAsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjUgICAgIE0xNzUsXCIrKGUueTEtMTApK1wiIGwyNSwtMjUgbTAsMjUgbC0yNSwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtbyx4MTowLHgyOjIwMH19LENvbW1hbmQ6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNNzAsXCIrKGUueTEtMjIuNSkrXCIgbDI1LDAgbS0xMi41LDEyLjUgbDAsLTI1ICAgTTEwNSxcIisoZS55MS0yMi41KStcIiBsMjUsMCBtLTEyLjUsMTIuNSBsMCwtMjVcIn1dLGJib3g6e3kxOmUueTEtMTUtMjUtbyx4MTo3MCx4MjoxMzB9fX07TS5oYXNPd25Qcm9wZXJ0eSh0aGlzLm1ldGFkYXRhLmVjaGVsb24pJiYodD1NW3RoaXMubWV0YWRhdGEuZWNoZWxvbl0uZywwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZFLnB1c2goSS5vdXRsaW5lKHt0eXBlOlwidHJhbnNsYXRlXCIseDowLHk6LW8sZHJhdzp0fSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpLFIucHVzaCh7dHlwZTpcInRyYW5zbGF0ZVwiLHg6MCx5Oi1vLGRyYXc6dH0pLEMubWVyZ2UoTVt0aGlzLm1ldGFkYXRhLmVjaGVsb25dLmJib3gpKX1pZih0aGlzLm1ldGFkYXRhLm1vYmlsaXR5KXt0aGlzLnN0eWxlLmZyYW1lfHwoZS55Mj10aGlzLmJib3gueTIpLFwiTmV1dHJhbFwiPT10aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uJiYoXCJUb3dlZFwiIT10aGlzLm1ldGFkYXRhLm1vYmlsaXR5JiZcIlNob3J0IHRvd2VkIGFycmF5XCIhPXRoaXMubWV0YWRhdGEubW9iaWxpdHkmJlwiTG9uZyB0b3dlZCBBcnJheVwiIT10aGlzLm1ldGFkYXRhLm1vYmlsaXR5fHwoZS55Mis9OCksXCJPdmVyIHNub3cgKHByaW1lIG1vdmVyKVwiIT10aGlzLm1ldGFkYXRhLm1vYmlsaXR5JiZcIlNsZWRcIiE9dGhpcy5tZXRhZGF0YS5tb2JpbGl0eXx8KGUueTIrPTEzKSk7dmFyIGk9e1wiV2hlZWxlZCBsaW1pdGVkIGNyb3NzIGNvdW50cnlcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNTMsMSBsIDk0LDBcIn0se3R5cGU6XCJjaXJjbGVcIixjeDo1OCxjeTo4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixjeDoxNDIsY3k6OCxyOjh9XSxiYm94Ont5MjplLnkyKzE2fX0sXCJXaGVlbGVkIGNyb3NzIGNvdW50cnlcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gNTMsMSBsIDk0LDBcIn0se3R5cGU6XCJjaXJjbGVcIixjeDo1OCxjeTo4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixjeDoxNDIsY3k6OCxyOjh9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5Ojgscjo4fV0sYmJveDp7eTI6ZS55MisxNn19LFRyYWNrZWQ6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDUzLDEgbCAxMDAsMCBjMTUsMCAxNSwxNSAwLDE1IGwgLTEwMCwwIGMtMTUsMCAtMTUsLTE1IDAsLTE1XCJ9XSxiYm94Ont5MjplLnkyKzE4LHgxOjQyLHgyOjE2OH19LFwiV2hlZWxlZCBhbmQgdHJhY2tlZCBjb21iaW5hdGlvblwiOntnOlt7dHlwZTpcImNpcmNsZVwiLGN4OjU4LGN5Ojgscjo4fSx7dHlwZTpcInBhdGhcIixkOlwiTSA4MywxIGwgNzAsMCBjMTUsMCAxNSwxNSAwLDE1IGwgLTcwLDAgYy0xNSwwIC0xNSwtMTUgMCwtMTVcIn1dLGJib3g6e3kyOmUueTIrMTYseDI6MTY4fX0sVG93ZWQ6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDYzLDEgbCA3NCwwXCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NTgsY3k6MyxyOjh9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTQyLGN5OjMscjo4fV0sYmJveDp7eTI6ZS55MisxMH19LFJhaWw6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDUzLDEgbCA5NiwwXCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NTgsY3k6OCxyOjh9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NzMsY3k6OCxyOjh9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTI3LGN5Ojgscjo4fSx7dHlwZTpcImNpcmNsZVwiLGN4OjE0MixjeTo4LHI6OH1dLGJib3g6e3kyOmUueTIrMTZ9fSxcIk92ZXIgc25vdyAocHJpbWUgbW92ZXIpXCI6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDUwLC05IGwxMCwxMCA5MCwwXCJ9XSxiYm94Ont5MjplLnkyKzl9fSxTbGVkOntnOlt7dHlwZTpcInBhdGhcIixkOlwiTSAxNDUsLTEyICBjMTUsMCAxNSwxNSAwLDE1IGwgLTkwLDAgYy0xNSwwIC0xNSwtMTUgMCwtMTVcIn1dLGJib3g6e3kyOmUueTIrMTUseDE6NDIseDI6MTY4fX0sXCJQYWNrIGFuaW1hbHNcIjp7Zzpbe3R5cGU6XCJwYXRoXCIsZDpcIk0gODAsMjAgbCAxMCwtMjAgMTAsMjAgMTAsLTIwIDEwLDIwXCJ9XSxiYm94Ont5MjplLnkyKzIwfX0sQmFyZ2U6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDUwLDEgbCAxMDAsMCBjMCwxMCAtMTAwLDEwIC0xMDAsMFwifV0sYmJveDp7eTI6ZS55MisxMH19LEFtcGhpYmlvdXM6e2c6W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDY1LDEwIGMgMCwtMTAgMTAsLTEwIDEwLDAgMCwxMCAxMCwxMCAxMCwwXFx0MCwtMTAgMTAsLTEwIDEwLDAgMCwxMCAxMCwxMCAxMCwwXFx0MCwtMTAgMTAsLTEwIDEwLDAgMCwxMCAxMCwxMCAxMCwwXFx0MCwtMTAgMTAsLTEwIDEwLDBcIn1dLGJib3g6e3kyOmUueTIrMjB9fSxcIlNob3J0IHRvd2VkIGFycmF5XCI6e2c6W3t0eXBlOlwicGF0aFwiLGZpbGw6QSxkOlwiTSA1MCw1IGwgMTAwLDAgTTUwLDAgbDEwLDAgMCwxMCAtMTAsMCB6IE0xNTAsMCBsLTEwLDAgMCwxMCAxMCwwIHogTTEwMCwwIGw1LDUgLTUsNSAtNSwtNSB6XCJ9XSxiYm94Ont5MjplLnkyKzEwfX0sXCJMb25nIHRvd2VkIEFycmF5XCI6e2c6W3t0eXBlOlwicGF0aFwiLGZpbGw6QSxkOlwiTSA1MCw1IGwgMTAwLDAgTTUwLDAgbDEwLDAgMCwxMCAtMTAsMCB6IE0xNTAsMCBsLTEwLDAgMCwxMCAxMCwwIHogTTEwNSwwIGwtMTAsMCAwLDEwIDEwLDAgeiBNNzUsMCBsNSw1IC01LDUgLTUsLTUgeiAgTTEyNSwwIGw1LDUgLTUsNSAtNSwtNSB6XCJ9XSxiYm94Ont5MjplLnkyKzEwfX19O2kuaGFzT3duUHJvcGVydHkodGhpcy5tZXRhZGF0YS5tb2JpbGl0eSkmJih0PWlbdGhpcy5tZXRhZGF0YS5tb2JpbGl0eV0uZywwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZFLnB1c2goSS5vdXRsaW5lKHt0eXBlOlwidHJhbnNsYXRlXCIseDowLHk6ZS55MixkcmF3OnR9LHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSksUi5wdXNoKHt0eXBlOlwidHJhbnNsYXRlXCIseDowLHk6ZS55MixkcmF3OnR9KSxDLm1lcmdlKGlbdGhpcy5tZXRhZGF0YS5tb2JpbGl0eV0uYmJveCkpfWlmKHRoaXMubWV0YWRhdGEubGVhZGVyc2hpcCl7dmFyIEw9e0ZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwibSA0NSw2MCA1NSwtMjUgNTUsMjVcIn19W3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dO0wmJihFLnB1c2goTCksQy5tZXJnZSh7eTE6ZS55MS0yMH0pKX1mb3IodmFyIHM9MDtzPEUubGVuZ3RoO3MrKylFW3NdLmhhc093blByb3BlcnR5KFwiZmlsbFwiKXx8KEVbc10uZmlsbD0hMSksRVtzXS5oYXNPd25Qcm9wZXJ0eShcInN0cm9rZVwiKXx8KEVbc10uc3Ryb2tlPUEpLEVbc10uaGFzT3duUHJvcGVydHkoXCJzdHJva2V3aWR0aFwiKXx8KEVbc10uc3Ryb2tld2lkdGg9dGhpcy5zdHlsZS5zdHJva2VXaWR0aCk7Zm9yKHM9MDtzPFIubGVuZ3RoO3MrKylSW3NdLmhhc093blByb3BlcnR5KFwiZmlsbFwiKXx8KFJbc10uZmlsbD0hMSksUltzXS5oYXNPd25Qcm9wZXJ0eShcInN0cm9rZVwiKXx8KFJbc10uc3Ryb2tlPUEpLFJbc10uaGFzT3duUHJvcGVydHkoXCJzdHJva2V3aWR0aFwiKXx8KFJbc10uc3Ryb2tld2lkdGg9dGhpcy5zdHlsZS5zdHJva2VXaWR0aCk7cmV0dXJue3ByZTpFLHBvc3Q6UixiYm94OkN9fWZ1bmN0aW9uIEEoSSl7dmFyIHQ9W10sRT1bXSxSPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gsZT1SLnkxLEE9Ui55MjtpZih0aGlzLm1ldGFkYXRhLmNvbmRpdGlvbilpZih0aGlzLm1ldGFkYXRhLmZpbGwmJlwiXCI9PT10aGlzLnN0eWxlLm1vbm9Db2xvciYmIXRoaXMuc3R5bGUuc2ltcGxlU3RhdHVzTW9kaWZpZXIpeyF0aGlzLm1ldGFkYXRhLmZyYW1lJiZ0aGlzLm1ldGFkYXRhLmljb25Cb3R0b20mJihBPXRoaXMubWV0YWRhdGEuaWNvbkJvdHRvbSksdGhpcy5vcHRpb25zLmhlYWRxdWFydGVyc0VsZW1lbnQmJihBKz0zNSksQSs9dGhpcy5tZXRhZGF0YS5tb2JpbGl0eT8yNTo1LEUucHVzaCh7dHlwZTpcInBhdGhcIixzdHJva2V3aWR0aDp0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLGZpbGw6e0Z1bGx5Q2FwYWJsZTpcInJnYigwLDI1NSwwKVwiLERhbWFnZWQ6XCJyZ2IoMjU1LDI1NSwwKVwiLERlc3Ryb3llZDpcInJnYigyNTUsMCwwKVwiLEZ1bGxUb0NhcGFjaXR5OlwicmdiKDAsIDE4MCwgMjQwKVwifVt0aGlzLm1ldGFkYXRhLmNvbmRpdGlvbl0sc3Ryb2tlOnRoaXMuY29sb3JzLmZyYW1lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sZDpcIk1cIitSLngxK1wiLFwiK0ErXCIgbFwiK1Iud2lkdGgoKStcIiwwIDAsMjUgLVwiK1Iud2lkdGgoKStcIiwwIHpcIn0pLEErPTI1LDA8dGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgmJnQucHVzaChJLm91dGxpbmUoRSx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCx0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLFwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLm91dGxpbmVDb2xvcj90aGlzLnN0eWxlLm91dGxpbmVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTp0aGlzLnN0eWxlLm91dGxpbmVDb2xvcikpfWVsc2VcIkRhbWFnZWRcIiE9dGhpcy5tZXRhZGF0YS5jb25kaXRpb24mJlwiRGVzdHJveWVkXCIhPXRoaXMubWV0YWRhdGEuY29uZGl0aW9ufHwoRS5wdXNoKHt0eXBlOlwicGF0aFwiLGQ6XCJNMTUwLDIwIEw1MCwxODBcIixzdHJva2V3aWR0aDoyKnRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsc3Ryb2tlOnRoaXMuY29sb3JzLmZyYW1lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl19KSxlPTIwLEE9MTgwKSxcIkRlc3Ryb3llZFwiPT10aGlzLm1ldGFkYXRhLmNvbmRpdGlvbiYmRS5wdXNoKHt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsMjAgTDE1MCwxODBcIixzdHJva2V3aWR0aDoyKnRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsc3Ryb2tlOnRoaXMuY29sb3JzLmZyYW1lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl19KSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZ0LnB1c2goSS5vdXRsaW5lKEUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKTtyZXR1cm57cHJlOnQscG9zdDpFLGJib3g6e3kxOmUseTI6QX19fWZ1bmN0aW9uIEMoSSl7dmFyIHQ9W10sRT1bXSxSPXRoaXMuYmJveCxlPVIueDEsQT1SLngyLEM9Ui55MSxUPVIueTI7aWYoXCJcIiE9PXRoaXMub3B0aW9ucy5lbmdhZ2VtZW50QmFyKXtDLT02O3ZhciBTPXRoaXMuc3R5bGUuZm9udGZhbWlseSxOPXRoaXMuY29sb3JzLmljb25Db2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXXx8dGhpcy5jb2xvcnMuaWNvbkNvbG9yLkZyaWVuZDtFLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDp0aGlzLm9wdGlvbnMuZW5nYWdlbWVudEJhcix4OjEwMCx5OlIueTEtMTEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLGZvbnRzaXplOjIyLGZvbnRmYW1pbHk6Uyxmb250d2VpZ2h0OlwiYm9sZFwiLGZpbGw6TixzdHJva2U6ITF9KTt2YXIgTz0hMTtpZih0aGlzLm1ldGFkYXRhLmZpbGwmJlwiXCI9PT10aGlzLnN0eWxlLm1vbm9Db2xvcil7Tz17VEFSR0VUOlwicmdiKDI1NSwgMCwgMClcIixcIk5PTi1UQVJHRVRcIjpcInJnYigyNTUsIDI1NSwgMjU1KVwiLEVYUElSRUQ6XCJyZ2IoMjU1LCAxMjAsIDApXCJ9W3RoaXMub3B0aW9ucy5lbmdhZ2VtZW50VHlwZS50b1VwcGVyQ2FzZSgpXXx8dGhpcy5jb2xvcnMuZmlsbENvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dfXZhciBHLG89TWF0aC5tYXgoUi53aWR0aCgpLDE2KnRoaXMub3B0aW9ucy5lbmdhZ2VtZW50QmFyLmxlbmd0aCk7aWYoZT1NYXRoLm1pbihlLDEwMC1vLzIpLEE9TWF0aC5tYXgoQSwxMDArby8yKSxFLnVuc2hpZnQoe3R5cGU6XCJwYXRoXCIsc3Ryb2tld2lkdGg6dGhpcy5zdHlsZS5zdHJva2VXaWR0aCxmaWxsOk8sc3Ryb2tlOnRoaXMuY29sb3JzLmZyYW1lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl0sZDpcIk1cIisoMTAwLW8vMikrXCIsXCIrQytcIiBsXCIrbytcIiwwIDAsLTI1IC1cIitvK1wiLDAgelwifSksQy09MjUsMDx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aClHPXRoaXMubWV0YWRhdGEuZmlsbCYmXCJcIj09PXRoaXMuc3R5bGUubW9ub0NvbG9yP0VbMF06RSx0LnB1c2goSS5vdXRsaW5lKEcsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKX1yZXR1cm57cHJlOnQscG9zdDpFLGJib3g6e3gxOmUseDI6QSx5MTpDLHkyOlR9fX1mdW5jdGlvbiBUKEkpe3ZhciB0PVtdLEU9W10sUj10aGlzLm1ldGFkYXRhLmJhc2VHZW9tZXRyeS5iYm94LGU9dGhpcy5jb2xvcnMuZnJhbWVDb2xvclt0aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9uXTtpZih0aGlzLm1ldGFkYXRhLmRpbWVuc2lvblVua25vd24mJmUmJkUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OlwiP1wiLHg6MTAwLHk6MTI3LGZpbGw6ZSxmb250ZmFtaWx5OnRoaXMuc3R5bGUuZm9udGZhbWlseSxmb250c2l6ZTo4MCxmb250d2VpZ2h0OlwiYm9sZFwiLHRleHRhbmNob3I6XCJtaWRkbGVcIn0pLHRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmcmJmUpe3ZhciBBPTEwOyhcIlVua25vd25cIj09dGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbnx8XCJIb3N0aWxlXCI9PXRoaXMubWV0YWRhdGEuYWZmaWxpYXRpb24mJlwiU3Vic3VyZmFjZVwiIT10aGlzLm1ldGFkYXRhLmRpbWVuc2lvbikmJihBPS0xMCksXCJFeGVyY2lzZVwiPT10aGlzLm1ldGFkYXRhLmNvbnRleHQmJih0aGlzLm1ldGFkYXRhLmpva2VyfHx0aGlzLm1ldGFkYXRhLmZha2VyfHxFLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpcIlhcIix4OlIueDIrQSx5OjYwLGZpbGw6ZSxmb250ZmFtaWx5OnRoaXMuc3R5bGUuZm9udGZhbWlseSxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwiLHRleHRhbmNob3I6XCJzdGFydFwifSksdGhpcy5tZXRhZGF0YS5qb2tlciYmRS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6XCJKXCIseDpSLngyK0EseTo2MCxmaWxsOmUsZm9udGZhbWlseTp0aGlzLnN0eWxlLmZvbnRmYW1pbHksZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIix0ZXh0YW5jaG9yOlwic3RhcnRcIn0pLHRoaXMubWV0YWRhdGEuZmFrZXImJkUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OlwiS1wiLHg6Ui54MitBLHk6NjAsZmlsbDplLGZvbnRmYW1pbHk6dGhpcy5zdHlsZS5mb250ZmFtaWx5LGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCIsdGV4dGFuY2hvcjpcInN0YXJ0XCJ9KSxSPXt4MjpSLngyK0ErMjIseTE6MzV9KSxcIlNpbXVsYXRpb25cIj09dGhpcy5tZXRhZGF0YS5jb250ZXh0JiYoRS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6XCJTXCIseDpSLngyK0EseTo2MCxmaWxsOmUsZm9udGZhbWlseTp0aGlzLnN0eWxlLmZvbnRmYW1pbHksZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIix0ZXh0YW5jaG9yOlwic3RhcnRcIn0pLFI9bmV3IEkuQkJveCh7eDI6Ui54MitBKzIyLHkxOjM1fSkpfXJldHVybiAwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZ0LnB1c2goSS5vdXRsaW5lKEUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSx7cHJlOnQscG9zdDpFLGJib3g6Un19ZnVuY3Rpb24gUyhJKXt2YXIgdCxFLFI9W10sZT1bXSxBPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gsUz0oXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUuaW5mb0NvbG9yP3RoaXMuc3R5bGUuaW5mb0NvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUuaW5mb0NvbG9yKXx8dGhpcy5jb2xvcnMuaWNvbkNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dfHx0aGlzLmNvbG9ycy5pY29uQ29sb3IuRnJpZW5kLE49dGhpcy5zdHlsZS5mb250ZmFtaWx5LE89dGhpcy5zdHlsZS5pbmZvU2l6ZSxDPVwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLmluZm9CYWNrZ3JvdW5kP3RoaXMuc3R5bGUuaW5mb0JhY2tncm91bmRbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5pbmZvQmFja2dyb3VuZCxUPVwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLmluZm9CYWNrZ3JvdW5kP3RoaXMuc3R5bGUuaW5mb0JhY2tncm91bmRbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5pbmZvQmFja2dyb3VuZCxHPW5ldyBJLkJCb3gsbz0yMDtmdW5jdGlvbiBNKEkpe3ZhciB0LEU9W107Zm9yKHZhciBSIGluIEkpaWYodGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KFIpJiZcIlwiIT10aGlzLm9wdGlvbnNbUl0pe2lmKCFJLmhhc093blByb3BlcnR5KFIpKWNvbnRpbnVlO2Zvcih2YXIgZT0wO2U8KElbUl0ubGVuZ3RofHwxKTtlKyspe3ZhciBBO2lmKHQ9e3kyOihBPUFycmF5LmlzQXJyYXkoSVtSXSk/SVtSXVtlXTpJW1JdKS55LHkxOkEueS1BLmZvbnRzaXplfSxcInN0YXJ0XCI9PUEudGV4dGFuY2hvciYmKHQueDE9QS54LHQueDI9QS54K2kodGhpcy5vcHRpb25zW1JdKSooQS5mb250c2l6ZS9PKSksXCJtaWRkbGVcIj09QS50ZXh0YW5jaG9yKXt2YXIgQz1pKHRoaXMub3B0aW9uc1tSXSkqKEEuZm9udHNpemUvTyk7dC54MT1BLngtQy8yLHQueDI9QS54K0MvMn1cImVuZFwiPT1BLnRleHRhbmNob3ImJih0LngxPUEueC1pKHRoaXMub3B0aW9uc1tSXSkqKEEuZm9udHNpemUvTyksdC54Mj1BLngpLEcubWVyZ2UodCk7dmFyIFQ9e3R5cGU6XCJ0ZXh0XCIsZm9udGZhbWlseTpOLGZpbGw6U307QS5oYXNPd25Qcm9wZXJ0eShcImZpbGxcIikmJihULmZpbGw9QS5maWxsKSxBLmhhc093blByb3BlcnR5KFwic3Ryb2tlXCIpJiYoVC5zdHJva2U9QS5zdHJva2UpLEEuaGFzT3duUHJvcGVydHkoXCJ0ZXh0YW5jaG9yXCIpJiYoVC50ZXh0YW5jaG9yPUEudGV4dGFuY2hvciksQS5oYXNPd25Qcm9wZXJ0eShcImZvbnRzaXplXCIpJiYoVC5mb250c2l6ZT1BLmZvbnRzaXplKSxBLmhhc093blByb3BlcnR5KFwiZm9udHdlaWdodFwiKSYmKFQuZm9udHdlaWdodD1BLmZvbnR3ZWlnaHQpLFQueD1BLngsVC55PUEueSxULnRleHQ9dGhpcy5vcHRpb25zW1JdLEUucHVzaChUKX19cmV0dXJuIEV9ZnVuY3Rpb24gaShJKXtpZigwPT1JLmxlbmd0aClyZXR1cm4gMDtmb3IodmFyIHQ9e1wiIFwiOjksXCIhXCI6MTAsJ1wiJzoxNSxcIiNcIjoxNywkOjE3LFwiJVwiOjI3LFwiJlwiOjIyLFwiJ1wiOjgsXCIoXCI6MTAsXCIpXCI6MTAsXCIqXCI6MTIsXCIrXCI6MTgsXCIsXCI6OSxcIi1cIjoxMCxcIi5cIjo5LFwiL1wiOjksMDoxNywxOjE3LDI6MTcsMzoxNyw0OjE3LDU6MTcsNjoxNyw3OjE3LDg6MTcsOToxNyxcIjpcIjoxMCxcIjtcIjoxMCxcIjxcIjoxOCxcIj1cIjoxOCxcIj5cIjoxOCxcIj9cIjoxOSxcIkBcIjozMCxBOjIyLEI6MjIsQzoyMixEOjIyLEU6MjEsRjoxOSxHOjI0LEg6MjIsSTo5LEo6MTcsSzoyMixMOjE5LE06MjUsTjoyMixPOjI0LFA6MjEsUToyNCxSOjIyLFM6MjEsVDoxOSxVOjIyLFY6MjEsVzoyOSxYOjIxLFk6MjEsWjoxOSxcIltcIjoxMCxcIl1cIjoxMCxcIl5cIjoxOCxfOjE3LFwiYFwiOjEwLGE6MTcsYjoxOSxjOjE3LGQ6MTksZToxNyxmOjEwLGc6MTksaDoxOSxpOjksajo5LGs6MTcsbDo5LG06MjcsbjoxOSxvOjE5LHA6MTkscToxOSxyOjEyLHM6MTcsdDoxMCx1OjE5LHY6MTcsdzoyNCx4OjE3LHk6MTcsejoxNSxcIntcIjoxMixcInxcIjo5LFwifVwiOjEyLFwiflwiOjE4fSxFPTAsUj0wO1I8SS5sZW5ndGg7UisrKUUrPU8vMzAqKHRbSVtSXV0/dFtJW1JdXToyOC41KTtyZXR1cm4gRSs9b31pZih0aGlzLm1ldGFkYXRhLm51bWJlclNJREMpe2lmKCFJLl9sYWJlbENhY2hlLmhhc093blByb3BlcnR5KFwibnVtYmVyXCIpKWZvcih0IGluIEkuX2xhYmVsQ2FjaGUubnVtYmVyPXt9LEkuX2xhYmVsT3ZlcnJpZGVzLm51bWJlcilJLl9sYWJlbE92ZXJyaWRlcy5udW1iZXIuaGFzT3duUHJvcGVydHkodCkmJkkuX2xhYmVsT3ZlcnJpZGVzLm51bWJlclt0XS5jYWxsKHRoaXMsSS5fbGFiZWxDYWNoZS5udW1iZXIpO2lmKEU9dGhpcy5tZXRhZGF0YS5mdW5jdGlvbmlkLnN1YnN0cigwLDYpLHRoaXMubWV0YWRhdGEuY29udHJvbE1lYXN1cmUmJkkuX2xhYmVsQ2FjaGUubnVtYmVyLmhhc093blByb3BlcnR5KEUpKXJldHVybiBlLnB1c2goTS5jYWxsKHRoaXMsSS5fbGFiZWxDYWNoZS5udW1iZXJbRV0pKSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZSLnB1c2goSS5vdXRsaW5lKGUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSx7cHJlOlIscG9zdDplLGJib3g6R319ZWxzZXtpZighSS5fbGFiZWxDYWNoZS5oYXNPd25Qcm9wZXJ0eShcImxldHRlclwiKSlmb3IodCBpbiBJLl9sYWJlbENhY2hlLmxldHRlcj17fSxJLl9sYWJlbE92ZXJyaWRlcy5sZXR0ZXIpSS5fbGFiZWxPdmVycmlkZXMubGV0dGVyLmhhc093blByb3BlcnR5KHQpJiZJLl9sYWJlbE92ZXJyaWRlcy5sZXR0ZXJbdF0uY2FsbCh0aGlzLEkuX2xhYmVsQ2FjaGUubGV0dGVyKTtpZihFPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigwLDEpK1wiLVwiK3RoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigyLDEpK1wiLVwiK3RoaXMub3B0aW9ucy5zaWRjLnN1YnN0cig0LDYpLEkuX2xhYmVsQ2FjaGUubGV0dGVyLmhhc093blByb3BlcnR5KEUpKXJldHVybiBlLnB1c2goTS5jYWxsKHRoaXMsSS5fbGFiZWxDYWNoZS5sZXR0ZXJbRV0pKSwwPHRoaXMuc3R5bGUub3V0bGluZVdpZHRoJiZSLnB1c2goSS5vdXRsaW5lKGUsdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgsdGhpcy5zdHlsZS5zdHJva2VXaWR0aCxcIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I/dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl06dGhpcy5zdHlsZS5vdXRsaW5lQ29sb3IpKSx7cHJlOlIscG9zdDplLGJib3g6R319dmFyIEwscyxuLGE9dGhpcy5vcHRpb25zLnF1YW50aXR5fHx0aGlzLm9wdGlvbnMucmVpbmZvcmNlZFJlZHVjZWR8fHRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzfHx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9ufHx0aGlzLm9wdGlvbnMuZXZhbHVhdGlvblJhdGluZ3x8dGhpcy5vcHRpb25zLmNvbWJhdEVmZmVjdGl2ZW5lc3N8fHRoaXMub3B0aW9ucy5zaWduYXR1cmVFcXVpcG1lbnR8fHRoaXMub3B0aW9ucy5oaWdoZXJGb3JtYXRpb258fHRoaXMub3B0aW9ucy5ob3N0aWxlfHx0aGlzLm9wdGlvbnMuaWZmU2lmfHx0aGlzLm9wdGlvbnMuc2lnaW50fHx0aGlzLm9wdGlvbnMudW5pcXVlRGVzaWduYXRpb258fHRoaXMub3B0aW9ucy50eXBlfHx0aGlzLm9wdGlvbnMuZHRnfHx0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aHx8dGhpcy5vcHRpb25zLmxvY2F0aW9ufHx0aGlzLm9wdGlvbnMuc3BlZWR8fHRoaXMub3B0aW9ucy5zcGVjaWFsSGVhZHF1YXJ0ZXJzfHx0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlfHx0aGlzLm9wdGlvbnMuZXF1aXBtZW50VGVhcmRvd25UaW1lfHx0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllcnx8dGhpcy5vcHRpb25zLmF1eGlsaWFyeUVxdWlwbWVudEluZGljYXRvcnx8dGhpcy5vcHRpb25zLmhlYWRxdWFydGVyc0VsZW1lbnR8fHRoaXMub3B0aW9ucy5pbnN0YWxsYXRpb25Db21wb3NpdGlvbnx8dGhpcy5vcHRpb25zLmd1YXJkZWRVbml0fHx0aGlzLm9wdGlvbnMuc3BlY2lhbERlc2lnbmF0b3I7aWYodGhpcy5zdHlsZS5pbmZvRmllbGRzJiZhKXt0aGlzLm9wdGlvbnMuc3BlY2lhbEhlYWRxdWFydGVycyYmZS5wdXNoKChMPXRoaXMub3B0aW9ucy5zcGVjaWFsSGVhZHF1YXJ0ZXJzLHM9NDIsbj0xMTUsMT09TC5sZW5ndGgmJihzPTQ1LG49MTE1KSwzPT1MLmxlbmd0aCYmKHM9MzUsbj0xMTApLDQ8PUwubGVuZ3RoJiYocz0zMixuPTExMCkse3R5cGU6XCJ0ZXh0XCIsdGV4dDpMLHg6MTAwLHk6bix0ZXh0YW5jaG9yOlwibWlkZGxlXCIsZm9udHNpemU6cyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMSxmb250d2VpZ2h0OlwiYm9sZFwifSkpLHRoaXMub3B0aW9ucy5xdWFudGl0eSYmIXRoaXMubWV0YWRhdGEuZGlzbW91bnRlZCYmKGUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnRoaXMub3B0aW9ucy5xdWFudGl0eSx4OjEwMCx5OkEueTEtMTAsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxHLnkxPUEueTEtMTAtTyksdGhpcy5vcHRpb25zLmhlYWRxdWFydGVyc0VsZW1lbnQmJihlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDp0aGlzLm9wdGlvbnMuaGVhZHF1YXJ0ZXJzRWxlbWVudCx4OjEwMCx5OkEueTIrMzUsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLGZvbnRzaXplOjM1LGZvbnRmYW1pbHk6Tixmb250d2VpZ2h0OlwiYm9sZFwiLGZpbGw6UyxzdHJva2U6ITF9KSxHLnkyPUEueTIrMzUpO3ZhciBsLHI9e0wxOlwiXCIsTDI6XCJcIixMMzpcIlwiLEw0OlwiXCIsTDU6XCJcIixSMTpcIlwiLFIyOlwiXCIsUjM6XCJcIixSNDpcIlwiLFI1OlwiXCJ9O2lmKGlzTmFOKHRoaXMub3B0aW9ucy5zaWRjKXx8XCJBaXJcIiE9dGhpcy5tZXRhZGF0YS5iYXNlRGltZW5zaW9ufHwoci5SMT10aGlzLm9wdGlvbnMudW5pcXVlRGVzaWduYXRpb24sci5SMj10aGlzLm9wdGlvbnMuaWZmU2lmLHIuUjM9dGhpcy5vcHRpb25zLnR5cGUsKHRoaXMub3B0aW9ucy5zcGVlZHx8dGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGgpJiYobD1bXSx0aGlzLm9wdGlvbnMuc3BlZWQmJmwucHVzaCh0aGlzLm9wdGlvbnMuc3BlZWQpLHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRoJiZsLnB1c2godGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGgpLHIuUjQ9bC5qb2luKFwiL1wiKSksKHRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzfHx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uKSYmKGw9W10sdGhpcy5vcHRpb25zLnN0YWZmQ29tbWVudHMmJmwucHVzaCh0aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cyksdGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiYmbC5wdXNoKHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24pLHIuUjU9bC5qb2luKFwiL1wiKSkpLChpc05hTih0aGlzLm9wdGlvbnMuc2lkYyl8fFwiR3JvdW5kXCI9PXRoaXMubWV0YWRhdGEuYmFzZURpbWVuc2lvbikmJihyLkwxPXRoaXMub3B0aW9ucy5kdGcsKHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRofHx0aGlzLm9wdGlvbnMubG9jYXRpb24pJiYobD1bXSx0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aCYmbC5wdXNoKHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRoKSx0aGlzLm9wdGlvbnMubG9jYXRpb24mJmwucHVzaCh0aGlzLm9wdGlvbnMubG9jYXRpb24pLHIuTDI9bC5qb2luKFwiL1wiKSksci5MND10aGlzLm9wdGlvbnMudW5pcXVlRGVzaWduYXRpb24sci5MNT10aGlzLm9wdGlvbnMuc3BlZWQsci5SMj10aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cyxyLlI0PXRoaXMub3B0aW9ucy5oaWdoZXJGb3JtYXRpb24sKHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nfHx0aGlzLm9wdGlvbnMuY29tYmF0RWZmZWN0aXZlbmVzc3x8dGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudHx8dGhpcy5vcHRpb25zLmhvc3RpbGV8fHRoaXMub3B0aW9ucy5pZmZTaWYpJiYobD1bXSx0aGlzLm9wdGlvbnMuZXZhbHVhdGlvblJhdGluZyYmbC5wdXNoKHRoaXMub3B0aW9ucy5ldmFsdWF0aW9uUmF0aW5nKSx0aGlzLm9wdGlvbnMuY29tYmF0RWZmZWN0aXZlbmVzcyYmbC5wdXNoKHRoaXMub3B0aW9ucy5jb21iYXRFZmZlY3RpdmVuZXNzKSx0aGlzLm9wdGlvbnMuc2lnbmF0dXJlRXF1aXBtZW50JiZsLnB1c2godGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudCksdGhpcy5vcHRpb25zLmhvc3RpbGUmJmwucHVzaCh0aGlzLm9wdGlvbnMuaG9zdGlsZSksdGhpcy5vcHRpb25zLmlmZlNpZiYmbC5wdXNoKHRoaXMub3B0aW9ucy5pZmZTaWYpLHIuUjU9bC5qb2luKFwiL1wiKSksaXNOYU4odGhpcy5vcHRpb25zLnNpZGMpfHx0aGlzLm1ldGFkYXRhLnVuaXQ/KCh0aGlzLm9wdGlvbnMudHlwZXx8dGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZXx8dGhpcy5vcHRpb25zLmVxdWlwbWVudFRlYXJkb3duVGltZSkmJihsPVtdLHRoaXMub3B0aW9ucy50eXBlJiZsLnB1c2godGhpcy5vcHRpb25zLnR5cGUpLHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGUmJmwucHVzaCh0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlKSx0aGlzLm9wdGlvbnMuZXF1aXBtZW50VGVhcmRvd25UaW1lJiZsLnB1c2godGhpcy5vcHRpb25zLmVxdWlwbWVudFRlYXJkb3duVGltZSksci5MMz1sLmpvaW4oXCIvXCIpKSxyLlIxPXRoaXMub3B0aW9ucy5yZWluZm9yY2VkUmVkdWNlZCx0aGlzLm1ldGFkYXRhLmFjdGl2aXR5JiYoci5SMT10aGlzLm9wdGlvbnMuY291bnRyeSksKHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb258fHRoaXMub3B0aW9ucy5jb21tb25JZGVudGlmaWVyKSYmKGw9W10sdGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiYmbC5wdXNoKHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24pLHRoaXMub3B0aW9ucy5jb21tb25JZGVudGlmaWVyJiZsLnB1c2godGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXIpLHIuUjM9bC5qb2luKFwiL1wiKSkpOigodGhpcy5vcHRpb25zLnR5cGV8fHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGV8fHRoaXMub3B0aW9ucy5jb21tb25JZGVudGlmaWVyfHx0aGlzLm9wdGlvbnMuaW5zdGFsbGF0aW9uQ29tcG9zaXRpb24pJiYobD1bXSx0aGlzLm9wdGlvbnMudHlwZSYmbC5wdXNoKHRoaXMub3B0aW9ucy50eXBlKSx0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlJiZsLnB1c2godGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZSksdGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXImJmwucHVzaCh0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllciksdGhpcy5vcHRpb25zLmluc3RhbGxhdGlvbkNvbXBvc2l0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmluc3RhbGxhdGlvbkNvbXBvc2l0aW9uKSxyLkwzPWwuam9pbihcIi9cIikpLHIuUjE9dGhpcy5vcHRpb25zLmNvdW50cnksKHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb258fHRoaXMub3B0aW9ucy5lcXVpcG1lbnRUZWFyZG93blRpbWUpJiYobD1bXSx0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiksdGhpcy5vcHRpb25zLmVxdWlwbWVudFRlYXJkb3duVGltZSYmbC5wdXNoKHRoaXMub3B0aW9ucy5lcXVpcG1lbnRUZWFyZG93blRpbWUpLHIuUjM9bC5qb2luKFwiL1wiKSkpKSx0aGlzLm1ldGFkYXRhLmRpc21vdW50ZWQmJih0aGlzLm9wdGlvbnMucXVhbnRpdHkmJihlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDp0aGlzLm9wdGlvbnMucXVhbnRpdHkseDoxMDAseTpBLnkyK08sdGV4dGFuY2hvcjpcIm1pZGRsZVwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxHLnkyPUEueTIrTyksci5MMT10aGlzLm9wdGlvbnMuZHRnLCh0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aHx8dGhpcy5vcHRpb25zLmxvY2F0aW9uKSYmKGw9W10sdGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGgmJmwucHVzaCh0aGlzLm9wdGlvbnMuYWx0aXR1ZGVEZXB0aCksdGhpcy5vcHRpb25zLmxvY2F0aW9uJiZsLnB1c2godGhpcy5vcHRpb25zLmxvY2F0aW9uKSxyLkwyPWwuam9pbihcIi9cIikpLCh0aGlzLm9wdGlvbnMudHlwZXx8dGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZXx8dGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXIpJiYobD1bXSx0aGlzLm9wdGlvbnMudHlwZSYmbC5wdXNoKHRoaXMub3B0aW9ucy50eXBlKSx0aGlzLm9wdGlvbnMucGxhdGZvcm1UeXBlJiZsLnB1c2godGhpcy5vcHRpb25zLnBsYXRmb3JtVHlwZSksdGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXImJmwucHVzaCh0aGlzLm9wdGlvbnMuY29tbW9uSWRlbnRpZmllciksci5MMz1sLmpvaW4oXCIvXCIpKSxyLkw0PXRoaXMub3B0aW9ucy51bmlxdWVEZXNpZ25hdGlvbixyLkw1PXRoaXMub3B0aW9ucy5zcGVlZCxyLlIxPXRoaXMub3B0aW9ucy5jb3VudHJ5LHIuUjI9dGhpcy5vcHRpb25zLnN0YWZmQ29tbWVudHMsdGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiYmKGw9W10sdGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbiYmbC5wdXNoKHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24pLHIuUjM9bC5qb2luKFwiL1wiKSksci5SND10aGlzLm9wdGlvbnMuaGlnaGVyRm9ybWF0aW9uLCh0aGlzLm9wdGlvbnMuZXZhbHVhdGlvblJhdGluZ3x8dGhpcy5vcHRpb25zLmNvbWJhdEVmZmVjdGl2ZW5lc3N8fHRoaXMub3B0aW9ucy5zaWduYXR1cmVFcXVpcG1lbnR8fHRoaXMub3B0aW9ucy5ob3N0aWxlfHx0aGlzLm9wdGlvbnMuaWZmU2lmKSYmKGw9W10sdGhpcy5vcHRpb25zLmV2YWx1YXRpb25SYXRpbmcmJmwucHVzaCh0aGlzLm9wdGlvbnMuZXZhbHVhdGlvblJhdGluZyksdGhpcy5vcHRpb25zLmNvbWJhdEVmZmVjdGl2ZW5lc3MmJmwucHVzaCh0aGlzLm9wdGlvbnMuY29tYmF0RWZmZWN0aXZlbmVzcyksdGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudCYmbC5wdXNoKHRoaXMub3B0aW9ucy5zaWduYXR1cmVFcXVpcG1lbnQpLHRoaXMub3B0aW9ucy5ob3N0aWxlJiZsLnB1c2godGhpcy5vcHRpb25zLmhvc3RpbGUpLHRoaXMub3B0aW9ucy5pZmZTaWYmJmwucHVzaCh0aGlzLm9wdGlvbnMuaWZmU2lmKSxyLlI1PWwuam9pbihcIi9cIikpKSxpc05hTih0aGlzLm9wdGlvbnMuc2lkYyl8fFwiU2VhXCIhPXRoaXMubWV0YWRhdGEuYmFzZURpbWVuc2lvbnx8KCh0aGlzLm9wdGlvbnMuZ3VhcmRlZFVuaXR8fHRoaXMub3B0aW9ucy5zcGVjaWFsRGVzaWduYXRvcikmJihsPVtdLHRoaXMub3B0aW9ucy5ndWFyZGVkVW5pdCYmbC5wdXNoKHRoaXMub3B0aW9ucy5ndWFyZGVkVW5pdCksdGhpcy5vcHRpb25zLnNwZWNpYWxEZXNpZ25hdG9yJiZsLnB1c2godGhpcy5vcHRpb25zLnNwZWNpYWxEZXNpZ25hdG9yKSxyLkwxPWwuam9pbihcIi9cIikpLHIuUjE9dGhpcy5vcHRpb25zLnVuaXF1ZURlc2lnbmF0aW9uLHIuUjI9dGhpcy5vcHRpb25zLnR5cGUsci5SMz10aGlzLm9wdGlvbnMuaWZmU2lmLCh0aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50c3x8dGhpcy5vcHRpb25zLmFkZGl0aW9uYWxJbmZvcm1hdGlvbikmJihsPVtdLHRoaXMub3B0aW9ucy5zdGFmZkNvbW1lbnRzJiZsLnB1c2godGhpcy5vcHRpb25zLnN0YWZmQ29tbWVudHMpLHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24mJmwucHVzaCh0aGlzLm9wdGlvbnMuYWRkaXRpb25hbEluZm9ybWF0aW9uKSxyLlI0PWwuam9pbihcIi9cIikpLCh0aGlzLm9wdGlvbnMubG9jYXRpb258fHRoaXMub3B0aW9ucy5zcGVlZCkmJihsPVtdLHRoaXMub3B0aW9ucy5sb2NhdGlvbiYmbC5wdXNoKHRoaXMub3B0aW9ucy5sb2NhdGlvbiksdGhpcy5vcHRpb25zLnNwZWVkJiZsLnB1c2godGhpcy5vcHRpb25zLnNwZWVkKSxyLlI1PWwuam9pbihcIi9cIikpKSxpc05hTih0aGlzLm9wdGlvbnMuc2lkYyl8fFwiU3Vic3VyZmFjZVwiIT10aGlzLm1ldGFkYXRhLmJhc2VEaW1lbnNpb258fChyLkwxPXRoaXMub3B0aW9ucy5zcGVjaWFsRGVzaWduYXRvcixyLlIxPXRoaXMub3B0aW9ucy51bmlxdWVEZXNpZ25hdGlvbixyLlIyPXRoaXMub3B0aW9ucy50eXBlLHIuUjM9dGhpcy5vcHRpb25zLmFsdGl0dWRlRGVwdGgsci5SND10aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cyxyLlI1PXRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb24pLEcueDE9QS54MS1NYXRoLm1heCh0aGlzLm9wdGlvbnMuc3BlY2lhbEhlYWRxdWFydGVycz8oaSh0aGlzLm9wdGlvbnMuc3BlY2lhbEhlYWRxdWFydGVycyktdGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveC53aWR0aCgpKS8yOjAsdGhpcy5vcHRpb25zLnF1YW50aXR5PyhpKHRoaXMub3B0aW9ucy5xdWFudGl0eSktdGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveC53aWR0aCgpKS8yOjAsaShyLkwxKSxpKHIuTDIpLGkoci5MMyksaShyLkw0KSxpKHIuTDUpKSxHLngyPUEueDIrTWF0aC5tYXgodGhpcy5vcHRpb25zLnNwZWNpYWxIZWFkcXVhcnRlcnM/KGkodGhpcy5vcHRpb25zLnNwZWNpYWxIZWFkcXVhcnRlcnMpLXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gud2lkdGgoKSkvMjowLHRoaXMub3B0aW9ucy5xdWFudGl0eT8oaSh0aGlzLm9wdGlvbnMucXVhbnRpdHkpLXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gud2lkdGgoKSkvMjowLGkoci5SMSksaShyLlIyKSxpKHIuUjMpLGkoci5SNCksaShyLlI1KSksKHIuTDF8fHIuUjEpJiYoRy55MT1NYXRoLm1pbihHLnkxLDEwMC0yLjUqTykpLChyLkwyfHxyLlIyKSYmKEcueTE9TWF0aC5taW4oRy55MSwxMDAtMS41Kk8pKSwoci5MNHx8ci5SNCkmJihHLnkyPU1hdGgubWF4KEcueTIsMTAwKzEuNypPKSksKHIuTDV8fHIuUjUpJiYoRy55Mj1NYXRoLm1heChHLnkyLDEwMCsyLjcqTykpLHRoaXMuc3R5bGUuaW5mb0JhY2tncm91bmQpe3ZhciBQPXt4MToxMDAseTE6MWUzLHkyOjB9LHk9e3gyOjEwMCx5MToxZTMseTI6MH07ci5MMSYmKFA9e3gxOk1hdGgubWluKFAueDEsQS54MS1pKHIuTDEpKSx4MjpBLngxLW8vMix5MTpNYXRoLm1pbihQLnkxLDEwMC0yLjUqTykseTI6TWF0aC5tYXgoUC55MiwxMDAtMS41Kk8rby8yKX0pLHIuTDImJihQPXt4MTpNYXRoLm1pbihQLngxLEEueDEtaShyLkwyKSkseDI6QS54MS1vLzIseTE6TWF0aC5taW4oUC55MSwxMDAtMS41Kk8pLHkyOk1hdGgubWF4KFAueTIsMTAwLS41Kk8rby8yKX0pLHIuTDMmJihQPXt4MTpNYXRoLm1pbihQLngxLEEueDEtaShyLkwzKSkseDI6QS54MS1vLzIseTE6TWF0aC5taW4oUC55MSwxMDAtLjUqTykseTI6TWF0aC5tYXgoUC55MiwxMDArLjUqTytvLzIpfSksci5MNCYmKFA9e3gxOk1hdGgubWluKFAueDEsQS54MS1pKHIuTDQpKSx4MjpBLngxLW8vMix5MTpNYXRoLm1pbihQLnkxLDEwMCsuNSpPKSx5MjpNYXRoLm1heChQLnkyLDEwMCsxLjUqTytvLzIpfSksci5MNSYmKFA9e3gxOk1hdGgubWluKFAueDEsQS54MS1pKHIuTDUpKSx4MjpBLngxLW8vMix5MTpNYXRoLm1pbihQLnkxLDEwMCsxLjUqTykseTI6TWF0aC5tYXgoUC55MiwxMDArMi41Kk8rby8yKX0pLFAuaGFzT3duUHJvcGVydHkoXCJ4MlwiKSYmKEcueDEtPU8vMixlLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIk0gXCIrKFAueDEtTy8yKStcIixcIisoUC55MStPLzIpK1wiIFwiK1AueDErXCIsXCIrUC55MStcIiBcIitQLngyK1wiLFwiK1AueTErXCIgXCIrUC54MitcIixcIitQLnkyK1wiIFwiKyhQLngxLU8vMikrXCIsXCIrUC55MitcInpcIixmaWxsOkMsc3Ryb2tlOlR8fCExfSkpLHIuUjEmJih5PXt4MTpBLngyK28vMix4MjpNYXRoLm1heCh5LngyLEEueDIraShyLlIxKSkseTE6TWF0aC5taW4oeS55MSwxMDAtMi41Kk8pLHkyOk1hdGgubWF4KHkueTIsMTAwLTEuNSpPK28vMil9KSxyLlIyJiYoeT17eDE6QS54MitvLzIseDI6TWF0aC5tYXgoeS54MixBLngyK2koci5SMikpLHkxOk1hdGgubWluKHkueTEsMTAwLTEuNSpPKSx5MjpNYXRoLm1heCh5LnkyLDEwMC0uNSpPK28vMil9KSxyLlIzJiYoeT17eDE6QS54MitvLzIseDI6TWF0aC5tYXgoeS54MixBLngyK2koci5SMykpLHkxOk1hdGgubWluKHkueTEsMTAwLS41Kk8pLHkyOk1hdGgubWF4KHkueTIsMTAwKy41Kk8rby8yKX0pLHIuUjQmJih5PXt4MTpBLngyK28vMix4MjpNYXRoLm1heCh5LngyLEEueDIraShyLlI0KSkseTE6TWF0aC5taW4oeS55MSwxMDArLjUqTykseTI6TWF0aC5tYXgoeS55MiwxMDArMS41Kk8rby8yKX0pLHIuUjUmJih5PXt4MTpBLngyK28vMix4MjpNYXRoLm1heCh5LngyLEEueDIraShyLlI1KSkseTE6TWF0aC5taW4oeS55MSwxMDArMS41Kk8pLHkyOk1hdGgubWF4KHkueTIsMTAwKzIuNSpPK28vMil9KSx5Lmhhc093blByb3BlcnR5KFwieDFcIikmJihHLngyKz1PLzIsZS5wdXNoKHt0eXBlOlwicGF0aFwiLGQ6XCJNIFwiK3kueDErXCIsXCIreS55MStcIiBcIisoeS54MitPLzIpK1wiLFwiK3kueTErXCIgXCIrKHkueDIrTy8yKStcIixcIisoeS55Mi1PLzIpK1wiIFwiK3kueDIrXCIsXCIreS55MitcIiBcIit5LngxK1wiLFwiK3kueTIrXCJ6XCIsZmlsbDpDLHN0cm9rZTpUfHwhMX0pKX1yLkwxJiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLkwxLHg6QS54MS1vLHk6MTAwLTEuNSpPLHRleHRhbmNob3I6XCJlbmRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5MMiYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5MMix4OkEueDEtbyx5OjEwMC0uNSpPLHRleHRhbmNob3I6XCJlbmRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5MMyYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5MMyx4OkEueDEtbyx5OjEwMCsuNSpPLHRleHRhbmNob3I6XCJlbmRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5MNCYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5MNCx4OkEueDEtbyx5OjEwMCsxLjUqTyx0ZXh0YW5jaG9yOlwiZW5kXCIsZm9udHNpemU6Tyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMX0pLHIuTDUmJmUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnIuTDUseDpBLngxLW8seToxMDArMi41Kk8sdGV4dGFuY2hvcjpcImVuZFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLlIxJiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLlIxLHg6QS54MitvLHk6MTAwLTEuNSpPLHRleHRhbmNob3I6XCJzdGFydFwiLGZvbnRzaXplOk8sZm9udGZhbWlseTpOLGZpbGw6UyxzdHJva2U6ITF9KSxyLlIyJiZlLnB1c2goe3R5cGU6XCJ0ZXh0XCIsdGV4dDpyLlIyLHg6QS54MitvLHk6MTAwLS41Kk8sdGV4dGFuY2hvcjpcInN0YXJ0XCIsZm9udHNpemU6Tyxmb250ZmFtaWx5Ok4sZmlsbDpTLHN0cm9rZTohMX0pLHIuUjMmJmUucHVzaCh7dHlwZTpcInRleHRcIix0ZXh0OnIuUjMseDpBLngyK28seToxMDArLjUqTyx0ZXh0YW5jaG9yOlwic3RhcnRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5SNCYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5SNCx4OkEueDIrbyx5OjEwMCsxLjUqTyx0ZXh0YW5jaG9yOlwic3RhcnRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksci5SNSYmZS5wdXNoKHt0eXBlOlwidGV4dFwiLHRleHQ6ci5SNSx4OkEueDIrbyx5OjEwMCsyLjUqTyx0ZXh0YW5jaG9yOlwic3RhcnRcIixmb250c2l6ZTpPLGZvbnRmYW1pbHk6TixmaWxsOlMsc3Ryb2tlOiExfSksMDx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCYmUi5wdXNoKEkub3V0bGluZShlLHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSl9cmV0dXJue3ByZTpSLHBvc3Q6ZSxiYm94Okd9fWZ1bmN0aW9uIE4oSSl7dmFyIHQ9W10sRT1bXSxSPXRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3g7XCJcIj09dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuZyYmKFI9dGhpcy5iYm94KTt2YXIgZSxBPW5ldyBJLkJCb3gsQz10aGlzLmNvbG9ycy5pY29uQ29sb3JbdGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbl18fHRoaXMuY29sb3JzLmljb25Db2xvci5GcmllbmQ7aWYodGhpcy5zdHlsZS5pbmZvRmllbGRzJiZcIlwiIT09dGhpcy5vcHRpb25zLmRpcmVjdGlvbil7aWYoMD09dGhpcy5vcHRpb25zLnNwZWVkTGVhZGVyKXtlPVt7dHlwZTpcInJvdGF0ZVwiLGRlZ3JlZTp0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLHg6MTAwLHk6MTAwLGRyYXc6W3t0eXBlOlwicGF0aFwiLGZpbGw6QyxzdHJva2U6QyxzdHJva2V3aWR0aDp0aGlzLnN0eWxlLnN0cm9rZVdpZHRoLGQ6XCJNMTAwLDEwMCBsMCwtNzUgLTUsMyA1LC0xNSA1LDE1IC01LC0zXCJ9XX1dLEEueTE9TWF0aC5taW4oMTAwLTk1Kk1hdGguY29zKHRoaXMub3B0aW9ucy5kaXJlY3Rpb24vMzYwKk1hdGguUEkqMiksMTAwKSxBLnkyPU1hdGgubWF4KDEwMC05NSpNYXRoLmNvcyh0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLzM2MCpNYXRoLlBJKjIpLDEwMCksQS54MT1NYXRoLm1pbigxMDArOTUqTWF0aC5zaW4odGhpcy5vcHRpb25zLmRpcmVjdGlvbi8zNjAqTWF0aC5QSSoyKSwxMDApLEEueDI9TWF0aC5tYXgoMTAwKzk1Kk1hdGguc2luKHRoaXMub3B0aW9ucy5kaXJlY3Rpb24vMzYwKk1hdGguUEkqMiksMTAwKSxcIkdyb3VuZFwiIT10aGlzLm1ldGFkYXRhLmJhc2VEaW1lbnNpb24mJlwiXCIhPXRoaXMubWV0YWRhdGEuYmFzZURpbWVuc2lvbnx8KHRoaXMubWV0YWRhdGEuaGVhZHF1YXJ0ZXJzPyhlPVt7dHlwZTpcInRyYW5zbGF0ZVwiLHg6Ui54MS0xMDAseTpSLnkyLSgxMDAtKHRoaXMuc3R5bGUuaHFTdGFmZkxlbmd0aHx8SS5faHFTdGFmZkxlbmd0aCkpLGRyYXc6ZX1dLEEueDErPVIueDEtMTAwLEEueDIrPVIueDEtMTAwKTplPVt7dHlwZTpcInRyYW5zbGF0ZVwiLHg6MCx5OlIueTIsZHJhdzplfSx7dHlwZTpcInBhdGhcIixmaWxsOkMsc3Ryb2tlOkMsc3Ryb2tld2lkdGg6dGhpcy5zdHlsZS5zdHJva2VXaWR0aCxkOlwiTSAxMDAsXCIrUi55MitcImwwLDEwMFwifV0pLEEueTIrPVIueTIrcGFyc2VGbG9hdCh0aGlzLnN0eWxlLnN0cm9rZVdpZHRoKSxFLnB1c2goZSl9ZWxzZXt2YXIgVD10aGlzLm9wdGlvbnMuc3BlZWRMZWFkZXIqKDEwMC90aGlzLnN0eWxlLnNpemUpLFM9dGhpcy5vcHRpb25zLmRpcmVjdGlvbipNYXRoLlBJLzE4MCxOPS1UKk1hdGguY29zKFMpLE89VCpNYXRoLnNpbihTKTtBLngxPU1hdGgubWluKDEwMCwxMDArTyksQS54Mj1NYXRoLm1heCgxMDAsMTAwK08pLEEueTE9TWF0aC5taW4oMTAwLDEwMCtOKSxBLnkyPU1hdGgubWF4KDEwMCwxMDArTiksZT17dHlwZTpcInBhdGhcIixmaWxsOkMsc3Ryb2tlOkMsc3Ryb2tld2lkdGg6dGhpcy5zdHlsZS5zdHJva2VXaWR0aCxkOlwiTSAxMDAsMTAwICBsXCIrTytcIixcIitOfSx0LnB1c2goZSl9MDx0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCYmdC51bnNoaWZ0KEkub3V0bGluZShlLHRoaXMuc3R5bGUub3V0bGluZVdpZHRoLHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgsXCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUub3V0bGluZUNvbG9yP3RoaXMuc3R5bGUub3V0bGluZUNvbG9yW3RoaXMubWV0YWRhdGEuYWZmaWxpYXRpb25dOnRoaXMuc3R5bGUub3V0bGluZUNvbG9yKSl9cmV0dXJue3ByZTp0LHBvc3Q6RSxiYm94OkF9fWZ1bmN0aW9uIEkoSSl7cmV0dXJuIHZvaWQgMD09PUkmJihJPXt9KSx7eDE6dm9pZCAwIT09SS54MT9JLngxOjEwMCx5MTp2b2lkIDAhPT1JLnkxP0kueTE6MTAwLHgyOnZvaWQgMCE9PUkueDI/SS54MjoxMDAseTI6dm9pZCAwIT09SS55Mj9JLnkyOjEwMCx3aWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLngyLXRoaXMueDF9LGhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnkyLXRoaXMueTF9LGdldFNpemU6ZnVuY3Rpb24oKXtyZXR1cm57aGVpZ2h0OnRoaXMueTItdGhpcy55MSx3aWR0aDp0aGlzLngyLXRoaXMueDF9fSxtZXJnZTpmdW5jdGlvbihJKXtyZXR1cm4gdGhpcy54MT1JLngxPD10aGlzLngxP0kueDE6dGhpcy54MSx0aGlzLnkxPUkueTE8PXRoaXMueTE/SS55MTp0aGlzLnkxLHRoaXMueDI9SS54Mj49dGhpcy54Mj9JLngyOnRoaXMueDIsdGhpcy55Mj1JLnkyPj10aGlzLnkyP0kueTI6dGhpcy55Mix0aGlzfX19dmFyIE89e0Fpckhvc3RpbGU6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk0gNDUsMTUwIEw0NSw3MCAxMDAsMjAgMTU1LDcwIDE1NSwxNTBcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6MjAseDI6MTU1LHkyOjE1MH0pfSxBaXJGcmllbmQ6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTU1LDE1MCBDIDE1NSw1MCAxMTUsMzAgMTAwLDMwIDg1LDMwIDQ1LDUwIDQ1LDE1MFwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTozMCx4MjoxNTUseTI6MTUwfSl9LEFpck5ldXRyYWw6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk0gNDUsMTUwIEwgNDUsMzAsMTU1LDMwLDE1NSwxNTBcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6MzAseDI6MTU1LHkyOjE1MH0pfSxBaXJVbmtub3duOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDY1LDE1MCBjIC01NSwwIC01MCwtOTAgMCwtOTAgMCwtNTAgNzAsLTUwIDcwLDAgNTAsMCA1NSw5MCAwLDkwXCJ9LGJib3g6bmV3IEkoe3gxOjI1LHkxOjIwLHgyOjE3NSx5MjoxNTB9KX0sR3JvdW5kSG9zdGlsZTp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTSAxMDAsMjggTDE3MiwxMDAgMTAwLDE3MiAyOCwxMDAgMTAwLDI4IFpcIn0sYmJveDpuZXcgSSh7eDE6MjgseTE6MjgseDI6MTcyLHkyOjE3Mn0pfSxHcm91bmRGcmllbmQ6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSw1MCBsMTUwLDAgMCwxMDAgLTE1MCwwIHpcIn0sYmJveDpuZXcgSSh7eDE6MjUseTE6NTAseDI6MTc1LHkyOjE1MH0pfSxHcm91bmROZXV0cmFsOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsNDUgbDExMCwwIDAsMTEwIC0xMTAsMCB6XCJ9LGJib3g6bmV3IEkoe3gxOjQ1LHkxOjQ1LHgyOjE1NSx5MjoxNTV9KX0sR3JvdW5kVW5rbm93bjp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTTYzLDYzIEM2MywyMCAxMzcsMjAgMTM3LDYzIEMxODAsNjMgMTgwLDEzNyAxMzcsMTM3IEMxMzcsMTgwIDYzLDE4MCA2MywxMzcgQzIwLDEzNyAyMCw2MyA2Myw2MyBaXCJ9LGJib3g6bmV3IEkoe3gxOjMwLjc1LHkxOjMwLjc1LHgyOjE2OS4yNSx5MjoxNjkuMjV9KX0sTGFuZERpc21vdW50ZWRJbmRpdmlkdWFsSG9zdGlsZTp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTSAxMDAsMjggTDE3MiwxMDAgMTAwLDE3MiAyOCwxMDAgMTAwLDI4IFpcIn0sYmJveDpuZXcgSSh7eDE6MjgseTE6MjgseDI6MTcyLHkyOjE3Mn0pfSxMYW5kRGlzbW91bnRlZEluZGl2aWR1YWxGcmllbmQ6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDQ1IDU1LDI1IDAsNjAgLTU1LDI1IC01NSwtMjUgMCwtNjAgelwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTo0NSx4MjoxNTUseTI6MTU1fSl9LExhbmREaXNtb3VudGVkSW5kaXZpZHVhbE5ldXRyYWw6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw0NSBsMTEwLDAgMCwxMTAgLTExMCwwIHpcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6NDUseDI6MTU1LHkyOjE1NX0pfSxMYW5kRGlzbW91bnRlZEluZGl2aWR1YWxVbmtub3duOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjMsNjMgQzYzLDIwIDEzNywyMCAxMzcsNjMgQzE4MCw2MyAxODAsMTM3IDEzNywxMzcgQzEzNywxODAgNjMsMTgwIDYzLDEzNyBDMjAsMTM3IDIwLDYzIDYzLDYzIFpcIn0sYmJveDpuZXcgSSh7eDE6MzAuNzUseTE6MzAuNzUseDI6MTY5LjI1LHkyOjE2OS4yNX0pfSxTZWFIb3N0aWxlOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDI4IEwxNzIsMTAwIDEwMCwxNzIgMjgsMTAwIDEwMCwyOCBaXCJ9LGJib3g6bmV3IEkoe3gxOjI4LHkxOjI4LHgyOjE3Mix5MjoxNzJ9KX0sU2VhRnJpZW5kOntnOnt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjYwfSxiYm94Om5ldyBJKHt4MTo0MCx5MTo0MCx4MjoxNjAseTI6MTYwfSl9LFNlYU5ldXRyYWw6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw0NSBsMTEwLDAgMCwxMTAgLTExMCwwIHpcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6NDUseDI6MTU1LHkyOjE1NX0pfSxTZWFVbmtub3duOntnOnt0eXBlOlwicGF0aFwiLGQ6XCJNNjMsNjMgQzYzLDIwIDEzNywyMCAxMzcsNjMgQzE4MCw2MyAxODAsMTM3IDEzNywxMzcgQzEzNywxODAgNjMsMTgwIDYzLDEzNyBDMjAsMTM3IDIwLDYzIDYzLDYzIFpcIn0sYmJveDpuZXcgSSh7eDE6MzAuNzUseTE6MzAuNzUseDI6MTY5LjI1LHkyOjE2OS4yNX0pfSxTdWJzdXJmYWNlSG9zdGlsZTp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDUwIEw0NSwxMzAgMTAwLDE4MCAxNTUsMTMwIDE1NSw1MFwifSxiYm94Om5ldyBJKHt4MTo0NSx5MTo1MCx4MjoxNTUseTI6MTgwfSl9LFN1YnN1cmZhY2VGcmllbmQ6e2c6e3R5cGU6XCJwYXRoXCIsZDpcIm0gNDUsNTAgYyAwLDEwMCA0MCwxMjAgNTUsMTIwIDE1LDAgNTUsLTIwIDU1LC0xMjBcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6NTAseDI6MTU1LHkyOjE3MH0pfSxTdWJzdXJmYWNlTmV1dHJhbDp7Zzp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDUwIEw0NSwxNzAgMTU1LDE3MCAxNTUsNTBcIn0sYmJveDpuZXcgSSh7eDE6NDUseTE6NTAseDI6MTU1LHkyOjE3MH0pfSxTdWJzdXJmYWNlVW5rbm93bjp7Zzp7dHlwZTpcInBhdGhcIixkOlwibSA2NSw1MCBjIC01NSwwIC01MCw5MCAwLDkwIDAsNTAgNzAsNTAgNzAsMCA1MCwwIDU1LC05MCAwLC05MFwifSxiYm94Om5ldyBJKHt4MToyNSx5MTo1MCx4MjoxNzUseTI6MTgwfSl9LFBvc2l0aW9uTWFya2VyOntnOnt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fSxiYm94Om5ldyBJKHt4MTo4NSx5MTo4NSx4MjoxMTUseTI6MTE1fSl9fSxzPW5ldyBmdW5jdGlvbigpe3RoaXMuX2F1dG9WYWxpZGF0aW9uPSExLHRoaXMudmVyc2lvbj1cIjIuMC4wXCIsXCJvYmplY3RcIj09dHlwZW9mIGNvbnNvbGUmJlwib2JqZWN0XCIhPXR5cGVvZiBwcm9jZXNzJiZjb25zb2xlLmluZm8oXCJtaWxzeW1ib2wuanMgXCIrdGhpcy52ZXJzaW9uK1wiIC0gQ29weXJpZ2h0IChjKSAyMDE4IE1cIitTdHJpbmcuZnJvbUNoYXJDb2RlKDIyOSkrXCJucyBCZWNrbWFuICBodHRwOi8vd3d3LnNwYXRpYWxpbGx1c2lvbnMuY29tXCIpfTtmdW5jdGlvbiBHKCl7dGhpcy5iYm94PW5ldyBJLHRoaXMuY29sb3JzPXt9LHRoaXMubWV0YWRhdGE9e30sdGhpcy5vY3RhZ29uQW5jaG9yPXt4OjUwLHk6NTB9LHRoaXMub3B0aW9ucz17fSx0aGlzLm9wdGlvbnMucXVhbnRpdHk9XCJcIix0aGlzLm9wdGlvbnMucmVpbmZvcmNlZFJlZHVjZWQ9XCJcIix0aGlzLm9wdGlvbnMuc3RhZmZDb21tZW50cz1cIlwiLHRoaXMub3B0aW9ucy5hZGRpdGlvbmFsSW5mb3JtYXRpb249XCJcIix0aGlzLm9wdGlvbnMuZXZhbHVhdGlvblJhdGluZz1cIlwiLHRoaXMub3B0aW9ucy5jb21iYXRFZmZlY3RpdmVuZXNzPVwiXCIsdGhpcy5vcHRpb25zLnNpZ25hdHVyZUVxdWlwbWVudD1cIlwiLHRoaXMub3B0aW9ucy5oaWdoZXJGb3JtYXRpb249XCJcIix0aGlzLm9wdGlvbnMuaG9zdGlsZT1cIlwiLHRoaXMub3B0aW9ucy5pZmZTaWY9XCJcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uPVwiXCIsdGhpcy5vcHRpb25zLnNpZ2ludD1cIlwiLHRoaXMub3B0aW9ucy51bmlxdWVEZXNpZ25hdGlvbj1cIlwiLHRoaXMub3B0aW9ucy50eXBlPVwiXCIsdGhpcy5vcHRpb25zLmR0Zz1cIlwiLHRoaXMub3B0aW9ucy5hbHRpdHVkZURlcHRoPVwiXCIsdGhpcy5vcHRpb25zLmxvY2F0aW9uPVwiXCIsdGhpcy5vcHRpb25zLnNwZWVkPVwiXCIsdGhpcy5vcHRpb25zLnNwZWVkTGVhZGVyPTAsdGhpcy5vcHRpb25zLnNwZWNpYWxIZWFkcXVhcnRlcnM9XCJcIix0aGlzLm9wdGlvbnMuY291bnRyeT1cIlwiLHRoaXMub3B0aW9ucy5wbGF0Zm9ybVR5cGU9XCJcIix0aGlzLm9wdGlvbnMuZXF1aXBtZW50VGVhcmRvd25UaW1lPVwiXCIsdGhpcy5vcHRpb25zLmNvbW1vbklkZW50aWZpZXI9XCJcIix0aGlzLm9wdGlvbnMuYXV4aWxpYXJ5RXF1aXBtZW50SW5kaWNhdG9yPVwiXCIsdGhpcy5vcHRpb25zLmhlYWRxdWFydGVyc0VsZW1lbnQ9XCJcIix0aGlzLm9wdGlvbnMuaW5zdGFsbGF0aW9uQ29tcG9zaXRpb249XCJcIix0aGlzLm9wdGlvbnMuZW5nYWdlbWVudEJhcj1cIlwiLHRoaXMub3B0aW9ucy5lbmdhZ2VtZW50VHlwZT1cIlwiLHRoaXMub3B0aW9ucy5ndWFyZGVkVW5pdD1cIlwiLHRoaXMub3B0aW9ucy5zcGVjaWFsRGVzaWduYXRvcj1cIlwiLHRoaXMuc3R5bGU9e30sdGhpcy5zdHlsZS5hbHRlcm5hdGVNZWRhbD0hMSx0aGlzLnN0eWxlLmNpdmlsaWFuQ29sb3I9ITAsdGhpcy5zdHlsZS5jb2xvck1vZGU9XCJMaWdodFwiLHRoaXMuc3R5bGUuZmlsbD0hMCx0aGlzLnN0eWxlLmZpbGxPcGFjaXR5PTEsdGhpcy5zdHlsZS5mb250ZmFtaWx5PVwiQXJpYWxcIix0aGlzLnN0eWxlLmZyYW1lPSEwLHRoaXMuc3R5bGUuZnJhbWVDb2xvcj1cIlwiLHRoaXMuc3R5bGUuaHFTdGFmZkxlbmd0aD0wLHRoaXMuc3R5bGUuaWNvbj0hMCx0aGlzLnN0eWxlLmljb25Db2xvcj1cIlwiLHRoaXMuc3R5bGUuaW5mb0JhY2tncm91bmQ9XCJcIix0aGlzLnN0eWxlLmluZm9CYWNrZ3JvdW5kRnJhbWU9XCJcIix0aGlzLnN0eWxlLmluZm9Db2xvcj1cIlwiLHRoaXMuc3R5bGUuaW5mb0ZpZWxkcz0hMCx0aGlzLnN0eWxlLmluZm9TaXplPTQwLHRoaXMuc3R5bGUubW9ub0NvbG9yPVwiXCIsdGhpcy5zdHlsZS5vdXRsaW5lQ29sb3I9XCJyZ2IoMjM5LCAyMzksIDIzOSlcIix0aGlzLnN0eWxlLm91dGxpbmVXaWR0aD0wLHRoaXMuc3R5bGUucGFkZGluZz0wLHRoaXMuc3R5bGUuc2ltcGxlU3RhdHVzTW9kaWZpZXI9ITEsdGhpcy5zdHlsZS5zaXplPTEwMCx0aGlzLnN0eWxlLnNxdWFyZT0hMSx0aGlzLnN0eWxlLnN0YW5kYXJkPVwiXCIsdGhpcy5zdHlsZS5zdHJva2VXaWR0aD00LHRoaXMuc3ltYm9sQW5jaG9yPXt4OjUwLHk6NTB9LHRoaXMudmFsaWRJY29uPSEwLDA8YXJndW1lbnRzLmxlbmd0aCYmdGhpcy5zZXRPcHRpb25zLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvKEksdCxFKXt0aGlzLm9wdGlvbnMuc2lkYz10aGlzLm9wdGlvbnMuc2lkYy50b1VwcGVyQ2FzZSgpO3ZhciBSPVwiXCIhPXRoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgwKT90aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMCk6XCItXCIsZT1cIlwiIT10aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMSk/dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDEpOlwiLVwiLEE9XCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDIpP3RoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgyKTpcIi1cIixDPVwiXCIhPXRoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgzKT90aGlzLm9wdGlvbnMuc2lkYy5jaGFyQXQoMyk6XCItXCIsVD10LmZ1bmN0aW9uaWQ9XCJcIiE9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDQsNik/dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDQsNik6XCItLS0tLS1cIixTPVwiXCIhPXRoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgxMCk/dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDEwKTpcIi1cIixOPVwiXCIhPXRoaXMub3B0aW9ucy5zaWRjLmNoYXJBdCgxMSk/dGhpcy5vcHRpb25zLnNpZGMuY2hhckF0KDExKTpcIi1cIjtpZigtMTxbXCJIXCIsXCJTXCIsXCJKXCIsXCJLXCJdLmluZGV4T2YoZSkmJih0LmFmZmlsaWF0aW9uPUUuYWZmaWxpYXRpb25bMF0pLC0xPFtcIkZcIixcIkFcIixcIkRcIixcIk1cIl0uaW5kZXhPZihlKSYmKHQuYWZmaWxpYXRpb249RS5hZmZpbGlhdGlvblsxXSksLTE8W1wiTlwiLFwiTFwiXS5pbmRleE9mKGUpJiYodC5hZmZpbGlhdGlvbj1FLmFmZmlsaWF0aW9uWzJdKSwtMTxbXCJQXCIsXCJVXCIsXCJHXCIsXCJXXCIsXCJPXCJdLmluZGV4T2YoZSkmJih0LmFmZmlsaWF0aW9uPUUuYWZmaWxpYXRpb25bM10pLC0xPFtcIlBcIixcIkFcIl0uaW5kZXhPZihBKSYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzBdKSwtMTxbXCJHXCIsXCJaXCIsXCJGXCIsXCJYXCJdLmluZGV4T2YoQSkmJih0LmRpbWVuc2lvbj1FLmRpbWVuc2lvblsxXSksLTE8W1wiU1wiXS5pbmRleE9mKEEpJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMl0pLC0xPFtcIlVcIl0uaW5kZXhPZihBKSYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzNdKSxcIlBcIj09QSYmXCJPXCIhPVImJih0LnNwYWNlPSEwKSxcIk9cIj09UiYmLTE8W1wiVlwiLFwiT1wiLFwiUlwiXS5pbmRleE9mKEEpJiYodC5hY3Rpdml0eT0hMCksXCJHXCI9PVImJih0LmNvbnRyb2xNZWFzdXJlPSEwKSxcIkhcIj09UyYmKHQuaW5zdGFsbGF0aW9uPSEwKSx0aGlzLnN0eWxlLmZyYW1lJiZcIkFcIj09QyYmKHQubm90cHJlc2VudD1JLl9kYXNoQXJyYXlzLmFudGljaXBhdGVkKSx0aGlzLnN0eWxlLmZyYW1lJiYtMTxbXCJQXCIsXCJBXCIsXCJTXCIsXCJHXCIsXCJNXCJdLmluZGV4T2YoZSkmJih0Lm5vdHByZXNlbnQ9SS5fZGFzaEFycmF5cy5wZW5kaW5nKSxcIkNcIj09QyYmKHQuY29uZGl0aW9uPUUuc3RhdHVzWzJdKSxcIkRcIj09QyYmKHQuY29uZGl0aW9uPUUuc3RhdHVzWzNdKSxcIlhcIj09QyYmKHQuY29uZGl0aW9uPUUuc3RhdHVzWzRdKSxcIkZcIj09QyYmKHQuY29uZGl0aW9uPUUuc3RhdHVzWzVdKSwtMTxbXCJHXCIsXCJXXCIsXCJEXCIsXCJMXCIsXCJNXCIsXCJKXCIsXCJLXCJdLmluZGV4T2YoZSkmJih0LmNvbnRleHQ9RS5jb250ZXh0WzFdKSxcIk9cIj09UiYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzFdKSxcIkVcIj09UiYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzFdKSx0LmJhc2VEaW1lbnNpb249dC5kaW1lbnNpb24sdC5iYXNlQWZmaWxhdGlvbj10LmFmZmlsaWF0aW9uLFwiSlwiPT1lJiYodC5qb2tlcj0hMCksXCJLXCI9PWUmJih0LmZha2VyPSEwKSwodC5qb2tlcnx8dC5mYWtlcikmJih0LmFmZmlsaWF0aW9uPUUuYWZmaWxpYXRpb25bMV0pLFwiU1wiPT1SJiZcIkdcIj09QSYmXCJFXCI9PVQuY2hhckF0KDApJiYodC5kaW1lbnNpb249RS5kaW1lbnNpb25bMl0pLFwiSVwiPT1SJiZcIkdcIj09QSYmKHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzJdKSxcIkVcIj09UiYmKFwiT1wiPT1BJiYtMTxbXCJBQi0tLS1cIixcIkFFLS0tLVwiLFwiQUYtLS0tXCIsXCJCQi0tLS1cIixcIkNCLS0tLVwiLFwiQ0MtLS0tXCIsXCJEQi0tLS1cIixcIkREQi0tLVwiLFwiREVCLS0tXCIsXCJERkItLS1cIixcIkRHQi0tLVwiLFwiREhCLS0tXCIsXCJESUItLS1cIixcIkRKQi0tLVwiLFwiRExCLS0tXCIsXCJETUItLS1cIixcIkRPQi0tLVwiLFwiRUEtLS0tXCIsXCJFQi0tLS1cIixcIkVDLS0tLVwiLFwiRUQtLS0tXCIsXCJFRS0tLS1cIl0uaW5kZXhPZihUKXx8XCJGXCI9PUEmJi0xPFtcIkJBLS0tLVwiLFwiTUEtLS0tXCIsXCJNQy0tLS1cIl0uaW5kZXhPZihUKSkmJih0LmRpbWVuc2lvbj1FLmRpbWVuc2lvblsyXSksKC0xPFtcIkZcIixcIkdcIixcIkNcIixcIkRcIl0uaW5kZXhPZihTKXx8XCJIXCI9PVMmJlwiQlwiPT1OKSYmKHQuZmVpbnREdW1teT0hMCksLTE8W1wiQVwiLFwiQlwiLFwiQ1wiLFwiRFwiXS5pbmRleE9mKFMpJiYodC5oZWFkcXVhcnRlcnM9ITApLFwiR1wiPT1BJiZcIlVILS0tLVwiPT1UJiYodC5oZWFkcXVhcnRlcnM9ITApLC0xPFtcIkVcIixcIkJcIixcIkdcIixcIkRcIl0uaW5kZXhPZihTKSYmKHQudGFza0ZvcmNlPSEwKSxcIkFcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsxMV0pLFwiQlwiPT1OJiZcIkhcIiE9UyYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsxMl0pLFwiQ1wiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzEzXSksXCJEXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMTRdKSxcIkVcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsxNV0pLFwiRlwiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzE2XSksXCJHXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMTddKSxcIkhcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsxOF0pLFwiSVwiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzIxXSksXCJKXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMjJdKSxcIktcIj09TiYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsyM10pLFwiTFwiPT1OJiZcIk5cIiE9UyYmKHQuZWNoZWxvbj1FLmVjaGVsb25Nb2JpbGl0eVsyNF0pLFwiTVwiPT1OJiYodC5lY2hlbG9uPUUuZWNoZWxvbk1vYmlsaXR5WzI1XSksXCJOXCI9PU4mJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbMjZdKSxcIk1cIj09Uylzd2l0Y2goTil7Y2FzZVwiT1wiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbMzFdO2JyZWFrO2Nhc2VcIlBcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzMyXTticmVhaztjYXNlXCJRXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVszM107YnJlYWs7Y2FzZVwiUlwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbMzRdO2JyZWFrO2Nhc2VcIlNcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzM1XTticmVhaztjYXNlXCJUXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVszNl07YnJlYWs7Y2FzZVwiVVwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbNDFdO2JyZWFrO2Nhc2VcIlZcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzQyXTticmVhaztjYXNlXCJXXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVszN107YnJlYWs7Y2FzZVwiWVwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbNTFdO2JyZWFrO2Nhc2VcIlpcIjp0Lm1vYmlsaXR5PUUuZWNoZWxvbk1vYmlsaXR5WzUyXTticmVhaztkZWZhdWx0OnQubW9iaWxpdHk9dm9pZCAwfWlmKFwiTlwiPT1TKXN3aXRjaChOKXtjYXNlXCJTXCI6dC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVs2MV07YnJlYWs7Y2FzZVwiTFwiOnQubW9iaWxpdHk9RS5lY2hlbG9uTW9iaWxpdHlbNjJdO2JyZWFrO2RlZmF1bHQ6dC5tb2JpbGl0eT12b2lkIDB9cmV0dXJuKFwiQVwiPT1BJiZcIkNcIj09VC5jaGFyQXQoMCl8fFwiR1wiPT1BJiZcIkVWQ1wiPT1ULnN1YnN0cmluZygwLDMpfHxcIlNcIj09QSYmXCJYXCI9PVQuY2hhckF0KDApKSYmKHQuY2l2aWxpYW49ITApLFwiWlwiIT1BJiZcIlhcIiE9QXx8KC0xPFtcIlBcIixcIlVcIixcIkZcIixcIk5cIixcIkhcIixcIkFcIixcIlNcIixcIkdcIixcIldcIl0uaW5kZXhPZihlKSYmKHQuZGltZW5zaW9uVW5rbm93bj0hMCksLTE8W1wiRlwiLFwiQVwiXS5pbmRleE9mKGUpJiYodC5kaW1lbnNpb249XCJTZWFcIiksLTE8W1wiRFwiLFwiTFwiLFwiTVwiLFwiSlwiLFwiS1wiXS5pbmRleE9mKGUpJiYodC5hZmZpbGlhdGlvbj1cIm5vbmVcIikpLFwiU1wiPT1BJiYtMTxbXCJPLS0tLS1cIixcIkVELS0tLVwiLFwiRVAtLS0tXCIsXCJFVi0tLS1cIixcIlpNLS0tLVwiLFwiWk4tLS0tXCIsXCJaSS0tLS1cIl0uaW5kZXhPZihUKSYmKHQuZnJhbWU9ITEpLFwiRVwiPT1SJiZcIk5cIj09QSYmLTE8W1wiQUEtLS0tXCIsXCJBQi0tLS1cIixcIkFDLS0tLVwiLFwiQUQtLS0tXCIsXCJBRS0tLS1cIixcIkFHLS0tLVwiLFwiQkItLS0tXCIsXCJCQy0tLS1cIixcIkJGLS0tLVwiLFwiQk0tLS0tXCIsXCItQy0tLS0tXCIsXCJDQS0tLS1cIixcIkNCLS0tLVwiLFwiQ0MtLS0tXCIsXCJDRC0tLS1cIixcIkNFLS0tLVwiXS5pbmRleE9mKFQpJiYodC5mcmFtZT0hMSksXCJXXCI9PVImJlwiU1wiPT1BJiYtMTxbXCJXU1ZFLS1cIixcIldTRC1MSVwiLFwiV1NGR1NPXCIsXCJXU0dSTC1cIixcIldTUi1MSVwiLFwiV1NEU0xNXCIsXCJXU1MtTElcIixcIldTVE1ILVwiLFwiV1NULUZDXCIsXCJXU1RTUy1cIl0uaW5kZXhPZihUKSYmKHQuZnJhbWU9ITEpLFwiVVwiPT1BJiYtMTxbXCJXTS0tLS1cIixcIldNRC0tLVwiLFwiV01HLS0tXCIsXCJXTUdELS1cIixcIldNR1gtLVwiLFwiV01HRS0tXCIsXCJXTUdDLS1cIixcIldNR1ItLVwiLFwiV01HTy0tXCIsXCJXTU0tLS1cIixcIldNTUQtLVwiLFwiV01NWC0tXCIsXCJXTU1FLS1cIixcIldNTUMtLVwiLFwiV01NUi0tXCIsXCJXTU1PLS1cIixcIldNRi0tLVwiLFwiV01GRC0tXCIsXCJXTUZYLS1cIixcIldNRkUtLVwiLFwiV01GQy0tXCIsXCJXTUZSLS1cIixcIldNRk8tLVwiLFwiV01PLS0tXCIsXCJXTU9ELS1cIixcIldNWC0tLVwiLFwiV01FLS0tXCIsXCJXTUEtLS1cIixcIldNQy0tLVwiLFwiV01SLS0tXCIsXCJXTUItLS1cIixcIldNQkQtLVwiLFwiV01OLS0tXCIsXCJXTVMtLS1cIixcIldNU1gtLVwiLFwiV01TRC0tXCIsXCJXRC0tLS1cIixcIldETS0tLVwiLFwiV0RNRy0tXCIsXCJXRE1NLS1cIixcIk5ELS0tLVwiLFwiRS0tLS0tXCIsXCJWLS0tLS1cIixcIlgtLS0tLVwiLFwiTkJTLS0tXCIsXCJOQlItLS1cIixcIk5CVy0tLVwiLFwiTk0tLS0tXCIsXCJOQS0tLS1cIl0uaW5kZXhPZihUKSYmKHQuU1REMjUyNT8odC5maWxsPSExLFwiV0QtLS0tXCI9PVQmJih0LmZpbGw9ITApLC0xPFtcIk5ELS0tLVwiLFwiTkJTLS0tXCIsXCJOQlItLS1cIixcIk5CVy0tLVwiLFwiTk0tLS0tXCIsXCJOQS0tLS1cIl0uaW5kZXhPZihUKSYmKHQuZmlsbD0hMCx0LmZyYW1lPSExKSk6KHQuZnJhbWU9ITEsLTE8W1wiRS0tLS0tXCIsXCJWLS0tLS1cIixcIlgtLS0tLVwiXS5pbmRleE9mKFQpJiYodC5maWxsPSExLHQuZnJhbWU9ITEpKSksXCJXQVNcIiE9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDAsMykmJlwiV09TXCIhPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigwLDMpJiZcIkdcIiE9Unx8KHQuZnJhbWU9ITEpLFwiR1wiPT1SJiZcIk9cIj09QSYmLTE8W1wiVlwiLFwiTFwiLFwiUFwiLFwiSVwiXS5pbmRleE9mKFQuY2hhckF0KDApKSYmKHQuZnJhbWU9ITAsdC5kaW1lbnNpb249RS5kaW1lbnNpb25bMV0pLHR9ZnVuY3Rpb24gTShJLHQsRSl7dmFyIFI9e30sZT17fTtmb3IodmFyIEEgaW4gSS5faWNvblNJREMubGV0dGVyKUkuX2ljb25TSURDLmxldHRlci5oYXNPd25Qcm9wZXJ0eShBKSYmSS5faWNvblNJREMubGV0dGVyW0FdLmNhbGwodGhpcyxSLGUsdCxFKTtyZXR1cm57aWNvbnM6UixiYm94OmV9fWZ1bmN0aW9uIG4oSSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgSSl7aWYoQXJyYXkuaXNBcnJheShJKSl7Zm9yKHZhciBFPTA7RTxJLmxlbmd0aDtFKyspbi5jYWxsKHRoaXMsSVtFXSx0KTtyZXR1cm59cmV0dXJuIEkuaWNvbj0hMCxcInRleHRcIj09SS50eXBlJiYoSS5oYXNPd25Qcm9wZXJ0eShcImZvbnRmYW1pbHlcIil8fChJLmZvbnRmYW1pbHk9XCJBcmlhbFwiKSxJLmhhc093blByb3BlcnR5KFwiZm9udHdlaWdodFwiKXx8KEkuZm9udHdlaWdodD1cImJvbGRcIiksSS5oYXNPd25Qcm9wZXJ0eShcInRleHRhbmNob3JcIil8fChJLnRleHRhbmNob3I9XCJtaWRkbGVcIiksSS5oYXNPd25Qcm9wZXJ0eShcInN0cm9rZVwiKXx8KEkuc3Ryb2tlPSExKSksSS5oYXNPd25Qcm9wZXJ0eShcImZpbGxcIil8fChJLmZpbGw9dCksdm9pZChJLmhhc093blByb3BlcnR5KFwic3Ryb2tlXCIpfHwoSS5zdHJva2U9dCkpfX1mdW5jdGlvbiBhKEkpe3ZhciB0PTQyLEU9MTE1O3JldHVybiAxPT1JLmxlbmd0aCYmKHQ9NDUsRT0xMTUpLDM9PUkubGVuZ3RoJiYodD0zNSxFPTExMCksNDw9SS5sZW5ndGgmJih0PTMyLEU9MTEwKSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6RSxmb250c2l6ZTp0LHRleHQ6SX19ZnVuY3Rpb24gbChJKXt2YXIgdD0zMDtyZXR1cm4gMz09SS5sZW5ndGgmJih0PTI1KSw0PD1JLmxlbmd0aCYmKHQ9MjIpLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3Nyxmb250c2l6ZTp0LHRleHQ6SX19ZnVuY3Rpb24gcihJKXt2YXIgdD0zMCxFPTE0NTtyZXR1cm4gMz09SS5sZW5ndGgmJih0PTI1LEU9MTQwKSw0PD1JLmxlbmd0aCYmKHQ9MjAsRT0xMzUpLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTpFLGZvbnRzaXplOnQsdGV4dDpJfX1mdW5jdGlvbiBpKEksdCxFLFIsZSxBKXt2YXIgQz10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFQ9dC5mcmFtZSxTPXQubnVtYmVyU0lEQyxOPUUuaWNvbkNvbG9yW0NdLE89RS5pY29uRmlsbENvbG9yW0NdLEc9RS5ub25lW0NdLG89RS5ibGFja1tDXSxNPXtcIlNQLkkuQU5USVNBVEVMTElURSBXRUFQT05cIjp7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTEwIDAsOSBtIDAsLTM0IDAsNSBtIDAsLTkgLTIsNCA0LDAgeiBtIC0xMCw5IDAsMjAgMjAsMCAwLC0yMCB6IG0gMjUsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0zMCwwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMCwxMCA1LDAgbSAyMCwwIDUsMFwifSxcIlNQLkkuQVNUUk9OT01JQ0FMIFNBVEVMTElURVwiOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDk3LDkwIC0xLC05IDgsMCAtMSw5IG0gLTUsMjAgMSw5IDIsMCAxLC05IG0gOCwtMTAgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LFwiU1AuSS5CSU9TQVRFTExJVEVcIjp7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODkgYyAwLDQuNCAtMy42LDggLTgsOCAtNC40LDAgLTgsLTMuNiAtOCwtOCAwLC00LjQgMy42LC04IDgsLTggNC40LDAgOCwzLjYgOCw4IHogbSAtMTAsMTAgMCwyMCAyMCwwIDAsLTIwIHogbSAyNSwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgLTI1LDAgMCwyMCAyNSwwIHogbSAwLDEwIDUsMCBtIDIwLDAgNSwwIG0gLTE3LC0yNSAxNywxMCAtMSwyIC0xNCwtN1wifSxcIlNQLkkuQ0FQU1VMRVwiOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDExNSBjIC0yLDUgMzIsNSAzMCwwIGwgLTUsLTMwIGMgLTEsLTUgLTE5LC01IC0yMCwwIHpcIn19O2Zvcih2YXIgaSBpbiBNW1wiU1AuSS5DSVZJTElBTiBBU1RST05PTUlDQUwgU0FURUxMSVRFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDk3LDkwIC0xLC05IDgsMCAtMSw5IG0gLTUsMjAgMSw5IDIsMCAxLC05IG0gOCwtMTAgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LE1bXCJTUC5JLkNJVklMSUFOIEJJT1NBVEVMTElURVwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSAxMDAsODkgYyAwLDQuNCAtMy42LDggLTgsOCAtNC40LDAgLTgsLTMuNiAtOCwtOCAwLC00LjQgMy42LC04IDgsLTggNC40LDAgOCwzLjYgOCw4IHogbSAtMTAsMTAgMCwyMCAyMCwwIDAsLTIwIHogbSAyNSwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgLTI1LDAgMCwyMCAyNSwwIHogbSAwLDEwIDUsMCBtIDIwLDAgNSwwIG0gLTE3LC0yNSAxNywxMCAtMSwyIC0xNCwtN1wifSxNW1wiU1AuSS5DSVZJTElBTiBDQVBTVUxFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDg1LDExNSBjIC0yLDUgMzIsNSAzMCwwIGwgLTUsLTMwIGMgLTEsLTUgLTE5LC01IC0yMCwwIHpcIn0sTVtcIlNQLkkuQ0lWSUxJQU4gQ09NTVVOSUNBVElPTlMgU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSAxMTAsMTA5IDUsMCBtIC0zMCwwIDUsMCBtIC01LC0xMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDMwLDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMjUsMCAwLDIwIDIwLDAgMCwtMjAgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw5MCAwLDkgTSA3NSw4MSBjIDE2LDEyIDM0LDEyIDUwLDBcIn1dLE1bXCJTUC5JLkNJVklMSUFOIEVBUlRIIE9CU0VSVkFUSU9OIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gMTA3LDExMyBjIDAsMy45IC0zLjEsNyAtNyw3IC0zLjksMCAtNywtMy4xIC03LC03IDAsLTMuOSAzLjEsLTcgNywtNyAzLjksMCA3LDMuMSA3LDcgeiBtIC0xNywtMzMgMCwyMCAyMCwwIDAsLTIwIHogbSAyNSwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgLTI1LDAgMCwyMCAyNSwwIHogbSAwLDEwIDUsMCBtIDIwLDAgNSwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODgsMTA3IGMgOCwtOSAxNiwtOSAyNCwwXCJ9XSxNW1wiU1AuSS5DSVZJTElBTiBNSU5JQVRVUklaRUQgU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSA5MS4xLDkyIDAsMTYgMTcuOCwwIDAsLTE2IHogbSAyMi4yLDAgMCwxNiAyMi4yLDAgMCwtMTYgeiBtIC0yNi42LDAgLTIyLjIsMCAwLDE2IDIyLjIsMCB6IG0gMCw4IDQuNCwwIG0gMTcuOCwwIDQuNCwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsMTE5IDEwLC05IDEwLDkgbSAtMjAsLTM4IDEwLDkgMTAsLTkgbSAzNSw5IC0xMCwxMCAxMCwxMCBNIDU1LDkwIDY1LDEwMCA1NSwxMTBcIn1dLE1bXCJTUC5JLkNJVklMSUFOIE5BVklHQVRJT05BTCBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDExMCwxMDkgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODgsODcgYyA4LDYgMTYsNiAyNCwwIG0gLTIwLDggOCwtMTQgOCwxNFwifV0sTVtcIlNQLkkuQ0lWSUxJQU4gT1JCSVRFUiBTSFVUVExFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDg5LDExNSA2LC0yNSBjIDMsLTEyIDcsLTEyIDEwLDAgbCA2LDI1IC0xMCwwIC0xLDUgLTEsLTUgelwifSxNW1wiU1AuSS5DSVZJTElBTiBTQVRFTExJVEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gMTEwLDEwMCAxMCwwIG0gLTQwLDAgMTAsMCBtIC0xMCwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSA0MCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sTVtcIlNQLkkuQ0lWSUxJQU4gU1BBQ0UgU1RBVElPTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSA5Ny41LDExMi41IDAsNy41IDUsMCAwLC03LjUgeiBtIDAsLTMyLjUgNSwwIDAsMjYuNCAtNSwwIHogbSAtMC4zLDcuNiBDIDgzLjMsODguMiA3Mi41LDkzLjUgNzIuNSwxMDAgYyAwLDYuOSAxMi4zLDEyLjUgMjcuNSwxMi41IDE1LjIsMCAyNy41LC01LjYgMjcuNSwtMTIuNSAwLC02LjUgLTExLC0xMS45IC0yNSwtMTIuNCBsIDAsNS42IGMgOS45LDAuNCAxNy41LDMuMiAxNy41LDYuNiAwLDMuNyAtOC45LDYuNyAtMTkuOCw2LjcgLTEwLjksMCAtMTkuOCwtMyAtMTkuOCwtNi43IDAsLTMuNCA3LjQsLTYuMSAxNy4xLC02LjYgbCAwLC01LjYgYyAtMC4xLDAgLTAuMiwtMCAtMC4zLDAgelwifSxNW1wiU1AuSS5DSVZJTElBTiBURVRIRVJFRCBTQVRFTExJVEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IVQmJk8sZDpcIm0gMTIwLDg3IC0yMCwxMiBtIDMzLC0xMiBjIDAsMy42IC0yLjksNi41IC02LjUsNi41IC0zLjYsMCAtNi41LC0yLjkgLTYuNSwtNi41IDAsLTMuNiAyLjksLTYuNSA2LjUsLTYuNSAzLjYsMCA2LjUsMi45IDYuNSw2LjUgeiBtIC0yMywyMiA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sTVtcIlNQLkkuQ0lWSUxJQU4gV0VBVEhFUiBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFUJiZPLGQ6XCJtIDExMCwxMDkgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo5NSxmb250c2l6ZToyNSx0ZXh0OlwiV1hcIn1dLE1bXCJTUC5JLkNJVklMSUFOXCJdPWEoXCJDSVZcIiksTVtcIlNQLkkuQ0lWSUxJQU5cIl0uZmlsbD1SfHxTP086IVQmJk8sTVtcIlNQLkkuQ0lWSUxJQU5cIl0uc3Ryb2tlPW8sTVtcIlNQLkkuQ0lWSUxJQU5cIl0uc3Ryb2tld2lkdGg9MyxNW1wiU1AuSS5DT01NVU5JQ0FUSU9OUyBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDExMCwxMDkgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDkwIDAsOSBNIDc1LDgxIGMgMTYsMTIgMzQsMTIgNTAsMFwifV0sTVtcIlNQLk0xLkNZQkVSU1BBQ0VcIl09bChcIkNZQlwiKSxNW1wiU1AuTTIuQ1lCRVJTUEFDRVwiXT1yKFwiQ1lCXCIpLE1bXCJTUC5JLkVBUlRIIE9CU0VSVkFUSU9OIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA3LDExMyBjIDAsMy45IC0zLjEsNyAtNyw3IC0zLjksMCAtNywtMy4xIC03LC03IDAsLTMuOSAzLjEsLTcgNywtNyAzLjksMCA3LDMuMSA3LDcgeiBtIC0xNywtMzMgMCwyMCAyMCwwIDAsLTIwIHogbSAyNSwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTMwLDAgLTI1LDAgMCwyMCAyNSwwIHogbSAwLDEwIDUsMCBtIDIwLDAgNSwwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODgsMTA3IGMgOCwtOSAxNiwtOSAyNCwwXCJ9XSxNW1wiU1AuSS5GRi5DUkVXRUQgU1BBQ0UgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLjMsNjIuNCBjIC0xLjgsLTAgLTQuMywzLjcgLTQuNSw1LjQgLTIuNSwxMS4zIC0zLjQsMjMuMSAtNi4yLDMzLjQgLTIuOSw2LjcgLTYuOCw4LjMgLTkuOSwxMi4xIC0zLDMuNiAtOC41LDEwLjQgLTguNSwxMC40IGwgMCw2LjQgYyAwLDAgNS45LDAuOSA4LjksMS4yIDMsMC4yIDguNywwLjEgOC43LDAuMSBsIDAuMyw0LjMgNC4zLDAuMiAwLjIsMy4xIDUuOCwwIDAuOSw2LjUgMC45LC02LjQgNS44LDAgMC4yLC0zLjEgNC4zLC0wLjIgMC4zLC00LjMgYyAwLDAgNS43LDAuMSA4LjcsLTAuMSAzLC0wLjIgOC45LC0xLjIgOC45LC0xLjIgbCAwLC02LjQgYyAwLDAgLTUuNSwtNi43IC04LjUsLTEwLjMgLTMuMSwtMy44IC03LC01LjQgLTkuOSwtMTIuMSAtMi44LC0xMC40IC0zLjcsLTIyLjIgLTYuMiwtMzMuNCAtMC4zLC0yLjkgLTIuNywtNS41IC00LjUsLTUuNSB6XCJ9LE1bXCJTUC5JLkZGLlNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExNSw3MCAyMCwwIDAsNTUgLTIwLDAgeiBtIC0yNSw1IDIwLDAgMCw0NSAtMjAsMCB6IG0gLTI1LC01IDIwLDAgMCw1NSAtMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk04MCwxMzUgYzEwLC0xMCAzMCwtMTAgNDAsMCBNMTAwLDEyNyBMMTAwLDEwMCBNNzAsMTAwIEwxMzAsMTAwXCJ9XSxNW1wiU1AuSS5GRi5TUEFDRSBTVEFUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDMuMSw5Ny40IGMgLTEyLjQsMC4zIC0yNS43LDAuMSAtMzYuNyw2LjcgLTQuMSwyLjEgLTguNSw1LjkgLTcuOCwxMSAwLjIsMy43IDAuMyw3LjQgMC41LDExLjEgNi4yLDcuOCAxNi42LDEwLjQgMjYsMTEuOCAxNCwxLjggMjguNSwxLjIgNDIuMSwtMyA1LjIsLTEuNyAxMC40LC00LjMgMTQuMiwtOC4zIDAuMywtNS4xIC0wLjMsLTEwLjQgMC43LC0xNS4zIC0xLjIsLTQuMyAtNS45LC02LjQgLTkuNywtOC4yIC05LjIsLTQgLTE5LjMsLTUuNCAtMjkuMiwtNS42IHogbSAtMy4yLDkuNiBjIDEwLjEsLTAuMiAyMC41LDEuOSAyOS4xLDcuNCAtMTMsOC40IC0yOS42LDkuNyAtNDQuMyw2LjEgLTQuOSwtMS4zIC05LjcsLTMuMyAtMTMuNywtNi40IDguOCwtNC45IDE4LjksLTYuOSAyOC45LC03LjIgelwiLGZpbGw6Uj9POkd9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOlwiYmxhY2tcIixkOlwibSA5Ni45LDEwNyBjIDAuNywtOC4xIDEuNCwtMTYuMyAyLjEsLTI0LjQgTSA4OS4zLDEyMS44IGMgMy4xLC0xMy4yIDYuMiwtMjYuMyA5LjMsLTM5LjUgNC45LDEyLjcgOS43LDI1LjUgMTQuNiwzOC4yIG0gMjcuOCwtNS4zIGMgLTAuMSwzLjkgLTAuMiw3LjggLTAuMywxMS42IE0gNTguNiwxMTMuMyBjIDAuMiw0LjUgMC4zLDkgMC41LDEzLjUgbSAtMC41LC0xLjIgYyAzLjUsNi4zIDExLDguNiAxNy42LDEwLjUgMTYuNCw0LjEgMzMuOSwzLjkgNTAuMSwtMC44IDUuNSwtMS44IDExLjgsLTQuMyAxNC43LC05LjcgbSAwLjUsLTEzIGMgLTAuNSw1LjQgLTYuMSw4LjEgLTEwLjUsMTAgLTE1LjQsNS43IC0zMi40LDYuMSAtNDguNSwzLjYgLTcuOSwtMS40IC0xNi4zLC0zLjQgLTIyLjIsLTkuMiAtMy42LC0zLjkgLTAuOSwtOS42IDMuNCwtMTEuNyA4LjMsLTUuMiAxOC4zLC02LjYgMjcuOSwtNy41IDEzLjUsLTEgMjcuNSwwIDQwLjIsNS4xIDQuMiwxLjggOS4zLDQuNiA5LjcsOS43IHogbSAtMTMuMywxLjYgYyAtOC4yLC01LjkgLTE4LjgsLTYuOCAtMjguNiwtNyAtOS41LDAuMSAtMTkuNSwxLjIgLTI3LjYsNi40IGwgLTAuNiwwLjUgbSA1OC45LC0yLjYgYyAtMC44LDQuOCAtNi4xLDYuNCAtMTAsNy44IC0xMy4yLDMuNyAtMjcuNCwzLjcgLTQwLjUsLTAgLTMuOCwtMS4yIC04LjEsLTIuOCAtOS44LC02LjcgLTAuNywtNC45IDUsLTcuMSA4LjcsLTguNSAxMi43LC00IDI2LjYsLTQgMzkuNSwtMSA0LjQsMS4yIDkuOCwyLjggMTEuOSw3LjMgbCAwLjEsMC41IDAsMC41IHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDpcImJsYWNrXCIsc3Ryb2tlOiExLGQ6XCJNIDc1LjIsOTMuMSBDIDg4LjksODcgMTAyLjYsODAuOCAxMTYuMyw3NC43IGMgMi4zLDEuMyA0LjcsMi42IDcsMy45IC0xMy43LDYgLTI3LjMsMTIgLTQxLDE4IC0yLjQsLTEuMiAtNC44LC0yLjMgLTcuMiwtMy41IHpcIn1dLE1bXCJTUC5JLk1BTlVBTCBUUkFDS1wiXT1hKFwiTUFOXCIpLE1bXCJTUC5JLk1JTElUQVJZXCJdPWEoXCJNSUxcIiksTVtcIlNQLkkuTUlOSUFUVVJJWkVEIFNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gOTEuMSw5MiAwLDE2IDE3LjgsMCAwLC0xNiB6IG0gMjIuMiwwIDAsMTYgMjIuMiwwIDAsLTE2IHogbSAtMjYuNiwwIC0yMi4yLDAgMCwxNiAyMi4yLDAgeiBtIDAsOCA0LjQsMCBtIDE3LjgsMCA0LjQsMFwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDkwLDExOSAxMCwtOSAxMCw5IG0gLTIwLC0zOCAxMCw5IDEwLC05IG0gMzUsOSAtMTAsMTAgMTAsMTAgTSA1NSw5MCA2NSwxMDAgNTUsMTEwXCJ9XSxNW1wiU1AuSS5OQVZJR0FUSU9OQUwgU0FURUxMSVRFXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMTAsMTA5IDUsMCBtIC0zMCwwIDUsMCBtIC01LC0xMCAtMjUsMCAwLDIwIDI1LDAgeiBtIDMwLDAgMCwyMCAyNSwwIDAsLTIwIHogbSAtMjUsMCAwLDIwIDIwLDAgMCwtMjAgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDg4LDg3IGMgOCw2IDE2LDYgMjQsMCBtIC0yMCw4IDgsLTE0IDgsMTRcIn1dLE1bXCJTUC5JLk9SQklURVIgU0hVVFRMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4OSwxMTUgNiwtMjUgYyAzLC0xMiA3LC0xMiAxMCwwIGwgNiwyNSAtMTAsMCAtMSw1IC0xLC01IHpcIn0sTVtcIlNQLkkuUkUtRU5UUlkgVkVISUNMRVwiXT1hKFwiUlZcIiksTVtcIlNQLkkuUkVDT05OQUlTU0FOQ0UgU0FURUxMSVRFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNiwxMDAgOSwyMCBtIC0yMSwtMjAgLTksMjAgbSAxNywtMjAgMywyMCBtIC03LC0yMCAtMywyMCBtIDE1LC0zMCA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sTVtcIlNQLkkuU0FURUxMSVRFLCBHRU5FUkFMXCJdPWEoXCJTQVRcIiksTVtcIlNQLkkuU0FURUxMSVRFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDExMCwxMDAgMTAsMCBtIC00MCwwIDEwLDAgbSAtMTAsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gNDAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0zMCwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LE1bXCJTUC5JLlNQQUNFIExBVU5DSCBWRUhJQ0xFXCJdPWEoXCJTTFZcIiksTVtcIlNQLkkuU1BBQ0UgU1RBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5Ny41LDExMi41IDAsNy41IDUsMCAwLC03LjUgeiBtIDAsLTMyLjUgNSwwIDAsMjYuNCAtNSwwIHogbSAtMC4zLDcuNiBDIDgzLjMsODguMiA3Mi41LDkzLjUgNzIuNSwxMDAgYyAwLDYuOSAxMi4zLDEyLjUgMjcuNSwxMi41IDE1LjIsMCAyNy41LC01LjYgMjcuNSwtMTIuNSAwLC02LjUgLTExLC0xMS45IC0yNSwtMTIuNCBsIDAsNS42IGMgOS45LDAuNCAxNy41LDMuMiAxNy41LDYuNiAwLDMuNyAtOC45LDYuNyAtMTkuOCw2LjcgLTEwLjksMCAtMTkuOCwtMyAtMTkuOCwtNi43IDAsLTMuNCA3LjQsLTYuMSAxNy4xLC02LjYgbCAwLC01LjYgYyAtMC4xLDAgLTAuMiwtMCAtMC4zLDAgelwifSxNW1wiU1AuSS5TUEFDRSBWRUhJQ0xFXCJdPWEoXCJTVlwiKSxNW1wiU1AuSS5URVRIRVJFRCBTQVRFTExJVEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDg3IC0yMCwxMiBtIDMzLC0xMiBjIDAsMy42IC0yLjksNi41IC02LjUsNi41IC0zLjYsMCAtNi41LC0yLjkgLTYuNSwtNi41IDAsLTMuNiAyLjksLTYuNSA2LjUsLTYuNSAzLjYsMCA2LjUsMi45IDYuNSw2LjUgeiBtIC0yMywyMiA1LDAgbSAtMzAsMCA1LDAgbSAtNSwtMTAgLTI1LDAgMCwyMCAyNSwwIHogbSAzMCwwIDAsMjAgMjUsMCAwLC0yMCB6IG0gLTI1LDAgMCwyMCAyMCwwIDAsLTIwIHpcIn0sTVtcIlNQLkkuV0VBVEhFUiBTQVRFTExJVEVcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDExMCwxMDkgNSwwIG0gLTMwLDAgNSwwIG0gLTUsLTEwIC0yNSwwIDAsMjAgMjUsMCB6IG0gMzAsMCAwLDIwIDI1LDAgMCwtMjAgeiBtIC0yNSwwIDAsMjAgMjAsMCAwLC0yMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMDAsZm9udHNpemU6MjUsdGV4dDpcIldYXCJ9XSxNW1wiU1AuTTEuR0VPU1RBVElPTkFSWSBPUkJJVCAoR08pXCJdPWwoXCJHT1wiKSxNW1wiU1AuTTEuR0VPU1lOQ0hST05PVVMgT1JCSVQgKEdTTylcIl09bChcIkdTT1wiKSxNW1wiU1AuTTEuSElHSCBFQVJUSCBPUkJJVCAoSEVPKVwiXT1sKFwiSEVPXCIpLE1bXCJTUC5NMS5MT1cgRUFSVEggT1JCSVQgKExFTylcIl09bChcIkxFT1wiKSxNW1wiU1AuTTEuTUVESVVNIEVBUlRIIE9SQklUIChNRU8pXCJdPWwoXCJNRU9cIiksTVtcIlNQLk0xLk1PTE5JWUEgT1JCSVQgKE1PKVwiXT1sKFwiTU9cIiksTVtcIlNQLk0yLklORlJBUkVEXCJdPXIoXCJJUlwiKSxNW1wiU1AuTTIuT1BUSUNBTFwiXT1yKFwiT1wiKSxNW1wiU1AuTTIuUkFEQVJcIl09cihcIlJcIiksTVtcIlNQLk0yLlNJR05BTFMgSU5URUxMSUdFTkNFIChTSUdJTlQpXCJdPXIoXCJTSVwiKSxNW1wiU1BBQ0UuTUlTU0lMRS5JQ09OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTAsMTM1IGwwLC0xMCA1LC01IDAsLTU1IDUsLTUgNSw1IDAsNTUgNSw1IDAsMTAgLTEwLC0xMCB6XCJ9LChSfHxTKSYmKE1bXCJTUEFDRS5NSVNTSUxFLklDT05cIl0uZmlsbD1UP0UuZmlsbENvbG9yLlVua25vd246RS5pY29uRmlsbENvbG9yLlVua25vd24pLE1bXCJTUEFDRS5NSVNTSUxFLk0xLkJBTExJU1RJQ1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiQlwifSxNW1wiU1BBQ0UuTUlTU0lMRS5NMS5JTlRFUkNFUFRPUlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiSVwifSxNW1wiU1BBQ0UuTUlTU0lMRS5NMS5TUEFDRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUFwifV0sTVtcIlNQQUNFLk1JU1NJTEUuTTIuQVJST1dcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJBXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUlwifV0sTVtcIlNQQUNFLk1JU1NJTEUuTTIuR1JPVU5ELUJBU0VEIElOVEVSQ0VQVE9SIChHQkkpXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiR1wifSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5JTlRFUkNPTlRJTkVOVEFMXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiSVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIkNcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLklOVEVSTUVESUFURSBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIklcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5MT05HIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiTFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLE1bXCJTUEFDRS5NSVNTSUxFLk0yLk1FRElVTSBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIk1cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5QQVRSSU9UXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiUFwifSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5TSE9SVCBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5TUEFDRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJQXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5TVEFOREFSRCBNSVNTSUxFIC0gMyAoU00tMylcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiM1wifV0sTVtcIlNQQUNFLk1JU1NJTEUuTTIuU1RBTkRBUkQgTUlTU0lMRSAtIFRFUk1JTkFMIFBIQVNFIChTTS1UKVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJUXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5URVJNSU5BTCBISUdILUFMVElUVURFIEFSRUEgREVGRU5TRSAoVEhBQUQpXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiVFwifSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5DTE9TRSBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIkNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxNW1wiU1BBQ0UuTUlTU0lMRS5NMi5ERUJSSVNcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJEXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiQlwifV0sTVtcIlNQQUNFLk1JU1NJTEUuTTIuVU5LTk9XTlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlVcIn0sTVtcIlNQQUNFLlBMQU5FVCBMQU5ERVJcIl09YShcIlBMXCIpLE0pTS5oYXNPd25Qcm9wZXJ0eShpKSYmKEkuaGFzT3duUHJvcGVydHkoaSkmJmNvbnNvbGUud2FybihcIk92ZXJyaWRlIG9mOiBcIitpKSxuLmNhbGwodGhpcyxNW2ldLE4pLElbaV09TVtpXSl9cy5zZXRDb2xvck1vZGU9ZnVuY3Rpb24oSSx0KXtyZXR1cm4gdGhpcy5fY29sb3JNb2Rlc1tJXT17fSx0aGlzLl9jb2xvck1vZGVzW0ldLkhvc3RpbGU9dC5Ib3N0aWxlLHRoaXMuX2NvbG9yTW9kZXNbSV0uRnJpZW5kPXQuRnJpZW5kLHRoaXMuX2NvbG9yTW9kZXNbSV0uTmV1dHJhbD10Lk5ldXRyYWwsdGhpcy5fY29sb3JNb2Rlc1tJXS5Vbmtub3duPXQuVW5rbm93bix0aGlzLl9jb2xvck1vZGVzW0ldLkNpdmlsaWFuPXQuQ2l2aWxpYW4sdGhpcy5fY29sb3JNb2Rlc1tJXX0scy5hZGRTeW1ib2xQYXJ0PWZ1bmN0aW9uKEkpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIEkpe3ZhciB0PXMuZ2V0U3ltYm9sUGFydHMoKTstMT09dC5pbmRleE9mKEkpJiZzLnNldFN5bWJvbFBhcnRzKHQuY29uY2F0KEkpKX1yZXR1cm4gc30scy5nZXRTeW1ib2xQYXJ0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW1ib2xQYXJ0cy5zbGljZSgwKX0scy5zZXRTeW1ib2xQYXJ0cz1mdW5jdGlvbihJKXtyZXR1cm4gdGhpcy5fc3ltYm9sUGFydHM9SSxzfSxzLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBJIGluIHRoaXMuX2Jyb2tlblBhdGgyRD12b2lkIDAsdGhpcy5fY29sb3JNb2Rlcz17fSx0KXMuc2V0Q29sb3JNb2RlKEksdFtJXSk7dGhpcy5fZGFzaEFycmF5cz17cGVuZGluZzpcIjQsNFwiLGFudGljaXBhdGVkOlwiOCwxMlwiLGZlaW50RHVtbXk6XCI4LDhcIn0sdGhpcy5fZ2V0SWNvbnM9e30sdGhpcy5fZ2V0TWV0YWRhdGE9e30sdGhpcy5faHFTdGFmZkxlbmd0aD0xMDAsdGhpcy5faWNvbkNhY2hlPXt9LHRoaXMuX2ljb25QYXJ0cz1bXSx0aGlzLl9sYWJlbENhY2hlPXt9LHRoaXMuX2xhYmVsT3ZlcnJpZGVzPXt9LHRoaXMuX2ljb25TSURDPXt9LHRoaXMuX2ljb25TSURDLmxldHRlcj1bXSx0aGlzLl9pY29uU0lEQy5udW1iZXI9W10sdGhpcy5fU1REMjUyNT0hMCx0aGlzLl9zdmdOUz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsdGhpcy5fc3ltYm9sUGFydHM9W10scy5hZGRTeW1ib2xQYXJ0KEUpLHMuYWRkU3ltYm9sUGFydChSKSxzLmFkZFN5bWJvbFBhcnQoZSkscy5hZGRTeW1ib2xQYXJ0KEEpLHMuYWRkU3ltYm9sUGFydChDKSxzLmFkZFN5bWJvbFBhcnQoVCkscy5hZGRTeW1ib2xQYXJ0KFMpLHMuYWRkU3ltYm9sUGFydChOKX0scy5yZXNldCgpLHMuQkJveD1JLHMuQ29sb3JNb2RlPWZ1bmN0aW9uKEksdCxFLFIsZSl7dmFyIEE9e307cmV0dXJuIEEuQ2l2aWxpYW49SSxBLkZyaWVuZD10LEEuSG9zdGlsZT1FLEEuTmV1dHJhbD1SLEEuVW5rbm93bj1lLEF9LHMuc2V0QnJva2VuUGF0aDJEPWZ1bmN0aW9uKEkpe3MuX2Jyb2tlblBhdGgyRD1JfSxzLl9nZXRJY29uUGFydHM9ZnVuY3Rpb24oSSx0LEUsUixlKXt2YXIgQT17fTtmb3IodmFyIEMgaW4gdGhpcy5faWNvblBhcnRzKXRoaXMuX2ljb25QYXJ0cy5oYXNPd25Qcm9wZXJ0eShDKSYmdGhpcy5faWNvblBhcnRzW0NdLmNhbGwodGhpcyxBLEksdCxFLFIsZSk7cmV0dXJuIEF9LHMuX3NjYWxlPWZ1bmN0aW9uKEksdCl7cmV0dXJue3R5cGU6XCJ0cmFuc2xhdGVcIix4OjEwMC0xMDAqSSx5OjEwMC0xMDAqSSxkcmF3Olt7dHlwZTpcInNjYWxlXCIsZmFjdG9yOkksZHJhdzpbdF19XX19LHMuX3RyYW5zbGF0ZT1mdW5jdGlvbihJLHQsRSl7cmV0dXJue3R5cGU6XCJ0cmFuc2xhdGVcIix4OkkseTp0LGRyYXc6W0VdfX0scy5hZGRJY29uUGFydHM9ZnVuY3Rpb24oSSl7QXJyYXkuaXNBcnJheShJKXx8KEk9W0ldKTtmb3IodmFyIHQ9MDt0PEkubGVuZ3RoO3QrKylcImZ1bmN0aW9uXCI9PXR5cGVvZiBJW3RdJiYtMT09dGhpcy5faWNvblBhcnRzLmluZGV4T2YoSVt0XSkmJih0aGlzLl9pY29uUGFydHM9dGhpcy5faWNvblBhcnRzLmNvbmNhdChJW3RdKSk7cmV0dXJuIHN9LHMuYWRkTGFiZWxPdmVycmlkZXM9ZnVuY3Rpb24oSSx0KXtyZXR1cm4gdGhpcy5fbGFiZWxDYWNoZT17fSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBJJiYodGhpcy5fbGFiZWxPdmVycmlkZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl9sYWJlbE92ZXJyaWRlc1t0XT1bXSksdGhpcy5fbGFiZWxPdmVycmlkZXNbdF09dGhpcy5fbGFiZWxPdmVycmlkZXNbdF0uY29uY2F0KEkpKSxzfSxzLmFkZEljb25zPWZ1bmN0aW9uKEkpe3RoaXMuX2ljb25DYWNoZT17fSxBcnJheS5pc0FycmF5KEkpfHwoST1bSV0pO2Zvcih2YXIgdD0wO3Q8SS5sZW5ndGg7dCsrKUlbdF0uaGFzT3duUHJvcGVydHkoXCJnZXRNZXRhZGF0YVwiKSYmKHMuX2dldE1ldGFkYXRhW0lbdF0udHlwZV09SVt0XS5nZXRNZXRhZGF0YSksSVt0XS5oYXNPd25Qcm9wZXJ0eShcImdldEljb25zXCIpJiYocy5fZ2V0SWNvbnNbSVt0XS50eXBlXT1JW3RdLmdldEljb25zKSxJW3RdLmhhc093blByb3BlcnR5KFwiaWNvblBhcnRzXCIpJiZzLmFkZEljb25QYXJ0cyhJW3RdLmljb25QYXJ0cyksSVt0XS5oYXNPd25Qcm9wZXJ0eShcImxhYmVsc1wiKSYmcy5hZGRMYWJlbE92ZXJyaWRlcyhJW3RdLmxhYmVscyxJW3RdLnR5cGUpLElbdF0uaGFzT3duUHJvcGVydHkoXCJpY29uc1wiKSYmcy5hZGRTSURDaWNvbnMoSVt0XS5pY29ucyxJW3RdLnR5cGUpfSxzLmFkZFNJRENpY29ucz1mdW5jdGlvbihJLHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIEkmJi0xPT10aGlzLl9pY29uU0lEQ1t0XS5pbmRleE9mKEkpJiYodGhpcy5faWNvblNJRENbdF09dGhpcy5faWNvblNJRENbdF0uY29uY2F0KEkpKSxzfSxzLmdldENvbG9yTW9kZT1mdW5jdGlvbihJKXt2YXIgdD10aGlzLl9jb2xvck1vZGVzW0ldO3JldHVybiBuZXcgcy5Db2xvck1vZGUodC5DaXZpbGlhbix0LkZyaWVuZCx0Lkhvc3RpbGUsdC5OZXV0cmFsLHQuVW5rbm93bil9LHMuZ2V0RGFzaEFycmF5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXNoQXJyYXlzfSxzLmdldEhxU3RhZmZMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faHFTdGFmZkxlbmd0aH0scy5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVyc2lvbn0scy5vdXRsaW5lPWZ1bmN0aW9uKEksdCxFLFIpe3JldHVybiBmdW5jdGlvbiBJKHQsRSxSLGUpe3ZhciBBO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBDIGluIEE9W10sdClBLnB1c2goSSh0W0NdLEUsUixlKSk7ZWxzZXtmb3IodmFyIFQgaW4gQT17fSx0KS0xPT1bXCJmaWxsXCIsXCJmaWxsb3BhY2l0eVwiXS5pbmRleE9mKFQpJiYoQVtUXT10W1RdKTtpZihcInRyYW5zbGF0ZVwiPT10LnR5cGV8fFwicm90YXRlXCI9PXQudHlwZXx8XCJzY2FsZVwiPT10LnR5cGUpZm9yKHZhciBTIGluIEEuZHJhdz1bXSx0LmRyYXcpQS5kcmF3LnB1c2goSSh0LmRyYXdbU10sRSxSLGUpKTtlbHNlIEEuc3Ryb2tld2lkdGg9ITEhPT1BLnN0cm9rZT9OdW1iZXIoQS5zdHJva2V3aWR0aHx8UikrMipFOjIqRSxBLnN0cm9rZT1lLEEuZmlsbD0hMSxBLmxpbmVjYXA9XCJyb3VuZFwifXJldHVybiBBfShJLHQsRSxSKX0scy5zZXREYXNoQXJyYXlzPWZ1bmN0aW9uKEksdCxFKXtyZXR1cm4gdGhpcy5fZGFzaEFycmF5cy5wZW5kaW5nPUksdGhpcy5fZGFzaEFycmF5cy5hbnRpY2lwYXRlZD10LHRoaXMuX2Rhc2hBcnJheXMuZmVpbnREdW1teT1FLHRoaXMuX2Rhc2hBcnJheXN9LHMuc2V0SHFTdGFmZkxlbmd0aD1mdW5jdGlvbihJKXtyZXR1cm4gdGhpcy5faHFTdGFmZkxlbmd0aD1JLHRoaXMuX2hxU3RhZmZMZW5ndGh9LHMuc2V0U3RhbmRhcmQ9ZnVuY3Rpb24oSSl7cmV0dXJuXCIyNTI1XCI9PUk/dGhpcy5fU1REMjUyNT0hMDpcIkFQUDZcIj09SSYmISh0aGlzLl9TVEQyNTI1PSExKX0scy5fc3ltYm9sR2VvbWV0cmllcz1PLEcucHJvdG90eXBlLmFzQ2FudmFzPWZ1bmN0aW9uKEkpe2lmKHZvaWQgMD09PXMuX2Jyb2tlblBhdGgyRClpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgUGF0aDJEKXMuc2V0QnJva2VuUGF0aDJEKCEwKTtlbHNle3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7dC53aWRodD0xLHQuaGVpZ2h0PTE7dmFyIEU9dC5nZXRDb250ZXh0KFwiMmRcIiksUj1uZXcgUGF0aDJEKFwiTTAgMCBoIDEwIHYgMTAgaCAtMTAgWlwiKTtFLmZpbGwoUik7dmFyIGU9RS5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YS5qb2luKCk7cy5zZXRCcm9rZW5QYXRoMkQoIShcIjAsMCwwLDI1NVwiPT1lKSl9dmFyIEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtJPUl8fDEsQS53aWR0aD10aGlzLndpZHRoKkksQS5oZWlnaHQ9dGhpcy5oZWlnaHQqSTt2YXIgQz1BLmdldENvbnRleHQoXCIyZFwiKTtyZXR1cm4gQy5zY2FsZShJKnRoaXMuc3R5bGUuc2l6ZS8xMDAsSSp0aGlzLnN0eWxlLnNpemUvMTAwKSxDLnRyYW5zbGF0ZSgtKHRoaXMuYmJveC54MS10aGlzLnN0eWxlLnN0cm9rZVdpZHRoLXRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSwtKHRoaXMuYmJveC55MS10aGlzLnN0eWxlLnN0cm9rZVdpZHRoLXRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSksdGhpcy5jYW52YXNEcmF3LmNhbGwodGhpcyxDLHRoaXMuZHJhd0luc3RydWN0aW9ucyksQX0sRy5wcm90b3R5cGUuY2FudmFzRHJhdz1mdW5jdGlvbiBJKHQsRSl7Zm9yKHZhciBSPTA7UjxFLmxlbmd0aDtSKyspaWYoQXJyYXkuaXNBcnJheShFW1JdKSlFW1JdLmxlbmd0aCYmSS5jYWxsKHRoaXMsdCxFW1JdKTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiBFW1JdKXtzd2l0Y2godC5saW5lV2lkdGg9RVtSXS5zdHJva2V3aWR0aHx8dGhpcy5zdHlsZS5zdHJva2VXaWR0aCx2b2lkIDAhPT1FW1JdLnN0cm9rZSYmKEVbUl0uc3Ryb2tlP3Quc3Ryb2tlU3R5bGU9RVtSXS5zdHJva2U6dC5zdHJva2VTdHlsZT1cInJnYmEoMCwwLDAsMClcIiksRVtSXS5zdHJva2VkYXNoYXJyYXk/dC5zZXRMaW5lRGFzaChFW1JdLnN0cm9rZWRhc2hhcnJheS5zcGxpdChcIixcIikpOjAhPXQuZ2V0TGluZURhc2goKS5sZW5ndGgmJnQuc2V0TGluZURhc2goW10pLEVbUl0ubGluZWNhcCYmKHQubGluZUNhcD1FW1JdLmxpbmVjYXAsdC5saW5lSm9pbj1FW1JdLmxpbmVjYXApLEVbUl0uZmlsbCYmKHQuZmlsbFN0eWxlPUVbUl0uZmlsbCksRVtSXS5maWxsfHwodC5maWxsU3R5bGU9XCJyZ2JhKDAsMCwwLDApXCIpLHZvaWQgMCE9PUVbUl0uZmlsbG9wYWNpdHkmJih0Lmdsb2JhbEFscGhhPUVbUl0uZmlsbG9wYWNpdHkpLEVbUl0udHlwZSl7Y2FzZVwicGF0aFwiOmlmKHMuX2Jyb2tlblBhdGgyRClcImZ1bmN0aW9uXCI9PXR5cGVvZiBzLlBhdGgyRD8ocy5QYXRoMkQodCxFW1JdLmQpLCh2b2lkIDA9PT1FW1JdLmZpbGx8fHZvaWQgMCE9PUVbUl0uZmlsbCYmRVtSXS5maWxsKSYmdC5maWxsKCksMSE9dC5nbG9iYWxBbHBoYSYmKHQuZ2xvYmFsQWxwaGE9MSksKHZvaWQgMD09PUVbUl0uc3Ryb2tlfHx2b2lkIDAhPT1FW1JdLnN0cm9rZSYmRVtSXS5zdHJva2UpJiZ0LnN0cm9rZSgpKTpjb25zb2xlLndhcm4oXCJtcy5QYXRoMkQoKSBpcyBub3QgcHJlc2VudCwgeW91IHdpbGwgbmVlZCB0byBsb2FkIGZ1bmN0aW9uYWxpdHkgZm9yIHVzaW5nIENhbnZhcyBpbiBvbGRlciB2ZXJzaW9uIG9mIEludGVybmV0IEV4cGxvcmVyLlwiKTtlbHNle3ZhciBlPW5ldyBQYXRoMkQoRVtSXS5kKTtFW1JdLmhhc093blByb3BlcnR5KFwiY2xpcFBhdGhcIikmJih0LnNhdmUoKSx0LmNsaXAobmV3IFBhdGgyRChFW1JdLmNsaXBQYXRoKSxcIm5vbnplcm9cIikpLCh2b2lkIDA9PT1FW1JdLmZpbGx8fHZvaWQgMCE9PUVbUl0uZmlsbCYmRVtSXS5maWxsKSYmdC5maWxsKGUpLEVbUl0uaGFzT3duUHJvcGVydHkoXCJjbGlwUGF0aFwiKSYmdC5yZXN0b3JlKCksMSE9dC5nbG9iYWxBbHBoYSYmKHQuZ2xvYmFsQWxwaGE9MSksKHZvaWQgMD09PUVbUl0uc3Ryb2tlfHx2b2lkIDAhPT1FW1JdLnN0cm9rZSYmRVtSXS5zdHJva2UpJiZ0LnN0cm9rZShlKX1icmVhaztjYXNlXCJjaXJjbGVcIjpFW1JdLmhhc093blByb3BlcnR5KFwiY2xpcFBhdGhcIikmJih0LnNhdmUoKSx0LmNsaXAobmV3IFBhdGgyRChFW1JdLmNsaXBQYXRoKSxcIm5vbnplcm9cIikpLHQuYmVnaW5QYXRoKCksdC5hcmMoRVtSXS5jeCxFW1JdLmN5LEVbUl0uciwwLDIqTWF0aC5QSSwhMSksKHZvaWQgMD09PUVbUl0uZmlsbHx8dm9pZCAwIT09RVtSXS5maWxsJiZFW1JdLmZpbGwpJiZ0LmZpbGwoKSxFW1JdLmhhc093blByb3BlcnR5KFwiY2xpcFBhdGhcIikmJnQucmVzdG9yZSgpLCh2b2lkIDA9PT1FW1JdLnN0cm9rZXx8dm9pZCAwIT09RVtSXS5zdHJva2UmJkVbUl0uc3Ryb2tlKSYmdC5zdHJva2UoKTticmVhaztjYXNlXCJ0ZXh0XCI6dC5mb250PSh2b2lkIDAhPT1FW1JdLmZvbnR3ZWlnaHQ/RVtSXS5mb250d2VpZ2h0K1wiIFwiOlwiXCIpK0VbUl0uZm9udHNpemUrXCJweCBcIitFW1JdLmZvbnRmYW1pbHksdC50ZXh0QWxpZ249XCJtaWRkbGVcIj09RVtSXS50ZXh0YW5jaG9yP1wiY2VudGVyXCI6RVtSXS50ZXh0YW5jaG9yLHQuZmlsbFRleHQoRVtSXS50ZXh0LEVbUl0ueCxFW1JdLnkpLEVbUl0uc3Ryb2tlJiZ0LnN0cm9rZVRleHQoRVtSXS50ZXh0LEVbUl0ueCxFW1JdLnkpO2JyZWFrO2Nhc2VcInRyYW5zbGF0ZVwiOnQuc2F2ZSgpLHQudHJhbnNsYXRlKEVbUl0ueCxFW1JdLnkpLEkuY2FsbCh0aGlzLHQsRVtSXS5kcmF3KSx0LnJlc3RvcmUoKTticmVhaztjYXNlXCJyb3RhdGVcIjp2YXIgQT1FW1JdLngsQz1FW1JdLnk7dC5zYXZlKCksdC50cmFuc2xhdGUoQSxDKSx0LnJvdGF0ZShFW1JdLmRlZ3JlZSpNYXRoLlBJLzE4MCksdC50cmFuc2xhdGUoLUEsLUMpLEkuY2FsbCh0aGlzLHQsRVtSXS5kcmF3KSx0LnJlc3RvcmUoKTticmVhaztjYXNlXCJzY2FsZVwiOnQuc2F2ZSgpLHQuc2NhbGUoRVtSXS5mYWN0b3IsRVtSXS5mYWN0b3IpLEkuY2FsbCh0aGlzLHQsRVtSXS5kcmF3KSx0LnJlc3RvcmUoKX1FW1JdLmxpbmVjYXAmJih0LmxpbmVDYXA9XCJidXR0XCIsdC5saW5lSm9pbj1cIm1pdGVyXCIpLHZvaWQgMCE9PUVbUl0uZmlsbG9wYWNpdHkmJih0Lmdsb2JhbEFscGhhPTEpfX0sRy5wcm90b3R5cGUuYXNET009ZnVuY3Rpb24oKXt2YXIgST1kb2N1bWVudCx0PShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodGhpcy5hc1NWRygpLFwidGV4dC94bWxcIik7cmV0dXJuIEkuYWRvcHROb2RlKHQuZG9jdW1lbnRFbGVtZW50KX0sRy5wcm90b3R5cGUuYXNTVkc9ZnVuY3Rpb24oKXt2YXIgST0nPHN2ZyB4bWxucz1cIicrcy5fc3ZnTlMrJ1wiIHZlcnNpb249XCIxLjJcIiBiYXNlUHJvZmlsZT1cInRpbnlcIiB3aWR0aD1cIicrdGhpcy53aWR0aCsnXCIgaGVpZ2h0PVwiJyt0aGlzLmhlaWdodCsnXCIgdmlld0JveD1cIicrKHRoaXMuYmJveC54MS10aGlzLnN0eWxlLnN0cm9rZVdpZHRoLXRoaXMuc3R5bGUub3V0bGluZVdpZHRoKStcIiBcIisodGhpcy5iYm94LnkxLXRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgtdGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpK1wiIFwiK3RoaXMuYmFzZVdpZHRoK1wiIFwiK3RoaXMuYmFzZUhlaWdodCsnXCI+JztyZXR1cm4gSSs9ZnVuY3Rpb24gSSh0KXtmb3IodmFyIEU9XCJcIixSPTA7Ujx0Lmxlbmd0aDtSKyspaWYoQXJyYXkuaXNBcnJheSh0W1JdKSl0W1JdLmxlbmd0aCYmKEUrPUkuY2FsbCh0aGlzLHRbUl0pKTtlbHNlIGlmKFwib2JqZWN0XCI9PXR5cGVvZiB0W1JdKXt2YXIgZT1cIlwiO2lmKFwic3ZnXCI9PXRbUl0udHlwZSllKz10W1JdLnN2ZztlbHNle3N3aXRjaCh0W1JdLmhhc093blByb3BlcnR5KFwiY2xpcFBhdGhcIikmJihlKz0nPGNsaXBQYXRoIGlkPVwiY2xpcFwiPicsZSs9JzxwYXRoIGQ9XCInK3RbUl0uY2xpcFBhdGgrJ1wiIGNsaXAtcnVsZT1cIm5vbnplcm9cIiAvPicsZSs9XCI8L2NsaXBQYXRoPlwiKSx0W1JdLnR5cGUpe2Nhc2VcInBhdGhcIjplKz0nPHBhdGggZD1cIicrdFtSXS5kKydcIiAnLHRbUl0uaGFzT3duUHJvcGVydHkoXCJjbGlwUGF0aFwiKSYmKGUrPSdjbGlwLXBhdGg9XCJ1cmwoI2NsaXApXCIgJyk7YnJlYWs7Y2FzZVwiY2lyY2xlXCI6ZSs9JzxjaXJjbGUgY3g9XCInK3RbUl0uY3grJ1wiIGN5PVwiJyt0W1JdLmN5KydcIiByPVwiJyt0W1JdLnIrJ1wiICcsdFtSXS5oYXNPd25Qcm9wZXJ0eShcImNsaXBQYXRoXCIpJiYoZSs9J2NsaXAtcGF0aD1cInVybCgjY2xpcClcIiAnKTticmVhaztjYXNlXCJ0ZXh0XCI6ZSs9Jzx0ZXh0IHg9XCInK3RbUl0ueCsnXCIgeT1cIicrdFtSXS55KydcIiB0ZXh0LWFuY2hvcj1cIicrdFtSXS50ZXh0YW5jaG9yKydcIiBmb250LXNpemU9XCInK3RbUl0uZm9udHNpemUrJ1wiIGZvbnQtZmFtaWx5PVwiJyt0W1JdLmZvbnRmYW1pbHkrJ1wiICcsdFtSXS5mb250d2VpZ2h0JiYoZSs9J2ZvbnQtd2VpZ2h0PVwiJyt0W1JdLmZvbnR3ZWlnaHQrJ1wiICcpO2JyZWFrO2Nhc2VcInRyYW5zbGF0ZVwiOmUrPSc8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoJyt0W1JdLngrXCIsXCIrdFtSXS55KycpXCIgJzticmVhaztjYXNlXCJyb3RhdGVcIjplKz0nPGcgdHJhbnNmb3JtPVwicm90YXRlKCcrdFtSXS5kZWdyZWUrXCIsXCIrdFtSXS54K1wiLFwiK3RbUl0ueSsnKVwiICc7YnJlYWs7Y2FzZVwic2NhbGVcIjplKz0nPGcgdHJhbnNmb3JtPVwic2NhbGUoJyt0W1JdLmZhY3RvcisnKVwiICd9c3dpdGNoKHZvaWQgMCE9PXRbUl0uc3Ryb2tlJiYoZSs9J3N0cm9rZS13aWR0aD1cIicrKHRbUl0uc3Ryb2tld2lkdGh8fHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgpKydcIiAnLHRbUl0uc3Ryb2tlZGFzaGFycmF5JiYoZSs9J3N0cm9rZS1kYXNoYXJyYXk9XCInK3RbUl0uc3Ryb2tlZGFzaGFycmF5KydcIiAnKSx0W1JdLmxpbmVjYXAmJihlKz0nc3Ryb2tlLWxpbmVjYXA9XCInK3RbUl0ubGluZWNhcCsnXCIgJyxlKz0nc3Ryb2tlLWxpbmVqb2luPVwiJyt0W1JdLmxpbmVjYXArJ1wiICcpLHRbUl0uc3Ryb2tlP2UrPSdzdHJva2U9XCInK3RbUl0uc3Ryb2tlKydcIiAnOmUrPSdzdHJva2U9XCJub25lXCIgJyksdm9pZCAwIT09dFtSXS5maWxsJiYoZSs9J2ZpbGw9XCInKyh0W1JdLmZpbGw/dFtSXS5maWxsOlwibm9uZVwiKSsnXCIgJyksdm9pZCAwIT09dFtSXS5maWxsb3BhY2l0eSYmKGUrPSdmaWxsLW9wYWNpdHk9XCInK3RbUl0uZmlsbG9wYWNpdHkrJ1wiICcpLGUrPVwiPlwiLHRbUl0udHlwZSl7Y2FzZVwicGF0aFwiOmUrPVwiPC9wYXRoPlwiO2JyZWFrO2Nhc2VcImNpcmNsZVwiOmUrPVwiPC9jaXJjbGU+XCI7YnJlYWs7Y2FzZVwidGV4dFwiOmUrPVN0cmluZyh0W1JdLnRleHQpLnJlcGxhY2UoLyYvZyxcIiZhbXA7XCIpLnJlcGxhY2UoLzwvZyxcIiZsdDtcIikucmVwbGFjZSgvPi9nLFwiJmd0O1wiKStcIjwvdGV4dD5cIjticmVhaztjYXNlXCJ0cmFuc2xhdGVcIjpjYXNlXCJyb3RhdGVcIjpjYXNlXCJzY2FsZVwiOmUrPUkuY2FsbCh0aGlzLHRbUl0uZHJhdyksZSs9XCI8L2c+XCJ9fUUrPWV9cmV0dXJuIEV9LmNhbGwodGhpcyx0aGlzLmRyYXdJbnN0cnVjdGlvbnMpLEkrPVwiPC9zdmc+XCIsdGhpcy5YTUw9SX0sRy5wcm90b3R5cGUuZ2V0QW5jaG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3ltYm9sQW5jaG9yfSxHLnByb3RvdHlwZS5nZXRDb2xvcnM9ZnVuY3Rpb24oKXt2YXIgST1cIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5jb2xvck1vZGU/dGhpcy5zdHlsZS5jb2xvck1vZGU6cy5nZXRDb2xvck1vZGUodGhpcy5zdHlsZS5jb2xvck1vZGUpLHQ9XCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUuZnJhbWVDb2xvcj90aGlzLnN0eWxlLmZyYW1lQ29sb3I6cy5nZXRDb2xvck1vZGUoXCJGcmFtZUNvbG9yXCIpLEU9XCJvYmplY3RcIj09dHlwZW9mIHRoaXMuc3R5bGUuaWNvbkNvbG9yP3RoaXMuc3R5bGUuaWNvbkNvbG9yOnMuZ2V0Q29sb3JNb2RlKFwiSWNvbkNvbG9yXCIpLFI9SSxlPXMuZ2V0Q29sb3JNb2RlKFwiQmxhY2tcIiksQT1zLmdldENvbG9yTW9kZShcIldoaXRlXCIpLEM9cy5nZXRDb2xvck1vZGUoXCJPZmZXaGl0ZVwiKSxUPXMuZ2V0Q29sb3JNb2RlKFwiTm9uZVwiKTt0aGlzLnN0eWxlLmNpdmlsaWFuQ29sb3ImJnRoaXMubWV0YWRhdGEuY2l2aWxpYW4mJihJLkZyaWVuZD1JLk5ldXRyYWw9SS5Vbmtub3duPUkuQ2l2aWxpYW4sdC5GcmllbmQ9dC5OZXV0cmFsPXQuVW5rbm93bj10LkNpdmlsaWFuLEUuRnJpZW5kPUUuTmV1dHJhbD1FLlVua25vd249RS5DaXZpbGlhbiksKHRoaXMubWV0YWRhdGEuam9rZXJ8fHRoaXMubWV0YWRhdGEuZmFrZXIpJiYoSS5GcmllbmQ9SS5Ib3N0aWxlLHQuRnJpZW5kPXQuSG9zdGlsZSxFLkZyaWVuZD1FLkhvc3RpbGUpLFwiXCIhPXRoaXMuc3R5bGUubW9ub0NvbG9yJiYodC5GcmllbmQ9dC5OZXV0cmFsPXQuSG9zdGlsZT10LlVua25vd249dC5DaXZpbGlhbj10aGlzLnN0eWxlLm1vbm9Db2xvcixlPXQsQT1JPVQpO3ZhciBTPXtmaWxsQ29sb3I6SSxmcmFtZUNvbG9yOnQsaWNvbkNvbG9yOkUsaWNvbkZpbGxDb2xvcjpSLG5vbmU6VCxibGFjazplLHdoaXRlOkF9O3JldHVybiB0aGlzLm1ldGFkYXRhLmZyYW1lP1MuZnJhbWVDb2xvcj1cIm9iamVjdFwiPT10eXBlb2YgdGhpcy5zdHlsZS5mcmFtZUNvbG9yP3RoaXMuc3R5bGUuZnJhbWVDb2xvcjplOlMuZnJhbWVDb2xvcj1ULHRoaXMubWV0YWRhdGEuZmlsbD8oUy5maWxsQ29sb3I9dGhpcy5tZXRhZGF0YS5mcmFtZXx8IXRoaXMubWV0YWRhdGEuZnJhbWUmJiF0aGlzLnN0eWxlLmljb24/STpULFMuaWNvbkNvbG9yPVwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLnN0eWxlLmljb25Db2xvcj90aGlzLnN0eWxlLmljb25Db2xvcjplLFMuaWNvbkZpbGxDb2xvcj10aGlzLm1ldGFkYXRhLmZyYW1lP0M6SSxTLndoaXRlPUMpOihTLmZpbGxDb2xvcj1ULFMuZnJhbWVDb2xvcj10aGlzLm1ldGFkYXRhLmZyYW1lP3Q6VCxTLmljb25Db2xvcj10LFMuaWNvbkZpbGxDb2xvcj1ULHRoaXMubWV0YWRhdGEuZnJhbWV8fHRoaXMubWV0YWRhdGEuZmlsbHx8dGhpcy5zdHlsZS5pY29ufHwoUy5mcmFtZUNvbG9yPWUsUy5maWxsQ29sb3I9ZSkpLFN9LEcucHJvdG90eXBlLmdldE9jdGFnb25BbmNob3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vY3RhZ29uQW5jaG9yfSxHLnByb3RvdHlwZS5nZXRNZXRhZGF0YT1mdW5jdGlvbigpe3ZhciBJPXthY3Rpdml0eTohMSxhZmZpbGlhdGlvbjpcInVuZGVmaW5lZFwiLGJhc2VBZmZpbGF0aW9uOlwiXCIsYmFzZURpbWVuc2lvbjpcIlwiLGJhc2VHZW9tZXRyeTp7ZzpcIlwiLGJib3g6e319LGNpdmlsaWFuOiExLGNvbmRpdGlvbjpcIlwiLGNvbnRleHQ6XCJcIixkaW1lbnNpb246XCJ1bmRlZmluZWRcIixkaW1lbnNpb25Vbmtub3duOiExLGVjaGVsb246XCJcIixmYWtlcjohMSxmZW5pbnREdW1teTohMSxmaWxsOnRoaXMuc3R5bGUuZmlsbCxmcmFtZTp0aGlzLnN0eWxlLmZyYW1lLGZ1bmN0aW9uaWQ6XCJcIixoZWFkcXVhcnRlcnM6ITEsaW5zdGFsbGF0aW9uOiExLGpva2VyOiExLG1vYmlsaXR5OlwiXCIsbm90cHJlc2VudDpcIlwiLG51bWJlclNJREM6ITEsc3BhY2U6ITEsU1REMjUyNTpzLl9TVEQyNTI1LHRhc2tGb3JjZTohMSx1bml0OiExfSx0PXtjb250ZXh0OltcIlJlYWxpdHlcIixcIkV4ZXJjaXNlXCIsXCJTaW11bGF0aW9uXCJdLHN0YXR1czpbXCJQcmVzZW50XCIsXCJQbGFubmVkXCIsXCJGdWxseUNhcGFibGVcIixcIkRhbWFnZWRcIixcIkRlc3Ryb3llZFwiLFwiRnVsbFRvQ2FwYWNpdHlcIl0sZWNoZWxvbk1vYmlsaXR5OnsxMTpcIlRlYW0vQ3Jld1wiLDEyOlwiU3F1YWRcIiwxMzpcIlNlY3Rpb25cIiwxNDpcIlBsYXRvb24vZGV0YWNobWVudFwiLDE1OlwiQ29tcGFueS9iYXR0ZXJ5L3Ryb29wXCIsMTY6XCJCYXR0YWxpb24vc3F1YWRyb25cIiwxNzpcIlJlZ2ltZW50L2dyb3VwXCIsMTg6XCJCcmlnYWRlXCIsMjE6XCJEaXZpc2lvblwiLDIyOlwiQ29ycHMvTUVGXCIsMjM6XCJBcm15XCIsMjQ6XCJBcm15IEdyb3VwL2Zyb250XCIsMjU6XCJSZWdpb24vVGhlYXRlclwiLDI2OlwiQ29tbWFuZFwiLDMxOlwiV2hlZWxlZCBsaW1pdGVkIGNyb3NzIGNvdW50cnlcIiwzMjpcIldoZWVsZWQgY3Jvc3MgY291bnRyeVwiLDMzOlwiVHJhY2tlZFwiLDM0OlwiV2hlZWxlZCBhbmQgdHJhY2tlZCBjb21iaW5hdGlvblwiLDM1OlwiVG93ZWRcIiwzNjpcIlJhaWxcIiwzNzpcIlBhY2sgYW5pbWFsc1wiLDQxOlwiT3ZlciBzbm93IChwcmltZSBtb3ZlcilcIiw0MjpcIlNsZWRcIiw1MTpcIkJhcmdlXCIsNTI6XCJBbXBoaWJpb3VzXCIsNjE6XCJTaG9ydCB0b3dlZCBhcnJheVwiLDYyOlwiTG9uZyB0b3dlZCBBcnJheVwiLDcxOlwiTGVhZGVyIEluZGl2aWR1YWxcIiw3MjpcIkRlcHV0eSBJbmRpdmlkdWFsXCJ9LGFmZmlsaWF0aW9uOltcIkhvc3RpbGVcIixcIkZyaWVuZFwiLFwiTmV1dHJhbFwiLFwiVW5rbm93blwiXSxkaW1lbnNpb246W1wiQWlyXCIsXCJHcm91bmRcIixcIlNlYVwiLFwiU3Vic3VyZmFjZVwiXX07cmV0dXJuIEkuY29udGV4dD10LmNvbnRleHRbMF0sdGhpcy5zdHlsZS5zdGFuZGFyZCYmKEkuU1REMjUyNT1cIkFQUDZcIiE9dGhpcy5zdHlsZS5zdGFuZGFyZCksXCJcIiE9dGhpcy5zdHlsZS5tb25vQ29sb3ImJihJLmZpbGw9ITEpLHRoaXMub3B0aW9ucy5zaWRjPVN0cmluZyh0aGlzLm9wdGlvbnMuc2lkYykucmVwbGFjZSgvXFwqL2csXCItXCIpLnJlcGxhY2UoLyAvZyxcIlwiKSxJLm51bWJlclNJREM9IWlzTmFOKHRoaXMub3B0aW9ucy5zaWRjKSxJLm51bWJlclNJREM/XCJmdW5jdGlvblwiPT10eXBlb2Ygcy5fZ2V0TWV0YWRhdGEubnVtYmVyP0k9cy5fZ2V0TWV0YWRhdGEubnVtYmVyLmNhbGwodGhpcyxzLEksdCk6Y29uc29sZS53YXJuKFwibXMuX2dldE1ldGFkYXRhLm51bWJlcigpIGlzIG5vdCBwcmVzZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGxvYWQgZnVuY3Rpb25hbGl0eSBmb3IgbnVtYmVyIGJhc2VkIFNJRENzXCIpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHMuX2dldE1ldGFkYXRhLmxldHRlcj9JPXMuX2dldE1ldGFkYXRhLmxldHRlci5jYWxsKHRoaXMscyxJLHQpOmNvbnNvbGUud2FybihcIm1zLl9nZXRNZXRhZGF0YS5sZXR0ZXIoKSBpcyBub3QgcHJlc2VudCwgeW91IHdpbGwgbmVlZCB0byBsb2FkIGZ1bmN0aW9uYWxpdHkgZm9yIGxldHRlciBiYXNlZCBTSURDc1wiKSxzLl9zeW1ib2xHZW9tZXRyaWVzLmhhc093blByb3BlcnR5KEkuZGltZW5zaW9uK0kuYWZmaWxpYXRpb24pP0kuYmFzZUdlb21ldHJ5PXMuX3N5bWJvbEdlb21ldHJpZXNbSS5kaW1lbnNpb24rSS5hZmZpbGlhdGlvbl06SS5iYXNlR2VvbWV0cnkuYmJveD1uZXcgcy5CQm94LHRoaXMuc3R5bGUuZnJhbWV8fHRoaXMuc3R5bGUuaWNvbnx8KEkuYmFzZUdlb21ldHJ5PXMuX3N5bWJvbEdlb21ldHJpZXMuUG9zaXRpb25NYXJrZXIpLEl9LEcucHJvdG90eXBlLmdldE9wdGlvbnM9ZnVuY3Rpb24oSSl7dmFyIHQsRT17fTtmb3IodCBpbiB0aGlzLm9wdGlvbnMpdGhpcy5vcHRpb25zLmhhc093blByb3BlcnR5KHQpJiYoRVt0XT10aGlzLm9wdGlvbnNbdF0pO2lmKEl8fHZvaWQgMD09PUkpZm9yKHQgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KHQpJiYoRVt0XT10aGlzLnN0eWxlW3RdKTtyZXR1cm4gRX0sRy5wcm90b3R5cGUuZ2V0U2l6ZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLndpZHRoJiZ2b2lkIDAhPT10aGlzLmhlaWdodHx8dGhpcy51cGRhdGVTeW1ib2woKSx7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9fSxHLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbigpe3ZhciBJLHQ9e307Zm9yKEkgaW4gdGhpcy5zdHlsZSl0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KEkpJiYodFtJXT10aGlzLnN0eWxlW0ldKTtyZXR1cm4gdH0sRy5wcm90b3R5cGUuaXNWYWxpZD1mdW5jdGlvbihJKXt2YXIgdD0tMT09SlNPTi5zdHJpbmdpZnkodGhpcy5kcmF3SW5zdHJ1Y3Rpb25zKS5pbmRleE9mKFwibnVsbFwiKTtyZXR1cm4gST97YWZmaWxpYXRpb246dGhpcy5tZXRhZGF0YS5hZmZpbGlhdGlvbixkaW1lbnNpb246dGhpcy5tZXRhZGF0YS5kaW1lbnNpb24sZGltZW5zaW9uVW5rbm93bjp0aGlzLm1ldGFkYXRhLmRpbWVuc2lvblVua25vd24sZHJhd0luc3RydWN0aW9uczp0LGljb246dGhpcy52YWxpZEljb24sbW9iaWxpdHk6bnVsbCE9dGhpcy5tZXRhZGF0YS5tb2JpbGl0eX06IShcInVuZGVmaW5lZFwiPT10aGlzLm1ldGFkYXRhLmFmZmlsaWF0aW9ufHxcInVuZGVmaW5lZFwiPT10aGlzLm1ldGFkYXRhLmRpbWVuc2lvbiYmIXRoaXMubWV0YWRhdGEuY29udHJvbE1lYXN1cmUpJiZ0JiZ0aGlzLnZhbGlkSWNvbiYmbnVsbCE9dGhpcy5tZXRhZGF0YS5tb2JpbGl0eX0sRy5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbigpe3ZhciBJO2ZvcihJPTA7STxhcmd1bWVudHMubGVuZ3RoO0krKyl7dmFyIHQ9YXJndW1lbnRzW0ldO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgRSBpbiB0KXQuaGFzT3duUHJvcGVydHkoRSkmJihcIlNJRENcIiE9PUU/dGhpcy5zdHlsZS5oYXNPd25Qcm9wZXJ0eShFKT90aGlzLnN0eWxlW0VdPXRbRV06dGhpcy5vcHRpb25zW0VdPXRbRV06dGhpcy5vcHRpb25zLnNpZGM9dFtFXSk7ZWxzZSB0aGlzLm9wdGlvbnMuc2lkYz10fWZvcihJIGluIHRoaXMudmFsaWRJY29uPSEwLHRoaXMubWV0YWRhdGE9dGhpcy5nZXRNZXRhZGF0YSgpLHRoaXMuY29sb3JzPXRoaXMuZ2V0Q29sb3JzKCksdGhpcy5kcmF3SW5zdHJ1Y3Rpb25zPVtdLHRoaXMuYmJveD1uZXcgcy5CQm94LHMuX3N5bWJvbFBhcnRzKWlmKHMuX3N5bWJvbFBhcnRzLmhhc093blByb3BlcnR5KEkpKXt2YXIgUj1zLl9zeW1ib2xQYXJ0c1tJXS5jYWxsKHRoaXMscyksZT0wPFIucHJlLmxlbmd0aHx8MDxSLnBvc3QubGVuZ3RoO2lmKFIucHJlKXtpZigwPFIucHJlLmxlbmd0aCl7Zm9yKDsxPT1SLnByZS5sZW5ndGg7KVIucHJlPVIucHJlWzBdOzAhPVIucHJlLmxlbmd0aCYmKHRoaXMuZHJhd0luc3RydWN0aW9ucz1bXS5jb25jYXQoUi5wcmUsdGhpcy5kcmF3SW5zdHJ1Y3Rpb25zKSl9aWYoMDxSLnBvc3QubGVuZ3RoKXtmb3IoOzE9PVIucG9zdC5sZW5ndGgmJihSLnBvc3Q9Ui5wb3N0WzBdLHZvaWQgMCE9PVIucG9zdCk7KTt2b2lkIDAhPT1SLnBvc3QmJjA9PVIucG9zdC5sZW5ndGh8fCh0aGlzLmRyYXdJbnN0cnVjdGlvbnM9dGhpcy5kcmF3SW5zdHJ1Y3Rpb25zLmNvbmNhdChSLnBvc3QpKX1cIm9iamVjdFwiPT10eXBlb2YgUi5iYm94JiZlJiZ0aGlzLmJib3gubWVyZ2UoUi5iYm94KX19dGhpcy5zdHlsZS5wYWRkaW5nJiYodGhpcy5iYm94LngxLT10aGlzLnN0eWxlLnBhZGRpbmcsdGhpcy5iYm94LngyKz10aGlzLnN0eWxlLnBhZGRpbmcsdGhpcy5iYm94LnkxLT10aGlzLnN0eWxlLnBhZGRpbmcsdGhpcy5iYm94LnkyKz10aGlzLnN0eWxlLnBhZGRpbmcpO3ZhciBBPXt4OjEwMCx5OjEwMH07aWYodGhpcy5vY3RhZ29uQW5jaG9yPXt4OihBLngtdGhpcy5iYm94LngxK3BhcnNlRmxvYXQodGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrcGFyc2VGbG9hdCh0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCkpKnRoaXMuc3R5bGUuc2l6ZS8xMDAseTooQS55LXRoaXMuYmJveC55MStwYXJzZUZsb2F0KHRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgpK3BhcnNlRmxvYXQodGhpcy5zdHlsZS5vdXRsaW5lV2lkdGgpKSp0aGlzLnN0eWxlLnNpemUvMTAwfSx0aGlzLm1ldGFkYXRhLmhlYWRxdWFydGVycyl7dmFyIEM9dGhpcy5zdHlsZS5ocVN0YWZmTGVuZ3RofHxzLl9ocVN0YWZmTGVuZ3RoO0E9e3g6dGhpcy5tZXRhZGF0YS5iYXNlR2VvbWV0cnkuYmJveC54MSx5OnRoaXMubWV0YWRhdGEuYmFzZUdlb21ldHJ5LmJib3gueTIrQ319aWYodGhpcy5zdHlsZS5zcXVhcmUpe3ZhciBUPU1hdGgubWF4KEEueC10aGlzLmJib3gueDEsdGhpcy5iYm94LngyLUEueCksUz1NYXRoLm1heChBLnktdGhpcy5iYm94LnkxLHRoaXMuYmJveC55Mi1BLnkpLE49TWF0aC5tYXgoVCxTKTt0aGlzLmJib3gueDE9QS54LU4sdGhpcy5iYm94LnkxPUEueS1OLHRoaXMuYmJveC54Mj1BLngrTix0aGlzLmJib3gueTI9QS55K059cmV0dXJuIHRoaXMuYmFzZVdpZHRoPXRoaXMuYmJveC53aWR0aCgpK051bWJlcigyKnRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgpK051bWJlcigyKnRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSx0aGlzLmJhc2VIZWlnaHQ9dGhpcy5iYm94LmhlaWdodCgpK051bWJlcigyKnRoaXMuc3R5bGUuc3Ryb2tlV2lkdGgpK051bWJlcigyKnRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSx0aGlzLndpZHRoPXRoaXMuYmFzZVdpZHRoKnRoaXMuc3R5bGUuc2l6ZS8xMDAsdGhpcy5oZWlnaHQ9dGhpcy5iYXNlSGVpZ2h0KnRoaXMuc3R5bGUuc2l6ZS8xMDAsdGhpcy5zeW1ib2xBbmNob3I9e3g6KEEueC10aGlzLmJib3gueDErcGFyc2VGbG9hdCh0aGlzLnN0eWxlLnN0cm9rZVdpZHRoKStwYXJzZUZsb2F0KHRoaXMuc3R5bGUub3V0bGluZVdpZHRoKSkqdGhpcy5zdHlsZS5zaXplLzEwMCx5OihBLnktdGhpcy5iYm94LnkxK3BhcnNlRmxvYXQodGhpcy5zdHlsZS5zdHJva2VXaWR0aCkrcGFyc2VGbG9hdCh0aGlzLnN0eWxlLm91dGxpbmVXaWR0aCkpKnRoaXMuc3R5bGUuc2l6ZS8xMDB9LHMuX2F1dG9WYWxpZGF0aW9uJiYodGhpcy5pc1ZhbGlkKCl8fChjb25zb2xlLndhcm4oXCJFcnJvciBpbiBzeW1ib2w6IFwiK3RoaXMub3B0aW9ucy5zaWRjKSxjb25zb2xlLndhcm4odGhpcy5pc1ZhbGlkKCEwKSkpKSx0aGlzfSxHLnByb3RvdHlwZS50b0RhdGFVUkw9ZnVuY3Rpb24oKXtyZXR1cm5cImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsXCIrd2luZG93LmJ0b2EodGhpcy5hc1NWRygpKX0scy5TeW1ib2w9Rzt2YXIgTD17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2ldLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLVAtLS0tLS0tXCJdPVtdLElbXCJTLVAtUy0tLS0tXCJdPVtFW1wiU1AuSS5GRi5TQVRFTExJVEVcIl1dLElbXCJTLVAtVi0tLS0tXCJdPVtFW1wiU1AuSS5GRi5DUkVXRUQgU1BBQ0UgVkVISUNMRVwiXV0sSVtcIlMtUC1ULS0tLS1cIl09W0VbXCJTUC5JLkZGLlNQQUNFIFNUQVRJT05cIl1dLElbXCJTLVAtTC0tLS0tXCJdPVtFW1wiU1AuSS5TUEFDRSBMQVVOQ0ggVkVISUNMRVwiXV19fTtmdW5jdGlvbiBQKEksdCxFLFIsZSxBKXt2YXIgQz10LmZyYW1lLFQ9dC5hZmZpbGlhdGlvbnx8XCJGcmllbmRcIixTPXQubnVtYmVyU0lEQyxOPUUuaWNvbkNvbG9yW1RdLE89RS5pY29uRmlsbENvbG9yW1RdLEc9RS5ibGFja1tUXSxvPXt9O2Zvcih2YXIgTSBpbiBvW1wiQVIuSS5NSUxJVEFSWVwiXT1hKFwiTUlMXCIpLG9bXCJBUi5JLkNJVklMSUFOXCJdPWEoXCJDSVZcIiksb1tcIkFSLkkuQ0lWSUxJQU5cIl0uZmlsbD1SfHxTP086IUMmJk8sb1tcIkFSLkkuQ0lWSUxJQU5cIl0uc3Ryb2tlPUcsb1tcIkFSLkkuQ0lWSUxJQU5cIl0uc3Ryb2tld2lkdGg9MyxvW1wiQVIuSS5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDEwMCBMMTMwLDg4IGMxNSwwIDE1LDI0IDAsMjQgTDEwMCwxMDAgNzAsMTEyIGMtMTUsMCAtMTUsLTI0IDAsLTI0IFpcIn0sb1tcIkFSLkkuQ0lWSUxJQU4gRklYRUQgV0lOR1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEwMCBMMTMwLDg4IGMxNSwwIDE1LDI0IDAsMjQgTDEwMCwxMDAgNzAsMTEyIGMtMTUsMCAtMTUsLTI0IDAsLTI0IFpcIn0sb1tcIkFSLkkuRkYuQ0lWSUxJQU4gRklYRUQgV0lOR1wiXT17dHlwZTpcInBhdGhcIixzdHJva2U6RyxkOlwiTTYyLDgwIGwzMCwwIDAsLTEwIDE2LDAgMCwxMCAzMCwwIDAsMTUgLTMwLDAgMCwyNSAxMCwwIDAsNSAtMzYsMCAwLC01IDEwLDAgMCwtMjUgLTMwLDAgWiBNOTUsNzAgbDAsLTUgMTAsMCAwLDVcIixmaWxsOiEhUiYmT30sb1tcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk02MCw4NSBsNDAsMTUgNDAsLTE1IDAsMzAgLTQwLC0xNSAtNDAsMTUgelwifSxvW1wiQVIuSS5DSVZJTElBTiBST1RBUlkgV0lOR1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxkOlwiTTYwLDg1IGw0MCwxNSA0MCwtMTUgMCwzMCAtNDAsLTE1IC00MCwxNSB6XCJ9LG9bXCJBUi5JLkZGLkNJVklMSUFOIFJPVEFSWSBXSU5HXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6RyxkOlwiTTgwLDcwIGwxMCwxMCBNMTIwLDExMCBsLTEwLC0xMCBNODAsMTEwIGwxMCwtMTAgTTEyMCw3MCBsLTEwLDEwIE0xMDAsMTE1IGwwLDIwIE05NSwxMzUgbDEwLDBcIixmaWxsOiExfSx7dHlwZTpcInBhdGhcIixzdHJva2U6RyxmaWxsOiEhUiYmTyxkOlwibSAxMTMsOTAgYyAtMC4zLDguOCAtMS45LDIwLjMgLTEwLjgsMjQuNiAtNy43LDIgLTEyLjMsLTcuMSAtMTMuOCwtMTMuMyAtMi42LC0xMS41IC0yLjMsLTI2IDYuOSwtMzQuNiA2LjAsLTQuOSAxMy4xLDEuOSAxNC45LDcuOCAyLDQuOSAyLjgsMTAuMiAyLjgsMTUuNSB6XCJ9XSxvW1wiQVIuSS5NSUxJVEFSWSBCQUxMT09OXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTo5NSxyOjE1fSx7dHlwZTpcInBhdGhcIixkOlwiTTk1LDExMCBsMCwxMCAxMCwwIDAsLTEwIHpcIn1dLG9bXCJBUi5JLkZGLk1JTElUQVJZIEJBTExPT05cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNOTAsMTE1IGwyMCwwIDAsMjAgLTIwLDAgelwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTo5MCxyOjM1fV0sb1tcIkFSLkkuQ0lWSUxJQU4gQkFMTE9PTlwiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxjeDoxMDAsY3k6OTUscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohKCFSJiYhUykmJk8sc3Ryb2tlOkcsZDpcIk05NSwxMTAgbDAsMTAgMTAsMCAwLC0xMCB6XCJ9XSxvW1wiQVIuSS5GRi5DSVZJTElBTiBCQUxMT09OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxkOlwiTTkwLDEyNSBsMjAsMCAwLDEwIC0yMCwwIHpcIn0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxjeDoxMDAsY3k6OTAscjozNX1dLG9bXCJBUi5JLk1JTElUQVJZIEFJUlNISVBcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTEwLDExMCAxMCwxMCAxMCwwIC01LC0xNSBtIDAsLTEwIDUsLTE1IC0xMCwwIC0xMCwxMCBtIDE3LjIsMTAgYyAwLDYuMSAtMTIuMiwxMS4xIC0yNy4yLDExLjEgLTE1LDAgLTI3LjIsLTUgLTI3LjIsLTExLjEgMCwtNi4xIDEyLjIsLTExLjEgMjcuMiwtMTEuMSAxNSwwIDI3LjIsNSAyNy4yLDExLjEgelwifSxvW1wiQVIuSS5DSVZJTElBTiBBSVJTSElQXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGQ6XCJtIDExMCwxMTAgMTAsMTAgMTAsMCAtNSwtMTUgbSAwLC0xMCA1LC0xNSAtMTAsMCAtMTAsMTAgbSAxNy4yLDEwIGMgMCw2LjEgLTEyLjIsMTEuMSAtMjcuMiwxMS4xIC0xNSwwIC0yNy4yLC01IC0yNy4yLC0xMS4xIDAsLTYuMSAxMi4yLC0xMS4xIDI3LjIsLTExLjEgMTUsMCAyNy4yLDUgMjcuMiwxMS4xIHpcIn0sb1tcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNjAsODQgNDAsMjAgNDAsLTIwIDAsOCAtNDAsMjUgLTQwLC0yNSB6XCIsc3Ryb2tlOiExfSxvW1wiQVIuSS5BSVIgREVDT1lcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk02NSw5NSBsMTUsLTE1IDAsMzAgWiBNOTIuNSw5NSBsMTUsLTE1IDAsMzAgWiBNMTIwLDk1IGwxNSwtMTUgMCwzMCBaIE02NSwxMjAgbDcwLDAgMCwtNSAtNzAsMCBaXCJ9LG9bXCJTVS5JQy5BSVIgREVDT1kgRFN5bWJvbFwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA4NSA4MSBMIDY1IDk4IEwgODUgMTE5IEwgODUgODEgeiBNIDExMCA4MSBMIDkwIDk4IEwgMTEwIDExOSBMIDExMCA4MSB6IE0gMTM1IDgxIEwgMTE1IDk4IEwgMTM1IDExOSBMIDEzNSA4MSB6XCJ9LG9bXCJBUi5JLk1FRElDQUwgRVZBQ1VBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTkzLDgzIGwxNCwwIDAsMTAgMTAsMCAwLDE0IC0xMCwwIDAsMTAgLTE0LDAgMCwtMTAgLTEwLDAgMCwtMTQgMTAsMCBaXCJ9LG9bXCJBUi5JLkFUVEFDSy9TVFJJS0VcIl09YShcIkFcIiksb1tcIkFSLkkuQk9NQkVSXCJdPWEoXCJCXCIpLG9bXCJBUi5JLkNBUkdPXCJdPWEoXCJDXCIpLG9bXCJBUi5JLkVTQ09SVFwiXT1hKFwiRVwiKSxvW1wiQVIuSS5GSUdIVEVSXCJdPWEoXCJGXCIpLG9bXCJBUi5JLkZJR0hURVIgSU5URVJDRVBUT1JcIl09YShcIklcIiksb1tcIkFSLkkuSkFNTUVSIC8gRUxFQ1RST05JQyBDT1VOVEVSLU1FQVNVUkVTXCJdPWEoXCJKXCIpLG9bXCJBUi5JLlRBTktFUlwiXT1hKFwiS1wiKSxvW1wiQVIuSS5QQVRST0xcIl09YShcIlBcIiksb1tcIkFSLkkuUkVDT05OQUlTU0FOQ0VcIl09YShcIlJcIiksb1tcIkFSLkkuMjUyNSBQSE9UT0dSQVBISUNcIl09YShcIlhcIiksb1tcIkFSLkkuVFJBSU5FUlwiXT1hKFwiVFwiKSxvW1wiQVIuSS5VVElMSVRZXCJdPWEoXCJVXCIpLG9bXCJBUi5JLlZTVE9MXCJdPWEoUiYmIVM/XCJMXCI6XCJWXCIpLG9bXCJBUi5JLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXT1hKFImJiFTP1wiRFwiOlwiQUNQXCIpLG9bXCJBUi5JLkFJUkJPUk5FIEVBUkxZIFdBUk5JTkdcIl09YShSJiYhUz9cIldcIjpcIkFFV1wiKSxvW1wiQVIuSS5BTlRJU1VSRkFDRSBXQVJGQVJFXCJdPWEoUiYmIVM/XCJOXCI6XCJBU1VXXCIpLG9bXCJBUi5JLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXT1hKFImJiFTP1wiU1wiOlwiQVNXXCIpLG9bXCJBUi5JLkNPTU1VTklDQVRJT05TXCJdPWEoUiYmIVM/XCJZXCI6XCJDT01cIiksb1tcIkFSLkkuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdPWEoXCJDU0FSXCIpLG9bXCJBUi5JLkVMRUNUUk9OSUMgU1VQUE9SVCBNRUFTVVJFU1wiXT1hKFI/XCJaXCI6XCJFU01cIiksb1tcIkFSLkkuR09WRVJOTUVOVFwiXT1hKFwiR09WXCIpLG9bXCJBUi5JLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdPWEoXCJNQ01cIiksb1tcIkFSLkkuUEVSU09OTkVMIFJFQ09WRVJZXCJdPWEoUj9cIkhcIjpcIlBST1wiKSxvW1wiQVIuSS5QQVNTRU5HRVJcIl09YShcIlBYXCIpLG9bXCJBUi5JLlNFQVJDSCBBTkQgUkVTQ1VFXCJdPWEoXCJTQVJcIiksb1tcIkFSLkkuU1VQUkVTU0lPTiBPRiBFTkVNWSBBSVIgREVGRU5DRVwiXT1hKFwiU0VBRFwiKSxvW1wiQVIuSS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdPWEoXCJTT0ZcIiksb1tcIkFSLkkuVUxUUkEgTElHSFRcIl09YShcIlVMXCIpLG9bXCJBUi5JLlZJUFwiXT1hKFwiVklQXCIpLG9bXCJBUi5JLkZGLk1JTElUQVJZIEZJWEVEIFdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTkuMiw1OC4yIGMgLTMsMC44IC0yLjUsNS44IC0yLjUsNS44IGwgLTAuMywxNiAtMzcuMiwzNi41IDEuMyw0LjYgTCA5Ni43LDk2LjYgOTcsMTI4LjYgbCAtOC41LDguMiAwLDQuNiA5LjMsLTQuMiBjIDAuNywwLjYgMS44LDEuNyAxLjgsMS43IDAsMCAxLjIsLTEuMSAxLjksLTEuNyBsIDkuMyw0LjIgMCwtNC42IC04LjUsLTguMiAwLjMsLTMyIDM2LjIsMjQuNSAxLjMsLTQuNiAtMzcuMiwtMzYuNSAtMC4zLC0xNiBjIDAsMCAwLjUsLTUgLTIuNSwtNS44IC0wLjQsLTAuMSAtMC43LC0wLjEgLTEuMSwwIHpcIixzdHJva2U6ITF9LG9bXCJBUi5JLkZJWEVELVdJTkcgRFN5bWJvbFwiXT17dHlwZTpcInBhdGhcIixkOlI/XCJNIDk5LjQgODAuOCBDIDk3LjkgODEuMSA5OC4xIDgzLjQgOTguMSA4My40IEwgOTggOTAuNyBMIDc4LjYgMTA3LjQgTCA3OS4zIDEwOS40IEwgOTguMSA5OC4zIEwgOTguMyAxMTIuOSBMIDkzLjkgMTE2LjYgTCA5My45IDExOC43IEwgOTguOCAxMTYuOCBDIDk5LjEgMTE3IDk5LjcgMTE3LjUgOTkuNyAxMTcuNSBDIDk5LjcgMTE3LjUgMTAwLjQgMTE3IDEwMC43IDExNi44IEwgMTA1LjYgMTE4LjcgTCAxMDUuNiAxMTYuNiBMIDEwMS4xIDExMi45IEwgMTAxLjMgOTguMyBMIDEyMC4yIDEwOS40IEwgMTIwLjkgMTA3LjQgTCAxMDEuNSA5MC43IEwgMTAxLjMgODMuNCBDIDEwMS4zIDgzLjQgMTAxLjYgODEuMSAxMDAgODAuOCBDIDk5LjggODAuOCA5OS42IDgwLjggOTkuNCA4MC44IHpcIjpcIk0xMDAsMTAwIEwxMzAsODggYzE1LDAgMTUsMjQgMCwyNCBMMTAwLDEwMCA3MCwxMTIgYy0xNSwwIC0xNSwtMjQgMCwtMjQgWlwifSxvW1wiQVIuSS5DSVZJTElBTiBGSVhFRC1XSU5HIERTeW1ib2xcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohKCFSJiYhUykmJk8sc3Ryb2tlOkcsZDpSP1wibSA3NS4xLDkwLjMgMTkuNiwwIDAsLTYuNSAxMC41LDAgMCw2LjUgMTkuNiwwIDAsOS43IC0xOS42LDAgMCwxNi4yIDYuNSwwIDAsMy4yIC0yMy42LDAgMCwtMy4yIDYuNSwwIDAsLTE2LjIgLTE5LjYsMCB6IG0gMjEuNiwtNi41IDAsLTMuMiA2LjUsMCAwLDMuMlwiOlwiTTEwMCwxMDAgTDEzMCw4OCBjMTUsMCAxNSwyNCAwLDI0IEwxMDAsMTAwIDcwLDExMiBjLTE1LDAgLTE1LC0yNCAwLC0yNCBaXCJ9LG9bXCJBUi5JLkZJR0hURVIvQk9NQkVSXCJdPWEoXCJGL0JcIiksb1tcIkFSLkkuRUxFQ1RST05JQyBTVVBQT1JUXCJdPWEoUj9cIkVTXCI6XCJFU01cIiksb1tcIkFSLkkuUEVSU09OTkVMIFJFQ09WRVJZIERTeW1ib2xcIl09YShcIlBSXCIpLG9bXCJBUi5JLlBIT1RPR1JBUEhJQyBSRUNPTk5BSVNTQU5DRVwiXT1hKFwiUEhcIiksb1tcIkFSLkkuRUxFQ1RST05JQyBBVFRBQ0sgKEVBKVwiXT1hKFwiRUFcIiksb1tcIkFSLkkuVkVSVElDQUwtVEFLRU9GRiBVQVYgKFZULVVBVilcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsODUgMzAsMTAgMzAsLTEwIDAsLTUgLTMwLDUgLTMwLC01IHogbSAtMTAsNSA0MCwxNSA0MCwtMTUgMCwzMCAtNDAsLTE1IC00MCwxNSB6XCJ9LG9bXCJBUi5JLlRFVEhFUkVEIExJR0hURVIgVEhBTiBBSVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gNzUsMTEwIDg1LDk1IG0gLTUsMjAgYyAwLDIuOCAtMi4yLDUgLTUsNSAtMi44LDAgLTUsLTIuMiAtNSwtNSAwLC0yLjggMi4yLC01IDUsLTUgMi44LDAgNSwyLjIgNSw1IHogbSAxNSwtNiAwLDExIDEwLDAgMCwtMTEgbSAxMCwtMTQgYyAwLDguMyAtNi43LDE1IC0xNSwxNSAtOC4zLDAgLTE1LC02LjcgLTE1LC0xNSAwLC04LjMgNi43LC0xNSAxNSwtMTUgOC4zLDAgMTUsNi43IDE1LDE1IHpcIn0sb1tcIkFSLkkuQ0lWSUxJQU4gVEVUSEVSRUQgTElHSFRFUiBUSEFOIEFJUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxkOlwiTSA3NSwxMTAgODUsOTUgbSAtNSwyMCBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgeiBtIDE1LC02IDAsMTEgMTAsMCAwLC0xMSBtIDEwLC0xNCBjIDAsOC4zIC02LjcsMTUgLTE1LDE1IC04LjMsMCAtMTUsLTYuNyAtMTUsLTE1IDAsLTguMyA2LjcsLTE1IDE1LC0xNSA4LjMsMCAxNSw2LjcgMTUsMTUgelwifSxvW1wiQVIuSS5DSVZJTElBTiBVTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiEoIVImJiFTKSYmTyxzdHJva2U6RyxkOlwibSA2MCw4NCA0MCwyMCA0MCwtMjAgMCw4IC00MCwyNSAtNDAsLTI1IHpcIn0sb1tcIkFSLkkuV0VBUE9OXCJdPWEoXCJXUE5cIiksb1tcIkFSLkkuVU5ERVJXQVRFUiBERUNPWSBEU3ltYm9sXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDg1IDgxIEwgNjUgOTggTCA4NSAxMTkgTCA4NSA4MSB6IE0gMTEwIDgxIEwgOTAgOTggTCAxMTAgMTE5IEwgMTEwIDgxIHogTSAxMzUgODEgTCAxMTUgOTggTCAxMzUgMTE5IEwgMTM1IDgxIHpcIn0sb1tcIkFSLkkuQk9NQlwiXT1hKFwiQk9NQlwiKSxvW1wiQVIuSS5NQU5VQUwgVFJBQ0tcIl09YShcIk1BTlwiKSxvW1wiQUlSLk0xLkFUVEFDS1wiXT1sKFwiQVwiKSxvW1wiQUlSLk0xLkJPTUJFUlwiXT1sKFwiQlwiKSxvW1wiQUlSLk0xLkNBUkdPXCJdPWwoXCJDXCIpLG9bXCJBSVIuTTEuRklHSFRFUlwiXT1sKFwiRlwiKSxvW1wiQUlSLk0xLklOVEVSQ0VQVE9SXCJdPWwoXCJJXCIpLG9bXCJBSVIuTTEuVEFOS0VSXCJdPWwoXCJLXCIpLG9bXCJBSVIuTTEuVVRJTElUWVwiXT1sKFwiVVwiKSxvW1wiQUlSLk0xLlZTVE9MXCJdPWwoUiYmIVM/XCJMXCI6XCJWXCIpLG9bXCJBSVIuTTEuUEFTU0VOR0VSXCJdPWwoXCJQWFwiKSxvW1wiQUlSLk0xLlVMVFJBIExJR0hUXCJdPWwoXCJVTFwiKSxvW1wiQUlSLk0xLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXT1sKFImJiFTP1wiRFwiOlwiQUNQXCIpLG9bXCJBSVIuTTEuQU5USVNVUkZBQ0UgV0FSRkFSRVwiXT1sKFImJiFTP1wiTlwiOlwiQVNVV1wiKSxvW1wiQUlSLk0xLkFJUkJPUk5FIEVBUkxZIFdBUk5JTkdcIl09bChSJiYhUz9cIldcIjpcIkFFV1wiKSxvW1wiQUlSLk0xLkdPVkVSTk1FTlRcIl09bChcIkdPVlwiKSxvW1wiQUlSLk0xLk1FREVWQUNcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNOTUuNSw4MCBsOSwwIDAsLTkgOSwwIDAsLTkgLTksMCAwLC05IC05LDAgMCw5IC05LDAgMCw5IDksMCBaXCJ9LG9bXCJBSVIuTTEuRVNDT1JUXCJdPWwoXCJFXCIpLG9bXCJBSVIuTTEuSU5URU5TSVZFIENBUkVcIl09bChcIklDXCIpLG9bXCJBSVIuTTEuSkFNTUVSIC8gRUxFQ1RST05JQyBDT1VOVEVSLU1FQVNVUkVTXCJdPWwoXCJKXCIpLG9bXCJBSVIuTTEuUEFUUk9MXCJdPWwoXCJQXCIpLG9bXCJBSVIuTTEuUkVDT05OQUlTU0FOQ0VcIl09bChcIlJcIiksb1tcIkFJUi5NMS5UUkFJTkVSXCJdPWwoXCJUXCIpLG9bXCJBSVIuTTEuUEhPVE9HUkFQSElDXCJdPWwoUiYmIVM/XCJYXCI6XCJQSFwiKSxvW1wiQUlSLk0xLlBFUlNPTk5FTCBSRUNPVkVSWVwiXT1sKFwiUFJcIiksb1tcIkFJUi5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl09bChSJiYhUz9cIlNcIjpcIkFTV1wiKSxvW1wiQUlSLk0xLkNPTU1VTklDQVRJT05TXCJdPWwoUiYmIVM/XCJZXCI6XCJDT01cIiksb1tcIkFJUi5NMS5FTEVDVFJPTklDIFNVUlZFSUxMQU5DRSBNRUFTVVJFU1wiXT1sKFI/XCJaXCI6XCJFU01cIiksb1tcIkFJUi5NMS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXT1sKFwiTUNNXCIpLG9bXCJBSVIuTTEuU0VBUkNIIEFORCBSRVNDVUVcIl09bChcIlNBUlwiKSxvW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl09bChcIlNPRlwiKSxvW1wiQUlSLk0xLlNVUkZBQ0UgV0FSRkFSRVwiXT1sKFwiU1VXXCIpLG9bXCJBSVIuTTEuVklQXCJdPWwoXCJWSVBcIiksb1tcIkFJUi5NMS5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl09bChSJiYhUz9cIkhcIjpcIkNTQVJcIiksb1tcIkFJUi5NMS5TVVBSRVNTSU9OIE9GIEVORU1ZIEFJUiBERUZFTkNFXCJdPWwoXCJTRUFEXCIpLG9bXCJBSVIuTTEuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgwLDY1IDIwLDEzIDIwLC0xMyAwLC01IC0yMCwxMCAtMjAsLTEwIHpcIn0sb1tcIkFJUi5NMS5CT09NLU9OTFlcIl09bChcIkJcIiksb1tcIkFJUi5NMS5EUk9VR0UtT05MWVwiXT1sKFwiRFwiKSxvW1wiQUlSLk0xLkVMRUNUUk9OSUMgU1VQUE9SVCAoRVMpXCJdPWwoUj9cIkVTXCI6XCJFU01cIiksb1tcIkFJUi5NMS5ISUpBQ0tFUlwiXT1sKFwiSEpcIiksb1tcIkFJUi5NMS5DWUJFUlNQQUNFXCJdPWwoXCJDWUJcIiksb1tcIkFJUi5NMS5GSUdIVEVSL0JPTUJFUlwiXT1sKFwiRi9CXCIpLG9bXCJBSVIuTTEuRUxFQ1RST05JQyBBVFRBQ0sgKEVBKVwiXT1sKFwiRUFcIiksb1tcIkFJUi5NMS5NVUxUSU1JU1NJT05cIl09bChcIk1NXCIpLG9bXCJBSVIuTTEuSElKQUNLSU5HXCJdPWwoXCJIXCIpLG9bXCJBSVIuTTEuQVNXIEhFTE8tTEFNUFNcIl09bChcIkxQXCIpLG9bXCJBSVIuTTEuQVNXIEhFTE8gLSBTSC02MFJcIl09bChcIjYwUlwiKSxvW1wiQUlSLk0yLkhFQVZZXCJdPXIoXCJIXCIpLG9bXCJBSVIuTTIuTUVESVVNXCJdPXIoXCJNXCIpLG9bXCJBSVIuTTIuTElHSFRcIl09cihcIkxcIiksb1tcIkFJUi5NMi5CT09NLU9OTFlcIl09cihcIkJcIiksb1tcIkFJUi5NMi5EUk9VR0UtT05MWVwiXT1yKFwiRFwiKSxvW1wiQUlSLk0yLkJPT00gQU5EIERST1VHRVwiXT1yKFwiQi9EXCIpLG9bXCJBSVIuTTIuQ0xPU0UgUkFOR0VcIl09cihcIkNSXCIpLG9bXCJBSVIuTTIuU0hPUlQgUkFOR0VcIl09cihcIlNSXCIpLG9bXCJBSVIuTTIuTUVESVVNIFJBTkdFXCJdPXIoXCJNUlwiKSxvW1wiQUlSLk0yLkxPTkcgUkFOR0VcIl09cihcIkxSXCIpLG9bXCJBSVIuTTIuUEhPVE9HUkFQSElDXCJdPXIoXCJQXCIpLG9bXCJBSVIuTTIuQ1lCRVJTUEFDRVwiXT1yKFwiQ1lCXCIpLG9bXCJBSVIuTTIuRE9XTkxJTktFRFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxNDAsZm9udHNpemU6MjUsdGV4dDpcIkRMXCJ9LG9bXCJBSVIuTUlTU0lMRS5JQ09OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTAsMTM1IGwwLC0xMCA1LC01IDAsLTU1IDUsLTUgNSw1IDAsNTUgNSw1IDAsMTAgLTEwLC0xMCB6XCJ9LChSfHxTKSYmKG9bXCJBSVIuTUlTU0lMRS5JQ09OXCJdLmZpbGw9Qz9FLmZpbGxDb2xvci5Vbmtub3duOkUuaWNvbkZpbGxDb2xvci5Vbmtub3duKSxvW1wiQUlSLk1JU1NJTEUuSUMuQU5USUJBTExJU1RJQyBNSVNTSUxFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQUJNXCJ9LG9bXCJBSVIuTUlTU0lMRS5JQy5CT01CXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQk9NQlwifSxvW1wiQUlSLk1JU1NJTEUuTTEuQUlSXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJBXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMS5TVVJGQUNFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMS5TVUJTVVJGQUNFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJVXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTEuU1BBQ0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlBcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMS5BTlRJLUJBTExJU1RJQ1wiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiQVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiQlwifV0sb1tcIkFJUi5NSVNTSUxFLk0xLkJBTExJU1RJQ1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiQlwifSxvW1wiQUlSLk1JU1NJTEUuTTEuQ1JVSVNFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJDXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMS5MQU5EXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJMXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMS5JTlRFUkNFUFRPUlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiSVwifSxvW1wiQUlSLk1JU1NJTEUuTTIuQUlSXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiQVwifSxvW1wiQUlSLk1JU1NJTEUuTTIuU1VSRkFDRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlNcIn0sb1tcIkFJUi5NSVNTSUxFLk0yLlNVQlNVUkZBQ0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiVVwifV0sb1tcIkFJUi5NSVNTSUxFLk0yLlNQQUNFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlBcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMi5MQVVOQ0hFRFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkxcIn0sb1tcIkFJUi5NSVNTSUxFLk0yLk1JU1NJTEVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNXCJ9LG9bXCJBSVIuTUlTU0lMRS5NMi5QQVRSSU9UXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiUFwifSxvW1wiQUlSLk1JU1NJTEUuTTIuU1RBTkRBUkQgTUlTU0lMRSAtIDIgKFNNLTIpXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIjJcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMi5TVEFOREFSRCBNSVNTSUxFIC0gNiAoU00tNilcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiNlwifV0sb1tcIkFJUi5NSVNTSUxFLk0yLkVWT0xWRUQgU0VBIFNQQVJST1cgTUlTU0lMRSAoRVNTTSlcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifV0sb1tcIkFJUi5NSVNTSUxFLk0yLlJPTExJTkcgQUlSRlJBTUUgTUlTU0lMRSAoUkFNKVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlJcIn0sb1tcIkFJUi5NSVNTSUxFLk0yLlNIT1JUIFJBTkdFXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseTo5NSxmb250c2l6ZTozMCx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlJcIn1dLG9bXCJBSVIuTUlTU0lMRS5NMi5NRURJVU0gUkFOR0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5Ojk1LGZvbnRzaXplOjMwLHRleHQ6XCJNXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUlwifV0sb1tcIkFJUi5NSVNTSUxFLk0yLklOVEVSTUVESUFURSBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIklcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTIuTE9ORyBSQU5HRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIkxcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJSXCJ9XSxvW1wiQUlSLk1JU1NJTEUuTTIuSU5URVJDT05USU5FTlRBTFwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIklcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJDXCJ9XSxvKW8uaGFzT3duUHJvcGVydHkoTSkmJihJLmhhc093blByb3BlcnR5KE0pJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIrTSksbi5jYWxsKHRoaXMsb1tNXSxOKSxJW01dPW9bTV0pfXZhciB5PXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbUF0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIlMtQS0tLS0tLS1cIl09W10sSVtcIlMtQS1NLS0tLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZXCJdXSxJW1wiUy1BLU1GLS0tLVwiXT1bRVtcIkFSLkkuRkYuTUlMSVRBUlkgRklYRUQgV0lOR1wiXV0sSVtcIlMtQS1NRkItLS1cIl09W0VbXCJBUi5JLkJPTUJFUlwiXV0sSVtcIlMtQS1NRkYtLS1cIl09W0VbXCJBUi5JLkZJR0hURVJcIl1dLElbXCJTLUEtTUZGSS0tXCJdPVtFW1wiQVIuSS5GSUdIVEVSIElOVEVSQ0VQVE9SXCJdXSxJW1wiUy1BLU1GVC0tLVwiXT1bRVtcIkFSLkkuVFJBSU5FUlwiXV0sSVtcIlMtQS1NRkEtLS1cIl09W0VbXCJBUi5JLkFUVEFDSy9TVFJJS0VcIl1dLElbXCJTLUEtTUZMLS0tXCJdPVtFW1wiQVIuSS5WU1RPTFwiXV0sSVtcIlMtQS1NRkstLS1cIl09W0VbXCJBUi5JLlRBTktFUlwiXV0sSVtcIlMtQS1NRktCLS1cIl09W0VbXCJBUi5JLlRBTktFUlwiXSxFW1wiQUlSLk0xLkJPT00tT05MWVwiXV0sSVtcIlMtQS1NRktELS1cIl09W0VbXCJBUi5JLlRBTktFUlwiXSxFW1wiQUlSLk0xLkRST1VHRS1PTkxZXCJdXSxJW1wiUy1BLU1GQy0tLVwiXT1bRVtcIkFSLkkuQ0FSR09cIl1dLElbXCJTLUEtTUZDTC0tXCJdPVtFW1wiQVIuSS5DQVJHT1wiXSxFW1wiQUlSLk0yLkxJR0hUXCJdXSxJW1wiUy1BLU1GQ00tLVwiXT1bRVtcIkFSLkkuQ0FSR09cIl0sRVtcIkFJUi5NMi5NRURJVU1cIl1dLElbXCJTLUEtTUZDSC0tXCJdPVtFW1wiQVIuSS5DQVJHT1wiXSxFW1wiQUlSLk0yLkhFQVZZXCJdXSxJW1wiUy1BLU1GSi0tLVwiXT1bRVtcIkFSLkkuSkFNTUVSIC8gRUxFQ1RST05JQyBDT1VOVEVSLU1FQVNVUkVTXCJdXSxJW1wiUy1BLU1GTy0tLVwiXT1bRVtcIkFSLkkuTUVESUNBTCBFVkFDVUFUSU9OXCJdXSxJW1wiUy1BLU1GUi0tLVwiXT1bRVtcIkFSLkkuUkVDT05OQUlTU0FOQ0VcIl1dLElbXCJTLUEtTUZSVy0tXCJdPVtFW1wiQVIuSS5BSVJCT1JORSBFQVJMWSBXQVJOSU5HXCJdXSxJW1wiUy1BLU1GUlotLVwiXT1bRVtcIkFSLkkuRUxFQ1RST05JQyBTVVBQT1JUIE1FQVNVUkVTXCJdXSxJW1wiUy1BLU1GUlgtLVwiXT1SP1tFW1wiQVIuSS4yNTI1IFBIT1RPR1JBUEhJQ1wiXV06W0VbXCJBUi5JLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJBSVIuTTIuUEhPVE9HUkFQSElDXCJdXSxJW1wiUy1BLU1GUC0tLVwiXT1bRVtcIkFSLkkuUEFUUk9MXCJdXSxJW1wiUy1BLU1GUE4tLVwiXT1bRVtcIkFSLkkuQU5USVNVUkZBQ0UgV0FSRkFSRVwiXV0sSVtcIlMtQS1NRlBNLS1cIl09W0VbXCJBUi5JLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdXSxJW1wiUy1BLU1GVS0tLVwiXT1bRVtcIkFSLkkuVVRJTElUWVwiXV0sSVtcIlMtQS1NRlVMLS1cIl09W0VbXCJBUi5JLlVUSUxJVFlcIl0sRVtcIkFJUi5NMi5MSUdIVFwiXV0sSVtcIlMtQS1NRlVNLS1cIl09W0VbXCJBUi5JLlVUSUxJVFlcIl0sRVtcIkFJUi5NMi5NRURJVU1cIl1dLElbXCJTLUEtTUZVSC0tXCJdPVtFW1wiQVIuSS5VVElMSVRZXCJdLEVbXCJBSVIuTTIuSEVBVllcIl1dLElbXCJTLUEtTUZZLS0tXCJdPVtFW1wiQVIuSS5DT01NVU5JQ0FUSU9OU1wiXV0sSVtcIlMtQS1NRkgtLS1cIl09W0VbXCJBUi5JLlBFUlNPTk5FTCBSRUNPVkVSWVwiXV0sSVtcIlMtQS1NRkQtLS1cIl09W0VbXCJBUi5JLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXV0sSVtcIlMtQS1NRlEtLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdXSxJW1wiUy1BLU1GUUEtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5BVFRBQ0tcIl1dLElbXCJTLUEtTUZRQi0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkJPTUJFUlwiXV0sSVtcIlMtQS1NRlFDLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuQ0FSR09cIl1dLElbXCJTLUEtTUZRRC0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXV0sSVtcIlMtQS1NRlFGLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuRklHSFRFUlwiXV0sSVtcIlMtQS1NRlFILS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdXSxJW1wiUy1BLU1GUUotLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl1dLElbXCJTLUEtTUZRSy0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLlRBTktFUlwiXV0sSVtcIlMtQS1NRlFMLS1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuVlNUT0xcIl1dLElbXCJTLUEtTUZRTS0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUEtTUZRSS0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdXSxJW1wiUy1BLU1GUU4tLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5BTlRJU1VSRkFDRSBXQVJGQVJFXCJdXSxJW1wiUy1BLU1GUVAtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5QQVRST0xcIl1dLElbXCJTLUEtTUZRUi0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1BLU1GUVJXLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5BSVJCT1JORSBFQVJMWSBXQVJOSU5HXCJdXSxJW1wiUy1BLU1GUVJaLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5FTEVDVFJPTklDIFNVUlZFSUxMQU5DRSBNRUFTVVJFU1wiXV0sSVtcIlMtQS1NRlFSWC1cIl09W0VbXCJBUi5JLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdLEVbXCJBSVIuTTEuUEhPVE9HUkFQSElDXCJdXSxJW1wiUy1BLU1GUVMtLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLElbXCJTLUEtTUZRVC0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLlRSQUlORVJcIl1dLElbXCJTLUEtTUZRVS0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLlVUSUxJVFlcIl1dLElbXCJTLUEtTUZRWS0tXCJdPVtFW1wiQVIuSS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXSxFW1wiQUlSLk0xLkNPTU1VTklDQVRJT05TXCJdXSxJW1wiUy1BLU1GUU8tLVwiXT1bRVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl0sRVtcIkFJUi5NMS5NRURFVkFDXCJdXSxJW1wiUy1BLU1GUy0tLVwiXT1bRVtcIkFSLkkuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSxJW1wiUy1BLU1GTS0tLVwiXT1bRVtcIkFSLkkuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVtcIlMtQS1NSC0tLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdXSxJW1wiUy1BLU1IQS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5BVFRBQ0tcIl1dLElbXCJTLUEtTUhTLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sSVtcIlMtQS1NSFUtLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuVVRJTElUWVwiXV0sSVtcIlMtQS1NSFVMLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuVVRJTElUWVwiXSxFW1wiQUlSLk0yLkxJR0hUXCJdXSxJW1wiUy1BLU1IVU0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5VVElMSVRZXCJdLEVbXCJBSVIuTTIuTUVESVVNXCJdXSxJW1wiUy1BLU1IVUgtLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5VVElMSVRZXCJdLEVbXCJBSVIuTTIuSEVBVllcIl1dLElbXCJTLUEtTUhJLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdXSxJW1wiUy1BLU1ISC0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl1dLElbXCJTLUEtTUhSLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1BLU1IUS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5VTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXV0sSVtcIlMtQS1NSEMtLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuQ0FSR09cIl1dLElbXCJTLUEtTUhDTC0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkNBUkdPXCJdLEVbXCJBSVIuTTIuTElHSFRcIl1dLElbXCJTLUEtTUhDTS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLkNBUkdPXCJdLEVbXCJBSVIuTTIuTUVESVVNXCJdXSxJW1wiUy1BLU1IQ0gtLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5DQVJHT1wiXSxFW1wiQUlSLk0yLkhFQVZZXCJdXSxJW1wiUy1BLU1IVC0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5UUkFJTkVSXCJdXSxJW1wiUy1BLU1ITy0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5NRURFVkFDXCJdXSxJW1wiUy1BLU1ITS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1BLU1IRC0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5BSVJCT1JORSBDT01NQU5EIFBPU1RcIl1dLElbXCJTLUEtTUhLLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlRBTktFUlwiXV0sSVtcIlMtQS1NSEotLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuSkFNTUVSIC8gRUxFQ1RST05JQyBDT1VOVEVSLU1FQVNVUkVTXCJdXSxJW1wiUy1BLU1MLS0tLVwiXT1bRVtcIkFSLkkuRkYuTUlMSVRBUlkgQkFMTE9PTlwiXV0sSVtcIlMtQS1NVi0tLS1cIl09W0VbXCJBUi5JLlZJUFwiXV0sSVtcIlMtQS1NRS0tLS1cIl09W0VbXCJBUi5JLkVTQ09SVFwiXV0sSVtcIlMtQS1XLS0tLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdXSxJW1wiUy1BLVdNLS0tLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl1dLElbXCJTLUEtV01TLS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuU1VSRkFDRVwiXSxFW1wiQUlSLk1JU1NJTEUuTTIuTEFVTkNIRURcIl1dLElbXCJTLUEtV01TUy0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuU1VSRkFDRVwiXSxFW1wiQUlSLk1JU1NJTEUuTTIuU1VSRkFDRVwiXV0sSVtcIlMtQS1XTVNBLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5TVVJGQUNFXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5BSVJcIl1dLElbXCJTLUEtV01TVS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuU1VSRkFDRVwiXSxFW1wiQUlSLk1JU1NJTEUuTTIuU1VCU1VSRkFDRVwiXV0sSVtcIlMtQS1XTVNCLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5JQy5BTlRJQkFMTElTVElDIE1JU1NJTEVcIl1dLElbXCJTLUEtV01BLS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuQUlSXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5MQVVOQ0hFRFwiXV0sSVtcIlMtQS1XTUFTLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5BSVJcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLlNVUkZBQ0VcIl1dLElbXCJTLUEtV01BQS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuQUlSXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5BSVJcIl1dLElbXCJTLUEtV01BUC0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuQUlSXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5TUEFDRVwiXV0sSVtcIlMtQS1XTVUtLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5TVUJTVVJGQUNFXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5TVVJGQUNFXCJdXSxJW1wiUy1BLVdNTC0tLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDT05cIl0sRVtcIkFJUi5NSVNTSUxFLk0xLkxBTkRcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLkFJUlwiXV0sSVtcIlMtQS1XTUNNLS1cIl09W0VbXCJBSVIuTUlTU0lMRS5JQ09OXCJdLEVbXCJBSVIuTUlTU0lMRS5NMS5DUlVJU0VcIl0sRVtcIkFJUi5NSVNTSUxFLk0yLk1JU1NJTEVcIl1dLElbXCJTLUEtV01CLS0tXCJdPVtFW1wiQUlSLk1JU1NJTEUuSUNPTlwiXSxFW1wiQUlSLk1JU1NJTEUuTTEuQkFMTElTVElDXCJdLEVbXCJBSVIuTUlTU0lMRS5NMi5NSVNTSUxFXCJdXSxJW1wiUy1BLVdCLS0tLVwiXT1bRVtcIkFJUi5NSVNTSUxFLklDLkJPTUJcIl1dLElbXCJTLUEtV0QtLS0tXCJdPVtFW1wiQVIuSS5BSVIgREVDT1lcIl1dLElbXCJTLUEtQy0tLS0tXCJdPVtFW1wiQVIuSS5DSVZJTElBTlwiXV0sSVtcIlMtQS1DRi0tLS1cIl09W0VbXCJBUi5JLkZGLkNJVklMSUFOIEZJWEVEIFdJTkdcIl1dLElbXCJTLUEtQ0gtLS0tXCJdPVtFW1wiQVIuSS5GRi5DSVZJTElBTiBST1RBUlkgV0lOR1wiXV0sSVtcIlMtQS1DTC0tLS1cIl09W0VbXCJBUi5JLkZGLkNJVklMSUFOIEJBTExPT05cIl1dfX07ZnVuY3Rpb24gYyhJLHQsRSxSLGUsQSl7dmFyIEM9dC5mcmFtZSxUPXQuYWZmaWxpYXRpb258fFwiRnJpZW5kXCIsUz10LmJhc2VHZW9tZXRyeSxOPXQubnVtYmVyU0lEQyxPPUUuaWNvbkNvbG9yW1RdLEc9RS5pY29uRmlsbENvbG9yW1RdLG89RS5ibGFja1tUXSxNPUUud2hpdGVbVF0saT17fTtmb3IodmFyIEwgaW4gaVtcIkdSLklDLk1JTElUQVJZXCJdPWEoXCJNSUxcIiksaVtcIkdSLkkuR09WRVJOTUVOVFwiXT1hKFwiR09WXCIpLGlbXCJHUi5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDExMCAtMTAsLTEwIDEwLC0xMCAwLC0xMCA1MCwwIDAsMTAgMTAsMTAgLTEwLDEwIHpcIn0saVtcIkdSLklDLkZFUlJZXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOlI/RzohQyYmRyxkOlwibSA3NSwxMDAgMCwtMzUgNTAsMCAwLDM1IDIwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpSP1wiRkVcIjpcIkZcIn1dLGlbXCJHUi5JQy5BRE1JTklTVFJBVElWRVwiXT1hKFwiQURNXCIpLGlbXCJHUi5JQy5NQU5VQUwgVFJBQ0tcIl09YShcIk1BTlwiKSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgQ0hBUEFSUkFMXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDg1LDgwIDMwLDAgYyA1LjU0LDAgMTAsNC40NiAxMCwxMCBsIDAsNSBjIDAsNS41NCAtNC40NiwxMCAtMTAsMTAgbCAtMzAsMCBjIC01LjU0LDAgLTEwLC00LjQ2IC0xMCwtMTAgbCAwLC01IGMgMCwtNS41NCA0LjQ2LC0xMCAxMCwtMTAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMDEsZm9udHNpemU6MjAsdGV4dDpcIkNcIn1dLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBDT01QT1NJVEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk04NSwxMjAgQzg1LDExMCAxMTUsMTEwIDExNSwxMjAgTTkwLDExNSBMOTAsOTAgQzkwLDgwIDExMCw4MCAxMTAsOTAgTDExMCwxMTUgTTEwMCwxMTIgbDAsLTMwXCIsZmlsbDohMX0saVtcIkdSLklDLkFJUiBERUZFTlNFIEgvTUFEXCJdPWEoXCJITURcIiksaVtcIkdSLklDLkFJUiBERUZFTlNFIEgvTUFEIEhBV0tcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTAxLGZvbnRzaXplOjIwLHRleHQ6XCJIXCJ9LGlbXCJHUi5JQy5BSVIgREVGRU5TRSBIL01BRCBQQVRSSU9UXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMSxmb250c2l6ZToyMCx0ZXh0OlwiUFwifSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTkwLDEyMCBMOTAsOTAgQzkwLDgwIDExMCw4MCAxMTAsOTAgTDExMCwxMjBcIixmaWxsOiExfSxpW1wiR1IuSUMuRkxPQVRJTkcgQ1JBRlRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsNzUgMjAsMCAwLC0xMCAtNSwwIDAsLTEwIC0xMCwwIDAsMTAgLTUsMCB6XCIsc3Ryb2tlOiExfSxpW1wiR1IuSUMuQUlSIEFORCBNSVNTSUxFIERFRkVOU0VcIl09YShcIk1EXCIpLGlbXCJHUi5JQy5NSUxJVEFSWSBISVNUT1JZXCJdPWEoXCJNSFwiKSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgVEFSR0VUSU5HIFVOSVRcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNODAsMTAwIGwyMCwtMTUgMCwxNSAyMCwtMTUgTTc1LDgwIEM3NSwxMDAgODUsMTE1IDEwNSwxMTVcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjExMCxyOjV9XSxpW1wiR1IuSUMuQUlSIERFRkVOU0UgVEhFQVRFUiBNSVNTSUxFIERFRkVOU0UgVU5JVFwiXT1hKFwiVE1EXCIpLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBTSE9SVCBSQU5HRVwiXT1hKFwiU1JEXCIpLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBTVElOR0VSXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDg1LDgwIDMwLDAgYyA1LjU0LDAgMTAsNC40NiAxMCwxMCBsIDAsNSBjIDAsNS41NCAtNC40NiwxMCAtMTAsMTAgbCAtMzAsMCBjIC01LjU0LDAgLTEwLC00LjQ2IC0xMCwtMTAgbCAwLC01IGMgMCwtNS41NCA0LjQ2LC0xMCAxMCwtMTAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMDEsZm9udHNpemU6MjAsdGV4dDpcIlNcIn1dLGlbXCJHUi5JQy5BSVIgREVGRU5TRSBWVUxDQU5cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsODAgMzAsMCBjIDUuNTQsMCAxMCw0LjQ2IDEwLDEwIGwgMCw1IGMgMCw1LjU0IC00LjQ2LDEwIC0xMCwxMCBsIC0zMCwwIGMgLTUuNTQsMCAtMTAsLTQuNDYgLTEwLC0xMCBsIDAsLTUgYyAwLC01LjU0IDQuNDYsLTEwIDEwLC0xMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMSxmb250c2l6ZToyMCx0ZXh0OlwiVlwifV0saVtcIkdSLklDLkFJUiBERUZFTlNFIEdVTiBVTklUXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDgwIEwxMDAsMTIwIE05Miw5MCBsMCwyMCBNMTA4LDkwIGwwLDIwXCIsZmlsbDohMX0saVtcIkdSLklDLkFJUiBUUkFGRklDIFNFUlZJQ0VTXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw5NSAwLDI1IG0gNy41LC0zMi41IGMgMCw0LjEgLTMuNCw3LjUgLTcuNSw3LjUgLTQuMSwwIC03LjUsLTMuNCAtNy41LC03LjUgMCwtNC4xIDMuNCwtNy41IDcuNSwtNy41IDQuMSwwIDcuNSwzLjQgNy41LDcuNSB6IE0gNjAsODUgbCA0MCwxNSA0MCwtMTUgMCwzMCAtNDAsLTE1IC00MCwxNSB6XCJ9LGlbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNODAsNzAgbDQwLDAgTTgwLDgwIGwyNSwtMjUgTTEwMCw4MCBsMCw0MCBNODEsOTAuNSBsMzgsMTkgTTgxLDEwOS41IGwzOCwtMTlcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjAsZmlsbDohMX1dLGlbXCJHUi5JQy5BTExJRUQgQ09NTUFORCBFVVJPUEUgUkFQSUQgUkVBQ1RJT04gQ09SUFMgKEFSUkMpXCJdPWEoXCJBUlJDXCIpLGlbXCJHUi5JQy5BTExJRUQgQ09NTUFORCBPUEVSQVRJT05TXCJdPWEoXCJBQ09cIiksaVtcIkdSLklDLkFNTVVOSVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsMTE3IDAsLTI1IGMgMCwtMTUgMjAsLTE1IDIwLDAgbCAwLDI1IG0gLTI1LDAgMzAsMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5BUk1PVVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMjUsODAgQzE1MCw4MCAxNTAsMTIwIDEyNSwxMjAgTDc1LDEyMCBDNTAsMTIwIDUwLDgwIDc1LDgwIFpcIixmaWxsOiExfSxpW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCw4MCBjIDI1LDAgMjUsMzAgMCwzMCBsIC00MCwwIEMgNTUsMTEwIDU1LDgwIDgwLDgwIFpcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjcwLGN5OjExNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTE1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEzMCxjeToxMTUscjo1LGZpbGw6ITF9XSxpW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk02MCw4NSBsNDAsMTUgNDAsLTE1IDAsMzAgLTQwLC0xNSAtNDAsMTUgelwifSxpW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkcgMjUyNUNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTAwIEwxMDAsMTQwXCJ9LGlbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDEwMCBMMTMwLDg4IGMxNSwwIDE1LDI0IDAsMjQgTDEwMCwxMDAgNzAsMTEyIGMtMTUsMCAtMTUsLTI0IDAsLTI0IFpcIn0saVtcIkdSLklDLkNPTUJBVEFOVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gODYuOSwxMTAgYyAtMy42LDIgLTcuMiwzLjkgLTEwLjgsNS45IDIuMSwyLjkgNi43LDMuOSAxMCwyLjEgMi42LC0wLjkgNC43LC0zLjggMy4xLC02LjEgLTAuOCwtMC42IC0xLjUsLTEuMyAtMi4zLC0xLjkgeiBtIDI2LjMsMC4xIGMgMy42LDIgNy4yLDMuOSAxMC44LDUuOSAtMi4xLDIuOSAtNi43LDMuOSAtMTAsMi4xIC0yLjYsLTAuOSAtNC43LC0zLjggLTMuMSwtNi4xIDAuOCwtMC42IDEuNSwtMS4zIDIuMywtMS45IHpcIixmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSAxMTIuOSwxMTAgYyAtNS42LC00IC0xMS4zLC03LjkgLTE2LjEsLTEyLjUgLTQuMiwtNC41IC03LC05LjggLTkuMiwtMTUuMSAtMC44LDQuNCAtMC45LDkuMyAyLjQsMTMuMiAzLjYsNC41IDguNiw4LjEgMTMuNSwxMS44IDIuMywxLjcgNC43LDMuMyA3LjEsNC44IDAuOCwtMC43IDEuNSwtMS41IDIuMywtMi4yIG0gLTI1LjcsMCBjIDUuNiwtNCAxMS4zLC03LjkgMTYuMSwtMTIuNSA0LjIsLTQuNSA3LC05LjggOS4yLC0xNS4xIDAuOCw0LjQgMC45LDkuMyAtMi40LDEzLjIgLTMuNiw0LjUgLTguNiw4LjEgLTEzLjUsMTEuOCAtMi4zLDEuNyAtNC43LDMuMyAtNy4xLDQuOCAtMC44LC0wLjcgLTEuNSwtMS41IC0yLjMsLTIuMlwiLGZpbGw6TSxzdHJva2V3aWR0aDoyfV0saVtcIkdSLklDLkFWSUFUSU9OIENPTVBPU0lURVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTAwIDE1LjcsNy45IGMgMTEuOCwwIDExLjgsLTE1LjcgMCwtMTUuNyB6IG0gMCwwIC0xNS43LC03LjkgYyAtMTEuOCwwIC0xMS44LDE1LjcgMCwxNS43IHogbSAtMTAsLTIwIDEwLDIwIC0xMCwyMCAyMCwwIC0xMCwtMjAgMTAsLTIwIHpcIn0saVtcIkdSLklDLkFWSUFUSU9OIFRBQ1RJQ0FMIEFJUiBDT05UUk9MIFBBUlRZXCJdPWEoXCJUQUNQXCIpLGlbXCJHUi5JQy5BVklBVElPTiBGT1JXQVJEIEFJUiBDT05UUk9MTEVSXCJdPWEoXCJGQUNcIiksaVtcIkdSLklDLlNQRUNJQUwgVFJPT1BTXCJdPWEoXCJTVFwiKSxpW1wiR1IuSUMuUkFOR0VSXCJdPWEoXCJSR1JcIiksaVtcIkdSLklDLkJBTkRcIl09YShcIkJBTkRcIiksaVtcIkdSLklDLkFSTVkgTVVTSUNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTkuNiwxMTAuNSBjIC00LjgsLTEuNCAtMTAuOSwyLjIgLTEwLjQsNy43IDEsMi41IDYuMiwyLjQgOS42LC0wLjIgMS45LC0xLjUgMi43LC0zLjggMi4zLC02LjkgbCAtMC4xLC0yMS4zIGMgMTIuNyw1LjggNy42LDE0LjggNS42LDIwLjcgNC43LC00LjkgNS44LC0xMy4yIDEuNSwtMTcuOSAtNC40LC00LjYgLTUsLTcgLTguNCwtMTMgelwiLHN0cm9rZTohMX0saVtcIkdSLklDLkJVUkVBVSBPRiBBTENPSE9MLCBUT0JBQ0NPLCBGSVJFQVJNUyBBTkQgRVhQTE9TSVZFUyAoQVRGKSAoREVQQVJUTUVOVCBPRiBKVVNUSUNFKVwiXT1hKFwiQVRGXCIpLGlbXCJHUi5JQy5DQlJOXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA4MCwxMjAgYyAwLC0yMCAxMCwtMzIgNTAsLTM1IG0gLTEwLDM1IEMgMTIwLDEwMCAxMTAsODggNzAsODVcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjkwLHI6Nn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMjUsY3k6OTAscjo2fV0saVtcIkdSLkNIRU1JQ0FMLCBCSU9MT0dJQ0FMLCBSQURJT0xPR0lDQUwsIE5VQ0xFQVIsIEFORCBISUdILVlJRUxEIEVYUExPU0lWRVNcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDgwIDIwLDAgMTAsMjAgLTEwLDIwIC0yMCwwIC0xMCwtMjAgelwiLGZpbGw6R30sYShcIkVcIildLGlbXCJHUi5JQy5TUEFDRVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDgwIC0xLjI1LDE2LjUgLTQuMiwtMy4zIDIuNSw0LjkgLTUuNSwxLjcgLTAuNCwtMCAwLjIsMCAtMC4yLDAgMC40LC0wIDUuNCwyLjMgLTEuOCw0LjYgMy42LC0zLjUgMS4zLDE2LjUgMS4zLC0xNi41IDQuMiwzLjMgLTIuNSwtNC45IDUuNSwtMS43IDAuNCwwIC0wLjIsLTAgMC4yLDAgLTAuNCwwIC01LjMsLTEuNyAyLjUsLTQuNiAtNCwzLjIgelwiLHN0cm9rZTohMX1dLGlbXCJHUi5JQy5DSVZJTCBBRkZBSVJTXCJdPWEoXCJDQVwiKSxpW1wiR1IuSUMuQ0lWSUwtTUlMSVRBUlktQ09PUEVSQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNjAsODAgODAsMCAwLDIwIGMgMCwyNSAtODAsMjUgLTgwLDAgelwiLGZpbGw6ITF9LGlbXCJHUi5JLkNJVklMSUFOXCJdPWEoXCJDSVZcIiksaVtcIkdSLkkuQ0lWSUxJQU5cIl0uZmlsbD1SfHxOP0c6IUMmJkcsaVtcIkdSLkkuQ0lWSUxJQU5cIl0uc3Ryb2tlPW8saVtcIkdSLkkuQ0lWSUxJQU5cIl0uc3Ryb2tld2lkdGg9MyxpW1wiR1IuSUMuQ09NTUFORCBBTkQgQ09OVFJPTFwiXT1hKFwiQzJcIiksaVtcIkdSLklDLkNPTUJBVFwiXT1hKFwiQ0JUXCIpLGlbXCJHUi5JQy5DT01CQVQgU0VSVklDRSBTVVBQT1JUXCJdPWEoXCJDU1NcIiksaVtcIkdSLklDLkNPTUJBVCBTVVBQT1JUXCJdPWEoXCJDU1wiKSxpW1wiR1IuSUMuQ09NQkFUIFNVUFBPUlQgKE1BTk9FVVZSRSBFTkhBTkNFTUVOVClcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsODAgMCwyNSAxNSwxNSAxNSwtMTUgMCwtMjUgelwifSxpW1wiR1IuSUMuQ09NQklORUQgQVJNU1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA3MCw4MCA2MCw0MCBtIDAsLTQwIC02MCw0MCBtIDU1LC00MCBjIDI1LDAgMjUsNDAgMCw0MCBsIC01MCwwIEMgNTAsMTIwIDUwLDgwIDc1LDgwIHpcIixmaWxsOiExfSxpW1wiR1IuSUMuQ09VTlRFUi1JTlRFTExJR0VOQ0VcIl09YShcIkNJXCIpLGlbXCJHUi5JQy5DUklNSU5BTCBJTlZFU1RJR0FUSU9OIERJVklTSU9OXCJdPWEoXCJDSURcIiksaVtcIkdSLklDLkRJVklOR1wiXT1bXSxpW1wiR1IuSUMuRE9HXCJdPWEoXCJET0dcIiksaVtcIkdSLklDLkRSSUxMSU5HXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDgwIDUsNDAgMjAsMCA1LC00MCB6XCJ9LGlbXCJHUi5JQy5EUlVHIEVORk9SQ0VNRU5UIEFHRU5DWSAoREVBKVwiXT1hKFwiREVBXCIpLGlbXCJHUi5JQy5FTEVDVFJPTklDIFJBTkdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMjAsMTMwIGMtNDAsMjAgLTgwLC00NSAtNDAsLTcwIHogTTEwMCw5NSBMMTQwLDc1XCIsZmlsbDohIVImJkd9LGlbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl09YShcIkVXXCIpLGlbXCJHUi5JQy5FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsNjAgMCwyMi43IC0xOS43LC0xMS4zIC0xMCwxNy4zIEwgODAsMTAwIGwgLTE5LjcsMTEuMyAxMCwxNy4zIEwgOTAsMTE3LjMgOTAsMTQwIGwgMjAsMCAwLC0yMi43IDE5LjcsMTEuMyAxMCwtMTcuMyBMIDEyMCwxMDAgbCAxOS43LC0xMS4zIC0xMCwtMTcuMyBMIDExMCw4Mi43IDExMCw2MCA5MCw2MCB6XCJ9LGlbXCJHUi5JQy5FTkdJTkVFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNjAsMTIwIEw2MCw4MCAxNDAsODAgMTQwLDEyMCBNMTAwLDgwIEwxMDAsMTEwXCJ9LGlbXCJHUi5JQy5FTkdJTkVFUiBNRUNIQU5JWkVEXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDkwIDAsMTUgbSAtMjUsNSAwLC0yMCA1MCwwIDAsMjAgbSAwLC0zMCBjIDI1LDAgMjUsNDAgMCw0MCBsIC01MCwwIEMgNTAsMTIwIDUwLDgwIDc1LDgwIFpcIn0saVtcIkdSLklDLkVOR0lORUVSIFVUSUxJVFkgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwxMDAgMCwxMCBtIC0xNSw1IDAsLTE1IDMwLDAgMCwxNSBNIDcwLDgwIGMgMCwxNSA2MCwxNSA2MCwwIGwgMCw0MCAtNjAsMCB6XCJ9LGlbXCJHUi5JQy5FTlZJUk9OTUVOVEFMIFBST1RFQ1RJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDgwIC0xMCwxNSA1LDAgLTEwLDEwIDUsMCAtMTAsMTAgMTUsMCAwLDUgMTAsMCAwLC01IDE1LDAgLTEwLC0xMCA1LDAgLTEwLC0xMCA1LDAgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5FWFBMT1NJVkUgT1JETkFOQ0UgRElTUE9TQUxcIl09YShcIkVPRFwiKSxpW1wiR1IuSUMuRkVERVJBTCBCVVJFQVUgT0YgSU5WRVNUSUdBVElPTiAoRkJJKVwiXT1hKFwiRkJJXCIpLGlbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl09e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9LGlbXCJHUi5JQy5GSUVMRCBBUlRJTExFUlkgT0JTRVJWRVJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwOCxyOjV9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEyMCAzMCwtMjAgbSAtMzAsMjAgMjAsLTQwIDIwLDQwIHpcIixmaWxsOiExfV0saVtcIkdSLklDLkZJRUxEIENBTVAgQ09OU1RSVUNUSU9OXCJdPVtpW1wiR1IuSUMuRU5HSU5FRVJcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6NzcsZm9udHNpemU6MjUsdGV4dDpcIkNBTVBcIn1dLGlbXCJHUi5JQy5GSU5BTkNFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDk1IDEwLC0xMCAyMCwwIDEwLDEwIG0gLTQwLDAgMCwyMCA0MCwwIDAsLTIwIHpcIixmaWxsOiExfSxpW1wiR1IuSUMuRklSRSBQUk9URUNUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCw5MCAtNSw1IC0xMCwtMTAgNSwtNSAtMjAsMCA1LDUgLTEwLDEwIC01LC01IDAsMjAgNSwtNSAxMCwxMCAtNSw1IDIwLDAgLTUsLTUgMTAsLTEwIDUsNSB6XCJ9LGlbXCJHUi5JQy5GSVhFRCBXSU5HIE1JU09cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLHN0cm9rZTpvLGQ6XCJNNzAsODUgbDQwLDAgMTAsLTEwIDAsNTAgLTEwLC0xMCAtNDAsMCB6IE0xMjAsODUgbDEwLDAgTTEyMCw5NSBsMTAsMCBNMTIwLDEwNSBsMTAsMCBNMTIwLDExNSBsMTAsMFwifSx7dHlwZTpcInBhdGhcIixkOlwiTSA3OC44IDYxLjUgQyA2OC4xIDYxLjUgNjguMSA3OC41IDc4LjggNzguNSBMIDEwMCA3MCBMIDc4LjggNjEuNSB6IE0gMTAwIDcwIEwgMTIxLjMgNzguNSBDIDEzMS45IDc4LjUgMTMxLjkgNjEuNSAxMjEuMyA2MS41IEwgMTAwIDcwIHpcIn1dLGlbXCJHUi5JQy5HRU9TUEFUSUFMIFNVUFBPUlRcIl09YShcIkdFT1wiKSxpW1wiR1IuSUMuR09WRVJOTUVOVCBPUkdBTklaQVRJT05cIl09YShcIkdPXCIpLGlbXCJHUi5JQy5JTkZPUk1BVElPTiBPUEVSQVRJT05TXCJdPWEoUiYmIU4/XCJJV1wiOlwiSU9cIiksaVtcIkdSLklDLklOVEVSTkFUSU9OQUwgU0VDVVJJVFkgQVNTSVNUQU5DRSBGT1JDRSAoSVNBRilcIl09YShcIklTQUZcIiksaVtcIkdSLklDLklOVEVSUk9HQVRJT05cIl09YShcIklQV1wiKSxpW1wiR1IuSUMuSk9JTlQgRklSRSBTVVBQT1JUXCJdPWEoXCJKRlNcIiksaVtcIkdSLklDLkpPSU5UIElORk9STUFUSU9OIEJVUkVBVVwiXT1hKFwiSklCXCIpLGlbXCJHUi5JQy5KT0lOVCBJTlRFTExJR0VOQ0UgQ0VOVFJFXCJdPWEoXCJKSUNcIiksaVtcIkdSLklDLkpVREdFIEFEVk9DQVRFIEdFTkVSQUxcIl09YShcIkpBR1wiKSxpW1wiR1IuSUMuTEFCT1VSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDg1IDIwLDAgbSAtMTAsMCAwLDI1IC0xMCwwIDEwLDEwIDEwLC0xMCAtMTAsMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5MQVVORFJZL0JBVEhcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsODAgMTAsMTAgMCwzMCBtIDAsLTMwIC0xMCwwIG0gMTAsMCAtMTAsMTBcIixmaWxsOiExfSxpW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCwxMTggQyA3NiwxMDkgODUsOTUgODIsODIgYyA2LDcgMTIsNyAxOCwwIDYsNyAxMiw3IDE4LDAgLTMsMTMgNiwyNyAtMTgsMzYgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlQgVkVTU0VMXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOlI/RzohQyYmRyxkOlwibSA3NSwxMDAgMCwtMzUgNTAsMCAwLDM1IDIwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMzUsMTAwIC0xNSwzNSAtMTAsMCAxNSwtMzUgelwifV0saVtcIkdSLklDLkxJQUlTT05cIl09YShcIkxPXCIpLGlbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTcwLDkwIGMxMCwwIDEwLDIwIDAsMjAgbTEwLC0xMCBsNDAsMCBtMTAsLTEwIGMtMTAsMCAtMTAsMjAgMCwyMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5NQVRFUklFTFwiXT1hKFwiTUFUXCIpLGlbXCJHUi5JQy5NRURJQ0FMIEVWQUNVQVRJT04gSEVMSUNPUFRFUlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTYwLDg1IGw0MCwxNSA0MCwtMTUgMCwzMCAtNDAsLTE1IC00MCwxNSB6IE05NS41LDgwIGw5LDAgMCwtOSA5LDAgMCwtOSAtOSwwIDAsLTkgLTksMCAwLDkgLTksMCAwLDkgOSwwIFpcIn0saVtcIkdSLklDLk1FU1NFTkdFUlwiXT1hKFwiTVwiKSxpW1wiR1IuSUMuTUVURU9ST0xPR0lDQUxcIl09YShcIk1FVFwiKSxpW1wiR1IuSUMuTUlMSVRBUlkgSU5GT1JNQVRJT04gU1VQUE9SVCBPUEVSQVRJT05TIChNSVNPKVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTcwLDg1IGw0MCwwIDEwLC0xMCAwLDUwIC0xMCwtMTAgLTQwLDAgeiBNMTIwLDg1IGwxMCwwIE0xMjAsOTUgbDEwLDAgTTEyMCwxMDUgbDEwLDAgTTEyMCwxMTUgbDEwLDBcIn0saVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXT1hKFwiTUlcIiksaVtcIkdSLklDLk1JTElUQVJZIFBPTElDRVwiXT1hKFwiTVBcIiksaVtcIkdSLklDLk1JTkVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDEwMCBjIDAsNS41IC05LDEwIC0yMCwxMCAtMTEsMCAtMjAsLTQuNSAtMjAsLTEwIDAsLTUuNSA5LC0xMCAyMCwtMTAgMTEsMCAyMCw0LjUgMjAsMTAgeiBtIC01LC0yMCAtMzAsNDAgbSAwLC00MCAzMCw0MCBtIC0xNSwtNDAgMCw0MFwifSxpW1wiR1IuSUMuTUlORSBDTEVBUklOR1wiXT1baVtcIkdSLklDLk1JTkVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6NzcsZm9udHNpemU6MjUsdGV4dDpcIkNMUlwifV0saVtcIkdSLklDLk1JTkUgTEFVTkNISU5HXCJdPVtpW1wiR1IuSUMuTUlORVwiXSx7dHlwZTpcInBhdGhcIixkOlwibSA4MCwxMjUgMCwxMCA0MCwwIDAsLTEwIHpcIn1dLGlbXCJHUi5JQy5NSU5FIExBWUlOR1wiXT1baVtcIkdSLklDLk1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsNjUgMCwxMCA0MCwwIDAsLTEwIHpcIn1dLGlbXCJHUi5JQy5NSVNTSUxFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNOTAsMTIwIEw5MCw5MCBDOTAsODAgMTEwLDgwIDExMCw5MCBMMTEwLDEyMCBNMTAwLDEyMCBMMTAwLDgwXCIsZmlsbDohMX0saVtcIkdSLklDLk1JU1NJTEUuTElHSFRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk05MCw5MCBMMTEwLDkwXCJ9LGlbXCJHUi5JQy5NSVNTSUxFLk1FRElVTVwiXT17dHlwZTpcInBhdGhcIixkOlwiTTkwLDkwIEwxMTAsOTAgTTkwLDk3IEwxMTAsOTdcIn0saVtcIkdSLklDLk1JU1NJTEUuSEVBVllcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk05MCw5MCBMMTEwLDkwIE05MCw5NyBMMTEwLDk3IE05MCwxMDQgTDExMCwxMDRcIn0saVtcIkdSLklDLk1PUkFMRSwgV0VMRkFSRSwgQU5EIFJFQ1JFQVRJT05cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNV1JcIn0saVtcIkdSLklDLk1PUlRBUlwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTE1LHI6NSxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxMTEgbDAsLTMwIE05MCw5MCBsMTAsLTEwIDEwLDEwXCIsZmlsbDohMX1dLGlbXCJHUi5JQy5NT1JUVUFSWSBBRkZBSVJTXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDk1IDIwLDAgbSAtMTAsLTEwIDAsMzAgbSAtMTUsLTM1IDMwLDAgMCw0MCAtMzAsMCB6XCIsZmlsbDohMX0saVtcIkdSLklDLk1VTFRJTkFUSU9OQUwgKE1OKVwiXT1hKFwiTU5cIiksaVtcIkdSLklDLk5BVkFMXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDUsODUgYyAwLDIuOCAtMi4yLDUgLTUsNSAtMi44LDAgLTUsLTIuMiAtNSwtNSAwLC0yLjggMi4yLC01IDUsLTUgMi44LDAgNSwyLjIgNSw1IHogbSAtMjAsNSAzMCwwIG0gLTE1LDAgMCwzMFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJNIDgyLjMgMTAyLjYgQyA4Mi4zIDExMy45IDg0LjIgMTE1LjkgODQuMiAxMTUuOSBMIDg2LjUgMTE0LjEgQyA5MC4yIDExNy44IDk0LjggMTIwLjggOTkuOSAxMjAuOSBMIDEwMC41IDEyMC45IEwgMTAxIDEyMC45IEMgMTA2LjIgMTIwLjggMTEwLjggMTE3LjggMTE0LjQgMTE0LjEgTCAxMTYuNyAxMTUuOSBDIDExNi43IDExNS45IDExOC42IDExMy45IDExOC43IDEwMi42IEMgMTEzLjkgMTA2LjggMTA4LjkgMTA5IDEwOC45IDEwOSBMIDExMC45IDExMC43IEMgMTEwLjkgMTEwLjcgMTA2LjggMTE1LjIgMTAwLjUgMTE1LjIgTCAxMDAuNSAxMTUuMiBDIDEwMC41IDExNS4yIDEwMC40IDExNS4yIDEwMC40IDExNS4yIEMgOTQuMiAxMTUuMiA5MCAxMTAuNyA5MCAxMTAuNyBMIDkyIDEwOSBDIDkyIDEwOSA4NyAxMDYuOCA4Mi4zIDEwMi42IHpcIixzdHJva2U6ITF9XSxpW1wiR1IuSUMuT0JTRVJWRVIvT0JTRVJWQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDgwIC0yNSw0MCA1MCwwIHpcIixmaWxsOiExfSxpW1wiR1IuSUMuT1JETkFOQ0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gOTAsOTcgODMsODMgbSAyNywxNCA3LC0xNCBNIDk1LDk1IDkwLDgxIG0gMTUsMTQgNSwtMTQgbSAxMCwyNi41IGMgMCw2LjkgLTksMTIuNSAtMjAsMTIuNSAtMTEsMCAtMjAsLTUuNiAtMjAsLTEyLjUgMCwtNi45IDksLTEyLjUgMjAsLTEyLjUgMTEsMCAyMCw1LjYgMjAsMTIuNSB6XCIsZmlsbDohMX0saVtcIkdSLklDLlBFUlNPTk5FTCBTRVJWSUNFU1wiXT1hKFwiUFNcIiksaVtcIkdSLklDLlBFVFJPTEVVTSBPSUwgTFVCUklDQU5UU1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTE5IDAsLTI0IG0gMCwwIEMgOTksOTUgODUsODEgODUsODEgbCAzMCwwIHpcIixmaWxsOiExfSxpW1wiR1IuSUMuUElQRUxJTkVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTE1LDExMCAxNSwwIG0gLTE1LC0xNSAxNSwwIG0gLTQ1LDE1IC0xNSwwIE0gODUsOTUgNzAsOTUgbSAzMCwtMTUgMCwxMCAtMTUsMCAwLDI1IDMwLDAgMCwtMjUgLTE1LDAgbSAtMTAsLTEwIDIwLDBcIixmaWxsOiExfSxpW1wiR1IuSUMuUE9TVEFMXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDgwIDMwLDAgYyAtMS40LDE1LjUgMCwyNSAxMCwzNSAtMjAsMCAtNDAsLTIwIC00MCwtMzUgelwiLGZpbGw6ITF9LGlbXCJHUi5JQy5QVUJMSUMgQUZGQUlSU1wiXT1hKFwiUEFcIiksaVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTIEJST0FEQ0FTVFwiXT1hKFwiQlBBRFwiKSxpW1wiR1IuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLHN0cm9rZTpvLGQ6XCJNNzAsODUgbDQwLDAgMTAsLTEwIDAsNTAgLTEwLC0xMCAtNDAsMCB6IE0xMjAsODUgbDEwLDAgTTEyMCw5NSBsMTAsMCBNMTIwLDEwNSBsMTAsMCBNMTIwLDExNSBsMTAsMFwifSxpW1wiR1IuSUMuUVVBUlRFUk1BU1RFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDExNSw5NSBjIDAsMTUgMTUsMTUgMTUsMCAwLC0xNSAtMTUsLTE1IC0xNSwwIHogbSAwLDAgLTQ1LDAgMCwxMCAxMCwwIDAsLTEwXCJ9LGlbXCJHUi5JQy5SQURBUlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTcyLDk1IGwzMCwtMjUgMCwyNSAzMCwtMjUgTTcwLDcwIGMwLDM1IDE1LDUwIDUwLDUwXCIsZmlsbDohMX0saVtcIkdSLklDLlJBRElPXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMzAscjoxMCxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtNjAgTTcwLDcwIGwxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMFwifV0saVtcIkdSLklDLlJBRElPIFJFTEFZXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMzAscjoxMCxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsLTE1LC00MCAxNSwwIDAsLTIwIE03MCw2MCBsNjAsMFwifV0saVtcIkdSLklDLlJBRElPIFRFTEVUWVBFIENFTlRSRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTM1LGZvbnRzaXplOjMwLHRleHQ6XCJDXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTQwIGwwLC04MCAgTTcwLDYwIGw2MCwwIE04MCw3MCBsNDAsMFwifV0saVtcIkdSLklDLlJBSUxIRUFEXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDgwIGwwLDQwIE04MSw5MC41IGwzOCwxOSBNODEsMTA5LjUgbDM4LC0xOVwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoyMCxmaWxsOiExfSxzLl90cmFuc2xhdGUoMCwtNTAsW3t0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTIwIGw4MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjY1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo3NSxjeToxMjUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTI1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMzUsY3k6MTI1LHI6NX1dKV0saVtcIkdSLklDLlJFTElHSU9VUyBTVVBQT1JUXCJdPWEoXCJSRUxcIiksaVtcIkdSLklDLlJFUExBQ0VNRU5UIEhPTERJTkcgVU5JVFwiXT1hKFwiUkhVXCIpLGlbXCJHUi5JQy5TRUEtQUlSLUxBTkRcIl09YShcIlNFQUxcIiksaVtcIkdSLklDLlNVUFBPUlRcIl09YShcIlNQVFwiKSxpW1wiR1IuSUMuQVJNWSBGSUVMRCBTVVBQT1JUXCJdPWEoXCJBRlNcIiksaVtcIkdSLklDLkNPTlRSQUNUSU5HIFNFUlZJQ0VTXCJdPWEoXCJLU1wiKSxpW1wiR1IuSUMuU0VBUE9SVCBPRiBERUJBUktBVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCw4MCBsMCw0MCBNODEsOTAuNSBsMzgsMTkgTTgxLDEwOS41IGwzOCwtMTlcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjAsZmlsbDohMX0scy5fdHJhbnNsYXRlKDAsLTM1LHMuX3NjYWxlKC42LGlbXCJHUi5JQy5OQVZBTFwiXSkpXSxpW1wiR1IuSUMuU0VDVVJJVFlcIl09YShcIlNFQ1wiKSxpW1wiR1IuSUMuU0VDVVJJVFkgUE9MSUNFIChBSVIpXCJdPVthKFwiU1BcIikse3R5cGU6XCJwYXRoXCIsZDpcIk0gNzguOCAxMjEuNSBDIDY4LjEgMTIxLjUgNjguMSAxMzguNSA3OC44IDEzOC41IEwgMTAwIDEzMCBMIDc4LjggMTIxLjUgeiBNIDEwMCAxMzAgTCAxMjEuMyAxMzguNSBDIDEzMS45IDEzOC41IDEzMS45IDEyMS41IDEyMS4zIDEyMS41IEwgMTAwIDEzMCB6XCJ9XSxpW1wiR1IuSUMuU0VOU09SXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw4MCBjIDAsNy41IDEyLjUsMjAgMjAsMjAgLTcuNSwwIC0yMCwxMi41IC0yMCwyMCAwLC03LjUgLTEyLjUsLTIwIC0yMCwtMjAgNy41LDAgMjAsLTEyLjUgMjAsLTIwIHpcIn0saVtcIkdSLklDLlNIT1JFIFBBVFJPTFwiXT1hKFwiU1BcIiksaVtcIkdSLklDLlNOSVBFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDYwIDg1IEwgOTAgODUgTCA2MCA4NSB6IE0gMTEwIDg1IEwgMTQwIDg1IEwgMTEwIDg1IHogTSAxMDAgOTAgTCAxMDAgMTE1IEwgMTAwIDkwIHpcIn0saVtcIkdSLklDLlBBUkFDSFVURSBSSUdHRVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMjAsMTAwIC0yMCwyMCAtMjAsLTIwIG0gMCwwIGMgMCwtMjUgNDAsLTI1IDQwLDAgbCAtNDAsMFwifSxpW1wiR1IuSUMuU1BFQ0lBTCBGT1JDRVNcIl09YShcIlNGXCIpLGlbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdPWEoXCJTT0ZcIiksaVtcIkdSLklDLlNVUlZFSUxMQU5DRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODAgLTI1LDQwIDUwLDAgelwifSxpW1wiR1IuSUMuU1VSVkVZXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTTg1LDEyMCBsMTUsLTE1IDE1LDE1IFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDEwNSBsMCwtMjUgMjAsMTIuNSB6XCIsZmlsbDohIVImJkd9XSxpW1wiR1IuSUMuU1VTVEFJTk1FTlRcIl09YShcIlNVU1RcIiksaVtcIkdSLklDLlRFTEVQSE9ORSBTV0lUQ0hcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEzNSxmb250c2l6ZTozMCx0ZXh0OlwiQ1wifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDE0MCBsMCwtODAgIE03MCw2MCBsNjAsMFwifV0saVtcIkdSLklDLlRPUE9HUkFQSElDXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsMTA1IGMgMTAsNSAyMCw1IDMwLDAgbSAtMTUsLTE1IDE1LDMwIG0gLTMwLDAgMTUsLTMwIDAsLTEwXCJ9LGlbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCw4MCBsMCw0MCBNODEsOTAuNSBsMzgsMTkgTTgxLDEwOS41IGwzOCwtMTlcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjAsZmlsbDohMX1dLGlbXCJHUi5JQy5UUkFOU1BPUlRBVElPTiBTRUNVUklUWSBBR0VOQ1kgKFRTQSlcIl09YShcIlRTQVwiKSxpW1wiR1IuSUMuVU5NQU5ORUQgU1lTVEVNU1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCw4NCA0MCwyMCA0MCwtMjAgMCw4IC00MCwyNSAtNDAsLTI1IHpcIixzdHJva2U6ITF9LGlbXCJHUi5JQy5TRUFSQ0ggQU5EIFJFU0NVRVwiXT1hKFwiU0FSXCIpLGlbXCJHUi5JQy5ESVZFUiwgQ0lWSUxJQU5cIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpHLGQ6XCJNIDExNC4zLDk0IEMgMTE0LjMsMTAyLjMgMTA3LjksMTA5IDEwMCwxMDkgYyAtNy45LDAgLTE0LjIsLTYuNyAtMTQuMiwtMTUgMCwtOC4zIDYuNCwtMTUgMTQuMiwtMTUgNy45LDAgMTQuMyw2LjcgMTQuMywxNSB6IG0gMCwyNyAxNC4zLDE1IC01NywwIDE0LjMsLTE1IE0gMTI1LjcsNzkgbCAxNC4zLDAgMCwzMCAtMTQuMywwIG0gLTUxLjMsMCAtMTQuMywwIDAsLTMwIDE0LjMsMCBtIDU0LjIsMTUgYyAwLDE2LjYgLTEyLjgsMzAgLTI4LjUsMzAgLTE1LjcsMCAtMjguNSwtMTMuNCAtMjguNSwtMzAgQyA3MS41LDc3LjQgODQuMyw2NCAxMDAsNjQgMTE1LjcsNjQgMTI4LjUsNzcuNCAxMjguNSw5NCB6XCJ9LGlbXCJHUi5JQy5WSURFTyBJTUFHRVJZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTQwLDExMCAtMjYsMCBtIDcsLTIwIDE5LDAgbSAtMTUsLTEwIC02NSwwIDAsNDAgNTAsMCB6IG0gMTUsNSAwLDMwXCJ9LGlbXCJHUi5JQy5VTklURUQgU1RBVEVTIFNFQ1JFVCBTRVJWSUNFKFRSRUFTKSAoVVNTUylcIl09YShcIlVTU1NcIiksaVtcIkdSLklDLldBVEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDkwIDUwLDAgYyAxMCwwIDIwLDEwIDIwLDIwIG0gLTQwLC0zMCAyMCwwIG0gLTEwLDAgMCwxMFwiLGZpbGw6ITF9LGlbXCJHUi5JQy5XQVRFUiBQVVJJRklDQVRJT05cIl09W2lbXCJHUi5JQy5XQVRFUlwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo5MCx5OjExMCxmb250c2l6ZToyMCx0ZXh0OlwiUFVSRVwifV0saVtcIkdSLklDLkZGLkFJUiBBU1NBVUxUIFdJVEggT1JHQU5JQyBMSUZUXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMzUsMTIwIEwgOTAsMTIwIGwxMCwxMCAxMCwtMTAgTDE2NSwxMjBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSwxMjAgTCA5MCwxMjAgbDEwLDEwIDEwLC0xMCBMMTc1LDEyMFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSwxMjAgTCA5MCwxMjAgbDEwLDEwIDEwLC0xMCBMMTU1LDEyMFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01MCwxMjAgTCA5MCwxMjAgbDEwLDEwIDEwLC0xMCBMMTUwLDEyMFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIm0gNTUsMTM1IGMgMTAsLTIwIDgwLC0yMCA5MCwwXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMjUsMTUwIEMyNSwxMTAgMTc1LDExMCAxNzUsMTUwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDE1MCBDNDUsMTEwIDE1NSwxMTAgMTU1LDE1MFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk03MCwxNDAgQzcwLDExNSAxMzAsMTE1IDEzMCwxNDBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLkFJUiBBTkQgTkFWQUwgR1VORklSRSBMSUFJU09OIENPTVBBTllcIl09W10saVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIm0gMzAsOTUgYyAxMCwwIDAsMTUgMTMuNSwxNSAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxMy41LDAgMy41LC0xNSAxMy41LC0xNVwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwibSAyNSw5MCBjIDE4LjgsMCAwLDIwIDE4LjgsMjAgMTguOCwwIDAsLTIwIDE4LjgsLTIwIDE4LjgsMCAwLDIwIDE4LjgsMjAgMTguOCwwIDAsLTIwIDE4LjgsLTIwIDE4LjgsMCAwLDIwIDE4LjgsMjAgMTguOCwwIDAsLTIwIDE4LjgsLTIwIDE4LjgsMCAwLDIwIDE4LjgsMjAgMTguOCwwIDAsLTIwIDIwLC0yMFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIm0gNDUsMTEwIGMgMTguOCwwIDAsLTIwIDE4LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOC44LDIwIDE4LjgsMCAwLC0yMCAxOC44LC0yMCAxOC44LDAgMCwyMCAxOCwyMFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIm0gMzIsOTUgYyAxMCwwIDAsMTUgMTEuNSwxNSAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxMS41LDAgMS41LC0xNSAxMS41LC0xNVwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuQU5BTFlTSVNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDEyMCAwLC02NSBtIDAsOTAgLTMwLC0yNSA2MCwwIHpcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTUsMTM1IEwxMDAsMzMgMTQ1LDEzNVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTI1LDE1MCBMMTAwLDUyIDE3NSwxNTBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNDUsMTUwIEwxMDAsNDcgMTU1LDE1MFwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk02MCwxMzIgTDEwMCwzMCAxNDAsMTMyXCJ9fVtUXSxpW1wiR1IuSUMuRkYuQk9SREVSIFBBVFJPTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEyMi44IDY2LjggQyAxMTkuOSA2Ni44IDExNy40IDY4LjYgMTE3LjQgNzEuNiBMIDExNy40IDczLjEgTCAxMjguNyA3My4xIEwgMTI4LjcgNzIuNCBDIDEyOC43IDY4LjggMTI2LjUgNjYuOCAxMjIuOCA2Ni44IHogTSAxMDguNiA3NC44IEwgMTA4LjYgNzYgTCAxMTcuNiA3NiBMIDExNy41IDc3LjUgTCAxMTggODAuOCBDIDExOS4xIDgxLjUgMTE4LjkgODIuNSAxMjAuOCA4My41IEMgMTIyLjEgODQuMSAxMjQgODQgMTI1LjIgODMuNCBDIDEyNy41IDgyLjQgMTI5IDc5LjIgMTI4LjMgNzYgTCAxMzcuNSA3NiBMIDEzNy41IDc0LjggTCAxMDguNiA3NC44IHogTSA5NC44IDgyLjEgQyA5My4zIDgyLjEgOTIgODMuNSA5MiA4NSBMIDkyIDg1LjIgQyA5MiA4Ni42IDk2IDkxLjMgOTcgOTIuNiBDIDk4LjIgOTQuMyAxMDAuOCA5OC44IDEwMy4yIDk4LjggQyAxMDQuNSA5OC44IDExMS4xIDkzLjcgMTEyLjYgOTIuOCBMIDExMi42IDEwNi4yIEwgMTI2LjQgODUuNiBDIDEyMyA4NS42IDExNC45IDg1LjIgMTEyLjIgODUuOSBDIDExMC4yIDg2LjQgMTA1IDkxLjYgMTAzLjYgOTEuNyBDIDEwMy40IDkxIDEwMC42IDg3LjUgMTAwIDg2LjUgQyA5OS4yIDg1LjQgOTcuMiA4Mi4xIDk1LjYgODIuMSBMIDk0LjggODIuMSB6IE0gMTMwLjQgODUuNiBDIDEyOS42IDg1LjYgMTE3LjUgMTA0LjEgMTE2LjMgMTA2LjIgTCAxMjguMSAxMDYuMiBMIDEyOC4xIDExMC42IEwgMTEyLjUgMTEwLjYgTCAxMTIuNSAxMzMuMiBMIDEyMC43IDEzMy4yIEwgMTIyIDExNy41IEwgMTI0LjMgMTE3LjUgTCAxMjUuNiAxMzMuMiBMIDEzMy41IDEzMy4yIEwgMTMzLjUgODcuOSBDIDEzMy41IDg3LjIgMTMxLjIgODUuNiAxMzAuNCA4NS42IHogTSA2Ni45IDkwLjcgQyA2Ni41IDkxLjQgNjIuNSA5Ni45IDYyLjUgOTYuOSBDIDYyLjUgOTcuOCA3Ni43IDEwNy4yIDc4LjUgMTA4LjMgQyA4MS40IDExMC4yIDgzLjkgMTEyLjEgODYuNyAxMTQgQyA4OC4yIDExNSA4OS40IDExNS45IDkwLjggMTE2LjggQyA5Mi4xIDExNy43IDk0LjEgMTE4LjUgOTQuMSAxMjAuNCBMIDk0LjEgMTMzLjIgTCAxMDUuNSAxMzMuMiBMIDEwNS41IDEyMS43IEMgMTA1LjUgMTIwLjYgMTA3LjIgMTE5IDEwNy4yIDExOC44IEMgMTA3LjIgMTE3LjYgMTA2LjEgMTE4LjYgMTA1LjYgMTE2LjkgQyAxMDUuMiAxMTUuNCAxMDUuNCAxMTUuNiAxMDQuNSAxMTQuNSBDIDEwMy41IDExMy4xIDEwMS45IDExMiA5OS44IDExMiBDIDk2LjggMTEyIDk3LjYgMTExLjggOTUuMyAxMTAuMyBDIDkzLjkgMTA5LjMgOTIuNSAxMDguNCA5MS4yIDEwNy40IEMgODguNyAxMDUuNSA4NS44IDEwMy41IDgzLjIgMTAxLjggQyA4MC45IDEwMC4zIDY4LjIgOTEgNjYuOSA5MC43IHogTSA2Ny45IDkyLjYgTCA3Mi43IDk1LjcgTCA3Mi44IDEwMyBMIDY3LjkgOTkuOSBMIDY3LjkgOTIuNiB6IE0gNzcuOCA5OS4zIEwgODIuNiAxMDIuNiBMIDgyLjYgMTEwIEwgNzcuOCAxMDYuNiBMIDc3LjggOTkuMyB6IE0gODcuNCAxMDYuMiBMIDkyLjUgMTA5LjUgTCA5Mi40IDExNi45IEwgODcuNCAxMTMuNSBMIDg3LjQgMTA2LjIgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxzdHJva2U6ITEsZDpcIk0gMTE3LjQgNzMuMSBMIDExNy40IDc0LjggTCAxMjguNyA3NC44IEwgMTI4LjcgNzMuMSBMIDExNy40IDczLjEgeiBNIDEyNi40IDg1LjYgTCAxMTIuNiAxMDYuMiBMIDExMi42IDExMC42IEwgMTI4LjEgMTEwLjYgTCAxMjguMSAxMDYuMiBMIDExNi40IDEwNi4yIEMgMTE3LjUgMTA0LjEgMTI5LjYgODUuNiAxMzAuNCA4NS42IEwgMTI2LjQgODUuNiB6IE0gNjcuOSA5Mi42IEwgNjcuOSA5OS45IEwgNzIuOCAxMDMgTCA3Mi43IDk1LjcgTCA2Ny45IDkyLjYgeiBNIDc3LjggOTkuMyBMIDc3LjggMTA2LjYgTCA4Mi42IDExMCBMIDgyLjYgMTAyLjYgTCA3Ny44IDk5LjMgeiBNIDg3LjQgMTA2LjIgTCA4Ny40IDExMy41IEwgOTIuNCAxMTYuOSBMIDkyLjUgMTA5LjUgTCA4Ny40IDEwNi4yIHogXCJ9XSxpW1wiR1IuSUMuRkYuQlJPQURDQVNUIFRSQU5TTUlUVEVSIEFOVEVOTkFcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4MCw2MCAyMCwyMCAyMCwtMjAgbSAtMjAsMCAwLDgwXCJ9LGlbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTYwLDc1IGwtMTUsMjUgMTUsMjVcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0xNzUsNTAgbC0zMCw1MCAzMCw1MFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk0xNTUsNTAgbC0yMCw1MCAyMCw1MFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk0xNTAsODAgbC0xNSwyMCAxNSwyMFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuQ1VTVE9NUyBTRVJWSUNFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTE1LjUgNjkuOCBDIDExNS44IDcwLjQgMTE2LjkgNzIuOSAxMTcuNSA3Mi45IEwgMTI4LjMgNzIuOSBMIDEyOC4zIDY5LjggTCAxMTUuNSA2OS44IHogTSAxMTcuMyA3NC43IEMgMTE2LjggNzQuNyAxMTYgNzUuNyAxMTUuOCA3Ni4xIEwgMTE3LjIgNzYuMSBMIDExNy4yIDc2LjggQyAxMTcuMiA3OS42IDExOS44IDgxLjggMTIyLjggODEuOCBDIDEyNi41IDgxLjggMTI4LjMgNzguNiAxMjguMyA3NC43IEwgMTE3LjMgNzQuNyB6IE0gMTExLjMgODMuNiBDIDExMC41IDgzLjYgOTkuNCA5MS44IDk3LjggOTIuOSBDIDk1LjYgOTQuNCA5MyA5Ni4xIDkxIDk3LjcgQyA4OS4xIDk5LjIgODUuNCAxMDAuNSA4NS40IDEwMy42IEwgODUuNCAxMDQgQyA4NS40IDEwNC43IDg3LjEgMTA2LjcgODguMiAxMDYuNyBMIDg4LjggMTA2LjcgQyA5MC4yIDEwNi43IDEwOCA5My40IDExMS4zIDkxLjcgTCAxMTEuMyAxMDUuMyBMIDEyNiA4My42IEwgMTExLjMgODMuNiB6IE0gNzUuMyA4My42IEMgNzQuNSA4My42IDczLjQgODQuNCA3My40IDg1IEwgNzMuNCAxMDguOSBDIDczLjQgMTA5LjggNzMuOSAxMTAuMiA3NC40IDExMC41IEwgNzguNSAxMTAuNSBMIDc4LjUgODMuNiBMIDc1LjMgODMuNiB6IE0gNzguNSAxMTAuNSBMIDc4LjUgMTM1LjIgTCAxMDUuNiAxMzUuMiBMIDEwNS42IDExMC41IEwgNzguNSAxMTAuNSB6IE0gMTMwLjUgODMuNiBDIDEyOS42IDgzLjYgMTIzLjggOTIuOSAxMjIuOSA5NC4yIEMgMTIxLjkgOTUuNyAxMTUuNyAxMDQuNSAxMTUuNSAxMDUuMyBMIDEyNy42IDEwNS4zIEwgMTI3LjYgMTEwLjMgTCAxMTEuNSAxMTAuMyBMIDExMS41IDEzNC44IEwgMTE5LjYgMTM0LjggQyAxMjAuNiAxMzQuOCAxMjEuMSAxMjcuOSAxMjEuMyAxMjYuNiBDIDEyMS43IDEyMy45IDEyMi40IDEyMC40IDEyMi42IDExNy44IEwgMTIyLjkgMTE3LjggTCAxMjUuNCAxMzQuOCBMIDEzMy45IDEzNC44IEwgMTMzLjkgODYuNyBDIDEzMy45IDg1LjYgMTMxLjkgODMuNiAxMzAuNyA4My42IEwgMTMwLjUgODMuNlwifSx7dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxzdHJva2U6ITEsZDpcIk0gMTE3LjUgNzIuOSBMIDExNy4zIDc0LjcgTCAxMjguMyA3NC43IEwgMTI4LjMgNzIuOSBMIDExNy41IDcyLjkgeiBNIDEyNiA4My43IEwgMTExLjMgMTA1LjMgTCAxMTEuNSAxMTAuMyBMIDEyNy43IDExMC4zIEwgMTI3LjcgMTA1LjMgTCAxMTUuNSAxMDUuMyBDIDExNS43IDEwNC41IDEyMS45IDk1LjcgMTIyLjkgOTQuMyBDIDEyMy44IDkyLjkgMTI5LjYgODMuNyAxMzAuNSA4My43IEwgMTI2IDgzLjcgeiBcIn1dLGlbXCJHUi5JQy5GRi5ERVBBUlRNRU5UIE9GIEpVU1RJQ0UgKERPSilcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEwMC4yIDYyLjMgQyAxMDAuMSA2My4yIDk5IDY2LjMgOTguNyA2Ny40IEMgOTcuOCA2OS45IDk5LjQgNzAgOTkuNCA3Mi4zIEwgOTkuNCA3MyBDIDk5LjQgNzMuNyA5OC45IDczLjUgOTguMyA3My44IEMgOTYuNiA3Mi40IDk0LjIgNzEgOTEuMyA3MSBMIDkwIDcxIEMgODQuMiA3MSA4MCA3NS41IDc0LjYgNzUuNSBMIDczLjkgNzUuNSBDIDcyLjMgNzUuNSA3MS41IDc0LjEgNzEuMyA3NS44IEwgNzQuMyA3Ny4yIEMgNzEuOCA4Mi40IDY5LjkgODkuNyA2Ny41IDk1LjUgQyA2Ni4zIDk4LjYgNjUuMyAxMDEuNiA2NC4xIDEwNC43IEMgNjMuNSAxMDYuMyA2My4xIDEwNy43IDYyLjUgMTA5LjMgQyA2MiAxMTAuNSA2MS44IDExMy4xIDYwLjIgMTEzLjIgQyA2Mi40IDExNi40IDY4IDEyMC41IDczLjMgMTIwLjUgTCA3NiAxMjAuNSBDIDgxLjYgMTIwLjUgODcuMyAxMTYuNiA4OS41IDExMy4yIEwgODguMiAxMTMuMiBMIDc1LjQgNzcuMiBMIDc0LjUgNzcuMiBMIDc0LjUgNzcgTCA3NS40IDc3LjIgTCA3OC42IDc3LjcgTCA3OS4zIDc3LjcgTCA4OS4zIDc2LjIgTCA5MC40IDc2LjMgQyA5My43IDc2LjMgOTMuOCA4MC4yIDk0LjcgODAuMiBMIDk3LjcgODAuMiBMIDk3LjcgMTI5LjIgTCA4Ni4xIDEyOS4yIEwgODYuMSAxMzEuNSBMIDgxLjQgMTMxLjUgTCA4MS40IDEzNC4xIEwgNzcuNSAxMzQuMSBMIDc3LjUgMTM4LjIgTCAxMjMuMyAxMzguMiBMIDEyMy4zIDEzMy45IEwgMTE5LjMgMTMzLjkgTCAxMTkuMyAxMzEuNiBMIDExNC41IDEzMS42IEwgMTE0LjUgMTI5LjIgTCAxMDIuNiAxMjkuMiBMIDEwMi42IDgwLjIgTCAxMDYgODAuMiBDIDEwNyA4MC4yIDEwNi42IDc2LjQgMTEwLjcgNzYuNCBMIDExMS4zIDc2LjQgTCAxMjEuMiA3Ny43IEwgMTIyLjIgNzcuNyBMIDEyNS40IDc3LjMgQyAxMjQuMyA3OS43IDEyMy4xIDgzLjggMTIyLjEgODYuNCBDIDEyMC45IDg5LjYgMTE5LjkgOTIuNiAxMTguNyA5NS44IEMgMTE3LjUgOTguOSAxMTYuNiAxMDEuOSAxMTUuNCAxMDUgQyAxMTQuOSAxMDYuNCAxMTQuMiAxMDguMSAxMTMuNyAxMDkuNiBDIDExMy40IDExMC40IDExMy4xIDExMS4xIDExMi45IDExMS45IEMgMTEyLjUgMTEzLjIgMTEyLjggMTEzLjIgMTExLjIgMTEzLjIgQyAxMTMuMyAxMTYuNCAxMTkuMiAxMjAuNSAxMjQuNiAxMjAuNSBMIDEyNy4yIDEyMC41IEMgMTMyLjYgMTIwLjUgMTM4LjggMTE2LjQgMTQwLjkgMTEzLjIgTCAxMzkuOCAxMTMuMiBMIDEyNi40IDc3LjEgQyAxMjcuNCA3Ni45IDEyOS4zIDc2LjIgMTI5LjMgNzUuMyBDIDEyOS4zIDc0LjUgMTI3LjggNzUuNSAxMjYuNyA3NS41IEwgMTI2LjMgNzUuNSBDIDEyMC44IDc1LjUgMTE2LjYgNzEgMTEwLjkgNzEgTCAxMDkuNiA3MSBDIDEwNi43IDcxIDEwNC4yIDcyLjQgMTAyLjYgNzMuOCBDIDEwMS44IDczLjQgMTAxLjMgNzMuNiAxMDEuMyA3Mi4zIEMgMTAxLjMgNzEuOSAxMDIuNCA2OC44IDEwMi41IDY4LjUgTCAxMDAuNiA2Mi4zIEwgMTAwLjIgNjIuMyB6IE0gMTI2LjEgODAuOCBMIDEzNy44IDExMy4yIEwgMTE0LjEgMTEzLjIgTCAxMjYuMSA4MC44IHogTSA3NC44IDgwLjggTCA4Ni41IDExMy4yIEwgNjMuMSAxMTMuMSBMIDc0LjggODAuOCB6XCJ9LGlbXCJHUi5JQy5GRi5ESVJFQ1RJT04gRklORElOR1wiXT17dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxNDAgbDAsLTgwIE04MCw4MCBsMjAsLTIwIDIwLDIwXCIsZmlsbDohMX0saVtcIkdSLklDLkZGLkRJVklTSU9OIEFORCBCRUxPVyBTVVBQT1JUXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDAsNzUgbDE1LDI1IC0xNSwyNVwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDUwIGwzMCw1MCAtMzAsNTBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsNTAgbDIwLDUwIC0yMCw1MFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01MCw4MCBsMTUsMjAgLTE1LDIwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTSAxMDAgNjUgTCAxMTUuMiA5MS4zIEwgMTMwLjMgMTE3LjUgQyAxMzMuMyAxMTIuNCAxMzUgMTA2LjQgMTM1IDEwMCBDIDEzNSA4MC43IDExOS4zIDY1IDEwMCA2NSB6IE0gMTAwIDY1IEMgODAuNyA2NSA2NSA4MC43IDY1IDEwMCBDIDY1IDEwNi40IDY2LjcgMTEyLjQgNjkuNyAxMTcuNSBMIDg0LjggOTEuMyBMIDEwMCA2NSB6IE0gNjkuNyAxMTcuNSBDIDc1LjcgMTI4IDg3IDEzNSAxMDAgMTM1IEMgMTEzIDEzNSAxMjQuMyAxMjggMTMwLjMgMTE3LjUgTCAxMDAgMTE3LjUgTCA2OS43IDExNy41IHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsc3Ryb2tlOiExLGQ6XCJNIDY5LjcsMTE3LjUgMTAwLDY1IGwgMzAuMyw1Mi41IHpcIn1dLGlbXCJHUi5JQy5GRi5GSUVMRCBBUlRJTExFUlkgUk9DS0VUXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE1MCBsMCwtOTcgTTg1LDEzMCBsMCwtNTAgTTExNSwxMzAgbDAsLTUwIE04NSw3MyBsMTUsLTIwIDE1LDIwXCIsZmlsbDohMX0saVtcIkdSLklDLkZGLkhFQURRVUFSVEVSUyBPUiBIRUFEUVVBUlRFUlMgRUxFTUVOVFwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTM1LDgwIGwxMzAsMCBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSw4MCBsMTUwLDAgXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDgwIGwxMTAsMCBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsODAgbDEwMCwwIFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuSE9SU0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTI5LDcyLjggYyAwLDAgLTYuMywyIC05LDIuNiAtMy40LDAuNyAtNC45LDEuOCAtNy43LDMuMSAtNC4yLDEuOSAtNi44LDMuNiAtMTEuMyw0LjMgLTMuMywwLjUgLTcuNywxLjcgLTExLDEgLTMuOSwtMC45IC02LjEsLTIuOSAtMTAuMSwtMi45IC0zLjcsLTAgLTcuNCwtMC42IC0xMC42LDEuMyAtMi42LDEuNiAtNC43LDQuMiAtNS44LDcuMSAtMi4zLDUuNCAtMC44LDEyLjUgLTEuMiwxOC40IC0wLjIsMy4xIC0wLjQsOS4zIC0wLjYsMTAuMiAwLDAgMS42LC0wIDMuNCwtMi41IDAuOSwtMS4yIDEuNywtMy40IDEuOSwtNC45IDAuNSwtMy4xIC0wLjcsLTcuNSAtMC40LC0xMCAxLjEsLTAuMyAyLjQsMi44IDIuNiw0LjcgMC4yLDIgLTEsMy4zIC0xLjQsNS4yIC0wLjUsMyAwLjMsNSAwLjYsOC4zIDAuMSwxLjYgMC44LDMuOSAwLjUsNiAtMC4yLDIgLTAuMiw0LjMgLTAuMiw0LjMgbCA2LjksMCAtMC40LC0zLjggYyAwLDAgLTEuOCwtMi41IC0yLjEsLTQuMyAtMC41LC0yLjcgLTAuNSwtNS40IDAuMiwtOCAwLjUsLTIgMy4xLC00LjMgNC4xLC02LjEgMS44LC0zLjEgMy4xLC03LjEgMy4xLC03LjEgMCwwIDUuMSwzLjQgOS4xLDQuMiAzLjgsMC44IDExLjYsMS40IDExLjYsMS40IDAsMCAtMC4yLDcuMyAwLjEsMTIuNCAtMCwwLjEgMC4zLDMuOSAwLjMsMy4xIC0xLjQsMy4yIC0wLDguMiAtMCw4LjIgMCwwIDIuOSwwIDYuMywtMCBsIC0wLjMsLTMuNCBjIDAsMCAtMS41LC0zLjUgLTEuNSwtNS4zIDAsLTMuMSAwLjEsLTUuOSAwLjksLTguOSAwLjQsLTEuMiAwLjcsLTIuOSAxLjMsLTQgMS40LC0yLjIgMy4xLC0zLjggNC4yLC02LjEgMS4xLC0yLjYgMi4zLC01LjMgMy42LC03LjkgMS42LC0zLjMgNy44LC03LjMgNy44LC03LjMgMCwwIDUsMi45IDguNCw0LjkgMS4yLDAuNyAzLDAuMSAzLjcsLTEgMC43LC0xLjEgMC44LC0yLjIgMC4zLC0zLjMgLTMuMiwtNi43IC03LjgsLTkuNCAtNy44LC05LjQgelwiLHN0cm9rZTohMX0saVtcIkdSLklDLkZGLklORkFOVFJZXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsNjVMMTUwLDEzNU01MCwxMzVMMTUwLDY1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDUwIEwxNzUsMTUwIE0yNSwxNTAgTDE3NSw1MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsNDVMMTU1LDE1NU00NSwxNTVMMTU1LDQ1XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk02MCw3MEwxNDAsMTMwTTYwLDEzMEwxNDAsNzBcIn19W1RdLGlbXCJHUi5JQy5GRi5JTkZBTlRSWSBESVNNT1VOVEVEXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsNjVMMTUwLDEzNU01MCwxMzVMMTUwLDY1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwibSA0NSw3MCAxMTAsNjAgTSA0NSwxMzAgMTU1LDcwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw0NUwxNTUsMTU1TTQ1LDE1NUwxNTUsNDVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTYwLDcwTDE0MCwxMzBNNjAsMTMwTDE0MCw3MFwifX1bVF0saVtcIkdSLklDLkZGLklOVEVSQ0VQVFwiXT17dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxMjAgbDAsLTYwIE04MCwxMjAgbDIwLDIwIDIwLC0yMFwifSxpW1wiR1IuSUMuRkYuSkFNTUlOR1wiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTYzLDYwIGMxMCwwIDAsMTAgNywxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCA3LC0xMCBNNDAsNzUgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTBcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSw2MCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIE0yNSw3NSBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDYwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgIE00NSw3NSBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwIGMxMCwwIDAsLTEwIDEwLC0xMCBjMTAsMCAwLDEwIDEwLDEwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTY3LDYwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTAsMTAgYzEwLDAgMCwtMTAgMTAsLTEwIGMxMCwwIDAsMTAgMTMsMTAgICBNNTIsNzUgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCAxMCwtMTAgYzEwLDAgMCwxMCAxMCwxMCBjMTAsMCAwLC0xMCA3LC0xMFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuTEFXIEVORk9SQ0VNRU5UXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDk5LjYsNTEgYyAtMi44LDAgLTUsMi4zIC01LDUuMyAwLDIuMSAxLjIsMy45IDIuOCw0LjcgTCA4Ny44LDc4LjMgNjkuNSw3OC40IGMgLTAuMSwtMi44IC0yLjMsLTUuMSAtNSwtNS4xIC0yLjgsMCAtNSwyLjMgLTUsNS4zIDAsMi45IDIuMiw1LjMgNSw1LjMgMC43LDAgMS40LC0wLjIgMiwtMC40IGwgOS4yLDE2LjggLTkuNCwxNy4yIGMgLTAuNiwtMC4yIC0xLjIsLTAuNCAtMS44LC0wLjQgLTIuOCwwIC01LDIuNCAtNSw1LjMgMCwyLjkgMi4yLDUuMyA1LDUuMyAyLjgsMCA1LC0yLjMgNSwtNS4zIDAsLTAuMSAtMCwtMC4yIC0wLC0wLjMgbCAxOC4zLDAuMSA5LjUsMTcuMSBjIC0xLjYsMC45IC0yLjcsMi42IC0yLjcsNC42IDAsMi45IDIuMyw1LjMgNSw1LjMgMi44LDAgNSwtMi4zIDUsLTUuMyAwLC0xLjkgLTAuOSwtMy41IC0yLjMsLTQuNCBsIDkuNiwtMTcuMyAxOC43LC0wLjEgYyAtMCwwLjEgLTAsMC4yIC0wLDAuMyAwLDIuOSAyLjMsNS4zIDUsNS4zIDIuOCwwIDUsLTIuMyA1LC01LjMgMCwtMi45IC0yLjIsLTUuMyAtNSwtNS4zIC0wLjgsMCAtMS41LDAuMiAtMi4xLDAuNSBsIC05LjUsLTE3LjQgOS41LC0xNy40IGMgMC42LDAuMyAxLjQsMC41IDIuMSwwLjUgMi44LDAgNSwtMi40IDUsLTUuMyAwLC0yLjkgLTIuMiwtNS4zIC01LC01LjMgLTIuOCwwIC01LDIuMyAtNSw1LjMgMCwwLjEgMCwwLjIgMCwwLjMgTCAxMTEuOCw3OC4zIDEwMi4xLDYwLjggYyAxLjUsLTAuOSAyLjUsLTIuNiAyLjUsLTQuNSAwLC0yLjkgLTIuMiwtNS4zIC01LC01LjMgelwifSxpW1wiR1IuSUMuRkYuTUFJTiBHVU4gU1lTVEVNXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTUsNjVMNTUsMTM1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTU1LDUwTDU1LDE1MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTUsNDVMNTUsMTU1XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01NSw3Mkw1NSwxMjhcIn19W1RdLGlbXCJHUi5JQy5GRi5NRURJQ0FMXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLFwiK1MuYmJveC55MStcIkwxMDAsXCIrUy5iYm94LnkyK1wiTVwiK1MuYmJveC54MStcIiwxMDBMXCIrUy5iYm94LngyK1wiLDEwMFwifSxpW1wiR1IuSUMuRkYuTUVESUNBTCBUSEVBVEVSXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE3MCBsMCwtMTQwIE00MCw3NSBsMTUsMjUgLTE1LDI1IE0xNjAsNzUgbC0xNSwyNSAxNSwyNSBNNTUsMTAwIGw5MCwwXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE1MCBsMCwtMTAwIE0yNSw1MCBsMzAsNTAgLTMwLDUwIE0xNzUsNTAgbC0zMCw1MCAzMCw1MCBNNTUsMTAwIGw5MCwwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxNTUgbDAsLTExMCAgTTQ1LDUwIGwyMCw1MCAtMjAsNTAgTTE1NSw1MCBsLTIwLDUwIDIwLDUwIE02NSwxMDAgbDcwLDBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE3MiBsMCwtMTQ0IE01MCw4MCBsMTUsMjAgLTE1LDIwIE0xNTAsODAgbC0xNSwyMCAxNSwyMCBNNjUsMTAwIGw3MCwwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5NRURJQ0FMIENPUlBTXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLDE3MCBsMCwtMTQwIE0xNjAsNzUgbC0xNSwyNSAxNSwyNSBNMzAsMTAwIGwxMTUsMFwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxNTAgbDAsLTEwMCAgTTE3NSw1MCBsLTMwLDUwIDMwLDUwIE0yNSwxMDAgbDEyMCwwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTEwMCwxNTUgbDAsLTExMCBNMTU1LDUwIGwtMjAsNTAgMjAsNTAgTTQ1LDEwMCBsOTAsMFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTcyIGwwLC0xNDQgIE0xNTAsODAgbC0xNSwyMCAxNSwyMCBNMjgsMTAwIGwxMTAsMFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl09W2lbXCJHUi5JQy5GRi5NRURJQ0FMXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk03MCw5MCBsMCwyMCAgTTEzMCw5MCBsMCwyMFwifV0saVtcIkdSLklDLkZGLk1JTElUQVJZIFBPTElDRVwiXT17dHlwZTpcInBhdGhcIixkOlwiTSAxMDAsMTQwIEMgNTMuNzQ2NSwxMjIuNjU0IDcxLjA5MTYsOTUuNjczNyA2NS4zMDk5LDcwLjYxOTcgYyAxMS41NjM0LDEzLjQ5MDYgMjMuMTI2NywxMy40OTA2IDM0LjY5MDEsMCAxMS41NjQsMTMuNDkwNiAyMy4xMjYsMTMuNDkwNiAzNC42OSwwIEMgMTI4LjkwOCw5NS42NzM3IDE0Ni4yNTQsMTIyLjY1NCAxMDAsMTQwIFpcIixmaWxsOiExfSxpW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNMTAwLFwiK1MuYmJveC55MStcIkwxMDAsXCIrUy5iYm94LnkyfSxpW1wiR1IuSUMuRkYuTkFWQUxcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCwxNDUgMTAwLDY1XCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsNzAgNjAsMFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDU3LjgsMTA1LjUgYyAtMi4yLDAuMSAxLjMsMjAuNiAyLjgsMjIuMSAwLjgsMC44IDMuNSwtMy44IDQuNiwtMi42IDE3LjQsMjAuMiAzMywxOS43IDM0LjcsMTkuNiAwLDAgMC4yLC0wIDAuMywwIDEuNywwLjEgMTcuMywwLjUgMzQuNywtMTkuNiAxLC0xLjIgMy43LDMuNCA0LjYsMi42IDEuNCwtMS41IDQuOSwtMjEuOSAyLjgsLTIyLjEgLTIuMiwtMC4xIC00LDQuMiAtNi43LDYuNCAtMywyLjQgLTcuNSwzLjQgLTcuNyw0LjUgLTAuMSwwLjggNC45LDMuNSAzLjksNC45IC01LjEsNi4zIC0xNS4xLDE2LjYgLTMxLjMsMTcgbCAtMC4zLDQuMyAtMC4zLC00LjMgYyAtMTYuMiwtMC40IC0yNi4zLC0xMC43IC0zMS4zLC0xNyAtMS4xLC0xLjMgNCwtNC4xIDMuOSwtNC45IC0wLjIsLTEgLTQuNywtMiAtNy43LC00LjUgLTIuNywtMi4zIC00LjUsLTYuNiAtNi43LC02LjQgelwiLHN0cm9rZTohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6NjAscjo1LGZpbGw6ITF9XSxpW1wiR1IuSUMuRkYuUFJJU09OXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSA2Mi41IDY3LjkgTCA2Mi41IDczLjQgTCA2OS45IDczLjQgTCA2OS45IDEwNiBDIDY2LjggMTA2LjcgNjQuNCAxMDkuNiA2NC40IDExMy40IEMgNjQuNCAxMTYgNjUuOCAxMTYuOSA2NS45IDExOC40IEMgNjYgMTIwLjQgNjUuNiAxMjIuNSA2NS42IDEyNC43IEwgNjUuNiAxMjYuNiBMIDYyLjUgMTI2LjYgTCA2Mi41IDEzMi4xIEwgMTM3LjUgMTMyLjEgTCAxMzcuNSAxMjYuNiBMIDEzNiAxMjYuNiBMIDEzNS42IDExNy41IEMgMTM4LjMgMTEzLjQgMTM1LjggMTA3IDEzMS41IDEwNiBMIDEzMS41IDczLjQgTCAxMzcuNSA3My40IEwgMTM3LjUgNjcuOSBMIDYyLjUgNjcuOSB6IE0gNzQuNSA3My40IEwgODcuMiA3My40IEwgODcuMiAxMDguNCBDIDg3LjIgMTA5LjIgODQuOCAxMDkuNyA4My45IDExMC42IEMgODMuMSAxMTEuMyA4Mi4yIDExMi43IDgxLjYgMTEzLjYgQyA4MC41IDExNS4yIDc4LjYgMTE4LjcgNzguNiAxMjEuMSBMIDc2LjEgMTE3IEMgNzYuNSAxMTYuNCA3Ni45IDExNC42IDc2LjkgMTEzLjcgTCA3Ni45IDExMi4yIEMgNzYuOSAxMDkuNSA3NC41IDEwNy45IDc0LjUgMTA2LjUgTCA3NC41IDczLjQgeiBNIDkxLjUgNzMuNCBMIDExMC4yIDczLjQgTCAxMTAuMiA5MC45IEMgMTA5IDg5LjYgMTA4LjggODcuOCAxMDYuOCA4NS43IEMgMTA1LjQgODQuMyAxMDMuNSA4MyAxMDAuOCA4MyBMIDEwMC4zIDgzIEMgOTguMiA4MyA5Ni4xIDgzLjYgOTQuOSA4NC41IEMgOTQuMyA4NSA5My42IDg1LjQgOTMuMSA4NiBDIDkyLjQgODYuNiA5Mi4yIDg3LjMgOTEuNSA4Ny44IEwgOTEuNSA3My40IHogTSAxMTQuMyA3My40IEwgMTI3LjIgNzMuNCBMIDEyNy4yIDEwNi41IEMgMTI3LjIgMTA2LjkgMTI0LjggMTA5LjIgMTI0LjQgMTExLjEgQyAxMjMuNyAxMTQuMiAxMjQuNSAxMTQuNiAxMjUgMTE3IEwgMTIzLjMgMTIwLjIgQyAxMjIuNyAxMTguMyAxMjAuNyAxMTUgMTE5LjcgMTEzLjUgQyAxMTguMyAxMTEuNCAxMTcuMyAxMDkuMSAxMTQuMyAxMDguOSBMIDExNC4zIDczLjQgeiBNIDk5LjcgODQuOSBMIDEwMC42IDg0LjkgQyAxMDQuOCA4NC45IDEwOC41IDkwLjQgMTA4LjUgOTQuNyBMIDEwOC41IDk2LjQgQyAxMDguNSAxMDAuNCAxMDUgMTA2LjIgMTAxLjMgMTA2LjIgTCA5OS40IDEwNi4yIEMgOTQuOSAxMDYuMiA5MS40IDEwMC4yIDkxLjYgOTUuNSBDIDkxLjggOTAuNyA5NC45IDg0LjkgOTkuNyA4NC45IHogTSAxMTAuMyAxMDAuNSBMIDExMC4yIDEwNi45IEwgMTA2LjcgMTA2LjMgTCAxMTAuMyAxMDAuNSB6IE0gOTEuNSAxMDMuNiBMIDk0LjMgMTA2LjggTCA5MS41IDEwNy40IEwgOTEuNSAxMDMuNiB6IE0gNzAuNyAxMDcuOSBDIDcyLjkgMTA3LjkgNzQuNyAxMTAuNCA3NC43IDExMi43IEwgNzQuNyAxMTMuNCBDIDc0LjcgMTE3LjkgNzAgMTIwLjIgNjcuNiAxMTYuNyBDIDY1LjcgMTEzLjggNjYuOSAxMDcuOSA3MC43IDEwNy45IHogTSAxMzAuNiAxMDcuOSBDIDEzMi44IDEwNy45IDEzNC40IDExMC44IDEzNC40IDExMy4yIEwgMTM0LjQgMTEzLjQgQyAxMzQuNCAxMTYuNyAxMzMgMTE2LjcgMTMyIDExOC4yIEwgMTI4LjkgMTE4LjMgTCAxMjYuNyAxMTUuNCBMIDEyNi41IDExMy4yIEMgMTI2LjEgMTExIDEyOC4yIDEwNy45IDEzMC42IDEwNy45IHogTSAxMDUuOSAxMDguMiBDIDEwNy4yIDEwOC4yIDEwOC45IDEwOSAxMTAuMiAxMDkuMyBMIDExMC4yIDEyNi42IEwgOTEuNSAxMjYuNiBMIDkxLjUgMTEwLjEgQyA5MS41IDEwOC42IDk2LjYgMTA4LjkgOTguNCAxMDguOSBDIDEwMS4xIDEwOC45IDEwNCAxMDguMiAxMDUuOSAxMDguMiB6IE0gMTE0LjMgMTEwLjggQyAxMTcuMiAxMTIuMyAxMTcuNCAxMTMuNCAxMTkgMTE2LjQgQyAxMjAuMSAxMTguNSAxMjEuNyAxMjAuOSAxMjEuNyAxMjQgQyAxMjEuOSAxMjQuMiAxMjIuMyAxMjQuOSAxMjIuNyAxMjQuOSBDIDEyNCAxMjQuOSAxMjUuNSAxMTkuOCAxMjYuNyAxMTguOSBMIDEyNi43IDExOS40IEwgMTI3LjIgMTE5LjQgTCAxMjcuMiAxMjYuNiBMIDExNC4zIDEyNi42IEwgMTE0LjMgMTEwLjggeiBNIDg3LjIgMTExLjMgTCA4Ny4yIDEyNi42IEwgNzQuNSAxMjYuNiBMIDc0LjUgMTE4LjkgQyA3NS44IDExOS40IDc3LjQgMTI1LjQgNzguNiAxMjUuNCBDIDgwLjYgMTI1LjQgODAuNyAxMTkuNiA4MS45IDExNy41IEMgODMuMiAxMTUuMyA4NC40IDExMS45IDg3LjIgMTExLjMgeiBNIDEzMy42IDExOS43IEwgMTMzLjkgMTI2LjYgTCAxMzEuNSAxMjYuNiBMIDEzMS41IDEyMC40IEwgMTMzLjYgMTE5LjcgeiBNIDY4LjEgMTE5LjkgQyA2OC42IDEyMC4xIDY5LjkgMTIwLjMgNjkuOSAxMjEuMSBMIDY5LjkgMTI2LjYgTCA2Ny43IDEyNi42IEwgNjguMSAxMTkuOSB6XCJ9LGlbXCJHUi5JQy5GRi5KQUlMIEJSRUFLXCJdPVtpW1wiR1IuSUMuRkYuUFJJU09OXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZXdpZHRoOjUsZDpcIm0gNzAsMTMwIEwxMzAsNzBcIixmaWxsOiExfV0saVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsMTM1TDE1MCw2NVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSwxNTBMMTc1LDUwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSwxNTVMMTU1LDQ1XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk02MCwxMzBMMTQwLDcwXCJ9fVtUXSxpW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0UgRElTTU9VTlRFRFwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTUwLDEzNUwxNTAsNjVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDQ1LDEzMCAxNTUsNzBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDE1NUwxNTUsNDVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTYwLDEzMEwxNDAsNzBcIn19W1RdLGlbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRSBFUVVQSU1FTlRcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk01MCwxMzVMMTUwLDY1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTSA1MC42IDEzMi45IEwgMTQ5LjMgNjdcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTQ1LDE1NUwxNTUsNDVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTYwLDEzMEwxNDAsNzBcIn19W1RdLGlbXCJHUi5JQy5GRi5TRUFSQ0hcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDE0NSAwLC05MCBtIDMwLDY1IC0zMCwyNSAtMzAsLTI1XCIsZmlsbDohMX0saVtcIkdSLklDLkZGLlNFTlNPUlwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk1cIitTLmJib3gueDErXCIsMTAwIEw3NSwxMDAgTVwiKygyMDAtUy5iYm94LngxKStcIiwxMDAgTDEyNSwxMDBcIn0se3R5cGU6XCJwYXRoXCIsZDpcIk02NSw4NSBsNzAsMCAtMTUsMzAgLTQwLDAgelwiLGZpbGw6ISFSJiZHfV0saVtcIkdSLklDLkZGLlNJR05BTFwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTAsNjUgMTAwLDExMCAxMDAsOTAgMTUwLDEzNVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTI1LDUwIDEwMCwxMTAgMTAwLDkwIDE3NSwxNTBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNDUsNDUgMTAwLDExMCAxMDAsOTAgMTU1LDE1NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01Nyw3MCAxMDAsMTEwIDEwMCw5MCAxNDMsMTMwXCJ9fVtUXSxpW1wiR1IuSUMuRkYuU0lHTkFMIERJU01PVU5URURcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTUwLDY1IDEwMCwxMTAgMTAwLDkwIDE1MCwxMzVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNTIsNjYuOCAxMDAsMTEwIGwgMCwtMjAgNDcuOSw0My4xXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTQ1LDQ1IDEwMCwxMTAgMTAwLDkwIDE1NSwxNTVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTcsNzAgMTAwLDExMCAxMDAsOTAgMTQzLDEzMFwifX1bVF0saVtcIkdSLklDLkZGLlNPVU5EXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTVwiK1MuYmJveC54MStcIiwxMDAgTDc1LDEwMCBNXCIrKDIwMC1TLmJib3gueDEpK1wiLDEwMCBMMTI1LDEwMFwifSx7dHlwZTpcInBhdGhcIixkOlwiTTY1LDg1IGw3MCwwIC0xNSwzMCAtNDAsMCB6XCIsZmlsbDohIVImJkd9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiU1wifV0saVtcIkdSLklDLkZGLlNVUFBMWVwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTM1LDEyMCBsMTMwLDAgXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMjUsMTIwIGwxNTAsMFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSwxMjAgbDExMCwwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTUwLDEyMCBsMTAwLDAgXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZDpcIk0xNjAsNzUgbC0xNSwyNSAxNSwyNSBNMzUsMTIwIGwxMjAsMFwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTE3NSw1MCBsLTMwLDUwIDMwLDUwIE0yNSwxMjAgbDEzNSwwXCIsZmlsbDohMX0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixkOlwiTTE1NSw1MCBsLTIwLDUwIDIwLDUwIE00NSwxMjAgbDEwMCwwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwiTTE1MCw4MCBsLTE1LDIwIDE1LDIwIE01MCwxMjAgbDEwMCwwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5TVVBQTFkgRElWSVNJT04gQU5EIEJFTE9XXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDQ1LDEyMCAxMjAsMCBNIDQwLDc1IDU1LDEwMCA0MCwxMjVcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIm0gNDUsMTIwIDEzMCwwIE0gMjUsNTAgNTUsMTAwIDI1LDE1MFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIm0gNTcsMTIwIDk4LDAgTSA0NSw1MCA2NSwxMDAgNDUsMTUwXCIsZmlsbDohMX0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixkOlwibSA1MCwxMjAgMTAwLDAgTSA1MCw4MCA2NSwxMDAgNTAsMTIwXCIsZmlsbDohMX19W1RdLGlbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTQwLDc1IGwxNSwyNSAtMTUsMjUgTTE2MCw3NSBsLTE1LDI1IDE1LDI1IE00NSwxMjAgbDExMCwwIFwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwiTTI1LDUwIGwzMCw1MCAtMzAsNTAgTTE3NSw1MCBsLTMwLDUwIDMwLDUwIE00MCwxMjAgbDEyMCwwIFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIiBNNDUsNTAgbDIwLDUwIC0yMCw1MCBNMTU1LDUwIGwtMjAsNTAgMjAsNTAgTTU1LDEyMCBsOTAsMCBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsODAgbDE1LDIwIC0xNSwyMCBNMTUwLDgwIGwtMTUsMjAgMTUsMjAgTTUwLDEyMCBsMTAwLDBcIixmaWxsOiExfX1bVF0saVtcIkdSLklDLkZGLkNMQVNTIEFMTFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkFMTFwifSxpW1wiR1IuSUMuRkYuQ0xBU1MgTVVMVElQTEVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNVUxUXCJ9LGlbXCJHUi5JQy5GRi5DTEFTUyBJXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNSw4NSBjIC01LDEwIC01LDIwIDAsMzAgbSAwLC0zMCBjIC0yMCwwIC0yMCwzMCAwLDMwXCIsZmlsbDohMX0saVtcIkdSLklDLkZGLk5BVE8gU1VQUExZIENMQVNTIElcIl09YShcIklcIiksaVtcIkdSLklDLkZGLkNMQVNTIElJXCJdPWlbXCJHUi5JQy5RVUFSVEVSTUFTVEVSXCJdLGlbXCJHUi5JQy5GRi5OQVRPIFNVUFBMWSBDTEFTUyBJSVwiXT1hKFwiSUlcIiksaVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTIwIDAsLTIwIC0xNSwtMjAgMzAsMCAtMTUsMjAgXCIsZmlsbDohMX0saVtcIkdSLklDLkZGLkNMQVNTIElWXCJdPWlbXCJHUi5JQy5FTkdJTkVFUlwiXSxpW1wiR1IuSUMuRkYuTkFUTyBTVVBQTFkgQ0xBU1MgSVZcIl09YShcIklWXCIpLGlbXCJHUi5JQy5GRi5DTEFTUyBWXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDExNSAwLC0yNSBjIDAsLTEwIDIwLC0xMCAyMCwwIGwgMCwyNSBtIC0yNSwwIDMwLDBcIixmaWxsOiExfSxpW1wiR1IuSUMuSU5URVJQUkVURVIvVFJBTlNMQVRPUlwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsOTAgMTUsMCAwLC0xMCAyMCwyMCAtMjAsMjAgMCwtMTAgLTE1LDAgelwiLGZpbGw6R30se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTM1LDkwIC0xNSwwIDAsLTEwIC0yMCwyMCAyMCwyMCAwLC0xMCAxNSwwIHpcIn1dLGlbXCJHUi5JQy5GRi5OQVRPIFNVUFBMWSBDTEFTUyBBTExcIl09YShcIkFMTFwiKSxpW1wiR1IuSUMuRkYuQ0xBU1MgVklcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5Ojg1LHI6NSxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSA4NSw5NSAzMCwwIG0gLTE1LDE1IDAsLTIwIG0gLTEwLDMwIDEwLC0xMCAxMCwxMFwiLGZpbGw6ITF9XSxpW1wiR1IuSUMuRkYuQ0xBU1MgVklJXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjEwMCxyOjd9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTI1LGN5OjEwMCxyOjd9LHt0eXBlOlwicGF0aFwiLGQ6XCJNNzUsMTAwIGMwLC0yMCA1MCwtMjAgNTAsMFwiLGZpbGw6ITF9XSxpW1wiR1IuSUMuRkYuQ0xBU1MgVklJSVwiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtOTAgTTE2NSw4MCBsLTEzMCwwXCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtNzAgTTE3NSw4MCBsLTE1MCwwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTc1IE0xNTUsODAgbC0xMTAsMFwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC05MiBNMTUzLDgwIGwtMTA2LDBcIn19W1RdLGlbXCJHUi5JQy5GRi5DTEFTUyBWSUlJLlRIRUFURVJcIl09e1Vua25vd246e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTkwIE0xNTUsODAgbC0xMTAsMFwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTcwIE0xNTUsODAgbC0xMTAsMFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC03NSBNMTQ1LDgwIGwtOTAsMFwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC05MiBNMTUzLDgwIGwtMTA2LDBcIn19W1RdLGlbXCJHUi5JQy5GRi5DTEFTUyBWSUlJLkNPUlBTXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC05MCBNMTU1LDgwIGwtMTIwLDBcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0xMDAsMTIwIGwwLC03MCBNMTU1LDgwIGwtMTMwLDBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMTAwLDEyMCBsMCwtNzUgTTE0NSw4MCBsLTEwMCwwXCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTEwMCwxMjAgbDAsLTkyIE0xNTMsODAgbC0xMDYsMFwifX1bVF0saVtcIkdSLklDLkZGLkNMQVNTIElYXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxMCxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTEwIDAsMTAgbSAwLC0zMCAwLC0xMCBtIDguNywxNC4yIDguNCwtNC44IG0gLTguNCwxNS45IDgsNS40IG0gLTI1LjQsLTUuNCAtOC4yLDUuNCBtIDguMiwtMTYuMyAtOCwtNS40XCIsZmlsbDohMX1dLGlbXCJHUi5JQy5FUVVJUE1FTlQgTUFOVUZBQ1RVUkVcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjIwLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMjAgMCwyMCBtIDAsLTYwIDAsLTIwIG0gMTguMSwyOC40IDE2LC05LjYgbSAtMTYsMzEuMiAxNiwxMiBNIDgyLjUsMTEwIDY2LjEsMTIyIE0gODIuNSw4OC44IDY2LjUsNzhcIixmaWxsOiExfV0saVtcIkdSLklDLkZGLkNMQVNTIFhcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJDQVwifSxpW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdPXtVbmtub3duOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDAsNzUgbDE1LDI1IC0xNSwyNSBNMTYwLDc1IGwtMTUsMjUgMTUsMjVcIixmaWxsOiExfSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZDpcIk0yNSw1MCBsMzAsNTAgLTMwLDUwIE0xNzUsNTAgbC0zMCw1MCAzMCw1MFwiLGZpbGw6ITF9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZDpcIk00NSw1MCBsMjAsNTAgLTIwLDUwIE0xNTUsNTAgbC0yMCw1MCAyMCw1MFwiLGZpbGw6ITF9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZDpcIk01MCw4MCBsMTUsMjAgLTE1LDIwIE0xNTAsODAgbC0xNSwyMCAxNSwyMFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuSUMuRkYuVVMgTUFSU0hBTFMgU0VSVklDRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNzAgNy4xLDIwLjMgMjEuNSwwLjQgLTE3LjEsMTMgNi4yLDIwLjYgTCAxMDAsMTEyIDgyLjQsMTI0LjMgODguNiwxMDMuNyA3MS41LDkwLjcgOTIuOSw5MC4zIHogbSAwLC01IGMgLTE5LjMsMCAtMzUsMTUuNyAtMzUsMzUgMCwxOS4zIDE1LjcsMzUgMzUsMzUgMTkuMywwIDM1LC0xNS43IDM1LC0zNSAwLC0xOS4zIC0xNS43LC0zNSAtMzUsLTM1IHogbSAwLDUgYyAxNi42LDAgMzAsMTMuNCAzMCwzMCAwLDE2LjYgLTEzLjQsMzAgLTMwLDMwIC0xNi42LDAgLTMwLC0xMy40IC0zMCwtMzAgMCwtMTYuNiAxMy40LC0zMCAzMCwtMzAgelwifSxpW1wiR1IuTTEuQUNDSURFTlRcIl09bChcIkFDQ1wiKSxpW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk04NSw1NSBMMTAwLDc1IDExNSw1NVwifSxpW1wiR1IuTTEuQVJNT1JFRFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDkwLDYwIDIwLDAgYyAxMCwwIDEwLDE1IDAsMTUgTCA5MCw3NSBDIDgwLDc1IDgwLDYwIDkwLDYwXCJ9LGlbXCJHUi5NMS5DQVJHT1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw2MCAwLDE1IC0xNSwwIDAsLTE1IDMwLDAgMCwxNSAtMTUsMFwifSxpW1wiR1IuTTEuQU1NVU5JVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTk1LDc1IEw5NSw2MCBDOTUsNTUgMTA1LDU1IDEwNSw2MCBMMTA1LDc1IE05MCw3NSBMMTEwLDc1XCIsZmlsbDohMX0saVtcIkdSLk0xLkFNUEhJQklPVVMgV0FSRkFSRSBTSElQIFwiXT17dHlwZTpcInBhdGhcIixkOlwiTSAxMTMsNzUgMTAwLDc1IDkwLDY0LjMgOTUsNjUgbCAwLC04IDEwLDAgMCw4IDUuNSwtMC42IEwgMTAwLDc1XCJ9LGlbXCJHUi5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl09bChcIlBcIiksaVtcIkdSLk0xLkFSRUFcIl09bChcIkFSRUFcIiksaVtcIkdSLk0xLkFSTVlcIl09bChcIlhYWFhcIiksaVtcIkdSLk0xLkFUVEFDS1wiXT1sKFwiQVwiKSxpW1wiR1IuTTEuQVZJQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsNjAgMCwxNSA1MCwtMTUgMCwxNSB6XCJ9LGlbXCJHUi5NMS5CQVRUQUxJT05cIl09bChcIklJXCIpLGlbXCJHUi5NMS5CSU9MT0dJQ0FMXCJdPWwoXCJCXCIpLGlbXCJHUi5NMS5CT1JERVJcIl09bChcIkJPUlwiKSxpW1wiR1IuTTEuQlJJREdJTkdcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4MCw4MCA1LC01IDMwLDAgNSw1IG0gLTQwLC0yMCA1LDUgMzAsMCA1LC01XCJ9LGlbXCJHUi5NMS5CUklHQURFXCJdPWwoXCJYXCIpLGlbXCJHUi5NMS5DSEVNSUNBTFwiXT1sKFwiQ1wiKSxpW1wiR1IuTTEuSU5UUlVTSU9OXCJdPWwoXCJJXCIpLGlbXCJHUi5NMS5DSEVNSUNBTCBTVVJWRUlMTEFOQ0VcIl09bChcIlJTXCIpLGlbXCJHUi5NMS5DSVZJTElBTlwiXT1sKFwiQ0lWXCIpLGlbXCJHUi5NMS5DTE9TRSBQUk9URUNUSU9OXCJdPWwoXCJDTFBcIiksaVtcIkdSLk0xLkNPTUJBVFwiXT1sKFwiQ0JUXCIpLGlbXCJHUi5NMS5DT01NQU5EIEFORCBDT05UUk9MXCJdPWwoXCJDMlwiKSxpW1wiR1IuTTEuQ09NTUFORCBBTkQgQ09OVFJPTCBST1RBUlkgV0lOR1wiXT1sKFI/XCJZXCI6XCJDMlwiKSxpW1wiR1IuTTEuVElMVC1ST1RPUlwiXT1sKFwiVFJcIiksaVtcIkdSLk0xLkNPTU1BTkQgUE9TVCBOT0RFXCJdPWwoXCJDUE5cIiksaVtcIkdSLk0xLkNPTU1VTklDQVRJT05TIENPTlRJTkdFTkNZIFBBQ0tBR0VcIl09bChcIkNDUFwiKSxpW1wiR1IuTTEuQ09OU1RSVUNUSU9OXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5Ojc1LGZvbnRzaXplOjIwLHRleHQ6XCJDT05TVFwifSxpW1wiR1IuTTEuQ09NUEFOWVwiXT1sKFwiSVwiKSxpW1wiR1IuTTEuQ09SUFNcIl09bChcIlhYWFwiKSxpW1wiR1IuTTEuQ1JPU1MgQ1VMVFVSQUwgQ09NTVVOSUNBVElPTlwiXT1sKFwiQ0NDXCIpLGlbXCJHUi5NMS5DUk9XRCBBTkQgUklPVCBDT05UUk9MXCJdPWwoXCJDUkNcIiksaVtcIkdSLk0xLkRFQ09OVEFNSU5BVElPTlwiXT1sKFwiRFwiKSxpW1wiR1IuTTEuREVURU5USU9OXCJdPWwoXCJERVRcIiksaVtcIkdSLk0xLkRFUFVUWVwiXT1sKFwiREVQXCIpLGlbXCJHUi5NMS5ESVJFQ1QgQ09NTVVOSUNBVElPTlNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5NSw2NSAtNSw1IDUsNSBtIDEwLC0xMCA1LDUgLTUsNSBNIDkwLDcwIGMgMjAsMCAyMCwwIDIwLDAgbSAxNSwwIGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6IG0gLTQwLDAgYyAwLDIuOCAtMi4yLDUgLTUsNSAtMi44LDAgLTUsLTIuMiAtNSwtNSAwLC0yLjggMi4yLC01IDUsLTUgMi44LDAgNSwyLjIgNSw1IHpcIn0saVtcIkdSLk0xLkRJVklOR1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwNC42LDY0LjggYyAwLDIuNyAtMi4xLDQuOCAtNC42LDQuOCAtMi41LDAgLTQuNiwtMi4yIC00LjYsLTQuOCAwLC0yLjcgMi4xLC00LjggNC42LC00LjggMi41LDAgNC42LDIuMiA0LjYsNC44IHogbSAwLDguNyA0LjYsNC44IC0xOC4zLDAgNC42LC00LjggTSAxMDguMyw2MCBsIDQuNiwwIDAsOS42IC00LjYsMCBtIC0xNi41LDAgLTQuNiwwIDAsLTkuNiA0LjYsMCBtIDE3LjQsNC44IGMgMCw1LjMgLTQuMSw5LjYgLTkuMiw5LjYgLTUuMSwwIC05LjIsLTQuMyAtOS4yLC05LjYgMCwtNS4zIDQuMSwtOS42IDkuMiwtOS42IDUuMSwwIDkuMiw0LjMgOS4yLDkuNiB6XCJ9LGlbXCJHUi5NMS5ESVZJU0lPTlwiXT1sKFwiWFhcIiksaVtcIkdSLk0xLk1BUklORSBESVZJU0lPTlwiXT1sKFwiRFwiKSxpW1wiR1IuTTEuRE9HXCJdPWwoXCJET0dcIiksaVtcIkdSLk0xLkRSSUxMSU5HXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDYwIDUsMTUgMTAsMCA1LC0xNSB6XCJ9LGlbXCJHUi5NMS5FTEVDVFJPLU9QVElDQUxcIl09bChcIkVPXCIpLGlbXCJHUi5NMS5FTkhBTkNFRFwiXT1sKFwiRU5IXCIpLGlbXCJHUi5NMS5FWFBMT1NJVkUgT1JETkFOQ0UgRElTUE9TQUxcIl09bChcIkVPRFwiKSxpW1wiR1IuTTEuRUFSTFkgV0FSTklORyBSQURBUlwiXT1sKFwiRVdSXCIpLGlbXCJHUi5NMS5GSVJFIERJUkVDVElPTiBDRU5UUkVcIl09bChcIkZEQ1wiKSxpW1wiR1IuTTEuRk9SQ0VcIl09bChcIkZcIiksaVtcIkdSLk0xLkZPUldBUkRcIl09bChcIkZXRFwiKSxpW1wiR1IuTTEuR1JPVU5EIFNUQVRJT04gTU9EVUxFXCJdPWwoXCJHU01cIiksaVtcIkdSLk0xLkhJSkFDS0lOR1wiXT1sKFwiSFwiKSxpW1wiR1IuTTEuSU5ESVZJRFVBTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNODUsNjUgbDMwLDBcIn0saVtcIkdSLk0xLklOVFJVU0lPTlwiXT1sKFwiSVwiKSxpW1wiR1IuTTEuSjFcIl09bChcIkoxXCIpLGlbXCJHUi5NMS5KMlwiXT1sKFwiSjJcIiksaVtcIkdSLk0xLkozXCJdPWwoXCJKM1wiKSxpW1wiR1IuTTEuSjRcIl09bChcIko0XCIpLGlbXCJHUi5NMS5KNVwiXT1sKFwiSjVcIiksaVtcIkdSLk0xLko2XCJdPWwoXCJKNlwiKSxpW1wiR1IuTTEuSjdcIl09bChcIko3XCIpLGlbXCJHUi5NMS5KOFwiXT1sKFwiSjhcIiksaVtcIkdSLk0xLko5XCJdPWwoXCJKOVwiKSxpW1wiR1IuTTEuSk9JTlQgTkVUV09SSyBOT0RFXCJdPWwoXCJKTk5cIiksaVtcIkdSLk0xLkxBTkRJTkcgU1VQUE9SVFwiXT1sKFwiTFNcIiksaVtcIkdSLk0xLkxBUkdFIENPTU1VTklDQVRJT05TIENPTlRJTkdFTkNZIFBBQ0tBR0VcIl09bChcIkxDQ1BcIiksaVtcIkdSLk0xLkxBUkdFIEVYVEVOU0lPTiBOT0RFXCJdPWwoXCJMRU5cIiksaVtcIkdSLk0xLkxPQUQgSEFORExJTkcgU1lTVEVNXCJdPWwoXCJMSFNcIiksaVtcIkdSLk0xLk1BSU5URU5BTkNFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODQsNzAgMzIsMCBtIDQsLTUgYyAtNSwwIC01LDEwIDAsMTAgTSA4MCw2NSBjIDUsMCA1LDEwIDAsMTBcIn0saVtcIkdSLk0xLk1FREVWQUNcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNOTUuNSw4MCBsOSwwIDAsLTkgOSwwIDAsLTkgLTksMCAwLC05IC05LDAgMCw5IC05LDAgMCw5IDksMCBaXCJ9LGlbXCJHUi5NMS5NRVRFT1JPTE9HSUNBTFwiXT1sKFwiTUVUXCIpLGlbXCJHUi5NMS5NSU5FIENPVU5URVJNRUFTVVJFXCJdPWwoXCJNQ01cIiksaVtcIkdSLk0xLk1JU1NJTEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk05NSw4MCBMOTUsNjAgQzk1LDU1IDEwNSw1NSAxMDUsNjAgTDEwNSw4MCBNMTAwLDgwIEwxMDAsNTVcIixmaWxsOiExfSxpW1wiR1IuTTEuKE1PQklMRSkgQURWSVNPUiBBTkQgU1VQUE9SVFwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDUsNjUgNSw1IC01LDUgTSA5MCw3MCBjIDIwLDAgMjAsMCAyMCwwIG0gMTUsMCBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgeiBtIC00MCwwIGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6XCIsZmlsbDohMX0saVtcIkdSLk0xLk1PQklMRSBTVUJTQ1JJQkVSIEVRVUlQTUVOVFwiXT1sKFwiTVNFXCIpLGlbXCJHUi5NMS5NT0JJTElUWSBBU1NBVUxUXCJdPWwoXCJNQVwiKSxpW1wiR1IuTTEuTU9CSUxJVFkgU1VQUE9SVFwiXT1sKFwiTVNcIiksaVtcIkdSLk0xLk1PVkVNRU5UIENPTlRST0wgQ0VOVFJFXCJdPWwoXCJNQ0NcIiksaVtcIkdSLk0xLk1VTFRJTkFUSU9OQUxcIl09bChcIk1OXCIpLGlbXCJHUi5NMS5NVUxUSU5BVElPTkFMIFNQRUNJQUxJWkVEIFVOSVRcIl09bChcIk1TVVwiKSxpW1wiR1IuTTEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNODUsNzUgbDE1LC0xNSAxNSwxNSBNODUsNjcgbDE1LC0xNSAxNSwxNVwiLGZpbGw6ITF9LGlbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSAxXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEyMCx5Ojc3LGZvbnRzaXplOjI1LHRleHQ6XCIxXCJ9LGlbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSAyXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEyMCx5Ojc3LGZvbnRzaXplOjI1LHRleHQ6XCIyXCJ9LGlbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSAzXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEyMCx5Ojc3LGZvbnRzaXplOjI1LHRleHQ6XCIzXCJ9LGlbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSA0XCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEyMCx5Ojc3LGZvbnRzaXplOjI1LHRleHQ6XCI0XCJ9LGlbXCJHUi5NMS5OQVZBTFwiXT1zLl90cmFuc2xhdGUoMCwtMzUscy5fc2NhbGUoLjYsaVtcIkdSLklDLk5BVkFMXCJdKSksaVtcIkdSLk0xLk5PREUgQ0VOVFJFXCJdPWwoXCJOQ1wiKSxpW1wiR1IuTTEuTlVDTEVBUlwiXT1sKFwiTlwiKSxpW1wiR1IuTTEuT0YtMVwiXT1sKFwiT0YtMVwiKSxpW1wiR1IuTTEuT0YtMlwiXT1sKFwiT0YtMlwiKSxpW1wiR1IuTTEuT0YtM1wiXT1sKFwiT0YtM1wiKSxpW1wiR1IuTTEuT0YtNFwiXT1sKFwiT0YtNFwiKSxpW1wiR1IuTTEuT0YtNVwiXT1sKFwiT0YtNVwiKSxpW1wiR1IuTTEuT0YtNlwiXT1sKFwiT0YtNlwiKSxpW1wiR1IuTTEuT0YtN1wiXT1sKFwiT0YtN1wiKSxpW1wiR1IuTTEuT0YtOFwiXT1sKFwiT0YtOFwiKSxpW1wiR1IuTTEuT0YtOVwiXT1sKFwiT0YtOVwiKSxpW1wiR1IuTTEuT0YtMTBcIl09bChcIk9GLTEwXCIpLGlbXCJHUi5NMS5PRi1EXCJdPWwoXCJPRi1EXCIpLGlbXCJHUi5NMS5PUEVSQVRJT05TXCJdPWwoXCJPUFNcIiksaVtcIkdSLk0xLk9QVElDQUxcIl09bChcIk9QVFwiKSxpW1wiR1IuTTEuT1ItMVwiXT1sKFwiT1ItMVwiKSxpW1wiR1IuTTEuT1ItMlwiXT1sKFwiT1ItMlwiKSxpW1wiR1IuTTEuT1ItM1wiXT1sKFwiT1ItM1wiKSxpW1wiR1IuTTEuT1ItNFwiXT1sKFwiT1ItNFwiKSxpW1wiR1IuTTEuT1ItNVwiXT1sKFwiT1ItNVwiKSxpW1wiR1IuTTEuT1ItNlwiXT1sKFwiT1ItNlwiKSxpW1wiR1IuTTEuT1ItN1wiXT1sKFwiT1ItN1wiKSxpW1wiR1IuTTEuT1ItOFwiXT1sKFwiT1ItOFwiKSxpW1wiR1IuTTEuT1ItOVwiXT1sKFwiT1ItOVwiKSxpW1wiR1IuTTEuT1RIRVJcIl09bChcIk9USFwiKSxpW1wiR1IuTTEuUEFMTEVUSVpFRCBMT0FEIFNZU1RFTVwiXT1sKFwiUExTXCIpLGlbXCJHUi5NMS5QRVJTT05ORUwgUkVDT1ZFUllcIl09bChcIkhcIiksaVtcIkdSLk0xLlBMQVRPT05cIl09W3t0eXBlOlwiY2lyY2xlXCIsc3Ryb2tlOiExLGN4OjgwLGN5OjY4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixzdHJva2U6ITEsY3g6MTAwLGN5OjY4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixzdHJva2U6ITEsY3g6MTIwLGN5OjY4LHI6OH1dLGlbXCJHUi5NMS5SQURBUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDg1LDU1IGMgMC4xLDIxLjQgMTEuNywyNC42IDI1LDI1IE0gMTE2LDU1IDEwMSw2Ny41IDEwMSw1NSA4Ni42LDY2LjlcIn0saVtcIkdSLk0xLlJBRElPIEZSRVFVRU5DWSBJREVOVElGSUNBVElPTiAoUkZJRCkgSU5URVJST0dBVE9SLyBTRU5TT1JcIl09bChcIlJGXCIpLGlbXCJHUi5NMS5SQUlMUk9BRFwiXT1zLl90cmFuc2xhdGUoMCwtNTAsW3t0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTIwIGw4MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjY1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo3NSxjeToxMjUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTI1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMzUsY3k6MTI1LHI6NX1dKSxpW1wiR1IuTTEuUkFESU9MT0dJQ0FMXCJdPWwoXCJSQURcIiksaVtcIkdSLk0xLlJBTkdFUlwiXT1sKFwiUkdSXCIpLGlbXCJHUi5NMS5SRUNPTlwiXT1sKFwiUlwiKSxpW1wiR1IuTTEuUkVHSU1FTlRcIl09bChcIklJSVwiKSxpW1wiR1IuTTEuUkVUUkFOU01JU1NJT04gU0lURVwiXT1sKFwiUlROU1wiKSxpW1wiR1IuTTEuUk9CT1RJQ1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNTIuNyAxNC45LDE0LjggYyAwLjQsLTAuMyAwLjksLTAuNCAxLjQsLTAuNCAxLjUsMCAyLjcsMS4yIDIuNywyLjcgMCwxLjQgLTEuMiwyLjcgLTIuNywyLjcgLTEuNSwwIC0yLjcsLTEuMyAtMi43LC0yLjcgMCwtMC40IDAuMSwtMC43IDAuMiwtMSBsIC0xMC40LC01LjIgLTIuNSw4LjYgYyAwLjIsMC4xIDAuNCwwLjIgMC42LDAuMyAwLjcsMC41IDEuMiwxLjMgMS4yLDIuMyAwLDEuNSAtMS4yLDIuNyAtMi43LDIuNyAtMC41NSwwIC0xLjA2LC0wLjIgLTEuNDksLTAuNSAtMC43MywtMC40IC0xLjIyLC0xLjMgLTEuMjIsLTIuMiAwLC0xLjIgMC43NywtMi4yIDEuODUsLTIuNiBsIC0yLjUzLC04LjYgLTEwLjQyLDUuMiBjIDAuMTIsMC4zIDAuMTgsMC42IDAuMTgsMSAwLDEuNSAtMS4yMSwyLjcgLTIuNywyLjcgLTEuNDksMCAtMi43LC0xLjIgLTIuNywtMi43IDAsLTEuNSAxLjIxLC0yLjcgMi43LC0yLjcgMC41MiwwIDEuMDEsMC4xIDEuNDIsMC40IGwgMTQuOSwtMTQuOCAwLDAgMCwwIHpcIixzdHJva2U6ITF9LGlbXCJHUi5NMS5BU1NBVUxUXCJdPWwoXCJBU0xUXCIpLGlbXCJHUi5NMS5XRUFQT05cIl09bChcIldQTlwiKSxpW1wiR1IuTTEuV0VBUE9OU1wiXT1sKFwiV1wiKSxpW1wiR1IuTTEuQ1JJTUlOQUwgSU5WRVNUSUdBVElPTiBESVZJU0lPTlwiXT1sKFwiQ0lEXCIpLGlbXCJHUi5NMS5ESUdJVEFMXCJdPWwoXCJESUdcIiksaVtcIkdSLk0xLk5FVFdPUksgT1IgTkVUV09SSyBPUEVSQVRJT05TXCJdPWwoXCJORVRcIiksaVtcIkdSLk0xLkFJUkZJRUxELCBBRVJJQUwgUE9SVCBPRiBERUJBUktBVElPTiwgT1IgQUVSSUFMIFBPUlQgT0YgRU1CQVJLQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsNzAgNDAsMCBNIDgwLDgwIDExMSw1NVwiLGZpbGw6ITF9LGlbXCJHUi5NMS5QSVBFTElORVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5Miw2NiAtMTIsMCBtIDEyLDggLTEyLDAgbSAyOCwwIDEyLDAgbSAtMTIsLTggMTIsMCBtIC0yMCwtMTEgMCw3IG0gLTUsLTcgMTAsMCBtIC0xMyw3IDAsMTYgMTYsMCAwLC0xNiAtMTYsMFwiLGZpbGw6ITF9LGlbXCJHUi5NMS5QT1NUQUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsNjAgMTUsMCBjIDAsNSAwLDEwIDEwLDE1IC0xNSwwIC0yMCwwIC0yNSwtMTVcIixmaWxsOiExfSxpW1wiR1IuTTEuV0FURVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsNTUgMjAsMCBtIC0xMCwxMCAwLC0xMCBtIC0yNSwxMCA0MCwwIGMgMTAsMCAxNSw1IDE1LDEwXCIsZmlsbDohMX0saVtcIkdSLk0xLklOREVQRU5ERU5UIENPTU1BTkRcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTExLjgsNTkuMiAwLDE1LjggbSAtNy45LC03LjkgMTUuOCwwIG0gLTMxLjYsLTcuOSAwLDE1LjggbSA3LjksLTcuOSAtMTUuOCwwXCIsZmlsbDohMX0saVtcIkdSLk0xLk1VTFRJLVBVUlBPU0UgQkxBREVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsNjUgMjAsLTEwIDIwLDEwIG0gLTIwLDE1IDAsLTI1XCIsZmlsbDohMX0saVtcIkdSLk0xLlRBTkstV0lEVEggTUlORSBQTE9XXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDY1IDUsLTIuNSBtIDUsLTIuNSA1LC0yLjUgbSAxMCwwIDUsMi41IG0gNSwyLjUgNSwyLjUgbSAtMjAsMTUgMCwtMjBcIixmaWxsOiExfSxpW1wiR1IuTTEuUk9VVEUsIFJFQ09OTkFJU1NBTkNFLCBBTkQgQ0xFQVJBTkNFXCJdPWwoXCJSUkNcIiksaVtcIkdSLk0xLlNFQVJDSCBBTkQgUkVTQ1VFXCJdPWwoXCJTQVJcIiksaVtcIkdSLk0xLlNFQ1RJT05cIl09W3t0eXBlOlwiY2lyY2xlXCIsc3Ryb2tlOiExLGN4OjkwLGN5OjY4LHI6OH0se3R5cGU6XCJjaXJjbGVcIixzdHJva2U6ITEsY3g6MTEwLGN5OjY4LHI6OH1dLGlbXCJHUi5NMS5TRUNVUklUWVwiXT1sKFwiU0VDXCIpLGlbXCJHUi5NMS5TRU5TT1JcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDU1IGMgLTIsNSAtNSw4IC0xMCwxMCA1LDIgOCw1IDEwLDEwIDIsLTUgNSwtOCAxMCwtMTAgLTUsLTIgLTgsLTUgLTEwLC0xMCB6XCJ9LGlbXCJHUi5NMS5TRU5TT1IgQ09OVFJPTCBNT0RVTEVcIl09bChcIlNDTVwiKSxpW1wiR1IuTTEuU0lHTkFMUyBJTlRFTExJR0VOQ0VcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsNTUgMCwyMyBtIC0xNSwtMTggNSwtNSA1LDUgNSwtNSA1LDUgNSwtNSA1LDVcIn0saVtcIkdSLk0xLlNJR05BTCBTVVBQT1JUXCJdPWwoXCJTUFRcIiksaVtcIkdSLk0xLlNJTkdMRSBTSEVMVEVSIFNXSVRDSFwiXT1sKFwiU1NTXCIpLGlbXCJHUi5NMS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNODUsNzUgbDE1LC0xNSAxNSwxNVwiLGZpbGw6ITF9LGlbXCJHUi5NMS5TTUFMTCBFWFRFTlNJT04gTk9ERVwiXT1sKFwiU0VOXCIpLGlbXCJHUi5NMS5TTU9LRVwiXT1sKFwiU1wiKSxpW1wiR1IuTTEuU01PS0UvREVDT05cIl09bChcIlNEXCIpLGlbXCJHUi5NMS5TTklQRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk03NSw2MCBsMjAsMCBNMTAwLDc2IGwwLC0xOCBNMTI1LDYwIGwtMjAsMFwiLGZpbGw6ITF9LGlbXCJHUi5NMS5TT1VORCBSQU5HSU5HXCJdPWwoXCJTRFJcIiksaVtcIkdSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVMgKFNPRilcIl09bChcIlNPRlwiKSxpW1wiR1IuTTEuU1BFQ0lBTCBXRUFQT05TIEFORCBUQUNUSUNTXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5Ojc3LGZvbnRzaXplOjIzLHRleHQ6XCJTV0FUXCJ9LGlbXCJHUi5NMS5TUVVBRFwiXT17dHlwZTpcImNpcmNsZVwiLHN0cm9rZTohMSxjeDoxMDAsY3k6Njgscjo4fSxpW1wiR1IuTTEuU1VQUE9SVFwiXT1sKFwiU1BUXCIpLGlbXCJHUi5NMS5TVVJWRVlcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA4LDc4IC04LC04IG0gMCwwIC04LDggbSA4LC04IDAsLTE1IDE1LDggelwifSxpW1wiR1IuTTEuVEFDVElDQUwgRVhQTE9JVEFUSU9OXCJdPWwoXCJURVwiKSxpW1wiR1IuTTEuVEFSR0VUIEFDUVVJU0lUSU9OXCJdPWwoXCJUQVwiKSxpW1wiR1IuTTEuVEVBTVwiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeTo2NSxyOjEwfSx7dHlwZTpcInBhdGhcIixkOlwibSA5MCw3NSBsMjAsLTIwXCJ9XSxpW1wiR1IuTTEuVEhFQVRSRVwiXT1sKFwiWFhYWFhcIiksaVtcIkdSLk0xLlRPUE9HUkFQSElDXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTIsNjUgYyA2LDMgMTAsMyAxNiwwIG0gLTE4LDEzIDEwLC0yMyAxMCwyM1wifSxpW1wiR1IuTTEuVFJBSU5JTkcgQ0FNUFwiXT1sKFwiVE5HXCIpLGlbXCJHUi5NMS5ISUpBQ0tFUlwiXT1sKFwiSEpcIiksaVtcIkdSLk0xLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MCw2NSAyMCwxMyAyMCwtMTMgMCwtNSAtMjAsMTAgLTIwLC0xMCB6XCJ9LGlbXCJHUi5NMS5VUEdSQURFRCBFQVJMWSBXQVJOSU5HIFJBREFSXCJdPWwoXCJVRVdcIiksaVtcIkdSLk0xLlVUSUxJVFlcIl09bChcIlVcIiksaVtcIkdSLk0xLlZJREVPIElNQUdFUllcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMjAsNjUgLTExLDAgbSAxMSwxMCAtMTQsMCBtIDQsLTE0IC0zMCwwIDAsMTggMjUsMCB6IG0gMTAsMiAwLDE0XCJ9LGlbXCJHUi5NMS5XTy0xXCJdPWwoXCJXTy0xXCIpLGlbXCJHUi5NMS5XTy0yXCJdPWwoXCJXTy0yXCIpLGlbXCJHUi5NMS5XTy0zXCJdPWwoXCJXTy0zXCIpLGlbXCJHUi5NMS5XTy00XCJdPWwoXCJXTy00XCIpLGlbXCJHUi5NMS5XTy01XCJdPWwoXCJXTy01XCIpLGlbXCJHUi5NMS5ZQVJEXCJdPWwoXCJZUkRcIiksaVtcIkdSLk0yLkFJUkJPUk5FXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNzUsMTQwIEM3NSwxMjUgMTAwLDEyNSAxMDAsMTQwIEMxMDAsMTI1IDEyNSwxMjUgMTI1LDE0MFwiLGZpbGw6ITF9LGlbXCJHUi5NMi5BUkNUSUNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMTUsMTI1IEMxMjUsMTI1IDEyNSwxMzUgMTE1LDEzNSBMODUsMTM1IEM3NSwxMzUgNzUsMTI1IDg1LDEyNVwiLGZpbGw6ITF9LGlbXCJHUi5NMi5BVFRBQ0tcIl09cihcIkFcIiksaVtcIkdSLk0yLkxBTkRJTkcgQ1JBRlRcIl09cihcIkxDXCIpLGlbXCJHUi5NMi5MQU5ESU5HIFNISVBcIl09cihcIkxTXCIpLGlbXCJHUi5NMi5TRVJWSUNFIENSQUZUL1lBUkRcIl09cihcIllZXCIpLGlbXCJHUi5NMi5UVUcgSEFSQk9SXCJdPXIoXCJZVFwiKSxpW1wiR1IuTTIuT0NFQU4gR09JTkcgVFVHIEJPQVRcIl09cihcIkFUXCIpLGlbXCJHUi5NMi5TVVJGQUNFIERFUExPWU1FTlQgQU5EIERJU1RSSUJVVElPTiBDT01NQU5EXCJdPXIoXCJTRERDXCIpLGlbXCJHUi5NMi5DT01QT1NJVEVcIl09cihcIkNPTVBcIiksaVtcIkdSLk0yLkxJR0hUIEFORCBNRURJVU1cIl09cihcIkwvTVwiKSxpW1wiR1IuTTIuQkFUVExFIERBTUFHRSBSRVBBSVJcIl09cihcIkJEUlwiKSxpW1wiR1IuTTIuQklDWUNMRSBFUVVJUFBFRFwiXT17dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMzIscjoxMSxmaWxsOiExfSxpW1wiR1IuTTIuQ0FTVUFMVFkgU1RBR0lOR1wiXT1yKFwiQ1NcIiksaVtcIkdSLk0yLkNMRUFSSU5HXCJdPXIoXCJDTFJcIiksaVtcIkdSLk0yLkNMT1NFIFJBTkdFXCJdPXIoXCJDUlwiKSxpW1wiR1IuTTIuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdPXIoXCJDU0FSXCIpLGlbXCJHUi5NMi5DT05UUk9MXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDk4LDEzMCAyLC00IDIsNCBtIC04LDggLTQsLTIgNCwtMiBtIDgsOCAtMiw0IC0yLC00IG0gOCwtOCA0LDIgLTQsMiBtIC0xNCwtMiAxNiwwIG0gLTgsLTggMCwxNlwiLGZpbGw6ITF9LGlbXCJHUi5NMi5OT05DT01CQVRBTlQgR0VORVJJQyBWRVNTRUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsMTM1IDAsLTEwIDEwLDAgMCwxMCA1LDAgMCwxMCAtMjAsMCAwLC0xMCB6XCIsc3Ryb2tlOiExfSxpW1wiR1IuTTIuU0hFTFRFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxNDAgMzAsMCAtNSwtMTUgLTEwLC01IC0xMCw1IHpcIixzdHJva2U6ITF9LGlbXCJHUi5NMi5TRUxGLVBST1BFTExFRFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxMjUgMzAsMCBjIDEwLDAgMTAsMTUgMCwxNSBsIC0zMCwwIGMgLTEwLDAgLTEwLC0xNSAwLC0xNVwiLGZpbGw6ITF9LGlbXCJHUi5NMi5DUk9TUy1DT1VOVFJZIFRSVUNLXCJdPVt7dHlwZTpcInBhdGhcIixkOlwiTTYwLDEyMCBsODAsMFwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo2NSxjeToxMjUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMzUsY3k6MTI1LHI6NX1dLGlbXCJHUi5NMi5DQVZBTFJZXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjExMCx5OjE0MCxmb250c2l6ZToyNSx0ZXh0OlwiQ0FWXCJ9LGlbXCJHUi5NMi5ERUNPTlRBTUlOQVRJT05cIl09cihcIkRcIiksaVtcIkdSLk0yLkRFTU9MSVRJT05cIl09cihcIkRFTVwiKSxpW1wiR1IuTTIuREVOVEFMXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjExNSx5OjEzMyxmb250c2l6ZToyNSx0ZXh0OlwiRFwifSxpW1wiR1IuTTIuRElHSVRBTFwiXT1yKFwiRElHXCIpLGlbXCJHUi5NMi5FTkhBTkNFRCBQT1NJVElPTiBMT0NBVElPTiBSRVBPUlRJTkcgU1lTVEVNXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg3LDE0MiAxMywtMTIgMTMsMTIgbSAtMTMsLTIwIDAsMjAgMCwwXCIsZmlsbDohMX0saVtcIkdSLk0yLkVRVUlQTUVOVFwiXT1yKFwiRVwiKSxpW1wiR1IuTTIuRVFVSU1FTlQvVFJPT1BcIl09cihcIkUvVFwiKSxpW1wiR1IuTTIuSEVBVllcIl09cihcIkhcIiksaVtcIkdSLk0yLkhJR0ggQUxUSVRVREVcIl09cihcIkhBXCIpLGlbXCJHUi5NMi5ISUdIIFRPIE1FRElVTSBBTFRJVFVERVwiXT1yKFwiSE1BXCIpLGlbXCJHUi5NMi5ISUdIIFRPIExPVyBBTFRJVFVERVwiXT1yKFwiSExBXCIpLGlbXCJHUi5NMS5DWUJFUlNQQUNFXCJdPWwoXCJDWUJcIiksaVtcIkdSLk0yLkFJUiBBU1NBVUxUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODUsMTI1IDE1LDIwIDE1LC0yMFwifSxpW1wiR1IuTTIuVkVSWSBIRUFWWVwiXT1yKFwiVkhcIiksaVtcIkdSLk0yLkNZQkVSU1BBQ0VcIl09cihcIkNZQlwiKSxpW1wiR1IuTTIuTkFWWSBCQVJHRSwgU0VMRi1QUk9QRUxMRURcIl09cihcIllTXCIpLGlbXCJHUi5NMi5OQVZZIEJBUkdFLCBOT1QgU0VMRi1QUk9QRUxMRURcIl09cihcIllCXCIpLGlbXCJHUi5NMi5MQVVOQ0hcIl09cihcIllGVFwiKSxpW1wiR1IuTTEuVEFDVElDQUwgU0FURUxMSVRFIENPTU1VTklDQVRJT05TXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDUsNjUgMTAsMCBtIC0zMCwwIDEwLDAgTSA4NSw3NyBjIDEwLC03IDIwLC03IDMwLDBcIixmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSA3NS40LDYwLjkgMCw5LjEgMTMuMSwwIDAsLTkuMSB6IG0gMzYsMCAwLDkuMSAxMy4xLDAgMCwtOS4xIHogbSAtMTgsMCAwLDkuMSAxMy4xLDAgMCwtOS4xIHpcIixzdHJva2U6ITF9XSxpW1wiR1IuTTIuSU5URVJNT0RBTFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4MCwxMjUgNDAsMCAwLC00IDgsOSAtOCw5IDAsLTQgLTQwLDAgMCw0IC04LC05IDgsLTkgelwiLGZpbGw6ITF9LGlbXCJHUi5NMi5JTlRFTlNJVkUgQ0FSRVwiXT1yKFwiSUNcIiksaVtcIkdSLk0yLkoxXCJdPXIoXCJKMVwiKSxpW1wiR1IuTTIuSjJcIl09cihcIkoyXCIpLGlbXCJHUi5NMi5KM1wiXT1yKFwiSjNcIiksaVtcIkdSLk0yLko0XCJdPXIoXCJKNFwiKSxpW1wiR1IuTTIuSjVcIl09cihcIko1XCIpLGlbXCJHUi5NMi5KNlwiXT1yKFwiSjZcIiksaVtcIkdSLk0yLko3XCJdPXIoXCJKN1wiKSxpW1wiR1IuTTIuSjhcIl09cihcIko4XCIpLGlbXCJHUi5NMi5KOVwiXT1yKFwiSjlcIiksaVtcIkdSLk0yLkxJR0hUXCJdPXIoXCJMXCIpLGlbXCJHUi5NMi5MQUJPUkFUT1JZXCJdPXIoXCJMQUJcIiksaVtcIkdSLk0yLkxBVU5DSEVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk04MCwxNDAgTDExNSwxMjAgMTIwLDE0MFwifSxpW1wiR1IuTTIuTE9ORyBSQU5HRVwiXT1yKFwiTFJcIiksaVtcIkdSLk0yLkxPTkcgUkFOR0UgU1VSVkVJTExBTkNFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjExMCx5OjE0MCxmb250c2l6ZToyNSx0ZXh0OlwiTFJTXCJ9LGlbXCJHUi5NMi5MT1cgQUxUSVRVREVcIl09cihcIkxBXCIpLGlbXCJHUi5NMi5NRURJVU1cIl09cihcIk1cIiksaVtcIkdSLk0yLk1FRElVTSBBTFRJVFVERVwiXT1yKFwiTUFcIiksaVtcIkdSLk0yLk1FRElVTSBUTyBMT1cgQUxUSVRVREVcIl09cihcIk1MQVwiKSxpW1wiR1IuTTIuTUVESVVNIFJBTkdFXCJdPXIoXCJNUlwiKSxpW1wiR1IuTTIuTU9VTlRBSU5cIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNOTAsMTQwIEwxMDAsMTIwIDExMCwxNDBcIn0saVtcIkdSLk0yLk1VTFRJUExFIEFMVElUVURFU1wiXT1yKFwiSC9NQVwiKSxpW1wiR1IuTTIuTVVMVEktQ0hBTk5FTFwiXT1yKFwiTUNcIiksaVtcIkdSLk0yLk9GLTFcIl09cihcIk9GLTFcIiksaVtcIkdSLk0yLk9GLTJcIl09cihcIk9GLTJcIiksaVtcIkdSLk0yLk9GLTNcIl09cihcIk9GLTNcIiksaVtcIkdSLk0yLk9GLTRcIl09cihcIk9GLTRcIiksaVtcIkdSLk0yLk9GLTVcIl09cihcIk9GLTVcIiksaVtcIkdSLk0yLk9GLTZcIl09cihcIk9GLTZcIiksaVtcIkdSLk0yLk9GLTdcIl09cihcIk9GLTdcIiksaVtcIkdSLk0yLk9GLThcIl09cihcIk9GLThcIiksaVtcIkdSLk0yLk9GLTlcIl09cihcIk9GLTlcIiksaVtcIkdSLk0yLk9GLTEwXCJdPXIoXCJPRi0xMFwiKSxpW1wiR1IuTTIuT0YtRFwiXT1yKFwiT0YtRFwiKSxpW1wiR1IuTTIuT1BUSUNBTFwiXT1yKFwiT1BUXCIpLGlbXCJHUi5NMi5PUi0xXCJdPXIoXCJPUi0xXCIpLGlbXCJHUi5NMi5PUi0yXCJdPXIoXCJPUi0yXCIpLGlbXCJHUi5NMi5PUi0zXCJdPXIoXCJPUi0zXCIpLGlbXCJHUi5NMi5PUi00XCJdPXIoXCJPUi00XCIpLGlbXCJHUi5NMi5PUi01XCJdPXIoXCJPUi01XCIpLGlbXCJHUi5NMi5PUi02XCJdPXIoXCJPUi02XCIpLGlbXCJHUi5NMi5PUi03XCJdPXIoXCJPUi03XCIpLGlbXCJHUi5NMi5PUi04XCJdPXIoXCJPUi04XCIpLGlbXCJHUi5NMi5PUi05XCJdPXIoXCJPUi05XCIpLGlbXCJHUi5NMi5HVUVSSUxMQVwiXT1yKFwiR1wiKSxpW1wiR1IuTTIuQU1QSElCSU9VU1wiXT17VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTSA2NCAxNDQuOSBDIDgwLjQgMTQzLjkgNjMuMSAxMjUgODEuNCAxMjUgQyAxMDAuMiAxMjUgODEuNCAxNDUgMTAwLjIgMTQ1IEMgMTE5IDE0NSAxMDAuMiAxMjUgMTE5IDEyNSBDIDEzNy4xIDEyNSAxMjAuMiAxNDMuNiAxMzUuOSAxNDQuOVwiLGZpbGw6ITF9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixkOlwibSAyNSwxNDUgYyAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMTguOCwyMCAxOC44LDAgMCwtMjAgMTguOCwtMjAgMTguOCwwIDAsMjAgMjAsMjBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDQ1IDEyNSBDIDYxLjcgMTI1LjkgNDQuMiAxNDUgNjIuNiAxNDUgQyA4MS40IDE0NSA2Mi42IDEyNSA4MS40IDEyNSBDIDEwMC4yIDEyNSA4MS40IDE0NSAxMDAuMiAxNDUgQyAxMTkgMTQ1IDEwMC4yIDEyNSAxMTkgMTI1IEMgMTM3LjggMTI1IDExOSAxNDUgMTM3LjggMTQ1IEMgMTU1LjkgMTQ1IDEzOC45IDEyNi4yIDE1NC44IDEyNSBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNIDcwLjQgMTQyLjQgQyA3NC44IDEzNyA2Ni44IDEyNSA4MS40IDEyNSBDIDEwMC4yIDEyNSA4MS40IDE0NSAxMDAuMiAxNDUgQyAxMTkgMTQ1IDEwMC4yIDEyNSAxMTkgMTI1IEMgMTMzLjMgMTI1IDEyNS43IDEzNi42IDEyOS43IDE0Mi4xIFwiLGZpbGw6ITF9fVtUXSxpW1wiR1IuTTIuUEFDSyBBTklNQUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODQsMTQwIDksLTE1IDcsMTUgNywtMTUgOSwxNVwiLGZpbGw6ITF9LGlbXCJHUi5NMi5QQVRJRU5UIEVWQUNVQVRJT04gQ09PUkRJTkFUSU9OXCJdPXIoXCJQRUNcIiksaVtcIkdSLk0yLlBSRVZFTlRJVkUgTUFJTlRFTkFOQ0VcIl09cihcIlBNXCIpLGlbXCJHUi5NMi5QU1lDSE9MT0dJQ0FMXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjExNSx5OjEzMyxmb250c2l6ZToyNSx0ZXh0OlwiUFwifSxpW1wiR1IuTTIuUkFESU8gUkVMQVkgTElORSBPRiBTSUdIVFwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTMyLHI6MTEsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIk0gOTAuOCAxMjguMiBDIDkwLjMgMTI5LjMgOTAgMTMwLjYgOTAgMTMyIEMgOTAgMTMzLjQgOTAuMyAxMzQuNyA5MC44IDEzNS44IEwgMTAwIDEzMiBMIDkwLjggMTI4LjIgeiBNIDEwMCAxMzIgTCAxMDkuMyAxMzUuOCBDIDEwOS43IDEzNC43IDExMCAxMzMuNCAxMTAgMTMyIEMgMTEwIDEzMC42IDEwOS43IDEyOS4zIDEwOS4zIDEyOC4yIEwgMTAwIDEzMiB6XCJ9XSxpW1wiR1IuTTIuUkFJTFJPQURcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTIwIGw4MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjY1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo3NSxjeToxMjUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTI1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMzUsY3k6MTI1LHI6NX1dLGlbXCJHUi5NMi5UUkFDVE9SIFRSQUlMRVJcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNNjAsMTIwIGw4MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjY1LGN5OjEyNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo3NSxjeToxMjUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTM1LGN5OjEyNSxyOjV9XSxpW1wiR1IuTTIuUkVDT1ZFUlkgKFVOTUFOTkVEIFNZU1RFTVMpXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDEyNSBjMCwyMCA2MCwyMCA2MCwwXCIsZmlsbDohMX0saVtcIkdSLk0yLlJFQ09WRVJZIChNQUlOVEVOQU5DRSlcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTc1LDEyNSBjOCwwIDgsMTYgMCwxNiBtOCwtOCBsMzUsMCBtOCwtOCBjLTgsMCAtOCwxNiAwLDE2XCJ9LGlbXCJHUi5NMi5SRUZVRUxcIl09cihcIktcIiksaVtcIkdSLk0yLlJFU0NVRSBDT09SRElOQVRJT04gQ0VOVFJFXCJdPXIoXCJSQ0NcIiksaVtcIkdSLk0yLlJJVkVSSU5FXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEyNSBjIDAsMTAgNDAsMTAgNDAsMCB6XCIsZmlsbDohMX0saVtcIkdSLk0yLlJPQk9USUNcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0xMDAsMTIxLjY4TDExNC44OTUsMTM2LjQ1OUMxMTUuMzA5LDEzNi4yMDEgMTE1Ljc5OCwxMzYuMDUyIDExNi4zMjEsMTM2LjA1MkMxMTcuODEyLDEzNi4wNTIgMTE5LjAyMiwxMzcuMjYyIDExOS4wMjIsMTM4Ljc1M0MxMTkuMDIyLDE0MC4yNDMgMTE3LjgxMiwxNDEuNDU0IDExNi4zMjEsMTQxLjQ1NEMxMTQuODMxLDE0MS40NTQgMTEzLjYyLDE0MC4yNDMgMTEzLjYyLDEzOC43NTNDMTEzLjYyLDEzOC40MDcgMTEzLjY4NiwxMzguMDc2IDExMy44MDUsMTM3Ljc3MkwxMDMuMzc4LDEzMi42TDEwMC44NTEsMTQxLjIyNEMxMDEuMDcyLDE0MS4yOTggMTAxLjI4LDE0MS40IDEwMS40NzEsMTQxLjUyNkMxMDIuMjExLDE0Mi4wMDggMTAyLjcwMSwxNDIuODQzIDEwMi43MDEsMTQzLjc5MUMxMDIuNzAxLDE0NS4yODEgMTAxLjQ5MSwxNDYuNDkyIDEwMCwxNDYuNDkyQzk5LjQ1MSwxNDYuNDkyIDk4LjkzOSwxNDYuMzI3IDk4LjUxMiwxNDYuMDQ1Qzk3Ljc3NiwxNDUuNTYyIDk3LjI5LDE0NC43MyA5Ny4yOSwxNDMuNzg1Qzk3LjI5LDE0Mi41OTIgOTguMDY0LDE0MS41NzkgOTkuMTM4LDE0MS4yMjJMOTYuNjEzLDEzMi42MDZMODYuMTg2LDEzNy43NzhDODYuMzA1LDEzOC4wODIgODYuMzcsMTM4LjQxMyA4Ni4zNywxMzguNzU5Qzg2LjM3LDE0MC4yNSA4NS4xNiwxNDEuNDYgODMuNjY5LDE0MS40NkM4Mi4xNzksMTQxLjQ2IDgwLjk2OSwxNDAuMjUgODAuOTY5LDEzOC43NTlDODAuOTY5LDEzNy4yNjggODIuMTc5LDEzNi4wNTggODMuNjY5LDEzNi4wNThDODQuMTkzLDEzNi4wNTggODQuNjgxLDEzNi4yMDcgODUuMDk1LDEzNi40NjVMOTkuOTkxLDEyMS42NzFMMTAwLDEyMS42NjJMMTAwLDEyMS42OFpcIixzdHJva2U6ITF9LGlbXCJHUi5NMi5TRUNVUklUWSBGT1JDRSBBU1NJU1RBTkNFXCJdPXIoXCJTRkFcIiksaVtcIkdSLk0yLlNJTkdMRSBDSEFOTkVMXCJdPXIoXCJTQ1wiKSxpW1wiR1IuTTIuU0tJXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDk1LDE0NSAtOSwtOCBtIDI4LDAgLTksOCBtIC0xNSwtMjQgMjAsMjAgbSAwLC0yMCAtMjAsMjBcIixmaWxsOiExfSxpW1wiR1IuTTIuU0hPUlQgUkFOR0VcIl09cihcIlNSXCIpLGlbXCJHUi5NMi5TVFJBVEVHSUNcIl09cihcIlNUUlwiKSxpW1wiR1IuTTIuU1RSQVRFR0lDIE1JU1NJTEVcIl09cihcIlNcIiksaVtcIkdSLk0yLlNVUFBPUlRcIl09cihcIlNQVFwiKSxpW1wiR1IuTTIuVEFDVElDQUxcIl09cihcIlRBQ1wiKSxpW1wiR1IuTTIuVEFDVElDQUwgTUlTU0lMRVwiXT1yKFwiVFwiKSxpW1wiR1IuTTIuVEFSR0VUIEFDUVVJU0lUSU9OXCJdPXIoXCJUQVwiKSxpW1wiR1IuTTIuVE9XRURcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNNzAsMTIwIGw2MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjY1LGN5OjEyMCxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMzUsY3k6MTIwLHI6NX1dLGlbXCJHUi5NMi5UUk9PUFwiXT1yKFwiVFwiKSxpW1wiR1IuTTIuVFJBQ0tFRFwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA3MCwxMjAgbCA2MCwwIGMxMCwwIDEwLDEwIDAsMTAgbCAtNjAsMCBjLTEwLDAgLTEwLC0xMCAwLC0xMFwiLGZpbGw6ITF9LGlbXCJHUi5NMi5UUlVDS1wiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk02MCwxMjAgbDgwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6NjUsY3k6MTI1LHI6NX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEzNSxjeToxMjUscjo1fV0saVtcIkdSLk0yLlVUSUxJVFlcIl09cihcIlVcIiksaVtcIkdSLk0yLlZFUlRJQ0FMIE9SIFNIT1JUIFRBS0UtT0ZGIEFORCBMQU5ESU5HIFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMzUsZm9udHNpemU6MjAsdGV4dDpcIlZTVE9MXCJ9LGlbXCJHUi5NMi5WRVRFUklOQVJZXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjExNSx5OjEzMyxmb250c2l6ZToyNSx0ZXh0OlwiVlwifSxpW1wiR1IuTTIuV0hFRUxFRFwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDo3MCxjeToxMjUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEyNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMzAsY3k6MTI1LHI6NSxmaWxsOiExfV0saVtcIkdSLk0yLldIRUVMRUQgTElNSVRFRFwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDo3MCxjeToxMjUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTMwLGN5OjEyNSxyOjUsZmlsbDohMX1dLGlbXCJHUi5NMi5XTy0xXCJdPXIoXCJXTy0xXCIpLGlbXCJHUi5NMi5XTy0yXCJdPXIoXCJXTy0yXCIpLGlbXCJHUi5NMi5XTy0zXCJdPXIoXCJXTy0zXCIpLGlbXCJHUi5NMi5XTy00XCJdPXIoXCJXTy00XCIpLGlbXCJHUi5NMi5XTy01XCJdPXIoXCJXTy01XCIpLGlbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxMDAgMzAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTA1IDMwLDAgbSAtMzAsLTEwIDMwLDBcIixmaWxsOiExfSxpW1wiR1IuRVEuTE9ORyBSQU5HRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxMTAgMzAsMCBtIC0zMCwtMjAgMzAsMCBtIC0zMCwxMCAzMCwwXCIsZmlsbDohMX0saVtcIkdSLkVRLldFQVBPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNjAgMCw4MFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5SSUZMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNjAgMCw4MCBNIDg1LDc1IDEwMCw2MCAxMTUsNzVcIixmaWxsOiExfSxpW1wiR1IuRVEuUklGTEUgRElTTU9VTlRFRDFcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsOTAgMTAsLTEwIDEwLDEwIG0gLTEwLC0xMCAwLDQwXCIsZmlsbDohMX0saVtcIkdSLkVRLk1BQ0hJTkUgR1VOXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MCAwLDgwIE0gODUsNzUgMTAwLDYwIDExNSw3NSBNIDgwLDE0MCAxMjAsMTQwXCIsZmlsbDohMX0saVtcIkdSLkVRLkdSRU5BREUgTEFVTkNIRVJcIl09W2lbXCJHUi5FUS5SSUZMRVwiXSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeTo5MCxyOjE1LGZpbGw6ITF9XSxpW1wiR1IuRVEuRkxBTUUgVEhST1dFUlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDkwLDEzNSAwLC03MCBjIDAsLTE1IDIwLC0xNSAyMCwwXCJ9LGlbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDE0MCAzMCwwIGMgMCwtMjAgLTMwLC0yMCAtMzAsMCB6IG0gMTUsLTgwIDAsNjUgbSAxNSwtNDUgMCw0MCBtIC0zMCwtNDAgMCw0MFwiLGZpbGw6ITF9XSxSfHxOfHxpW1wiR1IuRVEuQUlSIERFRkVOQ0UgR1VOXCJdLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIk0gODUsNzUgMTAwLDYwIDExNSw3NVwiLGZpbGw6ITF9KSxpW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDE0MCAxNSwtMTUgMTUsMTUgbSAtMTUsLTgwIDAsNjUgbSAtMTUsLTQ1IDAsNDAgbSAzMCwtNDAgMCw0MFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5ESVJFQ1QgRklSRSBHVU5cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDYwIDAsODAgbSAxNSwtNjAgMCw0MCBtIC0zMCwtNDAgMCw0MFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5SRUNPSUxMRVNTIEdVTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSw3NSAxNSwtMTUgMTUsMTUgbSAwLDUgMCw0MCBtIC0zMCwtNDAgMCw0MCBtIDE1LC02MCAwLDgwXCIsZmlsbDohMX0saVtcIkdSLkVRLkhPV0lUWkVSXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMzAscjoxMCxmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSAxMTUsODAgMCw0MCBtIC0zMCwtNDAgMCw0MCBtIDE1LC02MCAwLDYwXCIsZmlsbDohMX1dLFJ8fGlbXCJHUi5FUS5IT1dJVFpFUlwiXS5wdXNoKHt0eXBlOlwicGF0aFwiLGQ6XCJNIDg1LDc1IDEwMCw2MCAxMTUsNzVcIixmaWxsOiExfSksaVtcIkdSLkVRLkhPV0lUWkVSIFRSQUNLRURcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gNzAsMTIwIGwgNjAsMCBjMTAsMCAxMCwxMCAwLDEwIGwgLTYwLDAgYy0xMCwwIC0xMCwtMTAgMCwtMTBcIixmaWxsOiExfSxpW1wiR1IuRVEuTUlTU0lMRSBMQVVOQ0hFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTQwIDAsLTgwIG0gLTE1LDgwIDAsLTY1IGMgMCwtMjAgMzAsLTIwIDMwLDAgbCAwLDY1XCIsZmlsbDohMX0saVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTQwIDMwLDAgYyAwLC0yMCAtMzAsLTIwIC0zMCwwIHogbSAxNSwtMTUgMCwtNjUgbSAtMTUsODAgMCwtNjUgYyAwLC0yMCAzMCwtMjAgMzAsMCBsIDAsNjVcIixmaWxsOiExfSxpW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUTEFSXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiUlwifSxpW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBURUxBUlwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkVcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJSXCJ9XSxpW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUSEVBVFJFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjE0NSxmb250c2l6ZTozMCx0ZXh0OlwiVFwifSxpW1wiR1IuRVEuQU5USVRBTksgTUlTU0lMRSBMQVVOQ0hFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4NSwxNDAgMTUsLTE1IDE1LDE1IE0gODUsMTIwIDg1LDc1IGMgMCwtMjAgMzAsLTIwIDMwLDAgbCAwLDQ1IG0gLTE1LDUgMCwtNjVcIixmaWxsOiExfSxpW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl09W2lbXCJHUi5FUS5NSVNTSUxFIExBVU5DSEVSXCJdXSxSJiZpW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl0ucHVzaCh7dHlwZTpcInBhdGhcIixkOlwibSA4NSwxNDAgMzAsMFwiLGZpbGw6ITF9KSxpW1wiR1IuRVEuTU9SVEFSXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNjAgMCw2MCBNIDg1LDc1IDEwMCw2MCAxMTUsNzVcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMzAscjoxMCxmaWxsOiExfV0saVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsNzUgMTUsLTE1IDE1LDE1IG0gLTE1LC01IDAsNzAgTSA4NSw4NSAxMDAsNzAgMTE1LDg1XCIsZmlsbDohMX0saVtcIkdSLkVRLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTUsOTAgMCw0MCBtIC0zMCwtNDAgMCw0MCBtIDAsLTU1IDE1LC0xNSAxNSwxNSBtIC0xNSwtNSAwLDcwIE0gODUsODUgMTAwLDcwIDExNSw4NVwiLGZpbGw6ITF9LGlbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTQwIDE1LC0xNSAxNSwxNSBNIDg1LDg1IDEwMCw3MCAxMTUsODUgbSAtMTUsLTE1IDAsNTUgTSA4NSw3NSAxMDAsNjAgMTE1LDc1XCIsZmlsbDohMX0saVtcIkdSLkVRLk5PTi1MRVRIQUwgV0VBUE9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MCAwLDgwIE0gODAsNjAgbDQwLDBcIixmaWxsOiExfSxpW1wiR1IuRVEuTk9OLUxFVEhBTCBHUkVOQURFIExBVU5DSEVSXCJdPVtpW1wiR1IuRVEuTk9OLUxFVEhBTCBXRUFQT05cIl0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6OTAscjoxNSxmaWxsOiExfV0saVtcIkdSLkVRLlRBU0VSXCJdPVtpW1wiR1IuRVEuTk9OLUxFVEhBTCBXRUFQT05cIl0sYShcIlpcIildLGlbXCJHUi5FUS5XQVRFUiBDQU5OT05cIl09W2lbXCJHUi5FUS5OT04tTEVUSEFMIFdFQVBPTlwiXSxhKFwiV1wiKV0saVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTMwIDYwLDBcIixmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4Ojc1LGN5OjEzNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMjUsY3k6MTM1LHI6NSxmaWxsOiExfV0saVtcIkdSLkVRLkNST1NTLUNPVU5UUllcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDEzMCA2MCwwXCIsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDo3NSxjeToxMzUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEzNSxyOjUsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMjUsY3k6MTM1LHI6NSxmaWxsOiExfV0saVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTAwIDMwLC0zMCAzMCwzMCAtMzAsMzAgeiBtIDYwLC0zMCAwLDYwIG0gLTYwLC02MCAwLDYwIDAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFIChBRlYpIENPTU1BTkQgQU5EIENPTlRST0xcIl09W2lbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFXCJdXSxOP2lbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFIChBRlYpIENPTU1BTkQgQU5EIENPTlRST0xcIl0ucHVzaCh7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkMyXCJ9KTppW1wiR1IuRVEuQVJNT1VSRUQgRklHSFRJTkcgVkVISUNMRSAoQUZWKSBDT01NQU5EIEFORCBDT05UUk9MXCJdLnB1c2goe3R5cGU6XCJwYXRoXCIsZDpcIm0gODAsOTAgMjAsMTUgMCwtMTAgMjAsMTVcIixmaWxsOiExfSksaVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsODAgMzAsLTEwIDMwLDEwIG0gLTYwLC0xMCAwLDYwIDYwLDAgMCwtNjBcIn0saVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSIENPTUJBVCBTRVJWSUNFIFNVUFBPUlQgVkVISUNMRVwiXT1baVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLHt0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDEyMCA2MCwwXCIsZmlsbDohMX1dLGlbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUiBFTkdJTkVFUiBSRUNPTiBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTMwLDgwIDcwLDEzMFwifSxpW1wiR1IuRVEuQ09NQkFUIFNFUlZJQ0UgU1VQUE9SVCBWRUhJQ0xFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNzAsMTIwIDEzMCwxMjBcIn0saVtcIkdSLkVRLkFSTU9VUkVEIE1FRElDQUwgUEVSU09OTkVMIENBUlJJRVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCwxMDAgNjAsMCBtIC0zMCwtMzAgMCw2MFwifSxpW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDYwLDEyMCA4MCwwIE0gMTIwLDgwIGMgMjUsMC4yIDI1LDQwIDAsNDAgbCAtNDAsMCBDIDU1LDEyMCA1NSw4MCA4MCw4MCBaXCIsZmlsbDohMX0saVtcIkdSLk0yLldIRUVMRUQgTElNSVRFRFwiXV0saVtcIkdSLkVRLkFSTU9VUkVEIFZFSElDTEVcIl09YShcIkFcIiksaVtcIkdSLkVRLkFSTU9SRUQgQ0FSUklFUiBXSVRIIFZPTENBTk9cIl09YShcIlZcIiksaVtcIkdSLkVRLlRBTktcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw4MCA2MCwwIG0gLTYwLDQwIDYwLDAgbSAtNjAsLTUwIDAsNjAgMCwwIG0gNjAsLTYwIDAsNjBcIn0saVtcIkdSLkVRLkFTU0FVTFQgQlJFQUNIRVIgVkVISUNMRSAoQUJWKSBXSVRIIENPTUJBVCBET1pFUiBCTEFERVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw5NSAzMCwyNSBtIC0zMCwtNjAgMCwzNSAtMzAsMjUgbSAxMCwtNjAgNDAsMCBtIC01MCwyMCA2MCwwIG0gLTYwLDQwIDYwLDAgbSAtNjAsLTUwIDAsNjAgMCwwIG0gNjAsLTYwIDAsNjBcIn0saVtcIkdSLkVRLkxJR0hUIFRBTktcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsODAgMCw0MFwifSxpW1wiR1IuRVEuTUVESVVNIFRBTktcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDUsODAgMCw0MCBtIC0xMCwtNDAgMCw0MFwifSxpW1wiR1IuRVEuSEVBVlkgVEFOS1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDExMCw4MCAwLDQwIG0gLTIwLC00MCAwLDQwIG0gMTAsLTQwIDAsNDBcIn0saVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDg1LDEwMCAzMCwwIG0gMTAsLTEwIGMgLTEzLjEsMCAtMTIuNCwyMCAwLDIwIE0gNzUsOTAgYyAxMi43LDAuMyAxMi43LDIwLjMgMCwyMFwifSxpW1wiR1IuRVEuQlJJREdFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDExNSw3NSAtMTAsMTAgMCwzMCAxMCwxMCBtIC0zMCwtNTAgMTAsMTAgMCwzMCAtMTAsMTAgbSAtMTUsLTU1IDYwLDAgMCw2MCAtNjAsMCAwLC02MFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5GSVhFRCBCUklER0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTAwLDcwIDEwMCwxMzBcIixmaWxsOiExfSxpW1wiR1IuRVEuRk9MRElORyBHSVJERVIgQlJJREdFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDExMCwgODAgOTAsODAgOTAsMTIwIDExMCwxMjBcIixmaWxsOiExfSxpW1wiR1IuRVEuSE9MTE9XIERFQ0sgQlJJREdFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDExMCwgODAgOTAsODAgOTAsMTIwIDExMCwxMjAgelwiLGZpbGw6ITF9LGlbXCJHUi5FUS5EUklMTFwiXT1pW1wiR1IuSUMuRFJJTExJTkdcIl0saVtcIkdSLkVRLkRPWkVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkwLDYwIDIwLDAgbSAtMTAsMCAwLDIwIG0gLTMwLDAgNjAsMCBtIC02MCwtMTAgMCw2MCAwLDAgbSA2MCwtNjAgMCw2MCBtIC02MCwtMTAgNjAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5ET1pFUiBBUk1PUkVEXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDEzMCA2MCwwIG0gLTMwLC03MCAwLDEwIG0gLTMwLDEwIDMwLC0xMCAzMCwxMCBtIDAsLTEwIDAsNjAgbSAtNjAsLTYwIDAsNjAgMCwwIG0gMjAsLTcwIDIwLDBcIixmaWxsOiExfSxpW1wiR1IuRVEuRUFSVEhNT1ZFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNjAgMCwyMCBtIC0yNSwtMTUgNSwtNSA0MCwwIDUsNSBtIC01NSwxNSA2MCwwIG0gLTYwLDQwIDYwLDAgbSAwLC01MCAwLDYwIG0gLTYwLC02MCAwLDYwIDAsMFwiLGZpbGw6ITF9LGlbXCJHUi5FUS5NVUxUSUZVTkNUSU9OQUwgRUFSVEhNT1ZFUi9ESUdHRVJcIl09W2lbXCJHUi5FUS5FQVJUSE1PVkVSXCJdLGEoXCJNRlwiKV0saVtcIkdSLkVRLk1JTkUgQ0xFQVJJTkcgRVFVSVBNRU5UXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw4MCAwLDE1IC0zMCwyNSA2MCwwIC0zMCwtMjVcIixmaWxsOiExfSxpW1wiR1IuRVEuTUlORSBMQVlJTkcgVkVISUNMRVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gOTAsODUgMjAsMzAgbSAwLC0zMCAtMjAsMzAgbSAxMCwtMzAgMCwzMFwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjEwfV0saVtcIkdSLkVRLk1JTkUgU0NBVFRFUkFCTEVcIl09W2EoXCJTXCIpLHt0eXBlOlwiY2lyY2xlXCIsY3g6ODUsY3k6MTE1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMTUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTE1LGN5OjExNSxyOjUsZmlsbDohMX1dLGlbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw2NSBjIDAsMTUgNjAsMTUgNjAsMCBsIDAsNjUgLTYwLDAgelwifSxpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIEJBQ0tIT0VcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTMwLDEzMCAxMDAsODAgNzUsOTUgNzUsOTVcIn0se3R5cGU6XCJwYXRoXCIsZDpcIk0gNzUsMTA1IDg1LDk1IDc1LDk1IHpcIn1dLGlbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgRkVSUlkgVFJBTlNQT1JURVJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3NSwxMDAgYyAxNSwxNSAzNSwxNSA1MCwwIHpcIn0saVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBMSUdIVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDEwMCw3OC4zIDEwMCwxMzBcIn0saVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBNRURJVU1cIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDUsMTMwIDAsLTUyIE0gOTUsMTMwIGwwLC01MlwifSxpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIEhFQVZZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTEwLDEzMCAwLC01MyBtIC0yMCw1MCAwLC01MyBtIDEwLDEuMyAwLDUyXCJ9LGlbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTMwLDEzMCAtNDAsLTQwIDAsMjUgYyAwLDUgLTEwLDUgLTEwLDBcIn0saVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0suTElHSFRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDUsMTE1IDEwLC0xMFwifSxpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDSy5IRUFWWVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEyMCwxMTAgLTEwLDEwIG0gLTEwLC0xMCAxMCwtMTAgbSAtNSwxNSAxMCwtMTBcIn0saVtcIkdSLkVRLk1FRElDQUwgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDEwMCBsIDYwLDAgTSAxMDAsNzguMyAxMDAsMTMwXCJ9LGlbXCJHUi5FUS5NRURJQ0FMIEVWQUNVQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsODUgMTAsMCAwLDEwIDEwLDAgMCwxMCAtMTAsMCAwLDEwIC0xMCwwIDAsLTEwIC0xMCwwIDAsLTEwIDEwLDAgelwifSxpW1wiR1IuRVEuTU9CSUxFIEVNRVJHRU5DWSBQSFlTSUNJQU5cIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCwxMDAgbCA2MCwwIE0gMTAwLDc4LjMgMTAwLDEzMCBNIDg1LDg1IDExNSw4NVwifSxpW1wiR1IuRVEuQlVTXCJdPVtpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLGEoXCJCXCIpXSxpW1wiR1IuRVEuU0VNSS1UUkFJTEVSIFRSVUNLXCJdPVtpW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTQwLDkwIDAsMjAgbSAtMTAsLTEwIDEwLDBcIn0se3R5cGU6XCJjaXJjbGVcIixjeDo3NSxjeToxMzUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6ODUsY3k6MTM1LHI6NSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEyNSxjeToxMzUscjo1LGZpbGw6ITF9XSxpW1wiR1IuRVEuV0FURVIgVkVISUNMRVwiXT1baVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDk1IGMgMTAsMCAwLDEwIDEwLDEwIDEwLDAgMCwtMTAgMTAsLTEwIDEwLDAgMCwxMCAxMCwxMCAxMCwwIDAsLTEwIDEwLC0xMCAxMCwwIDAsMTAgMTAsMTAgMTAsMCAwLC0xMCAxMCwtMTBcIn0se3R5cGU6XCJjaXJjbGVcIixjeDo3NSxjeToxMzUscjo1LGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTI1LGN5OjEzNSxyOjUsZmlsbDohMX1dLGlbXCJHUi5FUS5UUkFJTiBMT0NPTU9USVZFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsNzAgMCw2MCA2MCwwIDAsLTMwIC0zMCwwIDAsLTMwIHpcIn0saVtcIkdSLkVRLlJBSUxDQVJcIl09W2lbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4Ojc1LGN5OjEzNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo4NSxjeToxMzUscjo1fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTE1LGN5OjEzNSxyOjV9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMjUsY3k6MTM1LHI6NX1dLGlbXCJHUi5FUS5DQlJOIEVRVUlQTUVOVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIk04MCwxNDAgYzAsLTIwIDEwLC02MCA1MCwtNjMgbS0xMCw2MyBjMCwtMjAgLTEwLC02MCAtNTAsLTYzIFwiLGZpbGw6ITF9LHt0eXBlOlwiY2lyY2xlXCIsY3g6NzAsY3k6ODUscjo4fSx7dHlwZTpcImNpcmNsZVwiLGN4OjEzMCxjeTo4NSxyOjh9XSxpW1wiR1IuRVEuQ09NUFVURVIgU1lTVEVNXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCwxMzIgMCwtMTAgLTM1LDAgMCwtNTAgNzAsMCAwLDUwIC0zNSwwIG0gLTI1LDEwIDUwLDBcIixmaWxsOiExfSxpW1wiR1IuRVEuQ09NTUFORCBMQVVOQ0ggRVFVSVBNRU5UIChDTEUpXCJdPWEoXCJDTEVcIiksaVtcIkdSLkVRLkdFTkVSQVRPUiBTRVRcIl09YShcIkdcIiksaVtcIkdSLkVRLkdST1VORC1CQVNFRCBNSURDT1VSU0UgREVGRU5TRSAoR01EKSBGSVJFIENPTlRST0wgKEdGQykgQ0VOVEVSXCJdPWEoXCJHRkNcIiksaVtcIkdSLkVRLklOLUZMSUdIVCBJTlRFUkNFUFRPUiBDT01NVU5JQ0FUSU9OUyBTWVNURU0gKElGSUNTKSBEQVRBIFRFUk1JTkFMIChJRFQpXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODAsODIuNCA0NSwtMiAtNCwzNyBtIC02LC0xIDAsLTM1IC0zNCw5IG0gMTIsMjEgMCw4IE0gODAsODIuNCBjIDAsMjUgMTYsMzUgNDEsMzVcIn0saVtcIkdSLkVRLkxBU0VSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDU1IDAsMjUgMTAsNSAtMjAsNSAyMCw1IC0yMCw1IDEwLDUgMCwxNSAxMCw1IC0yMCw1IDIwLDUgLTIwLDUgMjAsNSBNIDkwLDY1IDEwMCw1NSAxMTAsNjVcIn0saVtcIkdSLkVRLlRFTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSwxMjQuNCAxMCwtMzcgMjUsLTEwIDI1LDEwIDEwLDM3IHpcIn0saVtcIkdSLkVRLlRFTlQgQ0lWSUxJQU5cIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3NSwxMjAgMTAsLTMwIDE1LC0xMCAxNSwxMCAxMCwzMCB6XCJ9LGlbXCJHUi5FUS5URU5UIE1JTElUQVJZXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDEyMCAxMCwtMzAgMTUsLTEwIDE1LDEwIDEwLDMwIHpcIn0saVtcIkdSLkVRLlVOSVQgREVQTE9ZTUVOVCBTSElQTUVOVFNcIl09YShcIkRQTFlcIiksaVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsMTI1IDAsLTIwXCJ9LGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMywxMDUgMCwyMCBtIC02LC0yMCAwLDIwXCJ9LGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTA2LDEwNSAwLDIwIG0gLTEyLC0yMCAwLDIwIG0gNiwtMjAgMCwyMFwifSxpW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTQwLDEwNSAwLDIwIG0gLTEwLC0xMCAxMCwwXCJ9LGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkFVVE9NT0JJTEVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDkwLDEyNSAyMCwwIG0gLTIwLDAgYyAwLC00LjEgLTMuNCwtNy41IC03LjUsLTcuNSAtNC4xLDAgLTcuNSwzLjQgLTcuNSw3LjUgMCw0LjEgMy40LDcuNSA3LjUsNy41IDQuMSwwIDcuNSwtMy40IDcuNSwtNy41IHogbSAzNSwwIDUsMCAwLC0yMCAtMjAsMCAwLC0yMCAtMjAsMCAwLDIwIC0yMCwwIDAsMjAgNSwwIG0gNTAsMCBjIDAsLTQuMSAtMy40LC03LjUgLTcuNSwtNy41IC00LjEsMCAtNy41LDMuNCAtNy41LDcuNSAwLDQuMSAzLjQsNy41IDcuNSw3LjUgNC4xLDAgNy41LC0zLjQgNy41LC03LjUgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjIsZDpcIm0gOTUsOTAgMCwxNSAxMCwwIDAsLTE1IHpcIn1dLGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxkOlwibSA5MCwxMjUgMjAsMCBtIC0yMCwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gMzUsMCBjIDAsLTQuMSAtMy40LC03LjUgLTcuNSwtNy41IC00LjEsMCAtNy41LDMuNCAtNy41LDcuNSAwLDQuMSAzLjQsNy41IDcuNSw3LjUgNC4xLDAgNy41LC0zLjQgNy41LC03LjUgeiBtIDAsMCA1LDAgMCwtMjAgLTIwLDAgLTIwLDAgMCwtMjAgLTIwLDAgMCwyMCAwLDIwIDUsMFwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjIsZDpcIm0gNzUsOTAgMCwxNSAxMCwwIDAsLTE1IHpcIn1dLGlbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxkOlwibSA5MCwxMjUgMjAsMCBtIC0yMCwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gMzUsMCBjIDAsLTQuMSAtMy40LC03LjUgLTcuNSwtNy41IC00LjEsMCAtNy41LDMuNCAtNy41LDcuNSAwLDQuMSAzLjQsNy41IDcuNSw3LjUgNC4xLDAgNy41LC0zLjQgNy41LC03LjUgeiBtIDAsMCA1LDAgMCwtMjAgMCwtMjAgLTIwLDAgLTIwLDAgLTIwLDAgMCwyMCAwLDIwIDUsMFwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZXdpZHRoOjIsZDpcIm0gMTE1LDkwIDAsMTUgMTAsMCAwLC0xNSB6IG0gLTIwLDAgMCwxNSAxMCwwIDAsLTE1IHogbSAtMjAsMCAwLDE1IDEwLDAgMCwtMTUgelwifV0saVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxkOlwibSA5MCwxMjUgYyAwLC00LjEgLTMuNCwtNy41IC03LjUsLTcuNSAtNC4xLDAgLTcuNSwzLjQgLTcuNSw3LjUgMCw0LjEgMy40LDcuNSA3LjUsNy41IDQuMSwwIDcuNSwtMy40IDcuNSwtNy41IHogbSAzNSwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gLTM1LDAgMjAsMCBtIDE1LDAgNSwwIDAsLTIwIDAsLTIwIC0yMCwwIC0yMCwwIDAsMjAgLTIwLDAgMCwyMCA1LDBcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2V3aWR0aDoyLGQ6XCJtIDk1LDkwIDAsMTUgMTAsMCAwLC0xNSB6XCJ9XSxpW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxkOlwibSA5MCwxMjUgMjAsMCBtIC0yMCwwIGMgMCwtNC4xIC0zLjQsLTcuNSAtNy41LC03LjUgLTQuMSwwIC03LjUsMy40IC03LjUsNy41IDAsNC4xIDMuNCw3LjUgNy41LDcuNSA0LjEsMCA3LjUsLTMuNCA3LjUsLTcuNSB6IG0gMzUsMCBjIDAsLTQuMSAtMy40LC03LjUgLTcuNSwtNy41IC00LjEsMCAtNy41LDMuNCAtNy41LDcuNSAwLDQuMSAzLjQsNy41IDcuNSw3LjUgNC4xLDAgNy41LC0zLjQgNy41LC03LjUgeiBtIDAsMCA1LDAgMCwtMjAgLTYwLDAgMCwyMCA1LDAgbSAxNSwtMjAgNSwtMTVcIn0saVtcIkdSLkVRLlBBQ0sgQU5JTUFMXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsMTI1IDE1LC01MCAxNSw1MCAxNSwtNTAgMTUsNTAgXCJ9LGlbXCJHUi5FUS5NSVNTSUxFIFNVUFBPUlRcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwMCxmb250c2l6ZToyMCx0ZXh0OlwiTVNMXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZToyMCx0ZXh0OlwiU1BUXCJ9XSxpW1wiR1IuRVEuTUlTU0lMRSBUUkFOU0xPQURFUlwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNU0xcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3NSw3MCA1MCwwIG0gLTI1LDEwIGMgMCwtNSAwLC0xMCAwLC0xMFwifV0saVtcIkdSLkVRLk1JU1NJTEUgVFJBTlNQT1JURVJcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiTVNMXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTUsODUgOTAsMFwifV0saVtcIkdSLkVRLk1JU1NJTEUgQ1JBTkUvTE9BRElORyBERVZJQ0VcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiTVNMXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzUsODAgMjUsLTIwIGMgMCwwIDAsMTUgMCwxNSBsIDUsMCAwLC01XCJ9XSxpW1wiR1IuRVEuTUlTU0lMRSBQUk9QRUxMQU5UIFRSQU5TUE9SVEVSXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo5MCx5OjExMCxmb250c2l6ZToyMCx0ZXh0OlwiTVNMXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTIwLDExNSAwLC0xNSAtMTAsLTEwIDIwLDAgLTEwLDEwXCJ9XSxpW1wiR1IuRVEuTUlTU0lMRSBXQVJIRUFEIFRSQU5TUE9SVEVSXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMDAsZm9udHNpemU6MjAsdGV4dDpcIk1TTFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MjAsdGV4dDpcIldIRFwifV0saVtcIkdSLkVRLkxBTkQgTUlORVwiXT1OP3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjIyLGZpbGw6ITF9Olt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDY1IDYwLDAgLTMwLDY1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6OTAsZm9udGZhbWlseTpcIkFyaWFsXCIsZm9udHNpemU6MzAsdGV4dDpcIk1cIn1dLGlbXCJHUi5FUS5BTlRJUEVSU09OTkVMIExBTkQgTUlORVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJNMTE3LDgyIGwyMCwtMTggLTE4LDI1eiBNODMsODIgbC0yMCwtMTggMTgsMjV6XCIsc3Ryb2tlOiExfV0saVtcIkdSLkVRLkFOVElQRVJTT05ORUwgTEFORCBNSU5FIExFU1MgVEhBTiBMRVRIQUxcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjIyLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJNMTE3LDgyIGwyMCwtMTggLTE4LDI1eiBNODMsODIgbC0yMCwtMTggMTgsMjV6XCIsc3Ryb2tlOiExfV0saVtcIkdSLkVRLkFOVElUQU5LIE1JTkVcIl09e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MjJ9LGlbXCJHUi5FUS5JTVBST1ZJU0VEIEVYUExPU0lWRSBERVZJQ0VcIl09YShcIklFRFwiKSxpW1wiR1IuRVEuTEFORCBNSU5FU1wiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJNXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpSP1wibSAxMzUsNzAgLTcwLDAgMzUsNzAgelwiOlwibSA2NSwxMzAgNzAsMCAtMzUsLTcwIHpcIn1dLGlbXCJHUi5FUS5TRU5TT1JcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDYwIGMgMCwxNSAyNSw0MCA0MCw0MCAtMTUsMCAtNDAsMjUgLTQwLDQwIDAsLTE1IC0yNSwtNDAgLTQwLC00MCAxNSwwIDQwLC0yNSA0MCwtNDAgelwifSxpW1wiR1IuRVEuU0VOU09SIEVNUExBQ0VEXCJdPVtzLl9zY2FsZSguNzUsaVtcIkdSLkVRLlNFTlNPUlwiXSkse3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw3NSAxMCwtMTUgMTAsMTUgMTAsLTE1IDEwLDE1IDEwLC0xNSAxMCwxNVwifV0saVtcIkdSLkVRLlJBREFSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNNzIsOTUgbDMwLC0yNSAwLDI1IDMwLC0yNSBNNzAsNzAgYzAsMzUgMTUsNTAgNTAsNTBcIixmaWxsOiExfSxpW1wiR1IuRVEuQU5URU5OQUVcIl09W10saVtcIkdSLkVRLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OUyBFUVVJUE1FTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsc3Ryb2tlOm8sZDpcIm0gMTEwLDk1IDEwLDAgbSAtMTAsMTAgMTAsMCBtIC0xMCwxMCAxMCwwIG0gLTEwLC0zMCAxMCwwIG0gLTEwLC01IC0xMCwxMCAtMzAsMCAwLDIwIDMwLDAgMTAsMTAgelwifSxpW1wiR1IuSU4uSUMuRUxERVIgQ0FSRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjAuMSwxMTkuMSBjIDAsLTYuMyAyLjMsLTguMiAzLjksLTEyLjYgMSwtMi42IDEuNiwtMy4zIDEuOCwtNi41IDAuMiwtMi40IDAuOSwtNC43IDAuOSwtNy4yIHYgLTIuNiBjIDAsLTIuNiAtMi4yLC04LjkgLTMuMywtMTAuNSAtMS4zLC0yIC00LjgsLTUuNCAtNi43LC02LjkgLTIuMiwtMS44IC01LjQsLTQuNiAtOC4yLC01LjYgLTEuNiwtMC41IC05LjgsLTIuNCAtMTEuNCwtMi4zIGwgLTUuNywwLjYgdiAwLjggYyAwLDAuOCAyLDIuNyAyLjQsMy4zIDAsMy4zIDAuOCw2LjggLTEuMyw4LjQgLTIuMiwxLjYgLTIuOCwzLjQgLTMuOCw2LjMgLTAuNCwxIC0wLjksMy4xIC0xLDQgLTAuMiwxIC0wLjIsNCAtMC40LDQuNiAtMS4xLDIuNCAtMi42LDQuMiAtMy44LDYuNCBsIC01LjEsMC41IGMgLTIuMSwzLjIgLTQuNiw0LjEgLTQuNiw5LjYgdiAyNi40IGMgMC42LDAuMiAwLjQsMC4yIDAuOSwwLjIgMC41LDAgMC4zLC0wLjEgMC45LC0wLjIgdiAtMjcuNSBjIDAsLTAuNyAwLjgsLTMgMS4xLC0zLjUgMC40LDAuMiAwLjgsMC42IDEuMywwLjYgMC4zLDAgMS4xLC0wLjMgMS4zLC0wLjQgbCAyLjYsMC45IDAuOCwtMC42IDAuNiwyLjUgYyAwLjQsMC4zIDAuNCwwLjUgMC44LDAuNSBoIDAuNCBjIDAuNSwwIDAuNiwtMC4yIDAuNiwtMC42IHYgLTAuNCBjIDAsLTEgLTEuMiwtMyAtMS41LC0zLjcgMS4yLC0yLjUgNi4zLC0yLjYgOC4yLC01LjggMC45LC0xLjYgMS44LC0zIDIuNiwtNC41IDAuNCwtMC45IDIuMywtNC4xIDIuNCwtNC40IGggNC40IGMgMi4zLDAgMi4xLDIuNSAyLjYsNC4yIDAuNiwyIDIsMiAyLDQuNiAwLDIuOCAtMi45LDcgLTQsOSAtMC4zLDAuNyAtMy45LDguOCAtMy45LDguOSB2IDIgYyAwLDMgMi42LDkuMSAyLjYsMTEuMiB2IDIuMiBjIC0xLjIsMC4zIC02LjgsMi40IC02LjgsMy41IDAsMC4zIDAuNCwwLjYgMC45LDAuNiBoIDYuOCBjIDIuMywwIDQuNSwtMSA2LjYsLTEuMSB2IC0zIGMgMCwtMC42IC0xLjEsLTIuMiAtMS4xLC0zLjcgLTAuOSwtMS4zIC0xLjgsLTYgLTEuOCwtOC4yIDAsLTMuMiAxLjIsLTUuNCAyLjUsLTcuNCAyLjUsLTQgMC40LC0yLjMgNC42LC01LjEgbCAxLjgsMS43IGMgLTEsMS44IC0yLjMsMy43IC0yLjMsNi40IHYgNS45IGggMC40IHYgMC42IGMgMCwwLjkgNSw5IDUuNywxMC4zIC0xLjUsMi4zIC02LjcsMS42IC02LjgsNSBoIDcuNSBjIDEuMiwwIDMuMywtMSA0LjUsLTEuNCAxLjYsLTAuNSAyLjksLTEuMSAyLjksLTMgMCwtMC43IC0yLjksLTQuNiAtMy42LC01LjcgLTAuMywtMC40IC0yLjQsLTYgLTIuNCwtNi42IHYgLTAuNCB6IG0gLTQ1LjMsLTQ3LjkgdiAwLjYgYyAwLDQuMyAzLjcsNy45IDguMSw3LjkgaCAwLjIgYyAzLjcsMCA3LjcsLTMuNiA3LjcsLTcgdiAtMi4yIGMgMCwtMy4yIC0zLjksLTYuOCAtNy41LC02LjggaCAtMS4yIGMgLTMuNCwwIC03LjMsNCAtNy4zLDcuNSB6XCIsc3Ryb2tlOiExfSxpW1wiR1IuSU4uSUMuUkFXIE1BVEVSSUFMIFBST0RVQ1RJT04vU1RPUkFHRVwiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6OTAsZm9udHNpemU6MzAsdGV4dDpcIlBTXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyMCxmb250c2l6ZTozMCx0ZXh0OlwiUk1cIn1dLGlbXCJHUi5JTi5JQy5NSU5FXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNSw4NSAxMCwxMCA1LC01IGMgLTUsLTUgLTEwLC01IC0xNSwtNSB6IE0gOTUsODUgODUsOTUgODAsOTAgYyA1LC01IDEwLC01IDE1LC01IHogbSAtNSw1IDMwLDMwIG0gLTQwLDAgMzAsLTMwXCJ9LGlbXCJHUi5JTi5JQy5QUk9DRVNTSU5HIEZBQ0lMSVRZXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo5MCxmb250c2l6ZTozMCx0ZXh0OlwiUFJPQ1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMjAsZm9udHNpemU6MzAsdGV4dDpcIkZBQ1wifV0saVtcIkdSLklOLklDLlVUSUxJVFkgRkFDSUxJVFlcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJVVElMXCJ9LGlbXCJHUi5JTi5JQy5SRVNFQVJDSFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlImRFwifSxpW1wiR1IuSU4uSUMuVEVMRUNPTU1VTklDQVRJT05TXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDk1LDgwIDEwLDIwIC0xMCwwIDEwLDIwXCIsZmlsbDohMX0saVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw2MC41IGMgLTE2LjQsMCAtMjkuNiwxMy4yIC0yOS42LDI5LjYgMCwxMi44IDguMywyMy45IDE5LjcsMjcuOCBsIDAsMTkuNyBjIDMuMiwxLjIgNi4zLDEuOCA5LjksMS44IDMuNiwwIDYuNywtMC42IDkuOSwtMS44IGwgMCwtMTkuOCBjIDExLjUsLTMuOSAxOS44LC0xNSAxOS43LC0yNy44IDAsLTE2LjQgLTEzLjIsLTI5LjYgLTI5LjYsLTI5LjYgelwiLGZpbGw6ITF9LGlbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUiBOVUNMRUFSXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwNSxmb250c2l6ZTo0MCx0ZXh0OlwiTlwifSxpW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVIgREFNXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwNSxmb250c2l6ZTo0MCx0ZXh0OlwiSFwifSxpW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVIgRk9TU0lMXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEwNSxmb250c2l6ZTo0MCx0ZXh0OlwiRlwifSxpW1wiR1IuSU4uSUMuQVRPTUlDIEVORVJHWVwiXT17dHlwZTpcInBhdGhcIixkOlI/XCJNIDkwLjQsMTE5IEMgODQuMiwxMTUgODAsMTA5IDgwLDEwMSBsIDIwLDAgLTkuNiwxOCB6IG0gMTkuNiwwIC0xMCwtMTggMjAsMCBjIDAsOCAtNCwxNCAtMTAsMTggeiBNIDEwMCwxMDEgODkuNyw4My44IGMgMywtMiA2LjUsLTMgMTAuMywtMyA0LDAgNywxIDEwLDMgTCAxMDAsMTAxIFpcIjpcIk0gODkuOSw4Mi41IDExMCw4Mi43IDg5LjcsMTE3LjEgODAsOTkuOSAxMjAuMSwxMDAgMTEwLDExNy4zIHpcIixmaWxsOiExfSxpW1wiR1IuSU4uSUMuQVRPTUlDIEVORVJHWSBXRUFQT05TIEdSQURFXCJdPXt0eXBlOlwicGF0aFwiLGQ6Uj9cIk0gOTAuNCwxMTkgQyA4NC4yLDExNSA4MCwxMDkgODAsMTAxIGwgMjAsMCAtOS42LDE4IHogbSAxOS42LDAgLTEwLC0xOCAyMCwwIGMgMCw4IC00LDE0IC0xMCwxOCB6IE0gMTAwLDEwMSA4OS43LDgzLjggYyAzLC0yIDYuNSwtMyAxMC4zLC0zIDQsMCA3LDEgMTAsMyBMIDEwMCwxMDEgWlwiOlwiTSA4OS45LDgyLjUgMTEwLDgyLjcgODkuNywxMTcuMSA4MCw5OS45IDEyMC4xLDEwMCAxMTAsMTE3LjMgelwifSxpW1wiR1IuSU4uSUMuQUlSQ1JBRlQgUFJPRFVDVElPTiAmIEFTU0VNQkxZXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5NS4xLDEwOS4zIGMgMCwwIC0yMC44LDQuOSAtMzAuMSw2LjcgLTIuMiwwLjQgLTUuNywwLjIgLTYuNSwtMiAtMC40LC0xLjEgMy4zLC02LjYgNi41LC03LjMgOC43LC0xLjkgMjUuNywtNS41IDI1LjcsLTUuNSBsIDMuMSwtMTYuMSA0LC0wLjggMC4zLDE1LjkgMjUuNiwtNS44IDYuNSwtMTMuMiA1LjMsLTEuNCAtMy4zLDE2LjEgMTQsNC44IC00LjMsMS4yIC0xMy43LC0yLjggLTIzLjYsNi43IDMxLjYsMTEuOCAtNS41LDIuNSB6XCJ9LGlbXCJHUi5JTi5JQy5CUklER0VcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNzAsMTE1IDEwLC0xMCA0MCwwIDEwLDEwIG0gLTYwLC0zMCAxMCwxMCA0MCwwIDEwLC0xMFwiLGZpbGw6ITF9LGlbXCJHUi5JTi5JQy5CQVNFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDg1IDUwLDMwIG0gLTUwLDAgNTAsLTMwXCIsZmlsbDohMX0saVtcIkdSLklOLklDLlNFQSBTVVJGQUNFIElOU1RBTExBVElPTiwgT0lMIFJJRy9QTEFURk9STVwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTA1IDAsLTQwIG0gMjUsNDAgMCwxNSBtIC0zNSwwIDAsLTE1IDUwLDAgMCwxNVwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDg1LDkwIDE1LDAgMCwxNSAtMTUsMCAwLC0xNVwifV0saVtcIkdSLklOLklDLk1JTElUQVJZL0NJVklMSUFOLk1BVEVSSUVMXCJdPWEoXCJNQVRcIiksaVtcIkdSLklOLklDLk1JTElUQVJZL0NJVklMSUFOLlBSSU5URUQgTUVESUFcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjkwLHI6MTAsZmlsbDohMX0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTEwLHI6MTAsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsMTAwIDc1LDBcIixmaWxsOiExfV0saVtcIkdSLklOLklDLklORlJBU1RSVUNUVVJFLkJBTktJTkcgRklOQU5DRSBBTkQgSU5TVVJBTkNFICBJTkZSQVNUUlVDVFVSRS5FQ09OT01JQyBJTkZSQVNUUlVDVFVSRSBBU1NFVFwiXT1hKFwiRUNPTlwiKSxpW1wiR1IuSU4uSUMuSU5GUkFTVFJVQ1RVUkUuVEVMRUNPTU1VTklDQVRJT05TIElORlJBU1RSVUNUVVJFLlRFTEVDT01NVU5JQ0FUSU9OU1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCwxMDUgMjAsMCAwLDAgbSAtMjUsMTUgMTUsLTMwIDE1LDMwIG0gLTU1LC00MCAyNSwxMCAwLC0xMCAxNSwxMCAxNSwtMTAgMCwxMCAyNSwtMTBcIixmaWxsOiExfSxpW1wiR1IuSU4uTTEuUkFESU9MT0dJQ0FMXCJdPWwoXCJSXCIpLGlbXCJHUi5JTi5NMS5DT0FMXCJdPWwoXCJDT1wiKSxpW1wiR1IuSU4uTTEuR0VPVEhFUk1BTFwiXT1sKFwiR1RcIiksaVtcIkdSLklOLk0xLkhZRFJPRUxFQ1RSSUNcIl09bChcIkhZXCIpLGlbXCJHUi5JTi5NMS5OQVRVUkFMIEdBU1wiXT1sKFwiTkdcIiksaVtcIkdSLklOLk0xLlBFVFJPTEVVTVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsNzUgMCwtMTAgLTYsLTEwIDEyLDAgLTYsMTBcIixmaWxsOiExfSxpW1wiR1IuSU4uTTEuQ0lWSUxJQU5cIl09bChcIkNJVlwiKSxpW1wiR1IuSU4uTTEuQ0lWSUxJQU4gVEVMRVBIT05FXCJdPWwoXCJUXCIpLGlbXCJHUi5JTi5NMS5DSVZJTElBTiBURUxFVklTSU9OXCJdPWwoXCJUVlwiKSxpW1wiR1IuSU4uTTIuQ0hFTUlDQUwgV0FSRkFSRSBQUk9EVUNUSU9OXCJdPXIoXCJDXCIpLGlbXCJHUi5JTi5NMi5OVUNMRUFSIFdBUkZBUkUgUFJPRFVDVElPTlwiXT1yKFwiTlwiKSxpW1wiR1IuSU4uTTIuUkFESU9MT0dJQ0FMIFdBUkZBUkUgUFJPRFVDVElPTlwiXT1yKFwiUlwiKSxpW1wiR1IuSU4uTTIuQVRPTUlDIEVORVJHWSBSRUFDVE9SXCJdPXIoXCJBXCIpLGlbXCJHUi5JTi5NMi5OVUNMRUFSIE1BVEVSSUFMIFBST0RVQ1RJT05cIl09cihcIlBcIiksaVtcIkdSLklOLk0yLk5VQ0xFQVIgTUFURVJJQUwgU1RPUkFHRVwiXT1yKFwiU1wiKSxpW1wiR1IuSU4uTTIuQ0hFTUlDQUwgJiBCSU9MT0dJQ0FMIFdBUkZBUkVcIl09cihcIkJcIiksaVtcIkdSLklOLk0yLlNISVAgQ09OU1RSVUNUSU9OXCJdPXIoXCJZUkRcIiksaVtcIkdSLklOLk0yLldFQVBPTlMgR1JBREUgUFJPRFVDVElPTlwiXT1yKFwiV1wiKSxpW1wiU09GLklDLlVOREVSV0FURVIgREVNT0xJVElPTiBURUFNXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMix0ZXh0OlwiVURUXCJ9LGlbXCJTT0YuTTIuQVRUQUNLXCJdPXIoXCJBXCIpLGlbXCJTT0YuTTIuUkVGVUVMXCJdPXIoXCJLXCIpLGlbXCJTT0YuTTIuVVRJTElUWVwiXT1yKFwiVVwiKSxpW1wiU09GLk0yLlZTVE9MXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEzNSxmb250c2l6ZToyMCx0ZXh0OlwiVlNUT0xcIn0saVtcIlNPRi5NMi5DT01CQVQgU0VBUkNIIEFORCBSRVNDVUVcIl09cihSP1wiQ1NBUlwiOlwiSFwiKSxpW1wiU1QuSUMuQVJSRVNUXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDkyLjUsMTAwIDE1LDAgbSAtMi41LC0xMCBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgeiBtIC01LDUgMCwyMCBtIDIwLC0xNSBjIDAsMTEgLTksMjAgLTIwLDIwIC0xMSwwIC0yMCwtOSAtMjAsLTIwIDAsLTExIDksLTIwIDIwLC0yMCAxMSwwIDIwLDkgMjAsMjAgelwiLGZpbGw6ITF9LGlbXCJTVC5JQy5BUlNPTi9GSVJFXCJdPVI/W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDg0LjYsMTAxLjYgYyAxLjMsMjMuMSAzMSwyMy4yIDMwLjcsLTEuOSAtMS41LDIuMSAtNC42LDYuNSAtOC4xLDcuMyAxLjksLTIuNCAyLjYsLTguNSAyLjQsLTEyLjkgLTEuNywzLjQgLTQsNy45IC03LDcuOCAxLjcsLTQuMyAyLjcsLTkuNCAtMC41LC0xMy43IC0wLjIsMyAwLjgsNy4xIC0xLjksNyAtMi43LC0wLjEgLTIuOSwtNC40IC0xLjEsLTEwLjggLTQsNC4xIC02LjIsOS44IC0zLjgsMTcuNSAtMS45LC0wLjIgLTQuNCwtMS45IC03LC03LjggLTEuNSw0LjkgMS4yLDkuNiAzLjIsMTMuNyAtMi40LC0xLjEgLTYsLTMgLTcsLTYuMiB6XCIsc3Ryb2tlOiExfSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo3NSxmb250c2l6ZToyNSx0ZXh0OlwiQVNOXCJ9XTp7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIkZJUkVcIn0saVtcIlNULklDLkFUVEVNUFRFRCBDUklNSU5BTCBBQ1RJVklUWVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjcsMTI3IDUsNSBtIC0xNSwtMTUgNSw1IG0gLTE1LC0xNSA1LDUgbSAtMTUsLTE1IDUsNSBtIC0xNSwtMTUgNSw1IG0gLTE1LC0xNSA1LDUgbSAtMTUsLTE1IDUsNVwiLGZpbGw6ITF9LGlbXCJTVC5JQy5CTEFDSyBMSVNUIExPQ0FUSU9OXCJdPWEoXCJCTEtcIiksaVtcIlNULklDLkJMQUNLIE1BUktFVElOR1wiXT1be3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6OTUsZm9udHNpemU6MzAsdGV4dDpcIkJMS1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIk1LVFwifV0saVtcIlNULklDLkJPTUJcIl09YShcIkJPTUJcIiksaVtcIlNULklDLkJPT0JZIFRSQVBcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsMTA1IDE1LC0yNSAxNSwyNSBtIC0zNSw1IGMgMCwtMTAgNDAsLTEwIDQwLDAgMCwxMCAtNDAsMTAgLTQwLDAgelwiLGZpbGw6ITF9LGlbXCJTVC5JQy5DT01QT1NJVEUgTE9TU1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODUgMCwzMCBtIC0zNSwtMTUgNDUsMCBtIDIwLDAgYyAwLDUuNSAtNC41LDEwIC0xMCwxMCAtNS41LDAgLTEwLC00LjUgLTEwLC0xMCAwLC01LjUgNC41LC0xMCAxMCwtMTAgNS41LDAgMTAsNC41IDEwLDEwIHpcIixmaWxsOiExfSxpW1wiU1QuSUMuREVNT05TVFJBVElPTlwiXT1hKFwiTUFTU1wiKSxpW1wiU1QuSUMuRFJJVkUtQlkgU0hPT1RJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTUsODUgNSwtNSA1LDUgbSAtNSwtNSAwLDMwIG0gLTE1LDAgMzAsMCBtIDUsNSBjIDAsMi44IC0yLjIsNSAtNSw1IC0yLjgsMCAtNSwtMi4yIC01LC01IDAsLTIuOCAyLjIsLTUgNSwtNSAyLjgsMCA1LDIuMiA1LDUgeiBtIC0zMCwwIGMgMCwyLjggLTIuMiw1IC01LDUgLTIuOCwwIC01LC0yLjIgLTUsLTUgMCwtMi44IDIuMiwtNSA1LC01IDIuOCwwIDUsMi4yIDUsNSB6XCIsZmlsbDohMX0saVtcIlNULklDLkRSVUcgUkVMQVRFRCBBQ1RJVklUSUVTXCJdPWEoXCJEUlVHXCIpLGlbXCJTVC5JQy5FWFBMT1NJT05cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTEwLDU1IDUsMjAgMTUsLTEwIDAsMTUgMTUsNSAtMTUsMTAgMTUsMTAgLTE1LDUgNSwxNSAtMjAsLTUgLTUsMjAgLTEwLC0xNSAtMTAsMjAgLTUsLTI1IC0yMCwxMCA1LC0xNSBMIDU1LDEwNSA3MCw5NSA2MCw4NSA3MCw4MCA3MCw2NSA4NSw3NSA5MCw1NSAxMDAsNzAgelwiLGZpbGw6ITF9LGlbXCJTVC5JQy5FWFRPUlRJT05cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTMwLGZvbnRzaXplOjgwLHRleHQ6XCIkXCJ9LGlbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA1LDg1IGMgLTUsMTAgLTUsMjAgMCwzMCBtIDAsLTMwIGMgLTIwLDAgLTIwLDMwIDAsMzBcIixmaWxsOiExfSx7VW5rbm93bjp7dHlwZTpcInBhdGhcIixkOlwiTTM1LDEyMCBsMTMwLDAgXCIsZmlsbDohMX0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGQ6XCJNMjUsMTIwIGwxNTAsMCBcIixmaWxsOiExfSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGQ6XCJNNDUsMTIwIGwxMTAsMCBcIixmaWxsOiExfSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGQ6XCJNNTAsMTIwIGwxMDAsMCBcIixmaWxsOiExfX1bVF1dLGlbXCJTVC5JQy5HUkFGRklUSVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMTAsODAgYyAtMTAsMCAtMTAsMTAgMCwxMCAxMCwwIDEwLDEwIDAsMTAgLTEwLDAgLTEwLDEwIDAsMTAgMTAsMCAxMCwxMCAwLDEwIE0gOTAsODAgYyAtMTAsMCAtMTAsMTAgMCwxMCAxMCwwIDEwLDEwIDAsMTAgLTEwLDAgLTEwLDEwIDAsMTAgMTAsMCAxMCwxMCAwLDEwXCIsZmlsbDohMX0saVtcIlNULklDLkdST1VQXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEzMyw5MCBjIDAsMTAgLTE1LDEwIC0xNSwwIDAsLTEwIDE1LC0xMCAxNSwwIHogbSAtOCw3LjMgMCwyNSBtIC0xMCwtMjAgMjAsMCBtIC01MiwtMTIuMyBjIDAsMTAgLTE1LDEwIC0xNSwwIDAsLTEwIDE1LC0xMCAxNSwwIHogbSAtOCw3LjMgMCwyNSBtIC0xMCwtMjAgMjAsMCBtIDIzLC03LjMgYyAwLDEwIC0xNSwxMCAtMTUsMCAwLC0xMCAxNSwtMTAgMTUsMCB6IG0gLTgsNy4zIDAsMjUgbSAtMTAsLTIwIDIwLDBcIixmaWxsOiExfSxpW1wiU1QuSUMuSElKQUNLSU5HIChBSVJQTEFORSlcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohIVImJkcsZDpcIm0gNzAsOTUgMCwxMCA2NSwwIDAsLTEwIHogbSA1NSwxMCAwLDEwIDUsMCAwLC0xMCB6IG0gMCwtMTAgMCwtMTAgNSwwIDAsMTAgeiBtIC00NSwxMCAwLDE1IDEwLDAgMCwtMTUgeiBtIDAsLTEwIDAsLTE1IDEwLDAgMCwxNSB6XCJ9LGlbXCJTVC5JQy5ISUpBQ0tJTkcgKEJPQVQpXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9HOiFDJiZHLGQ6XCJtIDEwNSw4MCAwLDIwIDIwLDAgeiBtIC01LDI1IDAsLTI1IG0gLTMwLDI1IDEwLDE1IDQwLDAgMTAsLTE1IHpcIn0saVtcIlNULklDLkdSQVkgTElTVCBMT0NBVElPTlwiXT1hKFwiR1JBWVwiKSxpW1wiU1QuSUMuSUVEXCJdPWEoXCJJRURcIiksaVtcIlNULklDLklORElWSURVQUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA4LDkwIGMgMCwxMCAtMTUsMTAgLTE1LDAgMCwtMTAgMTUsLTEwIDE1LDAgeiBtIC04LDcuMyAwLDI1IG0gLTEwLC0yMCAyMCwwXCIsZmlsbDohMX0saVtcIlNULklDLklOVEVSTkFMIFNFQ1VSSVRZIEZPUkNFXCJdPWEoXCJJU0ZcIiksaVtcIlNULklDLktJTExJTkcgVklDVElNXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxMDgsOTAgYyAwLDEwIC0xNSwxMCAtMTUsMCAwLC0xMCAxNSwtMTAgMTUsMCB6IG0gLTgsNy4zIDAsMjUgbSAtMTAsLTIwIDIwLDBcIixmaWxsOiExfSx7VW5rbm93bjp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTAsNjUgMTUwLDEzNVwifSxGcmllbmQ6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTI1LDUwIDE3NSwxNTBcIn0sTmV1dHJhbDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNDUsNDUgMTU1LDE1NVwifSxIb3N0aWxlOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01Nyw3MCAxNDMsMTMwXCJ9fVtUXV0saVtcIlNULklDLktJTExJTkcgVklDVElNU1wiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gMTMzLDkwIGMgMCwxMCAtMTUsMTAgLTE1LDAgMCwtMTAgMTUsLTEwIDE1LDAgeiBtIC04LDcuMyAwLDI1IG0gLTEwLC0yMCAyMCwwIG0gLTUyLC0xMi4zIGMgMCwxMCAtMTUsMTAgLTE1LDAgMCwtMTAgMTUsLTEwIDE1LDAgeiBtIC04LDcuMyAwLDI1IG0gLTEwLC0yMCAyMCwwIG0gMjMsLTcuMyBjIDAsMTAgLTE1LDEwIC0xNSwwIDAsLTEwIDE1LC0xMCAxNSwwIHogbSAtOCw3LjMgMCwyNSBtIC0xMCwtMjAgMjAsMFwiLGZpbGw6ITF9LHtVbmtub3duOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk01MCw2NSAxNTAsMTM1XCJ9LEZyaWVuZDp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNMjUsNTAgMTc1LDE1MFwifSxOZXV0cmFsOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk00NSw0NSAxNTUsMTU1XCJ9LEhvc3RpbGU6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTU3LDcwIDE0MywxMzBcIn19W1RdXSxpW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsOTUgNzAsMCBtIDAsMTAgYyAwLDUuNSAtNC41LDEwIC0xMCwxMCAtNS41LDAgLTEwLC00LjUgLTEwLC0xMCAwLC01LjUgNC41LC0xMCAxMCwtMTAgNS41LDAgMTAsNC41IDEwLDEwIHogbSAtNTAsMCBjIDAsNS41IC00LjUsMTAgLTEwLDEwIC01LjUsMCAtMTAsLTQuNSAtMTAsLTEwIDAsLTUuNSA0LjUsLTEwIDEwLC0xMCA1LjUsMCAxMCw0LjUgMTAsMTAgelwiLGZpbGw6ITF9LGlbXCJTVC5JQy5NQVNTIEdSQVZFIExPQ0FUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDc3LjUsOTAgMTAsMCBtIC01LC01IDAsMTUgbSA3LjUsLTIwIDAsMzAgLTE1LDAgMCwtMzAgeiBtIDIyLjUsMTAgMTAsMCBtIC01LC01IDAsMTUgbSAtNy41LC0yMCAwLDMwIDE1LDAgMCwtMzAgeiBtIC0xNSwyMCAxMCwwIG0gLTUsLTUgMCwyMCBtIC03LjUsLTI1IDE1LDAgMCwzMCAtMTUsMCB6XCIsZmlsbDohMX0saVtcIlNULklDLk1JTkUgTEFZSU5HXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA2MCw4NSA4MCwwIDAsMzAgLTgwLDAgelwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEzNSwxMDAgYyAwLDUuNSAtNC41LDEwIC0xMCwxMCAtNS41LDAgLTEwLC00LjUgLTEwLC0xMCAwLC01LjUgNC41LC0xMCAxMCwtMTAgNS41LDAgMTAsNC41IDEwLDEwIHogbSAtMjUsMCBjIDAsNS41IC00LjUsMTAgLTEwLDEwIC01LjUsMCAtMTAsLTQuNSAtMTAsLTEwIDAsLTUuNSA0LjUsLTEwIDEwLC0xMCA1LjUsMCAxMCw0LjUgMTAsMTAgeiBtIC0yNSwwIGMgMCw1LjUgLTQuNSwxMCAtMTAsMTAgLTUuNSwwIC0xMCwtNC41IC0xMCwtMTAgMCwtNS41IDQuNSwtMTAgMTAsLTEwIDUuNSwwIDEwLDQuNSAxMCwxMCB6XCIsc3Ryb2tlOiExfV0saVtcIlNULklDLlBBVFJPTExJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTMxLDk3IDAsLTE0IDUsMCBjIDQsMCA0LDcgMCw3IGwgLTUsMCBtIC03MSwxNSAxNSwxMCBNIDYwLDEwNSA3NSw5NSBtIC0xNSwxMCA0MCwwIC0xNSwtMTUgNDAsMFwiLGZpbGw6ITF9LGlbXCJTVC5JQy5QT0lTT05JTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsOTUgYyAwLC0yMCAzMCwtMjAgMzAsMCAwLDIwIC0zMCwyMCAtMzAsMCB6IG0gLTE1LDEwIDYwLDE1IG0gLTYwLDAgNjAsLTE1XCIsZmlsbDohMX0saVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiEhUiYmRyxzdHJva2U6byxkOlwibSAxMTAsOTUgMTAsMCBtIC0xMCwxMCAxMCwwIG0gLTEwLDEwIDEwLDAgbSAtMTAsLTMwIDEwLDAgbSAtMTAsLTUgLTEwLDEwIC0zMCwwIDAsMjAgMzAsMCAxMCwxMCB6XCJ9LGlbXCJTVC5JQy5SQURJTyBBTkQgVEVMRVZJU0lPTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl09W2lbXCJTVC5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl0se1Vua25vd246e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTUwLDY1IDEwMCwxMTAgMTAwLDkwIDE1MCwxMzVcIn0sRnJpZW5kOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0yNSw1MCAxMDAsMTEwIDEwMCw5MCAxNzUsMTUwXCJ9LE5ldXRyYWw6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTTQ1LDQ1IDEwMCwxMTAgMTAwLDkwIDE1NSwxNTVcIn0sSG9zdGlsZTp7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNNTcsNzAgMTAwLDExMCAxMDAsOTAgMTQzLDEzMFwifX1bVF1dLGlbXCJTVC5JQy5SSU9UXCJdPWEoXCJSSU9UXCIpLGlbXCJTVC5JQy5TQUZFIEhPVVNFXCJdPWEoXCJTQUZFXCIpLGlbXCJTVC5JQy5TRUFSQ0hJTkdcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTQwLDEwNSBjIC0xMCwwIC01LDAgLTEwLDAgLTE1LDAgLTUsLTE1IC0yMCwtMTUgLTE1LDAgLTUsMjAgLTIwLDIwIC0xNSwwIC01LC0yMCAtMjAsLTIwIC0xMCwwIC0xMCwxMCAtMTAsMTAgbSA3MCwwIDEwLDUgLTEwLDVcIixmaWxsOiExfSxpW1wiU1QuSUMuU1BZXCJdPWEoXCJTUFlcIiksaVtcIlNULklDLlNOSVBJTkdcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDk1LDg1IDUsLTUgNSw1IG0gLTUsLTUgMCw0MFwiLGZpbGw6ITF9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5Ojc1LGZvbnRzaXplOjI1LHRleHQ6XCJTXCJ9XSxpW1wiU1QuSUMuVkFOREFMSVNNL0xPT1QvUkFOU0FDSy9QTFVOREVSL1NBQ0tcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTE1LDEwMCBjIDAsLTUgNSwtMTAgMTAsLTEwIE0gODUsMTAwIEMgODUsOTUgODAsOTAgNzUsOTAgbSA1LDI1IGMgLTAuNSwtMjkuNSA0MCwtMzAgNDAsMCB6XCIsZmlsbDohMX0saVtcIlNULklDLldISVRFIExJU1QgTE9DQVRJT05cIl09YShcIldIVFwiKSxpW1wiU1QuSUMuUk9CQkVSWVwiXT1hKFwiUk9CXCIpLGlbXCJTVC5JQy5USEVGVFwiXT1hKFwiVEhGXCIpLGlbXCJTVC5JQy5CVVJHTEFSWVwiXT1hKFwiQlVSXCIpLGlbXCJTVC5JQy5TTVVHR0xJTkdcIl09YShcIlNNR0xcIiksaVtcIlNULklDLlNBQk9UQUdFXCJdPWEoXCJTQUJcIiksaVtcIlNULklDLklMTEVHQUwgRFJVRyBPUEVSQVRJT05cIl09YShcIkRSVUdcIiksaVtcIlNULklDLlNQWVwiXT1hKFwiU1BZXCIpLGlbXCJTVC5JQy5XQVJSQU5UIFNFUlZFRFwiXT1hKFwiV05UXCIpLGlbXCJTVC5JQy5QT0xMSU5HIFBMQUNFL0VMRUNUSU9OXCJdPWEoXCJWT1RFXCIpLGlbXCJTVC5JQy5OQVRVUkFMIEVWRU5UXCJdPWEoXCJOQVRcIiksaVtcIlNULklDLkdFT0xPR0lDXCJdPWEoXCJHRU9MXCIpLGlbXCJTVC5JQy5IWURSTy1NRVRFT1JPTE9HSUNBTFwiXT1hKFwiSFlEUlwiKSxpW1wiU1QuSUMuSU5GRVNUQVRJT05cIl09YShcIklORlNcIiksaVtcIlNULklDLkdSRU5BREVcIl09YShcIkdcIiksaVtcIlNULklDLklOQ0VORElBUllcIl09YShcIklcIiksaVtcIlNULklDLk1JTkVcIl09YShcIk1cIiksaVtcIlNULklDLkhPVVNFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDcwLDEwMCA2MCwwIG0gLTMwLC0yMCAtMzAsMjAgMCwzNSA2MCwwIDAsLTM1IC0zMCwtMjAgelwifSxpW1wiU1QuSUMuUk9DSyBUSFJPV0lOR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA5MCw2MCAyNSwyNSBNIDcwLDY1IDk1LDkwIE0gNjAsODAgODAsMTAwIG0gNDUsLTUgNSwxNSAtNSwxNSAtMjAsMTAgLTIwLC01IC01LC0yMCA1LC01IDEwLDAgNSwtMTAgMTAsLTUgMTUsNSB6XCJ9LGlbXCJTVC5NMS5BQ0NJREVOVFwiXT1sKFwiQUNDXCIpLGlbXCJTVC5NMS5BU1NBU1NJTkFUSU9OXCJdPWwoXCJBU1wiKSxpW1wiU1QuTTEuQ0lWSUxJQU5cIl09bChcIkNJVlwiKSxpW1wiU1QuTTEuQ09FUkNFRC9JTVBSRVNTRURcIl09bChcIkNcIiksaVtcIlNULk0xLkNPTUJBVFwiXT1sKFwiQ0JUXCIpLGlbXCJTVC5NMS5ERUFEIEJPRFlcIl09bChcIkRCXCIpLGlbXCJTVC5NMS5ESVNQTEFDRUQgUEVSU09OUywgUkVGVUdFRVMsIEFORCBFVkFDVUVFU1wiXT1sKFwiRFBSRVwiKSxpW1wiU1QuTTEuRFJVR1wiXT1sKFwiRFJVR1wiKSxpW1wiU1QuTTEuRVZJQ1RJT05cIl09bChcIkVWXCIpLGlbXCJTVC5NMS5FWEVDVVRJT04gKFdST05HRlVMIEtJTExJTkcpXCJdPWwoXCJFWFwiKSxpW1wiU1QuTTEuRVhGSUxUUkFUSU9OXCJdPWwoXCJFWEZMXCIpLGlbXCJTVC5NMS5GT1JFSUdOIEZJR0hURVJTXCJdPWwoXCJGRlwiKSxpW1wiU1QuTTEuR0FOR1wiXT1sKFwiR0FOR1wiKSxpW1wiU1QuTTEuR09WRVJOTUVOVCBPUkdBTklaQVRJT05cIl09bChcIkdPXCIpLGlbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl09bChcIkhcIiksaVtcIlNULk0xLkhPVVNFLVRPLUhPVVNFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISFSJiZHLGQ6XCJtIDExMCw2NSAtMjAsMCAwLDE1IDIwLDAgeiBtIC0xMCwtMTAgLTEwLDEwIDIwLDAgelwifSxpW1wiU1QuTTEuSUVEXCJdPWwoXCJJRURcIiksaVtcIlNULk0xLklOQ0lERU5UXCJdPWwoXCJJTkNcIiksaVtcIlNULk0xLklORklMVFJBVElPTlwiXT1sKFwiSU5GTFwiKSxpW1wiU1QuTTEuS0lETkFQUElOR1wiXT1sKFwiS1wiKSxpW1wiU1QuTTEuTEFCUkFUT1JZXCJdPWwoXCJMQUJcIiksaVtcIlNULk0xLkxFQURFUlwiXT1sKFwiTERSXCIpLGlbXCJTVC5NMS5MT09UXCJdPWwoXCJMT09UXCIpLGlbXCJTVC5NMS5NRUVUSU5HXCJdPWwoXCJNVEdcIiksaVtcIlNULk0xLk1VUkRFUlwiXT1sKFwiTVVcIiksaVtcIlNULk0xLk5PTkdPVkVSTk1FTlRBTCBPUkdBTklaQVRJT04gKE5HTylcIl09bChcIk5HT1wiKSxpW1wiU1QuTTEuT1RIRVJcIl09bChcIk9USFwiKSxpW1wiU1QuTTEuUElSQUNZXCJdPWwoXCJQSVwiKSxpW1wiU1QuTTEuUFJFTUFUVVJFXCJdPWwoXCJQXCIpLGlbXCJTVC5NMS5SQUlEXCJdPWwoXCJSQUlEXCIpLGlbXCJTVC5NMS5SQVBFXCJdPWwoXCJSQVwiKSxpW1wiU1QuTTEuUkVMSUdJT1VTXCJdPWwoXCJSRUxcIiksaVtcIlNULk0xLlNQRUFLRVJcIl09bChcIlNQS1wiKSxpW1wiU1QuTTEuVEFSR0VURURcIl09bChcIlRHVFwiKSxpW1wiU1QuTTEuVEVSUk9SSVNUXCJdPWwoXCJURVJcIiksaVtcIlNULk0xLlRSQUZGSUNLSU5HXCJdPWwoXCJURktcIiksaVtcIlNULk0xLldJTExJTkcgUkVDUlVJVFwiXT1sKFwiV1JcIiksaVtcIlNULk0xLldSSVRURU4gUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdPWlbXCJTVC5NMS5XSUxMSU5HXCJdPWwoXCJXXCIpLGlbXCJTVC5NMS5GQUxTRVwiXT1sKFwiRkFMXCIpLGlbXCJTVC5NMS5GSU5EXCJdPWwoXCJGTkRcIiksaVtcIlNULk0xLkZPVU5EIEFORCBDTEVBUkVEXCJdPWwoXCJDTFJcIiksaVtcIlNULk0xLkhPQVggKERFQ09ZKVwiXT17dHlwZTpcInBhdGhcIixkOlwiTSA5MCw3NSA4MCw2Ny41IDkwLDYwIDkwLDc1IFogbSAxNSwwIC0xMCwtNy41IDEwLC03LjUgMCwxNSB6IG0gMTUsMCAtMTAsLTcuNSAxMCwtNy41IDAsMTUgelwifSxpW1wiU1QuTTEuQVRURU1QVEVEXCJdPWwoXCJBVFRcIiksaVtcIlNULk0xLkFDQ0lERU5UXCJdPWwoXCJBQ0NcIiksaVtcIlNULk0xLklOQ0lERU5UXCJdPWwoXCJJTkNcIiksaVtcIlNULk0xLlRIRUZUXCJdPWwoXCJUSEZcIiksaVtcIlNULk0xLlBJUkFURVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6NjAscjo3LGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gODIuNSw3NSAzNSwtMTUgbSAwLDE1IC0zNSwtMTUgbSAzLDcgNSwxMCBtIDI3LC0xMCAtMTAsMTBcIn1dLGlbXCJTVC5NMi5MRUFERVIgT1IgTEVBREVSU0hJUFwiXT1yKFwiTERSXCIpLGlbXCJTVC5NMi5SRUxJR0lPVVNcIl09cihcIlJFTFwiKSxpW1wiQUMuSUMuQ1JJTUlOQUwuQUNUSVZJVFkuSU5DSURFTlRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5OC43LDY2LjcgYyAtMy4yLDAuNyAtNi4zLDMuNyAtNi40LDcgMC4zLDMuNiA1LjMsMi44IDcsMC42IDIsLTEuMiAxLjcsLTQuNSA0LjUsLTMuNyAyLjYsLTAuNiAzLjIsMy4yIDUuOSwzLjIgMS42LDEuNSA0LjQsLTAuNiA1LjQsMS4yIDAuNywxLjEgMS41LDIuMiAyLjIsMy4zIC0yLDMuMSAtMS4zLDcuOSAxLjksMTAgMy41LDEuMSA0LjgsLTMuNSA0LjEsLTYuMiAtMC4yLC0zIC0yLjUsLTUgLTUuMSwtNS40IC0xLjUsLTEuOSAtMi43LC0zLjQgLTEuNiwtNS42IC0xLC0zLjMgLTUuMSwtNC41IC04LjIsLTQuMyAtMi4yLDAuMyAtMi45LDIuNiAtNS4zLDEuOSAtMS45LDAuNCAtMS45LC0yLjggLTQuMywtMiB6IG0gMC4yLDEuMyBjIDIuNywwLjUgMC45LDAuNiAtMC42LDEuMyAtMC41LDIuMiAzLjgsMC40IDEuNCwyLjkgLTAuOSwxLjkgLTUuOCw0LjcgLTUuOSwxLjEgMC4xLC0yLjUgMi43LC00LjggNS4xLC01LjIgeiBtIDEwLjMsMC4xIGMgMi40LC0wLjUgNy4xLDIuMyA1LjYsMy43IC0wLjgsLTIuMSAtMywwIC0xLjIsMS4yIC0xLjcsMC45IC03LjQsLTEuNiAtNS43LC0yLjQgMi41LDAuOCAyLjgsLTIuNyAtMCwtMS45IC0xLjQsMC4yIDEuMSwtMC44IDEuMywtMC42IHogTSA4MS45LDcxLjYgYyAtMS44LDEuOSAtMy42LDMuOSAtNS41LDUuOCAtNy41LC0wLjEgLTE0LDYuMiAtMTUuNywxMy4yIC0wLjYsNC4yIDAuNSw4LjUgMi44LDEyIDAuNywzLjkgLTMuMiw2LjcgLTMsMTAuNyAtMC44LDcuNCA0LjgsMTQuNSAxMS43LDE2LjggMi4zLC0wLjQgMS4zLDEuMyAxLjQsMiAxLjUsLTAuNCAzLC0wLjggNC42LC0xLjIgLTAuMiwxLjUgLTAuMSwyLjcgMS40LDEuMiAwLjksLTAuMyAyLjMsLTIuMiAyLjksLTEuNSAwLjIsMi4yIDEuMiwwLjEgMiwtMC43IDAuOCwtMS4yIDEuNiwtMi4zIDIuNCwtMC41IDEuMiwtMi40IDQuMSwtNy4yIC0wLjgsLTcuMyAtMy40LDIuMyAtNy41LDQuNiAtMTEuOCwzLjUgLTYuMywtMS41IC0xMC45LC04LjggLTguMiwtMTQuOSAwLjQsLTMuOSA2LjgsLTMuNCA1LC04LjIgLTEuOCwtMi42IC01LjcsLTIuOSAtNS43LC03IC0xLjUsLTcuMyA1LjYsLTE0LjcgMTMsLTEzLjcgNC43LDAuNSA3LjQsNC45IDEwLjgsNy42IDEuOSwxLjkgNC4xLDUuMSA1LjksMS40IDIuOCwtMiA0LjMsLTQuNyAxLjgsLTcuNiBDIDk0LjgsNzkuNyA5MC45LDc3LjMgODgsNzQuNCA4Ni4zLDcyLjkgODMuOSw3Mi42IDgxLjksNzEuNiB6IG0gMy4zLDMuOCBjIDEuNiwxLjEgMi45LDIuMSAwLjMsMy4zIC0wLjksMy43IC01LjEsLTAuNSAtMS41LC0xLjUgMC40LC0wLjYgMC45LC0xLjEgMS4yLC0xLjggeiBtIDM0LjIsMy4xIGMgMywxLjQgMy45LDYuNCAxLjQsOC44IC0yLjksMC4xIC0zLjYsLTQuMyAtMy4xLC02LjYgMC4xLC0yLjkgMi41LDIuNyAyLjUsLTAuNyAtMC4yLC0wLjUgLTAuNSwtMSAtMC44LC0xLjQgeiBNIDEyNy4zLDkwLjIgYyAtNC4zLDAuNCAtOC44LC0wIC0xMy4xLDEgLTIuMSwxLjEgLTUuNywxLjUgLTQuNiw0LjUgMC4xLDEuOCAwLjIsMy42IDAuNCw1LjQgLTQuOSw0LjkgLTUuNSwxMy4zIC0yLjIsMTkuMiAyLjQsNC4zIDcsNyAxMS44LDcuOCAzLjMsNC45IDcuMywtMS4zIDExLjIsLTEuNyA1LjUsLTIuNSA4LjksLTguNSA4LjUsLTE0LjUgMC4yLC01IC0yLjQsLTEwLjEgLTYuNywtMTIuOCAtMC4xLC0yLjMgLTAuMiwtNC42IC0wLjMsLTYuOSAtMS42LC0wLjggLTMuNCwtMS40IC01LjEsLTIuMSB6IE0gMTI3LjgsOTIuNSBjIC0wLjksMS43IDAuNiwzLjggLTAuOSw0LjkgLTIuMywwLjcgLTEuNywtMi40IC0xLjksLTMuOCAtMC42LC0xLjcgMS45LC0wLjcgMi44LC0xIHogbSAtMi45LDguMyBjIDQuMSwwLjkgOCwzLjcgOS4zLDcuOSAwLjksMy43IDAuNSw4IC0yLjMsMTAuOSAtMS43LDIgLTUuMyw0LjMgLTcuNywzLjEgLTMuMSwtMC44IC01LjgsMi4xIC04LjYsLTAuNSAtNi45LC00LjIgLTcuMiwtMTYgMC4yLC0xOS44IDIuNywtMS42IDYsLTEuNiA5LjEsLTEuNiB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSA4NS4xIDc1LjMgQyA4NSA3NS44IDg0LjIgNzYuNyA4My45IDc3LjEgQyA4My42IDc3LjYgODIuNCA3Ny45IDgyLjQgNzguNiBMIDgyLjQgNzkgQyA4Mi40IDc5LjQgODMuMyA4MC4xIDgzLjYgODAuMSBMIDgzLjggODAuMSBDIDg0LjggODAuMSA4NSA3OS4xIDg1LjQgNzguNiBDIDg1LjcgNzguMiA4Ni43IDc3LjQgODcuMiA3NyBMIDg1LjEgNzUuMyB6IE0gMTI3LjggOTIuNSBMIDEyNSA5Mi43IEwgMTI1LjIgOTYuNSBDIDEyNS4zIDk3LjUgMTI1LjkgOTcuMyAxMjYuNSA5Ny42IEMgMTI3LjEgOTcuMyAxMjcuOCA5Ny4xIDEyNy44IDk2LjMgQyAxMjcuOCA5NS44IDEyNy43IDk1LjYgMTI3LjUgOTUuMyBMIDEyNy44IDkyLjUgelwifV0saVtcIkFDLklDLkNSSU1JTkFMLkNJVklMIERJU1RVUkJBTkNFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMTAuNiwxNDIuNCAwLC0yOC42IC03LjEsMCAwLDI4LjYgeiBtIC0yMS4yLDAgNy4xLDAgMCwtMjguNiAtNy4xLDAgeiBtIDcuMSwtMjguNiBoIDcuMSB2IC0xMS44IGggMjQuNCBWIDc3LjIgaCAtNi4zIHYgMTguNiBoIC0xOCB2IC0xMC43IGMgMCwtMC45IDIuMSwtMS4yIDMsLTEuNyAwLjgsLTAuNCAyLjEsLTEuNCAyLjcsLTIgMS41LC0xLjQgMy4yLC0zLjYgMy44LC01LjkgMS42LC02LjMgLTAuMiwtMTAuNiAtMy44LC0xNC4xIC0zLC0zLjEgLTkuMiwtNC45IC0xNC4zLC0yLjcgLTMuNiwxLjYgLTguNCw2LjIgLTguNCwxMSB2IDMuMiBjIDAsMi44IDEuOSw2LjIgMy4zLDcuNyAxLDEgMS44LDEuNyAzLDIuNSAxLDAuNiAzLjYsMS4zIDMuNiwyLjIgdiAxMC43IEggNzguNCB2IC0xOC42IGggLTYuMyB2IDI0LjkgaCAyNC40IHYgMTEuOCBoIC0wIHpcIn0saVtcIkFDLklDLlNIT09USU5HXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5My4yLDg5LjcgaCAxNi44IHYgOS4zIGMgLTIuNiwwIC03LjMsMS42IC05LDEgLTIuMywtMC44IC01LjQsLTIgLTcuOCwtMi42IHYgLTcuOCBsIDAsMCB6IG0gLTMwLDAgaCAyNi4xIHYgOS42IGMgMCwwLjkgNC4xLDIgNSwyLjMgMS45LDAuNiAzLjYsMS40IDUuNSwyIDIsMC43IDMuNCwwLjQgNiwtMC4xIDEuNiwtMC4zIDUuNywtMC40IDYuNiwtMC45IDAuNiwyLjcgNC42LDE0IDQuNiwxNS4yIDAsMS42IC0xLjIsNCAtMS4zLDUuNyBsIDIxLjUsMCAtOC4yLC0yNS45IDcuOCwtNy43IGMgLTAuOCwtMS42IC00LjEsLTEzLjQgLTUuMiwtMTMuNCBoIC02OC40IHYgMTMuMiBsIDAsMCB6XCJ9LGlbXCJBQy5JQy5GSVJFIEVWRU5UXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5Ni41LDc4LjUgYyAwLC01LjEgNC4xLC05LjcgNC4xLC0xMyB2IC0wLjQgYyAwLC0xLjMgLTAsLTMuOCAtMS4xLC00LjEgLTEsNC41IC0zLjUsOCAtNS45LDExLjIgLTEuMiwxLjYgLTIuNCwzLjMgLTMuNiw1IC0xLDEuNCAtMy4xLDMuNSAtMy4xLDUuNSAwLDEuNCA2LjEsMTcuNyAzLDE3LjcgLTAuMSwwIC0zLjgsLTIuNSAtNC4yLC0yLjkgLTEuNCwtMSAtMi40LC0yLjMgLTMuMywtMy43IC0zLjEsLTQuNiAtMi40LC00LjQgLTMuOCwtMTAuMyAtMS41LDAuNCAtMi42LDUgLTIuOSw2LjkgLTAuNCwyLjQgLTAuMyw2LjYgMC4yLDkgMC42LDIuOCAxLjQsNSAyLjUsNy4zIDAuNiwxLjIgMyw1LjUgMy4xLDYuNSAtMi4yLC0wLjUgLTcsLTQuNiAtOC42LC02LjIgLTEuNSwtMS41IC01LjUsLTguMyAtNS45LC04LjYgMCw5LjkgNSwyMi44IDkuOCwyNy42IDMuMSwzLjEgNi4zLDYuNCAxMC4yLDguNiAyLjQsMS41IDEwLjUsNC4zIDE0LjMsNC4zIGggMi40IGMgMi44LDAgMTAuOCwtMyAxMi45LC00LjIgMy40LC0xLjkgNi45LC00LjcgOSwtNy45IDQuNCwtNi41IDgsLTE1IDgsLTI1LjggdiAtMS4zIGwgLTAuNCwtNS44IGMgLTAuNywwLjQgLTIuMiw0LjQgLTIuNSw1LjIgLTAuNSwxLjMgLTIsMy40IC0yLjksNC42IC0xLjQsMi4xIC01LjIsNi4zIC03LjgsNi45IHYgLTEuMSBjIDAsLTQuNCAyLjgsLTguOCAyLjgsLTEyLjQgdiAtMS45IGwgLTEuMywtMTIuMiBoIC0wLjYgYyAtMC4zLDMuOSAtMS42LDcuOSAtMy40LDEwLjUgLTEuMywyIC01LjMsNS42IC03LjcsNi4yIC0wLjIsLTAuNCAtMC40LC0wLjYgLTAuNCwtMS4zIHYgLTIuMyBjIDAsLTUuMSAzLC04LjkgMywtMTIuOCB2IC0wLjggYyAwLC0xLjUgLTIuMSwtMy45IC0yLjksLTUuMiAtMC43LC0xLjEgLTIuNCwtNC4zIC0zLjUsLTQuNiB2IDEuMyBjIDAsNi4yIC0xLjQsMTAuNiAtNS42LDEyLjYgLTEuMSwtMS43IC0zLjYsLTMuMiAtMy42LC02LjIgdiAtMS45IGwgMCwwIHpcIn0saVtcIkFDLklDLk5PTi1SRXNJZEVOVElBTCBGSVJFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjEuMiwxMjIuMyAtNi4yLDAgMCw1LjkgNi4yLDAgeiBtIC0xMi4xLDAgLTYuMSwwIDAsNS45IDYuMSwwIHogbSAtMTIuMiwwIC01LjksMCAwLDUuOSA1LjksMCB6IG0gLTEyLjMsMCAtNS43LDAgMCw1LjkgNS43LDAgeiBtIDMwLjQsLTQuOCBoIDYuMSB2IC02LjIgaCAtMi41IGMgLTEuMiwwIC0yLjUsMS41IC0zLjYsMS44IHYgNC40IHogbSAtNS45LC02LjIgLTYuMSwwIDAsNi4yIDYuMSwwIHogbSAtMTIuMiwwIC01LjksMCAwLDYuMiA1LjksMCB6IG0gLTEyLjMsMCAtNS43LDAgMCw2LjIgNS43LDAgeiBtIDI1LC0zMy40IGMgMCwtMy40IDMuNCwtNy40IDMuNCwtOS4xIDAsLTEuNCAtMC44LC00LjIgLTEuOCwtNC42IDAsNy4xIC04LjYsMTIuOCAtOC42LDE1LjcgdiAwLjQgYyAwLDAuNyAxLjksNS4yIDIuMyw2LjYgMC40LDEuNyAxLjQsNS42IDEuNiw3LjMgLTYuMiwtMC4xIC03LjMsLTkuOCAtMTAuMywtMTEuOCBsIC0wLjMsMyAwLDQuNiBjIDAsNC43IDMuNCwxMS40IDUuNiwxMy45IDEsMS4xIDQuMiwzLjcgNS41LDQuMyAwLjgsMC40IDYuMywzIDYuNiwzIDEuNCwwIDkuMiwtNy4yIDEwLjUsLTguNiAyLjUsLTIuNSA0LC05LjYgNCwtMTQuOCB2IC0wLjcgbCAtMC43LC01LjcgYyAtMSwwLjYgLTIuMSw1LjYgLTIuOCw3IC0xLjUsMy4yIC0xLjgsMy4xIC01LjQsNCAtMC4zLC0xMi4yIDYuNywtOC4zIC0yLjcsLTE5LjEgMCw0LjkgLTAuOSw3LjkgLTQuMSw5LjYgLTEuNCwtMC43IC0zLC0yLjcgLTMsLTQuOCB6IG0gLTE0LjgsMjYuNCBoIDMuNiBjIC0wLjEsLTAuNiAtMC4zLC0xLjQgLTEuMSwtMS40IGggLTEuMiB2IC0yLjcgYyAwLC0wLjkgLTAuOSwtMi40IC0xLjQsLTMgdiA3IHogbSAtMTYuNCwtMjguNiBoIDMuOSB2IDI4LjYgaCA4LjkgdiAtMjguNiBoIDMuNiB2IDUuNCBjIDAuMywtMC4yIDEuNCwtMS40IDEuNCwtMS44IHYgLTUgaCAtNi40IHYgMjguNiBoIC02LjQgdiAtMjguNiBoIC02LjEgdiAyOC42IGggLTUuMiB2IDMyLjcgaCA1NC44IHYgLTMwLjcgYyAtMC40LDAuMiAtMS4xLDEgLTEuMSwxLjYgdiAyNy41IGggLTUyLjUgdiAtMjkuOCBoIDUuMiB2IC0yOC42IGggLTAgelwifSxpW1wiQUMuSUMuUkVzSWRFTlRJQUwgRklSRVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTEuNSw4OC4zIC0wLjcsLTMgLTMwLjEsMjUuMiAxNS42LDAuMSB2IDI1LjYgaCA1MC41IHYgLTI1LjYgaCAxMi40IGMgLTAuNCwtMC41IC03LjYsLTUuOSAtOCwtNS45IC0wLjMsMCAtMS4yLDEuNiAtMS40LDEuOSBsIDEuNCwxLjQgaCAtMi40IGMgLTAuNywwLjUgLTQuOSwzLjEgLTQuOSwzLjggdiAyMi4zIGggLTE4LjMgdiAtMTIuOSBoIC04LjcgdiAxMi45IGggLTE4LjEgdiAtMjMuNSBoIDIyLjYgbCAtMi4yLC0yLjcgLTMwLjcsLTAuMSBMIDkxLjUsODguMyB6IG0gMjcuNiwyOCAtOC4yLDAgMCw4LjUgOC4yLDAgeiBtIC0yNywwLjIgLTguNywwIDAsOC4yIDguNywwIHogbSAxMSwtMzYuNCBjIDAsMC45IDIuMSw1LjMgMi41LDYuOSAwLjQsMS44IDEuNSw2LjEgMS41LDcuOCAtNy4xLC0xLjYgLTYuOSwtOS45IC0xMC4zLC0xMi4yIC0xLjcsNy41IDAuOCwxNS4xIDMuNywxOS41IDIuNCwzLjYgMi42LDMuNCA2LDYgMC40LDAuNCA3LjksNC4zIDcuOSw0LjMgMiwwIDkuNiwtNy4xIDExLjEsLTguNiAxLjgsLTEuOCA1LjYsLTEwLjggNS42LC0xNC40IFYgODMuNSBjIDAsLTEuOSAtMC4zLC0zLjIgLTEuNCwtNCAwLDIgLTEuOCw3IC0yLjYsOC40IC0wLjgsMS44IC00LjMsNC4yIC02LjMsNC43IHYgLTEuNyBjIDAsLTQuNCAyLjQsLTYuOCAyLjQsLTEwLjEgMCwtMiAtNCwtNy4yIC01LjIsLTggMCw1LjQgLTAuNyw4IC00LjIsOS44IC0xLjIsLTAuNyAtMy4xLC0yLjYgLTMuMSwtNC40IHYgLTEgYyAwLC0xLjUgMS44LC01LjQgMi41LC02LjYgMiwtMy45IDAuNSwtMy44IC0wLjQsLTcgaCAtMC40IGMgLTEuMyw1LjUgLTAuOCw0LjggLTMuOCw4LjkgLTEsMS40IC01LjQsNS45IC01LjQsNy41IHpcIn0saVtcIkFDLklDLlNDSE9PTCBGSVJFXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMzEuMyw3MyBjIC00LC0xIC0xNywtNy4yIC0xOS44LC03LjIgaCAtMi40IFYgOTYgaCAtMC43IGMgMCw1LjYgLTMuOCwxNS4zIC02LjIsMTguNiAtMiwyLjcgLTMuNyw0LjEgLTYuMiw2LjIgLTAuOCwwLjYgLTcsNC45IC03LDUuNCB2IDggaCA0NC4xIFYgOTYgaCAtMjAuNCBsIDAsLTE0LjggMTguOCwtOC4yIHogbSAtNDkuMiwxMS44IGMgMCwtMyAzLjYsLTggMy42LC0xMCAwLC0xLjggLTAuOCwtMy45IC0yLC00LjYgLTAuNCwwLjggLTAuNCwzLjYgLTAuOSw1IC0wLjMsMC43IC0xLjgsMi43IC0yLjMsMy41IC0xLjYsMi4zIC0zLjQsNC4yIC01LjEsNi40IC0yLjIsMi44IDAsNSAxLjEsOC4yIDAuOCwyLjIgMS40LDcuOSAyLjEsOS40IEMgNzEuOSwxMDIuNCA3MC42LDkxLjggNjcuNiw4OS45IGwgLTAuNiw3LjYgMC4xLDAuMiBjIDAsNSAzLjYsMTIuMyA1LjksMTUgMS4xLDEuMyA0LjMsMy42IDUuOSw0LjYgMS4xLDAuNyAyLjUsMSAzLjcsMS42IDAuNCwwLjIgMy4yLDEuOSAzLjIsMS45IDIuMSwwIDkuOSwtNy40IDExLjUsLTkgMS44LC0xLjggNS44LC0xMSA1LjgsLTE0LjQgdiAtNi4zIGMgMCwtMi4xIC0wLjQsLTIuNiAtMC43LC00LjIgaCAtMC44IGMgLTAuMiwxLjkgLTIuMiw3LjEgLTMsOC43IC0wLjcsMS4zIC02LjMsNS43IC02LjMsMy43IHYgLTEuMiBjIDAsLTMuOCAyLjQsLTcuMiAyLjQsLTEwIHYgLTAuOCBjIDAsLTEuNSAtNC4zLC02LjggLTUuNCwtNy42IDAsMi41IDAuMSw0LjggLTAuOCw2LjUgLTAuNSwwLjkgLTIuNSwzLjUgLTMuNiwzLjUgLTEuMSwwIC0zLjIsLTMuNCAtMy4yLC01LjEgelwifSxpW1wiQUMuSUMuSE9UIFNQT1RcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5Ni4zLDc4LjUgYyAwLC01LjEgNC4xLC05LjcgNC4xLC0xMyB2IC0wLjQgYyAwLC0xLjMgLTAsLTMuOCAtMS4xLC00LjEgLTEsNC41IC0zLjUsOCAtNS45LDExLjIgLTEuMywxLjYgLTIuMywzLjMgLTMuNiw0LjkgLTEsMS4zIC0zLjEsMy40IC0zLjEsNS41IDAsMS40IDYuMSwxNy43IDMsMTcuNyAtMC4xLDAgLTMuNywtMi41IC00LjIsLTIuOSAtMS40LC0xIC0yLjQsLTIuMyAtMy4zLC0zLjcgLTMuMSwtNC42IC0yLjQsLTQuNCAtMy44LC0xMC4zIC0xLjUsMC40IC0yLjYsNSAtMi45LDYuOSAtMC40LDIuNCAtMC4zLDYuNyAwLjMsOSAwLjYsMi44IDEuMyw1IDIuNSw3LjMgMC42LDEuMiAzLjEsNS41IDMuMSw2LjUgLTIuMiwtMC41IC03LjEsLTQuNiAtOC42LC02LjEgLTEuNSwtMS41IC01LjUsLTguMyAtNS45LC04LjYgMCw5LjkgNSwyMi44IDkuOCwyNy42IDMuMSwzLjEgNi4zLDYuNCAxMC4xLDguNyAyLjUsMS41IDEwLjUsNC4zIDE0LjMsNC4zIGggMi40IGMgMi45LDAgMTAuOCwtMyAxMi45LC00LjIgMy40LC0xLjkgNi45LC00LjcgOSwtNy45IDQuNCwtNi41IDgsLTE1IDgsLTI1LjcgViA5OS45IGwgLTAuNCwtNS44IGMgLTAuNywwLjQgLTIuMiw0LjQgLTIuNSw1LjIgLTAuNSwxLjMgLTIsMy40IC0yLjgsNC42IC0xLjQsMi4xIC01LjIsNi4zIC03LjksNi45IHYgLTEuMSBjIDAsLTQuNCAyLjgsLTguOCAyLjgsLTEyLjQgdiAtMS45IGwgLTEuMywtMTIuMiAtMC43LDhlLTQgYyAtMC4zLDMuOSAtMS43LDcuOSAtMy40LDEwLjUgLTEuMywyIC01LjMsNS42IC03LjcsNi4yIC0wLjIsLTAuNCAtMC40LC0wLjYgLTAuNCwtMS4zIHYgLTIuNCBjIDAsLTUuMSAzLC04LjkgMywtMTIuOCBWIDgyLjYgYyAwLC0xLjUgLTIuMSwtMy45IC0yLjksLTUuMiAtMC43LC0xLjEgLTIuNCwtNC4zIC0zLjUsLTQuNiB2IDEuMyBjIDAsNi4yIC0xLjQsMTAuNiAtNS42LDEyLjYgLTEuMSwtMS43IC0zLjYsLTMuMSAtMy42LC02LjIgdiAtMS45IGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDExMywxMjYuOSBjIDAsNi4zIC01LjEsMTEuNCAtMTEuNCwxMS40IC02LjMsMCAtMTEuNCwtNS4xIC0xMS40LC0xMS40IDAsLTYuMyA1LjEsLTExLjQgMTEuNCwtMTEuNCA2LjMsMCAxMS40LDUuMSAxMS40LDExLjQgelwifV0saVtcIkFDLklDLkZJUkUgT1JJR0lOXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTYuMyw3OC41IGMgMCwtNS4xIDQuMSwtOS43IDQuMSwtMTMgdiAtMC40IGMgMCwtMS4zIC0wLC0zLjggLTEuMSwtNC4xIC0xLDQuNSAtMy41LDggLTUuOSwxMS4yIC0xLjMsMS42IC0yLjMsMy4zIC0zLjYsNC45IC0xLDEuMyAtMy4xLDMuNCAtMy4xLDUuNSAwLDEuNCA2LjEsMTcuNyAzLDE3LjcgLTAuMSwwIC0zLjcsLTIuNSAtNC4yLC0yLjkgLTEuNCwtMSAtMi40LC0yLjMgLTMuMywtMy43IC0zLjEsLTQuNiAtMi40LC00LjQgLTMuOCwtMTAuMyAtMS41LDAuNCAtMi42LDUgLTIuOSw2LjkgLTAuNCwyLjQgLTAuMyw2LjcgMC4zLDkgMC42LDIuOCAxLjMsNSAyLjUsNy4zIDAuNiwxLjIgMy4xLDUuNSAzLjEsNi41IC0yLjIsLTAuNSAtNy4xLC00LjYgLTguNiwtNi4xIC0xLjUsLTEuNSAtNS41LC04LjMgLTUuOSwtOC42IDAsOS45IDUsMjIuOCA5LjgsMjcuNiAzLjEsMy4xIDYuMyw2LjQgMTAuMSw4LjcgMi41LDEuNSAxMC41LDQuMyAxNC4zLDQuMyBoIDIuNCBjIDIuOSwwIDEwLjgsLTMgMTIuOSwtNC4yIDMuNCwtMS45IDYuOSwtNC43IDksLTcuOSA0LjQsLTYuNSA4LC0xNSA4LC0yNS43IFYgOTkuOSBsIC0wLjQsLTUuOCBjIC0wLjcsMC40IC0yLjIsNC40IC0yLjUsNS4yIC0wLjUsMS4zIC0yLDMuNCAtMi44LDQuNiAtMS40LDIuMSAtNS4yLDYuMyAtNy45LDYuOSB2IC0xLjEgYyAwLC00LjQgMi44LC04LjggMi44LC0xMi40IHYgLTEuOSBsIC0xLjMsLTEyLjIgLTAuNyw4ZS00IGMgLTAuMywzLjkgLTEuNyw3LjkgLTMuNCwxMC41IC0xLjMsMiAtNS4zLDUuNiAtNy43LDYuMiAtMC4yLC0wLjQgLTAuNCwtMC42IC0wLjQsLTEuMyB2IC0yLjQgYyAwLC01LjEgMywtOC45IDMsLTEyLjggViA4Mi42IGMgMCwtMS41IC0yLjEsLTMuOSAtMi45LC01LjIgLTAuNywtMS4xIC0yLjQsLTQuMyAtMy41LC00LjYgdiAxLjMgYyAwLDYuMiAtMS40LDEwLjYgLTUuNiwxMi42IC0xLjEsLTEuNyAtMy42LC0zLjEgLTMuNiwtNi4yIHYgLTEuOSBsIDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSA5OS42IDEwNS45IEMgOTMuMyAxMDUuOSA4OC4yIDExMSA4OC4yIDExNy4zIEMgODguMiAxMjMuNiA5My4zIDEyOC43IDk5LjYgMTI4LjcgQyAxMDUuOSAxMjguNyAxMTEgMTIzLjYgMTExIDExNy4zIEMgMTExIDExMSAxMDUuOSAxMDUuOSA5OS42IDEwNS45IHogTSAxMDUgMTA5LjQgTCAxMDYuOCAxMTEgTCAxMDEuMiAxMTcuMSBMIDEwNy4zIDEyMy4yIEwgMTA1LjYgMTI0LjkgTCA5OS41IDExOC44IEwgOTMuNyAxMjUuMyBMIDkxLjkgMTIzLjYgTCA5Ny44IDExNy4yIEwgOTIuMSAxMTEuNCBMIDkzLjggMTA5LjggTCA5OS41IDExNS40IEwgMTA1IDEwOS40IHpcIn1dLGlbXCJBQy5JQy5TTU9LRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk5LjMsNjkuMiBjIDAuMiwtMi42IDQuNCwtNS41IDcuMiwtNiA0LjIsLTAuOCA2LjksMS4yIDkuMSwzLjMgMS4xLDEuMSAxLjksMi43IDIuNCw0LjMgMC42LDIuMiAxLjksMS4zIDQsMi41IDIuNCwxLjQgNC45LDQuNCA1LjYsNy40IDUuMywwIDEwLjMsNC44IDEwLjMsOS45IHYgMS4zIGMgMCwzIC0xLjIsNC45IC0yLjgsNi41IC0xLjEsMS4xIC0xLjIsMS4yIC0yLjYsMi4xIC0xLjMsMC44IC0yLjUsMC42IC0yLjcsMiAtMC42LDQuNiAtNC4yLDkgLTkuNCw5IDMuMyw1IDIuMyw4LjcgLTAuNiwxMyAwLDQuOCAtMC4yLDYuMiAtMi44LDguOCAtMi40LDIuNSAtNC41LDIuNCAtOC42LDIuNCAwLjcsLTEgMS4yLC0xIDIsLTIuNCAwLjYsLTEuMSAwLjgsLTEuNyAxLjQsLTIuOSAxLC0yLjIgMS44LC0zLjcgMS44LC02LjggdiAtMi4xIGMgMCwtMS40IC0wLjIsLTIuNCAtMC44LC0zLjIgLTEuMiw1LjIgLTEuNCw2LjQgLTUuNyw4LjYgMCwtOC4zIDMuOCwtNi44IC0xLjksLTEzLjQgMCwzLjggLTAuMiw1LjYgLTIuNyw2LjkgLTAuOCwtMC41IC0yLjEsLTEuNyAtMi4xLC0yLjkgdiAtMC40IGMgMCwtMiAyLjUsLTUuMiAyLjUsLTYuNyB2IC0wLjQgYyAwLC0xLjEgLTAuNCwtMi4xIC0xLC0yLjUgMCwyLjkgLTMuNCw3LjYgLTQuOSw5LjIgLTEuNiwxLjcgLTEuMSwyLjggLTAuMiw1IDAuNywxLjcgMS4xLDMuNSAxLjEsNS44IHYgMSBjIC0zLjIsLTAuMyAtNC40LC02LjIgLTYuMSwtOC4yIDAsMy40IC0wLjgsNi4zIDAuNCw5LjQgMC44LDEuOSAyLjQsNS42IDQuNCw2LjEgdiAwLjQgbCAtMy40LDAuNiAtMC4yLC0wLjEgYyAtMy40LDAgLTYuNCwtMi40IC03LjgsLTQuNCAtMC44LC0xLjEgLTEuNSwtMi43IC0xLjcsLTQuNCAtMC4zLC0yLjMgMC42LC0zLjYgMC42LC01IDAsMCAtNS4xLC00LjcgLTQuNCwtOSBsIDAuMiwtMS43IGMgLTAuNCwtMC41IC0xLjQsLTEuNCAtMiwtMi4yIC0wLjYsLTAuOCAtMS4xLC0xLjggLTEuNiwtMi42IC0xLjQsMCAtMiwwLjYgLTMuMiwwLjYgaCAtMC42IGMgLTUuNCwwIC0xMC41LC01LjIgLTEwLjUsLTEwLjUgdiAtMC44IGMgMCwtNC45IDQuMSwtOS4yIDksLTkuMiBoIDIuMSBjIDAuOCwtMy4yIDUuNywtNi45IDEwLjEsLTUuOSAtMC40LC0xLjUgLTEsLTIuNyAtMSwtNC44IHYgLTAuNCBjIDAsLTMuOCAzLjIsLTcuOCA2LjEsLTguOCAxLjksLTAuNyAzLjksLTEgNi4xLC0wLjQgMi4zLDAuNiAzLjcsMi4yIDQuOCwyLjUgbCAwLDAgeiBtIC0wLjQsLTEuOSBjIC0xLjMsLTAuMSAtMi45LC0yLjEgLTUuOSwtMi4xIGggLTEuOSBjIC01LDAgLTEwLjYsNS44IC0xMCwxMS40IGwgMC41LDMuNCBoIC0wLjYgYyAtNC4zLDAgLTcuMSwzLjIgLTguNiw2LjEgLTIuMywtMS4xIC02LjgsMS4yIC03LjksMi40IC0xLjYsMS42IC0zLjYsNC4yIC0zLjYsNy4zIHYgMS41IGMgMCwzLjYgMi40LDcuMyA0LjUsOC45IDEuOCwxLjMgMiwxLjYgNC40LDIuNCAyLjcsMC45IDMuNywwLjEgNS45LDAuMiBsIDMuMSwzLjcgYyAtMC42LDEuMyAwLjQsNC45IDAuOSw2IDAuNSwxLjIgMC43LDEuNCAxLjQsMi40IDAuMiwwLjQgMS43LDIgMS43LDIgMCwxLjEgLTAuNCwxLjQgLTAuNCwyLjcgdiAwLjIgYyAwLDYuMyA0LjgsMTIgMTAuNywxMiAyLjEsMCAzLjYsLTAuNCA1LC0xIDIuNiwxLjQgNy4xLDMgOS4yLC0wLjEgbCAzLjQsMC41IGMgMi43LDAuNCA2LjgsLTIuMiA3LjksLTMuNiAxLC0xLjQgMy43LC02IDIuNCwtOC44IDEuMSwtMC43IDIuNiwtMy43IDIuNywtNS41IDAuMSwtMS43IDAuMiwtMS44IC0wLjEsLTMuNiAtMC4yLC0xLjQgLTAuOSwtMi4yIC0xLC0zLjIgNCwtMC4zIDguNCwtNS4yIDguNCwtOS43IDIuNSwtMS42IDMuNCwtMS4yIDUuNiwtMy44IDEuMywtMS40IDIuNiwtNC40IDIuNiwtNyAwLC02LjMgLTQuNywtMTIgLTEwLjcsLTEyIC0wLjksLTQgLTQuOCwtOC4zIC05LjIsLTguNiAtMC40LC00LjQgLTUuNywtOS40IC0xMC43LC05LjQgLTQuMSwtMCAtOC45LDIuNyAtOS42LDUuNiBsIDAsMCB6IG0gMTUuOCwzOC40IGMgMC41LDAgMSwwLjEgMSwtMC40IDAsLTMuMSAtNC4xLC02LjcgLTcuNiwtNi43IGggLTEuOSBjIC0wLjYsMCAtMSwwLjggLTAuNiwxIDAuNCwwLjIgMS42LDAuMSAyLDAuMSAxLjIsMCAyLjYsMC41IDMuNCwxIDIuMSwxLjYgMi44LDIuMSAzLjUsNS4xIHogbSAtMzQuNSwtMTIuNiB2IDEuNyBjIDAsMS40IDAuNiwyLjIgMC42LDMuMiAwLDAgLTMuNiwzLjQgLTMuOCw1LjQgbCAwLjYsMC4yIGMgMSwtMC42IDEuNiwtMi42IDMsLTQgMSwtMC45IDMuMSwtMi4yIDQuOCwtMi4yIGggMC42IGMgMS4zLDAgMy42LDEgMy42LC0wLjIgMCwtMC45IC0yLjYsLTEgLTMuNiwtMSBoIC0wLjIgYyAtMS42LDAgLTMsMC42IC00LDEuMyAtMC4xLC0xIC0wLjYsLTEuOSAtMC42LC0zLjIgMCwtNC42IDMuNywtOC42IDguNCwtOC42IGggMSBjIDEsMCAxLjUsMC4yIDIuMywwLjQgMC4xLC0wLjIgMC40LC0wLjYgMC40LC0wLjcgMCwtMC43IC0xLjgsLTEgLTIuNSwtMSBoIC0xLjUgYyAtNC41LC04ZS00IC05LjIsNC40IC05LjIsOC42IHogbSAxOS4xLC0xNS44IDAuNiwwLjYgYyAxLjYsLTAuOSAzLjQsLTIuMyA1LjksLTIuMyBoIDEgYyA1LjUsMCAxMC4xLDQuNCAxMC4xLDkuNyB2IDAuNiBjIC0xLjUsLTAgLTIuNiwtMC44IC00LjYsLTAuOCBoIC0xIGMgLTEuNSwwIC00LjEsMC4zIC00LjIsMS43IDAuNiwwLjEgMC40LDAuMiAwLjgsMC4yIDAuOSwwIDEuNCwtMC42IDMsLTAuNiBoIDIuMyBjIDIuMiwwIDUuNiwxLjggNi42LDMuMSAyLDIuNiAxLjgsMy43IDIuNiw3LjIgMC41LDAgMSwwLjEgMSwtMC40IDAsLTQgLTIuNiwtOC4xIC01LjIsLTkuNCAwLC02LjkgLTQuNSwtMTIuNCAtMTEuMSwtMTIuNCBoIC0xLjMgYyAtMi4zLDAgLTUuNiwxLjYgLTYuNSwyLjkgelwifV0saVtcIkFDLklDLlNQRUNJQUwgTkVFRFMgRklSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDc1LjMsMTMzLjkgaCA0OS40IHYgLTI4LjkgYyAtMC42LDAuNCAtMi40LDEuMiAtMi40LDIgdiAyNC44IEggNzcuNCB2IC0zMCBoIC0yLjIgdiAzMi4xIGwgMCwwIHogTSA5MywxMjkuMSBoIDIgYyA0LjIsMCA3LjYsLTIuNCA5LjMsLTUgbCAtMS4zLC0zLjUgYyAtMS4yLDAuMyAtMi4xLDUuMiAtOC42LDUuMiBoIC0wLjggYyAtMy40LDAgLTYuMywtMy4zIC03LjIsLTYgLTAuNiwtMS43IC0wLjYsLTMuNiAwLC01LjQgMC44LC0yLjUgMS42LC0yLjQgMi42LC00IGwgLTAuNCwtMy40IGMgLTMuMiwwLjggLTcuMSw4IC01LjcsMTIuOCAxLjIsNC4xIDUuNCw5LjIgMTAuMiw5LjIgeiBNIDg4LjksOTcuOSB2IDAuNCBjIDAsMC44IDAuNSwxLjQgMC44LDIgbCAxLjQsMTQuNyAxMS4zLDAgNC4zLDEwLjIgNi4yLC0yIC0xLC0zIC0zLjUsMSBDIDEwOCwxMTkuOSAxMDQuOCwxMTEuNyAxMDQsMTExLjcgSCA5NC4xIEMgOTQsMTExIDkzLjgsMTEwLjkgOTMuOCwxMTAuMSB2IC0xLjEgaCA3LjYgdiAtMi40IGggLTggbCAtMC4yLC0zLjcgdiAtMi4yIGMgMy40LC0wLjggMi43LC02LjIgLTEuMSwtNi4yIC0xLjgsMCAtMy4yLDEuNCAtMy4yLDMuMiB6IG0gMTkuOSwtNy40IHYgMSBsIC0wLjQsMC4zIEMgMTA1LjEsODkuNyAxMDEsODYuMSAxMDEsODAuOCA5OS42LDgxLjcgOTguOCw4NC44IDk4LjgsODcuMSB2IDEuMSBjIDAsNC41IDMsMTAuNyA1LDEzLjMgMi44LDMuNyA3LjQsNC44IDExLjYsNyAxLjYsLTAuOCA5LjMsLTUuNCAxMCwtNi4zIDEuMywtMS43IDQuMiwtOS44IDQuMiwtMTIuNCAwLC0xLjkgLTAuMywtOC4yIC0xLjMsLTguOCAtMC43LDIuNyAtMC44LDQuNyAtMi4zLDYuOCAtMSwxLjQgLTMuMywzLjUgLTUsNCBsIC0wLjIsLTIuNCB2IC0wLjIgYyAwLC0zIDIsLTUuNCAyLC04LjggMCwtMSAtMy40LC02LjEgLTQuMSwtNi4yIDAsMS44IC0wLjIsNC4xIC0wLjYsNS40IC0wLjMsMSAtMS45LDMuNCAtMi45LDMuNCBoIC0wLjYgYyAtMC40LC0xLjQgLTEuOSwtMS43IC0xLjksLTQuOCBWIDc2LjkgYyAwLC0yLjMgMi42LC01LjUgMi42LC03LjggbCAwLC0wLjYgLTAuMywtMi40IGMgLTEsMC4yIC0xLDEuOSAtMS40LDIuOSAtMC40LDEgLTEsMiAtMS42LDIuOSAtMS4zLDEuNyAtMi42LDMuNCAtMy45LDUuMSAtMiwyLjggLTIuMSwyLjcgLTEsNi4xIDAuNiwyIDEuNyw0LjggMS43LDcuNCB6IG0gMjQuMywxMC4yIC0zLjMsLTIgLTEuMiwxLjkgMy41LDIgeiBtIC02Ni4yLDAgMSwxLjkgYyA1LC0yLjcgMTEsLTYuOSAxNiwtMTAuMSAyLjcsLTEuNyA1LjIsLTMuNCA3LjgsLTUuMSAxLjQsLTAuOSAyLjYsLTEuNiAzLjksLTIuNiAxLjgsLTEuMiAxLjksLTEuOSAyLjQsLTQuMyBsIC0zMS4yLDIwLjIgelwifV0saVtcIkFDLklDLldJTEQgRklSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExMC44LDEzOS41IGMgMC4yLC0wLjUgNi41LC02LjIgNy40LC03IDIuNiwtMi42IDUuNiwtNS4yIDcuOCwtOC4xIDMuOSwtNS4yIDgsLTE1IDgsLTI0IHYgLTYuOSBjIDAsLTEgMCwtMi4yIC0wLjgsLTIuNCAtMC44LDMuNCAtMy4zLDcuNyAtNS4xLDEwLjEgLTAuNSwwLjYgLTcuOSw4LjcgLTcuOSw2LjIgMCwtNC43IDIuNSwtOC40IDIuOSwtMTMuNCAwLjIsLTIuOSAtMC44LC0xMS40IC0xLjQsLTE0LjMgLTAuOSwwLjcgLTEuMiw0LjIgLTEuNyw1LjcgLTAuNiwxLjcgLTEuMiwzLjYgLTIuMSw1IC0wLjcsMS4xIC02LjEsNy4yIC03LDcuMiAtMC43LDAgLTEuNiwtMi45IC0xLjYsLTQuMSAwLC00LjcgMy4zLC05LjcgMy4zLC0xMy40IHYgLTAuNiBjIDAsLTIuNCAtMS45LC0zLjYgLTMsLTUuNiAtMC42LC0xIC0yLjcsLTQuNyAtMy43LC00LjggdiAyLjkgYyAwLDIuMiAtMC41LDUuNiAtMS4zLDcuMSAtMC40LDAuOCAtMy4yLDQuMSAtNCw0LjEgLTEsMCAtMy45LC0zLjkgLTMuOSwtNS43IHYgLTMuNSBjIDAsLTQuMSA0LjEsLTguNiA0LjEsLTEyLjYgdiAtMC4yIGMgMCwtMS41IC0wLC00IC0xLjQsLTQuMSAtMC43LDggLTEyLjYsMTguNyAtMTIuNiwyMS44IDAsNC40IDMuOSw5LjIgMy45LDE1LjkgdiAyLjIgYyAwLDAuNyAtMC4yLDAuOCAtMC4yLDEuNCAtMC44LC0wLjIgLTEuNCwtMS4zIC0xLjksLTIgLTAuNywtMC44IC0xLjQsLTEuMSAtMi4yLC0xLjcgLTEuNSwtMSAtMi43LC0yLjMgLTMuOCwtMy43IC0xLjksLTIuNSAtNC4xLC02LjcgLTQuMSwtMTAuOSAtMS44LDAuNSAtMy4zLDYuMyAtMy4zLDguOCB2IDMuNSBjIDAsOC4zIDUuOSwxNS4xIDUuOSwxOC4xIC0zLjIsLTEuNyAtNiwtMy45IC04LjUsLTYuNCAtMS4yLC0xLjIgLTUuNSwtOC41IC02LjIsLTguNyAwLDUuNyAxLjcsMTAuMyAyLjYsMTUuMSAwLjUsMi4zIDEuMiw1LjEgMS45LDcuMSAxLDIuNyAxLjksMy4zIDMuNCw1LjMgMyw0IDQuOSw2IDguMyw5LjQgMS41LDEuNSAyLjksMi45IDQuNCw0LjQgbCA0LjcsMy40IDUuOSwyLjggViAxMjkuOSBoIC0xMyBsIDkuOSwtMTEuNSAtNy40LC0wLjEgOS44LC0xMS4xIC02LjYsLTAuMSAxMC45LC0xNy4zIDAuMSwtMC4yIDExLjIsMTcuNSAtNi4xLC0wIDkuNCwxMSAtNy42LDAgMTAuMSwxMS43IC0xMy4xLDAuMSB2IDEzIGwgNiwtMy40IHpcIn1dLGlbXCJBQy5JQy5IQVpBUkRPVVMgTUFURVJJQUxTIElOQ0lERU5UXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNjAuNywxMDAuNiA3OC41LC0wIC0zOS4zLDM5LjIgLTM5LjIsLTM5LjIgeiBNIDEyNy42LDg3LjggYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiBWIDEwMCBoIC02LjEgViA4Ny44IHogTSAxMTUuMyw3NS41IGMgMC42LDAuNCA2LjEsNS45IDYuMSw2LjIgViAxMDAgaCAtNi4xIFYgNzUuNSB6IE0gOTAuOCw2OS41IGMgMCwtMC40IDUuNSwtNS44IDYuMSwtNi4yIFYgMTAwIEggOTAuOCBWIDY5LjUgeiBtIC0xMi4yLDEyLjIgYyAwLC0wLjQgNS41LC01LjggNi4xLC02LjIgViAxMDAgSCA3OC42IFYgODEuNyB6IG0gLTYuMyw2IDAsMTIuMiBIIDY2LjQgViA5NC4yIGMgMCwtMC4zIC0wLC0wLjMgLTAuMSwtMC40IGwgNiwtNiB6IG0gMzAuOCwtMjQuNSA2LjIsNi4xIGMgLTAuMiwwLjQgLTAuMSwtMC4xIC0wLjEsMC40IFYgMTAwIGggLTYuMSBWIDYzLjMgeiBNIDU2LjcsMTAwIDEwMCwxNDMuMyAxNDMuMywxMDAgMTAwLDU2LjcgNTYuNywxMDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTAzLjEsNjMuMyA2LjIsNi4xIGMgLTAuMiwwLjQgLTAuMSwtMC4xIC0wLjEsMC40IFYgMTAwIGggLTYuMSBWIDYzLjMgeiBtIC0zMC44LDI0LjUgMCwxMi4yIEggNjYuNCBWIDk0LjIgYyAwLC0wLjMgLTAsLTAuMyAtMC4xLC0wLjQgbCA2LC02IHogbSA2LjMsLTYgYyAwLC0wLjQgNS41LC01LjggNi4xLC02LjIgViAxMDAgSCA3OC42IFYgODEuNyB6IG0gMTIuMiwtMTIuMiBjIDAsLTAuNCA1LjUsLTUuOCA2LjEsLTYuMiBWIDEwMCBIIDkwLjggViA2OS41IHogbSAyNC41LDYgYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiBWIDEwMCBoIC02LjEgViA3NS41IHogbSAxMi4zLDEyLjMgYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiBWIDEwMCBoIC02LjEgViA4Ny44IHogbSAtNjYuOSwxMi44IDc4LjUsLTAgLTM5LjMsMzkuMiAtMzkuMiwtMzkuMiB6XCJ9XSxpW1wiQUMuSUMuQ0hFTUlDQUwgQUdFTlRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAuNywxMDcuNyBjIC0zLjIsMmUtNSAtNS44LDEgLTcuNiwzIC0xLjksMiAtMi44LDQuNyAtMi44LDguMSAtMmUtNiwzLjQgMC45LDYuMSAyLjgsOC4xIDEuOSwyIDQuNCwzIDcuNiwzIDEuMywwIDIuNCwtMC4yIDMuNiwtMC41IDEuMSwtMC4zIDIuMiwtMC45IDMuMiwtMS41IGwgMC4xLC0wLjEgMCwtMC4xIDAsLTMgMCwtMC41IC0wLjMsMC4zIGMgLTAuOSwwLjkgLTEuOSwxLjUgLTMsMS45IC0xLjEsMC40IC0yLjIsMC43IC0zLjQsMC43IC0yLjQsMCAtNC4xLC0wLjcgLTUuMywtMi4xIC0xLjIsLTEuNCAtMS45LC0zLjUgLTEuOSwtNi4yIC00ZS02LC0yLjcgMC42LC00LjggMS45LC02LjIgMS4yLC0xLjQgMywtMi4xIDUuMywtMi4xIDEuMiwyZS01IDIuMywwLjIgMy40LDAuNiAxLjEsMC40IDIuMSwxLjEgMywxLjkgbCAwLjMsMC4zIDAsLTAuNSAwLC0zIC0wLjIsMCAwLjEsLTAuMiBjIC0xLC0wLjcgLTIuMSwtMS4yIC0zLjIsLTEuNSAtMS4xLC0wLjMgLTIuMywtMC41IC0zLjYsLTAuNSB6IE0gOTIuNyw2NC4yIGggMTQuNyB2IDMzIGMgMCw4LjIgMTIuOSw5LjYgMTIuNCwyMS44IC0wLjMsNi44IC03LDE4LjYgLTE0LjMsMTguNiBoIC0xMSBjIC02LjgsMCAtMTQuNiwtMTMuMSAtMTQuMywtMjAgMC42LC0xMC42IDEyLjQsLTEyLjggMTIuNCwtMjAuNCB2IC0zMyB6IG0gLTE0LjcsNTUgYyAwLDYuOCA3LjksMjAuMiAxNC43LDIwLjIgaCAxNC43IGMgOC4xLDAgMTQuNywtMTMgMTQuNywtMjIgMCwtMTEuOCAtMTIuOCwtMTMuNiAtMTIuOCwtMjIgViA2MC42IEggOTAuOCBWIDk1LjQgYyAwLDcuOCAtMTIuOCw4LjcgLTEyLjgsMjMuOSBsIDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOkUuZmlsbENvbG9yLlVua25vd24sZDpcIm0gOTIuNyw2NC4yIDAsMzMgYyAwLDcuNiAtMTEuOSw5LjggLTEyLjQsMjAuNCBDIDc5LjksMTI0LjUgODcuNywxMzcuNiA5NC41LDEzNy42IGwgMTEsMCBjIDcuMiwwIDE0LC0xMS44IDE0LjMsLTE4LjYgMC41LC0xMi4yIC0xMi40LC0xMy42IC0xMi40LC0yMS44IGwgMCwtMzMgLTE0LjcsMCB6IE0gMTAwLjcsMTA3LjcgYyAxLjMsMmUtNSAyLjUsMC4yIDMuNiwwLjUgMS4xLDAuMyAyLjIsMC44IDMuMiwxLjUgbCAtMC4xLDAuMiAwLjIsMCAwLDMgMCwwLjUgLTAuMywtMC4zIGMgLTAuOSwtMC45IC0xLjksLTEuNSAtMywtMS45IC0xLjEsLTAuNCAtMi4yLC0wLjYgLTMuNCwtMC42IC0yLjQsMmUtNSAtNC4xLDAuNyAtNS4zLDIuMSAtMS4yLDEuNCAtMS45LDMuNSAtMS45LDYuMiAtNGUtNiwyLjcgMC42LDQuOCAxLjksNi4yIDEuMiwxLjQgMywyLjEgNS4zLDIuMSAxLjIsMCAyLjMsLTAuMiAzLjQsLTAuNyAxLjEsLTAuNCAyLjEsLTEuMSAzLC0xLjkgbCAwLjMsLTAuMyAwLDAuNSAwLDMgMCwwLjEgLTAuMSwwLjEgYyAtMSwwLjcgLTIuMSwxLjIgLTMuMiwxLjUgLTEuMSwwLjMgLTIuMywwLjUgLTMuNiwwLjUgLTMuMiwwIC01LjgsLTEgLTcuNiwtMyAtMS45LC0yIC0yLjgsLTQuNyAtMi44LC04LjEgLTJlLTYsLTMuNCAwLjksLTYuMSAyLjgsLTguMSAxLjksLTIgNC40LC0zIDcuNiwtMyB6XCJ9XSxpW1wiQUMuSUMuQ09SUk9TSVZFIE1BVEVSSUFMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAyLjksMTM1LjQgYyAwLjgsMCAxLjQsLTAuOCAxLjQsLTEuNSAwLC0wLjcgLTAuNiwtMS41IC0xLjIsLTEuNSBIIDEwMi4zIGMgLTAuNSwwIC0xLjIsMC43IC0xLjIsMS40IHYgMC4zIGMgMCwwLjggMC42LDEuNCAxLjQsMS40IEggMTAyLjkgeiBNIDk2LjksMTMyLjUgYyAwLDAuNyAwLjYsMS41IDEuMiwxLjUgaCAwLjYgYyAwLjgsMCAxLjQsLTAuOCAxLjQsLTEuNSB2IC0wLjIgYyAwLC0wLjcgLTAuNiwtMS41IC0xLjIsLTEuNSBIIDk4LjEgYyAtMC42LDAgLTEuMiwwLjkgLTEuMiwxLjUgdiAwLjIgeiBtIDguNSwtMC45IGMgMS4zLDAgMi4yLC0xLjggMS4xLC0yLjggLTEsLTEgLTIuOCwtMC4yIC0yLjgsMS4xIDAsMC44IDAuOSwxLjcgMS43LDEuNyB6IG0gLTYuMiwtNC40IGMgMCwwLjYgMC42LDEuNSAxLjIsMS41IGggMC42IGMgMC44LDAgMS40LC0wLjYgMS40LC0xLjQgdiAtMC42IGMgMCwtMC41IC0wLjcsLTEuMiAtMS40LC0xLjIgaCAtMC4zIGMgLTAuOCwwIC0xLjUsMC44IC0xLjUsMS42IHogbSAtMC42LC00LjEgYyAwLjYsMCAxLjIsLTAuOCAxLjIsLTEuNSAwLC0xIC0wLjcsLTEuNyAtMS43LC0xLjcgLTAuNiwwIC0xLjUsMC42IC0xLjUsMS4yIHYgMC42IGMgMCwwLjcgMC43LDEuNCAxLjIsMS40IGggMC44IFYgMTIzLjEgeiBtIDIuNCwtMi43IGMgMCwwLjYgMC43LDEuNSAxLjIsMS41IGggMC44IGMgMC40LDAgMS4yLC0wLjggMS4yLC0xLjIgdiAtMC44IGMgMCwtMC42IC0wLjgsLTEuMiAtMS41LC0xLjIgaCAtMC4xIGMgLTAuOCwwIC0xLjUsMC44IC0xLjUsMS41IHYgMC4xIHogbSAtMi43LC0zLjUgYyAwLjYsMCAxLjQsLTAuOCAxLjQsLTEuNSB2IC0wLjIgYyAwLC0yLjIgLTMuMiwtMS44IC0zLjIsLTAuMyB2IDAuOCBjIDAsMC43IDEuMSwxLjIgMS44LDEuMiB6IG0gNC4xLC0zLjYgYyAwLDIgMy4zLDEuOSAzLjIsLTAuMSAtMC4xLC0yLjMgLTMuMiwtMS44IC0zLjIsLTAuMyB2IDAuNCB6IG0gNC43LC0xNi4yIDAsMi45IC0zLC0wLjIgMC45LDIuOCAtMS4xLDAuMSAtMS42LC0wLjkgLTAuNCwzIC0xLC0xLjUgLTMuMywxIC0wLjYsLTMuMiAtMiwxLjMgLTAuNiwtMS42IC0yLjUsMC40IDEuNSwtMi43IC0wLjYsLTEuNSAtMjIuMiwwIDAsMTIuNCA1OS4yLDAgMCwtMTIuNCB6IE0gOTQuMyw4NS4yIHYgMS40IGMgMCw0LjQgMi4xLDguNyA1LjcsOS40IDMuNywwLjggNywtNC41IDcsLTggdiAtMS41IGMgMCwtMyAtMi4xLC04LjYgLTMsLTExLjMgLTAuNSwtMS40IC0zLjEsLTEwLjYgLTMuOSwtMTAuNiAtMC44LDAgLTAuOSw0LjUgLTEuMSw1LjQgLTAuNiwyLjEgLTAuOSwzLjIgLTEuNiw1LjEgLTAuOCwyLjMgLTMuMiw3LjYgLTMuMiwxMC4xIGwgMCwwIHpcIn1dLGlbXCJBQy5JQy5IQVpBUkRPVVMgV0hFTiBXRVRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2MC42LDEwMC41IDc4LjgsLTAgLTM5LjQsMzkuNCBMIDYwLjYsMTAwLjUgeiBNIDEyNy42LDg3LjggYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiB2IDUuOCBIIDEyNy42IFYgODcuOCB6IE0gMTE1LjMsNzUuNSBjIDAuNiwwLjQgNi4xLDUuOSA2LjEsNi4yIHYgMTguMSBoIC02LjEgViA3NS41IHogTSA5MC44LDY5LjUgYyAwLC0wLjQgNS41LC01LjggNi4xLC02LjIgViA5OS44IEggOTAuOCBWIDY5LjUgeiBNIDc4LjYsODEuNyBjIDAsLTAuNCA1LjUsLTUuOCA2LjEsLTYuMiBWIDk5LjggSCA3OC42IFYgODEuNyB6IG0gLTYuMyw2IDAsMTIuMSBIIDY2LjQgViA5NC4yIGMgMCwtMC4zIC0wLC0wLjMgLTAuMSwtMC40IGwgNiwtNiB6IG0gMzAuOCwtMjQuNSA2LjIsNi4xIGMgLTAuMiwwLjQgLTAuMSwtMC4yIC0wLjEsMC40IHYgMzAgaCAtNi4xIFYgNjMuMyB6IE0gNTYuNywxMDAgMTAwLDE0My4zIDE0My4zLDEwMCAxMDAsNTYuNyA1Ni43LDEwMCB6IG0gNDEuMiwyNS4zIGMgMC4yLDEgMC42LDEuNiAxLjYsMS44IGwgLTAuOCwwLjYgYyAtMS4zLC0wLjYgLTEuMywtMC4xIC0xLjcsLTEuOSBsIDAuOSwtMC40IHogbSAtMi40LC0xIGMgMCwyLjkgMS4zLDQuOSA0LjIsNC45IGggMC45IGMgMS45LDAgMywtMSAzLjYsLTIuMyAwLjksLTEuOCAwLjYsLTMuMSAtMC4yLC00LjYgLTAuOCwtMS40IC0xLjYsLTIuMyAtMi4yLC0zLjggLTAuNSwtMS4yIC0wLjgsLTMuOCAtMS43LC00LjQgQyA5OS42LDExOC4xIDk1LjUsMTIyLjUgOTUuNSwxMjQuMiB6IG0gLTEyLjYsLTkuNCBjIDAuNCwwLjkgMC40LDEuNCAxLjUsMS43IGwgLTAuNiwwLjYgQyA4Mi4yLDExNi43IDgyLjYsMTE2LjUgODIsMTE1LjMgbCAwLjksLTAuNSB6IG0gMS42LDMuOCBIIDg2IGMgMi4zLDAgMy43LC0yLjIgMy43LC00LjYgMCwtMS4yIC0xLjksLTMuOSAtMi42LC00LjkgLTAuOSwtMS40IC0xLjIsLTQuNyAtMi4yLC01LjQgLTAuMiwzIC0yLjMsNS45IC0zLjYsOCAtMS45LDIuOSAtMC40LDYuOSAzLjEsNi45IHogbSAyOC40LC0zLjggYyAwLjIsMS42IDAuOSwxLjEgMS41LDIgbCAtMC44LDAuMyBjIC0xLC0wLjIgLTEuNywtMC44IC0xLjgsLTEuOSBMIDExMi45LDExNC44IHogbSAyLC0xMS4xIGMgLTAuMywzLjYgLTIuMiw1LjYgLTMuNiw4LjEgLTEuNywzLjEgLTAuMyw2LjggMy4yLDYuOCBoIDEuMyBjIDIuMiwwIDMuNywtMS43IDMuNywtMy45IHYgLTAuOSBjIDAsLTEuNCAtMS45LC0zLjggLTIuNiwtNC45IC0wLjksLTEuNCAtMC43LC00LjQgLTIsLTUuMiB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMTIuOSwxMTQuOCBjIDAuMiwxLjYgMC45LDEuMSAxLjUsMiBsIC0wLjgsMC4zIGMgLTEsLTAuMiAtMS43LC0wLjggLTEuOCwtMS45IEwgMTEyLjksMTE0LjggeiBtIC0zMCwwIGMgMC40LDAuOSAwLjQsMS40IDEuNSwxLjcgbCAtMC42LDAuNiBDIDgyLjIsMTE2LjcgODIuNiwxMTYuNSA4MiwxMTUuMyBsIDAuOSwtMC41IHogbSAxNSwxMC40IGMgMC4yLDEgMC42LDEuNiAxLjYsMS44IGwgLTAuOCwwLjYgYyAtMS4zLC0wLjYgLTEuMywtMC4xIC0xLjcsLTEuOSBsIDAuOSwtMC40IHogbSA1LjIsLTYyIDYuMiw2LjEgYyAtMC4yLDAuNCAtMC4xLC0wLjIgLTAuMSwwLjQgdiAzMCBoIC02LjEgViA2My4zIHogbSAtMzAuOCwyNC41IDAsMTIuMSBIIDY2LjQgViA5NC4yIGMgMCwtMC4zIC0wLC0wLjMgLTAuMSwtMC40IGwgNiwtNiB6IG0gNi4zLC02IGMgMCwtMC40IDUuNSwtNS44IDYuMSwtNi4yIFYgOTkuOCBIIDc4LjYgViA4MS43IHogbSAxMi4yLC0xMi4yIGMgMCwtMC40IDUuNSwtNS44IDYuMSwtNi4yIFYgOTkuOCBIIDkwLjggViA2OS41IHogbSAyNC41LDYgYyAwLjYsMC40IDYuMSw1LjkgNi4xLDYuMiB2IDE4LjEgaCAtNi4xIFYgNzUuNSB6IG0gMTIuNCwxMi4zIGMgMC42LDAuNCA2LjEsNS45IDYuMSw2LjIgdiA1LjggSCAxMjcuNiBWIDg3LjggeiBtIDExLjcsMTIuNiAtNzguOCwwIDM5LjQsMzkuNCBMIDEzOS40LDEwMC40IHogTSA4NSwxMDMuNyBjIDEsMC43IDEuMyw0IDIuMiw1LjQgMC42LDEgMi42LDMuNiAyLjYsNC45IDAsMi40IC0xLjQsNC42IC0zLjcsNC42IGwgLTEuNSwwIGMgLTMuNSwwIC01LC00IC0zLjEsLTYuOSAxLjMsLTIuMSAzLjQsLTUgMy42LC04IHogbSAyOS44LDAgYyAxLjMsMC45IDEuMiwzLjggMiw1LjIgMC43LDEuMSAyLjYsMy41IDIuNiw0LjkgbCAwLDAuOSBjIDAsMi4yIC0xLjYsMy45IC0zLjcsMy45IGwgLTEuMywwIGMgLTMuNSwwIC00LjksLTMuNyAtMy4yLC02LjggMS40LC0yLjUgMy40LC00LjUgMy43LC04LjEgeiBNIDEwMCwxMTQuMSBjIDAuOCwwLjYgMS4yLDMuMSAxLjcsNC4zIDAuNiwxLjUgMS41LDIuNCAyLjIsMy44IDAuOCwxLjUgMS4yLDIuNyAwLjMsNC42IC0wLjYsMS4zIC0xLjcsMi4zIC0zLjYsMi4zIGwgLTAuOSwwIGMgLTIuOCwwIC00LjIsLTIgLTQuMiwtNC45IDAsLTEuNyA0LjEsLTYuMSA0LjUsLTEwLjEgelwifV0saVtcIkFDLklDLkVYUExPU0lWRSBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk2LjUsMTA0LjYgMCwwLjIgLTAuMiwwIDAsNCAwLDAuMiAwLjIsMCAzLjIsMCAwLjIsMCAwLC0wLjIgMCwtNCAwLC0wLjIgLTAuMiwwIC0zLjIsMCB6IG0gMi4zLC0yMCBjIC0xLjEsMi40ZS01IC0yLjIsMC4xIC0zLjIsMC41IC0xLDAuMyAtMiwwLjggLTMsMS40IGwgLTAuMSwwLjEgMCwwLjEgMCwzIDAsMC40IDAuMywtMC4yIGMgMSwtMC43IDIsLTEuMiAyLjksLTEuNiAwLjksLTAuNCAxLjgsLTAuNSAyLjYsLTAuNSAxLjEsMi4xZS01IDIsMC4zIDIuNiwwLjggMC43LDAuNSAxLDEuMiAxLDIuMSAtMTBlLTYsMC41IC0wLjEsMSAtMC40LDEuNCAtMC4yLDAuNSAtMC43LDEgLTEuMywxLjUgbCAtMCwwIC0xLjQsMS40IGMgLTEsMC45IC0xLjYsMS43IC0xLjksMi41IC0wLjMsMC43IC0wLjUsMS42IC0wLjUsMi43IGwgMCwyLjQgMCwwLjIgMC4yLDAgMywwIDAsLTAuMiAwLjIsMCAwLC0xLjkgYyAtOGUtNiwtMC41IDAsLTEgMCwtMS4zIDAsLTAuMyAwLjEsLTAuNiAwLjEsLTAuOCAwLjEsLTAuMiAwLjIsLTAuNSAwLjQsLTAuOCAwLjIsLTAuMyAwLjUsLTAuNyAxLC0xLjEgbCAxLjQsLTEuNCBjIDEsLTAuOSAxLjYsLTEuNyAyLC0yLjUgMC40LC0wLjggMC42LC0xLjYgMC42LC0yLjQgLTJlLTUsLTEuNyAtMC42LC0zLjEgLTEuOCwtNC4yIC0xLjIsLTEuMSAtMi44LC0xLjYgLTQuOCwtMS42IHogbSA0LjgsLTMxLjEgLTEuNSw0LjUgLTQuMywxMi45IC00LjUsLTcgLTEuNiwtMi41IC0wLjMsMi45IC0xLjMsMTQuNCAtOS41LC0xMC43IC0yLjgsLTMuMiAxLjEsNC4xIDMuNCwxMi45IC0xMy4xLC0wLjcgLTAuNywtMCAtMC4zLDAuNiAtMC4xLDAuMiAtMC40LDAuOCAwLjcsMC41IDExLjMsOC4xIC0yMC4xLDEuNCAtNS42LDAuNCA1LjQsMS42IDE4LDUuMyAtMTIuMyw3LjEgLTAuOCwwLjQgMC4zLDAuOCAwLjEsMC4yIDAuMywwLjcgMC44LC0wLjEgMTYuMSwtMiAtNC44LDguMyAtMS41LDIuNiAyLjcsLTEuMSA4LjgsLTMuNyAtMy40LDE0LjUgLTEuMSw0LjUgMi44LC0zLjcgOC45LC0xMS42IDUsMTkuMiAwLjIsMC44IDAuOCwwIDAuNCwwIDAuOSwwIDAuMSwtMSAwLjksLTE4LjcgOS4yLDExLjIgMi42LDMuMiAtMC45LC00IC0zLjMsLTE1LjIgMTAuNiw1LjkgNC43LDIuNiAtMy40LC00LjEgLTUuNSwtNi42IDE1LjYsNC40IDQsMS4yIC0zLjEsLTIuOSAtMTAuNywtOS45IDEzLjcsLTIuMSA0LjYsLTAuNyAtNC41LC0xLjIgLTE1LjUsLTQuMyAxOC45LC05LjYgNC43LC0yLjQgLTUuMiwwLjUgLTE3LjEsMS42IDYuNywtMTAuOCAyLC0zLjIgLTMuMywxLjggLTE0LjYsNy45IDUuMiwtMTYuNSAxLjcsLTUuNSAtMy41LDQuNSAtMTAuNiwxNCAtMS43LC0xOC44IC0wLjQsLTQuOCB6IG0gLTEuMSw5LjcgMS41LDE2LjYgMC4yLDIuNiAxLjYsLTIgOC43LC0xMS41IC00LjIsMTMuNCAtMC44LDIuNCAyLjIsLTEuMiAxMy40LC03LjMgLTUuOCw5LjMgLTEuMSwxLjcgMiwtMC4yIDEzLjksLTEuMyAtMTYuNSw4LjQgLTIuMywxLjIgMi41LDAuNyAxMy41LDMuNyAtMTEuMiwxLjcgLTIsMC4zIDEuNSwxLjQgOS4xLDguNCAtMTQuNiwtNC4yIC0zLjEsLTAuOSAyLjEsMi41IDQuMiw1IC03LjgsLTQuMyAtMS45LC0xLjEgMC41LDIuMiAyLjksMTMuMyAtOC4yLC0xMCAtMS42LC0yIC0wLjEsMi42IC0wLjgsMTYuMSAtNC4yLC0xNi4zIC0wLjUsLTIgLTEuMiwxLjYgLTcuMyw5LjUgMi44LC0xMS45IDAuNCwtMS45IC0xLjgsMC43IC03LjksMy4zIDQuMywtNy40IDEsLTEuNyAtMiwwLjIgLTEzLjksMS43IDEwLjMsLTYgMC41LC0wLjMgMCwtMC42IDAsLTAuMyAwLC0wLjggLTAuNywtMC4yIC0xNC41LC00LjIgMTcuMywtMS4yIDIuOCwtMC4yIC0yLjMsLTEuNiAtMTEsLTggMTEuNSwwLjYgMS40LDAuMSAtMC4zLC0xLjMgLTIuNywtMTAuMSA4LjIsOS4zIDEuNSwxLjggMC4yLC0yLjMgMS4zLC0xMy44IDQsNi4zIDEuMSwxLjggMC43LC0yIDMuNCwtMTAuMyB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSAxMDIuNSA2My4yIEwgOTkgNzMuNSBMIDk4LjQgNzUuNSBMIDk3LjMgNzMuNyBMIDkzLjIgNjcuNCBMIDkxLjkgODEuMyBMIDkxLjcgODMuNiBMIDkwLjIgODEuOCBMIDgyIDcyLjUgTCA4NC43IDgyLjcgTCA4NS4xIDg0IEwgODMuNyA4My45IEwgNzIuMiA4My40IEwgODMuMiA5MS4zIEwgODUuNSA5MyBMIDgyLjcgOTMuMiBMIDY1LjQgOTQuMyBMIDc5LjkgOTguNSBMIDgwLjcgOTguOCBMIDgwLjcgOTkuNSBMIDgwLjcgOTkuOCBMIDgwLjcgMTAwLjMgTCA4MC4yIDEwMC43IEwgNjkuOCAxMDYuNiBMIDgzLjggMTA0LjkgTCA4NS44IDEwNC43IEwgODQuOCAxMDYuNCBMIDgwLjQgMTEzLjggTCA4OC4zIDExMC42IEwgOTAuMSAxMDkuOCBMIDg5LjcgMTExLjcgTCA4Ni45IDEyMy42IEwgOTQuMiAxMTQuMSBMIDk1LjUgMTEyLjUgTCA5NiAxMTQuNCBMIDEwMC4yIDEzMC44IEwgMTAxIDExNC42IEwgMTAxLjIgMTEyIEwgMTAyLjggMTE0IEwgMTExIDEyNCBMIDEwOC4xIDExMC43IEwgMTA3LjYgMTA4LjUgTCAxMDkuNiAxMDkuNiBMIDExNy4zIDExMy45IEwgMTEzLjIgMTA4LjkgTCAxMTEuMSAxMDYuNCBMIDExNC4zIDEwNy4zIEwgMTI4LjkgMTExLjUgTCAxMTkuNyAxMDMuMSBMIDExOC4yIDEwMS43IEwgMTIwLjMgMTAxLjMgTCAxMzEuNCA5OS42IEwgMTE3LjkgOTUuOSBMIDExNS40IDk1LjIgTCAxMTcuOCA5NCBMIDEzNC4zIDg1LjYgTCAxMjAuMyA4Ni45IEwgMTE4LjMgODcuMSBMIDExOS40IDg1LjQgTCAxMjUuMiA3Ni4xIEwgMTExLjggODMuMyBMIDEwOS42IDg0LjUgTCAxMTAuMyA4Mi4yIEwgMTE0LjUgNjguOCBMIDEwNS44IDgwLjMgTCAxMDQuMyA4Mi4zIEwgMTA0IDc5LjggTCAxMDIuNSA2My4yIHogTSA5OC44IDg0LjUgQyAxMDAuOCA4NC41IDEwMi40IDg1LjEgMTAzLjYgODYuMSBDIDEwNC44IDg3LjIgMTA1LjUgODguNiAxMDUuNSA5MC4zIEMgMTA1LjUgOTEuMiAxMDUuMyA5MiAxMDQuOSA5Mi43IEMgMTA0LjUgOTMuNSAxMDMuOCA5NC4zIDEwMi44IDk1LjIgTCAxMDEuNSA5Ni42IEMgMTAxIDk3LjEgMTAwLjYgOTcuNCAxMDAuNCA5Ny43IEMgMTAwLjIgOTggMTAwLjEgOTguMiAxMDAgOTguNSBDIDEwMCA5OC43IDk5LjkgOTguOSA5OS45IDk5LjIgQyA5OS44IDk5LjUgOTkuOCAxMDAgOTkuOCAxMDAuNSBMIDk5LjggMTAyLjQgTCA5OS43IDEwMi40IEwgOTkuNyAxMDIuNyBMIDk2LjYgMTAyLjcgTCA5Ni40IDEwMi43IEwgOTYuNCAxMDIuNCBMIDk2LjQgMTAwIEMgOTYuNCA5OC45IDk2LjYgOTggOTYuOSA5Ny4zIEMgOTcuMiA5Ni42IDk3LjkgOTUuOCA5OC44IDk0LjggTCAxMDAuMiA5My40IEMgMTAwLjggOTIuOSAxMDEuMiA5Mi40IDEwMS41IDkxLjkgQyAxMDEuNyA5MS40IDEwMS45IDkxIDEwMS45IDkwLjUgQyAxMDEuOSA4OS42IDEwMS41IDg4LjkgMTAwLjkgODguMyBDIDEwMC4yIDg3LjggOTkuNCA4Ny41IDk4LjMgODcuNSBDIDk3LjUgODcuNSA5Ni42IDg3LjcgOTUuNyA4OC4xIEMgOTQuOCA4OC41IDkzLjggODkgOTIuOCA4OS43IEwgOTIuNSA4OS45IEwgOTIuNSA4OS41IEwgOTIuNSA4Ni41IEwgOTIuNSA4Ni40IEwgOTIuNiA4Ni4zIEMgOTMuNiA4NS43IDk0LjYgODUuMyA5NS42IDg1IEMgOTYuNyA4NC43IDk3LjcgODQuNSA5OC44IDg0LjUgeiBNIDk2LjUgMTA0LjYgTCA5OS44IDEwNC42IEwgOTkuOSAxMDQuNiBMIDk5LjkgMTA0LjggTCA5OS45IDEwOC44IEwgOTkuOSAxMDkgTCA5OS44IDEwOSBMIDk2LjUgMTA5IEwgOTYuMyAxMDkgTCA5Ni4zIDEwOC44IEwgOTYuMyAxMDQuOCBMIDk2LjUgMTA0LjggTCA5Ni41IDEwNC42IHpcIn1dLGlbXCJBQy5JQy5GTEFNTUFCTEUgR0FTXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTMuMyw4Mi41IGMgMCwtNC4zIDEzLjgsLTQuMyAxMy44LDAgdiA1NS42IGMgMCwxLjMgLTQuNCwxLjIgLTUuOSwxLjIgaCAtMiBjIC0xLjUsMCAtNS45LDAuMSAtNS45LC0xLjIgViA4Mi41IGwgNGUtNCwwIHogbSA1LjMsLTIwLjYgaCAtNi41IHYgMi45IGggNi4zIHYgMy4yIGggLTMuNyB2IDIgaCAzLjcgdiA1LjMgaCAtNC42IHYgNC41IGMgLTEuMSwwLjMgLTIsMS42IC0yLDMgdiA1NC44IGMgMCwzLjMgMy43LDMuMiA3LjEsMy4yIGggMi40IGMgMy40LDAgNy4xLDAuMiA3LjEsLTMuMiBWIDgzLjEgYyAwLC0yLjggLTEuOCwtMi44IC0xLjgsLTMuNyB2IC00LjEgaCAtNC43IHYgLTEwLjQgaCA2LjMgdiAtMyBoIC02LjcgdiAtMi41IGggLTIuOSB2IDIuNSBsIDAsMCB6IG0gMjEuOCwzMi4zIHYgMC42IGMgMCwyLjIgMi4zLDUuMSAxLjYsOC4xIC0xLjMsLTAuMyAtMy4xLC0yIC0zLjgsLTMgLTAuMywtMC40IC0wLjksLTEuNyAtMS4yLC0yLjIgLTAuNCwtMC45IC0wLjQsLTIuMyAtMC43LC0yLjggLTEuMSwwLjggLTEuNiwzLjUgLTEuNiw1LjUgdiAwLjIgYyAwLDMuMiAyLjQsNy41IDMuOCw5LjYgMiwzIDYuMywzLjMgOC40LDUuMSAxLjYsLTAuOSA2LjksLTMuNyA3LjcsLTQuOSAwLjksLTEuMiAzLjIsLTcuNCAzLC05LjYgbCAtMC43LC01LjkgaCAtMC40IGMgLTAsMy4yIC0yLjcsNy42IC01LjUsNy45IHYgLTIgYyAwLC0xLjcgMS40LC00IDEuNCwtNi4xIHYgLTAuMiBjIDAsLTAuOSAtMi40LC00LjQgLTMuMiwtNC43IDAsMy40IC0wLjMsNS41IC0yLjUsNi43IC0wLjgsLTAuNyAtMS44LC0xLjYgLTEuOCwtMy4xIHYgLTEuMiBjIDAsLTIuMSAyLC00LjEgMiwtNi4xIDAsLTAuOSAtMC4xLC0xLjYgLTAuNiwtMiAtMC45LDMuOCAtNS45LDguOSAtNS45LDEwLjIgeiBtIC01Mi43LDAgdiAwLjQgYyAwLDEuMiAxLjgsNC4zIDEuOCw2LjEgdiAyLjIgYyAtMi40LC0wLjIgLTUuNywtNSAtNS43LC04LjEgLTEuNywxLjEgLTEuNSw0LjMgLTEuNCw2LjcgMC4xLDIuNCAxLjMsNC43IDIuMiw2LjMgMS4zLDIuNiAxLjYsMi45IDQsNC41IDAuNiwwLjQgNS4zLDIuOCA1LjksMi44IDEuMiwwIDYuOCwtMy45IDcuNSwtNC43IDAuOSwtMSAzLjMsLTcuMyAzLjEsLTkuMSBsIC0wLjYsLTYuNSBoIC0wLjQgYyAtMC41LDIuMyAtMC4zLDMuMyAtMS42LDUgLTAuNiwwLjggLTIuNywyLjcgLTMuOCwyLjggMCwtMC45IC0wLjIsLTAuNyAtMC4yLC0xLjQgMCwtMS44IDEuNCwtNC4zIDEuNywtNi42IDAuMSwtMSAtMi42LC00LjYgLTMuMywtNSAwLjQsMiAtMC44LDYuNSAtMi40LDYuNSBoIC0wLjIgYyAtMC45LDAgLTEuOCwtMi4yIC0xLjgsLTMuNCAwLC0zLjkgMi42LC00LjUgMS42LC04LjggLTAsMCAtMi4yLDQuNSAtMi45LDUuNCAtMC42LDAuNiAtMy41LDQuMyAtMy41LDQuOSB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA5My4zLDgyLjUgYyAwLC00LjMgMTMuOCwtNC4zIDEzLjgsMCB2IDU1LjYgYyAwLDEuMyAtNC40LDEuMiAtNS45LDEuMiBoIC0yIGMgLTEuNSwwIC01LjksMC4xIC01LjksLTEuMiBWIDgyLjUgbCA0ZS00LDAgelwifV0saVtcIkFDLklDLkZMQU1NQUJMRSBMSVFVSURcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAuMSwxMzUuNCBjIC03LjQsMCAtMTEuMywtNS40IC0xMy4xLC0xMS4xIC0yLjEsLTYuNyAtMi40LC0xNC40IDAuOCwtMjAuMiA1LjksLTEwLjYgMTAuNywtMjEuNiAxMS45LC0zNi43IDQsNC42IDMuNiwxNy40IDYuMywyMy45IDIuNiw2LjUgOC45LDEzLjQgOC45LDIxIHYgMS43IGMgMCwxMCAtNC41LDIxLjMgLTE0LjIsMjEuMyBoIC0wLjcgdiAwIHogbSAtMC42LDEuNyBoIDEuOSBjIDEwLjEsMCAxNS40LC0xMS43IDE1LjQsLTIxLjkgdiAtMyBjIDAsLTkuNSAtNy43LC0xNS44IC05LjksLTI0LjEgLTIuNCwtOC45IC0xLjcsLTIxLjIgLTkuMSwtMjUuMSAwLDguNiAtMS4zLDE2IC0zLjYsMjIuNCAtMS4yLDMuMyAtMi40LDYuMiAtMy42LDkuNSAtMS4yLDIuNyAtMy4xLDUuOCAtNC41LDguNiAtMS40LDIuNyAtMyw2LjEgLTIuNiwxMC41IDAuNCw0LjQgMC42LDcuNiAxLjgsMTEuMyAyLDUuOSA2LjcsMTEuOSAxNC4zLDExLjkgeiBNIDEyMiw4NyB2IDAuMiBjIDAsMi4zIDIuNCw1LjUgMS43LDguNiAtMS4zLC0wLjEgLTMuNSwtMi4yIC00LjEsLTMuMiAtMC41LC0wLjkgLTAuOSwtMS4zIC0xLjIsLTIuNCAtMC4zLC0wLjcgLTAuNiwtMi42IC0wLjgsLTMgLTEuMiwwLjkgLTEuNyw0IC0xLjcsNi4xIDAsMy4yIDIuNiw4LjQgNCwxMC40IDEsMS4zIDIuNSwyLjMgNC4xLDMuMSAwLjYsMC4zIDQuOCwyLjQgNSwyLjQgMC45LDAgNy42LC00LjQgOC4yLC01LjEgMC45LC0xLjEgMy41LC04IDMuMywtMTAuMSBsIC0wLjcsLTYuOCBoIC0wLjQgYyAtMC4xLDMuNSAtMi44LDguMiAtNS45LDguNCAwLDAgMC4zLC0zLjUgMC41LC00LjQgMC4zLC0xLjMgMSwtMi45IDEsLTQuMyBWIDg2LjggYyAwLC0xIC0yLjcsLTQuNiAtMy40LC01LjEgMCwzLjcgLTAuMiw2IC0yLjcsNy4yIC0wLjcsLTAuNiAtMS45LC0xLjcgLTEuOSwtMyB2IC0xLjQgYyAwLC0yLjMgMi4xLC00LjcgMi4xLC02LjUgbCAwLC0wLjIgLTAuMywtMS45IGMgLTEsMC4yIC0xLjEsMiAtMS41LDIuOSAtMC41LDAuOSAtMS4yLDEuOSAtMS44LDIuNiAtMC45LDEuMiAtMy41LDQuMSAtMy41LDUuNyB6IG0gLTU2LjYsMCBjIDAsMS4zIDEuOSw0LjcgMS45LDcgdiAxLjkgYyAtMi42LC0wLjIgLTYuMSwtNS4yIC02LjEsLTguNiAtMy40LDIuNCAtMC43LDExLjQgMC45LDE0LjEgMS41LDIuNiAxLjgsMyA0LjQsNC43IDAuNCwwLjMgNi4xLDMuMSA2LjIsMy4xIDEuMywwIDQuMSwtMi41IDUuMywtMy4yIDIuNSwtMS4yIDIuOSwtMS43IDQuMiwtNC4zIDAuNCwtMC45IDEuNiwtNS40IDEuOSwtNi42IDAuNCwtMi4xIC0wLjUsLTUuOCAtMC41LC03LjkgaCAtMC41IGMgLTAuMywzLjUgLTIuOSw4LjQgLTUuOSw4LjQgLTAsLTAuOSAtMC4yLC0wLjUgLTAuMiwtMS4yIDAsLTIgMS41LC00LjkgMS44LC03LjEgMC4yLC0xLjIgLTIuNywtNS4yIC0zLjUsLTUuNCAxLDIuMSAtMS4xLDYuMSAtMi43LDcgLTAuOSwtMC42IC0xLjksLTIuMiAtMS45LC0zLjYgdiAtMC40IGMgMCwtMy43IDIuNywtNC42IDEuNywtOS4xIC0wLjUsMC40IC0wLjgsMiAtMS40LDMgLTAuNywxIC0xLDEuNyAtMS44LDIuNyAtMC44LDEgLTMuNiw0LjIgLTMuNiw1LjUgbCAwLDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTAwLjEsMTM1LjQgYyAtNy40LDAgLTExLjMsLTUuNCAtMTMuMSwtMTEuMSAtMi4xLC02LjcgLTIuNCwtMTQuNCAwLjgsLTIwLjIgNS45LC0xMC42IDEwLjcsLTIxLjYgMTEuOSwtMzYuNyA0LDQuNiAzLjYsMTcuNCA2LjMsMjMuOSAyLjYsNi41IDguOSwxMy40IDguOSwyMSB2IDEuNyBjIDAsMTAgLTQuNSwyMS4zIC0xNC4yLDIxLjMgaCAtMC43IHYgMCB6XCJ9XSxpW1wiQUMuSUMuRkxBTU1BQkxFIFNPTElEXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNjguNiwxMDIgYyAwLC0yIDEuOSwtNC4yIDEuOSwtNi4zIHYgLTEuNSBjIDAsLTAuNiAtMC4xLC0wLjQgLTAuNCwtMC43IC0wLjgsMy43IC02LjEsOS4xIC02LjEsMTAuNCAwLDEuNiAxLjksNC42IDEuOSw4LjIgLTIuNiwtMC4yIC01LjksLTQuOSAtNS45LC04IC0wLjgsMC45IC0xLjUsMi42IC0xLjUsNC4zIDAsNC40IDEuNyw4LjEgMy41LDEwLjYgMC44LDEuMiA3LDUuMiA4LjcsNS4yIDEuMSwwIDYuNywtMy43IDcuMywtNC40IDAuOSwtMS4yIDMuMiwtNi44IDMuMiwtOC42IDAsLTEuNiAtMCwtNi42IC0wLjksLTcuMiAtMS4xLDQuOCAtMS41LDUuOSAtNS40LDguMSAwLC00LjMgMS4zLC01LjcgMS4zLC04LjIgdiAtMC40IGMgMCwtMC4xIC0yLjgsLTQuNCAtMywtNC42IDAsMi40IC0wLjcsNi43IC0yLjYsNi43IC0xLDhlLTQgLTIsLTIuNCAtMiwtMy43IHogbSA2MC4zLC0wLjQgYyAwLC0xLjcgMi4yLC00LjUgMi4yLC02LjMgMCwtMC43IC0wLjIsLTEuNiAtMC43LC0xLjkgLTAuOSwzLjcgLTUuOSw4LjkgLTUuOSwxMC4yIHYgMC40IGMgMCwxLjkgMS41LDMuNyAxLjUsNi4xIHYgMi4yIGMgLTIuMywtMC42IC01LjYsLTQuOSAtNS43LC04IC0xLDAuNyAtMS41LDMgLTEuNSw0LjggdiAxLjEgYyAwLDIuOCAyLjUsNy43IDMuOCw5LjUgMiwyLjcgNi40LDMuMSA4LjQsNC44IDIuMSwtMS4xIDMuMSwtMS44IDUuMSwtMi45IDIuNiwtMS42IDIuMiwtMS41IDMuNSwtNC4zIDAuNywtMS40IDEuNywtNC41IDEuOCwtNi4yIDAuMSwtMS41IC0wLjEsLTYuNCAtMC45LC03IC0wLjgsMy41IC0yLjEsNy4xIC01LjQsOCAtMCwtMC43IC0wLjIsLTAuNyAtMC4yLC0xLjUgdiAtMC4yIGMgMCwtMS44IDEuNywtNC45IDEuNSwtNi40IC0wLjEsLTAuOCAtMi41LC00LjggLTMsLTUuMSAwLDIuOCAtMC41LDYuNyAtMyw2LjcgLTAuNCwtMS4zIC0xLjUsLTEgLTEuNSwtMy45IHogbSAtMzUuNiwxLjkgdiAtMjAgbCAyMCwtMC40IHYgMTkuNCBsIC0yMCwxIHogbSAtMTMuOSwtNy42IDAsLTE2LjggMTAuOCw0IHYgMTkuOCBjIC0xLjIsLTAuNyAtMTAuOSwtNi4yIC0xMC45LC03IHogbSAxLjUsLTE4LjQgYyA1LjcsMCAxMS40LDAgMTcuMiwwIDIuMSwwIDEyLjEsMy4xIDEzLjIsMy45IGwgLTMuNywwLjMgSCA5Mi42IGMgLTAuOSwwIC0xMS4xLC0zLjcgLTExLjcsLTQuMSB6IG0gLTMuNSwtMS41IDAsMTQuNyAtMC4zLDYuNyBjIDIuMiwxLjIgNS4zLDMgNy41LDQuNSAxLjksMS4yIDUuNSw0IDguMSw0IDcuNiwwIDE1LjMsLTEuMSAyMy4xLC0xLjEgbCAtMCwtMjMuNiBjIC0xLC0wLjUgLTE0LjgsLTUuNCAtMTUuMiwtNS40IGwgLTMuOSwtMC4xIC0xOS4zLDAuNCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA4MC45LDc3LjUgYyA1LjcsMCAxMS40LDAgMTcuMiwwIDIuMSwwIDEyLjEsMy4xIDEzLjIsMy45IGwgLTMuNywwLjMgSCA5Mi42IGMgLTAuOSwwIC0xMS4xLC0zLjcgLTExLjcsLTQuMSB6IG0gLTEuNSwxOC40IDAsLTE2LjggMTAuOCw0IHYgMTkuOCBjIC0xLjIsLTAuNyAtMTAuOSwtNi4yIC0xMC45LC03IHogbSAxMy45LDcuNiB2IC0yMCBsIDIwLC0wLjQgdiAxOS40IGwgLTIwLDEgelwifV0saVtcIkFDLklDLk5PTi1GTEFNTUFCTEUgR0FTXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTIuNyw4MS4zIGMgMCwtNC42IDE0LjcsLTQuNiAxNC43LDAgdiA1OS40IGMgMCwxLjQgLTQuNywxLjMgLTYuMywxLjMgaCAtMi4xIGMgLTEuNiwwIC02LjMsMC4xIC02LjMsLTEuMyBWIDgxLjMgeiBtIDUuNywtMjIgaCAtNyB2IDMuMiBoIDYuNyB2IDMuMyBoIC00IHYgMi4xIGggNCB2IDUuNyBoIC00LjggdiA0LjggYyAtMS4xLDAuMyAtMi4xLDEuNyAtMi4xLDMuMSB2IDU4LjYgYyAwLDMuNSA0LDMuMyA3LjYsMy4zIGggMi41IGMgMy42LDAgNy42LDAuMiA3LjYsLTMuMyBWIDgxLjkgYyAwLC0zIC0xLjksLTMgLTEuOSwtNCB2IC00LjQgaCAtNSB2IC0xMS4xIGggNi43IHYgLTMuMSBoIC03LjIgdiAtMi43IGggLTMuMSB2IDIuNyBsIC00ZS00LDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTIuNyw4MS4zIGMgMCwtNC42IDE0LjcsLTQuNiAxNC43LDAgdiA1OS40IGMgMCwxLjQgLTQuNywxLjMgLTYuMywxLjMgaCAtMi4xIGMgLTEuNiwwIC02LjMsMC4xIC02LjMsLTEuMyBWIDgxLjMgelwifV0saVtcIkFDLklDLk9SR0FOSUMgUEVST1hJREVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMzIuMSwxMjguMiB2IDYuMiBsIC0zNi42LDIuMiB2IC02LjcgbCAwLjYsMC4xIDM2LC0xLjcgeiBtIC02My44LC0xMS4xIGMgMi42LDEuNyAyNi4xLDEyLjEgMjYuMSwxMy4yIHYgNS45IGwgLTAuMSwwLjIgLTI2LC0xNC43IHYgLTQuNiB6IG0gNjEuMSwxMCBjIC00LjcsMCAtMzMsMi4xIC0zNC42LDEuNSAtMS44LC0wLjcgLTIzLjgsLTExLjQgLTI0LjQsLTEyIDMuOCwwIDcuNSwwIDExLjMsMCAyLjksMCA4LjgsLTAuOCAxMCwxLjEgbCAtOSwwLjYgMi4xLDAuNyB2IDAuNCBoIC0xLjIgbCAtMS44LDAuMiBjIDIsMS4zIDE4LjMsNS4yIDIyLjQsNS4yIGggMS45IGMgNC44LDAgOS4yLC0xLjMgMTMsLTEuNCAwLjcsMCA5LjksMy4zIDEwLjQsMy43IHogbSAtMjUuNCwtMjMuMiAxLjEsOS40IDUuNCwtNi44IC0yLjUsOC4yIDcuNywtNC4zIC0zLjcsNS45IDguNCwtMC44IC05LjIsNC43IDguMSwyLjYgLTE0LjQsMS43IGMgLTMuMywwLjIgLTE5LC0zLjcgLTIwLjUsLTQuOCBsIDEwLjMsLTAuNiAtNi4yLC00LjUgNi44LDAuMSAtMS43LC01LjkgNS4xLDUuMiAwLjcsLTcuNSAyLjYsMy45IDIuMSwtNi42IHogbSAwLjcsLTIuMiAtMC4xLC0wLjYgaCAtMC4zIGwgLTEuOCw2LjIgLTAuNCwtMCAtMi40LC0zLjcgLTAsMi4xIC0wLjcsLTEuMSAtMC42LDYuMiAtNC45LC01LjQgMC42LDIuNiAtMS41LC0xLjIgMS44LDYuMiAtMi41LDAgLTQsLTAuMiAxLjUsMS4xIC0yLjQsLTAuMSAxLjUsMS40IGggLTIxLjMgYyAtMC4xLDAuNSAtMC4yLDAuNSAtMC4yLDEuMSB2IDUgYyAwLDEuNiA0LjgsMy43IDYuMiw0LjQgMi4zLDEuMyA0LjYsMi40IDYuOSwzLjggNC40LDIuNyA5LjIsNSAxMy43LDcuNiAxLjgsMS4xIDYuOCwwLjUgOS42LDAuMiAyLjgsLTAuMyA3LjIsLTAuMiA5LjksLTAuNyAyLjgsLTAuNSA3LC0wLjQgOS45LC0wLjcgMi43LC0wLjQgNy40LC0wLjYgMTAsLTAuNyB2IC03LjkgYyAwLC0wLjkgLTUuMywtMi40IC02LjQsLTIuOCAtMS42LC0wLjUgLTUuNywtMS45IC02LjgsLTIuNiBsIDIuOSwtMC4zIC04LjQsLTIuMiAwLC0wLjQgOS4yLC00LjcgLTEuNSwwLjIgMS43LC0xLjEgLTEwLDEgMy45LC02LjYgLTguMSw0LjcgMi45LC0xMCAtNi40LDguNCAtMS4xLC0xMS4xIC0wLjYsMS45IHogbSAxLjEsLTYuMiBjIC01LjYsMCAtOS42LC0zLjQgLTkuNiwtOSB2IC0xLjEgYyAwLC00LjggOSwtMTIuNSA5LC0yMS4xIDIuOCwzLjIgMi4yLDcuNiA0LjMsMTEgMS4yLDEuOSA1LjMsNy44IDUuMyw5LjkgdiAxLjEgYyAwLDUuMyAtMy43LDkuMiAtOSw5LjIgeiBtIC0xMC45LC0xMCB2IDEuMSBjIDAsMTMuNyAyMS4xLDEzLjIgMjEuMSwwLjggdiAtMi4xIGMgMCwtMy41IC00LjUsLTguMyAtNS45LC0xMS43IC0yLjIsLTUuMSAtMS4xLC04LjggLTYuMiwtMTEuNiAwLDExLjIgLTksMTcuNiAtOSwyMy41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEwNS43LDk1LjUgYyAtNS42LDAgLTkuNiwtMy40IC05LjYsLTkgdiAtMS4xIGMgMCwtNC44IDksLTEyLjUgOSwtMjEuMSAyLjgsMy4yIDIuMiw3LjYgNC4zLDExIDEuMiwxLjkgNS4zLDcuOCA1LjMsOS45IHYgMS4xIGMgMCw1LjMgLTMuNyw5LjIgLTksOS4yIHogbSAtMS44LDguNCAxLjEsOS40IDUuNCwtNi44IC0yLjUsOC4yIDcuNywtNC4zIC0zLjcsNS45IDguNCwtMC44IC05LjIsNC43IDguMSwyLjYgLTE0LjQsMS43IGMgLTMuMywwLjIgLTE5LC0zLjcgLTIwLjUsLTQuOCBsIDEwLjMsLTAuNiAtNi4yLC00LjUgNi44LDAuMSAtMS43LC01LjkgNS4xLDUuMiAwLjcsLTcuNSAyLjYsMy45IDIuMSwtNi42IHogbSAtMzUuNiwxMy4yIGMgMi42LDEuNyAyNi4xLDEyLjEgMjYuMSwxMy4yIHYgNS45IGwgLTAuMSwwLjIgLTI2LC0xNC43IHYgLTQuNiB6IG0gNjMuOCwxMS4xIHYgNi4yIGwgLTM2LjYsMi4yIHYgLTYuNyBsIDAuNiwwLjEgMzYsLTEuNyB6IG0gLTIuNywtMS4xIGMgLTQuNywwIC0zMywyLjEgLTM0LjYsMS41IC0xLjgsLTAuNyAtMjMuOCwtMTEuNCAtMjQuNCwtMTIgMy44LDAgNy41LDAgMTEuMywwIDIuOSwwIDguOCwtMC44IDEwLDEuMSBsIC05LDAuNiAyLjEsMC43IHYgMC40IGggLTEuMiBsIC0xLjgsMC4yIGMgMiwxLjMgMTguMyw1LjIgMjIuNCw1LjIgaCAxLjkgYyA0LjgsMCA5LjIsLTEuMyAxMywtMS40IDAuNywwIDkuOSwzLjMgMTAuNCwzLjcgelwifV0saVtcIkFDLklDLk9YSURJWkVSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODAuOSwxMzUuMyAwLDAuMiAwLDQuMiAwLDAuMiAwLjIsMCA0MC43LDAgMC4yLDAgMCwtMC4yIDAsLTQuMiAwLC0wLjIgLTAuMiwwIC00MC43LDAgLTAuMiwwIHogbSA2LjUsLTIwLjcgYyAwLC03LjQgNi4xLC0xNCAxMy40LC0xNCBoIDEuMSBjIDcuNSwwIDEzLjYsNi42IDEzLjYsMTQgMCw3LjEgLTYuMiwxMy45IC0xMy4yLDEzLjkgaCAtMS45IGMgLTYuOCwtMCAtMTMsLTYuOCAtMTMsLTEzLjkgeiBtIDEyLjgsLTM1LjkgYyAtMC43LDAgLTIuMSwtMi4xIC0yLjMsLTIuOSAtMC4zLC0xLjIgLTAuNCwtMyAwLC00LjQgMC41LC0yLjEgMi44LC01LjkgMi44LC03LjUgMCwtMS4xIC0wLjEsLTMgLTEuMywtMy4xIC0xLDQuNCAtMi4xLDQuOSAtNC4xLDggLTEsMS41IC00LjcsNS44IC00LjcsNy4zIHYgMC40IGMgMCwyLjQgMy4xLDguMSAyLjcsMTAuNSBsIC0wLjIsMS43IGMgLTMuNSwtMC44IC04LjEsLTcuMyAtOC4xLC0xMiAtMS40LDAuMSAtMi41LDQuNCAtMi41LDYuMSB2IDIuOSBjIDAsNS43IDMuMyw4LjMgNC4yLDEyIC0yLjcsLTEuNCAtNCwtMi4yIC01LjksLTQuNCAtMS4xLC0xLjIgLTMuNywtNS42IC00LjEsLTUuOSAtMS4xLDIuNCAxLjcsMTAuMyAyLjQsMTIuMSAwLjcsMS43IDEuNCwzLjUgMi4zLDUgMS4xLDEuOCAyLjIsMi42IDMuMiw0LjEgMCwxLjcgLTAuNSwyLjQgLTAuNiw0LjcgLTAsMS44IC0wLDIuNiAwLjIsNC42IDAuMiwyLjEgMi4xLDYuMSAzLjIsNy4zIDIuNCwyLjYgMi40LDIuOCA1LjYsNC44IDIsMS4zIDQuOSwyLjIgOC4xLDIuMiBoIDAuNiBjIDYuNCwwIDExLjQsLTMuNSAxNC4yLC03LjIgMy44LC01LjIgMy44LC05LjkgMi4yLC0xNi43IDMuNSwtNi42IDUuOSwtOS4zIDUuOSwtMTkuNyB2IC0wLjQgbCAtMC40LC00IGMgLTAuMSwwIC0zLjMsNi4yIC0zLjgsNyAtMSwxLjUgLTMuNyw0LjggLTUuNyw1IDAuMSwtMy4yIDIuMSwtNi4yIDIuMSwtOS40IHYgLTIuMiBsIC0xLjEsLTggYyAtMSwwLjcgLTEuNSw1LjkgLTMsNy43IC0wLjQsMC41IC01LjYsNS41IC01LjYsMy42IHYgLTEuNyBjIDAsLTMuMSAyLjEsLTYuMyAyLjEsLTkgdiAtMS4zIGMgMCwtMC44IC0zLjksLTYuNSAtNC42LC02LjkgMCwyLjMgLTAuMiw0LjQgLTAuNyw2LjIgLTAuMywxLjEgLTIsMy43IC0zLDMuNyB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA4Ny40LDExNC41IGMgMCwtNy40IDYuMSwtMTQgMTMuNCwtMTQgaCAxLjEgYyA3LjUsMCAxMy42LDYuNiAxMy42LDE0IDAsNy4xIC02LjIsMTMuOSAtMTMuMiwxMy45IGggLTEuOSBjIC02LjgsLTAgLTEzLC02LjggLTEzLC0xMy45IHpcIn1dLGlbXCJBQy5JQy5SQURJT0FDVElWRSBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgzLjcsMTMwLjQgYyAtMTAuMSwtNS42IC0xNi42LC0xNyAtMTYuNCwtMjguNSBsIDE3LjgsLTAgYyAtMC4yLDUgMy4xLDEwLjcgNy41LDEzLjEgbCAtOSwxNS40IHogbSA0OS4xLC0yOC4yIGMgMC4yLDExLjUgLTYuNCwyMi45IC0xNi40LDI4LjUgbCAtOSwtMTUuNCBjIDQuNCwtMi40IDcuNywtOC4xIDcuNiwtMTMuMSBsIDE3LjgsMCB6IE0gODMuNSw3My44IGMgOS45LC01LjkgMjMsLTUuOSAzMi45LDAgbCAtOC45LDE1LjUgYyAtNC4zLC0yLjYgLTEwLjksLTIuNiAtMTUuMSwwIGwgLTguOSwtMTUuNSB6IG0gMjYuNSwyOC41IGMgMCw1LjUgLTQuNCw5LjkgLTkuOSw5LjkgLTUuNSwwIC05LjksLTQuNCAtOS45LC05LjkgMCwtNS41IDQuNCwtOS45IDkuOSwtOS45IDUuNSwwIDkuOSw0LjQgOS45LDkuOSB6XCJ9XSxpW1wiQUMuSUMuU1BPTlRBTkVPVVNMWSBDT01CVVNUSUJMRSBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMS4yLDEyOC40IC0yLjEsMCAwLDEyLjYgMi4xLDAgeiBtIDI2LjUsMC42IC04LjcsLTguNiAtMS4yLDEuMiA4LjcsOC43IHogbSAtNDUsLTcuNSAtMS4zLC0xLjMgLTguOCw4LjggMS4zLDEuNCB6IG0gNTUuNSwtMTkuNyAtMTIuMiwwIDAsMS45IDEyLjIsMCB6IG0gLTYzLjMsMCAtMTMuMSwwIDAsMS45IDEyLjgsMCB6IG0gNTIuOCwtMjUuMyAtMS4zLC0xLjIgLTksOC43IDEuNSwxLjUgeiBtIC00Ni4xLDkuMSAxLjQsLTEuNSAtOS4zLC05LjIgLTAsMC4yIC0xLjIsMS4zIHogbSAxOS41LC0yNi41IC0yLjEsMCAwLDkuNyAyLjEsMCB6IE0gOTEuNyw4OCB2IDAuNiBjIDAsMC41IDEuNCw0LjMgMS43LDUuMSAwLjcsMi4yIDAuNywzLjQgMC43LDUuNyAtMS4yLC0wLjEgLTQuNCwtMyAtNS4xLC00IC0xLjcsLTIuNSAtMS43LC0zLjQgLTIuNSwtNi43IC0wLjksMC43IC0xLjksMy44IC0xLjksNS41IHYgMi4zIGMgMCw1LjYgMy42LDguNCAzLjgsMTEuMSAtMC45LC0wLjIgLTQuOCwtMy4yIC01LjQsLTMuOCAtMC43LC0wLjggLTMuMywtNS4zIC0zLjgsLTUuNCAwLDMuOSAxLjEsNi45IDIuMSw5LjcgMC42LDEuNSAxLjIsMi45IDEuNyw0LjIgMC44LDIuMiAxLjQsMiAyLjYsMy41IDIuOSwzLjYgOS40LDguMyAxNS43LDguMyBoIDAuOCBjIDIuMiwwIDYuNCwtMS43IDcuOSwtMi42IDIuNCwtMS4zIDQuNSwtMi43IDYsLTQuOCAyLjgsLTMuOCA1LjMsLTkuMyA1LjMsLTE2IHYgLTIuNyBsIC0wLjIsLTIuMyBoIC0wLjQgYyAtMS4xLDQuNyAtNC4yLDguNCAtOCwxMC41IDAsLTMuNiAxLjMsLTUuMyAxLjksLTguNCAwLjQsLTIuNCAtMSwtNi45IC0xLC05LjIgLTAuNCwwLjMgLTEuMiw1LjQgLTIuNSw3IC0wLjMsMC40IC01LjEsNS4yIC01LjEsMy4xIHYgLTIuMSBjIDAsLTMgMS45LC00LjggMS45LC04LjIgMCwtMC44IC0zLjUsLTYgLTQuMSwtNi4zIGwgMC4xLDAuOSBjIDAsMS4yIC0wLjQsNC4xIC0wLjcsNSAtMC4yLDAuNSAtMi4zLDMgLTIuNiwzIC0xLjIsMCAtMi41LC0yLjkgLTIuNSwtNC40IHYgLTEuMSBjIDAsLTIuOSAyLjgsLTYuMSAyLjYsLTggbCAtMC41LC0yLjkgYyAtMC41LDAuNCAtMS4yLDMgLTEuNiwzLjkgLTAuNiwxLjMgLTEuNCwyLjIgLTIuMiwzLjIgQyA5NS40LDgyLjQgOTEuNyw4Ny4xIDkxLjcsODggelwifV0saVtcIkFDLklDLlVORVhQTE9ERUQgT1JETkFOQ0VcIl09YShcIlVYT1wiKSxpW1wiQUMuSUMuVE9YSUMgSU5GRUNUSU9VUyBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwNC42LDExNi4yIGMgMCwtMy42IDAuOSwtNC42IDEuNSwtNy4zIGwgLTIuNSwtMS4yIGMgLTIuNCwyLjEgLTQuNCwxLjYgLTYuOCwwIGwgLTIuNSwxLjQgYyAwLjIsMi42IDIsMy45IDEuNSw4LjcgLTAuNCwzLjEgLTEuMSw1LjggLTIuNiw3LjggLTIuOSwzLjkgLTcsNy40IC0xMy43LDcuNCBoIC0xIGMgLTQuNywwIC0xMC4yLC0zLjIgLTEyLC02IGwgLTEuMiwwLjYgYyAzLjMsNC45IDExLjQsMTAgMTkuOCwxMCBoIDAuMiBjIDYuNCwwIDEwLjksLTIuNyAxNC44LC01LjMgMy43LDIuNSA3LjYsNSAxMy44LDUgaCAzIGMgMy44LDAgOC4yLC0xLjYgMTAuNiwtMy4yIDEuOCwtMS4yIDYuNywtNC41IDcuMiwtNi42IC0xLjEsLTAuMyAtMC41LC0wLjUgLTEuMywtMC41IC0wLjUsMCAtMS43LDEuOSAtMi4yLDIuMyAtMC44LDAuNiAtMS44LDEuMSAtMi42LDEuNiAtMS40LDAuOSAtNC43LDEuOCAtNywxLjggaCAtMS44IGMgLTcuOSwwIC0xNS4zLC03LjcgLTE1LjMsLTE1LjggdiAtMC44IHogbSAyLjMsMy41IDIuNSw0LjMgYyAzLjIsLTAuOCA3LjcsLTUuMiA5LjMsLTcuOCAyLjIsLTMuNyAzLjUsLTcuOCAzLjUsLTEzLjggaCAtNS41IGMgMC4xLDUuMiAtMC4xLDcuMiAtMi41LDEwLjggLTEuMiwxLjggLTEuNywyLjEgLTMuMiwzLjYgLTEsMSAtMy42LDIuMiAtNC4xLDIuOSB6IG0gLTI4LjYsLTEzLjggYyAwLDcuNCA2LjgsMTYuNyAxMi41LDE4IGwgMi4zLC00LjUgYyAtNi41LC0zLjQgLTkuNSwtOCAtOS41LC0xNy4xIGggLTUuMyB2IDMuNSB6IG0gLTIuNSwtMTcgdiAxIGMgMCwwLjUgLTUsMy4yIC01LjgsMy44IC0xLjYsMS4xIC0zLjUsMy4yIC00LjcsNC44IC0yLjgsMy42IC00LjgsOC4xIC00LjgsMTQuMiAwLDQuNCAxLDYgMS44LDkuNCBsIDEuMiwtMC42IGMgLTAuMSwtMS41IC0wLjgsLTIuMyAtMC44LC00IHYgLTIgYyAwLC03LjggNy45LC0xNS42IDE2LC0xNS42IGggMS44IGMgMi42LDAgNS45LDEuMyA3LjUsMi4yIDIuMiwxLjMgMy42LDMuNiA1LjMsNC44IGwgMi4zLC0xIHYgLTEuOCBjIDAsLTIgMS42LC0zLjkgMy4zLC00LjMgdiAtMyBjIC03LjYsLTAuMiAtMTUuMywtNy44IC0xNS4zLC0xNS41IHYgLTEuNSBjIDAsLTQuMSAyLjEsLTguNiA0LjIsLTEwLjYgMS4zLC0xLjIgMi41LC0yLjMgNCwtMy4yIDAuOCwtMC41IDUuMSwtMS41IDUuMSwtMi41IHYgLTEgYyAtNi42LDEuNiAtMTEuNywzLjggLTE1LjQsOC41IC00LjMsNS41IC01LjcsOSAtNS43LDE3LjkgbCAwLDAgeiBtIDI3LjYsLTI1LjQgYyAwLDAuNiA0LjIsMi4xIDUsMi41IDEuMiwwLjYgMy41LDIuNCA0LjIsMy41IDIuMSwyLjkgNC4zLDYgNC4zLDExIDAsOC4yIC03LjQsMTYuMyAtMTUuNiwxNi4zIHYgMyBjIDIuMywwLjIgNC40LDMuNCAzLjMsNS44IDAuNiwwLjIgMi41LDEuMiAyLjUsMS4yIDAuNywwIDUsLTcgMTQuMywtNyBoIDAuMiBjIDQuNSwwIDksMi42IDExLjEsNSAxLjcsMS45IDUuMyw3LjYgNC44LDExLjQgbCAtMC44LDUuNSAxLjIsMC42IGMgMC4xLC0wLjkgMC44LC0yLjMgMS4xLC0zLjYgMC4zLC0xLjIgMC40LC0zIDAuNCwtNC40IHYgLTMuMyBjIDAsLTguNCAtOC4zLC0xOC44IC0xNSwtMjAuMyAwLC01IDAuNCwtNi40IC0wLjksLTEwLjkgLTAuOSwtMi44IC0yLjYsLTYuNCAtNC4zLC04LjMgLTUuMSwtNS4zIC03LjUsLTcgLTE1LjksLTkgdiAxIGwgLTRlLTQsMCB6IG0gLTE1LjgsMjIuNiAyLjgsNC44IGMgMywtMS42IDQuOCwtMy4zIDkuNSwtMy4zIGggMC41IGMgNS44LDAgNi45LDIuNiA5LjcsMy4yIGwgMi42LC00LjcgYyAtOS41LC01IC0xNS43LC01IC0yNS4xLDAgelwifV0saVtcIkFDLklDLlRPWElDIEdBU1wiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDkwLjIsMTAyLjMgYyAwLjYsLTEuOSA1LjcsLTEuOSAxMS4zLC0wIDUuNiwxLjkgOS42LDQuOSA5LDYuOCAtMC42LDEuOSAtNS43LDEuOSAtMTEuMywwIC01LjYsLTEuOSAtOS42LC00LjkgLTksLTYuOCB6IG0gNy43LC0yMi4yIGMgMTBlLTcsMy43IC0xLjcsNi43IC0zLjgsNi43IC0yLjEsLTJlLTYgLTMuOCwtMyAtMy44LC02LjcgMmUtNiwtMy43IDEuNywtNi43IDMuOCwtNi43IDIuMSwwIDMuOCwzIDMuOCw2LjcgeiBtIDE3LDIuMiBjIDAsNC4xIC0yLjgsNy4zIC02LjMsNy4zIC0zLjUsMmUtNiAtNi4zLC0zLjMgLTYuMywtNy4zIDAsLTQuMSAyLjgsLTcuMyA2LjMsLTcuMyAzLjUsMCA2LjMsMy4zIDYuMyw3LjMgeiBtIC03LjksNDkuNiBjIC0xLDIuOSAtOC41LDIuOSAtMTYuNiwwIC04LjIsLTIuOSAtMTMuOSwtNy42IC0xMi45LC0xMC41IDEsLTIuOSA4LjUsLTIuOSAxNi42LC0wIDguMiwyLjkgMTMuOSw3LjYgMTIuOSwxMC41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEwNy41IDY0LjMgQyAxMDIuMiA2NC4yIDk2LjkgNjcuMSA5Mi44IDcxLjYgQyA5MC42IDczLjYgODkuMiA3Ni44IDg5LjIgODAuNCBDIDg5LjIgODMgOTAgODUuNCA5MS4yIDg3LjMgQyA5Mi4xIDg5LjkgOTIuNyA5MS44IDkyLjcgOTQuNSBMIDkyLjQgOTYuNyBMIDkwLjcgMTAxLjYgQyA5Mi4zIDEwMC41IDk2LjcgMTAwLjcgMTAxLjUgMTAyLjMgQyAxMDYuNiAxMDQgMTEwLjQgMTA2LjcgMTEwLjUgMTA4LjYgTCAxMTIgMTA0LjIgQyAxMTUuOSAxMDQgMTIwLjUgOTYuOSAxMjIuNyA4Ny42IEMgMTI0LjkgNzcuOSAxMjMuNSA2OS4zIDExOS44IDY3LjkgQyAxMTguNCA2Ni42IDExNi4xIDY1LjUgMTEyLjggNjUuMyBDIDExMS4xIDY0LjYgMTA5LjMgNjQuMyAxMDcuNSA2NC4zIHogTSA5NC4xIDczLjQgQyA5NC40IDczLjQgOTQuNiA3My40IDk0LjggNzMuNSBDIDk1LjEgNzMuNiA5NS4zIDczLjggOTUuNiA3My45IEMgOTYuMiA3NC40IDk2LjggNzUuMyA5Ny4yIDc2LjMgQyA5Ny41IDc3LjEgOTcuNyA3Ny45IDk3LjggNzguNyBDIDk3LjkgNzkuMiA5Ny45IDc5LjYgOTcuOSA4MC4xIEMgOTcuOSA4MC41IDk3LjkgODEgOTcuOCA4MS40IEMgOTcuNyA4Mi4zIDk3LjUgODMuMSA5Ny4yIDgzLjggQyA5Ni45IDg0LjcgOTYuNCA4NS40IDk1LjkgODUuOSBDIDk1LjYgODYuMiA5NS4yIDg2LjUgOTQuOCA4Ni42IEMgOTQuNyA4Ni42IDk0LjYgODYuNyA5NC41IDg2LjcgQyA5NC4zIDg2LjcgOTQuMiA4Ni43IDk0LjEgODYuNyBDIDkzLjggODYuNyA5My42IDg2LjcgOTMuMyA4Ni42IEMgOTMgODYuNSA5Mi42IDg2LjIgOTIuMyA4NS45IEMgOTIuMiA4NS44IDkyLjEgODUuNyA5MiA4NS42IEMgOTEuNiA4NS4xIDkxLjIgODQuNSA5MSA4My44IEMgOTAuOCA4My40IDkwLjcgODMuMSA5MC42IDgyLjcgQyA5MC40IDgxLjkgOTAuMyA4MSA5MC4zIDgwLjEgQyA5MC4zIDc5LjEgOTAuNCA3OC4zIDkwLjYgNzcuNSBDIDkwLjcgNzcuMSA5MC44IDc2LjcgOTEgNzYuMyBDIDkxLjIgNzUuNiA5MS42IDc1IDkyIDc0LjUgQyA5Mi4yIDc0LjMgOTIuNCA3NC4xIDkyLjYgNzMuOSBDIDkyLjkgNzMuOCA5My4xIDczLjYgOTMuMyA3My41IEMgOTMuNiA3My40IDkzLjggNzMuNCA5NC4xIDczLjQgeiBNIDEwOC42IDc1IEMgMTEwLjQgNzUgMTEyLjEgNzUuOSAxMTMuMyA3Ny4zIEMgMTEzLjMgNzcuNCAxMTMuNCA3Ny41IDExMy41IDc3LjYgQyAxMTMuNSA3Ny42IDExMy41IDc3LjYgMTEzLjUgNzcuNyBDIDExMy42IDc3LjggMTEzLjcgNzggMTEzLjggNzguMiBDIDExMy44IDc4LjMgMTEzLjkgNzguMyAxMTMuOSA3OC40IEMgMTE0IDc4LjUgMTE0IDc4LjUgMTE0IDc4LjYgQyAxMTQuMSA3OC43IDExNC4yIDc4LjggMTE0LjIgNzkgQyAxMTQuMyA3OS4xIDExNC4zIDc5LjMgMTE0LjQgNzkuNCBDIDExNC40IDc5LjUgMTE0LjUgNzkuNSAxMTQuNSA3OS42IEMgMTE0LjUgNzkuNyAxMTQuNiA3OS45IDExNC42IDgwIEMgMTE0LjYgODAuMSAxMTQuNiA4MC4yIDExNC43IDgwLjMgQyAxMTQuNyA4MC40IDExNC43IDgwLjYgMTE0LjggODAuOCBDIDExNC45IDgxLjMgMTE0LjkgODEuOCAxMTQuOSA4Mi4zIEMgMTE0LjkgODQuNiAxMTQgODYuNiAxMTIuNiA4OCBDIDExMiA4OC42IDExMS4zIDg5IDExMC41IDg5LjMgQyAxMTAuMyA4OS40IDExMC4xIDg5LjUgMTA5LjkgODkuNSBDIDEwOS41IDg5LjYgMTA5IDg5LjcgMTA4LjYgODkuNyBDIDEwOC4yIDg5LjcgMTA3LjcgODkuNiAxMDcuMyA4OS41IEMgMTA3LjMgODkuNSAxMDcuMyA4OS41IDEwNy4zIDg5LjUgQyAxMDcuMSA4OS41IDEwNi45IDg5LjQgMTA2LjcgODkuMyBDIDEwNS45IDg5IDEwNS4yIDg4LjYgMTA0LjYgODggQyAxMDQgODcuNCAxMDMuNSA4Ni42IDEwMy4xIDg1LjggQyAxMDIuOSA4NS40IDEwMi43IDg1IDEwMi42IDg0LjUgQyAxMDIuNSA4NC4zIDEwMi41IDg0IDEwMi40IDgzLjggQyAxMDIuNCA4My41IDEwMi40IDgzLjMgMTAyLjMgODMuMSBDIDEwMi4zIDgyLjggMTAyLjMgODIuNiAxMDIuMyA4Mi4zIEMgMTAyLjMgODIgMTAyLjMgODEuOCAxMDIuMyA4MS41IEMgMTAyLjMgODEuNSAxMDIuNCA4MS41IDEwMi40IDgxLjQgQyAxMDIuNCA4MSAxMDIuNSA4MC41IDEwMi42IDgwLjEgQyAxMDIuNiA4MC4xIDEwMi42IDgwLjEgMTAyLjYgODAgQyAxMDMuNCA3Ny4xIDEwNS44IDc1IDEwOC42IDc1IHogTSA4OC44IDEwNCBDIDg2LjYgMTA0IDg0LjggMTA0LjQgODMuOSAxMDUuMiBMIDgzLjggMTA1LjIgTCA4My43IDEwNS4zIEMgODMuNCAxMDUuNiA4My4yIDEwNS45IDgzLjEgMTA2LjIgQyA4MyAxMDYuNSA4MyAxMDYuOCA4MyAxMDcuMiBMIDc4LjEgMTIwLjUgQyA4MC4yIDExOC41IDg2LjkgMTE4LjcgOTQuMiAxMjEuMyBDIDEwMS4yIDEyMy44IDEwNi40IDEyNy43IDEwNy4xIDEzMC42IEwgMTExLjggMTE3LjggQyAxMTIuMiAxMTcuNSAxMTIuNSAxMTcuMiAxMTIuNyAxMTYuOCBDIDExMy43IDExMy44IDEwNy45IDEwOS4xIDk5LjggMTA2LjIgQyA5NS43IDEwNC44IDkxLjggMTA0IDg4LjggMTA0IHogTSA4MiAxMjAuOCBDIDc5IDEyMC44IDc2LjkgMTIxLjUgNzYuNCAxMjMgQyA3NS40IDEyNS45IDgxLjEgMTMwLjcgODkuMyAxMzMuNiBDIDk3LjQgMTM2LjUgMTA0LjkgMTM2LjUgMTA1LjkgMTMzLjYgQyAxMDcgMTMwLjYgMTAxLjIgMTI1LjkgOTMgMTIzIEMgODkgMTIxLjUgODUgMTIwLjggODIgMTIwLjggeiBNIDg2LjEgMTI1LjYgQyA4Ny40IDEyNS41IDg5LjQgMTI1LjkgOTEuNSAxMjYuNiBDIDk0LjggMTI3LjggOTcuMiAxMjkuNiA5Ni45IDEzMC42IEMgOTYuNSAxMzEuNiA5My41IDEzMS41IDkwLjEgMTMwLjMgQyA4Ni44IDEyOS4xIDg0LjQgMTI3LjMgODQuNyAxMjYuMyBDIDg0LjkgMTI1LjkgODUuNCAxMjUuNyA4Ni4xIDEyNS42IHogXCJ9XSxpW1wiQUMuSUMuQUZURVJTSE9DS1wiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk5LDYyLjUgLTAsMCAtMCwwIC0wLjksMCAtMCwwIC0wLDAgLTAuOSwwLjEgLTAsMCAtMCwwIC0wLjksMC4xIC0wLDAgLTAsMCAtMC45LDAuMSAtMCwwIC0wLDAgLTAuOSwwLjEgLTAsMCAtMCwwIC0wLjksMC4xIC0wLDAgLTAsMCAtMC45LDAuMiAtMCwwIC0wLDAgLTAuNywwLjEgMC42LDIuNyAwLjcsLTAuMSAwLC0wIDAuOCwtMC4xIDAsLTAgMC44LC0wLjEgMCwwIDAuOCwtMC4xIDAsMCAwLjksLTAuMSAwLDAgMC45LC0wLjEgMCwwIDAuOSwtMC4xIDAsMCAwLjksLTAgMCwwIDAuOSwtMCAwLDAgMCwwIDAuOSwwIDAsMCAwLjksMCAwLDAgMC4xLDAgMC4yLC0yLjggLTAuMSwtMCAtMCwwIC0wLDAgLTAuOSwtMCAtMCwwIC0wLDAgLTEsLTAgLTAsMCAtMCwwIHogbSA4LjgsMy42IDAuMiwwIDAsMCAwLjgsMC4yIDAsMCAwLjgsMC4yIDAsMCAwLjgsMC4yIDAsMCAwLjgsMC4zIDAsMCAwLDAgMC44LDAuMyAwLDAgMC44LDAuMyAwLDAgMC44LDAuMyAwLDAgMC44LDAuMyAwLDAgMC44LDAuMyAwLDAgMC44LDAuNCAwLDAgMCwwIDAuNywwLjQgMCwwIDAuMSwwIDEuMywtMi41IC0wLjEsLTAuMSAtMCwtMCAtMCwwIC0wLjgsLTAuNCAtMCwtMCAtMCwwIC0wLjgsLTAuNCAtMCwwIC0wLC0wIC0wLjgsLTAuNCAtMCwtMCAtMCwwIC0wLjgsLTAuNCAtMCwwIC0wLC0wIC0wLjgsLTAuMyAtMCwtMCAtMCwwIC0wLjgsLTAuMyAtMCwtMCAtMCwwIC0wLjgsLTAuMyAtMCwwIC0wLC0wIC0wLjksLTAuMyAtMCwwIC0wLDAgLTAuOSwtMC4zIC0wLDAgLTAsMCAtMC45LC0wLjIgLTAsMCAtMCwtMCAtMC45LC0wLjIgLTAsMCAtMCwwIC0wLjIsLTAuMSB6IG0gLTIyLjcsLTAuNyAtMCwwIC0wLDAgLTAuOCwwLjQgLTAsMCAtMCwwIC0wLjgsMC40IC0wLDAgLTAsMCAtMC44LDAuNCAtMCwwIC0wLDAgLTAuOCwwLjQgLTAsMCAtMCwwIC0wLjgsMC40IC0wLDAgLTAsMCAtMC44LDAuNSAtMCwwIC0wLDAgLTAuOCwwLjUgLTAsMCAtMCwwIC0wLjcsMC41IC0wLDAgLTAsMCAtMC43LDAuNSAtMCwwIC0wLDAgLTAuNywwLjUgLTAsMCAtMCwwIC0wLjcsMC41IC0wLDAgLTAsMCAtMC4xLDAuMSAxLjcsMi4yIDAuMSwtMC4xIDAsLTAgMC43LC0wLjUgMCwtMCAwLjcsLTAuNSAwLC0wIDAuNywtMC41IDAsLTAgMC43LC0wLjUgMCwtMCAwLjcsLTAuNCAwLC0wIDAuNywtMC40IDAsLTAgMC43LC0wLjQgMCwtMCAwLjcsLTAuNCAwLC0wIDAsMCAwLjgsLTAuNCAwLC0wIDAuOCwtMC4zIDAsLTAgMC44LC0wLjMgMCwtMCAwLjMsLTAuMSAtMSwtMi42IHogbSAzNi45LDcuMyAwLjYsMC41IDAsMCAwLjYsMC41IDAsMCAwLjYsMC41IDAsMCAwLjYsMC41IDAsMCAwLjYsMC42IDAsMCAwLDAgMC42LDAuNiAwLDAgMC42LDAuNiAwLDAgMC41LDAuNiAwLDAgMC41LDAuNiAwLDAgMC41LDAuNiAwLDAgMC41LDAuNiAwLDAgMC40LDAuNSAyLjMsLTEuNyAtMC40LC0wLjYgLTAsLTAgMCwtMCAtMC42LC0wLjcgLTAsLTAgMCwtMCAtMC42LC0wLjcgLTAsLTAgLTAsLTAgLTAuNiwtMC43IC0wLC0wIC0wLC0wIC0wLjYsLTAuNyAtMCwtMCAtMCwtMCAtMC42LC0wLjYgLTAsLTAgLTAsLTAgLTAuNiwtMC42IC0wLC0wIC0wLC0wIC0wLjYsLTAuNiAtMCwtMCAtMCwwIC0wLjcsLTAuNiAtMCwtMCAtMCwwIC0wLjcsLTAuNiAtMCwtMCAtMCwtMCAtMC43LC0wLjYgLTAsLTAgLTAsLTAgLTAuNiwtMC41IHogbSAtNTEsMi43IC0wLDAgLTAsMCAtMC42LDAuNyAtMCwwIC0wLDAgLTAuNiwwLjcgMCwwIC0wLDAgLTAuNiwwLjcgMCwwIC0wLDAgLTAuNSwwLjcgLTAsMCAtMCwwIC0wLjUsMC43IC0wLDAgLTAsMCAtMC41LDAuNyAtMCwwIDAsMCAtMC41LDAuNyAtMCwwIDAsMCAtMC41LDAuOCAwLDAgLTAsMCAtMC40LDAuOCAtMCwwIDAsMCAtMC40LDAuOCAwLDAgLTAsMCAtMC4zLDAuNiAyLjUsMS4zIDAuMywtMC42IDAsLTAgMC40LC0wLjcgMCwtMCAwLjQsLTAuNyAwLC0wIDAuNCwtMC43IDAsLTAgMC40LC0wLjcgMCwtMCAwLjUsLTAuNyAwLC0wIDAuNSwtMC43IDAsLTAgMC41LC0wLjcgMCwtMCAwLjUsLTAuNiAwLC0wIDAuNSwtMC42IDAsLTAgMC41LC0wLjYgMCwtMCAwLjUsLTAuNSAtMi4xLC0xLjkgeiBtIDYwLjksOS40IDAuMSwwLjEgMCwwIDAsMCAwLjMsMC43IDAsMCAwLjMsMC43IDAsMCAwLjMsMC44IDAsMCAwLjMsMC44IDAsMCAwLjMsMC44IDAsMCAwLDAgMC4zLDAuOCAwLDAgMC4yLDAuOCAwLDAgMC4yLDAuOCAwLDAgMC4yLDAuOCAwLDAgMC4yLDAuOCAwLDAgMC4yLDAuOCAwLDAgMCwwLjIgMi44LC0wLjUgLTAsLTAuMyAtMCwtMCAwLC0wIC0wLjIsLTAuOSAwLC0wIDAsLTAgLTAuMiwtMC45IDAsLTAgLTAsLTAgLTAuMiwtMC45IDAsLTAgLTAsLTAgLTAuMiwtMC45IDAsLTAgLTAsLTAgLTAuMywtMC44IC0wLC0wIDAsLTAgLTAuMywtMC44IDAsLTAgLTAsLTAgLTAuMywtMC44IDAsLTAgLTAsLTAgLTAuMywtMC44IC0wLC0wIDAsLTAgLTAuMywtMC44IDAsLTAgLTAsLTAgLTAuMywtMC44IC0wLC0wIC0wLC0wIC0wLjQsLTAuOCAtMCwtMCAwLC0wIC0wLjEsLTAuMiB6IG0gLTY4LjgsNC45IC0wLDAgMCwwIC0wLjIsMC45IC0wLDAgMCwwIC0wLjIsMC45IC0wLDAgMCwwIC0wLjIsMC45IDAsMCAwLDAgLTAuMiwwLjkgMCwwIC0wLDAgLTAuMSwwLjkgMCwwIDAsMCAtMC4xLDAuOSAtMCwwIDAsMCAtMC4xLDAuOSAwLDAgLTAsMCAtMC4xLDAuOSAwLDAgMCwwIC0wLjEsMC45IDAsMCAwLDAgLTAsMC45IDAsMCAwLDAgLTAsMC45IDAsMCAwLDAgMCwwIDEuNCwtMCAwLjMsMCAxLjEsMCAwLC0wIDAsLTAuOSAwLC0wIDAsLTAuOSAtMCwwIDAuMSwtMC44IDAsLTAgMC4xLC0wLjkgLTAsMCAwLjEsLTAuOSAwLjEsLTAuOSAtMCwwIDAuMSwtMC44IDAsLTAgMC4yLC0wLjggMCwtMCAwLjIsLTAuOCAwLC0wIDAuMiwtMC44IDAsLTAgMC4yLC0wLjggMCwtMCAwLjEsLTAuMiAtMi43LC0wLjggeiBtIDczLDEwLjMgLTAuNiwwIDAsMCAwLDAgLTAsMC45IDAsMCAtMCwwLjkgMCwwIC0wLjEsMC44IDAsMCAtMC4xLDAuOSAwLDAgLTAuMSwwLjkgLTAuMSwwLjkgMCwwIC0wLjEsMC44IDAsMCAtMC4yLDAuOCAtMCwwIC0wLjIsMC44IC0wLDAgLTAuMiwwLjggMCwwIC0wLjIsMC44IC0wLDAgLTAuMSwwLjIgMi43LDAuOCAwLjEsLTAuMiAwLC0wIDAsLTAgMC4yLC0wLjkgMCwtMCAwLC0wIDAuMiwtMC45IDAsLTAgMCwtMCAwLjIsLTAuOSAwLC0wIDAsLTAgMC4yLC0wLjkgMCwtMCAwLC0wIDAuMSwtMC45IDAsLTAgMCwtMCAwLjEsLTAuOSAwLC0wIDAsLTAgMC4xLC0wLjkgMCwtMCAwLC0wIDAuMSwtMC45IDAsLTAgMCwtMCAwLjEsLTAuOSAwLC0wIDAsLTAgMCwtMC45IDAsLTAgMCwtMCAwLC0wLjkgLTEuNCwtMCAxLjQsLTAgMCwtMCB6IG0gLTczLjksNi40IDAsMC4zIDAsMCAwLDAgMC4yLDAuOSAwLDAgMCwwIDAuMiwwLjkgMCwwIDAsMCAwLjIsMC45IDAsMCAwLDAgMC4yLDAuOSAwLDAgMCwwIDAuMywwLjggMCwwIDAsMCAwLjMsMC44IDAsMCAwLDAgMC4zLDAuOCAwLDAgMCwwIDAuMywwLjggMCwwIDAsMCAwLjMsMC44IDAsMCAwLDAgMC4zLDAuOCAwLDAgMCwwIDAuNCwwLjggMCwwIDAsMCAwLjEsMC4yIDIuNSwtMS4zIC0wLjEsLTAuMSAtMCwtMCAtMC4zLC0wLjcgLTAsLTAgLTAuMywtMC43IC0wLC0wIC0wLjMsLTAuOCAtMCwtMCAtMC4zLC0wLjggLTAsLTAgLTAuMywtMC44IC0wLC0wIDAsLTAgLTAuMywtMC44IC0wLC0wIC0wLjIsLTAuOCAtMCwtMCAtMC4yLC0wLjggMCwtMCAtMC4yLC0wLjggLTAsLTAgLTAuMiwtMC44IC0wLC0wIC0wLjIsLTAuOCAwLC0wIC0wLC0wLjIgeiBtIDY5LjQsOS40IC0wLDAgLTAuNCwwLjcgLTAsMCAtMC40LDAuNyAtMCwwIC0wLjQsMC43IC0wLDAgLTAuNCwwLjcgLTAsMCAtMC41LDAuNyAtMCwwIC0wLjUsMC43IC0wLDAgLTAuNSwwLjcgLTAsMCAtMC41LDAuNiAtMCwwIC0wLjUsMC42IC0wLDAgLTAuNSwwLjYgLTAsMCAtMC41LDAuNiAyLjEsMS45IDAuNSwtMC42IDAsLTAgMCwtMCAwLjYsLTAuNyAwLC0wIDAsLTAgMC42LC0wLjcgMCwtMCAwLC0wIDAuNiwtMC43IDAsLTAgMCwtMCAwLjUsLTAuNyAwLC0wIDAsLTAgMC41LC0wLjcgMCwtMCAwLC0wIDAuNSwtMC43IDAsLTAgMCwtMCAwLjUsLTAuNyAwLC0wIDAsLTAgMC41LC0wLjggMCwtMCAwLC0wIDAuNCwtMC44IDAsLTAgMCwtMCAwLjQsLTAuOCAwLC0wIDAsLTAgMC4zLC0wLjYgLTIuNSwtMS4zIHogbSAtNjIuOCw2LjEgMC40LDAuNiAwLDAgMCwwIDAuNiwwLjcgMCwwIDAsMCAwLjYsMC43IDAsMCAwLDAgMC42LDAuNyAwLDAgMCwwIDAuNiwwLjcgMCwwIDAsMCAwLjYsMC42IDAsMCAwLDAgMC42LDAuNiAwLDAgMCwwIDAuNiwwLjYgMCwwIDAsMCAwLjcsMC42IDAsMCAwLDAgMC43LDAuNiAwLDAgMCwwIDAuNywwLjYgMCwwIDAsMCAwLjYsMC41IDEuNywtMi4yIC0wLjYsLTAuNSAtMCwtMCAtMC42LC0wLjUgLTAsLTAgLTAuNiwtMC41IC0wLC0wIC0wLjYsLTAuNSAtMCwtMCAtMC42LC0wLjYgLTAsLTAgLTAsLTAgLTAuNiwtMC42IC0wLC0wIC0wLjYsLTAuNiAtMCwtMCAtMC41LC0wLjYgLTAsLTAgLTAuNSwtMC42IC0wLC0wIC0wLjUsLTAuNiAtMCwtMCAtMC41LC0wLjYgLTAsLTAgLTAuNCwtMC41IHogbSA1My4xLDUuNCAtMCwwIC0wLjcsMC41IC0wLDAgLTAuNywwLjUgLTAsMCAtMC43LDAuNSAtMCwwIC0wLjcsMC41IC0wLDAgLTAuNywwLjQgLTAsMCAtMC43LDAuNCAtMCwwIC0wLjcsMC40IC0wLDAgLTAuNywwLjQgLTAsMCAtMCwwIC0wLjgsMC40IC0wLDAgLTAuOCwwLjMgLTAsMCAtMC44LDAuMyAtMCwwIC0wLjMsMC4xIDEsMi42IDAuNCwtMC4xIDAsLTAgMCwwIDAuOCwtMC40IDAsMCAwLC0wIDAuOCwtMC40IDAsLTAgMCwwIDAuOCwtMC40IDAsMCAwLC0wIDAuOCwtMC40IDAsMCAwLC0wIDAuOCwtMC40IDAsLTAgMCwwIDAuOCwtMC41IDAsMCAwLC0wIDAuOCwtMC41IDAsLTAgMCwwIDAuNywtMC41IDAsMCAwLC0wIDAuNywtMC41IDAsLTAgMCwwIDAuNywtMC41IDAsLTAgMCwtMCAwLjcsLTAuNSAwLC0wIDAsLTAgMC4xLC0wLjEgLTEuNywtMi4yIHogbSAtNDAuNCw1LjYgMC4xLDAuMSAwLDAgMCwwIDAuOCwwLjQgMCwwIDAsMCAwLjgsMC40IDAsMCAwLDAgMC44LDAuNCAwLDAgMCwwIDAuOCwwLjQgMCwwIDAsMCAwLjgsMC4zIDAsMCAwLDAgMC44LDAuMyAwLDAgMCwwIDAuOCwwLjMgMCwwIDAsMCAwLjksMC4zIDAsMCAwLDAgMC45LDAuMyAwLDAgMCwwIDAuOSwwLjIgMCwwIDAsMCAwLjksMC4yIDAsMCAwLDAgMC4yLDAuMSAwLjYsLTIuNyAtMC4yLC0wIC0wLC0wIC0wLjgsLTAuMiAtMCwtMCAtMC44LC0wLjIgLTAsLTAgLTAuOCwtMC4yIC0wLC0wIC0wLjgsLTAuMyAtMCwtMCAtMCwwIC0wLjgsLTAuMyAwLC0wIC0wLjgsLTAuMyAtMCwtMCAtMC44LC0wLjMgLTAsLTAgLTAuOCwtMC4zIC0wLC0wIC0wLjgsLTAuMyAtMCwtMCAtMC44LC0wLjQgLTAsMCAtMCwtMCAtMC43LC0wLjQgLTAsLTAgLTAuMSwtMCB6IG0gMjUuNiwxLjEgLTAsMCAtMC44LDAuMSAtMCwwIC0wLjgsMC4xIC0wLDAgLTAuOCwwLjEgMCwtMCAtMC45LDAuMSAwLC0wIC0wLjksMC4xIC0wLDAgLTAuOSwwLjEgLTAsMCAtMC45LDAgLTAsMCAtMC45LDAgLTAsMCAtMCwwIC0wLjksLTAgLTAsMCAtMC45LC0wIC0wLDAgLTAuMSwwIC0wLjIsMi44IDAuMSwwIDAsMCAwLDAgMC45LDAgMCwwIDAsMCAxLDAgMCwwIDAsMCAxLC0wIDAsMCAwLDAgMC45LC0wIDAsMCAwLDAgMC45LC0wLjEgMCwwIDAsMCAwLjksLTAuMSAwLC0wIDAsMCAwLjksLTAuMSAwLDAgMCwwIDAuOSwtMC4xIDAsLTAgMCwwIDAuOSwtMC4xIDAsMCAwLDAgMC45LC0wLjIgMCwwIDAsMCAwLjcsLTAuMSAtMC42LC0yLjcgeiBtIC03LjIsLTU4LjkgLTAsMS4yIDAuMSwwIDAsMCAxLjMsMCAwLC0wIDEuMywwLjEgMS4xLDAuMSAwLjEsMCAwLDAgMS4xLDAuMiAwLjEsMCAwLjcsMC4xIDAuNywtMy4xIC0wLjcsLTAuMiAtMCwwIC0wLC0wIC0xLjMsLTAuMiAtMCwwIC0wLC0wIC0xLjMsLTAuMiAtMCwwIC0wLDAgLTEuMywtMC4xIC0wLDAgLTAuMSwwIC0xLjMsLTAgLTAsMCAtMCwwIC0wLDAgeiBtIC01LjUsLTEuNCAtMCwwIC0wLDAgLTEuMywwLjMgLTAsMCAtMCwwIC0xLjIsMC4zIC0wLDAgLTAsMCAtMS4yLDAuNCAtMCwwIC0wLDAgLTAuOSwwLjMgMS4xLDMgMC44LC0wLjMgMC4xLC0wIDAsMCAxLjEsLTAuNCAwLC0wIDEuMSwtMC4zIDEuMiwtMC4zIDAuMSwtMCAxLjEsLTAuMiAtMC42LC0zLjEgeiBtIDE0LjgsNC40IDAuMiwwLjEgMC4xLDAgMS4xLDAuNSAxLDAuNSAwLjEsMCAxLDAuNSAwLDAgMCwwIDAuOSwwLjYgMC4xLDAgMC41LDAuNCAxLjgsLTIuNiAtMC42LC0wLjQgLTAsLTAgLTAsLTAgLTEuMSwtMC43IC0wLC0wIC0wLC0wIC0xLjEsLTAuNiAtMCwtMCAtMCwtMCAtMS4xLC0wLjYgLTAsLTAgLTAsLTAgLTEuMSwtMC41IC0wLC0wIC0wLC0wIC0wLjMsLTAuMSB6IG0gLTIzLjYsLTEuMSAtMCwwIC0wLDAgLTEuMSwwLjcgLTAsMCAtMCwwIC0xLDAuNyAtMCwwIC0wLDAgLTEsMC44IC0wLDAgLTAsMCAtMC45LDAuOCAtMCwwIC0wLDAgLTAuOCwwLjcgMi4yLDIuNCAwLjcsLTAuNyAwLjEsLTAuMSAwLjgsLTAuNyAwLC0wIDAsLTAgMC45LC0wLjcgMC4xLC0wIDAuOSwtMC42IDAuMSwtMCAwLjksLTAuNiAwLC0wIDAsLTAgLTAuNCwtMC42IC0xLjIsLTIuMiB6IG0gMzEuNSw2LjIgMC4xLDAuMSAwLDAgMCwwIDAuOCwwLjggMC4xLDAuMSAwLjcsMC44IDAuMSwwLjEgMC43LDAuOCAwLDAgMCwwLjEgMC42LDAuOSAwLDAuMSAwLDAgMC41LDAuNyAyLjcsLTEuOCAtMC41LC0wLjggLTAsLTAgLTAsLTAgLTAuNywtMSAtMCwtMCAtMCwtMCAtMC44LC0wLjkgLTAsLTAgLTAsLTAgLTAuOCwtMC45IC0wLC0wIC0wLC0wIC0wLjksLTAuOSAtMCwtMCAtMCwtMCAtMC4xLC0wLjEgeiBtIC00MC4xLDEuOCAtMCwwIC0wLDAgLTAuNywxIC0wLDAgLTAsMCAtMC42LDEuMSAtMCwwIC0wLDAgLTAuNiwxLjEgLTAsMCAtMCwwIC0wLjUsMS4xIC0wLDAgLTAsMCAtMCwwLjEgMi40LDEgMC41LDAuMyAwLC0wIDAuNSwtMSAwLC0wLjEgMCwtMCAwLjUsLTAuOSAwLC0wLjEgMC42LC0wLjkgMC42LC0xIDAsLTAgMCwtMC4xIDAuNiwtMC44IC0yLjYsLTEuOSB6IG0gNDUuNCw1LjkgMC40LDEuMSAwLDAuMSAwLjMsMSAwLDAuMSAwLjMsMS4xIDAuMywxLjEgMC4yLDEgMy4xLC0wLjYgLTAuMiwtMS4xIDAsLTAgLTAsLTAgLTAuMywtMS4yIC0wLC0wIC0wLC0wLjEgLTAuMywtMS4yIC0wLC0wIC0wLC0wIC0wLjQsLTEuMiAtMCwtMCAtMCwtMCAtMC41LC0xLjEgeiBtIC00OS42LDMuOCAtMCwwIDAsMCAtMC4yLDEuMyAwLDAgLTAsMCAtMC4yLDEuMyAtMCwwIDAsMCAtMC4xLDEuMyAwLDAgMCwwLjEgLTAsMS4zIDAsMCAwLDAgMCwwIDEuOSwtMCAxLjMsMCAwLC0wLjEgMCwtMCAwLC0xLjIgMC4xLC0xLjEgMCwwIDAuMSwtMS4yIDAsLTAuMSAwLC0wIDAuMiwtMS4xIDAuMiwtMC45IC0zLjEsLTAuNyB6IG0gNTIuOCw1LjUgLTEuMiwtMCAwLDAuMSAwLDAgLTAsMS4yIC0wLjEsMS4xIC0wLDAgLTAuMSwxLjIgMCwwIC0wLDAuMSAtMC4yLDEuMSAtMC4yLDAuOSAzLjEsMC44IDAuMiwtMC45IDAsLTAgMCwtMCAwLjIsLTEuMyAwLC0wIDAsLTAgMC4yLC0xLjMgMCwtMCAwLC0wIDAuMSwtMS4zIDAsLTAgMCwtMC4xIDAsLTEuMyAtMS42LC0wIDEuNiwtMCAwLC0wIHogbSAtNTMsNC4zIDAuMiwxLjEgMCwwIDAsMCAwLjMsMS4yIDAsMCAwLDAuMSAwLjMsMS4yIDAsMCAwLDAgMC40LDEuMiAwLDAgMCwwIDAuNSwxLjEgMywtMS4yIC0wLjQsLTEgLTAsLTAuMSAtMC4zLC0xIC0wLC0wLjEgLTAuMywtMS4xIC0wLjMsLTEuMSAtMC4yLC0xIHogbSA0OS45LDQuOSAtMC41LDEgLTAsMC4xIC0wLDAgLTAuNSwxIC0wLDAuMSAtMC42LDAuOSAtMC42LDEgLTAsMCAtMCwwLjEgLTAuNiwwLjggMi42LDEuOSAwLjYsLTAuOSAwLC0wIDAsLTAgMC43LC0xIDAsLTAgMCwtMCAwLjYsLTEuMSAwLC0wIDAsLTAgMC42LC0xLjEgMCwtMCAwLC0wIDAuNSwtMS4xIDAsLTAgMCwtMCAwLC0wIC0yLjIsLTAuOSAtMC44LC0wLjMgeiBtIC00Niw1IDAuNSwwLjggMCwwIDAsMCAwLjcsMSAwLDAgMCwwIDAuOCwwLjkgMCwwIDAsMCAwLjgsMC45IDAsMCAwLDAgMC45LDAuOSAwLDAgMCwwIDAuMSwwLjEgMi4yLC0yLjMgLTAuMSwtMC4xIC0wLC0wIC0wLC0wIC0wLjgsLTAuOCAtMC4xLC0wLjEgLTAuNywtMC44IC0wLjEsLTAuMSAtMC43LC0wLjggLTAsLTAgLTAsLTAuMSAtMC42LC0wLjkgLTAuMSwtMC4xIC0wLjUsLTAuNyB6IG0gNDAsMy4zIC0wLjEsMC4xIC0wLjgsMC43IC0wLDAgLTAsMCAtMC45LDAuNyAtMC4xLDAgLTAuOSwwLjYgLTAuMSwwIC0wLjksMC42IDAsLTAgLTAuMSwwIDAsMCAtMCwwIDAuMywwLjQgMS4zLDIuNCAwLC0wIDAsLTAgMCwtMCAxLjEsLTAuNyAwLC0wIDAsLTAgMSwtMC43IDAsLTAgMCwtMCAxLC0wLjggMCwtMCAwLC0wIDAuOSwtMC44IDAsLTAgMCwtMCAwLjgsLTAuNyAtMi4yLC0yLjQgeiBtIC0zMi42LDQuNCAwLjYsMC40IDAsMCAwLDAgMS4xLDAuNyAwLDAgMCwwIDEuMSwwLjYgMCwwIDAsMCAxLjEsMC42IDAsMCAwLDAgMS4xLDAuNSAwLDAgMCwwIDAuMywwLjEgMS4xLC0zIC0wLjIsLTAuMSAtMC4xLC0wIC0xLjEsLTAuNSAtMSwtMC41IC0wLjEsLTAgLTEsLTAuNiAwLDAgLTAuOSwtMC42IC0wLjEsLTAgLTAuNSwtMC40IHogbSAyNC41LDAuMyAtMC4xLDAgLTEuMSwwLjMgLTAuMSwwIC0xLjEsMC4zIC0xLjIsMC4zIC0wLjEsMCAtMS4xLDAuMiAwLjYsMy4xIDEuMiwtMC4yIDAsMCAwLC0wIDEuMywtMC4zIDAsMCAwLC0wIDEuMiwtMC4zIDAsLTAgMCwtMCAxLjIsLTAuNCAwLC0wIDAsLTAgMC45LC0wLjMgLTEuMSwtMyB6IG0gLTE0LjgsMy45IDAuNywwLjIgMCwwIDAsMCAxLjMsMC4yIDAsMCAwLDAgMS4zLDAuMiAwLDAgMCwwIDEuMywwLjEgMCwwIDAuMSwwIDEuMywwIDAsMCAwLDAgMCwwIC0wLjEsLTEuNiAwLC0wLjEgMCwtMS41IC0wLjEsMCAtMS4zLC0wIDAsMCAtMS4zLC0wLjEgLTEuMSwtMC4xIC0wLjEsLTAgLTAsMCAtMS4xLC0wLjIgLTAuMSwtMCAtMC43LC0wLjEgeiBtIDYuMywtNDMuMSAtMC40LDAgMC4xLDQgMC4zLC0wIDAuMSwwIDAuMSwwIDAuNiwwIDAuMSwwIDAuNiwwIDAuMSwwIDAuNiwwLjEgMC4xLDAgMC42LDAuMSAwLjcsMC4xIDAuMSwwIDAuMSwwIDAuNiwwLjIgMC41LDAuMiAwLjEsMCAwLjUsMC4yIDAuMSwwIDAsMCAwLjUsMC4yIDAuMSwwIDAuNCwwLjIgMS44LC0zLjYgLTAuNSwtMC4zIC0wLC0wIC0wLjEsLTAgLTAuNywtMC4zIC0wLjEsLTAgLTAuMSwtMCAtMC43LC0wLjMgLTAsLTAgLTAuMSwtMCAtMC43LC0wLjIgLTAuMSwtMCAtMCwtMCAtMC43LC0wLjIgLTAuMSwtMCAtMC4xLC0wIC0wLjcsLTAuMiAtMC4xLC0wIC0wLjEsLTAgLTAuOCwtMC4xIC0wLC0wIC0wLjEsLTAgLTAuOCwtMC4xIC0wLjEsLTAgLTAuMSwwIC0wLjgsLTAuMSAtMC4xLDAgLTAuMSwwIC0wLjgsLTAgLTAuMSwtMCB6IG0gLTUuMSwwLjcgLTAuMSwwIC0wLDAgLTAuNywwLjIgLTAuMSwwIC0wLjEsMCAtMC43LDAuMyAtMCwwIC0wLjEsMCAtMC43LDAuMyAtMC4xLDAgLTAsMCAtMC43LDAuMyAtMCwwIC0wLDAgLTAuNywwLjQgLTAsMCAtMC4xLDAgLTAuNiwwLjQgLTAsMCAtMCwwIC0wLjYsMC40IC0wLDAgLTAsMCAtMC42LDAuNCAtMCwwIC0wLDAgLTAuNiwwLjUgLTAsMCAtMCwwIC0wLjUsMC41IC0wLDAgLTAsMCAtMC4yLDAuMiAyLjksMi44IDAuMSwtMC4xIDAuMSwtMC4xIDAuNCwtMC40IDAuMSwtMC4xIDAuNCwtMC4zIDAsLTAgMC4xLC0wLjEgMC40LC0wLjMgMC41LC0wLjQgMC4xLC0wLjEgMC42LC0wLjMgMCwtMCAwLjUsLTAuMyAwLjEsLTAgMC41LC0wLjMgMC4xLC0wIDAuNSwtMC4yIDAsMCAwLjEsLTAgMC42LC0wLjIgMCwtMCAwLjUsLTAuMiAwLjEsLTAgMC4xLC0wIC0xLjEsLTMuOSB6IG0gMTQuMiw2LjcgMC40LDAuMyAwLjUsMC41IDAuMSwwLjEgMC4zLDAuNCAwLjEsMC4xIDAuMywwLjQgMC4xLDAuMSAwLjMsMC40IDAsMCAwLDAuMSAwLjMsMC40IDAuMSwwLjEgMC4zLDAuNSAwLDAgMCwwLjEgMC4zLDAuNSAwLDAuMSAwLjIsMC41IDAsMC4xIDAuMiwwLjUgMCwwLjEgMCwwIDAuMiwwLjYgMy44LC0xLjMgLTAuMiwtMC43IC0wLC0wLjEgLTAsLTAuMSAtMC4zLC0wLjcgLTAsLTAuMSAtMCwtMCAtMC4zLC0wLjcgLTAsLTAuMSAtMCwtMCAtMC4zLC0wLjcgLTAsLTAuMSAtMCwtMCAtMC40LC0wLjYgLTAsLTAgLTAsLTAuMSAtMC40LC0wLjYgLTAsLTAgLTAsLTAuMSAtMC40LC0wLjYgLTAsLTAuMSAtMCwtMCAtMC41LC0wLjYgLTAsLTAgLTAsLTAgLTAuNSwtMC41IC0wLC0wIC0wLC0wIC0wLjUsLTAuNSAtMCwtMCAtMCwtMCAtMC41LC0wLjQgeiBtIC0yNC40LDEuNCAtMCwwIC0wLDAuMSAtMC4zLDAuNyAtMCwwIC0wLDAuMSAtMC4zLDAuNyAtMCwwIC0wLDAuMSAtMC4zLDAuNyAtMCwwLjEgLTAsMC4xIC0wLjIsMC43IC0wLDAuMSAtMCwwLjEgLTAuMiwwLjcgLTAsMC4xIDAsMC4xIC0wLjIsMC43IC0wLDAuMSAtMCwwLjEgLTAuMSwwLjcgLTAsMC4xIDAsMC4xIC0wLjEsMC44IDAsMC4xIC0wLDAuMSAtMC4xLDAuOCAwLDAuMSAwLDAuMSAtMCwwLjggMCwwLjEgMCwwLjEgMCwwLjMgNCwtMC4xIC0wLC0wLjIgMCwtMC4xIDAsLTAgMCwtMC43IDAsLTAuNiAwLC0wLjEgMCwtMCAwLjEsLTAuNSAwLjEsLTAuNiAwLC0wLjEgMC4xLC0wLjUgMCwtMCAwLC0wLjEgMC4xLC0wLjUgMC4yLC0wLjYgMCwtMC4xIDAsLTAgMC4yLC0wLjUgMC4zLC0wLjYgMC4xLC0wLjEgMC4zLC0wLjUgMCwtMC4xIDAsLTAgMCwtMCAtMy41LC0yIHogbSAyOC43LDcuNiAwLDAuNSAwLDAuMSAwLDAgLTAsMC42IC0wLjEsMC43IC0wLDAuMSAwLDAuMSAtMC4xLDAuNiAtMC4xLDAuNSAtMCwwLjEgLTAuMSwwLjUgMCwwIC0wLDAuMSAtMC4xLDAuNSAtMCwwLjEgLTAuMiwwLjUgLTAsMCAtMCwwLjEgLTAuMiwwLjUgLTAsMCAtMCwwLjEgLTAuMiwwLjUgLTAsMC4xIC0wLjMsMC41IC0wLDAuMSAtMCwwIC0wLjIsMC4zIDMuNSwyIDAuMiwtMC40IDAsLTAuMSAwLC0wIDAuMywtMC43IDAsLTAgMCwtMC4xIDAuMywtMC43IDAsLTAgMCwtMC4xIDAuMywtMC43IDAsLTAuMSAwLC0wLjEgMC4yLC0wLjcgMCwtMCAwLC0wLjEgMC4yLC0wLjcgMCwtMC4xIDAsLTAuMSAwLjIsLTAuNyAwLC0wLjEgMCwtMC4xIDAuMSwtMC43IDAsLTAuMSAwLC0wLjEgMC4xLC0wLjggMCwtMC4xIDAsLTAuMSAwLjEsLTAuOCAwLC0wLjEgMCwtMC4xIDAsLTAuOCAtMiwtMC4xIDIsLTAuMSAtMCwtMC42IHogbSAtMzAuMSw1LjMgMC4xLDAuMyAwLDAuMSAwLDAgMC4yLDAuNyAwLDAuMSAwLDAuMSAwLjMsMC43IDAsMC4xIDAsMCAwLjMsMC43IDAsMC4xIDAsMCAwLjMsMC43IDAsMCAwLDAuMSAwLjQsMC42IDAsMCAwLDAuMSAwLjQsMC42IDAsMCAwLDAgMC40LDAuNiAwLDAgMCwwIDAuNSwwLjYgMCwwIDAsMCAwLjUsMC41IDAsMCAwLDAgMC41LDAuNSAwLDAgMCwwIDAuMiwwLjIgMi43LC0yLjkgLTAuMiwtMC4xIC0wLjEsLTAuMSAtMCwtMCAtMC40LC0wLjQgLTAuMSwtMC4xIC0wLjQsLTAuNCAtMCwtMC4xIC0wLC0wIC0wLjMsLTAuNCAtMC4xLC0wLjEgLTAuNCwtMC41IC0wLjMsLTAuNCAtMC4xLC0wLjEgLTAuMywtMC41IC0wLC0wIC0wLC0wLjEgLTAuMywtMC41IC0wLjEsLTAuMSAtMC4yLC0wLjUgLTAsLTAuMSAtMCwtMCAtMC4yLC0wLjUgLTAsLTAuMSAtMCwtMC4xIC0wLjIsLTAuNiAtMCwtMC4xIHogbSAyNS44LDQuOCAtMC4xLDAuMSAtMC40LDAuMyAtMCwwIC0wLjEsMC4xIC0wLjQsMC4zIC0wLjEsMC4xIC0wLjUsMC4zIC0wLDAgLTAuMSwwIC0wLjUsMC4zIC0wLjEsMCAtMCwwIC0wLjYsMC4zIC0wLjUsMC4zIC0wLjEsMCAtMC41LDAuMiAtMCwwIC0wLjEsMCAtMC41LDAuMiAtMC4xLDAgLTAuNSwwLjIgLTAuNSwwLjEgMS4xLDMuOSAwLjUsLTAuMSAwLC0wIDAuMSwtMCAwLjcsLTAuMiAwLjEsLTAgMCwtMCAwLjcsLTAuMyAwLjEsLTAgMC4xLC0wIDAuNywtMC4zIDAuMSwtMCAwLC0wIDAuNywtMC4zIDAuMSwtMCAwLC0wIDAuNywtMC40IDAsLTAgMCwtMCAwLjYsLTAuNCAwLC0wIDAuMSwtMCAwLjYsLTAuNCAwLC0wIDAsLTAgMC42LC0wLjUgMCwtMCAwLC0wIDAuNiwtMC41IDAsLTAgMCwtMCAwLjUsLTAuNSAtMi43LC0yLjkgeiBtIC0xNS41LDEuOCAtMS45LDMuNSAwLjEsMC4xIDAsMCAwLDAgMC43LDAuMyAwLDAgMC4xLDAgMC43LDAuMyAwLjEsMCAwLDAgMC43LDAuMyAwLjEsMCAwLjEsMCAwLjcsMC4yIDAsMCAwLjEsMCAwLjcsMC4yIDAsMCAwLjEsMCAwLjgsMC4yIDAuMSwwIDAuMSwwIDAuOCwwLjEgMC4xLDAgMC4xLDAgMC44LDAuMSAwLjEsMCAwLjEsMCAwLjgsMC4xIDAuMSwwIDAuMSwwIDAuOCwwIDAuMSwwIDAuMSwwIDAuMSwwIC0wLjEsLTQgLTAuMSwwIC0wLjEsMCAtMC42LC0wIC0wLjEsMCAtMC42LC0wIDAsLTAgLTAuNywtMC4xIC0wLDAgLTAuMSwtMCAtMC42LC0wLjEgLTAuMSwtMCAtMC42LC0wLjEgMCwtMCAtMC43LC0wLjIgLTAuNSwtMC4yIDAsLTAgLTAuNiwtMC4yIC0wLjEsLTAgLTAsMCAtMC41LC0wLjIgLTAuMSwtMCAtMC41LC0wLjMgLTAuMSwtMC4xIHogTSAxMDAsOTMuMiBjIC0zLjUsLTRlLTQgLTYuNywyLjkgLTYuNyw2LjUgbCAwLDAuNCBjIDAsMy41IDMsNi41IDYuNSw2LjUgbCAwLjQsMCBjIDMuNCwwIDYuNSwtMyA2LjUsLTYuMyBsIDAsLTAuOSBjIDAsLTMuNCAtMy4zLC02LjMgLTYuOCwtNi4zIHpcIn1dLGlbXCJBQy5JQy5BVkFMQU5DSEVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMTUuNyw4Ny4zIC0zLjYsMC45IDExLDM4IC00LjYsMS41IDkuNiw5LjIgMy4xLC0xMyAtNC42LDEuNCB6IG0gMyw0Ni40IC04LjUsLTEwIDQuMywtMS4yIC0xMS4yLC00MC42IC0zNC41LDUxLjkgeiBtIC0xMi4xLC01OS44IDAsOC40IDEuNiwwIDAsLTguMyA3LjEsNC4zIDAuOCwtMS4zIC03LjQsLTQuMSA3LjUsLTQuNCAtMSwtMS4yIC03LDQgMCwtOC4yIC0xLjYsMCAwLDguMiAtNy40LC00IC0wLjYsMS4xIDcuMiw0LjQgLTcuMiw0LjEgMC42LDEuNCB6XCJ9XSxpW1wiQUMuSUMuRUFSVEhRVUFLRSBFUElDRU5URVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2Mi44LDk5LjggYyAwLC0xMC44IDQuOSwtMjAuMiAxMC4zLC0yNS43IDUuMSwtNS4xIDE0LjgsLTExLjMgMjQuNywtMTEuMyBoIDQuMSBjIDQuOSwwIDEwLjUsMS45IDEzLjksMy42IDUsMi41IDYuNCw0IDEwLjQsNyA0LjYsMy42IDExLjEsMTUuNCAxMS4xLDIzLjggdiA1LjMgYyAwLDE3LjQgLTE3LjUsMzQuNiAtMzUuMSwzNC42IGggLTQuNiBjIC0xMC4zLDAgLTE5LjQsLTYuMiAtMjQuNiwtMTEuNCAtNS41LC01LjQgLTEwLjMsLTE1IC0xMC4zLC0yNS44IHogbSAzOS40LDM4LjUgYyAxMC43LDAgMjAsLTYuMyAyNS41LC0xMS44IDYuNywtNi43IDkuOSwtMTMuOSAxMC43LC0yNi41IDEuMywtMTkuMiAtMTcuNywtMzguMSAtMzYuMiwtMzguMSBoIC00LjggYyAtMTAuMywwIC0yMC4xLDYuNiAtMjUuMiwxMi4xIC0zLDMuMiAtNS42LDYuNyAtNy41LDExLjEgLTEuMSwyLjggLTMuNSwxMS4zIC0zLDE1LjMgMC43LDYuNCAwLjksMTAuNCAzLjQsMTUuMyAyLjIsNC40IDQsNy42IDcuMywxMSA1LDUuMyAxNS4yLDExLjcgMjUuMywxMS43IGggNC42IHogbSAtMy45LC0xMS42IGMgLTEzLjYsMCAtMjQuNywtMTMuMSAtMjUuMiwtMjYuOCAtMC41LC0xMy4yIDEyLjUsLTI2LjQgMjUuNCwtMjYuNCBoIDIuOSBjIDEyLjgsMCAyNS4yLDEyLjQgMjUuMiwyNS4yIHYgMi40IGMgMCwxMi44IC0xMi40LDI1LjcgLTI1LjIsMjUuNyBoIC0zLjEgdiAtMCB6IG0gLTI3LjEsLTI2LjkgYyAwLDguOCAzLjcsMTYgOC4xLDIwLjUgMi4zLDIuNCA1LjIsNC40IDguMyw1LjkgNC4yLDIuMiA2LjMsMS45IDExLjUsMi44IDIuOSwwLjUgMTAsLTEuMyAxMiwtMi4yIDQuNiwtMi4yIDUsLTIuOSA4LjYsLTUuNiA0LjMsLTMuMSA5LjEsLTEyLjMgOS4xLC0xOS43IHYgLTMuNCBjIDAsLTEzLjcgLTEzLjYsLTI2LjggLTI3LjMsLTI2LjggaCAtMy4yIGMgLTE0LjUsLTRlLTQgLTI3LjEsMTMuNiAtMjcuMSwyOC41IHogbSAyOC41LDE0LjggYyAtOC40LDAgLTEzLjUsLTYuNSAtMTQuNCwtMTQuNCAtMC43LC03LjMgNi44LC0xNC42IDEzLjksLTE0LjYgaCAxLjcgYyA3LjMsMCAxMy42LDYuOSAxMy42LDE0LjUgMCw3LjcgLTYuMiwxNC41IC0xMy44LDE0LjUgaCAtMSB6IG0gLTE4LjYsLTE0LjggYyAwLDExLjUgOCwxOC4xIDE4LjQsMTkuMyA2LjIsMC44IDEwLjMsLTIuOSAxMy42LC01LjMgMi44LC0yIDUuOCwtOC4zIDUuOCwtMTMuMyBWIDk5LjggYyAwLC0xMC40IC04LjMsLTE4LjYgLTE4LjYsLTE4LjYgaCAtMC43IGMgLTkuOSwwIC0xOC40LDguNiAtMTguNCwxOC42IHogbSAxMC45LDAgdiAwLjIgYyAwLDMuNyAzLjUsNy43IDcsNy43IGggMS43IGMgMy45LDAgNy4zLC0zLjkgNy4zLC03LjcgMCwtNCAtMy41LC04IC03LC04IGggLTEuNyBjIC0zLjUsMCAtNy4zLDQgLTcuMyw3LjcgelwifV0saVtcIkFDLklDLkxBTkRTTElERVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyOS40LDExMC44IGMgLTIuNywwIC02LjIsNC4xIC00LjMsNS4xIC0xLDEuNSAtMy42LDIgLTMuNiw0IDAsMS44IDIuNiw0LjcgMy40LDYuMiAxLjEsMiAzLjIsMy4yIDYuMiwzLjIgaCAxLjggYyAyLjcsMCA0LjYsLTIuNiA0LjYsLTUuMyB2IC0xIGMgMCwtMy40IC0xLC01IC0yLjEsLTcuNSAtMSwtMi40IC0xLjYsLTQuNiAtNC45LC00LjYgaCAtMSB6IG0gLTIyLjIsLTM1IC01LjMsLTUuMiAtMzkuMyw1OC4zIDU1LjgsMC4xIHYgLTEuMiBjIDAsLTAuNyAtMSwtMS41IC0xLjUsLTEuOCAwLC0yIC0wLjYsLTEuNiAtMC45LC0yLjkgLTAuMiwtMC45IC0wLjEsLTIuNyAtMC4xLC0zLjcgMCwtMi44IC0wLjEsLTQuMyAtMS43LC01LjYgLTIuMiwtMS45IC0xLjMsLTEuNSAtNC4zLC0zLjEgLTIsLTEgLTEuNSwtMi4xIC01LjIsLTIuMiB2IC0xLjUgYyAwLC0xLjkgLTIsLTMuNiAtMi44LC00LjggMCwtMi4zIC0wLjUsLTQuNyAtMC41LC02LjggMCwtMS42IC0wLjIsLTIgLTAuMiwtMy4zIC0wLjEsLTEuNyAtMC44LC0xLjUgLTAuOCwtMi44IHYgLTAuMiBjIDAsLTMgMC41LC00LjUgMi4xLC02IDIuMiwtMi4xIDAuOSwtMi4yIDMuOCwtMy45IGwgMC44LC0zLjMgMCwwIHogbSA5LjcsMzQgYyAwLDMuNiA2LjEsMi44IDYuMSwtMC44IDAsLTQuMiAtNi4xLC0xLjkgLTYuMSwwLjggeiBtIDIuOCwtMTYuNCBjIC0yLjIsMCAtNyw2LjQgLTQsOC42IDEuNywxLjIgMi42LDEuNiA1LjMsMC42IDIsLTAuOCAyLjgsLTEuNiAyLjgsLTQuMyA0ZS00LC0yLjQgLTIsLTQuOCAtNCwtNC44IHogbSAtOC40LDUuMyBjIDAuOCwwIDEsLTAuNyAxLjMsLTEuMyAtMC42LC0xLjQgLTAuNSwtMi41IC0yLjYsLTIuNSBoIC0wLjIgYyAtMSwwIC0yLDAuNiAtMiwxLjUgMCwwLjcgMS42LDIuMyAyLjgsMi4zIGggMC44IHogbSAtMy4zLC0xMy43IGMgLTAuMSwxIC0wLjMsMC42IC0wLjMsMS41IDAsMSAwLjgsMyAxLjgsMyBoIDAuMiBjIDMuMSwwIDMuMSwtMC4yIDQuOCwtMS41IC0xLC0yLjMgLTAuNCwtMy42IC00LjIsLTMuNiAtMS4xLDAgLTEuNCwwLjMgLTIuMywwLjUgelwifV0saVtcIkFDLklDLlNVQlNJREVOQ0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA1Ni44LDc1LjYgMCwyIDE0LjQsMCAzLjgsNy45IGMgLTAuMSwwLjMgLTAuMywwLjcgLTAuMywxLjYgbCAwLDAuNiBjIDAsMC43IDAuMywxLjEgMC43LDEuNSAwLjMsMC40IDAuNywwLjggMS4xLDEuMyAwLjcsMC44IDEuNSwxLjUgMS44LDIgbCAtMC4zLDQuMSBjIC0wLjEsMSAwLjQsMiAxLDIuNiAwLjYsMC42IDEuMywxLjEgMiwxLjUgMC43LDAuNCAxLjMsMC44IDEuNywxLjIgMC40LDAuNCAwLjYsMC42IDAuNiwxIDAsMS4zIC0wLjUsMi4yIC0wLjUsNC4yIDAsMC45IDAuNSwxLjcgMS4xLDIuMSAwLjYsMC40IDEuMiwwLjcgMS44LDAuOSAwLjYsMC4yIDEuMSwwLjQgMS40LDAuNiAwLjMsMC4yIDAuMywwLjIgMC4zLDAuMyAwLDAuNiAtMC4xLDAuOCAtMC4zLDEuMiAtMC4yLDAuMyAtMC41LDAuNyAtMC41LDEuNSBsIDAsMC42IGMgMCwxLjggMSwyLjkgMS45LDMuNSAwLjgsMC42IDEuMywwLjggMS41LDEuMyAwLDAgMCwwIDAsMCAwLjIsMC44IDAuMywyIDAuNywzLjEgMC4yLDAuNiAwLjUsMS4yIDEsMS42IDAuNSwwLjUgMS4yLDAuNyAyLDAuNyBsIDAuMywwIGMgMS4xLDAgMS45LC0wIDIuNiwtMC4yIDAuNywtMC4xIDEuMywtMC40IDEuNywtMC45IDAuNCwtMC41IDAuNSwtMS4xIDAuNywtMS43IDAuMSwtMC42IDAuMiwtMS4zIDAuMywtMi4xIDcuNmUtNCwtMCAtNy42ZS00LC0wIDAsLTAgMC4yLC0xLjQgMC43LC0yLjEgMS4zLC0yLjggMC41LC0wLjcgMS4yLC0xLjcgMS4yLC0zLjEgMCwtMC42IC0wLjIsLTEgLTAuNSwtMS4zIC0wLjIsLTAuMyAtMC41LC0wLjcgLTAuNywtMSAtMC41LC0wLjcgLTAuOCwtMS41IC0wLjgsLTIuNCBsIDAsLTAuOSBjIDAsLTAgLTAsLTAgMC4xLC0wLjIgMC4yLC0wLjIgMC41LC0wLjQgMC44LC0wLjYgMC40LC0wLjMgMC44LC0wLjUgMS4xLC0xIDAuNCwtMC40IDAuNywtMS4xIDAuNywtMS44IDAsLTEuMiAtMC41LC0yLjQgLTAuOSwtMy41IC0wLjQsLTEuMSAtMC44LC0yLjIgLTAuOCwtMi41IDAsLTAuNSAwLjIsLTEgMC42LC0xLjYgMC40LC0wLjYgMSwtMS4zIDEuNSwtMi4yIDAuNSwtMC44IDAuOSwtMS44IDAuOSwtMyAtMCwtMS4xIC0wLjUsLTIuNCAtMS42LC0zLjYgbCAtMCwtMCAtMCwwIGMgLTAuMywtMC4zIC0wLjcsLTEuMyAtMC44LC0yLjIgLTAuMSwtMC45IDAuMSwtMS45IDAuNCwtMi4zIDAuMywtMC41IDAuOSwtMC45IDEuNywtMS40IDAuNywtMC42IDEuNSwtMS42IDEuNSwtMyBsIDAsLTEuNCAzOC4xLDAgMCwtMiAtNDAuMSwwIC0zMC42LDAgLTAuNiwwIC0xNSwwIHpcIn1dLGlbXCJBQy5JQy5WT0xDQU5JQyBFUlVQVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyMi4yLDY2IC0xMC40LDE3LjkgMS43LDEgMTAuNCwtMTcuOSAtMS43LC0xIHogbSAtMjMuMiwwLjUgMCwxNy45IDIsMCAwLC0xNy45IC0yLDAgeiBtIC0xOS41LC0wLjQgLTEuOCwwLjggOCwxNy45IDEuOCwtMC44IC04LC0xNy45IHogTSA5OS4zLDEyMC44IGMgLTEuNywtMCAtMy4zLDAuOCAtNC41LDIgLTEuMiwxLjIgLTIsMi45IC0yLDQuNSBsIDAsMS45IGMgMCwxLjcgMC44LDMuMyAyLDQuNSAxLjIsMS4yIDIuOCwyIDQuNSwyIGwgMS4zLDAgYyAxLjcsMCAzLjMsLTAuOCA0LjUsLTIgMS4yLC0xLjIgMiwtMi44IDIsLTQuNSBsIDAsLTEuOSBjIDAsLTEuNyAtMC44LC0zLjMgLTIsLTQuNSAtMS4yLC0xLjIgLTIuOCwtMiAtNC41LC0yIGwgLTEuMiwwIC0wLDAgeiBNIDgwLjMsODYuNSBjIC0wLjUsMCAtMC45LDAuMyAtMS40LDAuOCAtMC40LDAuNSAtMC44LDEuMiAtMS4zLDIgLTAuOCwxLjcgLTEuNiwzLjkgLTIuNCw2LjMgLTEuNSw0LjcgLTIuOCw5LjggLTMuNCwxMS40IGwgLTAsMCBjIC0yLDcgLTUuOCwxNS4yIC03LDIxLjYgbCAtMC4xLDAuMiAwLjIsMCAyMC45LDAuNiAwLjIsMCAwLC0wLjIgMCwtMS45IDAsLTAuMiAtMC4yLC0wIC0xNy42LC0wLjcgTCA4MC41LDg5LjQgbCAzOS4xLDAgMTEuOSwzNy4xIC0xNy41LDAuNyAtMC4yLDAgMCwwLjIgMCwxLjkgMCwwLjIgMC4yLC0wIDIwLjksLTAuNiAwLjIsMCAtMC4xLC0wLjIgYyAtMS4zLC02LjQgLTUuMSwtMTQuNyAtNywtMjEuNiBMIDEyOC4xLDEwNyBjIC0wLjYsLTEuNiAtMS45LC02LjcgLTMuNCwtMTEuNCAtMC44LC0yLjMgLTEuNiwtNC42IC0yLjQsLTYuMyAtMC40LC0wLjggLTAuOCwtMS41IC0xLjMsLTIgLTAuNCwtMC41IC0wLjksLTAuOCAtMS40LC0wLjggbCAtMzkuNCwwIHpcIn1dLGlbXCJBQy5JQy5WT0xDQU5JQyBUSFJFQVRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MC4zLDg1LjYgYyAtMC41LDAgLTAuOSwwLjMgLTEuNCwwLjggLTAuNCwwLjUgLTAuOCwxLjIgLTEuMywyIC0wLjgsMS43IC0xLjYsMy45IC0yLjQsNi4zIC0xLjUsNC43IC0yLjgsOS44IC0zLjQsMTEuMyBsIDAsMCAtMCwwIGMgLTIsNyAtNS44LDE1LjIgLTcsMjEuNiBsIC0wLjEsMC4yIDAuMiwwIDIwLjksMC42IDAuMiwwIDAsLTAuMiAwLC0xLjkgMCwtMC4yIC0wLjIsLTAgLTE3LjYsLTAuNyAxMiwtMzcuMSAzOS4xLDAgMTEuOSwzNy4xIC0xNy41LDAuNyAtMC4yLDAgMCwwLjIgMCwxLjkgMCwwLjIgMC4yLDAgMjAuOSwtMC42IDAuMiwtMCAtMC4xLC0wLjIgYyAtMS4zLC02LjQgLTUuMSwtMTQuNyAtNywtMjEuNiBsIC0wLDAgMCwtMCBjIC0wLjYsLTEuNiAtMS45LC02LjcgLTMuNCwtMTEuMyAtMC44LC0yLjMgLTEuNiwtNC42IC0yLjQsLTYuMyAtMC40LC0wLjggLTAuOCwtMS41IC0xLjMsLTIgLTAuNCwtMC41IC0wLjksLTAuOCAtMS40LC0wLjggbCAtMzkuNCwwIHogTSA5OS4zLDEyMCBjIC0xLjcsLTAgLTMuMywwLjggLTQuNSwyIC0xLjIsMS4yIC0yLDIuOSAtMiw0LjUgbCAwLDEuOSBjIDAsMS43IDAuOCwzLjMgMiw0LjUgMS4yLDEuMiAyLjgsMiA0LjUsMiBsIDEuMywwIGMgMS43LDAgMy4zLC0wLjggNC41LC0yIDEuMiwtMS4yIDIsLTIuOCAyLC00LjUgbCAwLC0xLjkgYyAwLC0xLjcgLTAuOCwtMy4zIC0yLC00LjUgLTEuMiwtMS4yIC0yLjgsLTIgLTQuNSwtMiBsIC0xLjIsMCAtMCwwIHogbSAtMi43LC00Mi4xIDAsMC4yIC0wLjIsMCAwLDQuMiAwLDAuMiAwLjIsMCAzLjMsMCAwLjIsMCAwLC0wLjIgMCwtNC4yIDAsLTAuMiAtMC4yLDAgLTMuMywwIHogTSA5OSw1Ny4xIGMgLTEuMSwyLjVlLTUgLTIuMywwLjIgLTMuMywwLjUgLTEuMSwwLjMgLTIuMSwwLjggLTMuMiwxLjQgbCAtMC4xLDAuMSAwLDAuMSAwLDMuMSAwLDAuNCAwLjMsLTAuMiBjIDEuMSwtMC43IDIsLTEuMyAzLC0xLjYgMSwtMC40IDEuOSwtMC42IDIuNywtMC42IDEuMSwyLjJlLTUgMiwwLjMgMi43LDAuOCAwLjcsMC42IDEsMS4zIDEsMi4yIC0xZS01LDAuNSAtMC4xLDEgLTAuNCwxLjUgLTAuMywwLjUgLTAuNywxIC0xLjMsMS42IGwgMCwwIC0xLjUsMS41IGMgLTEsMC45IC0xLjcsMS44IC0yLDIuNSAtMC4zLDAuNyAtMC41LDEuNyAtMC41LDIuOCBsIDAsMi41IDAsMC4yIDAuMiwwIDMuMSwwIDAsLTAuMiAwLjIsMCAwLC0yIGMgLTEwZS02LC0wLjYgMCwtMSAwLjEsLTEuMyAwLC0wLjMgMC4xLC0wLjYgMC4xLC0wLjggMC4xLC0wLjIgMC4yLC0wLjUgMC40LC0wLjggMC4yLC0wLjMgMC42LC0wLjcgMS4xLC0xLjIgbCAxLjQsLTEuNCBjIDEsLTAuOSAxLjcsLTEuOCAyLjEsLTIuNiBsIDAsLTAgYyAwLjQsLTAuOCAwLjYsLTEuNiAwLjYsLTIuNSAtMmUtNSwtMS44IC0wLjYsLTMuMyAtMS45LC00LjMgLTEuMywtMS4xIC0yLjksLTEuNiAtNSwtMS42IHpcIn1dLGlbXCJBQy5JQy5DQVZFIEVOVFJBTkNFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDU1LDEwMCA1NSwwIDMwLC0yMCAwLDQwIC0zMCwtMjBcIn1dLGlbXCJBQy5JQy5EUk9VR0hUXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODcuNiwxMjcuNCBjIDEuMywwLjYgNC41LDAgNi4xLDAgaCA0LjIgbCAtMiwtNS45IC00LjksLTAuMyBjIC01LjcsMTAuOCAtMi40LDQuMyAtMy40LDYuMiB6IG0gLTI0LjEsLTcgYyAtMC42LDEuOSAxNy42LDYuOSAyMC41LDcuNCAyLjcsLTEuOCA0LjUsLTIuNCA0LjgsLTYuNyAtNCwwIC0xMS40LC0wLjggLTE0LjgsLTEuNyAtMi4yLC0wLjYgLTQuMiwtMS4yIC02LjQsLTEuNyAtMy41LC0wLjkgLTQuMiwtMS41IC00LjIsMi42IHogbSAzNS45LDYuMSA2LjcsLTAuMyAxOC42LC0xLjcgYyAxLjUsLTAuNCA0LjUsLTAuNCA2LC0xLjQgLTEuMywtMi42IC0yLjQsLTQuMSAtMy43LC02LjYgLTEuNCwtMi42IC0xLjksLTQuOSAtMywtNy4yIC0zLjcsMC44IC00LjcsMy41IC02LjMsNCAtMy41LDEuMSAtNC44LDAuNCAtNi43LDMuOCAtMS43LDMgLTIuNSwzLjMgLTUuMyw1LjIgLTIuNCwxLjcgLTMuNiwyLjggLTYuMyw0LjIgeiBtIC0yLjgsLTkgYyAwLDMuNyAwLjUsNC4yIDIuMiw3LjMgbCA4LjUsLTcuMSAtMC4yLC0wLjIgYyAtMS43LC0wLjQgLTIuNCwtMS41IC00LjgsLTIuMiAtMS42LC0wLjQgLTQuMSwtMS4zIC01LjgsLTEuNCB2IDMuNiBoIDAuMSB6IG0gMzcuNiwwLjUgYyAtMC45LDAgLTEsLTAuMiAtMS45LC0wLjIgbCAxLDIuNCAyLjcsLTIuOCBjIC0wLjksMC4yIC0wLjgsMC41IC0xLjgsMC41IHogbSAtNTEuMywtMC4zIGMgLTAuMSwxLjkgNy43LDEuNSA5LjMsMS41IGggMi44IGMgMCwtMS43IC0wLjcsLTIuOCAtMC44LC00LjQgLTAuMSwtMi41IC0wLjQsLTEuOCAtMy4xLC0yLjEgLTQsLTAuNCAtNC42LC0yIC03LjcsLTIuOCBsIC0wLjYsNy43IHogbSAtMjUuNSwtMTIuNiAzLDEyLjEgYyAwLjcsLTMgMi4yLC00LjUgMi44LC03LjMgMC4zLC0xLjggMC4xLC0yLjYgMC45LC00IDAuNCwtMC43IDEuMywtMi44IDEuNSwtMy42IC0xLjQsLTAuMyAtNi45LC0xLjYgLTguNiwtMS42IGwgMC40LDQuNCB6IG0gNjkuOSwtMi4yIGMgLTEsNC4xIC0wLjcsMy41IDEsNyAxLjIsMi40IDIsNC40IDMuMSw2LjYgNS44LC0wLjUgNi4yLC0wLjUgOS40LC0zLjYgMS42LC0xLjYgMSwtNi44IDIsLTguMyAtMi41LC0xLjIgLTEuNywtMC42IC00LjYsLTEuMyAtNC41LC0xIC02LjYsLTAuNCAtMTAuOSwtMC4zIHogbSAtMzAuOSwxLjEgdiAwLjggYyAwLDIuMiAtMC4xLDMuMyAwLDUuNCAwLjEsMy4zIC0wLjMsMi41IDMuMSwyLjggMS4yLDAuMSAzLjUsMSA0LjUsMS40IDAuNywwLjQgMS41LDAuNSAyLDAuOCAwLjgsMC40IDAuMywwLjYgMS43LDEuNCBsIC0wLjIsLTAuMiA1LjYsLTQuNyBjIDMuMSwwIDQuMiwwLjQgNS44LC0xLjMgMi40LC0yLjUgMC44LC0xLjQgNCwtMy4xIGwgMC42LC0zLjEgYyAtMi41LDAuNiAtNS41LDIuMiAtOC4yLDEuMSAtMi42LC0xLjEgLTMuOCwtMi44IC03LjQsLTIuOCBsIC0xLjYsLTAuMyAtOS45LDEuOCB6IG0gLTMyLjEsMTEuMiBjIDEuMywwIDUuOCwwLjcgNi45LDEgMS40LDAuNCA0LjcsMi4zIDUuNiwyLjMgaCAyLjggYyAxLDAgMC45LC0wLjMgMS43LC0wLjUgbCAxLjcsLTguMyAtNS4yLC00LjUgLTksLTIgYyAtMC40LDEuNyAtMi40LDMgLTMuMSw1LjEgLTAuMywwLjcgLTEuNSw2LjMgLTEuNSw3IHogbSA0MSwtMzUuMSBjIDEsMS4yIDEuNCwyLjggMi4yLDQuMiAwLjQsMC42IDIuOSwzLjMgMi45LDMuNSAwLDAuOCAtMC45LDIuMyAtMS4zLDIuMyAtMi43LDAgLTMuOCwtNi43IC0zLjgsLTEwIHogbSAtMS44LC0xLjIgYyAtMC4zLDEgLTEuOSw0LjUgLTIuNSw1LjYgLTAuOSwxLjggLTEuOSwzLjUgLTQuNCwzLjUgLTAuNSwwIC0xLC0wLjQgLTEsLTAuOCAwLC0zLjEgMy44LC01LjggNS4yLC03LjYgbCAyLjgsLTAuOCB6IG0gOS41LDguNiBoIC0wLjggYyAtMi4zLDAgLTYuOSwtOCAtNi45LC05LjcgMCwtMC4xIDAuMywtMC41IDAuMywtMC41IDEuNywwLjUgNy45LDYgNy45LDguNyAtNGUtNCwwLjUgLTAuNCwwLjggLTAuNSwxLjUgeiBtIDAuNiwtNiBjIC0wLjcsLTAuMyAtMS43LC0xIC0yLjQsLTEuMyAtMS40LC0wLjggLTMuNSwtMi45IC00LjcsLTMuMyBsIDEuMSwtMS4zIGMgMy4xLDEuNSAxMC4xLDEuMyAxMC4xLDUuNyAwLDAuMyAtMC44LDAuOCAtMSwxIC0wLjgsLTAuMyAtMiwtMC40IC0zLjEsLTAuOCB6IG0gLTI0LjksMS4zIGggLTEgYyAxLC0yIC0yLjIsLTYuNyAtNC40LC03LjIgLTIuMiwxLjIgLTQuMiwwLjYgLTUuNSwzLjMgLTAuNCwxIC0wLjcsMi4yIC0xLjUsMi44IC0wLjgsMC42IC0yLjQsMC44IC0yLjQsMS45IDAsMS41IDQuMywwLjQgNC45LC0wLjIgMS4yLC0xLjEgMi40LC0yLjEgNC41LC0yLjEgMiwwIDIuOSw1LjggMy4xLDguMiAwLjIsMy4yIC0yLjMsNy43IC0yLjIsOS41IGwgMC45LDYuOCAtNC40LC0wLjMgYyAyLjEsMy4xIDguNSw2IDEzLjQsNi40IGwgLTAuNCwtNy43IC01LjYsMS4zIGMgMCwtNC40IC0yLC01LjUgLTAuNSwtOS41IDAuNiwtMS43IDEsLTIuMiAxLC00LjcgMCwtMS4xIDAuMiwtNC42IDAuNiwtNS4zIDEuNSwtMi41IDEuOSwtNS42IDMuMSwtOC40IDEuMiwtMi44IDUsLTIuNiA4LjMsLTMuNSBsIDEuMiwxLjMgLTEsMC4zIDAuOCwxLjggYyAtMS43LDIgLTIuOSwyLjkgLTQuNSw1IC0wLjgsMSAtMy44LDYuMyAtMC42LDYuMyBoIDEgYyAzLjksMCA1LjEsLTcuMSA2LjksLTkuMiAwLjQsNC40IDEuMiw5LjUgNC40LDExLjIgMS43LC0wLjQgMi4yLC0xLjEgMi42LC0yLjggMC43LDAuMiAwLjUsMC4zIDEsMC4zIDEuMywwIDIsLTEuMSAyLC0yLjMgViA4NS44IGMgMCwtMi4xIC0xLjIsLTIuNCAtMS41LC0zLjggMC44LDAuNCAyLjIsMSAzLjMsMSBoIDAuNSBjIDEuMiwwIDEuMywtMC42IDEuOCwtMS4zIC0wLjIsLTIuNSAtMS41LC0zLjkgLTMuNSwtNC42IC0xLjMsLTAuNCAtNS4yLC0xLjcgLTYuNywtMS43IGwgMC41LC0xIGggLTAuNyBsIDAuOCwtMS42IC00LjksMSBjIC0wLjksLTAuNiAtMS4yLC0xLjUgLTIuNiwtMS41IGggLTEuOCBDIDkyLjMsNzIuMiA4OC43LDc1LjggODguNyw4Mi45IGwgMCwwIHpcIn1dLGlbXCJBQy5JQy5GTE9PRFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNNzcuMiw5Mi45TDc3LjMsOTIuOEw5OS4zLDcyLjVMOTkuNyw3Mi4xTDEwMCw3Mi4xTDEwMC40LDcyLjVMMTIyLjQsOTIuOEwxMjMuNSw5My45TDEyMi40LDkzLjlMMTIyLjQsMTE1LjkwMkMxMjMuMDIzLDExNS4xMDYgMTIzLjY1NywxMTQuNSAxMjQuNCwxMTQuNUMxMjUuNDU0LDExNC4xOTkgMTI0Ljg1NywxMTYuNzEyIDEyNS41LDExNy42QzEyNS45ODgsMTE4LjI3MyAxMjYuODA1LDExOC43MjEgMTI3LjYwOSwxMTguOTI4QzEzMC4xNDYsMTE5LjU4IDEzMi43NDcsMTE3LjMwMyAxMzQuNSwxMTYuMkMxMzUuMDQzLDExNS44NTkgMTM2LjM1NiwxMTUuMjYgMTM2LjQsMTE1LjlDMTM2LjY1MiwxMTkuNTU4IDEzNi41MjYsMTIzLjIzNSAxMzYuNCwxMjYuOUw2My43LDEyNi45TDYzLjcsMTE0LjlDNjQuODE5LDExNy45NDMgNjYuODM1LDEyMC45NDggNzAuNjM3LDExOS4wNUM3Mi4zNTcsMTE4LjE5MiA3My4yMDksMTE1Ljc0NSA3NS4xLDExNS40Qzc1LjQ2NCwxMTUuMzM0IDc2LjI2NiwxMTYuMzM1IDc3LjEsMTE3LjI3OEw3Ny4xLDkzLjlMNzYuMiw5My45TDc3LjEsOTNMNzcuMSw5Mi45TDc3LjIsOTIuOVpNMTIxLjIsMTE3LjU0NEwxMjEuMiw5NC4xTDc4LjMsOTQuMUw3OC4zLDExOC40OUM3OC41MjEsMTE4LjY2NyA3OC43MjcsMTE4Ljc5NSA3OC45MTEsMTE4Ljg0NUM4My40MDcsMTIwLjA4NCA4Mi4zNDUsMTE2LjAwOSA4Ni45LDExNS41Qzg3LjU4OCwxMTUuNDIzIDkwLjU0OSwxMTkuMTE0IDkxLjU4MywxMTkuNTM2Qzk1LjY5NCwxMjEuMjE1IDk1LjgyNiwxMTYuNjk0IDk4LjksMTE1LjlDMTAwLjA3NCwxMTUuNTk3IDEwMC41MzgsMTE4LjIzNyAxMDAuOSwxMTguNUMxMDEuODYsMTE5LjE5OCAxMDMuMDI4LDExOS42NTEgMTA0LjIsMTE5LjgzN0MxMDkuMzMsMTIwLjY1NSAxMDguNjg1LDExNy4yMTYgMTExLjksMTE0LjlDMTEyLjg0OCwxMTQuMjE3IDExMy41NTYsMTE2LjYwMiAxMTMuNTYzLDExNi42MTNDMTE1LjEsMTE5LjIyOSAxMTUuMDkyLDEyMC4yNzMgMTE4LjY1OSwxMTkuNjA2QzExOS42NjYsMTE5LjQxOCAxMjAuNDY1LDExOC41MjkgMTIxLjIsMTE3LjU0NFpNOTkuNzUsNzMuODQ2TDk5LjgsNzMuOEw5OS43LDczLjhMOTkuNzUsNzMuODQ2TDc5LjMsOTIuN0wxMjAuMiw5Mi43TDk5Ljc1LDczLjg0NlpcIn1dLGlbXCJBQy5JQy5JTlZFUlNJT05cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSA2OS41LDg3LjkgQyA2OS41LDg2LjcgNzMuNiw4My45IDc1LjUsODMuOSBoIDAuMyBjIDMuMywwIDksOS4xIDE1LjIsOS4xIGggMS44IGMgNS40LDAgMTEuMywtOS4xIDE0LjksLTkuMSAzLjUsMCA4LjgsOS4xIDE1LjIsOS4xIGggMC45IGMgOC41LDAgMTAuNSwtNC40IDE1LjUsLTcgbCAtNS4zLC02LjQgYyAtMy40LDEuOCAtNC4xLDQuNiAtOS41LDUuMyAtMi4yLDAuMyAtNi42LC0zLjkgLTguMywtNS41IC04LC02LjggLTEzLC0zIC0xOS40LDIgLTMuOSwzLjEgLTMuOSw1LjMgLTguNSwxLjMgLTIuMiwtMS44IC01LjYsLTQuOCAtOC4yLC02IC0zLjgsLTEuOCAtOC42LC0wLjcgLTExLjQsMS4yIC0xLjYsMSAtNy4zLDUuMiAtNy4zLDYuOSB2IDUyLjIgaCA4LjIgViA4Ny45IHogbSAtOS40LC0xNi40IDc5LjksMCAwLC04LjUgLTc5LjksMCB6XCJ9XSxpW1wiQUMuSUMuVFNVTkFNSVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDYzLDEyMiAzOS41LC0wLjEgMzAuOCwwLjMgYyAtNy4xLDAgLTEyLjgsLTEuNyAtMTYuOSwtNC44IC0zLjcsLTIuOSAtNy43LC04IC03LjcsLTE0LjQgMCwtOS4xIDYuOSwtMTYuNSAxNS44LC0xNi41IGggMC43IGMgNi41LDAgOC4yLDIuOCAxMS44LDUuMyAtMiwtOC42IC0xMC42LC0xNC4yIC0yMS40LC0xNC4yIGggLTAuMiBjIC0xOC4yLDAgLTQ0LjksMzMgLTUyLjQsNDQuMyBsIDAsMCAwLDAgelwifV0saVtcIkFDLklDLkJJUkRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MS42LDkyLjUgLTE4LjQsMi45IHYgMC4zIGwgNi42LDAuNSBjIC0wLjcsMC41IC0zLjMsMS4xIC00LjUsMS41IC0yLjYsMC45IC0yLDAuMyAtMy41LDIuNCBsIDMuNCwwLjEgLTEsMSBjIDEuOCwwIDMuMywwLjEgNC44LDAuMiAxLjQsMC4xIDEuOSwtMS4zIDMuNSwtMS40IDMsLTAuMiA1LjcsMC4yIDkuMywwLjMgbCAtMC44LDAuNSBjIDAuNiwwLjEgMC43LDAuMiAxLjQsMC4yIGggMS42IGwgMC4xLDAuOSAyLjksMS4yIDEuNiwtMC4xIGMgMS42LDEuMSAxLjksMi4zIDUuMiwyLjQgMC4yLDIuNyAwLjYsMy44IDMsNC40IHYgMC44IGMgMCwyLjIgMC4yLDQuOCAyLjEsNSBsIDEuMiw1LjMgaCAtMC40IHYgMC40IGMgLTAuMywtMC4zIC0xLjQsLTEuMiAtMS44LC0xLjIgaCAtMC4yIGMgLTAuNSwwIC0wLjUsMC4xIC0xLDAuMiAwLjYsMC44IDIuNywxLjcgMy4xLDIuNyAwLjUsMS42IDAuMSwzLjggMC4yLDUuMyBsIDAuOSwwLjYgMC44LC0wLjEgMC4xLC0wLjggLTAuMSwtMi43IGMgMC43LDAuNSAyLjcsMyAzLjMsMyBoIDEgYyAtMC41LC0yIC0xLjgsLTIuNCAtMi43LC0zLjkgbCAzLjcsMS4xIGMgLTEsLTEuNSAtMC45LC0xLjggLTIuOSwtMi4zIC0zLjEsLTAuOCAtMS44LC0xLjkgLTMuMSwtMi4yIGwgLTEsLTUuNCBjIDEsLTAuMiAxLjQsLTEgMS40LC0yLjIgbCAwLjEsLTEuNiAtMC4zLC0yLjYgaCAxIGMgMC43LDAgMC43LC0wLjIgMS40LC0wLjQgMC4xLDEuNiAxLjIsMy4zIDIuNywzLjQgbCAzLjEsNi4zIGMgLTAuMywwLjMgLTAuNCwwLjMgLTAuNCwwLjggdiAwLjcgbCAtNC40LC0wLjkgdiAwLjIgYyAwLjgsMC43IDMuNywxLjcgNS4xLDIuOCAxLjEsMC44IDEuMiwwLjYgMiwxLjkgMC4zLDAuNSAxLjMsMi4yIDEuOSwyLjIgaCAwLjggbCAwLjIsLTAuMSAtMS43LC0zLjIgNC4zLDEuOSBjIC0wLjEsLTIuMSAtMi4xLC0xLjUgLTMuNiwtMi44IGggMyBjIC0xLjMsLTEuMSAtMS42LC0wLjkgLTMuNSwtMS4yIC0xLjYsLTAuMiAtMS43LC0xLjIgLTIuNywtMi4xIC0xLjEsLTEuMiAtMiwtNC45IC0yLjksLTYuNiAxLjIsLTEuOCAxLC0xLjQgMSwtNC40IDQuOCwtMi4zIDUuNiwtMi4xIDkuMywtNS45IDIuNywtMi43IDMuOSwtNi4xIDUuOCwtOS43IDAuOSwtMS44IDEuNSwtMy4zIDIuMiwtNS4yIDAuNywtMS44IDAuNywtNC43IDEuNCwtNi4zIDIuMywtNC42IDksLTMuMiAxMC4zLC01LjIgbCAtNC40LDAuMiB2IC0wLjIgbCA1LC0wLjYgYyAtMi4yLC0xLjkgLTQuOCwtMS40IC04LjMsLTEuOCAtMi4xLC0wLjMgLTIuOSwwLjcgLTQuNCwtMC4zIC0xLjQsLTEgLTEuNiwtMS4yIC0zLjcsLTEuNSAtMy4xLC0wLjUgLTUuNiwxLjIgLTcuNCwyLjUgLTEuNywxLjMgLTMuMiw1LjIgLTQuMiw2LjEgLTAuMywwLjIgLTYuMSwyLjcgLTcuMSwzLjIgLTIuOSwxLjUgLTMuNSwyLjUgLTcuMywzLjEgLTYuMywxIC05LjksMy40IC0xNC4yLDYuMyBsIDAsMCB6XCJ9XSxpW1wiQUMuSUMuSU5TRUNUXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzcuNCw4OC44IDAuMSwtMC4zIDYuMSw0LjkgLTAuMSwwLjIgYyAtMi4yLDEuNSAtNy43LDkgLTEwLDkgbCAtMS42LC0wLjEgNS42LC0xMy43IHogbSA3LjEsMy4zIGMgLTAuNCwtMS43IC01LC02LjQgLTYuNywtNy4yIC0wLjQsMC4zIC0xLjgsMSAtMS44LDEuNiAwLDAuOCAwLjMsMSAwLjUsMS41IGwgLTUuNiwxNC43IGggLTEgYyAwLjIsMC45IDAuNSwwLjcgMC41LDEgMCwwLjMgLTMsNy44IC0zLjMsOC43IC0wLjYsMS40IC0xLDIuNyAtMS42LDQuMiAtMC4zLDAuOCAtMC42LDEuNiAtMC45LDIuMiAtMC41LDEuMSAtMC42LDAuMyAtMS40LDEuNyBsIC0xLjMsMC4zIGMgMC4zLDAuNSAxLjgsMC41IDIuNSwwLjQgMS4yLC0wLjIgMC40LC0xIDAuOCwtMi4yIDAuNywtMS44IDEuNCwtMy41IDIuMSwtNS40IDAuNSwtMS4yIDMuNywtMTAuMyA0LjYsLTEwLjMgaCAxLjMgYyAwLjgsMCAxLDAuMyAxLjUsMC41IGwgMi4zLC0yLjggYyAyLjcsMS44IDguNSw0LjYgMTIuOCw0LjYgaCAwLjcgbCAwLjIsLTAuMSAtMy41LC01IC05LjksLTAuMSA2LjUsLTYuMyBjIDQuMywyLjkgMTEuNywxNi45IDE0LjksMTYuOSBoIDAuMyBjIDEuNCwwIDEuMywtMC42IDEuOCwtMS42IC0wLjksLTMuNyAtNC44LC02LjMgLTcuMywtOC41IC0yLjQsLTIgLTYuMSwtNi41IC04LjMsLTcuOSAxLjIsLTEuNyAxMC4zLC0xMC44IDEyLjIsLTExLjMgbCAwLjksNy43IDAuMSwyLjkgLTEuMiw3LjQgaCAtMS44IGwgNS4yLDQuNCA3LjIsLTMuOSBjIC0wLjUsMi4xIC0wLjMsMi41IC0yLjIsMy40IC0wLjYsMC4zIC0zLjcsMS45IC0zLjcsMi4zIDAsMC41IDAuNywxLjcgMC43LDMuMSAwLDIuOSAtMy4xLDQuNCAtNS44LDMuMyAtMi4xLC0xIC00LjksLTUuMSAtNS41LC01LjEgaCAtMSBjIC00LjYsMCAtNi43LDEuNiAtMTAuNSwxLjYgaCAtMC41IGMgLTEuOSwwIC0yLjUsLTAuNyAtNC4xLC0wLjcgaCAtMC41IGMgLTAuNiwwIC0xLDAuNCAtMSwxIDAsMy4yIDEyLjMsNC43IDE2LjksNC42IGwgMTMuMSwtMC4zIHYgMC4zIGMgLTAuOSwxLjMgLTUuOCw0LjggLTgsNC44IC0wLjEsMC4yIC0wLjUsMC43IC0wLjUsMC44IDAsMC43IDAuMSwwLjcgMC4zLDEuMyAwLjcsMC4xIDAuNSwwLjMgMSwwLjMgMC41LDAgMC41LC0wLjIgMSwtMC41IHYgLTEuMyBsIDcuNywtNS40IC0xLjYsNi4xIGMgLTAuOSwwLjEgLTEuMywwLjQgLTEuMywxLjMgMCwwLjkgMC41LDAuNyAxLjQsMS4yIGwgMS4yLC0xLjQgYyAwLC0wLjIgLTAuNywtMS4zIC0wLjcsLTEuNCAwLC0xLjMgMi40LC03LjYgMi44LC05LjUgbCAxNS42LC0wLjUgMS4yLDguNCAtMC40LDAuMSBjIDAuMywwLjUgMC4zLDEgMSwxIDEsMCAxLjEsLTAuMyAxLjYsLTAuNyAtMC41LC0xIC0wLjUsLTEuOSAtMS43LC0xLjMgbCAtMC44LC02LjcgNC44LDUuNSAtMC43LDAuOCAxLjQsMS4yIGMgMC41LC0wLjMgMSwtMC4yIDEsLTEgdiAtMC41IGMgMCwtMC45IC0wLjksLTEgLTEuNiwtMS4yIGwgLTQuNSwtNSAwLjMsLTEgaCAtOC41IGMgMCwtNSAyLC04LjIgMi4zLC0xMi40IGwgLTkuMiwwLjQgLTAuOCwyLjUgaCAtNC42IGMgLTEuOCwwIC0yLjgsLTggLTIuOSwtMTAuMyAwLC0yLjQgLTAuMywtNC4xIC0wLjIsLTYuNCAwLjEsLTEuNCAxLC01LjEgLTEsLTUuMSBoIC0wLjcgYyAtMSwwIC0xLjMsMSAtMS42LDEuOCAtMC4zLDEgLTEsMS40IC0xLjYsMiAtMS4yLDEuMyAtMi4zLDIuNCAtMy41LDMuNiAtMS4yLDEuMiAtNi4yLDYuNyAtNy40LDcgbCAwLDAgeiBtIDM3LjksOCBjIDAsLTAuMyAwLjMsLTAuNSAwLjcsLTAuNSBoIDAuNyBsIDAuMSwwLjUgLTAuMywxIGggLTEgYyAtMC4xLC0wLjcgLTAuMywtMC40IC0wLjMsLTEgeiBtIDMuNiwtMS44IGMgLTAuMiwwIC0xLjYsLTEuOCAtMy4zLC0xLjggaCAtMC41IGMgLTIsMCAtMiwyLjIgLTIuNSwzLjkgLTAuNSwxLjQgLTEuNCwzLjcgLTEuNCw1LjQgMCwwLjYgMC40LDEgMSwxIDIuNCwwIDYuNCwtNS4yIDYuOSwtNy40IDMuOSwwIDExLjEsLTEuMSAxMS44LC0zLjkgLTIuNiwwLjcgLTIuOSwyLjQgLTgsMi44IDEuOCwtMS42IDUuNiwtNC4zIDUuOSwtNy4yIGggLTAuNSBjIC0wLjgsMy4xIC01LjYsNy4yIC05LjUsNy4yIHpcIn1dLGlbXCJBQy5JQy5NSUNST0JJQUxcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4My45LDkzLjMgYyAtMy4zLDAgLTYsMi43IC02LDYgMCwzLjMgMi43LDYgNiw2IDMuMywwIDYsLTIuNyA2LC02IDAsLTMuMyAtMi43LC02IC02LC02IHogTSAxMDAsODUuNSBjIC0xMS4xLDAgLTIxLjIsMS41IC0yOC42LDQuMSAtMy43LDEuMyAtNi43LDIuOCAtOC44LDQuNSAtMi4xLDEuNyAtMy40LDMuNyAtMy40LDUuOSAwLDIuMiAxLjMsNC4yIDMuNCw1LjkgMi4xLDEuNyA1LjEsMy4yIDguOCw0LjUgNy40LDIuNSAxNy41LDQuMSAyOC42LDQuMSAxMS4xLDAgMjEuMiwtMS41IDI4LjYsLTQuMSAzLjcsLTEuMyA2LjcsLTIuOCA4LjgsLTQuNSAyLjEsLTEuNyAzLjQsLTMuNyAzLjQsLTUuOSAwLC0yLjIgLTEuMywtNC4yIC0zLjQsLTUuOSAtMi4xLC0xLjcgLTUuMSwtMy4yIC04LjgsLTQuNSBDIDEyMS4yLDg3LjEgMTExLjEsODUuNSAxMDAsODUuNSB6IG0gMCwxLjQgYyAxMSwwIDIxLDEuNSAyOC4yLDQgMy42LDEuMiA2LjUsMi43IDguNCw0LjMgMS45LDEuNiAyLjksMy4yIDIuOSw0LjggMCwxLjYgLTEsMy4zIC0yLjksNC44IC0xLjksMS42IC00LjgsMyAtOC40LDQuMyAtNy4yLDIuNSAtMTcuMSw0IC0yOC4yLDQgLTExLDAgLTIxLC0xLjUgLTI4LjIsLTQgLTMuNiwtMS4yIC02LjUsLTIuNyAtOC40LC00LjMgLTEuOSwtMS42IC0yLjksLTMuMiAtMi45LC00LjggMCwtMS42IDEsLTMuMyAyLjksLTQuOCAxLjksLTEuNiA0LjgsLTMgOC40LC00LjMgNy4yLC0yLjUgMTcuMSwtNCAyOC4yLC00IHpcIn1dLGlbXCJBQy5JQy5SRVBUSUxFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTMuNSw4Mi4zIGMgMCwtMiAxLjgsLTIuNyAxLjgsLTQuMyAwLC0xIC0wLjYsLTEuNSAtMS4yLC0yIC0yLjgsMC4zIC02LjUsMC42IC03LjQsMi43IC0wLjUsMS4yIC0wLjUsMi40IC0xLjIsMy45IC0wLjUsMSAtMS4yLDIuNCAtMS4yLDMuOCAwLDAuOCAwLjQsMC43IDAuNCwxLjYgdiAwLjggYyAwLDIuMiAtMi40LDMuNSAtMC42LDYuMSAtMC4yLDAuMyAtMiwxLjUgLTIuNCwxLjcgLTEuNywxIC0xLjgsLTAuNiAtMi42LC0wLjYgaCAtMC44IGwgLTAuMywtMS4yIGMgLTAuNSwtMC4zIC0xLC0wLjggLTEuNywtMC44IC0wLjgsMCAtMC44LDAuNSAtMC42LDEgbCAtMi4xLDAuNCAtMC44LDIuMyBoIDEgYyAwLjksMCAxLjQsMC40IDEuNiwxLjIgbCAtMS41LDEuMiAtMC4xLDAuNCBjIDIuOCwwLjMgNC42LC0wLjYgNy4yLC0xLjIgMS41LC0wLjQgNi44LC0wLjYgNy4zLC0xIGwgMC4xLC0yLjIgYyAxLDAuMyAyLDEuMyAzLjEsMS43IDEuMiwwLjQgMS43LDAuOCAzLjEsMS4yIDIuNCwwLjYgNC41LDEuMiA3LjcsMS4yIGggMC42IGwgNi4xLC0wLjYgYyAwLDIuNiAyLjMsMi41IDIuOCw0LjUgLTEuMywtMC4zIC0yLjMsLTIgLTMuNSwtMiAtMC4xLDAgLTAuNCwwLjEgLTAuNiwwLjIgbCAwLjMsMS4yIC0xLjYsMC4zIHYgMC44IGwgMC42LDAuNCAtMC45LDAuNiAxLDEgYyAtMC4yLDAuOCAtMC43LDAuNiAtMC43LDEuMyAwLDAuNCAwLjEsMC42IDAuNiwwLjYgMC42LDAgMS42LC0xIDIuOCwtMSAxLjksMCA4LjMsMC44IDguMywtMC44IHYgLTAuMiBjIDAsLTEuNSAtMy41LC0xLjYgLTMuMywtNS41IDUsMi42IDkuMyw3LjQgNC41LDEzLjYgLTEuNSwyIC00LjEsMy42IC02LjcsNC41IC0xLjQsMC41IC03LjQsMS45IC05LjMsMS41IC00LjIsLTAuOCAtNS40LC0wLjggLTguOCwtMi40IC0yLjYsLTEuMiAtNC43LC0yLjUgLTcsLTQgLTMuOSwtMi40IC0xMCwtNi4xIC0xNi4xLC02LjEgLTUsMCAtMTEuNCwzLjEgLTExLjQsNy45IDEuMiwtMC42IDEuMywtMS4zIDIuMSwtMi4yIDAuNSwtMC42IDEuNywtMS4zIDIuNCwtMS43IDEuNSwtMSAzLjksLTEuOCA2LjUsLTEuOCBoIDEgYyA0LjQsMCAxMS42LDQuNyAxNC41LDYuNyA0LjUsMy4xIDguMSw1LjUgMTQuNyw2LjcgNywxLjIgMTIuNywtMC4xIDE3LjQsLTIuOCAxLjksLTEuMSA0LjMsLTMuMyA1LjUsLTUuMSAxLC0xLjYgMi45LC01LjQgMi43LC04IGwgLTAuMywtMi42IGMgMC4zLDAuMSAyLjgsMy43IDMuNiw0LjUgMC44LDAuOCAzLjgsMi41IDUuMywyLjUgMSwwIDQuNCwtMi4yIDQuNywtMi45IGwgLTEuMywtMC42IDEuMiwtMSBjIC0xLjUsLTEgLTAuOCwtMC42IC0yLjQsLTAuNiBoIC0xIGMgMCwtMS40IC0wLjMsLTEuOCAtMS4zLC0xLjYgbCAwLjIsMC4xIC0xLjcsMy40IGMgLTEuNCwwIC0yLjksLTAuOSAtMy42LC0xLjggMCwtMC4xIC0xLjMsLTMuOCAtMS4zLC0zLjkgLTAuNiwtMiAtMC42LC0yLjIgLTEuOCwtMy42IC0xLjIsLTEuMyAtMS45LC0xLjIgLTMuNCwtMS45IGwgLTAuMSwwLjYgYyAtMC42LC0xLjggLTYuMiwtNi41IC04LjEsLTcuNCAtMi4yLC0xLjIgLTMuMiwtMS4yIC02LC0xLjcgLTIuMSwtMC4zIC01LjQsMC4zIC03LC0wLjUgMC40LC0xLjUgMS42LC0wLjYgMS42LC0yLjIgMCwtMC41IC0wLjcsLTAuNCAtMS4yLC0wLjQgMC42LC0xLjIgLTAuMywtMSAtMS4zLC0xIDAuMSwtMC4zIDAuNCwtMC42IDAuNCwtMSAwLC0wLjMgLTAuMywtMC40IC0wLjYsLTAuNCAtMC40LDAgMCwwLjYgLTEuMywwLjYgLTAuMywtMSAtMC4zLC0xLjMgLTEuNSwtMS40IHYgMS42IGggLTEuMyB2IDAuNiBjIDAsMC44IDAuNiwxLjUgMSwyLjIgLTAuNCwwLjcgLTAuMywyIC0xLjQsMiAtMC42LDAgLTEuOCwtMS41IC0zLjEsLTEuOSAtMS4zLC0wLjQgLTMsMC41IC0zLC0xLjUgLTAsLTAuOSAyLjEsLTIuNSAyLjgsLTMuNSBsIDAsMCB6XCJ9XSxpW1wiQUMuSUMuUk9ERU5UXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTE3LjIsODAuMyBjIDAuNiwxLjIgMC42LDEuNyAxLjUsMi42IDAuNiwwLjcgMS44LDEuMiAxLjksMi4yIC0yLC0wLjEgLTQuMiwtMy4zIC00LjQsLTUuMyAtMi4xLC0wLjUgLTguNCwtMy42IC0xMC45LC00LjcgLTMuMSwtMS4zIC04LjMsLTIuNyAtMTIuNywtMi43IGggLTIuMiBjIC00LDAgLTksMi41IC0xMS4zLDQuMiAtMywyLjIgLTUuMiw1LjIgLTUuMiwxMC40IHYgMC43IGMgLTQuNiwxLjEgLTExLjcsOC40IC0xMS43LDEzLjkgdiAyLjQgYyAwLDYuMiA3LjcsMTAgMTEuOCwxMi43IDIuNSwxLjcgNC43LDMuMyA3LDUuMSAyLjIsMS43IDQuNyw0LjIgNi43LDUuNSAtMi4xLC05IC0yMi40LC0xMi43IC0yMi40LC0yNS4xIDAsLTQuNSA0LjksLTkuMyA4LjUsLTEwLjIgLTAuMSwwLjYgLTAuMywwLjYgLTAuMywxLjMgdiAwLjUgYyAwLDQuNSA3LjgsNC4xIDExLjUsMyA1LjEsLTEuNSA4LjEsLTIuMiAxMy42LC0xLjIgNS40LDEuMSA4LjMsMS41IDEyLjcsMy42IDMuNywxLjkgMiwxLjIgNC4yLDMuOCAxLjEsMS4zIDEsMS4xIDIuOSwxLjMgMC44LDAuMSAxLjgsMSAyLjQsMS41IGggMS43IGMgLTEuMywtMi42IC00LjksLTIuOSAtNS42LC01LjggMC44LC0xLjUgMS43LC0xLjcgMy45LC0xLjcgMC44LDAgMSwwLjIgMS43LDAuMyAtMC4zLC0wLjYgLTAuNiwtMS43IDAuNSwtMS43IGggMS45IGMgNC41LDAgOSwyLjUgMTIuNywwIDAsLTMgMC40LC0yLjIgLTAuOSwtNC45IC0wLjUsLTAuOCAtMi4xLC0yLjcgLTIuOCwtMy40IC0xLjYsLTEuNSAtNS43LC00LjEgLTYuNywtNS41IDAsLTIuOCAtMC40LC0zLjQgLTIuNywtMy45IGwgLTAuNSwxIDAuNSwyLjcgLTEsMC4zIHYgMC45IGggLTAuOCBjIC0wLjIsLTIuNCAtMS4yLC01LjggLTMuNiwtNS44IGggLTAuMiBjIC0xLjgsLTRlLTQgLTEuNSwxIC0yLDEuOSB6IG0gOS41LDI0LjYgaCAxLjIgYyAtMC4yLC0yLjYgLTUuMSwtMi44IC01LjQsLTUuNCBsIC0yLjIsMC4zIGMgMC4yLDEuNSAxLjEsMi45IDIuNCwzLjUgMC45LDAuMyAxLjUsMCAyLjMsMC42IDAuNCwwLjMgMS4xLDEgMS43LDEgeiBtIC00NS4xLC02LjEgYyAxLjIsMS44IDUuOSw0LjIgOC44LDQuMiAxLDAgMS42LC0wLjggMS45LC0xLjUgLTAuOSwtMS4zIC0yLjksLTIuOCAtNC43LC0zLjEgLTMuNywtMC44IC0yLjksMC4xIC02LDAuNCBsIDAsMCB6IG0gOS41LC0xLjkgYyAxLjMsMiA1LDIuOSA4LjMsMi45IDAuOCwwIDEuNCwtMC40IDEuOSwtMC43IC0yLC0yLjkgLTYuMSwtMi42IC0xMC4yLC0yLjIgelwifV0saVtcIkFDLklDLlBIQVJNQUNZXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODMuMyw3NC41IGggMTMuMiBjIDMsMCA2LjIsMy44IDYsNy4zIC0wLjEsMy42IC0yLjksNi42IC02LjUsNi42IEggODMuMyBWIDc0LjUgeiBtIC04LjcsNDUuOSBoIDguNyBWIDk4IGggMi40IGMgMC42LDAgMTMuNiwxNi4xIDEzLjYsMTcuMiAwLDAuNiAtMTMuNiwxNi42IC0xNSwxOS4zIGwgMTAuNSwtMC4xIDEwLjMsLTEyLjIgOS42LDEyLjMgMTAuOSwtMCAtMTUuMiwtMTkuMyAxNC40LC0xNy44IC0xMC4yLC0wLjEgLTkuNywxMC44IC03LjQsLTEwIGMgOC41LC0yIDE0LjEsLTYuOCAxNC4xLC0xNy4yIDAsLTguMSAtNywtMTUuMyAtMTUsLTE1LjMgSCA3NC42IHYgNTQuOCB6XCJ9XSxpW1wiR1IuSU4uSUMuRURVQ0FUSU9OQUwgRkFDSUxJVElFUyBJTkZSQVNUUlVDVFVSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk5LjYsMTA3LjEgaCAtMTQuOCB2IDMxLjcgaCAzMiB2IC0zMS43IGggLTE0LjggViA5NS4yIGMgMCwtMC42IDYuNSwtMyA3LjUsLTMuNCAxLjMsLTAuNSA2LjksLTMgNy45LC0zIC0wLjMsLTAuNCAtMTQuNywtNi4zIC0xNS43LC02LjMgaCAtMi4zIHYgMjQuNSB6IG0gLTMuMSwtNDUgLTUuNiwxNC44IDEuNywwIDEuMywtMy44IDAuMSwtMC4xIDAuMSwwIDYuOCwwIDAuMSwwIDAuMSwwLjEgMS4zLDMuOCAxLjcsMCAtNS42LC0xNC44IC0yLjEsMCB6IG0gMC44LDEuOCAwLjIsMC4xIDAuMiwtMC4xIDIuOCw3LjUgMC4xLDAuMyAtMC4zLDAgLTUuNiwwIC0wLjMsMCAwLjEsLTAuMyAyLjgsLTcuNSB6IG0gLTE0LjgsLTEuOCA4LjMsMCAwLDEuMyAtNi41LDAgLTAuMiwwIDAsMC4yIDAsNC41IDAsMC4yIDAuMiwwIDUuOCwwIDAsMS4zIC01LjgsMCAtMC4yLDAgMCwwLjIgMCw3IC0xLjYsMCAwLC0xNC44IHogbSAzMC4zLC0wLjMgYyAwLjksMS41ZS01IDEuNywwLjEgMi41LDAuNCBsIDAsMCBjIDAuOCwwLjIgMS40LDAuNiAyLjEsMSBsIDAsMS42IGMgLTAuNiwtMC41IC0xLjMsLTAuOSAtMS45LC0xLjIgLTAuOCwtMC4zIC0xLjcsLTAuNSAtMi42LC0wLjUgLTEuOCwxLjRlLTUgLTMuMiwwLjYgLTQuMSwxLjcgLTEsMS4xIC0xLjQsMi43IC0xLjQsNC43IC0xZS01LDIgMC41LDMuNiAxLjQsNC43IDEsMS4xIDIuNCwxLjcgNC4xLDEuNiAwLjksMmUtNiAxLjgsLTAuMiAyLjYsLTAuNSAwLjcsLTAuMyAxLjMsLTAuNyAxLjksLTEuMiBsIDAsMS42IGMgLTAuNywwLjQgLTEuNCwwLjggLTIuMSwxIC0wLjgsMC4yIC0xLjYsMC40IC0yLjUsMC40IC0yLjMsMCAtNCwtMC43IC01LjMsLTIgLTEuMywtMS40IC0xLjksLTMuMiAtMS45LC01LjYgMCwtMi40IDAuNiwtNC4zIDEuOSwtNS42IDEuMywtMS40IDMsLTIgNS4zLC0yIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5EUklaWkxFLklOVEVSTUlUVEVOVCBMSUdIVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6XCJyZ2IoMCwgMTI4LCAwKVwiLGQ6XCJtIDEwMCw4Mi43IGMgLTUuNSwwIC0xMCw0LjUgLTEwLDEwIDAsNS41IDQuNSwxMCAxMCwxMCAwLjEsMCAwLjEsMCAwLjIsMCBsIC0wLjIsMC4yIGMgMC45LDUgLTguNCwxNC40IC04LjQsMTQuNCAxMi44LDAuMSAxOC40LC0xMy40IDE4LjMsLTIzLjQgbCAtMCwwIGMgMCwtMC40IDAuMSwtMC44IDAuMSwtMS4yIDAsLTUuNSAtNC41LC0xMCAtMTAsLTEwIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5GT0cuU0tZIE9CU0NVUkVEXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigyNTUsIDI0NywgMClcIixkOlwibSA0OS42LDU5LjcgMCw4IDEwMC45LDAgMCwtOCAtMTAwLjksMCB6IG0gMCw3MS42IDAsOCAxMDAuOSwwIDAsLTggLTEwMC45LDAgeiBtIDAsLTM1LjYgMCw4IDEwMC45LDAgMCwtOCAtMTAwLjksMCB6XCJ9XSxpW1wiQVRNT1NQSEVSSUMuSUMuSEFJTC5MSUdIVCBOT1QgQVNTT0NJQVRFRCBXSVRIIFRIVU5ERVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDE5OCwgMTYsIDMzKVwiLGQ6XCJtIDEwMCw0NS41IC0wLjksMi4xIC0xNiwzNiAtMC42LDEuNCAxLjUsMCAzMiwwIDEuNSwwIC0wLjYsLTEuNCAtMTYsLTM2IEwgMTAwLDQ1LjUgeiBtIC0yMS40LDQ2LjcgMC40LDEuMyAyMCw2MCAwLjksMi45IDAuOSwtMi45IDIwLC02MCAwLjQsLTEuMyAtMS40LDAgLTQwLDAgLTEuNCwwIHogbSAyLjgsMiAzNy4yLDAgTCAxMDAsMTUwIDgxLjQsOTQuMSB6XCJ9XSxpW1wiQVRNT1NQSEVSSUMuSUMuUkFJTi5JTlRFUk1JVFRFTlQgTElHSFRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOlwicmdiKDAsIDEyOCwgMClcIixkOlwibSAxMDAsNzkuOCBjIC0xMS4yLDAgLTIwLjIsOSAtMjAuMiwyMC4yIDAsMTEuMiA5LDIwLjIgMjAuMiwyMC4yIDExLjIsMCAyMC4yLC05IDIwLjIsLTIwLjIgMCwtMTEuMiAtOSwtMjAuMiAtMjAuMiwtMjAuMiB6XCJ9XSxpW1wiQVRNT1NQSEVSSUMuSUMuRFVTVCBPUiBTQU5ELkxJR0hUIFRPIE1PREVSQVRFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigxNzMsIDEwNSwgNzUpXCIsZDpcIm0gMTQwLjcsODUgLTIsMiAxMywxMyAtMTMsMTMgMiwyIDE0LC0xNCAxLC0xIC0xLC0xIEwgMTQwLjcsODUgeiBtIC05My41LDEzLjYgMCwyLjggMTA2LjUsMCAwLC0yLjggLTEwNi41LDAgeiBNIDk4LjUsNjIuMyBjIC0zLjIsMCAtNi40LDAuOCAtOS4yLDIuMiAtMy43LDEuOCAtNi45LDQuNCAtOS4zLDcuMyAtMi4zLDIuOSAtMy45LDYuMSAtMy45LDkuMyAwLDUuNiAyLjksOS45IDYuOSwxMy4yIDQsMy4zIDksNS44IDEzLjksOC4zIDQuOSwyLjUgOS43LDQuOSAxMy4xLDcuNyAzLjQsMi44IDUuNCw1LjggNS40LDEwLjEgMCwzLjYgLTQsOSAtMTAsMTEuNiAtNiwyLjYgLTEzLjYsMi43IC0yMC45LC0zLjQgbCAtMi43LDMuMiBjIDguNCw3LjEgMTgsNy4yIDI1LjMsNCA3LjIsLTMuMSAxMi41LC05LjIgMTIuNSwtMTUuNCAwLC01LjYgLTIuOSwtMTAgLTYuOSwtMTMuMyAtNCwtMy4zIC05LC01LjggLTEzLjksLTguMiAtNC45LC0yLjUgLTkuNywtNC45IC0xMy4xLC03LjcgLTMuNCwtMi44IC01LjQsLTUuOCAtNS40LC0xMCAwLC0xLjcgMSwtNC4zIDIuOSwtNi43IDEuOSwtMi40IDQuNywtNC43IDcuOCwtNi4yIDYuMiwtMyAxMy41LC0zLjEgMTkuOSw0LjQgbCAzLjIsLTIuNyBDIDEwOS41LDY0LjQgMTAzLjksNjIuMyA5OC41LDYyLjMgelwifV0saVtcIkFUTU9TUEhFUklDLklDLlNOT1cuSU5URVJNSVRURU5UIExJR0hUXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigwLCAxMjgsIDApXCIsZDpcIm0gMTExLjUsNzguOSAtMjYuNCw0MCAzLjMsMi4yIDI2LjQsLTQwIC0zLjMsLTIuMiB6IG0gLTIzLjEsMCAtMy4zLDIuMiAyNi40LDQwIDMuMywtMi4yIC0yNi40LC00MCB6IE0gODAsOTggbCAwLDQgNDAsMCAwLC00IC00MCwwIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5TVE9STVMuVEhVTkRFUlNUT1JNIExJR0hUIFRPIE1PREVSQVRFIC0gV0lUSCBIQUlMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigxOTgsIDE2LCAzMylcIixkOlwiTSAxMDEgNTEuOSBMIDk5LjcgNTQuNCBMIDg1LjggODIuMyBMIDg0LjggODQuMyBMIDg3IDg0LjMgTCAxMTQuOSA4NC4zIEwgMTE3LjIgODQuMyBMIDExNi4yIDgyLjMgTCAxMDIuMiA1NC40IEwgMTAxIDUxLjkgeiBNIDEwMSA1OC4xIEwgMTEyLjcgODEuNSBMIDg5LjMgODEuNSBMIDEwMSA1OC4xIHogTSA3OC4zIDg3LjcgTCA3OC4zIDkwLjUgTCA4My45IDkwLjUgTCA4My45IDE0NSBMIDg2LjcgMTQ1IEwgODYuNyA5MC41IEwgMTE3LjggOTAuNSBMIDEwMi44IDExNi40IEwgMTAyLjQgMTE3LjEgTCAxMDIuOSAxMTcuOCBMIDExNy44IDE0MC45IEwgMTExLjIgMTM2LjggTCAxMDkuOCAxMzkuMiBMIDEyMC45IDE0Ni4yIEwgMTIzLjMgMTQ3LjcgTCAxMjMgMTQ0LjkgTCAxMjEuNyAxMzAuOSBMIDExOC45IDEzMS4yIEwgMTE5LjYgMTM4LjYgTCAxMDUuNyAxMTcgTCAxMjEuNSA4OS44IEwgMTIyLjcgODcuNyBMIDEyMC4zIDg3LjcgTCA3OC4zIDg3LjcgeiBcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5TVE9STVMuRlVOTkVMIENMT1VEIChUT1JOQURPL1dBVEVSU1BPVVQpXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigxOTgsIDE2LCAzMylcIixkOlwiTSAxMjUuNyw1OS4xIDExMi40LDcyLjQgMTEyLDcyLjggbCAwLDAuNiAwLDUzLjMgMCwwLjYgMC40LDAuNCAxMy4zLDEzLjMgMS45LC0xLjkgLTEyLjksLTEyLjkgMCwtNTIuMiAxMi45LC0xMi45IC0xLjksLTEuOSB6IG0gLTUxLjUsMCAtMS45LDEuOSAxMi45LDEyLjkgMCw1Mi4yIEwgNzIuNCwxMzkuMSA3NC4zLDE0MC45IDg3LjYsMTI3LjYgODgsMTI3LjIgbCAwLC0wLjYgMCwtNTMuMyAwLC0wLjYgTCA4Ny42LDcyLjQgNzQuMyw1OS4xIHpcIn1dLGlbXCJBVE1PU1BIRVJJQy5JQy5UUk9QSUNBTCBTVE9STSBTWVNURU1TLlRST1BJQ0FMIFNUT1JNXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDpcInJnYigxOTgsIDE2LCAzMylcIixkOlwiTSAxMTIuMSA1NSBDIDk2LjkgNTkuOSA3Ni43IDgxLjggODIuMiAxMDEuNCBDIDgyLjkgMTEwLjYgOTAuNiAxMTcuOSAxMDAgMTE3LjkgQyAxMDAgMTE3LjkgMTAwIDExNy45IDEwMC4xIDExNy45IEMgOTkuMyAxMjguMiA4Ny45IDE0NSA4Ny45IDE0NSBDIDEwMy4xIDE0MC4xIDEyMy4zIDExOC4yIDExNy44IDk4LjYgQyAxMTcuMSA4OS40IDEwOS40IDgyLjEgMTAwIDgyLjEgQyAxMDAgODIuMSAxMDAgODIuMSA5OS45IDgyLjEgQyAxMDAuNyA3MS44IDExMi4xIDU1IDExMi4xIDU1IHogTSAxMDAgODQuNSBDIDEwNi44IDg0LjUgMTEyLjUgODguOCAxMTQuNiA5NC44IEMgMTE0LjggOTUuMiAxMTQuOSA5NS42IDExNSA5NiBDIDExNSA5Ni4xIDExNSA5Ni4xIDExNSA5Ni4yIEMgMTE1LjEgOTYuNiAxMTUuMiA5Ni45IDExNS4zIDk3LjMgQyAxMTUuNCA5OC4xIDExNS41IDk5LjEgMTE1LjUgMTAwIEMgMTE1LjUgMTAxLjEgMTE1LjQgMTAyLjEgMTE1LjIgMTAzLjEgQyAxMTUgMTA0LjEgMTE0LjcgMTA1IDExNC40IDEwNS44IEMgMTE0LjQgMTA1LjkgMTE0LjMgMTA1LjkgMTE0LjMgMTA2IEMgMTE0LjEgMTA2LjQgMTE0IDEwNi43IDExMy44IDEwNy4xIEMgMTEzLjcgMTA3LjIgMTEzLjcgMTA3LjMgMTEzLjcgMTA3LjMgQyAxMTMuNiAxMDcuNCAxMTMuNiAxMDcuNSAxMTMuNSAxMDcuNiBDIDExMy4zIDEwNy45IDExMy4xIDEwOC4zIDExMi45IDEwOC42IEMgMTEyLjQgMTA5LjMgMTExLjkgMTEwIDExMS4zIDExMC42IEMgMTExLjIgMTEwLjcgMTExLjEgMTEwLjggMTExLjEgMTEwLjkgQyAxMTAuOCAxMTEuMSAxMTAuNSAxMTEuNCAxMTAuMyAxMTEuNiBDIDExMC4yIDExMS43IDExMC4yIDExMS43IDExMC4xIDExMS44IEMgMTA5LjggMTEyIDEwOS41IDExMi4zIDEwOS4yIDExMi41IEMgMTA5LjEgMTEyLjUgMTA5LjEgMTEyLjUgMTA5LjEgMTEyLjUgQyAxMDguOSAxMTIuNyAxMDguNiAxMTIuOSAxMDguNCAxMTMgQyAxMDguMSAxMTMuMiAxMDcuOCAxMTMuNCAxMDcuNSAxMTMuNiBDIDEwNy40IDExMy42IDEwNy40IDExMy42IDEwNy40IDExMy43IEMgMTA2LjYgMTE0LjEgMTA1LjcgMTE0LjQgMTA0LjkgMTE0LjcgQyAxMDQuNyAxMTQuOCAxMDQuNSAxMTQuOCAxMDQuMyAxMTQuOSBDIDEwNCAxMTUgMTAzLjYgMTE1LjEgMTAzLjMgMTE1LjIgQyAxMDMuMiAxMTUuMiAxMDMuMSAxMTUuMiAxMDMuMSAxMTUuMiBDIDEwMi4xIDExNS40IDEwMS4xIDExNS41IDEwMCAxMTUuNSBDIDkzLjMgMTE1LjUgODcuNiAxMTEuMyA4NS40IDEwNS4zIEMgODUuNCAxMDUuMyA4NS40IDEwNS4yIDg1LjQgMTA1LjIgQyA4NS4zIDEwNC44IDg1LjIgMTA0LjUgODUuMSAxMDQuMiBDIDg1IDEwNCA4NSAxMDMuOSA4NSAxMDMuOCBDIDg0LjkgMTAzLjUgODQuOCAxMDMuMiA4NC44IDEwMi45IEMgODQuNyAxMDIuNSA4NC42IDEwMiA4NC42IDEwMS42IEMgODQuNSAxMDEuMSA4NC41IDEwMC41IDg0LjUgMTAwIEMgODQuNSA5OSA4NC42IDk4IDg0LjggOTcgQyA4NC44IDk3IDg0LjggOTYuOSA4NC44IDk2LjkgQyA4NC45IDk2LjQgODUgOTYgODUuMiA5NS42IEMgODUuMyA5NS4yIDg1LjQgOTQuOSA4NS41IDk0LjUgQyA4NS42IDk0LjMgODUuNiA5NC4yIDg1LjcgOTQgQyA4NS43IDkzLjkgODUuOCA5My44IDg1LjggOTMuOCBDIDg2IDkzLjQgODYuMiA5MyA4Ni4zIDkyLjcgQyA4Ni40IDkyLjYgODYuNCA5Mi41IDg2LjUgOTIuNCBDIDg2LjcgOTIuMSA4Ni45IDkxLjcgODcuMSA5MS40IEMgODcuMyA5MS4xIDg3LjUgOTAuOCA4Ny44IDkwLjUgQyA4OCA5MC4yIDg4LjIgOTAgODguNCA4OS43IEMgODguNiA4OS41IDg4LjggODkuMyA4OC45IDg5LjEgQyA4OSA4OSA4OS4xIDg5IDg5LjIgODguOSBDIDg5LjQgODguNyA4OS43IDg4LjQgODkuOSA4OC4yIEMgOTAuMiA4OCA5MC41IDg3LjggOTAuOCA4Ny41IEMgOTAuOCA4Ny41IDkwLjkgODcuNSA5MC45IDg3LjUgQyA5MS4xIDg3LjMgOTEuNCA4Ny4xIDkxLjYgODcgQyA5MS45IDg2LjggOTIuMiA4Ni42IDkyLjUgODYuNCBDIDkyLjYgODYuNCA5Mi42IDg2LjQgOTIuNiA4Ni4zIEMgOTMuMSA4Ni4xIDkzLjUgODUuOSA5NCA4NS43IEMgOTQuNCA4NS42IDk0LjcgODUuNCA5NS4xIDg1LjMgQyA5NS4zIDg1LjIgOTUuNSA4NS4yIDk1LjcgODUuMSBDIDk2IDg1IDk2LjQgODQuOSA5Ni44IDg0LjggQyA5Ni44IDg0LjggOTYuOCA4NC44IDk2LjkgODQuOCBDIDk2LjkgODQuOCA5Ni45IDg0LjggOTYuOSA4NC44IEMgOTcuNCA4NC43IDk3LjkgODQuNiA5OC40IDg0LjYgQyA5OC45IDg0LjUgOTkuNSA4NC41IDEwMCA4NC41IHogXCJ9XSxpW1wiQUMuSUMuRU1UIFNUQVRJT04gTE9DQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSAxMDAgNTUgTCA3MCA4MCBMIDc1IDgwIEwgNzUgMTI1IEwgMTI1IDEyNSBMIDEyNSA4MCBMIDEzMCA4MCBMIDEwMCA1NSB6IE0gOTUgODAgTCAxMDUgODAgTCAxMDUgOTEuMyBMIDExNC44IDg1LjcgTCAxMTkuOCA5NC4zIEwgMTEwIDEwMCBMIDExOS44IDEwNS43IEwgMTE0LjggMTE0LjMgTCAxMDUgMTA4LjcgTCAxMDUgMTIwIEwgOTUgMTIwIEwgOTUgMTA4LjcgTCA4NS4yIDExNC4zIEwgODAuMiAxMDUuNyBMIDkwIDEwMCBMIDgwLjIgOTQuMyBMIDg1LjIgODUuNyBMIDk1IDkxLjMgTCA5NSA4MCB6IFwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIk0gOTUgODAgTCA5NSA5MS4zIEwgODUuMiA4NS43IEwgODAuMiA5NC4zIEwgOTAgMTAwIEwgODAuMiAxMDUuNyBMIDg1LjIgMTE0LjMgTCA5NSAxMDguNyBMIDk1IDEyMCBMIDEwNSAxMjAgTCAxMDUgMTA4LjcgTCAxMTQuOCAxMTQuMyBMIDExOS44IDEwNS43IEwgMTEwIDEwMCBMIDExOS44IDk0LjMgTCAxMTQuOCA4NS43IEwgMTA1IDkxLjMgTCAxMDUgODAgTCA5NSA4MCB6IFwifV0saVtcIkFDLklDLkhFQUxUSCBERVBBUlRNRU5UIEZBQ0lMSVRZXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTMxLjQsODMuNiAxMDAsNjguNCA2OC41LDgzLjUgeiBtIC0yNi40LDE0LjYgMCwtOS43IC0xMC4xLDAgMCw5LjcgLTkuNSwwIDAsMTAuNCA5LjUsMCAwLDkuNSAxMC4xLDAgMCwtOS41IDkuNiwwIDAsLTEwLjQgeiBtIC0yNy4yLDE5LjUgMCwtMjcuOCAxLjQsMCAwLC0zLjcgLTcuMywwIDAsMy43IDEuMiwwIDAsMjcuOCAtMS4yLDAgMCwzLjggNy4zLDAgMCwtMy44IHogbSA0OC43LDAgMCwtMjcuOCAxLjQsMCAwLC0zLjcgLTcuMywwIDAsMy43IDEuMiwwIDAsMjcuOCAtMS4yLDAgMCwzLjggNy4zLDAgMCwtMy44IHogbSAtNTYuNCw1LjEgMCwzIDU5LjQsMCAwLC0zIHogbSAtMS44LDYuMSAwLDIuOCA2My4yLDAgMCwtMi44IHpcIn1dLGlbXCJBQy5JQy5NRURJQ0FMIEZBQ0lMSVRJRVMgT1VUUEFUSUVOVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgxLjgsNjMuNiAyNi42LDkgMCw2My45IC0yNi42LC05LjEgdiAtNjMuOCBsIDAsMCB6IG0gLTEuNiw2NSAyOS45LDEwLjQgdiAtMTAuNiBoIDkuOCBWIDYxIEggODAuMiB2IDY3LjYgbCAwLDAgeiBtIDIxLjQsLTE4LjEgYyAwLDEuMSAxLDIuNiAyLjIsMi42IDAuOCwwIDEuMiwtMC44IDEuMiwtMS42IHYgLTAuNCBjIDAsLTEuMiAtMS4xLC0zIC0yLC0zIC0wLjgsMCAtMS40LDAuOCAtMS40LDEuNiB2IDAuOCBIIDEwMS41IHogTSA4NS45LDkwLjkgYyAwLjksMC4xIDUuMywxLjggNS4zLDIuNCB2IDcuMSBsIDUuNywyLjIgdiAtNy41IGwgNS41LDEuOSBWIDg5LjEgQyAxMDEuNSw4OC44IDk2LjksODcuMiA5Ni45LDg2LjYgViA3OS41IEwgOTEuMiw3Ny42IHYgNy40IGwgLTUuMywtMiB2IDcuOSB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSA4MS44IDYzLjYgTCA4MS44IDEyNy40IEwgMTA4LjQgMTM2LjYgTCAxMDguNCA3Mi43IEwgODEuOCA2My42IHogTSA5MS4yIDc3LjYgTCA5Ni45IDc5LjUgTCA5Ni45IDg2LjYgQyA5Ni45IDg3LjIgMTAxLjUgODguOSAxMDIuMyA4OS4xIEwgMTAyLjMgOTcgTCA5Ni44IDk1LjIgTCA5Ni44IDEwMi42IEwgOTEuMSAxMDAuNCBMIDkxLjEgOTMuMyBDIDkxLjEgOTIuNiA4Ni44IDkxIDg1LjkgOTAuOSBMIDg1LjkgODMgTCA5MS4yIDg1IEwgOTEuMiA3Ny42IHogTSAxMDIuOSAxMDguMSBDIDEwMy45IDEwOC4xIDEwNSAxMDkuOSAxMDUgMTExLjIgTCAxMDUgMTExLjYgQyAxMDUgMTEyLjQgMTA0LjYgMTEzLjIgMTAzLjggMTEzLjIgQyAxMDIuNSAxMTMuMiAxMDEuNSAxMTEuNiAxMDEuNSAxMTAuNiBMIDEwMS41IDExMC42IEwgMTAxLjUgMTA5LjggQyAxMDEuNSAxMDguOSAxMDIuMSAxMDguMSAxMDIuOSAxMDguMSB6IFwifV0saVtcIkFDLklDLk9QRVJBVElPTi9FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3My43LDg5LjcgYyAwLjQsNC45IDIuMywxMS4zIDMuNCwxNS42IDEuNCw1LjcgMy41LDguNyA2LjEsMTMuMSAyLjIsMy42IDMuNCw5LjYgNS42LDEzLjQgMC43LDEuMyAyLjgsNS4zIDMuNiw2IDAuNSwwLjQgNS41LDQgNS42LDQgMS42LDAgOS43LC0wLjQgMTAuNCwtMC43IDAuMywtMC4xIDQuMSwtNi42IDQuMSwtNyB2IC0zIGggLTcuOCBjIC0yLjcsMCAtNS42LC0xLjMgLTguNCwtMS4zIFYgMTEyLjYgYyAwLC0yLjQgMS4zLC0xNy4zIDIuMSwtMTggMC44LC0wLjcgMTEuNCwtOC4yIDExLjksLTguMyBsIC0xLC04LjUgYyAtMC41LDAuMiAtNS42LDEgLTYsMC45IC0xLC0wLjIgLTQuNywtMS40IC01LjUsLTEuOCAtMS45LDEuMSAtNC40LDEuOCAtNi41LDIuNyAtMS42LDAuNyAtMy41LDIuNyAtNS41LDMuNyAtMi40LDEuMiAtMy45LDEuNyAtNi43LDIuNSAtMS42LDAuNCAtMi40LDAuNCAtMy4zLDEuNSAtMC43LDAuOCAtMS43LDEuOCAtMi4yLDIuNSB6IG0gMjcuOCwzNi4xIGMgMCwtOC4xIDIsLTE2LjggMS45LC0yNC44IDAsLTEuMiAwLjIsLTEuOSAwLjIsLTMuMiAwLC0xLjQgMC40LC0xLjQgMS4yLC0yLjIgMS4yLC0xLjEgMi40LC0yIDMuNiwtMyAyLjEsLTEuNyA1LC00LjggNy4xLC02LjEgMC4zLDAuMSAwLjMsMC4yIDAuOSwwLjIgaCA0LjkgYyAwLjIsMC44IDQuOSw2LjQgNS44LDcuNCAyLjYsMy4xIDMuOCwzLjkgMi45LDkuNiAtMC41LDMuMiAtMC43LDguNiAtMSwxMiAtMC4zLDQgLTAuOSw4LjEgLTAuOSwxMi4yIGwgLTI2LjcsLTIuMiB6IG0gLTEuNywxLjMgMjkuOCwyLjIgMi40LC0zMS40IC05LjgsLTEyLjYgLTcuMiwtMC4zIGMgLTAuMiwwIC02LjksNS45IC03LjgsNi41IC0xLjQsMS4xIC0yLjUsMi4zIC0zLjksMy4yIC0xLjcsMS4yIC0xLjIsMy4zIC0xLjQsNS45IC0wLjYsOC40IC0yLjEsMTguMSAtMi4xLDI2LjUgeiBtIDEyLjgsLTkgMC4yLDAgYyAyLjMsMCA2LjUsMi44IDguMSwyLjggaCAzIFYgMTE5LjQgSCAxMjEuNCBjIC0wLjYsMCAtNi4xLC0yLjMgLTcuMiwtMi43IC0xLjUsLTAuNiAtNi42LDAuMyAtOC42LDAuMyB2IDEuMyBsIDcuMSwtMC4zIHogbSAtNS42LC03LjkgMC4yLDEuNSBjIDMuMSwtMC43IDUuNiwtMS40IDguNywtMC44IDEuMywwLjMgMi44LDAuNiA0LjIsMC45IDIuNSwwLjYgMi44LDEuMiAzLjMsLTEgLTEuMywwIC02LjgsLTEuMyAtOC40LC0xLjcgLTIuNSwtMC43IC01LjUsMC40IC04LjEsMS4xIHogbSAtMC4yLC04LjEgMC41LDEuNCA1LjcsLTEuOSA1LDMuNyA4LC0xIC0wLjMsLTEuNyAtNy4zLDEgYyAtMC44LC0wLjYgLTQuNywtMy42IC01LjMsLTMuNiAtMC41LDAgLTUuNiwxLjkgLTYuMiwyLjIgeiBtIDEwLjcsLTcuMyBoIDEuMSBjIDEuMiwwIDIuNSwtMS4zIDIuNSwtMi41IHYgLTAuNCBjIDAsLTEuNCAtMS42LC0yLjUgLTMsLTIuNSAtNC40LC0wIC0zLjYsNS41IC0wLjYsNS41IHogTSA2Ny45LDgxLjggYyAwLDEuNSAzLjIsNC40IDQuMiw1LjEgbCAxLjUsLTEuNiAtMi4xLC00LjcgaCAtMi4yIGMgLTAuNSwwIC0xLjUsMS4xIC0xLjUsMS4yIHogTSAxMTAuMiw3MC41IGMgMC44LDAuNCAyLjQsMC44IDIuNCwxLjkgMCwwLjkgLTAuNSwxLjQgLTAuNiwyLjEgbCAtMi42LC0wLjQgYyAtMSwtMC4xIC00LjIsMC42IC01LjgsMC42IHYgMS4xIGMgMCwxLjEgNCwwIDUuNiwwIGggMC40IGMgMS43LDAgNS40LDEuMiA2LjIsMS45IDAuNSwwLjUgMS40LDUuMiAxLjksNi4yIDEuOCwtMC45IDEuMywtMC41IDAuNiwtMy4yIC0wLjMsLTAuOSAtMS4xLC0zLjEgLTEuMSwtNCBsIC0zLjksLTEuNiAxLjIsLTIuMyBjIC0xLjEsLTIuMSAtMC44LC0zLjYgLTQsLTMuNiBsIC0wLjMsMS4yIHogbSAtMzYuNSw2LjYgYyAwLDAuOSAyLDQuNiAyLjIsNiAwLjMsMC4xIDEuMSwwLjQgMS4xLDAuNCAwLjMsMCAyLjEsLTAuOSAyLjgsLTEuMSAtMC43LC0zLjEgLTEuNywtNi42IC00LjMsLTcuOSAtMC4yLDAuNyAtMS43LDIuMyAtMS43LDIuNSB6IG0gNS45LC0zLjYgYyAxLjksNC4xIDAuNCwzLjcgNC4yLDcgbCAyLjQsLTEuMiB2IC0zLjggYyAwLC0xLjUgLTEuMiwtMy42IC0xLjMsLTUuMyBsIC0xLjksLTAuMiBoIC0xLjcgbCAtMS42LDMuNyB6IG0gNy42LC0yLjggMi41LDUgMy45LC0wLjggYyAwLC0xIDAuNiwtMi41IDAuNiwtMy40IDAsLTIuMiAtMS4xLC00LjcgLTEuMSwtNi45IEggODguNSBsIC0xLjMsNiB6IE0gOTcuOCw2Mi44IGMgMCwwLjYgMC4yLDcuMiAwLjMsNy40IDAuMywxIDMuNywyLjYgNS41LDIuNCAwLjksLTAuMSAyLjUsLTAuMyAzLjUsLTAuNCAxLjgsLTAuMiAxLjIsLTAuNiAxLjUsLTIuNiAwLjIsLTEuOSAwLjYsLTQuOSAxLjEsLTYuOCAtMC40LC0wLjggLTIuNCwtNC43IC0zLjIsLTQuNyBoIC01LjEgYyAtMC43LDAgLTMsNCAtMy41LDQuNyB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSAxMTUuNiA4Ni42IEMgMTEzLjUgODggMTEwLjYgOTEgMTA4LjUgOTIuNyBDIDEwNy4zIDkzLjcgMTA2IDk0LjYgMTA0LjggOTUuNyBDIDEwNCA5Ni40IDEwMy42IDk2LjUgMTAzLjYgOTcuOCBDIDEwMy42IDk5LjIgMTAzLjQgOTkuOSAxMDMuNCAxMDEuMSBDIDEwMy41IDEwOS4xIDEwMS41IDExNy44IDEwMS41IDEyNS45IEwgMTI4LjIgMTI4IEMgMTI4LjIgMTI0IDEyOC44IDExOS45IDEyOS4xIDExNS44IEMgMTI5LjMgMTEyLjQgMTI5LjYgMTA3LjEgMTMwLjEgMTAzLjggQyAxMzEgOTguMSAxMjkuOCA5Ny4zIDEyNy4yIDk0LjIgQyAxMjYuMyA5My4xIDEyMS42IDg3LjYgMTIxLjQgODYuOCBMIDExNi41IDg2LjggQyAxMTUuOSA4Ni44IDExNS45IDg2LjcgMTE1LjYgODYuNiB6IE0gMTE4LjIgODkuMyBDIDExOS41IDg5LjMgMTIxLjEgOTAuNCAxMjEuMSA5MS45IEwgMTIxLjEgOTIuMyBDIDEyMS4xIDkzLjYgMTE5LjggOTQuOSAxMTguNiA5NC45IEwgMTE3LjUgOTQuOSBDIDExNC41IDk0LjkgMTEzLjggODkuMyAxMTguMiA4OS4zIHogTSAxMTMuMSAxMDAgQyAxMTMuNyAxMDAgMTE3LjYgMTAzLjEgMTE4LjQgMTAzLjcgTCAxMjUuNyAxMDIuNiBMIDEyNiAxMDQuMyBMIDExOCAxMDUuMyBMIDExMyAxMDEuNiBMIDEwNy4zIDEwMy42IEwgMTA2LjkgMTAyLjIgQyAxMDcuNSAxMDEuOSAxMTIuNSAxMDAgMTEzLjEgMTAwIHogTSAxMTMuMiAxMDkgQyAxMTMuOSAxMDkgMTE0LjUgMTA5LjEgMTE1LjIgMTA5LjIgQyAxMTYuNyAxMDkuNiAxMjIuMiAxMTAuOSAxMjMuNSAxMTAuOSBDIDEyMyAxMTMgMTIyLjcgMTEyLjQgMTIwLjIgMTExLjggQyAxMTguOCAxMTEuNSAxMTcuMyAxMTEuMiAxMTYgMTEwLjkgQyAxMTIuOCAxMTAuMyAxMTAuNCAxMTEgMTA3LjMgMTExLjggTCAxMDcuMSAxMTAuMyBDIDEwOSAxMDkuOCAxMTEuMiAxMDkuMSAxMTMuMiAxMDkgeiBNIDExMi41IDExNi41IEMgMTEzLjIgMTE2LjUgMTEzLjggMTE2LjYgMTE0LjIgMTE2LjggQyAxMTUuMiAxMTcuMSAxMjAuOCAxMTkuNCAxMjEuNCAxMTkuNCBMIDEyMy45IDExOS40IEwgMTIzLjkgMTIxIEwgMTIxIDEyMSBDIDExOS40IDEyMSAxMTUuMSAxMTguMiAxMTIuOSAxMTguMiBMIDExMi42IDExOC4yIEwgMTA1LjYgMTE4LjQgTCAxMDUuNiAxMTcuMSBDIDEwNy4xIDExNy4xIDExMC40IDExNi41IDExMi41IDExNi41IHpcIn1dLGlbXCJBQy5JQy5UUklBR0VcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSA5MS42IDY5IEMgODcuMyA2OSA4My42IDcxLjUgODMuNiA3NS4zIEwgODMuNiA4My4zIEwgODAuNSA4My4zIEMgNzQgODMuMyA3My42IDg4LjEgNzEuMiA5MS41IEMgNjkuMyA5NC4zIDYzIDk0LjQgNjMgMTAwLjkgTCA2MyAxMzEgTCAxMzcgMTMxIEwgMTM3IDEwMi42IEMgMTM3IDk5LjUgMTM2LjIgOTcuMyAxMzQuNyA5NS42IEMgMTMzLjIgOTQgMTMwLjggOTMuNiAxMjkuMSA5MiBDIDEyNiA4OC44IDEyNi45IDgzLjMgMTE5LjEgODMuMyBMIDExNi4yIDgzLjMgTCAxMTYuMiA3NS41IEMgMTE2LjIgNzEuMyAxMTIuOSA2OSAxMDguNCA2OSBMIDkxLjYgNjkgeiBNIDg5LjkgNzYgTCAxMTAuMSA3NiBMIDExMC4xIDgzLjMgTCA4OS45IDgzLjMgTCA4OS45IDc2IHogTSA5NS4zIDkwLjQgTCAxMDQuNCA5MC40IEwgMTA0LjQgOTkuNCBMIDExMi4yIDk0LjkgTCAxMTYuOCAxMDIuOCBMIDEwOS4xIDEwNy4zIEwgMTE2LjggMTExLjkgTCAxMTIuMSAxMTkuOCBMIDEwNC40IDExNS4zIEwgMTA0LjQgMTI0LjEgTCA5NS4zIDEyNC4xIEwgOTUuMyAxMTUuMyBMIDg3LjYgMTE5LjcgTCA4MyAxMTEuOCBMIDkwLjcgMTA3LjMgTCA4MyAxMDIuOCBMIDg3LjYgOTQuOSBMIDk1LjMgOTkuMyBMIDk1LjMgOTAuNCB6IFwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTEyLjEsMTE5LjggNC42LC03LjkgLTcuNiwtNC42IDcuNywtNC41IC00LjYsLTcuOSAtNy43LDQuNCAtMCwtOC45IC05LjEsMCAwLDguOSAtNy43LC00LjQgLTQuNSw3LjkgNy42LDQuNSAtNy42LDQuNSA0LjUsNy45IDcuNywtNC40IDAsOC44IDkuMSwwIDAsLTguOCB6XCJ9XSxpW1wiQUMuSUMuRU1FUkdFTkNZIFBVQkxJQyBJTkZPUk1BVElPTiBDRU5URVJcIl09W2lbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdLGEoXCJpXCIpXSxpW1wiQUMuSUMuRklSRSBIWURSQU5UXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gODAsMTMxLjMgdiAtMSBjIDEuMywwLjEgNS43LDEuOCA3LjcsMi4yIDIuOCwwLjYgNS44LDEgOS4xLDEgaCA2LjUgYyAzLjQsMCA2LjEsLTAuNCA4LjksLTEgMiwtMC40IDYuNSwtMi4xIDcuNywtMi4yIHYgMSBjIDAsMi45IC0xMi41LDQuNSAtMTYuNiw0LjUgaCAtNi40IGMgLTQuMSwwIC0xNi45LC0xLjYgLTE2LjksLTQuNSBsIDAsMCB6IG0gMTcuOSwtNDMuNCA0LjUsMC4xIDEyLjQsMC40IHYgOC4zIGggNi4zIHYgMTEuOSBoIC02LjMgdiAxNy40IGwgNC41LDEuMyBjIC0xLjIsMS42IC0xMi4yLDMuMyAtMTUuOCwzLjMgaCAtNi40IGMgLTMuNSwwIC0xNSwtMS44IC0xNiwtMy4yIGwgNC42LC0xLjYgMC4xLC0xNy4yIGggLTYuMyBWIDk2LjcgaCA2LjMgdiAtOC4zIGwgMTIuNCwtMC40IDAsMCB6IG0gMjUuNyw1LjkgaCAzIHYgNi43IGggMy4yIHYgMy45IGggLTMuMiB2IDYuNyBoIC0zIFYgOTMuOCB6IG0gLTUwLDAgaCAyLjkgdiAxNy4yIGggLTIuOSB2IC02LjcgaCAtMy41IHYgLTMuOSBoIDMuNCBWIDkzLjggaCAwLjEgeiBtIDI2LjEsLTguMyBjIC01LjIsMCAtOS43LDAuMiAtMTQuOCwwLjIgLTQuNCwwIC0zLjUsLTIuNiAtMS44LC0yLjggMi4xLC0wLjMgNC45LC0wLjEgNi45LC0wLjQgNS4zLC0wLjggMjMuNiwtMC4zIDI4LjEsMC44IDAuMiwxLjggMC40LDEuNSAtMSwyLjQgbCAtMTUuOCwtMC4yIC0xLjYsMC4xIHogbSAtMSwtMjEuMSBoIDIuOSB2IDMuOCBoIDIgdiAxLjggYyAzLjIsMC43IDUuMywxLjEgNy40LDMuMSAxLjMsMS4zIDMuNSw0LjMgMy43LDYuNyBsIC0xMC40LC0wLjMgLTkuOSwwLjEgMC4yLC0wLjEgLTkuMSwwLjUgYyAwLjQsLTQuNyA1LjIsLTkuNyAxMC40LC05LjcgaCAwLjggdiAtMiBoIDIgdiAtMy44IHogbSAtMi42LDEuMiBoIC0yIHYgMi4yIGMgLTUuNywwLjUgLTEwLjYsNi42IC0xMS4xLDEyLjUgLTIuMiwwLjIgLTIuMywxLjMgLTMuNCwyLjEgbCAtMC4yLDEuNiBjIC0wLjMsMi4yIDIsMy45IDMuNiw0LjMgdiA1LjUgaCAtMy42IHYgLTIuNCBoIC04LjMgdiA2LjcgaCAtMy4yIFYgMTA3IGggMy4yIHYgNi4zIGggOC4zIHYgLTIuNCBoIDMuNiBWIDEyMy44IGMgLTIuMywwLjYgLTUuNSwyIC01LjUsNC45IHYgMiBjIDAsNi4zIDEyLjksNy43IDE5LjgsNy43IGggNS45IGMgNi45LDAgMTkuNCwtMS4yIDE5LjQsLTcuNyB2IC0yIGMgMCwtMi44IC0zLC00LjMgLTUuMywtNC45IHYgLTEyLjkgaCAzLjYgdiAyLjQgaCA4LjEgViAxMDcgaCAzLjIgdiAtOS4xIGggLTMuMiB2IC02LjQgaCAtOC4xIHYgMi40IGggLTMuNiB2IC01LjUgYyAxLjYsLTAuMyAzLjYsLTEuOCAzLjYsLTMuOCAwLC0yLjIgLTEuNiwtMy45IC0zLjYsLTQgLTAuNSwtNS45IC01LjcsLTEyLjEgLTExLjQsLTEyLjYgdiAtMi4yIGggLTIgViA2MS42IGggLTcuOSB2IDQgeiBtIDIuOSw0Ny4yIGMgLTQsMCAtOC4zLC01IC04LjEsLTkuMyAwLjIsLTQuNCA0LjIsLTkgOC4zLC05IGggMiBjIDQuMiwwIDguMyw0LjcgOC4zLDkuMSAwLDQuMyAtNCw5LjEgLTguMSw5LjEgaCAtMi40IGwgMCwwIHogbSAtMTAuNSwtOS45IHYgMS44IGMgMCw1LjIgNS40LDEwLjggMTAuNSwxMC44IGggMi40IGMgNS42LDAgMTAuOCwtNS44IDEwLjgsLTExLjggMCwtNiAtNS4zLC0xMS44IC0xMC45LC0xMS44IGggLTIuMSBDIDkzLjcsOTIgODguNCw5Ny41IDg4LjQsMTAzIGwgMCwwIHogbSA5LjUsMC44IGMgMC4zLC0wLjYgMC44LC0xLjggMS40LC0xLjggaCAxLjQgYyAwLjcsMCAxLjQsMS4zIDEuNCwyIDAsMC4xIC0wLjksMS42IC0xLjQsMS42IGggLTEuNCBjIC0wLjYsMC4xIC0xLjEsLTEuMiAtMS40LC0xLjggeiBtIC0yLjksMCAyLjIsNC4zIGggNSBjIDAuNywwIDIuNCwtMy42IDIuOSwtNC4zIGwgLTIuNCwtNC41IGggLTQuOSBjIC0wLjgsMC4xIC0yLjUsMy43IC0yLjksNC41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDk3LjksMTAzLjggYyAwLjMsLTAuNiAwLjgsLTEuOCAxLjQsLTEuOCBoIDEuNCBjIDAuNywwIDEuNCwxLjMgMS40LDIgMCwwLjEgLTAuOSwxLjYgLTEuNCwxLjYgaCAtMS40IGMgLTAuNiwwLjEgLTEuMSwtMS4yIC0xLjQsLTEuOCB6IG0gMS4yLC05LjEgYyAtNC4xLDAgLTguMSw0LjYgLTguMyw5IC0wLjIsNC4zIDQuMSw5LjMgOC4xLDkuMyBsIDIuNCwwIGMgNCwwIDguMSwtNC45IDguMSwtOS4xIDAsLTQuNCAtNC4xLC05LjEgLTguMywtOS4xIGwgLTIsMCB6IG0gLTEuMiw0LjcgNC45LDAgMi40LDQuNSBjIC0wLjQsMC43IC0yLjEsNC4zIC0yLjksNC4zIGwgLTUsMCAtMi4zLC00LjMgYyAwLjQsLTAuOCAyLjEsLTQuNCAyLjksLTQuNSB6IE0gOTguNyw2NC41IGggMi45IHYgMy44IGggMiB2IDEuOCBjIDMuMiwwLjcgNS4zLDEuMSA3LjQsMy4xIDEuMywxLjMgMy41LDQuMyAzLjcsNi43IGwgLTEwLjQsLTAuMyAtOS45LDAuMSAwLjIsLTAuMSAtOS4xLDAuNSBjIDAuNCwtNC43IDUuMiwtOS43IDEwLjQsLTkuNyBoIDAuOCB2IC0yIGggMiB2IC0zLjggeiBtIDEsMjEuMSBjIC01LjIsMCAtOS43LDAuMiAtMTQuOCwwLjIgLTQuNCwwIC0zLjUsLTIuNiAtMS44LC0yLjggMi4xLC0wLjMgNC45LC0wLjEgNi45LC0wLjQgNS4zLC0wLjggMjMuNiwtMC4zIDI4LjEsMC44IDAuMiwxLjggMC40LDEuNSAtMSwyLjQgbCAtMTUuOCwtMC4yIC0xLjYsMC4xIHogbSAtMjYuMSw4LjMgaCAyLjkgdiAxNy4yIGggLTIuOSB2IC02LjcgaCAtMy41IHYgLTMuOSBoIDMuNCBWIDkzLjggaCAwLjEgeiBtIDUwLDAgaCAzIHYgNi43IGggMy4yIHYgMy45IGggLTMuMiB2IDYuNyBoIC0zIFYgOTMuOCB6IG0gLTI1LjcsLTUuOSAtMTIuNCwwLjQgMCw4LjMgLTYuMywwIDAsMTEuOSA2LjMsMCAtMC4xLDE3LjMgLTQuNiwxLjYgYyAxLjEsMS41IDEyLjUsMy4zIDE2LDMuMyBsIDYuNCwwIGMgMy42LDAgMTQuNywtMS43IDE1LjgsLTMuMyBsIC00LjUsLTEuMyAwLC0xNy40IDYuMywwIDAsLTExLjkgLTYuMywwIDAsLTguMyAtMTIuNCwtMC40IC00LjUsLTAuMSB6IG0gMS4yLDQuMiAyLjEsMCBjIDUuNywwIDEwLjksNS44IDEwLjksMTEuOCAwLDUuOSAtNS4yLDExLjggLTEwLjgsMTEuOCBsIC0yLjQsMCBjIC01LjIsMCAtMTAuNSwtNS42IC0xMC41LC0xMC44IGwgMCwtMS44IGMgMCwtNS41IDUuMywtMTEgMTAuNywtMTAuOSB6IE0gODAsMTMxLjMgdiAtMSBjIDEuMywwLjEgNS43LDEuOCA3LjcsMi4yIDIuOCwwLjYgNS44LDEgOS4xLDEgaCA2LjUgYyAzLjQsMCA2LjEsLTAuNCA4LjksLTEgMiwtMC40IDYuNSwtMi4xIDcuNywtMi4yIHYgMSBjIDAsMi45IC0xMi41LDQuNSAtMTYuNiw0LjUgaCAtNi40IGMgLTQuMSwwIC0xNi45LC0xLjYgLTE2LjksLTQuNSBsIDAsMCB6XCJ9XSxpW1wiQUMuSUMuT1RIRVIgV0FURVIgU1VQUExZIExPQ0FUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTEzLjIsMTE2LjUgYyAwLC0yLjkgNC40LC05LjMgNS44LC0xMS44IDIuOCwtNSAzLjEsLTYuOCA0LjYsLTEzIDIuMSwxLjQgMi4yLDQuMyAzLDcuMSAwLjgsMi44IDEuNiw0LjggMi45LDcgMi4yLDMuOCA2LjcsOCA1LDE0LjEgLTEuNiw1LjggLTUuMiw3LjggLTEyLjIsNy41IC01LjgsLTAuMiAtOS4xLC00LjkgLTkuMSwtMTEgeiBtIC0xLjIsLTAuNCB2IDAuNiBjIDAsNy41IDQuNiwxMi4yIDEyLDEyLjIgNi44LDAgMTIsLTQuNiAxMiwtMTEgdiAtMS4zIGMgMCwtNSAtNC43LC0xMCAtNi42LC0xMy44IC0xLjEsLTIuMiAtMS42LC01LjUgLTIuMywtOC4xIC0wLjksLTMuMyAtMi40LC00IC00LjgsLTUuNiAwLDEzLjYgLTEwLjMsMjAgLTEwLjMsMjYuOCB6IG0gNC44LDMuNiBjIDAsMi40IDEuOCw0LjQgMy44LDQuNCAwLjcsMCAxLjUsLTAuNiAxLjcsLTEuMyAtMS42LC0wLjQgLTMuMiwtMi41IC0zLjQsLTQuNCBsIC0yLjEsMS4zIHogTSA4OS4yLDczIHYgMTUuOCBoIC0yLjEgdiAtMTUuOCBsIDAuNiwtMC4xIDEuNSwwLjEgeiBtIC0xMC40LDIuMyBoIDYuNiB2IDExIEggNzguOCB2IC0xMSB6IG0gMzcuMiwxLjEgYyAwLC0wLjUgMC4yLC0wLjYgMC42LC0wLjYgaCAxLjUgYyAwLjUsMCAwLjYsMC4yIDAuNiwwLjYgdiA5LjEgaCAtMi44IHYgLTkuMSB6IG0gLTI0LjksLTEuMyAyMi44LDIuNCB2IDYuNSBsIC0yMi44LDEuOSB2IC0xMC43IHogbSAtMjcsMTEuOCBoIDEyLjkgdiAxIGwgOC4zLDAuMSAxLjIsMi40IDEuNiwwLjMgYyAwLjYsMC4xIDEsLTAuMiAxLjgsLTAuMyBsIDAuOSwtMC42IDAuMiwtMi40IDIyLjgsLTEuNiBjIDEuMiwyLjUgNC4yLDEuNiA2LjYsMSAwLC0wLjcgMC4yLC0wLjggMC4yLC0xLjUgdiAtOS41IGMgMCwtMS41IC0wLjgsLTIuMSAtMi4zLC0yLjEgaCAtMi4xIGMgLTMuOCwwIDAuMiwyLjUgLTUsMS42IC0yLjEsLTAuNCAtNC42LC0wLjQgLTYuNywtMC43IC0zLjMsLTAuNSAtMTAuNCwtMS4zIC0xMy41LC0xLjMgLTAuMSwtMy4xIC01LjYsLTMuMyAtNS43LDAuNCBoIC04LjQgdiAwLjYgaCAtMTMgbCAwLjEsMTIuNCAwLDAgeiBtIDE1LjYsLTQuOCAwLDEuOSA0LjYsMCAwLC0xLjkgeiBtIDAsLTQuMiAwLDEuNyA0LjYsMCAwLC0xLjcgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gOTEsNzUuMSAyMi44LDIuNCB2IDYuNSBsIC0yMi44LDEuOSB2IC0xMC43IHogbSAyNC45LDEuMyBjIDAsLTAuNSAwLjIsLTAuNiAwLjYsLTAuNiBoIDEuNSBjIDAuNSwwIDAuNiwwLjIgMC42LDAuNiB2IDkuMSBoIC0yLjggdiAtOS4xIHogTSA3OC44LDc1LjMgbCAwLDExIDYuNiwwIDAsLTExIC02LjYsMCB6IG0gMC44LDIuNiA0LjcsMCAwLDEuNyAtNC43LDAgMCwtMS43IHogbSAwLDQuMiA0LjcsMCAwLDEuOSAtNC43LDAgMCwtMS45IHogTSAxMjMuNSw5MS44IGMgLTEuNCw2LjIgLTEuOCw4IC00LjYsMTMgLTEuMywyLjUgLTUuOCw4LjkgLTUuOCwxMS44IDAsNi4xIDMuMywxMC44IDkuMSwxMSA3LDAuMiAxMC41LC0xLjcgMTIuMiwtNy41IDEuNywtNi4xIC0yLjgsLTEwLjMgLTUsLTE0LjEgLTEuMywtMi4yIC0yLC00LjMgLTIuOSwtNyAtMC44LC0yLjggLTAuOSwtNS43IC0zLC03LjEgeiBtIC00LjYsMjYuNyBjIDAuMiwxLjkgMS44LDQgMy40LDQuNCAtMC4yLDAuNiAtMSwxLjMgLTEuNywxLjMgLTIsMCAtMy44LC0yLjEgLTMuOCwtNC40IGwgMi4xLC0xLjMgeiBNIDg5LjIsNzMgdiAxNS44IGggLTIuMSB2IC0xNS44IGwgMC42LC0wLjEgMS41LDAuMSB6XCJ9XSxpW1wiQUMuSUMuQkFOS0lORyBGSU5BTkNFIEFORCBJTlNVUkFOQ0UgSU5GUkFTVFJVQ1RVUkVcIl09YShcIuKCrCTCo1wiKSxpW1wiR1IuSU4uSUMuUFVCTElDIFZFTlVFUyBJTkZSQVNUUlVDVFVSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDg3LjksODcuMyBjIC0zLjIsMCAtNS44LDIuNiAtNS44LDUuOCAwLDIuOCAyLjEsNS4yIDQuOCw1LjcgbCAwLDMuMyAtMy44LDAgMCwyIDMuOCwwIDAsOS40IDIsMCAwLC05LjQgMy44LDAgMCwtMiAtMy44LDAgMCwtMy4zIGMgMi43LC0wLjUgNC44LC0yLjggNC44LC01LjcgMCwtMy4yIC0yLjYsLTUuOCAtNS44LC01LjggeiBtIDI0LDAgYyAtMy4yLDAgLTUuOCwyLjYgLTUuOCw1LjggMCwyLjggMi4xLDUuMiA0LjgsNS43IGwgMCwzLjMgLTMuOCwwIDAsMiAzLjgsMCAwLDkuNCAyLDAgMCwtOS40IDMuOCwwIDAsLTIgLTMuOCwwIDAsLTMuMyBjIDIuNywtMC41IDQuOCwtMi44IDQuOCwtNS43IDAsLTMuMiAtMi42LC01LjggLTUuOCwtNS44IHogbSAtMjQsMiBjIDIuMSwwIDMuOCwxLjcgMy44LDMuOCAwLDIuMSAtMS43LDMuOCAtMy44LDMuOCAtMi4xLDAgLTMuOCwtMS43IC0zLjgsLTMuOCAwLC0yLjEgMS43LC0zLjggMy44LC0zLjggeiBtIDI0LDAgYyAyLjEsMCAzLjgsMS43IDMuOCwzLjggMCwyLjEgLTEuNywzLjggLTMuOCwzLjggLTIuMSwwIC0zLjgsLTEuNyAtMy44LC0zLjggMCwtMi4xIDEuNywtMy44IDMuOCwtMy44IHogbSAyNC4yLDM3LjggMCwtMyAtNzIuMSwwIDAsMyB6IG0gLTMsLTYuMiAwLC0yLjggLTY2LjIsMCAwLDIuOCB6IE0gNjYuOCw5OC4yIGMgMCwxLjMgLTAuNywyLjYgLTAuNyw0LjMgLTAsMS44IC0wLjIsMy4xIC0wLjIsNSB2IDMuMiBsIDAuNiwzLjYgaCAyLjcgbCAtMC44LC02LjQgdiAtMS44IGMgMCwtOC4xIDUsLTE3LjkgOS4zLC0yMS41IDUuNiwtNC42IDExLjYsLTkuMSAyMS43LC05LjEgaCAwLjkgYyA5LDAgMTcuMSw0LjQgMjEuNiw4LjggMy4yLDMuMiA0LjEsNC43IDYuNCw4LjcgMS40LDIuNCAzLjMsOC40IDMuMywxMiB2IDQuMyBjIDAsMS40IC0wLjcsMyAtMC43LDQuNCB2IDAuNSBoIDIuNyBsIDAuNiwtNi40IHYgLTMuOCBjIDAsLTEuNiAtMSwtNS4yIC0xLjQsLTYuNiAtMC44LC0yLjUgLTEuMywtMy42IC0yLjMsLTUuNyAtMS44LC0zLjggLTMuOCwtNi40IC02LjcsLTkuMyAtNC42LC00LjYgLTEzLjYsLTkuNiAtMjIuNiwtOS42IGggLTIuNSBjIC03LjgsMCAtMTYuNiw0LjEgLTIwLjYsNy45IC0yLjgsMi43IC00LjQsNC4xIC02LjcsNy41IC0xLjEsMS42IC0xLjUsMyAtMi41LDQuNiAtMC45LDEuNiAtMS4yLDQgLTIsNS4yIHpcIn1dLGlbXCJHUi5JTi5JQy5SRUNSRUFUSU9OQUwgQVJFQVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk2LjQsNzguOCA4LjEsLTAgYyAwLjksMCAyLjQsNS43IDIuNCw2LjkgbCAxLjUsNC4zIGMgMCwwLjQgMiw2LjYgMiw3IHYgMC42IGwgLTE5LjQsLTAgNS40LC0xOC44IHogbSAtMTkuOSwtMCAxMS4xLDAgLTMuNSwxMS4yIGMgMCwxLjcgLTEuOSw1LjcgLTEuOSw2LjkgdiAwLjYgaCAtMjAuOCB2IDcuMiBsIDE4LjUsMCAtMS4yLDMgLTAuMSwwLjggLTIuNiw4LjMgLTMuNiwxMS41IGMgMS4xLDAgOS4zLDAuMSA5LjcsLTAuMSAwLjIsLTAuMSAyLC02LjggMi4zLC03LjcgMC41LC0xLjIgNC41LC0xNSA0LjUsLTE1LjIgdiAtMC42IGwgMjMuNSwwIDYuNywyMy42IDkuOCwwIC0xLjQsLTQuOCAtMC43LC0yLjYgLTIuNCwtNy44IC0wLjksLTIuOCAtMS43LC01LjcgaCAxNS44IHYgLTcuMiBoIC0xOC4yIGwgLTIuOSwtOC45IC0wLjEsLTAuOCAtMSwtMyAtMS43LC02LjIgaCAxMC42IHYgLTcuMiBoIC00Ny45IHYgNy4yIGwgMCwwIDAsMCB6IG0gNjIuMSwxNi45IDAsLTYuMSAtMTUuMiwwIDAsNi4xIHogbSAtNjIuMywwIDAsLTYuMSAtMTQuOSwwIDAsNi4xIHpcIn1dLGlbXCJHUi5JTi5JQy5TUEVDSUFMIE5FRURTIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzMuMSwxMTEuMiBjIDAsLTMuOCAxLC01LjggMi4zLC04LjQgMS40LC0yLjggMy4zLC0zLjggNC42LC01LjggbCAtMS4xLC04LjIgYyAtMi42LDAuNyAtNy43LDYuNSAtOS4yLDkgLTIuNCw0LjEgLTMuOCw3LjkgLTMuOCwxNC4yIHYgMy4zIGMgMCwyLjIgMi4yLDguMSAzLjEsOS42IDIsMy4yIDMsNC41IDUuNSw3LjEgMy42LDMuNiAxMC43LDcuMSAxNy45LDcuMSBoIDEgYyA0LjksMCA5LjksLTEuNiAxMy4xLC0zLjYgMS43LC0xIDguNSwtNi4yIDguNSwtNy44IDAsLTEuMiAtMy4xLC02LjYgLTMuNSwtOC40IC0xLjIsMS41IC0xLjYsMyAtMyw0LjggLTEuMiwxLjUgLTIuMywyLjcgLTMuOCwzLjggLTIuNiwyIC02LjgsNCAtMTEuMyw0IGggLTEuMiBjIC0xMC4yLDAgLTE5LjEsLTkgLTE5LjEsLTE5LjMgdiAtMS40IGwgMCwwIHogbSA4LjksLTM3LjkgYyAwLjUsMC40IDAuNSwyLjkgMC41LDQgTCA4NSwxMDYuOCBsIDI1LjQsMCAxMCwyMyBjIDEuNSwtMC4xIDUuNSwtMS41IDcuMSwtMi4xIDEuMiwtMC40IDYuNSwtMS40IDYuNSwtMi42IHYgLTAuMiBjIDAsLTAuNyAtMS45LC00LjggLTIsLTYuMyBsIC03LjYsMi42IC05LC0yMS42IEggOTEuNiBsIC0wLjQsLTYgaCAxNy4zIHYgLTUuNCBIIDkwLjggbCAtMS4xLC0xMi45IGMgMi42LC0wLjIgNS4yLC0zLjkgNS4yLC02LjcgdiAtMi4yIGggLTAuNSB2IC0wLjggYyAwLC0wLjggLTIuMSwtMy4xIC0yLjcsLTMuNSAtMSwtMC43IC0zLjMsLTEuNiAtNC44LC0xLjMgLTIuMiwwLjQgLTMuMiwwLjggLTQuNCwyIC0wLjcsMC43IC0yLjIsMy4yIC0yLjIsNC4zIHYgMS4yIGMgMCwyLjQgMC44LDMuNiAxLjcsNC45IGwgMCwwIHogbSAwLjUsNCBjIDAsLTEuMSAwLC0zLjYgLTAuNSwtNCAwLDEuMSAtMCwzLjYgMC41LDQgelwifV0saVtcIkdSLklOLklDLkFEVUxUIERBWSBDQVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA3LDExOC4zIHYgLTAuMiBjIDAsLTE1LjUgMjIuNCwtMTQuNyAyMi40LC0wLjYgdiAxLjMgYyAwLDUuNCAtNS4zLDEwLjQgLTEwLjgsMTAuNCBoIC0wLjYgYyAtNS45LDAgLTExLC01LjEgLTExLC0xMSB6IG0gLTEuNiwtMjIuMiBoIDQuNiB2IDEwIGMgMCwwIC0zLjIsMy4zIC0zLjgsNC4zIC0wLjUsMC44IC0yLjIsNC43IC0yLjIsNS44IHYgMi4zIGMgMCw2LjggNi42LDEzLjcgMTMuMywxMy43IGggMSBjIDUuOCwwIDEwLjgsLTUgMTEsLTUgaCA3LjEgdiAtMS45IGggLTMuMiBjIDAuMiwtMC41IDAuOCwtMS4zIDAuOCwtMS45IHYgLTExIGMgMCwtMS45IC0xLC0zLjMgLTIuMSwtNCBoIC0zLjMgbCAtMC44LC0wLjcgYyAxLjEsLTAuMyAyLC0wLjkgMiwtMi4yIHYgLTAuNCBjIDAsLTAuNSAtMSwtMS43IC0xLjYsLTEuNyBoIC01IHYgLTUuNCBjIDAsLTIuNyAtMS41LC00LjIgLTQuMiwtNC4yIGggLTIuMSBjIC01LjksMCAtNC42LDUuOCAtNC42LDExLjYgbCAtMC42LDAuNCBWIDk0LjcgYyAtMC40LC0wLjIgLTAuNCwtMC40IC0wLjgsLTAuNCBoIC01LjQgdiAxLjcgeiBtIC0yMi42LDEgYyAwLC0yLjIgMy4zLC00LjggNC41LC02LjYgMS40LDEgMS40LDEuOCAzLjQsMi44IDEuNCwwLjcgMi42LDEuNCA0LDEuOSAyLjQsMC45IDIuMiwtMC4xIDQuMywxLjkgMC45LDAuOSAxLjgsMi41IDMuNSwyLjUgMC40LDAgMC44LC0wLjggMC44LC0xLjMgdiAtMS4xIGMgMCwtMi44IC0zLjMsLTMuNiAtNS4zLC00LjUgLTIuMywtMC45IC01LjMsLTEuNiAtNi4xLC0zLjggLTAuOCwtMi4zIC0yLjIsLTQuNiAtMi45LC02LjkgLTAuNywtMi4xIC0xLjksLTUuMSAtNC42LC01LjEgaCAtMC40IGMgLTMsMCAtNy40LDcuNSAtOC4xLDEwLjQgLTAuNiwyLjMgLTEuNiw0LjcgLTIuMSw3LjIgLTAuNSwyLjggLTAuNiw1LjIgLTEuMSw4IC0wLjMsMS44IDAuMSwyLjMgLTAuNiw0IC0wLjQsMS4yIC0wLjgsMi4zIC0xLjIsMy40IC0wLjksMi4zIC0xLjcsNC42IC0yLjUsNi44IC0wLjgsMi4xIC00LjksMTEuOCAtNC45LDEzLjUgMCwyLjYgNi4yLDEuMyA3LjcsMS4xIC0wLC0xLjkgLTIuMywtMS42IC0zLjEsLTIuNyAyLjEsLTMuMSAzLjgsLTYuMyA1LjgsLTkuNSAxLC0xLjcgNC42LC05LjIgNS40LC05LjggMC42LDAuNCAzLDMuMSAzLjgsMy45IDEuOSwxLjkgMiwxLjggMi44LDQuOCAxLjEsNC4yIDEuOSw3LjcgMS45LDEzLjEgbCAxLjcsMC4yIDQuMiwtMCBjIDEuMywwIDEuOCwtMC4yIDIuMywtMSAtMC42LC0xIC0zLjEsLTEuNyAtNC42LC0yLjEgdiAtMS4xIGMgMCwtMC40IC0wLjEsLTAuNCAtMC40LC0wLjggdiAtMTIuMSBjIC0xLjUsLTIuMyAtMi45LC00LjkgLTQuNiwtNy4xIC0xLjEsLTEuNiAtMy44LC01LjIgLTMuOCwtNy42IHYgLTIuNSBsIDAsMCB6IG0gMzAuMywtOS43IHYgMS42IGMgMCwxLjUgMi4zLDMuOSA0LjIsMy45IGggMC44IGMgMi4xLDAgNC4yLC0yLjMgNC4yLC00LjUgViA4Ny42IGMgMCwtMi4yIC0yLjIsLTQuMiAtNC41LC00LjIgaCAtMC4xIGMgLTIuMywtMCAtNC42LDIgLTQuNiw0IHogbSAtMjguNCwtMTUuNiB2IDEuNyBjIDAsMC42IDEsMi4xIDEuNCwyLjUgMC42LDAuNiAxLjgsMS4yIDIuOSwxLjIgaCAxIGMgMiwwIDQuMiwtMi4yIDQuMiwtNCB2IC0xLjQgYyAwLC0xLjYgLTIuNSwtMy45IC00LjUsLTMuOSBoIC0wLjcgYyAtMS44LDAgLTQuMiwyLjIgLTQuMiwzLjkgelwifV0saVtcIkdSLklOLklDLkFHUklDVUxUVVJFIEFORCBGT09EIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzkuNSwxMjcuOSBoIC03LjggdiAtMjEuNCBjIDAsLTEgNi44LC0xMy4zIDcuNCwtMTMuNiAxLC0wLjYgMTMuOSwtNy4xIDE0LjEsLTcuMSAwLjUsMCAxMy4yLDYuMyAxNC40LDcgMC40LDAuMyA3LjcsMTMuMSA3LjcsMTMuNyB2IDIxLjQgaCAtNy42IFYgMTEwLjQgSCA3OS41IHYgMTcuNSB6IG0gMzcuNCwtMzkuNCBoIDE1LjQgdiAzOS44IGggLTEyLjEgdiAtMTguOCBoIDIuNiBjIC0wLjUsLTAuOCAtNS44LC05LjggLTUuOCwtMTAgViA4OC41IHogbSAwLjIsLTEuOSBjIDAsLTQuNCAyLjksLTguMiA3LjIsLTguMiBoIDAuNCBjIDQuNSwwIDcuNiwzLjcgNy42LDguMiBoIC0xNS4yIHYgMCB6IE0gMTA1LjIsODIuMSBoIDguOSBjIC0wLjIsMS42IC0wLjksMi41IC0wLjksNSAwLDIgMCwzLjkgMCw1LjggLTEuNCwtMSAtMC45LC0yLjggLTMuMiwtNCAtMS4yLC0wLjYgLTMuOCwtMiAtNC44LC0yLjMgdiAtNC42IHogbSAwLC0yLjggYyAwLC0yLjggMy44LC03LjQgNi45LC03LjQgaCAwLjYgYyAzLjEsMCA1LjUsMS44IDYuNywzLjcgLTAuMiwwLjIgLTQuOCw0LjMgLTQuOCw0LjMgaCAtOS41IHYgLTAuNiB6IG0gLTExLjksMS41IGMgLTMuMiwxLjcgLTYuNiwzLjIgLTkuOSw0LjggLTEuNywwLjkgLTMuMywxLjUgLTUsMi40IC0yLjgsMS40IC0yLjMsMC43IC00LDMuMSAtMC45LDEuMyAtMS44LDMuMiAtMi43LDQuNyAtMC45LDEuNiAtMS45LDMgLTIuOCw0LjYgLTEuNiwyLjkgLTMuNiw2LjUgLTUuNCw5LjEgaCAyLjggdiAyMi41IEggODQgViAxMTQuNyBoIDE5IHYgMTcuMyBoIDMzLjMgViA4Ny41IGMgMCwtNy41IC00LjIsLTEzIC0xMS43LC0xMyBoIC0xLjcgYyAtMC44LC0yLjkgLTUuOSwtNi41IC0xMCwtNi41IGggLTAuNCBjIC02LjQsMCAtMTEsNS45IC0xMSwxMi4xIHYgNC42IGwgLTguMiwtMy45IDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA3OS41LDExMC40IGggMjguMSB2IDE3LjUgaCA3LjYgdiAtMjEuNCBjIDAsLTAuNiAtNy4yLC0xMy40IC03LjcsLTEzLjcgLTEuMSwtMC44IC0xMy44LC03LjEgLTE0LjQsLTcuMSAtMC4xLDAgLTEzLDYuNSAtMTQuMSw3LjEgLTAuNiwwLjQgLTcuMywxMi42IC03LjMsMTMuNiB2IDIxLjQgaCA3LjggdiAtMTcuNSB6IG0gMzcuNCwtMTAuOCBjIDAsMC4xIDUuMyw5LjIgNS44LDEwIGggLTIuNiB2IDE4LjggaCAxMi4xIHYgLTM5LjggaCAtMTUuNCB2IDExIHogbSAwLjIsLTEzIGggMTUuMSBjIDAsLTQuNiAtMywtOC4yIC03LjYsLTguMiBoIC0wLjQgYyAtNC4yLC0wIC03LjIsMy44IC03LjIsOC4yIHogbSAtMTEuOSwwIGMgMS4xLDAuMiAzLjYsMS43IDQuOCwyLjMgMi4yLDEuMSAxLjcsMyAzLjIsMy45IDAsLTIgMCwtMy45IDAsLTUuOCAwLC0yLjUgMC43LC0zLjQgMC45LC01IGggLTguOSB2IDQuNiB6IG0gMCwtNy40IHYgMC42IGggOS41IGMgMCwwIDQuNiwtNC4xIDQuOCwtNC4zIC0xLjIsLTEuOCAtMy42LC0zLjcgLTYuNywtMy43IGggLTAuNiBjIC0zLjEsMCAtNi45LDQuNiAtNi45LDcuNCB6XCJ9XSxpW1wiR1IuSU4uSUMuQUdSSUNVTFRVUkFMIExBQk9SQVRPUllcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5OC40LDc3LjkgLTAuMSwwLjMgMi42LDAuNiAwLC0wLjMgeiBtIDIuMSw3LjMgMC40LC0zLjIgLTAuMywtMC4xIC0wLjQsMy4yIHogbSAtMy44LC0xNi44IDAuMSwtMC4yIC0xLjQsLTAuMyAxLC0yLjYgLTAuNCwtMC4zIC0xLjcsNS43IDAuMSwwIDAuMywtMC4xIDAuNywtMi40IHogbSAtMSw1LjMgYyAwLjgsMCAwLjUsLTEuNyAwLjgsLTIuMyBsIC0wLjQsLTAuMSAtMC40LDIuNCB6IG0gMS40LC01LjUgMC42LC0yLjYgLTAuNCwtMC4xIC0wLjYsMi43IHogbSAwLjIsLTIuNyAwLjEsLTAuMyAtMSwtMC4yIC0wLjEsMC4yIHogbSAxMS44LDY1LjYgMCw1LjYgMy4zLDAgYyAxLjEsMCAxLjksLTAuMiAyLjQsLTAuNyAwLjUsLTAuNSAwLjgsLTEuMiAwLjgsLTIuMSAtMTBlLTYsLTAuOSAtMC4zLC0xLjYgLTAuOCwtMi4xIC0wLjUsLTAuNSAtMS4zLC0wLjcgLTIuNCwtMC43IGwgLTMuMywwIG0gMCwtNi4yIDAsNC42IDMsMCBjIDEsMCAxLjcsLTAuMiAyLjIsLTAuNiAwLjUsLTAuNCAwLjcsLTEgMC43LC0xLjcgLTEwZS02LC0wLjggLTAuMiwtMS4zIC0wLjcsLTEuNyAtMC41LC0wLjQgLTEuMiwtMC42IC0yLjIsLTAuNiBsIC0zLDAgbSAtMi4xLC0xLjcgNS4yLDAgYyAxLjYsMWUtNSAyLjgsMC4zIDMuNiwxIDAuOCwwLjcgMS4zLDEuNiAxLjMsMi44IC0yZS01LDAuOSAtMC4yLDEuNyAtMC43LDIuMiAtMC40LDAuNSAtMS4xLDAuOSAtMS45LDEgMSwwLjIgMS44LDAuNyAyLjMsMS40IDAuNiwwLjcgMC44LDEuNSAwLjgsMi42IC0xZS01LDEuNCAtMC41LDIuNCAtMS40LDMuMSAtMC45LDAuNyAtMi4yLDEuMSAtMy45LDEuMSBsIC01LjQsMCAwLC0xNS4yIG0gLTkuMiwyIC0yLjgsNy41IDUuNiwwIC0yLjgsLTcuNSBtIC0xLjIsLTIgMi4zLDAgNS44LDE1LjIgLTIuMSwwIC0xLjQsLTMuOSAtNi44LDAgLTEuNCwzLjkgLTIuMiwwIDUuOCwtMTUuMiBtIC0xNiwwIDIuMSwwIDAsMTMuNCA3LjQsMCAwLDEuNyAtOS40LDAgMCwtMTUuMiBNIDk4LjYsOTIuNSBjIDAuOSwtMC4yIDAuOCwtMS44IDEuMSwtMi42IGwgMC45LDAuNCAtMS40LDQuMiAtMC42LC0yIHogbSAtMC4yLC0wLjQgMC4xLDAuMiBjIC0wLjUsLTAuMSAtMC44LC0xLjMgLTAuOCwtMS45IGwgMC40LDAuNiAtMC4zLC0yLjIgMS42LDAuOCBjIC0wLDAuNyAtMC40LDIuMyAtMC45LDIuNCB6IG0gLTAuOSwtMi4zIC0wLjYsLTEuNCBjIDAuNCwwLjEgMC42LDAuMyAwLjYsMC45IHYgMC41IHogbSAyLjYsLTQuNCAtMC42LDMuOSAtMS43LC0wLjggdiAtMy40IC0wLjMgbCAyLjMsMC42IHogbSAtMi42LC0xLjEgMC40LDAuMSB2IDAuNCBoIC0wLjQgdiAzLjUgbCAtMC44LC0wLjQgMC4xLDAuNCBoIC0wLjIgYyAwLC0wLjkgLTEuMiwtMi44IC0xLjYsLTMuNSAwLjEsLTAuMSAwLjEsLTAuMSAwLjEsLTAuNCB2IC0wLjQgbCAyLjQsMC42IDAsLTAuNCB6IG0gNi4xLC0xLjcgMi41LDAuNiB2IDAuNCBjIDAsMC4yIDAsMC4yIDAuMSwwLjMgLTEuMiwwIC0xLjksMC40IC0yLjgsMC44IGwgMC4yLC0yIHogbSAtNi4xLDEuNyAtMi40LC0wLjggMC4xLC0xLjggdiAtMSBsIDIuNCwwLjUgLTAuMiwzIHogbSA4LjYsLTEuNiBjIC0wLjMsMCAtMi4zLC0wLjQgLTIuNCwtMC42IDAsMCAwLjIsLTIuMyAwLjIsLTIuNyBsIDIuMiwwLjQgMC4xLDEuNiAtMCwxLjIgeiBtIC0xMi43LC0yLjQgYyAwLjQsMCAwLjcsMC4yIDEuMSwwLjIgMC44LDAuMiAwLjQsMC4xIDAuNCwwLjcgdiAyLjEgYyAtMC4zLC0wIC0wLjcsLTAuMiAtMSwtMC4zIC0wLjcsLTAuMiAtMC41LDAuMSAtMC41LC0wLjQgdiAtMi40IHogbSAxMC43LC00LjIgMS43LDAuNCAwLjMsMyAtMi4yLC0wLjQgMC4yLC0zIHogbSAtNi40LDUuMiB2IC0wLjQgbCAtMi40LC0wLjUgMC4zLC0yLjggMi40LDAuNSAtMC4yLDIuOSBoIDAuMyB2IDAuNCBoIC0wLjMgeiBtIC00LC00LjIgMS42LDAuNCAtMC4zLDIuOSAtMS41LC0wLjQgMC4yLC0yLjkgeiBtIDcuNiwxLjQgMC4zLC0zLjEgMi40LDAuNiAtMC4zLDMgLTIuNCwtMC41IHogbSAtMC40LC0wLjEgMC40LDAuMSB2IDAuNCBjIDAuNCwwIDIuMywwLjQgMi40LDAuNiAwLDAuMSAtMC4yLDIuMyAtMC4yLDIuNiAtMC44LDAgLTEuNiwtMC40IC0yLjMsLTAuNCAtMC4yLDAgLTAuMiwwLjIgLTAuMiwwLjQgbCAyLjQsMC41IC0wLjIsMi4yIGggMC4yIGMgLTAuNSwwLjcgLTEuMSwxLjYgLTEuNCwyLjQgLTAuMywwLjggLTAuNywyLjEgLTEuMSwyLjggbCAtMC45LC0wLjQgMC42LC00IGggLTAuMiBsIC0wLjIsLTAuMSB2IC0wLjQgbCAtMi4zLC0wLjcgMC4yLC0zIDIuNSwwLjUgdiAtMC4zIGggMC40IGwgMC4yLC0yLjggaCAtMC4zIGwgLTAuMywyLjcgLTIuNCwtMC40IDAuMiwtMi45IGMgLTAuMywtMC4xIC0wLjIsMCAtMC4zLC0wLjQgaCAwLjIgbCAwLjIsMC4xIDAuNCwtMy4yIDIuNCwwLjYgLTAuMywzLjEgeiBtIDMuMiwtNS40IHYgLTAuMyBsIDAuMywwLjEgdiAwLjMgYyAxLDAuMSAxLjEsMC4xIDEuMiwxIDAsMC4zIDAuMiwxLjggMC4zLDEuOSBsIC0xLjcsLTAuMyB2IDAuNCBoIC0wLjMgdiAtMC41IGwgLTIuNCwtMC42IDAuMywtMi41IDIuMywwLjQgeiBtIDAuMiwtMC4yIDAuMiwtMi45IGMgMC42LDAuMSAwLjcsMi40IDAuOCwzLjEgbCAtMSwtMC4yIHogbSAtNS4xLC0wLjkgMi40LDAuNSAtMC4zLDIuNiAtMi40LC0wLjYgMC40LC0yLjUgeiBtIDQuOSwwLjggYyAtMy4zLC0wLjggLTIsMCAtMiwtMy4zIGwgMi4yLDAuNCAtMC4yLDIuOSB6IG0gLTQuNCwtMy44IGMgMy4yLDAuOCAxLjksLTAuMiAxLjksMy4yIGwgLTIuMywtMC41IDAuNCwtMi43IHogbSAtMi41LC0wLjQgMi4xLDAuNCAtMC40LDIuNyAtMi4yLC0wLjQgMC40LC0yLjYgeiBtIDcuMSwxLjMgdiAtMC40IGwgLTIuMiwtMC40IDAuMiwtMi42IGMgMC4zLDAgMC43LDAuMSAxLjEsMC4yIDAuNiwwLjEgMC41LDAgMC43LDAuNiAwLjMsMSAwLjMsMC45IDAuMywyLjIgbCAwLjMsMC40IC0wLjQsMC4xIHogbSAtNC4xLC0zLjkgMS44LDAuNCAtMC4yLDIuNiAtMi4xLC0wLjQgMC40LC0yLjYgeiBtIDIuMywtMi4yIDEuNCwyLjYgLTEuNSwtMC4yIDAuMSwtMi40IHogbSAtMS42LC0xLjYgMCwtMC4xIDEuMiwxLjIgLTAuMSwwIGMgMC4zLC0wLjEgMC4zLC0wLjEgMC40LDAuMyBsIC0wLjIsLTAuMiAtMC4yLDIuNiAtMS44LC0wLjQgMC43LC0zLjUgeiBtIC0yLjksMyBjIDAuNSwtMS4xIDAuMywtMy40IDEuOSwtMy40IDAuMywwIDAuMiwwIDAuNSwwLjEgbCAtMC42LDMuNyAtMS44LC0wLjQgeiBtIC0wLjQsLTAuMSAwLjQsMC4xIHYgMC4zIGwgMS44LDAuNCAtMC40LDIuNiAtMi4xLC0wLjQgdiAwLjIgbCAtMC4xLDAuMiAtMC4yLC0wLjEgaCAtMC4yIGwgLTAuNSwyLjYgLTEuNiwtMC4zIHYgMC4zIGMgMC41LDAgMSwwLjMgMS40LDAuMyAwLjIsMCAwLC0wLjIgMC41LC0wLjIgdiAwLjQgbCAyLjIsMC40IC0wLjMsMi40IC0yLjQsLTAuNiB2IDAuNCBsIDIuMywwLjYgLTAuMywzLjEgLTIuNCwtMC42IDAuNCwtMy4yIGggLTAuNCBjIC0wLDAuOCAtMC4zLDEuNyAtMC4zLDIuNCAtMCwwLjggLTAsMC43IC0wLjcsMC41IC0wLjIsLTAgLTAuOSwtMC4xIC0wLjksLTAuMyAtMCwtMC4zIDAuMiwtMiAwLjMsLTIuNCAwLjIsLTEuMiAwLjUsLTAuNCAxLjcsLTAuMyBsIDAuMSwtMC4zIGMgLTAuMiwtMC4xIC0xLjYsLTAuMyAtMS42LC0wLjUgMCwtMC44IDAuNCwtMS41IDAuNCwtMi4zIC0wLjYsMC4xIC0wLjcsMi4zIC0wLjgsMyAtMC4xLDAuOCAtMC40LDIuNiAtMC40LDMuMyAwLDAuOCAtMC4yLDIuNCAtMC4yLDMuNSAwLDEuMyAtMC4xLDIuNCAtMC4xLDMuOCBoIDAuMyB2IC0wLjkgbCAxLjUsMC40IHYgMSBsIC0zLjQsLTAuNSBoIC0wLjEgYyAtNSwwIC04LjgsOS43IC04LjgsMTUuNCAwLDIuMyAwLjgsNS40IDIsNi4yIDAuNywtMS40IDEuMywtMy4xIDIsLTQuNiAwLjgsLTEuNSAxLjQsLTMuMSAyLjEsLTQuNiAwLjMsLTAuNyAwLjcsLTEuNSAxLC0yLjIgMC40LC0wLjggMC44LC0xLjUgMS44LC0xLjIgMC45LDAuMyAxLjksMy4yIDIuMSw0LjYgMC41LDMuOCAwLDkgMC42LDEyLjYgMC43LDQgMi4zLDYuNCA1LjQsOCAxLC0wLjQgMi41LC0wLjYgMy40LC0xLjIgMC45LC0wLjYgMS44LC0xLjIgMi40LC0yLjIgMS4yLC0xLjggMiwtNC4xIDIsLTcuMiBsIDAsLTAuNiAtMC4zLC01LjYgdiAtMC4zIGMgMCwtMi43IDAuNSwtOC4zIDIuOCwtOC4zIGggMC4xIGMgMS40LDAgMiwwLjYgMi42LDEuNCAwLjYsMC44IDEuMiwxLjQgMS44LDIuMiAxLjIsMS41IDIuNiwyLjkgMi42LDUuNSB2IDAuNiBsIDAuNCwwLjEgYyAwLjQsLTEuNiAxLjgsLTIuOCAxLjgsLTUuMiB2IC0xLjUgYyAwLC0zLjUgLTEuNCwtNi4yIC0zLC04LjMgLTAuOCwtMS4xIC0xLjgsLTIgLTIuOCwtMi44IC0wLjcsLTAuNSAtMi43LC0xLjkgLTMuOCwtMS45IGwgLTAuOCwtMCAtMi4zLDAuNCBjIC0wLjIsLTAuOCAwLjEsLTIgLTAuMSwtMy4xIC0wLjEsLTAuOCAtMC4yLC0yLjUgLTAuMiwtMy4zIC0wLjIsLTIuMSAtMC41LC00LjIgLTAuOSwtNi4xIC0wLjYsLTMuMyAtMiwtOC4yIC00LjYsLTkuNCB2IDAuMyBsIC0wLjQsLTAuMSAwLjEsLTAuMyAtMC44LC0wLjEgYyAtMC45LC0wLjEgLTEuOSwwLjggLTIuMywxLjMgLTAuMiwwLjMgLTEuNywyIC0wLjgsMiAwLjIsLTAuNiAxLjMsLTIuMiAxLjgsLTIuNCBsIC0wLjgsMi43IHogbSAzLDIwLjQgMS42LDAuNSAwLjIsLTAgYyAtMC4xLC0wLjUgLTEuNCwtMC42IC0xLjgsLTAuOCB2IDAuNCB6IG0gMy42LC05LjggMC4yLC0yLjYgLTAuMiwtMC4xIC0wLjIsMi42IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDk4LjYsOTIuNSAwLjYsMiAxLjQsLTQuMiAtMC45LC0wLjQgYyAtMC4zLDAuNyAtMC4yLDIuMyAtMS4xLDIuNiB6IG0gLTAuNiwtMS40IC0wLjMsLTAuNiBjIDAsMC42IDAuNCwxLjggMC44LDEuOSBsIC0wLjEsLTAuMiBjIDAuNiwtMC4yIDAuOSwtMS44IDEsLTIuNCBsIC0xLjYsLTAuOCAwLjIsMi4yIHogbSAyLjQsLTUuOSBjIDAuNCwwLjIgMS43LDAuMyAxLjgsMC44IGwgLTAuMiwwIC0xLjYsLTAuNSAtMC42LDQgMC45LDAuNSBjIDAuNCwtMC43IDAuOCwtMiAxLjEsLTIuOCAwLjQsLTAuOCAxLC0xLjcgMS40LC0yLjQgaCAtMC4yIGwgMC4yLC0yLjMgLTIuNCwtMC41IC0wLjQsMy4yIHogbSAtMSw0LjEgMC42LC0zLjkgLTIuMywtMC42IDAsMC4yIDAsMy40IHogbSAwLjYsLTQuMiAwLjQsLTMuMiAtMi41LC0wLjUgLTAuMiwzIHogbSAwLjcsLTYuNiAwLjMsLTMuMSAtMi40LC0wLjYgLTAuNCwzLjIgeiBtIC01LjEsLTQuOCAtMC4xLDAuMyBjIC0xLjIsLTAgLTEuNSwtMC45IC0xLjcsMC4zIC0wLjEsMC40IC0wLjMsMi4xIC0wLjMsMi40IDAsMC4yIDAuNywwLjIgMSwwLjMgMC43LDAuMiAwLjcsMC4yIDAuNywtMC41IDAsLTAuOCAwLjMsLTEuNyAwLjQsLTIuNCBoIDAuNCBsIC0wLjQsMy4yIDIuNCwwLjYgMC40LC0zLjIgLTIuMywtMC41IHYgLTAuNCBsIDIuMywwLjYgMC4zLC0yLjQgLTIuMiwtMC40IGMgLTAuMywwLjYgMCwyLjMgLTAuOCwyLjMgeiBtIDguMywtMSAwLjIsLTIuOSAtMi4yLC0wLjQgYyAwLDMuNCAtMS4zLDIuNiAyLDMuMyB6IG0gLTYuMiwxMS43IC0wLjQsLTAuMSB2IDAuNCBsIC0yLjQsLTAuNiB2IDAuNCBjIDAsMC4yIC0wLDAuMiAtMC4xLDAuNCAwLjQsMC43IDEuNiwyLjYgMS42LDMuNSBoIDAuMiBsIC0wLjEsLTAuNCAwLjgsMC40IHYgLTMuNSBoIDAuNCBsIC0wLC0wLjQgMCwwIHogbSAtMC4zLDUuNCAwLC0wLjYgYyAwLC0wLjUgLTAuMiwtMC44IC0wLjYsLTAuOSBsIDAuNiwxLjQgeiBtIDIuNiwtNC44IDAsMC40IDAuMiwwLjEgMC4yLDAgMCwtMC4zIHogbSAzLjMsLTAuNCBjIDAuOCwtMC40IDEuNSwtMC44IDIuOCwtMC44IC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4yIHYgLTAuNCBsIC0yLjUsLTAuNiAtMC4yLDIgeiBtIC04LjMsLTEuMSAyLjQsMC44IDAuMiwtMyAtMi41LC0wLjUgMCwxIHogbSAtMS44LC0wLjggYyAwLDAuNSAtMC4yLDAuMiAwLjUsMC40IDAuMywwLjEgMC42LDAuMiAxLDAuMyB2IC0yLjEgYyAwLC0wLjcgMC40LC0wLjYgLTAuNCwtMC43IC0wLjQsLTAuMSAtMC43LC0wLjIgLTEuMSwtMC4yIHYgMi40IHogbSA3LjUsLTQgaCAwLjMgbCAtMC4yLDIuOCBoIC0wLjQgdiAwLjQgbCAwLjMsMC4xIGMgMCwtMC4yIDAsLTAuNCAwLjIsLTAuNCAwLjcsMCAxLjYsMC40IDIuMywwLjQgMCwtMC4zIDAuMywtMi41IDAuMiwtMi42IC0wLC0wLjIgLTIsLTAuNiAtMi4zLC0wLjYgdiAtMC40IGwgLTAuNCwtMC4xIHYgMC4zIHogbSAzLjMsLTguOSAwLjQsLTAgLTAuMywtMC40IGMgMCwtMS4zIC0wLC0xLjIgLTAuMywtMi4yIC0wLjIsLTAuNiAtMCwtMC41IC0wLjcsLTAuNiAtMC40LC0wLjEgLTAuOCwtMC4yIC0xLjEsLTAuMiBsIC0wLjIsMi42IDIuMiwwLjQgdiAwLjQgeiBtIC0yLjQsLTAuOSAwLjIsLTIuNiAtMS44LC0wLjQgLTAuNCwyLjYgeiBtIDQuNCwxMy44IDAsLTEuMiAtMC4xLC0xLjYgLTIuMiwtMC40IGMgMCwwLjQgLTAuMiwyLjcgLTAuMiwyLjcgMC4xLDAuMiAyLjIsMC42IDIuNCwwLjYgeiBtIC03LjgsLTQuNiAtMC4yLDIuOSAyLjQsMC40IDAuMywtMi43IHogbSAtMC4yLDMuMiAwLC0wLjQgLTAuMywwIDAuMiwtMi45IC0yLjMsLTAuNSAtMC4zLDIuOCAyLjQsMC41IDAsMC40IHogbSAtMy4xLC0xIDAuMywtMi45IC0xLjYsLTAuNCAtMC4yLDIuOSB6IG0gMTEuMSwtMC44IC0wLjMsLTMgLTEuNywtMC40IC0wLjIsMyB6IG0gLTIsLTYuNiAtMi4zLC0wLjQgLTAuMywyLjUgMi40LDAuNiB6IG0gLTAuNCw2IDAuMiwtMyAtMi40LC0wLjYgLTAuMiwzLjEgeiBtIC0yLjQsLTQgMC4zLC0yLjYgLTIuMywtMC41IC0wLjMsMi41IHogbSAtMi45LDMuMiAwLjEsLTAuMyAtMC4yLC0wLjEgaCAtMC4yIGMgMCwwLjQgLTAuMSwwLjMgMC4yLDAuNCB6IG0gNS44LC0yLjQgMS43LDAuMyBjIC0wLjEsLTAuMiAtMC4yLC0xLjYgLTAuMywtMS45IC0wLjEsLTEgLTAuMiwtMSAtMS4yLC0xIGwgLTAuMiwyLjYgeiBtIDAsMC4zIDAsLTAuMyAtMC4zLC0wLjEgMCwwLjQgeiBtIDAuMiwtMyAwLC0wLjMgLTAuMiwtMC4xIDAsMC4zIHogbSAwLC0wLjMgMSwwLjIgYyAtMC4xLC0wLjYgLTAuMiwtMyAtMC44LC0zIGwgLTAuMiwyLjkgeiBtIC01LjEsLTEuMSAyLjMsMC41IGMgMCwtMy40IDEuMywtMi41IC0xLjksLTMuMiBsIC0wLjQsMi43IHogbSAtMi41LC0wLjYgMi4yLDAuNCAwLjQsLTIuNyAtMi4xLC0wLjQgeiBtIDEuMSwtNS42IC0wLjYsMi42IDIuMSwwLjQgMC40LC0yLjYgLTEuOCwtMC40IDAsLTAuMyAtMC40LC0wLjEgLTAuMSwwLjMgeiBtIC0wLjYsMi44IDAsLTAuMiAtMC40LDAgLTAuMSwwLjIgMC4yLDAgMC4yLDAuMSB6IG0gMC4yLC0yLjkgLTEsLTAuMiAtMSwyLjYgMS40LDAuMyB6IG0gNC44LDAuNyAxLjUsMC4yIC0xLjQsLTIuNiB6IG0gLTIuMSwtMC40IDEuOCwwLjQgMC4yLC0yLjYgMC4yLDAuMiBjIC0wLC0wLjQgLTAsLTAuMyAtMC40LC0wLjMgbCAwLjEsLTAuMSAtMS4yLC0xLjEgLTAuMSwwLjEgLTAuNywzLjUgeiBtIC0yLjIsLTAuNCAxLjgsMC40IDAuNiwtMy43IGMgLTAuNCwtMCAtMC4yLC0wLjEgLTAuNiwtMC4xIC0xLjYsMCAtMS40LDIuMyAtMS45LDMuNCB6XCJ9XSxpW1wiR1IuSU4uSUMuQU5JTUFMIEZFRURMT1RcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjEuNiwxMDcuMSAtMC40LC0yLjMgLTAuMiwtMiBoIDE2LjMgbCAtMS43LDEzLjIgaCAtMTMgdiAtMC42IGwgLTEsLTguMiB6IG0gMTYuMSw0LjMgMC40LC0yLjMgMC45LC02LjIgLTAuMSwtMS42IGggLTE5LjYgbCAxLjQsMTAuNyAwLjMsMC42IDAuNSw0LjMgLTAuMSwwLjYgaCAxNS43IHYgLTEuNiBsIDAuNiwtNC42IHogTSAxMjMsODIuNiBjIC0zLjMsLTAuOCAtNC42LDAuNCAtNi44LDEuOSBoIC0xLjQgYyAtMC4zLDAuNCAtMC42LDEuMiAtMS4yLDEuMiBoIC0xIGMgLTIuMiwwIC0zLjksLTEuOCAtNS44LC0xLjggaCAtMC42IGMgLTAuOSwwIC0yLjEsMC44IC0zLjksMC44IC01LjEsMCAtMy45LDAuMiAtOCwxLjUgLTIsMC42IC02LjIsMC44IC04LjksMC44IGggLTUuMiBjIC0yLjgsMCAtNSwtMC42IC03LjIsLTAuNiAtMi42LDAgLTQuNywwLjIgLTcuNCwwLjIgLTAuNSwwIC0wLjUsLTAuMSAtMC44LC0wLjIgLTIuNCwxLjIgLTMuMSw0LjIgLTMuMSw3LjggMCwzLjYgLTAuNiw2LjMgLTAuNiwxMC4xIHYgMC4yIGMgMCwwLjYgMC4xLDAuNiAwLjIsMSBsIDEsLTAuMyAwLC0wLjUgaCAwLjQgbCAwLjIsLTEyLjIgaCAwLjIgYyAwLDIgMC4xLDQuNSAwLjYsNiAwLjQsMS4yIDEuNywzLjggMS43LDQuOSB2IDAuMiBsIC0xLjYsMTMuMiBoIDMuNyBjIDAsLTEuNCAtMC40LC0xLjEgLTAuNCwtMi4xIHYgLTIuMSBjIDAsLTEuNCAxLC00LjIgMi4zLC00LjMgMC40LDEuNSAzLjMsMy43IDMuMyw2LjggdiAwLjYgYyAwLDAuNiAtMC4xLDAuNiAtMC4yLDEgMC40LC0wLjEgMC41LC0wLjIgMSwtMC4yIDEuMiwwIDMuNSwwLjcgMy41LC0wLjQgMCwtMC4zIC0xLjksLTMuMiAtMi4yLC0zLjUgLTAuNCwtMC41IC0xLjMsLTMuNiAtMS4zLC00LjMgdiAtMC4yIGMgMCwtMC4yIDEuMiwtMi4zIDEuMiwtNC44IDQsMi4yIDMuNSwyLjcgOS45LDIuNyAyLjIsMCA0LjIsMC41IDYsMC40IDEsLTAgMy4zLC0xLjQgNC4zLC0xLjkgMCwxLjIgMC40LDIuNCAwLjIsMy4zIGwgLTEuMiw4IGMgMSwwLjMgMS42LDAuNiAyLjgsMC42IGggMC42IC0wLjIgbCAwLjcsLTExLjMgYyAwLjYsMC40IDIuOCw3LjEgMi42LDguNCBsIC0wLjMsMi4zIGMgMC44LDAuNCAxLjUsMC42IDIuNiwwLjYgaCAxIGwgLTEuMiwtNy40IC0wLjEsLTAuOCBjIDAsLTAuOSAxLjYsLTAuNyAyLjUsLTEuMiAwLjYsLTAuMyAxLjQsLTEuMiAxLjgsLTEuNyAxLjEsLTEuNSAyLC0yLjcgMywtNC4yIDMuOSwtNS40IDMuNSwtMi40IDEwLjIsLTQgdiAtMC42IGggMS42IGMgMSwwIDEuOCwtMC44IDEuOCwtMS44IHYgLTAuNCBjIDAsLTIuNCAtMi41LC0yLjUgLTIuNSwtNS42IGwgLTMuMywtMy40IDUuNCwtMi45IHogbSAxNC42LDI4LjkgYyAwLjQsLTAuNCAwLjQsLTEuNSAwLjQsLTIuMyBsIC0wLjQsMi4zIHogbSAtMTYuMSwtNC4zIGMgMCwtMC44IDAsLTEuOSAtMC40LC0yLjMgbCAwLjQsMi4zIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEyMS4yLDEwNC45IGMgMC40LDAuNCAwLjQsMS41IDAuNCwyLjMgbCAxLDguMiB2IDAuNiBoIDEzIGwgMS43LC0xMy4yIGggLTE2LjMgbCAwLjIsMi4xIHpcIn1dLGlbXCJHUi5JLkZGLlNBVEVMTElURVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiFOJiZPLGZpbGw6ISFOJiZPLGQ6XCJtIDExNSw3MCAyMCwwIDAsNTUgLTIwLDAgeiBtIC0yNSw1IDIwLDAgMCw0NSAtMjAsMCB6IG0gLTI1LC01IDIwLDAgMCw1NSAtMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTEwLDEwMCA1LDAgbSAtMzAsMCA1LDAgbSAxMCwyNyAwLC03IG0gLTIwLDE1IGMgMTAsLTEwIDMwLC0xMCA0MCwwXCJ9XSxpW1wiR1IuSU4uSUMuRkFSTS9SQU5DSFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExOS45LDExOSB2IC0wLjIgYyAwLC0yIDEuNSwtMy43IDMuNSwtMy43IGggMC40IGMgMi4yLDAgMy43LDEuNiAzLjcsNCB2IDAuNiBjIDAsMS4yIC0yLjEsMi44IC0zLjcsMi44IGggLTAuNCBjIC0xLjksMCAtMy41LC0xLjYgLTMuNSwtMy41IHogbSAtNTIsLTEwLjcgYyAxLjMsLTIgMS4xLC0yLjcgMy4yLC00LjQgMS4zLC0xIDMuMywtMS45IDUuNSwtMS45IGggMC42IGMgNC43LDAgOSw0LjEgOSw4LjggdiAxLjEgYyAwLDUgLTQsOS4yIC04LjgsOS4yIEggNzYuOSBjIC01LjQsMCAtOS40LC00LjIgLTkuNCwtOS42IDAsLTEuNCAwLjQsLTEuNiAwLjQsLTMgbCAwLDAgeiBtIDcuOSwtMjAuMiBjIC0wLjgsMCAtMS41LC00LjQgLTEuOCwtNS4zIC0wLjIsLTEgLTEuMywtNC42IC0xLjMsLTUuNSBoIDI0LjEgYyAwLjUsMCAxLjMsLTAuOCAxLjMsLTEuMyB2IC0yLjIgYyAwLC0wLjcgLTAuOCwtMS4xIC0xLjUsLTEuMSBoIC0zMS44IGMgLTAuNywwIC0xLjUsMC40IC0xLjUsMS4xIHYgMi4yIGMgMCwwLjUgMC44LDEuMyAxLjMsMS4zIGggMy41IGwgMi42LDE2IC02LjgsMi41IDIuOCwzLjQgYyAtMSwxLjMgLTIuMywyLjEgLTMuNiw0LjIgLTAuNCwwLjggLTEuOSw0LjQgLTEuOSw1LjUgdiAyLjIgYyAwLDUuNCAxLjYsOC44IDQuMywxMS41IDIuMywyLjMgNi41LDQuOCAxMSw0LjggaCAwLjQgYyA4LjgsMCAxNS44LC03LjQgMTUuOCwtMTYgaCAxMy40IGMgMC42LDAgMS45LDEuNCAyLjQsMS44IGggOC42IGMgLTEuMSwxLjYgLTIuMiwyLjkgLTIuMiw1LjcgMCw0LjYgMy45LDguNiA4LjYsOC42IDQuNCwwIDguOCwtMy44IDguOCwtNy45IHYgLTIgYyAwLC0xLjIgLTEuNSwtMy40IC0yLC00LjQgaCA3LjIgbCAxLC00LjYgaCAtNy4yIHYgLTAuNiBsIDEuMiwtOC4xIC0wLjEsLTMuMyBjIDAsLTAuNiAtMS43LC0yLjEgLTIuMiwtMi40IGwgLTE2LC0wLjUgViA3OC4yIGMgMCwtMC41IC0wLjQsLTAuOSAtMC45LC0wLjkgLTAuNSwwIC0wLjksMC40IC0wLjksMC45IHYgMTUuNCBjIC0yLjIsLTAuMiAtNiwtMC40IC04LjEsLTAuNCAtMS4zLDAgLTIuOSwwLjEgLTQuMiwwIC0yLjEsLTAuMSAtMiwtMS4zIC0yLjksLTEuMyBoIC00LjYgbCAyLDEyLjMgSCA5MS4xIFYgOTguNiBDIDkxLjEsOTcuOCA4Ny4xLDk0LjQgODYuMSw5NC40IEggNzguNyBWIDg5LjggTCA3Ny41LDg4LjEgNzUuOCw4OCB6IE0gODguMSw5MiBjIDAsMC41IDAuMSwwLjIgMC4yLDAuOSBoIDAuNiBjIDAuOSwwIDguNSwtNi40IDEwLjEsLTYuOCBWIDg1LjQgYyAwLC0wLjUgLTAuMiwtMC42IC0wLjYsLTAuNiBoIC0wLjQgQyA5Ny41LDg0LjcgODguMSw5MS42IDg4LjEsOTIgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTE5LjksMTE5IGMgMCwxLjkgMS42LDMuNSAzLjUsMy41IGggMC40IGMgMS42LDAgMy43LC0xLjYgMy43LC0yLjggdiAtMC43IGMgMCwtMi4zIC0xLjUsLTQgLTMuNywtNCBoIC0wLjQgYyAtMiwwIC0zLjUsMS43IC0zLjUsMy43IHYgMC4yIHogbSAtNTIsLTEwLjcgYyAwLDEuNCAtMC40LDEuNyAtMC40LDMuMSAwLDUuNCA0LjEsOS42IDkuNCw5LjYgaCAwLjYgYyA0LjgsMCA4LjgsLTQuMyA4LjgsLTkuMiB2IC0xLjEgYyAwLC00LjcgLTQuMywtOC44IC05LC04LjggaCAtMC42IGMgLTIuMiwwIC00LjMsMC45IC01LjUsMS45IC0yLjIsMS43IC0xLjksMi40IC0zLjIsNC40IHpcIn1dLGlbXCJHUi5JTi5JQy5HUkFJTiBTVE9SQUdFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTIyLjgsNjkuNiBjIDAuNCwwLjEgMC45LDAuNSAxLjMsMSAwLjQsMC41IDAuOCwxLjIgMS4zLDIgbCAyLjEsNC4xIC0yLjIsMCAtMS45LC0zLjkgYyAtMC41LC0xIC0xLC0xLjcgLTEuNSwtMiAtMC41LC0wLjMgLTEuMSwtMC41IC0xLjksLTAuNSBsIC0yLjIsMCAwLDYuNCAtMi4xLDAgMCwtMTUuMiA0LjYsMCBjIDEuNywxLjVlLTUgMywwLjQgMy45LDEuMSAwLjksMC43IDEuMywxLjggMS4zLDMuMyAtMWUtNSwxIC0wLjIsMS43IC0wLjcsMi40IC0wLjQsMC42IC0xLjEsMS4xIC0xLjksMS4zIG0gLTUuMSwtNi40IDAsNS40IDIuNiwwIGMgMSw4ZS02IDEuNywtMC4yIDIuMiwtMC43IDAuNSwtMC41IDAuOCwtMS4xIDAuOCwtMiAtMWUtNSwtMC45IC0wLjMsLTEuNiAtMC44LC0yIC0wLjUsLTAuNSAtMS4yLC0wLjcgLTIuMiwtMC43IGwgLTIuNiwwIG0gLTEyLjMsLTAuMyBjIC0xLjUsMS40ZS01IC0yLjcsMC42IC0zLjYsMS43IC0wLjksMS4xIC0xLjMsMi42IC0xLjMsNC41IDAsMS45IDAuNCwzLjQgMS4zLDQuNSAwLjksMS4xIDIuMSwxLjcgMy42LDEuNyAxLjUsMWUtNiAyLjcsLTAuNiAzLjUsLTEuNyAwLjksLTEuMSAxLjMsLTIuNiAxLjMsLTQuNSAtMmUtNSwtMS45IC0wLjQsLTMuNCAtMS4zLC00LjUgLTAuOSwtMS4xIC0yLC0xLjcgLTMuNSwtMS43IG0gMCwtMS43IGMgMi4xLDEuNmUtNSAzLjgsMC43IDUuMSwyLjEgMS4zLDEuNCAxLjksMy4zIDEuOSw1LjcgLTJlLTUsMi40IC0wLjYsNC4zIC0xLjksNS43IC0xLjMsMS40IC0zLDIuMSAtNS4xLDIuMSAtMi4xLDAgLTMuOCwtMC43IC01LjEsLTIuMSAtMS4zLC0xLjQgLTEuOSwtMy4zIC0xLjksLTUuNyAtMTBlLTcsLTIuNCAwLjYsLTQuMyAxLjksLTUuNyAxLjMsLTEuNCAzLC0yLjEgNS4xLC0yLjEgbSAtMjEsMC4zIDEyLjgsMCAwLDEuNyAtNS40LDAgMCwxMy40IC0yLjEsMCAwLC0xMy40IC01LjQsMCAwLC0xLjcgbSAtMiwwLjUgMCwyIGMgLTAuOCwtMC40IC0xLjUsLTAuNiAtMi4yLC0wLjggLTAuNywtMC4yIC0xLjQsLTAuMyAtMiwtMC4zIC0xLjEsMS40ZS01IC0yLDAuMiAtMi42LDAuNyAtMC42LDAuNCAtMC45LDEgLTAuOSwxLjggLTRlLTYsMC43IDAuMiwxLjIgMC42LDEuNSAwLjQsMC4zIDEuMiwwLjYgMi4zLDAuOCBsIDEuMiwwLjMgYyAxLjUsMC4zIDIuNywwLjggMy40LDEuNSAwLjcsMC43IDEuMSwxLjcgMS4xLDIuOSAtMS4yZS01LDEuNSAtMC41LDIuNiAtMS41LDMuMyAtMSwwLjggLTIuNCwxLjEgLTQuMywxLjEgLTAuNywwIC0xLjUsLTAuMSAtMi4zLC0wLjIgLTAuOCwtMC4yIC0xLjYsLTAuNCAtMi41LC0wLjcgbCAwLC0yLjEgYyAwLjgsMC41IDEuNiwwLjggMi40LDEuMSAwLjgsMC4yIDEuNiwwLjQgMi40LDAuNCAxLjIsMWUtNiAyLjEsLTAuMiAyLjcsLTAuNyAwLjYsLTAuNSAxLC0xLjEgMSwtMiAtMTBlLTYsLTAuNyAtMC4yLC0xLjMgLTAuNywtMS43IC0wLjUsLTAuNCAtMS4yLC0wLjcgLTIuMiwtMC45IGwgLTEuMiwtMC4yIGMgLTEuNSwtMC4zIC0yLjYsLTAuOCAtMy4zLC0xLjQgLTAuNywtMC42IC0xLC0xLjYgLTEsLTIuNyAtMTBlLTcsLTEuMyAwLjUsLTIuNCAxLjQsLTMuMiAwLjksLTAuOCAyLjMsLTEuMiAzLjksLTEuMiAwLjcsMS42ZS01IDEuNCwwLjEgMi4yLDAuMiAwLjcsMC4xIDEuNSwwLjMgMi4zLDAuNiBtIDI0LjQsNDguMSAtMC4yLDIuNCBoIDAuNCBsIC0xLjcsMyAtMSwtMS43IC0wLjEsMiAwLjUsMC42IC0xLjIsMyAtMS41LC0zIDAuNCwzLjYgMC44LDAuMiAtMy4xLDkuNyAtMC41LC00LjIgMC4xLC0xLjggYyAwLC0xLjUgMC44LC00LjcgMSwtNi4zIDAuMywtMS43IDEuMywtNC41IDEuNCwtNiAwLjYsMC4xIDAuNCwwLjIgMC44LDAuMiAwLjQsMCAyLjMsLTEuNSAyLjYsLTEuOCBsIC0zLDAuNiAwLjgsLTIuNyBjIDAuNiwwLjEgMC40LDAuMiAwLjgsMC4yIDAuNCwwIDIuNiwtMS43IDIuOCwtMiBsIC0zLDAuOCAwLjcsLTIuNCBjIDEuMywwIDIuMSwtMC44IDIuOCwtMS40IGwgLTIuNCwwLjQgMC44LC0yIGMgMS4xLC0wIDEuNSwtMC45IDEuOCwtMS44IGwgLTEuMywwLjcgMi4zLC02LjEgLTAuOCwtMC4xIC0yLjEsNS45IC0wLjMsMCAtMC41LC0yLjEgLTAuMSwtMCBjIDAsMS41IC0wLjQsMS42IC0wLjQsMi40IDAsMC41IDAuMiwwLjUgMC42LDAuNiBsIC0wLjksMi4xIC0xLC0xLjQgYyAtMC4xLDEuNiAtMC40LDEuOSAwLjcsMi40IGwgLTAuOCwyLjQgLTEuNywtMi4yIDAuNCwyLjggMC42LDAuNSAtMC41LDIuNyAtMS41LC0xLjkgMC4yLDIuNCAwLjksMC41IGMgMCwwLjQgLTEsNC42IC0xLjIsNiAtMC40LDIuMyAtMC45LDMuNSAtMC45LDYuMyBsIC0xLjIsLTMuNiAwLjYsLTAuOCAtMCwtMiAtMS4yLDEuMiAtMC44LC0yLjggMC42LC0wLjggLTAsLTIgLTEuMSwxLjIgLTAuNywtMS43IGMgMSwtMC41IDEsLTEuNiAxLC0zLjIgbCAtMS4zLDIuMSBjIC0wLjcsLTAuMiAtMS4xLC0xLjQgLTEuMywtMi4zIDAuMywtMC40IDAuNiwtMC41IDAuNiwtMSB2IC0xLjYgaCAtMC40IGwgLTAuNywxLjggYyAtMC4yLC0wLjIgLTAuNywtMC43IC0wLjcsLTEuMiAwLC0wLjQgMC42LC0wLjMgMC42LC0xIHYgLTAuMiBjIDAsLTEuMSAtMC40LC0xLjEgLTAuNCwtMi40IGwgLTAuNywyLjMgLTAuMywwIC0yLjgsLTUuOSAtMC40LDAuMiAyLjUsNS43IC0xLjMsLTAuNyAxLDEuOSAxLDAgMC42LDEgLTIuNiwtMC40IGMgMC40LDAuNCAxLjcsMS40IDIuNCwxLjQgMC4xLDAgMC40LC0wLjEgMC42LC0wLjIgbCAxLDIuMiAtMy4yLC0wLjYgYyAxLjEsMSAyLDEuNyAzLjYsMS42IGwgMS4xLDIuNyAtMi45LC0wLjQgYyAwLjcsMSAxLjcsMS4zIDMsMS41IDAuNCwwLjEgMS4xLDIuOCAxLjIsMy41IGwgLTMsLTAuNiAyLjIsMS42IGggMSBjIDEuMiwyLjMgMi40LDExLjkgMi40LDE1LjggaCAxLjQgbCAtMC4yLC0yLjIgMCwtMSBjIDAsLTQgMi45LC05LjMgMy4yLC0xMi4zIDAuOCwwLjEgMC41LDAuMiAxLDAuMiAwLjIsMCAyLjksLTEuMiAzLjIsLTEuNCBsIC0zLjYsMC4zIDEuMiwtMy4xIDAuOCwwLjQgMywtMS4zIC0zLjIsMC4yIDEuNCwtMi44IGMgMC40LDAuMSAwLjQsMC4yIDEsMC4yIDAuMywwIDIuMSwtMSAyLjQsLTEuMiBsIC0yLjgsMC4yIDEuNCwtMiBjIDEuNSwwLjEgMS41LC0wLjQgMi40LC0xLjYgbCAtMS40LDAuNCBjIDAuNSwtMS4xIDEuMiwtMi4yIDEuOCwtMy4yIDAuNCwtMC42IDIsLTIuNyAwLjgsLTMgbCAwLjIsMC4xIC0zLjQsNS44IC0wLjQsLTIuMyBoIC0wLjIgYyAwLDEuNCAtMC42LDEuNyAtMC42LDIuMiAwLDAuMyAwLjMsMC43IDAuNCwxIGwgLTEuNSwyIC0wLjcsLTEuOSB6IG0gLTI1LjQsMTMuNSBjIDAsLTMuNyAwLjEsLTkuMSAwLjcsLTEyLjQgMC40LC0yIDAuMSwtNCAwLjYsLTYgMC40LC0xLjcgMC40LC00LjIgMC44LC01LjggMi44LC0xMC4xIDEsLTExLjggMTQuMywtMTEuOCBoIDQuNCBjIDExLjYsMCAxMi42LDEuMiAxNC4yLDExLjMgMS4yLDcuNiAyLDE0LjYgMiwyMy42IHYgOC4zIGwgLTAuNCwzLjYgYyAtMS4xLDEuNiAtMi4xLDMuNCAtNC45LDMuNCBIIDg2LjcgYyAtNS40LDAgLTUuMywtNi40IC01LjMsLTExLjkgdiAtMi40IHogbSAtNS44LC0zMi41IGMgMi4xLC0wLjYgMC40LC0xLjMgNC40LC0xIDIuNCwwLjIgMywwLjMgNSwwLjggLTAuNywxLjEgLTQuNiwzIC02LjUsMyBoIC0wLjQgYyAtMC45LDAgLTIuNCwtMS4yIC0yLjQsLTIgdiAtMC44IGggLTAgeiBtIDQzLjIsLTEuNSBjIDIuMiwtMC4yIDQuOCwwLjkgNC44LDMuMSB2IDAuNiBjIDAsMC42IC0wLjYsMC44IC0xLjIsMC44IGggLTAuNiBjIC0xLjgsMCAtNi4yLC0yLjcgLTYuOSwtMy45IGwgNCwtMC42IHogbSAtMzYuNiwtNi43IGMgMCwtMSAxLC0yLjIgMS44LC0yLjIgaCAwLjYgYyAwLjYsMCAxLjQsMS42IDEuNCwyLjIgdiA0LjIgYyAwLDEuMyAtMC40LDEuNSAtMC40LDIuOCAtMSwtMC4zIC0zLjQsLTQuMyAtMy40LC01LjUgdiAtMS40IGggLTAgeiBtIDMxLjcsMi44IGMgMCwtMi44IC0wLC01LjIgMi44LC01LjIgaCAwLjYgYyAwLjYsMCAxLDAuNyAxLDEuNCAwLDIgLTMsNi44IC00LjQsNy4zIHYgLTMuNiBoIC0wIHogbSAxLjQsMy44IGMgMC41LC0xLjggMy44LC01IDMuOCwtNy4xIHYgLTEuNCBjIC0wLjYsLTAuMyAtMC43LC0xLjIgLTEuNiwtMS4yIGggLTAuNiBjIC0yLjYsMCAtMy44LDIgLTMuOCw0LjUgdiA0LjIgYyAtMiwtMC41IC0yLjMsLTEgLTUuMiwtMS4yIC0yLC0wLjIgLTMuNywtMC40IC02LC0wLjQgaCAtMy42IGMgLTQuOCwwIC04LjksMC4zIC0xMi4xLDIgMC4yLC0wLjcgMC40LC0wLjkgMC40LC0xLjggdiAtMy40IGMgMCwtMS40IC0xLC0zLjggLTIuMiwtMy44IGggLTAuOCBjIC0wLjgsMCAtMi42LDEuOSAtMi42LDMgMCwyIDIuMSw1LjUgMyw2LjggbCAtNS43LC0wLjUgYyAtMS4yLDAgLTMuNCwxLjEgLTMuNCwyLjEgdiAwLjYgYyAwLDEuMyAxLjcsMi44IDMsMi44IGggMC4yIGMgMi45LDAgNC41LC0yIDYuMywtMi40IC0xLjksMy41IC0zLjgsMjIgLTMuOCwyOC4xIHYgNiBjIDAsNS45IDAuMywxMi4zIDYuMSwxMi4zIGggMjYuMSBjIDQuMSwwIDYuMSwtMy44IDYuMSwtNy45IHYgLTEwLjUgYyAwLC0yLjMgLTAuMiwtNS41IC0wLjQsLTcuNyAtMC4yLC0xLjggLTAuOCwtNS43IC0wLjgsLTcuNCAwLC0yLjYgLTAuNywtNC43IC0xLC03LjEgLTAuMiwtMi4xIC0xLjMsLTQuMyAtMS44LC02LjIgMS4yLDAuNiA0LjksMyA2LjEsMyBoIDEuMiBjIDEsMCAxLjgsLTAuOCAxLjgsLTEuOCB2IC0wLjIgYyAwLC0yLjIgLTEuNSwtMy44IC0zLjgsLTMuOCBoIC0yLjYgbCAtMi44LDAuNCB6IG0gLTI4LjEsMC42IGMgMC41LDEuOSA4LjksMy4yIDExLjksMy4yIGggMSBjIDMuMSwwIDEyLjUsLTEuNCAxMi43LC0zLjYgLTQuMSwtMSAtNi41LC0xLjggLTExLjksLTEuOCBoIC0xLjQgYyAtMi40LDAgLTQuNCwwLjQgLTYuNSwwLjYgLTIuOSwwLjQgLTMuOCwxLjEgLTUuOCwxLjYgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTA1LjMsMTEwLjEgYyAtMC4zLDAuMyAtMi4yLDEuOCAtMi42LDEuOCAtMC40LDAgLTAuMiwtMC4xIC0wLjgsLTAuMiAwLDEuNSAtMS4xLDQuMyAtMS4zLDYgLTAuMywxLjYgLTEsNC44IC0xLDYuMyBsIC0wLjEsMS44IDAuNSw0LjIgMy4xLC05LjcgLTAuOCwtMC4yIC0wLjQsLTMuNiAxLjUsMyAxLjIsLTMgLTAuNSwtMC42IDAuMSwtMiAxLDEuNyAxLjcsLTMgaCAtMC40IGwgMC4yLC0yLjQgLTAuMywtMS4yIC0xLjIsMS4yIHogbSAwLDAgMS4yLC0xLjIgMC4zLDEuMiAwLjcsMS45IDEuNSwtMiBjIC0wLjEsLTAuMyAtMC40LC0wLjcgLTAuNCwtMSAwLC0wLjUgMC42LC0wLjggMC42LC0yLjIgaCAwLjIgbCAwLjQsMi4zIDMuNCwtNS43IC0wLjIsLTAuMSBjIDEuMywwLjQgLTAuNCwyLjQgLTAuOCwzIC0wLjYsMSAtMS4zLDIuMSAtMS44LDMuMiBsIDEuNCwtMC40IGMgLTAuOCwxLjIgLTAuOSwxLjcgLTIuNCwxLjYgbCAtMS40LDIgMi44LC0wLjIgYyAtMC4zLDAuMiAtMiwxLjIgLTIuNCwxLjIgLTAuNSwwIC0wLjUsLTAuMSAtMSwtMC4yIGwgLTEuNCwyLjggMy4yLC0wLjIgLTMsMS4zIC0wLjgsLTAuNCAtMS4yLDMuMSAzLjYsLTAuNCBjIC0wLjMsMC4yIC0yLjksMS40IC0zLjIsMS40IC0wLjUsMCAtMC4yLC0wLjEgLTEsLTAuMiAtMC4zLDIuOSAtMy4yLDguMiAtMy4yLDEyLjMgbCAtMC4xLDEgMC4zLDIuMiBoIC0xLjQgYyAwLC00IC0xLjIsLTEzLjYgLTIuNCwtMTUuOCBoIC0xIGwgLTIuMiwtMS42IDMsMC42IGMgMCwtMC43IC0wLjgsLTMuNCAtMS4yLC0zLjUgLTEuMywtMC4yIC0yLjMsLTAuNSAtMywtMS41IGwgMi45LDAuNCAtMS4xLC0yLjggYyAtMS41LDAuMSAtMi41LC0wLjYgLTMuNiwtMS42IGwgMy4yLDAuNiAtMS4xLC0yLjIgYyAtMC4yLDAuMSAtMC41LDAuMiAtMC42LDAuMiAtMC43LDAgLTIsLTEgLTIuNCwtMS40IGwgMi42LDAuNCAtMC42LC0xIGggLTEgbCAtMSwtMS45IDEuMywwLjcgLTIuNSwtNS43IDAuNCwtMC4yIDIuOCw1LjkgMC4zLC0wIDAuNywtMi40IGMgMCwxLjMgMC40LDEuMiAwLjQsMi40IHYgMC4yIGMgMCwwLjcgLTAuNiwwLjYgLTAuNiwxIDAsMC40IDAuNSwxIDAuNywxLjIgbCAwLjcsLTEuOCBoIDAuNCB2IDEuNiBjIDAsMC41IC0wLjMsMC42IC0wLjYsMSAwLjIsMC45IDAuNSwyLjEgMS4zLDIuMyBsIDEuMywtMi4xIGMgMCwxLjUgMCwyLjYgLTEsMy4yIGwgMC43LDEuNyAxLjEsLTEuMiAwLDIgLTAuNiwwLjggMC44LDIuOCAxLjIsLTEuMiAwLDIgLTAuNiwwLjcgMS4yLDMuNiBjIDAsLTIuOCAwLjQsLTQgMC45LC02LjIgMC4zLC0xLjMgMS4zLC01LjYgMS4yLC02IGwgLTAuOSwtMC41IC0wLjIsLTIuNSAxLjUsMS45IDAuNSwtMi43IC0wLjYsLTAuNSAtMC40LC0yLjggMS43LDIuMiAwLjgsLTIuNCBjIC0xLC0wLjUgLTAuOCwtMC44IC0wLjcsLTIuNCBsIDEsMS40IDAuOSwtMi4xIGMgLTAuNCwtMC4xIC0wLjYsLTAgLTAuNiwtMC42IDAsLTAuOCAwLjQsLTAuOSAwLjQsLTIuNCBsIDAuMSwwIDAuNSwyLjEgMC4zLC0wIDIuMSwtNS45IDAuOCwwLjEgLTIuMyw2LjEgMS4zLC0wLjcgYyAtMC4yLDAuOSAtMC42LDEuOCAtMS44LDEuOCBsIC0wLjgsMiAyLjQsLTAuNCBjIC0wLjcsMC42IC0xLjUsMS40IC0yLjgsMS40IGwgLTAuNywyLjQgMywtMC44IGMgLTAuMiwwLjMgLTIuNCwyIC0yLjgsMiAtMC40LDAgLTAuMiwtMC4xIC0wLjgsLTAuMiBsIC0wLjgsMi43IDMsLTAuNSB6IE0gODcuMSw5MC4xIGMgMiwtMC41IDIuOSwtMS4yIDUuOCwtMS42IDIuMSwtMC4zIDQuMSwtMC42IDYuNSwtMC42IGggMS40IGMgNS40LDAgNy44LDAuOCAxMS45LDEuOCAtMC4yLDIuMiAtOS42LDMuNiAtMTIuNywzLjYgaCAtMSBjIC0zLDAgLTExLjQsLTEuMyAtMTEuOSwtMy4yIHogbSAtNS44LDMzLjUgdiAyLjQgYyAwLDUuNSAtMC4xLDExLjkgNS4zLDExLjkgaCAyNi40IGMgMi44LDAgMy44LC0xLjcgNC45LC0zLjQgbCAwLjQsLTMuNiB2IC04LjMgYyAwLC05IC0wLjgsLTE1LjkgLTIsLTIzLjYgLTEuNiwtMTAuMSAtMi42LC0xMS4zIC0xNC4yLC0xMS4zIGggLTQuNCBjIC0xMy4zLDAgLTExLjYsMS43IC0xNC4zLDExLjggLTAuNCwxLjYgLTAuNCw0IC0wLjgsNS44IC0wLjUsMiAtMC4yLDMuOSAtMC42LDYgLTAuNiwzLjMgLTAuNyw4LjYgLTAuNywxMi40IHogTSAxMTQuOCw5MC4yIGMgMC43LDEuMiA1LjIsMy45IDYuOSwzLjkgaCAwLjYgYyAwLjYsMCAxLjIsLTAuMiAxLjIsLTAuOCB2IC0wLjYgYyAwLC0yLjIgLTIuNiwtMy4zIC00LjgsLTMuMSBsIC00LDAuNiAwLDAgeiBtIC0zOS4yLDAuOSB2IDAuOCBjIDAsMC44IDEuNCwyIDIuNCwyIGggMC40IGMgMiwwIDUuOCwtMS45IDYuNSwtMyAtMiwtMC40IC0yLjYsLTAuNiAtNSwtMC44IC0zLjgsLTAuMyAtMi4xLDAuNCAtNC4zLDEgeiBtIDM4LjMsLTUuMyB2IDMuNiBjIDEuMywtMC41IDQuNCwtNS4zIDQuNCwtNy4zIDAsLTAuNyAtMC40LC0xLjQgLTEsLTEuNCBoIC0wLjYgYyAtMi44LC0wIC0yLjgsMi40IC0yLjgsNS4xIHogbSAtMzEuNywtMi44IHYgMS40IGMgMCwxLjMgMi40LDUuMyAzLjQsNS41IDAsLTEuMyAwLjQsLTEuNSAwLjQsLTIuOCB2IC00LjIgYyAwLC0wLjYgLTAuOCwtMi4yIC0xLjQsLTIuMiBoIC0wLjYgYyAtMC44LDAgLTEuOCwxLjMgLTEuOCwyLjIgelwifV0saVtcIkdSLklOLklDLkFUTVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDczLjYsMTE2LjMgYyA1LjEsLTAuMSAxNS44LC02LjYgMTcsLTYuNiAwLjQsMCA3LjQsMy44IDguOSw0LjIgLTAuNCwwLjYgLTUuMSw0LjYgLTYuMiw1LjcgLTEuMiwxLjIgLTQuNyw1LjggLTUuNSw2LjQgLTEuNiwtMC44IC0xNCwtOC45IC0xNC4yLC05LjYgeiBtIC0xNS4xLC02LjIgMTEuOSwtMi41IDExLjEsNS42IC05LjYsMyAxNi4yLDEwLjcgLTAsLTAuMiA2LjQsLTcuNSAyNi45LDEyLjcgMjAuMywtNDYuOCAtNTAuMiwtMTcuMiBjIC0wLjYsMi4yIC01LjIsOS4xIC02LjUsMTEuOCAtMC44LDEuOCAtMi4zLDQuNCAtMy4zLDYgLTEuMiwxLjggLTIuMiw0LjEgLTMuMyw2IC0xLjIsMiAtMi4xLDMuOCAtMy4zLDUuOCAtMS4yLDEuOSAtMi4xLDQuMiAtMy4zLDYgLTIuNCwzLjYgLTAuMiwyLjcgLTUuNSwzLjcgLTIuNiwwLjUgLTUuMiwxIC03LjcsMS42IG0gNjIsMjEuNSAtMjUuMiwtMTEuOCA0LjgsLTQgNy4zLDMuNSAxLjIsLTIuNCAtMjMuOSwtMTEuNyB2IDAuMiBsIC0xLDIuMiA2LDIuOSAtNi4yLDMuNCAtMTEuOCwtNS44IC0wLjIsMCAyMC43LC0zNyAwLjIsMC4xIDQ3LjQsMTYuMSBoIDAuMiBsIC0xOS40LDQ0LjIgeiBtIDcuOCwtMzEuMyAxLjEsLTIgLTUuOCwtMi4zIC0wLjgsMi4zIHogbSAtMi43LDUuMiAxLjIsLTEuOSAtNS42LC0yLjMgLTAuOCwyLjIgeiBtIC0yMiwtNy4zIGMgMC42LDAuNCAyLjEsMS40IDIuMSwyLjEgdiAyLjQgYyAwLDAuOCAtMS43LDEuNSAtMi42LDEuNSBoIC0wLjIgYyAtMC44LDAgLTEsLTAuMiAtMS43LC0wLjQgbCAyLjQsLTUuNyB6IG0gLTMuNCwtNi40IGMgMCwtMi4yIDEuMSwtMi44IDMuMiwtMi44IGggMC4yIGMgMC43LDAgMSwwLjIgMS41LDAuNCBsIC0yLjIsNS4xIGMgLTAuOSwtMCAtMi44LC0xLjIgLTIuOCwtMi40IHYgLTAuMiB6IG0gNS42LC00LjIgYyAtMC4zLC0wLjEgLTEuMiwtMC41IC0xLjYsLTAuNSBoIC0xLjkgYyAtMC43LDAgLTIuNSwwLjYgLTIuOSwwLjkgLTAuMywwLjIgLTEuNCwyLjEgLTEuNCwyLjUgdiAxLjcgYyAwLDIuMSAzLjgsNC4yIDMuOCw0LjkgMCwwLjQgLTIuMiw0LjYgLTIuNCw1LjcgLTAuNiwtMC4zIC0yLjUsLTEuOCAtMi41LC0yLjYgdiAtMC42IGMgMCwtMC44IDAuNiwtMS40IDAuOCwtMi4xIC0wLjksLTAuMiAtMiwtMS4xIC0yLjQsLTEuMiAtMC40LC0wLjEgLTEsMS43IC0xLDIuMyB2IDAuNCBjIDAsMi43IDQuMiw1LjQgNC4yLDUuNyAwLDAuNiAtMC40LDEuNCAtMC41LDIgbCAxLjcsMC44IDAuNiwtMS43IGMgMS40LDAgMiwwLjggMy42LDAuOCBoIDAuNiBjIDEuNCwwIDIuNiwtMC41IDMuMiwtMS4zIDAuMywtMC40IDEuNSwtMi40IDEuNSwtMyB2IC0wLjQgYyAwLC0yLjYgLTIuOCwtNC44IC00LjQsLTUuOSBsIDIuNSwtNS42IGggMC40IGMgMC40LDEuMiAxLjUsMC42IDEuNSwzLjYgbCAyLjgsMS4yIHYgLTEuNyBjIDAsLTIgLTIsLTQuMSAtMy44LC00LjYgbCAwLjgsLTIuMSAtMi4xLC0wLjUgLTAuOCwxLjUgeiBtIDEzLDE4LjQgLTAuOSwyIDUuNCwyLjIgLTAsLTAuMiAxLjIsLTEuOCB6IG0gLTIyLjQsLTI1LjIgMjYuMSw5LjUgLTExLDI0LjEgLTI2LjcsLTEyLjggMTEuNiwtMjAuOCB6IG0gLTEyLjUsMjEuMiAyNy44LDEzLjQgMTEuNywtMjUuNyBjIC0xLC0wLjEgLTExLjgsLTQuMiAtMTMuNCwtNC44IC0xLjIsLTAuNSAtMTMuMywtNSAtMTMuNSwtNSAtMC45LDAgLTUuNCw5LjUgLTYuNCwxMC44IC0wLjgsMS4zIC01LjksMTAuMyAtNi4xLDExLjIgeiBtIDMxLjcsMTEuMiA1LjQsMi4yIC0wLjEsLTAuMiAxLjMsLTEuOCBjIC0xLjEsLTAuMiAtNSwtMi4yIC01LjUsLTIuMiAtMC40LDAgLTEuMSwxLjYgLTEuMiwyLjEgeiBtIC0yNS44LDAuNiA0LjMsMi45IC02LDUuOCAtNiwtNC4xIDcuNywtNC42IHogbSAtOS4xLDQuNSA3LjQsNC45IDcuMSwtNi42IGMgLTAuNSwtMC40IC01LjMsLTMuNiAtNS40LC0zLjYgLTEsMCAtNy42LDQuOSAtOS4xLDUuMyB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMTUuNywxMTEuOCBjIDAsLTAuNSAwLjgsLTIuMSAxLjIsLTIuMSAwLjUsMCA0LjQsMiA1LjUsMi4zIGwgLTEuMywxLjggMC4xLDAuMiAtNS40LC0yLjIgeiBtIDMuMiwtNy4xIDUuNywyLjIgLTEuMiwxLjggMCwwLjIgLTUuNCwtMi4yIDAuOSwtMiB6IG0gMi40LC00LjggNS42LDIuMyAtMS4yLDEuOSAtNS4yLC0yIDAuOCwtMi4yIHogbSAyLjUsLTUuMyA1LjgsMi4zIC0xLjEsMiAtNS41LC0yIDAuOCwtMi4zIHogbSAtMzkuNyw2IGMgMC4yLC0xIDUuMywtMTAgNi4xLC0xMS4yIDAuOSwtMS40IDUuNCwtMTAuOCA2LjQsLTEwLjggMC4yLDAgMTIuMyw0LjUgMTMuNSw1IDEuNywwLjcgMTIuNSw0LjggMTMuNSw0LjggbCAtMTEuNywyNS43IC0yNy44LC0xMy40IHogbSA1NS45LC0xNC42IGggLTAuMiBsIC00Ny40LC0xNi4xIC0wLjIsLTAuMSAtMjAuNywzNyAwLjIsLTAgMTEuOCw1LjggNi4zLC0zLjQgLTYsLTIuOSAxLC0yLjIgdiAtMC4yIGwgMjMuOSwxMS43IC0xLjIsMi40IC03LjMsLTMuNSAtNC44LDQgMjUuMiwxMS44IDE5LjQsLTQ0LjIgMCwwIHogbSAtNTkuMSwzMC45IGMgMS41LC0wLjQgOCwtNS4zIDkuMSwtNS4zIDAuMiwwIDQuOSwzLjIgNS41LDMuNiBsIC03LjIsNi42IC03LjQsLTQuOSB6IG0gLTcuMiwtMC42IGMgMC4yLDAuOCAxMi42LDguOCAxNC4yLDkuNiAwLjgsLTAuNiA0LjMsLTUuMiA1LjUsLTYuNCAxLjEsLTEuMSA1LjgsLTUuMSA2LjIsLTUuNyAtMS42LC0wLjMgLTguNSwtNC4xIC04LjksLTQuMSAtMS4yLDAgLTExLjksNi41IC0xNyw2LjYgeiBtIDI2LjYsLTI1LjkgdiAwLjIgYyAwLDEuMiAxLjgsMi40IDIuNywyLjQgbCAyLjIsLTUgYyAtMC40LC0wLjIgLTAuOCwtMC40IC0xLjUsLTAuNCBoIC0wLjIgYyAtMi4xLDAgLTMuMiwwLjcgLTMuMiwyLjggeiBtIDAuOSwxMi4xIGMgMC43LDAuMiAwLjksMC40IDEuNywwLjQgaCAwLjIgYyAxLDAgMi42LC0wLjcgMi42LC0xLjUgdiAtMi40IGMgMCwtMC43IC0xLjYsLTEuNyAtMi4xLC0yLjEgbCAtMi40LDUuNiB6IG0gNS41LC0xNy43IDIuMSwwLjUgLTAuOCwyLjEgYyAxLjgsMC40IDMuOCwyLjUgMy44LDQuNiB2IDEuNyBsIC0yLjgsLTEuMSBjIDAsLTMgLTEuMSwtMi40IC0xLjUsLTMuNiBoIC0wLjQgbCAtMi41LDUuNiBjIDEuNiwxLjEgNC40LDMuMyA0LjQsNS45IHYgMC40IGMgMCwwLjYgLTEuMiwyLjYgLTEuNSwzIC0wLjYsMC44IC0xLjgsMS4zIC0zLjIsMS4zIGggLTAuNiBjIC0xLjYsMCAtMi4yLC0wLjcgLTMuNiwtMC44IGwgLTAuNiwxLjcgLTEuNywtMC44IGMgMC4xLC0wLjYgMC41LC0xLjQgMC41LC0yIDAsLTAuMyAtNC4yLC0yLjkgLTQuMiwtNS43IHYgLTAuNCBjIDAsLTAuNiAwLjYsLTIuNCAxLC0yLjQgMC40LDAuMSAxLjQsMSAyLjQsMS4yIC0wLjIsMC43IC0wLjcsMS4zIC0wLjcsMi4xIHYgMC42IGMgMCwwLjggMS44LDIuMyAyLjQsMi42IDAuMiwtMSAyLjQsLTUuMyAyLjQsLTUuNyAwLC0wLjcgLTMuOCwtMi44IC0zLjgsLTQuOSBWIDg5LjEgYyAwLC0wLjQgMS4xLC0yLjMgMS40LC0yLjUgMC40LC0wLjMgMi4yLC0wLjkgMi45LC0wLjkgaCAxLjkgYyAwLjQsMCAxLjQsMC40IDEuNiwwLjUgbCAwLjgsLTEuNCB6IG0gLTIxLjgsMTUuNCAyNi42LDEyLjkgMTEsLTI0LjEgLTI2LC05LjUgLTExLjYsMjAuOCB6IG0gNSwxMi4xIC03LjcsNC42IDYsNC4xIDYsLTUuOCB6XCJ9XSxpW1wiR1IuSU4uSUMuQkFOS1wiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMC44LDExMC42IGMgMi40LDAgNS4zLDEuOSA1LjMsNC40IHYgMC43IGMgMCwzLjEgLTIuMSw0LjkgLTUuMyw0LjkgdiAtOS45IHogbSAtNi42LC04LjggYyAwLC0yLjMgMS43LC00LjQgNCwtNC40IGggMC43IHYgOSBjIC0xLjksLTAuNCAtNC42LC0xLjYgLTQuNiwtMy43IHYgLTAuOSB6IG0gNi42LC00LjQgYyAyLjIsMCA0LjYsMS42IDQuNiwzLjUgdiAwLjkgaCAzLjUgYyAwLC01LjMgLTMuNywtNi43IC04LjEsLTcuNyB2IC0yLjQgaCAtMiB2IDIuNCBjIC0zLjksMCAtOC4yLDMuNSAtOC4yLDcgdiAyLjYgYyAwLDEuMyAyLDMuNiAzLDQuMiAxLDAuNiAzLjgsMS44IDUuMSwxLjkgdiAxMC42IGMgLTMuNCwtMC4xIC01LjIsLTIuNiAtNS4yLC02LjEgaCAtMy4zIGwgMC4yLDMuNSBjIDEuMSwxLjcgMC45LDIuOCAyLjksNC4xIDEuMywwLjggMy40LDEuNiA1LjUsMS42IHYgNCBoIDIgdiAtMy45IGMgNC45LDAgOSwtMy40IDksLTguMSB2IC0xLjggYyAwLC00LjIgLTUuNCwtNiAtOSwtNi44IHYgLTkuNCB6IG0gLTI1LjMsMTUuMiB2IC0yLjQgYyAwLC0yLjIgMi42LC03LjQgMy4xLC05LjQgMC43LC0yLjcgMy4xLC01LjkgNC43LC04IDMuNSwtNC42IDguNSwtOC45IDE2LjUsLTguOSBoIDQuNCBjIDMuNCwwIDguOCw0LjMgMTAuNCw2LjUgMS4zLDEuNyAyLjIsMy4xIDMuNCw1IDAuNSwwLjcgMi43LDUuMiAyLjcsNS45IHYgMC43IGggMC40IHYgMC43IGMgMCwwLjQgMC45LDEuNSAwLjgsMy4xIGwgMC41LDAuNyBjIDAsMiAxLjEsNi44IDEuMyw5IDAuNCwzLjIgMS4zLDUuNiAtMC43LDguNSAwLDIuNCAtNS4yLDguNyAtNi4yLDguOCBsIC05LjIsLTEuNSBjIC0xLjgsLTAuMyAtNi44LDIgLTkuMiwyIC0yLDAgLTUuNiwtMS43IC03LjUsLTEuNyAtMS42LDAgLTMuMiwxLjMgLTUuNSwxLjMgaCAtMC42IGMgLTEuOSwwIC01LjksLTYuMSAtNywtNy43IC0xLjgsLTIuNiAtMi40LC04IC0yLjQsLTEyLjMgeiBtIDMwLjcsLTMxIC02LjEsLTEuMSBjIC0wLjgsLTAuMSAtNS4yLDEuMSAtNS44LDEuMyBsIC02LjMsLTExLjUgMS43LDAuNSB2IC0yLjkgbCA4LjksMy40IDAuMywtMy41IDMuMiwyLjUgNS43LC0yLjYgdiAyLjYgbCA3LjUsLTEuNCAtOS4zLDEzIDAsMCB6IG0gMTEuOCwtMTQuNSAtOS4xLDEuNiB2IC0yLjggYyAtMC45LDAuNSAtNS43LDIuOSAtNi42LDIuOSAtMC4xLDAgLTMuNCwtMi42IC00LC0yLjkgbCAtMC43LDQgLTguOCwtMy42IHYgMi45IGwgLTMuMSwtMSA4LjEsMTUuMSAtMC4yLDAuMSBjIC00LjYsMS4xIC0xMC4zLDYuOCAtMTIuNywxMC40IC0wLjgsMS4xIC0xLjMsMi42IC0yLDMuNyAtMS40LDEuOCAtMC45LDIuNSAtMS43LDQgLTAuNiwxLjEgLTIuOSw3LjIgLTIuOSw4LjYgdiAzLjcgYyAwLDEgMC43LDUuOCAxLDYuNyAwLjQsMS40IDAuNCwyIDAuOCwzLjIgMC4zLDAuOSAwLjksMS42IDEuNCwyLjMgMS4zLDIgNC44LDcuNSA3LjYsNy41IDIuNSwwIDQuMywtMS4zIDUuNywtMS4zIDIuMywwIDUuMiwxLjcgNy4zLDEuNyBoIDAuNyBjIDIsMCA1LjcsLTEuNCA4LC0xLjkgMS44LC0wLjMgNS45LDEgOC41LDEgaCAxLjcgYyAxLjcsMCA0LjgsLTQuMiA1LjgsLTUuNSAxLjEsLTEuNCAxLjMsLTIuMiAxLjcsLTQgMC4xLC0wLjQgMS4xLC00LjMgMS4xLC00LjQgMCwtMyAtMC45LC00LjEgLTEuMSwtNS45IC0wLjIsLTIuNCAtMC40LC00IC0wLjcsLTYuMSAtMC4yLC0xLjcgLTIuOCwtOC42IC0zLjYsLTEwLjMgLTIuNCwtNC45IC03LjcsLTEzLjIgLTE0LC0xMy43IGwgMTEuNywtMTYuMiB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDAuOCwxMjAuNCBjIDMuMiwwIDUuMywtMS43IDUuMywtNC45IHYgLTAuNiBjIDAsLTIuNSAtMi45LC00LjMgLTUuMywtNC40IHYgOS44IHogbSAtNi42LC0xOC43IHYgMC45IGMgMCwyLjIgMi44LDMuMyA0LjYsMy43IHYgLTkgaCAtMC43IGMgLTIuMywwIC00LDIgLTQsNC40IHogbSA2LjYsNSBjIDMuNiwwLjggOSwyLjYgOSw2LjggdiAxLjcgYyAwLDQuNyAtNC4xLDguMSAtOSw4LjEgdiA0IGggLTIgdiAtMy45IGMgLTIsMCAtNC4yLC0wLjcgLTUuNSwtMS42IC0yLC0xLjMgLTEuNywtMi41IC0yLjksLTQuMiBsIC0wLjIsLTMuNSBoIDMuMyBjIDAsMy41IDEuOCw2LjEgNS4zLDYuMiB2IC0xMC42IGMgLTEuMywtMC4xIC00LjEsLTEuMyAtNS4xLC0yIC0xLC0wLjYgLTMsLTMgLTMsLTQuMiB2IC0yLjYgYyAwLC0zLjUgNC4yLC03IDguMSwtNyB2IC0yLjQgaCAyIHYgMi40IGMgNC40LDEgOC4xLDIuMyA4LjEsNy43IGggLTMuNSB2IC0wLjkgYyAwLC0xLjkgLTIuNSwtMy41IC00LjYsLTMuNSB2IDkuNSBsIDAsMCB6IG0gLTI1LjMsNS44IGMgMCw0LjMgMC42LDkuOCAyLjQsMTIuMyAxLjEsMS42IDUuMSw3LjcgNyw3LjcgaCAwLjcgYyAyLjMsMCAzLjksLTEuMyA1LjUsLTEuMyAxLjksMCA1LjUsMS43IDcuNSwxLjcgMi41LDAgNy40LC0yLjMgOS4yLC0yIGwgOS4xLDEuNSBjIDEsMCA2LjIsLTYuNCA2LjIsLTguOCAyLC0yLjkgMSwtNS4zIDAuNywtOC42IC0wLjIsLTIuMiAtMS4zLC02LjkgLTEuMywtOSBsIC0wLjUsLTAuNiBjIDAuMSwtMS42IC0wLjgsLTIuNyAtMC44LC0zLjEgdiAtMC43IGggLTAuNCB2IC0wLjcgYyAwLC0wLjcgLTIuMiwtNS4yIC0yLjcsLTUuOSAtMS4xLC0xLjkgLTIuMSwtMy4yIC0zLjQsLTUgLTEuNiwtMi4yIC03LC02LjUgLTEwLjQsLTYuNSBoIC00LjQgYyAtOCwwIC0xMyw0LjQgLTE2LjUsOC45IC0xLjYsMi4xIC00LDUuMyAtNC43LDggLTAuNSwyIC0zLjEsNy4yIC0zLjEsOS40IHYgMi40IHogbSA0MCwtNDQgLTcuNCwxLjUgdiAtMi42IGwgLTUuOCwyLjYgLTMuMiwtMi40IC0wLjMsMy41IC04LjksLTMuNCB2IDIuOSBsIC0xLjcsLTAuNSA2LjMsMTEuNSBjIDAuNSwtMC4yIDUsLTEuNCA1LjgsLTEuMyBsIDYuMSwxLjEgOS4zLC0xMyAwLDAgelwifV0saVtcIkdSLklOLklDLkJVTExJT04gU1RPUkFHRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEyMy4xLDc3LjkgYyAwLjQsMC4xIDAuOSwwLjUgMS4zLDEgMC40LDAuNSAwLjgsMS4yIDEuMywyIGwgMi4xLDQuMSAtMi4yLDAgLTEuOSwtMy45IGMgLTAuNSwtMSAtMSwtMS43IC0xLjUsLTIgLTAuNSwtMC4zIC0xLjEsLTAuNSAtMS45LC0wLjUgbCAtMi4yLDAgMCw2LjQgLTIuMSwwIDAsLTE1LjIgNC42LDAgYyAxLjcsMS41ZS01IDMsMC40IDMuOSwxLjEgMC45LDAuNyAxLjMsMS44IDEuMywzLjMgLTFlLTUsMSAtMC4yLDEuNyAtMC43LDIuNCAtMC40LDAuNiAtMS4xLDEuMSAtMS45LDEuMyBtIC01LjEsLTYuNCAwLDUuNCAyLjYsMCBjIDEsOGUtNiAxLjcsLTAuMiAyLjIsLTAuNyAwLjUsLTAuNSAwLjgsLTEuMSAwLjgsLTIgLTFlLTUsLTAuOSAtMC4zLC0xLjYgLTAuOCwtMiAtMC41LC0wLjUgLTEuMiwtMC43IC0yLjIsLTAuNyBsIC0yLjYsMCBtIC0xMi4zLC0wLjMgYyAtMS41LDEuNGUtNSAtMi43LDAuNiAtMy42LDEuNyAtMC45LDEuMSAtMS4zLDIuNiAtMS4zLDQuNSAtMTBlLTYsMS45IDAuNCwzLjQgMS4zLDQuNSAwLjksMS4xIDIuMSwxLjcgMy42LDEuNyAxLjUsMTBlLTcgMi43LC0wLjYgMy41LC0xLjcgMC45LC0xLjEgMS4zLC0yLjYgMS4zLC00LjUgLTFlLTUsLTEuOSAtMC40LC0zLjQgLTEuMywtNC41IC0wLjksLTEuMSAtMiwtMS43IC0zLjUsLTEuNyBtIDAsLTEuNyBjIDIuMSwxLjVlLTUgMy44LDAuNyA1LjEsMi4xIDEuMywxLjQgMS45LDMuMyAxLjksNS43IC0xZS01LDIuNCAtMC42LDQuMyAtMS45LDUuNyAtMS4zLDEuNCAtMywyLjEgLTUuMSwyLjEgLTIuMSwwIC0zLjgsLTAuNyAtNS4xLC0yLjEgLTEuMywtMS40IC0xLjksLTMuMyAtMS45LC01LjcgLTEwZS03LC0yLjQgMC42LC00LjMgMS45LC01LjcgMS4zLC0xLjQgMywtMi4xIDUuMSwtMi4xIG0gLTIxLDAuMyAxMi44LDAgMCwxLjcgLTUuNCwwIDAsMTMuNCAtMi4xLDAgMCwtMTMuNCAtNS40LDAgMCwtMS43IG0gLTIsMC41IDAsMiBjIC0wLjgsLTAuNCAtMS41LC0wLjYgLTIuMiwtMC44IC0wLjcsLTAuMiAtMS40LC0wLjMgLTIsLTAuMyAtMS4xLDEuNGUtNSAtMiwwLjIgLTIuNiwwLjcgLTAuNiwwLjQgLTAuOSwxIC0wLjksMS44IC0zZS02LDAuNyAwLjIsMS4yIDAuNiwxLjUgMC40LDAuMyAxLjIsMC42IDIuMywwLjggbCAxLjIsMC4zIGMgMS41LDAuMyAyLjcsMC44IDMuNCwxLjUgMC43LDAuNyAxLjEsMS43IDEuMSwyLjkgLTEuMmUtNSwxLjUgLTAuNSwyLjYgLTEuNSwzLjMgLTEsMC44IC0yLjQsMS4xIC00LjMsMS4xIC0wLjcsMCAtMS41LC0wLjEgLTIuMywtMC4yIC0wLjgsLTAuMiAtMS42LC0wLjQgLTIuNSwtMC43IGwgMCwtMi4xIGMgMC44LDAuNSAxLjYsMC44IDIuNCwxLjEgMC44LDAuMiAxLjYsMC40IDIuNCwwLjQgMS4yLDEwZS03IDIuMSwtMC4yIDIuNywtMC43IDAuNiwtMC41IDEsLTEuMSAxLC0yIC0xZS01LC0wLjcgLTAuMiwtMS4zIC0wLjcsLTEuNyAtMC41LC0wLjQgLTEuMiwtMC43IC0yLjIsLTAuOSBsIC0xLjIsLTAuMiBjIC0xLjUsLTAuMyAtMi42LC0wLjggLTMuMywtMS40IC0wLjcsLTAuNiAtMSwtMS42IC0xLC0yLjcgLTJlLTYsLTEuMyAwLjUsLTIuNCAxLjQsLTMuMiAwLjksLTAuOCAyLjMsLTEuMiAzLjksLTEuMiAwLjcsMS41ZS01IDEuNCwwLjEgMi4yLDAuMiAwLjcsMC4xIDEuNSwwLjMgMi4zLDAuNiBNIDEwMy42LDExOS4zIGggOS42IGMgMC40LDAgOSw5LjIgOS42LDEwLjEgSCA5NS42IGMgMC4yLC0xIDcuNCwtMTAuMSA4LC0xMC4xIHogbSAtMjkuMiwwIGggOS45IGMgMC42LDAgOC4yLDkgOC45LDEwLjEgSCA2NS45IGMgMC4zLC0xIDcuOCwtMTAuMSA4LjQsLTEwLjEgbCAwLDAgeiBtIDExLjUsMCBoIDE1LjQgbCAtNi45LDkuOSAtOC41LC05LjkgeiBtIC01LjUsLTEgYyAwLjcsLTEuMSA3LjYsLTkuNCA4LjQsLTkuNCBoIDkuMiBjIDAuNywwIDguOSw4LjUgOS4yLDkuNCBIIDgwLjQgeiBtIDQzLjcsMTAuOCAtOS41LC0xMC40IDEwLjQsLTE0LjMgOS43LDguNSAtMTAuNywxNi4xIDAsMCB6IG0gLTQuOCwtMjQuOCA0LjgsLTAgLTEwLjUsMTQuMSAtNC4xLC0wLjEgOS44LC0xMy45IHogbSAtMzEuMSwtMC4yIDIuOCwwLjEgYyAtMS4xLDEuNiAtNC42LDQuOSAtNi4yLDYuOCAtMS43LDIuMSAtNC4yLDUuMSAtNS42LDcuMiBsIC00LjIsLTAuMSAxMy4yLC0xNC4xIHogbSAyMS4xLC04LjYgYyAwLjksMC42IDksOC4yIDksOC41IDAsMC4xIC05LjMsMTMuNiAtOS45LDE0IGwgLTguOSwtOS45IDkuOCwtMTIuNiB6IE0gODkuMSwxMDggYyAwLjksLTEuMyAxMS40LC0xMi42IDEyLjEsLTEyLjYgaCA2LjggbCAtOS41LDEyLjUgLTkuNCwwIHogbSAyLjksLTQuNiBoIC00LjYgYyAtMS4yLDEuOCAtNC4zLDQuOSAtNiw2LjYgLTIuMSwyLjEgLTMuOSw0LjQgLTYsNi41IC0xLjMsMS4zIC0xMS4yLDEyLjggLTExLjQsMTMuNyAwLjUsMC4xIDAuNSwwLjIgMS4yLDAuMiBsIDU5LjMsLTAgMTEuNiwtMTcuNSAtMC4zLDAuMSAtMTAuNSwtOS42IGggLTUuOCBjIC0xLjUsLTEgLTkuNiwtOC45IC0xMC40LC04LjkgaCAtOC4yIGMgLTAuOSwwIC03LjYsOCAtOSw4LjkgbCAwLDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTAzLjYsMTE5LjMgYyAtMC41LDAgLTcuNyw5LjIgLTgsMTAuMSBoIDI3LjMgYyAtMC42LC0xIC05LjIsLTEwLjEgLTkuNiwtMTAuMSBoIC05LjYgeiBtIC0yOS4yLDAgYyAtMC42LDAgLTguMiw5LjEgLTguNCwxMC4xIGggMjcuMyBjIC0wLjcsLTEuMSAtOC4zLC0xMC4xIC04LjksLTEwLjEgSCA3NC4zIGwgMCwwIHogbSA1MC43LC0xNC43IC0xMC40LDE0LjMgOS41LDEwLjQgMTAuNywtMTYuMSB6IG0gLTMwLjcsMjQuNyA2LjksLTkuOSAtMTUuNCwwIHogbSA1LjEsLTIxLjEgOC45LDkuOSBjIDAuNiwtMC40IDkuOSwtMTMuOSA5LjksLTE0IDAsLTAuMyAtOC4xLC03LjkgLTksLTguNSBsIC05LjksMTIuNiB6IG0gLTE5LjEsMTAuMiBoIDI2LjggYyAtMC4yLC0wLjkgLTguNSwtOS40IC05LjIsLTkuNCBoIC05LjIgYyAtMC45LDAgLTcuNyw4LjMgLTguNCw5LjQgeiBtIDMzLjIsMC4xIDEwLjUsLTE0LjEgLTQuOCwwIC05LjgsMTMuOSB6IG0gLTM4LjYsLTAuMiA0LjIsMC4xIGMgMS40LC0yLjEgMy45LC01LjEgNS42LC03LjIgMS42LC0xLjkgNS4xLC01LjIgNi4yLC02LjggbCAtMi44LC0wLjEgLTEzLjIsMTQuMSB6IG0gMTQuMSwtMTAuMyA5LjQsLTAgOS41LC0xMi41IGggLTYuNyBjIC0wLjcsMCAtMTEuMiwxMS4yIC0xMi4xLDEyLjYgelwifV0saVtcIkdSLklOLklDLkZFREVSQUwgUkVTRVJWRSBCQU5LXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNjUuNiwxMjUuNCBoIDY4LjggdiA0LjQgSCA2NS42IHYgLTQuNCB6IG0gNTguMSwtMzEuMyBoIDUuMyB2IDI5LjkgaCAtNS4zIHYgLTI5LjkgeiBtIC0xMC42LDAgaCA1LjEgdiAyOS45IGggLTUuMSB2IC0yOS45IHogbSAtMzEuMywwIGggNS4zIHYgMjkuOSBIIDgxLjggdiAtMjkuOSB6IG0gLTEwLjYsMCBoIDUuMSB2IDI5LjkgaCAtNS4xIHYgLTI5LjkgeiBtIDI3LjcsMS41IGggMiB2IDEuNCBoIDAuNSBjIDIuOSwwIDYsMi4zIDYsNS4zIGwgLTIuOSwwLjQgYyAtMC4yLC0wIC0xLC0xLjkgLTEuNCwtMi40IC0wLjQsLTAuNSAtMS41LC0xLjEgLTIuMywtMS4yIHYgNy44IGMgMywwLjMgNy4zLDIuMyA3LjMsNS4zIHYgMS4xIGMgMCw0IC0zLjQsNi43IC03LjMsNi43IHYgMi41IGggLTIgdiAtMi41IGMgLTEuNywtMCAtNC4xLC0wLjggLTUuMSwtMS43IC0wLjgsLTAuNyAtMi40LC0yLjggLTIuNCwtNC4xIHYgLTAuOSBsIDMuMSwtMC41IGMgMCwyLjMgMiw0LjkgNC40LDQuOSB2IC04LjYgYyAtMi4zLC0wIC02LjksLTIuNSAtNi45LC01LjEgdiAtMS44IGMgMCwtMyAzLjIsLTUuMyA2LjIsLTUuMyBoIDAuNyB2IC0xLjQgeiBtIC0zMy4zLC03LjUgaCA2OC44IHYgNC42IEggNjUuNiB2IC00LjYgeiBNIDEwMCw3MC4zIGMgMC43LDAuNiA2LjUsMy40IDcuOSw0LjEgMi43LDEuNCA1LjIsMi43IDcuOSw0LjEgMi43LDEuMyA1LjMsMi43IDcuOSw0LjEgMS4xLDAuNiA3LjcsMy42IDguMSw0IEggNjguNSBsIDMxLjUsLTE2LjEgMCwwIHogbSAtMzUuOSwxNy4xIHYgNiBjIDAsMC40IDAuMywwLjcgMC43LDAuNyBoIDQuOSB2IDI5LjkgaCAtNS42IHYgNy40IGggNzEuNyB2IC03LjQgaCAtNS41IHYgLTI5LjkgaCA0LjkgYyAwLjQsMCAwLjUsLTAuMSAwLjUsLTAuNSB2IC02LjcgYyAtMiwtMC43IC02LjcsLTMuNCAtOC45LC00LjYgLTMsLTEuNSAtNS45LC0zIC04LjksLTQuNiAtMS43LC0wLjggLTE3LjgsLTkuMSAtMTcuOSwtOS4xIC0wLjQsMCAtMTYuMyw4LjIgLTE4LjEsOS4yIC0xLjksMSAtMTcuOCw4LjcgLTE3LjgsOS42IGwgMCwwIDAsMCB6IG0gMzYuNywzMC40IGMgMS43LDAgNCwtMiA0LC0zLjUgdiAtMS40IGMgMCwtMi4xIC0yLjMsLTIuNyAtNCwtMy4xIHYgOCB6IG0gLTUuNiwtMTQgYyAwLDEuNiAyLjIsMi42IDMuNiwyLjcgdiAtNy40IGMgLTEuMywwLjMgLTMuNiwxLjQgLTMuNiwyLjcgdiAyIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEzNC40LDEyOS44IDAsLTQuNCAtNjguOCwwIDAsNC40IHogbSAtNS41LC01LjggMCwtMjkuOSAtNS4zLDAgMCwyOS45IHogbSAtMTAuOCwwIDAsLTI5LjkgLTUuMSwwIDAsMjkuOSB6IG0gLTMxLjEsMCAwLC0yOS45IC01LjMsMCAwLDI5LjkgeiBtIC0xMC43LDAgMCwtMjkuOSAtNS4xLDAgMCwyOS45IHogbSAtNy45LC0zNy41IDYzLjMsMCBjIC0wLjQsLTAuMyAtNi45LC0zLjQgLTguMSwtNCAtMi43LC0xLjMgLTUuMiwtMi43IC03LjksLTQuMSAtMi43LC0xLjMgLTUuMiwtMi43IC03LjksLTQuMSAtMS40LC0wLjcgLTcuMiwtMy41IC03LjksLTQuMSBsIC0zMS41LDE2LjEgMCwwIHogbSA2NS45LDYuMiAwLC00LjYgLTY4LjgsMCAwLDQuNiB6IG0gLTMzLjUsMjUuMSB2IC04IGMgMS43LDAuNCA0LDEgNCwzLjEgdiAxLjUgYyAwLDEuNCAtMi4yLDMuNSAtNCwzLjUgeiBtIC01LjYsLTE0IHYgLTIgYyAwLC0xLjMgMi40LC0yLjQgMy42LC0yLjcgdiA3LjQgYyAtMS41LC0wLjEgLTMuNiwtMS4xIC0zLjYsLTIuNyB6IG0gMy42LC02LjcgaCAtMC44IGMgLTMsMCAtNi4yLDIuMyAtNi4yLDUuMyB2IDEuOCBjIDAsMi41IDQuNiw1LjEgNi45LDUuMSB2IDguNiBjIC0yLjQsMCAtNC40LC0yLjUgLTQuNCwtNC45IGwgLTMuMSwwLjUgdiAwLjkgYyAwLDEuMyAxLjYsMy41IDIuNCw0LjEgMSwwLjggMy4zLDEuNiA1LjEsMS43IHYgMi41IGggMiB2IC0yLjUgYyAzLjksMCA3LjMsLTIuNyA3LjMsLTYuNyB2IC0xLjEgYyAwLC0zIC00LjMsLTUgLTcuMywtNS4zIHYgLTcuOCBjIDAuOCwwLjEgMS45LDAuNiAyLjMsMS4yIDAuMywwLjUgMS4xLDIuMyAxLjQsMi40IGwgMi45LC0wLjQgYyAwLC0zIC0zLjEsLTUuMyAtNiwtNS4zIGggLTAuNiB2IC0xLjQgaCAtMiB2IDEuNCB6XCJ9XSxpW1wiR1IuSU4uSUMuRklOQU5DSUFMIEVYQ0hBTkdFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTMzLjcsMTI0LjYgMCwtMS40IC02Ni44LDAgMC4zLDAgMCwtNDcgLTEsMCAwLDQ4LjQgeiBtIC0yOS41LC04LjYgLTkuOCwtMjAuOCAtNS45LDE0LjQgLTUuMywtNi41IC0xMy4zLDEyLjQgMC45LDEgdiAwLjIgbCAxMi40LC0xMS4zIDUuNSw3IGggMC4zIGMgMCwtMSAyLjMsLTUuNiAyLjgsLTcgMC4zLC0xIDEuMSwtMi40IDEuNSwtMy40IDAuMywtMC44IDAuOSwtMy4xIDEuNSwtMy4yIGwgOS40LDIwLjMgMC4xLDAuMiAxNy40LC0yNy40IDAuMiwwLjEgOCwxNS42IDEuNCwtMC41IC05LjQsLTE4IGMgLTAuMSwwLjUgLTcuNywxMi4xIC04LjcsMTMuNiAtMSwxLjYgLTguMiwxMy4yIC04LjksMTMuNCB6IG0gMi44LC0xOS40IFYgODkuMiBjIDIuMSwwIDQuMSwxLjQgNC4xLDMuNiB2IDAuMiBjIDAsMi4xIC0xLjksMy42IC00LjEsMy42IHogbSAtNC43LC0xMy42IGMgMCwtMiAxLC0zLjQgMywtMy40IGggMC41IHYgNi42IGMgLTEuOCwtMC4xIC0zLjQsLTEuMyAtMy40LC0zLjIgeiBtIDMuNSwtNS42IGggLTEgYyAtMi42LDAgLTUuMiwyLjkgLTUuMiw1LjYgdiAxIGMgMCwxLjEgMS4zLDIuOCAyLjEsMy40IDEuMSwwLjggMi41LDEuMiA0LDEuNSB2IDcuOCBjIC0yLjYsLTAuNiAtNC4xLC0xLjcgLTQuMSwtNC44IGggLTIuNCBsIDAuMiwyLjUgYyAwLjksMS40IDAuNiwyLjEgMi4yLDMuMiAxLjEsMC43IDIuNCwxLjIgNC4xLDEuMiB2IDIuOCBoIDEuMiB2IC0yLjggYyAzLDAgNi40LC0yLjMgNi40LC01IHYgLTIuNSBjIDAsLTIuOSAtNCwtNC4zIC02LjQsLTQuOCB2IC02LjkgYyAyLDAgMy40LDEuNCAzLjQsMy4zIGggMi43IGMgMCwtMy4yIC0yLjgsLTUuNSAtNi4xLC01LjUgViA3NS40IGggLTEuMiB2IDEuOSB6XCJ9XSxpW1wiR1IuSU4uSUMuRklOQU5DSUFMIFNFUlZJQ0VTLCBPVEhFUlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMy40LDEzOC4yIC0yLjcsMCAtMCwtOC4yIGMgLTEuOSwtMCAtMy44LC0wLjMgLTUuNywtMC43IC0xLjksLTAuNCAtMy44LC0xIC01LjgsLTEuOSBsIDAsLTQuOSBjIDEuOSwxLjIgMy43LDIuMSA1LjYsMi43IDEuOSwwLjYgMy45LDAuOSA1LjksMC45IGwgMCwtMTIuNSBjIC00LC0wLjcgLTcsLTEuOCAtOC44LC0zLjMgLTEuOCwtMS42IC0yLjcsLTMuNyAtMi43LC02LjUgLTVlLTYsLTMgMSwtNS4zIDMsLTcgMiwtMS43IDQuOCwtMi43IDguNiwtMyBsIDAsLTYuNCAyLjcsMCAwLDYuMyBjIDEuNywwLjEgMy4zLDAuMyA0LjksMC41IDEuNiwwLjMgMy4xLDAuNyA0LjYsMS4xIGwgMCw0LjggYyAtMS41LC0wLjggLTMuMSwtMS40IC00LjcsLTEuOCAtMS42LC0wLjQgLTMuMiwtMC43IC00LjksLTAuNyBsIDAsMTEuNyBjIDQuMSwwLjYgNy4yLDEuOCA5LjEsMy40IDIsMS42IDIuOSwzLjkgMi45LDYuNyAtM2UtNSwzLjEgLTEsNS41IC0zLjEsNy4zIC0yLjEsMS44IC01LDIuOCAtOC45LDMuMSBsIDAsOC4zIG0gLTIuNywtMjkuMyAwLC0xMS4yIGMgLTIuMSwwLjIgLTMuNywwLjggLTQuOCwxLjggLTEuMSwxIC0xLjcsMi4zIC0xLjcsMy45IC0xZS01LDEuNiAwLjUsMi44IDEuNSwzLjcgMSwwLjkgMi43LDEuNSA1LDEuOSBtIDIuNyw1LjMgMCwxMS44IGMgMi4zLC0wLjMgNC4xLC0xIDUuMiwtMiAxLjIsLTEgMS44LC0yLjMgMS44LC00IC0zZS01LC0xLjYgLTAuNiwtMi45IC0xLjcsLTMuOCAtMS4xLC0wLjkgLTIuOSwtMS42IC01LjMsLTIuMSBtIDUuOCwtNTIuMiAyLjEsMCAwLDYuMiA3LjUsMCAwLC02LjIgMi4xLDAgMCwxNS4yIC0yLjEsMCAwLC03LjIgLTcuNSwwIDAsNy4yIC0yLjEsMCAwLC0xNS4yIG0gLTE0LjgsMCAxMi44LDAgMCwxLjcgLTUuNCwwIDAsMTMuNCAtMi4xLDAgMCwtMTMuNCAtNS40LDAgMCwtMS43IG0gLTguMSwxLjQgYyAtMS41LDEuM2UtNSAtMi43LDAuNiAtMy42LDEuNyAtMC45LDEuMSAtMS4zLDIuNiAtMS4zLDQuNSAtM2UtNiwxLjkgMC40LDMuNCAxLjMsNC41IDAuOSwxLjEgMi4xLDEuNyAzLjYsMS43IDEuNSwxZS02IDIuNywtMC42IDMuNSwtMS43IDAuOSwtMS4xIDEuMywtMi42IDEuMywtNC41IC0xLjNlLTUsLTEuOSAtMC40LC0zLjQgLTEuMywtNC41IC0wLjksLTEuMSAtMiwtMS43IC0zLjUsLTEuNyBtIDAsLTEuNyBjIDIuMSwxLjVlLTUgMy44LDAuNyA1LjEsMi4xIDEuMywxLjQgMS45LDMuMyAxLjksNS43IC0xLjVlLTUsMi40IC0wLjYsNC4zIC0xLjksNS43IC0xLjMsMS40IC0zLDIuMSAtNS4xLDIuMSAtMi4xLC0xMGUtNyAtMy44LC0wLjcgLTUuMSwtMi4xIC0xLjMsLTEuNCAtMS45LC0zLjMgLTEuOSwtNS43IC0xZS02LC0yLjQgMC42LC00LjMgMS45LC01LjcgMS4zLC0xLjQgMywtMi4xIDUuMSwtMi4xXCJ9XSxpW1wiR1IuSU4uSUMuQ09NTUVSQ0lBTCBJTkZSQVNUUlVDVFVSRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMS45LDEyMy4zIC0xLjcsMCAtMCwtNSBjIC0xLjIsLTAgLTIuMywtMC4yIC0zLjUsLTAuNCAtMS4yLC0wLjMgLTIuMywtMC42IC0zLjUsLTEuMSBsIDAsLTMgYyAxLjEsMC43IDIuMywxLjIgMy40LDEuNiAxLjIsMC40IDIuNCwwLjUgMy42LDAuNSBsIDAsLTcuNiBjIC0yLjQsLTAuNCAtNC4yLC0xLjEgLTUuMywtMiAtMS4xLC0xIC0xLjcsLTIuMyAtMS43LC0zLjkgLTJlLTYsLTEuOCAwLjYsLTMuMiAxLjgsLTQuMyAxLjIsLTEgMi45LC0xLjYgNS4yLC0xLjggbCAwLC0zLjkgMS43LDAgMCwzLjkgYyAxLDAgMiwwLjIgMywwLjMgMSwwLjIgMS45LDAuNCAyLjgsMC43IGwgMCwyLjkgYyAtMC45LC0wLjUgLTEuOSwtMC44IC0yLjgsLTEuMSAtMSwtMC4zIC0yLC0wLjQgLTMsLTAuNCBsIDAsNy4xIGMgMi41LDAuNCA0LjQsMS4xIDUuNSwyLjEgMS4yLDEgMS44LDIuNCAxLjgsNC4xIC0yZS01LDEuOSAtMC42LDMuMyAtMS45LDQuNCAtMS4zLDEuMSAtMy4xLDEuNyAtNS40LDEuOSBsIDAsNSBtIC0xLjcsLTE3LjggMCwtNi44IGMgLTEuMywwLjEgLTIuMywwLjUgLTIuOSwxLjEgLTAuNywwLjYgLTEsMS40IC0xLDIuMyAtNmUtNiwxIDAuMywxLjcgMC45LDIuMiAwLjYsMC41IDEuNiwwLjkgMywxLjEgbSAxLjcsMy4yIDAsNy4yIGMgMS40LC0wLjIgMi41LC0wLjYgMy4yLC0xLjIgMC43LC0wLjYgMS4xLC0xLjQgMS4xLC0yLjQgLTFlLTUsLTEgLTAuMywtMS43IC0xLC0yLjMgLTAuNywtMC42IC0xLjcsLTEgLTMuMiwtMS4zIE0gMTA0LjUsNzQuOCBoIDQuNSB2IDEzLjQgaCA5LjkgViA3NC44IGggNC41IHYgMTMuNCBoIDYuNyB2IDM3IEggNzAgViA4OC4yIGggMzQuNiBsIDRlLTQsLTEzLjQgMCwwIHogbSAtMzUuNyw1MS42IGggNjIuMyBWIDg2LjkgaCAtNi40IFYgNzMuNSBoIC03LjIgdiAxMy40IGggLTcuMiBWIDczLjUgaCAtNy4yIFYgODYuOSBIIDY4LjggdiAzOS41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEwMS45LDEwOC43IDAsNy4yIGMgMS40LC0wLjIgMi41LC0wLjYgMy4yLC0xLjIgMC43LC0wLjYgMS4xLC0xLjQgMS4xLC0yLjQgLTFlLTUsLTEgLTAuMywtMS43IC0xLC0yLjMgLTAuNywtMC42IC0xLjcsLTEgLTMuMiwtMS4zIG0gLTEuNywtMy4yIDAsLTYuOCBjIC0xLjMsMC4xIC0yLjMsMC41IC0yLjksMS4xIC0wLjcsMC42IC0xLDEuNCAtMSwyLjMgLTZlLTYsMSAwLjMsMS43IDAuOSwyLjIgMC42LDAuNSAxLjYsMC45IDMsMS4xIG0gNC4zLC0zMC43IDAsMTMuNCAtMzQuNiwwIDAsMzcgNjAuMSwwIDAsLTM3IC02LjcsMCAwLC0xMy40IC00LjUsMCAwLDEzLjQgLTkuOSwwIDAsLTEzLjQgLTQuNSwwIHogbSAtNC4zLDE3LjYgMS43LDAgMCwzLjggYyAxLDAgMiwwLjIgMywwLjMgMSwwLjIgMS45LDAuNCAyLjgsMC43IGwgMCwyLjkgYyAtMC45LC0wLjUgLTEuOSwtMC44IC0yLjgsLTEuMSAtMSwtMC4zIC0yLC0wLjQgLTMsLTAuNSBsIDAsNy4xIGMgMi41LDAuNCA0LjMsMS4xIDUuNSwyLjEgMS4yLDEgMS44LDIuNCAxLjgsNC4xIC0yZS01LDEuOSAtMC42LDMuNCAtMS45LDQuNCAtMS4zLDEuMSAtMy4xLDEuNyAtNS40LDEuOSBsIDAsNSAtMS43LDAgLTAsLTUgYyAtMS4yLC0wIC0yLjMsLTAuMiAtMy41LC0wLjQgLTEuMiwtMC4zIC0yLjMsLTAuNiAtMy41LC0xLjEgbCAwLC0zIGMgMS4xLDAuNyAyLjMsMS4zIDMuNCwxLjYgMS4yLDAuNCAyLjQsMC41IDMuNiwwLjUgbCAwLC03LjYgYyAtMi40LC0wLjQgLTQuMiwtMS4xIC01LjMsLTIgLTEuMSwtMSAtMS43LC0yLjIgLTEuNywtMy45IC0yZS02LC0xLjggMC42LC0zLjIgMS44LC00LjMgMS4yLC0xIDMsLTEuNiA1LjIsLTEuOCBsIDAsLTMuOSB6XCJ9XSxpW1wiR1IuSU4uSUMuQ0hFTUlDQUwgUExBTlRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5NC40LDg5LjYgMCwwLjEgYyAtMC41LDAuMSAtMSwwLjMgLTEuNCwwLjYgLTAuNSwwLjUgLTAuNiwxLjMgLTAuNSwxLjkgMC4yLDAuOCAwLjgsMS41IDEuNywxLjggLTAsMC41IC0wLjEsMS43IDAsMyBsIC0wLjEsMCBjIC0wLDIuNyAtMi4zLDUuNyAtNC45LDguOCAtMi40LDMgLTUsNi40IC01LjMsMTAuNCBsIC0wLjEsMCBjIDAsMC4xIDAsMC4yIDAsMC4yIC0wLDAuMSAtMCwwLjIgLTAsMC4zIGwgMC4xLDAgYyAwLjIsMi40IDEuNyw0LjIgMy43LDUuMyAyLjEsMS4yIDQuNiwxLjcgNi44LDEuNiBsIDAsLTAgOC45LDAgMCwwLjEgYyAwLjMsLTAgMC41LC0wIDAuOCwtMC4xIGwgMC41LDAgMCwtMC4xIGMgMi4xLC0wLjIgNC4yLC0wLjMgNiwtMSAxLjEsLTAuNCAyLjEsLTEuMSAyLjgsLTIuMSAwLjYsLTAuOSAwLjksLTIuMSAxLjEsLTMuNiBsIDAuMiwwIGMgMC4yLC00LjQgLTIuMSwtNy41IC00LjUsLTEwLjMgLTIuMywtMi44IC00LjcsLTUuNSAtNS40LC05LjYgMCwtMS4zIDAuMSwtMyAwLjEsLTMuMyAwLjIsLTAuMSAwLjQsLTAuMiAwLjYsLTAuMyAwLjUsLTAuNCAwLjksLTEgMC45LC0xLjcgLTAsLTAuNyAtMC41LC0xLjMgLTEuMSwtMS42IC0wLjQsLTAuMiAtMC45LC0wLjMgLTEuNSwtMC40IGwgMCwtMC4xIGMgLTAuMiwwIC0wLjQsLTAgLTAuNiwwIC0yLjUsMCAtNy4yLDAgLTguMSwwIC0wLjEsLTIuNGUtNCAtMC43LDAgLTAuNywwIHogbSAwLjcsMiBjIDAuOCwwIDUuNSwwIDguMSwwIDAuNiwwIDAuOSwwLjEgMS4xLDAuMiAtMC4yLDAuMSAtMC41LDAuMyAtMC45LDAuNCBsIC04LjEsMCBjIC0wLjQsLTAuMSAtMC43LC0wLjMgLTAuNywtMC40IC0wLC0wLjEgLTAsLTAuMSAtMCwtMC4xIDAsLTAgMC4xLC0wLjEgMC42LC0wLjEgeiBtIDEuMiwyLjYgNi43LDAgYyAtMCwwLjcgLTAuMSwxLjkgLTAuMSwzLjEgLTAsMC4xIC0wLDAuMiAtMCwwLjMgbCAwLjEsMCBjIDAuOSw0LjUgMy41LDcuNiA1LjgsMTAuMyAyLjIsMi43IDQsNSA0LDguNCBsIC0wLjEsMCBjIC0wLDEuNCAtMC40LDIuNCAtMC44LDMgLTAuNCwwLjcgLTEsMS4xIC0xLjgsMS40IC0xLjQsMC42IC0zLjYsMC43IC01LjgsMC45IGwgLTEwLjMsMCAwLDAgYyAtMS42LDAgLTMuNiwtMC40IC01LjEsLTEuMyAtMS42LC0wLjkgLTIuNiwtMi4yIC0yLjcsLTMuOSAwLjEsLTMuMiAyLjQsLTYuMyA0LjksLTkuNCAyLjQsLTMgNS4xLC02LjEgNS4zLC05LjYgbCAwLjEsLTAgYyAtMC4xLC0xIC0wLjEsLTIuNyAtMCwtMy4zIHogbSAtNywxOS42IHYgMS45IGMgMCwzLjUgNiw0LjMgOS45LDQuMyBoIDMuMiBjIDIuNSwwIDgsLTIuMiA4LC00LjIgdiAtMC44IGMgMCwtMy4yIC02LjYsLTkuNCAtNy4zLC0xMi40IGggLTcuNSBjIC0wLjYsMi41IC02LjIsMTAgLTYuMiwxMS4yIHogbSAxNC44LC0zOSBoIDQuNSB2IDEzLjQgaCA5LjkgViA3NC44IGggNC41IHYgMTMuNCBoIDYuNyB2IDM3IEggNjkuNiBWIDg4LjIgaCAzNC42IGwgNGUtNCwtMTMuNCAwLDAgeiBtIC0zNS43LDUxLjYgaCA2Mi4zIFYgODYuOSBoIC02LjQgViA3My41IGggLTcuMiB2IDEzLjQgaCAtNy4yIFYgNzMuNSBoIC03LjIgdiAxMy40IGggLTM0LjQgdiAzOS41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJNIDEwNC4xIDc0LjggTCAxMDQuMSA4OC4yIEwgNjkuNiA4OC4yIEwgNjkuNiAxMjUuMiBMIDEyOS42IDEyNS4yIEwgMTI5LjYgODguMiBMIDEyMi45IDg4LjIgTCAxMjIuOSA3NC44IEwgMTE4LjUgNzQuOCBMIDExOC41IDg4LjIgTCAxMDguNiA4OC4yIEwgMTA4LjYgNzQuOCBMIDEwNC4xIDc0LjggeiBNIDk0LjQgODkuNiBDIDk0LjQgODkuNiA5NS4xIDg5LjYgOTUuMiA4OS42IEMgOTYuMSA4OS42IDEwMC44IDg5LjYgMTAzLjMgODkuNiBDIDEwMy41IDg5LjYgMTAzLjggODkuNiAxMDMuOSA4OS42IEwgMTAzLjkgODkuNyBDIDEwNC41IDg5LjggMTA1IDg5LjkgMTA1LjQgOTAuMSBDIDEwNiA5MC40IDEwNi41IDkxIDEwNi41IDkxLjcgQyAxMDYuNSA5Mi40IDEwNi4xIDkzIDEwNS42IDkzLjQgQyAxMDUuNCA5My41IDEwNS4yIDkzLjYgMTA1IDkzLjggQyAxMDUgOTQgMTA0LjkgOTUuNyAxMDQuOSA5Ny4xIEMgMTA1LjYgMTAxLjEgMTA4IDEwMy44IDExMC4zIDEwNi43IEMgMTEyLjYgMTA5LjUgMTE0LjkgMTEyLjYgMTE0LjcgMTE3IEwgMTE0LjYgMTE2LjkgQyAxMTQuNCAxMTguNCAxMTQuMSAxMTkuNiAxMTMuNSAxMjAuNSBDIDExMi44IDEyMS41IDExMS44IDEyMi4yIDExMC44IDEyMi43IEMgMTA4LjkgMTIzLjQgMTA2LjggMTIzLjUgMTA0LjggMTIzLjcgTCAxMDQuOCAxMjMuNyBMIDEwNC4zIDEyMy43IEMgMTA0LjEgMTIzLjcgMTAzLjggMTIzLjggMTAzLjUgMTIzLjggTCAxMDMuNSAxMjMuNyBMIDk0LjYgMTIzLjcgTCA5NC42IDEyMy44IEMgOTIuNCAxMjMuOSA4OS45IDEyMy40IDg3LjggMTIyLjIgQyA4NS45IDEyMS4xIDg0LjMgMTE5LjIgODQuMSAxMTYuOCBMIDg0LjEgMTE2LjggQyA4NC4xIDExNi43IDg0LjEgMTE2LjYgODQuMSAxMTYuNSBDIDg0LjEgMTE2LjQgODQgMTE2LjQgODQgMTE2LjMgTCA4NC4xIDExNi4zIEMgODQuMyAxMTIuMyA4Ni45IDEwOSA4OS40IDEwNS45IEMgOTEuOSAxMDIuNyA5NC4yIDk5LjggOTQuMyA5Ny4xIEwgOTQuMyA5Ny4xIEMgOTQuMiA5NS43IDk0LjMgOTQuNiA5NC4zIDk0IEMgOTMuNSA5My43IDkyLjggOTMuMSA5Mi42IDkyLjMgQyA5Mi40IDkxLjYgOTIuNiA5MC45IDkzLjEgOTAuNCBDIDkzLjQgOTAgOTMuOSA4OS44IDk0LjQgODkuNyBMIDk0LjQgODkuNiB6IE0gOTUuMSA5MS42IEMgOTQuNyA5MS42IDk0LjUgOTEuNyA5NC41IDkxLjggQyA5NC41IDkxLjggOTQuNSA5MS43IDk0LjYgOTEuOCBDIDk0LjYgOTEuOSA5NC44IDkyLjIgOTUuMyA5Mi4yIEwgMTAzLjQgOTIuMiBDIDEwMy44IDkyLjEgMTA0LjEgOTIgMTA0LjMgOTEuOCBDIDEwNC4xIDkxLjggMTAzLjggOTEuNiAxMDMuMiA5MS42IEMgMTAwLjYgOTEuNiA5NS45IDkxLjYgOTUuMSA5MS42IHogTSA5Ni4zIDk0LjIgQyA5Ni4yIDk0LjkgOTYuMiA5Ni41IDk2LjMgOTcuNSBMIDk2LjIgOTcuNiBDIDk2IDEwMS4xIDkzLjQgMTA0LjIgOTAuOSAxMDcuMiBDIDg4LjUgMTEwLjMgODYuMiAxMTMuMyA4Ni4xIDExNi42IEMgODYuMiAxMTguMyA4Ny4yIDExOS41IDg4LjggMTIwLjUgQyA5MC4zIDEyMS4zIDkyLjMgMTIxLjggOTMuOSAxMjEuOCBMIDkzLjkgMTIxLjcgTCAxMDQuMiAxMjEuNyBDIDEwNi41IDEyMS41IDEwOC42IDEyMS40IDExMCAxMjAuOCBDIDExMC44IDEyMC41IDExMS40IDEyMC4xIDExMS44IDExOS40IEMgMTEyLjMgMTE4LjggMTEyLjYgMTE3LjggMTEyLjcgMTE2LjQgTCAxMTIuNyAxMTYuNCBDIDExMi43IDExMyAxMTAuOSAxMTAuNiAxMDguNyAxMDcuOSBDIDEwNi41IDEwNS4yIDEwMy44IDEwMi4xIDEwMyA5Ny42IEwgMTAyLjggOTcuNiBDIDEwMi44IDk3LjUgMTAyLjkgOTcuNCAxMDIuOSA5Ny4zIEMgMTAyLjkgOTYuMSAxMDIuOSA5NC45IDEwMyA5NC4yIEwgOTYuMyA5NC4yIHogTSA5NS41IDEwMi42IEwgMTAzIDEwMi42IEMgMTAzLjggMTA1LjcgMTEwLjMgMTExLjkgMTEwLjMgMTE1LjEgTCAxMTAuMyAxMTUuOSBDIDExMC4zIDExNy45IDEwNC45IDEyMCAxMDIuNCAxMjAgTCA5OS4yIDEyMCBDIDk1LjMgMTIwIDg5LjMgMTE5LjIgODkuMyAxMTUuNyBMIDg5LjMgMTEzLjggQyA4OS4zIDExMi42IDk0LjkgMTA1LjEgOTUuNSAxMDIuNiB6IFwifV0saVtcIkdSLklOLklDLkZJUkVBUk1TIE1BTlVGQUNUVVJFUlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwNC4xLDc0LjggaCA0LjUgdiAxMy40IGggOS45IFYgNzQuOCBoIDQuNSB2IDEzLjQgaCA2LjcgdiAzNyBIIDY5LjYgViA4OC4yIGggMzQuNiBsIDRlLTQsLTEzLjQgMCwwIHogbSAtMzUuNyw1MS42IGggNjIuMyBWIDg2LjkgaCAtNi40IFYgNzMuNSBoIC03LjIgdiAxMy40IGggLTcuMiBWIDczLjUgaCAtNy4yIHYgMTMuNCBoIC0zNC40IHYgMzkuNSB6IG0gMjUuOCwtMjYuNiBoIDEwLjggdiA1LjggYyAtMS42LDAgLTQuNywxIC01LjgsMC43IC0xLjIsLTAuNCAtMy44LC0xLjUgLTUsLTEuNiB2IC00LjggeiBtIC0xOS4yLDAgaCAxNi42IHYgNiBjIDAsMC42IDMsMS40IDMuNywxLjcgMC40LDAuMSAzLjksMS40IDMuOSwxLjUgbCA3LjIsLTAuOSAwLjgsMi43IDEuMSwzLjcgYyAwLjMsMC40IDEsMi40IDEsMy4xIHYgMC4yIGMgMCwxLjEgLTAuNiwxLjkgLTAuNiwzLjUgbCAxMy41LC0wIC0wLjksLTMgLTAuNiwtMS43IC0zLC0xMCBjIC0wLjIsLTAuNCAtMC41LC0wLjcgLTAuNSwtMS4zIDAsLTEuMyAzLjksLTQuMSA0LjcsLTUuMyBsIC0yLjcsLTguNCBoIC00My45IHYgOC40IGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDk0LjIsOTkuOSBoIDEwLjggdiA1LjggYyAtMS42LDAgLTQuNywxIC01LjgsMC43IC0xLjIsLTAuNCAtMy44LC0xLjUgLTUsLTEuNiB2IC00LjggeiBtIDkuOSwtMjUuMSAwLDEzLjQgLTM0LjYsMCAwLDM3IDYwLjEsMCAwLC0zNyAtNi43LDAgMCwtMTMuNCAtNC41LDAgMCwxMy40IC05LjksMCAwLC0xMy40IC00LjUsMCB6IG0gLTI5LjEsMTYuNyA0My45LDAgMi43LDguNCBjIC0wLjgsMS4yIC00LjcsNC4xIC00LjcsNS4zIDAsMC42IDAuMiwwLjkgMC41LDEuMyBsIDMuMSwxMCAwLjYsMS44IDAuOSwzIC0xMy41LDAgYyAwLC0xLjYgMC43LC0yLjQgMC43LC0zLjYgbCAwLC0wLjIgYyAwLC0wLjcgLTAuNywtMi43IC0xLC0zLjEgTCAxMDcuMiwxMTAuOCAxMDYuNCwxMDguMSA5OS4yLDEwOSBjIC0wLC0wLjEgLTMuNiwtMS40IC0zLjksLTEuNSAtMC43LC0wLjMgLTMuNywtMS4xIC0zLjcsLTEuNyBsIDAsLTUuOSAtMTYuNiwwIDAsLTguNCB6XCJ9XSxpW1wiR1IuSU4uSUMuRklSRUFSTVMgUkVUQUlMRVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4NS4xLDEyMyAtMS4xLDAgLTAsLTMuMiBjIC0wLjgsLTAgLTEuNSwtMC4xIC0yLjMsLTAuMyAtMC44LC0wLjIgLTEuNSwtMC40IC0yLjMsLTAuNyBsIDAsLTEuOSBjIDAuNywwLjUgMS41LDAuOCAyLjIsMSAwLjgsMC4yIDEuNSwwLjMgMi4zLDAuNCBsIDAsLTQuOSBjIC0xLjYsLTAuMyAtMi43LC0wLjcgLTMuNSwtMS4zIC0wLjcsLTAuNiAtMS4xLC0xLjUgLTEuMSwtMi41IC0yZS02LC0xLjIgMC40LC0yLjEgMS4yLC0yLjggMC44LC0wLjcgMS45LC0xLjEgMy40LC0xLjIgbCAwLC0yLjUgMS4xLDAgMCwyLjUgYyAwLjcsMCAxLjMsMC4xIDEuOSwwLjIgMC42LDAuMSAxLjIsMC4zIDEuOCwwLjUgbCAwLDEuOSBjIC0wLjYsLTAuMyAtMS4yLC0wLjUgLTEuOCwtMC43IC0wLjYsLTAuMiAtMS4zLC0wLjMgLTEuOSwtMC4zIGwgMCw0LjYgYyAxLjYsMC4zIDIuOCwwLjcgMy42LDEuMyAwLjgsMC42IDEuMSwxLjUgMS4xLDIuNiAtMS4yZS01LDEuMiAtMC40LDIuMiAtMS4yLDIuOSAtMC44LDAuNyAtMiwxLjEgLTMuNSwxLjIgbCAwLDMuMyBtIC0xLjEsLTExLjUgMCwtNC40IGMgLTAuOCwwLjEgLTEuNSwwLjMgLTEuOSwwLjcgLTAuNCwwLjQgLTAuNywwLjkgLTAuNywxLjUgLTRlLTYsMC42IDAuMiwxLjEgMC42LDEuNCAwLjQsMC4zIDEuMSwwLjYgMiwwLjcgbSAxLjEsMi4xIDAsNC43IGMgMC45LC0wLjEgMS42LC0wLjQgMi4xLC0wLjggMC41LC0wLjQgMC43LC0wLjkgMC43LC0xLjYgLTFlLTUsLTAuNiAtMC4yLC0xLjEgLTAuNywtMS41IC0wLjQsLTAuNCAtMS4xLC0wLjYgLTIuMSwtMC44IG0gMjIuNiwtMjEuOSAtOCwyMC44IDAuOCwwLjMgOCwtMjAuOCAtMC44LC0wLjMgeiBtIC00Myw2LjUgMCwwLjggMC4zLDI2IDAsMC44IDAuOCwwIDMyLjIsLTAuMiAwLjQsMCAwLjIsLTAuMyA3LjMsLTguNyAwLjIsLTAuMiAtMCwtMC4zIC0wLjIsLTEwLjEgMCwtMC40IC0wLjMsLTAuMiAtOC40LC02LjYgLTAuMiwtMC4yIC0wLjMsMCAtMzEuMywtMC40IC0wLjgsMCB6IG0gMS42LDEuNiAzMC4yLDAuMyA3LjksNi4yIDAuMiw5LjQgLTYuOSw4LjIgLTMxLDAuMiAtMC4zLC0yNC4zIHogTSA5Ny4zLDg1LjQgaCAxNC40IHYgNy43IGMgLTIuMSwwIC02LjIsMS40IC03LjgsMC45IC0xLjYsLTAuNSAtNSwtMi4xIC02LjYsLTIuMiB2IC02LjQgeiBtIC0yNS41LDAgaCAyMi4xIHYgNy45IGMgMCwwLjggNCwxLjkgNC44LDIuMiAwLjUsMC4yIDUuMiwxLjkgNS4yLDIgbCA5LjYsLTEuMiAxLDMuNiAxLjQsNC45IGMgMC4zLDAuNSAxLjMsMy4yIDEuMyw0LjEgdiAwLjIgYyAwLDEuNSAtMC45LDIuNSAtMC45LDQuNyBoIDE4IGwgLTEuMSwtMy45IC0wLjgsLTIuNCAtNCwtMTMuNCBjIC0wLjMsLTAuNSAtMC42LC0wLjkgLTAuNiwtMS43IDAsLTEuNyA1LjIsLTUuNSA2LjIsLTcuMSBsIC0zLjYsLTExLjEgSCA3MS44IHYgMTEuMSBsIDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA4NS4xLDExMy42IDAsNC43IGMgMC45LC0wLjEgMS42LC0wLjQgMi4xLC0wLjggMC41LC0wLjQgMC43LC0wLjkgMC43LC0xLjYgLTFlLTUsLTAuNiAtMC4yLC0xLjEgLTAuNywtMS41IC0wLjQsLTAuNCAtMS4xLC0wLjYgLTIuMSwtMC44IG0gLTEuMSwtMi4xIDAsLTQuNCBjIC0wLjgsMC4xIC0xLjUsMC4zIC0xLjksMC43IC0wLjQsMC40IC0wLjcsMC45IC0wLjcsMS41IC00ZS02LDAuNiAwLjIsMS4xIDAuNiwxLjQgMC40LDAuMyAxLjEsMC42IDIsMC43IE0gNjYuNCw5OS44IGwgMC4zLDI0LjMgMzEsLTAuMiA2LjksLTguMiAtMC4yLC05LjQgLTcuOSwtNi4yIC0zMC4yLC0wLjMgeiBtIDE3LjcsMy4zIDEuMSwwIDAsMi41IGMgMC43LDAgMS4zLDAuMSAxLjksMC4yIDAuNiwwLjEgMS4yLDAuMiAxLjgsMC40IGwgMCwxLjkgYyAtMC42LC0wLjMgLTEuMiwtMC41IC0xLjgsLTAuNyAtMC42LC0wLjIgLTEuMywtMC4zIC0xLjksLTAuMyBsIDAsNC42IGMgMS42LDAuMyAyLjgsMC43IDMuNiwxLjMgMC44LDAuNiAxLjIsMS41IDEuMiwyLjcgLTEuMmUtNSwxLjIgLTAuNCwyLjIgLTEuMiwyLjkgLTAuOCwwLjcgLTIsMS4xIC0zLjUsMS4yIGwgMCwzLjMgLTEuMSwwIDAsLTMuMiBjIC0wLjgsLTAgLTEuNSwtMC4xIC0yLjMsLTAuMyAtMC44LC0wLjIgLTEuNSwtMC40IC0yLjMsLTAuOCBsIDAsLTEuOSBjIDAuNywwLjUgMS41LDAuOCAyLjIsMS4xIDAuOCwwLjIgMS41LDAuMyAyLjMsMC4zIGwgMCwtNC45IGMgLTEuNiwtMC4zIC0yLjcsLTAuNyAtMy41LC0xLjMgLTAuNywtMC42IC0xLjEsLTEuNSAtMS4xLC0yLjUgLTJlLTYsLTEuMiAwLjQsLTIuMSAxLjIsLTIuOCAwLjgsLTAuNyAxLjksLTEuMSAzLjQsLTEuMiBsIDAsLTIuNSB6XCJ9XSxpW1wiR1IuSU4uSUMuSEFaQVJET1VTIE1BVEVSSUFMIFBST0RVQ1RJT05cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDQuNyw3MS44IGggNSB2IDE1IGggMTEuMSB2IC0xNSBoIDUgdiAxNSBoIDcuNSB2IDQxLjQgaCAtNjcuNCBWIDg2LjggaCAzOC44IHYgLTE1IHogbSAtNDAsNTcuOSBoIDY5LjggViA4NS41IGggLTcuMSB2IC0xNS4yIGggLTggdiAxNS4yIGggLTggdiAtMTUuMiBoIC04IHYgMTUuMiBoIC0zOC42IHYgNDQuMSBsIDAsMCB6IG0gMTUuNSwtMjEuOCBoIDM4LjYgbCAtMTkuMywxOC42IC0xOS4zLC0xOC42IHogbSAyMS44LC0xNi44IGMgMC41LDAuNCA0LjMsMy44IDQuMyw0LjMgdiAxMiBoIC00LjMgViA5MS4xIHogbSAtNSwtMCAwLDE2LjMgaCAtNC4zIGwgMC4xLC0xMi4yIDQuMSwtNC4xIDAsMCB6IG0gLTEyLjEsMTIgYyAwLC0wLjQgMy4xLC0zLjIgMy42LC0zLjYgdiA3LjggaCAtMy42IHYgLTQuMyB6IG0gMjUuNywtMy42IDMuNywzLjQgYyAtMC4yLDAuNCAtMC4yLC0wLjIgLTAuMiwwLjUgdiA0IGggLTMuNiB2IC03LjkgeiBtIDkuNCw4LjIgLTIwLjUsLTIwIC0yMC40LDIwIDIwLjQsMTkuOSAyMC41LC0xOS45IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDk5LjUsMTI2LjUgMTkuMywtMTguNiAtMzguNiwwIHogbSAwLDEgLTIwLjQsLTE5LjkgMjAuNCwtMjAgMjAuNSwyMCAtMjAuNSwxOS44IHogbSA1LjIsLTQwLjggaCAtMzguOCB2IDQxLjQgaCA2Ny40IFYgODYuOCBoIC03LjUgdiAtMTUgaCAtNSB2IDE1IGggLTExLjEgdiAtMTUgaCAtNSB2IDE1IHogbSA1LjksMjAuNiBoIDMuNiB2IC00IGMgMCwtMC43IC0wLC0wLjEgMC4yLC0wLjUgbCAtMy43LC0zLjQgdiA3LjkgeiBtIC04LjYsMCBoIDQuMyB2IC0xMiBjIDAsLTAuNCAtMy44LC0zLjkgLTQuMywtNC4zIHYgMTYuMyB6IG0gLTkuMywwIDQuMywwIC0wLC0xNi4zIC00LjEsNC4xIHogbSAtNy44LC00LjMgdiA0LjMgaCAzLjYgdiAtNy45IGMgLTAuNSwwLjMgLTMuNiwzLjIgLTMuNiwzLjYgelwifV0saVtcIkdSLklOLklDLkhBWkFSRE9VUyBNQVRFUklBTCBTVE9SQUdFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTIyLjQsNjguOCBjIDAuNCwwLjEgMC45LDAuNSAxLjMsMSAwLjQsMC41IDAuOCwxLjIgMS4zLDIgbCAyLjEsNC4xIC0yLjIsMCAtMS45LC0zLjkgYyAtMC41LC0xIC0xLC0xLjcgLTEuNSwtMiAtMC41LC0wLjMgLTEuMSwtMC41IC0xLjksLTAuNSBsIC0yLjIsMCAwLDYuNCAtMi4xLDAgMCwtMTUuMiA0LjYsMCBjIDEuNywxLjVlLTUgMywwLjQgMy45LDEuMSAwLjksMC43IDEuMywxLjggMS4zLDMuMyAtMTBlLTYsMSAtMC4yLDEuNyAtMC43LDIuNCAtMC40LDAuNiAtMS4xLDEuMSAtMS45LDEuMyBtIC01LjEsLTYuNCAwLDUuNCAyLjYsMCBjIDEsOGUtNiAxLjcsLTAuMiAyLjIsLTAuNyAwLjUsLTAuNSAwLjgsLTEuMSAwLjgsLTIgLTEwZS02LC0wLjkgLTAuMywtMS42IC0wLjgsLTIgLTAuNSwtMC41IC0xLjIsLTAuNyAtMi4yLC0wLjcgbCAtMi42LDAgbSAtMTIuMywtMC4zIGMgLTEuNSwxLjRlLTUgLTIuNywwLjYgLTMuNiwxLjcgLTAuOSwxLjEgLTEuMywyLjYgLTEuMyw0LjUgLTFlLTUsMS45IDAuNCwzLjQgMS4zLDQuNSAwLjksMS4xIDIuMSwxLjcgMy42LDEuNyAxLjUsMWUtNiAyLjcsLTAuNiAzLjUsLTEuNyAwLjksLTEuMSAxLjMsLTIuNiAxLjMsLTQuNSAtMTBlLTYsLTEuOSAtMC40LC0zLjQgLTEuMywtNC41IC0wLjksLTEuMSAtMiwtMS43IC0zLjUsLTEuNyBtIDAsLTEuNyBjIDIuMSwxLjVlLTUgMy44LDAuNyA1LjEsMi4xIDEuMywxLjQgMS45LDMuMyAxLjksNS43IC0xMGUtNiwyLjQgLTAuNiw0LjMgLTEuOSw1LjcgLTEuMywxLjQgLTMsMi4xIC01LjEsMi4xIC0yLjEsLTEwZS03IC0zLjgsLTAuNyAtNS4xLC0yLjEgLTEuMywtMS40IC0xLjksLTMuMyAtMS45LC01LjcgLTJlLTYsLTIuNCAwLjYsLTQuMyAxLjksLTUuNyAxLjMsLTEuNCAzLC0yLjEgNS4xLC0yLjEgbSAtMjEsMC4zIDEyLjgsMCAwLDEuNyAtNS40LDAgMCwxMy40IC0yLjEsMCAwLC0xMy40IC01LjQsMCAwLC0xLjcgbSAtMiwwLjUgMCwyIGMgLTAuOCwtMC40IC0xLjUsLTAuNiAtMi4yLC0wLjggLTAuNywtMC4yIC0xLjQsLTAuMyAtMiwtMC4zIC0xLjEsMS40ZS01IC0yLDAuMiAtMi42LDAuNyAtMC42LDAuNCAtMC45LDEgLTAuOSwxLjggLTNlLTYsMC43IDAuMiwxLjIgMC42LDEuNSAwLjQsMC4zIDEuMiwwLjYgMi4zLDAuOCBsIDEuMiwwLjMgYyAxLjUsMC4zIDIuNywwLjggMy40LDEuNSAwLjcsMC43IDEuMSwxLjcgMS4xLDIuOSAtMS4yZS01LDEuNSAtMC41LDIuNiAtMS41LDMuMyAtMSwwLjggLTIuNCwxLjEgLTQuMywxLjEgLTAuNywtMTBlLTcgLTEuNSwtMC4xIC0yLjMsLTAuMiAtMC44LC0wLjIgLTEuNiwtMC40IC0yLjUsLTAuNyBsIDAsLTIuMSBjIDAuOCwwLjUgMS42LDAuOCAyLjQsMS4xIDAuOCwwLjIgMS42LDAuNCAyLjQsMC40IDEuMiwxZS02IDIuMSwtMC4yIDIuNywtMC43IDAuNiwtMC41IDEsLTEuMSAxLC0yIC0xZS01LC0wLjcgLTAuMiwtMS4zIC0wLjcsLTEuNyAtMC41LC0wLjQgLTEuMiwtMC43IC0yLjIsLTAuOSBsIC0xLjIsLTAuMiBjIC0xLjUsLTAuMyAtMi42LC0wLjggLTMuMywtMS40IC0wLjcsLTAuNiAtMSwtMS42IC0xLC0yLjcgLTJlLTYsLTEuMyAwLjUsLTIuNCAxLjQsLTMuMiAwLjksLTAuOCAyLjMsLTEuMiAzLjksLTEuMiAwLjcsMS41ZS01IDEuNCwwLjEgMi4yLDAuMiAwLjcsMC4xIDEuNSwwLjMgMi4zLDAuNiBNIDcwLjYsMTEwIGggNTcuOSBsIC0yOSwyNy45IC0yOC45LC0yNy45IHogbSAzMi44LC0yNS4yIGMgMC44LDAuNSA2LjQsNS44IDYuNCw2LjQgdiAxNy45IGggLTYuNCBWIDg0LjggeiBtIC03LjYsLTAuMSAwLjEsMjQuNCBoIC02LjUgbCAwLjIsLTE4LjMgNi4yLC02LjEgMCwwIHogbSAtMTguMiwxOCBjIDAsLTAuNyA0LjcsLTQuOSA1LjMsLTUuMyB2IDExLjggaCAtNS4zIHYgLTYuNSB6IG0gMzguNiwtNS4zIDUuNiw1LjIgYyAtMC4zLDAuNyAtMC4yLC0wLjMgLTAuMiwwLjcgdiA1LjkgaCAtNS4zIFYgOTcuNCB6IG0gMTQuMiwxMi4zIC0zMC43LC0zMC4xIC0zMC43LDMwIDMwLjcsMjkuOSAzMC44LC0yOS44IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDk5LjUsMTM3LjkgMjksLTI3LjkgLTU3LjksMCB6IG0gMTYuNywtMjguNyBoIDUuMyB2IC01LjkgYyAwLC0xIC0wLjEsLTAuMSAwLjIsLTAuNyBsIC01LjYsLTUuMiB2IDExLjggeiBtIC0xMi44LDAgaCA2LjQgViA5MS4yIGMgMCwtMC43IC01LjYsLTUuOSAtNi40LC02LjQgdiAyNC40IHogbSAtMTQsLTEwZS02IDYuNSwwIC0wLjEsLTI0LjQgLTYuMiw2LjEgeiBtIC0xMS44LC02LjQgdiA2LjQgaCA1LjMgViA5Ny40IGMgLTAuNywwLjUgLTUuMyw0LjcgLTUuMyw1LjMgelwifV0saVtcIkdSLklOLklDLklORFVTVFJJQUwgU0lURVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwNC4xLDc0LjggaCA0LjUgdiAxMy40IGggOS45IFYgNzQuOCBoIDQuNSB2IDEzLjQgaCA2LjcgdiAzNyBIIDY5LjYgViA4OC4yIGggMzQuNiBsIDRlLTQsLTEzLjQgMCwwIHogbSAtMzUuNyw1MS42IGggNjIuMyBWIDg2LjkgaCAtNi40IFYgNzMuNSBoIC03LjIgdiAxMy40IGggLTcuMiBWIDczLjUgaCAtNy4yIHYgMTMuNCBoIC0zNC40IHYgMzkuNSB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDQuMSw3NC44IGggNC41IHYgMTMuNCBoIDkuOSBWIDc0LjggaCA0LjUgdiAxMy40IGggNi43IHYgMzcgSCA2OS42IFYgODguMiBoIDM0LjYgbCA0ZS00LC0xMy40IDAsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuTEFOREZJTExcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjQuMSwxMTUuOCBjIDAsMi41IDEuNiwyLjcgMywzLjYgaCAtMjIuOCBjIDEuMiwtMC43IDIuOCwtMS4yIDIuOCwtMy4zIHYgLTEuMiBjIDAsLTEuMyAtMS45LC0yLjggLTMuNiwtMi44IC0xLDAgLTEuOCwwLjQgLTIuMywwLjkgLTAuNCwwLjQgLTEuMSwxLjYgLTEuMSwyLjEgdiAxLjMgYyAwLDAuMiAwLjksMS43IDEsMS45IDAuNiwwLjcgMS4yLDAuNiAxLjgsMSBoIC04LjYgYyAwLjYsLTAuNCAxLjMsLTAuNSAxLjgsLTEuMSAwLjQsLTAuNCAwLjYsLTEuNCAxLC0xLjYgdiAtMS43IGMgMCwtMC40IC0wLjksLTEuOCAtMS4yLC0yLjEgLTAuNiwtMC42IC0xLjMsLTAuOSAtMi40LC0wLjkgaCAtMC4xIGMgLTEuNywwIC0zLjUsMS41IC0zLjUsMy4xIHYgMS4zIGMgMCwxLjUgMiwyLjIgMi44LDIuOCBoIC04LjcgYyAtMC4xLC0zLjIgLTIuNSwtMS44IC0zLjEsLTMgLTEuMSwtMS45IDAuOSwtMi4yIC0yLjgsLTMuMSAtMy4xLC0wLjggLTIsLTAuMyAtMy45LC0yLjIgLTAuNiwtMC43IC0zLC0xLjggLTQuMiwtMS44IGggLTAuMSBjIC0xLDAgLTEuOSwxLjIgLTIuNywxLjUgLTEuMSwwLjUgLTIuMywwLjQgLTMuMiwxLjEgLTEuMSwwLjggLTIuMyw0LjQgLTIuMyw2LjIgdiAwLjYgaCAtMC40IHYgMi4yIGggNzIuMSA0LjkgdiAtMS41IGggLTkuNSBjIDAuOCwtMC41IDAuOSwtMC4yIDEuOCwtMSAwLjQsLTAuNCAwLjksLTEuNSAxLjIsLTEuNiB2IC0xLjYgYyAwLC0wLjUgLTAuOSwtMS45IC0xLjMsLTIuMiAtMC43LC0wLjUgLTEuNCwtMC44IC0yLjUsLTAuOCAtMS45LDAgLTMuNiwxLjUgLTMuNiwzLjUgdiAwLjIgaCAwIHogbSAtMSwtMTcuNiBoIDMuNSBjIDAuNSwwIDQuMiw0LjggNC42LDUuNCBoIC04LjEgdiAtNS40IHogbSAtNC4xLC0xNy44IC0wLjcsLTEuMyAtNywzLjkgMS40LDMuNSAtMzIsMTQuNSBjIDAuOCwwLjQgMi4xLDQuMyAyLjYsNS4zIDAuMiwwLjQgMi4zLDUgMi4zLDUuMSAwLDAuNSAtMC45LDAuMiAtMC44LDAuNiBsIDAuNSwzLjEgaCAzLjQgYyAwLC0yLjQgMiwtNC44IDQuMywtNC44IGggMSBjIDIuNCwwIDQuMywyLjMgNC4zLDQuOCBoIDAuNiBjIDAsLTIuNCAwLjYsLTIuMyAxLjUsLTMuNiBsIC0yLjEsLTUuNiA5LjUsLTQuMyA0LjIsOS45IC01LjEsMCBjIDAuOSwxLjMgMS42LDEuMyAxLjYsMy42IGggMTQuNCB2IC0wLjUgYyAwLC0yLjEgMi41LC00LjMgNC44LC00LjMgaCAwLjUgYyAyLjYsMCA0LjYsMi4yIDQuNiw0LjggaCAyLjYgdiAtMy4xIGggLTEuMiB2IC03LjQgYyAwLC0xLjIgLTUuOCwtNi44IC02LjEsLTguMSBoIC02LjQgdiAxNSBoIC00LjEgbCAtNS4zLC0xMi4xIDUuNSwtMi4zIC00LjMsLTkuNSA1LjYsLTcuNCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMjMuMSwxMDMuNiBoIDguMSBjIC0wLjUsLTAuNiAtNC4yLC01LjQgLTQuNiwtNS40IGggLTMuNSB2IDUuNCB6XCJ9XSxpW1wiR1IuSU4uSUMuUEhBUk1BQ0VVVElDQUwgTUFOVUZBQ1RVUkVSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA1LjIsNzEuMyBoIDUuMSBWIDg2LjUgSCAxMjEuNSBWIDcxLjMgaCA1LjEgdiAxNS4yIGggNy42IHYgNDIuMSBIIDY1LjggViA4Ni42IGggMzkuNCBWIDcxLjMgeiBNIDY0LjUsMTMwLjEgaCA3MSBWIDg1LjMgaCAtNy4zIFYgNjkuOSBoIC04LjIgViA4NS4zIGggLTguMiBWIDY5LjkgSCAxMDMuNyBWIDg1LjMgSCA2NC41IHYgNDQuOCB6IE0gOTAuMyw5My4xIGggNy42IGMgMS4yLDAgMy40LDEuOCAzLjQsMi43IHYgMi42IGMgMCwxLjMgLTIuNCwyLjkgLTMuNiwyLjkgaCAtNy40IHYgLTguMiB6IG0gLTQuOSwyNi41IGggNC45IHYgLTEzLjEgbCAxLjcsMC4xIDcuNiwxMCAtOC44LDExIDUuOSwwLjEgNS45LC03IGMgMS4yLDAuMyA0LjIsNS45IDUuNiw2LjkgaCA2LjIgYyAtMC45LC0xLjcgLTguNCwtMTAuNCAtOC40LC0xMSAwLC0wLjMgNy40LC05LjcgOC4yLC0xMC40IGwgLTYsLTAuMSAtNS42LDYuMiAtNC4zLC01LjcgYyA1LjIsLTEuMiA4LjQsLTMuMyA4LjQsLTkuOCB2IC0wLjYgYyAwLC0yIC0xLjcsLTQuNyAtMi44LC01LjggLTEsLTEgLTQuMSwtMi40IC02LjIsLTIuNCBIIDg1LjQgdiAzMS42IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDg1LjQsODggaCAxMi40IGMgMi4xLDAgNS4xLDEuNCA2LjEsMi40IDEuMSwxLjEgMi44LDMuOCAyLjgsNS44IHYgMC42IGMgMCw2LjUgLTMuMSw4LjYgLTguNCw5LjggbCA0LjMsNS43IDUuNiwtNi4yIDYuMSwwLjEgYyAtMC44LDAuNiAtOC4yLDEwIC04LjIsMTAuNCAwLDAuNyA3LjQsOS40IDguNCwxMS4xIGggLTYuMiBjIC0xLjUsLTEgLTQuNCwtNi42IC01LjYsLTYuOSBsIC01LjksNi45IC01LjksLTAuMSA4LjgsLTExIC03LjYsLTkuOSAtMS44LC0wLjEgdiAxMy4xIGggLTQuOSB2IC0zMS42IHogbSAxOS44LC0xLjQgaCAtMzkuNCB2IDQyLjEgaCA2OC40IFYgODYuNiBoIC03LjYgViA3MS4zIEggMTIxLjUgViA4Ni41IEggMTEwLjMgViA3MS4zIGggLTUuMSB2IDE1LjMgeiBtIC0xNC45LDE0LjcgaCA3LjQgYyAxLjIsMCAzLjYsLTEuNiAzLjYsLTIuOSB2IC0yLjUgYyAwLC0xIC0yLjIsLTIuNyAtMy40LC0yLjcgaCAtNy42IHYgOC4yIHpcIn1dLGlbXCJHUi5JTi5JQy5DT05UQU1JTkFURUQgSEFaQVJET1VTIFdBU1RFIFNJVEVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMzMuNyw3MS41IGMgLTAuMywwIC0wLjcsMC4xIC0wLjksMC4yIGwgLTQ5LjUsMCAtMC43LDAgMCwwLjEgYyAtMC43LDAuMyAtMS4zLDAuOSAtMS44LDEuNyAtMC42LDEgLTEuMiwyLjUgLTEuNiw0LjIgLTAuOSwzLjUgLTEuNCw4LjIgLTEuNCwxMy40IDAsNC44IDAuNSw5LjIgMS4yLDEyLjYgLTEsMC4xIC0yLjEsMC41IC0zLDAuMyAtMS4yLC0wLjEgLTIuNSwtMC4xIC0zLjgsLTAuMSAtMS4zLDAgLTYuNSwtMC45IC02LjUsMC43IDAsMS44IDYsMy40IDcuNSw2LjEgLTAuOCwxLjUgLTUuOSwxLjQgLTguMSwxLjggLTEuNSwwLjIgLTMsMC4yIC0zLjgsMS4xIC0xLDEgMC4yLDIuMyAxLjEsMi43IDEuNywwLjkgNiwxIDguMiwxLjUgMS4zLDAuMyAyLjYsMC43IDMuMSwxLjkgMC40LDEuMSAwLjYsMi42IDIuMiwyLjYgbCAwLjEsMCBjIDIuMSwwIDUuMSwtMS43IDcuOSwtMS43IGwgMS4xLDAgYyA2LjIsMCA2LjgsNy40IDEyLjMsNy43IDMuNSwwLjIgNS4zLC0wLjggNy44LC0xLjkgMS42LC0wLjcgNS41LC0yLjggNy4zLC0yLjggbCAwLjMsMCBjIDEuOCwwIDMuMywxLjEgNC44LDEuNSAxLjYsMC41IDMuMywxIDUuNCwxIGwgMC41LDAgYyAxLjIsMCAyLjMsLTAuMiAzLjIsLTAuNSAxLjIsLTAuNCAxLjEsLTEgMS4xLC0yLjQgLTAuMSwtMS45IC0yLjIsLTMuMyAtMy41LC00IC0xLjQsLTAuOSAtMy40LC0xLjggLTQuOSwtMi42IC0wLjgsLTAuNCAtMS41LC0wLjkgLTIuMywtMS40IC0xLjMsLTEgLTEsLTAuNiAtMS43LC0yLjEgMS4yLC0xLjggNi45LDAuMiA2LjksLTEuOSAwLC0wLjIgLTAuMywtMC41IC0wLjcsLTAuNyBsIDEyLjIsMCAwLjcsMCAwLC0wLjQgYyAwLjcsLTAuMyAxLjMsLTAuOSAxLjgsLTEuNyAwLjYsLTEgMS4yLC0yLjUgMS42LC00LjIgMC45LC0zLjUgMS40LC04LjIgMS40LC0xMy40IDAsLTUuMiAtMC41LC05LjkgLTEuNCwtMTMuNCAtMC40LC0xLjcgLTEsLTMuMiAtMS42LC00LjIgLTAuNiwtMSAtMS40LC0xLjggLTIuNSwtMS44IHogbSAwLjMsMS40IGMgMC4zLDAgMC43LDAuMyAxLjMsMS4xIDAuNSwwLjggMSwyLjIgMS40LDMuOCAwLjgsMy4zIDEuNCw3LjkgMS40LDEzLjEgMCw1LjEgLTAuNSw5LjggLTEuNCwxMy4xIC0wLjQsMS43IC0wLjksMyAtMS40LDMuOCAtMC41LDAuOCAtMSwxLjEgLTEuMywxLjEgLTAuMiwwIC0wLjQsLTAuMSAtMC43LC0wLjQgbCAwLDAuNyAtNDcuOSwwIGMgMC4yLC0wLjIgMC40LC0wLjQgMC42LC0wLjggMC42LC0xIDEuMSwtMi4zIDEuNSwtNCAwLjksLTMuNCAxLjQsLTguMSAxLjQsLTEzLjIgMCwtNS4yIC0wLjUsLTkuOCAtMS40LC0xMy4yIC0wLjQsLTEuNyAtMC45LC0zLjEgLTEuNSwtNCAtMC4yLC0wLjMgLTAuNCwtMC41IC0wLjYsLTAuNyBsIDQ3LjksMCAwLDAuMiBjIDAuMywtMC4zIDAuNSwtMC40IDAuNywtMC40IHogbSAtNTAuNywwLjIgYyAwLjMsMCAwLjcsMC4zIDEuMywxLjEgMC41LDAuOCAxLDIuMiAxLjQsMy44IDAuOCwzLjMgMS40LDcuOSAxLjQsMTMuMSAwLDUuMSAtMC41LDkuOCAtMS40LDEzLjEgLTAuNCwxLjcgLTAuOSwzIC0xLjQsMy44IC0wLjUsMC44IC0xLDEuMSAtMS4zLDEuMSAtMC4zLDAgLTAuNywtMC4zIC0xLjMsLTEuMSAtMC4zLC0wLjUgLTAuNiwtMS4xIC0wLjgsLTEuOCAwLjQsMS43IDEsMyAxLjcsMy41IGwgOC4zLC0wLjIgNy4xLDAuMSAyMC4zLC0wLjEgYyAwLjUsMCAxLjUsMC41IDIuMywxIGwgMCwwIGMgMC41LDAuMyAwLjgsMC42IDEsMC43IC0wLjEsMC4yIC0wLjQsMC4zIC0wLjYsMC40IC0wLjIsMC4xIC0wLjUsMC4yIC0wLjgsMC4yIC0wLjQsMC4xIC0wLjksMC4xIC0xLjMsMC4xIC0wLjIsLTAgLTAuNSwtMCAtMC43LC0wIC0wLjQsLTAgLTAuOSwtMCAtMS4yLC0wIGwgLTAuMywwIGMgLTAuOSwwIC0xLjcsMC41IC0xLjcsMS40IGwgMCwwLjEgMCwwLjEgYyAwLDAuMSAwLDAuMiAwLDAuMyAwLjcsMyAxMS4zLDUuOCAxMS45LDkuMiAwLDAuMSAwLDAuMiAwLDAuMyAtMCwwLjEgLTAsMC4xIC0wLDAuMSAtMC4yLDEuNiAtMi45LDIuMiAtNS4yLDIuMiAtMC43LDAgLTEuMywwIC0xLjgsLTAuMSAtMi42LC0wLjQgLTUuNCwtMi4zIC03LjMsLTIuMyAtNS4zLDAgLTkuNSw1LjUgLTE1LjIsNC44IC00LjQsLTAuNiAtNS41LC03LjkgLTEyLjMsLTcuOSBsIC0xLjMsMCBjIC0zLDAgLTUuNiwxLjcgLTguNCwxLjcgLTAuNSwwIC0wLjcsLTAuMyAtMC45LC0wLjYgLTAsLTAgLTAsLTAuMSAtMC4xLC0wLjEgLTAuMiwtMC41IC0wLjMsLTEuMSAtMC42LC0xLjYgLTAsLTAgMCwtMCAwLC0wIC0wLC0wLjEgLTAuMSwtMC4xIC0wLjEsLTAuMiAtMCwtMCAtMCwtMC4xIC0wLjEsLTAuMSAtMCwtMC4xIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAuMSwtMC4yIC0wLjMsLTAuMyAtMC40LC0wLjQgLTEuMiwtMC45IC0yLjMsLTEuMSAtNCwtMS40IC0xLjksLTAuMyAtNS44LC0wLjMgLTcuMywtMS41IC0wLC0wIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAsLTAgLTAsLTAgLTAuMSwtMC4xIC0wLC0wIC0wLjEsLTAuMSAtMC4xLC0wLjEgLTAsLTAgLTAsLTAgLTAsLTAuMSAtMCwtMCAtMCwtMCAtMCwtMCAtMC4yLC0wLjMgLTAuNCwtMC42IC0wLjQsLTAuOSBsIDAsLTAuMyBjIDAsLTIuMSAxMy4yLC0wLjkgMTMuMiwtMy4yIDAsLTAuMyAtMC4xLC0wLjYgLTAuMywtMC44IC0wLC0wLjEgLTAuMSwtMC4xIC0wLjEsLTAuMiAtMCwtMCAtMCwtMCAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLjEsLTAuMSAtMC4yLC0wLjIgLTAsLTAgLTAsLTAgLTAuMSwtMC4xIC0wLjEsLTAuMSAtMC4zLC0wLjMgLTAuNSwtMC40IC0xLjcsLTEuMyAtNC44LC0yLjcgLTYuMywtMy45IC0wLjEsLTAuMSAtMC4zLC0wLjIgLTAuNCwtMC4zIC0wLC0wIC0wLC0wIC0wLjEsLTAuMSAtMCwtMCAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLC0wIC0wLC0wIC0wLjEsLTAuMSAtMCwtMCAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLjEsLTAuMSAtMC4yLC0wLjIgLTAuMiwtMC40IDAuMywtMC4xIDAuNiwtMC4zIDEuMSwtMC4zIGwgMi45LDAgNi4zLDAuMyAyLjYsLTAuMyBjIDkuNGUtNCwwIC05LjRlLTQsMCAwLDAgbCAwLjcsLTAuMSAwLjgsMC4xIGMgLTAsLTAgLTAsLTAgLTAsLTAgLTAuOCwtMy4zIC0xLjQsLTcuOSAtMS40LC0xMy4xIDAsLTUuMSAwLjUsLTkuNyAxLjQsLTEzLjEgMC40LC0xLjcgMC45LC0zIDEuNCwtMy44IDAuNSwtMC44IDEsLTEuMSAxLjMsLTEuMSB6IG0gMjcuNywxLjEgLTE3LjQsMTcgMTcuNCwxNi45IDE3LjQsLTE2LjkgLTE3LjQsLTE3IHogbSAtMi4yLDIuOSAwLDEzLjggLTMuNiwwIDAuMSwtMTAuNCAzLjUsLTMuNSB6IG0gNC4zLDAgYyAwLjQsMC4zIDMuNiwzLjMgMy42LDMuNyBsIDAsMTAuMiAtMy42LDAgMCwtMTMuOCB6IG0gNy4zLDcuMiAzLjIsMi45IGMgLTAuMSwwLjEgLTAuMSwwLjEgLTAuMSwwLjEgLTAsLTAgMCwwIDAsMC4zIGwgMCwzLjMgLTMuMSwwIDAsLTYuNyB6IG0gLTE4LjgsMCAwLDYuNyAtMywwIDAsLTMuNyBjIDAsLTAuNCAyLjcsLTIuOCAzLC0zIHogbSAtNyw3LjEgMzIuOCwwIC0xNi40LDE1LjggLTE2LjQsLTE1LjggelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTM0LDcyLjkgYyAtMC4yLDAgLTAuNCwwLjEgLTAuNywwLjQgbCAwLC0wLjIgLTQ3LjksMCBjIDAuMiwwLjIgMC40LDAuNCAwLjYsMC43IDAuNiwxIDEuMSwyLjMgMS41LDQgMC45LDMuNCAxLjQsOC4xIDEuNCwxMy4yIDAsNS4yIC0wLjUsOS44IC0xLjQsMTMuMiAtMC40LDEuNyAtMC45LDMuMSAtMS41LDQgLTAuMiwwLjMgLTAuNCwwLjUgLTAuNiwwLjggbCA0Ny45LDAgMCwtMC43IGMgMC4zLDAuMyAwLjUsMC40IDAuNywwLjQgMC4zLDAgMC43LC0wLjMgMS4zLC0xLjEgMC41LC0wLjggMSwtMi4yIDEuNCwtMy44IDAuOCwtMy4zIDEuNCwtNy45IDEuNCwtMTMuMSAwLC01LjEgLTAuNSwtOS44IC0xLjQsLTEzLjEgLTAuNCwtMS43IC0wLjksLTMgLTEuNCwtMy44IC0wLjUsLTAuOCAtMSwtMS4xIC0xLjMsLTEuMSB6IG0gLTUwLjcsMC4yIGMgLTAuMywwIC0wLjcsMC4zIC0xLjMsMS4xIC0wLjUsMC44IC0xLDIuMiAtMS40LDMuOCAtMC44LDMuMyAtMS40LDcuOSAtMS40LDEzLjEgMCw1LjEgMC41LDkuOCAxLjQsMTMuMSAwLDAgMCwwIDAsMCBsIC0wLjgsLTAuMSAtMy4zLDAuNCAtNi4yLC0wLjMgLTIuOSwwIGMgLTAuNSwwIC0wLjgsMC4xIC0xLjEsMC4zIDAuNCwxLjYgOC40LDQuMyA4LjQsNi41IDAsMi4zIC0xMy4yLDEuMSAtMTMuMiwzLjIgbCAwLDAuMyBjIDAsMi40IDUuNiwyLjMgOCwyLjcgMS43LDAuMyAyLjgsMC41IDQsMS40IDEuMywxIDAuOCwzLjMgMi4yLDMuMyAyLjgsMCA1LjQsLTEuNyA4LjQsLTEuNyBsIDEuMywwIGMgNi44LDAgNy45LDcuMyAxMi4zLDcuOSA1LjcsMC43IDkuOSwtNC44IDE1LjIsLTQuOCAxLjgsMCA0LjcsMS45IDcuMywyLjMgMi4zLDAuMiA3LC0wLjIgNywtMi40IDAsLTMuNiAtMTIsLTYuNSAtMTIsLTkuOCBsIDAsLTAuMSBjIDAsLTAuOSAwLjksLTEuNCAxLjcsLTEuNCBsIDAuMywwIGMgMS40LDAgMy45LDAuMyA0LjcsLTAuNyAtMC4zLC0wLjQgLTIuNSwtMS43IC0zLjIsLTEuNyBsIC0yMC4zLDAuMSAtNy4xLC0wLjEgLTguMywwLjIgYyAtMC43LC0wLjUgLTEuMywtMS44IC0xLjcsLTMuNSAwLjMsMC43IDAuNSwxLjMgMC44LDEuOCAwLjUsMC44IDEsMS4xIDEuMywxLjEgMC4zLDAgMC43LC0wLjMgMS4zLC0xLjEgMC41LC0wLjggMSwtMi4yIDEuNCwtMy44IDAuOCwtMy4zIDEuNCwtNy45IDEuNCwtMTMuMSAwLC01LjEgLTAuNSwtOS43IC0xLjQsLTEzLjEgLTAuNCwtMS43IC0wLjksLTMgLTEuNCwtMy44IC0wLjUsLTAuOCAtMSwtMS4xIC0xLjMsLTEuMSB6IG0gMjcuNywxLjEgMTcuNCwxNyAtMTcuNCwxNi45IC0xNy40LC0xNi45IDE3LjQsLTE3IHogbSAtMi4yLDIuOSAtMy41LDMuNSAtMC4xLDEwLjQgMy42LDAgLTAsLTEzLjggeiBtIDQuMywwIDAsMTMuOCAzLjYsMCAwLC0xMC4yIGMgMCwtMC40IC0zLjIsLTMuNCAtMy42LC0zLjcgeiBtIDcuMyw3LjIgMCw2LjcgMy4xLDAgMCwtMy4zIGMgMCwtMC4zIC0wLC0wLjMgLTAsLTAuMyAwLDAgMCwwIDAuMSwtMC4xIGwgLTMuMiwtMi45IHogbSAtMTguOCwwIGMgLTAuNCwwLjMgLTMsMi43IC0zLDMgbCAwLDMuNyAzLDAgMCwtNi43IHogbSAtNyw3LjEgMTYuNCwxNS44IDE2LjQsLTE1LjggLTMyLjgsMCB6XCJ9XSxpW1wiR1IuSU4uSUMuVE9YSUMgUkVMRUFTRSBJTlZFTlRPUllcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MS44LDYxIDAsMTUuMiAyLDAgMCwtNi40IDIuMiwwIGMgMC44LDZlLTYgMS41LDAuMiAxLjksMC41IDAuNSwwLjMgMSwxIDEuNSwyIGwgMS45LDMuOSAyLjIsMCAtMi4xLC00LjIgYyAtMC40LC0wLjkgLTAuOCwtMS41IC0xLjMsLTIgLTAuNCwtMC41IC0wLjgsLTAuOCAtMS4zLC0wLjkgMC44LC0wLjIgMS41LC0wLjcgMS45LC0xLjMgMC40LC0wLjYgMC43LC0xLjQgMC43LC0yLjQgLTJlLTUsLTEuNSAtMC40LC0yLjYgLTEuMywtMy4zIC0wLjksLTAuNyAtMi4xLC0xLjEgLTMuOSwtMS4xIGwgLTQuNiwwIHogbSAxNC41LDAgMCwxNS4yIDkuOCwwIDAsLTEuNyAtNy43LDAgMCwtNS41IDcuMiwwIDAsLTEuNyAtNy4yLDAgMCwtNC41IDcuNSwwIDAsLTEuNyAtOS42LDAgeiBtIDEzLjIsMCAwLDE1LjIgOS40LDAgMCwtMS43IC03LjQsMCAwLC0xMy40IC0yLDAgeiBtIC0yNS42LDEuNyAyLjYsMCBjIDEsMS40ZS01IDEuNywwLjIgMi4yLDAuNyAwLjUsMC40IDAuOCwxLjEgMC44LDIgLTEwZS02LDAuOSAtMC4zLDEuNiAtMC44LDIgLTAuNSwwLjUgLTEuMiwwLjcgLTIuMiwwLjcgbCAtMi42LDAgMCwtNS40IHogbSAxNiwxNC43IGMgLTQuMywxLjFlLTUgLTguMywwLjQgLTExLjIsMS4yIC0xLjQsMC40IC0yLjYsMC44IC0zLjUsMS4zIC0wLjcsMC40IC0xLjIsMC45IC0xLjQsMS41IGwgLTAuMSwwIDAsMC42IGMgLTMuMWUtNSwwIDAsMCAwLDAgbCAwLDMxLjEgLTAuMiwtMC43IGMgLTAuMSwwIC0xLjEsMC4xIC0yLjQsMCAtMS4yLC0wLjEgLTIuNywtMC4yIC00LjIsLTAuMyAtMS41LC0wLjEgLTIuOSwtMC4yIC00LC0wLjEgLTAuNiwwIC0xLjEsMCAtMS41LDAuMSAtMC4yLDAgLTAuNCwwLjEgLTAuNiwwLjIgLTAuMiwwLjEgLTAuNCwwLjIgLTAuNiwwLjUgLTAuMywwLjQgLTAuNCwwLjkgLTAuMywxLjQgMC4xLDAuNSAwLjMsMC44IDAuNSwxLjIgMC41LDAuNyAxLjIsMS4yIDEuOSwxLjcgMC43LDAuNSAxLjQsMSAxLjksMS41IDAuNSwwLjUgMC43LDAuOSAwLjYsMS4yIC0wLDAuMSAtMCwwLjIgLTAuMiwwLjMgLTAuMiwwLjIgLTAuNiwwLjMgLTEsMC41IC0wLjksMC4zIC0yLjIsMC41IC0zLjUsMC43IC0xLjMsMC4yIC0yLjcsMC4zIC0zLjcsMC41IC0wLjUsMC4xIC0xLDAuMiAtMS40LDAuNCAtMC4yLDAuMSAtMC40LDAuMiAtMC42LDAuMyAtMC4yLDAuMiAtMC40LDAuNCAtMC40LDAuNyAtMC4xLDAuOSAwLjMsMS43IDEsMi4zIDAuNywwLjYgMS41LDEuMSAyLjYsMS42IDIuMSwwLjkgNC45LDEuNyA3LjksMi40IDIuOSwwLjcgNS45LDEuMiA4LjMsMS43IDIuNCwwLjQgNC40LDAuOCA0LjgsMC45IDIsMC42IDMuMywxLjggNC45LDMuMiAxLjUsMS4zIDMuMiwyLjggNS44LDMuNSAzLDAuOCA2LjIsLTAuNiA5LjQsLTIgMy4yLC0xLjQgNi40LC0yLjggOS4xLC0yLjUgMC4xLDAgMSwwLjIgMS45LDAuNSAxLDAuMyAyLjIsMC42IDMuNCwwLjggMS4yLDAuMyAyLjQsMC41IDMuNSwwLjYgMS4xLDAuMSAyLDAuMiAyLjcsLTAuNSAwLjgsLTAuNyAxLjMsLTEuNCAxLjQsLTIuMSAwLjIsLTAuOCAtMCwtMS41IC0wLjQsLTIuMiAtMC44LC0xLjMgLTIuMiwtMi4zIC0zLjksLTMuMiAtMS42LC0wLjkgLTMuNSwtMS44IC01LC0yLjYgLTEuNSwtMC44IC0yLjcsLTEuNiAtMywtMS45IC0wLjIsLTAuMyAtMC4yLC0wLjIgLTAuMSwtMC40IDAuMSwtMC4xIDAuMywtMC40IDAuNywtMC43IDAuOCwtMC41IDIuMiwtMSAzLjIsLTEuNSAwLjUsLTAuMyAxLC0wLjUgMS4zLC0xIDAuMiwtMC4zIDAuMywtMC43IDAuMiwtMSAtMC4xLC0wLjQgLTAuMywtMC42IC0wLjYsLTAuOCAtMC41LC0wLjQgLTEuMiwtMC43IC0yLjMsLTEuMSAtMS4xLC0wLjMgLTIuNiwtMC43IC00LjYsLTEuMSBsIC0wLjMsMS4zIDAsLTM1LjQgMCwtMC42IC0wLjEsMCBjIC0wLjIsLTAuNiAtMC43LC0xLjEgLTEuNCwtMS41IC0wLjksLTAuNSAtMi4xLC0xIC0zLjUsLTEuMyAtMi45LC0wLjcgLTYuOCwtMS4yIC0xMS4yLC0xLjIgeiBtIDAsMS4yIGMgNC4zLC0xLjFlLTUgOC4xLDAuNCAxMC45LDEuMSAxLjQsMC40IDIuNSwwLjggMy4yLDEuMiAwLjMsMC4yIDAuNCwwLjMgMC42LDAuNSAwLjEsMC4xIDAuMiwwLjIgMC4zLDAuMyAwLDAgMCwwIDAsMC4xIDAsMCAwLDAuMSAwLDAuMSAwLDAgMCwwLjEgMCwwLjEgMCwwIC0wLDAuMSAtMCwwLjEgLTAsMCAtMCwwIC0wLDAgLTAsMCAtMCwwIC0wLDAuMSAtMCwwIC0wLDAgLTAsMC4xIC0wLDAgLTAsMCAtMCwwLjEgLTAsMCAtMCwwLjEgLTAuMSwwLjEgLTAsMC4xIC0wLjEsMC4xIC0wLjEsMC4yIC0wLDAgLTAsMCAtMCwwIC0wLjEsMC4xIC0wLjMsMC4zIC0wLjYsMC41IC0wLjcsMC40IC0xLjgsMC44IC0zLjIsMS4yIC0yLjgsMC43IC02LjYsMS4yIC0xMC45LDEuMiAtNC4zLDEuMWUtNSAtOC4xLC0wLjQgLTEwLjksLTEuMSAtMS40LC0wLjQgLTIuNSwtMC44IC0zLjIsLTEuMiAtMC4zLC0wLjIgLTAuNSwtMC4zIC0wLjYsLTAuNSAtMCwtMCAtMC4xLC0wLjEgLTAuMSwtMC4xIC0wLC0wIC0wLC0wIC0wLC0wIC0wLC0wIC0wLC0wLjEgLTAuMSwtMC4xIC0wLC0wIC0wLC0wIC0wLC0wIC0wLC0wIC0wLC0wLjEgLTAuMSwtMC4xIC0wLC0wLjEgLTAuMSwtMC4xIC0wLjEsLTAuMiAwLC0wIDAsLTAuMSAwLC0wLjEgMC4xLC0wLjIgMC4zLC0wLjYgMC45LC0wLjkgMC43LC0wLjQgMS44LC0wLjggMy4yLC0xLjIgMi44LC0wLjcgNi42LC0xLjEgMTAuOSwtMS4xIHogbSAxNSw1LjMgMCwzNC4xIDAsMCAwLDUuNiBjIDAuMSwwLjIgMC4yLDAuMyAwLjIsMC40IDAsMC4yIC0wLjIsMC42IC0wLjksMS4xIC0wLjcsMC40IC0xLjgsMC44IC0zLjIsMS4yIC0yLjgsMC43IC02LjYsMS4xIC0xMC45LDEuMSAtNC4zLDFlLTUgLTguMSwtMC40IC0xMC45LC0xLjEgLTEuNCwtMC40IC0yLjUsLTAuOCAtMy4yLC0xLjIgLTAuNiwtMC40IC0wLjksLTAuNyAtMC45LC0xIGwgLTAsMCAwLC0wLjEgMCwtMS45IGMgLTAuMSwwLjEgLTAuMSwwLjEgLTAuMiwwLjEgbCAwLC0zOC40IGMgMC4xLDAuMSAwLjIsMC4xIDAuMywwLjIgMC45LDAuNSAyLjEsMSAzLjUsMS4zIDIuOSwwLjcgNi44LDEuMiAxMS4yLDEuMiA0LjMsLTEuMmUtNSA4LjMsLTAuNSAxMS4yLC0xLjIgMS40LC0wLjQgMi42LC0wLjggMy41LC0xLjMgMC4xLC0wLjEgMC4yLC0wLjEgMC4zLC0wLjIgeiBtIC0xNS4yLDYuMSAtMTQuNiwxNC4yIDE0LjIsMTMuOCAwLjgsMCAxNC4yLC0xMy44IC0xNC42LC0xNC4zIHogbSAtMS44LDIuNCAwLDExLjYgLTMuMSwwIDAuMSwtOC43IDMsLTIuOSB6IG0gMy42LDAgYyAwLjQsMC4zIDMsMi43IDMsMyBsIDAsOC41IC0zLDAgMCwtMTEuNiB6IG0gLTkuNyw2IDAsNS42IC0yLjUsMCAwLC0zLjEgYyAwLC0wLjMgMi4yLC0yLjMgMi41LC0yLjUgeiBtIDE1LjgsMCAyLjYsMi41IGMgLTAuMSwwLjMgLTAuMSwtMC4xIC0wLjEsMC4zIGwgMCwyLjggLTIuNSwwIDAsLTUuNiB6IG0gLTIxLjcsNiAyNy41LDAgLTEzLjgsMTMuMyAtMTMuNywtMTMuMyB6IG0gLTEyLjgsOS4zIGMgMS4xLC0wIDIuNSwwIDMuOSwwLjEgMS40LDAuMSAyLjksMC4yIDQuMiwwLjMgMS4xLDAuMSAxLjksMC4xIDIuNiwtMCBsIDAsMTAgMCwwLjYgMC4zLDAgYyAwLjIsMC42IDAuNywxLjEgMS40LDEuNSAwLjksMC41IDIuMSwxIDMuNSwxLjMgMi45LDAuNyA2LjgsMS4yIDExLjIsMS4yIDQuMywtMWUtNSA4LjMsLTAuNCAxMS4yLC0xLjIgMS40LC0wLjQgMi42LC0wLjggMy41LC0xLjMgMC45LC0wLjUgMS41LC0xLjIgMS41LC0yLjEgMCwtMC4zIC0wLjEsLTAuNSAtMC4yLC0wLjggbCAwLC01LjYgYyAxLjksMC40IDMuNCwwLjggNC40LDEuMSAwLjksMC4zIDEuMywwLjUgMS42LDAuNyAtMC4xLDAuMSAtMC4xLDAuMSAtMC40LDAuMyAtMC44LDAuNCAtMi4yLDAuOSAtMy4zLDEuNiAtMC41LDAuMyAtMSwwLjcgLTEuMywxLjMgLTAuMywwLjYgLTAuMiwxLjQgMC4yLDIgMC43LDEgMiwxLjYgMy41LDIuNCAxLjYsMC44IDMuNCwxLjYgNC45LDIuNSAxLjUsMC45IDIuOCwxLjkgMy4zLDIuNyAwLjIsMC40IDAuMywwLjcgMC4yLDEgLTAuMSwwLjMgLTAuMywwLjggLTAuOSwxLjMgMCwtMCAtMC42LDAuMiAtMS41LDAuMSAtMC45LC0wLjEgLTIuMSwtMC4zIC0zLjMsLTAuNiAtMS4yLC0wLjMgLTIuNCwtMC42IC0zLjMsLTAuOCAtMSwtMC4zIC0xLjcsLTAuNSAtMi4yLC0wLjUgLTMuMywtMC4zIC02LjcsMS4zIC05LjksMi43IC0zLjIsMS40IC02LjEsMi41IC04LjQsMS45IC0yLjMsLTAuNiAtMy43LC0xLjggLTUuMiwtMy4yIC0xLjUsLTEuMyAtMy4xLC0yLjggLTUuNSwtMy41IC0wLjgsLTAuMiAtMi41LC0wLjUgLTUsLTAuOSAtMi40LC0wLjQgLTUuNCwtMSAtOC4zLC0xLjYgLTIuOSwtMC43IC01LjYsLTEuNSAtNy42LC0yLjMgLTEsLTAuNCAtMS43LC0wLjkgLTIuMiwtMS4zIC0wLjMsLTAuMyAtMC40LC0wLjUgLTAuNSwtMC43IDAuMiwtMC4xIDAuNiwtMC4yIDEuMSwtMC4zIDEsLTAuMiAyLjMsLTAuMyAzLjYsLTAuNSAxLjQsLTAuMiAyLjcsLTAuNCAzLjksLTAuOCAwLjYsLTAuMiAxLjEsLTAuNCAxLjUsLTAuOCAwLjQsLTAuMyAwLjgsLTAuOCAwLjgsLTEuNCAwLjEsLTEgLTAuNCwtMS44IC0xLjEsLTIuNSAtMC42LC0wLjcgLTEuNCwtMS4yIC0yLjEsLTEuNyAtMC43LC0wLjUgLTEuMywtMSAtMS42LC0xLjQgLTAuMSwtMC4yIC0wLjIsLTAuMyAtMC4yLC0wLjQgLTAsLTAuMSAwLC0wLjEgMC4xLC0wLjIgMCwtMCAwLjEsLTAgMC4xLC0wIDAuMywtMCAwLjcsLTAuMSAxLjIsLTAuMSB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA4NS44LDEwNC40IDEzLjcsMTMuMyAxMy44LC0xMy4zIHogbSAyMS43LC0wLjQgaCAyLjUgdiAtMi44IGMgMCwtMC41IC0wLC0wLjEgMC4xLC0wLjQgbCAtMi43LC0yLjQgdiA1LjYgeiBtIC02LjEsMCBoIDMuMSB2IC04LjUgYyAwLC0wLjMgLTIuNywtMi44IC0zLjEsLTMuMSB2IDExLjYgeiBtIC02LjYsLTguNyAtMC4xLDguNyAzLjEsMCAtMCwtMTEuNiB6IG0gLTUuNyw1LjYgdiAzLjEgaCAyLjUgdiAtNS42IGMgLTAuMywwLjIgLTIuNSwyLjIgLTIuNSwyLjUgeiBNIDk5LjgsODUuNCBjIC00LjMsMS4yZS01IC04LjEsLTAuNCAtMTAuOSwtMS4xIC0xLjQsLTAuNCAtMi41LC0wLjggLTMuMiwtMS4yIC0wLjcsLTAuNCAtMC45LC0wLjggLTAuOSwtMSAwLC0wLjIgMC4yLC0wLjYgMC45LC0xIDAuNywtMC40IDEuOCwtMC44IDMuMiwtMS4yIDIuOCwtMC43IDYuNiwtMS4yIDEwLjksLTEuMiA0LjMsLTEuMWUtNSA4LjEsMC40IDEwLjksMS4xIDEuNCwwLjQgMi41LDAuOCAzLjIsMS4yIDAuNywwLjQgMC45LDAuOCAwLjksMSAwLDAuMiAtMC4yLDAuNiAtMC45LDEgLTAuNywwLjQgLTEuOCwwLjggLTMuMiwxLjIgLTIuOCwwLjcgLTYuNiwxLjIgLTEwLjksMS4yIHogbSAtMTUsLTEuNSAwLDM4LjQgYyAwLjEsLTAuMSAwLjEsLTAuMSAwLjIsLTAuMSBsIDAsMS44IDAsMC4xIDAsMCBjIDAsMC4yIDAuMywwLjYgMC45LDAuOSAwLjcsMC40IDEuOCwwLjkgMy4yLDEuMiAyLjgsMC43IDYuNiwxLjIgMTAuOSwxLjIgNC4zLC0xZS01IDguMiwtMC41IDEwLjksLTEuMiAxLjQsLTAuNCAyLjQsLTAuOCAzLjIsLTEuMiAwLjcsLTAuNCAwLjksLTAuOCAwLjksLTEgMCwtMC4xIC0wLC0wLjIgLTAuMiwtMC40IGwgMCwtNS42IC0wLDAgMCwtMzQuMSBjIC0wLjEsMC4xIC0wLjIsMC4xIC0wLjMsMC4yIC0wLjksMC41IC0yLjEsMSAtMy41LDEuMyAtMi45LDAuNyAtNi44LDEuMiAtMTEuMiwxLjIgLTQuMywxLjFlLTUgLTguMywtMC40IC0xMS4yLC0xLjIgLTEuNCwtMC40IC0yLjYsLTAuOCAtMy41LC0xLjMgLTAuMSwtMC4xIC0wLjIsLTAuMSAtMC4zLC0wLjIgeiBtIDE0LjgsNi4xIDE0LjYsMTQuMyAtMTQuMiwxMy44IC0wLjgsMCBMIDg1LDEwNC4yIDk5LjYsOTAgeiBtIC0yNi43LDIzLjcgYyAxLjEsLTAgMi41LDAgMy45LDAuMSAxLjQsMC4xIDIuOSwwLjIgNC4yLDAuMyAxLjEsMC4xIDEuOSwwLjEgMi42LC0wIGwgMCwxMCAwLDAuNiAwLjMsMCBjIDAuMiwwLjYgMC43LDEuMSAxLjQsMS41IDAuOSwwLjUgMi4xLDEgMy41LDEuMyAyLjksMC43IDYuOCwxLjIgMTEuMiwxLjIgNC4zLC0xZS01IDguMywtMC40IDExLjIsLTEuMiAxLjQsLTAuNCAyLjYsLTAuOCAzLjUsLTEuMyAwLjksLTAuNSAxLjUsLTEuMiAxLjUsLTIuMSAwLC0wLjMgLTAuMSwtMC41IC0wLjIsLTAuOCBsIDAsLTUuNiBjIDEuOSwwLjQgMy40LDAuOCA0LjQsMS4xIDAuOSwwLjMgMS4zLDAuNSAxLjYsMC43IC0wLjEsMC4xIC0wLjEsMC4xIC0wLjQsMC4zIC0wLjgsMC40IC0yLjIsMC45IC0zLjMsMS42IC0wLjUsMC4zIC0xLDAuNyAtMS4zLDEuMyAtMC4zLDAuNiAtMC4yLDEuNCAwLjIsMiAwLjcsMSAyLDEuNiAzLjUsMi40IDEuNiwwLjggMy40LDEuNiA0LjksMi41IDEuNSwwLjkgMi44LDEuOSAzLjMsMi43IDAuMiwwLjQgMC4zLDAuNyAwLjIsMSAtMC4xLDAuMyAtMC4zLDAuOCAtMC45LDEuMyAwLC0wIC0wLjYsMC4yIC0xLjUsMC4xIC0wLjksLTAuMSAtMi4xLC0wLjMgLTMuMywtMC42IC0xLjIsLTAuMyAtMi40LC0wLjYgLTMuMywtMC44IC0xLC0wLjMgLTEuNywtMC41IC0yLjIsLTAuNSAtMy4zLC0wLjMgLTYuNywxLjMgLTkuOSwyLjcgLTMuMiwxLjQgLTYuMSwyLjUgLTguNCwxLjkgLTIuMywtMC42IC0zLjcsLTEuOCAtNS4yLC0zLjIgLTEuNSwtMS4zIC0zLjEsLTIuOCAtNS41LC0zLjUgLTAuOCwtMC4yIC0yLjUsLTAuNSAtNSwtMC45IC0yLjQsLTAuNCAtNS40LC0xIC04LjMsLTEuNiAtMi45LC0wLjcgLTUuNiwtMS41IC03LjYsLTIuMyAtMSwtMC40IC0xLjcsLTAuOSAtMi4yLC0xLjMgLTAuMywtMC4zIC0wLjQsLTAuNSAtMC41LC0wLjcgMC4yLC0wLjEgMC42LC0wLjIgMS4xLC0wLjMgMSwtMC4yIDIuMywtMC4zIDMuNiwtMC41IDEuNCwtMC4yIDIuNywtMC40IDMuOSwtMC44IDAuNiwtMC4yIDEuMSwtMC40IDEuNSwtMC44IDAuNCwtMC4zIDAuOCwtMC44IDAuOCwtMS40IDAuMSwtMSAtMC40LC0xLjggLTEuMSwtMi41IC0wLjYsLTAuNyAtMS40LC0xLjIgLTIuMSwtMS43IC0wLjcsLTAuNSAtMS4zLC0xIC0xLjYsLTEuNCAtMC4xLC0wLjIgLTAuMiwtMC4zIC0wLjIsLTAuNCAtMCwtMC4xIDAsLTAuMSAwLjEsLTAuMiAwLC0wIDAuMSwtMCAwLjEsLTAgMC4zLC0wIDAuNywtMC4xIDEuMiwtMC4xIHpcIn1dLGlbXCJHUi5JTi5JQy5DT0xMRUdFL1VOSVZFUlNJVFlcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5Ny40LDEwNi45IGggLTE0LjggdiAzMS43IGggMzIgdiAtMzEuNyBIIDk5LjggViA5NS4xIGMgMCwtMC42IDYuNSwtMyA3LjUsLTMuNCAxLjMsLTAuNSA2LjksLTMgNy45LC0zIC0wLjMsLTAuNCAtMTQuNywtNi4zIC0xNS43LC02LjMgaCAtMi4zIHYgMjQuNSB6IG0gMjMuMywtMzAuMSAtOS42LDAgMCwtMTUuMSAyLDAgMCwxMy4zIDcuNiwwIDAsMS44IE0gMTA2LDYzLjUgYyAwLjYsMC43IDEuMSwxLjUgMS40LDIuNSAwLjMsMSAwLjUsMi4xIDAuNSwzLjMgLTFlLTUsMS4yIC0wLjIsMi40IC0wLjUsMy40IC0wLjMsMSAtMC44LDEuOCAtMS40LDIuNSAtMC42LDAuNyAtMS40LDEuMiAtMi4yLDEuNSAtMC44LDAuMyAtMS44LDAuNSAtMi45LDAuNSAtMS4xLDAgLTIsLTAuMiAtMi45LC0wLjUgLTAuOSwtMC40IC0xLjYsLTAuOSAtMi4yLC0xLjUgLTAuNiwtMC43IC0xLjEsLTEuNSAtMS40LC0yLjUgLTAuMywtMSAtMC41LC0yLjEgLTAuNSwtMy4zIC0xMGUtNywtMS4yIDAuMiwtMi4zIDAuNSwtMy4zIDAuMywtMSAwLjgsLTEuOCAxLjQsLTIuNSAwLjYsLTAuNyAxLjMsLTEuMiAyLjIsLTEuNSAwLjksLTAuNCAxLjksLTAuNSAyLjksLTAuNSAxLjEsMS41ZS01IDIuMSwwLjIgMi45LDAuNSAwLjksMC40IDEuNiwwLjkgMi4yLDEuNSBtIC0wLjIsNS44IGMgLTJlLTUsLTIgLTAuNCwtMy41IC0xLjMsLTQuNSAtMC45LC0xLjEgLTIuMSwtMS42IC0zLjYsLTEuNiAtMS41LDEuNGUtNSAtMi43LDAuNSAtMy42LDEuNiAtMC45LDEuMSAtMS4zLDIuNiAtMS4zLDQuNSAtM2UtNiwyIDAuNCwzLjUgMS4zLDQuNiAwLjksMSAyLjEsMS42IDMuNiwxLjYgMS41LDJlLTYgMi43LC0wLjUgMy42LC0xLjYgMC45LC0xLjEgMS4zLC0yLjYgMS4zLC00LjYgbSAtMTQsNi41IGMgLTAuNCwwLjIgLTAuNywwLjMgLTEsMC41IC0wLjMsMC4xIC0wLjcsMC4zIC0xLjIsMC40IC0wLjQsMC4xIC0wLjksMC4yIC0xLjQsMC4zIC0wLjUsMC4xIC0xLDAuMSAtMS42LDAuMSAtMS4xLDAgLTIuMSwtMC4yIC0zLC0wLjUgLTAuOSwtMC4zIC0xLjcsLTAuOCAtMi4zLC0xLjUgLTAuNywtMC42IC0xLjIsLTEuNSAtMS41LC0yLjQgLTAuNCwtMSAtMC41LC0yLjEgLTAuNSwtMy41IC0xMGUtNywtMS4yIDAuMiwtMi40IDAuNSwtMy4zIDAuNCwtMSAwLjksLTEuOCAxLjUsLTIuNSAwLjYsLTAuNyAxLjQsLTEuMiAyLjMsLTEuNSAwLjksLTAuMyAxLjksLTAuNSAzLC0wLjUgMC44LDEuNWUtNSAxLjYsMC4xIDIuNCwwLjMgMC44LDAuMiAxLjcsMC41IDIuNywxIGwgMCwyLjQgLTAuMiwwIGMgLTAuOCwtMC43IC0xLjcsLTEuMiAtMi41LC0xLjUgLTAuOCwtMC4zIC0xLjcsLTAuNSAtMi42LC0wLjUgLTAuOCwxLjRlLTUgLTEuNSwwLjEgLTIuMSwwLjQgLTAuNiwwLjIgLTEuMiwwLjYgLTEuNiwxLjEgLTAuNSwwLjUgLTAuOCwxLjIgLTEuMSwxLjkgLTAuMywwLjggLTAuNCwxLjcgLTAuNCwyLjcgLTNlLTYsMS4xIDAuMSwyIDAuNCwyLjcgMC4zLDAuOCAwLjcsMS40IDEuMSwxLjkgMC41LDAuNSAxLDAuOSAxLjcsMS4xIDAuNiwwLjIgMS4zLDAuNCAyLDAuNCAxLDJlLTYgMS45LC0wLjIgMi43LC0wLjUgMC44LC0wLjMgMS42LC0wLjggMi40LC0xLjUgbCAwLjEsMCAwLDIuNFwifV0saVtcIkdSLklOLklDLlNDSE9PTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDk4LjQsOTYuNCBIIDgzLjcgdiAzMS43IGggMzIgViA5Ni40IEggMTAwLjkgViA4NC42IGMgMCwtMC42IDYuNSwtMyA3LjUsLTMuNCAxLjMsLTAuNSA2LjksLTMgNy45LC0zIC0wLjMsLTAuNCAtMTQuNywtNi4zIC0xNS43LC02LjMgSCA5OC40IFYgOTYuNCB6XCJ9XSxpW1wiR1IuSU4uSUMuUkVTVCBTVE9QXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA4LjQsODkuNiB2IC0wLjQgbCAwLjYsLTAuNiAtMC40LDEuNCAtMy44LDEzLjQgLTAuMiwwLjggLTAuNCwwLjYgMCwwLjkgLTIsNi43IDcuMiwwIHYgMTkuNyBoIDUuMiB2IC0xOS43IGggMi43IHYgMTkuNyBoIDUuMiB2IC0xOS43IGggNy4xIGwgLTEuMywtNS4zIC0wLjIsLTAuOCAtNC44LC0xNi40IC0wLjUsLTEuNCAwLjYsMC43IDAuMSwwLjQgYyAyLjEsMi40IDUuNCwxNC4yIDguNiwxNC4yIGggMC40IGMgMS4yLDAgMi4xLC0xLjEgMi4xLC0yLjMgdiAtMC42IGMgMCwtMC41IC00LjgsLTEwIC01LjMsLTExLjYgLTAuNywtMiAtMS43LC00LjIgLTIuNiwtNiAtMSwtMi4xIC0xLjIsLTMuOCAtNC42LC0zLjggaCAtMTIuNCBjIC0zLjQsMCAtMy42LDEuOCAtNC43LDMuOSAtMC45LDEuNyAtMS45LDQgLTIuNSw1LjkgLTAuNiwxLjYgLTUuMiwxMS4xIC01LjIsMTEuNiB2IDAuNiBjIDAsMS4zIDAuNiwyLjMgMS45LDIuMyBoIDAuOCBjIDIuNCwwIDYuNCwtMTIuMiA4LjIsLTE0LjIgeiBtIDAuMiwwLjQgMC40LC0xLjUgLTAuNiwwLjYgMCwwLjQgeiBtIDE1LjEsLTAuNCAtMC4xLC0wLjQgLTAuNiwtMC42IDAuNSwxLjQgeiBNIDY5LjYsODguOCBoIDIuMyB2IDQzLjYgaCA2LjEgdiAtMjUuNiBoIDIuNyB2IDI1LjYgaCA1LjkgdiAtNDMuNiBoIDIuMyB2IDE2LjQgaCA0LjYgViA4Ni4zIGwgLTAuMywtMi4zIGggLTAuNCBjIDAsLTIuMyAtMS43LC00LjQgLTQsLTQuNCBIIDY5LjYgYyAtMywwIC00LjQsMy40IC00LjQsNi41IHYgMTkuMSBoIDQuNCBWIDg4LjggeiBNIDExMC43LDcyLjggYyAwLDIuNyAyLjQsNS40IDUsNS40IGggMC4yIGMgMS42LDAgMi44LC0wLjYgMy42LC0xLjQgMC41LC0wLjQgMS44LC0yLjQgMS44LC0zIHYgLTEuNiBjIDAsLTIuNCAtMi44LC00LjYgLTUuNCwtNC42IC0zLC0wIC01LjIsMi40IC01LjIsNS4yIHogbSAtMzYuNywxLjEgYyAwLDIgMi44LDQuNCA1LDQuNCBoIDAuMiBjIDQuMiwwIDQuMywtMy40IDUuMiwtMy44IFYgNzEuNiBjIDAsLTEuOCAtMi44LC00IC01LjIsLTQgLTIuMywwIC01LjIsMi4yIC01LjIsNCB2IDIuMyB6XCJ9XSxpW1wiR1IuSU4uSUMuQ09OVFJPTCBWQUxWRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExNCwxMTQuNSBoIDE1LjcgdiA0IGggOS4xIHYgLTIzLjYgaCAtOS4xIFYgOTguOCBIIDExNC40IGMgLTAuNCwwIC0yLjYsLTIuNiAtMi42LC0zLjQgdiAtNS42IGggLTkuOSB2IC04LjIgaCAxMi4zIHYgLTMuNiBoIC0yOC4yIHYgMy42IGggMTIuMSB2IDguMyBIIDg5LjIgdiA2LjYgbCAtMC4yLC0wLjIgLTEuOCwyLjQgLTE3LjIsMC4xIFYgOTUgSCA2MS4yIHYgMjMuNiBoIDguOSB2IC00IEggODcgYyAwLjQsMCAyLDIuNCAyLjQsMi44IDAuNSwwLjYgMi4yLDEuOSAyLjksMi40IDEuOSwxLjIgNC43LDIuNCA3LjgsMi40IGggMC42IGMgMy41LDAgNS44LC0xIDguMSwtMi40IDEuNCwtMC44IDQuOCwtMy44IDUuMiwtNS4zIHpcIn1dLGlbXCJHUi5JTi5JQy5EQU1cIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2OC4zLDg5LjEgYyAyLjMsMCAzLjIsLTEuNyA0LjYsLTIuNiAxLjEsMC44IDIuMiwyLjYgNC40LDIuNiBoIDAuMiBjIDIuNiwwIDMuMywtMS43IDQuNywtMi42IDEuNCwwLjkgMi4yLDIuNiA0LjcsMi42IDIuNCwwIDMuMywtMS44IDQuNiwtMi42IDAuNiwwLjQgMS4xLDEuMSAxLjksMS42IDAuNCwwLjIgMi4yLDAuOSAyLjIsMS4zIHYgNi44IEMgOTQuMSw5NS44IDkxLjgsOTMuOCA5MS41LDkyLjYgaCAtMC4zIGMgLTAuMywxLjEgLTMsMy42IC00LjUsMy42IC0xLjUsMCAtNC4xLC0yLjYgLTQuNCwtMy44IC0xLDAuNiAtMi42LDMuOCAtNC42LDMuOCBoIC0wLjQgYyAtMS4yLDAgLTQsLTIuNyAtNC4yLC0zLjcgLTAuOCwwLjIgLTIuNiwzLjcgLTQuNywzLjcgaCAtMC4zIGMgLTEuMSwwIC0xLjcsLTAuNyAtMi40LC0xLjIgbCAtMSwxLjIgYyAxLDAuNyAxLjYsMS44IDMuMiwxLjggaCAwLjQgYyAyLjMsMCAzLjEsLTEuOCA0LjYsLTIuOCAwLjcsMS4xIDIuOCwyLjggNC43LDIuOCAyLjMsMCAzLjMsLTIgNC42LC0yLjggMS4yLDAuOCAyLjYsMi44IDQuNywyLjggMi4xLDAgMy40LC0yLjEgNC43LC0yLjggMC43LDEgMi42LDIuNCA0LDIuNyB2IDcgYyAtMS40LC0wLjEgLTMuNCwtMi40IC00LC0zLjUgLTEuMSwwLjcgLTIuNSwzLjYgLTQuNywzLjYgaCAtMC4xIGMgLTIuMywwIC00LjEsLTMuNSAtNC43LC0zLjcgLTAuMywxIC0zLDMuNyAtNC4xLDMuNyBoIC0wLjQgYyAtMi4yLDAgLTMuNiwtMi45IC00LjcsLTMuNyAtMC42LDEgLTIuOCwzLjcgLTQuMSwzLjcgSCA2Ny43IGMgLTAuNywwIC0xLjcsLTEgLTIuMiwtMS4zIGwgLTAuOSwxLjUgYyAxLjEsMC43IDEuNywxLjYgMy42LDEuNiAyLjcsMCAzLjEsLTEuOCA0LjcsLTIuNiAxLjQsMC45IDIsMi42IDQuNywyLjYgMi4yLDAgMy40LC0xLjggNC42LC0yLjYgMS40LDEgMi41LDIuNiA0LjgsMi42IDEuOCwwIDMuNCwtMiA0LjQsLTIuNiAwLjksMC41IDEsMSAyLDEuNiAwLjQsMC4zIDIuMiwwLjcgMi4yLDEuMiB2IDYuOCBjIC0xLjQsLTAuMyAtMy42LC0yLjIgLTQsLTMuNSAtMS4xLDAuNyAtMi41LDMuOCAtNC44LDMuOCAtMS40LDAgLTQuMSwtMi42IC00LjQsLTMuOCAtMS4yLDAuOCAtMi42LDMuOCAtNC44LDMuOCAtMiwwIC0zLjcsLTMuMiAtNC43LC0zLjggLTAuMywxIC0zLDMuOCAtNC4zLDMuOCBoIC0wLjYgYyAtMC44LDAgLTEuOCwtMSAtMi40LC0xLjMgbCAtMC45LDEuMyBjIDEuMSwwLjcgMS44LDEuOCAzLjYsMS44IDIuMiwwIDMuMywtMS44IDQuNywtMi44IDEuMiwwLjggMi42LDIuOSA0LjcsMi44IDIuMywtMC4xIDMuMywtMS45IDQuNiwtMi44IDEuMiwwLjggMi43LDIuOCA0LjcsMi44IDEuOSwwIDMuNCwtMiA0LjYsLTIuOCAxLjYsMSAxLjgsMiA0LjEsMi41IHYgNSBoIDE3IGwgLTEuNCwtNS4yIGMgMC44LDAuMiAxLDAuNiAyLjIsMC42IDIsMCAzLjMsLTEuOSA0LjYsLTIuOCAxLjMsMC45IDIuNCwyLjggNC43LDIuOCAxLjYsMCAzLjgsLTEuOCA0LjQsLTIuOCAxLjMsMC4zIDIuNSwyLjggNS4xLDIuOCAxLjIsMCAyLjYsLTEuNCAzLjQsLTEuOCBsIC0xLC0xLjMgYyAtMC43LDAuNCAtMS41LDEuMyAtMi42LDEuMyAtMi4xLDAgLTMuNywtMy4xIC00LjcsLTMuOCAtMC43LDEuNCAtMi43LDMuOCAtNC43LDMuOCAtMS4zLDAgLTQuMywtMi42IC00LjQsLTMuOCAtMSwwLjcgLTIuNiwzLjggLTQuNywzLjggaCAtMC4yIGMgLTEuMSwwIC0yLjIsLTAuOSAtMi43LC0xLjUgLTAuNCwtMC40IC0wLjgsLTIuNSAtMS4xLC0zLjIgLTAuNCwtMSAtMS44LC01LjYgLTEuOCwtNi42IGwgLTAuMywtMC40IDAsLTAuNiAtMC4zLC0wLjQgdiAtMC42IGwgLTAuMywtMC40IC01LjMsLTE4LjYgMC4yLC0wIC0wLjMsLTAuNCAwLC0wLjYgYyAtMC4yLC0wLjMgLTAuMywtMC4zIC0wLjMsLTAuNiB2IC0wLjQgaCAtNS42IHYgNy44IGMgLTEuNCwtMC43IC0xLjIsLTAuNSAtMi40LC0xLjYgLTAuMSwtMC4xIC0xLC0wLjkgLTEsLTEgLTAuNCwtMC41IC0wLjEsLTAuOSAtMC44LC0xLjEgLTAuMSwxLjIgLTMuMSwzLjggLTQuMywzLjggaCAtMC4yIGMgLTIuNSwwIC00LjIsLTMuNiAtNC44LC0zLjggLTAuMywxLjEgLTMsMy44IC00LjIsMy44IGggLTAuNCBjIC0xLjIsMCAtNC4yLC0yLjcgLTQuMiwtMy44IC0wLjUsMC4xIC0yLjgsMy44IC00LjQsMy44IEggNjcuNyBjIC0wLjcsMCAtMS43LC0xIC0yLjIsLTEuMyBsIC0wLjksMS4zIGMgMSwwLjcgMS42LDEuNiAzLjQsMS42IGggMC4zIHYgMCB6XCJ9XSxpW1wiR1IuSU4uSUMuRElTQ0hBUkdFIE9VVEZBTExcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA2My4yLDExMS40IHYgMTMuNCBoIDczLjYgViAxMTEuNyBsIC0zLjEsMC41IC0xLjEsLTAuMSBjIC0yLjIsMCAtMy42LC0wLjcgLTQuOSwtMS42IC0wLjYsLTAuNCAtMS4xLC0xLjEgLTEuNSwtMS44IC0wLjQsLTAuNiAtMC4yLC0yLjEgLTEsLTIuMSBoIC0wLjQgYyAtMC44LDAgLTAuNywxLjYgLTEuMiwyLjIgLTAuNCwwLjYgLTAuOSwxLjIgLTEuNiwxLjcgLTEuMywxIC0zLDEuNiAtNS4xLDEuNiBoIC0wLjkgYyAtMy4yLDAgLTYuOCwtMi4xIC02LjgsLTUuMSAtMC4zLC0wLjIgLTAuNCwtMC40IC0wLjgsLTAuNCBoIC0wLjMgYyAtMC43LDAgLTAuOCwxLjUgLTEuMSwyLjEgLTAuNCwwLjYgLTEsMS40IC0xLjUsMS44IC0xLjIsMSAtMi43LDEuNiAtNC44LDEuNiBoIC0wLjkgYyAtMy41LDAgLTcuMywtMi4xIC03LjMsLTUuNCAtMC40LC0wLjEgLTAuNCwtMC4yIC0wLjgsLTAuMiBoIC0wLjMgYyAtMC42LDAgLTAuNiwxLjUgLTEuMSwyLjIgLTAuNSwwLjggLTAuNywxLjEgLTEuNSwxLjcgLTEuMywxIC0yLjcsMS42IC00LjgsMS42IEggODIuOSBjIC0zLjUsMCAtNi43LC0yLjIgLTcsLTUuNCAtMC4zLC0wLjEgLTAuNCwtMC4yIC0wLjgsLTAuMiBoIC0wLjEgYyAtMC43LDAgLTAuOCwxLjUgLTEuMiwyLjIgLTAuNCwwLjYgLTAuOSwxLjIgLTEuNiwxLjcgLTEuNCwxIC0yLjcsMS42IC01LDEuNiBoIC0xIGMgLTEuMiwwIC0yLjIsLTAuNCAtMywtMC44IGwgMCwwIHogbSAwLC0yMS42IDE5LjUsMCAwLDEuMiAyLjcsMCAwLC0xNS44IC0yLjcsMCAwLDEuMiAtMTkuNSwwIHogTSA4OS43LDgwLjkgdiAwLjEgYyA4LjEsMCAxNi4yLDEuMiAyMC42LDQuOSAyLjgsMi40IDMuMSw0LjUgMy4xLDkuNiAwLDQuMSAwLjUsOC4zIDQuNSw4LjMgaCAwLjggYyAxLjcsMCAyLjgsLTIuNiAyLjgsLTQuMyB2IC0wLjkgYyAwLC01LjEgLTMuMywtMTAuNyAtNS45LC0xMy4zIC0xLjYsLTEuNiAtMy42LC0zIC02LjEsLTMuNiAtMi4yLC0wLjUgLTYsLTEuMSAtOC42LC0xLjEgbCAtMS44LC0wLjEgLTkuNCwwLjQgelwifV0saVtcIkdSLklOLklDLkdST1VORCBXQVRFUiBXRUxMXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk04Niw2NEw4Niw3MEw3NSwxMTBMODEsMTEwTDkyLDcwTDk5LDcwTDk5LDEzMEw4NiwxMzBMODYsMTQwTDEyMCwxNDBMMTIwLDEzMEwxMTAsMTMwTDExMCw4OUwxMjAsODlMMTIwLDkzTDEzMCw5M0wxMzAsODdDMTMwLDgyLjYzMSAxMjUuNTUxLDgzIDEyNS41NTEsODNMMTEwLDgzTDExMCw3MEwxMTMuNzc0LDcwTDExMy43NzQsNjRMODYsNjRaXCJ9XSxpW1wiR1IuSU4uSUMuVEVMRUNPTU1VTklDQVRJT05TIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA5LjcsMTE2LjYgNC4xLDEzLjQgLTAuMiwwLjEgLTEyLjIsLTguNCA4LjMsLTUuMiB6IG0gLTE5LjcsMCA4LDUuMSAtMTIuMSw4LjQgNC4xLC0xMy42IHogbSA5LjgsLTkuOCA4LjgsOC4yIGMgLTEuNywwLjUgLTguMSw1LjYgLTguOCw1LjYgLTAuMiwwIC04LjIsLTUuNCAtOC42LC01LjggbCA4LjUsLTguMSB6IG0gNS4zLC00LjggMy4xLDkuOCAtNi45LC02LjQgMy43LC0zLjQgeiBtIC0xMC41LDAuMSAzLjgsMy4zIC02LjksNi40IDMuMSwtOS43IHogbSAyLjEsLTEgNi40LC0wIC0zLjIsMy4yIC0zLjIsLTMuMiB6IE0gOTkuMiw4NC44IEMgOTkuMSw4NS40IDk5LDg1LjUgOTksODYuMSB2IDIgaCAtMyBjIC0wLjUsMCAtMC44LDAuMyAtMC44LDAuOCAwLDAuNSAwLjEsMC41IDAuMiwxIDAuNCwwLjEgMC40LDAuMiAxLDAuMiBoIDIuNiB2IDIuOCBoIC00LjUgYyAtMC42LDAgLTEuMiwwLjIgLTEuMiwwLjggMCwwLjUgMC4zLDAuOCAwLjgsMC44IGggNC45IHYgNC45IGggLTQuNSBjIC0wLjUsMCAtMC41LDAuMSAtMC45LDAuMiBsIC0yLjUsNy45IC0xLDMuMiAtNC4xLDEzLjMgLTEuMSwzLjEgYyAwLDIgLTEuNCwzLjUgLTEuNCw1LjUgMCwwLjQgMC4xLDAuMiAwLjIsMC44IGggMC41IGMgMC42LDAgMTUuMSwtMTAuMyAxNS40LC0xMC4zIDAuNiwwIDE0LjIsOS40IDE1LjgsMTAuNSAwLjQsLTAuMiAxLC0wLjQgMSwtMSB2IC0wLjYgYyAwLC0wIC0xLjUsLTQuNCAtMS43LC01IC0wLjQsLTEuMSAtMS40LC00LjMgLTEuNSwtNS4yIGwgLTEsLTMuMiAtNC4xLC0xMy4yIC0wLjksLTMuNCBjIC0xLC0wLjQgLTAuMywtMi42IC0xLjYsLTIuNiBoIC00LjggdiAtNSBoIDQuOCBjIDAuNSwwIDAuOCwtMC4zIDAuOCwtMC44IDAsLTAuNSAtMC4zLC0wLjggLTAuOCwtMC44IEggMTAwLjggViA5MC4xIGggMi40IGMgMC43LDAgMS40LC0wLjQgMS40LC0xIHYgLTAuMiBjIDAsLTAuNSAtMC4zLC0wLjggLTAuOCwtMC44IGggLTIuOSB2IC0yLjYgYyAwLC0wLjQgLTAuNiwtMSAtMC44LC0xIC0wLC0wIC0wLjcsMC4xIC0wLjgsMC4yIHogbSA2LjcsLTE1LjcgYyA3LDEuNiAxMC45LDQuNiAxNS4xLDguOSAzLDMgNy4zLDExIDcuMywxNi45IHYgNCBjIDAsMi4xIC0xLjUsNy43IC0yLjIsOSAtMC43LDEuMSAtMS4yLDIuNCAtMS45LDMuNiAtMC4zLDAuNCAtMi40LDMuMyAtMi40LDMuNCAwLDAuNyAxLDEuNiAxLjIsMi42IDEuNywtMC40IDQuOCwtNi4zIDUuNywtOC4yIDEuMiwtMi41IDIuNywtNy44IDIuNywtMTEuNCBWIDk0LjMgYyAwLC0wLjEgLTAuOSwtNC45IC0xLC01LjUgLTAuMywtMC45IC0xLjQsLTMuNyAtMS44LC00LjggLTAuOSwtMi4yIC0zLjcsLTYuNCAtNS4yLC04IC0zLjYsLTMuNiAtMTAuNiwtOS4yIC0xNi45LC05LjcgbCAtMC40LDIuOCB6IG0gLTEuNiwxMC43IGMgNiwwLjUgMTMuMyw5LjIgMTMuMywxNi4xIHYgMi4yIGMgMCwxLjUgLTEuNCw1LjUgLTEuNCw1LjUgMCwwLjIgMS4yLDIuOSAxLjQsMy4yIGwgMC4yLDAuMSAxLjYsLTMuNCAwLjEsLTAuNiAwLjcsLTUuOSAwLjIsLTAuNCAtMSwtNS45IGMgLTAuNywtMC4zIC0wLjYsLTEuNCAtMS4xLC0yLjIgLTAuNCwtMC44IC0wLjgsLTEuNiAtMS4zLC0yLjMgLTEuMSwtMS42IC0xLjgsLTIuNiAtMy4yLC0zLjkgLTIuMiwtMi4yIC01LjgsLTQuMiAtOS4yLC01IGwgLTAuMywyLjggeiBNIDY4LjcsOTUuMiB2IDUuMSBjIDAsNC4yIDUuNCwxNi4zIDcuOSwxNyAwLjEsLTAuNSAxLC0yLjIgMSwtMi42IDAsMCAtMi4xLC0yLjkgLTIuMywtMy40IC0wLjcsLTEuMyAtMS4zLC0yLjQgLTEuOSwtMy44IC0xLC0yLjYgLTEuOCwtNiAtMS44LC05LjYgdiAtMi40IGMgMCwtOCAzLjMsLTEyLjkgNi45LC0xNy41IDEuNCwtMS44IDQuNywtNC40IDYuNywtNS42IDEuNCwtMC44IDIuNSwtMS40IDQuMSwtMi4xIDAuNSwtMC4yIDQuNSwtMS4zIDQuNSwtMS42IGwgLTAuMiwtMi42IGMgLTIuNCwwLjEgLTgsMi42IC05LjYsMy43IC0zLjIsMS45IC00LjgsMy42IC03LjMsNi4xIC0zLjYsMy42IC03LjgsMTIgLTcuOCwxOS4xIGwgMCwwIHogbSAxMC43LDAgdiAyLjkgYyAwLDEuOSAwLjIsMy4xIDAuOCw0LjUgMC4yLDAuNCAxLjUsNCAxLjUsNCBsIDAuNCwtMCAxLjUsLTIuOSBjIC0wLjksLTEuMiAtMS40LC00IC0xLjQsLTYuMiB2IC0xLjggYyAwLC0zLjcgMi4zLC04LjMgNC4yLC0xMC4zIDEuOCwtMS44IDUuOSwtNS41IDkuMSwtNS42IEwgOTUsNzcuMSBDIDg4LDc3LjYgNzkuNCw4Ny4zIDc5LjQsOTUuMiB6XCJ9XSxpW1wiR1IuSU4uSUMuVEVMRUNPTU1VTklDQVRJT05TIFRPV0VSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAyLjUsMTE5LjIgMTIsLTggMi44LDkuMiAxLjMsNCAyLjEsNi45IC0xOC4yLC0xMiB6IG0gLTIzLDEyIDMuNCwtMTEuNyAyLC01LjkgMC44LC0yLjYgMTEuOSw4LjIgLTE4LDEyIHogbSAyMC40LC0zNC42IDEzLDEyLjIgYyAtMS41LDEgLTEyLjMsOC41IC0xMy4xLDguNSAtMC4xLDAgLTExLjYsLTcuNyAtMTIuNywtOC41IEwgOTkuOSw5Ni42IHogbSA3LjcsLTcuMSAwLjIsMC4yIDEuOCw1LjcgMi41LDguNyAtMTAuMSwtOS4zIDUuNiwtNS4yIDAsMCB6IG0gLTE1LjUsMC42IHYgLTAuNiBsIDAuNCwwLjIgNS40LDUgLTEwLDkuNCAyLjYsLTkgMS42LC01IHogbSAyLjksLTEuNyA5LjgsLTAgLTUsNC40IC00LjgsLTQuNCB6IG0gMy42LC0yMy4xIHYgMy42IGggLTQuNCBjIC0wLjUsMCAtMSwwLjYgLTEsMSB2IDAuNiBjIDAsMC43IDAuOCwxIDEuNSwxIGggNCB2IDQuMiBoIC03LjIgYyAtMC41LDAgLTEsMC42IC0xLDEgdiAwLjIgYyAwLDEgMC41LDEuNSAxLjUsMS41IGggNi44IHYgNyBoIC02LjggYyAtMC44LDAgLTEsMC4zIC0xLjMsMC43IGwgLTAuNiwyIC00LjksMTUuNiAtMyw5LjYgLTMuMSw5LjQgLTAuMSwwLjggLTIuOSw4LjcgLTAuMSwwLjggLTAuNSwyLjIgYyAxLDAuMiAwLjUsMC42IDEuMywwLjYgaCAwLjIgYyAwLjgsMCAyMC4xLC0xMy43IDIzLjEsLTE1LjIgMi41LDEuNyAyMi40LDE1LjIgMjMuNSwxNS4yIDAuNiwwIDEsLTAuNyAxLC0xLjMgMCwtMC4xIC0xLjQsLTQgLTEuNSwtNC4yIGwgLTAuMSwtMC44IC0zLjEsLTkuNyAtMi45LC05LjMgLTQuNywtMTUuNyBjIC0wLjYsLTAuOCAtMS40LC0zLjggLTEuOCwtNSAtMC42LC0xLjggLTAuNSwtNC4zIC0yLjUsLTQuMyBoIC02LjggdiAtNyBoIDcuMiBjIDAuNSwwIDEsLTAuNiAxLC0xIHYgLTAuNCBjIDAsLTAuNiAtMC4yLC0xLjMgLTAuOCwtMS4zIGggLTcuNCB2IC00LjIgaCA0IGMgMC43LDAgMS41LC0wLjQgMS41LC0xIHYgLTAuNiBjIDAsLTAuNyAtMC44LC0xIC0xLjUsLTEgaCAtNCB2IC00IGMgMCwtMC42IC0wLjcsLTEgLTEuMywtMSAtMC44LC0wIC0xLjMsMC42IC0xLjMsMS40IGwgMCwwIHogbSAtNi42LDI0LjggMC40LC0wLjQgLTAuNCwtMC4yIHpcIn1dLGlbXCJHUi5JTi5JQy5BSVIgVFJBRkZJQyBDT05UUk9MIEZBQ0lMSVRZXCJdPWEoXCJBVENcIiksaVtcIkdSLklOLklDLlBST1BBTkUgRkFDSUxJVFlcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA5OC43LDczLjEgdiAwLjIgYyAwLDEgMC41LDEuNSAxLjUsMS41IDAuNSwwIDEuMSwtMC42IDEuMSwtMS4xIDAsLTAuOCAtMC4yLC0wLjggLTAuMiwtMS41IC0wLjUsLTAuMSAtMC41LC0wLjIgLTEuMSwtMC4yIGggLTAuMiBjIC0wLjUsMCAtMS4xLDAuNiAtMS4xLDEuMSB6IG0gLTEyLjYsNTguNSBoIDI4LjQgdiAzLjMgaCAtMjguNCB2IC0zLjMgeiBNIDc1LjgsMTE5IGggNDguNSB2IDMuMyBjIDAsMiAtOC44LDcuOCAtOS44LDcuOCBIIDg1LjggYyAtMSwwIC0xMCwtNS44IC0xMCwtNy42IHYgLTMuNSBsIDAsMCB6IG0gMCwtMjcuNSBjIDAsLTEuMSA3LjIsLTUuOCA4LjUsLTYuNiAyLjYsLTEuNSA3LjQsLTMuNyAxMS40LC0zLjcgaCA4LjUgYyA0LjEsMCA5LjEsMiAxMS42LDMuNyAxLjMsMC45IDguNSw1LjQgOC41LDYuNiB2IDQuMiBIIDc1LjggViA5MS41IGwgMCwwIHogTSA5OC4yLDc3LjEgYyAwLjcsMCAwLjgsMC4yIDEuNSwwLjIgaCAwLjQgYyAwLjgsMCAwLjgsLTAuMiAxLjUsLTAuMiB2IDEuOCBsIDEuMiwwLjggLTUuNSwwIGMgMC4zLC0wLjUgMC45LC0wLjggMC45LC0xLjMgbCAtMCwtMS4zIDAsMCB6IG0gLTEuMSwtNCBjIDAsLTEuNCAxLjQsLTIuNCAyLjgsLTIuNCAxLjMsMCAyLjgsMC45IDIuOCwyIHYgMS4xIGMgMCwxLjQgLTEuNiwyLjQgLTMsMi40IC0xLDAgLTIuNiwtMS4yIC0yLjYsLTIuNCB2IC0wLjcgaCAtMCB6IG0gMTIuMiwtOC4xIGggMy41IHYgMy41IGggLTEuOCB2IDYuOCBjIDAuNywwIDIuNCwwLjYgMi40LDEuMyB2IDMuNyBIIDEwOS40IFYgNjUuMSB6IG0gLTIyLjcsMCBoIDQuMiBWIDgwLjMgSCA4NS44IHYgLTQuMSBjIDAuOCwtMC4yIDMuMSwtMC44IDMuMSwtMS41IHYgLTYuMSBoIC0yLjIgdiAtMy41IHogbSA1LjcsMCBoIDE1LjUgdiAxNS4zIGMgLTEuNiwtMC40IC00LjgsLTAuOSAtNC44LC0yLjYgdiAtMC45IGMgMCwtMS41IDAuOSwtMi4xIDAuOSwtMi42IHYgLTEuMSBjIDAsLTMuMiAtMywtMy4yIC0zLjMsLTQuNCBoIDQuMiB2IC0xLjUgaCAtOS42IHYgMS41IGggNC4yIHYgMC42IGMgLTEuOSwwLjEgLTMuMSwxLjkgLTMuMSw0IHYgMC42IGMgMCwxIDAuOSwyIDAuOSwyLjQgdiAxLjMgYyAwLDEuNCAtMy40LDIuMyAtNC44LDIuNiBWIDY1LjEgbCAwLDAgeiBtIC03LjIsNC44IGggMi4yIHYgNCBjIDAsMC44IC0yLjEsMS4yIC0yLjgsMS4zIHYgNi44IGggMyBjIC0wLjYsMC40IC0yLjcsMS4yIC0zLjYsMS44IC0xLjIsMC43IC0yLjIsMS40IC0zLjQsMi4xIC0wLjksMC42IC02LjEsNC43IC02LjMsNC44IHYgMzEuNiBjIDAsMS45IDMuMiw0LjQgNC41LDUuMyAxLDAuNiA1LjgsMy4zIDUuOCw0LjEgdiA0LjggaCAzMS4yIHYgLTQuOCBjIDAsLTEuNiAxMCwtNC42IDEwLC0xMCBWIDkxLjEgYyAwLC0wLjkgLTUsLTQuNCAtNiwtNS4xIC0xLjIsLTAuOCAtMi4xLC0xLjQgLTMuMywtMi4xIC0wLjksLTAuNiAtMy4yLC0xLjQgLTMuNywtMS45IGggMi40IHYgLTYuOCBjIC0wLjcsLTAuMiAtMi42LC0wLjUgLTIuNiwtMS4zIHYgLTQgaCAyIFYgNjMuNSBIIDg1LjIgdiA2LjMgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTE0LjQsMTM0LjkgMCwtMy4zIC0yOC40LDAgMCwzLjMgeiBNIDc1LjgsMTIyLjUgYyAwLDEuOSA5LDcuNiAxMCw3LjYgaCAyOC42IGMgMSwwIDkuOCwtNS45IDkuOCwtNy44IHYgLTMuMyBIIDc1LjggdiAzLjUgbCAwLDAgeiBtIDAsLTMxIHYgNC4yIGggNDguNSBWIDkxLjUgYyAwLC0xLjIgLTcuMiwtNS43IC04LjUsLTYuNiAtMi41LC0xLjcgLTcuNSwtMy43IC0xMS42LC0zLjcgaCAtOC41IGMgLTMuOSwwIC04LjgsMi4yIC0xMS40LDMuNyAtMS4zLDAuOCAtOC41LDUuNCAtOC41LDYuNiBsIDAsMCB6IE0gMTA5LjQsODAuMyBoIDQuMiB2IC0zLjcgYyAwLC0wLjggLTEuNywtMS4yIC0yLjQsLTEuMyB2IC02LjggaCAxLjggViA2NS4xIEggMTA5LjQgViA4MC4zIHogTSA4Ni43LDY4LjYgaCAyLjIgdiA2LjEgYyAwLDAuOCAtMi4zLDEuNCAtMywxLjUgdiA0LjIgaCA1IFYgNjUuMSBoIC00LjIgdiAzLjUgeiBtIDExLjYsOS44IGMgMCwwLjYgLTAuNiwwLjggLTAuOSwxLjMgbCA1LjUsLTAuMSAtMS4xLC0wLjggViA3Ny4xIGMgLTAuNywwIC0wLjgsMC4yIC0xLjUsMC4yIEggOTkuOCBjIC0wLjgsMCAtMC44LC0wLjIgLTEuNSwtMC4yIGwgLTAsMS4zIDAsMCB6IG0gMi44LC02LjEgYyAwLjEsMC43IDAuMiwwLjggMC4yLDEuNiAwLDAuNSAtMC42LDEuMSAtMS4xLDEuMSAtMSwwIC0xLjUsLTAuNSAtMS41LC0xLjUgdiAtMC4yIGMgMCwtMC41IDAuNiwtMS4xIDEuMSwtMS4xIGggMC4yIGMgMC42LDAgMC42LDAuMSAxLjEsMC4yIHogbSAtMy45LDAuOSB2IDAuNyBjIDAsMS4yIDEuNiwyLjQgMi42LDIuNCAxLjQsMCAzLC0xIDMsLTIuNCBWIDcyLjcgYyAwLC0xIC0xLjYsLTIgLTIuOCwtMiAtMS40LDAgLTIuOCwxIC0yLjgsMi40IHpcIn1dLGlbXCJHUi5JTi5JQy5HT1ZFUk5NRU5UIFNJVEUgSU5GUkFTVFJVQ1RVUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSAxMDAsNjcuMyBDIDkwLjExMjIsNzIuMTAzNyA3OS4zMzM2LDc3LjM5OTIgNzAsODIgYyAtMS4yLDAuNiAtMy44LDEuMyAtMy44LDIuOCBsIC0wLjEsMCAwLDAuNCBjIDAsMC42IDAuMSwwLjYgMC4yLDEuMSAwLjUsMC4xIDAuNSwwLjIgMS4xLDAuMiBsIDY1LDAgYyAwLjcsMCAxLjcsLTAuNiAxLjcsLTEuMSAwLC0yLjIgLTEuNywtMi40IC0zLjIsLTMgQyAxMTkuMzkxLDc2Ljc1NzUgMTA5LjE3LDcxLjc5NDEgMTAwLDY3LjMgWiBtIC0wLjEsMy40IGMgMC4yLDAgMjQuNSwxMiAyNS45LDEzIGwgLTUxLjYsMCAwLC0wLjEgQyA3NSw4MyA5OS43LDcwLjcgOTkuOSw3MC43IFogbSAzMS42LDU1LjYgMCwtMyAtNjMuMywwIDAsMyB6IG0gMi4zLDYuNCAwLC0zIC02Ny43LDAgMCwzIHogbSAtNi4yLC00MC43IDIuNCwwIDAsLTMuMiAtNy45LDAgMCwzLjIgMi4xLDAgLTAuNiwyNS41IC0xLjUsMCAwLDMuOCA3LjksMCAwLC0zLjggLTEuNSwwIHogbSAtMTQuNiwtMy4yIC03LjYsMCAwLDMuMiAyLjIsMCAtMC45LDI1LjQgLTEuMywwIDAsMy44IDcuNiwwIDAsLTMuOCAtMS40LDAgLTAuNywtMjUuNSAyLjEsMCB6IG0gLTIwLjgsMy4xIDIuMywwIDAsLTMuMiAtNy44LDAgMCwzLjIgMi4zLDAgLTAuOCwyNS40IC0xLjUsMCAwLDMuOCA3LjgsMCAwLC0zLjggLTEuNywwIHogbSAtMjIuNSwyNS41IDAsMy44IDgsMCAwLC0zLjggLTEuNSwwIC0wLjgsLTI1LjUgMi4zLDAgMCwtMy4yIC04LDAgMCwzLjIgMi40LDAgLTAuOSwyNS41IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDc0LjEsODMuNiBoIDUxLjYgQyAxMjQuMyw4Mi43IDEwMCw3MC43IDk5LjgsNzAuNyA5OS42LDcwLjcgNzQuOSw4MyA3NC4xLDgzLjYgbCAwLDAgelwifV0saVtcIkdSLklOLklDLk1JTElUQVJZIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNjUuMiw5My4xIGMgMCwtMC41IDE1LjYsLTExLjUgMTcuMywtMTIuOCAxLjUsLTEuMiAxNy4zLC0xMi42IDE3LjQsLTEyLjYgMC42LDAgMTUuOSwxMS4yIDE3LjYsMTIuNSAxLjcsMS4zIDE3LjMsMTIuNCAxNy4zLDEyLjkgMCwwIC02LjEsMTguNiAtNi43LDIwLjMgLTEuMiwzLjQgLTIuMiw2LjggLTMuNCwxMC4zIC0xLDMgLTIuNyw3LjIgLTMuMywxMCBIIDc4LjQgYyAtMC4xLC0xLjcgLTUuNiwtMTggLTYuNSwtMjAuNCAtMC42LC0xLjQgLTYuNiwtMjAuMSAtNi42LC0yMC4xIHogbSA4LjQsMzguNSAyLDYuMSA0OSwwIDguNCwtMjYuNCA2LjYsLTIwLjUgLTM5LjcsLTI4LjcgLTM5LjYsMjguOCAxMy4zLDQwLjYgMCwwIHogTSAxMDAsNzYuMiBjIDIuNywyLjQgMjYuNiwxOC43IDI2LjYsMTkuNiAwLDAuOCAtNC4xLDEyLjcgLTQuNSwxMy40IGwgLTUuNiwxNy40IC0zMi41LDAgYyAtMC45LDAgLTMsLTcuNCAtMy41LC04LjcgLTAuNiwtMS44IC0yLjksLTcuOCAtMi45LC05LjQgTCA3NC4zLDk4LjkgNzMuNSw5NS41IDEwMCw3Ni4yIHogbSAzMC41LDE4IGMgLTMuMSwtMi4xIC0zMCwtMjIuMiAtMzAuNywtMjIuMiAtMC4xLDAgLTEzLjgsMTAuMSAtMTUuMiwxMS4xIC0yLDEuNCAtMTQuMywxMC43IC0xNS4yLDEwLjkgdiAwLjcgYyAwLDEgMi45LDcgMi45LDkuMyBsIDguNywyNi4zIDM3LjcsMCA1LC0xNS43IDYuNiwtMjAuNCB6IG0gLTUwLjQsMy4yIGMgMC44LC0wLjIgOC42LC02LjEgMTAsLTcgMS4yLC0wLjggOS41LC03LjEgMTAsLTcuMSAwLDAgOSw2LjUgMTAsNy4yIDEuMiwwLjggOS43LDYuNSA5LjcsNy4zIDAsMS4yIC0wLjQsMiAtMC45LDIuNyAwLDEuNiAtMi42LDguNyAtMy4zLDEwLjYgLTAuNSwxLjQgLTIuOCwxMC4xIC0zLjcsMTAuMSBIIDg4LjEgYyAtMC43LDAgLTEuOCwtNCAtMiwtNC44IC0wLjYsLTEuNyAtMS4yLC0zLjMgLTEuNywtNS4xIC0wLjYsLTIuMSAtMy4xLC04LjcgLTMuMSwtMTAuMyBsIC0wLjMsMC4xIC0wLjksLTMuNyB6IG0gLTMuMiwtMC43IDguOCwyNyAyOC4yLC0wIDguNywtMjcuMiBjIC0zLjIsLTEuNyAtMjEuNywtMTYuMyAtMjIuOSwtMTYuMyAtMC4zLDAgLTIwLjYsMTUgLTIyLjksMTYuNiB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA3Nyw5Ni44IGMgMi4zLC0xLjUgMjIuNiwtMTYuNiAyMi45LC0xNi42IDEuMiwwIDE5LjcsMTQuNiAyMi45LDE2LjMgbCAtOC43LDI3LjIgLTI4LjMsMCAtOC44LC0yNyB6IG0gLTMuNiwtMS4zIDAuOSwzLjQgMy40LDkuNyBjIDAsMS41IDIuMyw3LjYgMi45LDkuNCAwLjQsMS4zIDIuNSw4LjcgMy41LDguNyBsIDMyLjUsLTAgNS41LC0xNy40IGMgMC40LC0wLjYgNC41LC0xMi42IDQuNSwtMTMuNCAwLC0xIC0yMy45LC0xNy4yIC0yNi42LC0xOS42IEwgNzMuNSw5NS41IHogbSA2LjcsMiAwLjksMy43IDAuMywtMC4xIGMgMCwxLjYgMi40LDguMiAzLjEsMTAuMyAwLjUsMS44IDEuMSwzLjQgMS43LDUuMSAwLjIsMC44IDEuMyw0LjggMiw0LjggaCAyMy44IGMgMSwwIDMuMywtOC42IDMuNywtMTAuMSAwLjYsLTEuOSAzLjMsLTkgMy4zLC0xMC42IDAuNSwtMC43IDEsLTEuNSAxLC0yLjcgMCwtMC44IC04LjUsLTYuNSAtOS43LC03LjMgLTEsLTAuNyAtOS45LC03LjIgLTEwLC03LjIgLTAuNSwwIC04LjgsNi4yIC0xMCw3IC0xLjMsMSAtOS4yLDYuOCAtMTAsNy4xIHogbSA0My44LDE3LjEgLTUsMTUuNyAtMzcuNywtMCAtOC43LC0yNi4zIGMgMCwtMi4zIC0yLjksLTguMyAtMi45LC05LjMgdiAtMC43IGMgMSwtMC4yIDEzLjIsLTkuNSAxNS4yLC0xMC45IDEuNCwtMSAxNS4xLC0xMS4xIDE1LjIsLTExLjEgMC43LDAgMjcuNiwyMCAzMC43LDIyLjIgbCAtNi42LDIwLjQgeiBNIDY1LjIsOTMuMSBjIDAsMCA2LDE4LjcgNi42LDIwLjEgMSwyLjQgNi40LDE4LjcgNi41LDIwLjQgaCA0My4xIGMgMC42LC0yLjggMi4zLC03IDMuMywtMTAgMS4yLC0zLjUgMi4xLC02LjggMy40LC0xMC4zIDAuNiwtMS43IDYuNywtMjAuMiA2LjcsLTIwLjMgMCwtMC41IC0xNS42LC0xMS41IC0xNy4zLC0xMi45IEMgMTE1LjgsNzkgMTAwLjUsNjcuNyA5OS45LDY3LjcgOTkuOCw2Ny43IDg0LjEsNzkuMiA4Mi41LDgwLjMgODAuOCw4MS42IDY1LjIsOTIuNyA2NS4yLDkzLjEgelwifV0saVtcIkdSLklOLklDLlBPU1RBTCBTRVJWSUNFIElORlJBU1RSVUNUVVJFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gNjQuMyw4Ni42IDk5LjksMTAyLjEgMTM1LjcsODYuNiB2IDMxLjggSCA2NC4zIHYgLTMxLjggbCAwLDAgeiBtIDYyLjUsMS45IGMgLTMuMSwxLjIgLTUuOSwyLjYgLTksMy45IC0yLjIsMC45IC0xNy4xLDcuNyAtMTgsNy43IC0wLjUsMCAtMTUuOCwtNyAtMTcuOCwtNy44IC0zLC0xLjIgLTUuOSwtMi44IC04LjgsLTMuOSAtMi4zLC0wLjkgLTYuOCwtMy40IC04LjgsLTMuOCB2IC0zLjIgaCA3MS41IHYgMy4yIGMgLTIuMSwwLjQgLTYuNiwyLjkgLTksMy45IHogbSAtNjQuMSwzMS43IGggNzQuNyBWIDc5LjggSCA2Mi43IHYgNDAuNCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA2NC4zLDg2LjYgMCwzMS44IDcxLjUsMCAwLC0zMS44IC0zNS44LDE1LjUgeiBtIDAsLTIgYyAyLDAuNSA2LjUsMyA4LjgsMy44IDIuOSwxLjEgNS44LDIuNyA4LjgsMy45IDIsMC44IDE3LjMsNy44IDE3LjgsNy44IDAuOSwwIDE1LjksLTYuOCAxOCwtNy43IDMuMSwtMS4zIDUuOSwtMi42IDksLTMuOSAyLjQsLTEgNi45LC0zLjQgOSwtMy45IFYgODEuNCBIIDY0LjMgdiAzLjIgbCAwLDAgelwifV0saVtcIkdSLklOLklDLlBPU1RBTCBESVNUUklCVVRJT04gQ0VOVEVSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gNjQuMyw5NC42IDk5LjksMTEwLjEgMTM1LjcsOTQuNiBWIDEyNi40IEggNjQuMyBsIDRlLTQsLTMxLjggMCwwIHogbSA2Mi41LDEuOSBjIC0zLjEsMS4yIC01LjksMi42IC05LDMuOSAtMi4yLDAuOSAtMTcuMSw3LjcgLTE4LjEsNy43IC0wLjUsMCAtMTUuNywtNi45IC0xNy44LC03LjggLTMsLTEuMiAtNS45LC0yLjggLTguOCwtMy45IC0yLjMsLTAuOSAtNi44LC0zLjQgLTguOCwtMy45IHYgLTMuMiBoIDcxLjUgdiAzLjIgYyAtMi4xLDAuNSAtNi42LDIuOSAtOSwzLjkgeiBNIDYyLjcsMTI4LjIgaCA3NC43IFYgODcuOCBIIDYyLjcgdiA0MC41IHogbSA2Ni4xLC01NC40IC01LjQsMCAwLDEzLjMgLTIsMCAwLC0xMy4zIC01LjQsMCAwLC0xLjggMTIuOCwwIDAsMS44IG0gLTE0LDkgYyAtMWUtNSwwLjYgLTAuMSwxLjIgLTAuNCwxLjcgLTAuMywwLjYgLTAuNywxLjEgLTEuMSwxLjUgLTAuNSwwLjQgLTEuMiwwLjggLTEuOSwxIC0wLjcsMC4yIC0xLjYsMC40IC0yLjYsMC40IC0xLjEsMCAtMi4xLC0wLjEgLTIuOSwtMC4zIC0wLjksLTAuMiAtMS44LC0wLjUgLTIuNywtMC45IGwgMCwtMi41IDAuMSwwIGMgMC44LDAuNiAxLjYsMS4xIDIuNywxLjUgMSwwLjMgMS45LDAuNSAyLjgsMC41IDEuMiwxMGUtNyAyLjIsLTAuMiAyLjksLTAuNyAwLjcsLTAuNSAxLC0xLjEgMSwtMS45IC0xZS01LC0wLjcgLTAuMiwtMS4yIC0wLjUsLTEuNSAtMC4zLC0wLjMgLTAuOCwtMC42IC0xLjUsLTAuNyAtMC41LC0wLjEgLTEuMSwtMC4yIC0xLjcsLTAuMyAtMC42LC0wLjEgLTEuMiwtMC4yIC0xLjksLTAuMyAtMS4zLC0wLjMgLTIuMywtMC44IC0zLC0xLjUgLTAuNiwtMC43IC0xLC0xLjYgLTEsLTIuNyAwLC0xLjMgMC41LC0yLjMgMS42LC0zLjEgMS4xLC0wLjggMi40LC0xLjIgNC4xLC0xLjIgMS4xLDEuNmUtNSAyLDAuMSAyLjksMC4zIDAuOSwwLjIgMS43LDAuNSAyLjQsMC44IGwgMCwyLjQgLTAuMSwwIGMgLTAuNiwtMC41IC0xLjMsLTAuOSAtMi4zLC0xLjIgLTAuOSwtMC4zIC0xLjksLTAuNSAtMi45LC0wLjUgLTEuMSwxLjNlLTUgLTEuOSwwLjIgLTIuNiwwLjcgLTAuNywwLjQgLTEsMSAtMSwxLjcgLTFlLTUsMC42IDAuMiwxLjEgMC41LDEuNSAwLjMsMC40IDAuOSwwLjYgMS43LDAuOCAwLjQsMC4xIDEsMC4yIDEuOCwwLjMgMC44LDAuMSAxLjUsMC4zIDIsMC40IDEuMSwwLjMgMiwwLjcgMi41LDEuNCAwLjYsMC42IDAuOSwxLjQgMC45LDIuNSBtIC0xNC40LDQuMyAtNiwwIDAsLTEuNSAyLDAgMCwtMTIgLTIsMCAwLC0xLjUgNiwwIDAsMS41IC0yLDAgMCwxMiAyLDAgMCwxLjUgbSAtOC42LC03LjUgYyAtMS41ZS01LDEuNCAtMC4zLDIuNiAtMC45LDMuNyAtMC42LDEuMSAtMS40LDIgLTIuNCwyLjYgLTAuNywwLjQgLTEuNSwwLjcgLTIuMywwLjkgLTAuOCwwLjIgLTIsMC4zIC0zLjQsMC4zIGwgLTMuOCwwIDAsLTE1LjEgMy44LDAgYyAxLjUsMS41ZS01IDIuNiwwLjEgMy41LDAuMyAwLjksMC4yIDEuNiwwLjUgMi4yLDAuOSAxLDAuNiAxLjgsMS41IDIuNCwyLjYgMC42LDEuMSAwLjksMi4zIDAuOSwzLjggbSAtMi4xLC0wIGMgLTEuMmUtNSwtMS4yIC0wLjIsLTIuMiAtMC42LC0zIC0wLjQsLTAuOCAtMSwtMS41IC0xLjgsLTEuOSAtMC42LC0wLjMgLTEuMiwtMC42IC0xLjksLTAuNyAtMC43LC0wLjEgLTEuNSwtMC4yIC0yLjQsLTAuMiBsIC0xLjksMCAwLDExLjcgMS45LDAgYyAxLDJlLTYgMS44LC0wLjEgMi41LC0wLjIgMC43LC0wLjEgMS40LC0wLjQgMiwtMC44IDAuOCwtMC41IDEuMywtMS4xIDEuNywtMS45IDAuNCwtMC44IDAuNiwtMS44IDAuNiwtMi45XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMjYuOCw5Ni41IGMgLTMuMSwxLjIgLTUuOSwyLjYgLTksMy45IC0yLjIsMC45IC0xNy4xLDcuNyAtMTguMSw3LjcgLTAuNSwwIC0xNS43LC02LjkgLTE3LjgsLTcuOCAtMywtMS4yIC01LjksLTIuOCAtOC44LC0zLjkgLTIuMywtMC45IC02LjgsLTMuNCAtOC44LC0zLjkgdiAtMy4yIGggNzEuNSB2IDMuMiBjIC0yLjEsMC41IC02LjYsMi45IC05LDMuOSB6IG0gLTYyLjUsLTEuOSAzNS42LDE1LjUgMzUuOCwtMTUuNSBWIDEyNi40IEggNjQuMyBsIDRlLTQsLTMxLjggMCwwIHpcIn1dLGlbXCJHUi5JTi5JQy5QT1NUIE9GRklDRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDc0LjcsOTIuOCAyNC45LDEwLjggTCAxMjQuNyw5Mi44IFYgMTE1LjEgSCA3NC43IFYgOTIuOCBsIDAsMCB6IG0gNDMuNywxLjMgYyAtMi4yLDAuOSAtNC4xLDEuOCAtNi4zLDIuNyAtMS41LDAuNiAtMTIsNS40IC0xMi42LDUuNCAtMC40LDAgLTExLC00LjkgLTEyLjUsLTUuNCAtMi4xLC0wLjggLTQuMSwtMS45IC02LjIsLTIuNyAtMS42LC0wLjYgLTQuOCwtMi40IC02LjIsLTIuNyB2IC0yLjIgaCA1MCB2IDIuMyBjIC0xLjUsMC4zIC00LjYsMiAtNi4zLDIuNyB6IE0gNzMuNiwxMTYuNCBIIDEyNS44IFYgODguMSBIIDczLjYgViAxMTYuNCB6IE0gOTkuOCw2NC4zIGMgMC4yLDAgMzUuNSwxOS44IDM3LjEsMjEuMiBoIC00LjggdiAzOC42IGggLTYzLjkgdiAtMzguNiBoIC00LjkgYyAxLjYsLTEuNCA2LjksLTQuMSA5LjEsLTUuMyAzLjEsLTEuOCA2LC0zLjQgOS4xLC01LjMgMS42LC0xIDE4LjMsLTEwLjYgMTguNCwtMTAuNiB6IG0gLTQzLjMsMjMuMSA5LjksLTAuMiB2IDM4LjQgaCA2Ny40IHYgLTM4LjQgbCA5LjksMC4yIGMgLTAuNSwtMC42IC00My42LC0yNSAtNDMuOSwtMjUgLTAsMCAtMTkuNSwxMS40IC0yMS43LDEyLjUgLTMuNSwxLjggLTcuNCw0LjIgLTEwLjksNi4yIC0yLjcsMS42IC04LjgsNC42IC0xMC44LDYuMyBsIDAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwiTSA5OS44LDY0LjMgQyA5OS44LDY0LjMgODMuMSw3My45IDgxLjUsNzQuOSBjIC0zLDEuOCAtNiwzLjUgLTkuMSw1LjMgLTIuMiwxLjIgLTcuNSw0IC05LjEsNS4zIGwgNC45LDAgMCwzOC42IDYzLjksMCAwLC0zOC43IDQuOCwwIGMgLTEuNiwtMS40IC0zNi45LC0yMS4yIC0zNy4xLC0yMS4yIHogTSA3My42LDg4LjEgbCA1Mi4zLDAgMCwyOC4zIC01Mi4zLDAgMCwtMjguMyB6IG0gNDQuOSw2LjEgYyAtMi4yLDAuOSAtNC4xLDEuOCAtNi4zLDIuNyAtMS41LDAuNiAtMTIsNS40IC0xMi42LDUuNCAtMC40LDAgLTExLC00LjkgLTEyLjUsLTUuNCAtMi4xLC0wLjggLTQuMSwtMS45IC02LjIsLTIuNyAtMS42LC0wLjYgLTQuOCwtMi40IC02LjIsLTIuNyB2IC0yLjIgaCA1MCB2IDIuMyBjIC0xLjUsMC4zIC00LjYsMiAtNi4zLDIuNyB6IE0gNzQuNyw5Mi44IDk5LjYsMTAzLjcgMTI0LjcsOTIuOCBWIDExNS4xIEggNzQuNyBWIDkyLjggbCAwLDAgelwifV0saVtcIkdSLklOLklDLkVOQ0xPU0VEIEZBQ0lUTElUWSAoUFVCTElDIFZFTlVFKVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDExNC45LDEyMS4zIDAsLTEuMiAtMzAuNywwIDAsMS4yIHogbSAtMzEuOSwtMi41IC0xMC40LC0xNi43IC0xLDAuNCAxMC42LDE2LjYgeiBtIDEzLC0xMy44IGggNyBjIDAuNiwwIDQuNCwtNiA1LC02LjggSCA5MSBjIDAuNiwwLjkgNC40LDYuOCA1LDYuOCB6IG0gMTUuMywxMiAwLC0xIC0yMy41LDAgMCwxIHogbSAyLjQsLTEuNiA4LjYsLTEzLjYgLTAuOCwtMC40IC04LjUsMTMuMyB6IE0gNzYuOCwxMDEuOSBjIDAsMC4zIDMuNyw1LjkgNC4yLDYuNyAwLjQsMC42IDQuMiw2LjcgNC4zLDYuNyAwLjQsMCAwLjUsLTAuMiAwLjcsLTAuNSBsIC04LjUsLTEzLjQgYyAtMC4yLDAuMSAtMC43LDAuMiAtMC43LDAuNSB6IG0gMzEsMTAuOCAwLC0xIC0xNi41LDAgMCwxIHogbSAtMTkuMywtMS4yIDAuNywtMC40IC02LjcsLTEwLjUgLTAuNywwLjQgeiBtIDIyLjMsLTAgNi40LC0xMC41IC0wLjgsLTAuMyAtNi42LDEwLjUgeiBtIC02LjQsLTMgMCwtMSAtOS43LDAgMCwxIHogbSAyLjgsLTEuOCBjIDAsMC42IDAuMywwLjYgMC43LDAuNiBsIDQuMiwtNi45IC0wLjYsLTAuNCBjIC0wLjIsMC4yIC00LjMsNi42IC00LjMsNi43IHogbSAtMjAuMywtNi4zIDQuMSw3IGMgMC4zLC0wLjEgMC44LC0wLjIgMC44LC0wLjUgMCwtMC42IC0zLjcsLTUuNiAtNCwtNi45IGwgLTEsMC40IHogbSAtMTkuNywxOCAwLjMsLTIuOCBjIDAuMSwtMy45IDIsLTExLjQgMywtMTQuNiAxLjYsLTQuNyAzLjIsLTguMyA1LjYsLTEyIDQuNCwtNi41IDEyLC0xMi40IDIyLjgsLTEyLjQgaCAxLjEgYyA5LjYsMCAxNyw0LjggMjEuMywxMC4yIDEuMiwxLjUgMi4zLDIuOCAzLjIsNC42IDAuNSwwLjkgMSwxLjYgMS40LDIuNiAwLjQsMC45IDAuNywxLjkgMS4xLDIuNyAwLjgsMS40IDMuNiwxMC4zIDMuNiwxMi4xIHYgMC42IGggMC4zIHYgMSBsIDEuMiwxMC44IC0wLjEsMi4yIEggNjcgbCAwLjIsLTUgMCwwIHogbSAtMi4zLC00IC0wLjMsMi40IC0wLjQsNS42IHYgMy44IGggNzAuOSB2IC0xIGMgMCwtMiAwLjEsLTYuNCAtMC4yLC04LjEgLTAuNCwtMi40IC0wLjUsLTUuMiAtMSwtNy41IC0wLjQsLTIgLTIuOSwtMTIuNyAtMy45LC0xMy4xIDAsLTEuNiAtMy41LC03LjYgLTQuMywtOC44IC0xLjgsLTIuNiAtMy44LC01IC02LjIsLTcgLTQuOSwtMy45IC0xMC41LC03IC0xOS4zLC03IGggLTEgYyAtMTEuOCwwIC0xOS42LDUuOSAtMjQuNiwxMi44IC0xLjQsMS45IC0yLjQsMy44IC0zLjUsNS45IC0xLjIsMi4zIC0xLjcsNC4yIC0yLjYsNi43IC0xLjIsMyAtMy40LDExLjQgLTMuNSwxNS4zIGwgMCwwIHogbSA1Mi4yLDQuNyBjIDAuNCwtMS4zIDQuMiwtNi42IDUuMiwtOC4zIDAuNiwtMSA1LjEsLTcuOSA1LjEsLTguMiAwLC0wLjMgLTAuNiwtMC40IC0wLjgsLTAuNSBsIC0xMC42LDE2LjYgMS4xLDAuNCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA4NC4yLDEyMC4xIGggMzAuNyB2IDEuMiBIIDg0LjIgdiAtMS4yIHogbSAzLjYsLTQuMiBoIDIzLjUgdiAxIEggODcuOCB2IC0xIHogbSAzLjUsLTQuMiBoIDE2LjUgdiAxIEggOTEuNCB2IC0xIHogbSAzLjMsLTQuMiBoIDkuNyB2IDEgaCAtOS43IHYgLTEgeiBtIDIyLjQsMTEuNSAtMS4xLC0wLjQgMTAuNiwtMTYuNiBjIDAuMywwLjEgMC44LDAuMiAwLjgsMC41IDAsMC4zIC00LjYsNy4yIC01LjEsOC4yIC0xLDEuOCAtNC45LDcgLTUuMiw4LjMgeiBtIC00NS40LC0xNi42IDEsLTAuNCAxMC40LDE2LjcgLTAuOCwwLjQgLTEwLjYsLTE2LjYgeiBtIDEzLjcsMTIuOCBjIC0wLjIsMCAtNCwtNiAtNC4zLC02LjcgLTAuNSwtMC44IC00LjIsLTYuMyAtNC4yLC02LjYgMCwtMC4zIDAuNCwtMC40IDAuNywtMC41IGwgOC41LDEzLjMgYyAtMC4yLDAuMyAtMC4yLDAuNSAtMC43LDAuNSB6IG0gMzYuMiwtMTMuOCAwLjgsMC40IC04LjYsMTMuNiAtMC44LC0wLjYgOC42LC0xMy40IHogbSAtNS4xLC0wLjYgMC44LDAuMyAtNi40LDEwLjUgLTEsLTAuMyA2LjYsLTEwLjUgeiBtIC0zMy45LC0wIDYuNywxMC41IC0wLjcsMC40IC02LjcsLTEwLjUgMC43LC0wLjQgeiBtIDI0LjcsNiBjIDAsLTAuMSA0LjEsLTYuNSA0LjMsLTYuNyBsIDAuNiwwLjQgLTQuMiw2LjkgYyAtMC40LDAgLTAuNywtMC4xIC0wLjcsLTAuNiB6IG0gLTE5LjQsLTYuNyBjIDAuMywxLjMgNCw2LjMgNCw2LjkgMCwwLjMgLTAuNiwwLjQgLTAuOCwwLjUgbCAtNC4xLC03IDEsLTAuNCB6IG0gOC4yLDQuOSBjIC0wLjYsMCAtNC40LC02IC01LC02LjggaCAxNyBjIC0wLjYsMC44IC00LjQsNi44IC01LDYuOCBoIC03IHogbSAtMjguNSwxMC43IGMgMCwwLjUgLTAsMi44IC0wLjMsMi44IGwgLTAuMiw1IGggNjUuMiBsIDAuMSwtMi4yIC0xLjIsLTEwLjggdiAtMSBoIC0wLjMgdiAtMC42IGMgMCwtMS44IC0yLjgsLTEwLjYgLTMuNiwtMTIuMSAtMC40LC0wLjggLTAuNywtMS44IC0xLjEsLTIuNyAtMC41LC0xIC0xLC0xLjYgLTEuNSwtMi42IC0wLjksLTEuOCAtMiwtMy4xIC0zLjIsLTQuNiAtNC4yLC01LjQgLTExLjYsLTEwLjIgLTIxLjMsLTEwLjIgaCAtMSBjIC0xMC44LDAgLTE4LjUsNS44IC0yMi44LDEyLjQgLTIuNSwzLjggLTQuMSw3LjQgLTUuNywxMiAtMS4xLDMuMiAtMywxMC43IC0zLDE0LjYgbCAwLDAgelwifV0saVtcIkdSLklOLklDLk9QRU4gRkFDSUxJVFkgKE9QRU4gVkVOVUUpXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTIyLjQsMTE3LjEgMCwtMS41IC00NS4xLDAgMCwxLjUgeiBNIDc0LjUsMTE0IDc1LjYsMTEzLjQgNTkuOCw4OC44IDU4LjgsODkuNCB6IG0gNDkuNiwtMC42IGMgMC4yLDAuMSAxLDAuNSAxLjMsMC41IDAuMiwwIDE0LjQsLTIyLjQgMTUuOSwtMjQuNiBsIC0xLjUsLTAuNSAtMTUuNywyNC42IHogbSAtNi42LC0yLjYgMCwtMS43IC0zNSwwIDAsMS43IHogbSAyLjQsLTMuMiBjIDAsMC4yIDEsMC44IDEuMSwwLjkgbCAxMi44LC0yMCBoIDAuMiBsIC0xLjYsLTAuOCBjIC0xLjMsMi40IC0xMi42LDE5LjMgLTEyLjYsMjAgeiBtIC00MS4xLDAuOSAxLjQsLTAuOCAtMTIuNywtMjAuMSAtMS4zLDAuOCB6IG0gMzMuMywtMy45IDAsLTEuNiAtMjQuNCwwIDAsMS42IHogbSAzLjQsLTIuOCBjIDAsMC42IDAuNiwwLjcgMS4xLDAuOSBsIDkuNiwtMTUuNCAtMS4yLC0wLjYgYyAtMC42LDIgLTkuNCwxNC41IC05LjQsMTUuMiB6IG0gLTMyLjIsMSAxLjQsLTAuNiAtOS43LC0xNS41IC0xLjMsMC44IHogbSAyMy40LC00LjUgMCwtMS43IC0xMy44LDAgMCwxLjcgeiBtIDUuNiwtMS43IDYuNCwtMTAuMyAtMS4yLC0wLjUgLTYuNiwxMC4yIHogbSAtMjQuNiwwLjEgMS4xLC0wLjggLTYuNSwtMTAuMiAtMS4zLDAuNiB6IG0gNi42LC00IDExLDAuMSBjIDAuNiwwIDYuNCwtOC45IDcsLTEwIEggODcuMyBsIDYuOSw5LjkgelwifV0saVtcIkdSLklOLklDLlJFTElHSU9VUyBJTlNUSVRVVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMS4yLDY4LjEgYyA3LjksMCAxOCwzLjggMjEuNyw4IDUsNS43IDcsMTIuMyA3LDIyLjggViAxMzEuOSBIIDEwMS4yIFYgNjguMSB6IE0gNzAuMSw5Ni4zIGMgMCwtOC40IDMuNCwtMTYuNCA3LjcsLTIwLjcgMy45LC0zLjkgMTMuMiwtNy41IDIwLjksLTcuNSB2IDYzLjkgSCA3MC4xIFYgOTYuMyB6IG0gLTIuNiwzOC4zIGggNjUgViA5OS4zIGMgMCwtMTAuOCAtMi41LC0xOS43IC04LjEsLTI1LjIgLTQuOCwtNC44IC0xNSwtOC43IC0yNC42LC04LjcgLTguMywwIC0xOS40LDMuNyAtMjMuNiw3LjkgLTMuMiwzLjMgLTQuMyw1IC02LjIsOS41IC0xLDIuNCAtMi41LDEwIC0yLjUsMTMuMiB2IDM4LjUgbCAwLDAgeiBNIDEwNS4xLDk3LjYgdiAxMi41IGMgMCwwLjUgMC42LDEuMSAxLjEsMS4xIGggMC40IGMgMC43LDAgMS4xLC0wLjggMS4xLC0xLjUgViA5Ny44IGMgMCwtMC41IC0wLjYsLTEuMSAtMS4xLC0xLjEgSCAxMDYgYyAtMC41LDAgLTAuOSwwLjQgLTAuOSwwLjkgeiBtIC0xMS4yLDEzLjYgYyAwLjgsMCAwLjksLTEgMC45LC0xLjcgViA5Ny42IGMgMCwtMC41IC0wLjQsLTAuOSAtMC45LC0wLjkgaCAtMC42IGMgLTAuNSwwIC0wLjksMC40IC0wLjksMC45IHYgMTIuNSBjIDAsMC41IDAuNiwxLjEgMS4xLDEuMSBoIDAuNCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMDUuMSw5Ny42IGMgMCwtMC41IDAuNCwtMC45IDAuOSwtMC45IGggMC43IGMgMC41LDAgMS4xLDAuNiAxLjEsMS4xIHYgMTEuOCBjIDAsMC43IC0wLjQsMS41IC0xLjEsMS41IGggLTAuNSBjIC0wLjUsMCAtMS4xLC0wLjYgLTEuMSwtMS4xIFYgOTcuNiBoIDAgeiBtIC0zLjksMzQuNCBoIDI4LjcgViA5OC45IGMgMCwtMTAuNSAtMiwtMTcuMSAtNywtMjIuOCBDIDExOS4yLDcxLjkgMTA5LjEsNjguMSAxMDEuMiw2OC4xIHYgNjMuOSB6IE0gOTQsMTExLjIgSCA5My41IGMgLTAuNSwwIC0xLjEsLTAuNiAtMS4xLC0xLjEgViA5Ny42IGMgMCwtMC41IDAuNCwtMC45IDAuOSwtMC45IGggMC43IGMgMC41LDAgMC45LDAuNCAwLjksMC45IHYgMTEuOCBjIDAsMC44IC0wLjEsMS44IC0wLjksMS44IHogTSA3MC4xLDk2LjMgdiAzNS43IEggOTguOCBWIDY4LjEgYyAtNy43LDAgLTE3LDMuNiAtMjAuOSw3LjUgLTQuMyw0LjMgLTcuNywxMi4zIC03LjcsMjAuNyB6XCJ9XSxpW1wiR1IuSU4uSUMuQ0hJTEQgREFZIENBUkVcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA3Ni42LDEwMC4zIGMgMCwxLjggMS4xLDMuNCAzLDMuNCBoIDAuNiBjIDEuNCwwIDIuNCwtMS41IDIuNCwtMyAwLC00LjMgLTYsLTQuMiAtNiwtMC40IHogbSAyNi41LC0xMS45IHYgMC40IGMgMCwxLjUgMS40LDMuMiAyLjgsMy4yIGggMC40IGMgMS42LDAgMywtMS4yIDMsLTIuOCBWIDg3LjggYyAwLC0xIC0xLjYsLTIgLTIuOCwtMiBoIC0wLjIgYyAtMS41LC0wIC0zLjIsMS40IC0zLjIsMi42IHogbSAtMy4yLC0xNi44IDM1LjQsMjEuNyBjIC0xLjMsMC4yIC00LjYsLTAuMyAtNC42LDAuOSB2IDM0LjkgSCA2OS4zIFYgOTQuMSBjIDAsLTEuMiAtMy4zLC0wLjggLTQuNiwtMC45IGwgMzUuMiwtMjEuNyAwLDAgeiBtIC0zOS44LDIyLjQgYyAwLjIsMC44IDAuMywxLjMgMS4zLDEuMyBoIDYuMiB2IDM0LjYgYyAwLDAuNSAwLjEsMC41IDAuMiwwLjkgaCA2NCBjIDAuNCwwIDAuOCwtMC4zIDAuOCwtMC44IFYgOTUuMiBoIDYgYyAwLjgsMCAxLjMsLTAuNCAxLjMsLTEuMSAwLC0wLjYgLTE3LjgsLTExLjIgLTE5LjgsLTEyLjUgLTEuNiwtMSAtMjAsLTEyLjMgLTIwLC0xMi4zIC0wLjIsMCAtMzYuNywyMi41IC00MCwyNC43IGwgMCwwIHogbSAyMC45LDE0LjIgNS45LDQuMyAtMC4xLDAuMSAtNC44LDIuMiBjIC0wLjIsLTAuOCAtMSwtMS45IC0xLC0yLjUgdiAtNC4xIHogbSAyOC40LC04LjggYyAwLjUsLTAuOCAwLjYsLTIuOSAxLC0zLjEgMC40LC0wLjIgMi40LDAuOCAyLjksMC45IHYgMy42IGwgLTQuNCwxLjcgdiAtMC42IGMgLTAsLTAuOSAwLjUsLTEgMC41LC0yLjQgeiBtIC0zLDIgYyAwLDAuOSAwLDEuMSAtMC40LDEuNyBWIDEwNCBjIC0yLjQsMC4yIC0xNS40LDcuNSAtMTcsNy41IC0wLjUsMCAtNi41LC02LjcgLTcuMywtNi43IGggLTQuMyBjIC0wLjUsMCAtMi44LDUuMiAtMi44LDUuNiB2IDQuNyBjIDAsMC45IDEuOCwxLjQgMiwyLjQgbCAtNC4xLDEuNyAxLjMsMi42IDYuMiwtMi44IGMgMS41LDAuOCA5LjMsNS42IDEwLjUsNS42IGggMC42IGMgMC44LDAgMS45LC0wLjggMS45LC0xLjUgdiAtMC40IGMgMCwtMC45IC03LjMsLTQuOCAtOC40LC01LjggbCAxNCwtNi4zIHYgOC40IGggLTMgdiA2LjcgaCA4LjQgdiAtNi43IGggLTIuOCB2IC05LjkgbCAxMy4yLC01LjggYyAwLDEuNiAwLjIsMy43IDAuNCw1LjEgMC4yLDEuOCAtMC42LDMuOSAxLjUsMy45IDIuMSwwIDEuMywtMi41IDEuMywtNC4zIDAsLTEuOSAtMC4yLC0zLjUgLTAuMiwtNS42IHYgLTAuNiBsIDkuMSwtNCAtMSwtMi45IC02LjIsMi44IGMgMC4zLC0wLjYgMC43LC0wLjggMSwtMS40IDAuMiwtMC43IDAuNCwtMS4yIDAuNywtMS44IDAuNSwtMSAwLjksLTIuNiAxLjQsLTMuNCBsIC0xMS40LC0xLjYgYyAtMC42LDAuNSAtMy4yLDMuMyAtMy4yLDQuMiB2IDAuNiBoIC0wLjQgbCAtMS4xLDcuMSB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA4MSwxMTIuMiBjIDAsMC42IDAuOCwxLjcgMSwyLjUgbCA0LjgsLTIuMiAwLjIsLTAuMSAtNiwtNC4zIHYgNC4xIHogbSAyOC40LC0xMi45IGMgMCwxLjQgLTAuNiwxLjYgLTAuNiwyLjQgdiAwLjYgbCA0LjUsLTEuNyB2IC0zLjYgYyAtMC41LC0wLjEgLTIuNiwtMSAtMi45LC0wLjkgLTAuNCwwLjIgLTAuNSwyLjQgLTEsMy4xIHogbSAtMzIuOSwwLjkgYyAwLC0zLjkgNiwtNCA2LDAuNCAwLDEuNCAtMS4xLDMgLTIuNCwzIGggLTAuNSBjIC0xLjgsMCAtMywtMS42IC0zLC0zLjQgeiBtIDI5LjUsMi44IDAuNCwtMS43IDEuMSwtNy4xIGggMC40IHYgLTAuNiBjIDAsLTAuOCAyLjYsLTMuNyAzLjIsLTQuMiBsIDExLjQsMS42IGMgLTAuNSwwLjggLTAuOSwyLjQgLTEuNCwzLjQgLTAuMywwLjYgLTAuNCwxLjEgLTAuNywxLjggLTAuMywwLjcgLTAuNywwLjggLTEsMS40IGwgNi4yLC0yLjggMSwyLjkgLTkuMSw0IHYgMC42IGMgMCwyLjEgMC4yLDMuNyAwLjIsNS42IDAsMS44IDAuOCw0LjMgLTEuMyw0LjMgLTIuMSwwIC0xLjMsLTIuMiAtMS41LC0zLjkgLTAuMiwtMS40IC0wLjQsLTMuNSAtMC40LC01LjEgbCAtMTMuMiw1LjggdiA5LjkgaCAyLjggdiA2LjcgaCAtOC40IHYgLTYuNyBoIDMgdiAtOC40IGwgLTE0LDYuMyBjIDEuMSwwLjkgOC40LDQuOSA4LjQsNS44IHYgMC40IGMgMCwwLjcgLTEsMS41IC0xLjksMS41IEggOTAuNiBjIC0xLjIsMCAtOC45LC00LjggLTEwLjUsLTUuNiBsIC02LjIsMi44IC0xLjMsLTIuNiA0LjEsLTEuNyBjIC0wLjMsLTEgLTIsLTEuNSAtMiwtMi40IHYgLTQuNiBjIDAsLTAuNCAyLjMsLTUuNiAyLjgsLTUuNiBoIDQuMyBjIDAuOCwwIDYuOCw2LjcgNy4zLDYuNyAxLjUsMCAxNC42LC03LjMgMTcsLTcuNSB2IC0wLjkgeiBtIC0zLC0xNC44IGMgMCwtMS4yIDEuNywtMi42IDMuMiwtMi42IGggMC4yIGMgMS4yLDAgMi44LDEuMSAyLjgsMiB2IDEuMyBjIDAsMS42IC0xLjQsMi44IC0zLDIuOCBoIC0wLjQgYyAtMS40LDAgLTIuOCwtMS43IC0yLjgsLTMuMiB2IC0wLjQgeiBtIC0zOC40LDQuOSBjIDEuMywwLjEgNC42LC0wLjMgNC42LDAuOCB2IDM0LjkgaCA2MS40IFYgOTQuMSBjIDAsLTEuMiAzLjMsLTAuOCA0LjYsLTAuOSBsIC0zNS40LC0yMS43IC0zNS4yLDIxLjggMCwwIHpcIn1dLGlbXCJHUi5JTi5JQy5IRUxJQ09QVEVSIExBTkRJTkcgU0lURVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOm8sZDpcIk04MCw3MCBsMTAsMTAgTTEyMCwxMTAgbC0xMCwtMTAgTTgwLDExMCBsMTAsLTEwIE0xMjAsNzAgbC0xMCwxMCBNMTAwLDExNSBsMCwyMCBNOTUsMTM1IGwxMCwwXCIsZmlsbDohMX0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOm8sZmlsbDohIVImJkcsZDpcIm0gMTEzLDkwIGMgLTAuMyw4LjggLTEuOSwyMC4zIC0xMC44LDI0LjYgLTcuNywyIC0xMi4zLC03LjEgLTEzLjgsLTEzLjMgLTIuNiwtMTEuNSAtMi4zLC0yNiA2LjksLTM0LjYgNi4wLC00LjkgMTMuMSwxLjkgMTQuOSw3LjggMiw0LjkgMi44LDEwLjIgMi44LDE1LjUgelwifSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjQwfV0saVtcIkdSLklOLklDLlRSQU5TUE9SVEFUSU9OIElORlJBU1RSVUNUVVJFIExPQ0tcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsNzAgNjUsMzAgLTY1LDMwXCJ9XSxpW1wiR1IuSU4uSUMuVFJBTlNQT1JUQVRJT04gSU5GUkFTVFJVQ1RVUkUgU0hJUCBBTkNIT1JBR0VcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOlwicmdiKDI1NSwgMCwgMjU1KVwiLGQ6XCJtIDczLjYsMTEyLjggYyAwLjgsOCAyNi40LDExLjIgMjYuNCwxMS4yIDAsMCAyNS42LC0zLjIgMjYuNCwtMTEuMiBNIDgwLDg4IGwgNDAsMCBtIC0yMCwtMTIgMCw0OFwifV0saVtcIkdSLklOLklDLk5BVFVSQUwgR0FTIEZBQ0lMSVRZXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCw2MC41IGMgLTE2LjQsMCAtMjkuNiwxMy4yIC0yOS42LDI5LjYgMCwxMi44IDguMywyMy45IDE5LjcsMjcuOCBsIDAsMTkuNyBjIDMuMiwxLjIgNi4zLDEuOCA5LjksMS44IDMuNiwwIDYuNywtMC42IDkuOSwtMS44IGwgMCwtMTkuOCBjIDExLjUsLTMuOSAxOS44LC0xNSAxOS43LC0yNy44IDAsLTE2LjQgLTEzLjIsLTI5LjYgLTI5LjYsLTI5LjYgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMDMsZm9udHNpemU6MzUsdGV4dDpcIk5HXCJ9XSxpW1wiR1IuSU4uSUMuVE9MTCBGQUNJTElUWVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDY5LjEsMTEyLjMgYyAwLC0wLjcgMC44LC0xLjcgMS40LC0xLjcgaCAwLjUgYyAwLjgsMCAxLjUsMC44IDEuNSwxLjUgdiAxLjIgYyAwLDAuNSAtMC45LDEuMiAtMS41LDEuMiBoIC0wLjIgYyAtMC44LDAgLTEuNywtMC44IC0xLjcsLTEuNCB2IC0wLjkgbCAwLDAgeiBtIC0xLjEsMC41IHYgMC4zIGMgMCwxLjIgMS41LDIuNiAyLjksMi42IDEuMywwIDIuOCwtMS41IDIuOCwtMi41IHYgLTEgYyAwLC0xLjIgLTEuNCwtMi42IC0yLjgsLTIuNiAtMS43LDAgLTIuOSwxLjYgLTIuOSwzLjIgeiBtIDI3LjYsLTExLjYgLTIsLTIuOCAtMi4zLDAgNC4zLDIuOCB6IG0gLTI5LjUsMTcuOCBjIDAsLTAuNSAwLjgsLTAuOSAxLjQsLTAuOSBIIDk5LjEgYyAwLjgsMCAxLjMsMC42IDEuNCwxLjQgLTAuNiwwLjEgLTEsMC4zIC0xLjcsMC4zIEggNjggYyAtMC42LDAgLTEuOCwwIC0xLjgsLTAuNiB2IC0wLjIgeiBtIDkuNCwtMTAuMiAxNS4xLDAgOC4yLDAuMiBjIDAuNSwwLjkgMiwzIDEuOCw0LjMgbCAtMC4yLDIuNiBjIC0wLjUsMC4yIC0wLjUsMC4zIC0xLDAuMyBIIDY3LjEgYyAtMC42LDAgLTAuNSwtMC4yIC0xLjEsLTAuMyAtMC4xLC0wLjcgLTAuMywtMSAtMC4zLC0xLjggdiAtMC42IGMgMCwtMS4xIDEuNSwtMy41IDIsLTQuNCBsIDcuOCwtMC4yIHogbSAtNS44LC0yIGMgMC4xLC0xLjEgMy41LC03LjEgNC4zLC03LjEgaCAxOC40IGMgMSwwIDQsNS44IDQuMyw3LjEgSCA2OS43IHogbSAyMS43LC04LjQgMi4zLC0wIDIsMi44IC00LjMsLTIuOCB6IG0gNDQuMywyNy44IFYgNzMuOCBjIC0xLDAuMiAtMTAuMyw2IC0xMS45LDcgLTEuMywwLjggLTExLjYsNi41IC0xMS42LDcuMiAwLDAgMS4zLDIuMSAxLjQsMi4zIGwgNC45LC0yLjggdiAxOS4yIGwgLTAuNCwwLjMgYyAtMi45LC0yIC0zMy40LC0yMiAtMzMuNiwtMjIgLTAuMSwwIC0zLjksNS42IC00LDYuMiBsIDEwLjgsNyAtMTguMywwIGMgLTAuOSwxLjQgLTEuOSwyLjQgLTIuOCwzLjggLTAuMiwwLjMgLTIsNC40IC0yLDQuNiB2IDAuOCBoIC0xLjIgYyAtMC4xLDAuOSAtMi42LDQuNiAtMi42LDUuNCB2IDAuOCBjIDAsMS41IDAuNCwyLjkgMS40LDMuNCAtMC4yLDAuMyAtMSwxLjEgLTEsMS42IHYgMC45IGMgMCwxLjEgMS41LDEuNSAyLjYsMS41IHYgMi4zIGwgMC4yLDIgYyAwLjUsMC4yIDAuMywwLjUgMS4yLDAuNiAwLjYsMC4xIDEsMC4yIDEuNywwLjIgaCAxLjEgbCAxLjcsLTAuMiAwLjMsLTAuMyAwLjIsLTIgMCwtMi41IGggMTkuMSB2IDMuMSBjIDAsMC44IDAuMywxLjIgMC42LDEuNyBsIDEuNCwwLjIgMS4yLC0wIGMgMS43LDAgMy4xLC0wLjEgMy4xLC0xLjggdiAtMy4xIGMgMC44LC0wLjIgMi42LC0wLjUgMi42LC0xLjQgdiAtMS43IGMgMCwtMC41IC0wLjUsLTAuNyAtMC45LC0wLjggMC4xLC0wLjUgMS4yLC0xLjEgMS4yLC0yLjUgdiAtMiBjIDAsLTEuNSAtMi4xLC00LjEgLTIuNSwtNS40IGggLTEuMiB2IC0wLjQgYyAwLC0xLjEgLTIuMiwtNC44IC0yLjUsLTUuOCBsIDE5LDEyLjUgYyAtMC40LDEuNiAtMiw0IC0yLDUuMiB2IDcuMiBoIDIyLjkgbCAwLDAgeiBNIDk1LjksMTE0LjYgSCA5NS43IGMgLTEuMSwwIC0xLjgsLTAuNyAtMS44LC0xLjcgdiAtMC41IGMgMCwtMSAwLjYsLTEuOCAxLjUsLTEuOCBoIDAuNSBjIDEsMCAxLjUsMS4xIDEuNSwyIDAsMS4xIC0wLjUsMiAtMS41LDIgeiBtIC0zLjEsLTIuNSB2IDEuMSBjIDAsMSAxLjYsMi41IDIuOSwyLjUgMS40LDAgMi42LC0xLjMgMi42LC0yLjggdiAtMC44IGMgMCwtMS4yIC0xLjMsLTIuNiAtMi41LC0yLjYgSCA5NS43IGMgLTEuNCwwIC0yLjksMS40IC0yLjksMi42IHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDExNC41LDEwNy45IGMgMCwwLjkgLTAuOCwxLjYgLTEuOCwxLjYgLTEsMCAtMS44LC0wLjcgLTEuOCwtMS42IDAsLTAuOSAwLjgsLTEuNiAxLjgsLTEuNiAxLDAgMS44LDAuNyAxLjgsMS42IHogbSAtMTEuMiwtNy4yIGMgMCwwLjkgLTAuOCwxLjYgLTEuOCwxLjYgLTEsMCAtMS44LC0wLjcgLTEuOCwtMS42IDAsLTAuOSAwLjgsLTEuNiAxLjgsLTEuNiAxLDAgMS44LDAuNyAxLjgsMS42IHogbSAtNS41LC0zLjcgYyAwLDAuOSAtMC44LDEuNiAtMS44LDEuNiAtMSwwIC0xLjgsLTAuNyAtMS44LC0xLjYgMCwtMC45IDAuOCwtMS42IDEuOCwtMS42IDEsMCAxLjgsMC43IDEuOCwxLjYgeiBNIDEwOC45LDEwNC41IGMgMCwwLjkgLTAuOCwxLjYgLTEuOCwxLjYgLTEsMCAtMS44LC0wLjcgLTEuOCwtMS42IDAsLTAuOSAwLjgsLTEuNiAxLjgsLTEuNiAxLDAgMS44LDAuNyAxLjgsMS42IHogTSA5Mi4zLDkzLjUgYyAwLDAuOSAtMC44LDEuNiAtMS44LDEuNiAtMSwwIC0xLjgsLTAuNyAtMS44LC0xLjYgMCwtMC45IDAuOCwtMS42IDEuOCwtMS42IDEsMCAxLjgsMC43IDEuOCwxLjYgeiBNIDg2LjUsODkuOCBjIDAsMC45IC0wLjgsMS42IC0xLjgsMS42IC0xLDAgLTEuOCwtMC43IC0xLjgsLTEuNiAwLC0wLjkgMC44LC0xLjYgMS44LC0xLjYgMSwwIDEuOCwwLjcgMS44LDEuNiB6IG0gMzUuNiwyLjYgMTAuOCwwIDAsMTYuMSAtMTAuOCwwIHogbSAtNTUuOSwyNi40IHYgMC4yIGMgMCwwLjYgMS4yLDAuNiAxLjgsMC42IGggMzAuOCBjIDAuNywwIDEuMSwtMC4yIDEuNywtMC4zIC0wLjEsLTAuOCAtMC42LC0xLjQgLTEuNCwtMS40IEggNjcuNSBjIC0wLjUsMCAtMS40LDAuNCAtMS40LDAuOSB6IG0gMjYuNiwtNi44IGMgMCwtMS4yIDEuNSwtMi42IDIuOSwtMi42IGggMC4yIGMgMS4yLDAgMi41LDEuNCAyLjUsMi42IHYgMC44IGMgMCwxLjQgLTEuMiwyLjggLTIuNiwyLjggLTEuNCwwIC0yLjksLTEuNCAtMi45LC0yLjUgdiAtMSBoIC0wIHogbSAtMjQuOCwwLjYgYyAwLC0xLjYgMS4yLC0zLjIgMi45LC0zLjIgMS4zLDAgMi44LDEuNSAyLjgsMi42IHYgMS4xIGMgMCwwLjkgLTEuNCwyLjUgLTIuOCwyLjUgLTEuNCwwIC0yLjksLTEuNCAtMi45LC0yLjYgdiAtMC4zIHogbSAtMC4zLC0zLjggYyAtMC41LDEgLTIsMy40IC0yLDQuNCB2IDAuNiBjIDAsMC45IDAuMiwxLjEgMC4zLDEuOCAwLjUsMC4xIDAuNSwwLjMgMS4xLDAuMyBoIDMyLjMgYyAwLjYsMCAwLjUsLTAuMiAxLC0wLjMgbCAwLjIsLTIuNiBjIDAuMSwtMS4yIC0xLjQsLTMuNCAtMS44LC00LjMgbCAtOC4yLC0wLjIgLTE1LjEsLTAgLTcuOCwwLjIgeiBtIDIsLTIuMiBoIDI3LjEgYyAtMC40LC0xLjMgLTMuMywtNy4xIC00LjMsLTcuMSBIIDc0IGMgLTAuOCwwIC00LjIsNiAtNC4zLDcuMSB6IG0gMjYuMiw3LjggYyAxLjEsMCAxLjUsLTAuOSAxLjUsLTIgMCwtMC45IC0wLjYsLTIgLTEuNSwtMiBoIC0wLjUgYyAtMSwwIC0xLjUsMC44IC0xLjUsMS44IHYgMC41IGMgMCwxIDAuOCwxLjcgMS44LDEuNyBoIDAuMiBsIDAsMCB6IE0gNjkuMSwxMTIuMyB2IDAuOSBjIDAsMC42IDEsMS40IDEuNywxLjQgaCAwLjIgYyAwLjYsMCAxLjUsLTAuOCAxLjUsLTEuMiB2IC0xLjIgYyAwLC0wLjggLTAuOCwtMS41IC0xLjUsLTEuNSBoIC0wLjUgYyAtMC42LDAgLTEuNCwxIC0xLjQsMS43IHpcIn1dLGlbXCJHUi5JTi5JQy5UUkFGRklDIElOU1BFQ1RJT04gRkFDSUxJVFlcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMjEuNCw4MS43IGggMS4xIHYgMC42IGMgMCwwLjYgMC44LDIuMSAxLjIsMi40IDAuNSwwLjQgMS45LDAuOSAyLjcsMC45IDIuNiwwIDMuOSwtMS45IDMuOSwtNC41IHYgLTAuNSBoIC03LjQgYyAtMC41LDAgLTEuMiwwLjggLTEuNCwxLjEgeiBtIC0yMi42LDIzLjUgYyAwLC0xLjcgMS43LC0zIDMuNCwtMyAxLjcsMCAzLjEsMS40IDMuMSwzLjEgdiAwLjYgYyAwLDEuMyAtMS43LDIuNiAtMy4xLDIuNiAtMS43LDAgLTMuNCwtMS4zIC0zLjQsLTMgdiAtMC41IHogbSAtMjkuNywwIGMgMCwtMS44IDEuMywtMyAzLjEsLTMgMS43LDAgMy4zLDEuNCAzLjMsMy4xIHYgMC4zIGMgMCwxLjYgLTEuNiwzIC0zLjQsMyAtMS41LDAgLTMsLTEuMiAtMywtMi42IHYgLTAuOCB6IG0gMy43LC03IGMgMCwtMC40IDEuNiwtNC4yIDEuOSwtNSAwLjYsLTEuNyAwLjksLTMuNiAzLjMsLTMuNiBIIDk2LjUgYyAyLjgsMCAyLjIsMS44IDMuMiwzLjYgMC4yLDAuNCAxLjgsNC41IDEuOCw0LjkgSCA3Mi44IHogbSAtMy43LDEgYyAtMi4xLDAgLTMuNywxLjUgLTMuNywzLjYgdiA5LjIgYyAwLDEgMS43LDIuMyAzLjEsMi4zIHYgNS4zIGMgMCwxLjggMS4zLDMuMyAzLjMsMy4zIDEuNCwwIDMuMSwtMS42IDMuMSwtMi42IHYgLTUuOSBoIDI0LjggdiA2LjIgYyAwLDEgMS43LDIuMyAzLDIuMyBoIDAuMiBjIDEuNCwwIDMuMSwtMS4zIDMuMSwtMi42IHYgLTUuOSBjIDEuOSwwIDMuMywtMS40IDMuMywtMy4zIHYgLTguMSBjIDAsLTIgLTEuNCwtMy4zIC0zLjIsLTMuNyAtMS40LC0wLjIgLTEuMSwtMC44IC0xLjYsLTEuOSAtMC40LC0wLjggLTAuNywtMS42IC0xLC0yLjQgLTEuMiwtMi42IC0yLjIsLTguMiAtNS42LC04LjIgaCAtMjEuMiBjIC0yLjksMCAtMy41LDMuMyAtNC41LDUuNSAtMC42LDEuNCAtMi43LDUuOCAtMyw3IHogbSA1Ni41LDIwLjIgMC4zLC0zLjMgMC41LC02LjIgaCAxLjcgbCAwLjgsMTIuOSBoIDUuOCBWIDg4LjkgYyAwLC0wLjYgLTEuMiwtMS45IC0yLC0xLjkgbCAtMC42LDAuMSAtOS45LDE0LjYgaCA4LjQgdiAzLjYgaCAtMTEuMiB2IDE3LjYgaCA2LjEgbCAtMCwtMC44IDAuMiwtMi42IHogbSAtMTYuOCwtMzAuOCBjIDAuMiwtMC45IDEsLTEuNSAyLC0xLjYgdiAyLjIgaCAtMiBjIDAsMS40IDAuOCwyLjIgMi4yLDIuMiB2IC0yIGggMiBjIC0wLDEuMyAtMC44LDEuNCAtMS40LDIgaCA3LjggbCAwLDEwLjIgMTAsLTE0LjMgLTEwLjEsLTAuMiBoIC02LjQgdiAtNy42IGMgMCwtMS4yIC0wLjgsLTIuMiAtMS45LC0yLjIgaCAtMC40IGMgLTIuMiwwIC0yLDIuNCAtMiw0LjcgMCwxLjMgLTAuNCw1LjggMC4yLDYuNiB6IG0gMCwwIHYgMC42IGggMiB2IC0yLjIgYyAtMS4xLDAgLTEuOCwwLjcgLTIsMS42IHogbSAyLjIsMi44IGggMC42IGMgMC42LC0wLjYgMS40LC0wLjcgMS40LC0yIGggLTIgdiAyIHogbSAxOS4zLC0xMiAwLC0yIC04LjgsLTAgMSwyIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDEzMC4zLDc5LjQgLTcuOSwtMCAwLjQsMS4zIDcuNSwwIHogbSAtOC4xLDIyLjIgOS45LC0xNC42IDAuNiwtMC4xIC0zLjEsMC4yIC0xMCwxNC4zIC0wLjEsMy43IDExLjIsMCAwLC0zLjYgeiBtIC0yMy4zLDMuNiB2IDAuNSBjIDAsMS43IDEuNywzIDMuNCwzIDEuNCwwIDMuMSwtMS40IDMuMSwtMi42IHYgLTAuNiBjIDAsLTEuNyAtMS40LC0zLjEgLTMuMSwtMy4xIC0xLjgsMCAtMy40LDEuMyAtMy40LDMgeiBtIC0yOS43LDAgdiAwLjggYyAwLDEuNCAxLjUsMi42IDMsMi42IDEuOCwwIDMuNCwtMS4zIDMuNCwtMyB2IC0wLjMgYyAwLC0xLjYgLTEuNiwtMy4xIC0zLjMsLTMuMSAtMS44LDAgLTMuMSwxLjIgLTMuMSwzIHogbSAzLjcsLTcgaCAyOC42IGMgMCwtMC41IC0xLjUsLTQuNSAtMS44LC00LjkgLTEsLTEuOCAtMC40LC0zLjYgLTMuMiwtMy42IEggNzcuOSBjIC0yLjQsMCAtMi42LDEuOSAtMy4zLDMuNiAtMC4yLDAuOCAtMS44LDQuNiAtMS44LDUgelwifV0saVtcIkdSLklOLklDLlRVTk5FTFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk0LjQsMTE2LjggYyAwLC0zLjUgMi42LC03LjIgNS45LC03LjIgMy4yLDAgNS42LDQgNS42LDcuMSB2IDAuOCBIIDk0LjQgdiAtMC43IHogbSAyNy4yLC00LjcgOSwtNC4yIGMgMC4yLDEuNyAwLjgsMy4yIDEsNS4yIDAuMywxLjggMC42LDMuMyAwLjYsNS42IHYgMC41IGggLTEwIGwgLTAuNywtNy4xIHogbSAtNDMuNSw0LjkgMC4xLDIuMiBIIDY4IGMgMCwtMS42IDAuMywtMy44IDAuNiwtNS40IDAuMSwtMC43IDAuMiwtMS44IDAuNSwtMi40IDAuMSwtMC4yIDAuNywtMi4yIDAuNywtMi40IGwgOS4yLDMuMSAtMC44LDQuOSB6IG0gMzksLTE2LjggNi4yLC02LjIgYyAwLjYsMSAxLjIsMS44IDEuOSwyLjggMC44LDEuMSAxLjIsMiAxLjgsMy4xIDAuNiwxIDIuOCw1LjYgMi44LDYuOSBsIC04LjcsNC4yIGMgLTAuMSwtMi41IC0zLC05IC00LC0xMC42IHogbSAtMzcuOSwxMC40IC05LjEsLTMgYyAwLjEsLTEuMiAyLjQsLTUuOSAzLC03IDEuMiwtMi4xIDMsLTQuMiA0LC02IGwgNy42LDQuNCBjIC0wLjIsMC41IC0yLjYsNC4zIC0zLDUuNCAtMC44LDEuNyAtMS42LDQuOSAtMi40LDYuMiB6IE0gMTExLjIsODMuMiBjIDIuOCwwLjcgOS44LDcuMSAxMS4zLDkuNCBsIC02LjMsNi4yIGMgLTAuNSwtMS44IC02LC02LjkgLTguMiwtNy40IGwgMy4yLC04LjIgeiBNIDc4LjEsOTMuNCBDIDc5LjcsOTEgODgsODMuOCA5MSw4My4xIEwgOTQuOSw5MSBjIC0yLjYsMC42IC03LjksNSAtOS4yLDYuOSBsIC03LjYsLTQuNSB6IE0gOTIuNiw4Mi40IGMgMi42LC0wLjYgNC4xLC0xLjggNy44LC0xLjggaCAxLjQgYyA0LDAgNS4zLDEuMiA4LjEsMS44IC0wLDEgLTEuOSw1LjIgLTIuMyw2LjMgLTAuNiwxLjQgLTAuNCwyIC0yLjIsMS41IC0xLjEsLTAuMyAtMi40LC0wLjYgLTMuNiwtMC42IGggLTEgTCA5Ni4xLDkwLjMgOTIuNiw4Mi40IHogTSA2Ni41LDExOS44IEggNjAuNCBjIC0wLjQsMCAtMC41LDAuMSAtMC41LDAuNSB2IDAuMiBjIDAsMC40IDAuMSwwLjUgMC41LDAuNSBoIDc5IGMgMC4zLDAgMC43LC0wLjMgMC43LC0wLjUgMCwtMC40IC0wLjMsLTAuNyAtMC43LC0wLjcgaCAtNS43IHYgLTEuNSBjIDAsLTEwLjEgLTQuOSwtMjAuNCAtOS41LC0yNS45IEMgMTE5LjgsODcgMTExLjYsNzkgMTAyLjIsNzkgaCAtMiBjIC05LjcsMCAtMTguOCw4LjQgLTIzLjYsMTMuNyAtNSw1LjYgLTEwLjEsMTYuNiAtMTAuMSwyNy4xIGwgMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDc5LDExMiAtOS4zLC0zLjEgYyAtMCwwLjIgLTAuNiwyLjIgLTAuNywyLjQgLTAuMiwwLjYgLTAuNCwxLjcgLTAuNSwyLjQgLTAuMiwxLjUgLTAuNSwzLjggLTAuNSw1LjQgaCAxMC4zIGwgLTAuMSwtMi4yIDAuOCwtNC45IHogbSAxNS41LDUuNCBoIDExLjQgdiAtMC44IGMgMCwtMy4xIC0yLjQsLTcuMSAtNS42LC03LjEgLTMuMywwIC01LjksMy44IC01LjksNy4yIHYgMC43IHogbSAyNy45LDEuNyBoIDEwIHYgLTAuNSBjIDAsLTIuMyAtMC40LC0zLjggLTAuNiwtNS42IC0wLjMsLTIgLTAuOSwtMy41IC0xLC01LjIgbCAtOSw0LjIgMC43LDcuMSB6IG0gLTUuMiwtMTkgYyAxLjEsMS42IDQsOC4xIDQsMTAuNiBsIDguNywtNC4yIGMgMCwtMS4yIC0yLjEsLTUuOCAtMi44LC02LjggLTAuNywtMS4xIC0xLjEsLTIgLTEuOCwtMy4xIC0wLjcsLTEgLTEuMywtMS44IC0xLjksLTIuOCBsIC02LjIsNi4yIHogbSAtMzcuOSwxMC40IGMgMC43LC0xLjQgMS42LC00LjUgMi40LC02LjIgMC41LC0xLjEgMi45LC00LjkgMywtNS40IGwgLTcuNiwtNC40IGMgLTEsMS44IC0yLjgsNCAtNCw2IC0wLjYsMS4xIC0yLjksNS44IC0zLDcgbCA5LjEsMyB6IG0gMjguOCwtMTkuMSBjIDIuMSwwLjUgNy42LDUuNiA4LjIsNy40IGwgNi4zLC02LjEgYyAtMS41LC0yLjMgLTguNSwtOC44IC0xMS4zLC05LjUgbCAtMy4yLDguMiB6IG0gLTMwLDIgNy42LDQuNiBDIDg3LDk2IDkyLjMsOTEuNiA5NC45LDkxIGwgLTMuOCwtNy45IGMgLTMuMSwwLjcgLTExLjQsNy45IC0xMywxMC4zIHogTSA5Mi42LDgyLjQgbCAzLjUsNy45IDQuNiwtMC42IGggMSBjIDEuMywwIDIuNiwwLjMgMy42LDAuNiAxLjcsMC40IDEuNiwtMC4xIDIuMiwtMS41IDAuNCwtMS4xIDIuMywtNS4zIDIuMywtNi4zIC0yLjgsLTAuNiAtNCwtMS45IC04LjEsLTEuOSBoIC0xLjQgYyAtMy42LDAgLTUuMiwxLjMgLTcuNywxLjkgelwifV0saVtcIkdSLklOLklDLlBVTVBJTkcgU1RBVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDgzLjIsODMuOCAwLDEuMiAwLDUuNiAtMTEuMywwIDAsLTAgYyAtMC4yLDAgLTAuMywwIC0wLjUsMCAtMC4xLDYuNmUtNCAtMC4xLC05LjZlLTQgLTAuMiwwIC0yLjcsMCAtNC45LDAuMyAtNi41LDEuNyAtMS40LDEuMiAtMiwzLjMgLTIuMSw1LjkgbCAtMC4xLDAgMCwxLjIgYyA4ZS02LDAuMSAtMCwwLjIgLTAsMC4zIGwgMCwwIDAsMTQuMSAtMi44LDAgMCwyLjQgODAuOCwwIDAsLTIuNCAtMi44LDAgMCwtMTQgMCwtMS42IC0wLjEsMCBjIC0wLjEsLTIuNiAtMC41LC00LjYgLTEuOCwtNS45IC0xLjUsLTEuNCAtMy44LC0xLjcgLTYuOCwtMS43IGwgMCwtMCAtMC4zLDAgYyAtMC4yLC01LjZlLTQgLTAuMywtMCAtMC40LC0wIGwgMCwwIC0xMS4zLDAgMCwtNS42IDAsLTEuMiAtMS4yLDAgLTMxLjIsMCAtMS4yLDAgeiBtIDIuNCwyLjQgMjguOCwwIDAsMjcuMiAtMjguOCwwIDAsLTI3LjIgeiBNIDcxLjIsOTMgYyAwLjEsLTAgMC4xLDAgMC4yLDAgbCAxMS44LDAgMCw4LjQgLTcuNSwwIGMgLTAuOCwtMC4xIC0xLjQsLTAuMSAtMiwtMCAtMCwwIC0wLDAgLTAuMSwwIC0wLDAgLTAsLTAgLTAsMCBsIDAsMCBjIC0wLjUsMC4xIC0xLjIsMC4zIC0xLjUsMC44IC0wLjQsMC41IC0wLjQsMS4xIC0wLjQsMS42IC0wLDAuNCAtMCwwLjggMCwxLjIgbCAtMCwwIDAsOC44IC02LjgsMCAwLC0xNC41IGMgMCwtMyAwLjUsLTQuNSAxLjQsLTUuMyBDIDY3LjEsOTMuMyA2OC43LDkzLjEgNzEuMiw5MyB6IG0gNDUuNiwwIDExLjgsMCBjIDAuMSw5LjdlLTQgMC4xLC0wIDAuMiwwIDIuOCwwLjEgNC41LDAuNCA1LjIsMS4xIDAuOCwwLjcgMS4yLDIuMyAxLjIsNS4yIGwgMCwxNC41IC02LjgsMCAwLC04IDAsMCBjIC0wLC0wLjEgLTAsLTAuMyAtMCwtMC40IDAsLTAuOSAwLjIsLTEuNiAtMC4xLC0yLjUgLTAuMSwtMC41IC0wLjYsLTEuMiAtMS4yLC0xLjQgLTAuMiwtMC4xIC0wLjUsLTAgLTAuNywtMCBsIDAsLTAuMSAtOS42LDAgMCwtOC40IHogTSA3NCwxMDMuOCBsIDkuMiwwIDAsMTAgLTkuMiwwIDAsLTguNSAwLDAgYyAwLC0wLjYgLTAsLTEuMSAtMCwtMS40IDAsLTAuMSAtMCwtMCAwLC0wLjEgeiBtIDQyLjgsMCA5LjIsMCBjIDAsMC4yIDAsMC44IDAsMS42IGwgLTAsMCAwLDguNCAtOS4yLDAgMCwtMTAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZmlsbDohIVImJkcsZDpcIm0gMTE2LjgsOTMgMTEuOCwwIGMgMC4xLDkuN2UtNCAwLjEsLTAgMC4yLDAgMi44LDAuMSA0LjUsMC40IDUuMiwxLjEgMC44LDAuNyAxLjIsMi4zIDEuMiw1LjIgbCAwLDE0LjUgLTYuOCwwIDAsLTggMCwwIGMgLTAsLTAuMSAtMCwtMC4zIC0wLC0wLjQgMCwtMC45IDAuMiwtMS42IC0wLjEsLTIuNSAtMC4xLC0wLjUgLTAuNiwtMS4yIC0xLjIsLTEuNCAtMC4yLC0wLjEgLTAuNSwtMCAtMC43LC0wIGwgMCwtMC4xIC05LjYsMCAwLC04LjQgeiBtIC00NS42LDAgYyAwLjEsLTAgMC4xLDAgMC4yLDAgbCAxMS44LDAgMCw4LjQgLTcuNSwwIGMgLTAuOCwtMC4xIC0xLjQsLTAuMSAtMiwtMCAtMCwwIC0wLDAgLTAuMSwwIC0wLDAgLTAsLTAgLTAsMCBsIDAsMCBjIC0wLjUsMC4xIC0xLjIsMC4zIC0xLjUsMC44IC0wLjQsMC41IC0wLjQsMS4xIC0wLjQsMS42IC0wLDAuNCAtMCwwLjggMCwxLjIgbCAtMCwwIDAsOC44IC02LjgsMCAwLC0xNC41IGMgMCwtMyAwLjUsLTQuNSAxLjQsLTUuMyBDIDY3LjEsOTMuMyA2OC43LDkzLjEgNzEuMiw5MyB6IG0gMTQuNCwtNi44IDI4LjgsMCAwLDI3LjIgLTI4LjgsMCAwLC0yNy4yIHpcIn1dLGlbXCJHUi5JTi5JQy5SRVNFUlZPSVJcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSAxMjcuMyA2OS4xIEMgMTI3IDY5LjEgMTI2LjcgNjkuMiAxMjYuNCA2OS4yIEMgMTIzLjQgNjkuNSAxMjAuOCA3MS45IDExOC40IDc0LjUgQyAxMTUuOSA3NyAxMTMuNSA3OS43IDExMS41IDgwLjkgQyAxMDguOSA4Mi40IDEwNS41IDgyLjUgMTAxLjkgODIuNiBDIDk4LjMgODIuNyA5NC43IDgyLjkgOTEuOCA4NC45IEMgODkuNyA4Ni41IDg4LjYgODguNSA4Ny41IDkwLjMgQyA4Ni40IDkyIDg1LjIgOTMuNCA4Mi43IDk0LjIgQyA3OS40IDk1LjMgNzIgOTYuNCA2Ni45IDk4LjggQyA2NC4zIDEwMC4xIDYyLjEgMTAxLjcgNjEuNSAxMDQgQyA2MC44IDEwNi4zIDYxLjcgMTA5LjEgNjQuNyAxMTIuMyBMIDY1LjEgMTExLjkgTCA2NS4xIDEyMC4xIEwgODQuMyAxMjAuMSBMIDg0LjMgMTI5LjcgTCA4Ni43IDEyOS43IEwgODYuNyAxMjAuMSBMIDk3LjkgMTIwLjEgTCA5Ny45IDEyOS43IEwgMTAwLjMgMTI5LjcgTCAxMDAuMyAxMjAuMSBMIDExNy4xIDEyMC4xIEwgMTE3LjEgMTEyLjUgQyAxMTcuNCAxMTIuMiAxMTcuNyAxMTEuOSAxMTggMTExLjUgQyAxMTkgMTEwLjEgMTE5LjMgMTA4LjUgMTE5LjUgMTA2LjkgQyAxMTkuOCAxMDMuNyAxMTkuNSAxMDAuNSAxMjEuNyA5Ny43IEMgMTIzLjEgOTUuOSAxMjYgOTUuNCAxMjkuMSA5NC43IEMgMTMyLjEgOTQuMSAxMzUuNCA5My4zIDEzNy4yIDkwLjQgQyAxMzkuNCA4Ni43IDEzOS4xIDgxLjMgMTM3LjIgNzYuOCBDIDEzNi4zIDc0LjUgMTM0LjkgNzIuNSAxMzMgNzEuMSBDIDEzMS40IDY5LjkgMTI5LjUgNjkuMSAxMjcuMyA2OS4xIHogTSAxMjcuNCA3MC43IEMgMTI5LjIgNzAuNyAxMzAuNyA3MS4zIDEzMi4xIDcyLjMgQyAxMzMuNiA3My41IDEzNC45IDc1LjQgMTM1LjggNzcuNCBDIDEzNy41IDgxLjUgMTM3LjYgODYuNiAxMzUuOCA4OS42IEMgMTM0LjUgOTEuOCAxMzEuNyA5Mi41IDEyOC43IDkzLjIgQyAxMjUuNyA5My44IDEyMi40IDk0LjMgMTIwLjUgOTYuNyBDIDExNy44IDEwMCAxMTguMiAxMDMuNyAxMTcuOSAxMDYuNyBDIDExNy44IDEwOC4yIDExNy41IDEwOS41IDExNi43IDExMC42IEMgMTE2LjUgMTEwLjggMTE2LjMgMTExLjEgMTE2LjEgMTExLjMgTCA2NS44IDExMS4zIEwgNjUuOSAxMTEuMyBDIDYzLjEgMTA4LjIgNjIuNiAxMDYuMSA2MyAxMDQuNCBDIDYzLjUgMTAyLjggNjUuMiAxMDEuNCA2Ny42IDEwMC4zIEMgNzIuMyA5OCA3OS41IDk2LjkgODMuMSA5NS44IEMgODYuMSA5NC44IDg3LjcgOTIuOSA4OC44IDkxLjEgQyA5MCA4OS4zIDkwLjkgODcuNSA5Mi44IDg2LjIgQyA5NS4xIDg0LjUgOTguNCA4NC4zIDEwMiA4NC4yIEMgMTA1LjUgODQuMSAxMDkuMiA4NC4xIDExMi4zIDgyLjMgQyAxMTQuNyA4MC44IDExNy4xIDc4LjEgMTE5LjUgNzUuNiBDIDEyMS45IDczLjEgMTI0LjQgNzEgMTI2LjYgNzAuOCBDIDEyNi45IDcwLjggMTI3LjEgNzAuNyAxMjcuNCA3MC43IHogXCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSAxMjcuNCw3MC43IGMgMS44LC0wIDMuMywwLjYgNC43LDEuNiAxLjUsMS4yIDIuOCwzIDMuNyw1LjEgMS43LDQuMSAxLjksOS4yIDAuMSwxMi4yIC0xLjMsMi4yIC00LjEsMyAtNy4xLDMuNiAtMywwLjYgLTYuMywxLjEgLTguMywzLjUgLTIuNiwzLjMgLTIuMyw3LjEgLTIuNiwxMCAtMC4xLDEuNSAtMC40LDIuOCAtMS4yLDMuOCAtMC4yLDAuMiAtMC40LDAuNSAtMC42LDAuNyBsIC01MC4yLDAgMCwtMCBjIC0yLjgsLTMgLTMuMywtNS4yIC0yLjgsLTYuOCAwLjUsLTEuNiAyLjEsLTMgNC41LC00LjIgNC44LC0yLjMgMTEuOSwtMy40IDE1LjYsLTQuNSAzLC0xIDQuNSwtMi44IDUuNywtNC42IDEuMiwtMS44IDIuMSwtMy42IDMuOSwtNC45IDIuMywtMS43IDUuNywtMS45IDkuMiwtMiAzLjUsLTAuMSA3LjMsLTAuMSAxMC4zLC0xLjkgMi41LC0xLjQgNC44LC00LjIgNy4yLC02LjcgMi40LC0yLjUgNC45LC00LjYgNy4xLC00LjggMC4zLC0wIDAuNSwtMC4xIDAuOCwtMC4xIHogbSAtNDEuOSw0OSAxMy42LDAgMCwxMCAtMTMuNiwwIHpcIn1dLGlbXCJHUi5JTi5JQy5TVE9SQUdFIFRPV0VSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTE4LjMsMTIxIDAuNCw1LjMgMC43LDEyLjggaCAyLjkgYyAwLC02LjEgLTEuMSwtMTIuNiAtMS4xLC0xOC42IDAsLTMuNCAtMC40LC02LjIgLTAuNCwtOS42IC0wLjEsLTUuMyAwLjIsLTMgMi42LC02LjYgbCAtMC4zLC0zLjEgMCwtMS4xIGggLTQuMiBWIDg0IGMgLTIuNSwwLjYgLTUuMiwxLjggLTguMywyLjYgLTIuNiwwLjYgLTYuNCwxLjQgLTkuNCwxLjQgaCAtMi40IGMgLTcuNiwwIC0xMi4yLC0yLjYgLTE4LC00IHYgMTYuMiBoIC00LjIgdiAwLjcgbCAtMC4zLDMuNyAzLjIsMy43IC0yLDMwLjggaCAzLjEgdiAtMy4zIGwgMS40LC0yMS43IGMgMC41LDAuNCAyLjEsMi43IDMsMy42IDAuOSwwLjkgMi40LDIuMiAzLjUsMi45IDIuMiwxLjUgNS42LDMuOCA4LjcsNC4xIHYgMTQuNCBoIDUuNiB2IC0xNC40IGMgMy43LC0wLjkgNi4yLC0yLjIgOC44LC00LjMgMS40LC0xLjEgMi4yLC0xLjggMy40LC0zIDAuNywtMC43IDIuNSwtMy4yIDMsLTMuNCB2IDMuMSBsIDAuMiwzLjggeiBNIDk5LjcsODUuMiBjIDcuNCwwIDIzLC00LjQgMjUuNywtOC40IC0yLjgsLTEuNSAtMjUuMSwtMTYgLTI1LjMsLTE2IC0wLjQsMCAtMjQuOSwxNS40IC0yNS41LDE2LjIgMi42LDMuNSAxNi42LDguMiAyMy4zLDguMiBoIDEuOCB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA5Ny45LDg1LjIgYyAtNC4zLDAgLTExLjcsLTIgLTE3LC00LjMgbCAtMCwzLjIgYyA1LjgsMS40IDEwLjQsNCAxOCw0IGggMi40IGMgMywwIDYuOSwtMC44IDkuNCwtMS40IDMsLTAuOCA1LjgsLTIgOC4zLC0yLjYgViA4MC44IGMgLTYsMi40IC0xNC40LDQuNCAtMTkuMyw0LjQgSCA5Ny45IHpcIn1dLGlbXCJHUi5JTi5JQy5TVVJGQUNFIFdBVEVSIElOVEFLRVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDYzLjQgNzUuNSBMIDYzLjQgNzYuMyBMIDYzLjQgOTAuNyBMIDYzLjQgOTEuNSBMIDY0LjIgOTEuNSBMIDc1LjcgOTEuNSBDIDc2LjUgOTYuNiA3OS44IDk5LjEgODMuMyAxMDEgQyA4Ny4xIDEwMi45IDkxLjMgMTA0LjMgOTMuOCAxMDcuNSBDIDk0LjggMTA4LjkgOTQuOSAxMTAuNyA5NS4yIDExMi42IEMgOTUuNCAxMTMuNiA5NS42IDExNC41IDk2LjIgMTE1LjQgQyA5Ni43IDExNi4yIDk3LjUgMTE3IDk4LjggMTE3LjUgQyAxMDEuMiAxMTguNiAxMDguNyAxMjAuNyAxMTUuOSAxMjIuNCBDIDExOS42IDEyMy4yIDEyMy4xIDEyMy45IDEyNiAxMjQuMyBDIDEyNy41IDEyNC40IDEyOC43IDEyNC41IDEyOS44IDEyNC41IEMgMTMwLjggMTI0LjQgMTMxLjYgMTI0LjMgMTMyLjIgMTIzLjggQyAxMzQuOCAxMjEuNyAxMzYuMSAxMTkuOSAxMzYuNSAxMTguMyBDIDEzNi44IDExNi44IDEzNi4xIDExNS40IDEzNSAxMTQuNCBDIDEzMy45IDExMy40IDEzMi40IDExMi41IDEzMSAxMTEuNyBDIDEyOS43IDExMC44IDEyOC40IDEwOS45IDEyNy43IDEwOC44IEMgMTI0LjIgMTAzLjYgMTIxIDk1LjUgMTEzLjQgOTEuNSBMIDExOSA5MS41IEwgMTE5LjggOTEuNSBMIDExOS44IDkwLjcgTCAxMTkuOCA3Ni4zIEwgMTE5LjggNzUuNSBMIDExOSA3NS41IEwgNjQuMiA3NS41IEwgNjMuNCA3NS41IHogTSA2NSA3Ny4xIEwgMTE4LjIgNzcuMSBMIDExOC4yIDg5LjkgTCAxMDkuNCA4OS45IEwgMTA5LjQgODEuMSBMIDczLjggODEuMSBMIDczLjggODkuOSBMIDY1IDg5LjkgTCA2NSA3Ny4xIHogTSA3Ni45IDkxLjUgTCAxMTAuNSA5MS41IEMgMTE5LjQgOTQuOCAxMjIuNyAxMDMuNSAxMjYuNyAxMDkuNSBDIDEyNy42IDExMC44IDEyOSAxMTEuOCAxMzAuNCAxMTIuNyBDIDEzMS44IDExMy42IDEzMy4yIDExNC40IDEzNC4yIDExNS4zIEMgMTM1LjEgMTE2LjIgMTM1LjYgMTE3IDEzNS4zIDExOC4xIEMgMTM1LjEgMTE5LjIgMTM0IDEyMC44IDEzMS40IDEyMi45IEMgMTMxLjMgMTIzIDEzMC42IDEyMy4yIDEyOS43IDEyMy4zIEMgMTI4LjggMTIzLjMgMTI3LjYgMTIzLjMgMTI2LjIgMTIzLjEgQyAxMjMuMyAxMjIuOCAxMTkuOCAxMjIuMSAxMTYuMiAxMjEuMyBDIDEwOSAxMTkuNiAxMDEuNSAxMTcuMyA5OS4zIDExNi40IEMgOTguMiAxMTYgOTcuNiAxMTUuNCA5Ny4yIDExNC44IEMgOTYuOCAxMTQuMSA5Ni42IDExMy4zIDk2LjQgMTEyLjQgQyA5Ni4xIDExMC42IDk2IDEwOC41IDk0LjcgMTA2LjggQyA5MS45IDEwMy4yIDg3LjYgMTAxLjggODMuOSA5OS45IEMgODAuNSA5OC4xIDc3LjcgOTYuMSA3Ni45IDkxLjUgeiBcIn0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGZpbGw6ISFSJiZHLGQ6XCJtIDc2LjksOTEuNSAzMy42LDAgYyA4LjksMy4zIDEyLjIsMTIgMTYuMiwxOCAwLjksMS4zIDIuMywyLjMgMy43LDMuMiAxLjQsMC45IDIuOCwxLjcgMy44LDIuNiAwLjksMC45IDEuNCwxLjcgMS4yLDIuOCAtMC4yLDEuMSAtMS4zLDIuNyAtMy45LDQuOCAtMC4yLDAuMSAtMC44LDAuMyAtMS43LDAuNCAtMC45LDAgLTIuMiwtMCAtMy42LC0wLjIgLTIuOCwtMC4zIC02LjQsLTEgLTEwLC0xLjggLTcuMiwtMS43IC0xNC43LC0zLjkgLTE2LjksLTQuOCAtMS4xLC0wLjQgLTEuNiwtMSAtMi4xLC0xLjcgLTAuNCwtMC43IC0wLjYsLTEuNSAtMC44LC0yLjMgLTAuMywtMS44IC0wLjQsLTMuOSAtMS43LC01LjYgLTIuOCwtMy42IC03LjEsLTUgLTEwLjgsLTYuOSBDIDgwLjUsOTguMSA3Ny43LDk2LjEgNzYuOSw5MS41IHogbSAtMTEuOSwtMTQuNCA1My4yLDAgMCwxMi44IC04LjgsMCAwLC04LjggLTM1LjYsMCAwLDguOCAtOC44LDAgMCwtMTIuOCB6XCJ9XSxpW1wiR1IuSU4uSUMuV0FSRUhPVVNFL1NUT1JBR0UgRkFDSUxJVFlcIl09W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMyxmb250c2l6ZToyMyx0ZXh0OlwiU1RPUlwifV0saVtcIkdSLklOLklDLldBU1RFV0FURVIgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTA3LjIsMTE0LjggYyAxLjksMCAzLjksLTEgNC4zLC0yLjQgMS41LDEgMS43LDIuNCA0LjYsMi40IGggMC40IGMgMS44LDAgMy44LC0xLjEgNC4xLC0yLjQgaCAwLjQgYyAwLjQsMS40IDIuNSwyLjQgNC41LDIuNCBoIDAuNCBjIDIuNywwIDMsLTEuNSA0LjUsLTIuNCAwLjQsMS40IDIuNiwyLjQgNC41LDIuNCB2IC0xLjUgYyAtMi4yLDAgLTMuNSwtMS42IC0zLjksLTMuNCBoIC0xLjUgYyAtMCwxLjggLTEuNywzLjQgLTMuNiwzLjQgaCAtMC40IGMgLTIuMiwwIC0zLjYsLTEuNCAtMy44LC0zLjQgaCAtMS43IGwgLTAuMiwxLjMgYyAtMSwwLjcgLTEuMSwyIC0zLjMsMiBoIC0wLjQgYyAtMy4zLDAgLTMuMiwtMy40IC00LjEsLTMuNCBoIC0xLjMgYyAtMC4yLDIgLTEuNCwzLjQgLTMuNiwzLjQgdiAxLjUgeiBtIC0yLjIsLTMzLjMgaCAzMiB2IDM3IGggLTMyIFYgODEuNSB6IE0gNjUuMSwxMTQuOCB2IC0xLjUgYyAyLDAgMy43LC0xLjYgMy44LC0zLjQgaCAxLjkgYyAwLDEuOCAxLjUsMy40IDMuNCwzLjQgaCAwLjQgYyAxLjgsMCAzLjUsLTEuNiAzLjYsLTMuNCBoIDEuOSBjIDAsMiAxLjcsMy40IDMuOCwzLjQgaCAwLjIgYyAyLjIsMCAzLjIsLTEuNiAzLjYsLTMuNCBoIDEuNyBjIDAsMiAxLjcsMy40IDMuOCwzLjQgdiAxLjUgYyAtMiwwIC00LjEsLTEgLTQuNSwtMi40IC0xLjQsMC45IC0xLjcsMi41IC00LjYsMi41IGggLTAuNiBjIC0yLjksMCAtMy4xLC0xLjUgLTQuNSwtMi40IC0wLjQsMS4zIC0yLjQsMi40IC00LjEsMi40IEggNzQuMSBjIC0yLjQsMCAtMy40LC0xLjIgLTQuNSwtMi40IC0wLjQsMS40IC0yLjYsMi40IC00LjUsMi40IGwgMCwwIHogTSA5Ni41LDkzLjQgaCA2LjcgdiAxMy4zIEggOTYuNSBWIDkzLjQgeiBtIC0zMS40LDcuOSBjIDIsMCAzLjYsLTEuNSAzLjgsLTMuNCBoIDEuOSBjIDAuMiwxLjggMS40LDMuNCAzLjQsMy40IGggMC40IGMgMS44LDAgMy41LC0xLjcgMy42LC0zLjQgaCAxLjkgYyAwLDIgMS43LDMuNCAzLjgsMy40IGggMC4yIGMgMS41LDAgMy40LC0xLjUgMy40LC0yLjYgdiAtMC44IGggMS45IGMgMCwxLjkgMS44LDMuNCAzLjgsMy40IHYgMS41IGMgLTMuNiwwIC0zLjgsLTIgLTQuOSwtMi4yIC0wLjQsMS4zIC0yLjUsMi4yIC00LjIsMi4yIGggLTAuNiBjIC0xLjcsMCAtMy44LC0xIC00LjEsLTIuMiAtMSwwLjMgLTEuNCwyLjIgLTQuNSwyLjIgSCA3NC4xIGMgLTIuNywwIC0zLC0xLjMgLTQuNSwtMi4yIC0xLDEuNCAtMi4yLDIuMiAtNC41LDIuMiB2IC0xLjUgbCAwLDAgeiBtIDAsLTEyIGMgMiwwIDMuNiwtMS41IDMuOCwtMy40IGggMS45IGMgMC4xLDEuOCAxLjQsMy40IDMuNCwzLjQgaCAwLjQgYyAxLjgsMCAzLjUsLTEuNyAzLjYsLTMuNCBoIDEuOSBjIDAsMiAxLjcsMy40IDMuOCwzLjQgaCAwLjIgYyAxLjUsMCAzLjQsLTEuNSAzLjQsLTIuNiB2IC0wLjggaCAxLjkgYyAwLDEuOSAxLjgsMy40IDMuOCwzLjQgdiAxLjUgYyAtMy4xLDAgLTMsLTEgLTQuNywtMiAtMS40LDEgLTEuNywyLjEgLTQuNCwyLjEgaCAtMC42IGMgLTIuNywwIC0yLjksLTEuMSAtNC4zLC0yIC0xLjYsMSAtMS42LDIgLTQuNSwyIEggNzMuOSBjIC0yLjQsMCAtMi45LC0xLjIgLTQuMSwtMiAtMS42LDEgLTEuNywyIC00LjcsMiB2IC0xLjUgbCAwLDAgeiBtIDMxLjQsMjEuMyBoIDYuNyB2IDEwLjEgaCAzNS42IFYgNzkuNCBMIDEwMy4zLDc5LjIgViA4OS41IEggOTYuNSBWIDc5LjQgTCA2MS4yLDc5LjIgdiA0MS42IGggMzUuNCB2IC0xMC4xIHogbSAxNC4yLC0xMi4yIGMgMCwxLjQgLTEuOCwyLjggLTMuNiwyLjggdiAxLjUgYyAzLjQsMCAzLjUsLTEuOSA0LjcsLTIuMiAwLjQsMS4zIDIuNywyLjIgNC41LDIuMiBoIDAuMiBjIDIuOSwwIDMsLTEuMyA0LjMsLTIuMiAxLjIsMC45IDEuNywyLjIgNC4zLDIuMiBoIDAuOCBjIDIuNiwwIDMsLTEuMyA0LjMsLTIuMiAxLjQsMSAxLjUsMi4yIDQuNiwyLjIgdiAtMS41IGMgLTEuNywwIC0zLjgsLTEuNiAtMy44LC0yLjggdiAtMC42IGggLTEuNyBjIC0wLjEsMS44IC0xLjYsMy40IC0zLjYsMy40IGggLTAuNiBjIC0xLjQsMCAtMy40LC0xLjQgLTMuNCwtMi40IHYgLTAuOSBoIC0xLjkgYyAwLDEuNyAtMS43LDMuNCAtMy41LDMuNCBoIC0wLjQgYyAtMS45LDAgLTMuNSwtMS41IC0zLjYsLTMuNCBoIC0xLjggdiAwLjYgeiBtIDAsLTEyIGMgMCwxLjQgLTEuOCwyLjggLTMuNiwyLjggdiAxLjUgYyAxLjgsMCA0LC0wLjkgNC4zLC0yLjIgMS42LDEuMSAxLjcsMi4yIDQuOSwyLjIgaCAwLjQgYyAyLjYsMCAyLjksLTEuMyA0LjMsLTIuMiAwLjMsMS4zIDIuNCwyLjMgNC4xLDIuMyBoIDAuOCBjIDIuNywwIDMsLTEuMyA0LjUsLTIuMiAwLjQsMS4zIDIuNywyLjIgNC41LDIuMiB2IC0xLjUgYyAtMS43LDAgLTMuOCwtMS42IC0zLjgsLTIuOCB2IC0wLjYgaCAtMS43IGMgLTAuMSwxLjggLTEuNiwzLjQgLTMuNiwzLjQgaCAtMC42IGMgLTEuNiwwIC0zLjQsLTEuNCAtMy40LC0yLjggdiAtMC42IGggLTEuOSBjIDAsMS43IC0xLjcsMy40IC0zLjUsMy40IGggLTAuNCBjIC0xLjksMCAtMy41LC0xLjUgLTMuNiwtMy40IGggLTEuOCB2IDAuNSB6XCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxmaWxsOiEhUiYmRyxkOlwibSA2NS4xLDExNC44IGMgMS45LDAgNC4xLC0xIDQuNSwtMi40IDEuMSwxLjIgMi4yLDIuNCA0LjUsMi40IGggMC42IGMgMS44LDAgMy44LC0xLjEgNC4xLC0yLjQgMS40LDEgMS42LDIuNCA0LjUsMi40IGggMC42IGMgMi44LDAgMy4yLC0xLjYgNC41LC0yLjQgMC40LDEuNCAyLjUsMi40IDQuNSwyLjQgdiAtMS41IGMgLTIuMSwwIC0zLjcsLTEuNCAtMy44LC0zLjQgaCAtMS42IGMgLTAuNCwxLjggLTEuNCwzLjQgLTMuNiwzLjQgaCAtMC4yIGMgLTIuMSwwIC0zLjcsLTEuNCAtMy44LC0zLjQgaCAtMS44IGMgLTAsMS44IC0xLjcsMy40IC0zLjYsMy40IEggNzQuMSBjIC0xLjgsMCAtMy4zLC0xLjYgLTMuNCwtMy40IGggLTEuOSBjIC0wLDEuOCAtMS44LDMuNCAtMy44LDMuNCB2IDEuNSBsIDAsMCB6IG0gMCwtMTMuNSB2IDEuNSBjIDIuMywwIDMuNiwtMC45IDQuNSwtMi4yIDEuNCwxIDEuOCwyLjIgNC41LDIuMiBoIDAuNiBjIDMuMSwwIDMuNSwtMiA0LjUsLTIuMiAwLjQsMS4zIDIuNCwyLjIgNC4xLDIuMiBoIDAuNiBjIDEuNywwIDMuOCwtMSA0LjEsLTIuMiAxLjEsMC4zIDEuMiwyLjIgNC45LDIuMiB2IC0xLjUgYyAtMiwwIC0zLjgsLTEuNCAtMy44LC0zLjQgaCAtMS45IHYgMC44IGMgMCwxLjIgLTEuOSwyLjYgLTMuNCwyLjYgaCAtMC4yIGMgLTIsMCAtMy43LC0xLjQgLTMuOCwtMy40IGggLTEuOCBjIC0wLDEuNiAtMS43LDMuNCAtMy42LDMuNCBIIDc0LjEgYyAtMiwwIC0zLjIsLTEuNSAtMy40LC0zLjQgaCAtMS45IGMgLTAuMiwxLjggLTEuNywzLjQgLTMuOCwzLjQgbCAwLDAgeiBtIDAsLTEyIHYgMS41IGMgMywwIDMuMSwtMSA0LjcsLTIgMS4yLDAuOSAxLjcsMiA0LjEsMiBoIDAuNiBjIDIuOSwwIDIuOSwtMSA0LjUsLTIgMS40LDAuOSAxLjYsMiA0LjMsMiBoIDAuNiBjIDIuNywwIDIuOSwtMS4xIDQuMywtMiAxLjYsMS4xIDEuNiwyIDQuNywyIHYgLTEuNSBjIC0yLDAgLTMuOCwtMS40IC0zLjgsLTMuNCBoIC0xLjkgdiAwLjggYyAwLDEuMiAtMS45LDIuNiAtMy40LDIuNiBoIC0wLjIgYyAtMiwwIC0zLjcsLTEuNCAtMy44LC0zLjQgaCAtMS44IGMgLTAsMS43IC0xLjcsMy40IC0zLjYsMy40IEggNzQuMSBjIC0yLDAgLTMuMiwtMS41IC0zLjQsLTMuNCBoIC0xLjkgYyAtMC4yLDEuOCAtMS43LDMuNCAtMy44LDMuNCBsIDAsMCB6IG0gNDIuMSwyNS40IHYgLTEuNSBjIDIuMiwwIDMuNCwtMS40IDMuNiwtMy40IGggMS4zIGMgMSwwIDAuOCwzLjQgNC4xLDMuNCBoIDAuNCBjIDIuMiwwIDIuNCwtMS40IDMuMywtMi4xIGwgMC4yLC0xLjMgaCAxLjcgYyAwLjIsMiAxLjYsMy40IDMuOCwzLjQgaCAwLjQgYyAxLjgsMCAzLjUsLTEuNiAzLjYsLTMuNCBoIDEuNSBjIDAuNCwxLjggMS43LDMuNCAzLjksMy40IHYgMS41IGMgLTEuOSwwIC00LjEsLTEgLTQuNSwtMi40IC0xLjUsMSAtMS44LDIuNSAtNC41LDIuNSBoIC0wLjQgYyAtMiwwIC00LjEsLTEgLTQuNSwtMi40IGggLTAuNCBjIC0wLjQsMS4zIC0yLjMsMi40IC00LjEsMi40IGggLTAuNCBjIC0yLjksMCAtMy4xLC0xLjQgLTQuNywtMi40IC0wLjQsMS40IC0yLjQsMi40IC00LjMsMi40IHogbSAzLjYsLTE2LjggaCAxLjkgYyAwLDEuOCAxLjYsMy40IDMuNSwzLjQgaCAwLjQgYyAxLjgsMCAzLjUsLTEuNiAzLjYsLTMuNCBoIDEuOSB2IDAuOSBjIDAsMSAyLDIuNCAzLjQsMi40IGggMC42IGMgMS45LDAgMy40LC0xLjYgMy42LC0zLjQgaCAxLjcgdiAwLjYgYyAwLDEuMiAyLDIuOCAzLjgsMi44IHYgMS41IGMgLTMuMSwwIC0zLjIsLTEuMiAtNC43LC0yLjIgLTEuMywwLjkgLTEuNywyLjIgLTQuNCwyLjIgaCAtMC43IGMgLTIuNiwwIC0zLC0xLjMgLTQuMywtMi4yIC0xLjMsMSAtMS40LDIuMiAtNC4zLDIuMiBoIC0wLjIgYyAtMS44LDAgLTQuMiwtMSAtNC41LC0yLjIgLTEuMiwwLjMgLTEuMiwyLjIgLTQuNywyLjIgdiAtMS41IGMgMS44LDAgMy42LC0xLjQgMy42LC0yLjggdiAtMC42IGwgMCwwIHogbSAwLC0xMiBoIDEuOSBjIDAsMS45IDEuNiwzLjQgMy41LDMuNCBoIDAuNCBjIDEuOCwwIDMuNSwtMS42IDMuNiwtMy40IGggMS45IHYgMC42IGMgMCwxLjQgMS44LDIuOCAzLjQsMi44IGggMC42IGMgMS45LDAgMy40LC0xLjYgMy42LC0zLjQgaCAxLjcgdiAwLjYgYyAwLDEuMiAyLDIuOCAzLjgsMi44IHYgMS41IGMgLTEuOCwwIC00LjIsLTEgLTQuNSwtMi4yIC0xLjUsMSAtMS44LDIuMiAtNC42LDIuMiBoIC0wLjcgYyAtMS43LDAgLTMuOCwtMSAtNC4xLC0yLjIgLTEuNCwwLjkgLTEuNywyLjIgLTQuMywyLjIgaCAtMC40IGMgLTMuMSwwIC0zLjIsLTEuMiAtNC45LC0yLjIgLTAuNCwxLjMgLTIuNSwyLjIgLTQuMywyLjIgdiAtMS41IGMgMS44LDAgMy42LC0xLjQgMy42LC0yLjggdiAtMC42IHogbSAtNS44LDMyLjYgaCAzMiBWIDgxLjUgaCAtMzIgdiAzNyB6IG0gLTEuNywtMTEuOCAwLC0xMy4zIC02LjgsMCAwLDEzLjMgelwifV0saVtcIkdSLklOLklDLlRSQU5TUE9SVEFUSU9OIElORlJBU1RSVUNUVVJFLlRSQUZGSUMgQ09OVFJPTCBQT0lOVFwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDg1LjUsODEuMyAwLjUsMC43IDEzLjcsMTguMiAwLjMsMC41IDAuMywtMC41IDEzLjcsLTE4LjIgMC41LC0wLjcgLTAuOSwwIC0yNy40LDAgLTAuOSwwIHogbSAxLjcsMC45IDI1LjcsMCBMIDEwMCw5OS4zIDg3LjIsODIuMiB6IE0gMTA2LjcsNTAuNyBjIDAsMC4yIC0wLDAuNSAtMC4xLDAuNyAtMC4xLDAuMiAtMC4yLDAuNCAtMC40LDAuNSAtMC4yLDAuMiAtMC40LDAuMyAtMC43LDAuNCAtMC4zLDAuMSAtMC42LDAuMSAtMSwwLjEgbCAtMC43LDAgMCwyLjEgLTAuNywwIDAsLTUuNiAxLjUsMCBjIDAuMyw1ZS02IDAuNiwwIDAuOSwwLjEgMC4yLDAuMSAwLjQsMC4xIDAuNiwwLjMgMC4yLDAuMSAwLjQsMC4zIDAuNSwwLjUgMC4xLDAuMiAwLjIsMC41IDAuMiwwLjggbSAtMC44LDAgYyAtMWUtNSwtMC4yIC0wLC0wLjQgLTAuMSwtMC41IC0wLjEsLTAuMSAtMC4yLC0wLjMgLTAuMywtMC4zIC0wLjEsLTAuMSAtMC4zLC0wLjEgLTAuNCwtMC4yIC0wLjIsLTAgLTAuMywtMC4xIC0wLjYsLTAuMSBsIC0wLjcsMCAwLDIuMiAwLjYsMCBjIDAuMywzZS02IDAuNSwtMCAwLjcsLTAuMSAwLjIsLTAuMSAwLjMsLTAuMSAwLjUsLTAuMyAwLjEsLTAuMSAwLjIsLTAuMiAwLjIsLTAuNCAwLjEsLTAuMSAwLjEsLTAuMyAwLjEsLTAuNCBtIC0zLjksMy41IGMgLTAuMSwwLjEgLTAuMywwLjEgLTAuNCwwLjIgLTAuMSwwLjEgLTAuMywwLjEgLTAuNCwwLjIgLTAuMiwwIC0wLjMsMC4xIC0wLjUsMC4xIC0wLjIsMCAtMC40LDAuMSAtMC42LDAuMSAtMC40LDAgLTAuOCwtMC4xIC0xLjEsLTAuMiAtMC4zLC0wLjEgLTAuNiwtMC4zIC0wLjksLTAuNSAtMC4yLC0wLjIgLTAuNCwtMC41IC0wLjYsLTAuOSAtMC4xLC0wLjQgLTAuMiwtMC44IC0wLjIsLTEuMyAwLC0wLjUgMC4xLC0wLjkgMC4yLC0xLjIgMC4xLC0wLjQgMC4zLC0wLjcgMC42LC0wLjkgMC4yLC0wLjIgMC41LC0wLjQgMC45LC0wLjYgMC4zLC0wLjEgMC43LC0wLjIgMS4xLC0wLjIgMC4zLDZlLTYgMC42LDAgMC45LDAuMSAwLjMsMC4xIDAuNiwwLjIgMSwwLjQgbCAwLDAuOSAtMC4xLDAgYyAtMC4zLC0wLjMgLTAuNiwtMC40IC0wLjksLTAuNiAtMC4zLC0wLjEgLTAuNiwtMC4yIC0xLC0wLjIgLTAuMyw1ZS02IC0wLjUsMCAtMC44LDAuMSAtMC4yLDAuMSAtMC40LDAuMiAtMC42LDAuNCAtMC4yLDAuMiAtMC4zLDAuNCAtMC40LDAuNyAtMC4xLDAuMyAtMC4xLDAuNiAtMC4xLDEgLTEwZS03LDAuNCAwLjEsMC43IDAuMiwxIDAuMSwwLjMgMC4yLDAuNSAwLjQsMC43IDAuMiwwLjIgMC40LDAuMyAwLjYsMC40IDAuMiwwLjEgMC41LDAuMSAwLjcsMC4xIDAuNCwxMGUtNyAwLjcsLTAuMSAxLC0wLjIgMC4zLC0wLjEgMC42LC0wLjMgMC45LC0wLjYgbCAwLjEsMCAwLDAuOSBtIC01LjEsLTQuNSAtMiwwIDAsNC45IC0wLjcsMCAwLC00LjkgLTIsMCAwLC0wLjcgNC43LDAgMCwwLjcgTSA4NS45LDQ0LjYgbCAwLDAuNCAwLDM2LjUgMCwwLjQgMC40LDAgMjcuNCwwIDAuNCwwIDAsLTAuNCAwLC0zNi41IDAsLTAuNCAtMC40LDAgLTI3LjQsMCAtMC40LDAgeiBtIDAuOSwwLjkgMjYuNSwwIDAsMzUuNiAtMjYuNSwwIDAsLTM1LjYgelwifV0saVtcIkFDLk0xLlJJT1RcIl09bChcIlJJT1RcIiksaVtcIkFDLk0xLlRIUkVBVFwiXT1sKFwiP1wiKSxpW1wiQUMuTTEuRU1FUkdFTkNZIENPTExFQ1RJT04gRVZBQ1VBVElPTiBQT0lOVFwiXT1sKFwiRUNFUFwiKSxpW1wiQUMuTTEuRU1FUkdFTkNZIElOQ0lERU5UIENPTU1BTkQgQ0VOVEVSXCJdPWwoXCJFSUNDXCIpLGlbXCJBQy5NMS5FTUVSR0VOQ1kgT1BFUkFUSU9OUyBDRU5URVJcIl09bChcIkVPQ1wiKSxpW1wiQUMuTTEuRU1FUkdFTkNZIFNIRUxURVJcIl09bChcIkVTXCIpLGlbXCJBQy5NMS5FTUVSR0VOQ1kgU1RBR0lORyBBUkVBXCJdPWwoXCJTQVwiKSxpW1wiQUMuTTEuRU1FUkdFTkNZXCJdPWwoXCJFTUVSXCIpLGlbXCJBQy5NMS5DT01NRVJDSUFMXCJdPWwoXCJDT01cIiksaVtcIkFDLk0xLlBST0RVQ1RJT05cIl09bChcIlBST0RcIiksaVtcIkFDLk0xLlJFVEFJTFwiXT1sKFwiUlRMXCIpLGlbXCJBQy5NMS5NSUxJVEFSWSBBUk1PUllcIl09bChcIlJFU1wiKSxpW1wiQUMuTTEuR0VORVJBVElPTiBTVEFUSU9OXCJdPWwoXCJHRU5cIiksaVtcIkdSLkkuRkYuQ0lWSUxJQU4gUk9UQVJZIFdJTkdcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTpvLGQ6XCJNODAsNzAgbDEwLDEwIE0xMjAsMTEwIGwtMTAsLTEwIE04MCwxMTAgbDEwLC0xMCBNMTIwLDcwIGwtMTAsMTAgTTEwMCwxMTUgbDAsMjAgTTk1LDEzNSBsMTAsMFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLHN0cm9rZTpvLGZpbGw6ISFSJiZHLGQ6XCJtIDExMyw5MCBjIC0wLjMsOC44IC0xLjksMjAuMyAtMTAuOCwyNC42IC03LjcsMiAtMTIuMywtNy4xIC0xMy44LC0xMy4zIC0yLjYsLTExLjUgLTIuMywtMjYgNi45LC0zNC42IDYuMCwtNC45IDEzLjEsMS45IDE0LjksNy44IDIsNC45IDIuOCwxMC4yIDIuOCwxNS41IHpcIn1dLGlbXCJHUi5JQy5IT1NQSVRBTCBTSElQXCJdPWEoXCJBSFwiKSxpW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDpSP0c6IUMmJkcsZDpcIm0gNzUsMTAwIDAsLTM1IDUwLDAgMCwzNSAyMCwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTM1LDEwMCAtMTUsMzUgLTEwLDAgMTUsLTM1IHpcIn1dLGlbXCJDWS5JQy5DT01CQVQgTUlTU0lPTiBURUFNXCJdPWEoXCJDTVRcIiksaVtcIkNZLklDLk5BVElPTkFMIE1JU1NJT04gVEVBTVwiXT1hKFwiTk1UXCIpLGlbXCJDWS5JQy5DWUJFUiBQUk9URUNUSU9OIFRFQU1cIl09YShcIkNQVFwiKSxpW1wiQ1kuSUMuTkFUSU9OIFNUQVRFIENZQkVSIFRIUkVBVCBBQ1RPUlwiXT1hKFwiQ1RBXCIpLGlbXCJDWS5JQy5OT04gTkFUSU9OIFNUQVRFIENZQkVSIFRIUkVBVCBBQ1RPUlwiXT1hKFwiQ1RBXCIpLGlbXCJDWS5JQy5OT04gTkFUSU9OIFNUQVRFIENZQkVSIFRIUkVBVCBBQ1RPUlwiXS5maWxsPVJ8fE4/RzohQyYmRyxpW1wiQ1kuSUMuTk9OIE5BVElPTiBTVEFURSBDWUJFUiBUSFJFQVQgQUNUT1JcIl0uc3Ryb2tlPW8saVtcIkNZLklDLk5PTiBOQVRJT04gU1RBVEUgQ1lCRVIgVEhSRUFUIEFDVE9SXCJdLnN0cm9rZXdpZHRoPTMsaSlpLmhhc093blByb3BlcnR5KEwpJiYoSS5oYXNPd25Qcm9wZXJ0eShMKSYmY29uc29sZS53YXJuKFwiT3ZlcnJpZGUgb2Y6IFwiK0wpLG4uY2FsbCh0aGlzLGlbTF0sTyksSVtMXT1pW0xdKX12YXIgaD17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2NdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLUctLS0tLS0tXCJdPVtdLElbXCJTLUctVS0tLS0tXCJdPVtdLElbXCJTLUctVUMtLS0tXCJdPVtFW1wiR1IuSUMuQ09NQkFUXCJdXSxJW1wiUy1HLVVDRC0tLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdXSxJW1wiUy1HLVVDRFMtLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBTSE9SVCBSQU5HRVwiXV0sSVtcIlMtRy1VQ0RTQy1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgQ0hBUEFSUkFMXCJdXSxJW1wiUy1HLVVDRFNTLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBTVElOR0VSXCJdXSxJW1wiUy1HLVVDRFNWLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5GRi5NQUlOIEdVTiBTWVNURU1cIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIFZVTENBTlwiXV0sSVtcIlMtRy1VQ0RNLS1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXV0sSVtcIlMtRy1VQ0RNTC1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXSxFW1wiR1IuSUMuTUlTU0lMRS5MSUdIVFwiXV0sSVtcIlMtRy1VQ0RNTEFcIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVDRE1NLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBNSVNTSUxFXCJdLEVbXCJHUi5JQy5NSVNTSUxFLk1FRElVTVwiXV0sSVtcIlMtRy1VQ0RNSC1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXSxFW1wiR1IuSUMuTUlTU0lMRS5IRUFWWVwiXV0sSVtcIlMtRy1VQ0RILS1cIl09W0VbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxFW1wiR1IuSUMuQUlSIERFRkVOU0UgSC9NQURcIl1dLElbXCJTLUctVUNESEgtXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIE1JU1NJTEVcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIEgvTUFEIEhBV0tcIl1dLElbXCJTLUctVUNESFAtXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIE1JU1NJTEVcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIEgvTUFEIFBBVFJJT1RcIl1dLElbXCJTLUctVUNERy0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIEdVTiBVTklUXCJdXSxJW1wiUy1HLVVDREMtLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBDT01QT1NJVEVcIl1dLElbXCJTLUctVUNEVC0tXCJdPVtFW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sRVtcIkdSLklDLkFJUiBERUZFTlNFIFRBUkdFVElORyBVTklUXCJdXSxJW1wiUy1HLVVDRE8tLVwiXT1bRVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdLEVbXCJHUi5JQy5BSVIgREVGRU5TRSBUSEVBVEVSIE1JU1NJTEUgREVGRU5TRSBVTklUXCJdXSxJW1wiUy1HLVVDQS0tLVwiXT1bRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0FULS1cIl09W0VbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNBVEEtXCJdPVtFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ0FUVy1cIl09W0VbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbXCJTLUctVUNBVFdSXCJdPVtFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdLEVbXCJHUi5NMi5SRUNPVkVSWSAoTUFJTlRFTkFOQ0UpXCJdXSxJW1wiUy1HLVVDQVRMLVwiXT1bRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNBVE0tXCJdPVtFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5NRURJVU1cIl1dLElbXCJTLUctVUNBVEgtXCJdPVtFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5IRUFWWVwiXV0sSVtcIlMtRy1VQ0FUUi1cIl09W0VbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLlJFQ09WRVJZIChNQUlOVEVOQU5DRSlcIl1dLElbXCJTLUctVUNBVy0tXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl1dLElbXCJTLUctVUNBV1MtXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0FXQS1cIl09W0VbXCJHUi5JQy5BUk1PUiwgV0hFRUxFRFwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUctVUNBV1ctXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbXCJTLUctVUNBV1dSXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl0sRVtcIkdSLk0yLlJFQ09WRVJZIChNQUlOVEVOQU5DRSlcIl1dLElbXCJTLUctVUNBV0wtXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDQVdNLVwiXT1bRVtcIkdSLklDLkFSTU9SLCBXSEVFTEVEXCJdLEVbXCJHUi5NMi5NRURJVU1cIl1dLElbXCJTLUctVUNBV0gtXCJdPVtFW1wiR1IuSUMuQVJNT1IsIFdIRUVMRURcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVDQVdSLVwiXT1bRVtcIkdSLklDLkFSTU9SLCBXSEVFTEVEXCJdLEVbXCJHUi5NMi5SRUNPVkVSWSAoTUFJTlRFTkFOQ0UpXCJdXSxJW1wiUy1HLVVDQUEtLVwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl1dLElbXCJTLUctVUNBQUQtXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXV0sSVtcIlMtRy1VQ0FBTC1cIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5NMi5MSUdIVFwiXV0sSVtcIlMtRy1VQ0FBTS1cIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ0FBUy1cIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl1dLElbXCJTLUctVUNBQVUtXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxFW1wiR1IuTTIuTU9VTlRBSU5cIl1dLElbXCJTLUctVUNBQUMtXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxFW1wiR1IuTTIuQVJDVElDXCJdXSxJW1wiUy1HLVVDQUFBLVwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0FBQVRcIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNBQUFXXCJdPVtFW1wiR1IuSUMuRkYuQU5USVRBTksvQU5USUFSTU9VUlwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5XSEVFTEVEXCJdXSxJW1wiUy1HLVVDQUFBU1wiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDQUFPLVwiXT1bRVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVtcIlMtRy1VQ0FBT1NcIl09W0VbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ1YtLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXV0sSVtcIlMtRy1VQ1ZGLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdXSxJW1wiUy1HLVVDVkZVLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIEZJWEVEIFdJTkdcIl0sRVtcIkdSLk0xLlVUSUxJVFlcIl1dLElbXCJTLUctVUNWRkEtXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXSxFW1wiR1IuTTEuQVRUQUNLXCJdXSxJW1wiUy1HLVVDVlVUUFwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFRBQ1RJQ0FMIEFJUiBDT05UUk9MIFBBUlRZXCJdXSxJW1wiUy1HLVVDVlVGQ1wiXT1bRVtcIkdSLklDLkFWSUFUSU9OIEZPUldBUkQgQUlSIENPTlRST0xMRVJcIl1dLElbXCJTLUctVUNWRlItXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXSxFW1wiR1IuTTEuUkVDT05cIl1dLElbXCJTLUctVUNWUi0tXCJdPVI/W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkcgMjUyNUNcIl1dOltFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl1dLElbXCJTLUctVUNWUkEtXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLkFUVEFDS1wiXV0sSVtcIlMtRy1VQ1ZSUy1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuUkVDT05cIl1dLElbXCJTLUctVUNWUlctXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sSVtcIlMtRy1VQ1ZSVS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuVVRJTElUWVwiXV0sSVtcIlMtRy1VQ1ZSVUxcIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuVVRJTElUWVwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNWUlVNXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLlVUSUxJVFlcIl0sRVtcIkdSLk0yLk1FRElVTVwiXV0sSVtcIlMtRy1VQ1ZSVUhcIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiR1IuTTEuVVRJTElUWVwiXSxFW1wiR1IuTTIuSEVBVllcIl1dLElbXCJTLUctVUNWUlVDXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLkNPTU1BTkQgQU5EIENPTlRST0wgUk9UQVJZIFdJTkdcIl1dLElbXCJTLUctVUNWUlVFXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLk1FREVWQUNcIl1dLElbXCJTLUctVUNWUk0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVcIl1dLElbXCJTLUctVUNWUy0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLlBFUlNPTk5FTCBSRUNPVkVSWVwiXV0sSVtcIlMtRy1VQ1ZDLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBDT01QT1NJVEVcIl1dLElbXCJTLUctVUNWVi0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXSxFW1wiR1IuTTIuVkVSVElDQUwgT1IgU0hPUlQgVEFLRS1PRkYgQU5EIExBTkRJTkcgXCJdXSxJW1wiUy1HLVVDVlUtLVwiXT1bRVtcIkdSLklDLlVOTUFOTkVEIFNZU1RFTVNcIl1dLElbXCJTLUctVUNWVUYtXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXSxFW1wiR1IuTTEuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl1dLElbXCJTLUctVUNWVVItXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdXSxJW1wiUy1HLVVDSS0tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdXSxJW1wiUy1HLVVDSUwtLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5NMi5MSUdIVFwiXV0sSVtcIlMtRy1VQ0lNLS1cIl09W0VbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVDSU8tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ0lBLS1cIl09W0VbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUctVUNJUy0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0laLS1cIl09W0VbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDSU4tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5JQy5GRi5OQVZBTFwiXV0sSVtcIlMtRy1VQ0lJLS1cIl09W0VbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5JQy5GRi5NQUlOIEdVTiBTWVNURU1cIl1dLElbXCJTLUctVUNJQy0tXCJdPVtFW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sRVtcIkdSLk0yLkFSQ1RJQ1wiXV0sSVtcIlMtRy1VQ0UtLS1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXV0sSVtcIlMtRy1VQ0VDLS1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXSxFW1wiR1IuTTEuQ09NQkFUXCJdXSxJW1wiUy1HLVVDRUNTLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl1dLElbXCJTLUctVUNFQ0EtXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDRUNDLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5NMi5BUkNUSUNcIl1dLElbXCJTLUctVUNFQ0wtXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0xLkNPTUJBVFwiXSxFW1wiR1IuTTIuTElHSFRcIl1dLElbXCJTLUctVUNFQ00tXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0xLkNPTUJBVFwiXSxFW1wiR1IuTTIuTUVESVVNXCJdXSxJW1wiUy1HLVVDRUNILVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5NMS5DT01CQVRcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVDRUNULVwiXT1bcy5fc2NhbGUoLjcsRVtcIkdSLklDLkVOR0lORUVSXCJdKSxFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDRUNXLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbXCJTLUctVUNFQ08tXCJdPVtFW1wiR1IuSUMuRU5HSU5FRVJcIl0sRVtcIkdSLk0yLk1PVU5UQUlOXCJdXSxJW1wiUy1HLVVDRUNSLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVtcIlMtRy1VQ0VOLS1cIl09W0VbXCJHUi5JQy5FTkdJTkVFUlwiXSxFW1wiR1IuTTEuQ09OU1RSVUNUSU9OXCJdXSxJW1wiUy1HLVVDRU5OLVwiXT1bRVtcIkdSLklDLkVOR0lORUVSXCJdLEVbXCJHUi5NMS5OQVZBTFwiXV0sSVtcIlMtRy1VQ0YtLS1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl1dLElbXCJTLUctVUNGSC0tXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdXSxJW1wiUy1HLVVDRkhFLVwiXT1bcy5fc2NhbGUoLjgsRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSksRVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0ZIUy1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0ZIQS1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDRkhDLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTIuQVJDVElDXCJdXSxJW1wiUy1HLVVDRkhPLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTIuTU9VTlRBSU5cIl1dLElbXCJTLUctVUNGSEwtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMi5MSUdIVFwiXV0sSVtcIlMtRy1VQ0ZITS1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0yLk1FRElVTVwiXV0sSVtcIlMtRy1VQ0ZISC1cIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVDRkhYLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXV0sSVtcIlMtRy1VQ0ZSLS1cIl09W0VbXCJHUi5JQy5GRi5GSUVMRCBBUlRJTExFUlkgUk9DS0VUXCJdXSxJW1wiUy1HLVVDRlJTLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1VQ0ZSUy1cIl09W3MuX3NjYWxlKC44LEVbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pLEVbXCJHUi5NMS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdLFI/W106RVtcIkdSLklDLkFSTU9VUlwiXV0sSVtcIlMtRy1VQ0ZSU1NcIl09W3MuX3NjYWxlKC44LEVbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pLEVbXCJHUi5NMS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNGUlNSXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5NMi5UUlVDS1wiXV0sSVtcIlMtRy1VQ0ZSU1RcIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0xLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLk0yLlRPV0VEXCJdXSxJW1wiUy1HLVVDRlJNLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLFI/XCJcIjpFW1wiR1IuTTIuQ1JPU1MtQ09VTlRSWSBUUlVDS1wiXV0sSVtcIlMtRy1VQ0ZSTVNcIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0xLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdXSxJW1wiUy1HLVVDRlJNUlwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5NMi5UUlVDS1wiXV0sSVtcIlMtRy1VQ0ZSTVRcIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLk0xLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxFW1wiR1IuTTIuVE9XRURcIl1dLElbXCJTLUctVUNGVC0tXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5NMi5UQVJHRVQgQUNRVUlTSVRJT05cIl1dLElbXCJTLUctVUNGVFItXCJdPVtzLl90cmFuc2xhdGUoLTMwLDEwLHMuX3NjYWxlKC42LEVbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pKSxFW1wiR1IuSUMuUkFEQVJcIl1dLElbXCJTLUctVUNGVFMtXCJdPVtzLl90cmFuc2xhdGUoMCwzMCxzLl9zY2FsZSguNyxFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdKSksRVtcIkdSLklDLkZGLlNPVU5EXCJdXSxJW1wiUy1HLVVDRlRGLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuTTEuT1BUSUNBTFwiXSxFW1wiR1IuTTIuVEFSR0VUIEFDUVVJU0lUSU9OXCJdXSxJW1wiUy1HLVVDRlRDLVwiXT1bRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdLEVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVtcIlMtRy1VQ0ZUQ0RcIl09W0VbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1HLVVDRlRDTVwiXT1bcy5fc2NhbGUoLjgsRVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXSksRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNGVEEtXCJdPVtFW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdLEVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkdSLk0xLk5BVkFMXCJdXSxJW1wiUy1HLVVDRk0tLVwiXT1bRVtcIkdSLklDLk1PUlRBUlwiXV0sSVtcIlMtRy1VQ0ZNUy1cIl09W0VbXCJHUi5JQy5NT1JUQVJcIl0sRVtcIkdSLk0yLlRSQUNLRURcIl1dLElbXCJTLUctVUNGTVctXCJdPUlbXCJTLUctVUNGTVNXXCJdPVtFW1wiR1IuSUMuTU9SVEFSXCJdLEVbXCJHUi5NMi5UUlVDS1wiXV0sSVtcIlMtRy1VQ0ZNVC1cIl09W0VbXCJHUi5JQy5NT1JUQVJcIl0sRVtcIkdSLk0yLlRPV0VEXCJdXSxJW1wiUy1HLVVDRk1UQVwiXT1bRVtcIkdSLklDLk1PUlRBUlwiXSxFW1wiR1IuTTIuVE9XRURcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1HLVVDRk1UU1wiXT1bRVtcIkdSLklDLk1PUlRBUlwiXSxFW1wiR1IuTTIuVE9XRURcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0ZNVENcIl09W0VbXCJHUi5JQy5NT1JUQVJcIl0sRVtcIkdSLk0yLkFSQ1RJQ1wiXV0sSVtcIlMtRy1VQ0ZNVE9cIl09W0VbXCJHUi5JQy5NT1JUQVJcIl0sRVtcIkdSLk0yLlRPV0VEXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ0ZNTC1cIl09W3MuX3RyYW5zbGF0ZSgwLC0yMCxFW1wiR1IuSUMuTU9SVEFSXCJdKSxFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXV0sSVtcIlMtRy1VQ0ZTLS1cIl09W0VbXCJHUi5JQy5TVVJWRVlcIl1dLElbXCJTLUctVUNGU1MtXCJdPVtFW1wiR1IuSUMuU1VSVkVZXCJdLEVbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl1dLElbXCJTLUctVUNGU0EtXCJdPVtFW1wiR1IuSUMuU1VSVkVZXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ0ZTTC1cIl09W0VbXCJHUi5JQy5TVVJWRVlcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDRlNPLVwiXT1bRVtcIkdSLklDLlNVUlZFWVwiXSxFW1wiR1IuTTIuTU9VTlRBSU5cIl1dLElbXCJTLUctVUNGTy0tXCJdPVtFW1wiR1IuSUMuTUVURU9ST0xPR0lDQUxcIl1dLElbXCJTLUctVUNGT1MtXCJdPVtFW1wiR1IuSUMuTUVURU9ST0xPR0lDQUxcIl0sRVtcIkdSLk0xLkFJUk1PQklMRS9BSVIgQVNTQVVMVFwiXV0sSVtcIlMtRy1VQ0ZPQS1cIl09W0VbXCJHUi5JQy5NRVRFT1JPTE9HSUNBTFwiXSxFW1wiR1IuTTIuQUlSQk9STkVcIl1dLElbXCJTLUctVUNGT0wtXCJdPVtFW1wiR1IuSUMuTUVURU9ST0xPR0lDQUxcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDRk9PLVwiXT1bRVtcIkdSLklDLk1FVEVPUk9MT0dJQ0FMXCJdLEVbXCJHUi5NMi5NT1VOVEFJTlwiXV0sSVtcIlMtRy1VQ1ItLS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVtcIlMtRy1VQ1JILS1cIl09W0VbXCJHUi5JQy5GRi5IT1JTRVwiXV0sSVtcIlMtRy1VQ1JWLS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxSP0VbXCJHUi5NMi5DQVZBTFJZXCJdOltdXSxJW1wiUy1HLVVDUlZBLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNSVk0tXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVtcIlMtRy1VQ1JWRy1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVtcIlMtRy1VQ1JWTy1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl1dLElbXCJTLUctVUNSQy0tXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLk0yLkFSQ1RJQ1wiXV0sSVtcIlMtRy1VQ1JTLS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuTTEuQUlSTU9CSUxFL0FJUiBBU1NBVUxUXCJdXSxJW1wiUy1HLVVDUkEtLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VQ1JPLS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuTTIuTU9VTlRBSU5cIl1dLElbXCJTLUctVUNSTC0tXCJdPUlbXCJTLUctVUNSTEwtXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLk0yLkxJR0hUXCJdXSxJW1wiUy1HLVVDUlItLVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdXSxJW1wiUy1HLVVDUlJELVwiXT1bRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdLFI/RVtcIkdSLk0xLk1BUklORSBESVZJU0lPTlwiXTpbXV0sSVtcIlMtRy1VQ1JSRi1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuRkYuQU1QSElCSU9VU1wiXSxFW1wiR1IuTTEuRk9SQ0VcIl1dLElbXCJTLUctVUNSUkwtXCJdPVtFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTIuV0hFRUxFRFwiXV0sSVtcIlMtRy1VQ1JYLS1cIl09W0VbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxSP0VbXCJHUi5NMi5MT05HIFJBTkdFIFNVUlZFSUxMQU5DRVwiXTpbcy5fdHJhbnNsYXRlKDAsLTIwLEVbXCJHUi5NMi5NT1VOVEFJTlwiXSksRVtcIkdSLk0yLkxPTkcgUkFOR0VcIl1dXSxJW1wiUy1HLVVDTS0tLVwiXT1bRVtcIkdSLklDLk1JU1NJTEVcIl1dLElbXCJTLUctVUNNVC0tXCJdPVtFW1wiR1IuSUMuTUlTU0lMRVwiXSxFW1wiR1IuTTIuVEFDVElDQUwgTUlTU0lMRVwiXV0sSVtcIlMtRy1VQ01TLS1cIl09W0VbXCJHUi5JQy5NSVNTSUxFXCJdLEVbXCJHUi5NMi5TVFJBVEVHSUMgTUlTU0lMRVwiXV0sSVtcIlMtRy1VQ1MtLS1cIl09W0VbXCJHUi5JQy5TRUNVUklUWVwiXV0sSVtcIlMtRy1VQ1NXLS1cIl09W3MuX3RyYW5zbGF0ZSgwLC0yMCxFW1wiR1IuSUMuU0VDVVJJVFlcIl0pLEVbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdXSxJW1wiUy1HLVVDU0ctLVwiXT1bRVtcIkdSLklDLlNFQ1VSSVRZXCJdXSxJW1wiUy1HLVVDU0dELVwiXT1bRVtcIkdSLklDLlNFQ1VSSVRZXCJdLEVbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXV0sSVtcIlMtRy1VQ1NHTS1cIl09W0VbXCJHUi5JQy5TRUNVUklUWVwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVDU0dBLVwiXT1bRVtcIkdSLklDLlNFQ1VSSVRZXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVUNTTS0tXCJdPVtFW1wiR1IuSUMuU0VDVVJJVFlcIl0sRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTIuV0hFRUxFRFwiXV0sSVtcIlMtRy1VQ1NSLS1cIl09W0VbXCJHUi5JQy5TRUNVUklUWVwiXSxFW1wiR1IuTTIuUkFJTFJPQURcIl1dLElbXCJTLUctVUNTQS0tXCJdPVtzLl90cmFuc2xhdGUoMCwtMjAsRVtcIkdSLklDLlNFQ1VSSVRZXCJdKSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl1dLElbXCJTLUctRi1TLS0tXCJdPUVbXCJHUi5JQy5TVVJWRUlMTEFOQ0VcIl0sSVtcIlMtRy1VVS0tLS1cIl09W0VbXCJHUi5JQy5DT01CQVQgU1VQUE9SVFwiXV0sSVtcIlMtRy1VVUEtLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdXSxJW1wiUy1HLVVVQUMtLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkNIRU1JQ0FMXCJdXSxJW1wiUy1HLVVVQUNDLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLlNNT0tFL0RFQ09OXCJdXSxJW1wiUy1HLVVVQUNDS1wiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLlNNT0tFL0RFQ09OXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVVVBQ0NNXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuU01PS0UvREVDT05cIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVtcIlMtRy1VVUFDUy1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5TTU9LRVwiXV0sSVtcIlMtRy1VVUFDU01cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5TTU9LRVwiXSxFW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJW1wiUy1HLVVVQUNTQVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLlNNT0tFXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl1dLElbXCJTLUctVVVBQ1ItXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuQ0hFTUlDQUxcIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJW1wiUy1HLVVVQUNSV1wiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEVbXCJHUi5JQy5BUk1PVVJcIl0sRVtcIkdSLk0yLldIRUVMRURcIl1dLElbXCJTLUctVVVBQ1JTXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLklDLkFSTU9VUlwiXSxFW1wiR1IuTTIuV0hFRUxFRFwiXSxSP0VbXCJHUi5NMS5DSEVNSUNBTCBTVVJWRUlMTEFOQ0VcIl06W11dLElbXCJTLUctVVVBTi0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuTlVDTEVBUlwiXV0sSVtcIlMtRy1VVUFCLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5CSU9MT0dJQ0FMXCJdXSxJW1wiUy1HLVVVQUJSLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkJJT0xPR0lDQUxcIl0sRVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXSxFW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbXCJTLUctVVVBRC0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuREVDT05UQU1JTkFUSU9OXCJdXSxJW1wiUy1HLVVVQURULVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkRFQ09OVEFNSU5BVElPTlwiXSxFW1wiR1IuTTIuVFJPT1BcIl1dLElbXCJTLUctVVVBREUtXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuREVDT05UQU1JTkFUSU9OXCJdLEVbXCJHUi5NMi5FUVVJUE1FTlRcIl1dLElbXCJTLUctVVVBREVUXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXSxFW1wiR1IuTTEuREVDT05UQU1JTkFUSU9OXCJdLEVbXCJHUi5NMi5FUVVJTUVOVC9UUk9PUFwiXV0sSVtcIlMtRy1VVUFMLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMi5MQUJPUkFUT1JZXCJdXSxJW1wiUy1HLVVVTS0tLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXV0sSVtcIlMtRy1VVU1BLS1cIl09W0VbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0sRVtcIkdSLk0xLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdXSxJW1wiUy1HLVVVTVMtLVwiXT1bcy5fdHJhbnNsYXRlKC0yNSwwLEVbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0pLEVbXCJHUi5JQy5SQURJT1wiXV0sSVtcIlMtRy1VVU1TRS1cIl09W0VbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl1dLElbXCJTLUctVVVNU0VBXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxFW1wiR1IuSUMuQVJNT1VSXCJdLEVbXCJHUi5NMi5XSEVFTEVEXCJdXSxJW1wiUy1HLVVVTVNFRFwiXT1bRVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxFW1wiR1IuSUMuRkYuRElSRUNUSU9OIEZJTkRJTkdcIl1dLElbXCJTLUctVVVNU0VJXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5JTlRFUkNFUFRcIl1dLElbXCJTLUctVVVNU0VKXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5KQU1NSU5HXCJdXSxJW1wiUy1HLVVVTVNFVFwiXT1bRVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVVTVNFQ1wiXT1bRVtcIkdSLklDLkVMRUNUUk9OSUMgV0FSRkFSRVwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VVU1DLS1cIl09W0VbXCJHUi5JQy5DT1VOVEVSLUlOVEVMTElHRU5DRVwiXV0sSVtcIlMtRy1VVU1SLS1cIl09W0VbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl1dLElbXCJTLUctVVVNUkctXCJdPVtFW1wiR1IuSUMuTUlMSVRBUlkgSU5URUxMSUdFTkNFXCJdLEVbXCJHUi5NMS5SQURBUlwiXV0sSVtcIlMtRy1VVU1SUy1cIl09W3MuX3RyYW5zbGF0ZSgwLDMwLHMuX3NjYWxlKC44LEVbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0pKSxFW1wiR1IuSUMuRkYuU0VOU09SXCJdXSxJW1wiUy1HLVVVTVJTU1wiXT1bcy5fdHJhbnNsYXRlKDAsMzAscy5fc2NhbGUoLjgsRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSkpLEVbXCJHUi5JQy5GRi5TRU5TT1JcIl0sRVtcIkdSLk0xLlNFTlNPUiBDT05UUk9MIE1PRFVMRVwiXV0sSVtcIlMtRy1VVU1SWC1cIl09W0VbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0sRVtcIkdSLk0xLkdST1VORCBTVEFUSU9OIE1PRFVMRVwiXV0sSVtcIlMtRy1VVU1NTy1cIl09W0VbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0sRVtcIkdSLk0xLk1FVEVPUk9MT0dJQ0FMXCJdXSxJW1wiUy1HLVVVTU8tLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXSxFW1wiR1IuTTEuT1BFUkFUSU9OU1wiXV0sSVtcIlMtRy1VVU1ULS1cIl09W0VbXCJHUi5JQy5NSUxJVEFSWSBJTlRFTExJR0VOQ0VcIl0sRVtcIkdSLk0xLlRBQ1RJQ0FMIEVYUExPSVRBVElPTlwiXV0sSVtcIlMtRy1VVU1RLS1cIl09W0VbXCJHUi5JQy5JTlRFUlJPR0FUSU9OXCJdXSxJW1wiUy1HLVVVTUotLVwiXT1bRVtcIkdSLklDLkpPSU5UIElOVEVMTElHRU5DRSBDRU5UUkVcIl1dLElbXCJTLUctVVVMLS0tXCJdPVtFW1wiR1IuSUMuRkYuTUlMSVRBUlkgUE9MSUNFXCJdLEVbXCJHUi5JQy5NSUxJVEFSWSBQT0xJQ0VcIl1dLElbXCJTLUctVVVMUy0tXCJdPVtFW1wiR1IuSUMuU0hPUkUgUEFUUk9MXCJdXSxJW1wiUy1HLVVVTE0tLVwiXT1bRVtcIkdSLklDLk1JTElUQVJZIFBPTElDRVwiXV0sSVtcIlMtRy1VVUxDLS1cIl09W0VbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlRcIl1dLElbXCJTLUctVVVMRi0tXCJdPVtzLl90cmFuc2xhdGUoMCwtMjUscy5fc2NhbGUoLjgsRVtcIkdSLklDLlNIT1JFIFBBVFJPTFwiXSkpLEVbXCJHUi5JQy5BVklBVElPTiBGSVhFRCBXSU5HXCJdXSxJW1wiUy1HLVVVTEQtLVwiXT1bRVtcIkdSLklDLkNSSU1JTkFMIElOVkVTVElHQVRJT04gRElWSVNJT05cIl1dLElbXCJTLUctVVVTLS0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdXSxJW1wiUy1HLVVVU0EtLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuQVJFQVwiXV0sSVtcIlMtRy1VVVNDLS1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLk0xLkNPTU1VTklDQVRJT05TIENPTlRJTkdFTkNZIFBBQ0tBR0VcIl1dLElbXCJTLUctVVVTQ0wtXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5MQVJHRSBDT01NVU5JQ0FUSU9OUyBDT05USU5HRU5DWSBQQUNLQUdFXCJdLEVbXCJHUi5NMi5BSVJCT1JORVwiXV0sSVtcIlMtRy1VVVNPLS1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLk0xLk9QRVJBVElPTlNcIl1dLElbXCJTLUctVVVTRi0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5GT1JXQVJEXCJdXSxJW1wiUy1HLVVVU00tLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuTU9CSUxFIFNVQlNDUklCRVIgRVFVSVBNRU5UXCJdXSxJW1wiUy1HLVVVU01TLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuU01BTEwgRVhURU5TSU9OIE5PREVcIl1dLElbXCJTLUctVVVTTUwtXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5NMS5MQVJHRSBFWFRFTlNJT04gTk9ERVwiXV0sSVtcIlMtRy1VVVNNTi1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLk0xLk5PREUgQ0VOVFJFXCJdXSxJW1wiUy1HLVVVU1ItLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuSUMuUkFESU9cIl1dLElbXCJTLUctVVVTUlMtXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5JLkZGLlNBVEVMTElURVwiXV0sSVtcIlMtRy1VVVNSVC1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLklDLlJBRElPIFRFTEVUWVBFIENFTlRSRVwiXV0sSVtcIlMtRy1VVVNSVy1cIl09W0VbXCJHUi5JQy5GRi5TSUdOQUxcIl0sRVtcIkdSLklDLlJBRElPIFJFTEFZXCJdXSxJW1wiUy1HLVVVU1MtLVwiXT1bRVtcIkdSLklDLkZGLlNJR05BTFwiXSxFW1wiR1IuTTEuU0lHTkFMIFNVUFBPUlRcIl1dLElbXCJTLUctVVVTVy0tXCJdPVtFW1wiR1IuSUMuRkYuU0lHTkFMXCJdLEVbXCJHUi5JQy5URUxFUEhPTkUgU1dJVENIXCJdXSxJW1wiUy1HLVVVU1gtLVwiXT1bRVtcIkdSLklDLkVMRUNUUk9OSUMgUkFOR0lOR1wiXV0sSVtcIlMtRy1VVUktLS1cIl09W0VbXCJHUi5JQy5JTkZPUk1BVElPTiBPUEVSQVRJT05TXCJdXSxJW1wiUy1HLVVVUC0tLVwiXT1JW1wiUy1HLVVVWC0tLVwiXT1bRVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl0sRVtcIkdSLk0xLkxBTkRJTkcgU1VQUE9SVFwiXV0sSVtcIlMtRy1VVUUtLS1cIl09W0VbXCJHUi5JQy5FWFBMT1NJVkUgT1JETkFOQ0UgRElTUE9TQUxcIl1dLElbXCJTLUctVVVULS0tXCJdPVtFW1wiR1IuSUMuVE9QT0dSQVBISUNcIl1dLElbXCJTLUctVVVELS0tXCJdPVtFW1wiR1IuSUMuRFJJTExJTkdcIl1dLElbXCJTLUctVVMtLS0tXCJdPVtFW1wiR1IuSUMuQ09NQkFUIFNFUlZJQ0UgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0EtLS1cIl09W0VbXCJHUi5JQy5BRE1JTklTVFJBVElWRVwiXV0sSVtcIlMtRy1VU0FULS1cIl09W0VbXCJHUi5JQy5BRE1JTklTVFJBVElWRVwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQUMtLVwiXT1bRVtcIkdSLklDLkFETUlOSVNUUkFUSVZFXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQUotLVwiXT1bRVtcIkdSLklDLkpVREdFIEFEVk9DQVRFIEdFTkVSQUxcIl1dLElbXCJTLUctVVNBSlQtXCJdPVtFW1wiR1IuSUMuSlVER0UgQURWT0NBVEUgR0VORVJBTFwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQUpDLVwiXT1bRVtcIkdSLklDLkpVREdFIEFEVk9DQVRFIEdFTkVSQUxcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBTy0tXCJdPVtFW1wiR1IuSUMuUE9TVEFMXCJdXSxJW1wiUy1HLVVTQU9ULVwiXT1bRVtcIkdSLklDLlBPU1RBTFwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQU9DLVwiXT1bRVtcIkdSLklDLlBPU1RBTFwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FGLS1cIl09W0VbXCJHUi5JQy5GSU5BTkNFXCJdXSxJW1wiUy1HLVVTQUZULVwiXT1bRVtcIkdSLklDLkZJTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FGQy1cIl09W0VbXCJHUi5JQy5GSU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVMtLVwiXT1bRVtcIkdSLklDLlBFUlNPTk5FTCBTRVJWSUNFU1wiXV0sSVtcIlMtRy1VU0FTVC1cIl09W0VbXCJHUi5JQy5QRVJTT05ORUwgU0VSVklDRVNcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FTQy1cIl09W0VbXCJHUi5JQy5QRVJTT05ORUwgU0VSVklDRVNcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBTS0tXCJdPVtFW1wiR1IuSUMuTU9SVFVBUlkgQUZGQUlSU1wiXV0sSVtcIlMtRy1VU0FNVC1cIl09W0VbXCJHUi5JQy5NT1JUVUFSWSBBRkZBSVJTXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBTUMtXCJdPVtFW1wiR1IuSUMuTU9SVFVBUlkgQUZGQUlSU1wiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FSLS1cIl09W0VbXCJHUi5JQy5SRUxJR0lPVVMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FSVC1cIl09W0VbXCJHUi5JQy5SRUxJR0lPVVMgU1VQUE9SVFwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVJDLVwiXT1bRVtcIkdSLklDLlJFTElHSU9VUyBTVVBQT1JUXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVAtLVwiXT1bRVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTXCJdXSxJW1wiUy1HLVVTQVBULVwiXT1bRVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUEMtXCJdPVtFW1wiR1IuSUMuUFVCTElDIEFGRkFJUlNcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUEItXCJdPVtFW1wiR1IuSUMuUFVCTElDIEFGRkFJUlMgQlJPQURDQVNUXCJdXSxJW1wiUy1HLVVTQVBCVFwiXT1bRVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTIEJST0FEQ0FTVFwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVBCQ1wiXT1bRVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTIEJST0FEQ0FTVFwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FQTS1cIl09W0VbXCJHUi5JQy5KT0lOVCBJTkZPUk1BVElPTiBCVVJFQVVcIl1dLElbXCJTLUctVVNBUE1UXCJdPVtFW1wiR1IuSUMuSk9JTlQgSU5GT1JNQVRJT04gQlVSRUFVXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBUE1DXCJdPVtFW1wiR1IuSUMuSk9JTlQgSU5GT1JNQVRJT04gQlVSRUFVXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVgtLVwiXT1bRVtcIkdSLklDLlJFUExBQ0VNRU5UIEhPTERJTkcgVU5JVFwiXV0sSVtcIlMtRy1VU0FYVC1cIl09W0VbXCJHUi5JQy5SRVBMQUNFTUVOVCBIT0xESU5HIFVOSVRcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FYQy1cIl09W0VbXCJHUi5JQy5SRVBMQUNFTUVOVCBIT0xESU5HIFVOSVRcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNBTC0tXCJdPVtFW1wiR1IuSUMuTEFCT1VSXCJdXSxJW1wiUy1HLVVTQUxULVwiXT1bRVtcIkdSLklDLkxBQk9VUlwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQUxDLVwiXT1bRVtcIkdSLklDLkxBQk9VUlwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FXLS1cIl09W0VbXCJHUi5JQy5NT1JBTEUsIFdFTEZBUkUsIEFORCBSRUNSRUFUSU9OXCJdXSxJW1wiUy1HLVVTQVdULVwiXT1bRVtcIkdSLklDLk1PUkFMRSwgV0VMRkFSRSwgQU5EIFJFQ1JFQVRJT05cIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXV0sSVtcIlMtRy1VU0FXQy1cIl09W0VbXCJHUi5JQy5NT1JBTEUsIFdFTEZBUkUsIEFORCBSRUNSRUFUSU9OXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVEtLVwiXT1bRVtcIkdSLklDLlFVQVJURVJNQVNURVJcIl1dLElbXCJTLUctVVNBUVQtXCJdPVtFW1wiR1IuSUMuUVVBUlRFUk1BU1RFUlwiXSxFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdXSxJW1wiUy1HLVVTQVFDLVwiXT1bRVtcIkdSLklDLlFVQVJURVJNQVNURVJcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNNLS0tXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTFwiXV0sSVtcIlMtRy1VU01ULS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIFRIRUFURVJcIl1dLElbXCJTLUctVVNNQy0tXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBDT1JQU1wiXV0sSVtcIlMtRy1VU01NLS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMXCJdLEVbXCJHUi5JQy5GRi5NRURJQ0FMIFRSRUFUTUVOVCBGQUNJTElUWVwiXV0sSVtcIlMtRy1VU01NVC1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLk1FRElDQUwgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJW1wiUy1HLVVTTU1DLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgQ09SUFNcIl0sRVtcIkdSLklDLkZGLk1FRElDQUwgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJW1wiUy1HLVVTTVYtLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUxcIl0sRVtcIkdSLk0yLlZFVEVSSU5BUllcIl1dLElbXCJTLUctVVNNVlQtXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBUSEVBVEVSXCJdLEVbXCJHUi5NMi5WRVRFUklOQVJZXCJdXSxJW1wiUy1HLVVTTVZDLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgQ09SUFNcIl0sRVtcIkdSLk0yLlZFVEVSSU5BUllcIl1dLElbXCJTLUctVVNNRC0tXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTFwiXSxFW1wiR1IuTTIuREVOVEFMXCJdXSxJW1wiUy1HLVVTTURULVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgVEhFQVRFUlwiXSxFW1wiR1IuTTIuREVOVEFMXCJdXSxJW1wiUy1HLVVTTURDLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgQ09SUFNcIl0sRVtcIkdSLk0yLkRFTlRBTFwiXV0sSVtcIlMtRy1VU01QLS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMXCJdLEVbXCJHUi5NMi5QU1lDSE9MT0dJQ0FMXCJdXSxJW1wiUy1HLVVTTVBULVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUwgVEhFQVRFUlwiXSxFW1wiR1IuTTIuUFNZQ0hPTE9HSUNBTFwiXV0sSVtcIlMtRy1VU01QQy1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIENPUlBTXCJdLEVbXCJHUi5NMi5QU1lDSE9MT0dJQ0FMXCJdXSxJW1wiUy1HLVVTUy0tLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXV0sSVtcIlMtRy1VU1NULS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXV0sSVtcIlMtRy1VU1NDLS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl1dLElbXCJTLUctVVNTMS0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJXCJdXSxJW1wiUy1HLVVTUzFULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJXCJdXSxJW1wiUy1HLVVTUzFDLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSVwiXV0sSVtcIlMtRy1VU1MyLS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJXCJdXSxJW1wiUy1HLVVTUzJULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJSVwiXV0sSVtcIlMtRy1VU1MyQy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJXCJdXSxJW1wiUy1HLVVTUzMtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSUlJXCJdXSxJW1wiUy1HLVVTUzNULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl1dLElbXCJTLUctVVNTM0MtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl1dLElbXCJTLUctVVNTM0EtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl0scy5fdHJhbnNsYXRlKDI1LDUscy5fc2NhbGUoLjUsRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdKSldLElbXCJTLUctVVNTM0FUXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXSxzLl90cmFuc2xhdGUoMjUsNSxzLl9zY2FsZSguNSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0pKV0sSVtcIlMtRy1VU1MzQUNcIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXSxzLl90cmFuc2xhdGUoMjUsNSxzLl9zY2FsZSguNSxFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0pKV0sSVtcIlMtRy1VU1M0LS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElWXCJdXSxJW1wiUy1HLVVTUzRULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJVlwiXV0sSVtcIlMtRy1VU1M0Qy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIElWXCJdXSxJW1wiUy1HLVVTUzUtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVlwiXV0sSVtcIlMtRy1VU1M1VC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVlwiXV0sSVtcIlMtRy1VU1M1Qy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFZcIl1dLElbXCJTLUctVVNTNi0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSVwiXV0sSVtcIlMtRy1VU1M2VC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklcIl1dLElbXCJTLUctVVNTNkMtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBWSVwiXV0sSVtcIlMtRy1VU1M3LS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFZJSVwiXV0sSVtcIlMtRy1VU1M3VC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklJXCJdXSxJW1wiUy1HLVVTUzdDLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklJXCJdXSxJW1wiUy1HLVVTUzgtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklJSVwiXV0sSVtcIlMtRy1VU1M4VC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgVklJSVwiXV0sSVtcIlMtRy1VU1M4Qy1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgQ09SUFNcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFZJSUlcIl1dLElbXCJTLUctVVNTOS0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJWFwiXV0sSVtcIlMtRy1VU1M5VC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuRkYuQ0xBU1MgSVhcIl1dLElbXCJTLUctVVNTOUMtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBJWFwiXV0sSVtcIlMtRy1VU1NYLS1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFhcIl1dLElbXCJTLUctVVNTWFQtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIFRIRUFURVJcIl0sRVtcIkdSLklDLkZGLkNMQVNTIFhcIl1dLElbXCJTLUctVVNTWEMtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5GRi5DTEFTUyBYXCJdXSxJW1wiUy1HLVVTU0wtLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuTEFVTkRSWS9CQVRIXCJdXSxJW1wiUy1HLVVTU0xULVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBUSEVBVEVSXCJdLEVbXCJHUi5JQy5MQVVORFJZL0JBVEhcIl1dLElbXCJTLUctVVNTTEMtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5MQVVORFJZL0JBVEhcIl1dLElbXCJTLUctVVNTVy0tXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZXCJdLEVbXCJHUi5JQy5XQVRFUlwiXV0sSVtcIlMtRy1VU1NXVC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuV0FURVJcIl1dLElbXCJTLUctVVNTV0MtXCJdPVtFW1wiR1IuSUMuRkYuU1VQUExZIENPUlBTXCJdLEVbXCJHUi5JQy5XQVRFUlwiXV0sSVtcIlMtRy1VU1NXUC1cIl09W0VbXCJHUi5JQy5GRi5TVVBQTFlcIl0sRVtcIkdSLklDLldBVEVSIFBVUklGSUNBVElPTlwiXV0sSVtcIlMtRy1VU1NXUFRcIl09W0VbXCJHUi5JQy5GRi5TVVBQTFkgVEhFQVRFUlwiXSxFW1wiR1IuSUMuV0FURVIgUFVSSUZJQ0FUSU9OXCJdXSxJW1wiUy1HLVVTU1dQQ1wiXT1bRVtcIkdSLklDLkZGLlNVUFBMWSBDT1JQU1wiXSxFW1wiR1IuSUMuV0FURVIgUFVSSUZJQ0FUSU9OXCJdXSxJW1wiUy1HLVVTVC0tLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdXSxJW1wiUy1HLVVTVFQtLVwiXT1bRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl1dLElbXCJTLUctVVNUQy0tXCJdPVtFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl1dLElbXCJTLUctVVNUTS0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk1PVkVNRU5UIENPTlRST0wgQ0VOVFJFXCJdXSxJW1wiUy1HLVVTVE1ULVwiXT1bRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLk1PVkVNRU5UIENPTlRST0wgQ0VOVFJFXCJdXSxJW1wiUy1HLVVTVE1DLVwiXT1bRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5NT1ZFTUVOVCBDT05UUk9MIENFTlRSRVwiXV0sSVtcIlMtRy1VU1RSLS1cIl09W0VbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuUkFJTFJPQURcIl1dLElbXCJTLUctVVNUUlQtXCJdPVtFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuUkFJTFJPQURcIl1dLElbXCJTLUctVVNUUkMtXCJdPVtFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLk0xLlJBSUxST0FEXCJdXSxJW1wiUy1HLVVTVFMtLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5OQVZBTFwiXV0sSVtcIlMtRy1VU1RTVC1cIl09W0VbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5OQVZBTFwiXV0sSVtcIlMtRy1VU1RTQy1cIl09W0VbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuTkFWQUxcIl1dLElbXCJTLUctVVNUQS0tXCJdPVtFW1wiR1IuSUMuVFJBTlNQT1JUQVRJT05cIl0sRVtcIkdSLklDLkFJUlBPUlQgT0YgREVCQVJLQVRJT05cIl1dLElbXCJTLUctVVNUQVQtXCJdPVtFW1wiR1IuSUMuRkYuVEhFQVRSRSBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuSUMuQUlSUE9SVCBPRiBERUJBUktBVElPTlwiXV0sSVtcIlMtRy1VU1RBQy1cIl09W0VbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuSUMuQUlSUE9SVCBPRiBERUJBUktBVElPTlwiXV0sSVtcIlMtRy1VU1RJLS1cIl09W0VbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuTTEuTUlTU0lMRVwiXV0sSVtcIlMtRy1VU1RJVC1cIl09W0VbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5NSVNTSUxFXCJdXSxJW1wiUy1HLVVTVElDLVwiXT1bRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5NMS5NSVNTSUxFXCJdXSxJW1wiUy1HLVVTWC0tLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdXSxJW1wiUy1HLVVTWFQtLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl1dLElbXCJTLUctVVNYQy0tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl1dLElbXCJTLUctVVNYSC0tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVTWEhULVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLk0yLkhFQVZZXCJdXSxJW1wiUy1HLVVTWEhDLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5DT1JQUyBTVVBQT1JUXCJdLEVbXCJHUi5NMi5IRUFWWVwiXV0sSVtcIlMtRy1VU1hSLS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuTTIuUkFJTFJPQURcIl1dLElbXCJTLUctVVNYUlQtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuTTIuUkFJTFJPQURcIl1dLElbXCJTLUctVVNYUkMtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLk0yLlJBSUxST0FEXCJdXSxJW1wiUy1HLVVTWE8tLVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5NMS5BTU1VTklUSU9OXCJdXSxJW1wiUy1HLVVTWE9ULVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLk0xLkFNTVVOSVRJT05cIl1dLElbXCJTLUctVVNYT0MtXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLkNPUlBTIFNVUFBPUlRcIl0sRVtcIkdSLk0xLkFNTVVOSVRJT05cIl1dLElbXCJTLUctVVNYT00tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLk0xLk1JU1NJTEVcIl1dLElbXCJTLUctVVNYT01UXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl0sRVtcIkdSLklDLkZGLlRIRUFUUkUgU1VQUE9SVFwiXSxFW1wiR1IuTTEuTUlTU0lMRVwiXV0sSVtcIlMtRy1VU1hPTUNcIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuTTEuTUlTU0lMRVwiXV0sSVtcIlMtRy1VU1hFLS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuTTEuRUxFQ1RSTy1PUFRJQ0FMXCJdXSxJW1wiUy1HLVVTWEVULVwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5JQy5GRi5USEVBVFJFIFNVUFBPUlRcIl0sRVtcIkdSLk0xLkVMRUNUUk8tT1BUSUNBTFwiXV0sSVtcIlMtRy1VU1hFQy1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuSUMuRkYuQ09SUFMgU1VQUE9SVFwiXSxFW1wiR1IuTTEuRUxFQ1RSTy1PUFRJQ0FMXCJdXSxJW1wiUy1HLVVTWEJEUlwiXT1bRVtcIkdSLklDLk1BSU5URU5BTkNFXCJdLEVbXCJHUi5NMi5CQVRUTEUgREFNQUdFIFJFUEFJUlwiXV0sSVtcIlMtRy1VU1hQTS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXSxFW1wiR1IuTTIuUFJFVkVOVElWRSBNQUlOVEVOQU5DRVwiXV0sSVtcIlMtRy1VU1hQLS1cIl09W0VbXCJHUi5JQy5QSVBFTElORVwiXV0sSVtcIlMtRy1VU1hFUC1cIl09W0VbXCJHUi5JQy5FTlZJUk9OTUVOVEFMIFBST1RFQ1RJT05cIl1dLElbXCJTLUctVUgtLS0tXCJdPVtdLElbXCJTLUctVUgxLS0tXCJdPVtFW1wiR1IuSUMuRkYuSEVBRFFVQVJURVJTIE9SIEhFQURRVUFSVEVSUyBFTEVNRU5UXCJdXSxJW1wiUy1HLVVIMi0tLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuRkYuSEVBRFFVQVJURVJTIE9SIEhFQURRVUFSVEVSUyBFTEVNRU5UXCJdXSxJW1wiUy1HLVVIR0wtLVwiXT1JW1wiUy1HLUdMLS0tLVwiXT1bRVtcIkdSLklDLkxJQUlTT05cIl1dfX0seD17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2NdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLUctRS0tLS0tXCJdPVtdLElbXCJTLUctRVctLS0tXCJdPVtdLElbXCJTLUctRVdNLS0tXCJdPVtFW1wiR1IuRVEuTUlTU0lMRSBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1FV01BLS1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdXSxJW1wiUy1HLUVXTUFTLVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXTUFTUlwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdLEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRMQVJcIl1dLElbXCJTLUctRVdNQVNFXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl0sRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEVMQVJcIl1dLElbXCJTLUctRVdNQUktXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJW1wiUy1HLUVXTUFJUlwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUTEFSXCJdXSxJW1wiUy1HLUVXTUFJRVwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXSxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBURUxBUlwiXV0sSVtcIlMtRy1FV01BTC1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJW1wiUy1HLUVXTUFMUlwiXT1bRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0sRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVExBUlwiXV0sSVtcIlMtRy1FV01BTEVcIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdLEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRFTEFSXCJdXSxJW1wiUy1HLUVXTUFULVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC43LEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdKSksRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEhFQVRSRVwiXV0sSVtcIlMtRy1FV01BVFJcIl09W3MuX3RyYW5zbGF0ZSgwLC0xNSxzLl9zY2FsZSguNyxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSkpLEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRIRUFUUkVcIl0sRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVExBUlwiXV0sSVtcIlMtRy1FV01BVEVcIl09W3MuX3RyYW5zbGF0ZSgwLC0xNSxzLl9zY2FsZSguNyxFW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSkpLEVbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRIRUFUUkVcIl0sRVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEVMQVJcIl1dLElbXCJTLUctRVdNUy0tXCJdPVtFW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl1dLElbXCJTLUctRVdNU1MtXCJdPVtFW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXTVNJLVwiXT1bRVtcIkdSLkVRLlNVUkZBQ0UtVE8tU1VSRkFDRSBNSVNTSUxFIExBVU5DSEVSXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbXCJTLUctRVdNU0wtXCJdPVtFW1wiR1IuRVEuU1VSRkFDRS1UTy1TVVJGQUNFIE1JU1NJTEUgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdNVC0tXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgTUlTU0lMRSBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1FV01UTC1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBNSVNTSUxFIExBVU5DSEVSXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVtcIlMtRy1FV01UTS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBNSVNTSUxFIExBVU5DSEVSXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbXCJTLUctRVdNVEgtXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgTUlTU0lMRSBMQVVOQ0hFUlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FV1MtLS1cIl09W0VbXCJHUi5FUS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdXSxJW1wiUy1HLUVXU0wtLVwiXT1bRVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXU00tLVwiXT1bRVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV1NILS1cIl09W0VbXCJHUi5FUS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJW1wiUy1HLUVXWC0tLVwiXT1bRVtcIkdSLkVRLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1FV1hMLS1cIl09W0VbXCJHUi5FUS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMTAsRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdKV0sSVtcIlMtRy1FV1hNLS1cIl09W0VbXCJHUi5FUS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl0scy5fdHJhbnNsYXRlKDAsMTAsRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXSldLElbXCJTLUctRVdYSC0tXCJdPVtFW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDEwLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdKV0sSVtcIlMtRy1FV1QtLS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl1dLElbXCJTLUctRVdUTC0tXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgUk9DS0VUIExBVU5DSEVSXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVtcIlMtRy1FV1RNLS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV1RILS1cIl09W0VbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdSLS0tXCJdPVtFW1wiR1IuRVEuUklGTEVcIl1dLElbXCJTLUctRVdSUi0tXCJdPVtFW1wiR1IuRVEuUklGTEVcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXUkwtLVwiXT1bRVtcIkdSLkVRLlJJRkxFXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbXCJTLUctRVdSSC0tXCJdPVtFW1wiR1IuRVEuUklGTEVcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdaLS0tXCJdPVtFW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXV0sSVtcIlMtRy1FV1pMLS1cIl09W0VbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSldLElbXCJTLUctRVdaTS0tXCJdPVtFW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXSxzLl90cmFuc2xhdGUoMCwyMCxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdKV0sSVtcIlMtRy1FV1pILS1cIl09W0VbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdKV0sSVtcIlMtRy1FV08tLS1cIl09W0VbXCJHUi5FUS5NT1JUQVJcIl1dLElbXCJTLUctRVdPTC0tXCJdPVtFW1wiR1IuRVEuTU9SVEFSXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVtcIlMtRy1FV09NLS1cIl09W0VbXCJHUi5FUS5NT1JUQVJcIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV09ILS1cIl09W0VbXCJHUi5FUS5NT1JUQVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVdILS0tXCJdPVtFW1wiR1IuRVEuSE9XSVRaRVJcIl1dLElbXCJTLUctRVdITC0tXCJdPVtFW1wiR1IuRVEuSE9XSVRaRVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXSExTLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC44LFtFW1wiR1IuRVEuSE9XSVRaRVJcIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSkpLEVbXCJHUi5FUS5IT1dJVFpFUiBUUkFDS0VEXCJdXSxJW1wiUy1HLUVXSE0tLVwiXT1bRVtcIkdSLkVRLkhPV0lUWkVSXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbXCJTLUctRVdITVMtXCJdPVtzLl90cmFuc2xhdGUoMCwtMTUscy5fc2NhbGUoLjgsW0VbXCJHUi5FUS5IT1dJVFpFUlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSkpLEVbXCJHUi5FUS5IT1dJVFpFUiBUUkFDS0VEXCJdXSxJW1wiUy1HLUVXSEgtLVwiXT1bRVtcIkdSLkVRLkhPV0lUWkVSXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJW1wiUy1HLUVXSEhTLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC44LFtFW1wiR1IuRVEuSE9XSVRaRVJcIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dKSksRVtcIkdSLkVRLkhPV0lUWkVSIFRSQUNLRURcIl1dLElbXCJTLUctRVdHLS0tXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdXSxJW1wiUy1HLUVXR0wtLVwiXT1bRVtcIkdSLkVRLkFOVElUQU5LIEdVTlwiXSxFW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbXCJTLUctRVdHTS0tXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdLEVbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbXCJTLUctRVdHSC0tXCJdPVtFW1wiR1IuRVEuQU5USVRBTksgR1VOXCJdLEVbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJW1wiUy1HLUVXR1ItLVwiXT1bRVtcIkdSLkVRLlJFQ09JTExFU1MgR1VOXCJdXSxJW1wiUy1HLUVXRC0tLVwiXT1bRVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXV0sSVtcIlMtRy1FV0RMLS1cIl09W0VbXCJHUi5FUS5ESVJFQ1QgRklSRSBHVU5cIl0sRVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJW1wiUy1HLUVXRExTLVwiXT1bcy5fdHJhbnNsYXRlKDAsLTE1LHMuX3NjYWxlKC44LFtFW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0pKSxFW1wiR1IuRVEuSE9XSVRaRVIgVFJBQ0tFRFwiXV0sSVtcIlMtRy1FV0RNLS1cIl09W0VbXCJHUi5FUS5ESVJFQ1QgRklSRSBHVU5cIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV0RNUy1cIl09W3MuX3RyYW5zbGF0ZSgwLC0xNSxzLl9zY2FsZSguOCxbRVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXSxFW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSkpLEVbXCJHUi5FUS5IT1dJVFpFUiBUUkFDS0VEXCJdXSxJW1wiUy1HLUVXREgtLVwiXT1bRVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVtcIlMtRy1FV0RIUy1cIl09W3MuX3RyYW5zbGF0ZSgwLC0xNSxzLl9zY2FsZSguOCxbRVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXSxFW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0pKSxFW1wiR1IuRVEuSE9XSVRaRVIgVFJBQ0tFRFwiXV0sSVtcIlMtRy1FV0EtLS1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl1dLElbXCJTLUctRVdBTC0tXCJdPVtFW1wiR1IuRVEuQUlSIERFRkVOQ0UgR1VOXCJdLEVbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVtcIlMtRy1FV0FNLS1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0sRVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVtcIlMtRy1FV0FILS1cIl09W0VbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0sRVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbXCJTLUctRVYtLS0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl1dLElbXCJTLUctRVZBLS0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sRVtcIkdSLkVRLkFSTU9VUkVEIFZFSElDTEVcIl1dLElbXCJTLUctRVZBVC0tXCJdPVtFW1wiR1IuRVEuVEFOS1wiXV0sSVtcIlMtRy1FVkFUTC1cIl09W0VbXCJHUi5FUS5UQU5LXCJdLEVbXCJHUi5FUS5MSUdIVCBUQU5LXCJdXSxJW1wiUy1HLUVWQVRMUlwiXT1JW1wiUy1HLUVWQVRXLVwiXT1bRVtcIkdSLkVRLlRBTktcIl0sRVtcIkdSLkVRLkxJR0hUIFRBTktcIl0sRVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkFUTS1cIl09W0VbXCJHUi5FUS5UQU5LXCJdLEVbXCJHUi5FUS5NRURJVU0gVEFOS1wiXV0sSVtcIlMtRy1FVkFUTVJcIl09SVtcIlMtRy1FVkFUWC1cIl09W0VbXCJHUi5FUS5UQU5LXCJdLEVbXCJHUi5FUS5NRURJVU0gVEFOS1wiXSxFW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQVRILVwiXT1bRVtcIkdSLkVRLlRBTktcIl0sRVtcIkdSLkVRLkhFQVZZIFRBTktcIl1dLElbXCJTLUctRVZBVEhSXCJdPUlbXCJTLUctRVZBVFktXCJdPVtFW1wiR1IuRVEuVEFOS1wiXSxFW1wiR1IuRVEuSEVBVlkgVEFOS1wiXSxFW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQUEtLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdXSxJW1wiUy1HLUVWQUFSLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLEVbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbXCJTLUctRVZBSS0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgRklHSFRJTkcgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkFDLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFIChBRlYpIENPTU1BTkQgQU5EIENPTlRST0xcIl1dLElbXCJTLUctRVZBUy0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVIgQ09NQkFUIFNFUlZJQ0UgU1VQUE9SVCBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQUwtLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIEZJR0hUSU5HIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNST1NTLUNPVU5UUllcIl1dLElbXCJTLUctRVZVLS0tXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWVUItLVwiXT1bRVtcIkdSLkVRLkJVU1wiXV0sSVtcIlMtRy1FVlVTLS1cIl09W0VbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl1dLElbXCJTLUctRVZVU0wtXCJdPVtFW1wiR1IuRVEuU0VNSS1UUkFJTEVSIFRSVUNLXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgTElHSFRcIl1dLElbXCJTLUctRVZVU00tXCJdPVtFW1wiR1IuRVEuU0VNSS1UUkFJTEVSIFRSVUNLXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgTUVESVVNXCJdXSxJW1wiUy1HLUVWVVNILVwiXT1bRVtcIkdSLkVRLlNFTUktVFJBSUxFUiBUUlVDS1wiXSxFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFIEhFQVZZXCJdXSxJW1wiUy1HLUVWVUwtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdXSxJW1wiUy1HLUVWVVgtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXV0sSVtcIlMtRy1FVlVSLS1cIl09W0VbXCJHUi5FUS5XQVRFUiBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWVVQtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDS1wiXV0sSVtcIlMtRy1FVlVUTC1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0tcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0suTElHSFRcIl1dLElbXCJTLUctRVZVVEgtXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLLkhFQVZZXCJdXSxJW1wiUy1HLUVWVUEtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuTUVESUNBTCBFVkFDVUFUSU9OXCJdXSxJW1wiUy1HLUVWVUFBLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLEVbXCJHUi5FUS5NRURJQ0FMIEVWQUNVQVRJT05cIl1dLElbXCJTLUctRVZFLS0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0scy5fc2NhbGUoLjcsRVtcIkdSLklDLkVOR0lORUVSXCJdKV0sSVtcIlMtRy1FVkVCLS1cIl09W0VbXCJHUi5FUS5CUklER0VcIl1dLElbXCJTLUctRVZFRS0tXCJdPVtFW1wiR1IuRVEuRUFSVEhNT1ZFUlwiXV0sSVtcIlMtRy1FVkVDLS1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXSxzLl9zY2FsZSguNixFW1wiR1IuSUMuRU5HSU5FRVJcIl0pXSxJW1wiUy1HLUVWRU0tLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuTUlORSBMQVlJTkcgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkVNQS1cIl09W0VbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXSxFW1wiR1IuRVEuVEFOS1wiXV0sSVtcIlMtRy1FVkVNVi1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUlwiXSxFW1wiR1IuRVEuQVJNT1JFRCBDQVJSSUVSIFdJVEggVk9MQ0FOT1wiXV0sSVtcIlMtRy1FVkVNVC1cIl09W0VbXCJHUi5FUS5NSU5FIENMRUFSSU5HIEVRVUlQTUVOVFwiXSxzLl90cmFuc2xhdGUoMCwtMTAsRVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXSldLElbXCJTLUctRVZFTUwtXCJdPVtFW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl0sRVtcIkdSLkVRLkFSTU9SRUQgQ0FSUklFUiBXSVRIIFZPTENBTk9cIl1dLElbXCJTLUctRVZFQS0tXCJdPVtFW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl1dLElbXCJTLUctRVZFQUEtXCJdPVtFW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl0sRVtcIkdSLkVRLlRBTktcIl1dLElbXCJTLUctRVZFQVQtXCJdPVtFW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl0scy5fdHJhbnNsYXRlKDAsLTEwLEVbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl0pXSxJW1wiUy1HLUVWRU1TTVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLEVbXCJHUi5FUS5NSU5FIFNDQVRURVJBQkxFXCJdXSxJW1wiUy1HLUVWRUQtLVwiXT1bRVtcIkdSLkVRLkRPWkVSXCJdXSxJW1wiUy1HLUVWRURBLVwiXT1bRVtcIkdSLkVRLkRPWkVSIEFSTU9SRURcIl1dLElbXCJTLUctRVZFUy0tXCJdPVtFW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0scy5fc2NhbGUoLjYsRVtcIkdSLklDLkVOR0lORUVSXCJdKV0sSVtcIlMtRy1FVkVSLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUlwiXSxzLl9zY2FsZSguNixFW1wiR1IuSUMuRU5HSU5FRVJcIl0pLEVbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUiBFTkdJTkVFUiBSRUNPTiBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWRUgtLVwiXT1bRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdLEVbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgQkFDS0hPRVwiXV0sSVtcIlMtRy1FVkVGLS1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNST1NTLUNPVU5UUllcIl0sRVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBGRVJSWSBUUkFOU1BPUlRFUlwiXV0sSVtcIlMtRy1FVkQtLS1cIl09W0VbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNST1NTLUNPVU5UUllcIl0scy5fc2NhbGUoLjcsRVtcIkdSLklDLkRSSUxMSU5HXCJdKV0sSVtcIlMtRy1FVlQtLS1cIl09W0VbXCJHUi5FUS5UUkFJTiBMT0NPTU9USVZFXCJdXSxJW1wiUy1HLUVWQy0tLVwiXT1bRVtcIkdSLkkuQ0lWSUxJQU5cIl1dLElbXCJTLUctRVZDQS0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5BVVRPTU9CSUxFXCJdXSxJW1wiUy1HLUVWQ0FMLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuQVVUT01PQklMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVtcIlMtRy1FVkNBTS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkFVVE9NT0JJTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdXSxJW1wiUy1HLUVWQ0FILVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuQVVUT01PQklMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVtcIlMtRy1FVkNPLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdXSxJW1wiUy1HLUVWQ09MLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl1dLElbXCJTLUctRVZDT00tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbXCJTLUctRVZDT0gtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVtcIlMtRy1FVkNNLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdXSxJW1wiUy1HLUVWQ01MLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTVVMVElQTEUgUEFTU0VOR0VSIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl1dLElbXCJTLUctRVZDTU0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbXCJTLUctRVZDTUgtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVtcIlMtRy1FVkNVLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkNVTC1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVtcIlMtRy1FVkNVTS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbXCJTLUctRVZDVUgtXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl1dLElbXCJTLUctRVZDSi0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXV0sSVtcIlMtRy1FVkNKTC1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkpFRVAgVFlQRSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJW1wiUy1HLUVWQ0pNLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSkVFUCBUWVBFIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdXSxJW1wiUy1HLUVWQ0pILVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSkVFUCBUWVBFIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl1dLElbXCJTLUctRVZDVC0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVtcIlMtRy1FVkNUTC1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWQ1RNLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWQ1RILVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbXCJTLUctRVZDRi0tXCJdPVtFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWQ0ZMLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVtcIlMtRy1FVkNGTS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEVbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXSxFW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJW1wiUy1HLUVWQ0ZILVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl0sRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVtcIlMtRy1FVk0tLS1cIl09W0VbXCJHUi5FUS5QQUNLIEFOSU1BTFwiXV0sSVtcIlMtRy1FVlMtLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxFW1wiR1IuRVEuTUlTU0lMRSBTVVBQT1JUXCJdXSxJW1wiUy1HLUVWU1QtLVwiXT1SP1tFW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sRVtcIkdSLkVRLk1JU1NJTEUgVFJBTlNMT0FERVJcIl1dOltFW1wiR1IuRVEuVFJBSU4gTE9DT01PVElWRVwiXV0sSVtcIlMtRy1FVlNSLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxFW1wiR1IuRVEuTUlTU0lMRSBUUkFOU1BPUlRFUlwiXV0sSVtcIlMtRy1FVlNDLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxFW1wiR1IuRVEuTUlTU0lMRSBDUkFORS9MT0FESU5HIERFVklDRVwiXV0sSVtcIlMtRy1FVlNQLS1cIl09W0VbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxFW1wiR1IuRVEuTUlTU0lMRSBQUk9QRUxMQU5UIFRSQU5TUE9SVEVSXCJdXSxJW1wiUy1HLUVWU1ctLVwiXT1bRVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEVbXCJHUi5FUS5NSVNTSUxFIFdBUkhFQUQgVFJBTlNQT1JURVJcIl1dLElbXCJTLUctRVMtLS0tXCJdPVtFW1wiR1IuRVEuU0VOU09SXCJdXSxJW1wiUy1HLUVTUi0tLVwiXT1bRVtcIkdSLkVRLlJBREFSXCJdXSxJW1wiUy1HLUVTRS0tLVwiXT1bRVtcIkdSLkVRLlNFTlNPUiBFTVBMQUNFRFwiXV0sSVtcIlMtRy1FWEktLS1cIl09W0VbXCJHUi5FUS5JTVBST1ZJU0VEIEVYUExPU0lWRSBERVZJQ0VcIl1dLElbXCJTLUctRVgtLS0tXCJdPVtdLElbXCJTLUctRVhMLS0tXCJdPVtFW1wiR1IuRVEuTEFTRVJcIl1dLElbXCJTLUctRVhOLS0tXCJdPVtFW1wiR1IuRVEuQ0JSTiBFUVVJUE1FTlRcIl1dLElbXCJTLUctRVhGLS0tXCJdPVtFW1wiR1IuRVEuRkxBTUUgVEhST1dFUlwiXV0sSVtcIlMtRy1FWE0tLS1cIl09W0VbXCJHUi5FUS5MQU5EIE1JTkVTXCJdXSxJW1wiUy1HLUVYTUMtLVwiXT1bRVtcIkdSLkVRLkFOVElQRVJTT05ORUwgTEFORCBNSU5FXCJdXSxJW1wiUy1HLUVYTUwtLVwiXT1bRVtcIkdSLkVRLkFOVElQRVJTT05ORUwgTEFORCBNSU5FIExFU1MgVEhBTiBMRVRIQUxcIl1dO3ZhciBlPXtcIkUtLS0tLVwiOjAsXCJFV00tLS1cIjoxNDAsXCJFV01BLS1cIjoxNDAsXCJFV01BUy1cIjoxNDAsRVdNQVNSOjE0MCxFV01BU0U6MTQwLFwiRVdNQUktXCI6MTQwLEVXTUFJUjoxNDAsRVdNQUlFOjE0MCxcIkVXTUFMLVwiOjE0MCxFV01BTFI6MTQwLEVXTUFMRToxNDAsXCJFV01BVC1cIjoxNTMsRVdNQVRSOjE1MyxFV01BVEU6MTUzLFwiRVdNUy0tXCI6MTQwLFwiRVdNU1MtXCI6MTQwLFwiRVdNU0ktXCI6MTQwLFwiRVdNU0wtXCI6MTQwLFwiRVdNVC0tXCI6MTQwLFwiRVdNVEwtXCI6MTQwLFwiRVdNVE0tXCI6MTQwLFwiRVdNVEgtXCI6MTQwLFwiRVdTLS0tXCI6MTQwLFwiRVdTTC0tXCI6MTQwLFwiRVdTTS0tXCI6MTQwLFwiRVdTSC0tXCI6MTQwLFwiRVdYLS0tXCI6MTQwLFwiRVdYTC0tXCI6MTQwLFwiRVdYTS0tXCI6MTQwLFwiRVdYSC0tXCI6MTQwLFwiRVdULS0tXCI6MTQwLFwiRVdUTC0tXCI6MTQwLFwiRVdUTS0tXCI6MTQwLFwiRVdUSC0tXCI6MTQwLFwiRVdSLS0tXCI6MTQwLFwiRVdSTC0tXCI6MTQwLFwiRVdSTS0tXCI6MTQwLFwiRVdSSC0tXCI6MTQwLFwiRVdaLS0tXCI6MTQwLFwiRVdaTC0tXCI6MTQwLFwiRVdaTS0tXCI6MTQwLFwiRVdaSC0tXCI6MTQwLFwiRVdPLS0tXCI6MTQwLFwiRVdPTC0tXCI6MTQwLFwiRVdPTS0tXCI6MTQwLFwiRVdPSC0tXCI6MTQwLFwiRVdILS0tXCI6MTQwLFwiRVdITC0tXCI6MTQwLFwiRVdITFMtXCI6MTMwLFwiRVdITS0tXCI6MTQwLFwiRVdITVMtXCI6MTMwLFwiRVdISC0tXCI6MTQwLFwiRVdISFMtXCI6MTMwLFwiRVdHLS0tXCI6MTQwLFwiRVdHTC0tXCI6MTQwLFwiRVdHTS0tXCI6MTQwLFwiRVdHSC0tXCI6MTQwLFwiRVdHUi0tXCI6MTQwLFwiRVdELS0tXCI6MTQwLFwiRVdETC0tXCI6MTQwLFwiRVdETFMtXCI6MTMwLFwiRVdETS0tXCI6MTQwLFwiRVdETVMtXCI6MTMwLFwiRVdESC0tXCI6MTQwLFwiRVdESFMtXCI6MTMwLFwiRVdBLS0tXCI6MTQwLFwiRVdBTC0tXCI6MTQwLFwiRVdBTS0tXCI6MTQwLFwiRVdBSC0tXCI6MTQwLFwiRVYtLS0tXCI6MTI5LFwiRVZBLS0tXCI6MTI5LFwiRVZBVC0tXCI6MTMwLFwiRVZBVEwtXCI6MTMwLEVWQVRMUjoxMzAsXCJFVkFUTS1cIjoxMzAsRVZBVE1SOjEzMCxcIkVWQVRILVwiOjEzMCxFVkFUSFI6MTMwLFwiRVZBQS0tXCI6MTMwLFwiRVZBQVItXCI6MTMwLFwiRVZBSS0tXCI6MTMwLFwiRVZBQy0tXCI6MTMwLFwiRVZBUy0tXCI6MTMwLFwiRVZBTC0tXCI6MTQwLFwiRVZVLS0tXCI6MTMwLFwiRVZBQi0tXCI6MTMwLFwiRVZVUy0tXCI6MTQwLFwiRVZVU0wtXCI6MTQwLFwiRVZVU00tXCI6MTQwLFwiRVZVU0gtXCI6MTQwLFwiRVZVTC0tXCI6MTQwLFwiRVZVWC0tXCI6MTQwLFwiRVZVUi0tXCI6MTMwLFwiRVZVVEwtXCI6MTMwLFwiRVZVVEgtXCI6MTMwLFwiRVZVQS0tXCI6MTMwLFwiRVZVQUEtXCI6MTMwLFwiRVZFLS0tXCI6MTI5LFwiRVZFQi0tXCI6MTMwLFwiRVZFRS0tXCI6MTMwLFwiRVZFQy0tXCI6MTQwLFwiRVZFTS0tXCI6MTMwLFwiRVZFTUEtXCI6MTMwLFwiRVZFTVYtXCI6MTMwLFwiRVZFTVQtXCI6MTMwLFwiRVZFTUwtXCI6MTQwLFwiRVZFQS0tXCI6MTIwLFwiRVZFQUEtXCI6MTMwLFwiRVZFQVQtXCI6MTMwLEVWRU1TTToxMzAsXCJFVkVELS1cIjoxMzAsXCJFVkVEQS1cIjoxMzAsXCJFVkVTLS1cIjoxMzAsXCJFVkVSLS1cIjoxMzAsXCJFVkVILS1cIjoxNDAsXCJFVkVGLS1cIjoxNDAsXCJFVkQtLS1cIjoxNDAsXCJFVlQtLVwiOjEzMCxcIkVWQy0tLVwiOjExOSxcIkVWQ0EtLVwiOjEzMi41LFwiRVZDQUwtXCI6MTMyLjUsXCJFVkNBTS1cIjoxMzIuNSxcIkVWQ0FILVwiOjEzMi41LFwiRVZDTy0tXCI6MTMyLjUsXCJFVkNPTC1cIjoxMzIuNSxcIkVWQ09NLVwiOjEzMi41LFwiRVZDT0gtXCI6MTMyLjUsXCJFVkNNLS1cIjoxMzIuNSxcIkVWQ01MLVwiOjEzMi41LFwiRVZDTU0tXCI6MTMyLjUsXCJFVkNNSC1cIjoxMzIuNSxcIkVWQ1UtLVwiOjEzMi41LFwiRVZDVUwtXCI6MTMyLjUsXCJFVkNVTS1cIjoxMzIuNSxcIkVWQ1VILVwiOjEzMi41LFwiRVZDSi0tXCI6MTMyLjUsXCJFVkNKTC1cIjoxMzIuNSxcIkVWQ0pNLVwiOjEzMi41LFwiRVZDSkgtXCI6MTMyLjUsXCJFVkNULS1cIjoxMzIuNSxcIkVWQ1RMLVwiOjEzMi41LFwiRVZDVE0tXCI6MTMyLjUsXCJFVkNUSC1cIjoxMzIuNSxcIkVWQ0YtLVwiOjEzMi41LFwiRVZDRkwtXCI6MTMyLjUsXCJFVkNGTS1cIjoxMzIuNSxcIkVWQ0ZILVwiOjEzMi41LFwiRVZNLS0tXCI6MTI1LFwiRVZTLS0tXCI6MTI5LFwiRVZTVC0tXCI6MTI5LFwiRVZTUi0tXCI6MTI5LFwiRVZTQy0tXCI6MTI5LFwiRVZTUC0tXCI6MTI5LFwiRVZTVy0tXCI6MTI5LFwiRVMtLS0tXCI6MTQwLFwiRVNSLS0tXCI6MTIwLFwiRVNFLS0tXCI6MTM2LFwiRVhJLS0tXCI6MTE5LFwiRVhMLS0tXCI6MTQ1LFwiRVhOLS0tXCI6MTQwLFwiRVhGLS0tXCI6MTM1LFwiRVhNLS0tXCI6MTMwLFwiRVhNQy0tXCI6MTIyLFwiRVhNTC0tXCI6MTIyfTtmb3IodmFyIEEgaW4gZSllLmhhc093blByb3BlcnR5KEEpJiYodFtcIlMtRy1cIitBXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOmVbQV19KX19LFU9e3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltjXSxpY29uczpmdW5jdGlvbihJLHQsRSxSKXtJW1wiUy1HLUktLS0tLVwiXT1bXSxJW1wiUy1HLUlSLS0tLVwiXT1bRVtcIkdSLklOLklDLlJBVyBNQVRFUklBTCBQUk9EVUNUSU9OL1NUT1JBR0VcIl1dLElbXCJTLUctSVJNLS0tXCJdPVtFW1wiR1IuSU4uSUMuTUlORVwiXV0sSVtcIlMtRy1JUlAtLS1cIl09W0VbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl1dLElbXCJTLUctSVJOLS0tXCJdPVtFW1wiR1IuSUMuQ0JSTlwiXV0sSVtcIlMtRy1JUk5CLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5CSU9MT0dJQ0FMXCJdXSxJW1wiUy1HLUlSTkMtLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLkNIRU1JQ0FMXCJdXSxJW1wiUy1HLUlSTk4tLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLk0xLk5VQ0xFQVJcIl1dLElbXCJTLUctSVAtLS0tXCJdPVtFW1wiR1IuSU4uSUMuUFJPQ0VTU0lORyBGQUNJTElUWVwiXV0sSVtcIlMtRy1JUEQtLS1cIl09W0VbXCJHUi5JQy5DQlJOXCJdLEVbXCJHUi5NMS5ERUNPTlRBTUlOQVRJT05cIl1dLElbXCJTLUctSUUtLS0tXCJdPVtFW1wiR1IuSUMuRVFVSVBNRU5UIE1BTlVGQUNUVVJFXCJdXSxJW1wiUy1HLUlVLS0tLVwiXT1bRVtcIkdSLklOLklDLlVUSUxJVFkgRkFDSUxJVFlcIl1dLElbXCJTLUctSVVSLS0tXCJdPVtFW1wiR1IuSU4uSUMuUkVTRUFSQ0hcIl1dLElbXCJTLUctSVVULS0tXCJdPVtFW1wiR1IuSU4uSUMuVEVMRUNPTU1VTklDQVRJT05TXCJdXSxJW1wiUy1HLUlVRS0tLVwiXT1bRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdXSxJW1wiUy1HLUlVRU4tLVwiXT1bRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdLEVbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUiBOVUNMRUFSXCJdXSxJW1wiUy1HLUlVRUQtLVwiXT1bRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdLEVbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUiBEQU1cIl1dLElbXCJTLUctSVVFRi0tXCJdPVtFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0sRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSIEZPU1NJTFwiXV0sSVtcIlMtRy1JVVAtLS1cIl09W0VbXCJHUi5JQy5XQVRFUlwiXV0sSVtcIlMtRy1JTS0tLS1cIl09W10sSVtcIlMtRy1JTUYtLS1cIl09W0VbXCJHUi5JTi5JQy5BVE9NSUMgRU5FUkdZXCJdXSxJW1wiUy1HLUlNRkEtLVwiXT1bRVtcIkdSLklOLklDLkFUT01JQyBFTkVSR1lcIl0sRVtcIkdSLklOLk0yLkFUT01JQyBFTkVSR1kgUkVBQ1RPUlwiXV0sSVtcIlMtRy1JTUZQLS1cIl09W0VbXCJHUi5JTi5JQy5BVE9NSUMgRU5FUkdZXCJdLEVbXCJHUi5JTi5NMi5OVUNMRUFSIE1BVEVSSUFMIFBST0RVQ1RJT05cIl1dLElbXCJTLUctSU1GUFctXCJdPVtFW1wiR1IuSU4uSUMuQVRPTUlDIEVORVJHWSBXRUFQT05TIEdSQURFXCJdLEVbXCJHUi5JTi5NMi5OVUNMRUFSIE1BVEVSSUFMIFBST0RVQ1RJT05cIl1dLElbXCJTLUctSU1GUy0tXCJdPVtFW1wiR1IuSU4uSUMuQVRPTUlDIEVORVJHWVwiXSxFW1wiR1IuSU4uTTIuTlVDTEVBUiBNQVRFUklBTCBTVE9SQUdFXCJdXSxJW1wiUy1HLUlNQS0tLVwiXT1bRVtcIkdSLklOLklDLkFJUkNSQUZUIFBST0RVQ1RJT04gJiBBU1NFTUJMWVwiXV0sSVtcIlMtRy1JTUUtLS1cIl09W0VbXCJHUi5JQy5GRi5DTEFTUyBWXCJdXSxJW1wiUy1HLUlNRy0tLVwiXT1bRVtcIkdSLkVRLlRBTktcIl1dLElbXCJTLUctSU1WLS0tXCJdPVtFW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl1dLElbXCJTLUctSU1OLS0tXCJdPVtFW1wiR1IuRVEuRE9aRVJcIl1dLElbXCJTLUctSU1OQi0tXCJdPVtFW1wiR1IuSU4uSUMuQlJJREdFXCJdXSxJW1wiUy1HLUlNQy0tLVwiXT1bRVtcIkdSLklDLkNCUk5cIl0sRVtcIkdSLklOLk0yLkNIRU1JQ0FMICYgQklPTE9HSUNBTCBXQVJGQVJFXCJdXSxJW1wiUy1HLUlNUy0tLVwiXT1bRVtcIkdSLklDLk5BVkFMXCJdLEVbXCJHUi5JTi5NMi5TSElQIENPTlNUUlVDVElPTlwiXV0sSVtcIlMtRy1JTU0tLS1cIl09W0VbXCJHUi5JQy5NSVNTSUxFXCJdXSxJW1wiUy1HLUlHLS0tLVwiXT1bRVtcIkdSLkkuR09WRVJOTUVOVFwiXV0sSVtcIlMtRy1JQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5CQVNFXCJdXSxJW1wiUy1HLUlCQS0tLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEVbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJW1wiUy1HLUlCTi0tLVwiXT1bRVtcIkdSLklDLk5BVkFMXCJdXSxJW1wiUy1HLUlULS0tLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdXSxJW1wiUy1HLUlYLS0tLVwiXT1bRVtcIkdSLklDLkZGLk1FRElDQUxcIl1dLElbXCJTLUctSVhILS0tXCJdPVtFW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbXCJTLUctSVJSLS0tXCJdPUlbXCJTLUctSVJTUi0tXCJdPVtFW1wiR1IuSU4uSUMuU0VBIFNVUkZBQ0UgSU5TVEFMTEFUSU9OLCBPSUwgUklHL1BMQVRGT1JNXCJdXX19O2Z1bmN0aW9uIGQoSSx0LEUsUixlLEEpe3ZhciBDPXQuZnJhbWUsVD10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFM9dC5udW1iZXJTSURDLE49RS5pY29uQ29sb3JbVF0sTz1FLmljb25GaWxsQ29sb3JbVF0sRz1FLmJsYWNrW1RdLG89RS53aGl0ZVtUXSxNPXt9O2Zvcih2YXIgaSBpbiBNW1wiU0UuSUMuTUlMSVRBUllcIl09YShcIk1JTFwiKSxNW1wiU0UuSUMuTUFOVUFMIFRSQUNLXCJdPWEoXCJNQU5cIiksTVtcIlNFLklDLkNPTUJBVEFOVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gODYuOSwxMTAgYyAtMy42LDIgLTcuMiwzLjkgLTEwLjgsNS45IDIuMSwyLjkgNi43LDMuOSAxMCwyLjEgMi42LC0wLjkgNC43LC0zLjggMy4xLC02LjEgLTAuOCwtMC42IC0xLjUsLTEuMyAtMi4zLC0xLjkgeiBtIDI2LjMsMC4xIGMgMy42LDIgNy4yLDMuOSAxMC44LDUuOSAtMi4xLDIuOSAtNi43LDMuOSAtMTAsMi4xIC0yLjYsLTAuOSAtNC43LC0zLjggLTMuMSwtNi4xIDAuOCwtMC42IDEuNSwtMS4zIDIuMywtMS45IHpcIixmaWxsOiExfSx7dHlwZTpcInBhdGhcIixkOlwibSAxMTIuOSwxMTAgYyAtNS42LC00IC0xMS4zLC03LjkgLTE2LjEsLTEyLjUgLTQuMiwtNC41IC03LC05LjggLTkuMiwtMTUuMSAtMC44LDQuNCAtMC45LDkuMyAyLjQsMTMuMiAzLjYsNC41IDguNiw4LjEgMTMuNSwxMS44IDIuMywxLjcgNC43LDMuMyA3LjEsNC44IDAuOCwtMC43IDEuNSwtMS41IDIuMywtMi4yIG0gLTI1LjcsMCBjIDUuNiwtNCAxMS4zLC03LjkgMTYuMSwtMTIuNSA0LjIsLTQuNSA3LC05LjggOS4yLC0xNS4xIDAuOCw0LjQgMC45LDkuMyAtMi40LDEzLjIgLTMuNiw0LjUgLTguNiw4LjEgLTEzLjUsMTEuOCAtMi4zLDEuNyAtNC43LDMuMyAtNy4xLDQuOCAtMC44LC0wLjcgLTEuNSwtMS41IC0yLjMsLTIuMlwiLGZpbGw6byxzdHJva2V3aWR0aDoyfV0sTVtcIlNFLklDLlNVUkZBQ0UgQ09NQkFUQU5ULCBMSU5FXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDAsMTIwIC0yNSwtMTcgMTUsMiAwLC0xMCA1LDAgMCwtNSAtMTUsMCAwLC01IDE1LDAgMCwtNSAxMCwwIDAsNSAxNSwwIDAsNSAtMTUsMCAwLDUgNSwwIDAsMTAgMTUsLTIgelwifSxNW1wiU0UuSUMuQ0FSUklFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4MCwxMDAgMjAsMjAgMjAsLTIwIC0yMCwwIDAsLTIwIC0yMCwwIHpcIn0sTVtcIlNFLklDLkJBVFRMRVNISVBcIl09YShcIkJCXCIpLE1bXCJTRS5JQy5DSVZJTElBTlwiXT1hKFwiQ0lWXCIpLE1bXCJTRS5JQy5DSVZJTElBTlwiXS5maWxsPVJ8fFM/TzohQyYmTyxNW1wiU0UuSUMuQ0lWSUxJQU5cIl0uc3Ryb2tlPUcsTVtcIlNFLklDLkNJVklMSUFOXCJdLnN0cm9rZXdpZHRoPTMsTVtcIlNFLklDLkNSVUlTRVJcIl09YShcIkNDXCIpLE1bXCJTRS5JQy5DUlVJU0VSLCBHVUlERUQgTUlTU0lMRVwiXT1hKFwiQ0dcIiksTVtcIlNFLklDLkRFU1RST1lFUlwiXT1hKFwiRERcIiksTVtcIlNFLklDLkZSSUdBVEVcIl09YShcIkZGXCIpLE1bXCJTRS5JQy5DT1JWRVRURVwiXT1hKFwiRlNcIiksTVtcIlNFLklDLkxJVFRPUkFMIENPTUJBVEFOVCBTSElQXCJdPWEoXCJMTFwiKSxNW1wiU0UuSUMuQU1QSElCSU9VUyBXQVJGQVJFIFNISVBcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTAwLDEyMCAyMCwwIG0gLTIwLDAgLTIwLC0yMCAxMCwwIDAsLTIwIDIwLDAgMCwyMCAxMCwwIHpcIn0sTVtcIlNFLklDLkFNUEhJQklPVVMgRk9SQ0UgRkxBR1NISVBcIl09YShcIkxDQ1wiKSxNW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUXCJdPWEoXCJMQVwiKSxNW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUIFNISVAsIEdFTkVSQUxcIl09YShcIkxIQVwiKSxNW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUIFNISVAsIE1VTFRJLVBVUlBPU0VcIl09YShcIkxIRFwiKSxNW1wiU0UuSUMuQU1QSElCSU9VUyBUUkFOU1BPUlQsIERPQ0tcIl09YShcIkxQRFwiKSxNW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUIFNISVAsIEhFTElDT1BURVJcIl09YShcIkxQSFwiKSxNW1wiU0UuSUMuTEFORElORyBTSElQXCJdPWEoXCJMU1wiKSxNW1wiU0UuSUMuTEFORElORyBDUkFGVFwiXT1hKFwiTENcIiksTVtcIlNFLklDLk1JTkUgV0FSRkFSRSBWRVNTRUxcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gOTguMyw4MSAwLDQuMSBjIC0yLjQsMC4zIC00LjYsMS40IC02LjQsMi45IGwgLTMuNSwtMy41IC0yLjQsMi40IDMuNiwzLjYgYyAtMC45LDEuMyAtMS41LDQuOSAtMS44LDYuNSBsIC0xMC44LDAgMCwzIDMsMCAyMCwyMCAyMCwtMjAgMywwIDAsLTMgLTEwLDAgYyAtMSwtMS43IC0yLC01LjMgLTMsLTYuNyBsIDQsLTMuNyAtMiwtMi40IC00LDMuNiBjIC0yLC0xLjQgLTQsLTIuNCAtNiwtMi43IGwgMCwtNC4xIHpcIn0sTVtcIlNFLklDLk1JTkVMQVlFUlwiXT1hKFwiTUxcIiksTVtcIlNFLklDLk1JTkVTV0VFUEVSXCJdPWEoXCJNU1wiKSxNW1wiU0UuSUMuTUlORVNXRUVQRVIsIERST05FXCJdPWEoXCJNU0RcIiksTVtcIlNFLklDLk1JTkVIVU5URVJcIl09YShcIk1IXCIpLE1bXCJTRS5JQy5NSU5FIENPVU5URVIgTUVBU1VSRSBTVVBQT1JUIFNISVBcIl09YShSP1wiTUFcIjpcIk1DU1wiKSxNW1wiU0UuSUMuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl09YShcIk1DTVwiKSxNW1wiU0UuSUMuU0VBIFNVUkZBQ0UgREVDT1lcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTA1LDExMCA5MCw5NSAxMDUsODAgeiBNIDg1LDExMCA3MCw5NSA4NSw4MCB6IG0gNDAsLTMwIC0xNSwxNSAxNSwxNSB6IG0gLTU1LDQwIDAsLTUgNTUsMCAwLDUgelwifSxNW1wiU0UuSUMuUEFUUk9MXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEwMCAyMCwyMCAyMCwtMjAgLTEwLDAgMCwtMjAgLTIwLDAgMCwyMCB6XCJ9LE1bXCJTRS5JQy5QQVRST0wgQ1JBRlRcIl09YShcIlBDXCIpLE1bXCJTRS5JQy5QQVRST0wgQU5USSBTVUJNQVJJTkUgV0FSRkFSRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMDAsMTIwIC0yNSwtMjUgNSwtNSAxMCwxMCA1LDAgMCwtMjAgMTAsMCAwLDIwIDUsMCAxMCwtMTAgNSw1IHpcIn0sTVtcIlNFLklDLlBBVFJPTCBBTlRJU0hJUCBNSVNTSUxFXCJdPWEoXCJQTVwiKSxNW1wiU0UuSUMuUEFUUk9MIFRPUlBFRE9cIl09YShcIlBUXCIpLE1bXCJTRS5JQy5QQVRST0wgR1VOXCJdPWEoXCJQR1wiKSxNW1wiU0UuSUMuUEFUUk9MIFNISVBcIl09W10sTVtcIlNFLklDLk1JTElUQVJZIFNQRUVEQk9BVFwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTIwLDEyMCAtNDAsMCAtMTUsLTI1IDE1LDAgNSwtMTUgMTAsMCAtNSwxNSA0NSwwIHpcIn0sTVtcIlNFLklDLk1JTElUQVJZIFNQRUVEQk9BVCwgUklHSUQtSFVMTCBJTkZMQVRBQkxFIEJPQVRcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwiTSA4NSA4MCBMIDgwIDk1IEwgNjUgOTUgTCA4MCAxMjAgTCAxMjAgMTIwIEwgMTM1IDk1IEwgOTAgOTUgTCA5NSA4MCBMIDg1IDgwIHogTSA4NyAxMDAuNyBMIDkzLjEgMTAwLjcgQyA5NC42IDEwMC43IDk1LjcgMTAwLjggOTYuNCAxMDEuMSBDIDk3LjEgMTAxLjMgOTcuNyAxMDEuOCA5OC4xIDEwMi40IEMgOTguNSAxMDMuMSA5OC43IDEwMy44IDk4LjcgMTA0LjcgQyA5OC43IDEwNS44IDk4LjQgMTA2LjcgOTcuOCAxMDcuNCBDIDk3LjEgMTA4LjEgOTYuMiAxMDguNSA5NC45IDEwOC43IEMgOTUuNiAxMDkuMSA5Ni4xIDEwOS40IDk2LjUgMTA5LjkgQyA5Ni45IDExMC4zIDk3LjQgMTExLjEgOTguMSAxMTIuMiBMIDk5LjkgMTE1IEwgOTYuNCAxMTUgTCA5NC4zIDExMS45IEMgOTMuNiAxMTAuOCA5My4xIDExMC4xIDkyLjggMTA5LjggQyA5Mi41IDEwOS41IDkyLjIgMTA5LjMgOTEuOSAxMDkuMiBDIDkxLjYgMTA5LjEgOTEuMiAxMDkgOTAuNSAxMDkgTCA4OS45IDEwOSBMIDg5LjkgMTE1IEwgODcgMTE1IEwgODcgMTAwLjcgeiBNIDEwMS41IDEwMC43IEwgMTA3LjIgMTAwLjcgQyAxMDguMyAxMDAuNyAxMDkuMiAxMDAuNyAxMDkuNyAxMDAuOCBDIDExMC4zIDEwMC45IDExMC44IDEwMS4xIDExMS4yIDEwMS40IEMgMTExLjcgMTAxLjcgMTEyIDEwMi4xIDExMi4zIDEwMi42IEMgMTEyLjYgMTAzLjEgMTEyLjcgMTAzLjcgMTEyLjggMTA0LjMgQyAxMTIuNyAxMDUgMTEyLjYgMTA1LjYgMTEyLjIgMTA2LjEgQyAxMTEuOSAxMDYuNyAxMTEuNCAxMDcuMSAxMTAuOCAxMDcuNCBDIDExMS42IDEwNy43IDExMi4zIDEwOC4xIDExMi44IDEwOC43IEMgMTEzLjIgMTA5LjMgMTEzLjUgMTEwIDExMy41IDExMC44IEMgMTEzLjUgMTExLjUgMTEzLjMgMTEyLjEgMTEzIDExMi44IEMgMTEyLjcgMTEzLjQgMTEyLjMgMTEzLjggMTExLjggMTE0LjIgQyAxMTEuMiAxMTQuNiAxMTAuNiAxMTQuOCAxMDkuOCAxMTQuOSBDIDEwOS4zIDExNSAxMDguMiAxMTUgMTA2LjMgMTE1IEwgMTAxLjUgMTE1IEwgMTAxLjUgMTAwLjcgeiBNIDEwNC4zIDEwMy4xIEwgMTA0LjMgMTA2LjQgTCAxMDYuMyAxMDYuNCBDIDEwNy40IDEwNi40IDEwOC4xIDEwNi4zIDEwOC4zIDEwNi4zIEMgMTA4LjggMTA2LjMgMTA5LjIgMTA2LjEgMTA5LjUgMTA1LjggQyAxMDkuOCAxMDUuNSAxMDkuOSAxMDUuMSAxMDkuOSAxMDQuNyBDIDEwOS45IDEwNC4yIDEwOS44IDEwMy45IDEwOS42IDEwMy42IEMgMTA5LjMgMTAzLjMgMTA5IDEwMy4yIDEwOC41IDEwMy4xIEMgMTA4LjIgMTAzLjEgMTA3LjQgMTAzLjEgMTA2IDEwMy4xIEwgMTA0LjMgMTAzLjEgeiBNIDg5LjkgMTAzLjEgTCA4OS45IDEwNi44IEwgOTIgMTA2LjggQyA5My40IDEwNi44IDk0LjMgMTA2LjcgOTQuNiAxMDYuNiBDIDk1IDEwNi40IDk1LjIgMTA2LjMgOTUuNCAxMDYgQyA5NS42IDEwNS43IDk1LjcgMTA1LjMgOTUuOCAxMDQuOSBDIDk1LjcgMTA0LjQgOTUuNiAxMDQgOTUuMyAxMDMuNyBDIDk1LjEgMTAzLjQgOTQuNyAxMDMuMiA5NC4zIDEwMy4yIEMgOTQgMTAzLjEgOTMuMyAxMDMuMSA5Mi4yIDEwMy4xIEwgODkuOSAxMDMuMSB6IE0gMTA0LjMgMTA4LjggTCAxMDQuMyAxMTIuNiBMIDEwNyAxMTIuNiBDIDEwOC4xIDExMi42IDEwOC43IDExMi42IDEwOSAxMTIuNSBDIDEwOS40IDExMi40IDEwOS44IDExMi4yIDExMC4xIDExMS45IEMgMTEwLjMgMTExLjYgMTEwLjUgMTExLjIgMTEwLjUgMTEwLjcgQyAxMTAuNSAxMTAuMyAxMTAuNCAxMDkuOSAxMTAuMiAxMDkuNiBDIDEwOS45IDEwOS4zIDEwOS42IDEwOS4xIDEwOS4zIDEwOSBDIDEwOC45IDEwOC44IDEwOCAxMDguOCAxMDYuNyAxMDguOCBMIDEwNC4zIDEwOC44IHpcIn0se3R5cGU6XCJ0ZXh0XCIsZmlsbDpSP086IUMmJk8sc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjIwLHRleHQ6XCJSQlwifV0sTVtcIlNFLklDLk1JTElUQVJZIEpFVFNLSVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTM1LDEwNSAwLDE1IC02MCwwIC0xMCwtMTUgMjAsLTI1IDEwLDAgMCwxMCAtNSwwIC01LDE1IHpcIn0sTVtcIlNFLklDLlVOTUFOTkVEIFNVUkZBQ0UgV0FURVIgVkVISUNMRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCw4NCA0MCwyMCA0MCwtMjAgMCw4IC00MCwyNSAtNDAsLTI1IHpcIixzdHJva2U6ITF9LE1bXCJTRS5JQy5OQVZZIFRBU0sgT1JHQU5JWkFUSU9OIFVOSVRcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDExMCw4MCAxNSwxNSAwLDI1IE0gOTAsODAgNzUsOTUgbCAwLDI1XCIsZmlsbDohMX1dLFImJk1bXCJTRS5JQy5OQVZZIFRBU0sgT1JHQU5JWkFUSU9OIFVOSVRcIl0ucHVzaCh7dHlwZTpcInBhdGhcIixkOlwibSAxMDAsODAgLTE1LDE1IDAsMjUgMzAsMCAwLC0yNSAtMTUsLTE1XCJ9KSxNW1wiU0UuSUMuTkFWWSBUQVNLIEZPUkNFXCJdPVtNW1wiU0UuSUMuTkFWWSBUQVNLIE9SR0FOSVpBVElPTiBVTklUXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OlI/MTUwOjEyMCxmb250c2l6ZTozMCx0ZXh0OlwiVEZcIn1dLE1bXCJTRS5JQy5OQVZZIFRBU0sgR1JPVVBcIl09W01bXCJTRS5JQy5OQVZZIFRBU0sgT1JHQU5JWkFUSU9OIFVOSVRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6Uj8xNTA6MTIwLGZvbnRzaXplOjMwLHRleHQ6XCJUR1wifV0sTVtcIlNFLklDLk5BVlkgVEFTSyBVTklUXCJdPVtNW1wiU0UuSUMuTkFWWSBUQVNLIE9SR0FOSVpBVElPTiBVTklUXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OlI/MTUwOjEyMCxmb250c2l6ZTozMCx0ZXh0OlwiVFVcIn1dLE1bXCJTRS5JQy5OQVZZIFRBU0sgRUxFTUVOVFwiXT1bTVtcIlNFLklDLk5BVlkgVEFTSyBPUkdBTklaQVRJT04gVU5JVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTpSPzE1MDoxMjAsZm9udHNpemU6MzAsdGV4dDpcIlRFXCJ9XSxNW1wiU0UuSUMuQ09OVk9ZXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDExNSAtMjAsMCAwLC0zNSA4MCwwIDAsMzUgLTIwLDAgMCwtMjAgLTQwLDAgelwifSxNW1wiU0UuSUMuTk9OQ09NQkFUQU5UXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDgwLDEwMCAwLC0yMCA0MCwwIDAsMjAgMTUsMCAwLDIwIC03MCwwIDAsLTIwIHpcIn0sTVtcIlNFLklDLkFVWElMSUFSWSBTSElQXCJdPWEoUj9cIkFSXCI6XCJBQVwiKSxNW1wiU0UuSUMuQU1NVU5JVElPTiBTSElQXCJdPWEoXCJBRVwiKSxNW1wiU0UuSUMuU1RPUkVTIFNISVBcIl09YShcIkFGXCIpLE1bXCJTRS5JQy5BVVhJTElBUlkgRkxBRyBPUiBDT01NQU5EIFNISVBcIl09YShcIkFHRlwiKSxNW1wiU0UuSUMuSU5URUxMSUdFTkNFIENPTExFQ1RPUlwiXT1hKFI/XCJKSVwiOlwiQUlcIiksTVtcIlNFLklDLk9DRUFOIFJFU0VBUkNIIFNISVBcIl09YShcIkFHT1wiKSxNW1wiU0UuSUMuU1VSVkVZIFNISVBcIl09YShcIkFHU1wiKSxNW1wiU0UuSUMuSE9TUElUQUwgU0hJUFwiXT1hKFwiQUhcIiksTVtcIlNFLklDLkNBUkdPIFNISVBcIl09YShcIkFLXCIpLE1bXCJTRS5JQy5DT01CQVQgU1VQUE9SVCBTSElQLCBGQVNUXCJdPWEoXCJBT0VcIiksTVtcIlNFLklDLk9JTEVSLCBSRVBMRU5JU0hNRU5UXCJdPWEoXCJBT1wiKSxNW1wiU0UuSUMuUkVQQUlSIFNISVBcIl09YShcIkFSXCIpLE1bXCJTRS5JQy5TVUJNQVJJTkUgVEVOREVSXCJdPWEoXCJBU1wiKSxNW1wiU0UuSUMuVFVHLCBPQ0VBTiBHT0lOR1wiXT1hKFI/XCJBU1wiOlwiQVRcIiksTVtcIlNFLklDLlNFUlZJQ0UgQ1JBRlQsIFlBUkQsIEdFTkVSQUxcIl09YShSP1wiWVlcIjpcIllUXCIpLE1bXCJTRS5JQy5CQVJHRSwgTk9UIFNFTEYtUFJPUEVMTEVEXCJdPWEoXCJZQlwiKSxNW1wiU0UuSUMuQkFSR0UsIFNFTEYtUFJPUEVMTEVEXCJdPWEoXCJZU1wiKSxNW1wiU0UuSUMuVFVHLCBIQVJCT1VSXCJdPWEoXCJZVFwiKSxNW1wiU0UuSUMuTEFVTkNIXCJdPWEoXCJZRlRcIiksTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IUMmJk8sZDpcIm0gNzUsMTAwIDAsLTM1IDUwLDAgMCwzNSAyMCwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHpcIn0sTVtcIlNFLklDLkNBUkdPLCBHRU5FUkFMXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpSP1wiQ0FcIjpcIkFcIn1dLE1bXCJTRS5JQy5DT05UQUlORVIgU0hJUFwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6XCJDXCJ9XSxNW1wiU0UuSUMuRFJFREdFXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIkRcIn1dLE1bXCJTRS5JQy5SQURBUlwiXT17dHlwZTpcInBhdGhcIixkOlwiTTcyLDk1IGwzMCwtMjUgMCwyNSAzMCwtMjUgTTcwLDcwIGMwLDM1IDE1LDUwIDUwLDUwXCIsZmlsbDohMX0sTVtcIlNFLklDLlJPTEwgT04tUk9MTCBPRkZcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTpcIjMwXCIsdGV4dDpSP1wiUk9cIjpcIkVcIn1dLE1bXCJTRS5JQy5GRVJSWVwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6Uj9cIkZFXCI6XCJGXCJ9XSxNW1wiU0UuSUMuSEVBVlkgTElGVFwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6XCJIXCJ9XSxNW1wiU0UuSUMuSE9WRVJDUkFGVFwiXT17dHlwZTpcInBhdGhcIixkOlI/XCJtIDY1LDEwMCAwLC0zMCA1LDEwIDYwLDAgNSwtMTAgMCwzMCAxMCwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHpcIjpcIm0gOTAsODAgMCwxNS42IEMgNzguNCw5Ni45IDcwLDEwMC42IDcwLDEwNSBjIDAsNS41IDEzLjQsMTAgMzAsMTAgMTYuNiwwIDMwLC00LjUgMzAsLTEwIDAsLTQuNCAtOC40LC04LjEgLTIwLC05LjQgTCAxMTAsODAgOTAsODAgeiBtIC0xNSw0MCA1MCwwXCJ9LE1bXCJTRS5JQy5IT1ZFUkNSQUZUIDI1MjVEXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIkpcIn1dLE1bXCJTRS5JQy5IT1ZFUkNSQUZUIENJVklMSUFOXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFDJiZPLGQ6Uj9cIm0gNjUsMTAwIDAsLTMwIDUsMTAgNjAsMCA1LC0xMCAwLDMwIDEwLDAgLTE1LDM1IC02MCwwIC0xNSwtMzUgelwiOlwibSA5MCw4MCAwLDE1LjYgQyA3OC40LDk2LjkgNzAsMTAwLjYgNzAsMTA1IGMgMCw1LjUgMTMuNCwxMCAzMCwxMCAxNi42LDAgMzAsLTQuNSAzMCwtMTAgMCwtNC40IC04LjQsLTguMSAtMjAsLTkuNCBMIDExMCw4MCA5MCw4MCB6IG0gLTE1LDQwIDUwLDBcIn0sTVtcIlNFLklDLkhPVkVSQ1JBRlQgTk9OQ09NQkFUQU5UXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA2NSwxMDAgMCwtMzAgNSwxMCA2MCwwIDUsLTEwIDAsMzAgMTAsMCAtMTUsMzUgLTYwLDAgLTE1LC0zNSB6XCIsc3Ryb2tld2lkdGg6ITF9LFI/e3R5cGU6XCJ0ZXh0XCIsZmlsbDpvLHN0cm9rZTohMSx4OjEwMCx5OjEyMCxmb250c2l6ZTozMCx0ZXh0OlwiTkNcIn06W11dLE1bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBMQVNIIENBUlJJRVIgKFdJVEggQkFSR0VTKVwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6XCJMXCJ9XSxNW1wiU0UuSUMuT0lMRVIvVEFOS0VSXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpSP1wiT1RcIjpcIk9cIn1dLE1bXCJTRS5JQy5QQVNTRU5HRVIgU0hJUFwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6Uj9cIlBBXCI6XCJQXCJ9XSxNW1wiU0UuSUMuVFVHLCBPQ0VBTiBHT0lORyBDSVZJTElBTlwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6Uj9cIlRVXCI6XCJUXCJ9XSxNW1wiU0UuSUMuVE9XXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMTUsZm9udHNpemU6MzAsdGV4dDpcIlRXXCJ9XSxNW1wiU0UuSUMuVFJBTlNQT1JUIFNISVAsIEhBWkFSRE9VUyBNQVRFUklBTFwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6XCJIWlwifV0sTVtcIlNFLklDLkpVTksvREhPV1wiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTE1LGZvbnRzaXplOjMwLHRleHQ6XCJRSlwifV0sTVtcIlNFLklDLkJBUkdFLCBOT1QgU0VMRi1QUk9QRUxMRURcIl09W01bXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBHRU5FUkFMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExNSxmb250c2l6ZTozMCx0ZXh0OlwiWUJcIn1dLE1bXCJTRS5JQy5IT1NQSVRBTCBTSElQMlwiXT1bTVtcIlNFLklDLk1FUkNIQU5UIFNISVAsIEdFTkVSQUxcIl0se3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDk1LDk1IDAsLTE1IDEwLDAgMCwxNSAxNSwwIDAsMTAgLTE1LDAgMCwxNSAtMTAsMCAwLC0xNSAtMTUsMCAwLC0xMCB6XCJ9XSxNW1wiU0UuSUMuRklTSElORyBWRVNTRUxcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IUMmJk8sZDpcIm0gNzUsMTAwIDAsLTE1IDIwLDAgMCwxNSA1MCwwIC0xNSwzNSAtNjAsMCAtMTUsLTM1IHogTSAxMDUsNTcuNCAxMDUsMTAwIG0gMzAsLTM1IC0zMCwzNVwifSxNW1wiU0UuSUMuRFJJRlRFUlwiXT1bTVtcIlNFLklDLkZJU0hJTkcgVkVTU0VMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiREZcIn1dLE1bXCJTRS5JQy5UUkFXTEVSXCJdPVtNW1wiU0UuSUMuRklTSElORyBWRVNTRUxcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTI1LGZvbnRzaXplOjMwLHRleHQ6XCJUUlwifV0sTVtcIlNFLklDLkZJU0hJTkcgVkVTU0VMIERSRURHRVwiXT1bTVtcIlNFLklDLkZJU0hJTkcgVkVTU0VMXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiRFJcIn1dLE1bXCJTRS5JQy5MQVcgRU5GT1JDRU1FTlQgVkVTU0VMXCJdPVtNW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXSx7dHlwZTpcInBhdGhcIixkOlwibSAxMzUsMTAwIC0xNSwzNSAtMTAsMCAxNSwtMzUgelwifV0sTVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIFNBSUxJTkcgQk9BVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohQyYmTyxkOlwibSAxMDUsNTUgMCw0MCAzNSwwIHogbSAtNSwtNSAwLDUwIG0gNDUsMCAtMTUsMzUgLTYwLDAgLTE1LC0zNSB6XCJ9LE1bXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRURcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDpSP086IUMmJk8sZDpcIm0gNzAsOTcuNCAxNSwtMzAgMTAsMCAtMTUsMzAgNjUsMCAtMTUsMzUgLTYwLDAgLTE1LC0zNSB6XCJ9LE1bXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRUQsIFJJR0lELUhVTEwgSU5GTEFUQUJMRSBCT0FUXCJdPVtNW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgTU9UT1JJWkVEXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjEyNSxmb250c2l6ZTozMCx0ZXh0OlwiUkJcIn1dLE1bXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRUQsIFNQRUVEQk9BVFwiXT1bTVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMjUsZm9udHNpemU6MzAsdGV4dDpcIlNQXCJ9XSxNW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgSkVUU0tJXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6Uj9POiFDJiZPLGQ6XCJtIDg1LDYwIC0zMCw0NSAxMCwxNSA3NSwwIDAsLTIwIC02MCwwIDEwLC0zMCA1LDAgMCwtMTAgelwifSxNW1wiU0UuSUMuVU5NQU5ORUQgU1VSRkFDRSBXQVRFUiBWRUhJQ0xFIChVU1YpXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ISghUiYmIVMpJiZPLHN0cm9rZTpHLGQ6XCJtIDYwLDg0IDQwLDIwIDQwLC0yMCAwLDggLTQwLDI1IC00MCwtMjUgelwifSxNW1wiU0UuSUMuT1dOIFNISVBcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6ZT9OOk8sZDpcIm0gNTAsMTAwIDEwMCwwIG0gLTUwLC01MCAwLDEwMCBtIDUwLC01MCBjIDAsMjcuNiAtMjIuNCw1MCAtNTAsNTAgLTI3LjYsMCAtNTAsLTIyLjQgLTUwLC01MCAwLC0yNy42IDIyLjQsLTUwIDUwLC01MCAyNy42LDAgNTAsMjIuNCA1MCw1MCB6XCJ9LE1bXCJTRS5JQy5ESVRDSEVEIEFJUkNSQUZUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ZT9OOk8sc3Ryb2tlOmU/TjpPLGQ6XCJtIDE0NSwxMjAgLTE1LC0xNSBtIC0xNSwxNSAxNSwtMTUgbSAtNzUsMTUgMTUsLTE1IG0gMTUsMTUgLTE1LC0xNSBtIDEwLDEwIDI1LC0zMCAtMTAsLTEwIDEwLC0xMCAyMCwyMCAtMTAsMzUgLTE1LC0xNSAtMTUsMTUgelwifSxNW1wiU0UuSUMuUEVSU09OIElOIFdBVEVSXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ZT9OOk8sc3Ryb2tlOmU/TjpPLGQ6XCJtIDEwNSwxMTAgMTAsLTEwIDAsLTE1IDUsMCAwLDIwIC0xMCwxMCB6IG0gLTEwLDAgLTEwLC0xMCAwLC0xNSAtNSwwIDAsMjAgMTAsMTAgeiBtIDUsLTUgMCwtMTAgLTUsMCAtNSwtNSAwLC0xMCA1LC01IDEwLDAgNSw1IDAsMTAgLTUsNSAtNSwwIG0gLTE1LDI1IDE1LC0xNSBtIDQ1LDE1IC0xNSwtMTUgbSAtMTUsMTUgMTUsLTE1IG0gLTc1LDE1IDE1LC0xNSBtIDE1LDE1IC0xNSwtMTUgbSA0NSwxNSAtMTUsLTE1XCJ9LE1bXCJTRS5JQy5ESVNUUkVTU0VEIFZFU1NFTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOmU/TjpPLHN0cm9rZTplP046TyxkOlwibSAxMjAsNjUgLTIwLDIwIDIwLC0yMCBtIC01LDU1IC0zNSwtMzUgMCwtMjAgNDUsNDUgeiBtIC0zMCwwIC0xNSwtMTUgbSAtMTUsMTUgMTUsLTE1IG0gNDUsMTUgMTUsLTE1IG0gMTUsMTUgLTE1LC0xNSBtIC00NSwxNSAxNSwtMTVcIn0sTVtcIlNFLklDLlNFQSBNSU5FTElLRVwiXT17dHlwZTpcInBhdGhcIixmaWxsOmU/TjpPLHN0cm9rZTplP046TyxkOlwibSAxMTcuNyw3NSBjIDMuNSwtMy41IDcuMSwtNy4xIDcuMSwtNy4xIGwgNy4xLDcuMSAtNy4xLDcuMSBtIC00OS41LDAgYyAtMy41LC0zLjUgLTcuMSwtNy4xIC03LjEsLTcuMSBsIDcuMSwtNy4xIDcuMSw3LjEgTSA5NSw3MCBjIDAsLTUgMCwtMTAgMCwtMTAgbCAxMCwwIDAsMTAgbSAyNSwzMCBjIDAsMTYuNiAtMTMuNCwzMCAtMzAsMzAgLTE2LjYsMCAtMzAsLTEzLjQgLTMwLC0zMCAwLC0xNi42IDEzLjQsLTMwIDMwLC0zMCAxNi42LDAgMzAsMTMuNCAzMCwzMCB6XCJ9LE1bXCJTRS5JQy5OQVZJR0FUSU9OQUxcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6ZT9OOlwicmVkXCIsZDpcIm0gNzUsOTAgLTEwLDEwIDcwLDAgLTEwLDEwXCJ9LE1bXCJTRS5JQy5JQ0VCRVJHXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ZT9OOk8sc3Ryb2tlOmU/TjpPLGQ6XCJtIDc1LDEwMCAyNSwtMzAgMjUsMzAgLTUsMTUgLTUsLTUgLTE1LDIwIC0xNSwtMjAgLTUsNSB6IG0gLTE1LDAgODAsMFwifSxNW1wiU0UuSUMuRlVTRUQgVFJBQ0tcIl09W2EoXCI/XCIpLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsNjUgMTAsMzUgLTEwLDM1IDYwLDAgLTEwLC0zNSAxMCwtMzUgelwifV0sTVtcIlNFLk0xLk9XTiBTSElQXCJdPWwoXCJPV05cIiksTVtcIlNFLk0xLkFOVElBSVIgV0FSRkFSRVwiXT1sKFwiQUFXXCIpLE1bXCJTRS5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl09bChcIkFTV1wiKSxNW1wiU0UuTTEuRVNDT1JUXCJdPWwoXCJFXCIpLE1bXCJTRS5NMS5FTEVDVFJPTklDIFdBUkZBUkVcIl09bChcIkVXXCIpLE1bXCJTRS5NMS5JTlRFTExJR0VOQ0UsIFNVUlZFSUxMQU5DRSwgUkVDT05OQUlTU0FOQ0VcIl09bChcIklTUlwiKSxNW1wiU0UuTTEuTUlORSBDT1VOVEVSIE1FQVNVUkVTXCJdPWwoXCJNQ01cIiksTVtcIlNFLk0xLk1JU1NJTEUgREVGRU5TRVwiXT1sKFwiTURcIiksTVtcIlNFLk0xLk1FRElDQUxcIl09bChcIk1FXCIpLE1bXCJTRS5NMS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXT1sKFwiTUNNXCIpLE1bXCJTRS5NMS5NSU5FIFdBUkZBUkVcIl09bChcIk1JV1wiKSxNW1wiU0UuTTEuUkVNT1RFIE1VTFRJLU1JU1NJT04gVkVISUhMRVwiXT1sKFwiUk1WXCIpLE1bXCJTRS5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VcIl09bChcIlNPRlwiKSxNW1wiU0UuTTEuU1VSRkFDRSBXQVJGQVJFXCJdPWwoXCJTVVdcIiksTVtcIlNFLk0xLkJBTExJU1RJQyBNSVNTSUxFXCJdPWwoXCJCXCIpLE1bXCJTRS5NMS5HVUlERUQgTUlTU0lMRVwiXT1sKFwiR1wiKSxNW1wiU0UuTTEuT1RIRVIgR1VJREVEIE1JU1NJTEVcIl09bChcIk1cIiksTVtcIlNFLk0xLlRPUlBFRE9cIl09bChcIlRcIiksTVtcIlNFLk0xLkNZQkVSU1BBQ0VcIl09bChcIkNZQlwiKSxNW1wiU0UuTTEuSElKQUNLRVJcIl09bChcIkhKXCIpLE1bXCJTRS5NMi5DWUJFUlNQQUNFXCJdPXIoXCJDWUJcIiksTVtcIlNFLk0xLkRST05FLUVRVUlQUEVEXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA4MCw2NSAyMCwxMyAyMCwtMTMgMCwtNSAtMjAsMTAgLTIwLC0xMCB6XCJ9LE1bXCJTRS5NMS5IRUxJQ09QVEVSLUVRVUlQUEVEXCJdPWwoXCJIXCIpLE1bXCJTRS5NMS5CQUxMSVNUSUMgTUlTU0lMRSBERUZFTlNFLCBTSE9PVEVSXCJdPWwoXCJCTVwiKSxNW1wiU0UuTTEuQkFMTElTVElDIE1JU1NJTEUgREVGRU5TRSwgTE9ORy0gUkFOR0UgU1VSVkVJTExBTkNFIEFORCBUUkFDSyAoTFJTJlQpXCJdPWwoXCJTVFwiKSxNW1wiU0UuTTEuU0VBLUJBU0UgWC1CQU5EXCJdPWwoXCJTQlhcIiksTVtcIlNFLk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXT1sKFwiSFwiKSxNW1wiU0UuTTIuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdPXIoXCJBU1dcIiksTVtcIlNFLk0yLk1JTkUgV0FSRkFSRVwiXT1yKFwiTUlXXCIpLE1bXCJTRS5NMi5TVVJGQUNFIFdBUkZBUkVcIl09cihcIlNVV1wiKSxNW1wiU0UuTTIuTlVDTEVBUiBQT1dFUkVEXCJdPXIoXCJOXCIpLE1bXCJTRS5NMi5IRUFWWVwiXT1yKFwiSFwiKSxNW1wiU0UuTTIuTElHSFRcIl09cihcIkxcIiksTVtcIlNFLk0yLk1FRElVTVwiXT1yKFwiTVwiKSxNW1wiU0UuTTIuRE9DS1wiXT1yKFwiRFwiKSxNW1wiU0UuTTIuTE9HSVNUSUNTXCJdPXIoXCJMT0dcIiksTVtcIlNFLk0yLlRBTktcIl09cihcIlRcIiksTVtcIlNFLk0yLlZFSElDTEVcIl09cihcIlZcIiksTVtcIlNFLk0yLkZBU1RcIl09cihcIkZcIiksTVtcIlNFLk0yLkFJUi1DVVNISU9ORURcIl09cihcIkpcIiksTVtcIlNFLk0yLkFJUi1DVVNISU9ORUQgKFVTQSBPTkxZKVwiXT1yKFwiQUNcIiksTVtcIlNFLk0yLkhZRFJPRk9JTFwiXT1yKFwiS1wiKSxNW1wiU0UuTTIuQVVUT05PTU9VUyBDT05UUk9MXCJdPXIoXCJBVVRcIiksTVtcIlNFLk0yLlJFTU9URUxZIFBJTE9URURcIl09cihcIlJQXCIpLE1bXCJTRS5NMi5FWFBFTkRBQkxFXCJdPXIoXCJFWFBcIiksTSlNLmhhc093blByb3BlcnR5KGkpJiYoSS5oYXNPd25Qcm9wZXJ0eShpKSYmY29uc29sZS53YXJuKFwiT3ZlcnJpZGUgb2Y6IFwiK2kpLG4uY2FsbCh0aGlzLE1baV0sTiksSVtpXT1NW2ldKX12YXIgcD17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2RdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLVMtLS0tLS0tXCJdPVtdLElbXCJTLVMtQy0tLS0tXCJdPVtFW1wiU0UuSUMuQ09NQkFUQU5UXCJdXSxJW1wiUy1TLUNMLS0tLVwiXT1bRVtcIlNFLklDLlNVUkZBQ0UgQ09NQkFUQU5ULCBMSU5FXCJdXSxJW1wiUy1TLUNMQ1YtLVwiXT1bRVtcIlNFLklDLkNBUlJJRVJcIl1dLElbXCJTLVMtQ0xCQi0tXCJdPVtFW1wiU0UuSUMuQkFUVExFU0hJUFwiXV0sSVtcIlMtUy1DTENDLS1cIl09W0VbXCJTRS5JQy5DUlVJU0VSXCJdXSxJW1wiUy1TLUNMREQtLVwiXT1bRVtcIlNFLklDLkRFU1RST1lFUlwiXV0sSVtcIlMtUy1DTEZGLS1cIl09W0VbXCJTRS5JQy5GUklHQVRFXCJdXSxJW1wiUy1TLUNMTEwtLVwiXT1bRVtcIlNFLklDLkxJVFRPUkFMIENPTUJBVEFOVCBTSElQXCJdXSxJW1wiUy1TLUNMTExBU1wiXT1bRVtcIlNFLklDLkxJVFRPUkFMIENPTUJBVEFOVCBTSElQXCJdLEVbXCJTRS5NMi5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLElbXCJTLVMtQ0xMTE1JXCJdPVtFW1wiU0UuSUMuTElUVE9SQUwgQ09NQkFUQU5UIFNISVBcIl0sRVtcIlNFLk0yLk1JTkUgV0FSRkFSRVwiXV0sSVtcIlMtUy1DTExMU1VcIl09W0VbXCJTRS5JQy5MSVRUT1JBTCBDT01CQVRBTlQgU0hJUFwiXSxFW1wiU0UuTTIuU1VSRkFDRSBXQVJGQVJFXCJdXSxJW1wiUy1TLUNBLS0tLVwiXT1bRVtcIlNFLklDLkFNUEhJQklPVVMgV0FSRkFSRSBTSElQXCJdXSxJW1wiUy1TLUNBTEEtLVwiXT1bUj9FW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUXCJdOkVbXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFQgU0hJUCwgR0VORVJBTFwiXV0sSVtcIlMtUy1DQUxTLS1cIl09W0VbXCJTRS5JQy5MQU5ESU5HIFNISVBcIl1dLElbXCJTLVMtQ0FMU00tXCJdPVtFW1wiU0UuSUMuTEFORElORyBTSElQXCJdLEVbXCJTRS5NMi5NRURJVU1cIl1dLElbXCJTLVMtQ0FMU1QtXCJdPVtFW1wiU0UuSUMuTEFORElORyBTSElQXCJdLEVbXCJTRS5NMi5UQU5LXCJdXSxJW1wiUy1TLUNBTEMtLVwiXT1bRVtcIlNFLklDLkxBTkRJTkcgQ1JBRlRcIl1dLElbXCJTLVMtQ00tLS0tXCJdPVtFW1wiU0UuSUMuTUlORSBXQVJGQVJFIFZFU1NFTFwiXV0sSVtcIlMtUy1DTU1MLS1cIl09W0VbXCJTRS5JQy5NSU5FTEFZRVJcIl1dLElbXCJTLVMtQ01NUy0tXCJdPVtFW1wiU0UuSUMuTUlORVNXRUVQRVJcIl1dLElbXCJTLVMtQ01NSC0tXCJdPVtFW1wiU0UuSUMuTUlORUhVTlRFUlwiXV0sSVtcIlMtUy1DTU1BLS1cIl09W0VbXCJTRS5JQy5NSU5FIENPVU5URVIgTUVBU1VSRSBTVVBQT1JUIFNISVBcIl1dLElbXCJTLVMtQ01NRC0tXCJdPVtFW1wiU0UuSUMuTUlORVNXRUVQRVIsIERST05FXCJdXSxJW1wiUy1TLUNQLS0tLVwiXT1bRVtcIlNFLklDLlBBVFJPTFwiXV0sSVtcIlMtUy1DUFNCLS1cIl09W0VbXCJTRS5JQy5QQVRST0wgQ1JBRlRcIl1dLElbXCJTLVMtQ1BTVS0tXCJdPVtFW1wiU0UuSUMuUEFUUk9MIEFOVEkgU1VCTUFSSU5FIFdBUkZBUkVcIl1dLElbXCJTLVMtQ1BTVU0tXCJdPVtFW1wiU0UuSUMuUEFUUk9MIEFOVElTSElQIE1JU1NJTEVcIl1dLElbXCJTLVMtQ1BTVVQtXCJdPVtFW1wiU0UuSUMuUEFUUk9MIFRPUlBFRE9cIl1dLElbXCJTLVMtQ1BTVUctXCJdPVtFW1wiU0UuSUMuUEFUUk9MIEdVTlwiXV0sSVtcIlMtUy1DSC0tLS1cIl09W0VbXCJTRS5JQy5IT1ZFUkNSQUZUXCJdXSxJW1wiUy1TLUctLS0tLVwiXT1bRVtcIlNFLklDLk5BVlkgVEFTSyBPUkdBTklaQVRJT04gVU5JVFwiXV0sSVtcIlMtUy1HRi0tLS1cIl09SVtcIlMtUy1HVC0tLS1cIl09W0VbXCJTRS5JQy5OQVZZIFRBU0sgRk9SQ0VcIl1dLElbXCJTLVMtR0ctLS0tXCJdPVtFW1wiU0UuSUMuTkFWWSBUQVNLIEdST1VQXCJdXSxJW1wiUy1TLUdVLS0tLVwiXT1bRVtcIlNFLklDLk5BVlkgVEFTSyBVTklUXCJdXSxJW1wiUy1TLUdFLS0tLVwiXT1bRVtcIlNFLklDLk5BVlkgVEFTSyBFTEVNRU5UXCJdXSxJW1wiUy1TLUdDLS0tLVwiXT1bRVtcIlNFLklDLkNPTlZPWVwiXV0sSVtcIlMtUy1DRC0tLS1cIl09W0VbXCJTRS5JQy5TRUEgU1VSRkFDRSBERUNPWVwiXV0sSVtcIlMtUy1DVS0tLS1cIl09W0VbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEVcIl1dLElbXCJTLVMtQ1VNLS0tXCJdPVtFW1wiU0UuSUMuVU5NQU5ORUQgU1VSRkFDRSBXQVRFUiBWRUhJQ0xFXCJdLEVbXCJTRS5NMS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXV0sSVtcIlMtUy1DVVMtLS1cIl09W0VbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEVcIl0sRVtcIlNFLk0xLkFOVElTVUJNQVJJTkUgV0FSRkFSRVwiXV0sSVtcIlMtUy1DVU4tLS1cIl09W0VbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEVcIl0sRVtcIlNFLk0xLlNVUkZBQ0UgV0FSRkFSRVwiXV0sSVtcIlMtUy1DVVItLS1cIl09W0VbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEVcIl0sRVtcIlNFLk0xLlJFTU9URSBNVUxUSS1NSVNTSU9OIFZFSElITEVcIl1dLElbXCJTLVMtTi0tLS0tXCJdPVtFW1wiU0UuSUMuTk9OQ09NQkFUQU5UXCJdXSxJW1wiUy1TLU5SLS0tLVwiXT1bRVtcIlNFLklDLkFVWElMSUFSWSBTSElQXCJdXSxJW1wiUy1TLU5SQS0tLVwiXT1bRVtcIlNFLklDLkFNTVVOSVRJT04gU0hJUFwiXV0sSVtcIlMtUy1OUk8tLS1cIl09W0VbXCJTRS5JQy5PSUxFUiwgUkVQTEVOSVNITUVOVFwiXV0sSVtcIlMtUy1ORi0tLS1cIl09SVtcIlMtUy1ORlQtLS1cIl09W0VbXCJTRS5JQy5UVUcsIE9DRUFOIEdPSU5HXCJdXSxJW1wiUy1TLU5JLS0tLVwiXT1bRVtcIlNFLklDLklOVEVMTElHRU5DRSBDT0xMRUNUT1JcIl1dLElbXCJTLVMtTk0tLS0tXCJdPVtFW1wiU0UuSUMuSE9TUElUQUwgU0hJUFwiXV0sSVtcIlMtUy1OUy0tLS1cIl09W0VbXCJTRS5JQy5TRVJWSUNFIENSQUZULCBZQVJELCBHRU5FUkFMXCJdXSxJW1wiUy1TLU5SLS0tLVwiXT1bRVtcIlNFLklDLlJFUEFJUiBTSElQXCJdXSxJW1wiUy1TLU5UUy0tLVwiXT1bRVtcIlNFLklDLlNVQk1BUklORSBURU5ERVJcIl1dLElbXCJTLVMtTkgtLS0tXCJdPVtFW1wiU0UuSUMuSE9WRVJDUkFGVCBOT05DT01CQVRBTlRcIl1dLElbXCJTLVMtWC0tLS0tXCJdPVtdLElbXCJTLVMtWE0tLS0tXCJdPVtFW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXV0sSVtcIlMtUy1YTUMtLS1cIl09W0VbXCJTRS5JQy5DQVJHTywgR0VORVJBTFwiXV0sSVtcIlMtUy1YTUUtLS1cIl09SVtcIlMtUy1YTVItLS1cIl09W0VbXCJTRS5JQy5ST0xMIE9OLVJPTEwgT0ZGXCJdXSxJW1wiUy1TLVhNTy0tLVwiXT1bRVtcIlNFLklDLk9JTEVSL1RBTktFUlwiXV0sSVtcIlMtUy1YTVQtLS1cIl09SVtcIlMtUy1YTVRVLS1cIl09W0VbXCJTRS5JQy5UVUcsIE9DRUFOIEdPSU5HIENJVklMSUFOXCJdXSxJW1wiUy1TLVhNRi0tLVwiXT1bRVtcIlNFLklDLkZFUlJZXCJdXSxJW1wiUy1TLVhNUC0tLVwiXT1bRVtcIlNFLklDLlBBU1NFTkdFUiBTSElQXCJdXSxJW1wiUy1TLVhNSC0tLVwiXT1bRVtcIlNFLklDLlRSQU5TUE9SVCBTSElQLCBIQVpBUkRPVVMgTUFURVJJQUxcIl1dLElbXCJTLVMtWE1ELS0tXCJdPVtFW1wiU0UuSUMuRFJFREdFXCJdXSxJW1wiUy1TLVhNVE8tLVwiXT1bRVtcIlNFLklDLlRPV1wiXV0sSVtcIlMtUy1YRi0tLS1cIl09W0VbXCJTRS5JQy5GSVNISU5HIFZFU1NFTFwiXV0sSVtcIlMtUy1YRkRGLS1cIl09W0VbXCJTRS5JQy5EUklGVEVSXCJdXSxJW1wiUy1TLVhGVFItLVwiXT1bRVtcIlNFLklDLlRSQVdMRVJcIl1dLElbXCJTLVMtWEZEUi0tXCJdPVtFW1wiU0UuSUMuRklTSElORyBWRVNTRUwgRFJFREdFXCJdXSxJW1wiUy1TLVhSLS0tLVwiXT1bRVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIFNBSUxJTkcgQk9BVFwiXV0sSVtcIlMtUy1YTC0tLS1cIl09W0VbXCJTRS5JQy5MQVcgRU5GT1JDRU1FTlQgVkVTU0VMXCJdXSxJW1wiUy1TLVhILS0tLVwiXT1bRVtcIlNFLklDLkhPVkVSQ1JBRlQgQ0lWSUxJQU5cIl1dLElbXCJTLVMtWEEtLS0tXCJdPVtFW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgTU9UT1JJWkVEXCJdXSxJW1wiUy1TLVhBUi0tLVwiXT1bRVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIE1PVE9SSVpFRCwgUklHSUQtSFVMTCBJTkZMQVRBQkxFIEJPQVRcIl1dLElbXCJTLVMtWEFTLS0tXCJdPVtFW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgTU9UT1JJWkVELCBTUEVFREJPQVRcIl1dLElbXCJTLVMtWFAtLS0tXCJdPVtFW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgSkVUU0tJXCJdXSxJW1wiUy1TLU8tLS0tLVwiXT1bRVtcIlNFLklDLk9XTiBTSElQXCJdXSxJW1wiUy1TLUUtLS0tLVwiXT1bXSxJW1wiUy1TLUVELS0tLVwiXT1bRVtcIlNFLklDLkRJVENIRUQgQUlSQ1JBRlRcIl1dLElbXCJTLVMtRVAtLS0tXCJdPVtFW1wiU0UuSUMuUEVSU09OIElOIFdBVEVSXCJdXSxJW1wiUy1TLUVWLS0tLVwiXT1bRVtcIlNFLklDLkRJU1RSRVNTRUQgVkVTU0VMXCJdXSxJW1wiUy1TLVotLS0tLVwiXT1bXSxJW1wiUy1TLVpNLS0tLVwiXT1bRVtcIlNFLklDLlNFQSBNSU5FTElLRVwiXV0sSVtcIlMtUy1aTi0tLS1cIl09W0VbXCJTRS5JQy5OQVZJR0FUSU9OQUxcIl1dLElbXCJTLVMtWkktLS0tXCJdPVtFW1wiU0UuSUMuSUNFQkVSR1wiXV19fTtmdW5jdGlvbiBEKEksdCxFLFIsZSxBKXt2YXIgQz10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFQ9dC5mcmFtZSxTPXQubnVtYmVyU0lEQyxOPUUuaWNvbkNvbG9yW0NdLE89RS5pY29uRmlsbENvbG9yW0NdLEc9RS53aGl0ZVtDXSxvPUUuYmxhY2tbQ10sTT17fTtmb3IodmFyIGkgaW4gTVtcIlNVLklDLk1JTElUQVJZXCJdPWEoXCJNSUxcIiksTVtcIlNVLklDLkNJVklMSUFOXCJdPWEoXCJDSVZcIiksTVtcIlNVLklDLkNJVklMSUFOXCJdLmZpbGw9Unx8Uz9POiFUJiZPLE1bXCJTVS5JQy5DSVZJTElBTlwiXS5zdHJva2U9byxNW1wiU1UuSUMuQ0lWSUxJQU5cIl0uc3Ryb2tld2lkdGg9MyxNW1wiU1UuSUMuTUFOVUFMIFRSQUNLXCJdPWEoXCJNQU5cIiksTVtcIlNVLklDLlNVQk1BUklORVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3NSw4NSA1MCwwIDE1LDE1IC0xNSwxNSAtNTAsMCAtMTUsLTE1IHpcIn0sTVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3NSwxMTAgLTEwLC0xMCAxMCwtMTAgMjAsMCAwLC0xMCAxMCwwIDAsMTAgMjAsMCAxMCwxMCAtMTAsMTAgelwifSxNW1wiU1UuSUMuU1VCTUFSSU5FIENPTlZFTlRJT05BTCBQUk9QVUxTSU9OLCBTVVJGQUNFRFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsMTEwIC0xMCwtMTAgMTAsLTEwIDIwLDAgMCwtMTAgMTAsMCAwLDEwIDIwLDAgMTAsMTAgLTEwLDEwIHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSwxMjAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwXCJ9XSxNW1wiU1UuSUMuU1VCTUFSSU5FIE5VQ0xFQVIgUFJPUFVMU0lPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3NSwxMTAgLTEwLC0xMCAxMCwtMTAgMCwtMTAgNTAsMCAwLDEwIDEwLDEwIC0xMCwxMCB6XCJ9LE1bXCJTVS5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OLCBTVVJGQUNFRFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsMTEwIC0xMCwtMTAgMTAsLTEwIDAsLTEwIDUwLDAgMCwxMCAxMCwxMCAtMTAsMTAgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEyMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTBcIn1dLE1bXCJTVS5JQy5TVUJNQVJJTkUgQVRUQUNLIChTU04pXCJdPXt0eXBlOlwidGV4dFwiLGZpbGw6RyxzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIkFcIn0sTVtcIlNVLklDLlNVQk1BUklORSBNSVNTSUxFIChUWVBFIFVOS05PV04pXCJdPXt0eXBlOlwidGV4dFwiLGZpbGw6RyxzdHJva2U6ITEseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIk1cIn0sTVtcIlNVLklDLlNVQk1BUklORSBHVUlERUQgTUlTU0lMRSAoU1NHTilcIl09e3R5cGU6XCJ0ZXh0XCIsZmlsbDpHLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozMCx0ZXh0OlwiR1wifSxNW1wiU1UuSUMuU1VCTUFSSU5FIEJBTExJU1RJQyBNSVNTSUxFIChTU0JOKVwiXT17dHlwZTpcInRleHRcIixmaWxsOkcsc3Ryb2tlOiExLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJCXCJ9LE1bXCJTVS5JQy5TVUJNQVJJTkUsIFNVUkZBQ0VEXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA3NSw4MCA1MCwwIDE1LDE1IC0xNSwxNSAtNTAsMCAtMTUsLTE1IHpcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSwxMjAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwXCJ9XSxNW1wiU1UuSUMuU1VCTUFSSU5FLCBCT1RUT01FRFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsODAgNTAsMCAxNSwxNSAtMTUsMTUgLTUwLDAgLTE1LC0xNSB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDcwLDEyMCAwLC01IDYwLDAgMCw1IHpcIn1dLE1bXCJTVS5JQy5TVUJNQVJJTkUsIFNOT1JLRUxJTkdcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDEyMCAtMTAsLTEwIDEwLC0xMCAyMCwwIDAsLTIwIDEwLDAgMCwyMCAyMCwwIDEwLDEwIC0xMCwxMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsOTUgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwXCJ9XSxNW1wiU1UuSUMuT1RIRVIgU1VCTUVSU0lCTEVcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gODUsOTAgMCwtMTAgMzAsMCAwLDEwIG0gMjAsMTAgYyAwLDUuNSAtMTUuNywxMCAtMzUsMTAgLTE5LjMsMCAtMzUsLTQuNSAtMzUsLTEwIDAsLTUuNSAxNS43LC0xMCAzNSwtMTAgMTkuMywwIDM1LDQuNSAzNSwxMCB6XCJ9LE1bXCJTVS5JQy5PVEhFUiBTVUJNRVJTSUJMRSwgU1VSRkFDRURcIl09W01bXCJTVS5JQy5PVEhFUiBTVUJNRVJTSUJMRVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEyMCAxMCwtMTAgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTBcIn1dLE1bXCJTVS5JQy5BVVRPTk9NT1VTIFVOREVSV0FURVIgVkVISUNMRS8gVU5NQU5ORUQgVU5ERVJXQVRFUiBWRUhJQ0xFIChBVVYvVVVWKVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCw4NCA0MCwyMCA0MCwtMjAgMCw4IC00MCwyNSAtNDAsLTI1IHpcIixzdHJva2U6ITF9LE1bXCJTVS5JQy5OT04tU1VCTUFSSU5FXCJdPVImJiFTP3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiTk9OXCJ9Olt7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMDAsZm9udHNpemU6MjUsdGV4dDpcIk5PTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMjAsZm9udHNpemU6MjUsdGV4dDpcIlNVQlwifV0sTVtcIlNVLklDLkRJVkVSLCBNSUxJVEFSWVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIk0gMTAwIDgwIEMgOTMuNyA4MCA4OC4zIDgyLjcgODUuOCA4OC4zIEwgODUuOCA4OC4zIEwgNzcuOCA4OC4zIEwgNzcuOCAxMDUgTCA4NS44IDEwNSBMIDg1LjggMTA0LjggQyA4Ny4zIDEwOC4yIDg4LjggMTEwIDkyIDExMS43IEwgOTIuMSAxMTEuNyBMIDg0LjIgMTIwIEwgMTE1LjggMTIwIEwgMTA3LjkgMTExLjcgTCAxMDggMTExLjcgQyAxMTEuMSAxMTAgMTEyLjggMTA4LjMgMTE0LjMgMTA1IEwgMTIyLjIgMTA1IEwgMTIyLjIgODguMyBMIDExNC4zIDg4LjMgTCAxMTQuMyA4OC4zIEMgMTExLjcgODIuOCAxMDYuMyA4MCAxMDAgODAgeiBNIDEwMCA4Ni42IEMgMTA1LjQgODYuNiAxMDkuOCA5MS4xIDEwOS44IDk2LjYgQyAxMDkuOCAxMDIuMSAxMDUuNCAxMDYuNiAxMDAgMTA2LjYgQyA5NC42IDEwNi42IDkwLjEgMTAyLjEgOTAuMSA5Ni42IEMgOTAuMSA5MS4xIDk0LjYgODYuNiAxMDAgODYuNiB6IE0gMTAwIDg5LjYgQyA5Ni4yIDg5LjYgOTMuMSA5Mi43IDkzLjEgOTYuNiBDIDkzLjEgMTAwLjUgOTYuMiAxMDMuNiAxMDAgMTAzLjYgQyAxMDMuOCAxMDMuNiAxMDYuOCAxMDAuNSAxMDYuOCA5Ni42IEMgMTA2LjggOTIuNyAxMDMuOCA4OS42IDEwMCA4OS42IHpcIn0sTVtcIlNVLklDLlNVQk1FUlNJQkxFLCBDSVZJTElBTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSA4NSw5MCAwLC0xMCAzMCwwIDAsMTAgbSAyMCwxMCBjIDAsNS41IC0xNS43LDEwIC0zNSwxMCAtMTkuMywwIC0zNSwtNC41IC0zNSwtMTAgMCwtNS41IDE1LjcsLTEwIDM1LC0xMCAxOS4zLDAgMzUsNC41IDM1LDEwIHpcIn0sTVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpLCBDSVZJTElBTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOlI/TzohVCYmTyxkOlwibSA2MCw4NCA0MCwyMCA0MCwtMjAgMCw4IC00MCwyNSAtNDAsLTI1IHpcIn0sTVtcIlNVLk0xLkNZQkVSU1BBQ0VcIl09bChcIkNZQlwiKSxNW1wiU1UuTTEuSElKQUNLRVJcIl09bChcIkhKXCIpLE1bXCJTVS5NMi5DWUJFUlNQQUNFXCJdPXIoXCJDWUJcIiksTVtcIlNVLklDLkRJVkVSLCBDSVZJTElBTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOk8sZDpcIk0gMTE0LjMsOTQgQyAxMTQuMywxMDIuMyAxMDcuOSwxMDkgMTAwLDEwOSBjIC03LjksMCAtMTQuMiwtNi43IC0xNC4yLC0xNSAwLC04LjMgNi40LC0xNSAxNC4yLC0xNSA3LjksMCAxNC4zLDYuNyAxNC4zLDE1IHogbSAwLDI3IDE0LjMsMTUgLTU3LDAgMTQuMywtMTUgTSAxMjUuNyw3OSBsIDE0LjMsMCAwLDMwIC0xNC4zLDAgbSAtNTEuMywwIC0xNC4zLDAgMCwtMzAgMTQuMywwIG0gNTQuMiwxNSBjIDAsMTYuNiAtMTIuOCwzMCAtMjguNSwzMCAtMTUuNywwIC0yOC41LC0xMy40IC0yOC41LC0zMCBDIDcxLjUsNzcuNCA4NC4zLDY0IDEwMCw2NCAxMTUuNyw2NCAxMjguNSw3Ny40IDEyOC41LDk0IHpcIn0sTVtcIlNVLklDLlVOREVSV0FURVIgV0VBUE9OXCJdPWEoXCJXUE5cIiksTVtcIlNVLklDLlRPUlBFRE9cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsMTA1IC01LC01IDUsLTUgNjAsMCBjIDAsMCA1LDUgNSw1IGwgNSwtNSAwLDEwIC01LC01IC01LDUgelwifSxNW1wiU1UuSUMuSU1QUk9WSVNFRCBFWFBMT1NJVkUgREVWSUNFIChJRUQpXCJdPWEoXCJJRURcIiksTVtcIlNVLklDLlVOREVSV0FURVIgREVDT1lcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOm8sZDpSP1wiTSAxMDUsMTEwIDkwLDk1IDEwNSw4MCB6IE0gODUsMTEwIDcwLDk1IDg1LDgwIHogbSA0MCwtMzAgLTE1LDE1IDE1LDE1IHogbSAtNTUsNDAgMCwtNSA1NSwwIDAsNSB6XCI6XCJNIDEwNSwxMjAgOTAsMTA1IDEwNSw5MCB6IE0gODUsMTIwIDcwLDEwNSA4NSw5MCB6IG0gNDAsLTMwIC0xNSwxNSAxNSwxNSB6IG0gLTU1LC01IDAsLTUgNTUsMCAwLDUgelwiLGZpbGw6Uj9OOk99LE1bXCJTVS5JQy5VTkRFUldBVEVSIERFQ09ZIERTeW1ib2xcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gODUgODEgTCA2NSA5OCBMIDg1IDExOSBMIDg1IDgxIHogTSAxMTAgODEgTCA5MCA5OCBMIDExMCAxMTkgTCAxMTAgODEgeiBNIDEzNSA4MSBMIDExNSA5OCBMIDEzNSAxMTkgTCAxMzUgODEgelwifSxNW1wiU1UuSUMuRUNITyBUUkFDS0VSIENMQVNTSUZJRVIgKEVUQykvUE9TU0lCTEUgQ09OVEFDVCAoUE9TQ09OKVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxMzAsZm9udHNpemU6NjAsdGV4dDpcIj9cIn0sTVtcIlNVLklDLkZVU0VEIFRSQUNLXCJdPVthKFwiP1wiKSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDY1IDEwLDM1IC0xMCwzNSA2MCwwIC0xMCwtMzUgMTAsLTM1XCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkVcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpFLmljb25Db2xvci5Ib3N0aWxlLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJNIDExNS45LDczIDEyNi41LDYyLjQgMTM3LjEsNzMgMTI2LjUsODMuNiBtIC01MywwIEwgNjIuOSw3MyA3My41LDYyLjQgODQuMSw3MyBtIDguNCwtMyAwLC0xNSAxNSwwIDAsMTUgbSAyMi41LDMwIGMgMCwxNi42IC0xMy40LDMwIC0zMCwzMCAtMTYuNiwwIC0zMCwtMTMuNCAtMzAsLTMwIDAsLTE2LjYgMTMuNCwtMzAgMzAsLTMwIEMgMTE2LjYsNzAgMTMwLDgzLjQgMTMwLDEwMCB6XCJ9LE1bXCJTVS5JQy5TRUEgTUlORSAtIEJPVFRPTVwiXT1bTVtcIlNVLklDLlNFQSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086RS5pY29uQ29sb3IuSG9zdGlsZSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NC44LDEyNS4yIDUwLjQsMCAwLDEyLjYgLTUwLjQsMCB6XCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgLSBNT09SRURcIl09W01bXCJTVS5JQy5TRUEgTUlORVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkUuaWNvbkNvbG9yLkhvc3RpbGUsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUuNSwxMzYuOCA0OSwwIE0gMTAwLDEyNC41IGwgMCwxMi4zXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgLSBGTE9BVElOR1wiXT1bTVtcIlNVLklDLlNFQSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUsMTQwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIC0gUklTSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDpTJiZBP1wiXCI6IVImJiFTfHxlP086RS5pY29uQ29sb3IuSG9zdGlsZSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMDAsMTI4IC0xMCwxNSAyMCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSAoSU4gT1RIRVIgUE9TSVRJT04pXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkVcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMzAsMTAwIDE1LDAgTSA3MCwxMDAgbCAtMTUsMFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIC0gS0lOR0ZJU0hFUlwiXT1bTVtcIlNVLklDLlNFQSBNSU5FXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiS1wifV0sTVtcIlNVLklDLlNFQSBNSU5FIC0gU01BTEwgT0JKRUNUXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEyLGZvbnRzaXplOjMwLHRleHQ6XCJTT1wifV0sTVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkVcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIk0gMTE1LjksNzMgMTI2LjUsNjIuNCAxMzcuMSw3MyAxMjYuNSw4My42IG0gLTUzLDAgTCA2Mi45LDczIDczLjUsNjIuNCA4NC4xLDczIG0gOC40LC0zIDAsLTE1IDE1LDAgMCwxNSBtIDIyLjUsMzAgYyAwLDE2LjYgLTEzLjQsMzAgLTMwLDMwIC0xNi42LDAgLTMwLC0xMy40IC0zMCwtMzAgMCwtMTYuNiAxMy40LC0zMCAzMCwtMzAgQyAxMTYuNiw3MCAxMzAsODMuNCAxMzAsMTAwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEyLGZvbnRzaXplOjMwLHRleHQ6XCJFWFwifSxTP1tdOnt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOiFSJiYhU3x8ZT9OOm8seDoxNTAseTo0Nixmb250c2l6ZTo0MCx0ZXh0OlwiWFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBCT1RUT01cIl09W01bXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzQuOCwxMjUuMiA1MC40LDAgMCwxMi42IC01MC40LDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBNT09SRURcIl09W01bXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUuNSwxMzYuOCA0OSwwIE0gMTAwLDEyNC41IGwgMCwxMi4zXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc1LDE0MCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTBcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FIC0gUklTSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigwLCAxMzAsIDI0KVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDEwMCwxMjggLTEwLDE1IDIwLDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTA2LjYsMTAxLjYgMCwyNi4zIC0xMy4xLC0xMy4xIHogbSAtMTkuNywwIDAsMjYuMyAtMTMuMSwtMTMuMSB6IG0gMzkuNCwwIDAsMjYuMyAtMTMuMSwtMTMuMSAxMy4xLC0xMy4xIE0gMTAwLDc1LjMgYyAtMTQuNSwwIC0yNi4zLDExLjggLTI2LjMsMjYuMyBsIDUyLjUsMCBDIDEyNi4zLDg3LjEgMTE0LjUsNzUuMyAxMDAsNzUuMyB6IG0gLTYuNiwwIDAsLTEzLjEgMTMuMSwwIDAsMTMuMSBtIC0yOS44LDEyLjMgLTkuMywtOS4zIDkuMywtOS4zIDkuMyw5LjMgbSAyNy45LDAgOS4zLC05LjMgOS4zLDkuMyAtOS4zLDkuM1wifSxNW1wiU1UuSUMuU0VBIE1JTkUgREVDT1ksIEJPVFRPTS9HUk9VTkRcIl09W01bXCJTVS5JQy5TRUEgTUlORSBERUNPWVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigwLCAxMzAsIDI0KVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBERUNPWSwgTU9PUkVEXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgREVDT1lcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMCwgMTMwLCAyNClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NSwxNDAgNTAsMCBNIDEwMCwxMDAgbCAwLDQwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRURcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086RS5pY29uQ29sb3IuTmV1dHJhbCxzdHJva2U6IVImJiFTfHxlP046byxkOlwiTSAxMTUuOSw3MyAxMjYuNSw2Mi40IDEzNy4xLDczIDEyNi41LDgzLjYgbSAtNTMsMCBMIDYyLjksNzMgNzMuNSw2Mi40IDg0LjEsNzMgbSA4LjQsLTMgMCwtMTUgMTUsMCAwLDE1IG0gMjIuNSwzMCBjIDAsMTYuNiAtMTMuNCwzMCAtMzAsMzAgLTE2LjYsMCAtMzAsLTEzLjQgLTMwLC0zMCAwLC0xNi42IDEzLjQsLTMwIDMwLC0zMCBDIDExNi42LDcwIDEzMCw4My40IDEzMCwxMDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2V3aWR0aDo1LHN0cm9rZTpBP0c6byxkOlwibSAxMzUsNjUgLTcwLDcwIG0gMCwtNzAgNzAsNzBcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIEJPVFRPTVwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086RS5pY29uQ29sb3IuTmV1dHJhbCxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NC44LDEyNS4yIDUwLjQsMCAwLDEyLjYgLTUwLjQsMCB6XCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBNT09SRURcIl09W01bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkUuaWNvbkNvbG9yLk5ldXRyYWwsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUuNSwxMzYuOCA0OSwwIE0gMTAwLDEyNC41IGwgMCwxMi4zXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBGTE9BVElOR1wiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUsMTQwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gUklTSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRURcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpFLmljb25Db2xvci5OZXV0cmFsLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDEwMCwxMjggLTEwLDE1IDIwLDAgelwifV0sTVtcIlNVLklDLlNFQSBNSU5FIChJTiBPVEhFUiBQT1NJVElPTikgTkVVVFJBTElaRURcIl09W01bXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDEzMCwxMDAgMTUsMCBNIDcwLDEwMCBsIC0xNSwwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUNcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwyNTUsMClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMTMuOCwxMjcuNiAtMjcuNiwwIC0xMy44LC0xMy44IDAsLTI3LjYgMTMuOCwtMTMuOCAyNy42LDAgMTMuOCwxMy44IDAsMjcuNiB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMixmb250c2l6ZTozMCx0ZXh0OlwiRVwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gQk9UVE9NXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUNcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMjU1LDI1NSwwKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSUxFQyAtIE1PT1JFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwyNTUsMClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NS41LDEzNi44IDQ5LDAgTSAxMDAsMTI0LjUgbCAwLDEyLjNcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSUxFQyAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUNcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSA3NSwxNDAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlORSBBTkNIT1JcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiEoIVImJiFTfHxlKSYmbyxkOlwibSAxMTMuOCwxMjcuNiAtMjcuNiwwIC0xMy44LC0xMy44IDAsLTI3LjYgMTMuOCwtMTMuOCAyNy42LDAgMTMuOCwxMy44IDAsMjcuNiB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjEwNSxmb250c2l6ZToxOCx0ZXh0OlwiQU5DUlwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigyNTUsMTQxLDQyKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDExMy44LDEyNy42IC0yNy42LDAgLTEzLjgsLTEzLjggMCwtMjcuNiAxMy44LC0xMy44IDI3LjYsMCAxMy44LDEzLjggMCwyNy42IHpcIn0sUz9bXTp7dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDohUiYmIVN8fGU/TjpvLHg6MTAwLHk6MTEyLGZvbnRzaXplOjMwLHRleHQ6XCIjXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBCT1RUT01cIl09W01bXCJTVS5JQy5TRUEgTUlORSBNSUxDT1wiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigyNTUsMTQxLDQyKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIE1PT1JFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUuNSwxMzYuOCA0OSwwIE0gMTAwLDEyNC41IGwgMCwxMi4zXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUsMTQwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAxXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiMVwifSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCIyXCJ9LE1bXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgM1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIjNcIn0sTVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCA0XCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMCxmb250c2l6ZTozNSx0ZXh0OlwiNFwifSxNW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCI1XCJ9LE1bXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2VkYXNoYXJyYXk6XCI4LDRcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigyNTUsMjU1LDApXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gMTEzLjgsMTI3LjYgLTI3LjYsMCAtMTMuOCwtMTMuOCAwLC0yNy42IDEzLjgsLTEzLjggMjcuNiwwIDEzLjgsMTMuOCAwLDI3LjYgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDplfHwoIVImJiFTfHxBP0c6bykseDoxMDAseToxMTIsZm9udHNpemU6MzAsdGV4dDpcIk5SXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTiAtIEJPVFRPTVwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT05cIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohUiYmIVN8fGU/TzpBP286XCJyZ2IoMjU1LDI1NSwwKVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gTU9PUkVEXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTlwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigyNTUsMjU1LDApXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUuNSwxMzYuOCA0OSwwIE0gMTAwLDEyNC41IGwgMCwxMi4zXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTiAtIEZMT0FUSU5HXCJdPVtNW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTlwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc1LDE0MCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTBcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBHRU5FUkFMIE9CU1RSVUNUT1JcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDI1NSwyNTUsMClcIixzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMTMuOCwxMjcuNiAtMjcuNiwwIC0xMy44LC0xMy44IDAsLTI3LjYgMTMuOCwtMTMuOCAyNy42LDAgMTMuOCwxMy44IDAsMjcuNiB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOmV8fCghUiYmIVN8fEE/RzpvKSx4OjEwMCx5OjExMixmb250c2l6ZTozMCx0ZXh0OlwiT0JcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBHRU5FUkFMIE9CU1RSVUNUT1IgTkVVVFJBTElaRURcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086RS5pY29uQ29sb3IuTmV1dHJhbCxzdHJva2U6IVImJiFTfHxlP046byxkOlwibSAxMTMuOCwxMjcuNiAtMjcuNiwwIC0xMy44LC0xMy44IDAsLTI3LjYgMTMuOCwtMTMuOCAyNy42LDAgMTMuOCwxMy44IDAsMjcuNiB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOiFSJiYhU3x8ZXx8QT9HOm8seDoxMDAseToxMTIsZm9udHNpemU6MzAsdGV4dDpcIk9CXCJ9LHt0eXBlOlwicGF0aFwiLHN0cm9rZXdpZHRoOjUsc3Ryb2tlOkE/RzpvLGQ6XCJtIDEzNSw2NSAtNzAsNzAgbSAwLC03MCA3MCw3MFwifV0sTVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigwLCAxMzAsIDI0KVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDExMy44LDEyNy42IC0yNy42LDAgLTEzLjgsLTEzLjggMCwtMjcuNiAxMy44LC0xMy44IDI3LjYsMCAxMy44LDEzLjggMCwyNy42IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLGZpbGw6ZXx8KCFSJiYhU3x8QT9HOm8pLHg6MTAwLHk6MTEyLGZvbnRzaXplOjMwLHRleHQ6XCJOXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1QgLSBCT1RUT01cIl09W01bXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiFSJiYhU3x8ZT9POkE/bzpcInJnYigwLCAxMzAsIDI0KVwiLHN0cm9rZTohUiYmIVN8fGU/TjpvLGQ6XCJtIDc0LjgsMTI1LjIgNTAuNCwwIDAsMTIuNiAtNTAuNCwwIHpcIn1dLE1bXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIE1PT1JFRFwiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6IVImJiFTfHxlP086QT9vOlwicmdiKDAsIDEzMCwgMjQpXCIsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUuNSwxMzYuOCA0OSwwIE0gMTAwLDEyNC41IGwgMCwxMi4zXCJ9XSxNW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1QgLSBGTE9BVElOR1wiXT1bTVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlOiFSJiYhU3x8ZT9OOm8sZDpcIm0gNzUsMTQwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMCA1LC0xMCA1LDEwIDUsLTEwIDUsMTAgNSwtMTAgNSwxMFwifV0sTVtcIlNVLklDLlVORVhQTE9ERUQgRVhQTE9TSVZFIE9SRE5BTkNFXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2VkYXNoYXJyYXk6XCI4LDRcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpFLmljb25Db2xvci5Ib3N0aWxlLGQ6XCJtIDg1LDY1IDMwLDAgMjAsMjAgMCwzMCAtMjAsMjAgLTMwLDAgLTIwLC0yMCAwLC0zMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOiFSJiYhU3x8ZT9OOkUuaWNvbkNvbG9yLkhvc3RpbGUseDoxMDAseToxMTAsZm9udHNpemU6MzAsdGV4dDpcIlVYT1wifV0sTVtcIlNVLklDLkVOVklST05NRU5UQUwgUkVQT1JUIExPQ0FUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZTohUiYmIVN8fGU/TjpFLmljb25Db2xvci5OZXV0cmFsLGQ6XCJtIDcwLDcwIDAsNjAgNjAsMCAwLC02MCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOiFSJiYhU3x8ZT9OOkUuaWNvbkNvbG9yLk5ldXRyYWwseDoxMDAseToxMjIsZm9udHNpemU6NjAsdGV4dDpcIkVcIn1dLE1bXCJTVS5JQy5ESVZFIFJFUE9SVCBMT0NBVElPTlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2U6IVImJiFTfHxlP046RS5pY29uQ29sb3IuTmV1dHJhbCxkOlwibSA3MCw3MCAwLDYwIDYwLDAgMCwtNjAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsZmlsbDohUiYmIVN8fGU/TjpFLmljb25Db2xvci5OZXV0cmFsLHg6MTAwLHk6MTIyLGZvbnRzaXplOjYwLHRleHQ6XCJEXCJ9XSxNW1wiU1UuSUMuU0VBQkVEIElOU1RBTExBVElPTi9NQU5NQURFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6TyxzdHJva2U6byxkOlwibSAxNDAsMTI1IC04MCwwIDEwLC0zMCAxMCwyMCAyMCwtNTAgMjAsNTAgMTAsLTI1IHpcIn0sTVtcIlNVLklDLlNFQUJFRCBJTlNUQUxMQVRJT04sIE1BTi1NQURFLCBNSUxJVEFSWVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA3NSw4MCAwLDQwIDUwLDAgMCwtMTUgLTE1LDAgMCwtMTAgLTIwLDAgMCwtMTUgelwifSxNW1wiU1UuSUMuU0VBQkVEIElOU1RBTExBVElPTiwgTUFOLU1BREUsIE5PTi1NSUxJVEFSWVwiXT17dHlwZTpcInBhdGhcIixmaWxsOk8sZDpcIm0gNzUsODAgMCw0MCA1MCwwIDAsLTE1IC0xNSwwIDAsLTEwIC0yMCwwIDAsLTE1IHpcIn0sTVtcIlNVLklDLlNFQUJFRCBST0NLL1NUT05FLCBPQlNUQUNMRSwgT1RIRVJcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTQwLDEyNSAtODAsMCAxMCwtMzAgMTAsMjAgMjAsLTUwIDIwLDUwIDEwLC0yNSB6XCJ9LE1bXCJTVS5JQy5XUkVDS1wiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMjUsODUgMCwzMCBtIC01MCwtMzAgMCwzMCBtIDI1LC00MCAwLDQ1IG0gLTQwLC0yMCA4MCwwXCJ9LE1bXCJTVS5JQy5NQVJJTkUgTElGRVwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCwxMDAgMjAsLTIwIDQ1LDIwIDE1LC0xMCAwLDIwIC0xNSwtMTAgLTQ1LDIwIHpcIn0sTVtcIlNVLklDLlNFQSBBTk9NQUxZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsMTAwIDE1LC0yMCAyMCwzMCAyMCwtMzAgMTUsMjAgbSAtNzAsMTAgMTUsLTIwIDIwLDMwIDIwLC0zMCAxNSwyMFwifSxNW1wiU1UuTTEuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdPWwoXCJBU1dcIiksTVtcIlNVLk0xLkFVWElMSUFSWVwiXT1sKFwiQVVYXCIpLE1bXCJTVS5NMS5DT01NQU5EIEFORCBDT05UUk9MXCJdPWwoXCJDMlwiKSxNW1wiU1UuTTEuSU5URUxMSUdFTkNFLCBTVVJWRUlMTEFOQ0UsIFJFQ09OTkFJU1NBTkNFXCJdPWwoXCJJU1JcIiksTVtcIlNVLk0xLk1JTkUgQ09VTlRFUk1FQVNVUkVTXCJdPWwoXCJNQ01cIiksTVtcIlNVLk0xLk1JTkUgV0FSRkFSRVwiXT1sKFwiTUlXXCIpLE1bXCJTVS5NMS5TVVJGQUNFIFdBUkZBUkVcIl09bChcIlNVV1wiKSxNW1wiU1UuTTEuQVRUQUNLXCJdPWwoXCJBXCIpLE1bXCJTVS5NMS5CQUxMSVNUSUMgTUlTU0lMRVwiXT1sKFwiQlwiKSxNW1wiU1UuTTEuR1VJREVEIE1JU1NJTEVcIl09bChcIkdcIiksTVtcIlNVLk0xLk9USEVSIEdVSURFRCBNSVNTSUxFUyAoUE9JTlQgREVGRU5DRSlcIl09bChcIk1cIiksTVtcIlNVLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVwiXT1sKFwiU09GXCIpLE1bXCJTVS5NMS5QT1NTSUJMRSBTVUJNQVJJTkUgLSBMT1cgMVwiXT1sKFwiUDFcIiksTVtcIlNVLk0xLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAyXCJdPWwoXCJQMlwiKSxNW1wiU1UuTTEuUE9TU0lCTEUgU1VCTUFSSU5FIC0gSElHSCAzXCJdPWwoXCJQM1wiKSxNW1wiU1UuTTEuUE9TU0lCTEUgU1VCTUFSSU5FIC0gSElHSCA0XCJdPWwoXCJQNFwiKSxNW1wiU1UuTTEuUFJPQkFCTEUgU1VCTUFSSU5FXCJdPWwoXCJQQlwiKSxNW1wiU1UuTTEuQ0VSVEFJTiBTVUJNQVJJTkVcIl09bChcIkNUXCIpLE1bXCJTVS5NMS5BTlRJLVRPUlBFRE8gVE9SUEVET1wiXT1sKFwiQVRUXCIpLE1bXCJTVS5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl09bChcIkhcIiksTVtcIlNVLk0yLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAxXCJdPXIoXCJQMVwiKSxNW1wiU1UuTTIuUE9TU0lCTEUgU1VCTUFSSU5FIC0gTE9XIDJcIl09cihcIlAyXCIpLE1bXCJTVS5NMi5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDNcIl09cihcIlAzXCIpLE1bXCJTVS5NMi5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDRcIl09cihcIlA0XCIpLE1bXCJTVS5NMi5QUk9CQUJMRSBTVUJNQVJJTkVcIl09cihcIlBCXCIpLE1bXCJTVS5NMi5BSVIgSU5ERVBFTkRFTlQgUFJPUFVMU0lPTlwiXT1yKFwiQUlcIiksTVtcIlNVLk0yLkNFUlRTVUJcIl09cihcIkNUXCIpLE1bXCJTVS5NMi5ESUVTRUwgUFJPUFVMU0lPTlwiXT1yKFwiRFwiKSxNW1wiU1UuTTIuRElFU0VMIC0gVFlQRSAxXCJdPXIoXCJEMVwiKSxNW1wiU1UuTTIuRElFU0VMIC0gVFlQRSAyXCJdPXIoXCJEMlwiKSxNW1wiU1UuTTIuRElFU0VMIC0gVFlQRSAzXCJdPXIoXCJEM1wiKSxNW1wiU1UuTTIuTlVDTEVBUiBQT1dFUkVEXCJdPXIoXCJOXCIpLE1bXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSAxXCJdPXIoXCJOMVwiKSxNW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgMlwiXT1yKFwiTjJcIiksTVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDNcIl09cihcIk4zXCIpLE1bXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSA0XCJdPXIoXCJONFwiKSxNW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgNVwiXT1yKFwiTjVcIiksTVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDZcIl09cihcIk42XCIpLE1bXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSA3XCJdPXIoXCJON1wiKSxNW1wiU1UuTTIuQVVUT05PTU9VUyBDT05UUk9MXCJdPXIoXCJBVVRcIiksTVtcIlNVLk0yLlJFTU9URUxZIFBJTE9URURcIl09cihcIlJQXCIpLE1bXCJTVS5NMi5FWFBFTkRBQkxFXCJdPXIoXCJFWFBcIiksTSlNLmhhc093blByb3BlcnR5KGkpJiYoSS5oYXNPd25Qcm9wZXJ0eShpKSYmY29uc29sZS53YXJuKFwiT3ZlcnJpZGUgb2Y6IFwiK2kpLG4uY2FsbCh0aGlzLE1baV0sTiksSVtpXT1NW2ldKX12YXIgbT17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W0RdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLVUtLS0tLS0tXCJdPVtdLElbXCJTLVUtUy0tLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FXCJdXSxJW1wiUy1VLVNGLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSwgU1VSRkFDRURcIl1dLElbXCJTLVUtU0ItLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FLCBCT1RUT01FRFwiXV0sSVtcIlMtVS1TUi0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkVcIl0sRVtcIlNVLk0yLkNFUlRTVUJcIl1dLElbXCJTLVUtU1gtLS0tXCJdPVtFW1wiU1UuSUMuTk9OLVNVQk1BUklORVwiXV0sSVtcIlMtVS1TTi0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdXSxJW1wiUy1VLVNORi0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT04sIFNVUkZBQ0VEXCJdXSxJW1wiUy1VLVNOQS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT05cIl0sRVtcIlNVLklDLlNVQk1BUklORSBBVFRBQ0sgKFNTTilcIl1dLElbXCJTLVUtU05NLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIE5VQ0xFQVIgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIE1JU1NJTEUgKFRZUEUgVU5LTk9XTilcIl1dLElbXCJTLVUtU05HLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FIE5VQ0xFQVIgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIEdVSURFRCBNSVNTSUxFIChTU0dOKVwiXV0sSVtcIlMtVS1TTkItLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdLEVbXCJTVS5JQy5TVUJNQVJJTkUgQkFMTElTVElDIE1JU1NJTEUgKFNTQk4pXCJdXSxJW1wiUy1VLVNDLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTlwiXV0sSVtcIlMtVS1TQ0YtLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgQ09OVkVOVElPTkFMIFBST1BVTFNJT04sIFNVUkZBQ0VEXCJdXSxJW1wiUy1VLVNDQS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIEFUVEFDSyAoU1NOKVwiXV0sSVtcIlMtVS1TQ00tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgQ09OVkVOVElPTkFMIFBST1BVTFNJT05cIl0sRVtcIlNVLklDLlNVQk1BUklORSBNSVNTSUxFIChUWVBFIFVOS05PV04pXCJdXSxJW1wiUy1VLVNDRy0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSBDT05WRU5USU9OQUwgUFJPUFVMU0lPTlwiXSxFW1wiU1UuSUMuU1VCTUFSSU5FIEdVSURFRCBNSVNTSUxFIChTU0dOKVwiXV0sSVtcIlMtVS1TQ0ItLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkUgQ09OVkVOVElPTkFMIFBST1BVTFNJT05cIl0sRVtcIlNVLklDLlNVQk1BUklORSBCQUxMSVNUSUMgTUlTU0lMRSAoU1NCTilcIl1dLElbXCJTLVUtU08tLS0tXCJdPVtFW1wiU1UuSUMuT1RIRVIgU1VCTUVSU0lCTEVcIl1dLElbXCJTLVUtU09GLS0tXCJdPVtFW1wiU1UuSUMuT1RIRVIgU1VCTUVSU0lCTEUsIFNVUkZBQ0VEXCJdXSxJW1wiUy1VLVNVLS0tLVwiXT1bRVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpXCJdXSxJW1wiUy1VLVNVTS0tLVwiXT1bRVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpXCJdLEVbXCJTVS5NMS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXV0sSVtcIlMtVS1TVVMtLS1cIl09W0VbXCJTVS5JQy5BVVRPTk9NT1VTIFVOREVSV0FURVIgVkVISUNMRS8gVU5NQU5ORUQgVU5ERVJXQVRFUiBWRUhJQ0xFIChBVVYvVVVWKVwiXSxFW1wiU1UuTTEuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSxJW1wiUy1VLVNVTi0tLVwiXT1bRVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpXCJdLEVbXCJTVS5NMS5TVVJGQUNFIFdBUkZBUkVcIl1dLElbXCJTLVUtUzEtLS0tXCJdPVtFW1wiU1UuSUMuU1VCTUFSSU5FXCJdLEVbXCJTVS5NMi5QT1NTSUJMRSBTVUJNQVJJTkUgLSBMT1cgMVwiXV0sSVtcIlMtVS1TMi0tLS1cIl09W0VbXCJTVS5JQy5TVUJNQVJJTkVcIl0sRVtcIlNVLk0yLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAyXCJdXSxJW1wiUy1VLVMzLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORVwiXSxFW1wiU1UuTTIuUE9TU0lCTEUgU1VCTUFSSU5FIC0gSElHSCAzXCJdXSxJW1wiUy1VLVM0LS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORVwiXSxFW1wiU1UuTTIuUE9TU0lCTEUgU1VCTUFSSU5FIC0gSElHSCA0XCJdXSxJW1wiUy1VLVNMLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORVwiXSxFW1wiU1UuTTIuUFJPQkFCTEUgU1VCTUFSSU5FXCJdXSxJW1wiUy1VLVNLLS0tLVwiXT1bRVtcIlNVLklDLlNVQk1BUklORSwgU05PUktFTElOR1wiXV0sSVtcIlMtVS1XLS0tLS1cIl09W0VbXCJTVS5JQy5VTkRFUldBVEVSIFdFQVBPTlwiXV0sSVtcIlMtVS1XVC0tLS1cIl09W0VbXCJTVS5JQy5UT1JQRURPXCJdXSxJW1wiUy1VLVdNLS0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FXCJdXSxJW1wiUy1VLVdNRC0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEXCJdXSxJW1wiUy1VLVdNRy0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIC0gQk9UVE9NXCJdXSxJW1wiUy1VLVdNR0QtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gQk9UVE9NXCJdXSxJW1wiUy1VLVdNR1gtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBCT1RUT01cIl1dLElbXCJTLVUtV01HRS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUMgLSBCT1RUT01cIl1dLElbXCJTLVUtV01HQy0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBCT1RUT01cIl1dLElbXCJTLVUtV01HUi0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTiAtIEJPVFRPTVwiXV0sSVtcIlMtVS1XTUdPLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIEJPVFRPTVwiXV0sSVtcIlMtVS1XTU0tLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSAtIE1PT1JFRFwiXV0sSVtcIlMtVS1XTU1ELS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIE1PT1JFRFwiXV0sSVtcIlMtVS1XTU1YLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBFWEVSQ0lTRSBNSU5FIC0gTU9PUkVEXCJdXSxJW1wiUy1VLVdNTUUtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gTU9PUkVEXCJdXSxJW1wiUy1VLVdNTUMtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdXSxJW1wiUy1VLVdNTVItLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT04gLSBNT09SRURcIl1dLElbXCJTLVUtV01NTy0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1QgLSBNT09SRURcIl1dLElbXCJTLVUtV01GLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgLSBGTE9BVElOR1wiXV0sSVtcIlMtVS1XTUZELS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIEZMT0FUSU5HXCJdXSxJW1wiUy1VLVdNRlgtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBGTE9BVElOR1wiXV0sSVtcIlMtVS1XTUZFLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBNSUxFQyAtIEZMT0FUSU5HXCJdXSxJW1wiUy1VLVdNRkMtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gRkxPQVRJTkdcIl1dLElbXCJTLVUtV01GUi0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTiAtIEZMT0FUSU5HXCJdXSxJW1wiUy1VLVdNRk8tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUIC0gRkxPQVRJTkdcIl1dLElbXCJTLVUtV01PLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgKElOIE9USEVSIFBPU0lUSU9OKVwiXV0sSVtcIlMtVS1XTU9ELS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSAoSU4gT1RIRVIgUE9TSVRJT04pIE5FVVRSQUxJWkVEXCJdXSxJW1wiUy1VLVdNWC0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkVcIl1dLElbXCJTLVUtV01FLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUNcIl1dLElbXCJTLVUtV01BLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlORSBBTkNIT1JcIl1dLElbXCJTLVUtV01DLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl1dLElbXCJTLVUtV01SLS0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVHQVRJVkUgUkVBQ1FVSVNJVElPTlwiXV0sSVtcIlMtVS1XTUItLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBHRU5FUkFMIE9CU1RSVUNUT1JcIl1dLElbXCJTLVUtV01CRC0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgR0VORVJBTCBPQlNUUlVDVE9SIE5FVVRSQUxJWkVEXCJdXSxJW1wiUy1VLVdNTi0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUXCJdXSxJW1wiUy1VLVdNUy0tLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIC0gUklTSU5HXCJdXSxJW1wiUy1VLVdNU1gtLVwiXT1bRVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBSSVNJTkdcIl1dLElbXCJTLVUtV01TRC0tXCJdPVtFW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBSSVNJTkdcIl1dLElbXCJTLVUtV1YtLS0tXCJdPVtFW1wiU1UuSUMuQVVUT05PTU9VUyBVTkRFUldBVEVSIFZFSElDTEUvIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSAoQVVWL1VVVilcIl1dLElbXCJTLVUtV0QtLS0tXCJdPVtFW1wiU1UuSUMuVU5ERVJXQVRFUiBERUNPWVwiXV0sSVtcIlMtVS1XRE0tLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBERUNPWVwiXV0sSVtcIlMtVS1XRE1HLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBERUNPWSwgQk9UVE9NL0dST1VORFwiXV0sSVtcIlMtVS1XRE1NLS1cIl09W0VbXCJTVS5JQy5TRUEgTUlORSBERUNPWSwgTU9PUkVEXCJdXSxJW1wiUy1VLU4tLS0tLVwiXT1bRVtcIlNVLklDLk5PTi1TVUJNQVJJTkVcIl1dLElbXCJTLVUtTkQtLS0tXCJdPVtFW1wiU1UuSUMuRElWRVIsIENJVklMSUFOXCJdXSxJW1wiUy1VLU5CLS0tLVwiXT1bXSxJW1wiUy1VLUUtLS0tLVwiXT1bRVtcIlNVLklDLkVOVklST05NRU5UQUwgUkVQT1JUIExPQ0FUSU9OXCJdXSxJW1wiUy1VLVYtLS0tLVwiXT1bRVtcIlNVLklDLkRJVkUgUkVQT1JUIExPQ0FUSU9OXCJdXSxJW1wiUy1VLVgtLS0tLVwiXT1bRVtcIlNVLklDLlVORVhQTE9ERUQgRVhQTE9TSVZFIE9SRE5BTkNFXCJdXSxJW1wiUy1VLU5CUy0tLVwiXT1bRVtcIlNVLklDLlNFQUJFRCBJTlNUQUxMQVRJT04vTUFOTUFERVwiXV0sSVtcIlMtVS1OQlItLS1cIl09W0VbXCJTVS5JQy5TRUFCRUQgUk9DSy9TVE9ORSwgT0JTVEFDTEUsIE9USEVSXCJdXSxJW1wiUy1VLU5CVy0tLVwiXT1bRVtcIlNVLklDLldSRUNLXCJdXSxJW1wiUy1VLU5NLS0tLVwiXT1bRVtcIlNVLklDLk1BUklORSBMSUZFXCJdXSxJW1wiUy1VLU5BLS0tLVwiXT1bRVtcIlNVLklDLlNFQSBBTk9NQUxZXCJdXX19LEY9e3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltjLFBdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLUYtLS0tLS0tXCJdPVtFW1wiR1IuSUMuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVtcIlMtRi1BLS0tLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVtcIlMtRi1BRi0tLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1GLUFGQS0tLVwiXT1bRVtcIkFSLkkuTUlMSVRBUlkgRklYRUQgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIlNPRi5NMi5BVFRBQ0tcIl1dLElbXCJTLUYtQUZLLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiU09GLk0yLlJFRlVFTFwiXV0sSVtcIlMtRi1BRlUtLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJTT0YuTTIuVVRJTElUWVwiXV0sSVtcIlMtRi1BRlVMLS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJBSVIuTTIuTElHSFRcIl1dLElbXCJTLUYtQUZVTS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiQUlSLk0yLk1FRElVTVwiXV0sSVtcIlMtRi1BRlVILS1cIl09W0VbXCJBUi5JLk1JTElUQVJZIEZJWEVEIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJBSVIuTTIuSEVBVllcIl1dLElbXCJTLUYtQVYtLS0tXCJdPVtFW1wiQVIuSS5NSUxJVEFSWSBGSVhFRCBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiU09GLk0yLlZTVE9MXCJdXSxJW1wiUy1GLUFILS0tLVwiXT1SP1tFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lORyAyNTI1Q1wiXV06W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUYtQUhILS0tXCJdPVtFW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEVbXCJTT0YuTTIuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdXSxJW1wiUy1GLUFIQS0tLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiU09GLk0yLkFUVEFDS1wiXV0sSVtcIlMtRi1BSFUtLS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIlNPRi5NMi5VVElMSVRZXCJdXSxJW1wiUy1GLUFIVUwtLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiQUlSLk0yLkxJR0hUXCJdXSxJW1wiUy1GLUFIVU0tLVwiXT1bRVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdLEVbXCJBSVIuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiQUlSLk0yLk1FRElVTVwiXV0sSVtcIlMtRi1BSFVILS1cIl09W0VbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl0sRVtcIkFJUi5NMi5IRUFWWVwiXV0sSVtcIlMtRi1TTi0tLS1cIl09SVtcIlMtRi1OLS0tLS1cIl09W0VbXCJHUi5JQy5OQVZBTFwiXSxFW1wiQUlSLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVNcIl1dLElbXCJTLUYtU05TLS0tXCJdPUlbXCJTLUYtTlMtLS0tXCJdPVtFW1wiR1IuSUMuU0VBLUFJUi1MQU5EXCJdXSxJW1wiUy1GLVNOVS0tLVwiXT1JW1wiUy1GLU5VLS0tLVwiXT1bRVtcIlNPRi5JQy5VTkRFUldBVEVSIERFTU9MSVRJT04gVEVBTVwiXV0sSVtcIlMtRi1TTkItLS1cIl09SVtcIlMtRi1OQi0tLS1cIl09W0VbXCJHUi5JQy5DT01CQVRBTlRcIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1GLVNOTi0tLVwiXT1JW1wiUy1GLU5OLS0tLVwiXT1bRVtcIkdSLklDLlNVQk1BUklORSBOVUNMRUFSIFBST1BVTFNJT05cIl0sRVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1GLUctLS0tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJW1wiUy1GLUdTLS0tLVwiXT1bRVtcIkdSLklDLlNQRUNJQUwgRk9SQ0VTXCJdXSxJW1wiUy1GLUdSLS0tLVwiXT1JW1wiUy1GLUdTUi0tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJBSVIuTTEuUkVDT05OQUlTU0FOQ0VcIl0sRVtcIkdSLk0yLkFJUkJPUk5FXCJdXSxJW1wiUy1GLUdQLS0tLVwiXT1JW1wiUy1GLUdTUC0tLVwiXT1bRVtcIkdSLkVRLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OUyBFUVVJUE1FTlRcIl1dLElbXCJTLUYtR1BBLS0tXCJdPUlbXCJTLUYtR1NQQS0tXCJdPVtFW1wiR1IuRVEuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TIEVRVUlQTUVOVFwiXSxzLl90cmFuc2xhdGUoMCwtMzAscy5fc2NhbGUoLjcsRVtcIkFSLkkuTUlMSVRBUlkgRklYRUQgV0lOR1wiXSkpXSxJW1wiUy1GLUdDLS0tLVwiXT1JW1wiUy1GLUdDQS0tLVwiXT1bRVtcIkdSLklDLkNJVklMIEFGRkFJUlNcIl1dLElbXCJTLUYtR0ItLS0tXCJdPUlbXCJTLUYtQi0tLS0tXCJdPVtFW1wiR1IuSUMuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXSxFW1wiR1IuTTIuU1VQUE9SVFwiXV19fTtmdW5jdGlvbiBmKEksdCxFLFIsZSxBKXt2YXIgQz10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFQ9RS5pY29uQ29sb3JbQ10sUz17XCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiOnt0eXBlOlwicGF0aFwiLGQ6XCJtIDkzLDEyMCAxNCwwIDAsMCBtIC03LC0yNyAwLDI3IG0gMiwtMjUgOCwyIC01LDUgMTMsMyBtIC0yMCwtMTAgLTgsMiA1LDUgLTE0LDMgbSAyMSwtMTMgOCwtMiAtNSwtNSAxMywtMyBtIC0zNywwIDE0LDMgLTUsNSA4LDJcIixmaWxsOiExfSxcIlNJLklDLlJBREFSXCI6e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTE1LDkwIC0xNSwxNSAwLC0xNSAtMTUsMTUgTSA4MCw4NSBjIDAsMjUgMTUsMzUgMzUsMzVcIixmaWxsOiExfX07Zm9yKHZhciBOIGluIFNbXCJTSS5JLkpBTU1FUiAvIEVMRUNUUk9OSUMgQ09VTlRFUi1NRUFTVVJFU1wiXT1hKFwiSlwiKSxTW1wiU0kuTTEuQU5USS1BSVJDUkFGVCBGSVJFIENPTlRST0xcIl09bChcIkFBXCIpLFNbXCJTSS5NMS5BSVJCT1JORSBTRUFSQ0ggQU5EIEJPTUJJTkdcIl09bChcIkFCXCIpLFNbXCJTSS5NMS5BSVJCT1JORSBJTlRFUkNFUFRcIl09bChcIkFJXCIpLFNbXCJTSS5NMS5BTFRJTUVURVJcIl09bChcIkFMXCIpLFNbXCJTSS5NMS5BSVJCT1JORSBSRUNPTk5BSVNTQU5DRSBBTkQgTUFQUElOR1wiXT1sKFwiQU1cIiksU1tcIlNJLk0xLkFJUiBUUkFGRklDIENPTlRST0xcIl09bChcIkFUXCIpLFNbXCJTSS5NMS5CRUFDT04gVFJBTlNQT05ERVIgKE5PVCBJRkYpXCJdPWwoXCJCTlwiKSxTW1wiU0kuTTEuQkFUVExFRklFTEQgU1VSVkVJTExBTkNFXCJdPWwoXCJCU1wiKSxTW1wiU0kuTTEuQ09OVFJPTExFRCBBUFBST0FDSFwiXT1sKFwiQ0FcIiksU1tcIlNJLk0xLkNPTlRST0xMRUQgSU5URVJDRVBUXCJdPWwoXCJDSVwiKSxTW1wiU0kuTTEuQ0VMTFVMQVIvTU9CSUxFXCJdPWwoXCJDTVwiKSxTW1wiU0kuTTEuQ09BU1RBTCBTVVJWRUlMTEFOQ0VcIl09bChcIkNTXCIpLFNbXCJTSS5NMS5DWUJFUlwiXT1sKFwiQ1lCXCIpLFNbXCJTSS5NMS5ERUNPWS9NSU1JQ1wiXT1sKFwiRENcIiksU1tcIlNJLk0xLkRBVEEgVFJBTlNNSVNTSU9OXCJdPWwoXCJEVFwiKSxTW1wiU0kuTTEuRUFSVEggU1VSVkVJTExBTkNFXCJdPWwoXCJFU1wiKSxTW1wiU0kuTTEuRUFSTFkgV0FSTklOR1wiXT1sKFwiRVdcIiksU1tcIlNJLk0xLkZJUkUgQ09OVFJPTFwiXT1sKFwiRkNcIiksU1tcIlNJLk0xLkdST1VORCBNQVBQSU5HXCJdPWwoXCJHTVwiKSxTW1wiU0kuTTEuSEVJR0hUIEZJTkRJTkdcIl09bChcIkhGXCIpLFNbXCJTSS5NMS5IQVJCT1IgU1VSVkVJTExBTkNFXCJdPWwoXCJIU1wiKSxTW1wiU0kuTTEuSURFTlRJRklDQVRJT04sIEZSSUVORCBPUiBGT0UgKElOVEVSUk9HQVRPUilcIl09bChcIklGXCIpLFNbXCJTSS5NMS5JTlNUUlVNRU5UIExBTkRJTkcgU1lTVEVNXCJdPWwoXCJJTFwiKSxTW1wiU0kuTTEuSU9OT1NQSEVSSUMgU09VTkRJTkdcIl09bChcIklTXCIpLFNbXCJTSS5NMS5JREVOVElGSUNBVElPTiwgRlJJRU5EIE9SIEZPRSAoVFJBTlNQT05ERVIpXCJdPWwoXCJJVFwiKSxTW1wiU0kuTTEuQkFSUkFHRSBKQU1NRVJcIl09bChcIkpCXCIpLFNbXCJTSS5NMS5DTElDSyBKQU1NRVJcIl09bChcIkpDXCIpLFNbXCJTSS5NMS5ERUNFUFRJVkUgSkFNTUVSXCJdPWwoXCJKRFwiKSxTW1wiU0kuTTEuRlJFUVVFTkNZIFNXRVBUIEpBTU1FUlwiXT1sKFwiSkZcIiksU1tcIlNJLk0xLkpBTU1FUiAoR0VORVJBTClcIl09bChcIkpHXCIpLFNbXCJTSS5NMS5OT0lTRSBKQU1NRVJcIl09bChcIkpOXCIpLFNbXCJTSS5NMS5QVUxTRUQgSkFNTUVSXCJdPWwoXCJKUFwiKSxTW1wiU0kuTTEuUkVQRUFURVIgSkFNTUVSXCJdPWwoXCJKUlwiKSxTW1wiU0kuTTEuU1BPVCBOT0lTRSBKQU1NRVJcIl09bChcIkpTXCIpLFNbXCJTSS5NMS5UUkFOU1BPTkRFUiBKQU1NRVJcIl09bChcIkpUXCIpLFNbXCJTSS5NMS5NSVNTSUxFIEFDUVVJU0lUSU9OXCJdPWwoXCJNQVwiKSxTW1wiU0kuTTEuTUlTU0lMRSBDT05UUk9MXCJdPWwoXCJNQ1wiKSxTW1wiU0kuTTEuTUlTU0lMRSBET1dOTElOS1wiXT1sKFwiTURcIiksU1tcIlNJLk0xLk1FVEVPUk9MT0dJQ0FMXCJdPWwoXCJNRVwiKSxTW1wiU0kuTTEuTVVMVEktRlVOQ1RJT05cIl09bChcIk1GXCIpLFNbXCJTSS5NMS5NSVNTSUxFIEdVSURBTkNFXCJdPWwoXCJNR1wiKSxTW1wiU0kuTTEuTUlTU0lMRSBIT01JTkdcIl09bChcIk1IXCIpLFNbXCJTSS5NMS5NSVNTSUxFIFRSQUNLSU5HXCJdPWwoXCJNVFwiKSxTW1wiU0kuTTEuTkFWSUdBVElPTkFML0dFTkVSQUxcIl09bChcIk5BXCIpLFNbXCJTSS5NMS5OQVZJR0FUSU9OQUwvRElTVEFOQ0UgTUVBU1VSSU5HIEVRVUlQTUVOVFwiXT1sKFwiTkRcIiksU1tcIlNJLk0xLk5BVklHQVRJT04vVEVSUkFJTiBGT0xMT1dJTkdcIl09bChcIk5UXCIpLFNbXCJTSS5NMS5OQVZJR0FUSU9OQUwvV0VBVEhFUiBBVk9JREFOQ0VcIl09bChcIk5XXCIpLFNbXCJTSS5NMS5PTU5JLUxJTkUgT0YgU0lHSFQgKExPUylcIl09bChcIk9MXCIpLFNbXCJTSS5NMS5QUk9YSU1JVFkgVVNFXCJdPWwoXCJQRlwiKSxTW1wiU0kuTTEuUE9JTlQtVE8tUE9JTlQgTElORSBPRiBTSUdIVCAoTE9TKVwiXT1sKFwiUFBcIiksU1tcIlNJLk0xLklOU1RSVU1FTlRBVElPTlwiXT1sKFwiUklcIiksU1tcIlNJLk0xLlJBTkdFIE9OTFlcIl09bChcIlJPXCIpLFNbXCJTSS5NMS5TT05PQlVPWVwiXT1sKFwiU0JcIiksU1tcIlNJLk0xLlNBVEVMTElURSBET1dOTElOS1wiXT1sKFwiU0RcIiksU1tcIlNJLk0xLlNQQUNFXCJdPWwoXCJTUFwiKSxTW1wiU0kuTTEuU1VSRkFDRSBTRUFSQ0hcIl09bChcIlNTXCIpLFNbXCJTSS5NMS5TSEVMTCBUUkFDS0lOR1wiXT1sKFwiU1RcIiksU1tcIlNJLk0xLlNBVEVMTElURSBVUExJTktcIl09bChcIlNVXCIpLFNbXCJTSS5NMS5UQVJHRVQgQUNRVUlTSVRJT05cIl09bChcIlRBXCIpLFNbXCJTSS5NMS5UQVJHRVQgSUxMVU1JTkFUSU9OXCJdPWwoXCJUSVwiKSxTW1wiU0kuTTEuVFJPUE9TUEhFUklDIFNDQVRURVJcIl09bChcIlRTXCIpLFNbXCJTSS5NMS5UQVJHRVQgVFJBQ0tJTkdcIl09bChcIlRUXCIpLFNbXCJTSS5NMS5VTktOT1dOXCJdPWwoXCJVTlwiKSxTW1wiU0kuTTEuVklERU8gUkVNT1RJTkdcIl09bChcIlZSXCIpLFNbXCJTSS5NMS5FWFBFUklNRU5UQUxcIl09bChcIlhQXCIpLFNbXCJTSS5NMS5BTFBIQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQVwifSxTW1wiU0kuTTEuQlJBVk9cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkJcIn0sU1tcIlNJLk0xLkNIQVJMSUVcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkNcIn0sU1tcIlNJLk0xLkRFTFRBXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJEXCJ9LFNbXCJTSS5NMS5FQ0hPXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJFXCJ9LFNbXCJTSS5NMS5GT1hUUk9UXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjY4LHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJGXCJ9LFNbXCJTSS5NMS5IT1RFTFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiSFwifSxTW1wiU0kuTTEuSU5EWVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiSVwifSxTW1wiU0kuTTEuTUlLRVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiTVwifSxTW1wiU0kuTTEuT1NDQVJcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIk9cIn0sU1tcIlNJLk0xLlBBUEFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlBcIn0sU1tcIlNJLk0xLlNJRVJSQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDo2OCx5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiU1wifSxTW1wiU0kuTTEuVEFOR09cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlRcIn0sU1tcIlNJLk0xLlVOSUZPUk1cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6NjgseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlVcIn0sU1tcIlNJLk0yLkFMUEhBXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQVwifSxTW1wiU0kuTTIuQlJBVk9cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJCXCJ9LFNbXCJTSS5NMi5DSEFSTElFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiQ1wifSxTW1wiU0kuTTIuQ1lCRVJcIl09cihcIkNZQlwiKSxTW1wiU0kuTTIuREVMVEFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJEXCJ9LFNbXCJTSS5NMi5FQ0hPXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiRVwifSxTW1wiU0kuTTIuRk9YVFJPVFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkZcIn0sU1tcIlNJLk0yLkdPTEZcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJHXCJ9LFNbXCJTSS5NMi5JTkRZXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiSVwifSxTW1wiU0kuTTIuTElNQVwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIkxcIn0sU1tcIlNJLk0yLk1JS0VcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJNXCJ9LFNbXCJTSS5NMi5OT1ZFTUJFUlwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIk5cIn0sU1tcIlNJLk0yLlBBUEFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJQXCJ9LFNbXCJTSS5NMi5TSUVSUkFcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJTXCJ9LFNbXCJTSS5NMi5UQU5HT1wiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMzIseToxMTAsZm9udHNpemU6MjUsdGV4dDpcIlRcIn0sU1tcIlNJLk0yLlVOSUZPUk1cIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTMyLHk6MTEwLGZvbnRzaXplOjI1LHRleHQ6XCJVXCJ9LFNbXCJTSS5NMi5XSElTS0VZXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEzMix5OjExMCxmb250c2l6ZToyNSx0ZXh0OlwiV1wifSxTW1wiU0kuTTMuU1BBQ0VcIl09e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6NzUsZm9udHNpemU6MjUsdGV4dDpcIlNcIn0sU1tcIlNJLk0zLkdST1VORFwiXT17dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseTo3NSxmb250c2l6ZToyNSx0ZXh0OlwiR1wifSxTKVMuaGFzT3duUHJvcGVydHkoTikmJihJLmhhc093blByb3BlcnR5KE4pJiZjb25zb2xlLndhcm4oXCJPdmVycmlkZSBvZjogXCIrTiksbi5jYWxsKHRoaXMsU1tOXSxUKSxJW05dPVNbTl0pfXZhciB6PXt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbZl0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIkktUC1TLS0tLS1cIl09W10sSVtcIkktUC1TQy0tLS1cIl09W10sSVtcIkktUC1TQ0QtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5ERUxUQVwiXSxFW1wiU0kuTTMuU1BBQ0VcIl1dLElbXCJJLVAtU1ItLS0tXCJdPVtdLElbXCJJLVAtU1JELS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkRFTFRBXCJdLEVbXCJTSS5NMi5UQU5HT1wiXSxFW1wiU0kuTTMuU1BBQ0VcIl1dLElbXCJJLVAtU1JFLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkVDSE9cIl0sRVtcIlNJLk0yLlNJRVJSQVwiXSxFW1wiU0kuTTMuU1BBQ0VcIl1dLElbXCJJLVAtU1JJLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLklORFlcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl0sRVtcIlNJLk0zLlNQQUNFXCJdXSxJW1wiSS1QLVNSTS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5GT1hUUk9UXCJdLEVbXCJTSS5NMy5TUEFDRVwiXV0sSVtcIkktUC1TUlQtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVEFOR09cIl0sRVtcIlNJLk0yLkFMUEhBXCJdLEVbXCJTSS5NMy5TUEFDRVwiXV0sSVtcIkktUC1TUlMtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5QQVBBXCJdLEVbXCJTSS5NMy5TUEFDRVwiXV0sSVtcIkktUC1TUlUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVU5JRk9STVwiXSxFW1wiU0kuTTIuTk9WRU1CRVJcIl0sRVtcIlNJLk0zLlNQQUNFXCJdXSxJW1wiSS1BLVMtLS0tLVwiXT1bXSxJW1wiSS1BLVNDLS0tLVwiXT1bXSxJW1wiSS1BLVNDQy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5DSEFSTElFXCJdLEVbXCJTSS5NMi5NSUtFXCJdXSxJW1wiSS1BLVNDTy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5PU0NBUlwiXSxFW1wiU0kuTTIuTElNQVwiXV0sSVtcIkktQS1TQ1AtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuUEFQQVwiXSxFW1wiU0kuTTIuUEFQQVwiXV0sSVtcIkktQS1TQ1MtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5VTklGT1JNXCJdXSxJW1wiSS1BLVNSLS0tLVwiXT1bXSxJW1wiSS1BLVNSQUktLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5BTFBIQVwiXSxFW1wiU0kuTTIuSU5EWVwiXV0sSVtcIkktQS1TUkFTLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQUxQSEFcIl0sRVtcIlNJLk0yLkJSQVZPXCJdXSxJW1wiSS1BLVNSQy0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5DSEFSTElFXCJdLEVbXCJTSS5NMi5JTkRZXCJdXSxJW1wiSS1BLVNSRC0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5ERUxUQVwiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLUEtU1JFLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkVDSE9cIl0sRVtcIlNJLk0yLldISVNLRVlcIl1dLElbXCJJLUEtU1JGLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkZPWFRST1RcIl0sRVtcIlNJLk0yLkNIQVJMSUVcIl1dLElbXCJJLUEtU1JJLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLklORFlcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl1dLElbXCJJLUEtU1JNQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkFMUEhBXCJdXSxJW1wiSS1BLVNSTUQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5ERUxUQVwiXV0sSVtcIkktQS1TUk1HLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuR09MRlwiXV0sSVtcIkktQS1TUk1ULS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLUEtU1JNRi0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl1dLElbXCJJLUEtU1JUSS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5JTkRZXCJdXSxJW1wiSS1BLVNSVEEtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuQUxQSEFcIl1dLElbXCJJLUEtU1JUVC0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5UQU5HT1wiXV0sSVtcIkktQS1TUlUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVU5JRk9STVwiXSxFW1wiU0kuTTIuTk9WRU1CRVJcIl1dLElbXCJJLUctUy0tLS0tXCJdPVtdLElbXCJJLUctU0MtLS0tXCJdPVtdLElbXCJJLUctU0NDLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLkNIQVJMSUVcIl0sRVtcIlNJLk0yLk1JS0VcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TQ08tLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuT1NDQVJcIl0sRVtcIlNJLk0yLkxJTUFcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TQ1AtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuUEFQQVwiXSxFW1wiU0kuTTIuUEFQQVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNDUy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5TSUVSUkFcIl0sRVtcIlNJLk0yLlVOSUZPUk1cIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TQ1QtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuVEFOR09cIl0sRVtcIlNJLk0yLlNJRVJSQVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSLS0tLVwiXT1bXSxJW1wiSS1HLVNSQVQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5BTFBIQVwiXSxFW1wiU0kuTTIuVEFOR09cIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkFBLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQUxQSEFcIl0sRVtcIlNJLk0yLkFMUEhBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JCLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkJSQVZPXCJdLEVbXCJTSS5NMi5TSUVSUkFcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkNTLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQ0hBUkxJRVwiXSxFW1wiU0kuTTIuU0lFUlJBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JDQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkNIQVJMSUVcIl0sRVtcIlNJLk0yLkFMUEhBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JELS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkRFTFRBXCJdLEVbXCJTSS5NMi5UQU5HT1wiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSRS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5FQ0hPXCJdLEVbXCJTSS5NMi5XSElTS0VZXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JGLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkZPWFRST1RcIl0sRVtcIlNJLk0yLkNIQVJMSUVcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkgtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuSE9URUxcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUkktLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuSU5EWVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSTU0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5FQ0hPXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JNQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkFMUEhBXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JNRy0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkdPTEZcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUk1ULS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuVEFOR09cIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUk1GLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuRk9YVFJPVFwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSUy0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5TSUVSUkFcIl0sRVtcIlNJLk0yLlRBTkdPXCJdLEVbXCJTSS5NMy5HUk9VTkRcIl1dLElbXCJJLUctU1JUQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5BTFBIQVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSVEktLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuSU5EWVwiXSxFW1wiU0kuTTMuR1JPVU5EXCJdXSxJW1wiSS1HLVNSVFQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuVEFOR09cIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktRy1TUlUtLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuVU5JRk9STVwiXSxFW1wiU0kuTTIuTk9WRU1CRVJcIl0sRVtcIlNJLk0zLkdST1VORFwiXV0sSVtcIkktUy1TLS0tLS1cIl09W10sSVtcIkktUy1TQy0tLS1cIl09W10sSVtcIkktUy1TQ0MtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuQ0hBUkxJRVwiXSxFW1wiU0kuTTIuTUlLRVwiXV0sSVtcIkktUy1TQ08tLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuT1NDQVJcIl0sRVtcIlNJLk0yLkxJTUFcIl1dLElbXCJJLVMtU0NQLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLlBBUEFcIl0sRVtcIlNJLk0yLlBBUEFcIl1dLElbXCJJLVMtU0NTLS0tXCJdPVtFW1wiU0kuSUMuQ09NTVVOSUNBVElPTlNcIl0sRVtcIlNJLk0xLlNJRVJSQVwiXSxFW1wiU0kuTTIuVU5JRk9STVwiXV0sSVtcIkktUy1TUi0tLS1cIl09W10sSVtcIkktUy1TUkFULS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuQUxQSEFcIl0sRVtcIlNJLk0yLlRBTkdPXCJdXSxJW1wiSS1TLVNSQUEtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5BTFBIQVwiXSxFW1wiU0kuTTIuQUxQSEFcIl1dLElbXCJJLVMtU1JDQS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkNIQVJMSUVcIl0sRVtcIlNJLk0yLkFMUEhBXCJdXSxJW1wiSS1TLVNSQ0ktLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5DSEFSTElFXCJdLEVbXCJTSS5NMi5JTkRZXCJdXSxJW1wiSS1TLVNSRC0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5ERUxUQVwiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLVMtU1JFLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkVDSE9cIl0sRVtcIlNJLk0yLldISVNLRVlcIl1dLElbXCJJLVMtU1JGLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkZPWFRST1RcIl0sRVtcIlNJLk0yLkNIQVJMSUVcIl1dLElbXCJJLVMtU1JILS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkhPVEVMXCJdLEVbXCJTSS5NMi5GT1hUUk9UXCJdXSxJW1wiSS1TLVNSSS0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5JTkRZXCJdLEVbXCJTSS5NMi5GT1hUUk9UXCJdXSxJW1wiSS1TLVNSTU0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5FQ0hPXCJdXSxJW1wiSS1TLVNSTUEtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5NSUtFXCJdLEVbXCJTSS5NMi5BTFBIQVwiXV0sSVtcIkktUy1TUk1HLS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuR09MRlwiXV0sSVtcIkktUy1TUk1ULS1cIl09W0VbXCJTSS5JQy5SQURBUlwiXSxFW1wiU0kuTTEuTUlLRVwiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLVMtU1JNRi0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl1dLElbXCJJLVMtU1JTLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlNJRVJSQVwiXSxFW1wiU0kuTTIuU0lFUlJBXCJdXSxJW1wiSS1TLVNSVEEtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuQUxQSEFcIl1dLElbXCJJLVMtU1JUSS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlRBTkdPXCJdLEVbXCJTSS5NMi5JTkRZXCJdXSxJW1wiSS1TLVNSVFQtLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLVMtU1JVLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlVOSUZPUk1cIl0sRVtcIlNJLk0yLk5PVkVNQkVSXCJdXSxJW1wiSS1VLVMtLS0tLVwiXT1bXSxJW1wiSS1VLVNDLS0tLVwiXT1bXSxJW1wiSS1VLVNDTy0tLVwiXT1bRVtcIlNJLklDLkNPTU1VTklDQVRJT05TXCJdLEVbXCJTSS5NMS5PU0NBUlwiXSxFW1wiU0kuTTIuTElNQVwiXV0sSVtcIkktVS1TQ1AtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuUEFQQVwiXSxFW1wiU0kuTTIuUEFQQVwiXV0sSVtcIkktVS1TQ1MtLS1cIl09W0VbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXSxFW1wiU0kuTTEuU0lFUlJBXCJdLEVbXCJTSS5NMi5VTklGT1JNXCJdXSxJW1wiSS1VLVNSLS0tLVwiXT1bXSxJW1wiSS1VLVNSRC0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5ERUxUQVwiXSxFW1wiU0kuTTIuVEFOR09cIl1dLElbXCJJLVUtU1JFLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLkVDSE9cIl0sRVtcIlNJLk0yLldISVNLRVlcIl1dLElbXCJJLVUtU1JNLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLk1JS0VcIl0sRVtcIlNJLk0yLkZPWFRST1RcIl1dLElbXCJJLVUtU1JTLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlNJRVJSQVwiXSxFW1wiU0kuTTIuU0lFUlJBXCJdXSxJW1wiSS1VLVNSVC0tLVwiXT1bRVtcIlNJLklDLlJBREFSXCJdLEVbXCJTSS5NMS5UQU5HT1wiXSxFW1wiU0kuTTIuQUxQSEFcIl1dLElbXCJJLVUtU1JVLS0tXCJdPVtFW1wiU0kuSUMuUkFEQVJcIl0sRVtcIlNJLk0xLlVOSUZPUk1cIl0sRVtcIlNJLk0yLk5PVkVNQkVSXCJdXX19LEg9e3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltjXSxpY29uczpmdW5jdGlvbihJLHQsRSxSKXtJW1wiTy1WLUEtLS0tLVwiXT1bRVtcIlNULklDLkFSU09OL0ZJUkVcIl1dLElbXCJPLVYtTS0tLS0tXCJdPVtFW1wiU1QuSUMuS0lMTElORyBWSUNUSU1cIl1dLElbXCJPLVYtTUEtLS0tXCJdPVtFW1wiU1QuSUMuS0lMTElORyBWSUNUSU1cIl0sRVtcIlNULk0xLk1VUkRFUlwiXV0sSVtcIk8tVi1NQi0tLS1cIl09W0VbXCJTVC5JQy5LSUxMSU5HIFZJQ1RJTVwiXSxFW1wiU1QuTTEuRVhFQ1VUSU9OIChXUk9OR0ZVTCBLSUxMSU5HKVwiXV0sSVtcIk8tVi1NQy0tLS1cIl09W0VbXCJTVC5JQy5LSUxMSU5HIFZJQ1RJTVwiXSxFW1wiU1QuTTEuQVNTQVNTSU5BVElPTlwiXV0sSVtcIk8tVi1CLS0tLS1cIl09W0VbXCJTVC5JQy5CT01CXCJdXSxJW1wiTy1WLVktLS0tLVwiXT1bRVtcIlNULklDLkJPT0JZIFRSQVBcIl1dLElbXCJPLVYtRC0tLS0tXCJdPVtFW1wiU1QuSUMuRFJJVkUtQlkgU0hPT1RJTkdcIl1dLElbXCJPLVYtUy0tLS0tXCJdPVtFW1wiU1QuSUMuU05JUElOR1wiXV0sSVtcIk8tVi1QLS0tLS1cIl09W0VbXCJTVC5JQy5QT0lTT05JTkdcIl1dLElbXCJPLVYtRS0tLS0tXCJdPVtFW1wiU1QuSUMuRVhQTE9TSU9OXCJdXSxJW1wiTy1WLUVJLS0tLVwiXT1bRVtcIlNULklDLkVYUExPU0lPTlwiXSxFW1wiU1QuSUMuSUVEXCJdXSxJW1wiTy1MLUItLS0tLVwiXT1bRVtcIlNULklDLkJMQUNLIExJU1QgTE9DQVRJT05cIl1dLElbXCJPLUwtRy0tLS0tXCJdPVtFW1wiU1QuSUMuR1JBWSBMSVNUIExPQ0FUSU9OXCJdXSxJW1wiTy1MLVctLS0tLVwiXT1bRVtcIlNULklDLldISVRFIExJU1QgTE9DQVRJT05cIl1dLElbXCJPLUwtTS0tLS0tXCJdPVtFW1wiU1QuSUMuTUFTUyBHUkFWRSBMT0NBVElPTlwiXV0sSVtcIk8tTy1QLS0tLS1cIl09W0VbXCJTVC5JQy5QQVRST0xMSU5HXCJdXSxJW1wiTy1PLVItLS0tLVwiXT1bXSxJW1wiTy1PLVJXLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLldJTExJTkdcIl1dLElbXCJPLU8tUkMtLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuQ09FUkNFRC9JTVBSRVNTRURcIl1dLElbXCJPLU8tRC0tLS0tXCJdPVtFW1wiU1QuSUMuREVNT05TVFJBVElPTlwiXV0sSVtcIk8tTy1NLS0tLS1cIl09W0VbXCJTVC5JQy5NSU5FIExBWUlOR1wiXV0sSVtcIk8tTy1ZLS0tLS1cIl09W0VbXCJTVC5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl1dLElbXCJPLU8tWVQtLS0tXCJdPVtFW1wiU1QuSUMuUkFESU8gQU5EIFRFTEVWSVNJT04gUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdXSxJW1wiTy1PLVlXLS0tLVwiXT1bRVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXSxFW1wiU1QuTTEuV1JJVFRFTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl1dLElbXCJPLU8tWUgtLS0tXCJdPVtFW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdLEVbXCJTVC5NMS5IT1VTRS1UTy1IT1VTRVwiXV0sSVtcIk8tTy1GLS0tLS1cIl09W0VbXCJTVC5JQy5TRUFSQ0hJTkdcIl1dLElbXCJPLU8tUy0tLS0tXCJdPVtFW1wiU1QuSUMuU1BZXCJdXSxJW1wiTy1PLU8tLS0tLVwiXT1bRVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdXSxJW1wiTy1PLUUtLS0tLVwiXT1bRVtcIlNULklDLkVYVE9SVElPTlwiXV0sSVtcIk8tTy1ILS0tLS1cIl09W10sSVtcIk8tTy1IVC0tLS1cIl09W0VbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiTy1PLUhBLS0tLVwiXT1bRVtcIlNULklDLkhJSkFDS0lORyAoQUlSUExBTkUpXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJPLU8tSFYtLS0tXCJdPVtFW1wiU1QuSUMuSElKQUNLSU5HIChCT0FUKVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiTy1PLUstLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLktJRE5BUFBJTkdcIl1dLElbXCJPLU8tS0EtLS0tXCJdPVtFW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxFW1wiU1QuTTEuS0lETkFQUElOR1wiXSxFW1wiU1QuSUMuQVRURU1QVEVEIENSSU1JTkFMIEFDVElWSVRZXCJdXSxJW1wiTy1PLUEtLS0tLVwiXT1bRVtcIlNULklDLkFSUkVTVFwiXV0sSVtcIk8tTy1VLS0tLS1cIl09W0VbXCJTVC5JQy5EUlVHIFJFTEFURUQgQUNUSVZJVElFU1wiXV0sSVtcIk8tTy1DLS0tLS1cIl09W0VbXCJTVC5JQy5DT01QT1NJVEUgTE9TU1wiXV0sSVtcIk8tTy1DQS0tLS1cIl09W0VbXCJTVC5JQy5DT01QT1NJVEUgTE9TU1wiXSxFW1wiU1QuTTEuQ09NQkFUXCJdXSxJW1wiTy1PLUNCLS0tLVwiXT1bRVtcIlNULklDLkNPTVBPU0lURSBMT1NTXCJdLEVbXCJTVC5NMS5BQ0NJREVOVFwiXV0sSVtcIk8tTy1DQy0tLS1cIl09W0VbXCJTVC5JQy5DT01QT1NJVEUgTE9TU1wiXSxFW1wiU1QuTTEuT1RIRVJcIl1dLElbXCJPLUktUi0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl1dLElbXCJPLUktUy0tLS0tXCJdPVtFW1wiU1QuSUMuU0FGRSBIT1VTRVwiXV0sSVtcIk8tSS1HLS0tLS1cIl09W0VbXCJTVC5JQy5HUkFGRklUSVwiXV0sSVtcIk8tSS1WLS0tLS1cIl09W0VbXCJTVC5JQy5WQU5EQUxJU00vTE9PVC9SQU5TQUNLL1BMVU5ERVIvU0FDS1wiXV0sSVtcIk8tSS1JLS0tLS1cIl09W0VbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXV0sSVtcIk8tSS1ELS0tLS1cIl09W0VbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXSxFW1wiU1QuTTEuRFJVR1wiXV0sSVtcIk8tSS1GLS0tLS1cIl09W0VbXCJTVC5JQy5JTlRFUk5BTCBTRUNVUklUWSBGT1JDRVwiXV0sSVtcIk8tUC0tLS0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdXSxJW1wiTy1QLUEtLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLkxFQURFUlwiXV0sSVtcIk8tUC1CLS0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEVbXCJTVC5NMS5UQVJHRVRFRFwiXV0sSVtcIk8tUC1DLS0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEVbXCJTVC5NMS5URVJST1JJU1RcIl1dLElbXCJPLUctLS0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl1dLElbXCJPLUctQS0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl0sRVtcIlNULk0xLkRJU1BMQUNFRCBQRVJTT05TLCBSRUZVR0VFUywgQU5EIEVWQUNVRUVTXCJdXSxJW1wiTy1HLUItLS0tLVwiXT1bRVtcIlNULklDLkdST1VQXCJdLEVbXCJTVC5NMS5OT05HT1ZFUk5NRU5UQUwgT1JHQU5JWkFUSU9OIChOR08pXCJdXSxJW1wiTy1HLUMtLS0tLVwiXT1bRVtcIlNULklDLkdST1VQXCJdLEVbXCJTVC5NMS5URVJST1JJU1RcIl1dLElbXCJPLUctRC0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl0sRVtcIlNULk0xLlJFTElHSU9VU1wiXV0sSVtcIk8tRy1FLS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXSxFW1wiU1QuTTEuRk9SRUlHTiBGSUdIVEVSU1wiXV0sSVtcIk8tRy1GLS0tLS1cIl09W0VbXCJTVC5JQy5HUk9VUFwiXSxFW1wiU1QuTTEuR0FOR1wiXV0sSVtcIk8tUi0tLS0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEVbXCJTVC5NMS5SQVBFXCJdXSxJW1wiTy1SLUEtLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLlJBUEVcIl0sRVtcIlNULklDLkFUVEVNUFRFRCBDUklNSU5BTCBBQ1RJVklUWVwiXV19fTtmdW5jdGlvbiBWKEksdCxFLFIsZSxBKXt2YXIgQz10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFQ9XCJIb3N0aWxlXCIhPUN8fGU/RS5pY29uQ29sb3JbQ106XCJyZ2IoMjU1LCAwLCAwKVwiLFM9XCJIb3N0aWxlXCIhPUN8fGU/RS5maWxsQ29sb3JbQ106XCJyZ2IoMjU1LCAwLCAwKVwiLE49dC5udW1iZXJTSURDLE89RS53aGl0ZVtDXSxHPXt9O2Zvcih2YXIgbyBpbiBHW1wiVFAuREVTVFJPWVwiXT1SfHxOP1t7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDAsNDUgODUsNDYuNzUgbSAzMCwxNi41IDg1LDQ2Ljc1IE0gMCwxNTUgODUsMTA4LjI1IE0gMTE1LDkxLjc1IDIwMCw0NVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJEXCJ9XTp7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAwLDE1NSAyMDAsNDUgTSAwLDQ1IDIwMCwxNTVcIn0sR1tcIlRQLklOVEVSRElDVFwiXT1SfHxOP1t7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDE5NC4yMDMsNjUuNjY3NCA1LjQ5LC0yMC40OTA0IC0yMC40OSwtNS40OTA0IE0gMTE1LDkxLjc1IDIwMCw0NSBNIDAsMTU1IDg1LDEwOC4yNSBNIDE4NSw4NSBsIDE1LDE1IC0xNSwxNSBtIC03MCwtMTUgODUsMCBtIC0yMDAsMCA4NSwwXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIklcIn1dOnt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMCwxMDAgMjAwLDAgTSAwLDE1NSAyMDAsNDUuMiBNIDE4NSw4NSBsIDE1LDE1IC0xNSwxNSBtIDkuMiwtNDkuMyA1LjUsLTIwLjUgLTIwLjUsLTUuNVwifSxHW1wiVFAuTkVVVFJBTElaRVwiXT1SfHxOP1t7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDExNSwxMDguMjUgMjAwLDE1NSBNIDAsNDUgODUsOTEuNzVcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCIxMiw1XCIsZDpcIk0gMTE1LDkxLjc1IDIwMCw0NSBNIDAsMTU1IDg1LDEwOC4yNVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJOXCJ9XTpbe3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAwLDQ1IDIwMCwxNTVcIn0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCIxMiw1XCIsZDpcIk0gMCwxNTUgMjAwLDQ1XCJ9XSxHW1wiVFAuU1VQUFJFU1NcIl09Unx8Tj9be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCIxMiw1XCIsZDpcIk0gMTE1LDEwOC4yNSAyMDAsMTU1IE0gMCw0NSA4NSw5MS43NVwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAxMTUsOTEuNzUgMjAwLDQ1IE0gMCwxNTUgODUsMTA4LjI1XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlNcIn1dOlt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDAsNDUgMjAwLDE1NVwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAwLDE1NSAyMDAsNDVcIn1dLEdbXCJUUC5EQVRVTVwiXT1be3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMCw1MCAwLDUwIDUwLDAgQyAxNTAsNzIuMzg1OCAxMjcuNjE0LDUwIDEwMCw1MCBaIG0gMCw1MCAtNTAsMCBjIDAsMjcuNjE0IDIyLjM4NTgsNTAgNTAsNTAgelwifSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfV0sR1tcIlRQLkJSSUVGIENPTlRBQ1RcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDAgNzAsMCBtIC0zNSw4MCAwLC04MCBtIDAsMTAwIC00NSwtMjAgOTAsMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDo3NSx5OjU1LGZvbnRzaXplOjQ1LHRleHQ6XCJCXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMjUseTo1NSxmb250c2l6ZTo0NSx0ZXh0OlwiQ1wifV0sR1tcIlRQLkxPU1QgQ09OVEFDVFwiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsMCA3MCwwIG0gLTM1LDgwIDAsLTgwIG0gMCwxMDAgLTQ1LC0yMCA5MCwwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4Ojc1LHk6NTUsZm9udHNpemU6NDUsdGV4dDpcIkxcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEyNSx5OjU1LGZvbnRzaXplOjQ1LHRleHQ6XCJDXCJ9XSxHW1wiVFAuU0lOS0VSXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwxNSAwLDY1IE0gNjAsMTUgODAsMCAxMDAsMTUgMTIwLDAgMTQwLDE1XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJNIDEwMCwxMDAgNTUsODAgMTQ1LDgwIFpcIn1dLEdbXCJUUC5UUklBTCBUUkFDS1wiXT1be3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsMCA3MCwwIG0gLTM1LDgwIDAsLTgwIG0gMCwxMDAgLTQ1LC0yMCA5MCwwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4Ojc1LHk6NTUsZm9udHNpemU6NDUsdGV4dDpcIlRcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEyNSx5OjU1LGZvbnRzaXplOjQ1LHRleHQ6XCJUXCJ9XSxHW1wiVFAuU09OT0JVT1lcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTAwLDYwIGwgMCwtMzUgMTAsMTAgMCwtNDVcIn0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo0MH1dLEdbXCJUUC5TT05PQlVPWSBQQVRURVJOIENFTlRFUlwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlBcIn1dLEdbXCJUUC5TT05PQlVPWSBESUZBUlwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkRcIn1dLEdbXCJUUC5TT05PQlVPWSBMT0ZBUlwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkxcIn1dLEdbXCJUUC5TT05PQlVPWSBDQVNTXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiQ1wifV0sR1tcIlRQLlNPTk9CVU9ZIERJQ0FTU1wiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlNcIn1dLEdbXCJUUC5TT05PQlVPWSBCVFwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkJcIn1dLEdbXCJUUC5TT05PQlVPWSBBTk1cIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJBXCJ9XSxHW1wiVFAuU09OT0JVT1kgVkxBRFwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlZcIn1dLEdbXCJUUC5TT05PQlVPWSBBVEFDXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiVFwifV0sR1tcIlRQLlNPTk9CVU9ZIEJBUlJBXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiQlJcIn1dLEdbXCJUUC5TT05PQlVPWSBCQVRIWVRIRVJNT0dSQVBIIFRSQU5TTUlUVElORyBTT05PQlVPWSAoQlQpXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiQlwifV0sR1tcIlRQLlNPTk9CVU9ZIENPTU1BTkQgQUNUSVZFIE1VTFRJQkVBTSBTT05PQlVPWSAoQ0FNQlMpXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiQ01cIn1dLEdbXCJUUC5TT05PQlVPWSBFWFBFTkRBQkxFIFJFTElBQkxFIEFDT1VTVElDIFBBVEggU09OT0JVT1kgKEVSQVBTKVwiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkVcIn1dLEdbXCJUUC5TT05PQlVPWSBST1wiXT1bR1tcIlRQLlNPTk9CVU9ZXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlJcIn1dLEdbXCJUUC5TT05PQlVPWSBLSU5HUElOXCJdPVtHW1wiVFAuU09OT0JVT1lcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiS1wifV0sR1tcIlRQLlNPTk9CVU9ZIEVYUElSRURcIl09W0dbXCJUUC5TT05PQlVPWVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDQwLDYwIGwgMTIwLDgwIE0gNDAsMTQwIGwgMTIwLC04MFwifV0sR1tcIlRQLlNFQVJDSFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA4MCw4MCAyMCwyMCAtMjAsMjAgNDAsMCAtMjAsLTIwIDIwLC0yMCB6IE0gNTAsMTUwIDE1MCw1MCBNIDUwLDUwIDE1MCwxNTBcIn0sR1tcIlRQLlNFQVJDSCBBUkVBXCJdPVtHW1wiVFAuU0VBUkNIXCJdLFJ8fE4/W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDo2MCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiU1wifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTQwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJBXCJ9XTp7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIlNBXCJ9XSxHW1wiVFAuRElQIFBPU0lUSU9OXCJdPVtHW1wiVFAuU0VBUkNIXCJdLFJ8fE4/W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDo2MCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiRFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTQwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJQXCJ9XTp7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIkRJUFwifV0sR1tcIlRQLlNFQVJDSCBDRU5URVJcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJtIDEwMCwxMDAgLTUwLDEwIDAsLTIwIHogbSAwLDAgMTAsNTAgLTIwLDAgeiBtIDAsMCA1MCwtMTAgMCwyMCB6IG0gMCwwIC0xMCwtNTAgMjAsMCB6XCJ9LEdbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTYwLDE2MCA0MCwxNjAgNDAsNDAgMTYwLDQwIFpcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuTkFWSUdBVElPTkFMIFJFRkVSRU5DRVwiXT0hTiYmUj97dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDE2MCwxNjAgNDAsMTYwIDQwLDQwIDE2MCw0MCBaIE0gMTYwLDE2MCA0MCw0MCBNIDQwLDE2MCAxNjAsNDBcIn06e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxNjAsMTYwIDQwLDQwIE0gNDAsMTYwIDE2MCw0MFwifSxHW1wiVFAuU1BFQ0lBTCBQT0lOVFwiXT1bR1tcIlRQLk5BVklHQVRJT05BTCBSRUZFUkVOQ0VcIl0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuQUlSRklFTERcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMzUsMTI1IDE2NSw2MCBtIC0xMzUsNDAgMTQwLDBcIn1dLEdbXCJUUC5ETFJQXCJdPVtHW1wiVFAuU1BFQ0lBTCBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJEXCJ9XSxHW1wiVFAuUE9JTlQgT0YgSU5URU5ERUQgTU9WRU1FTlRcIl09W0dbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiUFwifV0sR1tcIlRQLlBSRS1MQU5ERkFMTCBXQVlQT0lOVFwiXT1bR1tcIlRQLlJFRkVSRU5DRSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJQTFwifV0sR1tcIlRQLk1BUlNIQUxMIFBPSU5UXCJdPVtHW1wiVFAuUkVGRVJFTkNFIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTAsZm9udHNpemU6NDAsdGV4dDpcIk1cIn1dLEdbXCJUUC5SRUZFUkVOQ0UgUE9JTlQgV0FZUE9JTlRcIl09W0dbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiV1wifV0sR1tcIlRQLkNPUlJJRE9SIFRBQlwiXT1bR1tcIlRQLlJFRkVSRU5DRSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTUwLGZvbnRzaXplOjQwLHRleHQ6XCJDXCJ9XSxHW1wiVFAuRU5FTVkgUE9JTlRcIl09W0dbXCJUUC5SRUZFUkVOQ0UgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiRU5ZXCJ9XSxHW1wiVFAuUE9JTlQgT0YgSU5URVJFU1RcIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJNIDEyOS4wMjEsNDEuOTU3IEMgMTIxLjQ4LDQ5Ljk0NTggMTEwLjk4Niw1NC40ODE2IDEwMCw1NC41IDg5LjA0MzIsNTQuNDkyOCA3OC41NjksNDkuOTkxNCA3MS4wMjM0LDQyLjA0NjkgTCAxMDAsMTAwIFpcIn0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxNSxyOjQwfV0sR1tcIlBPSU5UIE9GIElOVEVSRVNUIOKAkyBMQVVOQ0ggRVZFTlRcIl09W0dbXCJUUC5QT0lOVCBPRiBJTlRFUkVTVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MzAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIix0ZXh0OlwiTEVcIn1dLEdbXCJUUC5TSElQIEFSRUEgT0YgSU5URVJFU1QgKEFFR0lTIE9OTFkpXCJdPXt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9LEdbXCJUUC5BQ1RJVkUgTUFOT0VVVlJFIEFSRUEgKEFFR0lTIE9OTFkpXCJdPXt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxzdHJva2U6XCJyZ2IoMjU0LDIwMyw0NylcIixjeDoxMDAsY3k6MTAwLHI6NjB9LEdbXCJUUC5QTEFOIFNISVBcIl09W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDpTLHN0cm9rZTpTLGN4OjEwMCxjeToxMDAscjoxNX0se3R5cGU6XCJjaXJjbGVcIixzdHJva2U6UyxjeDoxMDAsY3k6MTAwLHI6NDUsZmlsbDohMX1dLEdbXCJUUC5BSU0gUE9JTlRcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjozNSxmaWxsOiExfSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjo0NSxmaWxsOiExfV0sR1tcIlRQLkRFRkVOREVEIEFTU0VUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsMTM1IDAsLTMwIDIwLDAgMCwzMCBtIC01MCwwIDAsLTUwIC0xMCwwIDAsLTIwIDIwLDAgMCwxMCAyMCwwIDAsLTEwIDIwLDAgMCwxMCAyMCwwIDAsLTEwIDIwLDAgMCwyMCAtMTAsMCAwLDUwIHpcIn0sR1tcIlRQLkNIRU1JQ0FMIEVWRU5UXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDExMCw2MCBDIDExMCw0MCAxMTUsMjUgODAsMjAgTSA5MCw2MCBDIDkwLDQwIDg1LDI1IDEyMCwyMCBtIC0yMCw4MCAtNjAsLTExMCAxMjAsMCB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCwyMCBjIDEwLDAgMTAsMTUgMCwxNSAtMTAsMCAtMTAsLTE1IDAsLTE1IHogTSA4MCwzNSBjIDEwLDAgMTAsLTE1IDAsLTE1IC0xMCwwIC0xMCwxNSAwLDE1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjMwLHRleHQ6XCJDXCJ9XSxHW1wiVFAuQ0hFTUlDQUwg4oCTIFRPWElDIElORFVTVFJJQUwgTUFURVJJQUxcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTEwLDYwIEMgMTEwLDQwIDExNSwyNSA4MCwyMCBNIDkwLDYwIEMgOTAsNDAgODUsMjUgMTIwLDIwIG0gLTIwLDgwIC02MCwtMTEwIDEyMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDIwIGMgMTAsMCAxMCwxNSAwLDE1IC0xMCwwIC0xMCwtMTUgMCwtMTUgeiBNIDgwLDM1IGMgMTAsMCAxMCwtMTUgMCwtMTUgLTEwLDAgLTEwLDE1IDAsMTUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MjAsZm9udHNpemU6MzAsdGV4dDpcIkNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojg1LGZvbnRzaXplOjMwLHRleHQ6XCJUXCJ9XSxHW1wiVFAuQklPTE9HSUNBTCBFVkVOVFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMTAsNjAgQyAxMTAsNDAgMTE1LDI1IDgwLDIwIE0gOTAsNjAgQyA5MCw0MCA4NSwyNSAxMjAsMjAgbSAtMjAsODAgLTYwLC0xMTAgMTIwLDAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMjAgYyAxMCwwIDEwLDE1IDAsMTUgLTEwLDAgLTEwLC0xNSAwLC0xNSB6IE0gODAsMzUgYyAxMCwwIDEwLC0xNSAwLC0xNSAtMTAsMCAtMTAsMTUgMCwxNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozMCx0ZXh0OlwiQlwifV0sR1tcIlRQLkJJT0xPR0lDQUwg4oCTIFRPWElDIElORFVTVFJJQUwgTUFURVJJQUxcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTEwLDYwIEMgMTEwLDQwIDExNSwyNSA4MCwyMCBNIDkwLDYwIEMgOTAsNDAgODUsMjUgMTIwLDIwIG0gLTIwLDgwIC02MCwtMTEwIDEyMCwwIHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTIwLDIwIGMgMTAsMCAxMCwxNSAwLDE1IC0xMCwwIC0xMCwtMTUgMCwtMTUgeiBNIDgwLDM1IGMgMTAsMCAxMCwtMTUgMCwtMTUgLTEwLDAgLTEwLDE1IDAsMTUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MjAsZm9udHNpemU6MzAsdGV4dDpcIkJcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojg1LGZvbnRzaXplOjMwLHRleHQ6XCJUXCJ9XSxHW1wiVFAuTlVDTEVBUiBFVkVOVFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMTAsNjAgQyAxMTAsNDAgMTE1LDI1IDgwLDIwIE0gOTAsNjAgQyA5MCw0MCA4NSwyNSAxMjAsMjAgbSAtMjAsODAgLTYwLC0xMTAgMTIwLDAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMjAgYyAxMCwwIDEwLDE1IDAsMTUgLTEwLDAgLTEwLC0xNSAwLC0xNSB6IE0gODAsMzUgYyAxMCwwIDEwLC0xNSAwLC0xNSAtMTAsMCAtMTAsMTUgMCwxNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozMCx0ZXh0OlwiTlwifV0sR1tcIlRQLlJBRElPTE9HSUNBTCBFVkVOVFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMTAsNjAgQyAxMTAsNDAgMTE1LDI1IDgwLDIwIE0gOTAsNjAgQyA5MCw0MCA4NSwyNSAxMjAsMjAgbSAtMjAsODAgLTYwLC0xMTAgMTIwLDAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMjAgYyAxMCwwIDEwLDE1IDAsMTUgLTEwLDAgLTEwLC0xNSAwLC0xNSB6IE0gODAsMzUgYyAxMCwwIDEwLC0xNSAwLC0xNSAtMTAsMCAtMTAsMTUgMCwxNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozMCx0ZXh0OlwiUlwifV0sR1tcIlRQLlJBRElPTE9HSUNBTCDigJMgVE9YSUMgSU5EVVNUUklBTCBNQVRFUklBTFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMTAsNjAgQyAxMTAsNDAgMTE1LDI1IDgwLDIwIE0gOTAsNjAgQyA5MCw0MCA4NSwyNSAxMjAsMjAgbSAtMjAsODAgLTYwLC0xMTAgMTIwLDAgelwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjAsMjAgYyAxMCwwIDEwLDE1IDAsMTUgLTEwLDAgLTEwLC0xNSAwLC0xNSB6IE0gODAsMzUgYyAxMCwwIDEwLC0xNSAwLC0xNSAtMTAsMCAtMTAsMTUgMCwxNSB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozMCx0ZXh0OlwiUlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6ODUsZm9udHNpemU6MzAsdGV4dDpcIlRcIn1dLEdbXCJUUC5EUk9QIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTMwLDEwMCAwLC00MCBtIC02MCw0MCAwLC00MCBtIDYwLDQwIDAsMCBjIDAsOC4yODQgLTYuNzE2LDE1IC0xNSwxNSAtOC4yODQsMCAtMTUsLTYuNzE2IC0xNSwtMTUgbSAwLDAgMCwwIGMgMCw4LjI4NCAtNi43MTU3LDE1IC0xNSwxNSAtOC4yODQzLDAgLTE1LC02LjcxNiAtMTUsLTE1IG0gMzAsLTQwIDAsNDBcIn0sR1tcIlRQLkVOVFJZIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTAwLDEwMCAwLC01MCBtIC0zNSwxNSAzNSwzNSAzNSwtMzUgbSAtODUsMzUgMTAwLDBcIn0sR1tcIlRQLkFJUiBERVRPTkFUSU9OXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDU1LDE1MCA5MCwwIG0gLTM1LC05NSA1LDIwIDE1LC0xMCAwLDE1IDE1LDUgLTE1LDEwIDE1LDEwIC0xNSw1IDUsMTUgLTIwLC01IC01LDIwIC0xMCwtMTUgLTEwLDIwIC01LC0yNSAtMjAsMTAgNSwtMTUgTCA1NSwxMDUgNzAsOTUgNjAsODUgNzAsODAgNzAsNjUgODUsNzUgOTAsNTUgMTAwLDcwIFpcIixmaWxsOiExfSxHW1wiVFAuR1JPVU5EIFpFUk9cIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOiExLGQ6XCJNIDEwMCAyOCBDIDEwMCAyOCA2NS40Mzk4IDI5LjgyNjEgNjEuNjU0MyA1NSBDIDYwLjI4MjYgNjQuMTIxMyA3NS4wMTE1IDcwLjQ4ODQgODIuMjM2MyA3MS42NTQzIEMgODkuNDYxMSA3Mi44MjAxIDkxLjcyNzcgNTUuMzQ2MiA5OC41MDk4IDU2LjAzNzEgTCA5MyA5MCBDIDkzIDkwIDcwIDkwIDY3IDk3IEMgNjUuMDMwNCAxMDEuNTk2IDEwMCAxMDAgMTAwIDEwMCBDIDEwMCAxMDAgMTM0Ljk3IDEwMS41OTYgMTMzIDk3IEMgMTMwIDkwIDEwNyA5MCAxMDcgOTAgTCAxMDEuNDkgNTYuMDM3MSBDIDEwOC4yNzIgNTUuMzQ2MiAxMTAuNTM5IDcyLjgyMDEgMTE3Ljc2NCA3MS42NTQzIEMgMTI0Ljk4OCA3MC40ODg0IDEzOS43MTggNjQuMTIxMyAxMzguMzQ2IDU1IEMgMTM0LjU2IDI5LjgyNjEgMTAwIDI4IDEwMCAyOCB6XCJ9LEdbXCJUUC5MQVVOQ0hFRCBUT1JQRURPIChBRUdJUyBPTkxZKVwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxNTAsOTAgMCwyMCBtIC0xMCwtMTAgMTAsMCBtIC05NywtMTAgODQsMCBjIDEuNjYyLDAgMywxLjMzOCAzLDMgbCAwLDE0IGMgMCwxLjY2MiAtMS4zMzgsMyAtMywzIGwgLTg0LDAgYyAtMS42NjIsMCAtMywtMS4zMzggLTMsLTMgbCAwLC0xNCBjIDAsLTEuNjYyIDEuMzM4LC0zIDMsLTMgelwifSxHW1wiVFAuTVNMIERFVEVDVCBQT0lOVFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA5NSwxMDAgMCwtNTUgLTEwLDAgMTUsLTE1IDE1LDE1IC0xMCwwIDAsNTUgbSAtNTUsMCAxMDAsMFwifSxHW1wiVFAuQUNPVVNUSUMgQ09VTlRFUiBNRUFTVVJFIChERUNPWSlcIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTA3LjUsNTUgOTIuNTUxOCw3MCAxMDcuNSw4NSBaIE0gNTAsMzAgMTUwLDMwIG0gLTkwLDcwIDAsLTUgODAsMCAwLDUgeiBtIDcwLC00NSAtMTUsMTUgMTUsMTUgeiBNIDg1LDU1IDcwLDcwIDg1LDg1IFogbSAxNSwtMjUgMCwzM1wifSxHW1wiVFAuRUxFQ1RST05JQyBDT1VOVEVSIE1FQVNVUkVTIChFQ00pIERFQ09ZXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSA4MCwxMjAgLTIwLDEwIDIwLDEwIHogbSAzMCwwIC0yMCwxMCAyMCwxMCAwLC0yMCB6IG0gMzAsMCAtMjAsMTAgMjAsMTAgeiBtIC0yNSwtMjAgYyAwLDEwIC0xMCwxOCAtMTkuNCwxNCAtOS40LC0yIC0xMy44LC0xNC43IC04LC0yMi41IDUuMiwtOC4yIDE4LjQsLTguNyAyNC40LC0wLjggMiwyLjYgMyw1LjkgMyw5LjMgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDUwLDUwIDAsMTAwIDEwMCwwIDAsLTEwMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo4MCxmb250c2l6ZTozMCx0ZXh0OlwiRUNNXCJ9XSxHW1wiVFAuSU1QQUNUIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDUwLDEwMCA0MCwtMTAgMTAsLTQwIDEwLDQwIDQwLDEwIC00MCwxMCAtMTAsNDAgLTEwLC00MCAtNDAsLTEwXCJ9LEdbXCJUUC5QUkVESUNURUQgSU1QQUNUIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiMTIsNVwiLGQ6XCJtIDUwLDEwMCA0MCwtMTAgMTAsLTQwIDEwLDQwIDQwLDEwIC00MCwxMCAtMTAsNDAgLTEwLC00MCAtNDAsLTEwXCJ9LEdbXCJUUC5GT1JNQVRJT05cIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsNTAgMCwxMDAgbSAtNTAsLTUwIDEwMCwwXCJ9LEdbXCJUUC5IQVJCT1JcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA4MCwxNDAgNTAsNjAgMTUwLDYwIDEyMCwxNDBcIn0sR1tcIlRQLkhBUkJPUiBQT0lOVCBRXCJdPVtHW1wiVFAuSEFSQk9SXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlFcIn1dLEdbXCJUUC5IQVJCT1IgUE9JTlQgQVwiXT1bR1tcIlRQLkhBUkJPUlwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJBXCJ9XSxHW1wiVFAuSEFSQk9SIFBPSU5UIFlcIl09W0dbXCJUUC5IQVJCT1JcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiWVwifV0sR1tcIlRQLkhBUkJPUiBQT0lOVCBYXCJdPVtHW1wiVFAuSEFSQk9SXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlhcIn1dLEdbXCJUUC5ST1VURVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEzOC40ODQsNzYuODIgYyAwLC03LjQ4MjMgNi4wNjYsLTEzLjU0NzggMTMuNTQ4LC0xMy41NDggNy40ODMsLTNlLTQgMTMuNTQ5LDYuMDY1MyAxMy41NDksMTMuNTQ4IG0gLTI3LjA5NywwIDAsMCBjIDAsNi45NDg0IC01LjYzNCwxMi41ODA3IC0xMi41ODIsMTIuNTggLTYuOTQ4LC00ZS00IC0xMi41OCwtNS42MzI0IC0xMi41OCwtMTIuNTggbSAtMjcuMDk3LDAgYyAyZS00LC03LjQ4MjMgNi4wNjU3LC0xMy41NDc4IDEzLjU0OCwtMTMuNTQ4IDcuNDgzLC0zZS00IDEzLjU0OSw2LjA2NTMgMTMuNTQ5LDEzLjU0OCBtIC03OS4zNTU0LDAgYyAyZS00LC03LjQ4MjQgNi4wNjYsLTEzLjU0OCAxMy41NDg0LC0xMy41NDggNy40ODI0LDAgMTMuNTQ4Miw2LjA2NTYgMTMuNTQ4NCwxMy41NDggbSAyNS4xNjE2LDAgMCwwIEMgODYuMjI0Niw4My43NjgxIDgwLjU5MTgsODkuNDAwMyA3My42NDM3LDg5LjQgNjYuNjk2LDg5LjM5OTggNjEuMDYzOCw4My43Njc3IDYxLjA2MzQsNzYuODIgbSA3Ny40MjA2LDQ3LjMyOCBjIDAsLTcuNDgyIDYuMDY2LC0xMy41NDggMTMuNTQ4LC0xMy41NDggNy40ODMsMCAxMy41NDksNi4wNjUgMTMuNTQ5LDEzLjU0OCBtIC0yNy4wOTcsMCAwLDAgYyAwLDYuOTQ4IC01LjYzNCwxMi41ODEgLTEyLjU4MiwxMi41OCAtNi45NDgsMCAtMTIuNTgsLTUuNjMyIC0xMi41OCwtMTIuNTggbSAtMjcuMDk3LDAgYyAyZS00LC03LjQ4MiA2LjA2NTcsLTEzLjU0OCAxMy41NDgsLTEzLjU0OCA3LjQ4MywwIDEzLjU0OSw2LjA2NSAxMy41NDksMTMuNTQ4IG0gLTc5LjM1NTQsMCBjIDJlLTQsLTcuNDgyIDYuMDY2LC0xMy41NDggMTMuNTQ4NCwtMTMuNTQ4IDcuNDgyNCwwIDEzLjU0ODIsNi4wNjYgMTMuNTQ4NCwxMy41NDggbSAyNS4xNjE2LDAgMCwwIGMgLTRlLTQsNi45NDggLTUuNjMzMiwxMi41OCAtMTIuNTgxMywxMi41OCAtNi45NDc3LDAgLTEyLjU3OTksLTUuNjMyIC0xMi41ODAzLC0xMi41OCBtIC0yNy4wOTY4LC0yMy42NjQgMTMyLjUxODQsMFwifSxHW1wiVFAuUk9VVEUgUkVOREVaVk9VU1wiXT1bR1tcIlRQLlJPVVRFXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNzAsZm9udHNpemU6NDUsdGV4dDpcIlJcIn1dLEdbXCJUUC5ST1VURSBESVZFUlNJT05TXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiRFwifV0sR1tcIlRQLlJPVVRFIFdBWVBPSU5UXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiV1wifV0sR1tcIlRQLlJPVVRFIFBJTVwiXT1bR1tcIlRQLlJPVVRFXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNzAsZm9udHNpemU6NDUsdGV4dDpcIk1cIn1dLEdbXCJUUC5ST1VURSBQT0lOVCBSXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiUFwifV0sR1tcIlRQLlBJQ0tFVCBST1VURVwiXT1bR1tcIlRQLlJPVVRFXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNzAsZm9udHNpemU6NDUsdGV4dDpcIlBLXCJ9XSxHW1wiVFAuUE9JTlQgUiBST1VURVwiXT1bR1tcIlRQLlJPVVRFXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNzAsZm9udHNpemU6NDUsdGV4dDpcIlJcIn1dLEdbXCJUUC5SRU5ERVpWT1VTIFJPVVRFXCJdPVtHW1wiVFAuUk9VVEVcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE3MCxmb250c2l6ZTo0NSx0ZXh0OlwiUlpcIn1dLEdbXCJUUC5BSVIgQ09OVFJPTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDE0MCwxNjUgMCwtMTMwIG0gLTgwLDAgMCwxMzBcIn0sR1tcIlRQLkFJUiBDT05UUk9MIFBPSU5UXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuQ09NQkFUIEFJUiBQQVRST0wgKENBUClcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJDXCJ9XSxHW1wiVFAuQUlSQk9STkUgRUFSTFkgV0FSTklORyAoQUVXKVwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIldcIn1dLEdbXCJUUC5UQU5LSU5HXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ok58fFI/MTE1OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiS1wifSxOfHxSP1tdOnt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fV0sR1tcIlRQLkZJWEVEIFdJTkdcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSxOfHxSP1t7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NzUsZm9udHNpemU6MzIsdGV4dDpSP1wiQVNXXCI6XCJBU1wifSx7dHlwZTpcInBhdGhcIixkOlI/XCJtIDEwMCw4MS4zMjAzIGMgLTEuNTEzNSwtMCAtMi41MzY1LDIuNjQyNiAtMi41MzY1LDIuNjQyNiBsIC0wLjEzNjUsMTQuMTQ2NSAtMjguMzY0MSwyOS45OTk2IDAuMTQ4NCw0LjYwNCAyOC41MTYyLC0xOC43NDggLTAuMjkyOSwyNC40MyAtNi4zMDczLDYuMDE3IC0wLjA5NiwzLjc2NiA4LjAzMTMsLTMuNTI0IDEuMDMxMiwzLjMyNiAwLDAuMDIgMCwtMC4wMSAwLDAuMDEgMCwtMC4wMiAxLjAzMTIsLTMuMzI2IDguMDMxLDMuNTI0IC0wLjA5LC0zLjc2NiAtNi4zMDksLTYuMDE3IC0wLjI5MywtMjQuNDMgMjguNTE4LDE4Ljc0OCAwLjE0NiwtNC42MDQgLTI4LjM2NCwtMjkuOTk5NiAtMC4xMzYsLTE0LjE0NjUgYyAwLDAgLTEuMDE0LC0yLjY0MTYgLTIuNTI4LC0yLjY0MjYgelwiOlwiTSA4MCw4OC4zIEMgNjAsODAgNjAsMTIwIDgwLDExMS40IEwgMTAwLjIsOTkuOSAxMjAsMTExLjMgQyAxNDAsMTIwIDE0MCw4MCAxMjAsODguNiBsIC0xOS44LDExLjMgelwiLHN0cm9rZTohMX1dOlt7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJGXCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fV1dLEdbXCJUUC5ST1RBUlkgV0lOR1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLE58fFI/W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3NSxmb250c2l6ZTozMix0ZXh0OlwiQVNXXCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDgwIDAsNDAgNzAsLTQwIDAsNDAgLTcwLC00MFwiLHN0cm9rZTohMX1dOlt7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJIXCJ9LHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fV1dLEdbXCJUUC5TVUNBUCAtIEZJWEVEIFdJTkdcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NzUsZm9udHNpemU6MzIsdGV4dDpcIlNVV1wifSx7dHlwZTpcInBhdGhcIixkOlI/XCJtIDEwMCw4MS4zMjAzIGMgLTEuNTEzNSwtMCAtMi41MzY1LDIuNjQyNiAtMi41MzY1LDIuNjQyNiBsIC0wLjEzNjUsMTQuMTQ2NSAtMjguMzY0MSwyOS45OTk2IDAuMTQ4NCw0LjYwNCAyOC41MTYyLC0xOC43NDggLTAuMjkyOSwyNC40MyAtNi4zMDczLDYuMDE3IC0wLjA5NiwzLjc2NiA4LjAzMTMsLTMuNTI0IDEuMDMxMiwzLjMyNiAwLDAuMDIgMCwtMC4wMSAwLDAuMDEgMCwtMC4wMiAxLjAzMTIsLTMuMzI2IDguMDMxLDMuNTI0IC0wLjA5LC0zLjc2NiAtNi4zMDksLTYuMDE3IC0wLjI5MywtMjQuNDMgMjguNTE4LDE4Ljc0OCAwLjE0NiwtNC42MDQgLTI4LjM2NCwtMjkuOTk5NiAtMC4xMzYsLTE0LjE0NjUgYyAwLDAgLTEuMDE0LC0yLjY0MTYgLTIuNTI4LC0yLjY0MjYgelwiOlwiTSA4MCw4OC4zIEMgNjAsODAgNjAsMTIwIDgwLDExMS40IEwgMTAwLjIsOTkuOSAxMjAsMTExLjMgQyAxNDAsMTIwIDE0MCw4MCAxMjAsODguNiBsIC0xOS44LDExLjMgelwiLHN0cm9rZTohMX1dLEdbXCJUUC5TVUNBUCAtIFJPVEFSWSBXSU5HXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc1LGZvbnRzaXplOjMyLHRleHQ6XCJBU1dcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNjUsODAgMCw0MCA3MCwtNDAgMCw0MCAtNzAsLTQwXCIsc3Ryb2tlOiExfV0sR1tcIlRQLk1JVyAtIEZJWEVEIFdJTkdcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NzUsZm9udHNpemU6MzIsdGV4dDpSP1wiTUlXXCI6XCJNV1wifSx7dHlwZTpcInBhdGhcIixkOlI/XCJtIDEwMCw4MS4zMjAzIGMgLTEuNTEzNSwtMCAtMi41MzY1LDIuNjQyNiAtMi41MzY1LDIuNjQyNiBsIC0wLjEzNjUsMTQuMTQ2NSAtMjguMzY0MSwyOS45OTk2IDAuMTQ4NCw0LjYwNCAyOC41MTYyLC0xOC43NDggLTAuMjkyOSwyNC40MyAtNi4zMDczLDYuMDE3IC0wLjA5NiwzLjc2NiA4LjAzMTMsLTMuNTI0IDEuMDMxMiwzLjMyNiAwLDAuMDIgMCwtMC4wMSAwLDAuMDEgMCwtMC4wMiAxLjAzMTIsLTMuMzI2IDguMDMxLDMuNTI0IC0wLjA5LC0zLjc2NiAtNi4zMDksLTYuMDE3IC0wLjI5MywtMjQuNDMgMjguNTE4LDE4Ljc0OCAwLjE0NiwtNC42MDQgLTI4LjM2NCwtMjkuOTk5NiAtMC4xMzYsLTE0LjE0NjUgYyAwLDAgLTEuMDE0LC0yLjY0MTYgLTIuNTI4LC0yLjY0MjYgelwiOlwiTSA4MCw4OC4zIEMgNjAsODAgNjAsMTIwIDgwLDExMS40IEwgMTAwLjIsOTkuOSAxMjAsMTExLjMgQyAxNDAsMTIwIDE0MCw4MCAxMjAsODguNiBsIC0xOS44LDExLjMgelwiLHN0cm9rZTohMX1dLEdbXCJUUC5NSVcgLSBST1RBUlkgV0lOR1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3NSxmb250c2l6ZTozMix0ZXh0OlI/XCJNSVdcIjpcIk1XXCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDY1LDgwIDAsNDAgNzAsLTQwIDAsNDAgLTcwLC00MFwiLHN0cm9rZTohMX1dLEdbXCJUUC5TVFJJS0UgSVBcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSxOfHxSP3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlNcIn06W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTUsZm9udHNpemU6NDUsdGV4dDpcIlNcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XV0sR1tcIlRQLkNPUlJJRE9SIFRBQiBQT0lOVFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTUsZm9udHNpemU6NDUsdGV4dDpcIkNcIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuQUlSIENPTlRST0wgUkVOREVaVk9VU1wiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTpOfHxSPzExNToxNTUsZm9udHNpemU6NDUsdGV4dDpcIlJaXCJ9XSxHW1wiVFAuQ0FQIFNUQVRJT05cIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6Tnx8Uj8xMTU6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJDXCJ9XSxHW1wiVFAuQUVXIFNUQVRJT05cIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6Tnx8Uj8xMTU6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJXXCJ9XSxHW1wiVFAuVEFDQU5cIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6Tnx8Uj8xMTU6MTU1LGZvbnRzaXplOjQ1LHRleHQ6XCJUXCJ9LE58fFI/W106e3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuUkVQTEVOSVNITUVOVCBTVEFUSU9OXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ok58fFI/MTE1OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiUlBcIn1dLEdbXCJUUC5UQU5LSU5HXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ok58fFI/MTE1OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiS1wifV0sR1tcIlRQLlRPTUNBVFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLE58fFI/e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiVENcIn06W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTUsZm9udHNpemU6NDUsdGV4dDpcIk9cIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XV0sR1tcIlRQLlJFU0NVRVwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLE4/e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUlNcIn06Uj97dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJSQ1wifTpbe3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiUlwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dXSxHW1wiVFAuUkVQTEVOSVNIXCJdPVtHW1wiVFAuQUlSIENPTlRST0xcIl0sTnx8Uj97dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJSUFwifTpbe3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1NSxmb250c2l6ZTo0NSx0ZXh0OlwiRlwifSx7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dXSxHW1wiVFAuTUFSU0hBTExcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSxOfHxSP3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk1cIn06W3t0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTUsZm9udHNpemU6NDUsdGV4dDpcIk1cIn0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XV0sR1tcIlRQLlVOTUFOTkVEIEFFUklBTCBTWVNURU1cIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzAsODUgMzAsMTUgMzAsLTE1IDAsMTUgLTMwLDE1IC0zMCwtMTUgelwifV0sR1tcIlRQLlZUVUFcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gNzAsOTUgMzAsMTUgMzAsLTE1IDAsMzAgLTMwLC0xNSAtMzAsMTUgeiBtIDAsLTI1IDMwLDE1IDMwLC0xNSAwLDE1IC0zMCwxNSAtMzAsLTE1IHpcIn1dLEdbXCJUUC5PUkJJVFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk9cIn1dLEdbXCJUUC5PUkJJVCAtIEZJR1VSRSBFSUdIVFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk9cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiRjhcIn1dLEdbXCJUUC5PUkJJVCAtIFJBQ0UgVFJBQ0tcIl09W0dbXCJUUC5BSVIgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJPXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNTAsZm9udHNpemU6NDAsdGV4dDpcIlJUXCJ9XSxHW1wiVFAuT1JCSVQgLSBSQU5ET00sIENMT1NFRFwiXT1bR1tcIlRQLkFJUiBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk9cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE1MCxmb250c2l6ZTo0MCx0ZXh0OlwiUkNcIn1dLEdbXCJUUC5BQ1RJT04gUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2MCw0NSA4MCwwIG0gLTQwLDU1IC00MCwtNTUgMCwtMTA1IDgwLDAgMCwxMDUgelwifSxHW1wiVFAuQUNUSU9OIENIRUNLIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkNLUFwifV0sR1tcIlRQLkNPTlRBQ1QgUE9JTlRcIl09Tj97dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDUwLDUwIDE1MCw1MCAxNTAsMTUwIDUwLDE1MHpcIn06e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsMTAwIDAsLTM1IC00NSwwIDAsLTc1IDkwLDAgMCw3NSAtNDUsMFwifSxHW1wiVFAuQ0VOVFJFIE9GIE1BSU4gRUZGT1JUXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDE1NSwxMDAgMCwtMzUgTSA0NSwxMDAgNDUsNjUgbSA4OCwwIDAsMzUgbSAtMjIsLTM1IDAsMzUgbSAtMjIsLTM1IDAsMzUgbSAtMjIsMCAwLC0zNSBtIC0zNyw3MCAwLC0zNSAxNDAsMCAwLDQwXCJ9XSxHW1wiVFAuQ09PUkRJTkFUSU9OIFBPSU5UXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEzNSA3MCwtNzAgbSAtNzAsMCA3MCw3MFwifSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfV0sR1tcIlRQLkRFQ0lTSU9OIFBPSU5UXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gOTkuOTk5OCwyNS41ODg2IDExNy4wNjEsNzYuNTE5MiAxNzAuNzcsNzcuMDA1NCAxMjcuNjA0LDEwOC45NjggMTQzLjczOCwxNjAuMiAxMDAsMTI5LjAyNCA1Ni4yNjI0LDE2MC4yIDcyLjM5NjcsMTA4Ljk2OCAyOS4yMzA2LDc3LjAwNTkgODIuOTQwMyw3Ni41MTkyIFpcIn0sR1tcIlRQLkRJU1RSRVNTIENBTExcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiU09TXCJ9XSxHW1wiVFAuRU5UUlkgQ09OVFJPTCBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJFQ1wifV0sR1tcIlRQLkZMWS1UTy1QT0lOVCAoU09OT0JVT1kpXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkZUUFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MjAsZm9udHNpemU6MzUsdGV4dDpcIlNCWVwifV0sR1tcIlRQLkZMWS1UTy1QT0lOVCAoV0VBUE9OKVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJGVFBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjM1LHRleHQ6XCJXUE5cIn1dLEdbXCJUUC5GTFktVE8tUE9JTlQgKE5PUk1BTClcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiRlRQXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToyMCxmb250c2l6ZTozNSx0ZXh0OlwiTlJNXCJ9XSxHW1wiVFAuQUNUSU9OIExJTktVUCBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJMVVwifV0sR1tcIlRQLkFDVElPTiBQQVNTQUdFIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlBQXCJ9XSxHW1wiVFAuQUNUSU9OIFJBTExZIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlJMWVwifV0sR1tcIlRQLkFDVElPTiBSRUxFQVNFIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlJQXCJ9XSxHW1wiVFAuQUNUSU9OIFNUQVJUIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlNQXCJ9XSxHW1wiVFAuQUNUSU9OIEFNTkVTVFkgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQU1OXCJ9XSxHW1wiVFAuV0FZUE9JTlRcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2V3aWR0aDo4LGQ6XCJtIDY1LDEzNSA3MCwtNzAgbSAtNzAsMCA3MCw3MFwifSxHW1wiVFAuQ09NQkFUQU5UIFNUQVRJT05cIl09W0dbXCJUUC5XQVlQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIkNCVFwifV0sR1tcIlRQLlBJQ0tFVCBTVEFUSU9OXCJdPVtHW1wiVFAuV0FZUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4Ojc1LHk6MTE1LGZvbnRzaXplOjQwLHRleHQ6XCJQS1RcIn1dLEdbXCJUUC5BU1cgU0hJUCBTVEFUSU9OXCJdPVtHW1wiVFAuV0FZUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4Ojc1LHk6MTE1LGZvbnRzaXplOjQwLHRleHQ6XCJBU1dcIn1dLEdbXCJUUC5SRVBMRU5JU0hNRU5UIEFUIFNFQSAoUkFTKSBTVEFUSU9OXCJdPVtHW1wiVFAuV0FZUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4Ojc1LHk6MTE1LGZvbnRzaXplOjQwLHRleHQ6XCJSQVNcIn1dLEdbXCJUUC5SRVNDVUUgU1RBVElPTlwiXT1bR1tcIlRQLldBWVBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo3NSx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiUlNDXCJ9XSxHW1wiVFAuU1VCTUFSSU5FIFNUQVRJT05cIl09W0dbXCJUUC5XQVlQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NzUseToxMTUsZm9udHNpemU6NDAsdGV4dDpcIlNVQlwifV0sR1tcIlRQLkFTVyBTVUJNQVJJTkUgU1RBVElPTlwiXT1bR1tcIlRQLldBWVBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo3NSx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiQVNXL1NVQlwifV0sR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAzMCw2MCAxNDAsMCBtIC0xNDAsODAgMTQwLDBcIn0sR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuKFVTVikgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLDExNSA0NSwtMjAgMCwtMTUgLTQ1LDIwIC00NSwtMjAgMCwxNSB6XCJ9XSxHW1wiVFAuKFVTVilcIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA1NSwxMDAgNDUsMjAgNDUsLTIwIDAsMTUgLTQ1LDIwIC00NSwtMjAgelwifV0sR1tcIlRQLihSTVYpIFVTViBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVNWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIlJNVlwifV0sR1tcIlRQLlVTViAtIEFTVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVNWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIkFTV1wifV0sR1tcIlRQLk1JTkUgV0FSRkFSRSBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgU1VSRkFDRSBTVEFUSU9OXCJdPVtHW1wiVFAuKFVTVilcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojk1LGZvbnRzaXplOjQwLHRleHQ6XCJNV1wifV0sR1tcIlRQLlVTViAtIFNVVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVNWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIlNVV1wifV0sR1tcIlRQLlVTViAtIE1JVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVNWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIk1JV1wifV0sR1tcIlRQLkFTVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIkFTV1wifV0sR1tcIlRQLk1JTkUgV0FSRkFSRSBTVVJGQUNFIFNUQVRJT05cIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk1XXCJ9XSxHW1wiVFAuTk9OLUNPTUJBVEFOVCBTVVJGQUNFIFNUQVRJT05cIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIk5DXCJ9XSxHW1wiVFAuU1VXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiU1VXXCJ9XSxHW1wiVFAuTUlXIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiTUlXXCJ9XSxHW1wiVFAuUElDS0VUIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUEtcIn1dLEdbXCJUUC5SRU5ERVpWT1VTIENPTlRST0wgUE9JTlRcIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlJaXCJ9XSxHW1wiVFAuUkVQTEVOSVNITUVOVCBBVCBTRUEgU1VSRkFDRSBTVEFUSU9OXCJdPVtHW1wiVFAuU0VBIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1LHRleHQ6XCJSQVNcIn1dLEdbXCJUUC5SRVNDVUUgQ09OVFJPTCBQT0lOVFwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiUlNcIn1dLEdbXCJUUC5SRVBMRU5JU0hNRU5UIENPTlRST0wgUE9JTlRcIl09W0dbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsdGV4dDpcIlJQXCJ9XSxHW1wiVFAuTk9OQ09NQkFUQU5UIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNFQSBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSx0ZXh0OlwiTkNcIn1dLEdbXCJUUC5TVUIgU1VSRkFDRSBDT05UUk9MXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDMwLDE0MCAxNDAsMFwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDRcIixkOlwibSAzMCw2MCAxNDAsMFwifV0sR1tcIlRQLlNVQiBTVVJGQUNFIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNVQiBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTV9XSxHW1wiVFAuKFVVVikgQ09OVFJPTCBTVEFUSU9OXCJdPVtHW1wiVFAuU1VCIFNVUkZBQ0UgQ09OVFJPTFwiXSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLDExNSA0NSwtMjAgMCwtMTUgLTQ1LDIwIC00NSwtMjAgMCwxNSB6XCJ9XSxHW1wiVFAuKFVVVilcIl09W0dbXCJUUC5TVUIgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSA1NSwxMDAgNDUsMjAgNDUsLTIwIDAsMTUgLTQ1LDIwIC00NSwtMjAgelwifV0sR1tcIlRQLlVVViAtIEFTVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVVWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIkFTV1wifV0sR1tcIlRQLk1JTkUgV0FSRkFSRSBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgU1VCU1VSRkFDRSBTVEFUSU9OXCJdPVtHW1wiVFAuKFVVVilcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojk1LGZvbnRzaXplOjQwLHRleHQ6XCJNV1wifV0sR1tcIlRQLlVVViAtIFNVVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVVWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIlNVV1wifV0sR1tcIlRQLlVVViAtIE1JVyBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC4oVVVWKVwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTUsZm9udHNpemU6NDAsdGV4dDpcIk1JV1wifV0sR1tcIlRQLlNVQk1BUklORSBDT05UUk9MIFNUQVRJT05cIl09W0dbXCJUUC5TVUIgU1VSRkFDRSBDT05UUk9MXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzAsZm9udHNpemU6MzUsdGV4dDpcIlNTXCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDc1LDk1IDAsLTIwIDUwLDAgMCwyMCB6IG0gMjUsLTMwIDAsNDBcIn1dLEdbXCJUUC5BU1cgU1VCTUFSSU5FIENPTlRST0wgU1RBVElPTlwiXT1bR1tcIlRQLlNVQiBTVVJGQUNFIENPTlRST0xcIl0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNjguNzUsMTA1IC0xMi41LDEyLjUgMTIuNSwxMi41IDYyLjUsMCAxMi41LC0xMi41IC0xMi41LC0xMi41IHogTSA3NSw5NSBsIDAsLTIwIDUwLDAgMCwyMCB6IG0gMjUsLTMwIDAsNDBcIn1dLEdbXCJUUC5BSVIgQ09OVFJPTCBQT0lOVCAoQUNQKVwiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo1MH0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjkwLGZvbnRzaXplOjMwLHRleHQ6XCJBQ1BcIn1dLEdbXCJUUC5DT01NVU5JQ0FUSU9OUyBDSEVDS1BPSU5UXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6OTAsZm9udHNpemU6MzAsdGV4dDpcIkNDUFwifV0sR1tcIlRQLlBVTEwtVVAgUE9JTlRcIl09W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjExNSxmb250c2l6ZTo0MCx0ZXh0OlwiUFVQXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjUsODAgMCw0MCA3MCwtNDAgMCw0MCB6XCJ9XSxHW1wiVFAuRE9XTkVEIEFJUkNSRVcgUElDS1VQIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5Oi0zNSxyOjEyfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDc1LDM1IDUwLDAgbSAtMjUsLTQ1IDAsNDUgbSAtMzAsLTc1IDMwLDMwIDMwLC0zMFwifV0sR1tcIlRQLkRVTU1ZIE1JTkVGSUVMRFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3NSwxMDAgYyAwLDUuNTIzIC00LjQ3NzIsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3MiwtMTAgMTAsLTEwIDUuNTIyOCwwIDEwLDQuNDc3MiAxMCwxMCB6IG0gNzAsMCBjIDAsNS41MjMgLTQuNDc3LDEwIC0xMCwxMCAtNS41MjMsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3LC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIC0zNSwwIGMgMCw1LjUyMyAtNC40NzcsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3MiwtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHogbSAtNzAsLTQwIDAsODAgMTIwLDAgMCwtODAgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjE1LDEwXCIsZDpcIk0gMTYwLDYwIDEwMCwtNSBNIDQwLDYwIDEwMCwtNVwifV0sR1tcIlRQLlRBUkdFVCBSRUZFUkVOQ0VcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA1MCwxMDAgMTAwLDAgbSAtNTAsLTUwIDAsMTAwXCJ9LEdbXCJUUC5PQlNFUlZBVElPTiBQT1NUL09VVFBPU1RcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsNDUgNDcuNiw4Mi41IC05NS4yLDAgelwifSxHW1wiVFAuQ09NQkFUIE9VVFBPU1RcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxNDAsMTQwIDAsLTEyLjUgbSAtMTYsMTIuNSAwLC0xMi41IG0gLTE2LDEyLjUgMCwtMTIuNSBtIC00OC4wMDAxLDEyLjUgM2UtNCwtMTIuNSBtIDE1Ljk5OTMsMTIuNSA0ZS00LC0xMi41MDEgbSAxNiwxMi41MDEgM2UtNCwtMTIuNSBtIC00Ni40MywtMTIuNDkzIDEwLjgyNTYsNi4yNSBtIC0yLjgyNTYsLTIwLjEwNyAxMC44MjU2LDYuMjUxIG0gLTIuODI1NywtMjAuMTA3MSAxMC44MjU3LDYuMjUwNiBtIDEzLjE3NDMsLTQ3LjgxOTggMTAuODI1Nyw2LjI1MDYgbSAtMTguODI1Myw3LjYwNTYgMTAuODI1Niw2LjI1MDYgbSAtMTguODI2LDcuNjA2IDEwLjgyNTcsNi4yNTA2IE0gMTE0LjQzLDQ1LjcyNSBsIC0xMC44MjYsNi4yNSBtIDE4LjgyNiw3LjYwNjQgLTEwLjgyNiw2LjI1IG0gMTguODI2LDcuNjA2NCAtMTAuODI2LDYuMjUgbSAzNC44MjYsMzUuMzE5MiAtMTAuODI2LDYuMjUgbSAyLjgyNiwtMjAuMTA2IC0xMC44MjYsNi4yNSBtIDIuODI2LC0yMC4xMDY4IC0xMC44MjYsNi4yNSBNIDk5Ljk5OTgsNDUgbCA0Ny42MzEyLDgyLjUgLTk1LjI2MjMsMCB6XCJ9LEdbXCJUUC5PQlNFUlZBVElPTiBQT1NUL1JFQ09OTkFJU1NBTkNFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNTIuMzY4NywxMjcuNSAxMjMuODE2LDg2LjI0OTkgTSA5OS45OTk4LDQ1IGwgNDcuNjMxMiw4Mi41IC05NS4yNjIzLDAgelwifSxHW1wiVFAuRk9SV0FSRCBPQlNFUlZFUiBQT1NJVElPTlwiXT1bR1tcIlRQLk9CU0VSVkFUSU9OIFBPU1QvUkVDT05OQUlTU0FOQ0VcIl0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTE1LDEwMCBjIDAsOC4yODQgLTYuNzE2LDE1IC0xNSwxNSAtOC4yODQzLDAgLTE1LC02LjcxNiAtMTUsLTE1IDAsLTguMjg0MyA2LjcxNTcsLTE1IDE1LC0xNSA4LjI4NCwwIDE1LDYuNzE1NyAxNSwxNSB6XCJ9XSxHW1wiVFAuU0VOU09SIE9VVFBPU1RcIl09Tj9be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA5OS45OTk4LDQ1IGwgNDcuNjMxMiw4Mi41IC05NS4yNjIzLDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLDgwIGMgMCw3LjUgMTIuNSwyMCAyMCwyMCAtNy41LDAgLTIwLDEyLjUgLTIwLDIwIDAsLTcuNSAtMTIuNSwtMjAgLTIwLC0yMCA3LjUsMCAyMCwtMTIuNSAyMCwtMjAgelwifV06e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2MS4xNzM4LDExMi4yNSAyMy42NjAxLDAgbSAzMC4zMzIxLDAgMjMuNjYsMCBNIDgwLDEwNSBsIDEwLDE1IDIwLDAgMTAsLTE1IHogbSAxOS45OTk4LC02MCA0Ny42MzEyLDgyLjUgLTk1LjI2MjMsMCB6XCJ9LEdbXCJUUC5DQlJOIE9CU0VSVkFUSU9OIFBPU1RcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTkuOTk5OCw0NSA0Ny42MzEyLDgyLjUgLTk1LjI2MjMsMCB6IE0gODgsMTE5IGMgMi4xODI0LC0xMy4yODggNy43MTU3LC0yNC4yMiAyMiwtMjkgbSAxLjgyOSwyOSBDIDEwOS42NjQsMTA1LjcxMiAxMDQuMTczLDk0Ljc4IDkwLDkwIE0gNTIuMzY4NywxMjcuNSAxMjMuODE2LDg2LjI0OTlcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gOTEsOTIgYyAwLDIuNzYxNCAtMi4yMzg2LDUgLTUsNSAtMi43NjE0LDAgLTUsLTIuMjM4NiAtNSwtNSAwLC0yLjc2MTQgMi4yMzg2LC01IDUsLTUgMi43NjE0LDAgNSwyLjIzODYgNSw1IHogbSAyOC4wMTEsMCBjIDAsMi43Njc4IC0yLjI0Myw1LjAxMTcgLTUuMDExLDUuMDEyIC0yLjc2OCwtM2UtNCAtNS4wMTEsLTIuMjQ0MiAtNS4wMTEsLTUuMDEyIDAsLTIuNzY3NiAyLjI0MywtNS4wMTEyIDUuMDExLC01LjAxMTUgMi43NjgsM2UtNCA1LjAxMSwyLjI0MzkgNS4wMTEsNS4wMTE1IHpcIn1dLEdbXCJUUC5QT0lOVCBPRiBERVBBUlRVUkVcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiUERcIn1dLEdbXCJUUC5GSVhFRCBBTkQgUFJFRkFCUklDQVRFRFwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2MCwxMDAgNDAsLTY1IDQwLDY1IHpcIn0sR1tcIlRQLlRFVFJBSEVEUk9OU1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDYwLDEwMCA0MCwtNjUgNDAsNjVcIn0sR1tcIlRQLlRFVFJBSEVEUk9OUyBNT1ZBQkxFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNjAsMTAwIDQwLC02NSA0MCw2NSB6XCJ9LEdbXCJUUC5CT09CWSBUUkFQXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNzcuMjQxMyw4Ny45MzExIDEwMCw1MCAxMjIuNzgxLDg3Ljk2ODcgTSAxMzAsMTAwIGMgMCwxMC4yNCAtMTMuNDMxLDE4LjU0MSAtMzAsMTguNTQxIC0xNi41Njg1LDAgLTMwLC04LjMwMSAtMzAsLTE4LjU0MSAwLC0xMC4yMzk5IDEzLjQzMTUsLTE4LjU0MSAzMCwtMTguNTQxIDE2LjU2OSwwIDMwLDguMzAxMSAzMCwxOC41NDEgelwifSxHW1wiVFAuVU5TUEVDSUZJRUQgTUlORVwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEyOSwxMDAgYyAwLDE2LjAxNiAtMTIuOTg0LDI5IC0yOSwyOSAtMTYuMDE2MywwIC0yOSwtMTIuOTg0IC0yOSwtMjkgMCwtMTYuMDE2MyAxMi45ODM3LC0yOSAyOSwtMjkgMTYuMDE2LDAgMjksMTIuOTgzNyAyOSwyOSB6XCJ9LEdbXCJUUC5BTlRJVEFOSyBNSU5FIChBVClcIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gMTI5LDEwMCBjIDAsMTYuMDE2IC0xMi45ODQsMjkgLTI5LDI5IC0xNi4wMTYzLDAgLTI5LC0xMi45ODQgLTI5LC0yOSAwLC0xNi4wMTYzIDEyLjk4MzcsLTI5IDI5LC0yOSAxNi4wMTYsMCAyOSwxMi45ODM3IDI5LDI5IHpcIn0sR1tcIlRQLihBVCkgQU5USUhBTkRMSU5HIERFVklDRVwiXT1bR1tcIlRQLkFOVElUQU5LIE1JTkUgKEFUKVwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwxMzAgMCw2NSAxNSwtMTVcIn1dLEdbXCJUUC4oQVQpIERJUkVDVElPTkFMXCJdPVtHW1wiVFAuQU5USVRBTksgTUlORSAoQVQpXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiNSw1XCIsZDpcIm0gMTAwLDcwIDAsLTYwXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsMjAgMTAsLTEwIDEwLDEwXCJ9XSxHW1wiVFAuQU5USVBFUlNPTk5FTCAoQVApIE1JTkVTXCJdPVtHW1wiVFAuQU5USVRBTksgTUlORSAoQVQpXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTAsNTAgMjkuNSwyOS41IG0gNDEsMCBMIDE1MCw1MFwifV0sR1tcIlRQLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFNcIl09W0dbXCJUUC5BTlRJVEFOSyBNSU5FIChBVClcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMzEsMTAwIDEwLDAgTSA1MCw1MCA3OS41LDc5LjUgbSA0MSwwIEwgMTUwLDUwIG0gLTQsNTAgMTAsMCBtIDUsMCAxMCwwIG0gLTEwLC0xMCAxMCwxMCAtMTAsMTBcIn1dLEdbXCJUUC5XSURFIEFSRUEgTUlORVNcIl09W0dbXCJUUC5BTlRJVEFOSyBNSU5FIChBVClcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA1MCwxMTAgMjUsNDAgMTIsLTI0IE0gMTEzLDEyNiAxMjUsMTUwIDE1MCwxMTBcIn1dLEdbXCJUUC5QTEFOTkVEIE1JTkVGSUVMRFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCIxNSwxNVwiLGQ6XCJtIDQwLDY1IDAsNzAgMTIwLDAgMCwtNzAgelwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDc1LDEwMCBjIDAsNS41MjMgLTQuNDc3MiwxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjI4LDAgMTAsNC40NzcyIDEwLDEwIHogbSA3MCwwIGMgMCw1LjUyMyAtNC40NzcsMTAgLTEwLDEwIC01LjUyMywwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6IG0gLTM1LDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgelwifV0sR1tcIlRQLk1JTkVGSUVMRFMgU1RBVElDXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNDAsNjUgMCw3MCAxMjAsMCAwLC03MCB6IG0gNzAsMzUgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIDM1LDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIzLDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NywtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHogbSAtNzAsMCBjIDAsNS41MjMgLTQuNDc3MiwxMCAtMTAsMTAgLTUuNTIyOCwwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjI4LDAgMTAsNC40NzcyIDEwLDEwIHpcIn0sR1tcIlRQLk1JTkVGSUVMRCwgU1RBVElDXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMjUsNjUgMCw3MCAxNTAsMCAwLC03MCB6XCJ9LHQubm90cHJlc2VudCYmKEdbXCJUUC5NSU5FRklFTERTIFNUQVRJQ1wiXT1HW1wiVFAuUExBTk5FRCBNSU5FRklFTERcIl0pLEdbXCJUUC5BTlRJVEFOSyAoQVQpIE1JTkVGSUVMRFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA0MCw2NSAwLDcwIDEyMCwwIDAsLTcwIHpcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gNzUsMTAwIGMgMCw1LjUyMyAtNC40NzcyLDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMjgsMCAxMCw0LjQ3NzIgMTAsMTAgeiBtIDcwLDAgYyAwLDUuNTIzIC00LjQ3NywxMCAtMTAsMTAgLTUuNTIzLDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NywtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHogbSAtMzUsMCBjIDAsNS41MjMgLTQuNDc3LDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NyAtMTAsLTEwIDAsLTUuNTIyOCA0LjQ3NzIsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6XCJ9XSxHW1wiVFAuU0NBVFRFUkFCTEUgTUlORVNcIl09W0dbXCJUUC5NSU5FRklFTERTIFNUQVRJQ1wiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NjAsZm9udHNpemU6MzUsdGV4dDpcIlNcIn1dLEdbXCJUUC5BTlRJUEVSU09OTkVMIChBUCkgTUlORUZJRUxEXCJdPVt7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NjAsZm9udHNpemU6MzUsdGV4dDpcIitTXCJ9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNDAsNjUgMCw3MCAxMjAsMCAwLC03MCB6XCJ9LHt0eXBlOlwicGF0aFwiLGQ6XCJNIDcyLjA3MDMsOTIuOTI5NyA4MCw4Mi4zNjIyIG0gLTMwLDAgNy45Mjk3LDEwLjU2NzUgbSA0OS4xNDAzLDAgNy45MywtMTAuNTY3NSBtIC0zMCwwIDcuOTI5NywxMC41Njc1IG0gNDkuMTQwMywwIDcuOTMsLTEwLjU2NzUgbSAtMzAsMCA3LjkzLDEwLjU2NzUgTSAxMTAsMTAwIGMgMCw1LjUyMyAtNC40NzcsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3MiwtMTAgMTAsLTEwIDUuNTIzLDAgMTAsNC40NzcyIDEwLDEwIHogbSAzNSwwIGMgMCw1LjUyMyAtNC40NzcsMTAgLTEwLDEwIC01LjUyMywwIC0xMCwtNC40NzcgLTEwLC0xMCAwLC01LjUyMjggNC40NzcsLTEwIDEwLC0xMCA1LjUyMywwIDEwLDQuNDc3MiAxMCwxMCB6IG0gLTcwLDAgYyAwLDUuNTIzIC00LjQ3NzIsMTAgLTEwLDEwIC01LjUyMjgsMCAtMTAsLTQuNDc3IC0xMCwtMTAgMCwtNS41MjI4IDQuNDc3MiwtMTAgMTAsLTEwIDUuNTIyOCwwIDEwLDQuNDc3MiAxMCwxMCB6XCJ9XSxHW1wiVFAuU0NBVFRFUkFCTEUgTUlORUZJRUxEIFdJVEggU0VMRi1ERVNUUlVDVFwiXT1bR1tcIlRQLkFOVElUQU5LIChBVCkgTUlORUZJRUxEXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo2MCxmb250c2l6ZTozNSx0ZXh0OlwiU1wifV0sR1tcIlRQLlZPTENBTk8gTUlORUZJRUxEXCJdPVtHW1wiVFAuQU5USVRBTksgKEFUKSBNSU5FRklFTERcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjYwLGZvbnRzaXplOjM1LHRleHQ6XCJWXCJ9XSxHW1wiVFAuVE9XRVIgTE9XXCJdPVt7dHlwZTpcImNpcmNsZVwiLHN0cm9rZTohMSxjeDoxMDAsY3k6MTAwLHI6N30se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2V3aWR0aDo4LGQ6XCJtIDc1LDEwNSAyNSwtNjUgMjUsNjVcIn1dLEdbXCJUUC5UT1dFUiBISUdIXCJdPVt7dHlwZTpcImNpcmNsZVwiLHN0cm9rZTohMSxjeDoxMDAsY3k6MTAwLHI6N30se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2V3aWR0aDo4LGQ6XCJtIDEwMCw0MCBjIDIuMzU4LDMxLjY3NTQgNy4xNjIsNTkuMjUzMSAyNSw2NC45OTkgTSAxMDAsNDAgYyAtMi4zNTgsMzEuNjc1NCAtNy4xNjI0LDU5LjI1MzEgLTI1LDY1XCJ9XSxHW1wiVFAuRU5HSU5FRVIgUkVHVUxBVElORyBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJFUlBcIn1dLEdbXCJUUC5FQVJUSFdPUksvRk9SVElGSUNBVElPTlwiXT17dHlwZTpcInBhdGhcIixkOlwibSA2NSw2NSAwLDcwIDcwLDAgMCwtNzAgLTcwLDB6XCJ9LEdbXCJUUC5GT1JUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTM1LDY1IDE1LC0xNSBtIC0xNSw4NSAxNSwxNSBNIDY1LDEzNSA1MCwxNTAgbSAxNSwtODUgMCw3MCA3MCwwIDAsLTcwIC03MCwwIC0xNSwtMTVcIn0sR1tcIlRQLlNVUkZBQ0UgU0hFTFRFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMzUsMTM1IDE1LDAgbSAtMTAwLDAgMTUsMCBtIDAsLTcwIDAsNzAgNzAsMCAwLC03MCAtNzAsMFwifSxHW1wiVFAuVU5ERVJHUk9VTkQgU0hFTFRFUlwiXT17dHlwZTpcInBhdGhcIixkOlwibSAxMzUsNjUgMTUsMCBtIC0xMDAsMCAxNSwwIG0gMCw3MCAwLC03MCA3MCwwIDAsNzAgLTcwLDBcIn0sR1tcIlRQLk5VQ0xFQVIgREVUT05BVElPTlMgR1JPVU5EIFpFUk9cIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6IWUmJlwicmdiKDI1NSwyNTUsMClcIixkOlwibSA4NSwyNSAwLDc1IDMwLDAgMCwtNzUgbSAtNTAsMCBjIDAsLTUwIDcwLC01MCA3MCwwIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc1LGZvbnRzaXplOjM1LHRleHQ6XCJOXCJ9XSxHW1wiVFAuTlVDTEVBUiBERVRPTkFUSU9OUyBHUk9VTkQgWkVSTyBQTEFOTkVEXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2VkYXNoYXJyYXk6XCI1LDVcIixmaWxsOiFlJiZcInJnYigyNTUsMjU1LDApXCIsZDpcIm0gODUsMjUgMCw3NSAzMCwwIDAsLTc1IG0gLTUwLDAgYyAwLC01MCA3MCwtNTAgNzAsMCB6XCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTo3NSxmb250c2l6ZTozNSx0ZXh0OlwiTlwifV0sR1tcIlRQLk5VQ0xFQVIgRkFMTE9VVCBQUk9EVUNJTkdcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTIwLDg1IC0xNSwxNSBtIC0yNSwwIDQwLC0zNSBNIDgwLDgwIDEyMCw0MCBNIDgwLDU1IDExNSwyNSBNIDgwLDQwIDk1LDI1IG0gLTQwLDAgYyAwLC02MCA5MCwtNjAgOTAsMCB6IG0gMjUsMCAwLDc1IDQwLDAgMCwtNzVcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Ojc1LGZvbnRzaXplOjM1LHRleHQ6XCJOXCJ9XSxHW1wiVFAuUkVMRUFTRSBFVkVOVFMgQklPTE9HSUNBTFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohZSYmXCJyZ2IoMjU1LDI1NSwwKVwiLGQ6XCJtIDg1LC0xNSAwLDYwIC0yNSw1NSA4MCwwIC0yNSwtNTUgMCwtNjAgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6ODUsZm9udHNpemU6MzUsdGV4dDpcIkJcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6NjAsZm9udHNpemU6MzUsdGV4dDpcIkJJT1wifV0sR1tcIlRQLlJFTEVBU0UgRVZFTlRTIENIRU1JQ0FMXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiFlJiZcInJnYigyNTUsMjU1LDApXCIsZDpcIm0gODUsLTE1IDAsNTkuMDYyNSBDIDc1LjczMTMsNDkuNDEzNyA3MC4wMTU0LDU5LjI5NzUgNzAsNzAgYyAwLDE2LjU2ODUgMTMuNDMxNSwzMCAzMCwzMCAxNi41NjksMCAzMCwtMTMuNDMxNSAzMCwtMzAgLTAuMDEsLTEwLjcwNjcgLTUuNzI4LC0yMC41OTU5IC0xNSwtMjUuOTQ5MiBMIDExNSwtMTUgWlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6ODAsZm9udHNpemU6MzUsdGV4dDpcIkNcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6NjAsZm9udHNpemU6MzUsdGV4dDpcIkNNTFwifV0sR1tcIlRQLkRFQ09OIFNJVEUvUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiRENOXCJ9XSxHW1wiVFAuQUxURVJOQVRFIERFQ09OIFNJVEUvUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozNSx0ZXh0OlwiRENOXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTowLGZvbnRzaXplOjM1LHRleHQ6XCJBTFRcIn1dLEdbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChUUk9PUFMpXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MCxmb250c2l6ZTozNSx0ZXh0OlwiVFwifV0sR1tcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKEVRVUlQTUVOVClcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozNSx0ZXh0OlwiRENOXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTowLGZvbnRzaXplOjM1LHRleHQ6XCJFXCJ9XSxHW1wiVFAuREVDT04gU0lURS9QT0lOVCAoRVFVSVBNRU5UIEFORCBUUk9PUFMpXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MCxmb250c2l6ZTozNSx0ZXh0OlwiRS9UXCJ9XSxHW1wiVFAuREVDT04gU0lURS9QT0lOVCAoT1BFUkFUSU9OQUwgREVDT05UQU1JTkFUSU9OKVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTMwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjAsZm9udHNpemU6MzUsdGV4dDpcIk9cIn1dLEdbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChUSE9ST1VHSCBERUNPTlRBTUlOQVRJT04pXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzUsdGV4dDpcIkRDTlwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MCxmb250c2l6ZTozNSx0ZXh0OlwiVEhcIn1dLEdbXCJUUC5NQUlOIEVRVUlQTUVOVCBERUNPTlRBTUlOQVRJT04gUE9JTlQvU0lURVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTMwLGZvbnRzaXplOjMwLHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0xMCxmb250c2l6ZToyNSx0ZXh0OlwiKE0pXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMyxmb250c2l6ZToyNSx0ZXh0OlwiRVwifV0sR1tcIlRQLkZPUldBUkQgVFJPT1AgREVDT05UQU1JTkFUSU9OIFBPSU5UL1NJVEVcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0zMCxmb250c2l6ZTozMCx0ZXh0OlwiRENOXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMTAsZm9udHNpemU6MjUsdGV4dDpcIihGKVwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTMsZm9udHNpemU6MjUsdGV4dDpcIlRcIn1dLEdbXCJUUC5XT1VOREVEIFBFUlNPTk5FTCBERUNPTlRBTUlOQVRJT04gU0lURVwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTMwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjAsZm9udHNpemU6MzUsdGV4dDpcIldcIn1dLEdbXCJUUC5BTUJVTEFOQ0UgQ09OVFJPTCBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJBQ1BcIn1dLEdbXCJUUC5BTUJVTEFOQ0UgTE9BRCBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJBTFBcIn1dLEdbXCJUUC5BTUJVTEFOQ0UgUkVMQVkgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQVJQXCJ9XSxHW1wiVFAuREVDT04gUE9JTlQgKE1BSU4pIEVRVUlQTUVOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LHRleHQ6XCIoTSlFXCJ9XSxHW1wiVFAuREVDT04gUE9JTlQgKEZPUldBUkQpIFRST09QU1wiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJEQ05cIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LHRleHQ6XCIoRilUXCJ9XSxHW1wiVFAuUE9JTlQvU0lOR0xFIFRBUkdFVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDUwLDEwMCAxMDAsMCBtIC01MCwtNTAgMCwxMDBcIn0sR1tcIlRQLktOT1dOIFBPSU5UXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDUwLDEwMCAxMDAsMCBtIC01MCwtNTAgMCwxMDBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTEwLHk6ODAsZm9udHNpemU6MzAsdGV4dDpcIktOUFwifV0sR1tcIlRQLk5VQ0xFQVIgVEFSR0VUXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsMTAwIC00MCwwIG0gNTAsMTAgMCw0MCBtIDEwLC01MCA0MCwwIG0gLTUwLC0xMCAwLC00MCBtIDIuNSw1MCBjIDAsMS4zODEgLTEuMTE5LDIuNSAtMi41LDIuNSAtMS4zODA3LDAgLTIuNSwtMS4xMTkgLTIuNSwtMi41IDAsLTEuMzgwNyAxLjExOTMsLTIuNSAyLjUsLTIuNSAxLjM4MSwwIDIuNSwxLjExOTMgMi41LDIuNSB6XCJ9LEdbXCJUUC5UQVJHRVRSRUNPUkRFRCAoQUVHSVMgT05MWSlcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMCw1MCAwLDEwMCAyMDAsMCAwLC0xMDAgelwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTAwLDkwIC0xMCwxMCAxMCwxMCAxMCwtMTAgelwifV0sR1tcIlRQLkZJUkUgU1VQUE9SVCBTVEFUSU9OXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDUwLDUwIDE1MCwxNTAgTSA1MCwxNTAgMTUwLDUwXCJ9LE4/e3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJsZWZ0XCIseDoxMjAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIkZTU1wifTpbXV0sR1tcIlRQLlNVUlZFWSBDT05UUk9MIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIlNDUFwifV0sR1tcIlRQLkZJUklORyBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJGUFwifV0sR1tcIlRQLlJFTE9BRCBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJSTFBcIn1dLEdbXCJUUC5ISURFIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkhQXCJ9XSxHW1wiVFAuTEFVTkNIIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkxQXCJ9XSxHW1wiVFAuQU1CVUxBTkNFIEVYQ0hBTkdFIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkFYUFwifV0sR1tcIlRQLkNBTk5JQkFMSVpBVElPTiBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJDQU5cIn1dLEdbXCJUUC5DQVNVQUxUWSBDT0xMRUNUSU9OIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkNDUFwifV0sR1tcIlRQLkNJVklMSUFOIENPTExFQ1RJT04gUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQ0lWXCJ9XSxHW1wiVFAuREVUQUlORUUgQ09MTEVDVElPTiBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJERVRcIn1dLEdbXCJUUC5FUFcgQ09MTEVDVElPTiBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJFUFdcIn1dLEdbXCJUUC5MT0dJU1RJQ1MgUkVMRUFTRSBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJMUlBcIn1dLEdbXCJUUC5NQUlOVEVOQU5DRSBDT0xMRUNUSU9OIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIk1DUFwifV0sR1tcIlRQLk1FRElDQUwgRVZBQ1VBVElPTiAoTUVERVZBQykgUElDS1VQIFBPSU5UXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMzAsZm9udHNpemU6MzAsdGV4dDpcIk1FUFwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gOTUsLTI1IDAsMTAgLTEwLDAgMCwxMCAxMCwwIDAsMTAgMTAsMCAwLC0xMCAxMCwwIDAsLTEwIC0xMCwwIDAsLTEwIHpcIn1dLEdbXCJUUC5SRUFSTSwgUkVGVUVMIEFORCBSRVNVUFBMWSBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJSM1BcIn1dLEdbXCJUUC5SRUZVRUwgT04gVEhFIE1PVkUgUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiUk9NXCJ9XSxHW1wiVFAuVFJBRkZJQyBDT05UUk9MIFBPU1RcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiVENQXCJ9XSxHW1wiVFAuVFJBSUxFUiBUUkFOU0ZFUiBQT0lOVFwiXT1bR1tcIlRQLkFDVElPTiBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1LHRleHQ6XCJUVFBcIn1dLEdbXCJUUC5VTklUIE1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZToyNSx0ZXh0OlwiVU1DUFwifV0sR1tcIlRQLlNVUFBMWSBQT0lOVFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDYwLDMwIDgwLDAgbSAtODAsMTUgODAsMCBtIC00MCw1NSAtNDAsLTU1IDAsLTEwNSA4MCwwIDAsMTA1IHpcIn0sR1tcIlRQLk5BVE8gQ0xBU1MgSVwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjQ1LHRleHQ6XCJJXCJ9XSxHW1wiVFAuTkFUTyBDTEFTUyBJSVwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjQ1LHRleHQ6XCJJSVwifV0sR1tcIlRQLk5BVE8gQ0xBU1MgSUlJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6NDUsdGV4dDpcIklJSVwifV0sR1tcIlRQLk5BVE8gQ0xBU1MgSVZcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTo0NSx0ZXh0OlwiSVZcIn1dLEdbXCJUUC5OQVRPIENMQVNTIFZcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4MCwtMTAgNDAsMCBtIC0zMiwwIDAsLTI2LjcgYyAwLC0xNy44IDI0LC0xNy44IDI0LDAgTCAxMTIsLTEwXCJ9XSxHW1wiVFAuU1AgQ0xBU1MgSVwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDExNSwtNTAgYyAtNDUsNSAtNDUsNjUgMCw3MCAtMjAsLTI1IC0yMCwtNTAgMCwtNzAgelwifV0sR1tcIlRQLlNQIENMQVNTIElJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLHN0cm9rZTohMSxkOlwibSAxMDEuMTQzLDMuOTE2MDIgcSAzLjY2MiwtMC4yNjM2OCA0Ljc0NiwtMS4wODM5OSAxLjA4NCwtMC44NDk2MSAxLjA4NCwtNC4zMzU5NCBsIDAsLTI2LjY4OTQ5IHEgMCwtMy4zMTA1IC0xLjA4NCwtNC4yNDggLTEuMDg0LC0wLjk2NjggLTQuNzQ2LC0xLjE0MjYgbCAwLC0xLjExMzMgMTcuNzUzLDAgMCwxLjExMzMgcSAtMy42NjIsMC4xNzU4IC00Ljc0NiwxLjE0MjYgLTEuMDg0LDAuOTM3NSAtMS4wODQsNC4yNDggbCAwLDI2LjY4OTQ5IHEgMCwzLjQ4NjMzIDEuMDg0LDQuMzM1OTQgMS4wODQsMC44MjAzMSA0Ljc0NiwxLjA4Mzk5IGwgMCwxLjA4Mzk4IC0xNy43NTMsMCAwLC0xLjA4Mzk4IHogbSA4Ljg3NywtMzguNjEzMzIgMCwwIHogTSA4MS4xMDM1LDMuOTE2MDIgcSAzLjY2MjEsLTAuMjYzNjggNC43NDYxLC0xLjA4Mzk5IDEuMDg0LC0wLjg0OTYxIDEuMDg0LC00LjMzNTk0IGwgMCwtMjYuNjg5NDkgcSAwLC0zLjMxMDUgLTEuMDg0LC00LjI0OCAtMS4wODQsLTAuOTY2OCAtNC43NDYxLC0xLjE0MjYgbCAwLC0xLjExMzMgMTcuNzUzOSwwIDAsMS4xMTMzIHEgLTMuNjYyMSwwLjE3NTggLTQuNzQ2MSwxLjE0MjYgLTEuMDg0LDAuOTM3NSAtMS4wODQsNC4yNDggbCAwLDI2LjY4OTQ5IHEgMCwzLjQ4NjMzIDEuMDg0LDQuMzM1OTQgMS4wODQsMC44MjAzMSA0Ljc0NjEsMS4wODM5OSBsIDAsMS4wODM5OCAtMTcuNzUzOSwwIDAsLTEuMDgzOTggeiBtIDguODc3LC0zOC42MTMzMiAwLDAgelwifV0sR1tcIlRQLlNQIENMQVNTIElJSVwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwyMCAwLC0zMCAtMjAsLTQwIDQwLDAgLTIwLDQwXCJ9XSxHW1wiVFAuU1AgQ0xBU1MgSVZcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMDAsLTQwIDAsMjAgbSAtMjUsMTAgMCwtMzAgNTAsMCAwLDMwXCJ9XSxHW1wiVFAuU1AgQ0xBU1MgVlwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDgwLDE1IDAsLTUwIGMgMCwtMjAgNDAsLTIwIDQwLDAgbCAwLDUwIG0gLTUwLDAgNjAsMFwifV0sR1tcIlRQLlNQIENMQVNTIFZJXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzUsLTIwIDUwLDAgbSAtMjUsMTUgMTUsMjUgbSAtMTUsLTUwIDAsMjUgLTIwLDI1IG0gMzAsLTYwIGMgMCw1LjUyMjggLTQuNDc3LDEwIC0xMCwxMCAtNS41MjI4LDAgLTEwLC00LjQ3NzIgLTEwLC0xMCAwLC01LjUyMjggNC40NzcyLC0xMCAxMCwtMTAgNS41MjMsMCAxMCw0LjQ3NzIgMTAsMTAgelwifV0sR1tcIlRQLlNQIENMQVNTIFZJSVwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDg1LC0yNSBjIDEwLC0xMCAyMCwtMTAgMzAsMFwifSx7dHlwZTpcInBhdGhcIixkOlwibSAxMjkuNiwtMjAgYyAwLDUuMzAxOSAtNC4yOTgsOS41OTk5IC05LjYsOS41OTk4IC01LjMwMiwxMGUtNSAtOS42LC00LjI5NzkgLTkuNiwtOS41OTk4IDAsLTUuMzAxOSA0LjI5OCwtOS41OTk5IDkuNiwtOS41OTk4IDUuMzAyLC0xZS00IDkuNiw0LjI5NzkgOS42LDkuNTk5OCB6IG0gLTQwLjQ4ODYsMCBjIDAsNS4wMzIxIC00LjA3OTMsOS4xMTE0IC05LjExMTQsOS4xMTE0IC01LjAzMjEsMCAtOS4xMTE0LC00LjA3OTMgLTkuMTExNCwtOS4xMTE0IDAsLTUuMDMyMSA0LjA3OTMsLTkuMTExNCA5LjExMTQsLTkuMTExNCA1LjAzMjEsMCA5LjExMTQsNC4wNzkzIDkuMTExNCw5LjExMTQgelwifV0sR1tcIlRQLlNQIENMQVNTIFZJSUlcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2MCwtMTUgODAsMCBtIC00MCwtNDUgMCw5MFwifV0sR1tcIlRQLlNQIENMQVNTIElYXCJdPVtHW1wiVFAuU1VQUExZIFBPSU5UXCJdLHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTIxLjIxMywtMzYuMjEzMiAtNy4wOCw3LjA4MDIgTSA4NS44NjY5LC0wLjg2Njk4MiA3OC43ODY4LDYuMjEzMiBtIDAsLTQyLjQyNjQgNy4wODAxLDcuMDgwMiBtIDI4LjI2NjEsMjguMjY2MDE4IDcuMDgsNy4wODAxODIgTSAxMDAsLTQ1IGwgMCwxMCBtIDAsNDAgMCwxMCBtIC0zMCwtMzAgMTAsMCBtIDQwLDAgMTAsMCBtIC0xMCwwIGMgMCwxMS4wNDU2OSAtOC45NTQsMjAgLTIwLDIwIC0xMS4wNDU3LDAgLTIwLC04Ljk1NDMxIC0yMCwtMjAgMCwtMTEuMDQ1NyA4Ljk1NDMsLTIwIDIwLC0yMCAxMS4wNDYsMCAyMCw4Ljk1NDMgMjAsMjAgelwifV0sR1tcIlRQLlNQIENMQVNTIFhcIl09W0dbXCJUUC5TVVBQTFkgUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0xMCxmb250c2l6ZTo0MCx0ZXh0OlwiQ0FcIn1dLEdbXCJUUC5NRURJQ0FMIFNVUFBMWSBQT0lOVFwiXT1bR1tcIlRQLlNVUFBMWSBQT0lOVFwiXSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwtMjAgMCwtNDAgbSAtNDAsMjUgODAsMFwifV0sR1tcIlRQLkFNTVVOSVRJT04gU1VQUExZIFBPSU5UIChBU1ApXCJdPVtHW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzUsdGV4dDpcIkFTUFwifV0sR1tcIlRQLkFNTVVOSVRJT04gVFJBTlNGRVIgUE9JTlQgKEFUUClcIl09W0dbXCJUUC5BQ1RJT04gUE9JTlRcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSx0ZXh0OlwiQVRQXCJ9XSxHW1wiVFAuVEFSR0VUIEhBTkRPVkVSXCJdPVt7dHlwZTpcInBhdGhcIixzdHJva2VkYXNoYXJyYXk6XCIxMCw1XCIsZmlsbDohMSxkOlwibSAxMDAsNDUgLTE1LDQwIC00MCwxNSA0MCwxNSAxNSw0MCAxNSwtNDAgNDAsLTE1IC00MCwtMTUgelwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTEwLGZvbnRzaXplOjMwLHRleHQ6XCJUSFwifV0sR1tcIlRQLktFWSBURVJSQUlOXCJdPVt7dHlwZTpcInBhdGhcIixkOlwibSAxNDUsMTAwIGEgNDUsNDUgMCAwIDEgLTQ1LDQ1IDQ1LDQ1IDAgMCAxIC00NSwtNDUgNDUsNDUgMCAwIDEgNDUsLTQ1IDQ1LDQ1IDAgMCAxIDQ1LDQ1IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjgwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCJLXCIsZmlsbDpPfV0sR1tcIlRQLkJUIEJPVVkgRFJPUFwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA2NSw0NSAwLDExMCA3MCwwIDAsLTExMCBtIC0zNSw5NSAwLC05NSBtIC0zNSwwIDcwLDBcIn0se3R5cGU6XCJwYXRoXCIsZDpcIm0gMTA0LDEwMCBjIDAsMiAtMywyIC00LjgsMiAtMS40LDAgLTQuMSwtMSAtMi43LC0yLjkgMS45LC0xLjQgNC41LC0xLjQgNi41LC0wLjQgMSwwLjMgMSwwLjcgMSwxLjMgeiBtIDAsNDAgYyAwLDIgLTMsMiAtNC44LDIgLTEuNCwwIC00LjEsLTEgLTIuNywtMyAxLjksLTEgNC41LC0xIDYuNSwwIDEsMCAxLDAgMSwxIHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjgwLHk6MTEwLGZvbnRzaXplOjM1LHRleHQ6XCJCXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMjAseToxMTAsZm9udHNpemU6MzUsdGV4dDpcIlRcIn1dLEdbXCJUUC5SRVBPUlRFRCBCT1RUT01FRCBTVUJcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSAxMjksMTIyLjQgNzAuOSw3OC44IG0gMCw0My42IDU4LjEsLTQzLjYgbSAtODAsLTE0LjUgMCw0My42IDI5LDAgMCwyOSA0My42LDAgMCwtMjkgMjksMCAwLC00My42XCJ9LEdbXCJUUC5NT1ZJTkcgSEFWRU5cIl09e3R5cGU6XCJwYXRoXCIsZDpcIk0gMTA4LjE0MiwxMDAgQSA4LjE0MTY3LDguMTQxNjcgMCAwIDEgMTAwLDEwOC4xNDIgOC4xNDE2Nyw4LjE0MTY3IDAgMCAxIDkxLjg1ODMsMTAwIDguMTQxNjcsOC4xNDE2NyAwIDAgMSAxMDAsOTEuODU4MyA4LjE0MTY3LDguMTQxNjcgMCAwIDEgMTA4LjE0MiwxMDAgWiBNIDQ1LDU1IGwgMCw5MCBtIDExMCwtOTAgMCw5MCBtIC0xMTAsLTQ1IDExMCwwXCJ9LEdbXCJUUC5TQ1JFRU4gQ0VOVFJFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwMCw1NSAwLDkwIG0gOC4xNDIsLTQ1IEEgOC4xNDE2Nyw4LjE0MTY3IDAgMCAxIDEwMCwxMDguMTQyIDguMTQxNjcsOC4xNDE2NyAwIDAgMSA5MS44NTgzLDEwMCA4LjE0MTY3LDguMTQxNjcgMCAwIDEgMTAwLDkxLjg1ODMgOC4xNDE2Nyw4LjE0MTY3IDAgMCAxIDEwOC4xNDIsMTAwIFpcIn0sR1tcIlRQLlNIT1JFIENPTlRST0wgU1RBVElPTlwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDMwLDE1NSAxNDAsMCBtIC0yNywtMjAgMiwtMTAgLTEwLDUgbSAtNzgsNSAtMiwtMTAgMTAsNSBtIDM1LC01NSAwLDY4IG0gNy41LC03NiBBIDcuNSw3LjUgMCAwIDEgMTAwLDc0LjUgNy41LDcuNSAwIDAgMSA5Mi41LDY3IDcuNSw3LjUgMCAwIDEgMTAwLDU5LjUgNy41LDcuNSAwIDAgMSAxMDcuNSw2NyBaIG0gLTUyLjUsOCA5MCwwIG0gLTkwLDUwIGMgMTUsMjUgNzUsMjUgOTAsMCBNIDQwLDQ1IDUwLDU1IDYwLDQ1IDcwLDU1IDgwLDQ1IGwgMTAsMTAgMTAsLTEwIDEwLDEwIDEwLC0xMCAxMCwxMCAxMCwtMTAgMTAsMTAgMTAsLTEwXCJ9LEdbXCJUUC5ESVRDSEVEIEFJUkNSQUZUXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDE0NSwxMjAgLTE1LC0xNSBtIC0xNSwxNSAxNSwtMTUgbSAtNzUsMTUgMTUsLTE1IG0gMTUsMTUgLTE1LC0xNSBtIDEwLDEwIDI1LC0zMCAtMTAsLTEwIDEwLC0xMCAyMCwyMCAtMTAsMzUgLTE1LC0xNSAtMTUsMTUgelwifSxHW1wiVFAuUEVSU09OIElOIFdBVEVSXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEwNSwxMTAgMTAsLTEwIDAsLTE1IDUsMCAwLDIwIC0xMCwxMCB6IG0gLTEwLDAgLTEwLC0xMCAwLC0xNSAtNSwwIDAsMjAgMTAsMTAgeiBtIDUsLTUgMCwtMTAgLTUsMCAtNSwtNSAwLC0xMCA1LC01IDEwLDAgNSw1IDAsMTAgLTUsNSAtNSwwIG0gLTE1LDI1IDE1LC0xNSBtIDQ1LDE1IC0xNSwtMTUgbSAtMTUsMTUgMTUsLTE1IG0gLTc1LDE1IDE1LC0xNSBtIDE1LDE1IC0xNSwtMTUgbSA0NSwxNSAtMTUsLTE1XCJ9LEdbXCJUUC5DTFVUVEVSLCBTVEFUSU9OQVJZIE9SIENFQVNFIFJFUE9SVElOR1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDY1LDEzNSBjIDIzLjMsLTIzIDQ3LC00Ni43IDcwLC03MCBtIC03MCwwIGMgMjMuMywyMy4zIDQ3LDQ3IDcwLDcwIG0gLTM1LC00IGMgLTE5LjcsMCAtNDcuOCwtOCAtNTAsLTMxIDMsLTI0LjkgMzMuOSwtMzIgNTUsLTMwLjcgMTksMC44IDQ2LDEwLjkgNDUsMzMuNyAtNSwyMSAtMzEsMjggLTUwLDI4IHogbSAzMSwtMzEgYyAwLDIwIC04LDQ4IC0zMSw1MCBDIDc1LjEsMTQ3IDY4LDExNiA2OS4zLDk1IDcwLjEsNzYuMiA4MC4yLDQ4LjYgMTAzLDUwLjIgYyAyMSw0LjkgMjgsMzEuMSAyOCw0OS44IHpcIn0sR1tcIlRQLlRFTlRBVElWRSBPUiBQUk9WSVNJT05BTCBUUkFDS1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDEzMC45MDIsMTAwIEEgMzAuOTAxNyw1MCAwIDAgMSAxMDAsMTUwIDMwLjkwMTcsNTAgMCAwIDEgNjkuMDk4MywxMDAgMzAuOTAxNyw1MCAwIDAgMSAxMDAsNTAgMzAuOTAxNyw1MCAwIDAgMSAxMzAuOTAyLDEwMCBaIE0gMTAwLDEzMC45MDIgQSA1MCwzMC45MDE3IDAgMCAxIDUwLDEwMCA1MCwzMC45MDE3IDAgMCAxIDEwMCw2OS4wOTgzIDUwLDMwLjkwMTcgMCAwIDEgMTUwLDEwMCA1MCwzMC45MDE3IDAgMCAxIDEwMCwxMzAuOTAyIFpcIn0sR1tcIlRQLkRJU1RSRVNTRUQgVkVTU0VMXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJtIDEyMCw2NSAtMjAsMjAgMjAsLTIwIG0gLTUsNTUgLTM1LC0zNSAwLC0yMCA0NSw0NSB6IG0gLTMwLDAgLTE1LC0xNSBtIC0xNSwxNSAxNSwtMTUgbSA0NSwxNSAxNSwtMTUgbSAxNSwxNSAtMTUsLTE1IG0gLTQ1LDE1IDE1LC0xNVwifSxHW1wiVFAuU0VBIE1JTkVMSUtFXCJdPXt0eXBlOlwicGF0aFwiLGQ6XCJNIDc1LDc1IDU1LDU1IG0gNDUsLTE1IDAsMjUgbSAyNSwxMCAyMCwtMjAgbSAtODAsNjAgMCwtMzAgMjAsLTIwIDMwLDAgMjAsMjAgMCwzMCAtMjAsMjAgLTMwLDAgelwifSxHW1wiVFAuSUNFQkVSR1wiXT17dHlwZTpcInBhdGhcIixkOlwibSA3NSwxMDAgMjUsLTMwIDI1LDMwIC01LDE1IC01LC01IC0xNSwyMCAtMTUsLTIwIC01LDUgeiBtIC0xNSwwIDgwLDBcIn0sR1tcIlRQLk9JTCBSSUcvUExBVEZPUk1cIl09W3t0eXBlOlwicGF0aFwiLGQ6XCJtIDU1LDEwMCAwLC01MCBtIDc1LDUwIDAsNDAgbSAyMCwtNDAgMCw0MCBtIC0xMTUsMCAwLC00MCAxMzAsMFwiLGZpbGw6ITF9LHt0eXBlOlwicGF0aFwiLGQ6XCJtIDU1LDEwMCAwLC0xNSAyNSwwIDAsMTUgelwifV0sR1tcIlRQLkJPVFRPTSBSRVRVUk5cIl09e3R5cGU6XCJwYXRoXCIsZDpcIm0gNTAsMTAwIDE1LC0zNSAxNSwzMCAyMCwtNTUgMjAsNTUgMTUsLTM1IDE1LDQwIHpcIn0sR1tcIlRQLklOU1RBTExBVElPTi9NQU5NQURFXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTAsMTAwIDE1LC0zNSAxNSwzMCAyMCwtNTUgMjAsNTUgMTUsLTM1IDE1LDQwIHpcIn0sR1tcIlRQLldSRUNLLCBOT04gREFOR0VST1VTXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTM1LDg1IDAsMzAgbSAtODUsLTE1IDEwMCwwIG0gLTg1LC0xNSAwLDMwIG0gMzUsLTQwIDAsNTBcIn0sR1tcIlRQLldSRUNLLCBEQU5HRVJPVVNcIl09W0dbXCJUUC5XUkVDSywgTk9OIERBTkdFUk9VU1wiXSx7dHlwZTpcInBhdGhcIixzdHJva2VkYXNoYXJyYXk6XCI1LDVcIixmaWxsOiExLGQ6XCJtIDE1Ni41NDcsMTAwIGMgMCwxNi4zODIgLTI1LjE2MiwyOS42NjIgLTU2LjIwMiwyOS42NjIgLTMxLjAzOTUsMCAtNTYuMjAxOSwtMTMuMjggLTU2LjIwMTcsLTI5LjY2MiAwLC0xNi4zODE4IDI1LjE2MjQsLTI5LjY2MTggNTYuMjAxNywtMjkuNjYxOCAzMS4wMzksLTFlLTQgNTYuMjAyLDEzLjI4IDU2LjIwMiwyOS42NjE4IHpcIn1dLEdbXCJUUC5NQVJJTkUgTElGRVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6ITEsZDpcIm0gMTMyLDc1IDAsNTAgODMsLTM3LjUgMCwyNSBMIDEzMiw3NSBtIC0zMiwyNSAyNS41LC0yNSAwLDUwIHpcIn0sR1tcIlRQLlNFQSBBTk9NQUxZXCJdPXt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTUwLDgwIDEzMCwzNSAxMDAsMTAwIDcwLDM1IDUwLDgwIG0gMCwyMCAyMCwtNDUgMzAsNjUgMzAsLTY1IDIwLDQ1XCJ9LEdbXCJUUC5GSVggQUNPVVNUSUNcIl09e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwiTSA1MCwxNTAgMTUwLDUwIE0gNTAsNTAgMTUwLDE1MCBtIC01MCwtMTAwIDAsMTAwXCJ9LEdbXCJUUC5GSVggRUxFQ1RSTy1NQUdORVRJQ1wiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDUwLDkwIDE1LDIwIDUsLTIwIDE1LDIwIDUsLTIwIDIwLDIwIDUsLTIwIDE1LDIwIDUsLTIwIDE1LDIwIE0gNTAsMTUwIDE1MCw1MCBNIDUwLDUwIDE1MCwxNTAgbSAtNTAsLTEwMCAwLDEwMFwifSxHW1wiVFAuRUxFQ1RSTyBNQUdORVRJQyAtIE1BR05FVElDIEFOT01BTFkgREVURUNUSU9OIChNQUQpXCJdPVtHW1wiVFAuRklYIEVMRUNUUk8tTUFHTkVUSUNcIl0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE4MCxmb250c2l6ZTozNSx0ZXh0OlwiTUFEXCJ9XSxHW1wiVFAuRklYIEVMRUNUUk8tT1BUSUNBTFwiXT17dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDE1MCwxMDAgYyAwLDYuOTA0IC0yMi4zODYsMTIuNSAtNTAsMTIuNSAtMjcuNjE0MiwwIC01MCwtNS41OTYgLTUwLC0xMi41IDAsLTYuOTAzNiAyMi4zODU4LC0xMi41IDUwLC0xMi41IDI3LjYxNCwwIDUwLDUuNTk2NCA1MCwxMi41IHogTSA1MCwxNTAgMTUwLDUwIE0gNTAsNTAgMTUwLDE1MCBtIC01MCwtMTAwIDAsMTAwXCJ9LEdbXCJUUC5GSVJFXCJdPXt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSxmaWxsOkUuaWNvbkNvbG9yW0NdLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTozNSx0ZXh0OlwiRklSRVwifSxHW1wiVFAuSU5ESVJFQ1QgRklSRVwiXT17dHlwZTpcInBhdGhcIixzdHJva2U6RS5pY29uQ29sb3JbQ10sZmlsbDohMSxkOlwibSAxMDAsNjAgMCw4MCBtIC00MCwtNDAgODAsMFwifSxHW1wiVFAuQU1CVVNIXCJdPXt0eXBlOlwicGF0aFwiLHN0cm9rZTpFLmljb25Db2xvcltDXSxmaWxsOiExLGQ6XCJtIDc3LjUsMTA2IDIwLDAgbSAtMjAsLTEyIDIwLDAgTSA3NSw4MiA5NSw4MiBtIC0yMCwzNiAyMCwwIG0gLTI1LDEyIDIwLDAgTSA3MCw3MCA5MCw3MCBNIDgwLDYwIGMgMjUsMTUgMjUsNjUgMCw4MCBtIDQ1LC01MCAxMCwxMCAtMTAsMTAgbSAtMjUsLTEwIDM1LDBcIn0sR1tcIlRQLlJPQUQgQkxPQ0tcIl09e3R5cGU6XCJwYXRoXCIsc3Ryb2tlOkUuaWNvbkNvbG9yW0NdLGZpbGw6ITEsZDpcIm0gNzMsMTMzIDYwLC02MCBtIC02Niw1NCA2MCwtNjAgbSAtNTQsMCA2MCw2MCBtIC02NiwtNTQgNjAsNjBcIn0sR1tcIlRQLlJPQUQgQkxPQ0sgKFVOREVSIENPTlNUUlVDVElPTilcIl09W3t0eXBlOlwicGF0aFwiLHN0cm9rZTpFLmljb25Db2xvcltDXSxmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjUsNVwiLGQ6XCJtIDczLDY3IDYwLDYwIG0gLTY2LC01NCA2MCw2MFwifSx7dHlwZTpcInBhdGhcIixzdHJva2U6RS5pY29uQ29sb3JbQ10sZmlsbDohMSxkOlwiTSA3MywxMzMgMTMzLDczIE0gNjcsMTI3IDEyNyw2N1wifV0sR1tcIlRQLlZJVEFMIEFSRUEgQ0VOVFJFXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDQ1LDEwMCAxMTAsMCBtIDAsLTQwIDAsODUgTSA0NSw2MCBsIDAsODAgbSA1NSwtODAgMCw4MFwifV0sR1tcIlRQLkVTVElNQVRFRCBQT1NJVElPTiAoRVApXCJdPVt7dHlwZTpcInBhdGhcIixmaWxsOiExLHN0cm9rZWRhc2hhcnJheTpcIjEyLDVcIixkOlwiTSAxNjAsMTYwIDQwLDE2MCA0MCw0MCAxNjAsNDAgWlwifSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDE0MCwxMDAgYyAxLDI2IC0yNyw0NyAtNTEuOCwzOCBDIDYzLjEsMTMxIDUxLjUsOTguMyA2Nyw3Ny40IGMgMTMuOCwtMjEuOSA0OSwtMjMuMiA2NCwtMi4zIDYsNyA5LDE1LjkgOSwyNC45IHpcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTozNSx0ZXh0OlwiRVBcIn1dLEdbXCJGT1JXQVJEIE9CU0VSVkVSIC8gU1BPVFRFUiBQT1NJVElPTlwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6M30se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA0MCwxMzUgNjAsLTc1IDYwLDc1IHpcIn1dLEdbXCJNQU4gTUFERSBTUEFDRSBERUJSSVMgU01BTExcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE3fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDYwLDExMCA3NSwxMDAgNjAsOTAgbSA1MCw1MCAtMTAsLTE1IC0xMCwxNSBtIDUwLC01MCAtMTUsMTAgMTUsMTAgTSA5MCw2MCAxMDAsNzUgMTEwLDYwXCJ9XSxHW1wiTUFOIE1BREUgU1BBQ0UgREVCUklTIE1FRElVTVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTd9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9XSxHW1wiTUFOIE1BREUgU1BBQ0UgREVCUklTIEJJR1wiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxMDAsY3k6MTAwLHI6MTd9LHt0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDoxMDAsY3k6MTAwLHI6NTB9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gOTAsNzUgMTAsLTE1IDEwLDE1IE0gNzUsMTEwIDYwLDEwMCA3NSw5MCBtIDM1LDM1IC0xMCwxNSAtMTAsLTE1IG0gMzUsLTM1IDE1LDEwIC0xNSwxMFwifV0sR1tcIk5BVFVSQUwgU1BBQ0UgREVCUklTIFNNQUxMXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjE3fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDYwLDExMCA3NSwxMDAgNjAsOTAgbSA1MCw1MCAtMTAsLTE1IC0xMCwxNSBtIDUwLC01MCAtMTUsMTAgMTUsMTAgTSA5MCw2MCAxMDAsNzUgMTEwLDYwXCJ9XSxHW1wiTkFUVVJBTCBTUEFDRSBERUJSSVMgTUVESVVNXCJdPVt7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjE3fSx7dHlwZTpcImNpcmNsZVwiLGZpbGw6ITEsY3g6MTAwLGN5OjEwMCxyOjUwfV0sR1tcIk5BVFVSQUwgU1BBQ0UgREVCUklTIEJJR1wiXT1be3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjoxN30se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjo1MH0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA5MCw3NSAxMCwtMTUgMTAsMTUgTSA3NSwxMTAgNjAsMTAwIDc1LDkwIG0gMzUsMzUgLTEwLDE1IC0xMCwtMTUgbSAzNSwtMzUgMTUsMTAgLTE1LDEwXCJ9XSxHW1wiVFAuTTEuVU5TUEVDSUZJRURcIl09W3t0eXBlOlwiY2lyY2xlXCIsZmlsbDohMSxjeDo1NSxjeToxMDAscjoxNX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjEwMCxjeToxMDAscjoxNX0se3R5cGU6XCJjaXJjbGVcIixmaWxsOiExLGN4OjE0NSxjeToxMDAscjoxNX1dLEdbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXT1be3R5cGU6XCJjaXJjbGVcIixjeDo1NSxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAzNSw3NSAxMC42LDEzLjMgbSAxOC44LDAgMTAuNiwtMTMuM1wifV0sR1tcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAyXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA4MCw3NSAxMC42LDEzLjMgbSAxOC44LDAgMTAuNiwtMTMuM1wifV0sR1tcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAzXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjE0NSxjeToxMDAscjoxNX0se3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSAxMjUsNzUgMTAuNiwxMy4zIG0gMTguOCwwIDEwLjYsLTEzLjNcIn1dLEdbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6NTUsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gNjQuNCw4OC4zIDc1LDc1IG0gLTQwLDAgMTAuNiwxMy4zIG0gMzIuNCwxMCAyLDEuNyAtMiwyIHogbSAtOCwxLjcgMy4zLDBcIn1dLEdbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJNIDEwOSw4OC4zIDEyMCw3NSBtIC00MCwwIDEwLjYsMTMuMyBtIDMyLjQsMTAgMiwxLjcgLTIsMiB6IG0gLTgsMS43IDMsMFwifV0sR1tcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgM1wiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxNDUsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIk0gMTU0LDg4LjMgMTY1LDc1IG0gLTQwLDAgMTEsMTMuMyBtIDMyLDEwIDIsMS43IC0yLDIgeiBtIC04LDEuNyAzLDBcIn1dLEdbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDFcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6NTUsY3k6MTAwLHI6MTV9XSxHW1wiVFAuTTEuQU5USVRBTksgTUlORSAyXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjEwMCxjeToxMDAscjoxNX1dLEdbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDNcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTQ1LGN5OjEwMCxyOjE1fV0sR1tcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDFcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6NTUsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNTUsMTE1IDAsMTMgNiwtNlwifV0sR1tcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEwMCwxMTUgMCwxMyA2LC02XCJ9XSxHW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgM1wiXT1be3R5cGU6XCJjaXJjbGVcIixjeDoxNDUsY3k6MTAwLHI6MTV9LHt0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gMTQ1LDExNSAwLDEzIDYsLTZcIn1dLEdbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAxXCJdPVt7dHlwZTpcImNpcmNsZVwiLGN4OjU1LGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDM1LDExNSA4LDEwIDUuNSwtMTEgbSAxMywwIDUuNSwxMSA4LC0xMFwifV0sR1tcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDJcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTAwLGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDgwLDExNSA4LDEwIDUuNSwtMTEgbSAxMywwIDUuNSwxMSA4LC0xMFwifV0sR1tcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDNcIl09W3t0eXBlOlwiY2lyY2xlXCIsY3g6MTQ1LGN5OjEwMCxyOjE1fSx7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDEyNSwxMTUgOCwxMCA1LjUsLTExIG0gMTMsMCA1LjUsMTEgOCwtMTBcIn1dLEdbXCJUUC5NMS5NSU5FIENMVVNURVIgMVwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCI3LjUsNVwiLGQ6XCJtIDczLDExMCAtMzYsMCBjIDAsLTEwIDMsLTIwIDE4LC0yMCAxNSwwIDE4LDEwIDE4LDIwIHpcIn1dLEdbXCJUUC5NMS5NSU5FIENMVVNURVIgMlwiXT1be3R5cGU6XCJwYXRoXCIsZmlsbDohMSxzdHJva2VkYXNoYXJyYXk6XCI3LjUsNVwiLGQ6XCJtIDExOCwxMTAgLTM2LDAgYyAwLC0xMCAzLC0yMCAxOCwtMjAgMTUsMCAxOCwxMCAxOCwyMCB6XCJ9XSxHW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl09W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsc3Ryb2tlZGFzaGFycmF5OlwiNy41LDVcIixkOlwibSAxNjMsMTEwIC0zNiwwIGMgMCwtMTAgMywtMjAgMTgsLTIwIDE1LDAgMTgsMTAgMTgsMjAgelwifV0sRylHLmhhc093blByb3BlcnR5KG8pJiYoSS5oYXNPd25Qcm9wZXJ0eShvKSYmY29uc29sZS53YXJuKFwiT3ZlcnJpZGUgb2Y6IFwiK28pLG4uY2FsbCh0aGlzLEdbb10sVCksSVtvXT1HW29dKX12YXIgaz17dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W1ZdLGxhYmVsczpmdW5jdGlvbihJKXtJW1wiRy1ULUQtLS0tLVwiXT17fSxJW1wiRy1ULUktLS0tLVwiXT17fSxJW1wiRy1ULU4tLS0tLVwiXT17fSxJW1wiRy1HLUdQVVVELVwiXT17fSxJW1wiRy1HLUdQVVVCLVwiXT17fSxJW1wiRy1HLUdQVVVMLVwiXT17fSxJW1wiRy1HLUdQVVVTLVwiXT17fSxJW1wiRy1HLUdQVVktLVwiXT17fSxJW1wiRy1HLUdQVVlQLVwiXT17fSxJW1wiRy1HLUdQVVlELVwiXT17fSxJW1wiRy1HLUdQVVlMLVwiXT17fSxJW1wiRy1HLUdQVVlDLVwiXT17fSxJW1wiRy1HLUdQVVlTLVwiXT17fSxJW1wiRy1HLUdQVVlCLVwiXT17fSxJW1wiRy1HLUdQVVlBLVwiXT17fSxJW1wiRy1HLUdQVVlWLVwiXT17fSxJW1wiRy1HLUdQVVlULVwiXT17fSxJW1wiRy1HLUdQVVlSLVwiXT17fSxJW1wiRy1HLUdQVVlLLVwiXT17fSxJW1wiRy1HLUdQVVlYLVwiXT17fSxJW1wiRy1HLUdQVVMtLVwiXT17fSxJW1wiRy1HLUdQVVNBLVwiXT17fSxJW1wiRy1HLUdQVVNELVwiXT17fSxJW1wiRy1HLUdQVVNDLVwiXT17fSxJW1wiRy1HLUdQUi0tLVwiXT17fSxJW1wiRy1HLUdQUk4tLVwiXT17fSxJW1wiRy1HLUdQUlMtLVwiXT17fSxJW1wiRy1HLUdQUkQtLVwiXT17fSxJW1wiRy1HLUdQUlAtLVwiXT17fSxJW1wiRy1HLUdQUk0tLVwiXT17fSxJW1wiRy1HLUdQUlctLVwiXT17fSxJW1wiRy1HLUdQUkMtLVwiXT17fSxJW1wiRy1HLUdQUkktLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTozMCxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1HUFdBLS1cIl09e30sSVtcIkctRy1HUFdELS1cIl09e30sSVtcIkctRy1HUFdFLS1cIl09e30sSVtcIkctRy1HUFdHLS1cIl09e30sSVtcIkctRy1HUFdNLS1cIl09e30sSVtcIkctRy1HUFdJLS1cIl09e30sSVtcIkctRy1HUFdQLS1cIl09e30sSVtcIkctRy1HUEYtLS1cIl09e30sSVtcIkctRy1HUEgtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1HUEhRLS1cIl09e30sSVtcIkctRy1HUEhBLS1cIl09e30sSVtcIkctRy1HUEhZLS1cIl09e30sSVtcIkctRy1HUEhYLS1cIl09e30sSVtcIkctRy1HUE8tLS1cIl09e30sSVtcIkctRy1HUE9aLS1cIl09e30sSVtcIkctRy1HUE9ELS1cIl09e30sSVtcIkctRy1HUE9XLS1cIl09e30sSVtcIkctRy1HUE9QLS1cIl09e30sSVtcIkctRy1HUE9SLS1cIl09e30sSVtcIkctRy1HUEEtLS1cIl09e30sSVtcIkctRy1HUEFQLS1cIl09e30sSVtcIkctRy1HUEFXLS1cIl09e30sSVtcIkctRy1HUEFLLS1cIl09e30sSVtcIkctRy1HUEFBLS1cIl09e30sSVtcIkctRy1HUEFILS1cIl09e30sSVtcIkctRy1HUEFCLS1cIl09e30sSVtcIkctRy1HUEFDLS1cIl09e30sSVtcIkctRy1HUEFELS1cIl09e30sSVtcIkctRy1HUEFFLS1cIl09e30sSVtcIkctRy1HUEFTLS1cIl09e30sSVtcIkctRy1HUEFULS1cIl09e30sSVtcIkctRy1HUEFPLS1cIl09e30sSVtcIkctRy1HUEFSLS1cIl09e30sSVtcIkctRy1HUEFMLS1cIl09e30sSVtcIkctRy1HUEFGLS1cIl09e30sSVtcIkctRy1HUEFHLS1cIl09e30sSVtcIkctRy1HUEFJLS1cIl09e30sSVtcIkctRy1HUEFKLS1cIl09e30sSVtcIkctRy1HUEFNLS1cIl09e30sSVtcIkctRy1HUEFOLS1cIl09e30sSVtcIkctRy1HUFAtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0sYWRkaXRpb25hbEluZm9ybWF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUctR1BQSy0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRy1HUFBDLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NDAsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUctR1BQTy0tXCJdPXt9LElbXCJHLUctR1BQRC0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1HUFBMLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1HLUdQUFAtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUctR1BQUi0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRy1HUFBFLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1HLUdQUFMtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUctR1BQQS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRy1HUFBXLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseToxMjUsZm9udHNpemU6NzB9fSxJW1wiRy1HLUdQQy0tLVwiXT17fSxJW1wiRy1HLUdQQ1UtLVwiXT17fSxJW1wiRy1HLUdQQ1VSLVwiXT17fSxJW1wiRy1HLUdQQ1VBLVwiXT17fSxJW1wiRy1HLUdQQ1VTLVwiXT17fSxJW1wiRy1HLUdQQ1VNLVwiXT17fSxJW1wiRy1HLUdQQ0EtLVwiXT17fSxJW1wiRy1HLUdQQ1MtLVwiXT17fSxJW1wiRy1HLUdQQ00tLVwiXT17fSxJW1wiRy1HLUdQQ1AtLVwiXT17fSxJW1wiRy1HLUdQQ1ItLVwiXT17fSxJW1wiRy1HLUdQQ0MtLVwiXT17fSxJW1wiRy1HLUdQQ0UtLVwiXT17fSxJW1wiRy1HLUdQQ04tLVwiXT17fSxJW1wiRy1HLUdQQi0tLVwiXT17fSxJW1wiRy1HLUdQQlUtLVwiXT17fSxJW1wiRy1HLUdQQlVBLVwiXT17fSxJW1wiRy1HLUdQQlVTLVwiXT17fSxJW1wiRy1HLUdQQlVNLVwiXT17fSxJW1wiRy1HLUdQQlMtLVwiXT17fSxJW1wiRy1HLUdQQlNBLVwiXT17fSxJW1wiRy1HLUFQUC0tLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzUsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUctQVBDLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1BUFUtLS1cIl09e30sSVtcIkctRy1BUEQtLS1cIl09e30sSVtcIkctRy1QTi0tLS1cIl09e30sSVtcIkctRy1EUFQtLS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMTUseTo4NSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctRy1EUE8tLS1cIl09e30sSVtcIkctRy1EUE9DLS1cIl09e30sSVtcIkctRy1EUE9SLS1cIl09e30sSVtcIkctRy1EUE9GLS1cIl09e30sSVtcIkctRy1EUE9TLS1cIl09e30sSVtcIkctRy1EUE9OLS1cIl09e30sSVtcIkctRy1PUFAtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1NLU9BT0YtLVwiXT17fSxJW1wiRy1NLU9BT00tLVwiXT17fSxJW1wiRy1NLU9BT1AtLVwiXT17fSxJW1wiRy1NLU9CLS0tLVwiXT17fSxJW1wiRy1NLU9NVS0tLVwiXT17fSxJW1wiRy1NLU9NVC0tLVwiXT17fSxJW1wiRy1NLU9NRC0tLVwiXT17fSxJW1wiRy1NLU9NRS0tLVwiXT17fSxJW1wiRy1NLU9NUC0tLVwiXT17fSxJW1wiRy1NLU9NVy0tLVwiXT17fSxJW1wiRy1NLU9GUy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6NTUsZm9udHNpemU6NDB9LGhvc3RpbGU6W3tzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6MzUseToxMTAsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn0se3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2NSx5OjExMCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifV0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTc1LGZvbnRzaXplOjQwfX0sSVtcIkctTS1PSFRMLS1cIl09e2FsdGl0dWRlRGVwdGg6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjEyMCx5OjYwLGZvbnRzaXplOjQwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1NLU9IVEgtLVwiXT17YWx0aXR1ZGVEZXB0aDp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTE1LHk6NjAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLU0tQkNQLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctTS1TRS0tLS1cIl09e30sSVtcIkctTS1TRi0tLS1cIl09e30sSVtcIkctTS1TUy0tLS1cIl09e30sSVtcIkctTS1TVS0tLS1cIl09e30sSVtcIkctTS1OWi0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MjAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MjAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwMCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNDAsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTI1LGZvbnRzaXplOjM1fSx0eXBlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTo2MCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwMCxmb250c2l6ZTozNX19LElbXCJHLU0tTkYtLS0tXCJdPXt9LElbXCJHLU0tTkVCLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjIwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjIwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTQwLGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yNSxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwMCxmb250c2l6ZTozNX19LElbXCJHLU0tTkVDLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjIwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjIwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTQwLGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yNSxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwMCxmb250c2l6ZTozNX19LElbXCJHLU0tTkRQLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctTS1OREEtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1NLU5EVC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLU0tTkRFLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctTS1OREItLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1NLU5ETy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLU0tTkRELS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRi1QVFMtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6MTQ1LGZvbnRzaXplOjQwfSxhbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6ODAseToxNDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo4MCxmb250c2l6ZTo0MH19LElbXCJHLUYtUFROLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6ODAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUYtUENGLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTI1LHk6MTE1LGZvbnRzaXplOjQwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1GLVBDUy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUYtUENCLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctRi1QQ1ItLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1GLVBDSC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUYtUENMLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QWC0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBDLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFktLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QVC0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBELS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUEUtLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QTC0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBNLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFItLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QVS0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBPLS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUEktLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QTi0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTLS0tLVwiXT17fSxJW1wiRy1TLVBTWi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0EtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFNCLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTQy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0QtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFNFLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTRi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0ctLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUFNILS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1TLVBTSS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QU0otLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLVMtUEEtLS0tXCJdPXt9LElbXCJHLVMtUEFTLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctUy1QQVQtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1PLUVELS0tLVwiXT17fSxJW1wiRy1PLUVQLS0tLVwiXT17fSxJW1wiRy1PLUVWLS0tLVwiXT17fSxJW1wiRy1PLUhNLS0tLVwiXT17fSxJW1wiRy1PLUhJLS0tLVwiXT17fSxJW1wiRy1PLUhPLS0tLVwiXT17fSxJW1wiRy1PLVNCLS0tLVwiXT17fSxJW1wiRy1PLVNCTS0tLVwiXT17fSxJW1wiRy1PLVNCTi0tLVwiXT17fSxJW1wiRy1PLVNCVy0tLVwiXT17fSxJW1wiRy1PLVNCWC0tLVwiXT17fSxJW1wiRy1PLVNNLS0tLVwiXT17fSxJW1wiRy1PLVNTLS0tLVwiXT17fSxJW1wiRy1PLUZBLS0tLVwiXT17fSxJW1wiRy1PLUZFLS0tLVwiXT17fSxJW1wiRy1PLUZPLS0tLVwiXT17fX0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUil7SVtcIkctVC1ELS0tLS1cIl09RVtcIlRQLkRFU1RST1lcIl0sdFtcIkctVC1ELS0tLS1cIl09e3gxOjAseDI6MjAwLHkxOjQwLHkyOjE2MH0sSVtcIkctVC1JLS0tLS1cIl09RVtcIlRQLklOVEVSRElDVFwiXSx0W1wiRy1ULUktLS0tLVwiXT17eDE6MCx4MjoyMDAseTE6NDAseTI6MTYwfSxJW1wiRy1ULU4tLS0tLVwiXT1FW1wiVFAuTkVVVFJBTElaRVwiXSx0W1wiRy1ULU4tLS0tLVwiXT17eDE6MCx4MjoyMDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQVVVELVwiXT1FW1wiVFAuREFUVU1cIl0sdFtcIkctRy1HUFVVRC1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BVVUItXCJdPUVbXCJUUC5CUklFRiBDT05UQUNUXCJdLHRbXCJHLUctR1BVVUItXCJdPXt4MTo1MCx4MjoxNTAseTE6MCx5MjoxMDB9LElbXCJHLUctR1BVVUwtXCJdPUVbXCJUUC5MT1NUIENPTlRBQ1RcIl0sdFtcIkctRy1HUFVVTC1cIl09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVtcIkctRy1HUFVVUy1cIl09RVtcIlRQLlNJTktFUlwiXSx0W1wiRy1HLUdQVVVTLVwiXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJW1wiRy1HLUdQVVktLVwiXT1FW1wiVFAuU09OT0JVT1lcIl0sdFtcIkctRy1HUFVZLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlQLVwiXT1FW1wiVFAuU09OT0JVT1kgUEFUVEVSTiBDRU5URVJcIl0sdFtcIkctRy1HUFVZUC1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlELVwiXT1FW1wiVFAuU09OT0JVT1kgRElGQVJcIl0sdFtcIkctRy1HUFVZRC1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlMLVwiXT1FW1wiVFAuU09OT0JVT1kgTE9GQVJcIl0sdFtcIkctRy1HUFVZTC1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlDLVwiXT1FW1wiVFAuU09OT0JVT1kgQ0FTU1wiXSx0W1wiRy1HLUdQVVlDLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWVMtXCJdPUVbXCJUUC5TT05PQlVPWSBESUNBU1NcIl0sdFtcIkctRy1HUFVZUy1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlCLVwiXT1FW1wiVFAuU09OT0JVT1kgQlRcIl0sdFtcIkctRy1HUFVZQi1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlBLVwiXT1FW1wiVFAuU09OT0JVT1kgQU5NXCJdLHRbXCJHLUctR1BVWUEtXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctRy1HUFVZVi1cIl09RVtcIlRQLlNPTk9CVU9ZIFZMQURcIl0sdFtcIkctRy1HUFVZVi1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVlULVwiXT1FW1wiVFAuU09OT0JVT1kgQVRBQ1wiXSx0W1wiRy1HLUdQVVlULVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWVItXCJdPUVbXCJUUC5TT05PQlVPWSBST1wiXSx0W1wiRy1HLUdQVVlSLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUctR1BVWUstXCJdPUVbXCJUUC5TT05PQlVPWSBLSU5HUElOXCJdLHRbXCJHLUctR1BVWUstXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctRy1HUFVZWC1cIl09RVtcIlRQLlNPTk9CVU9ZIEVYUElSRURcIl0sdFtcIkctRy1HUFVZWC1cIl09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTYwfSxJW1wiRy1HLUdQVVMtLVwiXT1FW1wiVFAuU0VBUkNIXCJdLHRbXCJHLUctR1BVUy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQVVNBLVwiXT1FW1wiVFAuU0VBUkNIIEFSRUFcIl0sdFtcIkctRy1HUFVTQS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BVU0QtXCJdPUVbXCJUUC5ESVAgUE9TSVRJT05cIl0sdFtcIkctRy1HUFVTRC1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BVU0MtXCJdPUVbXCJUUC5TRUFSQ0ggQ0VOVEVSXCJdLHRbXCJHLUctR1BVU0MtXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQUi0tLVwiXT1FW1wiVFAuUkVGRVJFTkNFIFBPSU5UXCJdLHRbXCJHLUctR1BSLS0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQUk4tLVwiXT1FW1wiVFAuTkFWSUdBVElPTkFMIFJFRkVSRU5DRVwiXSx0W1wiRy1HLUdQUk4tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUFJTLS1cIl09RVtcIlRQLlNQRUNJQUwgUE9JTlRcIl0sdFtcIkctRy1HUFJTLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BSRC0tXCJdPUVbXCJUUC5ETFJQXCJdLHRbXCJHLUctR1BSRC0tXCJdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQUlAtLVwiXT1FW1wiVFAuUE9JTlQgT0YgSU5URU5ERUQgTU9WRU1FTlRcIl0sdFtcIkctRy1HUFJQLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BSTS0tXCJdPUVbXCJUUC5NQVJTSEFMTCBQT0lOVFwiXSx0W1wiRy1HLUdQUk0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUFJXLS1cIl09RVtcIlRQLlJFRkVSRU5DRSBQT0lOVCBXQVlQT0lOVFwiXSx0W1wiRy1HLUdQUlctLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUFJDLS1cIl09RVtcIlRQLkNPUlJJRE9SIFRBQlwiXSx0W1wiRy1HLUdQUkMtLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUFJJLS1cIl09RVtcIlRQLlBPSU5UIE9GIElOVEVSRVNUXCJdLHRbXCJHLUctR1BSSS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6LTI1fSxJW1wiRy1HLUdQV0EtLVwiXT1FW1wiVFAuQUlNIFBPSU5UXCJdLHRbXCJHLUctR1BXQS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQV0QtLVwiXT1FW1wiVFAuRFJPUCBQT0lOVFwiXSx0W1wiRy1HLUdQV0QtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjEyMH0sSVtcIkctRy1HUFdFLS1cIl09RVtcIlRQLkVOVFJZIFBPSU5UXCJdLHRbXCJHLUctR1BXRS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTB9LElbXCJHLUctR1BXRy0tXCJdPUVbXCJUUC5HUk9VTkQgWkVST1wiXSx0W1wiRy1HLUdQV0ctLVwiXT17eDE6NTAseDI6MTUwLHkxOjMwfSxJW1wiRy1HLUdQV00tLVwiXT1FW1wiVFAuTVNMIERFVEVDVCBQT0lOVFwiXSx0W1wiRy1HLUdQV00tLVwiXT17eDE6NTAseDI6MTUwLHkxOjMwfSxJW1wiRy1HLUdQV0ktLVwiXT1FW1wiVFAuSU1QQUNUIFBPSU5UXCJdLHRbXCJHLUctR1BXSS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQV1AtLVwiXT1FW1wiVFAuUFJFRElDVEVEIElNUEFDVCBQT0lOVFwiXSx0W1wiRy1HLUdQV1AtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUEYtLS1cIl09RVtcIlRQLkZPUk1BVElPTlwiXSx0W1wiRy1HLUdQRi0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUEgtLS1cIl09RVtcIlRQLkhBUkJPUlwiXSx0W1wiRy1HLUdQSC0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUEhRLS1cIl09RVtcIlRQLkhBUkJPUiBQT0lOVCBRXCJdLHRbXCJHLUctR1BIUS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQSEEtLVwiXT1FW1wiVFAuSEFSQk9SIFBPSU5UIEFcIl0sdFtcIkctRy1HUEhBLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctR1BIWS0tXCJdPUVbXCJUUC5IQVJCT1IgUE9JTlQgWVwiXSx0W1wiRy1HLUdQSFktLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1HUEhYLS1cIl09RVtcIlRQLkhBUkJPUiBQT0lOVCBYXCJdLHRbXCJHLUctR1BIWC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQTy0tLVwiXT1FW1wiVFAuUk9VVEVcIl0sdFtcIkctRy1HUE8tLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BPWi0tXCJdPUVbXCJUUC5ST1VURSBSRU5ERVpWT1VTXCJdLHRbXCJHLUctR1BPWi0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1HLUdQT0QtLVwiXT1FW1wiVFAuUk9VVEUgRElWRVJTSU9OU1wiXSx0W1wiRy1HLUdQT0QtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVtcIkctRy1HUE9XLS1cIl09RVtcIlRQLlJPVVRFIFdBWVBPSU5UXCJdLHRbXCJHLUctR1BPVy0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1HLUdQT1AtLVwiXT1FW1wiVFAuUk9VVEUgUElNXCJdLHRbXCJHLUctR1BPUC0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1HLUdQT1ItLVwiXT1FW1wiVFAuUk9VVEUgUE9JTlQgUlwiXSx0W1wiRy1HLUdQT1ItLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVtcIkctRy1HUEEtLS1cIl09RVtcIlRQLkFJUiBDT05UUk9MIFBPSU5UXCJdLHRbXCJHLUctR1BBLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQQVAtLVwiXT1FW1wiVFAuQ09NQkFUIEFJUiBQQVRST0wgKENBUClcIl0sdFtcIkctRy1HUEFQLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBVy0tXCJdPUVbXCJUUC5BSVJCT1JORSBFQVJMWSBXQVJOSU5HIChBRVcpXCJdLHRbXCJHLUctR1BBVy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQQUstLVwiXT1FW1wiVFAuVEFOS0lOR1wiXSx0W1wiRy1HLUdQQUstLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFBLS1cIl09RVtcIlRQLkZJWEVEIFdJTkdcIl0sdFtcIkctRy1HUEFBLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBSC0tXCJdPUVbXCJUUC5ST1RBUlkgV0lOR1wiXSx0W1wiRy1HLUdQQUgtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFCLS1cIl09RVtcIlRQLlNVQ0FQIC0gRklYRUQgV0lOR1wiXSx0W1wiRy1HLUdQQUItLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctRy1HUEFDLS1cIl09RVtcIlRQLlNVQ0FQIC0gUk9UQVJZIFdJTkdcIl0sdFtcIkctRy1HUEFDLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBRC0tXCJdPUVbXCJUUC5NSVcgLSBGSVhFRCBXSU5HXCJdLHRbXCJHLUctR1BBRC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1HLUdQQUUtLVwiXT1FW1wiVFAuTUlXIC0gUk9UQVJZIFdJTkdcIl0sdFtcIkctRy1HUEFFLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUctR1BBUy0tXCJdPUVbXCJUUC5TVFJJS0UgSVBcIl0sdFtcIkctRy1HUEFTLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbXCJHLUctR1BBVC0tXCJdPUVbXCJUUC5UQUNBTlwiXSx0W1wiRy1HLUdQQVQtLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFPLS1cIl09RVtcIlRQLlRPTUNBVFwiXSx0W1wiRy1HLUdQQU8tLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFSLS1cIl09RVtcIlRQLlJFU0NVRVwiXSx0W1wiRy1HLUdQQVItLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFMLS1cIl09RVtcIlRQLlJFUExFTklTSFwiXSx0W1wiRy1HLUdQQUwtLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFGLS1cIl09RVtcIlRQLlVOTUFOTkVEIEFFUklBTCBTWVNURU1cIl0sdFtcIkctRy1HUEFGLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbXCJHLUctR1BBRy0tXCJdPUVbXCJUUC5WVFVBXCJdLHRbXCJHLUctR1BBRy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJW1wiRy1HLUdQQUktLVwiXT1FW1wiVFAuT1JCSVRcIl0sdFtcIkctRy1HUEFJLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbXCJHLUctR1BBSi0tXCJdPUVbXCJUUC5PUkJJVCAtIEZJR1VSRSBFSUdIVFwiXSx0W1wiRy1HLUdQQUotLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFNLS1cIl09RVtcIlRQLk9SQklUIC0gUkFDRSBUUkFDS1wiXSx0W1wiRy1HLUdQQU0tLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVtcIkctRy1HUEFOLS1cIl09RVtcIlRQLk9SQklUIC0gUkFORE9NLCBDTE9TRURcIl0sdFtcIkctRy1HUEFOLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbXCJHLUctR1BQLS0tXCJdPUVbXCJUUC5BQ1RJT04gUE9JTlRcIl0sdFtcIkctRy1HUFAtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctR1BQSy0tXCJdPUVbXCJUUC5BQ1RJT04gQ0hFQ0sgUE9JTlRcIl0sdFtcIkctRy1HUFBLLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctR1BQQy0tXCJdPUVbXCJUUC5DT05UQUNUIFBPSU5UXCJdLHRbXCJHLUctR1BQQy0tXCJdPXt4MTo1NSx4MjoxNDUseTE6LTEwfSxJW1wiRy1HLUdQUE8tLVwiXT1FW1wiVFAuQ09PUkRJTkFUSU9OIFBPSU5UXCJdLHRbXCJHLUctR1BQTy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUdQUEQtLVwiXT1FW1wiVFAuREVDSVNJT04gUE9JTlRcIl0sdFtcIkctRy1HUFBELS1cIl09e3gxOjMwLHgyOjE3MCx5MToyNSx5MjoxNjB9LElbXCJHLUctR1BQTC0tXCJdPUVbXCJUUC5BQ1RJT04gTElOS1VQIFBPSU5UXCJdLHRbXCJHLUctR1BQTC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1HLUdQUFAtLVwiXT1FW1wiVFAuQUNUSU9OIFBBU1NBR0UgUE9JTlRcIl0sdFtcIkctRy1HUFBQLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctR1BQUi0tXCJdPUVbXCJUUC5BQ1RJT04gUkFMTFkgUE9JTlRcIl0sdFtcIkctRy1HUFBSLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctR1BQRS0tXCJdPUVbXCJUUC5BQ1RJT04gUkVMRUFTRSBQT0lOVFwiXSx0W1wiRy1HLUdQUEUtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1HUFBTLS1cIl09RVtcIlRQLkFDVElPTiBTVEFSVCBQT0lOVFwiXSx0W1wiRy1HLUdQUFMtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRy1HUFBBLS1cIl09RVtcIlRQLkFDVElPTiBBTU5FU1RZIFBPSU5UXCJdLHRbXCJHLUctR1BQQS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1HLUdQUFctLVwiXT1FW1wiVFAuV0FZUE9JTlRcIl0sdFtcIkctRy1HUFBXLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDLS0tXCJdPUVbXCJUUC5TRUEgU1VSRkFDRSBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUEMtLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDVS0tXCJdPUVbXCJUUC4oVVNWKSBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUENVLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDVVItXCJdPUVbXCJUUC4oUk1WKSBVU1YgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDVVItXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ1VBLVwiXT1FW1wiVFAuVVNWIC0gQVNXIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ1VBLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENVUy1cIl09RVtcIlRQLlVTViAtIFNVVyBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUENVUy1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDVU0tXCJdPUVbXCJUUC5VU1YgLSBNSVcgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDVU0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ0EtLVwiXT1FW1wiVFAuQVNXIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ0EtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENTLS1cIl09RVtcIlRQLlNVVyBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUENTLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BDTS0tXCJdPUVbXCJUUC5NSVcgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BDTS0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ1AtLVwiXT1FW1wiVFAuUElDS0VUIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ1AtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENSLS1cIl09RVtcIlRQLlJFTkRFWlZPVVMgQ09OVFJPTCBQT0lOVFwiXSx0W1wiRy1HLUdQQ1ItLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUENDLS1cIl09RVtcIlRQLlJFU0NVRSBDT05UUk9MIFBPSU5UXCJdLHRbXCJHLUctR1BDQy0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ0UtLVwiXT1FW1wiVFAuUkVQTEVOSVNITUVOVCBDT05UUk9MIFBPSU5UXCJdLHRbXCJHLUctR1BDRS0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQ04tLVwiXT1FW1wiVFAuTk9OQ09NQkFUQU5UIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQ04tLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEItLS1cIl09RVtcIlRQLlNVQiBTVVJGQUNFIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQi0tLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEJVLS1cIl09RVtcIlRQLihVVVYpIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQlUtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEJVQS1cIl09RVtcIlRQLlVVViAtIEFTVyBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUEJVQS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BCVVMtXCJdPUVbXCJUUC5VVVYgLSBTVVcgQ09OVFJPTCBTVEFUSU9OXCJdLHRbXCJHLUctR1BCVVMtXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJW1wiRy1HLUdQQlVNLVwiXT1FW1wiVFAuVVVWIC0gTUlXIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQlVNLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1HUEJTLS1cIl09RVtcIlRQLlNVQk1BUklORSBDT05UUk9MIFNUQVRJT05cIl0sdFtcIkctRy1HUEJTLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUctR1BCU0EtXCJdPUVbXCJUUC5BU1cgU1VCTUFSSU5FIENPTlRST0wgU1RBVElPTlwiXSx0W1wiRy1HLUdQQlNBLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctRy1BUFAtLS1cIl09RVtcIlRQLkFJUiBDT05UUk9MIFBPSU5UIChBQ1ApXCJdLHRbXCJHLUctQVBQLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1HLUFQQy0tLVwiXT1FW1wiVFAuQ09NTVVOSUNBVElPTlMgQ0hFQ0tQT0lOVFwiXSx0W1wiRy1HLUFQQy0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctRy1BUFUtLS1cIl09RVtcIlRQLlBVTEwtVVAgUE9JTlRcIl0sdFtcIkctRy1BUFUtLS1cIl09e3gxOjUwLHgyOjI0MCx5MTo1MCx5MjoxNTB9LElbXCJHLUctQVBELS0tXCJdPUVbXCJUUC5ET1dORUQgQUlSQ1JFVyBQSUNLVVAgUE9JTlRcIl0sdFtcIkctRy1BUEQtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUctUE4tLS0tXCJdPUVbXCJUUC5EVU1NWSBNSU5FRklFTERcIl0sdFtcIkctRy1QTi0tLS1cIl09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTQwfSxJW1wiRy1HLURQVC0tLVwiXT1FW1wiVFAuVEFSR0VUIFJFRkVSRU5DRVwiXSxJW1wiRy1HLURQTy0tLVwiXT1FW1wiVFAuT0JTRVJWQVRJT04gUE9TVC9PVVRQT1NUXCJdLHRbXCJHLUctRFBPLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1HLURQT0MtLVwiXT1FW1wiVFAuQ09NQkFUIE9VVFBPU1RcIl0sdFtcIkctRy1EUE9DLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUctRFBPUi0tXCJdPUVbXCJUUC5PQlNFUlZBVElPTiBQT1NUL1JFQ09OTkFJU1NBTkNFXCJdLHRbXCJHLUctRFBPUi0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1HLURQT0YtLVwiXT1FW1wiVFAuRk9SV0FSRCBPQlNFUlZFUiBQT1NJVElPTlwiXSx0W1wiRy1HLURQT0YtLVwiXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVtcIkctRy1EUE9TLS1cIl09RVtcIlRQLlNFTlNPUiBPVVRQT1NUXCJdLHRbXCJHLUctRFBPUy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1HLURQT04tLVwiXT1FW1wiVFAuQ0JSTiBPQlNFUlZBVElPTiBQT1NUXCJdLHRbXCJHLUctRFBPTi0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1HLU9QUC0tLVwiXT1FW1wiVFAuUE9JTlQgT0YgREVQQVJUVVJFXCJdLHRbXCJHLUctT1BQLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1NLU9BT0YtLVwiXT1FW1wiVFAuRklYRUQgQU5EIFBSRUZBQlJJQ0FURURcIl0sdFtcIkctTS1PQU9GLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMH0sSVtcIkctTS1PQU9NLS1cIl09RVtcIlRQLlRFVFJBSEVEUk9OU1wiXSx0W1wiRy1NLU9BT00tLVwiXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJW1wiRy1NLU9BT1AtLVwiXT1FW1wiVFAuVEVUUkFIRURST05TIE1PVkFCTEVcIl0sdFtcIkctTS1PQU9QLS1cIl09e3gxOjYwLHgyOjE0MCx5MTozMH0sSVtcIkctTS1PQi0tLS1cIl09RVtcIlRQLkJPT0JZIFRSQVBcIl0sSVtcIkctTS1PTVUtLS1cIl09RVtcIlRQLlVOU1BFQ0lGSUVEIE1JTkVcIl0sSVtcIkctTS1PTVQtLS1cIl09RVtcIlRQLkFOVElUQU5LIE1JTkUgKEFUKVwiXSxJW1wiRy1NLU9NRC0tLVwiXT1FW1wiVFAuKEFUKSBBTlRJSEFORExJTkcgREVWSUNFXCJdLHRbXCJHLU0tT01ELS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTk1fSxJW1wiRy1NLU9NRS0tLVwiXT1FW1wiVFAuKEFUKSBESVJFQ1RJT05BTFwiXSx0W1wiRy1NLU9NRS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOjEwLHkyOjE0MH0sSVtcIkctTS1PTVAtLS1cIl09RVtcIlRQLkFOVElQRVJTT05ORUwgKEFQKSBNSU5FU1wiXSxJW1wiRy1NLU9NVy0tLVwiXT1FW1wiVFAuV0lERSBBUkVBIE1JTkVTXCJdLElbXCJHLU0tT0ZTLS0tXCJdPUVbXCJUUC5NSU5FRklFTERTIFNUQVRJQ1wiXSx0W1wiRy1NLU9GUy0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjYwLHkyOjE0MH0sSVtcIkctTS1PSFRMLS1cIl09RVtcIlRQLlRPV0VSIExPV1wiXSx0W1wiRy1NLU9IVEwtLVwiXT17eDE6NTAseDI6MTUwLHkxOjMwLHkyOjEyMH0sSVtcIkctTS1PSFRILS1cIl09RVtcIlRQLlRPV0VSIEhJR0hcIl0sdFtcIkctTS1PSFRILS1cIl09e3gxOjUwLHgyOjE1MCx5MTozMCx5MjoxMjB9LElbXCJHLU0tQkNQLS0tXCJdPUVbXCJUUC5FTkdJTkVFUiBSRUdVTEFUSU5HIFBPSU5UXCJdLHRbXCJHLU0tQkNQLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1NLVNFLS0tLVwiXT1FW1wiVFAuRUFSVEhXT1JLL0ZPUlRJRklDQVRJT05cIl0sSVtcIkctTS1TRi0tLS1cIl09RVtcIlRQLkZPUlRcIl0sSVtcIkctTS1TUy0tLS1cIl09RVtcIlRQLlNVUkZBQ0UgU0hFTFRFUlwiXSxJW1wiRy1NLVNVLS0tLVwiXT1FW1wiVFAuVU5ERVJHUk9VTkQgU0hFTFRFUlwiXSxJW1wiRy1NLU5aLS0tLVwiXT1FW1wiVFAuTlVDTEVBUiBERVRPTkFUSU9OUyBHUk9VTkQgWkVST1wiXSx0W1wiRy1NLU5aLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi0yMH0sSVtcIkctTS1ORi0tLS1cIl09RVtcIlRQLk5VQ0xFQVIgRkFMTE9VVCBQUk9EVUNJTkdcIl0sdFtcIkctTS1ORi0tLS1cIl09e3gxOjUwLHgyOjE1MCx5MTotMjB9LElbXCJHLU0tTkVCLS0tXCJdPUVbXCJUUC5SRUxFQVNFIEVWRU5UUyBCSU9MT0dJQ0FMXCJdLHRbXCJHLU0tTkVCLS0tXCJdPXt4MTotMTAseDI6MTQwLHkxOi0yMH0sSVtcIkctTS1ORUMtLS1cIl09RVtcIlRQLlJFTEVBU0UgRVZFTlRTIENIRU1JQ0FMXCJdLHRbXCJHLU0tTkVDLS0tXCJdPXt4MTotMjAseDI6MTQwLHkxOi0yMH0sSVtcIkctTS1ORFAtLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlRcIl0sdFtcIkctTS1ORFAtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU0tTkRBLS0tXCJdPUVbXCJUUC5BTFRFUk5BVEUgREVDT04gU0lURS9QT0lOVFwiXSx0W1wiRy1NLU5EQS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctTS1ORFQtLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKFRST09QUylcIl0sdFtcIkctTS1ORFQtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU0tTkRFLS0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChFUVVJUE1FTlQpXCJdLHRbXCJHLU0tTkRFLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1NLU5EQi0tLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoRVFVSVBNRU5UIEFORCBUUk9PUFMpXCJdLHRbXCJHLU0tTkRCLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1NLU5ETy0tLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoT1BFUkFUSU9OQUwgREVDT05UQU1JTkFUSU9OKVwiXSx0W1wiRy1NLU5ETy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctTS1OREQtLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKFRIT1JPVUdIIERFQ09OVEFNSU5BVElPTilcIl0sdFtcIkctTS1OREQtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUYtUFRTLS0tXCJdPUVbXCJUUC5QT0lOVC9TSU5HTEUgVEFSR0VUXCJdLElbXCJHLUYtUFROLS0tXCJdPUVbXCJUUC5OVUNMRUFSIFRBUkdFVFwiXSxJW1wiRy1GLVBDRi0tLVwiXT1FW1wiVFAuRklSRSBTVVBQT1JUIFNUQVRJT05cIl0sSVtcIkctRi1QQ1MtLS1cIl09RVtcIlRQLlNVUlZFWSBDT05UUk9MIFBPSU5UXCJdLHRbXCJHLUYtUENTLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1GLVBDQi0tLVwiXT1FW1wiVFAuRklSSU5HIFBPSU5UXCJdLHRbXCJHLUYtUENCLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1GLVBDUi0tLVwiXT1FW1wiVFAuUkVMT0FEIFBPSU5UXCJdLHRbXCJHLUYtUENSLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1GLVBDSC0tLVwiXT1FW1wiVFAuSElERSBQT0lOVFwiXSx0W1wiRy1GLVBDSC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctRi1QQ0wtLS1cIl09RVtcIlRQLkxBVU5DSCBQT0lOVFwiXSx0W1wiRy1GLVBDTC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QWC0tLS1cIl09RVtcIlRQLkFNQlVMQU5DRSBFWENIQU5HRSBQT0lOVFwiXSx0W1wiRy1TLVBYLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QQy0tLS1cIl09RVtcIlRQLkNBTk5JQkFMSVpBVElPTiBQT0lOVFwiXSx0W1wiRy1TLVBDLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QWS0tLS1cIl09RVtcIlRQLkNBU1VBTFRZIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctUy1QWS0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFQtLS0tXCJdPUVbXCJUUC5DSVZJTElBTiBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLVMtUFQtLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBELS0tLVwiXT1FW1wiVFAuREVUQUlORUUgQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1TLVBELS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QRS0tLS1cIl09RVtcIlRQLkVQVyBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLVMtUEUtLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBMLS0tLVwiXT1FW1wiVFAuTE9HSVNUSUNTIFJFTEVBU0UgUE9JTlRcIl0sdFtcIkctUy1QTC0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUE0tLS0tXCJdPUVbXCJUUC5NQUlOVEVOQU5DRSBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLVMtUE0tLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBSLS0tLVwiXT1FW1wiVFAuUkVBUk0sIFJFRlVFTCBBTkQgUkVTVVBQTFkgUE9JTlRcIl0sdFtcIkctUy1QUi0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFUtLS0tXCJdPUVbXCJUUC5SRUZVRUwgT04gVEhFIE1PVkUgUE9JTlRcIl0sdFtcIkctUy1QVS0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUE8tLS0tXCJdPUVbXCJUUC5UUkFGRklDIENPTlRST0wgUE9TVFwiXSx0W1wiRy1TLVBPLS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QSS0tLS1cIl09RVtcIlRQLlRSQUlMRVIgVFJBTlNGRVIgUE9JTlRcIl0sdFtcIkctUy1QSS0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUE4tLS0tXCJdPUVbXCJUUC5VTklUIE1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctUy1QTi0tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNaLS0tXCJdPUVbXCJUUC5TVVBQTFkgUE9JTlRcIl0sdFtcIkctUy1QU1otLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNBLS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJXCJdLHRbXCJHLVMtUFNBLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1TLVBTQi0tLVwiXT1FW1wiVFAuU1AgQ0xBU1MgSUlcIl0sdFtcIkctUy1QU0ItLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNDLS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJSUlcIl0sdFtcIkctUy1QU0MtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNELS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJVlwiXSx0W1wiRy1TLVBTRC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0UtLS1cIl09RVtcIlRQLlNQIENMQVNTIFZcIl0sdFtcIkctUy1QU0UtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNGLS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBWSVwiXSx0W1wiRy1TLVBTRi0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0ctLS1cIl09RVtcIlRQLlNQIENMQVNTIFZJSVwiXSx0W1wiRy1TLVBTRy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0gtLS1cIl09RVtcIlRQLlNQIENMQVNTIFZJSUlcIl0sdFtcIkctUy1QU0gtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUFNJLS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBJWFwiXSx0W1wiRy1TLVBTSS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QU0otLS1cIl09RVtcIlRQLlNQIENMQVNTIFhcIl0sdFtcIkctUy1QU0otLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLVMtUEFTLS0tXCJdPUVbXCJUUC5BTU1VTklUSU9OIFNVUFBMWSBQT0lOVCAoQVNQKVwiXSx0W1wiRy1TLVBBUy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctUy1QQVQtLS1cIl09RVtcIlRQLkFNTVVOSVRJT04gVFJBTlNGRVIgUE9JTlQgKEFUUClcIl0sdFtcIkctUy1QQVQtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLU8tRUQtLS0tXCJdPUVbXCJUUC5ESVRDSEVEIEFJUkNSQUZUXCJdLElbXCJHLU8tRVAtLS0tXCJdPUVbXCJUUC5QRVJTT04gSU4gV0FURVJcIl0sSVtcIkctTy1FVi0tLS1cIl09RVtcIlRQLkRJU1RSRVNTRUQgVkVTU0VMXCJdLElbXCJHLU8tSE0tLS0tXCJdPUVbXCJUUC5TRUEgTUlORUxJS0VcIl0sdFtcIkctTy1ITS0tLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNTB9LElbXCJHLU8tSEktLS0tXCJdPUVbXCJUUC5JQ0VCRVJHXCJdLHRbXCJHLU8tSEktLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1PLUhPLS0tLVwiXT1FW1wiVFAuT0lMIFJJRy9QTEFURk9STVwiXSx0W1wiRy1PLUhPLS0tLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVtcIkctTy1TQi0tLS1cIl09RVtcIlRQLkJPVFRPTSBSRVRVUk5cIl0sdFtcIkctTy1TQi0tLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxMDB9LElbXCJHLU8tU0JNLS0tXCJdPUVbXCJUUC5JTlNUQUxMQVRJT04vTUFOTUFERVwiXSx0W1wiRy1PLVNCTS0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjEwMH0sSVtcIkctTy1TQk4tLS1cIl09RVtcIlRQLkJPVFRPTSBSRVRVUk5cIl0sdFtcIkctTy1TQk4tLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxMDB9LElbXCJHLU8tU0JXLS0tXCJdPUVbXCJUUC5XUkVDSywgTk9OIERBTkdFUk9VU1wiXSx0W1wiRy1PLVNCVy0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjcwLHkyOjEzMH0sSVtcIkctTy1TQlgtLS1cIl09RVtcIlRQLldSRUNLLCBEQU5HRVJPVVNcIl0sdFtcIkctTy1TQlgtLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo3MCx5MjoxMzB9LElbXCJHLU8tU00tLS0tXCJdPUVbXCJUUC5NQVJJTkUgTElGRVwiXSx0W1wiRy1PLVNNLS0tLVwiXT17eDE6MTAwLHgyOjIyMCx5MTo3MCx5MjoxMzB9LElbXCJHLU8tU1MtLS0tXCJdPUVbXCJUUC5TRUEgQU5PTUFMWVwiXSx0W1wiRy1PLVNTLS0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjMwLHkyOjEyMH0sSVtcIkctTy1GQS0tLS1cIl09RVtcIlRQLkZJWCBBQ09VU1RJQ1wiXSxJW1wiRy1PLUZFLS0tLVwiXT1FW1wiVFAuRklYIEVMRUNUUk8tTUFHTkVUSUNcIl0sSVtcIkctTy1GTy0tLS1cIl09RVtcIlRQLkZJWCBFTEVDVFJPLU9QVElDQUxcIl19fTt2YXIgQj1bTCx5LGgseCxVLHAsbSxGLHt0eXBlOlwibGV0dGVyXCIsZ2V0TWV0YWRhdGE6byxnZXRJY29uczpNLGljb25QYXJ0czpbVl0sbGFiZWxzOmZ1bmN0aW9uKEkpe0lbXCJHLVQtR0QtLS0tXCJdPXt9LElbXCJHLVQtR0ktLS0tXCJdPXt9LElbXCJHLVQtR04tLS0tXCJdPXt9LElbXCJHLUMtTUdQRkUtXCJdPXt9LElbXCJHLUMtTUdQRkEtXCJdPXt9LElbXCJHLUMtTUdQRk8tXCJdPXt9LElbXCJHLUMtTUdQSS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjMwLGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU1BQVAtLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzUsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtTUFBQy0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1NQUFVLS1cIl09e30sSVtcIkctQy1NQUFELS1cIl09e30sSVtcIkctQy1NRE4tLS1cIl09e30sSVtcIkctQy1NTVBULS1cIl09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMTUseTo4NSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1NTVBPLS1cIl09e30sSVtcIkctQy1NTVBPQy1cIl09e30sSVtcIkctQy1NTVBPUi1cIl09e30sSVtcIkctQy1NTVBPRi1cIl09e30sSVtcIkctQy1NTVBPUy1cIl09e30sSVtcIkctQy1NTVBPTi1cIl09e30sSVtcIkctQy1NTVBPTi1cIl09e30sSVtcIkctQy1NTVBPTi1cIl09e30sSVtcIkctQy1NT1BELS1cIl09e30sSVtcIkctQy1CT0FURC1cIl09e30sSVtcIkctQy1CT0FCLS1cIl09e30sSVtcIkctQy1CT0FNQS1cIl09e30sSVtcIkctQy1CT0FNVC1cIl09e30sSVtcIkctQy1CT0FNRC1cIl09e30sSVtcIkctQy1CT0FNQy1cIl09e30sSVtcIkctQy1CT0FNVS1cIl09e30sSVtcIkctQy1CT0FNTi1cIl09e30sSVtcIkctQy1CT0FJUC1cIl09e30sSVtcIkctQy1CT0FJQy1cIl09e30sSVtcIkctQy1CT0FJTi1cIl09e30sSVtcIkctQy1CT0FJUy1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE2NSxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1CT0FJSC1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE2NSxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1CT0FJRC1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE2NSxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1CT0FWLS1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE2NSxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1CWUNHLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUJTRS0tLVwiXT17fSxJW1wiRy1DLUJTRi0tLVwiXT17fSxJW1wiRy1DLUJTSC0tLVwiXT17fSxJW1wiRy1DLUJTVS0tLVwiXT17fSxJW1wiRy1DLUJXTi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToyMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToyMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTAwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE0MCxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjUsZm9udHNpemU6MzV9LHR5cGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjYwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAwLGZvbnRzaXplOjM1fX0sSVtcIkctQy1CV0UtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MjAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MjAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwMCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxNDAsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTI1LGZvbnRzaXplOjM1fSx0eXBlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTo2MCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwMCxmb250c2l6ZTozNX19LElbXCJHLUMtQldJLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjIwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjIwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTQwLGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yNSxmb250c2l6ZTozNX0sdHlwZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6NjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMDAsZm9udHNpemU6MzV9fSxJW1wiRy1DLUJXRi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToyMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToyMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTAwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjE0MCxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjUsZm9udHNpemU6MzV9LHR5cGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjYwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAwLGZvbnRzaXplOjM1fX0sSVtcIkctQy1CV1AtLS1cIl09e30sSVtcIkctQy1CV0RQLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUJXREEtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQldEVC0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1CV0RFLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUJXRFMtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQldETy0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1CV0RHLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLUJXREVNLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtQldEVEYtXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1GU1RQLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6MTQ1LGZvbnRzaXplOjQwfSxhbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6ODAseToxNDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMjAseTo4MCxmb250c2l6ZTo0MH19LElbXCJHLUMtRlNTLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTI1LHk6MTE1LGZvbnRzaXplOjQwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLUZBVS0tLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjEyMCx5OjgwLGZvbnRzaXplOjQwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLVNQQS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BDLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFktLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQVC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BELS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUEUtLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQTC0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BNLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFItLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQVS0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BPLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sdW5pcXVlRGVzaWduYXRpb24xOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTAsZm9udHNpemU6MzUsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUEktLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQTi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRVC0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUEtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFCLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRQy0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUQtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFFLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRRi0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUctLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUFFILS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTotMzAsZm9udHNpemU6NDB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtU1BRSS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQUUotLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1TUE1BLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLVNQTVQtLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtT1gtLS0tXCJdPXt9LElbXCJHLUMtT1hSTi0tXCJdPXt9LElbXCJHLUMtT1hSRC0tXCJdPXt9LElbXCJHLUMtT1hVRC0tXCJdPXt9LElbXCJHLUMtT1hVQi0tXCJdPXt9LElbXCJHLUMtT1hVTC0tXCJdPXt9LElbXCJHLUMtT1hVUy0tXCJdPXt9LElbXCJHLUMtT1hXQS0tXCJdPXt9LElbXCJHLUMtT1hXRC0tXCJdPXt9LElbXCJHLUMtT1hXRS0tXCJdPXt9LElbXCJHLUMtT1hXRy0tXCJdPXt9LElbXCJHLUMtT1hXTS0tXCJdPXt9LElbXCJHLUMtT1hXSS0tXCJdPXt9LElbXCJHLUMtT1hXUC0tXCJdPXt9LElbXCJHLUMtT1hZLS0tXCJdPXt9LElbXCJHLUMtT1hZUC0tXCJdPXt9LElbXCJHLUMtT1hZRC0tXCJdPXt9LElbXCJHLUMtT1hZTC0tXCJdPXt9LElbXCJHLUMtT1hZQy0tXCJdPXt9LElbXCJHLUMtT1hZUy0tXCJdPXt9LElbXCJHLUMtT1hZQi0tXCJdPXt9LElbXCJHLUMtT1hZQS0tXCJdPXt9LElbXCJHLUMtT1hZVi0tXCJdPXt9LElbXCJHLUMtT1hZVC0tXCJdPXt9LElbXCJHLUMtT1hZUi0tXCJdPXt9LElbXCJHLUMtT1hZSy0tXCJdPXt9LElbXCJHLUMtT1hOLS0tXCJdPXt9LElbXCJHLUMtT1hILS0tXCJdPXt9LElbXCJHLUMtT1hIUS0tXCJdPXt9LElbXCJHLUMtT1hIQS0tXCJdPXt9LElbXCJHLUMtT1hIWS0tXCJdPXt9LElbXCJHLUMtT1hIWC0tXCJdPXt9LElbXCJHLUMtT1hSLS0tXCJdPXt9LElbXCJHLUMtT1hSUi0tXCJdPXt9LElbXCJHLUMtT1hSRC0tXCJdPXt9LElbXCJHLUMtT1hSVy0tXCJdPXt9LElbXCJHLUMtT1hSUC0tXCJdPXt9LElbXCJHLUMtT1hSVC0tXCJdPXt9LElbXCJHLUMtT1hTVEMtXCJdPXtkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjkyLGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyOCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1PWFNUQ1BcIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6OTIsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6MTI4LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU9YU1RDQVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo5Mixmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseToxMjgsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtT1hTVFItXCJdPXtkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjkyLGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyOCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1PWFNUSC1cIl09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6OTIsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6MTI4LGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU9YU1RTLVwiXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo5Mixmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseToxMjgsZm9udHNpemU6MzAsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtT1hTVFNBXCJdPXtkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjkyLGZvbnRzaXplOjMwLGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyOCxmb250c2l6ZTozMCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVtcIkctQy1PWFMtLS1cIl09e30sSVtcIkctQy1PWFNBLS1cIl09e30sSVtcIkctQy1PWFNELS1cIl09e30sSVtcIkctQy1PWFNDLS1cIl09e30sSVtcIkctQy1PWEFDLS1cIl09e30sSVtcIkctQy1PWEFBLS1cIl09e30sSVtcIkctQy1PWEFULS1cIl09e30sSVtcIkctQy1PWEFLLS1cIl09e30sSVtcIkctQy1PWEFGLS1cIl09e30sSVtcIkctQy1PWEFILS1cIl09e30sSVtcIkctQy1PWEFPLS1cIl09e30sSVtcIkctQy1PWEFSLS1cIl09e30sSVtcIkctQy1PWEFQLS1cIl09e30sSVtcIkctQy1PWEFNLS1cIl09e30sSVtcIkctQy1PWEFTLS1cIl09e30sSVtcIkctQy1PWEFELS1cIl09e30sSVtcIkctQy1PRy0tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSx1bmlxdWVEZXNpZ25hdGlvbjE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMCxmb250c2l6ZTozNSxmb250d2VpZ2h0OlwiYm9sZFwifSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLU9HQy0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtT0dQLS0tXCJdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjQwLGZvbnRzaXplOjQ1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJW1wiRy1DLU9HVC0tLVwiXT17fSxJW1wiRy1DLU9HRC0tLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbXCJHLUMtT0dMLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1PR04tLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLU9HUi0tLVwiXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6LTMwLGZvbnRzaXplOjQwfSxkdGcxOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseToxMCxmb250c2l6ZTo0MH19LElbXCJHLUMtT0dTLS0tXCJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sSVtcIkctQy1PR0ktLS1cIl09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJW1wiRy1DLU9HVy0tLVwiXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjEyNSxmb250c2l6ZTo3MH19LElbXCJHLU8tVkEtLS0tXCJdPXt9LElbXCJHLU8tVlItLS0tXCJdPXt9LElbXCJHLU8tVkUtLS0tXCJdPXt9LElbXCJHLU8tVkItLS0tXCJdPXt9LElbXCJHLU8tVlktLS0tXCJdPXt9LElbXCJHLU8tVkQtLS0tXCJdPXt9LElbXCJHLU8tVkktLS0tXCJdPXt9LElbXCJHLU8tVk0tLS0tXCJdPXt9LElbXCJHLU8tVkstLS0tXCJdPXt9LElbXCJHLU8tVlMtLS0tXCJdPXt9LElbXCJHLU8tVlAtLS0tXCJdPXt9LElbXCJHLU8tVlUtLS0tXCJdPXt9LElbXCJHLU8tVkMtLS0tXCJdPXt9LElbXCJHLU8tVkgtLS0tXCJdPXt9LElbXCJHLU8tVkYtLS0tXCJdPXt9LElbXCJHLU8tVk8tLS0tXCJdPXt9LElbXCJHLU8tVkwtLS0tXCJdPXt9LElbXCJHLU8tVlgtLS0tXCJdPXt9LElbXCJHLU8tVlotLS0tXCJdPXt9LElbXCJHLU8tTEItLS0tXCJdPXt9LElbXCJHLU8tTEctLS0tXCJdPXt9LElbXCJHLU8tTFctLS0tXCJdPXt9LElbXCJHLU8tUFItLS0tXCJdPXt9LElbXCJHLU8tUFJCLS0tXCJdPXt9LElbXCJHLU8tUFQtLS0tXCJdPXt9LElbXCJHLU8tUEMtLS0tXCJdPXt9LElbXCJHLU8tUENVLS0tXCJdPXt9LElbXCJHLU8tUEQtLS0tXCJdPXt9LElbXCJHLU8tUE0tLS0tXCJdPXt9LElbXCJHLU8tUEgtLS0tXCJdPXt9LElbXCJHLU8tUEhZLS0tXCJdPXt9LElbXCJHLU8tUEhXLS0tXCJdPXt9LElbXCJHLU8tUEhHLS0tXCJdPXt9LElbXCJHLU8tUEhULS0tXCJdPXt9LElbXCJHLU8tUEctLS0tXCJdPXt9LElbXCJHLU8tUFMtLS0tXCJdPXt9LElbXCJHLU8tUEYtLS0tXCJdPXt9LElbXCJHLU8tUEktLS0tXCJdPXt9LElbXCJHLU8tUEUtLS0tXCJdPXt9LElbXCJHLU8tUFgtLS0tXCJdPXt9LElbXCJHLU8tUEpWLS0tXCJdPXt9LElbXCJHLU8tUEpBLS0tXCJdPXt9LElbXCJHLU8tUEpCLS0tXCJdPXt9LElbXCJHLU8tUEstLS0tXCJdPXt9LElbXCJHLU8tUEEtLS0tXCJdPXt9LElbXCJHLU8tUE8tLS0tXCJdPXt9LElbXCJHLU8tSVItLS0tXCJdPXt9LElbXCJHLU8tSVMtLS0tXCJdPXt9LElbXCJHLU8tSUctLS0tXCJdPXt9LElbXCJHLU8tSVYtLS0tXCJdPXt9LElbXCJHLU8tSUstLS0tXCJdPXt9LElbXCJHLU8tSUQtLS0tXCJdPXt9LElbXCJHLU8tSUYtLS0tXCJdPXt9fSxpY29uczpmdW5jdGlvbihJLHQsRSxSKXtJW1wiRy1ULUdELS0tLVwiXT1FW1wiVFAuREVTVFJPWVwiXSx0W1wiRy1ULUdELS0tLVwiXT17eDE6MCx4MjoyMDAseTE6NDAseTI6MTYwfSxJW1wiRy1ULUdJLS0tLVwiXT1FW1wiVFAuSU5URVJESUNUXCJdLHRbXCJHLVQtR0ktLS0tXCJdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbXCJHLVQtR04tLS0tXCJdPUVbXCJUUC5ORVVUUkFMSVpFXCJdLHRbXCJHLVQtR04tLS0tXCJdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtTUdQRkUtXCJdPUVbXCJUUC5GSVggRUxFQ1RSTy1NQUdORVRJQ1wiXSxJW1wiRy1DLU1HUEZBLVwiXT1FW1wiVFAuRklYIEFDT1VTVElDXCJdLElbXCJHLUMtTUdQRk8tXCJdPUVbXCJUUC5GSVggRUxFQ1RSTy1PUFRJQ0FMXCJdLElbXCJHLUMtTUdQSS0tXCJdPUVbXCJUUC5QT0lOVCBPRiBJTlRFUkVTVFwiXSx0W1wiRy1DLU1HUEktLVwiXT17eDE6NTAseDI6MTUwLHkxOi0yNX0sSVtcIkctQy1NQUFQLS1cIl09RVtcIlRQLkFJUiBDT05UUk9MIFBPSU5UIChBQ1ApXCJdLHRbXCJHLUMtTUFBUC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU1BQUMtLVwiXT1FW1wiVFAuQ09NTVVOSUNBVElPTlMgQ0hFQ0tQT0lOVFwiXSx0W1wiRy1DLU1BQUMtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1NQUFVLS1cIl09RVtcIlRQLlBVTEwtVVAgUE9JTlRcIl0sdFtcIkctQy1NQUFVLS1cIl09e3gxOjUwLHgyOjI0MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtTUFBRC0tXCJdPUVbXCJUUC5ET1dORUQgQUlSQ1JFVyBQSUNLVVAgUE9JTlRcIl0sdFtcIkctQy1NQUFELS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtTUROLS0tXCJdPUVbXCJUUC5EVU1NWSBNSU5FRklFTERcIl0sdFtcIkctQy1NRE4tLS1cIl09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTQwfSxJW1wiRy1DLU1NUFQtLVwiXT1FW1wiVFAuVEFSR0VUIFJFRkVSRU5DRVwiXSxJW1wiRy1DLU1NUE8tLVwiXT1FW1wiVFAuT0JTRVJWQVRJT04gUE9TVC9PVVRQT1NUXCJdLHRbXCJHLUMtTU1QTy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1DLU1NUE9DLVwiXT1FW1wiVFAuQ09NQkFUIE9VVFBPU1RcIl0sdFtcIkctQy1NTVBPQy1cIl09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbXCJHLUMtTU1QT1ItXCJdPUVbXCJUUC5PQlNFUlZBVElPTiBQT1NUL1JFQ09OTkFJU1NBTkNFXCJdLHRbXCJHLUMtTU1QT1ItXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1DLU1NUE9GLVwiXT1FW1wiVFAuRk9SV0FSRCBPQlNFUlZFUiBQT1NJVElPTlwiXSx0W1wiRy1DLU1NUE9GLVwiXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVtcIkctQy1NTVBPUy1cIl09RVtcIlRQLlNFTlNPUiBPVVRQT1NUXCJdLHRbXCJHLUMtTU1QT1MtXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1DLU1NUE9OLVwiXT1FW1wiVFAuQ0JSTiBPQlNFUlZBVElPTiBQT1NUXCJdLHRbXCJHLUMtTU1QT04tXCJdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJW1wiRy1DLU1PUEQtLVwiXT1FW1wiVFAuUE9JTlQgT0YgREVQQVJUVVJFXCJdLHRbXCJHLUMtTU9QRC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJPQVRELVwiXT1FW1wiVFAuRklYRUQgQU5EIFBSRUZBQlJJQ0FURURcIl0sdFtcIkctQy1CT0FURC1cIl09e3gxOjYwLHgyOjE0MCx5MTozMH0sSVtcIkctQy1CT0FCLS1cIl09RVtcIlRQLkJPT0JZIFRSQVBcIl0sSVtcIkctQy1CT0FNQS1cIl09RVtcIlRQLkFOVElQRVJTT05ORUwgKEFQKSBNSU5FU1wiXSxJW1wiRy1DLUJPQU1ULVwiXT1FW1wiVFAuQU5USVRBTksgTUlORSAoQVQpXCJdLElbXCJHLUMtQk9BTUQtXCJdPUVbXCJUUC4oQVQpIEFOVElIQU5ETElORyBERVZJQ0VcIl0sdFtcIkctQy1CT0FNRC1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxOTV9LElbXCJHLUMtQk9BTUMtXCJdPUVbXCJUUC4oQVQpIERJUkVDVElPTkFMXCJdLHRbXCJHLUMtQk9BTUMtXCJdPXt4MTo2MCx4MjoxNDAseTE6MTAseTI6MTQwfSxJW1wiRy1DLUJPQU1VLVwiXT1FW1wiVFAuVU5TUEVDSUZJRUQgTUlORVwiXSxJW1wiRy1DLUJPQU1XLVwiXT1FW1wiVFAuV0lERSBBUkVBIE1JTkVTXCJdLElbXCJHLUMtQk9BSVAtXCJdPUVbXCJUUC5QTEFOTkVEIE1JTkVGSUVMRFwiXSx0W1wiRy1DLUJPQUlQLVwiXT17eDE6NDAseDI6MTYwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1CT0FJQy1cIl09RVtcIlRQLk1JTkVGSUVMRFMgU1RBVElDXCJdLHRbXCJHLUMtQk9BSUMtXCJdPXt4MTo0MCx4MjoxNjAseTE6NjAseTI6MTQwfSxJW1wiRy1DLUJPQUlOLVwiXT1FW1wiVFAuQU5USVRBTksgKEFUKSBNSU5FRklFTERcIl0sdFtcIkctQy1CT0FJTi1cIl09e3gxOjQwLHgyOjE2MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtQk9BSVMtXCJdPUVbXCJUUC5TQ0FUVEVSQUJMRSBNSU5FU1wiXSx0W1wiRy1DLUJPQUlTLVwiXT17eDE6NDAseDI6MTYwLHkxOjIwLHkyOjE0MH0sSVtcIkctQy1CT0FJSC1cIl09RVtcIlRQLkFOVElQRVJTT05ORUwgKEFQKSBNSU5FRklFTERcIl0sdFtcIkctQy1CT0FJSC1cIl09e3gxOjQwLHgyOjE2MCx5MToyMCx5MjoxNDB9LElbXCJHLUMtQk9BSUQtXCJdPUVbXCJUUC5TQ0FUVEVSQUJMRSBNSU5FRklFTEQgV0lUSCBTRUxGLURFU1RSVUNUXCJdLHRbXCJHLUMtQk9BSUQtXCJdPXt4MTo0MCx4MjoxNjAseTE6MjAseTI6MTQwfSxJW1wiRy1DLUJPQVYtLVwiXT1FW1wiVFAuVk9MQ0FOTyBNSU5FRklFTERcIl0sdFtcIkctQy1CT0FWLS1cIl09e3gxOjQwLHgyOjE2MCx5MToyMCx5MjoxNDB9LElbXCJHLUMtQllDRy0tXCJdPUVbXCJUUC5FTkdJTkVFUiBSRUdVTEFUSU5HIFBPSU5UXCJdLHRbXCJHLUMtQllDRy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJTRS0tLVwiXT1FW1wiVFAuRUFSVEhXT1JLL0ZPUlRJRklDQVRJT05cIl0sSVtcIkctQy1CU0YtLS1cIl09RVtcIlRQLkZPUlRcIl0sSVtcIkctQy1CU0gtLS1cIl09RVtcIlRQLlNVUkZBQ0UgU0hFTFRFUlwiXSxJW1wiRy1DLUJTVS0tLVwiXT1FW1wiVFAuVU5ERVJHUk9VTkQgU0hFTFRFUlwiXSxJW1wiRy1DLUJXTi0tLVwiXT1FW1wiVFAuTlVDTEVBUiBERVRPTkFUSU9OUyBHUk9VTkQgWkVST1wiXSx0W1wiRy1DLUJXTi0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi0yMH0sSVtcIkctQy1CV0UtLS1cIl09RVtcIlRQLk5VQ0xFQVIgREVUT05BVElPTlMgR1JPVU5EIFpFUk9cIl0sdFtcIkctQy1CV0UtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMjB9LElbXCJHLUMtQldJLS0tXCJdPUVbXCJUUC5OVUNMRUFSIERFVE9OQVRJT05TIEdST1VORCBaRVJPIFBMQU5ORURcIl0sdFtcIkctQy1CV0ktLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMjB9LElbXCJHLUMtQldGLS0tXCJdPUVbXCJUUC5OVUNMRUFSIERFVE9OQVRJT05TIEdST1VORCBaRVJPIFBMQU5ORURcIl0sdFtcIkctQy1CV0YtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMjB9LElbXCJHLUMtQldQLS0tXCJdPUVbXCJUUC5OVUNMRUFSIEZBTExPVVQgUFJPRFVDSU5HXCJdLHRbXCJHLUMtQldQLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6LTIwfSxJW1wiRy1DLUJXRFAtLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVFwiXSx0W1wiRy1DLUJXRFAtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1CV0RBLS1cIl09RVtcIlRQLkFMVEVSTkFURSBERUNPTiBTSVRFL1BPSU5UXCJdLHRbXCJHLUMtQldEQS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJXRFQtLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoVFJPT1BTKVwiXSx0W1wiRy1DLUJXRFQtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1CV0RFLS1cIl09RVtcIlRQLkRFQ09OIFNJVEUvUE9JTlQgKEVRVUlQTUVOVClcIl0sdFtcIkctQy1CV0RFLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQldEUy0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChFUVVJUE1FTlQgQU5EIFRST09QUylcIl0sdFtcIkctQy1CV0RTLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQldETy0tXCJdPUVbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChPUEVSQVRJT05BTCBERUNPTlRBTUlOQVRJT04pXCJdLHRbXCJHLUMtQldETy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUJXREctLVwiXT1FW1wiVFAuREVDT04gU0lURS9QT0lOVCAoVEhPUk9VR0ggREVDT05UQU1JTkFUSU9OKVwiXSx0W1wiRy1DLUJXREctLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1CV0RFTS1cIl09RVtcIlRQLkRFQ09OIFBPSU5UIChNQUlOKSBFUVVJUE1FTlRcIl0sdFtcIkctQy1CV0RFTS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtQldEVEYtXCJdPUVbXCJUUC5ERUNPTiBQT0lOVCAoRk9SV0FSRCkgVFJPT1BTXCJdLHRbXCJHLUMtQldEVEYtXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLUZTVFAtLVwiXT1FW1wiVFAuUE9JTlQvU0lOR0xFIFRBUkdFVFwiXSxJW1wiRy1DLUZTUy0tLVwiXT1FW1wiVFAuRklSRSBTVVBQT1JUIFNUQVRJT05cIl0sSVtcIkctQy1GQVUtLS1cIl09RVtcIlRQLk5VQ0xFQVIgVEFSR0VUXCJdLElbXCJHLUMtU1BBLS0tXCJdPUVbXCJUUC5BTUJVTEFOQ0UgRVhDSEFOR0UgUE9JTlRcIl0sdFtcIkctQy1TUEEtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BDLS0tXCJdPUVbXCJUUC5DQU5OSUJBTElaQVRJT04gUE9JTlRcIl0sdFtcIkctQy1TUEMtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BZLS0tXCJdPUVbXCJUUC5DQVNVQUxUWSBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtU1BZLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQVC0tLVwiXT1FW1wiVFAuQ0lWSUxJQU4gQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1DLVNQVC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUEQtLS1cIl09RVtcIlRQLkRFVEFJTkVFIENPTExFQ1RJT04gUE9JTlRcIl0sdFtcIkctQy1TUEQtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BFLS0tXCJdPUVbXCJUUC5FUFcgQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1DLVNQRS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUEwtLS1cIl09RVtcIlRQLkxPR0lTVElDUyBSRUxFQVNFIFBPSU5UXCJdLHRbXCJHLUMtU1BMLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQTS0tLVwiXT1FW1wiVFAuTUFJTlRFTkFOQ0UgQ09MTEVDVElPTiBQT0lOVFwiXSx0W1wiRy1DLVNQTS0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFItLS1cIl09RVtcIlRQLlJFQVJNLCBSRUZVRUwgQU5EIFJFU1VQUExZIFBPSU5UXCJdLHRbXCJHLUMtU1BSLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQVS0tLVwiXT1FW1wiVFAuUkVGVUVMIE9OIFRIRSBNT1ZFIFBPSU5UXCJdLHRbXCJHLUMtU1BVLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQTy0tLVwiXT1FW1wiVFAuVFJBRkZJQyBDT05UUk9MIFBPU1RcIl0sdFtcIkctQy1TUE8tLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BJLS0tXCJdPUVbXCJUUC5UUkFJTEVSIFRSQU5TRkVSIFBPSU5UXCJdLHRbXCJHLUMtU1BJLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQTi0tLVwiXT1FW1wiVFAuVU5JVCBNQUlOVEVOQU5DRSBDT0xMRUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtU1BOLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUVQtLVwiXT1FW1wiVFAuU1VQUExZIFBPSU5UXCJdLHRbXCJHLUMtU1BRVC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUUEtLVwiXT1FW1wiVFAuU1AgQ0xBU1MgSVwiXSx0W1wiRy1DLVNQUUEtLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1TUFFCLS1cIl09RVtcIlRQLlNQIENMQVNTIElJXCJdLHRbXCJHLUMtU1BRQi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUUMtLVwiXT1FW1wiVFAuU1AgQ0xBU1MgSUlJXCJdLHRbXCJHLUMtU1BRQy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUUQtLVwiXT1FW1wiVFAuU1AgQ0xBU1MgSVZcIl0sdFtcIkctQy1TUFFELS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRRS0tXCJdPUVbXCJUUC5TUCBDTEFTUyBWXCJdLHRbXCJHLUMtU1BRRS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUUYtLVwiXT1FW1wiVFAuU1AgQ0xBU1MgVklcIl0sdFtcIkctQy1TUFFGLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRRy0tXCJdPUVbXCJUUC5TUCBDTEFTUyBWSUlcIl0sdFtcIkctQy1TUFFHLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRSC0tXCJdPUVbXCJUUC5TUCBDTEFTUyBWSUlJXCJdLHRbXCJHLUMtU1BRSC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQUUktLVwiXT1FW1wiVFAuU1AgQ0xBU1MgSVhcIl0sdFtcIkctQy1TUFFJLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BRSi0tXCJdPUVbXCJUUC5TUCBDTEFTUyBYXCJdLHRbXCJHLUMtU1BRSi0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLVNQTUEtLVwiXT1FW1wiVFAuQU1NVU5JVElPTiBTVVBQTFkgUE9JTlQgKEFTUClcIl0sdFtcIkctQy1TUE1BLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtU1BNVC0tXCJdPUVbXCJUUC5BTU1VTklUSU9OIFRSQU5TRkVSIFBPSU5UIChBVFApXCJdLHRbXCJHLUMtU1BNVC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLU9YLS0tLVwiXT1FW1wiVFAuU1BFQ0lBTCBQT0lOVFwiXSx0W1wiRy1DLU9YLS0tLVwiXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWFJOLS1cIl09RVtcIlRQLk5BVklHQVRJT05BTCBSRUZFUkVOQ0VcIl0sdFtcIkctQy1PWFJOLS1cIl09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT1hVRC0tXCJdPUVbXCJUUC5EQVRVTVwiXSx0W1wiRy1DLU9YVUQtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWFVCLS1cIl09RVtcIlRQLkJSSUVGIENPTlRBQ1RcIl0sdFtcIkctQy1PWFVCLS1cIl09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVtcIkctQy1PWFVMLS1cIl09RVtcIlRQLkxPU1QgQ09OVEFDVFwiXSx0W1wiRy1DLU9YVUwtLVwiXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJW1wiRy1DLU9YVVMtLVwiXT1FW1wiVFAuU0lOS0VSXCJdLHRbXCJHLUMtT1hVUy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MCx5MjoxMDB9LElbXCJHLUMtT1hXQS0tXCJdPUVbXCJUUC5BSU0gUE9JTlRcIl0sdFtcIkctQy1PWFdBLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hXRC0tXCJdPUVbXCJUUC5EUk9QIFBPSU5UXCJdLHRbXCJHLUMtT1hXRC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTIwfSxJW1wiRy1DLU9YV0UtLVwiXT1FW1wiVFAuRU5UUlkgUE9JTlRcIl0sdFtcIkctQy1PWFdFLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MH0sSVtcIkctQy1PWFdHLS1cIl09RVtcIlRQLkdST1VORCBaRVJPXCJdLHRbXCJHLUMtT1hXRy0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbXCJHLUMtT1hXTS0tXCJdPUVbXCJUUC5NU0wgREVURUNUIFBPSU5UXCJdLHRbXCJHLUMtT1hXTS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6MzB9LElbXCJHLUMtT1hXSS0tXCJdPUVbXCJUUC5JTVBBQ1QgUE9JTlRcIl0sdFtcIkctQy1PWFdJLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hXUC0tXCJdPUVbXCJUUC5QUkVESUNURUQgSU1QQUNUIFBPSU5UXCJdLHRbXCJHLUMtT1hXUC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YWS0tLVwiXT1FW1wiVFAuU09OT0JVT1lcIl0sdFtcIkctQy1PWFktLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWVAtLVwiXT1FW1wiVFAuU09OT0JVT1kgUEFUVEVSTiBDRU5URVJcIl0sdFtcIkctQy1PWFlQLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWUQtLVwiXT1FW1wiVFAuU09OT0JVT1kgRElGQVJcIl0sdFtcIkctQy1PWFlELS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWUwtLVwiXT1FW1wiVFAuU09OT0JVT1kgTE9GQVJcIl0sdFtcIkctQy1PWFlMLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWUMtLVwiXT1FW1wiVFAuU09OT0JVT1kgQ0FTU1wiXSx0W1wiRy1DLU9YWUMtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZUy0tXCJdPUVbXCJUUC5TT05PQlVPWSBESUNBU1NcIl0sdFtcIkctQy1PWFlTLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWUItLVwiXT1FW1wiVFAuU09OT0JVT1kgQlRcIl0sdFtcIkctQy1PWFlCLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWUEtLVwiXT1FW1wiVFAuU09OT0JVT1kgQU5NXCJdLHRbXCJHLUMtT1hZQS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctQy1PWFlWLS1cIl09RVtcIlRQLlNPTk9CVU9ZIFZMQURcIl0sdFtcIkctQy1PWFlWLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJW1wiRy1DLU9YWVQtLVwiXT1FW1wiVFAuU09OT0JVT1kgQVRBQ1wiXSx0W1wiRy1DLU9YWVQtLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZUi0tXCJdPUVbXCJUUC5TT05PQlVPWSBST1wiXSx0W1wiRy1DLU9YWVItLVwiXT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbXCJHLUMtT1hZSy0tXCJdPUVbXCJUUC5TT05PQlVPWSBLSU5HUElOXCJdLHRbXCJHLUMtT1hZSy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVtcIkctQy1PWE4tLS1cIl09RVtcIlRQLkZPUk1BVElPTlwiXSx0W1wiRy1DLU9YTi0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWEgtLS1cIl09RVtcIlRQLkhBUkJPUlwiXSx0W1wiRy1DLU9YSC0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWEhRLS1cIl09RVtcIlRQLkhBUkJPUiBQT0lOVCBRXCJdLHRbXCJHLUMtT1hIUS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YSEEtLVwiXT1FW1wiVFAuSEFSQk9SIFBPSU5UIEFcIl0sdFtcIkctQy1PWEhBLS1cIl09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbXCJHLUMtT1hIWS0tXCJdPUVbXCJUUC5IQVJCT1IgUE9JTlQgWVwiXSx0W1wiRy1DLU9YSFktLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWEhYLS1cIl09RVtcIlRQLkhBUkJPUiBQT0lOVCBYXCJdLHRbXCJHLUMtT1hIWC0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YUi0tLVwiXT1FW1wiVFAuUk9VVEVcIl0sdFtcIkctQy1PWFItLS1cIl09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtT1hSUi0tXCJdPUVbXCJUUC5ST1VURSBSRU5ERVpWT1VTXCJdLHRbXCJHLUMtT1hSUi0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1DLU9YUkQtLVwiXT1FW1wiVFAuUk9VVEUgRElWRVJTSU9OU1wiXSx0W1wiRy1DLU9YUkQtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVtcIkctQy1PWFJXLS1cIl09RVtcIlRQLlJPVVRFIFdBWVBPSU5UXCJdLHRbXCJHLUMtT1hSVy0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1DLU9YUlAtLVwiXT1FW1wiVFAuUk9VVEUgUElNXCJdLHRbXCJHLUMtT1hSUC0tXCJdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJW1wiRy1DLU9YUlQtLVwiXT1FW1wiVFAuUk9VVEUgUE9JTlQgUlwiXSx0W1wiRy1DLU9YUlQtLVwiXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVtcIkctQy1PWFNUQy1cIl09RVtcIlRQLkNPTUJBVEFOVCBTVEFUSU9OXCJdLHRbXCJHLUMtT1hTVEMtXCJdPXt4MTotMTUseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFNUQ1BcIl09RVtcIlRQLlBJQ0tFVCBTVEFUSU9OXCJdLHRbXCJHLUMtT1hTVENQXCJdPXt4MTotMTUseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFNUQ0FcIl09RVtcIlRQLkFTVyBTSElQIFNUQVRJT05cIl0sdFtcIkctQy1PWFNUQ0FcIl09e3gxOi0xNSx4MjoxNDAseTE6NjAseTI6MTQwfSxJW1wiRy1DLU9YU1RSLVwiXT1FW1wiVFAuUkVQTEVOSVNITUVOVCBBVCBTRUEgKFJBUykgU1RBVElPTlwiXSx0W1wiRy1DLU9YU1RSLVwiXT17eDE6LTE1LHgyOjE0MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtT1hTVEgtXCJdPUVbXCJUUC5SRVNDVUUgU1RBVElPTlwiXSx0W1wiRy1DLU9YU1RILVwiXT17eDE6LTE1LHgyOjE0MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtT1hTVFMtXCJdPUVbXCJUUC5TVUJNQVJJTkUgU1RBVElPTlwiXSx0W1wiRy1DLU9YU1RTLVwiXT17eDE6LTE1LHgyOjE0MCx5MTo2MCx5MjoxNDB9LElbXCJHLUMtT1hTVFNBXCJdPUVbXCJUUC5BU1cgU1VCTUFSSU5FIFNUQVRJT05cIl0sdFtcIkctQy1PWFNUU0FcIl09e3gxOi0xMTUseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctQy1PWFMtLS1cIl09RVtcIlRQLlNFQVJDSFwiXSx0W1wiRy1DLU9YUy0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWFNBLS1cIl09RVtcIlRQLlNFQVJDSCBBUkVBXCJdLHRbXCJHLUMtT1hTQS0tXCJdPXt4MToyMCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YU0QtLVwiXT1FW1wiVFAuRElQIFBPU0lUSU9OXCJdLHRbXCJHLUMtT1hTRC0tXCJdPXt4MToxMCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRy1DLU9YU0MtLVwiXT1FW1wiVFAuU0VBUkNIIENFTlRFUlwiXSx0W1wiRy1DLU9YU0MtLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PWEFDLS1cIl09RVtcIlRQLkNPTUJBVCBBSVIgUEFUUk9MIChDQVApXCJdLHRbXCJHLUMtT1hBQy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQUEtLVwiXT1FW1wiVFAuQUlSQk9STkUgRUFSTFkgV0FSTklORyAoQUVXKVwiXSx0W1wiRy1DLU9YQUEtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFULS1cIl09RVtcIlRQLlRBQ0FOXCJdLHRbXCJHLUMtT1hBVC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQUstLVwiXT1FW1wiVFAuVEFOS0lOR1wiXSx0W1wiRy1DLU9YQUstLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFGLS1cIl09RVtcIlRQLkZJWEVEIFdJTkdcIl0sdFtcIkctQy1PWEFGLS1cIl09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbXCJHLUMtT1hBSC0tXCJdPUVbXCJUUC5ST1RBUlkgV0lOR1wiXSx0W1wiRy1DLU9YQUgtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFPLS1cIl09RVtcIlRQLlRPTUNBVFwiXSx0W1wiRy1DLU9YQU8tLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFSLS1cIl09RVtcIlRQLlJFU0NVRVwiXSx0W1wiRy1DLU9YQVItLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFQLS1cIl09RVtcIlRQLlJFUExFTklTSFwiXSx0W1wiRy1DLU9YQVAtLVwiXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVtcIkctQy1PWEFNLS1cIl09RVtcIlRQLk1BUlNIQUxMXCJdLHRbXCJHLUMtT1hBTS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQVMtLVwiXT1FW1wiVFAuU1RSSUtFIElQXCJdLHRbXCJHLUMtT1hBUy0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9YQUQtLVwiXT1FW1wiVFAuQ09SUklET1IgVEFCIFBPSU5UXCJdLHRbXCJHLUMtT1hBRC0tXCJdPXt4MTo2MCx4MjoxNDAseTE6NDAseTI6MTYwfSxJW1wiRy1DLU9HLS0tLVwiXT1FW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtT0ctLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLU9HQy0tLVwiXT1FW1wiVFAuQUNUSU9OIFBPSU5UXCJdLHRbXCJHLUMtT0dDLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLU9HUC0tLVwiXT1FW1wiVFAuQ09OVEFDVCBQT0lOVFwiXSx0W1wiRy1DLU9HUC0tLVwiXT17eDE6NTUseDI6MTQ1LHkxOi0xMH0sSVtcIkctQy1PR1QtLS1cIl09RVtcIlRQLkNPT1JESU5BVElPTiBQT0lOVFwiXSx0W1wiRy1DLU9HVC0tLVwiXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVtcIkctQy1PR0QtLS1cIl09RVtcIlRQLkRFQ0lTSU9OIFBPSU5UXCJdLHRbXCJHLUMtT0dELS0tXCJdPXt4MTozMCx4MjoxNzAseTE6MjUseTI6MTYwfSxJW1wiRy1DLU9HTC0tLVwiXT1FW1wiVFAuQUNUSU9OIExJTktVUCBQT0lOVFwiXSx0W1wiRy1DLU9HTC0tLVwiXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVtcIkctQy1PR04tLS1cIl09RVtcIlRQLkFDVElPTiBQQVNTQUdFIFBPSU5UXCJdLHRbXCJHLUMtT0dOLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLU9HUi0tLVwiXT1FW1wiVFAuQUNUSU9OIFJBTExZIFBPSU5UXCJdLHRbXCJHLUMtT0dSLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRy1DLU9HUy0tLVwiXT1FW1wiVFAuQUNUSU9OIFJFTEVBU0UgUE9JTlRcIl0sdFtcIkctQy1PR1MtLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT0dJLS0tXCJdPUVbXCJUUC5BQ1RJT04gU1RBUlQgUE9JTlRcIl0sdFtcIkctQy1PR0ktLS1cIl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbXCJHLUMtT0dXLS0tXCJdPUVbXCJUUC5XQVlQT0lOVFwiXSx0W1wiRy1DLU9HVy0tLVwiXT17eDE6NjAseDI6MTQwLHkxOjYwLHkyOjE0MH0sSVtcIkctTy1WQS0tLS1cIl09RVtcIlRQLkZJUkVcIl0sSVtcIkctTy1WUi0tLS1cIl09RVtcIkdSLkVRLkhPV0lUWkVSXCJdLElbXCJHLU8tVkUtLS0tXCJdPUVbXCJTVC5JQy5LSUxMSU5HIFZJQ1RJTVwiXSxJW1wiRy1PLVZCLS0tLVwiXT1FW1wiQUlSLk1JU1NJTEUuSUMuQk9NQlwiXSxJW1wiRy1PLVZZLS0tLVwiXT1FW1wiU1QuSUMuQk9PQlkgVFJBUFwiXSxJW1wiRy1PLVZELS0tLVwiXT1FW1wiU1QuSUMuRFJJVkUtQlkgU0hPT1RJTkdcIl0sSVtcIkctTy1WSS0tLS1cIl09RVtcIlRQLklORElSRUNUIEZJUkVcIl0sSVtcIkctTy1WTS0tLS1cIl09RVtcIkdSLkVRLk1PUlRBUlwiXSxJW1wiRy1PLVZLLS0tLVwiXT1FW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLElbXCJHLU8tVlMtLS0tXCJdPUVbXCJTVC5JQy5TTklQSU5HXCJdLElbXCJHLU8tVlAtLS0tXCJdPUVbXCJTVC5JQy5QT0lTT05JTkdcIl0sSVtcIkctTy1WVS0tLS1cIl09RVtcIlRQLkFNQlVTSFwiXSxJW1wiRy1PLVZDLS0tLVwiXT1FW1wiR1IuSUMuRkYuQ0xBU1MgVlwiXSxJW1wiRy1PLVZILS0tLVwiXT1FW1wiQVIuSS5GRi5DSVZJTElBTiBST1RBUlkgV0lOR1wiXSxJW1wiRy1PLVZGLS0tLVwiXT1bRVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEVbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbXCJHLU8tVk8tLS0tXCJdPUVbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXSxJW1wiRy1PLVZMLS0tLVwiXT1FW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sSVtcIkctTy1WWC0tLS1cIl09RVtcIkdSLklDLkZGLlNJR05BTFwiXSxJW1wiRy1PLVZaLS0tLVwiXT1FW1wiR1IuSUMuRkYuU1VQUExZXCJdLElbXCJHLU8tTEItLS0tXCJdPUVbXCJTVC5JQy5CTEFDSyBMSVNUIExPQ0FUSU9OXCJdLElbXCJHLU8tTEctLS0tXCJdPUVbXCJTVC5JQy5HUkFZIExJU1QgTE9DQVRJT05cIl0sSVtcIkctTy1MVy0tLS1cIl09RVtcIlNULklDLldISVRFIExJU1QgTE9DQVRJT05cIl0sSVtcIkctTy1QUi0tLS1cIl09RVtcIlRQLlJPQUQgQkxPQ0tcIl0sSVtcIkctTy1QUkItLS1cIl09RVtcIlRQLlJPQUQgQkxPQ0sgKFVOREVSIENPTlNUUlVDVElPTilcIl0sSVtcIkctTy1QVC0tLS1cIl09RVtcIlNULklDLlBBVFJPTExJTkdcIl0sSVtcIkctTy1QQy0tLS1cIl09W0VbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEVbXCJTVC5NMS5XSUxMSU5HXCJdXSxJW1wiRy1PLVBDVS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLkNPRVJDRUQvSU1QUkVTU0VEXCJdXSxJW1wiRy1PLVBELS0tLVwiXT1FW1wiU1QuSUMuREVNT05TVFJBVElPTlwiXSxJW1wiRy1PLVBNLS0tLVwiXT1FW1wiU1QuSUMuTUlORSBMQVlJTkdcIl0sSVtcIkctTy1QSC0tLS1cIl09RVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXSxJW1wiRy1PLVBIWS0tLVwiXT1FW1wiU1QuSUMuUkFESU8gQU5EIFRFTEVWSVNJT04gUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdLElbXCJHLU8tUEhXLS0tXCJdPVtFW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdLEVbXCJTVC5NMS5XUklUVEVOIFBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXV0sSVtcIkctTy1QSEctLS1cIl09W0VbXCJTVC5JQy5QU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl0sRVtcIlNULk0xLldSSVRURU4gUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdXSxJW1wiRy1PLVBIVC0tLVwiXT1bRVtcIlNULklDLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXSxFW1wiU1QuTTEuSE9VU0UtVE8tSE9VU0VcIl1dLElbXCJHLU8tUEctLS0tXCJdPUVbXCJTVC5JQy5TRUFSQ0hJTkdcIl0sSVtcIkctTy1QUy0tLS1cIl09RVtcIlNULklDLlNQWVwiXSxJW1wiRy1PLVBGLS0tLVwiXT1FW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl0sSVtcIkctTy1QSS0tLS1cIl09RVtcIkdSLklDLkZGLk1FRElDQUwgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdLElbXCJHLU8tUEUtLS0tXCJdPVtFW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEVbXCJHUi5JQy5GRi5JTlRFUkNFUFRcIl1dLElbXCJHLU8tUFgtLS0tXCJdPUVbXCJTVC5JQy5FWFRPUlRJT05cIl0sSVtcIkctTy1QSlYtLS1cIl09W0VbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiRy1PLVBKQS0tLVwiXT1bRVtcIlNULklDLkhJSkFDS0lORyAoQUlSUExBTkUpXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJHLU8tUEpCLS0tXCJdPVtFW1wiU1QuSUMuSElKQUNLSU5HIChCT0FUKVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiRy1PLVBLLS0tLVwiXT1bRVtcIlNULklDLklORElWSURVQUxcIl0sRVtcIlNULk0xLktJRE5BUFBJTkdcIl1dLElbXCJHLU8tUEEtLS0tXCJdPUVbXCJTVC5JQy5BUlJFU1RcIl0sSVtcIkctTy1QTy0tLS1cIl09RVtcIlNULklDLkRSVUcgUkVMQVRFRCBBQ1RJVklUSUVTXCJdLElbXCJHLU8tSVItLS0tXCJdPUVbXCJTVC5JQy5HUk9VUFwiXSxJW1wiRy1PLUlTLS0tLVwiXT1FW1wiU1QuSUMuU0FGRSBIT1VTRVwiXSxJW1wiRy1PLUlHLS0tLVwiXT1FW1wiU1QuSUMuR1JBRkZJVElcIl0sSVtcIkctTy1JVi0tLS1cIl09RVtcIlNULklDLlZBTkRBTElTTS9MT09UL1JBTlNBQ0svUExVTkRFUi9TQUNLXCJdLElbXCJHLU8tSUstLS0tXCJdPUVbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXSxJW1wiRy1PLUlELS0tLVwiXT1bRVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdLEVbXCJTVC5NMS5EUlVHXCJdXSxJW1wiRy1PLUlGLS0tLVwiXT1FW1wiU1QuSUMuSU5URVJOQUwgU0VDVVJJVFkgRk9SQ0VcIl19fV0sWT1bTCx5LGgseCxVLHAsbSxGLHosSCx7dHlwZTpcImxldHRlclwiLGdldE1ldGFkYXRhOm8sZ2V0SWNvbnM6TSxpY29uUGFydHM6W2Z1bmN0aW9uKEksdCxFLFIsZSxBKXt2YXIgQz10LmFmZmlsaWF0aW9ufHxcIkZyaWVuZFwiLFQ9RS5pY29uQ29sb3JbQ10sUz17XCIyNTI1Qi5BU1dTVUJcIjp7dHlwZTpcInBhdGhcIixkOlwibSA4MCw4NSA0MCwwIDAsLTIwIC00MCwwIHogbSAyMCwtMzAgMCw0MCBtIC00MCwxNSAxNSwxNSA1MCwwIDE1LC0xNSAtMTUsLTE1IC01MCwwIHpcIn0sXCIyNTI1Qi5OQ0JUVC5TVE5cIjpbe3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw4NSA2MCwwIDAsMzAgLTYwLDAgeiBtIDMwLC0xNSAwLDYwXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjE0NSxmb250c2l6ZTozMCx0ZXh0OlwiTkNcIn1dLFwiMjUyNUIuU1ROLkFTV1NIUFwiOlt7dHlwZTpcInBhdGhcIixmaWxsOiExLGQ6XCJtIDcwLDg1IDYwLDAgMCwzMCAtNjAsMCB6IG0gMzAsLTE1IDAsNjBcIn0se3R5cGU6XCJ0ZXh0XCIsc3Ryb2tlOiExLHg6MTAwLHk6MTQ1LGZvbnRzaXplOjMwLHRleHQ6XCJBU1wifV0sXCIyNTI1Qi5TVE4uUEtUXCI6W3t0eXBlOlwicGF0aFwiLGZpbGw6ITEsZDpcIm0gNzAsODUgNjAsMCAwLDMwIC02MCwwIHogbSAzMCwtMTUgMCw2MFwifSx7dHlwZTpcInRleHRcIixzdHJva2U6ITEseDoxMDAseToxNDUsZm9udHNpemU6MzAsdGV4dDpcIlBLXCJ9XSxcIjI1MjVCLlNUTi5SU0NcIjpbe3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw4NSA2MCwwIDAsMzAgLTYwLDAgeiBtIDMwLC0xNSAwLDYwXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjE0NSxmb250c2l6ZTozMCx0ZXh0OlwiUlNcIn1dLFwiMjUyNUIuU1ROXCI6e3R5cGU6XCJwYXRoXCIsZmlsbDohMSxkOlwibSA3MCw4NSBjIDIwLDAgNDAsMCA2MCwwIDAsMTAgMCwyMCAwLDMwIC0yMCwwIC00MCwwIC02MCwwIDAsLTEwIDAsLTIwIDAsLTMwIHogbSAzMCwtMTUgYyAwLDIwIDAsNDAgMCw2MCBtIDM1LC01IEMgMTIwLDE0OCA4Mi43LDE0OSA2Ni44LDEyNiA0OS4yLDEwNSA1OS4xLDY5LjIgODUuMiw2MC4xIDEwMyw1My4xIDEyNCw1OS40IDEzNSw3NC44XCJ9LFwiMjUyNUIuU1VCLlNUTlwiOlt7dHlwZTpcInBhdGhcIixkOlwibSA3MCw4NSA2MCwwIDAsMzAgLTYwLDAgeiBtIDMwLC0xNSAwLDYwXCJ9LHt0eXBlOlwidGV4dFwiLHN0cm9rZTohMSx4OjEwMCx5OjE0NSxmb250c2l6ZTozMCx0ZXh0OlwiU1NcIn1dfTtmb3IodmFyIE4gaW4gUylTLmhhc093blByb3BlcnR5KE4pJiYoSS5oYXNPd25Qcm9wZXJ0eShOKSYmY29uc29sZS53YXJuKFwiT3ZlcnJpZGUgb2Y6IFwiK04pLG4uY2FsbCh0aGlzLFNbTl0sVCksSVtOXT1TW05dKX1dLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJTLVMtUy0tLS0tXCJdPUVbXCIyNTI1Qi5TVE5cIl0sSVtcIlMtUy1TUC0tLS1cIl09RVtcIjI1MjVCLlNUTi5QS1RcIl0sSVtcIlMtUy1TQS0tLS1cIl09RVtcIjI1MjVCLlNUTi5BU1dTSFBcIl0sSVtcIlMtUy1OTi0tLS1cIl09RVtcIjI1MjVCLk5DQlRULlNUTlwiXSxJW1wiUy1TLU5OUi0tLVwiXT1FW1wiMjUyNUIuU1ROLlJTQ1wiXSxJW1wiUy1VLVNTLS0tLVwiXT1FW1wiMjUyNUIuU1VCLlNUTlwiXSxJW1wiUy1VLVNTQS0tLVwiXT1FW1wiMjUyNUIuQVNXU1VCXCJdLElbXCJHLU8tU0JXRC0tXCJdPUVbXCJUUC5XUkVDSywgREFOR0VST1VTXCJdLHRbXCJHLU8tU0JYRC0tXCJdPXt4MTozNSx4MjoxNjUseTE6NzAseTI6MTMwfX19LGtdLFc9W0wseSxoLHgsVSxwLG0sRix6LEgse3R5cGU6XCJsZXR0ZXJcIixnZXRNZXRhZGF0YTpvLGdldEljb25zOk0saWNvblBhcnRzOltjLFZdLGljb25zOmZ1bmN0aW9uKEksdCxFLFIpe0lbXCJFLUktQS0tLS0tXCJdPVtFW1wiQUMuSUMuQ1JJTUlOQUwuQ0lWSUwgRElTVFVSQkFOQ0VcIl1dLElbXCJFLUktQUMtLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl0sRVtcIkFDLk0xLlJJT1RcIl1dLElbXCJFLUktQi0tLS0tXCJdPVtFW1wiQUMuSUMuQ1JJTUlOQUwuQUNUSVZJVFkuSU5DSURFTlRcIl1dLElbXCJFLUktQkEtLS0tXCJdPVtFW1wiU1QuSUMuQk9NQlwiXSxFW1wiQUMuTTEuVEhSRUFUXCJdXSxJW1wiRS1JLUJDLS0tLVwiXT1bRVtcIlNULklDLkVYUExPU0lPTlwiXSxzLl9zY2FsZSguNixFW1wiU1QuSUMuQk9NQlwiXSldLElbXCJFLUktQkQtLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl0sRVtcIlNULk0xLkxPT1RcIl1dLElbXCJFLUktQkYtLS0tXCJdPVtFW1wiQUMuSUMuU0hPT1RJTkdcIl1dLElbXCJFLUktQy0tLS0tXCJdPVtFW1wiQUMuSUMuRklSRSBFVkVOVFwiXV0sSVtcIkUtSS1DQS0tLS1cIl09W0VbXCJBQy5JQy5IT1QgU1BPVFwiXV0sSVtcIkUtSS1DQi0tLS1cIl09W0VbXCJBQy5JQy5OT04tUkVzSWRFTlRJQUwgRklSRVwiXV0sSVtcIkUtSS1DQy0tLS1cIl09W0VbXCJBQy5JQy5GSVJFIE9SSUdJTlwiXV0sSVtcIkUtSS1DRC0tLS1cIl09W0VbXCJBQy5JQy5SRXNJZEVOVElBTCBGSVJFXCJdXSxJW1wiRS1JLUNFLS0tLVwiXT1bRVtcIkFDLklDLlNDSE9PTCBGSVJFXCJdXSxJW1wiRS1JLUNGLS0tLVwiXT1bRVtcIkFDLklDLlNNT0tFXCJdXSxJW1wiRS1JLUNHLS0tLVwiXT1bRVtcIkFDLklDLlNQRUNJQUwgTkVFRFMgRklSRVwiXV0sSVtcIkUtSS1DSC0tLS1cIl09W0VbXCJBQy5JQy5XSUxEIEZJUkVcIl1dLElbXCJFLUktRC0tLS0tXCJdPVtFW1wiQUMuSUMuSEFaQVJET1VTIE1BVEVSSUFMUyBJTkNJREVOVFwiXV0sSVtcIkUtSS1EQS0tLS1cIl09W0VbXCJBQy5JQy5DSEVNSUNBTCBBR0VOVFwiXV0sSVtcIkUtSS1EQi0tLS1cIl09W0VbXCJBQy5JQy5DT1JST1NJVkUgTUFURVJJQUxcIl1dLElbXCJFLUktREMtLS0tXCJdPVtFW1wiQUMuSUMuSEFaQVJET1VTIFdIRU4gV0VUXCJdXSxJW1wiRS1JLURELS0tLVwiXT1bRVtcIkFDLklDLkVYUExPU0lWRSBNQVRFUklBTFwiXV0sSVtcIkUtSS1ERS0tLS1cIl09W0VbXCJBQy5JQy5GTEFNTUFCTEUgR0FTXCJdXSxJW1wiRS1JLURGLS0tLVwiXT1bRVtcIkFDLklDLkZMQU1NQUJMRSBMSVFVSURcIl1dLElbXCJFLUktREctLS0tXCJdPVtFW1wiQUMuSUMuRkxBTU1BQkxFIFNPTElEXCJdXSxJW1wiRS1JLURILS0tLVwiXT1bRVtcIkFDLklDLk5PTi1GTEFNTUFCTEUgR0FTXCJdXSxJW1wiRS1JLURJLS0tLVwiXT1bRVtcIkFDLklDLk9SR0FOSUMgUEVST1hJREVcIl1dLElbXCJFLUktREotLS0tXCJdPVtFW1wiQUMuSUMuT1hJRElaRVJcIl1dLElbXCJFLUktREstLS0tXCJdPVtFW1wiQUMuSUMuUkFESU9BQ1RJVkUgTUFURVJJQUxcIl1dLElbXCJFLUktREwtLS0tXCJdPVtFW1wiQUMuSUMuU1BPTlRBTkVPVVNMWSBDT01CVVNUSUJMRSBNQVRFUklBTFwiXV0sSVtcIkUtSS1ETS0tLS1cIl09W0VbXCJBQy5JQy5UT1hJQyBHQVNcIl1dLElbXCJFLUktRE4tLS0tXCJdPVtFW1wiQUMuSUMuVE9YSUMgSU5GRUNUSU9VUyBNQVRFUklBTFwiXV0sSVtcIkUtSS1ETy0tLS1cIl09W0VbXCJBQy5JQy5VTkVYUExPREVEIE9SRE5BTkNFXCJdXSxJW1wiRS1JLUUtLS0tLVwiXT1bRVtcIlNULk0xLklOQ0lERU5UXCJdLEVbXCJTVC5JQy5ISUpBQ0tJTkcgKEFJUlBMQU5FKVwiXV0sSVtcIkUtSS1FQS0tLS1cIl09W0VbXCJTVC5NMS5BQ0NJREVOVFwiXSxFW1wiU1QuSUMuSElKQUNLSU5HIChBSVJQTEFORSlcIl1dLElbXCJFLUktRi0tLS0tXCJdPVtFW1wiU1QuTTEuSU5DSURFTlRcIl0sRVtcIlNULklDLkhJSkFDS0lORyAoQk9BVClcIl1dLElbXCJFLUktRkEtLS0tXCJdPVtFW1wiU1QuTTEuQUNDSURFTlRcIl0sRVtcIlNULklDLkhJSkFDS0lORyAoQk9BVClcIl1dLElbXCJFLUktRy0tLS0tXCJdPVtFW1wiU1QuTTEuSU5DSURFTlRcIl0sRVtcIkdSLkVRLlRSQUlOIExPQ09NT1RJVkVcIl1dLElbXCJFLUktR0EtLS0tXCJdPVtFW1wiU1QuTTEuQUNDSURFTlRcIl0sRVtcIkdSLkVRLlRSQUlOIExPQ09NT1RJVkVcIl1dLElbXCJFLUktR0ItLS0tXCJdPVtFW1wiR1IuRVEuVFJBSU4gTE9DT01PVElWRVwiXSxFW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSxJW1wiRS1JLUgtLS0tLVwiXT1bRVtcIlNULk0xLklOQ0lERU5UXCJdLEVbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXV0sSVtcIkUtSS1IQS0tLS1cIl09W0VbXCJTVC5NMS5BQ0NJREVOVFwiXSxFW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl1dLElbXCJFLU4tQS0tLS0tXCJdPVtdLElbXCJFLU4tQUEtLS0tXCJdPVtFW1wiQUMuSUMuQUZURVJTSE9DS1wiXV0sSVtcIkUtTi1BQi0tLS1cIl09W0VbXCJBQy5JQy5BVkFMQU5DSEVcIl1dLElbXCJFLU4tQUMtLS0tXCJdPVtFW1wiQUMuSUMuRUFSVEhRVUFLRSBFUElDRU5URVJcIl1dLElbXCJFLU4tQUQtLS0tXCJdPVtFW1wiQUMuSUMuTEFORFNMSURFXCJdXSxJW1wiRS1OLUFFLS0tLVwiXT1bRVtcIkFDLklDLlNVQlNJREVOQ0VcIl1dLElbXCJXLVMtV1NWRS0tXCJdPVtFW1wiQUMuSUMuVk9MQ0FOSUMgRVJVUFRJT05cIl1dLElbXCJFLU4tQUctLS0tXCJdPVtFW1wiQUMuSUMuVk9MQ0FOSUMgVEhSRUFUXCJdXSxJW1wiVy1TLVdTRC1MSVwiXT1bRVtcIkFUTU9TUEhFUklDLklDLkRSSVpaTEUuSU5URVJNSVRURU5UIExJR0hUXCJdXSxJW1wiRS1OLUItLS0tLVwiXT1bXSxJW1wiRS1OLUJCLS0tLVwiXT1bRVtcIkFDLklDLkRST1VHSFRcIl1dLElbXCJFLU4tQkMtLS0tXCJdPVtFW1wiQUMuSUMuRkxPT0RcIl1dLElbXCJXLVMtV1NGR1NPXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuRk9HLlNLWSBPQlNDVVJFRFwiXV0sSVtcIlctUy1XU0dSTC1cIl09W0VbXCJBVE1PU1BIRVJJQy5JQy5IQUlMLkxJR0hUIE5PVCBBU1NPQ0lBVEVEIFdJVEggVEhVTkRFUlwiXV0sSVtcIkUtTi1CRi0tLS1cIl09W0VbXCJBQy5JQy5JTlZFUlNJT05cIl1dLElbXCJXLVMtV1NSLUxJXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuUkFJTi5JTlRFUk1JVFRFTlQgTElHSFRcIl1dLElbXCJXLVMtV1NEU0xNXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuRFVTVCBPUiBTQU5ELkxJR0hUIFRPIE1PREVSQVRFXCJdXSxJW1wiVy1TLVdTUy1MSVwiXT1bRVtcIkFUTU9TUEhFUklDLklDLlNOT1cuSU5URVJNSVRURU5UIExJR0hUXCJdXSxJW1wiVy1TLVdTVE1ILVwiXT1bRVtcIkFUTU9TUEhFUklDLklDLlNUT1JNUy5USFVOREVSU1RPUk0gTElHSFQgVE8gTU9ERVJBVEUgLSBXSVRIIEhBSUxcIl1dLElbXCJXLVMtV1NULUZDXCJdPVtFW1wiQVRNT1NQSEVSSUMuSUMuU1RPUk1TLkZVTk5FTCBDTE9VRCAoVE9STkFETy9XQVRFUlNQT1VUKVwiXV0sSVtcIlctUy1XU1RTUy1cIl09W0VbXCJBVE1PU1BIRVJJQy5JQy5UUk9QSUNBTCBTVE9STSBTWVNURU1TLlRST1BJQ0FMIFNUT1JNXCJdXSxJW1wiRS1OLUJNLS0tLVwiXT1bRVtcIkFDLklDLlRTVU5BTUlcIl1dLElbXCJFLU4tQy0tLS0tXCJdPVtdLElbXCJFLU4tQ0EtLS0tXCJdPVtFW1wiQUMuSUMuQklSRFwiXV0sSVtcIkUtTi1DQi0tLS1cIl09W0VbXCJBQy5JQy5JTlNFQ1RcIl1dLElbXCJFLU4tQ0MtLS0tXCJdPVtFW1wiQUMuSUMuTUlDUk9CSUFMXCJdXSxJW1wiRS1OLUNELS0tLVwiXT1bRVtcIkFDLklDLlJFUFRJTEVcIl1dLElbXCJFLU4tQ0UtLS0tXCJdPVtFW1wiQUMuSUMuUk9ERU5UXCJdXSxJW1wiRS1PLUEtLS0tLVwiXT1JW1wiRS1PLUFBLS0tLVwiXT1JW1wiRS1PLUFCLS0tLVwiXT1JW1wiRS1PLUFDLS0tLVwiXT1JW1wiRS1PLUFELS0tLVwiXT1bRVtcIkdSLklDLkVNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXV0sSVtcIkUtTy1BRS0tLS1cIl09W0VbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxFW1wiR1IuTTEuTUVERVZBQ1wiXV0sSVtcIkUtTy1BRi0tLS1cIl09W3MuX3RyYW5zbGF0ZSgwLDEwLHMuX3NjYWxlKC44LEVbXCJHUi5JLkZGLkNJVklMSUFOIFJPVEFSWSBXSU5HXCJdKSksRVtcIkdSLk0xLk1FREVWQUNcIl1dLElbXCJFLU8tQUctLS0tXCJdPVtFW1wiQUMuSUMuSEVBTFRIIERFUEFSVE1FTlQgRkFDSUxJVFlcIl1dLElbXCJFLU8tQUotLS0tXCJdPVtFW1wiQUMuSUMuTUVESUNBTCBGQUNJTElUSUVTIE9VVFBBVElFTlRcIl1dLElbXCJFLU8tQUstLS0tXCJdPVtFW1wiQUMuSUMuT1BFUkFUSU9OL0VNRVJHRU5DWSBNRURJQ0FMIE9QRVJBVElPTlwiXV0sSVtcIkUtTy1BTC0tLS1cIl09W0VbXCJBQy5JQy5QSEFSTUFDWVwiXV0sSVtcIkUtTy1BTS0tLS1cIl09W0VbXCJBQy5JQy5UUklBR0VcIl1dLElbXCJFLU8tQi0tLS0tXCJdPUlbXCJFLU8tQkEtLS0tXCJdPUlbXCJFLU8tQkItLS0tXCJdPUlbXCJFLU8tQkMtLS0tXCJdPVtFW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXV0sSVtcIkUtTy1CRC0tLS1cIl09W3MuX3NjYWxlKC43LEVbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdKSxFW1wiQUMuTTEuRU1FUkdFTkNZIENPTExFQ1RJT04gRVZBQ1VBVElPTiBQT0lOVFwiXV0sSVtcIkUtTy1CRS0tLS1cIl09W3MuX3NjYWxlKC43LEVbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdKSxFW1wiQUMuTTEuRU1FUkdFTkNZIElOQ0lERU5UIENPTU1BTkQgQ0VOVEVSXCJdXSxJW1wiRS1PLUJGLS0tLVwiXT1bcy5fc2NhbGUoLjcsRVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEVbXCJBQy5NMS5FTUVSR0VOQ1kgT1BFUkFUSU9OUyBDRU5URVJcIl1dLElbXCJFLU8tQkctLS0tXCJdPVtFW1wiQUMuSUMuRU1FUkdFTkNZIFBVQkxJQyBJTkZPUk1BVElPTiBDRU5URVJcIl1dLElbXCJFLU8tQkgtLS0tXCJdPVtzLl9zY2FsZSguNyxFW1wiR1IuSUMuRkYuRU1FUkdFTkNZIE9QRVJBVElPTlwiXSksRVtcIkFDLk0xLkVNRVJHRU5DWSBTSEVMVEVSXCJdXSxJW1wiRS1PLUJJLS0tLVwiXT1bcy5fc2NhbGUoLjcsRVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEVbXCJBQy5NMS5FTUVSR0VOQ1kgU1RBR0lORyBBUkVBXCJdXSxJW1wiRS1PLUJKLS0tLVwiXT1bRVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl1dLElbXCJFLU8tQkstLS0tXCJdPUlbXCJTLUctVVNTVy0tXCJdLElbXCJFLU8tQkwtLS0tXCJdPVtFW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl0sRVtcIkFDLk0xLkVNRVJHRU5DWVwiXV0sSVtcIkUtTy1DLS0tLS1cIl09SVtcIkUtTy1DQS0tLS1cIl09SVtcIkUtTy1DQi0tLS1cIl09SVtcIkUtTy1DRS0tLS1cIl09W0VbXCJHUi5JQy5GSVJFIFBST1RFQ1RJT05cIl1dLElbXCJFLU8tQ0MtLS0tXCJdPVtFW1wiQUMuSUMuRklSRSBIWURSQU5UXCJdXSxJW1wiRS1PLUNELS0tLVwiXT1bRVtcIkFDLklDLk9USEVSIFdBVEVSIFNVUFBMWSBMT0NBVElPTlwiXV0sSVtcIkUtTy1ELS0tLS1cIl09SVtcIkUtTy1EQS0tLS1cIl09SVtcIkUtTy1EQi0tLS1cIl09SVtcIkUtTy1EQy0tLS1cIl09W0VbXCJHUi5JQy5GRi5MQVcgRU5GT1JDRU1FTlRcIl1dLElbXCJFLU8tREQtLS0tXCJdPUlbXCJFLU8tRERBLS0tXCJdPUlbXCJFLU8tRERCLS0tXCJdPUlbXCJFLU8tRERDLS0tXCJdPVtFW1wiR1IuSUMuQlVSRUFVIE9GIEFMQ09IT0wsIFRPQkFDQ08sIEZJUkVBUk1TIEFORCBFWFBMT1NJVkVTIChBVEYpIChERVBBUlRNRU5UIE9GIEpVU1RJQ0UpXCJdXSxJW1wiRS1PLURFLS0tLVwiXT1JW1wiRS1PLURFQS0tLVwiXT1JW1wiRS1PLURFQi0tLVwiXT1JW1wiRS1PLURFQy0tLVwiXT1bRVtcIkdSLklDLkZGLkJPUkRFUiBQQVRST0xcIl1dLElbXCJFLU8tREYtLS0tXCJdPUlbXCJFLU8tREZBLS0tXCJdPUlbXCJFLU8tREZCLS0tXCJdPUlbXCJFLU8tREZDLS0tXCJdPVtFW1wiR1IuSUMuRkYuQ1VTVE9NUyBTRVJWSUNFXCJdXSxJW1wiRS1PLURHLS0tLVwiXT1JW1wiRS1PLURHQS0tLVwiXT1JW1wiRS1PLURHQi0tLVwiXT1JW1wiRS1PLURHQy0tLVwiXT1bRVtcIkdSLklDLkRSVUcgRU5GT1JDRU1FTlQgQUdFTkNZIChERUEpXCJdXSxJW1wiRS1PLURILS0tLVwiXT1JW1wiRS1PLURIQS0tLVwiXT1JW1wiRS1PLURIQi0tLVwiXT1JW1wiRS1PLURIQy0tLVwiXT1bRVtcIkdSLklDLkZGLkRFUEFSVE1FTlQgT0YgSlVTVElDRSAoRE9KKVwiXV0sSVtcIkUtTy1ESS0tLS1cIl09SVtcIkUtTy1ESUEtLS1cIl09SVtcIkUtTy1ESUItLS1cIl09SVtcIkUtTy1ESUMtLS1cIl09W0VbXCJHUi5JQy5GRURFUkFMIEJVUkVBVSBPRiBJTlZFU1RJR0FUSU9OIChGQkkpXCJdXSxJW1wiRS1PLURKLS0tLVwiXT1JW1wiRS1PLURKQi0tLVwiXT1JW1wiRS1PLURKQy0tLVwiXT1bRVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVFwiXV0sSVtcIkUtTy1ESy0tLS1cIl09W0VbXCJHUi5JQy5GRi5QUklTT05cIl1dLElbXCJFLU8tREwtLS0tXCJdPUlbXCJFLU8tRExBLS0tXCJdPUlbXCJFLU8tRExCLS0tXCJdPUlbXCJFLU8tRExDLS0tXCJdPVtFW1wiR1IuSUMuVU5JVEVEIFNUQVRFUyBTRUNSRVQgU0VSVklDRShUUkVBUykgKFVTU1MpXCJdXSxJW1wiRS1PLURNLS0tLVwiXT1JW1wiRS1PLURNQS0tLVwiXT1JW1wiRS1PLURNQi0tLVwiXT1JW1wiRS1PLURNQy0tLVwiXT1bRVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OIFNFQ1VSSVRZIEFHRU5DWSAoVFNBKVwiXV0sSVtcIkUtTy1ETi0tLS1cIl09SVtcIkUtTy1ETkEtLS1cIl09SVtcIkUtTy1ETkMtLS1cIl09W0VbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlQgVkVTU0VMXCJdXSxJW1wiRS1PLURPLS0tLVwiXT1JW1wiRS1PLURPQS0tLVwiXT1JW1wiRS1PLURPQi0tLVwiXT1JW1wiRS1PLURPQy0tLVwiXT1bRVtcIkdSLklDLkZGLlVTIE1BUlNIQUxTIFNFUlZJQ0VcIl1dLElbXCJFLU8tRUEtLS0tXCJdPVtzLl9zY2FsZSguNixFW1wiR1IuRVEuU0VOU09SXCJdKSxFW1wiR1IuTTEuQklPTE9HSUNBTFwiXV0sSVtcIkUtTy1FQi0tLS1cIl09W3MuX3NjYWxlKC42LEVbXCJHUi5FUS5TRU5TT1JcIl0pLEVbXCJHUi5NMS5DSEVNSUNBTFwiXV0sSVtcIkUtTy1FQy0tLS1cIl09W3MuX3NjYWxlKC42LEVbXCJHUi5FUS5TRU5TT1JcIl0pLEVbXCJHUi5NMS5JTlRSVVNJT05cIl1dLElbXCJFLU8tRUQtLS0tXCJdPVtzLl9zY2FsZSguNixFW1wiR1IuRVEuU0VOU09SXCJdKSxFW1wiR1IuTTEuTlVDTEVBUlwiXV0sSVtcIkUtTy1FRS0tLS1cIl09W3MuX3NjYWxlKC42LEVbXCJHUi5FUS5TRU5TT1JcIl0pLEVbXCJHUi5NMS5SQURJT0xPR0lDQUxcIl1dLElbXCJFLUYtQS0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuQUdSSUNVTFRVUkUgQU5EIEZPT0QgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtQUEtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQUdSSUNVTFRVUkFMIExBQk9SQVRPUllcIl1dLElbXCJFLUYtQUItLS0tXCJdPVtFW1wiR1IuSU4uSUMuQU5JTUFMIEZFRURMT1RcIl1dLElbXCJFLUYtQUMtLS0tXCJdPVtFW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl0sRVtcIkFDLk0xLkNPTU1FUkNJQUxcIl1dLElbXCJFLUYtQUQtLS0tXCJdPVtFW1wiR1IuSU4uSUMuRkFSTS9SQU5DSFwiXV0sSVtcIkUtRi1BRS0tLS1cIl09W0VbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXSxFW1wiQUMuTTEuUFJPRFVDVElPTlwiXV0sSVtcIkUtRi1BRi0tLS1cIl09W0VbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXSxFW1wiQUMuTTEuUkVUQUlMXCJdXSxJW1wiRS1GLUFHLS0tLVwiXT1bRVtcIkdSLklOLklDLkdSQUlOIFNUT1JBR0VcIl1dLElbXCJFLUYtQi0tLS0tXCJdPVtFW1wiQUMuSUMuQkFOS0lORyBGSU5BTkNFIEFORCBJTlNVUkFOQ0UgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtQkEtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQVRNXCJdXSxJW1wiRS1GLUJCLS0tLVwiXT1bRVtcIkdSLklOLklDLkJBTktcIl1dLElbXCJFLUYtQkMtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQlVMTElPTiBTVE9SQUdFXCJdXSxJW1wiRS1GLUJELS0tLVwiXT1bRVtcIkdSLklOLklDLkZFREVSQUwgUkVTRVJWRSBCQU5LXCJdXSxJW1wiRS1GLUJFLS0tLVwiXT1bRVtcIkdSLklOLklDLkZJTkFOQ0lBTCBFWENIQU5HRVwiXV0sSVtcIkUtRi1CRi0tLS1cIl09W0VbXCJHUi5JTi5JQy5GSU5BTkNJQUwgU0VSVklDRVMsIE9USEVSXCJdXSxJW1wiRS1GLUMtLS0tLVwiXT1bRVtcIkdSLklOLklDLkNPTU1FUkNJQUwgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtQ0EtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQ0hFTUlDQUwgUExBTlRcIl1dLElbXCJFLUYtQ0ItLS0tXCJdPVtFW1wiR1IuSU4uSUMuRklSRUFSTVMgTUFOVUZBQ1RVUkVSXCJdXSxJW1wiRS1GLUNDLS0tLVwiXT1bRVtcIkdSLklOLklDLkZJUkVBUk1TIFJFVEFJTEVSXCJdXSxJW1wiRS1GLUNELS0tLVwiXT1bRVtcIkdSLklOLklDLkhBWkFSRE9VUyBNQVRFUklBTCBQUk9EVUNUSU9OXCJdXSxJW1wiRS1GLUNFLS0tLVwiXT1bRVtcIkdSLklOLklDLkhBWkFSRE9VUyBNQVRFUklBTCBTVE9SQUdFXCJdXSxJW1wiRS1GLUNGLS0tLVwiXT1bRVtcIkdSLklOLklDLklORFVTVFJJQUwgU0lURVwiXV0sSVtcIkUtRi1DRy0tLS1cIl09W0VbXCJHUi5JTi5JQy5MQU5ERklMTFwiXV0sSVtcIkUtRi1DSC0tLS1cIl09W0VbXCJHUi5JTi5JQy5QSEFSTUFDRVVUSUNBTCBNQU5VRkFDVFVSRVJcIl1dLElbXCJFLUYtQ0ktLS0tXCJdPVtFW1wiR1IuSU4uSUMuQ09OVEFNSU5BVEVEIEhBWkFSRE9VUyBXQVNURSBTSVRFXCJdXSxJW1wiRS1GLUNKLS0tLVwiXT1bRVtcIkdSLklOLklDLlRPWElDIFJFTEVBU0UgSU5WRU5UT1JZXCJdXSxJW1wiRS1GLUQtLS0tLVwiXT1bRVtcIkdSLklOLklDLkVEVUNBVElPTkFMIEZBQ0lMSVRJRVMgSU5GUkFTVFJVQ1RVUkVcIl1dLElbXCJFLUYtREEtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQ09MTEVHRS9VTklWRVJTSVRZXCJdXSxJW1wiRS1GLURCLS0tLVwiXT1bRVtcIkdSLklOLklDLlNDSE9PTFwiXV0sSVtcIkUtRi1FQS0tLS1cIl09W3MuX3RyYW5zbGF0ZSgwLDE1LHMuX3NjYWxlKC43NSxFW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0pKSxFW1wiQUMuTTEuR0VORVJBVElPTiBTVEFUSU9OXCJdXSxJW1wiRS1GLUVCLS0tLVwiXT1bRVtcIkdSLklOLklDLk5BVFVSQUwgR0FTIEZBQ0lMSVRZXCJdXSxJW1wiRS1GLUVFLS0tLVwiXT1bRVtcIkdSLklOLklDLlBST1BBTkUgRkFDSUxJVFlcIl1dLElbXCJFLUYtRi0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuR09WRVJOTUVOVCBTSVRFIElORlJBU1RSVUNUVVJFXCJdXSxJW1wiRS1GLUctLS0tLVwiXT1bRVtcIkdSLklOLklDLk1JTElUQVJZIElORlJBU1RSVUNUVVJFXCJdXSxJW1wiRS1GLUdBLS0tLVwiXT1bRVtcIkdSLklOLklDLkJBU0VcIl0sRVtcIkFDLk0xLk1JTElUQVJZIEFSTU9SWVwiXV0sSVtcIkUtRi1ILS0tLS1cIl09W0VbXCJHUi5JTi5JQy5QT1NUQUwgU0VSVklDRSBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1IQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5QT1NUQUwgRElTVFJJQlVUSU9OIENFTlRFUlwiXV0sSVtcIkUtRi1IQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5QT1NUIE9GRklDRVwiXV0sSVtcIkUtRi1JLS0tLS1cIl09W0VbXCJHUi5JTi5JQy5QVUJMSUMgVkVOVUVTIElORlJBU1RSVUNUVVJFXCJdXSxJW1wiRS1GLUlBLS0tLVwiXT1bRVtcIkdSLklOLklDLkVOQ0xPU0VEIEZBQ0lUTElUWSAoUFVCTElDIFZFTlVFKVwiXV0sSVtcIkUtRi1JQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5PUEVOIEZBQ0lMSVRZIChPUEVOIFZFTlVFKVwiXV0sSVtcIkUtRi1JQy0tLS1cIl09W0VbXCJHUi5JTi5JQy5SRUNSRUFUSU9OQUwgQVJFQVwiXV0sSVtcIkUtRi1JRC0tLS1cIl09W0VbXCJHUi5JTi5JQy5SRUxJR0lPVVMgSU5TVElUVVRJT05cIl1dLElbXCJFLUYtSi0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuU1BFQ0lBTCBORUVEUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1KQS0tLS1cIl09W0VbXCJHUi5JTi5JQy5BRFVMVCBEQVkgQ0FSRVwiXV0sSVtcIkUtRi1KQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5DSElMRCBEQVkgQ0FSRVwiXV0sSVtcIkUtRi1KQy0tLS1cIl09W0VbXCJHUi5JTi5JQy5FTERFUiBDQVJFXCJdXSxJW1wiRS1GLUstLS0tLVwiXT1bRVtcIkdSLklOLklDLlRFTEVDT01NVU5JQ0FUSU9OUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVtcIkUtRi1LQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlMgVE9XRVJcIl1dLElbXCJFLUYtTEEtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQUlSIFRSQUZGSUMgQ09OVFJPTCBGQUNJTElUWVwiXV0sSVtcIkctTS1CQ0ItLS1cIl09W0VbXCJHUi5JTi5JQy5CUklER0VcIl1dLHRbXCJHLU0tQkNCLS0tXCJdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJW1wiRS1GLUxELS0tLVwiXT1bRVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTVVMVElQTEUgUEFTU0VOR0VSIFZFSElDTEVcIl1dLElbXCJFLUYtTEUtLS0tXCJdPVtFW1wiR1IuSUMuRkVSUllcIl1dLElbXCJFLUYtTEYtLS0tXCJdPVtFW1wiR1IuSU4uSUMuSEVMSUNPUFRFUiBMQU5ESU5HIFNJVEVcIl1dLElbXCJXLVMtTUwtLS0tXCJdPVtFW1wiR1IuSU4uSUMuVFJBTlNQT1JUQVRJT04gSU5GUkFTVFJVQ1RVUkUgTE9DS1wiXV0sSVtcIkUtRi1MSC0tLS1cIl09W0VbXCJHUi5JQy5NQUlOVEVOQU5DRVwiXV0sSVtcIkUtRi1MSi0tLS1cIl09W0VbXCJHUi5JQy5SQUlMSEVBRFwiXV0sSVtcIkUtRi1MSy0tLS1cIl09W0VbXCJHUi5JTi5JQy5SRVNUIFNUT1BcIl1dLElbXCJXLVMtSFBCQS0tXCJdPVtFW1wiR1IuSU4uSUMuVFJBTlNQT1JUQVRJT04gSU5GUkFTVFJVQ1RVUkUgU0hJUCBBTkNIT1JBR0VcIl1dLElbXCJFLUYtTE0tLS0tXCJdPVtFW1wiR1IuSU4uSUMuVE9MTCBGQUNJTElUWVwiXV0sSVtcIkctUy1QTy0tLS1cIl09RVtcIlRQLlRSQUZGSUMgQ09OVFJPTCBQT1NUXCJdLHRbXCJHLVMtUE8tLS0tXCJdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJW1wiRS1GLUxPLS0tLVwiXT1bRVtcIkdSLklOLklDLlRSQUZGSUMgSU5TUEVDVElPTiBGQUNJTElUWVwiXV0sSVtcIkUtRi1MUC0tLS1cIl09W0VbXCJHUi5JTi5JQy5UVU5ORUxcIl1dLElbXCJFLUYtTUEtLS0tXCJdPVtFW1wiR1IuSU4uSUMuQ09OVFJPTCBWQUxWRVwiXV0sSVtcIkUtRi1NQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5EQU1cIl1dLElbXCJFLUYtTUMtLS0tXCJdPVtFW1wiR1IuSU4uSUMuRElTQ0hBUkdFIE9VVEZBTExcIl1dLElbXCJFLUYtTUQtLS0tXCJdPVtFW1wiR1IuSU4uSUMuR1JPVU5EIFdBVEVSIFdFTExcIl1dLElbXCJFLUYtTUUtLS0tXCJdPVtFW1wiR1IuSU4uSUMuUFVNUElORyBTVEFUSU9OXCJdXSxJW1wiRS1GLU1GLS0tLVwiXT1bRVtcIkdSLklOLklDLlJFU0VSVk9JUlwiXV0sSVtcIkUtRi1NRy0tLS1cIl09W0VbXCJHUi5JTi5JQy5TVE9SQUdFIFRPV0VSXCJdXSxJW1wiRS1GLU1ILS0tLVwiXT1bRVtcIkdSLklOLklDLlNVUkZBQ0UgV0FURVIgSU5UQUtFXCJdXSxJW1wiRS1GLU1JLS0tLVwiXT1bRVtcIkdSLklOLklDLldBU1RFV0FURVIgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJW1wiTy1PLUQtLS0tLVwiXT1bRVtcIlNULklDLkRFTU9OU1RSQVRJT05cIl1dLElbXCJPLUktUi0tLS0tXCJdPVtFW1wiU1QuSUMuR1JPVVBcIl1dLElbXCJPLVYtQi0tLS0tXCJdPVtFW1wiU1QuSUMuQk9NQlwiXV0sSVtcIk8tVi1QLS0tLS1cIl09W0VbXCJTVC5JQy5QT0lTT05JTkdcIl1dLElbXCJPLU8tSEEtLS0tXCJdPVtFW1wiU1QuSUMuSElKQUNLSU5HIChBSVJQTEFORSlcIl0sRVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sSVtcIk8tTy1IVi0tLS1cIl09W0VbXCJTVC5JQy5ISUpBQ0tJTkcgKEJPQVQpXCJdLEVbXCJTVC5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLElbXCJPLU8tSFQtLS0tXCJdPVtFW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl0sRVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sSVtcIlMtRy1JWEgtLS1cIl09W0VbXCJHUi5JQy5GRi5NRURJQ0FMIFRSRUFUTUVOVCBGQUNJTElUWVwiXV0sSVtcIlMtUy1OTS0tLS1cIl09W0VbXCJHUi5JQy5IT1NQSVRBTCBTSElQXCJdXSxJW1wiRS1PLUJLLS0tLVwiXT1bRVtcIkdSLklDLkZGLlNVUFBMWVwiXSxFW1wiR1IuSUMuV0FURVJcIl1dLElbXCJTLUctVVVMQy0tXCJdPVtFW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UXCJdXSxJW1wiUy1TLVhMLS0tLVwiXT1bRVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbXCJTLUctRVMtLS0tXCJdPVtFW1wiR1IuRVEuU0VOU09SXCJdXSxJW1wiUy1HLUlVRS0tLVwiXT1bRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdXSxJW1wiUy1HLUlVRU4tLVwiXT1bRVtcIkdSLklOLklDLkVMRUNUUklDIFBPV0VSXCJdLEVbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUiBOVUNMRUFSXCJdXSxJW1wiUy1HLUlSUC0tLVwiXT1bRVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVtcIlMtRy1JQi0tLS1cIl09W0VbXCJHUi5JTi5JQy5CQVNFXCJdXSxJW1wiUy1HLUlVVC0tLVwiXT1bRVtcIkdSLklOLklDLlRFTEVDT01NVU5JQ0FUSU9OU1wiXV0sSVtcIlMtRy1JVC0tLS1cIl09W0VbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXV0sSVtcIlMtRy1JQkEtLS1cIl09W0VbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxFW1wiR1IuSUMuQUlSUE9SVCBPRiBERUJBUktBVElPTlwiXV0sSVtcIlMtRy1JQk4tLS1cIl09W0VbXCJHUi5JQy5OQVZBTFwiXV0sSVtcIlMtRy1JVVAtLS1cIl09W0VbXCJHUi5JQy5XQVRFUlwiXV19fSxrXTtmdW5jdGlvbiB1KEksdCxFKXt2YXIgUj10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoMiwxKSxlPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cigzLDEpLEE9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDQsMiksQz10aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoNiwxKSxUPXRoaXMub3B0aW9ucy5zaWRjLnN1YnN0cig3LDEpLFM9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDgsMiksTj10LmZ1bmN0aW9uaWQ9dGhpcy5vcHRpb25zLnNpZGMuc3Vic3RyKDEwLDEwKTtyZXR1cm4gdC5jb250ZXh0PUUuY29udGV4dFtwYXJzZUludCh0aGlzLm9wdGlvbnMuc2lkYy5zdWJzdHIoMiwxKSldLHQuYWZmaWxpYXRpb249ezA6XCJVbmtub3duXCIsMTpcIlVua25vd25cIiwyOlwiRnJpZW5kXCIsMzpcIkZyaWVuZFwiLDQ6XCJOZXV0cmFsXCIsNTpcIkhvc3RpbGVcIiw2OlwiSG9zdGlsZVwifVtlXSx0LmRpbWVuc2lvbj17XCIwMFwiOlwiU2VhXCIsXCIwMVwiOlwiQWlyXCIsXCIwMlwiOlwiQWlyXCIsXCIwNVwiOlwiQWlyXCIsXCIwNlwiOlwiQWlyXCIsMTA6XCJHcm91bmRcIiwxMTpcIkdyb3VuZFwiLDEyOlwiR3JvdW5kXCIsMTU6XCJHcm91bmRcIiwyMDpcIkdyb3VuZFwiLDMwOlwiU2VhXCIsMzU6XCJTdWJzdXJmYWNlXCIsMzY6XCJTdWJzdXJmYWNlXCIsMzk6XCJTdWJzdXJmYWNlXCIsNDA6XCJHcm91bmRcIiw1MDpcIkFpclwiLDUxOlwiQWlyXCIsNTI6XCJHcm91bmRcIiw1MzpcIlNlYVwiLDU0OlwiU3Vic3VyZmFjZVwiLDYwOlwiR3JvdW5kXCJ9W0FdfHxcIlwiLFwiMTBcIiE9QSYmXCIxMVwiIT1BJiZcIjI1XCIhPUEmJlwiMjdcIiE9QSYmXCI0MFwiIT1BfHwodC51bml0PSEwKSxcIjA1XCIhPUEmJlwiMDZcIiE9QSYmXCI1MFwiIT1BfHwodC5zcGFjZT0hMCksXCI0MFwiPT1BJiYodC5hY3Rpdml0eT0hMCksXCIyMFwiPT1BJiYodC5pbnN0YWxsYXRpb249ITApLFwiMjVcIj09QSYmKHQuY29udHJvbE1lYXN1cmU9ITApLFwiNjBcIj09QSYmKHQuY3liZXJzcGFjZT0hMCksXCIzNlwiPT1BJiYhMT09PXRoaXMuc3R5bGUuYWx0ZXJuYXRlTWVkYWwmJih0LmZpbGw9ITEpLFwiMzBcIj09QSYmMTVlND09Ti5zdWJzdHIoMCw2KSYmKHQuZnJhbWU9ITEpLFwiMVwiPT1DJiYodC5ub3RwcmVzZW50PUkuX2Rhc2hBcnJheXMuYW50aWNpcGF0ZWQpLFwiMFwiIT1lJiZcIjJcIiE9ZSYmXCI1XCIhPWV8fCh0Lm5vdHByZXNlbnQ9SS5fZGFzaEFycmF5cy5wZW5kaW5nKSxcIjMwXCI9PUEmJjE2ZTQ9PU4uc3Vic3RyKDAsNikmJih0Lm5vdHByZXNlbnQ9SS5fZGFzaEFycmF5cy5wZW5kaW5nKSxcIjM1XCI9PUEmJjE0ZTQ9PU4uc3Vic3RyKDAsNikmJih0Lm5vdHByZXNlbnQ9SS5fZGFzaEFycmF5cy5wZW5kaW5nKSxcIjM1XCI9PUEmJjE1ZTQ9PU4uc3Vic3RyKDAsNikmJih0Lm5vdHByZXNlbnQ9SS5fZGFzaEFycmF5cy5wZW5kaW5nKSxcIjJcIiE9QyYmXCIzXCIhPUMmJlwiNFwiIT1DJiZcIjVcIiE9Q3x8KHQuY29uZGl0aW9uPUUuc3RhdHVzW3BhcnNlSW50KEMpXSksdC5iYXNlRGltZW5zaW9uPXQuZGltZW5zaW9uLHQuYmFzZUFmZmlsYXRpb249dC5hZmZpbGlhdGlvbixcIjVcIj09ZSYmXCIxXCI9PVImJih0Lmpva2VyPSEwKSxcIjZcIj09ZSYmXCIxXCI9PVImJih0LmZha2VyPSEwKSwodC5qb2tlcnx8dC5mYWtlcikmJih0LmFmZmlsaWF0aW9uPUUuYWZmaWxpYXRpb25bMV0pLFwiMDBcIj09QSYmKHQuZGltZW5zaW9uVW5rbm93bj0hMCksXCIwMFwiPT1BJiZcIjFcIj09UiYmXCJVbmtub3duXCIhPXQuYWZmaWxpYXRpb24mJih0LmFmZmlsaWF0aW9uPVwiXCIpLFwiMjdcIj09QSYmKHQuZGltZW5zaW9uPVwiTGFuZERpc21vdW50ZWRJbmRpdmlkdWFsXCIsdC5kaXNtb3VudGVkPSEwKSxcIjE1XCIhPUEmJlwiNTJcIiE9QXx8KHQuZGltZW5zaW9uPUUuZGltZW5zaW9uWzJdKSwtMTxbXCIxXCIsXCIzXCIsXCI1XCIsXCI3XCJdLmluZGV4T2YoVCkmJih0LmZlaW50RHVtbXk9ITApLC0xPFtcIjJcIixcIjNcIixcIjZcIixcIjdcIl0uaW5kZXhPZihUKSYmKHQuaGVhZHF1YXJ0ZXJzPSEwKSwtMTxbXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCJdLmluZGV4T2YoVCkmJih0LnRhc2tGb3JjZT0hMCksUzw9MzAmJih0LmVjaGVsb249RS5lY2hlbG9uTW9iaWxpdHlbU10pLDMwPD1TJiZTPDcwJiYodC5tb2JpbGl0eT1FLmVjaGVsb25Nb2JpbGl0eVtTXSksNzA8PVMmJlM8ODAmJih0LmxlYWRlcnNoaXA9RS5lY2hlbG9uTW9iaWxpdHlbU10pLChcIjAxXCI9PUEmJlwiMTJcIj09Ti5zdWJzdHJpbmcoMCwyKXx8XCIwNVwiPT1BJiZcIjEyXCI9PU4uc3Vic3RyaW5nKDAsMil8fFwiMTFcIj09QXx8XCIxMlwiPT1BJiZcIjEyXCI9PU4uc3Vic3RyaW5nKDAsMil8fFwiMTVcIj09QSYmXCIxNlwiPT1OLnN1YnN0cmluZygwLDIpfHxcIjMwXCI9PUEmJlwiMTRcIj09Ti5zdWJzdHJpbmcoMCwyKXx8XCIzNVwiPT1BJiZcIjEyXCI9PU4uc3Vic3RyaW5nKDAsMikpJiYodC5jaXZpbGlhbj0hMCksdH1mdW5jdGlvbiB2KEksdCxFLFIpe3ZhciBlPXt9LEE9e30sQz17fSxUPXt9O2Zvcih2YXIgUyBpbiBJLl9pY29uU0lEQy5udW1iZXIpSS5faWNvblNJREMubnVtYmVyLmhhc093blByb3BlcnR5KFMpJiZJLl9pY29uU0lEQy5udW1iZXJbU10uY2FsbCh0aGlzLGUsQSxDLFQsdCxFLFIpO3JldHVybntpY29uczplLG0xOkEsbTI6QyxiYm94OlR9fXZhciBRPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpQLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMDFcIj09ZSYmKElbMTFlNF09W0FbXCJBUi5JLk1JTElUQVJZXCJdXSxJWzExMDEwMF09W0FbXCJBUi5JLkZJWEVELVdJTkcgRFN5bWJvbFwiXV0sSVsxMTAxMDFdPVtBW1wiQVIuSS5NRURJQ0FMIEVWQUNVQVRJT05cIl1dLElbMTEwMTAyXT1bQVtcIkFSLkkuQVRUQUNLL1NUUklLRVwiXV0sSVsxMTAxMDNdPVtBW1wiQVIuSS5CT01CRVJcIl1dLElbMTEwMTA0XT1bQVtcIkFSLkkuRklHSFRFUlwiXV0sSVsxMTAxMDVdPVtBW1wiQVIuSS5GSUdIVEVSL0JPTUJFUlwiXV0sSVsxMTAxMDZdPVtdLElbMTEwMTA3XT1bQVtcIkFSLkkuQ0FSR09cIl1dLElbMTEwMTA4XT1bQVtcIkFSLkkuSkFNTUVSIC8gRUxFQ1RST05JQyBDT1VOVEVSLU1FQVNVUkVTXCJdXSxJWzExMDEwOV09W0FbXCJBUi5JLlRBTktFUlwiXV0sSVsxMTAxMTBdPVtBW1wiQVIuSS5QQVRST0xcIl1dLElbMTEwMTExXT1bQVtcIkFSLkkuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTEwMTEyXT1bQVtcIkFSLkkuVFJBSU5FUlwiXV0sSVsxMTAxMTNdPVtBW1wiQVIuSS5VVElMSVRZXCJdXSxJWzExMDExNF09W0FbXCJBUi5JLlZTVE9MXCJdXSxJWzExMDExNV09W0FbXCJBUi5JLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXV0sSVsxMTAxMTZdPVtBW1wiQVIuSS5BSVJCT1JORSBFQVJMWSBXQVJOSU5HXCJdXSxJWzExMDExN109W0FbXCJBUi5JLkFOVElTVVJGQUNFIFdBUkZBUkVcIl1dLElbMTEwMTE4XT1bQVtcIkFSLkkuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSxJWzExMDExOV09W0FbXCJBUi5JLkNPTU1VTklDQVRJT05TXCJdXSxJWzExMDEyMF09W0FbXCJBUi5JLkNPTUJBVCBTRUFSQ0ggQU5EIFJFU0NVRVwiXV0sSVsxMTAxMjFdPVtBW1wiQVIuSS5FTEVDVFJPTklDIFNVUFBPUlRcIl1dLElbMTEwMTIyXT1bQVtcIkFSLkkuR09WRVJOTUVOVFwiXV0sSVsxMTAxMjNdPVtBW1wiQVIuSS5NSU5FIENPVU5URVJNRUFTVVJFU1wiXV0sSVsxMTAxMjRdPVtBW1wiQVIuSS5QRVJTT05ORUwgUkVDT1ZFUlkgRFN5bWJvbFwiXV0sSVsxMTAxMjVdPVtBW1wiQVIuSS5TRUFSQ0ggQU5EIFJFU0NVRVwiXV0sSVsxMTAxMjZdPVtBW1wiQVIuSS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSxJWzExMDEyN109W0FbXCJBUi5JLlVMVFJBIExJR0hUXCJdXSxJWzExMDEyOF09W0FbXCJBUi5JLlBIT1RPR1JBUEhJQyBSRUNPTk5BSVNTQU5DRVwiXV0sSVsxMTAxMjldPVtBW1wiQVIuSS5WSVBcIl1dLElbMTEwMTMwXT1bQVtcIkFSLkkuU1VQUkVTU0lPTiBPRiBFTkVNWSBBSVIgREVGRU5DRVwiXV0sSVsxMTAxMzFdPVtBW1wiQVIuSS5QQVNTRU5HRVJcIl1dLElbMTEwMTMyXT1bQVtcIkFSLkkuRVNDT1JUXCJdXSxJWzExMDEzM109W0FbXCJBUi5JLkVMRUNUUk9OSUMgQVRUQUNLIChFQSlcIl1dLElbMTEwMjAwXT1bQVtcIkFSLkkuTUlMSVRBUlkgUk9UQVJZIFdJTkdcIl1dLElbMTEwMzAwXT1bQVtcIkFSLkkuVU5NQU5ORUQgQUVSSUFMIFZFSElDTEVcIl1dLElbMTEwNDAwXT1bQVtcIkFSLkkuVkVSVElDQUwtVEFLRU9GRiBVQVYgKFZULVVBVilcIl1dLElbMTEwNTAwXT1bQVtcIkFSLkkuTUlMSVRBUlkgQkFMTE9PTlwiXV0sSVsxMTA2MDBdPVtBW1wiQVIuSS5NSUxJVEFSWSBBSVJTSElQXCJdXSxJWzExMDcwMF09W0FbXCJBUi5JLlRFVEhFUkVEIExJR0hURVIgVEhBTiBBSVJcIl1dLElbMTJlNF09W0FbXCJBUi5JLkNJVklMSUFOXCJdXSxJWzEyMDEwMF09W0FbXCJBUi5JLkNJVklMSUFOIEZJWEVELVdJTkcgRFN5bWJvbFwiXV0sSVsxMjAyMDBdPVtBW1wiQVIuSS5DSVZJTElBTiBST1RBUlkgV0lOR1wiXV0sSVsxMjAzMDBdPVtBW1wiQVIuSS5DSVZJTElBTiBVTk1BTk5FRCBBRVJJQUwgVkVISUNMRVwiXV0sSVsxMjA0MDBdPVtBW1wiQVIuSS5DSVZJTElBTiBCQUxMT09OXCJdXSxJWzEyMDUwMF09W0FbXCJBUi5JLkNJVklMSUFOIEFJUlNISVBcIl1dLElbMTIwNjAwXT1bQVtcIkFSLkkuQ0lWSUxJQU4gVEVUSEVSRUQgTElHSFRFUiBUSEFOIEFJUlwiXV0sSVsxM2U0XT1bQVtcIkFSLkkuV0VBUE9OXCJdXSxJWzEzMDEwMF09W0FbXCJBUi5JLkJPTUJcIl1dLElbMTMwMjAwXT1bQVtcIkFSLkkuVU5ERVJXQVRFUiBERUNPWSBEU3ltYm9sXCJdXSxJWzE0ZTRdPVtBW1wiQVIuSS5NQU5VQUwgVFJBQ0tcIl1dLHRbXCIwMVwiXT1bQVtcIkFJUi5NMS5BVFRBQ0tcIl1dLHRbXCIwMlwiXT1bQVtcIkFJUi5NMS5CT01CRVJcIl1dLHRbXCIwM1wiXT1bQVtcIkFJUi5NMS5DQVJHT1wiXV0sdFtcIjA0XCJdPVtBW1wiQUlSLk0xLkZJR0hURVJcIl1dLHRbXCIwNVwiXT1bQVtcIkFJUi5NMS5JTlRFUkNFUFRPUlwiXV0sdFtcIjA2XCJdPVtBW1wiQUlSLk0xLlRBTktFUlwiXV0sdFtcIjA3XCJdPVtBW1wiQUlSLk0xLlVUSUxJVFlcIl1dLHRbXCIwOFwiXT1bQVtcIkFJUi5NMS5WU1RPTFwiXV0sdFtcIjA5XCJdPVtBW1wiQUlSLk0xLlBBU1NFTkdFUlwiXV0sdFsxMF09W0FbXCJBSVIuTTEuVUxUUkEgTElHSFRcIl1dLHRbMTFdPVtBW1wiQUlSLk0xLkFJUkJPUk5FIENPTU1BTkQgUE9TVFwiXV0sdFsxMl09W0FbXCJBSVIuTTEuQUlSQk9STkUgRUFSTFkgV0FSTklOR1wiXV0sdFsxM109W0FbXCJBSVIuTTEuR09WRVJOTUVOVFwiXV0sdFsxNF09W0FbXCJBSVIuTTEuTUVERVZBQ1wiXV0sdFsxNV09W0FbXCJBSVIuTTEuRVNDT1JUXCJdXSx0WzE2XT1bQVtcIkFJUi5NMS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl1dLHRbMTddPVtBW1wiQUlSLk0xLlBBVFJPTFwiXV0sdFsxOF09W0FbXCJBSVIuTTEuUkVDT05OQUlTU0FOQ0VcIl1dLHRbMTldPVtBW1wiQUlSLk0xLlRSQUlORVJcIl1dLHRbMjBdPVtBW1wiQUlSLk0xLlBIT1RPR1JBUEhJQ1wiXV0sdFsyMV09W0FbXCJBSVIuTTEuUEVSU09OTkVMIFJFQ09WRVJZXCJdXSx0WzIyXT1bQVtcIkFJUi5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLHRbMjNdPVtBW1wiQUlSLk0xLkNPTU1VTklDQVRJT05TXCJdXSx0WzI0XT1bQVtcIkFJUi5NMS5FTEVDVFJPTklDIFNVUFBPUlQgKEVTKVwiXV0sdFsyNV09W0FbXCJBSVIuTTEuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl1dLHRbMjZdPVtBW1wiQUlSLk0xLlNFQVJDSCBBTkQgUkVTQ1VFXCJdXSx0WzI3XT1bQVtcIkFJUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdXSx0WzI4XT1bQVtcIkFJUi5NMS5TVVJGQUNFIFdBUkZBUkVcIl1dLHRbMjldPVtBW1wiQUlSLk0xLlZJUFwiXV0sdFszMF09W0FbXCJBSVIuTTEuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdXSx0WzMxXT1bQVtcIkFJUi5NMS5TVVBSRVNTSU9OIE9GIEVORU1ZIEFJUiBERUZFTkNFXCJdXSx0WzMyXT1bQVtcIkFJUi5NMS5BTlRJU1VSRkFDRSBXQVJGQVJFXCJdXSx0WzMzXT1bQVtcIkFJUi5NMS5GSUdIVEVSL0JPTUJFUlwiXV0sdFszNF09W0FbXCJBSVIuTTEuSU5URU5TSVZFIENBUkVcIl1dLHRbMzVdPVtBW1wiQUlSLk0xLkVMRUNUUk9OSUMgQVRUQUNLIChFQSlcIl1dLHRbMzZdPVtBW1wiQUlSLk0xLk1VTFRJTUlTU0lPTlwiXV0sdFszN109W0FbXCJBSVIuTTEuSElKQUNLSU5HXCJdXSx0WzM4XT1bQVtcIkFJUi5NMS5BU1cgSEVMTy1MQU1QU1wiXV0sdFszOV09W0FbXCJBSVIuTTEuQVNXIEhFTE8gLSBTSC02MFJcIl1dLHRbNDBdPVtBW1wiQUlSLk0xLkhJSkFDS0VSXCJdXSx0WzQxXT1bQVtcIkFJUi5NMS5DWUJFUlNQQUNFXCJdXSxFW1wiMDFcIl09W0FbXCJBSVIuTTIuSEVBVllcIl1dLEVbXCIwMlwiXT1bQVtcIkFJUi5NMi5NRURJVU1cIl1dLEVbXCIwM1wiXT1bQVtcIkFJUi5NMi5MSUdIVFwiXV0sRVtcIjA0XCJdPVtBW1wiQUlSLk0yLkJPT00tT05MWVwiXV0sRVtcIjA1XCJdPVtBW1wiQUlSLk0yLkRST1VHRS1PTkxZXCJdXSxFW1wiMDZcIl09W0FbXCJBSVIuTTIuQk9PTSBBTkQgRFJPVUdFXCJdXSxFW1wiMDdcIl09W0FbXCJBSVIuTTIuQ0xPU0UgUkFOR0VcIl1dLEVbXCIwOFwiXT1bQVtcIkFJUi5NMi5TSE9SVCBSQU5HRVwiXV0sRVtcIjA5XCJdPVtBW1wiQUlSLk0yLk1FRElVTSBSQU5HRVwiXV0sRVsxMF09W0FbXCJBSVIuTTIuTE9ORyBSQU5HRVwiXV0sRVsxMV09W0FbXCJBSVIuTTIuRE9XTkxJTktFRFwiXV0sRVsxMl09W0FbXCJBSVIuTTIuQ1lCRVJTUEFDRVwiXV0pfX0sZz17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6UCxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjAyXCI9PWUmJihJWzExZTRdPVtBW1wiQUlSLk1JU1NJTEUuSUNPTlwiXV0sdFtcIjAxXCJdPVtBW1wiQUlSLk1JU1NJTEUuTTEuQUlSXCJdXSx0W1wiMDJcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5TVVJGQUNFXCJdXSx0W1wiMDNcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5TVUJTVVJGQUNFXCJdXSx0W1wiMDRcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5TUEFDRVwiXV0sdFtcIjA1XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTEuQU5USS1CQUxMSVNUSUNcIl1dLHRbXCIwNlwiXT1bQVtcIkFJUi5NSVNTSUxFLk0xLkJBTExJU1RJQ1wiXV0sdFtcIjA3XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTEuQ1JVSVNFXCJdXSx0W1wiMDhcIl09W0FbXCJBSVIuTUlTU0lMRS5NMS5JTlRFUkNFUFRPUlwiXV0sRVtcIjAxXCJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuQUlSXCJdXSxFW1wiMDJcIl09W0FbXCJBSVIuTUlTU0lMRS5NMi5TVVJGQUNFXCJdXSxFW1wiMDNcIl09W0FbXCJBSVIuTUlTU0lMRS5NMi5TVUJTVVJGQUNFXCJdXSxFW1wiMDRcIl09W0FbXCJBSVIuTUlTU0lMRS5NMi5TUEFDRVwiXV0sRVtcIjA1XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuTEFVTkNIRURcIl1dLEVbXCIwNlwiXT1bQVtcIkFJUi5NSVNTSUxFLk0yLk1JU1NJTEVcIl1dLEVbXCIwN1wiXT1bQVtcIkFJUi5NSVNTSUxFLk0yLlBBVFJJT1RcIl1dLEVbXCIwOFwiXT1bQVtcIkFJUi5NSVNTSUxFLk0yLlNUQU5EQVJEIE1JU1NJTEUgLSAyIChTTS0yKVwiXV0sRVtcIjA5XCJdPVtBW1wiQUlSLk1JU1NJTEUuTTIuU1RBTkRBUkQgTUlTU0lMRSAtIDYgKFNNLTYpXCJdXSxFWzEwXT1bQVtcIkFJUi5NSVNTSUxFLk0yLkVWT0xWRUQgU0VBIFNQQVJST1cgTUlTU0lMRSAoRVNTTSlcIl1dLEVbMTFdPVtBW1wiQUlSLk1JU1NJTEUuTTIuUk9MTElORyBBSVJGUkFNRSBNSVNTSUxFIChSQU0pXCJdXSxFWzEyXT1bQVtcIkFJUi5NSVNTSUxFLk0yLlNIT1JUIFJBTkdFXCJdXSxFWzEzXT1bQVtcIkFJUi5NSVNTSUxFLk0yLk1FRElVTSBSQU5HRVwiXV0sRVsxNF09W0FbXCJBSVIuTUlTU0lMRS5NMi5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLEVbMTVdPVtBW1wiQUlSLk1JU1NJTEUuTTIuTE9ORyBSQU5HRVwiXV0sRVsxNl09W0FbXCJBSVIuTUlTU0lMRS5NMi5JTlRFUkNPTlRJTkVOVEFMXCJdXSl9fSxiPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czppLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMDVcIj09ZSYmKElbMTFlNF09W0FbXCJTUC5JLk1JTElUQVJZXCJdXSxJWzExMDEwMF09W0FbXCJTUC5JLlNQQUNFIFZFSElDTEVcIl1dLElbMTEwMjAwXT1bQVtcIlNQLkkuUkUtRU5UUlkgVkVISUNMRVwiXV0sSVsxMTAzMDBdPVtBW1wiU1BBQ0UuUExBTkVUIExBTkRFUlwiXV0sSVsxMTA0MDBdPVtBW1wiU1AuSS5PUkJJVEVSIFNIVVRUTEVcIl1dLElbMTEwNTAwXT1bQVtcIlNQLkkuQ0FQU1VMRVwiXV0sSVsxMTA2MDBdPVtBW1wiU1AuSS5TQVRFTExJVEUsIEdFTkVSQUxcIl1dLElbMTEwNzAwXT1bQVtcIlNQLkkuU0FURUxMSVRFXCJdXSxJWzExMDgwMF09W0FbXCJTUC5JLkFOVElTQVRFTExJVEUgV0VBUE9OXCJdXSxJWzExMDkwMF09W0FbXCJTUC5JLkFTVFJPTk9NSUNBTCBTQVRFTExJVEVcIl1dLElbMTExZTNdPVtBW1wiU1AuSS5CSU9TQVRFTExJVEVcIl1dLElbMTExMTAwXT1bQVtcIlNQLkkuQ09NTVVOSUNBVElPTlMgU0FURUxMSVRFXCJdXSxJWzExMTIwMF09W0FbXCJTUC5JLkVBUlRIIE9CU0VSVkFUSU9OIFNBVEVMTElURVwiXV0sSVsxMTEzMDBdPVtBW1wiU1AuSS5NSU5JQVRVUklaRUQgU0FURUxMSVRFXCJdXSxJWzExMTQwMF09W0FbXCJTUC5JLk5BVklHQVRJT05BTCBTQVRFTExJVEVcIl1dLElbMTExNTAwXT1bQVtcIlNQLkkuUkVDT05OQUlTU0FOQ0UgU0FURUxMSVRFXCJdXSxJWzExMTYwMF09W0FbXCJTUC5JLlNQQUNFIFNUQVRJT05cIl1dLElbMTExNzAwXT1bQVtcIlNQLkkuVEVUSEVSRUQgU0FURUxMSVRFXCJdXSxJWzExMTgwMF09W0FbXCJTUC5JLldFQVRIRVIgU0FURUxMSVRFXCJdXSxJWzExMTkwMF09W0FbXCJTUC5JLlNQQUNFIExBVU5DSCBWRUhJQ0xFXCJdXSxJWzEyZTRdPVtBW1wiU1AuSS5DSVZJTElBTlwiXV0sSVsxMjAxMDBdPVtBW1wiU1AuSS5DSVZJTElBTiBPUkJJVEVSIFNIVVRUTEVcIl1dLElbMTIwMjAwXT1bQVtcIlNQLkkuQ0lWSUxJQU4gQ0FQU1VMRVwiXV0sSVsxMjAzMDBdPVtBW1wiU1AuSS5DSVZJTElBTiBTQVRFTExJVEVcIl1dLElbMTIwNDAwXT1bQVtcIlNQLkkuQ0lWSUxJQU4gQVNUUk9OT01JQ0FMIFNBVEVMTElURVwiXV0sSVsxMjA1MDBdPVtBW1wiU1AuSS5DSVZJTElBTiBCSU9TQVRFTExJVEVcIl1dLElbMTIwNjAwXT1bQVtcIlNQLkkuQ0lWSUxJQU4gQ09NTVVOSUNBVElPTlMgU0FURUxMSVRFXCJdXSxJWzEyMDcwMF09W0FbXCJTUC5JLkNJVklMSUFOIEVBUlRIIE9CU0VSVkFUSU9OIFNBVEVMTElURVwiXV0sSVsxMjA4MDBdPVtBW1wiU1AuSS5DSVZJTElBTiBNSU5JQVRVUklaRUQgU0FURUxMSVRFXCJdXSxJWzEyMDkwMF09W0FbXCJTUC5JLkNJVklMSUFOIE5BVklHQVRJT05BTCBTQVRFTExJVEVcIl1dLElbMTIxZTNdPVtBW1wiU1AuSS5DSVZJTElBTiBTUEFDRSBTVEFUSU9OXCJdXSxJWzEyMTEwMF09W0FbXCJTUC5JLkNJVklMSUFOIFRFVEhFUkVEIFNBVEVMTElURVwiXV0sSVsxMjEyMDBdPVtBW1wiU1AuSS5DSVZJTElBTiBXRUFUSEVSIFNBVEVMTElURVwiXV0sSVsxM2U0XT1bQVtcIlNQLkkuTUFOVUFMIFRSQUNLXCJdXSx0W1wiMDFcIl09W0FbXCJTUC5NMS5MT1cgRUFSVEggT1JCSVQgKExFTylcIl1dLHRbXCIwMlwiXT1bQVtcIlNQLk0xLk1FRElVTSBFQVJUSCBPUkJJVCAoTUVPKVwiXV0sdFtcIjAzXCJdPVtBW1wiU1AuTTEuSElHSCBFQVJUSCBPUkJJVCAoSEVPKVwiXV0sdFtcIjA0XCJdPVtBW1wiU1AuTTEuR0VPU1lOQ0hST05PVVMgT1JCSVQgKEdTTylcIl1dLHRbXCIwNVwiXT1bQVtcIlNQLk0xLkdFT1NUQVRJT05BUlkgT1JCSVQgKEdPKVwiXV0sdFtcIjA2XCJdPVtBW1wiU1AuTTEuTU9MTklZQSBPUkJJVCAoTU8pXCJdXSx0W1wiMDdcIl09W0FbXCJTUC5NMS5DWUJFUlNQQUNFXCJdXSxFW1wiMDFcIl09W0FbXCJTUC5NMi5PUFRJQ0FMXCJdXSxFW1wiMDJcIl09W0FbXCJTUC5NMi5JTkZSQVJFRFwiXV0sRVtcIjAzXCJdPVtBW1wiU1AuTTIuUkFEQVJcIl1dLEVbXCIwNFwiXT1bQVtcIlNQLk0yLlNJR05BTFMgSU5URUxMSUdFTkNFIChTSUdJTlQpXCJdXSxFW1wiMDVcIl09W0FbXCJTUC5NMi5DWUJFUlNQQUNFXCJdXSl9fSxLPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czppLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiMDZcIj09ZSYmKElbMTFlNF09W0FbXCJTUEFDRS5NSVNTSUxFLklDT05cIl1dLHRbXCIwMVwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTEuQkFMTElTVElDXCJdXSx0W1wiMDJcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0xLlNQQUNFXCJdXSx0W1wiMDNcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0xLklOVEVSQ0VQVE9SXCJdXSxFW1wiMDFcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLlNIT1JUIFJBTkdFXCJdXSxFW1wiMDJcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLk1FRElVTSBSQU5HRVwiXV0sRVtcIjAzXCJdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLEVbXCIwNFwiXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuTE9ORyBSQU5HRVwiXV0sRVtcIjA1XCJdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5JTlRFUkNPTlRJTkVOVEFMXCJdXSxFW1wiMDZcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLkFSUk9XXCJdXSxFW1wiMDdcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLkdST1VORC1CQVNFRCBJTlRFUkNFUFRPUiAoR0JJKVwiXV0sRVtcIjA4XCJdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5QQVRSSU9UXCJdXSxFW1wiMDlcIl09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLlNUQU5EQVJEIE1JU1NJTEUgLSBURVJNSU5BTCBQSEFTRSAoU00tVClcIl1dLEVbMTBdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5TVEFOREFSRCBNSVNTSUxFIC0gMyAoU00tMylcIl1dLEVbMTFdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5URVJNSU5BTCBISUdILUFMVElUVURFIEFSRUEgREVGRU5TRSAoVEhBQUQpXCJdXSxFWzEyXT1bQVtcIlNQQUNFLk1JU1NJTEUuTTIuU1BBQ0VcIl1dLEVbMTNdPVtBW1wiU1BBQ0UuTUlTU0lMRS5NMi5DTE9TRSBSQU5HRVwiXV0sRVsxNF09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLkRFQlJJU1wiXV0sRVsxNV09W0FbXCJTUEFDRS5NSVNTSUxFLk0yLlVOS05PV05cIl1dKX19LFg9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOmMsaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCIxMFwiPT1lJiYoSVsxMWU0XT1bQVtcIkdSLklDLkNPTU1BTkQgQU5EIENPTlRST0xcIl1dLElbMTEwMTAwXT1bQVtcIkdSLklDLkZGLkJST0FEQ0FTVCBUUkFOU01JVFRFUiBBTlRFTk5BXCJdXSxJWzExMDIwMF09W0FbXCJHUi5JQy5DSVZJTCBBRkZBSVJTXCJdXSxJWzExMDMwMF09W0FbXCJHUi5JQy5DSVZJTC1NSUxJVEFSWS1DT09QRVJBVElPTlwiXV0sSVsxMTA0MDBdPVtBW1wiR1IuSUMuSU5GT1JNQVRJT04gT1BFUkFUSU9OU1wiXV0sSVsxMTA1MDBdPVtBW1wiR1IuSUMuTElBSVNPTlwiXV0sSVsxMTA1MDFdPVtBW1wiR1IuSUMuTElBSVNPTlwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTEwNjAwXT1bQVtcIkdSLklDLk1JTElUQVJZIElORk9STUFUSU9OIFNVUFBPUlQgT1BFUkFUSU9OUyAoTUlTTylcIl1dLElbMTEwNjAxXT1bQVtcIkdSLklDLk1JTElUQVJZIElORk9STUFUSU9OIFNVUFBPUlQgT1BFUkFUSU9OUyAoTUlTTylcIl0sQVtcIkdSLklDLkZGLkJST0FEQ0FTVCBUUkFOU01JVFRFUiBBTlRFTk5BXCJdXSxJWzExMDcwMF09W0FbXCJHUi5JQy5SQURJT1wiXV0sSVsxMTA4MDBdPVtBW1wiR1IuSUMuUkFESU8gUkVMQVlcIl1dLElbMTEwOTAwXT1bQVtcIkdSLklDLlJBRElPIFRFTEVUWVBFIENFTlRSRVwiXV0sSVsxMTFlM109W0FbXCJHUi5JQy5GRi5TSUdOQUxcIl1dLElbMTExMDAxXT1bQVtcIkdSLklDLkZGLlNJR05BTFwiXSxBW1wiR1IuSUMuUkFESU9cIl1dLElbMTExMDAyXT1bQVtcIkdSLklDLkZGLlNJR05BTFwiXSxBW1wiR1IuSUMuUkFESU8gUkVMQVlcIl1dLElbMTExMDAzXT1bQVtcIkdSLklDLkZGLlNJR05BTFwiXSxBW1wiR1IuSUMuUkFESU8gVEVMRVRZUEUgQ0VOVFJFXCJdXSxJWzExMTAwNF09W0FbXCJHUi5JQy5GRi5TSUdOQUxcIl0sQVtcIkdSLkkuRkYuU0FURUxMSVRFXCJdXSxJWzExMTAwNV09W0FbXCJHUi5JQy5GRi5TSUdOQUxcIl0sQVtcIkdSLklDLlZJREVPIElNQUdFUllcIl1dLElbMTExMTAwXT1bQVtcIkdSLkkuRkYuU0FURUxMSVRFXCJdXSxJWzExMTIwMF09W0FbXCJHUi5JQy5WSURFTyBJTUFHRVJZXCJdXSxJWzExMTMwMF09W0FbXCJHUi5JQy5TUEFDRVwiXV0sSVsxMTE0MDBdPVtBW1wiR1IuSUMuU1BFQ0lBTCBUUk9PUFNcIl1dLElbMTJlNF09W10sSVsxMjAxMDBdPVtBW1wiR1IuSUMuRkYuQUlSIEFTU0FVTFQgV0lUSCBPUkdBTklDIExJRlRcIl1dLElbMTIwMjAwXT1bQVtcIkdSLklDLkFJUiBUUkFGRklDIFNFUlZJQ0VTXCJdXSxJWzEyMDMwMF09W0FbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdXSxJWzEyMDQwMF09W0FbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdXSxJWzEyMDQwMV09W0FbXCJHUi5JQy5GRi5BTlRJVEFOSy9BTlRJQVJNT1VSXCJdLEFbXCJHUi5JQy5BUk1PVVJcIl1dLElbMTIwNDAyXT1bQVtcIkdSLklDLkZGLkFOVElUQU5LL0FOVElBUk1PVVJcIl0sQVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVsxMjA1MDBdPVtBW1wiR1IuSUMuQVJNT1VSXCJdXSxJWzEyMDUwMV09W0FbXCJHUi5JQy5BUk1PVVJcIl0sQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJWzEyMDUwMl09W0FbXCJHUi5JQy5BUk1PVVJcIl0sQVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbMTIwNjAwXT1bQVtcIkdSLklDLkFWSUFUSU9OIFJPVEFSWSBXSU5HXCJdXSxJWzEyMDYwMV09W0FbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTIwNzAwXT1bQVtcIkdSLklDLkFWSUFUSU9OIENPTVBPU0lURVwiXV0sSVsxMjA4MDBdPVtBW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXV0sSVsxMjA4MDFdPVtBW1wiR1IuSUMuQVZJQVRJT04gRklYRUQgV0lOR1wiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTIwOTAwXT1bQVtcIkdSLklDLkNPTUJBVFwiXV0sSVsxMjFlM109W0FbXCJHUi5JQy5DT01CSU5FRCBBUk1TXCJdXSxJWzEyMTEwMF09W0FbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXV0sSVsxMjExMDFdPVtBW1wiR1IuSUMuRkYuSU5GQU5UUllcIl0sQVtcIkdSLklDLkZGLkFNUEhJQklPVVNcIl1dLElbMTIxMTAyXT1bQVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEFbXCJHUi5JQy5BUk1PVVJcIl1dLElbMTIxMTAzXT1bQVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEFbXCJHUi5JQy5GRi5NQUlOIEdVTiBTWVNURU1cIl1dLElbMTIxMTA0XT1bQVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEFbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbMTIxMTA1XT1bQVtcIkdSLklDLkZGLklORkFOVFJZXCJdLEFbXCJHUi5JQy5BUk1PVVJcIl0sQVtcIkdSLklDLkZGLk1BSU4gR1VOIFNZU1RFTVwiXV0sSVsxMjExMDZdPVtBW1wiR1IuSUMuRkYuTUFJTiBHVU4gU1lTVEVNXCJdXSxJWzEyMTIwMF09W0FbXCJHUi5JQy5PQlNFUlZFUi9PQlNFUlZBVElPTlwiXV0sSVsxMjEzMDBdPVtBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl1dLElbMTIxMzAxXT1bQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEFbXCJHUi5JQy5TVVJWRUlMTEFOQ0VcIl1dLElbMTIxMzAyXT1bQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEFbXCJHUi5JQy5GRi5BTVBISUJJT1VTXCJdXSxJWzEyMTMwM109W0FbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXSxBW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJWzEyMTQwMF09W0FbXCJHUi5JQy5TRUEtQUlSLUxBTkRcIl1dLElbMTIxNTAwXT1bQVtcIkdSLklDLlNOSVBFUlwiXV0sSVsxMjE2MDBdPVtBW1wiR1IuSUMuU1VSVkVJTExBTkNFXCJdXSxJWzEyMTcwMF09W0FbXCJHUi5JQy5TUEVDSUFMIEZPUkNFU1wiXV0sSVsxMjE4MDBdPVtBW1wiR1IuSUMuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVsxMjE4MDFdPVtBW1wiR1IuSUMuRklYRUQgV0lORyBNSVNPXCJdXSxJWzEyMTgwMl09W0FbXCJHUi5JQy5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTXCJdLEFbXCJHUi5JQy5GRi5JTkZBTlRSWVwiXV0sSVsxMjE4MDNdPVtBW1wiR1IuSUMuQ09NQkFUQU5UXCJdLEFbXCJHUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTIChTT0YpXCJdXSxJWzEyMTgwNF09W0FbXCJHUi5JQy5TVUJNQVJJTkUgTlVDTEVBUiBQUk9QVUxTSU9OXCJdLEFbXCJHUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTIChTT0YpXCJdXSxJWzEyMTgwNV09W0FbXCJTT0YuSUMuVU5ERVJXQVRFUiBERU1PTElUSU9OIFRFQU1cIl1dLElbMTIxOTAwXT1bQVtcIkdSLklDLlVOTUFOTkVEIFNZU1RFTVNcIl1dLElbMTIyZTNdPVtBW1wiR1IuSUMuUkFOR0VSXCJdXSxJWzEzZTRdPVtdLElbMTMwMTAwXT1bQVtcIkdSLklDLkZGLkFJUiBERUZFTkNFXCJdXSxJWzEzMDEwMV09W0FbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxBW1wiR1IuSUMuRkYuTUFJTiBHVU4gU1lTVEVNXCJdXSxJWzEzMDEwMl09W0FbXCJHUi5JQy5GRi5BSVIgREVGRU5DRVwiXSxBW1wiR1IuSUMuQUlSIERFRkVOU0UgTUlTU0lMRVwiXV0sSVsxMzAxMDNdPVtBW1wiR1IuSUMuRkYuQUlSIERFRkVOQ0VcIl0sQVtcIkdSLklDLkFJUiBBTkQgTUlTU0lMRSBERUZFTlNFXCJdXSxJWzEzMDIwMF09W0FbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0sQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdLEFbXCJHUi5JQy5BVklBVElPTiBST1RBUlkgV0lOR1wiXSxBW1wiR1IuTTEuTkFWQUxcIl1dLElbMTMwMzAwXT1bQVtcIkdSLklDLkZJRUxEIEFSVElMTEVSWVwiXV0sSVsxMzAzMDFdPVtzLl9zY2FsZSguOCxBW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZXCJdKSxBW1wiR1IuSUMuQVJNT1VSXCJdXSxJWzEzMDMwMl09W3MuX3NjYWxlKC44LEFbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pLEFbXCJHUi5JQy5BUk1PVVJcIl0sQVtcIkdSLklDLkZGLlJFQ09OTkFJU1NBTkNFXCJdXSxJWzEzMDMwM109W3MuX3NjYWxlKC44LEFbXCJHUi5JQy5GSUVMRCBBUlRJTExFUllcIl0pLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxMzA0MDBdPVtBW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZIE9CU0VSVkVSXCJdXSxJWzEzMDUwMF09W0FbXCJHUi5JQy5KT0lOVCBGSVJFIFNVUFBPUlRcIl1dLElbMTMwNjAwXT1bQVtcIkdSLklDLk1FVEVPUk9MT0dJQ0FMXCJdXSxJWzEzMDcwMF09W0FbXCJHUi5JQy5NSVNTSUxFXCJdXSxJWzEzMDgwMF09W0FbXCJHUi5JQy5NT1JUQVJcIl1dLElbMTMwODAxXT1bQVtcIkdSLklDLk1PUlRBUlwiXSxBW1wiR1IuTTIuVFJBQ0tFRFwiXV0sSVsxMzA4MDJdPVtBW1wiR1IuSUMuTU9SVEFSXCJdLEFbXCJHUi5NMi5UUlVDS1wiXV0sSVsxMzA4MDNdPVtBW1wiR1IuSUMuTU9SVEFSXCJdLEFbXCJHUi5NMi5UT1dFRFwiXV0sSVsxMzA5MDBdPVtBW1wiR1IuSUMuU1VSVkVZXCJdXSxJWzE0ZTRdPVtdLElbMTQwMTAwXT1bQVtcIkdSLklDLkNCUk5cIl1dLElbMTQwMTAxXT1bQVtcIkdSLklDLkNCUk5cIl0sQVtcIkdSLklDLkFSTU9VUlwiXV0sSVsxNDAxMDJdPVtBW1wiR1IuSUMuQ0JSTlwiXSxBW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJWzE0MDEwM109W0FbXCJHUi5JQy5DQlJOXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxNDAxMDRdPVtBW1wiR1IuSUMuQ0JSTlwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sQVtcIkdSLklDLkFSTU9VUlwiXV0sSVsxNDAxMDVdPVtBW1wiR1IuSUMuQ0JSTlwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0VcIl0sQVtcIkdSLklDLkZGLk1PVE9SSVpFRFwiXV0sSVsxNDAxMDZdPVtBW1wiR1IuSUMuQ0JSTlwiXSxBW1wiR1IuQ0hFTUlDQUwsIEJJT0xPR0lDQUwsIFJBRElPTE9HSUNBTCwgTlVDTEVBUiwgQU5EIEhJR0gtWUlFTEQgRVhQTE9TSVZFU1wiXV0sSVsxNDAyMDBdPVtBW1wiR1IuSUMuQ09NQkFUIFNVUFBPUlQgKE1BTk9FVVZSRSBFTkhBTkNFTUVOVClcIl1dLElbMTQwMzAwXT1bQVtcIkdSLklDLkNSSU1JTkFMIElOVkVTVElHQVRJT04gRElWSVNJT05cIl1dLElbMTQwNDAwXT1bQVtcIkdSLklDLkRJVkVSLCBDSVZJTElBTlwiXV0sSVsxNDA1MDBdPVtBW1wiR1IuSUMuRE9HXCJdXSxJWzE0MDYwMF09W0FbXCJHUi5JQy5EUklMTElOR1wiXV0sSVsxNDA3MDBdPVtBW1wiR1IuSUMuRU5HSU5FRVJcIl1dLElbMTQwNzAxXT1bQVtcIkdSLklDLkVOR0lORUVSIE1FQ0hBTklaRURcIl1dLElbMTQwNzAyXT1bQVtcIkdSLklDLkVOR0lORUVSXCJdLEFbXCJHUi5JQy5GRi5NT1RPUklaRURcIl1dLElbMTQwNzAzXT1bQVtcIkdSLklDLkVOR0lORUVSXCJdLEFbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRVwiXV0sSVsxNDA4MDBdPVtBW1wiR1IuSUMuRVhQTE9TSVZFIE9SRE5BTkNFIERJU1BPU0FMXCJdXSxJWzE0MDkwMF09W0FbXCJHUi5JQy5GSUVMRCBDQU1QIENPTlNUUlVDVElPTlwiXV0sSVsxNDFlM109W0FbXCJHUi5JQy5GSVJFIFBST1RFQ1RJT05cIl1dLElbMTQxMTAwXT1bQVtcIkdSLklDLkdFT1NQQVRJQUwgU1VQUE9SVFwiXV0sSVsxNDEyMDBdPVtBW1wiR1IuSUMuTUlMSVRBUlkgUE9MSUNFXCJdXSxJWzE0MTMwMF09W0FbXCJHUi5JQy5NSU5FXCJdXSxJWzE0MTQwMF09W0FbXCJHUi5JQy5NSU5FIENMRUFSSU5HXCJdXSxJWzE0MTUwMF09W0FbXCJHUi5JQy5NSU5FIExBVU5DSElOR1wiXV0sSVsxNDE2MDBdPVtBW1wiR1IuSUMuTUlORSBMQVlJTkdcIl1dLElbMTQxNzAwXT1bQVtcIkdSLklDLlNFQ1VSSVRZXCJdXSxJWzE0MTcwMV09W0FbXCJHUi5JQy5TRUNVUklUWVwiXSxBW1wiR1IuSUMuQVJNT1VSXCJdXSxJWzE0MTcwMl09W0FbXCJHUi5JQy5TRUNVUklUWVwiXSxBW1wiR1IuSUMuRkYuTU9UT1JJWkVEXCJdXSxJWzE0MTgwMF09W0FbXCJHUi5JQy5TRUFSQ0ggQU5EIFJFU0NVRVwiXV0sSVsxNDE5MDBdPVtBW1wiR1IuSUMuU0VDVVJJVFkgUE9MSUNFIChBSVIpXCJdXSxJWzE0MmUzXT1bQVtcIkdSLklDLlNIT1JFIFBBVFJPTFwiXV0sSVsxNDIxMDBdPVtBW1wiR1IuSUMuVE9QT0dSQVBISUNcIl1dLElbMTQyMjAwXT1bQVtcIkdSLklDLkFJUiBBTkQgTUlTU0lMRSBERUZFTlNFXCJdXSxJWzE1ZTRdPVtdLElbMTUwMTAwXT1bQVtcIkdSLklDLkZGLkFOQUxZU0lTXCJdXSxJWzE1MDIwMF09W0FbXCJHUi5JQy5DT1VOVEVSLUlOVEVMTElHRU5DRVwiXV0sSVsxNTAzMDBdPVtBW1wiR1IuSUMuRkYuRElSRUNUSU9OIEZJTkRJTkdcIl1dLElbMTUwNDAwXT1bQVtcIkdSLklDLkVMRUNUUk9OSUMgUkFOR0lOR1wiXV0sSVsxNTA1MDBdPVtBW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdXSxJWzE1MDUwMV09W0FbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sQVtcIkdSLklDLkZGLkFOQUxZU0lTXCJdXSxJWzE1MDUwMl09W0FbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sQVtcIkdSLklDLkZGLkRJUkVDVElPTiBGSU5ESU5HXCJdXSxJWzE1MDUwM109W0FbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sQVtcIkdSLklDLkZGLklOVEVSQ0VQVFwiXV0sSVsxNTA1MDRdPVtBW1wiR1IuSUMuRUxFQ1RST05JQyBXQVJGQVJFXCJdLEFbXCJHUi5JQy5GRi5KQU1NSU5HXCJdXSxJWzE1MDUwNV09W0FbXCJHUi5JQy5FTEVDVFJPTklDIFdBUkZBUkVcIl0sQVtcIkdSLklDLkZGLlNFQVJDSFwiXV0sSVsxNTA2MDBdPVtBW1wiR1IuSUMuRkYuSU5URVJDRVBUXCJdXSxJWzE1MDcwMF09W0FbXCJHUi5JQy5JTlRFUlJPR0FUSU9OXCJdXSxJWzE1MDgwMF09W0FbXCJHUi5JQy5GRi5KQU1NSU5HXCJdXSxJWzE1MDkwMF09W0FbXCJHUi5JQy5KT0lOVCBJTlRFTExJR0VOQ0UgQ0VOVFJFXCJdXSxJWzE1MWUzXT1bQVtcIkdSLklDLk1JTElUQVJZIElOVEVMTElHRU5DRVwiXV0sSVsxNTExMDBdPVtBW1wiR1IuSUMuRkYuU0VBUkNIXCJdXSxJWzE1MTIwMF09W0FbXCJHUi5JQy5TRU5TT1JcIl1dLElbMTUxMzAwXT1bQVtcIkdSLklDLk1JTElUQVJZIEhJU1RPUllcIl1dLElbMTZlNF09W0FbXCJHUi5JQy5TVVNUQUlOTUVOVFwiXV0sSVsxNjAxMDBdPVtBW1wiR1IuSUMuQURNSU5JU1RSQVRJVkVcIl1dLElbMTYwMjAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgQUxMXCJdXSxJWzE2MDMwMF09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxBW1wiR1IuSUMuQUlSUE9SVCBPRiBERUJBUktBVElPTlwiXV0sSVsxNjA0MDBdPVtBW1wiR1IuSUMuQU1NVU5JVElPTlwiXV0sSVsxNjA1MDBdPVtBW1wiR1IuSUMuQkFORFwiXV0sSVsxNjA1MDFdPVtBW1wiR1IuSUMuQVJNWSBNVVNJQ1wiXV0sSVsxNjA2MDBdPVtBW1wiR1IuSUMuQ09NQkFUIFNFUlZJQ0UgU1VQUE9SVFwiXV0sSVsxNjA3MDBdPVtBW1wiR1IuSUMuRklOQU5DRVwiXV0sSVsxNjA4MDBdPVtBW1wiR1IuSUMuSlVER0UgQURWT0NBVEUgR0VORVJBTFwiXV0sSVsxNjA5MDBdPVtBW1wiR1IuSUMuTEFCT1VSXCJdXSxJWzE2MWUzXT1bQVtcIkdSLklDLkxBVU5EUlkvQkFUSFwiXV0sSVsxNjExMDBdPVtBW1wiR1IuSUMuTUFJTlRFTkFOQ0VcIl1dLElbMTYxMjAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuTUFURVJJRUxcIl1dLElbMTYxMzAwXT1bQVtcIkdSLklDLkZGLk1FRElDQUxcIl1dLElbMTYxNDAwXT1bQVtcIkdSLklDLkZGLk1FRElDQUwgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJWzE2MTUwMF09W0FbXCJHUi5JQy5NT1JBTEUsIFdFTEZBUkUsIEFORCBSRUNSRUFUSU9OXCJdXSxJWzE2MTYwMF09W0FbXCJHUi5JQy5NT1JUVUFSWSBBRkZBSVJTXCJdXSxJWzE2MTcwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIE1VTFRJUExFXCJdXSxJWzE2MTgwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLk5BVE8gU1VQUExZIENMQVNTIElcIl1dLElbMTYxOTAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuTkFUTyBTVVBQTFkgQ0xBU1MgSUlcIl1dLElbMTYyZTNdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl1dLElbMTYyMTAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuTkFUTyBTVVBQTFkgQ0xBU1MgSVZcIl1dLElbMTYyMjAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgVlwiXV0sSVsxNjIzMDBdPVtBW1wiR1IuSUMuT1JETkFOQ0VcIl1dLElbMTYyNDAwXT1bQVtcIkdSLklDLlBFUlNPTk5FTCBTRVJWSUNFU1wiXV0sSVsxNjI1MDBdPVtBW1wiR1IuSUMuUEVUUk9MRVVNIE9JTCBMVUJSSUNBTlRTXCJdXSxJWzE2MjYwMF09W0FbXCJHUi5JQy5QSVBFTElORVwiXV0sSVsxNjI3MDBdPVtBW1wiR1IuSUMuUE9TVEFMXCJdXSxJWzE2MjgwMF09W0FbXCJHUi5JQy5QVUJMSUMgQUZGQUlSU1wiXV0sSVsxNjI5MDBdPVtBW1wiR1IuSUMuUVVBUlRFUk1BU1RFUlwiXV0sSVsxNjNlM109W0FbXCJHUi5JQy5SQUlMSEVBRFwiXV0sSVsxNjMxMDBdPVtBW1wiR1IuSUMuUkVMSUdJT1VTIFNVUFBPUlRcIl1dLElbMTYzMjAwXT1bQVtcIkdSLklDLlJFUExBQ0VNRU5UIEhPTERJTkcgVU5JVFwiXV0sSVsxNjMzMDBdPVtBW1wiR1IuSUMuU0VBUE9SVCBPRiBERUJBUktBVElPTlwiXV0sSVsxNjM0MDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdXSxJWzE2MzUwMF09W0FbXCJHUi5JQy5KT0lOVCBJTkZPUk1BVElPTiBCVVJFQVVcIl1dLElbMTYzNjAwXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdXSxJWzE2MzYwMV09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxBW1wiR1IuSUMuRkxPQVRJTkcgQ1JBRlRcIl1dLElbMTYzNzAwXT1bQVtcIkdSLklDLkZGLlNVUFBMWVwiXSxBW1wiR1IuSUMuRkYuQ0xBU1MgSVwiXV0sSVsxNjM4MDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBJSVwiXV0sSVsxNjM5MDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl1dLElbMTY0ZTNdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBJVlwiXV0sSVsxNjQxMDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBWXCJdXSxJWzE2NDIwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIFZJXCJdXSxJWzE2NDMwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIFZJSVwiXV0sSVsxNjQ0MDBdPVtBW1wiR1IuSUMuRkYuU1VQUExZXCJdLEFbXCJHUi5JQy5GRi5DTEFTUyBWSUlJXCJdXSxJWzE2NDUwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIElYXCJdXSxJWzE2NDYwMF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLkNMQVNTIFhcIl1dLElbMTY0NzAwXT1bQVtcIkdSLklDLldBVEVSXCJdXSxJWzE2NDgwMF09W0FbXCJHUi5JQy5XQVRFUiBQVVJJRklDQVRJT05cIl1dLElbMTY0OTAwXT1bQVtcIkdSLklDLlBVQkxJQyBBRkZBSVJTIEJST0FEQ0FTVFwiXV0sSVsxNjVlM109W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLkZGLk5BVE8gU1VQUExZIENMQVNTIEFMTFwiXV0sSVsxNjUxMDBdPVtBW1wiR1IuSUMuSU5URVJQUkVURVIvVFJBTlNMQVRPUlwiXV0sSVsxNjUyMDBdPVtBW1wiR1IuSUMuU1VQUE9SVFwiXV0sSVsxNjUzMDBdPVtBW1wiR1IuSUMuQVJNWSBGSUVMRCBTVVBQT1JUXCJdXSxJWzE2NTQwMF09W0FbXCJHUi5JQy5DT05UUkFDVElORyBTRVJWSUNFU1wiXV0sSVsxNjU1MDBdPVtBW1wiR1IuSUMuUEFSQUNIVVRFIFJJR0dFUlwiXV0sSVsxN2U0XT1bXSxJWzE3MDEwMF09W0FbXCJHUi5JQy5OQVZBTFwiXV0sSVsxOGU0XT1bXSxJWzE4MDEwMF09W0FbXCJHUi5JQy5BTExJRUQgQ09NTUFORCBFVVJPUEUgUkFQSUQgUkVBQ1RJT04gQ09SUFMgKEFSUkMpXCJdXSxJWzE4MDIwMF09W0FbXCJHUi5JQy5BTExJRUQgQ09NTUFORCBPUEVSQVRJT05TXCJdXSxJWzE4MDMwMF09W0FbXCJHUi5JQy5JTlRFUk5BVElPTkFMIFNFQ1VSSVRZIEFTU0lTVEFOQ0UgRk9SQ0UgKElTQUYpXCJdXSxJWzE4MDQwMF09W0FbXCJHUi5JQy5NVUxUSU5BVElPTkFMIChNTilcIl1dLElbMTllNF09W0FbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdXSxJWzJlNV09W0FbXCJHUi5JQy5GRi5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMjAwMTAwXT1bQVtcIkdSLklDLkJVUkVBVSBPRiBBTENPSE9MLCBUT0JBQ0NPLCBGSVJFQVJNUyBBTkQgRVhQTE9TSVZFUyAoQVRGKSAoREVQQVJUTUVOVCBPRiBKVVNUSUNFKVwiXV0sSVsyMDAyMDBdPVtBW1wiR1IuSUMuRkYuQk9SREVSIFBBVFJPTFwiXV0sSVsyMDAzMDBdPVtBW1wiR1IuSUMuRkYuQ1VTVE9NUyBTRVJWSUNFXCJdXSxJWzIwMDQwMF09W0FbXCJHUi5JQy5EUlVHIEVORk9SQ0VNRU5UIEFHRU5DWSAoREVBKVwiXV0sSVsyMDA1MDBdPVtBW1wiR1IuSUMuRkYuREVQQVJUTUVOVCBPRiBKVVNUSUNFIChET0opXCJdXSxJWzIwMDYwMF09W0FbXCJHUi5JQy5GRURFUkFMIEJVUkVBVSBPRiBJTlZFU1RJR0FUSU9OIChGQkkpXCJdXSxJWzIwMDcwMF09W0FbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMjAwODAwXT1bQVtcIkdSLklDLkZGLlBSSVNPTlwiXV0sSVsyMDA5MDBdPVtBW1wiR1IuSUMuVU5JVEVEIFNUQVRFUyBTRUNSRVQgU0VSVklDRShUUkVBUykgKFVTU1MpXCJdXSxJWzIwMWUzXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OIFNFQ1VSSVRZIEFHRU5DWSAoVFNBKVwiXV0sSVsyMDExMDBdPVtBW1wiR1IuSUMuTEFXIEVORk9SQ0VNRU5UIFZFU1NFTFwiXV0sSVsyMDEyMDBdPVtBW1wiR1IuSUMuRkYuVVMgTUFSU0hBTFMgU0VSVklDRVwiXV0sSVsyMDEzMDBdPVtBW1wiU1QuSUMuSU5URVJOQUwgU0VDVVJJVFkgRk9SQ0VcIl1dLHRbXCIwMVwiXT1bQz9BW1wiR1IuTTEuVEFDVElDQUwgU0FURUxMSVRFIENPTU1VTklDQVRJT05TXCJdOkFbXCJHUi5NMS5BSVJNT0JJTEUvQUlSIEFTU0FVTFRcIl1dLHRbXCIwMlwiXT1bQVtcIkdSLk0xLkFSRUFcIl1dLHRbXCIwM1wiXT1bQVtcIkdSLk0xLkFUVEFDS1wiXV0sdFtcIjA0XCJdPVtBW1wiR1IuTTEuQklPTE9HSUNBTFwiXV0sdFtcIjA1XCJdPVtBW1wiR1IuTTEuQk9SREVSXCJdXSx0W1wiMDZcIl09W0FbXCJHUi5NMS5CUklER0lOR1wiXV0sdFtcIjA3XCJdPVtBW1wiR1IuTTEuQ0hFTUlDQUxcIl1dLHRbXCIwOFwiXT1bQVtcIkdSLk0xLkNMT1NFIFBST1RFQ1RJT05cIl1dLHRbXCIwOVwiXT1bQVtcIkdSLk0xLkNPTUJBVFwiXV0sdFsxMF09W0FbXCJHUi5NMS5DT01NQU5EIEFORCBDT05UUk9MXCJdXSx0WzExXT1bQVtcIkdSLk0xLkNPTU1VTklDQVRJT05TIENPTlRJTkdFTkNZIFBBQ0tBR0VcIl1dLHRbMTJdPVtBW1wiR1IuTTEuQ09OU1RSVUNUSU9OXCJdXSx0WzEzXT1bQVtcIkdSLk0xLkNST1NTIENVTFRVUkFMIENPTU1VTklDQVRJT05cIl1dLHRbMTRdPVtBW1wiR1IuTTEuQ1JPV0QgQU5EIFJJT1QgQ09OVFJPTFwiXV0sdFsxNV09W0FbXCJHUi5NMS5ERUNPTlRBTUlOQVRJT05cIl1dLHRbMTZdPVtBW1wiR1IuTTEuREVURU5USU9OXCJdXSx0WzE3XT1bQVtcIkdSLk0xLkRJUkVDVCBDT01NVU5JQ0FUSU9OU1wiXV0sdFsxOF09W0FbXCJHUi5NMS5ESVZJTkdcIl1dLHRbMTldPVtBW1wiR1IuTTEuRElWSVNJT05cIl1dLHRbMjBdPVtBW1wiR1IuTTEuRE9HXCJdXSx0WzIxXT1bQVtcIkdSLk0xLkRSSUxMSU5HXCJdXSx0WzIyXT1bQVtcIkdSLk0xLkVMRUNUUk8tT1BUSUNBTFwiXV0sdFsyM109W0FbXCJHUi5NMS5FTkhBTkNFRFwiXV0sdFsyNF09W0FbXCJHUi5NMS5FWFBMT1NJVkUgT1JETkFOQ0UgRElTUE9TQUxcIl1dLHRbMjVdPVtBW1wiR1IuTTEuRklSRSBESVJFQ1RJT04gQ0VOVFJFXCJdXSx0WzI2XT1bQVtcIkdSLk0xLkZPUkNFXCJdXSx0WzI3XT1bQVtcIkdSLk0xLkZPUldBUkRcIl1dLHRbMjhdPVtBW1wiR1IuTTEuR1JPVU5EIFNUQVRJT04gTU9EVUxFXCJdXSx0WzI5XT1bQVtcIkdSLk0xLkxBTkRJTkcgU1VQUE9SVFwiXV0sdFszMF09W0FbXCJHUi5NMS5MQVJHRSBFWFRFTlNJT04gTk9ERVwiXV0sdFszMV09W0FbXCJHUi5NMS5NQUlOVEVOQU5DRVwiXV0sdFszMl09W0FbXCJHUi5NMS5NRVRFT1JPTE9HSUNBTFwiXV0sdFszM109W0FbXCJHUi5NMS5NSU5FIENPVU5URVJNRUFTVVJFXCJdXSx0WzM0XT1bQVtcIkdSLk0xLk1JU1NJTEVcIl1dLHRbMzVdPVtBW1wiR1IuTTEuKE1PQklMRSkgQURWSVNPUiBBTkQgU1VQUE9SVFwiXV0sdFszNl09W0FbXCJHUi5NMS5NT0JJTEUgU1VCU0NSSUJFUiBFUVVJUE1FTlRcIl1dLHRbMzddPVtBW1wiR1IuTTEuTU9CSUxJVFkgU1VQUE9SVFwiXV0sdFszOF09W0FbXCJHUi5NMS5NT1ZFTUVOVCBDT05UUk9MIENFTlRSRVwiXV0sdFszOV09W0FbXCJHUi5NMS5NVUxUSU5BVElPTkFMXCJdXSx0WzQwXT1bQVtcIkdSLk0xLk1VTFRJTkFUSU9OQUwgU1BFQ0lBTElaRUQgVU5JVFwiXV0sdFs0MV09W0FbXCJHUi5NMS5NVUxUSVBMRSBST0NLRVQgTEFVTkNIRVJcIl1dLHRbNDJdPVtBW1wiR1IuTTEuTkFUTyBNRURJQ0FMIFJPTEUgMVwiXV0sdFs0M109W0FbXCJHUi5NMS5OQVRPIE1FRElDQUwgUk9MRSAyXCJdXSx0WzQ0XT1bQVtcIkdSLk0xLk5BVE8gTUVESUNBTCBST0xFIDNcIl1dLHRbNDVdPVtBW1wiR1IuTTEuTkFUTyBNRURJQ0FMIFJPTEUgNFwiXV0sdFs0Nl09W0FbXCJHUi5NMS5OQVZBTFwiXV0sdFs0N109W0M/QVtcIkdSLk0xLlVOTUFOTkVEIEFFUklBTCBWRUhJQ0xFXCJdOkFbXCJHUi5NMS5OT0RFIENFTlRSRVwiXV0sdFs0OF09W0FbXCJHUi5NMS5OVUNMRUFSXCJdXSx0WzQ5XT1bQVtcIkdSLk0xLk9QRVJBVElPTlNcIl1dLHRbNTBdPVtBW1wiR1IuTTEuUkFEQVJcIl1dLHRbNTFdPVtBW1wiR1IuTTEuUkFESU8gRlJFUVVFTkNZIElERU5USUZJQ0FUSU9OIChSRklEKSBJTlRFUlJPR0FUT1IvIFNFTlNPUlwiXV0sdFs1Ml09W0FbXCJHUi5NMS5SQURJT0xPR0lDQUxcIl1dLHRbNTNdPVtBW1wiR1IuTTEuU0VBUkNIIEFORCBSRVNDVUVcIl1dLHRbNTRdPVtBW1wiR1IuTTEuU0VDVVJJVFlcIl1dLHRbNTVdPVtBW1wiR1IuTTEuU0VOU09SXCJdXSx0WzU2XT1bQz9BW1wiR1IuTTEuV0VBUE9OXCJdOkFbXCJHUi5NMS5TRU5TT1IgQ09OVFJPTCBNT0RVTEVcIl1dLHRbNTddPVtBW1wiR1IuTTEuU0lHTkFMUyBJTlRFTExJR0VOQ0VcIl1dLHRbNThdPVtDP0FbXCJHUi5NMS5BUk1PUkVEXCJdOkFbXCJHUi5NMS5TSU5HTEUgU0hFTFRFUiBTV0lUQ0hcIl1dLHRbNTldPVtBW1wiR1IuTTEuU0lOR0xFIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sdFs2MF09W0FbXCJHUi5NMS5TTU9LRVwiXV0sdFs2MV09W0FbXCJHUi5NMS5TTklQRVJcIl1dLHRbNjJdPVtBW1wiR1IuTTEuU09VTkQgUkFOR0lOR1wiXV0sdFs2M109W0FbXCJHUi5NMS5TUEVDSUFMIE9QRVJBVElPTlMgRk9SQ0VTIChTT0YpXCJdXSx0WzY0XT1bQVtcIkdSLk0xLlNQRUNJQUwgV0VBUE9OUyBBTkQgVEFDVElDU1wiXV0sdFs2NV09W0FbXCJHUi5NMS5TVVJWRVlcIl1dLHRbNjZdPVtBW1wiR1IuTTEuVEFDVElDQUwgRVhQTE9JVEFUSU9OXCJdXSx0WzY3XT1bQVtcIkdSLk0xLlRBUkdFVCBBQ1FVSVNJVElPTlwiXV0sdFs2OF09W0FbXCJHUi5NMS5UT1BPR1JBUEhJQ1wiXV0sdFs2OV09W0FbXCJHUi5NMS5VVElMSVRZXCJdXSx0WzcwXT1bQVtcIkdSLk0xLlZJREVPIElNQUdFUllcIl1dLHRbNzFdPVtDP0FbXCJHUi5NMS5NT0JJTElUWSBBU1NBVUxUXCJdOkFbXCJHUi5NMS5BQ0NJREVOVFwiXV0sdFs3Ml09W0M/QVtcIkdSLk0xLkFNUEhJQklPVVMgV0FSRkFSRSBTSElQIFwiXTpBW1wiR1IuTTEuT1RIRVJcIl1dLHRbNzNdPVtDP0FbXCJHUi5NMS5MT0FEIEhBTkRMSU5HIFNZU1RFTVwiXTpBW1wiR1IuTTEuQ0lWSUxJQU5cIl1dLHRbNzRdPVtDP0FbXCJHUi5NMS5QQUxMRVRJWkVEIExPQUQgU1lTVEVNXCJdOkFbXCJHUi5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLHRbNzVdPVtBW1wiR1IuTTEuTUVERVZBQ1wiXV0sdFs3Nl09W0FbXCJHUi5NMS5DWUJFUlNQQUNFXCJdXSx0Wzc3XT1bQVtcIkdSLk0xLlNVUFBPUlRcIl1dLHRbNzhdPVtBW1wiR1IuTTEuQVZJQVRJT05cIl1dLHRbNzldPVtBW1wiR1IuTTEuUk9VVEUsIFJFQ09OTkFJU1NBTkNFLCBBTkQgQ0xFQVJBTkNFXCJdXSx0WzgwXT1bQVtcIkdSLk0xLlRJTFQtUk9UT1JcIl1dLHRbODFdPVtBW1wiR1IuTTEuQ09NTUFORCBQT1NUIE5PREVcIl1dLHRbODJdPVtBW1wiR1IuTTEuSk9JTlQgTkVUV09SSyBOT0RFXCJdXSx0WzgzXT1bQVtcIkdSLk0xLlJFVFJBTlNNSVNTSU9OIFNJVEVcIl1dLHRbODRdPVtBW1wiR1IuTTEuQVNTQVVMVFwiXV0sdFs4NV09W0FbXCJHUi5NMS5XRUFQT05TXCJdXSx0Wzg2XT1bQVtcIkdSLk0xLkNSSU1JTkFMIElOVkVTVElHQVRJT04gRElWSVNJT05cIl1dLHRbODddPVtBW1wiR1IuTTEuRElHSVRBTFwiXV0sdFs4OF09W0FbXCJHUi5NMS5ORVRXT1JLIE9SIE5FVFdPUksgT1BFUkFUSU9OU1wiXV0sdFs4OV09W0FbXCJHUi5NMS5BSVJGSUVMRCwgQUVSSUFMIFBPUlQgT0YgREVCQVJLQVRJT04sIE9SIEFFUklBTCBQT1JUIE9GIEVNQkFSS0FUSU9OXCJdXSx0WzkwXT1bQVtcIkdSLk0xLlBJUEVMSU5FXCJdXSx0WzkxXT1bQVtcIkdSLk0xLlBPU1RBTFwiXV0sdFs5Ml09W0FbXCJHUi5NMS5XQVRFUlwiXV0sdFs5M109W0FbXCJHUi5NMS5JTkRFUEVOREVOVCBDT01NQU5EXCJdXSx0Wzk0XT1bQVtcIkdSLk0xLlRIRUFUUkVcIl1dLHRbOTVdPVtBW1wiR1IuTTEuQVJNWVwiXV0sdFs5Nl09W0FbXCJHUi5NMS5DT1JQU1wiXV0sdFs5N109W0FbXCJHUi5NMS5CUklHQURFXCJdXSx0Wzk4XT1bQVtcIkdSLklDLkZGLkhFQURRVUFSVEVSUyBPUiBIRUFEUVVBUlRFUlMgRUxFTUVOVFwiXV0sRVtcIjAxXCJdPVtBW1wiR1IuTTIuQUlSQk9STkVcIl1dLEVbXCIwMlwiXT1bQVtcIkdSLk0yLkFSQ1RJQ1wiXV0sRVtcIjAzXCJdPVtBW1wiR1IuTTIuQkFUVExFIERBTUFHRSBSRVBBSVJcIl1dLEVbXCIwNFwiXT1bQVtcIkdSLk0yLkJJQ1lDTEUgRVFVSVBQRURcIl1dLEVbXCIwNVwiXT1bQVtcIkdSLk0yLkNBU1VBTFRZIFNUQUdJTkdcIl1dLEVbXCIwNlwiXT1bQVtcIkdSLk0yLkNMRUFSSU5HXCJdXSxFW1wiMDdcIl09W0FbXCJHUi5NMi5DTE9TRSBSQU5HRVwiXV0sRVtcIjA4XCJdPVtBW1wiR1IuTTIuQ09OVFJPTFwiXV0sRVtcIjA5XCJdPVtBW1wiR1IuTTIuREVDT05UQU1JTkFUSU9OXCJdXSxFWzEwXT1bQVtcIkdSLk0yLkRFTU9MSVRJT05cIl1dLEVbMTFdPVtBW1wiR1IuTTIuREVOVEFMXCJdXSxFWzEyXT1bQVtcIkdSLk0yLkRJR0lUQUxcIl1dLEVbMTNdPVtBW1wiR1IuTTIuRU5IQU5DRUQgUE9TSVRJT04gTE9DQVRJT04gUkVQT1JUSU5HIFNZU1RFTVwiXV0sRVsxNF09W0FbXCJHUi5NMi5FUVVJUE1FTlRcIl1dLEVbMTVdPVtBW1wiR1IuTTIuSEVBVllcIl1dLEVbMTZdPVtBW1wiR1IuTTIuSElHSCBBTFRJVFVERVwiXV0sRVsxN109W0FbXCJHUi5NMi5JTlRFUk1PREFMXCJdXSxFWzE4XT1bQVtcIkdSLk0yLklOVEVOU0lWRSBDQVJFXCJdXSxFWzE5XT1bQVtcIkdSLk0yLkxJR0hUXCJdXSxFWzIwXT1bQVtcIkdSLk0yLkxBQk9SQVRPUllcIl1dLEVbMjFdPVtBW1wiR1IuTTIuTEFVTkNIRVJcIl1dLEVbMjJdPVtBW1wiR1IuTTIuTE9ORyBSQU5HRVwiXV0sRVsyM109W0FbXCJHUi5NMi5MT1cgQUxUSVRVREVcIl1dLEVbMjRdPVtBW1wiR1IuTTIuTUVESVVNXCJdXSxFWzI1XT1bQVtcIkdSLk0yLk1FRElVTSBBTFRJVFVERVwiXV0sRVsyNl09W0FbXCJHUi5NMi5NRURJVU0gUkFOR0VcIl1dLEVbMjddPVtBW1wiR1IuTTIuTU9VTlRBSU5cIl1dLEVbMjhdPVtBW1wiR1IuTTIuSElHSCBUTyBNRURJVU0gQUxUSVRVREVcIl1dLEVbMjldPVtBW1wiR1IuTTIuTVVMVEktQ0hBTk5FTFwiXV0sRVszMF09W0FbXCJHUi5NMi5PUFRJQ0FMXCJdXSxFWzMxXT1bQVtcIkdSLk0yLlBBQ0sgQU5JTUFMXCJdXSxFWzMyXT1bQVtcIkdSLk0yLlBBVElFTlQgRVZBQ1VBVElPTiBDT09SRElOQVRJT05cIl1dLEVbMzNdPVtBW1wiR1IuTTIuUFJFVkVOVElWRSBNQUlOVEVOQU5DRVwiXV0sRVszNF09W0FbXCJHUi5NMi5QU1lDSE9MT0dJQ0FMXCJdXSxFWzM1XT1bQVtcIkdSLk0yLlJBRElPIFJFTEFZIExJTkUgT0YgU0lHSFRcIl1dLEVbMzZdPVtBW1wiR1IuTTIuUkFJTFJPQURcIl1dLEVbMzddPVtBW1wiR1IuTTIuUkVDT1ZFUlkgKFVOTUFOTkVEIFNZU1RFTVMpXCJdXSxFWzM4XT1bQVtcIkdSLk0yLlJFQ09WRVJZIChNQUlOVEVOQU5DRSlcIl1dLEVbMzldPVtBW1wiR1IuTTIuUkVTQ1VFIENPT1JESU5BVElPTiBDRU5UUkVcIl1dLEVbNDBdPVtBW1wiR1IuTTIuUklWRVJJTkVcIl1dLEVbNDFdPVtBW1wiR1IuTTIuU0lOR0xFIENIQU5ORUxcIl1dLEVbNDJdPVtBW1wiR1IuTTIuU0tJXCJdXSxFWzQzXT1bQVtcIkdSLk0yLlNIT1JUIFJBTkdFXCJdXSxFWzQ0XT1bQVtcIkdSLk0yLlNUUkFURUdJQ1wiXV0sRVs0NV09W0FbXCJHUi5NMi5TVVBQT1JUXCJdXSxFWzQ2XT1bQVtcIkdSLk0yLlRBQ1RJQ0FMXCJdXSxFWzQ3XT1bQVtcIkdSLk0yLlRPV0VEXCJdXSxFWzQ4XT1bQVtcIkdSLk0yLlRST09QXCJdXSxFWzQ5XT1bQVtcIkdSLk0yLlZFUlRJQ0FMIE9SIFNIT1JUIFRBS0UtT0ZGIEFORCBMQU5ESU5HIFwiXV0sRVs1MF09W0FbXCJHUi5NMi5WRVRFUklOQVJZXCJdXSxFWzUxXT1bQVtcIkdSLk0yLldIRUVMRURcIl1dLEVbNTJdPVtBW1wiR1IuTTIuSElHSCBUTyBMT1cgQUxUSVRVREVcIl1dLEVbNTNdPVtBW1wiR1IuTTIuTUVESVVNIFRPIExPVyBBTFRJVFVERVwiXV0sRVs1NF09W0FbXCJHUi5NMi5BVFRBQ0tcIl1dLEVbNTVdPVtBW1wiR1IuTTIuUkVGVUVMXCJdXSxFWzU2XT1bQVtcIkdSLk0yLlVUSUxJVFlcIl1dLEVbNTddPVtBW1wiR1IuTTIuQ09NQkFUIFNFQVJDSCBBTkQgUkVTQ1VFXCJdXSxFWzU4XT1bQVtcIkdSLk0yLkdVRVJJTExBXCJdXSxFWzU5XT1bQVtcIkdSLk0yLkFJUiBBU1NBVUxUXCJdXSxFWzYwXT1bQVtcIkdSLk0yLkFNUEhJQklPVVNcIl1dLEVbNjFdPVtBW1wiR1IuTTIuVkVSWSBIRUFWWVwiXV0sRVs2Ml09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl1dLEVbNjNdPVtBW1wiR1IuTTIuQ1lCRVJTUEFDRVwiXV0sRVs2NF09W0FbXCJHUi5NMi5OQVZZIEJBUkdFLCBTRUxGLVBST1BFTExFRFwiXV0sRVs2NV09W0FbXCJHUi5NMi5OQVZZIEJBUkdFLCBOT1QgU0VMRi1QUk9QRUxMRURcIl1dLEVbNjZdPVtBW1wiR1IuTTIuTEFVTkNIXCJdXSxFWzY3XT1bQVtcIkdSLk0yLkxBTkRJTkcgQ1JBRlRcIl1dLEVbNjhdPVtBW1wiR1IuTTIuTEFORElORyBTSElQXCJdXSxFWzY5XT1bQVtcIkdSLk0yLlNFUlZJQ0UgQ1JBRlQvWUFSRFwiXV0sRVs3MF09W0FbXCJHUi5NMi5UVUcgSEFSQk9SXCJdXSxFWzcxXT1bQVtcIkdSLk0yLk9DRUFOIEdPSU5HIFRVRyBCT0FUXCJdXSxFWzcyXT1bQVtcIkdSLk0yLlNVUkZBQ0UgREVQTE9ZTUVOVCBBTkQgRElTVFJJQlVUSU9OIENPTU1BTkRcIl1dLEVbNzNdPVtBW1wiR1IuTTIuTk9OQ09NQkFUQU5UIEdFTkVSSUMgVkVTU0VMXCJdXSxFWzc0XT1bQVtcIkdSLk0yLkNPTVBPU0lURVwiXV0sRVs3NV09W0FbXCJHUi5NMi5TSEVMVEVSXCJdXSxFWzc2XT1bQVtcIkdSLk0yLkxJR0hUIEFORCBNRURJVU1cIl1dLEVbNzddPVtBW1wiR1IuTTIuU0VMRi1QUk9QRUxMRURcIl1dLEVbNzhdPVtBW1wiR1IuTTIuU0VDVVJJVFkgRk9SQ0UgQVNTSVNUQU5DRVwiXV0pfX0sdz17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6YyxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjExXCI9PWUmJihJWzExZTRdPVtBW1wiR1IuSS5DSVZJTElBTlwiXV0sSVsxMTAxMDBdPVtBW1wiR1IuSUMuRU5WSVJPTk1FTlRBTCBQUk9URUNUSU9OXCJdXSxJWzExMDIwMF09W0FbXCJHUi5JQy5HT1ZFUk5NRU5UIE9SR0FOSVpBVElPTlwiXV0sSVsxMTAzMDBdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXV0sSVsxMTA0MDBdPVtBW1wiU1QuSUMuR1JPVVBcIl1dLElbMTEwNTAwXT1bQVtcIlNULklDLktJTExJTkcgVklDVElNXCJdXSxJWzExMDYwMF09W0FbXCJTVC5JQy5LSUxMSU5HIFZJQ1RJTVNcIl1dLElbMTEwNzAwXT1bQVtcIlNULklDLklORElWSURVQUxcIl0sQVtcIlNULklDLkFUVEVNUFRFRCBDUklNSU5BTCBBQ1RJVklUWVwiXV0sSVsxMTA4MDBdPVtBW1wiU1QuSUMuU1BZXCJdXSxJWzExMDkwMF09W0FbXCJTVC5JQy5DT01QT1NJVEUgTE9TU1wiXV0sSVsxMTFlM109W0FbXCJHUi5JQy5FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl1dLHRbXCIwMVwiXT1bQVtcIlNULk0xLkFTU0FTU0lOQVRJT05cIl1dLHRbXCIwMlwiXT1bQVtcIlNULk0xLkVYRUNVVElPTiAoV1JPTkdGVUwgS0lMTElORylcIl1dLHRbXCIwM1wiXT1bQVtcIlNULk0xLk1VUkRFUlwiXV0sdFtcIjA0XCJdPVtBW1wiU1QuTTEuSElKQUNLSU5HL0hJSkFDS0VEXCJdXSx0W1wiMDVcIl09W0FbXCJTVC5NMS5LSUROQVBQSU5HXCJdXSx0W1wiMDZcIl09W0FbXCJTVC5NMS5QSVJBQ1lcIl1dLHRbXCIwN1wiXT1bQVtcIlNULk0xLlJBUEVcIl1dLHRbXCIwOFwiXT1bQVtcIlNULk0xLkNJVklMSUFOXCJdXSx0W1wiMDlcIl09W0FbXCJTVC5NMS5ESVNQTEFDRUQgUEVSU09OUywgUkVGVUdFRVMsIEFORCBFVkFDVUVFU1wiXV0sdFsxMF09W0FbXCJTVC5NMS5GT1JFSUdOIEZJR0hURVJTXCJdXSx0WzExXT1bQVtcIlNULk0xLkdBTkdcIl1dLHRbMTJdPVtBW1wiU1QuTTEuR09WRVJOTUVOVCBPUkdBTklaQVRJT05cIl1dLHRbMTNdPVtBW1wiU1QuTTEuTEVBREVSXCJdXSx0WzE0XT1bQVtcIlNULk0xLk5PTkdPVkVSTk1FTlRBTCBPUkdBTklaQVRJT04gKE5HTylcIl1dLHRbMTVdPVtBW1wiU1QuTTEuQ09FUkNFRC9JTVBSRVNTRURcIl1dLHRbMTZdPVtBW1wiU1QuTTEuV0lMTElORyBSRUNSVUlUXCJdXSx0WzE3XT1bQVtcIlNULk0xLlJFTElHSU9VU1wiXV0sdFsxOF09W0FbXCJTVC5NMS5UQVJHRVRFRFwiXV0sdFsxOV09W0FbXCJTVC5NMS5URVJST1JJU1RcIl1dLHRbMjBdPVtBW1wiU1QuTTEuU1BFQUtFUlwiXV0sdFsyMV09W0FbXCJTVC5NMS5BQ0NJREVOVFwiXV0sdFsyMl09W0FbXCJTVC5NMS5DT01CQVRcIl1dLHRbMjNdPVtBW1wiU1QuTTEuT1RIRVJcIl1dLHRbMjRdPVtBW1wiU1QuTTEuTE9PVFwiXV0sdFsyNV09W0FbXCJHUi5NMS5ISUpBQ0tFUlwiXV0sdFsyNl09W0FbXCJHUi5NMS5DWUJFUlNQQUNFXCJdXSxFW1wiMDFcIl09W0FbXCJTVC5NMi5MRUFERVIgT1IgTEVBREVSU0hJUFwiXV0sRVtcIjAyXCJdPVtBW1wiR1IuTTIuQ1lCRVJTUEFDRVwiXV0pfX0sXz17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6YyxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtpZihcIjE1XCI9PWUpe0lbMTFlNF09W0FbXCJHUi5FUS5XRUFQT05cIl1dLElbMTEwMTAwXT1bQVtcIkdSLkVRLlJJRkxFXCJdXSxJWzExMDEwMV09W0FbXCJHUi5FUS5SSUZMRVwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwMTAyXT1bQVtcIkdSLkVRLlJJRkxFXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwMTAzXT1bQVtcIkdSLkVRLlJJRkxFXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMDIwMF09W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXV0sSVsxMTAyMDFdPVtBW1wiR1IuRVEuTUFDSElORSBHVU5cIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMDIwMl09W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMDIwM109W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTAzMDBdPVtBW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXV0sSVsxMTAzMDFdPVtBW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXSxzLl90cmFuc2xhdGUoMCwyMCxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl0pXSxJWzExMDMwMl09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl0pXSxJWzExMDMwM109W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdKV0sSVsxMTA0MDBdPVtBW1wiR1IuRVEuRkxBTUUgVEhST1dFUlwiXV0sSVsxMTA1MDBdPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgR1VOXCJdXSxJWzExMDUwMV09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMDUwMl09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBHVU5cIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTA1MDNdPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgR1VOXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMDYwMF09W0FbXCJHUi5FUS5BTlRJVEFOSyBHVU5cIl1dLElbMTEwNjAxXT1bQVtcIkdSLkVRLkFOVElUQU5LIEdVTlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwNjAyXT1bQVtcIkdSLkVRLkFOVElUQU5LIEdVTlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMDYwM109W0FbXCJHUi5FUS5BTlRJVEFOSyBHVU5cIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTEwNzAwXT1bQVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXV0sSVsxMTA3MDFdPVtBW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTA3MDJdPVtBW1wiR1IuRVEuRElSRUNUIEZJUkUgR1VOXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwNzAzXT1bQVtcIkdSLkVRLkRJUkVDVCBGSVJFIEdVTlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTA4MDBdPVtBW1wiR1IuRVEuUkVDT0lMTEVTUyBHVU5cIl1dLElbMTEwODAxXT1bQVtcIkdSLkVRLlJFQ09JTExFU1MgR1VOXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXV0sSVsxMTA4MDJdPVtBW1wiR1IuRVEuUkVDT0lMTEVTUyBHVU5cIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTA4MDNdPVtBW1wiR1IuRVEuUkVDT0lMTEVTUyBHVU5cIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTEwOTAwXT1bQVtcIkdSLkVRLkhPV0lUWkVSXCJdXSxJWzExMDkwMV09W0FbXCJHUi5FUS5IT1dJVFpFUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwOTAyXT1bQVtcIkdSLkVRLkhPV0lUWkVSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwOTAzXT1bQVtcIkdSLkVRLkhPV0lUWkVSXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMWUzXT1bQVtcIkdSLkVRLk1JU1NJTEUgTEFVTkNIRVJcIl1dLElbMTExMDAxXT1bQVtcIkdSLkVRLk1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMTAwMl09W0FbXCJHUi5FUS5NSVNTSUxFIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTExMDAzXT1bQVtcIkdSLkVRLk1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExMTAwXT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl1dLElbMTExMTAxXT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMTEwMl09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSxBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBUTEFSXCJdXSxJWzExMTEwM109W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSxBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUiBURUxBUlwiXV0sSVsxMTExMDRdPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMTEwNV09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl0sQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVExBUlwiXV0sSVsxMTExMDZdPVtBW1wiR1IuRVEuQUlSIERFRkVOQ0UgTUlTU0lMRSBMQVVOQ0hFUiBTVVJGQUNFLVRPLUFJUlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdLEFbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRFTEFSXCJdXSxJWzExMTEwN109W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMTEwOF09W0FbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdLEFbXCJHUi5FUS5BSVIgREVGRU5DRSBNSVNTSUxFIExBVU5DSEVSIFNVUkZBQ0UtVE8tQUlSIFRMQVJcIl1dLElbMTExMTA5XT1bQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl0sQVtcIkdSLkVRLkFJUiBERUZFTkNFIE1JU1NJTEUgTEFVTkNIRVIgU1VSRkFDRS1UTy1BSVIgVEVMQVJcIl1dLElbMTExMjAwXT1bQVtcIkdSLkVRLkFOVElUQU5LIE1JU1NJTEUgTEFVTkNIRVJcIl1dLElbMTExMjAxXT1bQVtcIkdSLkVRLkFOVElUQU5LIE1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMTIwMl09W0FbXCJHUi5FUS5BTlRJVEFOSyBNSVNTSUxFIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTExMjAzXT1bQVtcIkdSLkVRLkFOVElUQU5LIE1JU1NJTEUgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExMzAwXT1bQVtcIkdSLkVRLlNVUkZBQ0UtVE8tU1VSRkFDRSBNSVNTSUxFIExBVU5DSEVSXCJdXSxJWzExMTMwMV09W0FbXCJHUi5FUS5TVVJGQUNFLVRPLVNVUkZBQ0UgTUlTU0lMRSBMQVVOQ0hFUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExMzAyXT1bQVtcIkdSLkVRLlNVUkZBQ0UtVE8tU1VSRkFDRSBNSVNTSUxFIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTExMzAzXT1bQVtcIkdSLkVRLlNVUkZBQ0UtVE8tU1VSRkFDRSBNSVNTSUxFIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMTQwMF09W0FbXCJHUi5FUS5NT1JUQVJcIl1dLElbMTExNDAxXT1bQVtcIkdSLkVRLk1PUlRBUlwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTExNDAyXT1bQVtcIkdSLkVRLk1PUlRBUlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMTQwM109W0FbXCJHUi5FUS5NT1JUQVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExNTAwXT1bQVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl1dLElbMTExNTAxXT1bQVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMTUwMl09W0FbXCJHUi5FUS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTExNTAzXT1bQVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLkxPTkcgUkFOR0VcIl1dLElbMTExNjAwXT1bQVtcIkdSLkVRLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXV0sSVsxMTE2MDFdPVtBW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDEwLEFbXCJHUi5FUS5TSE9SVCBSQU5HRVwiXSldLElbMTExNjAyXT1bQVtcIkdSLkVRLk1VTFRJUExFIFJPQ0tFVCBMQVVOQ0hFUlwiXSxzLl90cmFuc2xhdGUoMCwxMCxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdKV0sSVsxMTE2MDNdPVtBW1wiR1IuRVEuTVVMVElQTEUgUk9DS0VUIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDEwLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdKV0sSVsxMTE3MDBdPVtBW1wiR1IuRVEuQU5USVRBTksgUk9DS0VUIExBVU5DSEVSXCJdXSxJWzExMTcwMV09W0FbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMTcwMl09W0FbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl0sQVtcIkdSLkVRLklOVEVSTUVESUFURSBSQU5HRVwiXV0sSVsxMTE3MDNdPVtBW1wiR1IuRVEuQU5USVRBTksgUk9DS0VUIExBVU5DSEVSXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMTgwMF09W0FbXCJHUi5FUS5OT04tTEVUSEFMIFdFQVBPTlwiXV0sSVsxMTE5MDBdPVtBW1wiR1IuRVEuVEFTRVJcIl1dLElbMTEyZTNdPVtBW1wiR1IuRVEuV0FURVIgQ0FOTk9OXCJdXSxJWzEyZTRdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl1dLElbMTIwMTAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEFbXCJHUi5FUS5BUk1PVVJFRCBWRUhJQ0xFXCJdXSxJWzEyMDEwMV09W0FbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFXCJdXSxJWzEyMDEwMl09W0FbXCJHUi5FUS5BUk1PVVJFRCBGSUdIVElORyBWRUhJQ0xFIChBRlYpIENPTU1BTkQgQU5EIENPTlRST0xcIl1dLElbMTIwMTAzXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdXSxJWzEyMDEwNF09W0FbXCJHUi5FUS5BUk1PVVJFRCBQRVJTT05ORUwgQ0FSUklFUlwiXSxBW1wiR1IuRVEuTUVESUNBTCBFVkFDVUFUSU9OXCJdXSxJWzEyMDEwNV09W0FbXCJHUi5JQy5BUk1PVVJcIl1dLElbMTIwMTA2XT1bQVtcIkdSLklDLkFSTU9VUlwiXSxBW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJWzEyMDEwN109W0FbXCJHUi5JQy5BUk1PVVJcIl0sQVtcIkdSLkVRLk1FRElDQUwgRVZBQ1VBVElPTlwiXV0sSVsxMjAxMDhdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0sQVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXV0sSVsxMjAxMDldPVtBW1wiR1IuRVEuQVJNT1VSRUQgUEVSU09OTkVMIENBUlJJRVJcIl0sQVtcIkdSLkVRLkNPTUJBVCBTRVJWSUNFIFNVUFBPUlQgVkVISUNMRVwiXV0sSVsxMjAxMTBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgRklHSFRJTkcgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXV0sSVsxMjAxMTFdPVtBW1wiR1IuRVEuQVJNT1VSRUQgRklHSFRJTkcgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXSxBW1wiR1IuSUMuRkYuUkVDT05OQUlTU0FOQ0UgRVFVUElNRU5UXCJdXSxJWzEyMDIwMF09W0FbXCJHUi5FUS5UQU5LXCJdXSxJWzEyMDIwMV09W0FbXCJHUi5FUS5UQU5LXCJdLEFbXCJHUi5FUS5MSUdIVCBUQU5LXCJdXSxJWzEyMDIwMl09W0FbXCJHUi5FUS5UQU5LXCJdLEFbXCJHUi5FUS5NRURJVU0gVEFOS1wiXV0sSVsxMjAyMDNdPVtBW1wiR1IuRVEuVEFOS1wiXSxBW1wiR1IuRVEuSEVBVlkgVEFOS1wiXV0sSVsxMjAzMDBdPVtBW1wiR1IuRVEuVEFOS1wiXSxBW1wiR1IuRVEuVEFOSyBSRUNPVkVSWSBWRUhJQ0xFXCJdXSxJWzEyMDMwMV09W0FbXCJHUi5FUS5UQU5LXCJdLEFbXCJHUi5FUS5MSUdIVCBUQU5LXCJdLEFbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbMTIwMzAyXT1bQVtcIkdSLkVRLlRBTktcIl0sQVtcIkdSLkVRLk1FRElVTSBUQU5LXCJdLEFbXCJHUi5FUS5UQU5LIFJFQ09WRVJZIFZFSElDTEVcIl1dLElbMTIwMzAzXT1bQVtcIkdSLkVRLlRBTktcIl0sQVtcIkdSLkVRLkhFQVZZIFRBTktcIl0sQVtcIkdSLkVRLlRBTksgUkVDT1ZFUlkgVkVISUNMRVwiXV0sSVsxM2U0XT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLHMuX3NjYWxlKC43LEFbXCJHUi5JQy5FTkdJTkVFUlwiXSldLElbMTMwMTAwXT1bQVtcIkdSLklOLklDLkJSSURHRVwiXV0sSVsxMzAyMDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLHMuX3NjYWxlKC44LEFbXCJHUi5JTi5JQy5CUklER0VcIl0pXSxJWzEzMDMwMF09W0FbXCJHUi5JTi5JQy5CUklER0VcIl0sQVtcIkdSLkVRLkZJWEVEIEJSSURHRVwiXV0sSVsxMzA0MDBdPVtBW1wiR1IuSU4uSUMuQlJJREdFXCJdLEFbXCJHUi5NMi5SSVZFUklORVwiXV0sSVsxMzA1MDBdPVtBW1wiR1IuSU4uSUMuQlJJREdFXCJdLEFbXCJHUi5FUS5GT0xESU5HIEdJUkRFUiBCUklER0VcIl1dLElbMTMwNjAwXT1bQVtcIkdSLklOLklDLkJSSURHRVwiXSxBW1wiR1IuRVEuSE9MTE9XIERFQ0sgQlJJREdFXCJdXSxJWzEzMDcwMF09W0FbXCJHUi5JQy5EUklMTElOR1wiXV0sSVsxMzA3MDFdPVtzLl9zY2FsZSguNyxBW1wiR1IuSUMuRFJJTExJTkdcIl0pLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl1dLElbMTMwODAwXT1bQVtcIkdSLkVRLkVBUlRITU9WRVJcIl1dLElbMTMwODAxXT1bQVtcIkdSLkVRLk1VTFRJRlVOQ1RJT05BTCBFQVJUSE1PVkVSL0RJR0dFUlwiXV0sSVsxMzA5MDBdPVtBW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl1dLElbMTMwOTAxXT1bQVtcIkdSLkVRLk1JTkUgQ0xFQVJJTkcgRVFVSVBNRU5UXCJdLHMuX3RyYW5zbGF0ZSgwLC0xMCxBW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdKV0sSVsxMzA5MDJdPVtBW1wiR1IuRVEuTUlORSBDTEVBUklORyBFUVVJUE1FTlRcIl0sQVtcIkdSLkVRLlRBTktcIl1dLElbMTMwOTAzXT1bQVtcIkdSLkVRLkFTU0FVTFQgQlJFQUNIRVIgVkVISUNMRSAoQUJWKSBXSVRIIENPTUJBVCBET1pFUiBCTEFERVwiXV0sSVsxMzA5MDRdPVtBW1wiR1IuTTEuUk9VVEUsIFJFQ09OTkFJU1NBTkNFLCBBTkQgQ0xFQVJBTkNFXCJdLEFbXCJHUi5JQy5FTkdJTkVFUiBVVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLk0yLk1FRElVTVwiXV0sSVsxMzA5MDVdPVtBW1wiR1IuTTEuUk9VVEUsIFJFQ09OTkFJU1NBTkNFLCBBTkQgQ0xFQVJBTkNFXCJdLEFbXCJHUi5JQy5FTkdJTkVFUiBVVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLk0yLkhFQVZZXCJdXSxJWzEzMWUzXT1bQVtcIkdSLklDLk1JTkUgTEFZSU5HXCJdXSxJWzEzMTAwMV09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0scy5fdHJhbnNsYXRlKDAsMTAscy5fc2NhbGUoLjcsQVtcIkdSLklDLk1JTkUgTEFZSU5HXCJdKSldLElbMTMxMDAyXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLEFbXCJHUi5FUS5BUk1PUkVEIENBUlJJRVIgV0lUSCBWT0xDQU5PXCJdXSxJWzEzMTAwM109W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkxJTUlURUQgQ1JPU1MtQ09VTlRSWVwiXSxBW1wiR1IuRVEuQVJNT1JFRCBDQVJSSUVSIFdJVEggVk9MQ0FOT1wiXV0sSVsxMzExMDBdPVtBW1wiR1IuRVEuRE9aRVJcIl1dLElbMTMxMTAxXT1bQVtcIkdSLkVRLkRPWkVSIEFSTU9SRURcIl1dLElbMTMxMjAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLHMuX3NjYWxlKC42LEFbXCJHUi5JQy5FTkdJTkVFUlwiXSldLElbMTMxMzAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSXCJdLHMuX3NjYWxlKC42LEFbXCJHUi5JQy5FTkdJTkVFUlwiXSksQVtcIkdSLkVRLkFSTU9VUkVEIFBFUlNPTk5FTCBDQVJSSUVSIEVOR0lORUVSIFJFQ09OIFZFSElDTEVcIl1dLElbMTMxNDAwXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuTElNSVRFRCBDUk9TUy1DT1VOVFJZXCJdLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgQkFDS0hPRVwiXV0sSVsxMzE1MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl0scy5fc2NhbGUoLjYsQVtcIkdSLklDLkVOR0lORUVSXCJdKV0sSVsxMzE2MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DUk9TUy1DT1VOVFJZXCJdLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgRkVSUlkgVFJBTlNQT1JURVJcIl1dLElbMTRlNF09W10sSVsxNDAxMDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdXSxJWzE0MDIwMF09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLk1FRElDQUwgVkVISUNMRVwiXV0sSVsxNDAzMDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5NRURJQ0FMIEVWQUNVQVRJT05cIl1dLElbMTQwNDAwXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuTU9CSUxFIEVNRVJHRU5DWSBQSFlTSUNJQU5cIl1dLElbMTQwNTAwXT1bQVtcIkdSLkVRLkJVU1wiXV0sSVsxNDA2MDBdPVtBW1wiR1IuRVEuU0VNSS1UUkFJTEVSIFRSVUNLXCJdXSxJWzE0MDYwMV09W0FbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBMSUdIVFwiXV0sSVsxNDA2MDJdPVtBW1wiR1IuRVEuU0VNSS1UUkFJTEVSIFRSVUNLXCJdLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUgTUVESVVNXCJdXSxJWzE0MDYwM109W0FbXCJHUi5FUS5TRU1JLVRSQUlMRVIgVFJVQ0tcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRSBIRUFWWVwiXV0sSVsxNDA3MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl1dLElbMTQwODAwXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ1JPU1MtQ09VTlRSWVwiXV0sSVsxNDA5MDBdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLHMuX3NjYWxlKC44LEFbXCJHUi5JQy5GRi5DTEFTUyBJSUlcIl0pXSxJWzE0MWUzXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxzLl9zY2FsZSguNyxBW1wiR1IuSUMuV0FURVJcIl0pXSxJWzE0MTEwMF09W0FbXCJHUi5FUS5XQVRFUiBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5MSU1JVEVEIENST1NTLUNPVU5UUllcIl1dLElbMTQxMjAwXT1bQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFLlRPVyBUUlVDS1wiXV0sSVsxNDEyMDFdPVtBW1wiR1IuRVEuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLXCJdLEFbXCJHUi5FUS5VVElMSVRZIFZFSElDTEUuVE9XIFRSVUNLLkxJR0hUXCJdXSxJWzE0MTIwMl09W0FbXCJHUi5FUS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0tcIl0sQVtcIkdSLkVRLlVUSUxJVFkgVkVISUNMRS5UT1cgVFJVQ0suSEVBVllcIl1dLElbMTVlNF09W10sSVsxNTAxMDBdPVtBW1wiR1IuRVEuVFJBSU4gTE9DT01PVElWRVwiXV0sSVsxNTAyMDBdPVtBW1wiR1IuRVEuUkFJTENBUlwiXV0sSVsxNmU0XT1bXSxJWzE2MDEwMF09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkFVVE9NT0JJTEVcIl1dLElbMTYwMTAxXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuQVVUT01PQklMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVsxNjAxMDJdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5BVVRPTU9CSUxFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVsxNjAxMDNdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5BVVRPTU9CSUxFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkhFQVZZXCJdXSxJWzE2MDIwMF09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdXSxJWzE2MDIwMV09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdXSxJWzE2MDIwMl09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXV0sSVsxNjAyMDNdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVsxNjAzMDBdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXV0sSVsxNjAzMDFdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVsxNjAzMDJdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NVUxUSVBMRSBQQVNTRU5HRVIgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbMTYwMzAzXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTVVMVElQTEUgUEFTU0VOR0VSIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl1dLElbMTYwNDAwXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdXSxJWzE2MDQwMV09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVsxNjA0MDJdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5VVElMSVRZIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTUVESVVNXCJdXSxJWzE2MDQwM109W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXV0sSVsxNjA1MDBdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXV0sSVsxNjA1MDFdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5MSUdIVFwiXV0sSVsxNjA1MDJdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5KRUVQIFRZUEUgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl1dLElbMTYwNTAzXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSkVFUCBUWVBFIFZFSElDTEVcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuSEVBVllcIl1dLElbMTYwNjAwXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbMTYwNjAxXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLkxJR0hUXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbMTYwNjAyXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVVRJTElUWSBWRUhJQ0xFXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1FRElVTVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJWzE2MDYwM109W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJWzE2MDcwMF09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk9QRU4tQkVEIFRSVUNLXCJdLEFbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlRSQUlMRVJcIl1dLElbMTYwNzAxXT1bQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuT1BFTi1CRUQgVFJVQ0tcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuTElHSFRcIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVsxNjA3MDJdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5NRURJVU1cIl0sQVtcIkdSLkVRLkNJVklMSUFOIFZFSElDTEUuVFJBSUxFUlwiXV0sSVsxNjA3MDNdPVtBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5PUEVOLUJFRCBUUlVDS1wiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5IRUFWWVwiXSxBW1wiR1IuRVEuQ0lWSUxJQU4gVkVISUNMRS5UUkFJTEVSXCJdXSxJWzE2MDgwMF09W0FbXCJTVC5JQy5LTk9XTiBJTlNVUkdFTlQgVkVISUNMRVwiXV0sSVsxNjA5MDBdPVtBW1wiU1QuSUMuS05PV04gSU5TVVJHRU5UIFZFSElDTEVcIl0sQVtcIlNULk0xLkRSVUdcIl1dLElbMTdlNF09W0FbXCJHUi5JQy5GRi5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMTcwMTAwXT1bQVtcIkdSLklDLkJVUkVBVSBPRiBBTENPSE9MLCBUT0JBQ0NPLCBGSVJFQVJNUyBBTkQgRVhQTE9TSVZFUyAoQVRGKSAoREVQQVJUTUVOVCBPRiBKVVNUSUNFKVwiXV0sSVsxNzAyMDBdPVtBW1wiR1IuSUMuRkYuQk9SREVSIFBBVFJPTFwiXV0sSVsxNzAzMDBdPVtBW1wiR1IuSUMuRkYuQ1VTVE9NUyBTRVJWSUNFXCJdXSxJWzE3MDQwMF09W0FbXCJHUi5JQy5EUlVHIEVORk9SQ0VNRU5UIEFHRU5DWSAoREVBKVwiXV0sSVsxNzA1MDBdPVtBW1wiR1IuSUMuRkYuREVQQVJUTUVOVCBPRiBKVVNUSUNFIChET0opXCJdXSxJWzE3MDYwMF09W0FbXCJHUi5JQy5GRURFUkFMIEJVUkVBVSBPRiBJTlZFU1RJR0FUSU9OIChGQkkpXCJdXSxJWzE3MDcwMF09W0FbXCJHUi5JQy5NSUxJVEFSWSBQT0xJQ0VcIl1dLElbMTcwODAwXT1bQVtcIkdSLklDLlVOSVRFRCBTVEFURVMgU0VDUkVUIFNFUlZJQ0UoVFJFQVMpIChVU1NTKVwiXV0sSVsxNzA5MDBdPVtBW1wiR1IuSUMuVFJBTlNQT1JUQVRJT04gU0VDVVJJVFkgQUdFTkNZIChUU0EpXCJdXSxJWzE3MWUzXT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbMTcxMTAwXT1bQVtcIkdSLklDLkZGLlVTIE1BUlNIQUxTIFNFUlZJQ0VcIl1dLElbMThlNF09W0FbXCJHUi5FUS5QQUNLIEFOSU1BTFwiXV0sSVsxOWU0XT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEFbXCJHUi5FUS5NSVNTSUxFIFNVUFBPUlRcIl1dLElbMTkwMTAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEFbXCJHUi5FUS5NSVNTSUxFIFRSQU5TTE9BREVSXCJdXSxJWzE5MDIwMF09W0FbXCJHUi5FUS5BUk1PVVJFRCBQUk9URUNURUQgVkVISUNMRSBXSVRIIExJTUlURUQgQ1JPU1MgQ09VTlRSWSBNT0JJTElUWVwiXSxBW1wiR1IuRVEuTUlTU0lMRSBUUkFOU1BPUlRFUlwiXV0sSVsxOTAzMDBdPVtBW1wiR1IuRVEuQVJNT1VSRUQgUFJPVEVDVEVEIFZFSElDTEUgV0lUSCBMSU1JVEVEIENST1NTIENPVU5UUlkgTU9CSUxJVFlcIl0sQVtcIkdSLkVRLk1JU1NJTEUgQ1JBTkUvTE9BRElORyBERVZJQ0VcIl1dLElbMTkwNDAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEFbXCJHUi5FUS5NSVNTSUxFIFBST1BFTExBTlQgVFJBTlNQT1JURVJcIl1dLElbMTkwNTAwXT1bQVtcIkdSLkVRLkFSTU9VUkVEIFBST1RFQ1RFRCBWRUhJQ0xFIFdJVEggTElNSVRFRCBDUk9TUyBDT1VOVFJZIE1PQklMSVRZXCJdLEFbXCJHUi5FUS5NSVNTSUxFIFdBUkhFQUQgVFJBTlNQT1JURVJcIl1dLElbMmU1XT1bXSxJWzIwMDEwMF09W0FbXCJHUi5JQy5GRi5CUk9BRENBU1QgVFJBTlNNSVRURVIgQU5URU5OQVwiXV0sSVsyMDAyMDBdPVtBW1wiU1QuSUMuQk9NQlwiXV0sSVsyMDAzMDBdPVtBW1wiU1QuSUMuQk9PQlkgVFJBUFwiXV0sSVsyMDA0MDBdPVtBW1wiR1IuRVEuQ0JSTiBFUVVJUE1FTlRcIl1dLElbMjAwNTAwXT1bQVtcIkdSLkVRLkNPTVBVVEVSIFNZU1RFTVwiXV0sSVsyMDA2MDBdPVtBW1wiR1IuRVEuQ09NTUFORCBMQVVOQ0ggRVFVSVBNRU5UIChDTEUpXCJdXSxJWzIwMDcwMF09W0FbXCJHUi5FUS5HRU5FUkFUT1IgU0VUXCJdXSxJWzIwMDgwMF09W0FbXCJHUi5FUS5HUk9VTkQtQkFTRUQgTUlEQ09VUlNFIERFRkVOU0UgKEdNRCkgRklSRSBDT05UUk9MIChHRkMpIENFTlRFUlwiXV0sSVsyMDA5MDBdPVtBW1wiR1IuRVEuSU4tRkxJR0hUIElOVEVSQ0VQVE9SIENPTU1VTklDQVRJT05TIFNZU1RFTSAoSUZJQ1MpIERBVEEgVEVSTUlOQUwgKElEVClcIl1dLElbMjAxZTNdPVtBW1wiR1IuRVEuTEFTRVJcIl1dLElbMjAxMTAwXT1bQVtcIkdSLkVRLlBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OUyBFUVVJUE1FTlRcIl1dLElbMjAxMjAwXT1bQVtcIkdSLklDLlNVU1RBSU5NRU5UXCJdXSxJWzIwMTMwMF09W0FbXCJHUi5FUS5URU5UXCJdXSxJWzIwMTMwMV09W0FbXCJHUi5FUS5URU5UIENJVklMSUFOXCJdXSxJWzIwMTMwMl09W0FbXCJHUi5FUS5URU5UIE1JTElUQVJZXCJdXSxJWzIwMTQwMF09W0FbXCJHUi5FUS5VTklUIERFUExPWU1FTlQgU0hJUE1FTlRTXCJdXSxJWzIwMTUwMF09W0FbXCJHUi5JQy5FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl1dLElbMjAxNTAxXT1bQVtcIkdSLklDLk1FRElDQUwgRVZBQ1VBVElPTiBIRUxJQ09QVEVSXCJdXSxJWzIxZTRdPVtdLElbMjEwMTAwXT1bQVtcIkdSLkVRLkxBTkQgTUlORVwiXV0sSVsyMTAyMDBdPVtBW1wiR1IuRVEuQU5USVBFUlNPTk5FTCBMQU5EIE1JTkVcIl1dLElbMjEwMzAwXT1bQVtcIkdSLkVRLkFOVElUQU5LIE1JTkVcIl1dLElbMjEwNDAwXT1bQVtcIkdSLkVRLklNUFJPVklTRUQgRVhQTE9TSVZFIERFVklDRVwiXV0sSVsyMTA1MDBdPVtBW1wiR1IuRVEuQU5USVBFUlNPTk5FTCBMQU5EIE1JTkUgTEVTUyBUSEFOIExFVEhBTFwiXV0sSVsyMmU0XT1bXSxJWzIyMDEwMF09W0FbXCJHUi5FUS5TRU5TT1JcIl1dLElbMjIwMjAwXT1bQVtcIkdSLkVRLlNFTlNPUiBFTVBMQUNFRFwiXV0sSVsyMjAzMDBdPVtBW1wiR1IuRVEuUkFEQVJcIl1dLElbMjNlNF09W0FbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdXSxJWzIzMDEwMF09W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLlVUSUxJVFkgVkVISUNMRVwiXSxBW1wiR1IuTTEuTUVERVZBQ1wiXV0sSVsyMzAyMDBdPVtBW1wiR1IuSUMuRklSRSBQUk9URUNUSU9OXCJdXSxJWzI0ZTRdPVtBW1wiR1IuSUMuTUFOVUFMIFRSQUNLXCJdXSxJWzI1ZTRdPVtBW1wiR1IuSUMuQVZJQVRJT04gUk9UQVJZIFdJTkdcIl1dLHRbXCIwMVwiXT1bQVtcIkdSLk0xLkJJT0xPR0lDQUxcIl1dLHRbXCIwMlwiXT1bQVtcIkdSLk0xLkNIRU1JQ0FMXCJdXSx0W1wiMDNcIl09W0FbXCJHUi5NMS5FQVJMWSBXQVJOSU5HIFJBREFSXCJdXSx0W1wiMDRcIl09W0FbXCJHUi5NMS5JTlRSVVNJT05cIl1dLHRbXCIwNVwiXT1bQVtcIkdSLk0xLk5VQ0xFQVJcIl1dLHRbXCIwNlwiXT1bQVtcIkdSLk0xLlJBRElPTE9HSUNBTFwiXV0sdFtcIjA3XCJdPVtBW1wiR1IuTTEuVVBHUkFERUQgRUFSTFkgV0FSTklORyBSQURBUlwiXV0sdFtcIjA4XCJdPVtBW1wiR1IuTTEuSElKQUNLSU5HXCJdXSx0W1wiMDlcIl09W0FbXCJHUi5NMS5DSVZJTElBTlwiXV0sdFsxMF09W0FbXCJHUi5NMS5USUxULVJPVE9SXCJdXSx0WzExXT1bXSx0WzEyXT1bQVtcIkdSLk0xLk1VTFRJLVBVUlBPU0UgQkxBREVcIl1dLHRbMTNdPVtBW1wiR1IuTTEuVEFOSy1XSURUSCBNSU5FIFBMT1dcIl1dLHRbMTRdPVtBW1wiR1IuTTEuQlJJREdJTkdcIl1dLHRbMTVdPVtBW1wiR1IuTTEuQ1lCRVJTUEFDRVwiXV0sdFsxNl09W0FbXCJHUi5NMS5BUk1PUkVEXCJdXSx0WzE3XT1bQVtcIkdSLk0xLkFUVEFDS1wiXV0sdFsxOF09W0FbXCJHUi5NMS5DQVJHT1wiXV0sdFsxOV09W0FbXCJHUi5NMS5NQUlOVEVOQU5DRVwiXV0sdFsyMF09W0FbXCJHUi5NMS5NRURFVkFDXCJdXSx0WzIxXT1bQVtcIkdSLklOLk0xLlBFVFJPTEVVTVwiXV0sdFsyMl09W0FbXCJHUi5NMS5VVElMSVRZXCJdXSx0WzIzXT1bQVtcIkdSLk0xLldBVEVSXCJdXSx0WzI0XT1bQVtcIkdSLk0xLlJPQk9USUNcIl1dLEVbXCIwMVwiXT1bQVtcIkdSLk0yLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMlwiXT1bQVtcIkdSLk0yLkxJR0hUXCJdXSxFW1wiMDNcIl09W0FbXCJHUi5NMi5NRURJVU1cIl1dLEVbXCIwNFwiXT1bQVtcIkdSLk0yLlJBSUxST0FEXCJdXSxFW1wiMDVcIl09W0FbXCJHUi5NMi5UUkFDS0VEXCJdXSxFW1wiMDZcIl09W0FbXCJHUi5NMi5UUkFDVE9SIFRSQUlMRVJcIl1dLEVbXCIwN1wiXT1bQVtcIkdSLk0yLldIRUVMRUQgTElNSVRFRFwiXV0sRVtcIjA4XCJdPVtBW1wiR1IuTTIuV0hFRUxFRFwiXV0sRVtcIjA5XCJdPVtBW1wiR1IuTTIuUk9CT1RJQ1wiXV07dmFyIFQ9ezExZTQ6MTQwLDExMDEwMDoxNDAsMTEwMTAxOjE0MCwxMTAxMDI6MTQwLDExMDEwMzoxNDAsMTEwMjAwOjE0MCwxMTAyMDE6MTQwLDExMDIwMjoxNDAsMTEwMjAzOjE0MCwxMTAzMDA6MTQwLDExMDMwMToxNDAsMTEwMzAyOjE0MCwxMTAzMDM6MTQwLDExMDQwMDoxMzUsMTEwNTAwOjE0MCwxMTA1MDE6MTQwLDExMDUwMjoxNDAsMTEwNTAzOjE0MCwxMTA2MDA6MTQwLDExMDYwMToxNDAsMTEwNjAyOjE0MCwxMTA2MDM6MTQwLDExMDcwMDoxNDAsMTEwNzAxOjE0MCwxMTA3MDI6MTQwLDExMDcwMzoxNDAsMTEwODAwOjE0MCwxMTA4MDE6MTQwLDExMDgwMjoxNDAsMTEwODAzOjE0MCwxMTA5MDA6MTQwLDExMDkwMToxNDAsMTEwOTAyOjE0MCwxMTA5MDM6MTQwLDExMWUzOjE0MCwxMTEwMDE6MTQwLDExMTAwMjoxNDAsMTExMDAzOjE0MCwxMTExMDA6MTQwLDExMTEwMToxNDAsMTExMTAyOjE0MCwxMTExMDM6MTQwLDExMTEwNDoxNDAsMTExMTA1OjE0MCwxMTExMDY6MTQwLDExMTEwNzoxNDAsMTExMTA4OjE0MCwxMTExMDk6MTQwLDExMTIwMDoxNDAsMTExMjAxOjE0MCwxMTEyMDI6MTQwLDExMTIwMzoxNDAsMTExMzAwOjE0MCwxMTEzMDE6MTQwLDExMTMwMjoxNDAsMTExMzAzOjE0MCwxMTE0MDA6MTQwLDExMTQwMToxNDAsMTExNDAyOjE0MCwxMTE0MDM6MTQwLDExMTUwMDoxNDAsMTExNTAxOjE0MCwxMTE1MDI6MTQwLDExMTUwMzoxNDAsMTExNjAwOjE0MCwxMTE2MDE6MTQwLDExMTYwMjoxNDAsMTExNjAzOjE0MCwxMTE3MDE6MTQwLDExMTcwMjoxNDAsMTExNzAzOjE0MCwxMTE4MDA6MTQwLDExMTkwMDoxNDAsMTEyZTM6MTQwLDEyZTQ6MTI5LDEyMDEwMDoxMjksMTIwMTAxOjEzMCwxMjAxMDI6MTMwLDEyMDEwMzoxMzAsMTIwMTA0OjEzMCwxMjAxMDU6MTIwLDEyMDEwNjoxMjAsMTIwMTA3OjEyMCwxMjAxMDg6MTMwLDEyMDEwOToxMzAsMTIwMTEwOjE0MCwxMjAyMDA6MTMwLDEyMDIwMToxMzAsMTIwMjAyOjEzMCwxMjAyMDM6MTMwLDEyMDMwMDoxMzAsMTIwMzAxOjEzMCwxMjAzMDI6MTMwLDEyMDMwMzoxMzAsMTNlNDoxMjksMTMwMTAwOjExNSwxMzAyMDA6MTMwLDEzMDMwMDoxMzAsMTMwNDAwOjEzNSwxMzA1MDA6MTIwLDEzMDYwMDoxMjAsMTMwNzAwOjEyMCwxMzA3MDE6MTMwLDEzMDgwMDoxMzAsMTMwODAxOjEzMCwxMzA5MDA6MTIwLDEzMDkwMToxMzAsMTMwOTAyOjEzMCwxMzFlMzoxMTUsMTMxMDAxOjEzMCwxMzEwMDI6MTMwLDEzMTAwMzoxNDAsMTMxMTAwOjEzMCwxMzExMDE6MTMwLDEzMTIwMDoxMzAsMTMxMzAwOjEzMCwxMzE0MDA6MTQwLDEzMTUwMDoxNDAsMTMxNjAwOjE0MCwxNDAxMDA6MTMwLDE0MDIwMDoxMzAsMTQwMzAwOjEzMCwxNDA0MDA6MTMwLDE0MDUwMDoxMzAsMTQwNjAwOjE0MCwxNDA2MDE6MTQwLDE0MDYwMjoxNDAsMTQwNjAzOjE0MCwxNDA3MDA6MTQwLDE0MDgwMDoxNDAsMTQwOTAwOjEzMCwxNDFlMzoxMzAsMTQxMTAwOjE0MCwxNDEyMDA6MTMwLDE0MTIwMToxMzAsMTQxMjAyOjEzMCwxNTAxMDA6MTMwLDE1MDIwMDoxNDAsMTYwMTAwOjEzMi41LDE2MDEwMToxMzIuNSwxNjAxMDI6MTMyLjUsMTYwMTAzOjEzMi41LDE2MDIwMDoxMzIuNSwxNjAyMDE6MTMyLjUsMTYwMjAyOjEzMi41LDE2MDIwMzoxMzIuNSwxNjAzMDA6MTMyLjUsMTYwMzAxOjEzMi41LDE2MDMwMjoxMzIuNSwxNjAzMDM6MTMyLjUsMTYwNDAwOjEzMi41LDE2MDQwMToxMzIuNSwxNjA0MDI6MTMyLjUsMTYwNDAzOjEzMi41LDE2MDUwMDoxMzIuNSwxNjA1MDE6MTMyLjUsMTYwNTAyOjEzMi41LDE2MDUwMzoxMzIuNSwxNjA2MDA6MTMyLjUsMTYwNjAxOjEzMi41LDE2MDYwMjoxMzIuNSwxNjA2MDM6MTMyLjUsMTYwNzAwOjEzMi41LDE2MDcwMToxMzIuNSwxNjA3MDI6MTMyLjUsMTYwNzAzOjEzMi41LDE2MDgwMDoxMTUsMTYwOTAwOjExNSwxN2U0OjE0OS4wMzEyNSwxNzAxMDA6MTE4Ljc1LDE3MDIwMDoxMzMuMjE4NzUsMTcwMzAwOjEzNS4yMTg3NSwxNzA0MDA6MTE4Ljc1LDE3MDUwMDoxMzguMTg3NSwxNzA2MDA6MTE4Ljc1LDE3MDcwMDoxMTguNzUsMTcwODAwOjExOCwxNzA5MDA6MTE4LDE3MWUzOjEzNSwxNzExMDA6MTM1LDE4ZTQ6MTI1LDE5ZTQ6MTI5LDE5MDEwMDoxMjksMTkwMjAwOjEyOSwxOTAzMDA6MTI5LDE5MDQwMDoxMjksMTkwNTAwOjEyOSwyMDAxMDA6MTQwLDIwMDIwMDoxMTguNzUsMjAwMzAwOjEyMCwyMDA0MDA6MTQwLDIwMDUwMDoxMzIsMjAwNjAwOjExOC43NSwyMDA3MDA6MTE4Ljc1LDIwMDgwMDoxMTguNzUsMjAwOTAwOjExOS4zNjIyMjgzOTM1NTQ2OSwyMDFlMzoxNDUsMjAxMTAwOjEyMCwyMDEyMDA6MTE4LDIwMTMwMDoxMjQuMzYyMjIwNzY0MTYwMTYsMjAxMzAxOjEyMCwyMDEzMDI6MTIwLDIwMTQwMDoxMTguNzUsMjAxNTAwOjE0MCwyMDE1MDE6MTE1LDIxMDEwMDoxMjIsMjEwMjAwOjEyMiwyMTAzMDA6MTIyLDIxMDQwMDoxMTguNzUsMjEwNTAwOjEyMiwyMjAxMDA6MTQwLDIyMDIwMDoxMzYsMjIwMzAwOjEyMCwyM2U0OjEzNSwyMzAxMDA6MTMyLjUsMjMwMjAwOjEyMCwyNGU0OjExOC43NX07Zm9yKHZhciBTIGluIFQpVC5oYXNPd25Qcm9wZXJ0eShTKSYmKFJbU109e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjpUW1NdfSl9fX0sSj17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6YyxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjIwXCI9PWUmJihJWzExZTRdPVtBW1wiR1IuSUMuTUlMSVRBUllcIl1dLElbMTEwMTAwXT1bQVtcIkdSLklOLklDLkFJUkNSQUZUIFBST0RVQ1RJT04gJiBBU1NFTUJMWVwiXV0sSVsxMTAyMDBdPVtzLl9zY2FsZSgxLjQsQVtcIkdSLklDLkZGLkNMQVNTIFZcIl0pXSxJWzExMDMwMF09W0FbXCJHUi5JQy5GRi5DTEFTUyBWXCJdLEFbXCJHUi5JQy5GRi5TVVBQTFlcIl1dLElbMTEwNDAwXT1bQVtcIkdSLkVRLlRBTktcIl1dLElbMTEwNTAwXT1bQVtcIlNULklDLkJMQUNLIExJU1QgTE9DQVRJT05cIl1dLElbMTEwNjAwXT1bQVtcIkdSLklDLkNCUk5cIl1dLElbMTEwNzAwXT1bQVtcIkdSLkVRLkRPWkVSXCJdXSxJWzExMDcwMV09W0FbXCJHUi5JTi5JQy5CUklER0VcIl1dLElbMTEwODAwXT1bQVtcIkdSLklDLkVRVUlQTUVOVCBNQU5VRkFDVFVSRVwiXV0sSVsxMTA5MDBdPVtBW1wiR1IuSS5HT1ZFUk5NRU5UXCJdXSxJWzExMWUzXT1bQVtcIlNULklDLkdSQVkgTElTVCBMT0NBVElPTlwiXV0sSVsxMTExMDBdPVtBW1wiU1QuSUMuTUFTUyBHUkFWRSBMT0NBVElPTlwiXV0sSVsxMTEyMDBdPVtBW1wiR1IuSU4uSUMuTUlMSVRBUlkvQ0lWSUxJQU4uTUFURVJJRUxcIl0sQVtcIkdSLklDLkZGLlNVUFBMWVwiXV0sSVsxMTEzMDBdPVtBW1wiR1IuSU4uSUMuTUlORVwiXV0sSVsxMTE0MDBdPVtBW1wiR1IuRVEuTUlTU0lMRSBMQVVOQ0hFUlwiXV0sSVsxMTE1MDBdPVtzLl9zY2FsZSguOCxBW1wiQUMuSUMuUkFESU9BQ1RJVkUgTUFURVJJQUxcIl0pXSxJWzExMTYwMF09W0FbXCJHUi5JTi5JQy5NSUxJVEFSWS9DSVZJTElBTi5QUklOVEVEIE1FRElBXCJdXSxJWzExMTcwMF09W0FbXCJTVC5JQy5TQUZFIEhPVVNFXCJdXSxJWzExMTgwMF09W0FbXCJTVC5JQy5XSElURSBMSVNUIExPQ0FUSU9OXCJdXSxJWzExMTkwMF09W0FbXCJHUi5FUS5URU5UXCJdXSxJWzExMTkwMV09W0FbXCJHUi5FUS5URU5UXCJdLEFbXCJTVC5NMS5ESVNQTEFDRUQgUEVSU09OUywgUkVGVUdFRVMsIEFORCBFVkFDVUVFU1wiXV0sSVsxMTE5MDJdPVtBW1wiR1IuRVEuVEVOVFwiXSxBW1wiR1IuTTEuVFJBSU5JTkcgQ0FNUFwiXV0sSVsxMTJlM109W0FbXCJHUi5JTi5JQy5JTkRVU1RSSUFMIFNJVEVcIl0sQVtcIkdSLklOLklDLldBUkVIT1VTRS9TVE9SQUdFIEZBQ0lMSVRZXCJdXSxJWzExMjEwMF09W0FbXCJHUi5JQy5GRi5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMTEyMTAxXT1bQVtcIkdSLklDLkJVUkVBVSBPRiBBTENPSE9MLCBUT0JBQ0NPLCBGSVJFQVJNUyBBTkQgRVhQTE9TSVZFUyAoQVRGKSAoREVQQVJUTUVOVCBPRiBKVVNUSUNFKVwiXV0sSVsxMTIxMDJdPVtBW1wiR1IuSUMuRkYuQk9SREVSIFBBVFJPTFwiXV0sSVsxMTIxMDNdPVtBW1wiR1IuSUMuRkYuQ1VTVE9NUyBTRVJWSUNFXCJdXSxJWzExMjEwNF09W0FbXCJHUi5JQy5EUlVHIEVORk9SQ0VNRU5UIEFHRU5DWSAoREVBKVwiXV0sSVsxMTIxMDVdPVtBW1wiR1IuSUMuRkYuREVQQVJUTUVOVCBPRiBKVVNUSUNFIChET0opXCJdXSxJWzExMjEwNl09W0FbXCJHUi5JQy5GRURFUkFMIEJVUkVBVSBPRiBJTlZFU1RJR0FUSU9OIChGQkkpXCJdXSxJWzExMjEwN109W0FbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMTEyMTA4XT1bQVtcIkdSLklDLkZGLlBSSVNPTlwiXV0sSVsxMTIxMDldPVtBW1wiR1IuSUMuVU5JVEVEIFNUQVRFUyBTRUNSRVQgU0VSVklDRShUUkVBUykgKFVTU1MpXCJdXSxJWzExMjExMF09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTiBTRUNVUklUWSBBR0VOQ1kgKFRTQSlcIl1dLElbMTEyMTExXT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbMTEyMTEyXT1bQVtcIkdSLklDLkZGLlVTIE1BUlNIQUxTIFNFUlZJQ0VcIl1dLElbMTEyMjAwXT1bQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl1dLElbMTEyMjAxXT1bQVtcIkdSLklDLkZJUkUgUFJPVEVDVElPTlwiXV0sSVsxMTIyMDJdPVtBW1wiR1IuSUMuRU1FUkdFTkNZIE1FRElDQUwgT1BFUkFUSU9OXCJdXSxJWzEyZTRdPVtdLElbMTIwMTAwXT1bQVtcIkdSLklOLklDLkFHUklDVUxUVVJFIEFORCBGT09EIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMDEwMV09W0FbXCJHUi5JTi5JQy5BR1JJQ1VMVFVSQUwgTEFCT1JBVE9SWVwiXV0sSVsxMjAxMDJdPVtBW1wiR1IuSU4uSUMuQU5JTUFMIEZFRURMT1RcIl1dLElbMTIwMTAzXT1bQVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdLEFbXCJBQy5NMS5DT01NRVJDSUFMXCJdXSxJWzEyMDEwNF09W0FbXCJHUi5JTi5JQy5GQVJNL1JBTkNIXCJdXSxJWzEyMDEwNV09W0FbXCJTVC5JQy5GT09EIERJU1RSSUJVVElPTlwiXV0sSVsxMjAxMDZdPVtBW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl0sQVtcIkFDLk0xLlBST0RVQ1RJT05cIl1dLElbMTIwMTA3XT1bQVtcIlNULklDLkZPT0QgRElTVFJJQlVUSU9OXCJdLEFbXCJBQy5NMS5SRVRBSUxcIl1dLElbMTIwMTA4XT1bQVtcIkdSLklOLklDLkdSQUlOIFNUT1JBR0VcIl1dLElbMTIwMjAwXT1bQVtcIkFDLklDLkJBTktJTkcgRklOQU5DRSBBTkQgSU5TVVJBTkNFIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMDIwMV09W0FbXCJHUi5JTi5JQy5BVE1cIl1dLElbMTIwMjAyXT1bQVtcIkdSLklOLklDLkJBTktcIl1dLElbMTIwMjAzXT1bQVtcIkdSLklOLklDLkJVTExJT04gU1RPUkFHRVwiXV0sSVsxMjAyMDRdPVtBW1wiR1IuSU4uSUMuSU5GUkFTVFJVQ1RVUkUuQkFOS0lORyBGSU5BTkNFIEFORCBJTlNVUkFOQ0UgIElORlJBU1RSVUNUVVJFLkVDT05PTUlDIElORlJBU1RSVUNUVVJFIEFTU0VUXCJdXSxJWzEyMDIwNV09W0FbXCJHUi5JTi5JQy5GRURFUkFMIFJFU0VSVkUgQkFOS1wiXV0sSVsxMjAyMDZdPVtBW1wiR1IuSU4uSUMuRklOQU5DSUFMIEVYQ0hBTkdFXCJdXSxJWzEyMDIwN109W0FbXCJHUi5JTi5JQy5GSU5BTkNJQUwgU0VSVklDRVMsIE9USEVSXCJdXSxJWzEyMDMwMF09W0FbXCJHUi5JTi5JQy5DT01NRVJDSUFMIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMDMwMV09W0FbXCJHUi5JTi5JQy5DSEVNSUNBTCBQTEFOVFwiXV0sSVsxMjAzMDJdPVtBW1wiR1IuSU4uSUMuRklSRUFSTVMgTUFOVUZBQ1RVUkVSXCJdXSxJWzEyMDMwM109W0FbXCJHUi5JTi5JQy5GSVJFQVJNUyBSRVRBSUxFUlwiXV0sSVsxMjAzMDRdPVtBW1wiR1IuSU4uSUMuSEFaQVJET1VTIE1BVEVSSUFMIFBST0RVQ1RJT05cIl1dLElbMTIwMzA1XT1bQVtcIkdSLklOLklDLkhBWkFSRE9VUyBNQVRFUklBTCBTVE9SQUdFXCJdXSxJWzEyMDMwNl09W0FbXCJHUi5JTi5JQy5JTkRVU1RSSUFMIFNJVEVcIl1dLElbMTIwMzA3XT1bQVtcIkdSLklOLklDLkxBTkRGSUxMXCJdXSxJWzEyMDMwOF09W0FbXCJHUi5JTi5JQy5QSEFSTUFDRVVUSUNBTCBNQU5VRkFDVFVSRVJcIl1dLElbMTIwMzA5XT1bQVtcIkdSLklOLklDLkNPTlRBTUlOQVRFRCBIQVpBUkRPVVMgV0FTVEUgU0lURVwiXV0sSVsxMjAzMTBdPVtBW1wiR1IuSU4uSUMuVE9YSUMgUkVMRUFTRSBJTlZFTlRPUllcIl1dLElbMTIwNDAwXT1bQVtcIkdSLklOLklDLkVEVUNBVElPTkFMIEZBQ0lMSVRJRVMgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIwNDAxXT1bQVtcIkdSLklOLklDLkNPTExFR0UvVU5JVkVSU0lUWVwiXV0sSVsxMjA0MDJdPVtBW1wiR1IuSU4uSUMuU0NIT09MXCJdXSxJWzEyMDUwMF09W0FbXCJHUi5JTi5JQy5FTEVDVFJJQyBQT1dFUlwiXV0sSVsxMjA1MDFdPVtzLl9zY2FsZSguNixBW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0pXSxJWzEyMDUwMl09W3MuX3RyYW5zbGF0ZSgwLDE1LHMuX3NjYWxlKC43NSxBW1wiR1IuSU4uSUMuRUxFQ1RSSUMgUE9XRVJcIl0pKSxBW1wiQUMuTTEuR0VORVJBVElPTiBTVEFUSU9OXCJdXSxJWzEyMDUwM109W0FbXCJHUi5JTi5JQy5OQVRVUkFMIEdBUyBGQUNJTElUWVwiXV0sSVsxMjA1MDRdPVtzLl9zY2FsZSgxLjUsQVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXSldLElbMTIwNTA1XT1bQVtcIkdSLklDLkZGLkNMQVNTIElJSVwiXV0sSVsxMjA1MDZdPVtBW1wiR1IuSU4uSUMuUFJPUEFORSBGQUNJTElUWVwiXV0sSVsxMjA2MDBdPVtBW1wiR1IuSU4uSUMuR09WRVJOTUVOVCBTSVRFIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMDcwMF09W10sSVsxMjA3MDFdPVtBW1wiR1IuSUMuRkYuTUVESUNBTFwiXV0sSVsxMjA3MDJdPVtBW1wiR1IuSUMuRkYuTUVESUNBTFwiXSxBW1wiR1IuSUMuRkYuTUVESUNBTCBUUkVBVE1FTlQgRkFDSUxJVFlcIl1dLElbMTIwODAwXT1bQVtcIkdSLklOLklDLk1JTElUQVJZIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMDgwMV09W0FbXCJHUi5JTi5JQy5CQVNFXCJdLEFbXCJBQy5NMS5NSUxJVEFSWSBBUk1PUllcIl1dLElbMTIwODAyXT1bQVtcIkdSLklOLklDLkJBU0VcIl1dLElbMTIwOTAwXT1bQVtcIkdSLklOLklDLlBPU1RBTCBTRVJWSUNFIElORlJBU1RSVUNUVVJFXCJdXSxJWzEyMDkwMV09W0FbXCJHUi5JTi5JQy5QT1NUQUwgRElTVFJJQlVUSU9OIENFTlRFUlwiXV0sSVsxMjA5MDJdPVtBW1wiR1IuSU4uSUMuUE9TVCBPRkZJQ0VcIl1dLElbMTIxZTNdPVtBW1wiR1IuSU4uSUMuUFVCTElDIFZFTlVFUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVsxMjEwMDFdPVtBW1wiR1IuSU4uSUMuRU5DTE9TRUQgRkFDSVRMSVRZIChQVUJMSUMgVkVOVUUpXCJdXSxJWzEyMTAwMl09W0FbXCJHUi5JTi5JQy5PUEVOIEZBQ0lMSVRZIChPUEVOIFZFTlVFKVwiXV0sSVsxMjEwMDNdPVtBW1wiR1IuSU4uSUMuUkVDUkVBVElPTkFMIEFSRUFcIl1dLElbMTIxMDA0XT1bQVtcIkdSLklOLklDLlJFTElHSU9VUyBJTlNUSVRVVElPTlwiXV0sSVsxMjExMDBdPVtBW1wiR1IuSU4uSUMuU1BFQ0lBTCBORUVEUyBJTkZSQVNUUlVDVFVSRVwiXV0sSVsxMjExMDFdPVtBW1wiR1IuSU4uSUMuQURVTFQgREFZIENBUkVcIl1dLElbMTIxMTAyXT1bQVtcIkdSLklOLklDLkNISUxEIERBWSBDQVJFXCJdXSxJWzEyMTEwM109W0FbXCJHUi5JTi5JQy5FTERFUiBDQVJFXCJdXSxJWzEyMTIwMF09W0FbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlMgSU5GUkFTVFJVQ1RVUkVcIl1dLElbMTIxMjAxXT1bQVtcIkdSLklDLkZGLkJST0FEQ0FTVCBUUkFOU01JVFRFUiBBTlRFTk5BXCJdXSxJWzEyMTIwMl09W0FbXCJHUi5JTi5JQy5JTkZSQVNUUlVDVFVSRS5URUxFQ09NTVVOSUNBVElPTlMgSU5GUkFTVFJVQ1RVUkUuVEVMRUNPTU1VTklDQVRJT05TXCJdXSxJWzEyMTIwM109W0FbXCJHUi5JTi5JQy5URUxFQ09NTVVOSUNBVElPTlMgVE9XRVJcIl1dLElbMTIxMzAwXT1bcy5fc2NhbGUoMS41LEFbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSldLElbMTIxMzAxXT1bQVtcIkdSLklDLlRSQU5TUE9SVEFUSU9OXCJdLEFbXCJHUi5JQy5BSVJQT1JUIE9GIERFQkFSS0FUSU9OXCJdXSxJWzEyMTMwMl09W0FbXCJHUi5JTi5JQy5BSVIgVFJBRkZJQyBDT05UUk9MIEZBQ0lMSVRZXCJdXSxJWzEyMTMwM109W0FbXCJHUi5FUS5DSVZJTElBTiBWRUhJQ0xFLk1VTFRJUExFIFBBU1NFTkdFUiBWRUhJQ0xFXCJdXSxJWzEyMTMwNF09W0FbXCJHUi5JQy5GRVJSWVwiXV0sSVsxMjEzMDVdPVtBW1wiR1IuSU4uSUMuSEVMSUNPUFRFUiBMQU5ESU5HIFNJVEVcIl1dLElbMTIxMzA2XT1bQVtcIkdSLklDLk1BSU5URU5BTkNFXCJdXSxJWzEyMTMwN109W0FbXCJHUi5JQy5SQUlMSEVBRFwiXV0sSVsxMjEzMDhdPVtBW1wiR1IuSU4uSUMuUkVTVCBTVE9QXCJdXSxJWzEyMTMwOV09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXSxBW1wiR1IuTTEuTkFWQUxcIl1dLElbMTIxMzEwXT1bQVtcIkdSLklDLk5BVkFMXCJdLEFbXCJHUi5NMS5ZQVJEXCJdXSxJWzEyMTMxMV09W0FbXCJHUi5JTi5JQy5UT0xMIEZBQ0lMSVRZXCJdXSxJWzEyMTMxMl09W0FbXCJHUi5JTi5JQy5UUkFGRklDIElOU1BFQ1RJT04gRkFDSUxJVFlcIl1dLElbMTIxMzEzXT1bQVtcIkdSLklOLklDLlRVTk5FTFwiXV0sSVsxMjE0MDBdPVtBW1wiR1IuSUMuV0FURVJcIl1dLElbMTIxNDAxXT1bQVtcIkdSLklOLklDLkNPTlRST0wgVkFMVkVcIl1dLElbMTIxNDAyXT1bQVtcIkdSLklOLklDLkRBTVwiXV0sSVsxMjE0MDNdPVtBW1wiR1IuSU4uSUMuRElTQ0hBUkdFIE9VVEZBTExcIl1dLElbMTIxNDA0XT1bQVtcIkdSLklOLklDLkdST1VORCBXQVRFUiBXRUxMXCJdXSxJWzEyMTQwNV09W0FbXCJHUi5JTi5JQy5QVU1QSU5HIFNUQVRJT05cIl1dLElbMTIxNDA2XT1bQVtcIkdSLklOLklDLlJFU0VSVk9JUlwiXV0sSVsxMjE0MDddPVtBW1wiR1IuSU4uSUMuU1RPUkFHRSBUT1dFUlwiXV0sSVsxMjE0MDhdPVtBW1wiR1IuSU4uSUMuU1VSRkFDRSBXQVRFUiBJTlRBS0VcIl1dLElbMTIxNDA5XT1bQVtcIkdSLklOLklDLldBU1RFV0FURVIgVFJFQVRNRU5UIEZBQ0lMSVRZXCJdXSxJWzEyMTQxMF09W0FbXCJHUi5JQy5XQVRFUlwiXV0sSVsxMjE0MTFdPVtBW1wiR1IuSUMuV0FURVIgUFVSSUZJQ0FUSU9OXCJdXSx0W1wiMDFcIl09W0FbXCJHUi5NMS5CSU9MT0dJQ0FMXCJdXSx0W1wiMDJcIl09W0FbXCJHUi5NMS5DSEVNSUNBTFwiXV0sdFtcIjAzXCJdPVtBW1wiR1IuTTEuTlVDTEVBUlwiXV0sdFtcIjA0XCJdPVtBW1wiR1IuSU4uTTEuUkFESU9MT0dJQ0FMXCJdXSx0W1wiMDVcIl09W0FbXCJHUi5NMS5ERUNPTlRBTUlOQVRJT05cIl1dLHRbXCIwNlwiXT1bQVtcIkdSLklOLk0xLkNPQUxcIl1dLHRbXCIwN1wiXT1bQVtcIkdSLklOLk0xLkdFT1RIRVJNQUxcIl1dLHRbXCIwOFwiXT1bQVtcIkdSLklOLk0xLkhZRFJPRUxFQ1RSSUNcIl1dLHRbXCIwOVwiXT1bQVtcIkdSLklOLk0xLk5BVFVSQUwgR0FTXCJdXSx0WzEwXT1bQVtcIkdSLklOLk0xLlBFVFJPTEVVTVwiXV0sdFsxMV09W0FbXCJHUi5JTi5NMS5DSVZJTElBTlwiXV0sdFsxMl09W0FbXCJHUi5JTi5NMS5DSVZJTElBTiBURUxFUEhPTkVcIl1dLHRbMTNdPVtBW1wiR1IuSU4uTTEuQ0lWSUxJQU4gVEVMRVZJU0lPTlwiXV0sdFsxNF09W0FbXCJHUi5NMS5DWUJFUlNQQUNFXCJdXSx0WzE1XT1bQVtcIkdSLk0xLkpPSU5UIE5FVFdPUksgTk9ERVwiXV0sdFsxNl09W0FbXCJHUi5NMS5DT01NQU5EIFBPU1QgTk9ERVwiXV0sRVtcIjAxXCJdPVtBW1wiR1IuSU4uTTIuQ0hFTUlDQUwgJiBCSU9MT0dJQ0FMIFdBUkZBUkVcIl1dLEVbXCIwMlwiXT1bQVtcIkdSLklOLk0yLkNIRU1JQ0FMIFdBUkZBUkUgUFJPRFVDVElPTlwiXV0sRVtcIjAzXCJdPVtBW1wiR1IuSU4uTTIuTlVDTEVBUiBXQVJGQVJFIFBST0RVQ1RJT05cIl1dLEVbXCIwNFwiXT1bQVtcIkdSLklOLk0yLlJBRElPTE9HSUNBTCBXQVJGQVJFIFBST0RVQ1RJT05cIl1dLEVbXCIwNVwiXT1bQVtcIkdSLklOLk0yLkFUT01JQyBFTkVSR1kgUkVBQ1RPUlwiXV0sRVtcIjA2XCJdPVtBW1wiR1IuSU4uTTIuTlVDTEVBUiBNQVRFUklBTCBQUk9EVUNUSU9OXCJdXSxFW1wiMDdcIl09W0FbXCJHUi5JTi5NMi5OVUNMRUFSIE1BVEVSSUFMIFNUT1JBR0VcIl1dLEVbXCIwOFwiXT1bQVtcIkdSLklOLk0yLldFQVBPTlMgR1JBREUgUFJPRFVDVElPTlwiXV0sRVtcIjA5XCJdPVtBW1wiR1IuTTIuQ1lCRVJTUEFDRVwiXV0pfX0sWj17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6ZCxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjMwXCI9PWUmJihJWzExZTRdPVtBW1wiU0UuSUMuTUlMSVRBUllcIl1dLElbMTJlNF09W0FbXCJTRS5JQy5DT01CQVRBTlRcIl1dLElbMTIwMTAwXT1bQVtcIlNFLklDLkNBUlJJRVJcIl1dLElbMTIwMjAwXT1bQVtcIlNFLklDLlNVUkZBQ0UgQ09NQkFUQU5ULCBMSU5FXCJdXSxJWzEyMDIwMV09W0FbXCJTRS5JQy5CQVRUTEVTSElQXCJdXSxJWzEyMDIwMl09W0FbXCJTRS5JQy5DUlVJU0VSLCBHVUlERUQgTUlTU0lMRVwiXV0sSVsxMjAyMDNdPVtBW1wiU0UuSUMuREVTVFJPWUVSXCJdXSxJWzEyMDIwNF09W0FbXCJTRS5JQy5GUklHQVRFXCJdXSxJWzEyMDIwNV09W0FbXCJTRS5JQy5DT1JWRVRURVwiXV0sSVsxMjAyMDZdPVtBW1wiU0UuSUMuTElUVE9SQUwgQ09NQkFUQU5UIFNISVBcIl1dLElbMTIwMzAwXT1bQVtcIlNFLklDLkFNUEhJQklPVVMgV0FSRkFSRSBTSElQXCJdXSxJWzEyMDMwMV09W0FbXCJTRS5JQy5BTVBISUJJT1VTIEZPUkNFIEZMQUdTSElQXCJdXSxJWzEyMDMwMl09W0FbXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFRcIl1dLElbMTIwMzAzXT1bQVtcIlNFLklDLkFNUEhJQklPVVMgQVNTQVVMVCBTSElQLCBHRU5FUkFMXCJdXSxJWzEyMDMwNF09W0FbXCJTRS5JQy5BTVBISUJJT1VTIEFTU0FVTFQgU0hJUCwgTVVMVEktUFVSUE9TRVwiXV0sSVsxMjAzMDVdPVtBW1wiU0UuSUMuQU1QSElCSU9VUyBBU1NBVUxUIFNISVAsIEhFTElDT1BURVJcIl1dLElbMTIwMzA2XT1bQVtcIlNFLklDLkFNUEhJQklPVVMgVFJBTlNQT1JULCBET0NLXCJdXSxJWzEyMDMwN109W0FbXCJTRS5JQy5MQU5ESU5HIFNISVBcIl1dLElbMTIwMzA4XT1bQVtcIlNFLklDLkxBTkRJTkcgQ1JBRlRcIl1dLElbMTIwNDAwXT1bQVtcIlNFLklDLk1JTkUgV0FSRkFSRSBWRVNTRUxcIl1dLElbMTIwNDAxXT1bQVtcIlNFLklDLk1JTkVMQVlFUlwiXV0sSVsxMjA0MDJdPVtBW1wiU0UuSUMuTUlORVNXRUVQRVJcIl1dLElbMTIwNDAzXT1bQVtcIlNFLklDLk1JTkVTV0VFUEVSLCBEUk9ORVwiXV0sSVsxMjA0MDRdPVtBW1wiU0UuSUMuTUlORUhVTlRFUlwiXV0sSVsxMjA0MDVdPVtBW1wiU0UuSUMuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl1dLElbMTIwNDA2XT1bQVtcIlNFLklDLk1JTkUgQ09VTlRFUiBNRUFTVVJFIFNVUFBPUlQgU0hJUFwiXV0sSVsxMjA1MDBdPVtBW1wiU0UuSUMuUEFUUk9MXCJdXSxJWzEyMDUwMV09W0FbXCJTRS5JQy5QQVRST0wgQ1JBRlRcIl1dLElbMTIwNTAyXT1bQVtcIlNFLklDLlBBVFJPTCBHVU5cIl1dLElbMTIwNjAwXT1bQVtcIlNFLklDLlNFQSBTVVJGQUNFIERFQ09ZXCJdXSxJWzEyMDcwMF09W0FbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEVcIl1dLElbMTIwODAwXT1bQVtcIlNFLklDLk1JTElUQVJZIFNQRUVEQk9BVFwiXV0sSVsxMjA4MDFdPVtBW1wiU0UuSUMuTUlMSVRBUlkgU1BFRURCT0FULCBSSUdJRC1IVUxMIElORkxBVEFCTEUgQk9BVFwiXV0sSVsxMjA5MDBdPVtBW1wiU0UuSUMuTUlMSVRBUlkgSkVUU0tJXCJdXSxJWzEyMWUzXT1bQVtcIlNFLklDLk5BVlkgVEFTSyBPUkdBTklaQVRJT04gVU5JVFwiXV0sSVsxMjEwMDFdPVtBW1wiU0UuSUMuTkFWWSBUQVNLIEVMRU1FTlRcIl1dLElbMTIxMDAyXT1bQVtcIlNFLklDLk5BVlkgVEFTSyBGT1JDRVwiXV0sSVsxMjEwMDNdPVtBW1wiU0UuSUMuTkFWWSBUQVNLIEdST1VQXCJdXSxJWzEyMTAwNF09W0FbXCJTRS5JQy5OQVZZIFRBU0sgVU5JVFwiXV0sSVsxMjEwMDVdPVtBW1wiU0UuSUMuQ09OVk9ZXCJdXSxJWzEyMTEwMF09W0FbXCJTRS5JQy5SQURBUlwiXV0sSVsxM2U0XT1bQVtcIlNFLklDLk5PTkNPTUJBVEFOVFwiXV0sSVsxMzAxMDBdPVtBW1wiU0UuSUMuQVVYSUxJQVJZIFNISVBcIl1dLElbMTMwMTAxXT1bQVtcIlNFLklDLkFNTVVOSVRJT04gU0hJUFwiXV0sSVsxMzAxMDJdPVtBW1wiU0UuSUMuU1RPUkVTIFNISVBcIl1dLElbMTMwMTAzXT1bQVtcIlNFLklDLkFVWElMSUFSWSBGTEFHIE9SIENPTU1BTkQgU0hJUFwiXV0sSVsxMzAxMDRdPVtBW1wiU0UuSUMuSU5URUxMSUdFTkNFIENPTExFQ1RPUlwiXV0sSVsxMzAxMDVdPVtBW1wiU0UuSUMuT0NFQU4gUkVTRUFSQ0ggU0hJUFwiXV0sSVsxMzAxMDZdPVtBW1wiU0UuSUMuU1VSVkVZIFNISVBcIl1dLElbMTMwMTA3XT1bQVtcIlNFLklDLkhPU1BJVEFMIFNISVAyXCJdXSxJWzEzMDEwOF09W0FbXCJTRS5JQy5DQVJHTyBTSElQXCJdXSxJWzEzMDEwOV09W0FbXCJTRS5JQy5DT01CQVQgU1VQUE9SVCBTSElQLCBGQVNUXCJdXSxJWzEzMDExMF09W0FbXCJTRS5JQy5PSUxFUiwgUkVQTEVOSVNITUVOVFwiXV0sSVsxMzAxMTFdPVtBW1wiU0UuSUMuUkVQQUlSIFNISVBcIl1dLElbMTMwMTEyXT1bQVtcIlNFLklDLlNVQk1BUklORSBURU5ERVJcIl1dLElbMTMwMTEzXT1bQVtcIlNFLklDLlRVRywgT0NFQU4gR09JTkdcIl1dLElbMTMwMjAwXT1bQVtcIlNFLklDLlNFUlZJQ0UgQ1JBRlQsIFlBUkQsIEdFTkVSQUxcIl1dLElbMTMwMjAxXT1bQVtcIlNFLklDLkJBUkdFLCBOT1QgU0VMRi1QUk9QRUxMRURcIl1dLElbMTMwMjAyXT1bQVtcIlNFLklDLkJBUkdFLCBTRUxGLVBST1BFTExFRFwiXV0sSVsxMzAyMDNdPVtBW1wiU0UuSUMuVFVHLCBIQVJCT1VSXCJdXSxJWzEzMDIwNF09W0FbXCJTRS5JQy5MQVVOQ0hcIl1dLElbMTRlNF09W0FbXCJTRS5JQy5DSVZJTElBTlwiXV0sSVsxNDAxMDBdPVtBW1wiU0UuSUMuTUVSQ0hBTlQgU0hJUCwgR0VORVJBTFwiXV0sSVsxNDAxMDFdPVtBW1wiU0UuSUMuQ0FSR08sIEdFTkVSQUxcIl1dLElbMTQwMTAyXT1bQVtcIlNFLklDLkNPTlRBSU5FUiBTSElQXCJdXSxJWzE0MDEwM109W0FbXCJTRS5JQy5EUkVER0VcIl1dLElbMTQwMTA0XT1bQVtcIlNFLklDLlJPTEwgT04tUk9MTCBPRkZcIl1dLElbMTQwMTA1XT1bQVtcIlNFLklDLkZFUlJZXCJdXSxJWzE0MDEwNl09W0FbXCJTRS5JQy5IRUFWWSBMSUZUXCJdXSxJWzE0MDEwN109W0FbXCJTRS5JQy5IT1ZFUkNSQUZUIDI1MjVEXCJdXSxJWzE0MDEwOF09W0FbXCJTRS5JQy5NRVJDSEFOVCBTSElQLCBMQVNIIENBUlJJRVIgKFdJVEggQkFSR0VTKVwiXV0sSVsxNDAxMDldPVtBW1wiU0UuSUMuT0lMRVIvVEFOS0VSXCJdXSxJWzE0MDExMF09W0FbXCJTRS5JQy5QQVNTRU5HRVIgU0hJUFwiXV0sSVsxNDAxMTFdPVtBW1wiU0UuSUMuVFVHLCBPQ0VBTiBHT0lORyBDSVZJTElBTlwiXV0sSVsxNDAxMTJdPVtBW1wiU0UuSUMuVE9XXCJdXSxJWzE0MDExM109W0FbXCJTRS5JQy5UUkFOU1BPUlQgU0hJUCwgSEFaQVJET1VTIE1BVEVSSUFMXCJdXSxJWzE0MDExNF09W0FbXCJTRS5JQy5KVU5LL0RIT1dcIl1dLElbMTQwMTE1XT1bQVtcIlNFLklDLkJBUkdFLCBOT1QgU0VMRi1QUk9QRUxMRURcIl1dLElbMTQwMTE2XT1bQVtcIlNFLklDLkhPU1BJVEFMIFNISVBcIl1dLElbMTQwMjAwXT1bQVtcIlNFLklDLkZJU0hJTkcgVkVTU0VMXCJdXSxJWzE0MDIwMV09W0FbXCJTRS5JQy5EUklGVEVSXCJdXSxJWzE0MDIwMl09W0FbXCJTRS5JQy5UUkFXTEVSXCJdXSxJWzE0MDIwM109W0FbXCJTRS5JQy5GSVNISU5HIFZFU1NFTCBEUkVER0VcIl1dLElbMTQwMzAwXT1bQVtcIlNFLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbMTQwNDAwXT1bQVtcIlNFLklDLkxFSVNVUkUgQ1JBRlQsIFNBSUxJTkcgQk9BVFwiXV0sSVsxNDA1MDBdPVtBW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgTU9UT1JJWkVEXCJdXSxJWzE0MDUwMV09W0FbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRUQsIFJJR0lELUhVTEwgSU5GTEFUQUJMRSBCT0FUXCJdXSxJWzE0MDUwMl09W0FbXCJTRS5JQy5MRUlTVVJFIENSQUZULCBNT1RPUklaRUQsIFNQRUVEQk9BVFwiXV0sSVsxNDA2MDBdPVtBW1wiU0UuSUMuTEVJU1VSRSBDUkFGVCwgSkVUU0tJXCJdXSxJWzE0MDcwMF09W0FbXCJTRS5JQy5VTk1BTk5FRCBTVVJGQUNFIFdBVEVSIFZFSElDTEUgKFVTVilcIl1dLElbMTVlNF09W0FbXCJTRS5JQy5PV04gU0hJUFwiXV0sSVsxNmU0XT1bQVtcIlNFLklDLkZVU0VEIFRSQUNLXCJdXSxJWzE3ZTRdPVtBW1wiU0UuSUMuTUFOVUFMIFRSQUNLXCJdXSx0W1wiMDFcIl09W0FbXCJTRS5NMS5PV04gU0hJUFwiXV0sdFtcIjAyXCJdPVtBW1wiU0UuTTEuQU5USUFJUiBXQVJGQVJFXCJdXSx0W1wiMDNcIl09W0FbXCJTRS5NMS5BTlRJU1VCTUFSSU5FIFdBUkZBUkVcIl1dLHRbXCIwNFwiXT1bQVtcIlNFLk0xLkVTQ09SVFwiXV0sdFtcIjA1XCJdPVtBW1wiU0UuTTEuRUxFQ1RST05JQyBXQVJGQVJFXCJdXSx0W1wiMDZcIl09W0FbXCJTRS5NMS5JTlRFTExJR0VOQ0UsIFNVUlZFSUxMQU5DRSwgUkVDT05OQUlTU0FOQ0VcIl1dLHRbXCIwN1wiXT1bQVtcIlNFLk0xLk1JTkUgQ09VTlRFUiBNRUFTVVJFU1wiXV0sdFtcIjA4XCJdPVtBW1wiU0UuTTEuTUlTU0lMRSBERUZFTlNFXCJdXSx0W1wiMDlcIl09W0FbXCJTRS5NMS5NRURJQ0FMXCJdXSx0WzEwXT1bQVtcIlNFLk0xLk1JTkUgV0FSRkFSRVwiXV0sdFsxMV09W0FbXCJTRS5NMS5SRU1PVEUgTVVMVEktTUlTU0lPTiBWRUhJSExFXCJdXSx0WzEyXT1bQVtcIlNFLk0xLlNQRUNJQUwgT1BFUkFUSU9OUyBGT1JDRVwiXV0sdFsxM109W0FbXCJTRS5NMS5TVVJGQUNFIFdBUkZBUkVcIl1dLHRbMTRdPVtBW1wiU0UuTTEuQkFMTElTVElDIE1JU1NJTEVcIl1dLHRbMTVdPVtBW1wiU0UuTTEuR1VJREVEIE1JU1NJTEVcIl1dLHRbMTZdPVtBW1wiU0UuTTEuT1RIRVIgR1VJREVEIE1JU1NJTEVcIl1dLHRbMTddPVtBW1wiU0UuTTEuVE9SUEVET1wiXV0sdFsxOF09W0FbXCJTRS5NMS5EUk9ORS1FUVVJUFBFRFwiXV0sdFsxOV09W0FbXCJTRS5NMS5IRUxJQ09QVEVSLUVRVUlQUEVEXCJdXSx0WzIwXT1bQVtcIlNFLk0xLkJBTExJU1RJQyBNSVNTSUxFIERFRkVOU0UsIFNIT09URVJcIl1dLHRbMjFdPVtBW1wiU0UuTTEuQkFMTElTVElDIE1JU1NJTEUgREVGRU5TRSwgTE9ORy0gUkFOR0UgU1VSVkVJTExBTkNFIEFORCBUUkFDSyAoTFJTJlQpXCJdXSx0WzIyXT1bQVtcIlNFLk0xLlNFQS1CQVNFIFgtQkFORFwiXV0sdFsyM109W0FbXCJTRS5NMS5ISUpBQ0tJTkcvSElKQUNLRURcIl1dLHRbMjRdPVtBW1wiU0UuTTEuSElKQUNLRVJcIl1dLHRbMjVdPVtBW1wiU0UuTTEuQ1lCRVJTUEFDRVwiXV0sRVtcIjAxXCJdPVtBW1wiU0UuTTIuTlVDTEVBUiBQT1dFUkVEXCJdXSxFW1wiMDJcIl09W0FbXCJTRS5NMi5IRUFWWVwiXV0sRVtcIjAzXCJdPVtBW1wiU0UuTTIuTElHSFRcIl1dLEVbXCIwNFwiXT1bQVtcIlNFLk0yLk1FRElVTVwiXV0sRVtcIjA1XCJdPVtBW1wiU0UuTTIuRE9DS1wiXV0sRVtcIjA2XCJdPVtBW1wiU0UuTTIuTE9HSVNUSUNTXCJdXSxFW1wiMDdcIl09W0FbXCJTRS5NMi5UQU5LXCJdXSxFW1wiMDhcIl09W0FbXCJTRS5NMi5WRUhJQ0xFXCJdXSxFW1wiMDlcIl09W0FbXCJTRS5NMi5GQVNUXCJdXSxFWzEwXT1bQVtcIlNFLk0yLkFJUi1DVVNISU9ORUQgKFVTQSBPTkxZKVwiXV0sRVsxMV09W0FbXCJTRS5NMi5BSVItQ1VTSElPTkVEXCJdXSxFWzEyXT1bQVtcIlNFLk0yLkhZRFJPRk9JTFwiXV0sRVsxM109W0FbXCJTRS5NMi5BVVRPTk9NT1VTIENPTlRST0xcIl1dLEVbMTRdPVtBW1wiU0UuTTIuUkVNT1RFTFkgUElMT1RFRFwiXV0sRVsxNV09W0FbXCJTRS5NMi5FWFBFTkRBQkxFXCJdXSxFWzE2XT1bQVtcIlNFLk0yLkNZQkVSU1BBQ0VcIl1dKX19LHE9e3R5cGU6XCJudW1iZXJcIixnZXRNZXRhZGF0YTp1LGdldEljb25zOnYsaWNvblBhcnRzOkQsaWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCIzNVwiPT1lJiYoSVsxMWU0XT1bQVtcIlNVLklDLk1JTElUQVJZXCJdXSxJWzExMDEwMF09W0FbXCJTVS5JQy5TVUJNQVJJTkVcIl1dLElbMTEwMTAxXT1bQVtcIlNVLklDLlNVQk1BUklORSwgU1VSRkFDRURcIl1dLElbMTEwMTAyXT1bQVtcIlNVLklDLlNVQk1BUklORSwgU05PUktFTElOR1wiXV0sSVsxMTAxMDNdPVtBW1wiU1UuSUMuU1VCTUFSSU5FLCBCT1RUT01FRFwiXV0sSVsxMTAyMDBdPVtBW1wiU1UuSUMuT1RIRVIgU1VCTUVSU0lCTEVcIl1dLElbMTEwMzAwXT1bQVtcIlNVLklDLk5PTi1TVUJNQVJJTkVcIl1dLElbMTEwNDAwXT1bQVtcIlNVLklDLkFVVE9OT01PVVMgVU5ERVJXQVRFUiBWRUhJQ0xFLyBVTk1BTk5FRCBVTkRFUldBVEVSIFZFSElDTEUgKEFVVi9VVVYpXCJdXSxJWzExMDUwMF09W0FbXCJTVS5JQy5ESVZFUiwgTUlMSVRBUllcIl1dLElbMTJlNF09W0FbXCJTVS5JQy5DSVZJTElBTlwiXV0sSVsxMjAxMDBdPVtBW1wiU1UuSUMuU1VCTUVSU0lCTEUsIENJVklMSUFOXCJdXSxJWzEyMDIwMF09W0FbXCJTVS5JQy5BVVRPTk9NT1VTIFVOREVSV0FURVIgVkVISUNMRS8gVU5NQU5ORUQgVU5ERVJXQVRFUiBWRUhJQ0xFIChBVVYvVVVWKSwgQ0lWSUxJQU5cIl1dLElbMTIwMzAwXT1bQVtcIlNVLklDLkRJVkVSLCBDSVZJTElBTlwiXV0sSVsxM2U0XT1bQVtcIlNVLklDLlVOREVSV0FURVIgV0VBUE9OXCJdXSxJWzEzMDEwMF09W0FbXCJTVS5JQy5UT1JQRURPXCJdXSxJWzEzMDIwMF09W0FbXCJTVS5JQy5JTVBST1ZJU0VEIEVYUExPU0lWRSBERVZJQ0UgKElFRClcIl1dLElbMTMwMzAwXT1bQVtcIlNVLklDLlVOREVSV0FURVIgREVDT1kgRFN5bWJvbFwiXV0sSVsxNGU0XT1bQVtcIlNVLklDLkVDSE8gVFJBQ0tFUiBDTEFTU0lGSUVSIChFVEMpL1BPU1NJQkxFIENPTlRBQ1QgKFBPU0NPTilcIl1dLElbMTVlNF09W0FbXCJTVS5JQy5GVVNFRCBUUkFDS1wiXV0sSVsxNmU0XT1bQVtcIlNVLklDLk1BTlVBTCBUUkFDS1wiXV0sSVsyZTVdPVtBW1wiU1UuSUMuU0VBQkVEIElOU1RBTExBVElPTiwgTUFOLU1BREUsIE1JTElUQVJZXCJdXSxJWzIxZTRdPVtBW1wiU1UuSUMuU0VBQkVEIElOU1RBTExBVElPTiwgTUFOLU1BREUsIE5PTi1NSUxJVEFSWVwiXV0sdFtcIjAxXCJdPVtBW1wiU1UuTTEuQU5USVNVQk1BUklORSBXQVJGQVJFXCJdXSx0W1wiMDJcIl09W0FbXCJTVS5NMS5BVVhJTElBUllcIl1dLHRbXCIwM1wiXT1bQVtcIlNVLk0xLkNPTU1BTkQgQU5EIENPTlRST0xcIl1dLHRbXCIwNFwiXT1bQVtcIlNVLk0xLklOVEVMTElHRU5DRSwgU1VSVkVJTExBTkNFLCBSRUNPTk5BSVNTQU5DRVwiXV0sdFtcIjA1XCJdPVtBW1wiU1UuTTEuTUlORSBDT1VOVEVSTUVBU1VSRVNcIl1dLHRbXCIwNlwiXT1bQVtcIlNVLk0xLk1JTkUgV0FSRkFSRVwiXV0sdFtcIjA3XCJdPVtBW1wiU1UuTTEuU1VSRkFDRSBXQVJGQVJFXCJdXSx0W1wiMDhcIl09W0FbXCJTVS5NMS5BVFRBQ0tcIl1dLHRbXCIwOVwiXT1bQVtcIlNVLk0xLkJBTExJU1RJQyBNSVNTSUxFXCJdXSx0WzEwXT1bQVtcIlNVLk0xLkdVSURFRCBNSVNTSUxFXCJdXSx0WzExXT1bQVtcIlNVLk0xLk9USEVSIEdVSURFRCBNSVNTSUxFUyAoUE9JTlQgREVGRU5DRSlcIl1dLHRbMTJdPVtBW1wiU1UuTTEuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFXCJdXSx0WzEzXT1bQVtcIlNVLk0xLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAxXCJdXSx0WzE0XT1bQVtcIlNVLk0xLlBPU1NJQkxFIFNVQk1BUklORSAtIExPVyAyXCJdXSx0WzE1XT1bQVtcIlNVLk0xLlBPU1NJQkxFIFNVQk1BUklORSAtIEhJR0ggM1wiXV0sdFsxNl09W0FbXCJTVS5NMS5QT1NTSUJMRSBTVUJNQVJJTkUgLSBISUdIIDRcIl1dLHRbMTddPVtBW1wiU1UuTTEuUFJPQkFCTEUgU1VCTUFSSU5FXCJdXSx0WzE4XT1bQVtcIlNVLk0xLkNFUlRBSU4gU1VCTUFSSU5FXCJdXSx0WzE5XT1bQVtcIlNVLk0xLkFOVEktVE9SUEVETyBUT1JQRURPXCJdXSx0WzIwXT1bQVtcIlNVLk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sdFsyMV09W0FbXCJTVS5NMS5ISUpBQ0tFUlwiXV0sdFsyMl09W0FbXCJTVS5NMS5DWUJFUlNQQUNFXCJdXSxFW1wiMDFcIl09W0FbXCJTVS5NMi5BSVIgSU5ERVBFTkRFTlQgUFJPUFVMU0lPTlwiXV0sRVtcIjAyXCJdPVtBW1wiU1UuTTIuRElFU0VMIFBST1BVTFNJT05cIl1dLEVbXCIwM1wiXT1bQVtcIlNVLk0yLkRJRVNFTCAtIFRZUEUgMVwiXV0sRVtcIjA0XCJdPVtBW1wiU1UuTTIuRElFU0VMIC0gVFlQRSAyXCJdXSxFW1wiMDVcIl09W0FbXCJTVS5NMi5ESUVTRUwgLSBUWVBFIDNcIl1dLEVbXCIwNlwiXT1bQVtcIlNVLk0yLk5VQ0xFQVIgUE9XRVJFRFwiXV0sRVtcIjA3XCJdPVtBW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgMVwiXV0sRVtcIjA4XCJdPVtBW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgMlwiXV0sRVtcIjA5XCJdPVtBW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgM1wiXV0sRVsxMF09W0FbXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSA0XCJdXSxFWzExXT1bQVtcIlNVLk0yLk5VQ0xFQVIgLSBUWVBFIDVcIl1dLEVbMTJdPVtBW1wiU1UuTTIuTlVDTEVBUiAtIFRZUEUgNlwiXV0sRVsxM109W0FbXCJTVS5NMi5OVUNMRUFSIC0gVFlQRSA3XCJdXSxFWzE0XT1bQVtcIlNVLk0yLkFVVE9OT01PVVMgQ09OVFJPTFwiXV0sRVsxNV09W0FbXCJTVS5NMi5SRU1PVEVMWSBQSUxPVEVEXCJdXSxFWzE2XT1bQVtcIlNVLk0yLkVYUEVOREFCTEVcIl1dLEVbMTddPVtBW1wiU1UuTTIuQ1lCRVJTUEFDRVwiXV0pfX0saj17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6RCxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjM2XCI9PWUmJihJWzExZTRdPVtBW1wiU1UuSUMuU0VBIE1JTkVcIl1dLElbMTEwMTAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIC0gQk9UVE9NXCJdXSxJWzExMDIwMF09W0FbXCJTVS5JQy5TRUEgTUlORSAtIE1PT1JFRFwiXV0sSVsxMTAzMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgLSBGTE9BVElOR1wiXV0sSVsxMTA0MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgLSBSSVNJTkdcIl1dLElbMTEwNTAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIChJTiBPVEhFUiBQT1NJVElPTilcIl1dLElbMTEwNjAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIC0gS0lOR0ZJU0hFUlwiXV0sSVsxMTA3MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgLSBTTUFMTCBPQkpFQ1RcIl1dLElbMTEwODAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkVcIl1dLElbMTEwODAxXT1bQVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBCT1RUT01cIl1dLElbMTEwODAyXT1bQVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBNT09SRURcIl1dLElbMTEwODAzXT1bQVtcIlNVLklDLlNFQSBNSU5FIEVYRVJDSVNFIE1JTkUgLSBGTE9BVElOR1wiXV0sSVsxMTA4MDRdPVtBW1wiU1UuSUMuU0VBIE1JTkUgRVhFUkNJU0UgTUlORSAtIFJJU0lOR1wiXV0sSVsxMTA5MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRURcIl1dLElbMTEwOTAxXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5FVVRSQUxJWkVEIC0gQk9UVE9NXCJdXSxJWzExMDkwMl09W0FbXCJTVS5JQy5TRUEgTUlORSBORVVUUkFMSVpFRCAtIE1PT1JFRFwiXV0sSVsxMTA5MDNdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBGTE9BVElOR1wiXV0sSVsxMTA5MDRdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTkVVVFJBTElaRUQgLSBSSVNJTkdcIl1dLElbMTEwOTA1XT1bQVtcIlNVLklDLlNFQSBNSU5FIChJTiBPVEhFUiBQT1NJVElPTikgTkVVVFJBTElaRURcIl1dLElbMTJlNF09W0FbXCJTVS5JQy5VTkVYUExPREVEIEVYUExPU0lWRSBPUkROQU5DRVwiXV0sSVsxM2U0XT1bQVtcIlNVLklDLlNFQSBNSU5FIERFQ09ZXCJdXSxJWzEzMDEwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBERUNPWSwgQk9UVE9NL0dST1VORFwiXV0sSVsxMzAyMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgREVDT1ksIE1PT1JFRFwiXV0sSVsxNGU0XT1bXSxJWzE0MDEwMF09W3MuX3NjYWxlKDEuMyxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ09cIl0pXSxJWzE0MDEwMV09W3MuX3NjYWxlKDEuMyxbQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMVwiXV0pXSxJWzE0MDEwMl09W3MuX3NjYWxlKDEuMyxbQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMlwiXV0pXSxJWzE0MDEwM109W3MuX3NjYWxlKDEuMyxbQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgM1wiXV0pXSxJWzE0MDEwNF09W3MuX3NjYWxlKDEuMyxbQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNFwiXV0pXSxJWzE0MDEwNV09W3MuX3NjYWxlKDEuMyxbQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNVwiXV0pXSxJWzE0MDIwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXV0sSVsxNDAyMDFdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBCT1RUT01cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAxXCJdXSxJWzE0MDIwMl09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDJcIl1dLElbMTQwMjAzXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gQk9UVE9NXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgM1wiXV0sSVsxNDAyMDRdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBCT1RUT01cIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCA0XCJdXSxJWzE0MDIwNV09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEJPVFRPTVwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDVcIl1dLElbMTQwMzAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdXSxJWzE0MDMwMV09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIE1PT1JFRFwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDFcIl1dLElbMTQwMzAyXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgMlwiXV0sSVsxNDAzMDNdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBNT09SRURcIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAzXCJdXSxJWzE0MDMwNF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIE1PT1JFRFwiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDRcIl1dLElbMTQwMzA1XT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gTU9PUkVEXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgNVwiXV0sSVsxNDA0MDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXV0sSVsxNDA0MDFdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDFcIl1dLElbMTQwNDAyXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gRkxPQVRJTkdcIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCAyXCJdXSxJWzE0MDQwM109W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEZMT0FUSU5HXCJdLEFbXCJTVS5JQy5TRUEgTUlORSBNSUxDTyAtIEdFTkVSQUwsIENPTkZJREVOQ0UgTEVWRUwgM1wiXV0sSVsxNDA0MDRdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBGTE9BVElOR1wiXSxBW1wiU1UuSUMuU0VBIE1JTkUgTUlMQ08gLSBHRU5FUkFMLCBDT05GSURFTkNFIExFVkVMIDRcIl1dLElbMTQwNDA1XT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gRkxPQVRJTkdcIl0sQVtcIlNVLklDLlNFQSBNSU5FIE1JTENPIC0gR0VORVJBTCwgQ09ORklERU5DRSBMRVZFTCA1XCJdXSxJWzE1ZTRdPVtzLl9zY2FsZSgxLjMsQVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDXCJdKV0sSVsxNTAxMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTUlMRUMgLSBCT1RUT01cIl1dLElbMTUwMjAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE1JTEVDIC0gTU9PUkVEXCJdXSxJWzE1MDMwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBNSUxFQyAtIEZMT0FUSU5HXCJdXSxJWzE2ZTRdPVtzLl9zY2FsZSgxLjMsQVtcIlNVLklDLlNFQSBNSU5FIE5FR0FUSVZFIFJFQUNRVUlTSVRJT05cIl0pXSxJWzE2MDEwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gQk9UVE9NXCJdXSxJWzE2MDIwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gTU9PUkVEXCJdXSxJWzE2MDMwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBORUdBVElWRSBSRUFDUVVJU0lUSU9OIC0gRkxPQVRJTkdcIl1dLElbMTdlNF09W3MuX3NjYWxlKDEuMyxBW1wiU1UuSUMuU0VBIE1JTkUgR0VORVJBTCBPQlNUUlVDVE9SXCJdKV0sSVsxNzAxMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgR0VORVJBTCBPQlNUUlVDVE9SIE5FVVRSQUxJWkVEXCJdXSxJWzE4ZTRdPVtzLl9zY2FsZSgxLjMsQVtcIlNVLklDLlNFQSBNSU5FIE1JTkUgQU5DSE9SXCJdKV0sSVsxOWU0XT1bcy5fc2NhbGUoMS4zLEFbXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVFwiXSldLElbMTkwMTAwXT1bQVtcIlNVLklDLlNFQSBNSU5FIE5PTi1NSU5FIE1JTkUtTElLRSBDT05UQUNUIC0gQk9UVE9NXCJdXSxJWzE5MDIwMF09W0FbXCJTVS5JQy5TRUEgTUlORSBOT04tTUlORSBNSU5FLUxJS0UgQ09OVEFDVCAtIE1PT1JFRFwiXV0sSVsxOTAzMDBdPVtBW1wiU1UuSUMuU0VBIE1JTkUgTk9OLU1JTkUgTUlORS1MSUtFIENPTlRBQ1QgLSBGTE9BVElOR1wiXV0sSVsyZTVdPVtBW1wiU1UuSUMuRU5WSVJPTk1FTlRBTCBSRVBPUlQgTE9DQVRJT05cIl1dLElbMjFlNF09W0FbXCJTVS5JQy5ESVZFIFJFUE9SVCBMT0NBVElPTlwiXV0pfX0sJD17dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6YyxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjQwXCI9PWUmJihJWzExZTRdPVtdLElbMTEwMTAwXT1bQVtcIkFDLklDLkNSSU1JTkFMLkFDVElWSVRZLklOQ0lERU5UXCJdXSxJWzExMDEwMV09W3MuX3NjYWxlKDEuNSxBW1wiU1QuSUMuQVJSRVNUXCJdKV0sSVsxMTAxMDJdPVtBW1wiU1QuSUMuQVJTT04vRklSRVwiXV0sSVsxMTAxMDNdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuSUMuQVRURU1QVEVEIENSSU1JTkFMIEFDVElWSVRZXCJdXSxJWzExMDEwNF09W0FbXCJTVC5JQy5EUklWRS1CWSBTSE9PVElOR1wiXV0sSVsxMTAxMDVdPVtBW1wiU1QuSUMuRFJVRyBSRUxBVEVEIEFDVElWSVRJRVNcIl1dLElbMTEwMTA2XT1bQVtcIlNULklDLkVYVE9SVElPTlwiXV0sSVsxMTAxMDddPVtBW1wiU1QuSUMuR1JBRkZJVElcIl1dLElbMTEwMTA4XT1bQVtcIlNULklDLktJTExJTkcgVklDVElNXCJdXSxJWzExMDEwOV09W0FbXCJTVC5JQy5QT0lTT05JTkdcIl1dLElbMTEwMTEwXT1bQVtcIlNULklDLlJJT1RcIl1dLElbMTEwMTExXT1bcy5fc2NhbGUoMS41LEFbXCJTVC5JQy5CT09CWSBUUkFQXCJdKV0sSVsxMTAxMTJdPVtBW1wiU1QuSUMuSE9VU0VcIl0sQVtcIlNULk0xLkVWSUNUSU9OXCJdXSxJWzExMDExM109W0FbXCJTVC5JQy5CTEFDSyBNQVJLRVRJTkdcIl1dLElbMTEwMTE0XT1bQVtcIlNULklDLlZBTkRBTElTTS9MT09UL1JBTlNBQ0svUExVTkRFUi9TQUNLXCJdXSxJWzExMDExNV09W0FbXCJHUi5JQy5GRi5KQUlMIEJSRUFLXCJdXSxJWzExMDExNl09W0FbXCJTVC5JQy5ST0JCRVJZXCJdXSxJWzExMDExN109W0FbXCJTVC5JQy5USEVGVFwiXV0sSVsxMTAxMThdPVtBW1wiU1QuSUMuQlVSR0xBUllcIl1dLElbMTEwMTE5XT1bQVtcIlNULklDLlNNVUdHTElOR1wiXV0sSVsxMTAxMjBdPVtBW1wiU1QuSUMuUk9DSyBUSFJPV0lOR1wiXV0sSVsxMTAxMjFdPVtBW1wiU1QuSUMuQ09NUE9TSVRFIExPU1NcIl0sQVtcIlNULk0xLkRFQUQgQk9EWVwiXV0sSVsxMTAxMjJdPVtBW1wiU1QuSUMuU0FCT1RBR0VcIl1dLElbMTEwMTIzXT1bcy5fdHJhbnNsYXRlKDAsMTAscy5fc2NhbGUoLjgsQVtcIkFDLklDLkNSSU1JTkFMLkFDVElWSVRZLklOQ0lERU5UXCJdKSksQVtcIkFDLk0xLlRIUkVBVFwiXV0sSVsxMTAyMDBdPVtBW1wiU1QuSUMuQk9NQlwiXV0sSVsxMTAyMDFdPVtBW1wiU1QuSUMuQk9NQlwiXSxBW1wiQUMuTTEuVEhSRUFUXCJdXSxJWzExMDMwMF09W0FbXCJTVC5JQy5JRURcIl1dLElbMTEwMzAxXT1bQVtcIlNULklDLkVYUExPU0lPTlwiXSxBW1wiU1QuSUMuSUVEXCJdXSxJWzExMDMwMl09W3MuX3RyYW5zbGF0ZSgwLDE1LHMuX3NjYWxlKC43LFtBW1wiU1QuSUMuRVhQTE9TSU9OXCJdLEFbXCJTVC5JQy5JRURcIl1dKSksQVtcIlNULk0xLlBSRU1BVFVSRVwiXV0sSVsxMTAzMDNdPVtBW1wiU1QuSUMuSUVEXCJdLEFbXCJHUi5JQy5GRi5TVVBQTFlcIl1dLElbMTEwMzA0XT1bQVtcIlNULklDLklORElWSURVQUxcIl0sQVtcIlNULk0xLklFRFwiXV0sSVsxMTA0MDBdPVtBW1wiQUMuSUMuU0hPT1RJTkdcIl1dLElbMTEwNDAxXT1bQVtcIlNULklDLlNOSVBJTkdcIl1dLElbMTEwNTAwXT1bQVtcIlNULklDLklMTEVHQUwgRFJVRyBPUEVSQVRJT05cIl1dLElbMTEwNTAxXT1bQVtcIlNULklDLklMTEVHQUwgRFJVRyBPUEVSQVRJT05cIl0sQVtcIlNULk0xLlRSQUZGSUNLSU5HXCJdXSxJWzExMDUwMl09W0FbXCJTVC5JQy5JTExFR0FMIERSVUcgT1BFUkFUSU9OXCJdLEFbXCJTVC5NMS5MQUJSQVRPUllcIl1dLElbMTEwNjAwXT1bQVtcIlNULklDLkVYUExPU0lPTlwiXV0sSVsxMTA2MDFdPVtBW1wiU1QuSUMuRVhQTE9TSU9OXCJdLEFbXCJTVC5JQy5HUkVOQURFXCJdXSxJWzExMDYwMl09W0FbXCJTVC5JQy5FWFBMT1NJT05cIl0sQVtcIlNULklDLklOQ0VORElBUllcIl1dLElbMTEwNjAzXT1bQVtcIlNULklDLkVYUExPU0lPTlwiXSxBW1wiU1QuSUMuTUlORVwiXV0sSVsxMTA2MDRdPVtBW1wiU1QuSUMuRVhQTE9TSU9OXCJdLHMuX3NjYWxlKC42LEFbXCJHUi5FUS5NT1JUQVJcIl0pXSxJWzExMDYwNV09W0FbXCJTVC5JQy5FWFBMT1NJT05cIl0scy5fc2NhbGUoLjYsQVtcIkdSLkVRLlNJTkdMRSBST0NLRVQgTEFVTkNIRVJcIl0pXSxJWzExMDYwNl09W3MuX3NjYWxlKC43LEFbXCJTVC5JQy5CT01CXCJdKSxBW1wiU1QuSUMuRVhQTE9TSU9OXCJdXSxJWzEyZTRdPVtBW1wiQUMuSUMuQ1JJTUlOQUwuQ0lWSUwgRElTVFVSQkFOQ0VcIl1dLElbMTIwMTAwXT1bQVtcIlNULklDLkRFTU9OU1RSQVRJT05cIl1dLElbMTNlNF09W10sSVsxMzAxMDBdPVtBW1wiU1QuSUMuUEFUUk9MTElOR1wiXV0sSVsxMzAyMDBdPVtBW1wiU1QuSUMuUFNZQ0hPTE9HSUNBTCBPUEVSQVRJT05TXCJdXSxJWzEzMDIwMV09W0FbXCJTVC5JQy5SQURJTyBBTkQgVEVMRVZJU0lPTiBQU1lDSE9MT0dJQ0FMIE9QRVJBVElPTlNcIl1dLElbMTMwMzAwXT1bQVtcIlNULklDLlNFQVJDSElOR1wiXV0sSVsxMzA0MDBdPVtdLElbMTMwNDAxXT1bQVtcIlNULklDLklORElWSURVQUxcIl0sQVtcIlNULk0xLldJTExJTkdcIl1dLElbMTMwNDAyXT1bQVtcIlNULklDLklORElWSURVQUxcIl0sQVtcIlNULk0xLkNPRVJDRUQvSU1QUkVTU0VEXCJdXSxJWzEzMDUwMF09W0FbXCJTVC5JQy5NSU5FIExBWUlOR1wiXV0sSVsxMzA2MDBdPVtBW1wiU1QuSUMuU1BZXCJdXSxJWzEzMDcwMF09W0FbXCJTVC5JQy5XQVJSQU5UIFNFUlZFRFwiXV0sSVsxMzA4MDBdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuTTEuRVhGSUxUUkFUSU9OXCJdXSxJWzEzMDkwMF09W0FbXCJTVC5JQy5JTkRJVklEVUFMXCJdLEFbXCJTVC5NMS5JTkZJTFRSQVRJT05cIl1dLElbMTMxZTNdPVtBW1wiU1QuSUMuR1JPVVBcIl0sQVtcIlNULk0xLk1FRVRJTkdcIl1dLElbMTMxMDAxXT1bQVtcIlNULklDLlBPTExJTkcgUExBQ0UvRUxFQ1RJT05cIl1dLElbMTMxMTAwXT1bQVtcIlNULklDLkhPVVNFXCJdLEFbXCJTVC5NMS5SQUlEXCJdXSxJWzEzMTIwMF09W0FbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdXSxJWzEzMTIwMV09W3MuX3NjYWxlKC43LEFbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdKSxBW1wiQUMuTTEuRU1FUkdFTkNZIENPTExFQ1RJT04gRVZBQ1VBVElPTiBQT0lOVFwiXV0sSVsxMzEyMDJdPVtBW1wiU1QuSUMuRk9PRCBESVNUUklCVVRJT05cIl1dLElbMTMxMjAzXT1bcy5fc2NhbGUoLjcsQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEFbXCJBQy5NMS5FTUVSR0VOQ1kgSU5DSURFTlQgQ09NTUFORCBDRU5URVJcIl1dLElbMTMxMjA0XT1bcy5fc2NhbGUoLjcsQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEFbXCJBQy5NMS5FTUVSR0VOQ1kgT1BFUkFUSU9OUyBDRU5URVJcIl1dLElbMTMxMjA1XT1bQVtcIkFDLklDLkVNRVJHRU5DWSBQVUJMSUMgSU5GT1JNQVRJT04gQ0VOVEVSXCJdXSxJWzEzMTIwNl09W3MuX3NjYWxlKC43LEFbXCJHUi5JQy5GRi5FTUVSR0VOQ1kgT1BFUkFUSU9OXCJdKSxBW1wiQUMuTTEuRU1FUkdFTkNZIFNIRUxURVJcIl1dLElbMTMxMjA3XT1bcy5fc2NhbGUoLjcsQVtcIkdSLklDLkZGLkVNRVJHRU5DWSBPUEVSQVRJT05cIl0pLEFbXCJBQy5NMS5FTUVSR0VOQ1kgU1RBR0lORyBBUkVBXCJdXSxJWzEzMTIwOF09W0FbXCJHUi5JQy5GRi5TVVBQTFlcIl0sQVtcIkdSLklDLldBVEVSXCJdXSxJWzEzMTMwMF09W0FbXCJHUi5JQy5FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl1dLElbMTMxMzAxXT1bQVtcIkFDLklDLkVNVCBTVEFUSU9OIExPQ0FUSU9OXCJdXSxJWzEzMTMwMl09W0FbXCJBQy5JQy5IRUFMVEggREVQQVJUTUVOVCBGQUNJTElUWVwiXV0sSVsxMzEzMDNdPVtBW1wiQUMuSUMuTUVESUNBTCBGQUNJTElUSUVTIE9VVFBBVElFTlRcIl1dLElbMTMxMzA0XT1bQVtcIkFDLklDLk9QRVJBVElPTi9FTUVSR0VOQ1kgTUVESUNBTCBPUEVSQVRJT05cIl1dLElbMTMxMzA1XT1bQVtcIkFDLklDLlBIQVJNQUNZXCJdXSxJWzEzMTMwNl09W0FbXCJBQy5JQy5UUklBR0VcIl1dLElbMTMxNDAwXT1bQVtcIkdSLklDLkZJUkUgUFJPVEVDVElPTlwiXV0sSVsxMzE0MDFdPVtBW1wiQUMuSUMuRklSRSBIWURSQU5UXCJdXSxJWzEzMTQwMl09W3MuX3NjYWxlKDEuNSxBW1wiR1IuSUMuRklSRSBQUk9URUNUSU9OXCJdKV0sSVsxMzE0MDNdPVtBW1wiQUMuSUMuT1RIRVIgV0FURVIgU1VQUExZIExPQ0FUSU9OXCJdXSxJWzEzMTUwMF09W0FbXCJHUi5JQy5GRi5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMTMxNTAxXT1bQVtcIkdSLklDLkJVUkVBVSBPRiBBTENPSE9MLCBUT0JBQ0NPLCBGSVJFQVJNUyBBTkQgRVhQTE9TSVZFUyAoQVRGKSAoREVQQVJUTUVOVCBPRiBKVVNUSUNFKVwiXV0sSVsxMzE1MDJdPVtBW1wiR1IuSUMuRkYuQk9SREVSIFBBVFJPTFwiXV0sSVsxMzE1MDNdPVtBW1wiR1IuSUMuRkYuQ1VTVE9NUyBTRVJWSUNFXCJdXSxJWzEzMTUwNF09W0FbXCJHUi5JQy5EUlVHIEVORk9SQ0VNRU5UIEFHRU5DWSAoREVBKVwiXV0sSVsxMzE1MDVdPVtBW1wiR1IuSUMuRkYuREVQQVJUTUVOVCBPRiBKVVNUSUNFIChET0opXCJdXSxJWzEzMTUwNl09W0FbXCJHUi5JQy5GRURFUkFMIEJVUkVBVSBPRiBJTlZFU1RJR0FUSU9OIChGQkkpXCJdXSxJWzEzMTUwN109W0FbXCJHUi5JQy5MQVcgRU5GT1JDRU1FTlRcIl1dLElbMTMxNTA4XT1bQVtcIkdSLklDLkZGLlBSSVNPTlwiXV0sSVsxMzE1MDldPVtBW1wiR1IuSUMuVU5JVEVEIFNUQVRFUyBTRUNSRVQgU0VSVklDRShUUkVBUykgKFVTU1MpXCJdXSxJWzEzMTUxMF09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTiBTRUNVUklUWSBBR0VOQ1kgKFRTQSlcIl1dLElbMTMxNTExXT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVCBWRVNTRUxcIl1dLElbMTMxNTEyXT1bQVtcIkdSLklDLkZGLlVTIE1BUlNIQUxTIFNFUlZJQ0VcIl1dLElbMTMxNTEzXT1bQVtcIlNULklDLklOVEVSTkFMIFNFQ1VSSVRZIEZPUkNFXCJdXSxJWzE0ZTRdPVtBW1wiQUMuSUMuRklSRSBFVkVOVFwiXV0sSVsxNDAxMDBdPVtBW1wiQUMuSUMuRklSRSBPUklHSU5cIl1dLElbMTQwMjAwXT1bQVtcIkFDLklDLlNNT0tFXCJdXSxJWzE0MDMwMF09W0FbXCJBQy5JQy5IT1QgU1BPVFwiXV0sSVsxNDA0MDBdPVtBW1wiQUMuSUMuTk9OLVJFc0lkRU5USUFMIEZJUkVcIl1dLElbMTQwNTAwXT1bQVtcIkFDLklDLlJFc0lkRU5USUFMIEZJUkVcIl1dLElbMTQwNjAwXT1bQVtcIkFDLklDLlNDSE9PTCBGSVJFXCJdXSxJWzE0MDcwMF09W0FbXCJBQy5JQy5TUEVDSUFMIE5FRURTIEZJUkVcIl1dLElbMTQwODAwXT1bQVtcIkFDLklDLldJTEQgRklSRVwiXV0sSVsxNWU0XT1bXSxJWzE1MDEwMF09W0FbXCJBQy5JQy5IQVpBUkRPVVMgTUFURVJJQUxTIElOQ0lERU5UXCJdXSxJWzE1MDEwMV09W0FbXCJBQy5JQy5DSEVNSUNBTCBBR0VOVFwiXV0sSVsxNTAxMDJdPVtBW1wiQUMuSUMuQ09SUk9TSVZFIE1BVEVSSUFMXCJdXSxJWzE1MDEwM109W0FbXCJBQy5JQy5IQVpBUkRPVVMgV0hFTiBXRVRcIl1dLElbMTUwMTA0XT1bQVtcIkFDLklDLkVYUExPU0lWRSBNQVRFUklBTFwiXV0sSVsxNTAxMDVdPVtBW1wiQUMuSUMuRkxBTU1BQkxFIEdBU1wiXV0sSVsxNTAxMDZdPVtBW1wiQUMuSUMuRkxBTU1BQkxFIExJUVVJRFwiXV0sSVsxNTAxMDddPVtBW1wiQUMuSUMuRkxBTU1BQkxFIFNPTElEXCJdXSxJWzE1MDEwOF09W0FbXCJBQy5JQy5OT04tRkxBTU1BQkxFIEdBU1wiXV0sSVsxNTAxMDldPVtBW1wiQUMuSUMuT1JHQU5JQyBQRVJPWElERVwiXV0sSVsxNTAxMTBdPVtBW1wiQUMuSUMuT1hJRElaRVJcIl1dLElbMTUwMTExXT1bQVtcIkFDLklDLlJBRElPQUNUSVZFIE1BVEVSSUFMXCJdXSxJWzE1MDExMl09W0FbXCJBQy5JQy5TUE9OVEFORU9VU0xZIENPTUJVU1RJQkxFIE1BVEVSSUFMXCJdXSxJWzE1MDExM109W0FbXCJBQy5JQy5UT1hJQyBHQVNcIl1dLElbMTUwMTE0XT1bQVtcIkFDLklDLlRPWElDIElORkVDVElPVVMgTUFURVJJQUxcIl1dLElbMTUwMTE1XT1bQVtcIkFDLklDLlVORVhQTE9ERUQgT1JETkFOQ0VcIl1dLElbMTZlNF09W0FbXCJHUi5JQy5UUkFOU1BPUlRBVElPTlwiXV0sSVsxNjAxMDBdPVtBW1wiU1QuSUMuSElKQUNLSU5HIChBSVJQTEFORSlcIl1dLElbMTYwMjAwXT1bQVtcIlNULklDLkhJSkFDS0lORyAoQk9BVClcIl1dLElbMTYwMzAwXT1bQVtcIkdSLkVRLlRSQUlOIExPQ09NT1RJVkVcIl1dLElbMTYwNDAwXT1bQVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdXSxJWzE2MDUwMF09W0FbXCJTVC5JQy5FWFBMT1NJT05cIl0scy5fc2NhbGUoLjcsQVtcIlNULklDLktOT1dOIElOU1VSR0VOVCBWRUhJQ0xFXCJdKV0sSVsxN2U0XT1bQVtcIlNULklDLk5BVFVSQUwgRVZFTlRcIl1dLElbMTcwMTAwXT1bQVtcIlNULklDLkdFT0xPR0lDXCJdXSxJWzE3MDEwMV09W0FbXCJBQy5JQy5BRlRFUlNIT0NLXCJdXSxJWzE3MDEwMl09W0FbXCJBQy5JQy5BVkFMQU5DSEVcIl1dLElbMTcwMTAzXT1bQVtcIkFDLklDLkVBUlRIUVVBS0UgRVBJQ0VOVEVSXCJdXSxJWzE3MDEwNF09W0FbXCJBQy5JQy5MQU5EU0xJREVcIl1dLElbMTcwMTA1XT1bQVtcIkFDLklDLlNVQlNJREVOQ0VcIl1dLElbMTcwMTA2XT1bQVtcIkFDLklDLlZPTENBTklDIEVSVVBUSU9OXCJdXSxJWzE3MDEwN109W0FbXCJBQy5JQy5WT0xDQU5JQyBUSFJFQVRcIl1dLElbMTcwMTA4XT1bQVtcIkFDLklDLkNBVkUgRU5UUkFOQ0VcIl1dLElbMTcwMjAwXT1bQVtcIlNULklDLkhZRFJPLU1FVEVPUk9MT0dJQ0FMXCJdXSxJWzE3MDIwMV09W0FbXCJBQy5JQy5EUk9VR0hUXCJdXSxJWzE3MDIwMl09W0FbXCJBQy5JQy5GTE9PRFwiXV0sSVsxNzAyMDNdPVtBW1wiQUMuSUMuVFNVTkFNSVwiXV0sSVsxNzAzMDBdPVtBW1wiU1QuSUMuSU5GRVNUQVRJT05cIl1dLElbMTcwMzAxXT1bQVtcIkFDLklDLkJJUkRcIl1dLElbMTcwMzAyXT1bQVtcIkFDLklDLklOU0VDVFwiXV0sSVsxNzAzMDNdPVtBW1wiQUMuSUMuTUlDUk9CSUFMXCJdXSxJWzE3MDMwNF09W0FbXCJBQy5JQy5SRVBUSUxFXCJdXSxJWzE3MDMwNV09W0FbXCJBQy5JQy5ST0RFTlRcIl1dLElbMThlNF09W10sSVsxODAxMDBdPVtBW1wiU1QuSUMuSU5ESVZJRFVBTFwiXSxBW1wiU1QuTTEuTEVBREVSXCJdLEFbXCJTVC5NMi5SRUxJR0lPVVNcIl1dLElbMTgwMjAwXT1bQVtcIlNULklDLklORElWSURVQUxcIl0sQVtcIlNULk0xLlNQRUFLRVJcIl1dLHRbXCIwMVwiXT1bQVtcIlNULk0xLkFTU0FTU0lOQVRJT05cIl1dLHRbXCIwMlwiXT1bQVtcIlNULk0xLkVYRUNVVElPTiAoV1JPTkdGVUwgS0lMTElORylcIl1dLHRbXCIwM1wiXT1bQVtcIlNULk0xLkhJSkFDS0lORy9ISUpBQ0tFRFwiXV0sdFtcIjA0XCJdPVtBW1wiU1QuTTEuSE9VU0UtVE8tSE9VU0VcIl1dLHRbXCIwNVwiXT1bQVtcIlNULk0xLktJRE5BUFBJTkdcIl1dLHRbXCIwNlwiXT1bQVtcIlNULk0xLk1VUkRFUlwiXV0sdFtcIjA3XCJdPVtBW1wiU1QuTTEuUElSQUNZXCJdXSx0W1wiMDhcIl09W0FbXCJTVC5NMS5SQVBFXCJdXSx0W1wiMDlcIl09W0FbXCJTVC5NMS5XUklUVEVOIFBTWUNIT0xPR0lDQUwgT1BFUkFUSU9OU1wiXV0sdFsxMF09W0FbXCJTVC5NMS5QSVJBVEVcIl1dLHRbMTFdPVtBW1wiU1QuTTEuRkFMU0VcIl1dLHRbMTJdPVtBW1wiU1QuTTEuRklORFwiXV0sdFsxM109W0FbXCJTVC5NMS5GT1VORCBBTkQgQ0xFQVJFRFwiXV0sdFsxNF09W0FbXCJTVC5NMS5IT0FYIChERUNPWSlcIl1dLHRbMTVdPVtBW1wiU1QuTTEuQVRURU1QVEVEXCJdXSx0WzE2XT1bQVtcIlNULk0xLkFDQ0lERU5UXCJdXSx0WzE3XT1bQVtcIlNULk0xLklOQ0lERU5UXCJdXSx0WzE4XT1bQVtcIlNULk0xLlRIRUZUXCJdXSx0WzE5XT1bQVtcIkdSLk0xLkhJSkFDS0VSXCJdXSx0WzIwXT1bQVtcIkdSLk0xLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMVwiXT1bQVtcIkdSLk0yLkNZQkVSU1BBQ0VcIl1dLEVbXCIwMlwiXT1bQVtcIkdSLk0yLlNFQ1VSSVRZIEZPUkNFIEFTU0lTVEFOQ0VcIl1dKX19LElJPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpmLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiNTBcIiE9ZSYmXCI1MVwiIT1lJiZcIjUyXCIhPWUmJlwiNTNcIiE9ZSYmXCI1NFwiIT1lfHwoSVsxMWU0XT1bXSxJWzExMDEwMF09W0FbXCJTSS5JQy5DT01NVU5JQ0FUSU9OU1wiXV0sSVsxMTAyMDBdPVtBW1wiU0kuSS5KQU1NRVIgLyBFTEVDVFJPTklDIENPVU5URVItTUVBU1VSRVNcIl1dLElbMTEwMzAwXT1bQVtcIlNJLklDLlJBREFSXCJdXSx0W1wiMDFcIl09W0FbXCJTSS5NMS5BTlRJLUFJUkNSQUZUIEZJUkUgQ09OVFJPTFwiXV0sdFtcIjAyXCJdPVtBW1wiU0kuTTEuQUlSQk9STkUgU0VBUkNIIEFORCBCT01CSU5HXCJdXSx0W1wiMDNcIl09W0FbXCJTSS5NMS5BSVJCT1JORSBJTlRFUkNFUFRcIl1dLHRbXCIwNFwiXT1bQVtcIlNJLk0xLkFMVElNRVRFUlwiXV0sdFtcIjA1XCJdPVtBW1wiU0kuTTEuQUlSQk9STkUgUkVDT05OQUlTU0FOQ0UgQU5EIE1BUFBJTkdcIl1dLHRbXCIwNlwiXT1bQVtcIlNJLk0xLkFJUiBUUkFGRklDIENPTlRST0xcIl1dLHRbXCIwN1wiXT1bQVtcIlNJLk0xLkJFQUNPTiBUUkFOU1BPTkRFUiAoTk9UIElGRilcIl1dLHRbXCIwOFwiXT1bQVtcIlNJLk0xLkJBVFRMRUZJRUxEIFNVUlZFSUxMQU5DRVwiXV0sdFtcIjA5XCJdPVtBW1wiU0kuTTEuQ09OVFJPTExFRCBBUFBST0FDSFwiXV0sdFsxMF09W0FbXCJTSS5NMS5DT05UUk9MTEVEIElOVEVSQ0VQVFwiXV0sdFsxMV09W0FbXCJTSS5NMS5DRUxMVUxBUi9NT0JJTEVcIl1dLHRbMTJdPVtBW1wiU0kuTTEuQ09BU1RBTCBTVVJWRUlMTEFOQ0VcIl1dLHRbMTNdPVtBW1wiU0kuTTEuREVDT1kvTUlNSUNcIl1dLHRbMTRdPVtBW1wiU0kuTTEuREFUQSBUUkFOU01JU1NJT05cIl1dLHRbMTVdPVtBW1wiU0kuTTEuRUFSVEggU1VSVkVJTExBTkNFXCJdXSx0WzE2XT1bQVtcIlNJLk0xLkVBUkxZIFdBUk5JTkdcIl1dLHRbMTddPVtBW1wiU0kuTTEuRklSRSBDT05UUk9MXCJdXSx0WzE4XT1bQVtcIlNJLk0xLkdST1VORCBNQVBQSU5HXCJdXSx0WzE5XT1bQVtcIlNJLk0xLkhFSUdIVCBGSU5ESU5HXCJdXSx0WzIwXT1bQVtcIlNJLk0xLkhBUkJPUiBTVVJWRUlMTEFOQ0VcIl1dLHRbMjFdPVtBW1wiU0kuTTEuSURFTlRJRklDQVRJT04sIEZSSUVORCBPUiBGT0UgKElOVEVSUk9HQVRPUilcIl1dLHRbMjJdPVtBW1wiU0kuTTEuSU5TVFJVTUVOVCBMQU5ESU5HIFNZU1RFTVwiXV0sdFsyM109W0FbXCJTSS5NMS5JT05PU1BIRVJJQyBTT1VORElOR1wiXV0sdFsyNF09W0FbXCJTSS5NMS5JREVOVElGSUNBVElPTiwgRlJJRU5EIE9SIEZPRSAoVFJBTlNQT05ERVIpXCJdXSx0WzI1XT1bQVtcIlNJLk0xLkJBUlJBR0UgSkFNTUVSXCJdXSx0WzI2XT1bQVtcIlNJLk0xLkNMSUNLIEpBTU1FUlwiXV0sdFsyN109W0FbXCJTSS5NMS5ERUNFUFRJVkUgSkFNTUVSXCJdXSx0WzI4XT1bQVtcIlNJLk0xLkZSRVFVRU5DWSBTV0VQVCBKQU1NRVJcIl1dLHRbMjldPVtBW1wiU0kuTTEuSkFNTUVSIChHRU5FUkFMKVwiXV0sdFszMF09W0FbXCJTSS5NMS5OT0lTRSBKQU1NRVJcIl1dLHRbMzFdPVtBW1wiU0kuTTEuUFVMU0VEIEpBTU1FUlwiXV0sdFszMl09W0FbXCJTSS5NMS5SRVBFQVRFUiBKQU1NRVJcIl1dLHRbMzNdPVtBW1wiU0kuTTEuU1BPVCBOT0lTRSBKQU1NRVJcIl1dLHRbMzRdPVtBW1wiU0kuTTEuVFJBTlNQT05ERVIgSkFNTUVSXCJdXSx0WzM1XT1bQVtcIlNJLk0xLk1JU1NJTEUgQUNRVUlTSVRJT05cIl1dLHRbMzZdPVtBW1wiU0kuTTEuTUlTU0lMRSBDT05UUk9MXCJdXSx0WzM3XT1bQVtcIlNJLk0xLk1JU1NJTEUgRE9XTkxJTktcIl1dLHRbMzhdPVtBW1wiU0kuTTEuTUVURU9ST0xPR0lDQUxcIl1dLHRbMzldPVtBW1wiU0kuTTEuTVVMVEktRlVOQ1RJT05cIl1dLHRbNDBdPVtBW1wiU0kuTTEuTUlTU0lMRSBHVUlEQU5DRVwiXV0sdFs0MV09W0FbXCJTSS5NMS5NSVNTSUxFIEhPTUlOR1wiXV0sdFs0Ml09W0FbXCJTSS5NMS5NSVNTSUxFIFRSQUNLSU5HXCJdXSx0WzQzXT1bQVtcIlNJLk0xLk5BVklHQVRJT05BTC9HRU5FUkFMXCJdXSx0WzQ0XT1bQVtcIlNJLk0xLk5BVklHQVRJT05BTC9ESVNUQU5DRSBNRUFTVVJJTkcgRVFVSVBNRU5UXCJdXSx0WzQ1XT1bQVtcIlNJLk0xLk5BVklHQVRJT04vVEVSUkFJTiBGT0xMT1dJTkdcIl1dLHRbNDZdPVtBW1wiU0kuTTEuTkFWSUdBVElPTkFML1dFQVRIRVIgQVZPSURBTkNFXCJdXSx0WzQ3XT1bQVtcIlNJLk0xLk9NTkktTElORSBPRiBTSUdIVCAoTE9TKVwiXV0sdFs0OF09W0FbXCJTSS5NMS5QUk9YSU1JVFkgVVNFXCJdXSx0WzQ5XT1bQVtcIlNJLk0xLlBPSU5ULVRPLVBPSU5UIExJTkUgT0YgU0lHSFQgKExPUylcIl1dLHRbNTBdPVtBW1wiU0kuTTEuSU5TVFJVTUVOVEFUSU9OXCJdXSx0WzUxXT1bQVtcIlNJLk0xLlJBTkdFIE9OTFlcIl1dLHRbNTJdPVtBW1wiU0kuTTEuU09OT0JVT1lcIl1dLHRbNTNdPVtBW1wiU0kuTTEuU0FURUxMSVRFIERPV05MSU5LXCJdXSx0WzU0XT1bQVtcIlNJLk0xLlNQQUNFXCJdXSx0WzU1XT1bQVtcIlNJLk0xLlNVUkZBQ0UgU0VBUkNIXCJdXSx0WzU2XT1bQVtcIlNJLk0xLlNIRUxMIFRSQUNLSU5HXCJdXSx0WzU3XT1bQVtcIlNJLk0xLlNBVEVMTElURSBVUExJTktcIl1dLHRbNThdPVtBW1wiU0kuTTEuVEFSR0VUIEFDUVVJU0lUSU9OXCJdXSx0WzU5XT1bQVtcIlNJLk0xLlRBUkdFVCBJTExVTUlOQVRJT05cIl1dLHRbNjBdPVtBW1wiU0kuTTEuVFJPUE9TUEhFUklDIFNDQVRURVJcIl1dLHRbNjFdPVtBW1wiU0kuTTEuVEFSR0VUIFRSQUNLSU5HXCJdXSx0WzYyXT1bQVtcIlNJLk0xLlVOS05PV05cIl1dLHRbNjNdPVtBW1wiU0kuTTEuVklERU8gUkVNT1RJTkdcIl1dLHRbNjRdPVtBW1wiU0kuTTEuRVhQRVJJTUVOVEFMXCJdXSx0WzY1XT1bQVtcIlNJLk0xLkNZQkVSXCJdXSxFW1wiMDFcIl09W0FbXCJTSS5NMi5DWUJFUlwiXV0pfX07dmFyIHRJPXt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpWLGxhYmVsczpmdW5jdGlvbihJKXt2YXIgdD17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjMwLGZvbnRzaXplOjMwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxFPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotNzAsZm9udHNpemU6NDB9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjQ1LGZvbnRzaXplOjQwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MCxmb250c2l6ZTo4MH0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NTAseTotMzAsZm9udHNpemU6NDB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5OjEwLGZvbnRzaXplOjQwfX0sUj17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTcwLGZvbnRzaXplOjQwfSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo0NSxmb250c2l6ZTo0MH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjAsZm9udHNpemU6ODB9LHVuaXF1ZURlc2lnbmF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjIwLGZvbnRzaXplOjMwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fTtJWzEzMDEwMF09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi03MCxmb250c2l6ZTo0MH0sYWRkaXRpb25hbEluZm9ybWF0aW9uMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yNSxmb250c2l6ZTozMH0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6NDUsZm9udHNpemU6NDB9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTowLGZvbnRzaXplOjgwfSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo1MCx5Oi0zMCxmb250c2l6ZTo0MH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjUwLHk6MTAsZm9udHNpemU6NDB9fSxJWzEzMDIwMF09dCxJWzEzMDMwMF09dCxJWzEzMDQwMF09e30sSVsxMzA1MDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjExNSxmb250c2l6ZTo0NSxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVsxMzA2MDBdPXt9LElbMTMwNzAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMTUsZm9udHNpemU6NDUsZm9udHdlaWdodDpcImJvbGRcIn19LElbMTMwODAwXT10LElbMTMwOTAwXT10LElbMTMxMDAxXT1FLElbMTMxMDAyXT1FLElbMTMxMDAzXT1FLElbMTMxMTAwXT10LElbMTMxMjAwXT10LElbMTMxMzAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTozMCxmb250c2l6ZTo0MCxmb250d2VpZ2h0OlwiYm9sZFwifX0sSVsxMzEzMDFdPXt9LElbMTMxNDAwXT10LElbMTMxNTAwXT10LElbMTMxNjAwXT10LElbMTMxNzAwXT17fSxJWzEzMTgwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseToxMjUsZm9udHNpemU6NzB9fSxJWzEzMTkwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxODAseToxMTUsZm9udHNpemU6NDB9fSxJWzEzMmUzXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjEyMCx5OjgwLGZvbnRzaXplOjQwfX0sSVsxMzIxMDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTAwLHk6MTEwLGZvbnRzaXplOjM1LGZpbGw6XCJyZ2IoMjU1LDI1NSwyNTUpXCIsZm9udHdlaWdodDpcImJvbGRcIn19LElbMTYwMTAwXT17fSxJWzE2MDIwMF09e30sSVsxNjAyMDFdPXt9LElbMTYwMjAyXT17fSxJWzE2MDIwM109e30sSVsxNjAyMDRdPXt9LElbMTYwMjA1XT17fSxJWzE2MDMwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxMTAseTo5MCxmb250c2l6ZTo0MH19LElbMTYwNDAwXT1FLElbMThlNF09e30sSVsxODAxMDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzMCxmb250c2l6ZTozNX19LElbMTgwMjAwXT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzAsZm9udHNpemU6MzV9fSxJWzE4MDMwMF09e30sSVsxODA0MDBdPXt9LElbMTgwNTAwXT17fSxJWzE4MDYwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo3MCxmb250c2l6ZTozNX19LElbMTgwNzAwXT17fSxJWzE4MDgwMF09e30sSVsxODA5MDBdPXt9LElbMTgxZTNdPXt9LElbMTgxMTAwXT17fSxJWzE4MTIwMF09e30sSVsxODEzMDBdPXt9LElbMTgxNDAwXT17fSxJWzE4MTUwMF09e30sSVsxODE2MDBdPXt9LElbMTgxNzAwXT17fSxJWzE4MTgwMF09e30sSVsxODE5MDBdPXt9LElbMTgyZTNdPXt9LElbMTgyMTAwXT17fSxJWzE4MjIwMF09e30sSVsxODIzMDBdPXt9LElbMTgyNDAwXT17fSxJWzE4MjUwMF09e30sSVsyMDA0MDBdPXt9LElbMjAwNTAwXT17fSxJWzIwMDYwMF09e30sSVsyMDA3MDBdPXt9LElbMjEwMTAwXT17fSxJWzIxMDIwMF09e30sSVsyMTAzMDBdPXt9LElbMjEwNDAwXT17fSxJWzIxMDUwMF09e30sSVsyMTA2MDBdPXthbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseTo3MCxmb250c2l6ZTozNX19LElbMjEwNzAwXT17fSxJWzIxMDgwMF09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6ODAsZm9udHNpemU6MzV9fSxJWzIxMDkwMF09e30sSVsyMTFlM109e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjgwLGZvbnRzaXplOjM1fX0sSVsyMTExMDBdPXt9LElbMjExMjAwXT17fSxJWzIxMTMwMF09e30sSVsyMTE0MDBdPXt9LElbMjExNTAwXT17fSxJWzIxMTYwMF09e30sSVsyMTE3MDBdPXt9LElbMjExODAwXT17fSxJWzIxMTkwMF09e30sSVsyMTJlM109e30sSVsyMTIxMDBdPXt9LElbMjEyMjAwXT17fSxJWzIxMjMwMF09e30sSVsyMTI0MDBdPXt9LElbMjEyNTAwXT17fSxJWzIxMjYwMF09e30sSVsyMTI3MDBdPXt9LElbMjEyODAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTE1LGZvbnRzaXplOjQ1fX0sSVsyMTI5MDBdPXt9LElbMjEyOTAxXT17fSxJWzIxMjkwMl09e30sSVsyMTI5MDNdPXt9LElbMjEyOTA0XT17fSxJWzIxM2UzXT17fSxJWzIxMzEwMF09e30sSVsyMTMyMDBdPXt9LElbMjEzMzAwXT17fSxJWzIxMzQwMF09e30sSVsyMTM1MDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6NzAsZm9udHNpemU6MzV9LGFkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDFdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTQwLHk6NzAsZm9udHNpemU6MzV9LGFkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDJdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTAzXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUwNF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNDAseTo3MCxmb250c2l6ZTozNX0sYWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUwNV09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MDZdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTA3XT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjcwLGZvbnRzaXplOjM1fSxhZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTA4XT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjcwLGZvbnRzaXplOjM1fSxhZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTA5XT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUxMF09e30sSVsyMTM1MTFdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTEyXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNTAseToxMDUsZm9udHNpemU6MzV9fSxJWzIxMzUxM109e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTUwLHk6MTA1LGZvbnRzaXplOjM1fX0sSVsyMTM1MTRdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNTE1XT17dW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE0MCx5OjcwLGZvbnRzaXplOjM1fSxhZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE1MCx5OjEwNSxmb250c2l6ZTozNX19LElbMjEzNjAwXT17fSxJWzIxMzcwMF09e30sSVsyMTM4MDBdPXt9LElbMjEzOTAwXT17fSxJWzIxNGUzXT17fSxJWzIxNDEwMF09e30sSVsyMTQyMDBdPXt9LElbMjE0MzAwXT17fSxJWzIxNDQwMF09e30sSVsyMTQ1MDBdPXt9LElbMjE0NjAwXT17fSxJWzIxNDcwMF09e30sSVsyMTQ4MDBdPXt9LElbMjE0OTAwXT17ZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxODAseTo3NSxmb250c2l6ZTozMH0sZHRnMTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTgwLHk6MTAwLGZvbnRzaXplOjMwfSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTgwLHk6MTI1LGZvbnRzaXplOjMwfX0sSVsyMTVlM109e30sSVsyMTUxMDBdPXt9LElbMjE1MjAwXT17fSxJWzIxNTMwMF09e30sSVsyMTU0MDBdPXt9LElbMjE1NTAwXT17fSxJWzIxNTYwMF09e2R0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTgwLHk6NzUsZm9udHNpemU6MzB9LGR0ZzE6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE4MCx5OjEwMCxmb250c2l6ZTozMH0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE4MCx5OjEyNSxmb250c2l6ZTozMH19LElbMjE1NzAwXT17fSxJWzIxNTgwMF09e30sSVsyMTU5MDBdPXt9LElbMjE2ZTNdPXt9LElbMjE2MTAwXT17fSxJWzIxNjIwMF09e30sSVsyMTYzMDBdPXt9LElbMjE2NDAwXT17fSxJWzIxNjUwMF09e30sSVsyMTY2MDBdPXt9LElbMjE2NzAwXT17fSxJWzIxNjgwMF09e30sSVsyMTY5MDBdPXt9LElbMjE3ZTNdPXt9LElbMjE3MTAwXT17fSxJWzIxNzIwMF09e30sSVsyMTczMDBdPXt9LElbMjE3NDAwXT17fSxJWzIxNzUwMF09e30sSVsyMTc2MDBdPXt9LElbMjE3NzAwXT17fSxJWzIxNzgwMF09e30sSVsyMTc5MDBdPXt9LElbMjE4ZTNdPXt9LElbMjE4MTAwXT17fSxJWzIxODIwMF09e30sSVsyMTgzMDBdPXt9LElbMjE4NTAwXT17fSxJWzIxODYwMF09e30sSVsyMTg3MDBdPXt9LElbMjE4ODAwXT17fSxJWzIxODkwMF09e30sSVsyMTllM109e30sSVsyMTkxMDBdPXt9LElbMjE5MjAwXT17fSxJWzI0MDYwMV09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6MTQ1LGZvbnRzaXplOjQwfSxhbHRpdHVkZURlcHRoOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6ODAseToxNDUsZm9udHNpemU6NDB9LHRhcmdldE51bWJlcjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6ODAsZm9udHNpemU6NDB9fSxJWzI0MDYwMl09e3RhcmdldE51bWJlcjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6ODAsZm9udHNpemU6NDB9fSxJWzI0MDYwM109e30sSVsyNDA5MDBdPXt1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTk1LHk6MTEwLGZvbnRzaXplOjM1LGZvbnR3ZWlnaHQ6XCJib2xkXCJ9fSxJWzI1MDEwMF09RSxJWzI1MDIwMF09RSxJWzI1MDMwMF09RSxJWzI1MDQwMF09RSxJWzI1MDUwMF09RSxJWzI1MDYwMF09e3VuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxODAseTo4MCxmb250c2l6ZTozNX19LElbMjcwNjAxXT17fSxJWzI3MDYwMl09e30sSVsyNzA2MDNdPXt9LElbMjcwNzAxXT17fSxJWzI4MDEwMF09e30sSVsyODAyMDBdPXt9LElbMjgwMjAxXT17fSxJWzI4MDMwMF09e30sSVsyODA0MDBdPXt9LElbMjgwNTAwXT17fSxJWzI4MDYwMF09e30sSVsyODA3MDBdPXt9LElbMjgwODAwXT10LElbMjgwOTAwXT17fSxJWzI4MWUzXT17fSxJWzI4MTEwMF09e30sSVsyODEyMDBdPXt9LElbMjgxMzAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTozMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTozMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6OTAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTM1LGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjkwLGZvbnRzaXplOjM1fX0sSVsyODEzMDFdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjMwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjMwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTo5MCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzUsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6OTAsZm9udHNpemU6MzV9fSxJWzI4MTQwMF09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6MzAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6MzAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjkwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTo5MCxmb250c2l6ZTozNX19LElbMjgxNTAwXT17YWRkaXRpb25hbEluZm9ybWF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTozMCxmb250c2l6ZTozNX0sZHRnOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTozMCxmb250c2l6ZTozNX0saG9zdGlsZTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6OTAsZm9udHNpemU6MzV9LGxvY2F0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6MTM1LGZvbnRzaXplOjM1fSxxdWFudGl0eTp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5Oi0yMCxmb250c2l6ZTozNX0sdW5pcXVlRGVzaWduYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjkwLGZvbnRzaXplOjM1fX0sSVsyODE2MDBdPXthZGRpdGlvbmFsSW5mb3JtYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjMwLGZvbnRzaXplOjM1fSxkdGc6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwiZW5kXCIseDo0MCx5OjMwLGZvbnRzaXplOjM1fSxob3N0aWxlOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcInN0YXJ0XCIseDoxNjAseTo5MCxmb250c2l6ZTozNX0sbG9jYXRpb246e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseToxMzUsZm9udHNpemU6MzV9LHF1YW50aXR5OntzdHJva2U6ITEsdGV4dGFuY2hvcjpcIm1pZGRsZVwiLHg6MTAwLHk6LTIwLGZvbnRzaXplOjM1fSx1bmlxdWVEZXNpZ25hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6OTAsZm9udHNpemU6MzV9fSxJWzI4MTcwMF09e2FkZGl0aW9uYWxJbmZvcm1hdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTYwLHk6MzAsZm9udHNpemU6MzV9LGR0Zzp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJlbmRcIix4OjQwLHk6MzAsZm9udHNpemU6MzV9LGhvc3RpbGU6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwic3RhcnRcIix4OjE2MCx5OjkwLGZvbnRzaXplOjM1fSxsb2NhdGlvbjp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJtaWRkbGVcIix4OjEwMCx5OjEzNSxmb250c2l6ZTozNX0scXVhbnRpdHk6e3N0cm9rZTohMSx0ZXh0YW5jaG9yOlwibWlkZGxlXCIseDoxMDAseTotMjAsZm9udHNpemU6MzV9LHVuaXF1ZURlc2lnbmF0aW9uOntzdHJva2U6ITEsdGV4dGFuY2hvcjpcImVuZFwiLHg6NDAseTo5MCxmb250c2l6ZTozNX19LElbMjgxODAwXT10LElbMjgxODAxXT10LElbMjgxODAyXT10LElbMjgxODAzXT10LElbMjgxODA0XT10LElbMjgxODA1XT10LElbMjgxODA2XT10LElbMjgxODA3XT10LElbMjgxODA4XT10LElbMjgxODA5XT10LElbMjgxOTAxXT17fSxJWzI4MTkwMl09e30sSVsyODE5MDNdPXt9LElbMjgyMDAxXT17YWx0aXR1ZGVEZXB0aDp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTIwLHk6NjAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbMjgyMDAyXT17YWx0aXR1ZGVEZXB0aDp7c3Ryb2tlOiExLHRleHRhbmNob3I6XCJzdGFydFwiLHg6MTE1LHk6NjAsZm9udHNpemU6NDAsZm9udHdlaWdodDpcImJvbGRcIn19LElbMzIwMTAwXT17fSxJWzMyMDEwMV09dCxJWzMyMDEwMl09dCxJWzMyMDEwM109dCxJWzMyMDEwNF09dCxJWzMyMDIwMF09dCxJWzMyMDMwMF09dCxJWzMyMDQwMF09dCxJWzMyMDUwMF09dCxJWzMyMDYwMF09dCxJWzMyMDcwMF09dCxJWzMyMDgwMF09dCxJWzMyMDkwMF09dCxJWzMyMWUzXT10LElbMzIxMTAwXT10LElbMzIxMjAwXT10LElbMzIxMzAwXT10LElbMzIxNDAwXT10LElbMzIxNTAwXT10LElbMzIxNjAwXT10LElbMzIxNzAwXT1SLElbMzIxNzAxXT1SLElbMzIxNzAyXT1SLElbMzIxNzAzXT1SLElbMzIxNzA0XT1SLElbMzIxNzA1XT1SLElbMzIxNzA2XT17fSxJWzMyMTcwN109RSxJWzMyMTcwOF09RSxJWzMyMTcwOV09RSxJWzMyMTcxMF09RSxJWzMyMTcxMV09RSxJWzMyMTcxMl09RSxJWzMyMTcxM109RSxJWzMyMTcxNF09RSxJWzMyMTcxNV09RSxJWzMyMTcxNl09RSxJWzMyMTgwMF09UixJWzM0MDMwMF09e30sSVszNDA0MDBdPXt9LElbMzQwOTAwXT17fSxJWzM0MTQwMF09e30sSVszNDE2MDBdPXt9LElbMzQyODAwXT17fSxJWzM1MDEwMV09e30sSVszNTAxMDJdPXt9LElbMzUwMTAzXT17fSxJWzM1MDIwMV09e30sSVszNTAyMDJdPXt9LElbMzUwMjAzXT17fX0saWNvbnM6ZnVuY3Rpb24oSSx0LEUsUixlLEEsQyl7XCIyNVwiPT1lJiYoSVsxMzAxMDBdPUFbXCJUUC5BQ1RJT04gUE9JTlRcIl0sUlsxMzAxMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMDIwMF09QVtcIlRQLkFDVElPTiBBTU5FU1RZIFBPSU5UXCJdLFJbMTMwMjAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzAzMDBdPUFbXCJUUC5BQ1RJT04gQ0hFQ0sgUE9JTlRcIl0sUlsxMzAzMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMDQwMF09QVtcIlRQLkNFTlRSRSBPRiBNQUlOIEVGRk9SVFwiXSxSWzEzMDQwMF09e3gxOjI1LHgyOjE3NSx5MTo2NSx5MjoxMzV9LElbMTMwNTAwXT1BW1wiVFAuQ09OVEFDVCBQT0lOVFwiXSxSWzEzMDUwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMTMwNjAwXT1BW1wiVFAuQ09PUkRJTkFUSU9OIFBPSU5UXCJdLFJbMTMwNjAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsxMzA3MDBdPUFbXCJUUC5ERUNJU0lPTiBQT0lOVFwiXSxSWzEzMDcwMF09e3gxOjMwLHgyOjE3MCx5MToyNSx5MjoxNjB9LElbMTMwODAwXT1BW1wiVFAuRElTVFJFU1MgQ0FMTFwiXSxSWzEzMDgwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMwOTAwXT1BW1wiVFAuRU5UUlkgQ09OVFJPTCBQT0lOVFwiXSxSWzEzMDkwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxMDAxXT1BW1wiVFAuRkxZLVRPLVBPSU5UIChTT05PQlVPWSlcIl0sUlsxMzEwMDFdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMTAwMl09QVtcIlRQLkZMWS1UTy1QT0lOVCAoV0VBUE9OKVwiXSxSWzEzMTAwMl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxMDAzXT1BW1wiVFAuRkxZLVRPLVBPSU5UIChOT1JNQUwpXCJdLFJbMTMxMDAzXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzExMDBdPUFbXCJUUC5BQ1RJT04gTElOS1VQIFBPSU5UXCJdLFJbMTMxMTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsxMzEyMDBdPUFbXCJUUC5BQ1RJT04gUEFTU0FHRSBQT0lOVFwiXSxSWzEzMTIwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxMzAwXT1BW1wiVFAuUE9JTlQgT0YgSU5URVJFU1RcIl0sUlsxMzEzMDBdPXt4MTo1MCx4MjoxNTAseTE6LTI1fSxJWzEzMTMwMV09QVtcIlBPSU5UIE9GIElOVEVSRVNUIOKAkyBMQVVOQ0ggRVZFTlRcIl0sUlsxMzEzMDFdPXt4MTo1MCx4MjoxNTAseTE6LTI1fSxJWzEzMTQwMF09QVtcIlRQLkFDVElPTiBSQUxMWSBQT0lOVFwiXSxSWzEzMTQwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxNTAwXT1BW1wiVFAuQUNUSU9OIFJFTEVBU0UgUE9JTlRcIl0sUlsxMzE1MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzEzMTYwMF09QVtcIlRQLkFDVElPTiBTVEFSVCBQT0lOVFwiXSxSWzEzMTYwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTMxNzAwXT1BW1wiVFAuU1BFQ0lBTCBQT0lOVFwiXSxSWzEzMTcwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMTMxODAwXT1BW1wiVFAuV0FZUE9JTlRcIl0sUlsxMzE4MDBdPXt4MTo2MCx4MjoxNDAseTE6NjAseTI6MTQwfSxJWzEzMTkwMF09QVtcIlRQLkFJUkZJRUxEXCJdLFJbMTMxOTAwXT17eDE6MzUseDI6MTY1LHkxOjYwLHkyOjEyNX0sSVsxMzJlM109QVtcIlRQLlRBUkdFVCBIQU5ET1ZFUlwiXSxSWzEzMmUzXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsxMzIxMDBdPUFbXCJUUC5LRVkgVEVSUkFJTlwiXSxJWzE2MDEwMF09QVtcIlRQLk9CU0VSVkFUSU9OIFBPU1QvT1VUUE9TVFwiXSxSWzE2MDEwMF09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbMTYwMjAwXT1BW1wiVFAuT0JTRVJWQVRJT04gUE9TVC9PVVRQT1NUXCJdLFJbMTYwMjAwXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVsxNjAyMDFdPUFbXCJUUC5PQlNFUlZBVElPTiBQT1NUL1JFQ09OTkFJU1NBTkNFXCJdLFJbMTYwMjAxXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVsxNjAyMDJdPUFbXCJUUC5GT1JXQVJEIE9CU0VSVkVSIFBPU0lUSU9OXCJdLFJbMTYwMjAyXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVsxNjAyMDNdPUFbXCJUUC5DQlJOIE9CU0VSVkFUSU9OIFBPU1RcIl0sUlsxNjAyMDNdPXt4MTo1MCx4MjoxNTAseTE6NDAseTI6MTUwfSxJWzE2MDIwNF09QVtcIlRQLlNFTlNPUiBPVVRQT1NUXCJdLFJbMTYwMjA0XT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE1MH0sSVsxNjAyMDVdPUFbXCJUUC5DT01CQVQgT1VUUE9TVFwiXSxSWzE2MDIwNV09e3gxOjUwLHgyOjE1MCx5MTo0MCx5MjoxNTB9LElbMTYwMzAwXT1BW1wiVFAuVEFSR0VUIFJFRkVSRU5DRVwiXSxJWzE2MDQwMF09QVtcIlRQLlBPSU5UIE9GIERFUEFSVFVSRVwiXSxSWzE2MDQwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMThlNF09QVtcIlRQLkFJUiBDT05UUk9MIFBPSU5UXCJdLFJbMThlNF09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbMTgwMTAwXT1BW1wiVFAuQUlSIENPTlRST0wgUE9JTlQgKEFDUClcIl0sUlsxODAxMDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzE4MDIwMF09QVtcIlRQLkNPTU1VTklDQVRJT05TIENIRUNLUE9JTlRcIl0sUlsxODAyMDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzE4MDMwMF09QVtcIlRQLkRPV05FRCBBSVJDUkVXIFBJQ0tVUCBQT0lOVFwiXSxSWzE4MDMwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMTgwNDAwXT1BW1wiVFAuUFVMTC1VUCBQT0lOVFwiXSxSWzE4MDQwMF09e3gxOjUwLHgyOjI0MCx5MTo1MCx5MjoxNTB9LElbMTgwNTAwXT1BW1wiVFAuQUlSIENPTlRST0wgUkVOREVaVk9VU1wiXSxSWzE4MDUwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgwNjAwXT1BW1wiVFAuVEFDQU5cIl0sUlsxODA2MDBdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MDcwMF09QVtcIlRQLkNBUCBTVEFUSU9OXCJdLFJbMTgwNzAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODA4MDBdPUFbXCJUUC5BRVcgU1RBVElPTlwiXSxSWzE4MDgwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgwOTAwXT1BW1wiVFAuRklYRUQgV0lOR1wiXSxJWzE4MWUzXT1BW1wiVFAuU1RSSUtFIElQXCJdLFJbMTgxZTNdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MTEwMF09QVtcIlRQLlJFUExFTklTSE1FTlQgU1RBVElPTlwiXSxSWzE4MTEwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgxMjAwXT1BW1wiVFAuVEFOS0lOR1wiXSxSWzE4MTIwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgxMzAwXT1BW1wiVFAuU1VDQVAgLSBST1RBUlkgV0lOR1wiXSxSWzE4MTMwMF09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbMTgxNDAwXT1BW1wiVFAuU1VDQVAgLSBGSVhFRCBXSU5HXCJdLFJbMTgxNDAwXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVsxODE1MDBdPUFbXCJUUC5TVUNBUCAtIFJPVEFSWSBXSU5HXCJdLFJbMTgxNTAwXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVsxODE2MDBdPUFbXCJUUC5NSVcgLSBGSVhFRCBXSU5HXCJdLFJbMTgxNjAwXT17eDE6NjAseDI6MTQwLHkxOjQwLHkyOjE2MH0sSVsxODE3MDBdPUFbXCJUUC5NSVcgLSBST1RBUlkgV0lOR1wiXSxSWzE4MTcwMF09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxNjB9LElbMTgxODAwXT1BW1wiVFAuVE9NQ0FUXCJdLFJbMTgxODAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODE5MDBdPUFbXCJUUC5SRVNDVUVcIl0sUlsxODE5MDBdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MmUzXT1BW1wiVFAuVU5NQU5ORUQgQUVSSUFMIFNZU1RFTVwiXSxSWzE4MmUzXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODIxMDBdPUFbXCJUUC5WVFVBXCJdLFJbMTgyMTAwXT17eDE6NjAseDI6MTQwLHkxOjMwLHkyOjE3MH0sSVsxODIyMDBdPUFbXCJUUC5PUkJJVFwiXSxSWzE4MjIwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgyMzAwXT1BW1wiVFAuT1JCSVQgLSBGSUdVUkUgRUlHSFRcIl0sUlsxODIzMDBdPXt4MTo2MCx4MjoxNDAseTE6MzAseTI6MTcwfSxJWzE4MjQwMF09QVtcIlRQLk9SQklUIC0gUkFDRSBUUkFDS1wiXSxSWzE4MjQwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMTgyNTAwXT1BW1wiVFAuT1JCSVQgLSBSQU5ET00sIENMT1NFRFwiXSxSWzE4MjUwMF09e3gxOjYwLHgyOjE0MCx5MTozMCx5MjoxNzB9LElbMjAwNDAwXT1BW1wiVFAuU0hJUCBBUkVBIE9GIElOVEVSRVNUIChBRUdJUyBPTkxZKVwiXSxJWzIwMDUwMF09QVtcIlRQLkFDVElWRSBNQU5PRVVWUkUgQVJFQSAoQUVHSVMgT05MWSlcIl0sUlsyMDA1MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIwMDYwMF09QS5UT0RPLElbMjAwNzAwXT1BLlRPRE8sSVsyMTAxMDBdPUFbXCJUUC5QTEFOIFNISVBcIl0sUlsyMTAxMDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMDIwMF09QVtcIlRQLkFJTSBQT0lOVFwiXSxSWzIxMDIwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEwMzAwXT1BW1wiVFAuREVGRU5ERUQgQVNTRVRcIl0sSVsyMTA0MDBdPUFbXCJUUC5EUk9QIFBPSU5UXCJdLFJbMjEwNDAwXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjEyMH0sSVsyMTA1MDBdPUFbXCJUUC5FTlRSWSBQT0lOVFwiXSxSWzIxMDUwMF09e3gxOjUwLHgyOjE1MCx5MTo1MH0sSVsyMTA2MDBdPUFbXCJUUC5BSVIgREVUT05BVElPTlwiXSxJWzIxMDcwMF09QVtcIlRQLkdST1VORCBaRVJPXCJdLFJbMjEwNzAwXT17eDE6NTAseDI6MTUwLHkxOjMwfSxJWzIxMDgwMF09QVtcIlRQLklNUEFDVCBQT0lOVFwiXSxSWzIxMDgwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEwOTAwXT1BW1wiVFAuUFJFRElDVEVEIElNUEFDVCBQT0lOVFwiXSxSWzIxMDkwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjExZTNdPUFbXCJUUC5MQVVOQ0hFRCBUT1JQRURPIChBRUdJUyBPTkxZKVwiXSxSWzIxMWUzXT17eDE6NTAseDI6MTUwLHkxOjkwLHkyOjExMH0sSVsyMTExMDBdPUFbXCJUUC5NU0wgREVURUNUIFBPSU5UXCJdLFJbMjExMTAwXT17eDE6NTAseDI6MTUwLHkxOjMwfSxJWzIxMTIwMF09QVtcIlRQLkFDT1VTVElDIENPVU5URVIgTUVBU1VSRSAoREVDT1kpXCJdLFJbMjExMjAwXT17eDE6NTAseDI6MTUwLHkxOjMwfSxJWzIxMTMwMF09QVtcIlRQLkVMRUNUUk9OSUMgQ09VTlRFUiBNRUFTVVJFUyAoRUNNKSBERUNPWVwiXSxSWzIxMTMwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjExNDAwXT1BW1wiVFAuQlJJRUYgQ09OVEFDVFwiXSxSWzIxMTQwMF09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVsyMTE1MDBdPUFbXCJUUC5EQVRVTVwiXSxSWzIxMTUwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjExNjAwXT1BW1wiVFAuQlQgQk9VWSBEUk9QXCJdLFJbMjExNjAwXT17eDE6NTAseDI6MTUwLHkxOjQwLHkyOjE2MH0sSVsyMTE3MDBdPUFbXCJUUC5SRVBPUlRFRCBCT1RUT01FRCBTVUJcIl0sSVsyMTE4MDBdPUFbXCJUUC5NT1ZJTkcgSEFWRU5cIl0sUlsyMTE4MDBdPXt4MTo0MCx4MjoxNjAseTE6NTAseTI6MTUwfSxJWzIxMTkwMF09QVtcIlRQLlNDUkVFTiBDRU5UUkVcIl0sSVsyMTJlM109QVtcIlRQLkxPU1QgQ09OVEFDVFwiXSxSWzIxMmUzXT17eDE6NTAseDI6MTUwLHkxOjAseTI6MTAwfSxJWzIxMjEwMF09QVtcIlRQLlNJTktFUlwiXSxSWzIxMjEwMF09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVsyMTIyMDBdPUFbXCJUUC5UUklBTCBUUkFDS1wiXSxSWzIxMjIwMF09e3gxOjUwLHgyOjE1MCx5MTowLHkyOjEwMH0sSVsyMTIzMDBdPUFbXCJUUC5GSVggQUNPVVNUSUNcIl0sSVsyMTI0MDBdPUFbXCJUUC5GSVggRUxFQ1RSTy1NQUdORVRJQ1wiXSxJWzIxMjUwMF09QVtcIlRQLkVMRUNUUk8gTUFHTkVUSUMgLSBNQUdORVRJQyBBTk9NQUxZIERFVEVDVElPTiAoTUFEKVwiXSxSWzIxMjUwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxODB9LElbMjEyNjAwXT1BW1wiVFAuRklYIEVMRUNUUk8tT1BUSUNBTFwiXSxJWzIxMjcwMF09QVtcIlRQLlRBUkdFVCBSRUZFUkVOQ0VcIl0sSVsyMTI4MDBdPUFbXCJUUC5IQVJCT1JcIl0sUlsyMTI4MDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMjkwMF09QVtcIlRQLkhBUkJPUlwiXSxSWzIxMjkwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEyOTAxXT1BW1wiVFAuSEFSQk9SIFBPSU5UIEFcIl0sUlsyMTI5MDFdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMjkwMl09QVtcIlRQLkhBUkJPUiBQT0lOVCBRXCJdLFJbMjEyOTAyXT17eDE6NTAseDI6MTUwLHkxOjUwLHkyOjE1MH0sSVsyMTI5MDNdPUFbXCJUUC5IQVJCT1IgUE9JTlQgWFwiXSxSWzIxMjkwM109e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEyOTA0XT1BW1wiVFAuSEFSQk9SIFBPSU5UIFlcIl0sUlsyMTI5MDRdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxM2UzXT1BW1wiVFAuRElQIFBPU0lUSU9OXCJdLFJbMjEzZTNdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMzEwMF09QVtcIlRQLlNFQVJDSFwiXSxSWzIxMzEwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjEzMjAwXT1BW1wiVFAuU0VBUkNIIEFSRUFcIl0sUlsyMTMyMDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMzMwMF09QVtcIlRQLlNFQVJDSCBDRU5URVJcIl0sUlsyMTMzMDBdPXt4MTo1MCx4MjoxNTAseTE6NTAseTI6MTUwfSxJWzIxMzQwMF09QVtcIlRQLk5BVklHQVRJT05BTCBSRUZFUkVOQ0VcIl0sSVsyMTM1MDBdPUFbXCJUUC5TT05PQlVPWVwiXSxSWzIxMzUwMF09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwMV09QVtcIlRQLlNPTk9CVU9ZIEFOTVwiXSxSWzIxMzUwMV09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwMl09QVtcIlRQLlNPTk9CVU9ZIEFUQUNcIl0sUlsyMTM1MDJdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MDNdPUFbXCJUUC5TT05PQlVPWSBCQVJSQVwiXSxSWzIxMzUwM109e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwNF09QVtcIlRQLlNPTk9CVU9ZIEJBVEhZVEhFUk1PR1JBUEggVFJBTlNNSVRUSU5HIFNPTk9CVU9ZIChCVClcIl0sUlsyMTM1MDRdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MDVdPUFbXCJUUC5TT05PQlVPWSBDT01NQU5EIEFDVElWRSBNVUxUSUJFQU0gU09OT0JVT1kgKENBTUJTKVwiXSxSWzIxMzUwNV09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwNl09QVtcIlRQLlNPTk9CVU9ZIENBU1NcIl0sUlsyMTM1MDZdPXt4MTo2MCx4MjoxNDAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MDddPUFbXCJUUC5TT05PQlVPWSBESUZBUlwiXSxSWzIxMzUwN109e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwOF09QVtcIlRQLlNPTk9CVU9ZIERJQ0FTU1wiXSxSWzIxMzUwOF09e3gxOjYwLHgyOjE0MCx5MTotMTAseTI6MTYwfSxJWzIxMzUwOV09QVtcIlRQLlNPTk9CVU9ZIEVYUEVOREFCTEUgUkVMSUFCTEUgQUNPVVNUSUMgUEFUSCBTT05PQlVPWSAoRVJBUFMpXCJdLFJbMjEzNTA5XT17eDE6NjAseDI6MTQwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTEwXT1BW1wiVFAuU09OT0JVT1kgRVhQSVJFRFwiXSxSWzIxMzUxMF09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTYwfSxJWzIxMzUxMV09QVtcIlRQLlNPTk9CVU9ZIEtJTkdQSU5cIl0sUlsyMTM1MTFdPXt4MTo0MCx4MjoxNjAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MTJdPUFbXCJUUC5TT05PQlVPWSBMT0ZBUlwiXSxSWzIxMzUxMl09e3gxOjQwLHgyOjE2MCx5MTotMTAseTI6MTYwfSxJWzIxMzUxM109QVtcIlRQLlNPTk9CVU9ZIFBBVFRFUk4gQ0VOVEVSXCJdLFJbMjEzNTEzXT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNjB9LElbMjEzNTE0XT1BW1wiVFAuU09OT0JVT1kgUk9cIl0sUlsyMTM1MTRdPXt4MTo0MCx4MjoxNjAseTE6LTEwLHkyOjE2MH0sSVsyMTM1MTVdPUFbXCJUUC5TT05PQlVPWSBWTEFEXCJdLFJbMjEzNTE1XT17eDE6NDAseDI6MTYwLHkxOi0xMCx5MjoxNjB9LElbMjEzNjAwXT1BW1wiVFAuUkVGRVJFTkNFIFBPSU5UXCJdLFJbMjEzNjAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTM3MDBdPUFbXCJUUC5TUEVDSUFMIFBPSU5UXCJdLFJbMjEzNzAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTM4MDBdPUFbXCJUUC5OQVZJR0FUSU9OQUwgUkVGRVJFTkNFXCJdLFJbMjEzODAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTM5MDBdPUFbXCJUUC5ETFJQXCJdLFJbMjEzOTAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTRlM109QVtcIkZPUldBUkQgT0JTRVJWRVIgLyBTUE9UVEVSIFBPU0lUSU9OXCJdLFJbMjE0ZTNdPXt4MTo0MCx4MjoxNjAseTE6NjAseTI6MTQwfSxJWzIxNDEwMF09QVtcIlRQLlZJVEFMIEFSRUEgQ0VOVFJFXCJdLFJbMjE0MTAwXT17eDE6NDAseDI6MTYwLHkxOjYwLHkyOjE0MH0sSVsyMTQyMDBdPUFbXCJUUC5DT1JSSURPUiBUQUJcIl0sUlsyMTQyMDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxNDMwMF09QVtcIlRQLkVORU1ZIFBPSU5UXCJdLFJbMjE0MzAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE2MH0sSVsyMTQ0MDBdPUFbXCJUUC5NQVJTSEFMTCBQT0lOVFwiXSxSWzIxNDQwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE0NTAwXT1BW1wiVFAuUE9JTlQgT0YgSU5URU5ERUQgTU9WRU1FTlRcIl0sUlsyMTQ1MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxNDYwMF09QVtcIlRQLlBSRS1MQU5ERkFMTCBXQVlQT0lOVFwiXSxSWzIxNDYwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE0NzAwXT1BW1wiVFAuRVNUSU1BVEVEIFBPU0lUSU9OIChFUClcIl0sUlsyMTQ3MDBdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxNDgwMF09QVtcIlRQLlJFRkVSRU5DRSBQT0lOVCBXQVlQT0lOVFwiXSxSWzIxNDgwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxNjB9LElbMjE0OTAwXT1BW1wiVFAuU1VCIFNVUkZBQ0UgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE0OTAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTVlM109QVtcIlRQLlNVQk1BUklORSBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTVlM109e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1MTAwXT1BW1wiVFAuQVNXIFNVQk1BUklORSBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTUxMDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNTIwMF09QVtcIlRQLihVVVYpIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNTIwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1MzAwXT1BW1wiVFAuVVVWIC0gQVNXIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNTMwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1NDAwXT1BW1wiVFAuTUlORSBXQVJGQVJFIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSBTVUJTVVJGQUNFIFNUQVRJT05cIl0sUlsyMTU0MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNTUwMF09QVtcIlRQLlVVViAtIFNVVyBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTU1MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNTYwMF09QVtcIlRQLlNFQSBTVVJGQUNFIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNTYwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1NzAwXT1BW1wiVFAuQVNXIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNTcwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1ODAwXT1BW1wiVFAuTUlORSBXQVJGQVJFIFNVUkZBQ0UgU1RBVElPTlwiXSxSWzIxNTgwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE1OTAwXT1BW1wiVFAuTk9OLUNPTUJBVEFOVCBTVVJGQUNFIFNUQVRJT05cIl0sUlsyMTU5MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNmUzXT1BW1wiVFAuUElDS0VUIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNmUzXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTYxMDBdPUFbXCJUUC5SRU5ERVpWT1VTIENPTlRST0wgUE9JTlRcIl0sUlsyMTYxMDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNjIwMF09QVtcIlRQLlJFUExFTklTSE1FTlQgQVQgU0VBIFNVUkZBQ0UgU1RBVElPTlwiXSxSWzIxNjIwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2MzAwXT1BW1wiVFAuUkVTQ1VFIENPTlRST0wgUE9JTlRcIl0sUlsyMTYzMDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNjQwMF09QVtcIlRQLlNVVyBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTY0MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNjUwMF09QVtcIlRQLihVU1YpIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNjUwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2NjAwXT1BW1wiVFAuVVNWIC0gQVNXIENPTlRST0wgU1RBVElPTlwiXSxSWzIxNjYwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE2NzAwXT1BW1wiVFAuTUlORSBXQVJGQVJFIFVOTUFOTkVEIFVOREVSV0FURVIgVkVISUNMRSBTVVJGQUNFIFNUQVRJT05cIl0sUlsyMTY3MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNjgwMF09QVtcIlRQLihSTVYpIFVTViBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTY4MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxNjkwMF09QVtcIlRQLlVTViAtIFNVVyBDT05UUk9MIFNUQVRJT05cIl0sUlsyMTY5MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTQwfSxJWzIxN2UzXT1BW1wiVFAuU0hPUkUgQ09OVFJPTCBTVEFUSU9OXCJdLFJbMjE3ZTNdPXt4MTo0MCx4MjoxNjAseTE6NDAseTI6MTYwfSxJWzIxNzEwMF09QVtcIlRQLlJPVVRFXCJdLFJbMjE3MTAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE0MH0sSVsyMTcyMDBdPUFbXCJUUC5ST1VURSBESVZFUlNJT05TXCJdLFJbMjE3MjAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVsyMTczMDBdPUFbXCJUUC5ST1VURSBQT0lOVCBSXCJdLFJbMjE3MzAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVsyMTc0MDBdPUFbXCJUUC5QSUNLRVQgUk9VVEVcIl0sUlsyMTc0MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJWzIxNzUwMF09QVtcIlRQLlBPSU5UIFIgUk9VVEVcIl0sUlsyMTc1MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJWzIxNzYwMF09QVtcIlRQLlJFTkRFWlZPVVMgUk9VVEVcIl0sUlsyMTc2MDBdPXt4MTozMCx4MjoxNzAseTE6NjAseTI6MTcwfSxJWzIxNzcwMF09QVtcIlRQLlJPVVRFIFdBWVBPSU5UXCJdLFJbMjE3NzAwXT17eDE6MzAseDI6MTcwLHkxOjYwLHkyOjE3MH0sSVsyMTc4MDBdPUFbXCJUUC5DTFVUVEVSLCBTVEFUSU9OQVJZIE9SIENFQVNFIFJFUE9SVElOR1wiXSxJWzIxNzkwMF09QVtcIlRQLlRFTlRBVElWRSBPUiBQUk9WSVNJT05BTCBUUkFDS1wiXSxJWzIxOGUzXT1BW1wiVFAuRElTVFJFU1NFRCBWRVNTRUxcIl0sSVsyMTgxMDBdPUFbXCJUUC5ESVRDSEVEIEFJUkNSQUZUXCJdLElbMjE4MjAwXT1BW1wiVFAuUEVSU09OIElOIFdBVEVSXCJdLElbMjE4MzAwXT1BW1wiVFAuSUNFQkVSR1wiXSxSWzIxODMwMF09e3gxOjUwLHgyOjE1MCx5MTo1MCx5MjoxNTB9LElbMjE4NTAwXT1BW1wiVFAuT0lMIFJJRy9QTEFURk9STVwiXSxSWzIxODUwMF09e3gxOjMwLHgyOjE3MCx5MTo2MCx5MjoxNDB9LElbMjE4NjAwXT1BW1wiVFAuU0VBIE1JTkVMSUtFXCJdLFJbMjE4NjAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjE1MH0sSVsyMTg3MDBdPUFbXCJUUC5CT1RUT00gUkVUVVJOXCJdLFJbMjE4NzAwXT17eDE6NDAseDI6MTYwLHkxOjQwLHkyOjEwMH0sSVsyMTg4MDBdPUFbXCJUUC5JTlNUQUxMQVRJT04vTUFOTUFERVwiXSxSWzIxODgwMF09e3gxOjQwLHgyOjE2MCx5MTo0MCx5MjoxMDB9LElbMjE4OTAwXT1BW1wiVFAuTUFSSU5FIExJRkVcIl0sUlsyMTg5MDBdPXt4MToxMDAseDI6MjIwLHkxOjcwLHkyOjEzMH0sSVsyMTllM109QVtcIlRQLlNFQSBBTk9NQUxZXCJdLFJbMjE5ZTNdPXt4MTo1MCx4MjoxNTAseTE6MzAseTI6MTIwfSxJWzIxOTEwMF09QVtcIlRQLldSRUNLLCBEQU5HRVJPVVNcIl0sUlsyMTkxMDBdPXt4MTo0MCx4MjoxNjAseTE6NzAseTI6MTMwfSxJWzIxOTIwMF09QVtcIlRQLldSRUNLLCBOT04gREFOR0VST1VTXCJdLFJbMjE5MjAwXT17eDE6NDAseDI6MTYwLHkxOjcwLHkyOjEzMH0sSVsyNDA2MDFdPUFbXCJUUC5QT0lOVC9TSU5HTEUgVEFSR0VUXCJdLElbMjQwNjAyXT1BW1wiVFAuTlVDTEVBUiBUQVJHRVRcIl0sSVsyNDA2MDNdPUFbXCJUUC5UQVJHRVRSRUNPUkRFRCAoQUVHSVMgT05MWSlcIl0sUlsyNDA2MDNdPXt4MTowLHgyOjIwMCx5MTo1MCx5MjoxNTB9LElbMjQwOTAwXT1BW1wiVFAuRklSRSBTVVBQT1JUIFNUQVRJT05cIl0sUlsyNDA5MDBdPXt4MTo1MCx4MjoyMDAseTE6NTAseTI6MTUwfSxJWzI1MDEwMF09QVtcIlRQLkZJUklORyBQT0lOVFwiXSxSWzI1MDEwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjUwMjAwXT1BW1wiVFAuSElERSBQT0lOVFwiXSxSWzI1MDIwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjUwMzAwXT1BW1wiVFAuTEFVTkNIIFBPSU5UXCJdLFJbMjUwMzAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyNTA0MDBdPUFbXCJUUC5SRUxPQUQgUE9JTlRcIl0sUlsyNTA0MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI1MDUwMF09QVtcIlRQLlNVUlZFWSBDT05UUk9MIFBPSU5UXCJdLFJbMjUwNTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyNTA2MDBdPUFbXCJUUC5LTk9XTiBQT0lOVFwiXSxJWzI3MDcwMV09QVtcIlRQLk1JTkVGSUVMRCwgU1RBVElDXCJdLFJbMjcwNzAxXT17eDE6MjUseDI6MTc1LHkxOjY1LHkyOjE0NX0sSVsyODAxMDBdPUEuVE9ETyxJWzI4MDIwMF09QVtcIlRQLkFOVElQRVJTT05ORUwgKEFQKSBNSU5FU1wiXSxJWzI4MDIwMV09QVtcIlRQLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFNcIl0sUlsyODAyMDFdPXt4MTo0MCx4MjoxODAseTE6NDAseTI6MTUwfSxJWzI4MDMwMF09QVtcIlRQLkFOVElUQU5LIE1JTkUgKEFUKVwiXSxJWzI4MDQwMF09QVtcIlRQLihBVCkgQU5USUhBTkRMSU5HIERFVklDRVwiXSxSWzI4MDQwMF09e3gxOjYwLHgyOjE0MCx5MTo0MCx5MjoxOTV9LElbMjgwNTAwXT1BW1wiVFAuV0lERSBBUkVBIE1JTkVTXCJdLElbMjgwNjAwXT1BW1wiVFAuVU5TUEVDSUZJRUQgTUlORVwiXSxJWzI4MDcwMF09QVtcIlRQLkJPT0JZIFRSQVBcIl0sSVsyODA4MDBdPUFbXCJUUC5FTkdJTkVFUiBSRUdVTEFUSU5HIFBPSU5UXCJdLFJbMjgwODAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODA5MDBdPUFbXCJUUC5FQVJUSFdPUksvRk9SVElGSUNBVElPTlwiXSxJWzI4MWUzXT1BW1wiVFAuU1VSRkFDRSBTSEVMVEVSXCJdLElbMjgxMTAwXT1BW1wiVFAuVU5ERVJHUk9VTkQgU0hFTFRFUlwiXSxJWzI4MTIwMF09QVtcIlRQLkZPUlRcIl0sSVsyODEzMDBdPUFbXCJUUC5DSEVNSUNBTCBFVkVOVFwiXSxSWzI4MTMwMF09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxMzAxXT1BW1wiVFAuQ0hFTUlDQUwg4oCTIFRPWElDIElORFVTVFJJQUwgTUFURVJJQUxcIl0sUlsyODEzMDFdPXt4MToyNSx4MjoxNzUseTE6LTEwfSxJWzI4MTQwMF09QVtcIlRQLkJJT0xPR0lDQUwgRVZFTlRcIl0sUlsyODE0MDBdPXt4MToyNSx4MjoxNzUseTE6LTEwfSxJWzI4MTQwMV09QVtcIlRQLkJJT0xPR0lDQUwg4oCTIFRPWElDIElORFVTVFJJQUwgTUFURVJJQUxcIl0sUlsyODE0MDFdPXt4MToyNSx4MjoxNzUseTE6LTEwfSxJWzI4MTUwMF09QVtcIlRQLk5VQ0xFQVIgRVZFTlRcIl0sUlsyODE1MDBdPXt4MToyNSx4MjoxNzUseTE6LTEwfSxJWzI4MTYwMF09QVtcIlRQLk5VQ0xFQVIgRVZFTlRcIl0sUlsyODE2MDBdPXt4MToyNSx4MjoxNzUseTE6LTEwfSxJWzI4MTcwMF09QVtcIlRQLlJBRElPTE9HSUNBTCBFVkVOVFwiXSxSWzI4MTcwMF09e3gxOjI1LHgyOjE3NSx5MTotMTB9LElbMjgxNzAxXT1BW1wiVFAuUkFESU9MT0dJQ0FMIOKAkyBUT1hJQyBJTkRVU1RSSUFMIE1BVEVSSUFMXCJdLFJbMjgxNzAxXT17eDE6MjUseDI6MTc1LHkxOi0xMH0sSVsyODE4MDBdPUFbXCJUUC5ERUNPTiBTSVRFL1BPSU5UXCJdLFJbMjgxODAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDFdPUFbXCJUUC5BTFRFUk5BVEUgREVDT04gU0lURS9QT0lOVFwiXSxSWzI4MTgwMV09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjgxODAyXT1BW1wiVFAuREVDT04gU0lURS9QT0lOVCAoRVFVSVBNRU5UKVwiXSxSWzI4MTgwMl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjgxODAzXT1BW1wiVFAuREVDT04gU0lURS9QT0lOVCAoVFJPT1BTKVwiXSxSWzI4MTgwM109e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjgxODA0XT1BW1wiVFAuREVDT04gU0lURS9QT0lOVCAoRVFVSVBNRU5UIEFORCBUUk9PUFMpXCJdLFJbMjgxODA0XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDVdPUFbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChPUEVSQVRJT05BTCBERUNPTlRBTUlOQVRJT04pXCJdLFJbMjgxODA1XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDZdPUFbXCJUUC5ERUNPTiBTSVRFL1BPSU5UIChUSE9ST1VHSCBERUNPTlRBTUlOQVRJT04pXCJdLFJbMjgxODA2XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVsyODE4MDddPUFbXCJUUC5NQUlOIEVRVUlQTUVOVCBERUNPTlRBTUlOQVRJT04gUE9JTlQvU0lURVwiXSxSWzI4MTgwN109e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjgxODA4XT1BW1wiVFAuRk9SV0FSRCBUUk9PUCBERUNPTlRBTUlOQVRJT04gUE9JTlQvU0lURVwiXSxSWzI4MTgwOF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMjgxODA5XT1BW1wiVFAuV09VTkRFRCBQRVJTT05ORUwgREVDT05UQU1JTkFUSU9OIFNJVEVcIl0sUlsyODE4MDldPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzI4MTkwMV09QVtcIlRQLkZJWEVEIEFORCBQUkVGQUJSSUNBVEVEXCJdLFJbMjgxOTAxXT17eDE6NjAseDI6MTQwLHkxOjMwfSxJWzI4MTkwMl09QVtcIlRQLlRFVFJBSEVEUk9OU1wiXSxSWzI4MTkwMl09e3gxOjYwLHgyOjE0MCx5MTozMH0sSVsyODE5MDNdPUFbXCJUUC5URVRSQUhFRFJPTlMgTU9WQUJMRVwiXSxSWzI4MTkwM109e3gxOjYwLHgyOjE0MCx5MTozMH0sSVsyODIwMDFdPUFbXCJUUC5UT1dFUiBMT1dcIl0sUlsyODIwMDFdPXt4MTo1MCx4MjoxNTAseTE6MzAseTI6MTIwfSxJWzI4MjAwMl09QVtcIlRQLlRPV0VSIEhJR0hcIl0sUlsyODIwMDJdPXt4MTo1MCx4MjoxNTAseTE6MzAseTI6MTIwfSxJWzMyMDEwMF09QVtcIlRQLkFNQlVMQU5DRSBFWENIQU5HRSBQT0lOVFwiXSxSWzMyMDEwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwMTAxXT1BW1wiVFAuQU1CVUxBTkNFIEVYQ0hBTkdFIFBPSU5UXCJdLFJbMzIwMTAxXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjAxMDJdPUFbXCJUUC5BTUJVTEFOQ0UgQ09OVFJPTCBQT0lOVFwiXSxSWzMyMDEwMl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwMTAzXT1BW1wiVFAuQU1CVUxBTkNFIExPQUQgUE9JTlRcIl0sUlszMjAxMDNdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMDEwNF09QVtcIlRQLkFNQlVMQU5DRSBSRUxBWSBQT0lOVFwiXSxSWzMyMDEwNF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwMjAwXT1BW1wiVFAuQU1NVU5JVElPTiBTVVBQTFkgUE9JTlQgKEFTUClcIl0sUlszMjAyMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMDMwMF09QVtcIlRQLkFNTVVOSVRJT04gVFJBTlNGRVIgUE9JTlQgKEFUUClcIl0sUlszMjAzMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMDQwMF09QVtcIlRQLkNBTk5JQkFMSVpBVElPTiBQT0lOVFwiXSxSWzMyMDQwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwNTAwXT1BW1wiVFAuQ0FTVUFMVFkgQ09MTEVDVElPTiBQT0lOVFwiXSxSWzMyMDUwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwNjAwXT1BW1wiVFAuQ0lWSUxJQU4gQ09MTEVDVElPTiBQT0lOVFwiXSxSWzMyMDYwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwNzAwXT1BW1wiVFAuREVUQUlORUUgQ09MTEVDVElPTiBQT0lOVFwiXSxSWzMyMDcwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIwODAwXT1BW1wiVFAuRVBXIENPTExFQ1RJT04gUE9JTlRcIl0sUlszMjA4MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMDkwMF09QVtcIlRQLkxPR0lTVElDUyBSRUxFQVNFIFBPSU5UXCJdLFJbMzIwOTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjFlM109QVtcIlRQLk1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl0sUlszMjFlM109e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxMTAwXT1BW1wiVFAuTUVESUNBTCBFVkFDVUFUSU9OIChNRURFVkFDKSBQSUNLVVAgUE9JTlRcIl0sUlszMjExMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTIwMF09QVtcIlRQLlJFQVJNLCBSRUZVRUwgQU5EIFJFU1VQUExZIFBPSU5UXCJdLFJbMzIxMjAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjEzMDBdPUFbXCJUUC5SRUZVRUwgT04gVEhFIE1PVkUgUE9JTlRcIl0sUlszMjEzMDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTQwMF09QVtcIlRQLlRSQUZGSUMgQ09OVFJPTCBQT1NUXCJdLFJbMzIxNDAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE1MDBdPUFbXCJUUC5UUkFJTEVSIFRSQU5TRkVSIFBPSU5UXCJdLFJbMzIxNTAwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE2MDBdPUFbXCJUUC5VTklUIE1BSU5URU5BTkNFIENPTExFQ1RJT04gUE9JTlRcIl0sUlszMjE2MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwMF09QVtcIlRQLlNVUFBMWSBQT0lOVFwiXSxSWzMyMTcwMF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzAxXT1BW1wiVFAuTkFUTyBDTEFTUyBJXCJdLFJbMzIxNzAxXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDJdPUFbXCJUUC5OQVRPIENMQVNTIElJXCJdLFJbMzIxNzAyXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDNdPUFbXCJUUC5OQVRPIENMQVNTIElJSVwiXSxSWzMyMTcwM109e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzA0XT1BW1wiVFAuTkFUTyBDTEFTUyBJVlwiXSxSWzMyMTcwNF09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzA1XT1BW1wiVFAuTkFUTyBDTEFTUyBWXCJdLFJbMzIxNzA1XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDZdPUFbXCJUUC5TVVBQTFkgUE9JTlRcIl0sUlszMjE3MDZdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwN109QVtcIlRQLlNQIENMQVNTIElcIl0sUlszMjE3MDddPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcwOF09QVtcIlRQLlNQIENMQVNTIElJXCJdLFJbMzIxNzA4XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MDldPUFbXCJUUC5TUCBDTEFTUyBJSUlcIl0sUlszMjE3MDldPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzMyMTcxMF09QVtcIlRQLlNQIENMQVNTIElWXCJdLFJbMzIxNzEwXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MTFdPUFbXCJUUC5TUCBDTEFTUyBWXCJdLFJbMzIxNzExXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MTJdPUFbXCJUUC5TUCBDTEFTUyBWSVwiXSxSWzMyMTcxMl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzEzXT1BW1wiVFAuU1AgQ0xBU1MgVklJXCJdLFJbMzIxNzEzXT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MTRdPUFbXCJUUC5TUCBDTEFTUyBWSUlJXCJdLFJbMzIxNzE0XT17eDE6NjAseDI6MTQwLHkxOi02MH0sSVszMjE3MTVdPUFbXCJUUC5TUCBDTEFTUyBJWFwiXSxSWzMyMTcxNV09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxNzE2XT1BW1wiVFAuU1AgQ0xBU1MgWFwiXSxSWzMyMTcxNl09e3gxOjYwLHgyOjE0MCx5MTotNjB9LElbMzIxODAwXT1BW1wiVFAuTUVESUNBTCBTVVBQTFkgUE9JTlRcIl0sUlszMjE4MDBdPXt4MTo2MCx4MjoxNDAseTE6LTYwfSxJWzM0MDkwMF09QVtcIlRQLkRFU1RST1lcIl0sUlszNDA5MDBdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbMzQxNDAwXT1BW1wiVFAuSU5URVJESUNUXCJdLFJbMzQxNDAwXT17eDE6MCx4MjoyMDAseTE6NDAseTI6MTYwfSxJWzM0MTYwMF09QVtcIlRQLk5FVVRSQUxJWkVcIl0sUlszNDE2MDBdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbMzQyODAwXT1BW1wiVFAuU1VQUFJFU1NcIl0sUlszNDI4MDBdPXt4MTowLHgyOjIwMCx5MTo0MCx5MjoxNjB9LElbMzUwMTAxXT1BW1wiTUFOIE1BREUgU1BBQ0UgREVCUklTIFNNQUxMXCJdLElbMzUwMTAyXT1BW1wiTUFOIE1BREUgU1BBQ0UgREVCUklTIE1FRElVTVwiXSxJWzM1MDEwM109QVtcIk1BTiBNQURFIFNQQUNFIERFQlJJUyBCSUdcIl0sSVszNTAyMDFdPUFbXCJOQVRVUkFMIFNQQUNFIERFQlJJUyBTTUFMTFwiXSxJWzM1MDIwMl09QVtcIk5BVFVSQUwgU1BBQ0UgREVCUklTIE1FRElVTVwiXSxJWzM1MDIwM109QVtcIk5BVFVSQUwgU1BBQ0UgREVCUklTIEJJR1wiXSx0WzEzXT1bQVtcIlRQLk0xLlVOU1BFQ0lGSUVEXCJdXSx0WzE0XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDNcIl1dLHRbMTVdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgM1wiXV0sdFsxNl09W0FbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAzXCJdXSx0WzE3XT1bQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDNcIl1dLHRbMThdPVtBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMVwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFsxOV09W0FbXCJUUC5NMS5NSU5FIENMVVNURVIgMVwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDJcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAzXCJdXSx0WzIwXT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAzXCJdXSx0WzIxXT1bQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgM1wiXV0sdFsyMl09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDNcIl1dLHRbMjNdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAzXCJdXSx0WzI0XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgMlwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDNcIl1dLHRbMjVdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgM1wiXV0sdFsyNl09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgM1wiXV0sdFsyN109W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgM1wiXV0sdFsyOF09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAyXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDNcIl1dLHRbMjldPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIFdJVEggQU5USUhBTkRMSU5HIERFVklDRSAyXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDNcIl1dLHRbMzBdPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSAxXCJdLEFbXCJUUC5NMS5XSURFIEFSRUEgQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDNcIl1dLHRbMzFdPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSAxXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAzXCJdXSx0WzMyXT1bQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDFcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDNcIl1dLHRbMzNdPVtBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMVwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDNcIl1dLHRbMzRdPVtBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMVwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDJcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDNcIl1dLHRbMzVdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMlwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAzXCJdXSx0WzM2XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDNcIl1dLHRbMzddPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFszOF09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAyXCJdLEFbXCJUUC5NMS5NSU5FIENMVVNURVIgM1wiXV0sdFszOV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSAyXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIFdJVEggQU5USUhBTkRMSU5HIERFVklDRSAzXCJdXSx0WzQwXT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDNcIl1dLHRbNDFdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dLHRbNDJdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDNcIl1dLHRbNDNdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAzXCJdXSx0WzQ0XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dLHRbNDVdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDNcIl1dLHRbNDZdPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLldJREUgQVJFQSBBTlRJVEFOSyBNSU5FIDNcIl1dLHRbNDddPVtBW1wiVFAuTTEuQU5USVBFUlNPTk5FTCBNSU5FIFdJVEggRElSRUNUSU9OQUwgRUZGRUNUUyAxXCJdLEFbXCJUUC5NMS5BTlRJVEFOSyBNSU5FIDJcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAzXCJdXSx0WzQ4XT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuQU5USVRBTksgTUlORSBXSVRIIEFOVElIQU5ETElORyBERVZJQ0UgMlwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgM1wiXV0sdFs0OV09W0FbXCJUUC5NMS5BTlRJUEVSU09OTkVMIE1JTkUgV0lUSCBESVJFQ1RJT05BTCBFRkZFQ1RTIDFcIl0sQVtcIlRQLk0xLkFOVElUQU5LIE1JTkUgV0lUSCBBTlRJSEFORExJTkcgREVWSUNFIDJcIl0sQVtcIlRQLk0xLk1JTkUgQ0xVU1RFUiAzXCJdXSx0WzUwXT1bQVtcIlRQLk0xLkFOVElQRVJTT05ORUwgTUlORSBXSVRIIERJUkVDVElPTkFMIEVGRkVDVFMgMVwiXSxBW1wiVFAuTTEuV0lERSBBUkVBIEFOVElUQU5LIE1JTkUgMlwiXSxBW1wiVFAuTTEuTUlORSBDTFVTVEVSIDNcIl1dKX19LEVJPVtRLGcsYixLLFgsdyxfLEosWixxLGosJCxJSSx7dHlwZTpcIm51bWJlclwiLGdldE1ldGFkYXRhOnUsZ2V0SWNvbnM6dixpY29uUGFydHM6YyxpY29uczpmdW5jdGlvbihJLHQsRSxSLGUsQSxDKXtcIjI3XCI9PWUmJihJWzExZTRdPVtdLElbMTEwMTAwXT1bXSxJWzExMDEwMV09W0FbXCJHUi5JQy5GRi5JTkZBTlRSWSBESVNNT1VOVEVEXCJdXSxJWzExMDEwMl09W0FbXCJHUi5JQy5GRi5NRURJQ0FMXCJdXSxJWzExMDEwM109W0FbXCJHUi5JQy5GRi5SRUNPTk5BSVNTQU5DRSBESVNNT1VOVEVEXCJdXSxJWzExMDEwNF09W0FbXCJHUi5JQy5GRi5TSUdOQUwgRElTTU9VTlRFRFwiXV0sSVsxMTAyMDBdPVtdLElbMTEwMjAxXT1bQVtcIkdSLklDLkVYUExPU0lWRSBPUkROQU5DRSBESVNQT1NBTFwiXV0sSVsxMTAyMDJdPVtBW1wiR1IuSUMuRklFTEQgQVJUSUxMRVJZIE9CU0VSVkVSXCJdXSxJWzExMDIwM109W0FbXCJHUi5JQy5KT0lOVCBGSVJFIFNVUFBPUlRcIl1dLElbMTEwMjA0XT1bQVtcIkdSLklDLkxJQUlTT05cIl1dLElbMTEwMjA1XT1bQVtcIkdSLklDLk1FU1NFTkdFUlwiXV0sSVsxMTAyMDZdPVtBW1wiR1IuSUMuTUlMSVRBUlkgUE9MSUNFXCJdXSxJWzExMDIwN109W0FbXCJHUi5JQy5PQlNFUlZFUi9PQlNFUlZBVElPTlwiXV0sSVsxMTAyMDhdPVtBW1wiR1IuSUMuU0VDVVJJVFlcIl1dLElbMTEwMjA5XT1bQVtcIkdSLklDLlNOSVBFUlwiXV0sSVsxMTAyMTBdPVtBW1wiR1IuSUMuU1BFQ0lBTCBPUEVSQVRJT05TIEZPUkNFU1wiXV0sSVsxMTAzMDBdPVtdLElbMTEwMzAxXT1bQVtcIkdSLkVRLlJJRkxFXCJdXSxJWzExMDMwMl09W0FbXCJHUi5FUS5SSUZMRVwiXSxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl1dLElbMTEwMzAzXT1bQVtcIkdSLkVRLlJJRkxFXCJdLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl1dLElbMTEwMzA0XT1bQVtcIkdSLkVRLlJJRkxFXCJdLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdXSxJWzExMDMwNV09W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXV0sSVsxMTAzMDZdPVtBW1wiR1IuRVEuTUFDSElORSBHVU5cIl0sQVtcIkdSLkVRLlNIT1JUIFJBTkdFXCJdXSxJWzExMDMwN109W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXSxBW1wiR1IuRVEuSU5URVJNRURJQVRFIFJBTkdFXCJdXSxJWzExMDMwOF09W0FbXCJHUi5FUS5NQUNISU5FIEdVTlwiXSxBW1wiR1IuRVEuTE9ORyBSQU5HRVwiXV0sSVsxMTAzMDldPVtBW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXV0sSVsxMTAzMTBdPVtBW1wiR1IuRVEuR1JFTkFERSBMQVVOQ0hFUlwiXSxzLl90cmFuc2xhdGUoMCwyMCxBW1wiR1IuRVEuU0hPUlQgUkFOR0VcIl0pXSxJWzExMDMxMV09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEFbXCJHUi5FUS5JTlRFUk1FRElBVEUgUkFOR0VcIl0pXSxJWzExMDMxMl09W0FbXCJHUi5FUS5HUkVOQURFIExBVU5DSEVSXCJdLHMuX3RyYW5zbGF0ZSgwLDIwLEFbXCJHUi5FUS5MT05HIFJBTkdFXCJdKV0sSVsxMTAzMTNdPVtBW1wiR1IuRVEuRkxBTUUgVEhST1dFUlwiXV0sSVsxMTAzMTRdPVtBW1wiR1IuRVEuTU9SVEFSXCJdXSxJWzExMDMxNV09W0FbXCJHUi5FUS5TSU5HTEUgUk9DS0VUIExBVU5DSEVSXCJdXSxJWzExMDMxNl09W0FbXCJHUi5FUS5BTlRJVEFOSyBST0NLRVQgTEFVTkNIRVJcIl1dLElbMTEwNDAwXT1bXSxJWzExMDQwMV09W0FbXCJHUi5FUS5OT04tTEVUSEFMIFdFQVBPTlwiXV0sSVsxMTA0MDJdPUFbXCJHUi5FUS5OT04tTEVUSEFMIEdSRU5BREUgTEFVTkNIRVJcIl0sSVsxMTA0MDNdPVtBW1wiR1IuRVEuVEFTRVJcIl1dLElbMTJlNF09W10sSVsxMjAxMDBdPVtdLElbMTIwMTAxXT1bQVtcIkdSLklDLkxBVyBFTkZPUkNFTUVOVFwiXV0sdFtcIjAxXCJdPVtBW1wiR1IuTTEuQ0xPU0UgUFJPVEVDVElPTlwiXV0sdFtcIjAyXCJdPVtBW1wiR1IuTTEuQ1JPV0QgQU5EIFJJT1QgQ09OVFJPTFwiXV0sdFtcIjAzXCJdPVtBW1wiR1IuTTEuRVhQTE9TSVZFIE9SRE5BTkNFIERJU1BPU0FMXCJdXSx0W1wiMDRcIl09W0FbXCJHUi5NMS5TRUNVUklUWVwiXV0sdFtcIjA1XCJdPVtBW1wiR1IuTTEuU05JUEVSXCJdXSx0W1wiMDZcIl09W0FbXCJHUi5NMS5TUEVDSUFMIFdFQVBPTlMgQU5EIFRBQ1RJQ1NcIl1dLHRbXCIwN1wiXT1bQVtcIlNULk0xLk5PTkdPVkVSTk1FTlRBTCBPUkdBTklaQVRJT04gKE5HTylcIl1dLHRbXCIwOFwiXT1bQVtcIkdSLk0xLk1VTFRJTkFUSU9OQUxcIl1dLHRbXCIwOVwiXT1bQVtcIkdSLk0xLk1VTFRJTkFUSU9OQUwgU1BFQ0lBTElaRUQgVU5JVFwiXV0sdFsxMF09W0FbXCJTVC5NMS5HT1ZFUk5NRU5UIE9SR0FOSVpBVElPTlwiXV0sdFsxMV09W0FbXCJHUi5NMS5WSURFTyBJTUFHRVJZXCJdXSx0WzEyXT1bQVtcIkdSLk0xLkoxXCJdXSx0WzEzXT1bQVtcIkdSLk0xLkoyXCJdXSx0WzE0XT1bQVtcIkdSLk0xLkozXCJdXSx0WzE1XT1bQVtcIkdSLk0xLko0XCJdXSx0WzE2XT1bQVtcIkdSLk0xLko1XCJdXSx0WzE3XT1bQVtcIkdSLk0xLko2XCJdXSx0WzE4XT1bQVtcIkdSLk0xLko3XCJdXSx0WzE5XT1bQVtcIkdSLk0xLko4XCJdXSx0WzIwXT1bQVtcIkdSLk0xLko5XCJdXSx0WzIxXT1bQVtcIkdSLk0xLk9GLTFcIl1dLHRbMjJdPVtBW1wiR1IuTTEuT0YtMlwiXV0sdFsyM109W0FbXCJHUi5NMS5PRi0zXCJdXSx0WzI0XT1bQVtcIkdSLk0xLk9GLTRcIl1dLHRbMjVdPVtBW1wiR1IuTTEuT0YtNVwiXV0sdFsyNl09W0FbXCJHUi5NMS5PRi02XCJdXSx0WzI3XT1bQVtcIkdSLk0xLk9GLTdcIl1dLHRbMjhdPVtBW1wiR1IuTTEuT0YtOFwiXV0sdFsyOV09W0FbXCJHUi5NMS5PRi05XCJdXSx0WzMwXT1bQVtcIkdSLk0xLk9GLTEwXCJdXSx0WzMxXT1bQVtcIkdSLk0xLk9GLURcIl1dLHRbMzJdPVtBW1wiR1IuTTEuT1ItMVwiXV0sdFszM109W0FbXCJHUi5NMS5PUi0yXCJdXSx0WzM0XT1bQVtcIkdSLk0xLk9SLTNcIl1dLHRbMzVdPVtBW1wiR1IuTTEuT1ItNFwiXV0sdFszNl09W0FbXCJHUi5NMS5PUi01XCJdXSx0WzM3XT1bQVtcIkdSLk0xLk9SLTZcIl1dLHRbMzhdPVtBW1wiR1IuTTEuT1ItN1wiXV0sdFszOV09W0FbXCJHUi5NMS5PUi04XCJdXSx0WzQwXT1bQVtcIkdSLk0xLk9SLTlcIl1dLHRbNDFdPVtBW1wiR1IuTTEuV08tMVwiXV0sdFs0Ml09W0FbXCJHUi5NMS5XTy0yXCJdXSx0WzQzXT1bQVtcIkdSLk0xLldPLTNcIl1dLHRbNDRdPVtBW1wiR1IuTTEuV08tNFwiXV0sdFs0NV09W0FbXCJHUi5NMS5XTy01XCJdXSx0WzQ2XT1bQVtcIkdSLk0xLklORElWSURVQUxcIl1dLHRbNDddPVtBW1wiR1IuTTEuVEVBTVwiXV0sdFs0OF09W0FbXCJHUi5NMS5TUVVBRFwiXV0sdFs0OV09W0FbXCJHUi5NMS5TRUNUSU9OXCJdXSx0WzUwXT1bQVtcIkdSLk0xLlBMQVRPT05cIl1dLHRbNTFdPVtBW1wiR1IuTTEuQ09NUEFOWVwiXV0sdFs1Ml09W0FbXCJHUi5NMS5CQVRUQUxJT05cIl1dLHRbNTNdPVtBW1wiR1IuTTEuUkVHSU1FTlRcIl1dLHRbNTRdPVtBW1wiR1IuTTEuQlJJR0FERVwiXV0sdFs1NV09W0FbXCJHUi5NMS5ESVZJU0lPTlwiXV0sRVtcIjAxXCJdPVtBW1wiR1IuTTIuQUlSQk9STkVcIl1dLEVbXCIwMlwiXT1bQVtcIkdSLk0yLkJJQ1lDTEUgRVFVSVBQRURcIl1dLEVbXCIwM1wiXT1bQVtcIkdSLk0yLkRFTU9MSVRJT05cIl1dLEVbXCIwNFwiXT1bQVtcIkdSLk0yLkoxXCJdXSxFW1wiMDVcIl09W0FbXCJHUi5NMi5KMlwiXV0sRVtcIjA2XCJdPVtBW1wiR1IuTTIuSjNcIl1dLEVbXCIwN1wiXT1bQVtcIkdSLk0yLko0XCJdXSxFW1wiMDhcIl09W0FbXCJHUi5NMi5KNVwiXV0sRVtcIjA5XCJdPVtBW1wiR1IuTTIuSjZcIl1dLEVbMTBdPVtBW1wiR1IuTTIuSjdcIl1dLEVbMTFdPVtBW1wiR1IuTTIuSjhcIl1dLEVbMTJdPVtBW1wiR1IuTTIuSjlcIl1dLEVbMTNdPVtBW1wiR1IuTTIuTU9VTlRBSU5cIl1dLEVbMTRdPVtBW1wiR1IuTTIuT0YtMVwiXV0sRVsxNV09W0FbXCJHUi5NMi5PRi0yXCJdXSxFWzE2XT1bQVtcIkdSLk0yLk9GLTNcIl1dLEVbMTddPVtBW1wiR1IuTTIuT0YtNFwiXV0sRVsxOF09W0FbXCJHUi5NMi5PRi01XCJdXSxFWzE5XT1bQVtcIkdSLk0yLk9GLTZcIl1dLEVbMjBdPVtBW1wiR1IuTTIuT0YtN1wiXV0sRVsyMV09W0FbXCJHUi5NMi5PRi04XCJdXSxFWzIyXT1bQVtcIkdSLk0yLk9GLTlcIl1dLEVbMjNdPVtBW1wiR1IuTTIuT0YtMTBcIl1dLEVbMjRdPVtBW1wiR1IuTTIuT0YtRFwiXV0sRVsyNV09W0FbXCJHUi5NMi5PUi0xXCJdXSxFWzI2XT1bQVtcIkdSLk0yLk9SLTJcIl1dLEVbMjddPVtBW1wiR1IuTTIuT1ItM1wiXV0sRVsyOF09W0FbXCJHUi5NMi5PUi00XCJdXSxFWzI5XT1bQVtcIkdSLk0yLk9SLTVcIl1dLEVbMzBdPVtBW1wiR1IuTTIuT1ItNlwiXV0sRVszMV09W0FbXCJHUi5NMi5PUi03XCJdXSxFWzMyXT1bQVtcIkdSLk0yLk9SLThcIl1dLEVbMzNdPVtBW1wiR1IuTTIuT1ItOVwiXV0sRVszNF09W0FbXCJHUi5NMi5XTy0xXCJdXSxFWzM1XT1bQVtcIkdSLk0yLldPLTJcIl1dLEVbMzZdPVtBW1wiR1IuTTIuV08tM1wiXV0sRVszN109W0FbXCJHUi5NMi5XTy00XCJdXSxFWzM4XT1bQVtcIkdSLk0yLldPLTVcIl1dLEVbMzldPVtBW1wiR1IuTTIuU0tJXCJdXSl9fSx0SV0sUkk9W1EsZyxiLEssWCx3LF8sSixaLHEsaiwkLElJLHt0eXBlOlwibnVtYmVyXCIsZ2V0TWV0YWRhdGE6dSxnZXRJY29uczp2LGljb25QYXJ0czpjLGljb25zOmZ1bmN0aW9uKEksdCxFLFIsZSxBLEMpe1wiNjBcIj09ZSYmKElbMTFlNF09W10sSVsxMTAxMDBdPVtBW1wiQ1kuSUMuQ09NQkFUIE1JU1NJT04gVEVBTVwiXV0sSVsxMTAyMDBdPVtBW1wiQ1kuSUMuTkFUSU9OQUwgTUlTU0lPTiBURUFNXCJdXSxJWzExMDMwMF09W0FbXCJDWS5JQy5DWUJFUiBQUk9URUNUSU9OIFRFQU1cIl1dLElbMTEwNDAwXT1bQVtcIkNZLklDLk5BVElPTiBTVEFURSBDWUJFUiBUSFJFQVQgQUNUT1JcIl1dLElbMTEwNTAwXT1bQVtcIkNZLklDLk5PTiBOQVRJT04gU1RBVEUgQ1lCRVIgVEhSRUFUIEFDVE9SXCJdXSl9fSx0SV07cmV0dXJuIHMuYWRkSWNvbnMoQikscy5hZGRJY29ucyhZKSxzLmFkZEljb25zKFcpLHMuYWRkSWNvbnMoRUkpLHMuYWRkSWNvbnMoUkkpLHMuUGF0aDJEPWZ1bmN0aW9uKEksdCl7dmFyIEUsUixlLEEsQyxULFMsTixPLEcsbztJLmJlZ2luUGF0aCgpO3ZhciBNPXQubWF0Y2goLyhbTUNMSFZdW15NQ0xIVl0qKS9naSk7Zm9yKFM9MDtTPE0ubGVuZ3RoO1MrKyl7aWYoXCJNXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0uKltcXGRdLylbMF0uc3BsaXQoL1tcXHMsXS9nKSxPPUU9cGFyc2VGbG9hdChvWzBdKSxHPVI9cGFyc2VGbG9hdChvWzFdKSxJLm1vdmVUbyhFLFIpLE49MjtOPG8ubGVuZ3RoO04rPTIpRT1wYXJzZUZsb2F0KG9bTl0pLFI9cGFyc2VGbG9hdChvW04rMV0pLEkubGluZVRvKEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJihJLmNsb3NlUGF0aCgpLEU9TyxSPUcpfWlmKFwibVwiPT1NW1NdLmNoYXJBdCgwKSl7Zm9yKG89TVtTXS5tYXRjaCgvWy1cXGRdLipbXFxkXS8pWzBdLnNwbGl0KC9bXFxzLF0vZyksTz1FPUU/RStwYXJzZUZsb2F0KG9bMF0pOnBhcnNlRmxvYXQob1swXSksRz1SPVI/UitwYXJzZUZsb2F0KG9bMV0pOnBhcnNlRmxvYXQob1sxXSksSS5tb3ZlVG8oRSxSKSxOPTI7TjxvLmxlbmd0aDtOKz0yKUUrPXBhcnNlRmxvYXQob1tOXSksUis9cGFyc2VGbG9hdChvW04rMV0pLEkubGluZVRvKEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJihJLmNsb3NlUGF0aCgpLEU9TyxSPUcpfWlmKFwiTFwiPT1NW1NdLmNoYXJBdCgwKSl7Zm9yKG89TVtTXS5tYXRjaCgvWy1cXGRdLipbXFxkXS8pWzBdLnNwbGl0KC9bXFxzLF0vZyksTj0wO048by5sZW5ndGg7Tis9MilFPXBhcnNlRmxvYXQob1tOXSksUj1wYXJzZUZsb2F0KG9bTisxXSksSS5saW5lVG8oRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmKEkuY2xvc2VQYXRoKCksRT1PLFI9Ryl9aWYoXCJsXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0uKltcXGRdLylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKz0yKUUrPXBhcnNlRmxvYXQob1tOXSksUis9cGFyc2VGbG9hdChvW04rMV0pLEkubGluZVRvKEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJkkuY2xvc2VQYXRoKCl9aWYoXCJDXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0uKltcXGRdLylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKz02KWU9cGFyc2VGbG9hdChvW05dKSxBPXBhcnNlRmxvYXQob1tOKzFdKSxDPXBhcnNlRmxvYXQob1tOKzJdKSxUPXBhcnNlRmxvYXQob1tOKzNdKSxFPXBhcnNlRmxvYXQob1tOKzRdKSxSPXBhcnNlRmxvYXQob1tOKzVdKSxJLmJlemllckN1cnZlVG8oZSxBLEMsVCxFLFIpO1wiWlwiPT1NW1NdLnJlcGxhY2UoL1xccy9nLFwiXCIpLnN1YnN0cigtMSwxKS50b1VwcGVyQ2FzZSgpJiZJLmNsb3NlUGF0aCgpfWlmKFwiY1wiPT1NW1NdLmNoYXJBdCgwKSl7Zm9yKG89TVtTXS5tYXRjaCgvWy1cXGRdLipbXFxkXS8pWzBdLnNwbGl0KC9bXFxzLF0vZyksTj0wO048by5sZW5ndGg7Tis9NillPUUrcGFyc2VGbG9hdChvW05dKSxBPVIrcGFyc2VGbG9hdChvW04rMV0pLEM9RStwYXJzZUZsb2F0KG9bTisyXSksVD1SK3BhcnNlRmxvYXQob1tOKzNdKSxFKz1wYXJzZUZsb2F0KG9bTis0XSksUis9cGFyc2VGbG9hdChvW04rNV0pLEkuYmV6aWVyQ3VydmVUbyhlLEEsQyxULEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJkkuY2xvc2VQYXRoKCl9aWYoXCJIXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0oLipbXFxkXSk/LylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKyspRT1wYXJzZUZsb2F0KG9bTl0pLEkubGluZVRvKEUsUik7XCJaXCI9PU1bU10ucmVwbGFjZSgvXFxzL2csXCJcIikuc3Vic3RyKC0xLDEpLnRvVXBwZXJDYXNlKCkmJkkuY2xvc2VQYXRoKCl9aWYoXCJoXCI9PU1bU10uY2hhckF0KDApKXtmb3Iobz1NW1NdLm1hdGNoKC9bLVxcZF0oLipbXFxkXSk/LylbMF0uc3BsaXQoL1tcXHMsXS9nKSxOPTA7TjxvLmxlbmd0aDtOKyspRSs9cGFyc2VGbG9hdChvW05dKSxJLmxpbmVUbyhFLFIpO1wiWlwiPT1NW1NdLnJlcGxhY2UoL1xccy9nLFwiXCIpLnN1YnN0cigtMSwxKS50b1VwcGVyQ2FzZSgpJiZJLmNsb3NlUGF0aCgpfWlmKFwiVlwiPT1NW1NdLmNoYXJBdCgwKSl7Zm9yKG89TVtTXS5tYXRjaCgvWy1cXGRdKC4qW1xcZF0pPy8pWzBdLnNwbGl0KC9bXFxzLF0vZyksTj0wO048by5sZW5ndGg7TisrKVI9cGFyc2VGbG9hdChvW05dKSxJLmxpbmVUbyhFLFIpO1wiWlwiPT1NW1NdLnJlcGxhY2UoL1xccy9nLFwiXCIpLnN1YnN0cigtMSwxKS50b1VwcGVyQ2FzZSgpJiZJLmNsb3NlUGF0aCgpfWlmKFwidlwiPT1NW1NdLmNoYXJBdCgwKSl7Zm9yKG89TVtTXS5tYXRjaCgvWy1cXGRdKC4qW1xcZF0pPy8pWzBdLnNwbGl0KC9bXFxzLF0vZyksTj0wO048by5sZW5ndGg7TisrKVIrPXBhcnNlRmxvYXQob1tOXSksSS5saW5lVG8oRSxSKTtcIlpcIj09TVtTXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5zdWJzdHIoLTEsMSkudG9VcHBlckNhc2UoKSYmSS5jbG9zZVBhdGgoKX19fSxzfSk7IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsImV4cG9ydCBjbGFzcyBEcm9wZG93blxyXG57XHJcbiAgICAjY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICAjb3B0aW9uczogc3RyaW5nW107ICAgIFxyXG4gICAgI29wZW4/OiBib29sZWFuO1xyXG4gICAgI2NvbnRlbnQ/OiBIVE1MRWxlbWVudDtcclxuICAgICNjYWxsYmFjaz86IENhbGxhYmxlRnVuY3Rpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IoSUQ6IHN0cmluZywgb3B0aW9uczogc3RyaW5nW10sIGNhbGxiYWNrOiBDYWxsYWJsZUZ1bmN0aW9uKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuI2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKElEKTtcclxuICAgICAgICB0aGlzLiNvcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB0aGlzLiNjYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuY2xvc2UoKVxyXG4gICAgICAgIHRoaXMuI2NvbnRhaW5lcj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy4jb3BlbiA/IHRoaXMuY2xvc2UoKTogdGhpcy5vcGVuKCk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBvcGVuKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLiNvcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLWRyb3Bkb3duLW9wZW5cIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwib2x5bXB1cy1kcm9wZG93bi1jbG9zZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgICAgICAgICB0aGlzLiNjb250ZW50LmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLWRyb3Bkb3duLWNvbnRlbnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRlbnQuc3R5bGUud2lkdGggPSAodGhpcy4jY29udGFpbmVyLm9mZnNldFdpZHRoIC0gdGhpcy4jY29udGFpbmVyLm9mZnNldEhlaWdodCkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLiNjb250ZW50LnN0eWxlLmxlZnQgPSB0aGlzLiNjb250YWluZXIub2Zmc2V0TGVmdCArIFwicHhcIjtcclxuICAgICAgICAgICAgdGhpcy4jY29udGVudC5zdHlsZS50b3AgPSB0aGlzLiNjb250YWluZXIub2Zmc2V0VG9wICsgdGhpcy4jY29udGFpbmVyLm9mZnNldEhlaWdodCArIFwicHhcIjtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy4jY29udGFpbmVyKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiNjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoZWlnaHQgPSAyO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBvcHRpb25JRCBpbiB0aGlzLiNvcHRpb25zKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoXCJvbHltcHVzLWRyb3Bkb3duLWVsZW1lbnRcIik7XHJcbiAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuI29wdGlvbnNbb3B0aW9uSURdKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb250ZW50LmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ICs9IG5vZGUub2Zmc2V0SGVpZ2h0ICsgMjtcclxuICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmlubmVySFRNTCA9IHRoaXMuI29wdGlvbnNbb3B0aW9uSURdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiNjYWxsYmFjayAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiNjYWxsYmFjayh0aGlzLiNvcHRpb25zW29wdGlvbklEXSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4jY29udGVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLiNvcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lcj8uY2xhc3NMaXN0LnJlbW92ZShcIm9seW1wdXMtZHJvcGRvd24tb3BlblwiKTtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyPy5jbGFzc0xpc3QuYWRkKFwib2x5bXB1cy1kcm9wZG93bi1jbG9zZWRcIik7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLiNjb250ZW50ICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuI2NvbnRlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImV4cG9ydCBjbGFzcyBTZWxlY3Rpb25TY3JvbGxcclxue1xyXG4gICAgI2NvbnRhaW5lciA6IEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgICNkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgKSBcclxuICAgIHtcclxuICAgICAgICB0aGlzLiNjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgICAgdGhpcy4jZGlzcGxheSA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2Rpc3BsYXkgPSB0aGlzLiNjb250YWluZXIuc3R5bGUuZGlzcGxheTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3coeDogbnVtYmVyLCB5OiBudW1iZXIsIG9wdGlvbnM6IGFueSwgY2FsbGJhY2s6IENhbGxhYmxlRnVuY3Rpb24pXHJcbiAgICB7XHJcbiAgICAgICAgLyogSGlkZSB0byByZW1vdmUgYnV0dG9ucywgaWYgcHJlc2VudCAqL1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwgJiYgb3B0aW9ucy5sZW5ndGggPiAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSB0aGlzLiNkaXNwbGF5O1xyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUubGVmdCA9IHggLSAxMTAgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5zdHlsZS50b3AgPSB5IC0gMTEwICsgXCJweFwiOyBcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IG9wdGlvbklEIGluIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChcIm9seW1wdXMtc2VsZWN0aW9uLXNjcm9sbC1lbGVtZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShvcHRpb25zW29wdGlvbklEXSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGNhbGxiYWNrKG9wdGlvbnNbb3B0aW9uSURdKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoaWRlKClcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy4jY29udGFpbmVyICE9IG51bGwpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgICAgICB2YXIgYnV0dG9ucyA9IHRoaXMuI2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLm9seW1wdXMtc2VsZWN0aW9uLXNjcm9sbC1lbGVtZW50XCIpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjaGlsZCBvZiBidXR0b25zKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHsgZ2V0QWN0aXZlQ29hbGl0aW9uLCBzZXRBY3RpdmVDb2FsaXRpb24gfSBmcm9tIFwiLi5cIjtcclxuaW1wb3J0IHsgZGVnMnJhZCB9IGZyb20gXCIuLi9vdGhlci91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbldoZWVsXHJcbntcclxuICAgICNjb250YWluZXI6IEhUTUxFbGVtZW50IHwgbnVsbDtcclxuICAgICNkaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZylcclxuICAgIHtcclxuICAgICAgICB0aGlzLiNjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgICAgdGhpcy4jZGlzcGxheSA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2NvYWxpdGlvbi1zd2l0Y2hcIik/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB0aGlzLiNvblN3aXRjaChlKSlcclxuICAgICAgICAgICAgdGhpcy4jZGlzcGxheSA9IHRoaXMuI2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5O1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHNob3coeDogbnVtYmVyLCB5OiBudW1iZXIsIG9wdGlvbnM6IGFueSwgc2hvd0NvYWxpdGlvbjogYm9vbGVhbilcclxuICAgIHtcclxuICAgICAgICAvKiBIaWRlIHRvIHJlbW92ZSBidXR0b25zLCBpZiBwcmVzZW50ICovXHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gdGhpcy4jZGlzcGxheTtcclxuICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnN0eWxlLmxlZnQgPSB4IC0gMTEwICsgXCJweFwiO1xyXG4gICAgICAgICAgICB0aGlzLiNjb250YWluZXIuc3R5bGUudG9wID0geSAtIDExMCArIFwicHhcIjsgXHJcblxyXG4gICAgICAgICAgICB2YXIgYW5ndWxhclNpemUgPSAzNjAgLyBvcHRpb25zLmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIHIgPSA4MDtcclxuXHJcbiAgICAgICAgICAgIC8qIENyZWF0ZSB0aGUgYnV0dG9ucyAqL1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpZCBpbiBvcHRpb25zKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwic2VsZWN0aW9uLXdoZWVsLWJ1dHRvblwiKTtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0geCAtIDI1ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IHkgLSAyNSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiBvcHRpb25zW2lkXS5jYWxsYmFjayhlKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNjb250YWluZXIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIHZhciBhbmdsZSA9IHBhcnNlSW50KGlkKSAqIGFuZ3VsYXJTaXplO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLm9wYWNpdHkgPSBcIjFcIjtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0geCArIHIgKiBNYXRoLnNpbihkZWcycmFkKGFuZ2xlKSkgLSAyNSArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSB5IC0gciAqIE1hdGguY29zKGRlZzJyYWQoYW5nbGUpKSAtIDI1ICsgXCJweFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcbiAgICAgICAgICAgICAgICBpbWFnZS5jbGFzc0xpc3QuYWRkKFwic2VsZWN0aW9uLXdoZWVsLWltYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gYGltYWdlcy9idXR0b25zLyR7b3B0aW9uc1tpZF0uc3JjfWBcclxuICAgICAgICAgICAgICAgIGltYWdlLnRpdGxlID0gb3B0aW9uc1tpZF0udG9vbHRpcDtcclxuICAgICAgICAgICAgICAgIGlmICgndGludCcgaW4gb3B0aW9uc1tpZF0pXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnNldFByb3BlcnR5KCdiYWNrZ3JvdW5kLWNvbG9yJywgb3B0aW9uc1tpZF0udGludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc3R5bGUub3BhY2l0eSA9IFwiMFwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnV0dG9uLmFwcGVuZENoaWxkKGltYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyogSGlkZSB0aGUgY29hbGl0aW9uIHN3aXRjaCBpZiByZXF1aXJlZCAqL1xyXG4gICAgICAgICAgICB2YXIgc3dpdGNoQ29udGFpbmVyID0gPEhUTUxFbGVtZW50PiB0aGlzLiNjb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNjb2FsaXRpb24tc3dpdGNoLWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgaWYgKHNob3dDb2FsaXRpb24gPT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWN0aXZlLWNvYWxpdGlvbi1jb2xvcicsIGdldENvbXB1dGVkU3R5bGUodGhpcy4jY29udGFpbmVyKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1uZXV0cmFsLWNvYWxpdGlvbi1jb2xvclwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ2V0QWN0aXZlQ29hbGl0aW9uKCkgPT0gXCJibHVlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjdGl2ZS1jb2FsaXRpb24tY29sb3InLCBnZXRDb21wdXRlZFN0eWxlKHRoaXMuI2NvbnRhaW5lcikuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYmx1ZS1jb2FsaXRpb24tY29sb3JcIikpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1hY3RpdmUtY29hbGl0aW9uLWNvbG9yJywgZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiNjb250YWluZXIpLmdldFByb3BlcnR5VmFsdWUoXCItLXJlZC1jb2FsaXRpb24tY29sb3JcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhpZGUoKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgICAgIHZhciBidXR0b25zID0gdGhpcy4jY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuc2VsZWN0aW9uLXdoZWVsLWJ1dHRvblwiKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgYnV0dG9ucylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy4jY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAjb25Td2l0Y2goZTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLiNjb250YWluZXIgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmIChlLmN1cnJlbnRUYXJnZXQuY2hlY2tlZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWFjdGl2ZS1jb2FsaXRpb24tY29sb3InLCBnZXRDb21wdXRlZFN0eWxlKHRoaXMuI2NvbnRhaW5lcikuZ2V0UHJvcGVydHlWYWx1ZShcIi0tcmVkLWNvYWxpdGlvbi1jb2xvclwiKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVDb2FsaXRpb24oXCJyZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tYWN0aXZlLWNvYWxpdGlvbi1jb2xvcicsIGdldENvbXB1dGVkU3R5bGUodGhpcy4jY29udGFpbmVyKS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1ibHVlLWNvYWxpdGlvbi1jb2xvclwiKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRBY3RpdmVDb2FsaXRpb24oXCJibHVlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgKiBhcyBMIGZyb20gJ2xlYWZsZXQnXHJcbmltcG9ydCB7IGdldFVuaXRzTWFuYWdlciB9IGZyb20gJy4uJztcclxuaW1wb3J0IHsgQ29udmVydEREVG9ETVMgfSBmcm9tICcuLi9vdGhlci91dGlscyc7XHJcblxyXG4vKiBFZGl0IGhlcmUgdG8gY2hhbmdlIHNlcnZlciBhZGRyZXNzICovXHJcbnZhciBSRVNUYWRkcmVzcyA9IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwMC9yZXN0ZGVtb1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFGcm9tRENTKGNhbGxiYWNrOiBDYWxsYWJsZUZ1bmN0aW9uKVxyXG57XHJcbiAgICAvKiBSZXF1ZXN0IHRoZSB1cGRhdGVkIHVuaXQgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgKi9cclxuICAgIHZhciB4bWxIdHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4bWxIdHRwLm9wZW4oIFwiR0VUXCIsIFJFU1RhZGRyZXNzLCB0cnVlKTsgXHJcblxyXG4gICAgeG1sSHR0cC5vbmxvYWQgPSBmdW5jdGlvbihlKSBcclxuICAgIHtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2UoeG1sSHR0cC5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIGNhbGxiYWNrKGRhdGEpO1xyXG4gICAgfTtcclxuXHJcbiAgICB4bWxIdHRwLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgWE1MSHR0cFJlcXVlc3RcIik7XHJcbiAgICB9O1xyXG4gICAgeG1sSHR0cC5zZW5kKCBudWxsICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhZGREZXN0aW5hdGlvbihJRDogbnVtYmVyLCBwYXRoOiBhbnkpXHJcbntcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKFwiUFVUXCIsIFJFU1RhZGRyZXNzKTtcclxuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7fTtcclxuXHJcbiAgICB2YXIgY29tbWFuZCA9IHtcIklEXCI6IElELCBcInBhdGhcIjogcGF0aH1cclxuICAgIHZhciBkYXRhID0ge1wic2V0UGF0aFwiOiBjb21tYW5kfVxyXG5cclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNwYXduU21va2UoY29sb3I6IHN0cmluZywgbGF0bG5nOiBMLkxhdExuZylcclxue1xyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZGRlZCBcIiArIGNvbG9yICsgXCIgc21va2UgYXQgXCIgKyBDb252ZXJ0RERUb0RNUyhsYXRsbmcubGF0LCBmYWxzZSkgKyBcIiBcIiArIENvbnZlcnRERFRvRE1TKGxhdGxuZy5sbmcsIHRydWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb21tYW5kID0ge1wiY29sb3JcIjogY29sb3IsIFwibG9jYXRpb25cIjogbGF0bG5nfTtcclxuICAgIHZhciBkYXRhID0ge1wic21va2VcIjogY29tbWFuZH1cclxuXHJcbiAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzcGF3bkdyb3VuZFVuaXQodHlwZTogc3RyaW5nLCBsYXRsbmc6IEwuTGF0TG5nLCBjb2FsaXRpb246IHN0cmluZylcclxueyAgICAgICAgXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbihcIlBVVFwiLCBSRVNUYWRkcmVzcyk7XHJcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFkZGVkIFwiICsgY29hbGl0aW9uICsgXCIgXCIgKyB0eXBlICsgXCIgYXQgXCIgKyBDb252ZXJ0RERUb0RNUyhsYXRsbmcubGF0LCBmYWxzZSkgKyBcIiBcIiArIENvbnZlcnRERFRvRE1TKGxhdGxuZy5sbmcsIHRydWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb21tYW5kID0ge1widHlwZVwiOiB0eXBlLCBcImxvY2F0aW9uXCI6IGxhdGxuZywgXCJjb2FsaXRpb25cIjogY29hbGl0aW9ufTtcclxuICAgIHZhciBkYXRhID0ge1wic3Bhd25Hcm91bmRcIjogY29tbWFuZH1cclxuXHJcbiAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzcGF3bkFpcmNyYWZ0KHR5cGU6IHN0cmluZywgbGF0bG5nOiBMLkxhdExuZywgY29hbGl0aW9uOiBzdHJpbmcsIHBheWxvYWROYW1lID0gXCJcIiwgYWlyYmFzZU5hbWUgPSBcIlwiKVxyXG57ICAgICAgICBcclxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgIHhoci5vcGVuKFwiUFVUXCIsIFJFU1RhZGRyZXNzKTtcclxuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWRkZWQgXCIgKyBjb2FsaXRpb24gKyBcIiBcIiArIHR5cGUgKyBcIiBhdCBcIiArIENvbnZlcnRERFRvRE1TKGxhdGxuZy5sYXQsIGZhbHNlKSArIFwiIFwiICsgQ29udmVydEREVG9ETVMobGF0bG5nLmxuZywgdHJ1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSB7XCJ0eXBlXCI6IHR5cGUsIFwibG9jYXRpb25cIjogbGF0bG5nLCBcImNvYWxpdGlvblwiOiBjb2FsaXRpb24sIFwicGF5bG9hZE5hbWVcIjogcGF5bG9hZE5hbWUsIFwiYWlyYmFzZU5hbWVcIjogYWlyYmFzZU5hbWV9O1xyXG4gICAgdmFyIGRhdGEgPSB7XCJzcGF3bkFpclwiOiBjb21tYW5kfVxyXG5cclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGF0dGFja1VuaXQoSUQ6IG51bWJlciwgdGFyZ2V0SUQ6IG51bWJlcilcclxueyAgICAgICAgXHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbihcIlBVVFwiLCBSRVNUYWRkcmVzcyk7XHJcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcbiAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgY29uc29sZS5sb2coXCJVbml0IFwiICsgZ2V0VW5pdHNNYW5hZ2VyKCkuZ2V0VW5pdEJ5SUQoSUQpLnVuaXROYW1lICsgXCIgYXR0YWNrIFwiICsgZ2V0VW5pdHNNYW5hZ2VyKCkuZ2V0VW5pdEJ5SUQodGFyZ2V0SUQpLnVuaXROYW1lICk7XHJcbiAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjb21tYW5kID0ge1wiSURcIjogSUQsIFwidGFyZ2V0SURcIjogdGFyZ2V0SUR9O1xyXG4gICAgdmFyIGRhdGEgPSB7XCJhdHRhY2tVbml0XCI6IGNvbW1hbmR9XHJcblxyXG4gICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVVbml0KElEOiBudW1iZXIpXHJcbnsgICAgICAgIFxyXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xyXG4gICAgICAgICAgIGNvbnNvbGUubG9nKFwiVW5pdCBcIiArIGdldFVuaXRzTWFuYWdlcigpLmdldFVuaXRCeUlEKElEKS51bml0TmFtZSArIFwiIGNsb25lZFwiKTtcclxuICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdmFyIGNvbW1hbmQgPSB7XCJJRFwiOiBJRH07XHJcbiAgICB2YXIgZGF0YSA9IHtcImNsb25lVW5pdFwiOiBjb21tYW5kfVxyXG5cclxuICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxufVxyXG4iLCJpbXBvcnQgeyBNYXAgfSBmcm9tIFwiLi9tYXAvbWFwXCJcclxuaW1wb3J0IHsgZ2V0RGF0YUZyb21EQ1MgfSBmcm9tIFwiLi9kY3MvZGNzXCJcclxuaW1wb3J0IHsgU2VsZWN0aW9uV2hlZWwgfSBmcm9tIFwiLi9jb250cm9scy9zZWxlY3Rpb253aGVlbFwiO1xyXG5pbXBvcnQgeyBVbml0c01hbmFnZXIgfSBmcm9tIFwiLi91bml0cy91bml0c21hbmFnZXJcIjtcclxuaW1wb3J0IHsgVW5pdEluZm9QYW5lbCB9IGZyb20gXCIuL3BhbmVscy91bml0aW5mb3BhbmVsXCI7XHJcbmltcG9ydCB7IFNlbGVjdGlvblNjcm9sbCB9IGZyb20gXCIuL2NvbnRyb2xzL3NlbGVjdGlvbnNjcm9sbFwiO1xyXG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL2NvbnRyb2xzL2Ryb3Bkb3duXCI7XHJcblxyXG52YXIgbWFwOiBNYXA7XHJcbnZhciBzZWxlY3Rpb25XaGVlbDogU2VsZWN0aW9uV2hlZWw7XHJcbnZhciBzZWxlY3Rpb25TY3JvbGw6IFNlbGVjdGlvblNjcm9sbDtcclxudmFyIHVuaXRzTWFuYWdlcjogVW5pdHNNYW5hZ2VyO1xyXG52YXIgdW5pdEluZm9QYW5lbDogVW5pdEluZm9QYW5lbDtcclxudmFyIGFjdGl2ZUNvYWxpdGlvbjogc3RyaW5nO1xyXG52YXIgc2NlbmFyaW9Ecm9wZG93bjogRHJvcGRvd247XHJcbnZhciBtYXBTb3VyY2VEcm9wZG93bjogRHJvcGRvd247XHJcblxyXG5mdW5jdGlvbiBzZXR1cCgpXHJcbntcclxuICAgIC8qIEluaXRpYWxpemUgKi9cclxuICAgIG1hcCA9IG5ldyBNYXAoJ21hcC1jb250YWluZXInKTtcclxuICAgIHNlbGVjdGlvbldoZWVsID0gbmV3IFNlbGVjdGlvbldoZWVsKFwic2VsZWN0aW9uLXdoZWVsXCIpO1xyXG4gICAgc2VsZWN0aW9uU2Nyb2xsID0gbmV3IFNlbGVjdGlvblNjcm9sbChcInNlbGVjdGlvbi1zY3JvbGxcIik7XHJcbiAgICB1bml0c01hbmFnZXIgPSBuZXcgVW5pdHNNYW5hZ2VyKCk7XHJcbiAgICB1bml0SW5mb1BhbmVsID0gbmV3IFVuaXRJbmZvUGFuZWwoXCJ1bml0LWluZm8tcGFuZWxcIik7XHJcbiAgICBzY2VuYXJpb0Ryb3Bkb3duID0gbmV3IERyb3Bkb3duKFwic2NlbmFyaW8tZHJvcGRvd25cIiwgW1wiQ2F1Y2FzdXNcIiwgXCJTeXJpYVwiLCBcIk5ldmFkYVwiLCBcIk1hcmlhbmFzXCIsIFwiU291dGggQXRsYW50aWNcIiwgXCJUaGUgY2hhbm5lbFwiXSwgKCkgPT4ge30pO1xyXG4gICAgbWFwU291cmNlRHJvcGRvd24gPSBuZXcgRHJvcGRvd24oXCJtYXAtc291cmNlLWRyb3Bkb3duXCIsIG1hcC5nZXRMYXllcnMoKSwgKG9wdGlvbjogc3RyaW5nKSA9PiBtYXAuc2V0TGF5ZXIob3B0aW9uKSk7XHJcblxyXG4gICAgYWN0aXZlQ29hbGl0aW9uID0gXCJibHVlXCI7XHJcblxyXG4gICAgLyogTWFpbiB1cGRhdGUgcmF0ZSA9IDI1MG1zIGlzIG1pbmltdW0gdGltZSwgZXF1YWwgdG8gc2VydmVyIHVwZGF0ZSB0aW1lLiAqL1xyXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4gZ2V0RGF0YUZyb21EQ1ModXBkYXRlKSwgMjUwKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdXBkYXRlKGRhdGE6IEpTT04pXHJcbntcclxuICAgIHVuaXRzTWFuYWdlci51cGRhdGUoZGF0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXAoKVxyXG57XHJcbiAgICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uV2hlZWwoKVxyXG57XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uV2hlZWw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rpb25TY3JvbGwoKVxyXG57XHJcbiAgICByZXR1cm4gc2VsZWN0aW9uU2Nyb2xsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pdHNNYW5hZ2VyKClcclxue1xyXG4gICAgcmV0dXJuIHVuaXRzTWFuYWdlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRJbmZvUGFuZWwoKVxyXG57XHJcbiAgICByZXR1cm4gdW5pdEluZm9QYW5lbDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjdGl2ZUNvYWxpdGlvbihjb2FsaXRpb246IHN0cmluZylcclxue1xyXG4gICAgYWN0aXZlQ29hbGl0aW9uID0gY29hbGl0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlQ29hbGl0aW9uKClcclxue1xyXG4gICAgcmV0dXJuIGFjdGl2ZUNvYWxpdGlvbjtcclxufVxyXG5cclxud2luZG93Lm9ubG9hZCA9IHNldHVwOyIsImltcG9ydCAqIGFzIEwgZnJvbSBcImxlYWZsZXRcIlxyXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25XaGVlbCwgZ2V0U2VsZWN0aW9uU2Nyb2xsLCBnZXRVbml0c01hbmFnZXIsIGdldEFjdGl2ZUNvYWxpdGlvbiB9IGZyb20gXCIuLlwiO1xyXG5pbXBvcnQgeyBzcGF3bkFpcmNyYWZ0IH0gZnJvbSBcIi4uL2Rjcy9kY3NcIjtcclxuaW1wb3J0IHsgcGF5bG9hZE5hbWVzIH0gZnJvbSBcIi4uL3VuaXRzL3BheWxvYWROYW1lc1wiO1xyXG5pbXBvcnQgeyB1bml0VHlwZXMgfSBmcm9tIFwiLi4vdW5pdHMvdW5pdFR5cGVzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTWFwIGV4dGVuZHMgTC5NYXAgXHJcbntcclxuICAgICNzdGF0ZTogc3RyaW5nO1xyXG4gICAgI2xheWVyPzogTC5UaWxlTGF5ZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoSUQ6IHN0cmluZylcclxuICAgIHtcclxuICAgICAgICAvKiBJbml0IHRoZSBsZWFmbGV0IG1hcCAqL1xyXG4gICAgICAgIHN1cGVyKElELCB7ZG91YmxlQ2xpY2tab29tOiBmYWxzZSwgem9vbUNvbnRyb2w6IGZhbHNlfSk7XHJcbiAgICAgICAgdGhpcy5zZXRWaWV3KFszNy4yMywgLTExNS44XSwgMTIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuc2V0TGF5ZXIoXCJBcmNHSVMgU2F0ZWxsaXRlXCIpO1xyXG5cclxuICAgICAgICAvKiBJbml0IHRoZSBzdGF0ZSBtYWNoaW5lICovXHJcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBcIklETEVcIjtcclxuXHJcbiAgICAgICAgLyogUmVnaXN0ZXIgZXZlbnQgaGFuZGxlcyAqL1xyXG4gICAgICAgIHRoaXMub24oXCJjb250ZXh0bWVudVwiLCAoZSkgPT4gdGhpcy4jb25Db250ZXh0TWVudShlKSk7XHJcbiAgICAgICAgdGhpcy5vbihcImNsaWNrXCIsIChlKSA9PiB0aGlzLiNvbkNsaWNrKGUpKTtcclxuICAgICAgICB0aGlzLm9uKFwiZGJsY2xpY2tcIiwgKGUpID0+IHRoaXMuI29uRG91YmxlQ2xpY2soZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExheWVyKGxheWVyTmFtZTogc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLiNsYXllciAhPSBudWxsKVxyXG4gICAgICAgIHsgICBcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVMYXllcih0aGlzLiNsYXllcilcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGxheWVyTmFtZSA9PSBcIkFyY0dJUyBTYXRlbGxpdGVcIilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoXCJodHRwczovL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL1dvcmxkX0ltYWdlcnkvTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH1cIiwge1xyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb246IFwiVGlsZXMgJmNvcHk7IEVzcmkgJm1kYXNoOyBTb3VyY2U6IEVzcmksIGktY3ViZWQsIFVTREEsIFVTR1MsIEFFWCwgR2VvRXllLCBHZXRtYXBwaW5nLCBBZXJvZ3JpZCwgSUdOLCBJR1AsIFVQUi1FR1AsIGFuZCB0aGUgR0lTIFVzZXIgQ29tbXVuaXR5XCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxheWVyTmFtZSA9PSBcIlVTR1MgVG9wb1wiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy4jbGF5ZXIgPSBMLnRpbGVMYXllcignaHR0cHM6Ly9iYXNlbWFwLm5hdGlvbmFsbWFwLmdvdi9hcmNnaXMvcmVzdC9zZXJ2aWNlcy9VU0dTVG9wby9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsIHtcclxuICAgICAgICAgICAgICAgIG1heFpvb206IDIwLFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICdUaWxlcyBjb3VydGVzeSBvZiB0aGUgPGEgaHJlZj1cImh0dHBzOi8vdXNncy5nb3YvXCI+VS5TLiBHZW9sb2dpY2FsIFN1cnZleTwvYT4nXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChsYXllck5hbWUgPT0gXCJPcGVuU3RyZWV0TWFwIE1hcG5pa1wiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy4jbGF5ZXIgPSBMLnRpbGVMYXllcignaHR0cHM6Ly90aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsIHtcclxuICAgICAgICAgICAgICAgIG1heFpvb206IDE5LFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICcmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycydcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxheWVyTmFtZSA9PSBcIk9QRU5WS2FydGVcIilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8vdGlsZXNlcnZlci5tZW1vbWFwcy5kZS90aWxlZ2VuL3t6fS97eH0ve3l9LnBuZycsIHtcclxuICAgICAgICAgICAgICAgIG1heFpvb206IDE4LFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRpb246ICdNYXAgPGEgaHJlZj1cImh0dHBzOi8vbWVtb21hcHMuZGUvXCI+bWVtb21hcHMuZGU8L2E+IDxhIGhyZWY9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvXCI+Q0MtQlktU0E8L2E+LCBtYXAgZGF0YSAmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycydcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxheWVyTmFtZSA9PSBcIkVzcmkuRGVMb3JtZVwiKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy4jbGF5ZXIgPSBMLnRpbGVMYXllcignaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9TcGVjaWFsdHkvRGVMb3JtZV9Xb3JsZF9CYXNlX01hcC9NYXBTZXJ2ZXIvdGlsZS97en0ve3l9L3t4fScsIHtcclxuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9uOiAnVGlsZXMgJmNvcHk7IEVzcmkgJm1kYXNoOyBDb3B5cmlnaHQ6ICZjb3B5OzIwMTIgRGVMb3JtZScsXHJcbiAgICAgICAgICAgICAgICBtaW5ab29tOiAxLFxyXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogMTFcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGxheWVyTmFtZSA9PSBcIkN5Y2xPU01cIilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2xheWVyID0gTC50aWxlTGF5ZXIoJ2h0dHBzOi8ve3N9LnRpbGUtY3ljbG9zbS5vcGVuc3RyZWV0bWFwLmZyL2N5Y2xvc20ve3p9L3t4fS97eX0ucG5nJywge1xyXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogMjAsXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogJzxhIGhyZWY9XCJodHRwczovL2dpdGh1Yi5jb20vY3ljbG9zbS9jeWNsb3NtLWNhcnRvY3NzLXN0eWxlL3JlbGVhc2VzXCIgdGl0bGU9XCJDeWNsT1NNIC0gT3BlbiBCaWN5Y2xlIHJlbmRlclwiPkN5Y2xPU008L2E+IHwgTWFwIGRhdGE6ICZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jbGF5ZXI/LmFkZFRvKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExheWVycygpXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIFtcIkFyY0dJUyBTYXRlbGxpdGVcIiwgXCJVU0dTIFRvcG9cIiwgXCJPcGVuU3RyZWV0TWFwIE1hcG5pa1wiLCBcIk9QRU5WS2FydGVcIiwgXCJFc3JpLkRlTG9ybWVcIiwgXCJDeWNsT1NNXCJdXHJcbiAgICB9XHJcblxyXG4gICAgLyogU3RhdGUgbWFjaGluZSAqL1xyXG4gICAgc2V0U3RhdGUoc3RhdGU6IHN0cmluZylcclxuICAgIHtcclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHN0YXRlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gXCJJRExFXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IFwiTU9WRV9VTklUXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IFwiQVRUQUNLXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IFwiRk9STUFUSU9OXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RhdGUoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBTZWxlY3Rpb24gd2hlZWwgKi9cclxuICAgIHNob3dTZWxlY3Rpb25XaGVlbChlOiBQb2ludGVyRXZlbnQsIG9wdGlvbnM6IGFueSwgc2hvd0NvYWxpdGlvbjogYm9vbGVhbilcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IGUueDtcclxuICAgICAgICB2YXIgeSA9IGUueTtcclxuICAgICAgICBnZXRTZWxlY3Rpb25XaGVlbCgpLnNob3coeCwgeSwgb3B0aW9ucywgc2hvd0NvYWxpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZVNlbGVjdGlvbldoZWVsKClcclxuICAgIHtcclxuICAgICAgICBnZXRTZWxlY3Rpb25XaGVlbCgpLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBTZWxlY3Rpb24gc2Nyb2xsICovXHJcbiAgICBzaG93U2VsZWN0aW9uU2Nyb2xsKGU6IFBvaW50ZXJFdmVudCwgb3B0aW9uczogYW55LCBjYWxsYmFjazogQ2FsbGFibGVGdW5jdGlvbilcclxuICAgIHtcclxuICAgICAgICB2YXIgeCA9IGUueDtcclxuICAgICAgICB2YXIgeSA9IGUueTtcclxuICAgICAgICBnZXRTZWxlY3Rpb25TY3JvbGwoKS5zaG93KHgsIHksIG9wdGlvbnMsIGNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlU2VsZWN0aW9uU2Nyb2xsKClcclxuICAgIHtcclxuICAgICAgICBnZXRTZWxlY3Rpb25TY3JvbGwoKS5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qIEV2ZW50IGhhbmRsZXJzICovXHJcbiAgICAjb25Db250ZXh0TWVudShlOiBhbnkpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcIklETEVcIik7XHJcbiAgICAgICAgZ2V0VW5pdHNNYW5hZ2VyKCkuZGVzZWxlY3RBbGxVbml0cygpO1xyXG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgI29uQ2xpY2soZTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuI3N0YXRlID09PSBcIklETEVcIilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gXCJNT1ZFX1VOSVRcIilcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGlmICghZS5vcmlnaW5hbEV2ZW50LmN0cmxLZXkpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGdldFVuaXRzTWFuYWdlcigpLmNsZWFyRGVzdGluYXRpb25zKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0VW5pdHNNYW5hZ2VyKCkuYWRkRGVzdGluYXRpb24oZS5sYXRsbmcpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICNvbkRvdWJsZUNsaWNrKGU6IGFueSlcclxuICAgIHtcclxuICAgICAgICBpZiAodGhpcy4jc3RhdGUgPT0gXCJJRExFXCIpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IFtcclxuICAgICAgICAgICAgICAgIHtcInRvb2x0aXBcIjogXCJBaXIgdW5pdFwiLCAgICAgICBcInNyY1wiOiBcInNwYXduQWlyLnBuZ1wiLCAgICAgICAgICBcImNhbGxiYWNrXCI6ICgpID0+IHRoaXMuI2FpcmNyYWZ0U3Bhd25NZW51KGUpfSxcclxuICAgICAgICAgICAgICAgIHtcInRvb2x0aXBcIjogXCJHcm91bmQgdW5pdFwiLCAgICBcInNyY1wiOiBcInNwYXduR3JvdW5kLnBuZ1wiLCAgICAgICBcImNhbGxiYWNrXCI6ICgpID0+IHRoaXMuI2dyb3VuZFVuaXRTcGF3bk1lbnUoZSl9LFxyXG4gICAgICAgICAgICAgICAge1widG9vbHRpcFwiOiBcIlNtb2tlXCIsICAgICAgICAgIFwic3JjXCI6IFwic3Bhd25TbW9rZS5wbmdcIiwgICAgICAgIFwiY2FsbGJhY2tcIjogKCkgPT4gdGhpcy4jc21va2VTcGF3bk1lbnUoZSl9LFxyXG4gICAgICAgICAgICAgICAge1widG9vbHRpcFwiOiBcIkV4cGxvc2lvblwiLCAgICAgIFwic3JjXCI6IFwic3Bhd25FeHBsb3Npb24ucG5nXCIsICAgIFwiY2FsbGJhY2tcIjogKCkgPT4gdGhpcy4jZXhwbG9zaW9uU3Bhd25NZW51KGUpfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvbldoZWVsKGUub3JpZ2luYWxFdmVudCwgb3B0aW9ucywgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIFNwYXduaW5nIG1lbnVzICovIFxyXG4gICAgI2dyb3VuZFVuaXRTcGF3bk1lbnUoZTogYW55KVxyXG4gICAge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAjc21va2VTcGF3bk1lbnUoZTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgICNleHBsb3Npb25TcGF3bk1lbnUoZTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgICNhaXJjcmFmdFNwYXduTWVudShlOiBhbnkpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSBbXHJcbiAgICAgICAgICAgIHsnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnQ0FQJywgICAgICAgJ3NyYyc6ICdzcGF3bkNBUC5wbmcnLCAgICAgICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEFpcmNyYWZ0KGUsIFwiQ0FQXCIpfSxcclxuICAgICAgICAgICAgeydjb2FsaXRpb24nOiB0cnVlLCAndG9vbHRpcCc6ICdDQVMnLCAgICAgICAnc3JjJzogJ3NwYXduQ0FTLnBuZycsICAgICAgJ2NhbGxiYWNrJzogKCkgPT4gdGhpcy4jc2VsZWN0QWlyY3JhZnQoZSwgXCJDQVNcIil9LFxyXG4gICAgICAgICAgICB7J2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ1RhbmtlcicsICAgICdzcmMnOiAnc3Bhd25UYW5rZXIucG5nJywgICAnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RBaXJjcmFmdChlLCBcInRhbmtlclwiKX0sXHJcbiAgICAgICAgICAgIHsnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnQVdBQ1MnLCAgICAgJ3NyYyc6ICdzcGF3bkFXQUNTLnBuZycsICAgICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEFpcmNyYWZ0KGUsIFwiYXdhY3NcIil9LFxyXG4gICAgICAgICAgICB7J2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ1N0cmlrZScsICAgICdzcmMnOiAnc3Bhd25TdHJpa2UucG5nJywgICAnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RBaXJjcmFmdChlLCBcInN0cmlrZVwiKX0sXHJcbiAgICAgICAgICAgIHsnY29hbGl0aW9uJzogdHJ1ZSwgJ3Rvb2x0aXAnOiAnRHJvbmUnLCAgICAgJ3NyYyc6ICdzcGF3bkRyb25lLnBuZycsICAgICdjYWxsYmFjayc6ICgpID0+IHRoaXMuI3NlbGVjdEFpcmNyYWZ0KGUsIFwiZHJvbmVcIil9LFxyXG4gICAgICAgICAgICB7J2NvYWxpdGlvbic6IHRydWUsICd0b29sdGlwJzogJ1RyYW5zcG9ydCcsICdzcmMnOiAnc3Bhd25UcmFuc3BvcnQucG5nJywnY2FsbGJhY2snOiAoKSA9PiB0aGlzLiNzZWxlY3RBaXJjcmFmdChlLCBcInRyYW5zcG9ydFwiKX0sXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdGlvbldoZWVsKGUub3JpZ2luYWxFdmVudCwgb3B0aW9ucywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU2hvdyB1bml0IHNlbGVjdGlvbiBmb3IgYWlyIHVuaXRzICovXHJcbiAgICAjc2VsZWN0QWlyY3JhZnQoZTogYW55LCBncm91cDogc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuaGlkZVNlbGVjdGlvbldoZWVsKCk7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7XHJcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB1bml0VHlwZXMuYWlyW2dyb3VwXTtcclxuICAgICAgICBvcHRpb25zLnNvcnQoKTtcclxuICAgICAgICB0aGlzLnNob3dTZWxlY3Rpb25TY3JvbGwoZS5vcmlnaW5hbEV2ZW50LCBvcHRpb25zLCAodW5pdFR5cGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25XaGVlbCgpOyBcclxuICAgICAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uU2Nyb2xsKCk7IFxyXG4gICAgICAgICAgICB0aGlzLiN1bml0U2VsZWN0UGF5bG9hZChlLCB1bml0VHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU2hvdyB3ZWFwb24gc2VsZWN0aW9uIGZvciBhaXIgdW5pdHMgKi9cclxuICAgICN1bml0U2VsZWN0UGF5bG9hZChlOiBhbnksIHVuaXRUeXBlOiBzdHJpbmcpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTtcclxuICAgICAgICB2YXIgb3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIG9wdGlvbnMgPSBwYXlsb2FkTmFtZXNbdW5pdFR5cGVdXHJcbiAgICAgICAgaWYgKG9wdGlvbnMgIT0gdW5kZWZpbmVkICYmIG9wdGlvbnMubGVuZ3RoID4gMClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dTZWxlY3Rpb25TY3JvbGwoZS5vcmlnaW5hbEV2ZW50LCBvcHRpb25zLCAocGF5bG9hZE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlU2VsZWN0aW9uV2hlZWwoKTsgXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVTZWxlY3Rpb25TY3JvbGwoKTsgXHJcbiAgICAgICAgICAgICAgICBzcGF3bkFpcmNyYWZ0KHVuaXRUeXBlLCBlLmxhdGxuZywgZ2V0QWN0aXZlQ29hbGl0aW9uKCksIHBheWxvYWROYW1lLCBlLmFpcmJhc2VOYW1lKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBzcGF3bkFpcmNyYWZ0KHVuaXRUeXBlLCBlLmxhdGxuZywgZ2V0QWN0aXZlQ29hbGl0aW9uKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSBcclxuIiwiZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGxhdDE6IG51bWJlciwgbG9uMTogbnVtYmVyLCBsYXQyOiBudW1iZXIsIGxvbjI6IG51bWJlcilcclxue1xyXG4gICAgY29uc3QgUiA9IDYzNzFlMzsgLy8gbWV0cmVzXHJcbiAgICBjb25zdCDPhjEgPSBkZWcycmFkKGxhdDEpOyAvLyDPhiwgzrsgaW4gcmFkaWFuc1xyXG4gICAgY29uc3Qgz4YyID0gZGVnMnJhZChsYXQyKTtcclxuICAgIGNvbnN0IM6Uz4YgPSBkZWcycmFkKGxhdDItbGF0MSk7XHJcbiAgICBjb25zdCDOlM67ID0gZGVnMnJhZChsb24yLWxvbjEpO1xyXG5cclxuICAgIGNvbnN0IGEgPSBNYXRoLnNpbijOlM+GLzIpICogTWF0aC5zaW4ozpTPhi8yKSArIE1hdGguY29zKM+GMSkgKiBNYXRoLmNvcyjPhjIpICogTWF0aC5zaW4ozpTOuy8yKSAqIE1hdGguc2luKM6UzrsvMik7XHJcbiAgICBjb25zdCBjID0gMiAqIE1hdGguYXRhbjIoTWF0aC5zcXJ0KGEpLCBNYXRoLnNxcnQoMS1hKSk7XHJcblxyXG4gICAgY29uc3QgZCA9IFIgKiBjOyAvLyBpbiBtZXRyZXNcclxuXHJcbiAgICByZXR1cm4gZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJlYXJpbmcobGF0MTogbnVtYmVyLCBsb24xOiBudW1iZXIsIGxhdDI6IG51bWJlciwgbG9uMjogbnVtYmVyKVxyXG57XHJcbiAgICBjb25zdCDPhjEgPSBkZWcycmFkKGxhdDEpOyAvLyDPhiwgzrsgaW4gcmFkaWFuc1xyXG4gICAgY29uc3Qgz4YyID0gZGVnMnJhZChsYXQyKTtcclxuICAgIGNvbnN0IM67MSA9IGRlZzJyYWQobG9uMSk7IC8vIM+GLCDOuyBpbiByYWRpYW5zXHJcbiAgICBjb25zdCDOuzIgPSBkZWcycmFkKGxvbjIpO1xyXG4gICAgY29uc3QgeSA9IE1hdGguc2luKM67Mi3OuzEpICogTWF0aC5jb3Moz4YyKTtcclxuICAgIGNvbnN0IHggPSBNYXRoLmNvcyjPhjEpKk1hdGguc2luKM+GMikgLSBNYXRoLnNpbijPhjEpKk1hdGguY29zKM+GMikqTWF0aC5jb3MozrsyLc67MSk7XHJcbiAgICBjb25zdCDOuCA9IE1hdGguYXRhbjIoeSwgeCk7XHJcbiAgICBjb25zdCBicm5nID0gKHJhZDJkZWcozrgpICsgMzYwKSAlIDM2MDsgLy8gaW4gZGVncmVlc1xyXG5cclxuICAgIHJldHVybiBicm5nO1xyXG59XHJcblxyXG5jb25zdCB6ZXJvUGFkID0gZnVuY3Rpb24obnVtOiBudW1iZXIsIHBsYWNlczogbnVtYmVyKVxyXG57XHJcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKG51bSk7XHJcbiAgICB3aGlsZSAoc3RyaW5nLmxlbmd0aCA8IHBsYWNlcylcclxuICAgIHtcclxuICAgICAgICBzdHJpbmcgKz0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RyaW5nO1xyXG59IFxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIENvbnZlcnRERFRvRE1TKEQ6IG51bWJlciwgbG5nOiBib29sZWFuKSBcclxue1xyXG4gICAgdmFyIGRpciA9IEQgPCAwID8gKGxuZyA/IFwiV1wiIDogXCJTXCIpIDogbG5nID8gXCJFXCIgOiBcIk5cIjtcclxuICAgIHZhciBkZWcgPSAwIHwgKEQgPCAwID8gKEQgPSAtRCkgOiBEKTtcclxuICAgIHZhciBtaW4gPSAwIHwgKCgoRCArPSAxZS05KSAlIDEpICogNjApO1xyXG4gICAgdmFyIHNlYyA9ICgwIHwgKCgoRCAqIDYwKSAlIDEpICogNjAwMCkpIC8gMTAwO1xyXG4gICAgdmFyIGRlYyA9IE1hdGgucm91bmQoKHNlYyAtIE1hdGguZmxvb3Ioc2VjKSkgKiAxMDApO1xyXG4gICAgdmFyIHNlYyA9IE1hdGguZmxvb3Ioc2VjKTtcclxuICAgIGlmIChsbmcpXHJcbiAgICAgICAgcmV0dXJuIGRpciArIHplcm9QYWQoZGVnLCAzKSArIFwiwrBcIiArIHplcm9QYWQobWluLCAyKSArIFwiJ1wiICsgemVyb1BhZChzZWMsIDIpICsgXCIuXCIgKyB6ZXJvUGFkKGRlYywgMikgKyBcIlxcXCJcIjtcclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gZGlyICsgemVyb1BhZChkZWcsIDIpICsgXCLCsFwiICsgemVyb1BhZChtaW4sIDIpICsgXCInXCIgKyB6ZXJvUGFkKHNlYywgMikgKyBcIi5cIiArIHplcm9QYWQoZGVjLCAyKSArIFwiXFxcIlwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVnMnJhZChkZWc6IG51bWJlcilcclxue1xyXG4gICAgdmFyIHBpID0gTWF0aC5QSTtcclxuICAgIHJldHVybiBkZWcgKiAocGkvMTgwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhZDJkZWcocmFkOiBudW1iZXIpXHJcbntcclxuICAgIHZhciBwaSA9IE1hdGguUEk7XHJcbiAgICByZXR1cm4gcmFkIC8gKHBpLzE4MCk7XHJcbn0iLCJpbXBvcnQgeyBDb252ZXJ0RERUb0RNUywgcmFkMmRlZyB9IGZyb20gXCIuLi9vdGhlci91dGlsc1wiO1xyXG5pbXBvcnQgeyBVbml0IH0gZnJvbSBcIi4uL3VuaXRzL3VuaXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBVbml0SW5mb1BhbmVsXHJcbntcclxuICAgICNlbGVtZW50OiBIVE1MRWxlbWVudFxyXG4gICAgI2Rpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihJRDogc3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuI2VsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoSUQpO1xyXG4gICAgICAgIHRoaXMuI2Rpc3BsYXkgPSAnJztcclxuICAgICAgICBpZiAodGhpcy4jZWxlbWVudCAhPSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy4jZGlzcGxheSA9IHRoaXMuI2VsZW1lbnQuc3R5bGUuZGlzcGxheTtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3coKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuI2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHRoaXMuI2Rpc3BsYXk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZSgpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy4jZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKHVuaXQ6IFVuaXQpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2VsZW1lbnQgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiN1bml0LW5hbWVcIikhLmlubmVySFRNTCA9IHVuaXQudW5pdE5hbWU7IFxyXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZ3JvdXAtbmFtZVwiKSEuaW5uZXJIVE1MID0gdW5pdC5ncm91cE5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNoZWFkaW5nXCIpIS5pbm5lckhUTUwgPSBTdHJpbmcoTWF0aC5mbG9vcihyYWQyZGVnKHVuaXQuaGVhZGluZykpICsgXCLCsFwiKTtcclxuICAgICAgICAgICAgdGhpcy4jZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2FsdGl0dWRlXCIpIS5pbm5lckhUTUwgPSBTdHJpbmcoTWF0aC5mbG9vcih1bml0LmFsdGl0dWRlIC8gMC4zMDQ4KSArIFwiZnRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuI2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNncm91bmRzcGVlZFwiKSEuaW5uZXJIVE1MID0gU3RyaW5nKE1hdGguZmxvb3IodW5pdC5zcGVlZCAqIDEuOTQzODQpICsgXCJrdHNcIik7XHJcbiAgICAgICAgICAgIC8vdGhpcy4jZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2FsdGl0dWRlXCIpIS5pbm5lckhUTUwgPSBTdHJpbmcoTWF0aC5mbG9vcih1bml0Lm1pc3Npb25EYXRhLmZ1ZWwgKiAxMDApICsgXCIlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLiNlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcG9zaXRpb25cIikhLmlubmVySFRNTCA9IENvbnZlcnRERFRvRE1TKHVuaXQubGF0aXR1ZGUsIGZhbHNlKSArIFwiIFwiICsgQ29udmVydEREVG9ETVModW5pdC5sb25naXR1ZGUsIHRydWUpO1xyXG4gICAgICAgIH0gXHJcbiAgICB9XHJcbn0iLCJleHBvcnQgdmFyIHBheWxvYWROYW1lczogYW55ID0ge1wiQS0xMEFcIjogW1wiTUstODQqMiAsIExBVS02OCoyICwgQUdNLTY1SyoyXCIsIFwiTEFVLTY4LU1LNSo2XCIsIFwiQUdNLTY1SyoyLE1rMjAqNixBSU0tOSoyLEVDTVwiLCBcIk1rLTgyKjYsQUlNLTkqMixFQ01cIiwgXCJNazIwKjYsQUlNLTkqMixFQ01cIiwgXCJBR00tNjVEKjQsQUlNLTkqMixFQ01cIiwgXCJBR00tNjVLLCBBR00tNjVEXCIsIFwiRUNNXCIsIFwiTWstODIqNiwgTWstODQqMlwiLCBcIk1rMjAqOFwiLCBcIkFHTS02NUsqMixNay04NCoyLEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1SyoyLE1rLTgyKjYsQUlNLTkqMixFQ01cIiwgXCJNay04NCoyLEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1SyoyLE1rODQqMixNazgyKjQsQUlNLTlNKjIsRUNNXCIsIFwiQUdNLTY1SCo2LE1rODIqMTAsQUlNLTlNKjIsRUNNXCJdLCBcIkEtMTBDXCI6IFtcIkxBVS02OCA0MiBya3QgTTE1NiBXUCwgQUlNLTkqMiwgRUNNXCIsIFwiQUdNLTY1RCo0LCBDQlUtOTcqMiwgQ0JVLTg3KjIsIFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiTEFVLTEzMSA5OCBya3QgTTE1NiBXUCwgQUlNLTkqMixFQ01cIiwgXCJTVVUtMjUqOSxBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqNCwgQ0JVLTk3KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJNay04MkFJUio4LEFJTS05KjIsRUNNXCIsIFwiTUstODQqMixMQVUtNjgqMixBR00tNjVLKjJcIiwgXCJCRFUtMzMqNiwgVEdNLTY1SCwgVEdNLTY1RCwgVEdQLCBCRFUtNTBMR0IqMiwgQ0FQLTkqMVwiLCBcIk1rLTgyKjYsTWstODQqMixBSU0tOSoyLEVDTVwiLCBcIk1rLTg0KjQsQUlNLTkqMixFQ01cIiwgXCJNay04Mio4LEFJTS05KjIsRUNNXCIsIFwiQkRVLTMzKjEyLCBUR1AsIENBUC05KjFcIiwgXCJBR00tNjVEKjQsTWstODJBSVIqMixDQlUtODcqMixBSU0tOU0qMixFQ00sVEdQXCIsIFwiQUdNLTY1RCo0LEdCVS0xMioyLEdCVS0zOCxNay04MixBSU0tOSxUR1AsRUNNXCIsIFwiQUdNLTY1RCoyLCBBR00tNjVIKjIsIENCVS05NyoyLCBDQlUtODcqMiwgVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJCRFUtNTBIRCo2LE1rMSo3LFRHUCwgQ0FQLTkqMVwiLCBcIkFHTS02NUgqNCwgQ0JVLTk3KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLE1rLTgyQUlSKjIsQ0JVLTg3KjIsQUlNLTlNKjIsRUNNLFRHUFwiLCBcIkFHTS02NUsqMixHQlUtMzgqNCxBSU0tOSoyLFRHUCxFQ01cIiwgXCJCRFUtMzMqNiwgVEdQLCBDQVAtOSoxXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixHQlUtMTIqMixHQlUtMzgqMixBSU0tOSoyLFRHUCxFQ00sTUsxNTEqN1wiLCBcIlRHUFwiLCBcIkJEVS0zMyo2LCBUR1AsIENBUC05KjEsIEJEVS01MExEKjJcIiwgXCJHQlUtMTIqNixHQlUtMTAqMixUR1AsIEFJTS05KjJcIiwgXCJUR1AsIENCVS04NyozLCBNMTUxKjI4LCBBSU0tOSoyLCBFQ01cIiwgXCJBR00tNjVEKjQsTWstODIqNixDQlUtODcqMixUR1AsQUlNLTkqMixNazE1MSo3XCIsIFwiUEdNLSBHQlUtMTAqMixHQlUtMTIqNCxBSU0tOSoyLFRHUCxFQ01cIiwgXCJBR00tNjVEKjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJUR1AsIENBUC05KjEsIENBVE0tNjVLKjEsIFRHTS02NUcqMVwiLCBcIkFHTS02NUcqMixHQlUtMzEqMixBSU0tOSoyLFRHUCxFQ01cIiwgXCJUR1AsIE0xNTEqMTQsIE1rLTgyKjIsIE1rLTgyQUlSKjIsIEFJTS05KjIsIEVDTVwiLCBcIlBHTS0gR0JVLTEwKjQsIEFHTS02NUsqMixBSU0tOSoyLFRHUCxFQ01cIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLE1rLTgyQUlSKjYsQ0JVLTg3KjIsTWsxNTEqNyxBSU0tOSoyLFRHUCxFQ01cIiwgXCJHQlUtMzEqMixHQlUtMzgqMiwgQUdNLTY1SCoyLCBBSU0tOSoyLFRHUCwgRUNNXCIsIFwiQ0JVLTEwMyo0LCBNMTUxKjE0LCBBSU0tOSoyLCBFQ01cIiwgXCJDQlUtODcqNCwgTTE1MSo0MiwgQUlNLTkqMiwgRUNNXCIsIFwiQUdNLTY1RCo2LCBDQlUtOTcqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkNCVS04NyoyLCBNMTUxKjE0LCBNSy04MkFJUio2LCBBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqNCwgQ0JVLTEwNSo0LFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiQkRVLTUwSEQqMixCRFUtNTBMR0IqMixUR1AsIENBUC05KjFcIiwgXCJDQlUtODcqNCwgTTE1MSoyOCwgQUlNLTkqMixFQ01cIiwgXCJNMTUxKjk4LCBNay04MioyLEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixHQlUtMTIsR0JVLTM4LE1LODIqMyxNSzgyQUlSKjMsTUs1KjcsVEdQLEFNLTkqMlwiLCBcIlRHUCwgTTE1MSo0MiwgTWstODIqNiwgTWstODJBSVIqNiwgQUlNLTkqMiwgRUNNXCIsIFwiVEdQLCBNMTUxKjg0LCBNay04MioyLEFJTS05KjIsIEVDTVwiLCBcIkJEVS01MExEKjIsIEJEVS01MEhEKjIsQ0FUTS02NUssIFRHTS02NUcsIFRHUCwgQ0FQLTkqMVwiLCBcIlRHUCwgTTE1MSo0OSwgTWstODIqMiwgQ0JVLTg3KjIsIEFJTS05KjIsIEVDTVwiLCBcIlRHUCwgQ0FQLTkqMSwgQkRVLTUwTEdCKjRcIiwgXCJHQlUtMTIqMTQsVEdQLCBBSU0tOSoyXCIsIFwiQUdNLTY1RCozLCBBR00tNjVIKjMsIENCVS05Nyo0LFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixNay04MkFJUioyLENCVS05NyoyLEFJTS05TSoyLFRHUCxFQ01cIiwgXCJBR00tNjVEKjQsIENCVS0xMDUqMixDQlUtOTcqMiwgVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVEKjIsTWstODIqNixBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqMixBR00tNjVIKjIsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJHQlUtMzgqNCxHQlUtMzEqMixUR1AsIEFJTS05KjJcIiwgXCJBR00tNjVEKjQsR0JVLTEyKjIsR0JVLTM4KjIsQUlNLTkqMixUR1AsRUNNLE1LNSo3XCIsIFwiQUdNLTY1RyxBR00tNjVLLEdCVS0xMCoyLEFJTS05KjIsVEdQLEVDTVwiLCBcIkFHTS02NUcsQUdNLTY1RCxNay04Mio3LEFJTS05KjIsRUNNXCIsIFwiR0JVLTMxKjIsR0JVLTM4KjQsQUlNLTkqMixUR1AsRUNNLCBBSU0tOSoyXCIsIFwiQUdNLTY1SyoyLEdCVS0xMio4LEFJTS05TSoyLkVDTSxUR1BcIiwgXCJBR00tNjVEKjYsR0JVLTEyKjQsQUlNLTlNKjIsRUNNLFRHUFwiXSwgXCJBLTEwQ18yXCI6IFtcIkxBVS02OCA0MiBya3QgTTE1NiBXUCwgQUlNLTkqMiwgRUNNXCIsIFwiQUdNLTY1RCo0LCBDQlUtOTcqMiwgQ0JVLTg3KjIsIFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiTEFVLTEzMSA5OCBya3QgTTE1NiBXUCwgQUlNLTkqMixFQ01cIiwgXCJTVVUtMjUqOSxBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqNCwgQ0JVLTk3KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJNay04MkFJUio4LEFJTS05KjIsRUNNXCIsIFwiTUstODQqMixMQVUtNjgqMixBR00tNjVLKjJcIiwgXCJCRFUtMzMqNiwgVEdNLTY1SCwgVEdNLTY1RCwgVEdQLCBCRFUtNTBMR0IqMiwgQ0FQLTkqMVwiLCBcIk1rLTgyKjYsTWstODQqMixBSU0tOSoyLEVDTVwiLCBcIk1rLTg0KjQsQUlNLTkqMixFQ01cIiwgXCJNay04Mio4LEFJTS05KjIsRUNNXCIsIFwiQkRVLTMzKjEyLCBUR1AsIENBUC05KjFcIiwgXCJBR00tNjVEKjQsTWstODJBSVIqMixDQlUtODcqMixBSU0tOU0qMixFQ00sVEdQXCIsIFwiQUdNLTY1RCo0LEdCVS0xMioyLEdCVS0zOCxNay04MixBSU0tOSxUR1AsRUNNXCIsIFwiQUdNLTY1RCoyLCBBR00tNjVIKjIsIENCVS05NyoyLCBDQlUtODcqMiwgVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJCRFUtNTBIRCo2LE1rMSo3LFRHUCwgQ0FQLTkqMVwiLCBcIkFHTS02NUgqNCwgQ0JVLTk3KjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLE1rLTgyQUlSKjIsQ0JVLTg3KjIsQUlNLTlNKjIsRUNNLFRHUFwiLCBcIkFHTS02NUsqMixHQlUtMzgqNCxBSU0tOSoyLFRHUCxFQ01cIiwgXCJCRFUtMzMqNiwgVEdQLCBDQVAtOSoxXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixHQlUtMTIqMixHQlUtMzgqMixBSU0tOSoyLFRHUCxFQ00sTUsxNTEqN1wiLCBcIlRHUFwiLCBcIkJEVS0zMyo2LCBUR1AsIENBUC05KjEsIEJEVS01MExEKjJcIiwgXCJHQlUtMTIqNixHQlUtMTAqMixUR1AsIEFJTS05KjJcIiwgXCJUR1AsIENCVS04NyozLCBNMTUxKjI4LCBBSU0tOSoyLCBFQ01cIiwgXCJBR00tNjVEKjQsTWstODIqNixDQlUtODcqMixUR1AsQUlNLTkqMixNazE1MSo3XCIsIFwiUEdNLSBHQlUtMTAqMixHQlUtMTIqNCxBSU0tOSoyLFRHUCxFQ01cIiwgXCJBR00tNjVEKjQsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJUR1AsIENBUC05KjEsIENBVE0tNjVLKjEsIFRHTS02NUcqMVwiLCBcIkFHTS02NUcqMixHQlUtMzEqMixBSU0tOSoyLFRHUCxFQ01cIiwgXCJUR1AsIE0xNTEqMTQsIE1rLTgyKjIsIE1rLTgyQUlSKjIsIEFJTS05KjIsIEVDTVwiLCBcIlBHTS0gR0JVLTEwKjQsIEFHTS02NUsqMixBSU0tOSoyLFRHUCxFQ01cIiwgXCJBR00tNjVEKjIsQUdNLTY1SCoyLE1rLTgyQUlSKjYsQ0JVLTg3KjIsTWsxNTEqNyxBSU0tOSoyLFRHUCxFQ01cIiwgXCJHQlUtMzEqMixHQlUtMzgqMiwgQUdNLTY1SCoyLCBBSU0tOSoyLFRHUCwgRUNNXCIsIFwiQ0JVLTEwMyo0LCBNMTUxKjE0LCBBSU0tOSoyLCBFQ01cIiwgXCJDQlUtODcqNCwgTTE1MSo0MiwgQUlNLTkqMiwgRUNNXCIsIFwiQUdNLTY1RCo2LCBDQlUtOTcqNCxUR1AsIEVDTSwgQUlNLTkqMlwiLCBcIkNCVS04NyoyLCBNMTUxKjE0LCBNSy04MkFJUio2LCBBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqNCwgQ0JVLTEwNSo0LFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiQkRVLTUwSEQqMixCRFUtNTBMR0IqMixUR1AsIENBUC05KjFcIiwgXCJDQlUtODcqNCwgTTE1MSoyOCwgQUlNLTkqMixFQ01cIiwgXCJNMTUxKjk4LCBNay04MioyLEFJTS05KjIsRUNNXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixHQlUtMTIsR0JVLTM4LE1LODIqMyxNSzgyQUlSKjMsTUs1KjcsVEdQLEFNLTkqMlwiLCBcIlRHUCwgTTE1MSo0MiwgTWstODIqNiwgTWstODJBSVIqNiwgQUlNLTkqMiwgRUNNXCIsIFwiVEdQLCBNMTUxKjg0LCBNay04MioyLEFJTS05KjIsIEVDTVwiLCBcIkJEVS01MExEKjIsIEJEVS01MEhEKjIsQ0FUTS02NUssIFRHTS02NUcsIFRHUCwgQ0FQLTkqMVwiLCBcIlRHUCwgTTE1MSo0OSwgTWstODIqMiwgQ0JVLTg3KjIsIEFJTS05KjIsIEVDTVwiLCBcIlRHUCwgQ0FQLTkqMSwgQkRVLTUwTEdCKjRcIiwgXCJHQlUtMTIqMTQsVEdQLCBBSU0tOSoyXCIsIFwiQUdNLTY1RCozLCBBR00tNjVIKjMsIENCVS05Nyo0LFRHUCwgRUNNLCBBSU0tOSoyXCIsIFwiQUdNLTY1RCoyLEFHTS02NUgqMixNay04MkFJUioyLENCVS05NyoyLEFJTS05TSoyLFRHUCxFQ01cIiwgXCJBR00tNjVEKjQsIENCVS0xMDUqMixDQlUtOTcqMiwgVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJBR00tNjVEKjIsTWstODIqNixBSU0tOSoyLEVDTVwiLCBcIkFHTS02NUQqMixBR00tNjVIKjIsVEdQLCBFQ00sIEFJTS05KjJcIiwgXCJHQlUtMzgqNCxHQlUtMzEqMixUR1AsIEFJTS05KjJcIiwgXCJBR00tNjVEKjQsR0JVLTEyKjIsR0JVLTM4KjIsQUlNLTkqMixUR1AsRUNNLE1LNSo3XCIsIFwiQUdNLTY1RyxBR00tNjVLLEdCVS0xMCoyLEFJTS05KjIsVEdQLEVDTVwiLCBcIkFHTS02NUcsQUdNLTY1RCxNay04Mio3LEFJTS05KjIsRUNNXCIsIFwiR0JVLTMxKjIsR0JVLTM4KjQsQUlNLTkqMixUR1AsRUNNLCBBSU0tOSoyXCIsIFwiQUdNLTY1SyoyLEdCVS0xMio4LEFJTS05TSoyLkVDTSxUR1BcIiwgXCJBR00tNjVEKjYsR0JVLTEyKjQsQUlNLTlNKjIsRUNNLFRHUFwiLCBcIkFHTS02NUUqMixNay04MkFJUioyLENCVS05NyoyLEFJTS05TSoyLEVDTSxUR1BcIiwgXCJBR00tNjVFKjIsQ0JVLTk3KjQsQUlNLTlNKjIsRUNNLFRHUFwiLCBcIkFHTS02NUUqMixDQlUtOTcqNCxBSU0tOU0qMixFQ00sTTE1MSBBUEtXUyo3LFRHUFwiLCBcIkFHTS02NUUqMixDQlUtMTA1KjQsQUlNLTlNKjIsRUNNLE0xNTEgQVBLV1MqNyxUR1BcIiwgXCJNay04Mio0LE1rLThBSVIqNCxBSU0tOSoyLEVDTVwiLCBcIk1rLTgyKjIwLEFJTS05KjIsRUNNXCIsIFwiTWstODIqNixBSU0tOSoyLFRHUCxFQ01cIiwgXCJNay04NCo2LEFJTS05KjIsVEdQLEVDTVwiLCBcIk1rLTgyQUlSKjYsTWstOEFJUio0LE0xNTEqMSxUR1AsQUlNLTkqMixFQ01cIiwgXCJHQlUtMzgqNCxNMTUxIEFQS1dTKjcsQUdNLTY1RCoxLEFHTS02NUgqMSxUR1AsQUlNLTkqMixFQ01cIiwgXCJHQlUtMzgqNCxNMTUxIEFQS1dTKjcsQUdNLTY1RSoyLFRHUCxBSU0tOSoyLEVDTVwiLCBcIkdCVS0xMio0LE0xNTEgQVBLV1MqNyxBR00tNjVFKjIsVEdQLEFJTS05KjIsRUNNXCIsIFwiR0JVLTEyKjIsR0JVLTM4KjIsTTE1MSBBUEtXUyo3LEFHTS02NUUqMixUR1AsQUlNLTkqMixFQ01cIiwgXCJHQlUtMTAqMixNMTUxIEFQS1dTKjcsQUdNLTY1RSoyLFRHUCxBSU0tOSoyLEVDTVwiLCBcIkdCVS0zMSoyLE0xNTEgQVBLV1MqNyxBR00tNjVFKjIsVEdQLEFJTS05KjIsRUNNXCIsIFwiR0JVLTU0KjQsTTE1MSBBUEtXUyo3LEFHTS02NUUqMixUR1AsQUlNLTkqMixFQ01cIiwgXCJHQlUtNTQqNCxNMTUxIEFQS1dTKjcsQUdNLTY1RCo0LFRHUCxBSU0tOSoyLEVDTVwiXSwgXCJBSC02NERfQkxLX0lJXCI6IFtcIjQgKiBGdWVsIFRhbmsgMjMwIGdhbFwiLCBcIjIgKiBNMjYxOiBNMTUxICg2UEQpLCAyICogSGVsbGZpcmUgc3RhdGlvbjogNCpBR00tMTE0S1wiLCBcIjQgKiBIZWxsZmlyZSBzdGF0aW9uOiA0KkFHTS0xMTRLXCIsIFwiNCAqIE0yNjE6IE0xNTEgKDZQRClcIiwgXCIyICogTTI2MTogTTE1MSAoNlBEKSwgMiAqIEZ1ZWwgVGFuayAyMzAgZ2FsXCIsIFwiMiAqIEZ1ZWwgVGFuayAyMzAgZ2FsLCAyICogSGVsbGZpcmUgc3RhdGlvbjogNCpBR00tMTE0S1wiLCBcIjIgKiBNMjYxOiBBL0IgLSBNMTUxICg2UEQpLCBFIC0gTTI3NCAoNlNLKSwgMiAqIEhlbGxmaXJlIHN0YXRpb246IDQqQUdNLTExNEtcIiwgXCIyICogTTI2MTogQS9CIC0gTTE1MSAoNlBEKSwgRSAtIE0yNTcgKDZJTCksIDIgKiBIZWxsZmlyZSBzdGF0aW9uOiA0KkFHTS0xMTRLXCIsIFwiMiAqIE0yNjE6IEMgLSBNMjU3ICg2SUwpLCBEL0UgLSBNMTUxICg2UEQpLCAyICogSGVsbGZpcmUgc3RhdGlvbjogNCpBR00tMTE0S1wiLCBcIjIgKiBNMjYxOiBDIC0gTTI3NCAoNlNLKSwgRC9FIC0gTTE1MSAoNlBEKSwgMiAqIEhlbGxmaXJlIHN0YXRpb246IDQqQUdNLTExNEtcIl0sIFwiQUpTMzdcIjogW1wiQmF0dGxlZmllbGQgQWlyIEludGVyZGljdGlvbjogUkItNzUqNCwgUkItMjRKKjIsIFhUXCIsIFwiQW50aS1zaGlwOiBSQi0wNEUqMiwgUkItNzQqMiwgWFRcIiwgXCJBbnRpLXNoaXAgKEhlYXZ5IE1hdik6IFJCLTc1VCo0LCBYVFwiLCBcIkhhcmQgVGFyZ2V0IChDb3VudGVybWVhc3VyZXMpOiBSQi0wNSwgWFQsIEtCLCBVMjJcIiwgXCJIYXJkIFRhcmdldCAoTUFWKTogUkItNzVUKjIsIFJCLTc0KjIsIFhUXCIsIFwiRmVycnkgRmxpZ2h0OiBYVFwiLCBcIkNBUyAoNzUgR1VOKTogUkItNzUqMiwgQUtBTlwiLCBcIkNBUDogUkItNzQqNCwgWFRcIiwgXCJDb3VudGVybWVhc3VyZXMgRXNjb3J0OiBVLzIyQSwgS0JcIiwgXCJTdHJpa2U6IEJLOTAgKE1KMSkqMiwgUkItNzQqMiwgWFRcIiwgXCJDQVM6IEFLQU4sIFJCLTA1QVwiLCBcIkNBUCAoNiBBQU0pOiBSQi03NCo0LCBSQi0yNEoqMiwgWFRcIiwgXCJSb2NrZXQgSGFsZiBMb2FkIEhFOiBBUkFLIEhFKjIsIFJCLTc0KjIsIFhUXCIsIFwiQ0FQIC8gSW50ZWNlcHQ6IFJCLTA1QSoyLCBSQi03NCoyLCBYVFwiLCBcIkJvbWJzIExvdy1kcmFnOiBTQjcxTEQqMTYsIFJCLTI0SioyLCBYVFwiLCBcIlNFQUQ6IFJCLTc1VCoyLCBVMjIvQSwgS0IsIFhUXCIsIFwiQW50aS1TaGlwIChNb2Rlcm4pOiBSQi0xNUYqMiwgUkItNzQqMiwgWFRcIiwgXCJOZXcgUGF5bG9hZFwiLCBcIkNBUCAoQUozNyk6IFJCLTI0SioyXCIsIFwiRUNNIEVzY29ydCBBbnRpLXNoaXA6IFJCLTA0RSwgS0IsIFJCLTc0KjIsIFhUXCIsIFwiQm9tYnMgSGlnaC1kcmFnOiBTQjcxSEQqMTYsIFhULCBSQi0yNEpcIiwgXCJBbnRpLXNoaXAgKExpZ2h0IE1hdik6IFJCLTc1KjQsIFhUXCIsIFwiUm9ja2V0IEZ1bGwgTG9hZCBIRTogIEFSQUsgSEUqNCwgUkItMjRKLCBYVFwiLCBcIklsbHVtaW5hdGlvbjogTFlTQio4LCBYVFwiLCBcIkFudGktc2hpcCAoUkIwNSk6IFJCLTA1QSoyLCBSQi03NCoyLCBYVFwiLCBcIkNBUCAoR3VuKTogQUtBTioyLCBSQi03NCoyLCBYVFwiLCBcIkhhcmQgVGFyZ2V0OiBSQi0wNUEqMiwgUkItNzQqMiwgWFRcIiwgXCJSQi0wNSoyLCBYVFwiLCBcIkNBUzogQVJBSyBNNzAgSEUqNCwgWFRcIiwgXCJSdW53YXkgU3RyaWtlOiBTQjcxSEQqMTYsIFJCLTI0SiwgWFRcIl0sIFwiQVY4Qk5BXCI6IFtcIkgtTC1IIDJcIiwgXCJBRkFDIDFcIiwgXCJBUyAxXCIsIFwiSC1NLUggM1wiLCBcIkludGVyZGljdGlvbiAxIChILUgtSC1IKVwiLCBcIkludGVyZGljdGlvbiAyIChILUgtSC1IKVwiLCBcIkFGQUMgM1wiLCBcIkludGVyZGljdGlvbiAzIChILUwtTC1IKVwiLCBcIkgtTS1IIDFcIiwgXCJILUwtSCAxXCIsIFwiUEdNIDIgKEgtSC1ILUgpXCIsIFwiTC1MLUwgMVwiLCBcIkFGQUMgMlwiLCBcIkgtTS1IIDJcIiwgXCJBcmVhIFN1cHByZXNzaW9uXCIsIFwiUm9ja2V0cyAxXCIsIFwiQVMgMlwiLCBcIkhlbG8gRXNjb3J0IDFcIiwgXCJQR00gMSAoSC1ILUgtSClcIiwgXCJIZWxvIEVzY29ydCAyXCIsIFwiUEdNIDMgKEgtSC1ILUgpXCIsIFwiQW50aSBBcm1vclwiLCBcIlJBIDEgKEgtTS1NLUgpXCIsIFwiU3RhbmQgT2ZmIDFcIiwgXCJTdGFuZCBPZmYgMlwiLCBcIlN0YW5kIE9mZiAzXCIsIFwiSXJvbiBIYW5kIDFcIiwgXCJJcm9uIEhhbmQgMlwiXSwgXCJDLTEwMUNDXCI6IFtcIjIqQUlNLTlQLCBERUZBIDU1MyBDQU5OT04gKEkpXCIsIFwiMipBSU0tOU0sIERFRkEgNTUzIENBTk5PTiAoSSlcIiwgXCIyKkFJTS05UCwgREVGQSA1MzMgQ0FOTk9OIChJSSlcIiwgXCIyKkFJTS05UCwgQU4tTTMgQ0FOTk9OIChJVilcIiwgXCIyKlIuNTUwIE1BR0lDLCBERUZBIDU1MyBDQU5OT05cIiwgXCIyKkFJTS05TSwgQU4tTTMgQ0FOTk9OIChJSUkpXCIsIFwiMipBSU0tOVAsIERFRkEgNTUzIENBTk5PTlwiLCBcIjIqUi41NTAgTUFHSUMsIERFRkEgNTUzIENBTk5PTiAoSUlJKVwiLCBcIjIqQUlNLTlQLCAyKkJFTE9VR0EsIERFRkEgNTUzIENBTk5PTlwiLCBcIjIqQUlNOS1QLCAyKlNFQSBFQUdMRSwgREVGQS01NTMgQ0FOTk9OXCIsIFwiMipBSU0tOU0gMipTRUEgRUFHTEUsIEFOLU0zIENBTk5PTlwiLCBcIjIqQUlNLTlNLCBBTi1NMyBDQU5OT05cIiwgXCIyKkJFTE9VR0EsMipCRFUtMzMsIERFRkEtNTUzIENBTk5PTlwiLCBcIjIqIFNFQSBFQUdMRSwgREVGQS01NTMgQ0FOTk9OXCIsIFwiMipBSU0tOVAsIDIqQlItMjUwLDIqTUstODIsIERFRkEgNTUzIENBTk5PTlwiLCBcIjIqUi41NTAgTUFHSUMsIDIqU0VBIEVBR0xFICwgREVGQS01NTMgQ0FOTk9OXCIsIFwiMipSLjU1MCBNQUdJQywgREVGQSA1NTMgQ0FOTk9OIChJVilcIiwgXCIyKkJFTE9VR0EsIDIqQlItNTAwLCBERUZBIDU1MyBDQU5OT05cIiwgXCIyKkFJTS05TSwgREVGQSA1NTMgQ0FOTk9OIChJVilcIiwgXCIyKlIuNTUwIE1BR0lDLCBBTi1NMyBDQU5OT04gKElJKVwiLCBcIjIqUjU1MCBNYWdpYywgREVGQSA1NTMgQ0FOTk9OIChJKVwiLCBcIjIqQUlNLTlNICwyKkJFTE9VR0EsMipCSU4tMjAwLCBBTi1NMyBDQU5OT05cIiwgXCIyKkFJTS05TSwgMipMQVUgNjgsIDIqTUstODIsIERFRkEgNTUzIENBTk5PTlwiLCBcIjIqQUlNLTlQLCBBTi1NMyBDQU5OT04gKElJSSlcIiwgXCIyKkFJTS05TSwgREVGQSA1MzMgQ0FOTk9OIChJSSlcIiwgXCIyKlIuNTUwIE1BR0lDLCAyKkJSLTI1MCwgMipCRFUtMzMsIERFRkEgNTUzIENBTk5PTlwiXSwgXCJDLTEwMUVCXCI6IFtcIlNtb2tlIFN5c3RlbTogV2hpdGUgU21va2VcIiwgXCJTbW9rZSBTeXN0ZW06IFdoaXRlIFNtb2tlK1JlZCBDb2xvcmFudFwiLCBcIlNtb2tlIFN5c3RlbTogV2hpdGUgU21va2UrWWVsbG93IENvbG9yYW50XCJdLCBcIkgtNkpcIjogW1wiWUotMTIgeCAyXCIsIFwiWUotMTIgeCA0XCIsIFwiWUotODNLIHggNlwiLCBcIjI1MC0yIEhEIEJvbWIgeCAxMiBpbiBCYXlcIiwgXCIyNTAtMiBIRCBCb21iIHggMjQgaW4gQmF5XCIsIFwiMjUwLTMgTEQgQm9tYiB4IDM2XCIsIFwiS0QtNjMgeCA0XCIsIFwiS0QtMjAgeCA2XCIsIFwiS0QtMjAgeCA0XCIsIFwiS0QtNjMgeCAyLCBLRC0yMCB4IDRcIiwgXCJLRC02MyB4IDIsIEtELTIwIHggMlwiXSwgXCJKLTExQVwiOiBbXCJGQUItMTAweDM2LFItNzN4MixFQ01cIiwgXCJGQUItMjUweDgsUi03M3gyLEVDTVwiLCBcIkZBQi01MDB4OCxSLTczeDIsRUNNXCIsIFwiUy04S09NeDgwLEZBQi0yNTB4NCxSLTczeDIsRUNNXCIsIFwiUy0xM3gyMCxGQUItMjUweDQsUi03M3gyLEVDTVwiLCBcIlMtMjV4NCxGQUItNTAweDQsUi03M3gyLEVDTVwiLCBcIlItMjdFUng0LFItMjdFVHgyLFItNzN4MixFQ01cIiwgXCJSLTc3eDYsUi03M3gyLEVDTVwiLCBcIlItMjdFUng2LFItNzN4MixFQ01cIiwgXCJSLTc3eDQsUi0yN0VUeDIsUi03M3gyLEVDTVwiLCBcIlItNzd4NCxSLTI3RVJ4MixSLTczeDIsRUNNXCIsIFwiQmV0QUItNTAwU2hQeDYsUi03M3gyLEVDTVwiLCBcIlItNzN4NCxFQ01cIiwgXCJSLTc3eDIsUi0yN0VUeDIsUi03M3gyLEVDTVwiLCBcIlItNzd4NixSLTczeDRcIiwgXCJSLTc3eDIsUi0yN0VUeDIsUi0yN0VSeDIsUi03M3gyLEVDTVwiLCBcIlItMjdFVHgyLFItMjdFUng0LFItNzN4MixFQ01cIiwgXCJTLThUc014ODAsRkFCLTI1MHg0LFItNzN4MixFQ01cIiwgXCJTLThPRlAyeDgwLEZBQi0yNTB4NCxSLTczeDIsRUNNXCIsIFwiRkFCLTI1MHgxOCxSLTczeDIsRUNNXCIsIFwiMipTOC1LT014MiwgUi03M3gyLCBFQ01cIiwgXCIyKlM4LU9GUDJ4MiwgUi03M3gyLCBFQ01cIiwgXCJGQUItMjUweDQsIDIqRkFCLTUwMHgyLCBSLTczeDJcIiwgXCJGQUItMjUweDQsIDIqRkFCLTI1MHgyLCBSLTczeDJcIiwgXCJSQkstMjUwIEhFQVQvQVB4MiwgUkJLLTI1MCBIRS9GcmFneDIsIFItNzN4MlwiXSwgXCJKRi0xN1wiOiBbXCJQTC01RXgyLCBDODAyQUt4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgQy03MDEgSVJ4MiwgMTEwMEwgVGFuaywgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgU0QtMTB4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgTEQtMTB4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgODAwTCBUYW5rLCBXTUQ3XCIsIFwiUEwtNUV4MiwgR0JVLTEweDIsIFdNRDdcIiwgXCJQTC01RXgyLCAyKkdCVS0xMngyLCA4MDBMIFRhbmssIFdNRDdcIiwgXCJQTC01RXgyLCAyKk1rLTgyeDIsIE1rLTgzeDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIDExMDBMIFRhbmt4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgV01ENywgQ004MDJBS0d4MiwgODAwTCBUYW5rLCBETFwiLCBcIlBMLTVFeDIsIEMtNzAxIENDRHgyLCAxMTAwTCBUYW5rLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBHQlUtMTJ4MiwgMTEwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIDIqR0JVLTEyeDIsIEdCVS0xNngyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgV01ENywgODAwTCBUYW5reDIsIFNQSiwgMipMRC0xMFwiLCBcIlBMLTVFeDIsIExTLTZ4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgQy03MDEgSVJ4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgR0JVLTEyeDIsIDExMDBMIFRhbmt4MiwgV01EN1wiLCBcIlBMLTVFeDIsIDIqTEQtMTB4MiwgMTEwMEwgVGFua3gyLCBTUEpcIiwgXCJQTC01RXgyLCBMRC0xMHgyLCAxMTAwTCBUYW5reDIsIFNQSlwiLCBcIlBMLTVFeDIsIDIqTEQtMTB4MiwgTFMtNngyLCBTUEpcIiwgXCJQTC01RXgyLCAyKkxELTEweDIsIEdCLTYtSEV4MiwgU1BKXCIsIFwiUEwtNUV4MiwgQy03MDEgSVJ4MiwgODAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCBDLTcwMSBDQ0R4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgQy03MDEgQ0NEeDIsIDgwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMipHQlUtMTJ4MiwgMTEwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIEMtNzAxIElSeDIsIDExMDBMIFRhbmssIFdNRDdcIiwgXCJQTC01RXgyLCBDLTcwMSBJUngyLCA4MDBMIFRhbmssIFdNRDdcIiwgXCJQTC01RXgyLCBDLTcwMSBDQ0R4MiwgMTEwMEwgVGFuaywgV01EN1wiLCBcIlBMLTVFeDIsIEMtNzAxIENDRHgyLCA4MDBMIFRhbmssIFdNRDdcIiwgXCJQTC01RXgyLCBDLTcwMSBJUngyLCBMUy02eDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIEMtNzAxIElSL0NDRCwgR0ItNi1IRXgyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBDLTcwMSBJUi9DQ0QsIEdCLTYtU0ZXeDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIFdNRDcsIEdCLTYtU0ZXeDIsIDgwMEwgVGFuaywgQlJNMVwiLCBcIlBMLTVFeDIsIFdNRDcsIEdCLTYtU0ZXeDIsIDgwMEwgVGFuaywgR0JVLTEyXCIsIFwiUEwtNUV4MiwgMipNay04MlNFeDIsIE1rLTgzeDNcIiwgXCJQTC01RXgyLCBNay04NHgzXCIsIFwiUEwtNUV4MiwgMipNazV4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgVW5ndWlkZWQgOTBtbXgyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCAyKk1rNXgyLCBNay04M3gzXCIsIFwiUEwtNUV4MiwgQlJNMXgyLCAxMTAwTCBUYW5rLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMngxMTAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgU0QtMTB4MiwgMngxMTAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgMipTRC0xMHgyLCAyeDExMDBMIFRhbmtcIiwgXCJQTC01RXgyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBTRC0xMHgyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCAyKlNELTEweDIsIDgwMEwgVGFua1wiLCBcIlBMLTVFeDIsIFNELTEweDIsIFNQSlwiLCBcIlBMLTVFeDIsIFNQSlwiLCBcIlBMLTVFeDIsIDIqU0QtMTB4MiwgU1BKXCIsIFwiUEwtNUV4MlwiLCBcIlBMLTVFeDIsIFNELTEweDJcIiwgXCJQTC01RXgyLCAyKlNELTEwXCIsIFwiUEwtNUV4MiwgU0QtMTB4MiwgU1BKLCAxMTAwTCBUYW5reDJcIiwgXCJQTC01RXgyLCAyKlNELTEweDIsIDExMDBMIFRhbmt4MiwgODAwTCBUYW5rXCIsIFwiUEwtNUV4MiwgU0QtMTB4MiwgMTEwMEwgVGFua3gyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCBHQlUtMTZ4MiwgQlJNMXgyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgV01EN1wiLCBcIlBMLTVFeDIsIDIqTEQtMTAsIEdCLTZ4MiwgMipTRC0xMCwgU1BKXCIsIFwiUEwtNUV4MiwgQy03MDEgQ0NEeDIsIFNQSlwiLCBcIlBMLTVFeDIsIDIqTEQtMTAsIENNODAyQUtHeDIsIDIqU0QtMTAsIERMXCIsIFwiUEwtNUV4MiwgMipNSy04MngyLCBNSy04M3gyLCBNSy04NFwiLCBcIlBMLTVFeDIsIExTLTZ4MiwgR0ItNngyLCA4MDBMIFRhbmtcIiwgXCJQTC01RXgyLCAyKkdCVS0xMngyLCBMUy02eDIsIFdNRDdcIiwgXCJQTC01RXgyLCAyKkdCVS0xMngyLCBHQi02eDIsIFdNRDdcIiwgXCJQTC01RXgyLCAyKlR5cGUtMjAwQXgyXCIsIFwiUEwtNUV4MiwgVHlwZS0yMDBBeDJcIiwgXCJQTC01RXgyLCAyKkxTNi0yNTB4MiwgODAwTCBUYW5reDIsIFdNRDdcIiwgXCJQTC01RXgyLCAyKkxTNi0yNTB4MiwgODAwTCBUYW5rLCAxMTAwTCBUYW5reDJcIiwgXCJQTC01RXgyLCAyKkxTNi0xMDB4MiwgMTEwMEwgVGFua3gyLCBXTUQ3XCIsIFwiUEwtNUV4MiwgMipMUzYtMTAweDIsIDgwMEwgVGFua3gyLCBXTUQ3XCJdLCBcIldpbmdMb29uZy1JXCI6IFtcIkFLRC0xMCB4IDJcIl0sIFwiQ2hyaXN0ZW4gRWFnbGUgSUlcIjogW1wiU21va2UgLSB3aGl0ZVwiXSwgXCJGLTE2Q181MFwiOiBbXCJBSU0tMTIwQioyLCBBSU0tOU0qNCwgRlVFTCozXCIsIFwiQUlNLTEyMEIqNCwgQUlNLTlNKjIsIEZVRUwqM1wiLCBcIkFJTS0xMjBCKjYsIEZVRUwqM1wiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCo0LCBGVUVMKjJcIiwgXCJBSU0tMTIwQyo0LCBBSU0tOVgqMiwgRlVFTCozXCIsIFwiQUlNLTEyMEMqNCwgQUlNLTlYKjIsIEZVRUwqMywgVEdQXCIsIFwiQUlNLTEyMEMqNCwgQUlNLTlYKjIsIEZVRUwqMlwiLCBcIkFJTS0xMjBDKjYsIEZVRUwqM1wiLCBcIkFJTS0xMjBDKjQsIEFJTS05WCoyLCBGVUVMKjIsIEVDTVwiLCBcIkFJTS0xMjBDKjQsIEFJTS05WCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqNiwgRlVFTCoyLCBFQ01cIiwgXCJBSU0tMTIwQyo2LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqNiwgRlVFTCoyXCIsIFwiQUlNLTEyMEMqNiwgRlVFTCozLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTY1RCoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEFHTS02NUgqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBBR00tNjVIKjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTY1RCo0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIENCVS05Nyo0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIE1LLTgyKjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQ0JVLTg3KjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgTUstODJIRCo0LCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIENCVS0xMDMqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBDQlUtMTA1KjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgTUstODIqNiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBNSy04MkhEKjYsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwKjIsIEFJTS05WCoyLCBNSy04MlNFKjQsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwKjIsIEFJTS05WCoyLCBNSy04MlNFKjYsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgTUstODQqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBNSy04MlAqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMTIqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMTIqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMTAqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMjQqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMzEtMUIqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMzEtM0IqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMzgqMiwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBHQlUtMzgqNCwgRlVFTCoyLCBFQ00sIFRHUFwiLCBcIkFJTS0xMjBDKjIsIEFJTS05WCoyLCBBR00tNjVLKjIsIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTY1RyoyLCBGVUVMKjIsIEVDTSwgVEdQXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEFHTS02NUcsIEFHTS02NUssIEZVRUwqMiwgRUNNLCBUR1BcIiwgXCJBSU0tMTIwQyoyLCBBSU0tOVgqMiwgQUdNLTg4QyoyLCBGVUVMKjMsIFRHUCwgSFRTXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEFHTS04OEMqMiwgRlVFTCoyLCBFQ00sIFRHUCwgSFRTXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIEFHTS04OEMqNCwgRUNNLCBUR1AsIEhUU1wiLCBcIkFJTS0xMjBDKjQsIEFHTS04OEMqMiwgRlVFTCozLCBUR1AsIEhUU1wiLCBcIkFJTS0xMjBDKjQsIEFHTS04OEMqMiwgRlVFTCoyLCBFQ00sIFRHUCwgSFRTXCIsIFwiQUlNLTEyMEMqNCwgQUdNLTg4Qyo0LCBFQ00sIFRHUCwgSFRTXCIsIFwiQUlNLTEyMEMqMiwgQUlNLTlYKjIsIE1LLTYxKjIsIEZVRUwqMiwgRUNNLCBUR1BcIl0sIFwiRi01RS0zXCI6IFtcIk1rLTgyTEQqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkFJTS05UCoyLCBGdWVsIDI3NSozXCIsIFwiQUlNLTlQNSoyLCBGdWVsIDI3NSozXCIsIFwiQUlNLTlQKjIsIEZ1ZWwgMTUwKjNcIiwgXCJBSU0tOVA1KjIsIEZ1ZWwgMTUwKjNcIiwgXCJNay04MlNFKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJDQlUtNTJCKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJMQVUtMyBIRSo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTEFVLTMgSEVBVCo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTEFVLTY4IEhFKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJMQVUtNjggSEVBVCo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTS0xMTcqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkdCVS0xMio0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiQ0JVLTUyQio1LEFJTS05KjJcIiwgXCJNay04MkxEKjUsQUlNLTkqMlwiLCBcIk1rLTgyU0UqNSxBSU0tOSoyXCIsIFwiTWstODJMRCo3LEFJTS05UCoyLCBGdWVsIDI3NSoyXCIsIFwiTWstODJTRSo3LEFJTS05UCoyLCBGdWVsIDI3NSoyXCIsIFwiTEFVLTMgSEUqMixNay04MkxELEFJTS05UCoyLEZ1ZWwgMjc1KjJcIiwgXCJMQVUtNjggSEUqMixNay04MkxELEFJTS05UCoyLEZ1ZWwgMjc1KjJcIiwgXCJNLTExNyo1LEFJTS05KjJcIiwgXCJBSU0tOVAqMiwgRnVlbCAyNzVcIiwgXCJBSU0tOVAqMiwgRnVlbCAxNTBcIiwgXCJBSU0tOVA1KjIsIEZ1ZWwgMjc1XCIsIFwiQUlNLTlQNSoyLCBGdWVsIDE1MFwiLCBcIkFJTS05QioyLCBGdWVsIDI3NVwiLCBcIkFJTS05QioyLCBGdWVsIDE1MFwiLCBcIkFJTS05QioyLCBGdWVsIDI3NSozXCIsIFwiQUlNLTlCKjIsIEZ1ZWwgMTUwKjNcIiwgXCJBTi9BU1EtVDUwLCBBSU0tOVAsIEZ1ZWwgMTUwXCIsIFwiQUlNLTlCKjJcIiwgXCJBSU0tOVAqMlwiLCBcIkFJTS05UDUqMlwiLCBcIkFudGlzaGlwIE1rODJcIl0sIFwiRi01RVwiOiBbXCJNay04MkxEKjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJBSU0tOVAqMiwgRnVlbCAyNzUqM1wiLCBcIkFJTS05UDUqMiwgRnVlbCAyNzUqM1wiLCBcIkFJTS05UCoyLCBGdWVsIDE1MCozXCIsIFwiQUlNLTlQNSoyLCBGdWVsIDE1MCozXCIsIFwiTWstODJTRSo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiQ0JVLTUyQio0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTEFVLTMgSEUqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkxBVS0zIEhFQVQqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkxBVS02OCBIRSo0LEFJTS05UCoyLEZ1ZWwgMjc1XCIsIFwiTEFVLTY4IEhFQVQqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIk0tMTE3KjQsQUlNLTlQKjIsRnVlbCAyNzVcIiwgXCJHQlUtMTIqNCxBSU0tOVAqMixGdWVsIDI3NVwiLCBcIkNCVS01MkIqNSxBSU0tOSoyXCIsIFwiTWstODJMRCo1LEFJTS05KjJcIiwgXCJNay04MlNFKjUsQUlNLTkqMlwiLCBcIk1rLTgyTEQqNyxBSU0tOVAqMiwgRnVlbCAyNzUqMlwiLCBcIk1rLTgyU0UqNyxBSU0tOVAqMiwgRnVlbCAyNzUqMlwiLCBcIkxBVS0zIEhFKjIsTWstODJMRCxBSU0tOVAqMixGdWVsIDI3NSoyXCIsIFwiTEFVLTY4IEhFKjIsTWstODJMRCxBSU0tOVAqMixGdWVsIDI3NSoyXCIsIFwiTS0xMTcqNSxBSU0tOSoyXCIsIFwiQUlNLTlQKjIsIEZ1ZWwgMjc1XCIsIFwiQUlNLTlQKjIsIEZ1ZWwgMTUwXCIsIFwiQUlNLTlQNSoyLCBGdWVsIDI3NVwiLCBcIkFJTS05UDUqMiwgRnVlbCAxNTBcIiwgXCJBSU0tOUIqMiwgRnVlbCAyNzVcIiwgXCJBSU0tOUIqMiwgRnVlbCAxNTBcIiwgXCJBSU0tOUIqMiwgRnVlbCAyNzUqM1wiLCBcIkFJTS05QioyLCBGdWVsIDE1MCozXCIsIFwiQU4vQVNRLVQ1MCwgQUlNLTlQLCBGdWVsIDE1MFwiLCBcIkFJTS05QioyXCIsIFwiQUlNLTlQKjJcIiwgXCJBSU0tOVA1KjJcIl0sIFwiRi04NkYgU2FicmVcIjogW1wiMTIwZ2FsIEZ1ZWwqMlwiLCBcIjIwMGdhbCBGdWVsKjJcIiwgXCIxMjBnYWwgRnVlbCoyLCAyMDBnYWwgRnVlbCoyXCIsIFwiR0FSLTgqMlwiLCBcIjEyMGdhbCBGdWVsKjIsIEdBUi04KjJcIiwgXCJIVkFSKjE2XCIsIFwiMjAwZ2FsIEZ1ZWwqMiwgSFZBUngyKjRcIiwgXCJBTi1NNjQqMlwiLCBcIjIwMGdhbCBGdWVsKjIsIEFOLU02NCoyXCIsIFwiTTExNyoyXCJdLCBcIkYtMTRBLTEzNS1HUlwiOiBbXCJYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjYsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTdGKjYsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS03RioyLCBBSU0tOUwqMiwgWFQqMlwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN0YqMSwgQUlNLTlMKjQsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNCwgQUlNLTlMKjQsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqNCwgQUlNLTlNKjQsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNjAqNCwgQUlNLTlNKjQsIFhUKjJcIiwgXCJBSU0tN0YqNCwgQUlNLTlMKjQsIFhUKjJcIiwgXCJBSU0tN0YqNCwgQUlNLTlMKjQsIFhUKjJcIiwgXCJCRFUtMzMqMTRcIiwgXCJCRFUtMzMqMTJcIiwgXCJHQlUtMTAqMlwiLCBcIkdCVS0xMio0XCIsIFwiR0JVLTE2KjRcIiwgXCJHQlUtMjQqMlwiLCBcIk1rLTg0KjRcIiwgXCJNay04Myo0XCIsIFwiTWstODIqNFwiLCBcIk1rLTgyKjE0XCIsIFwiTWstODEqMTRcIiwgXCJNay0yMCo0XCIsIFwiTWstODJBSVIqNFwiLCBcIlp1bmkqMTJcIiwgXCJadW5pKjI4XCIsIFwiTFVVLTIqMjRcIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdGKjEsIEFJTS05TCoyLCBYVCoyLCBNay04MioyXCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03RioxLCBBSU0tOUwqMiwgWFQqMiwgTWstODIqMVwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN0YqMSwgQUlNLTlMKjIsIFhUKjIsIE1rLTIwKjJcIiwgXCJBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIEdCVS0xMioyLCBMQU5USVJOXCIsIFwiQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBHQlUtMjQqMSwgTEFOVElSTlwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIE1rLTgyKjIsIExBTlRJUk5cIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBNay0yMCoyLCBMQU5USVJOXCJdLCBcIkYtMTRBLTk1LUdSXCI6IFtcIkFJTS01NEEtTUs0Nyo2LCBBSU0tOUwqMlwiLCBcIkFJTS01NEEtTUs0Nyo2LCBBSU0tOUwqMlwiLCBcIkFJTS01NEEtTUs2MCo2LCBBSU0tOUwqMlwiLCBcIkFJTS03Rio2LCBBSU0tOUwqMlwiLCBcIkFJTS03Rio2LCBBSU0tOUwqMlwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tN0YqMiwgQUlNLTlMKjJcIiwgXCJBSU0tNTRBLU1LNDcqNCwgQUlNLTdGKjIsIEFJTS05TCoyXCIsIFwiQUlNLTU0QS1NSzYwKjQsIEFJTS03RioyLCBBSU0tOUwqMlwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN0YqMSwgQUlNLTlMKjRcIiwgXCJBSU0tNTRBLU1LNDcqMiwgQUlNLTdGKjEsIEFJTS05TCo0XCIsIFwiQUlNLTU0QS1NSzYwKjIsIEFJTS03RioxLCBBSU0tOUwqNFwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tOUwqNFwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tOUwqNFwiLCBcIkFJTS01NEEtTUs2MCo0LCBBSU0tOUwqNFwiLCBcIkFJTS03Rio0LCBBSU0tOUwqNFwiLCBcIkFJTS03Rio0LCBBSU0tOUwqNFwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN0YqMywgQUlNLTlMKjJcIiwgXCJBSU0tNTRBLU1LNDcqMiwgQUlNLTdGKjMsIEFJTS05TCoyXCIsIFwiQUlNLTU0QS1NSzYwKjIsIEFJTS03RiozLCBBSU0tOUwqMlwiLCBcIkJEVS0zMyoxNFwiLCBcIkJEVS0zMyoxMlwiLCBcIkdCVS0xMCoyXCIsIFwiR0JVLTEyKjRcIiwgXCJHQlUtMTYqNFwiLCBcIkdCVS0yNCoyXCIsIFwiTWstODQqNFwiLCBcIk1rLTgzKjRcIiwgXCJNay04Mio0XCIsIFwiTWstODIqMTRcIiwgXCJNay04MSoxNFwiLCBcIk1rLTIwKjRcIiwgXCJNay04MkFJUio0XCIsIFwiWnVuaSoxMlwiLCBcIlp1bmkqMjhcIiwgXCJMVVUtMioyNFwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN0YqMSwgQUlNLTlMKjIsIE1rLTgyKjJcIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdGKjEsIEFJTS05TCoyLCBNay04MioxXCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03RioxLCBBSU0tOUwqMiwgTWstMjAqMlwiXSwgXCJGLTE0QlwiOiBbXCJYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjYsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjYsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzYwKjYsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0Qy1NSzQ3KjYsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTdNKjYsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTdNKjYsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS03TSoyLCBBSU0tOU0qMiwgWFQqMlwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tN00qMiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNjAqNCwgQUlNLTdNKjIsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0Qy1NSzQ3KjQsIEFJTS03TSoyLCBBSU0tOU0qMiwgWFQqMlwiLCBcIkFJTS01NEEtTUs0NyoyLCBBSU0tN00qMSwgQUlNLTlNKjIsIEFJTS05TCoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjIsIEFJTS03TSoxLCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS01NEEtTUs2MCoyLCBBSU0tN00qMSwgQUlNLTlNKjQsIFhUKjJcIiwgXCJBSU0tNTRDLU1LNDcqMiwgQUlNLTdNKjEsIEFJTS05TSo0LCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjQsIEFJTS05TSoyLCBBSU0tOUwqMiwgWFQqMlwiLCBcIkFJTS01NEEtTUs0Nyo0LCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS01NEEtTUs2MCo0LCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS01NEMtTUs0Nyo0LCBBSU0tOU0qNCwgWFQqMlwiLCBcIkFJTS03TSo0LCBBSU0tOU0qMiwgQUlNLTlMKjIsIFhUKjJcIiwgXCJBSU0tN00qNCwgQUlNLTlMKjQsIFhUKjJcIiwgXCJBSU0tNTRBLU1LNDcqMiwgQUlNLTdNKjMsIEFJTS05TSoyLCBYVCoyXCIsIFwiQUlNLTU0QS1NSzQ3KjIsIEFJTS03TSozLCBBSU0tOU0qMiwgWFQqMlwiLCBcIkFJTS01NEEtTUs2MCoyLCBBSU0tN00qMywgQUlNLTlNKjIsIFhUKjJcIiwgXCJBSU0tNTRDLU1LNDcqMiwgQUlNLTdNKjMsIEFJTS05TSoyLCBYVCoyXCIsIFwiQkRVLTMzKjE0XCIsIFwiQkRVLTMzKjEyXCIsIFwiR0JVLTEwKjJcIiwgXCJHQlUtMTIqNFwiLCBcIkdCVS0xNio0XCIsIFwiR0JVLTI0KjJcIiwgXCJNay04NCo0XCIsIFwiTWstODMqNFwiLCBcIk1rLTgyKjRcIiwgXCJNay04MioxNFwiLCBcIk1rLTgxKjE0XCIsIFwiTWstMjAqNFwiLCBcIk1rLTgyQUlSKjRcIiwgXCJadW5pKjEyXCIsIFwiWnVuaSoyOFwiLCBcIkxVVS0yKjI0XCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03TSoxLCBBSU0tOU0qMiwgWFQqMiwgTWstODIqMlwiLCBcIkFJTS01NEEtTUs2MCoxLCBBSU0tN00qMSwgQUlNLTlNKjIsIFhUKjIsIE1rLTgyKjFcIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBNay0yMCoyXCIsIFwiQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBHQlUtMTIqMiwgTEFOVElSTlwiLCBcIkFJTS03TSoxLCBBSU0tOU0qMiwgWFQqMiwgR0JVLTI0KjEsIExBTlRJUk5cIiwgXCJBSU0tNTRBLU1LNjAqMSwgQUlNLTdNKjEsIEFJTS05TSoyLCBYVCoyLCBNay04MioyLCBMQU5USVJOXCIsIFwiQUlNLTU0QS1NSzYwKjEsIEFJTS03TSoxLCBBSU0tOU0qMiwgWFQqMiwgTWstMjAqMiwgTEFOVElSTlwiXSwgXCJGQS0xOENfaG9ybmV0XCI6IFtcIkFJTS05TSo2LCBBSU0tN00qMiwgRlVFTCozXCIsIFwiQUlNLTlNKjYsIEFJTS03TSoyLCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTUstODQqMiwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIE1LLTgzKjQsIEZVRUwqMlwiLCBcIkNhcnJpZXIgTGFuZGluZ1wiLCBcIkFJTS05TSoyLCBBSU0tN00qNCwgRlVFTCozXCIsIFwiQUlNLTlNKjIsIENCVS05OSo0LCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTUstODJTRSo0LCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgTUstMjAqNCwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIE1LLTgyKjQsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBBSU0tN00qMiwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIE1LLTgzKjIsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBaVU5JKjQsIEZVRUwqMlwiLCBcIkFJTS05TSoyLCBMQVUtNjEqNCwgRlVFTCoyXCIsIFwiQUlNLTlNKjIsIExBVS02OCo0LCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgQUlNLTdNKjIsIEZVRUwqMVwiLCBcIkFJTS05WCoyLCBBSU0tMTIwQy01KjEsIEdCVS0zMSo0LCBBVEZMSVIsIEZVRUxcIiwgXCJBSU0tOVgqMiwgQUlNLTEyMEMtNSo2LCBGVUVMKjNcIiwgXCJBSU0tOVgqMiwgQUlNLTEyMEMtNSoxLCBBR00tNjVEKjQsIEFURkxJUiwgRlVFTFwiLCBcIkFJTS05WCoyLCBBSU0tMTIwQy01KjIsIEFHTS04OEMqMiwgRlVFTFwiLCBcIkFJTS05WCoyLCBBSU0tMTIwQy01KjEsIEdCVS0zOCo0LCBHQlUtMTIqNCwgQVRGTElSLCBGVUVMXCIsIFwiQUlNLTlYKjIsIEFJTS0xMjBDLTUqMSwgQUdNLTg0RSoyLCBEQVRBTElOSywgQVRGTElSLCBGVUVMKjJcIiwgXCJBSU0tOU0qMiwgQUlNLTEyMEMtNSoxLCBBR00tODREKjQsIEFURkxJUiwgRlVFTFwiLCBcIkFJTS05TSoyLCBBVEZMSVIsIEZVRUxcIiwgXCJBSU0tOU0qMiwgQVRGTElSLCBGVUVMKjJcIl0sIFwiSS0xNlwiOiBbXCI2eFJTLTgyXCIsIFwiMnhGQUItMTAwXCIsIFwiNnhSUy04MiwgMnhGQUItMTAwXCIsIFwiNnhSUy04MiwgMnhEcm9wVGFuay05M0xcIiwgXCIyeERyb3BUYW5rLTkzTFwiXSwgXCJLYS01MFwiOiBbXCI0eEZBQi01MDBcIiwgXCIyeEZ1ZWwgdGFuaywgMnhLTUdVIEFQXCIsIFwiODB4Uy04IFRzTVwiLCBcIjJ4RnVlbCB0YW5rLCA0MHhTLThcIiwgXCI4MHhTLThcIiwgXCI0eEtNR1UgQVRcIiwgXCIyeEtNR1UgQVBcIiwgXCIyeEZ1ZWwgdGFuaywgMTJ4OUE0MTcyXCIsIFwiMnhGdWVsIHRhbmssIDJ4VVBLLTIzXCIsIFwiMTJ4OUE0MTcyLCA0MHhTLThcIiwgXCIxMng5QTQxNzIsIDJ4S01HVSBBVFwiLCBcIjR4S01HVSBBUFwiLCBcIjJ4RkFCLTI1MCwgMnhGdWVsIHRhbmtcIiwgXCIxMng5QTQxNzIsIDJ4RkFCLTUwMFwiLCBcIjIweFMtMTNcIiwgXCI0MHhTLThcIiwgXCIxMng5QTQxNzIsIDJ4VVBLLTIzXCIsIFwiMnhLTUdVIEFUXCIsIFwiNng5QTQxNzJcIiwgXCIyeEZ1ZWwgdGFuaywgMnhLTUdVIEFUXCIsIFwiNHhGdWVsIHRhbmtcIiwgXCIyeEtNR1UgQVAsIDEyeDlBNDE3MlwiLCBcIjEyeDlBNDE3MlwiLCBcIjJ4RnVlbCB0YW5rXCIsIFwiNDB4Uy04IFRzTSwgMTJ4OUE0MTcyXCIsIFwiMnhGQUItNTAwXCIsIFwiNDB4Uy04IFRzTSwgMnhGdWVsIHRhbmtcIiwgXCI0eFVQSy0yM1wiLCBcIjEweFMtMTNcIiwgXCI0MHhTLTggVHNNXCIsIFwiMTJ4OUE0MTcyLCAxMHhTLTEzXCIsIFwiMnhGdWVsIHRhbmssIDJ4RkFCLTUwMFwiLCBcIjJ4RkFCLTI1MFwiLCBcIjR4RkFCLTI1MFwiLCBcIjJ4RnVlbCB0YW5rLCAxMHhTLTEzXCIsIFwiMnhGQUItMjUwLCAxMng5QTQxNzJcIiwgXCIyeFVQSy0yM1wiXSwgXCJLYS01MF8zXCI6IFtcIjR4SWdsYVwiLCBcIjJ4S2gtMjVNTCwgMTB4Uy0xMywgNHhJZ2xhXCIsIFwiMTJ4OUE0MTcyLCA0MHhTLThLT00sIDR4SWdsYVwiLCBcIjEyeDlBNDE3MiwgNDB4Uy04T0ZQLCA0eElnbGFcIiwgXCIxMng5QTQxNzIsIDQweFMtMTMsIDR4SWdsYVwiLCBcIjgweFMtOEtPTSwgNHhJZ2xhXCIsIFwiODB4Uy04T0ZQLCA0eElnbGFcIiwgXCIyMHhTLTIwLCA0eElnbGFcIiwgXCI0eFVQSy0yMywgNHhJZ2xhXCIsIFwiMTB4Uy0xMywgMnhGQUItNTAwLCA0eElnbGFcIiwgXCIxMHhTLTEzLCAyeEZBQi0yNTAsIDR4SWdsYVwiLCBcIjgweFMtOE9NLCA0eElnbGFcIiwgXCI4MHhTLThUc00sIDR4SWdsYVwiLCBcIjQweFMtOE9GUCwgMnhGdWVsLCA0eElnbGFcIiwgXCIxMng5QTQxNzIsIDJ4RnVlbCwgNHhJZ2xhXCJdLCBcIkwtMzlDXCI6IFtcIlNBQi0xMDB4MlwiLCBcIlItM1N4MlwiLCBcIlNtb2tlc1wiLCBcIkNlbnRyYWwgU21va2VcIiwgXCJGQUItMTAweDJcIiwgXCJTLTVLT3gzMlwiXSwgXCJMLTM5WkFcIjogW1wiUy01S094MzJcIiwgXCJTLTVLT3g2NFwiLCBcIlMtNUtPeDMyLCBQVEItMTUweDJcIiwgXCJTLTVLT3gzMiwgUFRCLTM1MHgyXCIsIFwiUy01S094MzIsIEZBQi0xMDB4MlwiLCBcIk9GQUItMTAwIEp1cGl0ZXIgeDQsIEZBQi0xMDB4MlwiLCBcIkZBQi0xMDB4MlwiLCBcIkZBQi0xMDB4NFwiLCBcIk9GQUItMTAwIEp1cGl0ZXIgeDhcIiwgXCJGQUItMTAweDIsIFBUQi0xNTB4MlwiLCBcIkZBQi0xMDB4MiwgUFRCLTM1MHgyXCIsIFwiUEstM3g0XCIsIFwiUEstM3gyLCBQVEItMTUweDJcIiwgXCJSLTYwTXgyXCIsIFwiU0FCLTEwMHg0XCIsIFwiUi0zU3gyXCIsIFwiUi0zU3gyLCBQSy0zeDJcIiwgXCJSLTYwTXgyLCBQSy0zeDJcIl0sIFwiTS0yMDAwQ1wiOiBbXCJGb3hcIiwgXCJGb3ggLyBNYWdpYyAoUVJBKVwiLCBcIkFscGhhIC8gUzUzMERcIiwgXCJGb3ggLyBTNTMwRCAvIE1hZ2ljXCIsIFwiRm94IC8gUzUzMEQgLyBNYWdpYyAvIEVjbGFpclwiLCBcIkJyYXZvXCIsIFwiQnJhdm8gLyBNYWdpY1wiLCBcIktpbG9cIiwgXCJLaWxvIC8gTWFnaWNcIiwgXCJCcmF2byAvIDR4TWstODIgLyBNYWdpY1wiLCBcIkJyYXZvIC8gR0JVLTEyIC8gTWFnaWNcIiwgXCJCcmF2byAvIDJ4R0JVLTEyIC8gTWFnaWNcIiwgXCJCcmF2byAvIEdCVS0xNiAvIE1hZ2ljXCIsIFwiQnJhdm8gLyBHQlUtMjQgLyBNYWdpY1wiLCBcIkJyYXZvIC8gQkFQLTEwMCAvIE1hZ2ljXCIsIFwiQnJhdm8gLyA0eFNuYWtlRXllIC8gTWFnaWNcIiwgXCJGb3ggLyA0eE1rLTgyIC8gTWFnaWNcIiwgXCJLaWxvIC8gNHhNay04MiAvIE1hZ2ljXCJdLCBcIk1CLTMzOUFcIjogW1wiQSAtIDIqMzIwTCBUaXBUYW5rcyArIDIqREVGQS01NTMgR3VuUG9kcyArIDIqTWsuODMgKyAyKk1rLjgxIFwiLCBcIkEgLSAyKjMyMEwgVGlwVGFua3MgW0NsZWFuXVwiLCBcIlJlY29uXCIsIFwiVHJhaW5pbmdcIiwgXCJBQSAtIDIqMzIwTCBUaXBUYW5rcyArIDIqREVGQS01NTMgR3VuUG9kcyArIDIqTEFVLTEwKFp1bmkgUm9ja2V0cykgW0FSTUFEQV1cIiwgXCJBTSAtIDIqMzIwTCBUaXBUYW5rcyArIDIqQU4vTTMgR3VuUG9kcyArIDIqMzMwTCBUYW5rcyArIDIqTEFVLTMgKEh5ZHJhIHJvY2tldHMpXCIsIFwiQSAtIDIqNTAwTCBUaXBUYW5rcyArIDIqMzMwTCBUYW5rcyArIEx1Z2dhZ2UgQ29udGFpbmVyICBbRmVycnkgTG9uZyBSYW5nZV1cIiwgXCJBIC0gMio1MDBMIFRpcFRhbmtzICsgNCpNay44MkhEICsgMipMUi0yNSAoQVBJIFJvY2tldHMpXCIsIFwiQSAtIDIqMzIwTCBUaXBUYW5rcyArIDIqMzMwTCBUYW5rcyBbRmVycnkgTWVkaXVtIFJhbmdlXVwiLCBcIkEgLSAyKjUwMEwgVGlwVGFua3MgKyAyKkFOL00zIEd1blBvZHMgKyAyKk1hdHJhIDE1NSArIDIqIEJlbG91Z2FcIiwgXCJSdW53YXkgSW50ZXJkaWN0aW9uXCIsIFwiQSAtIDIqNTAwTCBUaXBUYW5rcyArIDIqREVGQS01NTMgR3VuUG9kcyArIDIqTWsuODJMRCArIDIqTFItMjUgKEFQSSBSb2NrZXRzKVwiLCBcIkEgLSAyKjMyMEwgVGlwVGFua3MgKyAyKkRFRkEtNTUzIEd1blBvZHMgKyAyKk1rLjgyTEQgQm9tYnMgKyAyKkxSLTI1KEFQSSBSb2NrZXRzKVwiLCBcIkEgLSAyKjMyMEwgVGlwVGFua3MgKyAyKkRFRkEtNTUzIEd1blBvZHMgKyAyKk1rLjgyTEQgKyAyKkxSLTI1IChIRUkgUm9ja2V0cylcIiwgXCJBIC0gMiozMjBMIFRpcFRhbmtzICsgNipNay44MkxEXCIsIFwiUnVud2F5IEludGVyZGljdGlvbiAoMzYqQkFQLTEwMClcIiwgXCJBbnRpIC0gTGlnaHQgQXJtb3VyZWQgVmVoaWNsZSAoMzYqQkFULTEyMCBBQkwpXCIsIFwiQVAgLSAyKjMyMEwgVGlwVGFua3MgKyAyKkRFRkEtNTUzIEd1blBvZHMgKyAyKjMzMEwgVGFua3MgKyAyKk1hdHJhIDE1NSAoU05FQiByb2NrZXRzKVwiXSwgXCJNQi0zMzlBUEFOXCI6IFtcIlBBTiAtIFNtb2tlIFdoaXRlXCIsIFwiUEFOIC0gU21va2UgV2hpdGUgYW5kIENvbG9yIFJlZFwiLCBcIlBBTiAtIEZ1ZWwgRXh0ZXJuYWwgW1JFRCBTTU9LRV1cIiwgXCJQQU4gLSBGdWxsIFBheWxvYWQgW1JFRCBTTU9LRV0gKyAyKjMyMEwgVGlwVGFua3NcIiwgXCJQQU4gLSBGdWxsIFBheWxvYWQgW0dSRUVOIFNNT0tFXSArIDIqMzIwTCBUaXBUYW5rc1wiLCBcIlBBTiAtIEZ1ZWwgRXh0ZXJuYWwgW0dSRUVOIFNNT0tFXVwiLCBcIlBBTiAtIEZ1bGwgUGF5bG9hZCBbUkVEIFNNT0tFXSArIDIqNTAwTCBUaXBUYW5rc1wiLCBcIlBBTiAtIFNtb2tlIFdoaXRlIGFuZCBDb2xvciBHcmVlblwiLCBcIlBBTiAtIEZ1bGwgUGF5bG9hZCBbR1JFRU4gU01PS0VdICsgMio1MDBMIFRpcFRhbmtzXCJdLCBcIk1pLTI0UFwiOiBbXCIyeEI4VjIwIChTLThLT00pKzh4QVRHTSA5TTExNFwiLCBcIjJ4QjhWMjAgKCBTLThLT00pKzR4QVRHTSA5TTExNFwiLCBcIjR4QjhWMjAgKFMtOEtPTSkrNHhBVEdNIDlNMTE0XCIsIFwiMnhCOFYyMCAoUy04S09NKSsyeEJvbWJzLTI1MCs0eEFUR00gOU0xMTRcIiwgXCIyeEI4VjIwIChTLThPRlAyKSs0eEFUR00gOU0xMTRcIiwgXCI0eFVCLTMyQSAoUy01S08pKzR4QVRHTSA5TTExNFwiLCBcIjR4R1VWLTEgQVAzMCs0eEFUR00gOU0xMTRcIiwgXCIyeEdVVi0xIEFQMzArNHhBVEdNIDlNMTE0XCIsIFwiMnhHVVYtMSAoR1VOIDEyLjcrMng3LjYyKSArNHhBVEdNIDlNMTE0XCIsIFwiMnhLTUdVICg5NiBBTyAyLjVSVCkrOHhBVEdNIDlNMTE0XCIsIFwiMnhCLTEzTCs0eEFUR00gOU0xMTRcIiwgXCIyeFMtMjRCKzR4QVRHTSA5TTExNFwiLCBcIjR4Uy0yNEIrNHhBVEdNIDlNMTE0XCIsIFwiMnhCb21icy01MDArNHhBVEdNIDlNMTE0XCIsIFwiNHhCb21icy0yNTArNEFUR00gOU0xMTRcIiwgXCIyeFJCSy01MDAgKFBUQUItMU0pKzR4QVRHTSA5TTExNFwiLCBcIjJ4UkJLLTUwMFUgKE9BQiAyLjVSVCkrNHhBVEdNIDlNMTE0XCIsIFwiNHhSQkstMjUwICg0MiBQVEFCIDIuNU0pICs0QVRHTSA5TTExNFwiLCBcIjR4UkJLLTI1MC0yNzUgKDE1MCBBTy0xU0NoKSs0QVRHTSA5TTExNFwiLCBcIjR4UFRCLTQ1MCBGdWVsIHRhbmtcIl0sIFwiTWlHLTE5UFwiOiBbXCJQVEItNzYwIHggMlwiLCBcIkstMTNBIHggMiwgUFRCLTc2MCB4IDJcIiwgXCJLLTEzQSB4IDJcIiwgXCJLLTEzQSB4IDIsIE9STy01N0sgeCAyLCBQVEItNzYwIHggMlwiLCBcIk9STy01N0sgeCAyLCBQVEItNzYwIHggMlwiLCBcIk9STy01N0sgeCA0XCIsIFwiT1JPLTU3SyB4IDJcIiwgXCJGQUItMTAwTSB4IDIsIE9STy01N0sgeCAyXCIsIFwiRkFCLTI1MCB4IDIsIE9STy01N0sgeCAyXCIsIFwiRkFCLTEwME0geCAyXCIsIFwiRkFCLTI1MCB4IDJcIl0sIFwiTWlHLTIxQmlzXCI6IFtcIlBhdHJvbCwgbG9uZyByYW5nZVwiLCBcIlBhdHJvbCwgbWVkaXVtIHJhbmdlXCIsIFwiUGF0cm9sLCBzaG9ydCByYW5nZVwiLCBcIkhhcmQgdGFyZ2V0cywgQk9NQlNcIiwgXCJVbmtub3duIG9yIG1peGVkIHRhcmdldHMsIEJPTUJTICsgUk9DS0VUU1wiLCBcIlNvZnQgdGFyZ2V0cywgQ0xVU1RFUlMgKyBST0NLRVRTXCIsIFwiU29mdCB0YXJnZXRzLCBDTFVTVEVSU1wiLCBcIlNvZnQgdGFyZ2V0cywgc2NhdHRlcmVkXCIsIFwiRmV3IGJpZyB0YXJnZXRzLCBHUk9NICsgQk9NQlNcIiwgXCJWZXJ5IGhhcmQgdGFyZ2V0LCBQRU5FVFJBVElPTlwiLCBcIkFlcmlhbCBhdHRhY2ssIGhhcmQgdGFyZ2V0cywgQ0xVU1RFUlNcIiwgXCJIYXJkIHRhcmdldHMsIFJPQ0tFVFMsIFBFTkVUUkFUSU9OXCIsIFwiU29mdCB0YXJnZXRzLCBST0NLRVRTLCBCTEFTVC1GUkFHTUVOVFNcIiwgXCJMb25nIHJhbmdlLCBNSVhcIiwgXCJMb25nIHJhbmdlLCBSQURBUiBHVUlERUQgTUlTU0lMRVNcIiwgXCJMb25nIHJhbmdlLCBJTkZSQSBSRUQgTUlTU0lMRVNcIiwgXCJFc2NvcnRcIiwgXCJFc2NvcnQsIEpBTU1FUlwiLCBcIk5pZ2h0LCBJTExVTUlOQVRPUlwiLCBcIkxvbmcgcmFuZ2UsIEpBTU1FUlwiLCBcIlNvZnQgdGFyZ2V0cywgVVBLICsgUk9DS0VUU1wiLCBcIlNvZnQgdGFyZ2V0cywgVVBLICsgQ0xVU1RFUlNcIiwgXCJQYXRyb2wsIEpBTU1FUlwiLCBcIk5VQ0xFQVIgQVwiLCBcIk5VQ0xFQVIgQlwiLCBcIlNob3J0IHJhbmdlXCIsIFwiQUVST0JBVElDXCJdLCBcIk1pcmFnZS1GMUJcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFCRFwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFCRVwiOiBbXCIyKkFJTTktSlVMSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTTktSlVMSSwgUjUzMElSXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBFTVwiLCBcIjIqQUlNOS1KVUxJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipBSU05LUosIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05SiwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKkFJTS05SiwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05SlVMSSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqQUlNLTlKVUxJLCA4KlNBTVAgNDAwIExEXCIsIFwiMipBSU0tOUpVTEksIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUJRXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUMtMjAwXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQ1wiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUNFXCI6IFtcIjIqQUlNOS1KVUxJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KVUxJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMEVNXCIsIFwiMipBSU05LUpVTEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKkFJTTktSiwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKVUxJLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCA0MDAgTERcIiwgXCIyKkFJTS05SlVMSSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQ0dcIjogW1wiMipBSU0tOSBKVUxJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCI0KkFJTS05IEpVTEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTkgSlVMSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOSBKVUxJLCBSNTMwSVJcIiwgXCIyKkFJTS05IEpVTEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTkgSlVMSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqQUlNLTkgSlVMSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05IEpVTEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOSBKVUxJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKkFJTS05IEpVTEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTkgSlVMSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDSFwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUNKXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxQ0tcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDUlwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDVFwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFDWlwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUREQVwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFFRFwiOiBbXCIyKlI1NTAgTWFnaWMgSUksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSUlcIiwgXCIyKlI1NTAgTWFnaWMgSUksIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSUksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSUksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCAyNTAgSERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFFREFcIjogW1wiMipSNTUwIE1hZ2ljIEksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSVwiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipTNTMwLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxRUVcIjogW1wiMipBSU05LUpVTEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KVUxJLCAyKlI1MzBFTSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU05LUpVTEksIFI1MzBFTVwiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKkFJTTktSlVMSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KLCAyKk1BVFJBIEY0IFNORUIyNTEgKEhFKSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIExEXCIsIFwiMipBSU0tOUosIDIqRnVlbCBUYW5rLCA0KlNBTVAgNDAwIEhEXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1MyAoU2hhcGVkIENoYXJnZSksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipTQU1QIDI1MCBIRCwgMiBNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCAyNTAgSERcIiwgXCIyKkFJTS05SlVMSSwgOCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKVUxJLCA4KkJMVTEwNyBEdXJhbmRhbFwiXSwgXCJNaXJhZ2UtRjFFSFwiOiBbXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMEVNLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMSpSNTMwSVIsIDIqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqTUFUUkEgRjQgU05FQjI1MSAoSEUpLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUVRXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlM1MzAsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIElcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUzUzMCwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgMipGdWVsIFRhbmssIDQqU0FNUCA0MDAgSERcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjUzIChTaGFwZWQgQ2hhcmdlKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGMSBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDQqTUFUUkEgRjQgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAyKlNBTVAgMjUwIEhELCAyIE1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpTQU1QIDI1MCBIRFwiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgNDAwIExEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqQkxVMTA3IER1cmFuZGFsXCJdLCBcIk1pcmFnZS1GMUpBXCI6IFtcIjIqUjU1MCBNYWdpYyBJLCAyKlI1MzBJUiwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipSNTMwRU0sIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIFI1MzBJUlwiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqUjU1MF9NYWdpY18xLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MF9NYWdpY18xLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipSNTUwX01hZ2ljXzEsIDgqU0FNUCA0MDAgTERcIiwgXCIyKlI1NTBfTWFnaWNfMSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxTS1DRVwiOiBbXCIyKkFJTTktSlVMSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KVUxJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipBSU05LUpVTEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKkFJTTktSiwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKVUxJLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCA0MDAgTERcIiwgXCIyKkFJTS05SlVMSSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiTWlyYWdlLUYxTS1FRVwiOiBbXCIyKkFJTTktSlVMSSwgMipSNTMwSVIsIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNOS1KVUxJLCBSNTMwSVJcIiwgXCIyKlI1NTAgTWFnaWMgSSwgUjUzMElSXCIsIFwiMipBSU05LUpVTEksIDEqUjUzMElSLCAyKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCAxKlI1MzBJUiwgMipGdWVsIFRhbmtcIiwgXCIyKkFJTTktSiwgMipNQVRSQSBGNCBTTkVCMjUxIChIRSksIDIqUjUzMElSLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBMRFwiLCBcIjIqQUlNLTlKLCAyKkZ1ZWwgVGFuaywgNCpTQU1QIDQwMCBIRFwiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEY0IFNORUIyNTMgKFNoYXBlZCBDaGFyZ2UpLCAxKkZ1ZWwgVGFua1wiLCBcIjIqUjU1MCBNYWdpYyBJLCA0Kk1BVFJBIEYxIFNORUIyNTYgKEFQKSwgMSpGdWVsIFRhbmtcIiwgXCIyKlI1NTAgTWFnaWMgSSwgNCpNQVRSQSBGNCBTTkVCMjU2IChBUCksIDEqRnVlbCBUYW5rXCIsIFwiMipSNTUwIE1hZ2ljIEksIDIqU0FNUCAyNTAgSEQsIDIgTUFUUkEgRjEgU05FQjI1NiAoQVApLCAxKkZ1ZWwgVGFua1wiLCBcIjIqQUlNLTlKVUxJLCA4KlNBTVAgMjUwIEhEXCIsIFwiMipBSU0tOUpVTEksIDgqU0FNUCA0MDAgTERcIiwgXCIyKkFJTS05SlVMSSwgOCpCTFUxMDcgRHVyYW5kYWxcIl0sIFwiU0EzNDJMXCI6IFtcIk02MjEsIDh4U05FQjY4IEVBUFwiLCBcIk02MjEsIDh4U05FQjY4IEVBUCwgSVIgRGVmbGVjdG9yXCIsIFwiTTYyMSwgOHhTTkVCNjggRUFQLCBJUiBEZWZsZWN0b3IsIFNhbmQgRmlsdGVyXCJdLCBcIlNBMzQyTVwiOiBbXCJIT1QzeDRcIiwgXCJJUiBEZWZsZWN0b3JcIiwgXCJIb3QzeDQsIEZBUywgSVIgRGVmbGVjdG9yXCIsIFwiSE9UM3gyXCIsIFwiSG90M3g0LCBJUiBEZWZsZWN0b3JcIiwgXCJIb3QzeDIsIElSIERlZmxlY3RvclwiXSwgXCJTQTM0Mk1pbmlndW5cIjogW1wiSVIgRGVmbGVjdG9yXCIsIFwiSVIgRGVmbGVjdG9yLCBTYW5kIEZpbHRlclwiXSwgXCJTQTM0Mk1pc3RyYWxcIjogW1wiTWlzdHJhbCB4IDRcIiwgXCJNaXN0cmFsIHggNCwgSVIgRGVmbGVjdG9yXCIsIFwiTWlzdHJhbCB4IDQsIElSIERlZmxlY3RvciwgU2FuZCBGaWx0ZXJcIl0sIFwiQS0yMEdcIjogW1wiNTAwIGxiIEdQIGJvbWIgTEQqNFwiXSwgXCJCZi0xMDlLLTRcIjogW1wiRnVlbCBUYW5rXCIsIFwiU0MyNTBcIiwgXCJTQzUwMFwiXSwgXCJGVy0xOTBBOFwiOiBbXCJXaXRob3V0IHB5bG9uXCIsIFwiU0MgNTAgKiA0XCIsIFwiQUIgMjUwICh3LyBTRCAxMEEpXCIsIFwiQUIgMjUwICh3LyBTRCAyKVwiLCBcIkFCIDUwMCAody8gU0QgMTBBKVwiLCBcIlNDIDI1MCBMMlwiLCBcIlNDIDI1MCBKXCIsIFwiU0MgNTAwIEpcIiwgXCJTQyA1MDAgTDJcIiwgXCJTRCAyNTAgU3RnXCIsIFwiU0QgNTAwIEFcIiwgXCJGdWVsIFRhbmsgMzAwIGxpdGVyc1wiLCBcIkJSIDIxXCJdLCBcIkZXLTE5MEQ5XCI6IFtcIlNDNTAwXCIsIFwiRnVlbCBUYW5rXCIsIFwiUjRNXCIsIFwiQlIgMjFcIl0sIFwiTW9zcXVpdG9GQk1rVklcIjogW1wiMjUwIGxiIFMuQS5QKjI7IDUwMCBsYiBTLkEuUC4qMlwiLCBcIjUwMCBsYiBHUCBNay5WKjIsIDUwMCBsYiBHUCBTaG9ydCB0YWlsKjJcIiwgXCIxMDAgZ2FsIERyb3AgdGFuayoyLCA1MDAgbGIgTUMgU2hvcnQgdGFpbCoyXCIsIFwiUlAtMyA2MGxiIFNBUCBObzIgTWsuSSo4LCAyNTAgbGIgQS5BLlAuKjJcIiwgXCIxMDAgZ2FsLiBEcm9wIHRhbmsqMiwgMjUwIGxiIE1DIE1rLklJLCBSUC0zIDYwbGIgRiBObzEgTWsuSSo0XCIsIFwiNTAwIGxiIEdQIFNob3J0IHRhaWwqNFwiXSwgXCJQLTQ3RC0zMFwiOiBbXCJBTi1NNjUqMlwiLCBcIkZ1ZWwxNTAqMlwiLCBcIkFOLU02NCoyLCBGdWVsMTEwXCIsIFwiQU4tTTU3KjNcIl0sIFwiUC00N0QtMzBibDFcIjogW1wiQU4tTTU3KjJcIiwgXCJBTi1NNjQqMiwgRnVlbDExMFwiXSwgXCJQLTQ3RC00MFwiOiBbXCJBTi1NNjUqMlwiLCBcIkZ1ZWwxNTAqMlwiLCBcIkFOLU01NyozXCIsIFwiQU4tTTY0KjIsIEZ1ZWwxMTBcIiwgXCJNOCo2LCBBTi1NNTcqMiwgRnVlbDExMFwiLCBcIkhWQVIqMTAsIEZ1ZWwxMTBcIl0sIFwiUC01MUQtMzAtTkFcIjogW1wiRnVlbDc1KjJcIiwgXCJIVkFSKjYsRnVlbDc1KjJcIiwgXCJIVkFSKjYsTTY0KjJcIiwgXCJIVkFSKjZcIiwgXCJNNjQqMlwiLCBcIkhWQVIqMTBcIiwgXCJTbW9rZXNcIl0sIFwiUC01MURcIjogW1wiRnVlbDc1KjJcIiwgXCJIVkFSKjYsRnVlbDc1KjJcIiwgXCJIVkFSKjYsTTY0KjJcIiwgXCJIVkFSKjZcIiwgXCJNNjQqMlwiLCBcIkhWQVIqMTBcIiwgXCJTbW9rZXNcIl0sIFwiQS01MFwiOiBbXSwgXCJBSC0xV1wiOiBbXCIxNHhIWURSQS03MCBXUFwiLCBcIjM4eEhZRFJBLTcwIFdQXCIsIFwiOHhCR00tNzEsIDE0eEhZRFJBLTcwXCIsIFwiOHhCR00tNzEsIDE0eEhZRFJBLTcwIFdQXCIsIFwiOHhCR00tNzEsIDM4eEhZRFJBLTcwIFdQXCIsIFwiMTR4SFlEUkEtNzBcIiwgXCIzOHhIWURSQS03MFwiLCBcIjh4QUdNLTExNFwiLCBcIjI4eEhZRFJBLTcwXCIsIFwiOHhCR00tNzEsIDM4eEhZRFJBLTcwXCIsIFwiOHhBR00tMTE0LCAzOHhIWURSQS03MCBXUFwiLCBcIjh4QkdNLTcxXCIsIFwiOHhBR00tMTE0LCAxNHhIWURSQS03MCBXUFwiLCBcIjc2eEhZRFJBLTcwXCIsIFwiOHhBR00tMTE0LCAzOHhIWURSQS03MFwiLCBcIjh4QUdNLTExNCwgMTR4SFlEUkEtNzBcIl0sIFwiQUgtNjRBXCI6IFtcIjh4QUdNLTExNFwiLCBcIjM4eEhZRFJBLTcwIFdQXCIsIFwiNzZ4SFlEUkEtNzBcIiwgXCI4eEFHTS0xMTQsIDM4eEhZRFJBLTcwIFdQXCIsIFwiMzh4SFlEUkEtNzBcIiwgXCI4eEFHTS0xMTQsIDM4eEhZRFJBLTcwXCIsIFwiQUdNLTExNEsqMTZcIl0sIFwiQUgtNjREXCI6IFtcIjc2eEhZRFJBLTcwXCIsIFwiMzh4SFlEUkEtNzBcIiwgXCIzOHhIWURSQS03MCBXUFwiLCBcIjh4QUdNLTExNFwiLCBcIjh4QUdNLTExNCwgMzh4SFlEUkEtNzAgV1BcIiwgXCI4eEFHTS0xMTQsIDM4eEhZRFJBLTcwXCIsIFwiQUdNLTExNEsqMTZcIl0sIFwiQW4tMjZCXCI6IFtdLCBcIkFuLTMwTVwiOiBbXSwgXCJCLTFCXCI6IFtcIk1rLTgyKjg0XCIsIFwiQUdNLTE1NCoxMlwiLCBcIkdCVS0zOCo0OFwiLCBcIkNCVS04NyozMFwiLCBcIkNCVS05NyozMFwiLCBcIkdCVS0zOCoxNiwgQ0JVLTk3KjIwXCIsIFwiTWstODQqMjRcIiwgXCJHQlUtMzEqMjRcIiwgXCJHQlUtMzEoVikzL0IqMjRcIiwgXCJHQlUtMzEqOCwgR0JVLTM4KjMyXCJdLCBcIkItNTJIXCI6IFtcIk1rLTg0KjE4XCIsIFwiTWsgODIqNTFcIiwgXCJNazIwKjE4XCIsIFwiQUdNLTg2QyoyMFwiLCBcIkFHTS04NEEqOFwiXSwgXCJDLTEzMFwiOiBbXSwgXCJDLTE3QVwiOiBbXSwgXCJDSC00N0RcIjogW10sIFwiQ0gtNTNFXCI6IFtdLCBcIkUtMkNcIjogW10sIFwiRS0zQVwiOiBbXSwgXCJGLTExN0FcIjogW1wiR0JVLTEyKjJcIiwgXCJHQlUtMTAqMlwiLCBcIkdCVS0yNyoyXCJdLCBcIkYtMTRBXCI6IFtcIkFJTS05KjJcIiwgXCJBSU0tNTRDKjYsQUlNLTkqMlwiLCBcIkFJTS01NEMqNCxBSU0tOSoyLEFJTS03KjJcIl0sIFwiRi0xNUNcIjogW1wiQUlNLTEyMEIqNCwgQUlNLTdNKjIsIEFJTS05TSoyLCBGdWVsKjNcIiwgXCJBSU0tOSoyLEFJTS0xMjAqNixGdWVsXCIsIFwiQUlNLTkqNCxBSU0tMTIwKjQsRnVlbCozXCIsIFwiQUlNLTkqNCxBSU0tMTIwKjQsRnVlbFwiLCBcIkFJTS05KjIsQUlNLTEyMCoyLEFJTS03KjQsRnVlbCozXCIsIFwiQUlNLTkqMixBSU0tMTIwKjYsRnVlbCozXCIsIFwiQUlNLTkqNCxBSU0tNyo0LEZ1ZWxcIiwgXCJBSU0tMTIwKjgsRnVlbFwiLCBcIkFJTS05KjQsQUlNLTcqNCxGdWVsKjNcIiwgXCJBSU0tMTIwKjgsRnVlbCozXCIsIFwiQUlNLTkqMixBSU0tMTIwKjIsQUlNLTcqNCxGdWVsXCJdLCBcIkYtMTVFXCI6IFtcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCozLENCVS04Nyo2LE1rLTgyQUlSKjZcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwqMyxDQlUtOTcqMTJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwqMyxNay04MioxMlwiLCBcIkFJTS0xMjBCKjQsQUlNLTEyMEMqNCxGVUVMKjNcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsR0JVLTMxKjQsQUdNLTY1SCxBR00tNjVEXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLENCVS0xMDMqMixHQlUtMTIsR0JVLTM4LEFHTS0xNTRDKjJcIiwgXCJBSU0tMTIwQio0LEFJTS05TSo0LEZVRUwqM1wiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsQUlNLTEyMEMqMixBSU0tN00qMixGVUVMKjNcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsR0JVLTEyKjQsR0JVLTM4KjQsQUdNLTE1NEMqMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxHQlUtMzEqNCxBR00tMTU0QyoyXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixBSU0tN00qNCxGVUVMKjNcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwqMyxNay04NCo4XCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLEFHTS0xNTRDKjJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsR0JVLTEyKjQsR0JVLTM4KjQsQUdNLTY1RCoyXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLEdCVS0xMio0LEdCVS0zOCo0LEFHTS02NUsqMlwiLCBcIkFJTS0xMjBDKjIsQUlNLTlNKjQsQUlNLTdNKjIsRlVFTCozXCIsIFwiQUlNLTlNKjQsQUlNLTdNKjQsRlVFTCozXCIsIFwiQUlNLTEyMEMqMixBSU0tOU0qMixGVUVMKjNcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsTWstODQqOCxBR00tMTU0QyoyXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMKjMsTWstODJBSVIqMTJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsR0JVLTEyKjIsR0JVLTM4KjIsQUdNLTE1NEMqMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxHQlUtMTIqMixHQlUtMzgqMixBR00tNjVILEFHTS02NURcIiwgXCJBSU0tMTIwQioyLEFJTS0xMjBDKjQsQUlNLTlNKjIsRlVFTCozXCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMKjMsTWstODIqNixNay04MkFJUio2XCIsIFwiQUlNLTEyMEIqMixBSU0tOU0qMixGVUVMLENCVS0xMDMqMixHQlUtMTIsR0JVLTM4LEFHTS02NUgqMlwiLCBcIkFJTS0xMjBCKjIsQUlNLTlNKjIsRlVFTCxBR00tNjVEKjJcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwqMixTVVUtMjUqMixHQlUtMTIsR0JVLTM4XCIsIFwiQUlNLTEyMEIqNixBSU0tOU0qMixGVUVMKjNcIiwgXCJBSU0tMTIwQioyLEFJTS05TSoyLEZVRUwsTWstODJBSVIqMTIsQUdNLTE1NEMqMlwiLCBcIkFJTS0xMjBDKjYsQUlNLTlNKjIsRlVFTCozXCIsIFwiR0JVLTMxKFYpMy9CKjUsIEFJTS0xMjBDKjIsIEFJTS05TSoyXCJdLCBcIkYtMTZBIE1MVVwiOiBbXCJGdWVsKjNcIiwgXCJBR00tODgqMiwgQUdNLTY1RCoyLCBBSU0tMTIwQioyLCBFQ01cIiwgXCJNay04Mio2LEFJTS0xMjAqMixFQ00sRnVlbCoyXCIsIFwiTWstODIqMixBSU0tMTIwKjIsQUlNLTkqMixFQ00sRnVlbCoyXCIsIFwiQUdNODgqMixBR00tNjVEKjYsQUlNLTEyMCoyLEFJTS05KjIsRUNNXCIsIFwiQUlNLTEyMCoyLEdCVS0xMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJBSU0tOSo0LEVDTVwiLCBcIk1rMjAqNCxBSU0tOSoyLEVDTSxGdWVsKjJcIiwgXCJBSU0tMTIwKjYsRUNNXCIsIFwiQUlNLTEyMCo0LEFJTS05KjIsRUNNXCIsIFwiQUdNODgsIEFHTS02NUQsIEFJTS0xMjAqMixGdWVsKjIsRUNNXCIsIFwiQUdNLTY1RCoyLEFJTS0xMjAqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUlNLTkqNCxFQ00sRnVlbCoyXCIsIFwiQUlNLTEyMCo0LEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIkFHTS04OCoyLEFJTS0xMjAqMixBSU0tOSoyLEVDTSxGdWVsKjJcIiwgXCJNay04NCoyLEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIkFJTS0xMjAqNixFQ00sRnVlbCoyXCIsIFwiQUdNLTE1NCoyLEFJTS0xMjAqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUdNLTg4KjIsQUdNLTY1RCoyLEFJTS0xMjBCKjIsQUlNLTlNKjIsRUNNXCIsIFwiTWsyMCoyLEFJTS0xMjAqMixFQ00sRnVlbCoyXCIsIFwiQUlNLTEyMCoyLEFJTS05KjIsR0JVLTEyKjIsRUNNLExhbnRpcm4gLEZ1ZWwqMlwiLCBcIkFHTS02NUsqMixBSU0tMTIwKjIsRUNNLExhbnRpcm4gLEZ1ZWwqMlwiLCBcIkFJTS0xMjBCKjJfQUlNLTlNKjJfQUdNLTExOSo0X0FMUS0xMzFcIl0sIFwiRi0xNkFcIjogW1wiQUdNLTg4KjIsQUlNLTEyMCoyLEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIk1rMjAqNCxBSU0tOSoyLEVDTSxGdWVsKjJcIiwgXCJBSU0tOSo0LEVDTSxGdWVsKjJcIiwgXCJBR00tNjVEKjIsQUlNLTEyMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJBSU0tMTIwKjQsQUlNLTkqMixFQ00sRnVlbCoyXCIsIFwiQUdNODgqMl9BR00tNjVEKjZfQUlNLTEyMCoyX0FJTS05KjJfRUNNXCIsIFwiQUdNLTY1SyoyLEFJTS0xMjAqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUlNLTEyMCoyLEFJTS05KjIsR0JVLTEyKjIsRUNNLExhbnRpcm4gLEZ1ZWwqMlwiLCBcIkFJTS0xMjAqMixHQlUtMTAqMixFQ00sTGFudGlybiAsRnVlbCoyXCIsIFwiQUlNLTEyMCo2LEVDTSxGdWVsKjJcIiwgXCJBSU0tMTIwKjYsRUNNXCIsIFwiQUlNLTkqNCxFQ01cIiwgXCJGdWVsKjNcIiwgXCJNay04NCoyLEFJTS05KjIsRUNNLEZ1ZWwqMlwiLCBcIkFJTS0xMjAqNCxBSU0tOSoyLEVDTVwiLCBcIk1rLTgyKjYsQUlNLTEyMCoyLEVDTSxGdWVsKjJcIiwgXCJNay04MioyLEFJTS0xMjAqMixBSU0tOSoyLEVDTSxGdWVsKjJcIiwgXCJBR00tMTU0KjIsQUlNLTEyMCoyLEVDTSxMYW50aXJuICxGdWVsKjJcIiwgXCJNazIwKjIsQUlNLTEyMCoyLEVDTSxGdWVsKjJcIiwgXCJBR00tMTE5KjIsQUlNLTEyMEIqMixBSU0tOU0qMixBTFEtMTg0LEZ1ZWwqMlwiXSwgXCJGLTE2QyBibC41MFwiOiBbXCJBSU0tMTIwQio0LCBBSU0tOU0qMiwgRnVlbFwiLCBcIkFJTS0xMjBDKjQsIEFJTS05TSoyLCBGdWVsXCIsIFwiQUdNLTY1RyoyLCBBSU0tMTIwQyoyLCBBSU0tOU0qMiwgRnVlbCwgRUNNXCIsIFwiQUdNLTY1RCo2LCBBSU0tMTIwQioyLCBBSU0tOU0qMiwgRUNNLCBGdWVsXCIsIFwiTWs4Nio2LCBBSU0tOU0qNCwgRUNNLCBGdWVsXCIsIFwiQ0JVLTk3KjQsIEFJTS05TSo0LCAgRnVlbFwiLCBcIkNCVS04Nyo0LCBBSU0tOU0qNCwgIEZ1ZWxcIiwgXCJBR00tNjVEKjIsIENCVS04NyoyLCBBSU0tOU0qNCwgIEZ1ZWxcIiwgXCJBR00tNjVEKjIsIENCVS05NyoyLCBBSU0tOU0qNCwgIEZ1ZWxcIiwgXCJNazg0KjIsIEFJTS05TSo0LCBFQ00sIEZ1ZWxcIiwgXCJHQlUtMzF2MSoyLCBBSU0tOU0qNCwgRUNNLCBGdWVsXCIsIFwiR0JVLTMxdjMqMiwgQUlNLTlNKjQsIEVDTSwgRnVlbFwiLCBcIkdCVS0zMXYxKjIsIE1rODIqNiwgQUlNLTlNKjQsIEZ1ZWxcIiwgXCJNazg0KjQsIEFJTS05TSo0LCBGdWVsXCIsIFwiTWs4MioxMiwgQUlNLTlNKjQsIEZ1ZWxcIiwgXCJBR00tMTU0QyoyLCBBSU0tOU0qNCwgRUNNLCBGdWVsXCJdLCBcIkYtMTZDIGJsLjUyZFwiOiBbXCJBR00tODgqMiwgQUdNLTY1RCoyLCBBSU0tMTIwQioyLCBFQ00sTElHSFROSU5HXCIsIFwiTWstODIqNixBSU0tMTIwKjIsRUNNLEZ1ZWwqMixMSUdIVE5JTkdcIiwgXCJBR004OCoyLEFHTS02NUQqNixBSU0tMTIwKjIsQUlNLTkqMixFQ00sTElHSFROSU5HXCIsIFwiQUdNLTY1RCo0LEFJTS0xMjAqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIkFJTS0xMjAqMixHQlUtMzEqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIkFJTS0xMjAqMixHQlUtMzEodikqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIkFHTS04OCoyLEFJTS0xMjAqMixBSU0tOSoyLEVDTSxGdWVsKjIsTElHSFROSU5HXCIsIFwiQ29weSBBSU0tMTIwKjIsR0JVLTM4KjIsRUNNLEZ1ZWwqMixMSUdIVE5JTkdcIiwgXCJBSU0tMTIwKjIsR0JVLTEwKjIsRUNNLEZ1ZWwqMixMSUdIVE5JTkdcIiwgXCJNay04NCoyLEFJTS0xMjAqMixFQ00sRnVlbCoyLExJR0hUTklOR1wiLCBcIkFHTS0xNTQqMixBSU0tMTIwKjIsRUNNLEZ1ZWwqMixMSUdIVE5JTkdcIiwgXCJNay04MkFJUio2LEFJTS0xMjAqMixFQ00sRnVlbCoyLExJVEVOSU5HXCIsIFwiQ0JVOTcqNCxBSU0xMjAqMixFQ00sRnVlbCoyLExJVEVOSU5HXCIsIFwiQUdNLTg4KjIsQUdNLTY1RCoyLEFJTS0xMjBCKjIsQUlNLTlNKjIsRUNNLExJVEVOSU5HXCIsIFwiQ0JVODcqMixBSU0tMTIwKjIsRUNNLEZ1ZWwqMixMSVRFTklOR1wiLCBcIkFHTTg4LCBBR00tNjVELCBBSU0tMTIwKjIsRnVlbCoyLEVDTSxMSVRFTklOR1wiLCBcIkFJTS0xMjAqMixHQlUtMTIqMixFQ00sRnVlbCoyLExJVEVOSU5HXCIsIFwiQUdNLTY1SyoyLEFJTS0xMjAqMixFQ00sTGFudGlybiAsRnVlbCoyLExJVEVOSU5HXCIsIFwiQUdNLTY1Ryo0LEFJTS0xMjBDKjIsQUlNLTlNKjIsRUNNXCIsIFwiQUlNLTEyMEMqNCxBSU0tOU0qMixFQ00sRnVlbCoyXCIsIFwiQUlNLTEyMEIqNCxBSU0tOU0qMixFQ00sRnVlbCoyXCIsIFwiQUlNLTlNKjQsRnVlbCoyXCIsIFwiQUlNLTEyMEMqMixBSU0tMTIwQioyLEFJTS05TSoyLEZ1ZWwqM1wiLCBcIkFJTS05UCo0XCIsIFwiQUlNLTlNKjIsRUNNXCJdLCBcIkYtNEVcIjogW1wiQUlNLTkqNCxBSU0tNyo0XCIsIFwiQUdNNDUqMl9BR00tNjVEKjRfQUlNNyoyX0VDTVwiLCBcIkFHTS00NSoyLEFJTS03KjIsRnVlbCoyLEVDTVwiLCBcIk1rLTgyKjE4LEFJTS03KjIsRUNNXCIsIFwiR0JVLTEyKjIsQUlNLTcqMixGdWVsKjIsRUNNXCIsIFwiTWsyMCoxMixBSU0tNyoyLEVDTVwiLCBcIk1rLTgyKjYsQUlNLTcqMixGdWVsKjIsRUNNXCIsIFwiR0JVLTEwKjIsQUlNLTcqMixGdWVsKjIsRUNNXCIsIFwiTWsyMCo2LEFJTS03KjIsRnVlbCoyLEVDTVwiLCBcIkFHTS00NSo0LEFJTS03KjIsRUNNXCIsIFwiQUdNLTY1Syo0LEFJTS03KjIsRnVlbCoyLEVDTVwiLCBcIkZ1ZWwqM1wiLCBcIkFJTS05KjQsQUlNLTcqNCxGdWVsKjJcIiwgXCJNay04NCoyLEFJTS03KjIsRUNNXCIsIFwiQUdNLTY1Syo0LEFJTS03TSo0LEZ1ZWwqM1wiXSwgXCJGL0EtMThBXCI6IFtcIkdCVS0xNioyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUlNLTkqNixGdWVsXCIsIFwiTWstODQqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTS02NUQqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFHTTg4KjRfQUlNOSoyX0FJTTdfRkxJUiBQb2RfRnVlbFwiLCBcIkFJTS05KjQsRnVlbCozXCIsIFwiTEFVLTEwKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBR00tODgqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIk1LLTgyKjgsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsXCIsIFwiTUstODIqNCxBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFJTS05KjQsQUlNLTcqMixGdWVsKjNcIiwgXCJBR00tNjVLKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJGdWVsKjNcIiwgXCJBR004OCoyX0FHTTY1RCoyX0FJTTkqMl9BSU03X0ZMSVIgUG9kX0Z1ZWxcIiwgXCJHQlUtMTIqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFJTS05KjQsQUlNLTcqNCxGdWVsXCIsIFwiTWsyMCo0LEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiR0JVLTEwKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBR00tODRBKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIl0sIFwiRi9BLTE4Q1wiOiBbXCJBR00tNjIqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkdCVS0xMCoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiR0JVLTEyKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJGdWVsKjNcIiwgXCJNay04NCoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiR0JVLTE2KjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBR00tMTU0KjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBSU0tMTIwKjQsQUlNLTkqMixGdWVsKjNcIiwgXCJBR00tNjVEKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBR004OCoyX0FHTTY1RCoyX0FJTTkqMl9BSU03X0ZMSVIgUG9kX0Z1ZWxcIiwgXCJBR004OCo0X0FJTTkqMl9BSU03X0ZMSVIgUG9kX0Z1ZWxcIiwgXCJBSU0tOSoyLEFJTS03KjYsRnVlbFwiLCBcIk1rMjAqNCxBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFJTS0xMjAqNixBSU0tOSoyLEZ1ZWxcIiwgXCJMQVUtMTAqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiLCBcIkFJTS05KjIsQUlNLTcqNCxGdWVsKjNcIiwgXCJNSy04Mio4LEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbFwiLCBcIkFJTS0xMjAqMixBSU0tOSoyLEFJTS03KjIsRnVlbCozXCIsIFwiQUdNLTg4KjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJBR00tODRFKjIsQUlNLTkqMixBSU0tNyxGTElSIFBvZCxGdWVsKjNcIiwgXCJNSy04Mio0LEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUdNLTg0QSoyLEFJTS05KjIsQUlNLTcsRkxJUiBQb2QsRnVlbCozXCIsIFwiQUlNLTlNKjIsQUdNLTY1RCoyLE1rLTgyKjQsRkxJUiBQb2QsRnVlbFwiLCBcIkFJTS0xMjAqNCxBSU0tOSoyLEFJTS03KjIsRnVlbFwiLCBcIkFHTS02NUsqMixBSU0tOSoyLEFJTS03LEZMSVIgUG9kLEZ1ZWwqM1wiXSwgXCJJTC03Nk1EXCI6IFtdLCBcIklMLTc4TVwiOiBbXSwgXCJLYS0yN1wiOiBbXSwgXCJLYS01MlwiOiBbXCJBUFUtNiBWaWtoci1NKjIsIEtoLTI1TUwqMlwiLCBcIkFQVS02IFZpa2hyLU0qMlwiLCBcIkItOCo0XCIsIFwiS01HVS0yIChBTy0yLjVSVCkqNFwiLCBcIkItOCoyLCBBUFUtNiBWaWtoci1NKjJcIiwgXCJGQUItNTAwKjJcIiwgXCJVQi0xMyoyXCIsIFwiRkFCLTI1MCo0XCIsIFwiS2gtMjVNTCoyLCBSLTczKjJcIl0sIFwiS0MtMTBBXCI6IFtdLCBcIktDLTEzNVwiOiBbXSwgXCJNaS0yNFZcIjogW1wiMnhGQUItNTAwXCIsIFwiMTB4Uy0xM1wiLCBcIjJ4RkFCLTI1MFwiLCBcIjR4OU0xMTQsIDJ4RnVlbCB0YW5rXCIsIFwiMTI4eFMtNVwiLCBcIjgweFMtOCBUc01cIiwgXCI0eDlNMTE0LCA0MHhTLTggVHNNXCIsIFwiNjR4Uy01XCIsIFwiOHg5TTExNFwiLCBcIjR4OU0xMTQsIDgweFMtOFwiLCBcIjR4OU0xMTQsIDEyOHhTLTVcIiwgXCIyeEtNR1UgQVBcIiwgXCI0eEZ1ZWwgdGFua1wiLCBcIjR4VVBLLTIzXCIsIFwiNHg5TTExNCwgMTB4Uy0xM1wiLCBcIjR4OU0xMTQsIDgweFMtOCBUc01cIiwgXCI0eDlNMTE0XCIsIFwiODB4Uy04XCIsIFwiNDB4Uy04IFRzTVwiLCBcIjh4OU0xMTQsIDQweFMtOCBUc01cIiwgXCI4eDlNMTE0LCAxMHhTLTEzXCIsIFwiMnhGdWVsIHRhbmtcIiwgXCI0eDlNMTE0LCA0eFVQSy0yM1wiLCBcIjJ4VVBLLTIzXCIsIFwiOHg5TTExNCwgNjR4Uy01XCIsIFwiOHg5TTExNCwgNDB4Uy04XCIsIFwiMjB4Uy0xM1wiLCBcIjQweFMtOFwiLCBcIjh4OU0xMTQsIDJ4VVBLLTIzXCJdLCBcIk1pLTI2XCI6IFtdLCBcIk1pLTI4TlwiOiBbXCIyeEZBQi0yNTBcIiwgXCI0eEZ1ZWwgdGFua1wiLCBcIjgweFMtOFwiLCBcIjR4S01HVSBBUFwiLCBcIjR4VVBLLTIzXCIsIFwiMTZ4OU0xMTQsIDEweFMtMTNcIiwgXCI0eEZBQi01MDBcIiwgXCIxNng5TTExNCwgMnhGQUItNTAwXCIsIFwiNDB4Uy04XCIsIFwiNDB4Uy04IFRzTVwiLCBcIjJ4S01HVSBBUFwiLCBcIjJ4VVBLLTIzXCIsIFwiMTZ4OU0xMTQsIDJ4VVBLLTIzXCIsIFwiMnhGQUItNTAwXCIsIFwiMTZ4OU0xMTQsIDQweFMtOFwiLCBcIjE2eDlNMTE0XCIsIFwiMjB4Uy0xM1wiLCBcIjE2eDlNMTE0LCAyeEtNR1UgQVBcIiwgXCI0eEZBQi0yNTBcIiwgXCI0eEtNR1UgQVRcIiwgXCIxNng5TTExNCwgNDB4Uy04IFRzTVwiLCBcIjgweFMtOCBUc01cIiwgXCIyeEtNR1UgQVRcIiwgXCI5eDlNMTE0XCIsIFwiMnhGdWVsIHRhbmtcIiwgXCIxMHhTLTEzXCIsIFwiMnhGQUItMjUwLCAxNng5TTExNFwiLCBcIjE2eDlNMTE0LCAyeEtNR1UgQVRcIl0sIFwiTWktOE1UXCI6IFtcIjQgeCBCOFwiLCBcIjQgeCBCOCArIDJHVVZfQVAtMzAgKEdyTCAzMG1tKVwiLCBcIjIgeCBVUEsgKzIgeCBCOFwiLCBcIjIgeEI4ICsgMkdVVl9ZYUtCIChNRy0xMi43KzcuNjIpKyAyR1VWX0FQLTMwIChHckwgMzBtbSlcIiwgXCI2IHggRkFCLTEwMFwiLCBcIjIgeCBCOCArIDIgeCBVUEstMjMtMjUwXCIsIFwiMiB4IFVQSy0tMjMtMjUwXCJdLCBcIk1pRy0xNWJpc1wiOiBbXCIyKkZBQi01MFwiLCBcIjIqRkFCLTEwME1cIiwgXCIyKjMwMExcIiwgXCIyKjQwMExcIiwgXCIyKjYwMExcIiwgXCJGdWVsIHRhbmsgMzAwXCIsIFwiRnVlbCB0YW5rIDQwMFwiXSwgXCJNaUctMjNNTERcIjogW1wiUi02ME0qNFwiLCBcIkItOCoyLFItNjBNKjIsRnVlbC04MDBcIiwgXCJVQi0zMioyLFItNjBNKjIsRnVlbC04MDBcIiwgXCJSLTI0UioyLFItNjBNKjQsRnVlbC04MDBcIiwgXCJSLTI0UixSLTI0VCxSLTYwTSo0LEZ1ZWwtODAwXCIsIFwiUi02ME0qNCxGdWVsLTgwMFwiLCBcIkZBQi01MDAqMixSLTYwTSoyLEZ1ZWwtODAwXCIsIFwiUi0yNFIqMixSLTYwTSo0XCIsIFwiRkFCLTI1MCoyLFItNjBNKjIsRnVlbC04MDBcIiwgXCJSQkstMjUwKjIsUi02ME0qMixGdWVsLTgwMFwiLCBcIlJCSy01MDAqMixSLTYwTSoyLEZ1ZWwtODAwXCIsIFwiUi0yNFIsUi0yNFQsUi02ME0qNFwiXSwgXCJNaUctMjVQRFwiOiBbXCJSLTQwUioyLFItNDBUKjJcIiwgXCJSLTQwUio0XCIsIFwiUi00MFIqMixSLTYwTSoyXCJdLCBcIk1pRy0yNVJCVFwiOiBbXCJGQUItNTAweDJfNjB4MlwiLCBcIlItNjBNKjJcIl0sIFwiTWlHLTI3S1wiOiBbXCJGQUItMjUwKjYsUi02ME0qMixGdWVsXCIsIFwiQmV0QUItNTAwU2hQKjIsRkFCLTI1MCoyLFItNjAqMlwiLCBcIktoLTI1TVIqMixSLTYwTSoyLEZ1ZWxcIiwgXCJLaC0yOUwqMixSLTYwTSoyLEZ1ZWxcIiwgXCJCLTgqNFwiLCBcIkJldEFCLTUwMCoyLEZBQi01MDAqMixSLTYwKjJcIiwgXCJLaC0yNU1QVSoyLFItNjBNKjIsRnVlbFwiLCBcIktoLTI5VCoyLFItNjBNKjIsRnVlbFwiLCBcIkZBQi01MDAqMixGQUItMjUwKjIsUi02ME0qMixGdWVsXCIsIFwiS2gtMjVNTCoyLFItNjBNKjIsRnVlbFwiLCBcIktBQi01MDAqMixSLTYwTSoyLEZ1ZWxcIiwgXCJSQkstNTAwQU8qMixSQkstMjUwKjIsUi02ME0qMlwiLCBcIlVCLTMyKjRcIiwgXCJLaC0yOUwqMixSLTYwKjIsRnVlbFwiXSwgXCJNaUctMjlBXCI6IFtcIkZ1ZWwtMTE1MCoyLEZ1ZWwtMTUwMFwiLCBcIlJCSy01MDBBTyo0LFItNzMqMixGdWVsXCIsIFwiRkFCLTI1MCo0LFItNzMqMixGdWVsXCIsIFwiQi04KjQsUi03MyoyLEZ1ZWxcIiwgXCJSLTYwTSo0LFItMjdSKjJcIiwgXCJSLTczKjQsUi0yN1IqMixGdWVsLTE1MDBcIiwgXCJSLTczKjYsRnVlbC0xNTAwXCIsIFwiUi02ME0qNixGdWVsLTE1MDBcIiwgXCJTLTI0KjQsUi03MyoyLEZ1ZWxcIiwgXCJGQUItNTAwKjQsUi03MyoyLEZ1ZWxcIiwgXCJSLTYwTSo2XCIsIFwiQmV0QUItNTAwKjQsUi03MyoyLEZ1ZWxcIiwgXCJSLTczKjZcIiwgXCJSLTczKjIsUi02ME0qMixSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlItNjBNKjQsUi0yN1IqMixGdWVsLTE1MDBcIiwgXCJSQkstMjUwKjQsUi03MyoyLEZ1ZWxcIiwgXCJSLTczKjQsUi0yN1IqMlwiLCBcIlItNzMqMixSLTYwTSoyLFItMjdSKjJcIiwgXCJTLTI0KjIsRkFCLTUwMCoyLFItNzMqMixGdWVsXCJdLCBcIk1pRy0yOUdcIjogW1wiUi03Myo2LEZ1ZWwtMTUwMFwiLCBcIlItNzMqNCxSLTI3UioyLEZ1ZWwtMTUwMFwiLCBcIlItNzMqMixSLTYwTSoyLFItMjdSKjJcIiwgXCJSLTYwTSo0LFItMjdSKjIsRnVlbC0xNTAwXCIsIFwiUi03Myo2XCIsIFwiUi02ME0qNCxSLTI3UioyXCIsIFwiUi03Myo0LFItMjdSKjJcIiwgXCJGdWVsLTExNTAqMixGdWVsLTE1MDBcIiwgXCJSLTYwTSo2XCIsIFwiUi02ME0qNixGdWVsLTE1MDBcIiwgXCJSLTczKjIsUi02ME0qMixSLTI3UioyLEZ1ZWwtMTUwMFwiXSwgXCJNaUctMjlTXCI6IFtcIlItNzMqMixSLTYwTSoyLFItMjdSKjJcIiwgXCJSLTczKjQsUi0yN1IqMixGdWVsLTE1MDBcIiwgXCJSLTczKjYsRnVlbC0xNTAwXCIsIFwiUi02ME0qNixGdWVsLTE1MDBcIiwgXCJTLTI0KjQsUi03MyoyLEZ1ZWxcIiwgXCJGQUItNTAwKjQsUi03MyoyLEZ1ZWxcIiwgXCJCZXRBQi01MDAqNCxSLTczKjIsRnVlbFwiLCBcIlJCSy01MDBBTyo0LFItNzMqMixGdWVsXCIsIFwiUi03MyoyLFItNjBNKjIsUi0yN1IqMixGdWVsLTE1MDBcIiwgXCJSLTc3KjIsUi03MyoyLEZ1ZWwtMTUwMCxGdWVsLTExNTAqMlwiLCBcIkItOCo0LFItNzMqMixGdWVsXCIsIFwiUkJLLTI1MCo0LFItNzMqMixGdWVsXCIsIFwiUi03Myo2XCIsIFwiRnVlbC0xMTUwKjIsRnVlbC0xNTAwXCIsIFwiUi02ME0qNlwiLCBcIlItNjBNKjQsUi0yN1IqMlwiLCBcIlItNzMqNCxSLTI3UioyXCIsIFwiUi03Nyo0LFItNzMqMlwiLCBcIkZBQi0yNTAqNCxSLTczKjIsRnVlbFwiLCBcIlItNjBNKjQsUi0yN1IqMixGdWVsLTE1MDBcIiwgXCJSLTc3KjQsUi03MyoyLEZ1ZWwtMTUwMFwiLCBcIlMtMjQqMixGQUItNTAwKjIsUi03MyoyLEZ1ZWxcIl0sIFwiTWlHLTMxXCI6IFtcIlItNDBUKjIsUi0zMyo0XCIsIFwiUi00MFQsUi0zMyo0LFItNDBSXCIsIFwiUi00MFIqMixSLTMzKjRcIiwgXCJSLTYwTSo0LFItMzMqNFwiXSwgXCJNaXJhZ2UgMjAwMC01XCI6IFtcIlIgNTUwKjIsTUlDQSBJUio0XCIsIFwiUiA1NTAqMixNSUNBIElSKjIsTUlDQSBBUioyLEZ1ZWwqM1wiLCBcIlIgNTUwKjIsTUlDQSBBUio0LEZ1ZWwqM1wiLCBcIlIgNTUwKjIsU1VQRVIgNTMwRioyLEZ1ZWxcIiwgXCJGdWVsKjNcIiwgXCJSIDU1MCoyLE1JQ0EgSVIqNCxGdWVsKjNcIiwgXCJSIDU1MCoyLE1JQ0EgQVIqNFwiLCBcIlIgNTUwKjIsU1VQRVIgNTMwRioyXCJdLCBcIk1RLTkgUmVhcGVyXCI6IFtcIkdCVS0xMio0XCIsIFwiR0JVLTM4KjRcIiwgXCJBR00tMTE0Syo4LEdCVS0zOCoyXCIsIFwiQUdNLTExNEsqMTJcIl0sIFwiT0gtNThEXCI6IFtcIjJ4QUdNLTExNCwgN3hIWURSQS03MFwiLCBcIjR4QUdNLTExNFwiLCBcIk0tMywgN3hIWURSQS03MFwiLCBcIjJ4QUdNLTExNCwgTS0zXCIsIFwiMTR4SFlEUkEtNzBcIiwgXCIxNHhIWURSQS03MCBXUFwiXSwgXCJSUS0xQSBQcmVkYXRvclwiOiBbXCJBR00tMTE0SyoyXCJdLCBcIlMtM0JcIjogW1wiQUdNLTg0QSoyLCBNay04MioyXCIsIFwiQUdNLTg0RSoyXCIsIFwiQUdNLTY1RCwgQUdNLTY1SywgTWsyMCo0XCIsIFwiQUdNLTY1RCwgQUdNLTY1SywgTWs4Mio0XCIsIFwiTWs4MioxMFwiLCBcIk1rODQqMiwgTWs4Mio0XCIsIFwiWlVOSSBNazcxKjgsIE1rMjAqNFwiXSwgXCJTSC0zV1wiOiBbXSwgXCJTSC02MEJcIjogW1wiQUdNLTExOVwiXSwgXCJTdS0xN000XCI6IFtcIlVCLTMyKjQsUi02ME0qMixGQUItMjUwKjRcIiwgXCJGQUItMTAwKjI0LFItNjBNKjJcIiwgXCJVQi0zMio0LFItNjBNKjIsRnVlbCoyXCIsIFwiQi04KjQsUi02ME0qMixGQUItMjUwKjRcIiwgXCJLaC0yOUwqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkItOCo0LFItNjBNKjIsRnVlbCoyXCIsIFwiS2gtMjlUKjIsUi02ME0qMixGdWVsKjJcIiwgXCJCZXRBQi01MDAqNixSLTYwTSoyXCIsIFwiS2gtMjVNUio0LFItNjBNKjIsRnVlbCoyXCIsIFwiUy0yNCo0LFItNjBNKjIsRnVlbCoyXCIsIFwiS2gyNU1QVSoyX0toMjVNTCoyXyxSNjBNKjJfRnVlbCoyXCIsIFwiS2g1OCoyX0toMjVNUFUqMl9SNjBNKjJfRnVlbCoyXCIsIFwiRkFCLTI1MCoxNixSLTYwTSoyXCIsIFwiS2gtMjVNTCo0LFItNjBNKjIsRnVlbCoyXCIsIFwiUkJLLTUwMEFPKjQsU1BQVS0yMioyLFItNjBNKjJcIiwgXCJTLTI0KjQsUi02ME0qMixGQUItMjUwKjRcIiwgXCJGdWVsKjRcIiwgXCJGQUItNTAwKjYsUi02ME0qMlwiLCBcIktoLTI1TUwqMixLaC0yOUwqMixSLTYwKjJcIl0sIFwiU3UtMjRNXCI6IFtcIlVCLTEzKjQsRkFCLTUwMCoyXCIsIFwiS2gtMzFBKjIsUi02ME0qMixGdWVsXCIsIFwiVUItMTMqNFwiLCBcIktBQi01MDAqNCxSLTYwTSoyXCIsIFwiUy0yNSoyLEZ1ZWwqM1wiLCBcIktoMzFQKjJfS2gyNU1MKjJfTC0wODFcIiwgXCJCLTgqMixGdWVsKjNcIiwgXCJGQUItMTUwMCoyLFItNjBNKjJcIiwgXCJTLTI0KjRcIiwgXCJCZXRBQi01MDAqNCxSLTYwTSoyXCIsIFwiS2gtMjVNTCo0XCIsIFwiS2gtMjVNUio0XCIsIFwiRkFCLTEwMCoyNFwiLCBcIktoLTMxQSoyLFItNjBNKjJcIiwgXCJVQi0xMyoyLEZ1ZWwqM1wiLCBcIkItOCoyLEZ1ZWwqMlwiLCBcIktoNTgqMl9LaDI1TUwqMl9MLTA4MVwiLCBcIlJCSy0yNTAqOFwiLCBcIlVCLTMyKjRcIiwgXCJLaC0yOUwqMixSLTYwTSoyXCIsIFwiUy0yNCoyLEZ1ZWwqM1wiLCBcIktoMjVNUFUqMl9LaDI1TUwqMl9MLTA4MVwiLCBcIkZBQi01MDAqNCxSLTYwTSoyXCIsIFwiRkFCLTI1MCo4XCIsIFwiRnVlbCozXCIsIFwiUkJLLTUwMEFPKjQsUi02ME0qMlwiLCBcIktBQi0xNTAwKjIsUi02ME0qMixGdWVsXCIsIFwiVUItMzIqNCxGQUItMjUwKjRcIiwgXCJLaC0yOVQqMixSLTYwTSoyXCIsIFwiVUItMzIqMixGdWVsKjNcIiwgXCJLaC01OU0qMixSLTYwTSoyLEZ1ZWxcIiwgXCJTLTI1KjRcIiwgXCJCLTgqNlwiXSwgXCJTdS0yNE1SXCI6IFtcIlNIUElMLEVUSEVSLFItNjBNKjJcIiwgXCJGdWVsKjJcIiwgXCJUQU5HQVpILEVUSEVSLFItNjBNKjIsRnVlbCoyXCIsIFwiVEFOR0FaSCxFVEhFUixSLTYwTSoyXCIsIFwiU0hQSUwsRVRIRVIsUi02ME0qMixGdWVsKjJcIl0sIFwiU3UtMjVcIjogW1wiUkJLLTI1MCoyLFMtOEtPTSo4MCxSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0yNTAqNCxVQi0xMyoyLFItNjBNKjIsU1BQVS0yMioyXCIsIFwiUy0yNUwqNixVQi0xMyoyLFItNjBNKjJcIiwgXCJTLTI1KjYsU1BQVS0yMioyLFItNjBNKjJcIiwgXCIyLTI1TCoyLCBLSC0yNU1MKjIsIFJCSy01MDAqMiwgQi04TUkqMiwgUi02ME0qMlwiLCBcIlMtOEtPTSoxMjAsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMjUwKjQsUy0yNSoyLFItNjBNKjIsRnVlbCoyXCIsIFwiUkJLLTUwMEFPKjQsUy04S09NKjQwLFItNjBNKjIsRnVlbCoyXCIsIFwiRkFCLTI1MCoyLFNQUFUtMjIqMixTQUItMTAwKjQsUi02ME0qMlwiLCBcIlJCSy01MDBBTyo2LFItNjBNKjIsRnVlbCoyXCIsIFwiUkJLLTI1MCo4LFItNjBNKjJcIiwgXCJLaC0yOUwqMixLaC0yNU1MKjQsUi02ME0qMlwiLCBcIlJCSy0yNTAqNCxTLThLT00qODAsUi02ME0qMlwiLCBcIkZBQi0yNTAqNCxVQi0xMyoyLFItNjBNKjIsRnVlbCoyXCIsIFwiUy04VHNNKjE2MCxSLTYwKjJcIiwgXCJLaC0yNU1MKjQsUi02ME0qMixGdWVsKjJcIiwgXCJCZXRBQi01MDBTaFAqOCxSLTYwTSoyXCIsIFwiU0FCLTEwMCo4LFItNjAqMlwiLCBcIktoLTI5TCoyLEtoLTI1TUwqNCxTLTI1TCoyLFItNjBNKjJcIiwgXCJGQUItNTAwKjYsUi02ME0qMixGdWVsKjJcIiwgXCJLaC0yOUwqMixLaC0yNU1MKjIsUi02ME0qMixGdWVsKjJcIiwgXCJLaC0yOUwqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0xMDAqMzIsUi02ME0qMlwiLCBcIkZBQi0xMDAqMTYsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMjUwKjYsUi02ME0qMixGdWVsKjJcIiwgXCJCZXRBQi01MDAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIlMtMjUqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIlVCLTEzKjYsUi02ME0qMixGdWVsKjJcIiwgXCJLaC0yNSo0LEtoLTI5VCoyLFItNjAqMlwiLCBcIlMtMjVMKjYsUi02MCoyLEZ1ZWwqMlwiXSwgXCJTdS0yNVRcIjogW1wiRkFCLTI1MCo0LFNQUFUtMjIqMixTQUItMTAwKjIsUi02ME0qMlwiLCBcIktoLTI5TCoyLEtoLTI1TUwqNCxSLTczKjIsTWVyY3VyeSBMTFRWIFBvZCxNUFMtNDEwXCIsIFwiS0FCLTUwMEtyKjIsS2gtMjVNTCoyLFItNzMqMixNUFMtNDEwLEZ1ZWwqMlwiLCBcIlJCSy01MDBBTyo0LFVCLTMyKjIsUi02ME0qMixGdWVsKjJcIiwgXCJCZXRBQi01MDBTaFAqOCxSLTYwTSoyXCIsIFwiVUItMTMqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI5VCoyLFItNzMqMixGdWVsKjIsTVBTLTQxMFwiLCBcIktoNTgqMl9LaDI1TUwqNF9SNzMqMl9MLTA4MV9NUFMtNDEwXCIsIFwiRkFCLTI1MCo0LFVCLTEzKjIsUi02ME0qMixGdWVsKjJcIiwgXCJLSC0yOVQqMiwgVklLSFIqMiwgRUNNXCIsIFwiS2gtMjlUKjIsS2gtMjVNTCo0LFItNzMqMixNUFMtNDEwXCIsIFwiRkFCLTI1MCo0LFVCLTEzKjIsUi02ME0qMixTUFBVLTIyKjJcIiwgXCJGQUItNTAwKjYsUi02ME0qMixGdWVsKjJcIiwgXCJGdWVsKjRcIiwgXCJBUFUtOCBWaWtoci1NKjIsS2gtMjVNTCxSLTczKjIsU1BQVS0yMioyLE1lcmN1cnkgTExUViBQb2QsTVBTLTQxMFwiLCBcIlMtOEtPTSoxMjAsUi02ME0qMixGdWVsKjJcIiwgXCJLTUdVLTIgKFBUQUItMi41S08pKjgsUi02ME0qMlwiLCBcIkZBQi0yNTAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI5TCoyLFItNzMqMixGdWVsKjIsTWVyY3VyeSBMTFRWIFBvZCxNUFMtNDEwXCIsIFwiRkFCLTEwMCozMixSLTYwTSoyXCIsIFwiUkJLLTI1MCo4LFItNjBNKjJcIiwgXCJTLTI1TCo2LFVCLTEzKjIsUi02ME0qMlwiLCBcIkZBQi0yNTAqNCxTLTI1KjIsUi02ME0qMixGdWVsKjJcIiwgXCJTLTI1KjIsU1BQVS0yMio0LFItNjBNKjIsUi03MyoyXCIsIFwiS01HVS0yIChBTy0yLjVSVCkqOCxSLTYwTSoyXCIsIFwiQVBVLTggVmlraHItTSoyLFMtMjVMKjIsUi03MyoyLFNQUFUtMjIqMixNZXJjdXJ5IExMVFYgUG9kLE1QUy00MTBcIiwgXCJTLTI1KjYsUi02ME0qMixGdWVsKjJcIiwgXCJSQkstNTAwQU8qNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoNTgqMl9LaDI1TVBVKjJfS2gyNU1MKjJfUjczKjJfTC0wODFfTVBTLTQxMFwiLCBcIlJCSy0yNTAqNCxVQi0zMio0LFItNjBNKjJcIiwgXCJLaDI1TVBVKjRfUjczKjJfRnVlbCoyX0wtMDgxX01QUy00MTBcIiwgXCJCZXRBQi01MDAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIlJCSy0yNTAqMixVQi0zMio0LFItNjBNKjIsRnVlbCoyXCIsIFwiRkFCLTEwMCoxNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktoLTI5TCoyLEtoLTI1TUwqNCxSLTczKjIsRUNNXCJdLCBcIlN1LTI1VE1cIjogW1wiQmV0QUItNTAwU2hQKjYsUi03MyoyLEVDTVwiLCBcIkFQVS04IFZpa2hyLU0qMixSLTYwTSoyLFItNzMqMixTUFBVLTIyKjIsTWVyY3VyeSBMTFRWIFBvZFwiLCBcIktoLTI5VCoyLEtoLTI1TUwqMixSLTczKjIsRnVlbCoyLEVDTVwiLCBcIktoLTU4KjJfS2gtMjVNUFUqNF9SLTczKjJfTC0wODFfTVBTNDEwXCIsIFwiUy0yNUwqNixVQi0xMyoyLFItNjBNKjJcIiwgXCJLaC0zNSoyX1ItNzMqMl9GdWVsKjJfTVBTNDEwX0tvcHlvLTI1XCIsIFwiS2gtMzFBKjJfUi03MyoyX0Z1ZWwqMl9NUFM0MTBfS29weW8tMjVcIiwgXCJGdWVsKjRcIiwgXCJCZXRBQi01MDAqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIktBQi01MDBLcioyLEtoLTI1TUwqMixSLTczKjIsRnVlbCoyLEVDTVwiLCBcIktoLTI5TCoyLFItNzMqMixGdWVsKjIsTWVyY3VyeSBMTFRWIFBvZCxFQ01cIiwgXCJVQi0xMyo2LFItNjBNKjIsRnVlbCoyXCIsIFwiUy0yNSoyLFNQUFUtMjIqNCxSLTYwTSoyLFItNzMqMlwiLCBcIktoLTMxUCoyX0toLTI1TUwqNF9SLTczKjJfTC0wODFfTVBTNDEwXCIsIFwiVUItMzIqNixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0xMDAqMTYsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMjUwKjYsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItNTAwKjYsUi02ME0qMixGdWVsKjJcIiwgXCJLaC0yNU1QVSo0X1ItNzMqMl9GdWVsKjJfTC0wODFfTVBTNDEwXCIsIFwiUy0yNSo2LFItNjBNKjIsRnVlbCoyXCIsIFwiUkJLLTUwMEFPKjQsVUItMzIqMixSLTYwTSoyLEZ1ZWwqMlwiLCBcIkZBQi0yNTAqNCxVQi0xMyoyLFItNjBNKjIsU1BQVS0yMioyXCIsIFwiS2gtMzFQKjJfS2gtMjVNUFUqNF9SLTczKjJfTC0wODFfTVBTNDEwXCIsIFwiUkJLLTUwMEFPKjYsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMTAwKjMyLFItNjBNKjJcIiwgXCJSQkstMjUwKjIsVUItMzIqNCxSLTYwTSoyLEZ1ZWwqMlwiLCBcIlJCSy0yNTAqOCxSLTYwTSoyXCIsIFwiQVBVLTggVmlraHItTSoyLFItNzMqMixTUFBVLTIyKjIsTWVyY3VyeSBMTFRWIFBvZCxFQ01cIiwgXCJSQkstMjUwKjQsVUItMzIqNCxSLTYwTSoyXCIsIFwiRkFCLTI1MCo0LFNQUFUtMjIqMixTQUItMTAwKjIsUi02ME0qMlwiLCBcIkZBQi0yNTAqNCxTLTI1KjIsUi02ME0qMixGdWVsKjJcIiwgXCJGQUItMjUwKjQsVUItMTMqMixSLTYwTSoyLEZ1ZWwqMlwiXSwgXCJTdS0yN1wiOiBbXCJSLTczKjQsUi0yN0VSKjQsUi0yN0VUKjJcIiwgXCJLTUdVLTIgKEFPLTIuNVJUKSo1LFItNzMqMixFQ01cIiwgXCJCZXRBQi01MDBTaFAqNixSLTczKjIsRUNNXCIsIFwiS01HVS0yIChQVEFCLTIuNUtPKSo1LFItNzMqMixFQ01cIiwgXCJSLTczKjIsUi0yN0VSKjYsRUNNXCIsIFwiUi03Myo2XCIsIFwiUy0xMyoxMCxSQkstNTAwQU8qMixGQUItNTAwKjIsUi03MyoyLEVDTVwiLCBcIlItNzMqNCxSLTI3RVIqNlwiLCBcIlItNzMqMixSLTI3RVIqNCxSLTI3RVQqMixFQ01cIiwgXCJSLTczKjQsRUNNXCIsIFwiRUNNXCIsIFwiRkFCLTUwMCo2LFItNzMqMixFQ01cIiwgXCJTLTI1KjIsRkFCLTUwMCo0LFItNzMqNFwiLCBcIlMtMjUqNCwgRkFCLTUwMCo0LCBSLTczKjIsIEVDTVwiLCBcIkNBUyBTLThLT00gUm9ja2V0cyArIFJCSy01MDAgUFRBQjFcIiwgXCJDQVMgUy04T0ZQIFJvY2tldHMgKyBGQUItNTAwIEJvbWJzXCIsIFwiQ0FTIFMtOE9GUCBSb2NrZXRzXCIsIFwiQ0FTIFMtOE9GUCBSb2NrZXRzICsgRkFCLTEwMCBCb21ic1wiLCBcIkNBUyBTLThLT00gUm9ja2V0cyArIEZBQi0xMDAgQm9tYnNcIiwgXCJDQVMgUy0xMyBSb2NrZXRzXCIsIFwiQ0FTIFMtOEtPTSBSb2NrZXRzICsgRkFCLTI1MCBCb21ic1wiLCBcIkNBUyBTLThLT00gUm9ja2V0cyArIFJCSy0yNTAgUFRBQjIuNVwiLCBcIkNBUyBTLThLT00gUm9ja2V0c1wiLCBcIkNBUyBTLThLT00gUm9ja2V0cyArIEZBQi01MDAgQm9tYnNcIiwgXCJDQVMgUy04S09NIFJvY2tldHMgKyBSQkstNTAwIFBUQUIxMFwiLCBcIkNBUyBTLThLT00gUm9ja2V0cyArIEtNR1UgUFRBQlwiLCBcIiBDQVMgUy0yNSBSb2NrZXRzXCIsIFwiQ0FTIFMtMjUgUm9ja2V0cyArIEZBQi01MDAgQm9tYnNcIl0sIFwiU3UtMzBcIjogW1wiUi03MyoyLFItNzcqNixFQ01cIiwgXCJSLTczKjIsUi0yN1QqMixSLTI3Uio0XCIsIFwiUkJLLTUwMEFPKjYsUi03MyoyLEVDTVwiLCBcIktoLTMxUCoyLEtoLTMxQSoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiUi03Myo0LFItMjdUKjIsUi0yN1IqNFwiLCBcIlItNzMqMixSLTc3KjIsS2gtMzUqMixFQ01cIiwgXCJLaC0zNSoyLEtoLTMxUCoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiRkFCLTI1MCo0LEItOCoyLFItNzMqMixFQ01cIiwgXCJFQ01cIiwgXCJLQUItMTUwMCoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiUkJLLTI1MCo2LFItNzMqMixFQ01cIiwgXCJSLTczKjQsUi03Nyo2XCIsIFwiRkFCLTI1MCo0LFMtMjUqMixSLTczKjIsRUNNXCIsIFwiUi03MyoyLFItMjdSKjIsUi0yN0VSKjQsRUNNXCIsIFwiUi03MyoyLFItMjdUKjIsUi0yN0VSKjIsUi03NyoyLEVDTVwiLCBcIkZBQi0xNTAwKjIsUi03MyoyLFItNzcqMixFQ01cIiwgXCJSLTczKjQsUi0yN1QqMixSLTI3RVIqMixSLTc3KjJcIiwgXCJLaC01OU0qMixSLTczKjIsUi03NyoyLEVDTVwiLCBcIkZBQi01MDAqNixSLTczKjIsRUNNXCIsIFwiUi03Myo0LFItMjdSKjIsUi0yN0VSKjRcIiwgXCJLaC0yOUwqNCxSLTczKjIsUi03NyoyLEVDTVwiLCBcIkJldEFCLTUwMCo2LFItNzMqMixFQ01cIiwgXCJSLTczKjRcIiwgXCJGQUItMjUwKjQsVUItMTMqMixSLTczKjIsRUNNXCIsIFwiUi03MyoyLFItNzcqNCxSLTI3RVIqMixFQ01cIiwgXCJLQUItNTAwKjQsUi03MyoyLFItNzcqMixFQ01cIiwgXCJGQUItMjUwKjYsUi03MyoyLEVDTVwiLCBcIlItNzMqNCxSLTc3KjQsUi0yN0VSKjJcIiwgXCJLaC0yOVQqNCxSLTczKjIsUi03NyoyLEVDTVwiLCBcIktoLTMxUCoyLEtoLTMxQSoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiS2gtMzFQKjQsUi03MyoyLFItNzcqMixFQ01cIl0sIFwiU3UtMzNcIjogW1wiUkJLLTI1MCo2LFItNzMqMixSLTI3UioyLEVDTVwiLCBcIlItNzMqNFwiLCBcIlItNzMqNCxSLTI3UioyLFItMjdFUio2XCIsIFwiUi03MyoyLFItMjdFVCoyLFItMjdFUio2LEVDTVwiLCBcIlItNzMqNCxSLTI3RVQqMixSLTI3RVIqNlwiLCBcIkZBQi0yNTAqNixSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJSLTczKjIsUi0yN1IqMixSLTI3RVIqNixFQ01cIiwgXCJFQ01cIiwgXCJCZXRBQi01MDAqNixSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJSQkstNTAwQU8qNixSLTczKjIsUi0yN1IqMixFQ01cIiwgXCJVQi0xMyo0LEZBQi0yNTAqNCxSLTczKjIsRUNNXCIsIFwiUy0yNSo0LEZBQi0yNTAqNCxSLTczKjIsRUNNXCIsIFwiRkFCLTUwMCo2LFItNzMqMixSLTI3UioyLEVDTVwiLCBcIkItOCo0LEZBQi0yNTAqNCxSLTczKjIsRUNNXCIsIFwiUy0yNSo0LEZBQi01MDAqNCxSLTczKjRcIiwgXCJDQVMgUy04S09NIHJvY2tldHMgKyBGQUI1MDBcIiwgXCJDQVMgUy04T0ZQIHJvY2tldHMgKyBGQUI1MDBcIiwgXCJDQVMgUy0xMyBSb2NrZXRzICsgRkFCNTAwXCIsIFwiQ0FTIFMtMTMgUm9ja2V0cyArIEZBQjEwMFwiLCBcIkNBUyBTLThLT00gcm9ja2V0cyArIEZBQjI1MFwiLCBcIkNBUyBTLTI1IFJvY2tldHMgKyBGQUI1MDBcIiwgXCJDQVMgUy04S09NIHJvY2tldHMgKyBSQks1MDAgUFRBQjEwXCIsIFwiQ0FTIFMtOEtPTSByb2NrZXRzICsgUkJLNTAwIFBUQUIxXCJdLCBcIlN1LTM0XCI6IFtcIlVCLTEzKjQsRkFCLTI1MCo0LFItNzMqMixFQ01cIiwgXCJGQUItMTAwKjI4LFItNzMqMixFQ01cIiwgXCJCZXRBQi01MDAqOCxSLTczKjIsRUNNXCIsIFwiS2gtMjlMKjQsUi03MyoyLFItNzcqMixFQ01cIiwgXCJLQUItNTAwKjQsUi03MyoyLFItNzcqMixFQ01cIiwgXCJSQkstMjUwIFBUQUItMi41TSo4LFItNzMqMixFQ01cIiwgXCJGQUItMjUwKjgsUi03MyoyLEVDTVwiLCBcIkVDTVwiLCBcIktoLTI5VCo0LFItNzMqMixSLTc3KjIsRUNNXCIsIFwiUkJLLTUwMCBQVEFCLTEwLTUqOCxSLTczKjIsRUNNXCIsIFwiRkFCLTE1MDAqMyxSLTczKjIsUi03NyoyLEVDTVwiLCBcIktoLTU5TSoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiQi04KjYsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiRkFCLTUwMCo4LFItNzMqMixFQ01cIiwgXCJLQUItMTUwMCoyLFItNzMqMixSLTc3KjIsRUNNXCIsIFwiS2gtMjlUKjQsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiS2gtMzFBKjQsS2gtMzFQKjIsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiS2gtMzFBKjYsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiS2gtMzFQKjQsUi03MyoyLFItMjdSKjIsRUNNXCIsIFwiS2gtMjlMKjQsUi03MyoyLFItMjdSKjIsRUNNXCJdLCBcIlRvcm5hZG8gR1I0XCI6IFtcIkFJTS05TSoyLCBGdWVsKjIsIEVDTVwiLCBcIkFMQVJNKjQsIEZ1ZWwqMiwgRUNNXCIsIFwiR0JVLTE2KjIsIEFJTS05TSoyLCBGdWVsKjIsIEVDTVwiLCBcIkJMNzU1KjQsIEFJTS05TSoyLCBGdWVsKjIsIEVDTVwiLCBcIlNlYSBFYWdsZSoyLCBBSU0tOU0qMiwgRnVlbCoyLCBFQ01cIl0sIFwiVG9ybmFkbyBJRFNcIjogW1wiS29ybW9yYW4qMixBSU0tOSoyLEZ1ZWwqMlwiLCBcIkdCVS0xNioyLEFJTS05KjIsRnVlbCoyXCIsIFwiRnVlbCoyXCIsIFwiQUdNLTg4KjQsQUlNLTkqMixFQ01cIiwgXCJBR00tODgqMixBSU0tOSoyLEZ1ZWwqMixFQ01cIiwgXCJLb3Jtb3Jhbio0LEFJTS05KjJcIiwgXCJLb3Jtb3JhbioyLEFJTS05KjIsQUdNLTg4KjJcIiwgXCJNay04Mio0LEFJTS05KjIsRnVlbCoyXCJdLCBcIlR1LTE0MlwiOiBbXCJLaC0zNSo2XCJdLCBcIlR1LTE2MFwiOiBbXCJLaC02NSoxMlwiXSwgXCJUdS0yMk0zXCI6IFtcIktoLTIyTlwiLCBcIktoLTIyTioyXCIsIFwiRkFCLTI1MCo2OVwiLCBcIkZBQi01MDAqMzNcIiwgXCJGQUItNTAwKjMzLCBGQUItMjUwKjM2XCIsIFwiRkFCLTI1MCozM1wiXSwgXCJUdS05NU1TXCI6IFtcIktoLTY1KjZcIl0sIFwiVUgtMUhcIjogW1wiTTEzNCBNaW5pZ3VuKjIsIFhNMTU4KjJcIl0sIFwiVUgtNjBBXCI6IFtdfSIsImltcG9ydCB7IE1hcmtlciwgTGF0TG5nLCBQb2x5bGluZSB9IGZyb20gJ2xlYWZsZXQnO1xyXG5pbXBvcnQgeyBDb252ZXJ0RERUb0RNUyB9IGZyb20gJy4uL290aGVyL3V0aWxzJztcclxuaW1wb3J0IHsgZ2V0TWFwLCBnZXRVbml0c01hbmFnZXIgfSBmcm9tICcuLic7XHJcbmltcG9ydCB7IFVuaXRNYXJrZXIsIE1hcmtlck9wdGlvbnMgfSBmcm9tICcuL3VuaXRtYXJrZXInO1xyXG5pbXBvcnQgeyBhZGREZXN0aW5hdGlvbiwgYXR0YWNrVW5pdCB9IGZyb20gJy4uL2Rjcy9kY3MnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVuaXQgXHJcbntcclxuICAgIElEICAgICAgICAgICAgICAgICAgOiBudW1iZXI7XHJcbiAgICBsZWFkZXIgICAgICAgICAgICAgIDogYm9vbGVhbjtcclxuICAgIHdpbmdtYW4gICAgICAgICAgICAgOiBib29sZWFuO1xyXG4gICAgd2luZ21lbiAgICAgICAgICAgICA6IFVuaXRbXTtcclxuICAgIGZvcm1hdGlvbiAgICAgICAgICAgOiBzdHJpbmc7XHJcbiAgICBuYW1lICAgICAgICAgICAgICAgIDogc3RyaW5nO1xyXG4gICAgdW5pdE5hbWUgICAgICAgICAgICA6IHN0cmluZztcclxuICAgIGdyb3VwTmFtZSAgICAgICAgICAgOiBzdHJpbmc7XHJcbiAgICBsYXRpdHVkZSAgICAgICAgICAgIDogbnVtYmVyO1xyXG4gICAgbG9uZ2l0dWRlICAgICAgICAgICA6IG51bWJlcjtcclxuICAgIGFsdGl0dWRlICAgICAgICAgICAgOiBudW1iZXI7XHJcbiAgICBoZWFkaW5nICAgICAgICAgICAgIDogbnVtYmVyO1xyXG4gICAgY29hbGl0aW9uSUQgICAgICAgICA6IG51bWJlcjtcclxuICAgIGFsaXZlICAgICAgICAgICAgICAgOiBib29sZWFuO1xyXG4gICAgc3BlZWQgICAgICAgICAgICAgICA6IG51bWJlcjtcclxuICAgIGN1cnJlbnRUYXNrICAgICAgICAgOiBzdHJpbmc7XHJcbiAgICB0eXBlICAgICAgICAgICAgICAgIDogT2JqZWN0IHwgbnVsbDtcclxuICAgIGZsYWdzICAgICAgICAgICAgICAgOiBPYmplY3QgfCBudWxsO1xyXG4gICAgYWN0aXZlUGF0aCAgICAgICAgICA6IGFueSB8IG51bGw7ICAgLy8gVE9ETzogZGVjbGFyZSBpbnRlZmFjZVxyXG4gICAgbWlzc2lvbkRhdGEgICAgICAgICA6IE9iamVjdCB8IG51bGw7XHJcblxyXG4gICAgI3NlbGVjdGFibGUgICAgICAgICA6IGJvb2xlYW47XHJcbiAgICAjc2VsZWN0ZWQgICAgICAgICAgIDogYm9vbGVhbjtcclxuICAgICNwcmV2ZW50Q2xpY2sgICAgICAgOiBib29sZWFuO1xyXG4gICAgI3BhdGhNYXJrZXJzICAgICAgICA6IE1hcmtlcltdO1xyXG4gICAgI3BhdGhQb2x5bGluZSAgICAgICA6IFBvbHlsaW5lO1xyXG4gICAgI3RhcmdldHNQb2x5bGluZXMgICA6IFBvbHlsaW5lW107XHJcbiAgICAjbWFya2VyICAgICAgICAgICAgIDogVW5pdE1hcmtlcjtcclxuICAgICN0aW1lciAgICAgICAgICAgICAgOiBudW1iZXI7XHJcblxyXG4gICAgc3RhdGljIGdldENvbnN0cnVjdG9yKG5hbWU6IHN0cmluZylcclxuICAgIHtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJHcm91bmRVbml0XCIpIHJldHVybiBHcm91bmRVbml0O1xyXG4gICAgICAgIGlmIChuYW1lID09PSBcIkFpcmNyYWZ0XCIpIHJldHVybiBBaXJjcmFmdDtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJIZWxpY29wdGVyXCIpIHJldHVybiBIZWxpY29wdGVyO1xyXG4gICAgICAgIGlmIChuYW1lID09PSBcIk1pc3NpbGVcIikgcmV0dXJuIE1pc3NpbGU7XHJcbiAgICAgICAgaWYgKG5hbWUgPT09IFwiQm9tYlwiKSByZXR1cm4gQm9tYjtcclxuICAgICAgICBpZiAobmFtZSA9PT0gXCJOYXZ5VW5pdFwiKSByZXR1cm4gTmF2eVVuaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoSUQ6IG51bWJlciwgbWFya2VyOiBVbml0TWFya2VyKSBcclxuICAgIHtcclxuICAgICAgICB0aGlzLklEID0gSUQ7XHJcbiAgICBcclxuICAgICAgICAvKiBOYW1lcyAqL1xyXG4gICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMudW5pdE5hbWUgICAgICAgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBOYW1lICAgICAgPSBcIlwiOyBcclxuXHJcbiAgICAgICAgLyogUG9zaXRpb24gYW5kIHNwZWVkICovXHJcbiAgICAgICAgdGhpcy5sYXRpdHVkZSAgICAgICA9IDA7XHJcbiAgICAgICAgdGhpcy5sb25naXR1ZGUgICAgICA9IDA7XHJcbiAgICAgICAgdGhpcy5hbHRpdHVkZSAgICAgICA9IDA7XHJcbiAgICAgICAgdGhpcy5oZWFkaW5nICAgICAgICA9IDA7XHJcbiAgICAgICAgdGhpcy5zcGVlZCAgICAgICAgICA9IDA7XHJcblxyXG4gICAgICAgIC8qIFRhc2tpbmcgKi9cclxuICAgICAgICB0aGlzLmNvYWxpdGlvbklEICAgID0gMDtcclxuICAgICAgICB0aGlzLmFsaXZlICAgICAgICAgID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUYXNrICAgID0gXCJcIjtcclxuXHJcbiAgICAgICAgLyogRm9ybWF0aW9uICovXHJcbiAgICAgICAgdGhpcy5sZWFkZXIgICAgICAgICA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMud2luZ21hbiAgICAgICAgPSBmYWxzZTsgXHJcbiAgICAgICAgdGhpcy53aW5nbWVuICAgICAgICA9IFtdO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0aW9uICAgICAgPSBcIlwiO1xyXG5cclxuICAgICAgICAvKiBTdHJ1Y3R1cmVzICovXHJcbiAgICAgICAgdGhpcy50eXBlICAgICAgICAgICA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5mbGFncyAgICAgICAgICA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYXRoICAgICA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5taXNzaW9uRGF0YSAgICA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuI3NlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuI3RpbWVyID0gMDtcclxuXHJcbiAgICAgICAgLyogVGhlIG1hcmtlciBpcyBzZXQgYnkgdGhlIGluaGVyaXRlZCBjbGFzcyAqL1xyXG4gICAgICAgIHRoaXMuI21hcmtlciA9IG1hcmtlcjtcclxuICAgICAgICB0aGlzLiNtYXJrZXIub24oJ2NsaWNrJywgKGUpID0+IHRoaXMuI29uQ2xpY2soZSkpO1xyXG4gICAgICAgIHRoaXMuI21hcmtlci5vbignZGJsY2xpY2snLCAoZSkgPT4gdGhpcy4jb25Eb3VibGVDbGljayhlKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy4jc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLiNwcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLiNwYXRoTWFya2VycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuI3BhdGhQb2x5bGluZSA9IG5ldyBQb2x5bGluZShbXSwge2NvbG9yOiAnIzJkM2U1MCcsIHdlaWdodDogMywgb3BhY2l0eTogMC41LCBzbW9vdGhGYWN0b3I6IDF9KTtcclxuICAgICAgICB0aGlzLiNwYXRoUG9seWxpbmUuYWRkVG8oZ2V0TWFwKCkpO1xyXG4gICAgICAgIHRoaXMuI3RhcmdldHNQb2x5bGluZXMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUocmVzcG9uc2U6IEpTT04pXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChsZXQgZW50cnkgaW4gcmVzcG9uc2UpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHRoaXNbZW50cnldID0gcmVzcG9uc2VbZW50cnldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy4jdXBkYXRlTWFya2VyKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkKCkpXHJcbiAgICAgICAgICAgIHRoaXMuI2RyYXdQYXRoKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLiNjbGVhclBhdGgoKTtcclxuICAgICAgICBcclxuICAgICAgICAvKlxyXG4gICAgICAgIHRoaXMud2luZ21lbiA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZVtcIndpbmdtZW5JRHNcIl0gIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgSUQgb2YgcmVzcG9uc2VbXCJ3aW5nbWVuSURzXCJdKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndpbmdtZW4ucHVzaCh1bml0c01hbmFnZXIuZ2V0VW5pdEJ5SUQoSUQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1hdGlvbiA9IHJlc3BvbnNlW1wiZm9ybWF0aW9uXCJdO1xyXG5cclxuICAgICAgICB0aGlzLm1pc3Npb25EYXRhID0gbWlzc2lvbkRhdGEuZ2V0VW5pdERhdGEodGhpcy5JRClcclxuXHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCh0aGlzLmdldFNlbGVjdGVkKCkgJiYgdGhpcy5hbGl2ZSlcclxuICAgICAgICBcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRhcmdldHMoKTtcclxuICAgICAgICB0aGlzLm1pc3Npb25EYXRhID0gbWlzc2lvbkRhdGEuZ2V0VW5pdERhdGEodGhpcy5JRCk7XHJcbiAgICAgICAgaWYgKHRoaXMubWlzc2lvbkRhdGEgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWQoKSlcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcmF3VGFyZ2V0cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pXHJcbiAgICB7XHJcbiAgICAgICAgLyogT25seSBhbGl2ZSB1bml0cyBjYW4gYmUgc2VsZWN0ZWQuIFNvbWUgdW5pdHMgYXJlIG5vdCBzZWxlY3RhYmxlICh3ZWFwb25zKSAqL1xyXG4gICAgICAgIGlmICgodGhpcy5hbGl2ZSB8fCAhc2VsZWN0ZWQpICYmIHRoaXMuI3NlbGVjdGFibGUgJiYgdGhpcy4jc2VsZWN0ZWQgIT0gc2VsZWN0ZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLiNzZWxlY3RlZCA9IHNlbGVjdGVkO1xyXG4gICAgICAgICAgICB0aGlzLiNtYXJrZXIuc2V0U2VsZWN0ZWQoc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBnZXRVbml0c01hbmFnZXIoKS5vblVuaXRTZWxlY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWQoKVxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBhZGREZXN0aW5hdGlvbihsYXRsbmc6IEwuTGF0TG5nKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBwYXRoOiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5hY3RpdmVQYXRoICE9IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmFjdGl2ZVBhdGg7XHJcbiAgICAgICAgICAgIHBhdGhbKE9iamVjdC5rZXlzKHBhdGgpLmxlbmd0aCArIDEpLnRvU3RyaW5nKCldID0gbGF0bG5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXRoID0ge1wiMVwiOiBsYXRsbmd9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGREZXN0aW5hdGlvbih0aGlzLklELCBwYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckRlc3RpbmF0aW9ucygpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVQYXRoID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgICNvbkNsaWNrKGU6IGFueSkgXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy4jdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLiNwcmV2ZW50Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIGlmIChnZXRNYXAoKS5nZXRTdGF0ZSgpID09PSAnSURMRScgfHwgZ2V0TWFwKCkuZ2V0U3RhdGUoKSA9PT0gJ01PVkVfVU5JVCcgfHwgZS5vcmlnaW5hbEV2ZW50LmN0cmxLZXkpXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLm9yaWdpbmFsRXZlbnQuY3RybEtleSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFVuaXRzTWFuYWdlcigpLmRlc2VsZWN0QWxsVW5pdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLiNwcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgI29uRG91YmxlQ2xpY2soZTogYW55KSBcclxuICAgIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZXIpO1xyXG4gICAgICAgIHRoaXMuI3ByZXZlbnRDbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIHZhciBvcHRpb25zID0gW1xyXG4gICAgICAgICAgICB7J3Rvb2x0aXAnOiAnQXR0YWNrJywgICAgICAgICAgICdzcmMnOiAnYXR0YWNrLnBuZycsICAgICdjYWxsYmFjayc6ICgpID0+IHtnZXRNYXAoKS5oaWRlU2VsZWN0aW9uV2hlZWwoKTsgZ2V0VW5pdHNNYW5hZ2VyKCkuYXR0YWNrVW5pdCh0aGlzLklEKTt9fSxcclxuICAgICAgICAgICAgeyd0b29sdGlwJzogJ0dvIHRvIHRhbmtlcicsICAgICAnc3JjJzogJ3Rhbmtlci5wbmcnLCAgICAnY2FsbGJhY2snOiAoKSA9PiB7Z2V0TWFwKCkuaGlkZVNlbGVjdGlvbldoZWVsKCk7IC8qc2hvd01lc3NhZ2UoXCJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQgeWV0XCIpOyovfX0sXHJcbiAgICAgICAgICAgIHsndG9vbHRpcCc6ICdSVEInLCAgICAgICAgICAgICAgJ3NyYyc6ICdydGIucG5nJywgICAgICAgJ2NhbGxiYWNrJzogKCkgPT4ge2dldE1hcCgpLmhpZGVTZWxlY3Rpb25XaGVlbCgpOyAvKnNob3dNZXNzYWdlKFwiRnVuY3Rpb24gbm90IGltcGxlbWVudGVkIHlldFwiKTsqL319XHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMubGVhZGVyICYmICF0aGlzLndpbmdtYW4pXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcHRpb25zLnB1c2goeyd0b29sdGlwJzogJ0NyZWF0ZSBmb3JtYXRpb24nLCAnc3JjJzogJ2Zvcm1hdGlvbi5wbmcnLCAnY2FsbGJhY2snOiAoKSA9PiB7Z2V0TWFwKCkuaGlkZVNlbGVjdGlvbldoZWVsKCk7IC8qdW5pdHNNYW5hZ2VyLmNyZWF0ZUZvcm1hdGlvbih0aGlzLklEKTsqL319KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldE1hcCgpLnNob3dTZWxlY3Rpb25XaGVlbChlLm9yaWdpbmFsRXZlbnQsIG9wdGlvbnMsIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAjdXBkYXRlTWFya2VyKClcclxuICAgIHtcclxuICAgICAgICAvKiBBZGQgdGhlIG1hcmtlciBpZiBub3QgcHJlc2VudCAqL1xyXG4gICAgICAgIGlmICghZ2V0TWFwKCkuaGFzTGF5ZXIodGhpcy4jbWFya2VyKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMuI21hcmtlci5hZGRUbyhnZXRNYXAoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLiNtYXJrZXIuc2V0TGF0TG5nKG5ldyBMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpKTtcclxuICAgICAgICB0aGlzLiNtYXJrZXIuZHJhdyh7XHJcbiAgICAgICAgICAgIGhlYWRpbmc6IHRoaXMuaGVhZGluZyxcclxuICAgICAgICAgICAgc3BlZWQ6IHRoaXMuc3BlZWQsXHJcbiAgICAgICAgICAgIGFsdGl0dWRlOiB0aGlzLmFsdGl0dWRlLFxyXG4gICAgICAgICAgICBhbGl2ZTogdGhpcy5hbGl2ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgICNkcmF3UGF0aCgpXHJcbiAgICB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUGF0aCAhPSBudWxsKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIF9wb2ludHMgPSBbXTtcclxuICAgICAgICAgICAgX3BvaW50cy5wdXNoKG5ldyBMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpKTtcclxuXHJcbiAgICAgICAgICAgIC8qIEFkZCBtYXJrZXJzIGlmIG1pc3NpbmcgKi9cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3BhdGhNYXJrZXJzLmxlbmd0aCA8IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlUGF0aCkubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFya2VyID0gbmV3IE1hcmtlcihbMCwgMF0pLmFkZFRvKGdldE1hcCgpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3BhdGhNYXJrZXJzLnB1c2gobWFya2VyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyogUmVtb3ZlIG1hcmtlcnMgaWYgdG9vIG1hbnkgKi9cclxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuI3BhdGhNYXJrZXJzLmxlbmd0aCA+IE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlUGF0aCkubGVuZ3RoKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBnZXRNYXAoKS5yZW1vdmVMYXllcih0aGlzLiNwYXRoTWFya2Vyc1t0aGlzLiNwYXRoTWFya2Vycy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXRoTWFya2Vycy5zcGxpY2UodGhpcy4jcGF0aE1hcmtlcnMubGVuZ3RoIC0gMSwgMSlcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXhpc3RpbmcgbWFya2VycyAodG8gYXZvaWQgY3JlYXRpbmcgbWFya2VycyB1c2VsZXNzbHkpICovXHJcbiAgICAgICAgICAgIGZvciAobGV0IFdQIGluIHRoaXMuYWN0aXZlUGF0aClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5hY3RpdmVQYXRoW1dQXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuI3BhdGhNYXJrZXJzW3BhcnNlSW50KFdQKSAtIDFdLnNldExhdExuZyhbZGVzdGluYXRpb24ubGF0LCBkZXN0aW5hdGlvbi5sbmddKTtcclxuICAgICAgICAgICAgICAgIF9wb2ludHMucHVzaChuZXcgTGF0TG5nKGRlc3RpbmF0aW9uLmxhdCwgZGVzdGluYXRpb24ubG5nKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiNwYXRoUG9seWxpbmUuc2V0TGF0TG5ncyhfcG9pbnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAjY2xlYXJQYXRoKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKGxldCBXUCBpbiB0aGlzLiNwYXRoTWFya2VycylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnJlbW92ZUxheWVyKHRoaXMuI3BhdGhNYXJrZXJzW1dQXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuI3BhdGhNYXJrZXJzID0gW107XHJcbiAgICAgICAgdGhpcy4jcGF0aFBvbHlsaW5lLnNldExhdExuZ3MoW10pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICBkcmF3VGFyZ2V0cygpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChsZXQgdHlwZUluZGV4IGluIHRoaXMubWlzc2lvbkRhdGFbJ3RhcmdldHMnXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4IGluIHRoaXMubWlzc2lvbkRhdGFbJ3RhcmdldHMnXVt0eXBlSW5kZXhdKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0RGF0YSA9IHRoaXMubWlzc2lvbkRhdGFbJ3RhcmdldHMnXVt0eXBlSW5kZXhdW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSB1bml0c01hbmFnZXIuZ2V0VW5pdEJ5SUQodGFyZ2V0RGF0YS5vYmplY3RbXCJpZF9cIl0pXHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0TGF0TG5nID0gbmV3IExhdExuZyh0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZW5kTGF0TG5nID0gbmV3IExhdExuZyh0YXJnZXQubGF0aXR1ZGUsIHRhcmdldC5sb25naXR1ZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlSW5kZXggPT09IFwicmFkYXJcIilcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCIjRkZGRjAwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVJbmRleCA9PT0gXCJ2aXN1YWxcIilcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCIjRkYwMEZGXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVJbmRleCA9PT0gXCJyd3JcIilcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCIjMDBGRjAwXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gXCIjRkZGRkZGXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXRQb2x5bGluZSA9IG5ldyBQb2x5bGluZShbc3RhcnRMYXRMbmcsIGVuZExhdExuZ10sIHtjb2xvcjogY29sb3IsIHdlaWdodDogMywgb3BhY2l0eTogMSwgc21vb3RoRmFjdG9yOiAxfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UG9seWxpbmUuYWRkVG8obWFwLmdldE1hcCgpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0YXJnZXRzUG9seWxpbmVzLnB1c2godGFyZ2V0UG9seWxpbmUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJUYXJnZXRzKClcclxuICAgIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCBpbiB0aGlzLiN0YXJnZXRzUG9seWxpbmVzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbWFwLmdldE1hcCgpLnJlbW92ZUxheWVyKHRoaXMuI3RhcmdldHNQb2x5bGluZXNbaW5kZXhdKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgICovXHJcblxyXG4gICAgYXR0YWNrVW5pdCh0YXJnZXRJRDogbnVtYmVyKVxyXG4gICAge1xyXG4gICAgICAgIC8vIENhbGwgRENTIGF0dGFja1VuaXQgZnVuY3Rpb25cclxuICAgICAgICBpZiAodGhpcy5JRCAhPSB0YXJnZXRJRClcclxuICAgICAgICB7ICAgICAgICBcclxuICAgICAgICAgICAgYXR0YWNrVW5pdCh0aGlzLklELCB0YXJnZXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3cgYSBtZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICBjaGFuZ2VTcGVlZChzcGVlZENoYW5nZSlcclxuICAgIHtcclxuICAgICAgICAvLyBUT0RPIG1vdmUgaW4gZGVkaWNhdGVkIGZpbGVcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudW5pdE5hbWUgKyBcIiBzcGVlZCBjaGFuZ2UgcmVxdWVzdDogXCIgKyBzcGVlZENoYW5nZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgY29tbWFuZCA9IHtcIklEXCI6IHRoaXMuSUQsIFwiY2hhbmdlXCI6IHNwZWVkQ2hhbmdlfVxyXG4gICAgICAgIHZhciBkYXRhID0ge1wiY2hhbmdlU3BlZWRcIjogY29tbWFuZH1cclxuXHJcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUFsdGl0dWRlKGFsdGl0dWRlQ2hhbmdlKVxyXG4gICAge1xyXG4gICAgICAgIC8vIFRPRE8gbW92ZSBpbiBkZWRpY2F0ZWQgZmlsZVxyXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgICB4aHIub3BlbihcIlBVVFwiLCBSRVNUYWRkcmVzcyk7XHJcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xyXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy51bml0TmFtZSArIFwiIGFsdGl0dWRlIGNoYW5nZSByZXF1ZXN0OiBcIiArIGFsdGl0dWRlQ2hhbmdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBjb21tYW5kID0ge1wiSURcIjogdGhpcy5JRCwgXCJjaGFuZ2VcIjogYWx0aXR1ZGVDaGFuZ2V9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XCJjaGFuZ2VBbHRpdHVkZVwiOiBjb21tYW5kfVxyXG5cclxuICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Zm9ybWF0aW9uKGZvcm1hdGlvbilcclxuICAgIHtcclxuICAgICAgICAvLyBUT0RPIG1vdmUgaW4gZGVkaWNhdGVkIGZpbGVcclxuICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgeGhyLm9wZW4oXCJQVVRcIiwgUkVTVGFkZHJlc3MpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcclxuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMudW5pdE5hbWUgKyBcIiBmb3JtYXRpb24gY2hhbmdlOiBcIiArIGZvcm1hdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2YXIgY29tbWFuZCA9IHtcIklEXCI6IHRoaXMuSUQsIFwiZm9ybWF0aW9uXCI6IGZvcm1hdGlvbn1cclxuICAgICAgICB2YXIgZGF0YSA9IHtcInNldEZvcm1hdGlvblwiOiBjb21tYW5kfVxyXG5cclxuICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGVhZGVyKHdpbmdtZW5JRHMpXHJcbiAgICB7XHJcbiAgICAgICAgLy8gVE9ETyBtb3ZlIGluIGRlZGljYXRlZCBmaWxlXHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKFwiUFVUXCIsIFJFU1RhZGRyZXNzKTtcclxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XHJcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnVuaXROYW1lICsgXCIgY3JlYXRlZCBmb3JtYXRpb24gd2l0aDogXCIgKyB3aW5nbWVuSURzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHZhciBjb21tYW5kID0ge1wiSURcIjogdGhpcy5JRCwgXCJ3aW5nbWVuSURzXCI6IHdpbmdtZW5JRHN9XHJcbiAgICAgICAgdmFyIGRhdGEgPSB7XCJzZXRMZWFkZXJcIjogY29tbWFuZH1cclxuXHJcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgfVxyXG4gICAgKi9cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEFpclVuaXQgZXh0ZW5kcyBVbml0XHJcbntcclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBaXJjcmFmdCBleHRlbmRzIEFpclVuaXRcclxue1xyXG4gICAgY29uc3RydWN0b3IoSUQ6IG51bWJlciwgb3B0aW9uczogTWFya2VyT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICB2YXIgbWFya2VyID0gbmV3IFVuaXRNYXJrZXIob3B0aW9ucyk7XHJcbiAgICAgICAgc3VwZXIoSUQsIG1hcmtlcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBIZWxpY29wdGVyIGV4dGVuZHMgQWlyVW5pdFxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihJRDogbnVtYmVyLCBvcHRpb25zOiBNYXJrZXJPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSBuZXcgVW5pdE1hcmtlcihvcHRpb25zKTtcclxuICAgICAgICBzdXBlcihJRCwgbWFya2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdyb3VuZFVuaXQgZXh0ZW5kcyBVbml0XHJcbntcclxuICAgIGNvbnN0cnVjdG9yKElEOiBudW1iZXIsIG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hcmtlciA9IG5ldyBVbml0TWFya2VyKG9wdGlvbnMpO1xyXG4gICAgICAgIHN1cGVyKElELCBtYXJrZXIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTmF2eVVuaXQgZXh0ZW5kcyBVbml0XHJcbntcclxuICAgIGNvbnN0cnVjdG9yKElEOiBudW1iZXIsIG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIG1hcmtlciA9IG5ldyBVbml0TWFya2VyKG9wdGlvbnMpO1xyXG4gICAgICAgIHN1cGVyKElELCBtYXJrZXIpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV2VhcG9uIGV4dGVuZHMgVW5pdFxyXG57XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWlzc2lsZSBleHRlbmRzIFdlYXBvblxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihJRDogbnVtYmVyLCBvcHRpb25zOiBNYXJrZXJPcHRpb25zKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBtYXJrZXIgPSBuZXcgVW5pdE1hcmtlcihvcHRpb25zKTtcclxuICAgICAgICBzdXBlcihJRCwgbWFya2VyKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJvbWIgZXh0ZW5kcyBXZWFwb25cclxue1xyXG4gICAgY29uc3RydWN0b3IoSUQ6IG51bWJlciwgb3B0aW9uczogTWFya2VyT3B0aW9ucylcclxuICAgIHtcclxuICAgICAgICB2YXIgbWFya2VyID0gbmV3IFVuaXRNYXJrZXIob3B0aW9ucyk7XHJcbiAgICAgICAgc3VwZXIoSUQsIG1hcmtlcik7XHJcbiAgICB9XHJcbn1cclxuIiwiXHJcblxyXG5leHBvcnQgdmFyIHVuaXRUeXBlczogYW55ID0ge307XHJcbi8qIE5BVlkgKi9cclxudW5pdFR5cGVzLm5hdnkgPSB7fTtcclxudW5pdFR5cGVzLm5hdnkuYmx1ZSA9IFtcclxuICAgIFwiVklOU09OXCIsXHJcbiAgICBcIlBFUlJZXCIsXHJcbiAgICBcIlRJQ09OREVST0dcIlxyXG5dXHJcblxyXG51bml0VHlwZXMubmF2eS5yZWQgPSBbXHJcbiAgICBcIkFMQkFUUk9TXCIsXHJcbiAgICBcIktVWk5FQ09XXCIsXHJcbiAgICBcIk1PTE5JWUFcIixcclxuICAgIFwiTU9TQ09XXCIsXHJcbiAgICBcIk5FVVNUUkFTSFwiLFxyXG4gICAgXCJQSU9UUlwiLFxyXG4gICAgXCJSRVpLWVwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy5uYXZ5LmNpdmlsID0gW1xyXG4gICAgXCJFTE5ZQVwiLFxyXG4gICAgXCJEcnktY2FyZ28gc2hpcC0yXCIsXHJcbiAgICBcIkRyeS1jYXJnbyBzaGlwLTFcIixcclxuICAgIFwiWldFWkROWVwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy5uYXZ5LnN1Ym1hcmluZSA9IFtcclxuICAgIFwiS0lMT1wiLFxyXG4gICAgXCJTT01cIlxyXG5dXHJcblxyXG51bml0VHlwZXMubmF2eS5zcGVlZGJvYXQgPSBbXHJcbiAgICBcInNwZWVkYm9hdFwiXHJcbl1cclxuXHJcbi8qIFZFSElDTEVTIChHUk9VTkQpICovXHJcbnVuaXRUeXBlcy52ZWhpY2xlcyA9IFtdXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5Ib3dpdHplcnMgPSBbXHJcbiAgICBcIjJCMTEgbW9ydGFyXCIsXHJcbiAgICBcIlNBVSBHdm96ZGlrYVwiLFxyXG4gICAgXCJTQVUgTXN0YVwiLFxyXG4gICAgXCJTQVUgQWthdHNpYVwiLFxyXG4gICAgXCJTQVUgMi1DOVwiLFxyXG4gICAgXCJNLTEwOVwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5JRlYgPSBbXHJcbiAgICBcIkFBVjdcIixcclxuICAgIFwiQk1ELTFcIixcclxuICAgIFwiQk1QLTFcIixcclxuICAgIFwiQk1QLTJcIixcclxuICAgIFwiQk1QLTNcIixcclxuICAgIFwiQm9tYW5cIixcclxuICAgIFwiQlJETS0yXCIsXHJcbiAgICBcIkJUUi04MFwiLFxyXG4gICAgXCJCVFJfRFwiLFxyXG4gICAgXCJCdW5rZXJcIixcclxuICAgIFwiQ29icmFcIixcclxuICAgIFwiTEFWLTI1XCIsXHJcbiAgICBcIk0xMDQzIEhNTVdWIEFybWFtZW50XCIsXHJcbiAgICBcIk0xMDQ1IEhNTVdWIFRPV1wiLFxyXG4gICAgXCJNMTEyNiBTdHJ5a2VyIElDVlwiLFxyXG4gICAgXCJNLTExM1wiLFxyXG4gICAgXCJNMTEzNCBTdHJ5a2VyIEFUR01cIixcclxuICAgIFwiTS0yIEJyYWRsZXlcIixcclxuICAgIFwiTWFyZGVyXCIsXHJcbiAgICBcIk1DVi04MFwiLFxyXG4gICAgXCJNVExCXCIsXHJcbiAgICBcIlBhcmF0cm9vcGVyIFJQRy0xNlwiLFxyXG4gICAgXCJQYXJhdHJvb3BlciBBS1MtNzRcIixcclxuICAgIFwiU2FuZGJveFwiLFxyXG4gICAgXCJTb2xkaWVyIEFLXCIsXHJcbiAgICBcIkluZmFudHJ5IEFLXCIsXHJcbiAgICBcIlNvbGRpZXIgTTI0OVwiLFxyXG4gICAgXCJTb2xkaWVyIE00XCIsXHJcbiAgICBcIlNvbGRpZXIgTTQgR1JHXCIsXHJcbiAgICBcIlNvbGRpZXIgUlBHXCIsXHJcbiAgICBcIlRQWlwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5NTFJTID0gW1xyXG4gICAgXCJHcmFkLVVSQUxcIixcclxuICAgIFwiVXJhZ2FuX0JNLTI3XCIsXHJcbiAgICBcIlNtZXJjaFwiLFxyXG4gICAgXCJNTFJTXCJcclxuXVxyXG5cclxudW5pdFR5cGVzLnZlaGljbGVzLlNBTSA9IFtcclxuICAgIFwiMlM2IFR1bmd1c2thXCIsXHJcbiAgICBcIkt1YiAyUDI1IGxuXCIsXHJcbiAgICBcIjVwNzMgcy0xMjUgbG5cIixcclxuICAgIFwiUy0zMDBQUyA1UDg1QyBsblwiLFxyXG4gICAgXCJTLTMwMFBTIDVQODVEIGxuXCIsXHJcbiAgICBcIlNBLTExIEJ1ayBMTiA5QTMxME0xXCIsXHJcbiAgICBcIk9zYSA5QTMzIGxuXCIsXHJcbiAgICBcIlRvciA5QTMzMVwiLFxyXG4gICAgXCJTdHJlbGEtMTBNM1wiLFxyXG4gICAgXCJTdHJlbGEtMSA5UDMxXCIsXHJcbiAgICBcIlNBLTExIEJ1ayBDQyA5UzQ3ME0xXCIsXHJcbiAgICBcIlNBLTggT3NhIExEIDlUMjE3XCIsXHJcbiAgICBcIlBhdHJpb3QgQU1HXCIsXHJcbiAgICBcIlBhdHJpb3QgRUNTXCIsXHJcbiAgICBcIkdlcGFyZFwiLFxyXG4gICAgXCJIYXdrIHBjcFwiLFxyXG4gICAgXCJTQS0xOCBJZ2xhIG1hbnBhZFwiLFxyXG4gICAgXCJTQS0xOCBJZ2xhIGNvbW1cIixcclxuICAgIFwiSWdsYSBtYW5wYWQgSU5TXCIsXHJcbiAgICBcIlNBLTE4IElnbGEtUyBtYW5wYWRcIixcclxuICAgIFwiU0EtMTggSWdsYS1TIGNvbW1cIixcclxuICAgIFwiVnVsY2FuXCIsXHJcbiAgICBcIkhhd2sgbG5cIixcclxuICAgIFwiTTQ4IENoYXBhcnJhbFwiLFxyXG4gICAgXCJNNiBMaW5lYmFja2VyXCIsXHJcbiAgICBcIlBhdHJpb3QgbG5cIixcclxuICAgIFwiTTEwOTcgQXZlbmdlclwiLFxyXG4gICAgXCJQYXRyaW90IEVQUFwiLFxyXG4gICAgXCJQYXRyaW90IGNwXCIsXHJcbiAgICBcIlJvbGFuZCBBRFNcIixcclxuICAgIFwiUy0zMDBQUyA1NEs2IGNwXCIsXHJcbiAgICBcIlN0aW5nZXIgbWFucGFkIEdSR1wiLFxyXG4gICAgXCJTdGluZ2VyIG1hbnBhZCBkc3JcIixcclxuICAgIFwiU3RpbmdlciBjb21tIGRzclwiLFxyXG4gICAgXCJTdGluZ2VyIG1hbnBhZFwiLFxyXG4gICAgXCJTdGluZ2VyIGNvbW1cIixcclxuICAgIFwiWlNVLTIzLTQgU2hpbGthXCIsXHJcbiAgICBcIlpVLTIzIEVtcGxhY2VtZW50IENsb3NlZFwiLFxyXG4gICAgXCJaVS0yMyBFbXBsYWNlbWVudFwiLFxyXG4gICAgXCJaVS0yMyBDbG9zZWQgSW5zdXJnZW50XCIsXHJcbiAgICBcIlVyYWwtMzc1IFpVLTIzIEluc3VyZ2VudFwiLFxyXG4gICAgXCJaVS0yMyBJbnN1cmdlbnRcIixcclxuICAgIFwiVXJhbC0zNzUgWlUtMjNcIlxyXG5dXHJcblxyXG51bml0VHlwZXMudmVoaWNsZXMuUmFkYXIgPSBbXHJcbiAgICBcIjFMMTMgRVdSXCIsXHJcbiAgICBcIkt1YiAxUzkxIHN0clwiLFxyXG4gICAgXCJTLTMwMFBTIDQwQjZNIHRyXCIsXHJcbiAgICBcIlMtMzAwUFMgNDBCNk1EIHNyXCIsXHJcbiAgICBcIjU1RzYgRVdSXCIsXHJcbiAgICBcIlMtMzAwUFMgNjRINkUgc3JcIixcclxuICAgIFwiU0EtMTEgQnVrIFNSIDlTMThNMVwiLFxyXG4gICAgXCJEb2cgRWFyIHJhZGFyXCIsXHJcbiAgICBcIkhhd2sgdHJcIixcclxuICAgIFwiSGF3ayBzclwiLFxyXG4gICAgXCJQYXRyaW90IHN0clwiLFxyXG4gICAgXCJIYXdrIGN3YXJcIixcclxuICAgIFwicC0xOSBzLTEyNSBzclwiLFxyXG4gICAgXCJSb2xhbmQgUmFkYXJcIixcclxuICAgIFwic25yIHMtMTI1IHRyXCJcclxuXVxyXG5cclxudW5pdFR5cGVzLnZlaGljbGVzLlN0cnVjdHVyZXMgPSBbXHJcbiAgICBcImhvdXNlMWFybVwiLFxyXG4gICAgXCJob3VzZTJhcm1cIixcclxuICAgIFwib3V0cG9zdF9yb2FkXCIsXHJcbiAgICBcIm91dHBvc3RcIixcclxuICAgIFwiaG91c2VBX2FybVwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5UYW5rcyA9IFtcclxuICAgIFwiQ2hhbGxlbmdlcjJcIixcclxuICAgIFwiTGVjbGVyY1wiLFxyXG4gICAgXCJMZW9wYXJkMUEzXCIsXHJcbiAgICBcIkxlb3BhcmQtMlwiLFxyXG4gICAgXCJNLTYwXCIsXHJcbiAgICBcIk0xMTI4IFN0cnlrZXIgTUdTXCIsXHJcbiAgICBcIk0tMSBBYnJhbXNcIixcclxuICAgIFwiVC01NVwiLFxyXG4gICAgXCJULTcyQlwiLFxyXG4gICAgXCJULTgwVURcIixcclxuICAgIFwiVC05MFwiXHJcbl1cclxuXHJcbnVuaXRUeXBlcy52ZWhpY2xlcy5VbmFybWVkID0gW1xyXG4gICAgXCJVcmFsLTQzMjAgQVBBLTVEXCIsXHJcbiAgICBcIkFUTVotNVwiLFxyXG4gICAgXCJBVFotMTBcIixcclxuICAgIFwiR0FaLTMzMDdcIixcclxuICAgIFwiR0FaLTMzMDhcIixcclxuICAgIFwiR0FaLTY2XCIsXHJcbiAgICBcIk05NzggSEVNVFQgVGFua2VyXCIsXHJcbiAgICBcIkhFTVRUIFRGRlRcIixcclxuICAgIFwiSUtBUlVTIEJ1c1wiLFxyXG4gICAgXCJLQU1BWiBUcnVja1wiLFxyXG4gICAgXCJMQVogQnVzXCIsXHJcbiAgICBcIkh1bW1lclwiLFxyXG4gICAgXCJNIDgxOFwiLFxyXG4gICAgXCJNQVotNjMwM1wiLFxyXG4gICAgXCJQcmVkYXRvciBHQ1NcIixcclxuICAgIFwiUHJlZGF0b3IgVHJvamFuU3Bpcml0XCIsXHJcbiAgICBcIlN1aWRhZVwiLFxyXG4gICAgXCJUaWdyXzIzMzAzNlwiLFxyXG4gICAgXCJUcm9sbGV5IGJ1c1wiLFxyXG4gICAgXCJVQVotNDY5XCIsXHJcbiAgICBcIlVyYWwgQVRzUC02XCIsXHJcbiAgICBcIlVyYWwtMzc1IFBCVVwiLFxyXG4gICAgXCJVcmFsLTM3NVwiLFxyXG4gICAgXCJVcmFsLTQzMjAtMzFcIixcclxuICAgIFwiVXJhbC00MzIwVFwiLFxyXG4gICAgXCJWQVogQ2FyXCIsXHJcbiAgICBcIlppTC0xMzEgQVBBLTgwXCIsXHJcbiAgICBcIlNLUC0xMVwiLFxyXG4gICAgXCJaSUwtMTMxIEtVTkdcIixcclxuICAgIFwiWklMLTQzMzFcIlxyXG5dXHJcblxyXG4vKiBBSVJQTEFORVMgKi9cclxudW5pdFR5cGVzLmFpciA9IHt9XHJcblxyXG51bml0VHlwZXMuYWlyLkNBUCA9IFtcclxuICAgIFwiRi00RVwiLFxyXG4gICAgXCJGL0EtMThDXCIsXHJcbiAgICBcIk1pRy0yOVNcIixcclxuICAgIFwiRi0xNEFcIixcclxuICAgIFwiU3UtMjdcIixcclxuICAgIFwiTWlHLTIzTUxEXCIsXHJcbiAgICBcIlN1LTMzXCIsXHJcbiAgICBcIk1pRy0yNVJCVFwiLFxyXG4gICAgXCJTdS0zMFwiLFxyXG4gICAgXCJNaUctMzFcIixcclxuICAgIFwiTWlyYWdlIDIwMDAtNVwiLFxyXG4gICAgXCJGLTE1Q1wiLFxyXG4gICAgXCJGLTVFXCIsXHJcbiAgICBcIkYtMTZDIGJsLjUyZFwiLFxyXG5dXHJcblxyXG51bml0VHlwZXMuYWlyLkNBUyA9IFtcclxuICAgIFwiVG9ybmFkbyBJRFNcIixcclxuICAgIFwiRi00RVwiLFxyXG4gICAgXCJGL0EtMThDXCIsXHJcbiAgICBcIk1pRy0yN0tcIixcclxuICAgIFwiQS0xMENcIixcclxuICAgIFwiU3UtMjVcIixcclxuICAgIFwiU3UtMzRcIixcclxuICAgIFwiU3UtMTdNNFwiLFxyXG4gICAgXCJGLTE1RVwiLFxyXG5dXHJcblxyXG51bml0VHlwZXMuYWlyLnN0cmlrZSA9IFtcclxuICAgIFwiVHUtMjJNM1wiLFxyXG4gICAgXCJCLTUySFwiLFxyXG4gICAgXCJGLTExMUZcIixcclxuICAgIFwiVHUtOTVNU1wiLFxyXG4gICAgXCJTdS0yNE1cIixcclxuICAgIFwiVHUtMTYwXCIsXHJcbiAgICBcIkYtMTE3QVwiLFxyXG4gICAgXCJCLTFCXCIsXHJcbiAgICBcIlR1LTE0MlwiLFxyXG5dXHJcblxyXG51bml0VHlwZXMuYWlyLnRhbmsgPSBbXHJcbiAgICBcIlMtM0IgVGFua2VyXCIsXHJcbiAgICBcIktDLTEzNVwiLFxyXG4gICAgXCJJTC03OE1cIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci5hd2FjcyA9IFtcclxuICAgIFwiQS01MFwiLFxyXG4gICAgXCJFLTNBXCIsXHJcbiAgICBcIkUtMkRcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci5kcm9uZSA9IFtcclxuICAgIFwiTVEtMUEgUHJlZGF0b3JcIixcclxuICAgIFwiTVEtOSBSZWFwZXJcIixcclxuXVxyXG5cclxudW5pdFR5cGVzLmFpci50cmFuc3BvcnQgPSBbXHJcbiAgICBcIkMtMTMwXCIsXHJcbiAgICBcIkFuLTI2QlwiLFxyXG4gICAgXCJBbi0zME1cIixcclxuICAgIFwiQy0xN0FcIixcclxuICAgIFwiSUwtNzZNRFwiLFxyXG5dIiwiaW1wb3J0ICogYXMgTCBmcm9tICdsZWFmbGV0J1xyXG5pbXBvcnQgeyBTeW1ib2wgfSBmcm9tICdtaWxzeW1ib2wnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1hcmtlck9wdGlvbnMgXHJcbntcclxuICAgIHVuaXROYW1lOiAgICAgICBzdHJpbmdcclxuICAgIG5hbWU6ICAgICAgICAgICBzdHJpbmdcclxuICAgIGh1bWFuOiAgICAgICAgICBib29sZWFuXHJcbiAgICBjb2FsaXRpb25JRDogICAgbnVtYmVyXHJcbiAgICB0eXBlOiAgICAgICAgICAgYW55XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWFya2VyRGF0YVxyXG57XHJcbiAgICBoZWFkaW5nOiAgICAgICAgbnVtYmVyXHJcbiAgICBzcGVlZDogICAgICAgICAgbnVtYmVyXHJcbiAgICBhbHRpdHVkZTogICAgICAgbnVtYmVyXHJcbiAgICBhbGl2ZTogICAgICAgICAgYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVW5pdE1hcmtlciBleHRlbmRzIEwuTWFya2VyXHJcbntcclxuICAgICN1bml0TmFtZTogICAgICBzdHJpbmdcclxuICAgICNuYW1lOiAgICAgICAgICBzdHJpbmdcclxuICAgICNodW1hbjogICAgICAgICBib29sZWFuXHJcbiAgICAjY29hbGl0aW9uSUQ6ICAgbnVtYmVyXHJcbiAgICAjYWxpdmU6ICAgICAgICAgYm9vbGVhblxyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgc3VwZXIobmV3IEwuTGF0TG5nKDAsIDApLCB7cmlzZU9uSG92ZXI6IHRydWV9KTtcclxuICAgICAgICB0aGlzLiN1bml0TmFtZSA9IG9wdGlvbnMudW5pdE5hbWVcclxuICAgICAgICB0aGlzLiNuYW1lID0gb3B0aW9ucy5uYW1lXHJcbiAgICAgICAgdGhpcy4jaHVtYW4gPSBvcHRpb25zLmh1bWFuXHJcbiAgICAgICAgdGhpcy4jY29hbGl0aW9uSUQgPSBvcHRpb25zLmNvYWxpdGlvbklEXHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy4jYWxpdmUgPSB0cnVlO1xyXG5cclxuICAgICAgICB2YXIgc3ltYm9sID0gbmV3IFN5bWJvbCh0aGlzLiNjb21wdXRlTWFya2VyQ29kZShvcHRpb25zKSwge3NpemU6IDEwMH0pO1xyXG4gICAgICAgIHZhciBpbWcgICAgPSBzeW1ib2wuYXNDYW52YXMoKS50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xyXG5cclxuICAgICAgICB2YXIgaWNvbiA9IG5ldyBMLkRpdkljb24oe1xyXG4gICAgICAgICAgICBodG1sOiBgPHRhYmxlIGNsYXNzPVwidW5pdC1tYXJrZXItY29udGFpbmVyXCIgaWQ9XCJjb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bml0LW1hcmtlci1pY29uXCIgaWQ9XCJpY29uXCI+PGltZyBzcmM9XCIke2ltZ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1bml0LW1hcmtlci11bml0TmFtZVwiIGlkPVwidW5pdE5hbWVcIj4ke3RoaXMuI3VuaXROYW1lfTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVuaXQtbWFya2VyLWFsdGl0dWRlXCIgaWQ9XCJhbHRpdHVkZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVuaXQtbWFya2VyLXNwZWVkXCIgaWQ9XCJzcGVlZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVuaXQtbWFya2VyLW5hbWVcIiBpZD1cIm5hbWVcIj4ke3RoaXMuI25hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+YCwgXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3VuaXQtbWFya2VyJ30pO1xyXG4gICAgICAgIHRoaXMuc2V0SWNvbihpY29uKTsgICBcclxuICAgIH1cclxuXHJcbiAgICBvbkFkZChtYXA6IEwuTWFwKTogdGhpcyBcclxuICAgIHtcclxuICAgICAgICBzdXBlci5vbkFkZChtYXApO1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuZ2V0RWxlbWVudCgpO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24oZTogYW55KSB7IGUudGFyZ2V0Py5zZXRIb3ZlcmVkKHRydWUpO30pO1xyXG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbihlOiBhbnkpIHsgZS50YXJnZXQ/LnNldEhvdmVyZWQoZmFsc2UpO30pO1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZHJhdyhkYXRhOiBNYXJrZXJEYXRhKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KCk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBuYW1lRGl2ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNuYW1lXCIpO1xyXG4gICAgICAgICAgICB2YXIgdW5pdE5hbWVEaXYgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3VuaXROYW1lXCIpO1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyID0gPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNjb250YWluZXJcIik7XHJcbiAgICAgICAgICAgIHZhciBpY29uID0gPEhUTUxFbGVtZW50PmVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNpY29uXCIpO1xyXG4gICAgICAgICAgICB2YXIgYWx0aXR1ZGVEaXYgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI2FsdGl0dWRlXCIpO1xyXG4gICAgICAgICAgICB2YXIgc3BlZWREaXYgPSA8SFRNTEVsZW1lbnQ+ZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NwZWVkXCIpO1xyXG5cclxuICAgICAgICAgICAgbmFtZURpdi5zdHlsZS5sZWZ0ID0gKC0obmFtZURpdi5vZmZzZXRXaWR0aCAtIGNvbnRhaW5lci5vZmZzZXRXaWR0aCkgLyAyKSArIFwicHhcIjtcclxuICAgICAgICAgICAgdW5pdE5hbWVEaXYuc3R5bGUubGVmdCA9ICgtKHVuaXROYW1lRGl2Lm9mZnNldFdpZHRoIC0gY29udGFpbmVyLm9mZnNldFdpZHRoKSAvIDIpICsgXCJweFwiO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWNvbi5zdHlsZS50cmFuc2Zvcm0gPSBcInJvdGF0ZShcIiArIGRhdGEuaGVhZGluZyArIFwicmFkKVwiO1xyXG4gICAgICAgICAgICBhbHRpdHVkZURpdi5pbm5lckhUTUwgPSBTdHJpbmcoTWF0aC5yb3VuZChkYXRhLmFsdGl0dWRlIC8gMC4zMDQ4IC8gMTAwKSAvIDEwKTtcclxuICAgICAgICAgICAgc3BlZWREaXYuaW5uZXJIVE1MID0gU3RyaW5nKE1hdGgucm91bmQoZGF0YS5zcGVlZCAqIDEuOTQzODQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoXCIjaWNvblwiKT8uY2xhc3NMaXN0LnJlbW92ZShcInVuaXQtbWFya2VyLWhvdmVyZWRcIik7XHJcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoXCIjaWNvblwiKT8uY2xhc3NMaXN0LnRvZ2dsZShcInVuaXQtbWFya2VyLXNlbGVjdGVkXCIsIHNlbGVjdGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRIb3ZlcmVkKGhvdmVyZWQ6IGJvb2xlYW4pXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoXCIjaWNvblwiKT8uY2xhc3NMaXN0LnRvZ2dsZShcInVuaXQtbWFya2VyLWhvdmVyZWRcIiwgaG92ZXJlZCAmJiB0aGlzLiNhbGl2ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgI2NvbXB1dGVNYXJrZXJDb2RlKG9wdGlvbnM6IE1hcmtlck9wdGlvbnMpXHJcbiAgICB7XHJcbiAgICAgICAgdmFyIGlkZW50aXR5ID0gXCIwMFwiO1xyXG4gICAgICAgIHZhciBzZXQgPSBcIjAwXCI7XHJcbiAgICAgICAgdmFyIGVudGl0eSA9IFwiMDBcIjtcclxuICAgICAgICB2YXIgZW50aXR5VHlwZSA9IFwiMDBcIjtcclxuICAgICAgICB2YXIgZW50aXR5U3VidHlwZSA9IFwiMDBcIjtcclxuXHJcbiAgICAgICAgLyogSWRlbnRpdHkgKi9cclxuICAgICAgICBpZiAob3B0aW9ucy5jb2FsaXRpb25JRCA9PSAxKVxyXG4gICAgICAgICAgICBpZGVudGl0eSA9IFwiMDZcIiAvKiBIb3N0aWxlICovXHJcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5jb2FsaXRpb25JRCA9PSAyKVxyXG4gICAgICAgICAgICBpZGVudGl0eSA9IFwiMDNcIiAvKiBGcmllbmRseSAqL1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaWRlbnRpdHkgPSBcIjA0XCIgLyogTmV1dHJhbCAqL1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy50eXBlLmxldmVsMSA9PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgc2V0ID0gXCIwMVwiXHJcbiAgICAgICAgICAgIGVudGl0eSA9IFwiMTFcIlxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlLmxldmVsMiA9PSAxKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5VHlwZSA9IFwiMDFcIlxyXG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLnR5cGUubGV2ZWwyID09IDEpXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlUeXBlID0gXCIwMlwiXHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSAxKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5U3VidHlwZSA9IFwiMDRcIjtcclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSAyKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5U3VidHlwZSA9IFwiMDVcIjtcclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSAzKVxyXG4gICAgICAgICAgICAgICAgZW50aXR5U3VidHlwZSA9IFwiMDRcIjtcclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSA0KVxyXG4gICAgICAgICAgICAgICAgZW50aXR5U3VidHlwZSA9IFwiMDJcIjtcclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSA1KVxyXG4gICAgICAgICAgICAgICAgZW50aXR5U3VidHlwZSA9IFwiMDBcIjtcclxuICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMyA9PSA2KVxyXG4gICAgICAgICAgICAgICAgZW50aXR5U3VidHlwZSA9IFwiMDBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy50eXBlLmxldmVsMSA9PSAyKVxyXG4gICAgICAgICAgICBzZXQgPSBcIjEwXCJcclxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLnR5cGUubGV2ZWwxID09IDMpXHJcbiAgICAgICAgICAgIHNldCA9IFwiMzBcIlxyXG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMudHlwZS5sZXZlbDEgPT0gMilcclxuICAgICAgICAgICAgc2V0ID0gXCIwMlwiXHJcbiAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIGAxMCR7aWRlbnRpdHl9JHtzZXR9MDAwMCR7ZW50aXR5fSR7ZW50aXR5VHlwZX0ke2VudGl0eVN1YnR5cGV9MDAwMGBcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBnZXRNYXAsIGdldFVuaXRJbmZvUGFuZWwgfSBmcm9tIFwiLi5cIjtcclxuaW1wb3J0IHsgVW5pdCwgR3JvdW5kVW5pdCB9IGZyb20gXCIuL3VuaXRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBVbml0c01hbmFnZXJcclxue1xyXG4gICAgI3VuaXRzOiB7IFtJRDogbnVtYmVyXTogVW5pdH07XHJcbiAgICAjY29waWVkVW5pdHM6IFVuaXRbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy4jdW5pdHMgPSB7fTtcclxuICAgICAgICB0aGlzLiNjb3BpZWRVbml0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVuaXQoSUQ6IG51bWJlciwgZGF0YTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIC8qIFRoZSBuYW1lIG9mIHRoZSB1bml0IGNhdGVnb3J5IGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgKi9cclxuICAgICAgICB2YXIgY29uc3RydWN0b3IgPSBVbml0LmdldENvbnN0cnVjdG9yKGRhdGEuY2F0ZWdvcnkpOyAgICAgICAgXHJcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yICE9IHVuZGVmaW5lZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdW5pdE5hbWU6IGRhdGEudW5pdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkYXRhLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBodW1hbjogZGF0YS5odW1hbixcclxuICAgICAgICAgICAgICAgIGNvYWxpdGlvbklEOiBkYXRhLmNvYWxpdGlvbklELFxyXG4gICAgICAgICAgICAgICAgdHlwZTogZGF0YS50eXBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy4jdW5pdHNbSURdID0gbmV3IGNvbnN0cnVjdG9yKElELCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VW5pdEJ5SUQoSUQ6IG51bWJlcilcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4jdW5pdHNbSURdO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVVuaXQoSUQ6IG51bWJlcilcclxuICAgIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZGVzZWxlY3RBbGxVbml0cygpXHJcbiAgICB7XHJcbiAgICAgICAgZm9yIChsZXQgSUQgaW4gdGhpcy4jdW5pdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLiN1bml0c1tJRF0uc2V0U2VsZWN0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoZGF0YTogYW55KVxyXG4gICAge1xyXG4gICAgICAgIGZvciAobGV0IElEIGluIGRhdGFbXCJ1bml0c1wiXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIC8qIENyZWF0ZSB0aGUgdW5pdCBpZiBtaXNzaW5nIGZyb20gdGhlIGxvY2FsIGFycmF5LCB0aGVuIHVwZGF0ZSB0aGUgZGF0YS4gRHJhd2luZyBpcyBoYW5kbGVkIGJ5IGxlYWZsZXQuICovXHJcbiAgICAgICAgICAgIGlmICghKElEIGluIHRoaXMuI3VuaXRzKSkgXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVW5pdChwYXJzZUludChJRCksIGRhdGFbXCJ1bml0c1wiXVtJRF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuI3VuaXRzW3BhcnNlSW50KElEKV0udXBkYXRlKGRhdGFbXCJ1bml0c1wiXVtJRF0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpLmxlbmd0aCA9PSAxKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZ2V0VW5pdEluZm9QYW5lbCgpLnNob3coKTtcclxuICAgICAgICAgICAgZ2V0VW5pdEluZm9QYW5lbCgpLnVwZGF0ZSh0aGlzLmdldFNlbGVjdGVkVW5pdHMoKVswXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdldFVuaXRJbmZvUGFuZWwoKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBvblVuaXRTZWxlY3Rpb24oKVxyXG4gICAge1xyXG4gICAgICAgIGlmICh0aGlzLmdldFNlbGVjdGVkVW5pdHMoKS5sZW5ndGggPiAwKSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnNldFN0YXRlKFwiTU9WRV9VTklUXCIpO1xyXG4gICAgICAgICAgICAvL3VuaXRDb250cm9sUGFuZWwuc2V0RW5hYmxlZCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGdldE1hcCgpLnNldFN0YXRlKFwiSURMRVwiKTtcclxuICAgICAgICAgICAgLy91bml0Q29udHJvbFBhbmVsLnNldEVuYWJsZWQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZWxlY3RGcm9tQm91bmRzKGJvdW5kcylcclxuICAgIC8vIHtcclxuICAgIC8vICAgICB0aGlzLmRlc2VsZWN0QWxsVW5pdHMoKTtcclxuICAgIC8vICAgICBmb3IgKGxldCBJRCBpbiB0aGlzLiN1bml0cylcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIHZhciBsYXRsbmcgPSBuZXcgTGF0TG5nKHRoaXMuI3VuaXRzW0lEXS5sYXRpdHVkZSwgdGhpcy4jdW5pdHNbSURdLmxvbmdpdHVkZSk7XHJcbiAgICAvLyAgICAgICAgIGlmIChib3VuZHMuY29udGFpbnMobGF0bG5nKSlcclxuICAgIC8vICAgICAgICAge1xyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy4jdW5pdHNbSURdLnNldFNlbGVjdGVkKHRydWUpO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGdldFNlbGVjdGVkVW5pdHMoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFVuaXRzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgSUQgaW4gdGhpcy4jdW5pdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBpZiAodGhpcy4jdW5pdHNbSURdLmdldFNlbGVjdGVkKCkpIFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFVuaXRzLnB1c2godGhpcy4jdW5pdHNbSURdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRVbml0cztcclxuICAgIH1cclxuXHJcbiAgICBhZGREZXN0aW5hdGlvbihsYXRsbmc6IEwuTGF0TG5nKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29tbWFuZGVkVW5pdCA9IHNlbGVjdGVkVW5pdHNbaWR4XTtcclxuICAgICAgICAgICAgLy9pZiAoc2VsZWN0ZWRVbml0c1tpZHhdLndpbmdtYW4pXHJcbiAgICAgICAgICAgIC8ve1xyXG4gICAgICAgICAgICAvLyAgICBjb21tYW5kZWRVbml0ID0gdGhpcy5nZXRMZWFkZXIoc2VsZWN0ZWRVbml0c1tpZHhdLklEKTtcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIGNvbW1hbmRlZFVuaXQuYWRkRGVzdGluYXRpb24obGF0bG5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJEZXN0aW5hdGlvbnMoKVxyXG4gICAge1xyXG4gICAgICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB2YXIgY29tbWFuZGVkVW5pdCA9IHNlbGVjdGVkVW5pdHNbaWR4XTtcclxuICAgICAgICAgICAgLy9pZiAoc2VsZWN0ZWRVbml0c1tpZHhdLndpbmdtYW4pXHJcbiAgICAgICAgICAgIC8ve1xyXG4gICAgICAgICAgICAvLyAgICBjb21tYW5kZWRVbml0ID0gdGhpcy5nZXRMZWFkZXIoc2VsZWN0ZWRVbml0c1tpZHhdLklEKTtcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgICAgIGNvbW1hbmRlZFVuaXQuY2xlYXJEZXN0aW5hdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VsZWN0ZWRVbml0c01vdmUoKVxyXG4gICAgLy8ge1xyXG4gICAgICAgIFxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHNlbGVjdGVkVW5pdHNDaGFuZ2VTcGVlZChzcGVlZENoYW5nZSlcclxuICAgIC8vIHtcclxuICAgIC8vICAgICB2YXIgc2VsZWN0ZWRVbml0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpO1xyXG4gICAgLy8gICAgIGZvciAobGV0IGlkeCBpbiBzZWxlY3RlZFVuaXRzKVxyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgICAgc2VsZWN0ZWRVbml0c1tpZHhdLmNoYW5nZVNwZWVkKHNwZWVkQ2hhbmdlKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gc2VsZWN0ZWRVbml0c0NoYW5nZUFsdGl0dWRlKGFsdGl0dWRlQ2hhbmdlKVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaWR4IGluIHNlbGVjdGVkVW5pdHMpXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgICBzZWxlY3RlZFVuaXRzW2lkeF0uY2hhbmdlQWx0aXR1ZGUoYWx0aXR1ZGVDaGFuZ2UpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBoYW5kbGVLZXlFdmVudChlKVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgIGlmIChlLm9yaWdpbmFsRXZlbnQuY29kZSA9PT0gJ0tleUMnICYmIGUub3JpZ2luYWxFdmVudC5jdHJsS2V5KVxyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5jb3B5VW5pdHMoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgZWxzZSBpZiAoZS5vcmlnaW5hbEV2ZW50LmNvZGUgPT09ICdLZXlWJyAmJiBlLm9yaWdpbmFsRXZlbnQuY3RybEtleSlcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMucGFzdGVVbml0cygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBjb3B5VW5pdHMoKVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgIHRoaXMuI2NvcGllZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcGFzdGVVbml0cygpXHJcbiAgICAvLyB7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaWR4IGluIHRoaXMuI2NvcGllZFVuaXRzKVxyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgICAgdmFyIHVuaXQgPSB0aGlzLiNjb3BpZWRVbml0c1tpZHhdO1xyXG4gICAgLy8gICAgICAgICBjbG9uZVVuaXQodW5pdC5JRCk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIGF0dGFja1VuaXQoSUQ6IG51bWJlcilcclxuICAgIHtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRVbml0cyA9IHRoaXMuZ2V0U2VsZWN0ZWRVbml0cygpO1xyXG4gICAgICAgIGZvciAobGV0IGlkeCBpbiBzZWxlY3RlZFVuaXRzKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgLyogSWYgYSB1bml0IGlzIGEgd2luZ21hbiwgc2VuZCB0aGUgY29tbWFuZCB0byBpdHMgbGVhZGVyICovXHJcbiAgICAgICAgICAgIHZhciBjb21tYW5kZWRVbml0ID0gc2VsZWN0ZWRVbml0c1tpZHhdO1xyXG4gICAgICAgICAgICAvL2lmIChzZWxlY3RlZFVuaXRzW2lkeF0ud2luZ21hbilcclxuICAgICAgICAgICAgLy97XHJcbiAgICAgICAgICAgIC8vICAgIGNvbW1hbmRlZFVuaXQgPSB0aGlzLmdldExlYWRlcihzZWxlY3RlZFVuaXRzW2lkeF0uSUQpO1xyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICAgICAgY29tbWFuZGVkVW5pdC5hdHRhY2tVbml0KElEKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY3JlYXRlRm9ybWF0aW9uKElEKVxyXG4gICAgLy8ge1xyXG4gICAgLy8gICAgIHZhciBzZWxlY3RlZFVuaXRzID0gdGhpcy5nZXRTZWxlY3RlZFVuaXRzKCk7XHJcbiAgICAvLyAgICAgdmFyIHdpbmdtZW5JRHMgPSBbXTtcclxuICAgIC8vICAgICBmb3IgKGxldCBpZHggaW4gc2VsZWN0ZWRVbml0cylcclxuICAgIC8vICAgICB7XHJcbiAgICAvLyAgICAgICAgIGlmIChzZWxlY3RlZFVuaXRzW2lkeF0ud2luZ21hbilcclxuICAgIC8vICAgICAgICAge1xyXG4gICAgLy8gICAgICAgICAgICAgc2hvd01lc3NhZ2Uoc2VsZWN0ZWRVbml0c1tpZHhdLnVuaXROYW1lICsgXCIgaXMgYWxyZWFkeSBpbiBhIGZvcm1hdGlvbi5cIik7XHJcbiAgICAvLyAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRVbml0c1tpZHhdLmxlYWRlcilcclxuICAgIC8vICAgICAgICAge1xyXG4gICAgLy8gICAgICAgICAgICAgc2hvd01lc3NhZ2Uoc2VsZWN0ZWRVbml0c1tpZHhdLnVuaXROYW1lICsgXCIgaXMgYWxyZWFkeSBpbiBhIGZvcm1hdGlvbi5cIik7XHJcbiAgICAvLyAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgZWxzZVxyXG4gICAgLy8gICAgICAgICB7XHJcbiAgICAvLyAgICAgICAgICAgICAvKiBUT0RPXHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRVbml0c1tpZHhdLmNhdGVnb3J5ICE9PSB0aGlzLmdldFVuaXRCeUlEKElEKS5jYXRlZ29yeSlcclxuICAgIC8vICAgICAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICBzaG93TWVzc2FnZShcIkFsbCB1bml0cyBtdXN0IGJlIG9mIHRoZSBzYW1lIGNhdGVnb3J5IHRvIGNyZWF0ZSBhIGZvcm1hdGlvbi5cIik7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICAqL1xyXG4gICAgLy8gICAgICAgICAgICAgaWYgKHNlbGVjdGVkVW5pdHNbaWR4XS5JRCAhPSBJRClcclxuICAgIC8vICAgICAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgICAgICB3aW5nbWVuSURzLnB1c2goc2VsZWN0ZWRVbml0c1tpZHhdLklEKTtcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBpZiAod2luZ21lbklEcy5sZW5ndGggPiAwKVxyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5nZXRVbml0QnlJRChJRCkuc2V0TGVhZGVyKHdpbmdtZW5JRHMpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICBlbHNlXHJcbiAgICAvLyAgICAge1xyXG4gICAgLy8gICAgICAgICBzaG93TWVzc2FnZShcIkF0IGxlYXN0IDIgdW5pdHMgbXVzdCBiZSBzZWxlY3RlZCB0byBjcmVhdGUgYSBmb3JtYXRpb24uXCIpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXRMZWFkZXIoSUQpXHJcbiAgICAvLyB7XHJcbiAgICAvLyAgICAgZm9yIChsZXQgaWR4IGluIHRoaXMuI3VuaXRzKVxyXG4gICAgLy8gICAgIHtcclxuICAgIC8vICAgICAgICAgdmFyIHVuaXQgPSB0aGlzLiN1bml0c1tpZHhdO1xyXG4gICAgLy8gICAgICAgICBpZiAodW5pdC5sZWFkZXIpXHJcbiAgICAvLyAgICAgICAgIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmICh1bml0LndpbmdtZW4uaW5jbHVkZXModGhpcy5nZXRVbml0QnlJRChJRCkpKVxyXG4gICAgLy8gICAgICAgICAgICAge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiB1bml0O1xyXG4gICAgLy8gICAgICAgICAgICAgfVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIHNob3dNZXNzYWdlKFwiRXJyb3I6IG5vIGxlYWRlciBmb3VuZCBmb3IgdGhpcyB1bml0XCIpXHJcbiAgICAvLyB9XHJcbn0iXX0=
|