1100111001111111101111001101110000010011011011111110101101101101101111010101000000111100110100001101101101011010111001010001000111010110011011011000000111010111111000111101110101111010010010010110011000100000001010100001111011110101110010001111011110010111010011101001111100101011001010001111010110111100111111111100110111111011001001111000101100111100100000000011001111110010000101110001100011001100 0110101111101110111010111011101010111110000101001000110011110100101001010001110010100011100001011001000110101110101101010110100100000000011110011100011111111011011110101111010110101110010111000000000100010100111100010110110101011100110110110000110101001101100111110001010001110111010010100011110101001001011111011000011100011001001111100111011001010011000000001001000101111110001110000111011100111010 1011111011011101000010100101010111110111011010001111010010110011010011100100010001011111000111100010000000111100001111001010111101100010101011011110111001101111111010111000001101110101101111111000001011111101011010100011000000110110111110001011010111011110111111011110000100001010101011011101010001100111111011101010011010000000001101101101110101001100011000010101010111100100011101001111000000000111 1101010010000010010111111111110101110001111000111000100110110100100110011101011110010010000000111010000101111000100100001000001110010010011100001111110000110110100110001001110101000010110011101010000000100001010010001011010011000100001001000101001001001111001101111101100111110010010110010000000100110100000011101011100011100110110000000011111010011100110011101010111101010100100110010011110100100001 1001011111101101111010100100110001111010001011111011100100000110010001010010110010000111010111001100101110111110110010010000110101101110110001000001100101010111000011110010111010101111011100100011010111100011001001000001000100100011110111000110101001011000001000110110100100100100111010000010010010011010111001111001001100010110011001110100011011111000000001001001011110111001110110111011110001111100 1000001110011010100000101001001110101000111100001010010111000111100011100111011000000101101000011111110100010110001111110000010001000110001100000111110101110101010111011110111000101000100101110100111001101010010111011111111101100000101111010100101010001011101101001101001101100001010010111111010000011001110010011011111101111101010111011001000100110010000010001000010001000101101111001110110010011110 0000001010111000000000101000011100010110011101000011101011011001000110100101010010111101011100111100000000011010011010110111100010010110010110111111100010000010000111100000110101011100000010101110110111110111000100100111001001000111000101001100011110101011001101011011001111001001011000010000010001100000000101000110011001011001000110111011010111100111111011010001110110010110110100100011011011111000 1011010010001111000100100011001010101101100100001010001110010111100101000100110011111010000011101001111001011101000011100001001100110101111000101111100101101010011011011000100101010011011111111100011110110000100010011010101111010011011010101101100001010100110000111010111011110111100111001000111101001010100110010111000001010110101101001010011001010100010000110101000110100000001011101101001010000010 0001111100011001011110000001001110101101100000010001101000010110010011001001111001001010111111001101010010100000011011000011010100010110000110110100111001111110111001010001000010001100001110000100011110011111001100010001110100001000010010011100011000110101001000011000001100011101110010000011011100000110001100101101111000001010000110011101100111001100110111000000110111010001101011011110101111001110 0111111110100101100000111001100011001011111100111110111100010000101101100110010100100011100000101010101101110101001110010101001011100100101001000101011000111001010001010100000011001001011100110100101011100110111000110101011100010011111101101000100010110100111000001101110111000100011001010010001101001111011000001010101000010000111011100000011001110100000010101000010100010110100000101011100011110010 0000010001100101101101001110110101111101010011110110101011111110111000110101011010011000110001101011000100100111000000011010001111011001010110010001001000110000100101110000001011101001001111001010101001110111101010111000101101101010101110001100111010101011000001111001110000100100101000011101011001000111100111010001110100100011111110101110001000100101000111100100000010000001010000110000010011011011 0001011010111010100111101111111011111011000001001111011110111000001111101001111100110010000100101110110111000010000011101101100010001011001101100000010100100011110111111100110010100010001110110111010001100100100101000000001001000001101011001011110110100111111101010100111111110100101100001000100110110011111001111001000100010001100101000100110101100110101010101011101101011110100101111111010000010011 1010001100101100101110010100000100001000001001101001001111100110011011110111010011001101111110011100010010100011001110100111110101111100101010010010100100111010111011111011010001000010001011000100111011110010000011011010101011001010001011001000110111101001011101111000111000101010010011111100101000110000100100000001000111100001100111100110111100101100100100100001000001110000000010101111110110100110 0001101100101010011001000000101100111001110111110110101111001101100101100001101011001000011011101111010110001100110111110111010110110000011111001001000110101010111010001001100111001101111100010011100101101110011101000000101110111000000011101011101011100111100101101011110011011100010011011000000101111111011001101010000111010001101100000000111101110000110010011011101011110010100001001010100111001111 1110001111001111101011000110001011100101000011110111010110111000111110011101100010101000101100000111010011101000001111101011000001100000000100011010010000100100010000100011001100000000100101100111011101011001000010001110101110101111101000001111111011011001000110010110000110110101010101111110011101010101110010100100001111000110000011000111011111001000101000111101010101010111100110011100101110111111 0011010011011000101111010110011001111010110010001001001010000001001111111000101011111001111000100110111010000000011011011101011110011101101000010011001001000001110100010101001100000110100001011010101000001011001011001110110001101100111101111110111100101001100110011011011011111001111010110111111011000111001011000100010011100111110110011101100110000101110011101111100000011111100000101110001000010011 0000101000001011001111101101011110110001000111001111101000001010101010101001011001010101011001110110111001101001111100011111010010111110001011111111110110011010110010100111101101010100011100011010000110001100110100010111010101010001001011110000011010111101101100100000111101010010010110011101110000101100011011011001111110010001110000011110111110011110010100000111111111111111001010110010101111110010 1100011011000111011101001010111110111110101010101100001010000001111100111010001001001001100010011100000110100001011101011101111011001110111111011011110000110101100011001001101100010110001011101011001000111011000011111011101011111001001110101011011000011011111010100000001011011000111010001011111000110110100110000101101101101111011001100010010110011100111001000101000010110001111100010100001001011011 0100110011111010001101100101111000110111101000011100011101101000110110000000001101010101001111110111011111010110100000100000001101110000101110101111011110011111100000101011101110011000011100001010100011100010111111010101010100100101110000010010111100100001101100010011100010011101100100101011110000101000011110101100100110100111111110101110010011011101110100110101011000010000011110001010010101000000 0100100110000010101001010010011011010110101111010010001011110011110000001110010100111001110100010100111001011000100100101010011110100111011110000101111100010110001110111010001111001110100101000011000110110100110100110101101011000111111101001001000000001011001001100100111100010100000110001100111111011111001110000111000011011100110010101101111111011111001010011001101111010011100000100010101101001110 0110111000000010010110110110011110111100111101100111100111111010101011111101111101010011101110010100111111101111110011111000000101001010110101100010000000000001011110010011100001100101100000001101011010100010000010100110000101001000100111010000110001001010000110010011011100010000000011000100110001000001100010100110110011101010010100101010010100000011001011011111110000010000110111110100000100010110 1000111110010111010010111001000100001011011100101101111100101000100010000011111010110111111101000010101110011001100000110011011100101001100011100011111001000001101001000001001111010110100000011100001111010001100110110110000000010001010111011000010100111111110110101101000101011110011110000000100001000111001110101100100001001010101111110101100000101010000010010111010110011011001011011011110000101100 0111011001111010010101101100110010011111010010111010110011111001100111100110101101111011011111111111111101011000011100000100101101001011011100010000111001110000001101000010010101101101111101110000100100110110001100010010011000011001000010011011101001110110010001101101001110101010000001100011101111011011011001110010011101110110110111000011011100001011011001101110100110101111010111001101111000111011 0101111100000001100001101000010010001010111010001100110110100010111001010001011110010111110001000101111101010001101100001001010110111010100111100110101101101011011100100011000100010101111101111010000010010001001011110011110011010101110111001100110010000011100111001110101011110001111110110000000010011110011111011010000110101110100101000001001001110110110110001110001110100101011010011101110000010101 0011000101000011010110101110111011110010011010001010011110111010100101100100111100110110000110111110100010100101111011000101000111110000100000101101111010110000000010110011000000001110101011100110001101111100110110011000110001111001111011110001011000100101010001001100001010111000101010001010001001000010000001100001011000111111110101110100011101001110111010010101110011000010110111000100000110010100 1101011111100000111111101011000001100001010011101001111100010010100011100010001100010111000110101101101101101001110110000100101110111010001100101110000101010000110011111111111100000011000110110001010111111101000010111010101001111011000100111001001101010111000000001111010000101001010000100111001110111111010100110011011000010100110101000110010010100110011011001001100110101011111111001101010100000100 0100101000111011101101000101101110011100001001110011101111111000011101100011010101100101000000100011111001001010001000110100111001101001111100011101011000111000001111100010111110010100000100011011110111000111111100000001011011100111011011110111111000101111010101000011011101101000001111001101111000100000011011001001100110011011111001011100001110011111001100010110101101111000101011101000101010100111 1011010010101110001110111001111101111010000100011010101110111111111111101010000100110010100111000001000011000111000101000110110000010000001011001110111110000011110111101100101110110001101110111100000100111111101010000011101110011010110001011000010001110111001001110010011010010000010000110010011100000110101010010100001010011111001010100011000011001101010001101101110010011101110010000011011010000100 1000111100010100011011010000100011100101001100111101010010111010110000100101001100010110111001100000101011000101101101101111000001000101000010111011101111001010110010011110111101110001000010001100111111101011110100111010000110011111110101110111001010110001101000100010011011001011111110001000011101001110010001100101100101100001100000010110010111101101100011001100010011011100100100111000110101100111 1100000001100011001100001100011001101000111101001110010110010111001111110110100101000110110000010111100111001101110101010110001101000011111111010000001000101110010101001111000011110001011000111001101110110100111011011000010000101101101011001001111111011000100111010000110010001001110111110110110010010011001110101000010000011000001110010001110010111100001101000101000101101011011110110111100000101001 1110010001101110001010001101000001110111100001000111101000011110110100110110100101011110001000010010000110001011010100010110011111101100011011100001000001001101000001111100101100010001000110010001011111101001111100001001011100100011000110001100010101011011001001001100011111000001000101001010100011010001110010101000110110111010101011110010000100011001111001111000011011101010000110001101011001001010 1000000000100010010000011001001111010001001111010011110000000010111111110001110111011001100101110010100011101010001001010010011011111100000100011000011100010100001101010110001110010000111101011100111100101001001110011000101000110000110011001111110110101110100001111000101110001011000010001010100110101101101111000011011001001110000111110011001100000100101100110111010011111000100111000001100010101001 1010101001001010101100001001100111011000110101001001110111111010101101101010001001000011000001010110011111010100011010001101101011111100110111011100010010101110110101000010110111111010101000001111100001010001010011110001010101000010001000001010100011111011000000000001011001111111101001110100000101110111110110000011110010110011111110111100101010011001000000010101001110110001010001001011110000111101 0110010000011000111101111100011101001110111000001011010101011010111000100001000001110000000111111100011000111110111001011001101010100100100010110011010100111110001001100111000000010010001111010100001010011111111010110010001000000100111000101100101111011011101000101111110011011110011011100000110110101101110001111110100010000011111011000011110100000000011000001110110001101111110000111010111001001010 0010100010010111011110101101011001101001001100000000101010110111000110110001001011000001101100001100000000111011101100000100001011001110000000001100110010001100000111010101110000011110000001110010001001101101001100100110111010101001110100111010101111010011010010011010100101111010000010011110001001000001011101010011100100100001101010010000011110111100100111011011000001100011110110010011011100100000 1111010100000010111110000100010001100000110011100101111011001110010000000001111101001111011110100101100010100100110100010110110010100100101010011100010001011010111011111100100100110110010011010111000011001010110100111010011000000010010110101110000010010001111010110101111111011001100001100111111001001000110000000111010111110100001111001010000111111101100000111101111001101100011010010010000000010001 1011010000100110100101001001110001111111101001001011101101000101000100001011011011110000110001100000111001110000111101010010011000110011100011100110110011001100110110100111000000101010001001110010101110101100011010010110101001001011000111001011111001111101001001100001100001011100010111100010000110101101001100110101001101000100001001110011110111100110010001011010110010011011101100101000101111111101 1000101011010110100001001001000110110001111001011100010000001100000100100000010100101101011001000101010111000001111011000001101100111111010001100110111111000101011110100100101111000010010011101011111001010101011101100000101001011101000000101011001010000010110001100100100101111001001001110001101000010000100001101100110111100000100100000011010000111111111110110101000100001101011000001000100110100101 0011001111011001001101100111111110110000111110100000000100000100000000100011100010110111000100001100101011011000100001101100011010100011100111111010111111101001011000100110111111101000010001111010100011000001000001111110010110101010100101111111100010001101110010110011000010111001111101100110010001101100011110101011000101101111000110101110101000011011011010011000100100011011000001100000110111011100 1011001000001111001001010000101001111010010001101001011101010110010001111111010100101110011110000011101100101000111010001111100110011110010111110101101100101011001111011000011000110101110101011111111000101101100001011001100000011000010010111101000100110000111010100110110001101001000010100001111010111010011000111011101110011001000011101101100100010001010100101000100101000011111000100010001010110110 1000100011101111000100100100110100101000001001001111111001011000010011010001110100010011101101001001000000111000111111110110101011010010011011011110010001010010101000110010101101001010111001101000011110110110100100000101011101011101001010000000011011110110101110000010001001110110100101010101001100110001111001010111001110101001111111010101000110011101110010101000110110000101001110000100011101100100 0000000101101111011110000100001111101010110111001010101000100000001000010101010011010011011101010101001111110100111001001101000001110100001010001110011101000101101001110001111000000011001101011100011010110101010101011101000010100010110001001101111111011101101000110010001101111010011001110111000010101110010000000001010111100111011100110010001111100000011011000101110111000000101011010011100100011010 1100100011000001111100001011001010101111100010011111001111000100111000101101001101001011001100001011110011110010001110101000010010000101100110111000000110100110111101011111010101110111010010010010100100000010011000011110000111100111100111100100111110011101101001101110001101010110000111111100110111100111111001101100010100111000010010110010110001111100011000110111110111001001001000000001010111000010 1101110101000011110101011001011100111110011101011010001001111011001001101011100100101100011111110011100110001001110110111011001110100110111101100011011000000010000110000100010110000010001001001111101111010101010010111110100101001000111010101000010111011001000011010011101000000110010011000110100010111111001101100110101011001010110010001111000000010111000010000011101001000110100011110110100011111000 1100111001100101001101001101001000100000011000010111001111000000100010010001110000100111011101110001000010111000011010111011001001110101000110111101110010110111101110111101100011111101100111011000110110100011110011011000101110101100111111000101100101110111010111101111100011110000000110100000111001000100111000100100110100011011001000010111111101000110110110101010011010101111000110100111101111111001 1100101011101111010011101110011111000001001100101110110100010010110101001001000011111111011100001101100110001110010100100000001111101001110111010111010111011110011101101110100101101011000111011000111011011000111001111000101001010100110010010011001010111101100010111010001111100111011010011101100100111110100010110011011011000001110101100010111000011001100011110000110010001111000101101011000011110111 1111000111100000111000010111111010000111011001111010010001010101000011011011100100001001011010111101011111001111011110101001010001101011111111111000101010101100010110111101101110001001110010100011100000010010010100001011110111000111101010001011100011001110001111110001111000101001000100110111010000100100101111011010010111011001110110000100011101011001010010000110101001100011010000111011001111001111 0000000011111101110000101000011000100011111110010110110111111100000110100111010111110001100011110101100110001110101000111111011100100110011001011100000010100000001000100011101001001101011100110101010010000010011100100001010000011010111010100001111100001100111100100111010101010101100000110111110001111000100010110000001100000001110101001010110100101010110111001101101101110011100110001010100000110010 0110001101000111011101100001111010101100111000110010001011101101110101011101011111110000010101000101000001101000011111100110010100001010110101101001000010101001001011100001011111111010011010011001011010000110111101100011011010000110110110100101100011000110011100101001111000001010000110010011111110011100011011001111100010001111111011101100110000100000001111000001111101000000110111010101000100011000 0000011000111100110001101111100111000001010000000100100001110111110000010010100001010000010111110101001111101000111111000011100111010100111110001100110101110001111101111000100000011100110010001110000011011101010001001111101100001011100100011100001001110001010011111110010011010100001111010101101011011100010001000000001101010110111011100010110101010110001100010000010101100101000011000011000101101111 1000111100100000101000010010001111011111011011000101111111100111010011111011011111110000111010101111111000111110011000110010000101001001110101111010101111100000110110000000111001101100100000000100000011101111010111000111100011000001111101111001111001100010001010001101011001011011010101011011000011011111111110000100110101110110101111111001100101101010011000001101111000101000000101010000100101011111 1011000000001100111100010100010100010100100000000010011111010111111011001000001011111100011000110101001101001101000011111111111011000001111001011110000000010001110010011100100100110010011100111010110001000110100101001111001010010010001001010010010001010010011101111100100101001101011110111100110111101010110000011101111010011101100001001101101110101110001001010011100001001110010010101111001011111010 0110110111111100101001101001111000000110110010111001100010000100101000110111000101100000110101001110010000010110110001011111111000000010001100011001100000110111011011101110011011110001110110111101100110011000010000011000000010100001100110100001101010001000010000110001110000100001001111011000001110011101000110100011000101011100011000100010100110000000111100011010010001101110101011100011111110010011 0101110011110011101100111000110110000001110101000111111100101010100011101100110111111100101110101000100100001110101001000111001011011000111110010111011111000111011010100110111011001011111111011100000100101011101011001101010001010010000111000101101011011010100101111111110011010010101000001110100011010000101111100110110000001001110101101001000011001001110010101101110101111000110110101000110011001000 1100110101101101011000111001000010111011001011111101110011000100110001010100011010000000000110001000101000101101010010101100101110101000111011110101101110011110111000111011001000111100101111000000010110100100001010011110000001100011100101011010110111001100001010011101100101000111110101001011001000100111100000101100001110011010101010011111110001000011000110000001101001001000100001001111111001010110 1001100001001101100011000110100111000010000000110100001010011001100101100011111010100101111011011111101001010100110000010010100001010011101110110101011101110110000010101100100000101001001001000001100000101001010001110000000010111010100111001011010110001110010100010001110000010100100101111011000001000011101000001001100001111001010111101001110110110100111000111001011110000111110000001001011111001010 0010001100010010011011110010010110100011101010011011110000011100110110111111111111111110010110100101111101101110000011111100001010000001111010011011111111110011011100001000111100001100001000001001101100011110100110100011000011001111100110101011110100101110011111101101010000011010101100110110100111010010000110111011011010000110111110001101100000011001111101101001100110001011111011101011100101100001 1011001111101000000101101100100101000010111001011101101001100000001010001101110010011111001101111000010010110100001001101011010010100010000011010110111101111001001110001111000110000001011000111011010111001110111110000110111111101011001110101100011100101101010000100011101000000100111111110111010101111111111101001010110111001111011001000100100110001110110010111001111010101000000010010111000110010000 0111110010101111000001100111010100010101111001001100011111110010011110010100001101000111000001010101000000101101110100011001011110110001000101010111000000100010011011110110100100011101000011101111010000000000001101111110001101001000000100010000110011001111011100000011100101111001100011110000101100011000011000011100010110100101100111101110011100111101110000111110111111000101001010100101010001100001 0010001001111010101110001001010010101000111110000000011101111100101101100110010001011011101010011100011001000110100100100100111000000010000000010110011111011110010010001110101101110001011101001100001011000101110111000100011101110000000101001100000000001001110100101101001110110101000111100100001011111110001111110111111110011101100101011101101011001100010110101101010111100111110110000110101101111101 0011100000011100111110001111100110010000010001101101000011001011011100101110001000101101110111001101010110011001000010011000100001001011101011111111110001010010101010111001100110010101010011001101101110100110101001010110011001111100000110001101110111111010100011110011110110010010100111001010101000011110111111010101010010010100100011111100100001110101010000111110011010001111101011100000010100011010 0111101011100101101011000010011001110110110000100100011011001111100010101100000011010000001110011101000000101010110010011101101011110010111011001010100100011111011010001000011011011111010010001011001111110100110100000000111101101011000000101001100011011100010101000110000100110100001000100000001001001000000101010001001000101000001111000010100110000011010110100011101110001010110101100011011011110111 1001100110110101011001111100111011010100110100111000010101110011111100101011011100001011100000011111110101000000111101100100110101100001000000111100111010101110101110010010000001100100111111010010000111001011000101100100000110000010111101110110011000111110100000001010000100011010110011001100010111110110100011100110011110111110110011100011000100101111111101001110011011010011011100011100001001100001 0110000111000110111010000111110011011101011101111110111110011111100110101000100011011100000010001101101110011110001111001011100100010010110110110100101011010000111101101110001000100000011001110000100101101111000001111100011110111101011110011010000110000101110101100011101011110100000101011110111101110010000000000111011100011110011101000111111000001101010111111100101100011111010101100011101011101101 0100000110010100011110111000101110111101000001001011101000011110001001001101101011110110101101010011110110111100000011110100101001101000011001101100111011111010111111010111100011000110101001001001111101000000001110100011100011001001000101010001001000100101100111001011110111010100001000101110011111010111111001101101000100110101101100001000000110111111000101011010010011100110000000001111100010110111 0011100000001010000000100011001101000110100101010001010001110100000101000110111010000010111110000111000100111100111110011101000110111000110010001001010000010001000001111100001100101110000100110100000010101111111000101110100011100111001010011110111111001010111111000101100100000001111000001010110111000111110110111000110110011010000111001110111101000000100000011101110100010000000010111101000011111010 1111101111101011000100111000101001010010111111000001100010100000011010100101010100000001000110110000110001000110111100000111110011100100001110000101010100101001110100111110100001110100011011010110100001110101111010111010100010010111100011110010010000001000110110111011100001010011111100010111111100000110100010000001000101010100100000111111001000001000000110011010000011011011101110100010011110100101 0101101101100100100001000110010001011000101001010101011111110000001110001110001110000101011101100110111100010101111100010010110000101100110111000011110011001100111101110001010110001110011001111100010010000010100001101110101010001111000101011110010111110100111000001101101011111110000011011010011111111110011011000001101000010100001011101011101111000010100110000110010010111000000110000001001111100100 1111010001111001110000100000011100001100110000000011011010111011110100000010011011111001100001010100111100111100101001011110001111011101101011000000010010000111101110010100110001111100000000000010110100010100001001011110011100111111010011100010000000010011010110111001011010000000111100011100000000010111100000100010111111000010000100110000010001011100100110111001101101111000101000100111000001000100 1110110010001010100011010001010001100100010111010010010011000010011101110101110100011011101001100100001010111101001110000100010101000001001000011010100000011101111001000101110111010111110111100100110010110111110101101111101101100010000111101100110111011101011010100011011000001001101000110011111110100101010001001111011000001110101111001101101011101000111100010000010001001001011111001100000000111111 1000101111101010100000100111010000110010110111111010001110100110000111001111011111011111000010001101010110000011111100000001101101111101010011000001110011110100100000111110100011111001110100010011010010111110101111110111001101010000010010001100111000110101100000001101000011011111100111100000010101001000010010010111001001100011100001010110010000110111101001010101011011110101111101111011110100110010 0001111001110101010010011011001111010010001000000110110001111000001010000111000011111011100101001111010011000100001110101111100101101001010000011000110010000100000011100111100001110011011110101111000100010011001110100100100010111011110100100101001001111111100010100111110000100101011111101001111010111001001111100110011011100100010110100111001101000110110100110010011001001100010010100000111001001001 0001111001010110001100010011101110011100100000010100011101000000111101001101100110111100000101111000111001100000010000010000111101010000000101101001110100100011111111101111011101010111111000010000110010011101111011010011010000101111010110100110100110001101111000100010000011110111110010010111101111001011001101110100110010010110101010100000000000110101100111101011100101111101110000001110101000011111 0011110110100000010101110100101010110100110011110100111011001010110110100110110000101010001011101100110000100000100010001111101101100101111010101000111101010101000100101001110110011101101001010000110110111011000100110110011110110100110010001110101000110101101001110101100011001100011011111001101101010100011000100001010101100111010100001000010111100010110001011000110111100110001010110010001111000011 1001101001011011011010110100111011010100000111000111110100011111000110010110010111111111011011001111011000001111100000010110011111011010111100001111010001011001100100111000101111010111010000001101101111111111110011110100100110011101010101101000001110111011100000110011001010001111001110011000101111001110100101101101000110111000101010110110010111110000100101001011011000110110001110100011010111010001 1011001101010010101110001110000011011110000010100100010110010111001110111111101100000111111010000111001000010011100011100110111001010010010010001111011100000000101011111101001010101110110010001000111110100011110110111100011110010011100010011000010000000111001101100100011110000001000000000000110010010111110001000111001001001110110010110101010001110110101110100110001010011101001010100100011110110100 0011011100011011100110011111101101001000111100111101110001010010010010001011000111001100101110010101100011101000001111000100011111010010011000110000110101111010001100101111001101000101111010101011110001001011001011110010010110111100111001111011010100000101001011110010101010110010110001110110100011111011010101110011000101101011000001001001110101000000000111000011000111100001111110010011001111100010 0010100101101100101110100100000101000001000000101010100010101100011010110110000101001011101010011000101111011011101101001011011100111010001110111100011011010000101100111100111010011010101110011001101101110000100100110101001111101000001000100100110101101010011110001110011101000001101000110000110100111101101011110011110111100100000110001110010011000011101111111001111000101100110001110111011110000001 0100001111101010101110111111011100010001101101001100000011011110111110010010010011000001001010001101100101000101100011010100100001010000100011011011010000011010111001101100111001100000000110101010001101010010110101010110011101101010101000111000010001101011010101100001111101000001000001111011011110010010010110101101001100010110111101110101110100101001010111100100101000001101011010101100110010110110 0111000110100001110011100010110110110110111011011001101011111001101011000101000000111010000100100000111011110111010100101001001000001011011010011011100110101101001100111111111100000001110000101001110101110001111001011011000001010111100000101110011010001011110100001111011100111001110100000011110110110111100010000110100000011010110010110011101100000111110011011111100100001111110101001101100010010001 1001100111100010100101110110110111110011011010111010001100110111110000111100000010111111111110001111101100110001011000010000010001011100100100110010100001111011101010010110111010001001001110011011111000010010001111111001011100100001111101010010010011111100100000000011101000001100101011001000110111110111101110100011111100100010110011110001100101001010110101100101011110101100000000110111000110000101 0000100000110100100101001110010110110101001101001110111101010110000000100101001101100101111111000011111010111110000111111101000101011111001001111100110100010110101110100111111001000010111111011001011111001110110111110000110100001011011000011111000010010110101010010000111011110101100101111011010011011000110111100001010010000011000011011110101100011000111000110010110111010000110110000010101110101011 0001110010111001010110110011011100010111011001101011010101110001001101111000110001101000000001000000011001010110111000011001001111010011000001110011101111001000101010010110000010000100100000100110101000011010110110000100111011101000101001010010010111001101011110110000000011111110011111000111100111101100111001110011010011100100000010010100011000100000001000100010101000000101101100101100010011101111 0001010011110111001011001111110110101001010010100100010011001110100010010010110011100001111110001101001010111100100110001100111000010111001111110011010110110111011100010010000101101000110000101100010100111110110111111000111010111000010011100111111001101110011101110100101001011001000110100011010100011000011101011100011010111101111011011010000010100100110010100100000000011000001001110001001010110001 1000010001101110110110101000011000101010000110011101100101011111111001011111000100111001001111001111100111100111111000110011101101000111110110101111011111001100110001111000100111110101010101111101110010001001101111111100011001101111000111010101101000110001100000000101001110011111111010001101101001111001011010000110001100010011001101111101100101001101000011000100111101001011001100011110111011111101 1001001001010001110100011010101001011111111010000101010100010110100000011010110111001001010111001101100010101111010100100001001101111000100010001110100111110010011011110110111111101001011110011010001111000000100110000100100111100001000110000111101001011100101001111110001010000110101000101111011110110111001100000100011000010100001110001010111010011101110010001100011101000111110000000111000010101110 0000010101111010111100111101111000010011110110100101110110001000110100001101110111100101000010010100110000000010101110110101010001111110100010001111101100100101110011100000110001011001010000100100011101011011111110110000011001000010000001101001111100001000001111001001101101001100011000111111011110010011111010000101110111001110110100100111110101101001100111101101000101111001001010111110000000001010 0001011001001110000100001010100100000110100110000110100001011001101001101001100011111100100110000101001000001000101011000011000111110110010000111011001000011000101010001111011110000100101101010000111100110001100110110011111000110000100100010000010100000010000010001011001110010110001001111111100111011101000011000101001010000100011001011100100011111010001010110001010101000010001011000010111110111001 1010011101111000000000001100000010011010001000111001101111001100010101100101001000001101111110101010100110000110000010100100011010100110000101001000000000010010010011001110010000000101010011010011100011000000000111111001101001110010101011100011111010010101011111011110010111000100000011000111111010110000010000010101111110110111000011010001111100100010001101101010100100100011000001011100110001101111 1000000000000111010010001100110000001010110001001001100111001101001111000100111101010000010110100001010111100110111000011110101001001111000100010011010101010001000110011110100110111100101111101110000001010010100100111100111011101100100100010111100110011011101010110011001000011011110011101000101001101000000111100010010001101011101100001001111100111011111101110011001000010011110100111101101010010100 1101011111100000101011011101011110010011001001110011011000111110110100111001010001000001011000110101111011011111111000110110101100111100101101110010010001111001011001101111010101010110111000110100000011111111100100110011001011001010101110110110001001001110110100110001000011100011000110110101010000111110100010100010101000010001011111110010110010110000011111110000110000110101101000101011110000001011 0110000010011000110010010101001010010000110111100111110111111010111110100010111100101011110001000111101000111011000111011101011000110101001101101011100001000000010000101110111110011011111011101000001000101011001001010010111000111011010010111100011000011010001110011001111000111000101110000111101111011011001011100101010111101100110011101000010000100111110110001101110010111101010000110101110101101010 0111110110011110111001100011001111111011010111101110000000110110010000001101010010011000011011000101011100011101111011111001101010011111111001101001000000100100111001111011001110100100001001000100011000110110110100011110101101000010010011010101100011101110101000110110000001110010110011100110111000000001001000010100110010001000101101101111100110001010101000110001001111101000101000101001011010011011 0100100100111000101101101100000001000111011010011000100111011100010100010100111010010110011010011011011101011111101110101110110000010000000000000111010000100011001101100101111010111111111100000100001111110000000101111001010111011000011100010010110111001000001000100000111110011000000101100101110111011110001010011111001000000000000001110010000111011010111001111000010110101110001101010110110001001100 0000101110110101101100011110101010001010110010000001101100110000101101011100100001000100011001000101011000111101011111000011000010111000010101001101110110111001000001010100001111100000100000111011010000011100011010001110110100001110101001010000111000101111100110010011000011101100011001001011101110101001100010001100101110100001011001001101001010111101001001110110011101101010010001100000010010110100 1111011000111000001110001000001100101110101011011111000100000110010001100111110011010110011101100000100000101101111010000010001000100111110001110010101011001010101001010110010001100110011111110100011000010110110111111001101010001100111011000001101101010101101110010100110001000111010011001010110011010010110111001101111100110110111011000111001111110000101111001011000100010010011100001010011101111111 1110101101000010011010000100001100010110101101111100001001111111100111011111111100010000100101011101101010111010111100010110100011010001001011010011000101011101000100011111110111000011111110111011010000011100000100101011111011100100101000100110010011001100010100000000101111110100001011010010100001101101100010000101010010110000110010000011100110010000111000100010111111000111001000011011010110000011 0001101110111001000010011100011000000111110001101110010000100011101100000000110001111101100000000111011010100001110010100100111011100100110111011110101111101000111011101000111110111000000011001010000110001010001011100000000010011011100101011101111100010111000010101010111001010001111111001011011101110110011111001010111110000000001010011110011000000101100100000111001011101000110000001100110000001110 0100000010111010010110011000001011110010100110010101100001000110011110000001111011000110101101011010110010011011011000010010000111010001111100000011001011111000100111101000001100101101100101100010110110000011011111111011101010001000011001001100010001000001100011010110101010101101000001000001101010000001110011110111111111001011001110001000100111001000000101111101000110011001011100110110100011100010 1101101100111010110101001000111111000110011001100000100010000111100001000101000000001000101001110001101110001000000011000011000001000111110011111101010000010001011000111100001110010011101001101001011100111100110111000000011100011101101001101111010111101100101111000101110110100100110001110101110100100101001010000010100110001110011001000100111011001010101000111111000100011000011110001111111000010101
cTrader

