galho
Version:
galho is js library for create and manipulate dom elements without need compiling, configuration or VirtualDom
663 lines • 53.3 kB
JavaScript
import { emit, on } from "./event.js";
import { isA, isF, l } from "./util.js";
/**
* An Array with suport for events, binds, subgroups and tags
* @template T type of element this array store
* @template A type of element this array accept
*/
export class L extends Array {
put(start, ...values) {
if (this.parse)
for (let i = 0; i < values.length; i++) {
let t = this.parse(values[i], i + start);
if (t === undefined)
values.splice(i--, 1);
else
values[i] = t;
}
if (!values.length)
return;
let length = values.length, oldLength = this.length;
this.length += length;
//impurra todos items afrente do start para frente
for (let c = oldLength - 1; c >= start; c--)
this[c + length] = this[c];
for (let c = 0; c < length; c++) {
this[start + c] = values[c];
}
if (this.tags) {
for (let key in this.tags) {
let tag = this.tags[key];
if (tag.i >= start)
tag.i += length;
}
}
emit(this, 'push', values);
if (!this.nu)
emit(this, 'update', {
tp: 'push',
start: start,
items: values
});
return this;
}
removeAt(start, length = 1) {
if (length + start > this.length)
length = this.length - start;
if (length <= 0)
return;
var removed = Array(length);
for (let c = 0; c < length; c++)
removed[c] = this[start + c];
for (let c = start + length; c < this.length; c++)
this[c - length] = this[c];
this.length -= length;
for (let key in this.g)
this.g[key].remove(...Array.from(removed));
if (this.tags)
for (let key in this.tags) {
let tag = this.tags[key];
if (tag.i >= (start + length))
tag.i -= length;
else if (tag.i >= start) {
//o que estava antes
//if (tag.replace) {
// this._tags[key] = null;
// setTag(this,key, this[Math.min(tag.index, this.length - 1)], true);
//} else delete this._tags[key];
this.tag(key, tag.replace ?
this[Math.min(tag.i, this.length - 1)] :
null, tag.replace);
}
}
emit(this, 'pop', removed);
if (!this.nu)
emit(this, 'update', { tp: 'pop', start, items: removed });
return removed;
}
push(...values) {
this.put(this.length, ...values);
return this.length;
}
pop() {
if (this.length)
return this.removeAt(this.length - 1)[0];
}
shift() {
return this.removeAt(0)[0];
}
unshift(...values) {
this.put(0, ...values);
return this.length;
}
/**
* clear array and insert new elements
* @param values
*/
set(values) {
if (!this.length && !values?.length)
return;
this.nu = true;
let removed = this.removeAt(0, this.length);
if (values) {
if (this.sorts) {
for (let i = 0; i < this.sorts.length; i++) {
let sort = this.sorts[i], opt = { vars: {} };
values.sort((a, b) => {
opt.vars[0] = a;
opt.vars.b = b;
return sort.calc(opt);
});
}
}
this.put(0, ...values);
}
this.nu = false;
emit(this, 'update', { tp: 'set', items: this, removed });
return this;
}
has(id, fromIndex = 0) {
for (; fromIndex < this.length; fromIndex++) {
if (this[fromIndex][this.key] === id)
return true;
}
return false;
}
includes(searchElement, fromIndex) {
let k = this.key;
if (k) {
for (fromIndex = 0; fromIndex < this.length; fromIndex++) {
let j = this[fromIndex];
if (j === searchElement || j[k] === searchElement)
return true;
}
return false;
}
else
return super.includes(searchElement, fromIndex);
}
addGroup(key) {
// t.key = key;
let t = this.g[key] = new Group();
t.eh = {};
t.l = this;
return t;
}
/**
* get a group from id if it not exist create new
*/
group(key) {
return this.g[key] || this.addGroup(key);
}
on(event, callback, options) {
if (isF(event)) {
callback = event;
event = "update";
}
return on(this, event, callback, options);
}
find(arg1, arg2) {
return super.find(isF(arg1) ? arg1 : (v => v === arg1 || (v && v[this.key] == arg1)), arg2);
}
findIndex(arg1, arg2) {
return super.findIndex(isF(arg1) ? arg1 : (v => v === arg1 || v[this.key] == arg1), arg2);
}
sort(compareFn) {
//TODO make better algorithm
this.set(this.slice().sort(compareFn));
return this;
}
remove(...items) {
for (let item of items) {
let i = this.findIndex(item);
if (i >= 0)
this.removeAt(i);
}
return this;
}
place(item, newIndex) {
let oldIndex = this.findIndex(item);
let t = this[oldIndex];
this.removeAt(oldIndex);
this.put(newIndex, t);
emit(this, 'update');
return this;
}
tag(k, v, replace) {
let i = null, t = this.tags ||= {}, o = t[k], n;
switch (v) {
case undefined:
return o?.v;
case null:
if (!o)
return this;
delete t[k];
break;
default:
i = this.findIndex(v);
if (i == -1) {
console.warn({ message: "value is not in list", value: v });
return this;
}
if (o && i == o.i)
return this;
v = this[i];
n = { v, i, replace };
t[k] = n;
}
this.retag(k, o?.i);
return this;
}
/**reload tag */
retag(k, o) {
let t = this.tags[k];
emit(this, 'tag:' + k, t?.v);
emit(this, "update", { tp: "tag", tag: k, newI: t?.i, oldI: o });
}
ontag(key, callback) {
on(this, `tag:${key}`, callback);
return this;
//return on(l,<any>(), callback);
}
unbind(s) {
let b = this.binds;
if (b) {
let i = b.findIndex(b => b[0] == s);
if (i != -1)
b.splice(i, 1);
}
return this;
}
bind(s, opts = {}) {
let bond = isF(opts) ? { insert: opts } : opts;
let empty = (value) => {
if (bond.empty) {
let v = bond.empty.call(this, value);
if (v)
s.set(value);
}
}, insert = (items, start) => {
for (let i = 0; i < items.length; i++) {
let item = items[i], v = bond.insert ? bond.insert.call(this, item, start + i, s) : item;
if (v)
s.place(start + i, v);
}
}, remove = (items, start) => {
for (let i = 0; i < items.length; i++) {
if (bond.remove ? bond.remove.call(this, items[i], start + i, s) : true)
s.unplace(start + i);
}
}, fn = (opts) => {
switch (opts.tp) {
case 'push':
if (this.length == opts.items.length)
empty(false);
insert(opts.items, opts.start);
break;
case 'pop':
remove(opts.items, opts.start);
if (!this.length)
empty(true);
break;
case 'tag':
if (bond.tag) {
if (opts.oldI != null)
bond.tag.call(this, false, opts.oldI, s, opts.tag, this[opts.oldI]);
if (opts.newI != null)
bond.tag.call(this, true, opts.newI, s, opts.tag, this[opts.newI]);
}
break;
case 'set':
if (bond.clear === false)
remove(opts.removed, 0);
else if (bond.clear)
bond.clear(s);
else
s.set();
if (opts.items) {
if (!opts.removed)
empty(false);
insert(opts.items, 0);
}
else
empty(true);
break;
case 'reload':
if (bond.reload)
for (let i = 0; i < opts.items.length; i++) {
let item = opts.items[i];
let v = bond.reload.call(this, item, opts.start + i, s);
if (v)
s.child(opts.start + i).replace(v);
}
else {
remove(opts.items, opts.start);
insert(opts.items, opts.start);
}
}
};
this.on(fn);
if (bond.groups)
if (isF(bond.groups))
for (let g in this.g)
bind(this, s, g, bond.groups);
else
for (let g in bond.groups)
bind(this, s, g, bond.groups[g]);
(this.binds ||= []).push([s, fn]);
insert(this, 0);
return s;
}
reload(item) {
return this.reloadAt(this.findIndex(item));
}
reloadAt(start) {
return emit(this, "update", { tp: "reload", start, items: [this[start]] });
}
reloadAll() {
return emit(this, "update", { tp: "reload", start: 0, items: this.slice() });
}
/**events handlers*/
eh;
/**when true this List do not raise events */
slip;
tags;
sorts;
/**groups */
g;
/**no update */
nu;
key;
childKey;
parse;
binds;
}
export function copy(src, dest, fill = true, parse = v => v) {
if (fill)
dest.set(src.map(parse));
src.on(e => {
switch (e.tp) {
case 'push':
dest.put(e.start, ...e.items.map((v, i) => parse(v, e.start + i)));
break;
case 'pop':
dest.removeAt(e.start, e.items.length);
break;
case 'set':
dest.set(e.items.map(parse));
break;
case 'edit':
throw "not implemented";
}
});
}
export function tryPush(l, item) {
let k = item[l.key];
if (l.find(v => v[l.key] == k))
edit(l, { item: k, props: item });
else
l.push(item);
}
/**
* edit properties of an element of collection
* @param item
* @param prop
* @param value
*/
export function edit(l, item) {
let index = l.findIndex(item.item);
if (index !== -1) {
item.item = Object.assign(item.item = l[index], item.props);
emit(l, 'edit', [item]);
emit(l, 'update', null);
}
return l;
}
export function editItems(l, ...items) {
let a;
for (let item of items) {
let k = item[l.key], index = l.findIndex(v => v[l.key] == k);
if (index !== -1) {
l[index] = item;
a = true;
}
}
if (a) {
emit(l, 'edit', null);
emit(l, 'update', null);
}
return l;
}
export function extend(l, opts) {
if (!l || !l.eh)
l = orray(l, opts);
else if (opts) {
if (isF(opts))
opts = { parse: opts };
if (opts.g)
for (let g of opts.g)
if (!(g in l.g))
l.addGroup(g);
if (opts.sorts)
throw "not implemented";
if (opts.key) {
if (l.key && l.key != opts.key)
throw "inconpatible lists";
l.key = opts.key;
}
}
return l;
}
export function orray(array, opts) {
if (!opts && !isA(array)) {
opts = array;
array = null;
}
let l = new L();
l.g = {};
l.eh = {};
if (opts) {
if (isF(opts))
opts = { parse: opts };
l.key = opts.key;
l.childKey = opts.child;
l.sorts = opts.sorts;
l.parse = opts.parse || opts.converter;
if (opts.g)
for (let g of opts.g)
l.addGroup(g);
}
if (array)
l.put(0, ...array);
return l;
}
export default orray;
;
function gpush(g, items) {
let indices = [], start = g.length;
for (let i = 0; i < items.length; i++) {
let item = items[i], index = g.l.findIndex(item);
if (index != -1 && !g.includes(item = items[i] = g.l[index])) {
indices[i] = index;
g[start + i] = item;
}
else
items.splice(i--, 1);
}
if (l(items)) {
// g.length += items.length;
emit(g, 'push', items);
if (!g.nu)
emit(g, "set", items, indices);
}
return indices;
}
export class Group extends Array {
eh = {};
slip;
/**no update */
nu;
l;
push(...items) {
gpush(this, items);
return this.length;
}
toggle(item) {
this.includes(item) ? this.remove(item) : gpush(this, [item]);
}
pushRange(start, end) {
return gpush(this, this.l.slice(start, end));
}
pushAll() {
return gpush(this, this.l.slice());
}
remove(...items) {
let indexes = Array(items.length);
for (let i = 0; i < items.length; i++) {
let item = items[i], indexInList = this.l.indexOf(item), index = this.indexOf(item);
if (index != -1) {
indexes[i] = indexInList;
for (let i = index; i < this.length - 1; i++)
this[i] = this[i + 1];
delete this[this.length - 1];
}
else
items.splice(i--, 1);
}
this.length -= items.length;
if (items.length) {
emit(this, 'remove', items);
if (!this.nu)
emit(this, 'set', null, null, items, indexes);
}
return indexes;
}
removeAt(index, count = 0) {
// for (let i = index; i < this.length - 1; i++)
// this[i] = this[i + 1];
let item = this[index], items = [item];
this.splice(index, count);
// delete this[--this.length];
emit(this, 'remove', items);
if (!this.nu)
emit(this, 'set', items, [this.indexOf(item)]);
}
clear() {
return this.remove(...this);
}
removeRange(from, to) {
return this.remove(...this.l.slice(from, to));
}
set(add) {
if (!l(add) && !l(this))
return;
this.nu = true;
let r = this.slice(), remvId = this.clear(), addId = gpush(this, add);
this.nu = false;
emit(this, 'set', add, addId, r, remvId);
return this;
}
invert() {
this.set(this.l.filter(i => !this.includes(i)));
return this;
}
setRange(start, end) {
this.set(this.l.slice(start, end));
}
indexes() {
for (var r = Array(this.length), i = 0; i < this.length; i++)
r[i] = this.l.indexOf(this[i]);
return r;
}
keyField() {
for (var key = this.l.key, r = [], i = 0; i < this.length; i++)
r.push(this[i][key]);
return r;
}
/**on update */
on(callback) {
return on(this, "set", callback);
}
reload(v, i = this.l.indexOf(v)) {
return emit(this, "set", [v], null, [i]);
}
static get [Symbol.species]() { return Array; }
}
export function bind(l, s, groupKey, bond) {
let g = l.g[groupKey];
if (g) {
let call = (items, indexes, state) => {
for (let i = 0; i < items.length; i++) {
let index = indexes[i];
bond.call(l, state, index, s, groupKey, items[i]);
}
};
g.on((add, addId, rmv, rmvId) => {
rmv && call(rmv, rmvId, false);
add && call(add, addId, true);
});
}
else
console.error(`group '${groupKey}' not found`);
return s;
}
//#endregion
export var range;
(function (range) {
const clamp = (value, min, max) => value < min ? min : value >= max ? max - 1 : value;
const tg = (l, k) => (l.tags ||= {})[k];
function pivot(l, tag) {
let t = tg(l, tag);
return t ? t.i : 0;
}
range.pivot = pivot;
function add(l, key, value, tp) {
let g = l.g[key];
let tag = tg(l, key), o = tag ? tag.i : -1, n = l.findIndex(value);
if (o != n) {
//l.tag(group, value);
l.tag(key, value);
if (g)
switch (tp) {
case "set":
g.set([l[n]]);
break;
case "add":
g.push(l[n]);
break;
case "range":
if (o > n) {
let t = o;
o = n;
n = t;
}
g.setRange(o, n);
break;
case "addR":
if (o > n) {
let t = o;
o = n;
n = t;
}
g.pushRange(o, n);
}
}
return l;
}
range.add = add;
/**select all elements */
function addAll(l, tag) {
if (l.length) {
if (!l.tag(tag))
l.tag(tag, l[0]);
l.g[tag] && l.g[tag].pushAll();
}
return l;
}
range.addAll = addAll;
/** remove focus */
function clear(l, tag) {
l.tag(tag, null);
l.g[tag] && l.g[tag].clear();
return l;
}
range.clear = clear;
function onchange(l, tag, listener) {
let g = l.g[tag];
g ? g.on(() => {
let t = tg(l, tag);
listener.call(l, t && t.v, g);
}) : l.ontag(tag, listener);
return l;
}
range.onchange = onchange;
/**select type */
range.tp = (control, shift) => control ?
shift ?
"addR" :
"add" :
shift ?
"range" :
"set";
function move(l, tag, distance, tp) {
return add(l, tag, l[clamp(pivot(l, tag) + distance, 0, l.length)], tp);
}
range.move = move;
function movePivot(l, tag, distance, revert) {
let ll = l.length;
if (ll) {
let i = pivot(l, tag) + distance;
l.tag(tag, l[revert ?
i < 0 ? ll - 1 : i >= ll ? 0 : i :
clamp(i, 0, l.length)]);
}
return l;
}
range.movePivot = movePivot;
function list(l, key) {
let tag, g = l.g[key];
return g ? g.slice() : ((tag = tg(l, key)) ? [tag.v] : []);
}
range.list = list;
})(range || (range = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxXQUFXLENBQUM7QUF5RXhDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sQ0FBMkMsU0FBUSxLQUFRO0lBQ3RFLEdBQUcsQ0FBQyxLQUFhLEVBQUUsR0FBRyxNQUFvQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLEtBQUssU0FBUztvQkFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzs7b0JBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFNLENBQUM7YUFDdEI7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDaEIsT0FBTztRQUNULElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUM7UUFDdEIsa0RBQWtEO1FBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBTSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2IsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN6QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSztvQkFDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7YUFDbkI7U0FDRjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNuQixFQUFFLEVBQUUsTUFBTTtnQkFDVixLQUFLLEVBQUUsS0FBSztnQkFDWixLQUFLLEVBQUUsTUFBTTthQUNkLENBQUMsQ0FBQztRQUNMLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFhLEVBQUUsTUFBTSxHQUFHLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLE1BQU0sSUFBSSxDQUFDO1lBQ2IsT0FBTztRQUNULElBQUksT0FBTyxHQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDO1FBQ3RCLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUNYLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDekIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztvQkFDM0IsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7cUJBQ2IsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRTtvQkFDdkIsb0JBQW9CO29CQUNwQixvQkFBb0I7b0JBQ3BCLDJCQUEyQjtvQkFDM0IsdUVBQXVFO29CQUN2RSxnQ0FBZ0M7b0JBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDeEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdEI7YUFDRjtRQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELElBQUksQ0FBQyxHQUFHLE1BQW9CO1FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBQ0QsR0FBRztRQUNELElBQUksSUFBSSxDQUFDLE1BQU07WUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsTUFBb0I7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNEOzs7T0FHRztJQUNILEdBQUcsQ0FBQyxNQUFxQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1lBQ2pDLE9BQU87UUFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFnQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztvQkFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxHQUFHLENBQUMsRUFBUSxFQUFFLFNBQVMsR0FBRyxDQUFDO1FBQ3pCLE9BQU8sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxRQUFRLENBQUMsYUFBdUIsRUFBRSxTQUFrQjtRQUNsRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFO1lBQ0wsS0FBSyxTQUFTLEdBQUcsQ0FBQyxFQUFFLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxLQUFLLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYTtvQkFDL0MsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7O1lBQU0sT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUNELFFBQVEsQ0FBQyxHQUFRO1FBQ2YsZUFBZTtRQUNmLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ1gsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxLQUFLLENBQUMsR0FBUTtRQUNaLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFJRCxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVMsRUFBRSxPQUFpQjtRQUNwQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDakIsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUNsQjtRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFLRCxJQUFJLENBQUMsSUFBbUQsRUFBRSxJQUFVO1FBQ2xFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBUSxDQUFDO0lBQzdHLENBQUM7SUFHRCxTQUFTLENBQUMsSUFBZ0QsRUFBRSxJQUFVO1FBQ3BFLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMzRixDQUFDO0lBQ0QsSUFBSSxDQUFDLFNBQWtDO1FBQ3JDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLENBQUMsR0FBRyxLQUFnQjtRQUN4QixLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELEtBQUssQ0FBQyxJQUFXLEVBQUUsUUFBZ0I7UUFDakMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU9ELEdBQUcsQ0FBQyxDQUFNLEVBQUUsQ0FBUyxFQUFFLE9BQWM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQVMsQ0FBQztRQUN4RCxRQUFRLENBQUMsRUFBRTtZQUNULEtBQUssU0FBUztnQkFDWixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDZCxLQUFLLElBQUk7Z0JBQ1AsSUFBSSxDQUFDLENBQUM7b0JBQ0osT0FBTyxJQUFJLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1osTUFBTTtZQUNSO2dCQUNFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtvQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM1RCxPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2YsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsZ0JBQWdCO0lBQ2hCLEtBQUssQ0FBQyxDQUFNLEVBQUUsQ0FBTztRQUNuQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELEtBQUssQ0FBQyxHQUFRLEVBQUUsUUFBa0Q7UUFDaEUsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO1FBQ1osaUNBQWlDO0lBQ25DLENBQUM7SUFDRCxNQUFNLENBQUMsQ0FBSTtRQUNULElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEVBQUU7WUFDTCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDVCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNsQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUlELElBQUksQ0FBbUIsQ0FBSyxFQUFFLE9BQWdELEVBQUU7UUFDOUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9DLElBQUksS0FBSyxHQUFHLENBQUMsS0FBVyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNkLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDO29CQUNILENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEI7UUFDSCxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsS0FBVSxFQUFFLEtBQVUsRUFBRSxFQUFFO1lBQ3JDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6RixJQUFJLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1FBQ0gsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEtBQVUsRUFBRSxLQUFVLEVBQUUsRUFBRTtZQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3JFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3hCO1FBQ0gsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRTtZQUMvQixRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ2YsS0FBSyxNQUFNO29CQUNULElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07d0JBQ2xDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9CLE1BQU07Z0JBQ1IsS0FBSyxLQUFLO29CQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO3dCQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCxNQUFNO2dCQUNSLEtBQUssS0FBSztvQkFDUixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQ1osSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUk7NEJBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJOzRCQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUN0RTtvQkFDRCxNQUFNO2dCQUNSLEtBQUssS0FBSztvQkFDUixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSzt3QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ3JCLElBQUksSUFBSSxDQUFDLEtBQUs7d0JBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7O3dCQUVkLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDVixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPOzRCQUNmLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDdkI7O3dCQUVDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLElBQUksQ0FBQyxNQUFNO3dCQUNiLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDMUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDekIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDO2dDQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQzNDO3lCQUNFO3dCQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUNoQzthQUVKO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLE1BQU07WUFDYixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNsQixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztnQkFFaEMsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTTtvQkFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2QyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBVztRQUNoQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFHRCxRQUFRLENBQUMsS0FBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFrQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBQ0QsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQWtCLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFDRCxvQkFBb0I7SUFDcEIsRUFBRSxDQUVBO0lBQ0YsNkNBQTZDO0lBQzdDLElBQUksQ0FBUTtJQUNaLElBQUksQ0FBZTtJQUNuQixLQUFLLENBQVM7SUFDZCxZQUFZO0lBQ1osQ0FBQyxDQUFtQjtJQUNwQixlQUFlO0lBQ2YsRUFBRSxDQUFRO0lBQ1YsR0FBRyxDQUFLO0lBQ1IsUUFBUSxDQUFPO0lBQ2YsS0FBSyxDQUFlO0lBQ3BCLEtBQUssQ0FBMEI7Q0FDaEM7QUFNRCxNQUFNLFVBQVUsSUFBSSxDQUFjLEdBQWMsRUFBRSxJQUFhLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxRQUF3QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVE7SUFDakksSUFBSSxJQUFJO1FBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNULFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNaLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULE1BQU0saUJBQWlCLENBQUM7U0FDM0I7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFDRCxNQUFNLFVBQVUsT0FBTyxDQUFXLENBQVUsRUFBRSxJQUFPO0lBQ25ELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFRLENBQUM7SUFDM0IsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7O1FBRWxDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUNEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBVyxDQUFVLEVBQUUsSUFBcUI7SUFDOUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDekI7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFDRCxNQUFNLFVBQVUsU0FBUyxDQUFXLENBQVUsRUFBRSxHQUFHLEtBQVU7SUFDM0QsSUFBSSxDQUFDLENBQUM7SUFDTixLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtRQUN0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDVjtLQUNGO0lBQ0QsSUFBSSxDQUFDLEVBQUU7UUFDTCxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN6QjtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQTJDRCxNQUFNLFVBQVUsTUFBTSxDQUFpQixDQUFlLEVBQUUsSUFBa0I7SUFDeEUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFFLENBQU8sQ0FBQyxFQUFFO1FBQ3BCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2hCLElBQUksSUFBSSxFQUFFO1FBQ2IsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1gsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLENBQUM7WUFDUixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBTyxDQUFDLENBQUMsQ0FBQztvQkFDbkIsQ0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ1osTUFBTSxpQkFBaUIsQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFLLENBQU8sQ0FBQyxHQUFHLElBQUssQ0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRztnQkFDMUMsTUFBTSxvQkFBb0IsQ0FBQztZQUM1QixDQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFVLENBQUM7U0FDaEM7S0FDRjtJQUNELE9BQU8sQ0FBWSxDQUFDO0FBQ3RCLENBQUM7QUFLRCxNQUFNLFVBQVUsS0FBSyxDQUFpQixLQUE0QyxFQUFFLElBQWdDO0lBQ2xILElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDeEIsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNiLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDZDtJQUNELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDVCxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNWLElBQUksSUFBSSxFQUFFO1FBQ1IsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1gsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQVUsQ0FBQztRQUN4QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDeEIsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDUixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBSSxLQUFlLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFDRCxlQUFlLEtBQUssQ0FBQztBQVFwQixDQUFDO0FBRUYsU0FBUyxLQUFLLENBQXVCLENBQWMsRUFBRSxLQUFnQjtJQUNuRSxJQUFJLE9BQU8sR0FBVSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDNUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNuQixDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNyQjs7WUFFQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDWiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUNELE1BQU0sT0FBTyxLQUE0QixTQUFRLEtBQVE7SUFDdkQsRUFBRSxHQUFxRixFQUFFLENBQUM7SUFDMUYsSUFBSSxDQUFXO0lBQ2YsZUFBZTtJQUNmLEVBQUUsQ0FBVztJQUNiLENBQUMsQ0FBWTtJQUNiLElBQUksQ0FBQyxHQUFHLEtBQWdCO1FBQ3RCLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBTztRQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxTQUFTLENBQUMsS0FBVSxFQUFFLEdBQVE7UUFDNUIsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFDRCxPQUFPO1FBQ0wsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsS0FBVTtRQUNsQixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEYsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztnQkFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDOUI7O2dCQUVDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDeEI7UUFDRCxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxRQUFRLENBQUMsS0FBYSxFQUFFLFFBQWdCLENBQUM7UUFDdkMsZ0RBQWdEO1FBQ2hELDJCQUEyQjtRQUMzQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUIsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFZLEVBQUUsRUFBVztRQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQWM7UUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDckIsT0FBTztRQUNULElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTTtRQUNKLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxPQUFPO1FBQ0wsS0FBSyxJQUFJLENBQUMsR0FBYSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqQyxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxRQUFRO1FBQ04sS0FBSyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1lBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBQ0QsZUFBZTtJQUNmLEVBQUUsQ0FBQyxRQUE0RDtRQUM3RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFDRCxNQUFNLENBQUMsQ0FBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUNELE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDaEQ7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUE2QixDQUFVLEVBQUUsQ0FBSyxFQUFFLFFBQWdCLEVBQUUsSUFBeUI7SUFDN0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixJQUFJLENBQUMsRUFBRTtRQUNMLElBQUksSUFBSSxHQUFHLENBQUMsS0FBVSxFQUFFLE9BQWMsRUFBRSxLQUFXLEVBQUUsRUFBRTtZQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbkQ7UUFDSCxDQUFDLENBQUM7UUFDRixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUIsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9CLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztLQUNKOztRQUVDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxRQUFRLGFBQWEsQ0FBQyxDQUFDO0lBQ2pELE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUNELFlBQVk7QUFFWixNQUFNLEtBQVcsS0FBSyxDQWdHckI7QUFoR0QsV0FBaUIsS0FBSztJQUVwQixNQUFNLEtBQUssR0FBRyxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsR0FBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUksRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRCxTQUFnQixLQUFLLENBQVcsQ0FBVSxFQUFFLEdBQVE7UUFDbEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFIZSxXQUFLLFFBR3BCLENBQUE7SUFDRCxTQUFnQixHQUFHLENBQVcsQ0FBVSxFQUFFLEdBQVEsRUFBRSxLQUFvQixFQUFFLEVBQU07UUFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUNFLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUNoQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1Ysc0JBQXNCO1lBQ3RCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQztnQkFDSCxRQUFRLEVBQUUsRUFBRTtvQkFDVixLQUFLLEtBQUs7d0JBQ1IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2QsTUFBTTtvQkFDUixLQUFLLEtBQUs7d0JBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDYixNQUFNO29CQUNSLEtBQUssT0FBTzt3QkFDVixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNWLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQTt5QkFDTjt3QkFDRCxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDakIsTUFBTTtvQkFDUixLQUFLLE1BQU07d0JBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNULElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDVixDQUFDLEdBQUcsQ0FBQyxDQUFD