1101010000000011110101010101001100110011100010100111101010011111110000110110110111000111111000101100101110001000101110100011001100000111111101000100010111001011100111000011000011000010100000111010010001100010000011110110110010110011100100001000010111100101101000000110010111111000010000001011011000000010111110110100010001101011110011111101001110001101110010111110010100011100110010110111000111111100 0110100110111000101010000111101000011100110100000101111001000001100010101110000111010010011001001101010000000011011111110000001100011001100001111100101010110011000111001011011111110011100110100011100110001101100010010010111111011101000110111000101110001110001111111101111110000010010011100101100110000010010101011011011101011000011101100101111010011011011001000111101011011001101111000111010111110001 0110100100000001010011001000011110101011001001001111000100101111100010000011101110011001100001000111010111101010111110101010110111110100000010111011001010100010111101010110110010010001101000100101000011000100101010010111001100010000010011011100001110010000010001101000010100111011001111011100000010000101110011001110100110111010001001101011001010010101001001100101010101101101000110000010100101011101 1111011100111100001001100001001101010001000110001110110101100001001110111010000001111010000010011100101010001100011111011001100010011101101101100001101010001011101100011110010010111010101011101101010011111100011011010010110010011111110111111101110001100100011111011100100110101010110010001010100000100011110101010010100111001010001111000000000101101010000010010110110011000101011100001100011000010101 0110000011000010010001101100101000110011100100111101010010001111100100010100001000111100111110111111100100010010111101011111111110000101000101001000001000110000100011010110101101000000011110100000100001010111010100110110000001101011100110011111000010111000011010000011110101000101011011101100001110000100000000000000000111100010011100010011010110111110011001100101101011000110000100011101100011000111 0100101111010010010001000001000101100110000000001000111110100101100011100011011110101101000100011111001011101100100100001111111011000000010000001100101110011001101000010101111101010010000000101110001001011110011101000111001111101110010101011100101000100100011100010100101111111000001110001000101011001100100101100110101101110000010011100001011001000110110000010111111010100000001010000000110010000001 0100101001010010110111111010010110100000000011011111110010001001001010101011011111011001000000111011000001101010110100011101001111110000001011100101110101100111000110011111100010110011101101000000101000000100001011100111010100001000000111101011110100101100011001101011101100011010100011110110010100010100101100100111010011000110001000010011101000101111011011101001001001001001110111100010000111001101 1110010100010111111011101001101010000100111110110000111100001011110010111110010011110101110010101001111010001110010111111011101100100111011010111000101101001000111100111011011111000011000100110110111010011100101011100100101110011101101010100011101000111001011101000111010110010101100111111010110100000111000001110110000110100001011100001001101010111011000000110111111101111000101010011001101100000000 0001100011101001100001101001011110110101011010010111011111100010010101100111001001111011100000110010110011000001100001100101011010001011010001110111110101101001010010100010011101111011010000111010010101111100010100101110011000100010111110001111011110100101000111010000111110001011000100011010010010100101100111111011101111111101001101110010110000011000001000101000000101111011101001010000111010111100 0001110010010001000011100111110001001010000111011100111110000010100110101110011000000100011110011110100111110111100001110111101100000001011100010010011111001101101011010110101011110100110001110001001010110111100000101100011010110011110101110101001110010001011100001110000101100100001001101010000101110100111011101011000110111111110101101100111100010010101001001110000011111011101101011100110101100110 0110010000001010101110011010101110100100101111000111101000000000101011001100011010000000101110110101101001100111101010110011100001010001111111001111100100011000000101111100110100100101100100000110010111111111100010110110101010011111111000111100100101011011000011010110101110101001111100000011101111101110110100100000110011111001010011101001100100101101110101100001011011100001011010010010111111111110 0100101000000100010101100011110101110100010101100000111100011110010100000010101011011011010010010000100110000010110011111111110011111110001010111110010010001000000011011100011001110000111101001110110011111011010000100000101001100010001001111010100001111000110101101100010100011111001001101001001011010100111010011101001101100100011101010011111011000110111111001111000101010110010011010001011111000111 1101010101101110100110010000010011111111111011011100001100000101011110101001011110111000000100101010010101101111111001110000110010110100101011101111001010001110010001000010011000100110111100010001011010001111000000111010001111110100001010000011001011111110111101001101100101101000111001010101111011010100010110001011010001100010000111100010100111001101110011110000101111001000100111100100001110111101 0100011000101011111100101100011000001000010011100010110110001001100001011001111011011001101101100101011001100110111010110111000100101100010011100011011010100110101011001111111110110100000110001010011111011110111001000001111010011011001010110011111001110100101101010110101010100010101001001001000101110101100001000111001111010101000010101001001000101101001100000011110001101001110111000010011111010000 0111010111001000100010100110110011010001011011101101011110000010000011011010101001111100011010011110111000111111110011111101110100010001111000001101110000010101100110011101001100010110010100010010110001110011111000010011001110100000010100101100010100000000011010000011001100010101010000011110100000101110110111110101000100111011110100100111001010110110100101010110110111000101101000111001011001011110 0001110011011111000000101010101100111101100100001011010010011100100110111011011101101110001011101001011111100110100111100110101101010010111101000110110100100111101000100111111100011001011011001101011110111011101001000000011001101101011111100111111001111000100101001111110011110110100111010110110010100010100010000010000101000000100011000001001011000100110111010010111010101000110111010111010101101001 1000110001101111000110011111001011010011111000111011111110111111000110001011001011111001111111011001111111010010101011011011111000111111010000000111001010000101011010001100011101000010010100000001010110001010100011001010100110011101001101000000010000000100001011000111011010101011001101000010111100001001100110111110111100000000111011011010001101100011101111010000100000001000011001001111011110000101 1000100110101110110110100011001110001111111111000011010011110110111110100110000000000001000100100001110000101111110001100010111100101101101110000010100010011001010011111001101100000110101010110100111001011011101001100100001110010111111001100000111101111011101001111100010101110001110001011101000111010110110000001111011011000000010010010000110101101100111100000110110110001000100000111001010101000011 1111111111110001101110000001111101010000011111100010110001100101110011000110100110010100000111110110010011101000011110011110011101111100010100111101001000010100111000111001000101010110110100000010001000000010001111111100000110010010101110110001000110001111101011100100000000110001110100000110010110111100110100110110101011111001101101010000101000111000110000111011011111000000111011110001111111111101 0001001010100000000101001101110101100001010100100111101111010110101001101010101101001100100110010100111111101010001000111111000111000111111101010010100010001001011100100011000101101011000001001100101011010011010100101110000010001000001011101011111010111010010101011000000010100001111100101000011011101010000111010001000000001100110011110010010111100111110111101001000100100110001101100111000010000100 1111100101001111111000010010000111101011111101110101101101010000001101101110011101011000010010000110101011100010010110110101001010111101010111111101100011101101110000000100100001101010001001110100101010000000110101001110101100001101001000010111001101011000111000111010010111010001100010110100111011100111000111000111000000110100100010111001101111110110101110111000010111110111000111001001010011111101 1010101010111001001011000011101111101100101110010000110110101110011010001101000100111011100001100011101001010001100011110000011110011111001100001001110111110010111000011000101000101100110101011010000010010100111001110010000001101111111011100000101011011100010000101000110000010111010111111101001101100000110011101001011011101001111001011110001100111001111010010001001011100111011010111110101111110011 1101010110001000011111111000011000010010001110100001111101111101111011100000010001110010000100111110100111000100110010101000100111010110001100001000101111000001001000111100010011101000100100010010010100100001000001011111111110011000011001001000100001011011101010000111010001100111001011011110001101100011101010111110111111001110101010011101001001110110110001110110000011010101011100010100110010011111 1011010101011111001010110001111110110100110011000000101100000010100011101111101111111001111111010101110010100101011001010111111100111111110010100011000001101011111111001010010010101110111100001100100100111111110001110001001101011001101101110111010101000001100011011000101110000101000011010000000001110010000101100010110000010100001110001111111011100111110111100111000110111011000010010000011111011000 0000101111110000111001001101011101101011011010101011001110001000011100100111011011100000111011111010010001000100111001101111010000011100110111101110111110010101010001011101100101000000001010011100000100000100000100111110100100101110100111111011101000011101110001000110101001000100010000100100011111111001010100010011110010011101000011110010010000101100000011000100001001010110001101010110100110000000 1100011001011001000000100101011001000110110000100010100100000011000011110001011110100001110100110110011011001101000010000111111000110010000011100001100111110100111011011101010000110000110010111000111111000100110011011100110111100001000000001001110100110110001000101010110000110111100111001010110110100000101110001110000110001011001100001001101010101000110101101110000111101010100001100110110101011110 0111001001000100100101111001111110010011111111111101110010011100000111000111111000110000000011111101000100001011000110110111010001001011001101110001001100111010001101010111010011000110101000111000110111110000101111010100000111000000100100110001111001011011000110101001111111010010010011010100010011100101111001101101110110110100011000111110011101100010100000001011101000100011000100001001110001110000 1000100000111000011001011011111000111001001001101001101100111011011010100111100101010010000110111110101111001111011100001010000110010001110011000011111110010101110001001100100001111010111110100111010011100010000111110111100111011011101011100001010000110111110010110011011101111011000100010110110110011100011101100011100000101100110011101101011011111010011001000001001101001001110000011111000000011100 1011111110100010101100000000110001111001110110100110011101100111101000001100011101110101001000101111111011110111111011010000010000110011000011100011111011000010001010111100110001000100001010010111011000010111110010110100110010001101101011010011110010000001000011011101100000110000010101101100111110111100011101111110000010001110000001011111111111000100101001010000101100111010111111110001001101010101 0101100111001010000110011011100100000001101010000001110111010101111000011011000010100011000000001100000001000100110101110110111011111100101011001101000101101101110001100110110011101110101011010110010000100111110011000011001010010010000100101110001000011000010110001000000010001101011001101011011100011011001101001111001110010110010101101110001101000110010111000111001100101100110011001000000100101010 0101100110011101100100101000010010100111100010010001101010101001110111011000011110101110110101001001111001001111101100010101111011001000100001000111110100110011001011110011100101010110100110101111000001111010101111110111111101100010110001110101100111100000101001010001101101000111101111011001111100000101101100111101001110111110011110101111110110001000100100011000000110111011110101010010100011110000 1110110000000100100001111000001110111110010111000000011001011110001100000011000011110100011110100110101001111111010010011000000101110100110111111000100001010011110111100000000010111110010100100111011001111011100000101100001111011010100110000111101110111111011100111110010101001110111101101001110011100101111001000101110100010000011011110111100110101011000111111000011011100100111110111111111001000100 0110101101011100000011110001000111101000001100000011100101011011100110100010100101110010101110010011001101010110101110011001111100000010110101000000001101010100111000011000011110001111101010011011110101011001110000111101011001111110000100000110110011011101000000000110010101010011100100010111111000100110110101111100010100111111001110100110110001101000000001101001101111111010111110011011101101111101 0100000110101100101001010101100001001111011010100010001011011101110101000000111010000100110111111111010010011001001010011000000111110110111100101101101001000010010001001100000110001100111111100110011100000100100000010110101000001011001111111110111000111110101011010011111001100010011010100101011111010001111010010101011010010100111000111001011110110101011100101101110110000110101001110011111101101100 0011001001010100000110111100011010011011011100111100000111001000101101010010001101101100100111111111111010001111000110101101010000101110010111000000010111011110011110101111101111100110101001101100000001011111100111111100001010011110010100100111000111100001100011111010110110110011111000000110101100010001010000010100100000110011110011110101001110011110011001101110110011111000011010100000010000111001 1000111111001111101000001000110001111111110100001010101100010001111011001110010000011001111111110010110100010101101010100001001001110111110100000110011111000011111100111110100100001100101111010010001111110100101001100000001000010101000110011111100101110100010100100010001110110101100110101110000111100100111011111100010111111001111110100000111011101000111100001000110100111001000011110101111011111100 0001000010110010000001100001110101111101001101101011000110101100111001010110010001101001100000000100111100100010011001010001110001001100001011100101011110100011010101100110001000110110010111001001100001110100110110000000100011101010111111000000100001010001100110110101111000001010100111101000001011001011111100001111101001101011100100001100100111101011101101110011010001101110110010011011000001100010 0111010011011001001010110111000101101010110101101010001011110110011000101000011111110011000011011011011001101100000100110100011010010000100010101101001110111111100111100001111010010111101010001110100101110010001111001000100000001101010111010111000010100100101011100101000101110011000100000011101110011001001100011001111001011000111000111010100011111111011010100100100010011110010000111000001101010101 1100110000101000001110011001010110000100000001010001000101010010111010101001011111011011001101010011100111010110100100000010100101010101011010011001010011001111001000001111011011100110001110001101011001101010100010010000100000111111101111001110101101010110011100110111011101101001011001111001001110000111111111110000011000011000000000000100010101000111001010110111101110000110011111111010111110100000 1010001011000100111101001011111001111011010001111100111111010110101011001001010000011001111101111100101100110010011101010010001000001101011001000111111110010110101101101000110001100110101001100111001010010110010111100101000111110110011010111101110100001110101101011110110111101010011000000010000101000100010010001111011101110100000110001010100111101011000111010111010101101111011110111101100110111100 1001011001101100100000011100100100101001001101111111110101110111111011001100011100011111010011000111100101010011111110000111100110110110000000000010110000001010001000001110111001101001000101010101000000101101011011100011001100011111110101000001011110111000100010001000000011001111011000110000011100001101111100000101000011111110111001010101101110110011011010100110010111101010011011000100110110011000 1101111011100011110010001000000100001010101100111110011001101110111001001010011000111000011011101010110001101110010010011010111010101001101101000000111111101010110010101100011110111010011000000000100100000101110001011010011000101011111100101000001010110111101101110000000000010010110010110000111011101101100001010001100011100111001001001110101111000100010101001010100001001001111111101000000110000111 0011011000001111101001101101111001101001101100001000001010011100101001100101001111101110111110100101111000100101001101011000110001111101000011100001000010100010100110001000100110101000101101111000110101011010001110010110001110010001001110110011110111100011010110000000010100101111101011100100011110011111011001110010011011100011101110101110011011010001010000111010000111111110001101101000001010100111 0101100101011010111011010000000110101100010010111111010101011101100110001001011001101001111010100011100000111000001101100100111011000000001111011110111000010010010110111011101001111101110111101100111100101001001100100010001101111111101101001101111001100000001110010010101111001011110110110000101010110000100101000001110110011011011100000011010010011111011001100100010011111000011010011010010101111100 1111100101011110010010001001001000101100011001010101001011010111111101010010100100011101010110000001100110000100111100010100110001001101011101100000110011001010001010000011000000001010101011000100111010111011011011110101100010111010011110110101000010001011101110001100000100100101010100110001111011001100000110111110100100101101101000101000010001110101100100001010110011111010100110100011011111101001 1110010011110010110000011010000011110000110001111100011110011000100011001110111101010111110110110100001011011010100100010110011100000011010010110110110111101101000011101010110011011111011010110011011111010010000110111010100111100101001010010100111010101000110001011011101100010110010111100011010010010010001101111000101010000111000001101111101100010101111000001011010000110010111001100011000111100011 1010101100101001101010111100000011111111010111011010001111010111101000000010100001100001000110000010000001111010101000100000001010011101000001000000011110110001010100001000000000111101111100101110001010010100111100101101110110100111101000000110010011010101011010000111101110100101001000001101000001000000001010011011010100111111111101001100111000010110100010000111110010001011000001000001101110000101 1011110110000100001010011101000101011110011010100000111000100111110101100100100111101110110111111101001110010011111011011110110011110110101100100000110101101100110110010011110000001110010010000101001001101111110110001111011000000000101100010000111101010101010001110101110001010001011100110101011100100011110010000011000101011101000001101100110111001010011110101001101000100100011000000001000001011110 0100101001110001011011110100100010011100101000101101001110000100111001001101001110001001100101110011100011010101111011001110010101010001111111101111001001011000110101100010001101110101101010101011001111101101010111000110111001001001101111100011000000001010000110010100010110010101111000000101011010010010001001101010000001110000101101101000001000001010100100010110100111101101101101111001010001001110 1000110000100000100011001110000001011101110000100100110101000001010010111000010100111101101110110100111010111011111001110000010010010111010000110111001111111110000011011110011100100100111110001100010001101010111101100111001111011010000001010111101001110100111000111100001111011000110111010011101100001110100001110110100001010100011000010000011101111101100110001100011110111100000010001000100001001001 1110101000100001001000110110001011100001000100100001111010010010000011100111011001000000011000110000011011001000000011111001101001000000111000110010011111100101011100011110001001100101010011010001110100100110001010110101111000010110001100001010101000101111111111000100100101010001000000110010101111000001100010101110011101000000101110010000110101101110110001010110111110000011001101101100101010010111 0000110001001010110010100100100101111011010101010000010110011100010100100001101100101001011011100101000100011010001010010100110010100110111000010011110001101000110101001011010101000010010100011100100011000111010111011001101010001011100100010000001111101111010100000111010100001110010111000111001001101010010000101010001000000001111001111010011111101011000110010111000011001111110111100010111111110111 0110010110010000011111111111110001110001010000110100101001000100100001101000110100100001001101010110111100010111000000110011011100011111111010100111101001011111101100000001011000001110111100111011001010011100011100010010011100000001111100101101100111010010001001110111000011100001111110101001011100110010001010111010011000100100011110110101110101000010101100010010010010000011010101001001011111011100 1001111011011000100111111100011101000010011100100000010010110011010110111000011011110111011101110101010110111000100000110001100101000111000110000101110000010000101111011111000001100111001101101001011000111001110000000101001100110011110100110100111010111101111000010010111000110111101110001110000010101011001011010110011011011001111100000110011111000011001011011011011010010100110001010101010110101001 0011000110111011010011000101000011101010001100011111010010100010001010011110110011011101001111011000100110011110001011101110111010100110010110100101110011000111001110101010110001010010011000101001001011100100101001000011100011111111100011101110100100100100010010001001000010111101100000101011110010100000110010011010110001001000111000111111001111001001111110011000110110011101001001101111101000011100 1101100011001101110100111110111110000011101110110001000010000110001010100110011101100010000111001101100101000110111000000001101011011101110000010010100110111100110001101011100110011000110011010110111111010100010110010011101111110010001001110001100101110110110011001001100110010110110100100101001011101001001111110001010111101101101000101001010111011000101110000101101100110111111000011110001000100010 1111000110111001111010010001010101111110111011101101011000000010111000110101111110101111000100000110000101111101000101011110011101111101101011101000011011000101110111001000010000110001111000110001010000010000010010111011110011101101011111111100011000101110000110000100001110001001000001010100101111011101000011011111101101110010001101001111111100000100110000101111001110111101010000010000001011010111 1110001111010000010011000111010110010010110001001111100011011000101101111100000101100110101100111000101110101001001101010111111001011011111011111111111101110000100001001101101100001111110100110010100000010101010000101110001011001000111000110010001011001110110001010000001110001100100011101100000110110110100010011000101010011000111101111001101000111100000100011100100100100100111000111001100001001110 1101101010010110011101101101110100111100000001110001000100001110110001100010001101100111011110100010100110110011111101010010100111101100100001011110010101101000010010001101111000011110001001000001101100010000000110101110011101111001001100100100000011100010101100110111110011110011001000110001000110110101111011100100010011001011111100011010001010001010111000011011101011110000101011000111000011111101 1011100100111110001010001000101001001011100001010111100101110101110010101001000101111100001101111011111001011101100101101011110011011001001010111110001100110000011101101010110100001010001101000101101110101111111100111110001001101111011011111011010010000101100100111111011100100100000010011011101101101100110001110100000011010010101011001110101011101110100111100000111010111000001011000011011011011111 1011111110100101000000110111101000100110100100110100111001000101000110101110000011100010000111000001111011101001111111110010101001110011101111011101010000111111111010010101000110111110010011100010000110101111000110101110000111100100000101001100010101001011010111111000110010101000011010100011100111000100001111000010001011111100111101101011011111100111110100001110110100100001100010011010100100111011 0011111111000001010011101100001000101011110011011110100011011110011000111110101101011110100101000000110101010000100100111010010000110011000110100100000111011100101111111010101111000010100111001001011111111011011111111111010110000000101001011110011000110001010101001110111110100010111011011100000011010011111101001111101110111011011001101001101100011101100110110010100111000000111001000110111000110010 0001110010111011100110001101001000010001001111011111001001001010000000010101001010011001010010111011100011011100001000001110100010111110100001110001001110101001010110100100100101101001001100111001001101000011110010111000111011010111111011111100000010111000101000010011101001010001001110111010111111111111000111111101000000101010001001100011110111101101100111011110000100000111100000001110110100111111 0101001100100101001011001101110011100001010111010100000100000010010110000110101010111101001011001011110011100001000100100100001110001000010110101101111111010110000100100000010011010000001100001111000010100011110110111100010101000101110101000010100110100101001101101011100101111011100101101001100111010011011010010001110100001110110101001111011101001000100111101000011101101010111010101110010010110010 0000010110010101111110100100001010111111110010100000110001001000100101000011010000111000001001100110111111010011101110011011111001011101101101011001101110110011000000010010011100111000011111110100011010101000100000101101101000101010011101111011101000001011111010000101001001010010001000010110110000111110101101111000101100001100010011111000001111110101110110101111000101111011101101001110110010010101 0110001001110110110000101111101111001011001001111111011000101000101100111011100000100111110011100110110110001111001100001111100110000100011111011111101110000110010010001101001000011000101111001010101110000111010001000010110010000011011000110101000110011010110000000001010001100010000001111011100001110110110111110001011011100100111010111010000000000101110100000100001101011000011110100100011100110101 0000101010100111100001001001111001111000010011110010111010111101001011011100110001100101000100000100000011000011010011011110100010101100100111110001001100000100011011110000100100001100000011111001110100110100001100011010001111010101010000000110011000010011110110000000110011010001001111001100000110011000110011011110010111010010110000011010101111001010110110100111111000111000100110000100100011110100 1111011011100010010001101111000101110000011001100011100011101010001001000101110111100011101111111100110011101001010010000010011111100010011000010010110000110001110011001000000000000101010110100110100101111001001000011001110011101001011111101101011100011100001011010100001111001001101011000100100101101101000100000101111010010000000101000110111000010111100010100011100001001111000001010011101010011001 0010010001110111001001100001111111111110101000001111111000111010100000011010010011110111000110010010001010100101100100011000101001010110101000010000011100110011001110011110000100000011001011010101101110011010111110011101011010111111001010110100001101010001110001000110001100111011010001101111101011100110100001010001001001000100010111111101101001101000010110111110101100101000000000010001111110000110 0110011010100101011100111110001011110110100010100000011011000010010110100110110011011011000010011101111010011100100010111111101100100011011000101101010010011010100101001001101000001101001110101111101001111011100011001010000111001111100000011101011001100011100010011010100100000101111111100000011110101011010100110100001110010111010000010010010010010101111001100101001111110010011000001011010100011001 1101000001100010111110010000100101101111111011111010000000111110111110100011110111011100110011110101010101010001011011111110101101011001101101000011101000100100100000000001000010111111100100111101101111100111011101011001001111101101000000100001111011100100111111011101000110010010100101111110111000111110110000001001010011110100101000100111010100111011111011110101011101011110000001101100100101000001 1110011001100111001110111100110011110100100011111101110001111010100010010110001110001001001000111111111101011111010100111001000101110000101101101100101010110011110010010101110111110001100011000011001100110011101001001010101011111001110000000001000110010110111000000010011100001010100101010100010100110111010100100111011100000000011100000101100110010000111111111000111000110010111111000111000000001011 0000101101110100011010000010110000111001110111001000101100001010110111000110011110000101100000100000011111011001110010001011101000000010011111100110000110011101110011010011010001101100101000101101100101001110110110111101000001001011101101001100011101101110100001000111010111111100110110010001010011101011101000001111000100001000101100000111100001111110011010110101001010000011011000001110110110111101 0010111110000100110011011001100011001010011101011101010011000110000100100011011010110010010111011111101100100000010011110101010110100011100001001100100000100001011000000110001111001101000001111101100110110010110001011111101100101000011101000010100011110000101011001101001110000010010111111110001100100001010011101110010000000010110110000100100010010010000010000100100001110001000000000001000111110101 1010000000101100001101001100100100011001101001011011110111111110101110011101111101001000100111100010011000010111010000000001111100001001010010000000001100101110111011000111111111101001000110000100111001011100010111110010101100101111011000001010111001011110001011001110011100001101000110110101000011011101111100100100000000011000010010011101111100000101101101010010000011000100100011110010001100100000 1100001110110100000100011011011110000101011001000100110100111110100111011100100100011101110101110001110010001101110001101001011010000111101101111111111011101100111111111010101111011110001111111100101000001000011000011111101011110010010001000001001001101110111010000000111100111001000011011001111001010011100000111001010000101001010011110011110001110100111100100101010010010001111000000110001100101001 0110001100011110111000001001010001110010110010000000101001010000100110001011111010011000100010001010101000011001001000100100111110101001101001000010101010100000110111001101011100010110010101001111010001011110011000101111001110111000110001111011100001010111100011101111011101110111101010011100111110000011010010110000011000101001101111100010110111110011111011010101111001000100011101110000000110000000 0011011111111111100010000101011001001110000010110001011010001011101110110011011101101001010000101111110101110110101101100011111011001101010110111011011000111010011011010010011111001000000011000010111010101101110000110110010100000001011111011001000101000111101001001100000111011110010011110010001110001111100000100101101100010011011110010010001111010111111111011010101111101000001011100101010010010000 0111110111011001010010011111100000110010010101100010000101111100110110100100101101001011010011111100101111000010011001011010000000011011000011110101100101111101011010111000100001110010011111100111100100001111101011000100110111101001110000011100110000101010101101001011011101100100100011110010101100101000001101000101101001110011111110011000101111110001011111110001010101010110100011010110100100011000 1101001110001101011000101011010101110000110110011010010011011101011001101110011101111001100001100001110100010110011000000101100101101011001110010111000010100011011000001011011011010101000000001110001010101001001110111010000000111100010111010110011000101100100010001011100000101001110101100010001000111001100100100001001101010110110111110010000110010010100001110011011101001010010000100011000011000111 0110010100100000010101000011101100100010100101110100100010000111111000101010110100101001011100101101000010110101011010101101010010110111010111001000011001100110111111011001100001001000001010110000000110100101000001010000101110011110010100100100110001111001101111000110101010001111111010110000110110100001101001110011011100100111000001000111001010001011100100110000100100011011100011111110100100110011 0011000001001101000100110111100101001000011010100110101010011110000000010110110101111111101110100111110010010111111001110101001110110101001110011000101111011011011111101100001100111000101011011110001001100111011110011010010000101001001011000001110000110100000000111011110100001001111100011100011111111111011111100001001111101111001000001011000111111010010010100101110110010001111011000101001001100010 1101000001001001001100010001110110010110001011110001111000000110001010100111000011110000100100101100101101011001111100011100101010101000011011000111011110101101001001101001001010111000111101010001010001000101101100110101011001000100110110011011111001000100010000010010000001100001001011010011011100001010010000111011001100100111000011100000010101111100010111100111010111100101000001010000100000001100 0111110111000011110111111110010010011110001001101001000000001110000001000100111010101011011001011000010010010000000101111011111000100101000010111101100000000010111100001100110110001110010110011111001110000000100111001111010110000001010011100101100110010110011111100111101101001000110000011000101011011000110101011111100011011001010100011000001101110001101101011110101100011000111100000011011000101110 1011101000111110010000101010011000101100010101011011101010110111001100010100100011001000010011111010001011001111101110011010011011010111000110111111100100010000001100101110110011110000010100110101101111001000110001111011000001000101100010100000000011001010111001000101100000101011101100010111110101101101001100111001000101011001011001100101010011100010110011100010001000111110100011011000110100011001 0000100011010100101111100110110010010010001101011011100011110111100011011001110111101000010110101111011101000111001011110110010011100101101011011111111111010110001110001001000111101001000101100001010010001111111101010010011001111001000110101001011110000010000110011101100101010011010010011000001001000100010111111110001000000011111101101100001011101101101010100111111011110111100000111110101101100111 0011001100100011000101000111000001000101110110011111000001111110110001111101110110111111101011110010010010101011000011000101010101101010101110101010001011010001101111101110100100100110011101110011101111000100001000001101000010111110100111100110111101010110101111110001000010000101000000000111111100000100100010010010100111100001101111101100111010000011010100011101111000001111011010000000111101111000 1010101011010011101000110010110111110101000101111001001100100011001101000110110100001100110110000000110101110101010111110110001111001011011111110001100010001011010001111111010001100111001110100110100100010000101011010110001101001100010000011110001100101110000110010111111011011000111010111111000111011001010001000011110000001010001010011100001110100010101111111000100010101011101101100110110001100111 0001000001101101000110110100000101000011101100110100110000001000011000100000001000000001110101100000010010000101011001100111110111111111101110111000110100110101100110011110110111000011000011000001101001110001100011110110011110101011000101011100101000100000000100001001001000110111110100001100000100001010100011111100000100100001000000111110101011101011101000001000011100011110010000101111000110100101 1100011010000111100001111111100101100100100010111011000001001010011001111000010110010000110111011111000110101101111100010001111101000010011101011110000101111001011101011000100100001101000100110100000001011011000111010001001001100001110010010000000011100111011010001000000101111110000000100001100100000100101001001001111010001011111000110000010100011111000011111000001110001000110100001000111110101111 1001010010111011111001010110110111011100100001010001101011100110111000111001011100100001000110100101010101000010110010111001100000101100110010100000011101111000011101011100101000110111111010010000100101110100111111101100010011101100100001011111001011101110010001110001101111101101100100101110110100000100010111001111010001011100011000000101111101001110001110011000001010111010110000000001010101110000 1101111001010000101010111111010110110100101100101100001010010100110001010110110001111111010100100111100100010010101110011001100001110100010010000010111011000100100111000000111000010011000001011000111100000010010111110100011111010001100010011010000110000011110011100110011100100111001001101110010110000101100111000010011111110011101101001001000111010101000010010111101101010011011000110110100010011110 0110000111101111111100100010010110001001111011011011001111101000000000011001111110000100110000000000010010101001100111111001101110000001111010110111001010011100010010101110101011100111000011011011010000111000010101001111000010110000101110100001111011010000010001101010111000101101110110000100101000000110010011110011010011011111010000010011010101100000000001100110100011001000001111111010010111111010 0101010001101011101100111010100111101011001111010101001001110100000000101101110011010000101101011111101011000010100000001110000000100111011000001110001111100011001011100110001111000010111001001011111001100001110101000000011000111010001001101010000101111010101000100011110001000100111010011011011001001010101011111001111011000000101111110000101110011011111101011100110001110111111101111110111101110001 1010001001101100110010010101001110111011001000000000000000110000001001101110110011110100110011100101000000000110111101001001100101111010011010010110001111010001010001101010100011111111010001111010000101110100000111001000101000001100011000111010101010100000010100001011011110110000011010001001111001100010110100010000011100101111000101011001111001001101111010100110110010111000010011111001100001110101 0010101001111111011011000001110010001111001010001001010001000000010100100011101110000101110101101111100101000010101011111101111001010110110011100010101010110110010111011001000100010111010010100011011011100111010011101100101101010001101110111100101110010111101001111010111110011110100100001111100110100100101111100001000111110011100110010111001111111010001111011101011010001100011110101111011000001110 0000011100011111100110000001011010011101010100101111101110101110111001011001010011110011111000111110110110101010110111010000011011010100010111101100011011100111101110010100010010011000010101000111100110010000111100110011100001000001010010100100111100011111110011011100001010010100000110010000010010110000011100000101010010111111100001010101100010010111111100001010101101000011110100100010110000100011 0111000011111100100001010001011110011010010111001100000000011000101101001011011100110111000001100101000101000111001110111101001111101111111011111100110100001000011110100110110111000001001010000100111111011110110011101000111100000000010111000011011010010010110010001010011000111101010001011001000010100111110011010011011101011000110101001011111001101111011011001101111110010110010101010001011001111011 1010001000001001011100101101101000000101000100001100111010110111101111010100110000100010010111100101100001011010101111111000011001111001101100010101010011111001111001010110000010100000001010110100010110101101101011011110100000011011101010010010000100011011110000010010111001101101101010010000100010000001011011101010111000000001010010101000010001100100001110010001010010111011110011001011010110000100 0100010001110000001111100100101101001110110011101011110100110011011110101011000010100010111010001010011110000001111110000111001101111101011011011011100111111011010001110101000001000101101001011110101101000101011100101010111111101011101011111010001001110001111001010011010111100001100001100000010001000100010010001100100100010101010110100101010011100010001010111000110110111010000101100100000011111111
cTrader AlgocTrader