cTrader5.1の新機能

12/28/2024

cTrader が5.1にUpdate!

cTraderのアップデートが来ました。前回のメジャーアップデートから久しぶりのアップデートです。

今回はすべてアルゴリズム(cBot、Indicator、Plugin) 開発用APIのアップデートのようです。

一般のcTraderユーザーからしたら5.1アップデートによりすぐに便利になる部分は特にありませんが、新機能に対応したcBotやインジケーターが出てきたときに問題なく使えるようにアップデートしておくことをお勧めします。

 

cTrader5.1の新機能

なお、ここで「アルゴリズム」といったらcBot, Indicator, Pluginの総称と思ってください。

 

ファイルダイアログ機能の追加

アルゴリズムからファイルダイアログを開いて、PC内のファイルを読み込むことができるようになりました。

            var openFileDialog = new OpenFileDialog() {
                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                Multiselect = true,
                Title = "cTraderから呼び出したファイルダイアログ!"
            };
            var btn = new Button { Text = "ファイルを開く" };
            btn.Click += args => openFileDialog.ShowDialog();
            Chart.AddControl(btn);

設定ファイルを一括で読み込んだり、外部からトレードデータを読み込んだりといったあたりがユースケースになるでしょうか。

これまでもファイルを読み込むこと自体はできたのですが、ユーザーにパスを指定してもらうか、プログラム側でパスを生成するかしなければいけなくいろいろ面倒だったんですよね。

外部ファイルと手軽に読み込めるようになったことで、外からデータを取り込んで動かすようなアルゴリズムが作りやすくなりますね。

 

algo ファイルをアルゴリズムからインストール可能に

アルゴリズム内から別のアルゴリズムをインストール可能になりました

やり方はこれだけ。

            Uri uri = new Uri("https://<インジケーター配布先URL>");
            var res = AlgoRegistry.Install(uri);

文字列でファイルパスを指定することもできますが、実際はURLからインストールすることの方が多いでしょう。

勝手にインストールされるの怖い!と思うかもしれませんが、さすがに最初はインストール前に確認画面が表示されるようになっているのでご安心ください。

内部で別のカスタムインジケーターを使うcBotなんかを一般公開用に作る場合はこの機能ありがたいですね。

利用するインジケーターがcTraderに入ってないと動かくなってしまうので、ユーザーにインストールを促したり、cBot内にインジケーターのロジックをそのまま持たせたりという必要がありました。

この機能により内部で利用するインジがインストールされてない場合はWeb上からインストールさせてからcBotを動かす、というような挙動が実現できるようになりました。

 

algoファイルをアルゴリズムからビルド可能に

algoファイルをアルゴリズム内からコンパイルできるようになったようです。

以下コードはcTrader公式Helpからの引用です。 (動作試してないです)

            CompilationOptions options = new CompilationOptions
            {
                IncludeSourceCode = true,
                OutputAlgoFilePath = @"C:\{preferred path}\NameOfAlgo.algo"
            };

            CompilationResult resultSync = Compiler.Compile(@"C:\{path to project}\NameOfCbot.csproj", options);
            Print(resultSync.Succeeded);

 

あまりcBot等に組み込むような機能のイメージはないですが・・・

これはアルゴリズムのユーザーにはほぼ関係なく、開発者側に閉じた話ですかね。開発者が開発用プラグインを作ったりというのには役に立つかもしれません。

 

DropZoneコントロールの追加

プログラムでドラッグ&ドロップでファイルを受け取るコントロールを使えるようになりました。

プラグインで特定の拡張子のファイルをユーザーにD&Dで渡してもらって、ファイルを読み取ることができるようになります。

今回ファイルダイアログが追加されてますが、それだけでなくD&Dでもファイルを受け取ることができるようにもなってるというわけですね。

外部ファイル連携のプラグインが作りやすくなりそうです。

 

カラーピッカーコントロールの追加

待ってました!いつかは追加されるとは思ってましたが意外に早く来ましたね。

プログラムから色を選択しやすくなります。

拙作、Scribbler Pluginをお使いの方は現在「色をカラーコードで指定する」という不便を強いられてると思いますが、これが解消されます

こうなります。

見慣れたcTraderの色選択ですね。これに切り替われば色を扱う系の各種プラグインが使いやすくなると思います。

 

プログレスバーコントロールの追加

プログレスバーが追加されました。

待ち時間が長い処理をやってるとき、これまでは(ajinoriのインジでは)チャート上にテキスト表示させたりしてましたが、これが不要になりますね。

