1100001010001100111100110010100000000000000001010101011001100111010011100111111100001001100000001011111001011011011011001101011010000000110001011011000001101101011110110001111111000100101111000111111001100110011001101111001111100010100111000010011100111100111001101111110111000110001111001000110111100011101100100100010001100001010100110000110001011001011010001101100100111101011010110101000110011110 1011001100111011110100101111000100100010010100101101011110111101011111000011000000011101010111100111100011011101101111110100001000101111000111011001101111111010101000000001100001010101001101010111010010101001111011001111010010111011101111000000010100101100111001111101000101100010100101101011001100101010001100101010101101100001111001011010011101100111000001110000001000010110111101000001010011110001 0011000110000001011101100000000011010100011000100000011110011111001110001110001000001000111110001110010111111000000010010000001100001001110011010011101110001001111001100111010101000101011011000101001010000001010011110101110101001001011101100101010100100100010001001010000001001100011011111111110100111000001111110011101001000010101001000011001010110001110100101110011101111111110000001111000010010110 1110000101100100001111010110001000001001011001010000000010011110011100000101000001101101000111011101100001111010011101101011000111111111001001101111011111011101010110011000001100100100010111001101011000111010111111111011011011001110101000100001111110110100111010101000010000000001110101100001110000111111101111011000110001111011110011001010101011000010101011010101101111011100010000001000111101010100 1111000110111001000101100111111011101001101010100101000111010010110001010110111100110011000100110101110001011101001111011100000101000001001111111111010110110101100000101000010010110001111100100010101101000001011100110110100100010000010110111111111101010011110100101010110011000000101011110010011110001000010111010110000101110001001111110011011100010100111101111101010000101001001010010000110011010010 1100010111100100101010100101001001111111011101010011000010110101110001011110000010001001011100101101100110101101111101000100000010001001101011010000001111110111011001001111110111111101101111001011110000110010011111101011111111000011010111000011001001001000001010110111111110100000111010000000111100110000010000111011101100110110001111011000010011011110000100010101010101101110101010011000000000110110 1001101001000000000011001101010000001110011101111010001011001011010000010101100001111101101111000101010011110111110000010011111011011111110111001111111001110010011111001101101011110010010110101100111111010101110001101001001000100101111111100100110100000100101000100000001011111101111101100111010101001000011011001000000101011011001001001001100110011100011100101111000111001101000010011010111011001110 1011000100101011011011001000001010001101101010011011011101101110100111100111011011010100111111100000000101110111101101001000101001100001111000111110101001011110110110110011010111111110111011010001111111100110011111011111010001101101111011101111101100000011001111001110010000101011100010010000001000111000111000000010110001010000100000011101010101000000111101110101010010011111010000100100111111111111 1100111111001111100001110000110101110000010110011011011001001011100101111010111010111110110110000101011000111000011011001111001000001011010101001100111101010100100000010101110111000000111011101000100111110001001100011011101001000100111111100100010110100000110100100000101101010001111111111111110100110101111111100001100010000000101001101101001111011111000110010100000011001110001111001001011010010101 0110000000110111001111101000110101110010010100110110101101101111010010101011111000101010111000111100101001011001100101111100101010111110110111011111111101100010010001011100001100000111011000010001000000111001011000110010100101100011010101011101011100101110111100001100100110001111011000111100011000001110000100100000100010101100011101001110010001001000011000000101111110000001000110011111001100011011 0010000110010110101000111000001100101111110001110010000011101100111001101011010100100100001110111010011010100101011011011110000101001101011110011111000100100111111001100010111010010011000010111101011100110000010001101010010001011011011110011010010110001101100011000011011111001110010110001100011001010000000000100000010101000010100110111111110001111100010110111111000101100011010110100100000010010101 0111101011011001111101100000101101101011111110011100011110010110110001110001110110100000000100001100011111111010000111110001000010011001000000101101010000000010101111011010110000011011000111010101011111100000000110110101101111011001001110111100110110100100100000001001100101001011111110010111011001100011001110001100001001011100000000100001000111111000010000011110100100100110100111011111100101011010 0001001000011001010010010111011000000001000100001101110000001010110100001110011010100111110110100101001110111000100110110111111010111001011000011100111010101111101100110111111100110001001101100110110101100001101000010111100001011010110100000001011111100011100000010100011000101000101011011011001110011011101100110010111010010111100101110000111110011000110111111110011000111001110011100001100011011101 0001011000011001111001110001110101111100000111001000011110111110100000111110010000010101101000011110001010000101010100011100100011111001000001110110011110111100010111111101011001110110000001011011010100100100111000001000110011100010000111111001111101001110110100111011111100101101000010011000001000000011010010100000001110011101111000110100000001101000010111010101111011111100100001101111000111011111 0111111000011010000011000100000000011100000000100000010001110001101000110010001100010000111100101001000110000000100101101011101111010001011100000110100011110011010110000001101010010011100000100000101111111100011010001100000110010001111000000000100000100011100101101100001110100010000111010100011100001000010001010110111111000101110010110110000011110010110010000101001101101011110010100000001010100101 1001100100000001110101111001100100000111001001110000110101110000110010011010011100010100110010110010010110101010010111010101010010110011010010000010110000101001000101011111101111000001111101110010110111100000000101110001100111101000001010000100010011110110110000001010011000100010110001110100110001111101010011100101111100000000100001111110101101001100001001011111110110101000100000000110011011001011 0111011110110101000010010101000010001110010100011111011001001000010110000010010010111001001001000000011011011011000111110010010110011000111110010000001010010101101100110011110111000110000110001000101011010101111111111000001001011101101010011100100011100010010110001100010110111011000101101100101000011010010000111111111001101000110101011110000001010101011100001100101001000111110110001001111000101110 0010110111011000111001011100001010100110110011100101001101111010101000110100100110111101011000100011011001010011001000000001101101011011100010100111000100110001101111100011101110111101101101111100111011011010001101101101000001001101101001000100110110000010011111101011111001111100101110111101111100000110001010000100110010001110001001110110101011010111111001100000010000111010100010100100000101110001 1101011110001010110010100110110101110000110001001100111110111100000101000010111100010111110111000100010100111010111101001000110000100110101100010010111001101001101010100011100110011001101111011001011010001100101000110001000111001000101110101100001000010000011101101010001010011001110011001011100111001100011100011111001100101110111010010001001000000101110011010011111111100010100011111001001111111111 1101010101000101110010001000110010111111000011101111010000110011001000101011100111111100101010011010110000100101100000100100011111001100010100010000001001011111000100010101100100101000011100101010111100011000100101111111011011001001011011101001010010000100100110101111100110001110110011111110000101111110111001110001001111111111000000101110011011100000110001100101100101011011101101100001110001101100 1000010011100011000010111001011010101111101000111100001101000000010100110110010100101101010000111001111100111000110001000001101101101111010111010111000000110000001010001101101101001001000001100111010100001110110000101111101100110100011100100100011000000010110001001101011110101011111010001001111000000100100001000100101001000011001110011000100110011100010100101110101011110101001101000101101100101101 1100101000110001011101010110010111100001111011011011101011101001110110111110011001110010101110100000001000101000011111000111011101110011001001111101000000001110010001101010000100100111101010001010110100110000110111111110000100111101010101101100000001001111100010111110000111111011110100111010010111000101000101010110110101101110101001001101111010001111110000011011000101100010000110010011100101011001 0011100101000001011111010000101011110110110100100100101111011110000111110110110010010101010000111001001011001110101101101111100111101001110000100000110001100011101100011101011000110001110000110100111111111010011011010001011011001011110001001111010100011111111011100011001001110100101000101010001101101011000111100001001011001001001110110011001100001000001110110001001011010000001100101100111100101001 0000101110000110010100001110000110011111110111011101001011110011110001100001110101011000010110011011010001011001101011011010000111100000110101011111010110111000010001010101000000111001001100001011111101010101010111011011110101001000111001110111011010101101100010001000110111111010101100010010100100010111101101111000000100011110011000101000101000000110001001111001111101011101110000111100101001001001 0100000010011101100110111011011111011011011100001101101001010110110101110110100100011001101110100111010101001011011000011001101101111001100011001111110111001011010011001101101101111100100000101110000100001000101000111010001100100101011101001001000111101101101000011010101001011001111110011100001001011110011010111101101110001111000111011001001101001000100010010011101011000101001001011010000101001110 0101111010100001001011101010001000001001101001111110011111011110110011101011110010001001101100001101001111010001001111111011110111110101010110010100001111000101000111110111010110010100000100010110111111100011101100101110101100101101010010110011011001100100011100011110001011001100001011111101100111000010000111010000101110000110110001000011011010101001111000110111110101100001111101011100011110000100 1111001111001011110110010110001101101100000100001001100011010111011000000110011111001110110000111110101010101101101110011011000101101010011110100011100010011111111011001010110010100101010011110000101000111101010100101010000100100110011111000111001101010101010010111101110011110110000111110111010000010001010001110000010000101101110011000111010001111100111011101111011110100001101110111001001011010110 1001100111011000010111010110110101101101100010100100111100000111011011011001010110110110001000111010010001101001101111010001011001000100001011111000010011001010011010011010010111011011100000011110001100101001011011001010010110100100101101010010001101110111011011000010100011110000011001100001011110001000110110101101001010100010001101010110000001101111011010010000010101011110001100101001100001001111 0111000010100100111001000001100010111100101111011011001110111011100100001110000000100001000110001000101001110110101000010100001111111001001100100110111110100001000110001100110111011011011001110001000100101010101100111001100011100110110111111100100010110011111100100110100010000000011101010100100110000111010000011011001111111001111010110000011101010011010011000100100011111110001000101110011011010010 1100011010010111100110010101000111100110111011011001001111010111100000111011110011011101101110110010101000101100111011100000100001011100011110001110000111001000101110001110101100100101000000100101000010011110010000011000111001001101010011100110001010000111011100100001110000100100010110111001000101110001111001100001000110011101001010110100011011000000111101010001010001001001110101010000010011010100 1001011110011110010101001000100100100001110101001011111010100101001100111100111111101000111010011010010101100001111011101101111001101101011101001110100110110101011100101011011001100100010110010111101101011101100100110111000001001101010000010100000111101111110010100110000010010101010100011000100010011110101101000111000110111101111010001001010101111001100011010011000110100011111000010001100011100110 1001001101010011101011111100010111001001101010101010010011101000000100010110110010011000011011001101101000110110101010110011110100101011101001111110011100100111010100100100001010100011100101001111000010000111000001110000100010001011100101101000010111000111001110011001011111011111101010011000011001011000101001001011010100111100001110011011010010011111010001000100101110010110000110101000001010111000 1111110011011011110000001110001101111111110011001011100101101100101000010100100100100000101000101111010101010101111111110000010110101101000111101010100101001101100010110111000001111100111010011011010001100001010000100101111001010101000110100111101111111100110111100010111101011001101100100011011010001000100100001101111001000011000100011110110110101110011000110111111100010010111011000011111001011010 1010001001001011000100100011111100110111111010111011010001101100110110101010111101110111100000111101000101001111100111110000010101101001101101110110000010111101000110111011100011001100010100000010100111011100000010110111001000011000111010011101010010001011111000000001111001111110101001010100011111100010000000000001101001001101101110011000100110010110100001101010000110111110010101011100010000111001 1110100000110100001001110011011111101001000100011001000011111101011110011001010001110001010011011000111010111000111011011000111101110111101111100010101001001000000010000011011011111001100000111110011110000111100011010010110001010011011111010111101110100010110110100110010101010110011100111110011000110100010100011011011011111101011110100111100000000101001001101111110000110010101001100101010110010000 0101101110010111101000101001101100101111111001110010010000010001111111111100011010100110111110110100111010011000010101000010101011111011000101110011101010111101011110000001011010101001011111101011011011101110011001000001010110001111011001110010111111110001010101100100001101100110100101000000100110101010001101010111111001100110111111000100110000111010100000100111011111010101001011100110100010001100 0111011001111000010100000011111011011010111100110101001101111110000000011110110000010001110011101100110110011111101001011101011001011000001010111101101000101011101101100011110001010101010000001000001110111110011101101101111110101100101111110000010110110011101000001011111111011011111110010101011011111111101111000010101011001001110101010010000101110100111010111100001001010010110011110001110011111111 1110101100101111101000101100111111001101100101110001100000101101110111111111010111010010100100111001111010101100111010010000100100011111001111101101011010001001011000001100011100011000110111110000110010100010010010000001010100101100001001111101101001100101101101000110110110000100011110100100110110111011010111100011011100001010011110111010111110110111001110100001100011010001110110110110000001100110 1011011010000101011111100111000100111110111000110000001001001101000111111101110000110000110001000101000000111110111101111000010111110010010011111001111010011001101011011000110010010011011010110110010101001110101000111011110001100111111011000110001010110010000111110011011111111000000101111111011111110011100010011100101110010000011101011110001000101110000110111100110110011011000101100000101010110010 1000100111001111101010010101011101000111011010111101000000001001000011100101010110011001100011001011101010111110101000100011001110000100010110001110110101100000110010100111101000001011101111010111011011000001101001011011100111011000011010101000111101001111110100100111111001010101001111100011110010000110101010110110001010011101001001000011100111111111101110100100100011011111011000101101100110100101 1001101010100001011101111110010011011101000000110010101110111100110010001000111000011101010101100010101000001111110011100011011100010001011111001110100010111001100000001001111010100110110111110111000101111100100000001100010100110111111011110101110111111111011000001110010101011111110110101010101110101110000010010101110001111001001001010010110101011100001000101111010011110111011100001111111101111111 0111001010101000011001101010101101001000011001000100010011000101111011000001101000000110010011000101101011001110001101100111111110011001111000110100110000001100010101101111000111010001100011011110111101010011110010011100101001011110111010100100101001011011001100101000100001111110100000001011001001100001101110111001110010000100001001111101010111011000101010011111111010001011101111001100111010010101 0001000000011110111011111110001100101010100101100010110110101000111110010001011010011101100111101111000000011001101010111011110011100110100110011111111111100110100101011100000011001110101001010100101111101100010111000010011110111110010111101111100000101001000111111010110110001000111010101101101101011001111000100000101001110001010100010010100101010011101110101101001001110111010011010011100101000001 1010100101010011001101101101101100001010011001110011100001001001000010111110111101101101100100101101001111101110110110101011111011001110111011011000010110001011101110100110111111001110011001111110010000001100011011001001001001100000011010100011100010000110010010000101011101101010101100111010010011110110111011101111011111110111100101010100010110010111101001000101101111010100001111100100010100100001 0010100101110010011100100000101100110010001101010110011101101110000110010011001001011011011111010000110001010111111111111010111110010101111100110001011101101011011000001100111010001111101000001000111000000000110011010100011100011011100000100011010110110000100000111000100001111100110000110110001010101110111110000011000111101110001101011100100111111011111001110001111000001000001101001100010110110011 0111110000010111001110000000010100110000010011000010001011011000101011110001110000101111111111100101010001101010011101111000001111111110001000110100001101011101010011101001111001010011110100111000110111111100101011111110001001011011000100110010110010101100101110111001111001110000010001100001100100011001001101100001101010000011110111001010010100001011000100010011010011111010011110011001000010001001 1011111000101101011000101001010000000011000110111111011110001010011110101100100011000111001000110000000100111110111000011111010001011000111101100001000010111011101000101111010111100111010101111111001111100000000100000101101000100011010100101010011010100111101101110010001111011111011011101100100010010101110100111000011101110110101000101011111000111010011001101011001010110011101111111011000101010101 0011100101000011000000001110110111001011100110011101010001101000001011101100001101101111100001010011011101010111100010001010110111010111111001111110001010101100111010100001000111110010001111110100101110000001010100010111011111100101001010011010011110111000001111010100110101010010010001100000100010110111010010100110100101001011101011111011111010000111100101110110101110111111100001001011011110100111 1111001011001101111101111001010011000000101101011101011011111100110000010010110101100100110100010100000010010100011001000001111011100110000110111111000100000101110001000000001110011101100011100111000010110111111000111011010011111111000010011010101011100000000100110111110001100111101101101100100001001011010111000011001101000111111110001000101101011111000111011011000010000001000110101100100001001011 0000000110011010111001001110101110110101101011001001110110101111011111011011110000101001000000000101011001111100110100110010101001110110110011111111000010110110111011111011000101000011001000001011011110101001011101100010111011100100110000000101101000110000001000110100101110000010001101101101000101100111110000100011110001111101000100011100010000011100100111010001001110000101001001010110100100001100 0001101001111011111001110000101111000101001110001101100010010110110000011010100001010100001011001000100110011001001101001101111111110011010000100101101010001111001110111100110011010011000001110110100101110010100110010111101010001111100010001001001011111010001011000100010011001110000101001011000001101011110101011001011001000100011101111011000000001000110100000001101110000000001111110000011101010101 1000100110101111111111111001010000000011011001010101011001100111011001111111110101010110010110010110101110010100010100101000010100011011101100111101010011011010011011110011010110101110110110110011100111110100110110010111110101010100010011010110111010110011100000010110111011111011011010110001110101110101111011000111100000001010000001101111101111001101001100100100001110000110110110001100001000000000 0110101111110011110001101001011010010000010001101110011101011100100001111110101101000000111001100001011111000010110101011001001111110001001010100111100101111010101101000010001010101010100000111100110101010111001011001000101000010010001011101111010111010110101000110010110101110011011100000101100001110101110111011101010100111010100011100001101011010100000111000001111101010011101100100100101111101111 1010010110101001000111001011101100010101110101100001011001100110011010100011111100000001000100001110000001011000001001001110010111100101010111100010100011011010000110101010000111100110010010000101011001000110111011101111101110101100110101111101111001001110100111001001111101000101110001111110100101100111010111001111101110110111100101001101111100111111101100000110010000011101010010101110011100010110 0001010001100100000011011100111010111001101011110000010100010111101110010000110100001011101000101110100111101000111101001011110110001010101001111100011001010101010111000001001000111000110111100011110110010100001111000111100000001011111001111000001001001001110101010000110000100111011011000011100100000001000001100010010000100111100110001010101001111101000001110100101010111101100011010001101101101010 1111000000001100101001111000001100011011010000001011111010010111101100011101011010100011100011000101000000001111100011011001001011100011100101011101110000111101001011101001011000001110000011010101101100101001010000010110001010111110011110111010000100111011101101100111110100011111010001110100100100011101110101110000101101010000001010100110000001001101101111011100111101001101101010001100001110110111 0011101011000110110001000001011111111011010001010000110010001100110001001011010110101011101111110111001000100001110010001001111111000110010000110010100111001011110100100110001010101000011010100010111010001110111110000000000001111010111111011001111011000111101011110111010111111001011111110010010100001010101011101100111100011000101001110111101111001100111111010011100110000011001110100011010011110100 1000001001101101101101001110000001011000110001100011010001011000110101010111000111101101010111011101000111110100111110101001110011010000111110100001011111011101010110101011110110010001100101100011100100000101001011001001100001100000010101100110001000010011000100111100011111111101010011101010010100010001101100010011111011000100101111000110100110000000101010010010111011100011000100001111110100011000 0011101010010001010001011011110100010011011010011110010011011011101000011100100100101011100011011111010011110100111101010011100110110100001010111000001101001011010001000010000101001100010111010100000001111000101011100010111101101001010100111000000101111110101000101100011111111101011011011011111000111110000101110110010101010001101011001011110101101001110101000111001010100010111111011100111110001010 1110010110110000110000111100001011110111100010001110101010000000010111101011001111101111101100110000001100100001001110110110110011001000100000101000011110111000110100000001111110001010010101011110111101001001110001101111100000000100111100101110011100000010111100011100100001101010111001101001110110000111101011111010110000001010110010010001100000010001010111100111011110111010110010010010011111101001 1111001001000011101011011111101000101110010010101101110001011010100010100001010000011010001001001101011010001111101010001001001111111011001001000001010101010010010011110001100110101101110000110100111100000111111010110000111000000001000001110110011000100101100101111001010000000010000101101111100111100010010001001101000011100010110001000101010100100111111111111011111100010000101100010111101000101100 0101100101001100111001000010110001000111000101110010100010110110010100110001001111001101000111110010010010101110100000011011011001011001100101111001110100000010011101010111010011010110000101000011000111111111110010111010100001110010111010110001010011110101011110110111011110010101100101001111010000001100010111110001000110001101110011010000001110010010101100101111110111010110011011010110101110010101 0111001101001000000001001010100110011111101110011101011010000001000000101100110011000101001001111010101010100110000110000001001101011100110010001010101101100011100110100011011100110110000100110101001111000000000110100110101100010001011111011110011000011111010111010011010010111011011111111001110000010000101100100110111111011011010000111101011000110110100011100111010110010010011010111010011110011110 1010001001011011100010100011100110000011100000001010010100100010000010000110010010001011100101100001000110000000011010111001101111100110101001000011101111001011101111011110010111111100001110011111000000010110110010001011010001001010000011010010101110111111011001101110110010001111001100100001001000011101101010001001010011001111011011010110110101001000111001101111001000110111100010101010000110101100 0100000100010110010100001000000110011101001011101101100100010101100101101111000110111100110111001100101010001100111001111001001100000101101110101101001110111011111000010111010111101101111100000111110111111111101010110100010010111110100011001010001001000011111100101100100001010100111001001110111000110010000101011110001100000010101111110100010111111010011111001101111110101100000110100111010100100110 0011001000100001100000100100010001011000011000011111000000110010001001000101101001100001011100011100001001010111100011111111110011010010100110111101000001111110001111101000111110001001111111010110010101111110010110101010111110010011111000111100010011101110001011000001111111000011100010110011100110111001110001111000111111010010101110111101101100000101101100101001110111111111111101110000010011101100 0000001000111111000011010111100100100001011010110100011001110110100100000100100100110110000110100111111001100111000101100110010010000000100111010001010101011110000011001111000000000111000011000001100000010001110110011011111111100000000101101010010101110011110110110110100010010000001011011000101110011001101000100110100100011101011000111101010101101111111100011011000000100101111001000111000011001110 1011110100000000010011100011111111000110001110010100100000111100110011000000000110010010010000100111111000101110110011110110000111111110001011001111111111101111110101000011001011010001110001011011100100000001101010110011000001001110101111100111110000010100000111011011001110010001100000011001111000111111000100111001001001010010001010000110100100010100000010010101010100111000000110101011011011101000 0011001110011010001111000101101110110011010110101001011101010000101011011100011011001100100101010100101100100010111011001011001011000011100101111100101101000100010000000110000001000101001101011011100000110110110101010100101110111011110111001011011010010000000101001101000011100111001100110111110000110010001100110100001011011001000100101001101000011010011010001101110001101101101011000000001110000011 1110111011011110000010000011111110011100000100010101100100011111100111110000100100011010011011011110110011101010011000110111010111100000111001101101101100011100101001111001011101000000100111100100001010000000100000001001100001000100111100100000001100000111011101010100101001111110110111110001010111011010101001010010100000100110110110001110001000010010001000001010010000011000111100111001110000110110 1011100100001011100011100110010101100011010101010011101010011111001001011011000010111000001000000001111110110111011111000010011110101110110010101101010111001000000010010001000011101011010101111110000111001101101111110010111000010101001100100101111101011111000110111110011110100011111111000111011100100011110000000111111101000011101000010100111001100111101000011111001100011111101111101011110011011001 0000111100101000011010101011101000001010000011101101010110010100100111011100011101011000110111101011011111111001100001011010111000100000011100100101110110110001011100001011001101011101110110011011101101110011101011000000101011110110011110100101111001010011000001000111001100000100001011000011100110011100110101101111110101011100011101011011111011011001011110100110100011000110101001010111110101100110 1100111111011011011101101011111000100011100011011011011001001110000000101000100010111111110010000001011110111101010111001010110000010100110000001100011000110100101001011001001011100111111011001011011001111000100011111101001001000001101111011001111101100000110000001111111011110101000010110100001001100010000100011100100110110110011011000011011000110011101000110000010111010000110111001100010110011101 1111000110100100000000101011001000011011101001101111101011110101010001100010111011100001110000001011110011100101010100111101110100110110010111110010101011000110101111011101100101010110001010000001011111111110110110000000100110111000110101111111010010000110111110010001011000101100001100110000001110011100111100010101011001011101011110110000010011111011010000000000000011011000000110001011111111101111 1000110001001101101111110010101000101110101100000011010100001000110101010001111001100100111000111000110101010010110101101111111110111100111100001011000100010111001010010110011011100001010011010111100010111101001010010110001101101100000100100001010011111111111111000101000110000100110110011000111110110110110111010000011011010111111100110111000010101110100001101000011101101000010011000000010111011011 0101100010110001011001101010111111111100010101001111100101011011100010100001100011101010010011010000000101010000110100100110111101110001010100100001101101000100111101111101011100011010001010111101001010101101101001011010110000101100101110011100100100111110110111100010010101100010111111101111101101100100010110000001100100101011000010100000100100011010110010101001011101101110011111100101001000110100 1011110100101010101100111000111011101001100001101111010001111000110101110000000101001111010000111001100100010100001000100001110111100011010111011101101101011000000111010011111011111110010111101011111001001111100011011100101101000110000001101010111011101001111001001011100010000110011000001110111011100100010110110001001111100110011001110010001100101110010100011000101101101010100000011001110010111011 0100101111001100100111100001001101011101100010111110010101001101001110100100110010101100101010110010001001001000011000101011000101111011011111000100111100010001101100001001110110111101011011010001010001000110111110101101011110010011110111111111101101010000010010101010100000000010010111010001110111110111010010101100110111001001111101101101000011010110000110010000100000111100011110101111101000000101 0001101011010101001010010001100010101000001011000000000101001010011100110001001000110111110101010111101011010010111101101100000000001001110100010000010001011111101000011010110100000011011101000110110111001011101010011110000101010001001110100010000011000001101000100001010001011001101101111001001000011010101101111101101001011100111001011110110000100001011101001011110110100111000001110100111010111100 1001010001010000100110011101100011010110011100111000100001110100110110101111010010101010011000001101011000011100101010001100011011101001000011111111111001011111110111010111000110010010001101000111011010101000001101100100110101100110101010111110000101011001100101011111001111000110001111111010010011011011010001010100000010100010110001011011001010100000011110000111001100110100000000011011111100100110 0101011101110111101011110100110111101000001010011110111000100001001000111010100011000011110100111110010001011101000111100000101001010010011101011010011000001100000110101011110001101111000101011110001100011001011100101111000111100011010101101101110100111100111001101001110101010111100011111111101111011101010000000100101101111101001100100011011110000000001011100100100101000010101010111000000001101101 0111000000100100111101100110110000001101111000000001101100001111110101000001101001111110010111001000010111101001100110010001111100101000001001011111110101001010100000000100001110010011010100111101011111010001010110100000101000100000011001011101110001011011010111110111111110000101101111101100000001100101100001001001110011111100111011110110000001110111111001111001100000001110011110111010111111111010 0010001111101100111011001001101110010110110000010110111100001100010111111110011011101110001010111101101110011000010111110101010010011111101100101001111100010111101110110011010110111111100111000010011100100110110111101000011101011111100001110000001100111100000010100011001001011101110000100111000110000101001101101010100100100101111010100101110101011101001001011010100000011000010101010100100100111110 1101101010000011011010001111000101101000110001011011001111101011111011001100101110101100100001000111111011111010001101100011111110011111111110010000000110100010101000101100111001100010111001001001010000110000010001111000001110110000110110111101110111110011110110000001111011110000000000010111110110111111011011010101111100111011101001011110010001001111101001000100111101001100010001011100111000111000 0000000001001000100000001001100101011100001010011001101001111011010000011100101010100000101110010000111100011001010101010110010010011000111000010011101001110010111011010110001011110000011011100100110110010011100111110001111111110010100101001100001010110000101110010111010110111100010010101011000111010000011111101010110001110110011010111101100010101100011011111101110001011011010111101110001001110101 0111010001001001001110101101100111111000010111001110100011110000111000110111101111001100110011111110101100111011010010110000001100100110110011011010111000110010111100101111001001101100100001010000111000010001011010111000110011000011100011101101110010000000000100101111101000000000111001011001011110000100100001111011111010110111010110101011101001010011110001100100000011010011011111000101011010011000 1000100100110101001101011001010100110101000111010100100000100010111001101001001001001001001110010011001011110000110001101111010101100111001001101111000001100101011001010011111111110110111111011101001010011011110010100100010110001100110111110110111100000101001100011110110000011101110001101010101000111001101110100100000110101001010001000010001111101001011001100011101101010010110110011100100011111001 0101010101010011110110000010011110000101101000010110000100100111100011100100100110100100001111101001011011001101110110011011100100100001011110101111101100001010101000111001110100100101001111110011010111111111001001101010111101101111101010010101100001011111110111001101111011000000010001001100010001011000001000000111011000001010111010000100100000111011000111110101011001000010100011111111010010011110 0001001111100110011101000011010100000011010111011110010011000000101111111111010000101000110100010000111010001110111111001011100111100111100100011011100001011000110010000000001101111011110011010000101110001100101100110111110010100000101111011111010101100010011110110100101010010011011111010100001101010110010000000111010110111001001001010000110111001110110110100010000100001101010110100111001101010100 1010000101111000011110000000011000001111111100011001110011100010000011011111101110010010000101111100001011010011101010011010000001101101110100111110111000101101111001010100100001001000011111111110011010001110001110111011110011000101111111101111100100101001111011110111011110101000110100111001100000000001110000000010101101101111110111011101001011111101110111111000101001011010111100000111101111101110 1011110100000010010000001110000000000110010001010001011010000001100010101010100011000010111001011001010101011101001001000111001100010111001000110100100011000011011010011100110011100111110001100101010100000011010010010110100100011010010011110111111111101101111100101001000011101000011010011010010100101011011000100101100101111000000000011100000110010110001101000011110111011011010011010001110111000111 0100000111001100001001100110001010110010011011110101100010100010000001101110010011111110101001011001011001110111110001011101000010100101101010001111010101111100011000011111101111110101011010100011111100010101100000111110110110001000111001001111110111110011111011111010111001000100000110001000110001000001011110100011000111101100000000110011100000000111110010110001110010010110000001001101001111100100 0101111111001000101000001100100010110011011010100010101010011100101000110011001100101110010011010010001011100010001001001100011000100100110110100000011010000001011001001011100100100010101001100001010001010001100100000001001010000111001110101100110110101100100111100011111111000101011111100001000011110010010000010101000000010001100111001011110001011100100100101110100010100011100001001100010010001010 0001100101000000100111101111101000110110100100111000011010100000101001100001000111001101111100110100110110010101111101011110100010001000100100111010100001110101011001101011111000100001010001010101001111011001001010100101100101001110010101101111110001101111111110001100011000101110101100100010101101000011101000111011010110110111110000110001110000101001010001011011100001100100011111000010100111000001 1101010101010101010001111110111110111110010111011111000110000001111101001111001011011111001110000111100000010111011000111111100001001101110110111111111101011101100110011110110011000000001111011001001111011100101001111110111000101110101000011001001011010001010011010111100000011111001000110011100110001100001000010011011001000111011100100010001010100011111001011110101110101000010100010101100111001010 0010110000111101010101110101110111011110000101101010110101100101111101010101001101010001101100101000001001111011001000001101110101000111011111111001110101100101011001100001011011111110111001100110000101000010111010010111100001110011101011010011110111001111101010010000011110001101000100000111000001111111111000001011101111111011011111000010111010001110101101111010000101100001110110100111011110001111 0110111101010101100001001110000100101100110010001000100110010101101101111011000101000100000100000100011100010101001111000111011001011000011100010000010001111100111011101001010101011010011010001111110011101100010010000100111101101010101011001111111110111111110010100111001000010010010101110001111011100110010100011011110011010010100101011110110001110111000011001011111100010111010010011101000110011111 1101100111101010000111110011010001111000110100111001101000001110100001111001000111000100111111001001100001111010000010001110000100001110110101010100010011001111111001010010011101101111010111001001000010010101010110011011110010001010010111000001010010101100101110110110100111010001110101000010011010101100101111110101100101110101011111010000100100100000010111000011011010001110011000101010010001111110 0011100010100010010111111001010100110000100001110010010010011110111101111010010101011000100100001010100000010010010011100000000000101110110010000011111010111011001000001100010111101000100111100111011001100100011110000110110000001110011101111010001011100111011000010101111110000010111010001110110100111001100111110100100111100111010000101101001101000100001101001100001101100110001010010011111110110011 1001110001110110100010111111111100111011000001100111011011101010101101010110101001100111001110000111000000011001101011110100010011011000100110100110010111010100110000100001011000101001101110110111010011101001010010110001000001011100000001110001101010000101001110010001011101011001001111110110100011110000101101110000001100111001010110001001100000001001111010011100100000010101000010101000000001100110
cTrader AlgocTrader

【cTrader】LineAlert【Tools】

2/22/2021 3/12/2021

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

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

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

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

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

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

 

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

© 2026 ajinori