1101000111110001001011111101001001101010011101110100111011111011011111010110011110110100100011001001010011010110000101001010011110100011100001011111100011001011001110011110110000010010111001111001110000110010011100011011011010001101100100101111100011001100010011011101100011011000111100010111111000000000010111100001101100001010100010011010010111100011101101111010100111100111001010100010100101110110 1011100101010010100111000011000111011000101010001010000100100100010110010100011000101011001110101011000110110000011111100001001010100010001100011011111101101110101010101111001100011100011011010110101110110110010000011000110000011000100110110101010010111001010101001101111101100111010100100000000001000110111110011110101011111100010111011001111000010110011001000110011100110111001100010110000000100001 1000000110100011000001101000000101000100110011000111011100010110100001100111100010000000101011100100100100000111000111010111000110010101010001010001011011001110111101100101000000100101010010001100101101110000110010100111111000111101111001111111100000110100110001100011100001110101011101110001010101011010110010000100100101000000100100111111111011100011001100111111111101001110111100100110011011010101 1100000100000010010000110000111100011111011010100100110111010101010100011111010001010001110011101001101010101011111101111000111000101100000010011011110100101110000100110001001100010100100110101100010010111110001010010010111110011010101111100101010101011011101010010101010100000000011011111111101011101000001110000001111111011101111110111010111011101111000111000100111011111000101110010000001010001000 0110010110101110000011111001010011111101100010010101111000011101011001000111100110011100001101100101101010010111000000010100011111001011010001001010110101001110101111101111111101000011000001110011000101101000001101010101111000000000110101001000011000001101100011011001000010100110111011010011001100001001100010100000101011001101011001000110101010100000001111010110010110011111011000100101110011010100 1010101010111110111101011110001011110000000010101000100011101011011000101001000110110101100111011010011010101001000011001110001011011011101110111000011101101111110110101101101010011000011000101111010011100101011100000011110011110011011010101101001011001100111111100100110111101100111000110011010101011000001111000110010111010100011001011011010010110000011101100010110101101000111001101111001111111110 1110010001110001101000001011111101100101011001011000110010100011100010110011011101000111001001100101001100111010110100111101110001100100100111000001000010011110010010101001101101100100101110111100011101111101000101011010011101011000100100000100101011111011111010001111111000111000011010110110100011101100110001101100111111000010111111010000110110111001101011010111011010000010000100001000100111110111 1100100110110111111011000000110110000011100111111011110110110001010110000101001000100111101000000110100011000100000001000000101001110011100001010011000111000110000111100101111000111111010011001110011100001111111001011100001100111101010001001111001111111110000101001101100111001011001011011111100100011010001110001101111001101100111110011001001110111100001101101010110100101010101100110001001000000110 1010100000011010111000010100101001010101001101011001000100111110111010101001011110110010011010011010100111000110111011010100000000111111100100000011011110001000000100011000000001101111100001100101100110010001010100000100011000111101011110110000111010011001001001011011011101110101010100010011110100010100001010110010010001100110001001110010010000001001001010010011011011010001111111011011010110010100 0111111101001111101111111111111100100000011101110011100100000011010101111110001011000001011011000100101110111011100011100110101101010000100100000010011011000110011100000100010100000001000010011111110111010100000011010001001111010000010011001010111100010000010000001010001111000111110110111101100110001110111001100111100111000001010110100100011000010101011110011000110010111101000111111100110011000101 1101101011111010101010101110011001001001111010011111011111101111010111010111011001101001011110000101000011010000101110000111011111101010110111001100000001011001001110001101111111100000000001111101001100011010000001010111101110000000111011101100110000111001101100101001101001011010001111100101101001101110100001010010000001010101110110010001001010111101110011000101100011000011101110001100001010100110 0101001000000101111001101000110000101000000000011000000011000110110110010011000111001011001001010110010011101101011010000111000010000011001000101111011111111011110011110000000110011111011111110010101001011010000111111110101011010101111101100011111100110111001110000000111111010001110001011011010101101101010101101000111010101100100000010001001100011101011001010001101100000011100111010000110001011001 1001111101100010111010001111001010101111110010000100011010011000101010010010110000001010101101101001110101011110010100011001110100111111100010000110111111001011011110010111000110000101000110100001010000000010000111100100010101101001010011011100110010010101100110001111100101101101001010000100111101101101001001010100111001000111111110011100100101010100001110010110011000010101011110111101011011110100 0110110010110110010100001010111101101011111101100000011101111111010100110111100100001011111011010011011111100101101000000010011111111100100000100101010011111110011011011000111001110001000111100000001010010011000000011111001111100010000000000010011101100100101011111101101100000111011000001000110100111111100011011111000000110001011100000101011010000011011011110110010101011111101010110110010001111000 0110110010010011000011011111000101100001000000101001010001001101100001011101001011101100001110101011000001111010100010100111100010101110001011000011111000010000000101111111011011111110001110100111000101000111101111001100010110000100001011011011110100001000011101001001111110011110111001001101100000010100111000000011100001100001100011101111111011001100011110010111110111011111000100110110111000010110 0000011011001011001001001101110011011000011011101111100011000001011010111101001111010001011001010111101000001010010011111101110110000100111110101111011010100111010001111010001101110000010110100010010101111000001001011100001101000110101001111100000111010101011100111001000111001111000111000000010010001110110011001011010100001000001000101101000111110011000010001100010111100011011010100001011110100010 1111000111100010100110101100001010000000101100000111111110010000100110111110001111011010101000010110010111011111101010010010010110000010100010101100111010111110011111010110011111111111100010100111101111001001010010110001001010010111011010011100101100100010011001011011011111100010100110101101010100111111010001011010011000001001100110001111011100010111111101110101000000000011011110101000101111011110 1011000100100101000011100011011000011011011001011000101001111000100010101110110000001100010011111111110111011100001010001010011010001000111111000100100100100010010000011010000001011001111110011010000111110000100100110000111010100001101001100010110011010110101100110011001111011111010010000010101010110011111110000110100111100100111000000101101100101011110110111101010001000001110010100001000010011101 0010001110010010100001100011010101100101101111110110000000110110111011101110100111111001111010100011010100001010010110101111101110010101011110001100001001110100111001001101010110001010010111011110111111010010000001111011011011010001000011010000000100010001000110011101100111011000001110101100011001011010100111100110101011100101010111111101000011110101011100010111100111000101101011100000110010000100 0000011101011111000011111111101000001011110110000100100110100110000111101011101011100011111000011001110011101101111010001000101111110101010100110110100011001110000000001011000110011111010011000010010100111100111100010010010010001110110001110111101100000100111111101001110100101010100111100111100011001111111000011110101111110110111100100011101001000010110010000011011111011001010100001100000011101011 0101101011011100011001111010110110111011001110010111011011001101110100000110001010101111111011001000010101111110110101000101101110011101000011110101111000001111001010100011101010111111100101001001110110110100100111100111011011000001100100001011011000100000111110101100001000011100100101110110101101110110010010001100110111010100000100100110110001110001101100001100001110100000110100111101000010100000 0111101001110010101101010001101011110000000001100001001101011000011110110010111111011010101111101001101000000011111010110011010011100110101110000011101001001010011110001101100110100101010000100011110000000000100001011001001000000101101001000101111100110001110001011011011100001000010101001111000100000001001111011001010001000110100111101000000111101001011111101101111111110011011110011010011101101000 1101000100011011001111001111001100111101100000010000110001101011010111010101000110110011100100001000001111111000111001100010101111101011110001000011100111000011101101111101101010111001111101110010011010000010111100001111110001000111110001001011100011110101011111000000000010010010001110100101011010001111001011001101011001000110011010110111101001011111001000110011101100000000011111111000110011000010 0100101001010101110000100010111111110001100000001000101011001001011110010101011010110011101000101100011111010011000000110100011111000100100100011110001010010001100110011010001010010111101011100111001101010110000011001101110110110010011011100111001110000101101010111111100111101010010000011000001000000010011001011001000110010101010010100011010100010111100110101001111101101000110111101110001100100010 1100110001110000101011110100100000000111000011001111111000101110001000001000100010101011111011100101001000001111100100111001001110101100111110011011000001001011101100100100101111011111110000001101000111011111110100111001111000011010110110110110110110100011010010100111100101011000101110100110011111101011100110011011000100110010111110101010000011011100001100000001101101010000111101011000000100000010 1000000110010110000111000100001111110001100101010110011010101100011010000010010110001110110011111100001000011111101000100100101010001111111011010111001100001100111101000011111110011101110001010100100001011101011000000010101110100000111001001011101111100100011111100101000010011001111111100010011100011000110011101011110000011001010100001010000111000011101110000001001111101110100011011111111010111110 0010101010101110001011100111001001000111001100010001011101011010111010101110101100011000110010010001101101100101101001100011101011000100111001100101101011001010001111000010101110100011100001000001010101111011001111101111101110010001011000111010101110001011000100011000010000010000000010011000101110100111111001000010000001000111111100110110111000001011100111010001011010101100101100110010011101011011 0111110001111000111010100010000001001110000010110111110101100011111010001000101010001000100101101000101001000111010001000111110011011111110111000011101110100001101110000011010011100111000110011011011001111101111110000111011010100011101101101001111001011111111111110001101000011110101000001100011111000101011001001100110011110111111110110101110100111111100101100111101110010010001100100010001001111100 0000110001100010111111110101110001001011010111000011010001010001110111001000100011001111100110111011001000111110011101101111000010010000100100110011111101001000111010110111001010111100100011010111001011100111101011111101101010001001000111101110010010011101110000101011111011010011110100110010101110110111100111001000000110110001011011010000100111111110010011101001001001010101010111111010011101010001 1010011110111001000100010000001001101111011000010110100101001100011111010110100011011010011001001010011100101001010010011001011000000001100010000100100111101111100001100010111101110110100101110010000110110110001000110011101011111100101101000000010000011000001111101111100000101111110001110001000110101011010001100001100101110001000000100101101101111011110111110010110110110010111100001111010100001010 0000111110111110100000100010000101100011011010010111100001111000100011110110001001101110000100110111101100001000010111000000010000000110001011110101000000001011111001011100000110101101000010000110011111110100101000001000110101100010110011011000010100000101000011001101101001101010111000011010010001000110100010110111111110111011111110010000100010110000111001000100001011110111111000010000000100110110 0110011101000101010000001000010100000000000111000000010110100101010001111011111000010010110001100100001001100101000111010000011111001100110000101100101111111000110000001001100011011111100001101011000101001100101101100001111100000101000001000010100010010101011001001100011110011111000110110100100011000100111001000000100101001110111011111001100101001000001111011111111100011001111001011001100010001110 0011111011100001000111111000101111011010001101000011000111001111111001000001010101011110001111010010111001111010010011001011011101001011100111111000100100011001010111100111000100000011011011001111100010111110000000010111011110001111100100100000110001111110010000001111001100010001001101010111010100010000010001101110110111011000111001010010101011011010001110111001011100011010010111001001100101111011 0000010010101011101111110011010011011111001010111110000001101000100010011011110101010000111010111000111011101100000011011001101111000001100010100010110011001001110001110100001011001111110111100111100101010010010000000110111110000001011101111110101001010111000000011101000111101111011111011100000000000110110011111101101001000010000100111010101111000110101111000101011011001010100101000001110011101111 1000111001001111000100010101100000100000000110101100110010111001000000110111100011100000001011000011001110000010000000100101000111100000111011001111010111000011101101010001011011000101010110001110100101010110100110111100010010110010110101010000011111111101100000001110110011111101100110011001000110111100000010101001111110101101010000101010001100000001001100111111100001110111110001011100001110100111 1001000001100101000101110101010000011000110001101101000101010111101011001000000100101010000000101000000100101011000110110100111011101010000010110111011110101011001011110111011001110111101000010001101000011010111010011111100001110100001000110010111001111101100110110101011111011001000110111101011011011000100100000011101001101100110101100111110101101111111111100001010101000010101110110010101000110110 1011001101011100000001100010000000101001110000110011110100110100111100110010001100011100001001100011011000100111100011001000111011100010000010111110110111110011101010011011001101010000001111010111101100011101100100101101000011110000011001010111110111100011011100101110000000110000001100111001111100100010001101001111110100000100101010100110011011100011100101110011000100000010110101000011011011010100 0110100110101010100101001010110010000011110101101001001011001111111001100011110101000001011110111011000010100011010001111000101001100101001100101000110110110011111000011111111110011111010000100101000001010010010110000101101011011011011010110100001111000010011100100110101110010001111000010111011111001010010000101011110010111000111000111101000111111110111101111010001011101100000000110100101000011111 0001110101110100000001010011000101111001101000111111111000011010101001010110001101001010101011000011100001110010001001001111110011011100100001000000100111101111110001110110101000011010000011110110110011000000110100111001010111101100101011111001110111011001011110000001000111111100110000100101000010100100111101000110000011010000110101011000111110100110011100101100001110111111110100101001101000111100 0001100011001110100110011010100111010110011011111101011111000010100101110100101010000001111111111000101101010110111001110110100111010000100011110110000110010011100000000000010010010111010100010001011011111111000111100101101101000011110111100110011000110011000100010010001011011101010011101011010110001001111011100110101110001001001010101010000100101111111000110101101010110111101000000011110011101000 1101000011011001010101011101000011110101011100111010000011010001111000110001111000011110000101010011001100010010111101001110000110000000100100110001000000100100110011011100001001100000111000000100001111000101001100111101010011101010100011011000101110001010100101010101100101101110111100000111011101001011111100001100011100000101010010001110110010010011010110100110110011111001001100001010001110111011 0111000001100010011101110110111000110000101011110000110110000101011111101001110001100000110001010001011100111110100101111100000001010100111001000111000111100001000011011011100110111010000000110000010001000001100111100001110000010110001101001011110011000110101011101001110000001001100001011001000010111111010111111101011110001111000011011111000101000011111000101001111001110101010001111011100100100000 0001010011010001010101111101001010001010111100100001100100000001101001001000100010110110100010111001011010000001010010011110100101100100011000010100011110010101101100100111010011100011110111111000001110101100111110101001010000010001010001011100110011100010101011010101111011110110000010001010000000011110000001110010110111010000101010101001010100101011000000111111010100110100100111000100001011010111 0111110000000111100001010000110010101100010110101100100010101001101111010100000101000000000001111100001000000101111100110110100110101011100110011111111011101010100110011001110011010011001100110110111110111111000111011100000000100001010010011001011101010011101001011011001110101011011111100100110010010010001100110100001101001010100000011011110110010011000001011110110000110101010100110000111001000100 1110101110010111010010001110001110001101110100000101110100011010000010000110000011110001011000010001000111111010110111100001101011001001110000010010011011000111110111110001010110101011100001001010011110110000100100010010100010101100111010011011111000001001110100010101001011111000010000100101000011100101011100101100001000001100111010010111011110001110110100111111000110001111101011011110100000101101 1111000101000111111101111110100001000100100111001101111101010001000001010011100111011100000101011100010101101010110110111011101001001001111000000010110110001111101110111110011011000010000011001001000101101010100110111111010101000001010010101000111011011100111110011100001011100010001000011110011010100101100000001000000101100000100011011001010001101000101110111100011110000100110000101010110001000111 0010001010100101111011100101110010110110011011010111101000001101111000001000101101001100011010101101101111001001111000111010100010110100101011101011111010000110010001011000110101001111001001011100011100100010010001000010110101011101010100001011111111000011111001011101110100100011111111010111000111100110100110101110011110010100111100001101111110000110111111011001100001001000100011100110001100110110 0111011101000010110011001100110010011010111110001110100111100101011011010100100000010101101000011001111111000111000000111001101000101111011000001100011111010110000111010100100100010100001110010001111011010000010001100111001000101100000000011110011101100011101000100110001010100111101001010000010100000101011111101011011111000111110100001111000111101111000001011110000110111110111011111111101010010111 0100111010011110110111111010011001111110011111001010111011000101101101110010000000011100100110001111001111010100111110010101101101110101000011000000001101110101111001100010011101011111101001100001010100011100001011111111110110101000101111001101111001100010110001000101110001001110101011101110101110000110001011111111010101011001100010111100111101110110101101001100011101110101000101000110011110001111 0101110001111010110000011001100100110101100010011100100011100011000100101001010111101100011101111011000010011101010000100001011100010100100000111011001001101000110011100011111011011010011110011110110010110011000101100110111111000000011010010010001111100011110101011000001110100010010010000010011000000101100111100110110101001010010000010110100001011110100111000011000111000100111110111110010101100100 1101100000011111010111000101111101100100000101101110011101011000101001100001011001110001110011101001110010000100011101010001000111010100110101001000000010110110111100011100011101101010100001010010001010011001001100110100001011000000110010110010111100111001011010101101101111110010100000100000000011001101001001100101010010010001000100101000001110111100001001011111101100010011100101110011001111100111 0000001101110110000010111011101101110100100010100001111110111110111010000011111110110011110100110111000001010001001000010000110101110111101101101010101111001100010111111100011011011100001001001111110001001010001110011001011011000011110100111001001111011100010101000010000001000100010101001101110001000001110100000100001011101001011001000001110111100100101111100100110010011001101101010100010110100011 0011001101011110010011110101100001010101111111101000000101011111010000011000110110010110010001010110101001000011101101001010011000001001001001010100011011110101000011111110001001011001000110111001101110101110001011010101001000100011111011100011100111010000001110010110110010010000111000111010010110100110101100110001000111100010100101101111011011000011101000011001111111101101010111010011111001110110 1001101010011100001010010011011101100011010101100000001000010110000111111101101000010000000111101101001001010000000100110000001111011010111010011011011111010110001101100101110001011110110111000000110110101101011101110100110101110011010110011100001111110000110100101100001001011011010101100011110001111000011111000101011111010111111010011011101101000011001111010001011001001010110111101000001000011101 0111010001100101111110001101110001011110001101000101010111011000000100001010001010011110011111010011000011000101111111010111010101111100000011000010011111000011011101100000110100110010011001110010000000101100000111100000011000011000100000010100110011010100001100011111000111110001000001000000000100110000011001110010010111001000111010001000000101011110110110011010110010110011001010010011000101001111 0010011001001101000110100011111101110100111110001111101000001101110111000101001000111010111001110010010100110100110000101011101000000111101110110100100010000100010111000110010000010111001000011000100101110010011110010000111111100110011100001010010101101110000010111011111000001010000000100010000001011101110011100100100000010101010111010100101010010000111111010111001110001101110000000111101001110100 1100001111100011100001000111110011100111011001011110100111111001100111011100111100000011111010011111010111110001000011000000000101101011110000111100111011001100000010111010010110010100010110101111101011000010101001000100001011100111111100001110100100011110111101010110111111001100001001010101011111001101111011111100001100110000010001100111010001010110001101011001001010001001111101110010000011111011 1100001110011001011111110101010000111001011111010111100101001010111101101000001010000111100010110111111100011001000111001001110110100010010010001111110001111110100110000100100111001011010001111111110010001000110100001000101100100000111011110101111110010001111101110101100010111101101111100100010000010101000100101011010011100100001111110000110000100110011010011000001100110011011110010101010010000100 0110000100100000110001111110101110010011111101011101110101011010110000110001111010111100000010000110011000010111110111111011001011101101001100000011111111011101100011010000000110101100110100011000010110100111011101101000000110110001100110011011100100111000011010101101010011110110001101011110000110001111001000100000001001101100000000011100111010100111100000010000111110101011111000001111101011011100 1100101001001011010110110100101010111101000100010101001001001011100101101010110001101101111111011100101000110010100100110110111011110010101010011111100111110101110011010100010101000010010100101110011000010011110010100001110110000011100011001110101000011000001010000101100100101111001001111110001110010110010110000101001111110001111110110011000100010011101001101000111110110000001100111010101111010010 1010011101111001101011001001010100011011111000010110010100011011010000110101110010101111010101000000000010011110011100000110011000110010100011001010001111011111000001100101001001101000011101011010011001000100000011010100010100110101100001100011011001111100101000100110010000010111101001100010011100110110101111010011110011100010000010111100111011100011110011001001101111011010111101101110111111010100 1011110111010110110101111011011110000100100011011001011110000111100010011000101101000010100110001011010110101010100111000011000100000100100110101010001100110010110011110011001111111000000101000010000100011110111011011011100011010000010010011110111110101000010011110110011010011110100101000010101000011010011000101000001101010110101001110000011110011111001110010011011000010111000001100010001011101010 0011011010011110100101011110011000100101111001001100110111011100001001100110010111100101001001001000011110011110011111001100110010100000011100001100010100100100111101111110000011101001111010111011000000010010110111010001011100100110000001001101001100000100000100001101100101111101001000100010111010010100110111011001101010100101101010010111101001001001101110100101011111100110001010000010001011001001 0000000110110100101001000010001101101011010100100110001000100100001101001111000010110111011100101100011110010110001101100000101110110111111011101100000111011111000101110100000011101111001010100100110010011111000001110000110011110000000011000100000001110010101111000000000100110000010101111000010000000011110000100110110101010001101100001110110000000111011100000000000110011100001111111101011001101100 0110001001010110111000110011101110011000010111100100111000101000011110100100011111001001010001000100100010100010101000001011011011001000100110000100110010111010100111001011100111000110100101010101011010111010010001110100110110111111010010110010001110101000000001011100111100011111111101000011010110100000100000010001010000011101000011110100101111001000001000011010111010011110011100011100111011111001 0101001101101111010101110011110110111010101110001000001001010111011100111000010101010101001101101100110011100011111001111111101111011111111100001100010111011001010111011000011001011000011010010111110101100000100010111010110011110100101101010110010001110101100100111101000000101111010111001111011000101000010001110100011111000000001100110011000100100110011011001110010000001101101010110111010100100101 0001110100000000001110111111000111101010100100010110101011100000111110000111111101101100000111011010001011110101011101100010100010000010100100111111100001010110000001010110001000001100001111101000100101100100111101101111011111000011101000111001001000111101010010100110110100111010111110001010000100101110011001001001000111011001011001111100000000000011100111111100100101101101001011010110000010111001 0011101110100001101110100011111000011010001000011101110000001110000110100100011001011011101110001111011000100010010111010000011101011011100000101000001100111100010001100101001101011010101110111100101010011111101111111011100000110010111011101111011100110110010110010100111111111001010011001111100011011010100111111100001011100100100000010111010111001100011101100001111001001010001010110100110000010101 1010010001010010001110010010110011111101011111111100101111100101000101000010111111101010000011011101000011010000000100010000100110101001110010111110111110101101110010000110010010001010100111111110011010011001101011010111001110110000100111000010110101110100101110010111101110010111001011001100010011110101010001111001100000111101100011000100110111100101111100000101111010100100100010001010111111100000 1111011010010110110010111100011011110010111011100011001011010100100000010010110100001111101001001011001111011000001110001001101100101000000010101000101000010011001000101011010000010101111010111001001110011001100010011000010110111000111111010101111110000100011010001111100101100100110100000011110001011001100001011000101011001011001011010110010001001101100000100011110001010110100111011011110000011001 1111001101100100100101011110101000111001101011000010010011010110001110011101110100000001000100100001100000010100001010100111110101011011010000000001101110011110110011011100001110001011000010011001100010010010111110010100111000000110011101000101001110010011111001100011101011010011001001001110001100100000000100011011001100110100000010101011011101010000011101110010111101100111111000001110001000110101 0111010000101001100100111100101001000111001010001010000010001111101101001000001010111001000010010000101111100101100110000110011101111101100100001001110011101100001001010101100101101011001100101010010010110001010000011111000001110001010001000101010000010100010000110001011111001101001110100010101110010100110111011110111010100101011010010101111100000100010100101011000000010011001011100010111101010111 0111001110101110111101011000110010010001110001010001111101110110111010111111011101001111001011110010001111111000010101011110111010111001110110100011011101101001011011010011011010101000100011011000100101101100111110110110101110001100001000100111011011001001111010100100101100110100011111101011001011110001110010010101110001101100101000110001011100000001110010111011010111011010001000100001110110001000 0011101100000000101100001010010000111000010001011110001000110101110101001011101011010100000000110100011011101100010001111110110101110001101010010000111101101010111100101010101101010010010110111110100100110100011101011000001000000000011101100010110100110100110101011001101111100111000001011100110000001101110000101000001100010111000011001100001101000011111101000100101110001010010000100101011101001100 1101101100010011010100011100101111001100001100110110001100101011000100000000010000011010000100010110011011100011001100000010011100100111100110000111011111000111010110110001111100001010110100010011101011110100010101110101111100010100010100001101101000000110110010000111101000110010111011111011110010110101001000110000101100101110000111100111100000011101111111110101010111010010101010110010101101110110 0111001000000011001111100010101001110010111000010111000100001100111111100001111111111111001011010011110011000100110001110101111000101000001110111110110111010000011110110111100100011011101011110101110010001011010110010110100100110100100000001010010011101111100101111000110011011111111000110110011010110110101101101010000111001101000000110011110000100111100010100011100110010110010101001101011111001001 0000010010010011101111111010001010111110000001111010111001110000011101000111010110010000001110101100000100101100011110011000000111010001011110111010000101100100011001110011111000010010001001000111011110100110001100101010111101111001001001111001101011111101100101010001101010100001110111000111111011001011110111110001101001001111010101111101101010001000110011110110101111101000111011001011011110011111 0101001010010011000000100011000101111011111101011111011000101111001010100101001001011110100011110010111110000101010010101011101000100111110111111011010100110101001001011110100100001111001011010000111010001111101000010000010010100010010100101001101001100110101110110011001000000110010111010011000111100001000001010101001101101011010110110111110110111110010100011100100110101101110001110101011110001011 0110110100011110100000110000100000000000100101001111101001101010110100101100000111000101100110000110100101000100011100010100110110101010011000110111110111101001100111101111100000000011001110110110100101011110100111010000001001110000110010010110100100110110011110000010010111001110011011101000000001001000000110110001110000110100110111010111010001011011001011000101101010111110101011111010111101111000 1000010011010000010100010101111101111001111100001100100110111001101010011111011110111000000010011011011101100111100001111001111110100110001101111001011101111010000100001111011010000000001011111100100110011001010111111100110110000010011110000001001101111111011111100011101100011000111110010101111011010110111101100100100110000110011011110111101101110101100000010000101110000010111000101010010010001100 0011001111110001000000000111010110101010001111001000110000110000110101110100100110001010001010000110000100111100000011101100111101011111100011011100000101110011100100011001100101000101100010110111001111001001011010111001100100000111111111111100101011110011100100110010000110011011110110110110111100001101100001100011001001101001011101001101100001010010000000101110011010001011110110111010101010011000 0010111111111101010110110000101011010101100000101101001001011011100011010000000011111110010111111001101101010101011011110110001100000010001111111100000010100010101101001100101101000101010011000101110001001110111011001010001011001111000011010100001110010001100101001100010000011001001010110111110000100011000101000101111010000010111100100110101010001011101100011111011100100000000001011111100101101011 1101000011111011001011001100000011001101110100000101010001001001011100011000001110000101001011100001100011001101001011000111011101101111001010110111111110010001110010000010100010011101100101001001110100000111001011101011101100111100100110110110010110101101000110011000110001110011000010100010010001011011100111100111111000111110000101101010110101000010110101111010111010100110011010001111001011110010 0110010110000011111000011111100011010101101000001000000100011011101110011100000000110111100101010100001010010111011111110100110110111011000010000000011001100011100000101001011000101110011101010001010010010001010110000100010000111010111111000111101111101111001010110000011111001000101001000101100001100101011100000001011110110001010000100111001001001100001000100100101001101111110110111001000111010111 0100010001011001111001110001001010100001001110101001100100101011111000101011111001110001000010000000011110111000101100111011100111011110011110001111110100001011100010100001000001011001010111011001111011001011101111100111010000001111110111100110010100111110100111001011100011011101110010111000001111001000100110101111101111111011111010010101001000110100001010100101001010001110110110111100111010110110 0100000011001000010100011000110011010111100001111101110111110001011000001010000100101001100001011100011011000110011111100110101001000000001011000011001100110001101110101110000100011101111010110110101001100101110011101111100000011110010001111010010000111111011000001000000111100001011101010001110101000001000000001000010101100100100100111100100110001000010010011001010100000000111000011111111011011010 1101101010001101101111010100001110010010101001001111111111101010000010110100110000000111111111001101011101110000111110010001000111100011101100011110101100110100110110100001100001101011001111100001101100000001110011100101110100011100010000010100010010011110100010111000011101100010110010001111111010001111001110110110100100000110001101111001000111111000110001011010101000000100101110001110100111110111 1011011110000111001010000001001010010001111100110011011101101001100001111000111010011101110100001000100011100001110011001111011100000001010001000100101011000010010000010000010000001110100101010001101010100110100100110010000000111001011000111110111100011101011100100111000111001011101010101010101011101011000011111010110101111111110010110110100110100000100000100101101111000110010000111111110111010010 0110110011001001101000110100100000110011100010101001110010000101110100110111110110011100111011110110111111010000011011011110101010100100110000001100001001001001100100101110111011110011100000110100011110101001011110110110001111110010111000010001000100111010000101001101001100011111011001010110011001100011110100110101111001110111000101101011111010010110101010010110001011000010000110000000010001011101 0110111111101010010010100011110001110001100010000111011110100100000010111101011011001111101110110010100010111011111111111111000001011011110110101110000110101011111001011111111110010100110010001110011001110000011001101110100001000011000011010101011101100100101011011110101011000101101011010010100010101110110000001111001011100010100110001001110111010001100011010100100001010011101110100110110110010110 0111011010110001000111101000100110001011111110111010110110100101010001110100010000011111100011100101101010101001011101000100110010101101101001111110001110011111011111010011101110001000010011101010101001110011100110110001011011101001011110100011011111010100111100100101111101100110010110000000000011010010010000000010111010111101001110110111010111111011101001001111000101000001101001111111001000101101 0110111011001011101000101000100010010000011010101100001110011010001001001101101001101011110111111101010000100110011100101100101110111010111111101011011100110101110110001101000111110100000111100010111100011010110110101000010001011100011101101010100110100000000101011110010010111111011010000000000010011011011111010101000100111110011001100001110110111101011101011000100110001100011101010011101000101000 1010000110111000001001000011100110101100110110100011001010100100111101110000011101010011100110110110000111110011101000111101011100110100111001110101101100100010000011101111000101000111100110111110011100000011011000010000101010110110011101011100000110011011000000010000100110010110000110001010101110011101011110000010001111010001010010100111001100001110011110110010010100110011010100101001100111011111 0010110100100001110000010000110111001001111000101010111010111110000100001011010010111100100001010001001100000110000000101011111011110101110100101000010010111010000100100001001100001000110111011110100100000101001111010001101111000111110101000101011000111101101110011010000100110001111001011101011000001110101011111000110111000011011110011010110111100111100111011010011010010100100001100001000010000000 1111111001100000111110000001011011000100011000101011011001010001101000011100000110101010111001101010100110111111001100110100100111111111001000101110001011000111010000100101011100110101100111101001001110100100111101101111010111010000001000010000011110101010111101110110011111100101010010111111000111010000110111001000111111000010110011010001000011000110111110101011011011010111110001101110011001110100 0001100010111111110110110001101010010101000110001101101100110001000000011111111111100000101111101100001010110101100000111111000011010010110001101101010101110111111000001000100001100000010001000000011010101001111100100101000001101101010000110001111010101000110011001010011000011101011010000111110011011000001001100001000110110000100110100111100001111100111100101001011110001011100111100011101101010111 0111001110011011001111101010001110000111100100101010100101001111111010111110101001011010111011110001011001111100000101100010011111100101001101001010001111100010100001101111000011001001111011110101010110000010001101100101100011011010101111001001010011001100011000010111010100001011111001111000111101100011010100010111110111110110010010101010011000111010000110001000101111000110100101111001000100110111 1010011000110111111001111001010111011011001110101100100001111111100011010011001011000010000100111001100111010000000001111000101100011011101001100011111101101010111010011101000111111001111011010111001101100010100111111001111011011101011001111100010011010100001110000001010101101110101000100111001001111000011001100100101001111001101111011101001010100001011100111101011010101100101011000100001111100001 0000010100101100111110101101010100100010101111001110000000101101100110101101010101010110000110100100110111010101001011100001010111000100010001111000101100111011100011000010111111001000111011001101101010110110100111100110001011011110000111101110101001001001100010001101111010010001111011000101011011010111110101110010110011000001010011111101010011110101110101011010101101100011100101110010000001010101 0100010011010001100000011011011010010100001000010101001010010101111000101110001010010111010110101100100101001100010111101110111011101100001010010101101101100011110001000010101001001110111111001110010101111100010100010101101000001010110110010010001010011101000110000101001111010101011011001111011110001100111000100110111100001000010100111100110010001100011001111100110101000100011111101111001100101011
cTrader Algo

