This commit is contained in:
锦恢 2024-04-18 12:41:24 +08:00
parent 5481921722
commit 03c4d1b715
7 changed files with 454 additions and 207 deletions

7
.eslintrc.js Normal file
View File

@ -0,0 +1,7 @@
module.exports = {
// ... 其他配置
ignorePatterns: ['**/*.d.ts'],
env: {
es6: true
}
};

47
src/hook/types/index.d.ts vendored Normal file
View File

@ -0,0 +1,47 @@
export interface RenderElements {
grid: HTMLDivElement
view: HTMLDivElement
values: HTMLDivElement
}
export interface ChangoItem {
kind: string
wave: Array<number | string>
lineVao: WebGLVertexArrayObject
maskVao: WebGLVertexArrayObject
}
export interface WireInfoItem {
kind: string
link: string
name: string
size: number
parent: WireInfoItem
type: string
}
export interface Pstate {
width: number
height: number
xScale: number
xOffset: number
yOffset: number
yStep: number
yDuty: number
}
export interface WebGLLocation {
colors: WebGLUniformLocation
shifts: WebGLUniformLocation
scale: WebGLUniformLocation
offset: WebGLUniformLocation
pos: number
widthShifts: WebGLUniformLocation
gl: WebGL2RenderingContext
}
export interface PerspectivePoint {
x: number
y: number
color: number
}

1
src/hook/types/index.js Normal file
View File

@ -0,0 +1 @@
module.Render = {};

View File

