diff --git a/__pycache__/settings.cpython-34.pyc b/__pycache__/settings.cpython-34.pyc index 9cc7890..12e0ede 100644 Binary files a/__pycache__/settings.cpython-34.pyc and b/__pycache__/settings.cpython-34.pyc differ diff --git a/data.txt b/data.txt new file mode 100644 index 0000000..981a468 --- /dev/null +++ b/data.txt @@ -0,0 +1 @@ +{"enterprise1": [{"id": 0}, {"id": 1}, {"0": 0, "320": 0.6390000000000001, "450": -0.43600000000000005, "790": 0.9450000000000001, "390": 0.7330000000000001, "840": -0.8400000000000002, "140": 0.8180000000000001, "720": 0.8330000000000001, "440": 0.7960000000000002, "530": 1, "20": 0.8029999999999999, "430": -0.42400000000000004, "150": -0.13699999999999996, "290": 0.6060000000000001, "70": 0.021000000000000026, "550": 1, "680": 0.803, "490": 1, "850": -0.8490000000000002, "110": 0.863, "820": -0.8130000000000002, "760": -0.7710000000000001, "980": -0.7060000000000001, "890": -0.906, "700": -0.7500000000000001, "id": 2}, {"0": 0.1, "750": 0.8630000000000001, "130": 0.809, "260": 0.9, "790": -0.8010000000000002, "390": 0.7420000000000001, "10": 0.10000000000000003, "140": 0.8270000000000001, "770": 0.921, "270": 0.3480000000000001, "400": -0.40900000000000003, "920": -1, "20": 0.8059999999999999, "id": 3, "150": -0.15799999999999997, "280": 0.8, "670": -0.42000000000000015, "160": 0.23900000000000005, "290": 0.25100000000000006, "420": -0.41500000000000004, "710": -0.7590000000000001, "990": -0.7150000000000001, "40": 0.30000000000000004, "170": 0.4480000000000002, "690": -0.8320000000000001, "430": 0.6810000000000002, "560": 0.9, "50": -0.09999999999999998, "180": 0.5570000000000002, "960": -1, "310": 0.6300000000000001, "440": 0.8140000000000002, "820": 0.5540000000000002, "650": -0.5170000000000001, "190": 0.5570000000000002, "320": 0.3540000000000001, "450": 0.7200000000000002, "950": -1.0, "70": 0.024000000000000025, "840": 0.6750000000000002, "780": -0.7890000000000001, "330": -0.2459999999999999, "930": -1, "80": 0.030000000000000023, "760": -0.7800000000000001, "850": -0.8520000000000002, "340": 0.903, "90": 0.03600000000000003, "220": 0.8600000000000001, "350": 1, "480": -0.44500000000000006, "610": -0.4960000000000001, "100": 0.051000000000000045, "230": 0.9660000000000001, "360": -0.352, "490": -0.4720000000000001, "620": 0.6420000000000001, "110": 0.896, "880": -1, "680": -0.7290000000000001, "500": 0.9, "830": 0.5660000000000002, "630": -0.5020000000000001, "120": 1, "980": -0.8, "890": -1, "380": -0.37, "810": 0.8510000000000001, "510": 1}, {"0": 0.2, "960": -1, "130": 0.8, "260": 1.0, "10": 2.7755575615628914e-17, "780": -0.7920000000000001, "400": -0.4, "920": 0.8, "530": 1, "id": 4, "150": 0.6360000000000001, "280": 0.9, "160": 0.24200000000000005, "290": 0.8, "420": 0.7750000000000001, "550": 1, "680": 0.806, "170": 0.4510000000000002, "430": 0.7810000000000001, "560": 0.8, "180": 0.4570000000000002, "990": -0.7210000000000001, "310": 0.6210000000000001, "440": 0.7930000000000001, "190": 0.6570000000000001, "320": 0.6420000000000001, "450": 0.6200000000000002, "70": 0.009000000000000029, "840": 0.7750000000000001, "330": 0.8450000000000001, "460": 1, "590": 0.6150000000000001, "720": 0.8360000000000001, "120": 0.06000000000000005, "850": 0.9, "340": 0.906, "90": 0.04200000000000004, "350": 0.9, "480": -0.45100000000000007, "610": 0.6270000000000001, "230": 1, "360": -0.355, "490": -0.4780000000000001, "110": 0.866, "500": 0.8, "830": 0.5690000000000002, "630": 1, "760": -0.7830000000000001, "980": -0.7090000000000001, "890": -0.909, "810": 0.7510000000000001, "510": 1}, {"0": 0.30000000000000004, "490": -0.4810000000000001, "130": 0.9, "260": 1, "630": 0.9450000000000001, "70": 0.012000000000000028, "840": 0.6750000000000002, "330": 0.9450000000000001, "810": 0.6510000000000001, "460": 1, "450": 0.5200000000000002, "590": 0.6180000000000001, "440": 0.8170000000000002, "850": -0.8550000000000002, "610": 0.6300000000000001, "340": 0.9, "id": 5, "150": -0.14299999999999996, "280": 0.8, "90": 0.04500000000000004, "220": 0.8630000000000001, "350": 0.8, "480": -0.45400000000000007, "290": 0.7000000000000001, "960": -1, "710": -0.7620000000000001, "230": 0.9, "680": 0.7000000000000001, "170": 0.3420000000000002, "760": 0.909, "500": 0.9, "430": 0.6810000000000002, "560": 0.7000000000000001, "790": -0.8040000000000002, "180": 0.5570000000000002, "990": -0.7240000000000001, "310": 0.7120000000000001, "820": 0.5570000000000002, "120": 0.06300000000000006, "20": 0.8089999999999999, "920": 0.9, "10": 0.10000000000000003, "190": 0.5570000000000002}, {"0": 0.4, "640": -0.5110000000000001, "130": 0.06900000000000006, "260": 1, "630": 1, "390": -0.391, "520": -0.4900000000000001, "10": 0.20000000000000004, "810": 0.7510000000000001, "450": 0.6200000000000002, "590": 0.6060000000000001, "720": 0.8390000000000001, "440": 0.8050000000000002, "850": -0.8580000000000002, "340": 1.0, "id": 6, "150": -0.16099999999999998, "280": 0.9, "410": 0.7690000000000001, "350": 0.9, "480": -0.4690000000000001, "290": 0.6000000000000001, "960": -1, "550": 1, "230": 0.8, "360": 0.7270000000000001, "170": 0.44200000000000017, "760": 0.912, "500": 1.0, "110": 0.899, "840": 0.7750000000000001, "560": 0.6000000000000001, "680": 0.809, "690": -0.7440000000000001, "180": 0.6570000000000001, "310": 0.6120000000000001, "430": 0.5810000000000002, "120": 1, "20": 0.8119999999999999, "920": 1.0, "330": 1, "190": 0.6570000000000001}, {"0": 0.5, "640": -0.5140000000000001, "130": 0.07200000000000006, "260": 0.9, "520": -0.4930000000000001, "650": -0.5200000000000001, "400": -0.41200000000000003, "920": 0.9, "id": 7, "150": 0.5360000000000001, "280": 1.0, "290": 0.7000000000000001, "420": -0.41800000000000004, "550": 1, "680": 0.812, "810": 0.6510000000000001, "430": 0.4810000000000002, "560": 0.7000000000000001, "180": 0.5570000000000002, "990": -0.7270000000000001, "310": 0.6330000000000001, "440": 0.6930000000000002, "820": -0.8250000000000002, "10": 0.30000000000000004, "190": 0.7570000000000001, "960": -1, "450": 0.7200000000000002, "70": 0.015000000000000027, "840": 0.6750000000000002, "330": 1, "930": -1, "590": 0.6090000000000001, "80": 0.03300000000000002, "120": 1, "850": 1.0, "340": 1, "90": 0.04800000000000004, "350": 1.0, "480": -0.4570000000000001, "720": 0.8420000000000001, "610": -0.4990000000000001, "230": 0.7000000000000001, "490": -0.4840000000000001, "110": 0.872, "500": 0.9, "630": -0.5050000000000001, "760": 0.9660000000000001, "170": 0.3420000000000002}, {"0": 0.4, "490": 1, "130": 0.8, "260": 1.0, "630": 1, "70": 0.018000000000000026, "840": -0.8370000000000002, "780": -0.7950000000000002, "10": 0.4, "810": 0.7510000000000001, "140": 0.8150000000000001, "450": -0.43300000000000005, "400": -0.403, "440": 0.7930000000000001, "850": 0.9, "340": 1, "id": 8, "150": 0.43600000000000017, "280": 1, "350": 0.9, "290": 0.6030000000000001, "960": 0.6240000000000001, "390": 0.7300000000000001, "230": 0.8, "360": -0.358, "170": 0.4540000000000002, "760": 0.8660000000000001, "430": -0.42100000000000004, "560": 0.8, "680": 0.6000000000000001, "790": 0.9420000000000001, "180": 0.4570000000000002, "830": 0.5720000000000002, "310": 0.6240000000000001, "820": -0.8100000000000002, "120": 0.9, "500": 0.8, "920": 0.8, "700": -0.7470000000000001, "330": 1, "190": 0.6570000000000001}, {"0": 0.30000000000000004, "960": 0.5240000000000001, "130": 0.9, "260": 1, "630": 0.9, "840": 0.8750000000000001, "10": 0.5, "810": 0.6510000000000001, "450": 0.9200000000000002, "720": 0.8450000000000001, "120": 1.0, "850": -0.8610000000000002, "340": 0.9, "id": 9, "150": -0.14899999999999997, "280": 0.9, "350": 0.8, "290": 0.9, "550": 1, "230": 0.9, "680": 0.8150000000000001, "170": 0.3420000000000002, "760": 0.915, "500": 0.9, "110": 0.875, "560": 0.7000000000000001, "920": 0.9, "180": 0.3570000000000002, "310": 0.5120000000000001, "430": 0.6810000000000002, "440": 0.8080000000000002, "20": 0.815, "330": 1, "190": 0.7570000000000001}, {"0": 0, "320": 0.1540000000000001, "770": -0.6830000000000002, "950": -1, "390": 0.7390000000000001, "330": -0.2459999999999999, "140": -0.22799999999999995, "270": 0.3480000000000001, "720": 0.8480000000000001, "340": -0.44599999999999995, "id": 10, "920": -0.9, "90": 0.13300000000000003, "670": -0.6200000000000001, "160": 0.13600000000000004, "610": -0.3930000000000001, "960": -0.9, "70": 0.027000000000000024, "550": 1, "40": 0.30000000000000004, "690": -0.8320000000000001, "110": 0.878, "880": -1.0, "680": 0.8180000000000001, "50": 0.10000000000000003, "820": -0.8190000000000002, "310": 0.3540000000000001, "980": -0.6000000000000001, "890": -0.8}, {"0": 0.4, "640": -0.5080000000000001, "130": 0.06600000000000006, "260": 0.9, "390": -0.388, "520": -0.4870000000000001, "10": 0.6, "920": 0.8, "id": 11, "150": -0.15499999999999997, "280": 0.8, "410": 0.7660000000000001, "290": 0.8, "680": 0.8, "810": 0.5510000000000002, "430": 0.7810000000000001, "560": 0.6000000000000001, "690": -0.7410000000000001, "180": 0.25700000000000023, "990": -0.7180000000000001, "310": 0.41200000000000014, "440": 0.7930000000000001, "190": 0.8570000000000001, "960": -1, "450": 1, "70": 0.006000000000000028, "840": 0.9750000000000001, "330": 0.9, "590": 0.6030000000000001, "120": 0.9, "850": 1, "340": 1.0, "90": 0.039000000000000035, "350": 0.7000000000000001, "480": -0.4660000000000001, "610": 0.6240000000000001, "230": 1.0, "360": 0.7240000000000001, "490": -0.4750000000000001, "110": 0.893, "500": 1.0, "630": 1.0, "760": 1, "170": 0.44200000000000017}, {"0": 0, "320": 0.6360000000000001, "770": -0.7830000000000001, "950": 0.6210000000000001, "330": -0.3459999999999999, "140": -0.12799999999999995, "270": 0.24800000000000008, "720": 0.8510000000000001, "530": 1, "340": -0.346, "id": 12, "920": -1.0, "90": 0.03300000000000003, "670": -0.7200000000000001, "160": 0.23600000000000004, "610": -0.4930000000000001, "960": -1.0, "550": 1, "40": 0.20000000000000004, "940": 0.6120000000000001, "690": -0.7320000000000001, "110": 0.881, "880": -1, "680": 0.8210000000000001, "50": 2.7755575615628914e-17, "820": -0.8310000000000002, "310": 0.2540000000000001, "760": -0.7680000000000001, "980": -0.7030000000000001, "890": -0.903}, {"0": 0.30000000000000004, "320": 0.6450000000000001, "130": 0.9, "260": 0.8, "630": 1, "840": 1, "10": 0.7, "810": 0.4510000000000002, "450": 0.9, "120": 1.0, "530": 1, "340": 1, "id": 13, "150": -0.15199999999999997, "980": -0.7120000000000001, "280": 0.7000000000000001, "350": 0.8, "290": 0.7000000000000001, "960": 0.7240000000000001, "950": 0.6240000000000001, "230": 0.9, "680": 0.9, "170": 0.3420000000000002, "760": -0.7770000000000001, "940": 0.6150000000000001, "500": 1, "430": 0.8810000000000001, "560": 0.5000000000000001, "920": 0.7000000000000001, "180": 0.3570000000000002, "310": 0.5120000000000001, "820": -0.8340000000000002, "440": 0.8110000000000002, "20": 0.818, "890": -0.912, "850": -0.8640000000000002, "330": 1.0, "190": 0.9570000000000001}, {"0": 0, "750": 0.8660000000000001, "450": -0.43900000000000006, "390": 0.7450000000000001, "840": -0.8430000000000002, "140": 0.8300000000000001, "780": -0.7980000000000002, "770": 0.924, "720": 0.8540000000000001, "id": 14, "790": 0.9480000000000001, "400": -0.406, "290": 0.25400000000000006, "100": 0.05400000000000005, "550": 1, "360": -0.361, "170": 0.4570000000000002, "110": 0.884, "680": 0.8240000000000001, "310": 0.6270000000000001, "430": -0.42700000000000005, "700": -0.7530000000000001, "490": 1, "830": 0.5750000000000002}, {"0": 0.20000000000000004, "960": 0.8240000000000001, "130": 0.8, "260": 0.9, "630": 1, "840": 0.9, "10": 0.7999999999999999, "810": 0.5510000000000002, "450": 1.0, "720": 0.8570000000000001, "120": 1, "850": 1, "340": 0.9, "id": 15, "150": -0.16399999999999998, "280": 0.6000000000000001, "350": 0.7000000000000001, "290": 0.6000000000000001, "550": 1, "230": 1.0, "680": 0.8270000000000001, "170": 0.44200000000000017, "760": 0.9, "110": 0.902, "560": 0.6000000000000001, "920": 0.6000000000000001, "180": 0.4570000000000002, "310": 0.6120000000000001, "430": 0.9810000000000001, "440": 0.7930000000000001, "500": 1, "330": 0.9, "190": 0.8570000000000001}, {"0": 0, "320": 0.1540000000000001, "130": 0.803, "770": -0.6830000000000002, "950": -1, "840": -0.8460000000000002, "780": -0.7860000000000001, "330": -0.0459999999999999, "680": -0.7230000000000001, "140": -0.13099999999999995, "450": -0.44200000000000006, "270": 0.3480000000000001, "400": -0.394, "210": 0.24500000000000005, "610": -0.3930000000000001, "340": -0.44599999999999995, "id": 16, "790": 0.9510000000000001, "920": -0.812, "90": 0.13300000000000003, "670": -0.42000000000000015, "160": -0.06399999999999997, "290": 0.6120000000000001, "960": -1.0, "40": 0.1, "700": -0.7560000000000001, "170": 0.4450000000000002, "980": -1, "620": 0.6360000000000001, "690": -0.6320000000000001, "430": -0.43000000000000005, "880": -0.9640000000000002, "360": -0.349, "50": 0.10000000000000003, "310": 0.6150000000000001, "660": 1, "890": -0.9, "380": -0.376, "490": 1, "830": 0.5630000000000002}, {"0": 0, "320": 0.2540000000000001, "130": 0.806, "950": -0.9, "710": -0.7650000000000001, "460": 1, "330": -0.1459999999999999, "140": -0.12799999999999995, "770": -0.7830000000000001, "590": 0.6120000000000001, "120": 0.05700000000000005, "340": -0.346, "270": 0.44800000000000006, "790": -0.8070000000000002, "920": -0.912, "90": 0.03300000000000003, "220": 0.8660000000000001, "670": -0.3200000000000002, "160": 0.03600000000000003, "610": -0.4930000000000001, "960": -1, "40": 0.2, "620": 0.6390000000000001, "690": -0.7320000000000001, "880": -1, "680": -0.7260000000000001, "50": 2.7755575615628914e-17, "820": 0.5600000000000002, "310": 0.45400000000000007, "440": 0.8200000000000002, "980": -0.9, "890": -1.0, "380": -0.367, "id": 17}, {"0": 0, "480": -0.4630000000000001, "960": -1, "550": 1, "390": -0.385, "360": 0.7210000000000001, "940": 0.6090000000000001, "140": -0.13399999999999995, "690": -0.7380000000000001, "110": 0.89, "720": 0.8600000000000001, "680": 0.8300000000000001, "210": 0.24800000000000005, "660": 1, "id": 18, "950": 0.6180000000000001, "820": -0.8280000000000002, "410": 0.7630000000000001, "380": -0.379}, {"0": 0, "320": 0.2540000000000001, "130": 0.812, "950": -1, "390": -0.382, "330": -0.1459999999999999, "680": -0.7320000000000001, "140": -0.32799999999999996, "770": -0.5830000000000002, "270": 0.44800000000000006, "340": -0.346, "480": -0.4600000000000001, "920": -1, "90": 0.03300000000000003, "410": 0.7600000000000001, "670": -0.5200000000000001, "160": 0.23600000000000004, "610": -0.4930000000000001, "960": -1, "40": 0.20000000000000004, "620": 0.6450000000000001, "690": -0.7350000000000001, "880": -0.9, "360": 0.7180000000000001, "50": 2.7755575615628914e-17, "310": 0.45400000000000007, "980": -0.7000000000000001, "890": -0.9, "380": -0.373, "id": 19}], "enterprise0": [{"id": 0}, {"id": 1}, {"0": 0, "320": 0.6390000000000001, "450": -0.43600000000000005, "790": 0.9450000000000001, "390": 0.7330000000000001, "840": -0.8400000000000002, "140": 0.8180000000000001, "720": 0.8330000000000001, "440": 0.7960000000000002, "530": 1, "20": 0.8029999999999999, "430": -0.42400000000000004, "150": -0.13699999999999996, "290": 0.6060000000000001, "70": 0.021000000000000026, "550": 1, "680": 0.803, "490": 1, "850": -0.8490000000000002, "110": 0.863, "820": -0.8130000000000002, "760": -0.7710000000000001, "980": -0.7060000000000001, "890": -0.906, "700": -0.7500000000000001, "id": 2}, {"0": 0.1, "750": 0.8630000000000001, "130": 0.809, "260": 0.9, "790": -0.8010000000000002, "390": 0.7420000000000001, "10": 0.10000000000000003, "140": 0.8270000000000001, "770": 0.921, "270": 0.3480000000000001, "400": -0.40900000000000003, "920": -1, "20": 0.8059999999999999, "id": 3, "150": -0.15799999999999997, "280": 0.8, "670": -0.42000000000000015, "160": 0.23900000000000005, "290": 0.25100000000000006, "420": -0.41500000000000004, "710": -0.7590000000000001, "990": -0.7150000000000001, "40": 0.30000000000000004, "170": 0.4480000000000002, "690": -0.8320000000000001, "430": 0.6810000000000002, "560": 0.9, "50": -0.09999999999999998, "180": 0.5570000000000002, "960": -1, "310": 0.6300000000000001, "440": 0.8140000000000002, "820": 0.5540000000000002, "650": -0.5170000000000001, "190": 0.5570000000000002, "320": 0.3540000000000001, "450": 0.7200000000000002, "950": -1.0, "70": 0.024000000000000025, "840": 0.6750000000000002, "780": -0.7890000000000001, "330": -0.2459999999999999, "930": -1, "80": 0.030000000000000023, "760": -0.7800000000000001, "850": -0.8520000000000002, "340": 0.903, "90": 0.03600000000000003, "220": 0.8600000000000001, "350": 1, "480": -0.44500000000000006, "610": -0.4960000000000001, "100": 0.051000000000000045, "230": 0.9660000000000001, "360": -0.352, "490": -0.4720000000000001, "620": 0.6420000000000001, "110": 0.896, "880": -1, "680": -0.7290000000000001, "500": 0.9, "830": 0.5660000000000002, "630": -0.5020000000000001, "120": 1, "980": -0.8, "890": -1, "380": -0.37, "810": 0.8510000000000001, "510": 1}, {"0": 0.2, "960": -1, "130": 0.8, "260": 1.0, "10": 2.7755575615628914e-17, "780": -0.7920000000000001, "400": -0.4, "920": 0.8, "530": 1, "id": 4, "150": 0.6360000000000001, "280": 0.9, "160": 0.24200000000000005, "290": 0.8, "420": 0.7750000000000001, "550": 1, "680": 0.806, "170": 0.4510000000000002, "430": 0.7810000000000001, "560": 0.8, "180": 0.4570000000000002, "990": -0.7210000000000001, "310": 0.6210000000000001, "440": 0.7930000000000001, "190": 0.6570000000000001, "320": 0.6420000000000001, "450": 0.6200000000000002, "70": 0.009000000000000029, "840": 0.7750000000000001, "330": 0.8450000000000001, "460": 1, "590": 0.6150000000000001, "720": 0.8360000000000001, "120": 0.06000000000000005, "850": 0.9, "340": 0.906, "90": 0.04200000000000004, "350": 0.9, "480": -0.45100000000000007, "610": 0.6270000000000001, "230": 1, "360": -0.355, "490": -0.4780000000000001, "110": 0.866, "500": 0.8, "830": 0.5690000000000002, "630": 1, "760": -0.7830000000000001, "980": -0.7090000000000001, "890": -0.909, "810": 0.7510000000000001, "510": 1}, {"0": 0.30000000000000004, "490": -0.4810000000000001, "130": 0.9, "260": 1, "630": 0.9450000000000001, "70": 0.012000000000000028, "840": 0.6750000000000002, "330": 0.9450000000000001, "810": 0.6510000000000001, "460": 1, "450": 0.5200000000000002, "590": 0.6180000000000001, "440": 0.8170000000000002, "850": -0.8550000000000002, "610": 0.6300000000000001, "340": 0.9, "id": 5, "150": -0.14299999999999996, "280": 0.8, "90": 0.04500000000000004, "220": 0.8630000000000001, "350": 0.8, "480": -0.45400000000000007, "290": 0.7000000000000001, "960": -1, "710": -0.7620000000000001, "230": 0.9, "680": 0.7000000000000001, "170": 0.3420000000000002, "760": 0.909, "500": 0.9, "430": 0.6810000000000002, "560": 0.7000000000000001, "790": -0.8040000000000002, "180": 0.5570000000000002, "990": -0.7240000000000001, "310": 0.7120000000000001, "820": 0.5570000000000002, "120": 0.06300000000000006, "20": 0.8089999999999999, "920": 0.9, "10": 0.10000000000000003, "190": 0.5570000000000002}, {"0": 0.4, "640": -0.5110000000000001, "130": 0.06900000000000006, "260": 1, "630": 1, "390": -0.391, "520": -0.4900000000000001, "10": 0.20000000000000004, "810": 0.7510000000000001, "450": 0.6200000000000002, "590": 0.6060000000000001, "720": 0.8390000000000001, "440": 0.8050000000000002, "850": -0.8580000000000002, "340": 1.0, "id": 6, "150": -0.16099999999999998, "280": 0.9, "410": 0.7690000000000001, "350": 0.9, "480": -0.4690000000000001, "290": 0.6000000000000001, "960": -1, "550": 1, "230": 0.8, "360": 0.7270000000000001, "170": 0.44200000000000017, "760": 0.912, "500": 1.0, "110": 0.899, "840": 0.7750000000000001, "560": 0.6000000000000001, "680": 0.809, "690": -0.7440000000000001, "180": 0.6570000000000001, "310": 0.6120000000000001, "430": 0.5810000000000002, "120": 1, "20": 0.8119999999999999, "920": 1.0, "330": 1, "190": 0.6570000000000001}, {"0": 0.5, "640": -0.5140000000000001, "130": 0.07200000000000006, "260": 0.9, "520": -0.4930000000000001, "650": -0.5200000000000001, "400": -0.41200000000000003, "920": 0.9, "id": 7, "150": 0.5360000000000001, "280": 1.0, "290": 0.7000000000000001, "420": -0.41800000000000004, "550": 1, "680": 0.812, "810": 0.6510000000000001, "430": 0.4810000000000002, "560": 0.7000000000000001, "180": 0.5570000000000002, "990": -0.7270000000000001, "310": 0.6330000000000001, "440": 0.6930000000000002, "820": -0.8250000000000002, "10": 0.30000000000000004, "190": 0.7570000000000001, "960": -1, "450": 0.7200000000000002, "70": 0.015000000000000027, "840": 0.6750000000000002, "330": 1, "930": -1, "590": 0.6090000000000001, "80": 0.03300000000000002, "120": 1, "850": 1.0, "340": 1, "90": 0.04800000000000004, "350": 1.0, "480": -0.4570000000000001, "720": 0.8420000000000001, "610": -0.4990000000000001, "230": 0.7000000000000001, "490": -0.4840000000000001, "110": 0.872, "500": 0.9, "630": -0.5050000000000001, "760": 0.9660000000000001, "170": 0.3420000000000002}, {"0": 0.4, "490": 1, "130": 0.8, "260": 1.0, "630": 1, "70": 0.018000000000000026, "840": -0.8370000000000002, "780": -0.7950000000000002, "10": 0.4, "810": 0.7510000000000001, "140": 0.8150000000000001, "450": -0.43300000000000005, "400": -0.403, "440": 0.7930000000000001, "850": 0.9, "340": 1, "id": 8, "150": 0.43600000000000017, "280": 1, "350": 0.9, "290": 0.6030000000000001, "960": 0.6240000000000001, "390": 0.7300000000000001, "230": 0.8, "360": -0.358, "170": 0.4540000000000002, "760": 0.8660000000000001, "430": -0.42100000000000004, "560": 0.8, "680": 0.6000000000000001, "790": 0.9420000000000001, "180": 0.4570000000000002, "830": 0.5720000000000002, "310": 0.6240000000000001, "820": -0.8100000000000002, "120": 0.9, "500": 0.8, "920": 0.8, "700": -0.7470000000000001, "330": 1, "190": 0.6570000000000001}, {"0": 0.30000000000000004, "960": 0.5240000000000001, "130": 0.9, "260": 1, "630": 0.9, "840": 0.8750000000000001, "10": 0.5, "810": 0.6510000000000001, "450": 0.9200000000000002, "720": 0.8450000000000001, "120": 1.0, "850": -0.8610000000000002, "340": 0.9, "id": 9, "150": -0.14899999999999997, "280": 0.9, "350": 0.8, "290": 0.9, "550": 1, "230": 0.9, "680": 0.8150000000000001, "170": 0.3420000000000002, "760": 0.915, "500": 0.9, "110": 0.875, "560": 0.7000000000000001, "920": 0.9, "180": 0.3570000000000002, "310": 0.5120000000000001, "430": 0.6810000000000002, "440": 0.8080000000000002, "20": 0.815, "330": 1, "190": 0.7570000000000001}, {"0": 0, "320": 0.1540000000000001, "770": -0.6830000000000002, "950": -1, "390": 0.7390000000000001, "330": -0.2459999999999999, "140": -0.22799999999999995, "270": 0.3480000000000001, "720": 0.8480000000000001, "340": -0.44599999999999995, "id": 10, "920": -0.9, "90": 0.13300000000000003, "670": -0.6200000000000001, "160": 0.13600000000000004, "610": -0.3930000000000001, "960": -0.9, "70": 0.027000000000000024, "550": 1, "40": 0.30000000000000004, "690": -0.8320000000000001, "110": 0.878, "880": -1.0, "680": 0.8180000000000001, "50": 0.10000000000000003, "820": -0.8190000000000002, "310": 0.3540000000000001, "980": -0.6000000000000001, "890": -0.8}, {"0": 0.4, "640": -0.5080000000000001, "130": 0.06600000000000006, "260": 0.9, "390": -0.388, "520": -0.4870000000000001, "10": 0.6, "920": 0.8, "id": 11, "150": -0.15499999999999997, "280": 0.8, "410": 0.7660000000000001, "290": 0.8, "680": 0.8, "810": 0.5510000000000002, "430": 0.7810000000000001, "560": 0.6000000000000001, "690": -0.7410000000000001, "180": 0.25700000000000023, "990": -0.7180000000000001, "310": 0.41200000000000014, "440": 0.7930000000000001, "190": 0.8570000000000001, "960": -1, "450": 1, "70": 0.006000000000000028, "840": 0.9750000000000001, "330": 0.9, "590": 0.6030000000000001, "120": 0.9, "850": 1, "340": 1.0, "90": 0.039000000000000035, "350": 0.7000000000000001, "480": -0.4660000000000001, "610": 0.6240000000000001, "230": 1.0, "360": 0.7240000000000001, "490": -0.4750000000000001, "110": 0.893, "500": 1.0, "630": 1.0, "760": 1, "170": 0.44200000000000017}, {"0": 0, "320": 0.6360000000000001, "770": -0.7830000000000001, "950": 0.6210000000000001, "330": -0.3459999999999999, "140": -0.12799999999999995, "270": 0.24800000000000008, "720": 0.8510000000000001, "530": 1, "340": -0.346, "id": 12, "920": -1.0, "90": 0.03300000000000003, "670": -0.7200000000000001, "160": 0.23600000000000004, "610": -0.4930000000000001, "960": -1.0, "550": 1, "40": 0.20000000000000004, "940": 0.6120000000000001, "690": -0.7320000000000001, "110": 0.881, "880": -1, "680": 0.8210000000000001, "50": 2.7755575615628914e-17, "820": -0.8310000000000002, "310": 0.2540000000000001, "760": -0.7680000000000001, "980": -0.7030000000000001, "890": -0.903}, {"0": 0.30000000000000004, "320": 0.6450000000000001, "130": 0.9, "260": 0.8, "630": 1, "840": 1, "10": 0.7, "810": 0.4510000000000002, "450": 0.9, "120": 1.0, "530": 1, "340": 1, "id": 13, "150": -0.15199999999999997, "980": -0.7120000000000001, "280": 0.7000000000000001, "350": 0.8, "290": 0.7000000000000001, "960": 0.7240000000000001, "950": 0.6240000000000001, "230": 0.9, "680": 0.9, "170": 0.3420000000000002, "760": -0.7770000000000001, "940": 0.6150000000000001, "500": 1, "430": 0.8810000000000001, "560": 0.5000000000000001, "920": 0.7000000000000001, "180": 0.3570000000000002, "310": 0.5120000000000001, "820": -0.8340000000000002, "440": 0.8110000000000002, "20": 0.818, "890": -0.912, "850": -0.8640000000000002, "330": 1.0, "190": 0.9570000000000001}, {"0": 0, "750": 0.8660000000000001, "450": -0.43900000000000006, "390": 0.7450000000000001, "840": -0.8430000000000002, "140": 0.8300000000000001, "780": -0.7980000000000002, "770": 0.924, "720": 0.8540000000000001, "id": 14, "790": 0.9480000000000001, "400": -0.406, "290": 0.25400000000000006, "100": 0.05400000000000005, "550": 1, "360": -0.361, "170": 0.4570000000000002, "110": 0.884, "680": 0.8240000000000001, "310": 0.6270000000000001, "430": -0.42700000000000005, "700": -0.7530000000000001, "490": 1, "830": 0.5750000000000002}, {"0": 0.20000000000000004, "960": 0.8240000000000001, "130": 0.8, "260": 0.9, "630": 1, "840": 0.9, "10": 0.7999999999999999, "810": 0.5510000000000002, "450": 1.0, "720": 0.8570000000000001, "120": 1, "850": 1, "340": 0.9, "id": 15, "150": -0.16399999999999998, "280": 0.6000000000000001, "350": 0.7000000000000001, "290": 0.6000000000000001, "550": 1, "230": 1.0, "680": 0.8270000000000001, "170": 0.44200000000000017, "760": 0.9, "110": 0.902, "560": 0.6000000000000001, "920": 0.6000000000000001, "180": 0.4570000000000002, "310": 0.6120000000000001, "430": 0.9810000000000001, "440": 0.7930000000000001, "500": 1, "330": 0.9, "190": 0.8570000000000001}, {"0": 0, "320": 0.1540000000000001, "130": 0.803, "770": -0.6830000000000002, "950": -1, "840": -0.8460000000000002, "780": -0.7860000000000001, "330": -0.0459999999999999, "680": -0.7230000000000001, "140": -0.13099999999999995, "450": -0.44200000000000006, "270": 0.3480000000000001, "400": -0.394, "210": 0.24500000000000005, "610": -0.3930000000000001, "340": -0.44599999999999995, "id": 16, "790": 0.9510000000000001, "920": -0.812, "90": 0.13300000000000003, "670": -0.42000000000000015, "160": -0.06399999999999997, "290": 0.6120000000000001, "960": -1.0, "40": 0.1, "700": -0.7560000000000001, "170": 0.4450000000000002, "980": -1, "620": 0.6360000000000001, "690": -0.6320000000000001, "430": -0.43000000000000005, "880": -0.9640000000000002, "360": -0.349, "50": 0.10000000000000003, "310": 0.6150000000000001, "660": 1, "890": -0.9, "380": -0.376, "490": 1, "830": 0.5630000000000002}, {"0": 0, "320": 0.2540000000000001, "130": 0.806, "950": -0.9, "710": -0.7650000000000001, "460": 1, "330": -0.1459999999999999, "140": -0.12799999999999995, "770": -0.7830000000000001, "590": 0.6120000000000001, "120": 0.05700000000000005, "340": -0.346, "270": 0.44800000000000006, "790": -0.8070000000000002, "920": -0.912, "90": 0.03300000000000003, "220": 0.8660000000000001, "670": -0.3200000000000002, "160": 0.03600000000000003, "610": -0.4930000000000001, "960": -1, "40": 0.2, "620": 0.6390000000000001, "690": -0.7320000000000001, "880": -1, "680": -0.7260000000000001, "50": 2.7755575615628914e-17, "820": 0.5600000000000002, "310": 0.45400000000000007, "440": 0.8200000000000002, "980": -0.9, "890": -1.0, "380": -0.367, "id": 17}, {"0": 0, "480": -0.4630000000000001, "960": -1, "550": 1, "390": -0.385, "360": 0.7210000000000001, "940": 0.6090000000000001, "140": -0.13399999999999995, "690": -0.7380000000000001, "110": 0.89, "720": 0.8600000000000001, "680": 0.8300000000000001, "210": 0.24800000000000005, "660": 1, "id": 18, "950": 0.6180000000000001, "820": -0.8280000000000002, "410": 0.7630000000000001, "380": -0.379}, {"0": 0, "320": 0.2540000000000001, "130": 0.812, "950": -1, "390": -0.382, "330": -0.1459999999999999, "680": -0.7320000000000001, "140": -0.32799999999999996, "770": -0.5830000000000002, "270": 0.44800000000000006, "340": -0.346, "480": -0.4600000000000001, "920": -1, "90": 0.03300000000000003, "410": 0.7600000000000001, "670": -0.5200000000000001, "160": 0.23600000000000004, "610": -0.4930000000000001, "960": -1, "40": 0.20000000000000004, "620": 0.6450000000000001, "690": -0.7350000000000001, "880": -0.9, "360": 0.7180000000000001, "50": 2.7755575615628914e-17, "310": 0.45400000000000007, "980": -0.7000000000000001, "890": -0.9, "380": -0.373, "id": 19}]} \ No newline at end of file diff --git a/settings.py b/settings.py index c4ff95d..523422d 100644 --- a/settings.py +++ b/settings.py @@ -21,8 +21,8 @@ def init(): global tweet_probability_enterprises network_type=1 - number_of_nodes=50 - max_time=10000 + number_of_nodes=20 + max_time=1000 num_trials=1 timeout=10 diff --git a/sim_01/log.0.state.pickled b/sim_01/log.0.state.pickled index 1d59a90..190339f 100644 Binary files a/sim_01/log.0.state.pickled and b/sim_01/log.0.state.pickled differ diff --git a/soil.py b/soil.py index fd1cd7d..bdc67a1 100644 --- a/soil.py +++ b/soil.py @@ -8,6 +8,7 @@ import numpy as np import networkx as nx import settings import math +import json settings.init() # Loads all the data from settings @@ -33,12 +34,20 @@ networkStatus=[] # This list will contain the status of every node of the networ emotionStatus=[] enterprise1Status=[] enterprise2Status=[] +allEnterprisesEmotionList = {} for x in range(0, settings.number_of_nodes): networkStatus.append({'id':x}) emotionStatus.append({'id':x}) enterprise1Status.append({'id':x}) enterprise2Status.append({'id':x}) +for enterpriseIndex in range(0,len(settings.tweet_probability_about)): + allEnterprisesEmotionList['enterprise'+str(enterpriseIndex)] = enterprise1Status + # for node in range(0, settings.number_of_nodes): + + # allEnterprisesEmotionList['enterprise'+str(enterpriseIndex)].update({'id':node}) + +#print(allEnterprisesEmotionList) # Initialize agent states. Let's assume everyone is normal. init_states = [{'id': 0, } for _ in range(settings.number_of_nodes)] # add keys as as necessary, but "id" must always refer to that state category @@ -53,30 +62,35 @@ init_states = [{'id': 0, } for _ in range(settings.number_of_nodes)] # add keys class BigMarketModel(BaseNetworkAgent): number_of_enterprises = 0 + def __init__(self, environment=None, agent_id=0, state=()): super().__init__(environment=environment, agent_id=agent_id, state=state) self.time_awareness = 0 self.type = "" - number_of_enterprises = len(settings.tweet_probability_about) + self.number_of_enterprises = len(settings.tweet_probability_about) - if self.id < number_of_enterprises: #Empresas + if self.id < self.number_of_enterprises: #Empresas self.state['id']=self.id self.type="Enterprise" self.tweet_probability = settings.tweet_probability_enterprises[self.id] else: #Usuarios normales - self.state['id']=number_of_enterprises + self.state['id']=self.number_of_enterprises self.type="User" self.tweet_probability = settings.tweet_probability_users self.tweet_relevant_probability = settings.tweet_relevant_probability self.tweet_probability_about = settings.tweet_probability_about #Lista self.sentiment_about = settings.sentiment_about #Lista + #Inicializacion de visualizacion + for enterpriseIndex in range(0,len(settings.tweet_probability_about)): + allEnterprisesEmotionList['enterprise'+str(enterpriseIndex)][self.id].update({0:self.sentiment_about[enterpriseIndex]}) + #print(allEnterprisesEmotionList) #networkStatus[self.id][self.env.now]=self.state['id'] #emotionStatus[self.id][self.env.now]=0 def run(self): while True: - if(self.id < number_of_enterprises): # Empresa + if(self.id < self.number_of_enterprises): # Empresa self.enterpriseBehaviour() else: # Usuario self.userBehaviour() @@ -88,7 +102,7 @@ class BigMarketModel(BaseNetworkAgent): def enterpriseBehaviour(self): if random.random()< self.tweet_probability: #Twittea - aware_neighbors = self.get_neighboring_agents(state_id=number_of_enterprises) #Nodos vecinos usuarios + aware_neighbors = self.get_neighboring_agents(state_id=self.number_of_enterprises) #Nodos vecinos usuarios for x in aware_neighbors: if random.uniform(0,10) < 5: x.sentiment_about[self.id] += 0.1 #Aumenta para empresa @@ -103,12 +117,23 @@ class BigMarketModel(BaseNetworkAgent): #VisualizaciĆ³n - #if self.id < number_of_enterprises: + enterpriseEmotion=[] + if self.id < self.number_of_enterprises: + #try: + #enterpriseEmotion = allEnterprisesEmotionList[self.id] #Cogemos la lista si ya ha sido creada + #print (enterpriseEmotion) + #except IndexError: # Si no existe la inicializamos + # for y in range(0, settings.number_of_nodes): + # enterpriseEmotion.append({'id':y}) + #enterpriseEmotion[x.id][self.env.now]=x.sentiment_about[self.id] + #allEnterprisesEmotionList.insert(self.id,enterpriseEmotion) #Guardamos el valor + #enterpriseEmotion[:] = [] #Vaciamos la lista + allEnterprisesEmotionList['enterprise'+str(self.id)][x.id].update({self.env.now:x.sentiment_about[self.id]}) - if self.id == 0: - enterprise1Status[x.id][self.env.now]=x.sentiment_about[self.id] - if self.id == 1: - enterprise2Status[x.id][self.env.now]=x.sentiment_about[self.id] + #if self.id == 0: + # enterprise1Status[x.id][self.env.now]=x.sentiment_about[self.id] + #if self.id == 1: + # enterprise2Status[x.id][self.env.now]=x.sentiment_about[self.id] @@ -151,10 +176,21 @@ class BigMarketModel(BaseNetworkAgent): x.sentiment_about[enterprise] = -1 #VisualizaciĆ³n - if enterprise == 0: - enterprise1Status[x.id][self.env.now]=x.sentiment_about[enterprise] - if enterprise == 1: - enterprise2Status[x.id][self.env.now]=x.sentiment_about[enterprise] + # enterpriseEmotion=[] + # try: + # enterpriseEmotion = allEnterprisesEmotionList[self.id] #Cogemos la lista si ya ha sido creada + # except IndexError: # Si no existe la inicializamos + # for y in range(0, settings.number_of_nodes): + # enterpriseEmotion.append({'id':y}) + # enterpriseEmotion[x.id][self.env.now]=x.sentiment_about[enterprise] + # allEnterprisesEmotionList.insert(enterprise,enterpriseEmotion) #Guardamos el valor + # enterpriseEmotion[:] = [] #Vaciamos la lista + #if enterprise == 0: + # enterprise1Status[x.id][self.env.now]=x.sentiment_about[enterprise] + #if enterprise == 1: + # enterprise2Status[x.id][self.env.now]=x.sentiment_about[enterprise] + + allEnterprisesEmotionList['enterprise'+str(enterprise)][x.id].update({self.env.now:x.sentiment_about[enterprise]}) def checkLimits(sentimentValue): @@ -408,24 +444,26 @@ status_census = [sum([1 for node_id, state in g.items() if state['id'] == 1]) fo # print (enterprise1Status) # print("Empresa2") # print (enterprise2Status) +for y in allEnterprisesEmotionList: + for x in range(0, settings.number_of_nodes): + emotionStatusAux=[] + enterpriseStatus = allEnterprisesEmotionList[y] + for tiempo in enterpriseStatus[x]: + if tiempo != 'id': + prec = 2 + output = math.floor(enterpriseStatus[x][tiempo] * (10 ** prec)) / (10 ** prec) #Para tener 2 decimales solo + emotionStatusAux.append((output,tiempo,None)) + keyword = 'enterprise'+str(y)+'Emotion' + G.add_node(x, keyword = emotionStatusAux) -for x in range(0, settings.number_of_nodes): - emotionStatusAux=[] - for tiempo in enterprise1Status[x]: - if tiempo != 'id': - prec = 2 - output = math.floor(enterprise1Status[x][tiempo] * (10 ** prec)) / (10 ** prec) #Para tener 2 decimales solo - emotionStatusAux.append((output,tiempo,None)) - G.add_node(x, enterprise1emotion= emotionStatusAux) - -for x in range(0, settings.number_of_nodes): - emotionStatusAux2=[] - for tiempo in enterprise2Status[x]: - if tiempo != 'id': - prec = 2 - output = math.floor(enterprise2Status[x][tiempo] * (10 ** prec)) / (10 ** prec) #Para tener 2 decimales solo - emotionStatusAux2.append((output,tiempo,None)) - G.add_node(x, enterprise2emotion= emotionStatusAux2) +# for x in range(0, settings.number_of_nodes): +# emotionStatusAux2=[] +# for tiempo in enterprise2Status[x]: +# if tiempo != 'id': +# prec = 2 +# output = math.floor(enterprise2Status[x][tiempo] * (10 ** prec)) / (10 ** prec) #Para tener 2 decimales solo +# emotionStatusAux2.append((output,tiempo,None)) +# G.add_node(x, enterprise2emotion= emotionStatusAux2) print("Done!") @@ -439,6 +477,9 @@ print("Done!") # G.add_node(x, status= networkStatusAux) #print(networkStatus) +print(allEnterprisesEmotionList) +with open('data.txt', 'w') as outfile: + json.dump(allEnterprisesEmotionList, outfile) nx.write_gexf(G,"test.gexf", version="1.2draft") plt.plot(status_census) diff --git a/status.png b/status.png index 945c946..5e5c94b 100644 Binary files a/status.png and b/status.png differ diff --git a/test.gexf b/test.gexf index dcfadd1..14c330e 100644 --- a/test.gexf +++ b/test.gexf @@ -2,12 +2,10 @@ - - + - - + @@ -18,18642 +16,787 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +