1011011111001101000000110110101100001000101100100000001011001100010010111100000001011001010011011010100101110011000111010011101110101110100000111101100000001110001100110000000010110101110010111000100101011100001011101111100111101011110111000000100111101011011110101000000011000000100000010001110011110011000111001100010111000100010101110011000100100110000001000111110110011011010111011111001011100010 1110100011101001011111110001000110101010011100011000110001110010000011110011100000001011111010101001000000011001110100110101011111101101010111001110001001011100011010000100010011101001011001010100000110100000000001110010010111000101110100110111101001000010001100110110111111110000111101111111011001110011000110111010010001111110011001001111001100011110011100011110001100100111110001001001111000110111 1100000011100101101001101000110001100001011100011101100010010100110110101110110101011111000001100011011110100101101011001111110111000100101010111011011111001101100011100000000001011110111000000101001010010110000011010111110100010011100101001000010010001010111001000101010111001111101000000001110101000110101000100101001101110110000000100110001011111100100000110100100111010101011101011110110111010011 1000010001000111001110110111110111000011101100011000000011000011010110100001101111101110110100010010001101000000111001011000011001101001110110111001010110110010000010011001000010111100001111100100001001101011111011001001100111111001111111111011100101100010001011010011101011000101101011110001011111100101011010100111110010001001010111111100001110000011001000110011011110010101010001000010111101100010 1101111000001001001101111011001010101001111001111010100110001010001000101011111110100101110000000110001101000111001101011010010111101101111111011100100010101011100111111101101011111010001100000011000100100010100011111001110010111101100010011101100111000100110101011010001011101100111010111111100100101100110010011011101011100111000000110001111000000000101111111001010000101010111010110111011111101001 0000010000110101100111100100100110111001010010110000010000101011011100101111101111101010110100110101011100011101001001010000010011101111110100000111011011101000000010110010111011101110011000101110000100011000010011100001010111111111000000100010110011000101110100001000001111011000010010100101110011100101111111100001011001011011001101011011111010011000010110001001111101010110011100011110001001011000 0010000101111110101100001001110011111001110111000000010001100010011100111000110100110000100010101010110110110001101000000001101111110010111110011101111010100011100000111000000110010111110111000010010011010001010011001001110011001111001010011100000010011000111110101010111111001001100010001101100010110110001010111110001110001100110100111000000111010011011000010001110001110100010111011010001011100011 0111001111010111011010110101111011110001111111100010110000101100110110111101011001101000100001011001001101101111001010110000011110100101101010110100110000000010010111011000101111000101011010111111000101000101010110001000000010001010101100110110101000111011010000000010110011111110001001011110101010010100001110001111111111011000010010111111001011001111100000101000111110111000101000100100100101010101 1010110111001010000010000100110001111000001010111011110101110010011111000111101111000110010001000000000110001101101101110110110111010010101011000100110001101000010011010110101101011101000000101010110110110000110010011000110001111010011001011110100111011010001011111001000011111001011111011001111001011110101000011110101010011101100010101000001111100001001001110011101111101011001000010001101011110001 1110111001101011110101101000101000011111100100101110001111100100100100010010010100100101111101100000001000111111001011110000110010011100110000111110110101111000110101010000010001110010100011100010101101110101011101010011000100011100000111000000100101110000101000100000010110001101000010110111110000001111011011111111110001011100010110011100001101011001101111010100111010101000000000010111100110011101 0001001001111111110001000011100010111010010110111000001010111010110100101110110110100110000011011011010110000000111111110100001111100011100110011100010101101010011010011000010011010111111001110101011011010011000101100101101101001010110111011001110100100010011000100001001100001001111011111011110101011000000100100001010110010110111001100010110111100111101000101011010110101110001010000101101111100000 1010110010000111010101101110110110001011111011110101100010011111011101100011010110010111101001001100111010000001100000010101001011100011010000100011001111011111011010000011110100011001100100011010101101100010110110101100100100010010101101110010111011111101011111110110101000000110111100100101101101101111011100101011010001110011011101010101110000000010110011010010011011101100110110010101001001111001 0110111010001101101111101011111110000010110001111110111110111001011011111111000000000100000010111101110011001010110110110011000000100111011001100000011101110011011011010000111010110110100100001110100001100011101011000000111010001111001100010000001001110011011000010101001001001010001110111100011101100110001011001110000001111111100000001101000110001111011010011010101010001001011001111001010001111100 0011110101101000100001010110101111100101110010110110010100101001100111100111001100010010110001110011011100100010010010110111001001010111111000000101011010110100111011001110000011111111110010000011110110110110011010000011101111111100001001111011101111001100101001110101011010000111111011010000110111011010001000001111101101111110001111100011000100100011001011000110001000010111011001001100100001100101 1000010010000100010010011000111101111011001001100100111001001001010000001010011111100001111010111010010111100110110010111101011101010011101000001011010111010100010110101111111111001001001100101000001011100100101000001010101101101100000011101111011010111000100010011000110010110010111100001001000111110010111100100001110101000110010111011000110101100100101100001010011111111100110110101110000010000011 1000101100110000101000101010011101001011000110000100001101000001111000100011111110001111000001011011100010000010111010111100000011011110110011100111010010110101111110101111100011011010111111111000010001000000101011000001110101010011010111000110010101100010011101111110010110001110011000001111011111111101010011100100100011010100110100101011001001011001100000101010110000001001000101001011001011001000 1111001110011111011001110101100001100010101010100100010110100000110010001011100101010011011010001001001101010100100101010011010100000111000110010010110110110001100001110001010100100101001110100100010011010101010110001001010110000111011110010100101111000101011001100110000001011101101010001110111001110111110001110111001001011101111001101001010100011001110010111111110000101100010111010111101011001101 0111000111010011011111000110000111111011001110101011110010011000001011011111001101100001100100001000100001010000101010010010110000000010000100111111110111010111100010101111000111100111101011110010101010110101110111110010101010111111001011001011010001111011111101011101111010111011111100011110000001000111111011110100111010000111110000101110111110011011101000011100100111011001001010101010100111100011 1011101001111011111101001010100101101011110111111010111011111001000011000111010000110001001011001001010111111110010011001001000111000110101010110001101000000010011000000001111110110010111110001111010000011111000100000110110101000000101111000010100000101110011001110000111100010010110000010000010000000011001011001000000001001111011101000110011101101011011110101010101111011111001111110100000001100110 1000011111100101101001111100110100100011000011001111101110110101011010000001101111011010100011111010000010110010010100010100110011110101110111000010001100111010001001100011001000101110111011110000011011010010011111010001111010000001101001110010110110011011111001101010100000000011001110010110011101111101100100110110011100000111101000001010110001000111101000100011010111000010000011110101110110010101 1010101110101100000100000100111111100011110110000110011100001000100111010011011011111011110110001011011110001010011011011101111001110110000001101011110110100001000100000100110001111100011111010110010001001010110101110001001101110110010011100011011101010001010100001111000011101001000010000001101000110010010000101111101011011001001011000011100101001001101010010100011010110011001010111010100101100000 1011110000001111101100001100100010100000110010010000100101011010010000101100011111011100111110011110100110000100100000100110001100111110001010100110010000011111100100100000011101100010000111011100011111001011100010100001000110011000110100011111110010110101111000101110111011010111011110011110010000011100100001110011111110110111011001101100101110011111110000111110101000101011000100100100001100010000 1010101101110000000001011110001101111011101011101010010101011011111110111010001010000101001000000011001001011010000101010111000101100001001001110111111111000110010111010011100001101111001111110100010111000011111110100111010111110011011100110001001100111100101101000111110110101000101010001001010010111100110001000100101101111000101011010101010011000110111000100011100011011001100001000101000110010100 1001001001101011100111001110010111011100011010100011010110000000001000101111110010011001111001110001110000011111000110110000100110110100001100001111000011100011110100101111001110111110000000101110100110011010101011110011011100110000100000000001001001110001001110011010110000101110000110111100110111010110100011100100010000001000000010010000000000111110111100100000111110001000110000001101011000010100 1011110000111110010010101111100000000010111000110001100000011111000110111001111100100101000000010000110011001000111011101010100011111010000101100110001110000001100110111011010100001000100101010111100101110010010100110110110001011011110100011011110011000101011100111001111111001000010110100100000001011011101011010110000010001101011011101111001011010111110100010101001000100001011011110010100101100011 0000001101001100011100111000010101000010001010010110111011110110101101010011111010010011001111000010011000100011101110110101011101011001011011111100110010011011110111100000110100110100101101001100001010011001110010101111100000110011000100101100101110101110000100111101000010101011001010101100110011111100010110101100011110100011111110110111100100000111011100011110010110101111111010011111111101100010 1010010000101100111010101000111001100011100111101110010010001011100101010001110100111100110001010010011011111011101101000001110111111100000000100010000100100100000100111000101101111000101011000011010111101001101101111100010000100010101101010111010110010011010001100001100011100011110101100101000010001101100001110110101101011010110110000010101100001100100010110111000001011100111000110111101100011000 1100110000000000011110111000001111110001100000001000110100101101000110110101000100101001010011111110010000011000001110010100110101100000111001110110101010110000010000001110000110000010011111011000000111110001001001010100000100110100100001111110110001010101110001000010000000101011110010011001010111010010101001110101111010101000011100111001000000010110101000000101110111110111001100011000010110110100 0001111110110101001100000100101101100000100101100011001111111100100010000111101100100011100100010000000001010001111100100000100110000010010100011010100111001010100010100111000001001101010010011011100100010111101000010000001110101111010011010001111010010001111000110011010000100010011011000001110001110110000110100110000011110100100010000001010100000011111110000001001001101111000101000101101110000101 0100001101000100011101100001101010111010001000101101110101001111100101101101011010111110000001100111011111111110110100111101010000100011100111110001101010101001000011110010110001111101000101111010010000111010101110110000010010110110011110000000011001111000110110101100110001100101000100110010111101011111101011101010100100110111100000001001110111010011101101001010001000001100110011111110001111000000 0001011110010110001010001000110001110100101100010011100101110111100010000100100110111010100011110100100101101110101001001100110101000110011101001001000010111001110100001000001011001110101110010111111011101010110010110011001010110011001010100011000111010100101001010101110001101010010011100001010011100010011111111110010000000101111011010110001011000111000110100111010011000001010110011000001111111110 1001101111010110110000011111010001000001000100001010001101000111110101001101001101001011110011101010000111000100111010100101010111011100010010011101111101101011110011100011100110011111110101001000101001010111000101010000011111011000100001001001011000010110011101101010101011110001001110010010101101111000011011011110000100010010101001110101000110001000001111100011101001000110111100001000101101010000 1001100110110010001101001000111000000000101110000011011010001010000111101011110000011000000110110101010100001000011100010010011110010011001010100011100000000010111100100110001100101101001100011101111010011010000100001010100001111110101110010010011011001110111001100100100001101101010110010100000000010000011111111111001111010000000100000010011101111110001011111111110101110111100011110110000110100110 0000110100000101101111100101101100111001111111101010110100111101111000111100000000111100000000000010010100111111000111001001000110000000111010011011011010101100000010100000100111001011100010100001101000011001111110110111000010001010110101001010001001100001101111110010011111111101001100111100001000011001000011100000010100000000000101111110100110011001000110001010011001010010100111101010000101111010 1101010100000111111100111011001111010000101000011011101110111010001011111010011011101101101111000000000100000001101011011001101011100010100011001010011000001010000000110011010000001100010011011000101000100110010110101111001000001100010010000100001111111110000111110010011111101000001000001110110101011110010101000101110101001100011110000000110010011111010111110011110001100001011000010010101000011111 1111101111011000100101111101101101110000010011010010011101101111101110010111100101111011011000110101110111100100111010111000000001000111011011000010011111111101100101010011110110110011100101011110001010111000001110010010000010011010000011111001111111101101001111111000101011011100011101110101010001011100000111010011011001101011111000100110100011100100001110011110100001100100001110111000111111101111 0101010101000000011001111110011100100011100010011101100100100000000001100111001111101101011000110111001001110000110110111010111001111010010001011001100001011011010001000101011110100000101111100110101010101110110110011010100101100011010011000100000010110110001001000110100010110000001010011011111001110101011110100101111110110000010101100011010001110011011110010010000111000111011110000111010101101101 1000111101100001100110101011111101111010100100110111001100100001101111100101111111011100001100100101000011100111001000010111000100111011110101110000000101111100101010001100101111100110010100101110100100000101100001101111001101000010110101100101111000011011110101011101100100110100000010111111111010011111001010101111110011010101011111000111011110111101110110010100001010011000010010111100010010011001 1000000011100010011100110111111001010100111001000001111011101110010100101010110001100001110010111011010001011100100000010000000001000110111111111111111111011010011110101010110101011110111010100000110110111011101111110001000000110010100101101101010111111000001010101001010110101101011101111100000100011011010000101111110100110101010001100000001011000010111110101000101111010101000001010011100100100000 1011000001101001100000110100101100111000111011011011100000000011000110010000010100100001111111110111101000011110110101001011010010100000100100100111001110100101110101011110000000000101111010100110001010101101010111101000001001110000101110111011010100010011011110011001001101010110000111010110100011101011010000010010010000110100100101111101101000010000111100010110000100010000001000001111001100010111 1101001110010011111000100000010010110011101010001001100101000001100010011010111110111110011001101000101110010010100010110001110111010001110011110010010100001110011010001011011001010010001111111111000111000001010011010011000110100101010010111000111011101100010011001101010000110101110100111010111011001110001100111111100111110100010001010110001000110011110001101010010010101010011111011110010000101110 1101010111101101011011000101101101110111000101100110110001100111110011110011110010010100110110001110111110001001111110001110100000101101111011000110111010101011101001010001001101101101100111111000011011101111111100111111001010010001000000000111101011111101011011100010000010101001111010101111000111000000100110111001111110100011001110100010100100010001100011100111000100110011010111100100011000011110 0011101111011001110001101001111111100111101111001010000010011011000100101010000111000001010010110011110101101111000100001001110110011100000111100011100101010000011101010101111010011000111101010110101000101010011011001001110101110010111100100011111101001001010000001000001101111100010010010101100000001010101011110101001001010010101111111011110010001011001010010110111101011010000001000110100100111000 0000010001101111100111100000110001000000100001111010000010110111100111110011001110011101110111100010011100110010010111101010011011111010100001001110100001100000000110111100001010101001011010101111110110111011101001100110111111100010000110111100001001011010001000110111100101000001100001101010110110011111110010011000101010111100001101100100000000000011100001010100110111001001010101001010011011000001 0111100101000011110101001111100110111011010011011011100000110110010001100000101110100110000100001100101011101010110110000110101110011100111000000101001010111011011101010000111011000100100110111000101001010010101111000010110100000011011001111000010101111101010110100111001001110011101001010001010110000111011110101110000001011111000001101100000010000111100010010110111000100100000001000111111101100010 0101010101001111111000000110110110111101110011110100100001001100011100011001110110110101001101001011110001110000000010011000100001111001110110011000111010110011011001111000100101110000011001111001100010011110000111101000101011000001100100010110011001110000100011101100011010110000000011101100001110000011111001010010111111001010101101101111001010001010111001100011011001100100100110100011110001010110 1010000111010001111110110100101000010001101011110001101100011000111101010100111010100011111111101100111101011101011111111101110001111101000100101011001101010101100001111101011000010110011101110101011110011011100000110111100111001001100011101101011101100100001111000010010100001001001101111100110111001001001110110010011110111100000001100001111101111100001100010100100101100001000111111101000100010001 1001111000010110011111000110101110011000100010100111011111001100111000100110011011101101011111111010010101010000110110010101000111000111101110111111111101000000000110110011111100011100111000101111011010111110010001110010011001011110100010101001111101001000101011010001000010110110111110010110110100000100110110111110000100100100000011011110000111000010000111110111011111001111000101100111010000010101 0100111101001101010100110100000010101000111001000011011101111111001000010010100101010001111010111001101101011011011100100010000101110011100001001011100010100000101000100100100101100101100001001000011101011011101011101110101011011111101111110000001111110111101111100001011100000110011100100111110010111100100000001101101011101011100110101011010101001001001000111110100101000011001011001001111001100111 0110110001011010111101010101111100000000010000111010000011000010001001111000010010001010011011110111000101111000000101011101011110101100011001000011000000100100101011001100001011010011001100011000111011011101000011000111101110011100001011110111101101110101010000000100110111010000010010001001011101100101001110110001011111100010110001011110110001111001101111101110011011111000000000010011111101110110 1101011101000011011111000101110100111111000101001101110011111101011010110011101100010110100011011111110000110001000101111010001100101110101100101011100111001000001001010010100000110100110011000010101010001111100010110010100001101100001011001111110001100011110010100100110100010110001110011111111010000000110011101000110101001000101010011100011000110101011110011100101110111010101010100100010011111110 1110001000010001111000100000000000101000010001001011111110010001110001111000010010110100100110000110000110001011010000111001000101001110110010110100101111101000111001100110011000000100101001001001001010101110000010010110111011100000000110110000011000111001111101111010001000100000011100111110101101001110111001001001111010101111001000100101010111011110000010001000101111011011100010010001111100010000 0011110101000011000010001110101010111010111011001111101101101101001011011111111100001100111011111101001001101010111100001110000100000100011101101111110010100100111011011010000101111001101110100101010011111100101101000110110111111001001100110000110011011101111000011100011110100111101101100010000101100110111011110110111111110001011001101011111001010010100100100011001100000111111101000111101110001010 0010101001111001001010011001100101000011101100010100110111000000101001111000001011111000100011011111110001100010101101100011010001100001010011111100111110110111111000101101101011101011000101010100110101010001110011010110000001010001011010011111011001000100011111000111101101111000111111111101111001111100111011001011100000110101101000101111101001011001100001100100000100011111000000010010110001111110 0010110110110110011010010011100000111011101000011000111101001100101010110001000010011011100001001101111100011101101010100101111011000001010001010110010000000111111000111010100110110010011010011001001010011010011111000001000101111110010111010011101010100011100110010010111111111001101011001000000100101100000101101111100111010001100101111100001010010101111101111011010100110001010010011110111111010101 0010111010001010000101001111111001101100111001000011110010010100111001000011100011000010100100010000101001110100101111110101000001110001110111111111010011110010110011001001100010100010100000011110000111011001011100011101000010000011110011011001111110011110100000100111000100000110010111100110011011110000111000101011010000110011110100011110010011000001001101111111001011101000100001111100001110110111 1011101100110010011101110111001001001100110111111101010101000111110000011001111100011111011101000011101001110000110011100110000000111001101100100101101010101100110110001001011111101111000100100110110101110110001001010000110110101000010001000101001110110101001001101000011000110011111000110100010001111011100110110010000000000010111101110010000011111110100100011101001100100110001101000101110001000011 0101110111011100000111011110010010111110111000010011001100011001110001101001011010111001011010110010101001000111101010001001111111011111101011000101010101110010011011001100001011110101101110000111011010010000110000010101000100010001011111111110011101111100110010101101111010000101000100010011101111101011011010001011001010010010010100011100101100010101001111111011001001011001011110100110111000110110 1100000001010110011001111110100000110011111110001110111100000011000111000100010011001110100010010011111000111011001111000000000111010110110110111110011000111111100101001001111010100101010111000111001000000110101010111111110110001001110110100100110100101100101010001110101101011000101110000011100110111111110000110000101000110101101110111000101011001010111000011000100010111010100001100011110001101110 0100000111101100110100111010001011001010100001101110010011101000100010111001010111100000110111101000010111101110101111110110010000011010110111101001011111111100001001100111111011101001100101111100000101111011011011001101001101101100111111011011100110100110011100001010111000100001100010111000110011111000010010000110100100010011011110010001100111100010110010100010001000001100110011100001101011011101 0001010111010111111100010100011010010000100100000110001110110100110001001001010110010011111111110100001001110101001100010010101010101111011111111011101011100111111001100010001111011101100100110100001011111111011010100111000111001110101010001111100110011001010001001010111111000111001001101111000000101110101001100100100101100101011100101111000001101010100100011111101111111010100111011110110010010010 0010111101100011001000101000000110110000000111001111110110001011100001110111011101001010101100101110100110100001111101111000111001111010010101110100011001011000111100001011001000011101000000011110101100001000000101011101011001001110101000000001000111111101011111111011111111101100111010111111111110100011000110001001000110111010100000001100010001100110100001010001110000101011001110000001011100011000 0111110101101100010110110101000110111101011001101001000100011110010001110010010100010110101101000110010000100011001001111011001111101111010111100101111001000000011101100100011011011101010011001101101101001110100101111110100011000011111000100001010010110111000011110111110111001101110111010000001111010111001111110001001010111011101000011100101110101000110101000110010001111110000000010010111111011000 1111011111001100110100001101001001110101011111110101111110001011011100111101101101111101100000011011111101101110011110010111001010100011101000011001010101110111010011011000101100001010011101110110001011101101110010010101011110000100010100011100111100101111111011101100101110001010000010100001001101101111000011001001110010101011000111100111010100010101001001100010010011001011110010001001101111000000 1111110110100101001100111011001000001010110010111001111100000001101100010101000000111010101110101111001111100111000010010011100101010110111101001101001110011100100100010101001000111101010111011001100111010010000101110111110001100100001001111100000101110001111101010001110001011101101101110110000101101010011001110001010111101100110010101000000011010011011100001010100011100101100011010010010100011011 0010110101111011100100010100011100100010011111110101000101111011000110010001011001110111001101101111110110000001110011110000111110000000111001000101100111101111100100000010011001101010010011000000010001110011000110100011101101111010110010110010111100100101011010011011100011000011011110101000101111100011100101010010011000100110001000000000001010001110001110011000010001000110000000010111000111010100 1000101010011100000011111100111010010011000100010101001111001011111000101011110000001100011011010001100110111101011101001000110000101011110110010000011011100001111110101110001101010000110110111001001110011101100011000001100100111000010110101111001101000011100000100010001010101100000010111100110011011010010010101101000001100010001101011010001110010110101100101010010010101111000101001111000000001100 1010011100100001000110110101101011100100000101011100100010111110101011101111101010011010000101001100001111000000001100000100010111101110010011010101101101111011110100100010010001101110110011100110101111111011100001110101011110010101000001001111111100001001100100000100110110110100010101110000111101111100010101000001100111011110000000100011111000010001101001010100001010110000100010000010001100110010 1110010000111010100101000011011110001100001010010011100110111000100000101001101101001010110011010100000100101100101101011100010001000111110000110011011110110001100110111001100000010011000010000010000111101111110011100000001101011010101101010010010110110010101111101110000101100110101001101101011000000001000000110001001001101010010001010111011011111001001011101100001101101101101000001110110011110001 0101100011110100110101001110111111111100110101111011011000111011101111011110001000101100110000000111010110010010111000000110001010000010100100000110110111111010000001101011100111101100000100011000101101111100101100111011010111000101001110001100111000111110010101011000111100011011111111011110111000011110100100110101110101000110110111110101110010111111001101001110111000101110010010001100011111011000 1001111000110100110001111101100100011011001101011000101001010110001011101000100110011011010111100010111100101001101111000101100100100110110000111111101001000100000101111011110111101011000010100100110011011001110011110001101011001100010001011010111011111101101100000100001011100000110101110001000110010011110111001001100100001100111100100001010111110111101100110001011010111011011110011110101001011100 1000111110011011111000010111001011000010101001111011000010111100001010111110100010011011101011110111001011111011010100010100110111111010001010001011111001011101011101110000000000011001000000111111011001101111000000110101001110110011110101001010011101000011001000001011011000100111100101011111010101111001100111001001100000010111011101000100010111100010111101101110010110010101010111101001110001010101 1010010001011011011110000011010100011101000000011000001001001010100101111100001011101000110001101111111011010111010000001011010010110001111011101110011100110110101110011011010111001110000010111000101111110100110111010100100001100101101010000100001011001101100000110101010110011011111011010001110110011000000100010100110111110110111110101100111110000010101100011000111100101110001011010100001101000010 0000110011100000001000000100110110011010111101101000000001110100000110000010101011011011000101011100101011100110100001100010011001110110000000011010110010001111001101001001011100011100001011000111101001101000111000101111010010110110010001001100111110011111110111010111000100001100010111101000010001110111111111110100001100011011100101110110101011100000101011000110010101100010011011101011100000000010 0100011101111101101111111111110101000100011000000001110111011101101000101001011110000010000001000110001011111010110010010011101001010000111110010000111101110011001000100000100101011001111010111110111010111110110111011000001101001000011001101101001000001110110100010111111110001001110100110001101011111101010100011111100111110001111000100111001010010001001011100010110001000010101010000100000000110110 1001001111000011110110010010011111110000011100000011100011100010010111011011111000100000110101000011111001111011110101111101010100001100100010111000111000010010111010010111000000111010011011011111000010101110100110010010101101110011111111001101000001101110001111100111000100101010110000001000110101110001100101001011001100011110110001101010000110110111100011001000001010011101100101101011111110101110 0100101101101110001011101101101101111101010110001000011100110110011001111000110010101000111010001010110110101000101011110011011101110111000001110011110011101101010101111100111100101010100110010110000111010111000001011101011011101101101011001001000010111110010001111000011010010000111110111001010001100010010010101111101110011101100011110100100001111011100101101111110001101000011111011000010000000101 1000110101001101100101100100001001100000100100101000111101000111001011010100000001110010111000010101011110011011111111100010011100001100101110101000000011101100101111100100110111011000001001010110100001011101111011111001100111101000100010001000100111010111110011111101000011101000110101100101110111111000001011110110110111111010000111011011001111010010101110100101100100111111000101010011101111011011 0010110100101110101111101110010110010000101010001110010111110101010010001011101100011110011110110110001000000111000100111011001110101101101111100100111110110110011000111000101111000100111011011111000010111000011111110011000110101001011001101000110111011000101111110110011010111010011101010000110111000101001111001101101011010010100101100101111111110000011001010010011111001010100011011010001001000111 1101111100101110011001010100000111111001111010101011111011000001001111001111010100101101000001110010101100100100011001001000111000110110100100010010001101101111100101110001100101010111011111111000010001000101001001000000100110111101011111010000010101010011100111010100010000101000111110011001110001110011101011010100100010001000001100111000111010101100000011011000111001110100111111000110010010001011 0111010000101101100101111111011010101101010011111010111100010011111000001111110100100000001011000010010011011110011110101010010000110100111000000000001101000001110001011011100111101000101001010110011101001111001111100001101111010110110110000011011111011111000101010011111101011101111101101101011101011001000101010100011011010101110000110101010011001111011001001110101111000000110010101100010101001001 0111111101010111011100000010110100011111010111111000100100010100111000110011111010010110101000101100110000101001010001110101001000010111110100100101101001111011100100101001101101000111011011100000100011000110001111001110101001101010001101001111111100001000001000010000101011000000010010000110111011011011011100010101110111011010110000111101111001101111110011110011110010010000111010101000001101110110 1011001001010000000001001110010110101000111001011011101001110111110001011000101000001111011011001001000010111010101001111101110001111010100101101110000101110110101101100001000001111000011000111101101010100110000010101001000000111001101000001101001001000110010000110111111000010101011011000001010000000111101101110111101110001111101000101001100011011010100000010100110000101010000000001101001010001110 1111111101011011111010010111011100000010000001001110110111000000000100000001111011000011111000010100110100000110110101000010100010010000001010110111110000001010000100000010001101010111001101011100111111111011100000011000110100101001100110001100001010100000011010100101001100001000111111110111011011001111011000001000000010011001111010010100101011110101010010001110011111010010111000000001100111010011 1000110011001111100100100010000011100001001010111111100011011101000001111111101101001001101100110010101001000001000110111000100010011111011000110101101010101101010110011101110011110101011010111111110110011101100011110010100111011111110010010110101101110100000001010111101111001000110100001100100100011101011101011100100010001111011010001110110011100101100011110001001101011010111011101110010111110101 1000111101100001101000000101111011000110110100110111011111110110000001111100001001001011110100101000110100010111001001100011010111100110010000000011110001011100001111011010011001111100111101011101110010001111001110100110100001100010001111011000111011101011010011000111011011001110010011101001000011011101111100100001001110111101100001110011011100001000101001111000100010000111011010001000100111011011 1110010101101011100011010100101010110011010011101000000110010101101001110111100000110111100011111101011010101110000010010110100101010001010011000011011100000011100000100111010110000101110001000100110101001111000010011001111100011110010101010100001010000011100101100111101010011110111011011100000001000001000010101011010111100100000110101101100001101111011101001101010010010101111001001111001001000011 1111001001010011110011110101111000000001110001010110101110100011011011111110010010010100000100001011101011101001010100111001011100110010100011011000111110010101010011100111101011000000010010111100100100111011101101101111111100011010100010101010010110110000111010011111111110111101000110010111001111011111000010100101100001101111011011000100111000011101111101010010001001101100111000001011110111101001 1111111010001010111000011000101010001100010010100000110100011110011001110100100101100010101010010110100011000001100100001011001010001001010000001000100100100100110000011001100000101001001111111110000011100010111101011111110111011100010011111010010111010110010100010101111001001000101010011001100011110100110100101111111110100011010100100010001001101111110101010011101100100101100010000001100101011100 1111110111000001001101101011100000111111111000110111011011110010111111010110010010101001110011010110100001101000000000101000111100111000100100000101111110111101111110100011000000000011001001010110001001101111100110100000101100111010111100101011000010000101111010000010111100000111111101001011001011010101010100001100111011101010100010110101100000000001010011001010101000101110111111101100111101110001 0010001001001000011000101000100110101000011000001010001111110001010101111000010101010110110001101111010100010100011100100100000001011100001001000101010110001101011010100101001100110110011010111111011010110101000010100110011111111100000101111010011110111011011110011000101110000011001011010010111111001011010101111001110110101111001110111111100101110100000010010100011100100000111011100001101111110111 0110000110101110010001000100000111100110101101000000010010110011100010011100110011111011100000100111010110100010100101110011111011000000000000100110001000110101100010111100101100001001100101011011111110100111110100001101000101111000101001010100010000001101111010000010111011010100000111011000010101001101100100010000010100000101100111111100110111010001001111010111100110111111111010101110110101001100 1101000010110011001010011111111111110100111101010001000001100000100101111010000000101010111101110110101011001001100001001111011001111011100110010111101001001010010000101101011000101111100010001110001111100000011000000111110011101011010001001101110100101100101110001101010100001000100110110010111010111011000010001010001001000001111111001010001101000110010100010010100111110101110101100110111110111010 0010010000110000100010110101000000011010000110101110010110001100110100000001111001011100001010110100011001001011101101101111111101110101010111101100111100011100101000100100011100111000011010001011110100101011111000100111000101110110011110101011010101001001001000100101100010000110000110011010001111011101001110010010000000011101011000000110100111011110111011010100100011110110100001100011111110011001 0010011100111010111011101110000000010110001011000101100110011001101011000101111010110101011011100100000010110101100111001100111110000100001111110100000100101100000110111100110110110101000010010010101111001111110101101010101100100001010101000011010100010110010101000001000010000000000101010001110111101110101110011111110101011011101110000110000010001000110111110110100110010101100101101011000100101100 1000111101000111000110100000110111111101000001110010010001011010000111011000010110000001010100011100111000101001101001110011100010111111001010010111101100001001011001011011110101110010001001100010111110101110000111000000010100101110011110100111101010011000001010000110100010001111000111101101110101000001101101000111010011111011000000111110000001000011111000111110010111111010010101111110110110001111 0100100100000000100101101110101100110100101000000011111111101100111001001101011101100011101111111000100010010101110011000010001000100111111000001011101001000001010110101001001100011011110000100110001111111100110101100110101000001001000110000001001101101011101101010000001011011010011011001100011011110110000000011110001101001111110100100110100010110101101110110011001111110100110111000000010101001000 1100011010000000010110101000000001111111110111111010011000100110101000000011011010011101100100101111100110101111110110010010100110010001100110001101010000000110011100110111000111011000101001100111001000110010111101101000011011100001111100110000111000010101011101110001010101000000111011010111011110001111101000101111010111000001111001110100110001100000111001011111001011100110000101111111011110110101 0100110010101101001001110111100111000101011001001110001001101110100100011110000011101100011010000110110010010010010010101010010100001110010110111011100100111000000101010101000000100101110110100011010001011101111110010111111011011111101110001100110110101001011000010001110000101011100000010101010011010010101111101100011011001011000011111011100110010010011101010101000110111111110001011110010001100100 1011011001110110111001011111110101011110000110010101100111111101001111011010000001101001000001101010100110100111001110111110011110000111011000011010110110000000111001000000100110101101000001011000011110110101111110011001111010101100010010110101110010011000100101101001101100101111001110000111101010100100000100010010001110001000010001000011001011100000111010101101110110001011111111001110100001101111
cTrader Algo