【cTrader】LineAlert【Tools】

2/22/2021 3/12/2021

4年以上前の記事です。内容が古くなっている可能性があります。

ラインに価格が触れてから考えたい

水平線やトレンドラインを使ってトレードしてる方にはわかってもらえると思うのですが、こう目安となるラインを引いたところで現在の価格がまったくラインにからまないと何もしようがなかったりしますよね。

とりあえずライン触れるまで待つんだ、話はそれからだ」と自分に言い聞かせてそっとチャートを閉じるわけです。

でも結局ライン触れたかどうか気になってちょくちょくチャートを見てしまったり、見るたびに「ラインからは遠いけど入れそうだな」とか邪念が湧いてきたり・・・ばかばかしいことこの上ない。

もうね、こんな無意味なこと考えなくてもすむように、ライン触れたら自動でお知らせしてほしいわけですよ。

 

LineAlert

というわけで、水平線やトレンドラインに触れたら音鳴らして教えてくれるインジケーターを作成しました。単純なインジケーターなのでソースコードも公開します。好きなようにカスタマイズして使ってください。

 

機能概要

チャート上のすべての線を見張って、どれかに価格がタッチしたら音を鳴らしてお知らせします。

どの音を鳴らすか、水平線とトレンドラインどっちかだけを対象にするか両方対象にするかも選べます。