@ -1,115 +1,9 @@
'use strict';
// 控制颜色
const gl_Colors = new Float32Array([
0, 0, 0, 0, // 0: 空
0, 0, 1, 1, // 1: 高阻态 Z
0.2, 0.847, 0.1, 1, // 2: value = 0 用于 width = 1 的信号
0.2, 0.847, 0.1, 1, // 3: value = 1 用于 width = 1 的信号
0.9, 0.2, 0.2, 1, // 4: 未知态 X
.5, 1, 1, 1, // 5: vec 用于 width > 1 的信号
1, 1, 0, 1, // 6: yellow
1, 0, 1, 1, // 7: strange purple
0, 1, 0, .5, // 8: (l L) weak 0
0, 1, 1, .5, // 9: (h H) weak 1
1, 0, 0, .5, // 10: (w W) weak unknown
0, 0, 1, 0.1, // 11: 高阻态 Z 遮罩
0.2, 0.847, 0.1, 0.1, // 12: value = 0 遮罩
0.2, 0.847, 0.1, 0.1, // 13: value = 1 遮罩
0.9, 0.2, 0.2, 0.1, // 14: 未知态 X 遮罩
.5, 1, 1, 0.1 // 15: vec 遮罩
]);
// 控制方向
const gl_Shifts = new Float32Array([ // 14
0, 0, // 0
1, -1, // 1
1, 0, // 2
1, 1, // 3
-1, -1, // 4
-1, 0, // 5
-1, 1 // 6
]);
const gl_Shifts_map = new Map();
gl_Shifts_map.set(-1, 4);
gl_Shifts_map.set(0, 0);
gl_Shifts_map.set(1, 1);
const lineWidth = 0.004; // 不能写为 0.0045 这样会因为插值造成不同线段的宽度不一致的问题
const widthShift = lineWidth / 2;
const gl_WidthShifts = new Float32Array([
0, widthShift, // 0
- widthShift, widthShift, // 1
- widthShift, 0, // 2
- widthShift, - widthShift, // 3
0, - widthShift, // 4
widthShift, - widthShift, // 5
widthShift, 0, // 6
widthShift, widthShift // 7
]);
class ShaderMaker {
/**
*
* @param {'VERTEX_SHADER' | 'FRAGMENT_SHADER'} type
* @param {string} source
*/
constructor(type, source) {
this.type = type;
this.source = source;
}
/**
* @param {WebGL2RenderingContext} gl
* @return {WebGLShader}
*/
make(gl) {
const shader = gl.createShader(gl[this.type]);
gl.shaderSource(shader, this.source);
gl.compileShader(shader);
const ok = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
if (!ok) {
console.log('创建类型为 ' + type + ' 的着色器失败!');
}
return shader;
}
}
const vertexShaderScalar = new ShaderMaker('VERTEX_SHADER', `#version 300 es
in uvec4 pos;
out vec4 v_color;
uniform vec2 scale;
uniform vec2 offset;
uniform vec4 colors[16];
uniform vec2 shifts[7]; // 基础八位图偏移量为了性能pos 只传入整数,需要的坐标负数由该值提供
uniform vec2 widthShifts[8]; // 用于构造线宽的偏移
void main() {
v_color = colors[pos.z];
vec2 shift = shifts[pos.y];
vec2 widthShift = widthShifts[pos.w];
gl_Position = vec4(
float(pos.x) * scale.x + offset.x + float(widthShift.x),
float(shift.x) * scale.y + offset.y + float(widthShift.y),
1, 1
);
}`);
const fragmentShader = new ShaderMaker('FRAGMENT_SHADER', `#version 300 es
precision mediump float;
in vec4 v_color;
out vec4 outColor;
void main() {
outColor = v_color;
}`);
const { gl_Colors, gl_Shifts, gl_Shifts_map, gl_WidthShifts } = require('./render-utils.js');
const { vertexShader, fragmentShader } = require('./render-shader.js');
// const { ChangoItem } = require('./types.d.ts');
class WebGL2WaveRender {
/**
@ -188,7 +82,7 @@ class WebGL2WaveRender {
*/
initProgram(gl) {
const program = gl.createProgram();
gl.attachShader(program, vertexShaderScalar.make(gl));
gl.attachShader(program, vertexShader.make(gl));
gl.attachShader(program, fragmentShader.make(gl));
gl.linkProgram(program);
gl.useProgram(program);
@ -289,6 +183,27 @@ class WebGL2WaveRender {
}
}
/**
*
* @param {number} x1
* @param {number} y1
* @param {number} x2
* @param {number} y2
* @param {number} color
* @param {number} wsIndex
* @returns {number[]}
*/
makeRectangleVertices(x1, y1, x2, y2, color, wsIndex = 0) {
const r1 = [x1, gl_Shifts_map.get(y2), color, wsIndex];
const r2 = [x1, gl_Shifts_map.get(y1), color, wsIndex];
const r3 = [x2, gl_Shifts_map.get(y1), color, wsIndex];
const r4 = [x2, gl_Shifts_map.get(y2), color, wsIndex];
return [
...r1, ...r2, ...r3,
...r1, ...r3, ...r4,
]
}
/**
*
* @param {Array<string | number>} wave
@ -383,23 +298,33 @@ class WebGL2WaveRender {
// 制作 maskVertices
for (let i = 0; i < pointNum; ++ i) {
const p1 = perspectivePoints[i];
// 开头就有一条线
if (i === 0 && p1.y === 1) {
while (perspectivePoints[++ i] && perspectivePoints[i].y === 1);
// 回退
if (-- i > 0) {
// 四元组: (x, yshift_index, color_index, width_shift_index)
const rectangleVertices = this.makeRectangleVertices(p1.x, 1, perspectivePoints[i].x, -1, p1.color + 10, 4);
// 三角图元画矩形
maskVertices.push(...rectangleVertices);
continue;
}
}
// 上升沿才使用
const p2 = perspectivePoints[i + 1];
const p3 = perspectivePoints[i + 2];
if (p1 === undefined || p2 === undefined || p3 === undefined) {
continue;
}
if (p2.y > p1.y) {
// 矩形的四个点
// 四元组: (x, yshift_index, color_index, width_shift_index)
const r1 = [p1.x, gl_Shifts_map.get(p1.y), p2.color + 10, 4];
const r2 = [p2.x, gl_Shifts_map.get(p2.y), p2.color + 10, 4];
const r3 = [p3.x, gl_Shifts_map.get(p3.y), p2.color + 10, 4];
const r4 = [p3.x, gl_Shifts_map.get(p1.y), p2.color + 10, 4];
const rectangleVertices = this.makeRectangleVertices(p2.x, p2.y, p3.x, p1.y, p2.color + 10, 4);
// 三角图元画矩形
maskVertices.push(
...r1, ...r2, ...r3,
...r1, ...r3, ...r4,
);
maskVertices.push(...rectangleVertices);
}
}

View File

@ -0,0 +1,61 @@
class ShaderMaker {
/**
*
* @param {'VERTEX_SHADER' | 'FRAGMENT_SHADER'} type
* @param {string} source
*/
constructor(type, source) {
this.type = type;
this.source = source;
}
/**
* @param {WebGL2RenderingContext} gl
* @return {WebGLShader}
*/
make(gl) {
const shader = gl.createShader(gl[this.type]);
gl.shaderSource(shader, this.source);
gl.compileShader(shader);
const ok = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
if (!ok) {
console.log('创建类型为 ' + type + ' 的着色器失败!');
}
return shader;
}
}
const vertexShader = new ShaderMaker('VERTEX_SHADER', `#version 300 es
in uvec4 pos;
out vec4 v_color;
uniform vec2 scale;
uniform vec2 offset;
uniform vec4 colors[16];
uniform vec2 shifts[7]; // 基础八位图偏移量为了性能pos 只传入整数,需要的坐标负数由该值提供
uniform vec2 widthShifts[8]; // 用于构造线宽的偏移
void main() {
v_color = colors[pos.z];
vec2 shift = shifts[pos.y];
vec2 widthShift = widthShifts[pos.w];
gl_Position = vec4(
float(pos.x) * scale.x + offset.x + float(widthShift.x),
float(shift.x) * scale.y + offset.y + float(widthShift.y),
1, 1
);
}`);
const fragmentShader = new ShaderMaker('FRAGMENT_SHADER', `#version 300 es
precision mediump float;
in vec4 v_color;
out vec4 outColor;
void main() {
outColor = v_color;
}`);
export {
vertexShader,
fragmentShader
}

View File

@ -0,0 +1,92 @@
function getRatio() {
var ratio=0;
var screen=window.screen;
var ua=navigator.userAgent.toLowerCase();
if(window.devicePixelRatio !== undefined) {
ratio=window.devicePixelRatio;
}
else if(~ua.indexOf('msie')) {
if(screen.deviceXDPI && screen.logicalXDPI) {
ratio=screen.deviceXDPI/screen.logicalXDPI;
}
}
else if(window.outerWidth !== undefined && window.innerWidth !== undefined) {
ratio=window.outerWidth/window.innerWidth;
}
if(ratio) {
ratio=Math.round(ratio*100);
}
return ratio;
}
const screenHeightPixel = window.screen.height * getRatio() / 100;
const screenWidthPixel = window.screen.width * getRatio() / 100;
// 控制颜色
const gl_Colors = new Float32Array([
0, 0, 0, 0, // 0: 空
0, 0, 1, 1, // 1: 高阻态 Z
0.2, 0.847, 0.1, 1, // 2: value = 0 用于 width = 1 的信号
0.2, 0.847, 0.1, 1, // 3: value = 1 用于 width = 1 的信号
0.9, 0.2, 0.2, 1, // 4: 未知态 X
.5, 1, 1, 1, // 5: vec 用于 width > 1 的信号
1, 1, 0, 1, // 6: yellow
1, 0, 1, 1, // 7: strange purple
0, 1, 0, .5, // 8: (l L) weak 0
0, 1, 1, .5, // 9: (h H) weak 1
1, 0, 0, .5, // 10: (w W) weak unknown
0, 0, 1, 0.1, // 11: 高阻态 Z 遮罩
0.2, 0.847, 0.1, 0.1, // 12: value = 0 遮罩
0.2, 0.847, 0.1, 0.1, // 13: value = 1 遮罩
0.9, 0.2, 0.2, 0.1, // 14: 未知态 X 遮罩
.5, 1, 1, 0.1 // 15: vec 遮罩
]);
// 控制方向
const gl_Shifts = new Float32Array([ // 14
0, 0, // 0
1, -1, // 1
1, 0, // 2
1, 1, // 3
-1, -1, // 4
-1, 0, // 5
-1, 1 // 6
]);
const gl_Shifts_map = new Map();
gl_Shifts_map.set(-1, 4);
gl_Shifts_map.set(0, 0);
gl_Shifts_map.set(1, 1);
const lineWidth = 0.004 * 3800 / screenWidthPixel; // 不能写为 0.0045 这样会因为插值造成不同线段的宽度不一致的问题
const widthShift = lineWidth / 2;
const gl_WidthShifts = new Float32Array([
0, widthShift, // 0
- widthShift, widthShift, // 1
- widthShift, 0, // 2
- widthShift, - widthShift, // 3
0, - widthShift, // 4
widthShift, - widthShift, // 5
widthShift, 0, // 6
widthShift, widthShift // 7
]);
export {
getRatio,
gl_Colors,
gl_Shifts,
lineWidth,
widthShift,
gl_WidthShifts,
gl_Shifts_map,
screenWidthPixel,
screenHeightPixel
};