Algo【cAlgo API】

10/19/2020 5/2/2023

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

インジケーター、cBotすべてのベース

Algoクラス

cTrader内で作成するプログラム、つまりはCBotやインジケーターのおおもととなるベースクラスです。CBotのRobotクラスとインジケーターのIndicatorクラスはAlgoを継承しています。

プログラムに使用するための主要なデータにアクセスするためのプロパティを提供するインターフェースとなっています。

このクラス自体を意識することはありませんが、CBotやインジケーターから頻繁に利用するプロパティは実はこのクラスがもってるものです。

public class Algo : Object

関連するクラス:Robot, Indicator

 

プロパティ

このクラスに限ったことではないのですが、C#は型名とプロパティ名が同じ名前のものが多くわかりにくく感じるかもしれません。ここでは()内は型名、そのあとがプロパティ名を表してます。

比較的よくお世話になるものを上の方に並べてます。cAlgo特有の型名については別記事があるため詳細はそちらを参考にして下さい。

(double) Ask 

その通貨ペアの現在のAsk値です。

(double) Bid

その通貨ペアの現在のBid値です。

(Bars) Bars

これまでの4本値データ(Bar)の集まりを取得します。

(Symbol) Symbol

通貨ペアの各種情報を取得します。

(string) SymbolName

Symbol.Nameが直接参照できるようになってます。

(Chart) Chart

cBotやIndicatorが動いてるチャートそのものを取得します。チャートの表示やオブジェクトを操作するときによく使います。

(TimeFrame) TimeFrame

チャートのタイムフレームを取得します。5分足とか1時間足とか。Chart.TimeFrameが直接参照できるようになってるだけです。

(Positions) Positions

保有中Positionの集まりを取得します。Positionクラスからはポジションの情報得たり、ロスカット、テイクプロフィットを変更したり、クローズしたりできます。よく使います。

(History) History

これまでのトレード履歴を取得します。HistoryはHistoricalTradeの集まりです。

(IIndicatorsAccessor) Indicators

組み込みインジケータを取得するためのアクセッサを取得します。ややこしいんですが、表示されてるインジケーターの集まりではありません。

(bool) IsBacktesting

バックテスト中かどうかを取得します。バックテスト時と実稼働時に動きを変えたいときに使います。

(RunningMode) RunningMode

実稼働中(.RealTime)か最適化中(.Optimization)かバックテスト中(.SilentBacktesting)かビジュアルモードでバックテスト中(.VisualBacktesting)かの状態情報を取得します。

(MarketData) MarketData

他のシンボルの4本値データ、板情報、Tick情報を得たいときに使うオブジェクトを取得します。

(INotifications) Notifications

音鳴らしたり、メール送ったりするのに使うオブジェクトを取得します。

(PendingOrders) PendingOrders

待機注文の集まりを取得します。待機注文の情報が必要な時はここから。

(IServer) Server

Server関連情報を見るためのインターフェースを取得します。

(DateTime) Time

Server.Timeが直接参照できるようになってます。

(DateTime) TimeInUTC

Server.TimeInUTCが直接参照できるようになってます。

(Symbols) Symbols

通貨ペアの存在確認などに使うオブジェクトを取得します。

(Application) Application

cTrader本体オブジェクトを取得します。cTraderのバージョン情報、カラーテーマ、ユーザータイムオフセットを保持します。カラーテーマ変更やタイムオフセット変更のイベントを検知するのもこれ。

(TimeZoneInfo) TimeZone

このcBot、インジケーターのタイムゾーンを取得します。東京時間とかニューヨーク時間とか。なおTimeZoneInfoはcAlgo特有の型ではなくC#(.NetのSystem名前空間)のクラスです。

(WatchLists) WatchLists

ウォッチリストを取得します。追加したり削除したりできます。cBotからウォッチリスト編集するという発想はなかった。

(Assets) Assets

 cTraderが持ってる資産情報一覧を取得します。Assets参照。(cTrader4.5以降)

(String) InstanceId

インスタンスごとに割り振られるIDを取得します。このIDはcTraderを再起動したり、時間足を切り替えたりしてインジケーター自体が初期化されても変更されることはありません。このIDに紐づけてローカルストレージにデータを保存しておくことで、再起動後もインスタンスごとに異なるデータを保持しておくことが可能となります。(cTrader4.6以降)

(IAssetConverter) AssetConverter

為替レート変換をするためのオブジェクトを取得します。(cTrader4.6以降) 

 

メソッド
(void) Print( string str)

cBotウィンドウにログを出力します。よく使います。引数には直接stringを指定するほか、C#のstring.Formatの記法が使えます。

(void) RefreshDate()

データを最新の状態に更新します。処理途中に注文状態を更新したいときなどに使用します。

(void) BeginInvokeOnMainThread(Action action)

メインスレッド上で非同期で指定したアクションを実行します。

(IndicatorDataSeries) CreateDateSeries()

IndicatorDataSeriesを初期化します。注意点としてOutput属性のついた表示用データはこれで初期化してはいけません。非表示で使うためのIndicatorDataSeriesを初期化するためのメソッドです。

(void) OnTimer()

オーバーライド用です。一定間隔で繰り返したい処理があるときにオーバーライドします。Timer.Start(n)が呼ばれると、n秒間隔でOnTimerメソッドが繰り返し実行されます。Timer参照。

