{"id":"drawing-and-images-pixels","slug":"pixels","title":"Images as grids of pixels","text":"A picture on a screen is a grid of tiny squares, the **pixels**, each of one color. Module 47 kept a picture's brightness in a two-dimensional array. JavaFX reads real image files into such grids of colors, lets a program read and change every pixel, and shows the result in a window.\n\n### An image from a file\n\nThe pictures in this module are small PNG files that Java Arena draws for its lessons with a program of its own, so that they're the same everywhere. A block like the one below shows the file a lesson's example gets in its folder, with its name and size. Here's `landscape.png`:\n\n```asset landscape.png\n{\"name\":\"landscape.png\",\"image\":{\"asset\":\"landscape.png\",\"url\":\"images/landscape-309f25443f.png\",\"width\":32,\"height\":24,\"size\":317,\"alt\":\"A small landscape: a blue sky that gets lighter toward the horizon, a yellow sun, blue-green hills, a green slope, a small blue lake and a striped brown field.\"}}\n```\n\n```java\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.layout.Pane;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image picture = new Image(\"file:landscape.png\");\n        System.out.println(picture.getWidth() + \" x \" + picture.getHeight());\n\n        stage.setScene(new Scene(new Pane(new ImageView(picture))));\n        stage.setTitle(\"Landscape\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n```\n\n```window\n{\"events\":[],\"window\":{\"windows\":[{\"title\":\"Landscape\",\"scene\":{\"root\":{\"n\":1,\"type\":\"Pane\",\"children\":[{\"n\":2,\"type\":\"ImageView\",\"image\":{\"width\":32,\"height\":24,\"crc\":\"6315e812\",\"pixels\":\"RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7//9dA///XQP//10D/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR///XQP//10D//9dA///XQP//10D/XZTR/12U0f9dlNH/XZTR/12U0f9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P//10D//9dA///XQP//10D//9dA///XQP//10D/ZZvU/2Wb1P9lm9T/ZZvU/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX///XQP//10D//9dA///XQP//10D//9dA///XQP9sodf/bKHX/2yh1/9sodf/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r//9dA///XQP//10D//9dA///XQP//10D//9dA/3Sn2v90p9r/dKfa/3Sn2v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7//9dA///XQP//10D//9dA///XQP98rd7/fK3e/3yt3v98rd7/fK3e/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H//9dA///XQP//10D/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5vG6v+bxur/m8bq/5vG6v9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/oszt/6LM7f+izO3/oszt/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/zyZRv88mUb/PJlG/zyZRv88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/N5FB/zeRQf83kUH/N5FB/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/\"}}]}}}],\"problems\":[]},\"outline\":\"Window \\\"Landscape\\\"\\n  Pane\\n    ImageView 32 x 24, pixels 6315e812\"}\n```\n\n```output\n32.0 x 24.0\n```\n\n- `new Image(\"file:landscape.png\")` reads the file `landscape.png` in the program's folder. The `file:` at the start says that it's a file. (Without it, JavaFX looks for the image among the files that come packed with the program's classes, its resources, instead of in its folder. In Java Arena that throws an IllegalArgumentException, so always write `file:` here.)\n- `getWidth()` and `getHeight()` return the size in pixels. They're doubles, as sizes are everywhere in JavaFX: write `(int) picture.getWidth()` for an int to loop with.\n- An **ImageView** is a node that shows an Image. The Image holds the pixels, and the view shows them in the window. The classes are in `javafx.scene.image`.\n\nThe page draws a small image several times larger with its pixels kept square and sharp, and says how much larger under it. In the window as text, this image view is the line `ImageView 32 x 24, pixels 6315e812`: its size, and then a checksum, a number worked out from every pixel's color. Change a single pixel and the number changes, so the challenges with images compare your picture with the model solution's **pixel by pixel**.\n\n### Reading pixels\n\n`tiny.png` is 6 pixels wide and 4 high, and Java Arena made each of its pixels a known color:\n\n```asset tiny.png\n{\"name\":\"tiny.png\",\"image\":{\"asset\":\"tiny.png\",\"url\":\"images/tiny-54f3f53ec8.png\",\"width\":6,\"height\":4,\"size\":120,\"alt\":\"A tiny test image of 6 by 4 pixels, each a different color: red, green, blue, white, black and gray across its first row, and other colors in the three rows below.\"}}\n```\n\n```java\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelReader;\nimport javafx.scene.layout.Pane;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image tiny = new Image(\"file:tiny.png\");\n        PixelReader reader = tiny.getPixelReader();\n        Color corner = reader.getColor(0, 0);\n        System.out.println(corner);\n        System.out.println(corner.getRed() + \" \" + corner.getGreen() + \" \" + corner.getBlue());\n\n        Color steel = reader.getColor(3, 3);\n        System.out.println(steel);\n        int red = (int) Math.round(steel.getRed() * 255);\n        int green = (int) Math.round(steel.getGreen() * 255);\n        int blue = (int) Math.round(steel.getBlue() * 255);\n        System.out.println(red + \" \" + green + \" \" + blue);\n\n        stage.setScene(new Scene(new Pane(new ImageView(tiny))));\n        stage.setTitle(\"Tiny\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n```\n\n```window\n{\"events\":[],\"window\":{\"windows\":[{\"title\":\"Tiny\",\"scene\":{\"root\":{\"n\":1,\"type\":\"Pane\",\"children\":[{\"n\":2,\"type\":\"ImageView\",\"image\":{\"width\":6,\"height\":4,\"crc\":\"c13cb007\",\"pixels\":\"/wAA/wD/AP8AAP///////wAAAP+AgID///8A/wD/////AP//wMDA/0BAQP+AAAD/ECAw/0BQYP9wgJD/oLDA/9Dg8P8KFB7/AQID/39/f//+/v7/M2aZ/5lmM/8ui1f/\"}}]}}}],\"problems\":[]},\"outline\":\"Window \\\"Tiny\\\"\\n  Pane\\n    ImageView 6 x 4, pixels c13cb007\"}\n```\n\n```output\n0xff0000ff\n1.0 0.0 0.0\n0x336699ff\n51 102 153\n```\n\n- `getPixelReader()` returns the image's **PixelReader**, and `getColor(x, y)` the color of one pixel. x is the column, counted from 0 at the left, and y the row, from 0 at the top, as on a canvas. Note the order: x first, unlike `grid[row][column]` in module 47. A pixel outside the image, such as x 6 here, throws an IndexOutOfBoundsException.\n- The top left pixel is pure red: `0xff0000ff`.\n- `getRed()`, `getGreen()` and `getBlue()` return the amounts as doubles from 0.0 to 1.0, not 0 to 255. Times 255 and rounded, they're the familiar whole numbers: the pixel at (3, 3) is 51, 102, 153, a steel blue.\n\n### When the file can't be read\n\nA missing file doesn't throw an exception. JavaFX gives an **error image** instead: `isError()` returns `true`, its size is 0 x 0, and `getException()` returns the exception that says what went wrong (for a missing file, a FileNotFoundException). So a program checks before it uses the picture:\n\n```java\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.control.Label;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.layout.Pane;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image picture = new Image(\"file:holiday.png\");\n        System.out.println(picture.isError() + \" \" + picture.getWidth());\n        if (picture.isError()) {\n            stage.setScene(new Scene(new Label(\"The picture couldn't be read.\")));\n        } else {\n            stage.setScene(new Scene(new Pane(new ImageView(picture))));\n        }\n        stage.setTitle(\"Holiday\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n```\n\n```window\n{\"events\":[],\"window\":{\"windows\":[{\"title\":\"Holiday\",\"scene\":{\"root\":{\"n\":1,\"type\":\"Label\",\"text\":\"The picture couldn't be read.\"}}}],\"problems\":[]},\"outline\":\"Window \\\"Holiday\\\"\\n  Label \\\"The picture couldn't be read.\\\"\"}\n```\n\n```output\ntrue 0.0\n```\n\nAn error image has no pixels to read: its `getPixelReader()` returns `null`.\n\n### Writing pixels\n\nA **WritableImage** is an image whose pixels a program sets. `new WritableImage(width, height)` makes one in which every pixel is fully transparent at first, and its `getPixelWriter()` returns a **PixelWriter**, whose `setColor(x, y, color)` sets one pixel. A WritableImage is an Image too (the class extends Image), so an ImageView shows it.\n\nA copy of the landscape with a one-pixel crimson frame around it: the loops go through every pixel, row by row as in module 47, and each pixel on the edge gets the frame's color, while the others get the original's:\n\n```asset landscape.png\n{\"name\":\"landscape.png\",\"image\":{\"asset\":\"landscape.png\",\"url\":\"images/landscape-309f25443f.png\",\"width\":32,\"height\":24,\"size\":317,\"alt\":\"A small landscape: a blue sky that gets lighter toward the horizon, a yellow sun, blue-green hills, a green slope, a small blue lake and a striped brown field.\"}}\n```\n\n```java\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelReader;\nimport javafx.scene.image.PixelWriter;\nimport javafx.scene.image.WritableImage;\nimport javafx.scene.layout.HBox;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image original = new Image(\"file:landscape.png\");\n        PixelReader reader = original.getPixelReader();\n        int width = (int) original.getWidth();\n        int height = (int) original.getHeight();\n\n        WritableImage framed = new WritableImage(width, height);\n        PixelWriter writer = framed.getPixelWriter();\n        for (int y = 0; y < height; y++) {\n            for (int x = 0; x < width; x++) {\n                if (x == 0 || y == 0 || x == width - 1 || y == height - 1) {\n                    writer.setColor(x, y, Color.CRIMSON);\n                } else {\n                    writer.setColor(x, y, reader.getColor(x, y));\n                }\n            }\n        }\n\n        stage.setScene(new Scene(new HBox(10, new ImageView(original), new ImageView(framed))));\n        stage.setTitle(\"Frame\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n```\n\n```window\n{\"events\":[],\"window\":{\"windows\":[{\"title\":\"Frame\",\"scene\":{\"root\":{\"n\":1,\"type\":\"HBox\",\"spacing\":10,\"children\":[{\"n\":2,\"type\":\"ImageView\",\"image\":{\"width\":32,\"height\":24,\"crc\":\"6315e812\",\"pixels\":\"RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7//9dA///XQP//10D/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR///XQP//10D//9dA///XQP//10D/XZTR/12U0f9dlNH/XZTR/12U0f9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P//10D//9dA///XQP//10D//9dA///XQP//10D/ZZvU/2Wb1P9lm9T/ZZvU/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX///XQP//10D//9dA///XQP//10D//9dA///XQP9sodf/bKHX/2yh1/9sodf/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r//9dA///XQP//10D//9dA///XQP//10D//9dA/3Sn2v90p9r/dKfa/3Sn2v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7//9dA///XQP//10D//9dA///XQP98rd7/fK3e/3yt3v98rd7/fK3e/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H//9dA///XQP//10D/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5vG6v+bxur/m8bq/5vG6v9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/oszt/6LM7f+izO3/oszt/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/zyZRv88mUb/PJlG/zyZRv88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/N5FB/zeRQf83kUH/N5FB/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/\"}},{\"n\":3,\"type\":\"ImageView\",\"image\":{\"width\":32,\"height\":24,\"crc\":\"cfbc9778\",\"pixels\":\"3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/3BQ8/9wUPP9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7//9dA///XQP//10D/VY7O/1WOzv9Vjs7/VY7O/1WOzv/cFDz/3BQ8/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR///XQP//10D//9dA///XQP//10D/XZTR/12U0f9dlNH/XZTR/9wUPP/cFDz/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P//10D//9dA///XQP//10D//9dA///XQP//10D/ZZvU/2Wb1P9lm9T/3BQ8/9wUPP9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX///XQP//10D//9dA///XQP//10D//9dA///XQP9sodf/bKHX/2yh1//cFDz/3BQ8/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r//9dA///XQP//10D//9dA///XQP//10D//9dA/3Sn2v90p9r/dKfa/9wUPP/cFDz/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7//9dA///XQP//10D//9dA///XQP98rd7/fK3e/3yt3v98rd7/3BQ8/9wUPP+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H//9dA///XQP//10D/hLPh/4Sz4f+Es+H/hLPh/4Sz4f/cFDz/3BQ8/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/9wUPP/cFDz/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/3BQ8/9wUPP+bxur/m8bq/5vG6v9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v/cFDz/3BQ8/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/oszt/6LM7f+izO3/oszt/1qMbv9ajG7/Woxu/9wUPP/cFDz/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/3BQ8/9wUPP9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv/cFDz/3BQ8/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/9wUPP/cFDz/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/3BQ8/9wUPP88mUb/PJlG/zyZRv88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS//cFDz/3BQ8/zeRQf83kUH/N5FB/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/9wUPP/cFDz/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/3BQ8/9wUPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP/cFDz/3BQ8/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/9wUPP/cFDz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/3BQ8/9wUPP/cFDz/\"}}]}}}],\"problems\":[]},\"outline\":\"Window \\\"Frame\\\"\\n  HBox spacing 10\\n    ImageView 32 x 24, pixels 6315e812\\n    ImageView 32 x 24, pixels cfbc9778\"}\n```\n\nThe original isn't changed: an Image read from a file can't be written to. The framed picture is a new image with pixels of its own.\n\nA WritableImage doesn't need a file at all. Here every pixel's color is worked out from where it is, which makes a smooth blend of colors:\n\n```java\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelWriter;\nimport javafx.scene.image.WritableImage;\nimport javafx.scene.layout.Pane;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        WritableImage blend = new WritableImage(16, 16);\n        PixelWriter writer = blend.getPixelWriter();\n        for (int y = 0; y < 16; y++) {\n            for (int x = 0; x < 16; x++) {\n                writer.setColor(x, y, Color.rgb(x * 16, 100, y * 16));\n            }\n        }\n\n        stage.setScene(new Scene(new Pane(new ImageView(blend))));\n        stage.setTitle(\"Blend\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n```\n\n```window\n{\"events\":[],\"window\":{\"windows\":[{\"title\":\"Blend\",\"scene\":{\"root\":{\"n\":1,\"type\":\"Pane\",\"children\":[{\"n\":2,\"type\":\"ImageView\",\"image\":{\"width\":16,\"height\":16,\"crc\":\"e994d753\",\"pixels\":\"AGQA/xBkAP8gZAD/MGQA/0BkAP9QZAD/YGQA/3BkAP+AZAD/kGQA/6BkAP+wZAD/wGQA/9BkAP/gZAD/8GQA/wBkEP8QZBD/IGQQ/zBkEP9AZBD/UGQQ/2BkEP9wZBD/gGQQ/5BkEP+gZBD/sGQQ/8BkEP/QZBD/4GQQ//BkEP8AZCD/EGQg/yBkIP8wZCD/QGQg/1BkIP9gZCD/cGQg/4BkIP+QZCD/oGQg/7BkIP/AZCD/0GQg/+BkIP/wZCD/AGQw/xBkMP8gZDD/MGQw/0BkMP9QZDD/YGQw/3BkMP+AZDD/kGQw/6BkMP+wZDD/wGQw/9BkMP/gZDD/8GQw/wBkQP8QZED/IGRA/zBkQP9AZED/UGRA/2BkQP9wZED/gGRA/5BkQP+gZED/sGRA/8BkQP/QZED/4GRA//BkQP8AZFD/EGRQ/yBkUP8wZFD/QGRQ/1BkUP9gZFD/cGRQ/4BkUP+QZFD/oGRQ/7BkUP/AZFD/0GRQ/+BkUP/wZFD/AGRg/xBkYP8gZGD/MGRg/0BkYP9QZGD/YGRg/3BkYP+AZGD/kGRg/6BkYP+wZGD/wGRg/9BkYP/gZGD/8GRg/wBkcP8QZHD/IGRw/zBkcP9AZHD/UGRw/2BkcP9wZHD/gGRw/5BkcP+gZHD/sGRw/8BkcP/QZHD/4GRw//BkcP8AZID/EGSA/yBkgP8wZID/QGSA/1BkgP9gZID/cGSA/4BkgP+QZID/oGSA/7BkgP/AZID/0GSA/+BkgP/wZID/AGSQ/xBkkP8gZJD/MGSQ/0BkkP9QZJD/YGSQ/3BkkP+AZJD/kGSQ/6BkkP+wZJD/wGSQ/9BkkP/gZJD/8GSQ/wBkoP8QZKD/IGSg/zBkoP9AZKD/UGSg/2BkoP9wZKD/gGSg/5BkoP+gZKD/sGSg/8BkoP/QZKD/4GSg//BkoP8AZLD/EGSw/yBksP8wZLD/QGSw/1BksP9gZLD/cGSw/4BksP+QZLD/oGSw/7BksP/AZLD/0GSw/+BksP/wZLD/AGTA/xBkwP8gZMD/MGTA/0BkwP9QZMD/YGTA/3BkwP+AZMD/kGTA/6BkwP+wZMD/wGTA/9BkwP/gZMD/8GTA/wBk0P8QZND/IGTQ/zBk0P9AZND/UGTQ/2Bk0P9wZND/gGTQ/5Bk0P+gZND/sGTQ/8Bk0P/QZND/4GTQ//Bk0P8AZOD/EGTg/yBk4P8wZOD/QGTg/1Bk4P9gZOD/cGTg/4Bk4P+QZOD/oGTg/7Bk4P/AZOD/0GTg/+Bk4P/wZOD/AGTw/xBk8P8gZPD/MGTw/0Bk8P9QZPD/YGTw/3Bk8P+AZPD/kGTw/6Bk8P+wZPD/wGTw/9Bk8P/gZPD/8GTw/w==\"}}]}}}],\"problems\":[]},\"outline\":\"Window \\\"Blend\\\"\\n  Pane\\n    ImageView 16 x 16, pixels e994d753\"}\n```\n\nRed grows from left to right (from 0 to 240) and blue from top to bottom.\n\n### Clicking on an image\n\nAn image view takes the mouse as a canvas does. On an image view, `getX()` and `getY()` are in the image's own pixels, however large the page draws it, so `(int) event.getX()` is the column of the pixel that was clicked. A program that tells the color of the pixel you click:\n\n```asset tiny.png\n{\"name\":\"tiny.png\",\"image\":{\"asset\":\"tiny.png\",\"url\":\"images/tiny-54f3f53ec8.png\",\"width\":6,\"height\":4,\"size\":120,\"alt\":\"A tiny test image of 6 by 4 pixels, each a different color: red, green, blue, white, black and gray across its first row, and other colors in the three rows below.\"}}\n```\n\n```java\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelReader;\nimport javafx.scene.layout.Pane;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image tiny = new Image(\"file:tiny.png\");\n        PixelReader reader = tiny.getPixelReader();\n        ImageView view = new ImageView(tiny);\n        view.setOnMouseClicked(event -> {\n            int x = (int) event.getX();\n            int y = (int) event.getY();\n            System.out.println(\"(\" + x + \", \" + y + \") is \" + reader.getColor(x, y));\n        });\n\n        stage.setScene(new Scene(new Pane(view)));\n        stage.setTitle(\"Tiny\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n```\n\n```window\n{\"events\":[\"click ImageView 1 at 3 3\",\"click ImageView 1 at 0 1\"],\"window\":{\"windows\":[{\"title\":\"Tiny\",\"scene\":{\"root\":{\"n\":1,\"type\":\"Pane\",\"children\":[{\"n\":2,\"type\":\"ImageView\",\"onMouseClicked\":true,\"image\":{\"width\":6,\"height\":4,\"crc\":\"c13cb007\",\"pixels\":\"/wAA/wD/AP8AAP///////wAAAP+AgID///8A/wD/////AP//wMDA/0BAQP+AAAD/ECAw/0BQYP9wgJD/oLDA/9Dg8P8KFB7/AQID/39/f//+/v7/M2aZ/5lmM/8ui1f/\"}}]}}}],\"problems\":[]},\"outline\":\"Window \\\"Tiny\\\"\\n  Pane\\n    ImageView 6 x 4, pixels c13cb007\"}\n```\n\n```output\n(3, 3) is 0x336699ff\n(0, 1) is 0xffff00ff\n```\n","task":"An eyedropper. The program reads `pic.png` and shows it in an image view, with a label under it that starts as `Click a pixel`. A click on a pixel sets the label to the pixel's place and its red, green and blue as whole numbers from 0 to 255: `(3, 3): 51 102 153`. Fill in the blanks. The challenge's picture is `tiny.png`, given to the program as `pic.png`:\n\n```asset tiny.png\n{\"name\":\"tiny.png\",\"image\":{\"asset\":\"tiny.png\",\"url\":\"images/tiny-54f3f53ec8.png\",\"width\":6,\"height\":4,\"size\":120,\"alt\":\"A tiny test image of 6 by 4 pixels, each a different color: red, green, blue, white, black and gray across its first row, and other colors in the three rows below.\"}}\n```\n","kind":"fill","seed":"import javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.control.Label;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelReader;\nimport javafx.scene.layout.VBox;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image picture = new Image(\"file:pic.png\");\n        PixelReader reader = picture.[[getPixelReader]]();\n        Label shown = new Label(\"Click a pixel\");\n        ImageView view = new ImageView(picture);\n        view.setOnMouseClicked(event -> {\n            int x = (int) event.getX();\n            int y = (int) event.getY();\n            Color color = reader.[[getColor]](x, y);\n            int red = (int) Math.round(color.[[getRed]]() * 255);\n            int green = (int) Math.round(color.getGreen() * 255);\n            int blue = (int) Math.round(color.getBlue() * [[255]]);\n            shown.setText(\"(\" + x + \", \" + y + \"): \" + red + \" \" + green + \" \" + blue);\n        });\n\n        stage.setScene(new Scene(new VBox(view, shown)));\n        stage.setTitle(\"Eyedropper\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n","solution":"import javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.control.Label;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelReader;\nimport javafx.scene.layout.VBox;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image picture = new Image(\"file:pic.png\");\n        PixelReader reader = picture.getPixelReader();\n        Label shown = new Label(\"Click a pixel\");\n        ImageView view = new ImageView(picture);\n        view.setOnMouseClicked(event -> {\n            int x = (int) event.getX();\n            int y = (int) event.getY();\n            Color color = reader.getColor(x, y);\n            int red = (int) Math.round(color.getRed() * 255);\n            int green = (int) Math.round(color.getGreen() * 255);\n            int blue = (int) Math.round(color.getBlue() * 255);\n            shown.setText(\"(\" + x + \", \" + y + \"): \" + red + \" \" + green + \" \" + blue);\n        });\n\n        stage.setScene(new Scene(new VBox(view, shown)));\n        stage.setTitle(\"Eyedropper\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n","hints":["An image's pixels are read through its PixelReader, from `getPixelReader()`, and the reader's `getColor(x, y)` gives one pixel's Color.","A Color's `getRed()` is between 0.0 and 1.0, so times 255 (and rounded) it's a whole number from 0 to 255. Blue works the same way."],"tests":[{"name":"Test 1","stdin":"","files":{"pic.png":{"asset":"tiny.png","url":"images/tiny-54f3f53ec8.png","width":6,"height":4,"size":120,"alt":"A tiny test image of 6 by 4 pixels, each a different color: red, green, blue, white, black and gray across its first row, and other colors in the three rows below."}},"expect":"","hidden":false,"events":["click ImageView 1 at 3 3"],"window":{"windows":[{"title":"Eyedropper","scene":{"root":{"n":1,"type":"VBox","children":[{"n":2,"type":"ImageView","onMouseClicked":true,"image":{"width":6,"height":4,"crc":"c13cb007","pixels":"/wAA/wD/AP8AAP///////wAAAP+AgID///8A/wD/////AP//wMDA/0BAQP+AAAD/ECAw/0BQYP9wgJD/oLDA/9Dg8P8KFB7/AQID/39/f//+/v7/M2aZ/5lmM/8ui1f/"}},{"n":3,"type":"Label","text":"(3, 3): 51 102 153"}]}}}],"problems":[]},"outline":"Window \"Eyedropper\"\n  VBox\n    ImageView 6 x 4, pixels c13cb007\n    Label \"(3, 3): 51 102 153\""},{"name":"Test 2","stdin":"","files":{"pic.png":{"asset":"tiny.png","url":"images/tiny-54f3f53ec8.png","width":6,"height":4,"size":120,"alt":"A tiny test image of 6 by 4 pixels, each a different color: red, green, blue, white, black and gray across its first row, and other colors in the three rows below."}},"expect":"","hidden":true,"events":["click ImageView 1 at 5 0","click ImageView 1 at 2 2"],"window":{"windows":[{"title":"Eyedropper","scene":{"root":{"n":1,"type":"VBox","children":[{"n":2,"type":"ImageView","onMouseClicked":true,"image":{"width":6,"height":4,"crc":"c13cb007","pixels":"/wAA/wD/AP8AAP///////wAAAP+AgID///8A/wD/////AP//wMDA/0BAQP+AAAD/ECAw/0BQYP9wgJD/oLDA/9Dg8P8KFB7/AQID/39/f//+/v7/M2aZ/5lmM/8ui1f/"}},{"n":3,"type":"Label","text":"(2, 2): 112 128 144"}]}}}],"problems":[]},"outline":"Window \"Eyedropper\"\n  VBox\n    ImageView 6 x 4, pixels c13cb007\n    Label \"(2, 2): 112 128 144\""},{"name":"Test 3","stdin":"","files":{"pic.png":{"asset":"blocks.png","url":"images/blocks-e2cb7ee008.png","width":48,"height":32,"size":201,"alt":"Colored squares of 8 by 8 pixels in 4 rows of 6: bright colors, light colors, dark colors, and grays from black to white."}},"expect":"","hidden":true,"events":["click ImageView 1 at 20 10"],"window":{"windows":[{"title":"Eyedropper","scene":{"root":{"n":1,"type":"VBox","children":[{"n":2,"type":"ImageView","onMouseClicked":true,"image":{"width":48,"height":32,"crc":"c021ba0a","pixels":"/wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA////AP///wD///8A////AP///wD///8A////AP///wD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AwAD/AMAA/wDAAP8AQP//AED//wBA//8AQP//AED//wBA//8AQP//AED//4AAwP+AAMD/gADA/4AAwP+AAMD/gADA/4AAwP+AAMD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD//4CA//+AgP//gID//4CA//+AgP//gID//4CA//+AgP//wID//8CA///AgP//wID//8CA///AgP//wID//8CA////gP///4D///+A////gP///4D///+A////gP///4D/gOCA/4DggP+A4ID/gOCA/4DggP+A4ID/gOCA/4DggP+AoP//gKD//4Cg//+AoP//gKD//4Cg//+AoP//gKD//8CA4P/AgOD/wIDg/8CA4P/AgOD/wIDg/8CA4P/AgOD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4BAAP+AQAD/gEAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/gIAA/4CAAP+AgAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AYAD/AGAA/wBgAP8AIID/ACCA/wAggP8AIID/ACCA/wAggP8AIID/ACCA/0AAYP9AAGD/QABg/0AAYP9AAGD/QABg/0AAYP9AAGD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf+ZmZn/mZmZ/5mZmf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/zMzM////////////////////////////////////////////"}},{"n":3,"type":"Label","text":"(20, 10): 255 255 128"}]}}}],"problems":[]},"outline":"Window \"Eyedropper\"\n  VBox\n    ImageView 48 x 32, pixels c021ba0a\n    Label \"(20, 10): 255 255 128\""}],"require":[],"forbid":[],"more":[{"task":"A pixel-art editor saves its pictures as text. In the file `art.txt`, each line is a row of pixels and each character a pixel: `#` is black (`Color.BLACK`), `o` is orange (`Color.ORANGE`) and `.` is white (`Color.WHITE`). Every line is as long as the first one.\n\nMake a WritableImage as wide as a line and as high as the file has lines, give each pixel the color of its character, and show the image in an ImageView, inside a Pane. The window's title is `Pixel art`. For this file:\n\n```text\n.......\n..##...\n.#oo#.#\n#oooo##\n.#oo#.#\n..##...\n```\n\nthe window should look like the drawing below.\n","kind":"code","seed":"import java.nio.file.Files;\nimport java.nio.file.Paths;\nimport java.util.List;\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelWriter;\nimport javafx.scene.image.WritableImage;\nimport javafx.scene.layout.Pane;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) throws Exception {\n        List<String> rows = Files.readAllLines(Paths.get(\"art.txt\"));\n\n        stage.setScene(new Scene(new Pane()));\n        stage.setTitle(\"Pixel art\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n","solution":"import java.nio.file.Files;\nimport java.nio.file.Paths;\nimport java.util.List;\nimport javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.image.PixelWriter;\nimport javafx.scene.image.WritableImage;\nimport javafx.scene.layout.Pane;\nimport javafx.scene.paint.Color;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) throws Exception {\n        List<String> rows = Files.readAllLines(Paths.get(\"art.txt\"));\n        int width = rows.get(0).length();\n        int height = rows.size();\n        WritableImage art = new WritableImage(width, height);\n        PixelWriter writer = art.getPixelWriter();\n        for (int y = 0; y < height; y++) {\n            for (int x = 0; x < width; x++) {\n                char c = rows.get(y).charAt(x);\n                if (c == '#') {\n                    writer.setColor(x, y, Color.BLACK);\n                } else if (c == 'o') {\n                    writer.setColor(x, y, Color.ORANGE);\n                } else {\n                    writer.setColor(x, y, Color.WHITE);\n                }\n            }\n        }\n\n        stage.setScene(new Scene(new Pane(new ImageView(art))));\n        stage.setTitle(\"Pixel art\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n","hints":["The width is `rows.get(0).length()` and the height `rows.size()`. Make `new WritableImage(width, height)` and get its PixelWriter.","Loop over y (the rows) and, inside, over x. The character is `rows.get(y).charAt(x)`; pick the color with `if` and `else if`, and set it with `writer.setColor(x, y, ...)`. At the end, the Pane holds `new ImageView(art)`."],"tests":[{"name":"Test 1","stdin":"","files":{"art.txt":".......\n..##...\n.#oo#.#\n#oooo##\n.#oo#.#\n..##...\n"},"expect":"","hidden":false,"events":[],"window":{"windows":[{"title":"Pixel art","scene":{"root":{"n":1,"type":"Pane","children":[{"n":2,"type":"ImageView","image":{"width":7,"height":6,"crc":"bb1e37c7","pixels":"////////////////////////////////////////////////AAAA/wAAAP//////////////////////AAAA//+lAP//pQD/AAAA//////8AAAD/AAAA//+lAP//pQD//6UA//+lAP8AAAD/AAAA//////8AAAD//6UA//+lAP8AAAD//////wAAAP///////////wAAAP8AAAD/////////////////"}}]}}}],"problems":[]},"outline":"Window \"Pixel art\"\n  Pane\n    ImageView 7 x 6, pixels bb1e37c7"},{"name":"Test 2","stdin":"","files":{"art.txt":"..#..\n..#..\n#####\n..o..\n..o..\n"},"expect":"","hidden":true,"events":[],"window":{"windows":[{"title":"Pixel art","scene":{"root":{"n":1,"type":"Pane","children":[{"n":2,"type":"ImageView","image":{"width":5,"height":5,"crc":"627243bb","pixels":"//////////8AAAD//////////////////////wAAAP///////////wAAAP8AAAD/AAAA/wAAAP8AAAD/////////////pQD///////////////////////+lAP///////////w=="}}]}}}],"problems":[]},"outline":"Window \"Pixel art\"\n  Pane\n    ImageView 5 x 5, pixels 627243bb"},{"name":"Test 3","stdin":"","files":{"art.txt":"o.#.o.#.o.#.\n"},"expect":"","hidden":true,"events":[],"window":{"windows":[{"title":"Pixel art","scene":{"root":{"n":1,"type":"Pane","children":[{"n":2,"type":"ImageView","image":{"width":12,"height":1,"crc":"f1e39ad8","pixels":"/6UA//////8AAAD///////+lAP//////AAAA////////pQD//////wAAAP//////"}}]}}}],"problems":[]},"outline":"Window \"Pixel art\"\n  Pane\n    ImageView 12 x 1, pixels f1e39ad8"}],"require":[],"forbid":[]},{"task":"A digital photo frame shows the picture `pic.png`. When the image can be read, the scene's root is a VBox with no spacing, holding an ImageView of it and, under it, a label with its size: `32 x 24 pixels` (whole numbers). When it can't be read (the file is missing), the scene's root is only the label `No picture: pic.png is missing`, with no ImageView. The window's title is `Photo frame`.\n\nThe first test gives the program `landscape.png` as `pic.png`, and the window should look like the drawing below. Another test gives it no file at all.\n","kind":"code","seed":"import javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.control.Label;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.layout.VBox;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image picture = new Image(\"file:pic.png\");\n        ImageView view = new ImageView(picture);\n\n        stage.setScene(new Scene(new VBox(view)));\n        stage.setTitle(\"Photo frame\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n","solution":"import javafx.application.Application;\nimport javafx.scene.Scene;\nimport javafx.scene.control.Label;\nimport javafx.scene.image.Image;\nimport javafx.scene.image.ImageView;\nimport javafx.scene.layout.VBox;\nimport javafx.stage.Stage;\n\npublic class Main extends Application {\n\n    @Override\n    public void start(Stage stage) {\n        Image picture = new Image(\"file:pic.png\");\n        if (picture.isError()) {\n            stage.setScene(new Scene(new Label(\"No picture: pic.png is missing\")));\n        } else {\n            int width = (int) picture.getWidth();\n            int height = (int) picture.getHeight();\n            Label size = new Label(width + \" x \" + height + \" pixels\");\n            stage.setScene(new Scene(new VBox(new ImageView(picture), size)));\n        }\n        stage.setTitle(\"Photo frame\");\n        stage.show();\n    }\n\n    public static void main(String[] args) {\n        launch(Main.class);\n    }\n}\n","hints":["`picture.isError()` is `true` when the file couldn't be read. Then the scene's root is just `new Label(\"No picture: pic.png is missing\")`.","Otherwise cast the size to whole numbers, `(int) picture.getWidth()`, so that the label says `32 x 24 pixels` and not `32.0 x 24.0 pixels`."],"tests":[{"name":"Test 1","stdin":"","files":{"pic.png":{"asset":"landscape.png","url":"images/landscape-309f25443f.png","width":32,"height":24,"size":317,"alt":"A small landscape: a blue sky that gets lighter toward the horizon, a yellow sun, blue-green hills, a green slope, a small blue lake and a striped brown field."}},"expect":"","hidden":false,"events":[],"window":{"windows":[{"title":"Photo frame","scene":{"root":{"n":1,"type":"VBox","children":[{"n":2,"type":"ImageView","image":{"width":32,"height":24,"crc":"6315e812","pixels":"RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9Ggsj/RoLI/0aCyP9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/06Iy/9OiMv/TojL/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7//9dA///XQP//10D/VY7O/1WOzv9Vjs7/VY7O/1WOzv9Vjs7/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR/12U0f9dlNH/XZTR///XQP//10D//9dA///XQP//10D/XZTR/12U0f9dlNH/XZTR/12U0f9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P9lm9T/ZZvU/2Wb1P//10D//9dA///XQP//10D//9dA///XQP//10D/ZZvU/2Wb1P9lm9T/ZZvU/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX/2yh1/9sodf/bKHX///XQP//10D//9dA///XQP//10D//9dA///XQP9sodf/bKHX/2yh1/9sodf/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r/dKfa/3Sn2v90p9r//9dA///XQP//10D//9dA///XQP//10D//9dA/3Sn2v90p9r/dKfa/3Sn2v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7/fK3e/3yt3v98rd7//9dA///XQP//10D//9dA///XQP98rd7/fK3e/3yt3v98rd7/fK3e/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H//9dA///XQP//10D/hLPh/4Sz4f+Es+H/hLPh/4Sz4f+Es+H/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+LueT/i7nk/4u55P+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5PA5/+TwOf/k8Dn/5vG6v+bxur/m8bq/5vG6v9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/m8bq/5vG6v+bxur/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/oszt/6LM7f+izO3/oszt/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/Woxu/1qMbv9ajG7/Woxu/1qMbv9ajG7/Woxu/1qMbv9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9GqlD/RqpQ/0aqUP9GqlD/RqpQ/0aqUP9GqlD/RqpQ/zyZRv88mUb/PJlG/zyZRv88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/0GiS/9Bokv/QaJL/0GiS/9Bokv/QaJL/0GiS/9Bokv/N5FB/zeRQf83kUH/N5FB/zxutP88brT/PG60/zxutP88brT/PG60/zxutP88brT/PG60/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/N5FB/zeRQf83kUH/PJlG/zyZRv88mUb/PJlG/zyZRv88mUb/PJlG/zyZRv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/5ZuPP+Wbjz/lm48/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/pX1G/6V9Rv+lfUb/"}},{"n":3,"type":"Label","text":"32 x 24 pixels"}]}}}],"problems":[]},"outline":"Window \"Photo frame\"\n  VBox\n    ImageView 32 x 24, pixels 6315e812\n    Label \"32 x 24 pixels\""},{"name":"Test 2","stdin":"","expect":"","hidden":false,"events":[],"window":{"windows":[{"title":"Photo frame","scene":{"root":{"n":1,"type":"Label","text":"No picture: pic.png is missing"}}}],"problems":[]},"outline":"Window \"Photo frame\"\n  Label \"No picture: pic.png is missing\""},{"name":"Test 3","stdin":"","files":{"pic.png":{"asset":"photo.png","url":"images/photo-5f4040f3fe.png","width":64,"height":48,"size":2077,"alt":"A soft sunset: a sky going from purple to orange, a glowing low sun, dark hills, and rippled water reflecting the sky."}},"expect":"","hidden":true,"events":[],"window":{"windows":[{"title":"Photo frame","scene":{"root":{"n":1,"type":"VBox","children":[{"n":2,"type":"ImageView","image":{"width":64,"height":48,"crc":"c17e1ae0","pixels":"PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/zwobv88KG7/PChu/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9DLG3/Qyxt/0Msbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/STBt/0kwbf9JMG3/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1A0bP9QNGz/UDRs/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9WOWv/Vjlr/1Y5a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/XT1r/109a/9dPWv/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2NBav9jQWr/Y0Fq/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9qRWn/akVp/2pFaf9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/cElo/3BJaP9wSWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/3dNaP93TWj/d01o/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/9+UWf/flFn/35RZ/+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hVdm/4ZYZ/+GWWf/hlln/4ZZZ/+GWGf/hVdm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/hFZm/4RWZv+EVmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4xbZv+NXWf/j19o/5FhaP+SYmn/k2Np/5Nkaf+TY2n/kmJp/5FhaP+PX2j/jV1n/4xbZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/4taZv+LWmb/i1pm/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5NgZv+VY2f/mGdo/5tqaf+dbWv/n3Br/6FxbP+hcmz/oXFs/59wa/+dbWv/m2pp/5hnaP+VY2f/k2Bm/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+RXmX/kV5l/5FeZf+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mWNk/5tmZf+eamf/om5p/6Zza/+peGz/rHxu/69/b/+wgXD/sYJw/7CBcP+vf2//rHxu/6l4bP+mc2v/om5p/55qZ/+bZmX/mWNk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/mGJk/5hiZP+YYmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/n2dk/6FqZv+lb2f/qXVq/657bP+ygW//t4dx/7qLc/+9j3T/v5F1/7+Sdf+/kXX/vY90/7qLc/+3h3H/soFv/657bP+pdWr/pW9n/6FqZv+fZ2T/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/55mZP+eZmT/nmZk/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6dtZP+rcmb/sHlp/7WAbP+7iG//wI9y/8WVdf/Im3f/y595/82hev/Oonr/zaF6/8ufef/Im3f/xZV1/8CPcv+7iG//tYBs/7B5af+rcmb/p21k/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+lamP/pWpj/6VqY/+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6xwY/+wdWX/tXxo/7qEa//AjG//xpRz/8ycdv/RpHn/1al8/9iufv/asX//2rJ//9qxf//Yrn7/1al8/9Gkef/MnHb/xpRz/8CMb/+6hGv/tXxo/7B1Zf+scGP/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/q25i/6tuYv+rbmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7NzYv+1d2T/uX1n/7+Fav/Ejm7/y5dz/9Ggd//XqXv/3LF+/+C3gf/ju4P/5b6E/+W/hf/lvoT/47uD/+C3gf/csX7/16l7/9Ggd//Ll3P/xI5u/7+Fav+5fWf/tXdk/7NzYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7JyYv+ycmL/snJi/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+5eWL/vX5k/8GGaP/Hjmz/zZhx/9Sidv/arHr/37V+/+S8gv/pw4X/7MiH/+3Lif/uy4n/7cuJ/+zIh//pw4X/5LyC/9+1fv/arHr/1KJ2/82Ycf/Hjmz/wYZo/71+ZP+5eWL/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+4d2H/uHdh/7h3Yf+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/wX9i/8WFZf/KjWn/z5Zu/9Wgc//cq3j/4rV9/+e+gv/sxob/8MyJ//PRjP/01I3///C+//TUjf/z0Yz/8MyJ/+zGhv/nvoL/4rV9/9yreP/VoHP/z5Zu/8qNaf/FhWX/wX9i/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/v3tg/797YP+/e2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xoBg/8mEY//Mi2b/0ZNr/9edcP/cqHX/4rJ7/+i8gP/txYX/8c2J//XUjf//8L7///C+///wvv//8L7///C+//XUjf/xzYn/7cWF/+i8gP/isnv/3Kh1/9edcP/Rk2v/zItm/8mEY//GgGD/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8Z/YP/Gf2D/xn9g/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/82EYP/PiWL/05Bm/9eZa//co3H/4q12/+e4fP/swoL/8cuH//XTi///8L7///C+///wvv//8L7///C+///wvv//8L7/9dOL//HLh//swoL/57h8/+Ktdv/co3H/15lr/9OQZv/PiWL/zYRg/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Mg1//zINf/8yDX//Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/UiV//1o1i/9mVZv/dnWv/4qdx/+exd//rvH3/8MaD//TOiP/41o3///C+///wvv//8L7///C+///wvv//8L7///C+//jWjf/0zoj/8MaD/+u8ff/nsXf/4qdx/92da//ZlWb/1o1i/9SJX//Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/04de/9OHXv/Th17/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2o1e/9yRYf/fmGX/4qFr/+aqcf/qtHf/7r59//LIg//20Ij///C+///wvv//8L7///C+///wvv//8L7///C+///wvv//8L7/9tCI//LIg//uvn3/6rR3/+aqcf/ioWv/35hl/9yRYf/ajV7/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/9mLXf/Zi13/2Ytd/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+GRXv/ilWH/5Jtl/+ejav/qrHD/7rZ2//G/ff/0yIP/99CI//rYjf//8L7///C+///wvv//8L7///C+///wvv//8L7/+tiN//fQiP/0yIP/8b99/+62dv/qrHD/56Nq/+SbZf/ilWH/4ZFe/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/gj13/4I9d/+CPXf/mlFz/5pRc/+aUXP/mlFz/5pRc/+aUXP/mlFz/5pRc/+aUXP/mlFz/RjJa/0YyWv9GMlr/RjJa/0YyWv9GMlr/RjJa/0YyWv9GMlr/RjJa/0YyWv9GMlr/RjJa/+aUXP/mlFz/5pRc/+aUXP/mlV3/55lf/+mfZP/spmn/7q5v//G3df/zwHv/9siB//jQhv/61ov///C+///wvv//8L7///C+///wvv//8L7///C+//rWi//40Ib/9siB//PAe//xt3X/7q5v/+ymaf/pn2T/55lf/+aVXf/mlFz/5pRc/+aUXP/mlFz/5pRc/+aUXP/mlFz/5pRc/+aUXP/mlFz/7Zhb/+2YW//tmFv/7Zhb/+2YW//tmFv/7Zhb/+2YW/9GMlr/RjJa/0IvVf9CL1X/Qi9V/0IvVf9CL1X/Qi9V/0IvVf9CL1X/Qi9V/0IvVf9CL1X/Qi9V/0IvVf9GMlr/RjJa/+2YW//tmFv/7Zlb/+6cXv/voWL/8adn//KvbP/0t3L/9r94//jGfv/5zYP/+9OI//zYjP//8L7///C+///wvv//8L7///C+//zYjP/704j/+c2D//jGfv/2v3j/9Ldy//KvbP/xp2f/76Fi/+6cXv/tmVv/7Zhb/+2YW//tmFv/7Zhb/+2YW//tmFv/7Zhb/+2YW//tmFv/7Zhb//OcW//znFv/85xb//OcW//znFv/85xb/0YyWv9GMlr/Qi9V/0IvVf89LFD/PSxQ/z0sUP89LFD/PSxQ/z0sUP89LFD/PSxQ/z0sUP89LFD/PSxQ/z0sUP89LFD/Qi9V/0IvVf9GMlr/RjJa//OcW//znl3/9KNg//WoZf/2r2r/97Zw//i9df/5xHv/+8qA//vQhP/81Ij//diL//3ajP//8L7//dqM//3Yi//81Ij/+9CE//vKgP/5xHv/RjJa/0YyWv9GMlr/RjJa/0YyWv9GMlr/RjJa/0YyWv9GMlr/RjJa/0YyWv/znFv/85xb//OcW//znFv/85xb//OcW//6oFr/+qBa//qgWv/6oFr/RjJa/0YyWv9CL1X/Qi9V/z0sUP89LFD/OSlL/zkpS/85KUv/OSlL/zkpS/85KUv/OSlL/zkpS/85KUv/OSlL/zkpS/85KUv/OSlL/z0sUP89LFD/Qi9V/0IvVf9GMlr/RjJa//qlXv/7qWL/+69n//u1bP/8u3H//MF2//3He//9zID//dCD//7Thv/+1Yf//tWI//7Vh//+04b//dCD//3MgP9GMlr/RjJa/0IvVf9CL1X/Qi9V/0IvVf9CL1X/Qi9V/0IvVf9CL1X/Qi9V/0IvVf9CL1X/RjJa/0YyWv/6oFr/+qBa//qgWv/6oFr/+qBa//qgWv9GMlr/RjJa/0IvVf9CL1X/PSxQ/z0sUP85KUv/OSlL/zUmRv81Jkb/NSZG/zUmRv81Jkb/NSZG/zUmRv81Jkb/NSZG/zUmRv81Jkb/NSZG/zUmRv85KUv/OSlL/z0sUP89LFD/Qi9V/0IvVf9GMlr/RjJa//urZP/7sWj//LZt//y8cv/8wXb//cZ6//3Kfv/9zID//c6B//3Pgv/9zoH//cyA/0YyWv9GMlr/Qi9V/0IvVf89LFD/PSxQ/z0sUP89LFD/PSxQ/z0sUP89LFD/PSxQ/z0sUP89LFD/PSxQ/0IvVf9CL1X/RjJa/0YyWv/6oFr/+qBa//qgWv9GMlr/Qi9V/0IvVf89LFD/PSxQ/zkpS/85KUv/NSZG/zUmRv8wIkH/MCJB/zAiQf8wIkH/MCJB/zAiQf8wIkH/MCJB/zAiQf8wIkH/MCJB/zAiQf8wIkH/NSZG/zUmRv85KUv/OSlL/z0sUP89LFD/Qi9V/0IvVf9GMlr/+61l//uyaf/8tm3//Ltx//y/df/8w3j//cV6//3He//9x3z//cd7/0YyWv9CL1X/Qi9V/z0sUP89LFD/OSlL/zkpS/85KUv/OSlL/zkpS/85KUv/OSlL/zkpS/85KUv/OSlL/zkpS/89LFD/PSxQ/0IvVf9CL1X/RjJa//qgWv9GMlr/Qi9V/z0sUP89LFD/OSlL/zkpS/81Jkb/NSZG/zAiQf8wIkH/LB88/ywfPP8sHzz/LB88/ywfPP8sHzz/LB88/ywfPP8sHzz/LB88/ywfPP8sHzz/LB88/zAiQf8wIkH/NSZG/zUmRv85KUv/OSlL/z0sUP89LFD/Qi9V/0YyWv/7rWX/+7Fo//u1bP/8uW///Lxy//y+dP/8v3X/RjJa/0YyWv9CL1X/PSxQ/z0sUP85KUv/OSlL/zUmRv81Jkb/NSZG/zUmRv81Jkb/NSZG/zUmRv81Jkb/NSZG/zUmRv81Jkb/OSlL/zkpS/89LFD/PSxQ/0IvVf9GMlr/Qi9V/z0sUP85KUv/OSlL/zUmRv81Jkb/MCJB/zAiQf8sHzz/LB88/yccN/8nHDf/Jxw3/yccN/8nHDf/Jxw3/yccN/8nHDf/Jxw3/yccN/8nHDf/Jxw3/yccN/8sHzz/LB88/zAiQf8wIkH/NSZG/zUmRv85KUv/OSlL/z0sUP9CL1X/RjJa//urZP/7r2f/+7Jp//u0bP/8tm3/RjJa/0IvVf9CL1X/PSxQ/zkpS/85KUv/NSZG/zUmRv8wIkH/MCJB/zAiQf8wIkH/MCJB/zAiQf8wIkH/MCJB/zAiQf8wIkH/MCJB/zUmRv81Jkb/OSlL/zkpS/89LFD/Qi9V/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fc1r/n3Rb/592XP+feF7/n3pg/597Yf+ffWL/oH5j/6B/ZP+gf2T/oH9k/6B+Y/+ffWL/n3th/596YP+feF7/n3Zc/590W/+fc1r/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZ07/k2hP/5NqUP+TbVP/k29U/5NxVv+Uc1j/lHVa/5R2W/+Ud1v/lHdb/5R3W/+Udlv/lHVa/5RzWP+TcVb/k29U/5NtU/+TalD/k2hP/5NnTv+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2hO/5NqUP+TbVP/k29V/5RyV/+UdFn/lHdb/5R5Xf+Uel7/lHtf/5R7X/+Ue1//lHpe/5R5Xf+Ud1v/lHRZ/5RyV/+Tb1X/k21T/5NqUP+TaE7/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3Na/591XP+feF7/n3tg/6B+Y/+ggWb/oIRo/6CGav+giWz/oIpt/6CLbv+gi2//oItu/6CKbf+giWz/oIZq/6CEaP+ggWb/oH5j/597YP+feF7/n3Vc/59zWv+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+fcln/n3JZ/59yWf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NoT/+TalH/k25U/5NxVv+UdFn/lHhc/5R7X/+UfmH/lIBj/5WCZf+Vg2X/lYNm/5WDZf+VgmX/lIBj/5R+Yf+Ue1//lHhc/5R0Wf+TcVb/k25U/5NqUf+TaE//k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/k2ZN/5NmTf+TZk3/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49kTv+PZ1D/kGpT/5BuVf+Rcln/kXVb/5J5X/+TfWH/k4Bk/5SCZv+UhGf/lIVo/5WShP+UhWj/lIRn/5SCZv+TgGT/k31h/5J5X/+RdVv/kXJZ/5BuVf+QalP/j2dQ/49kTv+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/49jTf+PY03/j2NN/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5duWf+Yb1v/mHJd/5p1YP+aemL/m35m/5yDaf+dhmz/nopv/5+Ocv+gkHT/oZ6Q/6GekP+hnpD/oZ6Q/6GekP+gkHT/n45y/56Kb/+dhmz/nINp/5t+Zv+aemL/mnVg/5hyXf+Yb1v/l25Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+XbVn/l21Z/5dtWf+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iGJP/4llUv+LaVX/jG1Y/45yW/+Pd1//kHxi/5GAZf+Tg2f/lZKE/5WShP+VkoT/lZKE/5WShP+VkoT/lZKE/5ODZ/+RgGX/kHxi/493X/+Oclv/jG1Y/4tpVf+JZVL/iGJP/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/iF9O/4hfTv+IX07/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hV1P/4VfUP+GY1P/iGdV/4psWf+Mclz/jndg/498Y/+RgGb/k4Rp/5WShP+VkoT/lZKE/5WShP+VkoT/lZKE/5WShP+ThGn/kYBm/498Y/+Od2D/jHJc/4psWf+IZ1X/hmNT/4VfUP+FXU//hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4RcTv+EXE7/hFxO/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/41nW/+OaVz/kG1f/5FyYv+Ud2X/ln1o/5iCbP+aiG//nIxy/6GekP+hnpD/oZ6Q/6GekP+hnpD/oZ6Q/6GekP+hnpD/oZ6Q/5yMcv+aiG//mIJs/5Z9aP+Ud2X/kXJi/5BtX/+OaVz/jWdb/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv+MZlr/jGZa/4xmWv99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/9+WU//f1tR/4BfU/+DZFb/hWlZ/4hvXP+KdWD/jXpj/49/Zv+Rg2n/lZKE/5WShP+VkoT/lZKE/5WShP+VkoT/lZKE/5GDaf+Pf2b/jXpj/4p1YP+Ib1z/hWlZ/4NkVv+AX1P/f1tR/35ZT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//fVhP/31YT/99WE//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//elZQ/3tZUf99XVP/f2JW/4JnWf+FbVz/iHNf/4t4Y/+OfWX/kIJn/5WShP+VkoT/lZKE/5WShP+VkoT/lZKE/5WShP+Qgmf/jn1l/4t4Y/+Ic1//hW1c/4JnWf9/Ylb/fV1T/3tZUf96VlD/eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/3lWT/95Vk//eVZP/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JgXP+EYl3/hWZf/4hqYv+LcGX/jnZn/5F7a/+VgW3/l4Zw/5qKcv+cjnX/oZ6Q/6GekP+hnpD/oZ6Q/6GekP+cjnX/mopy/5eGcP+VgW3/kXtr/452Z/+LcGX/iGpi/4VmX/+EYl3/gmBc/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP+CX1z/gl9c/4JfXP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/c1NR/3VXU/94W1X/e2BY/35mWv+CbF3/hXFg/4h2Y/+LemX/jX5m/4+AaP+Pgmn/lZKE/4+Caf+PgGj/jX5m/4t6Zf+IdmP/hXFg/4JsXf9+Zlr/e2BY/3hbVf91V1P/c1NR/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/clFQ/3JRUP9yUVD/"}},{"n":3,"type":"Label","text":"64 x 48 pixels"}]}}}],"problems":[]},"outline":"Window \"Photo frame\"\n  VBox\n    ImageView 64 x 48, pixels c17e1ae0\n    Label \"64 x 48 pixels\""}],"require":[],"forbid":[]}]}