@Override
	public Net.NetState computeState(Net net) {
		if (!initialized) {
			initialized = true;
			initialize();
		}
		if (alreadyAsked.contains(net.getName())) {
			currentTransition++;
			alreadyAsked.clear();
		}
		if (it.hasNext() && (transitions == currentTransition)) {
			initialized = true;
			alreadyAsked.clear();
			transitions = Integer.parseInt(it.next().getName());
			currentTransition = 0;
			Iterator<String> itN = nets.iterator();
			for (int i = 0; i < nPins; i++) {
				if (it.hasNext()) {
					int value = Integer.parseInt(it.next().getName(), 16);
					for (int j = 0; j < pinWidth[i]; j++) {
						if (itN.hasNext()) {
							String n = itN.next();
							if (value % 2 == 1) {
								value = (value - 1) / 2;
								values.put(n, Net.NetState.HIGH);
							} else {
								value = value / 2;
								values.put(n, Net.NetState.LOW);
							}
						} else {
							throw new RuntimeException();
						}
					}
				} else {
					throw new RuntimeException();
				}
			}
		}
		alreadyAsked.add(net.getName());
		return values.get(net.getName());
	}