Line, PolyLine, Polygon【cAlgoAPI】

3/13/2021 3/30/2021

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

線と多角形

線や多角形を描くことができます。うまく使えば簡単なアイコンなどはプログラム内で作成できてしまいます。

 

Lineクラス

1本の線です。

public class Line : Shape

 

プロパティ
(double) X1 {get; set;}

始点のX座標を取得、設定します。

(double) X2 {get; set;}

終点のX座標を取得、設定します。

(double) Y1 {get; set;}

始点のY座標を取得、設定します。

(double) Y2 {get; set;}

終点のY座標を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineCap参照。

 

 

Polylineクラス

複数のつながった線です。

public class Polyine : Shape

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記PenLineJoin参照

 

 

Polygonクラス

多角形です。Polylineの始点と終点をつなげただけのものです。

public class Polygon : Shape

プロパティもPolylineと全く同じです。

 

プロパティ
(Point[]) Points {get; set;}

つなげる点の座標をPointの配列で設定、取得します。

(FillRule) FillRule {get; set;}

ぬりつぶし方式を取得、設定します。

Shape, ControlBaseのプロパティすべて

StrokeColorかFillColorは必ず設定します。サイズ自動調整をさせる場合、StretchはUniformにしておく方がいいでしょう。

 

サンプルコードは下記FillRule参照。

 

 