(void) OnException(Exception exception)

オーバーライド用です。cBotやインジケーターの例外発生時に共通して行いたい処理があるときにオーバーライドします。 (cTrader 4.6以降)

 

RunningMode列挙型

稼働してる環境を表します。Algo (cBotやIndicator本体) のプロパティRunningModeで取得します。

RealTime Trade画面のチャート上で稼働中
SilentBacktesting VisualModeじゃないバックテストで稼働中
VisualBacktesting VisualModeのバックテストで稼働中
Optimization 最適化中

 

 

TimeFrameクラス

一応クラスなんですが、列挙型と考えていいです。解説が必要なプロパティもメソッドもないので一覧にしておきます。TimeFrame同士を不等号で比較できるようになってます。

cTraderはとにかく足の種類がたくさんあります。9分足とか使う人いるんだろうか。一応表にしておきます。

(updateにより追記) 下記に加えRenko(練行足)やcTrader4.4からはHeikin~(平均足)といったものも使えるようになっていますが、これらの特殊足は一般的なHourなどの足と不等号で比較することができません。比較しても常にfalseが返るため注意が必要です。

Minute 1分足
Minute2 2分足
Minute3 3分足
Minute4 4分足
Minute5 5分足
Minute6 6分足
Minute7 7分足
Minute8 8分足
Minute9 9分足
Minute10 10分足
Minute15 15分足
Minute20 20分足
Minute30 30分足
Minute45 45分足
Hour 1時間足
Hour2 2時間足
Hour3 3時間足
Hour4 4時間足
Hour6 6時間足
Hour8 8時間足
Hour12 12時間足
Daily 日足
Day2 2日足
Day3 3日足
Monthly 月足
Weekly 週足

 