即時Alertの場合はローソク足当たり1回しか音が鳴りません。次にローソク足更新するまでは複数回タッチしても、別のラインにタッチしても鳴りませんのでご注意ください。

 

パラメータ

TrendLine

トレンドラインをアラートの対象にするか指定します。

HorizontalLine

水平線をアラートの対象にするか指定します。

SoundFile

サウンドファイル名を指定します。ファイル名のみの場合はC:\Windows\Mediaを探します。それ以外の場合は必ずフルパスで指定してください。また.wavじゃない場合は必ず拡張子まで指定してください。

BarWait

ローソク足確定を待つか、タッチ後即アラート出すか指定します。Yesならローソク足確定を待ちます。

 

ダウンロード

(2021/3/12 修正済み 下記参照)

 

ソースコード

using System;
using System.Linq;
using System.Collections.Generic;
using cAlgo.API;

namespace cAlgo {
    [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class LineAlert : Indicator {
        [Parameter(DefaultValue = true)]
        public bool TrendLine { get; set; }
        [Parameter(DefaultValue = true)]
        public bool HorizontalLine { get; set; }
        [Parameter(DefaultValue = "Alarm01")]
        public string SoundFile { get; set; }
        [Parameter(DefaultValue = false)]
        public bool BarWait { get; set; }

        private List<double> _targets;
        private string _soundFile;
        private bool _isTouched;
        private double _exBid;
        private DateTime _exOpenTime;

        //---------
        // init
        protected override void Initialize() {
            //--- soundFileセット
            if (SoundFile.Contains("\\")) {
                _soundFile = SoundFile;
            } else {
                _soundFile = "C:\\Windows\\Media\\" + SoundFile;
            }
            if (!_soundFile.Contains(".")) {
                _soundFile += ".wav";
            }

            // 最初はこうしようと思ったが、AccessRights.FileSystemが必要っぽいのでやめた
            //if (!File.Exists(_soundFile)) {
            //    _soundFile = Environment.GetFolderPath(Environment.SpecialFolder.Windows) + "\\Media\\" + _soundFile;
            //    if (!File.Exists(_soundFile)) {
            //        Print(_soundFile + " is not found!");
            //        throw new FileNotFoundException();
            //    }
            //}

            // --- ターゲット設定、更新
            _exBid = Bid;
            _exOpenTime = new DateTime();
            _updateTarget();
            Chart.ObjectAdded += _ => _updateTarget();
            Chart.ObjectRemoved += _ => _updateTarget();
            Chart.ObjectUpdated += _ => _updateTarget();
        }

        //------------------------
        // update target
        private void _updateTarget() {
            _targets = new Listt<double>();
            if (HorizontalLine) {
                var hls = Chart.FindAllObjectst<ChartHorizontalLine>();
                _targets.AddRange(hls.Select(hl => hl.Y));
            }
            if (TrendLine) {
                var tls = Chart.FindAllObjectst<ChartTrendLine>();
                _targets.AddRange(tls.Select(tl => tl.CalculateY(Bars.Count - 1)));
            }
        }

        //-----------------------
        // Calculate でタッチ判定
        public override void Calculate(int index) {
            if (!IsLastBar) return;
            // OnBar
            if(_exOpenTime != Bars.LastBar.OpenTime) {
                _exOpenTime = Bars.LastBar.OpenTime;
                if (_isTouched) {
                    _isTouched = false;
                    if (BarWait) Notifications.PlaySound(_soundFile);
                }
            }
            // OnTick
            if (!_isTouched && _targets.Any(t => ((_exBid < t && t <= Bid) || (_exBid > t && t >= Bid)))) {
                _isTouched = true;
                if (!BarWait) {
                    Notifications.PlaySound(_soundFile);
                }
            }
            _exBid = Bid;
        }
    }
}

本当は最初にサウンドファイルの存在確認したほうがいいです。今回はAccessRights.FileSystemが必要っぽかったのであきらめました。

ポイントらしいポイントもないんですが、線の追加、更新、削除時に対応するため、Chart.Object~のイベントでターゲット更新を行うようにしておきます。チャートオブジェクトを使う場合はこの辺の処理を忘れないようにしましょう。

あとはCalculateでOnBar的な部分を作ってるところでしょうか。最後のローソク足のOpenTimeで確認してます。TickVolumeは値が飛ぶことがあるのであてになりません。確かMT4のEAでも同じでしたよね。if(TickVolume==1)とかしないようにご注意ください。

 

(2021/3/12追記)

たぶんバグあります

申し訳ありません、アップデート用にいじってて気づいたのですが、このコードだとトレンドラインのアラートがうまく機能しないと思います。OnBarでのターゲット更新処理が抜けてます

上記のダウンロードリンクは修正済みです。すでに自分用に手を加えている場合は下記のように1行追加してください。

        public override void Calculate(int index) {
            if (!IsLastBar) return;
            // OnBar
            if(_exOpenTime != Bars.LastBar.OpenTime) {
                _exOpenTime = Bars.LastBar.OpenTime;
                _updateTarget();//←この行追加
                if (_isTouched) {
                    _isTouched = false;
                    if (BarWait) Notifications.PlaySound(_soundFile);
                }
            }

 

(2021/3/2追記)

他のツールにも組み込んでみた

この前作ったMTFストキャスティクスでも音なるようにしてみました。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2025 ajinori