Pointクラス

PolylineとPolygonの座標を表すためのオブジェクトです。

public class Point : Object

 

コンストラクタ
Point(double x, double y)

x座標とy座標を指定してオブジェクトを作れます。

 

プロパティ
(double) X {get; set;}

x座標を取得、設定します。

(double) Y {get; set;}

y座標を取得、設定します。

 

 

関連する列挙型

PenLineCap列挙型

線や点線の終端形を表します。線の端にキャップをかぶせるイメージです。ぶっとい線じゃないと違いがわかりません

Flat 終端なし。デフォルト。
Square 四角
Round
Triangle 三角

 

サンプルコード

Func<PenLineCap, Line> line = cap => 
    new Line {
        StrokeColor = Color.White,
        StrokeThickness = 30,
        X1 = 20,
        Y1 = 10,
        X2 = 80,
        Y2 = 10,
        StrokeStartLineCap = cap,
        StrokeEndLineCap = cap,
        Margin = 10,
    };
var flat = line(PenLineCap.Flat);
var square = line(PenLineCap.Square);
var round = line(PenLineCap.Round);
var triangle = line(PenLineCap.Triangle);

var panel = new StackPanel();
panel.AddChild(flat);
panel.AddChild(square);
panel.AddChild(round);
panel.AddChild(triangle);
Chart.AddControl(panel);

上から順にFlat,Square,Round,Triangleです。

FlatとSquareは見た目の形は同じですが、Squareは四角いキャップをかぶせてるので線が少し長く表示されます。

 

 

PenLineJoin列挙型

2本の線の接合部分の形を表します。これもぶっとい線じゃないと違いがわかりません

Miter 普通。デフォルト。
Bevel 斜め切り落とし。
Round 丸。

 

サンプルコード

Func<PenLineJoin, Polyline> line = join =>
    new Polyline {
        StrokeColor = Color.White,
        Points = new Point[] {new Point(50, 10), new Point(10, 10), new Point(10,50)},
        StrokeThickness = 30,
        StrokeLineJoin = join,
        Margin = 10,
    };
var miter = line(PenLineJoin.Miter);
var bevel = line(PenLineJoin.Bevel);
var round = line(PenLineJoin.Round);
var panel = new WrapPanel();
panel.AddChild(miter);
panel.AddChild(bevel);
panel.AddChild(round);
Chart.AddControl(panel);

左からMiter,Bevel,Roundです。

 

 

FillRule列挙型

polylineやpolygonの塗りつぶし方式を表します。polylineも閉じた線とみなして判定します。

EvenOdd 領域内の任意の点から無限に伸びた光線を跨いだ線の数を数え、それが奇数であれば内側とみなし塗りつぶします。偶数であれば塗りつぶしません。
Nonzero 領域内の任意の点から無限に伸びた光線を左から右に跨いだ線の数と右から左に跨いだ線の数が異なる場合、内側とみなしぬりつぶします。

説明は私のざっくりとした意訳です。わかりにくくて申し訳ないですが、丁寧に訳してもたぶん同じくらいわかりにくいです。

cAlgo特有のものではないのでちゃんと知りたい場合はMSDNのFillRuleの説明探した方が早いかもしれません。

 

サンプルコード

Func<FillRule, Polygon> polygon = rule => 
    new Polygon {
    Points = new Point[] { new Point(0, 20), new Point(40, 20), new Point(10, 50), new Point(20, 0), new Point(30, 50) },
    StrokeColor = Color.Red,
    FillColor = Color.Yellow,
    FillRule = rule,
    Margin = 10,
    };

var evenodd = polygon(FillRule.EvenOdd);
var nonzero = polygon(FillRule.Nonzero);
var panel = new WrapPanel();
panel.AddChild(evenodd);
panel.AddChild(nonzero);
Chart.AddControl(panel);

 

左がEvenOdd、右がNonzeroです。

よくわからなければ中身全部塗りつぶしたければNonzeroと思ってもらえれば(cAlgoでは)だいたい大丈夫です。

 
 
 
 

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

新しいコメント

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

cTrader's Life

© 2026 ajinori