サンプルコード
// 非対応の時間足だった時はcBotを止める
if(this.TimeFrame < TimeFrame.Hour) {
    Print("1時間足より短い時間足には対応してません。時間足を変更してください。");
    Stop();
}

(追記)このコードだと練行足など特殊足のときには止まりませんのでご注意ください。

 

 

Assetsインターフェイス

cTraderが情報をもってるAssetの一覧を管理するインターフェイスです。

public interface Assets : IEnumerable<string>

IEnumerableを継承してるのでCountでの要素数取得や[]によるアクセスも可能です。ただし、[]によるアクセスで返ってくるのはAsset型ではなくただの文字列です。

 

メソッド
(bool) Exists( string assetName)

指定した名前の資産情報をAssets内に持っているかどうかを返します。

(Asset) GetAsset(string assetName)

指定した名前の資産情報を取得します。

(Asset[]) GetAsset(string[] assetName)

複数の指定した名前の資産情報を取得します。

 

 

IAssetConverterインターフェイス

Assetを変換するためだけのインターフェイスです。

public interface IAssetConverter

 

メソッド
(double) Convert(double value, Asset from, Asset to)
(double) Convert(double value, string from, string to)
(double) Convert(double value, string from, Asset to)
(double) Convert(double value, Asset from, string to)

アセット(通貨など)を変換します。(下2つのオーバーロードはcTrader4.7で追加)

 

サンプルコード
        var volume = 10;
        var yen = AssetConverter.Convert(volume,"USD", "JPY");
        Print($"現在の為替レートでは{volume}ドルは{yen}円です。");

 


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

新しいコメント

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

cTrader's Life

© 2026 ajinori