@libs-ui/services-grid-layout 0.2.357-26 → 0.2.357-28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/canvas/grid-layout-canvas.component.d.ts +84 -1
- package/defines/scroll-bridge.define.d.ts +34 -0
- package/esm2022/canvas/grid-layout-canvas.component.mjs +186 -4
- package/esm2022/defines/collision.define.mjs +6 -2
- package/esm2022/defines/scroll-bridge.define.mjs +65 -0
- package/esm2022/grid-layout.service.mjs +19 -1
- package/esm2022/interfaces/grid-layout.interface.mjs +1 -1
- package/fesm2022/libs-ui-services-grid-layout.mjs +272 -4
- package/fesm2022/libs-ui-services-grid-layout.mjs.map +1 -1
- package/grid-layout.service.d.ts +10 -0
- package/interfaces/grid-layout.interface.d.ts +17 -0
- package/package.json +6 -5
|
@@ -176,7 +176,11 @@ rowStep = 68) => {
|
|
|
176
176
|
const elements = typeof document.elementsFromPoint === 'function'
|
|
177
177
|
? document.elementsFromPoint(event.clientX, event.clientY)
|
|
178
178
|
: [];
|
|
179
|
-
|
|
179
|
+
// Nơi dùng khai `canDropInsideContainer: false` thì coi như KHÔNG rê qua khối ghép nào: không tô
|
|
180
|
+
// ô li lên khối ghép, và bóng thả rơi về toạ độ cấp mặt phẳng — đúng chỗ khối sẽ nằm khi thả.
|
|
181
|
+
const hovered = payload.canDropInsideContainer === false
|
|
182
|
+
? undefined
|
|
183
|
+
: findHoveredGroup(elements, canvasContainer, root);
|
|
180
184
|
const stageMouseX = (event.clientX - stageRect.left) / zoom;
|
|
181
185
|
const stageMouseY = (event.clientY - stageRect.top) / zoom;
|
|
182
186
|
if (hovered) {
|
|
@@ -328,4 +332,4 @@ export const isNodeNestedInside = (root, nodeId) => {
|
|
|
328
332
|
export const canToggleTypeNode = (root, node) => isContainerNode(node) || !isNodeNestedInside(root, node.id);
|
|
329
333
|
/** Có được thêm khối vào BÊN TRONG khối này không. */
|
|
330
334
|
export const canAddInsideNode = (root, node) => isContainerNode(node) && !isNodeNestedInside(root, node.id);
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGlzaW9uLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLFFBQWtDLEVBQ2xDLENBQVMsRUFDVCxDQUFTLEVBQ1QsSUFBWSxFQUNaLElBQVksRUFDWixTQUFrQixFQUNULEVBQUU7SUFDWCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVyRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxRQUFrQyxFQUNsQyxNQUFjLEVBQ2QsTUFBYyxFQUNkLFNBQWlC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QUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBUX2dyaWRMYXlvdXRfZHJvcEdob3N0LFxuICBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCxcbiAgVF9ncmlkTGF5b3V0X25ld05vZGUsXG4gIFRfZ3JpZExheW91dF9ub2RlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyaWQtbGF5b3V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSByZWN0YW5ndWxhciByZWdpb24gW3gsIHggKyBjb2xzKSB4IFt5LCB5ICsgcm93cylcbiAqIGlzIGNvbXBsZXRlbHkgdmFjYW50IGFtb25nIGV4aXN0aW5nIGl0ZW1zLlxuICovXG5leHBvcnQgY29uc3QgaXNSZWdpb25GcmVlID0gKFxuICBjaGlsZHJlbjogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+LFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgY29sczogbnVtYmVyLFxuICByb3dzOiBudW1iZXIsXG4gIGlnbm9yZWRJZD86IHN0cmluZyxcbik6IGJvb2xlYW4gPT4ge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgaWYgKGlnbm9yZWRJZCAmJiBjaGlsZC5pZCA9PT0gaWdub3JlZElkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaE92ZXJsYXAgPSAhKGNoaWxkLnggKyBjaGlsZC5jb2xzIDw9IHggfHwgY2hpbGQueCA+PSB4ICsgY29scyk7XG4gICAgY29uc3Qgdk92ZXJsYXAgPSAhKGNoaWxkLnkgKyBjaGlsZC5yb3dzIDw9IHkgfHwgY2hpbGQueSA+PSB5ICsgcm93cyk7XG5cbiAgICBpZiAoaE92ZXJsYXAgJiYgdk92ZXJsYXApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogQ29tcHV0ZXMgb3B0aW1hbCAoY29sLCByb3cpIGluc2lkZSBhIGdyb3VwIGNvbnRhaW5lci5cbiAqIFNuYXBzIGZsdXNoIHRvIGFkamFjZW50IGNhcmQgcmlnaHQgZWRnZSBpZiBzbG90IGlzIHZhY2FudC5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRTbmFwUG9zaXRpb25JbnNpZGVHcm91cCA9IChcbiAgY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPixcbiAgcmF3Q29sOiBudW1iZXIsXG4gIHJhd1JvdzogbnVtYmVyLFxuICBpbm5lckNvbHM6IG51bWJlcixcbiAgaW5uZXJSb3dzOiBudW1iZXIsXG4gIHRvdGFsQ29scyA9IDI0LFxuKTogeyBjb2w6IG51bWJlcjsgcm93OiBudW1iZXIgfSA9PiB7XG4gIGxldCBiZXN0Q2FuZGlkYXRlOiB7IGNvbDogbnVtYmVyOyByb3c6IG51bWJlcjsgZGlzdDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgIGNvbnN0IHJpZ2h0RWRnZSA9IGNoaWxkLnggKyBjaGlsZC5jb2xzO1xuICAgIGNvbnN0IGNhbkZpdCA9IHJpZ2h0RWRnZSArIGlubmVyQ29scyA8PSB0b3RhbENvbHM7XG4gICAgY29uc3QgaXNGcmVlID0gY2FuRml0ICYmIGlzUmVnaW9uRnJlZShjaGlsZHJlbiwgcmlnaHRFZGdlLCBjaGlsZC55LCBpbm5lckNvbHMsIGlubmVyUm93cyk7XG5cbiAgICBpZiAoIWlzRnJlZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbmVhclggPSBNYXRoLmFicyhyYXdDb2wgLSByaWdodEVkZ2UpIDw9IDIgfHwgKHJhd0NvbCA+PSBjaGlsZC54ICsgTWF0aC5mbG9vcihjaGlsZC5jb2xzIC8gMikgJiYgcmF3Q29sIDw9IHJpZ2h0RWRnZSArIDEpO1xuICAgIGNvbnN0IG5lYXJZID0gTWF0aC5hYnMocmF3Um93IC0gY2hpbGQueSkgPD0gMjtcblxuICAgIGlmIChuZWFyWCAmJiBuZWFyWSkge1xuICAgICAgY29uc3QgZGlzdCA9IE1hdGguYWJzKHJhd0NvbCAtIHJpZ2h0RWRnZSkgKyBNYXRoLmFicyhyYXdSb3cgLSBjaGlsZC55KTtcblxuICAgICAgaWYgKCFiZXN0Q2FuZGlkYXRlIHx8IGRpc3QgPCBiZXN0Q2FuZGlkYXRlLmRpc3QpIHtcbiAgICAgICAgYmVzdENhbmRpZGF0ZSA9IHsgY29sOiByaWdodEVkZ2UsIHJvdzogY2hpbGQueSwgZGlzdCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChiZXN0Q2FuZGlkYXRlKSB7XG4gICAgcmV0dXJuIHsgY29sOiBiZXN0Q2FuZGlkYXRlLmNvbCwgcm93OiBiZXN0Q2FuZGlkYXRlLnJvdyB9O1xuICB9XG5cbiAgY29uc3QgY2xhbXBlZENvbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRvdGFsQ29scyAtIGlubmVyQ29scywgcmF3Q29sKSk7XG4gIGNvbnN0IGNsYW1wZWRSb3cgPSBNYXRoLm1heCgwLCByYXdSb3cpO1xuXG4gIHJldHVybiB7IGNvbDogY2xhbXBlZENvbCwgcm93OiBjbGFtcGVkUm93IH07XG59O1xuXG4vKipcbiAqIEFkanVzdHMgcG9zaXRpb24gb2YgcGFpciBpZiBob3Jpem9udGFsIG92ZXJsYXAgb2NjdXJzLlxuICovXG5jb25zdCBhZGp1c3RJdGVtUGFpciA9IChhOiBUX2dyaWRMYXlvdXRfbm9kZSwgYjogVF9ncmlkTGF5b3V0X25vZGUpOiBib29sZWFuID0+IHtcbiAgY29uc3QgaE92ZXJsYXAgPSAhKGEueCArIGEuY29scyA8PSBiLnggfHwgYS54ID49IGIueCArIGIuY29scyk7XG5cbiAgaWYgKGhPdmVybGFwICYmIGIueSA8IGEueSArIGEucm93cykge1xuICAgIGIueSA9IGEueSArIGEucm93cztcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB2ZXJ0aWNhbCBjb2xsaXNpb25zIHdoZW4gaW5zZXJ0aW5nIGEgbmV3IGNhcmQgYXQgKG5ld05vZGUueCwgbmV3Tm9kZS55KS5cbiAqIEFueSBleGlzdGluZyBjYXJkIHRoYXQgaG9yaXpvbnRhbGx5IG92ZXJsYXBzIGFuZCB3aG9zZSB2ZXJ0aWNhbCBzcGFuIG92ZXJsYXBzXG4gKiBvciBpcyBiZWxvdyB0aGUgaW5zZXJ0aW9uIHBvaW50IGlzIHB1c2hlZCBkb3duIHNvIHRoZXJlIGlzIG5vIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydCA9IChcbiAgY2hpbGRyZW46IEFycmF5PFRfZ3JpZExheW91dF9ub2RlPixcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25vZGUsXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgaXRlbXMgPSBbLi4uY2hpbGRyZW5dO1xuXG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IGhPdmVybGFwID0gIShpdGVtLnggKyBpdGVtLmNvbHMgPD0gbmV3Tm9kZS54IHx8IGl0ZW0ueCA+PSBuZXdOb2RlLnggKyBuZXdOb2RlLmNvbHMpO1xuICAgIGNvbnN0IHZPdmVybGFwID0gIShpdGVtLnkgKyBpdGVtLnJvd3MgPD0gbmV3Tm9kZS55IHx8IGl0ZW0ueSA+PSBuZXdOb2RlLnkgKyBuZXdOb2RlLnJvd3MpO1xuXG4gICAgaWYgKGhPdmVybGFwICYmIHZPdmVybGFwKSB7XG4gICAgICBpdGVtLnkgPSBuZXdOb2RlLnkgKyBuZXdOb2RlLnJvd3M7XG4gICAgfVxuICB9XG5cbiAgaXRlbXMuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgbGV0IGNoYW5nZWQgPSB0cnVlO1xuXG4gIHdoaWxlIChjaGFuZ2VkKSB7XG4gICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGl0ZW1zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoYW5nZWQgPSBhZGp1c3RJdGVtUGFpcihpdGVtc1tpXSwgaXRlbXNbal0pIHx8IGNoYW5nZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hpbGRyZW4ucHVzaChuZXdOb2RlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURyb3BQYXlsb2FkPFQ+KGFjdGl2ZVBheWxvYWQ6IFQgfCB1bmRlZmluZWQsIGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyIHwgbnVsbCk6IFQgfCB1bmRlZmluZWQge1xuICBpZiAoYWN0aXZlUGF5bG9hZCkge1xuICAgIHJldHVybiBhY3RpdmVQYXlsb2FkO1xuICB9XG4gIGlmIChkYXRhVHJhbnNmZXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gZGF0YVRyYW5zZmVyLmdldERhdGEoJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgICAgaWYgKHJhdykge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBJX2hvdmVyZWRHcm91cCB7XG4gIGdyb3VwTm9kZTogVF9ncmlkTGF5b3V0X25vZGU7XG4gIGdyb3VwR3JpZHN0ZXI6IEhUTUxFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgZmluZEhvdmVyZWRHcm91cCA9IChcbiAgZWxlbWVudHM6IEVsZW1lbnRbXSxcbiAgY2FudmFzQ29udGFpbmVyOiBIVE1MRWxlbWVudCxcbiAgcm9vdDogVF9ncmlkTGF5b3V0X25vZGUsXG4pOiBJX2hvdmVyZWRHcm91cCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHJvb3RHcmlkc3RlciA9IGNhbnZhc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdncmlkc3RlcicpO1xuXG4gIGZvciAoY29uc3QgZWwgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBncmlkc3RlckVsID0gKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2dyaWRzdGVyJyA/IGVsIDogZWwuY2xvc2VzdCgnZ3JpZHN0ZXInKSkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgaWYgKGdyaWRzdGVyRWwgJiYgZ3JpZHN0ZXJFbCAhPT0gcm9vdEdyaWRzdGVyKSB7XG4gICAgICBjb25zdCBvdXRlckl0ZW0gPSBncmlkc3RlckVsLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcbiAgICAgIGNvbnN0IHJvb3RJdGVtcyA9IHJvb3RHcmlkc3RlciA/IEFycmF5LmZyb20ocm9vdEdyaWRzdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJzpzY29wZSA+IGdyaWRzdGVyLWl0ZW0nKSkgOiBbXTtcbiAgICAgIGNvbnN0IGlkeCA9IG91dGVySXRlbSA/IHJvb3RJdGVtcy5pbmRleE9mKG91dGVySXRlbSkgOiAtMTtcblxuICAgICAgaWYgKGlkeCA+PSAwICYmIHJvb3QuY2hpbGRyZW4/LltpZHhdKSB7XG4gICAgICAgIHJldHVybiB7IGdyb3VwTm9kZTogcm9vdC5jaGlsZHJlbltpZHhdLCBncm91cEdyaWRzdGVyOiBncmlkc3RlckVsIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGl0ZW1FbCA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2dyaWRzdGVyLWl0ZW0nID8gZWwgOiBlbC5jbG9zZXN0KCdncmlkc3Rlci1pdGVtJyk7XG4gICAgaWYgKCFpdGVtRWwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCByb290SXRlbXMgPSByb290R3JpZHN0ZXIgPyBBcnJheS5mcm9tKHJvb3RHcmlkc3Rlci5xdWVyeVNlbGVjdG9yQWxsKCc6c2NvcGUgPiBncmlkc3Rlci1pdGVtJykpIDogW107XG4gICAgY29uc3QgaWR4ID0gcm9vdEl0ZW1zLmluZGV4T2YoaXRlbUVsKTtcbiAgICBpZiAoaWR4ID49IDAgJiYgcm9vdC5jaGlsZHJlbj8uW2lkeF0pIHtcbiAgICAgIGNvbnN0IG5vZGUgPSByb290LmNoaWxkcmVuW2lkeF07XG4gICAgICBpZiAoKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKSA+IDApIHtcbiAgICAgICAgcmV0dXJuIHsgZ3JvdXBOb2RlOiBub2RlLCBncm91cEdyaWRzdGVyOiAoaXRlbUVsLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA/PyAoaXRlbUVsIGFzIEhUTUxFbGVtZW50KSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgc25hcHBlZCBzcGF0aWFsIGNvb3JkaW5hdGVzIGFuZCBwaXhlbCBkaW1lbnNpb25zIGZvciBkcm9wIGdob3N0IHByZXZpZXcgYm94LlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlRHJvcEdob3N0ID0gKFxuICBldmVudDogRHJhZ0V2ZW50LFxuICBjYW52YXNDb250YWluZXI6IEhUTUxFbGVtZW50LFxuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSxcbiAgcGF5bG9hZDogVF9ncmlkTGF5b3V0X2V4dGVybmFsRHJhZ1BheWxvYWQsXG4gIHRvdGFsQ29scyA9IDI0LFxuICAvLyDwn5S0IENoaeG7gXUgY2FvIG3hu5l0IGjDoG5nIGzGsOG7m2ksIHTDrW5oIGLhurFuZyBwaXhlbC4gVHLGsOG7m2MgxJHDonkgxJHDs25nIGPhu6luZyA2OCBuw6puIGtodW5nIHhlbSB0csaw4bubYyB24bq9IHNhaSBj4buhXG4gIC8vIOG7nyBt4bq3dCBwaOG6s25nIGPDsyBow6BuZyB0aOG6pXAsIG7GoWkgZMO5bmcgcGjhuqNpIOG6qW4ga2h1bmcgY+G7p2EgdGjGsCB2aeG7h24gcuG7k2kgdOG7sSB24bq9IGzhuqFpLlxuICByb3dTdGVwID0gNjgsXG4pOiBUX2dyaWRMYXlvdXRfZHJvcEdob3N0IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWNhbnZhc0NvbnRhaW5lcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYXJkVGl0bGUgPSBwYXlsb2FkLnRpdGxlIHx8ICdUaOG6uyc7XG4gIGNvbnN0IGNhcmRJY29uQ2xhc3MgPSBwYXlsb2FkLmljb25DbGFzcztcbiAgY29uc3QgY2FyZEljb25UZXh0ID0gcGF5bG9hZC5pY29uVGV4dDtcbiAgY29uc3QgcGF5bG9hZEFueSA9IHBheWxvYWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxldCBkZWZhdWx0Q29scyA9IHR5cGVvZiBwYXlsb2FkLmNvbHMgPT09ICdudW1iZXInXG4gICAgPyBwYXlsb2FkLmNvbHNcbiAgICA6ICh0eXBlb2YgcGF5bG9hZEFueVsnZGVmYXVsdENvbHMnXSA9PT0gJ251bWJlcicgPyAocGF5bG9hZEFueVsnZGVmYXVsdENvbHMnXSBhcyBudW1iZXIpIDogKHRvdGFsQ29scyA+PSAyNCA/IDEyIDogNikpO1xuICBsZXQgZGVmYXVsdFJvd3MgPSB0eXBlb2YgcGF5bG9hZC5yb3dzID09PSAnbnVtYmVyJ1xuICAgID8gcGF5bG9hZC5yb3dzXG4gICAgOiAodHlwZW9mIHBheWxvYWRBbnlbJ2RlZmF1bHRSb3dzJ10gPT09ICdudW1iZXInID8gKHBheWxvYWRBbnlbJ2RlZmF1bHRSb3dzJ10gYXMgbnVtYmVyKSA6IDQpO1xuXG4gIGlmICh0eXBlb2YgcGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYW1wbGUgPSAocGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSBhcyAoaW5zaWRlOiBib29sZWFuKSA9PiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSB8IHVuZGVmaW5lZCkoZmFsc2UpO1xuICAgICAgaWYgKHNhbXBsZSkge1xuICAgICAgICBpZiAodHlwZW9mIHNhbXBsZS5jb2xzID09PSAnbnVtYmVyJykgeyBkZWZhdWx0Q29scyA9IHNhbXBsZS5jb2xzOyB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlLnJvd3MgPT09ICdudW1iZXInKSB7IGRlZmF1bHRSb3dzID0gc2FtcGxlLnJvd3M7IH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIGRlZmF1bHQgY29scyBhbmQgcm93c1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YWdlRWwgPSAoY2FudmFzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNiaS1jYW52YXMtc3RhZ2UnKSBhcyBIVE1MRWxlbWVudCB8IG51bGwpID8/IGNhbnZhc0NvbnRhaW5lcjtcbiAgY29uc3Qgc3RhZ2VSZWN0ID0gc3RhZ2VFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICBjb25zdCByb290R3JpZHN0ZXIgPSBzdGFnZUVsLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICBjb25zdCBncmlkc3RlckVsID0gcm9vdEdyaWRzdGVyID8/IHN0YWdlRWw7XG4gIGNvbnN0IGdyaWRzdGVyUmVjdCA9IGdyaWRzdGVyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHVuc2NhbGVkV2lkdGggPSBncmlkc3RlckVsLm9mZnNldFdpZHRoIHx8IGdyaWRzdGVyRWwuY2xpZW50V2lkdGggfHwgMDtcbiAgY29uc3Qgem9vbSA9IChncmlkc3RlclJlY3Qud2lkdGggJiYgdW5zY2FsZWRXaWR0aCA+IDApXG4gICAgPyBNYXRoLm1heCgwLjIsIE1hdGgubWluKDMsIGdyaWRzdGVyUmVjdC53aWR0aCAvIHVuc2NhbGVkV2lkdGgpKVxuICAgIDogMTtcblxuICBjb25zdCBlbGVtZW50cyA9IHR5cGVvZiBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcbiAgICA6IFtdO1xuICBjb25zdCBob3ZlcmVkID0gZmluZEhvdmVyZWRHcm91cChlbGVtZW50cywgY2FudmFzQ29udGFpbmVyLCByb290KTtcblxuICBjb25zdCBzdGFnZU1vdXNlWCA9IChldmVudC5jbGllbnRYIC0gc3RhZ2VSZWN0LmxlZnQpIC8gem9vbTtcbiAgY29uc3Qgc3RhZ2VNb3VzZVkgPSAoZXZlbnQuY2xpZW50WSAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcblxuICBpZiAoaG92ZXJlZCkge1xuICAgIGNvbnN0IHsgZ3JvdXBOb2RlLCBncm91cEdyaWRzdGVyIH0gPSBob3ZlcmVkO1xuICAgIGNvbnN0IGdyb3VwR3JpZHN0ZXJSZWN0ID0gZ3JvdXBHcmlkc3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBncm91cFN0YWdlTGVmdCA9IChncm91cEdyaWRzdGVyUmVjdC5sZWZ0IC0gc3RhZ2VSZWN0LmxlZnQpIC8gem9vbTtcbiAgICBjb25zdCBncm91cFN0YWdlVG9wID0gKGdyb3VwR3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcblxuICAgIGxldCBpbm5lckNvbHMgPSBkZWZhdWx0Q29scztcbiAgICBsZXQgaW5uZXJSb3dzID0gZGVmYXVsdFJvd3M7XG4gICAgaWYgKHR5cGVvZiBwYXlsb2FkQW55WydyZXNvbHZlTm9kZSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzYW1wbGVJbnNpZGUgPSAocGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSBhcyAoaW5zaWRlOiBib29sZWFuKSA9PiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSB8IHVuZGVmaW5lZCkodHJ1ZSk7XG4gICAgICAgIGlmIChzYW1wbGVJbnNpZGUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhbXBsZUluc2lkZS5jb2xzID09PSAnbnVtYmVyJykgeyBpbm5lckNvbHMgPSBzYW1wbGVJbnNpZGUuY29sczsgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlSW5zaWRlLnJvd3MgPT09ICdudW1iZXInKSB7IGlubmVyUm93cyA9IHNhbXBsZUluc2lkZS5yb3dzOyB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBkZWZhdWx0IGNvbHMgYW5kIHJvd3NcbiAgICAgIH1cbiAgICB9XG4gICAgaW5uZXJDb2xzID0gTWF0aC5taW4oaW5uZXJDb2xzLCB0b3RhbENvbHMpO1xuXG4gICAgY29uc3QgZ3JvdXBXaWR0aCA9IGdyb3VwR3JpZHN0ZXIuY2xpZW50V2lkdGggfHwgKGdyb3VwR3JpZHN0ZXJSZWN0LndpZHRoIC8gem9vbSkgfHwgNDAwO1xuICAgIGNvbnN0IGNvbFN0ZXAgPSAoZ3JvdXBXaWR0aCArIDIpIC8gdG90YWxDb2xzO1xuICAgIGNvbnN0IHJvd1N0ZXAgPSAxODtcbiAgICBjb25zdCByZWxYID0gKGV2ZW50LmNsaWVudFggLSBncm91cEdyaWRzdGVyUmVjdC5sZWZ0KSAvIHpvb20gKyBncm91cEdyaWRzdGVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVsWSA9IChldmVudC5jbGllbnRZIC0gZ3JvdXBHcmlkc3RlclJlY3QudG9wKSAvIHpvb20gKyBncm91cEdyaWRzdGVyLnNjcm9sbFRvcDtcbiAgICBjb25zdCByYXdDb2wgPSBNYXRoLmZsb29yKHJlbFggLyBjb2xTdGVwKTtcbiAgICBjb25zdCByYXdSb3cgPSBNYXRoLmZsb29yKHJlbFkgLyByb3dTdGVwKTtcbiAgICBjb25zdCBzbmFwID0gZmluZFNuYXBQb3NpdGlvbkluc2lkZUdyb3VwKFxuICAgICAgZ3JvdXBOb2RlLmNoaWxkcmVuID8/IFtdLFxuICAgICAgcmF3Q29sLFxuICAgICAgcmF3Um93LFxuICAgICAgaW5uZXJDb2xzLFxuICAgICAgaW5uZXJSb3dzLFxuICAgICAgdG90YWxDb2xzLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sOiBzbmFwLmNvbCxcbiAgICAgIHJvdzogc25hcC5yb3csXG4gICAgICBjb2xzOiBpbm5lckNvbHMsXG4gICAgICByb3dzOiBpbm5lclJvd3MsXG4gICAgICBwaXhlbExlZnQ6IGdyb3VwU3RhZ2VMZWZ0ICsgc25hcC5jb2wgKiBjb2xTdGVwLFxuICAgICAgcGl4ZWxUb3A6IGdyb3VwU3RhZ2VUb3AgKyBzbmFwLnJvdyAqIHJvd1N0ZXAsXG4gICAgICBwaXhlbFdpZHRoOiBNYXRoLm1heCgzMCwgaW5uZXJDb2xzICogY29sU3RlcCAtIDIpLFxuICAgICAgcGl4ZWxIZWlnaHQ6IE1hdGgubWF4KDIwLCBpbm5lclJvd3MgKiByb3dTdGVwIC0gMiksXG4gICAgICBpc0luc2lkZUdyb3VwOiB0cnVlLFxuICAgICAgdGFyZ2V0UGFyZW50SWQ6IGdyb3VwTm9kZS5pZCxcbiAgICAgIGdyb3VwVGl0bGU6ICdLaOG7kWkgZ2jDqXAnLFxuICAgICAgY2FyZFRpdGxlLFxuICAgICAgY2FyZEljb25DbGFzcyxcbiAgICAgIGNhcmRJY29uVGV4dCxcbiAgICAgIGhvdmVyZWRHcmlkc3RlcjogZ3JvdXBHcmlkc3RlciBhcyBIVE1MRWxlbWVudCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWFyZ2luID0gMTI7XG4gIGNvbnN0IGdyaWRzdGVyV2lkdGggPSB1bnNjYWxlZFdpZHRoIHx8IGdyaWRzdGVyRWwuY2xpZW50V2lkdGggfHwgMTIwMDtcbiAgY29uc3QgY29sU3RlcCA9IE1hdGgubWF4KDIwLCAoZ3JpZHN0ZXJXaWR0aCAtIG1hcmdpbikgLyB0b3RhbENvbHMpO1xuICBjb25zdCBncmlkc3RlclN0YWdlTGVmdCA9IChncmlkc3RlclJlY3QubGVmdCAtIHN0YWdlUmVjdC5sZWZ0KSAvIHpvb207XG4gIGNvbnN0IGdyaWRzdGVyU3RhZ2VUb3AgPSAoZ3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcbiAgY29uc3QgcmVsWCA9IHN0YWdlTW91c2VYIC0gZ3JpZHN0ZXJTdGFnZUxlZnQgKyBncmlkc3RlckVsLnNjcm9sbExlZnQgLSBtYXJnaW47XG4gIGNvbnN0IHJlbFkgPSBzdGFnZU1vdXNlWSAtIGdyaWRzdGVyU3RhZ2VUb3AgKyBncmlkc3RlckVsLnNjcm9sbFRvcCAtIG1hcmdpbjtcbiAgY29uc3QgaXRlbUNvbHMgPSBNYXRoLm1pbihkZWZhdWx0Q29scywgdG90YWxDb2xzKTtcbiAgY29uc3QgY29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG90YWxDb2xzIC0gaXRlbUNvbHMsIE1hdGguZmxvb3IocmVsWCAvIGNvbFN0ZXApKSk7XG4gIGNvbnN0IHJvdyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmVsWSAvIHJvd1N0ZXApKTtcblxuICByZXR1cm4ge1xuICAgIGNvbCxcbiAgICByb3csXG4gICAgY29sczogaXRlbUNvbHMsXG4gICAgcm93czogZGVmYXVsdFJvd3MsXG4gICAgcGl4ZWxMZWZ0OiBncmlkc3RlclN0YWdlTGVmdCArIG1hcmdpbiArIGNvbCAqIGNvbFN0ZXAsXG4gICAgcGl4ZWxUb3A6IGdyaWRzdGVyU3RhZ2VUb3AgKyBtYXJnaW4gKyByb3cgKiByb3dTdGVwLFxuICAgIHBpeGVsV2lkdGg6IGl0ZW1Db2xzICogY29sU3RlcCAtIG1hcmdpbixcbiAgICBwaXhlbEhlaWdodDogZGVmYXVsdFJvd3MgKiByb3dTdGVwIC0gbWFyZ2luLFxuICAgIGlzSW5zaWRlR3JvdXA6IGZhbHNlLFxuICAgIGNhcmRUaXRsZSxcbiAgICBjYXJkSWNvbkNsYXNzLFxuICAgIGNhcmRJY29uVGV4dCxcbiAgICBob3ZlcmVkR3JpZHN0ZXI6IChyb290R3JpZHN0ZXIgYXMgSFRNTEVsZW1lbnQpID8/IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cblxuLyoqIFTDrG0ga2jhu5FpIHRoZW8gaWQgdHJvbmcgY8OieSwgxJFpIHPDonUgdsOgbyBt4buNaSBjb250YWluZXIuICovXG5leHBvcnQgY29uc3QgZmluZE5vZGVSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChyb290LmlkID09PSBpZCkge1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuID8/IFtdKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTm9kZVJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBUw6xtIGto4buRaSBDSEEgdHLhu7FjIHRp4bq/cCBj4bunYSBt4buZdCBraOG7kWksIMSRaSBzw6J1IHbDoG8gbeG7jWkgY29udGFpbmVyLiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnRSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygcm9vdC5jaGlsZHJlbiA/PyBbXSkge1xuICAgIGlmIChjaGlsZC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kID0gZmluZFBhcmVudFJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogVGjhuqMga2jhu5FpIHbDoG8gxJHDum5nIMO0IG3DoCBnaG9zdCDEkWFuZyBjaOG7iSwgxJHhuql5IGPDoWMga2jhu5FpIHZhIGNo4bqhbSB4deG7kW5nIGTGsOG7m2kuXG4gKlxuICogR2hvc3QgxJFhbmcgbuG6sW0gdHJvbmcgbeG7mXQgY29udGFpbmVyIChgaXNJbnNpZGVHcm91cGApIHRow6wgdGjhuqMgdsOgbyBydeG7mXQgY29udGFpbmVyIMSRw7M7IGtow7RuZyB0w6xtIHRo4bqleVxuICogY29udGFpbmVyIHRow6wgdHLhuqMgYGZhbHNlYCBjaOG7qSBLSMOUTkcgcsahaSB24buBIGzGsOG7m2kgZ+G7kWMg4oCUIHRo4bqjIG5o4bqnbSBj4bqlcCBraMOzIG5o4bqtbiByYSBoxqFuIGzDoCBraMO0bmcgdGjhuqMuXG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wTm9kZUF0Q29vcmRpbmF0ZXMgPSAoXG4gIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLFxuICBnaG9zdDogVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCxcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25ld05vZGVcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub2RlVG9BZGQ6IFRfZ3JpZExheW91dF9ub2RlID0ge1xuICAgIC4uLm5ld05vZGUsXG4gICAgaWQ6IG5ld05vZGUuaWQgPz8gdXVpZCgpLFxuICAgIHg6IGdob3N0LmNvbCxcbiAgICB5OiBnaG9zdC5yb3csXG4gICAgY29sczogZ2hvc3QuY29scyxcbiAgICByb3dzOiBnaG9zdC5yb3dzLFxuICB9O1xuXG4gIGlmIChnaG9zdC5pc0luc2lkZUdyb3VwICYmIGdob3N0LnRhcmdldFBhcmVudElkKSB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGZpbmROb2RlUmVjdXJzaXZlKHJvb3QsIGdob3N0LnRhcmdldFBhcmVudElkKTtcblxuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuID0gcGFyZW50Tm9kZS5jaGlsZHJlbiA/PyBbXTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydChwYXJlbnROb2RlLmNoaWxkcmVuLCBub2RlVG9BZGQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByb290LmNoaWxkcmVuID0gcm9vdC5jaGlsZHJlbiA/PyBbXTtcbiAgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQocm9vdC5jaGlsZHJlbiwgbm9kZVRvQWRkKTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqIEto4buRaSBjw7MgcGjhuqNpIENPTlRBSU5FUiBraMO0bmcg4oCUIHThu6ljIGPDsyBraOG7kWkgY29uIGLDqm4gdHJvbmcuICovXG5leHBvcnQgY29uc3QgaXNDb250YWluZXJOb2RlID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMDtcblxuLyoqIEto4buRaSBjw7MgbuG6sW0gTOG7kk5HIGLDqm4gdHJvbmcgbeG7mXQgY29udGFpbmVyIGtow7RuZyAoa2jDtG5nIHBo4bqjaSBjb24gdHLhu7FjIHRp4bq/cCBj4bunYSBn4buRYykuICovXG5leHBvcnQgY29uc3QgaXNOb2RlTmVzdGVkSW5zaWRlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXJvb3Q/LmNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICFyb290LmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gbm9kZUlkKTtcbn07XG5cbi8qKlxuICogQ8OzIMSRxrDhu6NjIMSR4buVaSBraOG7kWkgxJHGoW4g4oaUIGNvbnRhaW5lciBraMO0bmcuXG4gKlxuICog8J+UtCBCYSBow6BtIGPhu50gbsOgeSBQSOG6okkgbMOgIG5ndeG7k24gZHV5IG5o4bqldCBjaG8gY+G6oyB0aGFuaCBjw7RuZyBj4bulIGPhu6dhIHRoxrAgdmnhu4duIGzhuqtuIG1lbnUgZG8gbsahaSBkw7luZyB04buxXG4gKiBk4buxbmcuIFRyxrDhu5tjIMSRw6J5IG7GoWkgZMO5bmcgcGjhuqNpIGNow6lwIGzhuqFpIHF1eSB04bqvYyDEkeG7gyBk4buxbmcgbWVudSB0csaw4bubYyBsw7pjIHJlbmRlciwgdsOgIGhhaSBi4bqjbiBs4buHY2ggbmhhdVxuICogbeG7l2kga2hpIHRoxrAgdmnhu4duIMSR4buVaSB0cuG6p24gbOG7k25nIGPhuqVwIG3DoCBraMO0bmcgY8OzIGfDrCBiw6FvLlxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlVHlwZU5vZGUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQsIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PlxuICBpc0NvbnRhaW5lck5vZGUobm9kZSkgfHwgIWlzTm9kZU5lc3RlZEluc2lkZShyb290LCBub2RlLmlkKTtcblxuLyoqIEPDsyDEkcaw4bujYyB0aMOqbSBraOG7kWkgdsOgbyBCw4pOIFRST05HIGto4buRaSBuw6B5IGtow7RuZy4gKi9cbmV4cG9ydCBjb25zdCBjYW5BZGRJbnNpZGVOb2RlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IGJvb2xlYW4gPT5cbiAgaXNDb250YWluZXJOb2RlKG5vZGUpICYmICFpc05vZGVOZXN0ZWRJbnNpZGUocm9vdCwgbm9kZS5pZCk7XG4iXX0=
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGlzaW9uLmRlZmluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZ3JpZC1sYXlvdXQvc3JjL2RlZmluZXMvY29sbGlzaW9uLmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQzFCLFFBQWtDLEVBQ2xDLENBQVMsRUFDVCxDQUFTLEVBQ1QsSUFBWSxFQUNaLElBQVksRUFDWixTQUFrQixFQUNULEVBQUU7SUFDWCxLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVyRSxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUN6QyxRQUFrQyxFQUNsQyxNQUFjLEVBQ2QsTUFBYyxFQUNkLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQVMsR0FBRyxFQUFFLEVBQ2dCLEVBQUU7SUFDaEMsSUFBSSxhQUFxRSxDQUFDO0lBRTFFLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFLENBQUM7UUFDN0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLFNBQVMsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDO1FBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUxRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9ILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXZFLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEQsYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQW9CLEVBQUUsQ0FBb0IsRUFBVyxFQUFFO0lBQzdFLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRS9ELElBQUksUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDeEMsUUFBa0MsRUFDbEMsT0FBMEIsRUFDcEIsRUFBRTtJQUNSLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUU1QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFGLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUVuQixPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QixDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsZ0JBQWdCLENBQUksYUFBNEIsRUFBRSxZQUFpQztJQUNqRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUVyRCxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQU0sQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQU9ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzlCLFFBQW1CLEVBQ25CLGVBQTRCLEVBQzVCLElBQXVCLEVBQ0ssRUFBRTtJQUM5QixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9ELEtBQUssTUFBTSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUF1QixDQUFDO1FBRWpILElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDMUcsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUxRCxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDdEUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLFNBQVM7UUFDWCxDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUF3QixJQUFLLE1BQXNCLEVBQUUsQ0FBQztZQUNqSSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLEtBQWdCLEVBQ2hCLGVBQTRCLEVBQzVCLElBQXVCLEVBQ3ZCLE9BQXlDLEVBQ3pDLFNBQVMsR0FBRyxFQUFFO0FBQ2Qsb0dBQW9HO0FBQ3BHLCtFQUErRTtBQUMvRSxPQUFPLEdBQUcsRUFBRSxFQUN3QixFQUFFO0lBQ3RDLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDeEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyxPQUFrQyxDQUFDO0lBQ3RELElBQUksV0FBVyxHQUFHLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRO1FBQ2hELENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUNkLENBQUMsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxJQUFJLFdBQVcsR0FBRyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUNoRCxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUk7UUFDZCxDQUFDLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFFLFVBQVUsQ0FBQyxhQUFhLENBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEcsSUFBSSxPQUFPLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBSSxVQUFVLENBQUMsYUFBYSxDQUEyRCxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQUMsQ0FBQztnQkFDbkUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLG9DQUFvQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQXdCLElBQUksZUFBZSxDQUFDO0lBQzdHLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRWxELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUF1QixDQUFDO0lBQzdFLE1BQU0sVUFBVSxHQUFHLFlBQVksSUFBSSxPQUFPLENBQUM7SUFDM0MsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDeEQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBSSxVQUFVLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUM1RSxNQUFNLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRU4sTUFBTSxRQUFRLEdBQUcsT0FBTyxRQUFRLENBQUMsaUJBQWlCLEtBQUssVUFBVTtRQUMvRCxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMxRCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsaUdBQWlHO0lBQ2pHLDhGQUE4RjtJQUM5RixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsc0JBQXNCLEtBQUssS0FBSztRQUN0RCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXRELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzVELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRTNELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDeEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUVyRSxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDNUIsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzVCLElBQUksT0FBTyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDO2dCQUNILE1BQU0sWUFBWSxHQUFJLFVBQVUsQ0FBQyxhQUFhLENBQTJELENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hILElBQUksWUFBWSxFQUFFLENBQUM7b0JBQ2pCLElBQUksT0FBTyxZQUFZLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUFDLENBQUM7b0JBQzdFLElBQUksT0FBTyxZQUFZLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUFDLENBQUM7Z0JBQy9FLENBQUM7WUFDSCxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLG9DQUFvQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUNELFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUzQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsV0FBVyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztRQUN4RixNQUFNLE9BQU8sR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUN4RixNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDdEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsMkJBQTJCLENBQ3RDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxFQUN4QixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxDQUNWLENBQUM7UUFFRixPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsU0FBUztZQUNmLFNBQVMsRUFBRSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPO1lBQzlDLFFBQVEsRUFBRSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPO1lBQzVDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNqRCxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbEQsYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzVCLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLFNBQVM7WUFDVCxhQUFhO1lBQ2IsWUFBWTtZQUNaLGVBQWUsRUFBRSxhQUE0QjtTQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQixNQUFNLGFBQWEsR0FBRyxhQUFhLElBQUksVUFBVSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7SUFDdEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDbkUsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN0RSxNQUFNLGdCQUFnQixHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ25FLE1BQU0sSUFBSSxHQUFHLFdBQVcsR0FBRyxpQkFBaUIsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUM5RSxNQUFNLElBQUksR0FBRyxXQUFXLEdBQUcsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7SUFDNUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXBELE9BQU87UUFDTCxHQUFHO1FBQ0gsR0FBRztRQUNILElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLFdBQVc7UUFDakIsU0FBUyxFQUFFLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTztRQUNyRCxRQUFRLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxPQUFPO1FBQ25ELFVBQVUsRUFBRSxRQUFRLEdBQUcsT0FBTyxHQUFHLE1BQU07UUFDdkMsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLEdBQUcsTUFBTTtRQUMzQyxhQUFhLEVBQUUsS0FBSztRQUNwQixTQUFTO1FBQ1QsYUFBYTtRQUNiLFlBQVk7UUFDWixlQUFlLEVBQUcsWUFBNEIsSUFBSSxTQUFTO0tBQzVELENBQUM7QUFDSixDQUFDLENBQUM7QUFHRiw0REFBNEQ7QUFDNUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUF1QixFQUFFLEVBQVUsRUFBaUMsRUFBRTtJQUN0RyxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUzQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQXVCLEVBQUUsRUFBVSxFQUFpQyxFQUFFO0lBQ3hHLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUNuQyxJQUF1QixFQUN2QixLQUE2QixFQUM3QixPQUE2QixFQUNwQixFQUFFO0lBQ1gsTUFBTSxTQUFTLEdBQXNCO1FBQ25DLEdBQUcsT0FBTztRQUNWLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRTtRQUN4QixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUc7UUFDWixDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUc7UUFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO0tBQ2pCLENBQUM7SUFFRixJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDaEQsMEJBQTBCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUUzRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO0lBQ3BDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFckQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFHRixnRUFBZ0U7QUFDaEUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBdUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFdEcseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBbUMsRUFBRSxNQUFjLEVBQVcsRUFBRTtJQUNqRyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQW1DLEVBQUUsSUFBdUIsRUFBVyxFQUFFLENBQ3pHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFOUQsc0RBQXNEO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBbUMsRUFBRSxJQUF1QixFQUFXLEVBQUUsQ0FDeEcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFRfZ3JpZExheW91dF9kcm9wR2hvc3QsXG4gIFRfZ3JpZExheW91dF9leHRlcm5hbERyYWdQYXlsb2FkLFxuICBUX2dyaWRMYXlvdXRfbmV3Tm9kZSxcbiAgVF9ncmlkTGF5b3V0X25vZGUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvZ3JpZC1sYXlvdXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHJlY3Rhbmd1bGFyIHJlZ2lvbiBbeCwgeCArIGNvbHMpIHggW3ksIHkgKyByb3dzKVxuICogaXMgY29tcGxldGVseSB2YWNhbnQgYW1vbmcgZXhpc3RpbmcgaXRlbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlZ2lvbkZyZWUgPSAoXG4gIGNoaWxkcmVuOiBBcnJheTxUX2dyaWRMYXlvdXRfbm9kZT4sXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICBjb2xzOiBudW1iZXIsXG4gIHJvd3M6IG51bWJlcixcbiAgaWdub3JlZElkPzogc3RyaW5nLFxuKTogYm9vbGVhbiA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICBpZiAoaWdub3JlZElkICYmIGNoaWxkLmlkID09PSBpZ25vcmVkSWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBoT3ZlcmxhcCA9ICEoY2hpbGQueCArIGNoaWxkLmNvbHMgPD0geCB8fCBjaGlsZC54ID49IHggKyBjb2xzKTtcbiAgICBjb25zdCB2T3ZlcmxhcCA9ICEoY2hpbGQueSArIGNoaWxkLnJvd3MgPD0geSB8fCBjaGlsZC55ID49IHkgKyByb3dzKTtcblxuICAgIGlmIChoT3ZlcmxhcCAmJiB2T3ZlcmxhcCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKiBDb21wdXRlcyBvcHRpbWFsIChjb2wsIHJvdykgaW5zaWRlIGEgZ3JvdXAgY29udGFpbmVyLlxuICogU25hcHMgZmx1c2ggdG8gYWRqYWNlbnQgY2FyZCByaWdodCBlZGdlIGlmIHNsb3QgaXMgdmFjYW50LlxuICovXG5leHBvcnQgY29uc3QgZmluZFNuYXBQb3NpdGlvbkluc2lkZUdyb3VwID0gKFxuICBjaGlsZHJlbjogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+LFxuICByYXdDb2w6IG51bWJlcixcbiAgcmF3Um93OiBudW1iZXIsXG4gIGlubmVyQ29sczogbnVtYmVyLFxuICBpbm5lclJvd3M6IG51bWJlcixcbiAgdG90YWxDb2xzID0gMjQsXG4pOiB7IGNvbDogbnVtYmVyOyByb3c6IG51bWJlciB9ID0+IHtcbiAgbGV0IGJlc3RDYW5kaWRhdGU6IHsgY29sOiBudW1iZXI7IHJvdzogbnVtYmVyOyBkaXN0OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgY29uc3QgcmlnaHRFZGdlID0gY2hpbGQueCArIGNoaWxkLmNvbHM7XG4gICAgY29uc3QgY2FuRml0ID0gcmlnaHRFZGdlICsgaW5uZXJDb2xzIDw9IHRvdGFsQ29scztcbiAgICBjb25zdCBpc0ZyZWUgPSBjYW5GaXQgJiYgaXNSZWdpb25GcmVlKGNoaWxkcmVuLCByaWdodEVkZ2UsIGNoaWxkLnksIGlubmVyQ29scywgaW5uZXJSb3dzKTtcblxuICAgIGlmICghaXNGcmVlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBuZWFyWCA9IE1hdGguYWJzKHJhd0NvbCAtIHJpZ2h0RWRnZSkgPD0gMiB8fCAocmF3Q29sID49IGNoaWxkLnggKyBNYXRoLmZsb29yKGNoaWxkLmNvbHMgLyAyKSAmJiByYXdDb2wgPD0gcmlnaHRFZGdlICsgMSk7XG4gICAgY29uc3QgbmVhclkgPSBNYXRoLmFicyhyYXdSb3cgLSBjaGlsZC55KSA8PSAyO1xuXG4gICAgaWYgKG5lYXJYICYmIG5lYXJZKSB7XG4gICAgICBjb25zdCBkaXN0ID0gTWF0aC5hYnMocmF3Q29sIC0gcmlnaHRFZGdlKSArIE1hdGguYWJzKHJhd1JvdyAtIGNoaWxkLnkpO1xuXG4gICAgICBpZiAoIWJlc3RDYW5kaWRhdGUgfHwgZGlzdCA8IGJlc3RDYW5kaWRhdGUuZGlzdCkge1xuICAgICAgICBiZXN0Q2FuZGlkYXRlID0geyBjb2w6IHJpZ2h0RWRnZSwgcm93OiBjaGlsZC55LCBkaXN0IH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGJlc3RDYW5kaWRhdGUpIHtcbiAgICByZXR1cm4geyBjb2w6IGJlc3RDYW5kaWRhdGUuY29sLCByb3c6IGJlc3RDYW5kaWRhdGUucm93IH07XG4gIH1cblxuICBjb25zdCBjbGFtcGVkQ29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG90YWxDb2xzIC0gaW5uZXJDb2xzLCByYXdDb2wpKTtcbiAgY29uc3QgY2xhbXBlZFJvdyA9IE1hdGgubWF4KDAsIHJhd1Jvdyk7XG5cbiAgcmV0dXJuIHsgY29sOiBjbGFtcGVkQ29sLCByb3c6IGNsYW1wZWRSb3cgfTtcbn07XG5cbi8qKlxuICogQWRqdXN0cyBwb3NpdGlvbiBvZiBwYWlyIGlmIGhvcml6b250YWwgb3ZlcmxhcCBvY2N1cnMuXG4gKi9cbmNvbnN0IGFkanVzdEl0ZW1QYWlyID0gKGE6IFRfZ3JpZExheW91dF9ub2RlLCBiOiBUX2dyaWRMYXlvdXRfbm9kZSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBoT3ZlcmxhcCA9ICEoYS54ICsgYS5jb2xzIDw9IGIueCB8fCBhLnggPj0gYi54ICsgYi5jb2xzKTtcblxuICBpZiAoaE92ZXJsYXAgJiYgYi55IDwgYS55ICsgYS5yb3dzKSB7XG4gICAgYi55ID0gYS55ICsgYS5yb3dzO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHZlcnRpY2FsIGNvbGxpc2lvbnMgd2hlbiBpbnNlcnRpbmcgYSBuZXcgY2FyZCBhdCAobmV3Tm9kZS54LCBuZXdOb2RlLnkpLlxuICogQW55IGV4aXN0aW5nIGNhcmQgdGhhdCBob3Jpem9udGFsbHkgb3ZlcmxhcHMgYW5kIHdob3NlIHZlcnRpY2FsIHNwYW4gb3ZlcmxhcHNcbiAqIG9yIGlzIGJlbG93IHRoZSBpbnNlcnRpb24gcG9pbnQgaXMgcHVzaGVkIGRvd24gc28gdGhlcmUgaXMgbm8gb3ZlcmxhcC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVDb2xsaXNpb25zQW5kSW5zZXJ0ID0gKFxuICBjaGlsZHJlbjogQXJyYXk8VF9ncmlkTGF5b3V0X25vZGU+LFxuICBuZXdOb2RlOiBUX2dyaWRMYXlvdXRfbm9kZSxcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpdGVtcyA9IFsuLi5jaGlsZHJlbl07XG5cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgaE92ZXJsYXAgPSAhKGl0ZW0ueCArIGl0ZW0uY29scyA8PSBuZXdOb2RlLnggfHwgaXRlbS54ID49IG5ld05vZGUueCArIG5ld05vZGUuY29scyk7XG4gICAgY29uc3Qgdk92ZXJsYXAgPSAhKGl0ZW0ueSArIGl0ZW0ucm93cyA8PSBuZXdOb2RlLnkgfHwgaXRlbS55ID49IG5ld05vZGUueSArIG5ld05vZGUucm93cyk7XG5cbiAgICBpZiAoaE92ZXJsYXAgJiYgdk92ZXJsYXApIHtcbiAgICAgIGl0ZW0ueSA9IG5ld05vZGUueSArIG5ld05vZGUucm93cztcbiAgICB9XG4gIH1cblxuICBpdGVtcy5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBsZXQgY2hhbmdlZCA9IHRydWU7XG5cbiAgd2hpbGUgKGNoYW5nZWQpIHtcbiAgICBjaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY2hhbmdlZCA9IGFkanVzdEl0ZW1QYWlyKGl0ZW1zW2ldLCBpdGVtc1tqXSkgfHwgY2hhbmdlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGlsZHJlbi5wdXNoKG5ld05vZGUpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHJvcFBheWxvYWQ8VD4oYWN0aXZlUGF5bG9hZDogVCB8IHVuZGVmaW5lZCwgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXIgfCBudWxsKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmIChhY3RpdmVQYXlsb2FkKSB7XG4gICAgcmV0dXJuIGFjdGl2ZVBheWxvYWQ7XG4gIH1cbiAgaWYgKGRhdGFUcmFuc2Zlcikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBkYXRhVHJhbnNmZXIuZ2V0RGF0YSgnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICBpZiAocmF3KSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJhdykgYXMgVDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIElfaG92ZXJlZEdyb3VwIHtcbiAgZ3JvdXBOb2RlOiBUX2dyaWRMYXlvdXRfbm9kZTtcbiAgZ3JvdXBHcmlkc3RlcjogSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBmaW5kSG92ZXJlZEdyb3VwID0gKFxuICBlbGVtZW50czogRWxlbWVudFtdLFxuICBjYW52YXNDb250YWluZXI6IEhUTUxFbGVtZW50LFxuICByb290OiBUX2dyaWRMYXlvdXRfbm9kZSxcbik6IElfaG92ZXJlZEdyb3VwIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qgcm9vdEdyaWRzdGVyID0gY2FudmFzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2dyaWRzdGVyJyk7XG5cbiAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGdyaWRzdGVyRWwgPSAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZ3JpZHN0ZXInID8gZWwgOiBlbC5jbG9zZXN0KCdncmlkc3RlcicpKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cbiAgICBpZiAoZ3JpZHN0ZXJFbCAmJiBncmlkc3RlckVsICE9PSByb290R3JpZHN0ZXIpIHtcbiAgICAgIGNvbnN0IG91dGVySXRlbSA9IGdyaWRzdGVyRWwuY2xvc2VzdCgnZ3JpZHN0ZXItaXRlbScpO1xuICAgICAgY29uc3Qgcm9vdEl0ZW1zID0gcm9vdEdyaWRzdGVyID8gQXJyYXkuZnJvbShyb290R3JpZHN0ZXIucXVlcnlTZWxlY3RvckFsbCgnOnNjb3BlID4gZ3JpZHN0ZXItaXRlbScpKSA6IFtdO1xuICAgICAgY29uc3QgaWR4ID0gb3V0ZXJJdGVtID8gcm9vdEl0ZW1zLmluZGV4T2Yob3V0ZXJJdGVtKSA6IC0xO1xuXG4gICAgICBpZiAoaWR4ID49IDAgJiYgcm9vdC5jaGlsZHJlbj8uW2lkeF0pIHtcbiAgICAgICAgcmV0dXJuIHsgZ3JvdXBOb2RlOiByb290LmNoaWxkcmVuW2lkeF0sIGdyb3VwR3JpZHN0ZXI6IGdyaWRzdGVyRWwgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGVsIG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgaXRlbUVsID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZ3JpZHN0ZXItaXRlbScgPyBlbCA6IGVsLmNsb3Nlc3QoJ2dyaWRzdGVyLWl0ZW0nKTtcbiAgICBpZiAoIWl0ZW1FbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RJdGVtcyA9IHJvb3RHcmlkc3RlciA/IEFycmF5LmZyb20ocm9vdEdyaWRzdGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJzpzY29wZSA+IGdyaWRzdGVyLWl0ZW0nKSkgOiBbXTtcbiAgICBjb25zdCBpZHggPSByb290SXRlbXMuaW5kZXhPZihpdGVtRWwpO1xuICAgIGlmIChpZHggPj0gMCAmJiByb290LmNoaWxkcmVuPy5baWR4XSkge1xuICAgICAgY29uc3Qgbm9kZSA9IHJvb3QuY2hpbGRyZW5baWR4XTtcbiAgICAgIGlmICgobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMCkge1xuICAgICAgICByZXR1cm4geyBncm91cE5vZGU6IG5vZGUsIGdyb3VwR3JpZHN0ZXI6IChpdGVtRWwucXVlcnlTZWxlY3RvcignZ3JpZHN0ZXInKSBhcyBIVE1MRWxlbWVudCB8IG51bGwpID8/IChpdGVtRWwgYXMgSFRNTEVsZW1lbnQpIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBzbmFwcGVkIHNwYXRpYWwgY29vcmRpbmF0ZXMgYW5kIHBpeGVsIGRpbWVuc2lvbnMgZm9yIGRyb3AgZ2hvc3QgcHJldmlldyBib3guXG4gKi9cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVEcm9wR2hvc3QgPSAoXG4gIGV2ZW50OiBEcmFnRXZlbnQsXG4gIGNhbnZhc0NvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLFxuICBwYXlsb2FkOiBUX2dyaWRMYXlvdXRfZXh0ZXJuYWxEcmFnUGF5bG9hZCxcbiAgdG90YWxDb2xzID0gMjQsXG4gIC8vIPCflLQgQ2hp4buBdSBjYW8gbeG7mXQgaMOgbmcgbMaw4bubaSwgdMOtbmggYuG6sW5nIHBpeGVsLiBUcsaw4bubYyDEkcOieSDEkcOzbmcgY+G7qW5nIDY4IG7Dqm4ga2h1bmcgeGVtIHRyxrDhu5tjIHbhur0gc2FpIGPhu6FcbiAgLy8g4bufIG3hurd0IHBo4bqzbmcgY8OzIGjDoG5nIHRo4bqlcCwgbsahaSBkw7luZyBwaOG6o2kg4bqpbiBraHVuZyBj4bunYSB0aMawIHZp4buHbiBy4buTaSB04buxIHbhur0gbOG6oWkuXG4gIHJvd1N0ZXAgPSA2OCxcbik6IFRfZ3JpZExheW91dF9kcm9wR2hvc3QgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhY2FudmFzQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGNhcmRUaXRsZSA9IHBheWxvYWQudGl0bGUgfHwgJ1Ro4bq7JztcbiAgY29uc3QgY2FyZEljb25DbGFzcyA9IHBheWxvYWQuaWNvbkNsYXNzO1xuICBjb25zdCBjYXJkSWNvblRleHQgPSBwYXlsb2FkLmljb25UZXh0O1xuICBjb25zdCBwYXlsb2FkQW55ID0gcGF5bG9hZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbGV0IGRlZmF1bHRDb2xzID0gdHlwZW9mIHBheWxvYWQuY29scyA9PT0gJ251bWJlcidcbiAgICA/IHBheWxvYWQuY29sc1xuICAgIDogKHR5cGVvZiBwYXlsb2FkQW55WydkZWZhdWx0Q29scyddID09PSAnbnVtYmVyJyA/IChwYXlsb2FkQW55WydkZWZhdWx0Q29scyddIGFzIG51bWJlcikgOiAodG90YWxDb2xzID49IDI0ID8gMTIgOiA2KSk7XG4gIGxldCBkZWZhdWx0Um93cyA9IHR5cGVvZiBwYXlsb2FkLnJvd3MgPT09ICdudW1iZXInXG4gICAgPyBwYXlsb2FkLnJvd3NcbiAgICA6ICh0eXBlb2YgcGF5bG9hZEFueVsnZGVmYXVsdFJvd3MnXSA9PT0gJ251bWJlcicgPyAocGF5bG9hZEFueVsnZGVmYXVsdFJvd3MnXSBhcyBudW1iZXIpIDogNCk7XG5cbiAgaWYgKHR5cGVvZiBwYXlsb2FkQW55WydyZXNvbHZlTm9kZSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhbXBsZSA9IChwYXlsb2FkQW55WydyZXNvbHZlTm9kZSddIGFzIChpbnNpZGU6IGJvb2xlYW4pID0+IFRfZ3JpZExheW91dF9uZXdOb2RlIHwgdW5kZWZpbmVkKShmYWxzZSk7XG4gICAgICBpZiAoc2FtcGxlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlLmNvbHMgPT09ICdudW1iZXInKSB7IGRlZmF1bHRDb2xzID0gc2FtcGxlLmNvbHM7IH1cbiAgICAgICAgaWYgKHR5cGVvZiBzYW1wbGUucm93cyA9PT0gJ251bWJlcicpIHsgZGVmYXVsdFJvd3MgPSBzYW1wbGUucm93czsgfVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gZGVmYXVsdCBjb2xzIGFuZCByb3dzXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhZ2VFbCA9IChjYW52YXNDb250YWluZXIucXVlcnlTZWxlY3RvcignI2JpLWNhbnZhcy1zdGFnZScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbCkgPz8gY2FudmFzQ29udGFpbmVyO1xuICBjb25zdCBzdGFnZVJlY3QgPSBzdGFnZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gIGNvbnN0IHJvb3RHcmlkc3RlciA9IHN0YWdlRWwucXVlcnlTZWxlY3RvcignZ3JpZHN0ZXInKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gIGNvbnN0IGdyaWRzdGVyRWwgPSByb290R3JpZHN0ZXIgPz8gc3RhZ2VFbDtcbiAgY29uc3QgZ3JpZHN0ZXJSZWN0ID0gZ3JpZHN0ZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgdW5zY2FsZWRXaWR0aCA9IGdyaWRzdGVyRWwub2Zmc2V0V2lkdGggfHwgZ3JpZHN0ZXJFbC5jbGllbnRXaWR0aCB8fCAwO1xuICBjb25zdCB6b29tID0gKGdyaWRzdGVyUmVjdC53aWR0aCAmJiB1bnNjYWxlZFdpZHRoID4gMClcbiAgICA/IE1hdGgubWF4KDAuMiwgTWF0aC5taW4oMywgZ3JpZHN0ZXJSZWN0LndpZHRoIC8gdW5zY2FsZWRXaWR0aCkpXG4gICAgOiAxO1xuXG4gIGNvbnN0IGVsZW1lbnRzID0gdHlwZW9mIGRvY3VtZW50LmVsZW1lbnRzRnJvbVBvaW50ID09PSAnZnVuY3Rpb24nXG4gICAgPyBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuICAgIDogW107XG4gIC8vIE7GoWkgZMO5bmcga2hhaSBgY2FuRHJvcEluc2lkZUNvbnRhaW5lcjogZmFsc2VgIHRow6wgY29pIG5oxrAgS0jDlE5HIHLDqiBxdWEga2jhu5FpIGdow6lwIG7DoG86IGtow7RuZyB0w7RcbiAgLy8gw7QgbGkgbMOqbiBraOG7kWkgZ2jDqXAsIHbDoCBiw7NuZyB0aOG6oyByxqFpIHbhu4EgdG/huqEgxJHhu5kgY+G6pXAgbeG6t3QgcGjhurNuZyDigJQgxJHDum5nIGNo4buXIGto4buRaSBz4bq9IG7hurFtIGtoaSB0aOG6oy5cbiAgY29uc3QgaG92ZXJlZCA9IHBheWxvYWQuY2FuRHJvcEluc2lkZUNvbnRhaW5lciA9PT0gZmFsc2VcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogZmluZEhvdmVyZWRHcm91cChlbGVtZW50cywgY2FudmFzQ29udGFpbmVyLCByb290KTtcblxuICBjb25zdCBzdGFnZU1vdXNlWCA9IChldmVudC5jbGllbnRYIC0gc3RhZ2VSZWN0LmxlZnQpIC8gem9vbTtcbiAgY29uc3Qgc3RhZ2VNb3VzZVkgPSAoZXZlbnQuY2xpZW50WSAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcblxuICBpZiAoaG92ZXJlZCkge1xuICAgIGNvbnN0IHsgZ3JvdXBOb2RlLCBncm91cEdyaWRzdGVyIH0gPSBob3ZlcmVkO1xuICAgIGNvbnN0IGdyb3VwR3JpZHN0ZXJSZWN0ID0gZ3JvdXBHcmlkc3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBncm91cFN0YWdlTGVmdCA9IChncm91cEdyaWRzdGVyUmVjdC5sZWZ0IC0gc3RhZ2VSZWN0LmxlZnQpIC8gem9vbTtcbiAgICBjb25zdCBncm91cFN0YWdlVG9wID0gKGdyb3VwR3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcblxuICAgIGxldCBpbm5lckNvbHMgPSBkZWZhdWx0Q29scztcbiAgICBsZXQgaW5uZXJSb3dzID0gZGVmYXVsdFJvd3M7XG4gICAgaWYgKHR5cGVvZiBwYXlsb2FkQW55WydyZXNvbHZlTm9kZSddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzYW1wbGVJbnNpZGUgPSAocGF5bG9hZEFueVsncmVzb2x2ZU5vZGUnXSBhcyAoaW5zaWRlOiBib29sZWFuKSA9PiBUX2dyaWRMYXlvdXRfbmV3Tm9kZSB8IHVuZGVmaW5lZCkodHJ1ZSk7XG4gICAgICAgIGlmIChzYW1wbGVJbnNpZGUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHNhbXBsZUluc2lkZS5jb2xzID09PSAnbnVtYmVyJykgeyBpbm5lckNvbHMgPSBzYW1wbGVJbnNpZGUuY29sczsgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygc2FtcGxlSW5zaWRlLnJvd3MgPT09ICdudW1iZXInKSB7IGlubmVyUm93cyA9IHNhbXBsZUluc2lkZS5yb3dzOyB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBkZWZhdWx0IGNvbHMgYW5kIHJvd3NcbiAgICAgIH1cbiAgICB9XG4gICAgaW5uZXJDb2xzID0gTWF0aC5taW4oaW5uZXJDb2xzLCB0b3RhbENvbHMpO1xuXG4gICAgY29uc3QgZ3JvdXBXaWR0aCA9IGdyb3VwR3JpZHN0ZXIuY2xpZW50V2lkdGggfHwgKGdyb3VwR3JpZHN0ZXJSZWN0LndpZHRoIC8gem9vbSkgfHwgNDAwO1xuICAgIGNvbnN0IGNvbFN0ZXAgPSAoZ3JvdXBXaWR0aCArIDIpIC8gdG90YWxDb2xzO1xuICAgIGNvbnN0IHJvd1N0ZXAgPSAxODtcbiAgICBjb25zdCByZWxYID0gKGV2ZW50LmNsaWVudFggLSBncm91cEdyaWRzdGVyUmVjdC5sZWZ0KSAvIHpvb20gKyBncm91cEdyaWRzdGVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVsWSA9IChldmVudC5jbGllbnRZIC0gZ3JvdXBHcmlkc3RlclJlY3QudG9wKSAvIHpvb20gKyBncm91cEdyaWRzdGVyLnNjcm9sbFRvcDtcbiAgICBjb25zdCByYXdDb2wgPSBNYXRoLmZsb29yKHJlbFggLyBjb2xTdGVwKTtcbiAgICBjb25zdCByYXdSb3cgPSBNYXRoLmZsb29yKHJlbFkgLyByb3dTdGVwKTtcbiAgICBjb25zdCBzbmFwID0gZmluZFNuYXBQb3NpdGlvbkluc2lkZUdyb3VwKFxuICAgICAgZ3JvdXBOb2RlLmNoaWxkcmVuID8/IFtdLFxuICAgICAgcmF3Q29sLFxuICAgICAgcmF3Um93LFxuICAgICAgaW5uZXJDb2xzLFxuICAgICAgaW5uZXJSb3dzLFxuICAgICAgdG90YWxDb2xzLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sOiBzbmFwLmNvbCxcbiAgICAgIHJvdzogc25hcC5yb3csXG4gICAgICBjb2xzOiBpbm5lckNvbHMsXG4gICAgICByb3dzOiBpbm5lclJvd3MsXG4gICAgICBwaXhlbExlZnQ6IGdyb3VwU3RhZ2VMZWZ0ICsgc25hcC5jb2wgKiBjb2xTdGVwLFxuICAgICAgcGl4ZWxUb3A6IGdyb3VwU3RhZ2VUb3AgKyBzbmFwLnJvdyAqIHJvd1N0ZXAsXG4gICAgICBwaXhlbFdpZHRoOiBNYXRoLm1heCgzMCwgaW5uZXJDb2xzICogY29sU3RlcCAtIDIpLFxuICAgICAgcGl4ZWxIZWlnaHQ6IE1hdGgubWF4KDIwLCBpbm5lclJvd3MgKiByb3dTdGVwIC0gMiksXG4gICAgICBpc0luc2lkZUdyb3VwOiB0cnVlLFxuICAgICAgdGFyZ2V0UGFyZW50SWQ6IGdyb3VwTm9kZS5pZCxcbiAgICAgIGdyb3VwVGl0bGU6ICdLaOG7kWkgZ2jDqXAnLFxuICAgICAgY2FyZFRpdGxlLFxuICAgICAgY2FyZEljb25DbGFzcyxcbiAgICAgIGNhcmRJY29uVGV4dCxcbiAgICAgIGhvdmVyZWRHcmlkc3RlcjogZ3JvdXBHcmlkc3RlciBhcyBIVE1MRWxlbWVudCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWFyZ2luID0gMTI7XG4gIGNvbnN0IGdyaWRzdGVyV2lkdGggPSB1bnNjYWxlZFdpZHRoIHx8IGdyaWRzdGVyRWwuY2xpZW50V2lkdGggfHwgMTIwMDtcbiAgY29uc3QgY29sU3RlcCA9IE1hdGgubWF4KDIwLCAoZ3JpZHN0ZXJXaWR0aCAtIG1hcmdpbikgLyB0b3RhbENvbHMpO1xuICBjb25zdCBncmlkc3RlclN0YWdlTGVmdCA9IChncmlkc3RlclJlY3QubGVmdCAtIHN0YWdlUmVjdC5sZWZ0KSAvIHpvb207XG4gIGNvbnN0IGdyaWRzdGVyU3RhZ2VUb3AgPSAoZ3JpZHN0ZXJSZWN0LnRvcCAtIHN0YWdlUmVjdC50b3ApIC8gem9vbTtcbiAgY29uc3QgcmVsWCA9IHN0YWdlTW91c2VYIC0gZ3JpZHN0ZXJTdGFnZUxlZnQgKyBncmlkc3RlckVsLnNjcm9sbExlZnQgLSBtYXJnaW47XG4gIGNvbnN0IHJlbFkgPSBzdGFnZU1vdXNlWSAtIGdyaWRzdGVyU3RhZ2VUb3AgKyBncmlkc3RlckVsLnNjcm9sbFRvcCAtIG1hcmdpbjtcbiAgY29uc3QgaXRlbUNvbHMgPSBNYXRoLm1pbihkZWZhdWx0Q29scywgdG90YWxDb2xzKTtcbiAgY29uc3QgY29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odG90YWxDb2xzIC0gaXRlbUNvbHMsIE1hdGguZmxvb3IocmVsWCAvIGNvbFN0ZXApKSk7XG4gIGNvbnN0IHJvdyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmVsWSAvIHJvd1N0ZXApKTtcblxuICByZXR1cm4ge1xuICAgIGNvbCxcbiAgICByb3csXG4gICAgY29sczogaXRlbUNvbHMsXG4gICAgcm93czogZGVmYXVsdFJvd3MsXG4gICAgcGl4ZWxMZWZ0OiBncmlkc3RlclN0YWdlTGVmdCArIG1hcmdpbiArIGNvbCAqIGNvbFN0ZXAsXG4gICAgcGl4ZWxUb3A6IGdyaWRzdGVyU3RhZ2VUb3AgKyBtYXJnaW4gKyByb3cgKiByb3dTdGVwLFxuICAgIHBpeGVsV2lkdGg6IGl0ZW1Db2xzICogY29sU3RlcCAtIG1hcmdpbixcbiAgICBwaXhlbEhlaWdodDogZGVmYXVsdFJvd3MgKiByb3dTdGVwIC0gbWFyZ2luLFxuICAgIGlzSW5zaWRlR3JvdXA6IGZhbHNlLFxuICAgIGNhcmRUaXRsZSxcbiAgICBjYXJkSWNvbkNsYXNzLFxuICAgIGNhcmRJY29uVGV4dCxcbiAgICBob3ZlcmVkR3JpZHN0ZXI6IChyb290R3JpZHN0ZXIgYXMgSFRNTEVsZW1lbnQpID8/IHVuZGVmaW5lZCxcbiAgfTtcbn07XG5cblxuLyoqIFTDrG0ga2jhu5FpIHRoZW8gaWQgdHJvbmcgY8OieSwgxJFpIHPDonUgdsOgbyBt4buNaSBjb250YWluZXIuICovXG5leHBvcnQgY29uc3QgZmluZE5vZGVSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChyb290LmlkID09PSBpZCkge1xuICAgIHJldHVybiByb290O1xuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiByb290LmNoaWxkcmVuID8/IFtdKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kTm9kZVJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBUw6xtIGto4buRaSBDSEEgdHLhu7FjIHRp4bq/cCBj4bunYSBt4buZdCBraOG7kWksIMSRaSBzw6J1IHbDoG8gbeG7jWkgY29udGFpbmVyLiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRQYXJlbnRSZWN1cnNpdmUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUsIGlkOiBzdHJpbmcpOiBUX2dyaWRMYXlvdXRfbm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygcm9vdC5jaGlsZHJlbiA/PyBbXSkge1xuICAgIGlmIChjaGlsZC5pZCA9PT0gaWQpIHtcbiAgICAgIHJldHVybiByb290O1xuICAgIH1cblxuICAgIGNvbnN0IGZvdW5kID0gZmluZFBhcmVudFJlY3Vyc2l2ZShjaGlsZCwgaWQpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogVGjhuqMga2jhu5FpIHbDoG8gxJHDum5nIMO0IG3DoCBnaG9zdCDEkWFuZyBjaOG7iSwgxJHhuql5IGPDoWMga2jhu5FpIHZhIGNo4bqhbSB4deG7kW5nIGTGsOG7m2kuXG4gKlxuICogR2hvc3QgxJFhbmcgbuG6sW0gdHJvbmcgbeG7mXQgY29udGFpbmVyIChgaXNJbnNpZGVHcm91cGApIHRow6wgdGjhuqMgdsOgbyBydeG7mXQgY29udGFpbmVyIMSRw7M7IGtow7RuZyB0w6xtIHRo4bqleVxuICogY29udGFpbmVyIHRow6wgdHLhuqMgYGZhbHNlYCBjaOG7qSBLSMOUTkcgcsahaSB24buBIGzGsOG7m2kgZ+G7kWMg4oCUIHRo4bqjIG5o4bqnbSBj4bqlcCBraMOzIG5o4bqtbiByYSBoxqFuIGzDoCBraMO0bmcgdGjhuqMuXG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wTm9kZUF0Q29vcmRpbmF0ZXMgPSAoXG4gIHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlLFxuICBnaG9zdDogVF9ncmlkTGF5b3V0X2Ryb3BHaG9zdCxcbiAgbmV3Tm9kZTogVF9ncmlkTGF5b3V0X25ld05vZGVcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub2RlVG9BZGQ6IFRfZ3JpZExheW91dF9ub2RlID0ge1xuICAgIC4uLm5ld05vZGUsXG4gICAgaWQ6IG5ld05vZGUuaWQgPz8gdXVpZCgpLFxuICAgIHg6IGdob3N0LmNvbCxcbiAgICB5OiBnaG9zdC5yb3csXG4gICAgY29sczogZ2hvc3QuY29scyxcbiAgICByb3dzOiBnaG9zdC5yb3dzLFxuICB9O1xuXG4gIGlmIChnaG9zdC5pc0luc2lkZUdyb3VwICYmIGdob3N0LnRhcmdldFBhcmVudElkKSB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IGZpbmROb2RlUmVjdXJzaXZlKHJvb3QsIGdob3N0LnRhcmdldFBhcmVudElkKTtcblxuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBwYXJlbnROb2RlLmNoaWxkcmVuID0gcGFyZW50Tm9kZS5jaGlsZHJlbiA/PyBbXTtcbiAgICByZXNvbHZlQ29sbGlzaW9uc0FuZEluc2VydChwYXJlbnROb2RlLmNoaWxkcmVuLCBub2RlVG9BZGQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByb290LmNoaWxkcmVuID0gcm9vdC5jaGlsZHJlbiA/PyBbXTtcbiAgcmVzb2x2ZUNvbGxpc2lvbnNBbmRJbnNlcnQocm9vdC5jaGlsZHJlbiwgbm9kZVRvQWRkKTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLyoqIEto4buRaSBjw7MgcGjhuqNpIENPTlRBSU5FUiBraMO0bmcg4oCUIHThu6ljIGPDsyBraOG7kWkgY29uIGLDqm4gdHJvbmcuICovXG5leHBvcnQgY29uc3QgaXNDb250YWluZXJOb2RlID0gKG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApID4gMDtcblxuLyoqIEto4buRaSBjw7MgbuG6sW0gTOG7kk5HIGLDqm4gdHJvbmcgbeG7mXQgY29udGFpbmVyIGtow7RuZyAoa2jDtG5nIHBo4bqjaSBjb24gdHLhu7FjIHRp4bq/cCBj4bunYSBn4buRYykuICovXG5leHBvcnQgY29uc3QgaXNOb2RlTmVzdGVkSW5zaWRlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIXJvb3Q/LmNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuICFyb290LmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gbm9kZUlkKTtcbn07XG5cbi8qKlxuICogQ8OzIMSRxrDhu6NjIMSR4buVaSBraOG7kWkgxJHGoW4g4oaUIGNvbnRhaW5lciBraMO0bmcuXG4gKlxuICog8J+UtCBCYSBow6BtIGPhu50gbsOgeSBQSOG6okkgbMOgIG5ndeG7k24gZHV5IG5o4bqldCBjaG8gY+G6oyB0aGFuaCBjw7RuZyBj4bulIGPhu6dhIHRoxrAgdmnhu4duIGzhuqtuIG1lbnUgZG8gbsahaSBkw7luZyB04buxXG4gKiBk4buxbmcuIFRyxrDhu5tjIMSRw6J5IG7GoWkgZMO5bmcgcGjhuqNpIGNow6lwIGzhuqFpIHF1eSB04bqvYyDEkeG7gyBk4buxbmcgbWVudSB0csaw4bubYyBsw7pjIHJlbmRlciwgdsOgIGhhaSBi4bqjbiBs4buHY2ggbmhhdVxuICogbeG7l2kga2hpIHRoxrAgdmnhu4duIMSR4buVaSB0cuG6p24gbOG7k25nIGPhuqVwIG3DoCBraMO0bmcgY8OzIGfDrCBiw6FvLlxuICovXG5leHBvcnQgY29uc3QgY2FuVG9nZ2xlVHlwZU5vZGUgPSAocm9vdDogVF9ncmlkTGF5b3V0X25vZGUgfCB1bmRlZmluZWQsIG5vZGU6IFRfZ3JpZExheW91dF9ub2RlKTogYm9vbGVhbiA9PlxuICBpc0NvbnRhaW5lck5vZGUobm9kZSkgfHwgIWlzTm9kZU5lc3RlZEluc2lkZShyb290LCBub2RlLmlkKTtcblxuLyoqIEPDsyDEkcaw4bujYyB0aMOqbSBraOG7kWkgdsOgbyBCw4pOIFRST05HIGto4buRaSBuw6B5IGtow7RuZy4gKi9cbmV4cG9ydCBjb25zdCBjYW5BZGRJbnNpZGVOb2RlID0gKHJvb3Q6IFRfZ3JpZExheW91dF9ub2RlIHwgdW5kZWZpbmVkLCBub2RlOiBUX2dyaWRMYXlvdXRfbm9kZSk6IGJvb2xlYW4gPT5cbiAgaXNDb250YWluZXJOb2RlKG5vZGUpICYmICFpc05vZGVOZXN0ZWRJbnNpZGUocm9vdCwgbm9kZS5pZCk7XG4iXX0=
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cầu nối cho phép một phần tử BÁO CÁO scroll của phần tử khác.
|
|
3
|
+
*
|
|
4
|
+
* 🔴 Vì sao tồn tại: `angular-gridster2` đổi vị trí chuột thành ô lưới bằng
|
|
5
|
+
* `e.clientY + (el.scrollTop - el.offsetTop)` — công thức chỉ đúng khi CHÍNH `<gridster>` là phần tử
|
|
6
|
+
* cuộn. Ở mặt phẳng có THU PHÓNG, việc cuộn nằm ở khung bọc còn `<gridster>` giữ đủ cỡ sân khấu bên
|
|
7
|
+
* trong một tầng `transform: scale`, nên `el.scrollTop` luôn bằng 0: mọi px người dùng cuộn đều vô
|
|
8
|
+
* hình với thư viện. Hệ quả đo được 15/09/2026: tự cuộn lúc kéo không chạy, và nếu nơi dùng tự cuộn
|
|
9
|
+
* thì khối đứng im trong khi mặt phẳng trôi.
|
|
10
|
+
*
|
|
11
|
+
* 🔴 CHỈ vá `scrollTop`/`scrollLeft`. CẤM đụng `offsetWidth`/`offsetHeight`: `setGridSize()` của
|
|
12
|
+
* gridster đọc hai cái đó để tính bề rộng cột, đè vào là vỡ lưới.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Cắm cầu nối, trả về hàm gỡ.
|
|
16
|
+
*
|
|
17
|
+
* `zoom` là hàm chứ không phải số: mức phóng đổi bất cứ lúc nào, đọc lại mỗi lần truy cập mới đúng.
|
|
18
|
+
* Chia cho mức phóng vì `offsetTop` là px BỐ CỤC còn scroll của khung bọc đã nhân thu phóng — không
|
|
19
|
+
* quy đổi thì ở mức khác 100% khối trôi nhanh hơn hoặc chậm hơn con trỏ.
|
|
20
|
+
*/
|
|
21
|
+
export const bridgeScrollBetweenElements = (target, source, zoom) => {
|
|
22
|
+
const mucPhong = () => {
|
|
23
|
+
const value = zoom();
|
|
24
|
+
return Number.isFinite(value) && value > 0 ? value : 1;
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(target, 'scrollTop', {
|
|
27
|
+
configurable: true,
|
|
28
|
+
get: () => source.scrollTop / mucPhong(),
|
|
29
|
+
set: (val) => {
|
|
30
|
+
source.scrollTop = val * mucPhong();
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
Object.defineProperty(target, 'scrollLeft', {
|
|
34
|
+
configurable: true,
|
|
35
|
+
get: () => source.scrollLeft / mucPhong(),
|
|
36
|
+
set: (val) => {
|
|
37
|
+
source.scrollLeft = val * mucPhong();
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
// Xoá thuộc tính RIÊNG vừa cắm là trả lại accessor gốc của `Element` — nhờ `configurable: true`.
|
|
41
|
+
return () => {
|
|
42
|
+
delete target['scrollTop'];
|
|
43
|
+
delete target['scrollLeft'];
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Bước cuộn cho một trục khi con trỏ đang ở sát mép vùng cuộn.
|
|
48
|
+
*
|
|
49
|
+
* Trả `0` khi con trỏ còn ở giữa. Mép DƯỚI/PHẢI được soát trước: con trỏ ra ngoài hẳn khung thì
|
|
50
|
+
* `pos` vượt `max`, phải cuộn xuôi chứ không phải ngược.
|
|
51
|
+
*/
|
|
52
|
+
export const edgeScrollStep = (options) => {
|
|
53
|
+
// 🔴 Mép kích hoạt KHÔNG được rộng quá 1/4 cạnh khung. Khung nhỏ (ruột khối ghép nhiều khi chỉ cao
|
|
54
|
+
// vài chục px) thì hai vùng mép chạm nhau, đặt con trỏ ở đâu trong đó mặt phẳng cũng tự trôi — và
|
|
55
|
+
// trôi cả hai chiều ngược nhau tuỳ thứ tự kiểm.
|
|
56
|
+
const mep = Math.min(options.edge, (options.max - options.min) / 4);
|
|
57
|
+
if (options.max - options.pos < mep) {
|
|
58
|
+
return options.step;
|
|
59
|
+
}
|
|
60
|
+
if (options.pos - options.min < mep) {
|
|
61
|
+
return -options.step;
|
|
62
|
+
}
|
|
63
|
+
return 0;
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLWJyaWRnZS5kZWZpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2dyaWQtbGF5b3V0L3NyYy9kZWZpbmVzL3Njcm9sbC1icmlkZ2UuZGVmaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUVIOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLE1BQW1CLEVBQ25CLE1BQW1CLEVBQ25CLElBQWtCLEVBQ0osRUFBRTtJQUNoQixNQUFNLFFBQVEsR0FBRyxHQUFXLEVBQUU7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFFckIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRTtRQUN6QyxZQUFZLEVBQUUsSUFBSTtRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUU7UUFDeEMsR0FBRyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDdEMsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRTtRQUMxQyxZQUFZLEVBQUUsSUFBSTtRQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsR0FBRyxRQUFRLEVBQUU7UUFDekMsR0FBRyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDdkMsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILGlHQUFpRztJQUNqRyxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQVEsTUFBNkMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRSxPQUFRLE1BQTZDLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQU05QixFQUFVLEVBQUU7SUFDWCxtR0FBbUc7SUFDbkcsa0dBQWtHO0lBQ2xHLGdEQUFnRDtJQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVwRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ+G6p3UgbuG7kWkgY2hvIHBow6lwIG3hu5l0IHBo4bqnbiB04butIELDgU8gQ8OBTyBzY3JvbGwgY+G7p2EgcGjhuqduIHThu60ga2jDoWMuXG4gKlxuICog8J+UtCBWw6wgc2FvIHThu5NuIHThuqFpOiBgYW5ndWxhci1ncmlkc3RlcjJgIMSR4buVaSB24buLIHRyw60gY2h14buZdCB0aMOgbmggw7QgbMaw4bubaSBi4bqxbmdcbiAqIGBlLmNsaWVudFkgKyAoZWwuc2Nyb2xsVG9wIC0gZWwub2Zmc2V0VG9wKWAg4oCUIGPDtG5nIHRo4bupYyBjaOG7iSDEkcO6bmcga2hpIENIw41OSCBgPGdyaWRzdGVyPmAgbMOgIHBo4bqnbiB04butXG4gKiBjdeG7mW4uIOG7niBt4bq3dCBwaOG6s25nIGPDsyBUSFUgUEjDk05HLCB2aeG7h2MgY3Xhu5luIG7hurFtIOG7nyBraHVuZyBi4buNYyBjw7JuIGA8Z3JpZHN0ZXI+YCBnaeG7ryDEkeG7pyBj4buhIHPDom4ga2jhuqV1IGLDqm5cbiAqIHRyb25nIG3hu5l0IHThuqduZyBgdHJhbnNmb3JtOiBzY2FsZWAsIG7Dqm4gYGVsLnNjcm9sbFRvcGAgbHXDtG4gYuG6sW5nIDA6IG3hu41pIHB4IG5nxrDhu51pIGTDuW5nIGN14buZbiDEkeG7gXUgdsO0XG4gKiBow6xuaCB24bubaSB0aMawIHZp4buHbi4gSOG7hyBxdeG6oyDEkW8gxJHGsOG7o2MgMTUvMDkvMjAyNjogdOG7sSBjdeG7mW4gbMO6YyBrw6lvIGtow7RuZyBjaOG6oXksIHbDoCBu4bq/dSBuxqFpIGTDuW5nIHThu7EgY3Xhu5luXG4gKiB0aMOsIGto4buRaSDEkeG7qW5nIGltIHRyb25nIGtoaSBt4bq3dCBwaOG6s25nIHRyw7RpLlxuICpcbiAqIPCflLQgQ0jhu4ggdsOhIGBzY3JvbGxUb3BgL2BzY3JvbGxMZWZ0YC4gQ+G6pE0gxJHhu6VuZyBgb2Zmc2V0V2lkdGhgL2BvZmZzZXRIZWlnaHRgOiBgc2V0R3JpZFNpemUoKWAgY+G7p2FcbiAqIGdyaWRzdGVyIMSR4buNYyBoYWkgY8OhaSDEkcOzIMSR4buDIHTDrW5oIGLhu4EgcuG7mW5nIGPhu5l0LCDEkcOoIHbDoG8gbMOgIHbhu6EgbMaw4bubaS5cbiAqL1xuXG4vKipcbiAqIEPhuq9tIGPhuqd1IG7hu5FpLCB0cuG6oyB24buBIGjDoG0gZ+G7oS5cbiAqXG4gKiBgem9vbWAgbMOgIGjDoG0gY2jhu6kga2jDtG5nIHBo4bqjaSBz4buROiBt4bupYyBwaMOzbmcgxJHhu5VpIGLhuqV0IGPhu6kgbMO6YyBuw6BvLCDEkeG7jWMgbOG6oWkgbeG7l2kgbOG6p24gdHJ1eSBj4bqtcCBt4bubaSDEkcO6bmcuXG4gKiBDaGlhIGNobyBt4bupYyBwaMOzbmcgdsOsIGBvZmZzZXRUb3BgIGzDoCBweCBC4buQIEPhu6RDIGPDsm4gc2Nyb2xsIGPhu6dhIGtodW5nIGLhu41jIMSRw6MgbmjDom4gdGh1IHBow7NuZyDigJQga2jDtG5nXG4gKiBxdXkgxJHhu5VpIHRow6wg4bufIG3hu6ljIGtow6FjIDEwMCUga2jhu5FpIHRyw7RpIG5oYW5oIGjGoW4gaG/hurdjIGNo4bqtbSBoxqFuIGNvbiB0cuG7jy5cbiAqL1xuZXhwb3J0IGNvbnN0IGJyaWRnZVNjcm9sbEJldHdlZW5FbGVtZW50cyA9IChcbiAgdGFyZ2V0OiBIVE1MRWxlbWVudCxcbiAgc291cmNlOiBIVE1MRWxlbWVudCxcbiAgem9vbTogKCkgPT4gbnVtYmVyXG4pOiAoKCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCBtdWNQaG9uZyA9ICgpOiBudW1iZXIgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gem9vbSgpO1xuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgJiYgdmFsdWUgPiAwID8gdmFsdWUgOiAxO1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsICdzY3JvbGxUb3AnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogKCkgPT4gc291cmNlLnNjcm9sbFRvcCAvIG11Y1Bob25nKCksXG4gICAgc2V0OiAodmFsOiBudW1iZXIpID0+IHtcbiAgICAgIHNvdXJjZS5zY3JvbGxUb3AgPSB2YWwgKiBtdWNQaG9uZygpO1xuICAgIH0sXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCAnc2Nyb2xsTGVmdCcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiAoKSA9PiBzb3VyY2Uuc2Nyb2xsTGVmdCAvIG11Y1Bob25nKCksXG4gICAgc2V0OiAodmFsOiBudW1iZXIpID0+IHtcbiAgICAgIHNvdXJjZS5zY3JvbGxMZWZ0ID0gdmFsICogbXVjUGhvbmcoKTtcbiAgICB9LFxuICB9KTtcblxuICAvLyBYb8OhIHRodeG7mWMgdMOtbmggUknDik5HIHbhu6thIGPhuq9tIGzDoCB0cuG6oyBs4bqhaSBhY2Nlc3NvciBn4buRYyBj4bunYSBgRWxlbWVudGAg4oCUIG5o4budIGBjb25maWd1cmFibGU6IHRydWVgLlxuICByZXR1cm4gKCkgPT4ge1xuICAgIGRlbGV0ZSAodGFyZ2V0IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pWydzY3JvbGxUb3AnXTtcbiAgICBkZWxldGUgKHRhcmdldCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVsnc2Nyb2xsTGVmdCddO1xuICB9O1xufTtcblxuLyoqXG4gKiBCxrDhu5tjIGN14buZbiBjaG8gbeG7mXQgdHLhu6VjIGtoaSBjb24gdHLhu48gxJFhbmcg4bufIHPDoXQgbcOpcCB2w7luZyBjdeG7mW4uXG4gKlxuICogVHLhuqMgYDBgIGtoaSBjb24gdHLhu48gY8OybiDhu58gZ2nhu69hLiBNw6lwIETGr+G7mkkvUEjhuqJJIMSRxrDhu6NjIHNvw6F0IHRyxrDhu5tjOiBjb24gdHLhu48gcmEgbmdvw6BpIGjhurNuIGtodW5nIHRow6xcbiAqIGBwb3NgIHbGsOG7o3QgYG1heGAsIHBo4bqjaSBjdeG7mW4geHXDtGkgY2jhu6kga2jDtG5nIHBo4bqjaSBuZ8aw4bujYy5cbiAqL1xuZXhwb3J0IGNvbnN0IGVkZ2VTY3JvbGxTdGVwID0gKG9wdGlvbnM6IHtcbiAgcG9zOiBudW1iZXI7XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbiAgZWRnZTogbnVtYmVyO1xuICBzdGVwOiBudW1iZXI7XG59KTogbnVtYmVyID0+IHtcbiAgLy8g8J+UtCBNw6lwIGvDrWNoIGhv4bqhdCBLSMOUTkcgxJHGsOG7o2MgcuG7mW5nIHF1w6EgMS80IGPhuqFuaCBraHVuZy4gS2h1bmcgbmjhu48gKHJ14buZdCBraOG7kWkgZ2jDqXAgbmhp4buBdSBraGkgY2jhu4kgY2FvXG4gIC8vIHbDoGkgY2jhu6VjIHB4KSB0aMOsIGhhaSB2w7luZyBtw6lwIGNo4bqhbSBuaGF1LCDEkeG6t3QgY29uIHRy4buPIOG7nyDEkcOidSB0cm9uZyDEkcOzIG3hurd0IHBo4bqzbmcgY8WpbmcgdOG7sSB0csO0aSDigJQgdsOgXG4gIC8vIHRyw7RpIGPhuqMgaGFpIGNoaeG7gXUgbmfGsOG7o2MgbmhhdSB0deG7syB0aOG7qSB04buxIGtp4buDbS5cbiAgY29uc3QgbWVwID0gTWF0aC5taW4ob3B0aW9ucy5lZGdlLCAob3B0aW9ucy5tYXggLSBvcHRpb25zLm1pbikgLyA0KTtcblxuICBpZiAob3B0aW9ucy5tYXggLSBvcHRpb25zLnBvcyA8IG1lcCkge1xuICAgIHJldHVybiBvcHRpb25zLnN0ZXA7XG4gIH1cbiAgaWYgKG9wdGlvbnMucG9zIC0gb3B0aW9ucy5taW4gPCBtZXApIHtcbiAgICByZXR1cm4gLW9wdGlvbnMuc3RlcDtcbiAgfVxuXG4gIHJldHVybiAwO1xufTtcbiJdfQ==
|