View File

@ -1,13 +1,13 @@
<mxfile host="65bd71144e">
<diagram id="fareUikBvdjO0hJmng89" name="第 1 页">
<mxGraphModel dx="1683" dy="929" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="1" shadow="0">
<mxGraphModel dx="1355" dy="695" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="1" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="101" value="\[p_1\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="101" value="\[p_1\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="1340" y="1490" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="94" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;opacity=30;" vertex="1" parent="1">
<mxCell id="94" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f0a30a;fontColor=#000000;strokeColor=#BD7000;opacity=30;" parent="1" vertex="1">
<mxGeometry x="1090" y="802.5" width="150" height="267.5" as="geometry"/>
</mxCell>
<mxCell id="2" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
@ -148,424 +148,538 @@
<mxCell id="W18mgVVtD26MayaxvlpH-41" value="\[w&lt;br style=&quot;font-size: 18px;&quot;&gt;\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#FFFFFF;fontSize=18;" parent="1" vertex="1">
<mxGeometry x="-10" y="520" width="50" height="60" as="geometry"/>
</mxCell>
<mxCell id="40" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1" source="126">
<mxCell id="40" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" parent="1" source="126" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="825" y="1070" as="sourcePoint"/>
<mxPoint x="1090" y="1070" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="44" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1" target="42">
<mxCell id="44" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" target="42" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="824.9999999999998" y="1070" as="sourcePoint"/>
<mxPoint x="1094.9999999999998" y="1070" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="47" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="42" target="46">
<mxCell id="47" value="" style="edgeStyle=none;html=1;" parent="1" source="42" target="46" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="49" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="42" target="48">
<mxCell id="49" value="" style="edgeStyle=none;html=1;" parent="1" source="42" target="48" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="51" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="42" target="50">
<mxCell id="51" value="" style="edgeStyle=none;html=1;" parent="1" source="42" target="50" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="54" style="edgeStyle=none;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="42" target="56">
<mxCell id="54" style="edgeStyle=none;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" parent="1" source="42" target="56" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="764.9999999999998" y="1010" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="55" style="edgeStyle=none;html=1;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="42" target="57">
<mxCell id="55" style="edgeStyle=none;html=1;exitX=0;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="42" target="57" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="764.9999999999998" y="1130" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="90" style="edgeStyle=none;html=1;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="42" target="89">
<mxCell id="90" style="edgeStyle=none;html=1;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="42" target="89" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="42" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="42" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="815" y="1060" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="46" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="46" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="815" y="960" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="715" y="1060" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="50" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="50" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="815" y="1160" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="56" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="56" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="715" y="960" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="57" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="57" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="715" y="1160" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="58" value="\[(0, \frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="58" value="\[(0, \frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="770" y="925" width="110" height="30" as="geometry"/>
</mxCell>
<mxCell id="59" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="59" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="870" y="1450" as="sourcePoint"/>
<mxPoint x="670" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="60" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="60" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="670" y="1530" as="sourcePoint"/>
<mxPoint x="670" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="61" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="61" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="640" y="1490" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="62" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="62" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="670" y="1490" as="sourcePoint"/>
<mxPoint x="910" y="1490" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="63" value="\[p_1\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="63" value="\[p_1\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="880" y="1490" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="64" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="64" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="910" y="1490" as="sourcePoint"/>
<mxPoint x="910" y="1330" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="65" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="65" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1070" y="1330" as="sourcePoint"/>
<mxPoint x="910" y="1330" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="66" value="\[p_2\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="66" value="\[p_2\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="880" y="1300" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="67" value="\[p_3\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="67" value="\[p_3\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="1040" y="1300" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="68" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="68" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="870" y="1450" as="sourcePoint"/>
<mxPoint x="670" y="1530" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="69" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="69" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="910" y="1530" as="sourcePoint"/>
<mxPoint x="670" y="1530" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="70" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="70" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="910" y="1530" as="sourcePoint"/>
<mxPoint x="870" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="71" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="71" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="910" y="1530" as="sourcePoint"/>
<mxPoint x="950" y="1490" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="72" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="72" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="870" y="1450" as="sourcePoint"/>
<mxPoint x="870" y="1330" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="73" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="73" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="870" y="1330" as="sourcePoint"/>
<mxPoint x="910" y="1290" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="74" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="74" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="950" y="1490" as="sourcePoint"/>
<mxPoint x="950" y="1370" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="75" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="75" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1070" y="1370" as="sourcePoint"/>
<mxPoint x="950" y="1370" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="76" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="76" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1070" y="1290" as="sourcePoint"/>
<mxPoint x="904" y="1290" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="77" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="77" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1070" y="1370" as="sourcePoint"/>
<mxPoint x="1070" y="1290" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="78" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="78" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="950" y="1490" as="sourcePoint"/>
<mxPoint x="870" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="79" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="79" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="950" y="1370" as="sourcePoint"/>
<mxPoint x="870" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="80" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="80" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="950" y="1370" as="sourcePoint"/>
<mxPoint x="870" y="1330" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="81" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="81" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="950" y="1370" as="sourcePoint"/>
<mxPoint x="910" y="1290" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="82" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="82" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="950" y="1370" as="sourcePoint"/>
<mxPoint x="1070" y="1290" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="83" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="83" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="640" y="1490" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="84" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="84" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="670" y="1490" as="sourcePoint"/>
<mxPoint x="910" y="1490" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="85" value="\[(-\frac{w}{2}&lt;br&gt;, \frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="85" value="\[(-\frac{w}{2}&lt;br&gt;, \frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="635" y="920" width="100" height="40" as="geometry"/>
</mxCell>
<mxCell id="86" value="\[(-\frac{w}{2}, 0&lt;br&gt;)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="86" value="\[(-\frac{w}{2}, 0&lt;br&gt;)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="620" y="1050" width="110" height="40" as="geometry"/>
</mxCell>
<mxCell id="87" value="\[(-\frac{w}{2}&lt;br&gt;, -\frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="87" value="\[(-\frac{w}{2}&lt;br&gt;, -\frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="630" y="1175" width="100" height="40" as="geometry"/>
</mxCell>
<mxCell id="88" value="\[(0, -\frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="88" value="\[(0, -\frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="765" y="1190" width="120" height="30" as="geometry"/>
</mxCell>
<mxCell id="89" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="89" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="905" y="1160" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="91" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxCell id="91" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1089.999999999967" y="1069.6599999999999" as="sourcePoint"/>
<mxPoint x="1090" y="800" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="92" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxCell id="92" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1240" y="800" as="sourcePoint"/>
<mxPoint x="1090" y="800" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="93" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxCell id="93" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1240" y="1070" as="sourcePoint"/>
<mxPoint x="1240" y="800" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="95" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxCell id="95" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1370" y="1070" as="sourcePoint"/>
<mxPoint x="1240" y="1070" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="96" value="\[(\frac{w}{2}&lt;br&gt;, -\frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="96" value="\[(\frac{w}{2}&lt;br&gt;, -\frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="930" y="1175" width="100" height="40" as="geometry"/>
</mxCell>
<mxCell id="97" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="97" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1329.9999999999998" y="1449.9999999999998" as="sourcePoint"/>
<mxPoint x="1129.9999999999998" y="1449.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="98" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="98" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1129.9999999999998" y="1530" as="sourcePoint"/>
<mxPoint x="1129.9999999999998" y="1449.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="99" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="99" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="1100" y="1490" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="100" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="100" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1129.9999999999998" y="1490" as="sourcePoint"/>
<mxPoint x="1369.9999999999998" y="1490" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="102" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="102" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1369.9999999999998" y="1490" as="sourcePoint"/>
<mxPoint x="1369.9999999999998" y="1329.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="103" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="103" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1530" y="1329.9999999999998" as="sourcePoint"/>
<mxPoint x="1369.9999999999998" y="1329.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="104" value="\[p_2\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="104" value="\[p_2\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="1340" y="1300" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="105" value="\[p_3\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="105" value="\[p_3\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="1500" y="1300" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="106" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="106" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1329.9999999999998" y="1449.9999999999998" as="sourcePoint"/>
<mxPoint x="1129.9999999999998" y="1530" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="107" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="107" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1410" y="1530" as="sourcePoint"/>
<mxPoint x="1129.9999999999998" y="1530" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="110" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="110" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1329.9999999999998" y="1449.9999999999998" as="sourcePoint"/>
<mxPoint x="1330" y="1270" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="111" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="111" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1410" y="1530" as="sourcePoint"/>
<mxPoint x="1409.9999999999998" y="1369.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="112" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="112" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1530" y="1369.9999999999998" as="sourcePoint"/>
<mxPoint x="1409.9999999999998" y="1369.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="115" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="115" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1410" y="1530" as="sourcePoint"/>
<mxPoint x="1329.9999999999998" y="1449.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="117" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" edge="1" parent="1">
<mxCell id="117" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1129.9999999999998" y="1490" as="sourcePoint"/>
<mxPoint x="1369.9999999999998" y="1490" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="118" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="118" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1530" y="1280" as="sourcePoint"/>
<mxPoint x="1330" y="1279.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="119" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="119" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1530" y="1370" as="sourcePoint"/>
<mxPoint x="1530" y="1279.5799999999997" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="120" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="120" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1410" y="1370" as="sourcePoint"/>
<mxPoint x="1330" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="121" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="121" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1410" y="1369.9999999999998" as="sourcePoint"/>
<mxPoint x="1330" y="1280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="122" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxCell id="122" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1530" y="1280" as="sourcePoint"/>
<mxPoint x="1410" y="1369.9999999999998" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="116" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" vertex="1" parent="1">
<mxCell id="116" value="\[p_0\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;" parent="1" vertex="1">
<mxGeometry x="1100" y="1490" width="60" height="30" as="geometry"/>
</mxCell>
<mxCell id="123" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="123" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="905" y="960" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="124" value="" style="edgeStyle=none;html=1;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="42" target="123">
<mxCell id="124" value="" style="edgeStyle=none;html=1;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" source="42" target="123" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="970" y="1070" as="sourcePoint"/>
<mxPoint x="970" y="990" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="125" value="\[(\frac{w}{2}&lt;br&gt;, \frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="125" value="\[(\frac{w}{2}&lt;br&gt;, \frac{w}{2})\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="920" y="915" width="100" height="40" as="geometry"/>
</mxCell>
<mxCell id="127" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1" source="42" target="126">
<mxCell id="127" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" parent="1" source="42" target="126" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="835" y="1070" as="sourcePoint"/>
<mxPoint x="1090" y="1070" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="126" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" vertex="1" parent="1">
<mxCell id="126" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fontColor=#000000;fillColor=#f0a30a;strokeColor=#BD7000;" parent="1" vertex="1">
<mxGeometry x="905" y="1060" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="128" value="\[(\frac{w}{2}, 0)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxCell id="128" value="\[(\frac{w}{2}, 0)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="925" y="1035" width="110" height="30" as="geometry"/>
</mxCell>
<mxCell id="129" value="" style="endArrow=none;dashed=1;html=1;" edge="1" parent="1">
<mxCell id="129" value="" style="endArrow=none;dashed=1;html=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="969.42" as="sourcePoint"/>
<mxPoint x="620" y="969.42" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="130" value="" style="endArrow=none;dashed=1;html=1;" edge="1" parent="1">
<mxCell id="130" value="" style="endArrow=none;dashed=1;html=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="1174" as="sourcePoint"/>
<mxPoint x="620" y="1174" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="131" value="" style="endArrow=classic;startArrow=classic;html=1;" edge="1" parent="1">
<mxCell id="131" value="" style="endArrow=classic;startArrow=classic;html=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="580" y="1170" as="sourcePoint"/>
<mxPoint x="580" y="969.42" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="132" value="\[w&lt;br style=&quot;font-size: 18px;&quot;&gt;\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#FFFFFF;fontSize=18;" vertex="1" parent="1">
<mxCell id="132" value="\[w&lt;br style=&quot;font-size: 18px;&quot;&gt;\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#FFFFFF;fontSize=18;" parent="1" vertex="1">
<mxGeometry x="520" y="1040" width="50" height="60" as="geometry"/>
</mxCell>
<mxCell id="133" value="" style="endArrow=none;dashed=1;html=1;" edge="1" parent="1">
<mxCell id="133" value="" style="endArrow=none;dashed=1;html=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="570" y="1450" as="sourcePoint"/>
<mxPoint x="650" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="134" value="" style="endArrow=none;dashed=1;html=1;" edge="1" parent="1">
<mxCell id="134" value="" style="endArrow=none;dashed=1;html=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="570" y="1530" as="sourcePoint"/>
<mxPoint x="650" y="1530" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="135" value="" style="endArrow=classic;startArrow=classic;html=1;" edge="1" parent="1">
<mxCell id="135" value="" style="endArrow=classic;startArrow=classic;html=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="610" y="1530" as="sourcePoint"/>
<mxPoint x="610" y="1450" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="136" value="\[w&lt;br style=&quot;font-size: 18px;&quot;&gt;\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#FFFFFF;fontSize=18;" vertex="1" parent="1">
<mxCell id="136" value="\[w&lt;br style=&quot;font-size: 18px;&quot;&gt;\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#FFFFFF;fontSize=18;" parent="1" vertex="1">
<mxGeometry x="550" y="1460" width="50" height="60" as="geometry"/>
</mxCell>
<mxCell id="137" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1680" y="1000" as="sourcePoint"/>
<mxPoint x="1640" y="1158.82" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="138" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1640" y="1160" as="sourcePoint"/>
<mxPoint x="1680" y="1320" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="139" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2040" y="1000" as="sourcePoint"/>
<mxPoint x="1680" y="1000" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="140" value="\[p_0=(x_0, y_0)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;fontSize=17;" vertex="1" parent="1">
<mxGeometry x="1480" y="1120" width="160" height="30" as="geometry"/>
</mxCell>
<mxCell id="141" value="\[p_1=(x_1, y_1)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;fontSize=17;" vertex="1" parent="1">
<mxGeometry x="2160" y="1130" width="160" height="30" as="geometry"/>
</mxCell>
<mxCell id="143" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2040" y="1320" as="sourcePoint"/>
<mxPoint x="1680" y="1320" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="144" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2080" y="1160" as="sourcePoint"/>
<mxPoint x="2040" y="1318.8199999999997" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="145" value="" style="endArrow=none;html=1;strokeWidth=2;fillColor=#f0a30a;strokeColor=#F0B102;startArrow=none;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2040" y="1000" as="sourcePoint"/>
<mxPoint x="2080" y="1160" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="146" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2070" y="1360" as="sourcePoint"/>
<mxPoint x="1650" y="1360" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="147" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2120" y="1160" as="sourcePoint"/>
<mxPoint x="2070" y="1360" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="149" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1650" y="1360" as="sourcePoint"/>
<mxPoint x="1600" y="1160" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="150" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2120" y="1158.95" as="sourcePoint"/>
<mxPoint x="2040" y="1159" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="151" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1680" y="1160" as="sourcePoint"/>
<mxPoint x="1600" y="1160.05" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="152" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2000" y="1280" as="sourcePoint"/>
<mxPoint x="1720" y="1280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="153" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1720" y="1280" as="sourcePoint"/>
<mxPoint x="1680" y="1158.95" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="154" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2040" y="1160" as="sourcePoint"/>
<mxPoint x="2000" y="1280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="155" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1650" y="1360" as="sourcePoint"/>
<mxPoint x="1720" y="1280" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="156" value="" style="endArrow=none;html=1;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#F0B102;dashed=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2070" y="1360" as="sourcePoint"/>
<mxPoint x="2000" y="1275" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="157" value="\[(\frac{w}{2}, 0)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="1670" y="1130" width="110" height="30" as="geometry"/>
</mxCell>
<mxCell id="158" value="\[(-\frac{w}{2}, 0)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="1470" y="1175" width="120" height="30" as="geometry"/>
</mxCell>
<mxCell id="159" value="\[(\frac{w}{2}, 0)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="1700" y="1240" width="110" height="30" as="geometry"/>
</mxCell>
<mxCell id="160" value="\[p_0=(x_0 + title, -1)\]" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;fontColor=#F0B102;fontSize=17;" vertex="1" parent="1">
<mxGeometry x="1605" y="1370" width="190" height="30" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>