こんな感じになります。

背景は黒半透明で固定のようなので実際はStackPanelなどに重ねて使うことになりそうです。

上が普通のプログレスバー、下は終了までの時間が未定の時に使うタイプのものです。

 

プラグインからファイルの関連付け

プラグインで扱う拡張子のファイルをcTraderに関連付けることができるようになりました。

例えば「.ctraderという拡張子のファイルをダブルクリックしたときにcTraderの自作プラグインで開かせる」みたいな挙動をプラグイン側から簡単に設定できちゃいます。

            FileAssociations.Add(".ctrader");
            FileAssociations.FileOpened += args => {
                Print($"File opened: {args.FilePath}");
                // ファイルに対する処理を記述
            };

たったこれだけで、「特定のファイルをダブルクリックしたときにcTraderを開いてなんかする」というプラグインが作れちゃうんですね。

さすがに拡張子を関連付けするときは確認ウィンドウが出るようになっています。

 

過去の注文データが参照可能に

アルゴリズムのプロパティにHistoricalOrdersというものが用意され、過去の注文履歴を参照できるようになりました。

過去注文参照用のHIstoricaoOrderインターフェイスが追加されています。

これまでも現在有効な注文やトレード履歴であれば参照できたのですが、キャンセルしたり失効したりで約定しなかった注文を参照することはできませんでした。

注文履歴を直接参照できるようになったため、過去の注文傾向を調べたりといったことができるようになりました。

 

ポジションの取引データが参照可能に

PositionにDealsというプロパティが用意され、ポジションの取引履歴が参照できるようになりました。一つ一つの取引参照用にDealというインターフェイスが追加されています。

たとえば、最初に1ロット買って、それを(ポジション修正により) ボリューム2倍にしてそのあとドテンして、現在2ロットの売りポジションを持っていたとします。

今までは「これは2ロットの売りポジション」という情報しか取れなかったのですが、5.1からは「1ロット買い」「1ロット買い増し」「2ロットを反転」というそれぞれを一つ一つのDealとして参照できるようになりました。

 

これらに伴いPosition, PendingOrder 等にも関連するプロパティが追加されています。

 

アルゴリズムでできることが広がりました

主に外部との連携機能が強化された感じでしょうか。

今までもできなかったわけではないものの、面倒だった部分が簡単にできるようになったという感じがします。

どんどん使いやすくなっていくのはうれしいですね。


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

新しいコメント

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

cTrader's Life

© 2025 ajinori